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 1tkQo7-003sLJ-Js for pgsql-hackers@arkaria.postgresql.org; Tue, 18 Feb 2025 16:50:52 +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 1tkQo4-00CDc2-PP for pgsql-hackers@arkaria.postgresql.org; Tue, 18 Feb 2025 16:50:48 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1tkQo4-00CDbu-9g for pgsql-hackers@lists.postgresql.org; Tue, 18 Feb 2025 16:50:48 +0000 Received: from mail-oa1-x2b.google.com ([2001:4860:4864:20::2b]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1tkQo2-001b20-0K; Tue, 18 Feb 2025 16:50:47 +0000 Received: by mail-oa1-x2b.google.com with SMTP id 586e51a60fabf-2bc79a81e6bso1391078fac.0; Tue, 18 Feb 2025 08:50:45 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1739897444; x=1740502244; darn=postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=I1uMLgXm8R9Gt9mv9urYnUwOCz1obO7KrDzzUoikkz8=; b=DdpeaOT5Z7JkVCMkQY0vMOZKfR1COcU4Iy9lk6kzNSnJI0duYUtVKHVXY0EXW87nAs i3Nh1jU+/CNifeZqaaOOCCn2P77cgUbM2k1FRigzR5J7EPiYKG+AjgYHIw90fYlQP1zE UDXGPjK6LT/qAKkbo80r8oqLfinQB3hamtf8jdI8aigdGkRFw10Le9vqslYU3H3fOeEi MUg3lQqX3zuIXhO3lsPfBYbI4bfs+vaBiWSUMW1Ye0g6I6YwHuY2VVxI2GgdgoRGvuZr GjBjAjRylUafBDngCro7xoIMs1n8zThbO4lUYuTME7aG0N6Z0sAw2jtvHoziZ+1QC5PW XiqA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739897444; x=1740502244; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=I1uMLgXm8R9Gt9mv9urYnUwOCz1obO7KrDzzUoikkz8=; b=LlSLf2ifBJP1Dugp/AcISnJyL+Lg3bQ8GBuNFT+/RBhSBilKU30unlCPRTDCQ8DKQy mV1T+RLc9xiPTTXImuI1Gmku2fYKMsKVTZxsKa3gyXLa//Yg0HIlO0hKyM4/4HTKEDVe PGrSQfk7R7jVylhHozEXKwyKrnTtXl83tAwU5pLJVy7qFZuwvn8umnxgJIynuvX3ZK4W 8bwoOJenvG5GhFNqjGa1Veb3hqJce71pF2cASupbnHA4fUGBa9HMhpha9pIOcKOefFni 4bfi5cbn49lGQMHUiWvm5PBkiOlug+0k7B4aZvC6MWCuR29EhKlbtwP1XHvJJCmgo0Ir 1/TA== X-Forwarded-Encrypted: i=1; AJvYcCVtxxFWOWn0bGQ5DTh5uVERgZPYLDIH4trshe1WNj/Z/K9m/N7BzCqe30uoUoDFGzwaDAV1x5C7RkTPgjVU@postgresql.org X-Gm-Message-State: AOJu0YwwFhT+0HzvOOBncYZaMzOlLVj5RuOvx8JD3LdfmX6r9H1wjM6y LzSAh4ywcZ3FGniirD2RI+Ysq2UPhgaGWCCJu4bOqXaXVF/rSoW8b5N2vVNNdYKtciGIXf/EPky atypj5doxHI46UqcC8DtrDgLi7HVJWQ== X-Gm-Gg: ASbGncvnsLMxVAVxOQd08TByPZRhdwzkThWVYeLe3UofHwTAkIRE37U1PeVAqwyhAFi +wrr3UV0uxjJqUdQKmuOtwiF3HfjqguPf4CdaSwTC7g7uOCS4Um+j8bnybkCSbMzZI1iY5HQ= X-Google-Smtp-Source: AGHT+IFxOUgXgjg6WZx2REwv19VYyrMM3JH6MT0SneEjosAMPbdEDt0yss8p3+bZvWSAllTUvlPAXb5yzTmRf0ZV9aw= X-Received: by 2002:a05:6871:58d:b0:29e:2695:5214 with SMTP id 586e51a60fabf-2bc99cf5d3emr8943553fac.25.1739897443718; Tue, 18 Feb 2025 08:50:43 -0800 (PST) MIME-Version: 1.0 References: <20250203.204555.1527524827386762643.ishii@postgresql.org> <20250218.131928.503752198926696812.ishii@postgresql.org> In-Reply-To: <20250218.131928.503752198926696812.ishii@postgresql.org> From: Oliver Ford Date: Tue, 18 Feb 2025 16:50:30 +0000 X-Gm-Features: AWEUYZkDwCbGUHB11510XZCWaCS7-ItY4r0pxBnHxySa9gveL7DsbN-xnDJlcpU Message-ID: Subject: Re: Add RESPECT/IGNORE NULLS and FROM FIRST/LAST options To: Tatsuo Ishii Cc: krasiyan@gmail.com, tgl@sss.pgh.pa.us, vik@postgresfriends.org, pgsql-hackers@postgresql.org, andrew@tao11.riddles.org.uk, david@fetter.org Content-Type: multipart/mixed; boundary="0000000000001438e9062e6d71b3" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000001438e9062e6d71b3 Content-Type: multipart/alternative; boundary="0000000000001438e5062e6d71b1" --0000000000001438e5062e6d71b1 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Tue, Feb 18, 2025 at 4:19=E2=80=AFAM Tatsuo Ishii = wrote: > > Attached version doesn't use the nonnulls array if an Exclude is > > specified, as I think it's not going to work with exclusions (as it's > > only an optimization, this is ok and can be taken out entirely if you > > prefer). I've also added your tests above to the tests. > > I applied the v7 patch and ran regression and tap test. There was no > errors. Great! > > BTW, I noticed that in the code path where > ignorenulls_getfuncarginframe() is called, WinSetMarkPosition() is > never called? > > Attached version uses the mark_pos at the end. --0000000000001438e5062e6d71b1 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
On Tue, Feb 18, 2025 at 4:19=E2=80=AFAM T= atsuo Ishii <ishii@postgresql.or= g> wrote:
> Attached version doesn&#= 39;t use the nonnulls array if an Exclude is
> specified, as I think it's not going to work with exclusions (as i= t's
> only an optimization, this is ok and can be taken out entirely if you<= br> > prefer). I've also added your tests above to the tests.

I applied the v7 patch and ran regression and tap test. There was no
errors. Great!

BTW, I noticed that in the code path where
ignorenulls_getfuncarginframe() is called, WinSetMarkPosition() is
never called?

