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 1ufZlg-0095Ul-My for pgsql-hackers@arkaria.postgresql.org; Sat, 26 Jul 2025 07:56:34 +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 1ufZlf-007nTW-IU for pgsql-hackers@arkaria.postgresql.org; Sat, 26 Jul 2025 07:56:31 +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 1ufZle-007nTO-Nt for pgsql-hackers@lists.postgresql.org; Sat, 26 Jul 2025 07:56:31 +0000 Received: from mail.postgrespro.ru ([93.174.132.70]) by makus.postgresql.org with smtp (Exim 4.96) (envelope-from ) id 1ufZla-000qcy-0D for pgsql-hackers@postgresql.org; Sat, 26 Jul 2025 07:56:30 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=postgrespro.ru; s=mx2023; t=1753516582; bh=XjMCXotJslXJvWNMWykm7ZicBe+fy4XX4nje3Yjs1mU=; h=Date:From:To:Cc:Subject:In-Reply-To:References:Message-ID:From; b=KvSRDczcpUWdeJvT7317pXopvYvJP9WnCQb2Xa0JPTJFLQ+iip2b3d4ZL6+Tb9Pcw ej1UgjQmAOOGCZFbYWnFrTkn1kUHSrOf+1/JoED9jVu6EEzFrcMxQ3V2bPVv++o/UB GJ7XtmZ9gSQXtiS6IrHx48zahsisWKB0jDOd6yIr6iRaKEGAtx+cwdwCSmpgDV5e3t HPkNxUJ4dsZ79t1Zo7FDwDJoB0ZZhUCcvY/jAnVGOFkbQWU3rvIurOoYUH4QbTeHHJ FZPP3UL4QJ/ZwmicaiUIuEiKPU415Yj1URj+WYxFfNUVW6UB2kdGnloIxde5d2BXfi WTrRZbRYMykfw== Received: from mail.postgrespro.ru (webmail-slave-mstn.l.postgrespro.ru [192.168.2.28]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (Client did not present a certificate) (Authenticated sender: a.pyhalov@postgrespro.ru) by mail.postgrespro.ru (Postfix/587) with ESMTPSA id BA551601E3; Sat, 26 Jul 2025 10:56:22 +0300 (MSK) MIME-Version: 1.0 Date: Sat, 26 Jul 2025 10:56:22 +0300 From: Alexander Pyhalov To: Alena Rybakina Cc: Pgsql Hackers Subject: Re: Asynchronous MergeAppend In-Reply-To: <159b591411bb2c81332018927acbd509@postgrespro.ru> References: <59be194c5a409fb9fc9f2031581b8a44@postgrespro.ru> <764dd8b8-6374-4f5a-aac7-d8e3f6ebe5fd@postgrespro.ru> <159b591411bb2c81332018927acbd509@postgrespro.ru> Message-ID: <242bace2babce8489701c9ca65cf84f7@postgrespro.ru> X-Sender: a.pyhalov@postgrespro.ru Content-Type: multipart/mixed; boundary="=_fc2a8b8a18b772a2e5335d57ae373058" X-KSMG-AntiPhishing: NotDetected X-KSMG-AntiSpam-Interceptor-Info: not scanned X-KSMG-AntiSpam-Status: not scanned, disabled by settings X-KSMG-AntiVirus: Kaspersky Secure Mail Gateway, version 2.1.0.7854, bases: 2025/07/26 05:44:00 #27636198 X-KSMG-AntiVirus-Status: NotDetected, skipped X-KSMG-LinksScanning: not scanned, disabled by settings X-KSMG-Message-Action: skipped X-KSMG-Rule-ID: 1 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --=_fc2a8b8a18b772a2e5335d57ae373058 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=US-ASCII; format=flowed Hi. I've updated patches for asynchronous merge append. They allowed us to significantly improve performance in practice. Earlier select from partitioned (and distributed table) could switch to synchronous merge append plan from asynchronous append. Given that table could have 20+ partitions, it was cheaper, but much less efficient due to remote parts executing synchronously. In this version there's a couple of small fixes - earlier ExecMergeAppend() scanned all asyncplans, but should do this only for valid asyncplans. Also incorporated logic from commit af717317a04f5217728ce296edf4a581eb7e6ea0 Author: Heikki Linnakangas Date: Wed Mar 12 20:53:09 2025 +0200 Handle interrupts while waiting on Append's async subplans into ExecMergeAppendAsyncEventWait(). -- Best regards, Alexander Pyhalov, Postgres Professional --=_fc2a8b8a18b772a2e5335d57ae373058 Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=0002-MergeAppend-should-support-Async-Foreign-Scan-subpla.patch Content-Disposition: attachment; filename=0002-MergeAppend-should-support-Async-Foreign-Scan-subpla.patch; size=47279 RnJvbSBmZTY0ZDUyYzgzNmViMTEyMGQ3NDQ2ZDlmMWVhMWVhNWIyN2IwYmJmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbGV4YW5kZXIgUHloYWxvdiA8YS5weWhhbG92QHBvc3RncmVz cHJvLnJ1PgpEYXRlOiBTYXQsIDI2IEp1bCAyMDI1IDEwOjQzOjU3ICswMzAwClN1YmplY3Q6IFtQ QVRDSCAyLzJdIE1lcmdlQXBwZW5kIHNob3VsZCBzdXBwb3J0IEFzeW5jIEZvcmVpZ24gU2NhbiBz dWJwbGFucwoKLS0tCiAuLi4vcG9zdGdyZXNfZmR3L2V4cGVjdGVkL3Bvc3RncmVzX2Zkdy5vdXQg ICAgfCAyNDcgKysrKysrKysrCiBjb250cmliL3Bvc3RncmVzX2Zkdy9wb3N0Z3Jlc19mZHcuYyAg ICAgICAgICAgfCAgMTAgKy0KIGNvbnRyaWIvcG9zdGdyZXNfZmR3L3NxbC9wb3N0Z3Jlc19mZHcu c3FsICAgICB8ICA3OCArKysKIGRvYy9zcmMvc2dtbC9jb25maWcuc2dtbCAgICAgICAgICAgICAg ICAgICAgICB8ICAxNCArCiBzcmMvYmFja2VuZC9leGVjdXRvci9leGVjQXN5bmMuYyAgICAgICAg ICAgICAgfCAgIDQgKwogc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1lcmdlQXBwZW5kLmMgICAg ICAgIHwgNDgxICsrKysrKysrKysrKysrKysrLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgv Y29zdHNpemUuYyAgICAgICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL2Ny ZWF0ZXBsYW4uYyAgICAgICB8ICAgOSArCiBzcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y190YWJs ZXMuYyAgICAgICAgICAgfCAgMTAgKwogc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3Fs LmNvbmYuc2FtcGxlIHwgICAxICsKIHNyYy9pbmNsdWRlL2V4ZWN1dG9yL25vZGVNZXJnZUFwcGVu ZC5oICAgICAgICB8ICAgMSArCiBzcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaCAgICAgICAg ICAgICAgICAgfCAgNTYgKysKIHNyYy9pbmNsdWRlL29wdGltaXplci9jb3N0LmggICAgICAgICAg ICAgICAgICB8ICAgMSArCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N5c3ZpZXdzLm91dCAg ICAgICAgfCAgIDMgKy0KIDE0IGZpbGVzIGNoYW5nZWQsIDkxMCBpbnNlcnRpb25zKCspLCA2IGRl bGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcG9zdGdyZXNfZmR3L2V4cGVjdGVkL3Bv c3RncmVzX2Zkdy5vdXQgYi9jb250cmliL3Bvc3RncmVzX2Zkdy9leHBlY3RlZC9wb3N0Z3Jlc19m ZHcub3V0CmluZGV4IDRiNmU0OWE1ZDk1Li5jYTVmMDkyNmUyMiAxMDA2NDQKLS0tIGEvY29udHJp Yi9wb3N0Z3Jlc19mZHcvZXhwZWN0ZWQvcG9zdGdyZXNfZmR3Lm91dAorKysgYi9jb250cmliL3Bv c3RncmVzX2Zkdy9leHBlY3RlZC9wb3N0Z3Jlc19mZHcub3V0CkBAIC0xMTQ1Myw2ICsxMTQ1Myw0 NiBAQCBTRUxFQ1QgKiBGUk9NIHJlc3VsdF90YmwgT1JERVIgQlkgYTsKICgyIHJvd3MpCiAKIERF TEVURSBGUk9NIHJlc3VsdF90Ymw7CistLSBUZXN0IE1lcmdlIEFwcGVuZAorRVhQTEFJTiAoVkVS Qk9TRSwgQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBhc3luY19wdCBXSEVSRSBiICUgMTAwID0g MCBPUkRFUiBCWSBiLCBhOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBNZXJnZSBBcHBl bmQKKyAgIFNvcnQgS2V5OiBhc3luY19wdC5iLCBhc3luY19wdC5hCisgICAtPiAgQXN5bmMgRm9y ZWlnbiBTY2FuIG9uIHB1YmxpYy5hc3luY19wMSBhc3luY19wdF8xCisgICAgICAgICBPdXRwdXQ6 IGFzeW5jX3B0XzEuYSwgYXN5bmNfcHRfMS5iLCBhc3luY19wdF8xLmMKKyAgICAgICAgIFJlbW90 ZSBTUUw6IFNFTEVDVCBhLCBiLCBjIEZST00gcHVibGljLmJhc2VfdGJsMSBXSEVSRSAoKChiICUg MTAwKSA9IDApKSBPUkRFUiBCWSBiIEFTQyBOVUxMUyBMQVNULCBhIEFTQyBOVUxMUyBMQVNUCisg ICAtPiAgQXN5bmMgRm9yZWlnbiBTY2FuIG9uIHB1YmxpYy5hc3luY19wMiBhc3luY19wdF8yCisg ICAgICAgICBPdXRwdXQ6IGFzeW5jX3B0XzIuYSwgYXN5bmNfcHRfMi5iLCBhc3luY19wdF8yLmMK KyAgICAgICAgIFJlbW90ZSBTUUw6IFNFTEVDVCBhLCBiLCBjIEZST00gcHVibGljLmJhc2VfdGJs MiBXSEVSRSAoKChiICUgMTAwKSA9IDApKSBPUkRFUiBCWSBiIEFTQyBOVUxMUyBMQVNULCBhIEFT QyBOVUxMUyBMQVNUCisoOCByb3dzKQorCitTRUxFQ1QgKiBGUk9NIGFzeW5jX3B0IFdIRVJFIGIg JSAxMDAgPSAwIE9SREVSIEJZIGIsIGE7CisgIGEgICB8ICBiICB8ICBjICAgCistLS0tLS0rLS0t LS0rLS0tLS0tCisgMTAwMCB8ICAgMCB8IDAwMDAKKyAyMDAwIHwgICAwIHwgMDAwMAorIDExMDAg fCAxMDAgfCAwMTAwCisgMjEwMCB8IDEwMCB8IDAxMDAKKyAxMjAwIHwgMjAwIHwgMDIwMAorIDIy MDAgfCAyMDAgfCAwMjAwCisgMTMwMCB8IDMwMCB8IDAzMDAKKyAyMzAwIHwgMzAwIHwgMDMwMAor IDE0MDAgfCA0MDAgfCAwNDAwCisgMjQwMCB8IDQwMCB8IDA0MDAKKyAxNTAwIHwgNTAwIHwgMDUw MAorIDI1MDAgfCA1MDAgfCAwNTAwCisgMTYwMCB8IDYwMCB8IDA2MDAKKyAyNjAwIHwgNjAwIHwg MDYwMAorIDE3MDAgfCA3MDAgfCAwNzAwCisgMjcwMCB8IDcwMCB8IDA3MDAKKyAxODAwIHwgODAw IHwgMDgwMAorIDI4MDAgfCA4MDAgfCAwODAwCisgMTkwMCB8IDkwMCB8IDA5MDAKKyAyOTAwIHwg OTAwIHwgMDkwMAorKDIwIHJvd3MpCisKIC0tIFRlc3QgZXJyb3IgaGFuZGxpbmcsIGlmIGFjY2Vz c2luZyBvbmUgb2YgdGhlIGZvcmVpZ24gcGFydGl0aW9ucyBlcnJvcnMgb3V0CiBDUkVBVEUgRk9S RUlHTiBUQUJMRSBhc3luY19wX2Jyb2tlbiBQQVJUSVRJT04gT0YgYXN5bmNfcHQgRk9SIFZBTFVF UyBGUk9NICgxMDAwMCkgVE8gKDEwMDAxKQogICBTRVJWRVIgbG9vcGJhY2sgT1BUSU9OUyAodGFi bGVfbmFtZSAnbm9uX2V4aXN0ZW50X3RhYmxlJyk7CkBAIC0xMTQ5Niw2ICsxMTUzNiwzNSBAQCBT RUxFQ1QgKiBGUk9NIHJlc3VsdF90YmwgT1JERVIgQlkgYTsKICgzIHJvd3MpCiAKIERFTEVURSBG Uk9NIHJlc3VsdF90Ymw7CistLSBUZXN0IE1lcmdlIEFwcGVuZAorRVhQTEFJTiAoVkVSQk9TRSwg Q09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBhc3luY19wdCBXSEVSRSBiID09PSA1MDUgT1JERVIg QlkgYiwgYTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBR VUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTWVyZ2UgQXBw ZW5kCisgICBTb3J0IEtleTogYXN5bmNfcHQuYiwgYXN5bmNfcHQuYQorICAgLT4gIEFzeW5jIEZv cmVpZ24gU2NhbiBvbiBwdWJsaWMuYXN5bmNfcDEgYXN5bmNfcHRfMQorICAgICAgICAgT3V0cHV0 OiBhc3luY19wdF8xLmEsIGFzeW5jX3B0XzEuYiwgYXN5bmNfcHRfMS5jCisgICAgICAgICBGaWx0 ZXI6IChhc3luY19wdF8xLmIgPT09IDUwNSkKKyAgICAgICAgIFJlbW90ZSBTUUw6IFNFTEVDVCBh LCBiLCBjIEZST00gcHVibGljLmJhc2VfdGJsMSBPUkRFUiBCWSBiIEFTQyBOVUxMUyBMQVNULCBh IEFTQyBOVUxMUyBMQVNUCisgICAtPiAgQXN5bmMgRm9yZWlnbiBTY2FuIG9uIHB1YmxpYy5hc3lu Y19wMiBhc3luY19wdF8yCisgICAgICAgICBPdXRwdXQ6IGFzeW5jX3B0XzIuYSwgYXN5bmNfcHRf Mi5iLCBhc3luY19wdF8yLmMKKyAgICAgICAgIEZpbHRlcjogKGFzeW5jX3B0XzIuYiA9PT0gNTA1 KQorICAgICAgICAgUmVtb3RlIFNRTDogU0VMRUNUIGEsIGIsIGMgRlJPTSBwdWJsaWMuYmFzZV90 YmwyIE9SREVSIEJZIGIgQVNDIE5VTExTIExBU1QsIGEgQVNDIE5VTExTIExBU1QKKyAgIC0+ICBB c3luYyBGb3JlaWduIFNjYW4gb24gcHVibGljLmFzeW5jX3AzIGFzeW5jX3B0XzMKKyAgICAgICAg IE91dHB1dDogYXN5bmNfcHRfMy5hLCBhc3luY19wdF8zLmIsIGFzeW5jX3B0XzMuYworICAgICAg ICAgRmlsdGVyOiAoYXN5bmNfcHRfMy5iID09PSA1MDUpCisgICAgICAgICBSZW1vdGUgU1FMOiBT RUxFQ1QgYSwgYiwgYyBGUk9NIHB1YmxpYy5iYXNlX3RibDMgT1JERVIgQlkgYiBBU0MgTlVMTFMg TEFTVCwgYSBBU0MgTlVMTFMgTEFTVAorKDE0IHJvd3MpCisKK1NFTEVDVCAqIEZST00gYXN5bmNf cHQgV0hFUkUgYiA9PT0gNTA1IE9SREVSIEJZIGIsIGE7CisgIGEgICB8ICBiICB8ICBjICAgCist LS0tLS0rLS0tLS0rLS0tLS0tCisgMTUwNSB8IDUwNSB8IDA1MDUKKyAyNTA1IHwgNTA1IHwgMDUw NQorIDM1MDUgfCA1MDUgfCAwNTA1CisoMyByb3dzKQorCiBEUk9QIEZPUkVJR04gVEFCTEUgYXN5 bmNfcDM7CiBEUk9QIFRBQkxFIGJhc2VfdGJsMzsKIC0tIENoZWNrIGNhc2Ugd2hlcmUgdGhlIHBh cnRpdGlvbmVkIHRhYmxlIGhhcyBsb2NhbC9yZW1vdGUgcGFydGl0aW9ucwpAQCAtMTE1MzEsNiAr MTE2MDAsMzcgQEAgU0VMRUNUICogRlJPTSByZXN1bHRfdGJsIE9SREVSIEJZIGE7CiAoMyByb3dz KQogCiBERUxFVEUgRlJPTSByZXN1bHRfdGJsOworLS0gVGVzdCBNZXJnZSBBcHBlbmQKK0VYUExB SU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gYXN5bmNfcHQgV0hFUkUgYiA9 PT0gNTA1IE9SREVSIEJZIGIsIGE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorIE1lcmdlIEFwcGVuZAorICAgU29ydCBLZXk6IGFzeW5jX3B0LmIsIGFzeW5jX3B0LmEKKyAg IC0+ICBBc3luYyBGb3JlaWduIFNjYW4gb24gcHVibGljLmFzeW5jX3AxIGFzeW5jX3B0XzEKKyAg ICAgICAgIE91dHB1dDogYXN5bmNfcHRfMS5hLCBhc3luY19wdF8xLmIsIGFzeW5jX3B0XzEuYwor ICAgICAgICAgRmlsdGVyOiAoYXN5bmNfcHRfMS5iID09PSA1MDUpCisgICAgICAgICBSZW1vdGUg U1FMOiBTRUxFQ1QgYSwgYiwgYyBGUk9NIHB1YmxpYy5iYXNlX3RibDEgT1JERVIgQlkgYiBBU0Mg TlVMTFMgTEFTVCwgYSBBU0MgTlVMTFMgTEFTVAorICAgLT4gIEFzeW5jIEZvcmVpZ24gU2NhbiBv biBwdWJsaWMuYXN5bmNfcDIgYXN5bmNfcHRfMgorICAgICAgICAgT3V0cHV0OiBhc3luY19wdF8y LmEsIGFzeW5jX3B0XzIuYiwgYXN5bmNfcHRfMi5jCisgICAgICAgICBGaWx0ZXI6IChhc3luY19w dF8yLmIgPT09IDUwNSkKKyAgICAgICAgIFJlbW90ZSBTUUw6IFNFTEVDVCBhLCBiLCBjIEZST00g cHVibGljLmJhc2VfdGJsMiBPUkRFUiBCWSBiIEFTQyBOVUxMUyBMQVNULCBhIEFTQyBOVUxMUyBM QVNUCisgICAtPiAgU29ydAorICAgICAgICAgT3V0cHV0OiBhc3luY19wdF8zLmEsIGFzeW5jX3B0 XzMuYiwgYXN5bmNfcHRfMy5jCisgICAgICAgICBTb3J0IEtleTogYXN5bmNfcHRfMy5iLCBhc3lu Y19wdF8zLmEKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuYXN5bmNfcDMgYXN5bmNf cHRfMworICAgICAgICAgICAgICAgT3V0cHV0OiBhc3luY19wdF8zLmEsIGFzeW5jX3B0XzMuYiwg YXN5bmNfcHRfMy5jCisgICAgICAgICAgICAgICBGaWx0ZXI6IChhc3luY19wdF8zLmIgPT09IDUw NSkKKygxNiByb3dzKQorCitTRUxFQ1QgKiBGUk9NIGFzeW5jX3B0IFdIRVJFIGIgPT09IDUwNSBP UkRFUiBCWSBiLCBhOworICBhICAgfCAgYiAgfCAgYyAgIAorLS0tLS0tKy0tLS0tKy0tLS0tLQor IDE1MDUgfCA1MDUgfCAwNTA1CisgMjUwNSB8IDUwNSB8IDA1MDUKKyAzNTA1IHwgNTA1IHwgMDUw NQorKDMgcm93cykKKwogLS0gcGFydGl0aW9ud2lzZSBqb2lucwogU0VUIGVuYWJsZV9wYXJ0aXRp b253aXNlX2pvaW4gVE8gdHJ1ZTsKIENSRUFURSBUQUJMRSBqb2luX3RibCAoYTEgaW50LCBiMSBp bnQsIGMxIHRleHQsIGEyIGludCwgYjIgaW50LCBjMiB0ZXh0KTsKQEAgLTEyMzEzLDYgKzEyNDEz LDE1MyBAQCBTRUxFQ1QgYSBGUk9NIGJhc2VfdGJsIFdIRVJFIChhLCByYW5kb20oKSA+IDApIElO IChTRUxFQ1QgYSwgcmFuZG9tKCkgPiAwIEZST00gZgogRFJPUCBGT1JFSUdOIFRBQkxFIGZvcmVp Z25fdGJsIENBU0NBREU7CiBOT1RJQ0U6ICBkcm9wIGNhc2NhZGVzIHRvIGZvcmVpZ24gdGFibGUg Zm9yZWlnbl90YmwyCiBEUk9QIFRBQkxFIGJhc2VfdGJsOworLS0gVGVzdCBhc3luYyBNZXJnZSBB cHBlbmQKK0NSRUFURSBUQUJMRSBkaXN0cjEgKGkgaW50LCBqIGludCwgayB0ZXh0KSBQQVJUSVRJ T04gQlkgSEFTSCAoaSk7CitDUkVBVEUgVEFCTEUgYmFzZTEgKGkgaW50LCBqIGludCwgayB0ZXh0 KTsKK0NSRUFURSBUQUJMRSBiYXNlMiAoaSBpbnQsIGogaW50LCBrIHRleHQpOworQ1JFQVRFIEZP UkVJR04gVEFCTEUgZGlzdHIxX3AxIFBBUlRJVElPTiBPRiBkaXN0cjEgRk9SIFZBTFVFUyBXSVRI IChNT0RVTFVTIDIsIFJFTUFJTkRFUiAwKQorU0VSVkVSIGxvb3BiYWNrIE9QVElPTlMgKHRhYmxl X25hbWUgJ2Jhc2UxJyk7CitDUkVBVEUgRk9SRUlHTiBUQUJMRSBkaXN0cjFfcDIgUEFSVElUSU9O IE9GIGRpc3RyMSBGT1IgVkFMVUVTIFdJVEggKE1PRFVMVVMgMiwgUkVNQUlOREVSIDEpCitTRVJW RVIgbG9vcGJhY2sgT1BUSU9OUyAodGFibGVfbmFtZSAnYmFzZTInKTsKK0NSRUFURSBUQUJMRSBk aXN0cjIgKGkgaW50LCBqIGludCwgayB0ZXh0KSBQQVJUSVRJT04gQlkgSEFTSCAoaSk7CitDUkVB VEUgVEFCTEUgYmFzZTMgKGkgaW50LCBqIGludCwgayB0ZXh0KTsKK0NSRUFURSBUQUJMRSBiYXNl NCAoaSBpbnQsIGogaW50LCBrIHRleHQpOworQ1JFQVRFIEZPUkVJR04gVEFCTEUgZGlzdHIyX3Ax IFBBUlRJVElPTiBPRiBkaXN0cjIgRk9SIFZBTFVFUyBXSVRIIChNT0RVTFVTIDIsIFJFTUFJTkRF UiAwKQorU0VSVkVSIGxvb3BiYWNrIE9QVElPTlMgKHRhYmxlX25hbWUgJ2Jhc2UzJyk7CitDUkVB VEUgRk9SRUlHTiBUQUJMRSBkaXN0cjJfcDIgUEFSVElUSU9OIE9GIGRpc3RyMiBGT1IgVkFMVUVT IFdJVEggKE1PRFVMVVMgMiwgUkVNQUlOREVSIDEpCitTRVJWRVIgbG9vcGJhY2sgT1BUSU9OUyAo dGFibGVfbmFtZSAnYmFzZTQnKTsKK0lOU0VSVCBJTlRPIGRpc3RyMQorU0VMRUNUIGksIGkqMTAs ICdkYXRhXycgfHwgaSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCAxMDAwKSBpOworSU5TRVJUIElO VE8gZGlzdHIyCitTRUxFQ1QgaSwgaSoxMCwgJ2RhdGFfJyB8fCBpIEZST00gZ2VuZXJhdGVfc2Vy aWVzKDEsIDEwMCkgaTsKK0FOQUxZWkUgZGlzdHIxX3AxOworQU5BTFlaRSBkaXN0cjFfcDI7CitB TkFMWVpFIGRpc3RyMl9wMTsKK0FOQUxZWkUgZGlzdHIyX3AyOworU0VUIGVuYWJsZV9wYXJ0aXRp b253aXNlX2pvaW4gVE8gT047CistLSBUZXN0IGpvaW5zIHdpdGggYXN5bmMgTWVyZ2UgQXBwZW5k CitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIGRpc3RyMSwgZGlz dHIyIFdIRVJFIGRpc3RyMS5pPWRpc3RyMi5pIEFORCBkaXN0cjIuaiA+IDkwIGFuZCBkaXN0cjIu ayBsaWtlICdkYXRhJScKK09SREVSIEJZIGRpc3RyMi5pIExJTUlUIDEwOworICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorIExpbWl0CisgICBPdXRwdXQ6IGRpc3RyMS5pLCBkaXN0cjEuaiwgZGlz dHIxLmssIGRpc3RyMi5pLCBkaXN0cjIuaiwgZGlzdHIyLmsKKyAgIC0+ICBNZXJnZSBBcHBlbmQK KyAgICAgICAgIFNvcnQgS2V5OiBkaXN0cjEuaQorICAgICAgICAgLT4gIEFzeW5jIEZvcmVpZ24g U2NhbgorICAgICAgICAgICAgICAgT3V0cHV0OiBkaXN0cjFfMS5pLCBkaXN0cjFfMS5qLCBkaXN0 cjFfMS5rLCBkaXN0cjJfMS5pLCBkaXN0cjJfMS5qLCBkaXN0cjJfMS5rCisgICAgICAgICAgICAg ICBSZWxhdGlvbnM6IChwdWJsaWMuZGlzdHIxX3AxIGRpc3RyMV8xKSBJTk5FUiBKT0lOIChwdWJs aWMuZGlzdHIyX3AxIGRpc3RyMl8xKQorICAgICAgICAgICAgICAgUmVtb3RlIFNRTDogU0VMRUNU IHIzLmksIHIzLmosIHIzLmssIHI1LmksIHI1LmosIHI1LmsgRlJPTSAocHVibGljLmJhc2UxIHIz IElOTkVSIEpPSU4gcHVibGljLmJhc2UzIHI1IE9OICgoKHIzLmkgPSByNS5pKSkgQU5EICgocjUu aiA+IDkwKSkgQU5EICgocjUuayB+fiAnZGF0YSUnKSkpKSBPUkRFUiBCWSByMy5pIEFTQyBOVUxM UyBMQVNUCisgICAgICAgICAtPiAgQXN5bmMgRm9yZWlnbiBTY2FuCisgICAgICAgICAgICAgICBP dXRwdXQ6IGRpc3RyMV8yLmksIGRpc3RyMV8yLmosIGRpc3RyMV8yLmssIGRpc3RyMl8yLmksIGRp c3RyMl8yLmosIGRpc3RyMl8yLmsKKyAgICAgICAgICAgICAgIFJlbGF0aW9uczogKHB1YmxpYy5k aXN0cjFfcDIgZGlzdHIxXzIpIElOTkVSIEpPSU4gKHB1YmxpYy5kaXN0cjJfcDIgZGlzdHIyXzIp CisgICAgICAgICAgICAgICBSZW1vdGUgU1FMOiBTRUxFQ1QgcjQuaSwgcjQuaiwgcjQuaywgcjYu aSwgcjYuaiwgcjYuayBGUk9NIChwdWJsaWMuYmFzZTIgcjQgSU5ORVIgSk9JTiBwdWJsaWMuYmFz ZTQgcjYgT04gKCgocjQuaSA9IHI2LmkpKSBBTkQgKChyNi5qID4gOTApKSBBTkQgKChyNi5rIH5+ ICdkYXRhJScpKSkpIE9SREVSIEJZIHI0LmkgQVNDIE5VTExTIExBU1QKKygxMiByb3dzKQorCitT RUxFQ1QgKiBGUk9NIGRpc3RyMSwgZGlzdHIyIFdIRVJFIGRpc3RyMS5pPWRpc3RyMi5pIEFORCBk aXN0cjIuaiA+IDkwIGFuZCBkaXN0cjIuayBsaWtlICdkYXRhJScKK09SREVSIEJZIGRpc3RyMi5p IExJTUlUIDEwOworIGkgIHwgIGogIHwgICAgayAgICB8IGkgIHwgIGogIHwgICAgayAgICAKKy0t LS0rLS0tLS0rLS0tLS0tLS0tKy0tLS0rLS0tLS0rLS0tLS0tLS0tCisgMTAgfCAxMDAgfCBkYXRh XzEwIHwgMTAgfCAxMDAgfCBkYXRhXzEwCisgMTEgfCAxMTAgfCBkYXRhXzExIHwgMTEgfCAxMTAg fCBkYXRhXzExCisgMTIgfCAxMjAgfCBkYXRhXzEyIHwgMTIgfCAxMjAgfCBkYXRhXzEyCisgMTMg fCAxMzAgfCBkYXRhXzEzIHwgMTMgfCAxMzAgfCBkYXRhXzEzCisgMTQgfCAxNDAgfCBkYXRhXzE0 IHwgMTQgfCAxNDAgfCBkYXRhXzE0CisgMTUgfCAxNTAgfCBkYXRhXzE1IHwgMTUgfCAxNTAgfCBk YXRhXzE1CisgMTYgfCAxNjAgfCBkYXRhXzE2IHwgMTYgfCAxNjAgfCBkYXRhXzE2CisgMTcgfCAx NzAgfCBkYXRhXzE3IHwgMTcgfCAxNzAgfCBkYXRhXzE3CisgMTggfCAxODAgfCBkYXRhXzE4IHwg MTggfCAxODAgfCBkYXRhXzE4CisgMTkgfCAxOTAgfCBkYXRhXzE5IHwgMTkgfCAxOTAgfCBkYXRh XzE5CisoMTAgcm93cykKKworRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKQorU0VMRUNUICog RlJPTSBkaXN0cjEgTEVGVCBKT0lOIGRpc3RyMiBPTiBkaXN0cjEuaT1kaXN0cjIuaSBBTkQgZGlz dHIyLmsgbGlrZSAnZGF0YSUnIFdIRVJFICBkaXN0cjEuaSA+IDkwCitPUkRFUiBCWSBkaXN0cjEu aSBMSU1JVCAyMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIExpbWl0CisgICBPdXRw dXQ6IGRpc3RyMS5pLCBkaXN0cjEuaiwgZGlzdHIxLmssIGRpc3RyMi5pLCBkaXN0cjIuaiwgZGlz dHIyLmsKKyAgIC0+ICBNZXJnZSBBcHBlbmQKKyAgICAgICAgIFNvcnQgS2V5OiBkaXN0cjEuaQor ICAgICAgICAgLT4gIEFzeW5jIEZvcmVpZ24gU2NhbgorICAgICAgICAgICAgICAgT3V0cHV0OiBk aXN0cjFfMS5pLCBkaXN0cjFfMS5qLCBkaXN0cjFfMS5rLCBkaXN0cjJfMS5pLCBkaXN0cjJfMS5q LCBkaXN0cjJfMS5rCisgICAgICAgICAgICAgICBSZWxhdGlvbnM6IChwdWJsaWMuZGlzdHIxX3Ax IGRpc3RyMV8xKSBMRUZUIEpPSU4gKHB1YmxpYy5kaXN0cjJfcDEgZGlzdHIyXzEpCisgICAgICAg ICAgICAgICBSZW1vdGUgU1FMOiBTRUxFQ1QgcjQuaSwgcjQuaiwgcjQuaywgcjYuaSwgcjYuaiwg cjYuayBGUk9NIChwdWJsaWMuYmFzZTEgcjQgTEVGVCBKT0lOIHB1YmxpYy5iYXNlMyByNiBPTiAo KChyNC5pID0gcjYuaSkpIEFORCAoKHI2Lmsgfn4gJ2RhdGElJykpKSkgV0hFUkUgKChyNC5pID4g OTApKSBPUkRFUiBCWSByNC5pIEFTQyBOVUxMUyBMQVNUCisgICAgICAgICAtPiAgQXN5bmMgRm9y ZWlnbiBTY2FuCisgICAgICAgICAgICAgICBPdXRwdXQ6IGRpc3RyMV8yLmksIGRpc3RyMV8yLmos IGRpc3RyMV8yLmssIGRpc3RyMl8yLmksIGRpc3RyMl8yLmosIGRpc3RyMl8yLmsKKyAgICAgICAg ICAgICAgIFJlbGF0aW9uczogKHB1YmxpYy5kaXN0cjFfcDIgZGlzdHIxXzIpIExFRlQgSk9JTiAo cHVibGljLmRpc3RyMl9wMiBkaXN0cjJfMikKKyAgICAgICAgICAgICAgIFJlbW90ZSBTUUw6IFNF TEVDVCByNS5pLCByNS5qLCByNS5rLCByNy5pLCByNy5qLCByNy5rIEZST00gKHB1YmxpYy5iYXNl MiByNSBMRUZUIEpPSU4gcHVibGljLmJhc2U0IHI3IE9OICgoKHI1LmkgPSByNy5pKSkgQU5EICgo cjcuayB+fiAnZGF0YSUnKSkpKSBXSEVSRSAoKHI1LmkgPiA5MCkpIE9SREVSIEJZIHI1LmkgQVND IE5VTExTIExBU1QKKygxMiByb3dzKQorCitTRUxFQ1QgKiBGUk9NIGRpc3RyMSBMRUZUIEpPSU4g ZGlzdHIyIE9OICBkaXN0cjEuaT1kaXN0cjIuaSBBTkQgZGlzdHIyLmsgbGlrZSAnZGF0YSUnIFdI RVJFIGRpc3RyMS5pID4gOTAKK09SREVSIEJZIGRpc3RyMS5pIExJTUlUIDIwOworICBpICB8ICBq ICAgfCAgICBrICAgICB8ICBpICB8ICBqICAgfCAgICBrICAgICAKKy0tLS0tKy0tLS0tLSstLS0t LS0tLS0tKy0tLS0tKy0tLS0tLSstLS0tLS0tLS0tCisgIDkxIHwgIDkxMCB8IGRhdGFfOTEgIHwg IDkxIHwgIDkxMCB8IGRhdGFfOTEKKyAgOTIgfCAgOTIwIHwgZGF0YV85MiAgfCAgOTIgfCAgOTIw IHwgZGF0YV85MgorICA5MyB8ICA5MzAgfCBkYXRhXzkzICB8ICA5MyB8ICA5MzAgfCBkYXRhXzkz CisgIDk0IHwgIDk0MCB8IGRhdGFfOTQgIHwgIDk0IHwgIDk0MCB8IGRhdGFfOTQKKyAgOTUgfCAg OTUwIHwgZGF0YV85NSAgfCAgOTUgfCAgOTUwIHwgZGF0YV85NQorICA5NiB8ICA5NjAgfCBkYXRh Xzk2ICB8ICA5NiB8ICA5NjAgfCBkYXRhXzk2CisgIDk3IHwgIDk3MCB8IGRhdGFfOTcgIHwgIDk3 IHwgIDk3MCB8IGRhdGFfOTcKKyAgOTggfCAgOTgwIHwgZGF0YV85OCAgfCAgOTggfCAgOTgwIHwg ZGF0YV85OAorICA5OSB8ICA5OTAgfCBkYXRhXzk5ICB8ICA5OSB8ICA5OTAgfCBkYXRhXzk5Cisg MTAwIHwgMTAwMCB8IGRhdGFfMTAwIHwgMTAwIHwgMTAwMCB8IGRhdGFfMTAwCisgMTAxIHwgMTAx MCB8IGRhdGFfMTAxIHwgICAgIHwgICAgICB8IAorIDEwMiB8IDEwMjAgfCBkYXRhXzEwMiB8ICAg ICB8ICAgICAgfCAKKyAxMDMgfCAxMDMwIHwgZGF0YV8xMDMgfCAgICAgfCAgICAgIHwgCisgMTA0 IHwgMTA0MCB8IGRhdGFfMTA0IHwgICAgIHwgICAgICB8IAorIDEwNSB8IDEwNTAgfCBkYXRhXzEw NSB8ICAgICB8ICAgICAgfCAKKyAxMDYgfCAxMDYwIHwgZGF0YV8xMDYgfCAgICAgfCAgICAgIHwg CisgMTA3IHwgMTA3MCB8IGRhdGFfMTA3IHwgICAgIHwgICAgICB8IAorIDEwOCB8IDEwODAgfCBk YXRhXzEwOCB8ICAgICB8ICAgICAgfCAKKyAxMDkgfCAxMDkwIHwgZGF0YV8xMDkgfCAgICAgfCAg ICAgIHwgCisgMTEwIHwgMTEwMCB8IGRhdGFfMTEwIHwgICAgIHwgICAgICB8IAorKDIwIHJvd3Mp CisKKy0tIFRlc3QgcHJ1bmluZyB3aXRoIGFzeW5jIE1lcmdlIEFwcGVuZAorREVMRVRFIEZST00g ZGlzdHIyOworSU5TRVJUIElOVE8gZGlzdHIyCitTRUxFQ1QgaSUxMCwgaSoxMCwgJ2RhdGFfJyB8 fCBpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDEwMDApIGk7CitERUFMTE9DQVRFIEFMTDsKK1NF VCBwbGFuX2NhY2hlX21vZGUgVE8gZm9yY2VfZ2VuZXJpY19wbGFuOworUFJFUEFSRSBhc3luY19w dF9xdWVyeSAoaW50LCBpbnQpIEFTCisgIFNFTEVDVCAqIEZST00gZGlzdHIyIFdIRVJFIGkgPSBB TlkoQVJSQVlbJDEsICQyXSkKKyAgT1JERVIgQlkgaSxqCisgIExJTUlUIDEwOworRVhQTEFJTiAo VkVSQk9TRSwgQ09TVFMgT0ZGKQorCUVYRUNVVEUgYXN5bmNfcHRfcXVlcnkoMSwgMSk7CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIExpbWl0CisgICBPdXRwdXQ6IGRpc3RyMi5pLCBk aXN0cjIuaiwgZGlzdHIyLmsKKyAgIC0+ICBNZXJnZSBBcHBlbmQKKyAgICAgICAgIFNvcnQgS2V5 OiBkaXN0cjIuaSwgZGlzdHIyLmoKKyAgICAgICAgIFN1YnBsYW5zIFJlbW92ZWQ6IDEKKyAgICAg ICAgIC0+ICBBc3luYyBGb3JlaWduIFNjYW4gb24gcHVibGljLmRpc3RyMl9wMSBkaXN0cjJfMQor ICAgICAgICAgICAgICAgT3V0cHV0OiBkaXN0cjJfMS5pLCBkaXN0cjJfMS5qLCBkaXN0cjJfMS5r CisgICAgICAgICAgICAgICBSZW1vdGUgU1FMOiBTRUxFQ1QgaSwgaiwgayBGUk9NIHB1YmxpYy5i YXNlMyBXSEVSRSAoKGkgPSBBTlkgKEFSUkFZWyQxOjppbnRlZ2VyLCAkMjo6aW50ZWdlcl0pKSkg T1JERVIgQlkgaSBBU0MgTlVMTFMgTEFTVCwgaiBBU0MgTlVMTFMgTEFTVAorKDggcm93cykKKwor RVhFQ1VURSBhc3luY19wdF9xdWVyeSgxLCAxKTsKKyBpIHwgIGogIHwgICAgayAgICAKKy0tLSst LS0tLSstLS0tLS0tLS0KKyAxIHwgIDEwIHwgZGF0YV8xCisgMSB8IDExMCB8IGRhdGFfMTEKKyAx IHwgMjEwIHwgZGF0YV8yMQorIDEgfCAzMTAgfCBkYXRhXzMxCisgMSB8IDQxMCB8IGRhdGFfNDEK KyAxIHwgNTEwIHwgZGF0YV81MQorIDEgfCA2MTAgfCBkYXRhXzYxCisgMSB8IDcxMCB8IGRhdGFf NzEKKyAxIHwgODEwIHwgZGF0YV84MQorIDEgfCA5MTAgfCBkYXRhXzkxCisoMTAgcm93cykKKwor UkVTRVQgcGxhbl9jYWNoZV9tb2RlOworUkVTRVQgZW5hYmxlX3BhcnRpdGlvbndpc2Vfam9pbjsK K0RST1AgVEFCTEUgZGlzdHIxLCBkaXN0cjIsIGJhc2UxLCBiYXNlMiwgYmFzZTMsIGJhc2U0Owog QUxURVIgU0VSVkVSIGxvb3BiYWNrIE9QVElPTlMgKERST1AgYXN5bmNfY2FwYWJsZSk7CiBBTFRF UiBTRVJWRVIgbG9vcGJhY2syIE9QVElPTlMgKERST1AgYXN5bmNfY2FwYWJsZSk7CiAtLSA9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09CmRpZmYgLS1naXQgYS9jb250cmliL3Bvc3RncmVzX2Zkdy9wb3N0Z3Jlc19mZHcuYyBi L2NvbnRyaWIvcG9zdGdyZXNfZmR3L3Bvc3RncmVzX2Zkdy5jCmluZGV4IDI1YjI4N2JlMDY5Li44 NDM4ZDY3YTZiZSAxMDA2NDQKLS0tIGEvY29udHJpYi9wb3N0Z3Jlc19mZHcvcG9zdGdyZXNfZmR3 LmMKKysrIGIvY29udHJpYi9wb3N0Z3Jlc19mZHcvcG9zdGdyZXNfZmR3LmMKQEAgLTcyMTMsMTIg KzcyMTMsMTYgQEAgcG9zdGdyZXNGb3JlaWduQXN5bmNDb25maWd1cmVXYWl0KEFzeW5jUmVxdWVz dCAqYXJlcSkKIAlGb3JlaWduU2NhblN0YXRlICpub2RlID0gKEZvcmVpZ25TY2FuU3RhdGUgKikg YXJlcS0+cmVxdWVzdGVlOwogCVBnRmR3U2NhblN0YXRlICpmc3N0YXRlID0gKFBnRmR3U2NhblN0 YXRlICopIG5vZGUtPmZkd19zdGF0ZTsKIAlBc3luY1JlcXVlc3QgKnBlbmRpbmdBcmVxID0gZnNz dGF0ZS0+Y29ubl9zdGF0ZS0+cGVuZGluZ0FyZXE7Ci0JQXBwZW5kU3RhdGUgKnJlcXVlc3RvciA9 IChBcHBlbmRTdGF0ZSAqKSBhcmVxLT5yZXF1ZXN0b3I7Ci0JV2FpdEV2ZW50U2V0ICpzZXQgPSBy ZXF1ZXN0b3ItPmFzX2V2ZW50c2V0OworCVBsYW5TdGF0ZSAgKnJlcXVlc3RvciA9IGFyZXEtPnJl cXVlc3RvcjsKKwlXYWl0RXZlbnRTZXQgKnNldDsKKwlCaXRtYXBzZXQgICpuZWVkcmVxdWVzdDsK IAogCS8qIFRoaXMgc2hvdWxkIG5vdCBiZSBjYWxsZWQgdW5sZXNzIGNhbGxiYWNrX3BlbmRpbmcg Ki8KIAlBc3NlcnQoYXJlcS0+Y2FsbGJhY2tfcGVuZGluZyk7CiAKKwlzZXQgPSBHZXRBcHBlbmRF dmVudFNldChyZXF1ZXN0b3IpOworCW5lZWRyZXF1ZXN0ID0gR2V0TmVlZFJlcXVlc3QocmVxdWVz dG9yKTsKKwogCS8qCiAJICogSWYgcHJvY2Vzc19wZW5kaW5nX3JlcXVlc3QoKSBoYXMgYmVlbiBp bnZva2VkIG9uIHRoZSBnaXZlbiByZXF1ZXN0CiAJICogYmVmb3JlIHdlIGdldCBoZXJlLCB3ZSBt aWdodCBoYXZlIHNvbWUgdHVwbGVzIGFscmVhZHk7IGluIHdoaWNoIGNhc2UKQEAgLTcyNTYsNyAr NzI2MCw3IEBAIHBvc3RncmVzRm9yZWlnbkFzeW5jQ29uZmlndXJlV2FpdChBc3luY1JlcXVlc3Qg KmFyZXEpCiAJCSAqIGJlbG93LCBiZWNhdXNlIHdlIG1pZ2h0IG90aGVyd2lzZSBlbmQgdXAgd2l0 aCBubyBjb25maWd1cmVkIGV2ZW50cwogCQkgKiBvdGhlciB0aGFuIHRoZSBwb3N0bWFzdGVyIGRl YXRoIGV2ZW50LgogCQkgKi8KLQkJaWYgKCFibXNfaXNfZW1wdHkocmVxdWVzdG9yLT5hc19uZWVk cmVxdWVzdCkpCisJCWlmICghYm1zX2lzX2VtcHR5KG5lZWRyZXF1ZXN0KSkKIAkJCXJldHVybjsK IAkJaWYgKEdldE51bVJlZ2lzdGVyZWRXYWl0RXZlbnRzKHNldCkgPiAxKQogCQkJcmV0dXJuOwpk aWZmIC0tZ2l0IGEvY29udHJpYi9wb3N0Z3Jlc19mZHcvc3FsL3Bvc3RncmVzX2Zkdy5zcWwgYi9j b250cmliL3Bvc3RncmVzX2Zkdy9zcWwvcG9zdGdyZXNfZmR3LnNxbAppbmRleCAzMWI2YzY4NWI1 NS4uNTU3MDhhZjQ3MzYgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcG9zdGdyZXNfZmR3L3NxbC9wb3N0 Z3Jlc19mZHcuc3FsCisrKyBiL2NvbnRyaWIvcG9zdGdyZXNfZmR3L3NxbC9wb3N0Z3Jlc19mZHcu c3FsCkBAIC0zODYxLDYgKzM4NjEsMTEgQEAgSU5TRVJUIElOVE8gcmVzdWx0X3RibCBTRUxFQ1Qg YSwgYiwgJ0FBQScgfHwgYyBGUk9NIGFzeW5jX3B0IFdIRVJFIGIgPT09IDUwNTsKIFNFTEVDVCAq IEZST00gcmVzdWx0X3RibCBPUkRFUiBCWSBhOwogREVMRVRFIEZST00gcmVzdWx0X3RibDsKIAor LS0gVGVzdCBNZXJnZSBBcHBlbmQKK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikKK1NFTEVD VCAqIEZST00gYXN5bmNfcHQgV0hFUkUgYiAlIDEwMCA9IDAgT1JERVIgQlkgYiwgYTsKK1NFTEVD VCAqIEZST00gYXN5bmNfcHQgV0hFUkUgYiAlIDEwMCA9IDAgT1JERVIgQlkgYiwgYTsKKwogLS0g VGVzdCBlcnJvciBoYW5kbGluZywgaWYgYWNjZXNzaW5nIG9uZSBvZiB0aGUgZm9yZWlnbiBwYXJ0 aXRpb25zIGVycm9ycyBvdXQKIENSRUFURSBGT1JFSUdOIFRBQkxFIGFzeW5jX3BfYnJva2VuIFBB UlRJVElPTiBPRiBhc3luY19wdCBGT1IgVkFMVUVTIEZST00gKDEwMDAwKSBUTyAoMTAwMDEpCiAg IFNFUlZFUiBsb29wYmFjayBPUFRJT05TICh0YWJsZV9uYW1lICdub25fZXhpc3RlbnRfdGFibGUn KTsKQEAgLTM4ODEsNiArMzg4NiwxMSBAQCBJTlNFUlQgSU5UTyByZXN1bHRfdGJsIFNFTEVDVCAq IEZST00gYXN5bmNfcHQgV0hFUkUgYiA9PT0gNTA1OwogU0VMRUNUICogRlJPTSByZXN1bHRfdGJs IE9SREVSIEJZIGE7CiBERUxFVEUgRlJPTSByZXN1bHRfdGJsOwogCistLSBUZXN0IE1lcmdlIEFw cGVuZAorRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBhc3luY19w dCBXSEVSRSBiID09PSA1MDUgT1JERVIgQlkgYiwgYTsKK1NFTEVDVCAqIEZST00gYXN5bmNfcHQg V0hFUkUgYiA9PT0gNTA1IE9SREVSIEJZIGIsIGE7CisKIERST1AgRk9SRUlHTiBUQUJMRSBhc3lu Y19wMzsKIERST1AgVEFCTEUgYmFzZV90YmwzOwogCkBAIC0zODk2LDYgKzM5MDYsMTEgQEAgSU5T RVJUIElOVE8gcmVzdWx0X3RibCBTRUxFQ1QgKiBGUk9NIGFzeW5jX3B0IFdIRVJFIGIgPT09IDUw NTsKIFNFTEVDVCAqIEZST00gcmVzdWx0X3RibCBPUkRFUiBCWSBhOwogREVMRVRFIEZST00gcmVz dWx0X3RibDsKIAorLS0gVGVzdCBNZXJnZSBBcHBlbmQKK0VYUExBSU4gKFZFUkJPU0UsIENPU1RT IE9GRikKK1NFTEVDVCAqIEZST00gYXN5bmNfcHQgV0hFUkUgYiA9PT0gNTA1IE9SREVSIEJZIGIs IGE7CitTRUxFQ1QgKiBGUk9NIGFzeW5jX3B0IFdIRVJFIGIgPT09IDUwNSBPUkRFUiBCWSBiLCBh OworCiAtLSBwYXJ0aXRpb253aXNlIGpvaW5zCiBTRVQgZW5hYmxlX3BhcnRpdGlvbndpc2Vfam9p biBUTyB0cnVlOwogCkBAIC00MTM0LDYgKzQxNDksNjkgQEAgU0VMRUNUIGEgRlJPTSBiYXNlX3Ri bCBXSEVSRSAoYSwgcmFuZG9tKCkgPiAwKSBJTiAoU0VMRUNUIGEsIHJhbmRvbSgpID4gMCBGUk9N IGYKIERST1AgRk9SRUlHTiBUQUJMRSBmb3JlaWduX3RibCBDQVNDQURFOwogRFJPUCBUQUJMRSBi YXNlX3RibDsKIAorLS0gVGVzdCBhc3luYyBNZXJnZSBBcHBlbmQKK0NSRUFURSBUQUJMRSBkaXN0 cjEgKGkgaW50LCBqIGludCwgayB0ZXh0KSBQQVJUSVRJT04gQlkgSEFTSCAoaSk7CitDUkVBVEUg VEFCTEUgYmFzZTEgKGkgaW50LCBqIGludCwgayB0ZXh0KTsKK0NSRUFURSBUQUJMRSBiYXNlMiAo aSBpbnQsIGogaW50LCBrIHRleHQpOworQ1JFQVRFIEZPUkVJR04gVEFCTEUgZGlzdHIxX3AxIFBB UlRJVElPTiBPRiBkaXN0cjEgRk9SIFZBTFVFUyBXSVRIIChNT0RVTFVTIDIsIFJFTUFJTkRFUiAw KQorU0VSVkVSIGxvb3BiYWNrIE9QVElPTlMgKHRhYmxlX25hbWUgJ2Jhc2UxJyk7CitDUkVBVEUg Rk9SRUlHTiBUQUJMRSBkaXN0cjFfcDIgUEFSVElUSU9OIE9GIGRpc3RyMSBGT1IgVkFMVUVTIFdJ VEggKE1PRFVMVVMgMiwgUkVNQUlOREVSIDEpCitTRVJWRVIgbG9vcGJhY2sgT1BUSU9OUyAodGFi bGVfbmFtZSAnYmFzZTInKTsKKworQ1JFQVRFIFRBQkxFIGRpc3RyMiAoaSBpbnQsIGogaW50LCBr IHRleHQpIFBBUlRJVElPTiBCWSBIQVNIIChpKTsKK0NSRUFURSBUQUJMRSBiYXNlMyAoaSBpbnQs IGogaW50LCBrIHRleHQpOworQ1JFQVRFIFRBQkxFIGJhc2U0IChpIGludCwgaiBpbnQsIGsgdGV4 dCk7CitDUkVBVEUgRk9SRUlHTiBUQUJMRSBkaXN0cjJfcDEgUEFSVElUSU9OIE9GIGRpc3RyMiBG T1IgVkFMVUVTIFdJVEggKE1PRFVMVVMgMiwgUkVNQUlOREVSIDApCitTRVJWRVIgbG9vcGJhY2sg T1BUSU9OUyAodGFibGVfbmFtZSAnYmFzZTMnKTsKK0NSRUFURSBGT1JFSUdOIFRBQkxFIGRpc3Ry Ml9wMiBQQVJUSVRJT04gT0YgZGlzdHIyIEZPUiBWQUxVRVMgV0lUSCAoTU9EVUxVUyAyLCBSRU1B SU5ERVIgMSkKK1NFUlZFUiBsb29wYmFjayBPUFRJT05TICh0YWJsZV9uYW1lICdiYXNlNCcpOwor CitJTlNFUlQgSU5UTyBkaXN0cjEKK1NFTEVDVCBpLCBpKjEwLCAnZGF0YV8nIHx8IGkgRlJPTSBn ZW5lcmF0ZV9zZXJpZXMoMSwgMTAwMCkgaTsKKworSU5TRVJUIElOVE8gZGlzdHIyCitTRUxFQ1Qg aSwgaSoxMCwgJ2RhdGFfJyB8fCBpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDEwMCkgaTsKKwor QU5BTFlaRSBkaXN0cjFfcDE7CitBTkFMWVpFIGRpc3RyMV9wMjsKK0FOQUxZWkUgZGlzdHIyX3Ax OworQU5BTFlaRSBkaXN0cjJfcDI7CisKK1NFVCBlbmFibGVfcGFydGl0aW9ud2lzZV9qb2luIFRP IE9OOworCistLSBUZXN0IGpvaW5zIHdpdGggYXN5bmMgTWVyZ2UgQXBwZW5kCitFWFBMQUlOIChW RVJCT1NFLCBDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIGRpc3RyMSwgZGlzdHIyIFdIRVJFIGRp c3RyMS5pPWRpc3RyMi5pIEFORCBkaXN0cjIuaiA+IDkwIGFuZCBkaXN0cjIuayBsaWtlICdkYXRh JScKK09SREVSIEJZIGRpc3RyMi5pIExJTUlUIDEwOworU0VMRUNUICogRlJPTSBkaXN0cjEsIGRp c3RyMiBXSEVSRSBkaXN0cjEuaT1kaXN0cjIuaSBBTkQgZGlzdHIyLmogPiA5MCBhbmQgZGlzdHIy LmsgbGlrZSAnZGF0YSUnCitPUkRFUiBCWSBkaXN0cjIuaSBMSU1JVCAxMDsKKworRVhQTEFJTiAo VkVSQk9TRSwgQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBkaXN0cjEgTEVGVCBKT0lOIGRpc3Ry MiBPTiBkaXN0cjEuaT1kaXN0cjIuaSBBTkQgZGlzdHIyLmsgbGlrZSAnZGF0YSUnIFdIRVJFICBk aXN0cjEuaSA+IDkwCitPUkRFUiBCWSBkaXN0cjEuaSBMSU1JVCAyMDsKK1NFTEVDVCAqIEZST00g ZGlzdHIxIExFRlQgSk9JTiBkaXN0cjIgT04gIGRpc3RyMS5pPWRpc3RyMi5pIEFORCBkaXN0cjIu ayBsaWtlICdkYXRhJScgV0hFUkUgZGlzdHIxLmkgPiA5MAorT1JERVIgQlkgZGlzdHIxLmkgTElN SVQgMjA7CisKKy0tIFRlc3QgcHJ1bmluZyB3aXRoIGFzeW5jIE1lcmdlIEFwcGVuZAorREVMRVRF IEZST00gZGlzdHIyOworSU5TRVJUIElOVE8gZGlzdHIyCitTRUxFQ1QgaSUxMCwgaSoxMCwgJ2Rh dGFfJyB8fCBpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDEwMDApIGk7CisKK0RFQUxMT0NBVEUg QUxMOworU0VUIHBsYW5fY2FjaGVfbW9kZSBUTyBmb3JjZV9nZW5lcmljX3BsYW47CitQUkVQQVJF IGFzeW5jX3B0X3F1ZXJ5IChpbnQsIGludCkgQVMKKyAgU0VMRUNUICogRlJPTSBkaXN0cjIgV0hF UkUgaSA9IEFOWShBUlJBWVskMSwgJDJdKQorICBPUkRFUiBCWSBpLGoKKyAgTElNSVQgMTA7CitF WFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpCisJRVhFQ1VURSBhc3luY19wdF9xdWVyeSgxLCAx KTsKK0VYRUNVVEUgYXN5bmNfcHRfcXVlcnkoMSwgMSk7CitSRVNFVCBwbGFuX2NhY2hlX21vZGU7 CisKK1JFU0VUIGVuYWJsZV9wYXJ0aXRpb253aXNlX2pvaW47CisKK0RST1AgVEFCTEUgZGlzdHIx LCBkaXN0cjIsIGJhc2UxLCBiYXNlMiwgYmFzZTMsIGJhc2U0OworCiBBTFRFUiBTRVJWRVIgbG9v cGJhY2sgT1BUSU9OUyAoRFJPUCBhc3luY19jYXBhYmxlKTsKIEFMVEVSIFNFUlZFUiBsb29wYmFj azIgT1BUSU9OUyAoRFJPUCBhc3luY19jYXBhYmxlKTsKIApkaWZmIC0tZ2l0IGEvZG9jL3NyYy9z Z21sL2NvbmZpZy5zZ21sIGIvZG9jL3NyYy9zZ21sL2NvbmZpZy5zZ21sCmluZGV4IDIwY2NiMmQ2 YjU0Li4zYTgzZjJlZGRkOSAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL2NvbmZpZy5zZ21sCisr KyBiL2RvYy9zcmMvc2dtbC9jb25maWcuc2dtbApAQCAtNTQ0Myw2ICs1NDQzLDIwIEBAIEFOWSA8 cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+bnVtX3N5bmM8L3JlcGxhY2VhYmxlPiAoIDxy ZXBsYWNlYWJsZSBjbGFzcz0iCiAgICAgICA8L2xpc3RpdGVtPgogICAgICA8L3Zhcmxpc3RlbnRy eT4KIAorICAgICA8dmFybGlzdGVudHJ5IGlkPSJndWMtZW5hYmxlLWFzeW5jLW1lcmdlLWFwcGVu ZCIgeHJlZmxhYmVsPSJlbmFibGVfYXN5bmNfbWVyZ2VfYXBwZW5kIj4KKyAgICAgIDx0ZXJtPjx2 YXJuYW1lPmVuYWJsZV9hc3luY19tZXJnZV9hcHBlbmQ8L3Zhcm5hbWU+ICg8dHlwZT5ib29sZWFu PC90eXBlPikKKyAgICAgIDxpbmRleHRlcm0+CisgICAgICAgPHByaW1hcnk+PHZhcm5hbWU+ZW5h YmxlX2FzeW5jX21lcmdlX2FwcGVuZDwvdmFybmFtZT4gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXI8 L3ByaW1hcnk+CisgICAgICA8L2luZGV4dGVybT4KKyAgICAgIDwvdGVybT4KKyAgICAgIDxsaXN0 aXRlbT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgRW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgcXVl cnkgcGxhbm5lcidzIHVzZSBvZiBhc3luYy1hd2FyZQorICAgICAgICBtZXJnZSBhcHBlbmQgcGxh biB0eXBlcy4gVGhlIGRlZmF1bHQgaXMgPGxpdGVyYWw+b248L2xpdGVyYWw+LgorICAgICAgIDwv cGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgIDwvdmFybGlzdGVudHJ5PgorCiAgICAgIDx2 YXJsaXN0ZW50cnkgaWQ9Imd1Yy1lbmFibGUtYml0bWFwc2NhbiIgeHJlZmxhYmVsPSJlbmFibGVf Yml0bWFwc2NhbiI+CiAgICAgICA8dGVybT48dmFybmFtZT5lbmFibGVfYml0bWFwc2NhbjwvdmFy bmFtZT4gKDx0eXBlPmJvb2xlYW48L3R5cGU+KQogICAgICAgPGluZGV4dGVybT4KZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNBc3luYy5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0 b3IvZXhlY0FzeW5jLmMKaW5kZXggNWQzY2FiZTczZTMuLjZkYzE5ZWJjMzc0IDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjQXN5bmMuYworKysgYi9zcmMvYmFja2VuZC9leGVj dXRvci9leGVjQXN5bmMuYwpAQCAtMTcsNiArMTcsNyBAQAogI2luY2x1ZGUgImV4ZWN1dG9yL2V4 ZWNBc3luYy5oIgogI2luY2x1ZGUgImV4ZWN1dG9yL2V4ZWN1dG9yLmgiCiAjaW5jbHVkZSAiZXhl Y3V0b3Ivbm9kZUFwcGVuZC5oIgorI2luY2x1ZGUgImV4ZWN1dG9yL25vZGVNZXJnZUFwcGVuZC5o IgogI2luY2x1ZGUgImV4ZWN1dG9yL25vZGVGb3JlaWduc2Nhbi5oIgogCiAvKgpAQCAtMTIxLDYg KzEyMiw5IEBAIEV4ZWNBc3luY1Jlc3BvbnNlKEFzeW5jUmVxdWVzdCAqYXJlcSkKIAkJY2FzZSBU X0FwcGVuZFN0YXRlOgogCQkJRXhlY0FzeW5jQXBwZW5kUmVzcG9uc2UoYXJlcSk7CiAJCQlicmVh azsKKwkJY2FzZSBUX01lcmdlQXBwZW5kU3RhdGU6CisJCQlFeGVjQXN5bmNNZXJnZUFwcGVuZFJl c3BvbnNlKGFyZXEpOworCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQkvKiBJZiB0aGUgbm9kZSBk b2Vzbid0IHN1cHBvcnQgYXN5bmMsIGNhbGxlciBtZXNzZWQgdXAuICovCiAJCQllbG9nKEVSUk9S LCAidW5yZWNvZ25pemVkIG5vZGUgdHlwZTogJWQiLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv ZXhlY3V0b3Ivbm9kZU1lcmdlQXBwZW5kLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlTWVy Z2VBcHBlbmQuYwppbmRleCA0MDVlOGY5NDI4NS4uNmY4OTlhMmQ1ZjUgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVNZXJnZUFwcGVuZC5jCisrKyBiL3NyYy9iYWNrZW5kL2V4 ZWN1dG9yL25vZGVNZXJnZUFwcGVuZC5jCkBAIC0zOSwxMCArMzksMTUgQEAKICNpbmNsdWRlICJw b3N0Z3Jlcy5oIgogCiAjaW5jbHVkZSAiZXhlY3V0b3IvZXhlY3V0b3IuaCIKKyNpbmNsdWRlICJl eGVjdXRvci9leGVjQXN5bmMuaCIKICNpbmNsdWRlICJleGVjdXRvci9leGVjUGFydGl0aW9uLmgi CiAjaW5jbHVkZSAiZXhlY3V0b3Ivbm9kZU1lcmdlQXBwZW5kLmgiCiAjaW5jbHVkZSAibGliL2Jp bmFyeWhlYXAuaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKKyNpbmNsdWRlICJzdG9yYWdlL2xh dGNoLmgiCisjaW5jbHVkZSAidXRpbHMvd2FpdF9ldmVudC5oIgorCisjZGVmaW5lIEVWRU5UX0JV RkZFUl9TSVpFICAgICAgICAgICAgICAgICAgICAgMTYKIAogLyoKICAqIFdlIGhhdmUgb25lIHNs b3QgZm9yIGVhY2ggaXRlbSBpbiB0aGUgaGVhcCBhcnJheS4gIFdlIHVzZSBTbG90TnVtYmVyCkBA IC01NCw2ICs1OSwxMiBAQCB0eXBlZGVmIGludDMyIFNsb3ROdW1iZXI7CiBzdGF0aWMgVHVwbGVU YWJsZVNsb3QgKkV4ZWNNZXJnZUFwcGVuZChQbGFuU3RhdGUgKnBzdGF0ZSk7CiBzdGF0aWMgaW50 CWhlYXBfY29tcGFyZV9zbG90cyhEYXR1bSBhLCBEYXR1bSBiLCB2b2lkICphcmcpOwogCitzdGF0 aWMgdm9pZCBjbGFzc2lmeV9tYXRjaGluZ19zdWJwbGFucyhNZXJnZUFwcGVuZFN0YXRlICpub2Rl KTsKK3N0YXRpYyB2b2lkIEV4ZWNNZXJnZUFwcGVuZEFzeW5jQmVnaW4oTWVyZ2VBcHBlbmRTdGF0 ZSAqbm9kZSk7CitzdGF0aWMgdm9pZCBFeGVjTWVyZ2VBcHBlbmRBc3luY0dldE5leHQoTWVyZ2VB cHBlbmRTdGF0ZSAqbm9kZSwgaW50IG1wbGFuKTsKK3N0YXRpYyBib29sIEV4ZWNNZXJnZUFwcGVu ZEFzeW5jUmVxdWVzdChNZXJnZUFwcGVuZFN0YXRlICpub2RlLCBpbnQgbXBsYW4pOworc3RhdGlj IHZvaWQgRXhlY01lcmdlQXBwZW5kQXN5bmNFdmVudFdhaXQoTWVyZ2VBcHBlbmRTdGF0ZSAqbm9k ZSk7CisKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQogICoJCUV4ZWNJbml0TWVyZ2VBcHBlbmQKQEAgLTcxLDYgKzgy LDggQEAgRXhlY0luaXRNZXJnZUFwcGVuZChNZXJnZUFwcGVuZCAqbm9kZSwgRVN0YXRlICplc3Rh dGUsIGludCBlZmxhZ3MpCiAJaW50CQkJbnBsYW5zOwogCWludAkJCWksCiAJCQkJajsKKwlCaXRt YXBzZXQgICphc3luY3BsYW5zOworCWludAkJCW5hc3luY3BsYW5zOwogCiAJLyogY2hlY2sgZm9y IHVuc3VwcG9ydGVkIGZsYWdzICovCiAJQXNzZXJ0KCEoZWZsYWdzICYgKEVYRUNfRkxBR19CQUNL V0FSRCB8IEVYRUNfRkxBR19NQVJLKSkpOwpAQCAtMTA2LDcgKzExOSwxMCBAQCBFeGVjSW5pdE1l cmdlQXBwZW5kKE1lcmdlQXBwZW5kICpub2RlLCBFU3RhdGUgKmVzdGF0ZSwgaW50IGVmbGFncykK IAkJICogbGF0ZXIgY2FsbHMgdG8gRXhlY0ZpbmRNYXRjaGluZ1N1YlBsYW5zLgogCQkgKi8KIAkJ aWYgKCFwcnVuZXN0YXRlLT5kb19leGVjX3BydW5lICYmIG5wbGFucyA+IDApCisJCXsKIAkJCW1l cmdlc3RhdGUtPm1zX3ZhbGlkX3N1YnBsYW5zID0gYm1zX2FkZF9yYW5nZShOVUxMLCAwLCBucGxh bnMgLSAxKTsKKwkJCW1lcmdlc3RhdGUtPm1zX3ZhbGlkX3N1YnBsYW5zX2lkZW50aWZpZWQgPSB0 cnVlOworCQl9CiAJfQogCWVsc2UKIAl7CkBAIC0xMTksNiArMTM1LDcgQEAgRXhlY0luaXRNZXJn ZUFwcGVuZChNZXJnZUFwcGVuZCAqbm9kZSwgRVN0YXRlICplc3RhdGUsIGludCBlZmxhZ3MpCiAJ CUFzc2VydChucGxhbnMgPiAwKTsKIAkJbWVyZ2VzdGF0ZS0+bXNfdmFsaWRfc3VicGxhbnMgPSB2 YWxpZHN1YnBsYW5zID0KIAkJCWJtc19hZGRfcmFuZ2UoTlVMTCwgMCwgbnBsYW5zIC0gMSk7CisJ CW1lcmdlc3RhdGUtPm1zX3ZhbGlkX3N1YnBsYW5zX2lkZW50aWZpZWQgPSB0cnVlOwogCQltZXJn ZXN0YXRlLT5tc19wcnVuZV9zdGF0ZSA9IE5VTEw7CiAJfQogCkBAIC0xMzUsMTEgKzE1MiwyNSBA QCBFeGVjSW5pdE1lcmdlQXBwZW5kKE1lcmdlQXBwZW5kICpub2RlLCBFU3RhdGUgKmVzdGF0ZSwg aW50IGVmbGFncykKIAkgKiB0aGUgcmVzdWx0cyBpbnRvIHRoZSBtZXJnZXBsYW5zdGF0ZXMgYXJy YXkuCiAJICovCiAJaiA9IDA7CisJYXN5bmNwbGFucyA9IE5VTEw7CisJbmFzeW5jcGxhbnMgPSAw OworCiAJaSA9IC0xOwogCXdoaWxlICgoaSA9IGJtc19uZXh0X21lbWJlcih2YWxpZHN1YnBsYW5z LCBpKSkgPj0gMCkKIAl7CiAJCVBsYW4JICAgKmluaXROb2RlID0gKFBsYW4gKikgbGlzdF9udGgo bm9kZS0+bWVyZ2VwbGFucywgaSk7CiAKKwkJLyoKKwkJICogUmVjb3JkIGFzeW5jIHN1YnBsYW5z LiAgV2hlbiBleGVjdXRpbmcgRXZhbFBsYW5RdWFsLCB3ZSB0cmVhdCB0aGVtCisJCSAqIGFzIHN5 bmMgb25lczsgZG9uJ3QgZG8gdGhpcyB3aGVuIGluaXRpYWxpemluZyBhbiBFdmFsUGxhblF1YWwg cGxhbgorCQkgKiB0cmVlLgorCQkgKi8KKwkJaWYgKGluaXROb2RlLT5hc3luY19jYXBhYmxlICYm IGVzdGF0ZS0+ZXNfZXBxX2FjdGl2ZSA9PSBOVUxMKQorCQl7CisJCQlhc3luY3BsYW5zID0gYm1z X2FkZF9tZW1iZXIoYXN5bmNwbGFucywgaik7CisJCQluYXN5bmNwbGFucysrOworCQl9CisKIAkJ bWVyZ2VwbGFuc3RhdGVzW2orK10gPSBFeGVjSW5pdE5vZGUoaW5pdE5vZGUsIGVzdGF0ZSwgZWZs YWdzKTsKIAl9CiAKQEAgLTE3MCw2ICsyMDEsNDUgQEAgRXhlY0luaXRNZXJnZUFwcGVuZChNZXJn ZUFwcGVuZCAqbm9kZSwgRVN0YXRlICplc3RhdGUsIGludCBlZmxhZ3MpCiAJICovCiAJbWVyZ2Vz dGF0ZS0+cHMucHNfUHJvakluZm8gPSBOVUxMOwogCisJLyogSW5pdGlhbGl6ZSBhc3luYyBzdGF0 ZSAqLworCW1lcmdlc3RhdGUtPm1zX2FzeW5jcGxhbnMgPSBhc3luY3BsYW5zOworCW1lcmdlc3Rh dGUtPm1zX25hc3luY3BsYW5zID0gbmFzeW5jcGxhbnM7CisJbWVyZ2VzdGF0ZS0+bXNfYXN5bmNy ZXF1ZXN0cyA9IE5VTEw7CisJbWVyZ2VzdGF0ZS0+bXNfYXN5bmNyZXN1bHRzID0gTlVMTDsKKwlt ZXJnZXN0YXRlLT5tc19oYXNfYXN5bmNyZXN1bHRzID0gTlVMTDsKKwltZXJnZXN0YXRlLT5tc19h c3luY3JlbWFpbiA9IE5VTEw7CisJbWVyZ2VzdGF0ZS0+bXNfbmVlZHJlcXVlc3QgPSBOVUxMOwor CW1lcmdlc3RhdGUtPm1zX2V2ZW50c2V0ID0gTlVMTDsKKwltZXJnZXN0YXRlLT5tc192YWxpZF9h c3luY3BsYW5zID0gTlVMTDsKKworCWlmIChuYXN5bmNwbGFucyA+IDApCisJeworCQltZXJnZXN0 YXRlLT5tc19hc3luY3JlcXVlc3RzID0gKEFzeW5jUmVxdWVzdCAqKikKKwkJCXBhbGxvYzAobnBs YW5zICogc2l6ZW9mKEFzeW5jUmVxdWVzdCAqKSk7CisKKwkJaSA9IC0xOworCQl3aGlsZSAoKGkg PSBibXNfbmV4dF9tZW1iZXIoYXN5bmNwbGFucywgaSkpID49IDApCisJCXsKKwkJCUFzeW5jUmVx dWVzdCAqYXJlcTsKKworCQkJYXJlcSA9IHBhbGxvYyhzaXplb2YoQXN5bmNSZXF1ZXN0KSk7CisJ CQlhcmVxLT5yZXF1ZXN0b3IgPSAoUGxhblN0YXRlICopIG1lcmdlc3RhdGU7CisJCQlhcmVxLT5y ZXF1ZXN0ZWUgPSBtZXJnZXBsYW5zdGF0ZXNbaV07CisJCQlhcmVxLT5yZXF1ZXN0X2luZGV4ID0g aTsKKwkJCWFyZXEtPmNhbGxiYWNrX3BlbmRpbmcgPSBmYWxzZTsKKwkJCWFyZXEtPnJlcXVlc3Rf Y29tcGxldGUgPSBmYWxzZTsKKwkJCWFyZXEtPnJlc3VsdCA9IE5VTEw7CisKKwkJCW1lcmdlc3Rh dGUtPm1zX2FzeW5jcmVxdWVzdHNbaV0gPSBhcmVxOworCQl9CisKKwkJbWVyZ2VzdGF0ZS0+bXNf YXN5bmNyZXN1bHRzID0gKFR1cGxlVGFibGVTbG90ICoqKQorCQkJcGFsbG9jMChucGxhbnMgKiBz aXplb2YoVHVwbGVUYWJsZVNsb3QgKikpOworCisJCWlmIChtZXJnZXN0YXRlLT5tc192YWxpZF9z dWJwbGFuc19pZGVudGlmaWVkKQorCQkJY2xhc3NpZnlfbWF0Y2hpbmdfc3VicGxhbnMobWVyZ2Vz dGF0ZSk7CisJfQorCiAJLyoKIAkgKiBpbml0aWFsaXplIHNvcnQta2V5IGluZm9ybWF0aW9uCiAJ ICovCkBAIC0yMzEsOSArMzAxLDE2IEBAIEV4ZWNNZXJnZUFwcGVuZChQbGFuU3RhdGUgKnBzdGF0 ZSkKIAkJICogcnVuLXRpbWUgcHJ1bmluZyBpcyBkaXNhYmxlZCB0aGVuIHRoZSB2YWxpZCBzdWJw bGFucyB3aWxsIGFsd2F5cyBiZQogCQkgKiBzZXQgdG8gYWxsIHN1YnBsYW5zLgogCQkgKi8KLQkJ aWYgKG5vZGUtPm1zX3ZhbGlkX3N1YnBsYW5zID09IE5VTEwpCisJCWlmICghbm9kZS0+bXNfdmFs aWRfc3VicGxhbnNfaWRlbnRpZmllZCkKKwkJewogCQkJbm9kZS0+bXNfdmFsaWRfc3VicGxhbnMg PQogCQkJCUV4ZWNGaW5kTWF0Y2hpbmdTdWJQbGFucyhub2RlLT5tc19wcnVuZV9zdGF0ZSwgZmFs c2UsIE5VTEwpOworCQkJbm9kZS0+bXNfdmFsaWRfc3VicGxhbnNfaWRlbnRpZmllZCA9IHRydWU7 CisJCX0KKworCQkvKiBJZiB0aGVyZSBhcmUgYW55IGFzeW5jIHN1YnBsYW5zLCBiZWdpbiBleGVj dXRpbmcgdGhlbS4gKi8KKwkJaWYgKG5vZGUtPm1zX25hc3luY3BsYW5zID4gMCkKKwkJCUV4ZWNN ZXJnZUFwcGVuZEFzeW5jQmVnaW4obm9kZSk7CiAKIAkJLyoKIAkJICogRmlyc3QgdGltZSB0aHJv dWdoOiBwdWxsIHRoZSBmaXJzdCB0dXBsZSBmcm9tIGVhY2ggdmFsaWQgc3VicGxhbiwKQEAgLTI0 Niw2ICszMjMsMTYgQEAgRXhlY01lcmdlQXBwZW5kKFBsYW5TdGF0ZSAqcHN0YXRlKQogCQkJaWYg KCFUdXBJc051bGwobm9kZS0+bXNfc2xvdHNbaV0pKQogCQkJCWJpbmFyeWhlYXBfYWRkX3Vub3Jk ZXJlZChub2RlLT5tc19oZWFwLCBJbnQzMkdldERhdHVtKGkpKTsKIAkJfQorCisJCS8qIExvb2sg YXQgdmFsaWQgYXN5bmMgc3VicGxhbnMgKi8KKwkJaSA9IC0xOworCQl3aGlsZSAoKGkgPSBibXNf bmV4dF9tZW1iZXIobm9kZS0+bXNfdmFsaWRfYXN5bmNwbGFucywgaSkpID49IDApCisJCXsKKwkJ CUV4ZWNNZXJnZUFwcGVuZEFzeW5jR2V0TmV4dChub2RlLCBpKTsKKwkJCWlmICghVHVwSXNOdWxs KG5vZGUtPm1zX3Nsb3RzW2ldKSkKKwkJCQliaW5hcnloZWFwX2FkZF91bm9yZGVyZWQobm9kZS0+ bXNfaGVhcCwgSW50MzJHZXREYXR1bShpKSk7CisJCX0KKwogCQliaW5hcnloZWFwX2J1aWxkKG5v ZGUtPm1zX2hlYXApOwogCQlub2RlLT5tc19pbml0aWFsaXplZCA9IHRydWU7CiAJfQpAQCAtMjYw LDcgKzM0NywxMyBAQCBFeGVjTWVyZ2VBcHBlbmQoUGxhblN0YXRlICpwc3RhdGUpCiAJCSAqIHRv IG5vdCBwdWxsIHR1cGxlcyB1bnRpbCBuZWNlc3NhcnkuKQogCQkgKi8KIAkJaSA9IERhdHVtR2V0 SW50MzIoYmluYXJ5aGVhcF9maXJzdChub2RlLT5tc19oZWFwKSk7Ci0JCW5vZGUtPm1zX3Nsb3Rz W2ldID0gRXhlY1Byb2NOb2RlKG5vZGUtPm1lcmdlcGxhbnNbaV0pOworCQlpZiAoYm1zX2lzX21l bWJlcihpLCBub2RlLT5tc19hc3luY3BsYW5zKSkKKwkJCUV4ZWNNZXJnZUFwcGVuZEFzeW5jR2V0 TmV4dChub2RlLCBpKTsKKwkJZWxzZQorCQl7CisJCQlBc3NlcnQoYm1zX2lzX21lbWJlcihpLCBu b2RlLT5tc192YWxpZF9zdWJwbGFucykpOworCQkJbm9kZS0+bXNfc2xvdHNbaV0gPSBFeGVjUHJv Y05vZGUobm9kZS0+bWVyZ2VwbGFuc1tpXSk7CisJCX0KIAkJaWYgKCFUdXBJc051bGwobm9kZS0+ bXNfc2xvdHNbaV0pKQogCQkJYmluYXJ5aGVhcF9yZXBsYWNlX2ZpcnN0KG5vZGUtPm1zX2hlYXAs IEludDMyR2V0RGF0dW0oaSkpOwogCQllbHNlCkBAIC0yNzYsNiArMzY5LDggQEAgRXhlY01lcmdl QXBwZW5kKFBsYW5TdGF0ZSAqcHN0YXRlKQogCXsKIAkJaSA9IERhdHVtR2V0SW50MzIoYmluYXJ5 aGVhcF9maXJzdChub2RlLT5tc19oZWFwKSk7CiAJCXJlc3VsdCA9IG5vZGUtPm1zX3Nsb3RzW2ld OworCQkvKiBGb3IgYXN5bmMgcGxhbiByZWNvcmQgdGhhdCB3ZSBjYW4gZ2V0IHRoZSBuZXh0IHR1 cGxlICovCisJCW5vZGUtPm1zX2hhc19hc3luY3Jlc3VsdHMgPSBibXNfZGVsX21lbWJlcihub2Rl LT5tc19oYXNfYXN5bmNyZXN1bHRzLCBpKTsKIAl9CiAKIAlyZXR1cm4gcmVzdWx0OwpAQCAtMzU1 LDYgKzQ1MCw3IEBAIHZvaWQKIEV4ZWNSZVNjYW5NZXJnZUFwcGVuZChNZXJnZUFwcGVuZFN0YXRl ICpub2RlKQogewogCWludAkJCWk7CisJaW50CQkJbmFzeW5jcGxhbnMgPSBub2RlLT5tc19uYXN5 bmNwbGFuczsKIAogCS8qCiAJICogSWYgYW55IFBBUkFNX0VYRUMgUGFyYW1zIHVzZWQgaW4gcHJ1 bmluZyBleHByZXNzaW9ucyBoYXZlIGNoYW5nZWQsIHRoZW4KQEAgLTM2NSw4ICs0NjEsMTEgQEAg RXhlY1JlU2Nhbk1lcmdlQXBwZW5kKE1lcmdlQXBwZW5kU3RhdGUgKm5vZGUpCiAJCWJtc19vdmVy bGFwKG5vZGUtPnBzLmNoZ1BhcmFtLAogCQkJCQlub2RlLT5tc19wcnVuZV9zdGF0ZS0+ZXhlY3Bh cmFtaWRzKSkKIAl7CisJCW5vZGUtPm1zX3ZhbGlkX3N1YnBsYW5zX2lkZW50aWZpZWQgPSBmYWxz ZTsKIAkJYm1zX2ZyZWUobm9kZS0+bXNfdmFsaWRfc3VicGxhbnMpOwogCQlub2RlLT5tc192YWxp ZF9zdWJwbGFucyA9IE5VTEw7CisJCWJtc19mcmVlKG5vZGUtPm1zX3ZhbGlkX2FzeW5jcGxhbnMp OworCQlub2RlLT5tc192YWxpZF9hc3luY3BsYW5zID0gTlVMTDsKIAl9CiAKIAlmb3IgKGkgPSAw OyBpIDwgbm9kZS0+bXNfbnBsYW5zOyBpKyspCkBAIC0zODcsNiArNDg2LDM4NCBAQCBFeGVjUmVT Y2FuTWVyZ2VBcHBlbmQoTWVyZ2VBcHBlbmRTdGF0ZSAqbm9kZSkKIAkJaWYgKHN1Ym5vZGUtPmNo Z1BhcmFtID09IE5VTEwpCiAJCQlFeGVjUmVTY2FuKHN1Ym5vZGUpOwogCX0KKworCS8qIFJlc2V0 IGFzeW5jIHN0YXRlICovCisJaWYgKG5hc3luY3BsYW5zID4gMCkKKwl7CisJCWkgPSAtMTsKKwkJ d2hpbGUgKChpID0gYm1zX25leHRfbWVtYmVyKG5vZGUtPm1zX2FzeW5jcGxhbnMsIGkpKSA+PSAw KQorCQl7CisJCQlBc3luY1JlcXVlc3QgKmFyZXEgPSBub2RlLT5tc19hc3luY3JlcXVlc3RzW2ld OworCisJCQlhcmVxLT5jYWxsYmFja19wZW5kaW5nID0gZmFsc2U7CisJCQlhcmVxLT5yZXF1ZXN0 X2NvbXBsZXRlID0gZmFsc2U7CisJCQlhcmVxLT5yZXN1bHQgPSBOVUxMOworCQl9CisKKwkJYm1z X2ZyZWUobm9kZS0+bXNfYXN5bmNyZW1haW4pOworCQlub2RlLT5tc19hc3luY3JlbWFpbiA9IE5V TEw7CisJCWJtc19mcmVlKG5vZGUtPm1zX25lZWRyZXF1ZXN0KTsKKwkJbm9kZS0+bXNfbmVlZHJl cXVlc3QgPSBOVUxMOworCQlibXNfZnJlZShub2RlLT5tc19oYXNfYXN5bmNyZXN1bHRzKTsKKwkJ bm9kZS0+bXNfaGFzX2FzeW5jcmVzdWx0cyA9IE5VTEw7CisJfQogCWJpbmFyeWhlYXBfcmVzZXQo bm9kZS0+bXNfaGVhcCk7CiAJbm9kZS0+bXNfaW5pdGlhbGl6ZWQgPSBmYWxzZTsKIH0KKworLyog LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorICogICAgICAgICAgICAgIGNsYXNzaWZ5X21hdGNoaW5nX3N1YnBsYW5zCisgKgor ICogICAgICAgICAgICAgIENsYXNzaWZ5IHRoZSBub2RlJ3MgbXNfdmFsaWRfc3VicGxhbnMgaW50 byBzeW5jIG9uZXMgYW5kCisgKiAgICAgICAgICAgICAgYXN5bmMgb25lcywgYWRqdXN0IGl0IHRv IGNvbnRhaW4gc3luYyBvbmVzIG9ubHksIGFuZCBzYXZlCisgKiAgICAgICAgICAgICAgYXN5bmMg b25lcyBpbiB0aGUgbm9kZSdzIG1zX3ZhbGlkX2FzeW5jcGxhbnMuCisgKiAtLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8K K3N0YXRpYyB2b2lkCitjbGFzc2lmeV9tYXRjaGluZ19zdWJwbGFucyhNZXJnZUFwcGVuZFN0YXRl ICpub2RlKQoreworCUJpdG1hcHNldCAgKnZhbGlkX2FzeW5jcGxhbnM7CisKKwlBc3NlcnQobm9k ZS0+bXNfdmFsaWRfc3VicGxhbnNfaWRlbnRpZmllZCk7CisJQXNzZXJ0KG5vZGUtPm1zX3ZhbGlk X2FzeW5jcGxhbnMgPT0gTlVMTCk7CisKKwkvKiBOb3RoaW5nIHRvIGRvIGlmIHRoZXJlIGFyZSBu byB2YWxpZCBzdWJwbGFucy4gKi8KKwlpZiAoYm1zX2lzX2VtcHR5KG5vZGUtPm1zX3ZhbGlkX3N1 YnBsYW5zKSkKKwl7CisJCW5vZGUtPm1zX2FzeW5jcmVtYWluID0gTlVMTDsKKwkJcmV0dXJuOwor CX0KKworCS8qIE5vdGhpbmcgdG8gZG8gaWYgdGhlcmUgYXJlIG5vIHZhbGlkIGFzeW5jIHN1YnBs YW5zLiAqLworCWlmICghYm1zX292ZXJsYXAobm9kZS0+bXNfdmFsaWRfc3VicGxhbnMsIG5vZGUt Pm1zX2FzeW5jcGxhbnMpKQorCXsKKwkJbm9kZS0+bXNfYXN5bmNyZW1haW4gPSBOVUxMOworCQly ZXR1cm47CisJfQorCisJLyogR2V0IHZhbGlkIGFzeW5jIHN1YnBsYW5zLiAqLworCXZhbGlkX2Fz eW5jcGxhbnMgPSBibXNfaW50ZXJzZWN0KG5vZGUtPm1zX2FzeW5jcGxhbnMsCisJCQkJCQkJCQkg bm9kZS0+bXNfdmFsaWRfc3VicGxhbnMpOworCisJLyogQWRqdXN0IHRoZSB2YWxpZCBzdWJwbGFu cyB0byBjb250YWluIHN5bmMgc3VicGxhbnMgb25seS4gKi8KKwlub2RlLT5tc192YWxpZF9zdWJw bGFucyA9IGJtc19kZWxfbWVtYmVycyhub2RlLT5tc192YWxpZF9zdWJwbGFucywKKwkJCQkJCQkJ CQkJICB2YWxpZF9hc3luY3BsYW5zKTsKKworCS8qIFNhdmUgdmFsaWQgYXN5bmMgc3VicGxhbnMu ICovCisJbm9kZS0+bXNfdmFsaWRfYXN5bmNwbGFucyA9IHZhbGlkX2FzeW5jcGxhbnM7Cit9CisK Ky8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyAqICAgICAgICAgICAgICBFeGVjTWVyZ2VBcHBlbmRBc3luY0JlZ2luCisg KgorICogICAgICAgICAgICAgIEJlZ2luIGV4ZWN1dGluZyBkZXNpZ25lZCBhc3luYy1jYXBhYmxl IHN1YnBsYW5zLgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCitzdGF0aWMgdm9pZAorRXhlY01lcmdlQXBwZW5k QXN5bmNCZWdpbihNZXJnZUFwcGVuZFN0YXRlICpub2RlKQoreworCWludAkJCWk7CisKKwkvKiBC YWNrd2FyZCBzY2FuIGlzIG5vdCBzdXBwb3J0ZWQgYnkgYXN5bmMtYXdhcmUgTWVyZ2VBcHBlbmRz LiAqLworCUFzc2VydChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKG5vZGUtPnBzLnN0YXRlLT5lc19k aXJlY3Rpb24pKTsKKworCS8qIFdlIHNob3VsZCBuZXZlciBiZSBjYWxsZWQgd2hlbiB0aGVyZSBh cmUgbm8gc3VicGxhbnMgKi8KKwlBc3NlcnQobm9kZS0+bXNfbnBsYW5zID4gMCk7CisKKwkvKiBX ZSBzaG91bGQgbmV2ZXIgYmUgY2FsbGVkIHdoZW4gdGhlcmUgYXJlIG5vIGFzeW5jIHN1YnBsYW5z LiAqLworCUFzc2VydChub2RlLT5tc19uYXN5bmNwbGFucyA+IDApOworCisJLyogSWYgd2UndmUg eWV0IHRvIGRldGVybWluZSB0aGUgdmFsaWQgc3VicGxhbnMgdGhlbiBkbyBzbyBub3cuICovCisJ aWYgKCFub2RlLT5tc192YWxpZF9zdWJwbGFuc19pZGVudGlmaWVkKQorCXsKKwkJbm9kZS0+bXNf dmFsaWRfc3VicGxhbnMgPQorCQkJRXhlY0ZpbmRNYXRjaGluZ1N1YlBsYW5zKG5vZGUtPm1zX3By dW5lX3N0YXRlLCBmYWxzZSwgTlVMTCk7CisJCW5vZGUtPm1zX3ZhbGlkX3N1YnBsYW5zX2lkZW50 aWZpZWQgPSB0cnVlOworCisJCWNsYXNzaWZ5X21hdGNoaW5nX3N1YnBsYW5zKG5vZGUpOworCX0K KworCS8qIEluaXRpYWxpemUgc3RhdGUgdmFyaWFibGVzLiAqLworCW5vZGUtPm1zX2FzeW5jcmVt YWluID0gYm1zX2NvcHkobm9kZS0+bXNfdmFsaWRfYXN5bmNwbGFucyk7CisKKwkvKiBOb3RoaW5n IHRvIGRvIGlmIHRoZXJlIGFyZSBubyB2YWxpZCBhc3luYyBzdWJwbGFucy4gKi8KKwlpZiAoYm1z X2lzX2VtcHR5KG5vZGUtPm1zX2FzeW5jcmVtYWluKSkKKwkJcmV0dXJuOworCisJLyogTWFrZSBh IHJlcXVlc3QgZm9yIGVhY2ggb2YgdGhlIHZhbGlkIGFzeW5jIHN1YnBsYW5zLiAqLworCWkgPSAt MTsKKwl3aGlsZSAoKGkgPSBibXNfbmV4dF9tZW1iZXIobm9kZS0+bXNfdmFsaWRfYXN5bmNwbGFu cywgaSkpID49IDApCisJeworCQlBc3luY1JlcXVlc3QgKmFyZXEgPSBub2RlLT5tc19hc3luY3Jl cXVlc3RzW2ldOworCisJCUFzc2VydChhcmVxLT5yZXF1ZXN0X2luZGV4ID09IGkpOworCQlBc3Nl cnQoIWFyZXEtPmNhbGxiYWNrX3BlbmRpbmcpOworCisJCS8qIERvIHRoZSBhY3R1YWwgd29yay4g Ki8KKwkJRXhlY0FzeW5jUmVxdWVzdChhcmVxKTsKKwl9Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICAg ICAgICAgICAgICBFeGVjTWVyZ2VBcHBlbmRBc3luY0dldE5leHQKKyAqCisgKiAgICAgICAgICAg ICAgR2V0IHRoZSBuZXh0IHR1cGxlIGZyb20gc3BlY2lmaWVkIGFzeW5jaHJvbm91cyBzdWJwbGFu LgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorICovCitzdGF0aWMgdm9pZAorRXhlY01lcmdlQXBwZW5kQXN5bmNHZXRO ZXh0KE1lcmdlQXBwZW5kU3RhdGUgKm5vZGUsIGludCBtcGxhbikKK3sKKwlub2RlLT5tc19zbG90 c1ttcGxhbl0gPSBOVUxMOworCisJLyogUmVxdWVzdCBhIHR1cGxlIGFzeW5jaHJvbm91c2x5LiAq LworCWlmIChFeGVjTWVyZ2VBcHBlbmRBc3luY1JlcXVlc3Qobm9kZSwgbXBsYW4pKQorCQlyZXR1 cm47CisKKwkvKgorCSAqIG5vZGUtPm1zX2FzeW5jcmVtYWluIGNhbiBiZSBOVUxMIGlmIHdlIGhh dmUgZmV0Y2hlZCB0dXBsZXMsIGJ1dCBoYXZlbid0CisJICogcmV0dXJuZWQgdGhlbSB5ZXQuIElu IHRoaXMgY2FzZSBFeGVjTWVyZ2VBcHBlbmRBc3luY1JlcXVlc3QoKSBhYm92ZQorCSAqIGp1c3Qg cmV0dXJucyB0dXBsZXMgd2l0aG91dCBwZXJmb3JtaW5nIGEgcmVxdWVzdC4KKwkgKi8KKwl3aGls ZSAoYm1zX2lzX21lbWJlcihtcGxhbiwgbm9kZS0+bXNfYXN5bmNyZW1haW4pKQorCXsKKwkJQ0hF Q0tfRk9SX0lOVEVSUlVQVFMoKTsKKworCQkvKiBXYWl0IG9yIHBvbGwgZm9yIGFzeW5jIGV2ZW50 cy4gKi8KKwkJRXhlY01lcmdlQXBwZW5kQXN5bmNFdmVudFdhaXQobm9kZSk7CisKKwkJLyogUmVx dWVzdCBhIHR1cGxlIGFzeW5jaHJvbm91c2x5LiAqLworCQlpZiAoRXhlY01lcmdlQXBwZW5kQXN5 bmNSZXF1ZXN0KG5vZGUsIG1wbGFuKSkKKwkJCXJldHVybjsKKworCQkvKgorCQkgKiBXYWl0aW5n IHVudGlsIHRoZXJlJ3Mgbm8gYXN5bmMgcmVxdWVzdHMgcGVuZGluZyBvciB3ZSBnb3Qgc29tZQor CQkgKiB0dXBsZXMgZnJvbSBvdXIgcmVxdWVzdAorCQkgKi8KKwl9CisKKwkvKiBObyB0dXBsZXMg Ki8KKwlyZXR1cm47Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICAgICAgICAgICAgICBFeGVjTWVyZ2VB cHBlbmRBc3luY1JlcXVlc3QKKyAqCisgKiAgICAgICAgICAgICAgUmVxdWVzdCBhIHR1cGxlIGFz eW5jaHJvbm91c2x5LgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCitzdGF0aWMgYm9vbAorRXhlY01lcmdlQXBw ZW5kQXN5bmNSZXF1ZXN0KE1lcmdlQXBwZW5kU3RhdGUgKm5vZGUsIGludCBtcGxhbikKK3sKKwlC aXRtYXBzZXQgICpuZWVkcmVxdWVzdDsKKwlpbnQJCQlpOworCisJLyoKKwkgKiBJZiB3ZSd2ZSBh bHJlYWR5IGZldGNoZWQgbmVjZXNzYXJ5IGRhdGEsIGp1c3QgcmV0dXJuIGl0CisJICovCisJaWYg KGJtc19pc19tZW1iZXIobXBsYW4sIG5vZGUtPm1zX2hhc19hc3luY3Jlc3VsdHMpKQorCXsKKwkJ bm9kZS0+bXNfc2xvdHNbbXBsYW5dID0gbm9kZS0+bXNfYXN5bmNyZXN1bHRzW21wbGFuXTsKKwkJ cmV0dXJuIHRydWU7CisJfQorCisJLyoKKwkgKiBHZXQgYSBsaXN0IG9mIG1lbWJlcnMgd2hpY2gg Y2FuIHByb2Nlc3MgcmVxdWVzdCBhbmQgZG9uJ3QgaGF2ZSBkYXRhCisJICogcmVhZHkuCisJICov CisJbmVlZHJlcXVlc3QgPSBOVUxMOworCWkgPSAtMTsKKwl3aGlsZSAoKGkgPSBibXNfbmV4dF9t ZW1iZXIobm9kZS0+bXNfbmVlZHJlcXVlc3QsIGkpKSA+PSAwKQorCXsKKwkJaWYgKCFibXNfaXNf bWVtYmVyKGksIG5vZGUtPm1zX2hhc19hc3luY3Jlc3VsdHMpKQorCQkJbmVlZHJlcXVlc3QgPSBi bXNfYWRkX21lbWJlcihuZWVkcmVxdWVzdCwgaSk7CisJfQorCisJLyoKKwkgKiBJZiB0aGVyZSdz IG5vIG1lbWJlcnMsIHdoaWNoIHN0aWxsIG5lZWQgcmVxdWVzdCwgbm8gbmVlZCB0byBzZW5kIGl0 LgorCSAqLworCWlmIChibXNfaXNfZW1wdHkobmVlZHJlcXVlc3QpKQorCQlyZXR1cm4gZmFsc2U7 CisKKwkvKiBDbGVhciBtc19uZWVkcmVxdWVzdCBmbGFnLCBhcyB3ZSBhcmUgZ29pbmcgdG8gc2Vu ZCByZXF1ZXN0cyBub3cgKi8KKwlub2RlLT5tc19uZWVkcmVxdWVzdCA9IGJtc19kZWxfbWVtYmVy cyhub2RlLT5tc19uZWVkcmVxdWVzdCwgbmVlZHJlcXVlc3QpOworCisJLyogTWFrZSBhIG5ldyBy ZXF1ZXN0IGZvciBlYWNoIG9mIHRoZSBhc3luYyBzdWJwbGFucyB0aGF0IG5lZWQgaXQuICovCisJ aSA9IC0xOworCXdoaWxlICgoaSA9IGJtc19uZXh0X21lbWJlcihuZWVkcmVxdWVzdCwgaSkpID49 IDApCisJeworCQlBc3luY1JlcXVlc3QgKmFyZXEgPSBub2RlLT5tc19hc3luY3JlcXVlc3RzW2ld OworCisJCS8qCisJCSAqIFdlJ3ZlIGp1c3QgY2hlY2tlZCB0aGF0IHN1YnBsYW4gZG9lc24ndCBh bHJlYWR5IGhhdmUgc29tZSBmZXRjaGVkCisJCSAqIGRhdGEKKwkJICovCisJCUFzc2VydCghYm1z X2lzX21lbWJlcihpLCBub2RlLT5tc19oYXNfYXN5bmNyZXN1bHRzKSk7CisKKwkJLyogRG8gdGhl IGFjdHVhbCB3b3JrLiAqLworCQlFeGVjQXN5bmNSZXF1ZXN0KGFyZXEpOworCX0KKwlibXNfZnJl ZShuZWVkcmVxdWVzdCk7CisKKwkvKiBSZXR1cm4gbmVlZGVkIGFzeW5jaHJvbm91c2x5LWdlbmVy YXRlZCByZXN1bHRzIGlmIGFueS4gKi8KKwlpZiAoYm1zX2lzX21lbWJlcihtcGxhbiwgbm9kZS0+ bXNfaGFzX2FzeW5jcmVzdWx0cykpCisJeworCQlub2RlLT5tc19zbG90c1ttcGxhbl0gPSBub2Rl LT5tc19hc3luY3Jlc3VsdHNbbXBsYW5dOworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwlyZXR1cm4g ZmFsc2U7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICAgICAgICAgICAgICBFeGVjQXN5bmNNZXJnZUFw cGVuZFJlc3BvbnNlCisgKgorICogICAgICAgICAgICAgIFJlY2VpdmUgYSByZXNwb25zZSBmcm9t IGFuIGFzeW5jaHJvbm91cyByZXF1ZXN0IHdlIG1hZGUuCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KK3ZvaWQK K0V4ZWNBc3luY01lcmdlQXBwZW5kUmVzcG9uc2UoQXN5bmNSZXF1ZXN0ICphcmVxKQoreworCU1l cmdlQXBwZW5kU3RhdGUgKm5vZGUgPSAoTWVyZ2VBcHBlbmRTdGF0ZSAqKSBhcmVxLT5yZXF1ZXN0 b3I7CisJVHVwbGVUYWJsZVNsb3QgKnNsb3QgPSBhcmVxLT5yZXN1bHQ7CisKKwkvKiBUaGUgcmVz dWx0IHNob3VsZCBiZSBhIFR1cGxlVGFibGVTbG90IG9yIE5VTEwuICovCisJQXNzZXJ0KHNsb3Qg PT0gTlVMTCB8fCBJc0Eoc2xvdCwgVHVwbGVUYWJsZVNsb3QpKTsKKwlBc3NlcnQoIWJtc19pc19t ZW1iZXIoYXJlcS0+cmVxdWVzdF9pbmRleCwgbm9kZS0+bXNfaGFzX2FzeW5jcmVzdWx0cykpOwor CisJbm9kZS0+bXNfYXN5bmNyZXN1bHRzW2FyZXEtPnJlcXVlc3RfaW5kZXhdID0gTlVMTDsKKwkv KiBOb3RoaW5nIHRvIGRvIGlmIHRoZSByZXF1ZXN0IGlzIHBlbmRpbmcuICovCisJaWYgKCFhcmVx LT5yZXF1ZXN0X2NvbXBsZXRlKQorCXsKKwkJLyogVGhlIHJlcXVlc3Qgd291bGQgaGF2ZSBiZWVu IHBlbmRpbmcgZm9yIGEgY2FsbGJhY2suICovCisJCUFzc2VydChhcmVxLT5jYWxsYmFja19wZW5k aW5nKTsKKwkJcmV0dXJuOworCX0KKworCS8qIElmIHRoZSByZXN1bHQgaXMgTlVMTCBvciBhbiBl bXB0eSBzbG90LCB0aGVyZSdzIG5vdGhpbmcgbW9yZSB0byBkby4gKi8KKwlpZiAoVHVwSXNOdWxs KHNsb3QpKQorCXsKKwkJLyogVGhlIGVuZGluZyBzdWJwbGFuIHdvdWxkbid0IGhhdmUgYmVlbiBw ZW5kaW5nIGZvciBhIGNhbGxiYWNrLiAqLworCQlBc3NlcnQoIWFyZXEtPmNhbGxiYWNrX3BlbmRp bmcpOworCQlub2RlLT5tc19hc3luY3JlbWFpbiA9IGJtc19kZWxfbWVtYmVyKG5vZGUtPm1zX2Fz eW5jcmVtYWluLCBhcmVxLT5yZXF1ZXN0X2luZGV4KTsKKwkJcmV0dXJuOworCX0KKworCW5vZGUt Pm1zX2hhc19hc3luY3Jlc3VsdHMgPSBibXNfYWRkX21lbWJlcihub2RlLT5tc19oYXNfYXN5bmNy ZXN1bHRzLCBhcmVxLT5yZXF1ZXN0X2luZGV4KTsKKwkvKiBTYXZlIHJlc3VsdCBzbyB3ZSBjYW4g cmV0dXJuIGl0LiAqLworCW5vZGUtPm1zX2FzeW5jcmVzdWx0c1thcmVxLT5yZXF1ZXN0X2luZGV4 XSA9IHNsb3Q7CisKKwkvKgorCSAqIE1hcmsgdGhlIHN1YnBsYW4gdGhhdCByZXR1cm5lZCBhIHJl c3VsdCBhcyByZWFkeSBmb3IgYSBuZXcgcmVxdWVzdC4gIFdlCisJICogZG9uJ3QgbGF1bmNoIGFu b3RoZXIgb25lIGhlcmUgaW1tZWRpYXRlbHkgYmVjYXVzZSBpdCBtaWdodCBjb21wbGV0ZS4KKwkg Ki8KKwlub2RlLT5tc19uZWVkcmVxdWVzdCA9IGJtc19hZGRfbWVtYmVyKG5vZGUtPm1zX25lZWRy ZXF1ZXN0LAorCQkJCQkJCQkJCSAgYXJlcS0+cmVxdWVzdF9pbmRleCk7Cit9CisKKy8qIC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyAqCQlFeGVjTWVyZ2VBcHBlbmRBc3luY0V2ZW50V2FpdAorICoKKyAqCQlXYWl0IG9yIHBv bGwgZm9yIGZpbGUgZGVzY3JpcHRvciBldmVudHMgYW5kIGZpcmUgY2FsbGJhY2tzLgorICogLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorICovCitzdGF0aWMgdm9pZAorRXhlY01lcmdlQXBwZW5kQXN5bmNFdmVudFdhaXQoTWVy Z2VBcHBlbmRTdGF0ZSAqbm9kZSkKK3sKKwlpbnQJCQluZXZlbnRzID0gbm9kZS0+bXNfbmFzeW5j cGxhbnMgKyAyOyAvKiBvbmUgZm9yIFBNIGRlYXRoIGFuZAorCQkJCQkJCQkJCQkJCSAqIG9uZSBm b3IgbGF0Y2ggKi8KKwlXYWl0RXZlbnQJb2NjdXJyZWRfZXZlbnRbRVZFTlRfQlVGRkVSX1NJWkVd OworCWludAkJCW5vY2N1cnJlZDsKKwlpbnQJCQlpOworCisJLyogV2Ugc2hvdWxkIG5ldmVyIGJl IGNhbGxlZCB3aGVuIHRoZXJlIGFyZSBubyB2YWxpZCBhc3luYyBzdWJwbGFucy4gKi8KKwlBc3Nl cnQoYm1zX251bV9tZW1iZXJzKG5vZGUtPm1zX2FzeW5jcmVtYWluKSA+IDApOworCisJbm9kZS0+ bXNfZXZlbnRzZXQgPSBDcmVhdGVXYWl0RXZlbnRTZXQoQ3VycmVudFJlc291cmNlT3duZXIsIG5l dmVudHMpOworCUFkZFdhaXRFdmVudFRvU2V0KG5vZGUtPm1zX2V2ZW50c2V0LCBXTF9FWElUX09O X1BNX0RFQVRILCBQR0lOVkFMSURfU09DS0VULAorCQkJCQkgIE5VTEwsIE5VTEwpOworCisJLyog R2l2ZSBlYWNoIHdhaXRpbmcgc3VicGxhbiBhIGNoYW5jZSB0byBhZGQgYW4gZXZlbnQuICovCisJ aSA9IC0xOworCXdoaWxlICgoaSA9IGJtc19uZXh0X21lbWJlcihub2RlLT5tc19hc3luY3BsYW5z LCBpKSkgPj0gMCkKKwl7CisJCUFzeW5jUmVxdWVzdCAqYXJlcSA9IG5vZGUtPm1zX2FzeW5jcmVx dWVzdHNbaV07CisKKwkJaWYgKGFyZXEtPmNhbGxiYWNrX3BlbmRpbmcpCisJCQlFeGVjQXN5bmND b25maWd1cmVXYWl0KGFyZXEpOworCX0KKworCS8qCisJICogTm8gbmVlZCBmb3IgZnVydGhlciBw cm9jZXNzaW5nIGlmIG5vbmUgb2YgdGhlIHN1YnBsYW5zIGNvbmZpZ3VyZWQgYW55CisJICogZXZl bnRzLgorCSAqLworCWlmIChHZXROdW1SZWdpc3RlcmVkV2FpdEV2ZW50cyhub2RlLT5tc19ldmVu dHNldCkgPT0gMSkKKwl7CisJCUZyZWVXYWl0RXZlbnRTZXQobm9kZS0+bXNfZXZlbnRzZXQpOwor CQlub2RlLT5tc19ldmVudHNldCA9IE5VTEw7CisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIEFk ZCB0aGUgcHJvY2VzcyBsYXRjaCB0byB0aGUgc2V0LCBzbyB0aGF0IHdlIHdha2UgdXAgdG8gcHJv Y2VzcyB0aGUKKwkgKiBzdGFuZGFyZCBpbnRlcnJ1cHRzIHdpdGggQ0hFQ0tfRk9SX0lOVEVSUlVQ VFMoKS4KKwkgKgorCSAqIE5PVEU6IEZvciBoaXN0b3JpY2FsIHJlYXNvbnMsIGl0J3MgaW1wb3J0 YW50IHRoYXQgdGhpcyBpcyBhZGRlZCB0byB0aGUKKwkgKiBXYWl0RXZlbnRTZXQgYWZ0ZXIgdGhl IEV4ZWNBc3luY0NvbmZpZ3VyZVdhaXQoKSBjYWxscy4gIE5hbWVseSwKKwkgKiBwb3N0Z3Jlc19m ZHcgY2FsbHMgIkdldE51bVJlZ2lzdGVyZWRXYWl0RXZlbnRzKHNldCkgPT0gMSIgdG8gY2hlY2sg aWYKKwkgKiBhbnkgb3RoZXIgZXZlbnRzIGFyZSBpbiB0aGUgc2V0LiAgVGhhdCdzIGEgcG9vciBk ZXNpZ24sIGl0J3MKKwkgKiBxdWVzdGlvbmFibGUgZm9yIHBvc3RncmVzX2ZkdyB0byBiZSBkb2lu ZyB0aGF0IGluIHRoZSBmaXJzdCBwbGFjZSwgYnV0CisJICogd2UgY2Fubm90IGNoYW5nZSBpdCBu b3cuICBUaGUgcGF0dGVybiBoYXMgcG9zc2libHkgYmVlbiBjb3BpZWQgdG8gb3RoZXIKKwkgKiBl eHRlbnNpb25zIHRvby4KKwkgKi8KKwlBZGRXYWl0RXZlbnRUb1NldChub2RlLT5tc19ldmVudHNl dCwgV0xfTEFUQ0hfU0VULCBQR0lOVkFMSURfU09DS0VULAorCQkJCQkgIE15TGF0Y2gsIE5VTEwp OworCisJLyogUmV0dXJuIGF0IG1vc3QgRVZFTlRfQlVGRkVSX1NJWkUgZXZlbnRzIGluIG9uZSBj YWxsLiAqLworCWlmIChuZXZlbnRzID4gRVZFTlRfQlVGRkVSX1NJWkUpCisJCW5ldmVudHMgPSBF VkVOVF9CVUZGRVJfU0laRTsKKworCS8qCisJICogV2FpdCB1bnRpbCBhdCBsZWFzdCBvbmUgZXZl bnQgb2NjdXJzLgorCSAqLworCW5vY2N1cnJlZCA9IFdhaXRFdmVudFNldFdhaXQobm9kZS0+bXNf ZXZlbnRzZXQsIC0xIC8qIG5vIHRpbWVvdXQgKi8gLCBvY2N1cnJlZF9ldmVudCwKKwkJCQkJCQkJ IG5ldmVudHMsIFdBSVRfRVZFTlRfQVBQRU5EX1JFQURZKTsKKwlGcmVlV2FpdEV2ZW50U2V0KG5v ZGUtPm1zX2V2ZW50c2V0KTsKKwlub2RlLT5tc19ldmVudHNldCA9IE5VTEw7CisJaWYgKG5vY2N1 cnJlZCA9PSAwKQorCQlyZXR1cm47CisKKwkvKiBEZWxpdmVyIG5vdGlmaWNhdGlvbnMuICovCisJ Zm9yIChpID0gMDsgaSA8IG5vY2N1cnJlZDsgaSsrKQorCXsKKwkJV2FpdEV2ZW50ICAqdyA9ICZv Y2N1cnJlZF9ldmVudFtpXTsKKworCQkvKgorCQkgKiBFYWNoIHdhaXRpbmcgc3VicGxhbiBzaG91 bGQgaGF2ZSByZWdpc3RlcmVkIGl0cyB3YWl0IGV2ZW50IHdpdGgKKwkJICogdXNlcl9kYXRhIHBv aW50aW5nIGJhY2sgdG8gaXRzIEFzeW5jUmVxdWVzdC4KKwkJICovCisJCWlmICgody0+ZXZlbnRz ICYgV0xfU09DS0VUX1JFQURBQkxFKSAhPSAwKQorCQl7CisJCQlBc3luY1JlcXVlc3QgKmFyZXEg PSAoQXN5bmNSZXF1ZXN0ICopIHctPnVzZXJfZGF0YTsKKworCQkJaWYgKGFyZXEtPmNhbGxiYWNr X3BlbmRpbmcpCisJCQl7CisJCQkJLyoKKwkJCQkgKiBNYXJrIGl0IGFzIG5vIGxvbmdlciBuZWVk aW5nIGEgY2FsbGJhY2suICBXZSBtdXN0IGRvIHRoaXMKKwkJCQkgKiBiZWZvcmUgZGlzcGF0Y2hp bmcgdGhlIGNhbGxiYWNrIGluIGNhc2UgdGhlIGNhbGxiYWNrIHJlc2V0cworCQkJCSAqIHRoZSBm bGFnLgorCQkJCSAqLworCQkJCWFyZXEtPmNhbGxiYWNrX3BlbmRpbmcgPSBmYWxzZTsKKworCQkJ CS8qIERvIHRoZSBhY3R1YWwgd29yay4gKi8KKwkJCQlFeGVjQXN5bmNOb3RpZnkoYXJlcSk7CisJ CQl9CisJCX0KKworCQkvKiBIYW5kbGUgc3RhbmRhcmQgaW50ZXJydXB0cyAqLworCQlpZiAoKHct PmV2ZW50cyAmIFdMX0xBVENIX1NFVCkgIT0gMCkKKwkJeworCQkJUmVzZXRMYXRjaChNeUxhdGNo KTsKKwkJCUNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7CisJCX0KKwl9Cit9CmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9jb3N0c2l6ZS5jIGIvc3JjL2JhY2tlbmQvb3B0aW1p emVyL3BhdGgvY29zdHNpemUuYwppbmRleCAxZjA0YTJjMTgyYy4uNGMyYzJhOTJlYzkgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2Nvc3RzaXplLmMKKysrIGIvc3JjL2Jh Y2tlbmQvb3B0aW1pemVyL3BhdGgvY29zdHNpemUuYwpAQCAtMTYzLDYgKzE2Myw3IEBAIGJvb2wJ CWVuYWJsZV9wYXJhbGxlbF9oYXNoID0gdHJ1ZTsKIGJvb2wJCWVuYWJsZV9wYXJ0aXRpb25fcHJ1 bmluZyA9IHRydWU7CiBib29sCQllbmFibGVfcHJlc29ydGVkX2FnZ3JlZ2F0ZSA9IHRydWU7CiBi b29sCQllbmFibGVfYXN5bmNfYXBwZW5kID0gdHJ1ZTsKK2Jvb2wJCWVuYWJsZV9hc3luY19tZXJn ZV9hcHBlbmQgPSB0cnVlOwogCiB0eXBlZGVmIHN0cnVjdAogewpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvb3B0aW1pemVyL3BsYW4vY3JlYXRlcGxhbi5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVy L3BsYW4vY3JlYXRlcGxhbi5jCmluZGV4IGRlYWY3NjNmZDQ0Li5iZWE1OGJkNDZmOCAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vY3JlYXRlcGxhbi5jCisrKyBiL3NyYy9i YWNrZW5kL29wdGltaXplci9wbGFuL2NyZWF0ZXBsYW4uYwpAQCAtMTQ3MSw2ICsxNDcxLDcgQEAg Y3JlYXRlX21lcmdlX2FwcGVuZF9wbGFuKFBsYW5uZXJJbmZvICpyb290LCBNZXJnZUFwcGVuZFBh dGggKmJlc3RfcGF0aCwKIAlMaXN0CSAgICpzdWJwbGFucyA9IE5JTDsKIAlMaXN0Q2VsbCAgICpz dWJwYXRoczsKIAlSZWxPcHRJbmZvICpyZWwgPSBiZXN0X3BhdGgtPnBhdGgucGFyZW50OworCWJv b2wJCWNvbnNpZGVyX2FzeW5jID0gZmFsc2U7CiAKIAkvKgogCSAqIFdlIGRvbid0IGhhdmUgdGhl IGFjdHVhbCBjcmVhdGlvbiBvZiB0aGUgTWVyZ2VBcHBlbmQgbm9kZSBzcGxpdCBvdXQKQEAgLTE0 ODUsNiArMTQ4NiwxMCBAQCBjcmVhdGVfbWVyZ2VfYXBwZW5kX3BsYW4oUGxhbm5lckluZm8gKnJv b3QsIE1lcmdlQXBwZW5kUGF0aCAqYmVzdF9wYXRoLAogCXBsYW4tPnJpZ2h0dHJlZSA9IE5VTEw7 CiAJbm9kZS0+YXBwcmVsaWRzID0gcmVsLT5yZWxpZHM7CiAKKwljb25zaWRlcl9hc3luYyA9IChl bmFibGVfYXN5bmNfbWVyZ2VfYXBwZW5kICYmCisJCQkJCSAgIWJlc3RfcGF0aC0+cGF0aC5wYXJh bGxlbF9zYWZlICYmCisJCQkJCSAgbGlzdF9sZW5ndGgoYmVzdF9wYXRoLT5zdWJwYXRocykgPiAx KTsKKwogCS8qCiAJICogQ29tcHV0ZSBzb3J0IGNvbHVtbiBpbmZvLCBhbmQgYWRqdXN0IE1lcmdl QXBwZW5kJ3MgdGxpc3QgYXMgbmVlZGVkLgogCSAqIEJlY2F1c2Ugd2UgcGFzcyBhZGp1c3RfdGxp c3RfaW5fcGxhY2UgPSB0cnVlLCB3ZSBtYXkgaWdub3JlIHRoZQpAQCAtMTU4NSw2ICsxNTkwLDEw IEBAIGNyZWF0ZV9tZXJnZV9hcHBlbmRfcGxhbihQbGFubmVySW5mbyAqcm9vdCwgTWVyZ2VBcHBl bmRQYXRoICpiZXN0X3BhdGgsCiAJCQlzdWJwbGFuID0gc29ydF9wbGFuOwogCQl9CiAKKwkJLyog SWYgbmVlZGVkLCBjaGVjayB0byBzZWUgaWYgc3VicGxhbiBjYW4gYmUgZXhlY3V0ZWQgYXN5bmNo cm9ub3VzbHkgKi8KKwkJaWYgKGNvbnNpZGVyX2FzeW5jKQorCQkJbWFya19hc3luY19jYXBhYmxl X3BsYW4oc3VicGxhbiwgc3VicGF0aCk7CisKIAkJc3VicGxhbnMgPSBsYXBwZW5kKHN1YnBsYW5z LCBzdWJwbGFuKTsKIAl9CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3Vj X3RhYmxlcy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfdGFibGVzLmMKaW5kZXggZDE0 YjE2NzhlN2YuLjAwZDk2N2MwZjI0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9taXNj L2d1Y190YWJsZXMuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y190YWJsZXMuYwpA QCAtMTAwNiw2ICsxMDA2LDE2IEBAIHN0cnVjdCBjb25maWdfYm9vbCBDb25maWd1cmVOYW1lc0Jv b2xbXSA9CiAJCXRydWUsCiAJCU5VTEwsIE5VTEwsIE5VTEwKIAl9LAorCXsKKwkJeyJlbmFibGVf YXN5bmNfbWVyZ2VfYXBwZW5kIiwgUEdDX1VTRVJTRVQsIFFVRVJZX1RVTklOR19NRVRIT0QsCisJ CQlnZXR0ZXh0X25vb3AoIkVuYWJsZXMgdGhlIHBsYW5uZXIncyB1c2Ugb2YgYXN5bmMgbWVyZ2Ug YXBwZW5kIHBsYW5zLiIpLAorCQkJTlVMTCwKKwkJCUdVQ19FWFBMQUlOCisJCX0sCisJCSZlbmFi bGVfYXN5bmNfbWVyZ2VfYXBwZW5kLAorCQl0cnVlLAorCQlOVUxMLCBOVUxMLCBOVUxMCisJfSwK IAl7CiAJCXsiZW5hYmxlX3NlbGZfam9pbl9lbGltaW5hdGlvbiIsIFBHQ19VU0VSU0VULCBRVUVS WV9UVU5JTkdfTUVUSE9ELAogCQkJZ2V0dGV4dF9ub29wKCJFbmFibGVzIHJlbW92YWwgb2YgdW5p cXVlIHNlbGYtam9pbnMuIiksCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9taXNjL3Bv c3RncmVzcWwuY29uZi5zYW1wbGUgYi9zcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwu Y29uZi5zYW1wbGUKaW5kZXggYTlkODI5MzQ3NGEuLmJmYTMzMmEwOThjIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1wbGUKKysrIGIvc3JjL2Jh Y2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlCkBAIC00MDUsNiArNDA1LDcg QEAKICMgLSBQbGFubmVyIE1ldGhvZCBDb25maWd1cmF0aW9uIC0KIAogI2VuYWJsZV9hc3luY19h cHBlbmQgPSBvbgorI2VuYWJsZV9hc3luY19tZXJnZV9hcHBlbmQgPSBvbgogI2VuYWJsZV9iaXRt YXBzY2FuID0gb24KICNlbmFibGVfZ2F0aGVybWVyZ2UgPSBvbgogI2VuYWJsZV9oYXNoYWdnID0g b24KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL25vZGVNZXJnZUFwcGVuZC5oIGIv c3JjL2luY2x1ZGUvZXhlY3V0b3Ivbm9kZU1lcmdlQXBwZW5kLmgKaW5kZXggNGViMDVkYzMwZDYu LmUzZmRiMjZlY2U2IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9leGVjdXRvci9ub2RlTWVyZ2VB cHBlbmQuaAorKysgYi9zcmMvaW5jbHVkZS9leGVjdXRvci9ub2RlTWVyZ2VBcHBlbmQuaApAQCAt MTksNSArMTksNiBAQAogZXh0ZXJuIE1lcmdlQXBwZW5kU3RhdGUgKkV4ZWNJbml0TWVyZ2VBcHBl bmQoTWVyZ2VBcHBlbmQgKm5vZGUsIEVTdGF0ZSAqZXN0YXRlLCBpbnQgZWZsYWdzKTsKIGV4dGVy biB2b2lkIEV4ZWNFbmRNZXJnZUFwcGVuZChNZXJnZUFwcGVuZFN0YXRlICpub2RlKTsKIGV4dGVy biB2b2lkIEV4ZWNSZVNjYW5NZXJnZUFwcGVuZChNZXJnZUFwcGVuZFN0YXRlICpub2RlKTsKK2V4 dGVybiB2b2lkIEV4ZWNBc3luY01lcmdlQXBwZW5kUmVzcG9uc2UoQXN5bmNSZXF1ZXN0ICphcmVx KTsKIAogI2VuZGlmCQkJCQkJCS8qIE5PREVNRVJHRUFQUEVORF9IICovCmRpZmYgLS1naXQgYS9z cmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rl cy5oCmluZGV4IGUxMDdkNmU1ZjgxLi4wOTc1NTkwMDZhZiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1 ZGUvbm9kZXMvZXhlY25vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgK QEAgLTE1NDQsMTAgKzE1NDQsNjYgQEAgdHlwZWRlZiBzdHJ1Y3QgTWVyZ2VBcHBlbmRTdGF0ZQog CVR1cGxlVGFibGVTbG90ICoqbXNfc2xvdHM7CS8qIGFycmF5IG9mIGxlbmd0aCBtc19ucGxhbnMg Ki8KIAlzdHJ1Y3QgYmluYXJ5aGVhcCAqbXNfaGVhcDsgLyogYmluYXJ5IGhlYXAgb2Ygc2xvdCBp bmRpY2VzICovCiAJYm9vbAkJbXNfaW5pdGlhbGl6ZWQ7IC8qIGFyZSBzdWJwbGFucyBzdGFydGVk PyAqLworCUJpdG1hcHNldCAgKm1zX2FzeW5jcGxhbnM7CS8qIGFzeW5jaHJvbm91cyBwbGFucyBp bmRleGVzICovCisJaW50CQkJbXNfbmFzeW5jcGxhbnM7IC8qICMgb2YgYXN5bmNocm9ub3VzIHBs YW5zICovCisJQXN5bmNSZXF1ZXN0ICoqbXNfYXN5bmNyZXF1ZXN0czsJLyogYXJyYXkgb2YgQXN5 bmNSZXF1ZXN0cyAqLworCVR1cGxlVGFibGVTbG90ICoqbXNfYXN5bmNyZXN1bHRzOwkvKiB1bnJl dHVybmVkIHJlc3VsdHMgb2YgYXN5bmMgcGxhbnMgKi8KKwlCaXRtYXBzZXQgICAqbXNfaGFzX2Fz eW5jcmVzdWx0czsJLyogcGxhbnMgd2hpY2ggaGF2ZSBhc3luYyByZXN1bHRzICovCisJQml0bWFw c2V0ICAqbXNfYXN5bmNyZW1haW47IC8qIHJlbWFpbmluZyBhc3luY2hyb25vdXMgcGxhbnMgKi8K KwlCaXRtYXBzZXQgICptc19uZWVkcmVxdWVzdDsgLyogYXN5bmNocm9ub3VzIHBsYW5zIG5lZWRp bmcgYSBuZXcgcmVxdWVzdCAqLworCXN0cnVjdCBXYWl0RXZlbnRTZXQgKm1zX2V2ZW50c2V0Owkv KiBXYWl0RXZlbnRTZXQgdXNlZCB0byBjb25maWd1cmUgZmlsZQorCQkJCQkJCQkJCSAqIGRlc2Ny aXB0b3Igd2FpdCBldmVudHMgKi8KIAlzdHJ1Y3QgUGFydGl0aW9uUHJ1bmVTdGF0ZSAqbXNfcHJ1 bmVfc3RhdGU7CisJYm9vbAkJbXNfdmFsaWRfc3VicGxhbnNfaWRlbnRpZmllZDsgICAvKiBpcyBt c192YWxpZF9zdWJwbGFucyB2YWxpZD8gKi8KIAlCaXRtYXBzZXQgICptc192YWxpZF9zdWJwbGFu czsKKwlCaXRtYXBzZXQgICptc192YWxpZF9hc3luY3BsYW5zOwkvKiB2YWxpZCBhc3luY2hyb25v dXMgcGxhbnMgaW5kZXhlcyAqLwogfSBNZXJnZUFwcGVuZFN0YXRlOwogCisvKiBHZXR0ZXJzIGZv ciBBcHBlbmRTdGF0ZSBhbmQgTWVyZ2VBcHBlbmRTdGF0ZSAqLworc3RhdGljIGlubGluZSBzdHJ1 Y3QgV2FpdEV2ZW50U2V0ICoKK0dldEFwcGVuZEV2ZW50U2V0KFBsYW5TdGF0ZSAqcHMpCit7CisJ QXNzZXJ0IChJc0EocHMsIEFwcGVuZFN0YXRlKSB8fCBJc0EocHMsIE1lcmdlQXBwZW5kU3RhdGUp KTsKKworCWlmIChJc0EocHMsIEFwcGVuZFN0YXRlKSkKKwkJcmV0dXJuICgoQXBwZW5kU3RhdGUg KilwcyktPmFzX2V2ZW50c2V0OworCWVsc2UKKwkJcmV0dXJuICgoTWVyZ2VBcHBlbmRTdGF0ZSAq KXBzKS0+bXNfZXZlbnRzZXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgQml0bWFwc2V0ICoKK0dldE5l ZWRSZXF1ZXN0KFBsYW5TdGF0ZSAqcHMpCit7CisJQXNzZXJ0IChJc0EocHMsIEFwcGVuZFN0YXRl KSB8fCBJc0EocHMsIE1lcmdlQXBwZW5kU3RhdGUpKTsKKworCWlmIChJc0EocHMsIEFwcGVuZFN0 YXRlKSkKKwkJcmV0dXJuICgoQXBwZW5kU3RhdGUgKilwcyktPmFzX25lZWRyZXF1ZXN0OworCWVs c2UKKwkJcmV0dXJuICgoTWVyZ2VBcHBlbmRTdGF0ZSAqKXBzKS0+bXNfbmVlZHJlcXVlc3Q7Cit9 CisKK3N0YXRpYyBpbmxpbmUgQml0bWFwc2V0ICoKK0dldFZhbGlkQXN5bmNwbGFucyhQbGFuU3Rh dGUgKnBzKQoreworCUFzc2VydCAoSXNBKHBzLCBBcHBlbmRTdGF0ZSkgfHwgSXNBKHBzLCBNZXJn ZUFwcGVuZFN0YXRlKSk7CisKKwlpZiAoSXNBKHBzLCBBcHBlbmRTdGF0ZSkpCisJCXJldHVybiAo KEFwcGVuZFN0YXRlICopcHMpLT5hc192YWxpZF9hc3luY3BsYW5zOworCWVsc2UKKwkJcmV0dXJu ICgoTWVyZ2VBcHBlbmRTdGF0ZSAqKXBzKS0+bXNfdmFsaWRfYXN5bmNwbGFuczsKK30KKworc3Rh dGljIGlubGluZSBBc3luY1JlcXVlc3QqCitHZXRWYWxpZEFzeW5jUmVxdWVzdChQbGFuU3RhdGUg KnBzLCBpbnQgbnJlcSkKK3sKKwlBc3NlcnQgKElzQShwcywgQXBwZW5kU3RhdGUpIHx8IElzQShw cywgTWVyZ2VBcHBlbmRTdGF0ZSkpOworCisJaWYgKElzQShwcywgQXBwZW5kU3RhdGUpKQorCQly ZXR1cm4gKChBcHBlbmRTdGF0ZSAqKXBzKS0+YXNfYXN5bmNyZXF1ZXN0c1tucmVxXTsKKwllbHNl CisJCXJldHVybiAoKE1lcmdlQXBwZW5kU3RhdGUgKilwcyktPm1zX2FzeW5jcmVxdWVzdHNbbnJl cV07Cit9CisKIC8qIC0tLS0tLS0tLS0tLS0tLS0KICAqCSBSZWN1cnNpdmVVbmlvblN0YXRlIGlu Zm9ybWF0aW9uCiAgKgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvb3B0aW1pemVyL2Nvc3QuaCBi L3NyYy9pbmNsdWRlL29wdGltaXplci9jb3N0LmgKaW5kZXggYjUyM2JjZGE4ZjMuLmZlZTQ5MWI3 N2FkIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvY29zdC5oCisrKyBiL3NyYy9p bmNsdWRlL29wdGltaXplci9jb3N0LmgKQEAgLTcwLDYgKzcwLDcgQEAgZXh0ZXJuIFBHRExMSU1Q T1JUIGJvb2wgZW5hYmxlX3BhcmFsbGVsX2hhc2g7CiBleHRlcm4gUEdETExJTVBPUlQgYm9vbCBl bmFibGVfcGFydGl0aW9uX3BydW5pbmc7CiBleHRlcm4gUEdETExJTVBPUlQgYm9vbCBlbmFibGVf cHJlc29ydGVkX2FnZ3JlZ2F0ZTsKIGV4dGVybiBQR0RMTElNUE9SVCBib29sIGVuYWJsZV9hc3lu Y19hcHBlbmQ7CitleHRlcm4gUEdETExJTVBPUlQgYm9vbCBlbmFibGVfYXN5bmNfbWVyZ2VfYXBw ZW5kOwogZXh0ZXJuIFBHRExMSU1QT1JUIGludCBjb25zdHJhaW50X2V4Y2x1c2lvbjsKIAogZXh0 ZXJuIGRvdWJsZSBpbmRleF9wYWdlc19mZXRjaGVkKGRvdWJsZSB0dXBsZXNfZmV0Y2hlZCwgQmxv Y2tOdW1iZXIgcGFnZXMsCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N5 c3ZpZXdzLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3lzdmlld3Mub3V0CmluZGV4 IDgzMjI4Y2ZjYTI5Li4yYTU1ZWZkNjYwNSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9l eHBlY3RlZC9zeXN2aWV3cy5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zeXN2 aWV3cy5vdXQKQEAgLTE0OSw2ICsxNDksNyBAQCBzZWxlY3QgbmFtZSwgc2V0dGluZyBmcm9tIHBn X3NldHRpbmdzIHdoZXJlIG5hbWUgbGlrZSAnZW5hYmxlJSc7CiAgICAgICAgICAgICAgIG5hbWUg ICAgICAgICAgICAgIHwgc2V0dGluZyAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLQogIGVuYWJsZV9hc3luY19hcHBlbmQgICAgICAgICAgICB8IG9uCisgZW5hYmxl X2FzeW5jX21lcmdlX2FwcGVuZCAgICAgIHwgb24KICBlbmFibGVfYml0bWFwc2NhbiAgICAgICAg ICAgICAgfCBvbgogIGVuYWJsZV9kaXN0aW5jdF9yZW9yZGVyaW5nICAgICB8IG9uCiAgZW5hYmxl X2dhdGhlcm1lcmdlICAgICAgICAgICAgIHwgb24KQEAgLTE3Miw3ICsxNzMsNyBAQCBzZWxlY3Qg bmFtZSwgc2V0dGluZyBmcm9tIHBnX3NldHRpbmdzIHdoZXJlIG5hbWUgbGlrZSAnZW5hYmxlJSc7 CiAgZW5hYmxlX3NlcXNjYW4gICAgICAgICAgICAgICAgIHwgb24KICBlbmFibGVfc29ydCAgICAg ICAgICAgICAgICAgICAgfCBvbgogIGVuYWJsZV90aWRzY2FuICAgICAgICAgICAgICAgICB8IG9u Ci0oMjQgcm93cykKKygyNSByb3dzKQogCiAtLSBUaGVyZSBhcmUgYWx3YXlzIHdhaXQgZXZlbnQg ZGVzY3JpcHRpb25zIGZvciB2YXJpb3VzIHR5cGVzLiAgSW5qZWN0aW9uUG9pbnQKIC0tIG1heSBi ZSBwcmVzZW50IG9yIGFic2VudCwgZGVwZW5kaW5nIG9uIGhpc3Rvcnkgc2luY2UgbGFzdCBwb3N0 bWFzdGVyIHN0YXJ0LgotLSAKMi40My4wCgo= --=_fc2a8b8a18b772a2e5335d57ae373058 Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=0001-mark_async_capable-subpath-should-match-subplan.patch Content-Disposition: attachment; filename=0001-mark_async_capable-subpath-should-match-subplan.patch; size=1962 RnJvbSAzNTBjZjYxMDY3MjYxNjAxNDQ0YzgxM2VkODliNDdhZGYwY2M2NWU1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbGV4YW5kZXIgUHloYWxvdiA8YS5weWhhbG92QHBvc3RncmVz cHJvLnJ1PgpEYXRlOiBGcmksIDIxIEp1bCAyMDIzIDEyOjA1OjA3ICswMzAwClN1YmplY3Q6IFtQ QVRDSCAxLzJdIG1hcmtfYXN5bmNfY2FwYWJsZSgpOiBzdWJwYXRoIHNob3VsZCBtYXRjaCBzdWJw bGFuCgotLS0KIHNyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL2NyZWF0ZXBsYW4uYyB8IDE2ICsr KysrKysrLS0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCA4IGluc2VydGlvbnMoKyksIDggZGVsZXRp b25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vY3JlYXRlcGxh bi5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vY3JlYXRlcGxhbi5jCmluZGV4IDhhOWYx ZDdhOTQzLi5kZWFmNzYzZmQ0NCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3Bs YW4vY3JlYXRlcGxhbi5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL2NyZWF0ZXBs YW4uYwpAQCAtMTE0NiwxMCArMTE0NiwxMCBAQCBtYXJrX2FzeW5jX2NhcGFibGVfcGxhbihQbGFu ICpwbGFuLCBQYXRoICpwYXRoKQogCQkJCVN1YnF1ZXJ5U2NhbiAqc2Nhbl9wbGFuID0gKFN1YnF1 ZXJ5U2NhbiAqKSBwbGFuOwogCiAJCQkJLyoKLQkJCQkgKiBJZiB0aGUgZ2VuZXJhdGVkIHBsYW4g bm9kZSBpbmNsdWRlcyBhIGdhdGluZyBSZXN1bHQgbm9kZSwKLQkJCQkgKiB3ZSBjYW4ndCBleGVj dXRlIGl0IGFzeW5jaHJvbm91c2x5LgorCQkJCSAqIElmIHRoZSBnZW5lcmF0ZWQgcGxhbiBub2Rl IGluY2x1ZGVzIGEgZ2F0aW5nIFJlc3VsdCBub2RlIG9yCisJCQkJICogYSBTb3J0IG5vZGUsIHdl IGNhbid0IGV4ZWN1dGUgaXQgYXN5bmNocm9ub3VzbHkuCiAJCQkJICovCi0JCQkJaWYgKElzQShw bGFuLCBSZXN1bHQpKQorCQkJCWlmIChJc0EocGxhbiwgUmVzdWx0KSB8fCBJc0EocGxhbiwgU29y dCkpCiAJCQkJCXJldHVybiBmYWxzZTsKIAogCQkJCS8qCkBAIC0xMTY3LDEwICsxMTY3LDEwIEBA IG1hcmtfYXN5bmNfY2FwYWJsZV9wbGFuKFBsYW4gKnBsYW4sIFBhdGggKnBhdGgpCiAJCQkJRmR3 Um91dGluZSAqZmR3cm91dGluZSA9IHBhdGgtPnBhcmVudC0+ZmR3cm91dGluZTsKIAogCQkJCS8q Ci0JCQkJICogSWYgdGhlIGdlbmVyYXRlZCBwbGFuIG5vZGUgaW5jbHVkZXMgYSBnYXRpbmcgUmVz dWx0IG5vZGUsCi0JCQkJICogd2UgY2FuJ3QgZXhlY3V0ZSBpdCBhc3luY2hyb25vdXNseS4KKwkJ CQkgKiBJZiB0aGUgZ2VuZXJhdGVkIHBsYW4gbm9kZSBpbmNsdWRlcyBhIGdhdGluZyBSZXN1bHQg bm9kZSBvcgorCQkJCSAqIGEgU29ydCBub2RlLCB3ZSBjYW4ndCBleGVjdXRlIGl0IGFzeW5jaHJv bm91c2x5LgogCQkJCSAqLwotCQkJCWlmIChJc0EocGxhbiwgUmVzdWx0KSkKKwkJCQlpZiAoSXNB KHBsYW4sIFJlc3VsdCkgfHwgSXNBKHBsYW4sIFNvcnQpKQogCQkJCQlyZXR1cm4gZmFsc2U7CiAK IAkJCQlBc3NlcnQoZmR3cm91dGluZSAhPSBOVUxMKTsKQEAgLTExODMsOSArMTE4Myw5IEBAIG1h cmtfYXN5bmNfY2FwYWJsZV9wbGFuKFBsYW4gKnBsYW4sIFBhdGggKnBhdGgpCiAKIAkJCS8qCiAJ CQkgKiBJZiB0aGUgZ2VuZXJhdGVkIHBsYW4gbm9kZSBpbmNsdWRlcyBhIFJlc3VsdCBub2RlIGZv ciB0aGUKLQkJCSAqIHByb2plY3Rpb24sIHdlIGNhbid0IGV4ZWN1dGUgaXQgYXN5bmNocm9ub3Vz bHkuCisJCQkgKiBwcm9qZWN0aW9uIG9yIGEgU29ydCBub2RlLCB3ZSBjYW4ndCBleGVjdXRlIGl0 IGFzeW5jaHJvbm91c2x5LgogCQkJICovCi0JCQlpZiAoSXNBKHBsYW4sIFJlc3VsdCkpCisJCQlp ZiAoSXNBKHBsYW4sIFJlc3VsdCkgfHwgSXNBKHBsYW4sIFNvcnQpKQogCQkJCXJldHVybiBmYWxz ZTsKIAogCQkJLyoKLS0gCjIuNDMuMAoK --=_fc2a8b8a18b772a2e5335d57ae373058--