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 1qv8yr-003SWj-9Z for pgsql-bugs@arkaria.postgresql.org; Tue, 24 Oct 2023 04:25:26 +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 1qv8yp-002pSw-7h for pgsql-bugs@arkaria.postgresql.org; Tue, 24 Oct 2023 04:25:23 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1qv8yo-002pSn-OV for pgsql-bugs@lists.postgresql.org; Tue, 24 Oct 2023 04:25:23 +0000 Received: from mail.postgrespro.ru ([93.174.131.139]) by magus.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1qv8yl-002OfZ-9L for pgsql-bugs@lists.postgresql.org; Tue, 24 Oct 2023 04:25:22 +0000 Received: from [10.10.20.101] (node-1ir.pool-118-173.dynamic.totinternet.net [118.173.7.179]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client did not present a certificate) (Authenticated sender: a.lepikhov@postgrespro.ru) by mail.postgrespro.ru (Postfix/587) with ESMTPSA id 2E315E20E62; Tue, 24 Oct 2023 07:25:15 +0300 (MSK) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=postgrespro.ru; s=mx2023; t=1698121517; bh=XKjMqc/5351DhxuKabH6Xm3qrPHyMc8u35jXo5BZNGY=; h=Message-ID:Date:User-Agent:Subject:To:Cc:References:From: In-Reply-To:From; b=btBH2MmivvaWyUB6oA9B3XEpbhkJn2awf/5ax8DCrWmQ9d9Q0jMgV5pNei5AoQt5s oWvRyF2RTCTvMTBTl2Xlo7Ma6ZHGPvgLEw3sGaDkzQ3XFO1naCnzPjMABssIrt3LuG MzDjHGyJCEwcATppNBC21ywdmgM7Ps5XBiWwkQ+grTIREytG8TYdcC2vcDb5GCjrab 2dPxYCbtvjZRCnqvG4vx7E+MzU4EMwPuyVLfxlOvlFMJt4AlGUBuCn1vub+v5a1d9Y FQiwkTtYi/kRtpW2iI/xvoPSU88H6ElvMM1XKvokXseubHyW/w/2g2BqRo5J/Q772c ZrLeV1QQ4l3rQ== Content-Type: multipart/mixed; boundary="------------xKL8GS9JhNEbKYlXa3YBFs09" Message-ID: <74a806ed-3b6c-4c45-a67a-27b5f3496ae5@postgrespro.ru> Date: Tue, 24 Oct 2023 11:25:12 +0700 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: BUG #17540: Prepared statement: PG switches to a generic query plan which is consistently much slower Content-Language: en-US To: Richard Guo , David Rowley Cc: Tom Lane , william.duclot@gmail.com, PostgreSQL mailing lists References: <17540-7aa1855ad5ec18b4@postgresql.org> <2732256.1657163219@sss.pgh.pa.us> <2740652.1657165848@sss.pgh.pa.us> From: Andrei Lepikhov Organization: Postgres Professional In-Reply-To: List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------xKL8GS9JhNEbKYlXa3YBFs09 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit On 8/10/2023 15:26, Richard Guo wrote: Hi, > On Thu, Sep 28, 2023 at 11:51 AM David Rowley > wrote: > > On Thu, 28 Sept 2023 at 16:22, Richard Guo > wrote: > > It seems that optimizing IS NULL quals is more complex than > optimizing > > IS NOT NULL quals.  I also wonder if it's worth the trouble to > optimize > > IS NULL quals. > > I'm happy to reduce the scope of this patch. As for what to cut, I > think if we're doing a subset then we should try to do that subset in > a way that best leaves things open for phase 2 at some later date. > > > I had a go at supporting IS NULL quals and ended up with the attached. > The patch generates a new constant-FALSE RestrictInfo that is marked > with the same required_relids etc as the original one if it is an IS > NULL qual that can be reduced to FALSE.  Note that the original > rinfo_serial is also copied to the new RestrictInfo. > > One thing that is not great is that we may have 'FALSE and otherquals' > in the final plan, as shown by the plan below which is from the new > added test case. Setting aside the thread's subject, I am interested in this feature because of its connection with the SJE feature and the same issue raised [1] during the discussion. In the attachment - rebased version of your patch (because of the 5d8aa8bced). Although the patch is already in a good state, some improvements can be made. Look: explain (costs off) SELECT oid,relname FROM pg_class WHERE oid < 5 OR (oid = 1 AND oid IS NULL); Bitmap Heap Scan on pg_class Recheck Cond: ((oid < '5'::oid) OR ((oid = '1'::oid) AND (oid IS NULL))) -> BitmapOr -> Bitmap Index Scan on pg_class_oid_index Index Cond: (oid < '5'::oid) -> Bitmap Index Scan on pg_class_oid_index Index Cond: ((oid = '1'::oid) AND (oid IS NULL)) If we go deeply through the filter, I guess we could replace such buried clauses. [1] Removing unneeded self joins https://www.postgresql.org/message-id/CAPpHfdt-0kVV7O%3D%3DaJEbjY2iGYBu%2BXBzTHEbPv_6sVNeC7fffQ%40mail.gmail.com -- regards, Andrei Lepikhov Postgres Professional --------------xKL8GS9JhNEbKYlXa3YBFs09 Content-Type: text/plain; charset=UTF-8; name="v6-0001-Reduce-NullTest-quals-to-constant-TRUE-or-FALSE.patch" Content-Disposition: attachment; filename*0="v6-0001-Reduce-NullTest-quals-to-constant-TRUE-or-FALSE.patc"; filename*1="h" Content-Transfer-Encoding: base64 RnJvbSAwYTA4Y2NiZjM3NmMxMDAzYzQ1YmE4YTU1NWEzOWFlOWMyZjljMjA3IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBSaWNoYXJkIEd1byA8Z3VvZmVuZ2xpbnV4QGdtYWls LmNvbT4KRGF0ZTogU2F0LCA3IE9jdCAyMDIzIDE3OjA0OjA3ICswODAwClN1YmplY3Q6IFtQ QVRDSF0gUmVkdWNlIE51bGxUZXN0IHF1YWxzIHRvIGNvbnN0YW50IFRSVUUgb3IgRkFMU0UK Ci0tLQogLi4uL3Bvc3RncmVzX2Zkdy9leHBlY3RlZC9wb3N0Z3Jlc19mZHcub3V0ICAgIHwg IDE2ICstCiBjb250cmliL3Bvc3RncmVzX2Zkdy9zcWwvcG9zdGdyZXNfZmR3LnNxbCAgICAg fCAgIDQgKy0KIHNyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL2luaXRzcGxhbi5jICAgICAg ICB8IDI0MyArKysrKysrKysrKysrKy0tLS0KIHNyYy9iYWNrZW5kL29wdGltaXplci91dGls L2pvaW5pbmZvLmMgICAgICAgICB8ICAyNSArKwogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0 aWwvcGxhbmNhdC5jICAgICAgICAgIHwgICA5ICsKIHNyYy9iYWNrZW5kL29wdGltaXplci91 dGlsL3JlbG5vZGUuYyAgICAgICAgICB8ICAgMiArCiBzcmMvaW5jbHVkZS9ub2Rlcy9wYXRo bm9kZXMuaCAgICAgICAgICAgICAgICAgfCAgIDIgKwogc3JjL2luY2x1ZGUvb3B0aW1pemVy L3BsYW5tYWluLmggICAgICAgICAgICAgIHwgICA0ICsKIHNyYy90ZXN0L3JlZ3Jlc3MvZXhw ZWN0ZWQvcHJlZGljYXRlLm91dCAgICAgICB8IDIwNCArKysrKysrKysrKysrKysKIHNyYy90 ZXN0L3JlZ3Jlc3MvcGFyYWxsZWxfc2NoZWR1bGUgICAgICAgICAgICB8ICAgMiArLQogc3Jj L3Rlc3QvcmVncmVzcy9zcWwvcHJlZGljYXRlLnNxbCAgICAgICAgICAgIHwgIDgwICsrKysr KwogMTEgZmlsZXMgY2hhbmdlZCwgNTMzIGluc2VydGlvbnMoKyksIDU4IGRlbGV0aW9ucygt KQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHJlZGlj YXRlLm91dAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3ByZWRp Y2F0ZS5zcWwKCmRpZmYgLS1naXQgYS9jb250cmliL3Bvc3RncmVzX2Zkdy9leHBlY3RlZC9w b3N0Z3Jlc19mZHcub3V0IGIvY29udHJpYi9wb3N0Z3Jlc19mZHcvZXhwZWN0ZWQvcG9zdGdy ZXNfZmR3Lm91dAppbmRleCAxNDRjMTE0ZDBmLi40ZDdjNWI5MTQwIDEwMDY0NAotLS0gYS9j b250cmliL3Bvc3RncmVzX2Zkdy9leHBlY3RlZC9wb3N0Z3Jlc19mZHcub3V0CisrKyBiL2Nv bnRyaWIvcG9zdGdyZXNfZmR3L2V4cGVjdGVkL3Bvc3RncmVzX2Zkdy5vdXQKQEAgLTY1Niwy MCArNjU2LDIwIEBAIEVYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikgU0VMRUNUICogRlJP TSBmdDEgdDEgV0hFUkUgdDEuYzEgPSAxMDAgQU5EIHQxLmMyID0KICAgIFJlbW90ZSBTUUw6 IFNFTEVDVCAiQyAxIiwgYzIsIGMzLCBjNCwgYzUsIGM2LCBjNywgYzggRlJPTSAiUyAxIi4i VCAxIiBXSEVSRSAoKCJDIDEiID0gMTAwKSkgQU5EICgoYzIgPSAwKSkKICgzIHJvd3MpCiAK LUVYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikgU0VMRUNUICogRlJPTSBmdDEgdDEgV0hF UkUgYzEgSVMgTlVMTDsgICAgICAgIC0tIE51bGxUZXN0Ci0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCitFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpIFNFTEVDVCAq IEZST00gZnQxIHQxIFdIRVJFIGMzIElTIE5VTEw7ICAgICAgICAtLSBOdWxsVGVzdAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIEZvcmVpZ24gU2NhbiBvbiBwdWJsaWMuZnQx IHQxCiAgICBPdXRwdXQ6IGMxLCBjMiwgYzMsIGM0LCBjNSwgYzYsIGM3LCBjOAotICAgUmVt b3RlIFNRTDogU0VMRUNUICJDIDEiLCBjMiwgYzMsIGM0LCBjNSwgYzYsIGM3LCBjOCBGUk9N ICJTIDEiLiJUIDEiIFdIRVJFICgoIkMgMSIgSVMgTlVMTCkpCisgICBSZW1vdGUgU1FMOiBT RUxFQ1QgIkMgMSIsIGMyLCBjMywgYzQsIGM1LCBjNiwgYzcsIGM4IEZST00gIlMgMSIuIlQg MSIgV0hFUkUgKChjMyBJUyBOVUxMKSkKICgzIHJvd3MpCiAKLUVYUExBSU4gKFZFUkJPU0Us IENPU1RTIE9GRikgU0VMRUNUICogRlJPTSBmdDEgdDEgV0hFUkUgYzEgSVMgTk9UIE5VTEw7 ICAgIC0tIE51bGxUZXN0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KK0VYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikgU0VMRUNUICogRlJPTSBmdDEg dDEgV0hFUkUgYzMgSVMgTk9UIE5VTEw7ICAgIC0tIE51bGxUZXN0CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICBGb3JlaWduIFNjYW4gb24gcHVibGljLmZ0MSB0 MQogICAgT3V0cHV0OiBjMSwgYzIsIGMzLCBjNCwgYzUsIGM2LCBjNywgYzgKLSAgIFJlbW90 ZSBTUUw6IFNFTEVDVCAiQyAxIiwgYzIsIGMzLCBjNCwgYzUsIGM2LCBjNywgYzggRlJPTSAi UyAxIi4iVCAxIiBXSEVSRSAoKCJDIDEiIElTIE5PVCBOVUxMKSkKKyAgIFJlbW90ZSBTUUw6 IFNFTEVDVCAiQyAxIiwgYzIsIGMzLCBjNCwgYzUsIGM2LCBjNywgYzggRlJPTSAiUyAxIi4i VCAxIiBXSEVSRSAoKGMzIElTIE5PVCBOVUxMKSkKICgzIHJvd3MpCiAKIEVYUExBSU4gKFZF UkJPU0UsIENPU1RTIE9GRikgU0VMRUNUICogRlJPTSBmdDEgdDEgV0hFUkUgcm91bmQoYWJz KGMxKSwgMCkgPSAxOyAtLSBGdW5jRXhwcgpkaWZmIC0tZ2l0IGEvY29udHJpYi9wb3N0Z3Jl c19mZHcvc3FsL3Bvc3RncmVzX2Zkdy5zcWwgYi9jb250cmliL3Bvc3RncmVzX2Zkdy9zcWwv cG9zdGdyZXNfZmR3LnNxbAppbmRleCBhMzAzYmZiMzIyLi44NTQyYTllOWRlIDEwMDY0NAot LS0gYS9jb250cmliL3Bvc3RncmVzX2Zkdy9zcWwvcG9zdGdyZXNfZmR3LnNxbAorKysgYi9j b250cmliL3Bvc3RncmVzX2Zkdy9zcWwvcG9zdGdyZXNfZmR3LnNxbApAQCAtMzMyLDggKzMz Miw4IEBAIEVYUExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikgU0VMRUNUICogRlJPTSBmdF9l bXB0eSBPUkRFUiBCWSBjMTsKIC0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIEVYUExBSU4gKFZFUkJPU0Us IENPU1RTIE9GRikgU0VMRUNUICogRlJPTSBmdDEgdDEgV0hFUkUgdDEuYzEgPSAxOyAgICAg ICAgIC0tIFZhciwgT3BFeHByKGIpLCBDb25zdAogRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMg T0ZGKSBTRUxFQ1QgKiBGUk9NIGZ0MSB0MSBXSEVSRSB0MS5jMSA9IDEwMCBBTkQgdDEuYzIg PSAwOyAtLSBCb29sRXhwcgotRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKSBTRUxFQ1Qg KiBGUk9NIGZ0MSB0MSBXSEVSRSBjMSBJUyBOVUxMOyAgICAgICAgLS0gTnVsbFRlc3QKLUVY UExBSU4gKFZFUkJPU0UsIENPU1RTIE9GRikgU0VMRUNUICogRlJPTSBmdDEgdDEgV0hFUkUg YzEgSVMgTk9UIE5VTEw7ICAgIC0tIE51bGxUZXN0CitFWFBMQUlOIChWRVJCT1NFLCBDT1NU UyBPRkYpIFNFTEVDVCAqIEZST00gZnQxIHQxIFdIRVJFIGMzIElTIE5VTEw7ICAgICAgICAt LSBOdWxsVGVzdAorRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKSBTRUxFQ1QgKiBGUk9N IGZ0MSB0MSBXSEVSRSBjMyBJUyBOT1QgTlVMTDsgICAgLS0gTnVsbFRlc3QKIEVYUExBSU4g KFZFUkJPU0UsIENPU1RTIE9GRikgU0VMRUNUICogRlJPTSBmdDEgdDEgV0hFUkUgcm91bmQo YWJzKGMxKSwgMCkgPSAxOyAtLSBGdW5jRXhwcgogRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMg T0ZGKSBTRUxFQ1QgKiBGUk9NIGZ0MSB0MSBXSEVSRSBjMSA9IC1jMTsgICAgICAgICAgLS0g T3BFeHByKGwpCiBFWFBMQUlOIChWRVJCT1NFLCBDT1NUUyBPRkYpIFNFTEVDVCAqIEZST00g ZnQxIHQxIFdIRVJFIChjMSBJUyBOT1QgTlVMTCkgSVMgRElTVElOQ1QgRlJPTSAoYzEgSVMg Tk9UIE5VTEwpOyAtLSBEaXN0aW5jdEV4cHIKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29w dGltaXplci9wbGFuL2luaXRzcGxhbi5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4v aW5pdHNwbGFuLmMKaW5kZXggYjMxZDg5MjEyMS4uMDZlNzNmNDE2OSAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vaW5pdHNwbGFuLmMKKysrIGIvc3JjL2JhY2tl bmQvb3B0aW1pemVyL3BsYW4vaW5pdHNwbGFuLmMKQEAgLTI2MTgsNiArMjYxOCwxNzQgQEAg Y2hlY2tfcmVkdW5kYW50X251bGxhYmlsaXR5X3F1YWwoUGxhbm5lckluZm8gKnJvb3QsIE5v ZGUgKmNsYXVzZSkKIAlyZXR1cm4gZmFsc2U7CiB9CiAKKy8qCisgKiBhZGRfYmFzZXJlc3Ry aWN0aW5mb190b19yZWwKKyAqCQlBZGQgJ3Jlc3RyaWN0aW5mbycgYXMgYSBiYXNlcmVzdHJp Y3RpbmZvIHRvIHRoZSBiYXNlIHJlbGF0aW9uIGRlbm90ZWQKKyAqCQlieSAncmVsaWQnIHdp dGggc29tZSBwcmVjaGVja3MgdG8gdHJ5IHRvIGRldGVybWluZSBpZiB0aGUgcXVhbCBpcwor ICoJCWFsd2F5cyB0cnVlLCBpbiB3aGljaCBjYXNlIHdlIGlnbm9yZSBpdCByYXRoZXIgdGhh biBhZGQgaXQsIG9yIGlmIHRoZQorICoJCXF1YWwgaXMgYWx3YXlzIGZhbHNlLCBpbiB3aGlj aCBjYXNlIHdlIHJlcGxhY2UgaXQgd2l0aCBjb25zdGFudC1GQUxTRS4KKyAqLworc3RhdGlj IHZvaWQKK2FkZF9iYXNlcmVzdHJpY3RpbmZvX3RvX3JlbChQbGFubmVySW5mbyAqcm9vdCwg SW5kZXggcmVsaWQsCisJCQkJCQkJUmVzdHJpY3RJbmZvICpyZXN0cmljdGluZm8pCit7CisJ UmVsT3B0SW5mbyAqcmVsID0gZmluZF9iYXNlX3JlbChyb290LCByZWxpZCk7CisKKwlBc3Nl cnQoYm1zX21lbWJlcnNoaXAocmVzdHJpY3RpbmZvLT5yZXF1aXJlZF9yZWxpZHMpID09IEJN U19TSU5HTEVUT04pOworCisJLyogRG9uJ3QgYWRkIHRoZSBjbGF1c2UgaWYgaXQgaXMgYWx3 YXlzIHRydWUgKi8KKwlpZiAocmVzdHJpY3Rpb25faXNfYWx3YXlzX3RydWUocm9vdCwgcmVz dHJpY3RpbmZvKSkKKwkJcmV0dXJuOworCisJLyogU3Vic3RpdHV0ZSBjb25zdGFudC1GQUxT RSBmb3IgdGhlIG9yaWdpbiBxdWFsIGlmIGl0IGlzIGFsd2F5cyBmYWxzZSAqLworCWlmIChy ZXN0cmljdGlvbl9pc19hbHdheXNfZmFsc2Uocm9vdCwgcmVzdHJpY3RpbmZvKSkKKwl7CisJ CWludAkJc2F2ZV9yaW5mb19zZXJpYWwgPSByZXN0cmljdGluZm8tPnJpbmZvX3NlcmlhbDsK KworCQlyZXN0cmljdGluZm8gPSBtYWtlX3Jlc3RyaWN0aW5mbyhyb290LAorCQkJCQkJCQkJ CSAoRXhwciAqKSBtYWtlQm9vbENvbnN0KGZhbHNlLCBmYWxzZSksCisJCQkJCQkJCQkJIHJl c3RyaWN0aW5mby0+aXNfcHVzaGVkX2Rvd24sCisJCQkJCQkJCQkJIHJlc3RyaWN0aW5mby0+ aGFzX2Nsb25lLAorCQkJCQkJCQkJCSByZXN0cmljdGluZm8tPmlzX2Nsb25lLAorCQkJCQkJ CQkJCSBmYWxzZSwJLyogcHNldWRvY29uc3RhbnQgKi8KKwkJCQkJCQkJCQkgMCwJLyogc2Vj dXJpdHlfbGV2ZWwgKi8KKwkJCQkJCQkJCQkgcmVzdHJpY3RpbmZvLT5yZXF1aXJlZF9yZWxp ZHMsCisJCQkJCQkJCQkJIHJlc3RyaWN0aW5mby0+aW5jb21wYXRpYmxlX3JlbGlkcywKKwkJ CQkJCQkJCQkgcmVzdHJpY3RpbmZvLT5vdXRlcl9yZWxpZHMpOworCQlyZXN0cmljdGluZm8t PnJpbmZvX3NlcmlhbCA9IHNhdmVfcmluZm9fc2VyaWFsOworCX0KKworCS8qIEFkZCBjbGF1 c2UgdG8gcmVsJ3MgcmVzdHJpY3Rpb24gbGlzdCAqLworCXJlbC0+YmFzZXJlc3RyaWN0aW5m byA9IGxhcHBlbmQocmVsLT5iYXNlcmVzdHJpY3RpbmZvLCByZXN0cmljdGluZm8pOworCisJ LyogVXBkYXRlIHNlY3VyaXR5IGxldmVsIGluZm8gKi8KKwlyZWwtPmJhc2VyZXN0cmljdF9t aW5fc2VjdXJpdHkgPSBNaW4ocmVsLT5iYXNlcmVzdHJpY3RfbWluX3NlY3VyaXR5LAorCQkJ CQkJCQkJCSByZXN0cmljdGluZm8tPnNlY3VyaXR5X2xldmVsKTsKK30KKworLyoKKyAqIGV4 cHJfaXNfbm9ubnVsbGFibGUKKyAqCSAgQ2hlY2sgdG8gc2VlIGlmIHRoZSBFeHByIGNhbm5v dCBiZSBOVUxMCisgKgorICogSWYgdGhlIEV4cHIgaXMgYSBzaW1wbGUgVmFyIHRoYXQgaXMg ZGVmaW5lZCBOT1QgTlVMTCBhbmQgbWVhbndoaWxlIGlzIG5vdAorICogbnVsbGVkIGJ5IGFu eSBvdXRlciBqb2lucywgdGhlbiB3ZSBjYW4ga25vdyB0aGF0IGl0IGNhbm5vdCBiZSBOVUxM LgorICovCitzdGF0aWMgYm9vbAorZXhwcl9pc19ub25udWxsYWJsZShQbGFubmVySW5mbyAq cm9vdCwgRXhwciAqZXhwcikKK3sKKwlSZWxPcHRJbmZvICpyZWw7CisJVmFyCQkgICAqdmFy OworCisJLyogRm9yIG5vdyBvbmx5IGNoZWNrIHNpbXBsZSBWYXJzICovCisJaWYgKCFJc0Eo ZXhwciwgVmFyKSkKKwkJcmV0dXJuIGZhbHNlOworCisJdmFyID0gKFZhciAqKSBleHByOwor CisJLyogY291bGQgdGhlIFZhciBiZSBudWxsZWQgYnkgYW55IG91dGVyIGpvaW5zPyAqLwor CWlmICghYm1zX2lzX2VtcHR5KHZhci0+dmFybnVsbGluZ3JlbHMpKQorCQlyZXR1cm4gZmFs c2U7CisKKwkvKiBzeXN0ZW0gY29sdW1ucyBjYW5ub3QgYmUgTlVMTCAqLworCWlmICh2YXIt PnZhcmF0dG5vIDwgMCkKKwkJcmV0dXJuIHRydWU7CisKKwkvKiBpcyB0aGUgY29sdW1uIGRl ZmluZWQgTk9UIE5VTEw/ICovCisJcmVsID0gZmluZF9iYXNlX3JlbChyb290LCB2YXItPnZh cm5vKTsKKwlpZiAodmFyLT52YXJhdHRubyA+IDAgJiYKKwkJYm1zX2lzX21lbWJlcih2YXIt PnZhcmF0dG5vLCByZWwtPm5vdG51bGxhdHRudW1zKSkKKwkJcmV0dXJuIHRydWU7CisKKwly ZXR1cm4gZmFsc2U7Cit9CisKKy8qCisgKiByZXN0cmljdGlvbl9pc19hbHdheXNfdHJ1ZQor ICoJICBDaGVjayB0byBzZWUgaWYgdGhlIFJlc3RyaWN0SW5mbyBpcyBhbHdheXMgdHJ1ZS4K KyAqCisgKiBDdXJyZW50bHkgd2Ugb25seSBjaGVjayBmb3IgTnVsbFRlc3QgcXVhbHMgYW5k IE9SIGNsYXVzZXMgdGhhdCBpbmNsdWRlCisgKiBOdWxsVGVzdCBxdWFscy4gIFdlIG1heSBl eHRlbmQgaXQgaW4gdGhlIGZ1dHVyZS4KKyAqLworYm9vbAorcmVzdHJpY3Rpb25faXNfYWx3 YXlzX3RydWUoUGxhbm5lckluZm8gKnJvb3QsCisJCQkJCQkgICBSZXN0cmljdEluZm8gKnJl c3RyaWN0aW5mbykKK3sKKwkvKiBDaGVjayBmb3IgTnVsbFRlc3QgcXVhbCAqLworCWlmIChJ c0EocmVzdHJpY3RpbmZvLT5jbGF1c2UsIE51bGxUZXN0KSkKKwl7CisJCU51bGxUZXN0ICpu dWxsdGVzdCA9IChOdWxsVGVzdCAqKSByZXN0cmljdGluZm8tPmNsYXVzZTsKKworCQkvKiBp cyB0aGlzIE51bGxUZXN0IGFuIElTX05PVF9OVUxMIHF1YWw/ICovCisJCWlmIChudWxsdGVz dC0+bnVsbHRlc3R0eXBlICE9IElTX05PVF9OVUxMKQorCQkJcmV0dXJuIGZhbHNlOworCisJ CXJldHVybiBleHByX2lzX25vbm51bGxhYmxlKHJvb3QsIG51bGx0ZXN0LT5hcmcpOworCX0K KworCS8qIElmIGl0J3MgYW4gT1IsIGNoZWNrIGl0cyBzdWItY2xhdXNlcyAqLworCWlmIChy ZXN0cmljdGlvbl9pc19vcl9jbGF1c2UocmVzdHJpY3RpbmZvKSkKKwl7CisJCUxpc3RDZWxs ICAgKmxjOworCisJCUFzc2VydChpc19vcmNsYXVzZShyZXN0cmljdGluZm8tPm9yY2xhdXNl KSk7CisJCWZvcmVhY2gobGMsICgoQm9vbEV4cHIgKikgcmVzdHJpY3RpbmZvLT5vcmNsYXVz ZSktPmFyZ3MpCisJCXsKKwkJCU5vZGUgICAqb3JhcmcgPSAoTm9kZSAqKSBsZmlyc3QobGMp OworCisJCQlpZiAoIUlzQShvcmFyZywgUmVzdHJpY3RJbmZvKSkKKwkJCQljb250aW51ZTsK KworCQkJaWYgKHJlc3RyaWN0aW9uX2lzX2Fsd2F5c190cnVlKHJvb3QsIChSZXN0cmljdElu Zm8gKikgb3JhcmcpKQorCQkJCXJldHVybiB0cnVlOworCQl9CisJfQorCisJcmV0dXJuIGZh bHNlOworfQorCisvKgorICogcmVzdHJpY3Rpb25faXNfYWx3YXlzX2ZhbHNlCisgKgkgIENo ZWNrIHRvIHNlZSBpZiB0aGUgUmVzdHJpY3RJbmZvIGlzIGFsd2F5cyBmYWxzZS4KKyAqCisg KiBDdXJyZW50bHkgd2Ugb25seSBjaGVjayBmb3IgTnVsbFRlc3QgcXVhbHMgYW5kIE9SIGNs YXVzZXMgdGhhdCBpbmNsdWRlCisgKiBOdWxsVGVzdCBxdWFscy4gIFdlIG1heSBleHRlbmQg aXQgaW4gdGhlIGZ1dHVyZS4KKyAqLworYm9vbAorcmVzdHJpY3Rpb25faXNfYWx3YXlzX2Zh bHNlKFBsYW5uZXJJbmZvICpyb290LAorCQkJCQkJCVJlc3RyaWN0SW5mbyAqcmVzdHJpY3Rp bmZvKQoreworCS8qIENoZWNrIGZvciBOdWxsVGVzdCBxdWFsICovCisJaWYgKElzQShyZXN0 cmljdGluZm8tPmNsYXVzZSwgTnVsbFRlc3QpKQorCXsKKwkJTnVsbFRlc3QgKm51bGx0ZXN0 ID0gKE51bGxUZXN0ICopIHJlc3RyaWN0aW5mby0+Y2xhdXNlOworCisJCS8qIGlzIHRoaXMg TnVsbFRlc3QgYW4gSVNfTlVMTCBxdWFsPyAqLworCQlpZiAobnVsbHRlc3QtPm51bGx0ZXN0 dHlwZSAhPSBJU19OVUxMKQorCQkJcmV0dXJuIGZhbHNlOworCisJCXJldHVybiBleHByX2lz X25vbm51bGxhYmxlKHJvb3QsIG51bGx0ZXN0LT5hcmcpOworCX0KKworCS8qIElmIGl0J3Mg YW4gT1IsIGNoZWNrIGl0cyBzdWItY2xhdXNlcyAqLworCWlmIChyZXN0cmljdGlvbl9pc19v cl9jbGF1c2UocmVzdHJpY3RpbmZvKSkKKwl7CisJCUxpc3RDZWxsICAgKmxjOworCisJCUFz c2VydChpc19vcmNsYXVzZShyZXN0cmljdGluZm8tPm9yY2xhdXNlKSk7CisJCWZvcmVhY2go bGMsICgoQm9vbEV4cHIgKikgcmVzdHJpY3RpbmZvLT5vcmNsYXVzZSktPmFyZ3MpCisJCXsK KwkJCU5vZGUgICAqb3JhcmcgPSAoTm9kZSAqKSBsZmlyc3QobGMpOworCisJCQlpZiAoIUlz QShvcmFyZywgUmVzdHJpY3RJbmZvKSB8fAorCQkJCSFyZXN0cmljdGlvbl9pc19hbHdheXNf ZmFsc2Uocm9vdCwgKFJlc3RyaWN0SW5mbyAqKSBvcmFyZykpCisJCQkJcmV0dXJuIGZhbHNl OworCQl9CisJCXJldHVybiB0cnVlOworCX0KKworCXJldHVybiBmYWxzZTsKK30KKwogLyoK ICAqIGRpc3RyaWJ1dGVfcmVzdHJpY3RpbmZvX3RvX3JlbHMKICAqCSAgUHVzaCBhIGNvbXBs ZXRlZCBSZXN0cmljdEluZm8gaW50byB0aGUgcHJvcGVyIHJlc3RyaWN0aW9uIG9yIGpvaW4K QEAgLTI2MzIsNTggKzI4MDAsMzkgQEAgZGlzdHJpYnV0ZV9yZXN0cmljdGluZm9fdG9fcmVs cyhQbGFubmVySW5mbyAqcm9vdCwKIAkJCQkJCQkJUmVzdHJpY3RJbmZvICpyZXN0cmljdGlu Zm8pCiB7CiAJUmVsaWRzCQlyZWxpZHMgPSByZXN0cmljdGluZm8tPnJlcXVpcmVkX3JlbGlk czsKLQlSZWxPcHRJbmZvICpyZWw7CisJaW50CQkJcmVsaWQ7CiAKLQlzd2l0Y2ggKGJtc19t ZW1iZXJzaGlwKHJlbGlkcykpCisJaWYgKHJlbGlkcyA9PSBOVUxMKQogCXsKLQkJY2FzZSBC TVNfU0lOR0xFVE9OOgotCi0JCQkvKgotCQkJICogVGhlcmUgaXMgb25seSBvbmUgcmVsYXRp b24gcGFydGljaXBhdGluZyBpbiB0aGUgY2xhdXNlLCBzbyBpdAotCQkJICogaXMgYSByZXN0 cmljdGlvbiBjbGF1c2UgZm9yIHRoYXQgcmVsYXRpb24uCi0JCQkgKi8KLQkJCXJlbCA9IGZp bmRfYmFzZV9yZWwocm9vdCwgYm1zX3NpbmdsZXRvbl9tZW1iZXIocmVsaWRzKSk7Ci0KLQkJ CS8qIEFkZCBjbGF1c2UgdG8gcmVsJ3MgcmVzdHJpY3Rpb24gbGlzdCAqLwotCQkJcmVsLT5i YXNlcmVzdHJpY3RpbmZvID0gbGFwcGVuZChyZWwtPmJhc2VyZXN0cmljdGluZm8sCi0JCQkJ CQkJCQkJCXJlc3RyaWN0aW5mbyk7Ci0JCQkvKiBVcGRhdGUgc2VjdXJpdHkgbGV2ZWwgaW5m byAqLwotCQkJcmVsLT5iYXNlcmVzdHJpY3RfbWluX3NlY3VyaXR5ID0gTWluKHJlbC0+YmFz ZXJlc3RyaWN0X21pbl9zZWN1cml0eSwKLQkJCQkJCQkJCQkJCSByZXN0cmljdGluZm8tPnNl Y3VyaXR5X2xldmVsKTsKLQkJCWJyZWFrOwotCQljYXNlIEJNU19NVUxUSVBMRToKLQotCQkJ LyoKLQkJCSAqIFRoZSBjbGF1c2UgaXMgYSBqb2luIGNsYXVzZSwgc2luY2UgdGhlcmUgaXMg bW9yZSB0aGFuIG9uZSByZWwKLQkJCSAqIGluIGl0cyByZWxpZCBzZXQuCi0JCQkgKi8KLQot CQkJLyoKLQkJCSAqIENoZWNrIGZvciBoYXNoam9pbmFibGUgb3BlcmF0b3JzLiAgKFdlIGRv bid0IGJvdGhlciBzZXR0aW5nIHRoZQotCQkJICogaGFzaGpvaW4gaW5mbyBleGNlcHQgaW4g dHJ1ZSBqb2luIGNsYXVzZXMuKQotCQkJICovCi0JCQljaGVja19oYXNoam9pbmFibGUocmVz dHJpY3RpbmZvKTsKKwkJLyoKKwkJICogY2xhdXNlIHJlZmVyZW5jZXMgbm8gcmVscywgYW5k IHRoZXJlZm9yZSB3ZSBoYXZlIG5vIHBsYWNlIHRvCisJCSAqIGF0dGFjaCBpdC4gIFNob3Vs ZG4ndCBnZXQgaGVyZSBpZiBjYWxsZXJzIGFyZSB3b3JraW5nIHByb3Blcmx5LgorCQkgKi8K KwkJZWxvZyhFUlJPUiwgImNhbm5vdCBjb3BlIHdpdGggdmFyaWFibGUtZnJlZSBjbGF1c2Ui KTsKKwl9CisJZWxzZSBpZiAoYm1zX2dldF9zaW5nbGV0b25fbWVtYmVyKHJlbGlkcywgJnJl bGlkKSkKKwkJYWRkX2Jhc2VyZXN0cmljdGluZm9fdG9fcmVsKHJvb3QsIHJlbGlkLCByZXN0 cmljdGluZm8pOworCWVsc2UKKwl7CisJCS8qCisJCSAqIFRoZSBjbGF1c2UgaXMgYSBqb2lu IGNsYXVzZSwgc2luY2UgdGhlcmUgaXMgbW9yZSB0aGFuIG9uZSByZWwgaW4KKwkJICogaXRz IHJlbGlkIHNldC4KKwkJICovCiAKLQkJCS8qCi0JCQkgKiBMaWtld2lzZSwgY2hlY2sgaWYg dGhlIGNsYXVzZSBpcyBzdWl0YWJsZSB0byBiZSB1c2VkIHdpdGggYQotCQkJICogTWVtb2l6 ZSBub2RlIHRvIGNhY2hlIGlubmVyIHR1cGxlcyBkdXJpbmcgYSBwYXJhbWV0ZXJpemVkCi0J CQkgKiBuZXN0ZWQgbG9vcC4KLQkJCSAqLwotCQkJY2hlY2tfbWVtb2l6YWJsZShyZXN0cmlj dGluZm8pOworCQkvKgorCQkgKiBDaGVjayBmb3IgaGFzaGpvaW5hYmxlIG9wZXJhdG9ycy4g IChXZSBkb24ndCBib3RoZXIgc2V0dGluZyB0aGUKKwkJICogaGFzaGpvaW4gaW5mbyBleGNl cHQgaW4gdHJ1ZSBqb2luIGNsYXVzZXMuKQorCQkgKi8KKwkJY2hlY2tfaGFzaGpvaW5hYmxl KHJlc3RyaWN0aW5mbyk7CiAKLQkJCS8qCi0JCQkgKiBBZGQgY2xhdXNlIHRvIHRoZSBqb2lu IGxpc3RzIG9mIGFsbCB0aGUgcmVsZXZhbnQgcmVsYXRpb25zLgotCQkJICovCi0JCQlhZGRf am9pbl9jbGF1c2VfdG9fcmVscyhyb290LCByZXN0cmljdGluZm8sIHJlbGlkcyk7Ci0JCQli cmVhazsKLQkJZGVmYXVsdDoKKwkJLyoKKwkJICogTGlrZXdpc2UsIGNoZWNrIGlmIHRoZSBj bGF1c2UgaXMgc3VpdGFibGUgdG8gYmUgdXNlZCB3aXRoIGEgTWVtb2l6ZQorCQkgKiBub2Rl IHRvIGNhY2hlIGlubmVyIHR1cGxlcyBkdXJpbmcgYSBwYXJhbWV0ZXJpemVkIG5lc3RlZCBs b29wLgorCQkgKi8KKwkJY2hlY2tfbWVtb2l6YWJsZShyZXN0cmljdGluZm8pOwogCi0JCQkv KgotCQkJICogY2xhdXNlIHJlZmVyZW5jZXMgbm8gcmVscywgYW5kIHRoZXJlZm9yZSB3ZSBo YXZlIG5vIHBsYWNlIHRvCi0JCQkgKiBhdHRhY2ggaXQuICBTaG91bGRuJ3QgZ2V0IGhlcmUg aWYgY2FsbGVycyBhcmUgd29ya2luZyBwcm9wZXJseS4KLQkJCSAqLwotCQkJZWxvZyhFUlJP UiwgImNhbm5vdCBjb3BlIHdpdGggdmFyaWFibGUtZnJlZSBjbGF1c2UiKTsKLQkJCWJyZWFr OworCQkvKiBBZGQgY2xhdXNlIHRvIHRoZSBqb2luIGxpc3RzIG9mIGFsbCB0aGUgcmVsZXZh bnQgcmVsYXRpb25zLiAqLworCQlhZGRfam9pbl9jbGF1c2VfdG9fcmVscyhyb290LCByZXN0 cmljdGluZm8sIHJlbGlkcyk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9v cHRpbWl6ZXIvdXRpbC9qb2luaW5mby5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwv am9pbmluZm8uYwppbmRleCA5NjhhNWE0ODhlLi5iMGI5NjBhMDAxIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9qb2luaW5mby5jCisrKyBiL3NyYy9iYWNrZW5k L29wdGltaXplci91dGlsL2pvaW5pbmZvLmMKQEAgLTE0LDkgKzE0LDEyIEBACiAgKi8KICNp bmNsdWRlICJwb3N0Z3Jlcy5oIgogCisjaW5jbHVkZSAibm9kZXMvbWFrZWZ1bmNzLmgiCiAj aW5jbHVkZSAib3B0aW1pemVyL2pvaW5pbmZvLmgiCiAjaW5jbHVkZSAib3B0aW1pemVyL3Bh dGhub2RlLmgiCiAjaW5jbHVkZSAib3B0aW1pemVyL3BhdGhzLmgiCisjaW5jbHVkZSAib3B0 aW1pemVyL3BsYW5tYWluLmgiCisjaW5jbHVkZSAib3B0aW1pemVyL3Jlc3RyaWN0aW5mby5o IgogCiAKIC8qCkBAIC05OCw2ICsxMDEsMjggQEAgYWRkX2pvaW5fY2xhdXNlX3RvX3JlbHMo UGxhbm5lckluZm8gKnJvb3QsCiB7CiAJaW50CQkJY3VyX3JlbGlkOwogCisJLyogRG9uJ3Qg YWRkIHRoZSBjbGF1c2UgaWYgaXQgaXMgYWx3YXlzIHRydWUgKi8KKwlpZiAocmVzdHJpY3Rp b25faXNfYWx3YXlzX3RydWUocm9vdCwgcmVzdHJpY3RpbmZvKSkKKwkJcmV0dXJuOworCisJ LyogU3Vic3RpdHV0ZSBjb25zdGFudC1GQUxTRSBmb3IgdGhlIG9yaWdpbiBxdWFsIGlmIGl0 IGlzIGFsd2F5cyBmYWxzZSAqLworCWlmIChyZXN0cmljdGlvbl9pc19hbHdheXNfZmFsc2Uo cm9vdCwgcmVzdHJpY3RpbmZvKSkKKwl7CisJCWludAkJc2F2ZV9yaW5mb19zZXJpYWwgPSBy ZXN0cmljdGluZm8tPnJpbmZvX3NlcmlhbDsKKworCQlyZXN0cmljdGluZm8gPSBtYWtlX3Jl c3RyaWN0aW5mbyhyb290LAorCQkJCQkJCQkJCSAoRXhwciAqKSBtYWtlQm9vbENvbnN0KGZh bHNlLCBmYWxzZSksCisJCQkJCQkJCQkJIHJlc3RyaWN0aW5mby0+aXNfcHVzaGVkX2Rvd24s CisJCQkJCQkJCQkJIHJlc3RyaWN0aW5mby0+aGFzX2Nsb25lLAorCQkJCQkJCQkJCSByZXN0 cmljdGluZm8tPmlzX2Nsb25lLAorCQkJCQkJCQkJCSBmYWxzZSwJLyogcHNldWRvY29uc3Rh bnQgKi8KKwkJCQkJCQkJCQkgMCwJLyogc2VjdXJpdHlfbGV2ZWwgKi8KKwkJCQkJCQkJCQkg cmVzdHJpY3RpbmZvLT5yZXF1aXJlZF9yZWxpZHMsCisJCQkJCQkJCQkJIHJlc3RyaWN0aW5m by0+aW5jb21wYXRpYmxlX3JlbGlkcywKKwkJCQkJCQkJCQkgcmVzdHJpY3RpbmZvLT5vdXRl cl9yZWxpZHMpOworCQlyZXN0cmljdGluZm8tPnJpbmZvX3NlcmlhbCA9IHNhdmVfcmluZm9f c2VyaWFsOworCX0KKwogCWN1cl9yZWxpZCA9IC0xOwogCXdoaWxlICgoY3VyX3JlbGlkID0g Ym1zX25leHRfbWVtYmVyKGpvaW5fcmVsaWRzLCBjdXJfcmVsaWQpKSA+PSAwKQogCXsKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BsYW5jYXQuYyBiL3NyYy9i YWNrZW5kL29wdGltaXplci91dGlsL3BsYW5jYXQuYwppbmRleCA3MTU5Yzc3NWZiLi4wMDI0 YjI3ZWRjIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wbGFuY2F0 LmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcGxhbmNhdC5jCkBAIC0xNjMs NiArMTYzLDE1IEBAIGdldF9yZWxhdGlvbl9pbmZvKFBsYW5uZXJJbmZvICpyb290LCBPaWQg cmVsYXRpb25PYmplY3RJZCwgYm9vbCBpbmhwYXJlbnQsCiAJcmVsLT5hdHRyX3dpZHRocyA9 IChpbnQzMiAqKQogCQlwYWxsb2MwKChyZWwtPm1heF9hdHRyIC0gcmVsLT5taW5fYXR0ciAr IDEpICogc2l6ZW9mKGludDMyKSk7CiAKKwkvKiByZWNvcmQgd2hpY2ggY29sdW1ucyBhcmUg ZGVmaW5lZCBhcyBOT1QgTlVMTCAqLworCWZvciAoaW50IGkgPSAwOyBpIDwgcmVsYXRpb24t PnJkX2F0dC0+bmF0dHM7IGkrKykKKwl7CisJCUZvcm1EYXRhX3BnX2F0dHJpYnV0ZSAqYXR0 ciA9ICZyZWxhdGlvbi0+cmRfYXR0LT5hdHRyc1tpXTsKKworCQlpZiAoYXR0ci0+YXR0bm90 bnVsbCkKKwkJCXJlbC0+bm90bnVsbGF0dG51bXMgPSBibXNfYWRkX21lbWJlcihyZWwtPm5v dG51bGxhdHRudW1zLCBhdHRyLT5hdHRudW0pOworCX0KKwogCS8qCiAJICogRXN0aW1hdGUg cmVsYXRpb24gc2l6ZSAtLS0gdW5sZXNzIGl0J3MgYW4gaW5oZXJpdGFuY2UgcGFyZW50LCBp biB3aGljaAogCSAqIGNhc2UgdGhlIHNpemUgd2Ugd2FudCBpcyBub3QgdGhlIHJlbCdzIG93 biBzaXplIGJ1dCB0aGUgc2l6ZSBvZiBpdHMKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29w dGltaXplci91dGlsL3JlbG5vZGUuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3Jl bG5vZGUuYwppbmRleCA1ZDgzZjYwZWI5Li42YmIwZGY2NTM1IDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9yZWxub2RlLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0 aW1pemVyL3V0aWwvcmVsbm9kZS5jCkBAIC0yMjEsNiArMjIxLDcgQEAgYnVpbGRfc2ltcGxl X3JlbChQbGFubmVySW5mbyAqcm9vdCwgaW50IHJlbGlkLCBSZWxPcHRJbmZvICpwYXJlbnQp CiAJcmVsLT5yZWxpZCA9IHJlbGlkOwogCXJlbC0+cnRla2luZCA9IHJ0ZS0+cnRla2luZDsK IAkvKiBtaW5fYXR0ciwgbWF4X2F0dHIsIGF0dHJfbmVlZGVkLCBhdHRyX3dpZHRocyBhcmUg c2V0IGJlbG93ICovCisJcmVsLT5ub3RudWxsYXR0bnVtcyA9IE5VTEw7CiAJcmVsLT5sYXRl cmFsX3ZhcnMgPSBOSUw7CiAJcmVsLT5pbmRleGxpc3QgPSBOSUw7CiAJcmVsLT5zdGF0bGlz dCA9IE5JTDsKQEAgLTcwNSw2ICs3MDYsNyBAQCBidWlsZF9qb2luX3JlbChQbGFubmVySW5m byAqcm9vdCwKIAlqb2lucmVsLT5tYXhfYXR0ciA9IDA7CiAJam9pbnJlbC0+YXR0cl9uZWVk ZWQgPSBOVUxMOwogCWpvaW5yZWwtPmF0dHJfd2lkdGhzID0gTlVMTDsKKwlqb2lucmVsLT5u b3RudWxsYXR0bnVtcyA9IE5VTEw7CiAJam9pbnJlbC0+bnVsbGluZ19yZWxpZHMgPSBOVUxM OwogCWpvaW5yZWwtPmxhdGVyYWxfdmFycyA9IE5JTDsKIAlqb2lucmVsLT5sYXRlcmFsX3Jl ZmVyZW5jZXJzID0gTlVMTDsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhu b2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKaW5kZXggNTcwMmZiYmE2 MC4uZDRmNmJiY2QyYyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVz LmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKQEAgLTkxMyw2ICs5MTMs OCBAQCB0eXBlZGVmIHN0cnVjdCBSZWxPcHRJbmZvCiAJUmVsaWRzCSAgICphdHRyX25lZWRl ZCBwZ19ub2RlX2F0dHIocmVhZF93cml0ZV9pZ25vcmUpOwogCS8qIGFycmF5IGluZGV4ZWQg W21pbl9hdHRyIC4uIG1heF9hdHRyXSAqLwogCWludDMyCSAgICphdHRyX3dpZHRocyBwZ19u b2RlX2F0dHIocmVhZF93cml0ZV9pZ25vcmUpOworCS8qIHplcm8tYmFzZWQgc2V0IGNvbnRh aW5pbmcgYXR0bnVtcyBvZiBOT1QgTlVMTCBjb2x1bW5zICovCisJQml0bWFwc2V0ICAqbm90 bnVsbGF0dG51bXM7CiAJLyogcmVsaWRzIG9mIG91dGVyIGpvaW5zIHRoYXQgY2FuIG51bGwg dGhpcyBiYXNlcmVsICovCiAJUmVsaWRzCQludWxsaW5nX3JlbGlkczsKIAkvKiBMQVRFUkFM IFZhcnMgYW5kIFBIVnMgcmVmZXJlbmNlZCBieSByZWwgKi8KZGlmZiAtLWdpdCBhL3NyYy9p bmNsdWRlL29wdGltaXplci9wbGFubWFpbi5oIGIvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3Bs YW5tYWluLmgKaW5kZXggMzFjMTg4MTc2Yi4uNjBmMjU5N2NiZSAxMDA2NDQKLS0tIGEvc3Jj L2luY2x1ZGUvb3B0aW1pemVyL3BsYW5tYWluLmgKKysrIGIvc3JjL2luY2x1ZGUvb3B0aW1p emVyL3BsYW5tYWluLmgKQEAgLTc1LDYgKzc1LDEwIEBAIGV4dGVybiB2b2lkIGFkZF92YXJz X3RvX3RhcmdldGxpc3QoUGxhbm5lckluZm8gKnJvb3QsIExpc3QgKnZhcnMsCiBleHRlcm4g dm9pZCBmaW5kX2xhdGVyYWxfcmVmZXJlbmNlcyhQbGFubmVySW5mbyAqcm9vdCk7CiBleHRl cm4gdm9pZCBjcmVhdGVfbGF0ZXJhbF9qb2luX2luZm8oUGxhbm5lckluZm8gKnJvb3QpOwog ZXh0ZXJuIExpc3QgKmRlY29uc3RydWN0X2pvaW50cmVlKFBsYW5uZXJJbmZvICpyb290KTsK K2V4dGVybiBib29sIHJlc3RyaWN0aW9uX2lzX2Fsd2F5c190cnVlKFBsYW5uZXJJbmZvICpy b290LAorCQkJCQkJCQkJICAgUmVzdHJpY3RJbmZvICpyZXN0cmljdGluZm8pOworZXh0ZXJu IGJvb2wgcmVzdHJpY3Rpb25faXNfYWx3YXlzX2ZhbHNlKFBsYW5uZXJJbmZvICpyb290LAor CQkJCQkJCQkJCVJlc3RyaWN0SW5mbyAqcmVzdHJpY3RpbmZvKTsKIGV4dGVybiB2b2lkIGRp c3RyaWJ1dGVfcmVzdHJpY3RpbmZvX3RvX3JlbHMoUGxhbm5lckluZm8gKnJvb3QsCiAJCQkJ CQkJCQkJCVJlc3RyaWN0SW5mbyAqcmVzdHJpY3RpbmZvKTsKIGV4dGVybiBSZXN0cmljdElu Zm8gKnByb2Nlc3NfaW1wbGllZF9lcXVhbGl0eShQbGFubmVySW5mbyAqcm9vdCwKZGlmZiAt LWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHJlZGljYXRlLm91dCBiL3NyYy90 ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHJlZGljYXRlLm91dApuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwLi40N2M4YzFkMmJkCi0tLSAvZGV2L251bGwKKysrIGIvc3Jj L3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wcmVkaWNhdGUub3V0CkBAIC0wLDAgKzEsMjA0IEBA CistLQorLS0gVGVzdHMgZm9yIHByZWRpY2F0ZSBoYW5kbGluZworLS0KKy0tCistLSB0ZXN0 IHRoYXQgcmVzdHJpY3Rpb25zIHRoYXQgYXJlIGFsd2F5cyB0cnVlIGFyZSBpZ25vcmVkLCBh bmQgdGhhdCBhcmUgYWx3YXlzCistLSBmYWxzZSBhcmUgcmVwbGFjZWQgd2l0aCBjb25zdGFu dC1GQUxTRQorLS0KKy0tIGN1cnJlbnRseSB3ZSBvbmx5IGNoZWNrIGZvciBOdWxsVGVzdCBx dWFscyBhbmQgT1IgY2xhdXNlcyB0aGF0IGluY2x1ZGUKKy0tIE51bGxUZXN0IHF1YWxzLiAg V2UgbWF5IGV4dGVuZCBpdCBpbiB0aGUgZnV0dXJlLgorLS0KK2NyZWF0ZSB0YWJsZSBwcmVk X3RhYiAoYSBpbnQgbm90IG51bGwsIGIgaW50LCBjIGludCBub3QgbnVsbCk7CistLSBBbiBJ U19OT1RfTlVMTCBxdWFsIGluIHJlc3RyaWN0aW9uIGNsYXVzZXMgY2FuIGJlIGlnbm9yZWQg aWYgaXQncyBvbiBhIE5PVAorLS0gTlVMTCBjb2x1bW4KK2V4cGxhaW4gKGNvc3RzIG9mZikK K3NlbGVjdCAqIGZyb20gcHJlZF90YWIgdCB3aGVyZSB0LmEgaXMgbm90IG51bGw7CisgICAg ICAgUVVFUlkgUExBTiAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNlcSBT Y2FuIG9uIHByZWRfdGFiIHQKKygxIHJvdykKKworLS0gT24gdGhlIGNvbnRyYXJ5LCBhbiBJ U19OT1RfTlVMTCBxdWFsIGluIHJlc3RyaWN0aW9uIGNsYXVzZXMgY2FuIG5vdCBiZQorLS0g aWdub3JlZCBpZiBpdCdzIG5vdCBvbiBhIE5PVCBOVUxMIGNvbHVtbgorZXhwbGFpbiAoY29z dHMgb2ZmKQorc2VsZWN0ICogZnJvbSBwcmVkX3RhYiB0IHdoZXJlIHQuYiBpcyBub3QgbnVs bDsKKyAgICAgICAgUVVFUlkgUExBTiAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgU2VxIFNjYW4gb24gcHJlZF90YWIgdAorICAgRmlsdGVyOiAoYiBJUyBOT1Qg TlVMTCkKKygyIHJvd3MpCisKKy0tIEFuIElTX05VTEwgcXVhbCBpbiByZXN0cmljdGlvbiBj bGF1c2VzIGNhbiBiZSByZWR1Y2VkIHRvIGNvbnN0YW50LUZBTFNFIGlmCistLSBpdCdzIG9u IGEgTk9UIE5VTEwgY29sdW1uCitleHBsYWluIChjb3N0cyBvZmYpCitzZWxlY3QgKiBmcm9t IHByZWRfdGFiIHQgd2hlcmUgdC5hIGlzIG51bGw7CisgICAgICAgIFFVRVJZIFBMQU4gICAg ICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBSZXN1bHQKKyAgIE9uZS1UaW1l IEZpbHRlcjogZmFsc2UKKygyIHJvd3MpCisKKy0tIE9uIHRoZSBjb250cmFyeSwgYW4gSVNf TlVMTCBxdWFsIGluIHJlc3RyaWN0aW9uIGNsYXVzZXMgY2FuIG5vdCBiZSByZWR1Y2VkCist LSB0byBjb25zdGFudC1GQUxTRSBpZiBpdCdzIG5vdCBvbiBhIE5PVCBOVUxMIGNvbHVtbgor ZXhwbGFpbiAoY29zdHMgb2ZmKQorc2VsZWN0ICogZnJvbSBwcmVkX3RhYiB0IHdoZXJlIHQu YiBpcyBudWxsOworICAgICAgIFFVRVJZIFBMQU4gICAgICAgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyBTZXEgU2NhbiBvbiBwcmVkX3RhYiB0CisgICBGaWx0ZXI6IChiIElTIE5V TEwpCisoMiByb3dzKQorCistLSBUZXN0cyBmb3IgT1IgY2xhdXNlcyBpbiByZXN0cmljdGlv biBjbGF1c2VzCitleHBsYWluIChjb3N0cyBvZmYpCitzZWxlY3QgKiBmcm9tIHByZWRfdGFi IHQgd2hlcmUgdC5hIGlzIG5vdCBudWxsIG9yIHQuYiA9IDE7CisgICAgICAgUVVFUlkgUExB TiAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNlcSBTY2FuIG9uIHByZWRf dGFiIHQKKygxIHJvdykKKworZXhwbGFpbiAoY29zdHMgb2ZmKQorc2VsZWN0ICogZnJvbSBw cmVkX3RhYiB0IHdoZXJlIHQuYiBpcyBub3QgbnVsbCBvciB0LmEgPSAxOworICAgICAgICAg ICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorIFNlcSBTY2FuIG9uIHByZWRfdGFiIHQKKyAgIEZpbHRl cjogKChiIElTIE5PVCBOVUxMKSBPUiAoYSA9IDEpKQorKDIgcm93cykKKworZXhwbGFpbiAo Y29zdHMgb2ZmKQorc2VsZWN0ICogZnJvbSBwcmVkX3RhYiB0IHdoZXJlIHQuYSBpcyBudWxs IG9yIHQuYyBpcyBudWxsOworICAgICAgICBRVUVSWSBQTEFOICAgICAgICAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgUmVzdWx0CisgICBPbmUtVGltZSBGaWx0ZXI6IGZhbHNl CisoMiByb3dzKQorCitleHBsYWluIChjb3N0cyBvZmYpCitzZWxlY3QgKiBmcm9tIHByZWRf dGFiIHQgd2hlcmUgdC5iIGlzIG51bGwgb3IgdC5jIGlzIG51bGw7CisgICAgICAgICAgICAg ICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24gcHJlZF90YWIgdAorICAgRmlsdGVyOiAo KGIgSVMgTlVMTCkgT1IgKGMgSVMgTlVMTCkpCisoMiByb3dzKQorCistLSBBbiBJU19OT1Rf TlVMTCBxdWFsIGluIGpvaW4gY2xhdXNlcyBjYW4gYmUgaWdub3JlZCBpZgorLS0gYSkgaXQn cyBvbiBhIE5PVCBOVUxMIGNvbHVtbiwgYW5kCistLSBiKSBpdHMgVmFyIGlzIG5vdCBudWxs ZWQgYnkgYW55IG91dGVyIGpvaW5zCitleHBsYWluIChjb3N0cyBvZmYpCitzZWxlY3QgKiBm cm9tIHByZWRfdGFiIHQxIGxlZnQgam9pbiBwcmVkX3RhYiB0MiBvbiB0cnVlIGxlZnQgam9p biBwcmVkX3RhYiB0MyBvbiB0Mi5hIGlzIG5vdCBudWxsOworICAgICAgICAgICAgICAgICAg IFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29wIExlZnQgSm9pbgor ICAgLT4gIFNlcSBTY2FuIG9uIHByZWRfdGFiIHQxCisgICAtPiAgTWF0ZXJpYWxpemUKKyAg ICAgICAgIC0+ICBOZXN0ZWQgTG9vcCBMZWZ0IEpvaW4KKyAgICAgICAgICAgICAgIC0+ICBT ZXEgU2NhbiBvbiBwcmVkX3RhYiB0MgorICAgICAgICAgICAgICAgLT4gIE1hdGVyaWFsaXpl CisgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHJlZF90YWIgdDMKKyg3 IHJvd3MpCisKKy0tIE90aGVyd2lzZSB0aGUgSVNfTk9UX05VTEwgcXVhbCBpbiBqb2luIGNs YXVzZXMgY2Fubm90IGJlIGlnbm9yZWQKK2V4cGxhaW4gKGNvc3RzIG9mZikKK3NlbGVjdCAq IGZyb20gcHJlZF90YWIgdDEgbGVmdCBqb2luIHByZWRfdGFiIHQyIG9uIHQxLmEgPSAxIGxl ZnQgam9pbiBwcmVkX3RhYiB0MyBvbiB0Mi5hIGlzIG5vdCBudWxsOworICAgICAgICAgICAg ICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29wIExlZnQgSm9pbgorICAgSm9p biBGaWx0ZXI6ICh0Mi5hIElTIE5PVCBOVUxMKQorICAgLT4gIE5lc3RlZCBMb29wIExlZnQg Sm9pbgorICAgICAgICAgSm9pbiBGaWx0ZXI6ICh0MS5hID0gMSkKKyAgICAgICAgIC0+ICBT ZXEgU2NhbiBvbiBwcmVkX3RhYiB0MQorICAgICAgICAgLT4gIE1hdGVyaWFsaXplCisgICAg ICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHJlZF90YWIgdDIKKyAgIC0+ICBNYXRlcmlh bGl6ZQorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHByZWRfdGFiIHQzCisoOSByb3dzKQor CistLSBBbiBJU19OVUxMIHF1YWwgaW4gam9pbiBjbGF1c2VzIGNhbiBiZSByZWR1Y2VkIHRv IGNvbnN0YW50LUZBTFNFIGlmCistLSBhKSBpdCdzIG9uIGEgTk9UIE5VTEwgY29sdW1uLCBh bmQKKy0tIGIpIGl0cyBWYXIgaXMgbm90IG51bGxlZCBieSBhbnkgb3V0ZXIgam9pbnMKK2V4 cGxhaW4gKGNvc3RzIG9mZikKK3NlbGVjdCAqIGZyb20gcHJlZF90YWIgdDEgbGVmdCBqb2lu IHByZWRfdGFiIHQyIG9uIHRydWUgbGVmdCBqb2luIHByZWRfdGFiIHQzIG9uIHQyLmEgaXMg bnVsbCBhbmQgdDIuYiA9IDE7CisgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAg ICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29wIExlZnQgSm9pbgorICAgLT4gIFNlcSBT Y2FuIG9uIHByZWRfdGFiIHQxCisgICAtPiAgTWF0ZXJpYWxpemUKKyAgICAgICAgIC0+ICBO ZXN0ZWQgTG9vcCBMZWZ0IEpvaW4KKyAgICAgICAgICAgICAgIEpvaW4gRmlsdGVyOiAoZmFs c2UgQU5EICh0Mi5iID0gMSkpCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHJl ZF90YWIgdDIKKyAgICAgICAgICAgICAgIC0+ICBSZXN1bHQKKyAgICAgICAgICAgICAgICAg ICAgIE9uZS1UaW1lIEZpbHRlcjogZmFsc2UKKyg4IHJvd3MpCisKKy0tIE90aGVyd2lzZSB0 aGUgSVNfTlVMTCBxdWFsIGluIGpvaW4gY2xhdXNlcyBjYW5ub3QgYmUgcmVkdWNlZCB0byBj b25zdGFudC1GQUxTRQorZXhwbGFpbiAoY29zdHMgb2ZmKQorc2VsZWN0ICogZnJvbSBwcmVk X3RhYiB0MSBsZWZ0IGpvaW4gcHJlZF90YWIgdDIgb24gdHJ1ZSBsZWZ0IGpvaW4gcHJlZF90 YWIgdDMgb24gdDIuYSBpcyBudWxsOworICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAg ICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorIE5lc3RlZCBMb29wIExlZnQgSm9pbgorICAgSm9pbiBGaWx0ZXI6ICh0Mi5hIElT IE5VTEwpCisgICAtPiAgTmVzdGVkIExvb3AgTGVmdCBKb2luCisgICAgICAgICAtPiAgU2Vx IFNjYW4gb24gcHJlZF90YWIgdDEKKyAgICAgICAgIC0+ICBNYXRlcmlhbGl6ZQorICAgICAg ICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHByZWRfdGFiIHQyCisgICAtPiAgTWF0ZXJpYWxp emUKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwcmVkX3RhYiB0MworKDggcm93cykKKwor LS0gVGVzdHMgZm9yIE9SIGNsYXVzZXMgaW4gam9pbiBjbGF1c2VzCitleHBsYWluIChjb3N0 cyBvZmYpCitzZWxlY3QgKiBmcm9tIHByZWRfdGFiIHQxIGxlZnQgam9pbiBwcmVkX3RhYiB0 MiBvbiB0cnVlIGxlZnQgam9pbiBwcmVkX3RhYiB0MyBvbiB0Mi5hIGlzIG5vdCBudWxsIG9y IHQyLmIgPSAxOworICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAg ICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorIE5lc3RlZCBMb29wIExlZnQgSm9pbgorICAgLT4gIFNlcSBTY2FuIG9uIHByZWRf dGFiIHQxCisgICAtPiAgTWF0ZXJpYWxpemUKKyAgICAgICAgIC0+ICBOZXN0ZWQgTG9vcCBM ZWZ0IEpvaW4KKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwcmVkX3RhYiB0Mgor ICAgICAgICAgICAgICAgLT4gIE1hdGVyaWFsaXplCisgICAgICAgICAgICAgICAgICAgICAt PiAgU2VxIFNjYW4gb24gcHJlZF90YWIgdDMKKyg3IHJvd3MpCisKK2V4cGxhaW4gKGNvc3Rz IG9mZikKK3NlbGVjdCAqIGZyb20gcHJlZF90YWIgdDEgbGVmdCBqb2luIHByZWRfdGFiIHQy IG9uIHQxLmEgPSAxIGxlZnQgam9pbiBwcmVkX3RhYiB0MyBvbiB0Mi5hIGlzIG5vdCBudWxs IG9yIHQyLmIgPSAxOworICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAg ICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcCBMZWZ0IEpvaW4KKyAgIEpvaW4gRmlsdGVyOiAo KHQyLmEgSVMgTk9UIE5VTEwpIE9SICh0Mi5iID0gMSkpCisgICAtPiAgTmVzdGVkIExvb3Ag TGVmdCBKb2luCisgICAgICAgICBKb2luIEZpbHRlcjogKHQxLmEgPSAxKQorICAgICAgICAg LT4gIFNlcSBTY2FuIG9uIHByZWRfdGFiIHQxCisgICAgICAgICAtPiAgTWF0ZXJpYWxpemUK KyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwcmVkX3RhYiB0MgorICAgLT4gIE1h dGVyaWFsaXplCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHJlZF90YWIgdDMKKyg5IHJv d3MpCisKK2V4cGxhaW4gKGNvc3RzIG9mZikKK3NlbGVjdCAqIGZyb20gcHJlZF90YWIgdDEg bGVmdCBqb2luIHByZWRfdGFiIHQyIG9uIHRydWUgbGVmdCBqb2luIHByZWRfdGFiIHQzIG9u ICh0Mi5hIGlzIG51bGwgb3IgdDIuYyBpcyBudWxsKSBhbmQgdDIuYiA9IDE7CisgICAgICAg ICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE5lc3RlZCBM b29wIExlZnQgSm9pbgorICAgLT4gIFNlcSBTY2FuIG9uIHByZWRfdGFiIHQxCisgICAtPiAg TWF0ZXJpYWxpemUKKyAgICAgICAgIC0+ICBOZXN0ZWQgTG9vcCBMZWZ0IEpvaW4KKyAgICAg ICAgICAgICAgIEpvaW4gRmlsdGVyOiAoZmFsc2UgQU5EICh0Mi5iID0gMSkpCisgICAgICAg ICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHJlZF90YWIgdDIKKyAgICAgICAgICAgICAgIC0+ ICBSZXN1bHQKKyAgICAgICAgICAgICAgICAgICAgIE9uZS1UaW1lIEZpbHRlcjogZmFsc2UK Kyg4IHJvd3MpCisKK2V4cGxhaW4gKGNvc3RzIG9mZikKK3NlbGVjdCAqIGZyb20gcHJlZF90 YWIgdDEgbGVmdCBqb2luIHByZWRfdGFiIHQyIG9uIHRydWUgbGVmdCBqb2luIHByZWRfdGFi IHQzIG9uIHQyLmEgaXMgbnVsbCBvciB0Mi5jIGlzIG51bGw7CisgICAgICAgICAgICAgICAg ICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29wIExlZnQg Sm9pbgorICAgSm9pbiBGaWx0ZXI6ICgodDIuYSBJUyBOVUxMKSBPUiAodDIuYyBJUyBOVUxM KSkKKyAgIC0+ICBOZXN0ZWQgTG9vcCBMZWZ0IEpvaW4KKyAgICAgICAgIC0+ICBTZXEgU2Nh biBvbiBwcmVkX3RhYiB0MQorICAgICAgICAgLT4gIE1hdGVyaWFsaXplCisgICAgICAgICAg ICAgICAtPiAgU2VxIFNjYW4gb24gcHJlZF90YWIgdDIKKyAgIC0+ICBNYXRlcmlhbGl6ZQor ICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHByZWRfdGFiIHQzCisoOCByb3dzKQorCitkcm9w IHRhYmxlIHByZWRfdGFiOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9wYXJhbGxl bF9zY2hlZHVsZSBiL3NyYy90ZXN0L3JlZ3Jlc3MvcGFyYWxsZWxfc2NoZWR1bGUKaW5kZXgg NGRmOWQ4NTAzYi4uMzgxNmVmYzdiMyAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9w YXJhbGxlbF9zY2hlZHVsZQorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3BhcmFsbGVsX3NjaGVk dWxlCkBAIC0xMTksNyArMTE5LDcgQEAgdGVzdDogcGxhbmNhY2hlIGxpbWl0IHBscGdzcWwg Y29weTIgdGVtcCBkb21haW4gcmFuZ2VmdW5jcyBwcmVwYXJlIGNvbnZlcnNpb24gdHIKICMg VGhlIHN0YXRzIHRlc3QgcmVzZXRzIHN0YXRzLCBzbyBub3RoaW5nIGVsc2UgbmVlZGluZyBz dGF0cyBhY2Nlc3MgY2FuIGJlIGluCiAjIHRoaXMgZ3JvdXAuCiAjIC0tLS0tLS0tLS0KLXRl c3Q6IHBhcnRpdGlvbl9qb2luIHBhcnRpdGlvbl9wcnVuZSByZWxvcHRpb25zIGhhc2hfcGFy dCBpbmRleGluZyBwYXJ0aXRpb25fYWdncmVnYXRlIHBhcnRpdGlvbl9pbmZvIHR1cGxlc29y dCBleHBsYWluIGNvbXByZXNzaW9uIG1lbW9pemUgc3RhdHMKK3Rlc3Q6IHBhcnRpdGlvbl9q b2luIHBhcnRpdGlvbl9wcnVuZSByZWxvcHRpb25zIGhhc2hfcGFydCBpbmRleGluZyBwYXJ0 aXRpb25fYWdncmVnYXRlIHBhcnRpdGlvbl9pbmZvIHR1cGxlc29ydCBleHBsYWluIGNvbXBy ZXNzaW9uIG1lbW9pemUgc3RhdHMgcHJlZGljYXRlCiAKICMgZXZlbnRfdHJpZ2dlciBkZXBl bmRzIG9uIGNyZWF0ZV9hbSBhbmQgY2Fubm90IHJ1biBjb25jdXJyZW50bHkgd2l0aAogIyBh bnkgdGVzdCB0aGF0IHJ1bnMgRERMCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3Nx bC9wcmVkaWNhdGUuc3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvcHJlZGljYXRlLnNxbApu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi45ZDQzMzY4NjFmCi0tLSAv ZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvcHJlZGljYXRlLnNxbApAQCAt MCwwICsxLDgwIEBACistLQorLS0gVGVzdHMgZm9yIHByZWRpY2F0ZSBoYW5kbGluZworLS0K KworLS0KKy0tIHRlc3QgdGhhdCByZXN0cmljdGlvbnMgdGhhdCBhcmUgYWx3YXlzIHRydWUg YXJlIGlnbm9yZWQsIGFuZCB0aGF0IGFyZSBhbHdheXMKKy0tIGZhbHNlIGFyZSByZXBsYWNl ZCB3aXRoIGNvbnN0YW50LUZBTFNFCistLQorLS0gY3VycmVudGx5IHdlIG9ubHkgY2hlY2sg Zm9yIE51bGxUZXN0IHF1YWxzIGFuZCBPUiBjbGF1c2VzIHRoYXQgaW5jbHVkZQorLS0gTnVs bFRlc3QgcXVhbHMuICBXZSBtYXkgZXh0ZW5kIGl0IGluIHRoZSBmdXR1cmUuCistLQorY3Jl YXRlIHRhYmxlIHByZWRfdGFiIChhIGludCBub3QgbnVsbCwgYiBpbnQsIGMgaW50IG5vdCBu dWxsKTsKKworLS0gQW4gSVNfTk9UX05VTEwgcXVhbCBpbiByZXN0cmljdGlvbiBjbGF1c2Vz IGNhbiBiZSBpZ25vcmVkIGlmIGl0J3Mgb24gYSBOT1QKKy0tIE5VTEwgY29sdW1uCitleHBs YWluIChjb3N0cyBvZmYpCitzZWxlY3QgKiBmcm9tIHByZWRfdGFiIHQgd2hlcmUgdC5hIGlz IG5vdCBudWxsOworCistLSBPbiB0aGUgY29udHJhcnksIGFuIElTX05PVF9OVUxMIHF1YWwg aW4gcmVzdHJpY3Rpb24gY2xhdXNlcyBjYW4gbm90IGJlCistLSBpZ25vcmVkIGlmIGl0J3Mg bm90IG9uIGEgTk9UIE5VTEwgY29sdW1uCitleHBsYWluIChjb3N0cyBvZmYpCitzZWxlY3Qg KiBmcm9tIHByZWRfdGFiIHQgd2hlcmUgdC5iIGlzIG5vdCBudWxsOworCistLSBBbiBJU19O VUxMIHF1YWwgaW4gcmVzdHJpY3Rpb24gY2xhdXNlcyBjYW4gYmUgcmVkdWNlZCB0byBjb25z dGFudC1GQUxTRSBpZgorLS0gaXQncyBvbiBhIE5PVCBOVUxMIGNvbHVtbgorZXhwbGFpbiAo Y29zdHMgb2ZmKQorc2VsZWN0ICogZnJvbSBwcmVkX3RhYiB0IHdoZXJlIHQuYSBpcyBudWxs OworCistLSBPbiB0aGUgY29udHJhcnksIGFuIElTX05VTEwgcXVhbCBpbiByZXN0cmljdGlv biBjbGF1c2VzIGNhbiBub3QgYmUgcmVkdWNlZAorLS0gdG8gY29uc3RhbnQtRkFMU0UgaWYg aXQncyBub3Qgb24gYSBOT1QgTlVMTCBjb2x1bW4KK2V4cGxhaW4gKGNvc3RzIG9mZikKK3Nl bGVjdCAqIGZyb20gcHJlZF90YWIgdCB3aGVyZSB0LmIgaXMgbnVsbDsKKworLS0gVGVzdHMg Zm9yIE9SIGNsYXVzZXMgaW4gcmVzdHJpY3Rpb24gY2xhdXNlcworZXhwbGFpbiAoY29zdHMg b2ZmKQorc2VsZWN0ICogZnJvbSBwcmVkX3RhYiB0IHdoZXJlIHQuYSBpcyBub3QgbnVsbCBv ciB0LmIgPSAxOworCitleHBsYWluIChjb3N0cyBvZmYpCitzZWxlY3QgKiBmcm9tIHByZWRf dGFiIHQgd2hlcmUgdC5iIGlzIG5vdCBudWxsIG9yIHQuYSA9IDE7CisKK2V4cGxhaW4gKGNv c3RzIG9mZikKK3NlbGVjdCAqIGZyb20gcHJlZF90YWIgdCB3aGVyZSB0LmEgaXMgbnVsbCBv ciB0LmMgaXMgbnVsbDsKKworZXhwbGFpbiAoY29zdHMgb2ZmKQorc2VsZWN0ICogZnJvbSBw cmVkX3RhYiB0IHdoZXJlIHQuYiBpcyBudWxsIG9yIHQuYyBpcyBudWxsOworCistLSBBbiBJ U19OT1RfTlVMTCBxdWFsIGluIGpvaW4gY2xhdXNlcyBjYW4gYmUgaWdub3JlZCBpZgorLS0g YSkgaXQncyBvbiBhIE5PVCBOVUxMIGNvbHVtbiwgYW5kCistLSBiKSBpdHMgVmFyIGlzIG5v dCBudWxsZWQgYnkgYW55IG91dGVyIGpvaW5zCitleHBsYWluIChjb3N0cyBvZmYpCitzZWxl Y3QgKiBmcm9tIHByZWRfdGFiIHQxIGxlZnQgam9pbiBwcmVkX3RhYiB0MiBvbiB0cnVlIGxl ZnQgam9pbiBwcmVkX3RhYiB0MyBvbiB0Mi5hIGlzIG5vdCBudWxsOworCistLSBPdGhlcndp c2UgdGhlIElTX05PVF9OVUxMIHF1YWwgaW4gam9pbiBjbGF1c2VzIGNhbm5vdCBiZSBpZ25v cmVkCitleHBsYWluIChjb3N0cyBvZmYpCitzZWxlY3QgKiBmcm9tIHByZWRfdGFiIHQxIGxl ZnQgam9pbiBwcmVkX3RhYiB0MiBvbiB0MS5hID0gMSBsZWZ0IGpvaW4gcHJlZF90YWIgdDMg b24gdDIuYSBpcyBub3QgbnVsbDsKKworLS0gQW4gSVNfTlVMTCBxdWFsIGluIGpvaW4gY2xh dXNlcyBjYW4gYmUgcmVkdWNlZCB0byBjb25zdGFudC1GQUxTRSBpZgorLS0gYSkgaXQncyBv biBhIE5PVCBOVUxMIGNvbHVtbiwgYW5kCistLSBiKSBpdHMgVmFyIGlzIG5vdCBudWxsZWQg YnkgYW55IG91dGVyIGpvaW5zCitleHBsYWluIChjb3N0cyBvZmYpCitzZWxlY3QgKiBmcm9t IHByZWRfdGFiIHQxIGxlZnQgam9pbiBwcmVkX3RhYiB0MiBvbiB0cnVlIGxlZnQgam9pbiBw cmVkX3RhYiB0MyBvbiB0Mi5hIGlzIG51bGwgYW5kIHQyLmIgPSAxOworCistLSBPdGhlcndp c2UgdGhlIElTX05VTEwgcXVhbCBpbiBqb2luIGNsYXVzZXMgY2Fubm90IGJlIHJlZHVjZWQg dG8gY29uc3RhbnQtRkFMU0UKK2V4cGxhaW4gKGNvc3RzIG9mZikKK3NlbGVjdCAqIGZyb20g cHJlZF90YWIgdDEgbGVmdCBqb2luIHByZWRfdGFiIHQyIG9uIHRydWUgbGVmdCBqb2luIHBy ZWRfdGFiIHQzIG9uIHQyLmEgaXMgbnVsbDsKKworLS0gVGVzdHMgZm9yIE9SIGNsYXVzZXMg aW4gam9pbiBjbGF1c2VzCitleHBsYWluIChjb3N0cyBvZmYpCitzZWxlY3QgKiBmcm9tIHBy ZWRfdGFiIHQxIGxlZnQgam9pbiBwcmVkX3RhYiB0MiBvbiB0cnVlIGxlZnQgam9pbiBwcmVk X3RhYiB0MyBvbiB0Mi5hIGlzIG5vdCBudWxsIG9yIHQyLmIgPSAxOworCitleHBsYWluIChj b3N0cyBvZmYpCitzZWxlY3QgKiBmcm9tIHByZWRfdGFiIHQxIGxlZnQgam9pbiBwcmVkX3Rh YiB0MiBvbiB0MS5hID0gMSBsZWZ0IGpvaW4gcHJlZF90YWIgdDMgb24gdDIuYSBpcyBub3Qg bnVsbCBvciB0Mi5iID0gMTsKKworZXhwbGFpbiAoY29zdHMgb2ZmKQorc2VsZWN0ICogZnJv bSBwcmVkX3RhYiB0MSBsZWZ0IGpvaW4gcHJlZF90YWIgdDIgb24gdHJ1ZSBsZWZ0IGpvaW4g cHJlZF90YWIgdDMgb24gKHQyLmEgaXMgbnVsbCBvciB0Mi5jIGlzIG51bGwpIGFuZCB0Mi5i ID0gMTsKKworZXhwbGFpbiAoY29zdHMgb2ZmKQorc2VsZWN0ICogZnJvbSBwcmVkX3RhYiB0 MSBsZWZ0IGpvaW4gcHJlZF90YWIgdDIgb24gdHJ1ZSBsZWZ0IGpvaW4gcHJlZF90YWIgdDMg b24gdDIuYSBpcyBudWxsIG9yIHQyLmMgaXMgbnVsbDsKKworZHJvcCB0YWJsZSBwcmVkX3Rh YjsKLS0gCjIuNDIuMAoK --------------xKL8GS9JhNEbKYlXa3YBFs09--