Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vvws0-00BtoA-1O for pgsql-hackers@arkaria.postgresql.org; Fri, 27 Feb 2026 12:23:00 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vvwrz-003AVy-0T for pgsql-hackers@arkaria.postgresql.org; Fri, 27 Feb 2026 12:22:59 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vvwry-003AVG-2K for pgsql-hackers@lists.postgresql.org; Fri, 27 Feb 2026 12:22:58 +0000 Received: from mail-ed1-x536.google.com ([2a00:1450:4864:20::536]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1vvwrp-00000001ZEB-3Hbr for pgsql-hackers@postgresql.org; Fri, 27 Feb 2026 12:22:52 +0000 Received: by mail-ed1-x536.google.com with SMTP id 4fb4d7f45d1cf-65f812e0d93so3091690a12.2 for ; Fri, 27 Feb 2026 04:22:49 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1772194968; cv=none; d=google.com; s=arc-20240605; b=R+A4oyDYtG5S2Xyj3ltN6PL4zFVuP6jg252AFKfvKJK9wxHd3e3HBdUCEDaDGE3X9W GvJvbqnWUEggMIiyi9aqlHmzNbsIz3VnOyhgQA53RWV95FezZUIOVOdMVzWliIAcfQl/ T3pCMdKQ07HXy8bz5bwTJuuO8/x15fftSaWjTKMQXcB5tgabv44KmLFowfGRxTIFZkV8 UA2wFV4FHMko5/SWPWoXGLEVioPf0rUZGtMxzTMsO0KjhDoJUlXWAIAQxSo8Wn9g9bI5 HJ0GaNLo0maQBcjHKgKK42DWAQVZmyUZlTy1u/q/yfMbhom+OT8Jn6ViFTEYCzAuZN5L dj6Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=Sw8KeaGi4flYNP5yf4UJfGyQ5knhhjXRfp+/nAHyvaA=; fh=G6gQDoC69GnxtHLxW2l2rmPAhh1pinJW6WAiGESk3tw=; b=RGdgL30a9/tmJ24s78x8WbIu186LYiQAvE4T3UyrrHkAUGUs+yJEWMnnrLdlpwf4eK AhMEs1cfTNM1Jx989CTVwrEGrOln8+LSRO5DHqdychyFVYwxWS0oBxbxz77LWuE77ZZZ 1IiU8UOgHw2ycALWlJHN8UhRzuTOpKVfpNTap+8BfadcGvmg+7pZVEWBTunmuQLt/H8n /uUvrh+KIcR459WLKFUzteX/mCaTO/mYya4PoTu28fGkM6a/pFnpsJIe8S7z+kTN24QC 4qFTz4ynBau21bev7Rd2VeMRTo+VpDfMQUv2uWdjcLlGA33ImLcWpn3YGllJ8lUTBEVi YD0g==; darn=postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=enterprisedb.com; s=google; t=1772194968; x=1772799768; darn=postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=Sw8KeaGi4flYNP5yf4UJfGyQ5knhhjXRfp+/nAHyvaA=; b=Fz+FrKgcLIv9woj8oKFWcAoFEsEVaRN3xqVnV2qO8xFu3tDv+GeBhzbSBSa4PtiJf/ Dx4ohp8HMRpnz/AOUqvYu5I2wapsru0v5sGLCu3UV1uTljzzODkdbSx7Uq8wdp1Itquq mZ2fX0MHikTfxsVy1HOCPREODm2J1kfxXOUJwQ7OMLsWHw3wd42uTjReektSsN5GWVZN oWJ7jwVNdQO+aGiFzZKNCiAyG0LwHp21RCJ4Q7fXrwaQK4CEIEeL6sJhfdyxcwBRnNlu LNEe3AIsc6sJhgOZ6y5zaUpRpUtHBjCQOKbJs0I4dKhkqycRmi7HSj6wGYoz1r6mqrAU yFxA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1772194968; x=1772799768; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=Sw8KeaGi4flYNP5yf4UJfGyQ5knhhjXRfp+/nAHyvaA=; b=StlEBbpoZ7sgZDZIqDigGxI9Dwjse5KBurfA3gwCpT1ig2Sx44oShK84jZmOCr/MEe LO50G1fHMm4Tgg4m4B/ucgp3nyAPm906OYOmGnnYMOC3C9vy0iZohQmUAIcHXeENREKG ymF7IQUhyjLZ7gD411Jr+7qqBC2VEOz5fj2SdtXE/8OcKxONKWczwbdlciVNQ9Y16ksb ALOyuX6HjdzTy3ohGa8BrFgJJ4w/YROv0c40J3y74DUgI6RGAnhnst2L9BAwvrdm3ndz 3nEIecOu9NjXCtCvsiNlcTuUwWhmEQN0yd9iln9ptnzxp7rjB2omLatQmIqVzEyPxc0T bH0A== X-Forwarded-Encrypted: i=1; AJvYcCUkrC98vjIiu+jijVqFYQJmx3aW5Zgea3lcWrARiFhh02gKPLj9wgpNGA1mDemNpcLnzPHG+T/JzgfOGaqX@postgresql.org X-Gm-Message-State: AOJu0YwZ7f2lCs3LGi6TTzqU67I1qPeGMCXnZ8DuQy6Vlu+DZ8zo2KqY aDMCRBv5nmMvpM9RhCuMObFD994GK8eu3ppK1nxZkd41X1T9ke0aIMjjWS4hrOS4Vj+cNqPn8R+ pPr6K/q9Ga8u7vS5pqgM30a9MScj0QTvrZb067aF2 X-Gm-Gg: ATEYQzxyFUKKbGx+cYSKDpC2OcUj6Xew2yem2I2lGyZ9doJnjVAmlu4O+az6+VTrAUT urC32xr60gDjh7xMCaXnmN77qrTKT8K4LSeYr9+Lqpp9so+BqkP9MVFVu2xknxKA7ZgJzTDYF6Q kBsnSlc4/sBlBItjBso2pMU32SH5ClaCZpEgBh13MZzvNeYh82f8muzWTQakyZ7UFI88SA8tdV8 JN9DV2jWrKNtBVTSH+UJlopufr/LUSvhGbOZt44c9Eb5+9ZarwiC2f4Eh6YCK66VVXRfCeyEvX6 OsTf+hWY X-Received: by 2002:a05:6402:4306:b0:64d:498b:aefd with SMTP id 4fb4d7f45d1cf-65fdd4cc144mr1700957a12.5.1772194968556; Fri, 27 Feb 2026 04:22:48 -0800 (PST) MIME-Version: 1.0 References: <202602251144.gu4luvkj6e2c@alvherre.pgsql> <0fbd1982-4bc3-4c10-aa66-9446af7dc48a@app.fastmail.com> In-Reply-To: <0fbd1982-4bc3-4c10-aa66-9446af7dc48a@app.fastmail.com> From: Akshay Joshi Date: Fri, 27 Feb 2026 17:52:36 +0530 X-Gm-Features: AaiRm53qBxEwUv2OnPVLhnBbpTlI1NzaJoohHlu8eSy8Wtjldai1PxeZQhf6wrs Message-ID: Subject: Re: [PATCH] Add pg_get_database_ddl() function to reconstruct CREATE DATABASE statement To: Euler Taveira Cc: =?UTF-8?Q?=C3=81lvaro_Herrera?= , Amul Sul , Andrew Dunstan , Chao Li , japin , Quan Zongliang , pgsql-hackers Content-Type: multipart/mixed; boundary="000000000000931c2d064bcd4b57" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000931c2d064bcd4b57 Content-Type: multipart/alternative; boundary="000000000000931c2c064bcd4b55" --000000000000931c2c064bcd4b55 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Following suggestions from Alvaro and Mark, I have re-implemented this feature using variadic function argument pairs. This patch incorporates Mark Wong=E2=80=99s documentation updates, Amul=E2= =80=99s one review comment, and the majority of Euler=E2=80=99s comments. *New changes:* - Supports flexible DDL options as key-value pairs: - pretty - Format output for readability - owner - Include OWNER clause - tablespace - Include TABLESPACE clause - defaults - Include parameters even if it is set to default value. - Option values accept: 'yes'/'on'/true/'1' (or their negatives) *Usage Examples:* -- Basic usage with options SELECT pg_get_database_ddl('mydb', 'owner', 'yes', 'defaults', 'yes'); -- Pretty-printed output without owner and tablespace SELECT pg_get_database_ddl('mydb', 'owner', 'no', 'tablespace', 'no', 'pretty', 'on'); -- Using boolean values SELECT pg_get_database_ddl('mydb', 'owner', false, 'defaults', true); -- Using OID SELECT pg_get_database_ddl(16384, 'pretty', 'yes'); *Note:* To keep things clean, I=E2=80=99ve moved the logic into two generic functions (*get_formatted_string* and *parse_ddl_options*) and a common *DDLOptionDef* struct. This should simplify the work for the rest of the pg_get__ddl patches. Attached is the v9 patch which is ready for review. On Thu, Feb 26, 2026 at 2:49=E2=80=AFAM Euler Taveira w= rote: > On Wed, Feb 25, 2026, at 8:53 AM, =C3=81lvaro Herrera wrote: > > > > I'm surprised to not have seen an update on this topic following the > > discovery by Mark Wong that commit d32d1463995c (in branch 18) already > > established a convention for passing arguments to functions: use argume= nt > > pairs to variadic functions, the way pg_restore_relation_stats() and > > pg_restore_attribute_stats() work. While I like my previous suggestion > > of using DefElems better, I think it's more sensible to follow this > > established precedent and not innovate on this. > > > > This convention is much older than the referred commit. It predates from > the > logical decoding (commit b89e151054a0). See > pg_logical_slot_get_changes_guts() > that is an internal function for pg_logical_slot_FOO_changes(). It seems= a > good idea to have a central function to validate the variadic parameter > for all > of these functions. > > > -- > Euler Taveira > EDB https://www.enterprisedb.com/ > --000000000000931c2c064bcd4b55 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Following suggestions from Alvaro and Mark, I have re-impl= emented this feature using variadic function argument pairs.
This patch = incorporates Mark Wong=E2=80=99s documentation updates, Amul=E2=80=99s one = review comment, and the majority of Euler=E2=80=99s comments.

New= changes:
- Supports flexible DDL options as key-value pairs:
=C2= =A0 =C2=A0 - pretty - Format output for readability
=C2=A0 =C2=A0 - owne= r - Include OWNER clause
=C2=A0 =C2=A0 - tablespace - Include TABLESPACE= clause
=C2=A0 =C2=A0 - defaults - Include parameters even if it is set = to default value.
- Option values accept: 'yes'/'on'/tru= e/'1' (or their negatives)

Usage Examples:
=C2=A0 = -- Basic usage with options
=C2=A0 SELECT pg_get_database_ddl('mydb&= #39;, 'owner', 'yes', 'defaults', 'yes');=C2=A0 -- Pretty-printed output without owner and tablespace
=C2=A0 SE= LECT pg_get_database_ddl('mydb', 'owner', 'no', = 9;tablespace', 'no', 'pretty', 'on');
=C2=A0= -- Using boolean values
=C2=A0 SELECT pg_get_database_ddl('mydb'= ;, 'owner', false, 'defaults', true);
=C2=A0 -- Using OI= D
=C2=A0 SELECT pg_get_database_ddl(16384, 'pretty', 'yes= 9;);

Note: To keep things clean, I=E2=80=99ve moved the logic= into two generic functions (get_formatted_string and parse_ddl_o= ptions) and a common DDLOptionDef struct. This should simplify t= he work for the rest of the pg_get_<object>_ddl patches.

Attac= hed is the v9 patch which is ready for review.


On = Thu, Feb 26, 2026 at 2:49=E2=80=AFAM Euler Taveira <euler@eulerto.com> wrote:
On Wed, Feb 25, 2026, at 8:53 AM, =C3=81l= varo Herrera wrote:
>
> I'm surprised to not have seen an update on this topic following t= he
> discovery by Mark Wong that commit d32d1463995c (in branch 18) already=
> established a convention for passing arguments to functions: use argum= ent
> pairs to variadic functions, the way pg_restore_relation_stats() and > pg_restore_attribute_stats() work.=C2=A0 While I like my previous sugg= estion
> of using DefElems better, I think it's more sensible to follow thi= s
> established precedent and not innovate on this.
>

This convention is much older than the referred commit. It predates from th= e
logical decoding (commit b89e151054a0). See pg_logical_slot_get_changes_gut= s()
that is an internal function for pg_logical_slot_FOO_changes().=C2=A0 It se= ems a
good idea to have a central function to validate the variadic parameter for= all
of these functions.


--
Euler Taveira
EDB=C2=A0 =C2=A0https://www.enterprisedb.com/
--000000000000931c2c064bcd4b55-- --000000000000931c2d064bcd4b57 Content-Type: application/octet-stream; name="v9-0001-Add-pg_get_database_ddl-function-to-reconstruct-ddl.patch" Content-Disposition: attachment; filename="v9-0001-Add-pg_get_database_ddl-function-to-reconstruct-ddl.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mm4uutin0 RnJvbSA4YzFlMzljYmFlNTJhNDRlY2U4ZGQwM2I3NDY2Mzg5MjIyMmY3NDNhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBa3NoYXkgSm9zaGkgPGFrc2hheS5qb3NoaUBlbnRlcnByaXNl ZGIuY29tPgpEYXRlOiBXZWQsIDI0IFNlcCAyMDI1IDE3OjQ3OjU5ICswNTMwClN1YmplY3Q6IFtQ QVRDSCB2OV0gQWRkIHBnX2dldF9kYXRhYmFzZV9kZGwoKSBmdW5jdGlvbiB0byByZWNvbnN0cnVj dCBDUkVBVEUKIERBVEFCQVNFIHN0YXRlbWVudHMuCk1JTUUtVmVyc2lvbjogMS4wCkNvbnRlbnQt VHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOApDb250ZW50LVRyYW5zZmVyLUVuY29kaW5n OiA4Yml0CgpUaGlzIGFkZHMgYSBuZXcgc3lzdGVtIGZ1bmN0aW9uLCBwZ19nZXRfZGF0YWJhc2Vf ZGRsKGRhdGFiYXNlX25hbWUvZGF0YWJhc2Vfb2lkLCBkZGxfb3B0aW9ucyksCndoaWNoIHJlY29u c3RydWN0cyB0aGUgQ1JFQVRFIERBVEFCQVNFIHN0YXRlbWVudCBmb3IgYSBnaXZlbiBkYXRhYmFz ZSBuYW1lIG9yIE9JRC4KClN1cHBvcnRlZCBkZGxfb3B0aW9ucyBhcmUgJ3ByZXR0eScsICdvd25l cicsICd0YWJsZXNwYWNlJyBhbmQgJ2RlZmF1bHRzJyBhbmQgcmVzcGVjdGl2ZQp2YWx1ZXMgY291 bGQgYmUgJ3llcycvJ29uJy90cnVlLycxJy4KClVzYWdlOgpTRUxFQ1QgcGdfZ2V0X2RhdGFiYXNl X2RkbCgncmVncmVzc2lvbl91dGY4JywgJ293bmVyJywgJ25vJywgJ2RlZmF1bHRzJywgJ3llcycp OwpTRUxFQ1QgcGdfZ2V0X2RhdGFiYXNlX2RkbCgncmVncmVzc2lvbl91dGY4JywgJ293bmVyJywg JzAnLCAndGFibGVzcGFjZScsICcwJywgJ2RlZmF1bHRzJywgJzEnKTsKU0VMRUNUIHBnX2dldF9k YXRhYmFzZV9kZGwoJ3JlZ3Jlc3Npb25fdXRmOCcsICdvd25lcicsICdvZmYnLCAncHJldHR5Jywg J29uJyk7ClNFTEVDVCBwZ19nZXRfZGF0YWJhc2VfZGRsKCdyZWdyZXNzaW9uX3V0ZjgnLCAnb3du ZXInLCBmYWxzZSwgJ2RlZmF1bHRzJywgJ3RydWUnLCAndGFibGVzcGFjZScsICdubycpOwoKUmVm ZXJlbmNlOiBQRy0xNTAKQXV0aG9yOiBBa3NoYXkgSm9zaGkgPGFrc2hheS5qb3NoaUBlbnRlcnBy aXNlZGIuY29tPgpSZXZpZXdlZC1ieTogw4FsdmFybyBIZXJyZXJhIDxhbHZoZXJyZUBrdXJpbGVt dS5kZT4KUmV2aWV3ZWQtYnk6IEV1bGVyIFRhdmVpcmEgPGV1bGVyQGV1bGVydG8uY29tPgpSZXZp ZXdlZC1ieTogUXVhbiBab25nbGlhbmcgPHF1YW56b25nbGlhbmdAeWVhaC5uZXQ+ClJldmlld2Vk LWJ5OiBKYXBpbiBMaSA8amFwaW5saUBob3RtYWlsLmNvbT4KUmV2aWV3ZWQtYnk6IENoYW8gTGkg PGxpLmV2YW4uY2hhb0BnbWFpbC5jb20+Ci0tLQogZG9jL3NyYy9zZ21sL2Z1bmMvZnVuYy1pbmZv LnNnbWwgICAgICAgICB8ICA4NiArKysrKwogc3JjL2JhY2tlbmQvY2F0YWxvZy9zeXN0ZW1fZnVu Y3Rpb25zLnNxbCB8ICAgNiArCiBzcmMvYmFja2VuZC91dGlscy9hZHQvcnVsZXV0aWxzLmMgICAg ICAgIHwgMzk3ICsrKysrKysrKysrKysrKysrKysrKysrCiBzcmMvaW5jbHVkZS9jYXRhbG9nL3Bn X3Byb2MuZGF0ICAgICAgICAgIHwgICA3ICsKIHNyYy9pbmNsdWRlL3V0aWxzL2RkbF9kZWZhdWx0 cy5oICAgICAgICAgfCAgMzkgKysrCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2RhdGFiYXNl Lm91dCAgIHwgMTcwICsrKysrKysrKysKIHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2RhdGFiYXNlLnNx bCAgICAgICAgfCAxMDggKysrKysrCiA3IGZpbGVzIGNoYW5nZWQsIDgxMyBpbnNlcnRpb25zKCsp CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2luY2x1ZGUvdXRpbHMvZGRsX2RlZmF1bHRzLmgKCmRp ZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvZnVuYy9mdW5jLWluZm8uc2dtbCBiL2RvYy9zcmMvc2dt bC9mdW5jL2Z1bmMtaW5mby5zZ21sCmluZGV4IDI5NGY0NWU4MmEzLi5jMzQ2YjhkMWZjZiAxMDA2 NDQKLS0tIGEvZG9jL3NyYy9zZ21sL2Z1bmMvZnVuYy1pbmZvLnNnbWwKKysrIGIvZG9jL3NyYy9z Z21sL2Z1bmMvZnVuYy1pbmZvLnNnbWwKQEAgLTM4NDUsNCArMzg0NSw5MCBAQCBhY2wgICAgICB8 IHtwb3N0Z3Jlcz1hcndkRHh0bS9wb3N0Z3Jlcyxmb289ci9wb3N0Z3Jlc30KIAogICA8L3NlY3Qy PgogCisgIDxzZWN0MiBpZD0iZnVuY3Rpb25zLWdldC1vYmplY3QtZGRsIj4KKyAgIDx0aXRsZT5H ZXQgT2JqZWN0IERETCBGdW5jdGlvbnM8L3RpdGxlPgorCisgICA8cGFyYT4KKyAgICBUaGUgZnVu Y3Rpb25zIGRlc2NyaWJlZCBpbiA8eHJlZiBsaW5rZW5kPSJmdW5jdGlvbnMtZ2V0LW9iamVjdC1k ZGwtdGFibGUiLz4KKyAgICByZXR1cm4gdGhlIERhdGEgRGVmaW5pdGlvbiBMYW5ndWFnZSAoRERM KSBzdGF0ZW1lbnQgZm9yIGFueSBnaXZlbiBkYXRhYmFzZSBvYmplY3QuCisgICAgVGhpcyBmZWF0 dXJlIGlzIGltcGxlbWVudGVkIGFzIGEgc2V0IG9mIGRpc3RpbmN0IGZ1bmN0aW9ucyBmb3IgZWFj aCBvYmplY3QgdHlwZS4KKyAgIDwvcGFyYT4KKworICAgPHRhYmxlIGlkPSJmdW5jdGlvbnMtZ2V0 LW9iamVjdC1kZGwtdGFibGUiPgorICAgIDx0aXRsZT5HZXQgT2JqZWN0IERETCBGdW5jdGlvbnM8 L3RpdGxlPgorICAgIDx0Z3JvdXAgY29scz0iMSI+CisgICAgIDx0aGVhZD4KKyAgICAgIDxyb3c+ CisgICAgICAgPGVudHJ5IHJvbGU9ImZ1bmNfdGFibGVfZW50cnkiPjxwYXJhIHJvbGU9ImZ1bmNf c2lnbmF0dXJlIj4KKyAgICAgICAgRnVuY3Rpb24KKyAgICAgICA8L3BhcmE+CisgICAgICAgPHBh cmE+CisgICAgICAgIERlc2NyaXB0aW9uCisgICAgICAgPC9wYXJhPjwvZW50cnk+CisgICAgICA8 L3Jvdz4KKyAgICAgPC90aGVhZD4KKworICAgICA8dGJvZHk+CisgICAgICA8cm93PgorICAgICAg IDxlbnRyeSByb2xlPSJmdW5jX3RhYmxlX2VudHJ5Ij48cGFyYSByb2xlPSJmdW5jX3NpZ25hdHVy ZSI+CisgICAgICAgIDxpbmRleHRlcm0+CisgICAgICAgICA8cHJpbWFyeT5wZ19nZXRfZGF0YWJh c2VfZGRsPC9wcmltYXJ5PgorICAgICAgICA8L2luZGV4dGVybT4KKyAgICAgICAgPGZ1bmN0aW9u PnBnX2dldF9kYXRhYmFzZV9kZGw8L2Z1bmN0aW9uPgorICAgICAgICAoIDxwYXJhbWV0ZXI+ZGF0 YWJhc2VfaWQ8L3BhcmFtZXRlcj4gPHR5cGU+cmVnZGF0YWJhc2U8L3R5cGU+CisgICAgICAgIDxv cHRpb25hbD4sIDxsaXRlcmFsPlZBUklBRElDPC9saXRlcmFsPiA8cGFyYW1ldGVyPm9wdGlvbnM8 L3BhcmFtZXRlcj4KKyAgICAgICAgPHR5cGU+ImFueSI8L3R5cGU+IDwvb3B0aW9uYWw+ICkKKyAg ICAgICAgPHJldHVybnZhbHVlPnRleHQ8L3JldHVybnZhbHVlPgorICAgICAgIDwvcGFyYT4KKyAg ICAgICA8cGFyYT4KKyAgICAgICAgUmVjb25zdHJ1Y3RzIHRoZSA8Y29tbWFuZD5DUkVBVEUgREFU QUJBU0U8L2NvbW1hbmQ+IHN0YXRlbWVudCBmcm9tIHRoZQorICAgICAgICBzeXN0ZW0gY2F0YWxv Z3MgZm9yIGEgc3BlY2lmaWVkIGRhdGFiYXNlIGJ5IG5hbWUgb3IgT0lELiBUaGUgb3B0aW9uYWwK KyAgICAgICAgdmFyaWFkaWMgYXJndW1lbnRzIGFyZSBuYW1lL3ZhbHVlIHBhaXJzIHRvIGNvbnRy b2wgdGhlIG91dHB1dAorICAgICAgICBmb3JtYXR0aW5nIGFuZCBjb250ZW50IChlLmcuLCA8bGl0 ZXJhbD4ncHJldHR5JywgdHJ1ZSwgJ293bmVyJywgZmFsc2U8L2xpdGVyYWw+KS4KKyAgICAgICAg U3VwcG9ydGVkIG9wdGlvbnMgYXJlIGV4cGxhaW5lZCBiZWxvdy4KKyAgICAgICAgPC9wYXJhPjwv ZW50cnk+CisgICAgICA8L3Jvdz4KKyAgICAgPC90Ym9keT4KKyAgICA8L3Rncm91cD4KKyAgIDwv dGFibGU+CisKKyAgPHBhcmE+CisgICAgVGhlIDxwYXJhbWV0ZXI+b3B0aW9uczwvcGFyYW1ldGVy PiBmb3IgPGZ1bmN0aW9uPnBnX2dldF9kYXRhYmFzZV9kZGw8L2Z1bmN0aW9uPgorICAgIHByb3Zp ZGUgZmluZS1ncmFpbmVkIGNvbnRyb2wgb3ZlciB0aGUgZ2VuZXJhdGVkIFNRTC4gT3B0aW9ucyBh cmUgcGFzc2VkIGFzCisgICAgYWx0ZXJuYXRpbmcga2V5L3ZhbHVlIHBhaXJzIHdoZXJlIHRoZSBr ZXkgaXMgYSB0ZXh0IHN0cmluZyBhbmQgdGhlCisgICAgdmFsdWUgaXMgZWl0aGVyIGEgYm9vbGVh biBvciBhIHRleHQgc3RyaW5nIHJlcHJlc2VudGluZyBhIGJvb2xlYW4KKyAgICAoPGxpdGVyYWw+ dHJ1ZTwvbGl0ZXJhbD4sIDxsaXRlcmFsPmZhbHNlPC9saXRlcmFsPiwgPGxpdGVyYWw+eWVzPC9s aXRlcmFsPiwKKyAgICA8bGl0ZXJhbD5ubzwvbGl0ZXJhbD4sIDxsaXRlcmFsPjE8L2xpdGVyYWw+ LCA8bGl0ZXJhbD4wPC9saXRlcmFsPiwKKyAgICA8bGl0ZXJhbD5vbjwvbGl0ZXJhbD4sIDxsaXRl cmFsPm9mZjwvbGl0ZXJhbD4pOgorICAgIDxpdGVtaXplZGxpc3Q+CisgICAgPGxpc3RpdGVtPgor ICAgICAgPHBhcmE+CisgICAgICA8bGl0ZXJhbD4ncHJldHR5JywgdHJ1ZTwvbGl0ZXJhbD4gKG9y IDxsaXRlcmFsPidwcmV0dHknLCAneWVzJzwvbGl0ZXJhbD4pOgorICAgICAgQWRkcyBuZXdsaW5l cyBhbmQgaW5kZW50YXRpb24gZm9yIGJldHRlciByZWFkYWJpbGl0eS4KKyAgICAgIDwvcGFyYT4K KyAgICA8L2xpc3RpdGVtPgorICAgIDxsaXN0aXRlbT4KKyAgICAgIDxwYXJhPgorICAgICAgPGxp dGVyYWw+J293bmVyJywgZmFsc2U8L2xpdGVyYWw+IChvciA8bGl0ZXJhbD4nb3duZXInLCAnbm8n PC9saXRlcmFsPik6CisgICAgICBPbWl0cyB0aGUgPGxpdGVyYWw+T1dORVI8L2xpdGVyYWw+IGNs YXVzZSBmcm9tIHRoZSByZWNvbnN0cnVjdGVkIHN0YXRlbWVudC4KKyAgICAgIDwvcGFyYT4KKyAg ICA8L2xpc3RpdGVtPgorICAgIDxsaXN0aXRlbT4KKyAgICAgIDxwYXJhPgorICAgICAgPGxpdGVy YWw+J3RhYmxlc3BhY2UnLCBmYWxzZTwvbGl0ZXJhbD4gKG9yIDxsaXRlcmFsPid0YWJsZXNwYWNl JywgJzAnPC9saXRlcmFsPik6CisgICAgICBPbWl0cyB0aGUgPGxpdGVyYWw+VEFCTEVTUEFDRTwv bGl0ZXJhbD4gY2xhdXNlIGZyb20gdGhlIHJlY29uc3RydWN0ZWQgc3RhdGVtZW50LgorICAgICAg PC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICAgPGxpc3RpdGVtPgorICAgICAgPHBhcmE+Cisg ICAgICA8bGl0ZXJhbD4nZGVmYXVsdHMnLCB0cnVlPC9saXRlcmFsPiAob3IgPGxpdGVyYWw+J2Rl ZmF1bHRzJywgJzEnPC9saXRlcmFsPik6CisgICAgICBJbmNsdWRlcyBjbGF1c2VzIGZvciBwYXJh bWV0ZXJzIHRoYXQgYXJlIGN1cnJlbnRseSBhdCB0aGVpciBkZWZhdWx0IHZhbHVlcworICAgICAg KGUuZy4sIDxsaXRlcmFsPkNPTk5FQ1RJT04gTElNSVQgLTE8L2xpdGVyYWw+KSwgd2hpY2ggYXJl IG5vcm1hbGx5IG9taXR0ZWQgZm9yIGJyZXZpdHkuCisgICAgICA8L3BhcmE+CisgICAgPC9saXN0 aXRlbT4KKyAgICA8L2l0ZW1pemVkbGlzdD4KKyAgPC9wYXJhPgorCisgIDwvc2VjdDI+CisKICAg PC9zZWN0MT4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvc3lzdGVtX2Z1bmN0aW9u cy5zcWwgYi9zcmMvYmFja2VuZC9jYXRhbG9nL3N5c3RlbV9mdW5jdGlvbnMuc3FsCmluZGV4IDY5 Njk5Zjg4MzBhLi5hZTU3M2UyZmIyYyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9z eXN0ZW1fZnVuY3Rpb25zLnNxbAorKysgYi9zcmMvYmFja2VuZC9jYXRhbG9nL3N5c3RlbV9mdW5j dGlvbnMuc3FsCkBAIC0zNzgsNiArMzc4LDEyIEBAIEJFR0lOIEFUT01JQwogRU5EOwogCiAKK0NS RUFURSBPUiBSRVBMQUNFIEZVTkNUSU9OCisgIHBnX2dldF9kYXRhYmFzZV9kZGwoZGF0YWJhc2Vf aWQgcmVnZGF0YWJhc2UsIFZBUklBRElDIG9wdGlvbnMgImFueSIgREVGQVVMVCBOVUxMKQorUkVU VVJOUyB0ZXh0CitMQU5HVUFHRSBpbnRlcm5hbAorQVMgJ3BnX2dldF9kYXRhYmFzZV9kZGwnOwor CiAtLQogLS0gVGhlIGRlZmF1bHQgcGVybWlzc2lvbnMgZm9yIGZ1bmN0aW9ucyBtZWFuIHRoYXQg YW55b25lIGNhbiBleGVjdXRlIHRoZW0uCiAtLSBBIG51bWJlciBvZiBmdW5jdGlvbnMgc2hvdWxk bid0IGJlIGV4ZWN1dGFibGUgYnkganVzdCBhbnlvbmUsIGJ1dCByYXRoZXIKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2Fk dC9ydWxldXRpbHMuYwppbmRleCBmMTZmMTUzNTc4NS4uOTg4ZDlkMmIzNmEgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMuYworKysgYi9zcmMvYmFja2VuZC91dGls cy9hZHQvcnVsZXV0aWxzLmMKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJjYXRhbG9nL3Bn X2F1dGhpZC5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfY29sbGF0aW9uLmgiCiAjaW5jbHVkZSAi Y2F0YWxvZy9wZ19jb25zdHJhaW50LmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19kYXRhYmFzZS5o IgogI2luY2x1ZGUgImNhdGFsb2cvcGdfZGVwZW5kLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19s YW5ndWFnZS5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfb3BjbGFzcy5oIgpAQCAtNTcsOCArNTgs MTAgQEAKICNpbmNsdWRlICJyZXdyaXRlL3Jld3JpdGVIYW5kbGVyLmgiCiAjaW5jbHVkZSAicmV3 cml0ZS9yZXdyaXRlTWFuaXAuaCIKICNpbmNsdWRlICJyZXdyaXRlL3Jld3JpdGVTdXBwb3J0Lmgi CisjaW5jbHVkZSAidXRpbHMvYWNsLmgiCiAjaW5jbHVkZSAidXRpbHMvYXJyYXkuaCIKICNpbmNs dWRlICJ1dGlscy9idWlsdGlucy5oIgorI2luY2x1ZGUgInV0aWxzL2RkbF9kZWZhdWx0cy5oIgog I2luY2x1ZGUgInV0aWxzL2ZtZ3JvaWRzLmgiCiAjaW5jbHVkZSAidXRpbHMvZ3VjLmgiCiAjaW5j bHVkZSAidXRpbHMvaHNlYXJjaC5oIgpAQCAtODksMTEgKzkyLDQ1IEBACiAjZGVmaW5lIFBSRVRU WUZMQUdfSU5ERU5UCQkweDAwMDIKICNkZWZpbmUgUFJFVFRZRkxBR19TQ0hFTUEJCTB4MDAwNAog CisvKiBEREwgT3B0aW9ucyBmbGFncyAqLworI2RlZmluZSBQR19ERExfUFJFVFRZX0lOREVOVAkw eDAwMDAwMDAxCisjZGVmaW5lIFBHX0RETF9XSVRIX0RFRkFVTFRTCTB4MDAwMDAwMDIKKyNkZWZp bmUgUEdfRERMX05PX09XTkVSCQkJMHgwMDAwMDAwNAorI2RlZmluZSBQR19ERExfTk9fVEFCTEVT UEFDRQkweDAwMDAwMDA4CisKKy8qCisgKiBTdHJ1Y3R1cmUgdG8gZGVmaW5lIERETCBvcHRpb25z IGZvciBwYXJzZV9kZGxfb3B0aW9ucygpLgorICogVGhpcyBhbGxvd3MgZWFzeSBhZGRpdGlvbiBv ZiBuZXcgb3B0aW9ucyBpbiB0aGUgZnV0dXJlLgorICovCit0eXBlZGVmIHN0cnVjdCBERExPcHRp b25EZWYKK3sKKwljb25zdCBjaGFyICpuYW1lOwkJCS8qIE9wdGlvbiBuYW1lIChjYXNlLWluc2Vu c2l0aXZlKSAqLworCXVpbnQ2NAkJZmxhZzsJCQkvKiBGbGFnIHRvIHNldCAqLworCWJvb2wJCXNl dF9vbl90cnVlOwkvKiBJZiB0cnVlLCBzZXQgZmxhZyB3aGVuIHZhbHVlIGlzIHRydWU7IGlmCisJ CQkJCQkJCSAqIGZhbHNlLCBzZXQgZmxhZyB3aGVuIHZhbHVlIGlzIGZhbHNlICovCit9CQkJRERM T3B0aW9uRGVmOworCisvKgorICogQXJyYXkgb2Ygc3VwcG9ydGVkIERETCBvcHRpb25zLgorICog VG8gYWRkIGEgbmV3IG9wdGlvbiwgc2ltcGx5IGFkZCBhbiBlbnRyeSB0byB0aGlzIGFycmF5Lgor ICovCitzdGF0aWMgY29uc3QgRERMT3B0aW9uRGVmIGRkbF9vcHRpb25fZGVmc1tdID0geworCXsi cHJldHR5IiwgUEdfRERMX1BSRVRUWV9JTkRFTlQsIHRydWV9LAorCXsiZGVmYXVsdHMiLCBQR19E RExfV0lUSF9ERUZBVUxUUywgdHJ1ZX0sCisJeyJvd25lciIsIFBHX0RETF9OT19PV05FUiwgZmFs c2V9LAorCXsidGFibGVzcGFjZSIsIFBHX0RETF9OT19UQUJMRVNQQUNFLCBmYWxzZX0sCit9Owor CisKIC8qIFN0YW5kYXJkIGNvbnZlcnNpb24gb2YgYSAiYm9vbCBwcmV0dHkiIG9wdGlvbiB0byBk ZXRhaWxlZCBmbGFncyAqLwogI2RlZmluZSBHRVRfUFJFVFRZX0ZMQUdTKHByZXR0eSkgXAogCSgo cHJldHR5KSA/IChQUkVUVFlGTEFHX1BBUkVOIHwgUFJFVFRZRkxBR19JTkRFTlQgfCBQUkVUVFlG TEFHX1NDSEVNQSkgXAogCSA6IFBSRVRUWUZMQUdfSU5ERU5UKQogCisjZGVmaW5lIEdFVF9ERExf UFJFVFRZX0ZMQUdTKHByZXR0eSkgXAorCSgocHJldHR5KSA/IChQUkVUVFlGTEFHX1BBUkVOIHwg UFJFVFRZRkxBR19JTkRFTlQgfCBQUkVUVFlGTEFHX1NDSEVNQSkgXAorCSA6IDApCisKIC8qIERl ZmF1bHQgbGluZSBsZW5ndGggZm9yIHByZXR0eS1wcmludCB3cmFwcGluZzogMCBtZWFucyB3cmFw IGFsd2F5cyAqLwogI2RlZmluZSBXUkFQX0NPTFVNTl9ERUZBVUxUCQkwCiAKQEAgLTU0Nyw2ICs1 ODQsMTEgQEAgc3RhdGljIHZvaWQgZ2V0X2pzb25fdGFibGVfbmVzdGVkX2NvbHVtbnMoVGFibGVG dW5jICp0ZiwgSnNvblRhYmxlUGxhbiAqcGxhbiwKIAkJCQkJCQkJCQkgIGRlcGFyc2VfY29udGV4 dCAqY29udGV4dCwKIAkJCQkJCQkJCQkgIGJvb2wgc2hvd2ltcGxpY2l0LAogCQkJCQkJCQkJCSAg Ym9vbCBuZWVkY29tbWEpOworc3RhdGljIHZvaWQgZ2V0X2Zvcm1hdHRlZF9zdHJpbmcoU3RyaW5n SW5mbyBidWYsCisJCQkJCQkJCSBpbnQgcHJldHR5RmxhZ3MsCisJCQkJCQkJCSBpbnQgblNwYWNl cywKKwkJCQkJCQkJIGNvbnN0IGNoYXIgKmZtdCwuLi4pIHBnX2F0dHJpYnV0ZV9wcmludGYoNCwg NSk7CitzdGF0aWMgY2hhciAqcGdfZ2V0X2RhdGFiYXNlX2RkbF93b3JrZXIoT2lkIGRiX29pZCwg dWludDY0IGRkbF9mbGFncyk7CiAKICNkZWZpbmUgb25seV9tYXJrZXIocnRlKSAgKChydGUpLT5p bmggPyAiIiA6ICJPTkxZICIpCiAKQEAgLTEzNzYwLDMgKzEzODAyLDM1OCBAQCBnZXRfcmFuZ2Vf cGFydGJvdW5kX3N0cmluZyhMaXN0ICpib3VuZF9kYXR1bXMpCiAKIAlyZXR1cm4gYnVmLmRhdGE7 CiB9CisKKy8qCisgKiBnZXRfZm9ybWF0dGVkX3N0cmluZworICoKKyAqIFJldHVybiBhIGZvcm1h dHRlZCB2ZXJzaW9uIG9mIHRoZSBzdHJpbmcuCisgKgorICogcHJldHR5RmxhZ3MgLSBCYXNlZCBv biBwcmV0dHlGbGFncyB0aGUgb3V0cHV0IGluY2x1ZGVzIHNwYWNlcyBhbmQKKyAqICAgICAgICAg ICAgICAgbmV3bGluZXMgKFxuKS4KKyAqIG5TcGFjZXMgLSBpbmRlbnQgd2l0aCBzcGVjaWZpZWQg bnVtYmVyIG9mIHNwYWNlIGNoYXJhY3RlcnMuCisgKiBmbXQgLSBwcmludGYtc3R5bGUgZm9ybWF0 IHN0cmluZyB1c2VkIGJ5IGFwcGVuZFN0cmluZ0luZm9WQS4KKyAqLworc3RhdGljIHZvaWQKK2dl dF9mb3JtYXR0ZWRfc3RyaW5nKFN0cmluZ0luZm8gYnVmLCBpbnQgcHJldHR5RmxhZ3MsIGludCBu U3BhY2VzLCBjb25zdCBjaGFyICpmbXQsLi4uKQoreworCXZhX2xpc3QJCWFyZ3M7CisKKwlpZiAo cHJldHR5RmxhZ3MgJiBQUkVUVFlGTEFHX0lOREVOVCkKKwl7CisJCWFwcGVuZFN0cmluZ0luZm9D aGFyKGJ1ZiwgJ1xuJyk7CisJCS8qIEluZGVudCB3aXRoIHNwYWNlcyAqLworCQlmb3IgKGludCBp ID0gMDsgaSA8IG5TcGFjZXM7IGkrKykKKwkJeworCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoYnVm LCAnICcpOworCQl9CisJfQorCWVsc2UKKwkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoYnVmLCAnICcp OworCisJdmFfc3RhcnQoYXJncywgZm10KTsKKwlhcHBlbmRTdHJpbmdJbmZvVkEoYnVmLCBmbXQs IGFyZ3MpOworCXZhX2VuZChhcmdzKTsKK30KKworLyoqCisgKiBwYXJzZV9kZGxfb3B0aW9ucyAt IEdlbmVyaWMgaGVscGVyIHRvIHBhcnNlIHZhcmlhZGljIG5hbWUvdmFsdWUgb3B0aW9ucworICog ZmNpbmZvOiBUaGUgRnVuY3Rpb25DYWxsSW5mbyBmcm9tIHRoZSBjYWxsaW5nIGZ1bmN0aW9uCisg KiB2YXJpYWRpY19zdGFydDogVGhlIGFyZ3VtZW50IHBvc2l0aW9uIHdoZXJlIHZhcmlhZGljIGFy Z3VtZW50cyBzdGFydAorICoKKyAqIFJldHVybnM6IEJpdG1hc2sgb2YgZmxhZ3MgYmFzZWQgb24g dGhlIHBhcnNlZCBvcHRpb25zLgorICoKKyAqIE9wdGlvbnMgYXJlIHBhc3NlZCBhcyBuYW1lL3Zh bHVlIHBhaXJzLgorICogRm9yIGV4YW1wbGU6IHBnX2dldF9kYXRhYmFzZV9kZGwoJ215ZGInLCAn b3duZXInLCBmYWxzZSwgJ3ByZXR0eScsIHRydWUpCisgKi8KK3N0YXRpYyB1aW50NjQKK3BhcnNl X2RkbF9vcHRpb25zKEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvLCBpbnQgdmFyaWFkaWNfc3RhcnQp Cit7CisJdWludDY0CQlmbGFncyA9IDA7CisJRGF0dW0JICAgKmFyZ3M7CisJYm9vbAkgICAqbnVs bHM7CisJT2lkCQkgICAqdHlwZXM7CisJaW50CQkJbmFyZ3M7CisJaW50CQkJaTsKKworCS8qIEV4 dHJhY3QgdmFyaWFkaWMgYXJndW1lbnRzICovCisJbmFyZ3MgPSBleHRyYWN0X3ZhcmlhZGljX2Fy Z3MoZmNpbmZvLCB2YXJpYWRpY19zdGFydCwgdHJ1ZSwKKwkJCQkJCQkJICAmYXJncywgJnR5cGVz LCAmbnVsbHMpOworCisJLyogSWYgbm8gb3B0aW9ucyBwcm92aWRlZCAoVkFSSUFESUMgTlVMTCks IHJldHVybiB0aGUgZW1wdHkgYml0bWFzayAqLworCWlmIChuYXJncyA8IDApCisJCXJldHVybiBm bGFnczsKKworCS8qCisJICogSGFuZGxlIHRoZSBjYXNlIHdoZXJlIERFRkFVTFQgTlVMTCB3YXMg dXNlZCBhbmQgbm8gZXhwbGljaXQgdmFyaWFkaWMKKwkgKiBhcmd1bWVudHMgd2VyZSBwcm92aWRl ZC4gSW4gdGhpcyBjYXNlLCB3ZSBnZXQgYSBzaW5nbGUgTlVMTCBhcmd1bWVudC4KKwkgKi8KKwlp ZiAobmFyZ3MgPT0gMSAmJiBudWxsc1swXSkKKwkJcmV0dXJuIGZsYWdzOworCisJLyogTm8gYXJn dW1lbnRzIHByb3ZpZGVkICovCisJaWYgKG5hcmdzID09IDApCisJCXJldHVybiBmbGFnczsKKwor CS8qIEFyZ3VtZW50cyBtdXN0IGNvbWUgaW4gbmFtZS92YWx1ZSBwYWlycyAqLworCWlmIChuYXJn cyAlIDIgIT0gMCkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFM SURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkgZXJybXNnKCJhcmd1bWVudCBsaXN0IG11c3QgaGF2 ZSBldmVuIG51bWJlciBvZiBlbGVtZW50cyIpLAorCQkJCSBlcnJoaW50KCJUaGUgYXJndW1lbnRz IG9mICVzIG11c3QgY29uc2lzdCBvZiBhbHRlcm5hdGluZyBrZXlzIGFuZCB2YWx1ZXMuIiwKKwkJ CQkJCSAicGdfZ2V0X2RhdGFiYXNlX2RkbCgpIikpKTsKKworCWZvciAoaSA9IDA7IGkgPCBuYXJn czsgaSArPSAyKQorCXsKKwkJY2hhcgkgICAqbmFtZTsKKwkJYm9vbAkJYnZhbDsKKworCQkvKiBL ZXkgbXVzdCBub3QgYmUgbnVsbCAqLworCQlpZiAobnVsbHNbaV0pCisJCQllcmVwb3J0KEVSUk9S LAorCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJ IGVycm1zZygiYXJndW1lbnQgJWQ6IGtleSBtdXN0IG5vdCBiZSBudWxsIiwgaSArIDEpKSk7CisK KwkJLyogS2V5IG11c3QgYmUgdGV4dCB0eXBlICovCisJCWlmICh0eXBlc1tpXSAhPSBURVhUT0lE KQorCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFN RVRFUl9WQUxVRSksCisJCQkJCSBlcnJtc2coImFyZ3VtZW50ICVkOiBrZXkgbXVzdCBiZSB0ZXh0 IHR5cGUiLCBpICsgMSkpKTsKKworCQluYW1lID0gVGV4dERhdHVtR2V0Q1N0cmluZyhhcmdzW2ld KTsKKworCQkvKiBWYWx1ZSBtdXN0IG5vdCBiZSBudWxsICovCisJCWlmIChudWxsc1tpICsgMV0p CisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1F VEVSX1ZBTFVFKSwKKwkJCQkJIGVycm1zZygiYXJndW1lbnQgJWQ6IHZhbHVlIG11c3Qgbm90IGJl IG51bGwgZm9yIGtleSBcIiVzXCIiLAorCQkJCQkJCWkgKyAyLCBuYW1lKSkpOworCisJCS8qIFZh bHVlIG11c3QgYmUgYm9vbGVhbiBvciB0ZXh0IHR5cGUgKi8KKwkJaWYgKHR5cGVzW2kgKyAxXSA9 PSBCT09MT0lEKQorCQl7CisJCQlidmFsID0gRGF0dW1HZXRCb29sKGFyZ3NbaSArIDFdKTsKKwkJ fQorCQllbHNlIGlmICh0eXBlc1tpICsgMV0gPT0gVEVYVE9JRCkKKwkJeworCQkJY2hhcgkgICAq dmFsc3RyID0gVGV4dERhdHVtR2V0Q1N0cmluZyhhcmdzW2kgKyAxXSk7CisKKwkJCWlmICghcGFy c2VfYm9vbCh2YWxzdHIsICZidmFsKSkKKwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJKGVycmNv ZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJCQkgZXJybXNnKCJhcmd1 bWVudCAlZDogaW52YWxpZCB2YWx1ZSBcIiVzXCIgZm9yIGtleSBcIiVzXCIiLAorCQkJCQkJCQlp ICsgMiwgdmFsc3RyLCBuYW1lKSwKKwkJCQkJCSBlcnJoaW50KCJWYWxpZCB2YWx1ZXMgYXJlOiB0 cnVlLCBmYWxzZSwgeWVzLCBubywgMSwgMCwgb24sIG9mZi4iKSkpOworCQkJcGZyZWUodmFsc3Ry KTsKKwkJfQorCQllbHNlCisJCXsKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJjb2RlKEVS UkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkgZXJybXNnKCJhcmd1bWVudCAl ZDogdmFsdWUgZm9yIGtleSBcIiVzXCIgbXVzdCBiZSBib29sZWFuIG9yIHRleHQgdHlwZSIsCisJ CQkJCQkJaSArIDIsIG5hbWUpKSk7CisJCX0KKworCQkvKgorCQkgKiBMb29rIHVwIHRoZSBvcHRp b24gaW4gdGhlIGRkbF9vcHRpb25fZGVmcyBhcnJheSBhbmQgc2V0IHRoZQorCQkgKiBhcHByb3By aWF0ZSBmbGFnIGJhc2VkIG9uIHRoZSB2YWx1ZS4KKwkJICovCisJCXsKKwkJCWJvb2wJCWZvdW5k ID0gZmFsc2U7CisJCQlpbnQJCQlqOworCisJCQlmb3IgKGogPSAwOyBqIDwgbGVuZ3Rob2YoZGRs X29wdGlvbl9kZWZzKTsgaisrKQorCQkJeworCQkJCWNvbnN0CQlERExPcHRpb25EZWYgKm9wdCA9 ICZkZGxfb3B0aW9uX2RlZnNbal07CisKKwkJCQlpZiAocGdfc3RyY2FzZWNtcChuYW1lLCBvcHQt Pm5hbWUpID09IDApCisJCQkJeworCQkJCQkvKgorCQkJCQkgKiBTZXQgdGhlIGZsYWcgaWYgdGhl IHZhbHVlIG1hdGNoZXMgdGhlIHNldF9vbl90cnVlCisJCQkJCSAqIGNvbmRpdGlvbjogaWYgc2V0 X29uX3RydWUgaXMgdHJ1ZSwgc2V0IGZsYWcgd2hlbiBidmFsCisJCQkJCSAqIGlzIHRydWU7IGlm IHNldF9vbl90cnVlIGlzIGZhbHNlLCBzZXQgZmxhZyB3aGVuIGJ2YWwgaXMKKwkJCQkJICogZmFs c2UuCisJCQkJCSAqLworCQkJCQlpZiAoYnZhbCA9PSBvcHQtPnNldF9vbl90cnVlKQorCQkJCQkJ ZmxhZ3MgfD0gb3B0LT5mbGFnOworCisJCQkJCWZvdW5kID0gdHJ1ZTsKKwkJCQkJYnJlYWs7CisJ CQkJfQorCQkJfQorCisJCQlpZiAoIWZvdW5kKQorCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQko ZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJCSBlcnJtc2co InVucmVjb2duaXplZCBvcHRpb246IFwiJXNcIiIsIG5hbWUpKSk7CisJCX0KKworCQlwZnJlZShu YW1lKTsKKwl9CisKKwlyZXR1cm4gZmxhZ3M7Cit9CisKKy8qCisgKiBwZ19nZXRfZGF0YWJhc2Vf ZGRsCisgKgorICogR2VuZXJhdGUgYSBDUkVBVEUgREFUQUJBU0Ugc3RhdGVtZW50IGZvciB0aGUg c3BlY2lmaWVkIGRhdGFiYXNlIG5hbWUgb3Igb2lkLgorICoKKyAqIGRiX29pZCAtIE9JRC9OYW1l IG9mIHRoZSBkYXRhYmFzZSBmb3Igd2hpY2ggdG8gZ2VuZXJhdGUgdGhlIERETC4KKyAqIG9wdGlv bnMgLSBWYXJpYWRpYyBuYW1lL3ZhbHVlIHBhaXJzIHRvIG1vZGlmeSB0aGUgb3V0cHV0LgorICov CitEYXR1bQorcGdfZ2V0X2RhdGFiYXNlX2RkbChQR19GVU5DVElPTl9BUkdTKQoreworCU9pZAkJ CWRiX29pZCA9IFBHX0dFVEFSR19PSUQoMCk7CisJdWludDY0CQlkZGxfZmxhZ3M7CisJY2hhcgkg ICAqcmVzOworCisJLyogUGFyc2UgdmFyaWFkaWMgb3B0aW9ucyBzdGFydGluZyBmcm9tIGFyZ3Vt ZW50IDEgKi8KKwlkZGxfZmxhZ3MgPSBwYXJzZV9kZGxfb3B0aW9ucyhmY2luZm8sIDEpOworCisJ cmVzID0gcGdfZ2V0X2RhdGFiYXNlX2RkbF93b3JrZXIoZGJfb2lkLCBkZGxfZmxhZ3MpOworCisJ aWYgKHJlcyA9PSBOVUxMKQorCQlQR19SRVRVUk5fTlVMTCgpOworCisJUEdfUkVUVVJOX1RFWFRf UChzdHJpbmdfdG9fdGV4dChyZXMpKTsKK30KKworc3RhdGljIGNoYXIgKgorcGdfZ2V0X2RhdGFi YXNlX2RkbF93b3JrZXIoT2lkIGRiX29pZCwgdWludDY0IGRkbF9mbGFncykKK3sKKwljaGFyCSAg ICpkYm93bmVyID0gTlVMTDsKKwlib29sCQlhdHRyX2lzbnVsbDsKKwlEYXR1bQkJZGJ2YWx1ZTsK KwlIZWFwVHVwbGUJdHVwbGVfZGF0YWJhc2U7CisJRm9ybV9wZ19kYXRhYmFzZSBkYmZvcm07CisJ U3RyaW5nSW5mb0RhdGEgYnVmOworCUFjbFJlc3VsdAlhY2xyZXN1bHQ7CisKKwkvKiBWYXJpYWJs ZXMgZm9yIGRkbF9vcHRpb25zIHBhcnNpbmcgKi8KKwlpbnQJCQlwcmV0dHlfZmxhZ3MgPSAwOwor CWJvb2wJCWlzX3dpdGhfZGVmYXVsdHMgPSBmYWxzZTsKKworCS8qIFNldCB0aGUgYXBwcm9wcmlh dGUgZmxhZ3MgKi8KKwlpZiAoZGRsX2ZsYWdzICYgUEdfRERMX1BSRVRUWV9JTkRFTlQpCisJCXBy ZXR0eV9mbGFncyA9IEdFVF9ERExfUFJFVFRZX0ZMQUdTKDEpOworCisJaXNfd2l0aF9kZWZhdWx0 cyA9IChkZGxfZmxhZ3MgJiBQR19ERExfV0lUSF9ERUZBVUxUUykgPyB0cnVlIDogZmFsc2U7CisK KwkvKgorCSAqIFVzZXIgbXVzdCBoYXZlIGNvbm5lY3QgcHJpdmlsZWdlIGZvciB0YXJnZXQgZGF0 YWJhc2UuCisJICovCisJYWNscmVzdWx0ID0gb2JqZWN0X2FjbGNoZWNrKERhdGFiYXNlUmVsYXRp b25JZCwgZGJfb2lkLCBHZXRVc2VySWQoKSwKKwkJCQkJCQkJQUNMX0NPTk5FQ1QpOworCWlmIChh Y2xyZXN1bHQgIT0gQUNMQ0hFQ0tfT0sgJiYKKwkJIWhhc19wcml2c19vZl9yb2xlKEdldFVzZXJJ ZCgpLCBST0xFX1BHX1JFQURfQUxMX1NUQVRTKSkKKwl7CisJCWFjbGNoZWNrX2Vycm9yKGFjbHJl c3VsdCwgT0JKRUNUX0RBVEFCQVNFLAorCQkJCQkgICBnZXRfZGF0YWJhc2VfbmFtZShkYl9vaWQp KTsKKwl9CisKKwkvKiBMb29rIHVwIHRoZSBkYXRhYmFzZSBpbiBwZ19kYXRhYmFzZSAqLworCXR1 cGxlX2RhdGFiYXNlID0gU2VhcmNoU3lzQ2FjaGUxKERBVEFCQVNFT0lELCBPYmplY3RJZEdldERh dHVtKGRiX29pZCkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZCh0dXBsZV9kYXRhYmFzZSkpCisJ CWVyZXBvcnQoRVJST1IsCisJCQkJZXJyY29kZShFUlJDT0RFX1VOREVGSU5FRF9PQkpFQ1QpLAor CQkJCWVycm1zZygiZGF0YWJhc2Ugd2l0aCBvaWQgJXUgZG9lcyBub3QgZXhpc3QiLCBkYl9vaWQp KTsKKworCWRiZm9ybSA9IChGb3JtX3BnX2RhdGFiYXNlKSBHRVRTVFJVQ1QodHVwbGVfZGF0YWJh c2UpOworCisJaW5pdFN0cmluZ0luZm8oJmJ1Zik7CisKKwkvKiBMb29rIHVwIHRoZSBvd25lciBp biB0aGUgc3lzdGVtIGNhdGFsb2cgKi8KKwlpZiAoT2lkSXNWYWxpZChkYmZvcm0tPmRhdGRiYSkp CisJCWRib3duZXIgPSBHZXRVc2VyTmFtZUZyb21JZChkYmZvcm0tPmRhdGRiYSwgZmFsc2UpOwor CisJLyogQnVpbGQgdGhlIENSRUFURSBEQVRBQkFTRSBzdGF0ZW1lbnQgKi8KKwlhcHBlbmRTdHJp bmdJbmZvKCZidWYsICJDUkVBVEUgREFUQUJBU0UgJXMiLAorCQkJCQkgcXVvdGVfaWRlbnRpZmll cihkYmZvcm0tPmRhdG5hbWUuZGF0YSkpOworCWdldF9mb3JtYXR0ZWRfc3RyaW5nKCZidWYsIHBy ZXR0eV9mbGFncywgNCwgIldJVEgiKTsKKworCS8qIFNldCB0aGUgT1dORVIgaW4gdGhlIERETCBp ZiBvd25lciBpcyBub3Qgb21pdHRlZCAqLworCWlmIChPaWRJc1ZhbGlkKGRiZm9ybS0+ZGF0ZGJh KSAmJiAhKGRkbF9mbGFncyAmIFBHX0RETF9OT19PV05FUikpCisJeworCQlnZXRfZm9ybWF0dGVk X3N0cmluZygmYnVmLCBwcmV0dHlfZmxhZ3MsIDgsICJPV05FUiA9ICVzIiwKKwkJCQkJCQkgcXVv dGVfaWRlbnRpZmllcihkYm93bmVyKSk7CisJfQorCisJLyogU2V0IHRoZSBFTkNPRElORyBpbiB0 aGUgRERMICovCisJaWYgKGRiZm9ybS0+ZW5jb2RpbmcgIT0gMCkKKwl7CisJCS8qIElmIGlzX3dp dGhfZGVmYXVsdHMgaXMgdHJ1ZSwgdGhlbiB3ZSBza2lwIGRlZmF1bHQgZW5jb2RpbmcgY2hlY2sg Ki8KKwkJaWYgKGlzX3dpdGhfZGVmYXVsdHMgfHwKKwkJCShwZ19zdHJjYXNlY21wKHBnX2VuY29k aW5nX3RvX2NoYXIoZGJmb3JtLT5lbmNvZGluZyksCisJCQkJCQkgICBERExfREVGQVVMVFMuREFU QUJBU0UuRU5DT0RJTkcpICE9IDApKQorCQl7CisJCQlnZXRfZm9ybWF0dGVkX3N0cmluZygmYnVm LCBwcmV0dHlfZmxhZ3MsIDgsICJFTkNPRElORyA9ICVzIiwKKwkJCQkJCQkJIHF1b3RlX2xpdGVy YWxfY3N0cigKKwkJCQkJCQkJCQkJCQlwZ19lbmNvZGluZ190b19jaGFyKGRiZm9ybS0+ZW5jb2Rp bmcpKSk7CisJCX0KKwl9CisKKwkvKiBGZXRjaCB0aGUgdmFsdWUgb2YgTENfQ09MTEFURSAqLwor CWRidmFsdWUgPSBTeXNDYWNoZUdldEF0dHIoREFUQUJBU0VPSUQsIHR1cGxlX2RhdGFiYXNlLAor CQkJCQkJCSAgQW51bV9wZ19kYXRhYmFzZV9kYXRjb2xsYXRlLCAmYXR0cl9pc251bGwpOworCWlm ICghYXR0cl9pc251bGwpCisJCWdldF9mb3JtYXR0ZWRfc3RyaW5nKCZidWYsIHByZXR0eV9mbGFn cywgOCwgIkxDX0NPTExBVEUgPSAlcyIsCisJCQkJCQkJIHF1b3RlX2xpdGVyYWxfY3N0cihUZXh0 RGF0dW1HZXRDU3RyaW5nKGRidmFsdWUpKSk7CisJLyogRmV0Y2ggdGhlIHZhbHVlIG9mIExDX0NU WVBFICovCisJZGJ2YWx1ZSA9IFN5c0NhY2hlR2V0QXR0cihEQVRBQkFTRU9JRCwgdHVwbGVfZGF0 YWJhc2UsCisJCQkJCQkJICBBbnVtX3BnX2RhdGFiYXNlX2RhdGN0eXBlLCAmYXR0cl9pc251bGwp OworCWlmICghYXR0cl9pc251bGwpCisJCWdldF9mb3JtYXR0ZWRfc3RyaW5nKCZidWYsIHByZXR0 eV9mbGFncywgOCwgIkxDX0NUWVBFID0gJXMiLAorCQkJCQkJCSBxdW90ZV9saXRlcmFsX2NzdHIo VGV4dERhdHVtR2V0Q1N0cmluZyhkYnZhbHVlKSkpOworCS8qIEZldGNoIHRoZSB2YWx1ZSBvZiBM T0NBTEUgKi8KKwlkYnZhbHVlID0gU3lzQ2FjaGVHZXRBdHRyKERBVEFCQVNFT0lELCB0dXBsZV9k YXRhYmFzZSwKKwkJCQkJCQkgIEFudW1fcGdfZGF0YWJhc2VfZGF0bG9jYWxlLCAmYXR0cl9pc251 bGwpOworCWlmICghYXR0cl9pc251bGwgJiYgZGJmb3JtLT5kYXRsb2Nwcm92aWRlciA9PSBDT0xM UFJPVklERVJfQlVJTFRJTikKKwkJZ2V0X2Zvcm1hdHRlZF9zdHJpbmcoJmJ1ZiwgcHJldHR5X2Zs YWdzLCA4LCAiQlVJTFRJTl9MT0NBTEUgPSAlcyIsCisJCQkJCQkJIHF1b3RlX2xpdGVyYWxfY3N0 cihUZXh0RGF0dW1HZXRDU3RyaW5nKGRidmFsdWUpKSk7CisJZWxzZSBpZiAoIWF0dHJfaXNudWxs ICYmIGRiZm9ybS0+ZGF0bG9jcHJvdmlkZXIgPT0gQ09MTFBST1ZJREVSX0lDVSkKKwkJZ2V0X2Zv cm1hdHRlZF9zdHJpbmcoJmJ1ZiwgcHJldHR5X2ZsYWdzLCA4LCAiSUNVX0xPQ0FMRSA9ICVzIiwK KwkJCQkJCQkgcXVvdGVfbGl0ZXJhbF9jc3RyKFRleHREYXR1bUdldENTdHJpbmcoZGJ2YWx1ZSkp KTsKKwllbHNlIGlmICghYXR0cl9pc251bGwpCisJCWdldF9mb3JtYXR0ZWRfc3RyaW5nKCZidWYs IHByZXR0eV9mbGFncywgOCwgIkxPQ0FMRSA9ICVzIiwKKwkJCQkJCQkgcXVvdGVfbGl0ZXJhbF9j c3RyKFRleHREYXR1bUdldENTdHJpbmcoZGJ2YWx1ZSkpKTsKKworCS8qIEZldGNoIHRoZSB2YWx1 ZSBvZiBJQ1VfUlVMRVMgKi8KKwlkYnZhbHVlID0gU3lzQ2FjaGVHZXRBdHRyKERBVEFCQVNFT0lE LCB0dXBsZV9kYXRhYmFzZSwKKwkJCQkJCQkgIEFudW1fcGdfZGF0YWJhc2VfZGF0aWN1cnVsZXMs ICZhdHRyX2lzbnVsbCk7CisJaWYgKCFhdHRyX2lzbnVsbCAmJiBkYmZvcm0tPmRhdGxvY3Byb3Zp ZGVyID09IENPTExQUk9WSURFUl9JQ1UpCisJCWdldF9mb3JtYXR0ZWRfc3RyaW5nKCZidWYsIHBy ZXR0eV9mbGFncywgOCwgIklDVV9SVUxFUyA9ICVzIiwKKwkJCQkJCQkgcXVvdGVfbGl0ZXJhbF9j c3RyKFRleHREYXR1bUdldENTdHJpbmcoZGJ2YWx1ZSkpKTsKKworCS8qIEZldGNoIHRoZSB2YWx1 ZSBvZiBDT0xMQVRJT05fVkVSU0lPTiAqLworCWRidmFsdWUgPSBTeXNDYWNoZUdldEF0dHIoREFU QUJBU0VPSUQsIHR1cGxlX2RhdGFiYXNlLAorCQkJCQkJCSAgQW51bV9wZ19kYXRhYmFzZV9kYXRj b2xsdmVyc2lvbiwgJmF0dHJfaXNudWxsKTsKKwlpZiAoIWF0dHJfaXNudWxsKQorCQlnZXRfZm9y bWF0dGVkX3N0cmluZygmYnVmLCBwcmV0dHlfZmxhZ3MsIDgsICJDT0xMQVRJT05fVkVSU0lPTiA9 ICVzIiwKKwkJCQkJCQkgcXVvdGVfbGl0ZXJhbF9jc3RyKFRleHREYXR1bUdldENTdHJpbmcoZGJ2 YWx1ZSkpKTsKKworCS8qIFNldCB0aGUgYXBwcm9wcmlhdGUgTE9DQUxFX1BST1ZJREVSICovCisJ aWYgKGRiZm9ybS0+ZGF0bG9jcHJvdmlkZXIgPT0gQ09MTFBST1ZJREVSX0JVSUxUSU4pCisJCWdl dF9mb3JtYXR0ZWRfc3RyaW5nKCZidWYsIHByZXR0eV9mbGFncywgOCwgIkxPQ0FMRV9QUk9WSURF UiA9IGJ1aWx0aW4iKTsKKwllbHNlIGlmIChkYmZvcm0tPmRhdGxvY3Byb3ZpZGVyID09IENPTExQ Uk9WSURFUl9JQ1UpCisJCWdldF9mb3JtYXR0ZWRfc3RyaW5nKCZidWYsIHByZXR0eV9mbGFncywg OCwgIkxPQ0FMRV9QUk9WSURFUiA9IGljdSIpOworCWVsc2UgaWYgKGlzX3dpdGhfZGVmYXVsdHMp CisJCWdldF9mb3JtYXR0ZWRfc3RyaW5nKCZidWYsIHByZXR0eV9mbGFncywgOCwgIkxPQ0FMRV9Q Uk9WSURFUiA9IGxpYmMiKTsKKworCS8qIFNldCB0aGUgVEFCTEVTUEFDRSBpbiB0aGUgRERMIGlm IHRhYmxlc3BhY2UgaXMgbm90IG9taXR0ZWQgKi8KKwlpZiAoT2lkSXNWYWxpZChkYmZvcm0tPmRh dHRhYmxlc3BhY2UpICYmICEoZGRsX2ZsYWdzICYgUEdfRERMX05PX1RBQkxFU1BBQ0UpKQorCXsK KwkJLyogR2V0IHRoZSB0YWJsZXNwYWNlIG5hbWUgcmVzcGVjdGl2ZSB0byB0aGUgZ2l2ZW4gdGFi bGVzcGFjZSBvaWQgKi8KKwkJY2hhcgkgICAqZGJUYWJsZXNwYWNlID0gZ2V0X3RhYmxlc3BhY2Vf bmFtZShkYmZvcm0tPmRhdHRhYmxlc3BhY2UpOworCisJCS8qIElmIGl0J3Mgd2l0aCBkZWZhdWx0 cywgd2Ugc2tpcCBkZWZhdWx0IHRhYmxlc3BhY2UgY2hlY2sgKi8KKwkJaWYgKGlzX3dpdGhfZGVm YXVsdHMgfHwKKwkJCShwZ19zdHJjYXNlY21wKGRiVGFibGVzcGFjZSwgRERMX0RFRkFVTFRTLkRB VEFCQVNFLlRBQkxFU1BBQ0UpICE9IDApKQorCQkJZ2V0X2Zvcm1hdHRlZF9zdHJpbmcoJmJ1Ziwg cHJldHR5X2ZsYWdzLCA4LCAiVEFCTEVTUEFDRSA9ICVzIiwKKwkJCQkJCQkJIHF1b3RlX2lkZW50 aWZpZXIoZGJUYWJsZXNwYWNlKSk7CisJfQorCisJaWYgKGlzX3dpdGhfZGVmYXVsdHMgfHwKKwkJ KGRiZm9ybS0+ZGF0YWxsb3djb25uICE9IERETF9ERUZBVUxUUy5EQVRBQkFTRS5BTExPV19DT05O KSkKKwl7CisJCWdldF9mb3JtYXR0ZWRfc3RyaW5nKCZidWYsIHByZXR0eV9mbGFncywgOCwgIkFM TE9XX0NPTk5FQ1RJT05TID0gJXMiLAorCQkJCQkJCSBkYmZvcm0tPmRhdGFsbG93Y29ubiA/ICJ0 cnVlIiA6ICJmYWxzZSIpOworCX0KKworCWlmIChpc193aXRoX2RlZmF1bHRzIHx8CisJCShkYmZv cm0tPmRhdGNvbm5saW1pdCAhPSBERExfREVGQVVMVFMuREFUQUJBU0UuQ09OTl9MSU1JVCkpCisJ eworCQlnZXRfZm9ybWF0dGVkX3N0cmluZygmYnVmLCBwcmV0dHlfZmxhZ3MsIDgsICJDT05ORUNU SU9OIExJTUlUID0gJWQiLAorCQkJCQkJCSBkYmZvcm0tPmRhdGNvbm5saW1pdCk7CisJfQorCisJ aWYgKGRiZm9ybS0+ZGF0aXN0ZW1wbGF0ZSkKKwkJZ2V0X2Zvcm1hdHRlZF9zdHJpbmcoJmJ1Ziwg cHJldHR5X2ZsYWdzLCA4LCAiSVNfVEVNUExBVEUgPSAlcyIsCisJCQkJCQkJIGRiZm9ybS0+ZGF0 aXN0ZW1wbGF0ZSA/ICJ0cnVlIiA6ICJmYWxzZSIpOworCisJYXBwZW5kU3RyaW5nSW5mb0NoYXIo JmJ1ZiwgJzsnKTsKKworCVJlbGVhc2VTeXNDYWNoZSh0dXBsZV9kYXRhYmFzZSk7CisKKwlyZXR1 cm4gYnVmLmRhdGE7Cit9CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2Mu ZGF0IGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdAppbmRleCBkYWM0MDk5MmNiYy4u NWM0M2VlZTMyZWMgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQK KysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdApAQCAtNDAzMSw2ICs0MDMxLDEz IEBACiAgIHByb25hbWUgPT4gJ3BnX2dldF9mdW5jdGlvbl9zcWxib2R5JywgcHJvdm9sYXRpbGUg PT4gJ3MnLAogICBwcm9yZXR0eXBlID0+ICd0ZXh0JywgcHJvYXJndHlwZXMgPT4gJ29pZCcsCiAg IHByb3NyYyA9PiAncGdfZ2V0X2Z1bmN0aW9uX3NxbGJvZHknIH0sCit7IG9pZCA9PiAnOTQ5Mics IGRlc2NyID0+ICdnZXQgQ1JFQVRFIHN0YXRlbWVudCBmb3IgZGF0YWJhc2UgbmFtZSBhbmQgb2lk JywKKyAgcHJvbmFtZSA9PiAncGdfZ2V0X2RhdGFiYXNlX2RkbCcsIHByb3ZhcmlhZGljID0+ICdh bnknLCBwcm9pc3N0cmljdCA9PiAnZicsCisgIHByb3JldHR5cGUgPT4gJ3RleHQnLAorICBwcm9h cmd0eXBlcyA9PiAncmVnZGF0YWJhc2UgYW55JywKKyAgcHJvYXJnbW9kZXMgPT4gJ3tpLHZ9JywK KyAgcHJvYWxsYXJndHlwZXMgPT4gJ3tyZWdkYXRhYmFzZSxhbnl9JywKKyAgcHJvc3JjID0+ICdw Z19nZXRfZGF0YWJhc2VfZGRsJyB9LAogCiB7IG9pZCA9PiAnMTY4NicsIGRlc2NyID0+ICdsaXN0 IG9mIFNRTCBrZXl3b3JkcycsCiAgIHByb25hbWUgPT4gJ3BnX2dldF9rZXl3b3JkcycsIHByb2Nv c3QgPT4gJzEwJywgcHJvcm93cyA9PiAnNTAwJywKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3V0 aWxzL2RkbF9kZWZhdWx0cy5oIGIvc3JjL2luY2x1ZGUvdXRpbHMvZGRsX2RlZmF1bHRzLmgKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmQxN2U4NDNmZTA5Ci0tLSAvZGV2 L251bGwKKysrIGIvc3JjL2luY2x1ZGUvdXRpbHMvZGRsX2RlZmF1bHRzLmgKQEAgLTAsMCArMSwz OSBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogZGRsX2RlZmF1bHRzLmgKKyAqCSAgRGVj bGFyYXRpb25zIGZvciBEREwgZGVmYXVsdHMuCisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChj KSAxOTk2LTIwMjYsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKiBQb3J0 aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2Fs aWZvcm5pYQorICoKKyAqIHNyYy9pbmNsdWRlL3V0aWxzL2RkbF9kZWZhdWx0cy5oCisgKgorICot LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpZm5kZWYgRERMX0RFRkFVTFRTX0gKKyNkZWZpbmUgRERM X0RFRkFVTFRTX0gKKworI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKworc3RhdGljIGNvbnN0IHN0cnVj dAoreworCXN0cnVjdAorCXsKKwkJY29uc3QgY2hhciAqRU5DT0RJTkc7CisJCWNvbnN0IGNoYXIg KlRBQkxFU1BBQ0U7CisJCWludAkJCUNPTk5fTElNSVQ7CisJCWJvb2wJCUFMTE9XX0NPTk47CisJ fQkJCURBVEFCQVNFOworCisJLyogQWRkIG1vcmUgb2JqZWN0IHR5cGVzIGFzIG5lZWRlZCAqLwor fQkJCURETF9ERUZBVUxUUyA9IHsKKworCS5EQVRBQkFTRSA9IHsKKwkJLkVOQ09ESU5HID0gIlVU RjgiLAorCQkuVEFCTEVTUEFDRSA9ICJwZ19kZWZhdWx0IiwKKwkJLkNPTk5fTElNSVQgPSAtMSwK KwkJLkFMTE9XX0NPTk4gPSB0cnVlLAorCX0KK307CisKKyNlbmRpZgkJCQkJCQkvKiBERExfREVG QVVMVFNfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9kYXRhYmFz ZS5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2RhdGFiYXNlLm91dAppbmRleCA2Yjg3 OWIwZjYyYS4uNWI0YWE2YzA1NGQgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0 ZWQvZGF0YWJhc2Uub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvZGF0YWJhc2Uu b3V0CkBAIC0xLDMgKzEsNTcgQEAKKy0tCistLSBSZWNvbnN0cnVjdCBEREwKKy0tCistLSBUbyBw cm9kdWNlIHN0YWJsZSByZWdyZXNzaW9uIHRlc3Qgb3V0cHV0LCBpdCdzIHVzdWFsbHkgbmVjZXNz YXJ5IHRvCistLSBpZ25vcmUgY29sbGF0aW9uIGFuZCBsb2NhbGUgcmVsYXRlZCBkZXRhaWxzLiBU aGlzIGZpbHRlcgorLS0gZnVuY3Rpb25zIHJlbW92ZXMgY29sbGF0aW9uIGFuZCBsb2NhbGUgcmVs YXRlZCBkZXRhaWxzLgorQ1JFQVRFIE9SIFJFUExBQ0UgRlVOQ1RJT04gZGRsX2ZpbHRlcihkZGxf aW5wdXQgVEVYVCkKK1JFVFVSTlMgVEVYVCBBUyAkJAorREVDTEFSRQorICAgIGNsZWFuZWRfZGRs IFRFWFQ7CitCRUdJTgorICAgIC0tIFJlbW92ZSAlTE9DQUxFX1BST1ZJREVSJSBwbGFjZWhvbGRl cnMKKyAgICBjbGVhbmVkX2RkbCA6PSByZWdleHBfcmVwbGFjZSgKKyAgICAgICAgZGRsX2lucHV0 LAorICAgICAgICAnXHMqXG1MT0NBTEVfUFJPVklERVJcTVxzKj1ccyooWycnIl0/W14nJyJcc10r WycnIl0/KScsCisgICAgICAgICcnLAorICAgICAgICAnZ2knCisgICAgKTsKKworCS0tIFJlbW92 ZSBMQ19DT0xMQVRFIGFzc2lnbm1lbnRzCisgICAgY2xlYW5lZF9kZGwgOj0gcmVnZXhwX3JlcGxh Y2UoCisgICAgICAgIGNsZWFuZWRfZGRsLAorICAgICAgICAnXHMqTENfQ09MTEFURVxzKj1ccyoo WycnIl0pW14nJyJdKlwxJywKKyAgICAgICAgJycsCisgICAgICAgICdnaScKKyAgICApOworCisg ICAgLS0gUmVtb3ZlIExDX0NUWVBFIGFzc2lnbm1lbnRzCisgICAgY2xlYW5lZF9kZGwgOj0gcmVn ZXhwX3JlcGxhY2UoCisgICAgICAgIGNsZWFuZWRfZGRsLAorICAgICAgICAnXHMqTENfQ1RZUEVc cyo9XHMqKFsnJyJdKVteJyciXSpcMScsCisgICAgICAgICcnLAorICAgICAgICAnZ2knCisgICAg KTsKKworICAgIC0tIFJlbW92ZSAlTE9DQUxFJSBwbGFjZWhvbGRlcnMKKyAgICBjbGVhbmVkX2Rk bCA6PSByZWdleHBfcmVwbGFjZSgKKyAgICAgICAgY2xlYW5lZF9kZGwsCisgICAgICAgICdccypc UypMT0NBTEVcUypccyo9P1xzKihbJyciXSlbXicnIl0qXDEnLAorCQknJywKKwkJJ2dpJworCSk7 CisKKyAgICAtLSBSZW1vdmUgJUNPTExBVElPTiUgcGxhY2Vob2xkZXJzCisgICAgY2xlYW5lZF9k ZGwgOj0gcmVnZXhwX3JlcGxhY2UoCisgICAgICAgIGNsZWFuZWRfZGRsLAorICAgICAgICAnXHMq XFMqQ09MTEFUSU9OXFMqXHMqPT9ccyooWycnIl0pW14nJyJdKlwxJywKKyAgICAgICAgJycsCisg ICAgICAgICdnaScKKyAgICApOworCisgICAgUkVUVVJOIGNsZWFuZWRfZGRsOworRU5EOworJCQg TEFOR1VBR0UgcGxwZ3NxbDsKIENSRUFURSBEQVRBQkFTRSByZWdyZXNzaW9uX3RiZAogCUVOQ09E SU5HIHV0ZjggTENfQ09MTEFURSAiQyIgTENfQ1RZUEUgIkMiIFRFTVBMQVRFIHRlbXBsYXRlMDsK IEFMVEVSIERBVEFCQVNFIHJlZ3Jlc3Npb25fdGJkIFJFTkFNRSBUTyByZWdyZXNzaW9uX3V0Zjg7 CkBAIC0xNiw2ICs3MCwxMjIgQEAgQ1JFQVRFIFJPTEUgcmVncmVzc19kYXRkYmFfYmVmb3JlOwog Q1JFQVRFIFJPTEUgcmVncmVzc19kYXRkYmFfYWZ0ZXI7CiBBTFRFUiBEQVRBQkFTRSByZWdyZXNz aW9uX3V0ZjggT1dORVIgVE8gcmVncmVzc19kYXRkYmFfYmVmb3JlOwogUkVBU1NJR04gT1dORUQg QlkgcmVncmVzc19kYXRkYmFfYmVmb3JlIFRPIHJlZ3Jlc3NfZGF0ZGJhX2FmdGVyOworLS0gVGVz dCBwZ19nZXRfZGF0YWJhc2VfZGRsCistLSBEYXRhYmFzZSBkb2Vzbid0IGV4aXN0cworU0VMRUNU IHBnX2dldF9kYXRhYmFzZV9kZGwoJ3JlZ3Jlc3Npb25fZGF0YWJhc2UnKTsKK0VSUk9SOiAgZGF0 YWJhc2UgInJlZ3Jlc3Npb25fZGF0YWJhc2UiIGRvZXMgbm90IGV4aXN0CitMSU5FIDE6IFNFTEVD VCBwZ19nZXRfZGF0YWJhc2VfZGRsKCdyZWdyZXNzaW9uX2RhdGFiYXNlJyk7CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF4KKy0tIFRlc3QgTlVMTCB2YWx1ZQorU0VMRUNUIHBn X2dldF9kYXRhYmFzZV9kZGwoTlVMTCk7CitFUlJPUjogIGRhdGFiYXNlIHdpdGggb2lkIDAgZG9l cyBub3QgZXhpc3QKKy0tIFdpdGhvdXQgb3B0aW9ucworU0VMRUNUIGRkbF9maWx0ZXIocGdfZ2V0 X2RhdGFiYXNlX2RkbCgncmVncmVzc2lvbl91dGY4JykpOworICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGRkbF9maWx0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFU RSBEQVRBQkFTRSByZWdyZXNzaW9uX3V0ZjggV0lUSCBPV05FUiA9IHJlZ3Jlc3NfZGF0ZGJhX2Fm dGVyIENPTk5FQ1RJT04gTElNSVQgPSAxMjM7CisoMSByb3cpCisKKy0tIFdpdGggTm8gT3duZXIK K1NFTEVDVCBkZGxfZmlsdGVyKHBnX2dldF9kYXRhYmFzZV9kZGwoJ3JlZ3Jlc3Npb25fdXRmOCcs ICdvd25lcicsIGZhbHNlKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGRkbF9maWx0ZXIg ICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgREFUQUJBU0UgcmVncmVz c2lvbl91dGY4IFdJVEggQ09OTkVDVElPTiBMSU1JVCA9IDEyMzsKKygxIHJvdykKKworLS0gV2l0 aCBObyBUYWJsZXNwYWNlCitTRUxFQ1QgZGRsX2ZpbHRlcihwZ19nZXRfZGF0YWJhc2VfZGRsKCdy ZWdyZXNzaW9uX3V0ZjgnLCAnZGVmYXVsdHMnLCB0cnVlLCAndGFibGVzcGFjZScsIGZhbHNlKSk7 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGRkbF9maWx0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgREFU QUJBU0UgcmVncmVzc2lvbl91dGY4IFdJVEggT1dORVIgPSByZWdyZXNzX2RhdGRiYV9hZnRlciBF TkNPRElORyA9ICdVVEY4JyBBTExPV19DT05ORUNUSU9OUyA9IHRydWUgQ09OTkVDVElPTiBMSU1J VCA9IDEyMzsKKygxIHJvdykKKworLS0gV2l0aCBEZWZhdWx0cworU0VMRUNUIGRkbF9maWx0ZXIo cGdfZ2V0X2RhdGFiYXNlX2RkbCgncmVncmVzc2lvbl91dGY4JywgJ2RlZmF1bHRzJywgdHJ1ZSkp OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBkZGxfZmlsdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIERBVEFCQVNFIHJl Z3Jlc3Npb25fdXRmOCBXSVRIIE9XTkVSID0gcmVncmVzc19kYXRkYmFfYWZ0ZXIgRU5DT0RJTkcg PSAnVVRGOCcgVEFCTEVTUEFDRSA9IHBnX2RlZmF1bHQgQUxMT1dfQ09OTkVDVElPTlMgPSB0cnVl IENPTk5FQ1RJT04gTElNSVQgPSAxMjM7CisoMSByb3cpCisKKy0tIFdpdGggTm8gT3duZXIsIE5v IFRhYmxlc3BhY2UgYW5kIFdpdGggRGVmYXVsdHMKK1NFTEVDVCBkZGxfZmlsdGVyKHBnX2dldF9k YXRhYmFzZV9kZGwoJ3JlZ3Jlc3Npb25fdXRmOCcsICdvd25lcicsIGZhbHNlLCAndGFibGVzcGFj ZScsIGZhbHNlLCAnZGVmYXVsdHMnLCB0cnVlKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGRkbF9maWx0ZXIgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBEQVRBQkFTRSByZWdyZXNzaW9uX3V0ZjggV0lUSCBF TkNPRElORyA9ICdVVEY4JyBBTExPV19DT05ORUNUSU9OUyA9IHRydWUgQ09OTkVDVElPTiBMSU1J VCA9IDEyMzsKKygxIHJvdykKKworLS0gV2l0aCBQcmV0dHkgZm9ybWF0dGVkCitccHNldCBmb3Jt YXQgdW5hbGlnbmVkCitTRUxFQ1QgZGRsX2ZpbHRlcihwZ19nZXRfZGF0YWJhc2VfZGRsKCdyZWdy ZXNzaW9uX3V0ZjgnLCAncHJldHR5JywgdHJ1ZSkpOworZGRsX2ZpbHRlcgorQ1JFQVRFIERBVEFC QVNFIHJlZ3Jlc3Npb25fdXRmOAorICAgIFdJVEgKKyAgICAgICAgT1dORVIgPSByZWdyZXNzX2Rh dGRiYV9hZnRlcgorICAgICAgICBDT05ORUNUSU9OIExJTUlUID0gMTIzOworKDEgcm93KQorLS0g V2l0aCBObyBPd25lciBhbmQgTm8gVGFibGVzcGFjZQorU0VMRUNUIGRkbF9maWx0ZXIocGdfZ2V0 X2RhdGFiYXNlX2RkbCgncmVncmVzc2lvbl91dGY4JywgJ3ByZXR0eScsIHRydWUsICdvd25lcics IGZhbHNlLCAndGFibGVzcGFjZScsIGZhbHNlKSk7CitkZGxfZmlsdGVyCitDUkVBVEUgREFUQUJB U0UgcmVncmVzc2lvbl91dGY4CisgICAgV0lUSAorICAgICAgICBDT05ORUNUSU9OIExJTUlUID0g MTIzOworKDEgcm93KQorLS0gV2l0aCBEZWZhdWx0cworU0VMRUNUIGRkbF9maWx0ZXIocGdfZ2V0 X2RhdGFiYXNlX2RkbCgncmVncmVzc2lvbl91dGY4JywgJ3ByZXR0eScsIHRydWUsICdkZWZhdWx0 cycsIHRydWUpKTsKK2RkbF9maWx0ZXIKK0NSRUFURSBEQVRBQkFTRSByZWdyZXNzaW9uX3V0ZjgK KyAgICBXSVRICisgICAgICAgIE9XTkVSID0gcmVncmVzc19kYXRkYmFfYWZ0ZXIKKyAgICAgICAg RU5DT0RJTkcgPSAnVVRGOCcKKyAgICAgICAgVEFCTEVTUEFDRSA9IHBnX2RlZmF1bHQKKyAgICAg ICAgQUxMT1dfQ09OTkVDVElPTlMgPSB0cnVlCisgICAgICAgIENPTk5FQ1RJT04gTElNSVQgPSAx MjM7CisoMSByb3cpCistLSBXaXRoIE5vIE93bmVyLCBObyBUYWJsZXNwYWNlIGFuZCBXaXRoIERl ZmF1bHRzCitTRUxFQ1QgZGRsX2ZpbHRlcihwZ19nZXRfZGF0YWJhc2VfZGRsKCdyZWdyZXNzaW9u X3V0ZjgnLCAncHJldHR5JywgdHJ1ZSwgJ293bmVyJywgZmFsc2UsICd0YWJsZXNwYWNlJywgZmFs c2UsICdkZWZhdWx0cycsIHRydWUpKTsKK2RkbF9maWx0ZXIKK0NSRUFURSBEQVRBQkFTRSByZWdy ZXNzaW9uX3V0ZjgKKyAgICBXSVRICisgICAgICAgIEVOQ09ESU5HID0gJ1VURjgnCisgICAgICAg IEFMTE9XX0NPTk5FQ1RJT05TID0gdHJ1ZQorICAgICAgICBDT05ORUNUSU9OIExJTUlUID0gMTIz OworKDEgcm93KQorLS0gVGVzdCB3aXRoIHRleHQgdmFsdWVzOiAneWVzJywgJ25vJywgJzEnLCAn MCcsICdvbicsICdvZmYnCitccHNldCBmb3JtYXQgYWxpZ25lZAorLS0gVXNpbmcgJ3llcycgYW5k ICdubycKK1NFTEVDVCBkZGxfZmlsdGVyKHBnX2dldF9kYXRhYmFzZV9kZGwoJ3JlZ3Jlc3Npb25f dXRmOCcsICdvd25lcicsICdubycsICdkZWZhdWx0cycsICd5ZXMnKSk7CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRkbF9maWx0ZXIg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBEQVRBQkFTRSByZWdyZXNzaW9uX3V0ZjggV0lU SCBFTkNPRElORyA9ICdVVEY4JyBUQUJMRVNQQUNFID0gcGdfZGVmYXVsdCBBTExPV19DT05ORUNU SU9OUyA9IHRydWUgQ09OTkVDVElPTiBMSU1JVCA9IDEyMzsKKygxIHJvdykKKworLS0gVXNpbmcg JzEnIGFuZCAnMCcKK1NFTEVDVCBkZGxfZmlsdGVyKHBnX2dldF9kYXRhYmFzZV9kZGwoJ3JlZ3Jl c3Npb25fdXRmOCcsICdvd25lcicsICcwJywgJ3RhYmxlc3BhY2UnLCAnMCcsICdkZWZhdWx0cycs ICcxJykpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk ZGxfZmlsdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVB VEUgREFUQUJBU0UgcmVncmVzc2lvbl91dGY4IFdJVEggRU5DT0RJTkcgPSAnVVRGOCcgQUxMT1df Q09OTkVDVElPTlMgPSB0cnVlIENPTk5FQ1RJT04gTElNSVQgPSAxMjM7CisoMSByb3cpCisKKy0t IFVzaW5nICdvbicgYW5kICdvZmYnCitTRUxFQ1QgZGRsX2ZpbHRlcihwZ19nZXRfZGF0YWJhc2Vf ZGRsKCdyZWdyZXNzaW9uX3V0ZjgnLCAnb3duZXInLCAnb2ZmJywgJ3ByZXR0eScsICdvbicpKTsK KyAgICAgICAgICAgZGRsX2ZpbHRlciAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgQ1JFQVRFIERBVEFCQVNFIHJlZ3Jlc3Npb25fdXRmOCsKKyAgICAgV0lU SCAgICAgICAgICAgICAgICAgICAgICAgKworICAgICAgICAgQ09OTkVDVElPTiBMSU1JVCA9IDEy MzsKKygxIHJvdykKKworLS0gTWl4ZWQgYm9vbGVhbiBhbmQgdGV4dCB2YWx1ZXMKK1NFTEVDVCBk ZGxfZmlsdGVyKHBnX2dldF9kYXRhYmFzZV9kZGwoJ3JlZ3Jlc3Npb25fdXRmOCcsICdvd25lcics IGZhbHNlLCAnZGVmYXVsdHMnLCAndHJ1ZScsICd0YWJsZXNwYWNlJywgJ25vJykpOworICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZGxfZmlsdGVyICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgREFUQUJBU0UgcmVn cmVzc2lvbl91dGY4IFdJVEggRU5DT0RJTkcgPSAnVVRGOCcgQUxMT1dfQ09OTkVDVElPTlMgPSB0 cnVlIENPTk5FQ1RJT04gTElNSVQgPSAxMjM7CisoMSByb3cpCisKKy0tIFRlc3QgaW52YWxpZCB0 ZXh0IHZhbHVlIChzaG91bGQgZXJyb3IpCitTRUxFQ1QgcGdfZ2V0X2RhdGFiYXNlX2RkbCgncmVn cmVzc2lvbl91dGY4JywgJ293bmVyJywgJ2ludmFsaWQnKTsKK0VSUk9SOiAgYXJndW1lbnQgMjog aW52YWxpZCB2YWx1ZSAiaW52YWxpZCIgZm9yIGtleSAib3duZXIiCitISU5UOiAgVmFsaWQgdmFs dWVzIGFyZTogdHJ1ZSwgZmFsc2UsIHllcywgbm8sIDEsIDAsIG9uLCBvZmYuCiBEUk9QIERBVEFC QVNFIHJlZ3Jlc3Npb25fdXRmODsKIERST1AgUk9MRSByZWdyZXNzX2RhdGRiYV9iZWZvcmU7CiBE Uk9QIFJPTEUgcmVncmVzc19kYXRkYmFfYWZ0ZXI7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdy ZXNzL3NxbC9kYXRhYmFzZS5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9kYXRhYmFzZS5zcWwK aW5kZXggNGVmMzYxMjcyOTEuLjg4OGQxZTUyODNmIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdy ZXNzL3NxbC9kYXRhYmFzZS5zcWwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvZGF0YWJhc2Uu c3FsCkBAIC0xLDMgKzEsNTkgQEAKKy0tCistLSBSZWNvbnN0cnVjdCBEREwKKy0tCistLSBUbyBw cm9kdWNlIHN0YWJsZSByZWdyZXNzaW9uIHRlc3Qgb3V0cHV0LCBpdCdzIHVzdWFsbHkgbmVjZXNz YXJ5IHRvCistLSBpZ25vcmUgY29sbGF0aW9uIGFuZCBsb2NhbGUgcmVsYXRlZCBkZXRhaWxzLiBU aGlzIGZpbHRlcgorLS0gZnVuY3Rpb25zIHJlbW92ZXMgY29sbGF0aW9uIGFuZCBsb2NhbGUgcmVs YXRlZCBkZXRhaWxzLgorCitDUkVBVEUgT1IgUkVQTEFDRSBGVU5DVElPTiBkZGxfZmlsdGVyKGRk bF9pbnB1dCBURVhUKQorUkVUVVJOUyBURVhUIEFTICQkCitERUNMQVJFCisgICAgY2xlYW5lZF9k ZGwgVEVYVDsKK0JFR0lOCisgICAgLS0gUmVtb3ZlICVMT0NBTEVfUFJPVklERVIlIHBsYWNlaG9s ZGVycworICAgIGNsZWFuZWRfZGRsIDo9IHJlZ2V4cF9yZXBsYWNlKAorICAgICAgICBkZGxfaW5w dXQsCisgICAgICAgICdccypcbUxPQ0FMRV9QUk9WSURFUlxNXHMqPVxzKihbJyciXT9bXicnIlxz XStbJyciXT8pJywKKyAgICAgICAgJycsCisgICAgICAgICdnaScKKyAgICApOworCisJLS0gUmVt b3ZlIExDX0NPTExBVEUgYXNzaWdubWVudHMKKyAgICBjbGVhbmVkX2RkbCA6PSByZWdleHBfcmVw bGFjZSgKKyAgICAgICAgY2xlYW5lZF9kZGwsCisgICAgICAgICdccypMQ19DT0xMQVRFXHMqPVxz KihbJyciXSlbXicnIl0qXDEnLAorICAgICAgICAnJywKKyAgICAgICAgJ2dpJworICAgICk7CisK KyAgICAtLSBSZW1vdmUgTENfQ1RZUEUgYXNzaWdubWVudHMKKyAgICBjbGVhbmVkX2RkbCA6PSBy ZWdleHBfcmVwbGFjZSgKKyAgICAgICAgY2xlYW5lZF9kZGwsCisgICAgICAgICdccypMQ19DVFlQ RVxzKj1ccyooWycnIl0pW14nJyJdKlwxJywKKyAgICAgICAgJycsCisgICAgICAgICdnaScKKyAg ICApOworCisgICAgLS0gUmVtb3ZlICVMT0NBTEUlIHBsYWNlaG9sZGVycworICAgIGNsZWFuZWRf ZGRsIDo9IHJlZ2V4cF9yZXBsYWNlKAorICAgICAgICBjbGVhbmVkX2RkbCwKKyAgICAgICAgJ1xz KlxTKkxPQ0FMRVxTKlxzKj0/XHMqKFsnJyJdKVteJyciXSpcMScsCisJCScnLAorCQknZ2knCisJ KTsKKworICAgIC0tIFJlbW92ZSAlQ09MTEFUSU9OJSBwbGFjZWhvbGRlcnMKKyAgICBjbGVhbmVk X2RkbCA6PSByZWdleHBfcmVwbGFjZSgKKyAgICAgICAgY2xlYW5lZF9kZGwsCisgICAgICAgICdc cypcUypDT0xMQVRJT05cUypccyo9P1xzKihbJyciXSlbXicnIl0qXDEnLAorICAgICAgICAnJywK KyAgICAgICAgJ2dpJworICAgICk7CisKKyAgICBSRVRVUk4gY2xlYW5lZF9kZGw7CitFTkQ7Cisk JCBMQU5HVUFHRSBwbHBnc3FsOworCiBDUkVBVEUgREFUQUJBU0UgcmVncmVzc2lvbl90YmQKIAlF TkNPRElORyB1dGY4IExDX0NPTExBVEUgIkMiIExDX0NUWVBFICJDIiBURU1QTEFURSB0ZW1wbGF0 ZTA7CiBBTFRFUiBEQVRBQkFTRSByZWdyZXNzaW9uX3RiZCBSRU5BTUUgVE8gcmVncmVzc2lvbl91 dGY4OwpAQCAtMTksNiArNzUsNTggQEAgQ1JFQVRFIFJPTEUgcmVncmVzc19kYXRkYmFfYWZ0ZXI7 CiBBTFRFUiBEQVRBQkFTRSByZWdyZXNzaW9uX3V0ZjggT1dORVIgVE8gcmVncmVzc19kYXRkYmFf YmVmb3JlOwogUkVBU1NJR04gT1dORUQgQlkgcmVncmVzc19kYXRkYmFfYmVmb3JlIFRPIHJlZ3Jl c3NfZGF0ZGJhX2FmdGVyOwogCistLSBUZXN0IHBnX2dldF9kYXRhYmFzZV9kZGwKKy0tIERhdGFi YXNlIGRvZXNuJ3QgZXhpc3RzCitTRUxFQ1QgcGdfZ2V0X2RhdGFiYXNlX2RkbCgncmVncmVzc2lv bl9kYXRhYmFzZScpOworCistLSBUZXN0IE5VTEwgdmFsdWUKK1NFTEVDVCBwZ19nZXRfZGF0YWJh c2VfZGRsKE5VTEwpOworCistLSBXaXRob3V0IG9wdGlvbnMKK1NFTEVDVCBkZGxfZmlsdGVyKHBn X2dldF9kYXRhYmFzZV9kZGwoJ3JlZ3Jlc3Npb25fdXRmOCcpKTsKKworLS0gV2l0aCBObyBPd25l cgorU0VMRUNUIGRkbF9maWx0ZXIocGdfZ2V0X2RhdGFiYXNlX2RkbCgncmVncmVzc2lvbl91dGY4 JywgJ293bmVyJywgZmFsc2UpKTsKKworLS0gV2l0aCBObyBUYWJsZXNwYWNlCitTRUxFQ1QgZGRs X2ZpbHRlcihwZ19nZXRfZGF0YWJhc2VfZGRsKCdyZWdyZXNzaW9uX3V0ZjgnLCAnZGVmYXVsdHMn LCB0cnVlLCAndGFibGVzcGFjZScsIGZhbHNlKSk7CisKKy0tIFdpdGggRGVmYXVsdHMKK1NFTEVD VCBkZGxfZmlsdGVyKHBnX2dldF9kYXRhYmFzZV9kZGwoJ3JlZ3Jlc3Npb25fdXRmOCcsICdkZWZh dWx0cycsIHRydWUpKTsKKworLS0gV2l0aCBObyBPd25lciwgTm8gVGFibGVzcGFjZSBhbmQgV2l0 aCBEZWZhdWx0cworU0VMRUNUIGRkbF9maWx0ZXIocGdfZ2V0X2RhdGFiYXNlX2RkbCgncmVncmVz c2lvbl91dGY4JywgJ293bmVyJywgZmFsc2UsICd0YWJsZXNwYWNlJywgZmFsc2UsICdkZWZhdWx0 cycsIHRydWUpKTsKKworLS0gV2l0aCBQcmV0dHkgZm9ybWF0dGVkCitccHNldCBmb3JtYXQgdW5h bGlnbmVkCitTRUxFQ1QgZGRsX2ZpbHRlcihwZ19nZXRfZGF0YWJhc2VfZGRsKCdyZWdyZXNzaW9u X3V0ZjgnLCAncHJldHR5JywgdHJ1ZSkpOworCistLSBXaXRoIE5vIE93bmVyIGFuZCBObyBUYWJs ZXNwYWNlCitTRUxFQ1QgZGRsX2ZpbHRlcihwZ19nZXRfZGF0YWJhc2VfZGRsKCdyZWdyZXNzaW9u X3V0ZjgnLCAncHJldHR5JywgdHJ1ZSwgJ293bmVyJywgZmFsc2UsICd0YWJsZXNwYWNlJywgZmFs c2UpKTsKKworLS0gV2l0aCBEZWZhdWx0cworU0VMRUNUIGRkbF9maWx0ZXIocGdfZ2V0X2RhdGFi YXNlX2RkbCgncmVncmVzc2lvbl91dGY4JywgJ3ByZXR0eScsIHRydWUsICdkZWZhdWx0cycsIHRy dWUpKTsKKworLS0gV2l0aCBObyBPd25lciwgTm8gVGFibGVzcGFjZSBhbmQgV2l0aCBEZWZhdWx0 cworU0VMRUNUIGRkbF9maWx0ZXIocGdfZ2V0X2RhdGFiYXNlX2RkbCgncmVncmVzc2lvbl91dGY4 JywgJ3ByZXR0eScsIHRydWUsICdvd25lcicsIGZhbHNlLCAndGFibGVzcGFjZScsIGZhbHNlLCAn ZGVmYXVsdHMnLCB0cnVlKSk7CisKKy0tIFRlc3Qgd2l0aCB0ZXh0IHZhbHVlczogJ3llcycsICdu bycsICcxJywgJzAnLCAnb24nLCAnb2ZmJworXHBzZXQgZm9ybWF0IGFsaWduZWQKKy0tIFVzaW5n ICd5ZXMnIGFuZCAnbm8nCitTRUxFQ1QgZGRsX2ZpbHRlcihwZ19nZXRfZGF0YWJhc2VfZGRsKCdy ZWdyZXNzaW9uX3V0ZjgnLCAnb3duZXInLCAnbm8nLCAnZGVmYXVsdHMnLCAneWVzJykpOworCist LSBVc2luZyAnMScgYW5kICcwJworU0VMRUNUIGRkbF9maWx0ZXIocGdfZ2V0X2RhdGFiYXNlX2Rk bCgncmVncmVzc2lvbl91dGY4JywgJ293bmVyJywgJzAnLCAndGFibGVzcGFjZScsICcwJywgJ2Rl ZmF1bHRzJywgJzEnKSk7CisKKy0tIFVzaW5nICdvbicgYW5kICdvZmYnCitTRUxFQ1QgZGRsX2Zp bHRlcihwZ19nZXRfZGF0YWJhc2VfZGRsKCdyZWdyZXNzaW9uX3V0ZjgnLCAnb3duZXInLCAnb2Zm JywgJ3ByZXR0eScsICdvbicpKTsKKworLS0gTWl4ZWQgYm9vbGVhbiBhbmQgdGV4dCB2YWx1ZXMK K1NFTEVDVCBkZGxfZmlsdGVyKHBnX2dldF9kYXRhYmFzZV9kZGwoJ3JlZ3Jlc3Npb25fdXRmOCcs ICdvd25lcicsIGZhbHNlLCAnZGVmYXVsdHMnLCAndHJ1ZScsICd0YWJsZXNwYWNlJywgJ25vJykp OworCistLSBUZXN0IGludmFsaWQgdGV4dCB2YWx1ZSAoc2hvdWxkIGVycm9yKQorU0VMRUNUIHBn X2dldF9kYXRhYmFzZV9kZGwoJ3JlZ3Jlc3Npb25fdXRmOCcsICdvd25lcicsICdpbnZhbGlkJyk7 CisKIERST1AgREFUQUJBU0UgcmVncmVzc2lvbl91dGY4OwogRFJPUCBST0xFIHJlZ3Jlc3NfZGF0 ZGJhX2JlZm9yZTsKIERST1AgUk9MRSByZWdyZXNzX2RhdGRiYV9hZnRlcjsKLS0gCjIuNTEuMAoK --000000000000931c2d064bcd4b57--