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 1t5M7d-005Y9Y-Gg for pgsql-hackers@arkaria.postgresql.org; Mon, 28 Oct 2024 09:33:14 +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 1t5M7b-005EE9-S2 for pgsql-hackers@arkaria.postgresql.org; Mon, 28 Oct 2024 09:33:12 +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 1t5M7a-005EDw-V4 for pgsql-hackers@lists.postgresql.org; Mon, 28 Oct 2024 09:33:11 +0000 Received: from mail-lf1-x12e.google.com ([2a00:1450:4864:20::12e]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1t5M7V-003FZL-MX for pgsql-hackers@lists.postgresql.org; Mon, 28 Oct 2024 09:33:10 +0000 Received: by mail-lf1-x12e.google.com with SMTP id 2adb3069b0e04-539fbe22ac0so4007888e87.2 for ; Mon, 28 Oct 2024 02:33:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1730107983; x=1730712783; darn=lists.postgresql.org; h=in-reply-to:content-language:references:cc:to:from:subject :user-agent:mime-version:date:message-id:from:to:cc:subject:date :message-id:reply-to; bh=/obFdprtn/IbJN3m/dTzH1GaYbDowRYjZXf0APlRKnk=; b=PfzUnzkT/7fGmpPUGson+ZxjwGXzMI3rIjLKzIlrGCk2qcuz6LlFSIbTH/pX7UG1yF /p1TjYI97o9/tMmUtP1qa3bzoXgMt7pGEibdKwB18LQGHjlWRZbCOHRPcSxcaB7Qsi0A sERxLiLs2eZkCJcDphi7E/ccLe8o8EeGvwVaa+X3PZ0hlt90eG/IucOuqOLC3UyWZ2vL P0RuwYrmnR0+geCJpckDVqd6bHeTS64NSOUeFQCIUtJibrIppn3iqQwyFDLtuCvBQ76W GzTKInFCkSqQY8bih1dw8j8aG5M2U8IwlgaZ+jBcaACEoxoWJl7NUhef45ZFbrEthD/B P0NA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1730107983; x=1730712783; h=in-reply-to:content-language:references:cc:to:from:subject :user-agent:mime-version:date:message-id:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=/obFdprtn/IbJN3m/dTzH1GaYbDowRYjZXf0APlRKnk=; b=cHei0li9/u57w5SA8Rf/D3OUNokIs1+nP40i9IbxzJx//LaqUR9ltrXuouWoXAAery ZWHDiXxla2FmNpV3RrNolnzYrDXXzZhSip4fBkyPaAqmJ09afIrOGWC6x6bMKAq3wnqL Q+8kXKyI9W33ga/wOBud7SYT/2hODbAWaACSNvlNC3h07kGPAxbKGuo+qf3CShw74dFy QroN32z75/Htb2pCJEpICL1qI7C6SmwMKKeSDGCI4Fc2Xppx9Z61QbCyYDt5/sduOze7 QXapN81Y7DQXlwM9cZaihy2hmKxwb641UzPT4/VhKqLOCvD7iFTFRxyrvyzJ7a/Jsueo 45vQ== X-Forwarded-Encrypted: i=1; AJvYcCWUd1a8HdMkxe9My35mjHBNqMSGWtGAvWX50ELEamD9sdDc4tTAAT012lI+RqE2ORVjI0UXIRKo9Du8rfQe@lists.postgresql.org X-Gm-Message-State: AOJu0YxadaqT8JEF9GVVUl56c9Qi/IWjEQsMA/SU6cI53IYHcZ+Ig9Zl qSBmsEvmr7Bfiazz8VCqxhM/qjpqCUsgjTmoWbT1bbCV6NPa3Rcj X-Google-Smtp-Source: AGHT+IHhgcjvj/OPz6+up/FWgCXOCC/TLBrMqWQCVzNhlPyc32hFd6JarohKzjQdxpcaTyGeiNg7og== X-Received: by 2002:a05:6512:2347:b0:530:c212:4a5a with SMTP id 2adb3069b0e04-53b348d3775mr3065888e87.22.1730107981705; Mon, 28 Oct 2024 02:33:01 -0700 (PDT) Received: from [10.10.20.104] (node-qog.pool-125-24.dynamic.totinternet.net. [125.24.135.16]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-53b2e1c96d2sm1014504e87.211.2024.10.28.02.32.54 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 28 Oct 2024 02:33:00 -0700 (PDT) Content-Type: multipart/mixed; boundary="------------bgJkibED4zPx441b6Zr9PIGH" Message-ID: Date: Mon, 28 Oct 2024 16:32:50 +0700 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: Removing unneeded self joins From: Andrei Lepikhov To: Dean Rasheed , Alexander Korotkov Cc: Tom Lane , Robert Haas , Richard Guo , Alexander Lakhin , "Gregory Stark (as CFM)" , =?UTF-8?Q?Micha=C5=82_K=C5=82eczek?= , PostgreSQL Hackers References: <64486b0b-0404-e39e-322d-0801154901f3@postgrespro.ru> <735b5cd4-568d-fbf7-ad8c-dcfb4c3af86e@gmail.com> <2422119.1714691974@sss.pgh.pa.us> <24e93efd-eeac-43a6-a75a-ad68eacb32ee@postgrespro.ru> <3622801.1715010885@sss.pgh.pa.us> <1b69a5a4-674e-4bd2-b711-e15ed593ec7d@gmail.com> Content-Language: en-AU In-Reply-To: <1b69a5a4-674e-4bd2-b711-e15ed593ec7d@gmail.com> List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------bgJkibED4zPx441b6Zr9PIGH Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit On 10/8/24 10:54, Andrei Lepikhov wrote: > On 7/24/24 18:07, Dean Rasheed wrote: >> On Sat, 20 Jul 2024 at 12:39, Alexander Korotkov >> wrote: > Attached version is rebased onto the new master. Because of a3179ab it > may be necessary to do more detailed review. Just a rebase on the current master. -- regards, Andrei Lepikhov --------------bgJkibED4zPx441b6Zr9PIGH Content-Type: text/x-patch; charset=UTF-8; name="v9-0001-Remove-useless-self-joins.patch" Content-Disposition: attachment; filename="v9-0001-Remove-useless-self-joins.patch" Content-Transfer-Encoding: base64 RnJvbSBlYmFlZmM2MWMzZWFhOTJlZTU1NGZjMjdkNTA1ZDc5NDc1Y2Y0ZTQ4IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiAiQW5kcmVpIFYuIExlcGlraG92IiA8bGVwaWhvdkBn bWFpbC5jb20+CkRhdGU6IE1vbiwgNyBPY3QgMjAyNCAxMDo0MzowNCArMDcwMApTdWJqZWN0 OiBbUEFUQ0ggdjldIFJlbW92ZSB1c2VsZXNzIHNlbGYtam9pbnMKTUlNRS1WZXJzaW9uOiAx LjAKQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04CkNvbnRlbnQtVHJh bnNmZXItRW5jb2Rpbmc6IDhiaXQKClRoZSBTZWxmIEpvaW4gRWxpbWluYXRpb24gKFNKRSkg ZmVhdHVyZSByZW1vdmVzIGFuIGlubmVyIGpvaW4gb2YgYSBwbGFpbiB0YWJsZQp0byBpdHNl bGYgaW4gdGhlIHF1ZXJ5IHRyZWUgaWYgaXMgcHJvdmVkIHRoYXQgdGhlIGpvaW4gY2FuIGJl IHJlcGxhY2VkIHdpdGgKYSBzY2FuIHdpdGhvdXQgaW1wYWN0aW5nIHRoZSBxdWVyeSByZXN1 bHQuIFNlbGYtam9pbiBhbmQgaW5uZXIgcmVsYXRpb24gYXJlCnJlcGxhY2VkIHdpdGggdGhl IG91dGVyIGluIHF1ZXJ5LCBlcXVpdmFsZW5jZSBjbGFzc2VzLCBhbmQgcGxhbm5lciBpbmZv CnN0cnVjdHVyZXMuIEFsc28sIHRoZSBpbm5lciByZXN0cmljdGxpc3QgbW92ZXMgdG8gdGhl IG91dGVyIG9uZSwgYW5kIGR1cGxpY2F0ZWQKY2xhdXNlcyBhcmUgcmVtb3ZlZC4gVGh1cywg dGhpcyBvcHRpbWl6YXRpb24gcmVkdWNlcyB0aGUgbGVuZ3RoIG9mIHRoZSByYW5nZQp0YWJs ZSBsaXN0ICh0aGlzIGVzcGVjaWFsbHkgbWFrZXMgc2Vuc2UgZm9yIHBhcnRpdGlvbmVkIHJl bGF0aW9ucyksIHJlZHVjZXMgdGhlCm51bWJlciBvZiByZXN0cmljdGlvbiBjbGF1c2VzID09 PSBzZWxlY3Rpdml0eSBlc3RpbWF0aW9ucywgYW5kIHBvdGVudGlhbGx5IGNhbgppbXByb3Zl IHRvdGFsIHBsYW5uZXIgcHJlZGljdGlvbiBmb3IgdGhlIHF1ZXJ5LgpUaGUgU0pFIHByb29m IGlzIGJhc2VkIG9uIGlubmVycmVsX2lzX3VuaXF1ZSBtYWNoaW5lcnkuCgpXZSBjYW4gcmVt b3ZlIGEgc2VsZi1qb2luIHdoZW4gZm9yIGVhY2ggb3V0ZXIgcm93OgoxLiBBdCBtb3N0IG9u ZSBpbm5lciByb3cgbWF0Y2hlcyB0aGUgam9pbiBjbGF1c2UuCjIuIEVhY2ggbWF0Y2hlZCBp bm5lciByb3cgbXVzdCBiZSAocGh5c2ljYWxseSkgdGhlIHNhbWUgcm93IGFzIHRoZSBvdXRl ciBvbmUuCgpJbiB0aGlzIHBhdGNoLCB3ZSB1c2UgdGhlIG5leHQgYXBwcm9hY2ggdG8gaWRl bnRpZnkgYSBzZWxmLWpvaW46CjEuIENvbGxlY3QgYWxsIG1lcmdlLWpvaW5hYmxlIGpvaW4g cXVhbHMgd2hpY2ggbG9vayBsaWtlIGEueCA9IGIueAoyLiBBZGQgdG8gdGhlIGxpc3QgYWJv dmUgdGhlIGJhc2VyZXN0cmljdGluZm8gb2YgdGhlIGlubmVyIHRhYmxlLgozLiBDaGVjayBp bm5lcnJlbF9pc191bmlxdWUoKSBmb3IgdGhlIHF1YWwgbGlzdC4gIElmIGl0IHJldHVybnMg ZmFsc2UsIHNraXAKdGhpcyBwYWlyIG9mIGpvaW5pbmcgdGFibGVzLgo0LiBDaGVjayB1bmlx dWVuZXNzLCBwcm92ZWQgYnkgdGhlIGJhc2VyZXN0cmljdGluZm8gY2xhdXNlcy4gVG8gcHJv dmUgdGhlCnBvc3NpYmlsaXR5IG9mIHNlbGYtam9pbiBlbGltaW5hdGlvbiwgdGhlIGlubmVy IGFuZCBvdXRlciBjbGF1c2VzIG11c3QgbWF0Y2gKZXhhY3RseS4KClRoZSByZWxhdGlvbiBy ZXBsYWNlbWVudCBwcm9jZWR1cmUgaXMgbm90IHRyaXZpYWwgYW5kIGl0IGlzIHBhcnRseSBj b21iaW5lZAp3aXRoIHRoZSBvbmUsIHVzZWQgdG8gcmVtb3ZlIHVzZWxlc3MgbGVmdCBqb2lu cy4gVGVzdHMsIGNvdmVyaW5nIHRoaXMgZmVhdHVyZSwKd2VyZSBhZGRlZCB0byBqb2luLnNx bC4gU29tZSByZWdyZXNzaW9uIHRlc3RzIGNoYW5nZWQgZHVlIHRvIHNlbGYtam9pbiByZW1v dmFsCmxvZ2ljLgoKRGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS9mbGF0LzY0NDg2 YjBiLTA0MDQtZTM5ZS0zMjJkLTA4MDExNTQ5MDFmMyU0MHBvc3RncmVzcHJvLnJ1CgpBdXRo b3I6IEFuZHJleSBMZXBpa2hvdiwgQWxleGFuZGVyIEt1em1lbmtvdgpSZXZpZXdlZC1ieTog VG9tIExhbmUsIFJvYmVydCBIYWFzLCBBbmRyZXMgRnJldW5kLCBTaW1vbiBSaWdncywgSm9u YXRoYW4gUy4gS2F0egpSZXZpZXdlZC1ieTogRGF2aWQgUm93bGV5LCBUaG9tYXMgTXVucm8s IEtvbnN0YW50aW4gS25pemhuaWssIEhlaWtraSBMaW5uYWthbmdhcwpSZXZpZXdlZC1ieTog SHl3ZWwgQ2FydmVyLCBMYXVyZW56IEFsYmUsIFJvbmFuIER1bmtsYXUsIHZpZ25lc2ggQywg WmhpaG9uZyBZdQpSZXZpZXdlZC1ieTogR3JlZyBTdGFyaywgSmFpbWUgQ2FzYW5vdmEsIE1p Y2hhxYIgS8WCZWN6ZWssIEFsZW5hIFJ5YmFraW5hClJldmlld2VkLWJ5OiBBbGV4YW5kZXIg S29yb3Rrb3YKLS0tCiBkb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwgICAgICAgICAgICAgICAg ICB8ICAgMTYgKwogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvZXF1aXZjbGFzcy5jICAg fCAgICAzICstCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9pbmR4cGF0aC5jICAgICB8 ICAgMzkgKwogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vYW5hbHl6ZWpvaW5zLmMgfCAx MTU3ICsrKysrKysrKysrKysrKysrKystLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4v cGxhbm1haW4uYyAgICAgfCAgICA1ICsKIHNyYy9iYWNrZW5kL29wdGltaXplci9wcmVwL3By ZXB1bmlvbi5jICAgIHwgICAgNyArLQogc3JjL2JhY2tlbmQvcmV3cml0ZS9yZXdyaXRlTWFu aXAuYyAgICAgICAgfCAgMTEwICstCiBzcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y190YWJs ZXMuYyAgICAgICB8ICAgMTAgKwogc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmggICAg ICAgICAgICAgfCAgIDM1ICstCiBzcmMvaW5jbHVkZS9vcHRpbWl6ZXIvb3B0aW1pemVyLmgg ICAgICAgICB8ICAgIDIgKwogc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BhdGhzLmggICAgICAg ICAgICAgfCAgICAzICsKIHNyYy9pbmNsdWRlL29wdGltaXplci9wbGFubWFpbi5oICAgICAg ICAgIHwgICAgNiArCiBzcmMvaW5jbHVkZS9yZXdyaXRlL3Jld3JpdGVNYW5pcC5oICAgICAg ICB8ICAgIDMgKwogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9lcXVpdmNsYXNzLm91dCAg fCAgIDMwICsKIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvam9pbi5vdXQgICAgICAgIHwg MTA3OSArKysrKysrKysrKysrKysrKysrCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N5 c3ZpZXdzLm91dCAgICB8ICAgIDMgKy0KIHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2VxdWl2Y2xh c3Muc3FsICAgICAgIHwgICAxNiArCiBzcmMvdGVzdC9yZWdyZXNzL3NxbC9qb2luLnNxbCAg ICAgICAgICAgICB8ICA0OTAgKysrKysrKysrCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRl ZnMubGlzdCAgICAgICAgICB8ICAgIDMgKwogMTkgZmlsZXMgY2hhbmdlZCwgMjkxOCBpbnNl cnRpb25zKCspLCA5OSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwv Y29uZmlnLnNnbWwgYi9kb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwKaW5kZXggZGM0MDEwODdk Yy4uNzc3YTQ3OWUwYyAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL2NvbmZpZy5zZ21sCisr KyBiL2RvYy9zcmMvc2dtbC9jb25maWcuc2dtbApAQCAtNTY0OSw2ICs1NjQ5LDIyIEBAIEFO WSA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+bnVtX3N5bmM8L3JlcGxhY2VhYmxl PiAoIDxyZXBsYWNlYWJsZSBjbGFzcz0iCiAgICAgICA8L2xpc3RpdGVtPgogICAgICA8L3Zh cmxpc3RlbnRyeT4KIAorICAgICA8dmFybGlzdGVudHJ5IGlkPSJndWMtZW5hYmxlX3NlbGZf am9pbl9yZW1vdmFsIiB4cmVmbGFiZWw9ImVuYWJsZV9zZWxmX2pvaW5fcmVtb3ZhbCI+Cisg ICAgICA8dGVybT48dmFybmFtZT5lbmFibGVfc2VsZl9qb2luX3JlbW92YWw8L3Zhcm5hbWU+ ICg8dHlwZT5ib29sZWFuPC90eXBlPikKKyAgICAgIDxpbmRleHRlcm0+CisgICAgICAgPHBy aW1hcnk+PHZhcm5hbWU+ZW5hYmxlX3NlbGZfam9pbl9yZW1vdmFsPC92YXJuYW1lPiBjb25m aWd1cmF0aW9uIHBhcmFtZXRlcjwvcHJpbWFyeT4KKyAgICAgIDwvaW5kZXh0ZXJtPgorICAg ICAgPC90ZXJtPgorICAgICAgPGxpc3RpdGVtPgorICAgICAgIDxwYXJhPgorICAgICAgICBF bmFibGVzIG9yIGRpc2FibGVzIHRoZSBxdWVyeSBwbGFubmVyJ3Mgb3B0aW1pemF0aW9uIHdo aWNoIGFuYWx5c2VzCisgICAgICAgIHRoZSBxdWVyeSB0cmVlIGFuZCByZXBsYWNlcyBzZWxm IGpvaW5zIHdpdGggc2VtYW50aWNhbGx5IGVxdWl2YWxlbnQKKyAgICAgICAgc2luZ2xlIHNj YW5zLiAgVGFrZXMgaW50byBjb25zaWRlcmF0aW9uIG9ubHkgcGxhaW4gdGFibGVzLgorICAg ICAgICBUaGUgZGVmYXVsdCBpcyA8bGl0ZXJhbD5vbjwvbGl0ZXJhbD4uCisgICAgICAgPC9w YXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICAgPC92YXJsaXN0ZW50cnk+CisKICAgICAg PHZhcmxpc3RlbnRyeSBpZD0iZ3VjLWVuYWJsZS1zZXFzY2FuIiB4cmVmbGFiZWw9ImVuYWJs ZV9zZXFzY2FuIj4KICAgICAgIDx0ZXJtPjx2YXJuYW1lPmVuYWJsZV9zZXFzY2FuPC92YXJu YW1lPiAoPHR5cGU+Ym9vbGVhbjwvdHlwZT4pCiAgICAgICA8aW5kZXh0ZXJtPgpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvZXF1aXZjbGFzcy5jIGIvc3JjL2Jh Y2tlbmQvb3B0aW1pemVyL3BhdGgvZXF1aXZjbGFzcy5jCmluZGV4IGZhZTEzN2RkODIuLjEz ZDc1MWM3YjQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2VxdWl2 Y2xhc3MuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9lcXVpdmNsYXNzLmMK QEAgLTg4MCw3ICs4ODAsOCBAQCBmaW5kX2NvbXB1dGFibGVfZWNfbWVtYmVyKFBsYW5uZXJJ bmZvICpyb290LAogCQllbXZhcnMgPSBwdWxsX3Zhcl9jbGF1c2UoKE5vZGUgKikgZW0tPmVt X2V4cHIsCiAJCQkJCQkJCSBQVkNfSU5DTFVERV9BR0dSRUdBVEVTIHwKIAkJCQkJCQkJIFBW Q19JTkNMVURFX1dJTkRPV0ZVTkNTIHwKLQkJCQkJCQkJIFBWQ19JTkNMVURFX1BMQUNFSE9M REVSUyk7CisJCQkJCQkJCSBQVkNfSU5DTFVERV9QTEFDRUhPTERFUlMgfAorCQkJCQkJCQkg UFZDX0lOQ0xVREVfQ09OVkVSVFJPV1RZUEVTKTsKIAkJZm9yZWFjaChsYzIsIGVtdmFycykK IAkJewogCQkJaWYgKCFsaXN0X21lbWJlcihleHBydmFycywgbGZpcnN0KGxjMikpKQpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvaW5keHBhdGguYyBiL3NyYy9i YWNrZW5kL29wdGltaXplci9wYXRoL2luZHhwYXRoLmMKaW5kZXggYzBmY2M3ZDc4ZC4uMjIz MGIxMzEwNCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvaW5keHBh dGguYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9pbmR4cGF0aC5jCkBAIC0z NDQwLDYgKzM0NDAsMjIgQEAgYm9vbAogcmVsYXRpb25faGFzX3VuaXF1ZV9pbmRleF9mb3Io UGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwKIAkJCQkJCQkgIExpc3QgKnJl c3RyaWN0bGlzdCwKIAkJCQkJCQkgIExpc3QgKmV4cHJsaXN0LCBMaXN0ICpvcHJsaXN0KQor eworCXJldHVybiByZWxhdGlvbl9oYXNfdW5pcXVlX2luZGV4X2V4dChyb290LCByZWwsIHJl c3RyaWN0bGlzdCwKKwkJCQkJCQkJCQkgZXhwcmxpc3QsIG9wcmxpc3QsIE5VTEwpOworfQor CisvKgorICogcmVsYXRpb25faGFzX3VuaXF1ZV9pbmRleF9leHQKKyAqCSAgU2FtZSBhcyBy ZWxhdGlvbl9oYXNfdW5pcXVlX2luZGV4X2ZvcigpLCBidXQgc3VwcG9ydHMgZXh0cmFfY2xh dXNlcworICoJICBwYXJhbWV0ZXIuICBJZiBleHRyYV9jbGF1c2VzIGlzbid0IE5VTEwsIHJl dHVybiBiYXNlcmVzdHJpY3RpbmZvIGNsYXVzZXMKKyAqCSAgd2hpY2ggd2VyZSB1c2VkIHRv IGRlcml2ZSB1bmlxdWVuZXNzLgorICovCitib29sCityZWxhdGlvbl9oYXNfdW5pcXVlX2lu ZGV4X2V4dChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAorCQkJCQkJCSAg TGlzdCAqcmVzdHJpY3RsaXN0LAorCQkJCQkJCSAgTGlzdCAqZXhwcmxpc3QsIExpc3QgKm9w cmxpc3QsCisJCQkJCQkJICBMaXN0ICoqZXh0cmFfY2xhdXNlcykKIHsKIAlMaXN0Q2VsbCAg ICppYzsKIApAQCAtMzQ5NSw2ICszNTExLDcgQEAgcmVsYXRpb25faGFzX3VuaXF1ZV9pbmRl eF9mb3IoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwKIAl7CiAJCUluZGV4 T3B0SW5mbyAqaW5kID0gKEluZGV4T3B0SW5mbyAqKSBsZmlyc3QoaWMpOwogCQlpbnQJCQlj OworCQlMaXN0CSAgICpleHBycyA9IE5JTDsKIAogCQkvKgogCQkgKiBJZiB0aGUgaW5kZXgg aXMgbm90IHVuaXF1ZSwgb3Igbm90IGltbWVkaWF0ZWx5IGVuZm9yY2VkLCBvciBpZiBpdCdz CkBAIC0zNTQ2LDYgKzM1NjMsMjQgQEAgcmVsYXRpb25faGFzX3VuaXF1ZV9pbmRleF9mb3Io UGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwKIAkJCQlpZiAobWF0Y2hfaW5k ZXhfdG9fb3BlcmFuZChyZXhwciwgYywgaW5kKSkKIAkJCQl7CiAJCQkJCW1hdGNoZWQgPSB0 cnVlOyAvKiBjb2x1bW4gaXMgdW5pcXVlICovCisKKwkJCQkJaWYgKGJtc19tZW1iZXJzaGlw KHJpbmZvLT5jbGF1c2VfcmVsaWRzKSA9PSBCTVNfU0lOR0xFVE9OKQorCQkJCQl7CisJCQkJ CQlNZW1vcnlDb250ZXh0IG9sZE1lbUN0eCA9CisJCQkJCQkJTWVtb3J5Q29udGV4dFN3aXRj aFRvKHJvb3QtPnBsYW5uZXJfY3h0KTsKKworCQkJCQkJLyoKKwkJCQkJCSAqIEFkZCBmaWx0 ZXIgY2xhdXNlIGludG8gYSBsaXN0IGFsbG93aW5nIGNhbGxlciB0bworCQkJCQkJICoga25v dyBpZiB1bmlxdWVuZXNzIGhhdmUgbWFkZSBub3Qgb25seSBieSBqb2luCisJCQkJCQkgKiBj bGF1c2VzLgorCQkJCQkJICovCisJCQkJCQlBc3NlcnQoYm1zX2lzX2VtcHR5KHJpbmZvLT5s ZWZ0X3JlbGlkcykgfHwKKwkJCQkJCQkgICBibXNfaXNfZW1wdHkocmluZm8tPnJpZ2h0X3Jl bGlkcykpOworCQkJCQkJaWYgKGV4dHJhX2NsYXVzZXMpCisJCQkJCQkJZXhwcnMgPSBsYXBw ZW5kKGV4cHJzLCByaW5mbyk7CisJCQkJCQlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkTWVt Q3R4KTsKKwkJCQkJfQorCiAJCQkJCWJyZWFrOwogCQkJCX0KIAkJCX0KQEAgLTM1ODgsNyAr MzYyMywxMSBAQCByZWxhdGlvbl9oYXNfdW5pcXVlX2luZGV4X2ZvcihQbGFubmVySW5mbyAq cm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCiAJCS8qIE1hdGNoZWQgYWxsIGtleSBjb2x1bW5z IG9mIHRoaXMgaW5kZXg/ICovCiAJCWlmIChjID09IGluZC0+bmtleWNvbHVtbnMpCisJCXsK KwkJCWlmIChleHRyYV9jbGF1c2VzKQorCQkJCSpleHRyYV9jbGF1c2VzID0gZXhwcnM7CiAJ CQlyZXR1cm4gdHJ1ZTsKKwkJfQogCX0KIAogCXJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL2FuYWx5emVqb2lucy5jIGIvc3JjL2JhY2tl bmQvb3B0aW1pemVyL3BsYW4vYW5hbHl6ZWpvaW5zLmMKaW5kZXggNWJjMTZjNGJmYy4uMDNj YmEzY2I0MCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vYW5hbHl6 ZWpvaW5zLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vYW5hbHl6ZWpvaW5z LmMKQEAgLTIyLDYgKzIyLDcgQEAKICAqLwogI2luY2x1ZGUgInBvc3RncmVzLmgiCiAKKyNp bmNsdWRlICJjYXRhbG9nL3BnX2NsYXNzLmgiCiAjaW5jbHVkZSAibm9kZXMvbm9kZUZ1bmNz LmgiCiAjaW5jbHVkZSAib3B0aW1pemVyL2pvaW5pbmZvLmgiCiAjaW5jbHVkZSAib3B0aW1p emVyL29wdGltaXplci5oIgpAQCAtMzAsMTIgKzMxLDMwIEBACiAjaW5jbHVkZSAib3B0aW1p emVyL3BsYWNlaG9sZGVyLmgiCiAjaW5jbHVkZSAib3B0aW1pemVyL3BsYW5tYWluLmgiCiAj aW5jbHVkZSAib3B0aW1pemVyL3Jlc3RyaWN0aW5mby5oIgorI2luY2x1ZGUgInJld3JpdGUv cmV3cml0ZU1hbmlwLmgiCiAjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCiAKKy8qCisg KiBVdGlsaXR5IHN0cnVjdHVyZS4gSXQgaXMgbmVlZGVkIHRvIHBlcmZvcm0gYSBzb3J0aW5n IHByb2NlZHVyZSBhbmQgc2ltcGxpZnkKKyAqIHRoZSBzZWFyY2ggb2YgU0pFLWNhbmRpZGF0 ZSBiYXNlcmVscyByZWZlcmVuY2luZyB0aGUgc2FtZSBkYXRhYmFzZSByZWxhdGlvbi4KKyAq IEhhdmluZyBjb2xsZWN0ZWQgYWxsIGJhc2VyZWxzIGZyb20gdGhlIHF1ZXJ5IGpvaW50cmVl LCB0aGUgcGxhbm5lciBzb3J0cyB0aGVtCisgKiBhY2NvcmRpbmcgdG8gdGhlIHJlbG9pZCB2 YWx1ZSwgZ3JvdXBzIHRoZW0gd2l0aCB0aGUgbmV4dCBwYXNzIGFuZCBhdHRlbXB0cyB0bwor ICogcmVtb3ZlIHNlbGYtam9pbnMuCisgKiBQcmVsaW1pbmFyeSBzb3J0aW5nIHByZXZlbnRz IHF1YWRyYXRpYyBiZWhhdmlvdXIgdGhhdCBjYW4gYmUgaGFybWZ1bCBpbiB0aGUKKyAqIGNh c2Ugb2YgbnVtZXJvdXMgam9pbnMuCisgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisJaW50CQkJ cmVsaWQ7CisJT2lkCQkJcmVsb2lkOworfSBTZWxmSm9pbkNhbmRpZGF0ZTsKKworYm9vbAkJ ZW5hYmxlX3NlbGZfam9pbl9yZW1vdmFsOworCiAvKiBsb2NhbCBmdW5jdGlvbnMgKi8KIHN0 YXRpYyBib29sIGpvaW5faXNfcmVtb3ZhYmxlKFBsYW5uZXJJbmZvICpyb290LCBTcGVjaWFs Sm9pbkluZm8gKnNqaW5mbyk7Ci1zdGF0aWMgdm9pZCByZW1vdmVfcmVsX2Zyb21fcXVlcnko UGxhbm5lckluZm8gKnJvb3QsIGludCByZWxpZCwKLQkJCQkJCQkJICBTcGVjaWFsSm9pbklu Zm8gKnNqaW5mbyk7CitzdGF0aWMgdm9pZCByZW1vdmVfbGVmdGpvaW5yZWxfZnJvbV9xdWVy eShQbGFubmVySW5mbyAqcm9vdCwgaW50IHJlbGlkLAorCQkJCQkJCQkJCSAgU3BlY2lhbEpv aW5JbmZvICpzamluZm8pOwogc3RhdGljIHZvaWQgcmVtb3ZlX3JlbF9mcm9tX3Jlc3RyaWN0 aW5mbyhSZXN0cmljdEluZm8gKnJpbmZvLAogCQkJCQkJCQkJCSBpbnQgcmVsaWQsIGludCBv anJlbGlkKTsKIHN0YXRpYyB2b2lkIHJlbW92ZV9yZWxfZnJvbV9lY2xhc3MoRXF1aXZhbGVu Y2VDbGFzcyAqZWMsCkBAIC00MywxNCArNjIsMTYgQEAgc3RhdGljIHZvaWQgcmVtb3ZlX3Jl bF9mcm9tX2VjbGFzcyhFcXVpdmFsZW5jZUNsYXNzICplYywKIHN0YXRpYyBMaXN0ICpyZW1v dmVfcmVsX2Zyb21fam9pbmxpc3QoTGlzdCAqam9pbmxpc3QsIGludCByZWxpZCwgaW50ICpu cmVtb3ZlZCk7CiBzdGF0aWMgYm9vbCByZWxfc3VwcG9ydHNfZGlzdGluY3RuZXNzKFBsYW5u ZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwpOwogc3RhdGljIGJvb2wgcmVsX2lzX2Rp c3RpbmN0X2ZvcihQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAotCQkJCQkJ CQlMaXN0ICpjbGF1c2VfbGlzdCk7CisJCQkJCQkJCUxpc3QgKmNsYXVzZV9saXN0LCBMaXN0 ICoqZXh0cmFfY2xhdXNlcyk7CiBzdGF0aWMgT2lkCWRpc3RpbmN0X2NvbF9zZWFyY2goaW50 IGNvbG5vLCBMaXN0ICpjb2xub3MsIExpc3QgKm9waWRzKTsKIHN0YXRpYyBib29sIGlzX2lu bmVycmVsX3VuaXF1ZV9mb3IoUGxhbm5lckluZm8gKnJvb3QsCiAJCQkJCQkJCSAgIFJlbGlk cyBqb2lucmVsaWRzLAogCQkJCQkJCQkgICBSZWxpZHMgb3V0ZXJyZWxpZHMsCiAJCQkJCQkJ CSAgIFJlbE9wdEluZm8gKmlubmVycmVsLAogCQkJCQkJCQkgICBKb2luVHlwZSBqb2ludHlw ZSwKLQkJCQkJCQkJICAgTGlzdCAqcmVzdHJpY3RsaXN0KTsKKwkJCQkJCQkJICAgTGlzdCAq cmVzdHJpY3RsaXN0LAorCQkJCQkJCQkgICBMaXN0ICoqZXh0cmFfY2xhdXNlcyk7CitzdGF0 aWMgaW50CXNlbGZfam9pbl9jYW5kaWRhdGVzX2NtcChjb25zdCB2b2lkICphLCBjb25zdCB2 b2lkICpiKTsKIAogCiAvKgpAQCAtODgsNyArMTA5LDcgQEAgcmVzdGFydDoKIAkJICovCiAJ CWlubmVycmVsaWQgPSBibXNfc2luZ2xldG9uX21lbWJlcihzamluZm8tPm1pbl9yaWdodGhh bmQpOwogCi0JCXJlbW92ZV9yZWxfZnJvbV9xdWVyeShyb290LCBpbm5lcnJlbGlkLCBzamlu Zm8pOworCQlyZW1vdmVfbGVmdGpvaW5yZWxfZnJvbV9xdWVyeShyb290LCBpbm5lcnJlbGlk LCBzamluZm8pOwogCiAJCS8qIFdlIHZlcmlmeSB0aGF0IGV4YWN0bHkgb25lIHJlZmVyZW5j ZSBnZXRzIHJlbW92ZWQgZnJvbSBqb2lubGlzdCAqLwogCQlucmVtb3ZlZCA9IDA7CkBAIC0y NjEsOCArMjgyLDggQEAgam9pbl9pc19yZW1vdmFibGUoUGxhbm5lckluZm8gKnJvb3QsIFNw ZWNpYWxKb2luSW5mbyAqc2ppbmZvKQogCQkJY29udGludWU7CQkJLyogbm90IG1lcmdlam9p bmFibGUgKi8KIAogCQkvKgotCQkgKiBDaGVjayBpZiB0aGUgY2xhdXNlIGhhcyB0aGUgZm9y bSAib3V0ZXIgb3AgaW5uZXIiIG9yICJpbm5lciBvcAotCQkgKiBvdXRlciIsIGFuZCBpZiBz byBtYXJrIHdoaWNoIHNpZGUgaXMgaW5uZXIuCisJCSAqIENoZWNrIGlmIGNsYXVzZSBoYXMg dGhlIGZvcm0gIm91dGVyIG9wIGlubmVyIiBvciAiaW5uZXIgb3Agb3V0ZXIiLAorCQkgKiBh bmQgaWYgc28gbWFyayB3aGljaCBzaWRlIGlzIGlubmVyLgogCQkgKi8KIAkJaWYgKCFjbGF1 c2Vfc2lkZXNfbWF0Y2hfam9pbihyZXN0cmljdGluZm8sIHNqaW5mby0+bWluX2xlZnRoYW5k LAogCQkJCQkJCQkJIGlubmVycmVsLT5yZWxpZHMpKQpAQCAtMjc2LDcgKzI5Nyw3IEBAIGpv aW5faXNfcmVtb3ZhYmxlKFBsYW5uZXJJbmZvICpyb290LCBTcGVjaWFsSm9pbkluZm8gKnNq aW5mbykKIAkgKiBOb3cgdGhhdCB3ZSBoYXZlIHRoZSByZWxldmFudCBlcXVhbGl0eSBqb2lu IGNsYXVzZXMsIHRyeSB0byBwcm92ZSB0aGUKIAkgKiBpbm5lcnJlbCBkaXN0aW5jdC4KIAkg Ki8KLQlpZiAocmVsX2lzX2Rpc3RpbmN0X2Zvcihyb290LCBpbm5lcnJlbCwgY2xhdXNlX2xp c3QpKQorCWlmIChyZWxfaXNfZGlzdGluY3RfZm9yKHJvb3QsIGlubmVycmVsLCBjbGF1c2Vf bGlzdCwgTlVMTCkpCiAJCXJldHVybiB0cnVlOwogCiAJLyoKQEAgLTI4OCwzNiArMzA5LDY5 IEBAIGpvaW5faXNfcmVtb3ZhYmxlKFBsYW5uZXJJbmZvICpyb290LCBTcGVjaWFsSm9pbklu Zm8gKnNqaW5mbykKIAogCiAvKgotICogUmVtb3ZlIHRoZSB0YXJnZXQgcmVsaWQgYW5kIHJl ZmVyZW5jZXMgdG8gdGhlIHRhcmdldCBqb2luIGZyb20gdGhlCisgKiBTdWJzdGl0dXRlIG5l d0lkIGJ5IG9sZElkIGluIHJlbGlkcy4KKyAqIFdvcmtzIGFsbW9zdCBsaWtlIHRoZSBhZGp1 c3RfcmVsaWRfc2V0LCBidXQgcHJvY2VzcyBuZWdhdGl2ZSBuZXdyZWxpZCBjYXNlLgorICoK KyAqIFdlIG11c3QgbWFrZSBhIGNvcHkgb2YgdGhlIG9yaWdpbmFsIEJpdG1hcHNldCBiZWZv cmUgbWFraW5nIGFueQorICogbW9kaWZpY2F0aW9ucywgYmVjYXVzZSB0aGUgc2FtZSBwb2lu dGVyIHRvIGl0IG1pZ2h0IGJlIHNoYXJlZCBhbW9uZworICogZGlmZmVyZW50IHBsYWNlcy4K KyAqIEFsc28sIHRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgaW4gJ2RlbGV0ZSBvbmx5JyBt b2RlIChuZXdJZCA8IDApLgorICogSXQgYWxsb3dzIHVzIHRvIHV0aWxpc2UgdGhlIHNhbWUg Y29kZSBpbiB0aGUgcmVtb3ZlX3VzZWxlc3Nfam9pbnMgYW5kIHRoZQorICogcmVtb3ZlX3Nl bGZfam9pbnMgZmVhdHVyZXMuCisgKi8KK3N0YXRpYyBCaXRtYXBzZXQgKgorcmVwbGFjZV9y ZWxpZChSZWxpZHMgcmVsaWRzLCBpbnQgb2xkcmVsaWQsIGludCBuZXdyZWxpZCkKK3sKKwlp ZiAoSVNfU1BFQ0lBTF9WQVJOTyhvbGRyZWxpZCkpCisJCXJldHVybiByZWxpZHM7CisKKwkv KiBEZWxldGUgcmVsaWQgd2l0aG91dCBzdWJzdGl0dXRpb24uICovCisJaWYgKElTX1NQRUNJ QUxfVkFSTk8obmV3cmVsaWQpKQorCXsKKwkJcmVsaWRzID0gYm1zX2NvcHkocmVsaWRzKTsK KwkJcmV0dXJuIGJtc19kZWxfbWVtYmVyKHJlbGlkcywgb2xkcmVsaWQpOworCX0KKworCS8q IFN1YnN0aXR1dGUgbmV3SWQgZm9yIG9sZElkLiAqLworCWlmIChibXNfaXNfbWVtYmVyKG9s ZHJlbGlkLCByZWxpZHMpKQorCXsKKwkJLyogRW5zdXJlIHdlIGhhdmUgYSBtb2RpZmlhYmxl IGNvcHkgKi8KKwkJcmVsaWRzID0gYm1zX2NvcHkocmVsaWRzKTsKKworCQkvKiBSZW1vdmUg b2xkLCBhZGQgbmV3ICovCisJCXJlbGlkcyA9IGJtc19kZWxfbWVtYmVyKHJlbGlkcywgb2xk cmVsaWQpOworCQlyZXR1cm4gYm1zX2FkZF9tZW1iZXIocmVsaWRzLCBuZXdyZWxpZCk7CisJ fQorCisJcmV0dXJuIHJlbGlkczsKK30KKworLyoKKyAqIFJlbW92ZSB0aGUgdGFyZ2V0IHJl bC0+cmVsaWQgYW5kIHJlZmVyZW5jZXMgdG8gdGhlIHRhcmdldCBqb2luIGZyb20gdGhlCiAg KiBwbGFubmVyJ3MgZGF0YSBzdHJ1Y3R1cmVzLCBoYXZpbmcgZGV0ZXJtaW5lZCB0aGF0IHRo ZXJlIGlzIG5vIG5lZWQKLSAqIHRvIGluY2x1ZGUgdGhlbSBpbiB0aGUgcXVlcnkuCisgKiB0 byBpbmNsdWRlIHRoZW0gaW4gdGhlIHF1ZXJ5LiAgT3B0aW9uYWxseSByZXBsYWNlIHRoZW0g d2l0aCBzdWJzdCBpZiBzdWJzdAorICogaXMgbm9uLW5lZ2F0aXZlLgogICoKLSAqIFdlIGFy ZSBub3QgdGVycmlibHkgdGhvcm91Z2ggaGVyZS4gIFdlIG9ubHkgYm90aGVyIHRvIHVwZGF0 ZSBwYXJ0cyBvZgotICogdGhlIHBsYW5uZXIncyBkYXRhIHN0cnVjdHVyZXMgdGhhdCB3aWxs IGFjdHVhbGx5IGJlIGNvbnN1bHRlZCBsYXRlci4KKyAqIFRoaXMgZnVuY3Rpb24gdXBkYXRl cyBvbmx5IHBhcnRzIG5lZWRlZCBmb3IgYm90aCBsZWZ0LWpvaW4gcmVtb3ZhbCBhbmQKKyAq IHNlbGYtam9pbiByZW1vdmFsLgogICovCiBzdGF0aWMgdm9pZAotcmVtb3ZlX3JlbF9mcm9t X3F1ZXJ5KFBsYW5uZXJJbmZvICpyb290LCBpbnQgcmVsaWQsIFNwZWNpYWxKb2luSW5mbyAq c2ppbmZvKQorcmVtb3ZlX3JlbF9mcm9tX3F1ZXJ5KFBsYW5uZXJJbmZvICpyb290LCBSZWxP cHRJbmZvICpyZWwsCisJCQkJCSAgaW50IHN1YnN0LCBTcGVjaWFsSm9pbkluZm8gKnNqaW5m bywKKwkJCQkJICBSZWxpZHMgam9pbnJlbGlkcykKIHsKLQlSZWxPcHRJbmZvICpyZWwgPSBm aW5kX2Jhc2VfcmVsKHJvb3QsIHJlbGlkKTsKLQlpbnQJCQlvanJlbGlkID0gc2ppbmZvLT5v anJlbGlkOwotCVJlbGlkcwkJam9pbnJlbGlkczsKLQlSZWxpZHMJCWpvaW5fcGx1c19jb21t dXRlOwotCUxpc3QJICAgKmpvaW5pbmZvczsKKwlpbnQJCQlyZWxpZCA9IHJlbC0+cmVsaWQ7 CisJaW50CQkJb2pyZWxpZCA9IChzamluZm8gIT0gTlVMTCkgPyBzamluZm8tPm9qcmVsaWQg OiAtMTsKIAlJbmRleAkJcnRpOwogCUxpc3RDZWxsICAgKmw7CiAKLQkvKiBDb21wdXRlIHRo ZSByZWxpZCBzZXQgZm9yIHRoZSBqb2luIHdlIGFyZSBjb25zaWRlcmluZyAqLwotCWpvaW5y ZWxpZHMgPSBibXNfdW5pb24oc2ppbmZvLT5taW5fbGVmdGhhbmQsIHNqaW5mby0+bWluX3Jp Z2h0aGFuZCk7Ci0JQXNzZXJ0KG9qcmVsaWQgIT0gMCk7Ci0Jam9pbnJlbGlkcyA9IGJtc19h ZGRfbWVtYmVyKGpvaW5yZWxpZHMsIG9qcmVsaWQpOwotCiAJLyoKIAkgKiBVcGRhdGUgYWxs X2Jhc2VyZWxzIGFuZCByZWxhdGVkIHJlbGlkIHNldHMuCiAJICovCi0Jcm9vdC0+YWxsX2Jh c2VyZWxzID0gYm1zX2RlbF9tZW1iZXIocm9vdC0+YWxsX2Jhc2VyZWxzLCByZWxpZCk7Ci0J cm9vdC0+b3V0ZXJfam9pbl9yZWxzID0gYm1zX2RlbF9tZW1iZXIocm9vdC0+b3V0ZXJfam9p bl9yZWxzLCBvanJlbGlkKTsKLQlyb290LT5hbGxfcXVlcnlfcmVscyA9IGJtc19kZWxfbWVt YmVyKHJvb3QtPmFsbF9xdWVyeV9yZWxzLCByZWxpZCk7Ci0Jcm9vdC0+YWxsX3F1ZXJ5X3Jl bHMgPSBibXNfZGVsX21lbWJlcihyb290LT5hbGxfcXVlcnlfcmVscywgb2pyZWxpZCk7CisJ cm9vdC0+YWxsX2Jhc2VyZWxzID0gcmVwbGFjZV9yZWxpZChyb290LT5hbGxfYmFzZXJlbHMs IHJlbGlkLCBzdWJzdCk7CisJcm9vdC0+b3V0ZXJfam9pbl9yZWxzID0gcmVwbGFjZV9yZWxp ZChyb290LT5vdXRlcl9qb2luX3JlbHMsIG9qcmVsaWQsIHN1YnN0KTsKKwlyb290LT5hbGxf cXVlcnlfcmVscyA9IHJlcGxhY2VfcmVsaWQocm9vdC0+YWxsX3F1ZXJ5X3JlbHMsIHJlbGlk LCBzdWJzdCk7CisJcm9vdC0+YWxsX3F1ZXJ5X3JlbHMgPSByZXBsYWNlX3JlbGlkKHJvb3Qt PmFsbF9xdWVyeV9yZWxzLCBvanJlbGlkLCBzdWJzdCk7CiAKIAkvKgogCSAqIExpa2V3aXNl IHJlbW92ZSByZWZlcmVuY2VzIGZyb20gU3BlY2lhbEpvaW5JbmZvIGRhdGEgc3RydWN0dXJl cy4KQEAgLTMzMSwzMCArMzg1LDIzIEBAIHJlbW92ZV9yZWxfZnJvbV9xdWVyeShQbGFubmVy SW5mbyAqcm9vdCwgaW50IHJlbGlkLCBTcGVjaWFsSm9pbkluZm8gKnNqaW5mbykKIAl7CiAJ CVNwZWNpYWxKb2luSW5mbyAqc2ppbmYgPSAoU3BlY2lhbEpvaW5JbmZvICopIGxmaXJzdChs KTsKIAotCQkvKgotCQkgKiBpbml0c3BsYW4uYyBpcyBmYWlybHkgY2F2YWxpZXIgYWJvdXQg YWxsb3dpbmcgU3BlY2lhbEpvaW5JbmZvcycKLQkJICogbGVmdGhhbmQvcmlnaHRoYW5kIHJl bGlkIHNldHMgdG8gYmUgc2hhcmVkIHdpdGggb3RoZXIgZGF0YQotCQkgKiBzdHJ1Y3R1cmVz LiAgRW5zdXJlIHRoYXQgd2UgZG9uJ3QgbW9kaWZ5IHRoZSBvcmlnaW5hbCByZWxpZCBzZXRz LgotCQkgKiAoVGhlIGNvbW11dGVfeHh4IHNldHMgYXJlIGFsd2F5cyBwZXItU3BlY2lhbEpv aW5JbmZvIHRob3VnaC4pCi0JCSAqLwotCQlzamluZi0+bWluX2xlZnRoYW5kID0gYm1zX2Nv cHkoc2ppbmYtPm1pbl9sZWZ0aGFuZCk7Ci0JCXNqaW5mLT5taW5fcmlnaHRoYW5kID0gYm1z X2NvcHkoc2ppbmYtPm1pbl9yaWdodGhhbmQpOwotCQlzamluZi0+c3luX2xlZnRoYW5kID0g Ym1zX2NvcHkoc2ppbmYtPnN5bl9sZWZ0aGFuZCk7Ci0JCXNqaW5mLT5zeW5fcmlnaHRoYW5k ID0gYm1zX2NvcHkoc2ppbmYtPnN5bl9yaWdodGhhbmQpOwotCQkvKiBOb3cgcmVtb3ZlIHJl bGlkIGFuZCBvanJlbGlkIGJpdHMgZnJvbSB0aGUgc2V0czogKi8KLQkJc2ppbmYtPm1pbl9s ZWZ0aGFuZCA9IGJtc19kZWxfbWVtYmVyKHNqaW5mLT5taW5fbGVmdGhhbmQsIHJlbGlkKTsK LQkJc2ppbmYtPm1pbl9yaWdodGhhbmQgPSBibXNfZGVsX21lbWJlcihzamluZi0+bWluX3Jp Z2h0aGFuZCwgcmVsaWQpOwotCQlzamluZi0+c3luX2xlZnRoYW5kID0gYm1zX2RlbF9tZW1i ZXIoc2ppbmYtPnN5bl9sZWZ0aGFuZCwgcmVsaWQpOwotCQlzamluZi0+c3luX3JpZ2h0aGFu ZCA9IGJtc19kZWxfbWVtYmVyKHNqaW5mLT5zeW5fcmlnaHRoYW5kLCByZWxpZCk7Ci0JCXNq aW5mLT5taW5fbGVmdGhhbmQgPSBibXNfZGVsX21lbWJlcihzamluZi0+bWluX2xlZnRoYW5k LCBvanJlbGlkKTsKLQkJc2ppbmYtPm1pbl9yaWdodGhhbmQgPSBibXNfZGVsX21lbWJlcihz amluZi0+bWluX3JpZ2h0aGFuZCwgb2pyZWxpZCk7Ci0JCXNqaW5mLT5zeW5fbGVmdGhhbmQg PSBibXNfZGVsX21lbWJlcihzamluZi0+c3luX2xlZnRoYW5kLCBvanJlbGlkKTsKLQkJc2pp bmYtPnN5bl9yaWdodGhhbmQgPSBibXNfZGVsX21lbWJlcihzamluZi0+c3luX3JpZ2h0aGFu ZCwgb2pyZWxpZCk7CisJCXNqaW5mLT5taW5fbGVmdGhhbmQgPSByZXBsYWNlX3JlbGlkKHNq aW5mLT5taW5fbGVmdGhhbmQsIHJlbGlkLCBzdWJzdCk7CisJCXNqaW5mLT5taW5fcmlnaHRo YW5kID0gcmVwbGFjZV9yZWxpZChzamluZi0+bWluX3JpZ2h0aGFuZCwgcmVsaWQsIHN1YnN0 KTsKKwkJc2ppbmYtPnN5bl9sZWZ0aGFuZCA9IHJlcGxhY2VfcmVsaWQoc2ppbmYtPnN5bl9s ZWZ0aGFuZCwgcmVsaWQsIHN1YnN0KTsKKwkJc2ppbmYtPnN5bl9yaWdodGhhbmQgPSByZXBs YWNlX3JlbGlkKHNqaW5mLT5zeW5fcmlnaHRoYW5kLCByZWxpZCwgc3Vic3QpOworCQlzamlu Zi0+bWluX2xlZnRoYW5kID0gcmVwbGFjZV9yZWxpZChzamluZi0+bWluX2xlZnRoYW5kLCBv anJlbGlkLCBzdWJzdCk7CisJCXNqaW5mLT5taW5fcmlnaHRoYW5kID0gcmVwbGFjZV9yZWxp ZChzamluZi0+bWluX3JpZ2h0aGFuZCwgb2pyZWxpZCwgc3Vic3QpOworCQlzamluZi0+c3lu X2xlZnRoYW5kID0gcmVwbGFjZV9yZWxpZChzamluZi0+c3luX2xlZnRoYW5kLCBvanJlbGlk LCBzdWJzdCk7CisJCXNqaW5mLT5zeW5fcmlnaHRoYW5kID0gcmVwbGFjZV9yZWxpZChzamlu Zi0+c3luX3JpZ2h0aGFuZCwgb2pyZWxpZCwgc3Vic3QpOworCiAJCS8qIHJlbGlkIGNhbm5v dCBhcHBlYXIgaW4gdGhlc2UgZmllbGRzLCBidXQgb2pyZWxpZCBjYW46ICovCi0JCXNqaW5m LT5jb21tdXRlX2Fib3ZlX2wgPSBibXNfZGVsX21lbWJlcihzamluZi0+Y29tbXV0ZV9hYm92 ZV9sLCBvanJlbGlkKTsKLQkJc2ppbmYtPmNvbW11dGVfYWJvdmVfciA9IGJtc19kZWxfbWVt YmVyKHNqaW5mLT5jb21tdXRlX2Fib3ZlX3IsIG9qcmVsaWQpOwotCQlzamluZi0+Y29tbXV0 ZV9iZWxvd19sID0gYm1zX2RlbF9tZW1iZXIoc2ppbmYtPmNvbW11dGVfYmVsb3dfbCwgb2py ZWxpZCk7Ci0JCXNqaW5mLT5jb21tdXRlX2JlbG93X3IgPSBibXNfZGVsX21lbWJlcihzamlu Zi0+Y29tbXV0ZV9iZWxvd19yLCBvanJlbGlkKTsKKwkJc2ppbmYtPmNvbW11dGVfYWJvdmVf bCA9IHJlcGxhY2VfcmVsaWQoc2ppbmYtPmNvbW11dGVfYWJvdmVfbCwgb2pyZWxpZCwgc3Vi c3QpOworCQlzamluZi0+Y29tbXV0ZV9hYm92ZV9yID0gcmVwbGFjZV9yZWxpZChzamluZi0+ Y29tbXV0ZV9hYm92ZV9yLCBvanJlbGlkLCBzdWJzdCk7CisJCXNqaW5mLT5jb21tdXRlX2Jl bG93X2wgPSByZXBsYWNlX3JlbGlkKHNqaW5mLT5jb21tdXRlX2JlbG93X2wsIG9qcmVsaWQs IHN1YnN0KTsKKwkJc2ppbmYtPmNvbW11dGVfYmVsb3dfciA9IHJlcGxhY2VfcmVsaWQoc2pp bmYtPmNvbW11dGVfYmVsb3dfciwgb2pyZWxpZCwgc3Vic3QpOworCisJCWlmIChzdWJzdCA+ IDApCisJCQlDaGFuZ2VWYXJOb2RlcygoTm9kZSAqKSBzamluZi0+c2VtaV9yaHNfZXhwcnMs IHJlbGlkLCBzdWJzdCwgMCk7CiAJfQogCiAJLyoKQEAgLTM3NSwxMCArNDIyLDEwIEBAIHJl bW92ZV9yZWxfZnJvbV9xdWVyeShQbGFubmVySW5mbyAqcm9vdCwgaW50IHJlbGlkLCBTcGVj aWFsSm9pbkluZm8gKnNqaW5mbykKIAl7CiAJCVBsYWNlSG9sZGVySW5mbyAqcGhpbmZvID0g KFBsYWNlSG9sZGVySW5mbyAqKSBsZmlyc3QobCk7CiAKLQkJQXNzZXJ0KCFibXNfaXNfbWVt YmVyKHJlbGlkLCBwaGluZm8tPnBoX2xhdGVyYWwpKTsKKwkJQXNzZXJ0KHNqaW5mbyA9PSBO VUxMIHx8ICFibXNfaXNfbWVtYmVyKHJlbGlkLCBwaGluZm8tPnBoX2xhdGVyYWwpKTsKIAkJ aWYgKGJtc19pc19zdWJzZXQocGhpbmZvLT5waF9uZWVkZWQsIGpvaW5yZWxpZHMpICYmCiAJ CQlibXNfaXNfbWVtYmVyKHJlbGlkLCBwaGluZm8tPnBoX2V2YWxfYXQpICYmCi0JCQkhYm1z X2lzX21lbWJlcihvanJlbGlkLCBwaGluZm8tPnBoX2V2YWxfYXQpKQorCQkJKHNqaW5mbyA9 PSBOVUxMIHx8ICFibXNfaXNfbWVtYmVyKG9qcmVsaWQsIHBoaW5mby0+cGhfZXZhbF9hdCkp KQogCQl7CiAJCQlyb290LT5wbGFjZWhvbGRlcl9saXN0ID0gZm9yZWFjaF9kZWxldGVfY3Vy cmVudChyb290LT5wbGFjZWhvbGRlcl9saXN0LAogCQkJCQkJCQkJCQkJCQkJbCk7CkBAIC0z ODgsMjEgKzQzNSw3MyBAQCByZW1vdmVfcmVsX2Zyb21fcXVlcnkoUGxhbm5lckluZm8gKnJv b3QsIGludCByZWxpZCwgU3BlY2lhbEpvaW5JbmZvICpzamluZm8pCiAJCXsKIAkJCVBsYWNl SG9sZGVyVmFyICpwaHYgPSBwaGluZm8tPnBoX3ZhcjsKIAotCQkJcGhpbmZvLT5waF9ldmFs X2F0ID0gYm1zX2RlbF9tZW1iZXIocGhpbmZvLT5waF9ldmFsX2F0LCByZWxpZCk7Ci0JCQlw aGluZm8tPnBoX2V2YWxfYXQgPSBibXNfZGVsX21lbWJlcihwaGluZm8tPnBoX2V2YWxfYXQs IG9qcmVsaWQpOworCQkJcGhpbmZvLT5waF9ldmFsX2F0ID0gcmVwbGFjZV9yZWxpZChwaGlu Zm8tPnBoX2V2YWxfYXQsIHJlbGlkLCBzdWJzdCk7CisJCQlwaGluZm8tPnBoX2V2YWxfYXQg PSByZXBsYWNlX3JlbGlkKHBoaW5mby0+cGhfZXZhbF9hdCwgb2pyZWxpZCwgc3Vic3QpOwog CQkJQXNzZXJ0KCFibXNfaXNfZW1wdHkocGhpbmZvLT5waF9ldmFsX2F0KSk7CS8qIGNoZWNr ZWQgcHJldmlvdXNseSAqLwogCQkJLyogUmVkdWNlIHBoX25lZWRlZCB0byBjb250YWluIG9u bHkgInJlbGF0aW9uIDAiOyBzZWUgYmVsb3cgKi8KIAkJCWlmIChibXNfaXNfbWVtYmVyKDAs IHBoaW5mby0+cGhfbmVlZGVkKSkKIAkJCQlwaGluZm8tPnBoX25lZWRlZCA9IGJtc19tYWtl X3NpbmdsZXRvbigwKTsKIAkJCWVsc2UKIAkJCQlwaGluZm8tPnBoX25lZWRlZCA9IE5VTEw7 Ci0JCQlwaHYtPnBocmVscyA9IGJtc19kZWxfbWVtYmVyKHBodi0+cGhyZWxzLCByZWxpZCk7 Ci0JCQlwaHYtPnBocmVscyA9IGJtc19kZWxfbWVtYmVyKHBodi0+cGhyZWxzLCBvanJlbGlk KTsKKworCQkJcGhpbmZvLT5waF9sYXRlcmFsID0gcmVwbGFjZV9yZWxpZChwaGluZm8tPnBo X2xhdGVyYWwsIHJlbGlkLCBzdWJzdCk7CisJCQkvKgorCQkJICogcGhfbGF0ZXJhbCBtaWdo dCBjb250YWluIHJlbHMgbWVudGlvbmVkIGluIHBoX2V2YWxfYXQgYWZ0ZXIgdGhlCisJCQkg KiByZXBsYWNlbWVudCwgcmVtb3ZlIHRoZW0uCisJCQkgKi8KKwkJCXBoaW5mby0+cGhfbGF0 ZXJhbCA9IGJtc19kaWZmZXJlbmNlKHBoaW5mby0+cGhfbGF0ZXJhbCwgcGhpbmZvLT5waF9l dmFsX2F0KTsKKwkJCS8qIHBoX2xhdGVyYWwgbWlnaHQgb3IgbWlnaHQgbm90IGJlIGVtcHR5 ICovCisKKwkJCXBodi0+cGhyZWxzID0gcmVwbGFjZV9yZWxpZChwaHYtPnBocmVscywgcmVs aWQsIHN1YnN0KTsKKwkJCXBodi0+cGhyZWxzID0gcmVwbGFjZV9yZWxpZChwaHYtPnBocmVs cywgb2pyZWxpZCwgc3Vic3QpOwogCQkJQXNzZXJ0KCFibXNfaXNfZW1wdHkocGh2LT5waHJl bHMpKTsKKworCQkJQ2hhbmdlVmFyTm9kZXMoKE5vZGUgKikgcGh2LT5waGV4cHIsIHJlbGlk LCBzdWJzdCwgMCk7CisKIAkJCUFzc2VydChwaHYtPnBobnVsbGluZ3JlbHMgPT0gTlVMTCk7 IC8qIG5vIG5lZWQgdG8gYWRqdXN0ICovCiAJCX0KIAl9CiAKKwkJZm9yIChydGkgPSAxOyBy dGkgPCByb290LT5zaW1wbGVfcmVsX2FycmF5X3NpemU7IHJ0aSsrKQorCXsKKwkJUmVsT3B0 SW5mbyAqb3RoZXJyZWwgPSByb290LT5zaW1wbGVfcmVsX2FycmF5W3J0aV07CisKKwkJaWYg KG90aGVycmVsID09IE5VTEwpCisJCQljb250aW51ZTsKKworCQkvKiBVcGRhdGUgbGF0ZXJh bF92YXJzIGxpc3QuICovCisJCWlmIChzdWJzdCA+IDApCisJCQlDaGFuZ2VWYXJOb2Rlcygo Tm9kZSAqKSBvdGhlcnJlbC0+bGF0ZXJhbF92YXJzLCByZWxpZCwgc3Vic3QsIDApOworCX0K K30KKworLyoKKyAqIFJlbW92ZSB0aGUgdGFyZ2V0IHJlbGlkIGFuZCByZWZlcmVuY2VzIHRv IHRoZSB0YXJnZXQgam9pbiBmcm9tIHRoZQorICogcGxhbm5lcidzIGRhdGEgc3RydWN0dXJl cywgaGF2aW5nIGRldGVybWluZWQgdGhhdCB0aGVyZSBpcyBubyBuZWVkCisgKiB0byBpbmNs dWRlIHRoZW0gaW4gdGhlIHF1ZXJ5LgorICoKKyAqIFdlIGFyZSBub3QgdGVycmlibHkgdGhv cm91Z2ggaGVyZS4gIFdlIG9ubHkgYm90aGVyIHRvIHVwZGF0ZSBwYXJ0cyBvZgorICogdGhl IHBsYW5uZXIncyBkYXRhIHN0cnVjdHVyZXMgdGhhdCB3aWxsIGFjdHVhbGx5IGJlIGNvbnN1 bHRlZCBsYXRlci4KKyAqLworc3RhdGljIHZvaWQKK3JlbW92ZV9sZWZ0am9pbnJlbF9mcm9t X3F1ZXJ5KFBsYW5uZXJJbmZvICpyb290LCBpbnQgcmVsaWQsCisJCQkJCQkJICBTcGVjaWFs Sm9pbkluZm8gKnNqaW5mbykKK3sKKwlMaXN0CSAgICpqb2luaW5mb3M7CisJaW50CQkJb2py ZWxpZCA9IHNqaW5mby0+b2pyZWxpZDsKKwlSZWxPcHRJbmZvICpyZWwgPSBmaW5kX2Jhc2Vf cmVsKHJvb3QsIHJlbGlkKTsKKwlSZWxpZHMJCWpvaW5fcGx1c19jb21tdXRlOworCVJlbGlk cwkJam9pbnJlbGlkczsKKwlJbmRleAkJcnRpOworCUxpc3RDZWxsICAgKmw7CisKKwkvKiBD b21wdXRlIHRoZSByZWxpZCBzZXQgZm9yIHRoZSBqb2luIHdlIGFyZSBjb25zaWRlcmluZyAq LworCWpvaW5yZWxpZHMgPSBibXNfdW5pb24oc2ppbmZvLT5taW5fbGVmdGhhbmQsIHNqaW5m by0+bWluX3JpZ2h0aGFuZCk7CisJQXNzZXJ0KG9qcmVsaWQgIT0gMCk7CisJam9pbnJlbGlk cyA9IGJtc19hZGRfbWVtYmVyKGpvaW5yZWxpZHMsIG9qcmVsaWQpOworCisJcmVtb3ZlX3Jl bF9mcm9tX3F1ZXJ5KHJvb3QsIHJlbCwgLTEsIHNqaW5mbywgam9pbnJlbGlkcyk7CisKIAkv KgogCSAqIFJlbW92ZSBhbnkgam9pbnF1YWxzIHJlZmVyZW5jaW5nIHRoZSByZWwgZnJvbSB0 aGUgam9pbmluZm8gbGlzdHMuCiAJICoKQEAgLTg0NCw5ICs5NDMsMTQgQEAgcmVsX3N1cHBv cnRzX2Rpc3RpbmN0bmVzcyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsKQog ICogTm90ZSB0aGF0IHRoZSBwYXNzZWQtaW4gY2xhdXNlX2xpc3QgbWF5IGJlIGRlc3RydWN0 aXZlbHkgbW9kaWZpZWQhICBUaGlzCiAgKiBpcyBPSyBmb3IgY3VycmVudCB1c2VzLCBiZWNh dXNlIHRoZSBjbGF1c2VfbGlzdCBpcyBidWlsdCBieSB0aGUgY2FsbGVyIGZvcgogICogdGhl IHNvbGUgcHVycG9zZSBvZiBwYXNzaW5nIHRvIHRoaXMgZnVuY3Rpb24uCisgKgorICogZXh0 cmFfY2xhdXNlcyBjb250YWlucyB0aGUgcmlnaHQgc2lkZXMgb2YgYmFzZXJlc3RyaWN0aW5m byBjbGF1c2VzIGxvb2tpbmcKKyAqIGxpa2UgeCA9IGNvbnN0IGlmIGRpc3RpbmN0bmVzcyBp cyBkZXJpdmVkIGZyb20gc3VjaCBjbGF1c2VzLCBub3Qgam9pbmluZm8KKyAqIGNsYXVzZS4g IFBhc3MgTlVMTCB0byB0aGUgZXh0cmFfY2xhdXNlcywgaWYgaXRzIHZhbHVlIGlzIG5vdCBu ZWVkZWQuCiAgKi8KIHN0YXRpYyBib29sCi1yZWxfaXNfZGlzdGluY3RfZm9yKFBsYW5uZXJJ bmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsIExpc3QgKmNsYXVzZV9saXN0KQorcmVsX2lz X2Rpc3RpbmN0X2ZvcihQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLCBMaXN0 ICpjbGF1c2VfbGlzdCwKKwkJCQkJTGlzdCAqKmV4dHJhX2NsYXVzZXMpCiB7CiAJLyoKIAkg KiBXZSBjb3VsZCBza2lwIGEgY291cGxlIG9mIHRlc3RzIGhlcmUgaWYgd2UgYXNzdW1lIGFs bCBjYWxsZXJzIGNoZWNrZWQKQEAgLTg1OSwxMCArOTYzLDExIEBAIHJlbF9pc19kaXN0aW5j dF9mb3IoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwgTGlzdCAqY2xhdXNl X2xpc3QpCiAJewogCQkvKgogCQkgKiBFeGFtaW5lIHRoZSBpbmRleGVzIHRvIHNlZSBpZiB3 ZSBoYXZlIGEgbWF0Y2hpbmcgdW5pcXVlIGluZGV4LgotCQkgKiByZWxhdGlvbl9oYXNfdW5p cXVlX2luZGV4X2ZvciBhdXRvbWF0aWNhbGx5IGFkZHMgYW55IHVzYWJsZQorCQkgKiByZWxh dGlvbl9oYXNfdW5pcXVlX2luZGV4X2V4dCBhdXRvbWF0aWNhbGx5IGFkZHMgYW55IHVzYWJs ZQogCQkgKiByZXN0cmljdGlvbiBjbGF1c2VzIGZvciB0aGUgcmVsLCBzbyB3ZSBuZWVkbid0 IGRvIHRoYXQgaGVyZS4KIAkJICovCi0JCWlmIChyZWxhdGlvbl9oYXNfdW5pcXVlX2luZGV4 X2Zvcihyb290LCByZWwsIGNsYXVzZV9saXN0LCBOSUwsIE5JTCkpCisJCWlmIChyZWxhdGlv bl9oYXNfdW5pcXVlX2luZGV4X2V4dChyb290LCByZWwsIGNsYXVzZV9saXN0LCBOSUwsIE5J TCwKKwkJCQkJCQkJCQkgIGV4dHJhX2NsYXVzZXMpKQogCQkJcmV0dXJuIHRydWU7CiAJfQog CWVsc2UgaWYgKHJlbC0+cnRla2luZCA9PSBSVEVfU1VCUVVFUlkpCkBAIC0xMTc2LDEyICsx MjgxLDQwIEBAIGlubmVycmVsX2lzX3VuaXF1ZShQbGFubmVySW5mbyAqcm9vdCwKIAkJCQkg ICBKb2luVHlwZSBqb2ludHlwZSwKIAkJCQkgICBMaXN0ICpyZXN0cmljdGxpc3QsCiAJCQkJ ICAgYm9vbCBmb3JjZV9jYWNoZSkKK3sKKwlyZXR1cm4gaW5uZXJyZWxfaXNfdW5pcXVlX2V4 dChyb290LCBqb2lucmVsaWRzLCBvdXRlcnJlbGlkcywgaW5uZXJyZWwsCisJCQkJCQkJCSAg am9pbnR5cGUsIHJlc3RyaWN0bGlzdCwgZm9yY2VfY2FjaGUsIE5VTEwpOworfQorCisvKgor ICogaW5uZXJyZWxfaXNfdW5pcXVlX2V4dAorICoJICBEbyB0aGUgc2FtZSBhcyBpbm5lcnJl bF9pc191bmlxdWUoKSwgYnV0IGFsc28gc2V0IHRvICcqZXh0cmFfY2xhdXNlcycKKyAqCSAg YWRkaXRpb25hbCBjbGF1c2VzIGZyb20gYSBiYXNlcmVzdHJpY3RpbmZvIGxpc3QgdGhhdCB3 ZXJlIHVzZWQgdG8gcHJvdmUKKyAqCSAgdW5pcXVlbmVzcy4gIEEgbm9uIE5VTEwgJ2V4dHJh X2NsYXVzZXMnIGluZGljYXRlcyB0aGF0IHdlJ3JlIGNoZWNraW5nCisgKgkgIGZvciBzZWxm LWpvaW4gYW5kIGNvcnJlc3BvbmRpbmdseSBkZWFsaW5nIHdpdGggZmlsdGVyZWQgY2xhdXNl cy4KKyAqLworYm9vbAoraW5uZXJyZWxfaXNfdW5pcXVlX2V4dChQbGFubmVySW5mbyAqcm9v dCwKKwkJCQkJICAgUmVsaWRzIGpvaW5yZWxpZHMsCisJCQkJCSAgIFJlbGlkcyBvdXRlcnJl bGlkcywKKwkJCQkJICAgUmVsT3B0SW5mbyAqaW5uZXJyZWwsCisJCQkJCSAgIEpvaW5UeXBl IGpvaW50eXBlLAorCQkJCQkgICBMaXN0ICpyZXN0cmljdGxpc3QsCisJCQkJCSAgIGJvb2wg Zm9yY2VfY2FjaGUsCisJCQkJCSAgIExpc3QgKipleHRyYV9jbGF1c2VzKQogewogCU1lbW9y eUNvbnRleHQgb2xkX2NvbnRleHQ7CiAJTGlzdENlbGwgICAqbGM7CisJVW5pcXVlUmVsSW5m byAqdW5pcXVlUmVsSW5mbzsKKwlMaXN0CSAgICpvdXRlcl9leHBycyA9IE5JTDsKKwlib29s CQlzZWxmX2pvaW4gPSAoZXh0cmFfY2xhdXNlcyAhPSBOVUxMKTsKIAotCS8qIENlcnRhaW5s eSBjYW4ndCBwcm92ZSB1bmlxdWVuZXNzIHdoZW4gdGhlcmUgYXJlIG5vIGpvaW5jbGF1c2Vz ICovCi0JaWYgKHJlc3RyaWN0bGlzdCA9PSBOSUwpCisJLyoKKwkgKiBEb24ndCB3YXN0ZSBj eWNsZXMgYXR0ZW1wdGluZyB0byBwcm92ZSB1bmlxdWVuZXNzIHdoZW4gdGhlcmUgYXJlIG5v IGpvaW4KKwkgKiBjbGF1c2VzLiBTdGlsbCwgdHJ5IHRvIGRvIGl0IGluIGFuIGF0dGVtcHQg dG8gcmVtb3ZlIGEgam9pbiBiZWNhdXNlIGEKKwkgKiBkZWdlbmVyYXRlIGNhc2UgY2FuIHRh a2UgcGxhY2UgYW5kIG1heSBiZSBwcm9maXRhYmxlIGZvciB0aGUgcGVyZm9ybWFuY2UuCisJ ICovCisJaWYgKHJlc3RyaWN0bGlzdCA9PSBOSUwgJiYgIXNlbGZfam9pbikKIAkJcmV0dXJu IGZhbHNlOwogCiAJLyoKQEAgLTExOTMsMTcgKzEzMjYsMjggQEAgaW5uZXJyZWxfaXNfdW5p cXVlKFBsYW5uZXJJbmZvICpyb290LAogCiAJLyoKIAkgKiBRdWVyeSB0aGUgY2FjaGUgdG8g c2VlIGlmIHdlJ3ZlIG1hbmFnZWQgdG8gcHJvdmUgdGhhdCBpbm5lcnJlbCBpcwotCSAqIHVu aXF1ZSBmb3IgYW55IHN1YnNldCBvZiB0aGlzIG91dGVycmVsLiAgV2UgZG9uJ3QgbmVlZCBh biBleGFjdCBtYXRjaCwKLQkgKiBhcyBleHRyYSBvdXRlcnJlbHMgY2FuJ3QgbWFrZSB0aGUg aW5uZXJyZWwgYW55IGxlc3MgdW5pcXVlIChvciBtb3JlCi0JICogZm9ybWFsbHksIHRoZSBy ZXN0cmljdGxpc3QgZm9yIGEgam9pbiB0byBhIHN1cGVyc2V0IG91dGVycmVsIG11c3QgYmUg YQotCSAqIHN1cGVyc2V0IG9mIHRoZSBjb25kaXRpb25zIHdlIHN1Y2Nlc3NmdWxseSB1c2Vk IGJlZm9yZSkuCisJICogdW5pcXVlIGZvciBhbnkgc3Vic2V0IG9mIHRoaXMgb3V0ZXJyZWwu ICBGb3Igbm9uIHNlbGYtam9pbiBzZWFyY2gsIHdlCisJICogZG9uJ3QgbmVlZCBhbiBleGFj dCBtYXRjaCwgYXMgZXh0cmEgb3V0ZXJyZWxzIGNhbid0IG1ha2UgdGhlIGlubmVycmVsCisJ ICogYW55IGxlc3MgdW5pcXVlIChvciBtb3JlIGZvcm1hbGx5LCB0aGUgcmVzdHJpY3RsaXN0 IGZvciBhIGpvaW4gdG8gYQorCSAqIHN1cGVyc2V0IG91dGVycmVsIG11c3QgYmUgYSBzdXBl cnNldCBvZiB0aGUgY29uZGl0aW9ucyB3ZSBzdWNjZXNzZnVsbHkKKwkgKiB1c2VkIGJlZm9y ZSkuIEZvciBzZWxmLWpvaW4gc2VhcmNoLCB3ZSByZXF1aXJlIGFuIGV4YWN0IG1hdGNoIG9m CisJICogb3V0ZXJyZWxzLCBiZWNhdXNlIHdlIG5lZWQgZXh0cmEgY2xhdXNlcyB0byBiZSB2 YWxpZCBmb3Igb3VyIGNhc2UuCisJICogQWxzbywgZm9yIHNlbGYtam9pbiBjaGVja2luZyB3 ZSd2ZSBmaWx0ZXJlZCB0aGUgY2xhdXNlcyBsaXN0LiAgVGh1cywKKwkgKiBmb3IgYSBzZWxm LWpvaW4gc2VhcmNoLCB3ZSBjYW4gbWF0Y2ggb25seSB0aGUgcmVzdWx0IGNhY2hlZCBmb3Ig YW5vdGhlcgorCSAqIHNlbGYtam9pbiBjaGVjay4KIAkgKi8KIAlmb3JlYWNoKGxjLCBpbm5l cnJlbC0+dW5pcXVlX2Zvcl9yZWxzKQogCXsKLQkJUmVsaWRzCQl1bmlxdWVfZm9yX3JlbHMg PSAoUmVsaWRzKSBsZmlyc3QobGMpOworCQl1bmlxdWVSZWxJbmZvID0gKFVuaXF1ZVJlbElu Zm8gKikgbGZpcnN0KGxjKTsKIAotCQlpZiAoYm1zX2lzX3N1YnNldCh1bmlxdWVfZm9yX3Jl bHMsIG91dGVycmVsaWRzKSkKKwkJaWYgKCghc2VsZl9qb2luICYmIGJtc19pc19zdWJzZXQo dW5pcXVlUmVsSW5mby0+b3V0ZXJyZWxpZHMsIG91dGVycmVsaWRzKSkgfHwKKwkJCShzZWxm X2pvaW4gJiYgYm1zX2VxdWFsKHVuaXF1ZVJlbEluZm8tPm91dGVycmVsaWRzLCBvdXRlcnJl bGlkcykgJiYKKwkJCSB1bmlxdWVSZWxJbmZvLT5zZWxmX2pvaW4pKQorCQl7CisJCQlpZiAo ZXh0cmFfY2xhdXNlcykKKwkJCQkqZXh0cmFfY2xhdXNlcyA9IHVuaXF1ZVJlbEluZm8tPmV4 dHJhX2NsYXVzZXM7CiAJCQlyZXR1cm4gdHJ1ZTsJCS8qIFN1Y2Nlc3MhICovCisJCX0KIAl9 CiAKIAkvKgpAQCAtMTIyMCw3ICsxMzY0LDggQEAgaW5uZXJyZWxfaXNfdW5pcXVlKFBsYW5u ZXJJbmZvICpyb290LAogCiAJLyogTm8gY2FjaGVkIGluZm9ybWF0aW9uLCBzbyB0cnkgdG8g bWFrZSB0aGUgcHJvb2YuICovCiAJaWYgKGlzX2lubmVycmVsX3VuaXF1ZV9mb3Iocm9vdCwg am9pbnJlbGlkcywgb3V0ZXJyZWxpZHMsIGlubmVycmVsLAotCQkJCQkJCSAgIGpvaW50eXBl LCByZXN0cmljdGxpc3QpKQorCQkJCQkJCSAgIGpvaW50eXBlLCByZXN0cmljdGxpc3QsCisJ CQkJCQkJICAgc2VsZl9qb2luID8gJm91dGVyX2V4cHJzIDogTlVMTCkpCiAJewogCQkvKgog CQkgKiBDYWNoZSB0aGUgcG9zaXRpdmUgcmVzdWx0IGZvciBmdXR1cmUgcHJvYmVzLCBiZWlu ZyBzdXJlIHRvIGtlZXAgaXQKQEAgLTEyMzMsMTAgKzEzNzgsMTYgQEAgaW5uZXJyZWxfaXNf dW5pcXVlKFBsYW5uZXJJbmZvICpyb290LAogCQkgKiBzdXBlcnNldHMgb2YgdGhlbSBhbnl3 YXkuCiAJCSAqLwogCQlvbGRfY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhyb290 LT5wbGFubmVyX2N4dCk7CisJCXVuaXF1ZVJlbEluZm8gPSBtYWtlTm9kZShVbmlxdWVSZWxJ bmZvKTsKKwkJdW5pcXVlUmVsSW5mby0+b3V0ZXJyZWxpZHMgPSBibXNfY29weShvdXRlcnJl bGlkcyk7CisJCXVuaXF1ZVJlbEluZm8tPnNlbGZfam9pbiA9IHNlbGZfam9pbjsKKwkJdW5p cXVlUmVsSW5mby0+ZXh0cmFfY2xhdXNlcyA9IG91dGVyX2V4cHJzOwogCQlpbm5lcnJlbC0+ dW5pcXVlX2Zvcl9yZWxzID0gbGFwcGVuZChpbm5lcnJlbC0+dW5pcXVlX2Zvcl9yZWxzLAot CQkJCQkJCQkJCQlibXNfY29weShvdXRlcnJlbGlkcykpOworCQkJCQkJCQkJCQl1bmlxdWVS ZWxJbmZvKTsKIAkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZF9jb250ZXh0KTsKIAorCQlp ZiAoZXh0cmFfY2xhdXNlcykKKwkJCSpleHRyYV9jbGF1c2VzID0gb3V0ZXJfZXhwcnM7CiAJ CXJldHVybiB0cnVlOwkJCS8qIFN1Y2Nlc3MhICovCiAJfQogCWVsc2UKQEAgLTEyODIsNyAr MTQzMyw4IEBAIGlzX2lubmVycmVsX3VuaXF1ZV9mb3IoUGxhbm5lckluZm8gKnJvb3QsCiAJ CQkJCSAgIFJlbGlkcyBvdXRlcnJlbGlkcywKIAkJCQkJICAgUmVsT3B0SW5mbyAqaW5uZXJy ZWwsCiAJCQkJCSAgIEpvaW5UeXBlIGpvaW50eXBlLAotCQkJCQkgICBMaXN0ICpyZXN0cmlj dGxpc3QpCisJCQkJCSAgIExpc3QgKnJlc3RyaWN0bGlzdCwKKwkJCQkJICAgTGlzdCAqKmV4 dHJhX2NsYXVzZXMpCiB7CiAJTGlzdAkgICAqY2xhdXNlX2xpc3QgPSBOSUw7CiAJTGlzdENl bGwgICAqbGM7CkBAIC0xMzEyLDE3ICsxNDY0LDg3NCBAQCBpc19pbm5lcnJlbF91bmlxdWVf Zm9yKFBsYW5uZXJJbmZvICpyb290LAogCQkJY29udGludWU7CQkJLyogbm90IG1lcmdlam9p bmFibGUgKi8KIAogCQkvKgotCQkgKiBDaGVjayBpZiBjbGF1c2UgaGFzIHRoZSBmb3JtICJv dXRlciBvcCBpbm5lciIgb3IgImlubmVyIG9wIG91dGVyIiwKLQkJICogYW5kIGlmIHNvIG1h cmsgd2hpY2ggc2lkZSBpcyBpbm5lci4KKwkJICogQ2hlY2sgaWYgdGhlIGNsYXVzZSBoYXMg dGhlIGZvcm0gIm91dGVyIG9wIGlubmVyIiBvciAiaW5uZXIgb3AKKwkJICogb3V0ZXIiLCBh bmQgaWYgc28gbWFyayB3aGljaCBzaWRlIGlzIGlubmVyLgogCQkgKi8KIAkJaWYgKCFjbGF1 c2Vfc2lkZXNfbWF0Y2hfam9pbihyZXN0cmljdGluZm8sIG91dGVycmVsaWRzLAogCQkJCQkJ CQkJIGlubmVycmVsLT5yZWxpZHMpKQogCQkJY29udGludWU7CQkJLyogbm8gZ29vZCBmb3Ig dGhlc2UgaW5wdXQgcmVsYXRpb25zICovCiAKLQkJLyogT0ssIGFkZCB0byBsaXN0ICovCisJ CS8qIE9LLCBhZGQgdG8gdGhlIGxpc3QgKi8KIAkJY2xhdXNlX2xpc3QgPSBsYXBwZW5kKGNs YXVzZV9saXN0LCByZXN0cmljdGluZm8pOwogCX0KIAogCS8qIExldCByZWxfaXNfZGlzdGlu Y3RfZm9yKCkgZG8gdGhlIGhhcmQgd29yayAqLwotCXJldHVybiByZWxfaXNfZGlzdGluY3Rf Zm9yKHJvb3QsIGlubmVycmVsLCBjbGF1c2VfbGlzdCk7CisJcmV0dXJuIHJlbF9pc19kaXN0 aW5jdF9mb3Iocm9vdCwgaW5uZXJyZWwsIGNsYXVzZV9saXN0LCBleHRyYV9jbGF1c2VzKTsK K30KKworLyoKKyAqIFVwZGF0ZSBFQyBtZW1iZXJzIHRvIHBvaW50IHRvIHRoZSByZW1haW5p bmcgcmVsYXRpb24gaW5zdGVhZCBvZiB0aGUgcmVtb3ZlZAorICogb25lLCByZW1vdmluZyBk dXBsaWNhdGVzLgorICoKKyAqIFJlc3RyaWN0aW9uIGNsYXVzZXMgZm9yIGJhc2UgcmVsYXRp b25zIGFyZSBhbHJlYWR5IGRpc3RyaWJ1dGVkIHRvCisgKiB0aGUgcmVzcGVjdGl2ZSBiYXNl cmVzdHJpY3RpbmZvIGxpc3RzIChzZWUKKyAqIGdlbmVyYXRlX2ltcGxpZWRfZXF1YWxpdGll c19mb3JfY29sdW1uKS4gVGhlIGFib3ZlIGNvZGUgaGFzIGFscmVhZHkgcHJvY2Vzc2VkCisg KiB0aGlzIGxpc3QsIGFuZCB1cGRhdGVkIHRoZXNlIGNsYXVzZXMgdG8gcmVmZXJlbmNlIHRo ZSByZW1haW5pbmcKKyAqIHJlbGF0aW9uLCBzbyB3ZSBjYW4gc2tpcCB0aGVtIGhlcmUgYmFz ZWQgb24gdGhlaXIgcmVsaWRzLgorICoKKyAqIExpa2V3aXNlLCB3ZSBoYXZlIGFscmVhZHkg cHJvY2Vzc2VkIHRoZSBqb2luIGNsYXVzZXMgdGhhdCBqb2luIHRoZQorICogcmVtb3ZlZCBy ZWxhdGlvbiB0byB0aGUgcmVtYWluaW5nIG9uZS4KKyAqCisgKiBGaW5hbGx5LCB0aGVyZSBh cmUgam9pbiBjbGF1c2VzIHRoYXQgam9pbiB0aGUgcmVtb3ZlZCByZWxhdGlvbiB0bworICog c29tZSB0aGlyZCByZWxhdGlvbi4gV2UgY2FuJ3QganVzdCBkZWxldGUgdGhlIHNvdXJjZSBj bGF1c2VzIGFuZAorICogcmVnZW5lcmF0ZSB0aGVtIGZyb20gdGhlIEVDIGJlY2F1c2UgdGhl IGNvcnJlc3BvbmRpbmcgZXF1YWxpdHkKKyAqIG9wZXJhdG9ycyBtaWdodCBiZSBtaXNzaW5n IChzZWUgdGhlIGhhbmRsaW5nIG9mIGVjX2Jyb2tlbikuCisgKiBUaGVyZWZvcmUsIHdlIHdp bGwgdXBkYXRlIHRoZSByZWZlcmVuY2VzIGluIHRoZSBzb3VyY2UgY2xhdXNlcy4KKyAqCisg KiBEZXJpdmVkIGNsYXVzZXMgY2FuIGJlIGdlbmVyYXRlZCBhZ2Fpbiwgc28gaXQgaXMgc2lt cGxlciB0byBqdXN0CisgKiBkZWxldGUgdGhlbS4KKyAqLworc3RhdGljIHZvaWQKK3VwZGF0 ZV9lY2xhc3NlcyhFcXVpdmFsZW5jZUNsYXNzICplYywgaW50IGZyb20sIGludCB0bykKK3sK KwlMaXN0CSAgICpuZXdfbWVtYmVycyA9IE5JTDsKKwlMaXN0CSAgICpuZXdfc291cmNlcyA9 IE5JTDsKKworCWZvcmVhY2hfbm9kZShFcXVpdmFsZW5jZU1lbWJlciwgZW0sIGVjLT5lY19t ZW1iZXJzKQorCXsKKwkJYm9vbAkJaXNfcmVkdW5kYW50ID0gZmFsc2U7CisKKwkJaWYgKCFi bXNfaXNfbWVtYmVyKGZyb20sIGVtLT5lbV9yZWxpZHMpKQorCQl7CisJCQluZXdfbWVtYmVy cyA9IGxhcHBlbmQobmV3X21lbWJlcnMsIGVtKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJ ZW0tPmVtX3JlbGlkcyA9IHJlcGxhY2VfcmVsaWQoZW0tPmVtX3JlbGlkcywgZnJvbSwgdG8p OworCQllbS0+ZW1famRvbWFpbi0+amRfcmVsaWRzID0gcmVwbGFjZV9yZWxpZChlbS0+ZW1f amRvbWFpbi0+amRfcmVsaWRzLCBmcm9tLCB0byk7CisKKwkJLyogV2Ugb25seSBwcm9jZXNz IGlubmVyIGpvaW5zICovCisJCUNoYW5nZVZhck5vZGVzKChOb2RlICopIGVtLT5lbV9leHBy LCBmcm9tLCB0bywgMCk7CisKKwkJZm9yZWFjaF9ub2RlKEVxdWl2YWxlbmNlTWVtYmVyLCBv dGhlciwgbmV3X21lbWJlcnMpCisJCXsKKwkJCWlmICghZXF1YWwoZW0tPmVtX3JlbGlkcywg b3RoZXItPmVtX3JlbGlkcykpCisJCQkJY29udGludWU7CisKKwkJCWlmIChlcXVhbChlbS0+ ZW1fZXhwciwgb3RoZXItPmVtX2V4cHIpKQorCQkJeworCQkJCWlzX3JlZHVuZGFudCA9IHRy dWU7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQlpZiAoIWlzX3JlZHVuZGFudCkKKwkJ CW5ld19tZW1iZXJzID0gbGFwcGVuZChuZXdfbWVtYmVycywgZW0pOworCX0KKworCWxpc3Rf ZnJlZShlYy0+ZWNfbWVtYmVycyk7CisJZWMtPmVjX21lbWJlcnMgPSBuZXdfbWVtYmVyczsK KworCWxpc3RfZnJlZShlYy0+ZWNfZGVyaXZlcyk7CisJZWMtPmVjX2Rlcml2ZXMgPSBOVUxM OworCisJLyogVXBkYXRlIEVDIHNvdXJjZSBleHByZXNzaW9ucyAqLworCWZvcmVhY2hfbm9k ZShSZXN0cmljdEluZm8sIHJpbmZvLCBlYy0+ZWNfc291cmNlcykKKwl7CisJCWJvb2wJCWlz X3JlZHVuZGFudCA9IGZhbHNlOworCisJCWlmICghYm1zX2lzX21lbWJlcihmcm9tLCByaW5m by0+cmVxdWlyZWRfcmVsaWRzKSkKKwkJeworCQkJbmV3X3NvdXJjZXMgPSBsYXBwZW5kKG5l d19zb3VyY2VzLCByaW5mbyk7CisJCQljb250aW51ZTsKKwkJfQorCisJCUNoYW5nZVZhck5v ZGVzKChOb2RlICopIHJpbmZvLCBmcm9tLCB0bywgMCk7CisKKwkJLyoKKwkJICogQWZ0ZXIg c3dpdGNoaW5nIHRoZSBjbGF1c2UgdG8gdGhlIHJlbWFpbmluZyByZWxhdGlvbiwgY2hlY2sg aXQgZm9yCisJCSAqIHJlZHVuZGFuY3kgd2l0aCBleGlzdGluZyBvbmVzLiBXZSBkb24ndCBo YXZlIHRvIGNoZWNrIGZvcgorCQkgKiByZWR1bmRhbmN5IHdpdGggZGVyaXZlZCBjbGF1c2Vz LCBiZWNhdXNlIHdlJ3ZlIGp1c3QgZGVsZXRlZCB0aGVtLgorCQkgKi8KKwkJZm9yZWFjaF9u b2RlKFJlc3RyaWN0SW5mbywgb3RoZXIsIG5ld19zb3VyY2VzKQorCQl7CisJCQlpZiAoIWVx dWFsKHJpbmZvLT5jbGF1c2VfcmVsaWRzLCBvdGhlci0+Y2xhdXNlX3JlbGlkcykpCisJCQkJ Y29udGludWU7CisKKwkJCWlmIChlcXVhbChyaW5mby0+Y2xhdXNlLCBvdGhlci0+Y2xhdXNl KSkKKwkJCXsKKwkJCQlpc19yZWR1bmRhbnQgPSB0cnVlOworCQkJCWJyZWFrOworCQkJfQor CQl9CisKKwkJaWYgKCFpc19yZWR1bmRhbnQpCisJCQluZXdfc291cmNlcyA9IGxhcHBlbmQo bmV3X3NvdXJjZXMsIHJpbmZvKTsKKwl9CisKKwlsaXN0X2ZyZWUoZWMtPmVjX3NvdXJjZXMp OworCWVjLT5lY19zb3VyY2VzID0gbmV3X3NvdXJjZXM7CisJZWMtPmVjX3JlbGlkcyA9IHJl cGxhY2VfcmVsaWQoZWMtPmVjX3JlbGlkcywgZnJvbSwgdG8pOworfQorCisvKgorICogIkxv Z2ljYWxseSIgY29tcGFyZXMgdHdvIFJlc3RyaWN0SW5mbydzIGlnbm9yaW5nIHRoZSAncmlu Zm9fc2VyaWFsJyBmaWVsZCwKKyAqIHdoaWNoIG1ha2VzIGFsbW9zdCBldmVyeSBSZXN0cmlj dEluZm8gdW5pcXVlLiAgVGhpcyB0eXBlIG9mIGNvbXBhcmlzb24gaXMKKyAqIHVzZWZ1bCB3 aGVuIHJlbW92aW5nIGR1cGxpY2F0ZXMgd2hpbGUgbW92aW5nIFJlc3RyaWN0SW5mbydzIGZy b20gcmVtb3ZlZAorICogcmVsYXRpb24gdG8gcmVtYWluaW5nIHJlbGF0aW9uIGR1cmluZyBz ZWxmLWpvaW4gZWxpbWluYXRpb24uCisgKgorICogWFhYOiBJbiB0aGUgZnV0dXJlLCB3ZSBt aWdodCByZW1vdmUgdGhlICdyaW5mb19zZXJpYWwnIGZpZWxkIGNvbXBsZXRlbHkgYW5kCisg KiBnZXQgcmlkIG9mIHRoaXMgZnVuY3Rpb24uCisgKi8KK3N0YXRpYyBib29sCityZXN0cmlj dF9pbmZvc19sb2dpY2FsbHlfZXF1YWwoUmVzdHJpY3RJbmZvICphLCBSZXN0cmljdEluZm8g KmIpCit7CisJaW50CQkJc2F2ZWRfcmluZm9fc2VyaWFsID0gYS0+cmluZm9fc2VyaWFsOwor CWJvb2wJCXJlc3VsdDsKKworCWEtPnJpbmZvX3NlcmlhbCA9IGItPnJpbmZvX3NlcmlhbDsK KwlyZXN1bHQgPSBlcXVhbChhLCBiKTsKKwlhLT5yaW5mb19zZXJpYWwgPSBzYXZlZF9yaW5m b19zZXJpYWw7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKgorICogUmVtb3ZlIGEgcmVs YXRpb24gYWZ0ZXIgd2UgaGF2ZSBwcm92ZW4gdGhhdCBpdCBwYXJ0aWNpcGF0ZXMgb25seSBp biBhbgorICogdW5uZWVkZWQgdW5pcXVlIHNlbGYgam9pbi4KKyAqCisgKiBSZXBsYWNlIGFu eSBsaW5rcyBpbiBwbGFubmVyIGluZm8gc3RydWN0dXJlcy4KKyAqCisgKiBUcmFuc2ZlciBq b2luIGFuZCByZXN0cmljdGlvbiBjbGF1c2VzIGZyb20gdGhlIHJlbW92ZWQgcmVsYXRpb24g dG8gdGhlCisgKiByZW1haW5pbmcgb25lLiBXZSBjaGFuZ2UgdGhlIFZhcnMgb2YgdGhlIGNs YXVzZSB0byBwb2ludCB0byB0aGUKKyAqIHJlbWFpbmluZyByZWxhdGlvbiBpbnN0ZWFkIG9m IHRoZSByZW1vdmVkIG9uZS4gVGhlIGNsYXVzZXMgdGhhdCByZXF1aXJlCisgKiBhIHN1YnNl dCBvZiBqb2lucmVsaWRzIGJlY29tZSByZXN0cmljdGlvbiBjbGF1c2VzIG9mIHRoZSByZW1h aW5pbmcKKyAqIHJlbGF0aW9uLCBhbmQgb3RoZXJzIHJlbWFpbiBqb2luIGNsYXVzZXMuIFdl IGFwcGVuZCB0aGVtIHRvCisgKiBiYXNlcmVzdHJpY3RpbmZvIGFuZCBqb2luaW5mbyByZXNw ZWN0aXZlbHksIHRyeWluZyBub3QgdG8gaW50cm9kdWNlCisgKiBkdXBsaWNhdGVzLgorICoK KyAqIFdlIGFsc28gaGF2ZSB0byBwcm9jZXNzIHRoZSAnam9pbmNsYXVzZXMnIGxpc3QgaGVy ZSwgYmVjYXVzZSBpdAorICogY29udGFpbnMgRUMtZGVyaXZlZCBqb2luIGNsYXVzZXMgd2hp Y2ggbXVzdCBiZWNvbWUgZmlsdGVyIGNsYXVzZXMuIEl0CisgKiBpcyBub3QgZW5vdWdoIHRv IGp1c3QgY29ycmVjdCB0aGUgRUNzIGJlY2F1c2UgdGhlIEVDLWRlcml2ZWQKKyAqIHJlc3Ry aWN0aW9ucyBhcmUgZ2VuZXJhdGVkIGJlZm9yZSBqb2luIHJlbW92YWwgKHNlZQorICogZ2Vu ZXJhdGVfYmFzZV9pbXBsaWVkX2VxdWFsaXRpZXMpLgorICovCitzdGF0aWMgdm9pZAorcmVt b3ZlX3NlbGZfam9pbl9yZWwoUGxhbm5lckluZm8gKnJvb3QsIFBsYW5Sb3dNYXJrICprbWFy aywgUGxhblJvd01hcmsgKnJtYXJrLAorCQkJCQkgUmVsT3B0SW5mbyAqdG9LZWVwLCBSZWxP cHRJbmZvICp0b1JlbW92ZSwKKwkJCQkJIExpc3QgKnJlc3RyaWN0bGlzdCkKK3sKKwlMaXN0 CSAgICpqb2luaW5mb3M7CisJTGlzdENlbGwgICAqbGM7CisJaW50CQkJaTsKKwlMaXN0CSAg ICpqaW5mb19jYW5kaWRhdGVzID0gTklMOworCUxpc3QJICAgKmJpbmZvX2NhbmRpZGF0ZXMg PSBOSUw7CisKKwlBc3NlcnQodG9LZWVwLT5yZWxpZCA+IDApOworCUFzc2VydCh0b1JlbW92 ZS0+cmVsaWQgPiAwKTsKKworCS8qCisJICogUmVwbGFjZSB0aGUgaW5kZXggb2YgdGhlIHJl bW92aW5nIHRhYmxlIHdpdGggdGhlIGtlZXBpbmcgb25lLiBUaGUKKwkgKiB0ZWNobmlxdWUg b2YgcmVtb3ZpbmcvZGlzdHJpYnV0aW5nIHJlc3RyaWN0aW5mbyBpcyB1c2VkIGhlcmUgdG8g YXR0YWNoCisJICoganVzdCBhcHBlYXJlZCAoZm9yIGtlZXBpbmcgcmVsYXRpb24pIGpvaW4g Y2xhdXNlcyBhbmQgYXZvaWQgYWRkaW5nCisJICogZHVwbGljYXRlcyBvZiB0aG9zZSB0aGF0 IGFscmVhZHkgZXhpc3QgaW4gdGhlIGpvaW5pbmZvIGxpc3QuCisJICovCisJam9pbmluZm9z ID0gbGlzdF9jb3B5KHRvUmVtb3ZlLT5qb2luaW5mbyk7CisJZm9yZWFjaF9ub2RlKFJlc3Ry aWN0SW5mbywgcmluZm8sIGpvaW5pbmZvcykKKwl7CisJCXJlbW92ZV9qb2luX2NsYXVzZV9m cm9tX3JlbHMocm9vdCwgcmluZm8sIHJpbmZvLT5yZXF1aXJlZF9yZWxpZHMpOworCQlDaGFu Z2VWYXJOb2RlcygoTm9kZSAqKSByaW5mbywgdG9SZW1vdmUtPnJlbGlkLCB0b0tlZXAtPnJl bGlkLCAwKTsKKworCQlpZiAoYm1zX21lbWJlcnNoaXAocmluZm8tPnJlcXVpcmVkX3JlbGlk cykgPT0gQk1TX01VTFRJUExFKQorCQkJamluZm9fY2FuZGlkYXRlcyA9IGxhcHBlbmQoamlu Zm9fY2FuZGlkYXRlcywgcmluZm8pOworCQllbHNlCisJCQliaW5mb19jYW5kaWRhdGVzID0g bGFwcGVuZChiaW5mb19jYW5kaWRhdGVzLCByaW5mbyk7CisJfQorCisJLyoKKwkgKiBDb25j YXRlbmF0ZSByZXN0cmljdGxpc3QgdG8gdGhlIGxpc3Qgb2YgYmFzZSByZXN0cmljdGlvbnMg b2YgdGhlCisJICogcmVtb3ZpbmcgdGFibGUganVzdCB0byBzaW1wbGlmeSB0aGUgcmVwbGFj ZW1lbnQgcHJvY2VkdXJlOiBhbGwgb2YgdGhlbQorCSAqIHdlcmVuJ3QgY29ubmVjdGVkIHRv IGFueSBrZWVwaW5nIHJlbGF0aW9ucyBhbmQgbmVlZCB0byBiZSBhZGRlZCB0byBzb21lCisJ ICogcmVscy4KKwkgKi8KKwl0b1JlbW92ZS0+YmFzZXJlc3RyaWN0aW5mbyA9IGxpc3RfY29u Y2F0KHRvUmVtb3ZlLT5iYXNlcmVzdHJpY3RpbmZvLAorCQkJCQkJCQkJCQkgcmVzdHJpY3Rs aXN0KTsKKwlmb3JlYWNoX25vZGUoUmVzdHJpY3RJbmZvLCByaW5mbywgdG9SZW1vdmUtPmJh c2VyZXN0cmljdGluZm8pCisJeworCQlDaGFuZ2VWYXJOb2RlcygoTm9kZSAqKSByaW5mbywg dG9SZW1vdmUtPnJlbGlkLCB0b0tlZXAtPnJlbGlkLCAwKTsKKworCQlpZiAoYm1zX21lbWJl cnNoaXAocmluZm8tPnJlcXVpcmVkX3JlbGlkcykgPT0gQk1TX01VTFRJUExFKQorCQkJamlu Zm9fY2FuZGlkYXRlcyA9IGxhcHBlbmQoamluZm9fY2FuZGlkYXRlcywgcmluZm8pOworCQll bHNlCisJCQliaW5mb19jYW5kaWRhdGVzID0gbGFwcGVuZChiaW5mb19jYW5kaWRhdGVzLCBy aW5mbyk7CisJfQorCisJLyoKKwkgKiBOb3csIGFkZCBhbGwgbm9uLXJlZHVuZGFudCBjbGF1 c2VzIHRvIHRoZSBrZWVwaW5nIHJlbGF0aW9uLgorCSAqIENvbnRyYWRpY3Rvcnkgb3BlcmF0 aW9uLiBPbiB0aGUgb25lIHNpZGUsIHdlIHJlZHVjZSB0aGUgbGVuZ3RoIG9mCisJICogcmVz dHJpY3QgbGlzdHMgdGhhdCBjYW4gaW1wYWN0IHBsYW5uaW5nIG9yIGV4ZWN1dGluZyB0aW1l LgorCSAqIEFkZGl0aW9uYWxseSwgd2UgaW1wcm92ZSB0aGUgYWNjdXJhY3kgb2YgY2FyZGlu YWxpdHkgZXN0aW1hdGlvbi4gT24gdGhlCisJICogb3RoZXIgc2lkZSwgaXQgaXMgb25lIG1v cmUgcGxhY2UgdGhhdCBjYW4gbWFrZSBwbGFubmluZyB0aW1lIG11Y2gKKwkgKiBsb25nZXIg aW4gc3BlY2lmaWMgY2FzZXMuIEl0IHdvdWxkIGhhdmUgYmVlbiBiZXR0ZXIgdG8gYXZvaWQg Y2FsbGluZworCSAqIHRoZSBlcXVhbCgpIGZ1bmN0aW9uIGhlcmUsIGJ1dCBpdCdzIHRoZSBv bmx5IHdheSB0byBkZXRlY3QgZHVwbGljYXRlZAorCSAqIGluZXF1YWxpdHkgZXhwcmVzc2lv bnMuCisJICovCisJZm9yZWFjaF9ub2RlKFJlc3RyaWN0SW5mbywgcmluZm8sIGJpbmZvX2Nh bmRpZGF0ZXMpCisJeworCQlib29sCQlpc19yZWR1bmRhbnQgPSBmYWxzZTsKKworCQlBc3Nl cnQoIWJtc19pc19tZW1iZXIodG9SZW1vdmUtPnJlbGlkLCByaW5mby0+cmVxdWlyZWRfcmVs aWRzKSk7CisKKwkJZm9yZWFjaF9ub2RlKFJlc3RyaWN0SW5mbywgc3JjLCB0b0tlZXAtPmJh c2VyZXN0cmljdGluZm8pCisJCXsKKwkJCWlmICghYm1zX2VxdWFsKHNyYy0+Y2xhdXNlX3Jl bGlkcywgcmluZm8tPmNsYXVzZV9yZWxpZHMpKQorCQkJCS8qIENvbnN0IGFuZCBub24tY29u c3QgZXhwcmVzc2lvbnMgY2FuJ3QgYmUgZXF1YWwgKi8KKwkJCQljb250aW51ZTsKKworCQkJ aWYgKHNyYyA9PSByaW5mbyB8fAorCQkJCShyaW5mby0+cGFyZW50X2VjICE9IE5VTEwKKwkJ CQkgJiYgc3JjLT5wYXJlbnRfZWMgPT0gcmluZm8tPnBhcmVudF9lYykKKwkJCQl8fCByZXN0 cmljdF9pbmZvc19sb2dpY2FsbHlfZXF1YWwocmluZm8sIHNyYykpCisJCQl7CisJCQkJaXNf cmVkdW5kYW50ID0gdHJ1ZTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlpZiAoIWlzX3Jl ZHVuZGFudCkKKwkJCWRpc3RyaWJ1dGVfcmVzdHJpY3RpbmZvX3RvX3JlbHMocm9vdCwgcmlu Zm8pOworCX0KKwlmb3JlYWNoX25vZGUoUmVzdHJpY3RJbmZvLCByaW5mbywgamluZm9fY2Fu ZGlkYXRlcykKKwl7CisJCWJvb2wJCWlzX3JlZHVuZGFudCA9IGZhbHNlOworCisJCUFzc2Vy dCghYm1zX2lzX21lbWJlcih0b1JlbW92ZS0+cmVsaWQsIHJpbmZvLT5yZXF1aXJlZF9yZWxp ZHMpKTsKKworCQlmb3JlYWNoX25vZGUoUmVzdHJpY3RJbmZvLCBzcmMsIHRvS2VlcC0+am9p bmluZm8pCisJCXsKKwkJCWlmICghYm1zX2VxdWFsKHNyYy0+Y2xhdXNlX3JlbGlkcywgcmlu Zm8tPmNsYXVzZV9yZWxpZHMpKQorCQkJCS8qIENhbid0IGNvbXBhcmUgdHJpdmlhbGx5IGRp ZmZlcmVudCBjbGF1c2VzICovCisJCQkJY29udGludWU7CisKKwkJCWlmIChzcmMgPT0gcmlu Zm8gfHwKKwkJCQkocmluZm8tPnBhcmVudF9lYyAhPSBOVUxMCisJCQkJICYmIHNyYy0+cGFy ZW50X2VjID09IHJpbmZvLT5wYXJlbnRfZWMpCisJCQkJfHwgcmVzdHJpY3RfaW5mb3NfbG9n aWNhbGx5X2VxdWFsKHJpbmZvLCBzcmMpKQorCQkJeworCQkJCWlzX3JlZHVuZGFudCA9IHRy dWU7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJaWYgKCFpc19yZWR1bmRhbnQpCisJCQlk aXN0cmlidXRlX3Jlc3RyaWN0aW5mb190b19yZWxzKHJvb3QsIHJpbmZvKTsKKwl9CisJbGlz dF9mcmVlKGJpbmZvX2NhbmRpZGF0ZXMpOworCWxpc3RfZnJlZShqaW5mb19jYW5kaWRhdGVz KTsKKworCS8qCisJICogQXJyYW5nZSBlcXVpdmFsZW5jZSBjbGFzc2VzLCBtZW50aW9uZWQg cmVtb3ZpbmcgYSB0YWJsZSwgd2l0aCB0aGUKKwkgKiBrZWVwaW5nIG9uZTogdmFybm8gb2Yg cmVtb3ZpbmcgdGFibGUgc2hvdWxkIGJlIHJlcGxhY2VkIGluIG1lbWJlcnMgYW5kCisJICog c291cmNlcyBsaXN0cy4gQWxzbywgcmVtb3ZlIGR1cGxpY2F0ZWQgZWxlbWVudHMgaWYgdGhp cyByZXBsYWNlbWVudAorCSAqIHByb2NlZHVyZSBjcmVhdGVkIHRoZW0uCisJICovCisJaSA9 IC0xOworCXdoaWxlICgoaSA9IGJtc19uZXh0X21lbWJlcih0b1JlbW92ZS0+ZWNsYXNzX2lu ZGV4ZXMsIGkpKSA+PSAwKQorCXsKKwkJRXF1aXZhbGVuY2VDbGFzcyAqZWMgPSAoRXF1aXZh bGVuY2VDbGFzcyAqKSBsaXN0X250aChyb290LT5lcV9jbGFzc2VzLCBpKTsKKworCQl1cGRh dGVfZWNsYXNzZXMoZWMsIHRvUmVtb3ZlLT5yZWxpZCwgdG9LZWVwLT5yZWxpZCk7CisJCXRv S2VlcC0+ZWNsYXNzX2luZGV4ZXMgPSBibXNfYWRkX21lbWJlcih0b0tlZXAtPmVjbGFzc19p bmRleGVzLCBpKTsKKwl9CisKKwkvKgorCSAqIFRyYW5zZmVyIHRoZSB0YXJnZXRsaXN0IGFu ZCBhdHRyX25lZWRlZCBmbGFncy4KKwkgKi8KKworCWZvcmVhY2gobGMsIHRvUmVtb3ZlLT5y ZWx0YXJnZXQtPmV4cHJzKQorCXsKKwkJTm9kZQkgICAqbm9kZSA9IGxmaXJzdChsYyk7CisJ CUNoYW5nZVZhck5vZGVzKG5vZGUsIHRvUmVtb3ZlLT5yZWxpZCwgdG9LZWVwLT5yZWxpZCwg MCk7CisJCWlmICghbGlzdF9tZW1iZXIodG9LZWVwLT5yZWx0YXJnZXQtPmV4cHJzLCBub2Rl KSkKKwkJCXRvS2VlcC0+cmVsdGFyZ2V0LT5leHBycyA9IGxhcHBlbmQodG9LZWVwLT5yZWx0 YXJnZXQtPmV4cHJzLCBub2RlKTsKKwl9CisKKwlmb3IgKGkgPSB0b0tlZXAtPm1pbl9hdHRy OyBpIDw9IHRvS2VlcC0+bWF4X2F0dHI7IGkrKykKKwl7CisJCWludAkJCWF0dG5vID0gaSAt IHRvS2VlcC0+bWluX2F0dHI7CisKKwkJdG9SZW1vdmUtPmF0dHJfbmVlZGVkW2F0dG5vXSA9 IHJlcGxhY2VfcmVsaWQodG9SZW1vdmUtPmF0dHJfbmVlZGVkW2F0dG5vXSwKKwkJCQkJCQkJ CQkJCQkgdG9SZW1vdmUtPnJlbGlkLCB0b0tlZXAtPnJlbGlkKTsKKwkJdG9LZWVwLT5hdHRy X25lZWRlZFthdHRub10gPSBibXNfYWRkX21lbWJlcnModG9LZWVwLT5hdHRyX25lZWRlZFth dHRub10sCisJCQkJCQkJCQkJCQkJIHRvUmVtb3ZlLT5hdHRyX25lZWRlZFthdHRub10pOwor CX0KKworCS8qCisJICogSWYgdGhlIHJlbW92ZWQgcmVsYXRpb24gaGFzIGEgcm93IG1hcmss IHRyYW5zZmVyIGl0IHRvIHRoZSByZW1haW5pbmcKKwkgKiBvbmUuCisJICoKKwkgKiBJZiBi b3RoIHJlbHMgaGF2ZSByb3cgbWFya3MsIGp1c3Qga2VlcCB0aGUgb25lIGNvcnJlc3BvbmRp bmcgdG8gdGhlCisJICogcmVtYWluaW5nIHJlbGF0aW9uLCBiZWNhdXNlIHdlIHZlcmlmaWVk IGVhcmxpZXIgdGhhdCB0aGV5IGhhdmUgdGhlIHNhbWUKKwkgKiBzdHJlbmd0aC4KKwkgKi8K KwlpZiAocm1hcmspCisJeworCQlpZiAoa21hcmspCisJCXsKKwkJCUFzc2VydChrbWFyay0+ bWFya1R5cGUgPT0gcm1hcmstPm1hcmtUeXBlKTsKKworCQkJcm9vdC0+cm93TWFya3MgPSBs aXN0X2RlbGV0ZV9wdHIocm9vdC0+cm93TWFya3MsIHJtYXJrKTsKKwkJfQorCQllbHNlCisJ CXsKKwkJCS8qIFNob3VsZG4ndCBoYXZlIGluaGVyaXRhbmNlIGNoaWxkcmVuIGhlcmUuICov CisJCQlBc3NlcnQocm1hcmstPnJ0aSA9PSBybWFyay0+cHJ0aSk7CisKKwkJCXJtYXJrLT5y dGkgPSBybWFyay0+cHJ0aSA9IHRvS2VlcC0+cmVsaWQ7CisJCX0KKwl9CisKKwkvKiBSZXBs YWNlIHZhcm5vIGluIGFsbCB0aGUgcXVlcnkgc3RydWN0dXJlcywgZXhjZXB0IG5vZGVzIFJh bmdlVGJsUmVmCisJICogb3RoZXJ3aXNlIGxhdGVyIHJlbW92ZV9yZWxfZnJvbV9qb2lubGlz dCB3aWxsIHlpZWxkIGVycm9ycy4KKwkqLworCUNoYW5nZVZhck5vZGVzRXh0ZW5kZWQoKE5v ZGUgKikgcm9vdC0+cGFyc2UsIHRvUmVtb3ZlLT5yZWxpZCwgdG9LZWVwLT5yZWxpZCwgMCwg ZmFsc2UpOworCisJLyogUmVwbGFjZSBsaW5rcyBpbiB0aGUgcGxhbm5lciBpbmZvICovCisJ cmVtb3ZlX3JlbF9mcm9tX3F1ZXJ5KHJvb3QsIHRvUmVtb3ZlLCB0b0tlZXAtPnJlbGlkLCBO VUxMLCBOVUxMKTsKKworCS8qIEF0IGxhc3QsIHJlcGxhY2UgdmFybm8gaW4gcm9vdCB0YXJn ZXRsaXN0IGFuZCBIQVZJTkcgY2xhdXNlICovCisJQ2hhbmdlVmFyTm9kZXMoKE5vZGUgKikg cm9vdC0+cHJvY2Vzc2VkX3RsaXN0LCB0b1JlbW92ZS0+cmVsaWQsIHRvS2VlcC0+cmVsaWQs IDApOworCUNoYW5nZVZhck5vZGVzKChOb2RlICopIHJvb3QtPnByb2Nlc3NlZF9ncm91cENs YXVzZSwgdG9SZW1vdmUtPnJlbGlkLCB0b0tlZXAtPnJlbGlkLCAwKTsKKworCXJlcGxhY2Vf cmVsaWQocm9vdC0+YWxsX3Jlc3VsdF9yZWxpZHMsIHRvUmVtb3ZlLT5yZWxpZCwgdG9LZWVw LT5yZWxpZCk7CisJcmVwbGFjZV9yZWxpZChyb290LT5sZWFmX3Jlc3VsdF9yZWxpZHMsIHRv UmVtb3ZlLT5yZWxpZCwgdG9LZWVwLT5yZWxpZCk7CisKKworCS8qCisJICogVGhlcmUgbWF5 IGJlIHJlZmVyZW5jZXMgdG8gdGhlIHJlbCBpbiByb290LT5ma2V5X2xpc3QsIGJ1dCBpZiBz bywKKwkgKiBtYXRjaF9mb3JlaWduX2tleXNfdG9fcXVhbHMoKSB3aWxsIGdldCByaWQgb2Yg dGhlbS4KKwkgKi8KKworCS8qCisJICogRmluYWxseSwgcmVtb3ZlIHRoZSByZWwgZnJvbSB0 aGUgYmFzZXJlbCBhcnJheSB0byBwcmV2ZW50IGl0IGZyb20gYmVpbmcKKwkgKiByZWZlcmVu Y2VkIGFnYWluLiAgKFdlIGNhbid0IGRvIHRoaXMgZWFybGllciBiZWNhdXNlCisJICogcmVt b3ZlX2pvaW5fY2xhdXNlX2Zyb21fcmVscyB3aWxsIHRvdWNoIGl0LikKKwkgKi8KKwlyb290 LT5zaW1wbGVfcmVsX2FycmF5W3RvUmVtb3ZlLT5yZWxpZF0gPSBOVUxMOworCisJLyogQW5k IG51a2UgdGhlIFJlbE9wdEluZm8sIGp1c3QgaW4gY2FzZSB0aGVyZSdzIGFub3RoZXIgYWNj ZXNzIHBhdGggKi8KKwlwZnJlZSh0b1JlbW92ZSk7Cit9CisKKy8qCisgKiBzcGxpdF9zZWxm am9pbl9xdWFscworICoJCVByb2Nlc3NlcyAnam9pbnF1YWxzJyBieSBidWlsZGluZyB0d28g bGlzdHM6IG9uZSBjb250YWluaW5nIHRoZSBxdWFscworICoJCXdoZXJlIHRoZSBjb2x1bW5z L2V4cHJzIGFyZSBvbiBlaXRoZXIgc2lkZSBvZiB0aGUgam9pbiBtYXRjaCwgYW5kCisgKgkJ YW5vdGhlciBvbmUgY29udGFpbmluZyB0aGUgcmVtYWluaW5nIHF1YWxzLgorICoKKyAqICdq b2lucXVhbHMnIG11c3Qgb25seSBjb250YWluIHF1YWxzIGZvciBhIFJURV9SRUxBVElPTiBi ZWluZyBqb2luZWQgdG8KKyAqIGl0c2VsZi4KKyAqLworc3RhdGljIHZvaWQKK3NwbGl0X3Nl bGZqb2luX3F1YWxzKFBsYW5uZXJJbmZvICpyb290LCBMaXN0ICpqb2lucXVhbHMsIExpc3Qg KipzZWxmam9pbnF1YWxzLAorCQkJCQkgTGlzdCAqKm90aGVyam9pbnF1YWxzLCBpbnQgZnJv bSwgaW50IHRvKQoreworCUxpc3QJICAgKnNqb2lucXVhbHMgPSBOSUw7CisJTGlzdAkgICAq b2pvaW5xdWFscyA9IE5JTDsKKworCWZvcmVhY2hfbm9kZShSZXN0cmljdEluZm8sIHJpbmZv LCBqb2lucXVhbHMpCisJeworCQlPcEV4cHIJICAgKmV4cHI7CisJCU5vZGUJICAgKmxlZnRl eHByOworCQlOb2RlCSAgICpyaWdodGV4cHI7CisKKwkJLyogSW4gZ2VuZXJhbCwgY2xhdXNl IGxvb2tzIGxpa2UgRihhcmcxKSA9IEcoYXJnMikgKi8KKwkJaWYgKCFyaW5mby0+bWVyZ2Vv cGZhbWlsaWVzIHx8CisJCQlibXNfbnVtX21lbWJlcnMocmluZm8tPmNsYXVzZV9yZWxpZHMp ICE9IDIgfHwKKwkJCWJtc19tZW1iZXJzaGlwKHJpbmZvLT5sZWZ0X3JlbGlkcykgIT0gQk1T X1NJTkdMRVRPTiB8fAorCQkJYm1zX21lbWJlcnNoaXAocmluZm8tPnJpZ2h0X3JlbGlkcykg IT0gQk1TX1NJTkdMRVRPTikKKwkJeworCQkJb2pvaW5xdWFscyA9IGxhcHBlbmQob2pvaW5x dWFscywgcmluZm8pOworCQkJY29udGludWU7CisJCX0KKworCQlleHByID0gKE9wRXhwciAq KSByaW5mby0+Y2xhdXNlOworCisJCWlmICghSXNBKGV4cHIsIE9wRXhwcikgfHwgbGlzdF9s ZW5ndGgoZXhwci0+YXJncykgIT0gMikKKwkJeworCQkJb2pvaW5xdWFscyA9IGxhcHBlbmQo b2pvaW5xdWFscywgcmluZm8pOworCQkJY29udGludWU7CisJCX0KKworCQlsZWZ0ZXhwciA9 IGdldF9sZWZ0b3AocmluZm8tPmNsYXVzZSk7CisJCXJpZ2h0ZXhwciA9IGNvcHlPYmplY3Qo Z2V0X3JpZ2h0b3AocmluZm8tPmNsYXVzZSkpOworCisJCWlmIChsZWZ0ZXhwciAmJiBJc0Eo bGVmdGV4cHIsIFJlbGFiZWxUeXBlKSkKKwkJCWxlZnRleHByID0gKE5vZGUgKikgKChSZWxh YmVsVHlwZSAqKSBsZWZ0ZXhwciktPmFyZzsKKwkJaWYgKHJpZ2h0ZXhwciAmJiBJc0Eocmln aHRleHByLCBSZWxhYmVsVHlwZSkpCisJCQlyaWdodGV4cHIgPSAoTm9kZSAqKSAoKFJlbGFi ZWxUeXBlICopIHJpZ2h0ZXhwciktPmFyZzsKKworCQkvKgorCQkgKiBRdWl0ZSBhbiBleHBl bnNpdmUgb3BlcmF0aW9uLCBuYXJyb3dpbmcgdGhlIHVzZSBjYXNlLiBGb3IgZXhhbXBsZSwK KwkJICogd2hlbiB3ZSBoYXZlIGNhc3Qgb2YgdGhlIHNhbWUgdmFyIHRvIGRpZmZlcmVudCAo YnV0IGNvbXBhdGlibGUpCisJCSAqIHR5cGVzLgorCQkgKi8KKwkJQ2hhbmdlVmFyTm9kZXMo cmlnaHRleHByLCBibXNfc2luZ2xldG9uX21lbWJlcihyaW5mby0+cmlnaHRfcmVsaWRzKSwK KwkJCQkJICBibXNfc2luZ2xldG9uX21lbWJlcihyaW5mby0+bGVmdF9yZWxpZHMpLCAwKTsK KworCQlpZiAoZXF1YWwobGVmdGV4cHIsIHJpZ2h0ZXhwcikpCisJCQlzam9pbnF1YWxzID0g bGFwcGVuZChzam9pbnF1YWxzLCByaW5mbyk7CisJCWVsc2UKKwkJCW9qb2lucXVhbHMgPSBs YXBwZW5kKG9qb2lucXVhbHMsIHJpbmZvKTsKKwl9CisKKwkqc2VsZmpvaW5xdWFscyA9IHNq b2lucXVhbHM7CisJKm90aGVyam9pbnF1YWxzID0gb2pvaW5xdWFsczsKK30KKworLyoKKyAq IENoZWNrIGZvciBhIGNhc2Ugd2hlbiB1bmlxdWVuZXNzIGlzIGF0IGxlYXN0IHBhcnRseSBk ZXJpdmVkIGZyb20gYQorICogYmFzZXJlc3RyaWN0aW5mbyBjbGF1c2UuIEluIHRoaXMgY2Fz ZSwgd2UgaGF2ZSBhIGNoYW5jZSB0byByZXR1cm4gb25seQorICogb25lIHJvdyAoaWYgc3Vj aCBjbGF1c2VzIG9uIGJvdGggc2lkZXMgb2YgU0ogYXJlIGVxdWFsKSBvciBub3RoaW5nIChp ZiB0aGV5CisgKiBhcmUgZGlmZmVyZW50KS4KKyAqLworc3RhdGljIGJvb2wKK21hdGNoX3Vu aXF1ZV9jbGF1c2VzKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpvdXRlciwgTGlz dCAqdWNsYXVzZXMsCisJCQkJCSBJbmRleCByZWxpZCkKK3sKKwlmb3JlYWNoX25vZGUoUmVz dHJpY3RJbmZvLCByaW5mbywgdWNsYXVzZXMpCisJeworCQlFeHByCSAgICpjbGF1c2U7CisJ CU5vZGUJICAgKmljbGF1c2U7CisJCU5vZGUJICAgKmMxOworCQlib29sCQltYXRjaGVkID0g ZmFsc2U7CisKKwkJQXNzZXJ0KG91dGVyLT5yZWxpZCA+IDAgJiYgcmVsaWQgPiAwKTsKKwor CQkvKiBPbmx5IGZpbHRlcnMgbGlrZSBmKFIueDEsLi4uLFIueE4pID09IGV4cHIgd2Ugc2hv dWxkIGNvbnNpZGVyLiAqLworCQlBc3NlcnQoYm1zX2lzX2VtcHR5KHJpbmZvLT5sZWZ0X3Jl bGlkcykgXgorCQkJICAgYm1zX2lzX2VtcHR5KHJpbmZvLT5yaWdodF9yZWxpZHMpKTsKKwor CQljbGF1c2UgPSAoRXhwciAqKSBjb3B5T2JqZWN0KHJpbmZvLT5jbGF1c2UpOworCQlDaGFu Z2VWYXJOb2RlcygoTm9kZSAqKSBjbGF1c2UsIHJlbGlkLCBvdXRlci0+cmVsaWQsIDApOwor CisJCWljbGF1c2UgPSBibXNfaXNfZW1wdHkocmluZm8tPmxlZnRfcmVsaWRzKSA/IGdldF9y aWdodG9wKGNsYXVzZSkgOgorCQkJZ2V0X2xlZnRvcChjbGF1c2UpOworCQljMSA9IGJtc19p c19lbXB0eShyaW5mby0+bGVmdF9yZWxpZHMpID8gZ2V0X2xlZnRvcChjbGF1c2UpIDoKKwkJ CWdldF9yaWdodG9wKGNsYXVzZSk7CisKKwkJLyoKKwkJICogQ29tcGFyZSB0aGVzZSBsZWZ0 IGFuZCByaWdodCBzaWRlcyB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIHNpZGVzIG9mCisJCSAq IHRoZSBvdXRlcidzIGZpbHRlcnMuIElmIG5vIG9uZSBpcyBkZXRlY3RlZCAtIHJldHVybiBp bW1lZGlhdGVseS4KKwkJICovCisJCWZvcmVhY2hfbm9kZShSZXN0cmljdEluZm8sIG9yaW5m bywgb3V0ZXItPmJhc2VyZXN0cmljdGluZm8pCisJCXsKKwkJCU5vZGUJICAgKm9jbGF1c2U7 CisJCQlOb2RlCSAgICpjMjsKKworCQkJaWYgKG9yaW5mby0+bWVyZ2VvcGZhbWlsaWVzID09 IE5JTCkKKwkJCQkvKiBEb24ndCBjb25zaWRlciBjbGF1c2VzIHdoaWNoIGFyZW4ndCBzaW1p bGFyIHRvICdGKFgpPUcoWSknICovCisJCQkJY29udGludWU7CisKKwkJCUFzc2VydChpc19v cGNsYXVzZShvcmluZm8tPmNsYXVzZSkpOworCisJCQlvY2xhdXNlID0gYm1zX2lzX2VtcHR5 KG9yaW5mby0+bGVmdF9yZWxpZHMpID8KKwkJCQlnZXRfcmlnaHRvcChvcmluZm8tPmNsYXVz ZSkgOiBnZXRfbGVmdG9wKG9yaW5mby0+Y2xhdXNlKTsKKwkJCWMyID0gKGJtc19pc19lbXB0 eShvcmluZm8tPmxlZnRfcmVsaWRzKSA/CisJCQkJICBnZXRfbGVmdG9wKG9yaW5mby0+Y2xh dXNlKSA6IGdldF9yaWdodG9wKG9yaW5mby0+Y2xhdXNlKSk7CisKKwkJCWlmIChlcXVhbChp Y2xhdXNlLCBvY2xhdXNlKSAmJiBlcXVhbChjMSwgYzIpKQorCQkJeworCQkJCW1hdGNoZWQg PSB0cnVlOworCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJaWYgKCFtYXRjaGVkKQorCQkJ cmV0dXJuIGZhbHNlOworCX0KKworCXJldHVybiB0cnVlOworfQorCisvKgorICogRmluZCBh bmQgcmVtb3ZlIHVuaXF1ZSBzZWxmIGpvaW5zIGluIGEgZ3JvdXAgb2YgYmFzZSByZWxhdGlv bnMgdGhhdCBoYXZlCisgKiB0aGUgc2FtZSBPaWQuCisgKgorICogUmV0dXJucyBhIHNldCBv ZiByZWxpZHMgdGhhdCB3ZXJlIHJlbW92ZWQuCisgKi8KK3N0YXRpYyBSZWxpZHMKK3JlbW92 ZV9zZWxmX2pvaW5zX29uZV9ncm91cChQbGFubmVySW5mbyAqcm9vdCwgUmVsaWRzIHJlbGlk cykKK3sKKwlSZWxpZHMJCXJlc3VsdCA9IE5VTEw7CisJaW50CQkJazsJCQkJLyogSW5kZXgg b2Yga2VwdCByZWxhdGlvbiAqLworCWludAkJCXIgPSAtMTsJCQkvKiBJbmRleCBvZiByZW1v dmVkIHJlbGF0aW9uICovCisKKwl3aGlsZSAoKHIgPSBibXNfbmV4dF9tZW1iZXIocmVsaWRz LCByKSkgPiAwKQorCXsKKwkJUmVsT3B0SW5mbyAqaW5uZXIgPSByb290LT5zaW1wbGVfcmVs X2FycmF5W3JdOworCisJCWsgPSByOworCisJCXdoaWxlICgoayA9IGJtc19uZXh0X21lbWJl cihyZWxpZHMsIGspKSA+IDApCisJCXsKKwkJCVJlbGlkcwkJam9pbnJlbGlkcyA9IE5VTEw7 CisJCQlSZWxPcHRJbmZvICpvdXRlciA9IHJvb3QtPnNpbXBsZV9yZWxfYXJyYXlba107CisJ CQlMaXN0CSAgICpyZXN0cmljdGxpc3Q7CisJCQlMaXN0CSAgICpzZWxmam9pbnF1YWxzOwor CQkJTGlzdAkgICAqb3RoZXJqb2lucXVhbHM7CisJCQlMaXN0Q2VsbCAgICpsYzsKKwkJCWJv b2wJCWppbmZvX2NoZWNrID0gdHJ1ZTsKKwkJCVBsYW5Sb3dNYXJrICpvbWFyayA9IE5VTEw7 CisJCQlQbGFuUm93TWFyayAqaW1hcmsgPSBOVUxMOworCQkJTGlzdAkgICAqdWNsYXVzZXMg PSBOSUw7CisKKwkJCS8qIEEgc2FuaXR5IGNoZWNrOiB0aGUgcmVsYXRpb25zIGhhdmUgdGhl IHNhbWUgT2lkLiAqLworCQkJQXNzZXJ0KHJvb3QtPnNpbXBsZV9ydGVfYXJyYXlba10tPnJl bGlkID09CisJCQkJICAgcm9vdC0+c2ltcGxlX3J0ZV9hcnJheVtyXS0+cmVsaWQpOworCisJ CQkvKgorCQkJICogSXQgaXMgaW1wb3NzaWJsZSB0byBlbGltaW5hdGUgam9pbiBvZiB0d28g cmVsYXRpb25zIGlmIHRoZXkKKwkJCSAqIGJlbG9uZyB0byBkaWZmZXJlbnQgcnVsZXMgb2Yg b3JkZXIuIE90aGVyd2lzZSBwbGFubmVyIGNhbid0IGJlCisJCQkgKiBhYmxlIHRvIGZpbmQg YW55IHZhcmlhbnRzIG9mIGNvcnJlY3QgcXVlcnkgcGxhbi4KKwkJCSAqLworCQkJZm9yZWFj aChsYywgcm9vdC0+am9pbl9pbmZvX2xpc3QpCisJCQl7CisJCQkJU3BlY2lhbEpvaW5JbmZv ICppbmZvID0gKFNwZWNpYWxKb2luSW5mbyAqKSBsZmlyc3QobGMpOworCisJCQkJaWYgKChi bXNfaXNfbWVtYmVyKGssIGluZm8tPnN5bl9sZWZ0aGFuZCkgXgorCQkJCQkgYm1zX2lzX21l bWJlcihyLCBpbmZvLT5zeW5fbGVmdGhhbmQpKSB8fAorCQkJCQkoYm1zX2lzX21lbWJlcihr LCBpbmZvLT5zeW5fcmlnaHRoYW5kKSBeCisJCQkJCSBibXNfaXNfbWVtYmVyKHIsIGluZm8t PnN5bl9yaWdodGhhbmQpKSkKKwkJCQl7CisJCQkJCWppbmZvX2NoZWNrID0gZmFsc2U7CisJ CQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJCWlmICghamluZm9fY2hlY2spCisJCQkJY29u dGludWU7CisKKwkJCS8qCisJCQkgKiBDaGVjayBSb3cgTWFya3MgZXF1aXZhbGVuY2UuICBX ZSBjYW4ndCByZW1vdmUgdGhlIGpvaW4gaWYgdGhlCisJCQkgKiByZWxhdGlvbnMgaGF2ZSBy b3cgbWFya3Mgb2YgZGlmZmVyZW50IHN0cmVuZ3RoIChlLmcuIG9uZSBpcworCQkJICogbG9j a2VkIEZPUiBVUERBVEUgYW5kIGFub3RoZXIganVzdCBoYXMgUk9XX01BUktfUkVGRVJFTkNF IGZvcgorCQkJICogRXZhbFBsYW5RdWFsIHJlY2hlY2tpbmcpLgorCQkJICovCisJCQlmb3Jl YWNoKGxjLCByb290LT5yb3dNYXJrcykKKwkJCXsKKwkJCQlQbGFuUm93TWFyayAqcm93TWFy ayA9IChQbGFuUm93TWFyayAqKSBsZmlyc3QobGMpOworCisJCQkJaWYgKHJvd01hcmstPnJ0 aSA9PSBrKQorCQkJCXsKKwkJCQkJQXNzZXJ0KGltYXJrID09IE5VTEwpOworCQkJCQlpbWFy ayA9IHJvd01hcms7CisJCQkJfQorCQkJCWVsc2UgaWYgKHJvd01hcmstPnJ0aSA9PSByKQor CQkJCXsKKwkJCQkJQXNzZXJ0KG9tYXJrID09IE5VTEwpOworCQkJCQlvbWFyayA9IHJvd01h cms7CisJCQkJfQorCisJCQkJaWYgKG9tYXJrICYmIGltYXJrKQorCQkJCQlicmVhazsKKwkJ CX0KKwkJCWlmIChvbWFyayAmJiBpbWFyayAmJiBvbWFyay0+bWFya1R5cGUgIT0gaW1hcmst Pm1hcmtUeXBlKQorCQkJCWNvbnRpbnVlOworCisJCQkvKgorCQkJICogV2Ugb25seSBkZWFs IHdpdGggYmFzZSByZWxzIGhlcmUsIHNvIHRoZWlyIHJlbGlkcyBiaXRzZXQKKwkJCSAqIGNv bnRhaW5zIG9ubHkgb25lIG1lbWJlciAtLSB0aGVpciByZWxpZC4KKwkJCSAqLworCQkJam9p bnJlbGlkcyA9IGJtc19hZGRfbWVtYmVyKGpvaW5yZWxpZHMsIHIpOworCQkJam9pbnJlbGlk cyA9IGJtc19hZGRfbWVtYmVyKGpvaW5yZWxpZHMsIGspOworCisJCQkvKgorCQkJICogUEhW cyBzaG91bGQgbm90IGltcG9zZSBhbnkgY29uc3RyYWludHMgb24gcmVtb3Zpbmcgc2VsZiBq b2lucy4KKwkJCSAqLworCisJCQkvKgorCQkJICogQXQgdGhpcyBzdGFnZSwgam9pbmluZm8g bGlzdHMgb2YgaW5uZXIgYW5kIG91dGVyIGNhbiBjb250YWluCisJCQkgKiBvbmx5IGNsYXVz ZXMsIHJlcXVpcmVkIGZvciBhIHN1cGVyaW9yIG91dGVyIGpvaW4gdGhhdCBjYW4ndAorCQkJ ICogaW5mbHVlbmNlIHRoaXMgb3B0aW1pemF0aW9uLiBTbywgd2UgY2FuIGF2b2lkIHRvIGNh bGwgdGhlCisJCQkgKiBidWlsZF9qb2lucmVsX3Jlc3RyaWN0bGlzdCgpIHJvdXRpbmUuCisJ CQkgKi8KKwkJCXJlc3RyaWN0bGlzdCA9IGdlbmVyYXRlX2pvaW5faW1wbGllZF9lcXVhbGl0 aWVzKHJvb3QsIGpvaW5yZWxpZHMsCisJCQkJCQkJCQkJCQkJCQlpbm5lci0+cmVsaWRzLAor CQkJCQkJCQkJCQkJCQkJb3V0ZXIsIE5VTEwpOworCisJCQkvKgorCQkJICogUHJvY2VzcyBy ZXN0cmljdGxpc3QgdG8gc2VwYXJhdGUgdGhlIHNlbGYgam9pbiBxdWFscyBvdXQgb2YgdGhl CisJCQkgKiBvdGhlciBxdWFscy4gZS5nIHggPSB4IGdvZXMgdG8gc2VsZmpvaW5xdWFscyBh bmQgYSA9IGIgdG8KKwkJCSAqIG90aGVyam9pbnF1YWxzLgorCQkJICovCisJCQlzcGxpdF9z ZWxmam9pbl9xdWFscyhyb290LCByZXN0cmljdGxpc3QsICZzZWxmam9pbnF1YWxzLAorCQkJ CQkJCQkgJm90aGVyam9pbnF1YWxzLCBpbm5lci0+cmVsaWQsIG91dGVyLT5yZWxpZCk7CisK KwkJCUFzc2VydChsaXN0X2xlbmd0aChyZXN0cmljdGxpc3QpID09CisJCQkJCShsaXN0X2xl bmd0aChzZWxmam9pbnF1YWxzKSArIGxpc3RfbGVuZ3RoKG90aGVyam9pbnF1YWxzKSkpOwor CisJCQkvKgorCQkJICogRGV0ZXJtaW5lIGlmIHRoZSBpbm5lciB0YWJsZSBjYW4gZHVwbGlj YXRlIG91dGVyIHJvd3MuICBXZSBtdXN0CisJCQkgKiBieXBhc3MgdGhlIHVuaXF1ZSByZWwg Y2FjaGUgaGVyZSBzaW5jZSB3ZSdyZSBwb3NzaWJseSB1c2luZyBhCisJCQkgKiBzdWJzZXQg b2Ygam9pbiBxdWFscy4gV2UgY2FuIHVzZSAnZm9yY2VfY2FjaGUnID09IHRydWUgd2hlbiBh bGwKKwkJCSAqIGpvaW4gcXVhbHMgYXJlIHNlbGYtam9pbiBxdWFscy4gIE90aGVyd2lzZSwg d2UgY291bGQgZW5kIHVwCisJCQkgKiBwdXR0aW5nIGZhbHNlIG5lZ2F0aXZlcyBpbiB0aGUg Y2FjaGUuCisJCQkgKi8KKwkJCWlmICghaW5uZXJyZWxfaXNfdW5pcXVlX2V4dChyb290LCBq b2lucmVsaWRzLCBpbm5lci0+cmVsaWRzLAorCQkJCQkJCQkJCW91dGVyLCBKT0lOX0lOTkVS LCBzZWxmam9pbnF1YWxzLAorCQkJCQkJCQkJCWZhbHNlLCAmdWNsYXVzZXMpKQorCQkJCWNv bnRpbnVlOworCisJCQkvKgorCQkJICogdWNsYXVzZXMgaXMgdGhlIGNvcHkgb2Ygb3V0ZXIt PmJhc2VyZXN0cmljdGluZm8gdGhhdCBhc3NvY2lhdGVkIHdpdGggYSBpbmRleC4KKwkJCSAq IFdlIGFscmVhZHkgcHJvdmVuIHRoYXQgYmFzZWQgb24ge291dGVyLT5iYXNlcmVzdHJpY3Rp bmZvLCBzZWxmam9pbnF1YWxzfQorCQkJICogY29tcGFyc2lvbiB3aXRoIHVuaXF1ZSBpbmRl eCB3ZSBjYW4gZ3VhcmFudGVlcyB0aGF0IGZvciB0aGUgb3V0ZXIgcmVsIHRoZXJlIGlzCisJ CQkgKiBhdCBtb3N0IG9uZSByb3cgd2hlcmUgY29sdW1ucyBlcXVhbCBnaXZlbiB2YWx1ZXMu IFNvbWV0aW1lcyB0aGF0IGlzIG5vdCBvay4gZS5nLgorCQkJICogIndoZXJlIHMxLmIgPSBz Mi5iIGFuZCBzMS5hID0gMSBhbmQgczIuYSA9IDIiLiAodGhlIGluZGV4IGlzIGJhc2VkIG9u IGNvbHVtbihhLGIpLgorCQkJICogaW4gdGhlc2Ugc2NhcmVuaW8sIHdlIGFsc28gbmVlZCB0 byB2YWxpZGF0ZSBlcXVhbGl0eSBvZiBvdXRlci0+YmFzZXJlc3RyaWN0aW5mbworCQkJICog d2l0aCBpbm5lci0+b3V0ZXItPmJhc2VyZXN0cmljdGluZm8sCisJCQkgKiBvciBlbHNlIHdl IHdvbid0IG1hdGNoIHRoZSBzYW1lIHJvdyBvbiBlYWNoIHNpZGUgb2YgdGhlIGpvaW4uCisJ CQkgKi8KKwkJCWlmICghbWF0Y2hfdW5pcXVlX2NsYXVzZXMocm9vdCwgaW5uZXIsIHVjbGF1 c2VzLCBvdXRlci0+cmVsaWQpKQorCQkJCWNvbnRpbnVlOworCisJCQkvKgorCQkJICogV2Ug Y2FuIHJlbW92ZSBlaXRoZXIgcmVsYXRpb24sIHNvIHJlbW92ZSB0aGUgaW5uZXIgb25lIGlu IG9yZGVyCisJCQkgKiB0byBzaW1wbGlmeSB0aGlzIGxvb3AuCisJCQkgKi8KKwkJCXJlbW92 ZV9zZWxmX2pvaW5fcmVsKHJvb3QsIG9tYXJrLCBpbWFyaywgb3V0ZXIsIGlubmVyLCByZXN0 cmljdGxpc3QpOworCisJCQlyZXN1bHQgPSBibXNfYWRkX21lbWJlcihyZXN1bHQsIHIpOwor CisJCQkvKiBXZSBoYXZlIHJlbW92ZWQgdGhlIG91dGVyIHJlbGF0aW9uLCB0cnkgdGhlIG5l eHQgb25lLiAqLworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlyZXR1cm4gcmVzdWx0OworfQor CisvKgorICogR2F0aGVyIGluZGV4ZXMgb2YgYmFzZSByZWxhdGlvbnMgZnJvbSB0aGUgam9p bmxpc3QgYW5kIHRyeSB0byBlbGltaW5hdGUgc2VsZgorICogam9pbnMuCisgKi8KK3N0YXRp YyBSZWxpZHMKK3JlbW92ZV9zZWxmX2pvaW5zX3JlY3Vyc2UoUGxhbm5lckluZm8gKnJvb3Qs IExpc3QgKmpvaW5saXN0LCBSZWxpZHMgdG9SZW1vdmUpCit7CisJTGlzdENlbGwgICAqamw7 CisJUmVsaWRzCQlyZWxpZHMgPSBOVUxMOworCVNlbGZKb2luQ2FuZGlkYXRlICpjYW5kaWRh dGVzID0gTlVMTDsKKwlpbnQJCQlpOworCWludAkJCWo7CisJaW50CQkJbnVtUmVsczsKKwor CS8qIENvbGxlY3QgaW5kZXhlcyBvZiBiYXNlIHJlbGF0aW9ucyBvZiB0aGUgam9pbiB0cmVl ICovCisJZm9yZWFjaChqbCwgam9pbmxpc3QpCisJeworCQlOb2RlCSAgICpqbG5vZGUgPSAo Tm9kZSAqKSBsZmlyc3QoamwpOworCisJCWlmIChJc0Eoamxub2RlLCBSYW5nZVRibFJlZikp CisJCXsKKwkJCWludAkJCXZhcm5vID0gKChSYW5nZVRibFJlZiAqKSBqbG5vZGUpLT5ydGlu ZGV4OworCQkJUmFuZ2VUYmxFbnRyeSAqcnRlID0gcm9vdC0+c2ltcGxlX3J0ZV9hcnJheVt2 YXJub107CisKKwkJCS8qCisJCQkgKiBXZSBvbmx5IGNvbnNpZGVyIG9yZGluYXJ5IHJlbGF0 aW9ucyBhcyBjYW5kaWRhdGVzIHRvIGJlIHJlbW92ZWQsCisJCQkgKiBhbmQgdGhlc2UgcmVs YXRpb25zIHNob3VsZCBub3QgaGF2ZSBUQUJMRVNBTVBMRSBjbGF1c2VzCisJCQkgKiBzcGVj aWZpZWQuICBSZW1vdmluZyBhIHJlbGF0aW9uIHdpdGggVEFCTEVTQU1QTEUgY2xhdXNlIGNv dWxkCisJCQkgKiBwb3RlbnRpYWxseSBjaGFuZ2UgdGhlIHN5bnRheCBvZiB0aGUgcXVlcnku CisJCQkgKiBCZWNhdXNlIG9mIFVQREFURS9ERUxFVEUgRVBRIG1lYWNoYW5pc20sIGN1cnJl bnRseSBRdWVyeS0+cmVzdWx0UmVsYXRpb24KKwkJCSAqIG9yIFF1ZXJ5LT5tZXJnZVRhcmdl dFJlbGF0aW9uIGFzc29jaWF0ZWQgcmVsIGNhbm5vdCBiZSBlbGltaW5hdGVkLgorCQkJICov CisJCQlpZiAocnRlLT5ydGVraW5kID09IFJURV9SRUxBVElPTiAmJgorCQkJCXJ0ZS0+cmVs a2luZCA9PSBSRUxLSU5EX1JFTEFUSU9OICYmCisJCQkJcnRlLT50YWJsZXNhbXBsZSA9PSBO VUxMICYmCisJCQkJdmFybm8gIT0gcm9vdC0+cGFyc2UtPnJlc3VsdFJlbGF0aW9uICYmCisJ CQkJdmFybm8gIT0gcm9vdC0+cGFyc2UtPm1lcmdlVGFyZ2V0UmVsYXRpb24pCisJCQl7CisJ CQkJQXNzZXJ0KCFibXNfaXNfbWVtYmVyKHZhcm5vLCByZWxpZHMpKTsKKwkJCQlyZWxpZHMg PSBibXNfYWRkX21lbWJlcihyZWxpZHMsIHZhcm5vKTsKKwkJCX0KKwkJfQorCQllbHNlIGlm IChJc0Eoamxub2RlLCBMaXN0KSkKKwkJeworCQkJLyogUmVjdXJzaXZlbHkgZ28gaW5zaWRl IHRoZSBzdWItam9pbmxpc3QgKi8KKwkJCXRvUmVtb3ZlID0gcmVtb3ZlX3NlbGZfam9pbnNf cmVjdXJzZShyb290LCAoTGlzdCAqKSBqbG5vZGUsCisJCQkJCQkJCQkJCQkgdG9SZW1vdmUp OworCQl9CisJCWVsc2UKKwkJCWVsb2coRVJST1IsICJ1bnJlY29nbml6ZWQgam9pbmxpc3Qg bm9kZSB0eXBlOiAlZCIsCisJCQkJIChpbnQpIG5vZGVUYWcoamxub2RlKSk7CisJfQorCisJ bnVtUmVscyA9IGJtc19udW1fbWVtYmVycyhyZWxpZHMpOworCisJLyogTmVlZCBhdCBsZWFz dCB0d28gcmVsYXRpb25zIGZvciB0aGUgam9pbiAqLworCWlmIChudW1SZWxzIDwgMikKKwkJ cmV0dXJuIHRvUmVtb3ZlOworCisJLyoKKwkgKiBJbiBvcmRlciB0byBmaW5kIHJlbGF0aW9u cyB3aXRoIHRoZSBzYW1lIG9pZCB3ZSBmaXJzdCBidWlsZCBhbiBhcnJheSBvZgorCSAqIGNh bmRpZGF0ZXMgYW5kIHRoZW4gc29ydCBpdCBieSBvaWQuCisJICovCisJY2FuZGlkYXRlcyA9 IChTZWxmSm9pbkNhbmRpZGF0ZSAqKSBwYWxsb2Moc2l6ZW9mKFNlbGZKb2luQ2FuZGlkYXRl KSAqCisJCQkJCQkJCQkJCSAgbnVtUmVscyk7CisJaSA9IC0xOworCWogPSAwOworCXdoaWxl ICgoaSA9IGJtc19uZXh0X21lbWJlcihyZWxpZHMsIGkpKSA+PSAwKQorCXsKKwkJY2FuZGlk YXRlc1tqXS5yZWxpZCA9IGk7CisJCWNhbmRpZGF0ZXNbal0ucmVsb2lkID0gcm9vdC0+c2lt cGxlX3J0ZV9hcnJheVtpXS0+cmVsaWQ7CisJCWorKzsKKwl9CisKKwlxc29ydChjYW5kaWRh dGVzLCBudW1SZWxzLCBzaXplb2YoU2VsZkpvaW5DYW5kaWRhdGUpLAorCQkgIHNlbGZfam9p bl9jYW5kaWRhdGVzX2NtcCk7CisKKwkvKgorCSAqIEl0ZXJhdGl2ZWx5IGZvcm0gYSBncm91 cCBvZiByZWxhdGlvbiBpbmRleGVzIHdpdGggdGhlIHNhbWUgb2lkIGFuZAorCSAqIGxhdW5j aCB0aGUgcm91dGluZSB0aGF0IGRldGVjdHMgc2VsZi1qb2lucyBpbiB0aGlzIGdyb3VwIGFu ZCByZW1vdmVzCisJICogZXhjZXNzaXZlIHJhbmdlIHRhYmxlIGVudHJpZXMuCisJICoKKwkg KiBBdCB0aGUgZW5kIG9mIHRoZSBpdGVyYXRpb24sIGV4Y2x1ZGUgdGhlIGdyb3VwIGZyb20g dGhlIG92ZXJhbGwgcmVsaWRzCisJICogbGlzdC4gU28gZWFjaCBuZXh0IGl0ZXJhdGlvbiBv ZiB0aGUgY3ljbGUgd2lsbCBpbnZvbHZlIGxlc3MgYW5kIGxlc3MKKwkgKiB2YWx1ZSBvZiBy ZWxpZHMuCisJICovCisJaSA9IDA7CisJZm9yIChqID0gMTsgaiA8IG51bVJlbHMgKyAxOyBq KyspCisJeworCQlpZiAoaiA9PSBudW1SZWxzIHx8IGNhbmRpZGF0ZXNbal0ucmVsb2lkICE9 IGNhbmRpZGF0ZXNbaV0ucmVsb2lkKQorCQl7CisJCQlpZiAoaiAtIGkgPj0gMikKKwkJCXsK KwkJCQkvKiBDcmVhdGUgYSBncm91cCBvZiByZWxhdGlvbiBpbmRleGVzIHdpdGggdGhlIHNh bWUgb2lkICovCisJCQkJUmVsaWRzCQlncm91cCA9IE5VTEw7CisJCQkJUmVsaWRzCQlyZW1v dmVkOworCisJCQkJd2hpbGUgKGkgPCBqKQorCQkJCXsKKwkJCQkJZ3JvdXAgPSBibXNfYWRk X21lbWJlcihncm91cCwgY2FuZGlkYXRlc1tpXS5yZWxpZCk7CisJCQkJCWkrKzsKKwkJCQl9 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 ZWQpOworCQkJaWYgKG5yZW1vdmVkICE9IDEpCisJCQkJZWxvZyhFUlJPUiwgImZhaWxlZCB0 byBmaW5kIHJlbGF0aW9uICVkIGluIGpvaW5saXN0IiwgcmVsaWQpOworCQl9CisJfQorCisJ cmV0dXJuIGpvaW5saXN0OwogfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVy L3BsYW4vcGxhbm1haW4uYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5tYWlu LmMKaW5kZXggZTE3ZDMxYTVjMy4uMDc1ZDM2YzdlYyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvb3B0aW1pemVyL3BsYW4vcGxhbm1haW4uYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6 ZXIvcGxhbi9wbGFubWFpbi5jCkBAIC0yMzAsNiArMjMwLDExIEBAIHF1ZXJ5X3BsYW5uZXIo UGxhbm5lckluZm8gKnJvb3QsCiAJICovCiAJcmVkdWNlX3VuaXF1ZV9zZW1pam9pbnMocm9v dCk7CiAKKwkvKgorCSAqIFJlbW92ZSBzZWxmIGpvaW5zIG9uIGEgdW5pcXVlIGNvbHVtbi4K KwkgKi8KKwlqb2lubGlzdCA9IHJlbW92ZV91c2VsZXNzX3NlbGZfam9pbnMocm9vdCwgam9p bmxpc3QpOworCiAJLyoKIAkgKiBOb3cgZGlzdHJpYnV0ZSAicGxhY2Vob2xkZXJzIiB0byBi YXNlIHJlbHMgYXMgbmVlZGVkLiAgVGhpcyBoYXMgdG8gYmUKIAkgKiBkb25lIGFmdGVyIGpv aW4gcmVtb3ZhbCBiZWNhdXNlIHJlbW92YWwgY291bGQgY2hhbmdlIHdoZXRoZXIgYQpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3ByZXAvcHJlcHVuaW9uLmMgYi9zcmMv YmFja2VuZC9vcHRpbWl6ZXIvcHJlcC9wcmVwdW5pb24uYwppbmRleCBhMGJhZjZkNGExLi42 YTUxOWNjZGVjIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcHJlcC9wcmVw dW5pb24uYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcHJlcC9wcmVwdW5pb24uYwpA QCAtNjYyLDcgKzY2Miw3IEBAIGJ1aWxkX3NldG9wX2NoaWxkX3BhdGhzKFBsYW5uZXJJbmZv ICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJICogb3RoZXJ3aXNlIGRvIHN0YXRpc3RpY2Fs IGVzdGltYXRpb24uCiAJICoKIAkgKiBYWFggeW91IGRvbid0IHJlYWxseSB3YW50IHRvIGtu b3cgYWJvdXQgdGhpczogd2UgZG8gdGhlIGVzdGltYXRpb24KLQkgKiB1c2luZyB0aGUgc3Vi cXVlcnkncyBvcmlnaW5hbCB0YXJnZXRsaXN0IGV4cHJlc3Npb25zLCBub3QgdGhlCisJICog dXNpbmcgdGhlIHN1YnJvb3QtPnBhcnNlJ3Mgb3JpZ2luYWwgdGFyZ2V0bGlzdCBleHByZXNz aW9ucywgbm90IHRoZQogCSAqIHN1YnJvb3QtPnByb2Nlc3NlZF90bGlzdCB3aGljaCBtaWdo dCBzZWVtIG1vcmUgYXBwcm9wcmlhdGUuICBUaGUgcmVhc29uCiAJICogaXMgdGhhdCBpZiB0 aGUgc3VicXVlcnkgaXMgaXRzZWxmIGEgc2V0b3AsIGl0IG1heSByZXR1cm4gYQogCSAqIHBy b2Nlc3NlZF90bGlzdCBjb250YWluaW5nICJ2YXJubyAwIiBWYXJzIGdlbmVyYXRlZCBieQpA QCAtNjcwLDYgKzY3MCw5IEBAIGJ1aWxkX3NldG9wX2NoaWxkX3BhdGhzKFBsYW5uZXJJbmZv ICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJICogbWlnaHRpbHkuICBXZSBvdWdodCB0byBn ZXQgcmlkIG9mIHRoZSAidmFybm8gMCIgaGFjaywgYnV0IHRoYXQgcmVxdWlyZXMKIAkgKiBh IHJlZGVzaWduIG9mIHRoZSBwYXJzZXRyZWUgcmVwcmVzZW50YXRpb24gb2Ygc2V0b3BzLCBz byB0aGF0IHRoZXJlIGNhbgogCSAqIGJlIGFuIFJURSBjb3JyZXNwb25kaW5nIHRvIGVhY2gg c2V0b3AncyBvdXRwdXQuCisJICogTm90ZSwgd2UgdXNlIHRoaXMgbm90IHN1YnF1ZXJ5J3Mg dGFyZ2V0bGlzdCBidXQgc3Vicm9vdC0+cGFyc2UncworCSAqIHRhcmdldGxpc3QsIGJlY2F1 c2UgaXQgd2FzIHJldmlzZWQgYnkgc2VsZi1qb2luIHJlbW92YWwuICBzdWJxdWVyeSdzCisJ ICogdGFyZ2V0bGlzdCBtaWdodCBjb250YWluIHRoZSByZWZlcmVuY2VzIHRvIHRoZSByZW1v dmVkIHJlbGlkcy4KIAkgKi8KIAlpZiAocE51bUdyb3VwcykKIAl7CkBAIC02ODIsNyArNjg1 LDcgQEAgYnVpbGRfc2V0b3BfY2hpbGRfcGF0aHMoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9w dEluZm8gKnJlbCwKIAkJCSpwTnVtR3JvdXBzID0gcmVsLT5jaGVhcGVzdF90b3RhbF9wYXRo LT5yb3dzOwogCQllbHNlCiAJCQkqcE51bUdyb3VwcyA9IGVzdGltYXRlX251bV9ncm91cHMo c3Vicm9vdCwKLQkJCQkJCQkJCQkJICBnZXRfdGxpc3RfZXhwcnMoc3VicXVlcnktPnRhcmdl dExpc3QsIGZhbHNlKSwKKwkJCQkJCQkJCQkJICBnZXRfdGxpc3RfZXhwcnMoc3Vicm9vdC0+ cGFyc2UtPnRhcmdldExpc3QsIGZhbHNlKSwKIAkJCQkJCQkJCQkJICByZWwtPmNoZWFwZXN0 X3RvdGFsX3BhdGgtPnJvd3MsCiAJCQkJCQkJCQkJCSAgTlVMTCwKIAkJCQkJCQkJCQkJICBO VUxMKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Jld3JpdGUvcmV3cml0ZU1hbmlwLmMg Yi9zcmMvYmFja2VuZC9yZXdyaXRlL3Jld3JpdGVNYW5pcC5jCmluZGV4IDhmOTBhZmIzMjYu LjUwNThhNzAwZWUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Jld3JpdGUvcmV3cml0ZU1h bmlwLmMKKysrIGIvc3JjL2JhY2tlbmQvcmV3cml0ZS9yZXdyaXRlTWFuaXAuYwpAQCAtNTQ4 LDYgKzU0OCw3IEBAIG9mZnNldF9yZWxpZF9zZXQoUmVsaWRzIHJlbGlkcywgaW50IG9mZnNl dCkKICAqIHRvICduZXdfaW5kZXgnLiAgVGhlIHZhcm5vc3luIGZpZWxkcyBhcmUgY2hhbmdl ZCB0b28uICBBbHNvLCBhZGp1c3Qgb3RoZXIKICAqIG5vZGVzIHRoYXQgY29udGFpbiByYW5n ZXRhYmxlIGluZGV4ZXMsIHN1Y2ggYXMgUmFuZ2VUYmxSZWYgYW5kIEpvaW5FeHByLgogICoK KyAqIGNoYW5nZV9SYW5nZVRibFJlZjogZG8gd2UgY2hhbmdlIFJhbmdlVGJsUmVmIG9yIG5v dC4gc2VlIENoYW5nZVZhck5vZGVzRXh0ZW5kZWQuCiAgKiBOT1RFOiBhbHRob3VnaCB0aGlz IGhhcyB0aGUgZm9ybSBvZiBhIHdhbGtlciwgd2UgY2hlYXQgYW5kIG1vZGlmeSB0aGUKICAq IG5vZGVzIGluLXBsYWNlLiAgVGhlIGdpdmVuIGV4cHJlc3Npb24gdHJlZSBzaG91bGQgaGF2 ZSBiZWVuIGNvcGllZAogICogZWFybGllciB0byBlbnN1cmUgdGhhdCBubyB1bndhbnRlZCBz aWRlLWVmZmVjdHMgb2NjdXIhCkBAIC01NTgsNiArNTU5LDcgQEAgdHlwZWRlZiBzdHJ1Y3QK IAlpbnQJCQlydF9pbmRleDsKIAlpbnQJCQluZXdfaW5kZXg7CiAJaW50CQkJc3VibGV2ZWxz X3VwOworCWJvb2wJCWNoYW5nZV9SYW5nZVRibFJlZjsKIH0gQ2hhbmdlVmFyTm9kZXNfY29u dGV4dDsKIAogc3RhdGljIGJvb2wKQEAgLTU5MCw3ICs1OTIsNyBAQCBDaGFuZ2VWYXJOb2Rl c193YWxrZXIoTm9kZSAqbm9kZSwgQ2hhbmdlVmFyTm9kZXNfY29udGV4dCAqY29udGV4dCkK IAkJCWNleHByLT5jdmFybm8gPSBjb250ZXh0LT5uZXdfaW5kZXg7CiAJCXJldHVybiBmYWxz ZTsKIAl9Ci0JaWYgKElzQShub2RlLCBSYW5nZVRibFJlZikpCisJaWYgKElzQShub2RlLCBS YW5nZVRibFJlZikgJiYgY29udGV4dC0+Y2hhbmdlX1JhbmdlVGJsUmVmKQogCXsKIAkJUmFu Z2VUYmxSZWYgKnJ0ciA9IChSYW5nZVRibFJlZiAqKSBub2RlOwogCkBAIC02MzcsNiArNjM5 LDc1IEBAIENoYW5nZVZhck5vZGVzX3dhbGtlcihOb2RlICpub2RlLCBDaGFuZ2VWYXJOb2Rl c19jb250ZXh0ICpjb250ZXh0KQogCQl9CiAJCXJldHVybiBmYWxzZTsKIAl9CisJaWYgKElz QShub2RlLCBSZXN0cmljdEluZm8pKQorCXsKKwkJUmVzdHJpY3RJbmZvICpyaW5mbyA9IChS ZXN0cmljdEluZm8gKikgbm9kZTsKKwkJaW50CQkJcmVsaWQgPSAtMTsKKwkJYm9vbAkJaXNf cmVxX2VxdWFsID0KKwkJCShyaW5mby0+cmVxdWlyZWRfcmVsaWRzID09IHJpbmZvLT5jbGF1 c2VfcmVsaWRzKTsKKwkJYm9vbAkJY2xhdXNlX3JlbGlkc19pc19tdWx0aXBsZSA9CisJCQko Ym1zX21lbWJlcnNoaXAocmluZm8tPmNsYXVzZV9yZWxpZHMpID09IEJNU19NVUxUSVBMRSk7 CisKKwkJaWYgKGJtc19pc19tZW1iZXIoY29udGV4dC0+cnRfaW5kZXgsIHJpbmZvLT5jbGF1 c2VfcmVsaWRzKSkKKwkJeworCQkJZXhwcmVzc2lvbl90cmVlX3dhbGtlcigoTm9kZSAqKSBy aW5mby0+Y2xhdXNlLCBDaGFuZ2VWYXJOb2Rlc193YWxrZXIsICh2b2lkICopIGNvbnRleHQp OworCQkJZXhwcmVzc2lvbl90cmVlX3dhbGtlcigoTm9kZSAqKSByaW5mby0+b3JjbGF1c2Us IENoYW5nZVZhck5vZGVzX3dhbGtlciwgKHZvaWQgKikgY29udGV4dCk7CisKKwkJCXJpbmZv LT5jbGF1c2VfcmVsaWRzID0KKwkJCQlhZGp1c3RfcmVsaWRfc2V0KHJpbmZvLT5jbGF1c2Vf cmVsaWRzLCBjb250ZXh0LT5ydF9pbmRleCwgY29udGV4dC0+bmV3X2luZGV4KTsKKwkJCXJp bmZvLT5udW1fYmFzZV9yZWxzID0gYm1zX251bV9tZW1iZXJzKHJpbmZvLT5jbGF1c2VfcmVs aWRzKTsKKwkJCXJpbmZvLT5sZWZ0X3JlbGlkcyA9CisJCQkJYWRqdXN0X3JlbGlkX3NldChy aW5mby0+bGVmdF9yZWxpZHMsIGNvbnRleHQtPnJ0X2luZGV4LCBjb250ZXh0LT5uZXdfaW5k ZXgpOworCQkJcmluZm8tPnJpZ2h0X3JlbGlkcyA9CisJCQkJYWRqdXN0X3JlbGlkX3NldChy aW5mby0+cmlnaHRfcmVsaWRzLCBjb250ZXh0LT5ydF9pbmRleCwgY29udGV4dC0+bmV3X2lu ZGV4KTsKKwkJfQorCisJCWlmIChpc19yZXFfZXF1YWwpCisJCQlyaW5mby0+cmVxdWlyZWRf cmVsaWRzID0gcmluZm8tPmNsYXVzZV9yZWxpZHM7CisJCWVsc2UKKwkJCXJpbmZvLT5yZXF1 aXJlZF9yZWxpZHMgPQorCQkJCWFkanVzdF9yZWxpZF9zZXQocmluZm8tPnJlcXVpcmVkX3Jl bGlkcywgY29udGV4dC0+cnRfaW5kZXgsIGNvbnRleHQtPm5ld19pbmRleCk7CisKKwkJcmlu Zm8tPm91dGVyX3JlbGlkcyA9CisJCQlhZGp1c3RfcmVsaWRfc2V0KHJpbmZvLT5vdXRlcl9y ZWxpZHMsIGNvbnRleHQtPnJ0X2luZGV4LCBjb250ZXh0LT5uZXdfaW5kZXgpOworCQlyaW5m by0+aW5jb21wYXRpYmxlX3JlbGlkcyA9CisJCQlhZGp1c3RfcmVsaWRfc2V0KHJpbmZvLT5p bmNvbXBhdGlibGVfcmVsaWRzLCBjb250ZXh0LT5ydF9pbmRleCwgY29udGV4dC0+bmV3X2lu ZGV4KTsKKworCQlpZiAocmluZm8tPm1lcmdlb3BmYW1pbGllcyAmJgorCQkJYm1zX2dldF9z aW5nbGV0b25fbWVtYmVyKHJpbmZvLT5jbGF1c2VfcmVsaWRzLCAmcmVsaWQpICYmCisJCQlj bGF1c2VfcmVsaWRzX2lzX211bHRpcGxlICYmCisJCQlyZWxpZCA9PSBjb250ZXh0LT5uZXdf aW5kZXggJiYgSXNBKHJpbmZvLT5jbGF1c2UsIE9wRXhwcikpCisJCXsKKwkJCUV4cHIJICAg KmxlZnRPcDsKKwkJCUV4cHIJICAgKnJpZ2h0T3A7CisKKwkJCWxlZnRPcCA9IChFeHByICop IGdldF9sZWZ0b3AocmluZm8tPmNsYXVzZSk7CisJCQlyaWdodE9wID0gKEV4cHIgKikgZ2V0 X3JpZ2h0b3AocmluZm8tPmNsYXVzZSk7CisKKwkJCS8qCisJCQkgKiBmb3IgU0pFIChzZWxm IGpvaW4gZWxpbWluYXRpb24pLCBjaGFuZ2luZyB2YXJub3Mgd2lsbCBtYWtlIHQxLmEgPSB0 Mi5hCisJCQkgKiB0byAidDEuYSA9IHQxLmEiLCB3aGljaCBpcyBhbHdheXMgdHJ1ZSwgd2Ug Y2FuIG9wdGl6bWllZCBpdCBvdXQuCisJCQkgKiB0byBvcHRpbXppZWQgaXQgb3V0LCB3ZSB1 c2UgZXF1YWwgdG8gdmFsaWRhdGUsCisJCQkgKiBidXQgd2UgYWxzbyBuZWVkIHRvIGFkZCBh IG5vdCBudWxsIHF1YWwgKE51bGxUZXN0KS4KKwkJCSAqCisJCQkqLworCQkJaWYgKGxlZnRP cCAhPSBOVUxMICYmIGVxdWFsKGxlZnRPcCwgcmlnaHRPcCkpCisJCQl7CisJCQkJTnVsbFRl c3QgICAqbnRlc3QgPSBtYWtlTm9kZShOdWxsVGVzdCk7CisKKwkJCQludGVzdC0+YXJnID0g bGVmdE9wOworCQkJCW50ZXN0LT5udWxsdGVzdHR5cGUgPSBJU19OT1RfTlVMTDsKKwkJCQlu dGVzdC0+YXJnaXNyb3cgPSBmYWxzZTsKKwkJCQludGVzdC0+bG9jYXRpb24gPSAtMTsKKwkJ CQlyaW5mby0+Y2xhdXNlID0gKEV4cHIgKikgbnRlc3Q7CisJCQkJcmluZm8tPm1lcmdlb3Bm YW1pbGllcyA9IE5JTDsKKwkJCQlyaW5mby0+bGVmdF9lbSA9IE5VTEw7CisJCQkJcmluZm8t PnJpZ2h0X2VtID0gTlVMTDsKKwkJCX0KKwkJCUFzc2VydChyaW5mby0+b3JjbGF1c2UgPT0g TlVMTCk7CisJCX0KKwkJcmV0dXJuIGZhbHNlOworCX0KIAlpZiAoSXNBKG5vZGUsIEFwcGVu ZFJlbEluZm8pKQogCXsKIAkJQXBwZW5kUmVsSW5mbyAqYXBwaW5mbyA9IChBcHBlbmRSZWxJ bmZvICopIG5vZGU7CkBAIC02NzAsMzIgKzc0MSwyOSBAQCBDaGFuZ2VWYXJOb2Rlc193YWxr ZXIoTm9kZSAqbm9kZSwgQ2hhbmdlVmFyTm9kZXNfY29udGV4dCAqY29udGV4dCkKIAkJCQkJ CQkJICAodm9pZCAqKSBjb250ZXh0KTsKIH0KIAorLyoKKyAqIGFsbW9zdCBlcXVpdmFsZW50 IHRvIENoYW5nZVZhck5vZGVzLiBhbHNvIHNlZSBjb21tZW50cyBpbiBDaGFuZ2VWYXJOb2Rl cy4KKyAqIGRpZmZlcmVuY2Ugd2l0aCBDaGFuZ2VWYXJOb2RlczoKKyAqIHdoZW4gd2UgdXNl IENoYW5nZVZhck5vZGVzIGZvciBub2RlIHdlIGNoYW5nZSBhbGwgb2YgaXQncyB1bmRlcmx5 aW5nIG5vZGVzLgorICogYnV0IGZvciBTSkUgd2UgZG9uJ3Qgd2FudCB0byBjaGFuZ2Ugbm9k ZSB0eXBlOiBSYW5nZVRibFJlZiwgaW4gc29tZSBvY2Nhc2lvbi4KKyAqIGJlY2F1c2UgU0pF IGxhc3Qgc3RlcCwgcmVtb3ZlX3JlbF9mcm9tX2pvaW5saXN0IGlzIHRvCisgKiByZW1vdmUg bGVmdCBub2RlIChSYW5nZVRibFJlZikgb25lIGJ5IG9uZS4gaWYgaW4gYW55IGNhc2Ugd2hp bGUgdXNpbmcKKyAqIENoYW5nZVZhck5vZGVzLCBieSBhY2NpZGVudGx5IGxlYWYgbm9kZSBS YW5nZVRibFJlZiBhbHNvIGJlaW5nIHVwZGF0ZWQKKyAqIHRoZW4gcmVtb3ZlX3JlbF9mcm9t X2pvaW5saXN0IHdpbGwgaGF2ZSBlcnJvci4KKyovCiB2b2lkCi1DaGFuZ2VWYXJOb2RlcyhO b2RlICpub2RlLCBpbnQgcnRfaW5kZXgsIGludCBuZXdfaW5kZXgsIGludCBzdWJsZXZlbHNf dXApCitDaGFuZ2VWYXJOb2Rlc0V4dGVuZGVkKE5vZGUgKm5vZGUsIGludCBydF9pbmRleCwg aW50IG5ld19pbmRleCwKKwkJCQkJICAgaW50IHN1YmxldmVsc191cCwgYm9vbCBjaGFuZ2Vf UmFuZ2VUYmxSZWYpCiB7Ci0JQ2hhbmdlVmFyTm9kZXNfY29udGV4dCBjb250ZXh0OwotCisJ Q2hhbmdlVmFyTm9kZXNfY29udGV4dAljb250ZXh0OwogCWNvbnRleHQucnRfaW5kZXggPSBy dF9pbmRleDsKIAljb250ZXh0Lm5ld19pbmRleCA9IG5ld19pbmRleDsKIAljb250ZXh0LnN1 YmxldmVsc191cCA9IHN1YmxldmVsc191cDsKKwljb250ZXh0LmNoYW5nZV9SYW5nZVRibFJl ZiA9IGNoYW5nZV9SYW5nZVRibFJlZjsKIAotCS8qCi0JICogTXVzdCBiZSBwcmVwYXJlZCB0 byBzdGFydCB3aXRoIGEgUXVlcnkgb3IgYSBiYXJlIGV4cHJlc3Npb24gdHJlZTsgaWYKLQkg KiBpdCdzIGEgUXVlcnksIGdvIHN0cmFpZ2h0IHRvIHF1ZXJ5X3RyZWVfd2Fsa2VyIHRvIG1h a2Ugc3VyZSB0aGF0Ci0JICogc3VibGV2ZWxzX3VwIGRvZXNuJ3QgZ2V0IGluY3JlbWVudGVk IHByZW1hdHVyZWx5LgotCSAqLwogCWlmIChub2RlICYmIElzQShub2RlLCBRdWVyeSkpCiAJ ewogCQlRdWVyeQkgICAqcXJ5ID0gKFF1ZXJ5ICopIG5vZGU7Ci0KLQkJLyoKLQkJICogSWYg d2UgYXJlIHN0YXJ0aW5nIGF0IGEgUXVlcnksIGFuZCBzdWJsZXZlbHNfdXAgaXMgemVybywg dGhlbiB3ZQotCQkgKiBtdXN0IGFsc28gZml4IHJhbmdldGFibGUgaW5kZXhlcyBpbiB0aGUg UXVlcnkgaXRzZWxmIC0tLSBuYW1lbHkKLQkJICogcmVzdWx0UmVsYXRpb24sIG1lcmdlVGFy Z2V0UmVsYXRpb24sIGV4Y2xSZWxJbmRleCAgYW5kIHJvd01hcmtzCi0JCSAqIGVudHJpZXMu ICBzdWJsZXZlbHNfdXAgY2Fubm90IGJlIHplcm8gd2hlbiByZWN1cnNpbmcgaW50byBhCi0J CSAqIHN1YnF1ZXJ5LCBzbyB0aGVyZSdzIG5vIG5lZWQgdG8gaGF2ZSB0aGUgc2FtZSBsb2dp YyBpbnNpZGUKLQkJICogQ2hhbmdlVmFyTm9kZXNfd2Fsa2VyLgotCQkgKi8KIAkJaWYgKHN1 YmxldmVsc191cCA9PSAwKQogCQl7CiAJCQlMaXN0Q2VsbCAgICpsOwpAQCAtNzA2LDcgKzc3 NCw2IEBAIENoYW5nZVZhck5vZGVzKE5vZGUgKm5vZGUsIGludCBydF9pbmRleCwgaW50IG5l d19pbmRleCwgaW50IHN1YmxldmVsc191cCkKIAkJCWlmIChxcnktPm1lcmdlVGFyZ2V0UmVs YXRpb24gPT0gcnRfaW5kZXgpCiAJCQkJcXJ5LT5tZXJnZVRhcmdldFJlbGF0aW9uID0gbmV3 X2luZGV4OwogCi0JCQkvKiB0aGlzIGlzIHVubGlrZWx5IHRvIGV2ZXIgYmUgdXNlZCwgYnV0 IC4uLiAqLwogCQkJaWYgKHFyeS0+b25Db25mbGljdCAmJiBxcnktPm9uQ29uZmxpY3QtPmV4 Y2xSZWxJbmRleCA9PSBydF9pbmRleCkKIAkJCQlxcnktPm9uQ29uZmxpY3QtPmV4Y2xSZWxJ bmRleCA9IG5ld19pbmRleDsKIApAQCAtNzI0LDYgKzc5MSwxMSBAQCBDaGFuZ2VWYXJOb2Rl cyhOb2RlICpub2RlLCBpbnQgcnRfaW5kZXgsIGludCBuZXdfaW5kZXgsIGludCBzdWJsZXZl bHNfdXApCiAJZWxzZQogCQlDaGFuZ2VWYXJOb2Rlc193YWxrZXIobm9kZSwgJmNvbnRleHQp OwogfQordm9pZAorQ2hhbmdlVmFyTm9kZXMoTm9kZSAqbm9kZSwgaW50IHJ0X2luZGV4LCBp bnQgbmV3X2luZGV4LCBpbnQgc3VibGV2ZWxzX3VwKQoreworCUNoYW5nZVZhck5vZGVzRXh0 ZW5kZWQobm9kZSwgcnRfaW5kZXgsIG5ld19pbmRleCwgc3VibGV2ZWxzX3VwLCB0cnVlKTsK K30KIAogLyoKICAqIFN1YnN0aXR1dGUgbmV3cmVsaWQgZm9yIG9sZHJlbGlkIGluIGEgUmVs aWQgc2V0CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y190YWJsZXMu YyBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3RhYmxlcy5jCmluZGV4IDhhNjdmMDEy MDAuLjk5MjEyYWVlYzggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3Vj X3RhYmxlcy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3RhYmxlcy5jCkBA IC05ODYsNiArOTg2LDE2IEBAIHN0cnVjdCBjb25maWdfYm9vbCBDb25maWd1cmVOYW1lc0Jv b2xbXSA9CiAJCXRydWUsCiAJCU5VTEwsIE5VTEwsIE5VTEwKIAl9LAorCXsKKwkJeyJlbmFi bGVfc2VsZl9qb2luX3JlbW92YWwiLCBQR0NfVVNFUlNFVCwgUVVFUllfVFVOSU5HX01FVEhP RCwKKwkJCWdldHRleHRfbm9vcCgiRW5hYmxlIHJlbW92YWwgb2YgdW5pcXVlIHNlbGYtam9p bnMuIiksCisJCQlOVUxMLAorCQkJR1VDX0VYUExBSU4gfCBHVUNfTk9UX0lOX1NBTVBMRQor CQl9LAorCQkmZW5hYmxlX3NlbGZfam9pbl9yZW1vdmFsLAorCQl0cnVlLAorCQlOVUxMLCBO VUxMLCBOVUxMCisJfSwKIAl7CiAJCXsiZW5hYmxlX2dyb3VwX2J5X3Jlb3JkZXJpbmciLCBQ R0NfVVNFUlNFVCwgUVVFUllfVFVOSU5HX01FVEhPRCwKIAkJCWdldHRleHRfbm9vcCgiRW5h YmxlcyByZW9yZGVyaW5nIG9mIEdST1VQIEJZIGtleXMuIiksCmRpZmYgLS1naXQgYS9zcmMv aW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rl cy5oCmluZGV4IGFkZDBmOWU0NWYuLjFlOWQzYTAxNzQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNs dWRlL25vZGVzL3BhdGhub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rl cy5oCkBAIC03MzQsNyArNzM0LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgUGFydGl0aW9uU2NoZW1l RGF0YSAqUGFydGl0aW9uU2NoZW1lOwogICogcG9wdWxhdGUgdGhlc2UgZmllbGRzLCBmb3Ig YmFzZSByZWxzOyBidXQgc29tZWRheSB0aGV5IG1pZ2h0IGJlIHVzZWQgZm9yCiAgKiBqb2lu IHJlbHMgdG9vOgogICoKLSAqCQl1bmlxdWVfZm9yX3JlbHMgLSBsaXN0IG9mIFJlbGlkIHNl dHMsIGVhY2ggb25lIGJlaW5nIGEgc2V0IG9mIG90aGVyCisgKgkJdW5pcXVlX2Zvcl9yZWxz IC0gbGlzdCBvZiBVbmlxdWVSZWxJbmZvLCBlYWNoIG9uZSBiZWluZyBhIHNldCBvZiBvdGhl cgogICoJCQkJCXJlbHMgZm9yIHdoaWNoIHRoaXMgb25lIGhhcyBiZWVuIHByb3ZlbiB1bmlx dWUKICAqCQlub25fdW5pcXVlX2Zvcl9yZWxzIC0gbGlzdCBvZiBSZWxpZCBzZXRzLCBlYWNo IG9uZSBiZWluZyBhIHNldCBvZgogICoJCQkJCW90aGVyIHJlbHMgZm9yIHdoaWNoIHdlIGhh dmUgdHJpZWQgYW5kIGZhaWxlZCB0byBwcm92ZQpAQCAtOTczLDcgKzk3Myw3IEBAIHR5cGVk ZWYgc3RydWN0IFJlbE9wdEluZm8KIAkvKgogCSAqIGNhY2hlIHNwYWNlIGZvciByZW1lbWJl cmluZyBpZiB3ZSBoYXZlIHByb3ZlbiB0aGlzIHJlbGF0aW9uIHVuaXF1ZQogCSAqLwotCS8q IGtub3duIHVuaXF1ZSBmb3IgdGhlc2Ugb3RoZXIgcmVsaWQgc2V0KHMpICovCisJLyoga25v d24gdW5pcXVlIGZvciB0aGVzZSBvdGhlciByZWxpZCBzZXQocykgZ2l2ZW4gaW4gVW5pcXVl UmVsSW5mbyhzKSAqLwogCUxpc3QJICAgKnVuaXF1ZV9mb3JfcmVsczsKIAkvKiBrbm93biBu b3QgdW5pcXVlIGZvciB0aGVzZSBzZXQocykgKi8KIAlMaXN0CSAgICpub25fdW5pcXVlX2Zv cl9yZWxzOwpAQCAtMzQ0Myw0ICszNDQzLDM1IEBAIHR5cGVkZWYgc3RydWN0IEFnZ1RyYW5z SW5mbwogCWJvb2wJCWluaXRWYWx1ZUlzTnVsbDsKIH0gQWdnVHJhbnNJbmZvOwogCisvKgor ICogVW5pcXVlUmVsSW5mbyBjYWNoZXMgYSBmYWN0IHRoYXQgYSByZWxhdGlvbiBpcyB1bmlx dWUgd2hlbiBiZWluZyBqb2luZWQKKyAqIHRvIG90aGVyIHJlbGF0aW9uKHMpLgorICovCit0 eXBlZGVmIHN0cnVjdCBVbmlxdWVSZWxJbmZvCit7CisJcGdfbm9kZV9hdHRyKG5vX2NvcHlf ZXF1YWwsIG5vX3JlYWQsIG5vX3F1ZXJ5X2p1bWJsZSkKKworCU5vZGVUYWcJCXR5cGU7CisK KwkvKgorCSAqIFRoZSByZWxhdGlvbiBpbiBjb25zaWRlcmF0aW9uIGlzIHVuaXF1ZSB3aGVu IGJlaW5nIGpvaW5lZCB3aXRoIHRoaXMgc2V0CisJICogb2Ygb3RoZXIgcmVsYXRpb24ocyku CisJICovCisJUmVsaWRzCQlvdXRlcnJlbGlkczsKKworCS8qCisJICogVGhlIHJlbGF0aW9u IGluIGNvbnNpZGVyYXRpb24gaXMgdW5pcXVlIHdoZW4gY29uc2lkZXJpbmcgb25seSBjbGF1 c2VzCisJICogc3VpdGFibGUgZm9yIHNlbGYtam9pbiAocGFzc2VkIHNwbGl0X3NlbGZqb2lu X3F1YWxzKCkpLgorCSAqLworCWJvb2wJCXNlbGZfam9pbjsKKworCS8qCisJICogQWRkaXRp b25hbCBjbGF1c2VzIGZyb20gYSBiYXNlcmVzdHJpY3RpbmZvIGxpc3QgdGhhdCB3ZXJlIHVz ZWQgdG8gcHJvdmUKKwkgKiB0aGUgdW5pcXVlbmVzcy4gICBXZSBjYWNoZSBpdCBmb3IgdGhl IHNlbGYtam9pbiBjaGVja2luZyBwcm9jZWR1cmU6IGEKKwkgKiBzZWxmLWpvaW4gY2FuIGJl IHJlbW92ZWQgaWYgdGhlIG91dGVyIHJlbGF0aW9uIGNvbnRhaW5zIHN0cmljdGx5IHRoZQor CSAqIHNhbWUgc2V0IG9mIGNsYXVzZXMuCisJICovCisJTGlzdAkgICAqZXh0cmFfY2xhdXNl czsKK30gVW5pcXVlUmVsSW5mbzsKKwogI2VuZGlmCQkJCQkJCS8qIFBBVEhOT0RFU19IICov CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvb3B0aW1pemVyLmggYi9zcmMv aW5jbHVkZS9vcHRpbWl6ZXIvb3B0aW1pemVyLmgKaW5kZXggOTNlM2RjNzE5ZC4uNTUwZTAw MWRjMCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvb3B0aW1pemVyL29wdGltaXplci5oCisr KyBiL3NyYy9pbmNsdWRlL29wdGltaXplci9vcHRpbWl6ZXIuaApAQCAtMTkxLDYgKzE5MSw4 IEBAIGV4dGVybiBTb3J0R3JvdXBDbGF1c2UgKmdldF9zb3J0Z3JvdXByZWZfY2xhdXNlX25v ZXJyKEluZGV4IHNvcnRyZWYsCiAJCQkJCQkJCQkJCSAqIG91dHB1dCBsaXN0ICovCiAjZGVm aW5lIFBWQ19SRUNVUlNFX1BMQUNFSE9MREVSUwkweDAwMjAJLyogcmVjdXJzZSBpbnRvIFBs YWNlSG9sZGVyVmFyCiAJCQkJCQkJCQkJCSAqIGFyZ3VtZW50cyAqLworI2RlZmluZSBQVkNf SU5DTFVERV9DT05WRVJUUk9XVFlQRVMJMHgwMDQwICAgICAvKiBpbmNsdWRlIENvbnZlcnRS b3d0eXBlRXhwcnMgaW4KKwkJCQkJCQkqIG91dHB1dCBsaXN0ICovCiAKIGV4dGVybiBCaXRt YXBzZXQgKnB1bGxfdmFybm9zKFBsYW5uZXJJbmZvICpyb290LCBOb2RlICpub2RlKTsKIGV4 dGVybiBCaXRtYXBzZXQgKnB1bGxfdmFybm9zX29mX2xldmVsKFBsYW5uZXJJbmZvICpyb290 LCBOb2RlICpub2RlLCBpbnQgbGV2ZWxzdXApOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUv b3B0aW1pemVyL3BhdGhzLmggYi9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0aHMuaAppbmRl eCA1NDg2OWQ0NDAxLi42NGJhODlmY2I4IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9vcHRp bWl6ZXIvcGF0aHMuaAorKysgYi9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0aHMuaApAQCAt NzIsNiArNzIsOSBAQCBleHRlcm4gdm9pZCBjcmVhdGVfaW5kZXhfcGF0aHMoUGxhbm5lcklu Zm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCk7CiBleHRlcm4gYm9vbCByZWxhdGlvbl9oYXNf dW5pcXVlX2luZGV4X2ZvcihQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAog CQkJCQkJCQkJCSAgTGlzdCAqcmVzdHJpY3RsaXN0LAogCQkJCQkJCQkJCSAgTGlzdCAqZXhw cmxpc3QsIExpc3QgKm9wcmxpc3QpOworZXh0ZXJuIGJvb2wgcmVsYXRpb25faGFzX3VuaXF1 ZV9pbmRleF9leHQoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwKKwkJCQkJ CQkJCQkgIExpc3QgKnJlc3RyaWN0bGlzdCwgTGlzdCAqZXhwcmxpc3QsCisJCQkJCQkJCQkJ ICBMaXN0ICpvcHJsaXN0LCBMaXN0ICoqZXh0cmFfY2xhdXNlcyk7CiBleHRlcm4gYm9vbCBp bmRleGNvbF9pc19ib29sX2NvbnN0YW50X2Zvcl9xdWVyeShQbGFubmVySW5mbyAqcm9vdCwK IAkJCQkJCQkJCQkJCUluZGV4T3B0SW5mbyAqaW5kZXgsCiAJCQkJCQkJCQkJCQlpbnQgaW5k ZXhjb2wpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BsYW5tYWluLmgg Yi9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGxhbm1haW4uaAppbmRleCA5MzEzNzI2MWU0Li5i Y2Q2N2YzNzkxIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGxhbm1haW4u aAorKysgYi9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGxhbm1haW4uaApAQCAtMjAsNiArMjAs NyBAQAogLyogR1VDIHBhcmFtZXRlcnMgKi8KICNkZWZpbmUgREVGQVVMVF9DVVJTT1JfVFVQ TEVfRlJBQ1RJT04gMC4xCiBleHRlcm4gUEdETExJTVBPUlQgZG91YmxlIGN1cnNvcl90dXBs ZV9mcmFjdGlvbjsKK2V4dGVybiBQR0RMTElNUE9SVCBib29sIGVuYWJsZV9zZWxmX2pvaW5f cmVtb3ZhbDsKIAogLyogcXVlcnlfcGxhbm5lciBjYWxsYmFjayB0byBjb21wdXRlIHF1ZXJ5 X3BhdGhrZXlzICovCiB0eXBlZGVmIHZvaWQgKCpxdWVyeV9wYXRoa2V5c19jYWxsYmFjaykg KFBsYW5uZXJJbmZvICpyb290LCB2b2lkICpleHRyYSk7CkBAIC0xMTIsNiArMTEzLDExIEBA IGV4dGVybiBib29sIHF1ZXJ5X2lzX2Rpc3RpbmN0X2ZvcihRdWVyeSAqcXVlcnksIExpc3Qg KmNvbG5vcywgTGlzdCAqb3BpZHMpOwogZXh0ZXJuIGJvb2wgaW5uZXJyZWxfaXNfdW5pcXVl KFBsYW5uZXJJbmZvICpyb290LAogCQkJCQkJCSAgIFJlbGlkcyBqb2lucmVsaWRzLCBSZWxp ZHMgb3V0ZXJyZWxpZHMsIFJlbE9wdEluZm8gKmlubmVycmVsLAogCQkJCQkJCSAgIEpvaW5U eXBlIGpvaW50eXBlLCBMaXN0ICpyZXN0cmljdGxpc3QsIGJvb2wgZm9yY2VfY2FjaGUpOwor ZXh0ZXJuIGJvb2wgaW5uZXJyZWxfaXNfdW5pcXVlX2V4dChQbGFubmVySW5mbyAqcm9vdCwg UmVsaWRzIGpvaW5yZWxpZHMsCisJCQkJCQkJCSAgIFJlbGlkcyBvdXRlcnJlbGlkcywgUmVs T3B0SW5mbyAqaW5uZXJyZWwsCisJCQkJCQkJCSAgIEpvaW5UeXBlIGpvaW50eXBlLCBMaXN0 ICpyZXN0cmljdGxpc3QsCisJCQkJCQkJCSAgIGJvb2wgZm9yY2VfY2FjaGUsIExpc3QgKip1 Y2xhdXNlcyk7CitleHRlcm4gTGlzdCAqcmVtb3ZlX3VzZWxlc3Nfc2VsZl9qb2lucyhQbGFu bmVySW5mbyAqcm9vdCwgTGlzdCAqam9pbnRyZWUpOwogCiAvKgogICogcHJvdG90eXBlcyBm b3IgcGxhbi9zZXRyZWZzLmMKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3Jld3JpdGUvcmV3 cml0ZU1hbmlwLmggYi9zcmMvaW5jbHVkZS9yZXdyaXRlL3Jld3JpdGVNYW5pcC5oCmluZGV4 IGFjNmQyMDQ5ZTguLjcxMGVjN2IxYjcgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3Jld3Jp dGUvcmV3cml0ZU1hbmlwLmgKKysrIGIvc3JjL2luY2x1ZGUvcmV3cml0ZS9yZXdyaXRlTWFu aXAuaApAQCAtMTUsNiArMTUsNyBAQAogI2RlZmluZSBSRVdSSVRFTUFOSVBfSAogCiAjaW5j bHVkZSAibm9kZXMvcGFyc2Vub2Rlcy5oIgorI2luY2x1ZGUgIm5vZGVzL3BhdGhub2Rlcy5o IgogCiBzdHJ1Y3QgQXR0ck1hcDsJCQkJCS8qIGF2b2lkIGluY2x1ZGluZyBhdHRtYXAuaCBo ZXJlICovCiAKQEAgLTQ2LDYgKzQ3LDggQEAgZXh0ZXJuIHZvaWQgQ29tYmluZVJhbmdlVGFi bGVzKExpc3QgKipkc3RfcnRhYmxlLCBMaXN0ICoqZHN0X3Blcm1pbmZvcywKIGV4dGVybiB2 b2lkIE9mZnNldFZhck5vZGVzKE5vZGUgKm5vZGUsIGludCBvZmZzZXQsIGludCBzdWJsZXZl bHNfdXApOwogZXh0ZXJuIHZvaWQgQ2hhbmdlVmFyTm9kZXMoTm9kZSAqbm9kZSwgaW50IHJ0 X2luZGV4LCBpbnQgbmV3X2luZGV4LAogCQkJCQkJICAgaW50IHN1YmxldmVsc191cCk7Cit2 b2lkIENoYW5nZVZhck5vZGVzRXh0ZW5kZWQoTm9kZSAqbm9kZSwgaW50IHJ0X2luZGV4LCBp bnQgbmV3X2luZGV4LAorCQkJCQkJCWludCBzdWJsZXZlbHNfdXAsIGJvb2wgY2hhbmdlX1Jh bmdlVGJsUmVmKTsKIGV4dGVybiB2b2lkIEluY3JlbWVudFZhclN1YmxldmVsc1VwKE5vZGUg Km5vZGUsIGludCBkZWx0YV9zdWJsZXZlbHNfdXAsCiAJCQkJCQkJCQlpbnQgbWluX3N1Ymxl dmVsc191cCk7CiBleHRlcm4gdm9pZCBJbmNyZW1lbnRWYXJTdWJsZXZlbHNVcF9ydGFibGUo TGlzdCAqcnRhYmxlLApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9l cXVpdmNsYXNzLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvZXF1aXZjbGFzcy5v dXQKaW5kZXggYTMyODE2NGZlMC4uZjMyOGU5MmIwOCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3Qv cmVncmVzcy9leHBlY3RlZC9lcXVpdmNsYXNzLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNz L2V4cGVjdGVkL2VxdWl2Y2xhc3Mub3V0CkBAIC00MzAsNiArNDMwLDM2IEBAIGV4cGxhaW4g KGNvc3RzIG9mZikKICAgIEZpbHRlcjogKCh1bmlxdWUxIElTIE5PVCBOVUxMKSBBTkQgKHVu aXF1ZTIgSVMgTk9UIE5VTEwpKQogKDIgcm93cykKIAorLS0gVGVzdCB0aGF0IGJyb2tlbiBF Q3MgYXJlIHByb2Nlc3NlZCBjb3JyZWN0bHkgZHVyaW5nIHNlbGYgam9pbiByZW1vdmFsLgor LS0gRGlzYWJsZSBtZXJnZSBqb2lucyBzbyB0aGF0IHdlIGRvbid0IGdldCBhbiBlcnJvciBh Ym91dCBtaXNzaW5nIGNvbW11dGF0b3IuCistLSBUZXN0IGJvdGggb3JpZW50YXRpb25zIG9m IHRoZSBqb2luIGNsYXVzZSwgYmVjYXVzZSBvbmx5IG9uZSBvZiB0aGVtIGJyZWFrcworLS0g dGhlIEVDLgorc2V0IGVuYWJsZV9tZXJnZWpvaW4gdG8gb2ZmOworZXhwbGFpbiAoY29zdHMg b2ZmKQorICBzZWxlY3QgKiBmcm9tIGVjMCBtIGpvaW4gZWMwIG4gb24gbS5mZiA9IG4uZmYK KyAgam9pbiBlYzEgcCBvbiBtLmZmICsgbi5mZiA9IHAuZjE7CisgICAgICAgICAgICAgIFFV RVJZIFBMQU4gICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorIE5lc3RlZCBMb29wCisgICBKb2luIEZpbHRlcjogKChuLmZmICsgbi5m ZikgPSBwLmYxKQorICAgLT4gIFNlcSBTY2FuIG9uIGVjMCBuCisgICAtPiAgTWF0ZXJpYWxp emUKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBlYzEgcAorKDUgcm93cykKKworZXhwbGFp biAoY29zdHMgb2ZmKQorICBzZWxlY3QgKiBmcm9tIGVjMCBtIGpvaW4gZWMwIG4gb24gbS5m ZiA9IG4uZmYKKyAgam9pbiBlYzEgcCBvbiBwLmYxOjppbnQ4ID0gKG0uZmYgKyBuLmZmKTo6 aW50OGFsaWFzMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAg ICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AKKyAgIEpv aW4gRmlsdGVyOiAoKHAuZjEpOjpiaWdpbnQgPSAoKG4uZmYgKyBuLmZmKSk6OmludDhhbGlh czEpCisgICAtPiAgU2VxIFNjYW4gb24gZWMwIG4KKyAgIC0+ICBNYXRlcmlhbGl6ZQorICAg ICAgICAgLT4gIFNlcSBTY2FuIG9uIGVjMSBwCisoNSByb3dzKQorCityZXNldCBlbmFibGVf bWVyZ2Vqb2luOwogLS0gdGhpcyBjb3VsZCBiZSBjb252ZXJ0ZWQsIGJ1dCBpc24ndCBhdCBw cmVzZW50CiBleHBsYWluIChjb3N0cyBvZmYpCiAgIHNlbGVjdCAqIGZyb20gdGVuazEgd2hl cmUgdW5pcXVlMSA9IHVuaXF1ZTEgb3IgdW5pcXVlMiA9IHVuaXF1ZTI7CmRpZmYgLS1naXQg YS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2pvaW4ub3V0IGIvc3JjL3Rlc3QvcmVncmVz cy9leHBlY3RlZC9qb2luLm91dAppbmRleCA5YjI5NzM2OTRmLi5mOTk2MWYwODI0IDEwMDY0 NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2pvaW4ub3V0CisrKyBiL3NyYy90 ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvam9pbi5vdXQKQEAgLTYyOTMsNiArNjI5MywxMDg1IEBA IHNlbGVjdCAqIGZyb20KIC0tLS0rLS0tLSstLS0tKy0tLS0KICgwIHJvd3MpCiAKKy0tCist LSB0ZXN0IHRoYXQgc2VtaS0gb3IgaW5uZXIgc2VsZi1qb2lucyBvbiBhIHVuaXF1ZSBjb2x1 bW4gYXJlIHJlbW92ZWQKKy0tCistLSBlbmFibGUgb25seSBuZXN0bG9vcCB0byBnZXQgbW9y ZSBwcmVkaWN0YWJsZSBwbGFucworc2V0IGVuYWJsZV9oYXNoam9pbiB0byBvZmY7CitzZXQg ZW5hYmxlX21lcmdlam9pbiB0byBvZmY7CitjcmVhdGUgdGFibGUgc2ogKGEgaW50IHVuaXF1 ZSwgYiBpbnQsIGMgaW50IHVuaXF1ZSk7CitpbnNlcnQgaW50byBzaiB2YWx1ZXMgKDEsIG51 bGwsIDIpLCAobnVsbCwgMiwgbnVsbCksICgyLCAxLCAxKTsKK2FuYWx5emUgc2o7CistLSBU cml2aWFsIHNlbGYtam9pbiBjYXNlLgorZXhwbGFpbiAoY29zdHMgb2ZmKQorc2VsZWN0IHAu KiBmcm9tIHNqIHAsIHNqIHEgd2hlcmUgcS5hID0gcC5hIGFuZCBxLmIgPSBxLmEgLSAxOwor ICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4g b24gc2ogcQorICAgRmlsdGVyOiAoKGEgSVMgTk9UIE5VTEwpIEFORCAoYiA9IChhIC0gMSkp KQorKDIgcm93cykKKworc2VsZWN0IHAuKiBmcm9tIHNqIHAsIHNqIHEgd2hlcmUgcS5hID0g cC5hIGFuZCBxLmIgPSBxLmEgLSAxOworIGEgfCBiIHwgYyAKKy0tLSstLS0rLS0tCisgMiB8 IDEgfCAxCisoMSByb3cpCisKKy0tIFNlbGYtam9pbiByZW1vdmFsIHBlcmZvcm1zIGFmdGVy IGEgc3VicXVlcnkgcHVsbC11cCBwcm9jZXNzIGFuZCBjb3VsZCByZW1vdmUKKy0tIHN1Y2gg a2luZCBvZiBzZWxmLWpvaW4gdG9vLiBDaGVjayB0aGlzIG9wdGlvbi4KK2V4cGxhaW4gKGNv c3RzIG9mZikKK3NlbGVjdCAqIGZyb20gc2ogcAord2hlcmUgZXhpc3RzIChzZWxlY3QgKiBm cm9tIHNqIHEKKyAgICAgICAgICAgICAgd2hlcmUgcS5hID0gcC5hIGFuZCBxLmIgPCAxMCk7 CisgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNlcSBTY2FuIG9uIHNqIHEK KyAgIEZpbHRlcjogKChhIElTIE5PVCBOVUxMKSBBTkQgKGIgPCAxMCkpCisoMiByb3dzKQor CitzZWxlY3QgKiBmcm9tIHNqIHAKK3doZXJlIGV4aXN0cyAoc2VsZWN0ICogZnJvbSBzaiBx CisgICAgICAgICAgICAgIHdoZXJlIHEuYSA9IHAuYSBhbmQgcS5iIDwgMTApOworIGEgfCBi IHwgYyAKKy0tLSstLS0rLS0tCisgMiB8IDEgfCAxCisoMSByb3cpCisKKy0tIERvbid0IHJl bW92ZSBzZWxmLWpvaW4gZm9yIHRoZSBjYXNlIG9mIGVxdWFsaXR5IG9mIHR3byBkaWZmZXJl bnQgdW5pcXVlIGNvbHVtbnMuCitleHBsYWluIChjb3N0cyBvZmYpCitzZWxlY3QgKiBmcm9t IHNqIHQxLCBzaiB0MiB3aGVyZSB0MS5hID0gdDIuYyBhbmQgdDEuYiBpcyBub3QgbnVsbDsK KyAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AKKyAgIEpvaW4gRmls dGVyOiAodDEuYSA9IHQyLmMpCisgICAtPiAgU2VxIFNjYW4gb24gc2ogdDIKKyAgIC0+ICBN YXRlcmlhbGl6ZQorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHNqIHQxCisgICAgICAgICAg ICAgICBGaWx0ZXI6IChiIElTIE5PVCBOVUxMKQorKDYgcm93cykKKworLS0gRW5zdXJlIHRo YXQgcmVsYXRpb25zIHdpdGggVEFCTEVTQU1QTEUgY2xhdXNlcyBhcmUgbm90IGNvbnNpZGVy ZWQgYXMKKy0tIGNhbmRpZGF0ZXMgdG8gYmUgcmVtb3ZlZAorZXhwbGFpbiAoY29zdHMgb2Zm KQorc2VsZWN0ICogZnJvbSBzaiB0MQorICAgIGpvaW4gbGF0ZXJhbAorICAgICAgKHNlbGVj dCAqIGZyb20gc2ogdGFibGVzYW1wbGUgc3lzdGVtKHQxLmIpKSBzCisgICAgb24gdDEuYSA9 IHMuYTsKKyAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AKKyAgIC0+ ICBTZXEgU2NhbiBvbiBzaiB0MQorICAgLT4gIE1lbW9pemUKKyAgICAgICAgIENhY2hlIEtl eTogdDEuYSwgdDEuYgorICAgICAgICAgQ2FjaGUgTW9kZTogYmluYXJ5CisgICAgICAgICAt PiAgU2FtcGxlIFNjYW4gb24gc2oKKyAgICAgICAgICAgICAgIFNhbXBsaW5nOiBzeXN0ZW0g KHQxLmIpCisgICAgICAgICAgICAgICBGaWx0ZXI6ICh0MS5hID0gYSkKKyg4IHJvd3MpCisK Ky0tIEVuc3VyZSB0aGF0IFNKRSBkb2VzIG5vdCBmb3JtIGEgc2VsZi1yZWZlcmVudGlhbCBs YXRlcmFsIGRlcGVuZGVuY3kKK2V4cGxhaW4gKGNvc3RzIG9mZikKK3NlbGVjdCAqIGZyb20g c2ogdDEKKyAgICBsZWZ0IGpvaW4gbGF0ZXJhbAorICAgICAgKHNlbGVjdCB0MS5hIGFzIHQx YSwgKiBmcm9tIHNqIHQyKSBzCisgICAgb24gdHJ1ZQord2hlcmUgdDEuYSA9IHMuYTsKKyAg ICAgICAgUVVFUlkgUExBTiAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgU2VxIFNjYW4gb24gc2ogdDIKKyAgIEZpbHRlcjogKGEgSVMgTk9UIE5VTEwpCisoMiBy b3dzKQorCistLSBEZWdlbmVyYXRlZCBjYXNlLgorZXhwbGFpbiAoY29zdHMgb2ZmKQorc2Vs ZWN0ICogZnJvbQorICAoc2VsZWN0IGEgYXMgeCBmcm9tIHNqIHdoZXJlIGZhbHNlKSBhcyBx MSwKKyAgKHNlbGVjdCBhIGFzIHkgZnJvbSBzaiB3aGVyZSBmYWxzZSkgYXMgcTIKK3doZXJl IHExLnggPSBxMi55OworICAgICAgICBRVUVSWSBQTEFOICAgICAgICAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgUmVzdWx0CisgICBPbmUtVGltZSBGaWx0ZXI6IGZhbHNlCiso MiByb3dzKQorCistLSBXZSBjYW4ndCB1c2UgYSBjcm9zcy1FQyBnZW5lcmF0ZWQgc2VsZiBq b2luIHF1YWwgYmVjYXVzZSBvZiBjdXJyZW50IGxvZ2ljIG9mCistLSB0aGUgZ2VuZXJhdGVf am9pbl9pbXBsaWVkX2VxdWFsaXRpZXMgcm91dGluZS4KK2V4cGxhaW4gKGNvc3RzIG9mZikK K3NlbGVjdCAqIGZyb20gc2ogdDEsIHNqIHQyIHdoZXJlIHQxLmEgPSB0MS5iIGFuZCB0MS5i ID0gdDIuYiBhbmQgdDIuYiA9IHQyLmE7CisgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAg ICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29wCisgICBK b2luIEZpbHRlcjogKHQxLmEgPSB0Mi5iKQorICAgLT4gIFNlcSBTY2FuIG9uIHNqIHQxCisg ICAgICAgICBGaWx0ZXI6IChhID0gYikKKyAgIC0+ICBTZXEgU2NhbiBvbiBzaiB0MgorICAg ICAgICAgRmlsdGVyOiAoYiA9IGEpCisoNiByb3dzKQorCitleHBsYWluIChjb3N0cyBvZmYp CitzZWxlY3QgKiBmcm9tIHNqIHQxLCBzaiB0Miwgc2ogdDMKK3doZXJlIHQxLmEgPSB0MS5i IGFuZCB0MS5iID0gdDIuYiBhbmQgdDIuYiA9IHQyLmEgYW5kCisgICAgICB0MS5iID0gdDMu YiBhbmQgdDMuYiA9IHQzLmE7CisgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAg ICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29w CisgICBKb2luIEZpbHRlcjogKHQxLmEgPSB0My5iKQorICAgLT4gIE5lc3RlZCBMb29wCisg ICAgICAgICBKb2luIEZpbHRlcjogKHQxLmEgPSB0Mi5iKQorICAgICAgICAgLT4gIFNlcSBT Y2FuIG9uIHNqIHQxCisgICAgICAgICAgICAgICBGaWx0ZXI6IChhID0gYikKKyAgICAgICAg IC0+ICBTZXEgU2NhbiBvbiBzaiB0MgorICAgICAgICAgICAgICAgRmlsdGVyOiAoYiA9IGEp CisgICAtPiAgU2VxIFNjYW4gb24gc2ogdDMKKyAgICAgICAgIEZpbHRlcjogKGIgPSBhKQor KDEwIHJvd3MpCisKKy0tIERvdWJsZSBzZWxmLWpvaW4gcmVtb3ZhbC4KKy0tIFVzZSBhIGNv bmRpdGlvbiBvbiAiYiArIDEiLCBub3Qgb24gImIiLCBmb3IgdGhlIHNlY29uZCBqb2luLCBz byB0aGF0CistLSB0aGUgZXF1aXZhbGVuY2UgY2xhc3MgaXMgZGlmZmVyZW50IGZyb20gdGhl IGZpcnN0IG9uZSwgYW5kIHdlIGNhbgorLS0gdGVzdCB0aGUgbm9uLWVjIGNvZGUgcGF0aC4K K2V4cGxhaW4gKGNvc3RzIG9mZikKK3NlbGVjdCAqCitmcm9tICBzaiB0MQorICAgICAgam9p biBzaiB0MiBvbiB0MS5hID0gdDIuYSBhbmQgdDEuYiA9IHQyLmIKKwkgIGpvaW4gc2ogdDMg b24gdDIuYSA9IHQzLmEgYW5kIHQyLmIgKyAxID0gdDMuYiArIDE7CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNlcSBTY2FuIG9uIHNqIHQzCisg ICBGaWx0ZXI6ICgoYSBJUyBOT1QgTlVMTCkgQU5EIChiIElTIE5PVCBOVUxMKSBBTkQgKChi ICsgMSkgSVMgTk9UIE5VTEwpKQorKDIgcm93cykKKworLS0gc3Vic2VsZWN0IHRoYXQgcmVm ZXJlbmNlcyB0aGUgcmVtb3ZlZCByZWxhdGlvbgorZXhwbGFpbiAoY29zdHMgb2ZmKQorc2Vs ZWN0IHQxLmEsIChzZWxlY3QgYSBmcm9tIHNqIHdoZXJlIGEgPSB0Mi5hIGFuZCBhID0gdDEu YSkKK2Zyb20gc2ogdDEsIHNqIHQyCit3aGVyZSB0MS5hID0gdDIuYTsKKyAgICAgICAgICAg ICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24gc2ogdDIKKyAgIEZpbHRlcjog KGEgSVMgTk9UIE5VTEwpCisgICBTdWJQbGFuIDEKKyAgICAgLT4gIFJlc3VsdAorICAgICAg ICAgICBPbmUtVGltZSBGaWx0ZXI6ICh0Mi5hID0gdDIuYSkKKyAgICAgICAgICAgLT4gIFNl cSBTY2FuIG9uIHNqCisgICAgICAgICAgICAgICAgIEZpbHRlcjogKGEgPSB0Mi5hKQorKDcg cm93cykKKworLS0gc2VsZi1qb2luIHVuZGVyIG91dGVyIGpvaW4KK2V4cGxhaW4gKGNvc3Rz IG9mZikKK3NlbGVjdCAqIGZyb20gc2ogeCBqb2luIHNqIHkgb24geC5hID0geS5hCitsZWZ0 IGpvaW4gaW50OF90YmwgeiBvbiB4LmEgPSB6LnExOworICAgICAgICAgICAgIFFVRVJZIFBM QU4gICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyBOZXN0ZWQgTG9vcCBMZWZ0IEpvaW4KKyAgIEpvaW4gRmlsdGVyOiAoeS5hID0gei5xMSkK KyAgIC0+ICBTZXEgU2NhbiBvbiBzaiB5CisgICAgICAgICBGaWx0ZXI6IChhIElTIE5PVCBO VUxMKQorICAgLT4gIE1hdGVyaWFsaXplCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gaW50 OF90YmwgegorKDYgcm93cykKKworZXhwbGFpbiAoY29zdHMgb2ZmKQorc2VsZWN0ICogZnJv bSBzaiB4IGpvaW4gc2ogeSBvbiB4LmEgPSB5LmEKK2xlZnQgam9pbiBpbnQ4X3RibCB6IG9u IHkuYSA9IHoucTE7CisgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29wIExlZnQg Sm9pbgorICAgSm9pbiBGaWx0ZXI6ICh5LmEgPSB6LnExKQorICAgLT4gIFNlcSBTY2FuIG9u IHNqIHkKKyAgICAgICAgIEZpbHRlcjogKGEgSVMgTk9UIE5VTEwpCisgICAtPiAgTWF0ZXJp YWxpemUKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBpbnQ4X3RibCB6CisoNiByb3dzKQor CitleHBsYWluIChjb3N0cyBvZmYpCitzZWxlY3QgKiBmcm9tICgKKyAgc2VsZWN0IHQxLios IHQyLmEgYXMgYXggZnJvbSBzaiB0MSBqb2luIHNqIHQyCisgIG9uICh0MS5hID0gdDIuYSBh bmQgdDEuYyAqIHQxLmMgPSB0Mi5jICsgMiBhbmQgdDIuYiBpcyBudWxsKQorKSBhcyBxMQor bGVmdCBqb2luCisgIChzZWxlY3QgdDMuKiBmcm9tIHNqIHQzLCBzaiB0NCB3aGVyZSB0My5j ID0gdDQuYykgYXMgcTIKK29uIHExLmF4ID0gcTIuYTsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AgTGVmdCBKb2luCisgICBK b2luIEZpbHRlcjogKHQyLmEgPSB0NC5hKQorICAgLT4gIFNlcSBTY2FuIG9uIHNqIHQyCisg ICAgICAgICBGaWx0ZXI6ICgoYiBJUyBOVUxMKSBBTkQgKGEgSVMgTk9UIE5VTEwpIEFORCAo KGMgKiBjKSA9IChjICsgMikpKQorICAgLT4gIFNlcSBTY2FuIG9uIHNqIHQ0CisgICAgICAg ICBGaWx0ZXI6IChjIElTIE5PVCBOVUxMKQorKDYgcm93cykKKworLS0gVGVzdCB0aGF0IHBs YWNlaG9sZGVycyBhcmUgdXBkYXRlZCBjb3JyZWN0bHkgYWZ0ZXIgam9pbiByZW1vdmFsCitl eHBsYWluIChjb3N0cyBvZmYpCitzZWxlY3QgKiBmcm9tICh2YWx1ZXMgKDEpKSB4CitsZWZ0 IGpvaW4gKHNlbGVjdCBjb2FsZXNjZSh5LnExLCAxKSBmcm9tIGludDhfdGJsIHkKKwlyaWdo dCBqb2luIHNqIGoxIGlubmVyIGpvaW4gc2ogajIgb24gajEuYSA9IGoyLmEKKwlvbiB0cnVl KSB6CitvbiB0cnVlOworICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAg ICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0 ZWQgTG9vcCBMZWZ0IEpvaW4KKyAgIC0+ICBSZXN1bHQKKyAgIC0+ICBOZXN0ZWQgTG9vcCBM ZWZ0IEpvaW4KKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBzaiBqMgorICAgICAgICAgICAg ICAgRmlsdGVyOiAoYSBJUyBOT1QgTlVMTCkKKyAgICAgICAgIC0+ICBNYXRlcmlhbGl6ZQor ICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGludDhfdGJsIHkKKyg3IHJvd3MpCisK Ky0tIFRlc3QgdGhhdCByZWZlcmVuY2VzIHRvIHRoZSByZW1vdmVkIHJlbCBpbiBsYXRlcmFs IHN1YnF1ZXJpZXMgYXJlIHJlcGxhY2VkCistLSBjb3JyZWN0bHkgYWZ0ZXIgam9pbiByZW1v dmFsCitleHBsYWluICh2ZXJib3NlLCBjb3N0cyBvZmYpCitzZWxlY3QgdDMuYSBmcm9tIHNq IHQxCisJam9pbiBzaiB0MiBvbiB0MS5hID0gdDIuYQorCWpvaW4gbGF0ZXJhbCAoc2VsZWN0 IHQxLmEgb2Zmc2V0IDApIHQzIG9uIHRydWU7CisgICAgICAgICAgICAgUVVFUlkgUExBTiAg ICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE5l c3RlZCBMb29wCisgICBPdXRwdXQ6ICh0Mi5hKQorICAgLT4gIFNlcSBTY2FuIG9uIHB1Ymxp Yy5zaiB0MgorICAgICAgICAgT3V0cHV0OiB0Mi5hLCB0Mi5iLCB0Mi5jCisgICAgICAgICBG aWx0ZXI6ICh0Mi5hIElTIE5PVCBOVUxMKQorICAgLT4gIFJlc3VsdAorICAgICAgICAgT3V0 cHV0OiB0Mi5hCisoNyByb3dzKQorCitleHBsYWluICh2ZXJib3NlLCBjb3N0cyBvZmYpCitz ZWxlY3QgdDMuYSBmcm9tIHNqIHQxCisJam9pbiBzaiB0MiBvbiB0MS5hID0gdDIuYQorCWpv aW4gbGF0ZXJhbCAoc2VsZWN0ICogZnJvbSAoc2VsZWN0IHQxLmEgb2Zmc2V0IDApIG9mZnNl dCAwKSB0MyBvbiB0cnVlOworICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAor ICAgT3V0cHV0OiAodDIuYSkKKyAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuc2ogdDIKKyAg ICAgICAgIE91dHB1dDogdDIuYSwgdDIuYiwgdDIuYworICAgICAgICAgRmlsdGVyOiAodDIu YSBJUyBOT1QgTlVMTCkKKyAgIC0+ICBSZXN1bHQKKyAgICAgICAgIE91dHB1dDogdDIuYQor KDcgcm93cykKKworZXhwbGFpbiAodmVyYm9zZSwgY29zdHMgb2ZmKQorc2VsZWN0IHQ0LmEg ZnJvbSBzaiB0MQorCWpvaW4gc2ogdDIgb24gdDEuYSA9IHQyLmEKKwlqb2luIGxhdGVyYWwg KHNlbGVjdCB0My5hIGZyb20gc2ogdDMsIChzZWxlY3QgdDEuYSkgb2Zmc2V0IDApIHQ0IG9u IHRydWU7CisgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29wCisgICBPdXRwdXQ6 IHQzLmEKKyAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuc2ogdDIKKyAgICAgICAgIE91dHB1 dDogdDIuYSwgdDIuYiwgdDIuYworICAgICAgICAgRmlsdGVyOiAodDIuYSBJUyBOT1QgTlVM TCkKKyAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuc2ogdDMKKyAgICAgICAgIE91dHB1dDog dDMuYQorKDcgcm93cykKKworLS0gQ2hlY2sgdXBkYXRpbmcgb2YgTGF0ZXJhbCBsaW5rcyBm cm9tIHRvcC1sZXZlbCBxdWVyeSB0byB0aGUgcmVtb3ZpbmcgcmVsYXRpb24KK2V4cGxhaW4g KENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gcGdfYW0gYW0gV0hFUkUgYW0uYW1uYW1lIElO ICgKKyAgU0VMRUNUIGMxLnJlbG5hbWUgQVMgcmVsbmFtZQorICBGUk9NIHBnX2NsYXNzIGMx CisgICAgSk9JTiBwZ19jbGFzcyBjMgorICAgIE9OIGMxLm9pZD1jMi5vaWQgQU5EIGMxLm9p ZCA8IDEwCispOworICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAg ICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29wIFNlbWkg Sm9pbgorICAgSm9pbiBGaWx0ZXI6IChhbS5hbW5hbWUgPSBjMi5yZWxuYW1lKQorICAgLT4g IFNlcSBTY2FuIG9uIHBnX2FtIGFtCisgICAtPiAgTWF0ZXJpYWxpemUKKyAgICAgICAgIC0+ ICBJbmRleCBTY2FuIHVzaW5nIHBnX2NsYXNzX29pZF9pbmRleCBvbiBwZ19jbGFzcyBjMgor ICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKG9pZCA8ICcxMCc6Om9pZCkKKyg2IHJvd3Mp CisKKy0tCistLSBTSkUgY29ybmVyIGNhc2U6IHVuaXF1ZW5lc3Mgb2YgYW4gaW5uZXIgaXMg ZGVyaXZlZCBmcm9tCistLSBiYXNlcmVzdHJpY3RpbmZvIGNsYXVzZXMuCistLQorSU5TRVJU IElOVE8gc2ogVkFMVUVTICgzLCAxLCAzKTsKKy0tIFR3byBhcHByb2FjaGVzIHRvIHdyaXRl IGEgam9pbi4gSW4gYm90aCBjYXNlcyBpdCBpcyBzZWwtam9pbiB3aGljaCBhZGRyZXNzZXMK Ky0tIHRoZSBzYW1lIHBoeXNpY2FsIHR1cGxlIGFuZCBjYW4gYmUgcmVtb3ZlZCBmcm9tIHRo ZSBqb2luIHNlYXJjaCBzcGFjZS4KK0VYUExBSU4gKENPU1RTIE9GRikgU0VMRUNUICogRlJP TSBzaiBqMSwgc2ogajIgV0hFUkUgajEuYSA9IDMgQU5EIGoyLmEgPSAzOworICAgIFFVRVJZ IFBMQU4gICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNlcSBTY2FuIG9uIHNqIGoyCisg ICBGaWx0ZXI6IChhID0gMykKKygyIHJvd3MpCisKK0VYUExBSU4gKENPU1RTIE9GRikgU0VM RUNUICogRlJPTSBzaiBqMSBKT0lOIHNqIGoyIE9OIChqMS5hID0gMyBBTkQgajIuYSA9IDMp OworICAgIFFVRVJZIFBMQU4gICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNlcSBTY2Fu IG9uIHNqIGoyCisgICBGaWx0ZXI6IChhID0gMykKKygyIHJvd3MpCisKKy0tIERvbid0IHJl bW92ZSBTSgorRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBzaiBqMSwgc2og ajIgV0hFUkUgajEuYiA9IGoyLmIgQU5EIGoxLmEgPSAyIEFORCBqMi5hID0gMzsKKyAgICAg ICAgICBRVUVSWSBQTEFOICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgTmVzdGVkIExvb3AKKyAgIEpvaW4gRmlsdGVyOiAoajEuYiA9IGoyLmIpCisgICAt PiAgU2VxIFNjYW4gb24gc2ogajEKKyAgICAgICAgIEZpbHRlcjogKGEgPSAyKQorICAgLT4g IFNlcSBTY2FuIG9uIHNqIGoyCisgICAgICAgICBGaWx0ZXI6IChhID0gMykKKyg2IHJvd3Mp CisKKy0tIFJldHVybiBvbmUgcm93CitTRUxFQ1QgKiBGUk9NIHNqIGoxLCBzaiBqMiBXSEVS RSBqMS5iID0gajIuYiBBTkQgajEuYSA9IDIgQU5EIGoyLmEgPSAzOworIGEgfCBiIHwgYyB8 IGEgfCBiIHwgYyAKKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tCisgMiB8IDEgfCAxIHwgMyB8 IDEgfCAzCisoMSByb3cpCisKKy0tIFJlbW92ZSBTSiwgZGVmaW5lIHVuaXF1ZW5lc3MgYnkg YSBjb25zdGFudAorRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBzaiBqMSwg c2ogajIgV0hFUkUgajEuYiA9IGoyLmIgQU5EIGoxLmEgPSAyIEFORCBqMi5hID0gMjsKKyAg ICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNlcSBTY2FuIG9uIHNqIGoyCisgICBG aWx0ZXI6ICgoYiBJUyBOT1QgTlVMTCkgQU5EIChhID0gMikpCisoMiByb3dzKQorCistLSBS ZXR1cm4gb25lIHJvdworU0VMRUNUICogRlJPTSBzaiBqMSwgc2ogajIgV0hFUkUgajEuYiA9 IGoyLmIgQU5EIGoxLmEgPSAyIEFORCBqMi5hID0gMjsKKyBhIHwgYiB8IGMgfCBhIHwgYiB8 IGMgCistLS0rLS0tKy0tLSstLS0rLS0tKy0tLQorIDIgfCAxIHwgMSB8IDIgfCAxIHwgMQor KDEgcm93KQorCistLSBSZW1vdmUgU0osIGRlZmluZSB1bmlxdWVuZXNzIGJ5IGEgY29uc3Rh bnQgZXhwcmVzc2lvbgorRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBzaiBq MSwgc2ogajIKK1dIRVJFIGoxLmIgPSBqMi5iCisgIEFORCBqMS5hID0gKEVYVFJBQ1QoRE9X IEZST00gY3VycmVudF90aW1lc3RhbXAoMCkpLzE1ICsgMyk6OmludAorICBBTkQgKEVYVFJB Q1QoRE9XIEZST00gY3VycmVudF90aW1lc3RhbXAoMCkpLzE1ICsgMyk6OmludCA9IGoyLmE7 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24gc2og ajIKKyAgIEZpbHRlcjogKChiIElTIE5PVCBOVUxMKSBBTkQgKGEgPSAoKChFWFRSQUNUKGRv dyBGUk9NIENVUlJFTlRfVElNRVNUQU1QKDApKSAvICcxNSc6Om51bWVyaWMpICsgJzMnOjpu dW1lcmljKSk6OmludGVnZXIpKQorKDIgcm93cykKKworLS0gUmV0dXJuIG9uZSByb3cKK1NF TEVDVCAqIEZST00gc2ogajEsIHNqIGoyCitXSEVSRSBqMS5iID0gajIuYgorICBBTkQgajEu YSA9IChFWFRSQUNUKERPVyBGUk9NIGN1cnJlbnRfdGltZXN0YW1wKDApKS8xNSArIDMpOjpp bnQKKyAgQU5EIChFWFRSQUNUKERPVyBGUk9NIGN1cnJlbnRfdGltZXN0YW1wKDApKS8xNSAr IDMpOjppbnQgPSBqMi5hOworIGEgfCBiIHwgYyB8IGEgfCBiIHwgYyAKKy0tLSstLS0rLS0t Ky0tLSstLS0rLS0tCisgMyB8IDEgfCAzIHwgMyB8IDEgfCAzCisoMSByb3cpCisKKy0tIFJl bW92ZSBTSgorRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBzaiBqMSwgc2og ajIgV0hFUkUgajEuYiA9IGoyLmIgQU5EIGoxLmEgPSAxIEFORCBqMi5hID0gMTsKKyAgICAg ICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNlcSBTY2FuIG9uIHNqIGoyCisgICBGaWx0 ZXI6ICgoYiBJUyBOT1QgTlVMTCkgQU5EIChhID0gMSkpCisoMiByb3dzKQorCistLSBSZXR1 cm4gbm8gcm93cworU0VMRUNUICogRlJPTSBzaiBqMSwgc2ogajIgV0hFUkUgajEuYiA9IGoy LmIgQU5EIGoxLmEgPSAxIEFORCBqMi5hID0gMTsKKyBhIHwgYiB8IGMgfCBhIHwgYiB8IGMg CistLS0rLS0tKy0tLSstLS0rLS0tKy0tLQorKDAgcm93cykKKworLS0gU2h1ZmZsZSBhIGNs YXVzZS4gUmVtb3ZlIFNKCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIHNq IGoxLCBzaiBqMiBXSEVSRSBqMS5iID0gajIuYiBBTkQgMSA9IGoxLmEgQU5EIGoyLmEgPSAx OworICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24gc2ogajIK KyAgIEZpbHRlcjogKChiIElTIE5PVCBOVUxMKSBBTkQgKGEgPSAxKSkKKygyIHJvd3MpCisK Ky0tIFJldHVybiBubyByb3dzCitTRUxFQ1QgKiBGUk9NIHNqIGoxLCBzaiBqMiBXSEVSRSBq MS5iID0gajIuYiBBTkQgMSA9IGoxLmEgQU5EIGoyLmEgPSAxOworIGEgfCBiIHwgYyB8IGEg fCBiIHwgYyAKKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tCisoMCByb3dzKQorCistLSBTSkUg Q29ybmVyIGNhc2U6IGEgJ2EueD1hLngnIGNsYXVzZSwgaGF2ZSByZXBsYWNlZCB3aXRoICdh LnggSVMgTk9UIE5VTEwnCistLSBhZnRlciBTSiBlbGltaW5hdGlvbiBpdCBzaG91bGRuJ3Qg YmUgYSBtZXJnZWpvaW5hYmxlIGNsYXVzZS4KK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVD VCB0NC4qCitGUk9NIChTRUxFQ1QgdDEuKiwgdDIuYSBBUyBhMSBGUk9NIHNqIHQxLCBzaiB0 MiBXSEVSRSB0MS5iID0gdDIuYikgQVMgdDMKK0pPSU4gc2ogdDQgT04gKHQ0LmEgPSB0My5h KSBXSEVSRSB0My5hMSA9IDQyOworICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAorICAg Sm9pbiBGaWx0ZXI6ICh0MS5iID0gdDIuYikKKyAgIC0+ICBTZXEgU2NhbiBvbiBzaiB0Mgor ICAgICAgICAgRmlsdGVyOiAoYSA9IDQyKQorICAgLT4gIFNlcSBTY2FuIG9uIHNqIHQxCisg ICAgICAgICBGaWx0ZXI6IChhIElTIE5PVCBOVUxMKQorKDYgcm93cykKKworU0VMRUNUIHQ0 LioKK0ZST00gKFNFTEVDVCB0MS4qLCB0Mi5hIEFTIGExIEZST00gc2ogdDEsIHNqIHQyIFdI RVJFIHQxLmIgPSB0Mi5iKSBBUyB0MworSk9JTiBzaiB0NCBPTiAodDQuYSA9IHQzLmEpIFdI RVJFIHQzLmExID0gNDI7CisgYSB8IGIgfCBjIAorLS0tKy0tLSstLS0KKygwIHJvd3MpCisK Ky0tIEZ1bmN0aW9uYWwgaW5kZXgKK0NSRUFURSBVTklRVUUgSU5ERVggc2pfZm5faWR4IE9O IHNqKChhICogYSkpOworLS0gUmVtb3ZlIFNKCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxF Q1QgKiBGUk9NIHNqIGoxLCBzaiBqMgorCVdIRVJFIGoxLmIgPSBqMi5iIEFORCBqMS5hKmox LmEgPSAxIEFORCBqMi5hKmoyLmEgPSAxOworICAgICAgICAgICAgICAgICAgUVVFUlkgUExB TiAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24gc2ogajIKKyAgIEZpbHRlcjogKChiIElT IE5PVCBOVUxMKSBBTkQgKChhICogYSkgPSAxKSkKKygyIHJvd3MpCisKKy0tIERvbid0IHJl bW92ZSBTSgorRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBzaiBqMSwgc2og ajIKKwlXSEVSRSBqMS5iID0gajIuYiBBTkQgajEuYSpqMS5hID0gMSBBTkQgajIuYSpqMi5h ID0gMjsKKyAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAorICAgSm9pbiBGaWx0ZXI6IChqMS5i ID0gajIuYikKKyAgIC0+ICBTZXEgU2NhbiBvbiBzaiBqMQorICAgICAgICAgRmlsdGVyOiAo KGEgKiBhKSA9IDEpCisgICAtPiAgU2VxIFNjYW4gb24gc2ogajIKKyAgICAgICAgIEZpbHRl cjogKChhICogYSkgPSAyKQorKDYgcm93cykKKworLS0gUmVzdHJpY3Rpb24gY29udGFpbnMg ZXhwcmVzc2lvbnMgaW4gYm90aCBzaWRlcywgUmVtb3ZlIFNKLgorRVhQTEFJTiAoQ09TVFMg T0ZGKQorU0VMRUNUICogRlJPTSBzaiBqMSwgc2ogajIKK1dIRVJFIGoxLmIgPSBqMi5iCisg IEFORCAoajEuYSpqMS5hKSA9IChFWFRSQUNUKERPVyBGUk9NIGN1cnJlbnRfdGltZXN0YW1w KDApKS8xNSArIDMpOjppbnQKKyAgQU5EIChFWFRSQUNUKERPVyBGUk9NIGN1cnJlbnRfdGlt ZXN0YW1wKDApKS8xNSArIDMpOjppbnQgPSAoajIuYSpqMi5hKTsKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBM QU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTZXEgU2NhbiBvbiBzaiBqMgor ICAgRmlsdGVyOiAoKGIgSVMgTk9UIE5VTEwpIEFORCAoKGEgKiBhKSA9ICgoKEVYVFJBQ1Qo ZG93IEZST00gQ1VSUkVOVF9USU1FU1RBTVAoMCkpIC8gJzE1Jzo6bnVtZXJpYykgKyAnMyc6 Om51bWVyaWMpKTo6aW50ZWdlcikpCisoMiByb3dzKQorCistLSBFbXB0eSBzZXQgb2Ygcm93 cyBzaG91bGQgYmUgcmV0dXJuZWQKK1NFTEVDVCAqIEZST00gc2ogajEsIHNqIGoyCitXSEVS RSBqMS5iID0gajIuYgorICBBTkQgKGoxLmEqajEuYSkgPSAoRVhUUkFDVChET1cgRlJPTSBj dXJyZW50X3RpbWVzdGFtcCgwKSkvMTUgKyAzKTo6aW50CisgIEFORCAoRVhUUkFDVChET1cg RlJPTSBjdXJyZW50X3RpbWVzdGFtcCgwKSkvMTUgKyAzKTo6aW50ID0gKGoyLmEqajIuYSk7 CisgYSB8IGIgfCBjIHwgYSB8IGIgfCBjIAorLS0tKy0tLSstLS0rLS0tKy0tLSstLS0KKygw IHJvd3MpCisKKy0tIFJlc3RyaWN0aW9uIGNvbnRhaW5zIHZvbGF0aWxlIGZ1bmN0aW9uIC0g ZGlzYWJsZSBTSkUgZmVhdHVyZS4KK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAqIEZS T00gc2ogajEsIHNqIGoyCitXSEVSRSBqMS5iID0gajIuYgorICBBTkQgKGoxLmEqajEuYy8z KSA9IChyYW5kb20oKS8zICsgMyk6OmludAorICBBTkQgKHJhbmRvbSgpLzMgKyAzKTo6aW50 ID0gKGoyLmEqajIuYy8zKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29wCisgICBKb2luIEZpbHRlcjogKGox LmIgPSBqMi5iKQorICAgLT4gIFNlcSBTY2FuIG9uIHNqIGoxCisgICAgICAgICBGaWx0ZXI6 ICgoKGEgKiBjKSAvIDMpID0gKCgocmFuZG9tKCkgLyAnMyc6OmRvdWJsZSBwcmVjaXNpb24p ICsgJzMnOjpkb3VibGUgcHJlY2lzaW9uKSk6OmludGVnZXIpCisgICAtPiAgU2VxIFNjYW4g b24gc2ogajIKKyAgICAgICAgIEZpbHRlcjogKCgoKHJhbmRvbSgpIC8gJzMnOjpkb3VibGUg cHJlY2lzaW9uKSArICczJzo6ZG91YmxlIHByZWNpc2lvbikpOjppbnRlZ2VyID0gKChhICog YykgLyAzKSkKKyg2IHJvd3MpCisKKy0tIFJldHVybiBvbmUgcm93CitTRUxFQ1QgKiBGUk9N IHNqIGoxLCBzaiBqMgorV0hFUkUgajEuYiA9IGoyLmIKKyAgQU5EIChqMS5hKmoxLmMvMykg PSAocmFuZG9tKCkvMyArIDMpOjppbnQKKyAgQU5EIChyYW5kb20oKS8zICsgMyk6OmludCA9 IChqMi5hKmoyLmMvMyk7CisgYSB8IGIgfCBjIHwgYSB8IGIgfCBjIAorLS0tKy0tLSstLS0r LS0tKy0tLSstLS0KKyAzIHwgMSB8IDMgfCAzIHwgMSB8IDMKKygxIHJvdykKKworLS0gTXVs dGlwbGUgZmlsdGVycworQ1JFQVRFIFVOSVFVRSBJTkRFWCBzal90ZW1wX2lkeDEgT04gc2oo YSxiLGMpOworLS0gUmVtb3ZlIFNKCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgKiBG Uk9NIHNqIGoxLCBzaiBqMgorCVdIRVJFIGoxLmIgPSBqMi5iIEFORCBqMS5hID0gMiBBTkQg ajEuYyA9IDMgQU5EIGoyLmEgPSAyIEFORCAzID0gajIuYzsKKyAgICAgICAgICAgICAgICAg ICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNlcSBTY2FuIG9uIHNq IGoyCisgICBGaWx0ZXI6ICgoYiBJUyBOT1QgTlVMTCkgQU5EIChhID0gMikgQU5EIChjID0g MykpCisoMiByb3dzKQorCistLSBEb24ndCByZW1vdmUgU0oKK0VYUExBSU4gKENPU1RTIE9G RikKKwlTRUxFQ1QgKiBGUk9NIHNqIGoxLCBzaiBqMgorCVdIRVJFIGoxLmIgPSBqMi5iIEFO RCAyID0gajEuYSBBTkQgajEuYyA9IDMgQU5EIGoyLmEgPSAxIEFORCAzID0gajIuYzsKKyAg ICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AKKyAgIEpvaW4gRmlsdGVy OiAoajEuYiA9IGoyLmIpCisgICAtPiAgU2VxIFNjYW4gb24gc2ogajEKKyAgICAgICAgIEZp bHRlcjogKCgyID0gYSkgQU5EIChjID0gMykpCisgICAtPiAgU2VxIFNjYW4gb24gc2ogajIK KyAgICAgICAgIEZpbHRlcjogKChjID0gMykgQU5EIChhID0gMSkpCisoNiByb3dzKQorCitD UkVBVEUgVU5JUVVFIElOREVYIHNqX3RlbXBfaWR4IE9OIHNqKGEsYik7CistLSBEb24ndCBy ZW1vdmUgU0oKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gc2ogajEsIHNq IGoyIFdIRVJFIGoxLmIgPSBqMi5iIEFORCBqMS5hID0gMjsKKyAgICAgICAgICBRVUVSWSBQ TEFOICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVk IExvb3AKKyAgIEpvaW4gRmlsdGVyOiAoajEuYiA9IGoyLmIpCisgICAtPiAgU2VxIFNjYW4g b24gc2ogajEKKyAgICAgICAgIEZpbHRlcjogKGEgPSAyKQorICAgLT4gIFNlcSBTY2FuIG9u IHNqIGoyCisoNSByb3dzKQorCistLSBEb24ndCByZW1vdmUgU0oKK0VYUExBSU4gKENPU1RT IE9GRikKK1NFTEVDVCAqIEZST00gc2ogajEsIHNqIGoyIFdIRVJFIGoxLmIgPSBqMi5iIEFO RCAyID0gajIuYTsKKyAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgIAorLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AKKyAgIEpvaW4gRmlsdGVyOiAo ajEuYiA9IGoyLmIpCisgICAtPiAgU2VxIFNjYW4gb24gc2ogajIKKyAgICAgICAgIEZpbHRl cjogKDIgPSBhKQorICAgLT4gIFNlcSBTY2FuIG9uIHNqIGoxCisoNSByb3dzKQorCistLSBE b24ndCByZW1vdmUgU0oKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gc2og ajEsIHNqIGoyIFdIRVJFIGoxLmIgPSBqMi5iIEFORCAoajEuYSA9IDEgT1IgajIuYSA9IDEp OworICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAg ICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAorICAgSm9pbiBGaWx0ZXI6 ICgoajEuYiA9IGoyLmIpIEFORCAoKGoxLmEgPSAxKSBPUiAoajIuYSA9IDEpKSkKKyAgIC0+ ICBTZXEgU2NhbiBvbiBzaiBqMQorICAgLT4gIE1hdGVyaWFsaXplCisgICAgICAgICAtPiAg U2VxIFNjYW4gb24gc2ogajIKKyg1IHJvd3MpCisKK0RST1AgSU5ERVggc2pfZm5faWR4LCBz al90ZW1wX2lkeDEsIHNqX3RlbXBfaWR4OworLS0gVGVzdCB0aGF0IE9SIHByZWRpY2F0ZWQg YXJlIHVwZGF0ZWQgY29ycmVjdGx5IGFmdGVyIGpvaW4gcmVtb3ZhbAorQ1JFQVRFIFRBQkxF IHRhYl93aXRoX2ZsYWcgKCBpZCBJTlQgUFJJTUFSWSBLRVksIGlzX2ZsYWcgU01BTExJTlQp OworQ1JFQVRFIElOREVYIGlkeF90ZXN0X2lzX2ZsYWcgT04gdGFiX3dpdGhfZmxhZyAoaXNf ZmxhZyk7CitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgQ09VTlQoKikgRlJPTSB0YWJf d2l0aF9mbGFnCitXSEVSRQorCShpc19mbGFnIElTIE5VTEwgT1IgaXNfZmxhZyA9IDApCisJ QU5EIGlkIElOIChTRUxFQ1QgaWQgRlJPTSB0YWJfd2l0aF9mbGFnIFdIRVJFIGlkIElOICgy LCAzKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAg ICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBBZ2dyZWdhdGUKKyAgIC0+ICBCaXRtYXAgSGVhcCBT Y2FuIG9uIHRhYl93aXRoX2ZsYWcKKyAgICAgICAgIFJlY2hlY2sgQ29uZDogKGlkID0gQU5Z ICgnezIsM30nOjppbnRlZ2VyW10pKQorICAgICAgICAgRmlsdGVyOiAoKGlzX2ZsYWcgSVMg TlVMTCkgT1IgKGlzX2ZsYWcgPSAwKSkKKyAgICAgICAgIC0+ICBCaXRtYXAgSW5kZXggU2Nh biBvbiB0YWJfd2l0aF9mbGFnX3BrZXkKKyAgICAgICAgICAgICAgIEluZGV4IENvbmQ6IChp ZCA9IEFOWSAoJ3syLDN9Jzo6aW50ZWdlcltdKSkKKyg2IHJvd3MpCisKK0RST1AgVEFCTEUg dGFiX3dpdGhfZmxhZzsKKy0tIEhBVklORyBjbGF1c2UKK2V4cGxhaW4gKGNvc3RzIG9mZikK K3NlbGVjdCBwLmIgZnJvbSBzaiBwIGpvaW4gc2ogcSBvbiBwLmEgPSBxLmEgZ3JvdXAgYnkg cC5iIGhhdmluZyBzdW0ocC5hKSA9IDE7CisgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAg ICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEhhc2hBZ2dyZWdh dGUKKyAgIEdyb3VwIEtleTogcS5iCisgICBGaWx0ZXI6IChzdW0ocS5hKSA9IDEpCisgICAt PiAgU2VxIFNjYW4gb24gc2ogcQorICAgICAgICAgRmlsdGVyOiAoYSBJUyBOT1QgTlVMTCkK Kyg1IHJvd3MpCisKKy0tIHVwZGF0ZSBsYXRlcmFsIHJlZmVyZW5jZXMgYW5kIHJhbmdlIHRh YmxlIGVudHJ5IHJlZmVyZW5jZQorZXhwbGFpbiAodmVyYm9zZSwgY29zdHMgb2ZmKQorc2Vs ZWN0IDEgZnJvbSAoc2VsZWN0IHguKiBmcm9tIHNqIHgsIHNqIHkgd2hlcmUgeC5hID0geS5h KSBxLAorICBsYXRlcmFsIGdlbmVyYXRlX3NlcmllcygxLCBxLmEpIGdzKGkpOworICAgICAg ICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBO ZXN0ZWQgTG9vcAorICAgT3V0cHV0OiAxCisgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLnNq IHkKKyAgICAgICAgIE91dHB1dDogeS5hLCB5LmIsIHkuYworICAgICAgICAgRmlsdGVyOiAo eS5hIElTIE5PVCBOVUxMKQorICAgLT4gIEZ1bmN0aW9uIFNjYW4gb24gcGdfY2F0YWxvZy5n ZW5lcmF0ZV9zZXJpZXMgZ3MKKyAgICAgICAgIE91dHB1dDogZ3MuaQorICAgICAgICAgRnVu Y3Rpb24gQ2FsbDogZ2VuZXJhdGVfc2VyaWVzKDEsIHkuYSkKKyg4IHJvd3MpCisKK2V4cGxh aW4gKHZlcmJvc2UsIGNvc3RzIG9mZikKK3NlbGVjdCAxIGZyb20gKHNlbGVjdCB5LiogZnJv bSBzaiB4LCBzaiB5IHdoZXJlIHguYSA9IHkuYSkgcSwKKyAgbGF0ZXJhbCBnZW5lcmF0ZV9z ZXJpZXMoMSwgcS5hKSBncyhpKTsKKyAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFO ICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AKKyAgIE91dHB1dDogMQor ICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5zaiB5CisgICAgICAgICBPdXRwdXQ6IHkuYSwg eS5iLCB5LmMKKyAgICAgICAgIEZpbHRlcjogKHkuYSBJUyBOT1QgTlVMTCkKKyAgIC0+ICBG dW5jdGlvbiBTY2FuIG9uIHBnX2NhdGFsb2cuZ2VuZXJhdGVfc2VyaWVzIGdzCisgICAgICAg ICBPdXRwdXQ6IGdzLmkKKyAgICAgICAgIEZ1bmN0aW9uIENhbGw6IGdlbmVyYXRlX3Nlcmll cygxLCB5LmEpCisoOCByb3dzKQorCistLSBUZXN0IHRoYXQgYSBub24tRUMtZGVyaXZlZCBq b2luIGNsYXVzZSBpcyBwcm9jZXNzZWQgY29ycmVjdGx5LiBVc2UgYW4KKy0tIG91dGVyIGpv aW4gc28gdGhhdCB3ZSBjYW4ndCBmb3JtIGFuIEVDLgorZXhwbGFpbiAoY29zdHMgb2ZmKSBz ZWxlY3QgKiBmcm9tIHNqIHAgam9pbiBzaiBxIG9uIHAuYSA9IHEuYQorICBsZWZ0IGpvaW4g c2ogciBvbiBwLmEgKyBxLmEgPSByLmE7CisgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAg ICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE5lc3Rl ZCBMb29wIExlZnQgSm9pbgorICAgSm9pbiBGaWx0ZXI6ICgocS5hICsgcS5hKSA9IHIuYSkK KyAgIC0+ICBTZXEgU2NhbiBvbiBzaiBxCisgICAgICAgICBGaWx0ZXI6IChhIElTIE5PVCBO VUxMKQorICAgLT4gIE1hdGVyaWFsaXplCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gc2og cgorKDYgcm93cykKKworLS0gRklYTUUgdGhpcyBjb25zdGFudCBmYWxzZSBmaWx0ZXIgZG9l c24ndCBsb29rIGdvb2QuIFNob3VsZCB3ZSBtZXJnZQorLS0gZXF1aXZhbGVuY2UgY2xhc3Nl cz8KK2V4cGxhaW4gKGNvc3RzIG9mZikKK3NlbGVjdCAqIGZyb20gc2ogcCwgc2ogcSB3aGVy ZSBwLmEgPSBxLmEgYW5kIHAuYiA9IDEgYW5kIHEuYiA9IDI7CisgICAgICAgICAgICAgICAg ICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTZXEgU2NhbiBvbiBz aiBxCisgICBGaWx0ZXI6ICgoYSBJUyBOT1QgTlVMTCkgQU5EIChiID0gMikgQU5EIChiID0g MSkpCisoMiByb3dzKQorCistLSBDaGVjayB0aGF0IGF0dHJfbmVlZGVkIGlzIHVwZGF0ZWQg Y29ycmVjdGx5IGFmdGVyIHNlbGYtam9pbiByZW1vdmFsLiBJbiB0aGlzCistLSB0ZXN0LCB0 aGUgam9pbiBvZiBqMSB3aXRoIGoyIGlzIHJlbW92ZWQuIGsxLmIgaXMgcmVxdWlyZWQgYXQg ZWl0aGVyIGoxIG9yIGoyLgorLS0gSWYgdGhpcyBpbmZvIGlzIGxvc3QsIGpvaW4gdGFyZ2V0 bGlzdCBmb3IgKGsxLCBrMikgd2lsbCBub3QgY29udGFpbiBrMS5iLgorLS0gVXNlIGluZGV4 IHNjYW4gZm9yIGsxIHNvIHRoYXQgd2UgZG9uJ3QgZ2V0ICdiJyBmcm9tIHBoeXNpY2FsIHRs aXN0IHVzZWQgZm9yCistLSBzZXFzY2FuLiBBbHNvIGRpc2FibGUgcmVvcmRlcmluZyBvZiBq b2lucyBiZWNhdXNlIHRoaXMgdGVzdCBkZXBlbmRzIG9uIGEKKy0tIHBhcnRpY3VsYXIgam9p biB0cmVlLgorY3JlYXRlIHRhYmxlIHNrIChhIGludCwgYiBpbnQpOworY3JlYXRlIGluZGV4 IG9uIHNrKGEpOworc2V0IGpvaW5fY29sbGFwc2VfbGltaXQgdG8gMTsKK3NldCBlbmFibGVf c2Vxc2NhbiB0byBvZmY7CitleHBsYWluIChjb3N0cyBvZmYpIHNlbGVjdCAxIGZyb20KKwko c2sgazEgam9pbiBzayBrMiBvbiBrMS5hID0gazIuYSkKKwlqb2luIChzaiBqMSBqb2luIHNq IGoyIG9uIGoxLmEgPSBqMi5hKSBvbiBqMS5iID0gazEuYjsKKyAgICAgICAgICAgICAgICAg ICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29wCisg ICBKb2luIEZpbHRlcjogKGsxLmIgPSBqMi5iKQorICAgLT4gIE5lc3RlZCBMb29wCisgICAg ICAgICAtPiAgSW5kZXggU2NhbiB1c2luZyBza19hX2lkeCBvbiBzayBrMQorICAgICAgICAg LT4gIEluZGV4IE9ubHkgU2NhbiB1c2luZyBza19hX2lkeCBvbiBzayBrMgorICAgICAgICAg ICAgICAgSW5kZXggQ29uZDogKGEgPSBrMS5hKQorICAgLT4gIE1hdGVyaWFsaXplCisgICAg ICAgICAtPiAgSW5kZXggU2NhbiB1c2luZyBzal9hX2tleSBvbiBzaiBqMgorICAgICAgICAg ICAgICAgSW5kZXggQ29uZDogKGEgSVMgTk9UIE5VTEwpCisoOSByb3dzKQorCitleHBsYWlu IChjb3N0cyBvZmYpIHNlbGVjdCAxIGZyb20KKwkoc2sgazEgam9pbiBzayBrMiBvbiBrMS5h ID0gazIuYSkKKwlqb2luIChzaiBqMSBqb2luIHNqIGoyIG9uIGoxLmEgPSBqMi5hKSBvbiBq Mi5iID0gazEuYjsKKyAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAg ICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29wCisgICBKb2luIEZpbHRlcjogKGsxLmIgPSBq Mi5iKQorICAgLT4gIE5lc3RlZCBMb29wCisgICAgICAgICAtPiAgSW5kZXggU2NhbiB1c2lu ZyBza19hX2lkeCBvbiBzayBrMQorICAgICAgICAgLT4gIEluZGV4IE9ubHkgU2NhbiB1c2lu ZyBza19hX2lkeCBvbiBzayBrMgorICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKGEgPSBr MS5hKQorICAgLT4gIE1hdGVyaWFsaXplCisgICAgICAgICAtPiAgSW5kZXggU2NhbiB1c2lu ZyBzal9hX2tleSBvbiBzaiBqMgorICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKGEgSVMg Tk9UIE5VTEwpCisoOSByb3dzKQorCityZXNldCBqb2luX2NvbGxhcHNlX2xpbWl0OworcmVz ZXQgZW5hYmxlX3NlcXNjYW47CistLSBDaGVjayB0aGF0IGNsYXVzZXMgZnJvbSB0aGUgam9p biBmaWx0ZXIgbGlzdCBpcyBub3QgbG9zdCBvbiB0aGUgc2VsZi1qb2luIHJlbW92YWwKK0NS RUFURSBUQUJMRSBlbXAxIChpZCBTRVJJQUwgUFJJTUFSWSBLRVkgTk9UIE5VTEwsIGNvZGUg aW50KTsKK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gZW1w MSBlMSwgZW1wMSBlMiBXSEVSRSBlMS5pZCA9IGUyLmlkIEFORCBlMi5jb2RlIDw+IGUxLmNv ZGU7CisgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNlcSBTY2FuIG9uIHB1 YmxpYy5lbXAxIGUyCisgICBPdXRwdXQ6IGUyLmlkLCBlMi5jb2RlLCBlMi5pZCwgZTIuY29k ZQorICAgRmlsdGVyOiAoZTIuY29kZSA8PiBlMi5jb2RlKQorKDMgcm93cykKKworLS0gU2h1 ZmZsZSBzZWxmLWpvaW5lZCByZWxhdGlvbnMuIE9ubHkgaW4gdGhlIGNhc2Ugb2YgaXRlcmF0 aXZlIGRlbGV0aW9uCistLSBhdHRlbXB0cyBleHBsYWlucyBvZiB0aGVzZSBxdWVyaWVzIHdp bGwgYmUgaWRlbnRpY2FsLgorQ1JFQVRFIFVOSVFVRSBJTkRFWCBPTiBlbXAxKChpZCppZCkp OworRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUIGNvdW50KCopIEZST00gZW1wMSBjMSwg ZW1wMSBjMiwgZW1wMSBjMworV0hFUkUgYzEuaWQ9YzIuaWQgQU5EIGMxLmlkKmMyLmlkPWMz LmlkKmMzLmlkOworICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQWdncmVnYXRl CisgICAtPiAgU2VxIFNjYW4gb24gZW1wMSBjMworICAgICAgICAgRmlsdGVyOiAoKGlkICog aWQpIElTIE5PVCBOVUxMKQorKDMgcm93cykKKworRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VM RUNUIGNvdW50KCopIEZST00gZW1wMSBjMSwgZW1wMSBjMiwgZW1wMSBjMworV0hFUkUgYzEu aWQ9YzMuaWQgQU5EIGMxLmlkKmMzLmlkPWMyLmlkKmMyLmlkOworICAgICAgICAgICAgICAg UVVFUlkgUExBTiAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgQWdncmVnYXRlCisgICAtPiAgU2VxIFNjYW4gb24gZW1wMSBj MworICAgICAgICAgRmlsdGVyOiAoKGlkICogaWQpIElTIE5PVCBOVUxMKQorKDMgcm93cykK KworRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUIGNvdW50KCopIEZST00gZW1wMSBjMSwg ZW1wMSBjMiwgZW1wMSBjMworV0hFUkUgYzMuaWQ9YzIuaWQgQU5EIGMzLmlkKmMyLmlkPWMx LmlkKmMxLmlkOworICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQWdncmVnYXRl CisgICAtPiAgU2VxIFNjYW4gb24gZW1wMSBjMworICAgICAgICAgRmlsdGVyOiAoKGlkICog aWQpIElTIE5PVCBOVUxMKQorKDMgcm93cykKKworLS0gQ2hlY2sgdGhlIHVzYWdlIG9mIGEg cGFyc2UgdHJlZSBieSB0aGUgc2V0IG9wZXJhdGlvbnMgKGJ1ZyAjMTgxNzApCitFWFBMQUlO IChDT1NUUyBPRkYpCitTRUxFQ1QgYzEuY29kZSBGUk9NIGVtcDEgYzEgTEVGVCBKT0lOIGVt cDEgYzIgT04gYzEuaWQgPSBjMi5pZAorV0hFUkUgYzIuaWQgSVMgTk9UIE5VTEwKK0VYQ0VQ VCBBTEwKK1NFTEVDVCBjMy5jb2RlIEZST00gZW1wMSBjMzsKKyAgICAgICAgICAgICAgICBR VUVSWSBQTEFOICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyBIYXNoU2V0T3AgRXhjZXB0IEFsbAorICAgLT4gIEFwcGVu ZAorICAgICAgICAgLT4gIFN1YnF1ZXJ5IFNjYW4gb24gIipTRUxFQ1QqIDEiCisgICAgICAg ICAgICAgICAtPiAgU2VxIFNjYW4gb24gZW1wMSBjMgorICAgICAgICAgLT4gIFN1YnF1ZXJ5 IFNjYW4gb24gIipTRUxFQ1QqIDIiCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24g ZW1wMSBjMworKDYgcm93cykKKworLS0gQ2hlY2sgdGhhdCBTSkUgcmVtb3ZlcyByZWZlcmVu Y2VzIGZyb20gUEhWcyBjb3JyZWN0bHkKK2V4cGxhaW4gKGNvc3RzIG9mZikKK3NlbGVjdCAq IGZyb20gZW1wMSB0MSBsZWZ0IGpvaW4KKyAgICAoc2VsZWN0IGNvYWxlc2NlKHQzLmNvZGUs IDEpIGZyb20gZW1wMSB0MgorICAgICAgICBsZWZ0IGpvaW4gKGVtcDEgdDMgam9pbiBlbXAx IHQ0IG9uIHQzLmlkID0gdDQuaWQpCisgICAgICAgIG9uIHRydWUpCitvbiB0cnVlOworICAg ICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcCBMZWZ0 IEpvaW4KKyAgIC0+ICBTZXEgU2NhbiBvbiBlbXAxIHQxCisgICAtPiAgTWF0ZXJpYWxpemUK KyAgICAgICAgIC0+ICBOZXN0ZWQgTG9vcCBMZWZ0IEpvaW4KKyAgICAgICAgICAgICAgIC0+ ICBTZXEgU2NhbiBvbiBlbXAxIHQyCisgICAgICAgICAgICAgICAtPiAgTWF0ZXJpYWxpemUK KyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBlbXAxIHQ0CisoNyByb3dz KQorCistLSBDaGVjayB0aGF0IFNKRSByZW1vdmVzIHRoZSB3aG9sZSBQSFZzIGNvcnJlY3Rs eQorZXhwbGFpbiAodmVyYm9zZSwgY29zdHMgb2ZmKQorc2VsZWN0IDEgZnJvbSBlbXAxIHQx IGxlZnQgam9pbgorICAgICgoc2VsZWN0IDEgYXMgeCwgKiBmcm9tIGVtcDEgdDIpIHMxIGlu bmVyIGpvaW4KKyAgICAgICAgKHNlbGVjdCAqIGZyb20gZW1wMSB0MykgczIgb24gczEuaWQg PSBzMi5pZCkKKyAgICBvbiB0cnVlCit3aGVyZSBzMS54ID0gMTsKKyAgICAgICAgICAgICAg IFFVRVJZIFBMQU4gICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAorICAgT3V0cHV0OiAxCisgICAtPiAgU2Vx IFNjYW4gb24gcHVibGljLmVtcDEgdDEKKyAgICAgICAgIE91dHB1dDogdDEuaWQsIHQxLmNv ZGUKKyAgIC0+ICBNYXRlcmlhbGl6ZQorICAgICAgICAgT3V0cHV0OiB0My5pZAorICAgICAg ICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5lbXAxIHQzCisgICAgICAgICAgICAgICBPdXRw dXQ6IHQzLmlkCisgICAgICAgICAgICAgICBGaWx0ZXI6ICgxID0gMSkKKyg5IHJvd3MpCisK Ky0tIENoZWNrIHRoYXQgUEhWcyBkbyBub3QgaW1wb3NlIGFueSBjb25zdHJhaW50cyBvbiBy ZW1vdmluZyBzZWxmIGpvaW5zCitleHBsYWluICh2ZXJib3NlLCBjb3N0cyBvZmYpCitzZWxl Y3QgKiBmcm9tIGVtcDEgdDEgam9pbiBlbXAxIHQyIG9uIHQxLmlkID0gdDIuaWQgbGVmdCBq b2luCisgICAgbGF0ZXJhbCAoc2VsZWN0IHQxLmlkIGFzIHQxaWQsICogZnJvbSBnZW5lcmF0 ZV9zZXJpZXMoMSwxKSB0MykgcyBvbiB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAg UVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29w IExlZnQgSm9pbgorICAgT3V0cHV0OiB0Mi5pZCwgdDIuY29kZSwgdDIuaWQsIHQyLmNvZGUs ICh0Mi5pZCksIHQzLnQzCisgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVtcDEgdDIKKyAg ICAgICAgIE91dHB1dDogdDIuaWQsIHQyLmNvZGUKKyAgIC0+ICBGdW5jdGlvbiBTY2FuIG9u IHBnX2NhdGFsb2cuZ2VuZXJhdGVfc2VyaWVzIHQzCisgICAgICAgICBPdXRwdXQ6IHQzLnQz LCB0Mi5pZAorICAgICAgICAgRnVuY3Rpb24gQ2FsbDogZ2VuZXJhdGVfc2VyaWVzKDEsIDEp CisoNyByb3dzKQorCitleHBsYWluICh2ZXJib3NlLCBjb3N0cyBvZmYpCitzZWxlY3QgKiBm cm9tIGdlbmVyYXRlX3NlcmllcygxLDEwKSB0MShpZCkgbGVmdCBqb2luCisgICAgbGF0ZXJh bCAoc2VsZWN0IHQxLmlkIGFzIHQxaWQsIHQyLmlkIGZyb20gZW1wMSB0MiBqb2luIGVtcDEg dDMgb24gdDIuaWQgPSB0My5pZCkKK29uIHRydWU7CisgICAgICAgICAgICAgICAgICAgICAg UVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29wIExlZnQg Sm9pbgorICAgT3V0cHV0OiB0MS5pZCwgKHQxLmlkKSwgdDMuaWQKKyAgIC0+ICBGdW5jdGlv biBTY2FuIG9uIHBnX2NhdGFsb2cuZ2VuZXJhdGVfc2VyaWVzIHQxCisgICAgICAgICBPdXRw dXQ6IHQxLmlkCisgICAgICAgICBGdW5jdGlvbiBDYWxsOiBnZW5lcmF0ZV9zZXJpZXMoMSwg MTApCisgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVtcDEgdDMKKyAgICAgICAgIE91dHB1 dDogdDMuaWQsIHQxLmlkCisoNyByb3dzKQorCistLSBDaGVjayB0aGF0IFNKRSByZXBsYWNl cyBqb2luIGNsYXVzZXMgaW52b2x2aW5nIHRoZSByZW1vdmVkIHJlbCBjb3JyZWN0bHkKK2V4 cGxhaW4gKGNvc3RzIG9mZikKK3NlbGVjdCAqIGZyb20gZW1wMSB0MQorICAgaW5uZXIgam9p biBlbXAxIHQyIG9uIHQxLmlkID0gdDIuaWQKKyAgICBsZWZ0IGpvaW4gZW1wMSB0MyBvbiB0 MS5pZCA+IDEgYW5kIHQxLmlkIDwgMjsKKyAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4g ICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcCBMZWZ0IEpvaW4KKyAgIEpvaW4gRmlsdGVyOiAo KHQyLmlkID4gMSkgQU5EICh0Mi5pZCA8IDIpKQorICAgLT4gIFNlcSBTY2FuIG9uIGVtcDEg dDIKKyAgIC0+ICBNYXRlcmlhbGl6ZQorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGVtcDEg dDMKKyg1IHJvd3MpCisKKy0tIENoZWNrIHRoYXQgU0pFIGRvZXNuJ3QgcmVwbGFjZSB0aGUg dGFyZ2V0IHJlbGF0aW9uCitFWFBMQUlOIChDT1NUUyBPRkYpCitXSVRIIHQxIEFTIChTRUxF Q1QgKiBGUk9NIGVtcDEpCitVUERBVEUgZW1wMSBTRVQgY29kZSA9IHQxLmNvZGUgKyAxIEZS T00gdDEKK1dIRVJFIHQxLmlkID0gZW1wMS5pZCBSRVRVUk5JTkcgZW1wMS5pZCwgZW1wMS5j b2RlLCB0MS5jb2RlOworICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAg ICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorIFVwZGF0ZSBvbiBlbXAxCisgICAtPiAgTmVzdGVkIExv b3AKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBlbXAxCisgICAgICAgICAtPiAgSW5kZXgg U2NhbiB1c2luZyBlbXAxX3BrZXkgb24gZW1wMSBlbXAxXzEKKyAgICAgICAgICAgICAgIElu ZGV4IENvbmQ6IChpZCA9IGVtcDEuaWQpCisoNSByb3dzKQorCitJTlNFUlQgSU5UTyBlbXAx IFZBTFVFUyAoMSwgMSksICgyLCAxKTsKK1dJVEggdDEgQVMgKFNFTEVDVCAqIEZST00gZW1w MSkKK1VQREFURSBlbXAxIFNFVCBjb2RlID0gdDEuY29kZSArIDEgRlJPTSB0MQorV0hFUkUg dDEuaWQgPSBlbXAxLmlkIFJFVFVSTklORyBlbXAxLmlkLCBlbXAxLmNvZGUsIHQxLmNvZGU7 CisgaWQgfCBjb2RlIHwgY29kZSAKKy0tLS0rLS0tLS0tKy0tLS0tLQorICAxIHwgICAgMiB8 ICAgIDEKKyAgMiB8ICAgIDIgfCAgICAxCisoMiByb3dzKQorCitUUlVOQ0FURSBlbXAxOwor RVhQTEFJTiAoQ09TVFMgT0ZGKQorVVBEQVRFIHNqIHNxIFNFVCBiID0gMSBGUk9NIHNqIGFz IHN6IFdIRVJFIHNxLmEgPSBzei5hOworICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAg ICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFVwZGF0 ZSBvbiBzaiBzcQorICAgLT4gIE5lc3RlZCBMb29wCisgICAgICAgICBKb2luIEZpbHRlcjog KHNxLmEgPSBzei5hKQorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHNqIHNxCisgICAgICAg ICAtPiAgTWF0ZXJpYWxpemUKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBzaiBz egorKDYgcm93cykKKworQ1JFQVRFIFJVTEUgc2pfZGVsX3J1bGUgQVMgT04gREVMRVRFIFRP IHNqCisgIERPIElOU1RFQUQKKyAgICBVUERBVEUgc2ogU0VUIGEgPSAxIFdIRVJFIGEgPSBv bGQuYTsKK0VYUExBSU4gKENPU1RTIE9GRikgREVMRVRFIEZST00gc2o7CisgICAgICAgICAg ICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyBVcGRhdGUgb24gc2ogc2pfMQorICAgLT4gIE5lc3RlZCBMb29w CisgICAgICAgICBKb2luIEZpbHRlcjogKHNqLmEgPSBzal8xLmEpCisgICAgICAgICAtPiAg U2VxIFNjYW4gb24gc2ogc2pfMQorICAgICAgICAgLT4gIE1hdGVyaWFsaXplCisgICAgICAg ICAgICAgICAtPiAgU2VxIFNjYW4gb24gc2oKKyg2IHJvd3MpCisKK0RST1AgUlVMRSBzal9k ZWxfcnVsZSBPTiBzaiBDQVNDQURFOworLS0gQ2hlY2sgdGhhdCBTSkUgZG9lcyBub3QgbWlz dGFrZW5seSBvbWl0IHF1YWwgY2xhdXNlcyAoYnVnICMxODE4NykKK2luc2VydCBpbnRvIGVt cDEgdmFsdWVzICgxLCAxKTsKK2V4cGxhaW4gKGNvc3RzIG9mZikKK3NlbGVjdCAxIGZyb20g ZW1wMSBmdWxsIGpvaW4KKyAgICAoc2VsZWN0ICogZnJvbSBlbXAxIHQxIGpvaW4KKyAgICAg ICAgZW1wMSB0MiBqb2luIGVtcDEgdDMgb24gdDIuaWQgPSB0My5pZAorICAgICAgICBvbiB0 cnVlCisgICAgd2hlcmUgZmFsc2UpIHMgb24gdHJ1ZQord2hlcmUgZmFsc2U7CisgICAgICAg IFFVRVJZIFBMQU4gICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBSZXN1 bHQKKyAgIE9uZS1UaW1lIEZpbHRlcjogZmFsc2UKKygyIHJvd3MpCisKK3NlbGVjdCAxIGZy b20gZW1wMSBmdWxsIGpvaW4KKyAgICAoc2VsZWN0ICogZnJvbSBlbXAxIHQxIGpvaW4KKyAg ICAgICAgZW1wMSB0MiBqb2luIGVtcDEgdDMgb24gdDIuaWQgPSB0My5pZAorICAgICAgICBv biB0cnVlCisgICAgd2hlcmUgZmFsc2UpIHMgb24gdHJ1ZQord2hlcmUgZmFsc2U7CisgP2Nv bHVtbj8gCistLS0tLS0tLS0tCisoMCByb3dzKQorCistLSBDaGVjayB0aGF0IFNKRSBkb2Vz IG5vdCBtaXN0YWtlbmx5IHJlLXVzZSBrbm93bGVkZ2Ugb2YgcmVsYXRpb24gdW5pcXVlbmVz cworLS0gbWFkZSB3aXRoIGRpZmZlcmVudCBzZXQgb2YgcXVhbHMKK2luc2VydCBpbnRvIGVt cDEgdmFsdWVzICgyLCAxKTsKK2V4cGxhaW4gKGNvc3RzIG9mZikKK3NlbGVjdCAqIGZyb20g ZW1wMSB0MSB3aGVyZSBleGlzdHMgKHNlbGVjdCAqIGZyb20gZW1wMSB0MgorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgdDIuaWQgPSB0MS5jb2RlIGFuZCB0 Mi5jb2RlID4gMCk7CisgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAg ICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor IE5lc3RlZCBMb29wCisgICAtPiAgU2VxIFNjYW4gb24gZW1wMSB0MQorICAgLT4gIEluZGV4 IFNjYW4gdXNpbmcgZW1wMV9wa2V5IG9uIGVtcDEgdDIKKyAgICAgICAgIEluZGV4IENvbmQ6 IChpZCA9IHQxLmNvZGUpCisgICAgICAgICBGaWx0ZXI6IChjb2RlID4gMCkKKyg1IHJvd3Mp CisKK3NlbGVjdCAqIGZyb20gZW1wMSB0MSB3aGVyZSBleGlzdHMgKHNlbGVjdCAqIGZyb20g ZW1wMSB0MgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgdDIu aWQgPSB0MS5jb2RlIGFuZCB0Mi5jb2RlID4gMCk7CisgaWQgfCBjb2RlIAorLS0tLSstLS0t LS0KKyAgMSB8ICAgIDEKKyAgMiB8ICAgIDEKKygyIHJvd3MpCisKKy0tIFdlIGNhbiByZW1v dmUgdGhlIGpvaW4gZXZlbiBpZiB3ZSBmaW5kIHRoZSBqb2luIGNhbid0IGR1cGxpY2F0ZSBy b3dzIGFuZAorLS0gdGhlIGJhc2UgcXVhbHMgb2YgZWFjaCBzaWRlIGFyZSBkaWZmZXJlbnQu ICBJbiB0aGUgZm9sbG93aW5nIGNhc2Ugd2UgZW5kIHVwCistLSBtb3ZpbmcgcXVhbHMgb3Zl ciB0byBzMSB0byBtYWtlIGl0IHNvIGl0IGNhbid0IG1hdGNoIGFueSByb3dzLgorY3JlYXRl IHRhYmxlIHNsKGEgaW50LCBiIGludCwgYyBpbnQpOworY3JlYXRlIHVuaXF1ZSBpbmRleCBv biBzbChhLCBiKTsKK3ZhY3V1bSBhbmFseXplIHNsOworLS0gQm90aCBzaWRlcyBhcmUgdW5p cXVlLCBidXQgYmFzZSBxdWFscyBhcmUgZGlmZmVyZW50CitleHBsYWluIChjb3N0cyBvZmYp CitzZWxlY3QgKiBmcm9tIHNsIHQxLCBzbCB0MiB3aGVyZSB0MS5hID0gdDIuYSBhbmQgdDEu YiA9IDEgYW5kIHQyLmIgPSAyOworICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAorICAgSm9pbiBG aWx0ZXI6ICh0MS5hID0gdDIuYSkKKyAgIC0+ICBTZXEgU2NhbiBvbiBzbCB0MQorICAgICAg ICAgRmlsdGVyOiAoYiA9IDEpCisgICAtPiAgU2VxIFNjYW4gb24gc2wgdDIKKyAgICAgICAg IEZpbHRlcjogKGIgPSAyKQorKDYgcm93cykKKworLS0gQ2hlY2sgTnVsbFRlc3QgaW4gYmFz ZXJlc3RyaWN0aW5mbyBsaXN0CitleHBsYWluIChjb3N0cyBvZmYpCitzZWxlY3QgKiBmcm9t IHNsIHQxLCBzbCB0Mgord2hlcmUgdDEuYSA9IHQyLmEgYW5kIHQxLmIgPSAxIGFuZCB0Mi5i ID0gMgorICBhbmQgdDEuYyBJUyBOT1QgTlVMTCBhbmQgdDIuYyBJUyBOT1QgTlVMTAorICBh bmQgdDIuYiBJUyBOT1QgTlVMTCBhbmQgdDEuYiBJUyBOT1QgTlVMTAorICBhbmQgdDEuYSBJ UyBOT1QgTlVMTCBhbmQgdDIuYSBJUyBOT1QgTlVMTDsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVz dGVkIExvb3AKKyAgIEpvaW4gRmlsdGVyOiAodDEuYSA9IHQyLmEpCisgICAtPiAgU2VxIFNj YW4gb24gc2wgdDEKKyAgICAgICAgIEZpbHRlcjogKChjIElTIE5PVCBOVUxMKSBBTkQgKGIg SVMgTk9UIE5VTEwpIEFORCAoYSBJUyBOT1QgTlVMTCkgQU5EIChiID0gMSkpCisgICAtPiAg U2VxIFNjYW4gb24gc2wgdDIKKyAgICAgICAgIEZpbHRlcjogKChjIElTIE5PVCBOVUxMKSBB TkQgKGIgSVMgTk9UIE5VTEwpIEFORCAoYSBJUyBOT1QgTlVMTCkgQU5EIChiID0gMikpCiso NiByb3dzKQorCitleHBsYWluICh2ZXJib3NlLCBjb3N0cyBvZmYpCitzZWxlY3QgKiBmcm9t IHNsIHQxLCBzbCB0Mgord2hlcmUgdDEuYiA9IHQyLmIgYW5kIHQyLmEgPSAzIGFuZCB0MS5h ID0gMworICBhbmQgdDEuYyBJUyBOT1QgTlVMTCBhbmQgdDIuYyBJUyBOT1QgTlVMTAorICBh bmQgdDIuYiBJUyBOT1QgTlVMTCBhbmQgdDEuYiBJUyBOT1QgTlVMTAorICBhbmQgdDEuYSBJ UyBOT1QgTlVMTCBhbmQgdDIuYSBJUyBOT1QgTlVMTDsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgU2VxIFNjYW4gb24gcHVibGljLnNsIHQyCisgICBPdXRwdXQ6IHQyLmEsIHQy LmIsIHQyLmMsIHQyLmEsIHQyLmIsIHQyLmMKKyAgIEZpbHRlcjogKCh0Mi5jIElTIE5PVCBO VUxMKSBBTkQgKHQyLmIgSVMgTk9UIE5VTEwpIEFORCAodDIuYSBJUyBOT1QgTlVMTCkgQU5E ICh0Mi5hID0gMykpCisoMyByb3dzKQorCistLSBKb2luIHF1YWwgaXNuJ3QgbWVyZ2Vqb2lu YWJsZSwgYnV0IGlubmVyIGlzIHVuaXF1ZS4KK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVD VCBuMi5hIEZST00gc2ogbjEsIHNqIG4yIFdIRVJFIG4xLmEgPD4gbjIuYSBBTkQgbjIuYSA9 IDE7CisgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AKKyAgIEpvaW4gRmlsdGVyOiAobjEuYSA8 PiBuMi5hKQorICAgLT4gIFNlcSBTY2FuIG9uIHNqIG4yCisgICAgICAgICBGaWx0ZXI6IChh ID0gMSkKKyAgIC0+ICBTZXEgU2NhbiBvbiBzaiBuMQorKDUgcm93cykKKworRVhQTEFJTiAo Q09TVFMgT0ZGKQorU0VMRUNUICogRlJPTQorKFNFTEVDVCBuMi5hIEZST00gc2ogbjEsIHNq IG4yIFdIRVJFIG4xLmEgPD4gbjIuYSkgcTAsIHNsCitXSEVSRSBxMC5hID0gMTsKKyAgICAg ICAgICBRVUVSWSBQTEFOICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyBOZXN0ZWQgTG9vcAorICAgSm9pbiBGaWx0ZXI6IChuMS5hIDw+IG4yLmEpCisg ICAtPiAgTmVzdGVkIExvb3AKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBzbAorICAgICAg ICAgLT4gIFNlcSBTY2FuIG9uIHNqIG4yCisgICAgICAgICAgICAgICBGaWx0ZXI6IChhID0g MSkKKyAgIC0+ICBTZXEgU2NhbiBvbiBzaiBuMQorKDcgcm93cykKKworLS0gQ2hlY2sgb3B0 aW1pemF0aW9uIGRpc2FibGluZyBpZiBpdCB3aWxsIHZpb2xhdGUgc3BlY2lhbCBqb2luIGNv bmRpdGlvbnMuCistLSBUd28gaWRlbnRpY2FsIGpvaW5lZCByZWxhdGlvbnMgc2F0aXNmaWVz IHNlbGYgam9pbiByZW1vdmFsIGNvbmRpdGlvbnMgYnV0CistLSBzdGF5IGluIGRpZmZlcmVu dCBzcGVjaWFsIGpvaW4gaW5mb3MuCitDUkVBVEUgVEFCTEUgc2pfdDEgKGlkIHNlcmlhbCwg YSBpbnQpOworQ1JFQVRFIFRBQkxFIHNqX3QyIChpZCBzZXJpYWwsIGEgaW50KTsKK0NSRUFU RSBUQUJMRSBzal90MyAoaWQgc2VyaWFsLCBhIGludCk7CitDUkVBVEUgVEFCTEUgc2pfdDQg KGlkIHNlcmlhbCwgYSBpbnQpOworQ1JFQVRFIFVOSVFVRSBJTkRFWCBPTiBzal90MyBVU0lO RyBidHJlZSAoYSxpZCk7CitDUkVBVEUgVU5JUVVFIElOREVYIE9OIHNqX3QyIFVTSU5HIGJ0 cmVlIChpZCk7CitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIHNqX3QxCitK T0lOICgKKwlTRUxFQ1Qgc2pfdDIuaWQgQVMgaWQgRlJPTSBzal90MgorCVdIRVJFIEVYSVNU UworCQkoCisJCVNFTEVDVCBUUlVFIEZST00gc2pfdDMsc2pfdDQgV0hFUkUgc2pfdDMuYSA9 IDEgQU5EIHNqX3QzLmlkID0gc2pfdDIuaWQKKwkJKQorCSkgdDJ0M3Q0CitPTiBzal90MS5p ZCA9IHQydDN0NC5pZAorSk9JTiAoCisJU0VMRUNUIHNqX3QyLmlkIEFTIGlkIEZST00gc2pf dDIKKwlXSEVSRSBFWElTVFMKKwkJKAorCQlTRUxFQ1QgVFJVRSBGUk9NIHNqX3QzLHNqX3Q0 IFdIRVJFIHNqX3QzLmEgPSAxIEFORCBzal90My5pZCA9IHNqX3QyLmlkCisJCSkKKwkpIF90 MnQzdDQKK09OIHNqX3QxLmlkID0gX3QydDN0NC5pZDsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQg TG9vcAorICAgSm9pbiBGaWx0ZXI6IChzal90My5pZCA9IHNqX3QxLmlkKQorICAgLT4gIE5l c3RlZCBMb29wCisgICAgICAgICBKb2luIEZpbHRlcjogKHNqX3QyLmlkID0gc2pfdDMuaWQp CisgICAgICAgICAtPiAgTmVzdGVkIExvb3AgU2VtaSBKb2luCisgICAgICAgICAgICAgICAt PiAgTmVzdGVkIExvb3AKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBIYXNoQWdncmVnYXRl CisgICAgICAgICAgICAgICAgICAgICAgICAgICBHcm91cCBLZXk6IHNqX3QzLmlkCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAtPiAgTmVzdGVkIExvb3AKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBzal90NAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLT4gIE1hdGVyaWFsaXplCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAtPiAgQml0bWFwIEhlYXAgU2NhbiBvbiBzal90Mwor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVjaGVjayBD b25kOiAoYSA9IDEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAtPiAgQml0bWFwIEluZGV4IFNjYW4gb24gc2pfdDNfYV9pZF9pZHgKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4IENvbmQ6 IChhID0gMSkKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBJbmRleCBPbmx5IFNjYW4gdXNp bmcgc2pfdDJfaWRfaWR4IG9uIHNqX3QyIHNqX3QyXzEKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgIEluZGV4IENvbmQ6IChpZCA9IHNqX3QzLmlkKQorICAgICAgICAgICAgICAgLT4g IE5lc3RlZCBMb29wCisgICAgICAgICAgICAgICAgICAgICAtPiAgSW5kZXggT25seSBTY2Fu IHVzaW5nIHNqX3QzX2FfaWRfaWR4IG9uIHNqX3QzIHNqX3QzXzEKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgIEluZGV4IENvbmQ6ICgoYSA9IDEpIEFORCAoaWQgPSBzal90My5pZCkp CisgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gc2pfdDQgc2pfdDRfMQor ICAgICAgICAgLT4gIEluZGV4IE9ubHkgU2NhbiB1c2luZyBzal90Ml9pZF9pZHggb24gc2pf dDIKKyAgICAgICAgICAgICAgIEluZGV4IENvbmQ6IChpZCA9IHNqX3QyXzEuaWQpCisgICAt PiAgU2VxIFNjYW4gb24gc2pfdDEKKygyNCByb3dzKQorCistLQorLS0gVGVzdCBSb3dNYXJr cy1yZWxhdGVkIGNvZGUKKy0tCistLSBCb3RoIHNpZGVzIGhhdmUgZXhwbGljaXQgTG9ja1Jv d3MgbWFya3MKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCBhMS5hIEZST00gc2ogYTEs c2ogYTIgV0hFUkUgKGExLmE9YTIuYSkgRk9SIFVQREFURTsKKyAgICAgICAgICAgUVVFUlkg UExBTiAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg TG9ja1Jvd3MKKyAgIC0+ICBTZXEgU2NhbiBvbiBzaiBhMgorICAgICAgICAgRmlsdGVyOiAo YSBJUyBOT1QgTlVMTCkKKygzIHJvd3MpCisKK3Jlc2V0IGVuYWJsZV9oYXNoam9pbjsKK3Jl c2V0IGVuYWJsZV9tZXJnZWpvaW47CiAtLQogLS0gVGVzdCBoaW50cyBnaXZlbiBvbiBpbmNv cnJlY3QgY29sdW1uIHJlZmVyZW5jZXMgYXJlIHVzZWZ1bAogLS0KZGlmZiAtLWdpdCBhL3Ny Yy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3lzdmlld3Mub3V0IGIvc3JjL3Rlc3QvcmVncmVz cy9leHBlY3RlZC9zeXN2aWV3cy5vdXQKaW5kZXggZmFkN2ZjM2E3ZS4uN2ZjYzA3YzIwYyAx MDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zeXN2aWV3cy5vdXQKKysr IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zeXN2aWV3cy5vdXQKQEAgLTE2NywxMCAr MTY3LDExIEBAIHNlbGVjdCBuYW1lLCBzZXR0aW5nIGZyb20gcGdfc2V0dGluZ3Mgd2hlcmUg bmFtZSBsaWtlICdlbmFibGUlJzsKICBlbmFibGVfcGFydGl0aW9ud2lzZV9hZ2dyZWdhdGUg fCBvZmYKICBlbmFibGVfcGFydGl0aW9ud2lzZV9qb2luICAgICAgfCBvZmYKICBlbmFibGVf cHJlc29ydGVkX2FnZ3JlZ2F0ZSAgICAgfCBvbgorIGVuYWJsZV9zZWxmX2pvaW5fcmVtb3Zh bCAgICAgICB8IG9uCiAgZW5hYmxlX3NlcXNjYW4gICAgICAgICAgICAgICAgIHwgb24KICBl bmFibGVfc29ydCAgICAgICAgICAgICAgICAgICAgfCBvbgogIGVuYWJsZV90aWRzY2FuICAg ICAgICAgICAgICAgICB8IG9uCi0oMjIgcm93cykKKygyMyByb3dzKQogCiAtLSBUaGVyZSBh cmUgYWx3YXlzIHdhaXQgZXZlbnQgZGVzY3JpcHRpb25zIGZvciB2YXJpb3VzIHR5cGVzLiAg SW5qZWN0aW9uUG9pbnQKIC0tIG1heSBiZSBwcmVzZW50IG9yIGFic2VudCwgZGVwZW5kaW5n IG9uIGhpc3Rvcnkgc2luY2UgbGFzdCBwb3N0bWFzdGVyIHN0YXJ0LgpkaWZmIC0tZ2l0IGEv c3JjL3Rlc3QvcmVncmVzcy9zcWwvZXF1aXZjbGFzcy5zcWwgYi9zcmMvdGVzdC9yZWdyZXNz L3NxbC9lcXVpdmNsYXNzLnNxbAppbmRleCAyOGVkNzkxMGQwLi43ZmMyMTU5MzQ5IDEwMDY0 NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9lcXVpdmNsYXNzLnNxbAorKysgYi9zcmMv dGVzdC9yZWdyZXNzL3NxbC9lcXVpdmNsYXNzLnNxbApAQCAtMjU5LDYgKzI1OSwyMiBAQCBk cm9wIHVzZXIgcmVncmVzc191c2VyX2VjdGVzdDsKIGV4cGxhaW4gKGNvc3RzIG9mZikKICAg c2VsZWN0ICogZnJvbSB0ZW5rMSB3aGVyZSB1bmlxdWUxID0gdW5pcXVlMSBhbmQgdW5pcXVl MiA9IHVuaXF1ZTI7CiAKKy0tIFRlc3QgdGhhdCBicm9rZW4gRUNzIGFyZSBwcm9jZXNzZWQg Y29ycmVjdGx5IGR1cmluZyBzZWxmIGpvaW4gcmVtb3ZhbC4KKy0tIERpc2FibGUgbWVyZ2Ug am9pbnMgc28gdGhhdCB3ZSBkb24ndCBnZXQgYW4gZXJyb3IgYWJvdXQgbWlzc2luZyBjb21t dXRhdG9yLgorLS0gVGVzdCBib3RoIG9yaWVudGF0aW9ucyBvZiB0aGUgam9pbiBjbGF1c2Us IGJlY2F1c2Ugb25seSBvbmUgb2YgdGhlbSBicmVha3MKKy0tIHRoZSBFQy4KK3NldCBlbmFi bGVfbWVyZ2Vqb2luIHRvIG9mZjsKKworZXhwbGFpbiAoY29zdHMgb2ZmKQorICBzZWxlY3Qg KiBmcm9tIGVjMCBtIGpvaW4gZWMwIG4gb24gbS5mZiA9IG4uZmYKKyAgam9pbiBlYzEgcCBv biBtLmZmICsgbi5mZiA9IHAuZjE7CisKK2V4cGxhaW4gKGNvc3RzIG9mZikKKyAgc2VsZWN0 ICogZnJvbSBlYzAgbSBqb2luIGVjMCBuIG9uIG0uZmYgPSBuLmZmCisgIGpvaW4gZWMxIHAg b24gcC5mMTo6aW50OCA9IChtLmZmICsgbi5mZik6OmludDhhbGlhczE7CisKK3Jlc2V0IGVu YWJsZV9tZXJnZWpvaW47CisKIC0tIHRoaXMgY291bGQgYmUgY29udmVydGVkLCBidXQgaXNu J3QgYXQgcHJlc2VudAogZXhwbGFpbiAoY29zdHMgb2ZmKQogICBzZWxlY3QgKiBmcm9tIHRl bmsxIHdoZXJlIHVuaXF1ZTEgPSB1bmlxdWUxIG9yIHVuaXF1ZTIgPSB1bmlxdWUyOwpkaWZm IC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvam9pbi5zcWwgYi9zcmMvdGVzdC9yZWdy ZXNzL3NxbC9qb2luLnNxbAppbmRleCA0YzljM2U5ZjQ5Li42ODljNzYyYjRkIDEwMDY0NAot LS0gYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9qb2luLnNxbAorKysgYi9zcmMvdGVzdC9yZWdy ZXNzL3NxbC9qb2luLnNxbApAQCAtMjM3OSw2ICsyMzc5LDQ5NiBAQCBzZWxlY3QgKiBmcm9t CiBzZWxlY3QgKiBmcm9tCiAgIGludDhfdGJsIHggam9pbiAoaW50NF90YmwgeCBjcm9zcyBq b2luIGludDRfdGJsIHkoZmYpKSBqIG9uIHExID0gZjE7IC0tIG9rCiAKKy0tCistLSB0ZXN0 IHRoYXQgc2VtaS0gb3IgaW5uZXIgc2VsZi1qb2lucyBvbiBhIHVuaXF1ZSBjb2x1bW4gYXJl IHJlbW92ZWQKKy0tCisKKy0tIGVuYWJsZSBvbmx5IG5lc3Rsb29wIHRvIGdldCBtb3JlIHBy ZWRpY3RhYmxlIHBsYW5zCitzZXQgZW5hYmxlX2hhc2hqb2luIHRvIG9mZjsKK3NldCBlbmFi bGVfbWVyZ2Vqb2luIHRvIG9mZjsKKworY3JlYXRlIHRhYmxlIHNqIChhIGludCB1bmlxdWUs IGIgaW50LCBjIGludCB1bmlxdWUpOworaW5zZXJ0IGludG8gc2ogdmFsdWVzICgxLCBudWxs LCAyKSwgKG51bGwsIDIsIG51bGwpLCAoMiwgMSwgMSk7CithbmFseXplIHNqOworCistLSBU cml2aWFsIHNlbGYtam9pbiBjYXNlLgorZXhwbGFpbiAoY29zdHMgb2ZmKQorc2VsZWN0IHAu KiBmcm9tIHNqIHAsIHNqIHEgd2hlcmUgcS5hID0gcC5hIGFuZCBxLmIgPSBxLmEgLSAxOwor c2VsZWN0IHAuKiBmcm9tIHNqIHAsIHNqIHEgd2hlcmUgcS5hID0gcC5hIGFuZCBxLmIgPSBx LmEgLSAxOworCistLSBTZWxmLWpvaW4gcmVtb3ZhbCBwZXJmb3JtcyBhZnRlciBhIHN1YnF1 ZXJ5IHB1bGwtdXAgcHJvY2VzcyBhbmQgY291bGQgcmVtb3ZlCistLSBzdWNoIGtpbmQgb2Yg c2VsZi1qb2luIHRvby4gQ2hlY2sgdGhpcyBvcHRpb24uCitleHBsYWluIChjb3N0cyBvZmYp CitzZWxlY3QgKiBmcm9tIHNqIHAKK3doZXJlIGV4aXN0cyAoc2VsZWN0ICogZnJvbSBzaiBx CisgICAgICAgICAgICAgIHdoZXJlIHEuYSA9IHAuYSBhbmQgcS5iIDwgMTApOworc2VsZWN0 ICogZnJvbSBzaiBwCit3aGVyZSBleGlzdHMgKHNlbGVjdCAqIGZyb20gc2ogcQorICAgICAg ICAgICAgICB3aGVyZSBxLmEgPSBwLmEgYW5kIHEuYiA8IDEwKTsKKworLS0gRG9uJ3QgcmVt b3ZlIHNlbGYtam9pbiBmb3IgdGhlIGNhc2Ugb2YgZXF1YWxpdHkgb2YgdHdvIGRpZmZlcmVu dCB1bmlxdWUgY29sdW1ucy4KK2V4cGxhaW4gKGNvc3RzIG9mZikKK3NlbGVjdCAqIGZyb20g c2ogdDEsIHNqIHQyIHdoZXJlIHQxLmEgPSB0Mi5jIGFuZCB0MS5iIGlzIG5vdCBudWxsOwor CistLSBFbnN1cmUgdGhhdCByZWxhdGlvbnMgd2l0aCBUQUJMRVNBTVBMRSBjbGF1c2VzIGFy ZSBub3QgY29uc2lkZXJlZCBhcworLS0gY2FuZGlkYXRlcyB0byBiZSByZW1vdmVkCitleHBs YWluIChjb3N0cyBvZmYpCitzZWxlY3QgKiBmcm9tIHNqIHQxCisgICAgam9pbiBsYXRlcmFs CisgICAgICAoc2VsZWN0ICogZnJvbSBzaiB0YWJsZXNhbXBsZSBzeXN0ZW0odDEuYikpIHMK KyAgICBvbiB0MS5hID0gcy5hOworCistLSBFbnN1cmUgdGhhdCBTSkUgZG9lcyBub3QgZm9y bSBhIHNlbGYtcmVmZXJlbnRpYWwgbGF0ZXJhbCBkZXBlbmRlbmN5CitleHBsYWluIChjb3N0 cyBvZmYpCitzZWxlY3QgKiBmcm9tIHNqIHQxCisgICAgbGVmdCBqb2luIGxhdGVyYWwKKyAg ICAgIChzZWxlY3QgdDEuYSBhcyB0MWEsICogZnJvbSBzaiB0MikgcworICAgIG9uIHRydWUK K3doZXJlIHQxLmEgPSBzLmE7CisKKy0tIERlZ2VuZXJhdGVkIGNhc2UuCitleHBsYWluIChj b3N0cyBvZmYpCitzZWxlY3QgKiBmcm9tCisgIChzZWxlY3QgYSBhcyB4IGZyb20gc2ogd2hl cmUgZmFsc2UpIGFzIHExLAorICAoc2VsZWN0IGEgYXMgeSBmcm9tIHNqIHdoZXJlIGZhbHNl KSBhcyBxMgord2hlcmUgcTEueCA9IHEyLnk7CisKKy0tIFdlIGNhbid0IHVzZSBhIGNyb3Nz LUVDIGdlbmVyYXRlZCBzZWxmIGpvaW4gcXVhbCBiZWNhdXNlIG9mIGN1cnJlbnQgbG9naWMg b2YKKy0tIHRoZSBnZW5lcmF0ZV9qb2luX2ltcGxpZWRfZXF1YWxpdGllcyByb3V0aW5lLgor ZXhwbGFpbiAoY29zdHMgb2ZmKQorc2VsZWN0ICogZnJvbSBzaiB0MSwgc2ogdDIgd2hlcmUg dDEuYSA9IHQxLmIgYW5kIHQxLmIgPSB0Mi5iIGFuZCB0Mi5iID0gdDIuYTsKK2V4cGxhaW4g KGNvc3RzIG9mZikKK3NlbGVjdCAqIGZyb20gc2ogdDEsIHNqIHQyLCBzaiB0Mword2hlcmUg dDEuYSA9IHQxLmIgYW5kIHQxLmIgPSB0Mi5iIGFuZCB0Mi5iID0gdDIuYSBhbmQKKyAgICAg IHQxLmIgPSB0My5iIGFuZCB0My5iID0gdDMuYTsKKworLS0gRG91YmxlIHNlbGYtam9pbiBy ZW1vdmFsLgorLS0gVXNlIGEgY29uZGl0aW9uIG9uICJiICsgMSIsIG5vdCBvbiAiYiIsIGZv ciB0aGUgc2Vjb25kIGpvaW4sIHNvIHRoYXQKKy0tIHRoZSBlcXVpdmFsZW5jZSBjbGFzcyBp cyBkaWZmZXJlbnQgZnJvbSB0aGUgZmlyc3Qgb25lLCBhbmQgd2UgY2FuCistLSB0ZXN0IHRo ZSBub24tZWMgY29kZSBwYXRoLgorZXhwbGFpbiAoY29zdHMgb2ZmKQorc2VsZWN0ICoKK2Zy b20gIHNqIHQxCisgICAgICBqb2luIHNqIHQyIG9uIHQxLmEgPSB0Mi5hIGFuZCB0MS5iID0g dDIuYgorCSAgam9pbiBzaiB0MyBvbiB0Mi5hID0gdDMuYSBhbmQgdDIuYiArIDEgPSB0My5i ICsgMTsKKworLS0gc3Vic2VsZWN0IHRoYXQgcmVmZXJlbmNlcyB0aGUgcmVtb3ZlZCByZWxh dGlvbgorZXhwbGFpbiAoY29zdHMgb2ZmKQorc2VsZWN0IHQxLmEsIChzZWxlY3QgYSBmcm9t IHNqIHdoZXJlIGEgPSB0Mi5hIGFuZCBhID0gdDEuYSkKK2Zyb20gc2ogdDEsIHNqIHQyCit3 aGVyZSB0MS5hID0gdDIuYTsKKworLS0gc2VsZi1qb2luIHVuZGVyIG91dGVyIGpvaW4KK2V4 cGxhaW4gKGNvc3RzIG9mZikKK3NlbGVjdCAqIGZyb20gc2ogeCBqb2luIHNqIHkgb24geC5h ID0geS5hCitsZWZ0IGpvaW4gaW50OF90YmwgeiBvbiB4LmEgPSB6LnExOworCitleHBsYWlu IChjb3N0cyBvZmYpCitzZWxlY3QgKiBmcm9tIHNqIHggam9pbiBzaiB5IG9uIHguYSA9IHku YQorbGVmdCBqb2luIGludDhfdGJsIHogb24geS5hID0gei5xMTsKKworZXhwbGFpbiAoY29z dHMgb2ZmKQorc2VsZWN0ICogZnJvbSAoCisgIHNlbGVjdCB0MS4qLCB0Mi5hIGFzIGF4IGZy b20gc2ogdDEgam9pbiBzaiB0MgorICBvbiAodDEuYSA9IHQyLmEgYW5kIHQxLmMgKiB0MS5j ID0gdDIuYyArIDIgYW5kIHQyLmIgaXMgbnVsbCkKKykgYXMgcTEKK2xlZnQgam9pbgorICAo c2VsZWN0IHQzLiogZnJvbSBzaiB0Mywgc2ogdDQgd2hlcmUgdDMuYyA9IHQ0LmMpIGFzIHEy CitvbiBxMS5heCA9IHEyLmE7CisKKy0tIFRlc3QgdGhhdCBwbGFjZWhvbGRlcnMgYXJlIHVw ZGF0ZWQgY29ycmVjdGx5IGFmdGVyIGpvaW4gcmVtb3ZhbAorZXhwbGFpbiAoY29zdHMgb2Zm KQorc2VsZWN0ICogZnJvbSAodmFsdWVzICgxKSkgeAorbGVmdCBqb2luIChzZWxlY3QgY29h bGVzY2UoeS5xMSwgMSkgZnJvbSBpbnQ4X3RibCB5CisJcmlnaHQgam9pbiBzaiBqMSBpbm5l ciBqb2luIHNqIGoyIG9uIGoxLmEgPSBqMi5hCisJb24gdHJ1ZSkgegorb24gdHJ1ZTsKKwor LS0gVGVzdCB0aGF0IHJlZmVyZW5jZXMgdG8gdGhlIHJlbW92ZWQgcmVsIGluIGxhdGVyYWwg c3VicXVlcmllcyBhcmUgcmVwbGFjZWQKKy0tIGNvcnJlY3RseSBhZnRlciBqb2luIHJlbW92 YWwKK2V4cGxhaW4gKHZlcmJvc2UsIGNvc3RzIG9mZikKK3NlbGVjdCB0My5hIGZyb20gc2og dDEKKwlqb2luIHNqIHQyIG9uIHQxLmEgPSB0Mi5hCisJam9pbiBsYXRlcmFsIChzZWxlY3Qg dDEuYSBvZmZzZXQgMCkgdDMgb24gdHJ1ZTsKKworZXhwbGFpbiAodmVyYm9zZSwgY29zdHMg b2ZmKQorc2VsZWN0IHQzLmEgZnJvbSBzaiB0MQorCWpvaW4gc2ogdDIgb24gdDEuYSA9IHQy LmEKKwlqb2luIGxhdGVyYWwgKHNlbGVjdCAqIGZyb20gKHNlbGVjdCB0MS5hIG9mZnNldCAw KSBvZmZzZXQgMCkgdDMgb24gdHJ1ZTsKKworZXhwbGFpbiAodmVyYm9zZSwgY29zdHMgb2Zm KQorc2VsZWN0IHQ0LmEgZnJvbSBzaiB0MQorCWpvaW4gc2ogdDIgb24gdDEuYSA9IHQyLmEK Kwlqb2luIGxhdGVyYWwgKHNlbGVjdCB0My5hIGZyb20gc2ogdDMsIChzZWxlY3QgdDEuYSkg b2Zmc2V0IDApIHQ0IG9uIHRydWU7CisKKy0tIENoZWNrIHVwZGF0aW5nIG9mIExhdGVyYWwg bGlua3MgZnJvbSB0b3AtbGV2ZWwgcXVlcnkgdG8gdGhlIHJlbW92aW5nIHJlbGF0aW9uCitl eHBsYWluIChDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIHBnX2FtIGFtIFdIRVJFIGFtLmFt bmFtZSBJTiAoCisgIFNFTEVDVCBjMS5yZWxuYW1lIEFTIHJlbG5hbWUKKyAgRlJPTSBwZ19j bGFzcyBjMQorICAgIEpPSU4gcGdfY2xhc3MgYzIKKyAgICBPTiBjMS5vaWQ9YzIub2lkIEFO RCBjMS5vaWQgPCAxMAorKTsKKworLS0KKy0tIFNKRSBjb3JuZXIgY2FzZTogdW5pcXVlbmVz cyBvZiBhbiBpbm5lciBpcyBkZXJpdmVkIGZyb20KKy0tIGJhc2VyZXN0cmljdGluZm8gY2xh dXNlcy4KKy0tCisKK0lOU0VSVCBJTlRPIHNqIFZBTFVFUyAoMywgMSwgMyk7CisKKy0tIFR3 byBhcHByb2FjaGVzIHRvIHdyaXRlIGEgam9pbi4gSW4gYm90aCBjYXNlcyBpdCBpcyBzZWwt am9pbiB3aGljaCBhZGRyZXNzZXMKKy0tIHRoZSBzYW1lIHBoeXNpY2FsIHR1cGxlIGFuZCBj YW4gYmUgcmVtb3ZlZCBmcm9tIHRoZSBqb2luIHNlYXJjaCBzcGFjZS4KK0VYUExBSU4gKENP U1RTIE9GRikgU0VMRUNUICogRlJPTSBzaiBqMSwgc2ogajIgV0hFUkUgajEuYSA9IDMgQU5E IGoyLmEgPSAzOworRVhQTEFJTiAoQ09TVFMgT0ZGKSBTRUxFQ1QgKiBGUk9NIHNqIGoxIEpP SU4gc2ogajIgT04gKGoxLmEgPSAzIEFORCBqMi5hID0gMyk7CisKKy0tIERvbid0IHJlbW92 ZSBTSgorRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBzaiBqMSwgc2ogajIg V0hFUkUgajEuYiA9IGoyLmIgQU5EIGoxLmEgPSAyIEFORCBqMi5hID0gMzsKKy0tIFJldHVy biBvbmUgcm93CitTRUxFQ1QgKiBGUk9NIHNqIGoxLCBzaiBqMiBXSEVSRSBqMS5iID0gajIu YiBBTkQgajEuYSA9IDIgQU5EIGoyLmEgPSAzOworCistLSBSZW1vdmUgU0osIGRlZmluZSB1 bmlxdWVuZXNzIGJ5IGEgY29uc3RhbnQKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAq IEZST00gc2ogajEsIHNqIGoyIFdIRVJFIGoxLmIgPSBqMi5iIEFORCBqMS5hID0gMiBBTkQg ajIuYSA9IDI7CistLSBSZXR1cm4gb25lIHJvdworU0VMRUNUICogRlJPTSBzaiBqMSwgc2og ajIgV0hFUkUgajEuYiA9IGoyLmIgQU5EIGoxLmEgPSAyIEFORCBqMi5hID0gMjsKKworLS0g UmVtb3ZlIFNKLCBkZWZpbmUgdW5pcXVlbmVzcyBieSBhIGNvbnN0YW50IGV4cHJlc3Npb24K K0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gc2ogajEsIHNqIGoyCitXSEVS RSBqMS5iID0gajIuYgorICBBTkQgajEuYSA9IChFWFRSQUNUKERPVyBGUk9NIGN1cnJlbnRf dGltZXN0YW1wKDApKS8xNSArIDMpOjppbnQKKyAgQU5EIChFWFRSQUNUKERPVyBGUk9NIGN1 cnJlbnRfdGltZXN0YW1wKDApKS8xNSArIDMpOjppbnQgPSBqMi5hOworLS0gUmV0dXJuIG9u ZSByb3cKK1NFTEVDVCAqIEZST00gc2ogajEsIHNqIGoyCitXSEVSRSBqMS5iID0gajIuYgor ICBBTkQgajEuYSA9IChFWFRSQUNUKERPVyBGUk9NIGN1cnJlbnRfdGltZXN0YW1wKDApKS8x NSArIDMpOjppbnQKKyAgQU5EIChFWFRSQUNUKERPVyBGUk9NIGN1cnJlbnRfdGltZXN0YW1w KDApKS8xNSArIDMpOjppbnQgPSBqMi5hOworCistLSBSZW1vdmUgU0oKK0VYUExBSU4gKENP U1RTIE9GRikKK1NFTEVDVCAqIEZST00gc2ogajEsIHNqIGoyIFdIRVJFIGoxLmIgPSBqMi5i IEFORCBqMS5hID0gMSBBTkQgajIuYSA9IDE7CistLSBSZXR1cm4gbm8gcm93cworU0VMRUNU ICogRlJPTSBzaiBqMSwgc2ogajIgV0hFUkUgajEuYiA9IGoyLmIgQU5EIGoxLmEgPSAxIEFO RCBqMi5hID0gMTsKKworLS0gU2h1ZmZsZSBhIGNsYXVzZS4gUmVtb3ZlIFNKCitFWFBMQUlO IChDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIHNqIGoxLCBzaiBqMiBXSEVSRSBqMS5iID0g ajIuYiBBTkQgMSA9IGoxLmEgQU5EIGoyLmEgPSAxOworLS0gUmV0dXJuIG5vIHJvd3MKK1NF TEVDVCAqIEZST00gc2ogajEsIHNqIGoyIFdIRVJFIGoxLmIgPSBqMi5iIEFORCAxID0gajEu YSBBTkQgajIuYSA9IDE7CisKKy0tIFNKRSBDb3JuZXIgY2FzZTogYSAnYS54PWEueCcgY2xh dXNlLCBoYXZlIHJlcGxhY2VkIHdpdGggJ2EueCBJUyBOT1QgTlVMTCcKKy0tIGFmdGVyIFNK IGVsaW1pbmF0aW9uIGl0IHNob3VsZG4ndCBiZSBhIG1lcmdlam9pbmFibGUgY2xhdXNlLgor RVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUIHQ0LioKK0ZST00gKFNFTEVDVCB0MS4qLCB0 Mi5hIEFTIGExIEZST00gc2ogdDEsIHNqIHQyIFdIRVJFIHQxLmIgPSB0Mi5iKSBBUyB0Mwor Sk9JTiBzaiB0NCBPTiAodDQuYSA9IHQzLmEpIFdIRVJFIHQzLmExID0gNDI7CitTRUxFQ1Qg dDQuKgorRlJPTSAoU0VMRUNUIHQxLiosIHQyLmEgQVMgYTEgRlJPTSBzaiB0MSwgc2ogdDIg V0hFUkUgdDEuYiA9IHQyLmIpIEFTIHQzCitKT0lOIHNqIHQ0IE9OICh0NC5hID0gdDMuYSkg V0hFUkUgdDMuYTEgPSA0MjsKKworLS0gRnVuY3Rpb25hbCBpbmRleAorQ1JFQVRFIFVOSVFV RSBJTkRFWCBzal9mbl9pZHggT04gc2ooKGEgKiBhKSk7CisKKy0tIFJlbW92ZSBTSgorRVhQ TEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBzaiBqMSwgc2ogajIKKwlXSEVSRSBq MS5iID0gajIuYiBBTkQgajEuYSpqMS5hID0gMSBBTkQgajIuYSpqMi5hID0gMTsKKy0tIERv bid0IHJlbW92ZSBTSgorRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBzaiBq MSwgc2ogajIKKwlXSEVSRSBqMS5iID0gajIuYiBBTkQgajEuYSpqMS5hID0gMSBBTkQgajIu YSpqMi5hID0gMjsKKworLS0gUmVzdHJpY3Rpb24gY29udGFpbnMgZXhwcmVzc2lvbnMgaW4g Ym90aCBzaWRlcywgUmVtb3ZlIFNKLgorRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUICog RlJPTSBzaiBqMSwgc2ogajIKK1dIRVJFIGoxLmIgPSBqMi5iCisgIEFORCAoajEuYSpqMS5h KSA9IChFWFRSQUNUKERPVyBGUk9NIGN1cnJlbnRfdGltZXN0YW1wKDApKS8xNSArIDMpOjpp bnQKKyAgQU5EIChFWFRSQUNUKERPVyBGUk9NIGN1cnJlbnRfdGltZXN0YW1wKDApKS8xNSAr IDMpOjppbnQgPSAoajIuYSpqMi5hKTsKKy0tIEVtcHR5IHNldCBvZiByb3dzIHNob3VsZCBi ZSByZXR1cm5lZAorU0VMRUNUICogRlJPTSBzaiBqMSwgc2ogajIKK1dIRVJFIGoxLmIgPSBq Mi5iCisgIEFORCAoajEuYSpqMS5hKSA9IChFWFRSQUNUKERPVyBGUk9NIGN1cnJlbnRfdGlt ZXN0YW1wKDApKS8xNSArIDMpOjppbnQKKyAgQU5EIChFWFRSQUNUKERPVyBGUk9NIGN1cnJl bnRfdGltZXN0YW1wKDApKS8xNSArIDMpOjppbnQgPSAoajIuYSpqMi5hKTsKKworLS0gUmVz dHJpY3Rpb24gY29udGFpbnMgdm9sYXRpbGUgZnVuY3Rpb24gLSBkaXNhYmxlIFNKRSBmZWF0 dXJlLgorRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBzaiBqMSwgc2ogajIK K1dIRVJFIGoxLmIgPSBqMi5iCisgIEFORCAoajEuYSpqMS5jLzMpID0gKHJhbmRvbSgpLzMg KyAzKTo6aW50CisgIEFORCAocmFuZG9tKCkvMyArIDMpOjppbnQgPSAoajIuYSpqMi5jLzMp OworLS0gUmV0dXJuIG9uZSByb3cKK1NFTEVDVCAqIEZST00gc2ogajEsIHNqIGoyCitXSEVS RSBqMS5iID0gajIuYgorICBBTkQgKGoxLmEqajEuYy8zKSA9IChyYW5kb20oKS8zICsgMyk6 OmludAorICBBTkQgKHJhbmRvbSgpLzMgKyAzKTo6aW50ID0gKGoyLmEqajIuYy8zKTsKKwor LS0gTXVsdGlwbGUgZmlsdGVycworQ1JFQVRFIFVOSVFVRSBJTkRFWCBzal90ZW1wX2lkeDEg T04gc2ooYSxiLGMpOworCistLSBSZW1vdmUgU0oKK0VYUExBSU4gKENPU1RTIE9GRikKK1NF TEVDVCAqIEZST00gc2ogajEsIHNqIGoyCisJV0hFUkUgajEuYiA9IGoyLmIgQU5EIGoxLmEg PSAyIEFORCBqMS5jID0gMyBBTkQgajIuYSA9IDIgQU5EIDMgPSBqMi5jOworCistLSBEb24n dCByZW1vdmUgU0oKK0VYUExBSU4gKENPU1RTIE9GRikKKwlTRUxFQ1QgKiBGUk9NIHNqIGox LCBzaiBqMgorCVdIRVJFIGoxLmIgPSBqMi5iIEFORCAyID0gajEuYSBBTkQgajEuYyA9IDMg QU5EIGoyLmEgPSAxIEFORCAzID0gajIuYzsKKworQ1JFQVRFIFVOSVFVRSBJTkRFWCBzal90 ZW1wX2lkeCBPTiBzaihhLGIpOworCistLSBEb24ndCByZW1vdmUgU0oKK0VYUExBSU4gKENP U1RTIE9GRikKK1NFTEVDVCAqIEZST00gc2ogajEsIHNqIGoyIFdIRVJFIGoxLmIgPSBqMi5i IEFORCBqMS5hID0gMjsKKworLS0gRG9uJ3QgcmVtb3ZlIFNKCitFWFBMQUlOIChDT1NUUyBP RkYpCitTRUxFQ1QgKiBGUk9NIHNqIGoxLCBzaiBqMiBXSEVSRSBqMS5iID0gajIuYiBBTkQg MiA9IGoyLmE7CisKKy0tIERvbid0IHJlbW92ZSBTSgorRVhQTEFJTiAoQ09TVFMgT0ZGKQor U0VMRUNUICogRlJPTSBzaiBqMSwgc2ogajIgV0hFUkUgajEuYiA9IGoyLmIgQU5EIChqMS5h ID0gMSBPUiBqMi5hID0gMSk7CisKK0RST1AgSU5ERVggc2pfZm5faWR4LCBzal90ZW1wX2lk eDEsIHNqX3RlbXBfaWR4OworCistLSBUZXN0IHRoYXQgT1IgcHJlZGljYXRlZCBhcmUgdXBk YXRlZCBjb3JyZWN0bHkgYWZ0ZXIgam9pbiByZW1vdmFsCitDUkVBVEUgVEFCTEUgdGFiX3dp dGhfZmxhZyAoIGlkIElOVCBQUklNQVJZIEtFWSwgaXNfZmxhZyBTTUFMTElOVCk7CitDUkVB VEUgSU5ERVggaWR4X3Rlc3RfaXNfZmxhZyBPTiB0YWJfd2l0aF9mbGFnIChpc19mbGFnKTsK KworRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUIENPVU5UKCopIEZST00gdGFiX3dpdGhf ZmxhZworV0hFUkUKKwkoaXNfZmxhZyBJUyBOVUxMIE9SIGlzX2ZsYWcgPSAwKQorCUFORCBp ZCBJTiAoU0VMRUNUIGlkIEZST00gdGFiX3dpdGhfZmxhZyBXSEVSRSBpZCBJTiAoMiwgMykp OworRFJPUCBUQUJMRSB0YWJfd2l0aF9mbGFnOworCistLSBIQVZJTkcgY2xhdXNlCitleHBs YWluIChjb3N0cyBvZmYpCitzZWxlY3QgcC5iIGZyb20gc2ogcCBqb2luIHNqIHEgb24gcC5h ID0gcS5hIGdyb3VwIGJ5IHAuYiBoYXZpbmcgc3VtKHAuYSkgPSAxOworCistLSB1cGRhdGUg bGF0ZXJhbCByZWZlcmVuY2VzIGFuZCByYW5nZSB0YWJsZSBlbnRyeSByZWZlcmVuY2UKK2V4 cGxhaW4gKHZlcmJvc2UsIGNvc3RzIG9mZikKK3NlbGVjdCAxIGZyb20gKHNlbGVjdCB4Liog ZnJvbSBzaiB4LCBzaiB5IHdoZXJlIHguYSA9IHkuYSkgcSwKKyAgbGF0ZXJhbCBnZW5lcmF0 ZV9zZXJpZXMoMSwgcS5hKSBncyhpKTsKKworZXhwbGFpbiAodmVyYm9zZSwgY29zdHMgb2Zm KQorc2VsZWN0IDEgZnJvbSAoc2VsZWN0IHkuKiBmcm9tIHNqIHgsIHNqIHkgd2hlcmUgeC5h ID0geS5hKSBxLAorICBsYXRlcmFsIGdlbmVyYXRlX3NlcmllcygxLCBxLmEpIGdzKGkpOwor CistLSBUZXN0IHRoYXQgYSBub24tRUMtZGVyaXZlZCBqb2luIGNsYXVzZSBpcyBwcm9jZXNz ZWQgY29ycmVjdGx5LiBVc2UgYW4KKy0tIG91dGVyIGpvaW4gc28gdGhhdCB3ZSBjYW4ndCBm b3JtIGFuIEVDLgorZXhwbGFpbiAoY29zdHMgb2ZmKSBzZWxlY3QgKiBmcm9tIHNqIHAgam9p biBzaiBxIG9uIHAuYSA9IHEuYQorICBsZWZ0IGpvaW4gc2ogciBvbiBwLmEgKyBxLmEgPSBy LmE7CisKKy0tIEZJWE1FIHRoaXMgY29uc3RhbnQgZmFsc2UgZmlsdGVyIGRvZXNuJ3QgbG9v ayBnb29kLiBTaG91bGQgd2UgbWVyZ2UKKy0tIGVxdWl2YWxlbmNlIGNsYXNzZXM/CitleHBs YWluIChjb3N0cyBvZmYpCitzZWxlY3QgKiBmcm9tIHNqIHAsIHNqIHEgd2hlcmUgcC5hID0g cS5hIGFuZCBwLmIgPSAxIGFuZCBxLmIgPSAyOworCistLSBDaGVjayB0aGF0IGF0dHJfbmVl ZGVkIGlzIHVwZGF0ZWQgY29ycmVjdGx5IGFmdGVyIHNlbGYtam9pbiByZW1vdmFsLiBJbiB0 aGlzCistLSB0ZXN0LCB0aGUgam9pbiBvZiBqMSB3aXRoIGoyIGlzIHJlbW92ZWQuIGsxLmIg aXMgcmVxdWlyZWQgYXQgZWl0aGVyIGoxIG9yIGoyLgorLS0gSWYgdGhpcyBpbmZvIGlzIGxv c3QsIGpvaW4gdGFyZ2V0bGlzdCBmb3IgKGsxLCBrMikgd2lsbCBub3QgY29udGFpbiBrMS5i LgorLS0gVXNlIGluZGV4IHNjYW4gZm9yIGsxIHNvIHRoYXQgd2UgZG9uJ3QgZ2V0ICdiJyBm cm9tIHBoeXNpY2FsIHRsaXN0IHVzZWQgZm9yCistLSBzZXFzY2FuLiBBbHNvIGRpc2FibGUg cmVvcmRlcmluZyBvZiBqb2lucyBiZWNhdXNlIHRoaXMgdGVzdCBkZXBlbmRzIG9uIGEKKy0t IHBhcnRpY3VsYXIgam9pbiB0cmVlLgorY3JlYXRlIHRhYmxlIHNrIChhIGludCwgYiBpbnQp OworY3JlYXRlIGluZGV4IG9uIHNrKGEpOworc2V0IGpvaW5fY29sbGFwc2VfbGltaXQgdG8g MTsKK3NldCBlbmFibGVfc2Vxc2NhbiB0byBvZmY7CitleHBsYWluIChjb3N0cyBvZmYpIHNl bGVjdCAxIGZyb20KKwkoc2sgazEgam9pbiBzayBrMiBvbiBrMS5hID0gazIuYSkKKwlqb2lu IChzaiBqMSBqb2luIHNqIGoyIG9uIGoxLmEgPSBqMi5hKSBvbiBqMS5iID0gazEuYjsKK2V4 cGxhaW4gKGNvc3RzIG9mZikgc2VsZWN0IDEgZnJvbQorCShzayBrMSBqb2luIHNrIGsyIG9u IGsxLmEgPSBrMi5hKQorCWpvaW4gKHNqIGoxIGpvaW4gc2ogajIgb24gajEuYSA9IGoyLmEp IG9uIGoyLmIgPSBrMS5iOworcmVzZXQgam9pbl9jb2xsYXBzZV9saW1pdDsKK3Jlc2V0IGVu YWJsZV9zZXFzY2FuOworCistLSBDaGVjayB0aGF0IGNsYXVzZXMgZnJvbSB0aGUgam9pbiBm aWx0ZXIgbGlzdCBpcyBub3QgbG9zdCBvbiB0aGUgc2VsZi1qb2luIHJlbW92YWwKK0NSRUFU RSBUQUJMRSBlbXAxIChpZCBTRVJJQUwgUFJJTUFSWSBLRVkgTk9UIE5VTEwsIGNvZGUgaW50 KTsKK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gZW1wMSBl MSwgZW1wMSBlMiBXSEVSRSBlMS5pZCA9IGUyLmlkIEFORCBlMi5jb2RlIDw+IGUxLmNvZGU7 CisKKy0tIFNodWZmbGUgc2VsZi1qb2luZWQgcmVsYXRpb25zLiBPbmx5IGluIHRoZSBjYXNl IG9mIGl0ZXJhdGl2ZSBkZWxldGlvbgorLS0gYXR0ZW1wdHMgZXhwbGFpbnMgb2YgdGhlc2Ug cXVlcmllcyB3aWxsIGJlIGlkZW50aWNhbC4KK0NSRUFURSBVTklRVUUgSU5ERVggT04gZW1w MSgoaWQqaWQpKTsKKworRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUIGNvdW50KCopIEZS T00gZW1wMSBjMSwgZW1wMSBjMiwgZW1wMSBjMworV0hFUkUgYzEuaWQ9YzIuaWQgQU5EIGMx LmlkKmMyLmlkPWMzLmlkKmMzLmlkOworCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1Qg Y291bnQoKikgRlJPTSBlbXAxIGMxLCBlbXAxIGMyLCBlbXAxIGMzCitXSEVSRSBjMS5pZD1j My5pZCBBTkQgYzEuaWQqYzMuaWQ9YzIuaWQqYzIuaWQ7CisKK0VYUExBSU4gKENPU1RTIE9G RikKK1NFTEVDVCBjb3VudCgqKSBGUk9NIGVtcDEgYzEsIGVtcDEgYzIsIGVtcDEgYzMKK1dI RVJFIGMzLmlkPWMyLmlkIEFORCBjMy5pZCpjMi5pZD1jMS5pZCpjMS5pZDsKKworLS0gQ2hl Y2sgdGhlIHVzYWdlIG9mIGEgcGFyc2UgdHJlZSBieSB0aGUgc2V0IG9wZXJhdGlvbnMgKGJ1 ZyAjMTgxNzApCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgYzEuY29kZSBGUk9NIGVt cDEgYzEgTEVGVCBKT0lOIGVtcDEgYzIgT04gYzEuaWQgPSBjMi5pZAorV0hFUkUgYzIuaWQg SVMgTk9UIE5VTEwKK0VYQ0VQVCBBTEwKK1NFTEVDVCBjMy5jb2RlIEZST00gZW1wMSBjMzsK KworLS0gQ2hlY2sgdGhhdCBTSkUgcmVtb3ZlcyByZWZlcmVuY2VzIGZyb20gUEhWcyBjb3Jy ZWN0bHkKK2V4cGxhaW4gKGNvc3RzIG9mZikKK3NlbGVjdCAqIGZyb20gZW1wMSB0MSBsZWZ0 IGpvaW4KKyAgICAoc2VsZWN0IGNvYWxlc2NlKHQzLmNvZGUsIDEpIGZyb20gZW1wMSB0Mgor ICAgICAgICBsZWZ0IGpvaW4gKGVtcDEgdDMgam9pbiBlbXAxIHQ0IG9uIHQzLmlkID0gdDQu aWQpCisgICAgICAgIG9uIHRydWUpCitvbiB0cnVlOworCistLSBDaGVjayB0aGF0IFNKRSBy ZW1vdmVzIHRoZSB3aG9sZSBQSFZzIGNvcnJlY3RseQorZXhwbGFpbiAodmVyYm9zZSwgY29z dHMgb2ZmKQorc2VsZWN0IDEgZnJvbSBlbXAxIHQxIGxlZnQgam9pbgorICAgICgoc2VsZWN0 IDEgYXMgeCwgKiBmcm9tIGVtcDEgdDIpIHMxIGlubmVyIGpvaW4KKyAgICAgICAgKHNlbGVj dCAqIGZyb20gZW1wMSB0MykgczIgb24gczEuaWQgPSBzMi5pZCkKKyAgICBvbiB0cnVlCit3 aGVyZSBzMS54ID0gMTsKKworLS0gQ2hlY2sgdGhhdCBQSFZzIGRvIG5vdCBpbXBvc2UgYW55 IGNvbnN0cmFpbnRzIG9uIHJlbW92aW5nIHNlbGYgam9pbnMKK2V4cGxhaW4gKHZlcmJvc2Us IGNvc3RzIG9mZikKK3NlbGVjdCAqIGZyb20gZW1wMSB0MSBqb2luIGVtcDEgdDIgb24gdDEu aWQgPSB0Mi5pZCBsZWZ0IGpvaW4KKyAgICBsYXRlcmFsIChzZWxlY3QgdDEuaWQgYXMgdDFp ZCwgKiBmcm9tIGdlbmVyYXRlX3NlcmllcygxLDEpIHQzKSBzIG9uIHRydWU7CisKK2V4cGxh aW4gKHZlcmJvc2UsIGNvc3RzIG9mZikKK3NlbGVjdCAqIGZyb20gZ2VuZXJhdGVfc2VyaWVz KDEsMTApIHQxKGlkKSBsZWZ0IGpvaW4KKyAgICBsYXRlcmFsIChzZWxlY3QgdDEuaWQgYXMg dDFpZCwgdDIuaWQgZnJvbSBlbXAxIHQyIGpvaW4gZW1wMSB0MyBvbiB0Mi5pZCA9IHQzLmlk KQorb24gdHJ1ZTsKKworLS0gQ2hlY2sgdGhhdCBTSkUgcmVwbGFjZXMgam9pbiBjbGF1c2Vz IGludm9sdmluZyB0aGUgcmVtb3ZlZCByZWwgY29ycmVjdGx5CitleHBsYWluIChjb3N0cyBv ZmYpCitzZWxlY3QgKiBmcm9tIGVtcDEgdDEKKyAgIGlubmVyIGpvaW4gZW1wMSB0MiBvbiB0 MS5pZCA9IHQyLmlkCisgICAgbGVmdCBqb2luIGVtcDEgdDMgb24gdDEuaWQgPiAxIGFuZCB0 MS5pZCA8IDI7CisKKy0tIENoZWNrIHRoYXQgU0pFIGRvZXNuJ3QgcmVwbGFjZSB0aGUgdGFy Z2V0IHJlbGF0aW9uCitFWFBMQUlOIChDT1NUUyBPRkYpCitXSVRIIHQxIEFTIChTRUxFQ1Qg KiBGUk9NIGVtcDEpCitVUERBVEUgZW1wMSBTRVQgY29kZSA9IHQxLmNvZGUgKyAxIEZST00g dDEKK1dIRVJFIHQxLmlkID0gZW1wMS5pZCBSRVRVUk5JTkcgZW1wMS5pZCwgZW1wMS5jb2Rl LCB0MS5jb2RlOworCitJTlNFUlQgSU5UTyBlbXAxIFZBTFVFUyAoMSwgMSksICgyLCAxKTsK KworV0lUSCB0MSBBUyAoU0VMRUNUICogRlJPTSBlbXAxKQorVVBEQVRFIGVtcDEgU0VUIGNv ZGUgPSB0MS5jb2RlICsgMSBGUk9NIHQxCitXSEVSRSB0MS5pZCA9IGVtcDEuaWQgUkVUVVJO SU5HIGVtcDEuaWQsIGVtcDEuY29kZSwgdDEuY29kZTsKKworVFJVTkNBVEUgZW1wMTsKKwor RVhQTEFJTiAoQ09TVFMgT0ZGKQorVVBEQVRFIHNqIHNxIFNFVCBiID0gMSBGUk9NIHNqIGFz IHN6IFdIRVJFIHNxLmEgPSBzei5hOworCitDUkVBVEUgUlVMRSBzal9kZWxfcnVsZSBBUyBP TiBERUxFVEUgVE8gc2oKKyAgRE8gSU5TVEVBRAorICAgIFVQREFURSBzaiBTRVQgYSA9IDEg V0hFUkUgYSA9IG9sZC5hOworRVhQTEFJTiAoQ09TVFMgT0ZGKSBERUxFVEUgRlJPTSBzajsK K0RST1AgUlVMRSBzal9kZWxfcnVsZSBPTiBzaiBDQVNDQURFOworCistLSBDaGVjayB0aGF0 IFNKRSBkb2VzIG5vdCBtaXN0YWtlbmx5IG9taXQgcXVhbCBjbGF1c2VzIChidWcgIzE4MTg3 KQoraW5zZXJ0IGludG8gZW1wMSB2YWx1ZXMgKDEsIDEpOworZXhwbGFpbiAoY29zdHMgb2Zm KQorc2VsZWN0IDEgZnJvbSBlbXAxIGZ1bGwgam9pbgorICAgIChzZWxlY3QgKiBmcm9tIGVt cDEgdDEgam9pbgorICAgICAgICBlbXAxIHQyIGpvaW4gZW1wMSB0MyBvbiB0Mi5pZCA9IHQz LmlkCisgICAgICAgIG9uIHRydWUKKyAgICB3aGVyZSBmYWxzZSkgcyBvbiB0cnVlCit3aGVy ZSBmYWxzZTsKK3NlbGVjdCAxIGZyb20gZW1wMSBmdWxsIGpvaW4KKyAgICAoc2VsZWN0ICog ZnJvbSBlbXAxIHQxIGpvaW4KKyAgICAgICAgZW1wMSB0MiBqb2luIGVtcDEgdDMgb24gdDIu aWQgPSB0My5pZAorICAgICAgICBvbiB0cnVlCisgICAgd2hlcmUgZmFsc2UpIHMgb24gdHJ1 ZQord2hlcmUgZmFsc2U7CisKKy0tIENoZWNrIHRoYXQgU0pFIGRvZXMgbm90IG1pc3Rha2Vu bHkgcmUtdXNlIGtub3dsZWRnZSBvZiByZWxhdGlvbiB1bmlxdWVuZXNzCistLSBtYWRlIHdp dGggZGlmZmVyZW50IHNldCBvZiBxdWFscworaW5zZXJ0IGludG8gZW1wMSB2YWx1ZXMgKDIs IDEpOworZXhwbGFpbiAoY29zdHMgb2ZmKQorc2VsZWN0ICogZnJvbSBlbXAxIHQxIHdoZXJl IGV4aXN0cyAoc2VsZWN0ICogZnJvbSBlbXAxIHQyCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB3aGVyZSB0Mi5pZCA9IHQxLmNvZGUgYW5kIHQyLmNvZGUgPiAwKTsK K3NlbGVjdCAqIGZyb20gZW1wMSB0MSB3aGVyZSBleGlzdHMgKHNlbGVjdCAqIGZyb20gZW1w MSB0MgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgdDIuaWQg PSB0MS5jb2RlIGFuZCB0Mi5jb2RlID4gMCk7CisKKy0tIFdlIGNhbiByZW1vdmUgdGhlIGpv aW4gZXZlbiBpZiB3ZSBmaW5kIHRoZSBqb2luIGNhbid0IGR1cGxpY2F0ZSByb3dzIGFuZAor LS0gdGhlIGJhc2UgcXVhbHMgb2YgZWFjaCBzaWRlIGFyZSBkaWZmZXJlbnQuICBJbiB0aGUg Zm9sbG93aW5nIGNhc2Ugd2UgZW5kIHVwCistLSBtb3ZpbmcgcXVhbHMgb3ZlciB0byBzMSB0 byBtYWtlIGl0IHNvIGl0IGNhbid0IG1hdGNoIGFueSByb3dzLgorY3JlYXRlIHRhYmxlIHNs KGEgaW50LCBiIGludCwgYyBpbnQpOworY3JlYXRlIHVuaXF1ZSBpbmRleCBvbiBzbChhLCBi KTsKK3ZhY3V1bSBhbmFseXplIHNsOworCistLSBCb3RoIHNpZGVzIGFyZSB1bmlxdWUsIGJ1 dCBiYXNlIHF1YWxzIGFyZSBkaWZmZXJlbnQKK2V4cGxhaW4gKGNvc3RzIG9mZikKK3NlbGVj dCAqIGZyb20gc2wgdDEsIHNsIHQyIHdoZXJlIHQxLmEgPSB0Mi5hIGFuZCB0MS5iID0gMSBh bmQgdDIuYiA9IDI7CisKKy0tIENoZWNrIE51bGxUZXN0IGluIGJhc2VyZXN0cmljdGluZm8g bGlzdAorZXhwbGFpbiAoY29zdHMgb2ZmKQorc2VsZWN0ICogZnJvbSBzbCB0MSwgc2wgdDIK K3doZXJlIHQxLmEgPSB0Mi5hIGFuZCB0MS5iID0gMSBhbmQgdDIuYiA9IDIKKyAgYW5kIHQx LmMgSVMgTk9UIE5VTEwgYW5kIHQyLmMgSVMgTk9UIE5VTEwKKyAgYW5kIHQyLmIgSVMgTk9U IE5VTEwgYW5kIHQxLmIgSVMgTk9UIE5VTEwKKyAgYW5kIHQxLmEgSVMgTk9UIE5VTEwgYW5k IHQyLmEgSVMgTk9UIE5VTEw7CitleHBsYWluICh2ZXJib3NlLCBjb3N0cyBvZmYpCitzZWxl Y3QgKiBmcm9tIHNsIHQxLCBzbCB0Mgord2hlcmUgdDEuYiA9IHQyLmIgYW5kIHQyLmEgPSAz IGFuZCB0MS5hID0gMworICBhbmQgdDEuYyBJUyBOT1QgTlVMTCBhbmQgdDIuYyBJUyBOT1Qg TlVMTAorICBhbmQgdDIuYiBJUyBOT1QgTlVMTCBhbmQgdDEuYiBJUyBOT1QgTlVMTAorICBh bmQgdDEuYSBJUyBOT1QgTlVMTCBhbmQgdDIuYSBJUyBOT1QgTlVMTDsKKworLS0gSm9pbiBx dWFsIGlzbid0IG1lcmdlam9pbmFibGUsIGJ1dCBpbm5lciBpcyB1bmlxdWUuCitFWFBMQUlO IChDT1NUUyBPRkYpCitTRUxFQ1QgbjIuYSBGUk9NIHNqIG4xLCBzaiBuMiBXSEVSRSBuMS5h IDw+IG4yLmEgQU5EIG4yLmEgPSAxOworCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1Qg KiBGUk9NCisoU0VMRUNUIG4yLmEgRlJPTSBzaiBuMSwgc2ogbjIgV0hFUkUgbjEuYSA8PiBu Mi5hKSBxMCwgc2wKK1dIRVJFIHEwLmEgPSAxOworCistLSBDaGVjayBvcHRpbWl6YXRpb24g ZGlzYWJsaW5nIGlmIGl0IHdpbGwgdmlvbGF0ZSBzcGVjaWFsIGpvaW4gY29uZGl0aW9ucy4K Ky0tIFR3byBpZGVudGljYWwgam9pbmVkIHJlbGF0aW9ucyBzYXRpc2ZpZXMgc2VsZiBqb2lu IHJlbW92YWwgY29uZGl0aW9ucyBidXQKKy0tIHN0YXkgaW4gZGlmZmVyZW50IHNwZWNpYWwg am9pbiBpbmZvcy4KK0NSRUFURSBUQUJMRSBzal90MSAoaWQgc2VyaWFsLCBhIGludCk7CitD UkVBVEUgVEFCTEUgc2pfdDIgKGlkIHNlcmlhbCwgYSBpbnQpOworQ1JFQVRFIFRBQkxFIHNq X3QzIChpZCBzZXJpYWwsIGEgaW50KTsKK0NSRUFURSBUQUJMRSBzal90NCAoaWQgc2VyaWFs LCBhIGludCk7CisKK0NSRUFURSBVTklRVUUgSU5ERVggT04gc2pfdDMgVVNJTkcgYnRyZWUg KGEsaWQpOworQ1JFQVRFIFVOSVFVRSBJTkRFWCBPTiBzal90MiBVU0lORyBidHJlZSAoaWQp OworCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIHNqX3QxCitKT0lOICgK KwlTRUxFQ1Qgc2pfdDIuaWQgQVMgaWQgRlJPTSBzal90MgorCVdIRVJFIEVYSVNUUworCQko CisJCVNFTEVDVCBUUlVFIEZST00gc2pfdDMsc2pfdDQgV0hFUkUgc2pfdDMuYSA9IDEgQU5E IHNqX3QzLmlkID0gc2pfdDIuaWQKKwkJKQorCSkgdDJ0M3Q0CitPTiBzal90MS5pZCA9IHQy dDN0NC5pZAorSk9JTiAoCisJU0VMRUNUIHNqX3QyLmlkIEFTIGlkIEZST00gc2pfdDIKKwlX SEVSRSBFWElTVFMKKwkJKAorCQlTRUxFQ1QgVFJVRSBGUk9NIHNqX3QzLHNqX3Q0IFdIRVJF IHNqX3QzLmEgPSAxIEFORCBzal90My5pZCA9IHNqX3QyLmlkCisJCSkKKwkpIF90MnQzdDQK K09OIHNqX3QxLmlkID0gX3QydDN0NC5pZDsKKworLS0KKy0tIFRlc3QgUm93TWFya3MtcmVs YXRlZCBjb2RlCistLQorCistLSBCb3RoIHNpZGVzIGhhdmUgZXhwbGljaXQgTG9ja1Jvd3Mg bWFya3MKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCBhMS5hIEZST00gc2ogYTEsc2og YTIgV0hFUkUgKGExLmE9YTIuYSkgRk9SIFVQREFURTsKKworcmVzZXQgZW5hYmxlX2hhc2hq b2luOworcmVzZXQgZW5hYmxlX21lcmdlam9pbjsKKwogLS0KIC0tIFRlc3QgaGludHMgZ2l2 ZW4gb24gaW5jb3JyZWN0IGNvbHVtbiByZWZlcmVuY2VzIGFyZSB1c2VmdWwKIC0tCmRpZmYg LS1naXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCBiL3NyYy90b29scy9w Z2luZGVudC90eXBlZGVmcy5saXN0CmluZGV4IDE3MWE3ZGQ1ZDIuLjc5ZjRjYmExMjggMTAw NjQ0Ci0tLSBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CisrKyBiL3NyYy90 b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CkBAIC0zOTEsNiArMzkxLDcgQEAgQ2F0YWxv Z0lkCiBDYXRhbG9nSWRNYXBFbnRyeQogQ2F0YWxvZ0luZGV4U3RhdGUKIENoYW5nZVZhck5v ZGVzX2NvbnRleHQKK1JlcGxhY2VWYXJub0NvbnRleHQKIENoZWNrUG9pbnQKIENoZWNrUG9p bnRTdG10CiBDaGVja3BvaW50U3RhdHNEYXRhCkBAIC0yNTc1LDYgKzI1NzYsNyBAQCBTZWVu UmVsc0VudHJ5CiBTZWxlY3RMaW1pdAogU2VsZWN0U3RtdAogU2VsZWN0aXZpdHkKK1NlbGZK b2luQ2FuZGlkYXRlCiBTZW1UUGFkZGVkCiBTZW1pQW50aUpvaW5GYWN0b3JzCiBTZXFTY2Fu CkBAIC00MDIzLDYgKzQwMjUsNyBAQCB1bmljb2RlU3R5bGVDb2x1bW5Gb3JtYXQKIHVuaWNv ZGVTdHlsZUZvcm1hdAogdW5pY29kZVN0eWxlUm93Rm9ybWF0CiB1bmljb2RlX2xpbmVzdHls ZQorVW5pcXVlUmVsSW5mbwogdW5pdF9jb252ZXJzaW9uCiB1bmxvZ2dlZF9yZWxhdGlvbl9l bnRyeQogdXRmX2xvY2FsX2NvbnZlcnNpb25fZnVuYwotLSAKMi4zOS41Cgo= --------------bgJkibED4zPx441b6Zr9PIGH--