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 1sHbPN-009Wuu-4Q for pgsql-hackers@arkaria.postgresql.org; Thu, 13 Jun 2024 03:45:54 +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 1sHbPK-00CNBg-Pn for pgsql-hackers@arkaria.postgresql.org; Thu, 13 Jun 2024 03:45:51 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1sHbPJ-00CNBX-OT for pgsql-hackers@lists.postgresql.org; Thu, 13 Jun 2024 03:45:51 +0000 Received: from mail.postgrespro.ru ([93.174.131.139]) by makus.postgresql.org with esmtps (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1sHbPD-0013h1-Nz for pgsql-hackers@lists.postgresql.org; Thu, 13 Jun 2024 03:45:49 +0000 Received: from [10.20.0.212] (unknown [176.100.241.77]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client did not present a certificate) (Authenticated sender: a.lepikhov@postgrespro.ru) by mail.postgrespro.ru (Postfix/587) with ESMTPSA id DDAA7E20FDB; Thu, 13 Jun 2024 06:45:38 +0300 (MSK) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=postgrespro.ru; s=mx2023; t=1718250339; bh=1kIYCIDERPd5IStjKZBhPccZstmHBRIdbiEstmlpHKk=; h=Message-ID:Date:User-Agent:Subject:To:Cc:References:From: In-Reply-To:From; b=OCrzOKflje5RDRECJDLkZcZbllXM85hmZ8UJnHXvKb8NN7pnLhVrs9R7BAGEAJukL d8rEgqfTHQvU4VHO9EbXbzIpowHyoUwB+B+u22UIqc5hZW0r112gMgzE4VH8C9FRJ0 HGK4cKOYhUvzA5/DClX5D9No40gRa2zP/n9nXm1ovC2Ek1+ZI2LNJSeIfaphOLdxI4 IJcBZhwRlMd8YVt6g3iBIFNPfLX9v4Ek/jt+AVoT3GFv0JHXSu54yZH4A5Mdi0zK6L W+GNXMsLQzwUY8WGAVyj/7FnSHaXppYSLgl/pcrCNKZorwLHRMsD4ASXWjmGnGxhtJ 8sSImUDLmU+IA== Content-Type: multipart/mixed; boundary="------------0M3S0mTOsewxXC7kZEs0EK0r" Message-ID: <55f680bc-756d-4dd3-ab27-3c6e663b0e4c@postgrespro.ru> Date: Thu, 13 Jun 2024 10:45:38 +0700 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: Removing unneeded self joins To: Alexander Korotkov Cc: Tom Lane , Richard Guo , Alexander Lakhin , "Gregory Stark (as CFM)" , =?UTF-8?Q?Micha=C5=82_K=C5=82eczek?= , PostgreSQL Hackers , Robert Haas References: <64486b0b-0404-e39e-322d-0801154901f3@postgrespro.ru> <0ed2cf02-e655-6ec7-a4fe-52fd8d572f65@gmail.com> <735b5cd4-568d-fbf7-ad8c-dcfb4c3af86e@gmail.com> <2422119.1714691974@sss.pgh.pa.us> <24e93efd-eeac-43a6-a75a-ad68eacb32ee@postgrespro.ru> Content-Language: en-AU From: Andrei Lepikhov Organization: Postgres Professional In-Reply-To: X-KSMG-AntiPhishing: NotDetected X-KSMG-AntiSpam-Interceptor-Info: not scanned X-KSMG-AntiSpam-Status: not scanned, disabled by settings X-KSMG-AntiVirus: Kaspersky Secure Mail Gateway, version 2.1.0.7854, bases: 2024/06/12 23:22:00 #25584396 X-KSMG-AntiVirus-Status: NotDetected, skipped X-KSMG-LinksScanning: not scanned, disabled by settings X-KSMG-Message-Action: skipped X-KSMG-Rule-ID: 1 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. --------------0M3S0mTOsewxXC7kZEs0EK0r Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit On 5/7/24 02:59, Robert Haas wrote: > On Mon, May 6, 2024 at 3:27 PM Alexander Korotkov wrote: >> I agree it was a hurry to put the plan into commit message. I think >> Tom already gave valuable feedback [1] and probably we will get more. >> So, plan is to be decided. One way or the other I'm not going to >> re-commit this without explicit Tom's consent. > > Thanks. I hope we find a way to make it happen. > Rebased onto current master. Nothing new except rebase-related changes and some comment fixes. -- regards, Andrei Lepikhov Postgres Professional --------------0M3S0mTOsewxXC7kZEs0EK0r Content-Type: text/x-patch; charset=UTF-8; name="0001-Remove-useless-self-joins-v49.patch" Content-Disposition: attachment; filename="0001-Remove-useless-self-joins-v49.patch" Content-Transfer-Encoding: base64 RnJvbSA2NjQ2YTJkMTU4NTRlMjkyYzQxYWIxM2M0Y2EyMTk2MmI4OTYzOWY1IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiAiQW5kcmVpIFYuIExlcGlraG92IiA8bGVwaWhvdkBn bWFpbC5jb20+CkRhdGU6IFR1ZSwgNyBNYXkgMjAyNCAxMjowNDoxMyArMDcwMApTdWJqZWN0 OiBbUEFUQ0hdIFJlbW92ZSB1c2VsZXNzIHNlbGYtam9pbnMKTUlNRS1WZXJzaW9uOiAxLjAK Q29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04CkNvbnRlbnQtVHJhbnNm ZXItRW5jb2Rpbmc6IDhiaXQKClRoZSBTZWxmIEpvaW4gRWxpbWluYXRpb24gKFNKRSkgZmVh dHVyZSByZW1vdmVzIGFuIGlubmVyIGpvaW4gb2YgYSBwbGFpbiB0YWJsZQp0byBpdHNlbGYg aW4gdGhlIHF1ZXJ5IHRyZWUgaWYgaXMgcHJvdmVkIHRoYXQgdGhlIGpvaW4gY2FuIGJlIHJl cGxhY2VkIHdpdGgKYSBzY2FuIHdpdGhvdXQgaW1wYWN0aW5nIHRoZSBxdWVyeSByZXN1bHQu ICBTZWxmIGpvaW4gYW5kIGlubmVyIHJlbGF0aW9uIGFyZQpyZXBsYWNlZCB3aXRoIHRoZSBv dXRlciBpbiBxdWVyeSwgZXF1aXZhbGVuY2UgY2xhc3NlcywgYW5kIHBsYW5uZXIgaW5mbwpz dHJ1Y3R1cmVzLiBBbHNvLCBpbm5lciByZXN0cmljdGxpc3QgbW92ZXMgdG8gdGhlIG91dGVy IG9uZSB3aXRoIHJlbW92aW5nCmR1cGxpY2F0ZWQgY2xhdXNlcy4gVGh1cywgdGhpcyBvcHRp bWl6YXRpb24gcmVkdWNlcyB0aGUgbGVuZ3RoIG9mIHRoZSByYW5nZQp0YWJsZSBsaXN0ICh0 aGlzIGVzcGVjaWFsbHkgbWFrZXMgc2Vuc2UgZm9yIHBhcnRpdGlvbmVkIHJlbGF0aW9ucyks IHJlZHVjZXMKdGhlIG51bWJlciBvZiByZXN0cmljdGlvbiBjbGF1c2VzID09PSBzZWxlY3Rp dml0eSBlc3RpbWF0aW9ucywgYW5kIHBvdGVudGlhbGx5CmNhbiBpbXByb3ZlIHRvdGFsIHBs YW5uZXIgcHJlZGljdGlvbiBmb3IgdGhlIHF1ZXJ5LgoKVGhlIFNKRSBwcm9vZiBpcyBiYXNl ZCBvbiBpbm5lcnJlbF9pc191bmlxdWUgbWFjaGluZXJ5LgoKV2UgY2FuIHJlbW92ZSBhIHNl bGYtam9pbiB3aGVuIGZvciBlYWNoIG91dGVyIHJvdzoKIDEuIEF0IG1vc3Qgb25lIGlubmVy IHJvdyBtYXRjaGVzIHRoZSBqb2luIGNsYXVzZS4KIDIuIEVhY2ggbWF0Y2hlZCBpbm5lciBy b3cgbXVzdCBiZSAocGh5c2ljYWxseSkgdGhlIHNhbWUgcm93IGFzIHRoZSBvdXRlciBvbmUu CgpJbiB0aGlzIHBhdGNoIHdlIHVzZSB0aGUgbmV4dCBhcHByb2FjaCB0byBpZGVudGlmeSBh IHNlbGYtam9pbjoKIDEuIENvbGxlY3QgYWxsIG1lcmdlLWpvaW5hYmxlIGpvaW4gcXVhbHMg d2hpY2ggbG9vayBsaWtlIGEueCA9IGIueAogMi4gQWRkIHRvIHRoZSBsaXN0IGFib3ZlIHRo ZSBiYXNlcmV0cmljdGluZm8gb2YgdGhlIGlubmVyIHRhYmxlLgogMy4gQ2hlY2sgaW5uZXJy ZWxfaXNfdW5pcXVlKCkgZm9yIHRoZSBxdWFsIGxpc3QuICBJZiBpdCByZXR1cm5zIGZhbHNl LCBza2lwCnRoaXMgcGFpciBvZiBqb2luaW5nIHRhYmxlcy4KIDQuIENoZWNrIHVuaXF1ZW5l c3MsIHByb3ZlZCBieSB0aGUgYmFzZXJlc3RyaWN0aW5mbyBjbGF1c2VzLiBUbyBwcm92ZQp0 aGUgcG9zc2liaWxpdHkgb2Ygc2VsZi1qb2luIGVsaW1pbmF0aW9uIGlubmVyIGFuZCBvdXRl ciBjbGF1c2VzIG11c3QgaGF2ZQphbiBleGFjdCBtYXRjaC4KClRoZSByZWxhdGlvbiByZXBs YWNlbWVudCBwcm9jZWR1cmUgaXMgbm90IHRyaXZpYWwgYW5kIGl0IGlzIHBhcnRseSBjb21i aW5lZAp3aXRoIHRoZSBvbmUsIHVzZWQgdG8gcmVtb3ZlIHVzZWxlc3MgbGVmdCBqb2lucy4g IFRlc3RzLCBjb3ZlcmluZyB0aGlzIGZlYXR1cmUsCndlcmUgYWRkZWQgdG8gam9pbi5zcWwu ICBTb21lIHJlZ3Jlc3Npb24gdGVzdHMgY2hhbmdlZCBkdWUgdG8gc2VsZi1qb2luIHJlbW92 YWwKbG9naWMuCgpEaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rnci5lcy9tL2ZsYXQvNjQ0ODZi MGItMDQwNC1lMzllLTMyMmQtMDgwMTE1NDkwMWYzJTQwcG9zdGdyZXNwcm8ucnUKQXV0aG9y OiBBbmRyZXkgTGVwaWtob3YsIEFsZXhhbmRlciBLdXptZW5rb3YKUmV2aWV3ZWQtYnk6IFRv bSBMYW5lLCBSb2JlcnQgSGFhcywgQW5kcmVzIEZyZXVuZCwgU2ltb24gUmlnZ3MsIEpvbmF0 aGFuIFMuIEthdHoKUmV2aWV3ZWQtYnk6IERhdmlkIFJvd2xleSwgVGhvbWFzIE11bnJvLCBL b25zdGFudGluIEtuaXpobmlrLCBIZWlra2kgTGlubmFrYW5nYXMKUmV2aWV3ZWQtYnk6IEh5 d2VsIENhcnZlciwgTGF1cmVueiBBbGJlLCBSb25hbiBEdW5rbGF1LCB2aWduZXNoIEMsIFpo aWhvbmcgWXUKUmV2aWV3ZWQtYnk6IEdyZWcgU3RhcmssIEphaW1lIENhc2Fub3ZhLCBNaWNo YcWCIEvFgmVjemVrLCBBbGVuYSBSeWJha2luYQpSZXZpZXdlZC1ieTogQWxleGFuZGVyIEtv cm90a292LCBKaWFuIEhlCi0tLQogZG9jL3NyYy9zZ21sL2NvbmZpZy5zZ21sICAgICAgICAg ICAgICAgICAgfCAgIDE2ICsKIHNyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2luZHhwYXRo LmMgICAgIHwgICAzOSArCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9hbmFseXplam9p bnMuYyB8IDEzMjMgKysrKysrKysrKysrKysrKysrKy0tCiBzcmMvYmFja2VuZC9vcHRpbWl6 ZXIvcGxhbi9wbGFubWFpbi5jICAgICB8ICAgIDUgKwogc3JjL2JhY2tlbmQvb3B0aW1pemVy L3ByZXAvcHJlcHVuaW9uLmMgICAgfCAgICA3ICstCiBzcmMvYmFja2VuZC91dGlscy9taXNj L2d1Y190YWJsZXMuYyAgICAgICB8ICAgMTAgKwogc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5v ZGVzLmggICAgICAgICAgICAgfCAgIDM1ICstCiBzcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0 aHMuaCAgICAgICAgICAgICB8ICAgIDMgKwogc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BsYW5t YWluLmggICAgICAgICAgfCAgICA2ICsKIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvZXF1 aXZjbGFzcy5vdXQgIHwgICAzMCArCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2pvaW4u b3V0ICAgICAgICB8IDEwNjQgKysrKysrKysrKysrKysrKysKIHNyYy90ZXN0L3JlZ3Jlc3Mv ZXhwZWN0ZWQvc3lzdmlld3Mub3V0ICAgIHwgICAgMyArLQogc3JjL3Rlc3QvcmVncmVzcy9z cWwvZXF1aXZjbGFzcy5zcWwgICAgICAgfCAgIDE2ICsKIHNyYy90ZXN0L3JlZ3Jlc3Mvc3Fs L2pvaW4uc3FsICAgICAgICAgICAgIHwgIDQ4NiArKysrKysrKwogc3JjL3Rvb2xzL3BnaW5k ZW50L3R5cGVkZWZzLmxpc3QgICAgICAgICAgfCAgICAzICsKIDE1IGZpbGVzIGNoYW5nZWQs IDI5NjQgaW5zZXJ0aW9ucygrKSwgODIgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZG9j L3NyYy9zZ21sL2NvbmZpZy5zZ21sIGIvZG9jL3NyYy9zZ21sL2NvbmZpZy5zZ21sCmluZGV4 IDY5ODE2OWFmZGIuLjc5MThjNGJhNzQgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9jb25m aWcuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwKQEAgLTU1OTMsNiArNTU5 MywyMiBAQCBBTlkgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPm51bV9zeW5jPC9y ZXBsYWNlYWJsZT4gKCA8cmVwbGFjZWFibGUgY2xhc3M9IgogICAgICAgPC9saXN0aXRlbT4K ICAgICAgPC92YXJsaXN0ZW50cnk+CiAKKyAgICAgPHZhcmxpc3RlbnRyeSBpZD0iZ3VjLWVu YWJsZV9zZWxmX2pvaW5fcmVtb3ZhbCIgeHJlZmxhYmVsPSJlbmFibGVfc2VsZl9qb2luX3Jl bW92YWwiPgorICAgICAgPHRlcm0+PHZhcm5hbWU+ZW5hYmxlX3NlbGZfam9pbl9yZW1vdmFs PC92YXJuYW1lPiAoPHR5cGU+Ym9vbGVhbjwvdHlwZT4pCisgICAgICA8aW5kZXh0ZXJtPgor ICAgICAgIDxwcmltYXJ5Pjx2YXJuYW1lPmVuYWJsZV9zZWxmX2pvaW5fcmVtb3ZhbDwvdmFy bmFtZT4gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXI8L3ByaW1hcnk+CisgICAgICA8L2luZGV4 dGVybT4KKyAgICAgIDwvdGVybT4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICA8cGFyYT4K KyAgICAgICAgRW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgcXVlcnkgcGxhbm5lcidzIG9wdGlt aXphdGlvbiB3aGljaCBhbmFseXNlcworICAgICAgICB0aGUgcXVlcnkgdHJlZSBhbmQgcmVw bGFjZXMgc2VsZiBqb2lucyB3aXRoIHNlbWFudGljYWxseSBlcXVpdmFsZW50CisgICAgICAg IHNpbmdsZSBzY2Fucy4gIFRha2VzIGludG8gY29uc2lkZXJhdGlvbiBvbmx5IHBsYWluIHRh Ymxlcy4KKyAgICAgICAgVGhlIGRlZmF1bHQgaXMgPGxpdGVyYWw+b248L2xpdGVyYWw+Lgor ICAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgIDwvdmFybGlzdGVudHJ5 PgorCiAgICAgIDx2YXJsaXN0ZW50cnkgaWQ9Imd1Yy1lbmFibGUtc2Vxc2NhbiIgeHJlZmxh YmVsPSJlbmFibGVfc2Vxc2NhbiI+CiAgICAgICA8dGVybT48dmFybmFtZT5lbmFibGVfc2Vx c2NhbjwvdmFybmFtZT4gKDx0eXBlPmJvb2xlYW48L3R5cGU+KQogICAgICAgPGluZGV4dGVy bT4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2luZHhwYXRoLmMg Yi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9pbmR4cGF0aC5jCmluZGV4IGMwZmNjN2Q3 OGQuLjIyMzBiMTMxMDQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRo L2luZHhwYXRoLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvaW5keHBhdGgu YwpAQCAtMzQ0MCw2ICszNDQwLDIyIEBAIGJvb2wKIHJlbGF0aW9uX2hhc191bmlxdWVfaW5k ZXhfZm9yKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJCQkJCQkJICBM aXN0ICpyZXN0cmljdGxpc3QsCiAJCQkJCQkJICBMaXN0ICpleHBybGlzdCwgTGlzdCAqb3By bGlzdCkKK3sKKwlyZXR1cm4gcmVsYXRpb25faGFzX3VuaXF1ZV9pbmRleF9leHQocm9vdCwg cmVsLCByZXN0cmljdGxpc3QsCisJCQkJCQkJCQkJIGV4cHJsaXN0LCBvcHJsaXN0LCBOVUxM KTsKK30KKworLyoKKyAqIHJlbGF0aW9uX2hhc191bmlxdWVfaW5kZXhfZXh0CisgKgkgIFNh bWUgYXMgcmVsYXRpb25faGFzX3VuaXF1ZV9pbmRleF9mb3IoKSwgYnV0IHN1cHBvcnRzIGV4 dHJhX2NsYXVzZXMKKyAqCSAgcGFyYW1ldGVyLiAgSWYgZXh0cmFfY2xhdXNlcyBpc24ndCBO VUxMLCByZXR1cm4gYmFzZXJlc3RyaWN0aW5mbyBjbGF1c2VzCisgKgkgIHdoaWNoIHdlcmUg dXNlZCB0byBkZXJpdmUgdW5pcXVlbmVzcy4KKyAqLworYm9vbAorcmVsYXRpb25faGFzX3Vu aXF1ZV9pbmRleF9leHQoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwKKwkJ CQkJCQkgIExpc3QgKnJlc3RyaWN0bGlzdCwKKwkJCQkJCQkgIExpc3QgKmV4cHJsaXN0LCBM aXN0ICpvcHJsaXN0LAorCQkJCQkJCSAgTGlzdCAqKmV4dHJhX2NsYXVzZXMpCiB7CiAJTGlz dENlbGwgICAqaWM7CiAKQEAgLTM0OTUsNiArMzUxMSw3IEBAIHJlbGF0aW9uX2hhc191bmlx dWVfaW5kZXhfZm9yKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJewog CQlJbmRleE9wdEluZm8gKmluZCA9IChJbmRleE9wdEluZm8gKikgbGZpcnN0KGljKTsKIAkJ aW50CQkJYzsKKwkJTGlzdAkgICAqZXhwcnMgPSBOSUw7CiAKIAkJLyoKIAkJICogSWYgdGhl IGluZGV4IGlzIG5vdCB1bmlxdWUsIG9yIG5vdCBpbW1lZGlhdGVseSBlbmZvcmNlZCwgb3Ig aWYgaXQncwpAQCAtMzU0Niw2ICszNTYzLDI0IEBAIHJlbGF0aW9uX2hhc191bmlxdWVfaW5k ZXhfZm9yKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJCQkJaWYgKG1h dGNoX2luZGV4X3RvX29wZXJhbmQocmV4cHIsIGMsIGluZCkpCiAJCQkJewogCQkJCQltYXRj aGVkID0gdHJ1ZTsgLyogY29sdW1uIGlzIHVuaXF1ZSAqLworCisJCQkJCWlmIChibXNfbWVt YmVyc2hpcChyaW5mby0+Y2xhdXNlX3JlbGlkcykgPT0gQk1TX1NJTkdMRVRPTikKKwkJCQkJ eworCQkJCQkJTWVtb3J5Q29udGV4dCBvbGRNZW1DdHggPQorCQkJCQkJCU1lbW9yeUNvbnRl eHRTd2l0Y2hUbyhyb290LT5wbGFubmVyX2N4dCk7CisKKwkJCQkJCS8qCisJCQkJCQkgKiBB ZGQgZmlsdGVyIGNsYXVzZSBpbnRvIGEgbGlzdCBhbGxvd2luZyBjYWxsZXIgdG8KKwkJCQkJ CSAqIGtub3cgaWYgdW5pcXVlbmVzcyBoYXZlIG1hZGUgbm90IG9ubHkgYnkgam9pbgorCQkJ CQkJICogY2xhdXNlcy4KKwkJCQkJCSAqLworCQkJCQkJQXNzZXJ0KGJtc19pc19lbXB0eShy aW5mby0+bGVmdF9yZWxpZHMpIHx8CisJCQkJCQkJICAgYm1zX2lzX2VtcHR5KHJpbmZvLT5y aWdodF9yZWxpZHMpKTsKKwkJCQkJCWlmIChleHRyYV9jbGF1c2VzKQorCQkJCQkJCWV4cHJz ID0gbGFwcGVuZChleHBycywgcmluZm8pOworCQkJCQkJTWVtb3J5Q29udGV4dFN3aXRjaFRv KG9sZE1lbUN0eCk7CisJCQkJCX0KKwogCQkJCQlicmVhazsKIAkJCQl9CiAJCQl9CkBAIC0z NTg4LDcgKzM2MjMsMTEgQEAgcmVsYXRpb25faGFzX3VuaXF1ZV9pbmRleF9mb3IoUGxhbm5l ckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwKIAogCQkvKiBNYXRjaGVkIGFsbCBrZXkg Y29sdW1ucyBvZiB0aGlzIGluZGV4PyAqLwogCQlpZiAoYyA9PSBpbmQtPm5rZXljb2x1bW5z KQorCQl7CisJCQlpZiAoZXh0cmFfY2xhdXNlcykKKwkJCQkqZXh0cmFfY2xhdXNlcyA9IGV4 cHJzOwogCQkJcmV0dXJuIHRydWU7CisJCX0KIAl9CiAKIAlyZXR1cm4gZmFsc2U7CmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9hbmFseXplam9pbnMuYyBiL3Ny Yy9iYWNrZW5kL29wdGltaXplci9wbGFuL2FuYWx5emVqb2lucy5jCmluZGV4IGMzZmQ0YTgx ZjguLmI5MGI5ZTdlYTIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFu L2FuYWx5emVqb2lucy5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL2FuYWx5 emVqb2lucy5jCkBAIC0yMiw2ICsyMiw3IEBACiAgKi8KICNpbmNsdWRlICJwb3N0Z3Jlcy5o IgogCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19jbGFzcy5oIgogI2luY2x1ZGUgIm5vZGVzL25v ZGVGdW5jcy5oIgogI2luY2x1ZGUgIm9wdGltaXplci9qb2luaW5mby5oIgogI2luY2x1ZGUg Im9wdGltaXplci9vcHRpbWl6ZXIuaCIKQEAgLTMxLDEwICszMiwyOCBAQAogI2luY2x1ZGUg Im9wdGltaXplci9yZXN0cmljdGluZm8uaCIKICNpbmNsdWRlICJ1dGlscy9sc3lzY2FjaGUu aCIKIAorLyoKKyAqIFV0aWxpdHkgc3RydWN0dXJlLiBJdCBpcyBuZWVkZWQgdG8gcGVyZm9y bSBhIHNvcnRpbmcgcHJvY2VkdXJlIGFuZCBzaW1wbGlmeQorICogdGhlIHNlYXJjaCBvZiBT SkUtY2FuZGlkYXRlIGJhc2VyZWxzIHJlZmVyZW5jaW5nIHRoZSBzYW1lIGRhdGFiYXNlIHJl bGF0aW9uLgorICogSGF2aW5nIGNvbGxlY3RlZCBhbGwgYmFzZXJlbHMgZnJvbSB0aGUgcXVl cnkgam9pbnRyZWUsIHRoZSBwbGFubmVyIHNvcnRzIHRoZW0KKyAqIGFjY29yZGluZyB0byB0 aGUgcmVsb2lkIHZhbHVlLCBncm91cHMgdGhlbSB3aXRoIHRoZSBuZXh0IHBhc3MgYW5kIGF0 dGVtcHRzIHRvCisgKiByZW1vdmUgc2VsZi1qb2lucy4KKyAqIFByZWxpbWluYXJ5IHNvcnRp bmcgcHJldmVudHMgcXVhZHJhdGljIGJlaGF2aW91ciB0aGF0IGNhbiBiZSBoYXJtZnVsIGlu IHRoZQorICogY2FzZSBvZiBudW1lcm91cyBqb2lucy4KKyAqLwordHlwZWRlZiBzdHJ1Y3QK K3sKKwlpbnQJCQlyZWxpZDsKKwlPaWQJCQlyZWxvaWQ7Cit9IFNlbGZKb2luQ2FuZGlkYXRl OworCitib29sCQllbmFibGVfc2VsZl9qb2luX3JlbW92YWw7CisKIC8qIGxvY2FsIGZ1bmN0 aW9ucyAqLwogc3RhdGljIGJvb2wgam9pbl9pc19yZW1vdmFibGUoUGxhbm5lckluZm8gKnJv b3QsIFNwZWNpYWxKb2luSW5mbyAqc2ppbmZvKTsKLXN0YXRpYyB2b2lkIHJlbW92ZV9yZWxf ZnJvbV9xdWVyeShQbGFubmVySW5mbyAqcm9vdCwgaW50IHJlbGlkLAotCQkJCQkJCQkgIFNw ZWNpYWxKb2luSW5mbyAqc2ppbmZvKTsKKworc3RhdGljIHZvaWQgcmVtb3ZlX2xlZnRqb2lu cmVsX2Zyb21fcXVlcnkoUGxhbm5lckluZm8gKnJvb3QsIGludCByZWxpZCwKKwkJCQkJCQkJ CQkgIFNwZWNpYWxKb2luSW5mbyAqc2ppbmZvKTsKIHN0YXRpYyB2b2lkIHJlbW92ZV9yZWxf ZnJvbV9yZXN0cmljdGluZm8oUmVzdHJpY3RJbmZvICpyaW5mbywKIAkJCQkJCQkJCQkgaW50 IHJlbGlkLCBpbnQgb2pyZWxpZCk7CiBzdGF0aWMgdm9pZCByZW1vdmVfcmVsX2Zyb21fZWNs YXNzKEVxdWl2YWxlbmNlQ2xhc3MgKmVjLApAQCAtNDIsMTQgKzYxLDE4IEBAIHN0YXRpYyB2 b2lkIHJlbW92ZV9yZWxfZnJvbV9lY2xhc3MoRXF1aXZhbGVuY2VDbGFzcyAqZWMsCiBzdGF0 aWMgTGlzdCAqcmVtb3ZlX3JlbF9mcm9tX2pvaW5saXN0KExpc3QgKmpvaW5saXN0LCBpbnQg cmVsaWQsIGludCAqbnJlbW92ZWQpOwogc3RhdGljIGJvb2wgcmVsX3N1cHBvcnRzX2Rpc3Rp bmN0bmVzcyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsKTsKIHN0YXRpYyBi b29sIHJlbF9pc19kaXN0aW5jdF9mb3IoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8g KnJlbCwKLQkJCQkJCQkJTGlzdCAqY2xhdXNlX2xpc3QpOworCQkJCQkJCQlMaXN0ICpjbGF1 c2VfbGlzdCwgTGlzdCAqKmV4dHJhX2NsYXVzZXMpOwogc3RhdGljIE9pZAlkaXN0aW5jdF9j b2xfc2VhcmNoKGludCBjb2xubywgTGlzdCAqY29sbm9zLCBMaXN0ICpvcGlkcyk7CiBzdGF0 aWMgYm9vbCBpc19pbm5lcnJlbF91bmlxdWVfZm9yKFBsYW5uZXJJbmZvICpyb290LAogCQkJ CQkJCQkgICBSZWxpZHMgam9pbnJlbGlkcywKIAkJCQkJCQkJICAgUmVsaWRzIG91dGVycmVs aWRzLAogCQkJCQkJCQkgICBSZWxPcHRJbmZvICppbm5lcnJlbCwKIAkJCQkJCQkJICAgSm9p blR5cGUgam9pbnR5cGUsCi0JCQkJCQkJCSAgIExpc3QgKnJlc3RyaWN0bGlzdCk7CisJCQkJ CQkJCSAgIExpc3QgKnJlc3RyaWN0bGlzdCwKKwkJCQkJCQkJICAgTGlzdCAqKmV4dHJhX2Ns YXVzZXMpOworc3RhdGljIHZvaWQgcmVwbGFjZV92YXJubyhOb2RlICpub2RlLCBpbnQgZnJv bSwgaW50IHRvKTsKK3N0YXRpYyBCaXRtYXBzZXQgKnJlcGxhY2VfcmVsaWQoUmVsaWRzIHJl bGlkcywgaW50IG9sZElkLCBpbnQgbmV3SWQpOworc3RhdGljIGludAlzZWxmX2pvaW5fY2Fu ZGlkYXRlc19jbXAoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYik7CiAKIAogLyoKQEAg LTg3LDcgKzExMCw3IEBAIHJlc3RhcnQ6CiAJCSAqLwogCQlpbm5lcnJlbGlkID0gYm1zX3Np bmdsZXRvbl9tZW1iZXIoc2ppbmZvLT5taW5fcmlnaHRoYW5kKTsKIAotCQlyZW1vdmVfcmVs X2Zyb21fcXVlcnkocm9vdCwgaW5uZXJyZWxpZCwgc2ppbmZvKTsKKwkJcmVtb3ZlX2xlZnRq b2lucmVsX2Zyb21fcXVlcnkocm9vdCwgaW5uZXJyZWxpZCwgc2ppbmZvKTsKIAogCQkvKiBX ZSB2ZXJpZnkgdGhhdCBleGFjdGx5IG9uZSByZWZlcmVuY2UgZ2V0cyByZW1vdmVkIGZyb20g am9pbmxpc3QgKi8KIAkJbnJlbW92ZWQgPSAwOwpAQCAtMjkxLDggKzMxNCw4IEBAIGpvaW5f aXNfcmVtb3ZhYmxlKFBsYW5uZXJJbmZvICpyb290LCBTcGVjaWFsSm9pbkluZm8gKnNqaW5m bykKIAkJCWNvbnRpbnVlOwkJCS8qIG5vdCBtZXJnZWpvaW5hYmxlICovCiAKIAkJLyoKLQkJ ICogQ2hlY2sgaWYgdGhlIGNsYXVzZSBoYXMgdGhlIGZvcm0gIm91dGVyIG9wIGlubmVyIiBv ciAiaW5uZXIgb3AKLQkJICogb3V0ZXIiLCBhbmQgaWYgc28gbWFyayB3aGljaCBzaWRlIGlz IGlubmVyLgorCQkgKiBDaGVjayBpZiBjbGF1c2UgaGFzIHRoZSBmb3JtICJvdXRlciBvcCBp bm5lciIgb3IgImlubmVyIG9wIG91dGVyIiwKKwkJICogYW5kIGlmIHNvIG1hcmsgd2hpY2gg c2lkZSBpcyBpbm5lci4KIAkJICovCiAJCWlmICghY2xhdXNlX3NpZGVzX21hdGNoX2pvaW4o cmVzdHJpY3RpbmZvLCBzamluZm8tPm1pbl9sZWZ0aGFuZCwKIAkJCQkJCQkJCSBpbm5lcnJl bC0+cmVsaWRzKSkKQEAgLTMwNiw3ICszMjksNyBAQCBqb2luX2lzX3JlbW92YWJsZShQbGFu bmVySW5mbyAqcm9vdCwgU3BlY2lhbEpvaW5JbmZvICpzamluZm8pCiAJICogTm93IHRoYXQg d2UgaGF2ZSB0aGUgcmVsZXZhbnQgZXF1YWxpdHkgam9pbiBjbGF1c2VzLCB0cnkgdG8gcHJv dmUgdGhlCiAJICogaW5uZXJyZWwgZGlzdGluY3QuCiAJICovCi0JaWYgKHJlbF9pc19kaXN0 aW5jdF9mb3Iocm9vdCwgaW5uZXJyZWwsIGNsYXVzZV9saXN0KSkKKwlpZiAocmVsX2lzX2Rp c3RpbmN0X2Zvcihyb290LCBpbm5lcnJlbCwgY2xhdXNlX2xpc3QsIE5VTEwpKQogCQlyZXR1 cm4gdHJ1ZTsKIAogCS8qCkBAIC0zMTgsMzEgKzM0MSwyNyBAQCBqb2luX2lzX3JlbW92YWJs ZShQbGFubmVySW5mbyAqcm9vdCwgU3BlY2lhbEpvaW5JbmZvICpzamluZm8pCiAKIAogLyoK LSAqIFJlbW92ZSB0aGUgdGFyZ2V0IHJlbGlkIGFuZCByZWZlcmVuY2VzIHRvIHRoZSB0YXJn ZXQgam9pbiBmcm9tIHRoZQorICogUmVtb3ZlIHRoZSB0YXJnZXQgcmVsLT5yZWxpZCBhbmQg cmVmZXJlbmNlcyB0byB0aGUgdGFyZ2V0IGpvaW4gZnJvbSB0aGUKICAqIHBsYW5uZXIncyBk YXRhIHN0cnVjdHVyZXMsIGhhdmluZyBkZXRlcm1pbmVkIHRoYXQgdGhlcmUgaXMgbm8gbmVl ZAotICogdG8gaW5jbHVkZSB0aGVtIGluIHRoZSBxdWVyeS4KKyAqIHRvIGluY2x1ZGUgdGhl bSBpbiB0aGUgcXVlcnkuICBPcHRpb25hbGx5IHJlcGxhY2UgdGhlbSB3aXRoIHN1YnN0IGlm IHN1YnN0CisgKiBpcyBub24tbmVnYXRpdmUuCiAgKgotICogV2UgYXJlIG5vdCB0ZXJyaWJs eSB0aG9yb3VnaCBoZXJlLiAgV2Ugb25seSBib3RoZXIgdG8gdXBkYXRlIHBhcnRzIG9mCi0g KiB0aGUgcGxhbm5lcidzIGRhdGEgc3RydWN0dXJlcyB0aGF0IHdpbGwgYWN0dWFsbHkgYmUg Y29uc3VsdGVkIGxhdGVyLgorICogVGhpcyBmdW5jdGlvbiB1cGRhdGVzIG9ubHkgcGFydHMg bmVlZGVkIGZvciBib3RoIGxlZnQtam9pbiByZW1vdmFsIGFuZAorICogc2VsZi1qb2luIHJl bW92YWwuCiAgKi8KIHN0YXRpYyB2b2lkCi1yZW1vdmVfcmVsX2Zyb21fcXVlcnkoUGxhbm5l ckluZm8gKnJvb3QsIGludCByZWxpZCwgU3BlY2lhbEpvaW5JbmZvICpzamluZm8pCityZW1v dmVfcmVsX2Zyb21fcXVlcnkoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwK KwkJCQkJICBpbnQgc3Vic3QsIFNwZWNpYWxKb2luSW5mbyAqc2ppbmZvLAorCQkJCQkgIFJl bGlkcyBqb2lucmVsaWRzKQogewotCVJlbE9wdEluZm8gKnJlbCA9IGZpbmRfYmFzZV9yZWwo cm9vdCwgcmVsaWQpOwotCWludAkJCW9qcmVsaWQgPSBzamluZm8tPm9qcmVsaWQ7Ci0JUmVs aWRzCQlqb2lucmVsaWRzOwotCVJlbGlkcwkJam9pbl9wbHVzX2NvbW11dGU7Ci0JTGlzdAkg ICAqam9pbmluZm9zOworCWludAkJCXJlbGlkID0gcmVsLT5yZWxpZDsKKwlpbnQJCQlvanJl bGlkID0gKHNqaW5mbyAhPSBOVUxMKSA/IHNqaW5mby0+b2pyZWxpZCA6IC0xOwogCUluZGV4 CQlydGk7CiAJTGlzdENlbGwgICAqbDsKIAotCS8qIENvbXB1dGUgdGhlIHJlbGlkIHNldCBm b3IgdGhlIGpvaW4gd2UgYXJlIGNvbnNpZGVyaW5nICovCi0Jam9pbnJlbGlkcyA9IGJtc191 bmlvbihzamluZm8tPm1pbl9sZWZ0aGFuZCwgc2ppbmZvLT5taW5fcmlnaHRoYW5kKTsKLQlB c3NlcnQob2pyZWxpZCAhPSAwKTsKLQlqb2lucmVsaWRzID0gYm1zX2FkZF9tZW1iZXIoam9p bnJlbGlkcywgb2pyZWxpZCk7Ci0KIAkvKgotCSAqIFJlbW92ZSByZWZlcmVuY2VzIHRvIHRo ZSByZWwgZnJvbSBvdGhlciBiYXNlcmVscycgYXR0cl9uZWVkZWQgYXJyYXlzLgorCSAqIFJl bW92ZSByZWZlcmVuY2VzIHRvIHRoZSByZWwgZnJvbSBvdGhlciBiYXNlcmVscycgYXR0cl9u ZWVkZWQgYXJyYXlzCisJICogYW5kIGxhdGVyYWxfdmFycyBsaXN0cy4KIAkgKi8KIAlmb3Ig KHJ0aSA9IDE7IHJ0aSA8IHJvb3QtPnNpbXBsZV9yZWxfYXJyYXlfc2l6ZTsgcnRpKyspCiAJ ewpAQCAtMzY0LDE5ICszODMsMjIgQEAgcmVtb3ZlX3JlbF9mcm9tX3F1ZXJ5KFBsYW5uZXJJ bmZvICpyb290LCBpbnQgcmVsaWQsIFNwZWNpYWxKb2luSW5mbyAqc2ppbmZvKQogCQkJIGF0 dHJvZmYtLSkKIAkJewogCQkJb3RoZXJyZWwtPmF0dHJfbmVlZGVkW2F0dHJvZmZdID0KLQkJ CQlibXNfZGVsX21lbWJlcihvdGhlcnJlbC0+YXR0cl9uZWVkZWRbYXR0cm9mZl0sIHJlbGlk KTsKKwkJCQlyZXBsYWNlX3JlbGlkKG90aGVycmVsLT5hdHRyX25lZWRlZFthdHRyb2ZmXSwg cmVsaWQsIHN1YnN0KTsKIAkJCW90aGVycmVsLT5hdHRyX25lZWRlZFthdHRyb2ZmXSA9Ci0J CQkJYm1zX2RlbF9tZW1iZXIob3RoZXJyZWwtPmF0dHJfbmVlZGVkW2F0dHJvZmZdLCBvanJl bGlkKTsKKwkJCQlyZXBsYWNlX3JlbGlkKG90aGVycmVsLT5hdHRyX25lZWRlZFthdHRyb2Zm XSwgb2pyZWxpZCwgc3Vic3QpOwogCQl9CisKKwkJLyogVXBkYXRlIGxhdGVyYWxfdmFycyBs aXN0LiAqLworCQlyZXBsYWNlX3Zhcm5vKChOb2RlICopIG90aGVycmVsLT5sYXRlcmFsX3Zh cnMsIHJlbGlkLCBzdWJzdCk7CiAJfQogCiAJLyoKIAkgKiBVcGRhdGUgYWxsX2Jhc2VyZWxz IGFuZCByZWxhdGVkIHJlbGlkIHNldHMuCiAJICovCi0Jcm9vdC0+YWxsX2Jhc2VyZWxzID0g Ym1zX2RlbF9tZW1iZXIocm9vdC0+YWxsX2Jhc2VyZWxzLCByZWxpZCk7Ci0Jcm9vdC0+b3V0 ZXJfam9pbl9yZWxzID0gYm1zX2RlbF9tZW1iZXIocm9vdC0+b3V0ZXJfam9pbl9yZWxzLCBv anJlbGlkKTsKLQlyb290LT5hbGxfcXVlcnlfcmVscyA9IGJtc19kZWxfbWVtYmVyKHJvb3Qt PmFsbF9xdWVyeV9yZWxzLCByZWxpZCk7Ci0Jcm9vdC0+YWxsX3F1ZXJ5X3JlbHMgPSBibXNf ZGVsX21lbWJlcihyb290LT5hbGxfcXVlcnlfcmVscywgb2pyZWxpZCk7CisJcm9vdC0+YWxs X2Jhc2VyZWxzID0gcmVwbGFjZV9yZWxpZChyb290LT5hbGxfYmFzZXJlbHMsIHJlbGlkLCBz dWJzdCk7CisJcm9vdC0+b3V0ZXJfam9pbl9yZWxzID0gcmVwbGFjZV9yZWxpZChyb290LT5v dXRlcl9qb2luX3JlbHMsIG9qcmVsaWQsIHN1YnN0KTsKKwlyb290LT5hbGxfcXVlcnlfcmVs cyA9IHJlcGxhY2VfcmVsaWQocm9vdC0+YWxsX3F1ZXJ5X3JlbHMsIHJlbGlkLCBzdWJzdCk7 CisJcm9vdC0+YWxsX3F1ZXJ5X3JlbHMgPSByZXBsYWNlX3JlbGlkKHJvb3QtPmFsbF9xdWVy eV9yZWxzLCBvanJlbGlkLCBzdWJzdCk7CiAKIAkvKgogCSAqIExpa2V3aXNlIHJlbW92ZSBy ZWZlcmVuY2VzIGZyb20gU3BlY2lhbEpvaW5JbmZvIGRhdGEgc3RydWN0dXJlcy4KQEAgLTM5 MCwzMCArNDEyLDIyIEBAIHJlbW92ZV9yZWxfZnJvbV9xdWVyeShQbGFubmVySW5mbyAqcm9v dCwgaW50IHJlbGlkLCBTcGVjaWFsSm9pbkluZm8gKnNqaW5mbykKIAl7CiAJCVNwZWNpYWxK b2luSW5mbyAqc2ppbmYgPSAoU3BlY2lhbEpvaW5JbmZvICopIGxmaXJzdChsKTsKIAotCQkv KgotCQkgKiBpbml0c3BsYW4uYyBpcyBmYWlybHkgY2F2YWxpZXIgYWJvdXQgYWxsb3dpbmcg U3BlY2lhbEpvaW5JbmZvcycKLQkJICogbGVmdGhhbmQvcmlnaHRoYW5kIHJlbGlkIHNldHMg dG8gYmUgc2hhcmVkIHdpdGggb3RoZXIgZGF0YQotCQkgKiBzdHJ1Y3R1cmVzLiAgRW5zdXJl IHRoYXQgd2UgZG9uJ3QgbW9kaWZ5IHRoZSBvcmlnaW5hbCByZWxpZCBzZXRzLgotCQkgKiAo VGhlIGNvbW11dGVfeHh4IHNldHMgYXJlIGFsd2F5cyBwZXItU3BlY2lhbEpvaW5JbmZvIHRo b3VnaC4pCi0JCSAqLwotCQlzamluZi0+bWluX2xlZnRoYW5kID0gYm1zX2NvcHkoc2ppbmYt Pm1pbl9sZWZ0aGFuZCk7Ci0JCXNqaW5mLT5taW5fcmlnaHRoYW5kID0gYm1zX2NvcHkoc2pp bmYtPm1pbl9yaWdodGhhbmQpOwotCQlzamluZi0+c3luX2xlZnRoYW5kID0gYm1zX2NvcHko c2ppbmYtPnN5bl9sZWZ0aGFuZCk7Ci0JCXNqaW5mLT5zeW5fcmlnaHRoYW5kID0gYm1zX2Nv cHkoc2ppbmYtPnN5bl9yaWdodGhhbmQpOwotCQkvKiBOb3cgcmVtb3ZlIHJlbGlkIGFuZCBv anJlbGlkIGJpdHMgZnJvbSB0aGUgc2V0czogKi8KLQkJc2ppbmYtPm1pbl9sZWZ0aGFuZCA9 IGJtc19kZWxfbWVtYmVyKHNqaW5mLT5taW5fbGVmdGhhbmQsIHJlbGlkKTsKLQkJc2ppbmYt Pm1pbl9yaWdodGhhbmQgPSBibXNfZGVsX21lbWJlcihzamluZi0+bWluX3JpZ2h0aGFuZCwg cmVsaWQpOwotCQlzamluZi0+c3luX2xlZnRoYW5kID0gYm1zX2RlbF9tZW1iZXIoc2ppbmYt PnN5bl9sZWZ0aGFuZCwgcmVsaWQpOwotCQlzamluZi0+c3luX3JpZ2h0aGFuZCA9IGJtc19k ZWxfbWVtYmVyKHNqaW5mLT5zeW5fcmlnaHRoYW5kLCByZWxpZCk7Ci0JCXNqaW5mLT5taW5f bGVmdGhhbmQgPSBibXNfZGVsX21lbWJlcihzamluZi0+bWluX2xlZnRoYW5kLCBvanJlbGlk KTsKLQkJc2ppbmYtPm1pbl9yaWdodGhhbmQgPSBibXNfZGVsX21lbWJlcihzamluZi0+bWlu X3JpZ2h0aGFuZCwgb2pyZWxpZCk7Ci0JCXNqaW5mLT5zeW5fbGVmdGhhbmQgPSBibXNfZGVs X21lbWJlcihzamluZi0+c3luX2xlZnRoYW5kLCBvanJlbGlkKTsKLQkJc2ppbmYtPnN5bl9y aWdodGhhbmQgPSBibXNfZGVsX21lbWJlcihzamluZi0+c3luX3JpZ2h0aGFuZCwgb2pyZWxp ZCk7CisJCXNqaW5mLT5taW5fbGVmdGhhbmQgPSByZXBsYWNlX3JlbGlkKHNqaW5mLT5taW5f bGVmdGhhbmQsIHJlbGlkLCBzdWJzdCk7CisJCXNqaW5mLT5taW5fcmlnaHRoYW5kID0gcmVw bGFjZV9yZWxpZChzamluZi0+bWluX3JpZ2h0aGFuZCwgcmVsaWQsIHN1YnN0KTsKKwkJc2pp bmYtPnN5bl9sZWZ0aGFuZCA9IHJlcGxhY2VfcmVsaWQoc2ppbmYtPnN5bl9sZWZ0aGFuZCwg cmVsaWQsIHN1YnN0KTsKKwkJc2ppbmYtPnN5bl9yaWdodGhhbmQgPSByZXBsYWNlX3JlbGlk KHNqaW5mLT5zeW5fcmlnaHRoYW5kLCByZWxpZCwgc3Vic3QpOworCQlzamluZi0+bWluX2xl ZnRoYW5kID0gcmVwbGFjZV9yZWxpZChzamluZi0+bWluX2xlZnRoYW5kLCBvanJlbGlkLCBz dWJzdCk7CisJCXNqaW5mLT5taW5fcmlnaHRoYW5kID0gcmVwbGFjZV9yZWxpZChzamluZi0+ bWluX3JpZ2h0aGFuZCwgb2pyZWxpZCwgc3Vic3QpOworCQlzamluZi0+c3luX2xlZnRoYW5k ID0gcmVwbGFjZV9yZWxpZChzamluZi0+c3luX2xlZnRoYW5kLCBvanJlbGlkLCBzdWJzdCk7 CisJCXNqaW5mLT5zeW5fcmlnaHRoYW5kID0gcmVwbGFjZV9yZWxpZChzamluZi0+c3luX3Jp Z2h0aGFuZCwgb2pyZWxpZCwgc3Vic3QpOworCiAJCS8qIHJlbGlkIGNhbm5vdCBhcHBlYXIg aW4gdGhlc2UgZmllbGRzLCBidXQgb2pyZWxpZCBjYW46ICovCi0JCXNqaW5mLT5jb21tdXRl X2Fib3ZlX2wgPSBibXNfZGVsX21lbWJlcihzamluZi0+Y29tbXV0ZV9hYm92ZV9sLCBvanJl bGlkKTsKLQkJc2ppbmYtPmNvbW11dGVfYWJvdmVfciA9IGJtc19kZWxfbWVtYmVyKHNqaW5m LT5jb21tdXRlX2Fib3ZlX3IsIG9qcmVsaWQpOwotCQlzamluZi0+Y29tbXV0ZV9iZWxvd19s ID0gYm1zX2RlbF9tZW1iZXIoc2ppbmYtPmNvbW11dGVfYmVsb3dfbCwgb2pyZWxpZCk7Ci0J CXNqaW5mLT5jb21tdXRlX2JlbG93X3IgPSBibXNfZGVsX21lbWJlcihzamluZi0+Y29tbXV0 ZV9iZWxvd19yLCBvanJlbGlkKTsKKwkJc2ppbmYtPmNvbW11dGVfYWJvdmVfbCA9IHJlcGxh Y2VfcmVsaWQoc2ppbmYtPmNvbW11dGVfYWJvdmVfbCwgb2pyZWxpZCwgc3Vic3QpOworCQlz amluZi0+Y29tbXV0ZV9hYm92ZV9yID0gcmVwbGFjZV9yZWxpZChzamluZi0+Y29tbXV0ZV9h Ym92ZV9yLCBvanJlbGlkLCBzdWJzdCk7CisJCXNqaW5mLT5jb21tdXRlX2JlbG93X2wgPSBy ZXBsYWNlX3JlbGlkKHNqaW5mLT5jb21tdXRlX2JlbG93X2wsIG9qcmVsaWQsIHN1YnN0KTsK KwkJc2ppbmYtPmNvbW11dGVfYmVsb3dfciA9IHJlcGxhY2VfcmVsaWQoc2ppbmYtPmNvbW11 dGVfYmVsb3dfciwgb2pyZWxpZCwgc3Vic3QpOworCisJCXJlcGxhY2VfdmFybm8oKE5vZGUg Kikgc2ppbmYtPnNlbWlfcmhzX2V4cHJzLCByZWxpZCwgc3Vic3QpOwogCX0KIAogCS8qCkBA IC00MzQsMTAgKzQ0OCwxMCBAQCByZW1vdmVfcmVsX2Zyb21fcXVlcnkoUGxhbm5lckluZm8g KnJvb3QsIGludCByZWxpZCwgU3BlY2lhbEpvaW5JbmZvICpzamluZm8pCiAJewogCQlQbGFj ZUhvbGRlckluZm8gKnBoaW5mbyA9IChQbGFjZUhvbGRlckluZm8gKikgbGZpcnN0KGwpOwog Ci0JCUFzc2VydCghYm1zX2lzX21lbWJlcihyZWxpZCwgcGhpbmZvLT5waF9sYXRlcmFsKSk7 CisJCUFzc2VydChzamluZm8gPT0gTlVMTCB8fCAhYm1zX2lzX21lbWJlcihyZWxpZCwgcGhp bmZvLT5waF9sYXRlcmFsKSk7CiAJCWlmIChibXNfaXNfc3Vic2V0KHBoaW5mby0+cGhfbmVl ZGVkLCBqb2lucmVsaWRzKSAmJgogCQkJYm1zX2lzX21lbWJlcihyZWxpZCwgcGhpbmZvLT5w aF9ldmFsX2F0KSAmJgotCQkJIWJtc19pc19tZW1iZXIob2pyZWxpZCwgcGhpbmZvLT5waF9l dmFsX2F0KSkKKwkJCShzamluZm8gPT0gTlVMTCB8fCAhYm1zX2lzX21lbWJlcihvanJlbGlk LCBwaGluZm8tPnBoX2V2YWxfYXQpKSkKIAkJewogCQkJcm9vdC0+cGxhY2Vob2xkZXJfbGlz dCA9IGZvcmVhY2hfZGVsZXRlX2N1cnJlbnQocm9vdC0+cGxhY2Vob2xkZXJfbGlzdCwKIAkJ CQkJCQkJCQkJCQkJCWwpOwpAQCAtNDQ3LDE4ICs0NjEsNTggQEAgcmVtb3ZlX3JlbF9mcm9t X3F1ZXJ5KFBsYW5uZXJJbmZvICpyb290LCBpbnQgcmVsaWQsIFNwZWNpYWxKb2luSW5mbyAq c2ppbmZvKQogCQl7CiAJCQlQbGFjZUhvbGRlclZhciAqcGh2ID0gcGhpbmZvLT5waF92YXI7 CiAKLQkJCXBoaW5mby0+cGhfZXZhbF9hdCA9IGJtc19kZWxfbWVtYmVyKHBoaW5mby0+cGhf ZXZhbF9hdCwgcmVsaWQpOwotCQkJcGhpbmZvLT5waF9ldmFsX2F0ID0gYm1zX2RlbF9tZW1i ZXIocGhpbmZvLT5waF9ldmFsX2F0LCBvanJlbGlkKTsKKwkJCXBoaW5mby0+cGhfZXZhbF9h dCA9IHJlcGxhY2VfcmVsaWQocGhpbmZvLT5waF9ldmFsX2F0LCByZWxpZCwgc3Vic3QpOwor CQkJcGhpbmZvLT5waF9ldmFsX2F0ID0gcmVwbGFjZV9yZWxpZChwaGluZm8tPnBoX2V2YWxf YXQsIG9qcmVsaWQsIHN1YnN0KTsKIAkJCUFzc2VydCghYm1zX2lzX2VtcHR5KHBoaW5mby0+ cGhfZXZhbF9hdCkpOwkvKiBjaGVja2VkIHByZXZpb3VzbHkgKi8KLQkJCXBoaW5mby0+cGhf bmVlZGVkID0gYm1zX2RlbF9tZW1iZXIocGhpbmZvLT5waF9uZWVkZWQsIHJlbGlkKTsKLQkJ CXBoaW5mby0+cGhfbmVlZGVkID0gYm1zX2RlbF9tZW1iZXIocGhpbmZvLT5waF9uZWVkZWQs IG9qcmVsaWQpOworCisJCQlwaGluZm8tPnBoX25lZWRlZCA9IHJlcGxhY2VfcmVsaWQocGhp bmZvLT5waF9uZWVkZWQsIHJlbGlkLCBzdWJzdCk7CisJCQlwaGluZm8tPnBoX25lZWRlZCA9 IHJlcGxhY2VfcmVsaWQocGhpbmZvLT5waF9uZWVkZWQsIG9qcmVsaWQsIHN1YnN0KTsKIAkJ CS8qIHBoX25lZWRlZCBtaWdodCBvciBtaWdodCBub3QgYmVjb21lIGVtcHR5ICovCi0JCQlw aHYtPnBocmVscyA9IGJtc19kZWxfbWVtYmVyKHBodi0+cGhyZWxzLCByZWxpZCk7Ci0JCQlw aHYtPnBocmVscyA9IGJtc19kZWxfbWVtYmVyKHBodi0+cGhyZWxzLCBvanJlbGlkKTsKKwor CQkJcGhpbmZvLT5waF9sYXRlcmFsID0gcmVwbGFjZV9yZWxpZChwaGluZm8tPnBoX2xhdGVy YWwsIHJlbGlkLCBzdWJzdCk7CisJCQkvKgorCQkJICogcGhfbGF0ZXJhbCBtaWdodCBjb250 YWluIHJlbHMgbWVudGlvbmVkIGluIHBoX2V2YWxfYXQgYWZ0ZXIgdGhlCisJCQkgKiByZXBs YWNlbWVudCwgcmVtb3ZlIHRoZW0uCisJCQkgKi8KKwkJCXBoaW5mby0+cGhfbGF0ZXJhbCA9 IGJtc19kaWZmZXJlbmNlKHBoaW5mby0+cGhfbGF0ZXJhbCwgcGhpbmZvLT5waF9ldmFsX2F0 KTsKKwkJCS8qIHBoX2xhdGVyYWwgbWlnaHQgb3IgbWlnaHQgbm90IGJlIGVtcHR5ICovCisK KwkJCXBodi0+cGhyZWxzID0gcmVwbGFjZV9yZWxpZChwaHYtPnBocmVscywgcmVsaWQsIHN1 YnN0KTsKKwkJCXBodi0+cGhyZWxzID0gcmVwbGFjZV9yZWxpZChwaHYtPnBocmVscywgb2py ZWxpZCwgc3Vic3QpOwogCQkJQXNzZXJ0KCFibXNfaXNfZW1wdHkocGh2LT5waHJlbHMpKTsK KworCQkJcmVwbGFjZV92YXJubygoTm9kZSAqKSBwaHYtPnBoZXhwciwgcmVsaWQsIHN1YnN0 KTsKKwogCQkJQXNzZXJ0KHBodi0+cGhudWxsaW5ncmVscyA9PSBOVUxMKTsgLyogbm8gbmVl ZCB0byBhZGp1c3QgKi8KIAkJfQogCX0KK30KKworLyoKKyAqIFJlbW92ZSB0aGUgdGFyZ2V0 IHJlbGlkIGFuZCByZWZlcmVuY2VzIHRvIHRoZSB0YXJnZXQgam9pbiBmcm9tIHRoZQorICog cGxhbm5lcidzIGRhdGEgc3RydWN0dXJlcywgaGF2aW5nIGRldGVybWluZWQgdGhhdCB0aGVy ZSBpcyBubyBuZWVkCisgKiB0byBpbmNsdWRlIHRoZW0gaW4gdGhlIHF1ZXJ5LgorICoKKyAq IFdlIGFyZSBub3QgdGVycmlibHkgdGhvcm91Z2ggaGVyZS4gIFdlIG9ubHkgYm90aGVyIHRv IHVwZGF0ZSBwYXJ0cyBvZgorICogdGhlIHBsYW5uZXIncyBkYXRhIHN0cnVjdHVyZXMgdGhh dCB3aWxsIGFjdHVhbGx5IGJlIGNvbnN1bHRlZCBsYXRlci4KKyAqLworc3RhdGljIHZvaWQK K3JlbW92ZV9sZWZ0am9pbnJlbF9mcm9tX3F1ZXJ5KFBsYW5uZXJJbmZvICpyb290LCBpbnQg cmVsaWQsCisJCQkJCQkJICBTcGVjaWFsSm9pbkluZm8gKnNqaW5mbykKK3sKKwlMaXN0CSAg ICpqb2luaW5mb3M7CisJaW50CQkJb2pyZWxpZCA9IHNqaW5mby0+b2pyZWxpZDsKKwlSZWxP cHRJbmZvICpyZWwgPSBmaW5kX2Jhc2VfcmVsKHJvb3QsIHJlbGlkKTsKKwlSZWxpZHMJCWpv aW5fcGx1c19jb21tdXRlOworCVJlbGlkcwkJam9pbnJlbGlkczsKKwlMaXN0Q2VsbCAgICps OworCisJLyogQ29tcHV0ZSB0aGUgcmVsaWQgc2V0IGZvciB0aGUgam9pbiB3ZSBhcmUgY29u c2lkZXJpbmcgKi8KKwlqb2lucmVsaWRzID0gYm1zX3VuaW9uKHNqaW5mby0+bWluX2xlZnRo YW5kLCBzamluZm8tPm1pbl9yaWdodGhhbmQpOworCUFzc2VydChvanJlbGlkICE9IDApOwor CWpvaW5yZWxpZHMgPSBibXNfYWRkX21lbWJlcihqb2lucmVsaWRzLCBvanJlbGlkKTsKKwor CXJlbW92ZV9yZWxfZnJvbV9xdWVyeShyb290LCByZWwsIC0xLCBzamluZm8sIGpvaW5yZWxp ZHMpOwogCiAJLyoKIAkgKiBSZW1vdmUgYW55IGpvaW5xdWFscyByZWZlcmVuY2luZyB0aGUg cmVsIGZyb20gdGhlIGpvaW5pbmZvIGxpc3RzLgpAQCAtODU2LDkgKzkxMCwxNCBAQCByZWxf c3VwcG9ydHNfZGlzdGluY3RuZXNzKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpy ZWwpCiAgKiBOb3RlIHRoYXQgdGhlIHBhc3NlZC1pbiBjbGF1c2VfbGlzdCBtYXkgYmUgZGVz dHJ1Y3RpdmVseSBtb2RpZmllZCEgIFRoaXMKICAqIGlzIE9LIGZvciBjdXJyZW50IHVzZXMs IGJlY2F1c2UgdGhlIGNsYXVzZV9saXN0IGlzIGJ1aWx0IGJ5IHRoZSBjYWxsZXIgZm9yCiAg KiB0aGUgc29sZSBwdXJwb3NlIG9mIHBhc3NpbmcgdG8gdGhpcyBmdW5jdGlvbi4KKyAqCisg KiBvdXRlcl9leHBycyBjb250YWlucyB0aGUgcmlnaHQgc2lkZXMgb2YgYmFzZXJlc3RyaWN0 aW5mbyBjbGF1c2VzIGxvb2tpbmcKKyAqIGxpa2UgeCA9IGNvbnN0IGlmIGRpc3RpbmN0bmVz cyBpcyBkZXJpdmVkIGZyb20gc3VjaCBjbGF1c2VzLCBub3Qgam9pbmluZm8KKyAqIGNsYXVz ZS4gIFBhc3MgTlVMTCB0byB0aGUgb3V0ZXJfZXhwcnMsIGlmIGl0cyB2YWx1ZSBpcyBub3Qg bmVlZGVkLgogICovCiBzdGF0aWMgYm9vbAotcmVsX2lzX2Rpc3RpbmN0X2ZvcihQbGFubmVy SW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLCBMaXN0ICpjbGF1c2VfbGlzdCkKK3JlbF9p c19kaXN0aW5jdF9mb3IoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwgTGlz dCAqY2xhdXNlX2xpc3QsCisJCQkJCUxpc3QgKipleHRyYV9jbGF1c2VzKQogewogCS8qCiAJ ICogV2UgY291bGQgc2tpcCBhIGNvdXBsZSBvZiB0ZXN0cyBoZXJlIGlmIHdlIGFzc3VtZSBh bGwgY2FsbGVycyBjaGVja2VkCkBAIC04NzEsMTAgKzkzMCwxMSBAQCByZWxfaXNfZGlzdGlu Y3RfZm9yKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsIExpc3QgKmNsYXVz ZV9saXN0KQogCXsKIAkJLyoKIAkJICogRXhhbWluZSB0aGUgaW5kZXhlcyB0byBzZWUgaWYg d2UgaGF2ZSBhIG1hdGNoaW5nIHVuaXF1ZSBpbmRleC4KLQkJICogcmVsYXRpb25faGFzX3Vu aXF1ZV9pbmRleF9mb3IgYXV0b21hdGljYWxseSBhZGRzIGFueSB1c2FibGUKKwkJICogcmVs YXRpb25faGFzX3VuaXF1ZV9pbmRleF9leHQgYXV0b21hdGljYWxseSBhZGRzIGFueSB1c2Fi bGUKIAkJICogcmVzdHJpY3Rpb24gY2xhdXNlcyBmb3IgdGhlIHJlbCwgc28gd2UgbmVlZG4n dCBkbyB0aGF0IGhlcmUuCiAJCSAqLwotCQlpZiAocmVsYXRpb25faGFzX3VuaXF1ZV9pbmRl eF9mb3Iocm9vdCwgcmVsLCBjbGF1c2VfbGlzdCwgTklMLCBOSUwpKQorCQlpZiAocmVsYXRp b25faGFzX3VuaXF1ZV9pbmRleF9leHQocm9vdCwgcmVsLCBjbGF1c2VfbGlzdCwgTklMLCBO SUwsCisJCQkJCQkJCQkJICBleHRyYV9jbGF1c2VzKSkKIAkJCXJldHVybiB0cnVlOwogCX0K IAllbHNlIGlmIChyZWwtPnJ0ZWtpbmQgPT0gUlRFX1NVQlFVRVJZKQpAQCAtMTE4OCw5ICsx MjQ4LDMzIEBAIGlubmVycmVsX2lzX3VuaXF1ZShQbGFubmVySW5mbyAqcm9vdCwKIAkJCQkg ICBKb2luVHlwZSBqb2ludHlwZSwKIAkJCQkgICBMaXN0ICpyZXN0cmljdGxpc3QsCiAJCQkJ ICAgYm9vbCBmb3JjZV9jYWNoZSkKK3sKKwlyZXR1cm4gaW5uZXJyZWxfaXNfdW5pcXVlX2V4 dChyb290LCBqb2lucmVsaWRzLCBvdXRlcnJlbGlkcywgaW5uZXJyZWwsCisJCQkJCQkJCSAg am9pbnR5cGUsIHJlc3RyaWN0bGlzdCwgZm9yY2VfY2FjaGUsIE5VTEwpOworfQorCisvKgor ICogaW5uZXJyZWxfaXNfdW5pcXVlX2V4dAorICoJICBEbyB0aGUgc2FtZSBhcyBpbm5lcnJl bF9pc191bmlxdWUoKSwgYnV0IGFsc28gc2V0IHRvICcqZXh0cmFfY2xhdXNlcycKKyAqCSAg YWRkaXRpb25hbCBjbGF1c2VzIGZyb20gYSBiYXNlcmVzdHJpY3RpbmZvIGxpc3QgdGhhdCB3 ZXJlIHVzZWQgdG8gcHJvdmUKKyAqCSAgdW5pcXVlbmVzcy4gIEEgbm9uIE5VTEwgJ2V4dHJh X2NsYXVzZXMnIGluZGljYXRlcyB0aGF0IHdlJ3JlIGNoZWNraW5nCisgKgkgIGZvciBzZWxm LWpvaW4gYW5kIGNvcnJlc3BvbmRpbmdseSBkZWFsaW5nIHdpdGggZmlsdGVyZWQgY2xhdXNl cy4KKyAqLworYm9vbAoraW5uZXJyZWxfaXNfdW5pcXVlX2V4dChQbGFubmVySW5mbyAqcm9v dCwKKwkJCQkJICAgUmVsaWRzIGpvaW5yZWxpZHMsCisJCQkJCSAgIFJlbGlkcyBvdXRlcnJl bGlkcywKKwkJCQkJICAgUmVsT3B0SW5mbyAqaW5uZXJyZWwsCisJCQkJCSAgIEpvaW5UeXBl IGpvaW50eXBlLAorCQkJCQkgICBMaXN0ICpyZXN0cmljdGxpc3QsCisJCQkJCSAgIGJvb2wg Zm9yY2VfY2FjaGUsCisJCQkJCSAgIExpc3QgKipleHRyYV9jbGF1c2VzKQogewogCU1lbW9y eUNvbnRleHQgb2xkX2NvbnRleHQ7CiAJTGlzdENlbGwgICAqbGM7CisJVW5pcXVlUmVsSW5m byAqdW5pcXVlUmVsSW5mbzsKKwlMaXN0CSAgICpvdXRlcl9leHBycyA9IE5JTDsKKwlib29s CQlzZWxmX2pvaW4gPSAoZXh0cmFfY2xhdXNlcyAhPSBOVUxMKTsKIAogCS8qIENlcnRhaW5s eSBjYW4ndCBwcm92ZSB1bmlxdWVuZXNzIHdoZW4gdGhlcmUgYXJlIG5vIGpvaW5jbGF1c2Vz ICovCiAJaWYgKHJlc3RyaWN0bGlzdCA9PSBOSUwpCkBAIC0xMjA1LDE3ICsxMjg5LDI4IEBA IGlubmVycmVsX2lzX3VuaXF1ZShQbGFubmVySW5mbyAqcm9vdCwKIAogCS8qCiAJICogUXVl cnkgdGhlIGNhY2hlIHRvIHNlZSBpZiB3ZSd2ZSBtYW5hZ2VkIHRvIHByb3ZlIHRoYXQgaW5u ZXJyZWwgaXMKLQkgKiB1bmlxdWUgZm9yIGFueSBzdWJzZXQgb2YgdGhpcyBvdXRlcnJlbC4g IFdlIGRvbid0IG5lZWQgYW4gZXhhY3QgbWF0Y2gsCi0JICogYXMgZXh0cmEgb3V0ZXJyZWxz IGNhbid0IG1ha2UgdGhlIGlubmVycmVsIGFueSBsZXNzIHVuaXF1ZSAob3IgbW9yZQotCSAq IGZvcm1hbGx5LCB0aGUgcmVzdHJpY3RsaXN0IGZvciBhIGpvaW4gdG8gYSBzdXBlcnNldCBv dXRlcnJlbCBtdXN0IGJlIGEKLQkgKiBzdXBlcnNldCBvZiB0aGUgY29uZGl0aW9ucyB3ZSBz dWNjZXNzZnVsbHkgdXNlZCBiZWZvcmUpLgorCSAqIHVuaXF1ZSBmb3IgYW55IHN1YnNldCBv ZiB0aGlzIG91dGVycmVsLiAgRm9yIG5vbiBzZWxmLWpvaW4gc2VhcmNoLCB3ZQorCSAqIGRv bid0IG5lZWQgYW4gZXhhY3QgbWF0Y2gsIGFzIGV4dHJhIG91dGVycmVscyBjYW4ndCBtYWtl IHRoZSBpbm5lcnJlbAorCSAqIGFueSBsZXNzIHVuaXF1ZSAob3IgbW9yZSBmb3JtYWxseSwg dGhlIHJlc3RyaWN0bGlzdCBmb3IgYSBqb2luIHRvIGEKKwkgKiBzdXBlcnNldCBvdXRlcnJl bCBtdXN0IGJlIGEgc3VwZXJzZXQgb2YgdGhlIGNvbmRpdGlvbnMgd2Ugc3VjY2Vzc2Z1bGx5 CisJICogdXNlZCBiZWZvcmUpLiBGb3Igc2VsZi1qb2luIHNlYXJjaCwgd2UgcmVxdWlyZSBh biBleGFjdCBtYXRjaCBvZgorCSAqIG91dGVycmVscywgYmVjYXVzZSB3ZSBuZWVkIGV4dHJh IGNsYXVzZXMgdG8gYmUgdmFsaWQgZm9yIG91ciBjYXNlLgorCSAqIEFsc28sIGZvciBzZWxm LWpvaW4gY2hlY2tpbmcgd2UndmUgZmlsdGVyZWQgdGhlIGNsYXVzZXMgbGlzdC4gIFRodXMs CisJICogZm9yIGEgc2VsZi1qb2luIHNlYXJjaCwgd2UgY2FuIG1hdGNoIG9ubHkgdGhlIHJl c3VsdCBjYWNoZWQgZm9yIGFub3RoZXIKKwkgKiBzZWxmLWpvaW4gY2hlY2suCiAJICovCiAJ Zm9yZWFjaChsYywgaW5uZXJyZWwtPnVuaXF1ZV9mb3JfcmVscykKIAl7Ci0JCVJlbGlkcwkJ dW5pcXVlX2Zvcl9yZWxzID0gKFJlbGlkcykgbGZpcnN0KGxjKTsKKwkJdW5pcXVlUmVsSW5m byA9IChVbmlxdWVSZWxJbmZvICopIGxmaXJzdChsYyk7CiAKLQkJaWYgKGJtc19pc19zdWJz ZXQodW5pcXVlX2Zvcl9yZWxzLCBvdXRlcnJlbGlkcykpCisJCWlmICgoIXNlbGZfam9pbiAm JiBibXNfaXNfc3Vic2V0KHVuaXF1ZVJlbEluZm8tPm91dGVycmVsaWRzLCBvdXRlcnJlbGlk cykpIHx8CisJCQkoc2VsZl9qb2luICYmIGJtc19lcXVhbCh1bmlxdWVSZWxJbmZvLT5vdXRl cnJlbGlkcywgb3V0ZXJyZWxpZHMpICYmCisJCQkgdW5pcXVlUmVsSW5mby0+c2VsZl9qb2lu KSkKKwkJeworCQkJaWYgKGV4dHJhX2NsYXVzZXMpCisJCQkJKmV4dHJhX2NsYXVzZXMgPSB1 bmlxdWVSZWxJbmZvLT5leHRyYV9jbGF1c2VzOwogCQkJcmV0dXJuIHRydWU7CQkvKiBTdWNj ZXNzISAqLworCQl9CiAJfQogCiAJLyoKQEAgLTEyMzIsNyArMTMyNyw4IEBAIGlubmVycmVs X2lzX3VuaXF1ZShQbGFubmVySW5mbyAqcm9vdCwKIAogCS8qIE5vIGNhY2hlZCBpbmZvcm1h dGlvbiwgc28gdHJ5IHRvIG1ha2UgdGhlIHByb29mLiAqLwogCWlmIChpc19pbm5lcnJlbF91 bmlxdWVfZm9yKHJvb3QsIGpvaW5yZWxpZHMsIG91dGVycmVsaWRzLCBpbm5lcnJlbCwKLQkJ CQkJCQkgICBqb2ludHlwZSwgcmVzdHJpY3RsaXN0KSkKKwkJCQkJCQkgICBqb2ludHlwZSwg cmVzdHJpY3RsaXN0LAorCQkJCQkJCSAgIHNlbGZfam9pbiA/ICZvdXRlcl9leHBycyA6IE5V TEwpKQogCXsKIAkJLyoKIAkJICogQ2FjaGUgdGhlIHBvc2l0aXZlIHJlc3VsdCBmb3IgZnV0 dXJlIHByb2JlcywgYmVpbmcgc3VyZSB0byBrZWVwIGl0CkBAIC0xMjQ1LDEwICsxMzQxLDE2 IEBAIGlubmVycmVsX2lzX3VuaXF1ZShQbGFubmVySW5mbyAqcm9vdCwKIAkJICogc3VwZXJz ZXRzIG9mIHRoZW0gYW55d2F5LgogCQkgKi8KIAkJb2xkX2NvbnRleHQgPSBNZW1vcnlDb250 ZXh0U3dpdGNoVG8ocm9vdC0+cGxhbm5lcl9jeHQpOworCQl1bmlxdWVSZWxJbmZvID0gbWFr ZU5vZGUoVW5pcXVlUmVsSW5mbyk7CisJCXVuaXF1ZVJlbEluZm8tPm91dGVycmVsaWRzID0g Ym1zX2NvcHkob3V0ZXJyZWxpZHMpOworCQl1bmlxdWVSZWxJbmZvLT5zZWxmX2pvaW4gPSBz ZWxmX2pvaW47CisJCXVuaXF1ZVJlbEluZm8tPmV4dHJhX2NsYXVzZXMgPSBvdXRlcl9leHBy czsKIAkJaW5uZXJyZWwtPnVuaXF1ZV9mb3JfcmVscyA9IGxhcHBlbmQoaW5uZXJyZWwtPnVu aXF1ZV9mb3JfcmVscywKLQkJCQkJCQkJCQkJYm1zX2NvcHkob3V0ZXJyZWxpZHMpKTsKKwkJ CQkJCQkJCQkJdW5pcXVlUmVsSW5mbyk7CiAJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRf Y29udGV4dCk7CiAKKwkJaWYgKGV4dHJhX2NsYXVzZXMpCisJCQkqZXh0cmFfY2xhdXNlcyA9 IG91dGVyX2V4cHJzOwogCQlyZXR1cm4gdHJ1ZTsJCQkvKiBTdWNjZXNzISAqLwogCX0KIAll bHNlCkBAIC0xMjk0LDcgKzEzOTYsOCBAQCBpc19pbm5lcnJlbF91bmlxdWVfZm9yKFBsYW5u ZXJJbmZvICpyb290LAogCQkJCQkgICBSZWxpZHMgb3V0ZXJyZWxpZHMsCiAJCQkJCSAgIFJl bE9wdEluZm8gKmlubmVycmVsLAogCQkJCQkgICBKb2luVHlwZSBqb2ludHlwZSwKLQkJCQkJ ICAgTGlzdCAqcmVzdHJpY3RsaXN0KQorCQkJCQkgICBMaXN0ICpyZXN0cmljdGxpc3QsCisJ CQkJCSAgIExpc3QgKipleHRyYV9jbGF1c2VzKQogewogCUxpc3QJICAgKmNsYXVzZV9saXN0 ID0gTklMOwogCUxpc3RDZWxsICAgKmxjOwpAQCAtMTMyNCwxNyArMTQyNywxMDgzIEBAIGlz X2lubmVycmVsX3VuaXF1ZV9mb3IoUGxhbm5lckluZm8gKnJvb3QsCiAJCQljb250aW51ZTsJ CQkvKiBub3QgbWVyZ2Vqb2luYWJsZSAqLwogCiAJCS8qCi0JCSAqIENoZWNrIGlmIGNsYXVz ZSBoYXMgdGhlIGZvcm0gIm91dGVyIG9wIGlubmVyIiBvciAiaW5uZXIgb3Agb3V0ZXIiLAot CQkgKiBhbmQgaWYgc28gbWFyayB3aGljaCBzaWRlIGlzIGlubmVyLgorCQkgKiBDaGVjayBp ZiB0aGUgY2xhdXNlIGhhcyB0aGUgZm9ybSAib3V0ZXIgb3AgaW5uZXIiIG9yICJpbm5lciBv cAorCQkgKiBvdXRlciIsIGFuZCBpZiBzbyBtYXJrIHdoaWNoIHNpZGUgaXMgaW5uZXIuCiAJ CSAqLwogCQlpZiAoIWNsYXVzZV9zaWRlc19tYXRjaF9qb2luKHJlc3RyaWN0aW5mbywgb3V0 ZXJyZWxpZHMsCiAJCQkJCQkJCQkgaW5uZXJyZWwtPnJlbGlkcykpCiAJCQljb250aW51ZTsJ CQkvKiBubyBnb29kIGZvciB0aGVzZSBpbnB1dCByZWxhdGlvbnMgKi8KIAotCQkvKiBPSywg YWRkIHRvIGxpc3QgKi8KKwkJLyogT0ssIGFkZCB0byB0aGUgbGlzdCAqLwogCQljbGF1c2Vf bGlzdCA9IGxhcHBlbmQoY2xhdXNlX2xpc3QsIHJlc3RyaWN0aW5mbyk7CiAJfQogCiAJLyog TGV0IHJlbF9pc19kaXN0aW5jdF9mb3IoKSBkbyB0aGUgaGFyZCB3b3JrICovCi0JcmV0dXJu IHJlbF9pc19kaXN0aW5jdF9mb3Iocm9vdCwgaW5uZXJyZWwsIGNsYXVzZV9saXN0KTsKKwly ZXR1cm4gcmVsX2lzX2Rpc3RpbmN0X2Zvcihyb290LCBpbm5lcnJlbCwgY2xhdXNlX2xpc3Qs IGV4dHJhX2NsYXVzZXMpOworfQorCisvKgorICogcmVwbGFjZV92YXJubyAtIGZpbmQgaW4g dGhlIGdpdmVuIHRyZWUgYW55IFZhcnMsIFBsYWNlSG9sZGVyVmFyLCBhbmQgUmVsaWRzCisg KiB0aGF0IHJlZmVyZW5jZSB0aGUgcmVtb3ZpbmcgcmVsaWQsIGFuZCBjaGFuZ2UgdGhlbSB0 byB0aGUgcmVmZXJlbmNlIHRvCisgKiB0aGUgcmVwbGFjZW1lbnQgcmVsaWQuCisgKgorICog Tk9URTogYWx0aG91Z2ggdGhpcyBoYXMgdGhlIGZvcm0gb2YgYSB3YWxrZXIsIHdlIGNoZWF0 IGFuZCBtb2RpZnkgdGhlCisgKiBub2RlcyBpbi1wbGFjZS4KKyAqLworCit0eXBlZGVmIHN0 cnVjdAoreworCWludAkJCWZyb207CisJaW50CQkJdG87CisJaW50CQkJc3VibGV2ZWxzX3Vw OworfSBSZXBsYWNlVmFybm9Db250ZXh0OworCitzdGF0aWMgYm9vbAorcmVwbGFjZV92YXJu b193YWxrZXIoTm9kZSAqbm9kZSwgUmVwbGFjZVZhcm5vQ29udGV4dCAqY3R4KQoreworCWlm IChub2RlID09IE5VTEwpCisJCXJldHVybiBmYWxzZTsKKwlpZiAoSXNBKG5vZGUsIFZhcikp CisJeworCQlWYXIJCSAgICp2YXIgPSAoVmFyICopIG5vZGU7CisKKwkJaWYgKHZhci0+dmFy bm8gPT0gY3R4LT5mcm9tICYmCisJCQl2YXItPnZhcmxldmVsc3VwID09IGN0eC0+c3VibGV2 ZWxzX3VwKQorCQl7CisJCQl2YXItPnZhcm5vID0gY3R4LT50bzsKKwkJCXZhci0+dmFybm9z eW4gPSBjdHgtPnRvOworCQl9CisJCXJldHVybiBmYWxzZTsKKwl9CisJZWxzZSBpZiAoSXNB KG5vZGUsIFBsYWNlSG9sZGVyVmFyKSkKKwl7CisJCVBsYWNlSG9sZGVyVmFyICpwaHYgPSAo UGxhY2VIb2xkZXJWYXIgKikgbm9kZTsKKworCQlpZiAocGh2LT5waGxldmVsc3VwID09IGN0 eC0+c3VibGV2ZWxzX3VwKQorCQl7CisJCQlwaHYtPnBocmVscyA9CisJCQkJcmVwbGFjZV9y ZWxpZChwaHYtPnBocmVscywgY3R4LT5mcm9tLCBjdHgtPnRvKTsKKwkJCXBodi0+cGhudWxs aW5ncmVscyA9CisJCQkJcmVwbGFjZV9yZWxpZChwaHYtPnBobnVsbGluZ3JlbHMsIGN0eC0+ ZnJvbSwgY3R4LT50byk7CisJCX0KKworCQkvKiBmYWxsIHRocm91Z2ggdG8gcmVjdXJzZSBp bnRvIHRoZSBwbGFjZWhvbGRlcidzIGV4cHJlc3Npb24gKi8KKwl9CisJZWxzZSBpZiAoSXNB KG5vZGUsIFF1ZXJ5KSkKKwl7CisJCS8qIFJlY3Vyc2UgaW50byBzdWJzZWxlY3RzICovCisJ CWJvb2wJCXJlc3VsdDsKKworCQljdHgtPnN1YmxldmVsc191cCsrOworCQlyZXN1bHQgPSBx dWVyeV90cmVlX3dhbGtlcigoUXVlcnkgKikgbm9kZSwKKwkJCQkJCQkJICAgcmVwbGFjZV92 YXJub193YWxrZXIsCisJCQkJCQkJCSAgICh2b2lkICopIGN0eCwKKwkJCQkJCQkJICAgUVRX X0VYQU1JTkVfU09SVEdST1VQKTsKKwkJY3R4LT5zdWJsZXZlbHNfdXAtLTsKKwkJcmV0dXJu IHJlc3VsdDsKKwl9CisJZWxzZSBpZiAoSXNBKG5vZGUsIFJlc3RyaWN0SW5mbykpCisJewor CQlSZXN0cmljdEluZm8gKnJpbmZvID0gKFJlc3RyaWN0SW5mbyAqKSBub2RlOworCQlpbnQJ CQlyZWxpZCA9IC0xOworCQlib29sCQlpc19yZXFfZXF1YWwgPQorCQkJKHJpbmZvLT5yZXF1 aXJlZF9yZWxpZHMgPT0gcmluZm8tPmNsYXVzZV9yZWxpZHMpOworCisJCWlmIChibXNfaXNf bWVtYmVyKGN0eC0+ZnJvbSwgcmluZm8tPmNsYXVzZV9yZWxpZHMpKQorCQl7CisJCQlyZXBs YWNlX3Zhcm5vKChOb2RlICopIHJpbmZvLT5jbGF1c2UsIGN0eC0+ZnJvbSwgY3R4LT50byk7 CisJCQlyZXBsYWNlX3Zhcm5vKChOb2RlICopIHJpbmZvLT5vcmNsYXVzZSwgY3R4LT5mcm9t LCBjdHgtPnRvKTsKKwkJCXJpbmZvLT5jbGF1c2VfcmVsaWRzID0KKwkJCQlyZXBsYWNlX3Jl bGlkKHJpbmZvLT5jbGF1c2VfcmVsaWRzLCBjdHgtPmZyb20sIGN0eC0+dG8pOworCQkJcmlu Zm8tPmxlZnRfcmVsaWRzID0KKwkJCQlyZXBsYWNlX3JlbGlkKHJpbmZvLT5sZWZ0X3JlbGlk cywgY3R4LT5mcm9tLCBjdHgtPnRvKTsKKwkJCXJpbmZvLT5yaWdodF9yZWxpZHMgPQorCQkJ CXJlcGxhY2VfcmVsaWQocmluZm8tPnJpZ2h0X3JlbGlkcywgY3R4LT5mcm9tLCBjdHgtPnRv KTsKKwkJfQorCisJCWlmIChpc19yZXFfZXF1YWwpCisJCQlyaW5mby0+cmVxdWlyZWRfcmVs aWRzID0gcmluZm8tPmNsYXVzZV9yZWxpZHM7CisJCWVsc2UKKwkJCXJpbmZvLT5yZXF1aXJl ZF9yZWxpZHMgPQorCQkJCXJlcGxhY2VfcmVsaWQocmluZm8tPnJlcXVpcmVkX3JlbGlkcywg Y3R4LT5mcm9tLCBjdHgtPnRvKTsKKworCQlyaW5mby0+b3V0ZXJfcmVsaWRzID0KKwkJCXJl cGxhY2VfcmVsaWQocmluZm8tPm91dGVyX3JlbGlkcywgY3R4LT5mcm9tLCBjdHgtPnRvKTsK KwkJcmluZm8tPmluY29tcGF0aWJsZV9yZWxpZHMgPQorCQkJcmVwbGFjZV9yZWxpZChyaW5m by0+aW5jb21wYXRpYmxlX3JlbGlkcywgY3R4LT5mcm9tLCBjdHgtPnRvKTsKKworCQlpZiAo cmluZm8tPm1lcmdlb3BmYW1pbGllcyAmJgorCQkJYm1zX2dldF9zaW5nbGV0b25fbWVtYmVy KHJpbmZvLT5jbGF1c2VfcmVsaWRzLCAmcmVsaWQpICYmCisJCQlyZWxpZCA9PSBjdHgtPnRv ICYmIElzQShyaW5mby0+Y2xhdXNlLCBPcEV4cHIpKQorCQl7CisJCQlFeHByCSAgICpsZWZ0 T3A7CisJCQlFeHByCSAgICpyaWdodE9wOworCisJCQlsZWZ0T3AgPSAoRXhwciAqKSBnZXRf bGVmdG9wKHJpbmZvLT5jbGF1c2UpOworCQkJcmlnaHRPcCA9IChFeHByICopIGdldF9yaWdo dG9wKHJpbmZvLT5jbGF1c2UpOworCisJCQlpZiAobGVmdE9wICE9IE5VTEwgJiYgZXF1YWwo bGVmdE9wLCByaWdodE9wKSkKKwkJCXsKKwkJCQlOdWxsVGVzdCAgICpudGVzdCA9IG1ha2VO b2RlKE51bGxUZXN0KTsKKworCQkJCW50ZXN0LT5hcmcgPSBsZWZ0T3A7CisJCQkJbnRlc3Qt Pm51bGx0ZXN0dHlwZSA9IElTX05PVF9OVUxMOworCQkJCW50ZXN0LT5hcmdpc3JvdyA9IGZh bHNlOworCQkJCW50ZXN0LT5sb2NhdGlvbiA9IC0xOworCQkJCXJpbmZvLT5jbGF1c2UgPSAo RXhwciAqKSBudGVzdDsKKwkJCQlyaW5mby0+bWVyZ2VvcGZhbWlsaWVzID0gTklMOworCQkJ fQorCQkJQXNzZXJ0KHJpbmZvLT5vcmNsYXVzZSA9PSBOVUxMKTsKKwkJfQorCisJCXJldHVy biBmYWxzZTsKKwl9CisKKwlyZXR1cm4gZXhwcmVzc2lvbl90cmVlX3dhbGtlcihub2RlLCBy ZXBsYWNlX3Zhcm5vX3dhbGtlciwKKwkJCQkJCQkJICAodm9pZCAqKSBjdHgpOworfQorCitz dGF0aWMgdm9pZAorcmVwbGFjZV92YXJubyhOb2RlICpub2RlLCBpbnQgZnJvbSwgaW50IHRv KQoreworCVJlcGxhY2VWYXJub0NvbnRleHQgY3R4OworCisJaWYgKHRvIDw9IDApCisJCXJl dHVybjsKKworCWN0eC5mcm9tID0gZnJvbTsKKwljdHgudG8gPSB0bzsKKwljdHguc3VibGV2 ZWxzX3VwID0gMDsKKworCS8qCisJICogTXVzdCBiZSBwcmVwYXJlZCB0byBzdGFydCB3aXRo IGEgUXVlcnkgb3IgYSBiYXJlIGV4cHJlc3Npb24gdHJlZS4KKwkgKi8KKwlxdWVyeV9vcl9l eHByZXNzaW9uX3RyZWVfd2Fsa2VyKG5vZGUsCisJCQkJCQkJCQlyZXBsYWNlX3Zhcm5vX3dh bGtlciwKKwkJCQkJCQkJCSh2b2lkICopICZjdHgsCisJCQkJCQkJCQlRVFdfRVhBTUlORV9T T1JUR1JPVVApOworfQorCisvKgorICogU3Vic3RpdHV0ZSBuZXdJZCBieSBvbGRJZCBpbiBy ZWxpZHMuCisgKgorICogV2UgbXVzdCBtYWtlIGEgY29weSBvZiB0aGUgb3JpZ2luYWwgQml0 bWFwc2V0IGJlZm9yZSBtYWtpbmcgYW55CisgKiBtb2RpZmljYXRpb25zLCBiZWNhdXNlIHRo ZSBzYW1lIHBvaW50ZXIgdG8gaXQgbWlnaHQgYmUgc2hhcmVkIGFtb25nCisgKiBkaWZmZXJl bnQgcGxhY2VzLgorICogQWxzbywgdGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCBpbiAnZGVs ZXRlIG9ubHknIG1vZGUgKG5ld0lkIDwgMCkuCisgKiBJdCBhbGxvd3MgdXMgdG8gdXRpbGlz ZSB0aGUgc2FtZSBjb2RlIGluIHRoZSByZW1vdmVfdXNlbGVzc19qb2lucyBhbmQgdGhlCisg KiByZW1vdmVfc2VsZl9qb2lucyBmZWF0dXJlcy4KKyAqLworc3RhdGljIEJpdG1hcHNldCAq CityZXBsYWNlX3JlbGlkKFJlbGlkcyByZWxpZHMsIGludCBvbGRJZCwgaW50IG5ld0lkKQor eworCWlmIChvbGRJZCA8IDApCisJCXJldHVybiByZWxpZHM7CisKKwkvKiBEZWxldGUgcmVs aWQgd2l0aG91dCBzdWJzdGl0dXRpb24uICovCisJaWYgKG5ld0lkIDwgMCkKKwkJcmV0dXJu IGJtc19kZWxfbWVtYmVyKGJtc19jb3B5KHJlbGlkcyksIG9sZElkKTsKKworCS8qIFN1YnN0 aXR1dGUgbmV3SWQgZm9yIG9sZElkLiAqLworCWlmIChibXNfaXNfbWVtYmVyKG9sZElkLCBy ZWxpZHMpKQorCQlyZXR1cm4gYm1zX2FkZF9tZW1iZXIoYm1zX2RlbF9tZW1iZXIoYm1zX2Nv cHkocmVsaWRzKSwgb2xkSWQpLCBuZXdJZCk7CisKKwlyZXR1cm4gcmVsaWRzOworfQorCisv KgorICogVXBkYXRlIEVDIG1lbWJlcnMgdG8gcG9pbnQgdG8gdGhlIHJlbWFpbmluZyByZWxh dGlvbiBpbnN0ZWFkIG9mIHRoZSByZW1vdmVkCisgKiBvbmUsIHJlbW92aW5nIGR1cGxpY2F0 ZXMuCisgKgorICogUmVzdHJpY3Rpb24gY2xhdXNlcyBmb3IgYmFzZSByZWxhdGlvbnMgYXJl IGFscmVhZHkgZGlzdHJpYnV0ZWQgdG8KKyAqIHRoZSByZXNwZWN0aXZlIGJhc2VyZXN0cmlj dGluZm8gbGlzdHMgKHNlZQorICogZ2VuZXJhdGVfaW1wbGllZF9lcXVhbGl0aWVzX2Zvcl9j b2x1bW4pLiBUaGUgYWJvdmUgY29kZSBoYXMgYWxyZWFkeSBwcm9jZXNzZWQKKyAqIHRoaXMg bGlzdCwgYW5kIHVwZGF0ZWQgdGhlc2UgY2xhdXNlcyB0byByZWZlcmVuY2UgdGhlIHJlbWFp bmluZworICogcmVsYXRpb24sIHNvIHdlIGNhbiBza2lwIHRoZW0gaGVyZSBiYXNlZCBvbiB0 aGVpciByZWxpZHMuCisgKgorICogTGlrZXdpc2UsIHdlIGhhdmUgYWxyZWFkeSBwcm9jZXNz ZWQgdGhlIGpvaW4gY2xhdXNlcyB0aGF0IGpvaW4gdGhlCisgKiByZW1vdmVkIHJlbGF0aW9u IHRvIHRoZSByZW1haW5pbmcgb25lLgorICoKKyAqIEZpbmFsbHksIHRoZXJlIGFyZSBqb2lu IGNsYXVzZXMgdGhhdCBqb2luIHRoZSByZW1vdmVkIHJlbGF0aW9uIHRvCisgKiBzb21lIHRo aXJkIHJlbGF0aW9uLiBXZSBjYW4ndCBqdXN0IGRlbGV0ZSB0aGUgc291cmNlIGNsYXVzZXMg YW5kCisgKiByZWdlbmVyYXRlIHRoZW0gZnJvbSB0aGUgRUMgYmVjYXVzZSB0aGUgY29ycmVz cG9uZGluZyBlcXVhbGl0eQorICogb3BlcmF0b3JzIG1pZ2h0IGJlIG1pc3NpbmcgKHNlZSB0 aGUgaGFuZGxpbmcgb2YgZWNfYnJva2VuKS4KKyAqIFRoZXJlZm9yZSwgd2Ugd2lsbCB1cGRh dGUgdGhlIHJlZmVyZW5jZXMgaW4gdGhlIHNvdXJjZSBjbGF1c2VzLgorICoKKyAqIERlcml2 ZWQgY2xhdXNlcyBjYW4gYmUgZ2VuZXJhdGVkIGFnYWluLCBzbyBpdCBpcyBzaW1wbGVyIHRv IGp1c3QKKyAqIGRlbGV0ZSB0aGVtLgorICovCitzdGF0aWMgdm9pZAordXBkYXRlX2VjbGFz c2VzKEVxdWl2YWxlbmNlQ2xhc3MgKmVjLCBpbnQgZnJvbSwgaW50IHRvKQoreworCUxpc3QJ ICAgKm5ld19tZW1iZXJzID0gTklMOworCUxpc3QJICAgKm5ld19zb3VyY2VzID0gTklMOwor CUxpc3RDZWxsICAgKmxjOworCUxpc3RDZWxsICAgKmxjMTsKKworCWZvcmVhY2gobGMsIGVj LT5lY19tZW1iZXJzKQorCXsKKwkJRXF1aXZhbGVuY2VNZW1iZXIgKmVtID0gbGZpcnN0X25v ZGUoRXF1aXZhbGVuY2VNZW1iZXIsIGxjKTsKKwkJYm9vbAkJaXNfcmVkdW5kYW50ID0gZmFs c2U7CisKKwkJaWYgKCFibXNfaXNfbWVtYmVyKGZyb20sIGVtLT5lbV9yZWxpZHMpKQorCQl7 CisJCQluZXdfbWVtYmVycyA9IGxhcHBlbmQobmV3X21lbWJlcnMsIGVtKTsKKwkJCWNvbnRp bnVlOworCQl9CisKKwkJZW0tPmVtX3JlbGlkcyA9IHJlcGxhY2VfcmVsaWQoZW0tPmVtX3Jl bGlkcywgZnJvbSwgdG8pOworCQllbS0+ZW1famRvbWFpbi0+amRfcmVsaWRzID0gcmVwbGFj ZV9yZWxpZChlbS0+ZW1famRvbWFpbi0+amRfcmVsaWRzLCBmcm9tLCB0byk7CisKKwkJLyog V2Ugb25seSBwcm9jZXNzIGlubmVyIGpvaW5zICovCisJCXJlcGxhY2VfdmFybm8oKE5vZGUg KikgZW0tPmVtX2V4cHIsIGZyb20sIHRvKTsKKworCQlmb3JlYWNoKGxjMSwgbmV3X21lbWJl cnMpCisJCXsKKwkJCUVxdWl2YWxlbmNlTWVtYmVyICpvdGhlciA9IGxmaXJzdF9ub2RlKEVx dWl2YWxlbmNlTWVtYmVyLCBsYzEpOworCisJCQlpZiAoIWVxdWFsKGVtLT5lbV9yZWxpZHMs IG90aGVyLT5lbV9yZWxpZHMpKQorCQkJCWNvbnRpbnVlOworCisJCQlpZiAoZXF1YWwoZW0t PmVtX2V4cHIsIG90aGVyLT5lbV9leHByKSkKKwkJCXsKKwkJCQlpc19yZWR1bmRhbnQgPSB0 cnVlOworCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJaWYgKCFpc19yZWR1bmRhbnQpCisJ CQluZXdfbWVtYmVycyA9IGxhcHBlbmQobmV3X21lbWJlcnMsIGVtKTsKKwl9CisKKwlsaXN0 X2ZyZWUoZWMtPmVjX21lbWJlcnMpOworCWVjLT5lY19tZW1iZXJzID0gbmV3X21lbWJlcnM7 CisKKwlsaXN0X2ZyZWUoZWMtPmVjX2Rlcml2ZXMpOworCWVjLT5lY19kZXJpdmVzID0gTlVM TDsKKworCS8qIFVwZGF0ZSBFQyBzb3VyY2UgZXhwcmVzc2lvbnMgKi8KKwlmb3JlYWNoKGxj LCBlYy0+ZWNfc291cmNlcykKKwl7CisJCVJlc3RyaWN0SW5mbyAqcmluZm8gPSBsZmlyc3Rf bm9kZShSZXN0cmljdEluZm8sIGxjKTsKKwkJYm9vbAkJaXNfcmVkdW5kYW50ID0gZmFsc2U7 CisKKwkJaWYgKCFibXNfaXNfbWVtYmVyKGZyb20sIHJpbmZvLT5yZXF1aXJlZF9yZWxpZHMp KQorCQl7CisJCQluZXdfc291cmNlcyA9IGxhcHBlbmQobmV3X3NvdXJjZXMsIHJpbmZvKTsK KwkJCWNvbnRpbnVlOworCQl9CisKKwkJcmVwbGFjZV92YXJubygoTm9kZSAqKSByaW5mbywg ZnJvbSwgdG8pOworCisJCS8qCisJCSAqIEFmdGVyIHN3aXRjaGluZyB0aGUgY2xhdXNlIHRv IHRoZSByZW1haW5pbmcgcmVsYXRpb24sIGNoZWNrIGl0IGZvcgorCQkgKiByZWR1bmRhbmN5 IHdpdGggZXhpc3Rpbmcgb25lcy4gV2UgZG9uJ3QgaGF2ZSB0byBjaGVjayBmb3IKKwkJICog cmVkdW5kYW5jeSB3aXRoIGRlcml2ZWQgY2xhdXNlcywgYmVjYXVzZSB3ZSd2ZSBqdXN0IGRl bGV0ZWQgdGhlbS4KKwkJICovCisJCWZvcmVhY2gobGMxLCBuZXdfc291cmNlcykKKwkJewor CQkJUmVzdHJpY3RJbmZvICpvdGhlciA9IGxmaXJzdF9ub2RlKFJlc3RyaWN0SW5mbywgbGMx KTsKKworCQkJaWYgKCFlcXVhbChyaW5mby0+Y2xhdXNlX3JlbGlkcywgb3RoZXItPmNsYXVz ZV9yZWxpZHMpKQorCQkJCWNvbnRpbnVlOworCisJCQlpZiAoZXF1YWwocmluZm8tPmNsYXVz ZSwgb3RoZXItPmNsYXVzZSkpCisJCQl7CisJCQkJaXNfcmVkdW5kYW50ID0gdHJ1ZTsKKwkJ CQlicmVhazsKKwkJCX0KKwkJfQorCisJCWlmICghaXNfcmVkdW5kYW50KQorCQkJbmV3X3Nv dXJjZXMgPSBsYXBwZW5kKG5ld19zb3VyY2VzLCByaW5mbyk7CisJfQorCisJbGlzdF9mcmVl KGVjLT5lY19zb3VyY2VzKTsKKwllYy0+ZWNfc291cmNlcyA9IG5ld19zb3VyY2VzOworCWVj LT5lY19yZWxpZHMgPSByZXBsYWNlX3JlbGlkKGVjLT5lY19yZWxpZHMsIGZyb20sIHRvKTsK K30KKworLyoKKyAqICJMb2dpY2FsbHkiIGNvbXBhcmVzIHR3byBSZXN0cmljdEluZm8ncyBp Z25vcmluZyB0aGUgJ3JpbmZvX3NlcmlhbCcgZmllbGQsCisgKiB3aGljaCBtYWtlcyBhbG1v c3QgZXZlcnkgUmVzdHJpY3RJbmZvIHVuaXF1ZS4gIFRoaXMgdHlwZSBvZiBjb21wYXJpc29u IGlzCisgKiB1c2VmdWwgd2hlbiByZW1vdmluZyBkdXBsaWNhdGVzIHdoaWxlIG1vdmluZyBS ZXN0cmljdEluZm8ncyBmcm9tIHJlbW92ZWQKKyAqIHJlbGF0aW9uIHRvIHJlbWFpbmluZyBy ZWxhdGlvbiBkdXJpbmcgc2VsZi1qb2luIGVsaW1pbmF0aW9uLgorICoKKyAqIFhYWDogSW4g dGhlIGZ1dHVyZSwgd2UgbWlnaHQgcmVtb3ZlIHRoZSAncmluZm9fc2VyaWFsJyBmaWVsZCBj b21wbGV0ZWx5IGFuZAorICogZ2V0IHJpZCBvZiB0aGlzIGZ1bmN0aW9uLgorICovCitzdGF0 aWMgYm9vbAorcmVzdHJpY3RfaW5mb3NfbG9naWNhbGx5X2VxdWFsKFJlc3RyaWN0SW5mbyAq YSwgUmVzdHJpY3RJbmZvICpiKQoreworCWludAkJCXNhdmVkX3JpbmZvX3NlcmlhbCA9IGEt PnJpbmZvX3NlcmlhbDsKKwlib29sCQlyZXN1bHQ7CisKKwlhLT5yaW5mb19zZXJpYWwgPSBi LT5yaW5mb19zZXJpYWw7CisJcmVzdWx0ID0gZXF1YWwoYSwgYik7CisJYS0+cmluZm9fc2Vy aWFsID0gc2F2ZWRfcmluZm9fc2VyaWFsOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoK KyAqIFJlbW92ZSBhIHJlbGF0aW9uIGFmdGVyIHdlIGhhdmUgcHJvdmVuIHRoYXQgaXQgcGFy dGljaXBhdGVzIG9ubHkgaW4gYW4KKyAqIHVubmVlZGVkIHVuaXF1ZSBzZWxmIGpvaW4uCisg KgorICogUmVwbGFjZSBhbnkgbGlua3MgaW4gcGxhbm5lciBpbmZvIHN0cnVjdHVyZXMuCisg KgorICogVHJhbnNmZXIgam9pbiBhbmQgcmVzdHJpY3Rpb24gY2xhdXNlcyBmcm9tIHRoZSBy ZW1vdmVkIHJlbGF0aW9uIHRvIHRoZQorICogcmVtYWluaW5nIG9uZS4gV2UgY2hhbmdlIHRo ZSBWYXJzIG9mIHRoZSBjbGF1c2UgdG8gcG9pbnQgdG8gdGhlCisgKiByZW1haW5pbmcgcmVs YXRpb24gaW5zdGVhZCBvZiB0aGUgcmVtb3ZlZCBvbmUuIFRoZSBjbGF1c2VzIHRoYXQgcmVx dWlyZQorICogYSBzdWJzZXQgb2Ygam9pbnJlbGlkcyBiZWNvbWUgcmVzdHJpY3Rpb24gY2xh dXNlcyBvZiB0aGUgcmVtYWluaW5nCisgKiByZWxhdGlvbiwgYW5kIG90aGVycyByZW1haW4g am9pbiBjbGF1c2VzLiBXZSBhcHBlbmQgdGhlbSB0bworICogYmFzZXJlc3RyaWN0aW5mbyBh bmQgam9pbmluZm8gcmVzcGVjdGl2ZWx5LCB0cnlpbmcgbm90IHRvIGludHJvZHVjZQorICog ZHVwbGljYXRlcy4KKyAqCisgKiBXZSBhbHNvIGhhdmUgdG8gcHJvY2VzcyB0aGUgJ2pvaW5j bGF1c2VzJyBsaXN0IGhlcmUsIGJlY2F1c2UgaXQKKyAqIGNvbnRhaW5zIEVDLWRlcml2ZWQg am9pbiBjbGF1c2VzIHdoaWNoIG11c3QgYmVjb21lIGZpbHRlciBjbGF1c2VzLiBJdAorICog aXMgbm90IGVub3VnaCB0byBqdXN0IGNvcnJlY3QgdGhlIEVDcyBiZWNhdXNlIHRoZSBFQy1k ZXJpdmVkCisgKiByZXN0cmljdGlvbnMgYXJlIGdlbmVyYXRlZCBiZWZvcmUgam9pbiByZW1v dmFsIChzZWUKKyAqIGdlbmVyYXRlX2Jhc2VfaW1wbGllZF9lcXVhbGl0aWVzKS4KKyAqLwor c3RhdGljIHZvaWQKK3JlbW92ZV9zZWxmX2pvaW5fcmVsKFBsYW5uZXJJbmZvICpyb290LCBQ bGFuUm93TWFyayAqa21hcmssIFBsYW5Sb3dNYXJrICpybWFyaywKKwkJCQkJIFJlbE9wdElu Zm8gKnRvS2VlcCwgUmVsT3B0SW5mbyAqdG9SZW1vdmUsCisJCQkJCSBMaXN0ICpyZXN0cmlj dGxpc3QpCit7CisJTGlzdAkgICAqam9pbmluZm9zOworCUxpc3RDZWxsICAgKmxjOworCWlu dAkJCWk7CisJTGlzdAkgICAqamluZm9fY2FuZGlkYXRlcyA9IE5JTDsKKwlMaXN0CSAgICpi aW5mb19jYW5kaWRhdGVzID0gTklMOworCisJQXNzZXJ0KHRvS2VlcC0+cmVsaWQgIT0gLTEp OworCisJLyoKKwkgKiBSZXBsYWNlIHRoZSBpbmRleCBvZiB0aGUgcmVtb3ZpbmcgdGFibGUg d2l0aCB0aGUga2VlcGluZyBvbmUuIFRoZQorCSAqIHRlY2huaXF1ZSBvZiByZW1vdmluZy9k aXN0cmlidXRpbmcgcmVzdHJpY3RpbmZvIGlzIHVzZWQgaGVyZSB0byBhdHRhY2gKKwkgKiBq dXN0IGFwcGVhcmVkIChmb3Iga2VlcGluZyByZWxhdGlvbikgam9pbiBjbGF1c2VzIGFuZCBh dm9pZCBhZGRpbmcKKwkgKiBkdXBsaWNhdGVzIG9mIHRob3NlIHRoYXQgYWxyZWFkeSBleGlz dCBpbiB0aGUgam9pbmluZm8gbGlzdC4KKwkgKi8KKwlqb2luaW5mb3MgPSBsaXN0X2NvcHko dG9SZW1vdmUtPmpvaW5pbmZvKTsKKwlmb3JlYWNoKGxjLCBqb2luaW5mb3MpCisJeworCQlS ZXN0cmljdEluZm8gKnJpbmZvID0gbGZpcnN0X25vZGUoUmVzdHJpY3RJbmZvLCBsYyk7CisK KwkJcmVtb3ZlX2pvaW5fY2xhdXNlX2Zyb21fcmVscyhyb290LCByaW5mbywgcmluZm8tPnJl cXVpcmVkX3JlbGlkcyk7CisJCXJlcGxhY2VfdmFybm8oKE5vZGUgKikgcmluZm8sIHRvUmVt b3ZlLT5yZWxpZCwgdG9LZWVwLT5yZWxpZCk7CisKKwkJaWYgKGJtc19tZW1iZXJzaGlwKHJp bmZvLT5yZXF1aXJlZF9yZWxpZHMpID09IEJNU19NVUxUSVBMRSkKKwkJCWppbmZvX2NhbmRp ZGF0ZXMgPSBsYXBwZW5kKGppbmZvX2NhbmRpZGF0ZXMsIHJpbmZvKTsKKwkJZWxzZQorCQkJ YmluZm9fY2FuZGlkYXRlcyA9IGxhcHBlbmQoYmluZm9fY2FuZGlkYXRlcywgcmluZm8pOwor CX0KKworCS8qCisJICogQ29uY2F0ZW5hdGUgcmVzdHJpY3RsaXN0IHRvIHRoZSBsaXN0IG9m IGJhc2UgcmVzdHJpY3Rpb25zIG9mIHRoZQorCSAqIHJlbW92aW5nIHRhYmxlIGp1c3QgdG8g c2ltcGxpZnkgdGhlIHJlcGxhY2VtZW50IHByb2NlZHVyZTogYWxsIG9mIHRoZW0KKwkgKiB3 ZXJlbid0IGNvbm5lY3RlZCB0byBhbnkga2VlcGluZyByZWxhdGlvbnMgYW5kIG5lZWQgdG8g YmUgYWRkZWQgdG8gc29tZQorCSAqIHJlbHMuCisJICovCisJdG9SZW1vdmUtPmJhc2VyZXN0 cmljdGluZm8gPSBsaXN0X2NvbmNhdCh0b1JlbW92ZS0+YmFzZXJlc3RyaWN0aW5mbywKKwkJ CQkJCQkJCQkJIHJlc3RyaWN0bGlzdCk7CisJZm9yZWFjaChsYywgdG9SZW1vdmUtPmJhc2Vy ZXN0cmljdGluZm8pCisJeworCQlSZXN0cmljdEluZm8gKnJpbmZvID0gbGZpcnN0X25vZGUo UmVzdHJpY3RJbmZvLCBsYyk7CisKKwkJcmVwbGFjZV92YXJubygoTm9kZSAqKSByaW5mbywg dG9SZW1vdmUtPnJlbGlkLCB0b0tlZXAtPnJlbGlkKTsKKworCQlpZiAoYm1zX21lbWJlcnNo aXAocmluZm8tPnJlcXVpcmVkX3JlbGlkcykgPT0gQk1TX01VTFRJUExFKQorCQkJamluZm9f Y2FuZGlkYXRlcyA9IGxhcHBlbmQoamluZm9fY2FuZGlkYXRlcywgcmluZm8pOworCQllbHNl CisJCQliaW5mb19jYW5kaWRhdGVzID0gbGFwcGVuZChiaW5mb19jYW5kaWRhdGVzLCByaW5m byk7CisJfQorCisJLyoKKwkgKiBOb3csIGFkZCBhbGwgbm9uLXJlZHVuZGFudCBjbGF1c2Vz IHRvIHRoZSBrZWVwaW5nIHJlbGF0aW9uLgorCSAqIENvbnRyYWRpY3Rvcnkgb3BlcmF0aW9u LiBPbiB0aGUgb25lIHNpZGUsIHdlIHJlZHVjZSB0aGUgbGVuZ3RoIG9mCisJICogcmVzdHJp Y3QgbGlzdHMgdGhhdCBjYW4gaW1wYWN0IHBsYW5uaW5nIG9yIGV4ZWN1dGluZyB0aW1lLgor CSAqIEFkZGl0aW9uYWxseSwgd2UgaW1wcm92ZSB0aGUgYWNjdXJhY3kgb2YgY2FyZGluYWxp dHkgZXN0aW1hdGlvbi4gT24gdGhlCisJICogb3RoZXIgc2lkZSwgaXQgaXMgb25lIG1vcmUg cGxhY2UgdGhhdCBjYW4gbWFrZSBwbGFubmluZyB0aW1lIG11Y2gKKwkgKiBsb25nZXIgaW4g c3BlY2lmaWMgY2FzZXMuIEl0IHdvdWxkIGhhdmUgYmVlbiBiZXR0ZXIgdG8gYXZvaWQgY2Fs bGluZworCSAqIHRoZSBlcXVhbCgpIGZ1bmN0aW9uIGhlcmUsIGJ1dCBpdCdzIHRoZSBvbmx5 IHdheSB0byBkZXRlY3QgZHVwbGljYXRlZAorCSAqIGluZXF1YWxpdHkgZXhwcmVzc2lvbnMu CisJICovCisJZm9yZWFjaChsYywgYmluZm9fY2FuZGlkYXRlcykKKwl7CisJCVJlc3RyaWN0 SW5mbyAqcmluZm8gPSBsZmlyc3Rfbm9kZShSZXN0cmljdEluZm8sIGxjKTsKKwkJTGlzdENl bGwgICAqb2xjID0gTlVMTDsKKwkJYm9vbAkJaXNfcmVkdW5kYW50ID0gZmFsc2U7CisKKwkJ QXNzZXJ0KCFibXNfaXNfbWVtYmVyKHRvUmVtb3ZlLT5yZWxpZCwgcmluZm8tPnJlcXVpcmVk X3JlbGlkcykpOworCisJCWZvcmVhY2gob2xjLCB0b0tlZXAtPmJhc2VyZXN0cmljdGluZm8p CisJCXsKKwkJCVJlc3RyaWN0SW5mbyAqc3JjID0gbGZpcnN0X25vZGUoUmVzdHJpY3RJbmZv LCBvbGMpOworCisJCQlpZiAoIWJtc19lcXVhbChzcmMtPmNsYXVzZV9yZWxpZHMsIHJpbmZv LT5jbGF1c2VfcmVsaWRzKSkKKwkJCQkvKiBDb25zdCBhbmQgbm9uLWNvbnN0IGV4cHJlc3Np b25zIGNhbid0IGJlIGVxdWFsICovCisJCQkJY29udGludWU7CisKKwkJCWlmIChzcmMgPT0g cmluZm8gfHwKKwkJCQkocmluZm8tPnBhcmVudF9lYyAhPSBOVUxMCisJCQkJICYmIHNyYy0+ cGFyZW50X2VjID09IHJpbmZvLT5wYXJlbnRfZWMpCisJCQkJfHwgcmVzdHJpY3RfaW5mb3Nf bG9naWNhbGx5X2VxdWFsKHJpbmZvLCBzcmMpKQorCQkJeworCQkJCWlzX3JlZHVuZGFudCA9 IHRydWU7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJaWYgKCFpc19yZWR1bmRhbnQpCisJ CQlkaXN0cmlidXRlX3Jlc3RyaWN0aW5mb190b19yZWxzKHJvb3QsIHJpbmZvKTsKKwl9CisJ Zm9yZWFjaChsYywgamluZm9fY2FuZGlkYXRlcykKKwl7CisJCVJlc3RyaWN0SW5mbyAqcmlu Zm8gPSBsZmlyc3Rfbm9kZShSZXN0cmljdEluZm8sIGxjKTsKKwkJTGlzdENlbGwgICAqb2xj ID0gTlVMTDsKKwkJYm9vbAkJaXNfcmVkdW5kYW50ID0gZmFsc2U7CisKKwkJQXNzZXJ0KCFi bXNfaXNfbWVtYmVyKHRvUmVtb3ZlLT5yZWxpZCwgcmluZm8tPnJlcXVpcmVkX3JlbGlkcykp OworCisJCWZvcmVhY2gob2xjLCB0b0tlZXAtPmpvaW5pbmZvKQorCQl7CisJCQlSZXN0cmlj dEluZm8gKnNyYyA9IGxmaXJzdF9ub2RlKFJlc3RyaWN0SW5mbywgb2xjKTsKKworCQkJaWYg KCFibXNfZXF1YWwoc3JjLT5jbGF1c2VfcmVsaWRzLCByaW5mby0+Y2xhdXNlX3JlbGlkcykp CisJCQkJLyogQ2FuJ3QgY29tcGFyZSB0cml2aWFsbHkgZGlmZmVyZW50IGNsYXVzZXMgKi8K KwkJCQljb250aW51ZTsKKworCQkJaWYgKHNyYyA9PSByaW5mbyB8fAorCQkJCShyaW5mby0+ cGFyZW50X2VjICE9IE5VTEwKKwkJCQkgJiYgc3JjLT5wYXJlbnRfZWMgPT0gcmluZm8tPnBh cmVudF9lYykKKwkJCQl8fCByZXN0cmljdF9pbmZvc19sb2dpY2FsbHlfZXF1YWwocmluZm8s IHNyYykpCisJCQl7CisJCQkJaXNfcmVkdW5kYW50ID0gdHJ1ZTsKKwkJCQlicmVhazsKKwkJ CX0KKwkJfQorCQlpZiAoIWlzX3JlZHVuZGFudCkKKwkJCWRpc3RyaWJ1dGVfcmVzdHJpY3Rp bmZvX3RvX3JlbHMocm9vdCwgcmluZm8pOworCX0KKwlsaXN0X2ZyZWUoYmluZm9fY2FuZGlk YXRlcyk7CisJbGlzdF9mcmVlKGppbmZvX2NhbmRpZGF0ZXMpOworCisJLyoKKwkgKiBBcnJh bmdlIGVxdWl2YWxlbmNlIGNsYXNzZXMsIG1lbnRpb25lZCByZW1vdmluZyBhIHRhYmxlLCB3 aXRoIHRoZQorCSAqIGtlZXBpbmcgb25lOiB2YXJubyBvZiByZW1vdmluZyB0YWJsZSBzaG91 bGQgYmUgcmVwbGFjZWQgaW4gbWVtYmVycyBhbmQKKwkgKiBzb3VyY2VzIGxpc3RzLiBBbHNv LCByZW1vdmUgZHVwbGljYXRlZCBlbGVtZW50cyBpZiB0aGlzIHJlcGxhY2VtZW50CisJICog cHJvY2VkdXJlIGNyZWF0ZWQgdGhlbS4KKwkgKi8KKwlpID0gLTE7CisJd2hpbGUgKChpID0g Ym1zX25leHRfbWVtYmVyKHRvUmVtb3ZlLT5lY2xhc3NfaW5kZXhlcywgaSkpID49IDApCisJ eworCQlFcXVpdmFsZW5jZUNsYXNzICplYyA9IChFcXVpdmFsZW5jZUNsYXNzICopIGxpc3Rf bnRoKHJvb3QtPmVxX2NsYXNzZXMsIGkpOworCisJCXVwZGF0ZV9lY2xhc3NlcyhlYywgdG9S ZW1vdmUtPnJlbGlkLCB0b0tlZXAtPnJlbGlkKTsKKwkJdG9LZWVwLT5lY2xhc3NfaW5kZXhl cyA9IGJtc19hZGRfbWVtYmVyKHRvS2VlcC0+ZWNsYXNzX2luZGV4ZXMsIGkpOworCX0KKwor CS8qCisJICogVHJhbnNmZXIgdGhlIHRhcmdldGxpc3QgYW5kIGF0dHJfbmVlZGVkIGZsYWdz LgorCSAqLworCisJZm9yZWFjaChsYywgdG9SZW1vdmUtPnJlbHRhcmdldC0+ZXhwcnMpCisJ eworCQlOb2RlCSAgICpub2RlID0gbGZpcnN0KGxjKTsKKworCQlyZXBsYWNlX3Zhcm5vKG5v ZGUsIHRvUmVtb3ZlLT5yZWxpZCwgdG9LZWVwLT5yZWxpZCk7CisJCWlmICghbGlzdF9tZW1i ZXIodG9LZWVwLT5yZWx0YXJnZXQtPmV4cHJzLCBub2RlKSkKKwkJCXRvS2VlcC0+cmVsdGFy Z2V0LT5leHBycyA9IGxhcHBlbmQodG9LZWVwLT5yZWx0YXJnZXQtPmV4cHJzLCBub2RlKTsK Kwl9CisKKwlmb3IgKGkgPSB0b0tlZXAtPm1pbl9hdHRyOyBpIDw9IHRvS2VlcC0+bWF4X2F0 dHI7IGkrKykKKwl7CisJCWludAkJCWF0dG5vID0gaSAtIHRvS2VlcC0+bWluX2F0dHI7CisK KwkJdG9SZW1vdmUtPmF0dHJfbmVlZGVkW2F0dG5vXSA9IHJlcGxhY2VfcmVsaWQodG9SZW1v dmUtPmF0dHJfbmVlZGVkW2F0dG5vXSwKKwkJCQkJCQkJCQkJCQkgdG9SZW1vdmUtPnJlbGlk LCB0b0tlZXAtPnJlbGlkKTsKKwkJdG9LZWVwLT5hdHRyX25lZWRlZFthdHRub10gPSBibXNf YWRkX21lbWJlcnModG9LZWVwLT5hdHRyX25lZWRlZFthdHRub10sCisJCQkJCQkJCQkJCQkJ IHRvUmVtb3ZlLT5hdHRyX25lZWRlZFthdHRub10pOworCX0KKworCS8qCisJICogSWYgdGhl IHJlbW92ZWQgcmVsYXRpb24gaGFzIGEgcm93IG1hcmssIHRyYW5zZmVyIGl0IHRvIHRoZSBy ZW1haW5pbmcKKwkgKiBvbmUuCisJICoKKwkgKiBJZiBib3RoIHJlbHMgaGF2ZSByb3cgbWFy a3MsIGp1c3Qga2VlcCB0aGUgb25lIGNvcnJlc3BvbmRpbmcgdG8gdGhlCisJICogcmVtYWlu aW5nIHJlbGF0aW9uLCBiZWNhdXNlIHdlIHZlcmlmaWVkIGVhcmxpZXIgdGhhdCB0aGV5IGhh dmUgdGhlIHNhbWUKKwkgKiBzdHJlbmd0aC4KKwkgKi8KKwlpZiAocm1hcmspCisJeworCQlp ZiAoa21hcmspCisJCXsKKwkJCUFzc2VydChrbWFyay0+bWFya1R5cGUgPT0gcm1hcmstPm1h cmtUeXBlKTsKKworCQkJcm9vdC0+cm93TWFya3MgPSBsaXN0X2RlbGV0ZV9wdHIocm9vdC0+ cm93TWFya3MsIHJtYXJrKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCS8qIFNob3VsZG4ndCBo YXZlIGluaGVyaXRhbmNlIGNoaWxkcmVuIGhlcmUuICovCisJCQlBc3NlcnQocm1hcmstPnJ0 aSA9PSBybWFyay0+cHJ0aSk7CisKKwkJCXJtYXJrLT5ydGkgPSBybWFyay0+cHJ0aSA9IHRv S2VlcC0+cmVsaWQ7CisJCX0KKwl9CisKKwkvKiBSZXBsYWNlIHZhcm5vIGluIGFsbCB0aGUg cXVlcnkgc3RydWN0dXJlcyAqLworCXJlcGxhY2VfdmFybm8oKE5vZGUgKikgcm9vdC0+cGFy c2UsIHRvUmVtb3ZlLT5yZWxpZCwgdG9LZWVwLT5yZWxpZCk7CisKKwkvKiBTZWUgcmVtb3Zl X3NlbGZfam9pbnNfb25lX2dyb3VwKCkgKi8KKwlBc3NlcnQocm9vdC0+cGFyc2UtPnJlc3Vs dFJlbGF0aW9uICE9IHRvUmVtb3ZlLT5yZWxpZCk7CisJQXNzZXJ0KHJvb3QtPnBhcnNlLT5y ZXN1bHRSZWxhdGlvbiAhPSB0b0tlZXAtPnJlbGlkKTsKKworCS8qIFJlcGxhY2UgbGlua3Mg aW4gdGhlIHBsYW5uZXIgaW5mbyAqLworCXJlbW92ZV9yZWxfZnJvbV9xdWVyeShyb290LCB0 b1JlbW92ZSwgdG9LZWVwLT5yZWxpZCwgTlVMTCwgTlVMTCk7CisKKwkvKiBBdCBsYXN0LCBy ZXBsYWNlIHZhcm5vIGluIHJvb3QgdGFyZ2V0bGlzdCBhbmQgSEFWSU5HIGNsYXVzZSAqLwor CXJlcGxhY2VfdmFybm8oKE5vZGUgKikgcm9vdC0+cHJvY2Vzc2VkX3RsaXN0LAorCQkJCSAg dG9SZW1vdmUtPnJlbGlkLCB0b0tlZXAtPnJlbGlkKTsKKwlyZXBsYWNlX3Zhcm5vKChOb2Rl ICopIHJvb3QtPnByb2Nlc3NlZF9ncm91cENsYXVzZSwKKwkJCQkgIHRvUmVtb3ZlLT5yZWxp ZCwgdG9LZWVwLT5yZWxpZCk7CisJcmVwbGFjZV9yZWxpZChyb290LT5hbGxfcmVzdWx0X3Jl bGlkcywgdG9SZW1vdmUtPnJlbGlkLCB0b0tlZXAtPnJlbGlkKTsKKwlyZXBsYWNlX3JlbGlk KHJvb3QtPmxlYWZfcmVzdWx0X3JlbGlkcywgdG9SZW1vdmUtPnJlbGlkLCB0b0tlZXAtPnJl bGlkKTsKKworCisJLyoKKwkgKiBUaGVyZSBtYXkgYmUgcmVmZXJlbmNlcyB0byB0aGUgcmVs IGluIHJvb3QtPmZrZXlfbGlzdCwgYnV0IGlmIHNvLAorCSAqIG1hdGNoX2ZvcmVpZ25fa2V5 c190b19xdWFscygpIHdpbGwgZ2V0IHJpZCBvZiB0aGVtLgorCSAqLworCisJLyoKKwkgKiBG aW5hbGx5LCByZW1vdmUgdGhlIHJlbCBmcm9tIHRoZSBiYXNlcmVsIGFycmF5IHRvIHByZXZl bnQgaXQgZnJvbSBiZWluZworCSAqIHJlZmVyZW5jZWQgYWdhaW4uICAoV2UgY2FuJ3QgZG8g dGhpcyBlYXJsaWVyIGJlY2F1c2UKKwkgKiByZW1vdmVfam9pbl9jbGF1c2VfZnJvbV9yZWxz IHdpbGwgdG91Y2ggaXQuKQorCSAqLworCXJvb3QtPnNpbXBsZV9yZWxfYXJyYXlbdG9SZW1v dmUtPnJlbGlkXSA9IE5VTEw7CisKKwkvKiBBbmQgbnVrZSB0aGUgUmVsT3B0SW5mbywganVz dCBpbiBjYXNlIHRoZXJlJ3MgYW5vdGhlciBhY2Nlc3MgcGF0aCAqLworCXBmcmVlKHRvUmVt b3ZlKTsKK30KKworLyoKKyAqIHNwbGl0X3NlbGZqb2luX3F1YWxzCisgKgkJUHJvY2Vzc2Vz ICdqb2lucXVhbHMnIGJ5IGJ1aWxkaW5nIHR3byBsaXN0czogb25lIGNvbnRhaW5pbmcgdGhl IHF1YWxzCisgKgkJd2hlcmUgdGhlIGNvbHVtbnMvZXhwcnMgYXJlIG9uIGVpdGhlciBzaWRl IG9mIHRoZSBqb2luIG1hdGNoLCBhbmQKKyAqCQlhbm90aGVyIG9uZSBjb250YWluaW5nIHRo ZSByZW1haW5pbmcgcXVhbHMuCisgKgorICogJ2pvaW5xdWFscycgbXVzdCBvbmx5IGNvbnRh aW4gcXVhbHMgZm9yIGEgUlRFX1JFTEFUSU9OIGJlaW5nIGpvaW5lZCB0bworICogaXRzZWxm LgorICovCitzdGF0aWMgdm9pZAorc3BsaXRfc2VsZmpvaW5fcXVhbHMoUGxhbm5lckluZm8g KnJvb3QsIExpc3QgKmpvaW5xdWFscywgTGlzdCAqKnNlbGZqb2lucXVhbHMsCisJCQkJCSBM aXN0ICoqb3RoZXJqb2lucXVhbHMsIGludCBmcm9tLCBpbnQgdG8pCit7CisJTGlzdENlbGwg ICAqbGM7CisJTGlzdAkgICAqc2pvaW5xdWFscyA9IE5JTDsKKwlMaXN0CSAgICpvam9pbnF1 YWxzID0gTklMOworCisJZm9yZWFjaChsYywgam9pbnF1YWxzKQorCXsKKwkJUmVzdHJpY3RJ bmZvICpyaW5mbyA9IGxmaXJzdF9ub2RlKFJlc3RyaWN0SW5mbywgbGMpOworCQlPcEV4cHIJ ICAgKmV4cHI7CisJCU5vZGUJICAgKmxlZnRleHByOworCQlOb2RlCSAgICpyaWdodGV4cHI7 CisKKwkJLyogSW4gZ2VuZXJhbCwgY2xhdXNlIGxvb2tzIGxpa2UgRihhcmcxKSA9IEcoYXJn MikgKi8KKwkJaWYgKCFyaW5mby0+bWVyZ2VvcGZhbWlsaWVzIHx8CisJCQlibXNfbnVtX21l bWJlcnMocmluZm8tPmNsYXVzZV9yZWxpZHMpICE9IDIgfHwKKwkJCWJtc19tZW1iZXJzaGlw KHJpbmZvLT5sZWZ0X3JlbGlkcykgIT0gQk1TX1NJTkdMRVRPTiB8fAorCQkJYm1zX21lbWJl cnNoaXAocmluZm8tPnJpZ2h0X3JlbGlkcykgIT0gQk1TX1NJTkdMRVRPTikKKwkJeworCQkJ b2pvaW5xdWFscyA9IGxhcHBlbmQob2pvaW5xdWFscywgcmluZm8pOworCQkJY29udGludWU7 CisJCX0KKworCQlleHByID0gKE9wRXhwciAqKSByaW5mby0+Y2xhdXNlOworCisJCWlmICgh SXNBKGV4cHIsIE9wRXhwcikgfHwgbGlzdF9sZW5ndGgoZXhwci0+YXJncykgIT0gMikKKwkJ eworCQkJb2pvaW5xdWFscyA9IGxhcHBlbmQob2pvaW5xdWFscywgcmluZm8pOworCQkJY29u dGludWU7CisJCX0KKworCQlsZWZ0ZXhwciA9IGdldF9sZWZ0b3AocmluZm8tPmNsYXVzZSk7 CisJCXJpZ2h0ZXhwciA9IGNvcHlPYmplY3QoZ2V0X3JpZ2h0b3AocmluZm8tPmNsYXVzZSkp OworCisJCWlmIChsZWZ0ZXhwciAmJiBJc0EobGVmdGV4cHIsIFJlbGFiZWxUeXBlKSkKKwkJ CWxlZnRleHByID0gKE5vZGUgKikgKChSZWxhYmVsVHlwZSAqKSBsZWZ0ZXhwciktPmFyZzsK KwkJaWYgKHJpZ2h0ZXhwciAmJiBJc0EocmlnaHRleHByLCBSZWxhYmVsVHlwZSkpCisJCQly aWdodGV4cHIgPSAoTm9kZSAqKSAoKFJlbGFiZWxUeXBlICopIHJpZ2h0ZXhwciktPmFyZzsK KworCQkvKgorCQkgKiBRdWl0ZSBhbiBleHBlbnNpdmUgb3BlcmF0aW9uLCBuYXJyb3dpbmcg dGhlIHVzZSBjYXNlLiBGb3IgZXhhbXBsZSwKKwkJICogd2hlbiB3ZSBoYXZlIGNhc3Qgb2Yg dGhlIHNhbWUgdmFyIHRvIGRpZmZlcmVudCAoYnV0IGNvbXBhdGlibGUpCisJCSAqIHR5cGVz LgorCQkgKi8KKwkJcmVwbGFjZV92YXJubyhyaWdodGV4cHIsIGJtc19zaW5nbGV0b25fbWVt YmVyKHJpbmZvLT5yaWdodF9yZWxpZHMpLAorCQkJCQkgIGJtc19zaW5nbGV0b25fbWVtYmVy KHJpbmZvLT5sZWZ0X3JlbGlkcykpOworCisJCWlmIChlcXVhbChsZWZ0ZXhwciwgcmlnaHRl eHByKSkKKwkJCXNqb2lucXVhbHMgPSBsYXBwZW5kKHNqb2lucXVhbHMsIHJpbmZvKTsKKwkJ ZWxzZQorCQkJb2pvaW5xdWFscyA9IGxhcHBlbmQob2pvaW5xdWFscywgcmluZm8pOworCX0K KworCSpzZWxmam9pbnF1YWxzID0gc2pvaW5xdWFsczsKKwkqb3RoZXJqb2lucXVhbHMgPSBv am9pbnF1YWxzOworfQorCisvKgorICogQ2hlY2sgZm9yIGEgY2FzZSB3aGVuIHVuaXF1ZW5l c3MgaXMgYXQgbGVhc3QgcGFydGx5IGRlcml2ZWQgZnJvbSBhCisgKiBiYXNlcmVzdHJpY3Rp bmZvIGNsYXVzZS4gSW4gdGhpcyBjYXNlLCB3ZSBoYXZlIGEgY2hhbmNlIHRvIHJldHVybiBv bmx5CisgKiBvbmUgcm93IChpZiBzdWNoIGNsYXVzZXMgb24gYm90aCBzaWRlcyBvZiBTSiBh cmUgZXF1YWwpIG9yIG5vdGhpbmcgKGlmIHRoZXkKKyAqIGFyZSBkaWZmZXJlbnQpLgorICov CitzdGF0aWMgYm9vbAorbWF0Y2hfdW5pcXVlX2NsYXVzZXMoUGxhbm5lckluZm8gKnJvb3Qs IFJlbE9wdEluZm8gKm91dGVyLCBMaXN0ICp1Y2xhdXNlcywKKwkJCQkJIEluZGV4IHJlbGlk KQoreworCUxpc3RDZWxsICAgKmxjOworCisJZm9yZWFjaChsYywgdWNsYXVzZXMpCisJewor CQlSZXN0cmljdEluZm8gKnJpbmZvID0gbGZpcnN0X25vZGUoUmVzdHJpY3RJbmZvLCBsYyk7 CisJCUV4cHIJICAgKmNsYXVzZTsKKwkJTm9kZQkgICAqaWNsYXVzZTsKKwkJTm9kZQkgICAq YzE7CisJCWJvb2wJCW1hdGNoZWQgPSBmYWxzZTsKKwkJTGlzdENlbGwgICAqb2xjOworCisJ CUFzc2VydChvdXRlci0+cmVsaWQgPiAwICYmIHJlbGlkID4gMCk7CisKKwkJLyogT25seSBm aWx0ZXJzIGxpa2UgZihSLngxLC4uLixSLnhOKSA9PSBleHByIHdlIHNob3VsZCBjb25zaWRl ci4gKi8KKwkJQXNzZXJ0KGJtc19pc19lbXB0eShyaW5mby0+bGVmdF9yZWxpZHMpIF4KKwkJ CSAgIGJtc19pc19lbXB0eShyaW5mby0+cmlnaHRfcmVsaWRzKSk7CisKKwkJY2xhdXNlID0g KEV4cHIgKikgY29weU9iamVjdChyaW5mby0+Y2xhdXNlKTsKKwkJcmVwbGFjZV92YXJubygo Tm9kZSAqKSBjbGF1c2UsIHJlbGlkLCBvdXRlci0+cmVsaWQpOworCisJCWljbGF1c2UgPSBi bXNfaXNfZW1wdHkocmluZm8tPmxlZnRfcmVsaWRzKSA/IGdldF9yaWdodG9wKGNsYXVzZSkg OgorCQkJZ2V0X2xlZnRvcChjbGF1c2UpOworCQljMSA9IGJtc19pc19lbXB0eShyaW5mby0+ bGVmdF9yZWxpZHMpID8gZ2V0X2xlZnRvcChjbGF1c2UpIDoKKwkJCWdldF9yaWdodG9wKGNs YXVzZSk7CisKKwkJLyoKKwkJICogQ29tcGFyZSB0aGVzZSBsZWZ0IGFuZCByaWdodCBzaWRl cyB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIHNpZGVzIG9mCisJCSAqIHRoZSBvdXRlcidzIGZp bHRlcnMuIElmIG5vIG9uZSBpcyBkZXRlY3RlZCAtIHJldHVybiBpbW1lZGlhdGVseS4KKwkJ ICovCisJCWZvcmVhY2gob2xjLCBvdXRlci0+YmFzZXJlc3RyaWN0aW5mbykKKwkJeworCQkJ UmVzdHJpY3RJbmZvICpvcmluZm8gPSBsZmlyc3Rfbm9kZShSZXN0cmljdEluZm8sIG9sYyk7 CisJCQlOb2RlCSAgICpvY2xhdXNlOworCQkJTm9kZQkgICAqYzI7CisKKwkJCWlmIChvcmlu Zm8tPm1lcmdlb3BmYW1pbGllcyA9PSBOSUwpCisJCQkJLyogRG9uJ3QgY29uc2lkZXIgY2xh dXNlcyB3aGljaCBhcmVuJ3Qgc2ltaWxhciB0byAnRihYKT1HKFkpJyAqLworCQkJCWNvbnRp bnVlOworCisJCQlBc3NlcnQoaXNfb3BjbGF1c2Uob3JpbmZvLT5jbGF1c2UpKTsKKworCQkJ b2NsYXVzZSA9IGJtc19pc19lbXB0eShvcmluZm8tPmxlZnRfcmVsaWRzKSA/CisJCQkJZ2V0 X3JpZ2h0b3Aob3JpbmZvLT5jbGF1c2UpIDogZ2V0X2xlZnRvcChvcmluZm8tPmNsYXVzZSk7 CisJCQljMiA9IChibXNfaXNfZW1wdHkob3JpbmZvLT5sZWZ0X3JlbGlkcykgPworCQkJCSAg Z2V0X2xlZnRvcChvcmluZm8tPmNsYXVzZSkgOiBnZXRfcmlnaHRvcChvcmluZm8tPmNsYXVz ZSkpOworCisJCQlpZiAoZXF1YWwoaWNsYXVzZSwgb2NsYXVzZSkgJiYgZXF1YWwoYzEsIGMy KSkKKwkJCXsKKwkJCQltYXRjaGVkID0gdHJ1ZTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQor CisJCWlmICghbWF0Y2hlZCkKKwkJCXJldHVybiBmYWxzZTsKKwl9CisKKwlyZXR1cm4gdHJ1 ZTsKK30KKworLyoKKyAqIEZpbmQgYW5kIHJlbW92ZSB1bmlxdWUgc2VsZiBqb2lucyBpbiBh IGdyb3VwIG9mIGJhc2UgcmVsYXRpb25zIHRoYXQgaGF2ZQorICogdGhlIHNhbWUgT2lkLgor ICoKKyAqIFJldHVybnMgYSBzZXQgb2YgcmVsaWRzIHRoYXQgd2VyZSByZW1vdmVkLgorICov CitzdGF0aWMgUmVsaWRzCityZW1vdmVfc2VsZl9qb2luc19vbmVfZ3JvdXAoUGxhbm5lcklu Zm8gKnJvb3QsIFJlbGlkcyByZWxpZHMpCit7CisJUmVsaWRzCQlyZXN1bHQgPSBOVUxMOwor CWludAkJCWs7CQkJCS8qIEluZGV4IG9mIGtlcHQgcmVsYXRpb24gKi8KKwlpbnQJCQlyID0g LTE7CQkJLyogSW5kZXggb2YgcmVtb3ZlZCByZWxhdGlvbiAqLworCisJd2hpbGUgKChyID0g Ym1zX25leHRfbWVtYmVyKHJlbGlkcywgcikpID4gMCkKKwl7CisJCVJlbE9wdEluZm8gKmlu bmVyID0gcm9vdC0+c2ltcGxlX3JlbF9hcnJheVtyXTsKKworCQkvKgorCQkgKiBXZSBkb24n dCBhY2NlcHQgcmVzdWx0IHJlbGF0aW9uIGFzIGVpdGhlciBzb3VyY2Ugb3IgdGFyZ2V0IHJl bGF0aW9uCisJCSAqIG9mIFNKRSwgYmVjYXVzZSByZXN1bHQgcmVsYXRpb24gaGFzIGRpZmZl cmVudCBiZWhhdmlvciBpbgorCQkgKiBFdmFsUGxhblF1YWwoKSBhbmQgUkVUVVJOSU5HIGNs YXVzZS4KKwkJICovCisJCWlmIChyb290LT5wYXJzZS0+cmVzdWx0UmVsYXRpb24gPT0gcikK KwkJCWNvbnRpbnVlOworCisJCWsgPSByOworCisJCXdoaWxlICgoayA9IGJtc19uZXh0X21l bWJlcihyZWxpZHMsIGspKSA+IDApCisJCXsKKwkJCVJlbGlkcwkJam9pbnJlbGlkcyA9IE5V TEw7CisJCQlSZWxPcHRJbmZvICpvdXRlciA9IHJvb3QtPnNpbXBsZV9yZWxfYXJyYXlba107 CisJCQlMaXN0CSAgICpyZXN0cmljdGxpc3Q7CisJCQlMaXN0CSAgICpzZWxmam9pbnF1YWxz OworCQkJTGlzdAkgICAqb3RoZXJqb2lucXVhbHM7CisJCQlMaXN0Q2VsbCAgICpsYzsKKwkJ CWJvb2wJCWppbmZvX2NoZWNrID0gdHJ1ZTsKKwkJCVBsYW5Sb3dNYXJrICpvbWFyayA9IE5V TEw7CisJCQlQbGFuUm93TWFyayAqaW1hcmsgPSBOVUxMOworCQkJTGlzdAkgICAqdWNsYXVz ZXMgPSBOSUw7CisKKwkJCWlmIChyb290LT5wYXJzZS0+cmVzdWx0UmVsYXRpb24gPT0gaykK KwkJCQljb250aW51ZTsKKworCQkJLyogQSBzYW5pdHkgY2hlY2s6IHRoZSByZWxhdGlvbnMg aGF2ZSB0aGUgc2FtZSBPaWQuICovCisJCQlBc3NlcnQocm9vdC0+c2ltcGxlX3J0ZV9hcnJh eVtrXS0+cmVsaWQgPT0KKwkJCQkgICByb290LT5zaW1wbGVfcnRlX2FycmF5W3JdLT5yZWxp ZCk7CisKKwkJCS8qCisJCQkgKiBJdCBpcyBpbXBvc3NpYmxlIHRvIGVsaW1pbmF0ZSBqb2lu IG9mIHR3byByZWxhdGlvbnMgaWYgdGhleQorCQkJICogYmVsb25nIHRvIGRpZmZlcmVudCBy dWxlcyBvZiBvcmRlci4gT3RoZXJ3aXNlIHBsYW5uZXIgY2FuJ3QgYmUKKwkJCSAqIGFibGUg dG8gZmluZCBhbnkgdmFyaWFudHMgb2YgY29ycmVjdCBxdWVyeSBwbGFuLgorCQkJICovCisJ CQlmb3JlYWNoKGxjLCByb290LT5qb2luX2luZm9fbGlzdCkKKwkJCXsKKwkJCQlTcGVjaWFs Sm9pbkluZm8gKmluZm8gPSAoU3BlY2lhbEpvaW5JbmZvICopIGxmaXJzdChsYyk7CisKKwkJ CQlpZiAoKGJtc19pc19tZW1iZXIoaywgaW5mby0+c3luX2xlZnRoYW5kKSBeCisJCQkJCSBi bXNfaXNfbWVtYmVyKHIsIGluZm8tPnN5bl9sZWZ0aGFuZCkpIHx8CisJCQkJCShibXNfaXNf bWVtYmVyKGssIGluZm8tPnN5bl9yaWdodGhhbmQpIF4KKwkJCQkJIGJtc19pc19tZW1iZXIo ciwgaW5mby0+c3luX3JpZ2h0aGFuZCkpKQorCQkJCXsKKwkJCQkJamluZm9fY2hlY2sgPSBm YWxzZTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQkJaWYgKCFqaW5mb19jaGVjaykK KwkJCQljb250aW51ZTsKKworCQkJLyoKKwkJCSAqIENoZWNrIFJvdyBNYXJrcyBlcXVpdmFs ZW5jZS4gIFdlIGNhbid0IHJlbW92ZSB0aGUgam9pbiBpZiB0aGUKKwkJCSAqIHJlbGF0aW9u cyBoYXZlIHJvdyBtYXJrcyBvZiBkaWZmZXJlbnQgc3RyZW5ndGggKGUuZy4gb25lIGlzCisJ CQkgKiBsb2NrZWQgRk9SIFVQREFURSBhbmQgYW5vdGhlciBqdXN0IGhhcyBST1dfTUFSS19S RUZFUkVOQ0UgZm9yCisJCQkgKiBFdmFsUGxhblF1YWwgcmVjaGVja2luZykuCisJCQkgKi8K KwkJCWZvcmVhY2gobGMsIHJvb3QtPnJvd01hcmtzKQorCQkJeworCQkJCVBsYW5Sb3dNYXJr ICpyb3dNYXJrID0gKFBsYW5Sb3dNYXJrICopIGxmaXJzdChsYyk7CisKKwkJCQlpZiAocm93 TWFyay0+cnRpID09IGspCisJCQkJeworCQkJCQlBc3NlcnQoaW1hcmsgPT0gTlVMTCk7CisJ CQkJCWltYXJrID0gcm93TWFyazsKKwkJCQl9CisJCQkJZWxzZSBpZiAocm93TWFyay0+cnRp ID09IHIpCisJCQkJeworCQkJCQlBc3NlcnQob21hcmsgPT0gTlVMTCk7CisJCQkJCW9tYXJr ID0gcm93TWFyazsKKwkJCQl9CisKKwkJCQlpZiAob21hcmsgJiYgaW1hcmspCisJCQkJCWJy ZWFrOworCQkJfQorCQkJaWYgKG9tYXJrICYmIGltYXJrICYmIG9tYXJrLT5tYXJrVHlwZSAh PSBpbWFyay0+bWFya1R5cGUpCisJCQkJY29udGludWU7CisKKwkJCS8qCisJCQkgKiBXZSBv bmx5IGRlYWwgd2l0aCBiYXNlIHJlbHMgaGVyZSwgc28gdGhlaXIgcmVsaWRzIGJpdHNldAor CQkJICogY29udGFpbnMgb25seSBvbmUgbWVtYmVyIC0tIHRoZWlyIHJlbGlkLgorCQkJICov CisJCQlqb2lucmVsaWRzID0gYm1zX2FkZF9tZW1iZXIoam9pbnJlbGlkcywgcik7CisJCQlq b2lucmVsaWRzID0gYm1zX2FkZF9tZW1iZXIoam9pbnJlbGlkcywgayk7CisKKwkJCS8qCisJ CQkgKiBQSFZzIHNob3VsZCBub3QgaW1wb3NlIGFueSBjb25zdHJhaW50cyBvbiByZW1vdmlu ZyBzZWxmIGpvaW5zLgorCQkJICovCisKKwkJCS8qCisJCQkgKiBBdCB0aGlzIHN0YWdlLCBq b2luaW5mbyBsaXN0cyBvZiBpbm5lciBhbmQgb3V0ZXIgY2FuIGNvbnRhaW4KKwkJCSAqIG9u bHkgY2xhdXNlcywgcmVxdWlyZWQgZm9yIGEgc3VwZXJpb3Igb3V0ZXIgam9pbiB0aGF0IGNh bid0CisJCQkgKiBpbmZsdWVuY2UgdGhpcyBvcHRpbWl6YXRpb24uIFNvLCB3ZSBjYW4gYXZv aWQgdG8gY2FsbCB0aGUKKwkJCSAqIGJ1aWxkX2pvaW5yZWxfcmVzdHJpY3RsaXN0KCkgcm91 dGluZS4KKwkJCSAqLworCQkJcmVzdHJpY3RsaXN0ID0gZ2VuZXJhdGVfam9pbl9pbXBsaWVk X2VxdWFsaXRpZXMocm9vdCwgam9pbnJlbGlkcywKKwkJCQkJCQkJCQkJCQkJCWlubmVyLT5y ZWxpZHMsCisJCQkJCQkJCQkJCQkJCQlvdXRlciwgTlVMTCk7CisKKwkJCS8qCisJCQkgKiBQ cm9jZXNzIHJlc3RyaWN0bGlzdCB0byBzZXBhcmF0ZSB0aGUgc2VsZiBqb2luIHF1YWxzIG91 dCBvZiB0aGUKKwkJCSAqIG90aGVyIHF1YWxzLiBlLmcgeCA9IHggZ29lcyB0byBzZWxmam9p bnF1YWxzIGFuZCBhID0gYiB0bworCQkJICogb3RoZXJqb2lucXVhbHMuCisJCQkgKi8KKwkJ CXNwbGl0X3NlbGZqb2luX3F1YWxzKHJvb3QsIHJlc3RyaWN0bGlzdCwgJnNlbGZqb2lucXVh bHMsCisJCQkJCQkJCSAmb3RoZXJqb2lucXVhbHMsIGlubmVyLT5yZWxpZCwgb3V0ZXItPnJl bGlkKTsKKworCQkJLyoKKwkJCSAqIFRvIGVuYWJsZSBTSkUgZm9yIHRoZSBvbmx5IGRlZ2Vu ZXJhdGUgY2FzZSB3aXRob3V0IGFueSBzZWxmCisJCQkgKiBqb2luIGNsYXVzZXMgYXQgYWxs LCBhZGQgYmFzZXJlc3RyaWN0aW5mbyB0byB0aGlzIGxpc3QuIFRoZQorCQkJICogZGVnZW5l cmF0ZSBjYXNlIHdvcmtzIG9ubHkgaWYgYm90aCBzaWRlcyBoYXZlIHRoZSBzYW1lIGNsYXVz ZS4KKwkJCSAqIFNvIGRvZXNuJ3QgbWF0dGVyIHdoaWNoIHNpZGUgdG8gYWRkLgorCQkJICov CisJCQlzZWxmam9pbnF1YWxzID0gbGlzdF9jb25jYXQoc2VsZmpvaW5xdWFscywgb3V0ZXIt PmJhc2VyZXN0cmljdGluZm8pOworCisJCQkvKgorCQkJICogRGV0ZXJtaW5lIGlmIHRoZSBp bm5lciB0YWJsZSBjYW4gZHVwbGljYXRlIG91dGVyIHJvd3MuICBXZSBtdXN0CisJCQkgKiBi eXBhc3MgdGhlIHVuaXF1ZSByZWwgY2FjaGUgaGVyZSBzaW5jZSB3ZSdyZSBwb3NzaWJseSB1 c2luZyBhCisJCQkgKiBzdWJzZXQgb2Ygam9pbiBxdWFscy4gV2UgY2FuIHVzZSAnZm9yY2Vf Y2FjaGUnID09IHRydWUgd2hlbiBhbGwKKwkJCSAqIGpvaW4gcXVhbHMgYXJlIHNlbGYtam9p biBxdWFscy4gIE90aGVyd2lzZSwgd2UgY291bGQgZW5kIHVwCisJCQkgKiBwdXR0aW5nIGZh bHNlIG5lZ2F0aXZlcyBpbiB0aGUgY2FjaGUuCisJCQkgKi8KKwkJCWlmICghaW5uZXJyZWxf aXNfdW5pcXVlX2V4dChyb290LCBqb2lucmVsaWRzLCBpbm5lci0+cmVsaWRzLAorCQkJCQkJ CQkJCW91dGVyLCBKT0lOX0lOTkVSLCBzZWxmam9pbnF1YWxzLAorCQkJCQkJCQkJCWxpc3Rf bGVuZ3RoKG90aGVyam9pbnF1YWxzKSA9PSAwLAorCQkJCQkJCQkJCSZ1Y2xhdXNlcykpCisJ CQkJY29udGludWU7CisKKwkJCS8qCisJCQkgKiBXZSBoYXZlIHByb3ZlbiB0aGF0IGZvciBi b3RoIHJlbGF0aW9ucywgdGhlIHNhbWUgdW5pcXVlIGluZGV4CisJCQkgKiBndWFyYW50ZWVz IHRoYXQgdGhlcmUgaXMgYXQgbW9zdCBvbmUgcm93IHdoZXJlIGNvbHVtbnMgZXF1YWwKKwkJ CSAqIGdpdmVuIHZhbHVlcy4gVGhlc2UgdmFsdWVzIG11c3QgYmUgdGhlIHNhbWUgZm9yIGJv dGggcmVsYXRpb25zLAorCQkJICogb3IgZWxzZSB3ZSB3b24ndCBtYXRjaCB0aGUgc2FtZSBy b3cgb24gZWFjaCBzaWRlIG9mIHRoZSBqb2luLgorCQkJICovCisJCQlpZiAoIW1hdGNoX3Vu aXF1ZV9jbGF1c2VzKHJvb3QsIGlubmVyLCB1Y2xhdXNlcywgb3V0ZXItPnJlbGlkKSkKKwkJ CQljb250aW51ZTsKKworCQkJLyoKKwkJCSAqIFdlIGNhbiByZW1vdmUgZWl0aGVyIHJlbGF0 aW9uLCBzbyByZW1vdmUgdGhlIGlubmVyIG9uZSBpbiBvcmRlcgorCQkJICogdG8gc2ltcGxp ZnkgdGhpcyBsb29wLgorCQkJICovCisJCQlyZW1vdmVfc2VsZl9qb2luX3JlbChyb290LCBv bWFyaywgaW1hcmssIG91dGVyLCBpbm5lciwgcmVzdHJpY3RsaXN0KTsKKworCQkJcmVzdWx0 ID0gYm1zX2FkZF9tZW1iZXIocmVzdWx0LCByKTsKKworCQkJLyogV2UgaGF2ZSByZW1vdmVk IHRoZSBvdXRlciByZWxhdGlvbiwgdHJ5IHRoZSBuZXh0IG9uZS4gKi8KKwkJCWJyZWFrOwor CQl9CisJfQorCisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIEdhdGhlciBpbmRleGVz IG9mIGJhc2UgcmVsYXRpb25zIGZyb20gdGhlIGpvaW5saXN0IGFuZCB0cnkgdG8gZWxpbWlu YXRlIHNlbGYKKyAqIGpvaW5zLgorICovCitzdGF0aWMgUmVsaWRzCityZW1vdmVfc2VsZl9q b2luc19yZWN1cnNlKFBsYW5uZXJJbmZvICpyb290LCBMaXN0ICpqb2lubGlzdCwgUmVsaWRz IHRvUmVtb3ZlKQoreworCUxpc3RDZWxsICAgKmpsOworCVJlbGlkcwkJcmVsaWRzID0gTlVM TDsKKwlTZWxmSm9pbkNhbmRpZGF0ZSAqY2FuZGlkYXRlcyA9IE5VTEw7CisJaW50CQkJaTsK KwlpbnQJCQlqOworCWludAkJCW51bVJlbHM7CisKKwkvKiBDb2xsZWN0IGluZGV4ZXMgb2Yg YmFzZSByZWxhdGlvbnMgb2YgdGhlIGpvaW4gdHJlZSAqLworCWZvcmVhY2goamwsIGpvaW5s aXN0KQorCXsKKwkJTm9kZQkgICAqamxub2RlID0gKE5vZGUgKikgbGZpcnN0KGpsKTsKKwor CQlpZiAoSXNBKGpsbm9kZSwgUmFuZ2VUYmxSZWYpKQorCQl7CisJCQlpbnQJCQl2YXJubyA9 ICgoUmFuZ2VUYmxSZWYgKikgamxub2RlKS0+cnRpbmRleDsKKwkJCVJhbmdlVGJsRW50cnkg KnJ0ZSA9IHJvb3QtPnNpbXBsZV9ydGVfYXJyYXlbdmFybm9dOworCisJCQkvKgorCQkJICog V2Ugb25seSBjb25zaWRlciBvcmRpbmFyeSByZWxhdGlvbnMgYXMgY2FuZGlkYXRlcyB0byBi ZSByZW1vdmVkLAorCQkJICogYW5kIHRoZXNlIHJlbGF0aW9ucyBzaG91bGQgbm90IGhhdmUg VEFCTEVTQU1QTEUgY2xhdXNlcworCQkJICogc3BlY2lmaWVkLiAgUmVtb3ZpbmcgYSByZWxh dGlvbiB3aXRoIFRBQkxFU0FNUExFIGNsYXVzZSBjb3VsZAorCQkJICogcG90ZW50aWFsbHkg Y2hhbmdlIHRoZSBzeW50YXggb2YgdGhlIHF1ZXJ5LgorCQkJICovCisJCQlpZiAocnRlLT5y dGVraW5kID09IFJURV9SRUxBVElPTiAmJgorCQkJCXJ0ZS0+cmVsa2luZCA9PSBSRUxLSU5E X1JFTEFUSU9OICYmCisJCQkJcnRlLT50YWJsZXNhbXBsZSA9PSBOVUxMKQorCQkJeworCQkJ CUFzc2VydCghYm1zX2lzX21lbWJlcih2YXJubywgcmVsaWRzKSk7CisJCQkJcmVsaWRzID0g Ym1zX2FkZF9tZW1iZXIocmVsaWRzLCB2YXJubyk7CisJCQl9CisJCX0KKwkJZWxzZSBpZiAo SXNBKGpsbm9kZSwgTGlzdCkpCisJCXsKKwkJCS8qIFJlY3Vyc2l2ZWx5IGdvIGluc2lkZSB0 aGUgc3ViLWpvaW5saXN0ICovCisJCQl0b1JlbW92ZSA9IHJlbW92ZV9zZWxmX2pvaW5zX3Jl Y3Vyc2Uocm9vdCwgKExpc3QgKikgamxub2RlLAorCQkJCQkJCQkJCQkJIHRvUmVtb3ZlKTsK KwkJfQorCQllbHNlCisJCQllbG9nKEVSUk9SLCAidW5yZWNvZ25pemVkIGpvaW5saXN0IG5v ZGUgdHlwZTogJWQiLAorCQkJCSAoaW50KSBub2RlVGFnKGpsbm9kZSkpOworCX0KKworCW51 bVJlbHMgPSBibXNfbnVtX21lbWJlcnMocmVsaWRzKTsKKworCS8qIE5lZWQgYXQgbGVhc3Qg dHdvIHJlbGF0aW9ucyBmb3IgdGhlIGpvaW4gKi8KKwlpZiAobnVtUmVscyA8IDIpCisJCXJl dHVybiB0b1JlbW92ZTsKKworCS8qCisJICogSW4gb3JkZXIgdG8gZmluZCByZWxhdGlvbnMg d2l0aCB0aGUgc2FtZSBvaWQgd2UgZmlyc3QgYnVpbGQgYW4gYXJyYXkgb2YKKwkgKiBjYW5k aWRhdGVzIGFuZCB0aGVuIHNvcnQgaXQgYnkgb2lkLgorCSAqLworCWNhbmRpZGF0ZXMgPSAo U2VsZkpvaW5DYW5kaWRhdGUgKikgcGFsbG9jKHNpemVvZihTZWxmSm9pbkNhbmRpZGF0ZSkg KgorCQkJCQkJCQkJCQkgIG51bVJlbHMpOworCWkgPSAtMTsKKwlqID0gMDsKKwl3aGlsZSAo KGkgPSBibXNfbmV4dF9tZW1iZXIocmVsaWRzLCBpKSkgPj0gMCkKKwl7CisJCWNhbmRpZGF0 ZXNbal0ucmVsaWQgPSBpOworCQljYW5kaWRhdGVzW2pdLnJlbG9pZCA9IHJvb3QtPnNpbXBs ZV9ydGVfYXJyYXlbaV0tPnJlbGlkOworCQlqKys7CisJfQorCisJcXNvcnQoY2FuZGlkYXRl cywgbnVtUmVscywgc2l6ZW9mKFNlbGZKb2luQ2FuZGlkYXRlKSwKKwkJICBzZWxmX2pvaW5f Y2FuZGlkYXRlc19jbXApOworCisJLyoKKwkgKiBJdGVyYXRpdmVseSBmb3JtIGEgZ3JvdXAg b2YgcmVsYXRpb24gaW5kZXhlcyB3aXRoIHRoZSBzYW1lIG9pZCBhbmQKKwkgKiBsYXVuY2gg dGhlIHJvdXRpbmUgdGhhdCBkZXRlY3RzIHNlbGYtam9pbnMgaW4gdGhpcyBncm91cCBhbmQg cmVtb3ZlcworCSAqIGV4Y2Vzc2l2ZSByYW5nZSB0YWJsZSBlbnRyaWVzLgorCSAqCisJICog QXQgdGhlIGVuZCBvZiB0aGUgaXRlcmF0aW9uLCBleGNsdWRlIHRoZSBncm91cCBmcm9tIHRo ZSBvdmVyYWxsIHJlbGlkcworCSAqIGxpc3QuIFNvIGVhY2ggbmV4dCBpdGVyYXRpb24gb2Yg dGhlIGN5Y2xlIHdpbGwgaW52b2x2ZSBsZXNzIGFuZCBsZXNzCisJICogdmFsdWUgb2YgcmVs aWRzLgorCSAqLworCWkgPSAwOworCWZvciAoaiA9IDE7IGogPCBudW1SZWxzICsgMTsgaisr KQorCXsKKwkJaWYgKGogPT0gbnVtUmVscyB8fCBjYW5kaWRhdGVzW2pdLnJlbG9pZCAhPSBj YW5kaWRhdGVzW2ldLnJlbG9pZCkKKwkJeworCQkJaWYgKGogLSBpID49IDIpCisJCQl7CisJ CQkJLyogQ3JlYXRlIGEgZ3JvdXAgb2YgcmVsYXRpb24gaW5kZXhlcyB3aXRoIHRoZSBzYW1l IG9pZCAqLworCQkJCVJlbGlkcwkJZ3JvdXAgPSBOVUxMOworCQkJCVJlbGlkcwkJcmVtb3Zl ZDsKKworCQkJCXdoaWxlIChpIDwgaikKKwkJCQl7CisJCQkJCWdyb3VwID0gYm1zX2FkZF9t ZW1iZXIoZ3JvdXAsIGNhbmRpZGF0ZXNbaV0ucmVsaWQpOworCQkJCQlpKys7CisJCQkJfQor CisJCQkJcmVsaWRzID0gYm1zX2RlbF9tZW1iZXJzKHJlbGlkcywgZ3JvdXApOworCisJCQkJ LyoKKwkJCQkgKiBUcnkgdG8gcmVtb3ZlIHNlbGYtam9pbnMgZnJvbSBhIGdyb3VwIG9mIGlk ZW50aWNhbCBlbnRyaWVzLgorCQkJCSAqIE1ha2UgdGhlIG5leHQgYXR0ZW1wdCBpdGVyYXRp dmVseSAtIGlmIHNvbWV0aGluZyBpcyBkZWxldGVkCisJCQkJICogZnJvbSBhIGdyb3VwLCBj aGFuZ2VzIGluIGNsYXVzZXMgYW5kIGVxdWl2YWxlbmNlIGNsYXNzZXMKKwkJCQkgKiBjYW4g Z2l2ZSB1cyBhIGNoYW5jZSB0byBmaW5kIG1vcmUgY2FuZGlkYXRlcy4KKwkJCQkgKi8KKwkJ CQlkbworCQkJCXsKKwkJCQkJQXNzZXJ0KCFibXNfb3ZlcmxhcChncm91cCwgdG9SZW1vdmUp KTsKKwkJCQkJcmVtb3ZlZCA9IHJlbW92ZV9zZWxmX2pvaW5zX29uZV9ncm91cChyb290LCBn cm91cCk7CisJCQkJCXRvUmVtb3ZlID0gYm1zX2FkZF9tZW1iZXJzKHRvUmVtb3ZlLCByZW1v dmVkKTsKKwkJCQkJZ3JvdXAgPSBibXNfZGVsX21lbWJlcnMoZ3JvdXAsIHJlbW92ZWQpOwor CQkJCX0gd2hpbGUgKCFibXNfaXNfZW1wdHkocmVtb3ZlZCkgJiYKKwkJCQkJCSBibXNfbWVt YmVyc2hpcChncm91cCkgPT0gQk1TX01VTFRJUExFKTsKKwkJCQlibXNfZnJlZShyZW1vdmVk KTsKKwkJCQlibXNfZnJlZShncm91cCk7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJLyog U2luZ2xlIHJlbGF0aW9uLCBqdXN0IHJlbW92ZSBpdCBmcm9tIHRoZSBzZXQgKi8KKwkJCQly ZWxpZHMgPSBibXNfZGVsX21lbWJlcihyZWxpZHMsIGNhbmRpZGF0ZXNbaV0ucmVsaWQpOwor CQkJCWkgPSBqOworCQkJfQorCQl9CisJfQorCisJQXNzZXJ0KGJtc19pc19lbXB0eShyZWxp ZHMpKTsKKworCXJldHVybiB0b1JlbW92ZTsKK30KKworLyoKKyAqIENvbXBhcmUgc2VsZi1q b2luIGNhbmRpZGF0ZXMgYnkgdGhlaXIgb2lkcy4KKyAqLworc3RhdGljIGludAorc2VsZl9q b2luX2NhbmRpZGF0ZXNfY21wKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpCit7CisJ Y29uc3QgU2VsZkpvaW5DYW5kaWRhdGUgKmNhID0gKGNvbnN0IFNlbGZKb2luQ2FuZGlkYXRl ICopIGE7CisJY29uc3QgU2VsZkpvaW5DYW5kaWRhdGUgKmNiID0gKGNvbnN0IFNlbGZKb2lu Q2FuZGlkYXRlICopIGI7CisKKwlpZiAoY2EtPnJlbG9pZCAhPSBjYi0+cmVsb2lkKQorCQly ZXR1cm4gKGNhLT5yZWxvaWQgPCBjYi0+cmVsb2lkID8gLTEgOiAxKTsKKwllbHNlCisJCXJl dHVybiAwOworfQorCisvKgorICogRmluZCBhbmQgcmVtb3ZlIHVzZWxlc3Mgc2VsZiBqb2lu cy4KKyAqCisgKiBTZWFyY2ggZm9yIGpvaW5zIHdoZXJlIGEgcmVsYXRpb24gaXMgam9pbmVk IHRvIGl0c2VsZi4gSWYgdGhlIGpvaW4gY2xhdXNlCisgKiBmb3IgZWFjaCB0dXBsZSBmcm9t IG9uZSBzaWRlIG9mIHRoZSBqb2luIGlzIHByb3ZlbiB0byBtYXRjaCB0aGUgc2FtZQorICog cGh5c2ljYWwgcm93IChvciBub3RoaW5nKSBvbiB0aGUgb3RoZXIgc2lkZSwgdGhhdCBzZWxm LWpvaW4gY2FuIGJlCisgKiBlbGltaW5hdGVkIGZyb20gdGhlIHF1ZXJ5LiAgU3VpdGFibGUg am9pbiBjbGF1c2VzIGFyZSBhc3N1bWVkIHRvIGJlIGluIHRoZQorICogZm9ybSBvZiBYID0g WCwgYW5kIGNhbiBiZSByZXBsYWNlZCB3aXRoIE5PVCBOVUxMIGNsYXVzZXMuCisgKgorICog Rm9yIHRoZSBzYWtlIG9mIHNpbXBsaWNpdHksIHdlIGRvbid0IGFwcGx5IHRoaXMgb3B0aW1p emF0aW9uIHRvIHNwZWNpYWwKKyAqIGpvaW5zLiBIZXJlIGlzIGEgbGlzdCBvZiB3aGF0IHdl IGNvdWxkIGRvIGluIHNvbWUgcGFydGljdWxhciBjYXNlczoKKyAqICdhIGExIHNlbWkgam9p biBhIGEyJzogaXMgcmVkdWNlZCB0byBpbm5lciBieSByZWR1Y2VfdW5pcXVlX3NlbWlqb2lu cywKKyAqIGFuZCB0aGVuIHJlbW92ZWQgbm9ybWFsbHkuCisgKiAnYSBhMSBhbnRpIGpvaW4g YSBhMic6IGNvdWxkIHNpbXBsaWZ5IHRvIGEgc2NhbiB3aXRoICdvdXRlciBxdWFscyBBTkQK KyAqIChJUyBOVUxMIG9uIGpvaW4gY29sdW1ucyBPUiBOT1QgaW5uZXIgcXVhbHMpJy4KKyAq ICdhIGExIGxlZnQgam9pbiBhIGEyJzogY291bGQgc2ltcGxpZnkgdG8gYSBzY2FuIGxpa2Ug aW5uZXIgYnV0IHdpdGhvdXQKKyAqIE5PVCBOVUxMIGNvbmRpdGlvbnMgb24gam9pbiBjb2x1 bW5zLgorICogJ2EgYTEgbGVmdCBqb2luIChhIGEyIGpvaW4gYiknOiBjYW4ndCBzaW1wbGlm eSB0aGlzLCBiZWNhdXNlIGpvaW4gdG8gYgorICogY2FuIGJvdGggcmVtb3ZlIHJvd3MgYW5k IGludHJvZHVjZSBkdXBsaWNhdGVzLgorICoKKyAqIFRvIHNlYXJjaCBmb3IgcmVtb3ZhYmxl IGpvaW5zLCB3ZSBvcmRlciBhbGwgdGhlIHJlbGF0aW9ucyBvbiB0aGVpciBPaWQsCisgKiBn byBvdmVyIGVhY2ggc2V0IHdpdGggdGhlIHNhbWUgT2lkLCBhbmQgY29uc2lkZXIgZWFjaCBw YWlyIG9mIHJlbGF0aW9ucworICogaW4gdGhpcyBzZXQuCisgKgorICogVG8gcmVtb3ZlIHRo ZSBqb2luLCB3ZSBtYXJrIG9uZSBvZiB0aGUgcGFydGljaXBhdGluZyByZWxhdGlvbnMgYXMg ZGVhZAorICogYW5kIHJld3JpdGUgYWxsIHJlZmVyZW5jZXMgdG8gaXQgdG8gcG9pbnQgdG8g dGhlIHJlbWFpbmluZyByZWxhdGlvbi4KKyAqIFRoaXMgaW5jbHVkZXMgbW9kaWZ5aW5nIFJl c3RyaWN0SW5mb3MsIEVxdWl2YWxlbmNlQ2xhc3NlcywgYW5kCisgKiBFcXVpdmFsZW5jZU1l bWJlcnMuIFdlIGFsc28gaGF2ZSB0byBtb2RpZnkgdGhlIHJvdyBtYXJrcy4gVGhlIGpvaW4g Y2xhdXNlcworICogb2YgdGhlIHJlbW92ZWQgcmVsYXRpb24gYmVjb21lIGVpdGhlciByZXN0 cmljdGlvbiBvciBqb2luIGNsYXVzZXMsIGJhc2VkIG9uCisgKiB3aGV0aGVyIHRoZXkgcmVm ZXJlbmNlIGFueSByZWxhdGlvbnMgbm90IHBhcnRpY2lwYXRpbmcgaW4gdGhlIHJlbW92ZWQg am9pbi4KKyAqCisgKiAnam9pbmxpc3QnIGlzIHRoZSB0b3AtbGV2ZWwgam9pbmxpc3Qgb2Yg dGhlIHF1ZXJ5LiBJZiBpdCBoYXMgYW55CisgKiByZWZlcmVuY2VzIHRvIHRoZSByZW1vdmVk IHJlbGF0aW9ucywgd2UgdXBkYXRlIHRoZW0gdG8gcG9pbnQgdG8gdGhlCisgKiByZW1haW5p bmcgb25lcy4KKyAqLworTGlzdCAqCityZW1vdmVfdXNlbGVzc19zZWxmX2pvaW5zKFBsYW5u ZXJJbmZvICpyb290LCBMaXN0ICpqb2lubGlzdCkKK3sKKwlSZWxpZHMJCXRvUmVtb3ZlID0g TlVMTDsKKwlpbnQJCQlyZWxpZCA9IC0xOworCisJaWYgKCFlbmFibGVfc2VsZl9qb2luX3Jl bW92YWwgfHwgam9pbmxpc3QgPT0gTklMIHx8CisJCShsaXN0X2xlbmd0aChqb2lubGlzdCkg PT0gMSAmJiAhSXNBKGxpbml0aWFsKGpvaW5saXN0KSwgTGlzdCkpKQorCQlyZXR1cm4gam9p bmxpc3Q7CisKKwkvKgorCSAqIE1lcmdlIHBhaXJzIG9mIHJlbGF0aW9ucyBwYXJ0aWNpcGF0 ZWQgaW4gc2VsZi1qb2luLiBSZW1vdmUgdW5uZWNlc3NhcnkKKwkgKiByYW5nZSB0YWJsZSBl bnRyaWVzLgorCSAqLworCXRvUmVtb3ZlID0gcmVtb3ZlX3NlbGZfam9pbnNfcmVjdXJzZShy b290LCBqb2lubGlzdCwgdG9SZW1vdmUpOworCisJaWYgKHVubGlrZWx5KHRvUmVtb3ZlICE9 IE5VTEwpKQorCXsKKwkJLyogQXQgdGhlIGVuZCwgcmVtb3ZlIG9ycGhhbmVkIHJlbGF0aW9u IGxpbmtzICovCisJCXdoaWxlICgocmVsaWQgPSBibXNfbmV4dF9tZW1iZXIodG9SZW1vdmUs IHJlbGlkKSkgPj0gMCkKKwkJeworCQkJaW50CW5yZW1vdmVkID0gMDsKKworCQkJam9pbmxp c3QgPSByZW1vdmVfcmVsX2Zyb21fam9pbmxpc3Qoam9pbmxpc3QsIHJlbGlkLCAmbnJlbW92 ZWQpOworCQkJaWYgKG5yZW1vdmVkICE9IDEpCisJCQkJZWxvZyhFUlJPUiwgIlNKRSBmYWls ZWQgdG8gZmluZCByZWxhdGlvbiAlZCBpbiBqb2lubGlzdCIsIHJlbGlkKTsKKwkJfQorCX0K KworCXJldHVybiBqb2lubGlzdDsKIH0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGlt aXplci9wbGFuL3BsYW5tYWluLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFu bWFpbi5jCmluZGV4IGUxN2QzMWE1YzMuLjA3NWQzNmM3ZWMgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5tYWluLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0 aW1pemVyL3BsYW4vcGxhbm1haW4uYwpAQCAtMjMwLDYgKzIzMCwxMSBAQCBxdWVyeV9wbGFu bmVyKFBsYW5uZXJJbmZvICpyb290LAogCSAqLwogCXJlZHVjZV91bmlxdWVfc2VtaWpvaW5z KHJvb3QpOwogCisJLyoKKwkgKiBSZW1vdmUgc2VsZiBqb2lucyBvbiBhIHVuaXF1ZSBjb2x1 bW4uCisJICovCisJam9pbmxpc3QgPSByZW1vdmVfdXNlbGVzc19zZWxmX2pvaW5zKHJvb3Qs IGpvaW5saXN0KTsKKwogCS8qCiAJICogTm93IGRpc3RyaWJ1dGUgInBsYWNlaG9sZGVycyIg dG8gYmFzZSByZWxzIGFzIG5lZWRlZC4gIFRoaXMgaGFzIHRvIGJlCiAJICogZG9uZSBhZnRl ciBqb2luIHJlbW92YWwgYmVjYXVzZSByZW1vdmFsIGNvdWxkIGNoYW5nZSB3aGV0aGVyIGEK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wcmVwL3ByZXB1bmlvbi5jIGIv c3JjL2JhY2tlbmQvb3B0aW1pemVyL3ByZXAvcHJlcHVuaW9uLmMKaW5kZXggMWM2OWM2ZTk3 ZS4uYzVhOGQwMGJiMyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3ByZXAv cHJlcHVuaW9uLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3ByZXAvcHJlcHVuaW9u LmMKQEAgLTY2Miw3ICs2NjIsNyBAQCBidWlsZF9zZXRvcF9jaGlsZF9wYXRocyhQbGFubmVy SW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCSAqIG90aGVyd2lzZSBkbyBzdGF0aXN0 aWNhbCBlc3RpbWF0aW9uLgogCSAqCiAJICogWFhYIHlvdSBkb24ndCByZWFsbHkgd2FudCB0 byBrbm93IGFib3V0IHRoaXM6IHdlIGRvIHRoZSBlc3RpbWF0aW9uCi0JICogdXNpbmcgdGhl IHN1YnF1ZXJ5J3Mgb3JpZ2luYWwgdGFyZ2V0bGlzdCBleHByZXNzaW9ucywgbm90IHRoZQor CSAqIHVzaW5nIHRoZSBzdWJyb290LT5wYXJzZSdzIG9yaWdpbmFsIHRhcmdldGxpc3QgZXhw cmVzc2lvbnMsIG5vdCB0aGUKIAkgKiBzdWJyb290LT5wcm9jZXNzZWRfdGxpc3Qgd2hpY2gg bWlnaHQgc2VlbSBtb3JlIGFwcHJvcHJpYXRlLiAgVGhlIHJlYXNvbgogCSAqIGlzIHRoYXQg aWYgdGhlIHN1YnF1ZXJ5IGlzIGl0c2VsZiBhIHNldG9wLCBpdCBtYXkgcmV0dXJuIGEKIAkg KiBwcm9jZXNzZWRfdGxpc3QgY29udGFpbmluZyAidmFybm8gMCIgVmFycyBnZW5lcmF0ZWQg YnkKQEAgLTY3MCw2ICs2NzAsOSBAQCBidWlsZF9zZXRvcF9jaGlsZF9wYXRocyhQbGFubmVy SW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCSAqIG1pZ2h0aWx5LiAgV2Ugb3VnaHQg dG8gZ2V0IHJpZCBvZiB0aGUgInZhcm5vIDAiIGhhY2ssIGJ1dCB0aGF0IHJlcXVpcmVzCiAJ ICogYSByZWRlc2lnbiBvZiB0aGUgcGFyc2V0cmVlIHJlcHJlc2VudGF0aW9uIG9mIHNldG9w cywgc28gdGhhdCB0aGVyZSBjYW4KIAkgKiBiZSBhbiBSVEUgY29ycmVzcG9uZGluZyB0byBl YWNoIHNldG9wJ3Mgb3V0cHV0LgorCSAqIE5vdGUsIHdlIHVzZSB0aGlzIG5vdCBzdWJxdWVy eSdzIHRhcmdldGxpc3QgYnV0IHN1YnJvb3QtPnBhcnNlJ3MKKwkgKiB0YXJnZXRsaXN0LCBi ZWNhdXNlIGl0IHdhcyByZXZpc2VkIGJ5IHNlbGYtam9pbiByZW1vdmFsLiAgc3VicXVlcnkn cworCSAqIHRhcmdldGxpc3QgbWlnaHQgY29udGFpbiB0aGUgcmVmZXJlbmNlcyB0byB0aGUg cmVtb3ZlZCByZWxpZHMuCiAJICovCiAJaWYgKHBOdW1Hcm91cHMpCiAJewpAQCAtNjgyLDcg KzY4NSw3IEBAIGJ1aWxkX3NldG9wX2NoaWxkX3BhdGhzKFBsYW5uZXJJbmZvICpyb290LCBS ZWxPcHRJbmZvICpyZWwsCiAJCQkqcE51bUdyb3VwcyA9IHJlbC0+Y2hlYXBlc3RfdG90YWxf cGF0aC0+cm93czsKIAkJZWxzZQogCQkJKnBOdW1Hcm91cHMgPSBlc3RpbWF0ZV9udW1fZ3Jv dXBzKHN1YnJvb3QsCi0JCQkJCQkJCQkJCSAgZ2V0X3RsaXN0X2V4cHJzKHN1YnF1ZXJ5LT50 YXJnZXRMaXN0LCBmYWxzZSksCisJCQkJCQkJCQkJCSAgZ2V0X3RsaXN0X2V4cHJzKHN1YnJv b3QtPnBhcnNlLT50YXJnZXRMaXN0LCBmYWxzZSksCiAJCQkJCQkJCQkJCSAgcmVsLT5jaGVh cGVzdF90b3RhbF9wYXRoLT5yb3dzLAogCQkJCQkJCQkJCQkgIE5VTEwsCiAJCQkJCQkJCQkJ CSAgTlVMTCk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y190YWJs ZXMuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3RhYmxlcy5jCmluZGV4IDQ2YzI1 OGJlMjguLmQxN2E0YzcwNjYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2Mv Z3VjX3RhYmxlcy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3RhYmxlcy5j CkBAIC05ODYsNiArOTg2LDE2IEBAIHN0cnVjdCBjb25maWdfYm9vbCBDb25maWd1cmVOYW1l c0Jvb2xbXSA9CiAJCXRydWUsCiAJCU5VTEwsIE5VTEwsIE5VTEwKIAl9LAorCXsKKwkJeyJl bmFibGVfc2VsZl9qb2luX3JlbW92YWwiLCBQR0NfVVNFUlNFVCwgUVVFUllfVFVOSU5HX01F VEhPRCwKKwkJCWdldHRleHRfbm9vcCgiRW5hYmxlIHJlbW92YWwgb2YgdW5pcXVlIHNlbGYt am9pbnMuIiksCisJCQlOVUxMLAorCQkJR1VDX0VYUExBSU4gfCBHVUNfTk9UX0lOX1NBTVBM RQorCQl9LAorCQkmZW5hYmxlX3NlbGZfam9pbl9yZW1vdmFsLAorCQl0cnVlLAorCQlOVUxM LCBOVUxMLCBOVUxMCisJfSwKIAl7CiAJCXsiZW5hYmxlX2dyb3VwX2J5X3Jlb3JkZXJpbmci LCBQR0NfVVNFUlNFVCwgUVVFUllfVFVOSU5HX01FVEhPRCwKIAkJCWdldHRleHRfbm9vcCgi RW5hYmxlcyByZW9yZGVyaW5nIG9mIEdST1VQIEJZIGtleXMuIiksCmRpZmYgLS1naXQgYS9z cmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhu b2Rlcy5oCmluZGV4IDJiYTI5N2MxMTcuLmI1OTYwMmExOGIgMTAwNjQ0Ci0tLSBhL3NyYy9p bmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhu b2Rlcy5oCkBAIC03MjgsNyArNzI4LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgUGFydGl0aW9uU2No ZW1lRGF0YSAqUGFydGl0aW9uU2NoZW1lOwogICogcG9wdWxhdGUgdGhlc2UgZmllbGRzLCBm b3IgYmFzZSByZWxzOyBidXQgc29tZWRheSB0aGV5IG1pZ2h0IGJlIHVzZWQgZm9yCiAgKiBq b2luIHJlbHMgdG9vOgogICoKLSAqCQl1bmlxdWVfZm9yX3JlbHMgLSBsaXN0IG9mIFJlbGlk IHNldHMsIGVhY2ggb25lIGJlaW5nIGEgc2V0IG9mIG90aGVyCisgKgkJdW5pcXVlX2Zvcl9y ZWxzIC0gbGlzdCBvZiBVbmlxdWVSZWxJbmZvLCBlYWNoIG9uZSBiZWluZyBhIHNldCBvZiBv dGhlcgogICoJCQkJCXJlbHMgZm9yIHdoaWNoIHRoaXMgb25lIGhhcyBiZWVuIHByb3ZlbiB1 bmlxdWUKICAqCQlub25fdW5pcXVlX2Zvcl9yZWxzIC0gbGlzdCBvZiBSZWxpZCBzZXRzLCBl YWNoIG9uZSBiZWluZyBhIHNldCBvZgogICoJCQkJCW90aGVyIHJlbHMgZm9yIHdoaWNoIHdl IGhhdmUgdHJpZWQgYW5kIGZhaWxlZCB0byBwcm92ZQpAQCAtOTY3LDcgKzk2Nyw3IEBAIHR5 cGVkZWYgc3RydWN0IFJlbE9wdEluZm8KIAkvKgogCSAqIGNhY2hlIHNwYWNlIGZvciByZW1l bWJlcmluZyBpZiB3ZSBoYXZlIHByb3ZlbiB0aGlzIHJlbGF0aW9uIHVuaXF1ZQogCSAqLwot CS8qIGtub3duIHVuaXF1ZSBmb3IgdGhlc2Ugb3RoZXIgcmVsaWQgc2V0KHMpICovCisJLyog a25vd24gdW5pcXVlIGZvciB0aGVzZSBvdGhlciByZWxpZCBzZXQocykgZ2l2ZW4gaW4gVW5p cXVlUmVsSW5mbyhzKSAqLwogCUxpc3QJICAgKnVuaXF1ZV9mb3JfcmVsczsKIAkvKiBrbm93 biBub3QgdW5pcXVlIGZvciB0aGVzZSBzZXQocykgKi8KIAlMaXN0CSAgICpub25fdW5pcXVl X2Zvcl9yZWxzOwpAQCAtMzQzMiw0ICszNDMyLDM1IEBAIHR5cGVkZWYgc3RydWN0IEFnZ1Ry YW5zSW5mbwogCWJvb2wJCWluaXRWYWx1ZUlzTnVsbDsKIH0gQWdnVHJhbnNJbmZvOwogCisv KgorICogVW5pcXVlUmVsSW5mbyBjYWNoZXMgYSBmYWN0IHRoYXQgYSByZWxhdGlvbiBpcyB1 bmlxdWUgd2hlbiBiZWluZyBqb2luZWQKKyAqIHRvIG90aGVyIHJlbGF0aW9uKHMpLgorICov Cit0eXBlZGVmIHN0cnVjdCBVbmlxdWVSZWxJbmZvCit7CisJcGdfbm9kZV9hdHRyKG5vX2Nv cHlfZXF1YWwsIG5vX3JlYWQsIG5vX3F1ZXJ5X2p1bWJsZSkKKworCU5vZGVUYWcJCXR5cGU7 CisKKwkvKgorCSAqIFRoZSByZWxhdGlvbiBpbiBjb25zaWRlcmF0aW9uIGlzIHVuaXF1ZSB3 aGVuIGJlaW5nIGpvaW5lZCB3aXRoIHRoaXMgc2V0CisJICogb2Ygb3RoZXIgcmVsYXRpb24o cykuCisJICovCisJUmVsaWRzCQlvdXRlcnJlbGlkczsKKworCS8qCisJICogVGhlIHJlbGF0 aW9uIGluIGNvbnNpZGVyYXRpb24gaXMgdW5pcXVlIHdoZW4gY29uc2lkZXJpbmcgb25seSBj bGF1c2VzCisJICogc3VpdGFibGUgZm9yIHNlbGYtam9pbiAocGFzc2VkIHNwbGl0X3NlbGZq b2luX3F1YWxzKCkpLgorCSAqLworCWJvb2wJCXNlbGZfam9pbjsKKworCS8qCisJICogQWRk aXRpb25hbCBjbGF1c2VzIGZyb20gYSBiYXNlcmVzdHJpY3RpbmZvIGxpc3QgdGhhdCB3ZXJl IHVzZWQgdG8gcHJvdmUKKwkgKiB0aGUgdW5pcXVlbmVzcy4gICBXZSBjYWNoZSBpdCBmb3Ig dGhlIHNlbGYtam9pbiBjaGVja2luZyBwcm9jZWR1cmU6IGEKKwkgKiBzZWxmLWpvaW4gY2Fu IGJlIHJlbW92ZWQgaWYgdGhlIG91dGVyIHJlbGF0aW9uIGNvbnRhaW5zIHN0cmljdGx5IHRo ZQorCSAqIHNhbWUgc2V0IG9mIGNsYXVzZXMuCisJICovCisJTGlzdAkgICAqZXh0cmFfY2xh dXNlczsKK30gVW5pcXVlUmVsSW5mbzsKKwogI2VuZGlmCQkJCQkJCS8qIFBBVEhOT0RFU19I ICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0aHMuaCBiL3NyYy9p bmNsdWRlL29wdGltaXplci9wYXRocy5oCmluZGV4IDVlODhjMDIyNGEuLmZmZjRiNjlkZmQg MTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL29wdGltaXplci9wYXRocy5oCisrKyBiL3NyYy9p bmNsdWRlL29wdGltaXplci9wYXRocy5oCkBAIC03Miw2ICs3Miw5IEBAIGV4dGVybiB2b2lk IGNyZWF0ZV9pbmRleF9wYXRocyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVs KTsKIGV4dGVybiBib29sIHJlbGF0aW9uX2hhc191bmlxdWVfaW5kZXhfZm9yKFBsYW5uZXJJ bmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJCQkJCQkJCQkJICBMaXN0ICpyZXN0cmlj dGxpc3QsCiAJCQkJCQkJCQkJICBMaXN0ICpleHBybGlzdCwgTGlzdCAqb3BybGlzdCk7Citl eHRlcm4gYm9vbCByZWxhdGlvbl9oYXNfdW5pcXVlX2luZGV4X2V4dChQbGFubmVySW5mbyAq cm9vdCwgUmVsT3B0SW5mbyAqcmVsLAorCQkJCQkJCQkJCSAgTGlzdCAqcmVzdHJpY3RsaXN0 LCBMaXN0ICpleHBybGlzdCwKKwkJCQkJCQkJCQkgIExpc3QgKm9wcmxpc3QsIExpc3QgKipl eHRyYV9jbGF1c2VzKTsKIGV4dGVybiBib29sIGluZGV4Y29sX2lzX2Jvb2xfY29uc3RhbnRf Zm9yX3F1ZXJ5KFBsYW5uZXJJbmZvICpyb290LAogCQkJCQkJCQkJCQkJSW5kZXhPcHRJbmZv ICppbmRleCwKIAkJCQkJCQkJCQkJCWludCBpbmRleGNvbCk7CmRpZmYgLS1naXQgYS9zcmMv aW5jbHVkZS9vcHRpbWl6ZXIvcGxhbm1haW4uaCBiL3NyYy9pbmNsdWRlL29wdGltaXplci9w bGFubWFpbi5oCmluZGV4IGFhZmMxNzM3OTIuLmYyZTNmYTRjMmUgMTAwNjQ0Ci0tLSBhL3Ny Yy9pbmNsdWRlL29wdGltaXplci9wbGFubWFpbi5oCisrKyBiL3NyYy9pbmNsdWRlL29wdGlt aXplci9wbGFubWFpbi5oCkBAIC0yMCw2ICsyMCw3IEBACiAvKiBHVUMgcGFyYW1ldGVycyAq LwogI2RlZmluZSBERUZBVUxUX0NVUlNPUl9UVVBMRV9GUkFDVElPTiAwLjEKIGV4dGVybiBQ R0RMTElNUE9SVCBkb3VibGUgY3Vyc29yX3R1cGxlX2ZyYWN0aW9uOworZXh0ZXJuIFBHRExM SU1QT1JUIGJvb2wgZW5hYmxlX3NlbGZfam9pbl9yZW1vdmFsOwogCiAvKiBxdWVyeV9wbGFu bmVyIGNhbGxiYWNrIHRvIGNvbXB1dGUgcXVlcnlfcGF0aGtleXMgKi8KIHR5cGVkZWYgdm9p ZCAoKnF1ZXJ5X3BhdGhrZXlzX2NhbGxiYWNrKSAoUGxhbm5lckluZm8gKnJvb3QsIHZvaWQg KmV4dHJhKTsKQEAgLTEwOCw2ICsxMDksMTEgQEAgZXh0ZXJuIGJvb2wgcXVlcnlfaXNfZGlz dGluY3RfZm9yKFF1ZXJ5ICpxdWVyeSwgTGlzdCAqY29sbm9zLCBMaXN0ICpvcGlkcyk7CiBl eHRlcm4gYm9vbCBpbm5lcnJlbF9pc191bmlxdWUoUGxhbm5lckluZm8gKnJvb3QsCiAJCQkJ CQkJICAgUmVsaWRzIGpvaW5yZWxpZHMsIFJlbGlkcyBvdXRlcnJlbGlkcywgUmVsT3B0SW5m byAqaW5uZXJyZWwsCiAJCQkJCQkJICAgSm9pblR5cGUgam9pbnR5cGUsIExpc3QgKnJlc3Ry aWN0bGlzdCwgYm9vbCBmb3JjZV9jYWNoZSk7CitleHRlcm4gYm9vbCBpbm5lcnJlbF9pc191 bmlxdWVfZXh0KFBsYW5uZXJJbmZvICpyb290LCBSZWxpZHMgam9pbnJlbGlkcywKKwkJCQkJ CQkJICAgUmVsaWRzIG91dGVycmVsaWRzLCBSZWxPcHRJbmZvICppbm5lcnJlbCwKKwkJCQkJ CQkJICAgSm9pblR5cGUgam9pbnR5cGUsIExpc3QgKnJlc3RyaWN0bGlzdCwKKwkJCQkJCQkJ ICAgYm9vbCBmb3JjZV9jYWNoZSwgTGlzdCAqKnVjbGF1c2VzKTsKK2V4dGVybiBMaXN0ICpy ZW1vdmVfdXNlbGVzc19zZWxmX2pvaW5zKFBsYW5uZXJJbmZvICpyb290LCBMaXN0ICpqb2lu dHJlZSk7CiAKIC8qCiAgKiBwcm90b3R5cGVzIGZvciBwbGFuL3NldHJlZnMuYwpkaWZmIC0t Z2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9lcXVpdmNsYXNzLm91dCBiL3NyYy90 ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvZXF1aXZjbGFzcy5vdXQKaW5kZXggMTI2ZjcwNDdmZS4u M2Q1ZGUyODM1NCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9lcXVp dmNsYXNzLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2VxdWl2Y2xhc3Mu b3V0CkBAIC00MzAsNiArNDMwLDM2IEBAIGV4cGxhaW4gKGNvc3RzIG9mZikKICAgIEZpbHRl cjogKCh1bmlxdWUxIElTIE5PVCBOVUxMKSBBTkQgKHVuaXF1ZTIgSVMgTk9UIE5VTEwpKQog KDIgcm93cykKIAorLS0gVGVzdCB0aGF0IGJyb2tlbiBFQ3MgYXJlIHByb2Nlc3NlZCBjb3Jy ZWN0bHkgZHVyaW5nIHNlbGYgam9pbiByZW1vdmFsLgorLS0gRGlzYWJsZSBtZXJnZSBqb2lu cyBzbyB0aGF0IHdlIGRvbid0IGdldCBhbiBlcnJvciBhYm91dCBtaXNzaW5nIGNvbW11dGF0 b3IuCistLSBUZXN0IGJvdGggb3JpZW50YXRpb25zIG9mIHRoZSBqb2luIGNsYXVzZSwgYmVj YXVzZSBvbmx5IG9uZSBvZiB0aGVtIGJyZWFrcworLS0gdGhlIEVDLgorc2V0IGVuYWJsZV9t ZXJnZWpvaW4gdG8gb2ZmOworZXhwbGFpbiAoY29zdHMgb2ZmKQorICBzZWxlY3QgKiBmcm9t IGVjMCBtIGpvaW4gZWMwIG4gb24gbS5mZiA9IG4uZmYKKyAgam9pbiBlYzEgcCBvbiBtLmZm ICsgbi5mZiA9IHAuZjE7CisgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAg ICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE5lc3RlZCBM b29wCisgICBKb2luIEZpbHRlcjogKChuLmZmICsgbi5mZikgPSBwLmYxKQorICAgLT4gIFNl cSBTY2FuIG9uIGVjMCBuCisgICAtPiAgTWF0ZXJpYWxpemUKKyAgICAgICAgIC0+ICBTZXEg U2NhbiBvbiBlYzEgcAorKDUgcm93cykKKworZXhwbGFpbiAoY29zdHMgb2ZmKQorICBzZWxl Y3QgKiBmcm9tIGVjMCBtIGpvaW4gZWMwIG4gb24gbS5mZiA9IG4uZmYKKyAgam9pbiBlYzEg cCBvbiBwLmYxOjppbnQ4ID0gKG0uZmYgKyBuLmZmKTo6aW50OGFsaWFzMTsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAg IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AKKyAgIEpvaW4gRmlsdGVyOiAoKHAuZjEpOjpi aWdpbnQgPSAoKG4uZmYgKyBuLmZmKSk6OmludDhhbGlhczEpCisgICAtPiAgU2VxIFNjYW4g b24gZWMwIG4KKyAgIC0+ICBNYXRlcmlhbGl6ZQorICAgICAgICAgLT4gIFNlcSBTY2FuIG9u IGVjMSBwCisoNSByb3dzKQorCityZXNldCBlbmFibGVfbWVyZ2Vqb2luOwogLS0gdGhpcyBj b3VsZCBiZSBjb252ZXJ0ZWQsIGJ1dCBpc24ndCBhdCBwcmVzZW50CiBleHBsYWluIChjb3N0 cyBvZmYpCiAgIHNlbGVjdCAqIGZyb20gdGVuazEgd2hlcmUgdW5pcXVlMSA9IHVuaXF1ZTEg b3IgdW5pcXVlMiA9IHVuaXF1ZTI7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4 cGVjdGVkL2pvaW4ub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9qb2luLm91dApp bmRleCA2YjE2YzNhNjc2Li4xNjMyNzc3OTE4IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdy ZXNzL2V4cGVjdGVkL2pvaW4ub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQv am9pbi5vdXQKQEAgLTYxNTgsNiArNjE1OCwxMDcwIEBAIHNlbGVjdCAqIGZyb20KIC0tLS0r LS0tLSstLS0tKy0tLS0KICgwIHJvd3MpCiAKKy0tCistLSB0ZXN0IHRoYXQgc2VtaS0gb3Ig aW5uZXIgc2VsZi1qb2lucyBvbiBhIHVuaXF1ZSBjb2x1bW4gYXJlIHJlbW92ZWQKKy0tCist LSBlbmFibGUgb25seSBuZXN0bG9vcCB0byBnZXQgbW9yZSBwcmVkaWN0YWJsZSBwbGFucwor c2V0IGVuYWJsZV9oYXNoam9pbiB0byBvZmY7CitzZXQgZW5hYmxlX21lcmdlam9pbiB0byBv ZmY7CitjcmVhdGUgdGFibGUgc2ogKGEgaW50IHVuaXF1ZSwgYiBpbnQsIGMgaW50IHVuaXF1 ZSk7CitpbnNlcnQgaW50byBzaiB2YWx1ZXMgKDEsIG51bGwsIDIpLCAobnVsbCwgMiwgbnVs bCksICgyLCAxLCAxKTsKK2FuYWx5emUgc2o7CistLSBUcml2aWFsIHNlbGYtam9pbiBjYXNl LgorZXhwbGFpbiAoY29zdHMgb2ZmKQorc2VsZWN0IHAuKiBmcm9tIHNqIHAsIHNqIHEgd2hl cmUgcS5hID0gcC5hIGFuZCBxLmIgPSBxLmEgLSAxOworICAgICAgICAgICAgICAgICAgUVVF UlkgUExBTiAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24gc2ogcQorICAgRmlsdGVyOiAo KGEgSVMgTk9UIE5VTEwpIEFORCAoYiA9IChhIC0gMSkpKQorKDIgcm93cykKKworc2VsZWN0 IHAuKiBmcm9tIHNqIHAsIHNqIHEgd2hlcmUgcS5hID0gcC5hIGFuZCBxLmIgPSBxLmEgLSAx OworIGEgfCBiIHwgYyAKKy0tLSstLS0rLS0tCisgMiB8IDEgfCAxCisoMSByb3cpCisKKy0t IFNlbGYtam9pbiByZW1vdmFsIHBlcmZvcm1zIGFmdGVyIGEgc3VicXVlcnkgcHVsbC11cCBw cm9jZXNzIGFuZCBjb3VsZCByZW1vdmUKKy0tIHN1Y2gga2luZCBvZiBzZWxmLWpvaW4gdG9v LiBDaGVjayB0aGlzIG9wdGlvbi4KK2V4cGxhaW4gKGNvc3RzIG9mZikKK3NlbGVjdCAqIGZy b20gc2ogcAord2hlcmUgZXhpc3RzIChzZWxlY3QgKiBmcm9tIHNqIHEKKyAgICAgICAgICAg ICAgd2hlcmUgcS5hID0gcC5hIGFuZCBxLmIgPCAxMCk7CisgICAgICAgICAgICAgICAgUVVF UlkgUExBTiAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorIFNlcSBTY2FuIG9uIHNqIHEKKyAgIEZpbHRlcjogKChhIElTIE5P VCBOVUxMKSBBTkQgKGIgPCAxMCkpCisoMiByb3dzKQorCitzZWxlY3QgKiBmcm9tIHNqIHAK K3doZXJlIGV4aXN0cyAoc2VsZWN0ICogZnJvbSBzaiBxCisgICAgICAgICAgICAgIHdoZXJl IHEuYSA9IHAuYSBhbmQgcS5iIDwgMTApOworIGEgfCBiIHwgYyAKKy0tLSstLS0rLS0tCisg MiB8IDEgfCAxCisoMSByb3cpCisKKy0tIERvbid0IHJlbW92ZSBzZWxmLWpvaW4gZm9yIHRo ZSBjYXNlIG9mIGVxdWFsaXR5IG9mIHR3byBkaWZmZXJlbnQgdW5pcXVlIGNvbHVtbnMuCitl eHBsYWluIChjb3N0cyBvZmYpCitzZWxlY3QgKiBmcm9tIHNqIHQxLCBzaiB0MiB3aGVyZSB0 MS5hID0gdDIuYyBhbmQgdDEuYiBpcyBub3QgbnVsbDsKKyAgICAgICAgICAgICAgUVVFUlkg UExBTiAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgTmVzdGVkIExvb3AKKyAgIEpvaW4gRmlsdGVyOiAodDEuYSA9IHQyLmMpCisg ICAtPiAgU2VxIFNjYW4gb24gc2ogdDIKKyAgIC0+ICBNYXRlcmlhbGl6ZQorICAgICAgICAg LT4gIFNlcSBTY2FuIG9uIHNqIHQxCisgICAgICAgICAgICAgICBGaWx0ZXI6IChiIElTIE5P VCBOVUxMKQorKDYgcm93cykKKworLS0gRW5zdXJlIHRoYXQgcmVsYXRpb25zIHdpdGggVEFC TEVTQU1QTEUgY2xhdXNlcyBhcmUgbm90IGNvbnNpZGVyZWQgYXMKKy0tIGNhbmRpZGF0ZXMg dG8gYmUgcmVtb3ZlZAorZXhwbGFpbiAoY29zdHMgb2ZmKQorc2VsZWN0ICogZnJvbSBzaiB0 MQorICAgIGpvaW4gbGF0ZXJhbAorICAgICAgKHNlbGVjdCAqIGZyb20gc2ogdGFibGVzYW1w bGUgc3lzdGVtKHQxLmIpKSBzCisgICAgb24gdDEuYSA9IHMuYTsKKyAgICAgICAgICAgICAg UVVFUlkgUExBTiAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AKKyAgIC0+ICBTZXEgU2NhbiBvbiBzaiB0MQor ICAgLT4gIE1lbW9pemUKKyAgICAgICAgIENhY2hlIEtleTogdDEuYSwgdDEuYgorICAgICAg ICAgQ2FjaGUgTW9kZTogYmluYXJ5CisgICAgICAgICAtPiAgU2FtcGxlIFNjYW4gb24gc2oK KyAgICAgICAgICAgICAgIFNhbXBsaW5nOiBzeXN0ZW0gKHQxLmIpCisgICAgICAgICAgICAg ICBGaWx0ZXI6ICh0MS5hID0gYSkKKyg4IHJvd3MpCisKKy0tIEVuc3VyZSB0aGF0IFNKRSBk b2VzIG5vdCBmb3JtIGEgc2VsZi1yZWZlcmVudGlhbCBsYXRlcmFsIGRlcGVuZGVuY3kKK2V4 cGxhaW4gKGNvc3RzIG9mZikKK3NlbGVjdCAqIGZyb20gc2ogdDEKKyAgICBsZWZ0IGpvaW4g bGF0ZXJhbAorICAgICAgKHNlbGVjdCB0MS5hIGFzIHQxYSwgKiBmcm9tIHNqIHQyKSBzCisg ICAgb24gdHJ1ZQord2hlcmUgdDEuYSA9IHMuYTsKKyAgICAgICAgUVVFUlkgUExBTiAgICAg ICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24gc2ogdDIK KyAgIEZpbHRlcjogKGEgSVMgTk9UIE5VTEwpCisoMiByb3dzKQorCistLSBEZWdlbmVyYXRl ZCBjYXNlLgorZXhwbGFpbiAoY29zdHMgb2ZmKQorc2VsZWN0ICogZnJvbQorICAoc2VsZWN0 IGEgYXMgeCBmcm9tIHNqIHdoZXJlIGZhbHNlKSBhcyBxMSwKKyAgKHNlbGVjdCBhIGFzIHkg ZnJvbSBzaiB3aGVyZSBmYWxzZSkgYXMgcTIKK3doZXJlIHExLnggPSBxMi55OworICAgICAg ICBRVUVSWSBQTEFOICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgUmVz dWx0CisgICBPbmUtVGltZSBGaWx0ZXI6IGZhbHNlCisoMiByb3dzKQorCistLSBXZSBjYW4n dCB1c2UgYSBjcm9zcy1FQyBnZW5lcmF0ZWQgc2VsZiBqb2luIHF1YWwgYmVjYXVzZSBvZiBj dXJyZW50IGxvZ2ljIG9mCistLSB0aGUgZ2VuZXJhdGVfam9pbl9pbXBsaWVkX2VxdWFsaXRp ZXMgcm91dGluZS4KK2V4cGxhaW4gKGNvc3RzIG9mZikKK3NlbGVjdCAqIGZyb20gc2ogdDEs IHNqIHQyIHdoZXJlIHQxLmEgPSB0MS5iIGFuZCB0MS5iID0gdDIuYiBhbmQgdDIuYiA9IHQy LmE7CisgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29wCisgICBKb2luIEZpbHRlcjogKHQxLmEgPSB0 Mi5iKQorICAgLT4gIFNlcSBTY2FuIG9uIHNqIHQxCisgICAgICAgICBGaWx0ZXI6IChhID0g YikKKyAgIC0+ICBTZXEgU2NhbiBvbiBzaiB0MgorICAgICAgICAgRmlsdGVyOiAoYiA9IGEp CisoNiByb3dzKQorCitleHBsYWluIChjb3N0cyBvZmYpCitzZWxlY3QgKiBmcm9tIHNqIHQx LCBzaiB0Miwgc2ogdDMKK3doZXJlIHQxLmEgPSB0MS5iIGFuZCB0MS5iID0gdDIuYiBhbmQg dDIuYiA9IHQyLmEgYW5kCisgICAgICB0MS5iID0gdDMuYiBhbmQgdDMuYiA9IHQzLmE7Cisg ICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29wCisgICBKb2luIEZpbHRlcjogKHQx LmEgPSB0My5iKQorICAgLT4gIE5lc3RlZCBMb29wCisgICAgICAgICBKb2luIEZpbHRlcjog KHQxLmEgPSB0Mi5iKQorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHNqIHQxCisgICAgICAg ICAgICAgICBGaWx0ZXI6IChhID0gYikKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBzaiB0 MgorICAgICAgICAgICAgICAgRmlsdGVyOiAoYiA9IGEpCisgICAtPiAgU2VxIFNjYW4gb24g c2ogdDMKKyAgICAgICAgIEZpbHRlcjogKGIgPSBhKQorKDEwIHJvd3MpCisKKy0tIERvdWJs ZSBzZWxmLWpvaW4gcmVtb3ZhbC4KKy0tIFVzZSBhIGNvbmRpdGlvbiBvbiAiYiArIDEiLCBu b3Qgb24gImIiLCBmb3IgdGhlIHNlY29uZCBqb2luLCBzbyB0aGF0CistLSB0aGUgZXF1aXZh bGVuY2UgY2xhc3MgaXMgZGlmZmVyZW50IGZyb20gdGhlIGZpcnN0IG9uZSwgYW5kIHdlIGNh bgorLS0gdGVzdCB0aGUgbm9uLWVjIGNvZGUgcGF0aC4KK2V4cGxhaW4gKGNvc3RzIG9mZikK K3NlbGVjdCAqCitmcm9tICBzaiB0MQorICAgICAgam9pbiBzaiB0MiBvbiB0MS5hID0gdDIu YSBhbmQgdDEuYiA9IHQyLmIKKwkgIGpvaW4gc2ogdDMgb24gdDIuYSA9IHQzLmEgYW5kIHQy LmIgKyAxID0gdDMuYiArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFV RVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorIFNlcSBTY2FuIG9uIHNqIHQzCisgICBGaWx0ZXI6ICgoYSBJUyBOT1Qg TlVMTCkgQU5EIChiIElTIE5PVCBOVUxMKSBBTkQgKChiICsgMSkgSVMgTk9UIE5VTEwpKQor KDIgcm93cykKKworLS0gc3Vic2VsZWN0IHRoYXQgcmVmZXJlbmNlcyB0aGUgcmVtb3ZlZCBy ZWxhdGlvbgorZXhwbGFpbiAoY29zdHMgb2ZmKQorc2VsZWN0IHQxLmEsIChzZWxlY3QgYSBm cm9tIHNqIHdoZXJlIGEgPSB0Mi5hIGFuZCBhID0gdDEuYSkKK2Zyb20gc2ogdDEsIHNqIHQy Cit3aGVyZSB0MS5hID0gdDIuYTsKKyAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAg ICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgU2VxIFNjYW4gb24gc2ogdDIKKyAgIEZpbHRlcjogKGEgSVMgTk9UIE5VTEwpCisgICBT dWJQbGFuIDEKKyAgICAgLT4gIFJlc3VsdAorICAgICAgICAgICBPbmUtVGltZSBGaWx0ZXI6 ICh0Mi5hID0gdDIuYSkKKyAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHNqCisgICAgICAg ICAgICAgICAgIEZpbHRlcjogKGEgPSB0Mi5hKQorKDcgcm93cykKKworLS0gc2VsZi1qb2lu IHVuZGVyIG91dGVyIGpvaW4KK2V4cGxhaW4gKGNvc3RzIG9mZikKK3NlbGVjdCAqIGZyb20g c2ogeCBqb2luIHNqIHkgb24geC5hID0geS5hCitsZWZ0IGpvaW4gaW50OF90YmwgeiBvbiB4 LmEgPSB6LnExOworICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcCBMZWZ0IEpv aW4KKyAgIEpvaW4gRmlsdGVyOiAoeS5hID0gei5xMSkKKyAgIC0+ICBTZXEgU2NhbiBvbiBz aiB5CisgICAgICAgICBGaWx0ZXI6IChhIElTIE5PVCBOVUxMKQorICAgLT4gIE1hdGVyaWFs aXplCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gaW50OF90YmwgegorKDYgcm93cykKKwor ZXhwbGFpbiAoY29zdHMgb2ZmKQorc2VsZWN0ICogZnJvbSBzaiB4IGpvaW4gc2ogeSBvbiB4 LmEgPSB5LmEKK2xlZnQgam9pbiBpbnQ4X3RibCB6IG9uIHkuYSA9IHoucTE7CisgICAgICAg ICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29wIExlZnQgSm9pbgorICAgSm9pbiBGaWx0ZXI6 ICh5LmEgPSB6LnExKQorICAgLT4gIFNlcSBTY2FuIG9uIHNqIHkKKyAgICAgICAgIEZpbHRl cjogKGEgSVMgTk9UIE5VTEwpCisgICAtPiAgTWF0ZXJpYWxpemUKKyAgICAgICAgIC0+ICBT ZXEgU2NhbiBvbiBpbnQ4X3RibCB6CisoNiByb3dzKQorCitleHBsYWluIChjb3N0cyBvZmYp CitzZWxlY3QgKiBmcm9tICgKKyAgc2VsZWN0IHQxLiosIHQyLmEgYXMgYXggZnJvbSBzaiB0 MSBqb2luIHNqIHQyCisgIG9uICh0MS5hID0gdDIuYSBhbmQgdDEuYyAqIHQxLmMgPSB0Mi5j ICsgMiBhbmQgdDIuYiBpcyBudWxsKQorKSBhcyBxMQorbGVmdCBqb2luCisgIChzZWxlY3Qg dDMuKiBmcm9tIHNqIHQzLCBzaiB0NCB3aGVyZSB0My5jID0gdDQuYykgYXMgcTIKK29uIHEx LmF4ID0gcTIuYTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExB TiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgTmVzdGVkIExvb3AgTGVmdCBKb2luCisgICBKb2luIEZpbHRlcjogKHQyLmEgPSB0 NC5hKQorICAgLT4gIFNlcSBTY2FuIG9uIHNqIHQyCisgICAgICAgICBGaWx0ZXI6ICgoYiBJ UyBOVUxMKSBBTkQgKGEgSVMgTk9UIE5VTEwpIEFORCAoKGMgKiBjKSA9IChjICsgMikpKQor ICAgLT4gIFNlcSBTY2FuIG9uIHNqIHQ0CisgICAgICAgICBGaWx0ZXI6IChjIElTIE5PVCBO VUxMKQorKDYgcm93cykKKworLS0gVGVzdCB0aGF0IHBsYWNlaG9sZGVycyBhcmUgdXBkYXRl ZCBjb3JyZWN0bHkgYWZ0ZXIgam9pbiByZW1vdmFsCitleHBsYWluIChjb3N0cyBvZmYpCitz ZWxlY3QgKiBmcm9tICh2YWx1ZXMgKDEpKSB4CitsZWZ0IGpvaW4gKHNlbGVjdCBjb2FsZXNj ZSh5LnExLCAxKSBmcm9tIGludDhfdGJsIHkKKwlyaWdodCBqb2luIHNqIGoxIGlubmVyIGpv aW4gc2ogajIgb24gajEuYSA9IGoyLmEKKwlvbiB0cnVlKSB6CitvbiB0cnVlOworICAgICAg ICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcCBMZWZ0IEpvaW4KKyAg IC0+ICBSZXN1bHQKKyAgIC0+ICBOZXN0ZWQgTG9vcCBMZWZ0IEpvaW4KKyAgICAgICAgIC0+ ICBTZXEgU2NhbiBvbiBzaiBqMgorICAgICAgICAgICAgICAgRmlsdGVyOiAoYSBJUyBOT1Qg TlVMTCkKKyAgICAgICAgIC0+ICBNYXRlcmlhbGl6ZQorICAgICAgICAgICAgICAgLT4gIFNl cSBTY2FuIG9uIGludDhfdGJsIHkKKyg3IHJvd3MpCisKKy0tIFRlc3QgdGhhdCByZWZlcmVu Y2VzIHRvIHRoZSByZW1vdmVkIHJlbCBpbiBsYXRlcmFsIHN1YnF1ZXJpZXMgYXJlIHJlcGxh Y2VkCistLSBjb3JyZWN0bHkgYWZ0ZXIgam9pbiByZW1vdmFsCitleHBsYWluICh2ZXJib3Nl LCBjb3N0cyBvZmYpCitzZWxlY3QgdDMuYSBmcm9tIHNqIHQxCisJam9pbiBzaiB0MiBvbiB0 MS5hID0gdDIuYQorCWpvaW4gbGF0ZXJhbCAoc2VsZWN0IHQxLmEgb2Zmc2V0IDApIHQzIG9u IHRydWU7CisgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29wCisgICBPdXRwdXQ6 ICh0Mi5hKQorICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5zaiB0MgorICAgICAgICAgT3V0 cHV0OiB0Mi5hLCB0Mi5iLCB0Mi5jCisgICAgICAgICBGaWx0ZXI6ICh0Mi5hIElTIE5PVCBO VUxMKQorICAgLT4gIFJlc3VsdAorICAgICAgICAgT3V0cHV0OiB0Mi5hCisoNyByb3dzKQor CitleHBsYWluICh2ZXJib3NlLCBjb3N0cyBvZmYpCitzZWxlY3QgdDMuYSBmcm9tIHNqIHQx CisJam9pbiBzaiB0MiBvbiB0MS5hID0gdDIuYQorCWpvaW4gbGF0ZXJhbCAoc2VsZWN0ICog ZnJvbSAoc2VsZWN0IHQxLmEgb2Zmc2V0IDApIG9mZnNldCAwKSB0MyBvbiB0cnVlOworICAg ICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAorICAgT3V0cHV0OiAodDIuYSkKKyAg IC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuc2ogdDIKKyAgICAgICAgIE91dHB1dDogdDIuYSwg dDIuYiwgdDIuYworICAgICAgICAgRmlsdGVyOiAodDIuYSBJUyBOT1QgTlVMTCkKKyAgIC0+ ICBSZXN1bHQKKyAgICAgICAgIE91dHB1dDogdDIuYQorKDcgcm93cykKKworZXhwbGFpbiAo dmVyYm9zZSwgY29zdHMgb2ZmKQorc2VsZWN0IHQ0LmEgZnJvbSBzaiB0MQorCWpvaW4gc2og dDIgb24gdDEuYSA9IHQyLmEKKwlqb2luIGxhdGVyYWwgKHNlbGVjdCB0My5hIGZyb20gc2og dDMsIChzZWxlY3QgdDEuYSkgb2Zmc2V0IDApIHQ0IG9uIHRydWU7CisgICAgICAgICAgICAg UVVFUlkgUExBTiAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorIE5lc3RlZCBMb29wCisgICBPdXRwdXQ6IHQzLmEKKyAgIC0+ICBTZXEgU2Nh biBvbiBwdWJsaWMuc2ogdDIKKyAgICAgICAgIE91dHB1dDogdDIuYSwgdDIuYiwgdDIuYwor ICAgICAgICAgRmlsdGVyOiAodDIuYSBJUyBOT1QgTlVMTCkKKyAgIC0+ICBTZXEgU2NhbiBv biBwdWJsaWMuc2ogdDMKKyAgICAgICAgIE91dHB1dDogdDMuYQorKDcgcm93cykKKworLS0g Q2hlY2sgdXBkYXRpbmcgb2YgTGF0ZXJhbCBsaW5rcyBmcm9tIHRvcC1sZXZlbCBxdWVyeSB0 byB0aGUgcmVtb3ZpbmcgcmVsYXRpb24KK2V4cGxhaW4gKENPU1RTIE9GRikKK1NFTEVDVCAq IEZST00gcGdfYW0gYW0gV0hFUkUgYW0uYW1uYW1lIElOICgKKyAgU0VMRUNUIGMxLnJlbG5h bWUgQVMgcmVsbmFtZQorICBGUk9NIHBnX2NsYXNzIGMxCisgICAgSk9JTiBwZ19jbGFzcyBj MgorICAgIE9OIGMxLm9pZD1jMi5vaWQgQU5EIGMxLm9pZCA8IDEwCispOworICAgICAgICAg ICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAg IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29wIFNlbWkgSm9pbgorICAgSm9pbiBGaWx0ZXI6 IChhbS5hbW5hbWUgPSBjMi5yZWxuYW1lKQorICAgLT4gIFNlcSBTY2FuIG9uIHBnX2FtIGFt CisgICAtPiAgTWF0ZXJpYWxpemUKKyAgICAgICAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIHBn X2NsYXNzX29pZF9pbmRleCBvbiBwZ19jbGFzcyBjMgorICAgICAgICAgICAgICAgSW5kZXgg Q29uZDogKG9pZCA8ICcxMCc6Om9pZCkKKyg2IHJvd3MpCisKKy0tCistLSBTSkUgY29ybmVy IGNhc2U6IHVuaXF1ZW5lc3Mgb2YgYW4gaW5uZXIgaXMgW3BhcnRpYWxseV0gZGVyaXZlZCBm cm9tCistLSBiYXNlcmVzdHJpY3RpbmZvIGNsYXVzZXMuCistLSBYWFg6IFdlIHJlYWxseSBz aG91bGQgYWxsb3cgU0pFIGZvciB0aGVzZSBjb3JuZXIgY2FzZXM/CistLQorSU5TRVJUIElO VE8gc2ogVkFMVUVTICgzLCAxLCAzKTsKKy0tIERvbid0IHJlbW92ZSBTSgorRVhQTEFJTiAo Q09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBzaiBqMSwgc2ogajIgV0hFUkUgajEuYiA9IGoy LmIgQU5EIGoxLmEgPSAyIEFORCBqMi5hID0gMzsKKyAgICAgICAgICBRVUVSWSBQTEFOICAg ICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AK KyAgIEpvaW4gRmlsdGVyOiAoajEuYiA9IGoyLmIpCisgICAtPiAgU2VxIFNjYW4gb24gc2og ajEKKyAgICAgICAgIEZpbHRlcjogKGEgPSAyKQorICAgLT4gIFNlcSBTY2FuIG9uIHNqIGoy CisgICAgICAgICBGaWx0ZXI6IChhID0gMykKKyg2IHJvd3MpCisKKy0tIFJldHVybiBvbmUg cm93CitTRUxFQ1QgKiBGUk9NIHNqIGoxLCBzaiBqMiBXSEVSRSBqMS5iID0gajIuYiBBTkQg ajEuYSA9IDIgQU5EIGoyLmEgPSAzOworIGEgfCBiIHwgYyB8IGEgfCBiIHwgYyAKKy0tLSst LS0rLS0tKy0tLSstLS0rLS0tCisgMiB8IDEgfCAxIHwgMyB8IDEgfCAzCisoMSByb3cpCisK Ky0tIFJlbW92ZSBTSiwgZGVmaW5lIHVuaXF1ZW5lc3MgYnkgYSBjb25zdGFudAorRVhQTEFJ TiAoQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBzaiBqMSwgc2ogajIgV0hFUkUgajEuYiA9 IGoyLmIgQU5EIGoxLmEgPSAyIEFORCBqMi5hID0gMjsKKyAgICAgICAgICAgICAgIFFVRVJZ IFBMQU4gICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorIFNlcSBTY2FuIG9uIHNqIGoyCisgICBGaWx0ZXI6ICgoYiBJUyBOT1Qg TlVMTCkgQU5EIChhID0gMikpCisoMiByb3dzKQorCistLSBSZXR1cm4gb25lIHJvdworU0VM RUNUICogRlJPTSBzaiBqMSwgc2ogajIgV0hFUkUgajEuYiA9IGoyLmIgQU5EIGoxLmEgPSAy IEFORCBqMi5hID0gMjsKKyBhIHwgYiB8IGMgfCBhIHwgYiB8IGMgCistLS0rLS0tKy0tLSst LS0rLS0tKy0tLQorIDIgfCAxIHwgMSB8IDIgfCAxIHwgMQorKDEgcm93KQorCistLSBSZW1v dmUgU0osIGRlZmluZSB1bmlxdWVuZXNzIGJ5IGEgY29uc3RhbnQgZXhwcmVzc2lvbgorRVhQ TEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBzaiBqMSwgc2ogajIKK1dIRVJFIGox LmIgPSBqMi5iCisgIEFORCBqMS5hID0gKEVYVFJBQ1QoRE9XIEZST00gY3VycmVudF90aW1l c3RhbXAoMCkpLzE1ICsgMyk6OmludAorICBBTkQgKEVYVFJBQ1QoRE9XIEZST00gY3VycmVu dF90aW1lc3RhbXAoMCkpLzE1ICsgMyk6OmludCA9IGoyLmE7CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24gc2ogajIKKyAgIEZpbHRlcjogKChi IElTIE5PVCBOVUxMKSBBTkQgKGEgPSAoKChFWFRSQUNUKGRvdyBGUk9NIENVUlJFTlRfVElN RVNUQU1QKDApKSAvICcxNSc6Om51bWVyaWMpICsgJzMnOjpudW1lcmljKSk6OmludGVnZXIp KQorKDIgcm93cykKKworLS0gUmV0dXJuIG9uZSByb3cKK1NFTEVDVCAqIEZST00gc2ogajEs IHNqIGoyCitXSEVSRSBqMS5iID0gajIuYgorICBBTkQgajEuYSA9IChFWFRSQUNUKERPVyBG Uk9NIGN1cnJlbnRfdGltZXN0YW1wKDApKS8xNSArIDMpOjppbnQKKyAgQU5EIChFWFRSQUNU KERPVyBGUk9NIGN1cnJlbnRfdGltZXN0YW1wKDApKS8xNSArIDMpOjppbnQgPSBqMi5hOwor IGEgfCBiIHwgYyB8IGEgfCBiIHwgYyAKKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tCisgMyB8 IDEgfCAzIHwgMyB8IDEgfCAzCisoMSByb3cpCisKKy0tIFJlbW92ZSBTSgorRVhQTEFJTiAo Q09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBzaiBqMSwgc2ogajIgV0hFUkUgajEuYiA9IGoy LmIgQU5EIGoxLmEgPSAxIEFORCBqMi5hID0gMTsKKyAgICAgICAgICAgICAgIFFVRVJZIFBM QU4gICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorIFNlcSBTY2FuIG9uIHNqIGoyCisgICBGaWx0ZXI6ICgoYiBJUyBOT1QgTlVM TCkgQU5EIChhID0gMSkpCisoMiByb3dzKQorCistLSBSZXR1cm4gbm8gcm93cworU0VMRUNU ICogRlJPTSBzaiBqMSwgc2ogajIgV0hFUkUgajEuYiA9IGoyLmIgQU5EIGoxLmEgPSAxIEFO RCBqMi5hID0gMTsKKyBhIHwgYiB8IGMgfCBhIHwgYiB8IGMgCistLS0rLS0tKy0tLSstLS0r LS0tKy0tLQorKDAgcm93cykKKworLS0gU2h1ZmZsZSBhIGNsYXVzZS4gUmVtb3ZlIFNKCitF WFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIHNqIGoxLCBzaiBqMiBXSEVSRSBq MS5iID0gajIuYiBBTkQgMSA9IGoxLmEgQU5EIGoyLmEgPSAxOworICAgICAgICAgICAgICAg UVVFUlkgUExBTiAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24gc2ogajIKKyAgIEZpbHRlcjogKChiIElT IE5PVCBOVUxMKSBBTkQgKGEgPSAxKSkKKygyIHJvd3MpCisKKy0tIFJldHVybiBubyByb3dz CitTRUxFQ1QgKiBGUk9NIHNqIGoxLCBzaiBqMiBXSEVSRSBqMS5iID0gajIuYiBBTkQgMSA9 IGoxLmEgQU5EIGoyLmEgPSAxOworIGEgfCBiIHwgYyB8IGEgfCBiIHwgYyAKKy0tLSstLS0r LS0tKy0tLSstLS0rLS0tCisoMCByb3dzKQorCistLSBTSkUgQ29ybmVyIGNhc2U6IGEgJ2Eu eD1hLngnIGNsYXVzZSwgaGF2ZSByZXBsYWNlZCB3aXRoICdhLnggSVMgTk9UIE5VTEwnCist LSBhZnRlciBTSiBlbGltaW5hdGlvbiBpdCBzaG91bGRuJ3QgYmUgYSBtZXJnZWpvaW5hYmxl IGNsYXVzZS4KK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCB0NC4qCitGUk9NIChTRUxF Q1QgdDEuKiwgdDIuYSBBUyBhMSBGUk9NIHNqIHQxLCBzaiB0MiBXSEVSRSB0MS5iID0gdDIu YikgQVMgdDMKK0pPSU4gc2ogdDQgT04gKHQ0LmEgPSB0My5hKSBXSEVSRSB0My5hMSA9IDQy OworICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAorICAgSm9pbiBGaWx0ZXI6ICh0MS5i ID0gdDIuYikKKyAgIC0+ICBTZXEgU2NhbiBvbiBzaiB0MgorICAgICAgICAgRmlsdGVyOiAo YSA9IDQyKQorICAgLT4gIFNlcSBTY2FuIG9uIHNqIHQxCisgICAgICAgICBGaWx0ZXI6IChh IElTIE5PVCBOVUxMKQorKDYgcm93cykKKworU0VMRUNUIHQ0LioKK0ZST00gKFNFTEVDVCB0 MS4qLCB0Mi5hIEFTIGExIEZST00gc2ogdDEsIHNqIHQyIFdIRVJFIHQxLmIgPSB0Mi5iKSBB UyB0MworSk9JTiBzaiB0NCBPTiAodDQuYSA9IHQzLmEpIFdIRVJFIHQzLmExID0gNDI7Cisg YSB8IGIgfCBjIAorLS0tKy0tLSstLS0KKygwIHJvd3MpCisKKy0tIEZ1bmN0aW9uYWwgaW5k ZXgKK0NSRUFURSBVTklRVUUgSU5ERVggc2pfZm5faWR4IE9OIHNqKChhICogYSkpOworLS0g UmVtb3ZlIFNKCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIHNqIGoxLCBz aiBqMgorCVdIRVJFIGoxLmIgPSBqMi5iIEFORCBqMS5hKmoxLmEgPSAxIEFORCBqMi5hKmoy LmEgPSAxOworICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAg ICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg U2VxIFNjYW4gb24gc2ogajIKKyAgIEZpbHRlcjogKChiIElTIE5PVCBOVUxMKSBBTkQgKChh ICogYSkgPSAxKSkKKygyIHJvd3MpCisKKy0tIERvbid0IHJlbW92ZSBTSgorRVhQTEFJTiAo Q09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBzaiBqMSwgc2ogajIKKwlXSEVSRSBqMS5iID0g ajIuYiBBTkQgajEuYSpqMS5hID0gMSBBTkQgajIuYSpqMi5hID0gMjsKKyAgICAgICAgICBR VUVSWSBQTEFOICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyBOZXN0ZWQgTG9vcAorICAgSm9pbiBGaWx0ZXI6IChqMS5iID0gajIuYikKKyAgIC0+ICBT ZXEgU2NhbiBvbiBzaiBqMQorICAgICAgICAgRmlsdGVyOiAoKGEgKiBhKSA9IDEpCisgICAt PiAgU2VxIFNjYW4gb24gc2ogajIKKyAgICAgICAgIEZpbHRlcjogKChhICogYSkgPSAyKQor KDYgcm93cykKKworLS0gUmVzdHJpY3Rpb24gY29udGFpbnMgZXhwcmVzc2lvbnMgaW4gYm90 aCBzaWRlcywgUmVtb3ZlIFNKLgorRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUICogRlJP TSBzaiBqMSwgc2ogajIKK1dIRVJFIGoxLmIgPSBqMi5iCisgIEFORCAoajEuYSpqMS5hKSA9 IChFWFRSQUNUKERPVyBGUk9NIGN1cnJlbnRfdGltZXN0YW1wKDApKS8xNSArIDMpOjppbnQK KyAgQU5EIChFWFRSQUNUKERPVyBGUk9NIGN1cnJlbnRfdGltZXN0YW1wKDApKS8xNSArIDMp OjppbnQgPSAoajIuYSpqMi5hKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyBTZXEgU2NhbiBvbiBzaiBqMgorICAgRmlsdGVyOiAoKGIgSVMg Tk9UIE5VTEwpIEFORCAoKGEgKiBhKSA9ICgoKEVYVFJBQ1QoZG93IEZST00gQ1VSUkVOVF9U SU1FU1RBTVAoMCkpIC8gJzE1Jzo6bnVtZXJpYykgKyAnMyc6Om51bWVyaWMpKTo6aW50ZWdl cikpCisoMiByb3dzKQorCistLSBFbXB0eSBzZXQgb2Ygcm93cyBzaG91bGQgYmUgcmV0dXJu ZWQKK1NFTEVDVCAqIEZST00gc2ogajEsIHNqIGoyCitXSEVSRSBqMS5iID0gajIuYgorICBB TkQgKGoxLmEqajEuYSkgPSAoRVhUUkFDVChET1cgRlJPTSBjdXJyZW50X3RpbWVzdGFtcCgw KSkvMTUgKyAzKTo6aW50CisgIEFORCAoRVhUUkFDVChET1cgRlJPTSBjdXJyZW50X3RpbWVz dGFtcCgwKSkvMTUgKyAzKTo6aW50ID0gKGoyLmEqajIuYSk7CisgYSB8IGIgfCBjIHwgYSB8 IGIgfCBjIAorLS0tKy0tLSstLS0rLS0tKy0tLSstLS0KKygwIHJvd3MpCisKKy0tIFJlc3Ry aWN0aW9uIGNvbnRhaW5zIHZvbGF0aWxlIGZ1bmN0aW9uIC0gZGlzYWJsZSBTSkUgZmVhdHVy ZS4KK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gc2ogajEsIHNqIGoyCitX SEVSRSBqMS5iID0gajIuYgorICBBTkQgKGoxLmEqajEuYy8zKSA9IChyYW5kb20oKS8zICsg Myk6OmludAorICBBTkQgKHJhbmRvbSgpLzMgKyAzKTo6aW50ID0gKGoyLmEqajIuYy8zKTsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZ IFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorIE5lc3RlZCBMb29wCisgICBKb2luIEZpbHRlcjogKGoxLmIgPSBqMi5iKQorICAgLT4g IFNlcSBTY2FuIG9uIHNqIGoxCisgICAgICAgICBGaWx0ZXI6ICgoKGEgKiBjKSAvIDMpID0g KCgocmFuZG9tKCkgLyAnMyc6OmRvdWJsZSBwcmVjaXNpb24pICsgJzMnOjpkb3VibGUgcHJl Y2lzaW9uKSk6OmludGVnZXIpCisgICAtPiAgU2VxIFNjYW4gb24gc2ogajIKKyAgICAgICAg IEZpbHRlcjogKCgoKHJhbmRvbSgpIC8gJzMnOjpkb3VibGUgcHJlY2lzaW9uKSArICczJzo6 ZG91YmxlIHByZWNpc2lvbikpOjppbnRlZ2VyID0gKChhICogYykgLyAzKSkKKyg2IHJvd3Mp CisKKy0tIFJldHVybiBvbmUgcm93CitTRUxFQ1QgKiBGUk9NIHNqIGoxLCBzaiBqMgorV0hF UkUgajEuYiA9IGoyLmIKKyAgQU5EIChqMS5hKmoxLmMvMykgPSAocmFuZG9tKCkvMyArIDMp OjppbnQKKyAgQU5EIChyYW5kb20oKS8zICsgMyk6OmludCA9IChqMi5hKmoyLmMvMyk7Cisg YSB8IGIgfCBjIHwgYSB8IGIgfCBjIAorLS0tKy0tLSstLS0rLS0tKy0tLSstLS0KKyAzIHwg MSB8IDMgfCAzIHwgMSB8IDMKKygxIHJvdykKKworLS0gTXVsdGlwbGUgZmlsdGVycworQ1JF QVRFIFVOSVFVRSBJTkRFWCBzal90ZW1wX2lkeDEgT04gc2ooYSxiLGMpOworLS0gUmVtb3Zl IFNKCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIHNqIGoxLCBzaiBqMgor CVdIRVJFIGoxLmIgPSBqMi5iIEFORCBqMS5hID0gMiBBTkQgajEuYyA9IDMgQU5EIGoyLmEg PSAyIEFORCAzID0gajIuYzsKKyAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAg ICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorIFNlcSBTY2FuIG9uIHNqIGoyCisgICBGaWx0ZXI6ICgo YiBJUyBOT1QgTlVMTCkgQU5EIChhID0gMikgQU5EIChjID0gMykpCisoMiByb3dzKQorCist LSBEb24ndCByZW1vdmUgU0oKK0VYUExBSU4gKENPU1RTIE9GRikKKwlTRUxFQ1QgKiBGUk9N IHNqIGoxLCBzaiBqMgorCVdIRVJFIGoxLmIgPSBqMi5iIEFORCAyID0gajEuYSBBTkQgajEu YyA9IDMgQU5EIGoyLmEgPSAxIEFORCAzID0gajIuYzsKKyAgICAgICAgICAgICAgUVVFUlkg UExBTiAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgTmVzdGVkIExvb3AKKyAgIEpvaW4gRmlsdGVyOiAoajEuYiA9IGoyLmIpCisg ICAtPiAgU2VxIFNjYW4gb24gc2ogajEKKyAgICAgICAgIEZpbHRlcjogKCgyID0gYSkgQU5E IChjID0gMykpCisgICAtPiAgU2VxIFNjYW4gb24gc2ogajIKKyAgICAgICAgIEZpbHRlcjog KChjID0gMykgQU5EIChhID0gMSkpCisoNiByb3dzKQorCitDUkVBVEUgVU5JUVVFIElOREVY IHNqX3RlbXBfaWR4IE9OIHNqKGEsYik7CistLSBEb24ndCByZW1vdmUgU0oKK0VYUExBSU4g KENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gc2ogajEsIHNqIGoyIFdIRVJFIGoxLmIgPSBq Mi5iIEFORCBqMS5hID0gMjsKKyAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AKKyAgIEpvaW4gRmls dGVyOiAoajEuYiA9IGoyLmIpCisgICAtPiAgU2VxIFNjYW4gb24gc2ogajEKKyAgICAgICAg IEZpbHRlcjogKGEgPSAyKQorICAgLT4gIFNlcSBTY2FuIG9uIHNqIGoyCisoNSByb3dzKQor CistLSBEb24ndCByZW1vdmUgU0oKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAqIEZS T00gc2ogajEsIHNqIGoyIFdIRVJFIGoxLmIgPSBqMi5iIEFORCAyID0gajIuYTsKKyAgICAg ICAgICBRVUVSWSBQTEFOICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgTmVzdGVkIExvb3AKKyAgIEpvaW4gRmlsdGVyOiAoajEuYiA9IGoyLmIpCisgICAt PiAgU2VxIFNjYW4gb24gc2ogajIKKyAgICAgICAgIEZpbHRlcjogKDIgPSBhKQorICAgLT4g IFNlcSBTY2FuIG9uIHNqIGoxCisoNSByb3dzKQorCistLSBEb24ndCByZW1vdmUgU0oKK0VY UExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gc2ogajEsIHNqIGoyIFdIRVJFIGox LmIgPSBqMi5iIEFORCAoajEuYSA9IDEgT1IgajIuYSA9IDEpOworICAgICAgICAgICAgICAg ICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyBOZXN0ZWQgTG9vcAorICAgSm9pbiBGaWx0ZXI6ICgoajEuYiA9IGoyLmIpIEFO RCAoKGoxLmEgPSAxKSBPUiAoajIuYSA9IDEpKSkKKyAgIC0+ICBTZXEgU2NhbiBvbiBzaiBq MQorICAgLT4gIE1hdGVyaWFsaXplCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gc2ogajIK Kyg1IHJvd3MpCisKK0RST1AgSU5ERVggc2pfZm5faWR4LCBzal90ZW1wX2lkeDEsIHNqX3Rl bXBfaWR4OworLS0gVGVzdCB0aGF0IE9SIHByZWRpY2F0ZWQgYXJlIHVwZGF0ZWQgY29ycmVj dGx5IGFmdGVyIGpvaW4gcmVtb3ZhbAorQ1JFQVRFIFRBQkxFIHRhYl93aXRoX2ZsYWcgKCBp ZCBJTlQgUFJJTUFSWSBLRVksIGlzX2ZsYWcgU01BTExJTlQpOworQ1JFQVRFIElOREVYIGlk eF90ZXN0X2lzX2ZsYWcgT04gdGFiX3dpdGhfZmxhZyAoaXNfZmxhZyk7CitFWFBMQUlOIChD T1NUUyBPRkYpCitTRUxFQ1QgQ09VTlQoKikgRlJPTSB0YWJfd2l0aF9mbGFnCitXSEVSRQor CShpc19mbGFnIElTIE5VTEwgT1IgaXNfZmxhZyA9IDApCisJQU5EIGlkIElOIChTRUxFQ1Qg aWQgRlJPTSB0YWJfd2l0aF9mbGFnIFdIRVJFIGlkIElOICgyLCAzKSk7CisgICAgICAgICAg ICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyBBZ2dyZWdhdGUKKyAgIC0+ICBCaXRtYXAgSGVhcCBTY2FuIG9uIHRhYl93aXRoX2Zs YWcKKyAgICAgICAgIFJlY2hlY2sgQ29uZDogKGlkID0gQU5ZICgnezIsM30nOjppbnRlZ2Vy W10pKQorICAgICAgICAgRmlsdGVyOiAoKGlzX2ZsYWcgSVMgTlVMTCkgT1IgKGlzX2ZsYWcg PSAwKSkKKyAgICAgICAgIC0+ICBCaXRtYXAgSW5kZXggU2NhbiBvbiB0YWJfd2l0aF9mbGFn X3BrZXkKKyAgICAgICAgICAgICAgIEluZGV4IENvbmQ6IChpZCA9IEFOWSAoJ3syLDN9Jzo6 aW50ZWdlcltdKSkKKyg2IHJvd3MpCisKK0RST1AgVEFCTEUgdGFiX3dpdGhfZmxhZzsKKy0t IEhBVklORyBjbGF1c2UKK2V4cGxhaW4gKGNvc3RzIG9mZikKK3NlbGVjdCBwLmIgZnJvbSBz aiBwIGpvaW4gc2ogcSBvbiBwLmEgPSBxLmEgZ3JvdXAgYnkgcC5iIGhhdmluZyBzdW0ocC5h KSA9IDE7CisgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEhhc2hBZ2dyZWdhdGUKKyAgIEdyb3VwIEtleTog cS5iCisgICBGaWx0ZXI6IChzdW0ocS5hKSA9IDEpCisgICAtPiAgU2VxIFNjYW4gb24gc2og cQorICAgICAgICAgRmlsdGVyOiAoYSBJUyBOT1QgTlVMTCkKKyg1IHJvd3MpCisKKy0tIHVw ZGF0ZSBsYXRlcmFsIHJlZmVyZW5jZXMgYW5kIHJhbmdlIHRhYmxlIGVudHJ5IHJlZmVyZW5j ZQorZXhwbGFpbiAodmVyYm9zZSwgY29zdHMgb2ZmKQorc2VsZWN0IDEgZnJvbSAoc2VsZWN0 IHguKiBmcm9tIHNqIHgsIHNqIHkgd2hlcmUgeC5hID0geS5hKSBxLAorICBsYXRlcmFsIGdl bmVyYXRlX3NlcmllcygxLCBxLmEpIGdzKGkpOworICAgICAgICAgICAgICAgICAgICAgIFFV RVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAorICAgT3V0 cHV0OiAxCisgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLnNqIHkKKyAgICAgICAgIE91dHB1 dDogeS5hLCB5LmIsIHkuYworICAgICAgICAgRmlsdGVyOiAoeS5hIElTIE5PVCBOVUxMKQor ICAgLT4gIEZ1bmN0aW9uIFNjYW4gb24gcGdfY2F0YWxvZy5nZW5lcmF0ZV9zZXJpZXMgZ3MK KyAgICAgICAgIE91dHB1dDogZ3MuaQorICAgICAgICAgRnVuY3Rpb24gQ2FsbDogZ2VuZXJh dGVfc2VyaWVzKDEsIHkuYSkKKyg4IHJvd3MpCisKK2V4cGxhaW4gKHZlcmJvc2UsIGNvc3Rz IG9mZikKK3NlbGVjdCAxIGZyb20gKHNlbGVjdCB5LiogZnJvbSBzaiB4LCBzaiB5IHdoZXJl IHguYSA9IHkuYSkgcSwKKyAgbGF0ZXJhbCBnZW5lcmF0ZV9zZXJpZXMoMSwgcS5hKSBncyhp KTsKKyAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAg ICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgTmVzdGVkIExvb3AKKyAgIE91dHB1dDogMQorICAgLT4gIFNlcSBTY2FuIG9u IHB1YmxpYy5zaiB5CisgICAgICAgICBPdXRwdXQ6IHkuYSwgeS5iLCB5LmMKKyAgICAgICAg IEZpbHRlcjogKHkuYSBJUyBOT1QgTlVMTCkKKyAgIC0+ICBGdW5jdGlvbiBTY2FuIG9uIHBn X2NhdGFsb2cuZ2VuZXJhdGVfc2VyaWVzIGdzCisgICAgICAgICBPdXRwdXQ6IGdzLmkKKyAg ICAgICAgIEZ1bmN0aW9uIENhbGw6IGdlbmVyYXRlX3NlcmllcygxLCB5LmEpCisoOCByb3dz KQorCistLSBUZXN0IHRoYXQgYSBub24tRUMtZGVyaXZlZCBqb2luIGNsYXVzZSBpcyBwcm9j ZXNzZWQgY29ycmVjdGx5LiBVc2UgYW4KKy0tIG91dGVyIGpvaW4gc28gdGhhdCB3ZSBjYW4n dCBmb3JtIGFuIEVDLgorZXhwbGFpbiAoY29zdHMgb2ZmKSBzZWxlY3QgKiBmcm9tIHNqIHAg am9pbiBzaiBxIG9uIHAuYSA9IHEuYQorICBsZWZ0IGpvaW4gc2ogciBvbiBwLmEgKyBxLmEg PSByLmE7CisgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29wIExlZnQgSm9pbgor ICAgSm9pbiBGaWx0ZXI6ICgocS5hICsgcS5hKSA9IHIuYSkKKyAgIC0+ICBTZXEgU2NhbiBv biBzaiBxCisgICAgICAgICBGaWx0ZXI6IChhIElTIE5PVCBOVUxMKQorICAgLT4gIE1hdGVy aWFsaXplCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gc2ogcgorKDYgcm93cykKKworLS0g RklYTUUgdGhpcyBjb25zdGFudCBmYWxzZSBmaWx0ZXIgZG9lc24ndCBsb29rIGdvb2QuIFNo b3VsZCB3ZSBtZXJnZQorLS0gZXF1aXZhbGVuY2UgY2xhc3Nlcz8KK2V4cGxhaW4gKGNvc3Rz IG9mZikKK3NlbGVjdCAqIGZyb20gc2ogcCwgc2ogcSB3aGVyZSBwLmEgPSBxLmEgYW5kIHAu YiA9IDEgYW5kIHEuYiA9IDI7CisgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAg ICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTZXEgU2NhbiBvbiBzaiBxCisgICBGaWx0ZXI6ICgo YSBJUyBOT1QgTlVMTCkgQU5EIChiID0gMikgQU5EIChiID0gMSkpCisoMiByb3dzKQorCist LSBDaGVjayB0aGF0IGF0dHJfbmVlZGVkIGlzIHVwZGF0ZWQgY29ycmVjdGx5IGFmdGVyIHNl bGYtam9pbiByZW1vdmFsLiBJbiB0aGlzCistLSB0ZXN0LCB0aGUgam9pbiBvZiBqMSB3aXRo IGoyIGlzIHJlbW92ZWQuIGsxLmIgaXMgcmVxdWlyZWQgYXQgZWl0aGVyIGoxIG9yIGoyLgor LS0gSWYgdGhpcyBpbmZvIGlzIGxvc3QsIGpvaW4gdGFyZ2V0bGlzdCBmb3IgKGsxLCBrMikg d2lsbCBub3QgY29udGFpbiBrMS5iLgorLS0gVXNlIGluZGV4IHNjYW4gZm9yIGsxIHNvIHRo YXQgd2UgZG9uJ3QgZ2V0ICdiJyBmcm9tIHBoeXNpY2FsIHRsaXN0IHVzZWQgZm9yCistLSBz ZXFzY2FuLiBBbHNvIGRpc2FibGUgcmVvcmRlcmluZyBvZiBqb2lucyBiZWNhdXNlIHRoaXMg dGVzdCBkZXBlbmRzIG9uIGEKKy0tIHBhcnRpY3VsYXIgam9pbiB0cmVlLgorY3JlYXRlIHRh YmxlIHNrIChhIGludCwgYiBpbnQpOworY3JlYXRlIGluZGV4IG9uIHNrKGEpOworc2V0IGpv aW5fY29sbGFwc2VfbGltaXQgdG8gMTsKK3NldCBlbmFibGVfc2Vxc2NhbiB0byBvZmY7Citl eHBsYWluIChjb3N0cyBvZmYpIHNlbGVjdCAxIGZyb20KKwkoc2sgazEgam9pbiBzayBrMiBv biBrMS5hID0gazIuYSkKKwlqb2luIChzaiBqMSBqb2luIHNqIGoyIG9uIGoxLmEgPSBqMi5h KSBvbiBqMS5iID0gazEuYjsKKyAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAg ICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29wCisgICBKb2luIEZpbHRlcjogKGsx LmIgPSBqMi5iKQorICAgLT4gIE5lc3RlZCBMb29wCisgICAgICAgICAtPiAgSW5kZXggU2Nh biB1c2luZyBza19hX2lkeCBvbiBzayBrMQorICAgICAgICAgLT4gIEluZGV4IE9ubHkgU2Nh biB1c2luZyBza19hX2lkeCBvbiBzayBrMgorICAgICAgICAgICAgICAgSW5kZXggQ29uZDog KGEgPSBrMS5hKQorICAgLT4gIE1hdGVyaWFsaXplCisgICAgICAgICAtPiAgSW5kZXggU2Nh biB1c2luZyBzal9hX2tleSBvbiBzaiBqMgorICAgICAgICAgICAgICAgSW5kZXggQ29uZDog KGEgSVMgTk9UIE5VTEwpCisoOSByb3dzKQorCitleHBsYWluIChjb3N0cyBvZmYpIHNlbGVj dCAxIGZyb20KKwkoc2sgazEgam9pbiBzayBrMiBvbiBrMS5hID0gazIuYSkKKwlqb2luIChz aiBqMSBqb2luIHNqIGoyIG9uIGoxLmEgPSBqMi5hKSBvbiBqMi5iID0gazEuYjsKKyAgICAg ICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE5l c3RlZCBMb29wCisgICBKb2luIEZpbHRlcjogKGsxLmIgPSBqMi5iKQorICAgLT4gIE5lc3Rl ZCBMb29wCisgICAgICAgICAtPiAgSW5kZXggU2NhbiB1c2luZyBza19hX2lkeCBvbiBzayBr MQorICAgICAgICAgLT4gIEluZGV4IE9ubHkgU2NhbiB1c2luZyBza19hX2lkeCBvbiBzayBr MgorICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKGEgPSBrMS5hKQorICAgLT4gIE1hdGVy aWFsaXplCisgICAgICAgICAtPiAgSW5kZXggU2NhbiB1c2luZyBzal9hX2tleSBvbiBzaiBq MgorICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKGEgSVMgTk9UIE5VTEwpCisoOSByb3dz KQorCityZXNldCBqb2luX2NvbGxhcHNlX2xpbWl0OworcmVzZXQgZW5hYmxlX3NlcXNjYW47 CistLSBDaGVjayB0aGF0IGNsYXVzZXMgZnJvbSB0aGUgam9pbiBmaWx0ZXIgbGlzdCBpcyBu b3QgbG9zdCBvbiB0aGUgc2VsZi1qb2luIHJlbW92YWwKK0NSRUFURSBUQUJMRSBlbXAxIChp ZCBTRVJJQUwgUFJJTUFSWSBLRVkgTk9UIE5VTEwsIGNvZGUgaW50KTsKK0VYUExBSU4gKFZF UkJPU0UsIENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gZW1wMSBlMSwgZW1wMSBlMiBXSEVS RSBlMS5pZCA9IGUyLmlkIEFORCBlMi5jb2RlIDw+IGUxLmNvZGU7CisgICAgICAgICAgICAg ICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorIFNlcSBTY2FuIG9uIHB1YmxpYy5lbXAxIGUyCisgICBP dXRwdXQ6IGUyLmlkLCBlMi5jb2RlLCBlMi5pZCwgZTIuY29kZQorICAgRmlsdGVyOiAoZTIu Y29kZSA8PiBlMi5jb2RlKQorKDMgcm93cykKKworLS0gU2h1ZmZsZSBzZWxmLWpvaW5lZCBy ZWxhdGlvbnMuIE9ubHkgaW4gdGhlIGNhc2Ugb2YgaXRlcmF0aXZlIGRlbGV0aW9uCistLSBh dHRlbXB0cyBleHBsYWlucyBvZiB0aGVzZSBxdWVyaWVzIHdpbGwgYmUgaWRlbnRpY2FsLgor Q1JFQVRFIFVOSVFVRSBJTkRFWCBPTiBlbXAxKChpZCppZCkpOworRVhQTEFJTiAoQ09TVFMg T0ZGKQorU0VMRUNUIGNvdW50KCopIEZST00gZW1wMSBjMSwgZW1wMSBjMiwgZW1wMSBjMwor V0hFUkUgYzEuaWQ9YzIuaWQgQU5EIGMxLmlkKmMyLmlkPWMzLmlkKmMzLmlkOworICAgICAg ICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQWdncmVnYXRlCisgICAtPiAgU2VxIFNjYW4g b24gZW1wMSBjMworICAgICAgICAgRmlsdGVyOiAoKGlkICogaWQpIElTIE5PVCBOVUxMKQor KDMgcm93cykKKworRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUIGNvdW50KCopIEZST00g ZW1wMSBjMSwgZW1wMSBjMiwgZW1wMSBjMworV0hFUkUgYzEuaWQ9YzMuaWQgQU5EIGMxLmlk KmMzLmlkPWMyLmlkKmMyLmlkOworICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAg ICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg QWdncmVnYXRlCisgICAtPiAgU2VxIFNjYW4gb24gZW1wMSBjMworICAgICAgICAgRmlsdGVy OiAoKGlkICogaWQpIElTIE5PVCBOVUxMKQorKDMgcm93cykKKworRVhQTEFJTiAoQ09TVFMg T0ZGKQorU0VMRUNUIGNvdW50KCopIEZST00gZW1wMSBjMSwgZW1wMSBjMiwgZW1wMSBjMwor V0hFUkUgYzMuaWQ9YzIuaWQgQU5EIGMzLmlkKmMyLmlkPWMxLmlkKmMxLmlkOworICAgICAg ICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQWdncmVnYXRlCisgICAtPiAgU2VxIFNjYW4g b24gZW1wMSBjMworICAgICAgICAgRmlsdGVyOiAoKGlkICogaWQpIElTIE5PVCBOVUxMKQor KDMgcm93cykKKworLS0gQ2hlY2sgdGhlIHVzYWdlIG9mIGEgcGFyc2UgdHJlZSBieSB0aGUg c2V0IG9wZXJhdGlvbnMgKGJ1ZyAjMTgxNzApCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxF Q1QgYzEuY29kZSBGUk9NIGVtcDEgYzEgTEVGVCBKT0lOIGVtcDEgYzIgT04gYzEuaWQgPSBj Mi5pZAorV0hFUkUgYzIuaWQgSVMgTk9UIE5VTEwKK0VYQ0VQVCBBTEwKK1NFTEVDVCBjMy5j b2RlIEZST00gZW1wMSBjMzsKKyAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAg ICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyBIYXNoU2V0T3AgRXhjZXB0IEFsbAorICAgLT4gIEFwcGVuZAorICAgICAgICAgLT4gIFN1 YnF1ZXJ5IFNjYW4gb24gIipTRUxFQ1QqIDEiCisgICAgICAgICAgICAgICAtPiAgU2VxIFNj YW4gb24gZW1wMSBjMgorICAgICAgICAgLT4gIFN1YnF1ZXJ5IFNjYW4gb24gIipTRUxFQ1Qq IDIiCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gZW1wMSBjMworKDYgcm93cykK KworLS0gQ2hlY2sgdGhhdCBTSkUgcmVtb3ZlcyByZWZlcmVuY2VzIGZyb20gUEhWcyBjb3Jy ZWN0bHkKK2V4cGxhaW4gKGNvc3RzIG9mZikKK3NlbGVjdCAqIGZyb20gZW1wMSB0MSBsZWZ0 IGpvaW4KKyAgICAoc2VsZWN0IGNvYWxlc2NlKHQzLmNvZGUsIDEpIGZyb20gZW1wMSB0Mgor ICAgICAgICBsZWZ0IGpvaW4gKGVtcDEgdDMgam9pbiBlbXAxIHQ0IG9uIHQzLmlkID0gdDQu aWQpCisgICAgICAgIG9uIHRydWUpCitvbiB0cnVlOworICAgICAgICAgICAgICAgICBRVUVS WSBQTEFOICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcCBMZWZ0IEpvaW4KKyAgIC0+ICBTZXEg U2NhbiBvbiBlbXAxIHQxCisgICAtPiAgTWF0ZXJpYWxpemUKKyAgICAgICAgIC0+ICBOZXN0 ZWQgTG9vcCBMZWZ0IEpvaW4KKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBlbXAx IHQyCisgICAgICAgICAgICAgICAtPiAgTWF0ZXJpYWxpemUKKyAgICAgICAgICAgICAgICAg ICAgIC0+ICBTZXEgU2NhbiBvbiBlbXAxIHQ0CisoNyByb3dzKQorCistLSBDaGVjayB0aGF0 IFNKRSByZW1vdmVzIHRoZSB3aG9sZSBQSFZzIGNvcnJlY3RseQorZXhwbGFpbiAodmVyYm9z ZSwgY29zdHMgb2ZmKQorc2VsZWN0IDEgZnJvbSBlbXAxIHQxIGxlZnQgam9pbgorICAgICgo c2VsZWN0IDEgYXMgeCwgKiBmcm9tIGVtcDEgdDIpIHMxIGlubmVyIGpvaW4KKyAgICAgICAg KHNlbGVjdCAqIGZyb20gZW1wMSB0MykgczIgb24gczEuaWQgPSBzMi5pZCkKKyAgICBvbiB0 cnVlCit3aGVyZSBzMS54ID0gMTsKKyAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAg ICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBO ZXN0ZWQgTG9vcAorICAgT3V0cHV0OiAxCisgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVt cDEgdDEKKyAgICAgICAgIE91dHB1dDogdDEuaWQsIHQxLmNvZGUKKyAgIC0+ICBNYXRlcmlh bGl6ZQorICAgICAgICAgT3V0cHV0OiB0My5pZAorICAgICAgICAgLT4gIFNlcSBTY2FuIG9u IHB1YmxpYy5lbXAxIHQzCisgICAgICAgICAgICAgICBPdXRwdXQ6IHQzLmlkCisgICAgICAg ICAgICAgICBGaWx0ZXI6ICgxID0gMSkKKyg5IHJvd3MpCisKKy0tIENoZWNrIHRoYXQgUEhW cyBkbyBub3QgaW1wb3NlIGFueSBjb25zdHJhaW50cyBvbiByZW1vdmluZyBzZWxmIGpvaW5z CitleHBsYWluICh2ZXJib3NlLCBjb3N0cyBvZmYpCitzZWxlY3QgKiBmcm9tIGVtcDEgdDEg am9pbiBlbXAxIHQyIG9uIHQxLmlkID0gdDIuaWQgbGVmdCBqb2luCisgICAgbGF0ZXJhbCAo c2VsZWN0IHQxLmlkIGFzIHQxaWQsICogZnJvbSBnZW5lcmF0ZV9zZXJpZXMoMSwxKSB0Mykg cyBvbiB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAg ICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29wIExlZnQgSm9pbgorICAgT3V0 cHV0OiB0Mi5pZCwgdDIuY29kZSwgdDIuaWQsIHQyLmNvZGUsICh0Mi5pZCksIHQzLnQzCisg ICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVtcDEgdDIKKyAgICAgICAgIE91dHB1dDogdDIu aWQsIHQyLmNvZGUKKyAgIC0+ICBGdW5jdGlvbiBTY2FuIG9uIHBnX2NhdGFsb2cuZ2VuZXJh dGVfc2VyaWVzIHQzCisgICAgICAgICBPdXRwdXQ6IHQzLnQzLCB0Mi5pZAorICAgICAgICAg RnVuY3Rpb24gQ2FsbDogZ2VuZXJhdGVfc2VyaWVzKDEsIDEpCisoNyByb3dzKQorCitleHBs YWluICh2ZXJib3NlLCBjb3N0cyBvZmYpCitzZWxlY3QgKiBmcm9tIGdlbmVyYXRlX3Nlcmll cygxLDEwKSB0MShpZCkgbGVmdCBqb2luCisgICAgbGF0ZXJhbCAoc2VsZWN0IHQxLmlkIGFz IHQxaWQsIHQyLmlkIGZyb20gZW1wMSB0MiBqb2luIGVtcDEgdDMgb24gdDIuaWQgPSB0My5p ZCkKK29uIHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAg ICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29wIExlZnQgSm9pbgorICAgT3V0cHV0OiB0 MS5pZCwgKHQxLmlkKSwgdDMuaWQKKyAgIC0+ICBGdW5jdGlvbiBTY2FuIG9uIHBnX2NhdGFs b2cuZ2VuZXJhdGVfc2VyaWVzIHQxCisgICAgICAgICBPdXRwdXQ6IHQxLmlkCisgICAgICAg ICBGdW5jdGlvbiBDYWxsOiBnZW5lcmF0ZV9zZXJpZXMoMSwgMTApCisgICAtPiAgU2VxIFNj YW4gb24gcHVibGljLmVtcDEgdDMKKyAgICAgICAgIE91dHB1dDogdDMuaWQsIHQxLmlkCiso NyByb3dzKQorCistLSBDaGVjayB0aGF0IFNKRSByZXBsYWNlcyBqb2luIGNsYXVzZXMgaW52 b2x2aW5nIHRoZSByZW1vdmVkIHJlbCBjb3JyZWN0bHkKK2V4cGxhaW4gKGNvc3RzIG9mZikK K3NlbGVjdCAqIGZyb20gZW1wMSB0MQorICAgaW5uZXIgam9pbiBlbXAxIHQyIG9uIHQxLmlk ID0gdDIuaWQKKyAgICBsZWZ0IGpvaW4gZW1wMSB0MyBvbiB0MS5pZCA+IDEgYW5kIHQxLmlk IDwgMjsKKyAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0 ZWQgTG9vcCBMZWZ0IEpvaW4KKyAgIEpvaW4gRmlsdGVyOiAoKHQyLmlkID4gMSkgQU5EICh0 Mi5pZCA8IDIpKQorICAgLT4gIFNlcSBTY2FuIG9uIGVtcDEgdDIKKyAgIC0+ICBNYXRlcmlh bGl6ZQorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGVtcDEgdDMKKyg1IHJvd3MpCisKKy0t IENoZWNrIHRoYXQgU0pFIGRvZXNuJ3QgcmVwbGFjZSB0aGUgdGFyZ2V0IHJlbGF0aW9uCitF WFBMQUlOIChDT1NUUyBPRkYpCitXSVRIIHQxIEFTIChTRUxFQ1QgKiBGUk9NIGVtcDEpCitV UERBVEUgZW1wMSBTRVQgY29kZSA9IHQxLmNvZGUgKyAxIEZST00gdDEKK1dIRVJFIHQxLmlk ID0gZW1wMS5pZCBSRVRVUk5JTkcgZW1wMS5pZCwgZW1wMS5jb2RlLCB0MS5jb2RlOworICAg ICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgIAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorIFVwZGF0ZSBvbiBlbXAxCisgICAtPiAgTmVzdGVkIExvb3AKKyAgICAgICAgIC0+ICBT ZXEgU2NhbiBvbiBlbXAxCisgICAgICAgICAtPiAgSW5kZXggU2NhbiB1c2luZyBlbXAxX3Br ZXkgb24gZW1wMSBlbXAxXzEKKyAgICAgICAgICAgICAgIEluZGV4IENvbmQ6IChpZCA9IGVt cDEuaWQpCisoNSByb3dzKQorCitJTlNFUlQgSU5UTyBlbXAxIFZBTFVFUyAoMSwgMSksICgy LCAxKTsKK1dJVEggdDEgQVMgKFNFTEVDVCAqIEZST00gZW1wMSkKK1VQREFURSBlbXAxIFNF VCBjb2RlID0gdDEuY29kZSArIDEgRlJPTSB0MQorV0hFUkUgdDEuaWQgPSBlbXAxLmlkIFJF VFVSTklORyBlbXAxLmlkLCBlbXAxLmNvZGUsIHQxLmNvZGU7CisgaWQgfCBjb2RlIHwgY29k ZSAKKy0tLS0rLS0tLS0tKy0tLS0tLQorICAxIHwgICAgMiB8ICAgIDEKKyAgMiB8ICAgIDIg fCAgICAxCisoMiByb3dzKQorCitUUlVOQ0FURSBlbXAxOworRVhQTEFJTiAoQ09TVFMgT0ZG KQorVVBEQVRFIHNqIHNxIFNFVCBiID0gMSBGUk9NIHNqIGFzIHN6IFdIRVJFIHNxLmEgPSBz ei5hOworICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFVwZGF0ZSBvbiBzaiBzcQorICAgLT4g IE5lc3RlZCBMb29wCisgICAgICAgICBKb2luIEZpbHRlcjogKHNxLmEgPSBzei5hKQorICAg ICAgICAgLT4gIFNlcSBTY2FuIG9uIHNqIHNxCisgICAgICAgICAtPiAgTWF0ZXJpYWxpemUK KyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBzaiBzegorKDYgcm93cykKKworQ1JF QVRFIFJVTEUgc2pfZGVsX3J1bGUgQVMgT04gREVMRVRFIFRPIHNqCisgIERPIElOU1RFQUQK KyAgICBVUERBVEUgc2ogU0VUIGEgPSAxIFdIRVJFIGEgPSBvbGQuYTsKK0VYUExBSU4gKENP U1RTIE9GRikgREVMRVRFIEZST00gc2o7CisgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAg ICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBV cGRhdGUgb24gc2ogc2pfMQorICAgLT4gIE5lc3RlZCBMb29wCisgICAgICAgICBKb2luIEZp bHRlcjogKHNqLmEgPSBzal8xLmEpCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gc2ogc2pf MQorICAgICAgICAgLT4gIE1hdGVyaWFsaXplCisgICAgICAgICAgICAgICAtPiAgU2VxIFNj YW4gb24gc2oKKyg2IHJvd3MpCisKK0RST1AgUlVMRSBzal9kZWxfcnVsZSBPTiBzaiBDQVND QURFOworLS0gQ2hlY2sgdGhhdCBTSkUgZG9lcyBub3QgbWlzdGFrZW5seSBvbWl0IHF1YWwg Y2xhdXNlcyAoYnVnICMxODE4NykKK2luc2VydCBpbnRvIGVtcDEgdmFsdWVzICgxLCAxKTsK K2V4cGxhaW4gKGNvc3RzIG9mZikKK3NlbGVjdCAxIGZyb20gZW1wMSBmdWxsIGpvaW4KKyAg ICAoc2VsZWN0ICogZnJvbSBlbXAxIHQxIGpvaW4KKyAgICAgICAgZW1wMSB0MiBqb2luIGVt cDEgdDMgb24gdDIuaWQgPSB0My5pZAorICAgICAgICBvbiB0cnVlCisgICAgd2hlcmUgZmFs c2UpIHMgb24gdHJ1ZQord2hlcmUgZmFsc2U7CisgICAgICAgIFFVRVJZIFBMQU4gICAgICAg IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBSZXN1bHQKKyAgIE9uZS1UaW1lIEZp bHRlcjogZmFsc2UKKygyIHJvd3MpCisKK3NlbGVjdCAxIGZyb20gZW1wMSBmdWxsIGpvaW4K KyAgICAoc2VsZWN0ICogZnJvbSBlbXAxIHQxIGpvaW4KKyAgICAgICAgZW1wMSB0MiBqb2lu IGVtcDEgdDMgb24gdDIuaWQgPSB0My5pZAorICAgICAgICBvbiB0cnVlCisgICAgd2hlcmUg ZmFsc2UpIHMgb24gdHJ1ZQord2hlcmUgZmFsc2U7CisgP2NvbHVtbj8gCistLS0tLS0tLS0t CisoMCByb3dzKQorCistLSBDaGVjayB0aGF0IFNKRSBkb2VzIG5vdCBtaXN0YWtlbmx5IHJl LXVzZSBrbm93bGVkZ2Ugb2YgcmVsYXRpb24gdW5pcXVlbmVzcworLS0gbWFkZSB3aXRoIGRp ZmZlcmVudCBzZXQgb2YgcXVhbHMKK2luc2VydCBpbnRvIGVtcDEgdmFsdWVzICgyLCAxKTsK K2V4cGxhaW4gKGNvc3RzIG9mZikKK3NlbGVjdCAqIGZyb20gZW1wMSB0MSB3aGVyZSBleGlz dHMgKHNlbGVjdCAqIGZyb20gZW1wMSB0MgorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgd2hlcmUgdDIuaWQgPSB0MS5jb2RlIGFuZCB0Mi5jb2RlID4gMCk7CisgICAg ICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29wCisgICAt PiAgU2VxIFNjYW4gb24gZW1wMSB0MQorICAgLT4gIEluZGV4IFNjYW4gdXNpbmcgZW1wMV9w a2V5IG9uIGVtcDEgdDIKKyAgICAgICAgIEluZGV4IENvbmQ6IChpZCA9IHQxLmNvZGUpCisg ICAgICAgICBGaWx0ZXI6IChjb2RlID4gMCkKKyg1IHJvd3MpCisKK3NlbGVjdCAqIGZyb20g ZW1wMSB0MSB3aGVyZSBleGlzdHMgKHNlbGVjdCAqIGZyb20gZW1wMSB0MgorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgdDIuaWQgPSB0MS5jb2RlIGFuZCB0 Mi5jb2RlID4gMCk7CisgaWQgfCBjb2RlIAorLS0tLSstLS0tLS0KKyAgMSB8ICAgIDEKKyAg MiB8ICAgIDEKKygyIHJvd3MpCisKKy0tIFdlIGNhbiByZW1vdmUgdGhlIGpvaW4gZXZlbiBp ZiB3ZSBmaW5kIHRoZSBqb2luIGNhbid0IGR1cGxpY2F0ZSByb3dzIGFuZAorLS0gdGhlIGJh c2UgcXVhbHMgb2YgZWFjaCBzaWRlIGFyZSBkaWZmZXJlbnQuICBJbiB0aGUgZm9sbG93aW5n IGNhc2Ugd2UgZW5kIHVwCistLSBtb3ZpbmcgcXVhbHMgb3ZlciB0byBzMSB0byBtYWtlIGl0 IHNvIGl0IGNhbid0IG1hdGNoIGFueSByb3dzLgorY3JlYXRlIHRhYmxlIHNsKGEgaW50LCBi IGludCwgYyBpbnQpOworY3JlYXRlIHVuaXF1ZSBpbmRleCBvbiBzbChhLCBiKTsKK3ZhY3V1 bSBhbmFseXplIHNsOworLS0gQm90aCBzaWRlcyBhcmUgdW5pcXVlLCBidXQgYmFzZSBxdWFs cyBhcmUgZGlmZmVyZW50CitleHBsYWluIChjb3N0cyBvZmYpCitzZWxlY3QgKiBmcm9tIHNs IHQxLCBzbCB0MiB3aGVyZSB0MS5hID0gdDIuYSBhbmQgdDEuYiA9IDEgYW5kIHQyLmIgPSAy OworICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAorICAgSm9pbiBGaWx0ZXI6ICh0MS5hID0gdDIu YSkKKyAgIC0+ICBTZXEgU2NhbiBvbiBzbCB0MQorICAgICAgICAgRmlsdGVyOiAoYiA9IDEp CisgICAtPiAgU2VxIFNjYW4gb24gc2wgdDIKKyAgICAgICAgIEZpbHRlcjogKGIgPSAyKQor KDYgcm93cykKKworLS0gQ2hlY2sgTnVsbFRlc3QgaW4gYmFzZXJlc3RyaWN0aW5mbyBsaXN0 CitleHBsYWluIChjb3N0cyBvZmYpCitzZWxlY3QgKiBmcm9tIHNsIHQxLCBzbCB0Mgord2hl cmUgdDEuYSA9IHQyLmEgYW5kIHQxLmIgPSAxIGFuZCB0Mi5iID0gMgorICBhbmQgdDEuYyBJ UyBOT1QgTlVMTCBhbmQgdDIuYyBJUyBOT1QgTlVMTAorICBhbmQgdDIuYiBJUyBOT1QgTlVM TCBhbmQgdDEuYiBJUyBOT1QgTlVMTAorICBhbmQgdDEuYSBJUyBOT1QgTlVMTCBhbmQgdDIu YSBJUyBOT1QgTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AKKyAgIEpvaW4g RmlsdGVyOiAodDEuYSA9IHQyLmEpCisgICAtPiAgU2VxIFNjYW4gb24gc2wgdDEKKyAgICAg ICAgIEZpbHRlcjogKChjIElTIE5PVCBOVUxMKSBBTkQgKGIgSVMgTk9UIE5VTEwpIEFORCAo YSBJUyBOT1QgTlVMTCkgQU5EIChiID0gMSkpCisgICAtPiAgU2VxIFNjYW4gb24gc2wgdDIK KyAgICAgICAgIEZpbHRlcjogKChjIElTIE5PVCBOVUxMKSBBTkQgKGIgSVMgTk9UIE5VTEwp IEFORCAoYSBJUyBOT1QgTlVMTCkgQU5EIChiID0gMikpCisoNiByb3dzKQorCitleHBsYWlu ICh2ZXJib3NlLCBjb3N0cyBvZmYpCitzZWxlY3QgKiBmcm9tIHNsIHQxLCBzbCB0Mgord2hl cmUgdDEuYiA9IHQyLmIgYW5kIHQyLmEgPSAzIGFuZCB0MS5hID0gMworICBhbmQgdDEuYyBJ UyBOT1QgTlVMTCBhbmQgdDIuYyBJUyBOT1QgTlVMTAorICBhbmQgdDIuYiBJUyBOT1QgTlVM TCBhbmQgdDEuYiBJUyBOT1QgTlVMTAorICBhbmQgdDEuYSBJUyBOT1QgTlVMTCBhbmQgdDIu YSBJUyBOT1QgTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4g b24gcHVibGljLnNsIHQyCisgICBPdXRwdXQ6IHQyLmEsIHQyLmIsIHQyLmMsIHQyLmEsIHQy LmIsIHQyLmMKKyAgIEZpbHRlcjogKCh0Mi5jIElTIE5PVCBOVUxMKSBBTkQgKHQyLmIgSVMg Tk9UIE5VTEwpIEFORCAodDIuYSBJUyBOT1QgTlVMTCkgQU5EICh0Mi5hID0gMykpCisoMyBy b3dzKQorCistLSBKb2luIHF1YWwgaXNuJ3QgbWVyZ2Vqb2luYWJsZSwgYnV0IGlubmVyIGlz IHVuaXF1ZS4KK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCBuMi5hIEZST00gc2ogbjEs IHNqIG4yIFdIRVJFIG4xLmEgPD4gbjIuYSBBTkQgbjIuYSA9IDE7CisgICAgICAgICAgUVVF UlkgUExBTiAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg TmVzdGVkIExvb3AKKyAgIEpvaW4gRmlsdGVyOiAobjEuYSA8PiBuMi5hKQorICAgLT4gIFNl cSBTY2FuIG9uIHNqIG4yCisgICAgICAgICBGaWx0ZXI6IChhID0gMSkKKyAgIC0+ICBTZXEg U2NhbiBvbiBzaiBuMQorKDUgcm93cykKKworRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNU ICogRlJPTQorKFNFTEVDVCBuMi5hIEZST00gc2ogbjEsIHNqIG4yIFdIRVJFIG4xLmEgPD4g bjIuYSkgcTAsIHNsCitXSEVSRSBxMC5hID0gMTsKKyAgICAgICAgICBRVUVSWSBQTEFOICAg ICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9v cAorICAgSm9pbiBGaWx0ZXI6IChuMS5hIDw+IG4yLmEpCisgICAtPiAgTmVzdGVkIExvb3AK KyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBzbAorICAgICAgICAgLT4gIFNlcSBTY2FuIG9u IHNqIG4yCisgICAgICAgICAgICAgICBGaWx0ZXI6IChhID0gMSkKKyAgIC0+ICBTZXEgU2Nh biBvbiBzaiBuMQorKDcgcm93cykKKworLS0gQ2hlY2sgb3B0aW1pemF0aW9uIGRpc2FibGlu ZyBpZiBpdCB3aWxsIHZpb2xhdGUgc3BlY2lhbCBqb2luIGNvbmRpdGlvbnMuCistLSBUd28g aWRlbnRpY2FsIGpvaW5lZCByZWxhdGlvbnMgc2F0aXNmaWVzIHNlbGYgam9pbiByZW1vdmFs IGNvbmRpdGlvbnMgYnV0CistLSBzdGF5IGluIGRpZmZlcmVudCBzcGVjaWFsIGpvaW4gaW5m b3MuCitDUkVBVEUgVEFCTEUgc2pfdDEgKGlkIHNlcmlhbCwgYSBpbnQpOworQ1JFQVRFIFRB QkxFIHNqX3QyIChpZCBzZXJpYWwsIGEgaW50KTsKK0NSRUFURSBUQUJMRSBzal90MyAoaWQg c2VyaWFsLCBhIGludCk7CitDUkVBVEUgVEFCTEUgc2pfdDQgKGlkIHNlcmlhbCwgYSBpbnQp OworQ1JFQVRFIFVOSVFVRSBJTkRFWCBPTiBzal90MyBVU0lORyBidHJlZSAoYSxpZCk7CitD UkVBVEUgVU5JUVVFIElOREVYIE9OIHNqX3QyIFVTSU5HIGJ0cmVlIChpZCk7CitFWFBMQUlO IChDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIHNqX3QxCitKT0lOICgKKwlTRUxFQ1Qgc2pf dDIuaWQgQVMgaWQgRlJPTSBzal90MgorCVdIRVJFIEVYSVNUUworCQkoCisJCVNFTEVDVCBU UlVFIEZST00gc2pfdDMsc2pfdDQgV0hFUkUgc2pfdDMuYSA9IDEgQU5EIHNqX3QzLmlkID0g c2pfdDIuaWQKKwkJKQorCSkgdDJ0M3Q0CitPTiBzal90MS5pZCA9IHQydDN0NC5pZAorSk9J TiAoCisJU0VMRUNUIHNqX3QyLmlkIEFTIGlkIEZST00gc2pfdDIKKwlXSEVSRSBFWElTVFMK KwkJKAorCQlTRUxFQ1QgVFJVRSBGUk9NIHNqX3QzLHNqX3Q0IFdIRVJFIHNqX3QzLmEgPSAx IEFORCBzal90My5pZCA9IHNqX3QyLmlkCisJCSkKKwkpIF90MnQzdDQKK09OIHNqX3QxLmlk ID0gX3QydDN0NC5pZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBR VUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAorICAgSm9pbiBGaWx0 ZXI6IChzal90My5pZCA9IHNqX3QxLmlkKQorICAgLT4gIE5lc3RlZCBMb29wCisgICAgICAg ICBKb2luIEZpbHRlcjogKHNqX3QyLmlkID0gc2pfdDMuaWQpCisgICAgICAgICAtPiAgTmVz dGVkIExvb3AgU2VtaSBKb2luCisgICAgICAgICAgICAgICAtPiAgTmVzdGVkIExvb3AKKyAg ICAgICAgICAgICAgICAgICAgIC0+ICBIYXNoQWdncmVnYXRlCisgICAgICAgICAgICAgICAg ICAgICAgICAgICBHcm91cCBLZXk6IHNqX3QzLmlkCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAtPiAgTmVzdGVkIExvb3AKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IC0+ICBTZXEgU2NhbiBvbiBzal90NAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLT4gIE1hdGVyaWFsaXplCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAtPiAgQml0bWFwIEhlYXAgU2NhbiBvbiBzal90MworICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVjaGVjayBDb25kOiAoYSA9IDEpCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgQml0bWFwIElu ZGV4IFNjYW4gb24gc2pfdDNfYV9pZF9pZHgKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4IENvbmQ6IChhID0gMSkKKyAgICAgICAg ICAgICAgICAgICAgIC0+ICBJbmRleCBPbmx5IFNjYW4gdXNpbmcgc2pfdDJfaWRfaWR4IG9u IHNqX3QyIHNqX3QyXzEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4IENvbmQ6 IChpZCA9IHNqX3QzLmlkKQorICAgICAgICAgICAgICAgLT4gIE5lc3RlZCBMb29wCisgICAg ICAgICAgICAgICAgICAgICAtPiAgSW5kZXggT25seSBTY2FuIHVzaW5nIHNqX3QzX2FfaWRf aWR4IG9uIHNqX3QzIHNqX3QzXzEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4 IENvbmQ6ICgoYSA9IDEpIEFORCAoaWQgPSBzal90My5pZCkpCisgICAgICAgICAgICAgICAg ICAgICAtPiAgU2VxIFNjYW4gb24gc2pfdDQgc2pfdDRfMQorICAgICAgICAgLT4gIEluZGV4 IE9ubHkgU2NhbiB1c2luZyBzal90Ml9pZF9pZHggb24gc2pfdDIKKyAgICAgICAgICAgICAg IEluZGV4IENvbmQ6IChpZCA9IHNqX3QyXzEuaWQpCisgICAtPiAgU2VxIFNjYW4gb24gc2pf dDEKKygyNCByb3dzKQorCistLQorLS0gVGVzdCBSb3dNYXJrcy1yZWxhdGVkIGNvZGUKKy0t CistLSBCb3RoIHNpZGVzIGhhdmUgZXhwbGljaXQgTG9ja1Jvd3MgbWFya3MKK0VYUExBSU4g KENPU1RTIE9GRikKK1NFTEVDVCBhMS5hIEZST00gc2ogYTEsc2ogYTIgV0hFUkUgKGExLmE9 YTIuYSkgRk9SIFVQREFURTsKKyAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgIAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTG9ja1Jvd3MKKyAgIC0+ICBT ZXEgU2NhbiBvbiBzaiBhMgorICAgICAgICAgRmlsdGVyOiAoYSBJUyBOT1QgTlVMTCkKKygz IHJvd3MpCisKK3Jlc2V0IGVuYWJsZV9oYXNoam9pbjsKK3Jlc2V0IGVuYWJsZV9tZXJnZWpv aW47CiAtLQogLS0gVGVzdCBoaW50cyBnaXZlbiBvbiBpbmNvcnJlY3QgY29sdW1uIHJlZmVy ZW5jZXMgYXJlIHVzZWZ1bAogLS0KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhw ZWN0ZWQvc3lzdmlld3Mub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zeXN2aWV3 cy5vdXQKaW5kZXggZGJmZDBjMTNkNC4uMmYzZWI0ZTdmMSAxMDA2NDQKLS0tIGEvc3JjL3Rl c3QvcmVncmVzcy9leHBlY3RlZC9zeXN2aWV3cy5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVz cy9leHBlY3RlZC9zeXN2aWV3cy5vdXQKQEAgLTE1MywxMCArMTUzLDExIEBAIHNlbGVjdCBu YW1lLCBzZXR0aW5nIGZyb20gcGdfc2V0dGluZ3Mgd2hlcmUgbmFtZSBsaWtlICdlbmFibGUl JzsKICBlbmFibGVfcGFydGl0aW9ud2lzZV9hZ2dyZWdhdGUgfCBvZmYKICBlbmFibGVfcGFy dGl0aW9ud2lzZV9qb2luICAgICAgfCBvZmYKICBlbmFibGVfcHJlc29ydGVkX2FnZ3JlZ2F0 ZSAgICAgfCBvbgorIGVuYWJsZV9zZWxmX2pvaW5fcmVtb3ZhbCAgICAgICB8IG9uCiAgZW5h YmxlX3NlcXNjYW4gICAgICAgICAgICAgICAgIHwgb24KICBlbmFibGVfc29ydCAgICAgICAg ICAgICAgICAgICAgfCBvbgogIGVuYWJsZV90aWRzY2FuICAgICAgICAgICAgICAgICB8IG9u Ci0oMjIgcm93cykKKygyMyByb3dzKQogCiAtLSBUaGVyZSBhcmUgYWx3YXlzIHdhaXQgZXZl bnQgZGVzY3JpcHRpb25zIGZvciB2YXJpb3VzIHR5cGVzLgogc2VsZWN0IHR5cGUsIGNvdW50 KCopID4gMCBhcyBvayBGUk9NIHBnX3dhaXRfZXZlbnRzCmRpZmYgLS1naXQgYS9zcmMvdGVz dC9yZWdyZXNzL3NxbC9lcXVpdmNsYXNzLnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2Vx dWl2Y2xhc3Muc3FsCmluZGV4IDI0N2IwYTMxMDUuLjc3ZGQ5NjRlYmYgMTAwNjQ0Ci0tLSBh L3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2VxdWl2Y2xhc3Muc3FsCisrKyBiL3NyYy90ZXN0L3Jl Z3Jlc3Mvc3FsL2VxdWl2Y2xhc3Muc3FsCkBAIC0yNTksNiArMjU5LDIyIEBAIGRyb3AgdXNl ciByZWdyZXNzX3VzZXJfZWN0ZXN0OwogZXhwbGFpbiAoY29zdHMgb2ZmKQogICBzZWxlY3Qg KiBmcm9tIHRlbmsxIHdoZXJlIHVuaXF1ZTEgPSB1bmlxdWUxIGFuZCB1bmlxdWUyID0gdW5p cXVlMjsKIAorLS0gVGVzdCB0aGF0IGJyb2tlbiBFQ3MgYXJlIHByb2Nlc3NlZCBjb3JyZWN0 bHkgZHVyaW5nIHNlbGYgam9pbiByZW1vdmFsLgorLS0gRGlzYWJsZSBtZXJnZSBqb2lucyBz byB0aGF0IHdlIGRvbid0IGdldCBhbiBlcnJvciBhYm91dCBtaXNzaW5nIGNvbW11dGF0b3Iu CistLSBUZXN0IGJvdGggb3JpZW50YXRpb25zIG9mIHRoZSBqb2luIGNsYXVzZSwgYmVjYXVz ZSBvbmx5IG9uZSBvZiB0aGVtIGJyZWFrcworLS0gdGhlIEVDLgorc2V0IGVuYWJsZV9tZXJn ZWpvaW4gdG8gb2ZmOworCitleHBsYWluIChjb3N0cyBvZmYpCisgIHNlbGVjdCAqIGZyb20g ZWMwIG0gam9pbiBlYzAgbiBvbiBtLmZmID0gbi5mZgorICBqb2luIGVjMSBwIG9uIG0uZmYg KyBuLmZmID0gcC5mMTsKKworZXhwbGFpbiAoY29zdHMgb2ZmKQorICBzZWxlY3QgKiBmcm9t IGVjMCBtIGpvaW4gZWMwIG4gb24gbS5mZiA9IG4uZmYKKyAgam9pbiBlYzEgcCBvbiBwLmYx OjppbnQ4ID0gKG0uZmYgKyBuLmZmKTo6aW50OGFsaWFzMTsKKworcmVzZXQgZW5hYmxlX21l cmdlam9pbjsKKwogLS0gdGhpcyBjb3VsZCBiZSBjb252ZXJ0ZWQsIGJ1dCBpc24ndCBhdCBw cmVzZW50CiBleHBsYWluIChjb3N0cyBvZmYpCiAgIHNlbGVjdCAqIGZyb20gdGVuazEgd2hl cmUgdW5pcXVlMSA9IHVuaXF1ZTEgb3IgdW5pcXVlMiA9IHVuaXF1ZTI7CmRpZmYgLS1naXQg YS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9qb2luLnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3Fs L2pvaW4uc3FsCmluZGV4IDhiZmUzYjdiYTYuLjBjYzZjNjkyMmMgMTAwNjQ0Ci0tLSBhL3Ny Yy90ZXN0L3JlZ3Jlc3Mvc3FsL2pvaW4uc3FsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3Fs L2pvaW4uc3FsCkBAIC0yMzIxLDYgKzIzMjEsNDkyIEBAIHNlbGVjdCAqIGZyb20KIHNlbGVj dCAqIGZyb20KICAgaW50OF90YmwgeCBqb2luIChpbnQ0X3RibCB4IGNyb3NzIGpvaW4gaW50 NF90YmwgeShmZikpIGogb24gcTEgPSBmMTsgLS0gb2sKIAorLS0KKy0tIHRlc3QgdGhhdCBz ZW1pLSBvciBpbm5lciBzZWxmLWpvaW5zIG9uIGEgdW5pcXVlIGNvbHVtbiBhcmUgcmVtb3Zl ZAorLS0KKworLS0gZW5hYmxlIG9ubHkgbmVzdGxvb3AgdG8gZ2V0IG1vcmUgcHJlZGljdGFi bGUgcGxhbnMKK3NldCBlbmFibGVfaGFzaGpvaW4gdG8gb2ZmOworc2V0IGVuYWJsZV9tZXJn ZWpvaW4gdG8gb2ZmOworCitjcmVhdGUgdGFibGUgc2ogKGEgaW50IHVuaXF1ZSwgYiBpbnQs IGMgaW50IHVuaXF1ZSk7CitpbnNlcnQgaW50byBzaiB2YWx1ZXMgKDEsIG51bGwsIDIpLCAo bnVsbCwgMiwgbnVsbCksICgyLCAxLCAxKTsKK2FuYWx5emUgc2o7CisKKy0tIFRyaXZpYWwg c2VsZi1qb2luIGNhc2UuCitleHBsYWluIChjb3N0cyBvZmYpCitzZWxlY3QgcC4qIGZyb20g c2ogcCwgc2ogcSB3aGVyZSBxLmEgPSBwLmEgYW5kIHEuYiA9IHEuYSAtIDE7CitzZWxlY3Qg cC4qIGZyb20gc2ogcCwgc2ogcSB3aGVyZSBxLmEgPSBwLmEgYW5kIHEuYiA9IHEuYSAtIDE7 CisKKy0tIFNlbGYtam9pbiByZW1vdmFsIHBlcmZvcm1zIGFmdGVyIGEgc3VicXVlcnkgcHVs bC11cCBwcm9jZXNzIGFuZCBjb3VsZCByZW1vdmUKKy0tIHN1Y2gga2luZCBvZiBzZWxmLWpv aW4gdG9vLiBDaGVjayB0aGlzIG9wdGlvbi4KK2V4cGxhaW4gKGNvc3RzIG9mZikKK3NlbGVj dCAqIGZyb20gc2ogcAord2hlcmUgZXhpc3RzIChzZWxlY3QgKiBmcm9tIHNqIHEKKyAgICAg ICAgICAgICAgd2hlcmUgcS5hID0gcC5hIGFuZCBxLmIgPCAxMCk7CitzZWxlY3QgKiBmcm9t IHNqIHAKK3doZXJlIGV4aXN0cyAoc2VsZWN0ICogZnJvbSBzaiBxCisgICAgICAgICAgICAg IHdoZXJlIHEuYSA9IHAuYSBhbmQgcS5iIDwgMTApOworCistLSBEb24ndCByZW1vdmUgc2Vs Zi1qb2luIGZvciB0aGUgY2FzZSBvZiBlcXVhbGl0eSBvZiB0d28gZGlmZmVyZW50IHVuaXF1 ZSBjb2x1bW5zLgorZXhwbGFpbiAoY29zdHMgb2ZmKQorc2VsZWN0ICogZnJvbSBzaiB0MSwg c2ogdDIgd2hlcmUgdDEuYSA9IHQyLmMgYW5kIHQxLmIgaXMgbm90IG51bGw7CisKKy0tIEVu c3VyZSB0aGF0IHJlbGF0aW9ucyB3aXRoIFRBQkxFU0FNUExFIGNsYXVzZXMgYXJlIG5vdCBj b25zaWRlcmVkIGFzCistLSBjYW5kaWRhdGVzIHRvIGJlIHJlbW92ZWQKK2V4cGxhaW4gKGNv c3RzIG9mZikKK3NlbGVjdCAqIGZyb20gc2ogdDEKKyAgICBqb2luIGxhdGVyYWwKKyAgICAg IChzZWxlY3QgKiBmcm9tIHNqIHRhYmxlc2FtcGxlIHN5c3RlbSh0MS5iKSkgcworICAgIG9u IHQxLmEgPSBzLmE7CisKKy0tIEVuc3VyZSB0aGF0IFNKRSBkb2VzIG5vdCBmb3JtIGEgc2Vs Zi1yZWZlcmVudGlhbCBsYXRlcmFsIGRlcGVuZGVuY3kKK2V4cGxhaW4gKGNvc3RzIG9mZikK K3NlbGVjdCAqIGZyb20gc2ogdDEKKyAgICBsZWZ0IGpvaW4gbGF0ZXJhbAorICAgICAgKHNl bGVjdCB0MS5hIGFzIHQxYSwgKiBmcm9tIHNqIHQyKSBzCisgICAgb24gdHJ1ZQord2hlcmUg dDEuYSA9IHMuYTsKKworLS0gRGVnZW5lcmF0ZWQgY2FzZS4KK2V4cGxhaW4gKGNvc3RzIG9m ZikKK3NlbGVjdCAqIGZyb20KKyAgKHNlbGVjdCBhIGFzIHggZnJvbSBzaiB3aGVyZSBmYWxz ZSkgYXMgcTEsCisgIChzZWxlY3QgYSBhcyB5IGZyb20gc2ogd2hlcmUgZmFsc2UpIGFzIHEy Cit3aGVyZSBxMS54ID0gcTIueTsKKworLS0gV2UgY2FuJ3QgdXNlIGEgY3Jvc3MtRUMgZ2Vu ZXJhdGVkIHNlbGYgam9pbiBxdWFsIGJlY2F1c2Ugb2YgY3VycmVudCBsb2dpYyBvZgorLS0g dGhlIGdlbmVyYXRlX2pvaW5faW1wbGllZF9lcXVhbGl0aWVzIHJvdXRpbmUuCitleHBsYWlu IChjb3N0cyBvZmYpCitzZWxlY3QgKiBmcm9tIHNqIHQxLCBzaiB0MiB3aGVyZSB0MS5hID0g dDEuYiBhbmQgdDEuYiA9IHQyLmIgYW5kIHQyLmIgPSB0Mi5hOworZXhwbGFpbiAoY29zdHMg b2ZmKQorc2VsZWN0ICogZnJvbSBzaiB0MSwgc2ogdDIsIHNqIHQzCit3aGVyZSB0MS5hID0g dDEuYiBhbmQgdDEuYiA9IHQyLmIgYW5kIHQyLmIgPSB0Mi5hIGFuZAorICAgICAgdDEuYiA9 IHQzLmIgYW5kIHQzLmIgPSB0My5hOworCistLSBEb3VibGUgc2VsZi1qb2luIHJlbW92YWwu CistLSBVc2UgYSBjb25kaXRpb24gb24gImIgKyAxIiwgbm90IG9uICJiIiwgZm9yIHRoZSBz ZWNvbmQgam9pbiwgc28gdGhhdAorLS0gdGhlIGVxdWl2YWxlbmNlIGNsYXNzIGlzIGRpZmZl cmVudCBmcm9tIHRoZSBmaXJzdCBvbmUsIGFuZCB3ZSBjYW4KKy0tIHRlc3QgdGhlIG5vbi1l YyBjb2RlIHBhdGguCitleHBsYWluIChjb3N0cyBvZmYpCitzZWxlY3QgKgorZnJvbSAgc2og dDEKKyAgICAgIGpvaW4gc2ogdDIgb24gdDEuYSA9IHQyLmEgYW5kIHQxLmIgPSB0Mi5iCisJ ICBqb2luIHNqIHQzIG9uIHQyLmEgPSB0My5hIGFuZCB0Mi5iICsgMSA9IHQzLmIgKyAxOwor CistLSBzdWJzZWxlY3QgdGhhdCByZWZlcmVuY2VzIHRoZSByZW1vdmVkIHJlbGF0aW9uCitl eHBsYWluIChjb3N0cyBvZmYpCitzZWxlY3QgdDEuYSwgKHNlbGVjdCBhIGZyb20gc2ogd2hl cmUgYSA9IHQyLmEgYW5kIGEgPSB0MS5hKQorZnJvbSBzaiB0MSwgc2ogdDIKK3doZXJlIHQx LmEgPSB0Mi5hOworCistLSBzZWxmLWpvaW4gdW5kZXIgb3V0ZXIgam9pbgorZXhwbGFpbiAo Y29zdHMgb2ZmKQorc2VsZWN0ICogZnJvbSBzaiB4IGpvaW4gc2ogeSBvbiB4LmEgPSB5LmEK K2xlZnQgam9pbiBpbnQ4X3RibCB6IG9uIHguYSA9IHoucTE7CisKK2V4cGxhaW4gKGNvc3Rz IG9mZikKK3NlbGVjdCAqIGZyb20gc2ogeCBqb2luIHNqIHkgb24geC5hID0geS5hCitsZWZ0 IGpvaW4gaW50OF90YmwgeiBvbiB5LmEgPSB6LnExOworCitleHBsYWluIChjb3N0cyBvZmYp CitzZWxlY3QgKiBmcm9tICgKKyAgc2VsZWN0IHQxLiosIHQyLmEgYXMgYXggZnJvbSBzaiB0 MSBqb2luIHNqIHQyCisgIG9uICh0MS5hID0gdDIuYSBhbmQgdDEuYyAqIHQxLmMgPSB0Mi5j ICsgMiBhbmQgdDIuYiBpcyBudWxsKQorKSBhcyBxMQorbGVmdCBqb2luCisgIChzZWxlY3Qg dDMuKiBmcm9tIHNqIHQzLCBzaiB0NCB3aGVyZSB0My5jID0gdDQuYykgYXMgcTIKK29uIHEx LmF4ID0gcTIuYTsKKworLS0gVGVzdCB0aGF0IHBsYWNlaG9sZGVycyBhcmUgdXBkYXRlZCBj b3JyZWN0bHkgYWZ0ZXIgam9pbiByZW1vdmFsCitleHBsYWluIChjb3N0cyBvZmYpCitzZWxl Y3QgKiBmcm9tICh2YWx1ZXMgKDEpKSB4CitsZWZ0IGpvaW4gKHNlbGVjdCBjb2FsZXNjZSh5 LnExLCAxKSBmcm9tIGludDhfdGJsIHkKKwlyaWdodCBqb2luIHNqIGoxIGlubmVyIGpvaW4g c2ogajIgb24gajEuYSA9IGoyLmEKKwlvbiB0cnVlKSB6CitvbiB0cnVlOworCistLSBUZXN0 IHRoYXQgcmVmZXJlbmNlcyB0byB0aGUgcmVtb3ZlZCByZWwgaW4gbGF0ZXJhbCBzdWJxdWVy aWVzIGFyZSByZXBsYWNlZAorLS0gY29ycmVjdGx5IGFmdGVyIGpvaW4gcmVtb3ZhbAorZXhw bGFpbiAodmVyYm9zZSwgY29zdHMgb2ZmKQorc2VsZWN0IHQzLmEgZnJvbSBzaiB0MQorCWpv aW4gc2ogdDIgb24gdDEuYSA9IHQyLmEKKwlqb2luIGxhdGVyYWwgKHNlbGVjdCB0MS5hIG9m ZnNldCAwKSB0MyBvbiB0cnVlOworCitleHBsYWluICh2ZXJib3NlLCBjb3N0cyBvZmYpCitz ZWxlY3QgdDMuYSBmcm9tIHNqIHQxCisJam9pbiBzaiB0MiBvbiB0MS5hID0gdDIuYQorCWpv aW4gbGF0ZXJhbCAoc2VsZWN0ICogZnJvbSAoc2VsZWN0IHQxLmEgb2Zmc2V0IDApIG9mZnNl dCAwKSB0MyBvbiB0cnVlOworCitleHBsYWluICh2ZXJib3NlLCBjb3N0cyBvZmYpCitzZWxl Y3QgdDQuYSBmcm9tIHNqIHQxCisJam9pbiBzaiB0MiBvbiB0MS5hID0gdDIuYQorCWpvaW4g bGF0ZXJhbCAoc2VsZWN0IHQzLmEgZnJvbSBzaiB0MywgKHNlbGVjdCB0MS5hKSBvZmZzZXQg MCkgdDQgb24gdHJ1ZTsKKworLS0gQ2hlY2sgdXBkYXRpbmcgb2YgTGF0ZXJhbCBsaW5rcyBm cm9tIHRvcC1sZXZlbCBxdWVyeSB0byB0aGUgcmVtb3ZpbmcgcmVsYXRpb24KK2V4cGxhaW4g KENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gcGdfYW0gYW0gV0hFUkUgYW0uYW1uYW1lIElO ICgKKyAgU0VMRUNUIGMxLnJlbG5hbWUgQVMgcmVsbmFtZQorICBGUk9NIHBnX2NsYXNzIGMx CisgICAgSk9JTiBwZ19jbGFzcyBjMgorICAgIE9OIGMxLm9pZD1jMi5vaWQgQU5EIGMxLm9p ZCA8IDEwCispOworCistLQorLS0gU0pFIGNvcm5lciBjYXNlOiB1bmlxdWVuZXNzIG9mIGFu IGlubmVyIGlzIFtwYXJ0aWFsbHldIGRlcml2ZWQgZnJvbQorLS0gYmFzZXJlc3RyaWN0aW5m byBjbGF1c2VzLgorLS0gWFhYOiBXZSByZWFsbHkgc2hvdWxkIGFsbG93IFNKRSBmb3IgdGhl c2UgY29ybmVyIGNhc2VzPworLS0KKworSU5TRVJUIElOVE8gc2ogVkFMVUVTICgzLCAxLCAz KTsKKworLS0gRG9uJ3QgcmVtb3ZlIFNKCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1Qg KiBGUk9NIHNqIGoxLCBzaiBqMiBXSEVSRSBqMS5iID0gajIuYiBBTkQgajEuYSA9IDIgQU5E IGoyLmEgPSAzOworLS0gUmV0dXJuIG9uZSByb3cKK1NFTEVDVCAqIEZST00gc2ogajEsIHNq IGoyIFdIRVJFIGoxLmIgPSBqMi5iIEFORCBqMS5hID0gMiBBTkQgajIuYSA9IDM7CisKKy0t IFJlbW92ZSBTSiwgZGVmaW5lIHVuaXF1ZW5lc3MgYnkgYSBjb25zdGFudAorRVhQTEFJTiAo Q09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBzaiBqMSwgc2ogajIgV0hFUkUgajEuYiA9IGoy LmIgQU5EIGoxLmEgPSAyIEFORCBqMi5hID0gMjsKKy0tIFJldHVybiBvbmUgcm93CitTRUxF Q1QgKiBGUk9NIHNqIGoxLCBzaiBqMiBXSEVSRSBqMS5iID0gajIuYiBBTkQgajEuYSA9IDIg QU5EIGoyLmEgPSAyOworCistLSBSZW1vdmUgU0osIGRlZmluZSB1bmlxdWVuZXNzIGJ5IGEg Y29uc3RhbnQgZXhwcmVzc2lvbgorRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUICogRlJP TSBzaiBqMSwgc2ogajIKK1dIRVJFIGoxLmIgPSBqMi5iCisgIEFORCBqMS5hID0gKEVYVFJB Q1QoRE9XIEZST00gY3VycmVudF90aW1lc3RhbXAoMCkpLzE1ICsgMyk6OmludAorICBBTkQg KEVYVFJBQ1QoRE9XIEZST00gY3VycmVudF90aW1lc3RhbXAoMCkpLzE1ICsgMyk6OmludCA9 IGoyLmE7CistLSBSZXR1cm4gb25lIHJvdworU0VMRUNUICogRlJPTSBzaiBqMSwgc2ogajIK K1dIRVJFIGoxLmIgPSBqMi5iCisgIEFORCBqMS5hID0gKEVYVFJBQ1QoRE9XIEZST00gY3Vy cmVudF90aW1lc3RhbXAoMCkpLzE1ICsgMyk6OmludAorICBBTkQgKEVYVFJBQ1QoRE9XIEZS T00gY3VycmVudF90aW1lc3RhbXAoMCkpLzE1ICsgMyk6OmludCA9IGoyLmE7CisKKy0tIFJl bW92ZSBTSgorRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBzaiBqMSwgc2og ajIgV0hFUkUgajEuYiA9IGoyLmIgQU5EIGoxLmEgPSAxIEFORCBqMi5hID0gMTsKKy0tIFJl dHVybiBubyByb3dzCitTRUxFQ1QgKiBGUk9NIHNqIGoxLCBzaiBqMiBXSEVSRSBqMS5iID0g ajIuYiBBTkQgajEuYSA9IDEgQU5EIGoyLmEgPSAxOworCistLSBTaHVmZmxlIGEgY2xhdXNl LiBSZW1vdmUgU0oKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gc2ogajEs IHNqIGoyIFdIRVJFIGoxLmIgPSBqMi5iIEFORCAxID0gajEuYSBBTkQgajIuYSA9IDE7Cist LSBSZXR1cm4gbm8gcm93cworU0VMRUNUICogRlJPTSBzaiBqMSwgc2ogajIgV0hFUkUgajEu YiA9IGoyLmIgQU5EIDEgPSBqMS5hIEFORCBqMi5hID0gMTsKKworLS0gU0pFIENvcm5lciBj YXNlOiBhICdhLng9YS54JyBjbGF1c2UsIGhhdmUgcmVwbGFjZWQgd2l0aCAnYS54IElTIE5P VCBOVUxMJworLS0gYWZ0ZXIgU0ogZWxpbWluYXRpb24gaXQgc2hvdWxkbid0IGJlIGEgbWVy Z2Vqb2luYWJsZSBjbGF1c2UuCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgdDQuKgor RlJPTSAoU0VMRUNUIHQxLiosIHQyLmEgQVMgYTEgRlJPTSBzaiB0MSwgc2ogdDIgV0hFUkUg dDEuYiA9IHQyLmIpIEFTIHQzCitKT0lOIHNqIHQ0IE9OICh0NC5hID0gdDMuYSkgV0hFUkUg dDMuYTEgPSA0MjsKK1NFTEVDVCB0NC4qCitGUk9NIChTRUxFQ1QgdDEuKiwgdDIuYSBBUyBh MSBGUk9NIHNqIHQxLCBzaiB0MiBXSEVSRSB0MS5iID0gdDIuYikgQVMgdDMKK0pPSU4gc2og dDQgT04gKHQ0LmEgPSB0My5hKSBXSEVSRSB0My5hMSA9IDQyOworCistLSBGdW5jdGlvbmFs IGluZGV4CitDUkVBVEUgVU5JUVVFIElOREVYIHNqX2ZuX2lkeCBPTiBzaigoYSAqIGEpKTsK KworLS0gUmVtb3ZlIFNKCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIHNq IGoxLCBzaiBqMgorCVdIRVJFIGoxLmIgPSBqMi5iIEFORCBqMS5hKmoxLmEgPSAxIEFORCBq Mi5hKmoyLmEgPSAxOworLS0gRG9uJ3QgcmVtb3ZlIFNKCitFWFBMQUlOIChDT1NUUyBPRkYp CitTRUxFQ1QgKiBGUk9NIHNqIGoxLCBzaiBqMgorCVdIRVJFIGoxLmIgPSBqMi5iIEFORCBq MS5hKmoxLmEgPSAxIEFORCBqMi5hKmoyLmEgPSAyOworCistLSBSZXN0cmljdGlvbiBjb250 YWlucyBleHByZXNzaW9ucyBpbiBib3RoIHNpZGVzLCBSZW1vdmUgU0ouCitFWFBMQUlOIChD T1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIHNqIGoxLCBzaiBqMgorV0hFUkUgajEuYiA9IGoy LmIKKyAgQU5EIChqMS5hKmoxLmEpID0gKEVYVFJBQ1QoRE9XIEZST00gY3VycmVudF90aW1l c3RhbXAoMCkpLzE1ICsgMyk6OmludAorICBBTkQgKEVYVFJBQ1QoRE9XIEZST00gY3VycmVu dF90aW1lc3RhbXAoMCkpLzE1ICsgMyk6OmludCA9IChqMi5hKmoyLmEpOworLS0gRW1wdHkg c2V0IG9mIHJvd3Mgc2hvdWxkIGJlIHJldHVybmVkCitTRUxFQ1QgKiBGUk9NIHNqIGoxLCBz aiBqMgorV0hFUkUgajEuYiA9IGoyLmIKKyAgQU5EIChqMS5hKmoxLmEpID0gKEVYVFJBQ1Qo RE9XIEZST00gY3VycmVudF90aW1lc3RhbXAoMCkpLzE1ICsgMyk6OmludAorICBBTkQgKEVY VFJBQ1QoRE9XIEZST00gY3VycmVudF90aW1lc3RhbXAoMCkpLzE1ICsgMyk6OmludCA9IChq Mi5hKmoyLmEpOworCistLSBSZXN0cmljdGlvbiBjb250YWlucyB2b2xhdGlsZSBmdW5jdGlv biAtIGRpc2FibGUgU0pFIGZlYXR1cmUuCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1Qg KiBGUk9NIHNqIGoxLCBzaiBqMgorV0hFUkUgajEuYiA9IGoyLmIKKyAgQU5EIChqMS5hKmox LmMvMykgPSAocmFuZG9tKCkvMyArIDMpOjppbnQKKyAgQU5EIChyYW5kb20oKS8zICsgMyk6 OmludCA9IChqMi5hKmoyLmMvMyk7CistLSBSZXR1cm4gb25lIHJvdworU0VMRUNUICogRlJP TSBzaiBqMSwgc2ogajIKK1dIRVJFIGoxLmIgPSBqMi5iCisgIEFORCAoajEuYSpqMS5jLzMp ID0gKHJhbmRvbSgpLzMgKyAzKTo6aW50CisgIEFORCAocmFuZG9tKCkvMyArIDMpOjppbnQg PSAoajIuYSpqMi5jLzMpOworCistLSBNdWx0aXBsZSBmaWx0ZXJzCitDUkVBVEUgVU5JUVVF IElOREVYIHNqX3RlbXBfaWR4MSBPTiBzaihhLGIsYyk7CisKKy0tIFJlbW92ZSBTSgorRVhQ TEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBzaiBqMSwgc2ogajIKKwlXSEVSRSBq MS5iID0gajIuYiBBTkQgajEuYSA9IDIgQU5EIGoxLmMgPSAzIEFORCBqMi5hID0gMiBBTkQg MyA9IGoyLmM7CisKKy0tIERvbid0IHJlbW92ZSBTSgorRVhQTEFJTiAoQ09TVFMgT0ZGKQor CVNFTEVDVCAqIEZST00gc2ogajEsIHNqIGoyCisJV0hFUkUgajEuYiA9IGoyLmIgQU5EIDIg PSBqMS5hIEFORCBqMS5jID0gMyBBTkQgajIuYSA9IDEgQU5EIDMgPSBqMi5jOworCitDUkVB VEUgVU5JUVVFIElOREVYIHNqX3RlbXBfaWR4IE9OIHNqKGEsYik7CisKKy0tIERvbid0IHJl bW92ZSBTSgorRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBzaiBqMSwgc2og ajIgV0hFUkUgajEuYiA9IGoyLmIgQU5EIGoxLmEgPSAyOworCistLSBEb24ndCByZW1vdmUg U0oKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gc2ogajEsIHNqIGoyIFdI RVJFIGoxLmIgPSBqMi5iIEFORCAyID0gajIuYTsKKworLS0gRG9uJ3QgcmVtb3ZlIFNKCitF WFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIHNqIGoxLCBzaiBqMiBXSEVSRSBq MS5iID0gajIuYiBBTkQgKGoxLmEgPSAxIE9SIGoyLmEgPSAxKTsKKworRFJPUCBJTkRFWCBz al9mbl9pZHgsIHNqX3RlbXBfaWR4MSwgc2pfdGVtcF9pZHg7CisKKy0tIFRlc3QgdGhhdCBP UiBwcmVkaWNhdGVkIGFyZSB1cGRhdGVkIGNvcnJlY3RseSBhZnRlciBqb2luIHJlbW92YWwK K0NSRUFURSBUQUJMRSB0YWJfd2l0aF9mbGFnICggaWQgSU5UIFBSSU1BUlkgS0VZLCBpc19m bGFnIFNNQUxMSU5UKTsKK0NSRUFURSBJTkRFWCBpZHhfdGVzdF9pc19mbGFnIE9OIHRhYl93 aXRoX2ZsYWcgKGlzX2ZsYWcpOworCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgQ09V TlQoKikgRlJPTSB0YWJfd2l0aF9mbGFnCitXSEVSRQorCShpc19mbGFnIElTIE5VTEwgT1Ig aXNfZmxhZyA9IDApCisJQU5EIGlkIElOIChTRUxFQ1QgaWQgRlJPTSB0YWJfd2l0aF9mbGFn IFdIRVJFIGlkIElOICgyLCAzKSk7CitEUk9QIFRBQkxFIHRhYl93aXRoX2ZsYWc7CisKKy0t IEhBVklORyBjbGF1c2UKK2V4cGxhaW4gKGNvc3RzIG9mZikKK3NlbGVjdCBwLmIgZnJvbSBz aiBwIGpvaW4gc2ogcSBvbiBwLmEgPSBxLmEgZ3JvdXAgYnkgcC5iIGhhdmluZyBzdW0ocC5h KSA9IDE7CisKKy0tIHVwZGF0ZSBsYXRlcmFsIHJlZmVyZW5jZXMgYW5kIHJhbmdlIHRhYmxl IGVudHJ5IHJlZmVyZW5jZQorZXhwbGFpbiAodmVyYm9zZSwgY29zdHMgb2ZmKQorc2VsZWN0 IDEgZnJvbSAoc2VsZWN0IHguKiBmcm9tIHNqIHgsIHNqIHkgd2hlcmUgeC5hID0geS5hKSBx LAorICBsYXRlcmFsIGdlbmVyYXRlX3NlcmllcygxLCBxLmEpIGdzKGkpOworCitleHBsYWlu ICh2ZXJib3NlLCBjb3N0cyBvZmYpCitzZWxlY3QgMSBmcm9tIChzZWxlY3QgeS4qIGZyb20g c2ogeCwgc2ogeSB3aGVyZSB4LmEgPSB5LmEpIHEsCisgIGxhdGVyYWwgZ2VuZXJhdGVfc2Vy aWVzKDEsIHEuYSkgZ3MoaSk7CisKKy0tIFRlc3QgdGhhdCBhIG5vbi1FQy1kZXJpdmVkIGpv aW4gY2xhdXNlIGlzIHByb2Nlc3NlZCBjb3JyZWN0bHkuIFVzZSBhbgorLS0gb3V0ZXIgam9p biBzbyB0aGF0IHdlIGNhbid0IGZvcm0gYW4gRUMuCitleHBsYWluIChjb3N0cyBvZmYpIHNl bGVjdCAqIGZyb20gc2ogcCBqb2luIHNqIHEgb24gcC5hID0gcS5hCisgIGxlZnQgam9pbiBz aiByIG9uIHAuYSArIHEuYSA9IHIuYTsKKworLS0gRklYTUUgdGhpcyBjb25zdGFudCBmYWxz ZSBmaWx0ZXIgZG9lc24ndCBsb29rIGdvb2QuIFNob3VsZCB3ZSBtZXJnZQorLS0gZXF1aXZh bGVuY2UgY2xhc3Nlcz8KK2V4cGxhaW4gKGNvc3RzIG9mZikKK3NlbGVjdCAqIGZyb20gc2og cCwgc2ogcSB3aGVyZSBwLmEgPSBxLmEgYW5kIHAuYiA9IDEgYW5kIHEuYiA9IDI7CisKKy0t IENoZWNrIHRoYXQgYXR0cl9uZWVkZWQgaXMgdXBkYXRlZCBjb3JyZWN0bHkgYWZ0ZXIgc2Vs Zi1qb2luIHJlbW92YWwuIEluIHRoaXMKKy0tIHRlc3QsIHRoZSBqb2luIG9mIGoxIHdpdGgg ajIgaXMgcmVtb3ZlZC4gazEuYiBpcyByZXF1aXJlZCBhdCBlaXRoZXIgajEgb3IgajIuCist LSBJZiB0aGlzIGluZm8gaXMgbG9zdCwgam9pbiB0YXJnZXRsaXN0IGZvciAoazEsIGsyKSB3 aWxsIG5vdCBjb250YWluIGsxLmIuCistLSBVc2UgaW5kZXggc2NhbiBmb3IgazEgc28gdGhh dCB3ZSBkb24ndCBnZXQgJ2InIGZyb20gcGh5c2ljYWwgdGxpc3QgdXNlZCBmb3IKKy0tIHNl cXNjYW4uIEFsc28gZGlzYWJsZSByZW9yZGVyaW5nIG9mIGpvaW5zIGJlY2F1c2UgdGhpcyB0 ZXN0IGRlcGVuZHMgb24gYQorLS0gcGFydGljdWxhciBqb2luIHRyZWUuCitjcmVhdGUgdGFi bGUgc2sgKGEgaW50LCBiIGludCk7CitjcmVhdGUgaW5kZXggb24gc2soYSk7CitzZXQgam9p bl9jb2xsYXBzZV9saW1pdCB0byAxOworc2V0IGVuYWJsZV9zZXFzY2FuIHRvIG9mZjsKK2V4 cGxhaW4gKGNvc3RzIG9mZikgc2VsZWN0IDEgZnJvbQorCShzayBrMSBqb2luIHNrIGsyIG9u IGsxLmEgPSBrMi5hKQorCWpvaW4gKHNqIGoxIGpvaW4gc2ogajIgb24gajEuYSA9IGoyLmEp IG9uIGoxLmIgPSBrMS5iOworZXhwbGFpbiAoY29zdHMgb2ZmKSBzZWxlY3QgMSBmcm9tCisJ KHNrIGsxIGpvaW4gc2sgazIgb24gazEuYSA9IGsyLmEpCisJam9pbiAoc2ogajEgam9pbiBz aiBqMiBvbiBqMS5hID0gajIuYSkgb24gajIuYiA9IGsxLmI7CityZXNldCBqb2luX2NvbGxh cHNlX2xpbWl0OworcmVzZXQgZW5hYmxlX3NlcXNjYW47CisKKy0tIENoZWNrIHRoYXQgY2xh dXNlcyBmcm9tIHRoZSBqb2luIGZpbHRlciBsaXN0IGlzIG5vdCBsb3N0IG9uIHRoZSBzZWxm LWpvaW4gcmVtb3ZhbAorQ1JFQVRFIFRBQkxFIGVtcDEgKGlkIFNFUklBTCBQUklNQVJZIEtF WSBOT1QgTlVMTCwgY29kZSBpbnQpOworRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKQor U0VMRUNUICogRlJPTSBlbXAxIGUxLCBlbXAxIGUyIFdIRVJFIGUxLmlkID0gZTIuaWQgQU5E IGUyLmNvZGUgPD4gZTEuY29kZTsKKworLS0gU2h1ZmZsZSBzZWxmLWpvaW5lZCByZWxhdGlv bnMuIE9ubHkgaW4gdGhlIGNhc2Ugb2YgaXRlcmF0aXZlIGRlbGV0aW9uCistLSBhdHRlbXB0 cyBleHBsYWlucyBvZiB0aGVzZSBxdWVyaWVzIHdpbGwgYmUgaWRlbnRpY2FsLgorQ1JFQVRF IFVOSVFVRSBJTkRFWCBPTiBlbXAxKChpZCppZCkpOworCitFWFBMQUlOIChDT1NUUyBPRkYp CitTRUxFQ1QgY291bnQoKikgRlJPTSBlbXAxIGMxLCBlbXAxIGMyLCBlbXAxIGMzCitXSEVS RSBjMS5pZD1jMi5pZCBBTkQgYzEuaWQqYzIuaWQ9YzMuaWQqYzMuaWQ7CisKK0VYUExBSU4g KENPU1RTIE9GRikKK1NFTEVDVCBjb3VudCgqKSBGUk9NIGVtcDEgYzEsIGVtcDEgYzIsIGVt cDEgYzMKK1dIRVJFIGMxLmlkPWMzLmlkIEFORCBjMS5pZCpjMy5pZD1jMi5pZCpjMi5pZDsK KworRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUIGNvdW50KCopIEZST00gZW1wMSBjMSwg ZW1wMSBjMiwgZW1wMSBjMworV0hFUkUgYzMuaWQ9YzIuaWQgQU5EIGMzLmlkKmMyLmlkPWMx LmlkKmMxLmlkOworCistLSBDaGVjayB0aGUgdXNhZ2Ugb2YgYSBwYXJzZSB0cmVlIGJ5IHRo ZSBzZXQgb3BlcmF0aW9ucyAoYnVnICMxODE3MCkKK0VYUExBSU4gKENPU1RTIE9GRikKK1NF TEVDVCBjMS5jb2RlIEZST00gZW1wMSBjMSBMRUZUIEpPSU4gZW1wMSBjMiBPTiBjMS5pZCA9 IGMyLmlkCitXSEVSRSBjMi5pZCBJUyBOT1QgTlVMTAorRVhDRVBUIEFMTAorU0VMRUNUIGMz LmNvZGUgRlJPTSBlbXAxIGMzOworCistLSBDaGVjayB0aGF0IFNKRSByZW1vdmVzIHJlZmVy ZW5jZXMgZnJvbSBQSFZzIGNvcnJlY3RseQorZXhwbGFpbiAoY29zdHMgb2ZmKQorc2VsZWN0 ICogZnJvbSBlbXAxIHQxIGxlZnQgam9pbgorICAgIChzZWxlY3QgY29hbGVzY2UodDMuY29k ZSwgMSkgZnJvbSBlbXAxIHQyCisgICAgICAgIGxlZnQgam9pbiAoZW1wMSB0MyBqb2luIGVt cDEgdDQgb24gdDMuaWQgPSB0NC5pZCkKKyAgICAgICAgb24gdHJ1ZSkKK29uIHRydWU7CisK Ky0tIENoZWNrIHRoYXQgU0pFIHJlbW92ZXMgdGhlIHdob2xlIFBIVnMgY29ycmVjdGx5Citl eHBsYWluICh2ZXJib3NlLCBjb3N0cyBvZmYpCitzZWxlY3QgMSBmcm9tIGVtcDEgdDEgbGVm dCBqb2luCisgICAgKChzZWxlY3QgMSBhcyB4LCAqIGZyb20gZW1wMSB0MikgczEgaW5uZXIg am9pbgorICAgICAgICAoc2VsZWN0ICogZnJvbSBlbXAxIHQzKSBzMiBvbiBzMS5pZCA9IHMy LmlkKQorICAgIG9uIHRydWUKK3doZXJlIHMxLnggPSAxOworCistLSBDaGVjayB0aGF0IFBI VnMgZG8gbm90IGltcG9zZSBhbnkgY29uc3RyYWludHMgb24gcmVtb3Zpbmcgc2VsZiBqb2lu cworZXhwbGFpbiAodmVyYm9zZSwgY29zdHMgb2ZmKQorc2VsZWN0ICogZnJvbSBlbXAxIHQx IGpvaW4gZW1wMSB0MiBvbiB0MS5pZCA9IHQyLmlkIGxlZnQgam9pbgorICAgIGxhdGVyYWwg KHNlbGVjdCB0MS5pZCBhcyB0MWlkLCAqIGZyb20gZ2VuZXJhdGVfc2VyaWVzKDEsMSkgdDMp IHMgb24gdHJ1ZTsKKworZXhwbGFpbiAodmVyYm9zZSwgY29zdHMgb2ZmKQorc2VsZWN0ICog ZnJvbSBnZW5lcmF0ZV9zZXJpZXMoMSwxMCkgdDEoaWQpIGxlZnQgam9pbgorICAgIGxhdGVy YWwgKHNlbGVjdCB0MS5pZCBhcyB0MWlkLCB0Mi5pZCBmcm9tIGVtcDEgdDIgam9pbiBlbXAx IHQzIG9uIHQyLmlkID0gdDMuaWQpCitvbiB0cnVlOworCistLSBDaGVjayB0aGF0IFNKRSBy ZXBsYWNlcyBqb2luIGNsYXVzZXMgaW52b2x2aW5nIHRoZSByZW1vdmVkIHJlbCBjb3JyZWN0 bHkKK2V4cGxhaW4gKGNvc3RzIG9mZikKK3NlbGVjdCAqIGZyb20gZW1wMSB0MQorICAgaW5u ZXIgam9pbiBlbXAxIHQyIG9uIHQxLmlkID0gdDIuaWQKKyAgICBsZWZ0IGpvaW4gZW1wMSB0 MyBvbiB0MS5pZCA+IDEgYW5kIHQxLmlkIDwgMjsKKworLS0gQ2hlY2sgdGhhdCBTSkUgZG9l c24ndCByZXBsYWNlIHRoZSB0YXJnZXQgcmVsYXRpb24KK0VYUExBSU4gKENPU1RTIE9GRikK K1dJVEggdDEgQVMgKFNFTEVDVCAqIEZST00gZW1wMSkKK1VQREFURSBlbXAxIFNFVCBjb2Rl ID0gdDEuY29kZSArIDEgRlJPTSB0MQorV0hFUkUgdDEuaWQgPSBlbXAxLmlkIFJFVFVSTklO RyBlbXAxLmlkLCBlbXAxLmNvZGUsIHQxLmNvZGU7CisKK0lOU0VSVCBJTlRPIGVtcDEgVkFM VUVTICgxLCAxKSwgKDIsIDEpOworCitXSVRIIHQxIEFTIChTRUxFQ1QgKiBGUk9NIGVtcDEp CitVUERBVEUgZW1wMSBTRVQgY29kZSA9IHQxLmNvZGUgKyAxIEZST00gdDEKK1dIRVJFIHQx LmlkID0gZW1wMS5pZCBSRVRVUk5JTkcgZW1wMS5pZCwgZW1wMS5jb2RlLCB0MS5jb2RlOwor CitUUlVOQ0FURSBlbXAxOworCitFWFBMQUlOIChDT1NUUyBPRkYpCitVUERBVEUgc2ogc3Eg U0VUIGIgPSAxIEZST00gc2ogYXMgc3ogV0hFUkUgc3EuYSA9IHN6LmE7CisKK0NSRUFURSBS VUxFIHNqX2RlbF9ydWxlIEFTIE9OIERFTEVURSBUTyBzagorICBETyBJTlNURUFECisgICAg VVBEQVRFIHNqIFNFVCBhID0gMSBXSEVSRSBhID0gb2xkLmE7CitFWFBMQUlOIChDT1NUUyBP RkYpIERFTEVURSBGUk9NIHNqOworRFJPUCBSVUxFIHNqX2RlbF9ydWxlIE9OIHNqIENBU0NB REU7CisKKy0tIENoZWNrIHRoYXQgU0pFIGRvZXMgbm90IG1pc3Rha2VubHkgb21pdCBxdWFs IGNsYXVzZXMgKGJ1ZyAjMTgxODcpCitpbnNlcnQgaW50byBlbXAxIHZhbHVlcyAoMSwgMSk7 CitleHBsYWluIChjb3N0cyBvZmYpCitzZWxlY3QgMSBmcm9tIGVtcDEgZnVsbCBqb2luCisg ICAgKHNlbGVjdCAqIGZyb20gZW1wMSB0MSBqb2luCisgICAgICAgIGVtcDEgdDIgam9pbiBl bXAxIHQzIG9uIHQyLmlkID0gdDMuaWQKKyAgICAgICAgb24gdHJ1ZQorICAgIHdoZXJlIGZh bHNlKSBzIG9uIHRydWUKK3doZXJlIGZhbHNlOworc2VsZWN0IDEgZnJvbSBlbXAxIGZ1bGwg am9pbgorICAgIChzZWxlY3QgKiBmcm9tIGVtcDEgdDEgam9pbgorICAgICAgICBlbXAxIHQy IGpvaW4gZW1wMSB0MyBvbiB0Mi5pZCA9IHQzLmlkCisgICAgICAgIG9uIHRydWUKKyAgICB3 aGVyZSBmYWxzZSkgcyBvbiB0cnVlCit3aGVyZSBmYWxzZTsKKworLS0gQ2hlY2sgdGhhdCBT SkUgZG9lcyBub3QgbWlzdGFrZW5seSByZS11c2Uga25vd2xlZGdlIG9mIHJlbGF0aW9uIHVu aXF1ZW5lc3MKKy0tIG1hZGUgd2l0aCBkaWZmZXJlbnQgc2V0IG9mIHF1YWxzCitpbnNlcnQg aW50byBlbXAxIHZhbHVlcyAoMiwgMSk7CitleHBsYWluIChjb3N0cyBvZmYpCitzZWxlY3Qg KiBmcm9tIGVtcDEgdDEgd2hlcmUgZXhpc3RzIChzZWxlY3QgKiBmcm9tIGVtcDEgdDIKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIHQyLmlkID0gdDEuY29k ZSBhbmQgdDIuY29kZSA+IDApOworc2VsZWN0ICogZnJvbSBlbXAxIHQxIHdoZXJlIGV4aXN0 cyAoc2VsZWN0ICogZnJvbSBlbXAxIHQyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB3aGVyZSB0Mi5pZCA9IHQxLmNvZGUgYW5kIHQyLmNvZGUgPiAwKTsKKworLS0g V2UgY2FuIHJlbW92ZSB0aGUgam9pbiBldmVuIGlmIHdlIGZpbmQgdGhlIGpvaW4gY2FuJ3Qg ZHVwbGljYXRlIHJvd3MgYW5kCistLSB0aGUgYmFzZSBxdWFscyBvZiBlYWNoIHNpZGUgYXJl IGRpZmZlcmVudC4gIEluIHRoZSBmb2xsb3dpbmcgY2FzZSB3ZSBlbmQgdXAKKy0tIG1vdmlu ZyBxdWFscyBvdmVyIHRvIHMxIHRvIG1ha2UgaXQgc28gaXQgY2FuJ3QgbWF0Y2ggYW55IHJv d3MuCitjcmVhdGUgdGFibGUgc2woYSBpbnQsIGIgaW50LCBjIGludCk7CitjcmVhdGUgdW5p cXVlIGluZGV4IG9uIHNsKGEsIGIpOwordmFjdXVtIGFuYWx5emUgc2w7CisKKy0tIEJvdGgg c2lkZXMgYXJlIHVuaXF1ZSwgYnV0IGJhc2UgcXVhbHMgYXJlIGRpZmZlcmVudAorZXhwbGFp biAoY29zdHMgb2ZmKQorc2VsZWN0ICogZnJvbSBzbCB0MSwgc2wgdDIgd2hlcmUgdDEuYSA9 IHQyLmEgYW5kIHQxLmIgPSAxIGFuZCB0Mi5iID0gMjsKKworLS0gQ2hlY2sgTnVsbFRlc3Qg aW4gYmFzZXJlc3RyaWN0aW5mbyBsaXN0CitleHBsYWluIChjb3N0cyBvZmYpCitzZWxlY3Qg KiBmcm9tIHNsIHQxLCBzbCB0Mgord2hlcmUgdDEuYSA9IHQyLmEgYW5kIHQxLmIgPSAxIGFu ZCB0Mi5iID0gMgorICBhbmQgdDEuYyBJUyBOT1QgTlVMTCBhbmQgdDIuYyBJUyBOT1QgTlVM TAorICBhbmQgdDIuYiBJUyBOT1QgTlVMTCBhbmQgdDEuYiBJUyBOT1QgTlVMTAorICBhbmQg dDEuYSBJUyBOT1QgTlVMTCBhbmQgdDIuYSBJUyBOT1QgTlVMTDsKK2V4cGxhaW4gKHZlcmJv c2UsIGNvc3RzIG9mZikKK3NlbGVjdCAqIGZyb20gc2wgdDEsIHNsIHQyCit3aGVyZSB0MS5i ID0gdDIuYiBhbmQgdDIuYSA9IDMgYW5kIHQxLmEgPSAzCisgIGFuZCB0MS5jIElTIE5PVCBO VUxMIGFuZCB0Mi5jIElTIE5PVCBOVUxMCisgIGFuZCB0Mi5iIElTIE5PVCBOVUxMIGFuZCB0 MS5iIElTIE5PVCBOVUxMCisgIGFuZCB0MS5hIElTIE5PVCBOVUxMIGFuZCB0Mi5hIElTIE5P VCBOVUxMOworCistLSBKb2luIHF1YWwgaXNuJ3QgbWVyZ2Vqb2luYWJsZSwgYnV0IGlubmVy IGlzIHVuaXF1ZS4KK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCBuMi5hIEZST00gc2og bjEsIHNqIG4yIFdIRVJFIG4xLmEgPD4gbjIuYSBBTkQgbjIuYSA9IDE7CisKK0VYUExBSU4g KENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00KKyhTRUxFQ1QgbjIuYSBGUk9NIHNqIG4xLCBz aiBuMiBXSEVSRSBuMS5hIDw+IG4yLmEpIHEwLCBzbAorV0hFUkUgcTAuYSA9IDE7CisKKy0t IENoZWNrIG9wdGltaXphdGlvbiBkaXNhYmxpbmcgaWYgaXQgd2lsbCB2aW9sYXRlIHNwZWNp YWwgam9pbiBjb25kaXRpb25zLgorLS0gVHdvIGlkZW50aWNhbCBqb2luZWQgcmVsYXRpb25z IHNhdGlzZmllcyBzZWxmIGpvaW4gcmVtb3ZhbCBjb25kaXRpb25zIGJ1dAorLS0gc3RheSBp biBkaWZmZXJlbnQgc3BlY2lhbCBqb2luIGluZm9zLgorQ1JFQVRFIFRBQkxFIHNqX3QxIChp ZCBzZXJpYWwsIGEgaW50KTsKK0NSRUFURSBUQUJMRSBzal90MiAoaWQgc2VyaWFsLCBhIGlu dCk7CitDUkVBVEUgVEFCTEUgc2pfdDMgKGlkIHNlcmlhbCwgYSBpbnQpOworQ1JFQVRFIFRB QkxFIHNqX3Q0IChpZCBzZXJpYWwsIGEgaW50KTsKKworQ1JFQVRFIFVOSVFVRSBJTkRFWCBP TiBzal90MyBVU0lORyBidHJlZSAoYSxpZCk7CitDUkVBVEUgVU5JUVVFIElOREVYIE9OIHNq X3QyIFVTSU5HIGJ0cmVlIChpZCk7CisKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAq IEZST00gc2pfdDEKK0pPSU4gKAorCVNFTEVDVCBzal90Mi5pZCBBUyBpZCBGUk9NIHNqX3Qy CisJV0hFUkUgRVhJU1RTCisJCSgKKwkJU0VMRUNUIFRSVUUgRlJPTSBzal90Myxzal90NCBX SEVSRSBzal90My5hID0gMSBBTkQgc2pfdDMuaWQgPSBzal90Mi5pZAorCQkpCisJKSB0MnQz dDQKK09OIHNqX3QxLmlkID0gdDJ0M3Q0LmlkCitKT0lOICgKKwlTRUxFQ1Qgc2pfdDIuaWQg QVMgaWQgRlJPTSBzal90MgorCVdIRVJFIEVYSVNUUworCQkoCisJCVNFTEVDVCBUUlVFIEZS T00gc2pfdDMsc2pfdDQgV0hFUkUgc2pfdDMuYSA9IDEgQU5EIHNqX3QzLmlkID0gc2pfdDIu aWQKKwkJKQorCSkgX3QydDN0NAorT04gc2pfdDEuaWQgPSBfdDJ0M3Q0LmlkOworCistLQor LS0gVGVzdCBSb3dNYXJrcy1yZWxhdGVkIGNvZGUKKy0tCisKKy0tIEJvdGggc2lkZXMgaGF2 ZSBleHBsaWNpdCBMb2NrUm93cyBtYXJrcworRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNU IGExLmEgRlJPTSBzaiBhMSxzaiBhMiBXSEVSRSAoYTEuYT1hMi5hKSBGT1IgVVBEQVRFOwor CityZXNldCBlbmFibGVfaGFzaGpvaW47CityZXNldCBlbmFibGVfbWVyZ2Vqb2luOworCiAt LQogLS0gVGVzdCBoaW50cyBnaXZlbiBvbiBpbmNvcnJlY3QgY29sdW1uIHJlZmVyZW5jZXMg YXJlIHVzZWZ1bAogLS0KZGlmZiAtLWdpdCBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVm cy5saXN0IGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKaW5kZXggNGY1NzA3 OGQxMy4uNmNmODk3ZTdiMiAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVk ZWZzLmxpc3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTM4 OCw2ICszODgsNyBAQCBDYXRhbG9nSWQKIENhdGFsb2dJZE1hcEVudHJ5CiBDYXRhbG9nSW5k ZXhTdGF0ZQogQ2hhbmdlVmFyTm9kZXNfY29udGV4dAorUmVwbGFjZVZhcm5vQ29udGV4dAog Q2hlY2tQb2ludAogQ2hlY2tQb2ludFN0bXQKIENoZWNrcG9pbnRTdGF0c0RhdGEKQEAgLTI1 NjMsNiArMjU2NCw3IEBAIFNlZW5SZWxzRW50cnkKIFNlbGVjdExpbWl0CiBTZWxlY3RTdG10 CiBTZWxlY3Rpdml0eQorU2VsZkpvaW5DYW5kaWRhdGUKIFNlbVRQYWRkZWQKIFNlbWlBbnRp Sm9pbkZhY3RvcnMKIFNlcVNjYW4KQEAgLTM5ODksNiArMzk5MSw3IEBAIHVuaWNvZGVTdHls ZUNvbHVtbkZvcm1hdAogdW5pY29kZVN0eWxlRm9ybWF0CiB1bmljb2RlU3R5bGVSb3dGb3Jt YXQKIHVuaWNvZGVfbGluZXN0eWxlCitVbmlxdWVSZWxJbmZvCiB1bml0X2NvbnZlcnNpb24K IHVubG9nZ2VkX3JlbGF0aW9uX2VudHJ5CiB1dGZfbG9jYWxfY29udmVyc2lvbl9mdW5jCi0t IAoyLjM5LjIKCg== --------------0M3S0mTOsewxXC7kZEs0EK0r--