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 1uS8eh-003suW-EH for pgsql-hackers@arkaria.postgresql.org; Thu, 19 Jun 2025 06:21:48 +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 1uS8ef-008IHR-GZ for pgsql-hackers@arkaria.postgresql.org; Thu, 19 Jun 2025 06:21:46 +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 1uS8ee-008IEH-E4 for pgsql-hackers@lists.postgresql.org; Thu, 19 Jun 2025 06:21:45 +0000 Received: from meldrar.postgresql.org ([2a02:c0:301:0:ffff::31]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1uS8eb-002pCY-0m; Thu, 19 Jun 2025 06:21:44 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=postgresql.org; s=20171124; h=Content-Transfer-Encoding:Content-Type: Mime-Version:References:In-Reply-To:From:Subject:Cc:To:Message-Id:Date:Sender :Reply-To:Content-ID:Content-Description; bh=W8fEc3JnM/XlbNCwtS+uPvM0tSan9q2lKP2vIWIiayM=; b=4JtHhLl0GE+T0u0vj8oiCD7Wkf Mh5gQb2ptLqJU9x6/c7K0qgWunkhArtQzbrMfKg8gXpjyOiCu9SdXyRobaq1YKCbbTl9mFslECcuD 1u1gVQh8oZvCWR8WMdnHDeDQNBLxnEFgG10JomxJRWxwQXUufexR/Q7rIWwYWrG3BBVw7qjIuFJmQ DWegSpixwbLysSbvHA2aXooRgCL4rBqdh+3gGCXhnjteEsLhfwqDw9gtBPgkprtd6rwmNtkaL32B8 +ArPw/+i5Mu0l7f2UnZDTaXgCGCftB4k2p9REG4EKJfpWiFH/s0FhAD4yXmg1HtdRPDsxyEr3h1oi Ny3QucVg==; Received: from [2409:11:4120:300:dc50:a862:e62b:c769] (helo=localhost) by meldrar.postgresql.org with esmtpsa (TLS1.3) tls TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 (Exim 4.96) (envelope-from ) id 1uS8eQ-00C0q5-31; Thu, 19 Jun 2025 06:21:35 +0000 Date: Thu, 19 Jun 2025 15:21:11 +0900 (JST) Message-Id: <20250619.152111.77843597600729081.ishii@postgresql.org> To: ishii@postgresql.org Cc: krasiyan@gmail.com, ojford@gmail.com, tgl@sss.pgh.pa.us, vik@postgresfriends.org, andrew@tao11.riddles.org.uk, david@fetter.org, pgsql-hackers@postgresql.org Subject: Re: Add RESPECT/IGNORE NULLS and FROM FIRST/LAST options From: Tatsuo Ishii In-Reply-To: <20250612.075235.1886649649521129924.ishii@postgresql.org> References: <20250329.201809.1463386697879435538.ishii@postgresql.org> <20250612.075235.1886649649521129924.ishii@postgresql.org> X-Mailer: Mew version 6.8 on Emacs 26.3 Mime-Version: 1.0 Content-Type: Multipart/Mixed; boundary="--Next_Part(Thu_Jun_19_15_21_11_2025_744)--" Content-Transfer-Encoding: 7bit X-Host-Lookup-Failed: Reverse DNS lookup failed for 2409:11:4120:300:dc50:a862:e62b:c769 (failed) List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk ----Next_Part(Thu_Jun_19_15_21_11_2025_744)-- Content-Type: Text/Plain; charset=us-ascii Content-Transfer-Encoding: 7bit > Here is the v12 patch to implement the optimization on top of Oliver's > v11 patch. Only src/backend/executor/nodeWindowAgg.c was modified > (especially ignorenulls_getfuncarginframe). In the patch I created > 2-bit not null information array, representing following status for > each row: > > UNKNOWN: the row is not determined whether it's NULL or NOT yet. > This is the initial value. > NULL: the row has been determined to be NULL. > NOT NULL: the row has been determined to be NOT NULL. > > In ignorenulls_getfuncarginframe: > > For the first time window function visits a row in a frame, the row is > fetched using window_gettupleslot() and it is checked whether it is in > the frame using row_is_in_frame(). If it's in the frame and the > information in the array is UNKNOWN, ExecEvalExpr() is executed to > find out if the expression on the function argument is NULL or > not. And the result (NULL or NOT NULL) is stored in the array. > > If the information in the array is not UNKNOWN, we can skip calling > ExecEvalExpr() because the information is already in the array. > > Note that I do not skip calling window_gettupleslot() and > row_is_in_frame(), skip only calling ExecEvalExpr(), because whether a > row is in a frame or not could be changing as the current row position > moves while processing window functions. > > With this technique I observed around 40% speed up in my environment > using the script attached, comparing with Oliver's v11 patch. > > v11: > rows duration (msec) > 1000 41.019 > 2000 148.957 > 3000 248.291 > 4000 442.478 > 5000 687.395 > > v12: > rows duration (msec) > 1000 27.515 > 2000 78.913 > 3000 174.737 > 4000 311.412 > 5000 482.156 > > The patch is now generated using the standard git format-patch. Also > I have slightly adjusted the coding style so that it aligns with the > one used in nodeWindowAgg.c, and ran pgindent. > > Note that I have not modified ignorenulls_getfuncarginpartition yet. I > think we could optimize it using the not null info infrastructure as > well. Will come up with it. Attached is the v13 patch to address this: i.e. optimize window functions (lead/lag) working in a partition. In summary I get 40x speed up comparing with v12 patch. Here is the test script. EXPLAIN ANALYZE SELECT lead(x, 5000) IGNORE NULLS OVER () FROM generate_series(1,10000) g(x); This looks for the 5k th row in a partition including 10k rows. The average duration of 3 trials are: v12: 2563.665 ms v13: 126.259 ms So I got 40x speed up with the v13 patch. In v12, we needed to scan 10k row partition over and over again. In v13 I used the same NULL/NOT NULL cache infrastructure created in v12, and we need to scan the partition only once. This is the reason for the speed up. Also I removed ignorenulls_getfuncarginpartition(), which was the work horse for null treatment for window functions working for partitions in v12 patch. Basically it was a copy and modified version of WinGetFuncArgInPartition(), thus had quite a few code duplication. In v13, instead I modified WinGetFuncArgInPartition() so that it can handle directly null treatment procedures. BTW I am still not satisfied by the performance improvement for window functions for frames, that was only 40%. I will study the code to look for more optimization. Best regards, -- Tatsuo Ishii SRA OSS K.K. English: http://www.sraoss.co.jp/index_en/ Japanese:http://www.sraoss.co.jp ----Next_Part(Thu_Jun_19_15_21_11_2025_744)-- Content-Type: Application/Octet-Stream Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="v13-0001-Add-IGNORE-NULLS-RESPECT-NULLS-option-to-Window-.patch" RnJvbSA4NzI1ODgwOTliNDk2MjNmMjRmYzk3YmQyNDE4MjkyZDRiYmU2ODVjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBUYXRzdW8gSXNoaWkgPGlzaGlpQHBvc3RncmVzcWwub3JnPgpE YXRlOiBUaHUsIDE5IEp1biAyMDI1IDE0OjQwOjQxICswOTAwClN1YmplY3Q6IFtQQVRDSCB2MTNd IEFkZCBJR05PUkUgTlVMTFMvUkVTUEVDVCBOVUxMUyBvcHRpb24gdG8gV2luZG93CiBmdW5jdGlv bnMuCgpBZGQgSUdOT1JFIE5VTExTL1JFU1BFQ1QgTlVMTFMgb3B0aW9uIHRvIGxlYWQsIGxhZywg Zmlyc3RfdmFsdWUsCmxhc3RfdmFsdWUgYW5kIG50aF92YWx1ZS4KLS0tCiBkb2Mvc3JjL3NnbWwv ZnVuYy5zZ21sICAgICAgICAgICAgICAgfCAgMzggKystCiBkb2Mvc3JjL3NnbWwvc3ludGF4LnNn bWwgICAgICAgICAgICAgfCAgMTAgKy0KIHNyYy9iYWNrZW5kL2NhdGFsb2cvc3FsX2ZlYXR1cmVz LnR4dCB8ICAgMiArLQogc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZVdpbmRvd0FnZy5jIHwgNDAz ICsrKysrKysrKysrKysrKysrKysrKysrKystLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwv Y2xhdXNlcy5jIHwgICAxICsKIHNyYy9iYWNrZW5kL3BhcnNlci9ncmFtLnkgICAgICAgICAgICB8 ICAxOSArLQogc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX2Z1bmMuYyAgICAgIHwgICA5ICsKIHNy Yy9iYWNrZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMuYyAgICB8ICAgNyArLQogc3JjL2JhY2tlbmQv dXRpbHMvYWR0L3dpbmRvd2Z1bmNzLmMgIHwgIDEwICsKIHNyYy9pbmNsdWRlL25vZGVzL3BhcnNl bm9kZXMuaCAgICAgICB8ICAgMSArCiBzcmMvaW5jbHVkZS9ub2Rlcy9wcmltbm9kZXMuaCAgICAg ICAgfCAgMTMgKwogc3JjL2luY2x1ZGUvcGFyc2VyL2t3bGlzdC5oICAgICAgICAgIHwgICAyICsK IHNyYy9pbmNsdWRlL3dpbmRvd2FwaS5oICAgICAgICAgICAgICB8ICAgNiArCiBzcmMvdGVzdC9y ZWdyZXNzL2V4cGVjdGVkL3dpbmRvdy5vdXQgfCAzMTEgKysrKysrKysrKysrKysrKysrKysrCiBz cmMvdGVzdC9yZWdyZXNzL3NxbC93aW5kb3cuc3FsICAgICAgfCAxNDcgKysrKysrKysrKwogMTUg ZmlsZXMgY2hhbmdlZCwgOTI4IGluc2VydGlvbnMoKyksIDUxIGRlbGV0aW9ucygtKQoKZGlmZiAt LWdpdCBhL2RvYy9zcmMvc2dtbC9mdW5jLnNnbWwgYi9kb2Mvc3JjL3NnbWwvZnVuYy5zZ21sCmlu ZGV4IDhkN2Q5YTJmM2U4Li42YjdjMjJhMjEwOSAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL2Z1 bmMuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvZnVuYy5zZ21sCkBAIC0yMzUzMyw3ICsyMzUzMyw3 IEBAIFNFTEVDVCBjb3VudCgqKSBGUk9NIHNvbWV0YWJsZTsKICAgICAgICAgPC9pbmRleHRlcm0+ CiAgICAgICAgIDxmdW5jdGlvbj5sYWc8L2Z1bmN0aW9uPiAoIDxwYXJhbWV0ZXI+dmFsdWU8L3Bh cmFtZXRlcj4gPHR5cGU+YW55Y29tcGF0aWJsZTwvdHlwZT4KICAgICAgICAgICA8b3B0aW9uYWw+ LCA8cGFyYW1ldGVyPm9mZnNldDwvcGFyYW1ldGVyPiA8dHlwZT5pbnRlZ2VyPC90eXBlPgotICAg ICAgICAgIDxvcHRpb25hbD4sIDxwYXJhbWV0ZXI+ZGVmYXVsdDwvcGFyYW1ldGVyPiA8dHlwZT5h bnljb21wYXRpYmxlPC90eXBlPiA8L29wdGlvbmFsPjwvb3B0aW9uYWw+ICkKKyAgICAgICAgICA8 b3B0aW9uYWw+LCA8cGFyYW1ldGVyPmRlZmF1bHQ8L3BhcmFtZXRlcj4gPHR5cGU+YW55Y29tcGF0 aWJsZTwvdHlwZT4gPC9vcHRpb25hbD48L29wdGlvbmFsPiApIDxvcHRpb25hbD4gPHBhcmFtZXRl cj5udWxsIHRyZWF0bWVudDwvcGFyYW1ldGVyPiA8L29wdGlvbmFsPgogICAgICAgICA8cmV0dXJu dmFsdWU+YW55Y29tcGF0aWJsZTwvcmV0dXJudmFsdWU+CiAgICAgICAgPC9wYXJhPgogICAgICAg IDxwYXJhPgpAQCAtMjM1NTgsNyArMjM1NTgsNyBAQCBTRUxFQ1QgY291bnQoKikgRlJPTSBzb21l dGFibGU7CiAgICAgICAgIDwvaW5kZXh0ZXJtPgogICAgICAgICA8ZnVuY3Rpb24+bGVhZDwvZnVu Y3Rpb24+ICggPHBhcmFtZXRlcj52YWx1ZTwvcGFyYW1ldGVyPiA8dHlwZT5hbnljb21wYXRpYmxl PC90eXBlPgogICAgICAgICAgIDxvcHRpb25hbD4sIDxwYXJhbWV0ZXI+b2Zmc2V0PC9wYXJhbWV0 ZXI+IDx0eXBlPmludGVnZXI8L3R5cGU+Ci0gICAgICAgICAgPG9wdGlvbmFsPiwgPHBhcmFtZXRl cj5kZWZhdWx0PC9wYXJhbWV0ZXI+IDx0eXBlPmFueWNvbXBhdGlibGU8L3R5cGU+IDwvb3B0aW9u YWw+PC9vcHRpb25hbD4gKQorICAgICAgICAgIDxvcHRpb25hbD4sIDxwYXJhbWV0ZXI+ZGVmYXVs dDwvcGFyYW1ldGVyPiA8dHlwZT5hbnljb21wYXRpYmxlPC90eXBlPiA8L29wdGlvbmFsPjwvb3B0 aW9uYWw+ICkgPG9wdGlvbmFsPiA8cGFyYW1ldGVyPm51bGwgdHJlYXRtZW50PC9wYXJhbWV0ZXI+ IDwvb3B0aW9uYWw+CiAgICAgICAgIDxyZXR1cm52YWx1ZT5hbnljb21wYXRpYmxlPC9yZXR1cm52 YWx1ZT4KICAgICAgICA8L3BhcmE+CiAgICAgICAgPHBhcmE+CkBAIC0yMzU4MSw3ICsyMzU4MSw3 IEBAIFNFTEVDVCBjb3VudCgqKSBGUk9NIHNvbWV0YWJsZTsKICAgICAgICAgPGluZGV4dGVybT4K ICAgICAgICAgIDxwcmltYXJ5PmZpcnN0X3ZhbHVlPC9wcmltYXJ5PgogICAgICAgICA8L2luZGV4 dGVybT4KLSAgICAgICAgPGZ1bmN0aW9uPmZpcnN0X3ZhbHVlPC9mdW5jdGlvbj4gKCA8cGFyYW1l dGVyPnZhbHVlPC9wYXJhbWV0ZXI+IDx0eXBlPmFueWVsZW1lbnQ8L3R5cGU+ICkKKyAgICAgICAg PGZ1bmN0aW9uPmZpcnN0X3ZhbHVlPC9mdW5jdGlvbj4gKCA8cGFyYW1ldGVyPnZhbHVlPC9wYXJh bWV0ZXI+IDx0eXBlPmFueWVsZW1lbnQ8L3R5cGU+ICkgPG9wdGlvbmFsPiA8cGFyYW1ldGVyPm51 bGwgdHJlYXRtZW50PC9wYXJhbWV0ZXI+IDwvb3B0aW9uYWw+CiAgICAgICAgIDxyZXR1cm52YWx1 ZT5hbnllbGVtZW50PC9yZXR1cm52YWx1ZT4KICAgICAgICA8L3BhcmE+CiAgICAgICAgPHBhcmE+ CkBAIC0yMzU5NSw3ICsyMzU5NSw3IEBAIFNFTEVDVCBjb3VudCgqKSBGUk9NIHNvbWV0YWJsZTsK ICAgICAgICAgPGluZGV4dGVybT4KICAgICAgICAgIDxwcmltYXJ5Pmxhc3RfdmFsdWU8L3ByaW1h cnk+CiAgICAgICAgIDwvaW5kZXh0ZXJtPgotICAgICAgICA8ZnVuY3Rpb24+bGFzdF92YWx1ZTwv ZnVuY3Rpb24+ICggPHBhcmFtZXRlcj52YWx1ZTwvcGFyYW1ldGVyPiA8dHlwZT5hbnllbGVtZW50 PC90eXBlPiApCisgICAgICAgIDxmdW5jdGlvbj5sYXN0X3ZhbHVlPC9mdW5jdGlvbj4gKCA8cGFy YW1ldGVyPnZhbHVlPC9wYXJhbWV0ZXI+IDx0eXBlPmFueWVsZW1lbnQ8L3R5cGU+ICkgPG9wdGlv bmFsPiA8cGFyYW1ldGVyPm51bGwgdHJlYXRtZW50PC9wYXJhbWV0ZXI+IDwvb3B0aW9uYWw+CiAg ICAgICAgIDxyZXR1cm52YWx1ZT5hbnllbGVtZW50PC9yZXR1cm52YWx1ZT4KICAgICAgICA8L3Bh cmE+CiAgICAgICAgPHBhcmE+CkBAIC0yMzYwOSw3ICsyMzYwOSw3IEBAIFNFTEVDVCBjb3VudCgq KSBGUk9NIHNvbWV0YWJsZTsKICAgICAgICAgPGluZGV4dGVybT4KICAgICAgICAgIDxwcmltYXJ5 Pm50aF92YWx1ZTwvcHJpbWFyeT4KICAgICAgICAgPC9pbmRleHRlcm0+Ci0gICAgICAgIDxmdW5j dGlvbj5udGhfdmFsdWU8L2Z1bmN0aW9uPiAoIDxwYXJhbWV0ZXI+dmFsdWU8L3BhcmFtZXRlcj4g PHR5cGU+YW55ZWxlbWVudDwvdHlwZT4sIDxwYXJhbWV0ZXI+bjwvcGFyYW1ldGVyPiA8dHlwZT5p bnRlZ2VyPC90eXBlPiApCisgICAgICAgIDxmdW5jdGlvbj5udGhfdmFsdWU8L2Z1bmN0aW9uPiAo IDxwYXJhbWV0ZXI+dmFsdWU8L3BhcmFtZXRlcj4gPHR5cGU+YW55ZWxlbWVudDwvdHlwZT4sIDxw YXJhbWV0ZXI+bjwvcGFyYW1ldGVyPiA8dHlwZT5pbnRlZ2VyPC90eXBlPiApIDxvcHRpb25hbD4g PHBhcmFtZXRlcj5udWxsIHRyZWF0bWVudDwvcGFyYW1ldGVyPiA8L29wdGlvbmFsPgogICAgICAg ICA8cmV0dXJudmFsdWU+YW55ZWxlbWVudDwvcmV0dXJudmFsdWU+CiAgICAgICAgPC9wYXJhPgog ICAgICAgIDxwYXJhPgpAQCAtMjM2NTgsMTggKzIzNjU4LDI2IEBAIFNFTEVDVCBjb3VudCgqKSBG Uk9NIHNvbWV0YWJsZTsKICAgIE90aGVyIGZyYW1lIHNwZWNpZmljYXRpb25zIGNhbiBiZSB1c2Vk IHRvIG9idGFpbiBvdGhlciBlZmZlY3RzLgogICA8L3BhcmE+CiAKKyAgPHBhcmE+CisgICBUaGUg PGxpdGVyYWw+bnVsbCB0cmVhdG1lbnQ8L2xpdGVyYWw+IG9wdGlvbiBtdXN0IGJlIG9uZSBvZjoK KzxzeW5vcHNpcz4KKyAgUkVTUEVDVCBOVUxMUworICBJR05PUkUgTlVMTFMKKzwvc3lub3BzaXM+ CisgICBJZiB1bnNwZWNpZmllZCwgdGhlIGRlZmF1bHQgaXMgPGxpdGVyYWw+UkVTUEVDVCBOVUxM UzwvbGl0ZXJhbD4gd2hpY2ggaW5jbHVkZXMgTlVMTAorICAgdmFsdWVzIGluIGFueSByZXN1bHQg Y2FsY3VsYXRpb24uIDxsaXRlcmFsPklHTk9SRSBOVUxMUzwvbGl0ZXJhbD4gaWdub3JlcyBOVUxM IHZhbHVlcy4KKyAgIFRoaXMgb3B0aW9uIGlzIG9ubHkgYWxsb3dlZCBmb3IgdGhlIGZvbGxvd2lu ZyBmdW5jdGlvbnM6IDxmdW5jdGlvbj5sYWc8L2Z1bmN0aW9uPiwKKyAgIDxmdW5jdGlvbj5sZWFk PC9mdW5jdGlvbj4sIDxmdW5jdGlvbj5maXJzdF92YWx1ZTwvZnVuY3Rpb24+LCA8ZnVuY3Rpb24+ bGFzdF92YWx1ZTwvZnVuY3Rpb24+LAorICAgPGZ1bmN0aW9uPm50aF92YWx1ZTwvZnVuY3Rpb24+ LgorICA8L3BhcmE+CisKICAgPG5vdGU+CiAgICA8cGFyYT4KLSAgICBUaGUgU1FMIHN0YW5kYXJk IGRlZmluZXMgYSA8bGl0ZXJhbD5SRVNQRUNUIE5VTExTPC9saXRlcmFsPiBvcgotICAgIDxsaXRl cmFsPklHTk9SRSBOVUxMUzwvbGl0ZXJhbD4gb3B0aW9uIGZvciA8ZnVuY3Rpb24+bGVhZDwvZnVu Y3Rpb24+LCA8ZnVuY3Rpb24+bGFnPC9mdW5jdGlvbj4sCi0gICAgPGZ1bmN0aW9uPmZpcnN0X3Zh bHVlPC9mdW5jdGlvbj4sIDxmdW5jdGlvbj5sYXN0X3ZhbHVlPC9mdW5jdGlvbj4sIGFuZAotICAg IDxmdW5jdGlvbj5udGhfdmFsdWU8L2Z1bmN0aW9uPi4gIFRoaXMgaXMgbm90IGltcGxlbWVudGVk IGluCi0gICAgPHByb2R1Y3RuYW1lPlBvc3RncmVTUUw8L3Byb2R1Y3RuYW1lPjogdGhlIGJlaGF2 aW9yIGlzIGFsd2F5cyB0aGUKLSAgICBzYW1lIGFzIHRoZSBzdGFuZGFyZCdzIGRlZmF1bHQsIG5h bWVseSA8bGl0ZXJhbD5SRVNQRUNUIE5VTExTPC9saXRlcmFsPi4KLSAgICBMaWtld2lzZSwgdGhl IHN0YW5kYXJkJ3MgPGxpdGVyYWw+RlJPTSBGSVJTVDwvbGl0ZXJhbD4gb3IgPGxpdGVyYWw+RlJP TSBMQVNUPC9saXRlcmFsPgotICAgIG9wdGlvbiBmb3IgPGZ1bmN0aW9uPm50aF92YWx1ZTwvZnVu Y3Rpb24+IGlzIG5vdCBpbXBsZW1lbnRlZDogb25seSB0aGUKLSAgICBkZWZhdWx0IDxsaXRlcmFs PkZST00gRklSU1Q8L2xpdGVyYWw+IGJlaGF2aW9yIGlzIHN1cHBvcnRlZC4gIChZb3UgY2FuIGFj aGlldmUKLSAgICB0aGUgcmVzdWx0IG9mIDxsaXRlcmFsPkZST00gTEFTVDwvbGl0ZXJhbD4gYnkg cmV2ZXJzaW5nIHRoZSA8bGl0ZXJhbD5PUkRFUiBCWTwvbGl0ZXJhbD4KKyAgICBUaGUgU1FMIHN0 YW5kYXJkIGRlZmluZXMgYSA8bGl0ZXJhbD5GUk9NIEZJUlNUPC9saXRlcmFsPiBvciA8bGl0ZXJh bD5GUk9NIExBU1Q8L2xpdGVyYWw+CisgICAgb3B0aW9uIGZvciA8ZnVuY3Rpb24+bnRoX3ZhbHVl PC9mdW5jdGlvbj4uIFRoaXMgaXMgbm90IGltcGxlbWVudGVkIGluCisgICAgPHByb2R1Y3RuYW1l PlBvc3RncmVTUUw8L3Byb2R1Y3RuYW1lPjogb25seSB0aGUgZGVmYXVsdCA8bGl0ZXJhbD5GUk9N IEZJUlNUPC9saXRlcmFsPgorICAgIGJlaGF2aW9yIGlzIHN1cHBvcnRlZC4gKFlvdSBjYW4gYWNo aWV2ZSB0aGUgcmVzdWx0IG9mIDxsaXRlcmFsPkZST00gTEFTVDwvbGl0ZXJhbD4gYnkKKyAgICBy ZXZlcnNpbmcgdGhlIDxsaXRlcmFsPk9SREVSIEJZPC9saXRlcmFsPgogICAgIG9yZGVyaW5nLikK ICAgIDwvcGFyYT4KICAgPC9ub3RlPgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3N5bnRheC5z Z21sIGIvZG9jL3NyYy9zZ21sL3N5bnRheC5zZ21sCmluZGV4IDkxNjE4OWE3ZDY4Li4yMzdkNzMw NmZlOCAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL3N5bnRheC5zZ21sCisrKyBiL2RvYy9zcmMv c2dtbC9zeW50YXguc2dtbApAQCAtMTgzNCw4ICsxODM0LDggQEAgRlJPTSBnZW5lcmF0ZV9zZXJp ZXMoMSwxMCkgQVMgcyhpKTsKICAgICBUaGUgc3ludGF4IG9mIGEgd2luZG93IGZ1bmN0aW9uIGNh bGwgaXMgb25lIG9mIHRoZSBmb2xsb3dpbmc6CiAKIDxzeW5vcHNpcz4KLTxyZXBsYWNlYWJsZT5m dW5jdGlvbl9uYW1lPC9yZXBsYWNlYWJsZT4gKDxvcHRpb25hbD48cmVwbGFjZWFibGU+ZXhwcmVz c2lvbjwvcmVwbGFjZWFibGU+IDxvcHRpb25hbD4sIDxyZXBsYWNlYWJsZT5leHByZXNzaW9uPC9y ZXBsYWNlYWJsZT4gLi4uIDwvb3B0aW9uYWw+PC9vcHRpb25hbD4pIFsgRklMVEVSICggV0hFUkUg PHJlcGxhY2VhYmxlPmZpbHRlcl9jbGF1c2U8L3JlcGxhY2VhYmxlPiApIF0gT1ZFUiA8cmVwbGFj ZWFibGU+d2luZG93X25hbWU8L3JlcGxhY2VhYmxlPgotPHJlcGxhY2VhYmxlPmZ1bmN0aW9uX25h bWU8L3JlcGxhY2VhYmxlPiAoPG9wdGlvbmFsPjxyZXBsYWNlYWJsZT5leHByZXNzaW9uPC9yZXBs YWNlYWJsZT4gPG9wdGlvbmFsPiwgPHJlcGxhY2VhYmxlPmV4cHJlc3Npb248L3JlcGxhY2VhYmxl PiAuLi4gPC9vcHRpb25hbD48L29wdGlvbmFsPikgWyBGSUxURVIgKCBXSEVSRSA8cmVwbGFjZWFi bGU+ZmlsdGVyX2NsYXVzZTwvcmVwbGFjZWFibGU+ICkgXSBPVkVSICggPHJlcGxhY2VhYmxlIGNs YXNzPSJwYXJhbWV0ZXIiPndpbmRvd19kZWZpbml0aW9uPC9yZXBsYWNlYWJsZT4gKQorPHJlcGxh Y2VhYmxlPmZ1bmN0aW9uX25hbWU8L3JlcGxhY2VhYmxlPiAoPG9wdGlvbmFsPjxyZXBsYWNlYWJs ZT5leHByZXNzaW9uPC9yZXBsYWNlYWJsZT4gPG9wdGlvbmFsPiwgPHJlcGxhY2VhYmxlPmV4cHJl c3Npb248L3JlcGxhY2VhYmxlPiAuLi4gPC9vcHRpb25hbD48L29wdGlvbmFsPikgPG9wdGlvbmFs Pm51bGwgdHJlYXRtZW50PC9vcHRpb25hbD4gWyBGSUxURVIgKCBXSEVSRSA8cmVwbGFjZWFibGU+ ZmlsdGVyX2NsYXVzZTwvcmVwbGFjZWFibGU+ICkgXSBPVkVSIDxyZXBsYWNlYWJsZT53aW5kb3df bmFtZTwvcmVwbGFjZWFibGU+Cis8cmVwbGFjZWFibGU+ZnVuY3Rpb25fbmFtZTwvcmVwbGFjZWFi bGU+ICg8b3B0aW9uYWw+PHJlcGxhY2VhYmxlPmV4cHJlc3Npb248L3JlcGxhY2VhYmxlPiA8b3B0 aW9uYWw+LCA8cmVwbGFjZWFibGU+ZXhwcmVzc2lvbjwvcmVwbGFjZWFibGU+IC4uLiA8L29wdGlv bmFsPjwvb3B0aW9uYWw+KSA8b3B0aW9uYWw+bnVsbCB0cmVhdG1lbnQ8L29wdGlvbmFsPiBbIEZJ TFRFUiAoIFdIRVJFIDxyZXBsYWNlYWJsZT5maWx0ZXJfY2xhdXNlPC9yZXBsYWNlYWJsZT4gKSBd IE9WRVIgKCA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+d2luZG93X2RlZmluaXRpb248 L3JlcGxhY2VhYmxlPiApCiA8cmVwbGFjZWFibGU+ZnVuY3Rpb25fbmFtZTwvcmVwbGFjZWFibGU+ ICggKiApIFsgRklMVEVSICggV0hFUkUgPHJlcGxhY2VhYmxlPmZpbHRlcl9jbGF1c2U8L3JlcGxh Y2VhYmxlPiApIF0gT1ZFUiA8cmVwbGFjZWFibGU+d2luZG93X25hbWU8L3JlcGxhY2VhYmxlPgog PHJlcGxhY2VhYmxlPmZ1bmN0aW9uX25hbWU8L3JlcGxhY2VhYmxlPiAoICogKSBbIEZJTFRFUiAo IFdIRVJFIDxyZXBsYWNlYWJsZT5maWx0ZXJfY2xhdXNlPC9yZXBsYWNlYWJsZT4gKSBdIE9WRVIg KCA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+d2luZG93X2RlZmluaXRpb248L3JlcGxh Y2VhYmxlPiApCiA8L3N5bm9wc2lzPgpAQCAtMTg3Myw3ICsxODczLDkgQEAgRVhDTFVERSBOTyBP VEhFUlMKIAogICAgPHBhcmE+CiAgICAgSGVyZSwgPHJlcGxhY2VhYmxlPmV4cHJlc3Npb248L3Jl cGxhY2VhYmxlPiByZXByZXNlbnRzIGFueSB2YWx1ZQotICAgIGV4cHJlc3Npb24gdGhhdCBkb2Vz IG5vdCBpdHNlbGYgY29udGFpbiB3aW5kb3cgZnVuY3Rpb24gY2FsbHMuCisgICAgZXhwcmVzc2lv biB0aGF0IGRvZXMgbm90IGl0c2VsZiBjb250YWluIHdpbmRvdyBmdW5jdGlvbiBjYWxscy4gU29t ZQorICAgIG5vbi1hZ2dyZWdhdGUgZnVuY3Rpb25zIGFsbG93IGEgPGxpdGVyYWw+bnVsbCB0cmVh dG1lbnQ8L2xpdGVyYWw+IGNsYXVzZSwKKyAgICBkZXNjcmliZWQgaW4gPHhyZWYgbGlua2VuZD0i ZnVuY3Rpb25zLXdpbmRvdyIvPi4KICAgIDwvcGFyYT4KIAogICAgPHBhcmE+CkBAIC0yMDQ4LDcg KzIwNTAsNyBAQCBFWENMVURFIE5PIE9USEVSUwogCiAgICA8cGFyYT4KICAgICBUaGUgYnVpbHQt aW4gd2luZG93IGZ1bmN0aW9ucyBhcmUgZGVzY3JpYmVkIGluIDx4cmVmCi0gICAgbGlua2VuZD0i ZnVuY3Rpb25zLXdpbmRvdy10YWJsZSIvPi4gIE90aGVyIHdpbmRvdyBmdW5jdGlvbnMgY2FuIGJl IGFkZGVkIGJ5CisgICAgbGlua2VuZD0iZnVuY3Rpb25zLXdpbmRvdy10YWJsZSIvPi4gT3RoZXIg d2luZG93IGZ1bmN0aW9ucyBjYW4gYmUgYWRkZWQgYnkKICAgICB0aGUgdXNlci4gIEFsc28sIGFu eSBidWlsdC1pbiBvciB1c2VyLWRlZmluZWQgZ2VuZXJhbC1wdXJwb3NlIG9yCiAgICAgc3RhdGlz dGljYWwgYWdncmVnYXRlIGNhbiBiZSB1c2VkIGFzIGEgd2luZG93IGZ1bmN0aW9uLiAgKE9yZGVy ZWQtc2V0CiAgICAgYW5kIGh5cG90aGV0aWNhbC1zZXQgYWdncmVnYXRlcyBjYW5ub3QgcHJlc2Vu dGx5IGJlIHVzZWQgYXMgd2luZG93IGZ1bmN0aW9ucy4pCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9jYXRhbG9nL3NxbF9mZWF0dXJlcy50eHQgYi9zcmMvYmFja2VuZC9jYXRhbG9nL3NxbF9mZWF0 dXJlcy50eHQKaW5kZXggZWJlODUzMzdjMjguLjNhOGFkMjAxNjA3IDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9jYXRhbG9nL3NxbF9mZWF0dXJlcy50eHQKKysrIGIvc3JjL2JhY2tlbmQvY2F0YWxv Zy9zcWxfZmVhdHVyZXMudHh0CkBAIC01MTgsNyArNTE4LDcgQEAgVDYxMglBZHZhbmNlZCBPTEFQ IG9wZXJhdGlvbnMJCQlZRVMKIFQ2MTMJU2FtcGxpbmcJCQlZRVMJCiBUNjE0CU5USUxFIGZ1bmN0 aW9uCQkJWUVTCQogVDYxNQlMRUFEIGFuZCBMQUcgZnVuY3Rpb25zCQkJWUVTCQotVDYxNglOdWxs IHRyZWF0bWVudCBvcHRpb24gZm9yIExFQUQgYW5kIExBRyBmdW5jdGlvbnMJCQlOTwkKK1Q2MTYJ TnVsbCB0cmVhdG1lbnQgb3B0aW9uIGZvciBMRUFEIGFuZCBMQUcgZnVuY3Rpb25zCQkJWUVTCQog VDYxNwlGSVJTVF9WQUxVRSBhbmQgTEFTVF9WQUxVRSBmdW5jdGlvbnMJCQlZRVMJCiBUNjE4CU5U SF9WQUxVRSBmdW5jdGlvbgkJCU5PCWZ1bmN0aW9uIGV4aXN0cywgYnV0IHNvbWUgb3B0aW9ucyBt aXNzaW5nCiBUNjE5CU5lc3RlZCB3aW5kb3cgZnVuY3Rpb25zCQkJTk8JCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9leGVjdXRvci9ub2RlV2luZG93QWdnLmMgYi9zcmMvYmFja2VuZC9leGVjdXRv ci9ub2RlV2luZG93QWdnLmMKaW5kZXggOWExYWNjZTJiNWQuLjIwMzU1ZWZmYjk1IDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlV2luZG93QWdnLmMKKysrIGIvc3JjL2JhY2tl bmQvZXhlY3V0b3Ivbm9kZVdpbmRvd0FnZy5jCkBAIC02OSw2ICs2OSw5IEBAIHR5cGVkZWYgc3Ry dWN0IFdpbmRvd09iamVjdERhdGEKIAlpbnQJCQlyZWFkcHRyOwkJLyogdHVwbGVzdG9yZSByZWFk IHBvaW50ZXIgZm9yIHRoaXMgZm4gKi8KIAlpbnQ2NAkJbWFya3BvczsJCS8qIHJvdyB0aGF0IG1h cmtwdHIgaXMgcG9zaXRpb25lZCBvbiAqLwogCWludDY0CQlzZWVrcG9zOwkJLyogcm93IHRoYXQg cmVhZHB0ciBpcyBwb3NpdGlvbmVkIG9uICovCisJdWludDgJICAgKm5vdG51bGxfaW5mbzsJLyog bm90IG51bGwgaW5mbyAqLworCWludAkJCW51bV9ub3RudWxsX2luZm87CS8qIHRyYWNrIHNpemUg b2YgdGhlIG5vdG51bGxfaW5mbyBhcnJheSAqLworCWludAkJCWlnbm9yZV9udWxsczsJLyogaWdu b3JlIG51bGxzICovCiB9IFdpbmRvd09iamVjdERhdGE7CiAKIC8qCkBAIC05Niw2ICs5OSw3IEBA IHR5cGVkZWYgc3RydWN0IFdpbmRvd1N0YXRlUGVyRnVuY0RhdGEKIAogCWJvb2wJCXBsYWluX2Fn ZzsJCS8qIGlzIGl0IGp1c3QgYSBwbGFpbiBhZ2dyZWdhdGUgZnVuY3Rpb24/ICovCiAJaW50CQkJ YWdnbm87CQkJLyogaWYgc28sIGluZGV4IG9mIGl0cyBXaW5kb3dTdGF0ZVBlckFnZ0RhdGEgKi8K KwlpbnQJCQlpZ25vcmVfbnVsbHM7CS8qIGlnbm9yZSBudWxscyAqLwogCiAJV2luZG93T2JqZWN0 IHdpbm9iajsJCS8qIG9iamVjdCB1c2VkIGluIHdpbmRvdyBmdW5jdGlvbiBBUEkgKi8KIH0JCQlX aW5kb3dTdGF0ZVBlckZ1bmNEYXRhOwpAQCAtMTk4LDYgKzIwMiwzMyBAQCBzdGF0aWMgYm9vbCBh cmVfcGVlcnMoV2luZG93QWdnU3RhdGUgKndpbnN0YXRlLCBUdXBsZVRhYmxlU2xvdCAqc2xvdDEs CiBzdGF0aWMgYm9vbCB3aW5kb3dfZ2V0dHVwbGVzbG90KFdpbmRvd09iamVjdCB3aW5vYmosIGlu dDY0IHBvcywKIAkJCQkJCQkJVHVwbGVUYWJsZVNsb3QgKnNsb3QpOwogCitzdGF0aWMgRGF0dW0g aWdub3JlbnVsbHNfZ2V0ZnVuY2FyZ2luZnJhbWUoV2luZG93T2JqZWN0IHdpbm9iaiwgaW50IGFy Z25vLAorCQkJCQkJCQkJCSAgIGludCByZWxwb3MsIGludCBzZWVrdHlwZSwKKwkJCQkJCQkJCQkg ICBib29sIHNldF9tYXJrLCBib29sICppc251bGwsCisJCQkJCQkJCQkJICAgYm9vbCAqaXNvdXQp Oworc3RhdGljIERhdHVtIGdldHR1cGxlX2V2YWxfcGFydGl0aW9uKFdpbmRvd09iamVjdCB3aW5v YmosIGludCBhcmdubywKKwkJCQkJCQkJCSBpbnQ2NCBhYnNfcG9zLCBib29sICppc251bGwsIGJv b2wgKmlzb3V0KTsKK3N0YXRpYyB2b2lkIGluaXRfbm90bnVsbF9pbmZvKFdpbmRvd09iamVjdCB3 aW5vYmopOworc3RhdGljIHZvaWQgZ3Jvd19ub3RudWxsX2luZm8oV2luZG93T2JqZWN0IHdpbm9i aiwgaW50NjQgcG9zKTsKK3N0YXRpYyB1aW50OCBnZXRfbm90bnVsbF9pbmZvKFdpbmRvd09iamVj dCB3aW5vYmosIGludDY0IHBvcyk7CitzdGF0aWMgdm9pZCBwdXRfbm90bnVsbF9pbmZvKFdpbmRv d09iamVjdCB3aW5vYmosIGludDY0IHBvcywgYm9vbCBpc251bGwpOworCisvKgorICogTm90IG51 bGwgaW5mbyBiaXQgYXJyYXkgY29uc2lzdHMgb2YgMi1iaXQgaXRlbXMKKyAqLworI2RlZmluZQlO Tl9VTktOT1dOCTB4MDAJCS8qIHZhbHVlIG5vdCBjYWxjdWxhdGVkIHlldCAqLworI2RlZmluZQlO Tl9OVUxMCQkweDAxCQkvKiBOVUxMICovCisjZGVmaW5lCU5OX05PVE5VTEwJMHgwMgkJLyogTk9U IE5VTEwgKi8KKyNkZWZpbmUJTk5fTUFTSwkJMHgwMwkJLyogbWFzayBmb3IgTk9UIE5VTEwgTUFQ ICovCisjZGVmaW5lIE5OX0JJVFNfUEVSX01FTUJFUgkyCS8qIG51bWJlciBvZiBiaXQgaW4gbm90 IG51bGwgbWFwICovCisvKiBudW1iZXIgb2YgaXRlbXMgcGVyIHZhcmlhYmxlICovCisjZGVmaW5l IE5OX0lURU1fUEVSX1ZBUgkoQklUU19QRVJfQllURSAvIE5OX0JJVFNfUEVSX01FTUJFUikKKy8q IGNvbnZlcnQgbWFwIHBvc2l0aW9uIHRvIGJ5dGUgb2Zmc2V0ICovCisjZGVmaW5lIE5OX1BPU19U T19CWVRFUyhwb3MpCSgocG9zKSAvIE5OX0lURU1fUEVSX1ZBUikKKy8qIGJ5dGVzIG9mZnNldCB0 byBtYXAgcG9zaXRpb24gKi8KKyNkZWZpbmUgTk5fQllURVNfVE9fUE9TKGJ5dGVzKQkoKGJ5dGVz KSAqIE5OX0lURU1fUEVSX1ZBUikKKy8qIGNhY3VsYXRlIHNoaWZ0IGJpdHMgKi8KKyNkZWZpbmUJ Tk5fU0hJRlQocG9zKQkoKHBvcykgJSBOTl9JVEVNX1BFUl9WQVIpICogTk5fQklUU19QRVJfTUVN QkVSCiAKIC8qCiAgKiBpbml0aWFsaXplX3dpbmRvd2FnZ3JlZ2F0ZQpAQCAtMTI2Myw2ICsxMjk0 LDExIEBAIGJlZ2luX3BhcnRpdGlvbihXaW5kb3dBZ2dTdGF0ZSAqd2luc3RhdGUpCiAKIAkJCXdp bm9iai0+bWFya3BvcyA9IC0xOwogCQkJd2lub2JqLT5zZWVrcG9zID0gLTE7CisKKwkJCS8qIHJl c2V0IG51bGwgbWFwICovCisJCQlpZiAocGVyZnVuY3N0YXRlLT53aW5vYmotPmlnbm9yZV9udWxs cyA9PSBJR05PUkVfTlVMTFMpCisJCQkJbWVtc2V0KHBlcmZ1bmNzdGF0ZS0+d2lub2JqLT5ub3Ru dWxsX2luZm8sIDAsCisJCQkJCSAgIE5OX1BPU19UT19CWVRFUyhwZXJmdW5jc3RhdGUtPndpbm9i ai0+bnVtX25vdG51bGxfaW5mbykpOwogCQl9CiAJfQogCkBAIC0yNjE5LDE0ICsyNjU1LDE3IEBA IEV4ZWNJbml0V2luZG93QWdnKFdpbmRvd0FnZyAqbm9kZSwgRVN0YXRlICplc3RhdGUsIGludCBl ZmxhZ3MpCiAJCQllbG9nKEVSUk9SLCAiV2luZG93RnVuYyB3aXRoIHdpbnJlZiAldSBhc3NpZ25l ZCB0byBXaW5kb3dBZ2cgd2l0aCB3aW5yZWYgJXUiLAogCQkJCSB3ZnVuYy0+d2lucmVmLCBub2Rl LT53aW5yZWYpOwogCi0JCS8qIExvb2sgZm9yIGEgcHJldmlvdXMgZHVwbGljYXRlIHdpbmRvdyBm dW5jdGlvbiAqLworCQkvKgorCQkgKiBMb29rIGZvciBhIHByZXZpb3VzIGR1cGxpY2F0ZSB3aW5k b3cgZnVuY3Rpb24sIHdoaWNoIG5lZWRzIHRoZSBzYW1lCisJCSAqIGlnbm9yZV9udWxscyB2YWx1 ZQorCQkgKi8KIAkJZm9yIChpID0gMDsgaSA8PSB3ZnVuY25vOyBpKyspCiAJCXsKIAkJCWlmIChl cXVhbCh3ZnVuYywgcGVyZnVuY1tpXS53ZnVuYykgJiYKIAkJCQkhY29udGFpbl92b2xhdGlsZV9m dW5jdGlvbnMoKE5vZGUgKikgd2Z1bmMpKQogCQkJCWJyZWFrOwogCQl9Ci0JCWlmIChpIDw9IHdm dW5jbm8pCisJCWlmIChpIDw9IHdmdW5jbm8gJiYgd2Z1bmMtPmlnbm9yZV9udWxscyA9PSBwZXJm dW5jW2ldLmlnbm9yZV9udWxscykKIAkJewogCQkJLyogRm91bmQgYSBtYXRjaCB0byBhbiBleGlz dGluZyBlbnRyeSwgc28ganVzdCBtYXJrIGl0ICovCiAJCQl3ZnVuY3N0YXRlLT53ZnVuY25vID0g aTsKQEAgLTI2NzksNiArMjcxOCw4IEBAIEV4ZWNJbml0V2luZG93QWdnKFdpbmRvd0FnZyAqbm9k ZSwgRVN0YXRlICplc3RhdGUsIGludCBlZmxhZ3MpCiAJCQl3aW5vYmotPmFyZ3N0YXRlcyA9IHdm dW5jc3RhdGUtPmFyZ3M7CiAJCQl3aW5vYmotPmxvY2FsbWVtID0gTlVMTDsKIAkJCXBlcmZ1bmNz dGF0ZS0+d2lub2JqID0gd2lub2JqOworCQkJd2lub2JqLT5pZ25vcmVfbnVsbHMgPSB3ZnVuYy0+ aWdub3JlX251bGxzOworCQkJaW5pdF9ub3RudWxsX2luZm8od2lub2JqKTsKIAogCQkJLyogSXQn cyBhIHJlYWwgd2luZG93IGZ1bmN0aW9uLCBzbyBzZXQgdXAgdG8gY2FsbCBpdC4gKi8KIAkJCWZt Z3JfaW5mb19jeHQod2Z1bmMtPndpbmZub2lkLCAmcGVyZnVuY3N0YXRlLT5mbGluZm8sCkBAIC0z MjE0LDEyICszMjU1LDI3NCBAQCB3aW5kb3dfZ2V0dHVwbGVzbG90KFdpbmRvd09iamVjdCB3aW5v YmosIGludDY0IHBvcywgVHVwbGVUYWJsZVNsb3QgKnNsb3QpCiAJcmV0dXJuIHRydWU7CiB9CiAK Ky8qCisgKiBnZXQgdHVwcGxlIGFuZCBldmFsdWF0ZSBpbiBhIHBhcnRpdGlvbgorICovCitzdGF0 aWMgRGF0dW0KK2dldHR1cGxlX2V2YWxfcGFydGl0aW9uKFdpbmRvd09iamVjdCB3aW5vYmosIGlu dCBhcmdubywKKwkJCQkJCWludDY0IGFic19wb3MsIGJvb2wgKmlzbnVsbCwgYm9vbCAqaXNvdXQp Cit7CisJV2luZG93QWdnU3RhdGUgKndpbnN0YXRlOworCUV4cHJDb250ZXh0ICplY29udGV4dDsK KwlUdXBsZVRhYmxlU2xvdCAqc2xvdDsKKworCXdpbnN0YXRlID0gd2lub2JqLT53aW5zdGF0ZTsK KwlzbG90ID0gd2luc3RhdGUtPnRlbXBfc2xvdF8xOworCWlmICghd2luZG93X2dldHR1cGxlc2xv dCh3aW5vYmosIGFic19wb3MsIHNsb3QpKQorCXsKKwkJLyogb3V0IG9mIHBhcnRpdGlvbiAqLwor CQlpZiAoaXNvdXQpCisJCQkqaXNvdXQgPSB0cnVlOworCQkqaXNudWxsID0gdHJ1ZTsKKwkJcmV0 dXJuIChEYXR1bSkgMDsKKwl9CisKKwlpZiAoaXNvdXQpCisJCSppc291dCA9IGZhbHNlOworCWVj b250ZXh0ID0gd2luc3RhdGUtPnNzLnBzLnBzX0V4cHJDb250ZXh0OworCWVjb250ZXh0LT5lY3h0 X291dGVydHVwbGUgPSBzbG90OworCXJldHVybiBFeGVjRXZhbEV4cHIoKEV4cHJTdGF0ZSAqKSBs aXN0X250aCh3aW5vYmotPmFyZ3N0YXRlcywgYXJnbm8pLAorCQkJCQkJZWNvbnRleHQsIGlzbnVs bCk7Cit9CisKKy8qCisgKiBpZ25vcmVudWxsc19nZXRmdW5jYXJnaW5mcmFtZQorICogRm9yIElH Tk9SRSBOVUxMUywgZ2V0IHRoZSBuZXh0IG5vbm51bGwgdmFsdWUgaW4gdGhlIGZyYW1lLCBtb3Zp bmcgZm9yd2FyZAorICogb3IgYmFja3dhcmQgdW50aWwgd2UgZmluZCBhIHZhbHVlIG9yIHJlYWNo IHRoZSBmcmFtZSdzIGVuZC4KKyAqLworc3RhdGljIERhdHVtCitpZ25vcmVudWxsc19nZXRmdW5j YXJnaW5mcmFtZShXaW5kb3dPYmplY3Qgd2lub2JqLCBpbnQgYXJnbm8sCisJCQkJCQkJICBpbnQg cmVscG9zLCBpbnQgc2Vla3R5cGUsIGJvb2wgc2V0X21hcmssCisJCQkJCQkJICBib29sICppc251 bGwsIGJvb2wgKmlzb3V0KQoreworCVdpbmRvd0FnZ1N0YXRlICp3aW5zdGF0ZTsKKwlFeHByQ29u dGV4dCAqZWNvbnRleHQ7CisJVHVwbGVUYWJsZVNsb3QgKnNsb3Q7CisJRGF0dW0JCWRhdHVtOwor CWludDY0CQlhYnNfcG9zOworCWludDY0CQltYXJrX3BvczsKKwlpbnQJCQlub3RudWxsX29mZnNl dDsKKwlpbnQJCQlub3RudWxsX3JlbHBvczsKKwlpbnQJCQlmb3J3YXJkOworCisJQXNzZXJ0KFdp bmRvd09iamVjdElzVmFsaWQod2lub2JqKSk7CisJd2luc3RhdGUgPSB3aW5vYmotPndpbnN0YXRl OworCWVjb250ZXh0ID0gd2luc3RhdGUtPnNzLnBzLnBzX0V4cHJDb250ZXh0OworCXNsb3QgPSB3 aW5zdGF0ZS0+dGVtcF9zbG90XzE7CisJZGF0dW0gPSAoRGF0dW0pIDA7CisJbm90bnVsbF9vZmZz ZXQgPSAwOworCW5vdG51bGxfcmVscG9zID0gYWJzKHJlbHBvcyk7CisKKwlzd2l0Y2ggKHNlZWt0 eXBlKQorCXsKKwkJY2FzZSBXSU5ET1dfU0VFS19DVVJSRU5UOgorCQkJZWxvZyhFUlJPUiwgIldJ TkRPV19TRUVLX0NVUlJFTlQgaXMgbm90IHN1cHBvcnRlZCBmb3IgV2luR2V0RnVuY0FyZ0luRnJh bWUiKTsKKwkJCWFic19wb3MgPSBtYXJrX3BvcyA9IDA7IC8qIGtlZXAgY29tcGlsZXIgcXVpZXQg Ki8KKwkJCWJyZWFrOworCQljYXNlIFdJTkRPV19TRUVLX0hFQUQ6CisJCQkvKiByZWplY3Rpbmcg cmVscG9zIDwgMCBpcyBlYXN5IGFuZCBzaW1wbGlmaWVzIGNvZGUgYmVsb3cgKi8KKwkJCWlmIChy ZWxwb3MgPCAwKQorCQkJCWdvdG8gb3V0X29mX2ZyYW1lOworCQkJdXBkYXRlX2ZyYW1laGVhZHBv cyh3aW5zdGF0ZSk7CisJCQlhYnNfcG9zID0gd2luc3RhdGUtPmZyYW1laGVhZHBvczsKKwkJCW1h cmtfcG9zID0gd2luc3RhdGUtPmZyYW1laGVhZHBvczsKKwkJCWZvcndhcmQgPSAxOworCQkJYnJl YWs7CisJCWNhc2UgV0lORE9XX1NFRUtfVEFJTDoKKwkJCS8qIHJlamVjdGluZyByZWxwb3MgPiAw IGlzIGVhc3kgYW5kIHNpbXBsaWZpZXMgY29kZSBiZWxvdyAqLworCQkJaWYgKHJlbHBvcyA+IDAp CisJCQkJZ290byBvdXRfb2ZfZnJhbWU7CisJCQl1cGRhdGVfZnJhbWV0YWlscG9zKHdpbnN0YXRl KTsKKwkJCWFic19wb3MgPSB3aW5zdGF0ZS0+ZnJhbWV0YWlscG9zIC0gMTsKKwkJCW1hcmtfcG9z ID0gMDsJCS8qIGtlZXAgY29tcGlsZXIgcXVpZXQgKi8KKwkJCWZvcndhcmQgPSAtMTsKKwkJCWJy ZWFrOworCQlkZWZhdWx0OgorCQkJZWxvZyhFUlJPUiwgInVucmVjb2duaXplZCB3aW5kb3cgc2Vl ayB0eXBlOiAlZCIsIHNlZWt0eXBlKTsKKwkJCWFic19wb3MgPSBtYXJrX3BvcyA9IDA7IC8qIGtl ZXAgY29tcGlsZXIgcXVpZXQgKi8KKwkJCWJyZWFrOworCX0KKworCWRvCisJeworCQlpbnQJCQlp bmZyYW1lOworCQlpbnQJCQl2OworCisJCWlmICghd2luZG93X2dldHR1cGxlc2xvdCh3aW5vYmos IGFic19wb3MsIHNsb3QpKQorCQkJZ290byBvdXRfb2ZfZnJhbWU7CisKKwkJaW5mcmFtZSA9IHJv d19pc19pbl9mcmFtZSh3aW5zdGF0ZSwgYWJzX3Bvcywgc2xvdCk7CisJCWlmIChpbmZyYW1lID09 IC0xKQorCQkJZ290byBvdXRfb2ZfZnJhbWU7CisJCWVsc2UgaWYgKGluZnJhbWUgPT0gMCkKKwkJ CWdvdG8gYWR2YW5jZTsKKworCQlpZiAoaXNvdXQpCisJCQkqaXNvdXQgPSBmYWxzZTsKKworCQl2 ID0gZ2V0X25vdG51bGxfaW5mbyh3aW5vYmosIGFic19wb3MpOworCQlpZiAodiA9PSBOTl9OVUxM KQkJLyogdGhpcyByb3cgaXMga25vd24gdG8gYmUgTlVMTCAqLworCQkJZ290byBhZHZhbmNlOwor CisJCWVsc2UgaWYgKHYgPT0gTk5fVU5LTk9XTikJLyogbmVlZCB0byBjaGVjayBOVUxMIG9yIG5v dCAqLworCQl7CisJCQllY29udGV4dC0+ZWN4dF9vdXRlcnR1cGxlID0gc2xvdDsKKwkJCWRhdHVt ID0gRXhlY0V2YWxFeHByKAorCQkJCQkJCQkgKEV4cHJTdGF0ZSAqKSBsaXN0X250aCh3aW5vYmot PmFyZ3N0YXRlcywgYXJnbm8pLAorCQkJCQkJCQkgZWNvbnRleHQsIGlzbnVsbCk7CisJCQlpZiAo ISppc251bGwpCisJCQkJbm90bnVsbF9vZmZzZXQrKzsKKworCQkJLyogcmVjb3JkIHRoZSByb3cg c3RhdHVzICovCisJCQlwdXRfbm90bnVsbF9pbmZvKHdpbm9iaiwgYWJzX3BvcywgKmlzbnVsbCk7 CisJCX0KKwkJZWxzZQkJCQkJLyogdGhpcyByb3cgaXMga25vd24gdG8gYmUgTk9UIE5VTEwgKi8K KwkJeworCQkJbm90bnVsbF9vZmZzZXQrKzsKKwkJCWlmIChub3RudWxsX29mZnNldCA+IG5vdG51 bGxfcmVscG9zKQorCQkJeworCQkJCS8qIHRvIHByZXBhcmUgZXhpdGluZyB0aGlzIGxvb3AsIGRh dHVtIG5lZWRzIHRvIGJlIHNldCAqLworCQkJCWVjb250ZXh0LT5lY3h0X291dGVydHVwbGUgPSBz bG90OworCQkJCWRhdHVtID0gRXhlY0V2YWxFeHByKAorCQkJCQkJCQkJIChFeHByU3RhdGUgKikg bGlzdF9udGgod2lub2JqLT5hcmdzdGF0ZXMsIGFyZ25vKSwKKwkJCQkJCQkJCSBlY29udGV4dCwg aXNudWxsKTsKKwkJCX0KKwkJfQorYWR2YW5jZToKKwkJYWJzX3BvcyArPSBmb3J3YXJkOworCX0g d2hpbGUgKG5vdG51bGxfb2Zmc2V0IDw9IG5vdG51bGxfcmVscG9zKTsKKworCWlmIChzZXRfbWFy aykKKwkJV2luU2V0TWFya1Bvc2l0aW9uKHdpbm9iaiwgbWFya19wb3MpOworCisJcmV0dXJuIGRh dHVtOworCitvdXRfb2ZfZnJhbWU6CisJaWYgKGlzb3V0KQorCQkqaXNvdXQgPSB0cnVlOworCSpp c251bGwgPSB0cnVlOworCXJldHVybiAoRGF0dW0pIDA7Cit9CisKKworLyoKKyAqIGluaXRfbm90 bnVsbF9pbmZvCisgKiBJbml0aWFsaXplIG5vbiBudWxsIG1hcC4KKyAqLworc3RhdGljIHZvaWQK K2luaXRfbm90bnVsbF9pbmZvKFdpbmRvd09iamVjdCB3aW5vYmopCit7CisjZGVmaW5lCUlOSVRf Tk9UX05VTExfSU5GT19OVU0JMTI4IC8qIGluaXRpYWwgbnVtYmVyIG9mIG5vdG51bGwgaW5mbyBt ZW1iZXJzICovCisKKwlpZiAod2lub2JqLT5pZ25vcmVfbnVsbHMgPT0gUEFSU0VSX0lHTk9SRV9O VUxMUykKKwl7CisJCVNpemUJCXNpemUgPSBOTl9QT1NfVE9fQllURVMoSU5JVF9OT1RfTlVMTF9J TkZPX05VTSk7CisKKwkJd2lub2JqLT5ub3RudWxsX2luZm8gPSBwYWxsb2MwKHNpemUpOworCQl3 aW5vYmotPm51bV9ub3RudWxsX2luZm8gPSBJTklUX05PVF9OVUxMX0lORk9fTlVNOworCX0KK30K KworLyoKKyAqIGdyb3dfbm90bnVsbF9pbmZvCisgKiBleHBhbmQgbm90bnVsbF9pbmZvIGlmIG5l Y2Vzc2FyeS4KKyAqIHBvczogbm90IG51bGwgaW5mbyBwb3NpdGlvbgorKi8KK3N0YXRpYyB2b2lk Citncm93X25vdG51bGxfaW5mbyhXaW5kb3dPYmplY3Qgd2lub2JqLCBpbnQ2NCBwb3MpCit7CisJ aWYgKHBvcyA+PSB3aW5vYmotPm51bV9ub3RudWxsX2luZm8pCisJeworCQlmb3IgKDs7KQorCQl7 CisJCQlTaXplCQlvbGRzaXplID0gTk5fUE9TX1RPX0JZVEVTKHdpbm9iai0+bnVtX25vdG51bGxf aW5mbyk7CisJCQlTaXplCQluZXdzaXplID0gb2xkc2l6ZSAqIDI7CisKKwkJCXdpbm9iai0+bm90 bnVsbF9pbmZvID0KKwkJCQlyZXBhbGxvYzAod2lub2JqLT5ub3RudWxsX2luZm8sIG9sZHNpemUs IG5ld3NpemUpOworCQkJd2lub2JqLT5udW1fbm90bnVsbF9pbmZvID0gTk5fQllURVNfVE9fUE9T KG5ld3NpemUpOworCQkJaWYgKHdpbm9iai0+bnVtX25vdG51bGxfaW5mbyA+IHBvcykKKwkJCQli cmVhazsKKwkJfQorCX0KK30KKworLyoKKyAqIGdldF9ub3RudWxsX2luZm8KKyAqIHJldHJpZXZl IGEgbWFwCisgKiBwb3M6IG1hcCBwb3NpdGlvbgorICovCitzdGF0aWMgdWludDgKK2dldF9ub3Ru dWxsX2luZm8oV2luZG93T2JqZWN0IHdpbm9iaiwgaW50NjQgcG9zKQoreworCXVpbnQ4CQltYjsK KwlpbnQ2NAkJYnBvczsKKworCWdyb3dfbm90bnVsbF9pbmZvKHdpbm9iaiwgcG9zKTsKKwlicG9z ID0gTk5fUE9TX1RPX0JZVEVTKHBvcyk7CisJbWIgPSB3aW5vYmotPm5vdG51bGxfaW5mb1ticG9z XTsKKwlyZXR1cm4gKG1iID4+IChOTl9TSElGVChwb3MpKSkgJiBOTl9NQVNLOworfQorCisvKgor ICogcHV0X25vdG51bGxfaW5mbworICogdXBkYXRlIG1hcAorICogcG9zOiBtYXAgcG9zaXRpb24K KyAqLworc3RhdGljIHZvaWQKK3B1dF9ub3RudWxsX2luZm8oV2luZG93T2JqZWN0IHdpbm9iaiwg aW50NjQgcG9zLCBib29sIGlzbnVsbCkKK3sKKwl1aW50OAkJbWI7CisJaW50NjQJCWJwb3M7CisJ dWludDgJCXZhbCA9IGlzbnVsbCA/IE5OX05VTEwgOiBOTl9OT1ROVUxMOworCWludAkJCXNoaWZ0 OworCisJZ3Jvd19ub3RudWxsX2luZm8od2lub2JqLCBwb3MpOworCWJwb3MgPSBOTl9QT1NfVE9f QllURVMocG9zKTsKKwltYiA9IHdpbm9iai0+bm90bnVsbF9pbmZvW2Jwb3NdOworCXNoaWZ0ID0g Tk5fU0hJRlQocG9zKTsKKwltYiAmPSB+KE5OX01BU0sgPDwgc2hpZnQpOwkvKiBjbGVhciBtYXAg Ki8KKwltYiB8PSAodmFsIDw8IHNoaWZ0KTsJCS8qIHVwZGF0ZSBtYXAgKi8KKwl3aW5vYmotPm5v dG51bGxfaW5mb1ticG9zXSA9IG1iOworfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIEFQSSBleHBv c2VkIHRvIHdpbmRvdyBmdW5jdGlvbnMKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCisvKgorICogV2lu Q2hlY2tBbmRJbml0aWFsaXplTnVsbFRyZWF0bWVudAorICoJCUNoZWNrIG51bGwgdHJlYXRtZW50 IGNsYXVzZSBhbmQgc2V0cyBpZ25vcmVfbnVsbHMKKyAqCisgKiBXaW5kb3cgZnVuY3Rpb25zIHNo b3VsZCBjYWxsIHRoaXMgdG8gY2hlY2sgaWYgdGhleSBhcmUgYmVpbmcgY2FsbGVkIHdpdGgKKyAq IGEgbnVsbCB0cmVhdG1lbnQgY2xhdXNlIHdoZW4gdGhleSBkb24ndCBhbGxvdyBpdCwgb3IgdG8g c2V0IGlnbm9yZV9udWxscy4KKyAqLwordm9pZAorV2luQ2hlY2tBbmRJbml0aWFsaXplTnVsbFRy ZWF0bWVudChXaW5kb3dPYmplY3Qgd2lub2JqLAorCQkJCQkJCQkgICBib29sIGFsbG93TnVsbFRy ZWF0bWVudCwKKwkJCQkJCQkJICAgRnVuY3Rpb25DYWxsSW5mbyBmY2luZm8pCit7CisJaWYgKHdp bm9iai0+aWdub3JlX251bGxzICE9IE5PX05VTExUUkVBVE1FTlQgJiYgIWFsbG93TnVsbFRyZWF0 bWVudCkKKwl7CisJCUhlYXBUdXBsZQlwcm9jdHVwOworCQlGb3JtX3BnX3Byb2MgcHJvY2Zvcm07 CisJCU9pZAkJCWZ1bmNpZDsKKworCQlmdW5jaWQgPSBmY2luZm8tPmZsaW5mby0+Zm5fb2lkOwor CQlwcm9jdHVwID0gU2VhcmNoU3lzQ2FjaGUxKFBST0NPSUQsCisJCQkJCQkJCSAgT2JqZWN0SWRH ZXREYXR1bShmdW5jaWQpKTsKKwkJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHByb2N0dXApKQorCQkJ ZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGZ1bmN0aW9uICV1IiwgZnVuY2lk KTsKKwkJcHJvY2Zvcm0gPSAoRm9ybV9wZ19wcm9jKSBHRVRTVFJVQ1QocHJvY3R1cCk7CisJCWVs b2coRVJST1IsICJmdW5jdGlvbiAlcyBkb2VzIG5vdCBhbGxvdyBSRVNQRUNUL0lHTk9SRSBOVUxM UyIsCisJCQkgTmFtZVN0cihwcm9jZm9ybS0+cHJvbmFtZSkpOworCX0KKwllbHNlIGlmICh3aW5v YmotPmlnbm9yZV9udWxscyA9PSBQQVJTRVJfSUdOT1JFX05VTExTKQorCQl3aW5vYmotPmlnbm9y ZV9udWxscyA9IElHTk9SRV9OVUxMUzsKKworfQorCiAvKgogICogV2luR2V0UGFydGl0aW9uTG9j YWxNZW1vcnkKICAqCQlHZXQgd29ya2luZyBtZW1vcnkgdGhhdCBsaXZlcyB0aWxsIGVuZCBvZiBw YXJ0aXRpb24gcHJvY2Vzc2luZwpAQCAtMzM3OCwyMyArMzY4MSwzNyBAQCBXaW5HZXRGdW5jQXJn SW5QYXJ0aXRpb24oV2luZG93T2JqZWN0IHdpbm9iaiwgaW50IGFyZ25vLAogCQkJCQkJIGJvb2wg KmlzbnVsbCwgYm9vbCAqaXNvdXQpCiB7CiAJV2luZG93QWdnU3RhdGUgKndpbnN0YXRlOwotCUV4 cHJDb250ZXh0ICplY29udGV4dDsKLQlUdXBsZVRhYmxlU2xvdCAqc2xvdDsKLQlib29sCQlnb3R0 dXBsZTsKIAlpbnQ2NAkJYWJzX3BvczsKKwlEYXR1bQkJZGF0dW07CisJYm9vbAkJbnVsbF90cmVh dG1lbnQgPSBmYWxzZTsKKwlpbnQJCQlub3RudWxsX29mZnNldDsKKwlpbnQJCQlub3RudWxsX3Jl bHBvczsKKwlpbnQJCQlmb3J3YXJkOwogCiAJQXNzZXJ0KFdpbmRvd09iamVjdElzVmFsaWQod2lu b2JqKSk7CiAJd2luc3RhdGUgPSB3aW5vYmotPndpbnN0YXRlOwotCWVjb250ZXh0ID0gd2luc3Rh dGUtPnNzLnBzLnBzX0V4cHJDb250ZXh0OwotCXNsb3QgPSB3aW5zdGF0ZS0+dGVtcF9zbG90XzE7 CisKKwlpZiAod2lub2JqLT5pZ25vcmVfbnVsbHMgPT0gSUdOT1JFX05VTExTICYmIHJlbHBvcyAh PSAwKQorCXsKKwkJbnVsbF90cmVhdG1lbnQgPSB0cnVlOworCQlub3RudWxsX29mZnNldCA9IDA7 CisJCW5vdG51bGxfcmVscG9zID0gYWJzKHJlbHBvcyk7CisJCWZvcndhcmQgPSByZWxwb3MgPiAw ID8gMSA6IC0xOworCX0KIAogCXN3aXRjaCAoc2Vla3R5cGUpCiAJewogCQljYXNlIFdJTkRPV19T RUVLX0NVUlJFTlQ6Ci0JCQlhYnNfcG9zID0gd2luc3RhdGUtPmN1cnJlbnRwb3MgKyByZWxwb3M7 CisJCQlpZiAobnVsbF90cmVhdG1lbnQpCisJCQkJYWJzX3BvcyA9IHdpbnN0YXRlLT5jdXJyZW50 cG9zOworCQkJZWxzZQorCQkJCWFic19wb3MgPSB3aW5zdGF0ZS0+Y3VycmVudHBvcyArIHJlbHBv czsKIAkJCWJyZWFrOwogCQljYXNlIFdJTkRPV19TRUVLX0hFQUQ6Ci0JCQlhYnNfcG9zID0gcmVs cG9zOworCQkJaWYgKG51bGxfdHJlYXRtZW50KQorCQkJCWFic19wb3MgPSAwOworCQkJZWxzZQor CQkJCWFic19wb3MgPSByZWxwb3M7CiAJCQlicmVhazsKIAkJY2FzZSBXSU5ET1dfU0VFS19UQUlM OgogCQkJc3Bvb2xfdHVwbGVzKHdpbnN0YXRlLCAtMSk7CkBAIC0zNDA2LDI1ICszNzIzLDU3IEBA IFdpbkdldEZ1bmNBcmdJblBhcnRpdGlvbihXaW5kb3dPYmplY3Qgd2lub2JqLCBpbnQgYXJnbm8s CiAJCQlicmVhazsKIAl9CiAKLQlnb3R0dXBsZSA9IHdpbmRvd19nZXR0dXBsZXNsb3Qod2lub2Jq LCBhYnNfcG9zLCBzbG90KTsKLQotCWlmICghZ290dHVwbGUpCisJaWYgKCFudWxsX3RyZWF0bWVu dCkJCS8qIElHTk9SRSBOVUxMUyBpcyBub3Qgc3BlY2lmaWVkICovCiAJewotCQlpZiAoaXNvdXQp Ci0JCQkqaXNvdXQgPSB0cnVlOwotCQkqaXNudWxsID0gdHJ1ZTsKLQkJcmV0dXJuIChEYXR1bSkg MDsKLQl9Ci0JZWxzZQotCXsKLQkJaWYgKGlzb3V0KQotCQkJKmlzb3V0ID0gZmFsc2U7Ci0JCWlm IChzZXRfbWFyaykKKwkJZGF0dW0gPSBnZXR0dXBsZV9ldmFsX3BhcnRpdGlvbih3aW5vYmosIGFy Z25vLAorCQkJCQkJCQkJCWFic19wb3MsIGlzbnVsbCwgaXNvdXQpOworCQlpZiAoISppc291dCAm JiBzZXRfbWFyaykKIAkJCVdpblNldE1hcmtQb3NpdGlvbih3aW5vYmosIGFic19wb3MpOwotCQll Y29udGV4dC0+ZWN4dF9vdXRlcnR1cGxlID0gc2xvdDsKLQkJcmV0dXJuIEV4ZWNFdmFsRXhwcigo RXhwclN0YXRlICopIGxpc3RfbnRoKHdpbm9iai0+YXJnc3RhdGVzLCBhcmdubyksCi0JCQkJCQkJ ZWNvbnRleHQsIGlzbnVsbCk7CisJCXJldHVybiBkYXR1bTsKIAl9CisKKwkvKgorCSAqIEdldCB0 aGUgbmV4dCBub25udWxsIHZhbHVlIGluIHRoZSBwYXJ0aXRpb24sIG1vdmluZyBmb3J3YXJkIG9y IGJhY2t3YXJkCisJICogdW50aWwgd2UgZmluZCBhIHZhbHVlIG9yIHJlYWNoIHRoZSBwYXJ0aXRp b24ncyBlbmQuCisJICovCisJZG8KKwl7CisJCWFic19wb3MgKz0gZm9yd2FyZDsKKwkJc3dpdGNo IChnZXRfbm90bnVsbF9pbmZvKHdpbm9iaiwgYWJzX3BvcykpCisJCXsKKwkJCWNhc2UgTk5fTk9U TlVMTDoJLyogdGhpcyByb3cgaXMga25vd24gdG8gYmUgTk9UIE5VTEwgKi8KKwkJCQlub3RudWxs X29mZnNldCsrOworCQkJCWlmIChub3RudWxsX29mZnNldCA+PSBub3RudWxsX3JlbHBvcykKKwkJ CQl7CisJCQkJCS8qIHByZXBhcmUgdG8gZXhpdCB0aGlzIGxvb3AgKi8KKwkJCQkJZGF0dW0gPSBn ZXR0dXBsZV9ldmFsX3BhcnRpdGlvbih3aW5vYmosIGFyZ25vLAorCQkJCQkJCQkJCQkJCWFic19w b3MsIGlzbnVsbCwgaXNvdXQpOworCQkJCX0KKwkJCQlicmVhazsKKwkJCWNhc2UgTk5fTlVMTDoJ CS8qIHRoaXMgcm93IGlzIGtub3duIHRvIGJlIE5VTEwgKi8KKwkJCQlpZiAoaXNvdXQpCisJCQkJ CSppc291dCA9IGZhbHNlOworCQkJCSppc251bGwgPSB0cnVlOworCQkJCWRhdHVtID0gMDsKKwkJ CQlicmVhazsKKwkJCWRlZmF1bHQ6CQkJLyogbmVlZCB0byBjaGVjayBOVUxMIG9yIG5vdCAqLwor CQkJCWRhdHVtID0gZ2V0dHVwbGVfZXZhbF9wYXJ0aXRpb24od2lub2JqLCBhcmdubywKKwkJCQkJ CQkJCQkJCWFic19wb3MsIGlzbnVsbCwgaXNvdXQpOworCQkJCWlmICgqaXNvdXQpCQkvKiBvdXQg b2YgcGFydGl0aW9uPyAqLworCQkJCQlyZXR1cm4gZGF0dW07CisKKwkJCQlpZiAoISppc251bGwp CisJCQkJCW5vdG51bGxfb2Zmc2V0Kys7CisJCQkJLyogcmVjb3JkIHRoZSByb3cgc3RhdHVzICov CisJCQkJcHV0X25vdG51bGxfaW5mbyh3aW5vYmosIGFic19wb3MsICppc251bGwpOworCQkJCWJy ZWFrOworCQl9CisJfSB3aGlsZSAobm90bnVsbF9vZmZzZXQgPCBub3RudWxsX3JlbHBvcyk7CisK KwlpZiAoISppc291dCAmJiBzZXRfbWFyaykKKwkJV2luU2V0TWFya1Bvc2l0aW9uKHdpbm9iaiwg YWJzX3Bvcyk7CisKKwlyZXR1cm4gZGF0dW07CiB9CiAKIC8qCkBAIC0zNDc2LDYgKzM4MjUsMTAg QEAgV2luR2V0RnVuY0FyZ0luRnJhbWUoV2luZG93T2JqZWN0IHdpbm9iaiwgaW50IGFyZ25vLAog CWVjb250ZXh0ID0gd2luc3RhdGUtPnNzLnBzLnBzX0V4cHJDb250ZXh0OwogCXNsb3QgPSB3aW5z dGF0ZS0+dGVtcF9zbG90XzE7CiAKKwlpZiAod2lub2JqLT5pZ25vcmVfbnVsbHMgPT0gSUdOT1JF X05VTExTKQorCQlyZXR1cm4gaWdub3JlbnVsbHNfZ2V0ZnVuY2FyZ2luZnJhbWUod2lub2JqLCBh cmdubywgcmVscG9zLCBzZWVrdHlwZSwKKwkJCQkJCQkJCQkJIHNldF9tYXJrLCBpc251bGwsIGlz b3V0KTsKKwogCXN3aXRjaCAoc2Vla3R5cGUpCiAJewogCQljYXNlIFdJTkRPV19TRUVLX0NVUlJF TlQ6CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9jbGF1c2VzLmMgYi9z cmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9jbGF1c2VzLmMKaW5kZXggMjZhM2UwNTAwODYuLjk3 MDVjOGVmMmU4IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9jbGF1c2Vz LmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvY2xhdXNlcy5jCkBAIC0yNTcyLDYg KzI1NzIsNyBAQCBldmFsX2NvbnN0X2V4cHJlc3Npb25zX211dGF0b3IoTm9kZSAqbm9kZSwKIAkJ CQluZXdleHByLT53aW5yZWYgPSBleHByLT53aW5yZWY7CiAJCQkJbmV3ZXhwci0+d2luc3RhciA9 IGV4cHItPndpbnN0YXI7CiAJCQkJbmV3ZXhwci0+d2luYWdnID0gZXhwci0+d2luYWdnOworCQkJ CW5ld2V4cHItPmlnbm9yZV9udWxscyA9IGV4cHItPmlnbm9yZV9udWxsczsKIAkJCQluZXdleHBy LT5sb2NhdGlvbiA9IGV4cHItPmxvY2F0aW9uOwogCiAJCQkJcmV0dXJuIChOb2RlICopIG5ld2V4 cHI7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wYXJzZXIvZ3JhbS55IGIvc3JjL2JhY2tlbmQv cGFyc2VyL2dyYW0ueQppbmRleCA1MGY1MzE1OWQ1OC4uNTQ3YjdmN2U0NjUgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL3BhcnNlci9ncmFtLnkKKysrIGIvc3JjL2JhY2tlbmQvcGFyc2VyL2dyYW0u eQpAQCAtNjMxLDcgKzYzMSw3IEBAIHN0YXRpYyBOb2RlICptYWtlUmVjdXJzaXZlVmlld1NlbGVj dChjaGFyICpyZWxuYW1lLCBMaXN0ICphbGlhc2VzLCBOb2RlICpxdWVyeSk7CiAldHlwZSA8bGlz dD4Jd2luZG93X2NsYXVzZSB3aW5kb3dfZGVmaW5pdGlvbl9saXN0IG9wdF9wYXJ0aXRpb25fY2xh dXNlCiAldHlwZSA8d2luZGVmPgl3aW5kb3dfZGVmaW5pdGlvbiBvdmVyX2NsYXVzZSB3aW5kb3df c3BlY2lmaWNhdGlvbgogCQkJCW9wdF9mcmFtZV9jbGF1c2UgZnJhbWVfZXh0ZW50IGZyYW1lX2Jv dW5kCi0ldHlwZSA8aXZhbD4Jb3B0X3dpbmRvd19leGNsdXNpb25fY2xhdXNlCisldHlwZSA8aXZh bD4JbnVsbF90cmVhdG1lbnQgb3B0X3dpbmRvd19leGNsdXNpb25fY2xhdXNlCiAldHlwZSA8c3Ry PgkJb3B0X2V4aXN0aW5nX3dpbmRvd19uYW1lCiAldHlwZSA8Ym9vbGVhbj4gb3B0X2lmX25vdF9l eGlzdHMKICV0eXBlIDxib29sZWFuPiBvcHRfdW5pcXVlX251bGxfdHJlYXRtZW50CkBAIC03Mjks NyArNzI5LDcgQEAgc3RhdGljIE5vZGUgKm1ha2VSZWN1cnNpdmVWaWV3U2VsZWN0KGNoYXIgKnJl bG5hbWUsIExpc3QgKmFsaWFzZXMsIE5vZGUgKnF1ZXJ5KTsKIAogCUhBTkRMRVIgSEFWSU5HIEhF QURFUl9QIEhPTEQgSE9VUl9QCiAKLQlJREVOVElUWV9QIElGX1AgSUxJS0UgSU1NRURJQVRFIElN TVVUQUJMRSBJTVBMSUNJVF9QIElNUE9SVF9QIElOX1AgSU5DTFVERQorCUlERU5USVRZX1AgSUZf UCBJR05PUkVfUCBJTElLRSBJTU1FRElBVEUgSU1NVVRBQkxFIElNUExJQ0lUX1AgSU1QT1JUX1Ag SU5fUCBJTkNMVURFCiAJSU5DTFVESU5HIElOQ1JFTUVOVCBJTkRFTlQgSU5ERVggSU5ERVhFUyBJ TkhFUklUIElOSEVSSVRTIElOSVRJQUxMWSBJTkxJTkVfUAogCUlOTkVSX1AgSU5PVVQgSU5QVVRf UCBJTlNFTlNJVElWRSBJTlNFUlQgSU5TVEVBRCBJTlRfUCBJTlRFR0VSCiAJSU5URVJTRUNUIElO VEVSVkFMIElOVE8gSU5WT0tFUiBJUyBJU05VTEwgSVNPTEFUSU9OCkBAIC03NjQsNyArNzY0LDcg QEAgc3RhdGljIE5vZGUgKm1ha2VSZWN1cnNpdmVWaWV3U2VsZWN0KGNoYXIgKnJlbG5hbWUsIExp c3QgKmFsaWFzZXMsIE5vZGUgKnF1ZXJ5KTsKIAogCVJBTkdFIFJFQUQgUkVBTCBSRUFTU0lHTiBS RUNVUlNJVkUgUkVGX1AgUkVGRVJFTkNFUyBSRUZFUkVOQ0lORwogCVJFRlJFU0ggUkVJTkRFWCBS RUxBVElWRV9QIFJFTEVBU0UgUkVOQU1FIFJFUEVBVEFCTEUgUkVQTEFDRSBSRVBMSUNBCi0JUkVT RVQgUkVTVEFSVCBSRVNUUklDVCBSRVRVUk4gUkVUVVJOSU5HIFJFVFVSTlMgUkVWT0tFIFJJR0hU IFJPTEUgUk9MTEJBQ0sgUk9MTFVQCisJUkVTRVQgUkVTUEVDVF9QIFJFU1RBUlQgUkVTVFJJQ1Qg UkVUVVJOIFJFVFVSTklORyBSRVRVUk5TIFJFVk9LRSBSSUdIVCBST0xFIFJPTExCQUNLIFJPTExV UAogCVJPVVRJTkUgUk9VVElORVMgUk9XIFJPV1MgUlVMRQogCiAJU0FWRVBPSU5UIFNDQUxBUiBT Q0hFTUEgU0NIRU1BUyBTQ1JPTEwgU0VBUkNIIFNFQ09ORF9QIFNFQ1VSSVRZIFNFTEVDVApAQCAt MTU3MzgsNyArMTU3MzgsNyBAQCBmdW5jX2FwcGxpY2F0aW9uOiBmdW5jX25hbWUgJygnICcpJwog ICogKE5vdGUgdGhhdCBtYW55IG9mIHRoZSBzcGVjaWFsIFNRTCBmdW5jdGlvbnMgd291bGRuJ3Qg YWN0dWFsbHkgbWFrZSBhbnkKICAqIHNlbnNlIGFzIGZ1bmN0aW9uYWwgaW5kZXggZW50cmllcywg YnV0IHdlIGlnbm9yZSB0aGF0IGNvbnNpZGVyYXRpb24gaGVyZS4pCiAgKi8KLWZ1bmNfZXhwcjog ZnVuY19hcHBsaWNhdGlvbiB3aXRoaW5fZ3JvdXBfY2xhdXNlIGZpbHRlcl9jbGF1c2Ugb3Zlcl9j bGF1c2UKK2Z1bmNfZXhwcjogZnVuY19hcHBsaWNhdGlvbiB3aXRoaW5fZ3JvdXBfY2xhdXNlIGZp bHRlcl9jbGF1c2UgbnVsbF90cmVhdG1lbnQgb3Zlcl9jbGF1c2UKIAkJCQl7CiAJCQkJCUZ1bmND YWxsICAgKm4gPSAoRnVuY0NhbGwgKikgJDE7CiAKQEAgLTE1NzcxLDcgKzE1NzcxLDggQEAgZnVu Y19leHByOiBmdW5jX2FwcGxpY2F0aW9uIHdpdGhpbl9ncm91cF9jbGF1c2UgZmlsdGVyX2NsYXVz ZSBvdmVyX2NsYXVzZQogCQkJCQkJbi0+YWdnX3dpdGhpbl9ncm91cCA9IHRydWU7CiAJCQkJCX0K IAkJCQkJbi0+YWdnX2ZpbHRlciA9ICQzOwotCQkJCQluLT5vdmVyID0gJDQ7CisJCQkJCW4tPmln bm9yZV9udWxscyA9ICQ0OworCQkJCQluLT5vdmVyID0gJDU7CiAJCQkJCSQkID0gKE5vZGUgKikg bjsKIAkJCQl9CiAJCQl8IGpzb25fYWdncmVnYXRlX2Z1bmMgZmlsdGVyX2NsYXVzZSBvdmVyX2Ns YXVzZQpAQCAtMTYzNjcsNiArMTYzNjgsMTIgQEAgZmlsdGVyX2NsYXVzZToKIC8qCiAgKiBXaW5k b3cgRGVmaW5pdGlvbnMKICAqLworbnVsbF90cmVhdG1lbnQ6CisJCQlJR05PUkVfUCBOVUxMU19Q CQkJCQkJeyAkJCA9IFBBUlNFUl9JR05PUkVfTlVMTFM7IH0KKwkJCXwgUkVTUEVDVF9QIE5VTExT X1AJCQkJCQl7ICQkID0gUEFSU0VSX1JFU1BFQ1RfTlVMTFM7IH0KKwkJCXwgLypFTVBUWSovCQkJ CQkJCQl7ICQkID0gTk9fTlVMTFRSRUFUTUVOVDsgfQorCQk7CisKIHdpbmRvd19jbGF1c2U6CiAJ CQlXSU5ET1cgd2luZG93X2RlZmluaXRpb25fbGlzdAkJCXsgJCQgPSAkMjsgfQogCQkJfCAvKkVN UFRZKi8JCQkJCQkJCXsgJCQgPSBOSUw7IH0KQEAgLTE3NzkzLDYgKzE3ODAwLDcgQEAgdW5yZXNl cnZlZF9rZXl3b3JkOgogCQkJfCBIT1VSX1AKIAkJCXwgSURFTlRJVFlfUAogCQkJfCBJRl9QCisJ CQl8IElHTk9SRV9QCiAJCQl8IElNTUVESUFURQogCQkJfCBJTU1VVEFCTEUKIAkJCXwgSU1QTElD SVRfUApAQCAtMTc5MTEsNiArMTc5MTksNyBAQCB1bnJlc2VydmVkX2tleXdvcmQ6CiAJCQl8IFJF UExBQ0UKIAkJCXwgUkVQTElDQQogCQkJfCBSRVNFVAorCQkJfCBSRVNQRUNUX1AKIAkJCXwgUkVT VEFSVAogCQkJfCBSRVNUUklDVAogCQkJfCBSRVRVUk4KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L3BhcnNlci9wYXJzZV9mdW5jLmMgYi9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfZnVuYy5jCmlu ZGV4IDU4M2JiYmYyMzJmLi4zNzcyYzUxNGIxZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcGFy c2VyL3BhcnNlX2Z1bmMuYworKysgYi9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfZnVuYy5jCkBA IC05OCw2ICs5OCw3IEBAIFBhcnNlRnVuY09yQ29sdW1uKFBhcnNlU3RhdGUgKnBzdGF0ZSwgTGlz dCAqZnVuY25hbWUsIExpc3QgKmZhcmdzLAogCWJvb2wJCWFnZ19zdGFyID0gKGZuID8gZm4tPmFn Z19zdGFyIDogZmFsc2UpOwogCWJvb2wJCWFnZ19kaXN0aW5jdCA9IChmbiA/IGZuLT5hZ2dfZGlz dGluY3QgOiBmYWxzZSk7CiAJYm9vbAkJZnVuY192YXJpYWRpYyA9IChmbiA/IGZuLT5mdW5jX3Zh cmlhZGljIDogZmFsc2UpOworCWludAkJCWlnbm9yZV9udWxscyA9IChmbiA/IGZuLT5pZ25vcmVf bnVsbHMgOiAwKTsKIAlDb2VyY2lvbkZvcm0gZnVuY2Zvcm1hdCA9IChmbiA/IGZuLT5mdW5jZm9y bWF0IDogQ09FUkNFX0VYUExJQ0lUX0NBTEwpOwogCWJvb2wJCWNvdWxkX2JlX3Byb2plY3Rpb247 CiAJT2lkCQkJcmV0dHlwZTsKQEAgLTUxNCw2ICs1MTUsMTMgQEAgUGFyc2VGdW5jT3JDb2x1bW4o UGFyc2VTdGF0ZSAqcHN0YXRlLCBMaXN0ICpmdW5jbmFtZSwgTGlzdCAqZmFyZ3MsCiAJCQkJCQkg ZXJybXNnKCIlcyBpcyBub3QgYW4gb3JkZXJlZC1zZXQgYWdncmVnYXRlLCBzbyBpdCBjYW5ub3Qg aGF2ZSBXSVRISU4gR1JPVVAiLAogCQkJCQkJCQlOYW1lTGlzdFRvU3RyaW5nKGZ1bmNuYW1lKSks CiAJCQkJCQkgcGFyc2VyX2VycnBvc2l0aW9uKHBzdGF0ZSwgbG9jYXRpb24pKSk7CisKKwkJCS8q IEl0IGFsc28gY2FuJ3QgdHJlYXQgbnVsbHMgYXMgYSB3aW5kb3cgZnVuY3Rpb24gKi8KKwkJCWlm IChpZ25vcmVfbnVsbHMgIT0gTk9fTlVMTFRSRUFUTUVOVCkKKwkJCQllcmVwb3J0KEVSUk9SLAor CQkJCQkJKGVycmNvZGUoRVJSQ09ERV9XUk9OR19PQkpFQ1RfVFlQRSksCisJCQkJCQkgZXJybXNn KCJhZ2dyZWdhdGUgZnVuY3Rpb25zIGRvIG5vdCBhY2NlcHQgUkVTUEVDVC9JR05PUkUgTlVMTFMi KSwKKwkJCQkJCSBwYXJzZXJfZXJycG9zaXRpb24ocHN0YXRlLCBsb2NhdGlvbikpKTsKIAkJfQog CX0KIAllbHNlIGlmIChmZHJlc3VsdCA9PSBGVU5DREVUQUlMX1dJTkRPV0ZVTkMpCkBAIC04MzQs NiArODQyLDcgQEAgUGFyc2VGdW5jT3JDb2x1bW4oUGFyc2VTdGF0ZSAqcHN0YXRlLCBMaXN0ICpm dW5jbmFtZSwgTGlzdCAqZmFyZ3MsCiAJCXdmdW5jLT53aW5zdGFyID0gYWdnX3N0YXI7CiAJCXdm dW5jLT53aW5hZ2cgPSAoZmRyZXN1bHQgPT0gRlVOQ0RFVEFJTF9BR0dSRUdBVEUpOwogCQl3ZnVu Yy0+YWdnZmlsdGVyID0gYWdnX2ZpbHRlcjsKKwkJd2Z1bmMtPmlnbm9yZV9udWxscyA9IGlnbm9y ZV9udWxsczsKIAkJd2Z1bmMtPnJ1bkNvbmRpdGlvbiA9IE5JTDsKIAkJd2Z1bmMtPmxvY2F0aW9u ID0gbG9jYXRpb247CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9ydWxldXRp bHMuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMuYwppbmRleCAzZDZlNmJkYmZk Mi4uNGU4MzdkMmFmZWEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9ydWxldXRp bHMuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvcnVsZXV0aWxzLmMKQEAgLTExMDkwLDcg KzExMDkwLDEyIEBAIGdldF93aW5kb3dmdW5jX2V4cHJfaGVscGVyKFdpbmRvd0Z1bmMgKndmdW5j LCBkZXBhcnNlX2NvbnRleHQgKmNvbnRleHQsCiAJCWdldF9ydWxlX2V4cHIoKE5vZGUgKikgd2Z1 bmMtPmFnZ2ZpbHRlciwgY29udGV4dCwgZmFsc2UpOwogCX0KIAotCWFwcGVuZFN0cmluZ0luZm9T dHJpbmcoYnVmLCAiKSBPVkVSICIpOworCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCAiKSAi KTsKKworCWlmICh3ZnVuYy0+aWdub3JlX251bGxzID09IFBBUlNFUl9JR05PUkVfTlVMTFMpCisJ CWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCAiSUdOT1JFIE5VTExTICIpOworCisJYXBwZW5k U3RyaW5nSW5mb1N0cmluZyhidWYsICJPVkVSICIpOwogCiAJaWYgKGNvbnRleHQtPndpbmRvd0Ns YXVzZSkKIAl7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvd2luZG93ZnVuY3Mu YyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC93aW5kb3dmdW5jcy5jCmluZGV4IGJiMzVmM2JjNGE5 Li45NjlmMDJhYTU5YiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3dpbmRvd2Z1 bmNzLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3dpbmRvd2Z1bmNzLmMKQEAgLTg2LDYg Kzg2LDcgQEAgd2luZG93X3Jvd19udW1iZXIoUEdfRlVOQ1RJT05fQVJHUykKIAlXaW5kb3dPYmpl Y3Qgd2lub2JqID0gUEdfV0lORE9XX09CSkVDVCgpOwogCWludDY0CQljdXJwb3MgPSBXaW5HZXRD dXJyZW50UG9zaXRpb24od2lub2JqKTsKIAorCVdpbkNoZWNrQW5kSW5pdGlhbGl6ZU51bGxUcmVh dG1lbnQod2lub2JqLCBmYWxzZSwgZmNpbmZvKTsKIAlXaW5TZXRNYXJrUG9zaXRpb24od2lub2Jq LCBjdXJwb3MpOwogCVBHX1JFVFVSTl9JTlQ2NChjdXJwb3MgKyAxKTsKIH0KQEAgLTE0MSw2ICsx NDIsNyBAQCB3aW5kb3dfcmFuayhQR19GVU5DVElPTl9BUkdTKQogCXJhbmtfY29udGV4dCAqY29u dGV4dDsKIAlib29sCQl1cDsKIAorCVdpbkNoZWNrQW5kSW5pdGlhbGl6ZU51bGxUcmVhdG1lbnQo d2lub2JqLCBmYWxzZSwgZmNpbmZvKTsKIAl1cCA9IHJhbmtfdXAod2lub2JqKTsKIAljb250ZXh0 ID0gKHJhbmtfY29udGV4dCAqKQogCQlXaW5HZXRQYXJ0aXRpb25Mb2NhbE1lbW9yeSh3aW5vYmos IHNpemVvZihyYW5rX2NvbnRleHQpKTsKQEAgLTIwMyw2ICsyMDUsNyBAQCB3aW5kb3dfZGVuc2Vf cmFuayhQR19GVU5DVElPTl9BUkdTKQogCXJhbmtfY29udGV4dCAqY29udGV4dDsKIAlib29sCQl1 cDsKIAorCVdpbkNoZWNrQW5kSW5pdGlhbGl6ZU51bGxUcmVhdG1lbnQod2lub2JqLCBmYWxzZSwg ZmNpbmZvKTsKIAl1cCA9IHJhbmtfdXAod2lub2JqKTsKIAljb250ZXh0ID0gKHJhbmtfY29udGV4 dCAqKQogCQlXaW5HZXRQYXJ0aXRpb25Mb2NhbE1lbW9yeSh3aW5vYmosIHNpemVvZihyYW5rX2Nv bnRleHQpKTsKQEAgLTI2Niw2ICsyNjksNyBAQCB3aW5kb3dfcGVyY2VudF9yYW5rKFBHX0ZVTkNU SU9OX0FSR1MpCiAJaW50NjQJCXRvdGFscm93cyA9IFdpbkdldFBhcnRpdGlvblJvd0NvdW50KHdp bm9iaik7CiAKIAlBc3NlcnQodG90YWxyb3dzID4gMCk7CisJV2luQ2hlY2tBbmRJbml0aWFsaXpl TnVsbFRyZWF0bWVudCh3aW5vYmosIGZhbHNlLCBmY2luZm8pOwogCiAJdXAgPSByYW5rX3VwKHdp bm9iaik7CiAJY29udGV4dCA9IChyYW5rX2NvbnRleHQgKikKQEAgLTMzNSw2ICszMzksNyBAQCB3 aW5kb3dfY3VtZV9kaXN0KFBHX0ZVTkNUSU9OX0FSR1MpCiAJaW50NjQJCXRvdGFscm93cyA9IFdp bkdldFBhcnRpdGlvblJvd0NvdW50KHdpbm9iaik7CiAKIAlBc3NlcnQodG90YWxyb3dzID4gMCk7 CisJV2luQ2hlY2tBbmRJbml0aWFsaXplTnVsbFRyZWF0bWVudCh3aW5vYmosIGZhbHNlLCBmY2lu Zm8pOwogCiAJdXAgPSByYW5rX3VwKHdpbm9iaik7CiAJY29udGV4dCA9IChyYW5rX2NvbnRleHQg KikKQEAgLTQxMyw2ICs0MTgsNyBAQCB3aW5kb3dfbnRpbGUoUEdfRlVOQ1RJT05fQVJHUykKIAlX aW5kb3dPYmplY3Qgd2lub2JqID0gUEdfV0lORE9XX09CSkVDVCgpOwogCW50aWxlX2NvbnRleHQg KmNvbnRleHQ7CiAKKwlXaW5DaGVja0FuZEluaXRpYWxpemVOdWxsVHJlYXRtZW50KHdpbm9iaiwg ZmFsc2UsIGZjaW5mbyk7CiAJY29udGV4dCA9IChudGlsZV9jb250ZXh0ICopCiAJCVdpbkdldFBh cnRpdGlvbkxvY2FsTWVtb3J5KHdpbm9iaiwgc2l6ZW9mKG50aWxlX2NvbnRleHQpKTsKIApAQCAt NTM1LDYgKzU0MSw3IEBAIGxlYWRsYWdfY29tbW9uKEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvLAog CWJvb2wJCWlzbnVsbDsKIAlib29sCQlpc291dDsKIAorCVdpbkNoZWNrQW5kSW5pdGlhbGl6ZU51 bGxUcmVhdG1lbnQod2lub2JqLCB0cnVlLCBmY2luZm8pOwogCWlmICh3aXRob2Zmc2V0KQogCXsK IAkJb2Zmc2V0ID0gRGF0dW1HZXRJbnQzMihXaW5HZXRGdW5jQXJnQ3VycmVudCh3aW5vYmosIDEs ICZpc251bGwpKTsKQEAgLTY1Miw2ICs2NTksNyBAQCB3aW5kb3dfZmlyc3RfdmFsdWUoUEdfRlVO Q1RJT05fQVJHUykKIAlEYXR1bQkJcmVzdWx0OwogCWJvb2wJCWlzbnVsbDsKIAorCVdpbkNoZWNr QW5kSW5pdGlhbGl6ZU51bGxUcmVhdG1lbnQod2lub2JqLCB0cnVlLCBmY2luZm8pOwogCXJlc3Vs dCA9IFdpbkdldEZ1bmNBcmdJbkZyYW1lKHdpbm9iaiwgMCwKIAkJCQkJCQkJICAwLCBXSU5ET1df U0VFS19IRUFELCB0cnVlLAogCQkJCQkJCQkgICZpc251bGwsIE5VTEwpOwpAQCAtNjczLDYgKzY4 MSw3IEBAIHdpbmRvd19sYXN0X3ZhbHVlKFBHX0ZVTkNUSU9OX0FSR1MpCiAJRGF0dW0JCXJlc3Vs dDsKIAlib29sCQlpc251bGw7CiAKKwlXaW5DaGVja0FuZEluaXRpYWxpemVOdWxsVHJlYXRtZW50 KHdpbm9iaiwgdHJ1ZSwgZmNpbmZvKTsKIAlyZXN1bHQgPSBXaW5HZXRGdW5jQXJnSW5GcmFtZSh3 aW5vYmosIDAsCiAJCQkJCQkJCSAgMCwgV0lORE9XX1NFRUtfVEFJTCwgdHJ1ZSwKIAkJCQkJCQkJ ICAmaXNudWxsLCBOVUxMKTsKQEAgLTY5Niw2ICs3MDUsNyBAQCB3aW5kb3dfbnRoX3ZhbHVlKFBH X0ZVTkNUSU9OX0FSR1MpCiAJYm9vbAkJaXNudWxsOwogCWludDMyCQludGg7CiAKKwlXaW5DaGVj a0FuZEluaXRpYWxpemVOdWxsVHJlYXRtZW50KHdpbm9iaiwgdHJ1ZSwgZmNpbmZvKTsKIAludGgg PSBEYXR1bUdldEludDMyKFdpbkdldEZ1bmNBcmdDdXJyZW50KHdpbm9iaiwgMSwgJmlzbnVsbCkp OwogCWlmIChpc251bGwpCiAJCVBHX1JFVFVSTl9OVUxMKCk7CmRpZmYgLS1naXQgYS9zcmMvaW5j bHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmgK aW5kZXggYmExMjY3OGQxY2IuLjhiZWRhZjJmNzUwIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9u b2Rlcy9wYXJzZW5vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5oCkBA IC00NTIsNiArNDUyLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgRnVuY0NhbGwKIAlMaXN0CSAgICphZ2df b3JkZXI7CQkvKiBPUkRFUiBCWSAobGlzdCBvZiBTb3J0QnkpICovCiAJTm9kZQkgICAqYWdnX2Zp bHRlcjsJCS8qIEZJTFRFUiBjbGF1c2UsIGlmIGFueSAqLwogCXN0cnVjdCBXaW5kb3dEZWYgKm92 ZXI7CQkvKiBPVkVSIGNsYXVzZSwgaWYgYW55ICovCisJaW50CQkJaWdub3JlX251bGxzOwkvKiBp Z25vcmUgbnVsbHMgZm9yIHdpbmRvdyBmdW5jdGlvbiAqLwogCWJvb2wJCWFnZ193aXRoaW5fZ3Jv dXA7CS8qIE9SREVSIEJZIGFwcGVhcmVkIGluIFdJVEhJTiBHUk9VUCAqLwogCWJvb2wJCWFnZ19z dGFyOwkJLyogYXJndW1lbnQgd2FzIHJlYWxseSAnKicgKi8KIAlib29sCQlhZ2dfZGlzdGluY3Q7 CS8qIGFyZ3VtZW50cyB3ZXJlIGxhYmVsZWQgRElTVElOQ1QgKi8KZGlmZiAtLWdpdCBhL3NyYy9p bmNsdWRlL25vZGVzL3ByaW1ub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvcHJpbW5vZGVzLmgK aW5kZXggMDE1MTBiMDFiNjQuLjJmMGE3N2QyY2MyIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9u b2Rlcy9wcmltbm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9wcmltbm9kZXMuaApAQCAt NTc3LDYgKzU3NywxNyBAQCB0eXBlZGVmIHN0cnVjdCBHcm91cGluZ0Z1bmMKICAqIENvbGxhdGlv biBpbmZvcm1hdGlvbiBpcyBpcnJlbGV2YW50IGZvciB0aGUgcXVlcnkganVtYmxpbmcsIGFzIGlz IHRoZQogICogaW50ZXJuYWwgc3RhdGUgaW5mb3JtYXRpb24gb2YgdGhlIG5vZGUgbGlrZSAid2lu c3RhciIgYW5kICJ3aW5hZ2ciLgogICovCisKKy8qCisgKiBOdWxsIFRyZWF0bWVudCBvcHRpb25z LiBJZiBzcGVjaWZpZWQsIGluaXRpYWxseSBzZXQgdG8gUEFSU0VSX0lHTk9SRV9OVUxMUworICog d2hpY2ggaXMgdGhlbiBjb252ZXJ0ZWQgdG8gSUdOT1JFX05VTExTIGlmIHRoZSB3aW5kb3cgZnVu Y3Rpb24gYWxsb3dzIHRoZQorICogbnVsbCB0cmVhdG1lbnQgY2xhdXNlLgorICovCisjZGVmaW5l IE5PX05VTExUUkVBVE1FTlQgMAorI2RlZmluZSBQQVJTRVJfSUdOT1JFX05VTExTIDEKKyNkZWZp bmUgUEFSU0VSX1JFU1BFQ1RfTlVMTFMgMgorI2RlZmluZSBJR05PUkVfTlVMTFMgMworCiB0eXBl ZGVmIHN0cnVjdCBXaW5kb3dGdW5jCiB7CiAJRXhwcgkJeHByOwpAQCAtNjAwLDYgKzYxMSw4IEBA IHR5cGVkZWYgc3RydWN0IFdpbmRvd0Z1bmMKIAlib29sCQl3aW5zdGFyIHBnX25vZGVfYXR0cihx dWVyeV9qdW1ibGVfaWdub3JlKTsKIAkvKiBpcyBmdW5jdGlvbiBhIHNpbXBsZSBhZ2dyZWdhdGU/ ICovCiAJYm9vbAkJd2luYWdnIHBnX25vZGVfYXR0cihxdWVyeV9qdW1ibGVfaWdub3JlKTsKKwkv KiBpZ25vcmUgbnVsbHMuIE9uZSBvZiB0aGUgTnVsbCBUcmVhdG1lbnQgb3B0aW9ucyAqLworCWlu dAkJCWlnbm9yZV9udWxsczsKIAkvKiB0b2tlbiBsb2NhdGlvbiwgb3IgLTEgaWYgdW5rbm93biAq LwogCVBhcnNlTG9jCWxvY2F0aW9uOwogfSBXaW5kb3dGdW5jOwpkaWZmIC0tZ2l0IGEvc3JjL2lu Y2x1ZGUvcGFyc2VyL2t3bGlzdC5oIGIvc3JjL2luY2x1ZGUvcGFyc2VyL2t3bGlzdC5oCmluZGV4 IGE0YWYzZjcxN2ExLi44NDE4MmVhYWFlMiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcGFyc2Vy L2t3bGlzdC5oCisrKyBiL3NyYy9pbmNsdWRlL3BhcnNlci9rd2xpc3QuaApAQCAtMjAyLDYgKzIw Miw3IEBAIFBHX0tFWVdPUkQoImhvbGQiLCBIT0xELCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVf TEFCRUwpCiBQR19LRVlXT1JEKCJob3VyIiwgSE9VUl9QLCBVTlJFU0VSVkVEX0tFWVdPUkQsIEFT X0xBQkVMKQogUEdfS0VZV09SRCgiaWRlbnRpdHkiLCBJREVOVElUWV9QLCBVTlJFU0VSVkVEX0tF WVdPUkQsIEJBUkVfTEFCRUwpCiBQR19LRVlXT1JEKCJpZiIsIElGX1AsIFVOUkVTRVJWRURfS0VZ V09SRCwgQkFSRV9MQUJFTCkKK1BHX0tFWVdPUkQoImlnbm9yZSIsIElHTk9SRV9QLCBVTlJFU0VS VkVEX0tFWVdPUkQsIEFTX0xBQkVMKQogUEdfS0VZV09SRCgiaWxpa2UiLCBJTElLRSwgVFlQRV9G VU5DX05BTUVfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoImltbWVkaWF0ZSIsIElN TUVESUFURSwgVU5SRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xBQkVMKQogUEdfS0VZV09SRCgiaW1t dXRhYmxlIiwgSU1NVVRBQkxFLCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCkBAIC0z NzgsNiArMzc5LDcgQEAgUEdfS0VZV09SRCgicmVwZWF0YWJsZSIsIFJFUEVBVEFCTEUsIFVOUkVT RVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoInJlcGxhY2UiLCBSRVBMQUNF LCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQR19LRVlXT1JEKCJyZXBsaWNhIiwg UkVQTElDQSwgVU5SRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xBQkVMKQogUEdfS0VZV09SRCgicmVz ZXQiLCBSRVNFVCwgVU5SRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xBQkVMKQorUEdfS0VZV09SRCgi cmVzcGVjdCIsIFJFU1BFQ1RfUCwgVU5SRVNFUlZFRF9LRVlXT1JELCBBU19MQUJFTCkKIFBHX0tF WVdPUkQoInJlc3RhcnQiLCBSRVNUQVJULCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwp CiBQR19LRVlXT1JEKCJyZXN0cmljdCIsIFJFU1RSSUNULCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJB UkVfTEFCRUwpCiBQR19LRVlXT1JEKCJyZXR1cm4iLCBSRVRVUk4sIFVOUkVTRVJWRURfS0VZV09S RCwgQkFSRV9MQUJFTCkKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3dpbmRvd2FwaS5oIGIvc3Jj L2luY2x1ZGUvd2luZG93YXBpLmgKaW5kZXggY2IyZWNlMTY2YjYuLjIwY2ZkOWU5ZGQ5IDEwMDY0 NAotLS0gYS9zcmMvaW5jbHVkZS93aW5kb3dhcGkuaAorKysgYi9zcmMvaW5jbHVkZS93aW5kb3dh cGkuaApAQCAtMjgsNiArMjgsOCBAQAogI2lmbmRlZiBXSU5ET1dBUElfSAogI2RlZmluZSBXSU5E T1dBUElfSAogCisjaW5jbHVkZSAiZm1nci5oIgorCiAvKiB2YWx1ZXMgb2YgInNlZWt0eXBlIiAq LwogI2RlZmluZSBXSU5ET1dfU0VFS19DVVJSRU5UIDAKICNkZWZpbmUgV0lORE9XX1NFRUtfSEVB RCAxCkBAIC00MSw2ICs0MywxMCBAQCB0eXBlZGVmIHN0cnVjdCBXaW5kb3dPYmplY3REYXRhICpX aW5kb3dPYmplY3Q7CiAjZGVmaW5lIFdpbmRvd09iamVjdElzVmFsaWQod2lub2JqKSBcCiAJKCh3 aW5vYmopICE9IE5VTEwgJiYgSXNBKHdpbm9iaiwgV2luZG93T2JqZWN0RGF0YSkpCiAKK2V4dGVy biB2b2lkIFdpbkNoZWNrQW5kSW5pdGlhbGl6ZU51bGxUcmVhdG1lbnQoV2luZG93T2JqZWN0IHdp bm9iaiwKKwkJCQkJCQkJCQkJICAgYm9vbCBhbGxvd051bGxUcmVhdG1lbnQsCisJCQkJCQkJCQkJ CSAgIEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvKTsKKwogZXh0ZXJuIHZvaWQgKldpbkdldFBhcnRp dGlvbkxvY2FsTWVtb3J5KFdpbmRvd09iamVjdCB3aW5vYmosIFNpemUgc3opOwogCiBleHRlcm4g aW50NjQgV2luR2V0Q3VycmVudFBvc2l0aW9uKFdpbmRvd09iamVjdCB3aW5vYmopOwpkaWZmIC0t Z2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC93aW5kb3cub3V0IGIvc3JjL3Rlc3QvcmVn cmVzcy9leHBlY3RlZC93aW5kb3cub3V0CmluZGV4IGI4NmI2NjhmNDMzLi5mOTI5ZDgxYmM4YSAx MDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC93aW5kb3cub3V0CisrKyBiL3Ny Yy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvd2luZG93Lm91dApAQCAtNTQ1MywzICs1NDUzLDMxNCBA QCBTRUxFQ1QgKiBGUk9NIHBnX3RlbXAuZigyKTsKICB7NX0KICg1IHJvd3MpCiAKKy0tIElHTk9S RSBOVUxMUyB0ZXN0cworQ1JFQVRFIFRFTVBPUkFSWSBUQUJMRSBwbGFuZXRzICgKKyAgICBuYW1l IHRleHQsCisgICAgZGlzdGFuY2UgdGV4dCwKKyAgICBvcmJpdCBpbnRlZ2VyCispOworSU5TRVJU IElOVE8gcGxhbmV0cyBWQUxVRVMKKyAgKCdtZXJjdXJ5JywgJ2Nsb3NlJywgODgpLAorICAoJ3Zl bnVzJywgJ2Nsb3NlJywgMjI0KSwKKyAgKCdlYXJ0aCcsICdjbG9zZScsIE5VTEwpLAorICAoJ21h cnMnLCAnY2xvc2UnLCBOVUxMKSwKKyAgKCdqdXBpdGVyJywgJ2Nsb3NlJywgNDMzMiksCisgICgn c2F0dXJuJywgJ2ZhcicsIDI0NDkxKSwKKyAgKCd1cmFudXMnLCAnZmFyJywgTlVMTCksCisgICgn bmVwdHVuZScsICdmYXInLCA2MDE4MiksCisgICgncGx1dG8nLCAnZmFyJywgOTA1NjApLAorICAo J3h5enp5JywgJ2ZhcicsIE5VTEwpOworLS0gdGVzdCBydWxldXRpbHMKK0NSRUFURSBWSUVXIHBs YW5ldHNfdmlldyBBUworU0VMRUNUIG5hbWUsCisgICAgICAgb3JiaXQsCisgICAgICAgbGFnKG9y Yml0KSBPVkVSIHcgQVMgbGFnLAorICAgICAgIGxhZyhvcmJpdCkgUkVTUEVDVCBOVUxMUyBPVkVS IHcgQVMgbGFnX3Jlc3BlY3QsCisgICAgICAgbGFnKG9yYml0KSBJR05PUkUgTlVMTFMgT1ZFUiB3 IEFTIGxhZ19pZ25vcmUKK0ZST00gcGxhbmV0cworV0lORE9XIHcgQVMgKE9SREVSIEJZIG5hbWUp Cis7CitOT1RJQ0U6ICB2aWV3ICJwbGFuZXRzX3ZpZXciIHdpbGwgYmUgYSB0ZW1wb3Jhcnkgdmll dworU0VMRUNUIHBnX2dldF92aWV3ZGVmKCdwbGFuZXRzX3ZpZXcnKTsKKyAgICAgICAgICAgICAg ICAgIHBnX2dldF92aWV3ZGVmICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBTRUxFQ1QgbmFtZSwgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICsKKyAgICAgb3JiaXQsICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICArCisgICAgIGxhZyhvcmJpdCkgT1ZFUiB3IEFTIGxhZywgICAg ICAgICAgICAgICAgICAgKworICAgICBsYWcob3JiaXQpIE9WRVIgdyBBUyBsYWdfcmVzcGVjdCwg ICAgICAgICAgICsKKyAgICAgbGFnKG9yYml0KSBJR05PUkUgTlVMTFMgT1ZFUiB3IEFTIGxhZ19p Z25vcmUrCisgICAgRlJPTSBwbGFuZXRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KworICAgV0lORE9XIHcgQVMgKE9SREVSIEJZIG5hbWUpOworKDEgcm93KQorCistLSBsYWcKK1NF TEVDVCBuYW1lLAorICAgICAgIG9yYml0LAorICAgICAgIGxhZyhvcmJpdCkgT1ZFUiB3IEFTIGxh ZywKKyAgICAgICBsYWcob3JiaXQpIFJFU1BFQ1QgTlVMTFMgT1ZFUiB3IEFTIGxhZ19yZXNwZWN0 LAorICAgICAgIGxhZyhvcmJpdCkgSUdOT1JFIE5VTExTIE9WRVIgdyBBUyBsYWdfaWdub3JlCitG Uk9NIHBsYW5ldHMKK1dJTkRPVyB3IEFTIChPUkRFUiBCWSBuYW1lKQorOworICBuYW1lICAgfCBv cmJpdCB8ICBsYWcgIHwgbGFnX3Jlc3BlY3QgfCBsYWdfaWdub3JlIAorLS0tLS0tLS0tKy0tLS0t LS0rLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLQorIGVhcnRoICAgfCAgICAgICB8 ICAgICAgIHwgICAgICAgICAgICAgfCAgICAgICAgICAgCisganVwaXRlciB8ICA0MzMyIHwgICAg ICAgfCAgICAgICAgICAgICB8ICAgICAgICAgICAKKyBtYXJzICAgIHwgICAgICAgfCAgNDMzMiB8 ICAgICAgICA0MzMyIHwgICAgICAgNDMzMgorIG1lcmN1cnkgfCAgICA4OCB8ICAgICAgIHwgICAg ICAgICAgICAgfCAgICAgICA0MzMyCisgbmVwdHVuZSB8IDYwMTgyIHwgICAgODggfCAgICAgICAg ICA4OCB8ICAgICAgICAgODgKKyBwbHV0byAgIHwgOTA1NjAgfCA2MDE4MiB8ICAgICAgIDYwMTgy IHwgICAgICA2MDE4MgorIHNhdHVybiAgfCAyNDQ5MSB8IDkwNTYwIHwgICAgICAgOTA1NjAgfCAg ICAgIDkwNTYwCisgdXJhbnVzICB8ICAgICAgIHwgMjQ0OTEgfCAgICAgICAyNDQ5MSB8ICAgICAg MjQ0OTEKKyB2ZW51cyAgIHwgICAyMjQgfCAgICAgICB8ICAgICAgICAgICAgIHwgICAgICAyNDQ5 MQorIHh5enp5ICAgfCAgICAgICB8ICAgMjI0IHwgICAgICAgICAyMjQgfCAgICAgICAgMjI0Ciso MTAgcm93cykKKworLS0gbGVhZAorU0VMRUNUIG5hbWUsCisgICAgICAgb3JiaXQsCisgICAgICAg bGVhZChvcmJpdCkgT1ZFUiB3IEFTIGxlYWQsCisgICAgICAgbGVhZChvcmJpdCkgUkVTUEVDVCBO VUxMUyBPVkVSIHcgQVMgbGVhZF9yZXNwZWN0LAorICAgICAgIGxlYWQob3JiaXQpIElHTk9SRSBO VUxMUyBPVkVSIHcgQVMgbGVhZF9pZ25vcmUKK0ZST00gcGxhbmV0cworV0lORE9XIHcgQVMgKE9S REVSIEJZIG5hbWUpCis7CisgIG5hbWUgICB8IG9yYml0IHwgbGVhZCAgfCBsZWFkX3Jlc3BlY3Qg fCBsZWFkX2lnbm9yZSAKKy0tLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0rLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tLQorIGVhcnRoICAgfCAgICAgICB8ICA0MzMyIHwgICAgICAgICA0MzMyIHwg ICAgICAgIDQzMzIKKyBqdXBpdGVyIHwgIDQzMzIgfCAgICAgICB8ICAgICAgICAgICAgICB8ICAg ICAgICAgIDg4CisgbWFycyAgICB8ICAgICAgIHwgICAgODggfCAgICAgICAgICAgODggfCAgICAg ICAgICA4OAorIG1lcmN1cnkgfCAgICA4OCB8IDYwMTgyIHwgICAgICAgIDYwMTgyIHwgICAgICAg NjAxODIKKyBuZXB0dW5lIHwgNjAxODIgfCA5MDU2MCB8ICAgICAgICA5MDU2MCB8ICAgICAgIDkw NTYwCisgcGx1dG8gICB8IDkwNTYwIHwgMjQ0OTEgfCAgICAgICAgMjQ0OTEgfCAgICAgICAyNDQ5 MQorIHNhdHVybiAgfCAyNDQ5MSB8ICAgICAgIHwgICAgICAgICAgICAgIHwgICAgICAgICAyMjQK KyB1cmFudXMgIHwgICAgICAgfCAgIDIyNCB8ICAgICAgICAgIDIyNCB8ICAgICAgICAgMjI0Cisg dmVudXMgICB8ICAgMjI0IHwgICAgICAgfCAgICAgICAgICAgICAgfCAgICAgICAgICAgIAorIHh5 enp5ICAgfCAgICAgICB8ICAgICAgIHwgICAgICAgICAgICAgIHwgICAgICAgICAgICAKKygxMCBy b3dzKQorCistLSBmaXJzdF92YWx1ZQorU0VMRUNUIG5hbWUsCisgICAgICAgb3JiaXQsCisgICAg ICAgZmlyc3RfdmFsdWUob3JiaXQpIFJFU1BFQ1QgTlVMTFMgT1ZFUiB3MSwKKyAgICAgICBmaXJz dF92YWx1ZShvcmJpdCkgSUdOT1JFIE5VTExTIE9WRVIgdzEsCisgICAgICAgZmlyc3RfdmFsdWUo b3JiaXQpIFJFU1BFQ1QgTlVMTFMgT1ZFUiB3MiwKKyAgICAgICBmaXJzdF92YWx1ZShvcmJpdCkg SUdOT1JFIE5VTExTIE9WRVIgdzIKK0ZST00gcGxhbmV0cworV0lORE9XIHcxIEFTIChPUkRFUiBC WSBuYW1lIFJPV1MgQkVUV0VFTiBVTkJPVU5ERUQgUFJFQ0VESU5HIEFORCBVTkJPVU5ERUQgRk9M TE9XSU5HKSwKKyAgICAgICB3MiBBUyAoT1JERVIgQlkgbmFtZSBST1dTIEJFVFdFRU4gMiBQUkVD RURJTkcgQU5EIDIgRk9MTE9XSU5HKQorOworICBuYW1lICAgfCBvcmJpdCB8IGZpcnN0X3ZhbHVl IHwgZmlyc3RfdmFsdWUgfCBmaXJzdF92YWx1ZSB8IGZpcnN0X3ZhbHVlIAorLS0tLS0tLS0tKy0t LS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tLQorIGVhcnRoICAgfCAgICAgICB8ICAgICAgICAgICAgIHwgICAgICAgIDQzMzIgfCAgICAg ICAgICAgICB8ICAgICAgICA0MzMyCisganVwaXRlciB8ICA0MzMyIHwgICAgICAgICAgICAgfCAg ICAgICAgNDMzMiB8ICAgICAgICAgICAgIHwgICAgICAgIDQzMzIKKyBtYXJzICAgIHwgICAgICAg fCAgICAgICAgICAgICB8ICAgICAgICA0MzMyIHwgICAgICAgICAgICAgfCAgICAgICAgNDMzMgor IG1lcmN1cnkgfCAgICA4OCB8ICAgICAgICAgICAgIHwgICAgICAgIDQzMzIgfCAgICAgICAgNDMz MiB8ICAgICAgICA0MzMyCisgbmVwdHVuZSB8IDYwMTgyIHwgICAgICAgICAgICAgfCAgICAgICAg NDMzMiB8ICAgICAgICAgICAgIHwgICAgICAgICAgODgKKyBwbHV0byAgIHwgOTA1NjAgfCAgICAg ICAgICAgICB8ICAgICAgICA0MzMyIHwgICAgICAgICAgODggfCAgICAgICAgICA4OAorIHNhdHVy biAgfCAyNDQ5MSB8ICAgICAgICAgICAgIHwgICAgICAgIDQzMzIgfCAgICAgICA2MDE4MiB8ICAg ICAgIDYwMTgyCisgdXJhbnVzICB8ICAgICAgIHwgICAgICAgICAgICAgfCAgICAgICAgNDMzMiB8 ICAgICAgIDkwNTYwIHwgICAgICAgOTA1NjAKKyB2ZW51cyAgIHwgICAyMjQgfCAgICAgICAgICAg ICB8ICAgICAgICA0MzMyIHwgICAgICAgMjQ0OTEgfCAgICAgICAyNDQ5MQorIHh5enp5ICAgfCAg ICAgICB8ICAgICAgICAgICAgIHwgICAgICAgIDQzMzIgfCAgICAgICAgICAgICB8ICAgICAgICAg MjI0CisoMTAgcm93cykKKworLS0gbnRoX3ZhbHVlCitTRUxFQ1QgbmFtZSwKKyAgICAgICBvcmJp dCwKKyAgICAgICBudGhfdmFsdWUob3JiaXQsIDIpIFJFU1BFQ1QgTlVMTFMgT1ZFUiB3MSwKKyAg ICAgICBudGhfdmFsdWUob3JiaXQsIDIpIElHTk9SRSBOVUxMUyBPVkVSIHcxLAorICAgICAgIG50 aF92YWx1ZShvcmJpdCwgMikgUkVTUEVDVCBOVUxMUyBPVkVSIHcyLAorICAgICAgIG50aF92YWx1 ZShvcmJpdCwgMikgSUdOT1JFIE5VTExTIE9WRVIgdzIKK0ZST00gcGxhbmV0cworV0lORE9XIHcx IEFTIChPUkRFUiBCWSBuYW1lIFJPV1MgQkVUV0VFTiBVTkJPVU5ERUQgUFJFQ0VESU5HIEFORCBV TkJPVU5ERUQgRk9MTE9XSU5HKSwKKyAgICAgICB3MiBBUyAoT1JERVIgQlkgbmFtZSBST1dTIEJF VFdFRU4gMiBQUkVDRURJTkcgQU5EIDIgRk9MTE9XSU5HKQorOworICBuYW1lICAgfCBvcmJpdCB8 IG50aF92YWx1ZSB8IG50aF92YWx1ZSB8IG50aF92YWx1ZSB8IG50aF92YWx1ZSAKKy0tLS0tLS0t LSstLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t CisgZWFydGggICB8ICAgICAgIHwgICAgICA0MzMyIHwgICAgICAgIDg4IHwgICAgICA0MzMyIHwg ICAgICAgICAgCisganVwaXRlciB8ICA0MzMyIHwgICAgICA0MzMyIHwgICAgICAgIDg4IHwgICAg ICA0MzMyIHwgICAgICAgIDg4CisgbWFycyAgICB8ICAgICAgIHwgICAgICA0MzMyIHwgICAgICAg IDg4IHwgICAgICA0MzMyIHwgICAgICAgIDg4CisgbWVyY3VyeSB8ICAgIDg4IHwgICAgICA0MzMy IHwgICAgICAgIDg4IHwgICAgICAgICAgIHwgICAgICAgIDg4CisgbmVwdHVuZSB8IDYwMTgyIHwg ICAgICA0MzMyIHwgICAgICAgIDg4IHwgICAgICAgIDg4IHwgICAgIDYwMTgyCisgcGx1dG8gICB8 IDkwNTYwIHwgICAgICA0MzMyIHwgICAgICAgIDg4IHwgICAgIDYwMTgyIHwgICAgIDYwMTgyCisg c2F0dXJuICB8IDI0NDkxIHwgICAgICA0MzMyIHwgICAgICAgIDg4IHwgICAgIDkwNTYwIHwgICAg IDkwNTYwCisgdXJhbnVzICB8ICAgICAgIHwgICAgICA0MzMyIHwgICAgICAgIDg4IHwgICAgIDI0 NDkxIHwgICAgIDI0NDkxCisgdmVudXMgICB8ICAgMjI0IHwgICAgICA0MzMyIHwgICAgICAgIDg4 IHwgICAgICAgICAgIHwgICAgICAgMjI0CisgeHl6enkgICB8ICAgICAgIHwgICAgICA0MzMyIHwg ICAgICAgIDg4IHwgICAgICAgMjI0IHwgICAgICAgICAgCisoMTAgcm93cykKKworLS0gbGFzdF92 YWx1ZQorU0VMRUNUIG5hbWUsCisgICAgICAgb3JiaXQsCisgICAgICAgbGFzdF92YWx1ZShvcmJp dCkgUkVTUEVDVCBOVUxMUyBPVkVSIHcxLAorICAgICAgIGxhc3RfdmFsdWUob3JiaXQpIElHTk9S RSBOVUxMUyBPVkVSIHcxLAorICAgICAgIGxhc3RfdmFsdWUob3JiaXQpIFJFU1BFQ1QgTlVMTFMg T1ZFUiB3MiwKKyAgICAgICBsYXN0X3ZhbHVlKG9yYml0KSBJR05PUkUgTlVMTFMgT1ZFUiB3Mgor RlJPTSBwbGFuZXRzCitXSU5ET1cgdzEgQVMgKE9SREVSIEJZIG5hbWUgUk9XUyBCRVRXRUVOIFVO Qk9VTkRFRCBQUkVDRURJTkcgQU5EIFVOQk9VTkRFRCBGT0xMT1dJTkcpLAorICAgICAgIHcyIEFT IChPUkRFUiBCWSBuYW1lIFJPV1MgQkVUV0VFTiAyIFBSRUNFRElORyBBTkQgMiBGT0xMT1dJTkcp Cis7CisgIG5hbWUgICB8IG9yYml0IHwgbGFzdF92YWx1ZSB8IGxhc3RfdmFsdWUgfCBsYXN0X3Zh bHVlIHwgbGFzdF92YWx1ZSAKKy0tLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLQorIGVhcnRoICAgfCAgICAgICB8ICAgICAg ICAgICAgfCAgICAgICAgMjI0IHwgICAgICAgICAgICB8ICAgICAgIDQzMzIKKyBqdXBpdGVyIHwg IDQzMzIgfCAgICAgICAgICAgIHwgICAgICAgIDIyNCB8ICAgICAgICAgODggfCAgICAgICAgIDg4 CisgbWFycyAgICB8ICAgICAgIHwgICAgICAgICAgICB8ICAgICAgICAyMjQgfCAgICAgIDYwMTgy IHwgICAgICA2MDE4MgorIG1lcmN1cnkgfCAgICA4OCB8ICAgICAgICAgICAgfCAgICAgICAgMjI0 IHwgICAgICA5MDU2MCB8ICAgICAgOTA1NjAKKyBuZXB0dW5lIHwgNjAxODIgfCAgICAgICAgICAg IHwgICAgICAgIDIyNCB8ICAgICAgMjQ0OTEgfCAgICAgIDI0NDkxCisgcGx1dG8gICB8IDkwNTYw IHwgICAgICAgICAgICB8ICAgICAgICAyMjQgfCAgICAgICAgICAgIHwgICAgICAyNDQ5MQorIHNh dHVybiAgfCAyNDQ5MSB8ICAgICAgICAgICAgfCAgICAgICAgMjI0IHwgICAgICAgIDIyNCB8ICAg ICAgICAyMjQKKyB1cmFudXMgIHwgICAgICAgfCAgICAgICAgICAgIHwgICAgICAgIDIyNCB8ICAg ICAgICAgICAgfCAgICAgICAgMjI0CisgdmVudXMgICB8ICAgMjI0IHwgICAgICAgICAgICB8ICAg ICAgICAyMjQgfCAgICAgICAgICAgIHwgICAgICAgIDIyNAorIHh5enp5ICAgfCAgICAgICB8ICAg ICAgICAgICAgfCAgICAgICAgMjI0IHwgICAgICAgICAgICB8ICAgICAgICAyMjQKKygxMCByb3dz KQorCistLSBleGNsdWRlIGN1cnJlbnQgcm93CitTRUxFQ1QgbmFtZSwKKyAgICAgICBvcmJpdCwK KyAgICAgICBmaXJzdF92YWx1ZShvcmJpdCkgSUdOT1JFIE5VTExTIE9WRVIgdywKKyAgICAgICBs YXN0X3ZhbHVlKG9yYml0KSBJR05PUkUgTlVMTFMgT1ZFUiB3LAorICAgICAgIG50aF92YWx1ZShv cmJpdCwgMikgSUdOT1JFIE5VTExTIE9WRVIgdywKKyAgICAgICBsZWFkKG9yYml0LCAxKSBJR05P UkUgTlVMTFMgT1ZFUiB3IEFTIGxlYWRfaWdub3JlLAorICAgICAgIGxhZyhvcmJpdCwgMSkgSUdO T1JFIE5VTExTIE9WRVIgdyBBUyBsYWdfaWdub3JlCitGUk9NIHBsYW5ldHMKK1dJTkRPVyB3IEFT IChPUkRFUiBCWSBuYW1lIFJPV1MgQkVUV0VFTiAyIFBSRUNFRElORyBBTkQgMiBGT0xMT1dJTkcg RVhDTFVERSBDVVJSRU5UIFJPVykKKzsKKyAgbmFtZSAgIHwgb3JiaXQgfCBmaXJzdF92YWx1ZSB8 IGxhc3RfdmFsdWUgfCBudGhfdmFsdWUgfCBsZWFkX2lnbm9yZSB8IGxhZ19pZ25vcmUgCistLS0t LS0tLS0rLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLQorIGVhcnRoICAgfCAgICAgICB8ICAgICAgICA0MzMyIHwg ICAgICAgNDMzMiB8ICAgICAgICAgICB8ICAgICAgICA0MzMyIHwgICAgICAgICAgIAorIGp1cGl0 ZXIgfCAgNDMzMiB8ICAgICAgICAgIDg4IHwgICAgICAgICA4OCB8ICAgICAgICAgICB8ICAgICAg ICAgIDg4IHwgICAgICAgICAgIAorIG1hcnMgICAgfCAgICAgICB8ICAgICAgICA0MzMyIHwgICAg ICA2MDE4MiB8ICAgICAgICA4OCB8ICAgICAgICAgIDg4IHwgICAgICAgNDMzMgorIG1lcmN1cnkg fCAgICA4OCB8ICAgICAgICA0MzMyIHwgICAgICA5MDU2MCB8ICAgICA2MDE4MiB8ICAgICAgIDYw MTgyIHwgICAgICAgNDMzMgorIG5lcHR1bmUgfCA2MDE4MiB8ICAgICAgICAgIDg4IHwgICAgICAy NDQ5MSB8ICAgICA5MDU2MCB8ICAgICAgIDkwNTYwIHwgICAgICAgICA4OAorIHBsdXRvICAgfCA5 MDU2MCB8ICAgICAgICAgIDg4IHwgICAgICAyNDQ5MSB8ICAgICA2MDE4MiB8ICAgICAgIDI0NDkx IHwgICAgICA2MDE4MgorIHNhdHVybiAgfCAyNDQ5MSB8ICAgICAgIDYwMTgyIHwgICAgICAgIDIy NCB8ICAgICA5MDU2MCB8ICAgICAgICAgMjI0IHwgICAgICA5MDU2MAorIHVyYW51cyAgfCAgICAg ICB8ICAgICAgIDkwNTYwIHwgICAgICAgIDIyNCB8ICAgICAyNDQ5MSB8ICAgICAgICAgMjI0IHwg ICAgICAyNDQ5MQorIHZlbnVzICAgfCAgIDIyNCB8ICAgICAgIDI0NDkxIHwgICAgICAyNDQ5MSB8 ICAgICAgICAgICB8ICAgICAgICAgICAgIHwgICAgICAyNDQ5MQorIHh5enp5ICAgfCAgICAgICB8 ICAgICAgICAgMjI0IHwgICAgICAgIDIyNCB8ICAgICAgICAgICB8ICAgICAgICAgICAgIHwgICAg ICAgIDIyNAorKDEwIHJvd3MpCisKKy0tIHZhbGlkIGFuZCBpbnZhbGlkIGZ1bmN0aW9ucworU0VM RUNUIHN1bShvcmJpdCkgT1ZFUiAoKSBGUk9NIHBsYW5ldHM7IC0tIHN1Y2NlZWRzCisgIHN1bSAg IAorLS0tLS0tLS0KKyAxNzk4NzcKKyAxNzk4NzcKKyAxNzk4NzcKKyAxNzk4NzcKKyAxNzk4NzcK KyAxNzk4NzcKKyAxNzk4NzcKKyAxNzk4NzcKKyAxNzk4NzcKKyAxNzk4NzcKKygxMCByb3dzKQor CitTRUxFQ1Qgc3VtKG9yYml0KSBSRVNQRUNUIE5VTExTIE9WRVIgKCkgRlJPTSBwbGFuZXRzOyAt LSBmYWlscworRVJST1I6ICBhZ2dyZWdhdGUgZnVuY3Rpb25zIGRvIG5vdCBhY2NlcHQgUkVTUEVD VC9JR05PUkUgTlVMTFMKK0xJTkUgMTogU0VMRUNUIHN1bShvcmJpdCkgUkVTUEVDVCBOVUxMUyBP VkVSICgpIEZST00gcGxhbmV0czsKKyAgICAgICAgICAgICAgIF4KK1NFTEVDVCBzdW0ob3JiaXQp IElHTk9SRSBOVUxMUyBPVkVSICgpIEZST00gcGxhbmV0czsgLS0gZmFpbHMKK0VSUk9SOiAgYWdn cmVnYXRlIGZ1bmN0aW9ucyBkbyBub3QgYWNjZXB0IFJFU1BFQ1QvSUdOT1JFIE5VTExTCitMSU5F IDE6IFNFTEVDVCBzdW0ob3JiaXQpIElHTk9SRSBOVUxMUyBPVkVSICgpIEZST00gcGxhbmV0czsK KyAgICAgICAgICAgICAgIF4KK1NFTEVDVCByb3dfbnVtYmVyKCkgT1ZFUiAoKSBGUk9NIHBsYW5l dHM7IC0tIHN1Y2NlZWRzCisgcm93X251bWJlciAKKy0tLS0tLS0tLS0tLQorICAgICAgICAgIDEK KyAgICAgICAgICAyCisgICAgICAgICAgMworICAgICAgICAgIDQKKyAgICAgICAgICA1CisgICAg ICAgICAgNgorICAgICAgICAgIDcKKyAgICAgICAgICA4CisgICAgICAgICAgOQorICAgICAgICAg MTAKKygxMCByb3dzKQorCitTRUxFQ1Qgcm93X251bWJlcigpIFJFU1BFQ1QgTlVMTFMgT1ZFUiAo KSBGUk9NIHBsYW5ldHM7IC0tIGZhaWxzCitFUlJPUjogIGZ1bmN0aW9uIHJvd19udW1iZXIgZG9l cyBub3QgYWxsb3cgUkVTUEVDVC9JR05PUkUgTlVMTFMKK1NFTEVDVCByb3dfbnVtYmVyKCkgSUdO T1JFIE5VTExTIE9WRVIgKCkgRlJPTSBwbGFuZXRzOyAtLSBmYWlscworRVJST1I6ICBmdW5jdGlv biByb3dfbnVtYmVyIGRvZXMgbm90IGFsbG93IFJFU1BFQ1QvSUdOT1JFIE5VTExTCistLSB0ZXN0 IHR3byBjb25zZWN1dGl2ZSBudWxscwordXBkYXRlIHBsYW5ldHMgc2V0IG9yYml0PW51bGwgd2hl cmUgbmFtZT0nanVwaXRlcic7CitTRUxFQ1QgbmFtZSwKKyAgICAgICBvcmJpdCwKKyAgICAgICBm aXJzdF92YWx1ZShvcmJpdCkgSUdOT1JFIE5VTExTIE9WRVIgdywKKyAgICAgICBsYXN0X3ZhbHVl KG9yYml0KSBJR05PUkUgTlVMTFMgT1ZFUiB3LAorICAgICAgIG50aF92YWx1ZShvcmJpdCwgMikg SUdOT1JFIE5VTExTIE9WRVIgdywKKyAgICAgICBsZWFkKG9yYml0LCAxKSBJR05PUkUgTlVMTFMg T1ZFUiB3IEFTIGxlYWRfaWdub3JlLAorICAgICAgIGxhZyhvcmJpdCwgMSkgSUdOT1JFIE5VTExT IE9WRVIgdyBBUyBsYWdfaWdub3JlCitGUk9NIHBsYW5ldHMKK1dJTkRPVyB3IEFTIChPUkRFUiBC WSBuYW1lIFJPV1MgQkVUV0VFTiAyIFBSRUNFRElORyBBTkQgMiBGT0xMT1dJTkcpCis7CisgIG5h bWUgICB8IG9yYml0IHwgZmlyc3RfdmFsdWUgfCBsYXN0X3ZhbHVlIHwgbnRoX3ZhbHVlIHwgbGVh ZF9pZ25vcmUgfCBsYWdfaWdub3JlIAorLS0tLS0tLS0tKy0tLS0tLS0rLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0KKyBlYXJ0 aCAgIHwgICAgICAgfCAgICAgICAgICAgICB8ICAgICAgICAgICAgfCAgICAgICAgICAgfCAgICAg ICAgICA4OCB8ICAgICAgICAgICAKKyBqdXBpdGVyIHwgICAgICAgfCAgICAgICAgICA4OCB8ICAg ICAgICAgODggfCAgICAgICAgICAgfCAgICAgICAgICA4OCB8ICAgICAgICAgICAKKyBtYXJzICAg IHwgICAgICAgfCAgICAgICAgICA4OCB8ICAgICAgNjAxODIgfCAgICAgNjAxODIgfCAgICAgICAg ICA4OCB8ICAgICAgICAgICAKKyBtZXJjdXJ5IHwgICAgODggfCAgICAgICAgICA4OCB8ICAgICAg OTA1NjAgfCAgICAgNjAxODIgfCAgICAgICA2MDE4MiB8ICAgICAgICAgICAKKyBuZXB0dW5lIHwg NjAxODIgfCAgICAgICAgICA4OCB8ICAgICAgMjQ0OTEgfCAgICAgNjAxODIgfCAgICAgICA5MDU2 MCB8ICAgICAgICAgODgKKyBwbHV0byAgIHwgOTA1NjAgfCAgICAgICAgICA4OCB8ICAgICAgMjQ0 OTEgfCAgICAgNjAxODIgfCAgICAgICAyNDQ5MSB8ICAgICAgNjAxODIKKyBzYXR1cm4gIHwgMjQ0 OTEgfCAgICAgICA2MDE4MiB8ICAgICAgICAyMjQgfCAgICAgOTA1NjAgfCAgICAgICAgIDIyNCB8 ICAgICAgOTA1NjAKKyB1cmFudXMgIHwgICAgICAgfCAgICAgICA5MDU2MCB8ICAgICAgICAyMjQg fCAgICAgMjQ0OTEgfCAgICAgICAgIDIyNCB8ICAgICAgMjQ0OTEKKyB2ZW51cyAgIHwgICAyMjQg fCAgICAgICAyNDQ5MSB8ICAgICAgICAyMjQgfCAgICAgICAyMjQgfCAgICAgICAgICAgICB8ICAg ICAgMjQ0OTEKKyB4eXp6eSAgIHwgICAgICAgfCAgICAgICAgIDIyNCB8ICAgICAgICAyMjQgfCAg ICAgICAgICAgfCAgICAgICAgICAgICB8ICAgICAgICAyMjQKKygxMCByb3dzKQorCistLSB0ZXN0 IHBhcnRpdGlvbnMKK1NFTEVDVCBuYW1lLAorICAgICAgIGRpc3RhbmNlLAorICAgICAgIG9yYml0 LAorICAgICAgIGZpcnN0X3ZhbHVlKG9yYml0KSBJR05PUkUgTlVMTFMgT1ZFUiB3LAorICAgICAg IGxhc3RfdmFsdWUob3JiaXQpIElHTk9SRSBOVUxMUyBPVkVSIHcsCisgICAgICAgbnRoX3ZhbHVl KG9yYml0LCAyKSBJR05PUkUgTlVMTFMgT1ZFUiB3LAorICAgICAgIGxlYWQob3JiaXQsIDEpIElH Tk9SRSBOVUxMUyBPVkVSIHcgQVMgbGVhZF9pZ25vcmUsCisgICAgICAgbGFnKG9yYml0LCAxKSBJ R05PUkUgTlVMTFMgT1ZFUiB3IEFTIGxhZ19pZ25vcmUKK0ZST00gcGxhbmV0cworV0lORE9XIHcg QVMgKFBBUlRJVElPTiBCWSBkaXN0YW5jZSBPUkRFUiBCWSBuYW1lIFJPV1MgQkVUV0VFTiAyIFBS RUNFRElORyBBTkQgMiBGT0xMT1dJTkcpCis7CisgIG5hbWUgICB8IGRpc3RhbmNlIHwgb3JiaXQg fCBmaXJzdF92YWx1ZSB8IGxhc3RfdmFsdWUgfCBudGhfdmFsdWUgfCBsZWFkX2lnbm9yZSB8IGxh Z19pZ25vcmUgCistLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tCisgZWFydGgg ICB8IGNsb3NlICAgIHwgICAgICAgfCAgICAgICAgICAgICB8ICAgICAgICAgICAgfCAgICAgICAg ICAgfCAgICAgICAgICA4OCB8ICAgICAgICAgICAKKyBqdXBpdGVyIHwgY2xvc2UgICAgfCAgICAg ICB8ICAgICAgICAgIDg4IHwgICAgICAgICA4OCB8ICAgICAgICAgICB8ICAgICAgICAgIDg4IHwg ICAgICAgICAgIAorIG1hcnMgICAgfCBjbG9zZSAgICB8ICAgICAgIHwgICAgICAgICAgODggfCAg ICAgICAgMjI0IHwgICAgICAgMjI0IHwgICAgICAgICAgODggfCAgICAgICAgICAgCisgbWVyY3Vy eSB8IGNsb3NlICAgIHwgICAgODggfCAgICAgICAgICA4OCB8ICAgICAgICAyMjQgfCAgICAgICAy MjQgfCAgICAgICAgIDIyNCB8ICAgICAgICAgICAKKyB2ZW51cyAgIHwgY2xvc2UgICAgfCAgIDIy NCB8ICAgICAgICAgIDg4IHwgICAgICAgIDIyNCB8ICAgICAgIDIyNCB8ICAgICAgICAgICAgIHwg ICAgICAgICA4OAorIG5lcHR1bmUgfCBmYXIgICAgICB8IDYwMTgyIHwgICAgICAgNjAxODIgfCAg ICAgIDI0NDkxIHwgICAgIDkwNTYwIHwgICAgICAgOTA1NjAgfCAgICAgICAgICAgCisgcGx1dG8g ICB8IGZhciAgICAgIHwgOTA1NjAgfCAgICAgICA2MDE4MiB8ICAgICAgMjQ0OTEgfCAgICAgOTA1 NjAgfCAgICAgICAyNDQ5MSB8ICAgICAgNjAxODIKKyBzYXR1cm4gIHwgZmFyICAgICAgfCAyNDQ5 MSB8ICAgICAgIDYwMTgyIHwgICAgICAyNDQ5MSB8ICAgICA5MDU2MCB8ICAgICAgICAgICAgIHwg ICAgICA5MDU2MAorIHVyYW51cyAgfCBmYXIgICAgICB8ICAgICAgIHwgICAgICAgOTA1NjAgfCAg ICAgIDI0NDkxIHwgICAgIDI0NDkxIHwgICAgICAgICAgICAgfCAgICAgIDI0NDkxCisgeHl6enkg ICB8IGZhciAgICAgIHwgICAgICAgfCAgICAgICAyNDQ5MSB8ICAgICAgMjQ0OTEgfCAgICAgICAg ICAgfCAgICAgICAgICAgICB8ICAgICAgMjQ0OTEKKygxMCByb3dzKQorCistLSBudGhfdmFsdWUg d2l0aG91dCBudWxscworU0VMRUNUIHgsCisgICAgICAgbnRoX3ZhbHVlKHgsMikgSUdOT1JFIE5V TExTIE9WRVIgdworRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSw1KSBnKHgpCitXSU5ET1cgdyBBUyAo T1JERVIgQlkgeCBST1dTIEJFVFdFRU4gMiBQUkVDRURJTkcgQU5EIDIgRk9MTE9XSU5HIEVYQ0xV REUgQ1VSUkVOVCBST1cpOworIHggfCBudGhfdmFsdWUgCistLS0rLS0tLS0tLS0tLS0KKyAxIHwg ICAgICAgICAzCisgMiB8ICAgICAgICAgMworIDMgfCAgICAgICAgIDIKKyA0IHwgICAgICAgICAz CisgNSB8ICAgICAgICAgNAorKDUgcm93cykKKworU0VMRUNUIHgsCisgICAgICAgbnRoX3ZhbHVl KHgsMikgSUdOT1JFIE5VTExTIE9WRVIgdworRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSw1KSBnKHgp CitXSU5ET1cgdyBBUyAoT1JERVIgQlkgeCBST1dTIEJFVFdFRU4gMiBQUkVDRURJTkcgQU5EIDIg Rk9MTE9XSU5HKTsKKyB4IHwgbnRoX3ZhbHVlIAorLS0tKy0tLS0tLS0tLS0tCisgMSB8ICAgICAg ICAgMgorIDIgfCAgICAgICAgIDIKKyAzIHwgICAgICAgICAyCisgNCB8ICAgICAgICAgMworIDUg fCAgICAgICAgIDQKKyg1IHJvd3MpCisKKy0tY2xlYW51cAorRFJPUCBUQUJMRSBwbGFuZXRzIENB U0NBREU7CitOT1RJQ0U6ICBkcm9wIGNhc2NhZGVzIHRvIHZpZXcgcGxhbmV0c192aWV3CmRpZmYg LS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC93aW5kb3cuc3FsIGIvc3JjL3Rlc3QvcmVncmVz cy9zcWwvd2luZG93LnNxbAppbmRleCAwMmYxMDVmMDcwZS4uMWY4Yzg2Njk0MzYgMTAwNjQ0Ci0t 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 IAoyLjI1LjEKCg== ----Next_Part(Thu_Jun_19_15_21_11_2025_744)----