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 1tkS2I-0044x3-W5 for pgsql-hackers@arkaria.postgresql.org; Tue, 18 Feb 2025 18:09:35 +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 1tkS2H-00ComZ-5d for pgsql-hackers@arkaria.postgresql.org; Tue, 18 Feb 2025 18:09:33 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1tkS2G-00ComQ-If for pgsql-hackers@lists.postgresql.org; Tue, 18 Feb 2025 18:09:32 +0000 Received: from smtp-fw-80008.amazon.com ([99.78.197.219]) by magus.postgresql.org with esmtps (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1tkS2C-001bfR-2E for pgsql-hackers@postgresql.org; Tue, 18 Feb 2025 18:09:32 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amazon.com; i=@amazon.com; q=dns/txt; s=amazon201209; t=1739902168; x=1771438168; h=from:to:cc:subject:date:message-id:references: in-reply-to:mime-version; bh=6cDLNQMvsrGU/KCL7PUyknZc/1Mh/Pt6jL/1Zk4xpZQ=; b=j4p6faGkHwuITSyz96odXkBIJdzTIapCc6avolReM1uAqf2I9sd8Evm6 26rscqwsOJFL7G3mOTKZVXlZXqKdk7nGU2YQSq2sfXArA9b1fav/ErEHL lIdp27dibkim8QhiXPuRacX64egM/Nq/P+jphiVhOPg/Ns/x8jQYMkmua U=; X-Amazon-filename: v7-0001-Expand-HOT-update-path-to-include-expression-and-.patch X-Secure-Attach-Ingestion: ProdSecureAttachHeaderAddedFromMessageFilter X-IronPort-AV: E=Sophos;i="6.13,296,1732579200"; d="scan'208,217,223";a="170801444" Received: from pdx4-co-svc-p1-lb2-vlan3.amazon.com (HELO smtpout.prod.us-east-1.prod.farcaster.email.amazon.dev) ([10.25.36.214]) by smtp-border-fw-80008.pdx80.corp.amazon.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 18 Feb 2025 18:09:24 +0000 Received: from EX19MTAUEC002.ant.amazon.com [10.0.44.209:7308] by smtpin.naws.us-east-1.prod.farcaster.email.amazon.dev [10.0.2.187:2525] with esmtp (Farcaster) id 5120d627-04cb-4b4f-82e0-0a5cff1806d4; Tue, 18 Feb 2025 18:09:23 +0000 (UTC) X-Farcaster-Flow-ID: 5120d627-04cb-4b4f-82e0-0a5cff1806d4 Received: from EX19D018UEC003.ant.amazon.com (10.252.135.218) by EX19MTAUEC002.ant.amazon.com (10.252.135.253) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA) id 15.2.1258.39; Tue, 18 Feb 2025 18:09:23 +0000 Received: from EX19D018UEC003.ant.amazon.com (10.252.135.218) by EX19D018UEC003.ant.amazon.com (10.252.135.218) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA) id 15.2.1544.14; Tue, 18 Feb 2025 18:09:23 +0000 Received: from EX19D018UEC003.ant.amazon.com ([fe80::ea09:1bf7:c4d8:3004]) by EX19D018UEC003.ant.amazon.com ([fe80::ea09:1bf7:c4d8:3004%3]) with mapi id 15.02.1544.014; Tue, 18 Feb 2025 18:09:23 +0000 From: "Burd, Greg" To: "pgsql-hackers@postgresql.org" CC: Matthias van de Meent Subject: Re: Expanding HOT updates for expression and partial indexes Thread-Topic: Expanding HOT updates for expression and partial indexes Thread-Index: AQHbgjA80rUcYcuoB0iGl0dS7sQYKA== Date: Tue, 18 Feb 2025 18:09:22 +0000 Message-ID: References: <78574B24-BE0A-42C5-8075-3FA9FA63B8FC@amazon.com> <238EEE41-B206-4590-8C20-DA52C25A2291@amazon.com> In-Reply-To: <238EEE41-B206-4590-8C20-DA52C25A2291@amazon.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: yes X-MS-TNEF-Correlator: x-originating-ip: [10.106.179.9] Content-Type: multipart/mixed; boundary="_004_D50C3248FF764E6CB891B6E147F56A44amazoncom_" MIME-Version: 1.0 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --_004_D50C3248FF764E6CB891B6E147F56A44amazoncom_ Content-Type: multipart/alternative; boundary="_000_D50C3248FF764E6CB891B6E147F56A44amazoncom_" --_000_D50C3248FF764E6CB891B6E147F56A44amazoncom_ Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Changes v6 to v7: * Fixed documentation oversight causing build failure * Changed how I convey attribute len/by-val in IndexInfo * Fixed method to shortcut index_unchanged_by_update() when possible -greg --_000_D50C3248FF764E6CB891B6E147F56A44amazoncom_ Content-Type: text/html; charset="us-ascii" Content-ID: <8BFF9371BEC1AC42BD59DF9D63412126@amazon.com> Content-Transfer-Encoding: quoted-printable
Changes v6 to v7:
* Fixed documentation oversight causing build failure
* Changed how I convey attribute len/by-val in IndexInfo
* Fixed method to shortcut index_unchanged_by_update() when possible

-greg



