Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1mxG2e-00063v-Sb for pgsql-hackers@arkaria.postgresql.org; Tue, 14 Dec 2021 22:13:01 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1mxG2d-0000dS-Q6 for pgsql-hackers@arkaria.postgresql.org; Tue, 14 Dec 2021 22:12:59 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1mxG2c-0000dJ-LS for pgsql-hackers@lists.postgresql.org; Tue, 14 Dec 2021 22:12:59 +0000 Received: from out1-smtp.messagingengine.com ([66.111.4.25]) by magus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1mxG2U-0006Yz-7o for pgsql-hackers@postgresql.org; Tue, 14 Dec 2021 22:12:58 +0000 Received: from compute6.internal (compute6.nyi.internal [10.202.2.46]) by mailout.nyi.internal (Postfix) with ESMTP id BB4FD5C0540 for ; Tue, 14 Dec 2021 17:12:47 -0500 (EST) Received: from mailfrontend2 ([10.202.2.163]) by compute6.internal (MEProxy); Tue, 14 Dec 2021 17:12:47 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to:x-me-proxy :x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s=fm1; bh=OotTyq s8Wb5CleYBDMA7kXGlvJkkckv6P6Gh5D1P2lw=; b=X/uM3jLFXjd1CaUCyZSS1F G8p4XW2oU4wc0MVh6LeIJyGh3xxTL8IWPWii14tlp/o9YasGIBNo8GIwKf37Ocjq nRFF1t+wyugmFK+EKaBeKN5LfqEaBHMNAKxb7BJEWU0URDaR4SPZ5GpNQP5DapW2 uxGRFfKpDDU9muj94R9qqF+BB2gvO1s8x1iYR1+OuVqnr3K5pgqurJ45/UErInYJ RVXj4T4b2MxbBtstuswgorr6Iz9XmqmMcwxfgqoUkiJz3cp6/LOqJD1ekTaecKLy KTVVE41CuxQHw463inxA9DEiUaG3m595JjoqG38a2L5FKsi4Iz1LmKHtOZ0dKAOQ == X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvuddrledtgdduheelucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucenucfjughrpegtkfffgggfuffhvfhfjgesmhdtre ertdefjeenucfhrhhomheprfgvthgvrhcugfhishgvnhhtrhgruhhtuceophgvthgvrhdr vghishgvnhhtrhgruhhtsegvnhhtvghrphhrihhsvggusgdrtghomheqnecuggftrfgrth htvghrnhepkeetteefheevhfdvledtfeegleeutdekkeekveeifeeuffevjeeujeehffej ieejnecuvehluhhsthgvrhfuihiivgeptdenucfrrghrrghmpehmrghilhhfrhhomhepph gvthgvrhdrvghishgvnhhtrhgruhhtsegvnhhtvghrphhrihhsvggusgdrtghomh X-ME-Proxy: Received: by mail.messagingengine.com (Postfix) with ESMTPA for ; Tue, 14 Dec 2021 17:12:45 -0500 (EST) Content-Type: multipart/mixed; boundary="------------CL5u0SH3Lh4Iv98lK0d6LGv4" Message-ID: <18dbc929-a281-8552-4f1d-7e4d0e4eedba@enterprisedb.com> Date: Tue, 14 Dec 2021 23:12:44 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:91.0) Gecko/20100101 Thunderbird/91.3.2 Subject: Re: Synchronizing slots from primary to standby Content-Language: en-US From: Peter Eisentraut To: pgsql-hackers References: <514f6f2f-6833-4539-39f1-96cd1e011f23@enterprisedb.com> In-Reply-To: <514f6f2f-6833-4539-39f1-96cd1e011f23@enterprisedb.com> List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------CL5u0SH3Lh4Iv98lK0d6LGv4 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit On 31.10.21 11:08, Peter Eisentraut wrote: > I want to reactivate $subject.  I took Petr Jelinek's patch from [0], > rebased it, added a bit of testing.  It basically works, but as > mentioned in [0], there are various issues to work out. > > The idea is that the standby runs a background worker to periodically > fetch replication slot information from the primary.  On failover, a > logical subscriber would then ideally find up-to-date replication slots > on the new publisher and can just continue normally. > So, again, this isn't anywhere near ready, but there is already a lot > here to gather feedback about how it works, how it should work, how to > configure it, and how it fits into an overall replication and HA > architecture. Here is an updated patch. The main changes are that I added two configuration parameters. The first, synchronize_slot_names, is set on the physical standby to specify which slots to sync from the primary. By default, it is empty. (This also fixes the recovery test failures that I had to disable in the previous patch version.) The second, standby_slot_names, is set on the primary. It holds back logical replication until the listed physical standbys have caught up. That way, when failover is necessary, the promoted standby is not behind the logical replication consumers. In principle, this works now, I think. I haven't made much progress in creating more test cases for this; that's something that needs more attention. It's worth pondering what the configuration language for standby_slot_names should be. Right now, it's just a list of slots that all need to be caught up. More complicated setups are conceivable. Maybe you have standbys S1 and S2 that are potential failover targets for logical replication consumers L1 and L2, and also standbys S3 and S4 that are potential failover targets for logical replication consumers L3 and L4. Viewed like that, this setting could be a replication slot setting. The setting might also have some relationship with synchronous_standby_names. Like, if you have synchronous_standby_names set, then that's a pretty good indication that you also want some or all of those standbys in standby_slot_names. (But note that one is slots and one is application names.) So there are a variety of possibilities. --------------CL5u0SH3Lh4Iv98lK0d6LGv4 Content-Type: text/plain; charset=UTF-8; name="v2-0001-Synchronize-logical-replication-slots-from-primar.patch" Content-Disposition: attachment; filename*0="v2-0001-Synchronize-logical-replication-slots-from-primar.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSBmMWQzMDZiZmUzZWI2NTdiNWQxNGIwZWYzMDI0NTg2MDgzYmViNGVkIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBFaXNlbnRyYXV0IDxwZXRlckBlaXNlbnRy YXV0Lm9yZz4KRGF0ZTogVHVlLCAxNCBEZWMgMjAyMSAyMjoyMDo1OSArMDEwMApTdWJqZWN0 OiBbUEFUQ0ggdjJdIFN5bmNocm9uaXplIGxvZ2ljYWwgcmVwbGljYXRpb24gc2xvdHMgZnJv bSBwcmltYXJ5IHRvCiBzdGFuZGJ5CgpEaXNjdXNzaW9uOiBodHRwczovL3d3dy5wb3N0Z3Jl c3FsLm9yZy9tZXNzYWdlLWlkL2ZsYXQvNTE0ZjZmMmYtNjgzMy00NTM5LTM5ZjEtOTZjZDFl MDExZjIzJTQwZW50ZXJwcmlzZWRiLmNvbQotLS0KIGRvYy9zcmMvc2dtbC9jb25maWcuc2dt bCAgICAgICAgICAgICAgICAgICAgICB8ICAzNCArKwogc3JjL2JhY2tlbmQvY29tbWFuZHMv c3Vic2NyaXB0aW9uY21kcy5jICAgICAgIHwgICA0ICstCiBzcmMvYmFja2VuZC9wb3N0bWFz dGVyL2Jnd29ya2VyLmMgICAgICAgICAgICAgfCAgIDMgKwogLi4uL2xpYnBxd2FscmVjZWl2 ZXIvbGlicHF3YWxyZWNlaXZlci5jICAgICAgIHwgIDk2ICsrKysKIHNyYy9iYWNrZW5kL3Jl cGxpY2F0aW9uL2xvZ2ljYWwvTWFrZWZpbGUgICAgICB8ICAgMSArCiBzcmMvYmFja2VuZC9y ZXBsaWNhdGlvbi9sb2dpY2FsL2xhdW5jaGVyLmMgICAgfCAyMDIgKysrKysrLS0tCiAuLi4v cmVwbGljYXRpb24vbG9naWNhbC9yZW9yZGVyYnVmZmVyLmMgICAgICAgfCAgODUgKysrKwog c3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9zbG90c3luYy5jICAgIHwgNDEyICsr KysrKysrKysrKysrKysrKwogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC90YWJs ZXN5bmMuYyAgIHwgIDEzICstCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9yZXBsX2dyYW0u eSAgICAgICAgICAgfCAgMzIgKy0KIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3JlcGxfc2Nh bm5lci5sICAgICAgICB8ICAgMSArCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9zbG90ZnVu Y3MuYyAgICAgICAgICAgfCAgIDIgKy0KIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3dhbHNl bmRlci5jICAgICAgICAgICB8IDE5NiArKysrKysrKy0KIHNyYy9iYWNrZW5kL3V0aWxzL2Fj dGl2aXR5L3dhaXRfZXZlbnQuYyAgICAgICB8ICAgMyArCiBzcmMvYmFja2VuZC91dGlscy9t aXNjL2d1Yy5jICAgICAgICAgICAgICAgICAgfCAgMjMgKwogc3JjL2JhY2tlbmQvdXRpbHMv bWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlIHwgICAyICsKIHNyYy9pbmNsdWRlL2NvbW1h bmRzL3N1YnNjcmlwdGlvbmNtZHMuaCAgICAgICB8ICAgMyArCiBzcmMvaW5jbHVkZS9ub2Rl cy9ub2Rlcy5oICAgICAgICAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL2luY2x1ZGUvbm9k ZXMvcmVwbG5vZGVzLmggICAgICAgICAgICAgICAgIHwgICA5ICsKIHNyYy9pbmNsdWRlL3Jl cGxpY2F0aW9uL2xvZ2ljYWx3b3JrZXIuaCAgICAgICB8ICAgOSArCiBzcmMvaW5jbHVkZS9y ZXBsaWNhdGlvbi9zbG90LmggICAgICAgICAgICAgICAgfCAgIDQgKy0KIHNyYy9pbmNsdWRl L3JlcGxpY2F0aW9uL3dhbHJlY2VpdmVyLmggICAgICAgICB8ICAxNiArCiBzcmMvaW5jbHVk ZS9yZXBsaWNhdGlvbi93b3JrZXJfaW50ZXJuYWwuaCAgICAgfCAgIDggKy0KIHNyYy9pbmNs dWRlL3V0aWxzL3dhaXRfZXZlbnQuaCAgICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvdGVz dC9yZWNvdmVyeS90LzAzMF9zbG90X3N5bmMucGwgICAgICAgICAgfCAgNTggKysrCiAyNSBm aWxlcyBjaGFuZ2VkLCAxMTQ4IGluc2VydGlvbnMoKyksIDcwIGRlbGV0aW9ucygtKQogY3Jl YXRlIG1vZGUgMTAwNjQ0IHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvc2xvdHN5 bmMuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L3JlY292ZXJ5L3QvMDMwX3Nsb3Rf c3luYy5wbAoKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9jb25maWcuc2dtbCBiL2RvYy9z cmMvc2dtbC9jb25maWcuc2dtbAppbmRleCBhZmJiNmMzNWUzLi4yYjJhMjFhMjUxIDEwMDY0 NAotLS0gYS9kb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL2Nv bmZpZy5zZ21sCkBAIC00NDA2LDYgKzQ0MDYsMjMgQEAgPHRpdGxlPlByaW1hcnkgU2VydmVy PC90aXRsZT4KICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgIDwvdmFybGlzdGVudHJ5PgogCisg ICAgIDx2YXJsaXN0ZW50cnkgaWQ9Imd1Yy1zdGFuZGJ5LXNsb3QtbmFtZXMiIHhyZWZsYWJl bD0ic3RhbmRieV9zbG90X25hbWVzIj4KKyAgICAgIDx0ZXJtPjx2YXJuYW1lPnN0YW5kYnlf c2xvdF9uYW1lczwvdmFybmFtZT4gKDx0eXBlPnN0cmluZzwvdHlwZT4pCisgICAgICA8aW5k ZXh0ZXJtPgorICAgICAgIDxwcmltYXJ5Pjx2YXJuYW1lPnN0YW5kYnlfc2xvdF9uYW1lczwv dmFybmFtZT4gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXI8L3ByaW1hcnk+CisgICAgICA8L2lu ZGV4dGVybT4KKyAgICAgIDwvdGVybT4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICA8cGFy YT4KKyAgICAgICAgTGlzdCBvZiBwaHlzaWNhbCByZXBsaWNhdGlvbiBzbG90cyB0aGF0IGxv Z2ljYWwgcmVwbGljYXRpb24gd2FpdHMgZm9yLgorICAgICAgICBJZiBhIGxvZ2ljYWwgcmVw bGljYXRpb24gY29ubmVjdGlvbiBpcyBtZWFudCB0byBzd2l0Y2ggdG8gYSBwaHlzaWNhbAor ICAgICAgICBzdGFuZGJ5IGFmdGVyIHRoZSBzdGFuZGJ5IGlzIHByb21vdGVkLCB0aGUgcGh5 c2ljYWwgcmVwbGljYXRpb24gc2xvdAorICAgICAgICBmb3IgdGhlIHN0YW5kYnkgc2hvdWxk IGJlIGxpc3RlZCBoZXJlLiAgVGhpcyBlbnN1cmVzIHRoYXQgbG9naWNhbAorICAgICAgICBy ZXBsaWNhdGlvbiBpcyBub3QgYWhlYWQgb2YgdGhlIHBoeXNpY2FsIHN0YW5kYnkuCisgICAg ICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICAgPC92YXJsaXN0ZW50cnk+CisK ICAgICAgPC92YXJpYWJsZWxpc3Q+CiAgICAgPC9zZWN0Mj4KIApAQCAtNDc5NCw2ICs0ODEx LDIzIEBAIDx0aXRsZT5TdGFuZGJ5IFNlcnZlcnM8L3RpdGxlPgogICAgICAgPC9saXN0aXRl bT4KICAgICAgPC92YXJsaXN0ZW50cnk+CiAKKyAgICAgPHZhcmxpc3RlbnRyeSBpZD0iZ3Vj LXN5bmNocm9uaXplX3Nsb3RfbmFtZXMiIHhyZWZsYWJlbD0ic3luY2hyb25pemVfc2xvdF9u YW1lcyI+CisgICAgICA8dGVybT48dmFybmFtZT5zeW5jaHJvbml6ZV9zbG90X25hbWVzPC92 YXJuYW1lPiAoPHR5cGU+c3RyaW5nPC90eXBlPikKKyAgICAgIDxpbmRleHRlcm0+CisgICAg ICAgPHByaW1hcnk+PHZhcm5hbWU+c3luY2hyb25pemVfc2xvdF9uYW1lczwvdmFybmFtZT4g Y29uZmlndXJhdGlvbiBwYXJhbWV0ZXI8L3ByaW1hcnk+CisgICAgICA8L2luZGV4dGVybT4K KyAgICAgIDwvdGVybT4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICA8cGFyYT4KKyAgICAg ICAgU3BlY2lmaWVzIGEgbGlzdCBvZiBsb2dpY2FsIHJlcGxpY2F0aW9uIHNsb3RzIHRoYXQg YSBwaHlzaWNhbCBzdGFuZGJ5CisgICAgICAgIHNob3VsZCBzeW5jaHJvbml6ZSBmcm9tIHRo ZSBwcmltYXJ5IHNlcnZlci4gIFRoaXMgaXMgbmVjZXNzYXJ5IHRvIGJlCisgICAgICAgIGFi bGUgdG8gcmV0YXJnZXQgdGhvc2UgbG9naWNhbCByZXBsaWNhdGlvbiBjb25uZWN0aW9ucyB0 byB0aGlzIHN0YW5kYnkKKyAgICAgICAgaWYgaXQgZ2V0cyBwcm9tb3RlZC4gIFNwZWNpZnkg PGxpdGVyYWw+KjwvbGl0ZXJhbD4gdG8gc3luY2hyb25pemUgYWxsCisgICAgICAgIGxvZ2lj YWwgcmVwbGljYXRpb24gc2xvdHMuICBUaGUgZGVmYXVsdCBpcyBlbXB0eS4KKyAgICAgICA8 L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgICA8L3Zhcmxpc3RlbnRyeT4KKwogICAg ICA8L3ZhcmlhYmxlbGlzdD4KICAgICA8L3NlY3QyPgogCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9jb21tYW5kcy9zdWJzY3JpcHRpb25jbWRzLmMgYi9zcmMvYmFja2VuZC9jb21tYW5k cy9zdWJzY3JpcHRpb25jbWRzLmMKaW5kZXggMmI2NTgwODBmZS4uN2NkZWEyMDIwNyAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvc3Vic2NyaXB0aW9uY21kcy5jCisrKyBi L3NyYy9iYWNrZW5kL2NvbW1hbmRzL3N1YnNjcmlwdGlvbmNtZHMuYwpAQCAtNzM3LDcgKzcz Nyw3IEBAIEFsdGVyU3Vic2NyaXB0aW9uX3JlZnJlc2goU3Vic2NyaXB0aW9uICpzdWIsIGJv b2wgY29weV9kYXRhKQogCiAJCQkJUmVtb3ZlU3Vic2NyaXB0aW9uUmVsKHN1Yi0+b2lkLCBy ZWxpZCk7CiAKLQkJCQlsb2dpY2FscmVwX3dvcmtlcl9zdG9wKHN1Yi0+b2lkLCByZWxpZCk7 CisJCQkJbG9naWNhbHJlcF93b3JrZXJfc3RvcChNeURhdGFiYXNlSWQsIHN1Yi0+b2lkLCBy ZWxpZCk7CiAKIAkJCQkvKgogCQkJCSAqIEZvciBSRUFEWSBzdGF0ZSwgd2Ugd291bGQgaGF2 ZSBhbHJlYWR5IGRyb3BwZWQgdGhlCkBAIC0xMjM5LDcgKzEyMzksNyBAQCBEcm9wU3Vic2Ny aXB0aW9uKERyb3BTdWJzY3JpcHRpb25TdG10ICpzdG10LCBib29sIGlzVG9wTGV2ZWwpCiAJ ewogCQlMb2dpY2FsUmVwV29ya2VyICp3ID0gKExvZ2ljYWxSZXBXb3JrZXIgKikgbGZpcnN0 KGxjKTsKIAotCQlsb2dpY2FscmVwX3dvcmtlcl9zdG9wKHctPnN1YmlkLCB3LT5yZWxpZCk7 CisJCWxvZ2ljYWxyZXBfd29ya2VyX3N0b3Aody0+ZGJpZCwgdy0+c3ViaWQsIHctPnJlbGlk KTsKIAl9CiAJbGlzdF9mcmVlKHN1YndvcmtlcnMpOwogCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9wb3N0bWFzdGVyL2Jnd29ya2VyLmMgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2Jn d29ya2VyLmMKaW5kZXggYzA1ZjUwMDYzOS4uODE4YjhhMzVlOSAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvcG9zdG1hc3Rlci9iZ3dvcmtlci5jCisrKyBiL3NyYy9iYWNrZW5kL3Bvc3Rt YXN0ZXIvYmd3b3JrZXIuYwpAQCAtMTI4LDYgKzEyOCw5IEBAIHN0YXRpYyBjb25zdCBzdHJ1 Y3QKIAl9LAogCXsKIAkJIkFwcGx5V29ya2VyTWFpbiIsIEFwcGx5V29ya2VyTWFpbgorCX0s CisJeworCQkiUmVwbFNsb3RTeW5jTWFpbiIsIFJlcGxTbG90U3luY01haW4KIAl9CiB9Owog CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9saWJwcXdhbHJlY2VpdmVy L2xpYnBxd2FscmVjZWl2ZXIuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xpYnBxd2Fs cmVjZWl2ZXIvbGlicHF3YWxyZWNlaXZlci5jCmluZGV4IGMwOGU1OTllZWYuLjU3NDg5YTBk MTEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xpYnBxd2FscmVjZWl2 ZXIvbGlicHF3YWxyZWNlaXZlci5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xp YnBxd2FscmVjZWl2ZXIvbGlicHF3YWxyZWNlaXZlci5jCkBAIC0zMyw2ICszMyw3IEBACiAj aW5jbHVkZSAidXRpbHMvbWVtdXRpbHMuaCIKICNpbmNsdWRlICJ1dGlscy9wZ19sc24uaCIK ICNpbmNsdWRlICJ1dGlscy90dXBsZXN0b3JlLmgiCisjaW5jbHVkZSAidXRpbHMvdmFybGVu YS5oIgogCiBQR19NT0RVTEVfTUFHSUM7CiAKQEAgLTU4LDYgKzU5LDcgQEAgc3RhdGljIHZv aWQgbGlicHFyY3ZfZ2V0X3NlbmRlcmluZm8oV2FsUmVjZWl2ZXJDb25uICpjb25uLAogCQkJ CQkJCQkJY2hhciAqKnNlbmRlcl9ob3N0LCBpbnQgKnNlbmRlcl9wb3J0KTsKIHN0YXRpYyBj aGFyICpsaWJwcXJjdl9pZGVudGlmeV9zeXN0ZW0oV2FsUmVjZWl2ZXJDb25uICpjb25uLAog CQkJCQkJCQkJICBUaW1lTGluZUlEICpwcmltYXJ5X3RsaSk7CitzdGF0aWMgTGlzdCAqbGli cHFyY3ZfbGlzdF9zbG90cyhXYWxSZWNlaXZlckNvbm4gKmNvbm4sIGNvbnN0IGNoYXIgKnNs b3RfbmFtZXMpOwogc3RhdGljIGludAlsaWJwcXJjdl9zZXJ2ZXJfdmVyc2lvbihXYWxSZWNl aXZlckNvbm4gKmNvbm4pOwogc3RhdGljIHZvaWQgbGlicHFyY3ZfcmVhZHRpbWVsaW5laGlz dG9yeWZpbGUoV2FsUmVjZWl2ZXJDb25uICpjb25uLAogCQkJCQkJCQkJCQkgVGltZUxpbmVJ RCB0bGksIGNoYXIgKipmaWxlbmFtZSwKQEAgLTg5LDYgKzkxLDcgQEAgc3RhdGljIFdhbFJl Y2VpdmVyRnVuY3Rpb25zVHlwZSBQUVdhbFJlY2VpdmVyRnVuY3Rpb25zID0gewogCWxpYnBx cmN2X2dldF9jb25uaW5mbywKIAlsaWJwcXJjdl9nZXRfc2VuZGVyaW5mbywKIAlsaWJwcXJj dl9pZGVudGlmeV9zeXN0ZW0sCisJbGlicHFyY3ZfbGlzdF9zbG90cywKIAlsaWJwcXJjdl9z ZXJ2ZXJfdmVyc2lvbiwKIAlsaWJwcXJjdl9yZWFkdGltZWxpbmVoaXN0b3J5ZmlsZSwKIAls aWJwcXJjdl9zdGFydHN0cmVhbWluZywKQEAgLTM5Nyw2ICs0MDAsOTkgQEAgbGlicHFyY3Zf c2VydmVyX3ZlcnNpb24oV2FsUmVjZWl2ZXJDb25uICpjb25uKQogCXJldHVybiBQUXNlcnZl clZlcnNpb24oY29ubi0+c3RyZWFtQ29ubik7CiB9CiAKKy8qCisgKiBHZXQgbGlzdCBvZiBz bG90cyBmcm9tIHByaW1hcnkuCisgKi8KK3N0YXRpYyBMaXN0ICoKK2xpYnBxcmN2X2xpc3Rf c2xvdHMoV2FsUmVjZWl2ZXJDb25uICpjb25uLCBjb25zdCBjaGFyICpzbG90X25hbWVzKQor eworCVBHcmVzdWx0ICAgKnJlczsKKwlMaXN0CSAgICpzbG90bGlzdCA9IE5JTDsKKwlpbnQJ CQludHVwbGVzOworCVN0cmluZ0luZm9EYXRhIHM7CisJV2FsUmVjdlJlcGxpY2F0aW9uU2xv dERhdGEgKnNsb3RfZGF0YTsKKworCWluaXRTdHJpbmdJbmZvKCZzKTsKKwlhcHBlbmRTdHJp bmdJbmZvU3RyaW5nKCZzLCAiTElTVF9TTE9UUyIpOworCisJaWYgKHN0cmNtcChzbG90X25h bWVzLCAiIikgIT0gMCAmJiBzdHJjbXAoc2xvdF9uYW1lcywgIioiKSAhPSAwKQorCXsKKwkJ Y2hhcgkgICAqcmF3bmFtZTsKKwkJTGlzdAkgICAqbmFtZWxpc3Q7CisJCUxpc3RDZWxsICAg KmxjOworCisJCWFwcGVuZFN0cmluZ0luZm9DaGFyKCZzLCAnICcpOworCQlyYXduYW1lID0g cHN0cmR1cChzbG90X25hbWVzKTsKKwkJU3BsaXRJZGVudGlmaWVyU3RyaW5nKHJhd25hbWUs ICcsJywgJm5hbWVsaXN0KTsKKwkJZm9yZWFjaCAobGMsIG5hbWVsaXN0KQorCQl7CisJCQlp ZiAobGMgIT0gbGlzdF9oZWFkKG5hbWVsaXN0KSkKKwkJCQlhcHBlbmRTdHJpbmdJbmZvQ2hh cigmcywgJywnKTsKKwkJCWFwcGVuZFN0cmluZ0luZm8oJnMsICIlcyIsCisJCQkJCQkJIHF1 b3RlX2lkZW50aWZpZXIobGZpcnN0KGxjKSkpOworCQl9CisJfQorCisJcmVzID0gbGlicHFy Y3ZfUFFleGVjKGNvbm4tPnN0cmVhbUNvbm4sIHMuZGF0YSk7CisJcGZyZWUocy5kYXRhKTsK KwlpZiAoUFFyZXN1bHRTdGF0dXMocmVzKSAhPSBQR1JFU19UVVBMRVNfT0spCisJeworCQlQ UWNsZWFyKHJlcyk7CisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycm1zZygiY291bGQgbm90 IHJlY2VpdmUgbGlzdCBvZiBzbG90cyB0aGUgcHJpbWFyeSBzZXJ2ZXI6ICVzIiwKKwkJCQkJ CXBjaG9tcChQUWVycm9yTWVzc2FnZShjb25uLT5zdHJlYW1Db25uKSkpKSk7CisJfQorCWlm IChQUW5maWVsZHMocmVzKSA8IDEwKQorCXsKKwkJaW50CQkJbmZpZWxkcyA9IFBRbmZpZWxk cyhyZXMpOworCisJCVBRY2xlYXIocmVzKTsKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJy bXNnKCJpbnZhbGlkIHJlc3BvbnNlIGZyb20gcHJpbWFyeSBzZXJ2ZXIiKSwKKwkJCQkgZXJy ZGV0YWlsKCJDb3VsZCBub3QgZ2V0IGxpc3Qgb2Ygc2xvdHM6IGdvdCAlZCBmaWVsZHMsIGV4 cGVjdGVkICVkIG9yIG1vcmUgZmllbGRzLiIsCisJCQkJCQkgICBuZmllbGRzLCAxMCkpKTsK Kwl9CisKKwludHVwbGVzID0gUFFudHVwbGVzKHJlcyk7CisJZm9yIChpbnQgaSA9IDA7IGkg PCBudHVwbGVzOyBpKyspCisJeworCQljaGFyCSAgICpzbG90X3R5cGU7CisKKwkJc2xvdF9k YXRhID0gcGFsbG9jMChzaXplb2YoV2FsUmVjdlJlcGxpY2F0aW9uU2xvdERhdGEpKTsKKwkJ bmFtZXN0cmNweSgmc2xvdF9kYXRhLT5uYW1lLCBQUWdldHZhbHVlKHJlcywgaSwgMCkpOwor CQlpZiAoIVBRZ2V0aXNudWxsKHJlcywgaSwgMSkpCisJCQluYW1lc3RyY3B5KCZzbG90X2Rh dGEtPnBsdWdpbiwgUFFnZXR2YWx1ZShyZXMsIGksIDEpKTsKKwkJc2xvdF90eXBlID0gUFFn ZXR2YWx1ZShyZXMsIGksIDIpOworCQlpZiAoIVBRZ2V0aXNudWxsKHJlcywgaSwgMykpCisJ CQlzbG90X2RhdGEtPmRhdGFiYXNlID0gYXRvb2lkKFBRZ2V0dmFsdWUocmVzLCBpLCAzKSk7 CisJCWlmIChzdHJjbXAoc2xvdF90eXBlLCAicGh5c2ljYWwiKSA9PSAwKQorCQl7CisJCQlp ZiAoT2lkSXNWYWxpZChzbG90X2RhdGEtPmRhdGFiYXNlKSkKKwkJCQllbG9nKEVSUk9SLCAi dW5leHBlY3RlZCBwaHlzaWNhbCByZXBsaWNhdGlvbiBzbG90IHdpdGggZGF0YWJhc2Ugc2V0 Iik7CisJCX0KKwkJaWYgKHBnX3N0cnRvaW50MzIoUFFnZXR2YWx1ZShyZXMsIGksIDUpKSA9 PSAxKQorCQkJc2xvdF9kYXRhLT5wZXJzaXN0ZW5jeSA9IFJTX1RFTVBPUkFSWTsKKwkJZWxz ZQorCQkJc2xvdF9kYXRhLT5wZXJzaXN0ZW5jeSA9IFJTX1BFUlNJU1RFTlQ7CisJCWlmICgh UFFnZXRpc251bGwocmVzLCBpLCA2KSkKKwkJCXNsb3RfZGF0YS0+eG1pbiA9IGF0b29pZChQ UWdldHZhbHVlKHJlcywgaSwgNikpOworCQlpZiAoIVBRZ2V0aXNudWxsKHJlcywgaSwgNykp CisJCQlzbG90X2RhdGEtPmNhdGFsb2dfeG1pbiA9IGF0b29pZChQUWdldHZhbHVlKHJlcywg aSwgNykpOworCQlpZiAoIVBRZ2V0aXNudWxsKHJlcywgaSwgOCkpCisJCQlzbG90X2RhdGEt PnJlc3RhcnRfbHNuID0gcGdfc3RydG91aW50NjQoUFFnZXR2YWx1ZShyZXMsIGksIDgpLAor CQkJCQkJCQkJCQkJCU5VTEwsIDEwKTsKKwkJaWYgKCFQUWdldGlzbnVsbChyZXMsIGksIDkp KQorCQkJc2xvdF9kYXRhLT5jb25maXJtZWRfZmx1c2ggPSBwZ19zdHJ0b3VpbnQ2NChQUWdl dHZhbHVlKHJlcywgaSwgOSksCisJCQkJCQkJCQkJCQkJCU5VTEwsIDEwKTsKKworCQlzbG90 bGlzdCA9IGxhcHBlbmQoc2xvdGxpc3QsIHNsb3RfZGF0YSk7CisJfQorCisJUFFjbGVhcihy ZXMpOworCisJcmV0dXJuIHNsb3RsaXN0OworfQorCiAvKgogICogU3RhcnQgc3RyZWFtaW5n IFdBTCBkYXRhIGZyb20gZ2l2ZW4gc3RyZWFtaW5nIG9wdGlvbnMuCiAgKgpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9NYWtlZmlsZSBiL3NyYy9iYWNr ZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvTWFrZWZpbGUKaW5kZXggYzRlMmZkZWI3MS4uYmMz ZjIzYjVhMiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9N YWtlZmlsZQorKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL01ha2VmaWxl CkBAIC0yNCw2ICsyNCw3IEBAIE9CSlMgPSBcCiAJcHJvdG8ubyBcCiAJcmVsYXRpb24ubyBc CiAJcmVvcmRlcmJ1ZmZlci5vIFwKKwlzbG90c3luYy5vIFwKIAlzbmFwYnVpbGQubyBcCiAJ dGFibGVzeW5jLm8gXAogCXdvcmtlci5vCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBs aWNhdGlvbi9sb2dpY2FsL2xhdW5jaGVyLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9s b2dpY2FsL2xhdW5jaGVyLmMKaW5kZXggM2ZiNGNhYTgwMy4uMjA3ZWY5YmM4YiAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9sYXVuY2hlci5jCisrKyBi L3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbGF1bmNoZXIuYwpAQCAtMjIsNiAr MjIsNyBAQAogI2luY2x1ZGUgImFjY2Vzcy9odHVwX2RldGFpbHMuaCIKICNpbmNsdWRlICJh Y2Nlc3MvdGFibGVhbS5oIgogI2luY2x1ZGUgImFjY2Vzcy94YWN0LmgiCisjaW5jbHVkZSAi Y2F0YWxvZy9wZ19hdXRoaWQuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX3N1YnNjcmlwdGlv bi5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfc3Vic2NyaXB0aW9uX3JlbC5oIgogI2luY2x1 ZGUgImZ1bmNhcGkuaCIKQEAgLTIxMiw3ICsyMTMsNyBAQCBXYWl0Rm9yUmVwbGljYXRpb25X b3JrZXJBdHRhY2goTG9naWNhbFJlcFdvcmtlciAqd29ya2VyLAogICogc3Vic2NyaXB0aW9u IGlkIGFuZCByZWxpZC4KICAqLwogTG9naWNhbFJlcFdvcmtlciAqCi1sb2dpY2FscmVwX3dv cmtlcl9maW5kKE9pZCBzdWJpZCwgT2lkIHJlbGlkLCBib29sIG9ubHlfcnVubmluZykKK2xv Z2ljYWxyZXBfd29ya2VyX2ZpbmQoT2lkIGRiaWQsIE9pZCBzdWJpZCwgT2lkIHJlbGlkLCBi b29sIG9ubHlfcnVubmluZykKIHsKIAlpbnQJCQlpOwogCUxvZ2ljYWxSZXBXb3JrZXIgKnJl cyA9IE5VTEw7CkBAIC0yMjQsOCArMjI1LDggQEAgbG9naWNhbHJlcF93b3JrZXJfZmluZChP aWQgc3ViaWQsIE9pZCByZWxpZCwgYm9vbCBvbmx5X3J1bm5pbmcpCiAJewogCQlMb2dpY2Fs UmVwV29ya2VyICp3ID0gJkxvZ2ljYWxSZXBDdHgtPndvcmtlcnNbaV07CiAKLQkJaWYgKHct PmluX3VzZSAmJiB3LT5zdWJpZCA9PSBzdWJpZCAmJiB3LT5yZWxpZCA9PSByZWxpZCAmJgot CQkJKCFvbmx5X3J1bm5pbmcgfHwgdy0+cHJvYykpCisJCWlmICh3LT5pbl91c2UgJiYgdy0+ ZGJpZCA9PSBkYmlkICYmIHctPnN1YmlkID09IHN1YmlkICYmCisJCQl3LT5yZWxpZCA9PSBy ZWxpZCAmJiAoIW9ubHlfcnVubmluZyB8fCB3LT5wcm9jKSkKIAkJewogCQkJcmVzID0gdzsK IAkJCWJyZWFrOwpAQCAtMjc1LDkgKzI3NiwxMyBAQCBsb2dpY2FscmVwX3dvcmtlcl9sYXVu Y2goT2lkIGRiaWQsIE9pZCBzdWJpZCwgY29uc3QgY2hhciAqc3VibmFtZSwgT2lkIHVzZXJp ZCwKIAlpbnQJCQluc3luY3dvcmtlcnM7CiAJVGltZXN0YW1wVHogbm93OwogCi0JZXJlcG9y dChERUJVRzEsCi0JCQkoZXJybXNnX2ludGVybmFsKCJzdGFydGluZyBsb2dpY2FsIHJlcGxp Y2F0aW9uIHdvcmtlciBmb3Igc3Vic2NyaXB0aW9uIFwiJXNcIiIsCi0JCQkJCQkJIHN1Ym5h bWUpKSk7CisJaWYgKE9pZElzVmFsaWQoc3ViaWQpKQorCQllcmVwb3J0KERFQlVHMSwKKwkJ CQkoZXJybXNnX2ludGVybmFsKCJzdGFydGluZyBsb2dpY2FsIHJlcGxpY2F0aW9uIHdvcmtl ciBmb3Igc3Vic2NyaXB0aW9uIFwiJXNcIiIsCisJCQkJCQkJCSBzdWJuYW1lKSkpOworCWVs c2UKKwkJZXJlcG9ydChERUJVRzEsCisJCQkJKGVycm1zZ19pbnRlcm5hbCgic3RhcnRpbmcg cmVwbGljYXRpb24gc2xvdCBzeW5jaHJvbml6YXRpb24gd29ya2VyIikpKTsKIAogCS8qIFJl cG9ydCB0aGlzIGFmdGVyIHRoZSBpbml0aWFsIHN0YXJ0aW5nIG1lc3NhZ2UgZm9yIGNvbnNp c3RlbmN5LiAqLwogCWlmIChtYXhfcmVwbGljYXRpb25fc2xvdHMgPT0gMCkKQEAgLTMxNCw3 ICszMTksOSBAQCBsb2dpY2FscmVwX3dvcmtlcl9sYXVuY2goT2lkIGRiaWQsIE9pZCBzdWJp ZCwgY29uc3QgY2hhciAqc3VibmFtZSwgT2lkIHVzZXJpZCwKIAkgKiByZWFzb24gd2UgZG8g dGhpcyBpcyBiZWNhdXNlIGlmIHNvbWUgd29ya2VyIGZhaWxlZCB0byBzdGFydCB1cCBhbmQg aXRzCiAJICogcGFyZW50IGhhcyBjcmFzaGVkIHdoaWxlIHdhaXRpbmcsIHRoZSBpbl91c2Ug c3RhdGUgd2FzIG5ldmVyIGNsZWFyZWQuCiAJICovCi0JaWYgKHdvcmtlciA9PSBOVUxMIHx8 IG5zeW5jd29ya2VycyA+PSBtYXhfc3luY193b3JrZXJzX3Blcl9zdWJzY3JpcHRpb24pCisJ aWYgKHdvcmtlciA9PSBOVUxMIHx8CisJCShPaWRJc1ZhbGlkKHJlbGlkKSAmJgorCQkgbnN5 bmN3b3JrZXJzID49IG1heF9zeW5jX3dvcmtlcnNfcGVyX3N1YnNjcmlwdGlvbikpCiAJewog CQlib29sCQlkaWRfY2xlYW51cCA9IGZhbHNlOwogCkBAIC0zNDgsNyArMzU1LDcgQEAgbG9n aWNhbHJlcF93b3JrZXJfbGF1bmNoKE9pZCBkYmlkLCBPaWQgc3ViaWQsIGNvbnN0IGNoYXIg KnN1Ym5hbWUsIE9pZCB1c2VyaWQsCiAJICogc2lsZW50bHkgYXMgd2UgbWlnaHQgZ2V0IGhl cmUgYmVjYXVzZSBvZiBhbiBvdGhlcndpc2UgaGFybWxlc3MgcmFjZQogCSAqIGNvbmRpdGlv bi4KIAkgKi8KLQlpZiAobnN5bmN3b3JrZXJzID49IG1heF9zeW5jX3dvcmtlcnNfcGVyX3N1 YnNjcmlwdGlvbikKKwlpZiAoT2lkSXNWYWxpZChyZWxpZCkgJiYgbnN5bmN3b3JrZXJzID49 IG1heF9zeW5jX3dvcmtlcnNfcGVyX3N1YnNjcmlwdGlvbikKIAl7CiAJCUxXTG9ja1JlbGVh c2UoTG9naWNhbFJlcFdvcmtlckxvY2spOwogCQlyZXR1cm47CkBAIC0zOTUsMTUgKzQwMiwy MiBAQCBsb2dpY2FscmVwX3dvcmtlcl9sYXVuY2goT2lkIGRiaWQsIE9pZCBzdWJpZCwgY29u c3QgY2hhciAqc3VibmFtZSwgT2lkIHVzZXJpZCwKIAltZW1zZXQoJmJndywgMCwgc2l6ZW9m KGJndykpOwogCWJndy5iZ3dfZmxhZ3MgPSBCR1dPUktFUl9TSE1FTV9BQ0NFU1MgfAogCQlC R1dPUktFUl9CQUNLRU5EX0RBVEFCQVNFX0NPTk5FQ1RJT047Ci0JYmd3LmJnd19zdGFydF90 aW1lID0gQmdXb3JrZXJTdGFydF9SZWNvdmVyeUZpbmlzaGVkOworCWJndy5iZ3dfc3RhcnRf dGltZSA9IEJnV29ya2VyU3RhcnRfQ29uc2lzdGVudFN0YXRlOwogCXNucHJpbnRmKGJndy5i Z3dfbGlicmFyeV9uYW1lLCBCR1dfTUFYTEVOLCAicG9zdGdyZXMiKTsKLQlzbnByaW50Zihi Z3cuYmd3X2Z1bmN0aW9uX25hbWUsIEJHV19NQVhMRU4sICJBcHBseVdvcmtlck1haW4iKTsK KwlpZiAoT2lkSXNWYWxpZChzdWJpZCkpCisJCXNucHJpbnRmKGJndy5iZ3dfZnVuY3Rpb25f bmFtZSwgQkdXX01BWExFTiwgIkFwcGx5V29ya2VyTWFpbiIpOworCWVsc2UKKwkJc25wcmlu dGYoYmd3LmJnd19mdW5jdGlvbl9uYW1lLCBCR1dfTUFYTEVOLCAiUmVwbFNsb3RTeW5jTWFp biIpOwogCWlmIChPaWRJc1ZhbGlkKHJlbGlkKSkKIAkJc25wcmludGYoYmd3LmJnd19uYW1l LCBCR1dfTUFYTEVOLAogCQkJCSAibG9naWNhbCByZXBsaWNhdGlvbiB3b3JrZXIgZm9yIHN1 YnNjcmlwdGlvbiAldSBzeW5jICV1Iiwgc3ViaWQsIHJlbGlkKTsKLQllbHNlCisJZWxzZSBp ZiAoT2lkSXNWYWxpZChzdWJpZCkpCiAJCXNucHJpbnRmKGJndy5iZ3dfbmFtZSwgQkdXX01B WExFTiwKIAkJCQkgImxvZ2ljYWwgcmVwbGljYXRpb24gd29ya2VyIGZvciBzdWJzY3JpcHRp b24gJXUiLCBzdWJpZCk7CisJZWxzZQorCQlzbnByaW50ZihiZ3cuYmd3X25hbWUsIEJHV19N QVhMRU4sCisJCQkJICJyZXBsaWNhdGlvbiBzbG90IHN5bmNocm9uaXphdGlvbiB3b3JrZXIi KTsKKwogCXNucHJpbnRmKGJndy5iZ3dfdHlwZSwgQkdXX01BWExFTiwgImxvZ2ljYWwgcmVw bGljYXRpb24gd29ya2VyIik7CiAKIAliZ3cuYmd3X3Jlc3RhcnRfdGltZSA9IEJHV19ORVZF Ul9SRVNUQVJUOwpAQCAtNDM0LDE0ICs0NDgsMTQgQEAgbG9naWNhbHJlcF93b3JrZXJfbGF1 bmNoKE9pZCBkYmlkLCBPaWQgc3ViaWQsIGNvbnN0IGNoYXIgKnN1Ym5hbWUsIE9pZCB1c2Vy aWQsCiAgKiBpdCBkZXRhY2hlcyBmcm9tIHRoZSBzbG90LgogICovCiB2b2lkCi1sb2dpY2Fs cmVwX3dvcmtlcl9zdG9wKE9pZCBzdWJpZCwgT2lkIHJlbGlkKQorbG9naWNhbHJlcF93b3Jr ZXJfc3RvcChPaWQgZGJpZCwgT2lkIHN1YmlkLCBPaWQgcmVsaWQpCiB7CiAJTG9naWNhbFJl cFdvcmtlciAqd29ya2VyOwogCXVpbnQxNgkJZ2VuZXJhdGlvbjsKIAogCUxXTG9ja0FjcXVp cmUoTG9naWNhbFJlcFdvcmtlckxvY2ssIExXX1NIQVJFRCk7CiAKLQl3b3JrZXIgPSBsb2dp Y2FscmVwX3dvcmtlcl9maW5kKHN1YmlkLCByZWxpZCwgZmFsc2UpOworCXdvcmtlciA9IGxv Z2ljYWxyZXBfd29ya2VyX2ZpbmQoZGJpZCwgc3ViaWQsIHJlbGlkLCBmYWxzZSk7CiAKIAkv KiBObyB3b3JrZXIsIG5vdGhpbmcgdG8gZG8uICovCiAJaWYgKCF3b3JrZXIpCkBAIC01MzEs MTMgKzU0NSwxMyBAQCBsb2dpY2FscmVwX3dvcmtlcl9zdG9wKE9pZCBzdWJpZCwgT2lkIHJl bGlkKQogICogV2FrZSB1cCAodXNpbmcgbGF0Y2gpIGFueSBsb2dpY2FsIHJlcGxpY2F0aW9u IHdvcmtlciBmb3Igc3BlY2lmaWVkIHN1Yi9yZWwuCiAgKi8KIHZvaWQKLWxvZ2ljYWxyZXBf d29ya2VyX3dha2V1cChPaWQgc3ViaWQsIE9pZCByZWxpZCkKK2xvZ2ljYWxyZXBfd29ya2Vy X3dha2V1cChPaWQgZGJpZCwgT2lkIHN1YmlkLCBPaWQgcmVsaWQpCiB7CiAJTG9naWNhbFJl cFdvcmtlciAqd29ya2VyOwogCiAJTFdMb2NrQWNxdWlyZShMb2dpY2FsUmVwV29ya2VyTG9j aywgTFdfU0hBUkVEKTsKIAotCXdvcmtlciA9IGxvZ2ljYWxyZXBfd29ya2VyX2ZpbmQoc3Vi aWQsIHJlbGlkLCB0cnVlKTsKKwl3b3JrZXIgPSBsb2dpY2FscmVwX3dvcmtlcl9maW5kKGRi aWQsIHN1YmlkLCByZWxpZCwgdHJ1ZSk7CiAKIAlpZiAod29ya2VyKQogCQlsb2dpY2FscmVw X3dvcmtlcl93YWtldXBfcHRyKHdvcmtlcik7CkBAIC03MTQsNyArNzI4LDcgQEAgQXBwbHlM YXVuY2hlclJlZ2lzdGVyKHZvaWQpCiAJbWVtc2V0KCZiZ3csIDAsIHNpemVvZihiZ3cpKTsK IAliZ3cuYmd3X2ZsYWdzID0gQkdXT1JLRVJfU0hNRU1fQUNDRVNTIHwKIAkJQkdXT1JLRVJf QkFDS0VORF9EQVRBQkFTRV9DT05ORUNUSU9OOwotCWJndy5iZ3dfc3RhcnRfdGltZSA9IEJn V29ya2VyU3RhcnRfUmVjb3ZlcnlGaW5pc2hlZDsKKwliZ3cuYmd3X3N0YXJ0X3RpbWUgPSBC Z1dvcmtlclN0YXJ0X0NvbnNpc3RlbnRTdGF0ZTsKIAlzbnByaW50ZihiZ3cuYmd3X2xpYnJh cnlfbmFtZSwgQkdXX01BWExFTiwgInBvc3RncmVzIik7CiAJc25wcmludGYoYmd3LmJnd19m dW5jdGlvbl9uYW1lLCBCR1dfTUFYTEVOLCAiQXBwbHlMYXVuY2hlck1haW4iKTsKIAlzbnBy aW50ZihiZ3cuYmd3X25hbWUsIEJHV19NQVhMRU4sCkBAIC03OTUsNiArODA5LDExNiBAQCBB cHBseUxhdW5jaGVyV2FrZXVwKHZvaWQpCiAJCWtpbGwoTG9naWNhbFJlcEN0eC0+bGF1bmNo ZXJfcGlkLCBTSUdVU1IxKTsKIH0KIAorc3RhdGljIHZvaWQKK0FwcGx5TGF1bmNoZXJTdGFy dFNsb3RTeW5jKFRpbWVzdGFtcFR6ICpsYXN0X3N0YXJ0X3RpbWUsIGxvbmcgKndhaXRfdGlt ZSkKK3sKKwlXYWxSZWNlaXZlckNvbm4gKndyY29ubjsKKwlUaW1lc3RhbXBUeiBub3c7CisJ Y2hhcgkgICAqZXJyOworCUxpc3QJICAgKnNsb3RzOworCUxpc3RDZWxsICAgKmxjOworCU1l bW9yeUNvbnRleHQgdG1wY3R4OworCU1lbW9yeUNvbnRleHQgb2xkY3R4OworCisJaWYgKHN0 cmNtcChzeW5jaHJvbml6ZV9zbG90X25hbWVzLCAiIikgPT0gMCkKKwkJcmV0dXJuOworCisJ d3Jjb25uID0gd2FscmN2X2Nvbm5lY3QoUHJpbWFyeUNvbm5JbmZvLCBmYWxzZSwKKwkJCQkJ CQkiTG9naWNhbCBSZXBsaWNhdGlvbiBMYXVuY2hlciIsICZlcnIpOworCWlmICghd3Jjb25u KQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJtc2coImNvdWxkIG5vdCBjb25uZWN0IHRv IHRoZSBwcmltYXJ5IHNlcnZlcjogJXMiLCBlcnIpKSk7CisKKwkvKiBVc2UgdGVtcG9yYXJ5 IGNvbnRleHQgZm9yIHRoZSBzbG90IGxpc3QgYW5kIHdvcmtlciBpbmZvLiAqLworCXRtcGN0 eCA9IEFsbG9jU2V0Q29udGV4dENyZWF0ZShUb3BNZW1vcnlDb250ZXh0LAorCQkJCQkJCQkg ICAiTG9naWNhbCBSZXBsaWNhdGlvbiBMYXVuY2hlciBzbG90IHN5bmMgY3R4IiwKKwkJCQkJ CQkJICAgQUxMT0NTRVRfREVGQVVMVF9TSVpFUyk7CisJb2xkY3R4ID0gTWVtb3J5Q29udGV4 dFN3aXRjaFRvKHRtcGN0eCk7CisKKwlzbG90cyA9IHdhbHJjdl9saXN0X3Nsb3RzKHdyY29u biwgc3luY2hyb25pemVfc2xvdF9uYW1lcyk7CisKKwlub3cgPSBHZXRDdXJyZW50VGltZXN0 YW1wKCk7CisKKwlmb3JlYWNoKGxjLCBzbG90cykKKwl7CisJCVdhbFJlY3ZSZXBsaWNhdGlv blNsb3REYXRhICpzbG90X2RhdGEgPSBsZmlyc3QobGMpOworCQlMb2dpY2FsUmVwV29ya2Vy ICp3OworCisJCWlmICghT2lkSXNWYWxpZChzbG90X2RhdGEtPmRhdGFiYXNlKSkKKwkJCWNv bnRpbnVlOworCisJCUxXTG9ja0FjcXVpcmUoTG9naWNhbFJlcFdvcmtlckxvY2ssIExXX1NI QVJFRCk7CisJCXcgPSBsb2dpY2FscmVwX3dvcmtlcl9maW5kKHNsb3RfZGF0YS0+ZGF0YWJh c2UsIEludmFsaWRPaWQsCisJCQkJCQkJCSAgIEludmFsaWRPaWQsIGZhbHNlKTsKKwkJTFdM b2NrUmVsZWFzZShMb2dpY2FsUmVwV29ya2VyTG9jayk7CisKKwkJaWYgKHcgPT0gTlVMTCkK KwkJeworCQkJKmxhc3Rfc3RhcnRfdGltZSA9IG5vdzsKKwkJCSp3YWl0X3RpbWUgPSB3YWxf cmV0cmlldmVfcmV0cnlfaW50ZXJ2YWw7CisKKwkJCWxvZ2ljYWxyZXBfd29ya2VyX2xhdW5j aChzbG90X2RhdGEtPmRhdGFiYXNlLCBJbnZhbGlkT2lkLCBOVUxMLAorCQkJCQkJCQkJIEJP T1RTVFJBUF9TVVBFUlVTRVJJRCwgSW52YWxpZE9pZCk7CisJCX0KKwl9CisKKwkvKiBTd2l0 Y2ggYmFjayB0byBvcmlnaW5hbCBtZW1vcnkgY29udGV4dC4gKi8KKwlNZW1vcnlDb250ZXh0 U3dpdGNoVG8ob2xkY3R4KTsKKwkvKiBDbGVhbiB0aGUgdGVtcG9yYXJ5IG1lbW9yeS4gKi8K KwlNZW1vcnlDb250ZXh0RGVsZXRlKHRtcGN0eCk7CisKKwl3YWxyY3ZfZGlzY29ubmVjdCh3 cmNvbm4pOworfQorCitzdGF0aWMgdm9pZAorQXBwbHlMYXVuY2hlclN0YXJ0U3VicyhUaW1l c3RhbXBUeiAqbGFzdF9zdGFydF90aW1lLCBsb25nICp3YWl0X3RpbWUpCit7CisJVGltZXN0 YW1wVHogbm93OworCUxpc3QJICAgKnN1Ymxpc3Q7CisJTGlzdENlbGwgICAqbGM7CisJTWVt b3J5Q29udGV4dCBzdWJjdHg7CisJTWVtb3J5Q29udGV4dCBvbGRjdHg7CisKKwlub3cgPSBH ZXRDdXJyZW50VGltZXN0YW1wKCk7CisKKwkvKiBVc2UgdGVtcG9yYXJ5IGNvbnRleHQgZm9y IHRoZSBkYXRhYmFzZSBsaXN0IGFuZCB3b3JrZXIgaW5mby4gKi8KKwlzdWJjdHggPSBBbGxv Y1NldENvbnRleHRDcmVhdGUoVG9wTWVtb3J5Q29udGV4dCwKKwkJCQkJCQkJICAgIkxvZ2lj YWwgUmVwbGljYXRpb24gTGF1bmNoZXIgc3VibGlzdCIsCisJCQkJCQkJCSAgIEFMTE9DU0VU X0RFRkFVTFRfU0laRVMpOworCW9sZGN0eCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhzdWJj dHgpOworCisJLyogc2VhcmNoIGZvciBzdWJzY3JpcHRpb25zIHRvIHN0YXJ0IG9yIHN0b3Au ICovCisJc3VibGlzdCA9IGdldF9zdWJzY3JpcHRpb25fbGlzdCgpOworCisJLyogU3RhcnQg dGhlIG1pc3Npbmcgd29ya2VycyBmb3IgZW5hYmxlZCBzdWJzY3JpcHRpb25zLiAqLworCWZv cmVhY2gobGMsIHN1Ymxpc3QpCisJeworCQlTdWJzY3JpcHRpb24gKnN1YiA9IChTdWJzY3Jp cHRpb24gKikgbGZpcnN0KGxjKTsKKwkJTG9naWNhbFJlcFdvcmtlciAqdzsKKworCQlpZiAo IXN1Yi0+ZW5hYmxlZCkKKwkJCWNvbnRpbnVlOworCisJCUxXTG9ja0FjcXVpcmUoTG9naWNh bFJlcFdvcmtlckxvY2ssIExXX1NIQVJFRCk7CisJCXcgPSBsb2dpY2FscmVwX3dvcmtlcl9m aW5kKHN1Yi0+ZGJpZCwgc3ViLT5vaWQsIEludmFsaWRPaWQsIGZhbHNlKTsKKwkJTFdMb2Nr UmVsZWFzZShMb2dpY2FsUmVwV29ya2VyTG9jayk7CisKKwkJaWYgKHcgPT0gTlVMTCkKKwkJ eworCQkJKmxhc3Rfc3RhcnRfdGltZSA9IG5vdzsKKwkJCSp3YWl0X3RpbWUgPSB3YWxfcmV0 cmlldmVfcmV0cnlfaW50ZXJ2YWw7CisKKwkJCWxvZ2ljYWxyZXBfd29ya2VyX2xhdW5jaChz dWItPmRiaWQsIHN1Yi0+b2lkLCBzdWItPm5hbWUsCisJCQkJCQkJCQkgc3ViLT5vd25lciwg SW52YWxpZE9pZCk7CisJCX0KKwl9CisKKwkvKiBTd2l0Y2ggYmFjayB0byBvcmlnaW5hbCBt ZW1vcnkgY29udGV4dC4gKi8KKwlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY3R4KTsKKwkv KiBDbGVhbiB0aGUgdGVtcG9yYXJ5IG1lbW9yeS4gKi8KKwlNZW1vcnlDb250ZXh0RGVsZXRl KHN1YmN0eCk7Cit9CisKIC8qCiAgKiBNYWluIGxvb3AgZm9yIHRoZSBhcHBseSBsYXVuY2hl ciBwcm9jZXNzLgogICovCkBAIC04MjIsMTQgKzk0NiwxMiBAQCBBcHBseUxhdW5jaGVyTWFp bihEYXR1bSBtYWluX2FyZykKIAkgKi8KIAlCYWNrZ3JvdW5kV29ya2VySW5pdGlhbGl6ZUNv bm5lY3Rpb24oTlVMTCwgTlVMTCwgMCk7CiAKKwlsb2FkX2ZpbGUoImxpYnBxd2FscmVjZWl2 ZXIiLCBmYWxzZSk7CisKIAkvKiBFbnRlciBtYWluIGxvb3AgKi8KIAlmb3IgKDs7KQogCXsK IAkJaW50CQkJcmM7Ci0JCUxpc3QJICAgKnN1Ymxpc3Q7Ci0JCUxpc3RDZWxsICAgKmxjOwot CQlNZW1vcnlDb250ZXh0IHN1YmN0eDsKLQkJTWVtb3J5Q29udGV4dCBvbGRjdHg7CiAJCVRp bWVzdGFtcFR6IG5vdzsKIAkJbG9uZwkJd2FpdF90aW1lID0gREVGQVVMVF9OQVBUSU1FX1BF Ul9DWUNMRTsKIApAQCAtODQxLDQyICs5NjMsMTAgQEAgQXBwbHlMYXVuY2hlck1haW4oRGF0 dW0gbWFpbl9hcmcpCiAJCWlmIChUaW1lc3RhbXBEaWZmZXJlbmNlRXhjZWVkcyhsYXN0X3N0 YXJ0X3RpbWUsIG5vdywKIAkJCQkJCQkJCSAgIHdhbF9yZXRyaWV2ZV9yZXRyeV9pbnRlcnZh bCkpCiAJCXsKLQkJCS8qIFVzZSB0ZW1wb3JhcnkgY29udGV4dCBmb3IgdGhlIGRhdGFiYXNl IGxpc3QgYW5kIHdvcmtlciBpbmZvLiAqLwotCQkJc3ViY3R4ID0gQWxsb2NTZXRDb250ZXh0 Q3JlYXRlKFRvcE1lbW9yeUNvbnRleHQsCi0JCQkJCQkJCQkJICAgIkxvZ2ljYWwgUmVwbGlj YXRpb24gTGF1bmNoZXIgc3VibGlzdCIsCi0JCQkJCQkJCQkJICAgQUxMT0NTRVRfREVGQVVM VF9TSVpFUyk7Ci0JCQlvbGRjdHggPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oc3ViY3R4KTsK LQotCQkJLyogc2VhcmNoIGZvciBzdWJzY3JpcHRpb25zIHRvIHN0YXJ0IG9yIHN0b3AuICov Ci0JCQlzdWJsaXN0ID0gZ2V0X3N1YnNjcmlwdGlvbl9saXN0KCk7Ci0KLQkJCS8qIFN0YXJ0 IHRoZSBtaXNzaW5nIHdvcmtlcnMgZm9yIGVuYWJsZWQgc3Vic2NyaXB0aW9ucy4gKi8KLQkJ CWZvcmVhY2gobGMsIHN1Ymxpc3QpCi0JCQl7Ci0JCQkJU3Vic2NyaXB0aW9uICpzdWIgPSAo U3Vic2NyaXB0aW9uICopIGxmaXJzdChsYyk7Ci0JCQkJTG9naWNhbFJlcFdvcmtlciAqdzsK LQotCQkJCWlmICghc3ViLT5lbmFibGVkKQotCQkJCQljb250aW51ZTsKLQotCQkJCUxXTG9j a0FjcXVpcmUoTG9naWNhbFJlcFdvcmtlckxvY2ssIExXX1NIQVJFRCk7Ci0JCQkJdyA9IGxv Z2ljYWxyZXBfd29ya2VyX2ZpbmQoc3ViLT5vaWQsIEludmFsaWRPaWQsIGZhbHNlKTsKLQkJ CQlMV0xvY2tSZWxlYXNlKExvZ2ljYWxSZXBXb3JrZXJMb2NrKTsKLQotCQkJCWlmICh3ID09 IE5VTEwpCi0JCQkJewotCQkJCQlsYXN0X3N0YXJ0X3RpbWUgPSBub3c7Ci0JCQkJCXdhaXRf dGltZSA9IHdhbF9yZXRyaWV2ZV9yZXRyeV9pbnRlcnZhbDsKLQotCQkJCQlsb2dpY2FscmVw X3dvcmtlcl9sYXVuY2goc3ViLT5kYmlkLCBzdWItPm9pZCwgc3ViLT5uYW1lLAotCQkJCQkJ CQkJCQkgc3ViLT5vd25lciwgSW52YWxpZE9pZCk7Ci0JCQkJfQotCQkJfQotCi0JCQkvKiBT d2l0Y2ggYmFjayB0byBvcmlnaW5hbCBtZW1vcnkgY29udGV4dC4gKi8KLQkJCU1lbW9yeUNv bnRleHRTd2l0Y2hUbyhvbGRjdHgpOwotCQkJLyogQ2xlYW4gdGhlIHRlbXBvcmFyeSBtZW1v cnkuICovCi0JCQlNZW1vcnlDb250ZXh0RGVsZXRlKHN1YmN0eCk7CisJCQlpZiAoIVJlY292 ZXJ5SW5Qcm9ncmVzcygpKQorCQkJCUFwcGx5TGF1bmNoZXJTdGFydFN1YnMoJmxhc3Rfc3Rh cnRfdGltZSwgJndhaXRfdGltZSk7CisJCQllbHNlCisJCQkJQXBwbHlMYXVuY2hlclN0YXJ0 U2xvdFN5bmMoJmxhc3Rfc3RhcnRfdGltZSwgJndhaXRfdGltZSk7CiAJCX0KIAkJZWxzZQog CQl7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Jlb3Jk ZXJidWZmZXIuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcmVvcmRlcmJ1 ZmZlci5jCmluZGV4IDdhYTU2NDdhMmMuLmYwYjNiOWFkODcgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcmVvcmRlcmJ1ZmZlci5jCisrKyBiL3NyYy9i YWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcmVvcmRlcmJ1ZmZlci5jCkBAIC05NSwxMSAr OTUsMTMgQEAKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJwZ3N0YXQuaCIK ICNpbmNsdWRlICJyZXBsaWNhdGlvbi9sb2dpY2FsLmgiCisjaW5jbHVkZSAicmVwbGljYXRp b24vbG9naWNhbHdvcmtlci5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL3Jlb3JkZXJidWZm ZXIuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9zbG90LmgiCiAjaW5jbHVkZSAicmVwbGlj YXRpb24vc25hcGJ1aWxkLmgiCS8qIGp1c3QgZm9yIFNuYXBCdWlsZFNuYXBEZWNSZWZjb3Vu dCAqLwogI2luY2x1ZGUgInN0b3JhZ2UvYnVmbWdyLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9m ZC5oIgorI2luY2x1ZGUgInN0b3JhZ2UvaXBjLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9zaW52 YWwuaCIKICNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgogI2luY2x1ZGUgInV0aWxzL2Nv bWJvY2lkLmgiCkBAIC0xMDcsNiArMTA5LDcgQEAKICNpbmNsdWRlICJ1dGlscy9tZW11dGls cy5oIgogI2luY2x1ZGUgInV0aWxzL3JlbC5oIgogI2luY2x1ZGUgInV0aWxzL3JlbGZpbGVu b2RlbWFwLmgiCisjaW5jbHVkZSAidXRpbHMvdmFybGVuYS5oIgogCiAKIC8qIGVudHJ5IGZv ciBhIGhhc2ggdGFibGUgd2UgdXNlIHRvIG1hcCBmcm9tIHhpZCB0byBvdXIgdHJhbnNhY3Rp b24gc3RhdGUgKi8KQEAgLTIwMDYsNiArMjAwOSw4NSBAQCBSZW9yZGVyQnVmZmVyUmVzZXRU WE4oUmVvcmRlckJ1ZmZlciAqcmIsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIAl9CiB9CiAK K3N0YXRpYyB2b2lkCit3YWl0X2Zvcl9zdGFuZGJ5X2NvbmZpcm1hdGlvbihYTG9nUmVjUHRy IGNvbW1pdF9sc24pCit7CisJY2hhcgkgICAqcmF3bmFtZTsKKwlMaXN0CSAgICpuYW1lbGlz dDsKKwlMaXN0Q2VsbCAgICpsYzsKKwlYTG9nUmVjUHRyCWZsdXNoX3BvcyA9IEludmFsaWRY TG9nUmVjUHRyOworCisJaWYgKHN0cmNtcChzdGFuZGJ5X3Nsb3RfbmFtZXMsICIiKSA9PSAw KQorCQlyZXR1cm47CisKKwlyYXduYW1lID0gcHN0cmR1cChzdGFuZGJ5X3Nsb3RfbmFtZXMp OworCVNwbGl0SWRlbnRpZmllclN0cmluZyhyYXduYW1lLCAnLCcsICZuYW1lbGlzdCk7CisK Kwl3aGlsZSAodHJ1ZSkKKwl7CisJCWludAkJCXdhaXRfc2xvdHNfcmVtYWluaW5nOworCQlY TG9nUmVjUHRyCW9sZGVzdF9mbHVzaF9wb3MgPSBJbnZhbGlkWExvZ1JlY1B0cjsKKwkJaW50 CQkJcmM7CisKKwkJd2FpdF9zbG90c19yZW1haW5pbmcgPSBsaXN0X2xlbmd0aChuYW1lbGlz dCk7CisKKwkJTFdMb2NrQWNxdWlyZShSZXBsaWNhdGlvblNsb3RDb250cm9sTG9jaywgTFdf U0hBUkVEKTsKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBtYXhfcmVwbGljYXRpb25fc2xvdHM7 IGkrKykKKwkJeworCQkJUmVwbGljYXRpb25TbG90ICpzID0gJlJlcGxpY2F0aW9uU2xvdEN0 bC0+cmVwbGljYXRpb25fc2xvdHNbaV07CisJCQlib29sCQlpbmxpc3Q7CisKKwkJCWlmICgh cy0+aW5fdXNlKQorCQkJCWNvbnRpbnVlOworCisJCQlpbmxpc3QgPSBmYWxzZTsKKwkJCWZv cmVhY2ggKGxjLCBuYW1lbGlzdCkKKwkJCXsKKwkJCQljaGFyICpuYW1lID0gbGZpcnN0KGxj KTsKKwkJCQlpZiAoc3RyY21wKG5hbWUsIE5hbWVTdHIocy0+ZGF0YS5uYW1lKSkgPT0gMCkK KwkJCQl7CisJCQkJCWlubGlzdCA9IHRydWU7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0K KwkJCWlmICghaW5saXN0KQorCQkJCWNvbnRpbnVlOworCisJCQlTcGluTG9ja0FjcXVpcmUo JnMtPm11dGV4KTsKKworCQkJaWYgKHMtPmRhdGEuZGF0YWJhc2UgPT0gSW52YWxpZE9pZCkK KwkJCQkvKiBQaHlzaWNhbCBzbG90cyBhZHZhbmNlIHJlc3RhcnRfbHNuIG9uIGZsdXNoIGFu ZCBpZ25vcmUgY29uZmlybWVkX2ZsdXNoX2xzbiAqLworCQkJCWZsdXNoX3BvcyA9IHMtPmRh dGEucmVzdGFydF9sc247CisJCQllbHNlCisJCQkJLyogRm9yIGxvZ2ljYWwgc2xvdHMgd2Ug bXVzdCB3YWl0IGZvciBjb21taXQgYW5kIGZsdXNoICovCisJCQkJZmx1c2hfcG9zID0gcy0+ ZGF0YS5jb25maXJtZWRfZmx1c2g7CisKKwkJCVNwaW5Mb2NrUmVsZWFzZSgmcy0+bXV0ZXgp OworCisJCQkvKiBXZSB3YW50IHRvIGZpbmQgb3V0IHRoZSBtaW4oZmx1c2ggcG9zKSBvdmVy IGFsbCBuYW1lZCBzbG90cyAqLworCQkJaWYgKG9sZGVzdF9mbHVzaF9wb3MgPT0gSW52YWxp ZFhMb2dSZWNQdHIKKwkJCQl8fCBvbGRlc3RfZmx1c2hfcG9zID4gZmx1c2hfcG9zKQorCQkJ CW9sZGVzdF9mbHVzaF9wb3MgPSBmbHVzaF9wb3M7CisKKwkJCWlmIChmbHVzaF9wb3MgPj0g Y29tbWl0X2xzbiAmJiB3YWl0X3Nsb3RzX3JlbWFpbmluZyA+IDApCisJCQkJd2FpdF9zbG90 c19yZW1haW5pbmcgLS07CisJCX0KKwkJTFdMb2NrUmVsZWFzZShSZXBsaWNhdGlvblNsb3RD b250cm9sTG9jayk7CisKKwkJaWYgKHdhaXRfc2xvdHNfcmVtYWluaW5nID09IDApCisJCQly ZXR1cm47CisKKwkJcmMgPSBXYWl0TGF0Y2goTXlMYXRjaCwKKwkJCQkJICAgV0xfTEFUQ0hf U0VUIHwgV0xfVElNRU9VVCB8IFdMX1BPU1RNQVNURVJfREVBVEgsCisJCQkJCSAgIDEwMDBM LCBQR19XQUlUX0VYVEVOU0lPTik7CisKKwkJaWYgKHJjICYgV0xfUE9TVE1BU1RFUl9ERUFU SCkKKwkJCXByb2NfZXhpdCgxKTsKKworCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOworCX0K K30KKwogLyoKICAqIEhlbHBlciBmdW5jdGlvbiBmb3IgUmVvcmRlckJ1ZmZlclJlcGxheSBh bmQgUmVvcmRlckJ1ZmZlclN0cmVhbVRYTi4KICAqCkBAIC0yNDM0LDYgKzI1MTYsOSBAQCBS ZW9yZGVyQnVmZmVyUHJvY2Vzc1RYTihSZW9yZGVyQnVmZmVyICpyYiwgUmVvcmRlckJ1ZmZl clRYTiAqdHhuLAogCQkJICogQ2FsbCBlaXRoZXIgUFJFUEFSRSAoZm9yIHR3by1waGFzZSB0 cmFuc2FjdGlvbnMpIG9yIENPTU1JVCAoZm9yCiAJCQkgKiByZWd1bGFyIG9uZXMpLgogCQkJ ICovCisKKwkJCXdhaXRfZm9yX3N0YW5kYnlfY29uZmlybWF0aW9uKGNvbW1pdF9sc24pOwor CiAJCQlpZiAocmJ0eG5fcHJlcGFyZWQodHhuKSkKIAkJCQlyYi0+cHJlcGFyZShyYiwgdHhu LCBjb21taXRfbHNuKTsKIAkJCWVsc2UKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxp Y2F0aW9uL2xvZ2ljYWwvc2xvdHN5bmMuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xv Z2ljYWwvc2xvdHN5bmMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw Li42NTRhYzE1NGVhCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRp b24vbG9naWNhbC9zbG90c3luYy5jCkBAIC0wLDAgKzEsNDEyIEBACisvKi0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyAqIHNsb3RzeW5jLmMKKyAqCSAgIFBvc3RncmVTUUwgd29ya2VyIGZvciBz eW5jaHJvbml6aW5nIHNsb3RzIHRvIGEgc3RhbmRieSBmcm9tIHByaW1hcnkKKyAqCisgKiBD b3B5cmlnaHQgKGMpIDIwMTYtMjAxOCwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQg R3JvdXAKKyAqCisgKiBJREVOVElGSUNBVElPTgorICoJICBzcmMvYmFja2VuZC9yZXBsaWNh dGlvbi9sb2dpY2FsL3Nsb3RzeW5jLmMKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAq LworI2luY2x1ZGUgInBvc3RncmVzLmgiCisKKyNpbmNsdWRlICJjb21tYW5kcy9kYmNvbW1h bmRzLmgiCisjaW5jbHVkZSAicGdzdGF0LmgiCisjaW5jbHVkZSAicG9zdG1hc3Rlci9iZ3dv cmtlci5oIgorI2luY2x1ZGUgInJlcGxpY2F0aW9uL2xvZ2ljYWx3b3JrZXIuaCIKKyNpbmNs dWRlICJyZXBsaWNhdGlvbi93YWxyZWNlaXZlci5oIgorI2luY2x1ZGUgInJlcGxpY2F0aW9u L3dvcmtlcl9pbnRlcm5hbC5oIgorI2luY2x1ZGUgInN0b3JhZ2UvaXBjLmgiCisjaW5jbHVk ZSAic3RvcmFnZS9wcm9jYXJyYXkuaCIKKyNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgor I2luY2x1ZGUgInV0aWxzL3BnX2xzbi5oIgorI2luY2x1ZGUgInV0aWxzL3ZhcmxlbmEuaCIK KworY2hhcgkgICAqc3luY2hyb25pemVfc2xvdF9uYW1lczsKK2NoYXIJICAgKnN0YW5kYnlf c2xvdF9uYW1lczsKKworLyoKKyAqIFdhaXQgZm9yIHJlbW90ZSBzbG90IHRvIHBhc3MgbG9j YWx5IHJlc2VydmVkIHBvc2l0aW9uLgorICovCitzdGF0aWMgdm9pZAord2FpdF9mb3JfcHJp bWFyeV9zbG90X2NhdGNodXAoV2FsUmVjZWl2ZXJDb25uICp3cmNvbm4sIGNoYXIgKnNsb3Rf bmFtZSwKKwkJCQkJCQkgIFhMb2dSZWNQdHIgbWluX2xzbikKK3sKKwlXYWxSY3ZFeGVjUmVz dWx0ICpyZXM7CisJVHVwbGVUYWJsZVNsb3QgKnNsb3Q7CisJT2lkCQkJc2xvdFJvd1sxXSA9 IHtMU05PSUR9OworCVN0cmluZ0luZm9EYXRhIGNtZDsKKwlib29sCQlpc251bGw7CisJWExv Z1JlY1B0cglyZXN0YXJ0X2xzbjsKKworCWZvciAoOzspCisJeworCQlpbnQJCQlyYzsKKwor CQlDSEVDS19GT1JfSU5URVJSVVBUUygpOworCisJCWluaXRTdHJpbmdJbmZvKCZjbWQpOwor CQlhcHBlbmRTdHJpbmdJbmZvKCZjbWQsCisJCQkJCQkgIlNFTEVDVCByZXN0YXJ0X2xzbiIK KwkJCQkJCSAiICBGUk9NIHBnX2NhdGFsb2cucGdfcmVwbGljYXRpb25fc2xvdHMiCisJCQkJ CQkgIiBXSEVSRSBzbG90X25hbWUgPSAlcyIsCisJCQkJCQkgcXVvdGVfbGl0ZXJhbF9jc3Ry KHNsb3RfbmFtZSkpOworCQlyZXMgPSB3YWxyY3ZfZXhlYyh3cmNvbm4sIGNtZC5kYXRhLCAx LCBzbG90Um93KTsKKworCQlpZiAocmVzLT5zdGF0dXMgIT0gV0FMUkNWX09LX1RVUExFUykK KwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJtc2coImNvdWxkIG5vdCBmZXRjaCBzbG90 IGluZm8gZm9yIHNsb3QgXCIlc1wiIGZyb20gcHJpbWFyeTogJXMiLAorCQkJCQkJCXNsb3Rf bmFtZSwgcmVzLT5lcnIpKSk7CisKKwkJc2xvdCA9IE1ha2VTaW5nbGVUdXBsZVRhYmxlU2xv dChyZXMtPnR1cGxlZGVzYywgJlRUU09wc01pbmltYWxUdXBsZSk7CisJCWlmICghdHVwbGVz dG9yZV9nZXR0dXBsZXNsb3QocmVzLT50dXBsZXN0b3JlLCB0cnVlLCBmYWxzZSwgc2xvdCkp CisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJybXNnKCJzbG90IFwiJXNcIiBkaXNhcGVh cmVkIGZyb20gcHJvdmlkZXIiLAorCQkJCQkJCXNsb3RfbmFtZSkpKTsKKworCQlyZXN0YXJ0 X2xzbiA9IERhdHVtR2V0TFNOKHNsb3RfZ2V0YXR0cihzbG90LCAxLCAmaXNudWxsKSk7CisJ CUFzc2VydCghaXNudWxsKTsKKworCQlFeGVjQ2xlYXJUdXBsZShzbG90KTsKKwkJd2FscmN2 X2NsZWFyX3Jlc3VsdChyZXMpOworCisJCWlmIChyZXN0YXJ0X2xzbiA+PSBtaW5fbHNuKQor CQkJYnJlYWs7CisKKwkJcmMgPSBXYWl0TGF0Y2goTXlMYXRjaCwKKwkJCQkJICAgV0xfTEFU Q0hfU0VUIHwgV0xfVElNRU9VVCB8IFdMX1BPU1RNQVNURVJfREVBVEgsCisJCQkJCSAgIHdh bF9yZXRyaWV2ZV9yZXRyeV9pbnRlcnZhbCwKKwkJCQkJICAgV0FJVF9FVkVOVF9SRVBMX1NM T1RfU1lOQ19NQUlOKTsKKworCQlSZXNldExhdGNoKE15TGF0Y2gpOworCisJCS8qIGVtZXJn ZW5jeSBiYWlsb3V0IGlmIHBvc3RtYXN0ZXIgaGFzIGRpZWQgKi8KKwkJaWYgKHJjICYgV0xf UE9TVE1BU1RFUl9ERUFUSCkKKwkJCXByb2NfZXhpdCgxKTsKKwl9Cit9CisKKy8qCisgKiBT eW5jaHJvbml6ZSBzaW5nbGUgc2xvdCB0byBnaXZlbiBwb3NpdGlvbi4KKyAqCisgKiBUaGlz IG9wdGlvbmFsbHkgY3JlYXRlcyBuZXcgc2xvdCBpZiB0aGVyZSBpcyBubyBleGlzdGluZyBv bmUuCisgKi8KK3N0YXRpYyB2b2lkCitzeW5jaHJvbml6ZV9vbmVfc2xvdChXYWxSZWNlaXZl ckNvbm4gKndyY29ubiwgY2hhciAqc2xvdF9uYW1lLCBjaGFyICpkYXRhYmFzZSwKKwkJCQkJ IGNoYXIgKnBsdWdpbl9uYW1lLCBYTG9nUmVjUHRyIHRhcmdldF9sc24pCit7CisJYm9vbAkJ Zm91bmQgPSBmYWxzZTsKKwlYTG9nUmVjUHRyCWVuZGxzbjsKKworCS8qIFNlYXJjaCBmb3Ig dGhlIG5hbWVkIHNsb3QgYW5kIG1hcmsgaXQgYWN0aXZlIGlmIHdlIGZpbmQgaXQuICovCisJ TFdMb2NrQWNxdWlyZShSZXBsaWNhdGlvblNsb3RDb250cm9sTG9jaywgTFdfU0hBUkVEKTsK Kwlmb3IgKGludCBpID0gMDsgaSA8IG1heF9yZXBsaWNhdGlvbl9zbG90czsgaSsrKQorCXsK KwkJUmVwbGljYXRpb25TbG90ICpzID0gJlJlcGxpY2F0aW9uU2xvdEN0bC0+cmVwbGljYXRp b25fc2xvdHNbaV07CisKKwkJaWYgKCFzLT5pbl91c2UpCisJCQljb250aW51ZTsKKworCQlp ZiAoc3RyY21wKE5hbWVTdHIocy0+ZGF0YS5uYW1lKSwgc2xvdF9uYW1lKSA9PSAwKQorCQl7 CisJCQlmb3VuZCA9IHRydWU7CisJCQlicmVhazsKKwkJfQorCX0KKwlMV0xvY2tSZWxlYXNl KFJlcGxpY2F0aW9uU2xvdENvbnRyb2xMb2NrKTsKKworCVN0YXJ0VHJhbnNhY3Rpb25Db21t YW5kKCk7CisKKwkvKiBBbHJlYWR5IGV4aXN0aW5nIHNsb3QsIGFjcXVpcmUgKi8KKwlpZiAo Zm91bmQpCisJeworCQlSZXBsaWNhdGlvblNsb3RBY3F1aXJlKHNsb3RfbmFtZSwgdHJ1ZSk7 CisKKwkJaWYgKHRhcmdldF9sc24gPCBNeVJlcGxpY2F0aW9uU2xvdC0+ZGF0YS5jb25maXJt ZWRfZmx1c2gpCisJCXsKKwkJCWVsb2coREVCVUcxLAorCQkJCSAibm90IHN5bmNocm9uaXpp bmcgc2xvdCAlczsgc3luY2hyb25pemF0aW9uIHdvdWxkIG1vdmUgaXQgYmFja3dhcmQiLAor CQkJCSBzbG90X25hbWUpOworCisJCQlSZXBsaWNhdGlvblNsb3RSZWxlYXNlKCk7CisJCQlD b21taXRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKwkvKiBP dGhlcndpc2UgY3JlYXRlIHRoZSBzbG90IGZpcnN0LiAqLworCWVsc2UKKwl7CisJCVRyYW5z YWN0aW9uSWQgeG1pbl9ob3Jpem9uID0gSW52YWxpZFRyYW5zYWN0aW9uSWQ7CisJCVJlcGxp Y2F0aW9uU2xvdCAqc2xvdDsKKworCQlSZXBsaWNhdGlvblNsb3RDcmVhdGUoc2xvdF9uYW1l LCB0cnVlLCBSU19FUEhFTUVSQUwsIGZhbHNlKTsKKwkJc2xvdCA9IE15UmVwbGljYXRpb25T bG90OworCisJCVNwaW5Mb2NrQWNxdWlyZSgmc2xvdC0+bXV0ZXgpOworCQlzbG90LT5kYXRh LmRhdGFiYXNlID0gZ2V0X2RhdGFiYXNlX29pZChkYXRhYmFzZSwgZmFsc2UpOworCQluYW1l c3RyY3B5KCZzbG90LT5kYXRhLnBsdWdpbiwgcGx1Z2luX25hbWUpOworCQlTcGluTG9ja1Jl bGVhc2UoJnNsb3QtPm11dGV4KTsKKworCQlSZXBsaWNhdGlvblNsb3RSZXNlcnZlV2FsKCk7 CisKKwkJTFdMb2NrQWNxdWlyZShQcm9jQXJyYXlMb2NrLCBMV19FWENMVVNJVkUpOworCQl4 bWluX2hvcml6b24gPSBHZXRPbGRlc3RTYWZlRGVjb2RpbmdUcmFuc2FjdGlvbklkKHRydWUp OworCQlzbG90LT5lZmZlY3RpdmVfY2F0YWxvZ194bWluID0geG1pbl9ob3Jpem9uOworCQlz bG90LT5kYXRhLmNhdGFsb2dfeG1pbiA9IHhtaW5faG9yaXpvbjsKKwkJUmVwbGljYXRpb25T bG90c0NvbXB1dGVSZXF1aXJlZFhtaW4odHJ1ZSk7CisJCUxXTG9ja1JlbGVhc2UoUHJvY0Fy cmF5TG9jayk7CisKKwkJaWYgKHRhcmdldF9sc24gPCBNeVJlcGxpY2F0aW9uU2xvdC0+ZGF0 YS5yZXN0YXJ0X2xzbikKKwkJeworCQkJZXJlcG9ydChMT0csCisJCQkJCWVycm1zZygid2Fp dGluZyBmb3IgcmVtb3RlIHNsb3QgXCIlc1wiIExTTiAoJVgvJVgpIHRvIHBhc3MgbG9jYWwg c2xvdCBMU04gKCVYLyVYKSIsCisJCQkJCQkgICBzbG90X25hbWUsCisJCQkJCQkgICBMU05f Rk9STUFUX0FSR1ModGFyZ2V0X2xzbiksIExTTl9GT1JNQVRfQVJHUyhNeVJlcGxpY2F0aW9u U2xvdC0+ZGF0YS5yZXN0YXJ0X2xzbikpKTsKKworCQkJd2FpdF9mb3JfcHJpbWFyeV9zbG90 X2NhdGNodXAod3Jjb25uLCBzbG90X25hbWUsCisJCQkJCQkJCQkJICBNeVJlcGxpY2F0aW9u U2xvdC0+ZGF0YS5yZXN0YXJ0X2xzbik7CisJCX0KKworCQlSZXBsaWNhdGlvblNsb3RQZXJz aXN0KCk7CisJfQorCisJZW5kbHNuID0gcGdfbG9naWNhbF9yZXBsaWNhdGlvbl9zbG90X2Fk dmFuY2UodGFyZ2V0X2xzbik7CisKKwllbG9nKERFQlVHMywgInN5bmNocm9uaXplZCBzbG90 ICVzIHRvIGxzbiAoJVgvJVgpIiwKKwkJIHNsb3RfbmFtZSwgTFNOX0ZPUk1BVF9BUkdTKGVu ZGxzbikpOworCisJUmVwbGljYXRpb25TbG90UmVsZWFzZSgpOworCUNvbW1pdFRyYW5zYWN0 aW9uQ29tbWFuZCgpOworfQorCitzdGF0aWMgdm9pZAorc3luY2hyb25pemVfc2xvdHModm9p ZCkKK3sKKwlXYWxSY3ZFeGVjUmVzdWx0ICpyZXM7CisJV2FsUmVjZWl2ZXJDb25uICp3cmNv bm4gPSBOVUxMOworCVR1cGxlVGFibGVTbG90ICpzbG90OworCU9pZAkJCXNsb3RSb3dbM10g PSB7VEVYVE9JRCwgVEVYVE9JRCwgTFNOT0lEfTsKKwlTdHJpbmdJbmZvRGF0YSBzOworCWNo YXIJICAgKmRhdGFiYXNlOworCWNoYXIJICAgKmVycjsKKwlNZW1vcnlDb250ZXh0IG9sZGN0 eCA9IEN1cnJlbnRNZW1vcnlDb250ZXh0OworCisJaWYgKCFXYWxSY3YpCisJCXJldHVybjsK KworCS8qIHN5c2NhY2hlIGFjY2VzcyBuZWVkcyBhIHRyYW5zYWN0aW9uIGVudi4gKi8KKwlT dGFydFRyYW5zYWN0aW9uQ29tbWFuZCgpOworCS8qIG1ha2UgZGJuYW1lIGxpdmUgb3V0c2lk ZSBUWCBjb250ZXh0ICovCisJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGN0eCk7CisKKwlk YXRhYmFzZSA9IGdldF9kYXRhYmFzZV9uYW1lKE15RGF0YWJhc2VJZCk7CisJaW5pdFN0cmlu Z0luZm8oJnMpOworCWFwcGVuZFN0cmluZ0luZm8oJnMsICIlcyBkYm5hbWU9JXMiLCBQcmlt YXJ5Q29ubkluZm8sIGRhdGFiYXNlKTsKKwl3cmNvbm4gPSB3YWxyY3ZfY29ubmVjdChzLmRh dGEsIHRydWUsICJzbG90X3N5bmMiLCAmZXJyKTsKKworCWlmICh3cmNvbm4gPT0gTlVMTCkK KwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJybXNnKCJjb3VsZCBub3QgY29ubmVjdCB0byB0 aGUgcHJpbWFyeSBzZXJ2ZXI6ICVzIiwgZXJyKSkpOworCisJcmVzZXRTdHJpbmdJbmZvKCZz KTsKKwlhcHBlbmRTdHJpbmdJbmZvKCZzLAorCQkJCQkgIlNFTEVDVCBzbG90X25hbWUsIHBs dWdpbiwgY29uZmlybWVkX2ZsdXNoX2xzbiIKKwkJCQkJICIgIEZST00gcGdfY2F0YWxvZy5w Z19yZXBsaWNhdGlvbl9zbG90cyIKKwkJCQkJICIgV0hFUkUgZGF0YWJhc2UgPSAlcyIsCisJ CQkJCSBxdW90ZV9saXRlcmFsX2NzdHIoZGF0YWJhc2UpKTsKKwlpZiAoc3RyY21wKHN5bmNo cm9uaXplX3Nsb3RfbmFtZXMsICIiKSAhPSAwICYmIHN0cmNtcChzeW5jaHJvbml6ZV9zbG90 X25hbWVzLCAiKiIpICE9IDApCisJeworCQljaGFyCSAgICpyYXduYW1lOworCQlMaXN0CSAg ICpuYW1lbGlzdDsKKwkJTGlzdENlbGwgICAqbGM7CisKKwkJcmF3bmFtZSA9IHBzdHJkdXAo c3luY2hyb25pemVfc2xvdF9uYW1lcyk7CisJCVNwbGl0SWRlbnRpZmllclN0cmluZyhyYXdu YW1lLCAnLCcsICZuYW1lbGlzdCk7CisKKwkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmcywg IiBBTkQgc2xvdF9uYW1lIElOICgiKTsKKwkJZm9yZWFjaCAobGMsIG5hbWVsaXN0KQorCQl7 CisJCQlpZiAobGMgIT0gbGlzdF9oZWFkKG5hbWVsaXN0KSkKKwkJCQlhcHBlbmRTdHJpbmdJ bmZvQ2hhcigmcywgJywnKTsKKwkJCWFwcGVuZFN0cmluZ0luZm8oJnMsICIlcyIsCisJCQkJ CQkJIHF1b3RlX2xpdGVyYWxfY3N0cihsZmlyc3QobGMpKSk7CisJCX0KKwkJYXBwZW5kU3Ry aW5nSW5mb0NoYXIoJnMsICcpJyk7CisJfQorCisJcmVzID0gd2FscmN2X2V4ZWMod3Jjb25u LCBzLmRhdGEsIDMsIHNsb3RSb3cpOworCXBmcmVlKHMuZGF0YSk7CisKKwlpZiAocmVzLT5z dGF0dXMgIT0gV0FMUkNWX09LX1RVUExFUykKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJy bXNnKCJjb3VsZCBub3QgZmV0Y2ggc2xvdCBpbmZvIGZyb20gcHJpbWFyeTogJXMiLAorCQkJ CQkJcmVzLT5lcnIpKSk7CisKKwlDb21taXRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKKwkvKiBD b21taXRUcmFuc2FjdGlvbkNvbW1hbmQgc3dpdGNoZXMgdG8gVG9wTWVtb3J5Q29udGV4dCAq LworCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjdHgpOworCisJc2xvdCA9IE1ha2VTaW5n bGVUdXBsZVRhYmxlU2xvdChyZXMtPnR1cGxlZGVzYywgJlRUU09wc01pbmltYWxUdXBsZSk7 CisJd2hpbGUgKHR1cGxlc3RvcmVfZ2V0dHVwbGVzbG90KHJlcy0+dHVwbGVzdG9yZSwgdHJ1 ZSwgZmFsc2UsIHNsb3QpKQorCXsKKwkJY2hhcgkgICAqc2xvdF9uYW1lOworCQljaGFyCSAg ICpwbHVnaW5fbmFtZTsKKwkJWExvZ1JlY1B0cgljb25maXJtZWRfZmx1c2hfbHNuOworCQli b29sCQlpc251bGw7CisKKwkJc2xvdF9uYW1lID0gVGV4dERhdHVtR2V0Q1N0cmluZyhzbG90 X2dldGF0dHIoc2xvdCwgMSwgJmlzbnVsbCkpOworCQlBc3NlcnQoIWlzbnVsbCk7CisKKwkJ cGx1Z2luX25hbWUgPSBUZXh0RGF0dW1HZXRDU3RyaW5nKHNsb3RfZ2V0YXR0cihzbG90LCAy LCAmaXNudWxsKSk7CisJCUFzc2VydCghaXNudWxsKTsKKworCQljb25maXJtZWRfZmx1c2hf bHNuID0gRGF0dW1HZXRMU04oc2xvdF9nZXRhdHRyKHNsb3QsIDMsICZpc251bGwpKTsKKwkJ QXNzZXJ0KCFpc251bGwpOworCisJCXN5bmNocm9uaXplX29uZV9zbG90KHdyY29ubiwgc2xv dF9uYW1lLCBkYXRhYmFzZSwgcGx1Z2luX25hbWUsCisJCQkJCQkJIGNvbmZpcm1lZF9mbHVz aF9sc24pOworCisJCUV4ZWNDbGVhclR1cGxlKHNsb3QpOworCX0KKworCXdhbHJjdl9jbGVh cl9yZXN1bHQocmVzKTsKKwlwZnJlZShkYXRhYmFzZSk7CisKKwl3YWxyY3ZfZGlzY29ubmVj dCh3cmNvbm4pOworfQorCisvKgorICogVGhlIG1haW4gbG9vcCBvZiBvdXIgd29ya2VyIHBy b2Nlc3MuCisgKi8KK3ZvaWQKK1JlcGxTbG90U3luY01haW4oRGF0dW0gbWFpbl9hcmcpCit7 CisJaW50CQkJd29ya2VyX3Nsb3QgPSBEYXR1bUdldEludDMyKG1haW5fYXJnKTsKKworCS8q IEF0dGFjaCB0byBzbG90ICovCisJbG9naWNhbHJlcF93b3JrZXJfYXR0YWNoKHdvcmtlcl9z bG90KTsKKworCS8qIEVzdGFibGlzaCBzaWduYWwgaGFuZGxlcnMuICovCisJQmFja2dyb3Vu ZFdvcmtlclVuYmxvY2tTaWduYWxzKCk7CisKKwkvKiBMb2FkIHRoZSBsaWJwcS1zcGVjaWZp YyBmdW5jdGlvbnMgKi8KKwlsb2FkX2ZpbGUoImxpYnBxd2FscmVjZWl2ZXIiLCBmYWxzZSk7 CisKKwkvKiBDb25uZWN0IHRvIG91ciBkYXRhYmFzZS4gKi8KKwlCYWNrZ3JvdW5kV29ya2Vy SW5pdGlhbGl6ZUNvbm5lY3Rpb25CeU9pZChNeUxvZ2ljYWxSZXBXb3JrZXItPmRiaWQsCisJ CQkJCQkJCQkJCSAgTXlMb2dpY2FsUmVwV29ya2VyLT51c2VyaWQsCisJCQkJCQkJCQkJCSAg MCk7CisKKwlTdGFydFRyYW5zYWN0aW9uQ29tbWFuZCgpOworCWVyZXBvcnQoTE9HLAorCQkJ KGVycm1zZygicmVwbGljYXRpb24gc2xvdCBzeW5jaHJvbml6YXRpb24gd29ya2VyIGZvciBk YXRhYmFzZSBcIiVzXCIgaGFzIHN0YXJ0ZWQiLAorCQkJCQlnZXRfZGF0YWJhc2VfbmFtZShN eUxvZ2ljYWxSZXBXb3JrZXItPmRiaWQpKSkpOworCUNvbW1pdFRyYW5zYWN0aW9uQ29tbWFu ZCgpOworCisJLyogTWFpbiB3YWl0IGxvb3AuICovCisJZm9yICg7OykKKwl7CisJCWludAkJ CXJjOworCisJCUNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7CisKKwkJaWYgKCFSZWNvdmVyeUlu UHJvZ3Jlc3MoKSkKKwkJCXJldHVybjsKKworCQlpZiAoc3RyY21wKHN5bmNocm9uaXplX3Ns b3RfbmFtZXMsICIiKSA9PSAwKQorCQkJcmV0dXJuOworCisJCXN5bmNocm9uaXplX3Nsb3Rz KCk7CisKKwkJcmMgPSBXYWl0TGF0Y2goTXlMYXRjaCwKKwkJCQkJICAgV0xfTEFUQ0hfU0VU IHwgV0xfVElNRU9VVCB8IFdMX1BPU1RNQVNURVJfREVBVEgsCisJCQkJCSAgIHdhbF9yZXRy aWV2ZV9yZXRyeV9pbnRlcnZhbCwKKwkJCQkJICAgV0FJVF9FVkVOVF9SRVBMX1NMT1RfU1lO Q19NQUlOKTsKKworCQlSZXNldExhdGNoKE15TGF0Y2gpOworCisJCS8qIGVtZXJnZW5jeSBi YWlsb3V0IGlmIHBvc3RtYXN0ZXIgaGFzIGRpZWQgKi8KKwkJaWYgKHJjICYgV0xfUE9TVE1B U1RFUl9ERUFUSCkKKwkJCXByb2NfZXhpdCgxKTsKKwl9Cit9CisKKy8qCisgKiBSb3V0aW5l cyBmb3IgaGFuZGxpbmcgdGhlIEdVQyB2YXJpYWJsZShzKQorICovCisKK2Jvb2wKK2NoZWNr X3N5bmNocm9uaXplX3Nsb3RfbmFtZXMoY2hhciAqKm5ld3ZhbCwgdm9pZCAqKmV4dHJhLCBH dWNTb3VyY2Ugc291cmNlKQoreworCS8qIFNwZWNpYWwgaGFuZGxpbmcgZm9yICIqIiB3aGlj aCBtZWFucyBhbGwuICovCisJaWYgKHN0cmNtcCgqbmV3dmFsLCAiKiIpID09IDApCisJewor CQlyZXR1cm4gdHJ1ZTsKKwl9CisJZWxzZQorCXsKKwkJY2hhcgkgICAqcmF3bmFtZTsKKwkJ TGlzdAkgICAqbmFtZWxpc3Q7CisJCUxpc3RDZWxsICAgKmxjOworCisJCS8qIE5lZWQgYSBt b2RpZmlhYmxlIGNvcHkgb2Ygc3RyaW5nICovCisJCXJhd25hbWUgPSBwc3RyZHVwKCpuZXd2 YWwpOworCisJCS8qIFBhcnNlIHN0cmluZyBpbnRvIGxpc3Qgb2YgaWRlbnRpZmllcnMgKi8K KwkJaWYgKCFTcGxpdElkZW50aWZpZXJTdHJpbmcocmF3bmFtZSwgJywnLCAmbmFtZWxpc3Qp KQorCQl7CisJCQkvKiBzeW50YXggZXJyb3IgaW4gbmFtZSBsaXN0ICovCisJCQlHVUNfY2hl Y2tfZXJyZGV0YWlsKCJMaXN0IHN5bnRheCBpcyBpbnZhbGlkLiIpOworCQkJcGZyZWUocmF3 bmFtZSk7CisJCQlsaXN0X2ZyZWUobmFtZWxpc3QpOworCQkJcmV0dXJuIGZhbHNlOworCQl9 CisKKwkJZm9yZWFjaChsYywgbmFtZWxpc3QpCisJCXsKKwkJCWNoYXIJICAgKmN1cm5hbWUg PSAoY2hhciAqKSBsZmlyc3QobGMpOworCisJCQlSZXBsaWNhdGlvblNsb3RWYWxpZGF0ZU5h bWUoY3VybmFtZSwgRVJST1IpOworCQl9CisKKwkJcGZyZWUocmF3bmFtZSk7CisJCWxpc3Rf ZnJlZShuYW1lbGlzdCk7CisJfQorCisJcmV0dXJuIHRydWU7Cit9CisKKworYm9vbAorY2hl Y2tfc3RhbmRieV9zbG90X25hbWVzKGNoYXIgKipuZXd2YWwsIHZvaWQgKipleHRyYSwgR3Vj U291cmNlIHNvdXJjZSkKK3sKKwljaGFyCSAgICpyYXduYW1lOworCUxpc3QJICAgKm5hbWVs aXN0OworCUxpc3RDZWxsICAgKmxjOworCisJLyogTmVlZCBhIG1vZGlmaWFibGUgY29weSBv ZiBzdHJpbmcgKi8KKwlyYXduYW1lID0gcHN0cmR1cCgqbmV3dmFsKTsKKworCS8qIFBhcnNl IHN0cmluZyBpbnRvIGxpc3Qgb2YgaWRlbnRpZmllcnMgKi8KKwlpZiAoIVNwbGl0SWRlbnRp ZmllclN0cmluZyhyYXduYW1lLCAnLCcsICZuYW1lbGlzdCkpCisJeworCQkvKiBzeW50YXgg ZXJyb3IgaW4gbmFtZSBsaXN0ICovCisJCUdVQ19jaGVja19lcnJkZXRhaWwoIkxpc3Qgc3lu dGF4IGlzIGludmFsaWQuIik7CisJCXBmcmVlKHJhd25hbWUpOworCQlsaXN0X2ZyZWUobmFt ZWxpc3QpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJZm9yZWFjaChsYywgbmFtZWxpc3Qp CisJeworCQljaGFyCSAgICpjdXJuYW1lID0gKGNoYXIgKikgbGZpcnN0KGxjKTsKKworCQlS ZXBsaWNhdGlvblNsb3RWYWxpZGF0ZU5hbWUoY3VybmFtZSwgRVJST1IpOworCX0KKworCXBm cmVlKHJhd25hbWUpOworCWxpc3RfZnJlZShuYW1lbGlzdCk7CisKKwlyZXR1cm4gdHJ1ZTsK K30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvdGFibGVz eW5jLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3RhYmxlc3luYy5jCmlu ZGV4IGYwNzk4M2E0M2MuLjBlMDU5M2Y3MTYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Jl cGxpY2F0aW9uL2xvZ2ljYWwvdGFibGVzeW5jLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGlj YXRpb24vbG9naWNhbC90YWJsZXN5bmMuYwpAQCAtMTAwLDYgKzEwMCw3IEBACiAjaW5jbHVk ZSAiY2F0YWxvZy9wZ19zdWJzY3JpcHRpb25fcmVsLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9w Z190eXBlLmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvY29weS5oIgorI2luY2x1ZGUgImNvbW1h bmRzL3N1YnNjcmlwdGlvbmNtZHMuaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNs dWRlICJwYXJzZXIvcGFyc2VfcmVsYXRpb24uaCIKICNpbmNsdWRlICJwZ3N0YXQuaCIKQEAg LTE1MSw3ICsxNTIsOCBAQCBmaW5pc2hfc3luY193b3JrZXIodm9pZCkKIAlDb21taXRUcmFu c2FjdGlvbkNvbW1hbmQoKTsKIAogCS8qIEZpbmQgdGhlIG1haW4gYXBwbHkgd29ya2VyIGFu ZCBzaWduYWwgaXQuICovCi0JbG9naWNhbHJlcF93b3JrZXJfd2FrZXVwKE15TG9naWNhbFJl cFdvcmtlci0+c3ViaWQsIEludmFsaWRPaWQpOworCWxvZ2ljYWxyZXBfd29ya2VyX3dha2V1 cChNeUxvZ2ljYWxSZXBXb3JrZXItPmRiaWQsCisJCQkJCQkJIE15TG9naWNhbFJlcFdvcmtl ci0+c3ViaWQsIEludmFsaWRPaWQpOwogCiAJLyogU3RvcCBncmFjZWZ1bGx5ICovCiAJcHJv Y19leGl0KDApOwpAQCAtMTkxLDcgKzE5Myw4IEBAIHdhaXRfZm9yX3JlbGF0aW9uX3N0YXRl X2NoYW5nZShPaWQgcmVsaWQsIGNoYXIgZXhwZWN0ZWRfc3RhdGUpCiAKIAkJLyogQ2hlY2sg aWYgdGhlIHN5bmMgd29ya2VyIGlzIHN0aWxsIHJ1bm5pbmcgYW5kIGJhaWwgaWYgbm90LiAq LwogCQlMV0xvY2tBY3F1aXJlKExvZ2ljYWxSZXBXb3JrZXJMb2NrLCBMV19TSEFSRUQpOwot CQl3b3JrZXIgPSBsb2dpY2FscmVwX3dvcmtlcl9maW5kKE15TG9naWNhbFJlcFdvcmtlci0+ c3ViaWQsIHJlbGlkLAorCQl3b3JrZXIgPSBsb2dpY2FscmVwX3dvcmtlcl9maW5kKE15TG9n aWNhbFJlcFdvcmtlci0+ZGJpZCwKKwkJCQkJCQkJCQlNeUxvZ2ljYWxSZXBXb3JrZXItPnN1 YmlkLCByZWxpZCwKIAkJCQkJCQkJCQlmYWxzZSk7CiAJCUxXTG9ja1JlbGVhc2UoTG9naWNh bFJlcFdvcmtlckxvY2spOwogCQlpZiAoIXdvcmtlcikKQEAgLTIzOCw3ICsyNDEsOCBAQCB3 YWl0X2Zvcl93b3JrZXJfc3RhdGVfY2hhbmdlKGNoYXIgZXhwZWN0ZWRfc3RhdGUpCiAJCSAq IHdhaXRpbmcuCiAJCSAqLwogCQlMV0xvY2tBY3F1aXJlKExvZ2ljYWxSZXBXb3JrZXJMb2Nr LCBMV19TSEFSRUQpOwotCQl3b3JrZXIgPSBsb2dpY2FscmVwX3dvcmtlcl9maW5kKE15TG9n aWNhbFJlcFdvcmtlci0+c3ViaWQsCisJCXdvcmtlciA9IGxvZ2ljYWxyZXBfd29ya2VyX2Zp bmQoTXlMb2dpY2FsUmVwV29ya2VyLT5kYmlkLAorCQkJCQkJCQkJCU15TG9naWNhbFJlcFdv cmtlci0+c3ViaWQsCiAJCQkJCQkJCQkJSW52YWxpZE9pZCwgZmFsc2UpOwogCQlpZiAod29y a2VyICYmIHdvcmtlci0+cHJvYykKIAkJCWxvZ2ljYWxyZXBfd29ya2VyX3dha2V1cF9wdHIo d29ya2VyKTsKQEAgLTQ4NCw3ICs0ODgsOCBAQCBwcm9jZXNzX3N5bmNpbmdfdGFibGVzX2Zv cl9hcHBseShYTG9nUmVjUHRyIGN1cnJlbnRfbHNuKQogCQkJICovCiAJCQlMV0xvY2tBY3F1 aXJlKExvZ2ljYWxSZXBXb3JrZXJMb2NrLCBMV19TSEFSRUQpOwogCi0JCQlzeW5jd29ya2Vy ID0gbG9naWNhbHJlcF93b3JrZXJfZmluZChNeUxvZ2ljYWxSZXBXb3JrZXItPnN1YmlkLAor CQkJc3luY3dvcmtlciA9IGxvZ2ljYWxyZXBfd29ya2VyX2ZpbmQoTXlMb2dpY2FsUmVwV29y a2VyLT5kYmlkLAorCQkJCQkJCQkJCQkJTXlMb2dpY2FsUmVwV29ya2VyLT5zdWJpZCwKIAkJ CQkJCQkJCQkJCXJzdGF0ZS0+cmVsaWQsIGZhbHNlKTsKIAogCQkJaWYgKHN5bmN3b3JrZXIp CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9yZXBsX2dyYW0ueSBiL3Ny Yy9iYWNrZW5kL3JlcGxpY2F0aW9uL3JlcGxfZ3JhbS55CmluZGV4IGRjYjExMDg1NzkuLjkw Mjg0MWVmZTYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3JlcGxfZ3Jh bS55CisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3JlcGxfZ3JhbS55CkBAIC05MSwx MSArOTEsMTIgQEAgc3RhdGljIFNRTENtZCAqbWFrZV9zcWxjbWQodm9pZCk7CiAldG9rZW4g S19VU0VfU05BUFNIT1QKICV0b2tlbiBLX01BTklGRVNUCiAldG9rZW4gS19NQU5JRkVTVF9D SEVDS1NVTVMKKyV0b2tlbiBLX0xJU1RfU0xPVFMKIAogJXR5cGUgPG5vZGU+CWNvbW1hbmQK ICV0eXBlIDxub2RlPgliYXNlX2JhY2t1cCBzdGFydF9yZXBsaWNhdGlvbiBzdGFydF9sb2dp Y2FsX3JlcGxpY2F0aW9uCiAJCQkJY3JlYXRlX3JlcGxpY2F0aW9uX3Nsb3QgZHJvcF9yZXBs aWNhdGlvbl9zbG90IGlkZW50aWZ5X3N5c3RlbQotCQkJCXJlYWRfcmVwbGljYXRpb25fc2xv dCB0aW1lbGluZV9oaXN0b3J5IHNob3cgc3FsX2NtZAorCQkJCXJlYWRfcmVwbGljYXRpb25f c2xvdCB0aW1lbGluZV9oaXN0b3J5IHNob3cgc3FsX2NtZCBsaXN0X3Nsb3RzCiAldHlwZSA8 bGlzdD4JYmFzZV9iYWNrdXBfbGVnYWN5X29wdF9saXN0IGdlbmVyaWNfb3B0aW9uX2xpc3QK ICV0eXBlIDxkZWZlbHQ+CWJhc2VfYmFja3VwX2xlZ2FjeV9vcHQgZ2VuZXJpY19vcHRpb24K ICV0eXBlIDx1aW50dmFsPglvcHRfdGltZWxpbmUKQEAgLTEwNiw2ICsxMDcsNyBAQCBzdGF0 aWMgU1FMQ21kICptYWtlX3NxbGNtZCh2b2lkKTsKICV0eXBlIDxib29sdmFsPglvcHRfdGVt cG9yYXJ5CiAldHlwZSA8bGlzdD4JY3JlYXRlX3Nsb3Rfb3B0aW9ucyBjcmVhdGVfc2xvdF9s ZWdhY3lfb3B0X2xpc3QKICV0eXBlIDxkZWZlbHQ+CWNyZWF0ZV9zbG90X2xlZ2FjeV9vcHQK KyV0eXBlIDxsaXN0PglzbG90X25hbWVfbGlzdCBzbG90X25hbWVfbGlzdF9vcHQKIAogJSUK IApAQCAtMTI5LDYgKzEzMSw3IEBAIGNvbW1hbmQ6CiAJCQl8IHJlYWRfcmVwbGljYXRpb25f c2xvdAogCQkJfCB0aW1lbGluZV9oaXN0b3J5CiAJCQl8IHNob3cKKwkJCXwgbGlzdF9zbG90 cwogCQkJfCBzcWxfY21kCiAJCQk7CiAKQEAgLTE0Miw2ICsxNDUsMzMgQEAgaWRlbnRpZnlf c3lzdGVtOgogCQkJCX0KIAkJCTsKIAorc2xvdF9uYW1lX2xpc3Q6CisJCQlJREVOVAorCQkJ CXsKKwkJCQkJJCQgPSBsaXN0X21ha2UxKCQxKTsKKwkJCQl9CisJCQl8IHNsb3RfbmFtZV9s aXN0ICcsJyBJREVOVAorCQkJCXsKKwkJCQkJJCQgPSBsYXBwZW5kKCQxLCAkMyk7CisJCQkJ fQorCitzbG90X25hbWVfbGlzdF9vcHQ6CisJCQlzbG90X25hbWVfbGlzdAkJCXsgJCQgPSAk MTsgfQorCQkJfCAvKiBFTVBUWSAqLwkJCXsgJCQgPSBOSUw7IH0KKwkJOworCisvKgorICog TElTVF9TTE9UUworICovCitsaXN0X3Nsb3RzOgorCQkJS19MSVNUX1NMT1RTIHNsb3RfbmFt ZV9saXN0X29wdAorCQkJCXsKKwkJCQkJTGlzdFNsb3RzQ21kICpjbWQgPSBtYWtlTm9kZShM aXN0U2xvdHNDbWQpOworCQkJCQljbWQtPnNsb3RfbmFtZXMgPSAkMjsKKwkJCQkJJCQgPSAo Tm9kZSAqKSBjbWQ7CisJCQkJfQorCQkJOworCiAvKgogICogUkVBRF9SRVBMSUNBVElPTl9T TE9UICVzCiAgKi8KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3JlcGxf c2Nhbm5lci5sIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vcmVwbF9zY2FubmVyLmwKaW5k ZXggMWI1OTljMjU1ZS4uOWVlNjM4MzU1ZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVw bGljYXRpb24vcmVwbF9zY2FubmVyLmwKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24v cmVwbF9zY2FubmVyLmwKQEAgLTg1LDYgKzg1LDcgQEAgaWRlbnRpZmllcgkJe2lkZW50X3N0 YXJ0fXtpZGVudF9jb250fSoKIEJBU0VfQkFDS1VQCQkJeyByZXR1cm4gS19CQVNFX0JBQ0tV UDsgfQogRkFTVAkJCXsgcmV0dXJuIEtfRkFTVDsgfQogSURFTlRJRllfU1lTVEVNCQl7IHJl dHVybiBLX0lERU5USUZZX1NZU1RFTTsgfQorTElTVF9TTE9UUwkJeyByZXR1cm4gS19MSVNU X1NMT1RTOyB9CiBSRUFEX1JFUExJQ0FUSU9OX1NMT1QJeyByZXR1cm4gS19SRUFEX1JFUExJ Q0FUSU9OX1NMT1Q7IH0KIFNIT1cJCXsgcmV0dXJuIEtfU0hPVzsgfQogTEFCRUwJCQl7IHJl dHVybiBLX0xBQkVMOyB9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9z bG90ZnVuY3MuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Nsb3RmdW5jcy5jCmluZGV4 IGQxMWRhZWIxZmMuLmU5M2ZlYTU1YWQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxp Y2F0aW9uL3Nsb3RmdW5jcy5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Nsb3Rm dW5jcy5jCkBAIC00ODQsNyArNDg0LDcgQEAgcGdfcGh5c2ljYWxfcmVwbGljYXRpb25fc2xv dF9hZHZhbmNlKFhMb2dSZWNQdHIgbW92ZXRvKQogICogV0FMIGFuZCByZW1vdmFsIG9mIG9s ZCBjYXRhbG9nIHR1cGxlcy4gIEFzIGRlY29kaW5nIGlzIGRvbmUgaW4gZmFzdF9mb3J3YXJk CiAgKiBtb2RlLCBubyBjaGFuZ2VzIGFyZSBnZW5lcmF0ZWQgYW55d2F5LgogICovCi1zdGF0 aWMgWExvZ1JlY1B0cgorWExvZ1JlY1B0cgogcGdfbG9naWNhbF9yZXBsaWNhdGlvbl9zbG90 X2FkdmFuY2UoWExvZ1JlY1B0ciBtb3ZldG8pCiB7CiAJTG9naWNhbERlY29kaW5nQ29udGV4 dCAqY3R4OwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vd2Fsc2VuZGVy LmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi93YWxzZW5kZXIuYwppbmRleCA4NDkxNWVk OTViLi4yZmNlMjkwZWQ2IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi93 YWxzZW5kZXIuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi93YWxzZW5kZXIuYwpA QCAtNDU2LDYgKzQ1NiwxOTQgQEAgSWRlbnRpZnlTeXN0ZW0odm9pZCkKIAllbmRfdHVwX291 dHB1dCh0c3RhdGUpOwogfQogCitzdGF0aWMgaW50CitwZ19xc29ydF9uYW1lY21wKGNvbnN0 IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpCit7CisJcmV0dXJuIHN0cm5jbXAoTmFtZVN0cigq KE5hbWUpIGEpLCBOYW1lU3RyKCooTmFtZSkgYiksIE5BTUVEQVRBTEVOKTsKK30KKworLyoK KyAqIEhhbmRsZSB0aGUgTElTVF9TTE9UUyBjb21tYW5kLgorICovCitzdGF0aWMgdm9pZAor TGlzdFNsb3RzKExpc3RTbG90c0NtZCAqY21kKQoreworCURlc3RSZWNlaXZlciAqZGVzdDsK KwlUdXBPdXRwdXRTdGF0ZSAqdHN0YXRlOworCVR1cGxlRGVzYwl0dXBkZXNjOworCU5hbWVE YXRhICAgKnNsb3RfbmFtZXM7CisJaW50CQkJbnVtc2xvdF9uYW1lczsKKworCW51bXNsb3Rf bmFtZXMgPSBsaXN0X2xlbmd0aChjbWQtPnNsb3RfbmFtZXMpOworCWlmIChudW1zbG90X25h bWVzKQorCXsKKwkJTGlzdENlbGwgICAqbGM7CisJCWludAkJCWkgPSAwOworCisJCXNsb3Rf bmFtZXMgPSBwYWxsb2MobnVtc2xvdF9uYW1lcyAqIHNpemVvZihOYW1lRGF0YSkpOworCQlm b3JlYWNoKGxjLCBjbWQtPnNsb3RfbmFtZXMpCisJCXsKKwkJCWNoYXIJICAgKnNsb3RfbmFt ZSA9IGxmaXJzdChsYyk7CisKKwkJCVJlcGxpY2F0aW9uU2xvdFZhbGlkYXRlTmFtZShzbG90 X25hbWUsIEVSUk9SKTsKKwkJCW5hbWVzdHJjcHkoJnNsb3RfbmFtZXNbaSsrXSwgc2xvdF9u YW1lKTsKKwkJfQorCisJCXFzb3J0KHNsb3RfbmFtZXMsIG51bXNsb3RfbmFtZXMsIHNpemVv ZihOYW1lRGF0YSksIHBnX3Fzb3J0X25hbWVjbXApOworCX0KKworCWRlc3QgPSBDcmVhdGVE ZXN0UmVjZWl2ZXIoRGVzdFJlbW90ZVNpbXBsZSk7CisKKwkvKiBuZWVkIGEgdHVwbGUgZGVz Y3JpcHRvciByZXByZXNlbnRpbmcgZm91ciBjb2x1bW5zICovCisJdHVwZGVzYyA9IENyZWF0 ZVRlbXBsYXRlVHVwbGVEZXNjKDEwKTsKKwlUdXBsZURlc2NJbml0QnVpbHRpbkVudHJ5KHR1 cGRlc2MsIChBdHRyTnVtYmVyKSAxLCAic2xvdF9uYW1lIiwKKwkJCQkJCQkgIFRFWFRPSUQs IC0xLCAwKTsKKwlUdXBsZURlc2NJbml0QnVpbHRpbkVudHJ5KHR1cGRlc2MsIChBdHRyTnVt YmVyKSAyLCAicGx1Z2luIiwKKwkJCQkJCQkgIFRFWFRPSUQsIC0xLCAwKTsKKwlUdXBsZURl c2NJbml0QnVpbHRpbkVudHJ5KHR1cGRlc2MsIChBdHRyTnVtYmVyKSAzLCAic2xvdF90eXBl IiwKKwkJCQkJCQkgIFRFWFRPSUQsIC0xLCAwKTsKKwlUdXBsZURlc2NJbml0QnVpbHRpbkVu dHJ5KHR1cGRlc2MsIChBdHRyTnVtYmVyKSA0LCAiZGF0b2lkIiwKKwkJCQkJCQkgIElOVDhP SUQsIC0xLCAwKTsKKwlUdXBsZURlc2NJbml0QnVpbHRpbkVudHJ5KHR1cGRlc2MsIChBdHRy TnVtYmVyKSA1LCAiZGF0YWJhc2UiLAorCQkJCQkJCSAgVEVYVE9JRCwgLTEsIDApOworCVR1 cGxlRGVzY0luaXRCdWlsdGluRW50cnkodHVwZGVzYywgKEF0dHJOdW1iZXIpIDYsICJ0ZW1w b3JhcnkiLAorCQkJCQkJCSAgSU5UNE9JRCwgLTEsIDApOworCVR1cGxlRGVzY0luaXRCdWls dGluRW50cnkodHVwZGVzYywgKEF0dHJOdW1iZXIpIDcsICJ4bWluIiwKKwkJCQkJCQkgIElO VDhPSUQsIC0xLCAwKTsKKwlUdXBsZURlc2NJbml0QnVpbHRpbkVudHJ5KHR1cGRlc2MsIChB dHRyTnVtYmVyKSA4LCAiY2F0YWxvZ194bWluIiwKKwkJCQkJCQkgIElOVDhPSUQsIC0xLCAw KTsKKwlUdXBsZURlc2NJbml0QnVpbHRpbkVudHJ5KHR1cGRlc2MsIChBdHRyTnVtYmVyKSA5 LCAicmVzdGFydF9sc24iLAorCQkJCQkJCSAgVEVYVE9JRCwgLTEsIDApOworCVR1cGxlRGVz Y0luaXRCdWlsdGluRW50cnkodHVwZGVzYywgKEF0dHJOdW1iZXIpIDEwLCAiY29uZmlybWVk X2ZsdXNoIiwKKwkJCQkJCQkgIFRFWFRPSUQsIC0xLCAwKTsKKworCS8qIHByZXBhcmUgZm9y IHByb2plY3Rpb24gb2YgdHVwbGVzICovCisJdHN0YXRlID0gYmVnaW5fdHVwX291dHB1dF90 dXBkZXNjKGRlc3QsIHR1cGRlc2MsICZUVFNPcHNWaXJ0dWFsKTsKKworCUxXTG9ja0FjcXVp cmUoUmVwbGljYXRpb25TbG90Q29udHJvbExvY2ssIExXX1NIQVJFRCk7CisJZm9yIChpbnQg c2xvdG5vID0gMDsgc2xvdG5vIDwgbWF4X3JlcGxpY2F0aW9uX3Nsb3RzOyBzbG90bm8rKykK Kwl7CisJCVJlcGxpY2F0aW9uU2xvdCAqc2xvdCA9ICZSZXBsaWNhdGlvblNsb3RDdGwtPnJl cGxpY2F0aW9uX3Nsb3RzW3Nsb3Rub107CisJCWNoYXIJCXJlc3RhcnRfbHNuX3N0cltNQVhG TkFNRUxFTl07CisJCWNoYXIJCWNvbmZpcm1lZF9mbHVzaF9sc25fc3RyW01BWEZOQU1FTEVO XTsKKwkJRGF0dW0JCXZhbHVlc1sxMF07CisJCWJvb2wJCW51bGxzWzEwXTsKKworCQlSZXBs aWNhdGlvblNsb3RQZXJzaXN0ZW5jeSBwZXJzaXN0ZW5jeTsKKwkJVHJhbnNhY3Rpb25JZCB4 bWluOworCQlUcmFuc2FjdGlvbklkIGNhdGFsb2dfeG1pbjsKKwkJWExvZ1JlY1B0cglyZXN0 YXJ0X2xzbjsKKwkJWExvZ1JlY1B0cgljb25maXJtZWRfZmx1c2hfbHNuOworCQlPaWQJCQlk YXRvaWQ7CisJCU5hbWVEYXRhCXNsb3RfbmFtZTsKKwkJTmFtZURhdGEJcGx1Z2luOworCQlp bnQJCQlpOworCQlpbnQ2NAkJdG1wYmlnaW50OworCisJCWlmICghc2xvdC0+aW5fdXNlKQor CQkJY29udGludWU7CisKKwkJU3BpbkxvY2tBY3F1aXJlKCZzbG90LT5tdXRleCk7CisKKwkJ eG1pbiA9IHNsb3QtPmRhdGEueG1pbjsKKwkJY2F0YWxvZ194bWluID0gc2xvdC0+ZGF0YS5j YXRhbG9nX3htaW47CisJCWRhdG9pZCA9IHNsb3QtPmRhdGEuZGF0YWJhc2U7CisJCXJlc3Rh cnRfbHNuID0gc2xvdC0+ZGF0YS5yZXN0YXJ0X2xzbjsKKwkJY29uZmlybWVkX2ZsdXNoX2xz biA9IHNsb3QtPmRhdGEuY29uZmlybWVkX2ZsdXNoOworCQluYW1lc3RyY3B5KCZzbG90X25h bWUsIE5hbWVTdHIoc2xvdC0+ZGF0YS5uYW1lKSk7CisJCW5hbWVzdHJjcHkoJnBsdWdpbiwg TmFtZVN0cihzbG90LT5kYXRhLnBsdWdpbikpOworCQlwZXJzaXN0ZW5jeSA9IHNsb3QtPmRh dGEucGVyc2lzdGVuY3k7CisKKwkJU3BpbkxvY2tSZWxlYXNlKCZzbG90LT5tdXRleCk7CisK KwkJaWYgKG51bXNsb3RfbmFtZXMgJiYKKwkJCSFic2VhcmNoKCh2b2lkICopICZzbG90X25h bWUsICh2b2lkICopIHNsb3RfbmFtZXMsCisJCQkJCSBudW1zbG90X25hbWVzLCBzaXplb2Yo TmFtZURhdGEpLCBwZ19xc29ydF9uYW1lY21wKSkKKwkJCWNvbnRpbnVlOworCisJCW1lbXNl dChudWxscywgMCwgc2l6ZW9mKG51bGxzKSk7CisKKwkJaSA9IDA7CisJCXZhbHVlc1tpKytd ID0gQ1N0cmluZ0dldFRleHREYXR1bShOYW1lU3RyKHNsb3RfbmFtZSkpOworCisJCWlmIChk YXRvaWQgPT0gSW52YWxpZE9pZCkKKwkJCW51bGxzW2krK10gPSB0cnVlOworCQllbHNlCisJ CQl2YWx1ZXNbaSsrXSA9IENTdHJpbmdHZXRUZXh0RGF0dW0oTmFtZVN0cihwbHVnaW4pKTsK KworCQlpZiAoZGF0b2lkID09IEludmFsaWRPaWQpCisJCQl2YWx1ZXNbaSsrXSA9IENTdHJp bmdHZXRUZXh0RGF0dW0oInBoeXNpY2FsIik7CisJCWVsc2UKKwkJCXZhbHVlc1tpKytdID0g Q1N0cmluZ0dldFRleHREYXR1bSgibG9naWNhbCIpOworCisJCWlmIChkYXRvaWQgPT0gSW52 YWxpZE9pZCkKKwkJCW51bGxzW2krK10gPSB0cnVlOworCQllbHNlCisJCXsKKwkJCXRtcGJp Z2ludCA9IGRhdG9pZDsKKwkJCXZhbHVlc1tpKytdID0gSW50NjRHZXREYXR1bSh0bXBiaWdp bnQpOworCQl9CisKKwkJaWYgKGRhdG9pZCA9PSBJbnZhbGlkT2lkKQorCQkJbnVsbHNbaSsr XSA9IHRydWU7CisJCWVsc2UKKwkJeworCQkJTWVtb3J5Q29udGV4dCBjdXIgPSBDdXJyZW50 TWVtb3J5Q29udGV4dDsKKworCQkJLyogc3lzY2FjaGUgYWNjZXNzIG5lZWRzIGEgdHJhbnNh Y3Rpb24gZW52LiAqLworCQkJU3RhcnRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKKwkJCS8qIG1h a2UgZGJuYW1lIGxpdmUgb3V0c2lkZSBUWCBjb250ZXh0ICovCisJCQlNZW1vcnlDb250ZXh0 U3dpdGNoVG8oY3VyKTsKKwkJCXZhbHVlc1tpKytdID0gQ1N0cmluZ0dldFRleHREYXR1bShn ZXRfZGF0YWJhc2VfbmFtZShkYXRvaWQpKTsKKwkJCUNvbW1pdFRyYW5zYWN0aW9uQ29tbWFu ZCgpOworCQkJLyogQ29tbWl0VHJhbnNhY3Rpb25Db21tYW5kIHN3aXRjaGVzIHRvIFRvcE1l bW9yeUNvbnRleHQgKi8KKwkJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhjdXIpOworCQl9CisK KwkJdmFsdWVzW2krK10gPSBJbnQzMkdldERhdHVtKHBlcnNpc3RlbmN5ID09IFJTX1RFTVBP UkFSWSA/IDEgOiAwKTsKKworCQlpZiAoeG1pbiAhPSBJbnZhbGlkVHJhbnNhY3Rpb25JZCkK KwkJeworCQkJdG1wYmlnaW50ID0geG1pbjsKKwkJCXZhbHVlc1tpKytdID0gSW50NjRHZXRE YXR1bSh0bXBiaWdpbnQpOworCQl9CisJCWVsc2UKKwkJCW51bGxzW2krK10gPSB0cnVlOwor CisJCWlmIChjYXRhbG9nX3htaW4gIT0gSW52YWxpZFRyYW5zYWN0aW9uSWQpCisJCXsKKwkJ CXRtcGJpZ2ludCA9IGNhdGFsb2dfeG1pbjsKKwkJCXZhbHVlc1tpKytdID0gSW50NjRHZXRE YXR1bSh0bXBiaWdpbnQpOworCQl9CisJCWVsc2UKKwkJCW51bGxzW2krK10gPSB0cnVlOwor CisJCWlmIChyZXN0YXJ0X2xzbiAhPSBJbnZhbGlkWExvZ1JlY1B0cikKKwkJeworCQkJc25w cmludGYocmVzdGFydF9sc25fc3RyLCBzaXplb2YocmVzdGFydF9sc25fc3RyKSwgIiVYLyVY IiwKKwkJCQkJIExTTl9GT1JNQVRfQVJHUyhyZXN0YXJ0X2xzbikpOworCQkJdmFsdWVzW2kr K10gPSBDU3RyaW5nR2V0VGV4dERhdHVtKHJlc3RhcnRfbHNuX3N0cik7CisJCX0KKwkJZWxz ZQorCQkJbnVsbHNbaSsrXSA9IHRydWU7CisKKwkJaWYgKGNvbmZpcm1lZF9mbHVzaF9sc24g IT0gSW52YWxpZFhMb2dSZWNQdHIpCisJCXsKKwkJCXNucHJpbnRmKGNvbmZpcm1lZF9mbHVz aF9sc25fc3RyLCBzaXplb2YoY29uZmlybWVkX2ZsdXNoX2xzbl9zdHIpLAorCQkJCQkgIiVY LyVYIiwgTFNOX0ZPUk1BVF9BUkdTKGNvbmZpcm1lZF9mbHVzaF9sc24pKTsKKwkJCXZhbHVl c1tpKytdID0gQ1N0cmluZ0dldFRleHREYXR1bShjb25maXJtZWRfZmx1c2hfbHNuX3N0cik7 CisJCX0KKwkJZWxzZQorCQkJbnVsbHNbaSsrXSA9IHRydWU7CisKKwkJLyogc2VuZCBpdCB0 byBkZXN0ICovCisJCWRvX3R1cF9vdXRwdXQodHN0YXRlLCB2YWx1ZXMsIG51bGxzKTsKKwl9 CisJTFdMb2NrUmVsZWFzZShSZXBsaWNhdGlvblNsb3RDb250cm9sTG9jayk7CisKKwllbmRf dHVwX291dHB1dCh0c3RhdGUpOworfQorCiAvKiBIYW5kbGUgUkVBRF9SRVBMSUNBVElPTl9T TE9UIGNvbW1hbmQgKi8KIHN0YXRpYyB2b2lkCiBSZWFkUmVwbGljYXRpb25TbG90KFJlYWRS ZXBsaWNhdGlvblNsb3RDbWQgKmNtZCkKQEAgLTU1NCw3ICs3NDIsNiBAQCBSZWFkUmVwbGlj YXRpb25TbG90KFJlYWRSZXBsaWNhdGlvblNsb3RDbWQgKmNtZCkKIAllbmRfdHVwX291dHB1 dCh0c3RhdGUpOwogfQogCi0KIC8qCiAgKiBIYW5kbGUgVElNRUxJTkVfSElTVE9SWSBjb21t YW5kLgogICovCkBAIC0xNzQ5LDYgKzE5MzYsMTMgQEAgZXhlY19yZXBsaWNhdGlvbl9jb21t YW5kKGNvbnN0IGNoYXIgKmNtZF9zdHJpbmcpCiAJCQlFbmRSZXBsaWNhdGlvbkNvbW1hbmQo Y21kdGFnKTsKIAkJCWJyZWFrOwogCisJCWNhc2UgVF9MaXN0U2xvdHNDbWQ6CisJCQljbWR0 YWcgPSAiTElTVF9TTE9UUyI7CisJCQlzZXRfcHNfZGlzcGxheShjbWR0YWcpOworCQkJTGlz dFNsb3RzKChMaXN0U2xvdHNDbWQgKikgY21kX25vZGUpOworCQkJRW5kUmVwbGljYXRpb25D b21tYW5kKGNtZHRhZyk7CisJCQlicmVhazsKKwogCQljYXNlIFRfU3RhcnRSZXBsaWNhdGlv bkNtZDoKIAkJCXsKIAkJCQlTdGFydFJlcGxpY2F0aW9uQ21kICpjbWQgPSAoU3RhcnRSZXBs aWNhdGlvbkNtZCAqKSBjbWRfbm9kZTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxz L2FjdGl2aXR5L3dhaXRfZXZlbnQuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3dh aXRfZXZlbnQuYwppbmRleCA0ZDUzZjA0MGU4Li42OTIyMzUzYzk0IDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS93YWl0X2V2ZW50LmMKKysrIGIvc3JjL2JhY2tl bmQvdXRpbHMvYWN0aXZpdHkvd2FpdF9ldmVudC5jCkBAIC0yMzAsNiArMjMwLDkgQEAgcGdz dGF0X2dldF93YWl0X2FjdGl2aXR5KFdhaXRFdmVudEFjdGl2aXR5IHcpCiAJCWNhc2UgV0FJ VF9FVkVOVF9MT0dJQ0FMX0xBVU5DSEVSX01BSU46CiAJCQlldmVudF9uYW1lID0gIkxvZ2lj YWxMYXVuY2hlck1haW4iOwogCQkJYnJlYWs7CisJCWNhc2UgV0FJVF9FVkVOVF9SRVBMX1NM T1RfU1lOQ19NQUlOOgorCQkJZXZlbnRfbmFtZSA9ICJSZXBsU2xvdFN5bmNNYWluIjsKKwkJ CWJyZWFrOwogCQljYXNlIFdBSVRfRVZFTlRfUEdTVEFUX01BSU46CiAJCQlldmVudF9uYW1l ID0gIlBnU3RhdE1haW4iOwogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91 dGlscy9taXNjL2d1Yy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWMuYwppbmRleCBm NzM2ZThkODcyLi5mZjFlYWIwMjA3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9t aXNjL2d1Yy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjLmMKQEAgLTc1LDYg Kzc1LDcgQEAKICNpbmNsdWRlICJwb3N0bWFzdGVyL3N5c2xvZ2dlci5oIgogI2luY2x1ZGUg InBvc3RtYXN0ZXIvd2Fsd3JpdGVyLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vbG9naWNh bGxhdW5jaGVyLmgiCisjaW5jbHVkZSAicmVwbGljYXRpb24vbG9naWNhbHdvcmtlci5oIgog I2luY2x1ZGUgInJlcGxpY2F0aW9uL3Jlb3JkZXJidWZmZXIuaCIKICNpbmNsdWRlICJyZXBs aWNhdGlvbi9zbG90LmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vc3luY3JlcC5oIgpAQCAt NDYzOCw2ICs0NjM5LDI4IEBAIHN0YXRpYyBzdHJ1Y3QgY29uZmlnX3N0cmluZyBDb25maWd1 cmVOYW1lc1N0cmluZ1tdID0KIAkJY2hlY2tfYmFja3RyYWNlX2Z1bmN0aW9ucywgYXNzaWdu X2JhY2t0cmFjZV9mdW5jdGlvbnMsIE5VTEwKIAl9LAogCisJeworCQl7InN5bmNocm9uaXpl X3Nsb3RfbmFtZXMiLCBQR0NfU0lHSFVQLCBSRVBMSUNBVElPTl9TVEFOREJZLAorCQkJZ2V0 dGV4dF9ub29wKCJTZXRzIHRoZSBuYW1lcyBvZiByZXBsaWNhdGlvbiBzbG90cyB3aGljaCB0 byBzeW5jaHJvbml6ZSBmcm9tIHByaW1hcnkgdG8gc3RhbmRieS4iKSwKKwkJCWdldHRleHRf bm9vcCgiVmFsdWUgb2YgXCIqXCIgbWVhbnMgYWxsLiIpLAorCQkJR1VDX0xJU1RfSU5QVVQg fCBHVUNfTElTVF9RVU9URQorCQl9LAorCQkmc3luY2hyb25pemVfc2xvdF9uYW1lcywKKwkJ IiIsCisJCWNoZWNrX3N5bmNocm9uaXplX3Nsb3RfbmFtZXMsIE5VTEwsIE5VTEwKKwl9LAor CisJeworCQl7InN0YW5kYnlfc2xvdF9uYW1lcyIsIFBHQ19TSUdIVVAsIFJFUExJQ0FUSU9O X1BSSU1BUlksCisJCQlnZXR0ZXh0X25vb3AoIkxpc3Qgb2YgcGh5c2ljYWwgc2xvdHMgdGhh dCBtdXN0IGNvbmZpcm0gY2hhbmdlcyBiZWZvcmUgY2hhbmdlcyBhcmUgc2VudCB0byBsb2dp Y2FsIHJlcGxpY2F0aW9uIGNvbnN1bWVycy4iKSwKKwkJCU5VTEwsCisJCQlHVUNfTElTVF9J TlBVVCB8IEdVQ19MSVNUX1FVT1RFCisJCX0sCisJCSZzdGFuZGJ5X3Nsb3RfbmFtZXMsCisJ CSIiLAorCQljaGVja19zdGFuZGJ5X3Nsb3RfbmFtZXMsIE5VTEwsIE5VTEwKKwl9LAorCiAJ LyogRW5kLW9mLWxpc3QgbWFya2VyICovCiAJewogCQl7TlVMTCwgMCwgMCwgTlVMTCwgTlVM TH0sIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZSBiL3NyYy9iYWNrZW5kL3V0 aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZQppbmRleCBhMWFjZDQ2YjYxLi5lOGI1 Zjc2MTI1IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwu Y29uZi5zYW1wbGUKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNv bmYuc2FtcGxlCkBAIC0zMTUsNiArMzE1LDcgQEAKIAkJCQkjIGFuZCBjb21tYS1zZXBhcmF0 ZWQgbGlzdCBvZiBhcHBsaWNhdGlvbl9uYW1lCiAJCQkJIyBmcm9tIHN0YW5kYnkocyk7ICcq JyA9IGFsbAogI3ZhY3V1bV9kZWZlcl9jbGVhbnVwX2FnZSA9IDAJIyBudW1iZXIgb2YgeGFj dHMgYnkgd2hpY2ggY2xlYW51cCBpcyBkZWxheWVkCisjc3RhbmRieV9zbG90X25hbWVzID0g JycJIyBwaHlzaWNhbCBzdGFuZGJ5IHNsb3QgbmFtZXMgdGhhdCBsb2dpY2FsIHJlcGxpY2F0 aW9uIHdhaXRzIGZvcgogCiAjIC0gU3RhbmRieSBTZXJ2ZXJzIC0KIApAQCAtMzQzLDYgKzM0 NCw3IEBACiAjd2FsX3JldHJpZXZlX3JldHJ5X2ludGVydmFsID0gNXMJIyB0aW1lIHRvIHdh aXQgYmVmb3JlIHJldHJ5aW5nIHRvCiAJCQkJCSMgcmV0cmlldmUgV0FMIGFmdGVyIGEgZmFp bGVkIGF0dGVtcHQKICNyZWNvdmVyeV9taW5fYXBwbHlfZGVsYXkgPSAwCQkjIG1pbmltdW0g ZGVsYXkgZm9yIGFwcGx5aW5nIGNoYW5nZXMgZHVyaW5nIHJlY292ZXJ5Cisjc3luY2hyb25p emVfc2xvdF9uYW1lcyA9ICcnCQkjIGxvZ2ljYWwgcmVwbGljYXRpb24gc2xvdHMgdG8gc3lu YyB0byBzdGFuZGJ5CiAKICMgLSBTdWJzY3JpYmVycyAtCiAKZGlmZiAtLWdpdCBhL3NyYy9p bmNsdWRlL2NvbW1hbmRzL3N1YnNjcmlwdGlvbmNtZHMuaCBiL3NyYy9pbmNsdWRlL2NvbW1h bmRzL3N1YnNjcmlwdGlvbmNtZHMuaAppbmRleCBhZWM3ZTQ3OGFiLi4xY2MxOWUwYzk5IDEw MDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jb21tYW5kcy9zdWJzY3JpcHRpb25jbWRzLmgKKysr IGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvc3Vic2NyaXB0aW9uY21kcy5oCkBAIC0xNyw2ICsx Nyw3IEBACiAKICNpbmNsdWRlICJjYXRhbG9nL29iamVjdGFkZHJlc3MuaCIKICNpbmNsdWRl ICJwYXJzZXIvcGFyc2Vfbm9kZS5oIgorI2luY2x1ZGUgInJlcGxpY2F0aW9uL3dhbHJlY2Vp dmVyLmgiCiAKIGV4dGVybiBPYmplY3RBZGRyZXNzIENyZWF0ZVN1YnNjcmlwdGlvbihQYXJz ZVN0YXRlICpwc3RhdGUsIENyZWF0ZVN1YnNjcmlwdGlvblN0bXQgKnN0bXQsCiAJCQkJCQkJ CQkJYm9vbCBpc1RvcExldmVsKTsKQEAgLTI2LDQgKzI3LDYgQEAgZXh0ZXJuIHZvaWQgRHJv cFN1YnNjcmlwdGlvbihEcm9wU3Vic2NyaXB0aW9uU3RtdCAqc3RtdCwgYm9vbCBpc1RvcExl dmVsKTsKIGV4dGVybiBPYmplY3RBZGRyZXNzIEFsdGVyU3Vic2NyaXB0aW9uT3duZXIoY29u c3QgY2hhciAqbmFtZSwgT2lkIG5ld093bmVySWQpOwogZXh0ZXJuIHZvaWQgQWx0ZXJTdWJz Y3JpcHRpb25Pd25lcl9vaWQoT2lkIHN1YmlkLCBPaWQgbmV3T3duZXJJZCk7CiAKK2V4dGVy biB2b2lkIFJlcGxpY2F0aW9uU2xvdERyb3BBdFB1Yk5vZGUoV2FsUmVjZWl2ZXJDb25uICp3 cmNvbm4sIGNoYXIgKnNsb3RuYW1lLCBib29sIG1pc3Npbmdfb2spOworCiAjZW5kaWYJCQkJ CQkJLyogU1VCU0NSSVBUSU9OQ01EU19IICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9u b2Rlcy9ub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvbm9kZXMuaAppbmRleCA3YzY1N2Mx MjQxLi45MjBhNTEwYzRjIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9ub2Rlcy5o CisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL25vZGVzLmgKQEAgLTUwMSw2ICs1MDEsNyBAQCB0 eXBlZGVmIGVudW0gTm9kZVRhZwogCVRfU3RhcnRSZXBsaWNhdGlvbkNtZCwKIAlUX1RpbWVM aW5lSGlzdG9yeUNtZCwKIAlUX1NRTENtZCwKKwlUX0xpc3RTbG90c0NtZCwKIAogCS8qCiAJ ICogVEFHUyBGT1IgUkFORE9NIE9USEVSIFNUVUZGCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVk ZS9ub2Rlcy9yZXBsbm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL3JlcGxub2Rlcy5oCmlu ZGV4IGE3NDZmYWZjMTIuLjNmODE0MDllNTAgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25v ZGVzL3JlcGxub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL3JlcGxub2Rlcy5oCkBA IC0zMyw2ICszMywxNSBAQCB0eXBlZGVmIHN0cnVjdCBJZGVudGlmeVN5c3RlbUNtZAogCU5v ZGVUYWcJCXR5cGU7CiB9IElkZW50aWZ5U3lzdGVtQ21kOwogCisvKiAtLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgKgkJTElTVF9TTE9UUyBjb21tYW5kCisgKiAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgKi8KK3R5cGVkZWYgc3RydWN0IExpc3RTbG90c0NtZAoreworCU5vZGVUYWcJ CXR5cGU7CisJTGlzdAkgICAqc2xvdF9uYW1lczsKK30gTGlzdFNsb3RzQ21kOwogCiAvKiAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKgkJQkFTRV9CQUNLVVAgY29tbWFuZApkaWZmIC0t Z2l0IGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vbG9naWNhbHdvcmtlci5oIGIvc3JjL2lu Y2x1ZGUvcmVwbGljYXRpb24vbG9naWNhbHdvcmtlci5oCmluZGV4IDJhZDYxYTAwMWEuLmY1 YjVlZjA3ZTggMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2xvZ2ljYWx3 b3JrZXIuaAorKysgYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9sb2dpY2Fsd29ya2VyLmgK QEAgLTEyLDggKzEyLDE3IEBACiAjaWZuZGVmIExPR0lDQUxXT1JLRVJfSAogI2RlZmluZSBM T0dJQ0FMV09SS0VSX0gKIAorI2luY2x1ZGUgInV0aWxzL2d1Yy5oIgorCitleHRlcm4gY2hh ciAqc3luY2hyb25pemVfc2xvdF9uYW1lczsKK2V4dGVybiBjaGFyICpzdGFuZGJ5X3Nsb3Rf bmFtZXM7CisKIGV4dGVybiB2b2lkIEFwcGx5V29ya2VyTWFpbihEYXR1bSBtYWluX2FyZyk7 CitleHRlcm4gdm9pZCBSZXBsU2xvdFN5bmNNYWluKERhdHVtIG1haW5fYXJnKTsKIAogZXh0 ZXJuIGJvb2wgSXNMb2dpY2FsV29ya2VyKHZvaWQpOwogCitleHRlcm4gYm9vbCBjaGVja19z eW5jaHJvbml6ZV9zbG90X25hbWVzKGNoYXIgKipuZXd2YWwsIHZvaWQgKipleHRyYSwgR3Vj U291cmNlIHNvdXJjZSk7CitleHRlcm4gYm9vbCBjaGVja19zdGFuZGJ5X3Nsb3RfbmFtZXMo Y2hhciAqKm5ld3ZhbCwgdm9pZCAqKmV4dHJhLCBHdWNTb3VyY2Ugc291cmNlKTsKKwogI2Vu ZGlmCQkJCQkJCS8qIExPR0lDQUxXT1JLRVJfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1 ZGUvcmVwbGljYXRpb24vc2xvdC5oIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vc2xvdC5o CmluZGV4IDUzZDc3M2NjZmYuLmEyOWU1MTc3MDcgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRl L3JlcGxpY2F0aW9uL3Nsb3QuaAorKysgYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9zbG90 LmgKQEAgLTIxNiw3ICsyMTYsNiBAQCBleHRlcm4gdm9pZCBSZXBsaWNhdGlvblNsb3RzRHJv cERCU2xvdHMoT2lkIGRib2lkKTsKIGV4dGVybiBib29sIEludmFsaWRhdGVPYnNvbGV0ZVJl cGxpY2F0aW9uU2xvdHMoWExvZ1NlZ05vIG9sZGVzdFNlZ25vKTsKIGV4dGVybiBSZXBsaWNh dGlvblNsb3QgKlNlYXJjaE5hbWVkUmVwbGljYXRpb25TbG90KGNvbnN0IGNoYXIgKm5hbWUs IGJvb2wgbmVlZF9sb2NrKTsKIGV4dGVybiB2b2lkIFJlcGxpY2F0aW9uU2xvdE5hbWVGb3JU YWJsZXN5bmMoT2lkIHN1Ym9pZCwgT2lkIHJlbGlkLCBjaGFyICpzeW5jc2xvdG5hbWUsIGlu dCBzenNsb3QpOwotZXh0ZXJuIHZvaWQgUmVwbGljYXRpb25TbG90RHJvcEF0UHViTm9kZShX YWxSZWNlaXZlckNvbm4gKndyY29ubiwgY2hhciAqc2xvdG5hbWUsIGJvb2wgbWlzc2luZ19v ayk7CiAKIGV4dGVybiB2b2lkIFN0YXJ0dXBSZXBsaWNhdGlvblNsb3RzKHZvaWQpOwogZXh0 ZXJuIHZvaWQgQ2hlY2tQb2ludFJlcGxpY2F0aW9uU2xvdHModm9pZCk7CkBAIC0yMjQsNCAr MjIzLDcgQEAgZXh0ZXJuIHZvaWQgQ2hlY2tQb2ludFJlcGxpY2F0aW9uU2xvdHModm9pZCk7 CiBleHRlcm4gdm9pZCBDaGVja1Nsb3RSZXF1aXJlbWVudHModm9pZCk7CiBleHRlcm4gdm9p ZCBDaGVja1Nsb3RQZXJtaXNzaW9ucyh2b2lkKTsKIAorZXh0ZXJuIFhMb2dSZWNQdHIgcGdf bG9naWNhbF9yZXBsaWNhdGlvbl9zbG90X2FkdmFuY2UoWExvZ1JlY1B0ciBtb3ZldG8pOwor CisKICNlbmRpZgkJCQkJCQkvKiBTTE9UX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRl L3JlcGxpY2F0aW9uL3dhbHJlY2VpdmVyLmggYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi93 YWxyZWNlaXZlci5oCmluZGV4IDBiNjA3ZWQ3NzcuLmRiZWI0NDdlN2EgMTAwNjQ0Ci0tLSBh L3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3dhbHJlY2VpdmVyLmgKKysrIGIvc3JjL2luY2x1 ZGUvcmVwbGljYXRpb24vd2FscmVjZWl2ZXIuaApAQCAtMTgsNiArMTgsNyBAQAogI2luY2x1 ZGUgInBndGltZS5oIgogI2luY2x1ZGUgInBvcnQvYXRvbWljcy5oIgogI2luY2x1ZGUgInJl cGxpY2F0aW9uL2xvZ2ljYWxwcm90by5oIgorI2luY2x1ZGUgInJlcGxpY2F0aW9uL3Nsb3Qu aCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi93YWxzZW5kZXIuaCIKICNpbmNsdWRlICJzdG9y YWdlL2NvbmRpdGlvbl92YXJpYWJsZS5oIgogI2luY2x1ZGUgInN0b3JhZ2UvbGF0Y2guaCIK QEAgLTE4Nyw2ICsxODgsMTMgQEAgdHlwZWRlZiBzdHJ1Y3QKIAl9CQkJcHJvdG87CiB9IFdh bFJjdlN0cmVhbU9wdGlvbnM7CiAKKy8qCisgKiBTbG90IGluZm9ybWF0aW9uIHJlY2VpdmVy IGZyb20gcmVtb3RlLgorICoKKyAqIEN1cnJlbnRseSB0aGlzIGlzIHNhbWUgYXMgUmVwbGlj YXRpb25TbG90UGVyc2lzdGVudERhdGEKKyAqLworI2RlZmluZSBXYWxSZWN2UmVwbGljYXRp b25TbG90RGF0YSBSZXBsaWNhdGlvblNsb3RQZXJzaXN0ZW50RGF0YQorCiBzdHJ1Y3QgV2Fs UmVjZWl2ZXJDb25uOwogdHlwZWRlZiBzdHJ1Y3QgV2FsUmVjZWl2ZXJDb25uIFdhbFJlY2Vp dmVyQ29ubjsKIApAQCAtMjc0LDYgKzI4MiwxMSBAQCB0eXBlZGVmIHZvaWQgKCp3YWxyY3Zf Z2V0X3NlbmRlcmluZm9fZm4pIChXYWxSZWNlaXZlckNvbm4gKmNvbm4sCiB0eXBlZGVmIGNo YXIgKigqd2FscmN2X2lkZW50aWZ5X3N5c3RlbV9mbikgKFdhbFJlY2VpdmVyQ29ubiAqY29u biwKIAkJCQkJCQkJCQkJVGltZUxpbmVJRCAqcHJpbWFyeV90bGkpOwogCisvKgorICogVE9E TworICovCit0eXBlZGVmIExpc3QgKigqd2FscmN2X2xpc3Rfc2xvdHNfZm4pIChXYWxSZWNl aXZlckNvbm4gKmNvbm4sIGNvbnN0IGNoYXIgKnNsb3RzKTsKKwogLyoKICAqIHdhbHJjdl9z ZXJ2ZXJfdmVyc2lvbl9mbgogICoKQEAgLTM4Nyw2ICs0MDAsNyBAQCB0eXBlZGVmIHN0cnVj dCBXYWxSZWNlaXZlckZ1bmN0aW9uc1R5cGUKIAl3YWxyY3ZfZ2V0X2Nvbm5pbmZvX2ZuIHdh bHJjdl9nZXRfY29ubmluZm87CiAJd2FscmN2X2dldF9zZW5kZXJpbmZvX2ZuIHdhbHJjdl9n ZXRfc2VuZGVyaW5mbzsKIAl3YWxyY3ZfaWRlbnRpZnlfc3lzdGVtX2ZuIHdhbHJjdl9pZGVu dGlmeV9zeXN0ZW07CisJd2FscmN2X2xpc3Rfc2xvdHNfZm4gd2FscmN2X2xpc3Rfc2xvdHM7 CiAJd2FscmN2X3NlcnZlcl92ZXJzaW9uX2ZuIHdhbHJjdl9zZXJ2ZXJfdmVyc2lvbjsKIAl3 YWxyY3ZfcmVhZHRpbWVsaW5laGlzdG9yeWZpbGVfZm4gd2FscmN2X3JlYWR0aW1lbGluZWhp c3RvcnlmaWxlOwogCXdhbHJjdl9zdGFydHN0cmVhbWluZ19mbiB3YWxyY3Zfc3RhcnRzdHJl YW1pbmc7CkBAIC00MTEsNiArNDI1LDggQEAgZXh0ZXJuIFBHRExMSU1QT1JUIFdhbFJlY2Vp dmVyRnVuY3Rpb25zVHlwZSAqV2FsUmVjZWl2ZXJGdW5jdGlvbnM7CiAJV2FsUmVjZWl2ZXJG dW5jdGlvbnMtPndhbHJjdl9nZXRfc2VuZGVyaW5mbyhjb25uLCBzZW5kZXJfaG9zdCwgc2Vu ZGVyX3BvcnQpCiAjZGVmaW5lIHdhbHJjdl9pZGVudGlmeV9zeXN0ZW0oY29ubiwgcHJpbWFy eV90bGkpIFwKIAlXYWxSZWNlaXZlckZ1bmN0aW9ucy0+d2FscmN2X2lkZW50aWZ5X3N5c3Rl bShjb25uLCBwcmltYXJ5X3RsaSkKKyNkZWZpbmUgd2FscmN2X2xpc3Rfc2xvdHMoY29ubiwg c2xvdHMpIFwKKwlXYWxSZWNlaXZlckZ1bmN0aW9ucy0+d2FscmN2X2xpc3Rfc2xvdHMoY29u biwgc2xvdHMpCiAjZGVmaW5lIHdhbHJjdl9zZXJ2ZXJfdmVyc2lvbihjb25uKSBcCiAJV2Fs UmVjZWl2ZXJGdW5jdGlvbnMtPndhbHJjdl9zZXJ2ZXJfdmVyc2lvbihjb25uKQogI2RlZmlu ZSB3YWxyY3ZfcmVhZHRpbWVsaW5laGlzdG9yeWZpbGUoY29ubiwgdGxpLCBmaWxlbmFtZSwg Y29udGVudCwgc2l6ZSkgXApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24v d29ya2VyX2ludGVybmFsLmggYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi93b3JrZXJfaW50 ZXJuYWwuaAppbmRleCA5ZDI5ODQ5ZDgwLi41ZGU3ZjgwZTc5IDEwMDY0NAotLS0gYS9zcmMv aW5jbHVkZS9yZXBsaWNhdGlvbi93b3JrZXJfaW50ZXJuYWwuaAorKysgYi9zcmMvaW5jbHVk ZS9yZXBsaWNhdGlvbi93b3JrZXJfaW50ZXJuYWwuaApAQCAtNTgsNyArNTgsNyBAQCB0eXBl ZGVmIHN0cnVjdCBMb2dpY2FsUmVwV29ya2VyCiAJICogZXhpdHMuICBVbmRlciB0aGlzLCBz ZXBhcmF0ZSBidWZmaWxlcyB3b3VsZCBiZSBjcmVhdGVkIGZvciBlYWNoCiAJICogdHJhbnNh Y3Rpb24gd2hpY2ggd2lsbCBiZSBkZWxldGVkIGFmdGVyIHRoZSB0cmFuc2FjdGlvbiBpcyBm aW5pc2hlZC4KIAkgKi8KLQlGaWxlU2V0ICAgICpzdHJlYW1fZmlsZXNldDsKKwlzdHJ1Y3Qg RmlsZVNldCAqc3RyZWFtX2ZpbGVzZXQ7CiAKIAkvKiBTdGF0cy4gKi8KIAlYTG9nUmVjUHRy CWxhc3RfbHNuOwpAQCAtODEsMTMgKzgxLDEzIEBAIGV4dGVybiBMb2dpY2FsUmVwV29ya2Vy ICpNeUxvZ2ljYWxSZXBXb3JrZXI7CiBleHRlcm4gYm9vbCBpbl9yZW1vdGVfdHJhbnNhY3Rp b247CiAKIGV4dGVybiB2b2lkIGxvZ2ljYWxyZXBfd29ya2VyX2F0dGFjaChpbnQgc2xvdCk7 Ci1leHRlcm4gTG9naWNhbFJlcFdvcmtlciAqbG9naWNhbHJlcF93b3JrZXJfZmluZChPaWQg c3ViaWQsIE9pZCByZWxpZCwKK2V4dGVybiBMb2dpY2FsUmVwV29ya2VyICpsb2dpY2FscmVw X3dvcmtlcl9maW5kKE9pZCBkYmlkLCBPaWQgc3ViaWQsIE9pZCByZWxpZCwKIAkJCQkJCQkJ CQkJCWJvb2wgb25seV9ydW5uaW5nKTsKIGV4dGVybiBMaXN0ICpsb2dpY2FscmVwX3dvcmtl cnNfZmluZChPaWQgc3ViaWQsIGJvb2wgb25seV9ydW5uaW5nKTsKIGV4dGVybiB2b2lkIGxv Z2ljYWxyZXBfd29ya2VyX2xhdW5jaChPaWQgZGJpZCwgT2lkIHN1YmlkLCBjb25zdCBjaGFy ICpzdWJuYW1lLAogCQkJCQkJCQkJIE9pZCB1c2VyaWQsIE9pZCByZWxpZCk7Ci1leHRlcm4g dm9pZCBsb2dpY2FscmVwX3dvcmtlcl9zdG9wKE9pZCBzdWJpZCwgT2lkIHJlbGlkKTsKLWV4 dGVybiB2b2lkIGxvZ2ljYWxyZXBfd29ya2VyX3dha2V1cChPaWQgc3ViaWQsIE9pZCByZWxp ZCk7CitleHRlcm4gdm9pZCBsb2dpY2FscmVwX3dvcmtlcl9zdG9wKE9pZCBkYmlkLCBPaWQg c3ViaWQsIE9pZCByZWxpZCk7CitleHRlcm4gdm9pZCBsb2dpY2FscmVwX3dvcmtlcl93YWtl dXAoT2lkIGRiaWQsIE9pZCBzdWJpZCwgT2lkIHJlbGlkKTsKIGV4dGVybiB2b2lkIGxvZ2lj YWxyZXBfd29ya2VyX3dha2V1cF9wdHIoTG9naWNhbFJlcFdvcmtlciAqd29ya2VyKTsKIAog ZXh0ZXJuIGludAlsb2dpY2FscmVwX3N5bmNfd29ya2VyX2NvdW50KE9pZCBzdWJpZCk7CmRp ZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy93YWl0X2V2ZW50LmggYi9zcmMvaW5jbHVk ZS91dGlscy93YWl0X2V2ZW50LmgKaW5kZXggODc4NWE4ZTEyYy4uMzI3NGVhZGU1MyAxMDA2 NDQKLS0tIGEvc3JjL2luY2x1ZGUvdXRpbHMvd2FpdF9ldmVudC5oCisrKyBiL3NyYy9pbmNs dWRlL3V0aWxzL3dhaXRfZXZlbnQuaApAQCAtNDIsNiArNDIsNyBAQCB0eXBlZGVmIGVudW0K IAlXQUlUX0VWRU5UX0NIRUNLUE9JTlRFUl9NQUlOLAogCVdBSVRfRVZFTlRfTE9HSUNBTF9B UFBMWV9NQUlOLAogCVdBSVRfRVZFTlRfTE9HSUNBTF9MQVVOQ0hFUl9NQUlOLAorCVdBSVRf RVZFTlRfUkVQTF9TTE9UX1NZTkNfTUFJTiwKIAlXQUlUX0VWRU5UX1BHU1RBVF9NQUlOLAog CVdBSVRfRVZFTlRfUkVDT1ZFUllfV0FMX1NUUkVBTSwKIAlXQUlUX0VWRU5UX1NZU0xPR0dF Ul9NQUlOLApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVjb3ZlcnkvdC8wMzBfc2xvdF9zeW5j LnBsIGIvc3JjL3Rlc3QvcmVjb3ZlcnkvdC8wMzBfc2xvdF9zeW5jLnBsCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLmM4N2U3ZGMwMTYKLS0tIC9kZXYvbnVsbAor KysgYi9zcmMvdGVzdC9yZWNvdmVyeS90LzAzMF9zbG90X3N5bmMucGwKQEAgLTAsMCArMSw1 OCBAQAorCisjIENvcHlyaWdodCAoYykgMjAyMSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxv cG1lbnQgR3JvdXAKKwordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5nczsKK3VzZSBQb3N0Z3Jl U1FMOjpUZXN0OjpDbHVzdGVyOwordXNlIFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOwordXNl IFRlc3Q6Ok1vcmUgdGVzdHMgPT4gMjsKKworbXkgJG5vZGVfcHJpbWFyeSA9IFBvc3RncmVT UUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygncHJpbWFyeScpOworJG5vZGVfcHJpbWFyeS0+aW5p dChhbGxvd3Nfc3RyZWFtaW5nID0+ICdsb2dpY2FsJyk7Ciskbm9kZV9wcmltYXJ5LT5hcHBl bmRfY29uZigncG9zdGdyZXNxbC5jb25mJywgInN0YW5kYnlfc2xvdF9uYW1lcyA9ICdwc2xv dDEnIik7Ciskbm9kZV9wcmltYXJ5LT5zdGFydDsKKyRub2RlX3ByaW1hcnktPnBzcWwoJ3Bv c3RncmVzJywgcXtTRUxFQ1QgcGdfY3JlYXRlX3BoeXNpY2FsX3JlcGxpY2F0aW9uX3Nsb3Qo J3BzbG90MScpO30pOworCiskbm9kZV9wcmltYXJ5LT5iYWNrdXAoJ2JhY2t1cCcpOworCitt eSAkbm9kZV9waHlzX3N0YW5kYnkgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXco J3BoeXNfc3RhbmRieScpOworJG5vZGVfcGh5c19zdGFuZGJ5LT5pbml0X2Zyb21fYmFja3Vw KCRub2RlX3ByaW1hcnksICdiYWNrdXAnLCBoYXNfc3RyZWFtaW5nID0+IDEpOworJG5vZGVf cGh5c19zdGFuZGJ5LT5hcHBlbmRfY29uZigncG9zdGdyZXNxbC5jb25mJywgInN5bmNocm9u aXplX3Nsb3RfbmFtZXMgPSAnKiciKTsKKyRub2RlX3BoeXNfc3RhbmRieS0+YXBwZW5kX2Nv bmYoJ3Bvc3RncmVzcWwuY29uZicsICJwcmltYXJ5X3Nsb3RfbmFtZSA9ICdwc2xvdDEnIik7 Ciskbm9kZV9waHlzX3N0YW5kYnktPnN0YXJ0OworCiskbm9kZV9wcmltYXJ5LT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSB0MSAoYSBpbnQgUFJJTUFSWSBLRVkpIik7 Ciskbm9kZV9wcmltYXJ5LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHQx IFZBTFVFUyAoMSksICgyKSwgKDMpIik7CisKK215ICRub2RlX3N1YnNjcmliZXIgPSBQb3N0 Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ3N1YnNjcmliZXInKTsKKyRub2RlX3N1YnNj cmliZXItPmluaXQoYWxsb3dzX3N0cmVhbWluZyA9PiAnbG9naWNhbCcpOworJG5vZGVfc3Vi c2NyaWJlci0+c3RhcnQ7CisKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLCAiQ1JFQVRFIFRBQkxFIHQxIChhIGludCBQUklNQVJZIEtFWSkiKTsKKworJG5vZGVf cHJpbWFyeS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgUFVCTElDQVRJT04gcHVi MSBGT1IgQUxMIFRBQkxFUyIpOworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsCisJIkNSRUFURSBTVUJTQ1JJUFRJT04gc3ViMSBDT05ORUNUSU9OICciIC4gKCRu b2RlX3ByaW1hcnktPmNvbm5zdHIgLiAnIGRibmFtZT1wb3N0Z3JlcycpIC4gIicgUFVCTElD QVRJT04gcHViMSIpOworCisjIFdhaXQgZm9yIGluaXRpYWwgc3luYyBvZiBhbGwgc3Vic2Ny aXB0aW9ucworbXkgJHN5bmNlZF9xdWVyeSA9CisgICJTRUxFQ1QgY291bnQoMSkgPSAwIEZS T00gcGdfc3Vic2NyaXB0aW9uX3JlbCBXSEVSRSBzcnN1YnN0YXRlIE5PVCBJTiAoJ3InLCAn cycpOyI7Ciskbm9kZV9zdWJzY3JpYmVyLT5wb2xsX3F1ZXJ5X3VudGlsKCdwb3N0Z3Jlcycs ICRzeW5jZWRfcXVlcnkpCisgIG9yIGRpZSAiVGltZWQgb3V0IHdoaWxlIHdhaXRpbmcgZm9y IHN1YnNjcmliZXIgdG8gc3luY2hyb25pemUgZGF0YSI7CisKK215ICRyZXN1bHQgPSAkbm9k ZV9wcmltYXJ5LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiU0VMRUNUIHNsb3RfbmFtZSwg cGx1Z2luLCBkYXRhYmFzZSBGUk9NIHBnX3JlcGxpY2F0aW9uX3Nsb3RzIFdIRVJFIHNsb3Rf dHlwZSA9ICdsb2dpY2FsJyIpOworCitpcygkcmVzdWx0LCBxcShzdWIxfHBnb3V0cHV0fHBv c3RncmVzKSwgJ2xvZ2ljYWwgc2xvdCBvbiBwcmltYXJ5Jyk7CisKKyMgRklYTUU6IHN0YW5k YnkgbmVlZHMgcmVzdGFydCB0byBwaWNrIHVwIG5ldyBzbG90cworJG5vZGVfcGh5c19zdGFu ZGJ5LT5yZXN0YXJ0Oworc2xlZXAgMzsKKworJHJlc3VsdCA9ICRub2RlX3BoeXNfc3RhbmRi eS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIlNFTEVDVCBzbG90X25hbWUsIHBsdWdpbiwg ZGF0YWJhc2UgRlJPTSBwZ19yZXBsaWNhdGlvbl9zbG90cyIpOworCitpcygkcmVzdWx0LCBx cShzdWIxfHBnb3V0cHV0fHBvc3RncmVzKSwgJ2xvZ2ljYWwgc2xvdCBvbiBzdGFuZGJ5Jyk7 CisKKyRub2RlX3ByaW1hcnktPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8g dDEgVkFMVUVTICg0KSwgKDUpLCAoNikiKTsKKyRub2RlX3ByaW1hcnktPndhaXRfZm9yX2Nh dGNodXAoJ3N1YjEnKTsKCmJhc2UtY29tbWl0OiBlY2U4Yzc2MTkyZmVlMGI3ODUwOTY4ODMy NTYzMWNlYWJjYTQ0ZmY1Ci0tIAoyLjM0LjEKCg== --------------CL5u0SH3Lh4Iv98lK0d6LGv4--