Attached version uses the mark_pos at the end.
<= /div>
--0000000000001438e5062e6d71b1-- --0000000000001438e9062e6d71b3 Content-Type: application/octet-stream; name="0008-ignore.patch" Content-Disposition: attachment; filename="0008-ignore.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m7apzwgj0 RnJvbSBkOGYxZTI4NDExYjhjZWE1MmUxYzY2Njk3MTI1Yzg2YjUxMWMwOGE2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBPbGl2ZXIgRm9yZCA8b2pmb3JkQGdtYWlsLmNvbT4KRGF0ZTog VHVlLCAxOCBGZWIgMjAyNSAxMzowNjoyOSArMDAwMApTdWJqZWN0OiBbUEFUQ0hdIGlnbm9yZQoK LS0tCiBkb2Mvc3JjL3NnbWwvZnVuYy5zZ21sICAgICAgICAgICAgICAgfCAgMzggKy0tCiBkb2Mv c3JjL3NnbWwvc3ludGF4LnNnbWwgICAgICAgICAgICAgfCAgMTAgKy0KIHNyYy9iYWNrZW5kL2Nh dGFsb2cvc3FsX2ZlYXR1cmVzLnR4dCB8ICAgMiArLQogc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9k ZVdpbmRvd0FnZy5jIHwgMzMzICsrKysrKysrKysrKysrKysrKysrKysrKysrLQogc3JjL2JhY2tl bmQvb3B0aW1pemVyL3V0aWwvY2xhdXNlcy5jIHwgICAxICsKIHNyYy9iYWNrZW5kL3BhcnNlci9n cmFtLnkgICAgICAgICAgICB8ICAxOSArLQogc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX2Z1bmMu YyAgICAgIHwgICA5ICsKIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMuYyAgICB8ICAg NyArLQogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3dpbmRvd2Z1bmNzLmMgIHwgIDEwICsKIHNyYy9p bmNsdWRlL25vZGVzL3BhcnNlbm9kZXMuaCAgICAgICB8ICAgMSArCiBzcmMvaW5jbHVkZS9ub2Rl cy9wcmltbm9kZXMuaCAgICAgICAgfCAgMTMgKysKIHNyYy9pbmNsdWRlL3BhcnNlci9rd2xpc3Qu aCAgICAgICAgICB8ICAgMiArCiBzcmMvaW5jbHVkZS93aW5kb3dhcGkuaCAgICAgICAgICAgICAg fCAgIDQgKwogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC93aW5kb3cub3V0IHwgMzExICsrKysr KysrKysrKysrKysrKysrKysrKysKIHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3dpbmRvdy5zcWwgICAg ICB8IDE0NyArKysrKysrKysrKysKIDE1IGZpbGVzIGNoYW5nZWQsIDg3OSBpbnNlcnRpb25zKCsp LCAyOCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvZnVuYy5zZ21sIGIv ZG9jL3NyYy9zZ21sL2Z1bmMuc2dtbAppbmRleCA3ZWZjODE5MzZhLi43OTAyMmM5ZDQ1IDEwMDY0 NAotLS0gYS9kb2Mvc3JjL3NnbWwvZnVuYy5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9mdW5jLnNn bWwKQEAgLTIzMzAzLDcgKzIzMzAzLDcgQEAgU0VMRUNUIGNvdW50KCopIEZST00gc29tZXRhYmxl OwogICAgICAgICA8L2luZGV4dGVybT4KICAgICAgICAgPGZ1bmN0aW9uPmxhZzwvZnVuY3Rpb24+ ICggPHBhcmFtZXRlcj52YWx1ZTwvcGFyYW1ldGVyPiA8dHlwZT5hbnljb21wYXRpYmxlPC90eXBl PgogICAgICAgICAgIDxvcHRpb25hbD4sIDxwYXJhbWV0ZXI+b2Zmc2V0PC9wYXJhbWV0ZXI+IDx0 eXBlPmludGVnZXI8L3R5cGU+Ci0gICAgICAgICAgPG9wdGlvbmFsPiwgPHBhcmFtZXRlcj5kZWZh dWx0PC9wYXJhbWV0ZXI+IDx0eXBlPmFueWNvbXBhdGlibGU8L3R5cGU+IDwvb3B0aW9uYWw+PC9v cHRpb25hbD4gKQorICAgICAgICAgIDxvcHRpb25hbD4sIDxwYXJhbWV0ZXI+ZGVmYXVsdDwvcGFy YW1ldGVyPiA8dHlwZT5hbnljb21wYXRpYmxlPC90eXBlPiA8L29wdGlvbmFsPjwvb3B0aW9uYWw+ ICkgPG9wdGlvbmFsPiA8cGFyYW1ldGVyPm51bGwgdHJlYXRtZW50PC9wYXJhbWV0ZXI+IDwvb3B0 aW9uYWw+CiAgICAgICAgIDxyZXR1cm52YWx1ZT5hbnljb21wYXRpYmxlPC9yZXR1cm52YWx1ZT4K ICAgICAgICA8L3BhcmE+CiAgICAgICAgPHBhcmE+CkBAIC0yMzMyOCw3ICsyMzMyOCw3IEBAIFNF TEVDVCBjb3VudCgqKSBGUk9NIHNvbWV0YWJsZTsKICAgICAgICAgPC9pbmRleHRlcm0+CiAgICAg ICAgIDxmdW5jdGlvbj5sZWFkPC9mdW5jdGlvbj4gKCA8cGFyYW1ldGVyPnZhbHVlPC9wYXJhbWV0 ZXI+IDx0eXBlPmFueWNvbXBhdGlibGU8L3R5cGU+CiAgICAgICAgICAgPG9wdGlvbmFsPiwgPHBh cmFtZXRlcj5vZmZzZXQ8L3BhcmFtZXRlcj4gPHR5cGU+aW50ZWdlcjwvdHlwZT4KLSAgICAgICAg ICA8b3B0aW9uYWw+LCA8cGFyYW1ldGVyPmRlZmF1bHQ8L3BhcmFtZXRlcj4gPHR5cGU+YW55Y29t cGF0aWJsZTwvdHlwZT4gPC9vcHRpb25hbD48L29wdGlvbmFsPiApCisgICAgICAgICAgPG9wdGlv bmFsPiwgPHBhcmFtZXRlcj5kZWZhdWx0PC9wYXJhbWV0ZXI+IDx0eXBlPmFueWNvbXBhdGlibGU8 L3R5cGU+IDwvb3B0aW9uYWw+PC9vcHRpb25hbD4gKSA8b3B0aW9uYWw+IDxwYXJhbWV0ZXI+bnVs bCB0cmVhdG1lbnQ8L3BhcmFtZXRlcj4gPC9vcHRpb25hbD4KICAgICAgICAgPHJldHVybnZhbHVl PmFueWNvbXBhdGlibGU8L3JldHVybnZhbHVlPgogICAgICAgIDwvcGFyYT4KICAgICAgICA8cGFy YT4KQEAgLTIzMzUxLDcgKzIzMzUxLDcgQEAgU0VMRUNUIGNvdW50KCopIEZST00gc29tZXRhYmxl OwogICAgICAgICA8aW5kZXh0ZXJtPgogICAgICAgICAgPHByaW1hcnk+Zmlyc3RfdmFsdWU8L3By aW1hcnk+CiAgICAgICAgIDwvaW5kZXh0ZXJtPgotICAgICAgICA8ZnVuY3Rpb24+Zmlyc3RfdmFs dWU8L2Z1bmN0aW9uPiAoIDxwYXJhbWV0ZXI+dmFsdWU8L3BhcmFtZXRlcj4gPHR5cGU+YW55ZWxl bWVudDwvdHlwZT4gKQorICAgICAgICA8ZnVuY3Rpb24+Zmlyc3RfdmFsdWU8L2Z1bmN0aW9uPiAo IDxwYXJhbWV0ZXI+dmFsdWU8L3BhcmFtZXRlcj4gPHR5cGU+YW55ZWxlbWVudDwvdHlwZT4gKSA8 b3B0aW9uYWw+IDxwYXJhbWV0ZXI+bnVsbCB0cmVhdG1lbnQ8L3BhcmFtZXRlcj4gPC9vcHRpb25h bD4KICAgICAgICAgPHJldHVybnZhbHVlPmFueWVsZW1lbnQ8L3JldHVybnZhbHVlPgogICAgICAg IDwvcGFyYT4KICAgICAgICA8cGFyYT4KQEAgLTIzMzY1LDcgKzIzMzY1LDcgQEAgU0VMRUNUIGNv dW50KCopIEZST00gc29tZXRhYmxlOwogICAgICAgICA8aW5kZXh0ZXJtPgogICAgICAgICAgPHBy aW1hcnk+bGFzdF92YWx1ZTwvcHJpbWFyeT4KICAgICAgICAgPC9pbmRleHRlcm0+Ci0gICAgICAg IDxmdW5jdGlvbj5sYXN0X3ZhbHVlPC9mdW5jdGlvbj4gKCA8cGFyYW1ldGVyPnZhbHVlPC9wYXJh bWV0ZXI+IDx0eXBlPmFueWVsZW1lbnQ8L3R5cGU+ICkKKyAgICAgICAgPGZ1bmN0aW9uPmxhc3Rf dmFsdWU8L2Z1bmN0aW9uPiAoIDxwYXJhbWV0ZXI+dmFsdWU8L3BhcmFtZXRlcj4gPHR5cGU+YW55 ZWxlbWVudDwvdHlwZT4gKSA8b3B0aW9uYWw+IDxwYXJhbWV0ZXI+bnVsbCB0cmVhdG1lbnQ8L3Bh cmFtZXRlcj4gPC9vcHRpb25hbD4KICAgICAgICAgPHJldHVybnZhbHVlPmFueWVsZW1lbnQ8L3Jl dHVybnZhbHVlPgogICAgICAgIDwvcGFyYT4KICAgICAgICA8cGFyYT4KQEAgLTIzMzc5LDcgKzIz Mzc5LDcgQEAgU0VMRUNUIGNvdW50KCopIEZST00gc29tZXRhYmxlOwogICAgICAgICA8aW5kZXh0 ZXJtPgogICAgICAgICAgPHByaW1hcnk+bnRoX3ZhbHVlPC9wcmltYXJ5PgogICAgICAgICA8L2lu ZGV4dGVybT4KLSAgICAgICAgPGZ1bmN0aW9uPm50aF92YWx1ZTwvZnVuY3Rpb24+ICggPHBhcmFt ZXRlcj52YWx1ZTwvcGFyYW1ldGVyPiA8dHlwZT5hbnllbGVtZW50PC90eXBlPiwgPHBhcmFtZXRl cj5uPC9wYXJhbWV0ZXI+IDx0eXBlPmludGVnZXI8L3R5cGU+ICkKKyAgICAgICAgPGZ1bmN0aW9u Pm50aF92YWx1ZTwvZnVuY3Rpb24+ICggPHBhcmFtZXRlcj52YWx1ZTwvcGFyYW1ldGVyPiA8dHlw ZT5hbnllbGVtZW50PC90eXBlPiwgPHBhcmFtZXRlcj5uPC9wYXJhbWV0ZXI+IDx0eXBlPmludGVn ZXI8L3R5cGU+ICkgPG9wdGlvbmFsPiA8cGFyYW1ldGVyPm51bGwgdHJlYXRtZW50PC9wYXJhbWV0 ZXI+IDwvb3B0aW9uYWw+CiAgICAgICAgIDxyZXR1cm52YWx1ZT5hbnllbGVtZW50PC9yZXR1cm52 YWx1ZT4KICAgICAgICA8L3BhcmE+CiAgICAgICAgPHBhcmE+CkBAIC0yMzQyOCwxOCArMjM0Mjgs MjYgQEAgU0VMRUNUIGNvdW50KCopIEZST00gc29tZXRhYmxlOwogICAgT3RoZXIgZnJhbWUgc3Bl Y2lmaWNhdGlvbnMgY2FuIGJlIHVzZWQgdG8gb2J0YWluIG90aGVyIGVmZmVjdHMuCiAgIDwvcGFy YT4KIAorICA8cGFyYT4KKyAgIFRoZSA8bGl0ZXJhbD5udWxsIHRyZWF0bWVudDwvbGl0ZXJhbD4g b3B0aW9uIG11c3QgYmUgb25lIG9mOgorPHN5bm9wc2lzPgorICBSRVNQRUNUIE5VTExTCisgIElH Tk9SRSBOVUxMUworPC9zeW5vcHNpcz4KKyAgIElmIHVuc3BlY2lmaWVkLCB0aGUgZGVmYXVsdCBp cyA8bGl0ZXJhbD5SRVNQRUNUIE5VTExTPC9saXRlcmFsPiB3aGljaCBpbmNsdWRlcyBOVUxMCisg ICB2YWx1ZXMgaW4gYW55IHJlc3VsdCBjYWxjdWxhdGlvbi4gPGxpdGVyYWw+SUdOT1JFIE5VTExT PC9saXRlcmFsPiBpZ25vcmVzIE5VTEwgdmFsdWVzLgorICAgVGhpcyBvcHRpb24gaXMgb25seSBh bGxvd2VkIGZvciB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczogPGZ1bmN0aW9uPmxhZzwvZnVuY3Rp b24+LAorICAgPGZ1bmN0aW9uPmxlYWQ8L2Z1bmN0aW9uPiwgPGZ1bmN0aW9uPmZpcnN0X3ZhbHVl PC9mdW5jdGlvbj4sIDxmdW5jdGlvbj5sYXN0X3ZhbHVlPC9mdW5jdGlvbj4sCisgICA8ZnVuY3Rp b24+bnRoX3ZhbHVlPC9mdW5jdGlvbj4uCisgIDwvcGFyYT4KKwogICA8bm90ZT4KICAgIDxwYXJh PgotICAgIFRoZSBTUUwgc3RhbmRhcmQgZGVmaW5lcyBhIDxsaXRlcmFsPlJFU1BFQ1QgTlVMTFM8 L2xpdGVyYWw+IG9yCi0gICAgPGxpdGVyYWw+SUdOT1JFIE5VTExTPC9saXRlcmFsPiBvcHRpb24g Zm9yIDxmdW5jdGlvbj5sZWFkPC9mdW5jdGlvbj4sIDxmdW5jdGlvbj5sYWc8L2Z1bmN0aW9uPiwK LSAgICA8ZnVuY3Rpb24+Zmlyc3RfdmFsdWU8L2Z1bmN0aW9uPiwgPGZ1bmN0aW9uPmxhc3RfdmFs dWU8L2Z1bmN0aW9uPiwgYW5kCi0gICAgPGZ1bmN0aW9uPm50aF92YWx1ZTwvZnVuY3Rpb24+LiAg VGhpcyBpcyBub3QgaW1wbGVtZW50ZWQgaW4KLSAgICA8cHJvZHVjdG5hbWU+UG9zdGdyZVNRTDwv cHJvZHVjdG5hbWU+OiB0aGUgYmVoYXZpb3IgaXMgYWx3YXlzIHRoZQotICAgIHNhbWUgYXMgdGhl IHN0YW5kYXJkJ3MgZGVmYXVsdCwgbmFtZWx5IDxsaXRlcmFsPlJFU1BFQ1QgTlVMTFM8L2xpdGVy YWw+LgotICAgIExpa2V3aXNlLCB0aGUgc3RhbmRhcmQncyA8bGl0ZXJhbD5GUk9NIEZJUlNUPC9s aXRlcmFsPiBvciA8bGl0ZXJhbD5GUk9NIExBU1Q8L2xpdGVyYWw+Ci0gICAgb3B0aW9uIGZvciA8 ZnVuY3Rpb24+bnRoX3ZhbHVlPC9mdW5jdGlvbj4gaXMgbm90IGltcGxlbWVudGVkOiBvbmx5IHRo ZQotICAgIGRlZmF1bHQgPGxpdGVyYWw+RlJPTSBGSVJTVDwvbGl0ZXJhbD4gYmVoYXZpb3IgaXMg c3VwcG9ydGVkLiAgKFlvdSBjYW4gYWNoaWV2ZQotICAgIHRoZSByZXN1bHQgb2YgPGxpdGVyYWw+ RlJPTSBMQVNUPC9saXRlcmFsPiBieSByZXZlcnNpbmcgdGhlIDxsaXRlcmFsPk9SREVSIEJZPC9s aXRlcmFsPgorICAgIFRoZSBTUUwgc3RhbmRhcmQgZGVmaW5lcyBhIDxsaXRlcmFsPkZST00gRklS U1Q8L2xpdGVyYWw+IG9yIDxsaXRlcmFsPkZST00gTEFTVDwvbGl0ZXJhbD4KKyAgICBvcHRpb24g Zm9yIDxmdW5jdGlvbj5udGhfdmFsdWU8L2Z1bmN0aW9uPi4gVGhpcyBpcyBub3QgaW1wbGVtZW50 ZWQgaW4KKyAgICA8cHJvZHVjdG5hbWU+UG9zdGdyZVNRTDwvcHJvZHVjdG5hbWU+OiBvbmx5IHRo ZSBkZWZhdWx0IDxsaXRlcmFsPkZST00gRklSU1Q8L2xpdGVyYWw+CisgICAgYmVoYXZpb3IgaXMg c3VwcG9ydGVkLiAoWW91IGNhbiBhY2hpZXZlIHRoZSByZXN1bHQgb2YgPGxpdGVyYWw+RlJPTSBM QVNUPC9saXRlcmFsPiBieQorICAgIHJldmVyc2luZyB0aGUgPGxpdGVyYWw+T1JERVIgQlk8L2xp dGVyYWw+CiAgICAgb3JkZXJpbmcuKQogICAgPC9wYXJhPgogICA8L25vdGU+CmRpZmYgLS1naXQg YS9kb2Mvc3JjL3NnbWwvc3ludGF4LnNnbWwgYi9kb2Mvc3JjL3NnbWwvc3ludGF4LnNnbWwKaW5k ZXggOTE2MTg5YTdkNi4uMjM3ZDczMDZmZSAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL3N5bnRh eC5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9zeW50YXguc2dtbApAQCAtMTgzNCw4ICsxODM0LDgg QEAgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMCkgQVMgcyhpKTsKICAgICBUaGUgc3ludGF4IG9m IGEgd2luZG93IGZ1bmN0aW9uIGNhbGwgaXMgb25lIG9mIHRoZSBmb2xsb3dpbmc6CiAKIDxzeW5v cHNpcz4KLTxyZXBsYWNlYWJsZT5mdW5jdGlvbl9uYW1lPC9yZXBsYWNlYWJsZT4gKDxvcHRpb25h bD48cmVwbGFjZWFibGU+ZXhwcmVzc2lvbjwvcmVwbGFjZWFibGU+IDxvcHRpb25hbD4sIDxyZXBs YWNlYWJsZT5leHByZXNzaW9uPC9yZXBsYWNlYWJsZT4gLi4uIDwvb3B0aW9uYWw+PC9vcHRpb25h bD4pIFsgRklMVEVSICggV0hFUkUgPHJlcGxhY2VhYmxlPmZpbHRlcl9jbGF1c2U8L3JlcGxhY2Vh YmxlPiApIF0gT1ZFUiA8cmVwbGFjZWFibGU+d2luZG93X25hbWU8L3JlcGxhY2VhYmxlPgotPHJl cGxhY2VhYmxlPmZ1bmN0aW9uX25hbWU8L3JlcGxhY2VhYmxlPiAoPG9wdGlvbmFsPjxyZXBsYWNl YWJsZT5leHByZXNzaW9uPC9yZXBsYWNlYWJsZT4gPG9wdGlvbmFsPiwgPHJlcGxhY2VhYmxlPmV4 cHJlc3Npb248L3JlcGxhY2VhYmxlPiAuLi4gPC9vcHRpb25hbD48L29wdGlvbmFsPikgWyBGSUxU RVIgKCBXSEVSRSA8cmVwbGFjZWFibGU+ZmlsdGVyX2NsYXVzZTwvcmVwbGFjZWFibGU+ICkgXSBP VkVSICggPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPndpbmRvd19kZWZpbml0aW9uPC9y ZXBsYWNlYWJsZT4gKQorPHJlcGxhY2VhYmxlPmZ1bmN0aW9uX25hbWU8L3JlcGxhY2VhYmxlPiAo PG9wdGlvbmFsPjxyZXBsYWNlYWJsZT5leHByZXNzaW9uPC9yZXBsYWNlYWJsZT4gPG9wdGlvbmFs PiwgPHJlcGxhY2VhYmxlPmV4cHJlc3Npb248L3JlcGxhY2VhYmxlPiAuLi4gPC9vcHRpb25hbD48 L29wdGlvbmFsPikgPG9wdGlvbmFsPm51bGwgdHJlYXRtZW50PC9vcHRpb25hbD4gWyBGSUxURVIg KCBXSEVSRSA8cmVwbGFjZWFibGU+ZmlsdGVyX2NsYXVzZTwvcmVwbGFjZWFibGU+ICkgXSBPVkVS IDxyZXBsYWNlYWJsZT53aW5kb3dfbmFtZTwvcmVwbGFjZWFibGU+Cis8cmVwbGFjZWFibGU+ZnVu Y3Rpb25fbmFtZTwvcmVwbGFjZWFibGU+ICg8b3B0aW9uYWw+PHJlcGxhY2VhYmxlPmV4cHJlc3Np b248L3JlcGxhY2VhYmxlPiA8b3B0aW9uYWw+LCA8cmVwbGFjZWFibGU+ZXhwcmVzc2lvbjwvcmVw bGFjZWFibGU+IC4uLiA8L29wdGlvbmFsPjwvb3B0aW9uYWw+KSA8b3B0aW9uYWw+bnVsbCB0cmVh dG1lbnQ8L29wdGlvbmFsPiBbIEZJTFRFUiAoIFdIRVJFIDxyZXBsYWNlYWJsZT5maWx0ZXJfY2xh dXNlPC9yZXBsYWNlYWJsZT4gKSBdIE9WRVIgKCA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRl ciI+d2luZG93X2RlZmluaXRpb248L3JlcGxhY2VhYmxlPiApCiA8cmVwbGFjZWFibGU+ZnVuY3Rp b25fbmFtZTwvcmVwbGFjZWFibGU+ICggKiApIFsgRklMVEVSICggV0hFUkUgPHJlcGxhY2VhYmxl PmZpbHRlcl9jbGF1c2U8L3JlcGxhY2VhYmxlPiApIF0gT1ZFUiA8cmVwbGFjZWFibGU+d2luZG93 X25hbWU8L3JlcGxhY2VhYmxlPgogPHJlcGxhY2VhYmxlPmZ1bmN0aW9uX25hbWU8L3JlcGxhY2Vh YmxlPiAoICogKSBbIEZJTFRFUiAoIFdIRVJFIDxyZXBsYWNlYWJsZT5maWx0ZXJfY2xhdXNlPC9y ZXBsYWNlYWJsZT4gKSBdIE9WRVIgKCA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+d2lu ZG93X2RlZmluaXRpb248L3JlcGxhY2VhYmxlPiApCiA8L3N5bm9wc2lzPgpAQCAtMTg3Myw3ICsx ODczLDkgQEAgRVhDTFVERSBOTyBPVEhFUlMKIAogICAgPHBhcmE+CiAgICAgSGVyZSwgPHJlcGxh Y2VhYmxlPmV4cHJlc3Npb248L3JlcGxhY2VhYmxlPiByZXByZXNlbnRzIGFueSB2YWx1ZQotICAg IGV4cHJlc3Npb24gdGhhdCBkb2VzIG5vdCBpdHNlbGYgY29udGFpbiB3aW5kb3cgZnVuY3Rpb24g Y2FsbHMuCisgICAgZXhwcmVzc2lvbiB0aGF0IGRvZXMgbm90IGl0c2VsZiBjb250YWluIHdpbmRv dyBmdW5jdGlvbiBjYWxscy4gU29tZQorICAgIG5vbi1hZ2dyZWdhdGUgZnVuY3Rpb25zIGFsbG93 IGEgPGxpdGVyYWw+bnVsbCB0cmVhdG1lbnQ8L2xpdGVyYWw+IGNsYXVzZSwKKyAgICBkZXNjcmli ZWQgaW4gPHhyZWYgbGlua2VuZD0iZnVuY3Rpb25zLXdpbmRvdyIvPi4KICAgIDwvcGFyYT4KIAog ICAgPHBhcmE+CkBAIC0yMDQ4LDcgKzIwNTAsNyBAQCBFWENMVURFIE5PIE9USEVSUwogCiAgICA8 cGFyYT4KICAgICBUaGUgYnVpbHQtaW4gd2luZG93IGZ1bmN0aW9ucyBhcmUgZGVzY3JpYmVkIGlu IDx4cmVmCi0gICAgbGlua2VuZD0iZnVuY3Rpb25zLXdpbmRvdy10YWJsZSIvPi4gIE90aGVyIHdp bmRvdyBmdW5jdGlvbnMgY2FuIGJlIGFkZGVkIGJ5CisgICAgbGlua2VuZD0iZnVuY3Rpb25zLXdp bmRvdy10YWJsZSIvPi4gT3RoZXIgd2luZG93IGZ1bmN0aW9ucyBjYW4gYmUgYWRkZWQgYnkKICAg ICB0aGUgdXNlci4gIEFsc28sIGFueSBidWlsdC1pbiBvciB1c2VyLWRlZmluZWQgZ2VuZXJhbC1w dXJwb3NlIG9yCiAgICAgc3RhdGlzdGljYWwgYWdncmVnYXRlIGNhbiBiZSB1c2VkIGFzIGEgd2lu ZG93IGZ1bmN0aW9uLiAgKE9yZGVyZWQtc2V0CiAgICAgYW5kIGh5cG90aGV0aWNhbC1zZXQgYWdn cmVnYXRlcyBjYW5ub3QgcHJlc2VudGx5IGJlIHVzZWQgYXMgd2luZG93IGZ1bmN0aW9ucy4pCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jYXRhbG9nL3NxbF9mZWF0dXJlcy50eHQgYi9zcmMvYmFj a2VuZC9jYXRhbG9nL3NxbF9mZWF0dXJlcy50eHQKaW5kZXggMmYyNTBkMmM1Ny4uNDZhODk1OWNi MiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9zcWxfZmVhdHVyZXMudHh0CisrKyBi L3NyYy9iYWNrZW5kL2NhdGFsb2cvc3FsX2ZlYXR1cmVzLnR4dApAQCAtNTE4LDcgKzUxOCw3IEBA IFQ2MTIJQWR2YW5jZWQgT0xBUCBvcGVyYXRpb25zCQkJWUVTCiBUNjEzCVNhbXBsaW5nCQkJWUVT CQogVDYxNAlOVElMRSBmdW5jdGlvbgkJCVlFUwkKIFQ2MTUJTEVBRCBhbmQgTEFHIGZ1bmN0aW9u cwkJCVlFUwkKLVQ2MTYJTnVsbCB0cmVhdG1lbnQgb3B0aW9uIGZvciBMRUFEIGFuZCBMQUcgZnVu Y3Rpb25zCQkJTk8JCitUNjE2CU51bGwgdHJlYXRtZW50IG9wdGlvbiBmb3IgTEVBRCBhbmQgTEFH IGZ1bmN0aW9ucwkJCVlFUwkKIFQ2MTcJRklSU1RfVkFMVUUgYW5kIExBU1RfVkFMVUUgZnVuY3Rp b25zCQkJWUVTCQogVDYxOAlOVEhfVkFMVUUgZnVuY3Rpb24JCQlOTwlmdW5jdGlvbiBleGlzdHMs IGJ1dCBzb21lIG9wdGlvbnMgbWlzc2luZwogVDYxOQlOZXN0ZWQgd2luZG93IGZ1bmN0aW9ucwkJ CU5PCQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZVdpbmRvd0FnZy5jIGIv c3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZVdpbmRvd0FnZy5jCmluZGV4IDlhMWFjY2UyYjUuLjNk N2E4MTIxNjggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVXaW5kb3dBZ2cu YworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlV2luZG93QWdnLmMKQEAgLTY5LDggKzY5 LDE1IEBAIHR5cGVkZWYgc3RydWN0IFdpbmRvd09iamVjdERhdGEKIAlpbnQJCQlyZWFkcHRyOwkJ LyogdHVwbGVzdG9yZSByZWFkIHBvaW50ZXIgZm9yIHRoaXMgZm4gKi8KIAlpbnQ2NAkJbWFya3Bv czsJCS8qIHJvdyB0aGF0IG1hcmtwdHIgaXMgcG9zaXRpb25lZCBvbiAqLwogCWludDY0CQlzZWVr cG9zOwkJLyogcm93IHRoYXQgcmVhZHB0ciBpcyBwb3NpdGlvbmVkIG9uICovCisJaW50NjQJICAg Kndpbl9ub25udWxsczsJLyogdHJhY2tzIG5vbi1udWxscyBpbiBpZ25vcmUgbnVsbHMgbW9kZSAq LworCWludAkJCWlnbm9yZV9udWxsczsJLyogaWdub3JlIG51bGxzICovCisJaW50CQkJbm9ubnVs bHNfc2l6ZTsJLyogdHJhY2sgc2l6ZSBvZiB0aGUgd2luX25vbm51bGxzIGFycmF5ICovCisJaW50 CQkJbm9ubnVsbHNfbGVuOwkvKiB0cmFjayBsZW5ndGggb2YgdGhlIHdpbl9ub25udWxscyBhcnJh eSAqLwogfSBXaW5kb3dPYmplY3REYXRhOwogCisvKiBJbml0aWFsIHNpemUgb2YgdGhlIHdpbl9u b25udWxscyBhcnJheSAqLworI2RlZmluZSBXSU5fTk9OTlVMTFNfU0laRQkJMTYKKwogLyoKICAq IFdlIGhhdmUgb25lIFdpbmRvd1N0YXRlUGVyRnVuYyBzdHJ1Y3QgZm9yIGVhY2ggd2luZG93IGZ1 bmN0aW9uIGFuZAogICogd2luZG93IGFnZ3JlZ2F0ZSBoYW5kbGVkIGJ5IHRoaXMgbm9kZS4KQEAg LTk2LDYgKzEwMyw3IEBAIHR5cGVkZWYgc3RydWN0IFdpbmRvd1N0YXRlUGVyRnVuY0RhdGEKIAog CWJvb2wJCXBsYWluX2FnZzsJCS8qIGlzIGl0IGp1c3QgYSBwbGFpbiBhZ2dyZWdhdGUgZnVuY3Rp b24/ICovCiAJaW50CQkJYWdnbm87CQkJLyogaWYgc28sIGluZGV4IG9mIGl0cyBXaW5kb3dTdGF0 ZVBlckFnZ0RhdGEgKi8KKwlpbnQJCQlpZ25vcmVfbnVsbHM7CS8qIGlnbm9yZSBudWxscyAqLwog CiAJV2luZG93T2JqZWN0IHdpbm9iajsJCS8qIG9iamVjdCB1c2VkIGluIHdpbmRvdyBmdW5jdGlv biBBUEkgKi8KIH0JCQlXaW5kb3dTdGF0ZVBlckZ1bmNEYXRhOwpAQCAtMTk4LDYgKzIwNiwxNSBA QCBzdGF0aWMgYm9vbCBhcmVfcGVlcnMoV2luZG93QWdnU3RhdGUgKndpbnN0YXRlLCBUdXBsZVRh YmxlU2xvdCAqc2xvdDEsCiBzdGF0aWMgYm9vbCB3aW5kb3dfZ2V0dHVwbGVzbG90KFdpbmRvd09i amVjdCB3aW5vYmosIGludDY0IHBvcywKIAkJCQkJCQkJVHVwbGVUYWJsZVNsb3QgKnNsb3QpOwog CitzdGF0aWMgdm9pZCBpbmNyZW1lbnRfbm9ubnVsbHMoV2luZG93T2JqZWN0IHdpbm9iaiwgaW50 NjQgcG9zKTsKK3N0YXRpYyBEYXR1bSBpZ25vcmVudWxsc19nZXRmdW5jYXJnaW5wYXJ0aXRpb24o V2luZG93T2JqZWN0IHdpbm9iaiwgaW50IGFyZ25vLAorCQkJCQkJCQkJCQkgICBpbnQgcmVscG9z LCBpbnQgc2Vla3R5cGUsCisJCQkJCQkJCQkJCSAgIGJvb2wgc2V0X21hcmssCisJCQkJCQkJCQkJ CSAgIGJvb2wgKmlzbnVsbCwgYm9vbCAqaXNvdXQpOworc3RhdGljIERhdHVtIGlnbm9yZW51bGxz X2dldGZ1bmNhcmdpbmZyYW1lKFdpbmRvd09iamVjdCB3aW5vYmosIGludCBhcmdubywKKwkJCQkJ CQkJCQkgICBpbnQgcmVscG9zLCBpbnQgc2Vla3R5cGUsCisJCQkJCQkJCQkJICAgYm9vbCBzZXRf bWFyaywgIGJvb2wgKmlzbnVsbCwKKwkJCQkJCQkJCQkgICBib29sICppc291dCk7CiAKIC8qCiAg KiBpbml0aWFsaXplX3dpbmRvd2FnZ3JlZ2F0ZQpAQCAtMTI2Myw2ICsxMjgwLDEwIEBAIGJlZ2lu X3BhcnRpdGlvbihXaW5kb3dBZ2dTdGF0ZSAqd2luc3RhdGUpCiAKIAkJCXdpbm9iai0+bWFya3Bv cyA9IC0xOwogCQkJd2lub2JqLT5zZWVrcG9zID0gLTE7CisKKwkJCS8qIHJlc2V0IG51bGwgYXJy YXkgbGVuZ3RoICovCisJCQlpZiAocGVyZnVuY3N0YXRlLT53aW5vYmotPmlnbm9yZV9udWxscyA9 PSBJR05PUkVfTlVMTFMpCisJCQkJcGVyZnVuY3N0YXRlLT53aW5vYmotPm5vbm51bGxzX2xlbiA9 IDA7CiAJCX0KIAl9CiAKQEAgLTI2MTksMTQgKzI2NDAsMTcgQEAgRXhlY0luaXRXaW5kb3dBZ2co V2luZG93QWdnICpub2RlLCBFU3RhdGUgKmVzdGF0ZSwgaW50IGVmbGFncykKIAkJCWVsb2coRVJS T1IsICJXaW5kb3dGdW5jIHdpdGggd2lucmVmICV1IGFzc2lnbmVkIHRvIFdpbmRvd0FnZyB3aXRo IHdpbnJlZiAldSIsCiAJCQkJIHdmdW5jLT53aW5yZWYsIG5vZGUtPndpbnJlZik7CiAKLQkJLyog TG9vayBmb3IgYSBwcmV2aW91cyBkdXBsaWNhdGUgd2luZG93IGZ1bmN0aW9uICovCisJCS8qCisJ CSAqIExvb2sgZm9yIGEgcHJldmlvdXMgZHVwbGljYXRlIHdpbmRvdyBmdW5jdGlvbiwgd2hpY2gg bmVlZHMgdGhlIHNhbWUKKwkJICogaWdub3JlX251bGxzIHZhbHVlCisJCSAqLwogCQlmb3IgKGkg PSAwOyBpIDw9IHdmdW5jbm87IGkrKykKIAkJewogCQkJaWYgKGVxdWFsKHdmdW5jLCBwZXJmdW5j W2ldLndmdW5jKSAmJgogCQkJCSFjb250YWluX3ZvbGF0aWxlX2Z1bmN0aW9ucygoTm9kZSAqKSB3 ZnVuYykpCiAJCQkJYnJlYWs7CiAJCX0KLQkJaWYgKGkgPD0gd2Z1bmNubykKKwkJaWYgKGkgPD0g d2Z1bmNubyAmJiB3ZnVuYy0+aWdub3JlX251bGxzID09IHBlcmZ1bmNbaV0uaWdub3JlX251bGxz KQogCQl7CiAJCQkvKiBGb3VuZCBhIG1hdGNoIHRvIGFuIGV4aXN0aW5nIGVudHJ5LCBzbyBqdXN0 IG1hcmsgaXQgKi8KIAkJCXdmdW5jc3RhdGUtPndmdW5jbm8gPSBpOwpAQCAtMjY3OSw2ICsyNzAz LDEzIEBAIEV4ZWNJbml0V2luZG93QWdnKFdpbmRvd0FnZyAqbm9kZSwgRVN0YXRlICplc3RhdGUs IGludCBlZmxhZ3MpCiAJCQl3aW5vYmotPmFyZ3N0YXRlcyA9IHdmdW5jc3RhdGUtPmFyZ3M7CiAJ CQl3aW5vYmotPmxvY2FsbWVtID0gTlVMTDsKIAkJCXBlcmZ1bmNzdGF0ZS0+d2lub2JqID0gd2lu b2JqOworCQkJd2lub2JqLT5pZ25vcmVfbnVsbHMgPSB3ZnVuYy0+aWdub3JlX251bGxzOworCQkJ aWYgKHdpbm9iai0+aWdub3JlX251bGxzID09IFBBUlNFUl9JR05PUkVfTlVMTFMpCisJCQl7CisJ CQkJd2lub2JqLT53aW5fbm9ubnVsbHMgPSBwYWxsb2NfYXJyYXkoaW50NjQsIFdJTl9OT05OVUxM U19TSVpFKTsKKwkJCQl3aW5vYmotPm5vbm51bGxzX3NpemUgPSBXSU5fTk9OTlVMTFNfU0laRTsK KwkJCQl3aW5vYmotPm5vbm51bGxzX2xlbiA9IDA7CisJCQl9CiAKIAkJCS8qIEl0J3MgYSByZWFs IHdpbmRvdyBmdW5jdGlvbiwgc28gc2V0IHVwIHRvIGNhbGwgaXQuICovCiAJCQlmbWdyX2luZm9f Y3h0KHdmdW5jLT53aW5mbm9pZCwgJnBlcmZ1bmNzdGF0ZS0+ZmxpbmZvLApAQCAtMzIxNCwxMiAr MzI0NSwzMDIgQEAgd2luZG93X2dldHR1cGxlc2xvdChXaW5kb3dPYmplY3Qgd2lub2JqLCBpbnQ2 NCBwb3MsIFR1cGxlVGFibGVTbG90ICpzbG90KQogCXJldHVybiB0cnVlOwogfQogCisvKgorICog aW5jcmVtZW50X25vbm51bGxzCisgKiBGb3IgSUdOT1JFIE5VTExTLCBhZGQgdGhlIGN1cnJlbnQg cG9zaXRpb24gdG8gdGhlIG5vbm51bGxzIGFycmF5LAorICogZG91YmxpbmcgdGhlIGFycmF5IGNh cGFjaXR5IGlmIG5lZWRlZC4KKyAqLworc3RhdGljIHZvaWQKK2luY3JlbWVudF9ub25udWxscyhX aW5kb3dPYmplY3Qgd2lub2JqLCBpbnQ2NCBwb3MpCit7CisJaWYgKHdpbm9iai0+bm9ubnVsbHNf bGVuID09IHdpbm9iai0+bm9ubnVsbHNfc2l6ZSkKKwl7CisJCXdpbm9iai0+bm9ubnVsbHNfc2l6 ZSAqPSAyOworCQl3aW5vYmotPndpbl9ub25udWxscyA9CisJCQlyZXBhbGxvY19hcnJheSh3aW5v YmotPndpbl9ub25udWxscywKKwkJCQkJCSAgIGludDY0LAorCQkJCQkJICAgd2lub2JqLT5ub25u dWxsc19zaXplKTsKKwl9CisJd2lub2JqLT53aW5fbm9ubnVsbHNbd2lub2JqLT5ub25udWxsc19s ZW5dID0gcG9zOworCXdpbm9iai0+bm9ubnVsbHNfbGVuKys7Cit9CisKKy8qCisgKiBpZ25vcmVu dWxsc19nZXRmdW5jYXJnaW5wYXJ0aXRpb24KKyAqIEZvciBJR05PUkUgTlVMTFMsIGdldCB0aGUg bmV4dCBub25udWxsIHZhbHVlIGluIHRoZSBwYXJ0aXRpb24sIG1vdmluZyBmb3J3YXJkIG9yIGJh Y2t3YXJkCisgKiB1bnRpbCB3ZSBmaW5kIGEgdmFsdWUgb3IgcmVhY2ggdGhlIHBhcnRpdGlvbidz IGVuZC4KKyAqLworc3RhdGljIERhdHVtCitpZ25vcmVudWxsc19nZXRmdW5jYXJnaW5wYXJ0aXRp b24oV2luZG93T2JqZWN0IHdpbm9iaiwgaW50IGFyZ25vLAorCQkJCQkJCQkgIGludCByZWxwb3Ms IGludCBzZWVrdHlwZSwgYm9vbCBzZXRfbWFyaywKKwkJCQkJCQkJICBib29sICppc251bGwsIGJv b2wgKmlzb3V0KQoreworCVdpbmRvd0FnZ1N0YXRlICp3aW5zdGF0ZTsKKwlFeHByQ29udGV4dCAq ZWNvbnRleHQ7CisJVHVwbGVUYWJsZVNsb3QgKnNsb3Q7CisJRGF0dW0JCWRhdHVtOworCWJvb2wJ CWdvdHR1cGxlOworCWludDY0CQlhYnNfcG9zOworCWludAkJCW5vdG51bGxfb2Zmc2V0OworCWlu dAkJCW5vdG51bGxfcmVscG9zOworCWludAkJCWZvcndhcmQ7CisJaW50CQkJaTsKKworCUFzc2Vy dChXaW5kb3dPYmplY3RJc1ZhbGlkKHdpbm9iaikpOworCXdpbnN0YXRlID0gd2lub2JqLT53aW5z dGF0ZTsKKwllY29udGV4dCA9IHdpbnN0YXRlLT5zcy5wcy5wc19FeHByQ29udGV4dDsKKwlzbG90 ID0gd2luc3RhdGUtPnRlbXBfc2xvdF8xOworCW5vdG51bGxfb2Zmc2V0ID0gMDsKKwlub3RudWxs X3JlbHBvcyA9IGFicyhyZWxwb3MpOworCWZvcndhcmQgPSByZWxwb3MgPiAwID8gMSA6IC0xOwor CisJc3dpdGNoIChzZWVrdHlwZSkKKwl7CisJCWNhc2UgV0lORE9XX1NFRUtfQ1VSUkVOVDoKKwkJ CWFic19wb3MgPSB3aW5zdGF0ZS0+Y3VycmVudHBvczsKKwkJCWJyZWFrOworCQljYXNlIFdJTkRP V19TRUVLX0hFQUQ6CisJCQlhYnNfcG9zID0gMDsKKwkJCWJyZWFrOworCQljYXNlIFdJTkRPV19T RUVLX1RBSUw6CisJCQlzcG9vbF90dXBsZXMod2luc3RhdGUsIC0xKTsKKwkJCWFic19wb3MgPSB3 aW5zdGF0ZS0+c3Bvb2xlZF9yb3dzIC0gMTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZWxv ZyhFUlJPUiwgInVucmVjb2duaXplZCB3aW5kb3cgc2VlayB0eXBlOiAlZCIsIHNlZWt0eXBlKTsK KwkJCWFic19wb3MgPSAwOwkJLyoga2VlcCBjb21waWxlciBxdWlldCAqLworCQkJYnJlYWs7CisJ fQorCisJaWYgKGZvcndhcmQgPT0gLTEpCisJCWdvdG8gY2hlY2tfcGFydGl0aW9uOworCisJLyog aWYgd2UncmUgbW92aW5nIGZvcndhcmQsIHN0b3JlIHByZXZpb3VzIHJvd3MgKi8KKwlmb3IgKGkg PSAwOyBpIDwgd2lub2JqLT5ub25udWxsc19sZW47ICsraSkKKwl7CisJCWludDY0CW5vbm51bGwg PSB3aW5vYmotPndpbl9ub25udWxsc1tpXTsKKworCQlpZiAobm9ubnVsbCA+IGFic19wb3MpCisJ CXsKKwkJCWFic19wb3MgPSBub25udWxsOworCQkJKytub3RudWxsX29mZnNldDsKKwkJCWlmIChu b3RudWxsX29mZnNldCA9PSBub3RudWxsX3JlbHBvcykKKwkJCXsKKwkJCQlpZiAoaXNvdXQpCisJ CQkJCSppc291dCA9IGZhbHNlOworCQkJCXdpbmRvd19nZXR0dXBsZXNsb3Qod2lub2JqLCBhYnNf cG9zLCBzbG90KTsKKwkJCQllY29udGV4dC0+ZWN4dF9vdXRlcnR1cGxlID0gc2xvdDsKKwkJCQly ZXR1cm4gRXhlY0V2YWxFeHByKChFeHByU3RhdGUgKikgbGlzdF9udGgod2lub2JqLT5hcmdzdGF0 ZXMsIGFyZ25vKSwKKwkJCQkJCQkJCWVjb250ZXh0LCBpc251bGwpOworCQkJfQorCQl9CisJfQor CitjaGVja19wYXJ0aXRpb246CisJZG8KKwl7CisJCWFic19wb3MgKz0gZm9yd2FyZDsKKwkJZ290 dHVwbGUgPSB3aW5kb3dfZ2V0dHVwbGVzbG90KHdpbm9iaiwgYWJzX3Bvcywgc2xvdCk7CisKKwkJ aWYgKCFnb3R0dXBsZSkKKwkJeworCQkJaWYgKGlzb3V0KQorCQkJCSppc291dCA9IHRydWU7CisJ CQkqaXNudWxsID0gdHJ1ZTsKKwkJCXJldHVybiAoRGF0dW0pIDA7CisJCX0KKworCQlpZiAoaXNv dXQpCisJCQkqaXNvdXQgPSBmYWxzZTsKKwkJZWNvbnRleHQtPmVjeHRfb3V0ZXJ0dXBsZSA9IHNs b3Q7CisJCWRhdHVtID0gRXhlY0V2YWxFeHByKChFeHByU3RhdGUgKikgbGlzdF9udGgod2lub2Jq LT5hcmdzdGF0ZXMsIGFyZ25vKSwKKwkJCQkJCQkgZWNvbnRleHQsIGlzbnVsbCk7CisKKwkJaWYg KCEqaXNudWxsKQorCQl7CisJCQkrK25vdG51bGxfb2Zmc2V0OworCQkJaW5jcmVtZW50X25vbm51 bGxzKHdpbm9iaiwgYWJzX3Bvcyk7CisJCX0KKwl9IHdoaWxlIChub3RudWxsX29mZnNldCA8IG5v dG51bGxfcmVscG9zKTsKKworCWlmIChzZXRfbWFyaykKKwkJV2luU2V0TWFya1Bvc2l0aW9uKHdp bm9iaiwgYWJzX3Bvcyk7CisJcmV0dXJuIGRhdHVtOworfQorCisvKgorICogaWdub3JlbnVsbHNf Z2V0ZnVuY2FyZ2luZnJhbWUKKyAqIEZvciBJR05PUkUgTlVMTFMsIGdldCB0aGUgbmV4dCBub25u dWxsIHZhbHVlIGluIHRoZSBmcmFtZSwgbW92aW5nIGZvcndhcmQgb3IgYmFja3dhcmQKKyAqIHVu dGlsIHdlIGZpbmQgYSB2YWx1ZSBvciByZWFjaCB0aGUgZnJhbWUncyBlbmQuCisgKi8KK3N0YXRp YyBEYXR1bQoraWdub3JlbnVsbHNfZ2V0ZnVuY2FyZ2luZnJhbWUoV2luZG93T2JqZWN0IHdpbm9i aiwgaW50IGFyZ25vLAorCQkJCQkJCSAgaW50IHJlbHBvcywgaW50IHNlZWt0eXBlLCBib29sIHNl dF9tYXJrLAorCQkJCQkJCSAgYm9vbCAqaXNudWxsLCBib29sICppc291dCkKK3sKKwlXaW5kb3dB Z2dTdGF0ZSAqd2luc3RhdGU7CisJRXhwckNvbnRleHQgKmVjb250ZXh0OworCVR1cGxlVGFibGVT bG90ICpzbG90OworCURhdHVtCQlkYXR1bTsKKwlpbnQ2NAkJYWJzX3BvczsKKwlpbnQ2NAkJbWFy a19wb3M7CisJaW50CQkJbm90bnVsbF9vZmZzZXQ7CisJaW50CQkJbm90bnVsbF9yZWxwb3M7CisJ aW50CQkJZm9yd2FyZDsKKwlpbnQJCQlpOworCisJQXNzZXJ0KFdpbmRvd09iamVjdElzVmFsaWQo d2lub2JqKSk7CisJd2luc3RhdGUgPSB3aW5vYmotPndpbnN0YXRlOworCWVjb250ZXh0ID0gd2lu c3RhdGUtPnNzLnBzLnBzX0V4cHJDb250ZXh0OworCXNsb3QgPSB3aW5zdGF0ZS0+dGVtcF9zbG90 XzE7CisJZGF0dW0gPSAoRGF0dW0pIDA7CisJbm90bnVsbF9vZmZzZXQgPSAwOworCW5vdG51bGxf cmVscG9zID0gYWJzKHJlbHBvcyk7CisKKwlzd2l0Y2ggKHNlZWt0eXBlKQorCXsKKwkJY2FzZSBX SU5ET1dfU0VFS19DVVJSRU5UOgorCQkJZWxvZyhFUlJPUiwgIldJTkRPV19TRUVLX0NVUlJFTlQg aXMgbm90IHN1cHBvcnRlZCBmb3IgV2luR2V0RnVuY0FyZ0luRnJhbWUiKTsKKwkJCWFic19wb3Mg PSBtYXJrX3BvcyA9IDA7IC8qIGtlZXAgY29tcGlsZXIgcXVpZXQgKi8KKwkJCWJyZWFrOworCQlj YXNlIFdJTkRPV19TRUVLX0hFQUQ6CisJCQkvKiByZWplY3RpbmcgcmVscG9zIDwgMCBpcyBlYXN5 IGFuZCBzaW1wbGlmaWVzIGNvZGUgYmVsb3cgKi8KKwkJCWlmIChyZWxwb3MgPCAwKQorCQkJCWdv dG8gb3V0X29mX2ZyYW1lOworCQkJdXBkYXRlX2ZyYW1laGVhZHBvcyh3aW5zdGF0ZSk7CisJCQlh YnNfcG9zID0gd2luc3RhdGUtPmZyYW1laGVhZHBvczsKKwkJCW1hcmtfcG9zID0gd2luc3RhdGUt PmZyYW1laGVhZHBvczsKKwkJCWZvcndhcmQgPSAxOworCQkJaWYgKHdpbnN0YXRlLT5mcmFtZU9w dGlvbnMgJiBGUkFNRU9QVElPTl9FWENMVVNJT04pCisJCQkJZ290byBjaGVja19mcmFtZTsKKwkJ CWJyZWFrOworCQljYXNlIFdJTkRPV19TRUVLX1RBSUw6CisJCQkvKiByZWplY3RpbmcgcmVscG9z ID4gMCBpcyBlYXN5IGFuZCBzaW1wbGlmaWVzIGNvZGUgYmVsb3cgKi8KKwkJCWlmIChyZWxwb3Mg PiAwKQorCQkJCWdvdG8gb3V0X29mX2ZyYW1lOworCQkJdXBkYXRlX2ZyYW1ldGFpbHBvcyh3aW5z dGF0ZSk7CisJCQlhYnNfcG9zID0gd2luc3RhdGUtPmZyYW1ldGFpbHBvcyAtIDE7CisJCQltYXJr X3BvcyA9IDA7IC8qIGtlZXAgY29tcGlsZXIgcXVpZXQgKi8KKwkJCWZvcndhcmQgPSAtMTsKKwkJ CWdvdG8gY2hlY2tfZnJhbWU7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWVsb2coRVJST1Is ICJ1bnJlY29nbml6ZWQgd2luZG93IHNlZWsgdHlwZTogJWQiLCBzZWVrdHlwZSk7CisJCQlhYnNf cG9zID0gbWFya19wb3MgPSAwOyAvKiBrZWVwIGNvbXBpbGVyIHF1aWV0ICovCisJCQlicmVhazsK Kwl9CisKKwkvKgorCSAqIFN0b3JlIHByZXZpb3VzIHJvd3MuIE9ubHkgcG9zc2libGUgaW4gU0VF S19IRUFEIG1vZGUgd2l0aG91dCBhbgorCSAqIGV4Y2x1c2lvbiBjbGF1c2UuCisJICovCisJZm9y IChpID0gMDsgaSA8IHdpbm9iai0+bm9ubnVsbHNfbGVuOyArK2kpCisJeworCQlpbnQJCQlpbmZy YW1lOworCQlpbnQ2NAlub25udWxsID0gd2lub2JqLT53aW5fbm9ubnVsbHNbaV07CisKKwkJaWYg KG5vbm51bGwgPCB3aW5vYmotPm1hcmtwb3MpCisJCQljb250aW51ZTsKKwkJaWYgKCF3aW5kb3df Z2V0dHVwbGVzbG90KHdpbm9iaiwgbm9ubnVsbCwgc2xvdCkpCisJCQljb250aW51ZTsKKworCQlp bmZyYW1lID0gcm93X2lzX2luX2ZyYW1lKHdpbnN0YXRlLCBub25udWxsLCBzbG90KTsKKwkJaWYg KGluZnJhbWUgPD0gMCkKKwkJCWNvbnRpbnVlOworCisJCWFic19wb3MgPSBub25udWxsICsgMTsK KwkJKytub3RudWxsX29mZnNldDsKKworCQlpZiAobm90bnVsbF9vZmZzZXQgPiBub3RudWxsX3Jl bHBvcykKKwkJeworCQkJaWYgKGlzb3V0KQorCQkJCSppc291dCA9IGZhbHNlOworCQkJZWNvbnRl eHQtPmVjeHRfb3V0ZXJ0dXBsZSA9IHNsb3Q7CisJCQlyZXR1cm4gRXhlY0V2YWxFeHByKChFeHBy U3RhdGUgKikgbGlzdF9udGgod2lub2JqLT5hcmdzdGF0ZXMsIGFyZ25vKSwKKwkJCQkJCQkJZWNv bnRleHQsIGlzbnVsbCk7CisJCX0KKwl9CisKK2NoZWNrX2ZyYW1lOgorCWRvCisJeworCQlpbnQJ CQlpbmZyYW1lOworCisJCWlmICghd2luZG93X2dldHR1cGxlc2xvdCh3aW5vYmosIGFic19wb3Ms IHNsb3QpKQorCQkJZ290byBvdXRfb2ZfZnJhbWU7CisKKwkJaW5mcmFtZSA9IHJvd19pc19pbl9m cmFtZSh3aW5zdGF0ZSwgYWJzX3Bvcywgc2xvdCk7CisJCWlmIChpbmZyYW1lID09IC0xKQorCQkJ Z290byBvdXRfb2ZfZnJhbWU7CisJCWVsc2UgaWYgKGluZnJhbWUgPT0gMCkKKwkJCWdvdG8gYWR2 YW5jZTsKKworCQlpZiAoaXNvdXQpCisJCQkqaXNvdXQgPSBmYWxzZTsKKwkJZWNvbnRleHQtPmVj eHRfb3V0ZXJ0dXBsZSA9IHNsb3Q7CisJCWRhdHVtID0gRXhlY0V2YWxFeHByKChFeHByU3RhdGUg KikgbGlzdF9udGgod2lub2JqLT5hcmdzdGF0ZXMsIGFyZ25vKSwKKwkJCQkJCQkgZWNvbnRleHQs IGlzbnVsbCk7CisKKwkJaWYgKCEqaXNudWxsKQorCQl7CisJCQkrK25vdG51bGxfb2Zmc2V0Owor CQkJaW5jcmVtZW50X25vbm51bGxzKHdpbm9iaiwgYWJzX3Bvcyk7CisJCX0KKworYWR2YW5jZToK KwkJYWJzX3BvcyArPSBmb3J3YXJkOworCX0gd2hpbGUgKG5vdG51bGxfb2Zmc2V0IDw9IG5vdG51 bGxfcmVscG9zKTsKKworCWlmIChzZXRfbWFyaykKKwkJV2luU2V0TWFya1Bvc2l0aW9uKHdpbm9i aiwgbWFya19wb3MpOworCisJcmV0dXJuIGRhdHVtOworCitvdXRfb2ZfZnJhbWU6CisJaWYgKGlz b3V0KQorCQkqaXNvdXQgPSB0cnVlOworCSppc251bGwgPSB0cnVlOworCXJldHVybiAoRGF0dW0p IDA7Cit9CisKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBBUEkgZXhwb3NlZCB0byB3aW5kb3cgZnVu Y3Rpb25zCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKiovCiAKIAorLyoKKyAqIFdpbkNoZWNrQW5kSW5pdGlhbGl6 ZU51bGxUcmVhdG1lbnQKKyAqCQlDaGVjayBudWxsIHRyZWF0bWVudCBjbGF1c2UgYW5kIHNldHMg aWdub3JlX251bGxzCisgKgorICogV2luZG93IGZ1bmN0aW9ucyBzaG91bGQgY2FsbCB0aGlzIHRv IGNoZWNrIGlmIHRoZXkgYXJlIGJlaW5nIGNhbGxlZCB3aXRoCisgKiBhIG51bGwgdHJlYXRtZW50 IGNsYXVzZSB3aGVuIHRoZXkgZG9uJ3QgYWxsb3cgaXQsIG9yIHRvIHNldCBpZ25vcmVfbnVsbHMu CisgKi8KK3ZvaWQKK1dpbkNoZWNrQW5kSW5pdGlhbGl6ZU51bGxUcmVhdG1lbnQoV2luZG93T2Jq ZWN0IHdpbm9iaiwKKwkJCQkJCQkJICAgYm9vbCBhbGxvd051bGxUcmVhdG1lbnQsCisJCQkJCQkJ CSAgIEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvKQoreworCWlmICh3aW5vYmotPmlnbm9yZV9udWxs cyAhPSBOT19OVUxMVFJFQVRNRU5UICYmICFhbGxvd051bGxUcmVhdG1lbnQpCisJeworCQlIZWFw VHVwbGUJcHJvY3R1cDsKKwkJRm9ybV9wZ19wcm9jIHByb2Nmb3JtOworCQlPaWQJCQlmdW5jaWQ7 CisKKwkJZnVuY2lkID0gZmNpbmZvLT5mbGluZm8tPmZuX29pZDsKKwkJcHJvY3R1cCA9IFNlYXJj aFN5c0NhY2hlMShQUk9DT0lELAorCQkJCQkJCQkgIE9iamVjdElkR2V0RGF0dW0oZnVuY2lkKSk7 CisJCWlmICghSGVhcFR1cGxlSXNWYWxpZChwcm9jdHVwKSkKKwkJCWVsb2coRVJST1IsICJjYWNo ZSBsb29rdXAgZmFpbGVkIGZvciBmdW5jdGlvbiAldSIsIGZ1bmNpZCk7CisJCXByb2Nmb3JtID0g KEZvcm1fcGdfcHJvYykgR0VUU1RSVUNUKHByb2N0dXApOworCQllbG9nKEVSUk9SLCAiZnVuY3Rp b24gJXMgZG9lcyBub3QgYWxsb3cgUkVTUEVDVC9JR05PUkUgTlVMTFMiLAorCQkJIE5hbWVTdHIo cHJvY2Zvcm0tPnByb25hbWUpKTsKKwl9CisJZWxzZSBpZiAod2lub2JqLT5pZ25vcmVfbnVsbHMg PT0gUEFSU0VSX0lHTk9SRV9OVUxMUykKKwkJd2lub2JqLT5pZ25vcmVfbnVsbHMgPSBJR05PUkVf TlVMTFM7CisKK30KKwogLyoKICAqIFdpbkdldFBhcnRpdGlvbkxvY2FsTWVtb3J5CiAgKgkJR2V0 IHdvcmtpbmcgbWVtb3J5IHRoYXQgbGl2ZXMgdGlsbCBlbmQgb2YgcGFydGl0aW9uIHByb2Nlc3Np bmcKQEAgLTMzODgsNiArMzcwOSwxMCBAQCBXaW5HZXRGdW5jQXJnSW5QYXJ0aXRpb24oV2luZG93 T2JqZWN0IHdpbm9iaiwgaW50IGFyZ25vLAogCWVjb250ZXh0ID0gd2luc3RhdGUtPnNzLnBzLnBz X0V4cHJDb250ZXh0OwogCXNsb3QgPSB3aW5zdGF0ZS0+dGVtcF9zbG90XzE7CiAKKwlpZiAod2lu b2JqLT5pZ25vcmVfbnVsbHMgPT0gSUdOT1JFX05VTExTICYmIHJlbHBvcyAhPSAwKQorCQlyZXR1 cm4gaWdub3JlbnVsbHNfZ2V0ZnVuY2FyZ2lucGFydGl0aW9uKHdpbm9iaiwgYXJnbm8sIHJlbHBv cywgc2Vla3R5cGUsCisJCQkJCQkJCQkJCQkgc2V0X21hcmssIGlzbnVsbCwgaXNvdXQpOworCiAJ c3dpdGNoIChzZWVrdHlwZSkKIAl7CiAJCWNhc2UgV0lORE9XX1NFRUtfQ1VSUkVOVDoKQEAgLTM0 NzYsNiArMzgwMSwxMCBAQCBXaW5HZXRGdW5jQXJnSW5GcmFtZShXaW5kb3dPYmplY3Qgd2lub2Jq LCBpbnQgYXJnbm8sCiAJZWNvbnRleHQgPSB3aW5zdGF0ZS0+c3MucHMucHNfRXhwckNvbnRleHQ7 CiAJc2xvdCA9IHdpbnN0YXRlLT50ZW1wX3Nsb3RfMTsKIAorCWlmICh3aW5vYmotPmlnbm9yZV9u dWxscyA9PSBJR05PUkVfTlVMTFMpCisJCXJldHVybiBpZ25vcmVudWxsc19nZXRmdW5jYXJnaW5m cmFtZSh3aW5vYmosIGFyZ25vLCByZWxwb3MsIHNlZWt0eXBlLAorCQkJCQkJCQkJCQkgc2V0X21h cmssIGlzbnVsbCwgaXNvdXQpOworCiAJc3dpdGNoIChzZWVrdHlwZSkKIAl7CiAJCWNhc2UgV0lO RE9XX1NFRUtfQ1VSUkVOVDoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci91dGls L2NsYXVzZXMuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL2NsYXVzZXMuYwppbmRleCA0 M2RmZWNmYjQ3Li5lNzA5MWQ3NDY4IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIv dXRpbC9jbGF1c2VzLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvY2xhdXNlcy5j CkBAIC0yNTcwLDYgKzI1NzAsNyBAQCBldmFsX2NvbnN0X2V4cHJlc3Npb25zX211dGF0b3IoTm9k ZSAqbm9kZSwKIAkJCQluZXdleHByLT53aW5yZWYgPSBleHByLT53aW5yZWY7CiAJCQkJbmV3ZXhw ci0+d2luc3RhciA9IGV4cHItPndpbnN0YXI7CiAJCQkJbmV3ZXhwci0+d2luYWdnID0gZXhwci0+ d2luYWdnOworCQkJCW5ld2V4cHItPmlnbm9yZV9udWxscyA9IGV4cHItPmlnbm9yZV9udWxsczsK IAkJCQluZXdleHByLT5sb2NhdGlvbiA9IGV4cHItPmxvY2F0aW9uOwogCiAJCQkJcmV0dXJuIChO b2RlICopIG5ld2V4cHI7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wYXJzZXIvZ3JhbS55IGIv c3JjL2JhY2tlbmQvcGFyc2VyL2dyYW0ueQppbmRleCBkMzg4NzYyOGQ0Li4yZWFjNGQyN2U3IDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9wYXJzZXIvZ3JhbS55CisrKyBiL3NyYy9iYWNrZW5kL3Bh cnNlci9ncmFtLnkKQEAgLTYzMiw3ICs2MzIsNyBAQCBzdGF0aWMgTm9kZSAqbWFrZVJlY3Vyc2l2 ZVZpZXdTZWxlY3QoY2hhciAqcmVsbmFtZSwgTGlzdCAqYWxpYXNlcywgTm9kZSAqcXVlcnkpOwog JXR5cGUgPGxpc3Q+CXdpbmRvd19jbGF1c2Ugd2luZG93X2RlZmluaXRpb25fbGlzdCBvcHRfcGFy dGl0aW9uX2NsYXVzZQogJXR5cGUgPHdpbmRlZj4Jd2luZG93X2RlZmluaXRpb24gb3Zlcl9jbGF1 c2Ugd2luZG93X3NwZWNpZmljYXRpb24KIAkJCQlvcHRfZnJhbWVfY2xhdXNlIGZyYW1lX2V4dGVu dCBmcmFtZV9ib3VuZAotJXR5cGUgPGl2YWw+CW9wdF93aW5kb3dfZXhjbHVzaW9uX2NsYXVzZQor JXR5cGUgPGl2YWw+CW51bGxfdHJlYXRtZW50IG9wdF93aW5kb3dfZXhjbHVzaW9uX2NsYXVzZQog JXR5cGUgPHN0cj4JCW9wdF9leGlzdGluZ193aW5kb3dfbmFtZQogJXR5cGUgPGJvb2xlYW4+IG9w dF9pZl9ub3RfZXhpc3RzCiAldHlwZSA8Ym9vbGVhbj4gb3B0X3VuaXF1ZV9udWxsX3RyZWF0bWVu dApAQCAtNzMwLDcgKzczMCw3IEBAIHN0YXRpYyBOb2RlICptYWtlUmVjdXJzaXZlVmlld1NlbGVj dChjaGFyICpyZWxuYW1lLCBMaXN0ICphbGlhc2VzLCBOb2RlICpxdWVyeSk7CiAKIAlIQU5ETEVS IEhBVklORyBIRUFERVJfUCBIT0xEIEhPVVJfUAogCi0JSURFTlRJVFlfUCBJRl9QIElMSUtFIElN TUVESUFURSBJTU1VVEFCTEUgSU1QTElDSVRfUCBJTVBPUlRfUCBJTl9QIElOQ0xVREUKKwlJREVO VElUWV9QIElGX1AgSUdOT1JFX1AgSUxJS0UgSU1NRURJQVRFIElNTVVUQUJMRSBJTVBMSUNJVF9Q IElNUE9SVF9QIElOX1AgSU5DTFVERQogCUlOQ0xVRElORyBJTkNSRU1FTlQgSU5ERU5UIElOREVY IElOREVYRVMgSU5IRVJJVCBJTkhFUklUUyBJTklUSUFMTFkgSU5MSU5FX1AKIAlJTk5FUl9QIElO T1VUIElOUFVUX1AgSU5TRU5TSVRJVkUgSU5TRVJUIElOU1RFQUQgSU5UX1AgSU5URUdFUgogCUlO VEVSU0VDVCBJTlRFUlZBTCBJTlRPIElOVk9LRVIgSVMgSVNOVUxMIElTT0xBVElPTgpAQCAtNzY1 LDcgKzc2NSw3IEBAIHN0YXRpYyBOb2RlICptYWtlUmVjdXJzaXZlVmlld1NlbGVjdChjaGFyICpy ZWxuYW1lLCBMaXN0ICphbGlhc2VzLCBOb2RlICpxdWVyeSk7CiAKIAlSQU5HRSBSRUFEIFJFQUwg UkVBU1NJR04gUkVDVVJTSVZFIFJFRl9QIFJFRkVSRU5DRVMgUkVGRVJFTkNJTkcKIAlSRUZSRVNI IFJFSU5ERVggUkVMQVRJVkVfUCBSRUxFQVNFIFJFTkFNRSBSRVBFQVRBQkxFIFJFUExBQ0UgUkVQ TElDQQotCVJFU0VUIFJFU1RBUlQgUkVTVFJJQ1QgUkVUVVJOIFJFVFVSTklORyBSRVRVUk5TIFJF Vk9LRSBSSUdIVCBST0xFIFJPTExCQUNLIFJPTExVUAorCVJFU0VUIFJFU1BFQ1RfUCBSRVNUQVJU IFJFU1RSSUNUIFJFVFVSTiBSRVRVUk5JTkcgUkVUVVJOUyBSRVZPS0UgUklHSFQgUk9MRSBST0xM QkFDSyBST0xMVVAKIAlST1VUSU5FIFJPVVRJTkVTIFJPVyBST1dTIFJVTEUKIAogCVNBVkVQT0lO VCBTQ0FMQVIgU0NIRU1BIFNDSEVNQVMgU0NST0xMIFNFQVJDSCBTRUNPTkRfUCBTRUNVUklUWSBT RUxFQ1QKQEAgLTE1NzMwLDcgKzE1NzMwLDcgQEAgZnVuY19hcHBsaWNhdGlvbjogZnVuY19uYW1l ICcoJyAnKScKICAqIChOb3RlIHRoYXQgbWFueSBvZiB0aGUgc3BlY2lhbCBTUUwgZnVuY3Rpb25z IHdvdWxkbid0IGFjdHVhbGx5IG1ha2UgYW55CiAgKiBzZW5zZSBhcyBmdW5jdGlvbmFsIGluZGV4 IGVudHJpZXMsIGJ1dCB3ZSBpZ25vcmUgdGhhdCBjb25zaWRlcmF0aW9uIGhlcmUuKQogICovCi1m dW5jX2V4cHI6IGZ1bmNfYXBwbGljYXRpb24gd2l0aGluX2dyb3VwX2NsYXVzZSBmaWx0ZXJfY2xh dXNlIG92ZXJfY2xhdXNlCitmdW5jX2V4cHI6IGZ1bmNfYXBwbGljYXRpb24gd2l0aGluX2dyb3Vw X2NsYXVzZSBmaWx0ZXJfY2xhdXNlIG51bGxfdHJlYXRtZW50IG92ZXJfY2xhdXNlCiAJCQkJewog CQkJCQlGdW5jQ2FsbCAgICpuID0gKEZ1bmNDYWxsICopICQxOwogCkBAIC0xNTc2Myw3ICsxNTc2 Myw4IEBAIGZ1bmNfZXhwcjogZnVuY19hcHBsaWNhdGlvbiB3aXRoaW5fZ3JvdXBfY2xhdXNlIGZp bHRlcl9jbGF1c2Ugb3Zlcl9jbGF1c2UKIAkJCQkJCW4tPmFnZ193aXRoaW5fZ3JvdXAgPSB0cnVl OwogCQkJCQl9CiAJCQkJCW4tPmFnZ19maWx0ZXIgPSAkMzsKLQkJCQkJbi0+b3ZlciA9ICQ0Owor CQkJCQluLT5pZ25vcmVfbnVsbHMgPSAkNDsKKwkJCQkJbi0+b3ZlciA9ICQ1OwogCQkJCQkkJCA9 IChOb2RlICopIG47CiAJCQkJfQogCQkJfCBqc29uX2FnZ3JlZ2F0ZV9mdW5jIGZpbHRlcl9jbGF1 c2Ugb3Zlcl9jbGF1c2UKQEAgLTE2MzU5LDYgKzE2MzYwLDEyIEBAIGZpbHRlcl9jbGF1c2U6CiAv KgogICogV2luZG93IERlZmluaXRpb25zCiAgKi8KK251bGxfdHJlYXRtZW50OgorCQkJSUdOT1JF X1AgTlVMTFNfUAkJCQkJCXsgJCQgPSBQQVJTRVJfSUdOT1JFX05VTExTOyB9CisJCQl8IFJFU1BF Q1RfUCBOVUxMU19QCQkJCQkJeyAkJCA9IFBBUlNFUl9SRVNQRUNUX05VTExTOyB9CisJCQl8IC8q RU1QVFkqLwkJCQkJCQkJeyAkJCA9IE5PX05VTExUUkVBVE1FTlQ7IH0KKwkJOworCiB3aW5kb3df Y2xhdXNlOgogCQkJV0lORE9XIHdpbmRvd19kZWZpbml0aW9uX2xpc3QJCQl7ICQkID0gJDI7IH0K IAkJCXwgLypFTVBUWSovCQkJCQkJCQl7ICQkID0gTklMOyB9CkBAIC0xNzc5Niw2ICsxNzgwMyw3 IEBAIHVucmVzZXJ2ZWRfa2V5d29yZDoKIAkJCXwgSE9VUl9QCiAJCQl8IElERU5USVRZX1AKIAkJ CXwgSUZfUAorCQkJfCBJR05PUkVfUAogCQkJfCBJTU1FRElBVEUKIAkJCXwgSU1NVVRBQkxFCiAJ CQl8IElNUExJQ0lUX1AKQEAgLTE3OTEzLDYgKzE3OTIxLDcgQEAgdW5yZXNlcnZlZF9rZXl3b3Jk OgogCQkJfCBSRVBMQUNFCiAJCQl8IFJFUExJQ0EKIAkJCXwgUkVTRVQKKwkJCXwgUkVTUEVDVF9Q CiAJCQl8IFJFU1RBUlQKIAkJCXwgUkVTVFJJQ1QKIAkJCXwgUkVUVVJOCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfZnVuYy5jIGIvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNl X2Z1bmMuYwppbmRleCA1ODNiYmJmMjMyLi4zNzcyYzUxNGIxIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9wYXJzZXIvcGFyc2VfZnVuYy5jCisrKyBiL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9m dW5jLmMKQEAgLTk4LDYgKzk4LDcgQEAgUGFyc2VGdW5jT3JDb2x1bW4oUGFyc2VTdGF0ZSAqcHN0 YXRlLCBMaXN0ICpmdW5jbmFtZSwgTGlzdCAqZmFyZ3MsCiAJYm9vbAkJYWdnX3N0YXIgPSAoZm4g PyBmbi0+YWdnX3N0YXIgOiBmYWxzZSk7CiAJYm9vbAkJYWdnX2Rpc3RpbmN0ID0gKGZuID8gZm4t PmFnZ19kaXN0aW5jdCA6IGZhbHNlKTsKIAlib29sCQlmdW5jX3ZhcmlhZGljID0gKGZuID8gZm4t PmZ1bmNfdmFyaWFkaWMgOiBmYWxzZSk7CisJaW50CQkJaWdub3JlX251bGxzID0gKGZuID8gZm4t Pmlnbm9yZV9udWxscyA6IDApOwogCUNvZXJjaW9uRm9ybSBmdW5jZm9ybWF0ID0gKGZuID8gZm4t PmZ1bmNmb3JtYXQgOiBDT0VSQ0VfRVhQTElDSVRfQ0FMTCk7CiAJYm9vbAkJY291bGRfYmVfcHJv amVjdGlvbjsKIAlPaWQJCQlyZXR0eXBlOwpAQCAtNTE0LDYgKzUxNSwxMyBAQCBQYXJzZUZ1bmNP ckNvbHVtbihQYXJzZVN0YXRlICpwc3RhdGUsIExpc3QgKmZ1bmNuYW1lLCBMaXN0ICpmYXJncywK IAkJCQkJCSBlcnJtc2coIiVzIGlzIG5vdCBhbiBvcmRlcmVkLXNldCBhZ2dyZWdhdGUsIHNvIGl0 IGNhbm5vdCBoYXZlIFdJVEhJTiBHUk9VUCIsCiAJCQkJCQkJCU5hbWVMaXN0VG9TdHJpbmcoZnVu Y25hbWUpKSwKIAkJCQkJCSBwYXJzZXJfZXJycG9zaXRpb24ocHN0YXRlLCBsb2NhdGlvbikpKTsK KworCQkJLyogSXQgYWxzbyBjYW4ndCB0cmVhdCBudWxscyBhcyBhIHdpbmRvdyBmdW5jdGlvbiAq LworCQkJaWYgKGlnbm9yZV9udWxscyAhPSBOT19OVUxMVFJFQVRNRU5UKQorCQkJCWVyZXBvcnQo RVJST1IsCisJCQkJCQkoZXJyY29kZShFUlJDT0RFX1dST05HX09CSkVDVF9UWVBFKSwKKwkJCQkJ CSBlcnJtc2coImFnZ3JlZ2F0ZSBmdW5jdGlvbnMgZG8gbm90IGFjY2VwdCBSRVNQRUNUL0lHTk9S RSBOVUxMUyIpLAorCQkJCQkJIHBhcnNlcl9lcnJwb3NpdGlvbihwc3RhdGUsIGxvY2F0aW9uKSkp OwogCQl9CiAJfQogCWVsc2UgaWYgKGZkcmVzdWx0ID09IEZVTkNERVRBSUxfV0lORE9XRlVOQykK QEAgLTgzNCw2ICs4NDIsNyBAQCBQYXJzZUZ1bmNPckNvbHVtbihQYXJzZVN0YXRlICpwc3RhdGUs IExpc3QgKmZ1bmNuYW1lLCBMaXN0ICpmYXJncywKIAkJd2Z1bmMtPndpbnN0YXIgPSBhZ2dfc3Rh cjsKIAkJd2Z1bmMtPndpbmFnZyA9IChmZHJlc3VsdCA9PSBGVU5DREVUQUlMX0FHR1JFR0FURSk7 CiAJCXdmdW5jLT5hZ2dmaWx0ZXIgPSBhZ2dfZmlsdGVyOworCQl3ZnVuYy0+aWdub3JlX251bGxz ID0gaWdub3JlX251bGxzOwogCQl3ZnVuYy0+cnVuQ29uZGl0aW9uID0gTklMOwogCQl3ZnVuYy0+ bG9jYXRpb24gPSBsb2NhdGlvbjsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0 L3J1bGV1dGlscy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3J1bGV1dGlscy5jCmluZGV4IDU0 ZGFkOTc1NTUuLjRjMDgzN2NiMmEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9y dWxldXRpbHMuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvcnVsZXV0aWxzLmMKQEAgLTEx MDIxLDcgKzExMDIxLDEyIEBAIGdldF93aW5kb3dmdW5jX2V4cHJfaGVscGVyKFdpbmRvd0Z1bmMg KndmdW5jLCBkZXBhcnNlX2NvbnRleHQgKmNvbnRleHQsCiAJCWdldF9ydWxlX2V4cHIoKE5vZGUg Kikgd2Z1bmMtPmFnZ2ZpbHRlciwgY29udGV4dCwgZmFsc2UpOwogCX0KIAotCWFwcGVuZFN0cmlu Z0luZm9TdHJpbmcoYnVmLCAiKSBPVkVSICIpOworCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVm LCAiKSAiKTsKKworCWlmICh3ZnVuYy0+aWdub3JlX251bGxzID09IFBBUlNFUl9JR05PUkVfTlVM TFMpCisJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCAiSUdOT1JFIE5VTExTICIpOworCisJ YXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsICJPVkVSICIpOwogCiAJZm9yZWFjaChsLCBjb250 ZXh0LT53aW5kb3dDbGF1c2UpCiAJewpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0 L3dpbmRvd2Z1bmNzLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvd2luZG93ZnVuY3MuYwppbmRl eCBiYjM1ZjNiYzRhLi45NjlmMDJhYTU5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9h ZHQvd2luZG93ZnVuY3MuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvd2luZG93ZnVuY3Mu YwpAQCAtODYsNiArODYsNyBAQCB3aW5kb3dfcm93X251bWJlcihQR19GVU5DVElPTl9BUkdTKQog CVdpbmRvd09iamVjdCB3aW5vYmogPSBQR19XSU5ET1dfT0JKRUNUKCk7CiAJaW50NjQJCWN1cnBv cyA9IFdpbkdldEN1cnJlbnRQb3NpdGlvbih3aW5vYmopOwogCisJV2luQ2hlY2tBbmRJbml0aWFs aXplTnVsbFRyZWF0bWVudCh3aW5vYmosIGZhbHNlLCBmY2luZm8pOwogCVdpblNldE1hcmtQb3Np dGlvbih3aW5vYmosIGN1cnBvcyk7CiAJUEdfUkVUVVJOX0lOVDY0KGN1cnBvcyArIDEpOwogfQpA QCAtMTQxLDYgKzE0Miw3IEBAIHdpbmRvd19yYW5rKFBHX0ZVTkNUSU9OX0FSR1MpCiAJcmFua19j b250ZXh0ICpjb250ZXh0OwogCWJvb2wJCXVwOwogCisJV2luQ2hlY2tBbmRJbml0aWFsaXplTnVs bFRyZWF0bWVudCh3aW5vYmosIGZhbHNlLCBmY2luZm8pOwogCXVwID0gcmFua191cCh3aW5vYmop OwogCWNvbnRleHQgPSAocmFua19jb250ZXh0ICopCiAJCVdpbkdldFBhcnRpdGlvbkxvY2FsTWVt b3J5KHdpbm9iaiwgc2l6ZW9mKHJhbmtfY29udGV4dCkpOwpAQCAtMjAzLDYgKzIwNSw3IEBAIHdp bmRvd19kZW5zZV9yYW5rKFBHX0ZVTkNUSU9OX0FSR1MpCiAJcmFua19jb250ZXh0ICpjb250ZXh0 OwogCWJvb2wJCXVwOwogCisJV2luQ2hlY2tBbmRJbml0aWFsaXplTnVsbFRyZWF0bWVudCh3aW5v YmosIGZhbHNlLCBmY2luZm8pOwogCXVwID0gcmFua191cCh3aW5vYmopOwogCWNvbnRleHQgPSAo cmFua19jb250ZXh0ICopCiAJCVdpbkdldFBhcnRpdGlvbkxvY2FsTWVtb3J5KHdpbm9iaiwgc2l6 ZW9mKHJhbmtfY29udGV4dCkpOwpAQCAtMjY2LDYgKzI2OSw3IEBAIHdpbmRvd19wZXJjZW50X3Jh bmsoUEdfRlVOQ1RJT05fQVJHUykKIAlpbnQ2NAkJdG90YWxyb3dzID0gV2luR2V0UGFydGl0aW9u Um93Q291bnQod2lub2JqKTsKIAogCUFzc2VydCh0b3RhbHJvd3MgPiAwKTsKKwlXaW5DaGVja0Fu ZEluaXRpYWxpemVOdWxsVHJlYXRtZW50KHdpbm9iaiwgZmFsc2UsIGZjaW5mbyk7CiAKIAl1cCA9 IHJhbmtfdXAod2lub2JqKTsKIAljb250ZXh0ID0gKHJhbmtfY29udGV4dCAqKQpAQCAtMzM1LDYg KzMzOSw3IEBAIHdpbmRvd19jdW1lX2Rpc3QoUEdfRlVOQ1RJT05fQVJHUykKIAlpbnQ2NAkJdG90 YWxyb3dzID0gV2luR2V0UGFydGl0aW9uUm93Q291bnQod2lub2JqKTsKIAogCUFzc2VydCh0b3Rh bHJvd3MgPiAwKTsKKwlXaW5DaGVja0FuZEluaXRpYWxpemVOdWxsVHJlYXRtZW50KHdpbm9iaiwg ZmFsc2UsIGZjaW5mbyk7CiAKIAl1cCA9IHJhbmtfdXAod2lub2JqKTsKIAljb250ZXh0ID0gKHJh bmtfY29udGV4dCAqKQpAQCAtNDEzLDYgKzQxOCw3IEBAIHdpbmRvd19udGlsZShQR19GVU5DVElP Tl9BUkdTKQogCVdpbmRvd09iamVjdCB3aW5vYmogPSBQR19XSU5ET1dfT0JKRUNUKCk7CiAJbnRp bGVfY29udGV4dCAqY29udGV4dDsKIAorCVdpbkNoZWNrQW5kSW5pdGlhbGl6ZU51bGxUcmVhdG1l bnQod2lub2JqLCBmYWxzZSwgZmNpbmZvKTsKIAljb250ZXh0ID0gKG50aWxlX2NvbnRleHQgKikK IAkJV2luR2V0UGFydGl0aW9uTG9jYWxNZW1vcnkod2lub2JqLCBzaXplb2YobnRpbGVfY29udGV4 dCkpOwogCkBAIC01MzUsNiArNTQxLDcgQEAgbGVhZGxhZ19jb21tb24oRnVuY3Rpb25DYWxsSW5m byBmY2luZm8sCiAJYm9vbAkJaXNudWxsOwogCWJvb2wJCWlzb3V0OwogCisJV2luQ2hlY2tBbmRJ bml0aWFsaXplTnVsbFRyZWF0bWVudCh3aW5vYmosIHRydWUsIGZjaW5mbyk7CiAJaWYgKHdpdGhv ZmZzZXQpCiAJewogCQlvZmZzZXQgPSBEYXR1bUdldEludDMyKFdpbkdldEZ1bmNBcmdDdXJyZW50 KHdpbm9iaiwgMSwgJmlzbnVsbCkpOwpAQCAtNjUyLDYgKzY1OSw3IEBAIHdpbmRvd19maXJzdF92 YWx1ZShQR19GVU5DVElPTl9BUkdTKQogCURhdHVtCQlyZXN1bHQ7CiAJYm9vbAkJaXNudWxsOwog CisJV2luQ2hlY2tBbmRJbml0aWFsaXplTnVsbFRyZWF0bWVudCh3aW5vYmosIHRydWUsIGZjaW5m byk7CiAJcmVzdWx0ID0gV2luR2V0RnVuY0FyZ0luRnJhbWUod2lub2JqLCAwLAogCQkJCQkJCQkg IDAsIFdJTkRPV19TRUVLX0hFQUQsIHRydWUsCiAJCQkJCQkJCSAgJmlzbnVsbCwgTlVMTCk7CkBA IC02NzMsNiArNjgxLDcgQEAgd2luZG93X2xhc3RfdmFsdWUoUEdfRlVOQ1RJT05fQVJHUykKIAlE YXR1bQkJcmVzdWx0OwogCWJvb2wJCWlzbnVsbDsKIAorCVdpbkNoZWNrQW5kSW5pdGlhbGl6ZU51 bGxUcmVhdG1lbnQod2lub2JqLCB0cnVlLCBmY2luZm8pOwogCXJlc3VsdCA9IFdpbkdldEZ1bmNB cmdJbkZyYW1lKHdpbm9iaiwgMCwKIAkJCQkJCQkJICAwLCBXSU5ET1dfU0VFS19UQUlMLCB0cnVl LAogCQkJCQkJCQkgICZpc251bGwsIE5VTEwpOwpAQCAtNjk2LDYgKzcwNSw3IEBAIHdpbmRvd19u dGhfdmFsdWUoUEdfRlVOQ1RJT05fQVJHUykKIAlib29sCQlpc251bGw7CiAJaW50MzIJCW50aDsK IAorCVdpbkNoZWNrQW5kSW5pdGlhbGl6ZU51bGxUcmVhdG1lbnQod2lub2JqLCB0cnVlLCBmY2lu Zm8pOwogCW50aCA9IERhdHVtR2V0SW50MzIoV2luR2V0RnVuY0FyZ0N1cnJlbnQod2lub2JqLCAx LCAmaXNudWxsKSk7CiAJaWYgKGlzbnVsbCkKIAkJUEdfUkVUVVJOX05VTEwoKTsKZGlmZiAtLWdp dCBhL3NyYy9pbmNsdWRlL25vZGVzL3BhcnNlbm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL3Bh cnNlbm9kZXMuaAppbmRleCA4ZGQ0MjFmYTBlLi4yZmNkYmY2MWQyIDEwMDY0NAotLS0gYS9zcmMv aW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vu b2Rlcy5oCkBAIC00MzksNiArNDM5LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgRnVuY0NhbGwKIAlMaXN0 CSAgICphZ2dfb3JkZXI7CQkvKiBPUkRFUiBCWSAobGlzdCBvZiBTb3J0QnkpICovCiAJTm9kZQkg ICAqYWdnX2ZpbHRlcjsJCS8qIEZJTFRFUiBjbGF1c2UsIGlmIGFueSAqLwogCXN0cnVjdCBXaW5k b3dEZWYgKm92ZXI7CQkvKiBPVkVSIGNsYXVzZSwgaWYgYW55ICovCisJaW50CQkJaWdub3JlX251 bGxzOwkvKiBpZ25vcmUgbnVsbHMgZm9yIHdpbmRvdyBmdW5jdGlvbiAqLwogCWJvb2wJCWFnZ193 aXRoaW5fZ3JvdXA7CS8qIE9SREVSIEJZIGFwcGVhcmVkIGluIFdJVEhJTiBHUk9VUCAqLwogCWJv b2wJCWFnZ19zdGFyOwkJLyogYXJndW1lbnQgd2FzIHJlYWxseSAnKicgKi8KIAlib29sCQlhZ2df ZGlzdGluY3Q7CS8qIGFyZ3VtZW50cyB3ZXJlIGxhYmVsZWQgRElTVElOQ1QgKi8KZGlmZiAtLWdp dCBhL3NyYy9pbmNsdWRlL25vZGVzL3ByaW1ub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvcHJp bW5vZGVzLmgKaW5kZXggODM5ZTcxZDUyZi4uODJmODEyZmJkMCAxMDA2NDQKLS0tIGEvc3JjL2lu Y2x1ZGUvbm9kZXMvcHJpbW5vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvcHJpbW5vZGVz LmgKQEAgLTU3Nyw2ICs1NzcsMTcgQEAgdHlwZWRlZiBzdHJ1Y3QgR3JvdXBpbmdGdW5jCiAgKiBD b2xsYXRpb24gaW5mb3JtYXRpb24gaXMgaXJyZWxldmFudCBmb3IgdGhlIHF1ZXJ5IGp1bWJsaW5n LCBhcyBpcyB0aGUKICAqIGludGVybmFsIHN0YXRlIGluZm9ybWF0aW9uIG9mIHRoZSBub2RlIGxp a2UgIndpbnN0YXIiIGFuZCAid2luYWdnIi4KICAqLworCisvKgorICogTnVsbCBUcmVhdG1lbnQg b3B0aW9ucy4gSWYgc3BlY2lmaWVkLCBpbml0aWFsbHkgc2V0IHRvIFBBUlNFUl9JR05PUkVfTlVM TFMKKyAqIHdoaWNoIGlzIHRoZW4gY29udmVydGVkIHRvIElHTk9SRV9OVUxMUyBpZiB0aGUgd2lu ZG93IGZ1bmN0aW9uIGFsbG93cyB0aGUKKyAqIG51bGwgdHJlYXRtZW50IGNsYXVzZS4KKyAqLwor I2RlZmluZSBOT19OVUxMVFJFQVRNRU5UIDAKKyNkZWZpbmUgUEFSU0VSX0lHTk9SRV9OVUxMUyAx CisjZGVmaW5lIFBBUlNFUl9SRVNQRUNUX05VTExTIDIKKyNkZWZpbmUgSUdOT1JFX05VTExTIDMK KwogdHlwZWRlZiBzdHJ1Y3QgV2luZG93RnVuYwogewogCUV4cHIJCXhwcjsKQEAgLTYwMCw2ICs2 MTEsOCBAQCB0eXBlZGVmIHN0cnVjdCBXaW5kb3dGdW5jCiAJYm9vbAkJd2luc3RhciBwZ19ub2Rl X2F0dHIocXVlcnlfanVtYmxlX2lnbm9yZSk7CiAJLyogaXMgZnVuY3Rpb24gYSBzaW1wbGUgYWdn cmVnYXRlPyAqLwogCWJvb2wJCXdpbmFnZyBwZ19ub2RlX2F0dHIocXVlcnlfanVtYmxlX2lnbm9y ZSk7CisJLyogaWdub3JlIG51bGxzLiBPbmUgb2YgdGhlIE51bGwgVHJlYXRtZW50IG9wdGlvbnMg Ki8KKwlpbnQJCQlpZ25vcmVfbnVsbHM7CiAJLyogdG9rZW4gbG9jYXRpb24sIG9yIC0xIGlmIHVu a25vd24gKi8KIAlQYXJzZUxvYwlsb2NhdGlvbjsKIH0gV2luZG93RnVuYzsKZGlmZiAtLWdpdCBh L3NyYy9pbmNsdWRlL3BhcnNlci9rd2xpc3QuaCBiL3NyYy9pbmNsdWRlL3BhcnNlci9rd2xpc3Qu aAppbmRleCA0MGNmMDkwY2U2Li4zYmEwMGEzOWU1IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9w YXJzZXIva3dsaXN0LmgKKysrIGIvc3JjL2luY2x1ZGUvcGFyc2VyL2t3bGlzdC5oCkBAIC0yMDIs NiArMjAyLDcgQEAgUEdfS0VZV09SRCgiaG9sZCIsIEhPTEQsIFVOUkVTRVJWRURfS0VZV09SRCwg QkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoImhvdXIiLCBIT1VSX1AsIFVOUkVTRVJWRURfS0VZV09S RCwgQVNfTEFCRUwpCiBQR19LRVlXT1JEKCJpZGVudGl0eSIsIElERU5USVRZX1AsIFVOUkVTRVJW RURfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoImlmIiwgSUZfUCwgVU5SRVNFUlZF RF9LRVlXT1JELCBCQVJFX0xBQkVMKQorUEdfS0VZV09SRCgiaWdub3JlIiwgSUdOT1JFX1AsIFVO UkVTRVJWRURfS0VZV09SRCwgQVNfTEFCRUwpCiBQR19LRVlXT1JEKCJpbGlrZSIsIElMSUtFLCBU WVBFX0ZVTkNfTkFNRV9LRVlXT1JELCBCQVJFX0xBQkVMKQogUEdfS0VZV09SRCgiaW1tZWRpYXRl IiwgSU1NRURJQVRFLCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQR19LRVlXT1JE KCJpbW11dGFibGUiLCBJTU1VVEFCTEUsIFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkK QEAgLTM3Nyw2ICszNzgsNyBAQCBQR19LRVlXT1JEKCJyZXBlYXRhYmxlIiwgUkVQRUFUQUJMRSwg VU5SRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xBQkVMKQogUEdfS0VZV09SRCgicmVwbGFjZSIsIFJF UExBQ0UsIFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoInJlcGxp Y2EiLCBSRVBMSUNBLCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQR19LRVlXT1JE KCJyZXNldCIsIFJFU0VULCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCitQR19LRVlX T1JEKCJyZXNwZWN0IiwgUkVTUEVDVF9QLCBVTlJFU0VSVkVEX0tFWVdPUkQsIEFTX0xBQkVMKQog UEdfS0VZV09SRCgicmVzdGFydCIsIFJFU1RBUlQsIFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9M QUJFTCkKIFBHX0tFWVdPUkQoInJlc3RyaWN0IiwgUkVTVFJJQ1QsIFVOUkVTRVJWRURfS0VZV09S RCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoInJldHVybiIsIFJFVFVSTiwgVU5SRVNFUlZFRF9L RVlXT1JELCBCQVJFX0xBQkVMKQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvd2luZG93YXBpLmgg Yi9zcmMvaW5jbHVkZS93aW5kb3dhcGkuaAppbmRleCBjYjJlY2UxNjZiLi5iMTU5NWQzMDhkIDEw MDY0NAotLS0gYS9zcmMvaW5jbHVkZS93aW5kb3dhcGkuaAorKysgYi9zcmMvaW5jbHVkZS93aW5k b3dhcGkuaApAQCAtNDEsNiArNDEsMTAgQEAgdHlwZWRlZiBzdHJ1Y3QgV2luZG93T2JqZWN0RGF0 YSAqV2luZG93T2JqZWN0OwogI2RlZmluZSBXaW5kb3dPYmplY3RJc1ZhbGlkKHdpbm9iaikgXAog CSgod2lub2JqKSAhPSBOVUxMICYmIElzQSh3aW5vYmosIFdpbmRvd09iamVjdERhdGEpKQogCitl eHRlcm4gdm9pZCBXaW5DaGVja0FuZEluaXRpYWxpemVOdWxsVHJlYXRtZW50KFdpbmRvd09iamVj dCB3aW5vYmosCisJCQkJCQkJCQkJCSAgIGJvb2wgYWxsb3dOdWxsVHJlYXRtZW50LAorCQkJCQkJ CQkJCQkgICBGdW5jdGlvbkNhbGxJbmZvIGZjaW5mbyk7CisKIGV4dGVybiB2b2lkICpXaW5HZXRQ YXJ0aXRpb25Mb2NhbE1lbW9yeShXaW5kb3dPYmplY3Qgd2lub2JqLCBTaXplIHN6KTsKIAogZXh0 ZXJuIGludDY0IFdpbkdldEN1cnJlbnRQb3NpdGlvbihXaW5kb3dPYmplY3Qgd2lub2JqKTsKZGlm ZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvd2luZG93Lm91dCBiL3NyYy90ZXN0 L3JlZ3Jlc3MvZXhwZWN0ZWQvd2luZG93Lm91dAppbmRleCAyM2QxNDYzZGYyLi5mNTk2ZGZmZjZl IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3dpbmRvdy5vdXQKKysrIGIv c3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC93aW5kb3cub3V0CkBAIC01NDAzLDMgKzU0MDMsMzE0 IEBAIFNFTEVDVCAqIEZST00gcGdfdGVtcC5mKDIpOwogIHs1fQogKDUgcm93cykKIAorLS0gSUdO T1JFIE5VTExTIHRlc3RzCitDUkVBVEUgVEVNUE9SQVJZIFRBQkxFIHBsYW5ldHMgKAorICAgIG5h bWUgdGV4dCwKKyAgICBkaXN0YW5jZSB0ZXh0LAorICAgIG9yYml0IGludGVnZXIKKyk7CitJTlNF UlQgSU5UTyBwbGFuZXRzIFZBTFVFUworICAoJ21lcmN1cnknLCAnY2xvc2UnLCA4OCksCisgICgn dmVudXMnLCAnY2xvc2UnLCAyMjQpLAorICAoJ2VhcnRoJywgJ2Nsb3NlJywgTlVMTCksCisgICgn bWFycycsICdjbG9zZScsIE5VTEwpLAorICAoJ2p1cGl0ZXInLCAnY2xvc2UnLCA0MzMyKSwKKyAg KCdzYXR1cm4nLCAnZmFyJywgMjQ0OTEpLAorICAoJ3VyYW51cycsICdmYXInLCBOVUxMKSwKKyAg KCduZXB0dW5lJywgJ2ZhcicsIDYwMTgyKSwKKyAgKCdwbHV0bycsICdmYXInLCA5MDU2MCksCisg ICgneHl6enknLCAnZmFyJywgTlVMTCk7CistLSB0ZXN0IHJ1bGV1dGlscworQ1JFQVRFIFZJRVcg cGxhbmV0c192aWV3IEFTCitTRUxFQ1QgbmFtZSwKKyAgICAgICBvcmJpdCwKKyAgICAgICBsYWco b3JiaXQpIE9WRVIgdyBBUyBsYWcsCisgICAgICAgbGFnKG9yYml0KSBSRVNQRUNUIE5VTExTIE9W RVIgdyBBUyBsYWdfcmVzcGVjdCwKKyAgICAgICBsYWcob3JiaXQpIElHTk9SRSBOVUxMUyBPVkVS IHcgQVMgbGFnX2lnbm9yZQorRlJPTSBwbGFuZXRzCitXSU5ET1cgdyBBUyAoT1JERVIgQlkgbmFt ZSkKKzsKK05PVElDRTogIHZpZXcgInBsYW5ldHNfdmlldyIgd2lsbCBiZSBhIHRlbXBvcmFyeSB2 aWV3CitTRUxFQ1QgcGdfZ2V0X3ZpZXdkZWYoJ3BsYW5ldHNfdmlldycpOworICAgICAgICAgICAg ICAgICAgcGdfZ2V0X3ZpZXdkZWYgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIFNFTEVDVCBuYW1lLCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKworICAgICBvcmJpdCwgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICsKKyAgICAgbGFnKG9yYml0KSBPVkVSIHcgQVMgbGFnLCAg ICAgICAgICAgICAgICAgICArCisgICAgIGxhZyhvcmJpdCkgT1ZFUiB3IEFTIGxhZ19yZXNwZWN0 LCAgICAgICAgICAgKworICAgICBsYWcob3JiaXQpIElHTk9SRSBOVUxMUyBPVkVSIHcgQVMgbGFn X2lnbm9yZSsKKyAgICBGUk9NIHBsYW5ldHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICArCisgICBXSU5ET1cgdyBBUyAoT1JERVIgQlkgbmFtZSk7CisoMSByb3cpCisKKy0tIGxhZwor U0VMRUNUIG5hbWUsCisgICAgICAgb3JiaXQsCisgICAgICAgbGFnKG9yYml0KSBPVkVSIHcgQVMg bGFnLAorICAgICAgIGxhZyhvcmJpdCkgUkVTUEVDVCBOVUxMUyBPVkVSIHcgQVMgbGFnX3Jlc3Bl Y3QsCisgICAgICAgbGFnKG9yYml0KSBJR05PUkUgTlVMTFMgT1ZFUiB3IEFTIGxhZ19pZ25vcmUK K0ZST00gcGxhbmV0cworV0lORE9XIHcgQVMgKE9SREVSIEJZIG5hbWUpCis7CisgIG5hbWUgICB8 IG9yYml0IHwgIGxhZyAgfCBsYWdfcmVzcGVjdCB8IGxhZ19pZ25vcmUgCistLS0tLS0tLS0rLS0t LS0tLSstLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tCisgZWFydGggICB8ICAgICAg IHwgICAgICAgfCAgICAgICAgICAgICB8ICAgICAgICAgICAKKyBqdXBpdGVyIHwgIDQzMzIgfCAg ICAgICB8ICAgICAgICAgICAgIHwgICAgICAgICAgIAorIG1hcnMgICAgfCAgICAgICB8ICA0MzMy IHwgICAgICAgIDQzMzIgfCAgICAgICA0MzMyCisgbWVyY3VyeSB8ICAgIDg4IHwgICAgICAgfCAg ICAgICAgICAgICB8ICAgICAgIDQzMzIKKyBuZXB0dW5lIHwgNjAxODIgfCAgICA4OCB8ICAgICAg ICAgIDg4IHwgICAgICAgICA4OAorIHBsdXRvICAgfCA5MDU2MCB8IDYwMTgyIHwgICAgICAgNjAx ODIgfCAgICAgIDYwMTgyCisgc2F0dXJuICB8IDI0NDkxIHwgOTA1NjAgfCAgICAgICA5MDU2MCB8 ICAgICAgOTA1NjAKKyB1cmFudXMgIHwgICAgICAgfCAyNDQ5MSB8ICAgICAgIDI0NDkxIHwgICAg ICAyNDQ5MQorIHZlbnVzICAgfCAgIDIyNCB8ICAgICAgIHwgICAgICAgICAgICAgfCAgICAgIDI0 NDkxCisgeHl6enkgICB8ICAgICAgIHwgICAyMjQgfCAgICAgICAgIDIyNCB8ICAgICAgICAyMjQK KygxMCByb3dzKQorCistLSBsZWFkCitTRUxFQ1QgbmFtZSwKKyAgICAgICBvcmJpdCwKKyAgICAg ICBsZWFkKG9yYml0KSBPVkVSIHcgQVMgbGVhZCwKKyAgICAgICBsZWFkKG9yYml0KSBSRVNQRUNU IE5VTExTIE9WRVIgdyBBUyBsZWFkX3Jlc3BlY3QsCisgICAgICAgbGVhZChvcmJpdCkgSUdOT1JF IE5VTExTIE9WRVIgdyBBUyBsZWFkX2lnbm9yZQorRlJPTSBwbGFuZXRzCitXSU5ET1cgdyBBUyAo T1JERVIgQlkgbmFtZSkKKzsKKyAgbmFtZSAgIHwgb3JiaXQgfCBsZWFkICB8IGxlYWRfcmVzcGVj dCB8IGxlYWRfaWdub3JlIAorLS0tLS0tLS0tKy0tLS0tLS0rLS0tLS0tLSstLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0tCisgZWFydGggICB8ICAgICAgIHwgIDQzMzIgfCAgICAgICAgIDQzMzIg fCAgICAgICAgNDMzMgorIGp1cGl0ZXIgfCAgNDMzMiB8ICAgICAgIHwgICAgICAgICAgICAgIHwg ICAgICAgICAgODgKKyBtYXJzICAgIHwgICAgICAgfCAgICA4OCB8ICAgICAgICAgICA4OCB8ICAg ICAgICAgIDg4CisgbWVyY3VyeSB8ICAgIDg4IHwgNjAxODIgfCAgICAgICAgNjAxODIgfCAgICAg ICA2MDE4MgorIG5lcHR1bmUgfCA2MDE4MiB8IDkwNTYwIHwgICAgICAgIDkwNTYwIHwgICAgICAg OTA1NjAKKyBwbHV0byAgIHwgOTA1NjAgfCAyNDQ5MSB8ICAgICAgICAyNDQ5MSB8ICAgICAgIDI0 NDkxCisgc2F0dXJuICB8IDI0NDkxIHwgICAgICAgfCAgICAgICAgICAgICAgfCAgICAgICAgIDIy NAorIHVyYW51cyAgfCAgICAgICB8ICAgMjI0IHwgICAgICAgICAgMjI0IHwgICAgICAgICAyMjQK KyB2ZW51cyAgIHwgICAyMjQgfCAgICAgICB8ICAgICAgICAgICAgICB8ICAgICAgICAgICAgCisg eHl6enkgICB8ICAgICAgIHwgICAgICAgfCAgICAgICAgICAgICAgfCAgICAgICAgICAgIAorKDEw IHJvd3MpCisKKy0tIGZpcnN0X3ZhbHVlCitTRUxFQ1QgbmFtZSwKKyAgICAgICBvcmJpdCwKKyAg ICAgICBmaXJzdF92YWx1ZShvcmJpdCkgUkVTUEVDVCBOVUxMUyBPVkVSIHcxLAorICAgICAgIGZp cnN0X3ZhbHVlKG9yYml0KSBJR05PUkUgTlVMTFMgT1ZFUiB3MSwKKyAgICAgICBmaXJzdF92YWx1 ZShvcmJpdCkgUkVTUEVDVCBOVUxMUyBPVkVSIHcyLAorICAgICAgIGZpcnN0X3ZhbHVlKG9yYml0 KSBJR05PUkUgTlVMTFMgT1ZFUiB3MgorRlJPTSBwbGFuZXRzCitXSU5ET1cgdzEgQVMgKE9SREVS IEJZIG5hbWUgUk9XUyBCRVRXRUVOIFVOQk9VTkRFRCBQUkVDRURJTkcgQU5EIFVOQk9VTkRFRCBG T0xMT1dJTkcpLAorICAgICAgIHcyIEFTIChPUkRFUiBCWSBuYW1lIFJPV1MgQkVUV0VFTiAyIFBS RUNFRElORyBBTkQgMiBGT0xMT1dJTkcpCis7CisgIG5hbWUgICB8IG9yYml0IHwgZmlyc3RfdmFs dWUgfCBmaXJzdF92YWx1ZSB8IGZpcnN0X3ZhbHVlIHwgZmlyc3RfdmFsdWUgCistLS0tLS0tLS0r LS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0tCisgZWFydGggICB8ICAgICAgIHwgICAgICAgICAgICAgfCAgICAgICAgNDMzMiB8ICAg ICAgICAgICAgIHwgICAgICAgIDQzMzIKKyBqdXBpdGVyIHwgIDQzMzIgfCAgICAgICAgICAgICB8 ICAgICAgICA0MzMyIHwgICAgICAgICAgICAgfCAgICAgICAgNDMzMgorIG1hcnMgICAgfCAgICAg ICB8ICAgICAgICAgICAgIHwgICAgICAgIDQzMzIgfCAgICAgICAgICAgICB8ICAgICAgICA0MzMy CisgbWVyY3VyeSB8ICAgIDg4IHwgICAgICAgICAgICAgfCAgICAgICAgNDMzMiB8ICAgICAgICA0 MzMyIHwgICAgICAgIDQzMzIKKyBuZXB0dW5lIHwgNjAxODIgfCAgICAgICAgICAgICB8ICAgICAg ICA0MzMyIHwgICAgICAgICAgICAgfCAgICAgICAgICA4OAorIHBsdXRvICAgfCA5MDU2MCB8ICAg ICAgICAgICAgIHwgICAgICAgIDQzMzIgfCAgICAgICAgICA4OCB8ICAgICAgICAgIDg4Cisgc2F0 dXJuICB8IDI0NDkxIHwgICAgICAgICAgICAgfCAgICAgICAgNDMzMiB8ICAgICAgIDYwMTgyIHwg ICAgICAgNjAxODIKKyB1cmFudXMgIHwgICAgICAgfCAgICAgICAgICAgICB8ICAgICAgICA0MzMy IHwgICAgICAgOTA1NjAgfCAgICAgICA5MDU2MAorIHZlbnVzICAgfCAgIDIyNCB8ICAgICAgICAg ICAgIHwgICAgICAgIDQzMzIgfCAgICAgICAyNDQ5MSB8ICAgICAgIDI0NDkxCisgeHl6enkgICB8 ICAgICAgIHwgICAgICAgICAgICAgfCAgICAgICAgNDMzMiB8ICAgICAgICAgICAgIHwgICAgICAg ICAyMjQKKygxMCByb3dzKQorCistLSBudGhfdmFsdWUKK1NFTEVDVCBuYW1lLAorICAgICAgIG9y Yml0LAorICAgICAgIG50aF92YWx1ZShvcmJpdCwgMikgUkVTUEVDVCBOVUxMUyBPVkVSIHcxLAor ICAgICAgIG50aF92YWx1ZShvcmJpdCwgMikgSUdOT1JFIE5VTExTIE9WRVIgdzEsCisgICAgICAg bnRoX3ZhbHVlKG9yYml0LCAyKSBSRVNQRUNUIE5VTExTIE9WRVIgdzIsCisgICAgICAgbnRoX3Zh bHVlKG9yYml0LCAyKSBJR05PUkUgTlVMTFMgT1ZFUiB3MgorRlJPTSBwbGFuZXRzCitXSU5ET1cg dzEgQVMgKE9SREVSIEJZIG5hbWUgUk9XUyBCRVRXRUVOIFVOQk9VTkRFRCBQUkVDRURJTkcgQU5E IFVOQk9VTkRFRCBGT0xMT1dJTkcpLAorICAgICAgIHcyIEFTIChPUkRFUiBCWSBuYW1lIFJPV1Mg QkVUV0VFTiAyIFBSRUNFRElORyBBTkQgMiBGT0xMT1dJTkcpCis7CisgIG5hbWUgICB8IG9yYml0 IHwgbnRoX3ZhbHVlIHwgbnRoX3ZhbHVlIHwgbnRoX3ZhbHVlIHwgbnRoX3ZhbHVlIAorLS0tLS0t LS0tKy0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0KKyBlYXJ0aCAgIHwgICAgICAgfCAgICAgIDQzMzIgfCAgICAgICAgODggfCAgICAgIDQzMzIg fCAgICAgICAgICAKKyBqdXBpdGVyIHwgIDQzMzIgfCAgICAgIDQzMzIgfCAgICAgICAgODggfCAg ICAgIDQzMzIgfCAgICAgICAgODgKKyBtYXJzICAgIHwgICAgICAgfCAgICAgIDQzMzIgfCAgICAg ICAgODggfCAgICAgIDQzMzIgfCAgICAgICAgODgKKyBtZXJjdXJ5IHwgICAgODggfCAgICAgIDQz MzIgfCAgICAgICAgODggfCAgICAgICAgICAgfCAgICAgICAgODgKKyBuZXB0dW5lIHwgNjAxODIg fCAgICAgIDQzMzIgfCAgICAgICAgODggfCAgICAgICAgODggfCAgICAgNjAxODIKKyBwbHV0byAg IHwgOTA1NjAgfCAgICAgIDQzMzIgfCAgICAgICAgODggfCAgICAgNjAxODIgfCAgICAgNjAxODIK KyBzYXR1cm4gIHwgMjQ0OTEgfCAgICAgIDQzMzIgfCAgICAgICAgODggfCAgICAgOTA1NjAgfCAg ICAgOTA1NjAKKyB1cmFudXMgIHwgICAgICAgfCAgICAgIDQzMzIgfCAgICAgICAgODggfCAgICAg MjQ0OTEgfCAgICAgMjQ0OTEKKyB2ZW51cyAgIHwgICAyMjQgfCAgICAgIDQzMzIgfCAgICAgICAg ODggfCAgICAgICAgICAgfCAgICAgICAyMjQKKyB4eXp6eSAgIHwgICAgICAgfCAgICAgIDQzMzIg fCAgICAgICAgODggfCAgICAgICAyMjQgfCAgICAgICAgICAKKygxMCByb3dzKQorCistLSBsYXN0 X3ZhbHVlCitTRUxFQ1QgbmFtZSwKKyAgICAgICBvcmJpdCwKKyAgICAgICBsYXN0X3ZhbHVlKG9y Yml0KSBSRVNQRUNUIE5VTExTIE9WRVIgdzEsCisgICAgICAgbGFzdF92YWx1ZShvcmJpdCkgSUdO T1JFIE5VTExTIE9WRVIgdzEsCisgICAgICAgbGFzdF92YWx1ZShvcmJpdCkgUkVTUEVDVCBOVUxM UyBPVkVSIHcyLAorICAgICAgIGxhc3RfdmFsdWUob3JiaXQpIElHTk9SRSBOVUxMUyBPVkVSIHcy CitGUk9NIHBsYW5ldHMKK1dJTkRPVyB3MSBBUyAoT1JERVIgQlkgbmFtZSBST1dTIEJFVFdFRU4g VU5CT1VOREVEIFBSRUNFRElORyBBTkQgVU5CT1VOREVEIEZPTExPV0lORyksCisgICAgICAgdzIg QVMgKE9SREVSIEJZIG5hbWUgUk9XUyBCRVRXRUVOIDIgUFJFQ0VESU5HIEFORCAyIEZPTExPV0lO RykKKzsKKyAgbmFtZSAgIHwgb3JiaXQgfCBsYXN0X3ZhbHVlIHwgbGFzdF92YWx1ZSB8IGxhc3Rf dmFsdWUgfCBsYXN0X3ZhbHVlIAorLS0tLS0tLS0tKy0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tCisgZWFydGggICB8ICAgICAgIHwgICAg ICAgICAgICB8ICAgICAgICAyMjQgfCAgICAgICAgICAgIHwgICAgICAgNDMzMgorIGp1cGl0ZXIg fCAgNDMzMiB8ICAgICAgICAgICAgfCAgICAgICAgMjI0IHwgICAgICAgICA4OCB8ICAgICAgICAg ODgKKyBtYXJzICAgIHwgICAgICAgfCAgICAgICAgICAgIHwgICAgICAgIDIyNCB8ICAgICAgNjAx ODIgfCAgICAgIDYwMTgyCisgbWVyY3VyeSB8ICAgIDg4IHwgICAgICAgICAgICB8ICAgICAgICAy MjQgfCAgICAgIDkwNTYwIHwgICAgICA5MDU2MAorIG5lcHR1bmUgfCA2MDE4MiB8ICAgICAgICAg ICAgfCAgICAgICAgMjI0IHwgICAgICAyNDQ5MSB8ICAgICAgMjQ0OTEKKyBwbHV0byAgIHwgOTA1 NjAgfCAgICAgICAgICAgIHwgICAgICAgIDIyNCB8ICAgICAgICAgICAgfCAgICAgIDI0NDkxCisg c2F0dXJuICB8IDI0NDkxIHwgICAgICAgICAgICB8ICAgICAgICAyMjQgfCAgICAgICAgMjI0IHwg ICAgICAgIDIyNAorIHVyYW51cyAgfCAgICAgICB8ICAgICAgICAgICAgfCAgICAgICAgMjI0IHwg ICAgICAgICAgICB8ICAgICAgICAyMjQKKyB2ZW51cyAgIHwgICAyMjQgfCAgICAgICAgICAgIHwg ICAgICAgIDIyNCB8ICAgICAgICAgICAgfCAgICAgICAgMjI0CisgeHl6enkgICB8ICAgICAgIHwg ICAgICAgICAgICB8ICAgICAgICAyMjQgfCAgICAgICAgICAgIHwgICAgICAgIDIyNAorKDEwIHJv d3MpCisKKy0tIGV4Y2x1ZGUgY3VycmVudCByb3cKK1NFTEVDVCBuYW1lLAorICAgICAgIG9yYml0 LAorICAgICAgIGZpcnN0X3ZhbHVlKG9yYml0KSBJR05PUkUgTlVMTFMgT1ZFUiB3LAorICAgICAg IGxhc3RfdmFsdWUob3JiaXQpIElHTk9SRSBOVUxMUyBPVkVSIHcsCisgICAgICAgbnRoX3ZhbHVl KG9yYml0LCAyKSBJR05PUkUgTlVMTFMgT1ZFUiB3LAorICAgICAgIGxlYWQob3JiaXQsIDEpIElH Tk9SRSBOVUxMUyBPVkVSIHcgQVMgbGVhZF9pZ25vcmUsCisgICAgICAgbGFnKG9yYml0LCAxKSBJ R05PUkUgTlVMTFMgT1ZFUiB3IEFTIGxhZ19pZ25vcmUKK0ZST00gcGxhbmV0cworV0lORE9XIHcg QVMgKE9SREVSIEJZIG5hbWUgUk9XUyBCRVRXRUVOIDIgUFJFQ0VESU5HIEFORCAyIEZPTExPV0lO RyBFWENMVURFIENVUlJFTlQgUk9XKQorOworICBuYW1lICAgfCBvcmJpdCB8IGZpcnN0X3ZhbHVl IHwgbGFzdF92YWx1ZSB8IG50aF92YWx1ZSB8IGxlYWRfaWdub3JlIHwgbGFnX2lnbm9yZSAKKy0t LS0tLS0tLSstLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tCisgZWFydGggICB8ICAgICAgIHwgICAgICAgIDQzMzIg fCAgICAgICA0MzMyIHwgICAgICAgICAgIHwgICAgICAgIDQzMzIgfCAgICAgICAgICAgCisganVw aXRlciB8ICA0MzMyIHwgICAgICAgICAgODggfCAgICAgICAgIDg4IHwgICAgICAgICAgIHwgICAg ICAgICAgODggfCAgICAgICAgICAgCisgbWFycyAgICB8ICAgICAgIHwgICAgICAgIDQzMzIgfCAg ICAgIDYwMTgyIHwgICAgICAgIDg4IHwgICAgICAgICAgODggfCAgICAgICA0MzMyCisgbWVyY3Vy eSB8ICAgIDg4IHwgICAgICAgIDQzMzIgfCAgICAgIDkwNTYwIHwgICAgIDYwMTgyIHwgICAgICAg NjAxODIgfCAgICAgICA0MzMyCisgbmVwdHVuZSB8IDYwMTgyIHwgICAgICAgICAgODggfCAgICAg IDI0NDkxIHwgICAgIDkwNTYwIHwgICAgICAgOTA1NjAgfCAgICAgICAgIDg4CisgcGx1dG8gICB8 IDkwNTYwIHwgICAgICAgICAgODggfCAgICAgIDI0NDkxIHwgICAgIDYwMTgyIHwgICAgICAgMjQ0 OTEgfCAgICAgIDYwMTgyCisgc2F0dXJuICB8IDI0NDkxIHwgICAgICAgNjAxODIgfCAgICAgICAg MjI0IHwgICAgIDkwNTYwIHwgICAgICAgICAyMjQgfCAgICAgIDkwNTYwCisgdXJhbnVzICB8ICAg ICAgIHwgICAgICAgOTA1NjAgfCAgICAgICAgMjI0IHwgICAgIDI0NDkxIHwgICAgICAgICAyMjQg fCAgICAgIDI0NDkxCisgdmVudXMgICB8ICAgMjI0IHwgICAgICAgMjQ0OTEgfCAgICAgIDI0NDkx IHwgICAgICAgICAgIHwgICAgICAgICAgICAgfCAgICAgIDI0NDkxCisgeHl6enkgICB8ICAgICAg IHwgICAgICAgICAyMjQgfCAgICAgICAgMjI0IHwgICAgICAgICAgIHwgICAgICAgICAgICAgfCAg ICAgICAgMjI0CisoMTAgcm93cykKKworLS0gdmFsaWQgYW5kIGludmFsaWQgZnVuY3Rpb25zCitT RUxFQ1Qgc3VtKG9yYml0KSBPVkVSICgpIEZST00gcGxhbmV0czsgLS0gc3VjY2VlZHMKKyAgc3Vt ICAgCistLS0tLS0tLQorIDE3OTg3NworIDE3OTg3NworIDE3OTg3NworIDE3OTg3NworIDE3OTg3 NworIDE3OTg3NworIDE3OTg3NworIDE3OTg3NworIDE3OTg3NworIDE3OTg3NworKDEwIHJvd3Mp CisKK1NFTEVDVCBzdW0ob3JiaXQpIFJFU1BFQ1QgTlVMTFMgT1ZFUiAoKSBGUk9NIHBsYW5ldHM7 IC0tIGZhaWxzCitFUlJPUjogIGFnZ3JlZ2F0ZSBmdW5jdGlvbnMgZG8gbm90IGFjY2VwdCBSRVNQ RUNUL0lHTk9SRSBOVUxMUworTElORSAxOiBTRUxFQ1Qgc3VtKG9yYml0KSBSRVNQRUNUIE5VTExT IE9WRVIgKCkgRlJPTSBwbGFuZXRzOworICAgICAgICAgICAgICAgXgorU0VMRUNUIHN1bShvcmJp dCkgSUdOT1JFIE5VTExTIE9WRVIgKCkgRlJPTSBwbGFuZXRzOyAtLSBmYWlscworRVJST1I6ICBh Z2dyZWdhdGUgZnVuY3Rpb25zIGRvIG5vdCBhY2NlcHQgUkVTUEVDVC9JR05PUkUgTlVMTFMKK0xJ TkUgMTogU0VMRUNUIHN1bShvcmJpdCkgSUdOT1JFIE5VTExTIE9WRVIgKCkgRlJPTSBwbGFuZXRz OworICAgICAgICAgICAgICAgXgorU0VMRUNUIHJvd19udW1iZXIoKSBPVkVSICgpIEZST00gcGxh bmV0czsgLS0gc3VjY2VlZHMKKyByb3dfbnVtYmVyIAorLS0tLS0tLS0tLS0tCisgICAgICAgICAg MQorICAgICAgICAgIDIKKyAgICAgICAgICAzCisgICAgICAgICAgNAorICAgICAgICAgIDUKKyAg ICAgICAgICA2CisgICAgICAgICAgNworICAgICAgICAgIDgKKyAgICAgICAgICA5CisgICAgICAg ICAxMAorKDEwIHJvd3MpCisKK1NFTEVDVCByb3dfbnVtYmVyKCkgUkVTUEVDVCBOVUxMUyBPVkVS ICgpIEZST00gcGxhbmV0czsgLS0gZmFpbHMKK0VSUk9SOiAgZnVuY3Rpb24gcm93X251bWJlciBk b2VzIG5vdCBhbGxvdyBSRVNQRUNUL0lHTk9SRSBOVUxMUworU0VMRUNUIHJvd19udW1iZXIoKSBJ R05PUkUgTlVMTFMgT1ZFUiAoKSBGUk9NIHBsYW5ldHM7IC0tIGZhaWxzCitFUlJPUjogIGZ1bmN0 aW9uIHJvd19udW1iZXIgZG9lcyBub3QgYWxsb3cgUkVTUEVDVC9JR05PUkUgTlVMTFMKKy0tIHRl c3QgdHdvIGNvbnNlY3V0aXZlIG51bGxzCit1cGRhdGUgcGxhbmV0cyBzZXQgb3JiaXQ9bnVsbCB3 aGVyZSBuYW1lPSdqdXBpdGVyJzsKK1NFTEVDVCBuYW1lLAorICAgICAgIG9yYml0LAorICAgICAg IGZpcnN0X3ZhbHVlKG9yYml0KSBJR05PUkUgTlVMTFMgT1ZFUiB3LAorICAgICAgIGxhc3RfdmFs dWUob3JiaXQpIElHTk9SRSBOVUxMUyBPVkVSIHcsCisgICAgICAgbnRoX3ZhbHVlKG9yYml0LCAy KSBJR05PUkUgTlVMTFMgT1ZFUiB3LAorICAgICAgIGxlYWQob3JiaXQsIDEpIElHTk9SRSBOVUxM UyBPVkVSIHcgQVMgbGVhZF9pZ25vcmUsCisgICAgICAgbGFnKG9yYml0LCAxKSBJR05PUkUgTlVM TFMgT1ZFUiB3IEFTIGxhZ19pZ25vcmUKK0ZST00gcGxhbmV0cworV0lORE9XIHcgQVMgKE9SREVS IEJZIG5hbWUgUk9XUyBCRVRXRUVOIDIgUFJFQ0VESU5HIEFORCAyIEZPTExPV0lORykKKzsKKyAg bmFtZSAgIHwgb3JiaXQgfCBmaXJzdF92YWx1ZSB8IGxhc3RfdmFsdWUgfCBudGhfdmFsdWUgfCBs ZWFkX2lnbm9yZSB8IGxhZ19pZ25vcmUgCistLS0tLS0tLS0rLS0tLS0tLSstLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLQorIGVh cnRoICAgfCAgICAgICB8ICAgICAgICAgICAgIHwgICAgICAgICAgICB8ICAgICAgICAgICB8ICAg ICAgICAgIDg4IHwgICAgICAgICAgIAorIGp1cGl0ZXIgfCAgICAgICB8ICAgICAgICAgIDg4IHwg ICAgICAgICA4OCB8ICAgICAgICAgICB8ICAgICAgICAgIDg4IHwgICAgICAgICAgIAorIG1hcnMg ICAgfCAgICAgICB8ICAgICAgICAgIDg4IHwgICAgICA2MDE4MiB8ICAgICA2MDE4MiB8ICAgICAg ICAgIDg4IHwgICAgICAgICAgIAorIG1lcmN1cnkgfCAgICA4OCB8ICAgICAgICAgIDg4IHwgICAg ICA5MDU2MCB8ICAgICA2MDE4MiB8ICAgICAgIDYwMTgyIHwgICAgICAgICAgIAorIG5lcHR1bmUg fCA2MDE4MiB8ICAgICAgICAgIDg4IHwgICAgICAyNDQ5MSB8ICAgICA2MDE4MiB8ICAgICAgIDkw NTYwIHwgICAgICAgICA4OAorIHBsdXRvICAgfCA5MDU2MCB8ICAgICAgICAgIDg4IHwgICAgICAy NDQ5MSB8ICAgICA2MDE4MiB8ICAgICAgIDI0NDkxIHwgICAgICA2MDE4MgorIHNhdHVybiAgfCAy NDQ5MSB8ICAgICAgIDYwMTgyIHwgICAgICAgIDIyNCB8ICAgICA5MDU2MCB8ICAgICAgICAgMjI0 IHwgICAgICA5MDU2MAorIHVyYW51cyAgfCAgICAgICB8ICAgICAgIDkwNTYwIHwgICAgICAgIDIy NCB8ICAgICAyNDQ5MSB8ICAgICAgICAgMjI0IHwgICAgICAyNDQ5MQorIHZlbnVzICAgfCAgIDIy NCB8ICAgICAgIDI0NDkxIHwgICAgICAgIDIyNCB8ICAgICAgIDIyNCB8ICAgICAgICAgICAgIHwg ICAgICAyNDQ5MQorIHh5enp5ICAgfCAgICAgICB8ICAgICAgICAgMjI0IHwgICAgICAgIDIyNCB8 ICAgICAgICAgICB8ICAgICAgICAgICAgIHwgICAgICAgIDIyNAorKDEwIHJvd3MpCisKKy0tIHRl c3QgcGFydGl0aW9ucworU0VMRUNUIG5hbWUsCisgICAgICAgZGlzdGFuY2UsCisgICAgICAgb3Ji aXQsCisgICAgICAgZmlyc3RfdmFsdWUob3JiaXQpIElHTk9SRSBOVUxMUyBPVkVSIHcsCisgICAg ICAgbGFzdF92YWx1ZShvcmJpdCkgSUdOT1JFIE5VTExTIE9WRVIgdywKKyAgICAgICBudGhfdmFs dWUob3JiaXQsIDIpIElHTk9SRSBOVUxMUyBPVkVSIHcsCisgICAgICAgbGVhZChvcmJpdCwgMSkg SUdOT1JFIE5VTExTIE9WRVIgdyBBUyBsZWFkX2lnbm9yZSwKKyAgICAgICBsYWcob3JiaXQsIDEp IElHTk9SRSBOVUxMUyBPVkVSIHcgQVMgbGFnX2lnbm9yZQorRlJPTSBwbGFuZXRzCitXSU5ET1cg dyBBUyAoUEFSVElUSU9OIEJZIGRpc3RhbmNlIE9SREVSIEJZIG5hbWUgUk9XUyBCRVRXRUVOIDIg UFJFQ0VESU5HIEFORCAyIEZPTExPV0lORykKKzsKKyAgbmFtZSAgIHwgZGlzdGFuY2UgfCBvcmJp dCB8IGZpcnN0X3ZhbHVlIHwgbGFzdF92YWx1ZSB8IG50aF92YWx1ZSB8IGxlYWRfaWdub3JlIHwg bGFnX2lnbm9yZSAKKy0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0rLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0KKyBlYXJ0 aCAgIHwgY2xvc2UgICAgfCAgICAgICB8ICAgICAgICAgICAgIHwgICAgICAgICAgICB8ICAgICAg ICAgICB8ICAgICAgICAgIDg4IHwgICAgICAgICAgIAorIGp1cGl0ZXIgfCBjbG9zZSAgICB8ICAg ICAgIHwgICAgICAgICAgODggfCAgICAgICAgIDg4IHwgICAgICAgICAgIHwgICAgICAgICAgODgg fCAgICAgICAgICAgCisgbWFycyAgICB8IGNsb3NlICAgIHwgICAgICAgfCAgICAgICAgICA4OCB8 ICAgICAgICAyMjQgfCAgICAgICAyMjQgfCAgICAgICAgICA4OCB8ICAgICAgICAgICAKKyBtZXJj dXJ5IHwgY2xvc2UgICAgfCAgICA4OCB8ICAgICAgICAgIDg4IHwgICAgICAgIDIyNCB8ICAgICAg IDIyNCB8ICAgICAgICAgMjI0IHwgICAgICAgICAgIAorIHZlbnVzICAgfCBjbG9zZSAgICB8ICAg MjI0IHwgICAgICAgICAgODggfCAgICAgICAgMjI0IHwgICAgICAgMjI0IHwgICAgICAgICAgICAg fCAgICAgICAgIDg4CisgbmVwdHVuZSB8IGZhciAgICAgIHwgNjAxODIgfCAgICAgICA2MDE4MiB8 ICAgICAgMjQ0OTEgfCAgICAgOTA1NjAgfCAgICAgICA5MDU2MCB8ICAgICAgICAgICAKKyBwbHV0 byAgIHwgZmFyICAgICAgfCA5MDU2MCB8ICAgICAgIDYwMTgyIHwgICAgICAyNDQ5MSB8ICAgICA5 MDU2MCB8ICAgICAgIDI0NDkxIHwgICAgICA2MDE4MgorIHNhdHVybiAgfCBmYXIgICAgICB8IDI0 NDkxIHwgICAgICAgNjAxODIgfCAgICAgIDI0NDkxIHwgICAgIDkwNTYwIHwgICAgICAgICAgICAg fCAgICAgIDkwNTYwCisgdXJhbnVzICB8IGZhciAgICAgIHwgICAgICAgfCAgICAgICA5MDU2MCB8 ICAgICAgMjQ0OTEgfCAgICAgMjQ0OTEgfCAgICAgICAgICAgICB8ICAgICAgMjQ0OTEKKyB4eXp6 eSAgIHwgZmFyICAgICAgfCAgICAgICB8ICAgICAgIDI0NDkxIHwgICAgICAyNDQ5MSB8ICAgICAg ICAgICB8ICAgICAgICAgICAgIHwgICAgICAyNDQ5MQorKDEwIHJvd3MpCisKKy0tIG50aF92YWx1 ZSB3aXRob3V0IG51bGxzCitTRUxFQ1QgeCwKKyAgICAgICBudGhfdmFsdWUoeCwyKSBJR05PUkUg TlVMTFMgT1ZFUiB3CitGUk9NIGdlbmVyYXRlX3NlcmllcygxLDUpIGcoeCkKK1dJTkRPVyB3IEFT IChPUkRFUiBCWSB4IFJPV1MgQkVUV0VFTiAyIFBSRUNFRElORyBBTkQgMiBGT0xMT1dJTkcgRVhD TFVERSBDVVJSRU5UIFJPVyk7CisgeCB8IG50aF92YWx1ZSAKKy0tLSstLS0tLS0tLS0tLQorIDEg fCAgICAgICAgIDMKKyAyIHwgICAgICAgICAzCisgMyB8ICAgICAgICAgMgorIDQgfCAgICAgICAg IDMKKyA1IHwgICAgICAgICA0CisoNSByb3dzKQorCitTRUxFQ1QgeCwKKyAgICAgICBudGhfdmFs dWUoeCwyKSBJR05PUkUgTlVMTFMgT1ZFUiB3CitGUk9NIGdlbmVyYXRlX3NlcmllcygxLDUpIGco eCkKK1dJTkRPVyB3IEFTIChPUkRFUiBCWSB4IFJPV1MgQkVUV0VFTiAyIFBSRUNFRElORyBBTkQg MiBGT0xMT1dJTkcpOworIHggfCBudGhfdmFsdWUgCistLS0rLS0tLS0tLS0tLS0KKyAxIHwgICAg ICAgICAyCisgMiB8ICAgICAgICAgMgorIDMgfCAgICAgICAgIDIKKyA0IHwgICAgICAgICAzCisg NSB8ICAgICAgICAgNAorKDUgcm93cykKKworLS1jbGVhbnVwCitEUk9QIFRBQkxFIHBsYW5ldHMg Q0FTQ0FERTsKK05PVElDRTogIGRyb3AgY2FzY2FkZXMgdG8gdmlldyBwbGFuZXRzX3ZpZXcKZGlm ZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3dpbmRvdy5zcWwgYi9zcmMvdGVzdC9yZWdy ZXNzL3NxbC93aW5kb3cuc3FsCmluZGV4IDAyZjEwNWYwNzAuLjFmOGM4NjY5NDMgMTAwNjQ0Ci0t LSBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3dpbmRvdy5zcWwKKysrIGIvc3JjL3Rlc3QvcmVncmVz cy9zcWwvd2luZG93LnNxbApAQCAtMTk1OCwzICsxOTU4LDE1MCBAQCAkJCBMQU5HVUFHRSBTUUwg U1RBQkxFOwogCiBFWFBMQUlOIChjb3N0cyBvZmYpIFNFTEVDVCAqIEZST00gcGdfdGVtcC5mKDIp OwogU0VMRUNUICogRlJPTSBwZ190ZW1wLmYoMik7CisKKy0tIElHTk9SRSBOVUxMUyB0ZXN0cwor CitDUkVBVEUgVEVNUE9SQVJZIFRBQkxFIHBsYW5ldHMgKAorICAgIG5hbWUgdGV4dCwKKyAgICBk aXN0YW5jZSB0ZXh0LAorICAgIG9yYml0IGludGVnZXIKKyk7CisKK0lOU0VSVCBJTlRPIHBsYW5l dHMgVkFMVUVTCisgICgnbWVyY3VyeScsICdjbG9zZScsIDg4KSwKKyAgKCd2ZW51cycsICdjbG9z ZScsIDIyNCksCisgICgnZWFydGgnLCAnY2xvc2UnLCBOVUxMKSwKKyAgKCdtYXJzJywgJ2Nsb3Nl JywgTlVMTCksCisgICgnanVwaXRlcicsICdjbG9zZScsIDQzMzIpLAorICAoJ3NhdHVybicsICdm YXInLCAyNDQ5MSksCisgICgndXJhbnVzJywgJ2ZhcicsIE5VTEwpLAorICAoJ25lcHR1bmUnLCAn ZmFyJywgNjAxODIpLAorICAoJ3BsdXRvJywgJ2ZhcicsIDkwNTYwKSwKKyAgKCd4eXp6eScsICdm YXInLCBOVUxMKTsKKworLS0gdGVzdCBydWxldXRpbHMKK0NSRUFURSBWSUVXIHBsYW5ldHNfdmll dyBBUworU0VMRUNUIG5hbWUsCisgICAgICAgb3JiaXQsCisgICAgICAgbGFnKG9yYml0KSBPVkVS IHcgQVMgbGFnLAorICAgICAgIGxhZyhvcmJpdCkgUkVTUEVDVCBOVUxMUyBPVkVSIHcgQVMgbGFn X3Jlc3BlY3QsCisgICAgICAgbGFnKG9yYml0KSBJR05PUkUgTlVMTFMgT1ZFUiB3IEFTIGxhZ19p Z25vcmUKK0ZST00gcGxhbmV0cworV0lORE9XIHcgQVMgKE9SREVSIEJZIG5hbWUpCis7CitTRUxF Q1QgcGdfZ2V0X3ZpZXdkZWYoJ3BsYW5ldHNfdmlldycpOworCistLSBsYWcKK1NFTEVDVCBuYW1l LAorICAgICAgIG9yYml0LAorICAgICAgIGxhZyhvcmJpdCkgT1ZFUiB3IEFTIGxhZywKKyAgICAg ICBsYWcob3JiaXQpIFJFU1BFQ1QgTlVMTFMgT1ZFUiB3IEFTIGxhZ19yZXNwZWN0LAorICAgICAg IGxhZyhvcmJpdCkgSUdOT1JFIE5VTExTIE9WRVIgdyBBUyBsYWdfaWdub3JlCitGUk9NIHBsYW5l dHMKK1dJTkRPVyB3IEFTIChPUkRFUiBCWSBuYW1lKQorOworCistLSBsZWFkCitTRUxFQ1QgbmFt ZSwKKyAgICAgICBvcmJpdCwKKyAgICAgICBsZWFkKG9yYml0KSBPVkVSIHcgQVMgbGVhZCwKKyAg ICAgICBsZWFkKG9yYml0KSBSRVNQRUNUIE5VTExTIE9WRVIgdyBBUyBsZWFkX3Jlc3BlY3QsCisg ICAgICAgbGVhZChvcmJpdCkgSUdOT1JFIE5VTExTIE9WRVIgdyBBUyBsZWFkX2lnbm9yZQorRlJP TSBwbGFuZXRzCitXSU5ET1cgdyBBUyAoT1JERVIgQlkgbmFtZSkKKzsKKworLS0gZmlyc3RfdmFs dWUKK1NFTEVDVCBuYW1lLAorICAgICAgIG9yYml0LAorICAgICAgIGZpcnN0X3ZhbHVlKG9yYml0 KSBSRVNQRUNUIE5VTExTIE9WRVIgdzEsCisgICAgICAgZmlyc3RfdmFsdWUob3JiaXQpIElHTk9S RSBOVUxMUyBPVkVSIHcxLAorICAgICAgIGZpcnN0X3ZhbHVlKG9yYml0KSBSRVNQRUNUIE5VTExT IE9WRVIgdzIsCisgICAgICAgZmlyc3RfdmFsdWUob3JiaXQpIElHTk9SRSBOVUxMUyBPVkVSIHcy CitGUk9NIHBsYW5ldHMKK1dJTkRPVyB3MSBBUyAoT1JERVIgQlkgbmFtZSBST1dTIEJFVFdFRU4g VU5CT1VOREVEIFBSRUNFRElORyBBTkQgVU5CT1VOREVEIEZPTExPV0lORyksCisgICAgICAgdzIg QVMgKE9SREVSIEJZIG5hbWUgUk9XUyBCRVRXRUVOIDIgUFJFQ0VESU5HIEFORCAyIEZPTExPV0lO RykKKzsKKworLS0gbnRoX3ZhbHVlCitTRUxFQ1QgbmFtZSwKKyAgICAgICBvcmJpdCwKKyAgICAg ICBudGhfdmFsdWUob3JiaXQsIDIpIFJFU1BFQ1QgTlVMTFMgT1ZFUiB3MSwKKyAgICAgICBudGhf dmFsdWUob3JiaXQsIDIpIElHTk9SRSBOVUxMUyBPVkVSIHcxLAorICAgICAgIG50aF92YWx1ZShv cmJpdCwgMikgUkVTUEVDVCBOVUxMUyBPVkVSIHcyLAorICAgICAgIG50aF92YWx1ZShvcmJpdCwg MikgSUdOT1JFIE5VTExTIE9WRVIgdzIKK0ZST00gcGxhbmV0cworV0lORE9XIHcxIEFTIChPUkRF UiBCWSBuYW1lIFJPV1MgQkVUV0VFTiBVTkJPVU5ERUQgUFJFQ0VESU5HIEFORCBVTkJPVU5ERUQg Rk9MTE9XSU5HKSwKKyAgICAgICB3MiBBUyAoT1JERVIgQlkgbmFtZSBST1dTIEJFVFdFRU4gMiBQ UkVDRURJTkcgQU5EIDIgRk9MTE9XSU5HKQorOworCistLSBsYXN0X3ZhbHVlCitTRUxFQ1QgbmFt ZSwKKyAgICAgICBvcmJpdCwKKyAgICAgICBsYXN0X3ZhbHVlKG9yYml0KSBSRVNQRUNUIE5VTExT IE9WRVIgdzEsCisgICAgICAgbGFzdF92YWx1ZShvcmJpdCkgSUdOT1JFIE5VTExTIE9WRVIgdzEs CisgICAgICAgbGFzdF92YWx1ZShvcmJpdCkgUkVTUEVDVCBOVUxMUyBPVkVSIHcyLAorICAgICAg IGxhc3RfdmFsdWUob3JiaXQpIElHTk9SRSBOVUxMUyBPVkVSIHcyCitGUk9NIHBsYW5ldHMKK1dJ TkRPVyB3MSBBUyAoT1JERVIgQlkgbmFtZSBST1dTIEJFVFdFRU4gVU5CT1VOREVEIFBSRUNFRElO RyBBTkQgVU5CT1VOREVEIEZPTExPV0lORyksCisgICAgICAgdzIgQVMgKE9SREVSIEJZIG5hbWUg Uk9XUyBCRVRXRUVOIDIgUFJFQ0VESU5HIEFORCAyIEZPTExPV0lORykKKzsKKworLS0gZXhjbHVk ZSBjdXJyZW50IHJvdworU0VMRUNUIG5hbWUsCisgICAgICAgb3JiaXQsCisgICAgICAgZmlyc3Rf dmFsdWUob3JiaXQpIElHTk9SRSBOVUxMUyBPVkVSIHcsCisgICAgICAgbGFzdF92YWx1ZShvcmJp dCkgSUdOT1JFIE5VTExTIE9WRVIgdywKKyAgICAgICBudGhfdmFsdWUob3JiaXQsIDIpIElHTk9S RSBOVUxMUyBPVkVSIHcsCisgICAgICAgbGVhZChvcmJpdCwgMSkgSUdOT1JFIE5VTExTIE9WRVIg dyBBUyBsZWFkX2lnbm9yZSwKKyAgICAgICBsYWcob3JiaXQsIDEpIElHTk9SRSBOVUxMUyBPVkVS IHcgQVMgbGFnX2lnbm9yZQorRlJPTSBwbGFuZXRzCitXSU5ET1cgdyBBUyAoT1JERVIgQlkgbmFt ZSBST1dTIEJFVFdFRU4gMiBQUkVDRURJTkcgQU5EIDIgRk9MTE9XSU5HIEVYQ0xVREUgQ1VSUkVO VCBST1cpCis7CisKKy0tIHZhbGlkIGFuZCBpbnZhbGlkIGZ1bmN0aW9ucworU0VMRUNUIHN1bShv cmJpdCkgT1ZFUiAoKSBGUk9NIHBsYW5ldHM7IC0tIHN1Y2NlZWRzCitTRUxFQ1Qgc3VtKG9yYml0 KSBSRVNQRUNUIE5VTExTIE9WRVIgKCkgRlJPTSBwbGFuZXRzOyAtLSBmYWlscworU0VMRUNUIHN1 bShvcmJpdCkgSUdOT1JFIE5VTExTIE9WRVIgKCkgRlJPTSBwbGFuZXRzOyAtLSBmYWlscworU0VM RUNUIHJvd19udW1iZXIoKSBPVkVSICgpIEZST00gcGxhbmV0czsgLS0gc3VjY2VlZHMKK1NFTEVD VCByb3dfbnVtYmVyKCkgUkVTUEVDVCBOVUxMUyBPVkVSICgpIEZST00gcGxhbmV0czsgLS0gZmFp bHMKK1NFTEVDVCByb3dfbnVtYmVyKCkgSUdOT1JFIE5VTExTIE9WRVIgKCkgRlJPTSBwbGFuZXRz OyAtLSBmYWlscworCistLSB0ZXN0IHR3byBjb25zZWN1dGl2ZSBudWxscwordXBkYXRlIHBsYW5l dHMgc2V0IG9yYml0PW51bGwgd2hlcmUgbmFtZT0nanVwaXRlcic7CitTRUxFQ1QgbmFtZSwKKyAg ICAgICBvcmJpdCwKKyAgICAgICBmaXJzdF92YWx1ZShvcmJpdCkgSUdOT1JFIE5VTExTIE9WRVIg dywKKyAgICAgICBsYXN0X3ZhbHVlKG9yYml0KSBJR05PUkUgTlVMTFMgT1ZFUiB3LAorICAgICAg IG50aF92YWx1ZShvcmJpdCwgMikgSUdOT1JFIE5VTExTIE9WRVIgdywKKyAgICAgICBsZWFkKG9y Yml0LCAxKSBJR05PUkUgTlVMTFMgT1ZFUiB3IEFTIGxlYWRfaWdub3JlLAorICAgICAgIGxhZyhv cmJpdCwgMSkgSUdOT1JFIE5VTExTIE9WRVIgdyBBUyBsYWdfaWdub3JlCitGUk9NIHBsYW5ldHMK K1dJTkRPVyB3IEFTIChPUkRFUiBCWSBuYW1lIFJPV1MgQkVUV0VFTiAyIFBSRUNFRElORyBBTkQg MiBGT0xMT1dJTkcpCis7CisKKy0tIHRlc3QgcGFydGl0aW9ucworU0VMRUNUIG5hbWUsCisgICAg ICAgZGlzdGFuY2UsCisgICAgICAgb3JiaXQsCisgICAgICAgZmlyc3RfdmFsdWUob3JiaXQpIElH Tk9SRSBOVUxMUyBPVkVSIHcsCisgICAgICAgbGFzdF92YWx1ZShvcmJpdCkgSUdOT1JFIE5VTExT IE9WRVIgdywKKyAgICAgICBudGhfdmFsdWUob3JiaXQsIDIpIElHTk9SRSBOVUxMUyBPVkVSIHcs CisgICAgICAgbGVhZChvcmJpdCwgMSkgSUdOT1JFIE5VTExTIE9WRVIgdyBBUyBsZWFkX2lnbm9y ZSwKKyAgICAgICBsYWcob3JiaXQsIDEpIElHTk9SRSBOVUxMUyBPVkVSIHcgQVMgbGFnX2lnbm9y ZQorRlJPTSBwbGFuZXRzCitXSU5ET1cgdyBBUyAoUEFSVElUSU9OIEJZIGRpc3RhbmNlIE9SREVS IEJZIG5hbWUgUk9XUyBCRVRXRUVOIDIgUFJFQ0VESU5HIEFORCAyIEZPTExPV0lORykKKzsKKwor LS0gbnRoX3ZhbHVlIHdpdGhvdXQgbnVsbHMKK1NFTEVDVCB4LAorICAgICAgIG50aF92YWx1ZSh4 LDIpIElHTk9SRSBOVUxMUyBPVkVSIHcKK0ZST00gZ2VuZXJhdGVfc2VyaWVzKDEsNSkgZyh4KQor V0lORE9XIHcgQVMgKE9SREVSIEJZIHggUk9XUyBCRVRXRUVOIDIgUFJFQ0VESU5HIEFORCAyIEZP TExPV0lORyBFWENMVURFIENVUlJFTlQgUk9XKTsKK1NFTEVDVCB4LAorICAgICAgIG50aF92YWx1 ZSh4LDIpIElHTk9SRSBOVUxMUyBPVkVSIHcKK0ZST00gZ2VuZXJhdGVfc2VyaWVzKDEsNSkgZyh4 KQorV0lORE9XIHcgQVMgKE9SREVSIEJZIHggUk9XUyBCRVRXRUVOIDIgUFJFQ0VESU5HIEFORCAy IEZPTExPV0lORyk7CisKKy0tY2xlYW51cAorRFJPUCBUQUJMRSBwbGFuZXRzIENBU0NBREU7Ci0t IAoyLjQzLjAKCg== --0000000000001438e9062e6d71b3--