--_000_D50C3248FF764E6CB891B6E147F56A44amazoncom_-- --_004_D50C3248FF764E6CB891B6E147F56A44amazoncom_ Content-Type: application/octet-stream; name="v7-0001-Expand-HOT-update-path-to-include-expression-and-.patch" Content-Description: v7-0001-Expand-HOT-update-path-to-include-expression-and-.patch Content-Disposition: attachment; filename="v7-0001-Expand-HOT-update-path-to-include-expression-and-.patch"; size=89130; creation-date="Tue, 18 Feb 2025 18:09:22 GMT"; modification-date="Tue, 18 Feb 2025 18:09:22 GMT" Content-ID: <20855C2C7111D642AB3AA3FCBA8E9141@amazon.com> Content-Transfer-Encoding: base64 RnJvbSBjNjc1YzY3NDY0NGI3YTUyMTcxMjkxM2I1Y2ZjNTNmODk5ZTQzNWNlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBHcmVnb3J5IEJ1cmQgPGdyZWdidXJkQGFtYXpvbi5jb20+CkRh dGU6IE1vbiwgMjcgSmFuIDIwMjUgMTM6Mjg6NTkgLTA1MDAKU3ViamVjdDogW1BBVENIIHY3XSBF eHBhbmQgSE9UIHVwZGF0ZSBwYXRoIHRvIGluY2x1ZGUgZXhwcmVzc2lvbiBhbmQgcGFydGlhbAog aW5kZXhlcy4KClRoaXMgcGF0Y2ggZXh0ZW5kcyB0aGUgY2FzZXMgd2hlcmUgSE9UIHVwZGF0ZXMg YXJlIHBvc3NpYmxlIGluIHRoZSBoZWFwYW0gYnkKZXhhbWluaW5nIGV4cHJlc3Npb24gaW5kZXhl cyBhbmQgZGV0ZXJtaW5pbmcgaWYgaW5kZXhlZCB2YWx1ZXMgd2hlcmUgbXV0YXRlZApvciBub3Qu ICBQcmV2aW91c2x5LCBhbnkgZXhwcmVzc2lvbiBpbmRleCBvbiBhIGNvbHVtbiB3b3VsZCBkaXNx dWFsaWZ5IGl0CmZyb20gdGhlIEhPVCB1cGRhdGUgcGF0aC4gQWxzbyBleGFtaW5lcyBwYXJ0aWFs IGluZGV4ZXMgdG8gc2VlIGlmIHRoZQp2YWx1ZXMgYXJlIHdpdGhpbiB0aGUgcHJlZGljYXRlIG9y IG5vdC4KClRoaXMgaXMgYSBtb2RpZmllZCBhcHBsaWNhdGlvbiBvZiBhIHBhdGNoIHByb3Bvc2Vk IG9uIHRoZSBwZ3NxbC1oYWNrZXJzIGxpc3Q6Cmh0dHBzOi8vd3d3LnBvc3RncmVzcWwub3JnL21l c3NhZ2UtaWQvZmxhdC80ZDk5MjhlZS1hOWU2LTE1ZjktOWM4Mi01OTgxZjEzZmZjYTYlNDBwb3N0 Z3Jlc3Byby5ydQphcHBsaWVkOiBodHRwczovL2dpdC5wb3N0Z3Jlc3FsLm9yZy9naXR3ZWIvP3A9 cG9zdGdyZXNxbC5naXQ7YT1jb21taXQ7aD1jMjAzZDZjZjgKcmV2ZXJ0ZWQ6IGh0dHBzOi8vZ2l0 LnBvc3RncmVzcWwub3JnL2dpdHdlYi8/cD1wb3N0Z3Jlc3FsLmdpdDthPWNvbW1pdDtoPTA1Zjg0 NjA1ZGJlYjljZjgyNzlhMTU3MjM0YjI0YmJiNzA2YzUyNTYKClNpZ25lZC1vZmYtYnk6IEdyZWcg QnVyZCA8Z3JlZ2J1cmRAYW1hem9uLmNvbT4KLS0tCiBkb2Mvc3JjL3NnbWwvcmVmL2NyZWF0ZV90 YWJsZS5zZ21sICAgICAgICAgICAgfCAgMTggKwogZG9jL3NyYy9zZ21sL3N0b3JhZ2Uuc2dtbCAg ICAgICAgICAgICAgICAgICAgIHwgIDIxICsKIHNyYy9iYWNrZW5kL2FjY2Vzcy9jb21tb24vcmVs b3B0aW9ucy5jICAgICAgICB8ICAxMiArLQogc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvUkVBRE1F LkhPVCAgICAgICAgICAgIHwgIDQ1ICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW0u YyAgICAgICAgICAgICAgfCAgNDMgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9o YW5kbGVyLmMgICAgICB8ICAgNiArLQogc3JjL2JhY2tlbmQvYWNjZXNzL3RhYmxlL3RhYmxlYW0u YyAgICAgICAgICAgIHwgICAyICstCiBzcmMvYmFja2VuZC9jYXRhbG9nL2luZGV4LmMgICAgICAg ICAgICAgICAgICAgfCAgMTkgKwogc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0luZGV4aW5nLmMg ICAgICAgICAgIHwgMTk5ICsrKysrKwogc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1vZGlmeVRh YmxlLmMgICAgICAgIHwgICAzICstCiBzcmMvYmFja2VuZC91dGlscy9jYWNoZS9yZWxjYWNoZS5j ICAgICAgICAgICAgfCAxODEgKysrKystCiBzcmMvYmluL3BzcWwvdGFiLWNvbXBsZXRlLmluLmMg ICAgICAgICAgICAgICAgfCAgIDIgKy0KIHNyYy9pbmNsdWRlL2FjY2Vzcy9nZW5hbS5oICAgICAg ICAgICAgICAgICAgICB8ICAgMiArLQogc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oICAgICAg ICAgICAgICAgICAgIHwgICAzICstCiBzcmMvaW5jbHVkZS9hY2Nlc3MvdGFibGVhbS5oICAgICAg ICAgICAgICAgICAgfCAgMTAgKy0KIHNyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWN1dG9yLmggICAg ICAgICAgICAgICB8ICAgNSArCiBzcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaCAgICAgICAg ICAgICAgICAgfCAgIDkgKwogc3JjL2luY2x1ZGUvdXRpbHMvcmVsLmggICAgICAgICAgICAgICAg ICAgICAgIHwgIDE0ICsKIHNyYy9pbmNsdWRlL3V0aWxzL3JlbGNhY2hlLmggICAgICAgICAgICAg ICAgICB8ICAgMiArCiAuLi4vcmVncmVzcy9leHBlY3RlZC9oZWFwX2hvdF91cGRhdGVzLm91dCAg ICAgfCA1ODYgKysrKysrKysrKysrKysrKysrCiBzcmMvdGVzdC9yZWdyZXNzL3BhcmFsbGVsX3Nj aGVkdWxlICAgICAgICAgICAgfCAgIDUgKwogc3JjL3Rlc3QvcmVncmVzcy9zcWwvaGVhcF9ob3Rf dXBkYXRlcy5zcWwgICAgIHwgNDQwICsrKysrKysrKysrKysKIDIyIGZpbGVzIGNoYW5nZWQsIDE1 NjYgaW5zZXJ0aW9ucygrKSwgNjEgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3Jj L3Rlc3QvcmVncmVzcy9leHBlY3RlZC9oZWFwX2hvdF91cGRhdGVzLm91dAogY3JlYXRlIG1vZGUg MTAwNjQ0IHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2hlYXBfaG90X3VwZGF0ZXMuc3FsCgpkaWZmIC0t Z2l0IGEvZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVfdGFibGUuc2dtbCBiL2RvYy9zcmMvc2dtbC9y ZWYvY3JlYXRlX3RhYmxlLnNnbWwKaW5kZXggMGEzZTUyMGYyMTUuLjhlZTJhYzUyM2VlIDEwMDY0 NAotLS0gYS9kb2Mvc3JjL3NnbWwvcmVmL2NyZWF0ZV90YWJsZS5zZ21sCisrKyBiL2RvYy9zcmMv c2dtbC9yZWYvY3JlYXRlX3RhYmxlLnNnbWwKQEAgLTE5ODEsNiArMTk4MSwyNCBAQCBXSVRIICgg TU9EVUxVUyA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+bnVtZXJpY19saXRlcmFsPC9y ZXBsYWNlYWJsZT4sIFJFTQogICAgIDwvbGlzdGl0ZW0+CiAgICA8L3Zhcmxpc3RlbnRyeT4KIAor ICAgPHZhcmxpc3RlbnRyeSBpZD0icmVsb3B0aW9uLWV4cHJlc3Npb24tY2hlY2tzIiB4cmVmbGFi ZWw9ImV4cHJlc3Npb25fY2hlY2tzIj4KKyAgICA8dGVybT48bGl0ZXJhbD5leHByZXNzaW9uX2No ZWNrczwvbGl0ZXJhbD4gKDx0eXBlPmJvb2xlYW48L3R5cGU+KQorICAgIDxpbmRleHRlcm0+Cisg ICAgIDxwcmltYXJ5Pjx2YXJuYW1lPmV4cHJlc3Npb25fY2hlY2tzPC92YXJuYW1lPiBzdG9yYWdl IHBhcmFtZXRlcjwvcHJpbWFyeT4KKyAgICA8L2luZGV4dGVybT4KKyAgICA8L3Rlcm0+CisgICAg PGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAgIEVuYWJsZXMgb3IgZGlzYWJsZXMgZXZhdWxh dGlvbiBvZiBwcmVkaWNhdGUgZXhwcmVzc2lvbnMgb24gcGFydGlhbAorICAgICAgaW5kZXhlcyBv ciBleHByZXNzaW9ucyB1c2VkIHRvIGRlZmluZSBpbmRleGVzIGR1cmluZyB1cGRhdGVzLgorICAg ICAgSWYgPGxpdGVyYWw+dHJ1ZTwvbGl0ZXJhbD4sIHRoZW4gdGhlc2UgZXhwcmVzc2lvbnMgYXJl IGV2YWx1YXRlZCBkdXJpbmcKKyAgICAgIHVwZGF0ZXMgdG8gZGF0YSB3aXRoaW4gdGhlIGhlYXAg cmVsYXRpb24gYWdhaW5zdCB0aGUgb2xkIGFuZCBuZXcgdmFsdWVzCisgICAgICBhbmQgdGhlbiBj b21wYXJlZCB0byBkZXRlcm1pbmUgaWYgPGFjcm9ueW0+SE9UPC9hY3JvbnltPiB1cGRhdGVzIGFy ZQorICAgICAgYWxsb3dhYmxlIG9yIG5vdC4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGxpdGVyYWw+ dHJ1ZTwvbGl0ZXJhbD4uCisgICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAgPC92YXJs aXN0ZW50cnk+CisKICAgIDwvdmFyaWFibGVsaXN0PgogCiAgIDwvcmVmc2VjdDI+CmRpZmYgLS1n aXQgYS9kb2Mvc3JjL3NnbWwvc3RvcmFnZS5zZ21sIGIvZG9jL3NyYy9zZ21sL3N0b3JhZ2Uuc2dt bAppbmRleCA2MTI1MDc5OWVjMC4uZjQwYWRhOWM5ODkgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dt bC9zdG9yYWdlLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL3N0b3JhZ2Uuc2dtbApAQCAtMTEzOCw2 ICsxMTM4LDI3IEBAIGRhdGEuIEVtcHR5IGluIG9yZGluYXJ5IHRhYmxlcy48L2VudHJ5PgogICA8 L2l0ZW1pemVkbGlzdD4KICA8L3BhcmE+CiAKKyA8cGFyYT4KKyAgPGFjcm9ueW0+SE9UPC9hY3Jv bnltPiB1cGRhdGVzIGNhbiBvY2N1ciB3aGVuIHRoZSBleHByZXNzaW9uIHVzZWQgdG8gZGVmaW5l CisgIGFuZCBpbmRleCBzaG93cyBubyBjaGFuZ2VzIHRvIHRoZSBpbmRleGVkIHZhbHVlLiBUbyBk ZXRlcm1pbmUgdGhpcyByZXF1aXJlcworICB0aGF0IHRoZSBleHByZXNzaW9uIGJlIGV2YXVsYXRl ZCBmb3IgdGhlIG9sZCBhbmQgbmV3IHZhbHVlcyB0byBiZSBzdG9yZWQgaW4KKyAgdGhlIGluZGV4 IGFuZCB0aGVuIGNvbXBhcmVkLiBUaGlzIGFsbG93cyBmb3IgPGFjcm9ueW0+SE9UPC9hY3Jvbnlt PiB1cGRhdGVzCisgIHdoZW4gZGF0YSBpbmRleGVkIHdpdGhpbiBKU09OQiBjb2x1bW5zIGlzIHVu Y2hhbmdlZC4gVG8gZGlzYWJsZSB0aGlzCisgIGJlaGF2aW9yIGFuZCBhdm9pZCB0aGUgb3Zlcmhl YWQgb2YgZXZhbHVhdGluZyB0aGUgZXhwcmVzc2lvbiBkdXJpbmcgdXBkYXRlcworICBzZXQgdGhl IDxsaXRlcmFsPmV4cHJlc3Npb25fY2hlY2tzPC9saXRlcmFsPiBvcHRpb24gdG8gZmFsc2UgZm9y IHRoZSB0YWJsZS4KKyA8L3BhcmE+CisKKyA8cGFyYT4KKyAgPGFjcm9ueW0+SE9UPC9hY3Jvbnlt PiB1cGRhdGVzIGNhbiBhbHNvIG9jY3VyIHdoZW4gdXBkYXRlZCB2YWx1ZXMgYXJlIG5vdAorICB3 aXRoaW4gdGhlIHByZWRpY2F0ZSBvZiBhIHBhcnRpYWwgaW5kZXguIEhvd2V2ZXIsIDxhY3Jvbnlt PkhPVDwvYWNyb255bT4KKyAgdXBkYXRlcyBhcmUgbm90IHBvc3NpYmxlIHdoZW4gdGhlIHVwZGF0 ZWQgdmFsdWUgYW5kIHRoZSBjdXJyZW50IHZhbHVlIGRpZmZlcgorICB3aXRoIHJlZ2FyZHMgdG8g dGhlIHByZWRpY2F0ZS4gVG8gZGV0ZXJtaW4gdGhpcyByZXF1aXJlcyB0aGF0IHRoZSBwcmVkaWNh dGUKKyAgZXhwcmVzc2lvbiBiZSBldmFsdWF0ZWQgZm9yIHRoZSBvbGQgYW5kIG5ldyB2YWx1ZXMg dG8gYmUgc3RvcmVkIGluIHRoZSBpbmRleAorICBhbmQgdGhlbiBjb21wYXJlZC4gVG8gZGlzYWJs ZSB0aGlzIGJlaGF2aW9yIGFuZCBhdm9pZCB0aGUgb3ZlcmhlYWQgb2YKKyAgZXZhbHVhdGluZyB0 aGUgZXhwcmVzc2lvbiBkdXJpbmcgdXBkYXRlcyBzZXQKKyAgdGhlIDxsaXRlcmFsPmV4cHJlc3Np b25fY2hlY2tzPC9saXRlcmFsPiBvcHRpb24gdG8gZmFsc2UgZm9yIHRoZSB0YWJsZS4KKyA8L3Bh cmE+CisKICA8cGFyYT4KICAgWW91IGNhbiBpbmNyZWFzZSB0aGUgbGlrZWxpaG9vZCBvZiBzdWZm aWNpZW50IHBhZ2Ugc3BhY2UgZm9yCiAgIDxhY3JvbnltPkhPVDwvYWNyb255bT4gdXBkYXRlcyBi eSBkZWNyZWFzaW5nIGEgdGFibGUncyA8bGluawpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNj ZXNzL2NvbW1vbi9yZWxvcHRpb25zLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvY29tbW9uL3JlbG9w dGlvbnMuYwppbmRleCA1OWZiNTNlNzcwNy4uYzA4MTYxMTkyNmUgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL2FjY2Vzcy9jb21tb24vcmVsb3B0aW9ucy5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vz cy9jb21tb24vcmVsb3B0aW9ucy5jCkBAIC0xNjYsNiArMTY2LDE1IEBAIHN0YXRpYyByZWxvcHRf Ym9vbCBib29sUmVsT3B0c1tdID0KIAkJfSwKIAkJdHJ1ZQogCX0sCisJeworCQl7CisJCQkiZXhw cmVzc2lvbl9jaGVja3MiLAorCQkJIldoZW4gZGlzYWJsZWQgcHJldmVudHMgY2hlY2tpbmcgZXhw cmVzc2lvbnMgb24gaW5kZXhlcyBhbmQgcHJlZGljYXRlcyBvbiBwYXJ0aWFsIGluZGV4ZXMgZm9y IGNoYW5nZXMgdGhhdCBtaWdodCBpbmZsdWVuY2UgaGVhcC1vbmx5IHR1cGxlIChIT1QpIHVwZGF0 ZXMuIiwKKwkJCVJFTE9QVF9LSU5EX0hFQVAsCisJCQlTaGFyZVVwZGF0ZUV4Y2x1c2l2ZUxvY2sK KwkJfSwKKwkJdHJ1ZQorCX0sCiAJLyogbGlzdCB0ZXJtaW5hdG9yICovCiAJe3tOVUxMfX0KIH07 CkBAIC0xOTAzLDcgKzE5MTIsOCBAQCBkZWZhdWx0X3JlbG9wdGlvbnMoRGF0dW0gcmVsb3B0aW9u cywgYm9vbCB2YWxpZGF0ZSwgcmVsb3B0X2tpbmQga2luZCkKIAkJeyJ2YWN1dW1fdHJ1bmNhdGUi LCBSRUxPUFRfVFlQRV9CT09MLAogCQlvZmZzZXRvZihTdGRSZE9wdGlvbnMsIHZhY3V1bV90cnVu Y2F0ZSl9LAogCQl7InZhY3V1bV9tYXhfZWFnZXJfZnJlZXplX2ZhaWx1cmVfcmF0ZSIsIFJFTE9Q VF9UWVBFX1JFQUwsCi0JCW9mZnNldG9mKFN0ZFJkT3B0aW9ucywgdmFjdXVtX21heF9lYWdlcl9m cmVlemVfZmFpbHVyZV9yYXRlKX0KKwkJb2Zmc2V0b2YoU3RkUmRPcHRpb25zLCB2YWN1dW1fbWF4 X2VhZ2VyX2ZyZWV6ZV9mYWlsdXJlX3JhdGUpfSwKKwkJeyJleHByZXNzaW9uX2NoZWNrcyIsIFJF TE9QVF9UWVBFX0JPT0wsIG9mZnNldG9mKFN0ZFJkT3B0aW9ucywgZXhwcmVzc2lvbl9jaGVja3Mp fQogCX07CiAKIAlyZXR1cm4gKGJ5dGVhICopIGJ1aWxkX3JlbG9wdGlvbnMocmVsb3B0aW9ucywg dmFsaWRhdGUsIGtpbmQsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9SRUFE TUUuSE9UIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvUkVBRE1FLkhPVAppbmRleCA3NGU0MDdm Mzc1YS4uNWJkNjFiZDE1M2MgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL1JF QURNRS5IT1QKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvUkVBRE1FLkhPVApAQCAtMzYs NyArMzYsNyBAQCBIT1Qgc29sdmVzIHRoaXMgcHJvYmxlbSBmb3IgdHdvIHJlc3RyaWN0ZWQgYnV0 IHVzZWZ1bCBzcGVjaWFsIGNhc2VzOgogRmlyc3QsIHdoZXJlIGEgdHVwbGUgaXMgcmVwZWF0ZWRs eSB1cGRhdGVkIGluIHdheXMgdGhhdCBkbyBub3QgY2hhbmdlCiBpdHMgaW5kZXhlZCBjb2x1bW5z LiAgKEhlcmUsICJpbmRleGVkIGNvbHVtbiIgbWVhbnMgYW55IGNvbHVtbiByZWZlcmVuY2VkCiBh dCBhbGwgaW4gYW4gaW5kZXggZGVmaW5pdGlvbiwgaW5jbHVkaW5nIGZvciBleGFtcGxlIGNvbHVt bnMgdGhhdCBhcmUKLXRlc3RlZCBpbiBhIHBhcnRpYWwtaW5kZXggcHJlZGljYXRlIGJ1dCBhcmUg bm90IHN0b3JlZCBpbiB0aGUgaW5kZXguKQordGVzdGVkIGluIGEgcGFydGlhbC1pbmRleCBwcmVk aWNhdGUsIHRoYXQgaGFzIG1hdGVyaWFsbHkgY2hhbmdlZC4pCiAKIFNlY29uZCwgd2hlcmUgdGhl IG1vZGlmaWVkIGNvbHVtbnMgYXJlIG9ubHkgdXNlZCBpbiBpbmRleGVzIHRoYXQgZG8gbm90CiBj b250YWluIHR1cGxlIElEcywgYnV0IG1haW50YWluIHN1bW1hcmllcyBvZiB0aGUgaW5kZXhlZCBk YXRhIGJ5IGJsb2NrLgpAQCAtMTMzLDI4ICsxMzMsMzQgQEAgTm90ZTogd2UgY2FuIHVzZSBhICJk ZWFkIiBsaW5lIHBvaW50ZXIgZm9yIGFueSBERUxFVEVkIHR1cGxlLAogd2hldGhlciBpdCB3YXMg cGFydCBvZiBhIEhPVCBjaGFpbiBvciBub3QuICBUaGlzIGFsbG93cyBzcGFjZSByZWNsYW1hdGlv bgogaW4gYWR2YW5jZSBvZiBydW5uaW5nIFZBQ1VVTSBmb3IgcGxhaW4gREVMRVRFcyBhcyB3ZWxs IGFzIEhPVCB1cGRhdGVzLgogCi1UaGUgcmVxdWlyZW1lbnQgZm9yIGRvaW5nIGEgSE9UIHVwZGF0 ZSBpcyB0aGF0IGluZGV4ZXMgd2hpY2ggcG9pbnQgdG8KLXRoZSByb290IGxpbmUgcG9pbnRlciAo YW5kIHRodXMgbmVlZCB0byBiZSBjbGVhbmVkIHVwIGJ5IFZBQ1VVTSB3aGVuIHRoZQotdHVwbGUg aXMgZGVhZCkgZG8gbm90IHJlZmVyZW5jZSBjb2x1bW5zIHdoaWNoIGFyZSB1cGRhdGVkIGluIHRo YXQgSE9UCi1jaGFpbi4gIFN1bW1hcml6aW5nIGluZGV4ZXMgKHN1Y2ggYXMgQlJJTikgYXJlIGFz c3VtZWQgdG8gaGF2ZSBubwotcmVmZXJlbmNlcyB0byBpbmRpdmlkdWFsIHR1cGxlcyBhbmQgdGh1 cyBhcmUgaWdub3JlZCB3aGVuIGNoZWNraW5nIEhPVAotYXBwbGljYWJpbGl0eS4gIFRoZSB1cGRh dGVkIGNvbHVtbnMgYXJlIGNoZWNrZWQgYXQgZXhlY3V0aW9uIHRpbWUgYnkKLWNvbXBhcmluZyB0 aGUgYmluYXJ5IHJlcHJlc2VudGF0aW9uIG9mIHRoZSBvbGQgYW5kIG5ldyB2YWx1ZXMuICBXZSBp bnNpc3QKLW9uIGJpdHdpc2UgZXF1YWxpdHkgcmF0aGVyIHRoYW4gdXNpbmcgZGF0YXR5cGUtc3Bl Y2lmaWMgZXF1YWxpdHkgcm91dGluZXMuCi1UaGUgbWFpbiByZWFzb24gdG8gYXZvaWQgdGhlIGxh dHRlciBpcyB0aGF0IHRoZXJlIG1pZ2h0IGJlIG11bHRpcGxlCi1ub3Rpb25zIG9mIGVxdWFsaXR5 IGZvciBhIGRhdGF0eXBlLCBhbmQgd2UgZG9uJ3Qga25vdyBleGFjdGx5IHdoaWNoIG9uZQotaXMg cmVsZXZhbnQgZm9yIHRoZSBpbmRleGVzIGF0IGhhbmQuICBXZSBhc3N1bWUgdGhhdCBiaXR3aXNl IGVxdWFsaXR5Ci1ndWFyYW50ZWVzIGVxdWFsaXR5IGZvciBhbGwgcHVycG9zZXMuCitUaGUgcmVx dWlyZW1lbnQgZm9yIGRvaW5nIGEgSE9UIHVwZGF0ZSBpcyB0aGF0IGluZGV4ZXMgd2hpY2ggcG9p bnQgdG8gdGhlIHJvb3QKK2xpbmUgcG9pbnRlciAoYW5kIHRodXMgbmVlZCB0byBiZSBjbGVhbmVk IHVwIGJ5IFZBQ1VVTSB3aGVuIHRoZSB0dXBsZSBpcyBkZWFkKQorZG8gbm90IHJlZmVyZW5jZSBj b2x1bW5zIHdoaWNoIGFyZSB1cGRhdGVkIGluIHRoYXQgSE9UIGNoYWluLgorCitTdW1tYXJpemlu ZyBpbmRleGVzIChzdWNoIGFzIEJSSU4pIGFyZSBhc3N1bWVkIHRvIGhhdmUgbm8gcmVmZXJlbmNl cyB0bworaW5kaXZpZHVhbCB0dXBsZXMgYW5kIHRodXMgYXJlIGlnbm9yZWQgd2hlbiBjaGVja2lu ZyBIT1QgYXBwbGljYWJpbGl0eS4KKworRXhwcmVzc2lvbnMgb24gaW5kZXhlcyBhcmUgZXZhbHVh dGVkIGFuZCB0aGUgcmVzdWx0cyBhcmUgdXNlZCB3aGVuIGNoZWNrIGZvcgorY2hhbmdlcy4gIFRo aXMgYWxsb3dzIGZvciB0aGUgSlNPTkIgZGF0YXR5cGUgdG8gaGF2ZSBIT1QgdXBkYXRlcyB3aGVu IHRoZQoraW5kZXhlZCBwb3J0aW9uIG9mIHRoZSBkb2N1bWVudCBhcmUgbm90IG1vZGlmaWVkLgor CitQYXJ0aWFsIGluZGV4IGV4cHJlc3Npb25zIGFyZSBldmFsdWF0ZWQsIEhPVCB1cGRhdGVzIGFy ZSBhbGxvd2VkIHdoZW4gdGhlCit1cGRhdGVkIGluZGV4IHZhbHVlcyBkbyBub3Qgc2F0aXNmeSB0 aGUgcHJlZGljYXRlLgorCitUaGUgdXBkYXRlZCBjb2x1bW5zIGFyZSBjaGVja2VkIGF0IGV4ZWN1 dGlvbiB0aW1lIGJ5IGNvbXBhcmluZyB0aGUgYmluYXJ5CityZXByZXNlbnRhdGlvbiBvZiB0aGUg b2xkIGFuZCBuZXcgdmFsdWVzLiAgV2UgaW5zaXN0IG9uIGJpdHdpc2UgZXF1YWxpdHkgcmF0aGVy Cit0aGFuIHVzaW5nIGRhdGF0eXBlLXNwZWNpZmljIGVxdWFsaXR5IHJvdXRpbmVzLiAgVGhlIG1h aW4gcmVhc29uIHRvIGF2b2lkIHRoZQorbGF0dGVyIGlzIHRoYXQgdGhlcmUgbWlnaHQgYmUgbXVs dGlwbGUgbm90aW9ucyBvZiBlcXVhbGl0eSBmb3IgYSBkYXRhdHlwZSwgYW5kCit3ZSBkb24ndCBr bm93IGV4YWN0bHkgd2hpY2ggb25lIGlzIHJlbGV2YW50IGZvciB0aGUgaW5kZXhlcyBhdCBoYW5k LiAgV2UgYXNzdW1lCit0aGF0IGJpdHdpc2UgZXF1YWxpdHkgZ3VhcmFudGVlcyBlcXVhbGl0eSBm b3IgYWxsIHB1cnBvc2VzLgogCiBJZiBhbnkgY29sdW1ucyB0aGF0IGFyZSBpbmNsdWRlZCBieSBu b24tc3VtbWFyaXppbmcgaW5kZXhlcyBhcmUgdXBkYXRlZCwKIHRoZSBIT1Qgb3B0aW1pemF0aW9u IGlzIG5vdCBhcHBsaWVkLCBhbmQgdGhlIG5ldyB0dXBsZSBpcyBpbnNlcnRlZCBpbnRvCiBhbGwg aW5kZXhlcyBvZiB0aGUgdGFibGUuICBJZiBub25lIG9mIHRoZSB1cGRhdGVkIGNvbHVtbnMgYXJl IGluY2x1ZGVkIGluCiB0aGUgdGFibGUncyBpbmRleGVzLCB0aGUgSE9UIG9wdGltaXphdGlvbiBp cyBhcHBsaWVkIGFuZCBubyBpbmRleGVzIGFyZQogdXBkYXRlZC4gIElmIGluc3RlYWQgdGhlIHVw ZGF0ZWQgY29sdW1ucyBhcmUgb25seSBpbmRleGVkIGJ5IHN1bW1hcml6aW5nCi1pbmRleGVzLCB0 aGUgSE9UIG9wdGltaXphdGlvbiBpcyBhcHBsaWVkLCBidXQgdGhlIHVwZGF0ZSBpcyBwcm9wYWdh dGVkIHRvCi1hbGwgc3VtbWFyaXppbmcgaW5kZXhlcy4gIChSZWFsaXN0aWNhbGx5LCB3ZSBvbmx5 IG5lZWQgdG8gcHJvcGFnYXRlIHRoZQotdXBkYXRlIHRvIHRoZSBpbmRleGVzIHRoYXQgY29udGFp biB0aGUgdXBkYXRlZCB2YWx1ZXMsIGJ1dCB0aGF0IGlzIHlldCB0bwotYmUgaW1wbGVtZW50ZWQu KQoraW5kZXhlcywgdGhlIEhPVCBvcHRpbWl6YXRpb24gaXMgYXBwbGllZCwgYW5kIHRoZSB1cGRh dGUgaXMgcHJvcGFnYXRlZCB0bworYWxsIG9mIHRoZSBzdW1tYXJpemluZyBpbmRleGVzLgogCiBB Ym9ydCBDYXNlcwogLS0tLS0tLS0tLS0KQEAgLTQ3Nyw4ICs0ODMsOSBAQCBIZWFwLW9ubHkgdHVw bGUKIEhPVC1zYWZlCiAKIAlBIHByb3Bvc2VkIHR1cGxlIHVwZGF0ZSBpcyBzYWlkIHRvIGJlIEhP VC1zYWZlIGlmIGl0IGNoYW5nZXMKLQlub25lIG9mIHRoZSB0dXBsZSdzIGluZGV4ZWQgY29sdW1u cy4gIEl0IHdpbGwgb25seSBiZWNvbWUgYW4KLQlhY3R1YWwgSE9UIHVwZGF0ZSBpZiB3ZSBjYW4g ZmluZCByb29tIG9uIHRoZSBzYW1lIHBhZ2UgZm9yCisJbm9uZSBvZiB0aGUgdHVwbGUncyBpbmRl eGVkIGNvbHVtbnMgb3IgaWYgdGhlIGNoYW5nZXMgcmVtYWluCisJb3V0c2lkZSBvZiBhIHBhcnRp YWwgaW5kZXgncyBwcmVkaWNhdGUuICBJdCB3aWxsIG9ubHkgYmVjb21lCisJYW4gYWN0dWFsIEhP VCB1cGRhdGUgaWYgd2UgY2FuIGZpbmQgcm9vbSBvbiB0aGUgc2FtZSBwYWdlIGZvcgogCXRoZSBu ZXcgdHVwbGUgdmVyc2lvbi4KIAogSE9UIHVwZGF0ZQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv YWNjZXNzL2hlYXAvaGVhcGFtLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW0uYwpp bmRleCBmYTc5MzVhMGVkMy4uNDZjZTgyNGM0ZWEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9oZWFwL2hlYXBhbS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbS5j CkBAIC0zMTY0LDEyICszMTY0LDEzIEBAIFRNX1Jlc3VsdAogaGVhcF91cGRhdGUoUmVsYXRpb24g cmVsYXRpb24sIEl0ZW1Qb2ludGVyIG90aWQsIEhlYXBUdXBsZSBuZXd0dXAsCiAJCQlDb21tYW5k SWQgY2lkLCBTbmFwc2hvdCBjcm9zc2NoZWNrLCBib29sIHdhaXQsCiAJCQlUTV9GYWlsdXJlRGF0 YSAqdG1mZCwgTG9ja1R1cGxlTW9kZSAqbG9ja21vZGUsCi0JCQlUVV9VcGRhdGVJbmRleGVzICp1 cGRhdGVfaW5kZXhlcykKKwkJCVRVX1VwZGF0ZUluZGV4ZXMgKnVwZGF0ZV9pbmRleGVzLCBzdHJ1 Y3QgRVN0YXRlICplc3RhdGUpCiB7CiAJVE1fUmVzdWx0CXJlc3VsdDsKIAlUcmFuc2FjdGlvbklk IHhpZCA9IEdldEN1cnJlbnRUcmFuc2FjdGlvbklkKCk7CiAJQml0bWFwc2V0ICAqaG90X2F0dHJz OwogCUJpdG1hcHNldCAgKnN1bV9hdHRyczsKKwlCaXRtYXBzZXQgICpleHBfYXR0cnM7CiAJQml0 bWFwc2V0ICAqa2V5X2F0dHJzOwogCUJpdG1hcHNldCAgKmlkX2F0dHJzOwogCUJpdG1hcHNldCAg KmludGVyZXN0aW5nX2F0dHJzOwpAQCAtMzI0Niw2ICszMjQ3LDggQEAgaGVhcF91cGRhdGUoUmVs YXRpb24gcmVsYXRpb24sIEl0ZW1Qb2ludGVyIG90aWQsIEhlYXBUdXBsZSBuZXd0dXAsCiAJCQkJ CQkJCQkJICAgSU5ERVhfQVRUUl9CSVRNQVBfSE9UX0JMT0NLSU5HKTsKIAlzdW1fYXR0cnMgPSBS ZWxhdGlvbkdldEluZGV4QXR0ckJpdG1hcChyZWxhdGlvbiwKIAkJCQkJCQkJCQkgICBJTkRFWF9B VFRSX0JJVE1BUF9TVU1NQVJJWkVEKTsKKwlleHBfYXR0cnMgPSBSZWxhdGlvbkdldEluZGV4QXR0 ckJpdG1hcChyZWxhdGlvbiwKKwkJCQkJCQkJCQkgICBJTkRFWF9BVFRSX0JJVE1BUF9FWFBSRVNT SU9OKTsKIAlrZXlfYXR0cnMgPSBSZWxhdGlvbkdldEluZGV4QXR0ckJpdG1hcChyZWxhdGlvbiwg SU5ERVhfQVRUUl9CSVRNQVBfS0VZKTsKIAlpZF9hdHRycyA9IFJlbGF0aW9uR2V0SW5kZXhBdHRy Qml0bWFwKHJlbGF0aW9uLAogCQkJCQkJCQkJCSAgSU5ERVhfQVRUUl9CSVRNQVBfSURFTlRJVFlf S0VZKTsKQEAgLTMzMTEsNiArMzMxNCw3IEBAIGhlYXBfdXBkYXRlKFJlbGF0aW9uIHJlbGF0aW9u LCBJdGVtUG9pbnRlciBvdGlkLCBIZWFwVHVwbGUgbmV3dHVwLAogCiAJCWJtc19mcmVlKGhvdF9h dHRycyk7CiAJCWJtc19mcmVlKHN1bV9hdHRycyk7CisJCWJtc19mcmVlKGV4cF9hdHRycyk7CiAJ CWJtc19mcmVlKGtleV9hdHRycyk7CiAJCWJtc19mcmVlKGlkX2F0dHJzKTsKIAkJLyogbW9kaWZp ZWRfYXR0cnMgbm90IHlldCBpbml0aWFsaXplZCAqLwpAQCAtMzYxMiw2ICszNjE2LDcgQEAgbDI6 CiAKIAkJYm1zX2ZyZWUoaG90X2F0dHJzKTsKIAkJYm1zX2ZyZWUoc3VtX2F0dHJzKTsKKwkJYm1z X2ZyZWUoZXhwX2F0dHJzKTsKIAkJYm1zX2ZyZWUoa2V5X2F0dHJzKTsKIAkJYm1zX2ZyZWUoaWRf YXR0cnMpOwogCQlibXNfZnJlZShtb2RpZmllZF9hdHRycyk7CkBAIC0zOTI4LDI1ICszOTMzLDMw IEBAIGwyOgogCiAJaWYgKG5ld2J1ZiA9PSBidWZmZXIpCiAJeworCQlib29sCQlleHByZXNzaW9u X2NoZWNrcyA9IFJlbGF0aW9uR2V0RXhwcmVzc2lvbkNoZWNrcyhyZWxhdGlvbik7CisKIAkJLyoK IAkJICogU2luY2UgdGhlIG5ldyB0dXBsZSBpcyBnb2luZyBpbnRvIHRoZSBzYW1lIHBhZ2UsIHdl IG1pZ2h0IGJlIGFibGUKLQkJICogdG8gZG8gYSBIT1QgdXBkYXRlLiAgQ2hlY2sgaWYgYW55IG9m IHRoZSBpbmRleCBjb2x1bW5zIGhhdmUgYmVlbgotCQkgKiBjaGFuZ2VkLgorCQkgKiB0byBkbyBh IEhPVCB1cGRhdGUuICBBcyBhIHJlbWluZGVyLCBob3RfYXR0cnMgaW5jbHVkZXMgYXR0cmlidXRl cworCQkgKiB1c2VkIGluIGV4cHJlc3Npb25zLCBidXQgbm90IGF0dHJpYnV0ZXMgdXNlZCBieSBz dW1tYXJpemluZworCQkgKiBpbmRleGVzLgogCQkgKi8KLQkJaWYgKCFibXNfb3ZlcmxhcChtb2Rp ZmllZF9hdHRycywgaG90X2F0dHJzKSkKLQkJeworCQlpZiAoIWJtc19vdmVybGFwKG1vZGlmaWVk X2F0dHJzLCBob3RfYXR0cnMpIHx8CisJCQkoZXhwcmVzc2lvbl9jaGVja3MgPT0gdHJ1ZSAmJiBl c3RhdGUgIT0gTlVMTCAmJiBleHBfYXR0cnMgJiYKKwkJCSBibXNfb3ZlcmxhcChtb2RpZmllZF9h dHRycywgZXhwX2F0dHJzKSAmJgorCQkJIEV4ZWNJbmRleGVzRXhwcmVzc2lvbnNXZXJlTm90VXBk YXRlZChyZWxhdGlvbiwgbW9kaWZpZWRfYXR0cnMsCisJCQkJCQkJCQkJCQkgIGVzdGF0ZSwgJm9s ZHR1cCwgbmV3dHVwKSkpCiAJCQl1c2VfaG90X3VwZGF0ZSA9IHRydWU7CiAKLQkJCS8qCi0JCQkg KiBJZiBub25lIG9mIHRoZSBjb2x1bW5zIHRoYXQgYXJlIHVzZWQgaW4gaG90LWJsb2NraW5nIGlu ZGV4ZXMKLQkJCSAqIHdlcmUgdXBkYXRlZCwgd2UgY2FuIGFwcGx5IEhPVCwgYnV0IHdlIGRvIHN0 aWxsIG5lZWQgdG8gY2hlY2sKLQkJCSAqIGlmIHdlIG5lZWQgdG8gdXBkYXRlIHRoZSBzdW1tYXJp emluZyBpbmRleGVzLCBhbmQgdXBkYXRlIHRob3NlCi0JCQkgKiBpbmRleGVzIGlmIHRoZSBjb2x1 bW5zIHdlcmUgdXBkYXRlZCwgb3Igd2UgbWF5IGZhaWwgdG8gZGV0ZWN0Ci0JCQkgKiBlLmcuIHZh bHVlIGJvdW5kIGNoYW5nZXMgaW4gQlJJTiBtaW5tYXggaW5kZXhlcy4KLQkJCSAqLwotCQkJaWYg KGJtc19vdmVybGFwKG1vZGlmaWVkX2F0dHJzLCBzdW1fYXR0cnMpKQotCQkJCXN1bW1hcml6ZWRf dXBkYXRlID0gdHJ1ZTsKLQkJfQorCQkvKgorCQkgKiBJZiBub25lIG9mIHRoZSBjb2x1bW5zIHRo YXQgYXJlIHVzZWQgaW4gaG90LWJsb2NraW5nIGluZGV4ZXMgd2VyZQorCQkgKiB1cGRhdGVkLCB3 ZSBjYW4gYXBwbHkgSE9ULCBidXQgd2UgZG8gc3RpbGwgbmVlZCB0byBjaGVjayBpZiB3ZSBuZWVk CisJCSAqIHRvIHVwZGF0ZSB0aGUgc3VtbWFyaXppbmcgaW5kZXhlcywgYW5kIHVwZGF0ZSB0aG9z ZSBpbmRleGVzIGlmIHRoZQorCQkgKiBjb2x1bW5zIHdlcmUgdXBkYXRlZCwgb3Igd2UgbWF5IGZh aWwgdG8gZGV0ZWN0IGUuZy4gdmFsdWUgYm91bmQKKwkJICogY2hhbmdlcyBpbiBCUklOIG1pbm1h eCBpbmRleGVzLgorCQkgKi8KKwkJaWYgKHVzZV9ob3RfdXBkYXRlICYmIGJtc19vdmVybGFwKG1v ZGlmaWVkX2F0dHJzLCBzdW1fYXR0cnMpKQorCQkJc3VtbWFyaXplZF91cGRhdGUgPSB0cnVlOwog CX0KIAllbHNlCiAJewpAQCAtNDEyNiw3ICs0MTM2LDYgQEAgbDI6CiAJCWhlYXBfZnJlZXR1cGxl KG9sZF9rZXlfdHVwbGUpOwogCiAJYm1zX2ZyZWUoaG90X2F0dHJzKTsKLQlibXNfZnJlZShzdW1f YXR0cnMpOwogCWJtc19mcmVlKGtleV9hdHRycyk7CiAJYm1zX2ZyZWUoaWRfYXR0cnMpOwogCWJt c19mcmVlKG1vZGlmaWVkX2F0dHJzKTsKQEAgLTQ0MTMsNyArNDQyMiw3IEBAIHNpbXBsZV9oZWFw X3VwZGF0ZShSZWxhdGlvbiByZWxhdGlvbiwgSXRlbVBvaW50ZXIgb3RpZCwgSGVhcFR1cGxlIHR1 cCwKIAlyZXN1bHQgPSBoZWFwX3VwZGF0ZShyZWxhdGlvbiwgb3RpZCwgdHVwLAogCQkJCQkJIEdl dEN1cnJlbnRDb21tYW5kSWQodHJ1ZSksIEludmFsaWRTbmFwc2hvdCwKIAkJCQkJCSB0cnVlIC8q IHdhaXQgZm9yIGNvbW1pdCAqLyAsCi0JCQkJCQkgJnRtZmQsICZsb2NrbW9kZSwgdXBkYXRlX2lu ZGV4ZXMpOworCQkJCQkJICZ0bWZkLCAmbG9ja21vZGUsIHVwZGF0ZV9pbmRleGVzLCBOVUxMKTsK IAlzd2l0Y2ggKHJlc3VsdCkKIAl7CiAJCWNhc2UgVE1fU2VsZk1vZGlmaWVkOgpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYyBiL3NyYy9iYWNrZW5k L2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMKaW5kZXggYzBiZWMwMTQxNTQuLjhlOWFiODky ZDczIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5j CisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMKQEAgLTMxMiw4 ICszMTIsOCBAQCBoZWFwYW1fdHVwbGVfZGVsZXRlKFJlbGF0aW9uIHJlbGF0aW9uLCBJdGVtUG9p bnRlciB0aWQsIENvbW1hbmRJZCBjaWQsCiBzdGF0aWMgVE1fUmVzdWx0CiBoZWFwYW1fdHVwbGVf dXBkYXRlKFJlbGF0aW9uIHJlbGF0aW9uLCBJdGVtUG9pbnRlciBvdGlkLCBUdXBsZVRhYmxlU2xv dCAqc2xvdCwKIAkJCQkJQ29tbWFuZElkIGNpZCwgU25hcHNob3Qgc25hcHNob3QsIFNuYXBzaG90 IGNyb3NzY2hlY2ssCi0JCQkJCWJvb2wgd2FpdCwgVE1fRmFpbHVyZURhdGEgKnRtZmQsCi0JCQkJ CUxvY2tUdXBsZU1vZGUgKmxvY2ttb2RlLCBUVV9VcGRhdGVJbmRleGVzICp1cGRhdGVfaW5kZXhl cykKKwkJCQkJYm9vbCB3YWl0LCBUTV9GYWlsdXJlRGF0YSAqdG1mZCwgTG9ja1R1cGxlTW9kZSAq bG9ja21vZGUsCisJCQkJCVRVX1VwZGF0ZUluZGV4ZXMgKnVwZGF0ZV9pbmRleGVzLCBFU3RhdGUg KmVzdGF0ZSkKIHsKIAlib29sCQlzaG91bGRGcmVlID0gdHJ1ZTsKIAlIZWFwVHVwbGUJdHVwbGUg PSBFeGVjRmV0Y2hTbG90SGVhcFR1cGxlKHNsb3QsIHRydWUsICZzaG91bGRGcmVlKTsKQEAgLTMy NCw3ICszMjQsNyBAQCBoZWFwYW1fdHVwbGVfdXBkYXRlKFJlbGF0aW9uIHJlbGF0aW9uLCBJdGVt UG9pbnRlciBvdGlkLCBUdXBsZVRhYmxlU2xvdCAqc2xvdCwKIAl0dXBsZS0+dF90YWJsZU9pZCA9 IHNsb3QtPnR0c190YWJsZU9pZDsKIAogCXJlc3VsdCA9IGhlYXBfdXBkYXRlKHJlbGF0aW9uLCBv dGlkLCB0dXBsZSwgY2lkLCBjcm9zc2NoZWNrLCB3YWl0LAotCQkJCQkJIHRtZmQsIGxvY2ttb2Rl LCB1cGRhdGVfaW5kZXhlcyk7CisJCQkJCQkgdG1mZCwgbG9ja21vZGUsIHVwZGF0ZV9pbmRleGVz LCBlc3RhdGUpOwogCUl0ZW1Qb2ludGVyQ29weSgmdHVwbGUtPnRfc2VsZiwgJnNsb3QtPnR0c190 aWQpOwogCiAJLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90YWJsZS90YWJsZWFt LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdGFibGUvdGFibGVhbS5jCmluZGV4IGUxOGE4ZjgyNTBm Li45ZmVjYThhMjk2ZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RhYmxlL3RhYmxl YW0uYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdGFibGUvdGFibGVhbS5jCkBAIC0zNDUsNyAr MzQ1LDcgQEAgc2ltcGxlX3RhYmxlX3R1cGxlX3VwZGF0ZShSZWxhdGlvbiByZWwsIEl0ZW1Qb2lu dGVyIG90aWQsCiAJCQkJCQkJCUdldEN1cnJlbnRDb21tYW5kSWQodHJ1ZSksCiAJCQkJCQkJCXNu YXBzaG90LCBJbnZhbGlkU25hcHNob3QsCiAJCQkJCQkJCXRydWUgLyogd2FpdCBmb3IgY29tbWl0 ICovICwKLQkJCQkJCQkJJnRtZmQsICZsb2NrbW9kZSwgdXBkYXRlX2luZGV4ZXMpOworCQkJCQkJ CQkmdG1mZCwgJmxvY2ttb2RlLCB1cGRhdGVfaW5kZXhlcywgTlVMTCk7CiAKIAlzd2l0Y2ggKHJl c3VsdCkKIAl7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jYXRhbG9nL2luZGV4LmMgYi9zcmMv YmFja2VuZC9jYXRhbG9nL2luZGV4LmMKaW5kZXggY2RhYmY3ODAyNDQuLjc4YjQzMTBlMDVmIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9jYXRhbG9nL2luZGV4LmMKKysrIGIvc3JjL2JhY2tlbmQv Y2F0YWxvZy9pbmRleC5jCkBAIC0yNDU1LDcgKzI0NTUsMjYgQEAgQnVpbGRJbmRleEluZm8oUmVs YXRpb24gaW5kZXgpCiAKIAkvKiBmaWxsIGluIGF0dHJpYnV0ZSBudW1iZXJzICovCiAJZm9yIChp ID0gMDsgaSA8IG51bUF0dHM7IGkrKykKKwl7CisJCUNvbXBhY3RBdHRyaWJ1dGUgKmF0dHIgPSBU dXBsZURlc2NDb21wYWN0QXR0cihSZWxhdGlvbkdldERlc2NyKGluZGV4KSwgaSk7CisKIAkJaWkt PmlpX0luZGV4QXR0ck51bWJlcnNbaV0gPSBpbmRleFN0cnVjdC0+aW5ka2V5LnZhbHVlc1tpXTsK KwkJaWktPmlpX0luZGV4QXR0cnMgPQorCQkJYm1zX2FkZF9tZW1iZXIoaWktPmlpX0luZGV4QXR0 cnMsCisJCQkJCQkgICBpbmRleFN0cnVjdC0+aW5ka2V5LnZhbHVlc1tpXSAtIEZpcnN0TG93SW52 YWxpZEhlYXBBdHRyaWJ1dGVOdW1iZXIpOworCisJCWlpLT5paV9JbmRleEF0dHJMZW5baV0gPSBh dHRyLT5hdHRsZW47CisJCWlmIChhdHRyLT5hdHRieXZhbCkKKwkJCWlpLT5paV9JbmRleEF0dHJC eVZhbCA9IGJtc19hZGRfbWVtYmVyKGlpLT5paV9JbmRleEF0dHJCeVZhbCwgaSk7CisJfQorCisJ LyogY29sbGVjdCBhdHRyaWJ1dGVzIHVzZWQgaW4gdGhlIGV4cHJlc3Npb24sIGlmIG9uZSBpcyBw cmVzZW50ICovCisJaWYgKGlpLT5paV9FeHByZXNzaW9ucykKKwkJcHVsbF92YXJhdHRub3MoKE5v ZGUgKikgaWktPmlpX0V4cHJlc3Npb25zLCAxLCAmaWktPmlpX0V4cHJlc3Npb25BdHRycyk7CisK KwkvKiBjb2xsZWN0IGF0dHJpYnV0ZXMgdXNlZCBpbiB0aGUgcHJlZGljYXRlLCBpZiBvbmUgaXMg cHJlc2VudCAqLworCWlmIChpaS0+aWlfUHJlZGljYXRlKQorCQlwdWxsX3ZhcmF0dG5vcygoTm9k ZSAqKSBpaS0+aWlfUHJlZGljYXRlLCAxLCAmaWktPmlpX1ByZWRpY2F0ZUF0dHJzKTsKIAogCS8q IGZldGNoIGV4Y2x1c2lvbiBjb25zdHJhaW50IGluZm8gaWYgYW55ICovCiAJaWYgKGluZGV4U3Ry dWN0LT5pbmRpc2V4Y2x1c2lvbikKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4 ZWNJbmRleGluZy5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0luZGV4aW5nLmMKaW5kZXgg N2M4N2YwMTJjMzAuLjY3OTEyNGQxZGZhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRv ci9leGVjSW5kZXhpbmcuYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjSW5kZXhpbmcu YwpAQCAtMTE3LDYgKzExNyw4IEBACiAjaW5jbHVkZSAidXRpbHMvbXVsdGlyYW5nZXR5cGVzLmgi CiAjaW5jbHVkZSAidXRpbHMvcmFuZ2V0eXBlcy5oIgogI2luY2x1ZGUgInV0aWxzL3NuYXBtZ3Iu aCIKKyNpbmNsdWRlICJ1dGlscy9kYXR1bS5oIgorI2luY2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5o IgogCiAvKiB3YWl0TW9kZSBhcmd1bWVudCB0byBjaGVja19leGNsdXNpb25fb3JfdW5pcXVlX2Nv bnN0cmFpbnQoKSAqLwogdHlwZWRlZiBlbnVtCkBAIC0xMDg5LDYgKzEwOTEsOSBAQCBpbmRleF91 bmNoYW5nZWRfYnlfdXBkYXRlKFJlc3VsdFJlbEluZm8gKnJlc3VsdFJlbEluZm8sIEVTdGF0ZSAq ZXN0YXRlLAogCiAJaWYgKGhhc2V4cHJlc3Npb24pCiAJeworCQlpZiAoaW5kZXhJbmZvLT5paV9J bmRleFVuY2hhbmdlZCkKKwkJCXJldHVybiB0cnVlOworCiAJCWluZGV4SW5mby0+aWlfSW5kZXhV bmNoYW5nZWQgPSBmYWxzZTsKIAkJcmV0dXJuIGZhbHNlOwogCX0KQEAgLTExNjYsMyArMTE3MSwx OTcgQEAgRXhlY1dpdGhvdXRPdmVybGFwc05vdEVtcHR5KFJlbGF0aW9uIHJlbCwgTmFtZURhdGEg YXR0bmFtZSwgRGF0dW0gYXR0dmFsLCBjaGFyIHQKIAkJCQkgZXJybXNnKCJlbXB0eSBXSVRIT1VU IE9WRVJMQVBTIHZhbHVlIGZvdW5kIGluIGNvbHVtbiBcIiVzXCIgaW4gcmVsYXRpb24gXCIlc1wi IiwKIAkJCQkJCU5hbWVTdHIoYXR0bmFtZSksIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHJlbCkp KSk7CiB9CisKKy8qCisgKiBEZXRlcm1pbmUgaWYgYW55IGluZGV4IHdpdGggYW4gZXhwcmVzc2lv biByZXF1aXJlcyB1cGRhdGluZy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgcmV2aWV3IGFs bCBpbmRleGVzIHdpdGggZXhwcmVzc2lvbnMgdG8gZGV0ZXJtaW5lIGlmIHRoZQorICogdXBkYXRl IGZyb20gb2xkIHRvIG5ldyB0dXBsZSByZXF1aXJlcyB0aGF0IHRoZSBpbmRleCBiZSB1cGRhdGVk LiAgVGhpcyBpcworICogdXNlZCB0byBkZXRlcm1pbmUgaWYgYSBIT1QgdXBkYXRlIGlzIHBvc3Np YmxlIG9yIG5vdC4KKyAqCisgKiBSZXR1cm5zIHRydWUgaWZmIG5vbmUgb2YgdGhlIGV4cHJlc3Np b24gaW5kZXhlcyByZXF1aXJlIHVwZGF0aW5nIGR1ZSB0byB0aGUKKyAqIGNoYW5nZSBmcm9tIG9s ZCB0byBuZXcgdHVwbGUgb3Igd2hlbiBib3RoIHRoZSBvbGQgYW5kIG5ldyB0dXBsZXMgZG8gbm90 CisgKiBzYXRpc2Z5IHRoZSBwcmVkaWNhdGUgb2YgdGhlIGluZGV4LgorICovCitib29sCitFeGVj SW5kZXhlc0V4cHJlc3Npb25zV2VyZU5vdFVwZGF0ZWQoUmVsYXRpb24gcmVsYXRpb24sCisJCQkJ CQkJCQkgQml0bWFwc2V0ICptb2RpZmllZF9hdHRycywKKwkJCQkJCQkJCSBFU3RhdGUgKmVzdGF0 ZSwKKwkJCQkJCQkJCSBIZWFwVHVwbGUgb2xkX3R1cGxlLAorCQkJCQkJCQkJIEhlYXBUdXBsZSBu ZXdfdHVwbGUpCit7CisJTGlzdENlbGwgICAqbGM7CisJTGlzdAkgICAqaW5kZXhpbmZvbGlzdCA9 IFJlbGF0aW9uR2V0RXhwckluZGV4SW5mb0xpc3QocmVsYXRpb24pOworCUV4cHJDb250ZXh0ICpl Y29udGV4dCA9IE5VTEw7CisJVHVwbGVEZXNjCXR1cGxlZGVzYzsKKwlUdXBsZVRhYmxlU2xvdCAq b2xkX3R0cyA9IE5VTEw7CisJVHVwbGVUYWJsZVNsb3QgKm5ld190dHMgPSBOVUxMOworCWJvb2wJ CWV4cHJlc3Npb25fY2hlY2tzID0gUmVsYXRpb25HZXRFeHByZXNzaW9uQ2hlY2tzKHJlbGF0aW9u KTsKKwlib29sCQljaGFuZ2VkID0gZmFsc2U7CisKKyNpZm5kZWYgVVNFX0FTU0VSVF9DSEVDS0lO RworCisJLyoKKwkgKiBBc3N1bWUgdGhlIGluZGV4IGlzIGNoYW5nZWQgd2hlbiB3ZSBkb24ndCBo YXZlIGFuIGVzdGF0ZSBjb250ZXh0IHRvIHVzZQorCSAqIG9yIHRoZSByZWxvcHRpb24gaXMgZGlz YWJsZWQuCisJICovCisJaWYgKCFleHByZXNzaW9uX2NoZWNrcyB8fCBlc3RhdGUgPT0gTlVMTCkK KwkJcmV0dXJuIGNoYW5nZWQ7CisjZW5kaWYKKworCUFzc2VydChleHByZXNzaW9uX2NoZWNrcyA9 PSB0cnVlKTsKKwlBc3NlcnQoZXN0YXRlICE9IE5VTEwpOworCisJLyoKKwkgKiBFeGFtaW5lIGV4 cHJlc3Npb24gYW5kIHBhcnRpYWwgaW5kZXhzIG9uIHRoaXMgcmVsYXRpb24gcmVsYXRpdmUgdG8g dGhlCisJICogY2hhbmdlcyBiZXR3ZWVuIG9sZCBhbmQgbmV3IHR1cGxlcy4KKwkgKi8KKwlmb3Jl YWNoKGxjLCBpbmRleGluZm9saXN0KQorCXsKKwkJSW5kZXhJbmZvICAqaW5kZXhJbmZvID0gKElu ZGV4SW5mbyAqKSBsZmlyc3QobGMpOworCisJCS8qCisJCSAqIElmIHRoaXMgaXMgYSBwYXJ0aWFs IGluZGV4IGl0IGhhcyBhIHByZWRpY2F0ZSwgZXZhbHVhdGUgdGhlCisJCSAqIGV4cHJlc3Npb24g dG8gZGV0ZXJtaW5lIGlmIHdlIG5lZWQgdG8gaW5jbHVkZSBpdCBvciBub3QuCisJCSAqLworCQlp ZiAoYm1zX292ZXJsYXAoaW5kZXhJbmZvLT5paV9QcmVkaWNhdGVBdHRycywgbW9kaWZpZWRfYXR0 cnMpKQorCQl7CisJCQlFeHByU3RhdGUgICpwc3RhdGU7CisJCQlib29sCQlvbGRfdHVwbGVfcXVh bGlmaWVzLAorCQkJCQkJbmV3X3R1cGxlX3F1YWxpZmllczsKKworCQkJLyogQ3JlYXRlIHRoZXNl IG9uY2UsIG9ubHkgaWYgbmVjZXNzYXJ5LCB0aGVuIHJldXNlIHRoZW0uICovCisJCQlpZiAoIWVj b250ZXh0KQorCQkJeworCQkJCWVjb250ZXh0ID0gR2V0UGVyVHVwbGVFeHByQ29udGV4dChlc3Rh dGUpOworCQkJCXR1cGxlZGVzYyA9IFJlbGF0aW9uR2V0RGVzY3IocmVsYXRpb24pOworCQkJCW9s ZF90dHMgPSBNYWtlU2luZ2xlVHVwbGVUYWJsZVNsb3QodHVwbGVkZXNjLAorCQkJCQkJCQkJCQkJ ICAgJlRUU09wc0hlYXBUdXBsZSk7CisJCQkJbmV3X3R0cyA9IE1ha2VTaW5nbGVUdXBsZVRhYmxl U2xvdCh0dXBsZWRlc2MsCisJCQkJCQkJCQkJCQkgICAmVFRTT3BzSGVhcFR1cGxlKTsKKworCQkJ CUV4ZWNTdG9yZUhlYXBUdXBsZShvbGRfdHVwbGUsIG9sZF90dHMsIEludmFsaWRCdWZmZXIpOwor CQkJCUV4ZWNTdG9yZUhlYXBUdXBsZShuZXdfdHVwbGUsIG5ld190dHMsIEludmFsaWRCdWZmZXIp OworCQkJfQorCisJCQlwc3RhdGUgPSBFeGVjUHJlcGFyZVF1YWwoaW5kZXhJbmZvLT5paV9QcmVk aWNhdGUsIGVzdGF0ZSk7CisKKwkJCS8qCisJCQkgKiBIZXJlIHRoZSB0ZXJtICJxdWFsaWZpZXMi IG1lYW5zICJzYXRpc2ZpZXMgdGhlIHByZWRpY2F0ZQorCQkJICogY29uZGl0aW9uIG9mIHRoZSBw YXJ0aWFsIGluZGV4Ii4KKwkJCSAqLworCQkJZWNvbnRleHQtPmVjeHRfc2NhbnR1cGxlID0gb2xk X3R0czsKKwkJCW9sZF90dXBsZV9xdWFsaWZpZXMgPSBFeGVjUXVhbChwc3RhdGUsIGVjb250ZXh0 KTsKKworCQkJZWNvbnRleHQtPmVjeHRfc2NhbnR1cGxlID0gbmV3X3R0czsKKwkJCW5ld190dXBs ZV9xdWFsaWZpZXMgPSBFeGVjUXVhbChwc3RhdGUsIGVjb250ZXh0KTsKKworCQkJLyoKKwkJCSAq IElmIG5laXRoZXIgdGhlIG9sZCBub3IgdGhlIG5ldyB0dXBsZXMgc2F0aXNmeSB0aGUgcHJlZGlj YXRlIHdlCisJCQkgKiBjYW4gYmUgc3VyZSB0aGF0IHRoaXMgaW5kZXggZG9lc24ndCBuZWVkIHVw ZGF0aW5nLCBjb250aW51ZSB0bworCQkJICogdGhlIG5leHQgaW5kZXguCisJCQkgKi8KKwkJCWlm ICgobmV3X3R1cGxlX3F1YWxpZmllcyA9PSBmYWxzZSkgJiYgKG9sZF90dXBsZV9xdWFsaWZpZXMg PT0gZmFsc2UpKQorCQkJCWNvbnRpbnVlOworCisJCQkvKgorCQkJICogSWYgdGhlcmUgaXMgYSB0 cmFuc2l0aW9uIGJldHdlZW4gaW5kZXhlZCBhbmQgbm90IGluZGV4ZWQsCisJCQkgKiB0aGF0J3Mg ZW5vdWdoIHRvIHJlcXVpcmUgdGhhdCB0aGlzIGluZGV4IGlzIHVwZGF0ZWQuCisJCQkgKi8KKwkJ CWlmIChuZXdfdHVwbGVfcXVhbGlmaWVzICE9IG9sZF90dXBsZV9xdWFsaWZpZXMpCisJCQl7CisJ CQkJY2hhbmdlZCA9IHRydWU7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCS8qCisJCQkgKiBPdGhl cndpc2UgdGhlIG9sZCBhbmQgbmV3IHZhbHVlcyBleGlzdCBpbiB0aGUgaW5kZXgsIGJ1dCBkaWQK KwkJCSAqIHRoZXkgZ2V0IHVwZGF0ZWQ/ICBXZSBkb24ndCB5ZXQga25vdywgc28gcHJvY2VlZCB3 aXRoIHRoZSBuZXh0CisJCQkgKiBzdGF0ZW1lbnQgaW4gdGhlIGxvb3AgdG8gZmluZCBvdXQuCisJ CQkgKi8KKwkJfQorCisKKwkJLyoKKwkJICogSW5kZXhlcyB3aXRoIGV4cHJlc3Npb25zIG1heSBv ciBtYXkgbm90IGhhdmUgY2hhbmdlZCwgaXQgaXMKKwkJICogaW1wb3NzaWJsZSB0byBrbm93IHdp dGhvdXQgZXhlcmNpc2luZyB0aGVpciBleHByZXNzaW9uIGFuZAorCQkgKiByZXZpZXdpbmcgaW5k ZXggdHVwbGUgc3RhdGUgZm9yIGNoYW5nZXMuICBUaGlzIGlzIGEgbG90IG9mIHdvcmssCisJCSAq IGJ1dCBiZWNhdXNlIGFsbCBpbmRleGVzIG9uIEpTT05CIGNvbHVtbnMgZmFsbCBpbnRvIHRoaXMg Y2F0ZWdvcnkgaXQKKwkJICogY2FuIGJlIHdvcnRoIGl0IHRvIGF2b2lkIGluZGV4IHVwZGF0ZXMg YW5kIHJlbWFpbiBvbiB0aGUgSE9UIHVwZGF0ZQorCQkgKiBwYXRoIHdoZW4gcG9zc2libGUuCisJ CSAqLworCQlpZiAoYm1zX292ZXJsYXAoaW5kZXhJbmZvLT5paV9FeHByZXNzaW9uQXR0cnMsIG1v ZGlmaWVkX2F0dHJzKSkKKwkJeworCQkJRGF0dW0JCW9sZF92YWx1ZXNbSU5ERVhfTUFYX0tFWVNd OworCQkJYm9vbAkJb2xkX2lzbnVsbFtJTkRFWF9NQVhfS0VZU107CisJCQlEYXR1bQkJbmV3X3Zh bHVlc1tJTkRFWF9NQVhfS0VZU107CisJCQlib29sCQluZXdfaXNudWxsW0lOREVYX01BWF9LRVlT XTsKKworCQkJLyogQ3JlYXRlIHRoZXNlIG9uY2UsIG9ubHkgaWYgbmVjZXNzYXJ5LCB0aGVuIHJl dXNlIHRoZW0uICovCisJCQlpZiAoIWVjb250ZXh0KQorCQkJeworCQkJCWVjb250ZXh0ID0gR2V0 UGVyVHVwbGVFeHByQ29udGV4dChlc3RhdGUpOworCQkJCXR1cGxlZGVzYyA9IFJlbGF0aW9uR2V0 RGVzY3IocmVsYXRpb24pOworCQkJCW9sZF90dHMgPSBNYWtlU2luZ2xlVHVwbGVUYWJsZVNsb3Qo dHVwbGVkZXNjLAorCQkJCQkJCQkJCQkJICAgJlRUU09wc0hlYXBUdXBsZSk7CisJCQkJbmV3X3R0 cyA9IE1ha2VTaW5nbGVUdXBsZVRhYmxlU2xvdCh0dXBsZWRlc2MsCisJCQkJCQkJCQkJCQkgICAm VFRTT3BzSGVhcFR1cGxlKTsKKworCQkJCUV4ZWNTdG9yZUhlYXBUdXBsZShvbGRfdHVwbGUsIG9s ZF90dHMsIEludmFsaWRCdWZmZXIpOworCQkJCUV4ZWNTdG9yZUhlYXBUdXBsZShuZXdfdHVwbGUs IG5ld190dHMsIEludmFsaWRCdWZmZXIpOworCQkJfQorCisJCQlpbmRleEluZm8tPmlpX0V4cHJl c3Npb25zU3RhdGUgPSBOSUw7CisKKwkJCWVjb250ZXh0LT5lY3h0X3NjYW50dXBsZSA9IG9sZF90 dHM7CisJCQlGb3JtSW5kZXhEYXR1bShpbmRleEluZm8sCisJCQkJCQkgICBvbGRfdHRzLAorCQkJ CQkJICAgZXN0YXRlLAorCQkJCQkJICAgb2xkX3ZhbHVlcywKKwkJCQkJCSAgIG9sZF9pc251bGwp OworCisJCQllY29udGV4dC0+ZWN4dF9zY2FudHVwbGUgPSBuZXdfdHRzOworCQkJRm9ybUluZGV4 RGF0dW0oaW5kZXhJbmZvLAorCQkJCQkJICAgbmV3X3R0cywKKwkJCQkJCSAgIGVzdGF0ZSwKKwkJ CQkJCSAgIG5ld192YWx1ZXMsCisJCQkJCQkgICBuZXdfaXNudWxsKTsKKworCQkJZm9yIChpbnQg aSA9IDA7IGkgPCBpbmRleEluZm8tPmlpX051bUluZGV4S2V5QXR0cnM7IGkrKykKKwkJCXsKKwkJ CQlpZiAob2xkX2lzbnVsbFtpXSAhPSBuZXdfaXNudWxsW2ldKQorCQkJCXsKKwkJCQkJY2hhbmdl ZCA9IHRydWU7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQllbHNlIGlmICghb2xkX2lzbnVsbFtp XSkKKwkJCQl7CisJCQkJCWludDE2CQllbG1sZW4gPSBpbmRleEluZm8tPmlpX0luZGV4QXR0ckxl bltpXTsKKwkJCQkJYm9vbAkJZWxtYnl2YWwgPSBibXNfaXNfbWVtYmVyKGksIGluZGV4SW5mby0+ aWlfSW5kZXhBdHRyQnlWYWwpOworCisJCQkJCWlmICghZGF0dW1faW1hZ2VfZXEob2xkX3ZhbHVl c1tpXSwgbmV3X3ZhbHVlc1tpXSwKKwkJCQkJCQkJCQllbG1ieXZhbCwgZWxtbGVuKSkKKwkJCQkJ eworCQkJCQkJY2hhbmdlZCA9IHRydWU7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0KKwkJ CX0KKworCQkJLyogU2hvcnRjdXQgaW5kZXhfdW5jaGFuZ2VkX2J5X3VwZGF0ZSgpLCB3ZSBrbm93 IHRoZSBhbnN3ZXIuICovCisJCQlpbmRleEluZm8tPmlpX0NoZWNrZWRVbmNoYW5nZWQgPSB0cnVl OworCQkJaW5kZXhJbmZvLT5paV9JbmRleFVuY2hhbmdlZCA9ICFjaGFuZ2VkOworCisJCQlpZiAo Y2hhbmdlZCkKKwkJCQlicmVhazsKKwkJfQorCX0KKworCWlmIChlY29udGV4dCkKKwl7CisJCUV4 ZWNEcm9wU2luZ2xlVHVwbGVUYWJsZVNsb3Qob2xkX3R0cyk7CisJCUV4ZWNEcm9wU2luZ2xlVHVw bGVUYWJsZVNsb3QobmV3X3R0cyk7CisJfQorCisJcmV0dXJuICFjaGFuZ2VkOworfQpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1vZGlmeVRhYmxlLmMgYi9zcmMvYmFja2Vu ZC9leGVjdXRvci9ub2RlTW9kaWZ5VGFibGUuYwppbmRleCBiMGZlNTAwNzVhZC4uZDY4ZjQwY2I5 OTggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVNb2RpZnlUYWJsZS5jCisr KyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVNb2RpZnlUYWJsZS5jCkBAIC0yMjgzLDcgKzIy ODMsOCBAQCBscmVwbGFjZToKIAkJCQkJCQkJZXN0YXRlLT5lc19jcm9zc2NoZWNrX3NuYXBzaG90 LAogCQkJCQkJCQl0cnVlIC8qIHdhaXQgZm9yIGNvbW1pdCAqLyAsCiAJCQkJCQkJCSZjb250ZXh0 LT50bWZkLCAmdXBkYXRlQ3h0LT5sb2NrbW9kZSwKLQkJCQkJCQkJJnVwZGF0ZUN4dC0+dXBkYXRl SW5kZXhlcyk7CisJCQkJCQkJCSZ1cGRhdGVDeHQtPnVwZGF0ZUluZGV4ZXMsCisJCQkJCQkJCWVz dGF0ZSk7CiAKIAlyZXR1cm4gcmVzdWx0OwogfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRp bHMvY2FjaGUvcmVsY2FjaGUuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL3JlbGNhY2hlLmMK aW5kZXggMzk4MTE0MzczZTkuLmI1ZTQ3YjM1MjFlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91 dGlscy9jYWNoZS9yZWxjYWNoZS5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL3JlbGNh Y2hlLmMKQEAgLTY0LDYgKzY0LDcgQEAKICNpbmNsdWRlICJjYXRhbG9nL3BnX3R5cGUuaCIKICNp bmNsdWRlICJjYXRhbG9nL3NjaGVtYXBnLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9zdG9yYWdlLmgi CisjaW5jbHVkZSAiY2F0YWxvZy9pbmRleC5oIgogI2luY2x1ZGUgImNvbW1hbmRzL3BvbGljeS5o IgogI2luY2x1ZGUgImNvbW1hbmRzL3B1YmxpY2F0aW9uY21kcy5oIgogI2luY2x1ZGUgImNvbW1h bmRzL3RyaWdnZXIuaCIKQEAgLTUxODgsNiArNTE4OSwxMjggQEAgUmVsYXRpb25HZXRJbmRleFBy ZWRpY2F0ZShSZWxhdGlvbiByZWxhdGlvbikKIAlyZXR1cm4gcmVzdWx0OwogfQogCisgLyoKKyAg KiBSZWxhdGlvbkdldEV4cHJJbmRleEluZm9MaXN0IC0tIGdldCBhIGxpc3Qgb2YgSW5kZXhJbmZv IGZvciBleHByZXNzaW9uCisgICogaW5kZXhlcyBvbiB0aGlzIHJlbGF0aW9uCisgICovCitMaXN0 ICoKK1JlbGF0aW9uR2V0RXhwckluZGV4SW5mb0xpc3QoUmVsYXRpb24gcmVsYXRpb24pCit7CisJ TGlzdENlbGwgICAqbGM7CisJTGlzdAkgICAqaW5kZXhvaWRsaXN0OworCUxpc3QJICAgKm5ld2lu ZGV4b2lkbGlzdDsKKwlMaXN0CSAgICpyZXN1bHQgPSBOVUxMOworCUxpc3QJICAgKm9sZGxpc3Q7 CisJT2lkCQkJcmVscGtpbmRleDsKKwlPaWQJCQlyZWxyZXBsaW5kZXg7CisJTWVtb3J5Q29udGV4 dCBvbGRjeHQ7CisKKwlpZiAocmVsYXRpb24tPnJkX2lpZXhwcmxpc3QpCisJCXJldHVybiBsaXN0 X2NvcHkocmVsYXRpb24tPnJkX2lpZXhwcmxpc3QpOworCisJLyogRmFzdCBwYXRoIGlmIGRlZmlu aXRlbHkgbm8gaW5kZXhlcyAqLworCWlmICghUmVsYXRpb25HZXRGb3JtKHJlbGF0aW9uKS0+cmVs aGFzaW5kZXgpCisJCXJldHVybiBOSUw7CisKK3Jlc3RhcnQ6CisJaW5kZXhvaWRsaXN0ID0gUmVs YXRpb25HZXRJbmRleExpc3QocmVsYXRpb24pOworCisJLyogRmFsbCBvdXQgaWYgbm8gaW5kZXhl cyAoYnV0IHJlbGhhc2luZGV4IHdhcyBzZXQpICovCisJaWYgKGluZGV4b2lkbGlzdCA9PSBOSUwp CisJCXJldHVybiBOSUw7CisKKwkvKgorCSAqIENvcHkgdGhlIHJkX3BraW5kZXggYW5kIHJkX3Jl cGxpZGluZGV4IHZhbHVlcyBjb21wdXRlZCBieQorCSAqIFJlbGF0aW9uR2V0SW5kZXhMaXN0IGJl Zm9yZSBwcm9jZWVkaW5nLiAgVGhpcyBpcyBuZWVkZWQgYmVjYXVzZSBhCisJICogcmVsY2FjaGUg Zmx1c2ggY291bGQgb2NjdXIgaW5zaWRlIGluZGV4X29wZW4gYmVsb3csIHJlc2V0dGluZyB0aGUK KwkgKiBmaWVsZHMgbWFuYWdlZCBieSBSZWxhdGlvbkdldEluZGV4TGlzdC4gIFdlIG5lZWQgdG8g ZG8gdGhlIHdvcmsgd2l0aAorCSAqIHN0YWJsZSB2YWx1ZXMgb2YgdGhlc2UgZmllbGRzLgorCSAq LworCXJlbHBraW5kZXggPSByZWxhdGlvbi0+cmRfcGtpbmRleDsKKwlyZWxyZXBsaW5kZXggPSBy ZWxhdGlvbi0+cmRfcmVwbGlkaW5kZXg7CisKKwlmb3JlYWNoKGxjLCBpbmRleG9pZGxpc3QpCisJ eworCQlPaWQJCQlvaWQgPSBsZmlyc3Rfb2lkKGxjKTsKKwkJRGF0dW0JCWRhdHVtOworCQlib29s CQlpc251bGw7CisJCU5vZGUJICAgKmluZGV4RXhwcmVzc2lvbnM7CisJCU5vZGUJICAgKmluZGV4 UHJlZGljYXRlOworCQlSZWxhdGlvbglpbmRleERlc2M7CisJCUluZGV4SW5mbyAgKmluZGV4SW5m bzsKKworCQkvKgorCQkgKiBFeHRyYWN0IGluZGV4IGV4cHJlc3Npb25zIGFuZCBpbmRleCBwcmVk aWNhdGUuICBOb3RlOiBEb24ndCB1c2UKKwkJICogUmVsYXRpb25HZXRJbmRleEV4cHJlc3Npb25z KCkvUmVsYXRpb25HZXRJbmRleFByZWRpY2F0ZSgpLCBiZWNhdXNlCisJCSAqIHRob3NlIG1pZ2h0 IHJ1biBjb25zdGFudCBleHByZXNzaW9ucyBldmFsdWF0aW9uLCB3aGljaCBuZWVkcyBhCisJCSAq IHNuYXBzaG90LCB3aGljaCB3ZSBtaWdodCBub3QgaGF2ZSBoZXJlLiAgKEFsc28sIGl0J3MgcHJv YmFibHkgbW9yZQorCQkgKiBzb3VuZCB0byBjb2xsZWN0IHRoZSBiaXRtYXBzIGJlZm9yZSBhbnkg dHJhbnNmb3JtYXRpb25zIHRoYXQgbWlnaHQKKwkJICogZWxpbWluYXRlIGNvbHVtbnMsIGJ1dCB0 aGUgcHJhY3RpY2FsIGltcGFjdCBvZiB0aGlzIGlzIGxpbWl0ZWQuKQorCQkgKi8KKwkJaW5kZXhE ZXNjID0gaW5kZXhfb3BlbihvaWQsIEFjY2Vzc1NoYXJlTG9jayk7CisJCWRhdHVtID0gaGVhcF9n ZXRhdHRyKGluZGV4RGVzYy0+cmRfaW5kZXh0dXBsZSwgQW51bV9wZ19pbmRleF9pbmRleHBycywK KwkJCQkJCQkgR2V0UGdJbmRleERlc2NyaXB0b3IoKSwgJmlzbnVsbCk7CisJCWlmICghaXNudWxs KQorCQkJaW5kZXhFeHByZXNzaW9ucyA9IHN0cmluZ1RvTm9kZShUZXh0RGF0dW1HZXRDU3RyaW5n KGRhdHVtKSk7CisJCWVsc2UKKwkJCWluZGV4RXhwcmVzc2lvbnMgPSBOVUxMOworCisJCWRhdHVt ID0gaGVhcF9nZXRhdHRyKGluZGV4RGVzYy0+cmRfaW5kZXh0dXBsZSwgQW51bV9wZ19pbmRleF9p bmRwcmVkLAorCQkJCQkJCSBHZXRQZ0luZGV4RGVzY3JpcHRvcigpLCAmaXNudWxsKTsKKwkJaWYg KCFpc251bGwpCisJCQlpbmRleFByZWRpY2F0ZSA9IHN0cmluZ1RvTm9kZShUZXh0RGF0dW1HZXRD U3RyaW5nKGRhdHVtKSk7CisJCWVsc2UKKwkJCWluZGV4UHJlZGljYXRlID0gTlVMTDsKKworCQlp ZiAoaW5kZXhFeHByZXNzaW9ucyB8fCBpbmRleFByZWRpY2F0ZSkKKwkJeworCQkJb2xkY3h0ID0g TWVtb3J5Q29udGV4dFN3aXRjaFRvKENhY2hlTWVtb3J5Q29udGV4dCk7CisJCQlpbmRleEluZm8g PSBCdWlsZEluZGV4SW5mbyhpbmRleERlc2MpOworCQkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9s ZGN4dCk7CisJCQlyZXN1bHQgPSBsYXBwZW5kKHJlc3VsdCwgaW5kZXhJbmZvKTsKKwkJfQorCisJ CWluZGV4X2Nsb3NlKGluZGV4RGVzYywgQWNjZXNzU2hhcmVMb2NrKTsKKwl9CisKKwkvKgorCSAq IER1cmluZyBvbmUgb2YgdGhlIGluZGV4X29wZW5zIGluIHRoZSBhYm92ZSBsb29wLCB3ZSBtaWdo dCBoYXZlIHJlY2VpdmVkCisJICogYSByZWxjYWNoZSBmbHVzaCBldmVudCBvbiB0aGlzIHJlbGNh Y2hlIGVudHJ5LCB3aGljaCBtaWdodCBoYXZlIGJlZW4KKwkgKiBzaWduYWxpbmcgYSBjaGFuZ2Ug aW4gdGhlIHJlbCdzIGluZGV4IGxpc3QuICBJZiBzbywgd2UnZCBiZXR0ZXIgc3RhcnQKKwkgKiBv dmVyIHRvIGVuc3VyZSB3ZSBkZWxpdmVyIHVwLXRvLWRhdGUgSW5kZXhJbmZvLgorCSAqLworCW5l d2luZGV4b2lkbGlzdCA9IFJlbGF0aW9uR2V0SW5kZXhMaXN0KHJlbGF0aW9uKTsKKwlpZiAoZXF1 YWwoaW5kZXhvaWRsaXN0LCBuZXdpbmRleG9pZGxpc3QpICYmCisJCXJlbHBraW5kZXggPT0gcmVs YXRpb24tPnJkX3BraW5kZXggJiYKKwkJcmVscmVwbGluZGV4ID09IHJlbGF0aW9uLT5yZF9yZXBs aWRpbmRleCkKKwl7CisJCS8qIFN0aWxsIHRoZSBzYW1lIGluZGV4IHNldCwgc28gcHJvY2VlZCAq LworCQlsaXN0X2ZyZWUobmV3aW5kZXhvaWRsaXN0KTsKKwkJbGlzdF9mcmVlKGluZGV4b2lkbGlz dCk7CisJfQorCWVsc2UKKwl7CisJCS8qIEdvdHRhIGRvIGl0IG92ZXIgLi4uIG1pZ2h0IGFzIHdl bGwgbm90IGxlYWsgbWVtb3J5ICovCisJCWxpc3RfZnJlZShuZXdpbmRleG9pZGxpc3QpOworCQls aXN0X2ZyZWUoaW5kZXhvaWRsaXN0KTsKKwkJbGlzdF9mcmVlKHJlc3VsdCk7CisKKwkJZ290byBy ZXN0YXJ0OworCX0KKworCS8qIE5vdyBzYXZlIGEgY29weSBvZiB0aGUgY29tcGxldGVkIGxpc3Qg aW4gdGhlIHJlbGNhY2hlIGVudHJ5LiAqLworCW9sZGN4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hU byhDYWNoZU1lbW9yeUNvbnRleHQpOworCW9sZGxpc3QgPSByZWxhdGlvbi0+cmRfaWlleHBybGlz dDsKKwlyZWxhdGlvbi0+cmRfaWlleHBybGlzdCA9IGxpc3RfY29weShyZXN1bHQpOworCU1lbW9y eUNvbnRleHRTd2l0Y2hUbyhvbGRjeHQpOworCisJLyogRG9uJ3QgbGVhayB0aGUgb2xkIGxpc3Qs IGlmIHRoZXJlIGlzIG9uZSAqLworCWlmIChvbGRsaXN0KQorCQlsaXN0X2ZyZWUob2xkbGlzdCk7 CisKKwlyZXR1cm4gcmVzdWx0OworfQorCiAvKgogICogUmVsYXRpb25HZXRJbmRleEF0dHJCaXRt YXAgLS0gZ2V0IGEgYml0bWFwIG9mIGluZGV4IGF0dHJpYnV0ZSBudW1iZXJzCiAgKgpAQCAtNTIy OSw3ICs1MzUyLDExIEBAIFJlbGF0aW9uR2V0SW5kZXhBdHRyQml0bWFwKFJlbGF0aW9uIHJlbGF0 aW9uLCBJbmRleEF0dHJCaXRtYXBLaW5kIGF0dHJLaW5kKQogCUJpdG1hcHNldCAgKnBraW5kZXhh dHRyczsJLyogY29sdW1ucyBpbiB0aGUgcHJpbWFyeSBpbmRleCAqLwogCUJpdG1hcHNldCAgKmlk aW5kZXhhdHRyczsJLyogY29sdW1ucyBpbiB0aGUgcmVwbGljYSBpZGVudGl0eSAqLwogCUJpdG1h cHNldCAgKmhvdGJsb2NraW5nYXR0cnM7CS8qIGNvbHVtbnMgd2l0aCBIT1QgYmxvY2tpbmcgaW5k ZXhlcyAqLworCUJpdG1hcHNldCAgKmhvdGJsb2NraW5nZXhwcmF0dHJzOwkvKiBhcyBhYm92ZSwg YnV0IG9ubHkgdGhvc2UgaW4KKwkJCQkJCQkJCQkgKiBleHByZXNzaW9ucyAqLwogCUJpdG1hcHNl dCAgKnN1bW1hcml6ZWRhdHRyczsJLyogY29sdW1ucyB3aXRoIHN1bW1hcml6aW5nIGluZGV4ZXMg Ki8KKwlCaXRtYXBzZXQgICpzdW1tYXJpemVkZXhwcmF0dHJzOwkvKiBhcyBhYm92ZSwgYnV0IG9u bHkgdGhvc2UgaW4KKwkJCQkJCQkJCQkgKiBleHByZXNzaW9ucyAqLwogCUxpc3QJICAgKmluZGV4 b2lkbGlzdDsKIAlMaXN0CSAgICpuZXdpbmRleG9pZGxpc3Q7CiAJT2lkCQkJcmVscGtpbmRleDsK QEAgLTUyNTIsNiArNTM3OSw4IEBAIFJlbGF0aW9uR2V0SW5kZXhBdHRyQml0bWFwKFJlbGF0aW9u IHJlbGF0aW9uLCBJbmRleEF0dHJCaXRtYXBLaW5kIGF0dHJLaW5kKQogCQkJCXJldHVybiBibXNf Y29weShyZWxhdGlvbi0+cmRfaG90YmxvY2tpbmdhdHRyKTsKIAkJCWNhc2UgSU5ERVhfQVRUUl9C SVRNQVBfU1VNTUFSSVpFRDoKIAkJCQlyZXR1cm4gYm1zX2NvcHkocmVsYXRpb24tPnJkX3N1bW1h cml6ZWRhdHRyKTsKKwkJCWNhc2UgSU5ERVhfQVRUUl9CSVRNQVBfRVhQUkVTU0lPTjoKKwkJCQly ZXR1cm4gYm1zX2NvcHkocmVsYXRpb24tPnJkX2V4cHJlc3Npb25hdHRyKTsKIAkJCWRlZmF1bHQ6 CiAJCQkJZWxvZyhFUlJPUiwgInVua25vd24gYXR0cktpbmQgJXUiLCBhdHRyS2luZCk7CiAJCX0K QEAgLTUyOTUsNyArNTQyNCw5IEBAIHJlc3RhcnQ6CiAJcGtpbmRleGF0dHJzID0gTlVMTDsKIAlp ZGluZGV4YXR0cnMgPSBOVUxMOwogCWhvdGJsb2NraW5nYXR0cnMgPSBOVUxMOworCWhvdGJsb2Nr aW5nZXhwcmF0dHJzID0gTlVMTDsKIAlzdW1tYXJpemVkYXR0cnMgPSBOVUxMOworCXN1bW1hcml6 ZWRleHByYXR0cnMgPSBOVUxMOwogCWZvcmVhY2gobCwgaW5kZXhvaWRsaXN0KQogCXsKIAkJT2lk CQkJaW5kZXhPaWQgPSBsZmlyc3Rfb2lkKGwpOwpAQCAtNTMwOSw2ICs1NDQwLDcgQEAgcmVzdGFy dDoKIAkJYm9vbAkJaXNQSzsJCS8qIHByaW1hcnkga2V5ICovCiAJCWJvb2wJCWlzSURLZXk7CS8q IHJlcGxpY2EgaWRlbnRpdHkgaW5kZXggKi8KIAkJQml0bWFwc2V0ICoqYXR0cnM7CisJCUJpdG1h cHNldCAqKmV4cHJhdHRyczsKIAogCQlpbmRleERlc2MgPSBpbmRleF9vcGVuKGluZGV4T2lkLCBB Y2Nlc3NTaGFyZUxvY2spOwogCkBAIC01MzUyLDE0ICs1NDg0LDIwIEBAIHJlc3RhcnQ6CiAJCSAq IGRlY2lkZSB3aGljaCBiaXRtYXAgd2UnbGwgdXBkYXRlIGluIHRoZSBmb2xsb3dpbmcgbG9vcC4K IAkJICovCiAJCWlmIChpbmRleERlc2MtPnJkX2luZGFtLT5hbXN1bW1hcml6aW5nKQorCQl7CiAJ CQlhdHRycyA9ICZzdW1tYXJpemVkYXR0cnM7CisJCQlleHByYXR0cnMgPSAmc3VtbWFyaXplZGV4 cHJhdHRyczsKKwkJfQogCQllbHNlCisJCXsKIAkJCWF0dHJzID0gJmhvdGJsb2NraW5nYXR0cnM7 CisJCQlleHByYXR0cnMgPSAmaG90YmxvY2tpbmdleHByYXR0cnM7CisJCX0KIAogCQkvKiBDb2xs ZWN0IHNpbXBsZSBhdHRyaWJ1dGUgcmVmZXJlbmNlcyAqLwogCQlmb3IgKGkgPSAwOyBpIDwgaW5k ZXhEZXNjLT5yZF9pbmRleC0+aW5kbmF0dHM7IGkrKykKIAkJewotCQkJaW50CQkJYXR0cm51bSA9 IGluZGV4RGVzYy0+cmRfaW5kZXgtPmluZGtleS52YWx1ZXNbaV07CisJCQlpbnQJCQlhdHRyaWR4 ID0gaW5kZXhEZXNjLT5yZF9pbmRleC0+aW5ka2V5LnZhbHVlc1tpXTsKIAogCQkJLyoKIAkJCSAq IFNpbmNlIHdlIGhhdmUgY292ZXJpbmcgaW5kZXhlcyB3aXRoIG5vbi1rZXkgY29sdW1ucywgd2Ug bXVzdApAQCAtNTM3NSwzMCArNTUxMywyOCBAQCByZXN0YXJ0OgogCQkJICoga2V5IG9yIGlkZW50 aXR5IGtleS4gSGVuY2Ugd2UgZG8gbm90IGluY2x1ZGUgdGhlbSBpbnRvCiAJCQkgKiB1aW5kZXhh dHRycywgcGtpbmRleGF0dHJzIGFuZCBpZGluZGV4YXR0cnMgYml0bWFwcy4KIAkJCSAqLwotCQkJ aWYgKGF0dHJudW0gIT0gMCkKKwkJCWlmIChhdHRyaWR4ICE9IDApCiAJCQl7Ci0JCQkJKmF0dHJz ID0gYm1zX2FkZF9tZW1iZXIoKmF0dHJzLAotCQkJCQkJCQkJCWF0dHJudW0gLSBGaXJzdExvd0lu dmFsaWRIZWFwQXR0cmlidXRlTnVtYmVyKTsKKwkJCQlBdHRyTnVtYmVyCWF0dHJudW0gPSBhdHRy aWR4IC0gRmlyc3RMb3dJbnZhbGlkSGVhcEF0dHJpYnV0ZU51bWJlcjsKKworCQkJCSphdHRycyA9 IGJtc19hZGRfbWVtYmVyKCphdHRycywgYXR0cm51bSk7CiAKIAkJCQlpZiAoaXNLZXkgJiYgaSA8 IGluZGV4RGVzYy0+cmRfaW5kZXgtPmluZG5rZXlhdHRzKQotCQkJCQl1aW5kZXhhdHRycyA9IGJt c19hZGRfbWVtYmVyKHVpbmRleGF0dHJzLAotCQkJCQkJCQkJCQkJIGF0dHJudW0gLSBGaXJzdExv d0ludmFsaWRIZWFwQXR0cmlidXRlTnVtYmVyKTsKKwkJCQkJdWluZGV4YXR0cnMgPSBibXNfYWRk X21lbWJlcih1aW5kZXhhdHRycywgYXR0cm51bSk7CiAKIAkJCQlpZiAoaXNQSyAmJiBpIDwgaW5k ZXhEZXNjLT5yZF9pbmRleC0+aW5kbmtleWF0dHMpCi0JCQkJCXBraW5kZXhhdHRycyA9IGJtc19h ZGRfbWVtYmVyKHBraW5kZXhhdHRycywKLQkJCQkJCQkJCQkJCSAgYXR0cm51bSAtIEZpcnN0TG93 SW52YWxpZEhlYXBBdHRyaWJ1dGVOdW1iZXIpOworCQkJCQlwa2luZGV4YXR0cnMgPSBibXNfYWRk X21lbWJlcihwa2luZGV4YXR0cnMsIGF0dHJudW0pOwogCiAJCQkJaWYgKGlzSURLZXkgJiYgaSA8 IGluZGV4RGVzYy0+cmRfaW5kZXgtPmluZG5rZXlhdHRzKQotCQkJCQlpZGluZGV4YXR0cnMgPSBi bXNfYWRkX21lbWJlcihpZGluZGV4YXR0cnMsCi0JCQkJCQkJCQkJCQkgIGF0dHJudW0gLSBGaXJz dExvd0ludmFsaWRIZWFwQXR0cmlidXRlTnVtYmVyKTsKKwkJCQkJaWRpbmRleGF0dHJzID0gYm1z X2FkZF9tZW1iZXIoaWRpbmRleGF0dHJzLCBhdHRybnVtKTsKIAkJCX0KIAkJfQogCiAJCS8qIENv bGxlY3QgYWxsIGF0dHJpYnV0ZXMgdXNlZCBpbiBleHByZXNzaW9ucywgdG9vICovCi0JCXB1bGxf dmFyYXR0bm9zKGluZGV4RXhwcmVzc2lvbnMsIDEsIGF0dHJzKTsKKwkJcHVsbF92YXJhdHRub3Mo aW5kZXhFeHByZXNzaW9ucywgMSwgZXhwcmF0dHJzKTsKIAogCQkvKiBDb2xsZWN0IGFsbCBhdHRy aWJ1dGVzIGluIHRoZSBpbmRleCBwcmVkaWNhdGUsIHRvbyAqLwotCQlwdWxsX3ZhcmF0dG5vcyhp bmRleFByZWRpY2F0ZSwgMSwgYXR0cnMpOworCQlwdWxsX3ZhcmF0dG5vcyhpbmRleFByZWRpY2F0 ZSwgMSwgZXhwcmF0dHJzKTsKIAogCQlpbmRleF9jbG9zZShpbmRleERlc2MsIEFjY2Vzc1NoYXJl TG9jayk7CiAJfQpAQCAtNTQyNywxMSArNTU2MywyNyBAQCByZXN0YXJ0OgogCQlibXNfZnJlZShw a2luZGV4YXR0cnMpOwogCQlibXNfZnJlZShpZGluZGV4YXR0cnMpOwogCQlibXNfZnJlZShob3Ri bG9ja2luZ2F0dHJzKTsKKwkJYm1zX2ZyZWUoaG90YmxvY2tpbmdleHByYXR0cnMpOwogCQlibXNf ZnJlZShzdW1tYXJpemVkYXR0cnMpOworCQlibXNfZnJlZShzdW1tYXJpemVkZXhwcmF0dHJzKTsK IAogCQlnb3RvIHJlc3RhcnQ7CiAJfQogCisJLyoge2V4cHJlc3Npb24tb25seSBjb2x1bW5zfSA9 IHtleHByZXNzaW9uIGNvbHVtbnN9IC0ge2RpcmVjdCBjb2x1bW5zfSAqLworCWhvdGJsb2NraW5n ZXhwcmF0dHJzID0gYm1zX2RlbF9tZW1iZXJzKGhvdGJsb2NraW5nZXhwcmF0dHJzLAorCQkJCQkJ CQkJCSAgIGhvdGJsb2NraW5nYXR0cnMpOworCS8qIHtob3QtYmxvY2tpbmcgY29sdW1uc30gPSB7 ZGlyZWN0IGNvbHVtbnN9ICsge2V4cHJlc3Npb24tb25seSBjb2x1bW5zfSAqLworCWhvdGJsb2Nr aW5nYXR0cnMgPSBibXNfYWRkX21lbWJlcnMoaG90YmxvY2tpbmdhdHRycywKKwkJCQkJCQkJCSAg IGhvdGJsb2NraW5nZXhwcmF0dHJzKTsKKworCS8qIHtzdW1tYXJpemVkLW9ubHkgY29sdW1uc30g PSB7c3VtbWFyaXplZCBjb2x1bW5zfSAtIHtkaXJlY3QgY29sdW1uc30gKi8KKwlzdW1tYXJpemVk ZXhwcmF0dHJzID0gYm1zX2RlbF9tZW1iZXJzKHN1bW1hcml6ZWRleHByYXR0cnMsCisJCQkJCQkJ CQkJICBzdW1tYXJpemVkYXR0cnMpOworCS8qIHtzdW1tYXJpemVkIGNvbHVtbnN9ID0ge2RpcmVj dCBjb2x1bW5zfSArIHtzdW1tYXJpemVkLW9ubHkgY29sdW1uc30gKi8KKwlzdW1tYXJpemVkYXR0 cnMgPSBibXNfYWRkX21lbWJlcnMoc3VtbWFyaXplZGF0dHJzLAorCQkJCQkJCQkJICBzdW1tYXJp emVkZXhwcmF0dHJzKTsKKwogCS8qIERvbid0IGxlYWsgdGhlIG9sZCB2YWx1ZXMgb2YgdGhlc2Ug Yml0bWFwcywgaWYgYW55ICovCiAJcmVsYXRpb24tPnJkX2F0dHJzdmFsaWQgPSBmYWxzZTsKIAli bXNfZnJlZShyZWxhdGlvbi0+cmRfa2V5YXR0cik7CkBAIC01NDQ0LDYgKzU1OTYsOCBAQCByZXN0 YXJ0OgogCXJlbGF0aW9uLT5yZF9ob3RibG9ja2luZ2F0dHIgPSBOVUxMOwogCWJtc19mcmVlKHJl bGF0aW9uLT5yZF9zdW1tYXJpemVkYXR0cik7CiAJcmVsYXRpb24tPnJkX3N1bW1hcml6ZWRhdHRy ID0gTlVMTDsKKwlibXNfZnJlZShyZWxhdGlvbi0+cmRfZXhwcmVzc2lvbmF0dHIpOworCXJlbGF0 aW9uLT5yZF9leHByZXNzaW9uYXR0ciA9IE5VTEw7CiAKIAkvKgogCSAqIE5vdyBzYXZlIGNvcGll cyBvZiB0aGUgYml0bWFwcyBpbiB0aGUgcmVsY2FjaGUgZW50cnkuICBXZSBpbnRlbnRpb25hbGx5 CkBAIC01NDU4LDYgKzU2MTIsNyBAQCByZXN0YXJ0OgogCXJlbGF0aW9uLT5yZF9pZGF0dHIgPSBi bXNfY29weShpZGluZGV4YXR0cnMpOwogCXJlbGF0aW9uLT5yZF9ob3RibG9ja2luZ2F0dHIgPSBi bXNfY29weShob3RibG9ja2luZ2F0dHJzKTsKIAlyZWxhdGlvbi0+cmRfc3VtbWFyaXplZGF0dHIg PSBibXNfY29weShzdW1tYXJpemVkYXR0cnMpOworCXJlbGF0aW9uLT5yZF9leHByZXNzaW9uYXR0 ciA9IGJtc19jb3B5KGhvdGJsb2NraW5nZXhwcmF0dHJzKTsKIAlyZWxhdGlvbi0+cmRfYXR0cnN2 YWxpZCA9IHRydWU7CiAJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGN4dCk7CiAKQEAgLTU0NzQs NiArNTYyOSw4IEBAIHJlc3RhcnQ6CiAJCQlyZXR1cm4gaG90YmxvY2tpbmdhdHRyczsKIAkJY2Fz ZSBJTkRFWF9BVFRSX0JJVE1BUF9TVU1NQVJJWkVEOgogCQkJcmV0dXJuIHN1bW1hcml6ZWRhdHRy czsKKwkJY2FzZSBJTkRFWF9BVFRSX0JJVE1BUF9FWFBSRVNTSU9OOgorCQkJcmV0dXJuIGhvdGJs b2NraW5nZXhwcmF0dHJzOwogCQlkZWZhdWx0OgogCQkJZWxvZyhFUlJPUiwgInVua25vd24gYXR0 cktpbmQgJXUiLCBhdHRyS2luZCk7CiAJCQlyZXR1cm4gTlVMTDsKZGlmZiAtLWdpdCBhL3NyYy9i aW4vcHNxbC90YWItY29tcGxldGUuaW4uYyBiL3NyYy9iaW4vcHNxbC90YWItY29tcGxldGUuaW4u YwppbmRleCBlYjhiYzEyODcyMC4uZjBhODI4NmEyNWIgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcHNx bC90YWItY29tcGxldGUuaW4uYworKysgYi9zcmMvYmluL3BzcWwvdGFiLWNvbXBsZXRlLmluLmMK QEAgLTI5OTIsNyArMjk5Miw3IEBAIG1hdGNoX3ByZXZpb3VzX3dvcmRzKGludCBwYXR0ZXJuX2lk LAogCQlDT01QTEVURV9XSVRIKCIoIik7CiAJLyogQUxURVIgVEFCTEVTUEFDRSA8Zm9vPiBTRVR8 UkVTRVQgKCAqLwogCWVsc2UgaWYgKE1hdGNoZXMoIkFMVEVSIiwgIlRBQkxFU1BBQ0UiLCBNYXRj aEFueSwgIlNFVHxSRVNFVCIsICIoIikpCi0JCUNPTVBMRVRFX1dJVEgoInNlcV9wYWdlX2Nvc3Qi LCAicmFuZG9tX3BhZ2VfY29zdCIsCisJCUNPTVBMRVRFX1dJVEgoInNlcV9wYWdlX2Nvc3QiLCAi cmFuZG9tX3BhZ2VfY29zdCIsICJleHByZXNzaW9uX2NoZWNrcyIsCiAJCQkJCSAgImVmZmVjdGl2 ZV9pb19jb25jdXJyZW5jeSIsICJtYWludGVuYW5jZV9pb19jb25jdXJyZW5jeSIpOwogCiAJLyog QUxURVIgVEVYVCBTRUFSQ0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9nZW5h bS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2dlbmFtLmgKaW5kZXggMWJlODczOTU3M2YuLjkxYWYx ZTgyMzhkIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvZ2VuYW0uaAorKysgYi9zcmMv aW5jbHVkZS9hY2Nlc3MvZ2VuYW0uaApAQCAtMTk0LDcgKzE5NCw3IEBAIGV4dGVybiBib29sIGlu ZGV4X2Nhbl9yZXR1cm4oUmVsYXRpb24gaW5kZXhSZWxhdGlvbiwgaW50IGF0dG5vKTsKIGV4dGVy biBSZWdQcm9jZWR1cmUgaW5kZXhfZ2V0cHJvY2lkKFJlbGF0aW9uIGlyZWwsIEF0dHJOdW1iZXIg YXR0bnVtLAogCQkJCQkJCQkJdWludDE2IHByb2NudW0pOwogZXh0ZXJuIEZtZ3JJbmZvICppbmRl eF9nZXRwcm9jaW5mbyhSZWxhdGlvbiBpcmVsLCBBdHRyTnVtYmVyIGF0dG51bSwKLQkJCQkJCQkJ ICAgdWludDE2IHByb2NudW0pOworCQkJCQkJCQkgICB1aW50MTYgcHJvY251bSk7CQkJCQkJCQkg ICAKIGV4dGVybiB2b2lkIGluZGV4X3N0b3JlX2Zsb2F0OF9vcmRlcmJ5X2Rpc3RhbmNlcyhJbmRl eFNjYW5EZXNjIHNjYW4sCiAJCQkJCQkJCQkJCQkgT2lkICpvcmRlckJ5VHlwZXMsCiAJCQkJCQkJ CQkJCQkgSW5kZXhPcmRlckJ5RGlzdGFuY2UgKmRpc3RhbmNlcywKZGlmZiAtLWdpdCBhL3NyYy9p bmNsdWRlL2FjY2Vzcy9oZWFwYW0uaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaAppbmRl eCAxNjQwZDljMzJmNy4uZTEyZGExOTM0ZTkgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vz cy9oZWFwYW0uaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmgKQEAgLTIxLDYgKzIx LDcgQEAKICNpbmNsdWRlICJhY2Nlc3Mvc2tleS5oIgogI2luY2x1ZGUgImFjY2Vzcy90YWJsZS5o IgkJLyogZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgKi8KICNpbmNsdWRlICJhY2Nlc3MvdGFi bGVhbS5oIgorI2luY2x1ZGUgImV4ZWN1dG9yL2V4ZWN1dG9yLmgiCiAjaW5jbHVkZSAibm9kZXMv bG9ja29wdGlvbnMuaCIKICNpbmNsdWRlICJub2Rlcy9wcmltbm9kZXMuaCIKICNpbmNsdWRlICJz dG9yYWdlL2J1ZnBhZ2UuaCIKQEAgLTMzOSw3ICszNDAsNyBAQCBleHRlcm4gVE1fUmVzdWx0IGhl YXBfdXBkYXRlKFJlbGF0aW9uIHJlbGF0aW9uLCBJdGVtUG9pbnRlciBvdGlkLAogCQkJCQkJCSBI ZWFwVHVwbGUgbmV3dHVwLAogCQkJCQkJCSBDb21tYW5kSWQgY2lkLCBTbmFwc2hvdCBjcm9zc2No ZWNrLCBib29sIHdhaXQsCiAJCQkJCQkJIHN0cnVjdCBUTV9GYWlsdXJlRGF0YSAqdG1mZCwgTG9j a1R1cGxlTW9kZSAqbG9ja21vZGUsCi0JCQkJCQkJIFRVX1VwZGF0ZUluZGV4ZXMgKnVwZGF0ZV9p bmRleGVzKTsKKwkJCQkJCQkgVFVfVXBkYXRlSW5kZXhlcyAqdXBkYXRlX2luZGV4ZXMsIHN0cnVj dCBFU3RhdGUgKmVzdGF0ZSk7CiBleHRlcm4gVE1fUmVzdWx0IGhlYXBfbG9ja190dXBsZShSZWxh dGlvbiByZWxhdGlvbiwgSGVhcFR1cGxlIHR1cGxlLAogCQkJCQkJCQkgQ29tbWFuZElkIGNpZCwg TG9ja1R1cGxlTW9kZSBtb2RlLCBMb2NrV2FpdFBvbGljeSB3YWl0X3BvbGljeSwKIAkJCQkJCQkJ IGJvb2wgZm9sbG93X3VwZGF0ZXMsCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvdGFi bGVhbS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3RhYmxlYW0uaAppbmRleCAxMzFjMDUwYzE1Zi4u NjJlZDY1OTJiODUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFtLmgKKysr IGIvc3JjL2luY2x1ZGUvYWNjZXNzL3RhYmxlYW0uaApAQCAtMzgsNiArMzgsNyBAQCBzdHJ1Y3Qg SW5kZXhJbmZvOwogc3RydWN0IFNhbXBsZVNjYW5TdGF0ZTsKIHN0cnVjdCBWYWN1dW1QYXJhbXM7 CiBzdHJ1Y3QgVmFsaWRhdGVJbmRleFN0YXRlOworc3RydWN0IEVTdGF0ZTsKIAogLyoKICAqIEJp dG1hc2sgdmFsdWVzIGZvciB0aGUgZmxhZ3MgYXJndW1lbnQgdG8gdGhlIHNjYW5fYmVnaW4gY2Fs bGJhY2suCkBAIC01NTAsNyArNTUxLDggQEAgdHlwZWRlZiBzdHJ1Y3QgVGFibGVBbVJvdXRpbmUK IAkJCQkJCQkJIGJvb2wgd2FpdCwKIAkJCQkJCQkJIFRNX0ZhaWx1cmVEYXRhICp0bWZkLAogCQkJ CQkJCQkgTG9ja1R1cGxlTW9kZSAqbG9ja21vZGUsCi0JCQkJCQkJCSBUVV9VcGRhdGVJbmRleGVz ICp1cGRhdGVfaW5kZXhlcyk7CisJCQkJCQkJCSBUVV9VcGRhdGVJbmRleGVzICp1cGRhdGVfaW5k ZXhlcywKKwkJCQkJCQkJIHN0cnVjdCBFU3RhdGUgKmVzdGF0ZSk7CiAKIAkvKiBzZWUgdGFibGVf dHVwbGVfbG9jaygpIGZvciByZWZlcmVuY2UgYWJvdXQgcGFyYW1ldGVycyAqLwogCVRNX1Jlc3Vs dAkoKnR1cGxlX2xvY2spIChSZWxhdGlvbiByZWwsCkBAIC0xNTQxLDEyICsxNTQzLDEyIEBAIHN0 YXRpYyBpbmxpbmUgVE1fUmVzdWx0CiB0YWJsZV90dXBsZV91cGRhdGUoUmVsYXRpb24gcmVsLCBJ dGVtUG9pbnRlciBvdGlkLCBUdXBsZVRhYmxlU2xvdCAqc2xvdCwKIAkJCQkgICBDb21tYW5kSWQg Y2lkLCBTbmFwc2hvdCBzbmFwc2hvdCwgU25hcHNob3QgY3Jvc3NjaGVjaywKIAkJCQkgICBib29s IHdhaXQsIFRNX0ZhaWx1cmVEYXRhICp0bWZkLCBMb2NrVHVwbGVNb2RlICpsb2NrbW9kZSwKLQkJ CQkgICBUVV9VcGRhdGVJbmRleGVzICp1cGRhdGVfaW5kZXhlcykKKwkJCQkgICBUVV9VcGRhdGVJ bmRleGVzICp1cGRhdGVfaW5kZXhlcywgc3RydWN0IEVTdGF0ZSAqZXN0YXRlKQogewogCXJldHVy biByZWwtPnJkX3RhYmxlYW0tPnR1cGxlX3VwZGF0ZShyZWwsIG90aWQsIHNsb3QsCiAJCQkJCQkJ CQkJIGNpZCwgc25hcHNob3QsIGNyb3NzY2hlY2ssCi0JCQkJCQkJCQkJIHdhaXQsIHRtZmQsCi0J CQkJCQkJCQkJIGxvY2ttb2RlLCB1cGRhdGVfaW5kZXhlcyk7CisJCQkJCQkJCQkJIHdhaXQsIHRt ZmQsIGxvY2ttb2RlLAorCQkJCQkJCQkJCSB1cGRhdGVfaW5kZXhlcywgZXN0YXRlKTsKIH0KIAog LyoKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWN1dG9yLmggYi9zcmMvaW5j bHVkZS9leGVjdXRvci9leGVjdXRvci5oCmluZGV4IDMwZTJhODIzNDZmLi4zNDNkMDRmZmY1NyAx MDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY3V0b3IuaAorKysgYi9zcmMvaW5j bHVkZS9leGVjdXRvci9leGVjdXRvci5oCkBAIC02NjEsNiArNjYxLDExIEBAIGV4dGVybiB2b2lk IGNoZWNrX2V4Y2x1c2lvbl9jb25zdHJhaW50KFJlbGF0aW9uIGhlYXAsIFJlbGF0aW9uIGluZGV4 LAogCQkJCQkJCQkJICAgSXRlbVBvaW50ZXIgdHVwbGVpZCwKIAkJCQkJCQkJCSAgIGNvbnN0IERh dHVtICp2YWx1ZXMsIGNvbnN0IGJvb2wgKmlzbnVsbCwKIAkJCQkJCQkJCSAgIEVTdGF0ZSAqZXN0 YXRlLCBib29sIG5ld0luZGV4KTsKK2V4dGVybiBib29sIEV4ZWNJbmRleGVzRXhwcmVzc2lvbnNX ZXJlTm90VXBkYXRlZChSZWxhdGlvbiByZWxhdGlvbiwKKwkJCQkJCQkJCQkJCSBCaXRtYXBzZXQg Km1vZGlmaWVkX2F0dHJzLAorCQkJCQkJCQkJCQkJIEVTdGF0ZSAqZXN0YXRlLAorCQkJCQkJCQkJ CQkJIEhlYXBUdXBsZSBvbGRfdHVwbGUsCisJCQkJCQkJCQkJCQkgSGVhcFR1cGxlIG5ld190dXBs ZSk7CiAKIC8qCiAgKiBwcm90b3R5cGVzIGZyb20gZnVuY3Rpb25zIGluIGV4ZWNSZXBsaWNhdGlv bi5jCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaCBiL3NyYy9pbmNs dWRlL25vZGVzL2V4ZWNub2Rlcy5oCmluZGV4IDI2MjVkN2U4MjIyLi5hY2E5MzcxZGNjZCAxMDA2 NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUv bm9kZXMvZXhlY25vZGVzLmgKQEAgLTE1OSwxMiArMTU5LDE1IEBAIHR5cGVkZWYgc3RydWN0IEV4 cHJTdGF0ZQogICoKICAqCQlOdW1JbmRleEF0dHJzCQl0b3RhbCBudW1iZXIgb2YgY29sdW1ucyBp biB0aGlzIGluZGV4CiAgKgkJTnVtSW5kZXhLZXlBdHRycwludW1iZXIgb2Yga2V5IGNvbHVtbnMg aW4gaW5kZXgKKyAqCQlJbmRleEF0dHJzCQkJYml0bWFwIG9mIGluZGV4IGF0dHJpYnV0ZXMKICAq CQlJbmRleEF0dHJOdW1iZXJzCXVuZGVybHlpbmctcmVsIGF0dHJpYnV0ZSBudW1iZXJzIHVzZWQg YXMga2V5cwogICoJCQkJCQkJKHplcm9lcyBpbmRpY2F0ZSBleHByZXNzaW9ucykuIEl0IGFsc28g Y29udGFpbnMKICAqIAkJCQkJCQlpbmZvIGFib3V0IGluY2x1ZGVkIGNvbHVtbnMuCiAgKgkJRXhw cmVzc2lvbnMJCQlleHByIHRyZWVzIGZvciBleHByZXNzaW9uIGVudHJpZXMsIG9yIE5JTCBpZiBu b25lCisgKgkJRXhwcmVzc2lvbkF0dHJzCQliaXRtYXAgb2YgYXR0cmlidXRlcyB1c2VkIHdpdGhp biB0aGUgZXhwcmVzc2lvbgogICoJCUV4cHJlc3Npb25zU3RhdGUJZXhlYyBzdGF0ZSBmb3IgZXhw cmVzc2lvbnMsIG9yIE5JTCBpZiBub25lCiAgKgkJUHJlZGljYXRlCQkJcGFydGlhbC1pbmRleCBw cmVkaWNhdGUsIG9yIE5JTCBpZiBub25lCisgKgkJUHJlZGljYXRlQXR0cnMJCWJpdG1hcCBvZiBh dHRyaWJ1dGVzIHVzZWQgd2l0aGluIHRoZSBwcmVkaWNhdGUKICAqCQlQcmVkaWNhdGVTdGF0ZQkJ ZXhlYyBzdGF0ZSBmb3IgcHJlZGljYXRlLCBvciBOSUwgaWYgbm9uZQogICoJCUV4Y2x1c2lvbk9w cwkJUGVyLWNvbHVtbiBleGNsdXNpb24gb3BlcmF0b3JzLCBvciBOVUxMIGlmIG5vbmUKICAqCQlF eGNsdXNpb25Qcm9jcwkJVW5kZXJseWluZyBmdW5jdGlvbiBPSURzIGZvciBFeGNsdXNpb25PcHMK QEAgLTE4Myw2ICsxODYsNyBAQCB0eXBlZGVmIHN0cnVjdCBFeHByU3RhdGUKICAqCQlQYXJhbGxl bFdvcmtlcnMJCSMgb2Ygd29ya2VycyByZXF1ZXN0ZWQgKGV4Y2x1ZGVzIGxlYWRlcikKICAqCQlB bQkJCQkJT2lkIG9mIGluZGV4IEFNCiAgKgkJQW1DYWNoZQkJCQlwcml2YXRlIGNhY2hlIGFyZWEg Zm9yIGluZGV4IEFNCisgKgkJT3BDbGFzc0RhdGFUeXBlcwlvcGVyYXRvciBjbGFzcyBkYXRhIHR5 cGVzCiAgKgkJQ29udGV4dAkJCQltZW1vcnkgY29udGV4dCBob2xkaW5nIHRoaXMgSW5kZXhJbmZv CiAgKgogICogaWlfQ29uY3VycmVudCwgaWlfQnJva2VuSG90Q2hhaW4sIGFuZCBpaV9QYXJhbGxl bFdvcmtlcnMgYXJlIHVzZWQgb25seQpAQCAtMTk0LDEwICsxOTgsMTUgQEAgdHlwZWRlZiBzdHJ1 Y3QgSW5kZXhJbmZvCiAJTm9kZVRhZwkJdHlwZTsKIAlpbnQJCQlpaV9OdW1JbmRleEF0dHJzOwkv KiB0b3RhbCBudW1iZXIgb2YgY29sdW1ucyBpbiBpbmRleCAqLwogCWludAkJCWlpX051bUluZGV4 S2V5QXR0cnM7CS8qIG51bWJlciBvZiBrZXkgY29sdW1ucyBpbiBpbmRleCAqLworCUJpdG1hcHNl dCAgKmlpX0luZGV4QXR0cnM7CiAJQXR0ck51bWJlcglpaV9JbmRleEF0dHJOdW1iZXJzW0lOREVY X01BWF9LRVlTXTsKKwl1aW50MTYJCWlpX0luZGV4QXR0ckxlbltJTkRFWF9NQVhfS0VZU107CisJ Qml0bWFwc2V0ICAqaWlfSW5kZXhBdHRyQnlWYWw7CiAJTGlzdAkgICAqaWlfRXhwcmVzc2lvbnM7 IC8qIGxpc3Qgb2YgRXhwciAqLworCUJpdG1hcHNldCAgKmlpX0V4cHJlc3Npb25BdHRyczsKIAlM aXN0CSAgICppaV9FeHByZXNzaW9uc1N0YXRlOwkvKiBsaXN0IG9mIEV4cHJTdGF0ZSAqLwogCUxp c3QJICAgKmlpX1ByZWRpY2F0ZTsJLyogbGlzdCBvZiBFeHByICovCisJQml0bWFwc2V0ICAqaWlf UHJlZGljYXRlQXR0cnM7CiAJRXhwclN0YXRlICAqaWlfUHJlZGljYXRlU3RhdGU7CiAJT2lkCQkg ICAqaWlfRXhjbHVzaW9uT3BzOwkvKiBhcnJheSB3aXRoIG9uZSBlbnRyeSBwZXIgY29sdW1uICov CiAJT2lkCQkgICAqaWlfRXhjbHVzaW9uUHJvY3M7CS8qIGFycmF5IHdpdGggb25lIGVudHJ5IHBl ciBjb2x1bW4gKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3V0aWxzL3JlbC5oIGIvc3JjL2lu Y2x1ZGUvdXRpbHMvcmVsLmgKaW5kZXggZGIzZTUwNGMzZDIuLjNlYmEyNTRhMzY2IDEwMDY0NAot LS0gYS9zcmMvaW5jbHVkZS91dGlscy9yZWwuaAorKysgYi9zcmMvaW5jbHVkZS91dGlscy9yZWwu aApAQCAtMTY0LDYgKzE2NCwxMSBAQCB0eXBlZGVmIHN0cnVjdCBSZWxhdGlvbkRhdGEKIAlCaXRt YXBzZXQgICpyZF9pZGF0dHI7CQkvKiBpbmNsdWRlZCBpbiByZXBsaWNhIGlkZW50aXR5IGluZGV4 ICovCiAJQml0bWFwc2V0ICAqcmRfaG90YmxvY2tpbmdhdHRyOyAvKiBjb2xzIGJsb2NraW5nIEhP VCB1cGRhdGUgKi8KIAlCaXRtYXBzZXQgICpyZF9zdW1tYXJpemVkYXR0cjsJLyogY29scyBpbmRl eGVkIGJ5IHN1bW1hcml6aW5nIGluZGV4ZXMgKi8KKwlCaXRtYXBzZXQgICpyZF9leHByZXNzaW9u YXR0cjsJLyogaW5kZXhlZCBjb2xzIHJlZmVyZW5jZWQgYnkgZXhwcmVzc2lvbnMgKi8KKworCS8q IGRhdGEgbWFuYWdlZCBieSBSZWxhdGlvbkdldEV4cHJJbmRleEluZm9MaXN0OiAqLworCUxpc3QJ ICAgKnJkX2lpZXhwcmxpc3Q7CS8qIGxpc3Qgb2YgSW5kZXhJbmZvIGZvciBpbmRleGVzIHdpdGgK KwkJCQkJCQkJICogZXhwcmVzc2lvbnMgKi8KIAogCVB1YmxpY2F0aW9uRGVzYyAqcmRfcHViZGVz YzsJLyogcHVibGljYXRpb24gZGVzY3JpcHRvciwgb3IgTlVMTCAqLwogCkBAIC0zNDQsNiArMzQ5 LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgU3RkUmRPcHRpb25zCiAJaW50CQkJcGFyYWxsZWxfd29ya2Vy czsJLyogbWF4IG51bWJlciBvZiBwYXJhbGxlbCB3b3JrZXJzICovCiAJU3RkUmRPcHRJbmRleENs ZWFudXAgdmFjdXVtX2luZGV4X2NsZWFudXA7CS8qIGNvbnRyb2xzIGluZGV4IHZhY3V1bWluZyAq LwogCWJvb2wJCXZhY3V1bV90cnVuY2F0ZTsJLyogZW5hYmxlcyB2YWN1dW0gdG8gdHJ1bmNhdGUg YSByZWxhdGlvbiAqLworCWJvb2wJCWV4cHJlc3Npb25fY2hlY2tzOwkvKiB1c2UgZXhwcmVzc2lv biB0byBjaGVja3MgZm9yIGNoYW5nZXMgKi8KIAogCS8qCiAJICogRnJhY3Rpb24gb2YgcGFnZXMg aW4gYSByZWxhdGlvbiB0aGF0IHZhY3V1bSBjYW4gZWFnZXJseSBzY2FuIGFuZCBmYWlsCkBAIC00 MDUsNiArNDExLDE0IEBAIHR5cGVkZWYgc3RydWN0IFN0ZFJkT3B0aW9ucwogCSgocmVsYXRpb24p LT5yZF9vcHRpb25zID8gXAogCSAoKFN0ZFJkT3B0aW9ucyAqKSAocmVsYXRpb24pLT5yZF9vcHRp b25zKS0+cGFyYWxsZWxfd29ya2VycyA6IChkZWZhdWx0cHcpKQogCisvKgorICogUmVsYXRpb25H ZXRFeHByZXNzaW9uQ2hlY2tzCisgKgkJUmV0dXJucyB0aGUgcmVsYXRpb24ncyBleHByZXNzaW9u X2NoZWNrcyByZWxvcHRpb24gc2V0dGluZy4KKyAqLworI2RlZmluZSBSZWxhdGlvbkdldEV4cHJl c3Npb25DaGVja3MocmVsYXRpb24pIFwKKwkoKHJlbGF0aW9uKS0+cmRfb3B0aW9ucyA/IFwKKwkg KChTdGRSZE9wdGlvbnMgKikgKHJlbGF0aW9uKS0+cmRfb3B0aW9ucyktPmV4cHJlc3Npb25fY2hl Y2tzIDogdHJ1ZSkKKwogLyogVmlld09wdGlvbnMtPmNoZWNrX29wdGlvbiB2YWx1ZXMgKi8KIHR5 cGVkZWYgZW51bSBWaWV3T3B0Q2hlY2tPcHRpb24KIHsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRl L3V0aWxzL3JlbGNhY2hlLmggYi9zcmMvaW5jbHVkZS91dGlscy9yZWxjYWNoZS5oCmluZGV4IGE3 YzU1ZGIzMzllLi41NjUyNGE3MzM5OSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdXRpbHMvcmVs Y2FjaGUuaAorKysgYi9zcmMvaW5jbHVkZS91dGlscy9yZWxjYWNoZS5oCkBAIC01Miw2ICs1Miw3 IEBAIGV4dGVybiBMaXN0ICpSZWxhdGlvbkdldEluZGV4RXhwcmVzc2lvbnMoUmVsYXRpb24gcmVs YXRpb24pOwogZXh0ZXJuIExpc3QgKlJlbGF0aW9uR2V0RHVtbXlJbmRleEV4cHJlc3Npb25zKFJl bGF0aW9uIHJlbGF0aW9uKTsKIGV4dGVybiBMaXN0ICpSZWxhdGlvbkdldEluZGV4UHJlZGljYXRl KFJlbGF0aW9uIHJlbGF0aW9uKTsKIGV4dGVybiBieXRlYSAqKlJlbGF0aW9uR2V0SW5kZXhBdHRP cHRpb25zKFJlbGF0aW9uIHJlbGF0aW9uLCBib29sIGNvcHkpOworZXh0ZXJuIExpc3QgKlJlbGF0 aW9uR2V0RXhwckluZGV4SW5mb0xpc3QoUmVsYXRpb24gcmVsYXRpb24pOwogCiAvKgogICogV2hp Y2ggc2V0IG9mIGNvbHVtbnMgdG8gcmV0dXJuIGJ5IFJlbGF0aW9uR2V0SW5kZXhBdHRyQml0bWFw LgpAQCAtNjMsNiArNjQsNyBAQCB0eXBlZGVmIGVudW0gSW5kZXhBdHRyQml0bWFwS2luZAogCUlO REVYX0FUVFJfQklUTUFQX0lERU5USVRZX0tFWSwKIAlJTkRFWF9BVFRSX0JJVE1BUF9IT1RfQkxP Q0tJTkcsCiAJSU5ERVhfQVRUUl9CSVRNQVBfU1VNTUFSSVpFRCwKKwlJTkRFWF9BVFRSX0JJVE1B UF9FWFBSRVNTSU9OLAogfSBJbmRleEF0dHJCaXRtYXBLaW5kOwogCiBleHRlcm4gQml0bWFwc2V0 ICpSZWxhdGlvbkdldEluZGV4QXR0ckJpdG1hcChSZWxhdGlvbiByZWxhdGlvbiwKZGlmZiAtLWdp dCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvaGVhcF9ob3RfdXBkYXRlcy5vdXQgYi9zcmMv dGVzdC9yZWdyZXNzL2V4cGVjdGVkL2hlYXBfaG90X3VwZGF0ZXMub3V0Cm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4yYWQ2ZTU0MThlOQotLS0gL2Rldi9udWxsCisrKyBi L3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvaGVhcF9ob3RfdXBkYXRlcy5vdXQKQEAgLTAsMCAr MSw1ODYgQEAKKy0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0t IC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tCistLSBUaGlzIHRhYmxlIHdpbGwgaGF2ZSB0 d28gY29sdW1ucyBhbmQgdHdvIGluZGV4ZXMsIG9uZSBvbiB0aGUgcHJpbWFyeSBrZXkKKy0tIGlk IGFuZCBvbmUgb24gdGhlIGV4cHJlc3Npb24gKGluZm8tPj4nbmFtZScpLiAgVGhhdCBtZWFucyB0 aGF0IHRoZSBpbmRleGVkCistLSBhdHRyaWJ1dGVzIGFyZSAnaWQnIGFuZCAnaW5mbycuCitjcmVh dGUgdGFibGUga2V5dmFsdWUoaWQgaW50ZWdlciBwcmltYXJ5IGtleSwgaW5mbyBqc29uYik7Citj cmVhdGUgaW5kZXggbmFtZWluZGV4IG9uIGtleXZhbHVlKChpbmZvLT4+J25hbWUnKSk7CitpbnNl cnQgaW50byBrZXl2YWx1ZSB2YWx1ZXMgKDEsICd7Im5hbWUiOiAiam9obiIsICJkYXRhIjogInNv bWUgZGF0YSJ9Jyk7CistLSBEaXNhYmxlIGV4cHJlc3Npb24gY2hlY2tzLgorQUxURVIgVEFCTEUg a2V5dmFsdWUgU0VUIChleHByZXNzaW9uX2NoZWNrcyA9IGZhbHNlKTsKK1NFTEVDVCByZWxvcHRp b25zIEZST00gcGdfY2xhc3MgV0hFUkUgcmVsbmFtZSA9ICdrZXl2YWx1ZSc7CisgICAgICAgIHJl bG9wdGlvbnMgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIHtleHByZXNz aW9uX2NoZWNrcz1mYWxzZX0KKygxIHJvdykKKworLS0gV2hpbGUgdGhlIGluZGV4ZWQgYXR0cmli dXRlICJuYW1lIiBpcyB1bmNoYW5nZWQgd2UndmUgZGlzYWJsZWQgZXhwcmVzc2lvbgorLS0gY2hl Y2tzIHNvIHRoaXMgdXBkYXRlIHNob3VsZCBub3QgZ28gSE9UIGFzIHRoZSBzeXN0ZW0gY2FuJ3Qg ZGV0ZXJtaW5lIGlmCistLSB0aGUgaW5kZXhlZCBhdHRyaWJ1dGUgaGFzIGNoYW5nZWQgd2l0aG91 dCBldmFsdWF0aW5nIHRoZSBleHByZXNzaW9uLgordXBkYXRlIGtleXZhbHVlIHNldCBpbmZvPSd7 Im5hbWUiOiAiam9obiIsICJkYXRhIjogInNvbWV0aGluZyBlbHNlIn0nIHdoZXJlIGlkPTE7Citz ZWxlY3QgcGdfc3RhdF9nZXRfeGFjdF90dXBsZXNfaG90X3VwZGF0ZWQoJ2tleXZhbHVlJzo6cmVn Y2xhc3MpOyAtLSBleHBlY3Q6IDAgcm93CisgcGdfc3RhdF9nZXRfeGFjdF90dXBsZXNfaG90X3Vw ZGF0ZWQgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDAKKygxIHJvdykKKworLS0gUmUtZW5hYmxlIGV4cHJl c3Npb24gY2hlY2tzLgorQUxURVIgVEFCTEUga2V5dmFsdWUgU0VUIChleHByZXNzaW9uX2NoZWNr cyA9IHRydWUpOworU0VMRUNUIHJlbG9wdGlvbnMgRlJPTSBwZ19jbGFzcyBXSEVSRSByZWxuYW1l ID0gJ2tleXZhbHVlJzsKKyAgICAgICAgcmVsb3B0aW9ucyAgICAgICAgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorIHtleHByZXNzaW9uX2NoZWNrcz10cnVlfQorKDEgcm93KQorCistLSBU aGUgaW5kZXhlZCBhdHRyaWJ1dGUgIm5hbWUiIHdpdGggdmFsdWUgImpvaG4iIGlzIHVuY2hhbmdl ZCwgZXhwZWN0IGEgSE9UIHVwZGF0ZS4KK3VwZGF0ZSBrZXl2YWx1ZSBzZXQgaW5mbz0neyJuYW1l IjogImpvaG4iLCAiZGF0YSI6ICJzb21lIG90aGVyIGRhdGEifScgd2hlcmUgaWQ9MTsKK3NlbGVj dCBwZ19zdGF0X2dldF94YWN0X3R1cGxlc19ob3RfdXBkYXRlZCgna2V5dmFsdWUnOjpyZWdjbGFz cyk7IC0tIGV4cGVjdDogMSByb3cKKyBwZ19zdGF0X2dldF94YWN0X3R1cGxlc19ob3RfdXBkYXRl ZCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgMQorKDEgcm93KQorCistLSBUaGUgZm9sbG93aW5nIHVwZGF0 ZSBjaGFuZ2VzIHRoZSBpbmRleGVkIGF0dHJpYnV0ZSAibmFtZSIsIHRoaXMgc2hvdWxkIG5vdCBi ZSBhIEhPVCB1cGRhdGUuCit1cGRhdGUga2V5dmFsdWUgc2V0IGluZm89J3sibmFtZSI6ICJzbWl0 aCIsICJkYXRhIjogInNvbWUgb3RoZXIgZGF0YSJ9JyB3aGVyZSBpZD0xOworc2VsZWN0IHBnX3N0 YXRfZ2V0X3hhY3RfdHVwbGVzX2hvdF91cGRhdGVkKCdrZXl2YWx1ZSc6OnJlZ2NsYXNzKTsgLS0g ZXhwZWN0OiAxIG5vIG5ldyBIT1QgdXBkYXRlcworIHBnX3N0YXRfZ2V0X3hhY3RfdHVwbGVzX2hv dF91cGRhdGVkIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisoMSByb3cpCisKKy0tIE5vdywgdGhpcyB1 cGRhdGUgZG9lcyBub3QgY2hhbmdlIHRoZSBpbmRleGVkIGF0dHJpYnV0ZSAibmFtZSIgZnJvbSAi c21pdGgiLCB0aGlzIHNob3VsZCBiZSBIT1QuCit1cGRhdGUga2V5dmFsdWUgc2V0IGluZm89J3si bmFtZSI6ICJzbWl0aCIsICJkYXRhIjogInNvbWUgbW9yZSBkYXRhIn0nIHdoZXJlIGlkPTE7Citz ZWxlY3QgcGdfc3RhdF9nZXRfeGFjdF90dXBsZXNfaG90X3VwZGF0ZWQoJ2tleXZhbHVlJzo6cmVn Y2xhc3MpOyAtLSBleHBlY3Q6IDIgcm93cyBub3cKKyBwZ19zdGF0X2dldF94YWN0X3R1cGxlc19o b3RfdXBkYXRlZCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorKDEgcm93KQorCitkcm9wIHRhYmxlIGtl eXZhbHVlOworLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0g LS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0KKy0tIFRoaXMgdGFibGUgaXMgdGhlIHNhbWUg YXMgdGhlIHByZXZpb3VzIG9uZSBidXQgaXQgaGFzIGEgdGhpcmQgaW5kZXguICBUaGUKKy0tIGlu ZGV4ICdjb2xpbmRleCcgaXNuJ3QgYW4gZXhwcmVzc2lvbiBpbmRleCwgaXQgaW5kZXhlcyB0aGUg ZW50aXJlIHZhbHVlCistLSBpbiB0aGUgaW5mbyBjb2x1bW4uICBUaGVyZSBhcmUgc3RpbGwgb25s eSB0d28gaW5kZXhlZCBhdHRyaWJ1dGVzIGZvciB0aGlzCistLSByZWxhdGlvbiwgdGhlIHNhbWUg dHdvIGFzIGJlZm9yZS4gIFRoZSBwcmVzZW5jZSBvZiBhbiBpbmRleCBvbiB0aGUgZW50aXJlCist LSB2YWx1ZSBvZiB0aGUgaW5mbyBjb2x1bW4gc2hvdWxkIHByZXZlbnQgSE9UIHVwZGF0ZXMgZm9y IGFueSB1cGRhdGVzIHRvIGFueQorLS0gcG9ydGlvbiBvZiBKU09OQiBjb250ZW50IGluIHRoYXQg Y29sdW1uLgorY3JlYXRlIHRhYmxlIGtleXZhbHVlKGlkIGludGVnZXIgcHJpbWFyeSBrZXksIGlu Zm8ganNvbmIpOworY3JlYXRlIGluZGV4IG5hbWVpbmRleCBvbiBrZXl2YWx1ZSgoaW5mby0+Pidu YW1lJykpOworY3JlYXRlIGluZGV4IGNvbGluZGV4IG9uIGtleXZhbHVlKGluZm8pOworaW5zZXJ0 IGludG8ga2V5dmFsdWUgdmFsdWVzICgxLCAneyJuYW1lIjogImpvaG4iLCAiZGF0YSI6ICJzb21l IGRhdGEifScpOworLS0gVGhpcyB1cGRhdGUgZG9lc24ndCBjaGFuZ2UgdGhlIHZhbHVlIG9mIHRo ZSBleHByZXNzaW9uIGluZGV4LCBidXQgaXQgZG9lcworLS0gY2hhbmdlIHRoZSBjb250ZW50IG9m IHRoZSBpbmZvIGNvbHVtbiBhbmQgc28gc2hvdWxkIG5vdCBiZSBIT1QgYmVjYXVzZSB0aGUKKy0t IGluZGV4ZWQgdmFsdWUgY2hhbmdlZCBhcyBhIHJlc3VsdCBvZiB0aGUgdXBkYXRlLgordXBkYXRl IGtleXZhbHVlIHNldCBpbmZvPSd7Im5hbWUiOiAiam9obiIsICJkYXRhIjogInNvbWUgb3RoZXIg ZGF0YSJ9JyB3aGVyZSBpZD0xOworc2VsZWN0IHBnX3N0YXRfZ2V0X3hhY3RfdHVwbGVzX2hvdF91 cGRhdGVkKCdrZXl2YWx1ZSc6OnJlZ2NsYXNzKTsgLS0gZXhwZWN0OiAwIHJvd3MKKyBwZ19zdGF0 X2dldF94YWN0X3R1cGxlc19ob3RfdXBkYXRlZCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorKDEgcm93 KQorCitkcm9wIHRhYmxlIGtleXZhbHVlOworLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0g LS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0KKy0tIFRoZSB0 YWJsZSBoYXMgb25lIGNvbHVtbiBkb2NzIGFuZCB0d28gaW5kZXhlcy4gIFRoZXkgYXJlIGJvdGgg ZXhwcmVzc2lvbgorLS0gaW5kZXhlcyByZWZlcmVuY2luZyB0aGUgc2FtZSBjb2x1bW4gYXR0cmli dXRlIChkb2NzKSBidXQgb25lIGlzIGEgcGFydGlhbAorLS0gaW5kZXguCitDUkVBVEUgVEFCTEUg ZXggKGRvY3MgSlNPTkIpIFdJVEggKGZpbGxmYWN0b3IgPSA2MCk7CitJTlNFUlQgSU5UTyBleCAo ZG9jcykgVkFMVUVTICgneyJhIjogMCwgImIiOiAwfScpOworSU5TRVJUIElOVE8gZXggKGRvY3Mp IFNFTEVDVCBqc29uYl9idWlsZF9vYmplY3QoJ2InLCBuKSBGUk9NIGdlbmVyYXRlX3Nlcmllcygx MDAsIDEwMDAwKSBhcyBuOworQ1JFQVRFIElOREVYIGlkeF9leF9hIE9OIGV4ICgoZG9jcy0+Pidh JykpOworQ1JFQVRFIElOREVYIGlkeF9leF9iIE9OIGV4ICgoZG9jcy0+PidiJykpIFdIRVJFIChk b2NzLT4+J2InKTo6bnVtZXJpYyA+IDk7CistLSBXZSdyZSB1c2luZyBCVFJFRSBpbmRleGVzIGFu ZCBmb3IgdGhpcyB0ZXN0IHdlIHdhbnQgdG8gbWFrZSBzdXJlIHRoYXQgdGhleSByZW1haW4KKy0t IGluIHN5bmMgd2l0aCBjaGFuZ2VzIHRvIG91ciByZWxhdGlvbi4gIEZvcmNlIHRoZSBjaG9pY2Ug b2YgaW5kZXggc2NhbnMgYmVsb3cgc28KKy0tIHRoYXQgd2Uga25vdyB3ZSdyZSBjaGVja2luZyB0 aGUgaW5kZXgncyB1bmRlcnN0YW5kaW5nIG9mIHdoYXQgdmFsdWVzIHNob3VsZCBiZQorLS0gaW4g dGhlIGluZGV4IG9yIG5vdC4KK1NFVCBTRVNTSU9OIGVuYWJsZV9zZXFzY2FuID0gT0ZGOworU0VU IFNFU1NJT04gZW5hYmxlX2JpdG1hcHNjYW4gPSBPRkY7CistLSBMZWF2ZSAnYScgdW5jaGFuZ2Vk IGJ1dCBtb2RpZnkgJ2InIHRvIGEgdmFsdWUgb3V0c2lkZSBvZiB0aGUgaW5kZXggcHJlZGljYXRl LgorLS0gVGhpcyBzaG91bGQgYmUgYSBIT1QgdXBkYXRlIGJlY2F1c2UgbmVpdGhlciBpbmRleCBp cyBjaGFuZ2VkLgorVVBEQVRFIGV4IFNFVCBkb2NzID0ganNvbmJfYnVpbGRfb2JqZWN0KCdhJywg MCwgJ2InLCAxKSBXSEVSRSAoZG9jcy0+PidhJyk6Om51bWVyaWMgPSAwOworU0VMRUNUIHBnX3N0 YXRfZ2V0X3hhY3RfdHVwbGVzX2hvdF91cGRhdGVkKCdleCc6OnJlZ2NsYXNzKTsgLS0gZXhwZWN0 OiAxIHJvdworIHBnX3N0YXRfZ2V0X3hhY3RfdHVwbGVzX2hvdF91cGRhdGVkIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAxCisoMSByb3cpCisKKy0tIExldCdzIGNoZWNrIHRvIG1ha2Ugc3VyZSB0aGF0IHRo ZSBpbmRleCBkb2VzIG5vdCBjb250YWluIGEgdmFsdWUgZm9yICdiJworRVhQTEFJTiAoQ09TVFMg T0ZGKSBTRUxFQ1QgKiBGUk9NIGV4IFdIRVJFIChkb2NzLT4+J2InKTo6bnVtZXJpYyA+IDkgQU5E IChkb2NzLT4+J2InKTo6bnVtZXJpYyA8IDEwMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg UVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEluZGV4IFNjYW4g dXNpbmcgaWR4X2V4X2Igb24gZXgKKyAgIEZpbHRlcjogKCgoZG9jcyAtPj4gJ2InOjp0ZXh0KSk6 Om51bWVyaWMgPCAnMTAwJzo6bnVtZXJpYykKKygyIHJvd3MpCisKK1NFTEVDVCAqIEZST00gZXgg V0hFUkUgKGRvY3MtPj4nYicpOjpudW1lcmljID4gOSBBTkQgKGRvY3MtPj4nYicpOjpudW1lcmlj IDwgMTAwOworIGRvY3MgCistLS0tLS0KKygwIHJvd3MpCisKKy0tIExlYXZlICdhJyB1bmNoYW5n ZWQgYnV0IG1vZGlmeSAnYicgdG8gYSB2YWx1ZSB3aXRoaW4gdGhlIGluZGV4IHByZWRpY2F0ZS4K Ky0tIFRoaXMgcmVwcmVzZW50cyBhIGNoYW5nZSBmb3IgZmllbGQgJ2InIGZyb20gdW5pbmRleGVk IHRvIGluZGV4ZWQgYW5kIHNvCistLSB0aGlzIHNob3VsZCBub3QgdGFrZSB0aGUgSE9UIHBhdGgu CitVUERBVEUgZXggU0VUIGRvY3MgPSBqc29uYl9idWlsZF9vYmplY3QoJ2EnLCAwLCAnYicsIDEw KSBXSEVSRSAoZG9jcy0+PidhJyk6Om51bWVyaWMgPSAwOworU0VMRUNUIHBnX3N0YXRfZ2V0X3hh Y3RfdHVwbGVzX2hvdF91cGRhdGVkKCdleCc6OnJlZ2NsYXNzKTsgLS0gZXhwZWN0OiAxIG5vIG5l dyBIT1QgdXBkYXRlcworIHBnX3N0YXRfZ2V0X3hhY3RfdHVwbGVzX2hvdF91cGRhdGVkIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAxCisoMSByb3cpCisKKy0tIExldCdzIGNoZWNrIHRvIG1ha2Ugc3VyZSB0 aGF0IHRoZSBpbmRleCBjb250YWlucyB0aGUgbmV3IHZhbHVlIG9mICdiJworRVhQTEFJTiAoQ09T VFMgT0ZGKSBTRUxFQ1QgKiBGUk9NIGV4IFdIRVJFIChkb2NzLT4+J2InKTo6bnVtZXJpYyA+IDkg QU5EIChkb2NzLT4+J2InKTo6bnVtZXJpYyA8IDEwMDsKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEluZGV4IFNj YW4gdXNpbmcgaWR4X2V4X2Igb24gZXgKKyAgIEZpbHRlcjogKCgoZG9jcyAtPj4gJ2InOjp0ZXh0 KSk6Om51bWVyaWMgPCAnMTAwJzo6bnVtZXJpYykKKygyIHJvd3MpCisKK1NFTEVDVCAqIEZST00g ZXggV0hFUkUgKGRvY3MtPj4nYicpOjpudW1lcmljID4gOSBBTkQgKGRvY3MtPj4nYicpOjpudW1l cmljIDwgMTAwOworICAgICAgIGRvY3MgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLQorIHsi YSI6IDAsICJiIjogMTB9CisoMSByb3cpCisKKy0tIFRoaXMgdXBkYXRlIG1vZGlmaWVzIHRoZSB2 YWx1ZSBvZiAnYScsIGFuIGluZGV4ZWQgZmllbGQsIHNvIGl0IGFsc28gY2Fubm90CistLSBiZSBh IEhPVCB1cGRhdGUuCitVUERBVEUgZXggU0VUIGRvY3MgPSBqc29uYl9idWlsZF9vYmplY3QoJ2En LCAxLCAnYicsIDEwKSBXSEVSRSAoZG9jcy0+PidiJyk6Om51bWVyaWMgPSAxMDsKK1NFTEVDVCBw Z19zdGF0X2dldF94YWN0X3R1cGxlc19ob3RfdXBkYXRlZCgnZXgnOjpyZWdjbGFzcyk7IC0tIGV4 cGVjdDogMSBubyBuZXcgSE9UIHVwZGF0ZXMKKyBwZ19zdGF0X2dldF94YWN0X3R1cGxlc19ob3Rf dXBkYXRlZCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorKDEgcm93KQorCistLSBUaGlzIHVwZGF0ZSBj aGFuZ2VzIGJvdGggJ2EnIGFuZCAnYicgdG8gbmV3IHZhbHVlcyB0aGF0IHJlcXVpcmUgaW5kZXgg dXBkYXRlcywKKy0tIHRoaXMgY2Fubm90IHVzZSB0aGUgSE9UIHBhdGguCitVUERBVEUgZXggU0VU IGRvY3MgPSBqc29uYl9idWlsZF9vYmplY3QoJ2EnLCAyLCAnYicsIDEyKSBXSEVSRSAoZG9jcy0+ PidiJyk6Om51bWVyaWMgPSAxMDsKK1NFTEVDVCBwZ19zdGF0X2dldF94YWN0X3R1cGxlc19ob3Rf dXBkYXRlZCgnZXgnOjpyZWdjbGFzcyk7IC0tIGV4cGVjdDogMSBubyBuZXcgSE9UIHVwZGF0ZXMK KyBwZ19zdGF0X2dldF94YWN0X3R1cGxlc19ob3RfdXBkYXRlZCAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg MQorKDEgcm93KQorCistLSBMZXQncyBjaGVjayB0byBtYWtlIHN1cmUgdGhhdCB0aGUgaW5kZXgg Y29udGFpbnMgdGhlIG5ldyB2YWx1ZSBvZiAnYicKK0VYUExBSU4gKENPU1RTIE9GRikgU0VMRUNU ICogRlJPTSBleCBXSEVSRSAoZG9jcy0+PidiJyk6Om51bWVyaWMgPiA5IEFORCAoZG9jcy0+Pidi Jyk6Om51bWVyaWMgPCAxMDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4g ICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBJbmRleCBTY2FuIHVzaW5nIGlkeF9l eF9iIG9uIGV4CisgICBGaWx0ZXI6ICgoKGRvY3MgLT4+ICdiJzo6dGV4dCkpOjpudW1lcmljIDwg JzEwMCc6Om51bWVyaWMpCisoMiByb3dzKQorCitTRUxFQ1QgKiBGUk9NIGV4IFdIRVJFIChkb2Nz LT4+J2InKTo6bnVtZXJpYyA+IDkgQU5EIChkb2NzLT4+J2InKTo6bnVtZXJpYyA8IDEwMDsKKyAg ICAgICBkb2NzICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKyB7ImEiOiAyLCAiYiI6IDEy fQorKDEgcm93KQorCistLSBUaGlzIHVwZGF0ZSBjaGFuZ2VzICdiJyB0byBhIHZhbHVlIG91dHNp ZGUgaXRzIHByZWRpY2F0ZSByZXF1aXJpbmcgdGhhdAorLS0gd2UgcmVtb3ZlIGl0IGZyb20gdGhl IGluZGV4LiAgVGhhdCdzIGEgdHJhbnNpdGlvbiB0aGF0IGNhbid0IGJlIGRvbmUKKy0tIGR1cmlu ZyBhIEhPVCB1cGRhdGUuCitVUERBVEUgZXggU0VUIGRvY3MgPSBqc29uYl9idWlsZF9vYmplY3Qo J2EnLCAyLCAnYicsIDEpIFdIRVJFIChkb2NzLT4+J2InKTo6bnVtZXJpYyA9IDEyOworU0VMRUNU IHBnX3N0YXRfZ2V0X3hhY3RfdHVwbGVzX2hvdF91cGRhdGVkKCdleCc6OnJlZ2NsYXNzKTsgLS0g ZXhwZWN0OiAxIG5vIG5ldyBIT1QgdXBkYXRlcworIHBnX3N0YXRfZ2V0X3hhY3RfdHVwbGVzX2hv dF91cGRhdGVkIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisoMSByb3cpCisKKy0tIExldCdzIGNoZWNr IHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBpbmRleCBubyBsb25nZXIgY29udGFpbnMgdGhlIHZhbHVl IG9mICdiJworRVhQTEFJTiAoQ09TVFMgT0ZGKSBTRUxFQ1QgKiBGUk9NIGV4IFdIRVJFIChkb2Nz LT4+J2InKTo6bnVtZXJpYyA+IDkgQU5EIChkb2NzLT4+J2InKTo6bnVtZXJpYyA8IDEwMDsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAg ICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorIEluZGV4IFNjYW4gdXNpbmcgaWR4X2V4X2Igb24gZXgKKyAgIEZpbHRlcjog KCgoZG9jcyAtPj4gJ2InOjp0ZXh0KSk6Om51bWVyaWMgPCAnMTAwJzo6bnVtZXJpYykKKygyIHJv d3MpCisKK1NFTEVDVCAqIEZST00gZXggV0hFUkUgKGRvY3MtPj4nYicpOjpudW1lcmljID4gOSBB TkQgKGRvY3MtPj4nYicpOjpudW1lcmljIDwgMTAwOworIGRvY3MgCistLS0tLS0KKygwIHJvd3Mp CisKKy0tIERpc2FibGUgZXhwcmVzc2lvbiBjaGVja3MuCitBTFRFUiBUQUJMRSBleCBTRVQgKGV4 cHJlc3Npb25fY2hlY2tzID0gZmFsc2UpOworU0VMRUNUIHJlbG9wdGlvbnMgRlJPTSBwZ19jbGFz cyBXSEVSRSByZWxuYW1lID0gJ2V4JzsKKyAgICAgICAgICAgICAgIHJlbG9wdGlvbnMgICAgICAg ICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIHtm aWxsZmFjdG9yPTYwLGV4cHJlc3Npb25fY2hlY2tzPWZhbHNlfQorKDEgcm93KQorCistLSBUaGlz IHVwZGF0ZSBjaGFuZ2VzICdiJyB0byBhIHZhbHVlIHdpdGhpbiBpdHMgcHJlZGljYXRlIGp1c3Qg bGlrZSBpdAorLS0gcHJldmlvdXMgdmFsdWUsIHdoaWNoIHdvdWxkIGFsbG93IGZvciBhIEhPVCB1 cGRhdGUgYnV0IHdpdGggZXhwcmVzc2lvbgorLS0gY2hlY2tzIGRpc2FibGVkIHdlIGNhbid0IGRl dGVybWluZSB0aGF0IHNvIHRoaXMgc2hvdWxkIG5vdCBiZSBhIEhPVCB1cGRhdGUuCitVUERBVEUg ZXggU0VUIGRvY3MgPSBqc29uYl9idWlsZF9vYmplY3QoJ2EnLCAyLCAnYicsIDIpIFdIRVJFIChk b2NzLT4+J2InKTo6bnVtZXJpYyA9IDE7CitTRUxFQ1QgcGdfc3RhdF9nZXRfeGFjdF90dXBsZXNf aG90X3VwZGF0ZWQoJ2V4Jzo6cmVnY2xhc3MpOyAtLSBleHBlY3Q6IDEgbm8gbmV3IEhPVCB1cGRh dGVzCisgcGdfc3RhdF9nZXRfeGFjdF90dXBsZXNfaG90X3VwZGF0ZWQgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDEKKygxIHJvdykKKworLS0gTGV0J3MgbWFrZSBzdXJlIHdlJ3JlIHJlY29yZGluZyBIT1Qg dXBkYXRlcyBmb3Igb3VyICdleCcgcmVsYXRpb24gcHJvcGVybHkgaW4gdGhlIHN5c3RlbQorLS0g dGFibGUgcGdfc3RhdF91c2VyX3RhYmxlcy4gIE5vdGUgdGhhdCBzdGF0aXN0aWNzIGFyZSBzdG9y ZWQgd2l0aGluIGEgdHJhbnNhY3Rpb24gY29udGV4dAorLS0gZmlyc3QgKHhhY3QpIGFuZCB0aGVu IGxhdGVyIGludG8gdGhlIGdsb2JhbCBzdGF0aXN0aWNzIGZvciBhIHJlbGF0aW9uLCBzbyBmaXJz dCB3ZSBuZWVkCistLSB0byBlbnN1cmUgcGVuZGluZyBzdGF0cyBhcmUgZmx1c2hlZC4KK1NFTEVD VCBwZ19zdGF0X2ZvcmNlX25leHRfZmx1c2goKTsKKyBwZ19zdGF0X2ZvcmNlX25leHRfZmx1c2gg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIAorKDEgcm93KQorCitTRUxFQ1QgCisgICAg Yy5yZWxuYW1lIEFTIHRhYmxlX25hbWUsCisgICAgLS0gVHJhbnNhY3Rpb24gc3RhdGlzdGljcwor ICAgIHBnX3N0YXRfZ2V0X3hhY3RfdHVwbGVzX3VwZGF0ZWQoYy5vaWQpIEFTIHhhY3RfdXBkYXRl cywKKyAgICBwZ19zdGF0X2dldF94YWN0X3R1cGxlc19ob3RfdXBkYXRlZChjLm9pZCkgQVMgeGFj dF9ob3RfdXBkYXRlcywKKyAgICBST1VORCgoCisgICAgICAgIHBnX3N0YXRfZ2V0X3hhY3RfdHVw bGVzX2hvdF91cGRhdGVkKGMub2lkKTo6ZmxvYXQgLyAKKyAgICAgICAgTlVMTElGKHBnX3N0YXRf Z2V0X3hhY3RfdHVwbGVzX3VwZGF0ZWQoYy5vaWQpLCAwKSAqIDEwMAorICAgICk6Om51bWVyaWMs IDIpIEFTIHhhY3RfaG90X3VwZGF0ZV9wZXJjZW50YWdlLAorICAgIC0tIEN1bXVsYXRpdmUgc3Rh dGlzdGljcworICAgIHMubl90dXBfdXBkIEFTIHRvdGFsX3VwZGF0ZXMsCisgICAgcy5uX3R1cF9o b3RfdXBkIEFTIGhvdF91cGRhdGVzLAorICAgIFJPVU5EKCgKKyAgICAgICAgcy5uX3R1cF9ob3Rf dXBkOjpmbG9hdCAvIAorICAgICAgICBOVUxMSUYocy5uX3R1cF91cGQsIDApICogMTAwCisgICAg KTo6bnVtZXJpYywgMikgQVMgdG90YWxfaG90X3VwZGF0ZV9wZXJjZW50YWdlCitGUk9NIHBnX2Ns YXNzIGMKK0xFRlQgSk9JTiBwZ19zdGF0X3VzZXJfdGFibGVzIHMgT04gYy5yZWxuYW1lID0gcy5y ZWxuYW1lCitXSEVSRSBjLnJlbG5hbWUgPSAnZXgnIAorQU5EIGMucmVsbmFtZXNwYWNlID0gJ3B1 YmxpYyc6OnJlZ25hbWVzcGFjZTsKKyB0YWJsZV9uYW1lIHwgeGFjdF91cGRhdGVzIHwgeGFjdF9o b3RfdXBkYXRlcyB8IHhhY3RfaG90X3VwZGF0ZV9wZXJjZW50YWdlIHwgdG90YWxfdXBkYXRlcyB8 IGhvdF91cGRhdGVzIHwgdG90YWxfaG90X3VwZGF0ZV9wZXJjZW50YWdlIAorLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgZXggICAgICAgICB8ICAgICAgICAgICAgMCB8ICAgICAgICAgICAgICAgIDAg fCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgIDYgfCAgICAgICAgICAg MSB8ICAgICAgICAgICAgICAgICAgICAgICAxNi42NworKDEgcm93KQorCistLSBleHBlY3Q6IDUg eGFjdCB1cGRhdGVzIHdpdGggMSB4YWN0IGhvdCB1cGRhdGUgYW5kIG5vIGN1bXVsYXRpdmUgdXBk YXRlcyBhcyB5ZXQKK1NFVCBTRVNTSU9OIGVuYWJsZV9zZXFzY2FuID0gT047CitTRVQgU0VTU0lP TiBlbmFibGVfYml0bWFwc2NhbiA9IE9OOworRFJPUCBUQUJMRSBleDsKKy0tIC0tIC0tIC0tIC0t IC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0t IC0tIC0tCistLSBUaGlzIHRhYmxlIGhhcyBhIHNpbmdsZSBjb2x1bW4gJ2VtYWlsJyBhbmQgYSB1 bmlxdWUgY29uc3RyYWludCBvbiBpdCB0aGF0CistLSBzaG91bGQgcHJlY2x1ZGUgSE9UIHVwZGF0 ZXMuCitDUkVBVEUgVEFCTEUgdXNlcnMgKAorICAgIHVzZXJfaWQgc2VyaWFsIHByaW1hcnkga2V5 LAorICAgIG5hbWUgVkFSQ0hBUigyNTUpIE5PVCBOVUxMLAorICAgIGVtYWlsIFZBUkNIQVIoMjU1 KSBOT1QgTlVMTCwKKyAgICBFWENMVURFIFVTSU5HIGJ0cmVlIChsb3dlcihlbWFpbCkgV0lUSCA9 KQorKTsKKy0tIEFkZCBzb21lIGRhdGEgdG8gdGhlIHRhYmxlIGFuZCB0aGVuIHVwZGF0ZSBpdCBp biB3YXlzIHRoYXQgc2hvdWxkIGFuZCBzaG91bGQKKy0tIG5vdCBiZSBIT1QgdXBkYXRlcy4KK0lO U0VSVCBJTlRPIHVzZXJzIChuYW1lLCBlbWFpbCkgVkFMVUVTCisoJ3VzZXIxJywgJ3VzZXIxQGV4 YW1wbGUuY29tJyksCisoJ3VzZXIyJywgJ3VzZXIyQGV4YW1wbGUuY29tJyksCisoJ3Rha2VuJywg J3Rha2VuQEVYQU1QTEUuY29tJyksCisoJ3lvdScsICd5b3VAZG9tYWluLmNvbScpLAorKCd0YWtl bicsICd0YWtlbkBkb21haW4uY29tJyk7CistLSBTaG91bGQgZmFpbCBiZWNhdXNlIG9mIHRoZSB1 bmlxdWUgY29uc3RyYWludCBvbiB0aGUgZW1haWwgY29sdW1uLgorVVBEQVRFIHVzZXJzIFNFVCBl bWFpbCA9ICd1c2VyMUBleGFtcGxlLmNvbScgV0hFUkUgZW1haWwgPSAndXNlcjJAZXhhbXBsZS5j b20nOworRVJST1I6ICBjb25mbGljdGluZyBrZXkgdmFsdWUgdmlvbGF0ZXMgZXhjbHVzaW9uIGNv bnN0cmFpbnQgInVzZXJzX2xvd2VyX2V4Y2wiCitERVRBSUw6ICBLZXkgKGxvd2VyKGVtYWlsOjp0 ZXh0KSk9KHVzZXIxQGV4YW1wbGUuY29tKSBjb25mbGljdHMgd2l0aCBleGlzdGluZyBrZXkgKGxv d2VyKGVtYWlsOjp0ZXh0KSk9KHVzZXIxQGV4YW1wbGUuY29tKS4KK1NFTEVDVCBwZ19zdGF0X2dl dF94YWN0X3R1cGxlc19ob3RfdXBkYXRlZCgndXNlcnMnOjpyZWdjbGFzcyk7IC0tIGV4cGVjdDog MCBubyBuZXcgSE9UIHVwZGF0ZXMKKyBwZ19zdGF0X2dldF94YWN0X3R1cGxlc19ob3RfdXBkYXRl ZCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgMAorKDEgcm93KQorCistLSBTaG91bGQgc3VjY2VlZCBiZWNh dXNlIHRoZSBlbWFpbCBjb2x1bW4gaXMgbm90IGJlaW5nIHVwZGF0ZWQgYW5kIHNob3VsZCBnbyBI T1QuCitVUERBVEUgdXNlcnMgU0VUIG5hbWUgPSAnZm9vJyBXSEVSRSBlbWFpbCA9ICd1c2VyMUBl eGFtcGxlLmNvbSc7CitTRUxFQ1QgcGdfc3RhdF9nZXRfeGFjdF90dXBsZXNfaG90X3VwZGF0ZWQo J3VzZXJzJzo6cmVnY2xhc3MpOyAtLSBleHBlY3Q6IDEgYSBzaW5nbGUgbmV3IEhPVCB1cGRhdGUK KyBwZ19zdGF0X2dldF94YWN0X3R1cGxlc19ob3RfdXBkYXRlZCAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg MQorKDEgcm93KQorCistLSBDcmVhdGUgYSBwYXJ0aWFsIGluZGV4IG9uIHRoZSBlbWFpbCBjb2x1 bW4sIHVwZGF0ZXMgCitDUkVBVEUgSU5ERVggaWR4X3VzZXJzX2VtYWlsX25vX2V4YW1wbGUgT04g dXNlcnMgKGxvd2VyKGVtYWlsKSkgV0hFUkUgbG93ZXIoZW1haWwpIExJS0UgJyVAZXhhbXBsZS5j b20lJzsKKy0tIEFuIHVwZGF0ZSB0aGF0IGNoYW5nZXMgdGhlIGVtYWlsIGNvbHVtbiBidXQgbm90 IHRoZSBpbmRleGVkIHBvcnRpb24gb2YgaXQgYW5kIGZhbGxzIG91dHNpZGUgdGhlIGNvbnN0cmFp bnQuCistLSBTaG91bGRuJ3QgYmUgYSBIT1QgdXBkYXRlIGJlY2F1c2Ugb2YgdGhlIGV4Y2x1c2lv biBjb25zdHJhaW50LgorVVBEQVRFIHVzZXJzIFNFVCBlbWFpbCA9ICd5b3UrMkBkb21haW4uY29t JyBXSEVSRSBuYW1lID0gJ3lvdSc7CitTRUxFQ1QgcGdfc3RhdF9nZXRfeGFjdF90dXBsZXNfaG90 X3VwZGF0ZWQoJ3VzZXJzJzo6cmVnY2xhc3MpOyAtLSBleHBlY3Q6IDEgbm8gbmV3IEhPVCB1cGRh dGVzCisgcGdfc3RhdF9nZXRfeGFjdF90dXBsZXNfaG90X3VwZGF0ZWQgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDEKKygxIHJvdykKKworLS0gQW4gdXBkYXRlIHRoYXQgY2hhbmdlcyB0aGUgZW1haWwgY29s dW1uIGJ1dCBub3QgdGhlIGluZGV4ZWQgcG9ydGlvbiBvZiBpdCBhbmQgZmFsbHMgd2l0aGluIHRo ZSBjb25zdHJhaW50LgorLS0gQWdhaW4sIHNob3VsZCBmYWlsIGNvbnN0cmFpbnQgYW5kIGZhaWwg dG8gYmUgYSBIT1QgdXBkYXRlLgorVVBEQVRFIHVzZXJzIFNFVCBlbWFpbCA9ICd0YWtlbkBkb21h aW4uY29tJyBXSEVSRSBuYW1lID0gJ3lvdSc7CitFUlJPUjogIGNvbmZsaWN0aW5nIGtleSB2YWx1 ZSB2aW9sYXRlcyBleGNsdXNpb24gY29uc3RyYWludCAidXNlcnNfbG93ZXJfZXhjbCIKK0RFVEFJ TDogIEtleSAobG93ZXIoZW1haWw6OnRleHQpKT0odGFrZW5AZG9tYWluLmNvbSkgY29uZmxpY3Rz IHdpdGggZXhpc3Rpbmcga2V5IChsb3dlcihlbWFpbDo6dGV4dCkpPSh0YWtlbkBkb21haW4uY29t KS4KK1NFTEVDVCBwZ19zdGF0X2dldF94YWN0X3R1cGxlc19ob3RfdXBkYXRlZCgndXNlcnMnOjpy ZWdjbGFzcyk7IC0tIGV4cGVjdDogMSBubyBuZXcgSE9UIHVwZGF0ZXMKKyBwZ19zdGF0X2dldF94 YWN0X3R1cGxlc19ob3RfdXBkYXRlZCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorKDEgcm93KQorCitE Uk9QIFRBQkxFIHVzZXJzOworLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0g LS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0KKy0tIEFub3RoZXIgdGVzdCBv ZiBjb25zdHJhaW50cyBzcG9pbGluZyBIT1QgdXBkYXRlcywgdGhpcyB0aW1lIHdpdGggYSByYW5n ZS4KK0NSRUFURSBUQUJMRSBldmVudHMgKAorICAgIGlkIHNlcmlhbCBwcmltYXJ5IGtleSwKKyAg ICBuYW1lIFZBUkNIQVIoMjU1KSBOT1QgTlVMTCwKKyAgICBldmVudF90aW1lIHRzdHpyYW5nZSwK KyAgICBjb25zdHJhaW50IG5vX3NjcmVlbmluZ190aW1lX292ZXJsYXAgZXhjbHVkZSB1c2luZyBn aXN0ICgKKyAgICAgICAgZXZlbnRfdGltZSBXSVRIICYmCisgICAgKQorKTsKKy0tIEFkZCB0d28g bm9uLW92ZXJsYXBwaW5nIGV2ZW50cy4KK0lOU0VSVCBJTlRPIGV2ZW50cyAoaWQsIGV2ZW50X3Rp bWUsIG5hbWUpCitWQUxVRVMKKyAgICAoMSwgJ1siMjAyMy0wMS0wMSAxOTowMDowMCIsICIyMDIz LTAxLTAxIDIwOjQ1OjAwIl0nLCAnZXZlbnQxJyksCisgICAgKDIsICdbIjIwMjMtMDEtMDEgMjE6 MDA6MDAiLCAiMjAyMy0wMS0wMSAyMTo0NTowMCJdJywgJ2V2ZW50MicpOworLS0gVXBkYXRlIHRo ZSBmaXJzdCBldmVudCB0byBvdmVybGFwIHdpdGggdGhlIHNlY29uZCwgc2hvdWxkIGZhaWwgdGhl IGNvbnN0cmFpbnQgYW5kIG5vdCBiZSBIT1QuCitVUERBVEUgZXZlbnRzIFNFVCBldmVudF90aW1l ID0gJ1siMjAyMy0wMS0wMSAyMDowMDowMCIsICIyMDIzLTAxLTAxIDIxOjQ1OjAwIl0nIFdIRVJF IGlkID0gMTsKK0VSUk9SOiAgY29uZmxpY3Rpbmcga2V5IHZhbHVlIHZpb2xhdGVzIGV4Y2x1c2lv biBjb25zdHJhaW50ICJub19zY3JlZW5pbmdfdGltZV9vdmVybGFwIgorREVUQUlMOiAgS2V5IChl dmVudF90aW1lKT0oWyJTdW4gSmFuIDAxIDIwOjAwOjAwIDIwMjMgUFNUIiwiU3VuIEphbiAwMSAy MTo0NTowMCAyMDIzIFBTVCJdKSBjb25mbGljdHMgd2l0aCBleGlzdGluZyBrZXkgKGV2ZW50X3Rp bWUpPShbIlN1biBKYW4gMDEgMjE6MDA6MDAgMjAyMyBQU1QiLCJTdW4gSmFuIDAxIDIxOjQ1OjAw IDIwMjMgUFNUIl0pLgorU0VMRUNUIHBnX3N0YXRfZ2V0X3hhY3RfdHVwbGVzX2hvdF91cGRhdGVk KCdldmVudHMnOjpyZWdjbGFzcyk7IC0tIGV4cGVjdDogMCBubyBuZXcgSE9UIHVwZGF0ZXMKKyBw Z19zdGF0X2dldF94YWN0X3R1cGxlc19ob3RfdXBkYXRlZCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAor KDEgcm93KQorCistLSBVcGRhdGUgdGhlIGZpcnN0IGV2ZW50IHRvIG5vdCBvdmVybGFwIHdpdGgg dGhlIHNlY29uZCwgYWdhaW4gbm90IEhPVCBkdWUgdG8gdGhlIGNvbnN0cmFpbnQuCitVUERBVEUg ZXZlbnRzIFNFVCBldmVudF90aW1lID0gJ1siMjAyMy0wMS0wMSAyMjowMDowMCIsICIyMDIzLTAx LTAxIDIyOjQ1OjAwIl0nIFdIRVJFIGlkID0gMTsKK1NFTEVDVCBwZ19zdGF0X2dldF94YWN0X3R1 cGxlc19ob3RfdXBkYXRlZCgnZXZlbnRzJzo6cmVnY2xhc3MpOyAtLSBleHBlY3Q6IDAgbm8gbmV3 IEhPVCB1cGRhdGVzCisgcGdfc3RhdF9nZXRfeGFjdF90dXBsZXNfaG90X3VwZGF0ZWQgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDAKKygxIHJvdykKKworLS0gVXBkYXRlIHRoZSBmaXJzdCBldmVudCB0byBu b3Qgb3ZlcmxhcCB3aXRoIHRoZSBzZWNvbmQsIHRoaXMgdGltZSB3ZSdyZSBIT1QgYmVjYXVzZSB3 ZSBkb24ndCBvdmVybGFwIHdpdGggdGhlIGNvbnN0cmFpbnQuCitVUERBVEUgZXZlbnRzIFNFVCBu YW1lID0gJ25ldyBuYW1lIGhlcmUnIFdIRVJFIGlkID0gMTsKK1NFTEVDVCBwZ19zdGF0X2dldF94 YWN0X3R1cGxlc19ob3RfdXBkYXRlZCgnZXZlbnRzJzo6cmVnY2xhc3MpOyAtLSBleHBlY3Q6IDEg b25lIG5ldyBIT1QgdXBkYXRlCisgcGdfc3RhdF9nZXRfeGFjdF90dXBsZXNfaG90X3VwZGF0ZWQg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDEKKygxIHJvdykKKworRFJPUCBUQUJMRSBldmVudHM7CistLSAt LSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAt LSAtLSAtLSAtLSAtLSAtLQorLS0gQSB0ZXN0IHRvIGVuc3VyZSB0aGF0IHN1bW1hcml6aW5nIGlu ZGV4ZXMgYXJlIG5vdCB1cGRhdGVkIHdoZW4gdGhleSBkb24ndAorLS0gY2hhbmdlLCBidXQgYXJl IHVwZGF0ZWQgd2hlbiB0aGV5IGRvIHdoaWxlIG5vdCBwcmVmZW50IEhPVCB1cGRhdGVzLgorQ1JF QVRFIFRBQkxFIGV4IChhdHQxIEpTT05CLCBhdHQyIHRleHQpIFdJVEggKGZpbGxmYWN0b3IgPSA2 MCk7CitDUkVBVEUgSU5ERVggZXhwcmVzc2lvbiBPTiBleCBVU0lORyBidHJlZSgoYXR0MS0+J2Rh dGEnKSk7CitDUkVBVEUgSU5ERVggc3VtbWFyaXppbmcgT04gZXggVVNJTkcgQlJJTihhdHQyKTsK K0lOU0VSVCBJTlRPIGV4IFZBTFVFUyAoJ3siZGF0YSI6IFtdfScsICdub3RoaW5nIHNwZWNpYWwn KTsKKy0tIFVwZGF0ZSB0aGUgdW5pbmRleGVkIHZhbHVlIG9mIGF0dDEsIHRoaXMgc2hvdWxkIGJl IGEgSE9UIHVwZGF0ZSBhbmQgbm90CistLSB1cGRhdGUgdGhlIHN1bW1hcml6aW5nIGluZGV4Lgor VVBEQVRFIGV4IFNFVCBhdHQxID0gYXR0MSB8fCAneyJzdGF0dXMiOiAiY2hlY2ttYXRlIn0nOwor U0VMRUNUIHBnX3N0YXRfZ2V0X3hhY3RfdHVwbGVzX2hvdF91cGRhdGVkKCdleCc6OnJlZ2NsYXNz KTsgLS0gZXhwZWN0OiAxIG9uZSBuZXcgSE9UIHVwZGF0ZQorIHBnX3N0YXRfZ2V0X3hhY3RfdHVw bGVzX2hvdF91cGRhdGVkIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisoMSByb3cpCisKKy0tIFVwZGF0 ZSB0aGUgaW5kZXhlZCB2YWx1ZSBvZiBhdHQyLCBhIHN1bW1hcml6ZWQgdmFsdWUsIHRoaXMgaXMg YSBzdW1tYXJpemVkCistLSBvbmx5IHVwZGF0ZSBhbmQgc2hvdWxkIHVzZSB0aGUgSE9UIHBhdGgg d2hpbGUgc3RpbGwgdHJpZ2dlcmluZyBhbiB1cGRhdGUgdG8KKy0tIHRoZSBzdW1tYXJpemluZyBC UklOIGluZGV4LgorVVBEQVRFIGV4IFNFVCBhdHQyID0gJ3NwZWNpYWwgaW5kZWVkJzsKK1NFTEVD VCBwZ19zdGF0X2dldF94YWN0X3R1cGxlc19ob3RfdXBkYXRlZCgnZXgnOjpyZWdjbGFzcyk7IC0t IGV4cGVjdDogMiBvbmUgbmV3IEhPVCB1cGRhdGUKKyBwZ19zdGF0X2dldF94YWN0X3R1cGxlc19o b3RfdXBkYXRlZCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorKDEgcm93KQorCistLSBVcGRhdGUgdG8g YXR0MSBkb2Vzbid0IGNoYW5nZSB0aGUgaW5kZXhlZCB2YWx1ZSB3aGlsZSB0aGUgdXBkYXRlIHRv IGF0dDIgZG9lcywKKy0tIHRoaXMgYWdhaW4gaXMgYSBzdW1tYXJpemVkIG9ubHkgdXBkYXRlIGFu ZCBzaG91bGQgdXNlIHRoZSBIT1QgcGF0aCBhcyB3ZWxsIGFzCistLSB0cmlnZ2VyIGFuIHVwZGF0 ZSB0byB0aGUgQlJJTiBpbmRleC4KK1VQREFURSBleCBTRVQgYXR0MSA9IGF0dDEgfHwgJ3sic3Rh dHVzIjogImNoZWNrbWF0ZSEifScsIGF0dDIgPSAnc3BlY2lhbCwgc28gc3BlY2lhbCc7CitTRUxF Q1QgcGdfc3RhdF9nZXRfeGFjdF90dXBsZXNfaG90X3VwZGF0ZWQoJ2V4Jzo6cmVnY2xhc3MpOyAt LSBleHBlY3Q6IDMgb25lIG5ldyBIT1QgdXBkYXRlCisgcGdfc3RhdF9nZXRfeGFjdF90dXBsZXNf aG90X3VwZGF0ZWQgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKKygxIHJvdykKKworLS0gVGhpcyB1cGRh dGVzIGJvdGggaW5kZXhlcywgdGhlIGV4cHJlc3Npb24gaW5kZXggb24gYXR0MSBhbmQgdGhlIHN1 bW1hcml6aW5nCistLSBpbmRleCBvbiBhdHQyLiAgVGhpcyBzaG91bGQgbm90IGJlIGEgSE9UIHVw ZGF0ZSBiZWNhdXNlIHRoZXJlIGFyZSBtb2RpZmllZAorLS0gaW5kZXhlcyBhbmQgb25seSBzb21l IGFyZSBzdW1tYXJpemVkLCBub3QgYWxsLiAgVGhpcyBzaG91bGQgZm9yY2UgYWxsCistLSBpbmRl eGVzIHRvIGJlIHVwZGF0ZWQuCitVUERBVEUgZXggU0VUIGF0dDEgPSBhdHQxIHx8ICd7ImRhdGEi OiBbMSwyLDNdfScsIGF0dDIgPSAnZG8geW91IHdhbnQgdG8gcGxheSBhIGdhbWU/JzsKK1NFTEVD VCBwZ19zdGF0X2dldF94YWN0X3R1cGxlc19ob3RfdXBkYXRlZCgnZXgnOjpyZWdjbGFzcyk7IC0t IGV4cGVjdDogMyBib3RoIGluZGV4ZXMgdXBkYXRlZAorIHBnX3N0YXRfZ2V0X3hhY3RfdHVwbGVz X2hvdF91cGRhdGVkIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisoMSByb3cpCisKK0RST1AgVEFCTEUg ZXg7CistLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAt LSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLQorLS0gVGhpcyB0ZXN0IGlzIGZvciBhIHRhYmxlIHdp dGggYSBjdXN0b20gdHlwZSBhbmQgYSBjdXN0b20gb3BlcmF0b3JzIG9uCistLSB0aGUgQlRSRUUg aW5kZXguICBUaGUgcXVlc3Rpb24gaXMsIHdoZW4gY29tcGFyaW5nIHZhbHVlcyBmb3IgZXF1YWxp dHkKKy0tIHRvIGRldGVybWluZSBpZiB0aGVyZSBhcmUgY2hhbmdlcyBvbiB0aGUgaW5kZXggb3Ig bm90Li4uIHNob3VsZG4ndCB3ZQorLS0gYmUgdXNpbmcgdGhlIGN1c3RvbSBvcGVyYXRvcnM/Cist LSBDcmVhdGUgYSB0eXBlCitDUkVBVEUgVFlQRSBteV9jdXN0b21fdHlwZSBBUyAodmFsIGludCk7 CistLSBDb21wYXJpc29uIGZ1bmN0aW9ucyAocmV0dXJucyBib29sZWFuKQorQ1JFQVRFIEZVTkNU SU9OIG15X2N1c3RvbV9sdChhIG15X2N1c3RvbV90eXBlLCBiIG15X2N1c3RvbV90eXBlKSBSRVRV Uk5TIGJvb2xlYW4gQVMgJCQKK0JFR0lOCisgICAgUkVUVVJOIGEudmFsIDwgYi52YWw7CitFTkQ7 CiskJCBMQU5HVUFHRSBwbHBnc3FsIElNTVVUQUJMRSBTVFJJQ1Q7CitDUkVBVEUgRlVOQ1RJT04g bXlfY3VzdG9tX2xlKGEgbXlfY3VzdG9tX3R5cGUsIGIgbXlfY3VzdG9tX3R5cGUpIFJFVFVSTlMg Ym9vbGVhbiBBUyAkJAorQkVHSU4KKyAgICBSRVRVUk4gYS52YWwgPD0gYi52YWw7CitFTkQ7Cisk JCBMQU5HVUFHRSBwbHBnc3FsIElNTVVUQUJMRSBTVFJJQ1Q7CitDUkVBVEUgRlVOQ1RJT04gbXlf Y3VzdG9tX2VxKGEgbXlfY3VzdG9tX3R5cGUsIGIgbXlfY3VzdG9tX3R5cGUpIFJFVFVSTlMgYm9v bGVhbiBBUyAkJAorQkVHSU4KKyAgICBSRVRVUk4gYS52YWwgPSBiLnZhbDsKK0VORDsKKyQkIExB TkdVQUdFIHBscGdzcWwgSU1NVVRBQkxFIFNUUklDVDsKK0NSRUFURSBGVU5DVElPTiBteV9jdXN0 b21fZ2UoYSBteV9jdXN0b21fdHlwZSwgYiBteV9jdXN0b21fdHlwZSkgUkVUVVJOUyBib29sZWFu IEFTICQkCitCRUdJTgorICAgIFJFVFVSTiBhLnZhbCA+PSBiLnZhbDsKK0VORDsKKyQkIExBTkdV QUdFIHBscGdzcWwgSU1NVVRBQkxFIFNUUklDVDsKK0NSRUFURSBGVU5DVElPTiBteV9jdXN0b21f Z3QoYSBteV9jdXN0b21fdHlwZSwgYiBteV9jdXN0b21fdHlwZSkgUkVUVVJOUyBib29sZWFuIEFT ICQkCitCRUdJTgorICAgIFJFVFVSTiBhLnZhbCA+IGIudmFsOworRU5EOworJCQgTEFOR1VBR0Ug cGxwZ3NxbCBJTU1VVEFCTEUgU1RSSUNUOworQ1JFQVRFIEZVTkNUSU9OIG15X2N1c3RvbV9uZShh IG15X2N1c3RvbV90eXBlLCBiIG15X2N1c3RvbV90eXBlKSBSRVRVUk5TIGJvb2xlYW4gQVMgJCQK K0JFR0lOCisgICAgUkVUVVJOIGEudmFsICE9IGIudmFsOworRU5EOworJCQgTEFOR1VBR0UgcGxw Z3NxbCBJTU1VVEFCTEUgU1RSSUNUOworLS0gQ29tcGFyaXNvbiBmdW5jdGlvbiAocmV0dXJucyAt MSwgMCwgMSkKK0NSRUFURSBGVU5DVElPTiBteV9jdXN0b21fY21wKGEgbXlfY3VzdG9tX3R5cGUs IGIgbXlfY3VzdG9tX3R5cGUpIFJFVFVSTlMgaW50IEFTICQkCitCRUdJTgorICAgIElGIGEudmFs IDwgYi52YWwgVEhFTgorICAgICAgICBSRVRVUk4gLTE7CisgICAgRUxTSUYgYS52YWwgPiBiLnZh bCBUSEVOCisgICAgICAgIFJFVFVSTiAxOworICAgIEVMU0UKKyAgICAgICAgUkVUVVJOIDA7Cisg ICAgRU5EIElGOworRU5EOworJCQgTEFOR1VBR0UgcGxwZ3NxbCBJTU1VVEFCTEUgU1RSSUNUOwor LS0gQ3JlYXRlIHRoZSBvcGVyYXRvcnMKK0NSRUFURSBPUEVSQVRPUiA8ICgKKyAgICBMRUZUQVJH ID0gbXlfY3VzdG9tX3R5cGUsCisgICAgUklHSFRBUkcgPSBteV9jdXN0b21fdHlwZSwKKyAgICBQ Uk9DRURVUkUgPSBteV9jdXN0b21fbHQsCisgICAgQ09NTVVUQVRPUiA9ID4sCisgICAgTkVHQVRP UiA9ID49CispOworQ1JFQVRFIE9QRVJBVE9SIDw9ICgKKyAgICBMRUZUQVJHID0gbXlfY3VzdG9t X3R5cGUsCisgICAgUklHSFRBUkcgPSBteV9jdXN0b21fdHlwZSwKKyAgICBQUk9DRURVUkUgPSBt eV9jdXN0b21fbGUsCisgICAgQ09NTVVUQVRPUiA9ID49LAorICAgIE5FR0FUT1IgPSA+CispOwor Q1JFQVRFIE9QRVJBVE9SID0gKAorICAgIExFRlRBUkcgPSBteV9jdXN0b21fdHlwZSwKKyAgICBS SUdIVEFSRyA9IG15X2N1c3RvbV90eXBlLAorICAgIFBST0NFRFVSRSA9IG15X2N1c3RvbV9lcSwK KyAgICBDT01NVVRBVE9SID0gPSwKKyAgICBORUdBVE9SID0gPD4KKyk7CitDUkVBVEUgT1BFUkFU T1IgPj0gKAorICAgIExFRlRBUkcgPSBteV9jdXN0b21fdHlwZSwKKyAgICBSSUdIVEFSRyA9IG15 X2N1c3RvbV90eXBlLAorICAgIFBST0NFRFVSRSA9IG15X2N1c3RvbV9nZSwKKyAgICBDT01NVVRB VE9SID0gPD0sCisgICAgTkVHQVRPUiA9IDwKKyk7CitDUkVBVEUgT1BFUkFUT1IgPiAoCisgICAg TEVGVEFSRyA9IG15X2N1c3RvbV90eXBlLAorICAgIFJJR0hUQVJHID0gbXlfY3VzdG9tX3R5cGUs CisgICAgUFJPQ0VEVVJFID0gbXlfY3VzdG9tX2d0LAorICAgIENPTU1VVEFUT1IgPSA8LAorICAg IE5FR0FUT1IgPSA8PQorKTsKK0NSRUFURSBPUEVSQVRPUiA8PiAoCisgICAgTEVGVEFSRyA9IG15 X2N1c3RvbV90eXBlLAorICAgIFJJR0hUQVJHID0gbXlfY3VzdG9tX3R5cGUsCisgICAgUFJPQ0VE VVJFID0gbXlfY3VzdG9tX25lLAorICAgIENPTU1VVEFUT1IgPSA8PiwKKyAgICBORUdBVE9SID0g PQorKTsKKy0tIENyZWF0ZSB0aGUgb3BlcmF0b3IgY2xhc3MgKGluY2x1ZGluZyB0aGUgc3VwcG9y dCBmdW5jdGlvbikKK0NSRUFURSBPUEVSQVRPUiBDTEFTUyBteV9jdXN0b21fb3BzCisgICAgREVG QVVMVCBGT1IgVFlQRSBteV9jdXN0b21fdHlwZSBVU0lORyBidHJlZSBBUworICAgIE9QRVJBVE9S IDEgPCwKKyAgICBPUEVSQVRPUiAyIDw9LAorICAgIE9QRVJBVE9SIDMgPSwKKyAgICBPUEVSQVRP UiA0ID49LAorICAgIE9QRVJBVE9SIDUgPiwKKyAgICBGVU5DVElPTiAxIG15X2N1c3RvbV9jbXAo bXlfY3VzdG9tX3R5cGUsIG15X2N1c3RvbV90eXBlKTsKKy0tIENyZWF0ZSB0aGUgdGFibGUKK0NS RUFURSBUQUJMRSBteV90YWJsZSAoCisgICAgaWQgaW50LAorICAgIGN1c3RvbV92YWwgbXlfY3Vz dG9tX3R5cGUKKyk7CistLSBJbnNlcnQgc29tZSBkYXRhCitJTlNFUlQgSU5UTyBteV90YWJsZSAo aWQsIGN1c3RvbV92YWwpIFZBTFVFUworKDEsIFJPVygzKTo6bXlfY3VzdG9tX3R5cGUpLAorKDIs IFJPVygxKTo6bXlfY3VzdG9tX3R5cGUpLAorKDMsIFJPVyg0KTo6bXlfY3VzdG9tX3R5cGUpLAor KDQsIFJPVygyKTo6bXlfY3VzdG9tX3R5cGUpOworLS0gQ3JlYXRlIGEgZnVuY3Rpb24gdG8gdXNl IHdoZW4gaW5kZXhpbmcKK0NSRUFURSBPUiBSRVBMQUNFIEZVTkNUSU9OIGFic192YWwodmFsIG15 X2N1c3RvbV90eXBlKSBSRVRVUk5TIGludCBBUyAkJAorQkVHSU4KKyAgUkVUVVJOIGFicyh2YWwu dmFsKTsKK0VORDsKKyQkIExBTkdVQUdFIHBscGdzcWwgSU1NVVRBQkxFIFNUUklDVDsKKy0tIENy ZWF0ZSB0aGUgaW5kZXgKK0NSRUFURSBJTkRFWCBpZHhfY3VzdG9tX3ZhbF9hYnMgT04gbXlfdGFi bGUgKGFic192YWwoY3VzdG9tX3ZhbCkpOworLS0gVXBkYXRlIDEKK1VQREFURSBteV90YWJsZSBT RVQgY3VzdG9tX3ZhbCA9IFJPVyg1KTo6bXlfY3VzdG9tX3R5cGUgV0hFUkUgaWQgPSAxOworU0VM RUNUIHBnX3N0YXRfZ2V0X3hhY3RfdHVwbGVzX2hvdF91cGRhdGVkKCdteV90YWJsZSc6OnJlZ2Ns YXNzKTsKKyBwZ19zdGF0X2dldF94YWN0X3R1cGxlc19ob3RfdXBkYXRlZCAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgMAorKDEgcm93KQorCistLSBVcGRhdGUgMgorVVBEQVRFIG15X3RhYmxlIFNFVCBjdXN0 b21fdmFsID0gUk9XKDApOjpteV9jdXN0b21fdHlwZSBXSEVSRSBjdXN0b21fdmFsIDwgUk9XKDMp OjpteV9jdXN0b21fdHlwZTsKK1NFTEVDVCBwZ19zdGF0X2dldF94YWN0X3R1cGxlc19ob3RfdXBk YXRlZCgnbXlfdGFibGUnOjpyZWdjbGFzcyk7CisgcGdfc3RhdF9nZXRfeGFjdF90dXBsZXNfaG90 X3VwZGF0ZWQgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKygxIHJvdykKKworLS0gVXBkYXRlIDMKK1VQ REFURSBteV90YWJsZSBTRVQgY3VzdG9tX3ZhbCA9IFJPVyg2KTo6bXlfY3VzdG9tX3R5cGUgV0hF UkUgaWQgPSAzOworU0VMRUNUIHBnX3N0YXRfZ2V0X3hhY3RfdHVwbGVzX2hvdF91cGRhdGVkKCdt eV90YWJsZSc6OnJlZ2NsYXNzKTsKKyBwZ19zdGF0X2dldF94YWN0X3R1cGxlc19ob3RfdXBkYXRl ZCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgMAorKDEgcm93KQorCistLSBVcGRhdGUgNAorVVBEQVRFIG15 X3RhYmxlIFNFVCBpZCA9IDUgV0hFUkUgaWQgPSAxOworU0VMRUNUIHBnX3N0YXRfZ2V0X3hhY3Rf dHVwbGVzX2hvdF91cGRhdGVkKCdteV90YWJsZSc6OnJlZ2NsYXNzKTsKKyBwZ19zdGF0X2dldF94 YWN0X3R1cGxlc19ob3RfdXBkYXRlZCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorKDEgcm93KQorCist LSBRdWVyeSB1c2luZyB0aGUgaW5kZXgKK0VYUExBSU4gKENPU1RTIE9GRikgU0VMRUNUICogRlJP TSBteV90YWJsZSBXSEVSRSBhYnNfdmFsKGN1c3RvbV92YWwpID0gNjsKKyAgICAgICAgICAgICBR VUVSWSBQTEFOICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyBTZXEgU2NhbiBvbiBteV90YWJsZQorICAgRmlsdGVyOiAoYWJzX3ZhbChjdXN0b21f dmFsKSA9IDYpCisoMiByb3dzKQorCitTRUxFQ1QgKiBGUk9NIG15X3RhYmxlIFdIRVJFIGFic192 YWwoY3VzdG9tX3ZhbCkgPSA2OworIGlkIHwgY3VzdG9tX3ZhbCAKKy0tLS0rLS0tLS0tLS0tLS0t CisgIDMgfCAoNikKKygxIHJvdykKKworLS0gQ2xlYW4gdXAKK0RST1AgVEFCTEUgbXlfdGFibGUg Q0FTQ0FERTsKK0RST1AgT1BFUkFUT1IgQ0xBU1MgbXlfY3VzdG9tX29wcyBVU0lORyBidHJlZSBD QVNDQURFOworRFJPUCBPUEVSQVRPUiA8IChteV9jdXN0b21fdHlwZSwgbXlfY3VzdG9tX3R5cGUp OworRFJPUCBPUEVSQVRPUiA8PSAobXlfY3VzdG9tX3R5cGUsIG15X2N1c3RvbV90eXBlKTsKK0RS T1AgT1BFUkFUT1IgPSAobXlfY3VzdG9tX3R5cGUsIG15X2N1c3RvbV90eXBlKTsKK0RST1AgT1BF UkFUT1IgPj0gKG15X2N1c3RvbV90eXBlLCBteV9jdXN0b21fdHlwZSk7CitEUk9QIE9QRVJBVE9S ID4gKG15X2N1c3RvbV90eXBlLCBteV9jdXN0b21fdHlwZSk7CitEUk9QIE9QRVJBVE9SIDw+ICht eV9jdXN0b21fdHlwZSwgbXlfY3VzdG9tX3R5cGUpOworRFJPUCBGVU5DVElPTiBteV9jdXN0b21f bHQobXlfY3VzdG9tX3R5cGUsIG15X2N1c3RvbV90eXBlKTsKK0RST1AgRlVOQ1RJT04gbXlfY3Vz dG9tX2xlKG15X2N1c3RvbV90eXBlLCBteV9jdXN0b21fdHlwZSk7CitEUk9QIEZVTkNUSU9OIG15 X2N1c3RvbV9lcShteV9jdXN0b21fdHlwZSwgbXlfY3VzdG9tX3R5cGUpOworRFJPUCBGVU5DVElP TiBteV9jdXN0b21fZ2UobXlfY3VzdG9tX3R5cGUsIG15X2N1c3RvbV90eXBlKTsKK0RST1AgRlVO Q1RJT04gbXlfY3VzdG9tX2d0KG15X2N1c3RvbV90eXBlLCBteV9jdXN0b21fdHlwZSk7CitEUk9Q IEZVTkNUSU9OIG15X2N1c3RvbV9uZShteV9jdXN0b21fdHlwZSwgbXlfY3VzdG9tX3R5cGUpOwor RFJPUCBGVU5DVElPTiBteV9jdXN0b21fY21wKG15X2N1c3RvbV90eXBlLCBteV9jdXN0b21fdHlw ZSk7CitEUk9QIEZVTkNUSU9OIGFic192YWwobXlfY3VzdG9tX3R5cGUpOworRFJPUCBUWVBFIG15 X2N1c3RvbV90eXBlIENBU0NBREU7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3BhcmFs bGVsX3NjaGVkdWxlIGIvc3JjL3Rlc3QvcmVncmVzcy9wYXJhbGxlbF9zY2hlZHVsZQppbmRleCBl NjNlZTJjZjJiYi4uZjlkZWYzZDkzYWEgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvcGFy YWxsZWxfc2NoZWR1bGUKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9wYXJhbGxlbF9zY2hlZHVsZQpA QCAtNjgsNiArNjgsMTEgQEAgdGVzdDogc2VsZWN0X2ludG8gc2VsZWN0X2Rpc3RpbmN0IHNlbGVj dF9kaXN0aW5jdF9vbiBzZWxlY3RfaW1wbGljaXQgc2VsZWN0X2hhdmkKICMgLS0tLS0tLS0tLQog dGVzdDogYnJpbiBnaW4gZ2lzdCBzcGdpc3QgcHJpdmlsZWdlcyBpbml0X3ByaXZzIHNlY3VyaXR5 X2xhYmVsIGNvbGxhdGUgbWF0dmlldyBsb2NrIHJlcGxpY2FfaWRlbnRpdHkgcm93c2VjdXJpdHkg b2JqZWN0X2FkZHJlc3MgdGFibGVzYW1wbGUgZ3JvdXBpbmdzZXRzIGRyb3Bfb3BlcmF0b3IgcGFz c3dvcmQgaWRlbnRpdHkgZ2VuZXJhdGVkX3N0b3JlZCBqb2luX2hhc2gKIAorIyAtLS0tLS0tLS0t CisjIEFub3RoZXIgZ3JvdXAgb2YgcGFyYWxsZWwgdGVzdHMKKyMgLS0tLS0tLS0tLQordGVzdDog aGVhcF9ob3RfdXBkYXRlcworCiAjIC0tLS0tLS0tLS0KICMgQWRkaXRpb25hbCBCUklOIHRlc3Rz CiAjIC0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2hlYXBfaG90 X3VwZGF0ZXMuc3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvaGVhcF9ob3RfdXBkYXRlcy5zcWwK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjc3MjgwNzVhN2FlCi0tLSAv ZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvaGVhcF9ob3RfdXBkYXRlcy5zcWwK QEAgLTAsMCArMSw0NDAgQEAKKy0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0t IC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tCistLSBUaGlzIHRhYmxlIHdp bGwgaGF2ZSB0d28gY29sdW1ucyBhbmQgdHdvIGluZGV4ZXMsIG9uZSBvbiB0aGUgcHJpbWFyeSBr ZXkKKy0tIGlkIGFuZCBvbmUgb24gdGhlIGV4cHJlc3Npb24gKGluZm8tPj4nbmFtZScpLiAgVGhh dCBtZWFucyB0aGF0IHRoZSBpbmRleGVkCistLSBhdHRyaWJ1dGVzIGFyZSAnaWQnIGFuZCAnaW5m bycuCitjcmVhdGUgdGFibGUga2V5dmFsdWUoaWQgaW50ZWdlciBwcmltYXJ5IGtleSwgaW5mbyBq c29uYik7CitjcmVhdGUgaW5kZXggbmFtZWluZGV4IG9uIGtleXZhbHVlKChpbmZvLT4+J25hbWUn KSk7CitpbnNlcnQgaW50byBrZXl2YWx1ZSB2YWx1ZXMgKDEsICd7Im5hbWUiOiAiam9obiIsICJk YXRhIjogInNvbWUgZGF0YSJ9Jyk7CisKKy0tIERpc2FibGUgZXhwcmVzc2lvbiBjaGVja3MuCitB TFRFUiBUQUJMRSBrZXl2YWx1ZSBTRVQgKGV4cHJlc3Npb25fY2hlY2tzID0gZmFsc2UpOworU0VM RUNUIHJlbG9wdGlvbnMgRlJPTSBwZ19jbGFzcyBXSEVSRSByZWxuYW1lID0gJ2tleXZhbHVlJzsK KworLS0gV2hpbGUgdGhlIGluZGV4ZWQgYXR0cmlidXRlICJuYW1lIiBpcyB1bmNoYW5nZWQgd2Un dmUgZGlzYWJsZWQgZXhwcmVzc2lvbgorLS0gY2hlY2tzIHNvIHRoaXMgdXBkYXRlIHNob3VsZCBu b3QgZ28gSE9UIGFzIHRoZSBzeXN0ZW0gY2FuJ3QgZGV0ZXJtaW5lIGlmCistLSB0aGUgaW5kZXhl ZCBhdHRyaWJ1dGUgaGFzIGNoYW5nZWQgd2l0aG91dCBldmFsdWF0aW5nIHRoZSBleHByZXNzaW9u LgordXBkYXRlIGtleXZhbHVlIHNldCBpbmZvPSd7Im5hbWUiOiAiam9obiIsICJkYXRhIjogInNv bWV0aGluZyBlbHNlIn0nIHdoZXJlIGlkPTE7CitzZWxlY3QgcGdfc3RhdF9nZXRfeGFjdF90dXBs ZXNfaG90X3VwZGF0ZWQoJ2tleXZhbHVlJzo6cmVnY2xhc3MpOyAtLSBleHBlY3Q6IDAgcm93CisK Ky0tIFJlLWVuYWJsZSBleHByZXNzaW9uIGNoZWNrcy4KK0FMVEVSIFRBQkxFIGtleXZhbHVlIFNF VCAoZXhwcmVzc2lvbl9jaGVja3MgPSB0cnVlKTsKK1NFTEVDVCByZWxvcHRpb25zIEZST00gcGdf Y2xhc3MgV0hFUkUgcmVsbmFtZSA9ICdrZXl2YWx1ZSc7CisKKy0tIFRoZSBpbmRleGVkIGF0dHJp YnV0ZSAibmFtZSIgd2l0aCB2YWx1ZSAiam9obiIgaXMgdW5jaGFuZ2VkLCBleHBlY3QgYSBIT1Qg dXBkYXRlLgordXBkYXRlIGtleXZhbHVlIHNldCBpbmZvPSd7Im5hbWUiOiAiam9obiIsICJkYXRh IjogInNvbWUgb3RoZXIgZGF0YSJ9JyB3aGVyZSBpZD0xOworc2VsZWN0IHBnX3N0YXRfZ2V0X3hh Y3RfdHVwbGVzX2hvdF91cGRhdGVkKCdrZXl2YWx1ZSc6OnJlZ2NsYXNzKTsgLS0gZXhwZWN0OiAx IHJvdworCistLSBUaGUgZm9sbG93aW5nIHVwZGF0ZSBjaGFuZ2VzIHRoZSBpbmRleGVkIGF0dHJp YnV0ZSAibmFtZSIsIHRoaXMgc2hvdWxkIG5vdCBiZSBhIEhPVCB1cGRhdGUuCit1cGRhdGUga2V5 dmFsdWUgc2V0IGluZm89J3sibmFtZSI6ICJzbWl0aCIsICJkYXRhIjogInNvbWUgb3RoZXIgZGF0 YSJ9JyB3aGVyZSBpZD0xOworc2VsZWN0IHBnX3N0YXRfZ2V0X3hhY3RfdHVwbGVzX2hvdF91cGRh dGVkKCdrZXl2YWx1ZSc6OnJlZ2NsYXNzKTsgLS0gZXhwZWN0OiAxIG5vIG5ldyBIT1QgdXBkYXRl cworCistLSBOb3csIHRoaXMgdXBkYXRlIGRvZXMgbm90IGNoYW5nZSB0aGUgaW5kZXhlZCBhdHRy aWJ1dGUgIm5hbWUiIGZyb20gInNtaXRoIiwgdGhpcyBzaG91bGQgYmUgSE9ULgordXBkYXRlIGtl eXZhbHVlIHNldCBpbmZvPSd7Im5hbWUiOiAic21pdGgiLCAiZGF0YSI6ICJzb21lIG1vcmUgZGF0 YSJ9JyB3aGVyZSBpZD0xOworc2VsZWN0IHBnX3N0YXRfZ2V0X3hhY3RfdHVwbGVzX2hvdF91cGRh dGVkKCdrZXl2YWx1ZSc6OnJlZ2NsYXNzKTsgLS0gZXhwZWN0OiAyIHJvd3Mgbm93Citkcm9wIHRh YmxlIGtleXZhbHVlOworCisKKy0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0t IC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tCistLSBUaGlzIHRhYmxlIGlz IHRoZSBzYW1lIGFzIHRoZSBwcmV2aW91cyBvbmUgYnV0IGl0IGhhcyBhIHRoaXJkIGluZGV4LiAg VGhlCistLSBpbmRleCAnY29saW5kZXgnIGlzbid0IGFuIGV4cHJlc3Npb24gaW5kZXgsIGl0IGlu ZGV4ZXMgdGhlIGVudGlyZSB2YWx1ZQorLS0gaW4gdGhlIGluZm8gY29sdW1uLiAgVGhlcmUgYXJl IHN0aWxsIG9ubHkgdHdvIGluZGV4ZWQgYXR0cmlidXRlcyBmb3IgdGhpcworLS0gcmVsYXRpb24s IHRoZSBzYW1lIHR3byBhcyBiZWZvcmUuICBUaGUgcHJlc2VuY2Ugb2YgYW4gaW5kZXggb24gdGhl IGVudGlyZQorLS0gdmFsdWUgb2YgdGhlIGluZm8gY29sdW1uIHNob3VsZCBwcmV2ZW50IEhPVCB1 cGRhdGVzIGZvciBhbnkgdXBkYXRlcyB0byBhbnkKKy0tIHBvcnRpb24gb2YgSlNPTkIgY29udGVu dCBpbiB0aGF0IGNvbHVtbi4KK2NyZWF0ZSB0YWJsZSBrZXl2YWx1ZShpZCBpbnRlZ2VyIHByaW1h cnkga2V5LCBpbmZvIGpzb25iKTsKK2NyZWF0ZSBpbmRleCBuYW1laW5kZXggb24ga2V5dmFsdWUo KGluZm8tPj4nbmFtZScpKTsKK2NyZWF0ZSBpbmRleCBjb2xpbmRleCBvbiBrZXl2YWx1ZShpbmZv KTsKK2luc2VydCBpbnRvIGtleXZhbHVlIHZhbHVlcyAoMSwgJ3sibmFtZSI6ICJqb2huIiwgImRh dGEiOiAic29tZSBkYXRhIn0nKTsKKworLS0gVGhpcyB1cGRhdGUgZG9lc24ndCBjaGFuZ2UgdGhl IHZhbHVlIG9mIHRoZSBleHByZXNzaW9uIGluZGV4LCBidXQgaXQgZG9lcworLS0gY2hhbmdlIHRo ZSBjb250ZW50IG9mIHRoZSBpbmZvIGNvbHVtbiBhbmQgc28gc2hvdWxkIG5vdCBiZSBIT1QgYmVj YXVzZSB0aGUKKy0tIGluZGV4ZWQgdmFsdWUgY2hhbmdlZCBhcyBhIHJlc3VsdCBvZiB0aGUgdXBk YXRlLgordXBkYXRlIGtleXZhbHVlIHNldCBpbmZvPSd7Im5hbWUiOiAiam9obiIsICJkYXRhIjog InNvbWUgb3RoZXIgZGF0YSJ9JyB3aGVyZSBpZD0xOworc2VsZWN0IHBnX3N0YXRfZ2V0X3hhY3Rf dHVwbGVzX2hvdF91cGRhdGVkKCdrZXl2YWx1ZSc6OnJlZ2NsYXNzKTsgLS0gZXhwZWN0OiAwIHJv d3MKK2Ryb3AgdGFibGUga2V5dmFsdWU7CisKKy0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0t IC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tCistLSBUaGUg dGFibGUgaGFzIG9uZSBjb2x1bW4gZG9jcyBhbmQgdHdvIGluZGV4ZXMuICBUaGV5IGFyZSBib3Ro IGV4cHJlc3Npb24KKy0tIGluZGV4ZXMgcmVmZXJlbmNpbmcgdGhlIHNhbWUgY29sdW1uIGF0dHJp YnV0ZSAoZG9jcykgYnV0IG9uZSBpcyBhIHBhcnRpYWwKKy0tIGluZGV4LgorQ1JFQVRFIFRBQkxF IGV4IChkb2NzIEpTT05CKSBXSVRIIChmaWxsZmFjdG9yID0gNjApOworSU5TRVJUIElOVE8gZXgg KGRvY3MpIFZBTFVFUyAoJ3siYSI6IDAsICJiIjogMH0nKTsKK0lOU0VSVCBJTlRPIGV4IChkb2Nz KSBTRUxFQ1QganNvbmJfYnVpbGRfb2JqZWN0KCdiJywgbikgRlJPTSBnZW5lcmF0ZV9zZXJpZXMo MTAwLCAxMDAwMCkgYXMgbjsKK0NSRUFURSBJTkRFWCBpZHhfZXhfYSBPTiBleCAoKGRvY3MtPj4n YScpKTsKK0NSRUFURSBJTkRFWCBpZHhfZXhfYiBPTiBleCAoKGRvY3MtPj4nYicpKSBXSEVSRSAo ZG9jcy0+PidiJyk6Om51bWVyaWMgPiA5OworCistLSBXZSdyZSB1c2luZyBCVFJFRSBpbmRleGVz IGFuZCBmb3IgdGhpcyB0ZXN0IHdlIHdhbnQgdG8gbWFrZSBzdXJlIHRoYXQgdGhleSByZW1haW4K Ky0tIGluIHN5bmMgd2l0aCBjaGFuZ2VzIHRvIG91ciByZWxhdGlvbi4gIEZvcmNlIHRoZSBjaG9p Y2Ugb2YgaW5kZXggc2NhbnMgYmVsb3cgc28KKy0tIHRoYXQgd2Uga25vdyB3ZSdyZSBjaGVja2lu ZyB0aGUgaW5kZXgncyB1bmRlcnN0YW5kaW5nIG9mIHdoYXQgdmFsdWVzIHNob3VsZCBiZQorLS0g aW4gdGhlIGluZGV4IG9yIG5vdC4KK1NFVCBTRVNTSU9OIGVuYWJsZV9zZXFzY2FuID0gT0ZGOwor U0VUIFNFU1NJT04gZW5hYmxlX2JpdG1hcHNjYW4gPSBPRkY7CisKKy0tIExlYXZlICdhJyB1bmNo YW5nZWQgYnV0IG1vZGlmeSAnYicgdG8gYSB2YWx1ZSBvdXRzaWRlIG9mIHRoZSBpbmRleCBwcmVk aWNhdGUuCistLSBUaGlzIHNob3VsZCBiZSBhIEhPVCB1cGRhdGUgYmVjYXVzZSBuZWl0aGVyIGlu ZGV4IGlzIGNoYW5nZWQuCitVUERBVEUgZXggU0VUIGRvY3MgPSBqc29uYl9idWlsZF9vYmplY3Qo J2EnLCAwLCAnYicsIDEpIFdIRVJFIChkb2NzLT4+J2EnKTo6bnVtZXJpYyA9IDA7CitTRUxFQ1Qg cGdfc3RhdF9nZXRfeGFjdF90dXBsZXNfaG90X3VwZGF0ZWQoJ2V4Jzo6cmVnY2xhc3MpOyAtLSBl eHBlY3Q6IDEgcm93CistLSBMZXQncyBjaGVjayB0byBtYWtlIHN1cmUgdGhhdCB0aGUgaW5kZXgg ZG9lcyBub3QgY29udGFpbiBhIHZhbHVlIGZvciAnYicKK0VYUExBSU4gKENPU1RTIE9GRikgU0VM RUNUICogRlJPTSBleCBXSEVSRSAoZG9jcy0+PidiJyk6Om51bWVyaWMgPiA5IEFORCAoZG9jcy0+ PidiJyk6Om51bWVyaWMgPCAxMDA7CitTRUxFQ1QgKiBGUk9NIGV4IFdIRVJFIChkb2NzLT4+J2In KTo6bnVtZXJpYyA+IDkgQU5EIChkb2NzLT4+J2InKTo6bnVtZXJpYyA8IDEwMDsKKworLS0gTGVh dmUgJ2EnIHVuY2hhbmdlZCBidXQgbW9kaWZ5ICdiJyB0byBhIHZhbHVlIHdpdGhpbiB0aGUgaW5k ZXggcHJlZGljYXRlLgorLS0gVGhpcyByZXByZXNlbnRzIGEgY2hhbmdlIGZvciBmaWVsZCAnYicg ZnJvbSB1bmluZGV4ZWQgdG8gaW5kZXhlZCBhbmQgc28KKy0tIHRoaXMgc2hvdWxkIG5vdCB0YWtl IHRoZSBIT1QgcGF0aC4KK1VQREFURSBleCBTRVQgZG9jcyA9IGpzb25iX2J1aWxkX29iamVjdCgn YScsIDAsICdiJywgMTApIFdIRVJFIChkb2NzLT4+J2EnKTo6bnVtZXJpYyA9IDA7CitTRUxFQ1Qg cGdfc3RhdF9nZXRfeGFjdF90dXBsZXNfaG90X3VwZGF0ZWQoJ2V4Jzo6cmVnY2xhc3MpOyAtLSBl eHBlY3Q6IDEgbm8gbmV3IEhPVCB1cGRhdGVzCistLSBMZXQncyBjaGVjayB0byBtYWtlIHN1cmUg dGhhdCB0aGUgaW5kZXggY29udGFpbnMgdGhlIG5ldyB2YWx1ZSBvZiAnYicKK0VYUExBSU4gKENP U1RTIE9GRikgU0VMRUNUICogRlJPTSBleCBXSEVSRSAoZG9jcy0+PidiJyk6Om51bWVyaWMgPiA5 IEFORCAoZG9jcy0+PidiJyk6Om51bWVyaWMgPCAxMDA7CitTRUxFQ1QgKiBGUk9NIGV4IFdIRVJF IChkb2NzLT4+J2InKTo6bnVtZXJpYyA+IDkgQU5EIChkb2NzLT4+J2InKTo6bnVtZXJpYyA8IDEw MDsKKworLS0gVGhpcyB1cGRhdGUgbW9kaWZpZXMgdGhlIHZhbHVlIG9mICdhJywgYW4gaW5kZXhl ZCBmaWVsZCwgc28gaXQgYWxzbyBjYW5ub3QKKy0tIGJlIGEgSE9UIHVwZGF0ZS4KK1VQREFURSBl eCBTRVQgZG9jcyA9IGpzb25iX2J1aWxkX29iamVjdCgnYScsIDEsICdiJywgMTApIFdIRVJFIChk b2NzLT4+J2InKTo6bnVtZXJpYyA9IDEwOworU0VMRUNUIHBnX3N0YXRfZ2V0X3hhY3RfdHVwbGVz X2hvdF91cGRhdGVkKCdleCc6OnJlZ2NsYXNzKTsgLS0gZXhwZWN0OiAxIG5vIG5ldyBIT1QgdXBk YXRlcworCistLSBUaGlzIHVwZGF0ZSBjaGFuZ2VzIGJvdGggJ2EnIGFuZCAnYicgdG8gbmV3IHZh bHVlcyB0aGF0IHJlcXVpcmUgaW5kZXggdXBkYXRlcywKKy0tIHRoaXMgY2Fubm90IHVzZSB0aGUg SE9UIHBhdGguCitVUERBVEUgZXggU0VUIGRvY3MgPSBqc29uYl9idWlsZF9vYmplY3QoJ2EnLCAy LCAnYicsIDEyKSBXSEVSRSAoZG9jcy0+PidiJyk6Om51bWVyaWMgPSAxMDsKK1NFTEVDVCBwZ19z dGF0X2dldF94YWN0X3R1cGxlc19ob3RfdXBkYXRlZCgnZXgnOjpyZWdjbGFzcyk7IC0tIGV4cGVj dDogMSBubyBuZXcgSE9UIHVwZGF0ZXMKKy0tIExldCdzIGNoZWNrIHRvIG1ha2Ugc3VyZSB0aGF0 IHRoZSBpbmRleCBjb250YWlucyB0aGUgbmV3IHZhbHVlIG9mICdiJworRVhQTEFJTiAoQ09TVFMg T0ZGKSBTRUxFQ1QgKiBGUk9NIGV4IFdIRVJFIChkb2NzLT4+J2InKTo6bnVtZXJpYyA+IDkgQU5E IChkb2NzLT4+J2InKTo6bnVtZXJpYyA8IDEwMDsKK1NFTEVDVCAqIEZST00gZXggV0hFUkUgKGRv Y3MtPj4nYicpOjpudW1lcmljID4gOSBBTkQgKGRvY3MtPj4nYicpOjpudW1lcmljIDwgMTAwOwor CistLSBUaGlzIHVwZGF0ZSBjaGFuZ2VzICdiJyB0byBhIHZhbHVlIG91dHNpZGUgaXRzIHByZWRp Y2F0ZSByZXF1aXJpbmcgdGhhdAorLS0gd2UgcmVtb3ZlIGl0IGZyb20gdGhlIGluZGV4LiAgVGhh dCdzIGEgdHJhbnNpdGlvbiB0aGF0IGNhbid0IGJlIGRvbmUKKy0tIGR1cmluZyBhIEhPVCB1cGRh dGUuCitVUERBVEUgZXggU0VUIGRvY3MgPSBqc29uYl9idWlsZF9vYmplY3QoJ2EnLCAyLCAnYics IDEpIFdIRVJFIChkb2NzLT4+J2InKTo6bnVtZXJpYyA9IDEyOworU0VMRUNUIHBnX3N0YXRfZ2V0 X3hhY3RfdHVwbGVzX2hvdF91cGRhdGVkKCdleCc6OnJlZ2NsYXNzKTsgLS0gZXhwZWN0OiAxIG5v IG5ldyBIT1QgdXBkYXRlcworLS0gTGV0J3MgY2hlY2sgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGlu ZGV4IG5vIGxvbmdlciBjb250YWlucyB0aGUgdmFsdWUgb2YgJ2InCitFWFBMQUlOIChDT1NUUyBP RkYpIFNFTEVDVCAqIEZST00gZXggV0hFUkUgKGRvY3MtPj4nYicpOjpudW1lcmljID4gOSBBTkQg KGRvY3MtPj4nYicpOjpudW1lcmljIDwgMTAwOworU0VMRUNUICogRlJPTSBleCBXSEVSRSAoZG9j cy0+PidiJyk6Om51bWVyaWMgPiA5IEFORCAoZG9jcy0+PidiJyk6Om51bWVyaWMgPCAxMDA7CisK Ky0tIERpc2FibGUgZXhwcmVzc2lvbiBjaGVja3MuCitBTFRFUiBUQUJMRSBleCBTRVQgKGV4cHJl c3Npb25fY2hlY2tzID0gZmFsc2UpOworU0VMRUNUIHJlbG9wdGlvbnMgRlJPTSBwZ19jbGFzcyBX SEVSRSByZWxuYW1lID0gJ2V4JzsKKworLS0gVGhpcyB1cGRhdGUgY2hhbmdlcyAnYicgdG8gYSB2 YWx1ZSB3aXRoaW4gaXRzIHByZWRpY2F0ZSBqdXN0IGxpa2UgaXQKKy0tIHByZXZpb3VzIHZhbHVl LCB3aGljaCB3b3VsZCBhbGxvdyBmb3IgYSBIT1QgdXBkYXRlIGJ1dCB3aXRoIGV4cHJlc3Npb24K Ky0tIGNoZWNrcyBkaXNhYmxlZCB3ZSBjYW4ndCBkZXRlcm1pbmUgdGhhdCBzbyB0aGlzIHNob3Vs ZCBub3QgYmUgYSBIT1QgdXBkYXRlLgorVVBEQVRFIGV4IFNFVCBkb2NzID0ganNvbmJfYnVpbGRf b2JqZWN0KCdhJywgMiwgJ2InLCAyKSBXSEVSRSAoZG9jcy0+PidiJyk6Om51bWVyaWMgPSAxOwor U0VMRUNUIHBnX3N0YXRfZ2V0X3hhY3RfdHVwbGVzX2hvdF91cGRhdGVkKCdleCc6OnJlZ2NsYXNz KTsgLS0gZXhwZWN0OiAxIG5vIG5ldyBIT1QgdXBkYXRlcworCisKKy0tIExldCdzIG1ha2Ugc3Vy ZSB3ZSdyZSByZWNvcmRpbmcgSE9UIHVwZGF0ZXMgZm9yIG91ciAnZXgnIHJlbGF0aW9uIHByb3Bl cmx5IGluIHRoZSBzeXN0ZW0KKy0tIHRhYmxlIHBnX3N0YXRfdXNlcl90YWJsZXMuICBOb3RlIHRo YXQgc3RhdGlzdGljcyBhcmUgc3RvcmVkIHdpdGhpbiBhIHRyYW5zYWN0aW9uIGNvbnRleHQKKy0t IGZpcnN0ICh4YWN0KSBhbmQgdGhlbiBsYXRlciBpbnRvIHRoZSBnbG9iYWwgc3RhdGlzdGljcyBm b3IgYSByZWxhdGlvbiwgc28gZmlyc3Qgd2UgbmVlZAorLS0gdG8gZW5zdXJlIHBlbmRpbmcgc3Rh dHMgYXJlIGZsdXNoZWQuCitTRUxFQ1QgcGdfc3RhdF9mb3JjZV9uZXh0X2ZsdXNoKCk7CitTRUxF Q1QgCisgICAgYy5yZWxuYW1lIEFTIHRhYmxlX25hbWUsCisgICAgLS0gVHJhbnNhY3Rpb24gc3Rh dGlzdGljcworICAgIHBnX3N0YXRfZ2V0X3hhY3RfdHVwbGVzX3VwZGF0ZWQoYy5vaWQpIEFTIHhh Y3RfdXBkYXRlcywKKyAgICBwZ19zdGF0X2dldF94YWN0X3R1cGxlc19ob3RfdXBkYXRlZChjLm9p ZCkgQVMgeGFjdF9ob3RfdXBkYXRlcywKKyAgICBST1VORCgoCisgICAgICAgIHBnX3N0YXRfZ2V0 X3hhY3RfdHVwbGVzX2hvdF91cGRhdGVkKGMub2lkKTo6ZmxvYXQgLyAKKyAgICAgICAgTlVMTElG KHBnX3N0YXRfZ2V0X3hhY3RfdHVwbGVzX3VwZGF0ZWQoYy5vaWQpLCAwKSAqIDEwMAorICAgICk6 Om51bWVyaWMsIDIpIEFTIHhhY3RfaG90X3VwZGF0ZV9wZXJjZW50YWdlLAorICAgIC0tIEN1bXVs YXRpdmUgc3RhdGlzdGljcworICAgIHMubl90dXBfdXBkIEFTIHRvdGFsX3VwZGF0ZXMsCisgICAg cy5uX3R1cF9ob3RfdXBkIEFTIGhvdF91cGRhdGVzLAorICAgIFJPVU5EKCgKKyAgICAgICAgcy5u X3R1cF9ob3RfdXBkOjpmbG9hdCAvIAorICAgICAgICBOVUxMSUYocy5uX3R1cF91cGQsIDApICog MTAwCisgICAgKTo6bnVtZXJpYywgMikgQVMgdG90YWxfaG90X3VwZGF0ZV9wZXJjZW50YWdlCitG Uk9NIHBnX2NsYXNzIGMKK0xFRlQgSk9JTiBwZ19zdGF0X3VzZXJfdGFibGVzIHMgT04gYy5yZWxu YW1lID0gcy5yZWxuYW1lCitXSEVSRSBjLnJlbG5hbWUgPSAnZXgnIAorQU5EIGMucmVsbmFtZXNw YWNlID0gJ3B1YmxpYyc6OnJlZ25hbWVzcGFjZTsKKy0tIGV4cGVjdDogNSB4YWN0IHVwZGF0ZXMg d2l0aCAxIHhhY3QgaG90IHVwZGF0ZSBhbmQgbm8gY3VtdWxhdGl2ZSB1cGRhdGVzIGFzIHlldAor CitTRVQgU0VTU0lPTiBlbmFibGVfc2Vxc2NhbiA9IE9OOworU0VUIFNFU1NJT04gZW5hYmxlX2Jp dG1hcHNjYW4gPSBPTjsKKworRFJPUCBUQUJMRSBleDsKKworLS0gLS0gLS0gLS0gLS0gLS0gLS0g LS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0K Ky0tIFRoaXMgdGFibGUgaGFzIGEgc2luZ2xlIGNvbHVtbiAnZW1haWwnIGFuZCBhIHVuaXF1ZSBj b25zdHJhaW50IG9uIGl0IHRoYXQKKy0tIHNob3VsZCBwcmVjbHVkZSBIT1QgdXBkYXRlcy4KK0NS RUFURSBUQUJMRSB1c2VycyAoCisgICAgdXNlcl9pZCBzZXJpYWwgcHJpbWFyeSBrZXksCisgICAg bmFtZSBWQVJDSEFSKDI1NSkgTk9UIE5VTEwsCisgICAgZW1haWwgVkFSQ0hBUigyNTUpIE5PVCBO VUxMLAorICAgIEVYQ0xVREUgVVNJTkcgYnRyZWUgKGxvd2VyKGVtYWlsKSBXSVRIID0pCispOwor CistLSBBZGQgc29tZSBkYXRhIHRvIHRoZSB0YWJsZSBhbmQgdGhlbiB1cGRhdGUgaXQgaW4gd2F5 cyB0aGF0IHNob3VsZCBhbmQgc2hvdWxkCistLSBub3QgYmUgSE9UIHVwZGF0ZXMuCitJTlNFUlQg SU5UTyB1c2VycyAobmFtZSwgZW1haWwpIFZBTFVFUworKCd1c2VyMScsICd1c2VyMUBleGFtcGxl LmNvbScpLAorKCd1c2VyMicsICd1c2VyMkBleGFtcGxlLmNvbScpLAorKCd0YWtlbicsICd0YWtl bkBFWEFNUExFLmNvbScpLAorKCd5b3UnLCAneW91QGRvbWFpbi5jb20nKSwKKygndGFrZW4nLCAn dGFrZW5AZG9tYWluLmNvbScpOworCistLSBTaG91bGQgZmFpbCBiZWNhdXNlIG9mIHRoZSB1bmlx dWUgY29uc3RyYWludCBvbiB0aGUgZW1haWwgY29sdW1uLgorVVBEQVRFIHVzZXJzIFNFVCBlbWFp bCA9ICd1c2VyMUBleGFtcGxlLmNvbScgV0hFUkUgZW1haWwgPSAndXNlcjJAZXhhbXBsZS5jb20n OworU0VMRUNUIHBnX3N0YXRfZ2V0X3hhY3RfdHVwbGVzX2hvdF91cGRhdGVkKCd1c2Vycyc6OnJl Z2NsYXNzKTsgLS0gZXhwZWN0OiAwIG5vIG5ldyBIT1QgdXBkYXRlcworCistLSBTaG91bGQgc3Vj Y2VlZCBiZWNhdXNlIHRoZSBlbWFpbCBjb2x1bW4gaXMgbm90IGJlaW5nIHVwZGF0ZWQgYW5kIHNo b3VsZCBnbyBIT1QuCitVUERBVEUgdXNlcnMgU0VUIG5hbWUgPSAnZm9vJyBXSEVSRSBlbWFpbCA9 ICd1c2VyMUBleGFtcGxlLmNvbSc7CitTRUxFQ1QgcGdfc3RhdF9nZXRfeGFjdF90dXBsZXNfaG90 X3VwZGF0ZWQoJ3VzZXJzJzo6cmVnY2xhc3MpOyAtLSBleHBlY3Q6IDEgYSBzaW5nbGUgbmV3IEhP VCB1cGRhdGUKKworLS0gQ3JlYXRlIGEgcGFydGlhbCBpbmRleCBvbiB0aGUgZW1haWwgY29sdW1u LCB1cGRhdGVzIAorQ1JFQVRFIElOREVYIGlkeF91c2Vyc19lbWFpbF9ub19leGFtcGxlIE9OIHVz ZXJzIChsb3dlcihlbWFpbCkpIFdIRVJFIGxvd2VyKGVtYWlsKSBMSUtFICclQGV4YW1wbGUuY29t JSc7CisKKy0tIEFuIHVwZGF0ZSB0aGF0IGNoYW5nZXMgdGhlIGVtYWlsIGNvbHVtbiBidXQgbm90 IHRoZSBpbmRleGVkIHBvcnRpb24gb2YgaXQgYW5kIGZhbGxzIG91dHNpZGUgdGhlIGNvbnN0cmFp bnQuCistLSBTaG91bGRuJ3QgYmUgYSBIT1QgdXBkYXRlIGJlY2F1c2Ugb2YgdGhlIGV4Y2x1c2lv biBjb25zdHJhaW50LgorVVBEQVRFIHVzZXJzIFNFVCBlbWFpbCA9ICd5b3UrMkBkb21haW4uY29t JyBXSEVSRSBuYW1lID0gJ3lvdSc7CitTRUxFQ1QgcGdfc3RhdF9nZXRfeGFjdF90dXBsZXNfaG90 X3VwZGF0ZWQoJ3VzZXJzJzo6cmVnY2xhc3MpOyAtLSBleHBlY3Q6IDEgbm8gbmV3IEhPVCB1cGRh dGVzCisKKy0tIEFuIHVwZGF0ZSB0aGF0IGNoYW5nZXMgdGhlIGVtYWlsIGNvbHVtbiBidXQgbm90 IHRoZSBpbmRleGVkIHBvcnRpb24gb2YgaXQgYW5kIGZhbGxzIHdpdGhpbiB0aGUgY29uc3RyYWlu dC4KKy0tIEFnYWluLCBzaG91bGQgZmFpbCBjb25zdHJhaW50IGFuZCBmYWlsIHRvIGJlIGEgSE9U IHVwZGF0ZS4KK1VQREFURSB1c2VycyBTRVQgZW1haWwgPSAndGFrZW5AZG9tYWluLmNvbScgV0hF UkUgbmFtZSA9ICd5b3UnOworU0VMRUNUIHBnX3N0YXRfZ2V0X3hhY3RfdHVwbGVzX2hvdF91cGRh dGVkKCd1c2Vycyc6OnJlZ2NsYXNzKTsgLS0gZXhwZWN0OiAxIG5vIG5ldyBIT1QgdXBkYXRlcwor CitEUk9QIFRBQkxFIHVzZXJzOworCistLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAt LSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLQorLS0gQW5vdGhlciB0 ZXN0IG9mIGNvbnN0cmFpbnRzIHNwb2lsaW5nIEhPVCB1cGRhdGVzLCB0aGlzIHRpbWUgd2l0aCBh IHJhbmdlLgorQ1JFQVRFIFRBQkxFIGV2ZW50cyAoCisgICAgaWQgc2VyaWFsIHByaW1hcnkga2V5 LAorICAgIG5hbWUgVkFSQ0hBUigyNTUpIE5PVCBOVUxMLAorICAgIGV2ZW50X3RpbWUgdHN0enJh bmdlLAorICAgIGNvbnN0cmFpbnQgbm9fc2NyZWVuaW5nX3RpbWVfb3ZlcmxhcCBleGNsdWRlIHVz aW5nIGdpc3QgKAorICAgICAgICBldmVudF90aW1lIFdJVEggJiYKKyAgICApCispOworCistLSBB ZGQgdHdvIG5vbi1vdmVybGFwcGluZyBldmVudHMuCitJTlNFUlQgSU5UTyBldmVudHMgKGlkLCBl dmVudF90aW1lLCBuYW1lKQorVkFMVUVTCisgICAgKDEsICdbIjIwMjMtMDEtMDEgMTk6MDA6MDAi LCAiMjAyMy0wMS0wMSAyMDo0NTowMCJdJywgJ2V2ZW50MScpLAorICAgICgyLCAnWyIyMDIzLTAx LTAxIDIxOjAwOjAwIiwgIjIwMjMtMDEtMDEgMjE6NDU6MDAiXScsICdldmVudDInKTsKKworLS0g VXBkYXRlIHRoZSBmaXJzdCBldmVudCB0byBvdmVybGFwIHdpdGggdGhlIHNlY29uZCwgc2hvdWxk IGZhaWwgdGhlIGNvbnN0cmFpbnQgYW5kIG5vdCBiZSBIT1QuCitVUERBVEUgZXZlbnRzIFNFVCBl dmVudF90aW1lID0gJ1siMjAyMy0wMS0wMSAyMDowMDowMCIsICIyMDIzLTAxLTAxIDIxOjQ1OjAw Il0nIFdIRVJFIGlkID0gMTsKK1NFTEVDVCBwZ19zdGF0X2dldF94YWN0X3R1cGxlc19ob3RfdXBk YXRlZCgnZXZlbnRzJzo6cmVnY2xhc3MpOyAtLSBleHBlY3Q6IDAgbm8gbmV3IEhPVCB1cGRhdGVz CisKKy0tIFVwZGF0ZSB0aGUgZmlyc3QgZXZlbnQgdG8gbm90IG92ZXJsYXAgd2l0aCB0aGUgc2Vj b25kLCBhZ2FpbiBub3QgSE9UIGR1ZSB0byB0aGUgY29uc3RyYWludC4KK1VQREFURSBldmVudHMg U0VUIGV2ZW50X3RpbWUgPSAnWyIyMDIzLTAxLTAxIDIyOjAwOjAwIiwgIjIwMjMtMDEtMDEgMjI6 NDU6MDAiXScgV0hFUkUgaWQgPSAxOworU0VMRUNUIHBnX3N0YXRfZ2V0X3hhY3RfdHVwbGVzX2hv dF91cGRhdGVkKCdldmVudHMnOjpyZWdjbGFzcyk7IC0tIGV4cGVjdDogMCBubyBuZXcgSE9UIHVw ZGF0ZXMKKworLS0gVXBkYXRlIHRoZSBmaXJzdCBldmVudCB0byBub3Qgb3ZlcmxhcCB3aXRoIHRo ZSBzZWNvbmQsIHRoaXMgdGltZSB3ZSdyZSBIT1QgYmVjYXVzZSB3ZSBkb24ndCBvdmVybGFwIHdp dGggdGhlIGNvbnN0cmFpbnQuCitVUERBVEUgZXZlbnRzIFNFVCBuYW1lID0gJ25ldyBuYW1lIGhl cmUnIFdIRVJFIGlkID0gMTsKK1NFTEVDVCBwZ19zdGF0X2dldF94YWN0X3R1cGxlc19ob3RfdXBk YXRlZCgnZXZlbnRzJzo6cmVnY2xhc3MpOyAtLSBleHBlY3Q6IDEgb25lIG5ldyBIT1QgdXBkYXRl CisKK0RST1AgVEFCTEUgZXZlbnRzOworCistLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAt LSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLQorLS0gQSB0ZXN0 IHRvIGVuc3VyZSB0aGF0IHN1bW1hcml6aW5nIGluZGV4ZXMgYXJlIG5vdCB1cGRhdGVkIHdoZW4g dGhleSBkb24ndAorLS0gY2hhbmdlLCBidXQgYXJlIHVwZGF0ZWQgd2hlbiB0aGV5IGRvIHdoaWxl IG5vdCBwcmVmZW50IEhPVCB1cGRhdGVzLgorQ1JFQVRFIFRBQkxFIGV4IChhdHQxIEpTT05CLCBh dHQyIHRleHQpIFdJVEggKGZpbGxmYWN0b3IgPSA2MCk7CitDUkVBVEUgSU5ERVggZXhwcmVzc2lv biBPTiBleCBVU0lORyBidHJlZSgoYXR0MS0+J2RhdGEnKSk7CitDUkVBVEUgSU5ERVggc3VtbWFy aXppbmcgT04gZXggVVNJTkcgQlJJTihhdHQyKTsKK0lOU0VSVCBJTlRPIGV4IFZBTFVFUyAoJ3si ZGF0YSI6IFtdfScsICdub3RoaW5nIHNwZWNpYWwnKTsKKworLS0gVXBkYXRlIHRoZSB1bmluZGV4 ZWQgdmFsdWUgb2YgYXR0MSwgdGhpcyBzaG91bGQgYmUgYSBIT1QgdXBkYXRlIGFuZCBub3QKKy0t IHVwZGF0ZSB0aGUgc3VtbWFyaXppbmcgaW5kZXguCitVUERBVEUgZXggU0VUIGF0dDEgPSBhdHQx IHx8ICd7InN0YXR1cyI6ICJjaGVja21hdGUifSc7CitTRUxFQ1QgcGdfc3RhdF9nZXRfeGFjdF90 dXBsZXNfaG90X3VwZGF0ZWQoJ2V4Jzo6cmVnY2xhc3MpOyAtLSBleHBlY3Q6IDEgb25lIG5ldyBI T1QgdXBkYXRlCisKKy0tIFVwZGF0ZSB0aGUgaW5kZXhlZCB2YWx1ZSBvZiBhdHQyLCBhIHN1bW1h cml6ZWQgdmFsdWUsIHRoaXMgaXMgYSBzdW1tYXJpemVkCistLSBvbmx5IHVwZGF0ZSBhbmQgc2hv dWxkIHVzZSB0aGUgSE9UIHBhdGggd2hpbGUgc3RpbGwgdHJpZ2dlcmluZyBhbiB1cGRhdGUgdG8K Ky0tIHRoZSBzdW1tYXJpemluZyBCUklOIGluZGV4LgorVVBEQVRFIGV4IFNFVCBhdHQyID0gJ3Nw ZWNpYWwgaW5kZWVkJzsKK1NFTEVDVCBwZ19zdGF0X2dldF94YWN0X3R1cGxlc19ob3RfdXBkYXRl ZCgnZXgnOjpyZWdjbGFzcyk7IC0tIGV4cGVjdDogMiBvbmUgbmV3IEhPVCB1cGRhdGUKKworLS0g VXBkYXRlIHRvIGF0dDEgZG9lc24ndCBjaGFuZ2UgdGhlIGluZGV4ZWQgdmFsdWUgd2hpbGUgdGhl IHVwZGF0ZSB0byBhdHQyIGRvZXMsCistLSB0aGlzIGFnYWluIGlzIGEgc3VtbWFyaXplZCBvbmx5 IHVwZGF0ZSBhbmQgc2hvdWxkIHVzZSB0aGUgSE9UIHBhdGggYXMgd2VsbCBhcworLS0gdHJpZ2dl ciBhbiB1cGRhdGUgdG8gdGhlIEJSSU4gaW5kZXguCitVUERBVEUgZXggU0VUIGF0dDEgPSBhdHQx IHx8ICd7InN0YXR1cyI6ICJjaGVja21hdGUhIn0nLCBhdHQyID0gJ3NwZWNpYWwsIHNvIHNwZWNp YWwnOworU0VMRUNUIHBnX3N0YXRfZ2V0X3hhY3RfdHVwbGVzX2hvdF91cGRhdGVkKCdleCc6OnJl Z2NsYXNzKTsgLS0gZXhwZWN0OiAzIG9uZSBuZXcgSE9UIHVwZGF0ZQorCistLSBUaGlzIHVwZGF0 ZXMgYm90aCBpbmRleGVzLCB0aGUgZXhwcmVzc2lvbiBpbmRleCBvbiBhdHQxIGFuZCB0aGUgc3Vt bWFyaXppbmcKKy0tIGluZGV4IG9uIGF0dDIuICBUaGlzIHNob3VsZCBub3QgYmUgYSBIT1QgdXBk YXRlIGJlY2F1c2UgdGhlcmUgYXJlIG1vZGlmaWVkCistLSBpbmRleGVzIGFuZCBvbmx5IHNvbWUg YXJlIHN1bW1hcml6ZWQsIG5vdCBhbGwuICBUaGlzIHNob3VsZCBmb3JjZSBhbGwKKy0tIGluZGV4 ZXMgdG8gYmUgdXBkYXRlZC4KK1VQREFURSBleCBTRVQgYXR0MSA9IGF0dDEgfHwgJ3siZGF0YSI6 IFsxLDIsM119JywgYXR0MiA9ICdkbyB5b3Ugd2FudCB0byBwbGF5IGEgZ2FtZT8nOworU0VMRUNU IHBnX3N0YXRfZ2V0X3hhY3RfdHVwbGVzX2hvdF91cGRhdGVkKCdleCc6OnJlZ2NsYXNzKTsgLS0g ZXhwZWN0OiAzIGJvdGggaW5kZXhlcyB1cGRhdGVkCisKK0RST1AgVEFCTEUgZXg7CisKKy0tIC0t IC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0t IC0tIC0tIC0tIC0tIC0tCistLSBUaGlzIHRlc3QgaXMgZm9yIGEgdGFibGUgd2l0aCBhIGN1c3Rv bSB0eXBlIGFuZCBhIGN1c3RvbSBvcGVyYXRvcnMgb24KKy0tIHRoZSBCVFJFRSBpbmRleC4gIFRo ZSBxdWVzdGlvbiBpcywgd2hlbiBjb21wYXJpbmcgdmFsdWVzIGZvciBlcXVhbGl0eQorLS0gdG8g ZGV0ZXJtaW5lIGlmIHRoZXJlIGFyZSBjaGFuZ2VzIG9uIHRoZSBpbmRleCBvciBub3QuLi4gc2hv dWxkbid0IHdlCistLSBiZSB1c2luZyB0aGUgY3VzdG9tIG9wZXJhdG9ycz8KKworLS0gQ3JlYXRl IGEgdHlwZQorQ1JFQVRFIFRZUEUgbXlfY3VzdG9tX3R5cGUgQVMgKHZhbCBpbnQpOworCistLSBD b21wYXJpc29uIGZ1bmN0aW9ucyAocmV0dXJucyBib29sZWFuKQorQ1JFQVRFIEZVTkNUSU9OIG15 X2N1c3RvbV9sdChhIG15X2N1c3RvbV90eXBlLCBiIG15X2N1c3RvbV90eXBlKSBSRVRVUk5TIGJv b2xlYW4gQVMgJCQKK0JFR0lOCisgICAgUkVUVVJOIGEudmFsIDwgYi52YWw7CitFTkQ7CiskJCBM QU5HVUFHRSBwbHBnc3FsIElNTVVUQUJMRSBTVFJJQ1Q7CisKK0NSRUFURSBGVU5DVElPTiBteV9j dXN0b21fbGUoYSBteV9jdXN0b21fdHlwZSwgYiBteV9jdXN0b21fdHlwZSkgUkVUVVJOUyBib29s ZWFuIEFTICQkCitCRUdJTgorICAgIFJFVFVSTiBhLnZhbCA8PSBiLnZhbDsKK0VORDsKKyQkIExB TkdVQUdFIHBscGdzcWwgSU1NVVRBQkxFIFNUUklDVDsKKworQ1JFQVRFIEZVTkNUSU9OIG15X2N1 c3RvbV9lcShhIG15X2N1c3RvbV90eXBlLCBiIG15X2N1c3RvbV90eXBlKSBSRVRVUk5TIGJvb2xl YW4gQVMgJCQKK0JFR0lOCisgICAgUkVUVVJOIGEudmFsID0gYi52YWw7CitFTkQ7CiskJCBMQU5H VUFHRSBwbHBnc3FsIElNTVVUQUJMRSBTVFJJQ1Q7CisKK0NSRUFURSBGVU5DVElPTiBteV9jdXN0 b21fZ2UoYSBteV9jdXN0b21fdHlwZSwgYiBteV9jdXN0b21fdHlwZSkgUkVUVVJOUyBib29sZWFu IEFTICQkCitCRUdJTgorICAgIFJFVFVSTiBhLnZhbCA+PSBiLnZhbDsKK0VORDsKKyQkIExBTkdV QUdFIHBscGdzcWwgSU1NVVRBQkxFIFNUUklDVDsKKworQ1JFQVRFIEZVTkNUSU9OIG15X2N1c3Rv bV9ndChhIG15X2N1c3RvbV90eXBlLCBiIG15X2N1c3RvbV90eXBlKSBSRVRVUk5TIGJvb2xlYW4g QVMgJCQKK0JFR0lOCisgICAgUkVUVVJOIGEudmFsID4gYi52YWw7CitFTkQ7CiskJCBMQU5HVUFH RSBwbHBnc3FsIElNTVVUQUJMRSBTVFJJQ1Q7CisKK0NSRUFURSBGVU5DVElPTiBteV9jdXN0b21f bmUoYSBteV9jdXN0b21fdHlwZSwgYiBteV9jdXN0b21fdHlwZSkgUkVUVVJOUyBib29sZWFuIEFT ICQkCitCRUdJTgorICAgIFJFVFVSTiBhLnZhbCAhPSBiLnZhbDsKK0VORDsKKyQkIExBTkdVQUdF IHBscGdzcWwgSU1NVVRBQkxFIFNUUklDVDsKKworLS0gQ29tcGFyaXNvbiBmdW5jdGlvbiAocmV0 dXJucyAtMSwgMCwgMSkKK0NSRUFURSBGVU5DVElPTiBteV9jdXN0b21fY21wKGEgbXlfY3VzdG9t X3R5cGUsIGIgbXlfY3VzdG9tX3R5cGUpIFJFVFVSTlMgaW50IEFTICQkCitCRUdJTgorICAgIElG IGEudmFsIDwgYi52YWwgVEhFTgorICAgICAgICBSRVRVUk4gLTE7CisgICAgRUxTSUYgYS52YWwg PiBiLnZhbCBUSEVOCisgICAgICAgIFJFVFVSTiAxOworICAgIEVMU0UKKyAgICAgICAgUkVUVVJO IDA7CisgICAgRU5EIElGOworRU5EOworJCQgTEFOR1VBR0UgcGxwZ3NxbCBJTU1VVEFCTEUgU1RS SUNUOworCistLSBDcmVhdGUgdGhlIG9wZXJhdG9ycworQ1JFQVRFIE9QRVJBVE9SIDwgKAorICAg IExFRlRBUkcgPSBteV9jdXN0b21fdHlwZSwKKyAgICBSSUdIVEFSRyA9IG15X2N1c3RvbV90eXBl LAorICAgIFBST0NFRFVSRSA9IG15X2N1c3RvbV9sdCwKKyAgICBDT01NVVRBVE9SID0gPiwKKyAg ICBORUdBVE9SID0gPj0KKyk7CisKK0NSRUFURSBPUEVSQVRPUiA8PSAoCisgICAgTEVGVEFSRyA9 IG15X2N1c3RvbV90eXBlLAorICAgIFJJR0hUQVJHID0gbXlfY3VzdG9tX3R5cGUsCisgICAgUFJP Q0VEVVJFID0gbXlfY3VzdG9tX2xlLAorICAgIENPTU1VVEFUT1IgPSA+PSwKKyAgICBORUdBVE9S ID0gPgorKTsKKworQ1JFQVRFIE9QRVJBVE9SID0gKAorICAgIExFRlRBUkcgPSBteV9jdXN0b21f dHlwZSwKKyAgICBSSUdIVEFSRyA9IG15X2N1c3RvbV90eXBlLAorICAgIFBST0NFRFVSRSA9IG15 X2N1c3RvbV9lcSwKKyAgICBDT01NVVRBVE9SID0gPSwKKyAgICBORUdBVE9SID0gPD4KKyk7CisK K0NSRUFURSBPUEVSQVRPUiA+PSAoCisgICAgTEVGVEFSRyA9IG15X2N1c3RvbV90eXBlLAorICAg IFJJR0hUQVJHID0gbXlfY3VzdG9tX3R5cGUsCisgICAgUFJPQ0VEVVJFID0gbXlfY3VzdG9tX2dl LAorICAgIENPTU1VVEFUT1IgPSA8PSwKKyAgICBORUdBVE9SID0gPAorKTsKKworQ1JFQVRFIE9Q RVJBVE9SID4gKAorICAgIExFRlRBUkcgPSBteV9jdXN0b21fdHlwZSwKKyAgICBSSUdIVEFSRyA9 IG15X2N1c3RvbV90eXBlLAorICAgIFBST0NFRFVSRSA9IG15X2N1c3RvbV9ndCwKKyAgICBDT01N VVRBVE9SID0gPCwKKyAgICBORUdBVE9SID0gPD0KKyk7CisKK0NSRUFURSBPUEVSQVRPUiA8PiAo CisgICAgTEVGVEFSRyA9IG15X2N1c3RvbV90eXBlLAorICAgIFJJR0hUQVJHID0gbXlfY3VzdG9t X3R5cGUsCisgICAgUFJPQ0VEVVJFID0gbXlfY3VzdG9tX25lLAorICAgIENPTU1VVEFUT1IgPSA8 PiwKKyAgICBORUdBVE9SID0gPQorKTsKKworLS0gQ3JlYXRlIHRoZSBvcGVyYXRvciBjbGFzcyAo aW5jbHVkaW5nIHRoZSBzdXBwb3J0IGZ1bmN0aW9uKQorQ1JFQVRFIE9QRVJBVE9SIENMQVNTIG15 X2N1c3RvbV9vcHMKKyAgICBERUZBVUxUIEZPUiBUWVBFIG15X2N1c3RvbV90eXBlIFVTSU5HIGJ0 cmVlIEFTCisgICAgT1BFUkFUT1IgMSA8LAorICAgIE9QRVJBVE9SIDIgPD0sCisgICAgT1BFUkFU T1IgMyA9LAorICAgIE9QRVJBVE9SIDQgPj0sCisgICAgT1BFUkFUT1IgNSA+LAorICAgIEZVTkNU SU9OIDEgbXlfY3VzdG9tX2NtcChteV9jdXN0b21fdHlwZSwgbXlfY3VzdG9tX3R5cGUpOworCist LSBDcmVhdGUgdGhlIHRhYmxlCitDUkVBVEUgVEFCTEUgbXlfdGFibGUgKAorICAgIGlkIGludCwK KyAgICBjdXN0b21fdmFsIG15X2N1c3RvbV90eXBlCispOworCistLSBJbnNlcnQgc29tZSBkYXRh CitJTlNFUlQgSU5UTyBteV90YWJsZSAoaWQsIGN1c3RvbV92YWwpIFZBTFVFUworKDEsIFJPVygz KTo6bXlfY3VzdG9tX3R5cGUpLAorKDIsIFJPVygxKTo6bXlfY3VzdG9tX3R5cGUpLAorKDMsIFJP Vyg0KTo6bXlfY3VzdG9tX3R5cGUpLAorKDQsIFJPVygyKTo6bXlfY3VzdG9tX3R5cGUpOworCist LSBDcmVhdGUgYSBmdW5jdGlvbiB0byB1c2Ugd2hlbiBpbmRleGluZworQ1JFQVRFIE9SIFJFUExB Q0UgRlVOQ1RJT04gYWJzX3ZhbCh2YWwgbXlfY3VzdG9tX3R5cGUpIFJFVFVSTlMgaW50IEFTICQk CitCRUdJTgorICBSRVRVUk4gYWJzKHZhbC52YWwpOworRU5EOworJCQgTEFOR1VBR0UgcGxwZ3Nx bCBJTU1VVEFCTEUgU1RSSUNUOworCistLSBDcmVhdGUgdGhlIGluZGV4CitDUkVBVEUgSU5ERVgg aWR4X2N1c3RvbV92YWxfYWJzIE9OIG15X3RhYmxlIChhYnNfdmFsKGN1c3RvbV92YWwpKTsKKwor LS0gVXBkYXRlIDEKK1VQREFURSBteV90YWJsZSBTRVQgY3VzdG9tX3ZhbCA9IFJPVyg1KTo6bXlf Y3VzdG9tX3R5cGUgV0hFUkUgaWQgPSAxOworU0VMRUNUIHBnX3N0YXRfZ2V0X3hhY3RfdHVwbGVz X2hvdF91cGRhdGVkKCdteV90YWJsZSc6OnJlZ2NsYXNzKTsKKworLS0gVXBkYXRlIDIKK1VQREFU RSBteV90YWJsZSBTRVQgY3VzdG9tX3ZhbCA9IFJPVygwKTo6bXlfY3VzdG9tX3R5cGUgV0hFUkUg Y3VzdG9tX3ZhbCA8IFJPVygzKTo6bXlfY3VzdG9tX3R5cGU7CitTRUxFQ1QgcGdfc3RhdF9nZXRf eGFjdF90dXBsZXNfaG90X3VwZGF0ZWQoJ215X3RhYmxlJzo6cmVnY2xhc3MpOworCistLSBVcGRh dGUgMworVVBEQVRFIG15X3RhYmxlIFNFVCBjdXN0b21fdmFsID0gUk9XKDYpOjpteV9jdXN0b21f dHlwZSBXSEVSRSBpZCA9IDM7CitTRUxFQ1QgcGdfc3RhdF9nZXRfeGFjdF90dXBsZXNfaG90X3Vw ZGF0ZWQoJ215X3RhYmxlJzo6cmVnY2xhc3MpOworCistLSBVcGRhdGUgNAorVVBEQVRFIG15X3Rh YmxlIFNFVCBpZCA9IDUgV0hFUkUgaWQgPSAxOworU0VMRUNUIHBnX3N0YXRfZ2V0X3hhY3RfdHVw bGVzX2hvdF91cGRhdGVkKCdteV90YWJsZSc6OnJlZ2NsYXNzKTsKKworLS0gUXVlcnkgdXNpbmcg dGhlIGluZGV4CitFWFBMQUlOIChDT1NUUyBPRkYpIFNFTEVDVCAqIEZST00gbXlfdGFibGUgV0hF UkUgYWJzX3ZhbChjdXN0b21fdmFsKSA9IDY7CitTRUxFQ1QgKiBGUk9NIG15X3RhYmxlIFdIRVJF IGFic192YWwoY3VzdG9tX3ZhbCkgPSA2OworCistLSBDbGVhbiB1cAorRFJPUCBUQUJMRSBteV90 YWJsZSBDQVNDQURFOworRFJPUCBPUEVSQVRPUiBDTEFTUyBteV9jdXN0b21fb3BzIFVTSU5HIGJ0 cmVlIENBU0NBREU7CitEUk9QIE9QRVJBVE9SIDwgKG15X2N1c3RvbV90eXBlLCBteV9jdXN0b21f dHlwZSk7CitEUk9QIE9QRVJBVE9SIDw9IChteV9jdXN0b21fdHlwZSwgbXlfY3VzdG9tX3R5cGUp OworRFJPUCBPUEVSQVRPUiA9IChteV9jdXN0b21fdHlwZSwgbXlfY3VzdG9tX3R5cGUpOworRFJP UCBPUEVSQVRPUiA+PSAobXlfY3VzdG9tX3R5cGUsIG15X2N1c3RvbV90eXBlKTsKK0RST1AgT1BF UkFUT1IgPiAobXlfY3VzdG9tX3R5cGUsIG15X2N1c3RvbV90eXBlKTsKK0RST1AgT1BFUkFUT1Ig PD4gKG15X2N1c3RvbV90eXBlLCBteV9jdXN0b21fdHlwZSk7CitEUk9QIEZVTkNUSU9OIG15X2N1 c3RvbV9sdChteV9jdXN0b21fdHlwZSwgbXlfY3VzdG9tX3R5cGUpOworRFJPUCBGVU5DVElPTiBt eV9jdXN0b21fbGUobXlfY3VzdG9tX3R5cGUsIG15X2N1c3RvbV90eXBlKTsKK0RST1AgRlVOQ1RJ T04gbXlfY3VzdG9tX2VxKG15X2N1c3RvbV90eXBlLCBteV9jdXN0b21fdHlwZSk7CitEUk9QIEZV TkNUSU9OIG15X2N1c3RvbV9nZShteV9jdXN0b21fdHlwZSwgbXlfY3VzdG9tX3R5cGUpOworRFJP UCBGVU5DVElPTiBteV9jdXN0b21fZ3QobXlfY3VzdG9tX3R5cGUsIG15X2N1c3RvbV90eXBlKTsK K0RST1AgRlVOQ1RJT04gbXlfY3VzdG9tX25lKG15X2N1c3RvbV90eXBlLCBteV9jdXN0b21fdHlw ZSk7CitEUk9QIEZVTkNUSU9OIG15X2N1c3RvbV9jbXAobXlfY3VzdG9tX3R5cGUsIG15X2N1c3Rv bV90eXBlKTsKK0RST1AgRlVOQ1RJT04gYWJzX3ZhbChteV9jdXN0b21fdHlwZSk7CitEUk9QIFRZ UEUgbXlfY3VzdG9tX3R5cGUgQ0FTQ0FERTsKLS0gCjIuNDIuMAoK --_004_D50C3248FF764E6CB891B6E147F56A44amazoncom_--