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 1tQNgG-002ASa-RK for pgsql-hackers@arkaria.postgresql.org; Wed, 25 Dec 2024 09:27:54 +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 1tQNgE-00CPq1-8H for pgsql-hackers@arkaria.postgresql.org; Wed, 25 Dec 2024 09:27:49 +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 1tQNgD-00CPps-OV for pgsql-hackers@lists.postgresql.org; Wed, 25 Dec 2024 09:27:49 +0000 Received: from lahtoruutu.iki.fi ([2a0b:5c81:1c1::37]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1tQNg5-001Wfv-S9 for pgsql-hackers@lists.postgresql.org; Wed, 25 Dec 2024 09:27:48 +0000 Received: from [192.168.1.110] (dsl-hkibng22-50ddb7-241.dhcp.inet.fi [80.221.183.241]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: hlinnaka) by lahtoruutu.iki.fi (Postfix) with ESMTPSA id 4YJ5yL1B6wz49Pyc; Wed, 25 Dec 2024 11:27:37 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=iki.fi; s=lahtoruutu; t=1735118859; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=qfDcFra897jjFDXplFdwaMaxRXhwam1176hlp7eJsNw=; b=dXDUN8vhbisBOcyZUk9x7NR9/n6vq4Nn9HRKVYS04rNhnPiSfS68tkYvD5EGfTc0r0qRF/ wHMI77gG3CaBTTC1u0BOZijWvg3bFxOiXreDgoaKCSU3C+5Vt/k5Tjx0QmpRCe6uxDm6SS DsrE05n2s7VQYf8EiMUqtJpwGLMjxnIOxnQmKYR8uqNl+t31EYJHFIoVXS+zoaC5wUKVOD kTJCDg3RnNyG1ERQ1DxnxwcbX86XpUgleKLIt40Grfh3PuPdqfZJMzlW4ShkXasXF/GQZE HCe2RrJKUiixPXkUBLVcPMjh5w0Xe/FlUCV6Pap03h8CHmsVxPHgsUW2Xeraqg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=iki.fi; s=lahtoruutu; t=1735118859; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=qfDcFra897jjFDXplFdwaMaxRXhwam1176hlp7eJsNw=; b=koUbQXWbfyzunzHwnErnydjBAE7izvlH+ZX76GhF3R1vKctfA+iohBIvBLq1RRIcRSfOvD 9gyE2CIaxdDBqb/c/ebPW2UOZog0qNzt91ABv1tcwI4/7JZJ0yksKGUgfnGVH5f3SiAyw0 3/rxi/GVAPD7XDtZRGwj8cv+DWYzsriLAHtSTMnUHJReMjHxurgU/708xD9G4zjyu+Y8zS yMBqFCBEgj5jGyHJc/lsFYJ8R5yyOQDXRc+Me9vLHVn4rGJ8s7Fyi7r/9Qdzqg/7cR8r/N wyfOw/uJmez4S+TubdgESCOxoziev54Sth5624ttm+BnXzf0UAe/IfByDHrPXA== ARC-Seal: i=1; s=lahtoruutu; d=iki.fi; t=1735118859; a=rsa-sha256; cv=none; b=t/RrjxSoftTgJ0FWJwkuzwA+wZV/1KtNI2ZCkh6Z0OoVODir/cGnYVLClUQdf9QArYMHj4 WxwmKBJe6b6b99dUjB0IiNoNNK1VAdOHLER4osfgBrZBDcLFhUQHVLtIRcPcPgPWLFWXJ0 7ErbxsV/nUchujA68hmHdRKXqRwiKFCMGoCqBpGXtJe0OK4KAdVUw4ZnRVfaT1eiSY4ij4 l8EfbXaptj1goRHGgqktMro9zFNEU5r0LdkW3yi5lgWL1xAgHGKr0tTZCKYKoNd/IljKCT Q//e4xrD2CuU8Pv/2Xv/L6vSFf9EVb96uXAZ9vh/FWWiHd4cVzxcEQwwEN4jbA== ARC-Authentication-Results: i=1; ORIGINATING; auth=pass smtp.auth=hlinnaka smtp.mailfrom=hlinnaka@iki.fi Content-Type: multipart/mixed; boundary="------------iMF7ghuB26K8qkIctd4JcLzQ" Message-ID: Date: Wed, 25 Dec 2024 11:27:38 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: Recovering from detoast-related catcache invalidations To: Michael Paquier Cc: Tom Lane , Noah Misch , Xiaoran Wang , pgsql-hackers@lists.postgresql.org, Andres Freund References: <329632.1705011663@sss.pgh.pa.us> <754826.1705090452@sss.pgh.pa.us> <793469.1705092433@sss.pgh.pa.us> <20240114201411.d0@rfd.leadboat.com> <20240924212036.0a.nmisch@google.com> <1066416.1734103822@sss.pgh.pa.us> <2234dc98-06fe-42ed-b5db-ac17384dc880@iki.fi> <1f11aacf-968c-4b8d-a917-31cb207b7a56@iki.fi> Content-Language: en-US From: Heikki Linnakangas 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. --------------iMF7ghuB26K8qkIctd4JcLzQ Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit On 24/12/2024 09:38, Michael Paquier wrote: > On Tue, Dec 24, 2024 at 12:18:09AM +0200, Heikki Linnakangas wrote: >> My first attempt was to insert the CatCTup or CatCList entry to the catcache >> before starting to build it, marked with a flag to indicate that the entry >> isn't fully built yet. But when I started to write that it got pretty >> invasive, and it felt easier to add another structure to hold the >> in-progress entries instead. >> >> From ec248c69cb42a0747ecc6a63ac4e4682cce2ee93 Mon Sep 17 00:00:00 2001 >> From: Heikki Linnakangas >> Date: Fri, 20 Dec 2024 18:37:44 +0200 >> Subject: [PATCH 1/1] Don't allow GetTransactionSnapshot() in logical decoding > > It seems to me that this is not what you intended to attach for the > catcache inconsistency fix? Right, sorry, here are the correct patches. -- Heikki Linnakangas Neon (https://neon.tech) --------------iMF7ghuB26K8qkIctd4JcLzQ Content-Type: text/x-patch; charset=UTF-8; name="v2-0001-Demonstrate-catcache-list-invalidation-bug.patch" Content-Disposition: attachment; filename="v2-0001-Demonstrate-catcache-list-invalidation-bug.patch" Content-Transfer-Encoding: base64 RnJvbSA5ZmI0NzNiYTZkMjUyOTk4OTY3ZjZkNjlhNTY2YzJiZTFkOGQ3Zjc5IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IFR1ZSwgMjQgRGVjIDIwMjQgMDA6MTM6MzYgKzAyMDAK U3ViamVjdDogW1BBVENIIHYyIDEvMl0gRGVtb25zdHJhdGUgY2F0Y2FjaGUgbGlzdCBpbnZh bGlkYXRpb24gYnVnCgotLS0KIHNyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL2NhdGNhY2hlLmMg ICAgICAgfCAgMyArCiBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfbWlzYy9tZXNvbi5idWlsZCAg IHwgIDEgKwogc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X21pc2MvdC8wMDdfYnVncy5wbCB8IDk2 ICsrKysrKysrKysrKysrKysrKysrKysrKwogMyBmaWxlcyBjaGFuZ2VkLCAxMDAgaW5zZXJ0 aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L21vZHVsZXMvdGVzdF9taXNj L3QvMDA3X2J1Z3MucGwKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9j YXRjYWNoZS5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvY2F0Y2FjaGUuYwppbmRleCBl ZTMwM2RjNTAxZC4uNGYwNmI0NTIzOWMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxz L2NhY2hlL2NhdGNhY2hlLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvY2F0Y2Fj aGUuYwpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgInV0aWxzL2NhdGNhY2hlLmgiCiAj aW5jbHVkZSAidXRpbHMvZGF0dW0uaCIKICNpbmNsdWRlICJ1dGlscy9mbWdyb2lkcy5oIgor I2luY2x1ZGUgInV0aWxzL2luamVjdGlvbl9wb2ludC5oIgogI2luY2x1ZGUgInV0aWxzL2lu dmFsLmgiCiAjaW5jbHVkZSAidXRpbHMvbWVtdXRpbHMuaCIKICNpbmNsdWRlICJ1dGlscy9y ZWwuaCIKQEAgLTE4MTEsNiArMTgxMiw4IEBAIFNlYXJjaENhdENhY2hlTGlzdChDYXRDYWNo ZSAqY2FjaGUsCiAKIAkJCXN0YWxlID0gZmFsc2U7CiAKKwkJCUlOSkVDVElPTl9QT0lOVCgi Y2F0Y2FjaGUtbGlzdC1taXNzLXN5c3RhYmxlLXNjYW4tc3RhcnRlZCIpOworCiAJCQl3aGls ZSAoSGVhcFR1cGxlSXNWYWxpZChudHAgPSBzeXN0YWJsZV9nZXRuZXh0KHNjYW5kZXNjKSkp CiAJCQl7CiAJCQkJdWludDMyCQloYXNoVmFsdWU7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9t b2R1bGVzL3Rlc3RfbWlzYy9tZXNvbi5idWlsZCBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9t aXNjL21lc29uLmJ1aWxkCmluZGV4IDI4M2ZmYTc1MWFhLi4zYWJjZDQ3MWMwMyAxMDA2NDQK LS0tIGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X21pc2MvbWVzb24uYnVpbGQKKysrIGIvc3Jj L3Rlc3QvbW9kdWxlcy90ZXN0X21pc2MvbWVzb24uYnVpbGQKQEAgLTE1LDYgKzE1LDcgQEAg dGVzdHMgKz0gewogICAgICAgJ3QvMDA0X2lvX2RpcmVjdC5wbCcsCiAgICAgICAndC8wMDVf dGltZW91dHMucGwnLAogICAgICAgJ3QvMDA2X3NpZ25hbF9hdXRvdmFjdXVtLnBsJywKKyAg ICAgICd0LzAwN19idWdzLnBsJywKICAgICBdLAogICB9LAogfQpkaWZmIC0tZ2l0IGEvc3Jj L3Rlc3QvbW9kdWxlcy90ZXN0X21pc2MvdC8wMDdfYnVncy5wbCBiL3NyYy90ZXN0L21vZHVs ZXMvdGVzdF9taXNjL3QvMDA3X2J1Z3MucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMDAuLjQ4YWRmMmY3YjY1Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3Qv bW9kdWxlcy90ZXN0X21pc2MvdC8wMDdfYnVncy5wbApAQCAtMCwwICsxLDk2IEBACisKKyMg Q29weXJpZ2h0IChjKSAyMDI0LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91 cAorCit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzIEZBVEFMID0+ICdhbGwnOwordXNlIGxv Y2FsZTsKKwordXNlIFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXI7Cit1c2UgUG9zdGdyZVNR TDo6VGVzdDo6VXRpbHM7Cit1c2UgVGltZTo6SGlSZXMgcXcodXNsZWVwKTsKK3VzZSBUZXN0 OjpNb3JlOworCisjIFRlc3QgdGltZW91dHMgdGhhdCB3aWxsIGNhdXNlIEZBVEFMIGVycm9y cy4gIFRoaXMgdGVzdCByZWxpZXMgb24gaW5qZWN0aW9uCisjIHBvaW50cyB0byBhd2FpdCBh IHRpbWVvdXQgb2NjdXJyZW5jZS4gUmVseWluZyBvbiBzbGVlcCBwcm92ZWQgdG8gYmUgdW5z dGFibGUKKyMgb24gYnVpbGRmYXJtLiBJdCdzIGRpZmZpY3VsdCB0byByZWx5IG9uIHRoZSBO T1RJQ0UgaW5qZWN0aW9uIHBvaW50IGJlY2F1c2UKKyMgdGhlIGJhY2tlbmQgdW5kZXIgRkFU QUwgZXJyb3IgY2FuIGJlaGF2ZSBkaWZmZXJlbnRseS4KKworaWYgKCRFTlZ7ZW5hYmxlX2lu amVjdGlvbl9wb2ludHN9IG5lICd5ZXMnKQoreworCXBsYW4gc2tpcF9hbGwgPT4gJ0luamVj dGlvbiBwb2ludHMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGJ1aWxkJzsKK30KKworIyBOb2Rl IGluaXRpYWxpemF0aW9uCitteSAkbm9kZSA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXIt Pm5ldygnbWFzdGVyJyk7Ciskbm9kZS0+aW5pdCgpOworJG5vZGUtPnN0YXJ0OworCisjIENo ZWNrIGlmIHRoZSBleHRlbnNpb24gaW5qZWN0aW9uX3BvaW50cyBpcyBhdmFpbGFibGUsIGFz IGl0IG1heSBiZQorIyBwb3NzaWJsZSB0aGF0IHRoaXMgc2NyaXB0IGlzIHJ1biB3aXRoIGlu c3RhbGxjaGVjaywgd2hlcmUgdGhlIG1vZHVsZQorIyB3b3VsZCBub3QgYmUgaW5zdGFsbGVk IGJ5IGRlZmF1bHQuCitpZiAoISRub2RlLT5jaGVja19leHRlbnNpb24oJ2luamVjdGlvbl9w b2ludHMnKSkKK3sKKwlwbGFuIHNraXBfYWxsID0+ICdFeHRlbnNpb24gaW5qZWN0aW9uX3Bv aW50cyBub3QgaW5zdGFsbGVkJzsKK30KKworJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMn LCAnQ1JFQVRFIEVYVEVOU0lPTiBpbmplY3Rpb25fcG9pbnRzOycpOworCisKK3N1YiByYW5k U3RyIHsKKwlteSAkbGVuID0gc2hpZnQ7CisJbXkgQGNoYXJzID0gKCJBIi4uIloiLCAiYSIu LiJ6IiwgIjAiLi4iOSIpOworCXJldHVybiBqb2luICcnLCBtYXAgeyBAY2hhcnNbcmFuZCBA Y2hhcnNdIH0gMSAuLiAkbGVuOworfQorCisjIFhYWDogSWYgeW91IG1ha2UgdGhpcyBzaG9y dGVyLCB0aGUgcGdfcHJvYyB0dXBsZSBpcyBub3QgdG9hc3RlZCwgYW5kIHRoZSB0ZXN0IHBh c3NlcworbXkgJGxvbmd0ZXh0ID0gcmFuZFN0cigxMDAwMCk7ICAgICMgdGVzdCBmYWlscwor I215ICRsb25ndGV4dCA9IHJhbmRTdHIoMTApOyAgICAgICAjIHRlc3QgcGFzc2VzCisKKyRu b2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXFbCisgICAgQ1JFQVRFIEZVTkNUSU9OIGZv b2Z1bmMoZHVtbXkgaW50ZWdlcikgUkVUVVJOUyBpbnRlZ2VyIEFTIFwkXCQgU0VMRUNUIDE7 IC8qICRsb25ndGV4dCAqLyBcJFwkIExBTkdVQUdFIFNRTAorXSk7CisKK215ICRwc3FsX3Nl c3Npb24gPSAkbm9kZS0+YmFja2dyb3VuZF9wc3FsKCdwb3N0Z3JlcycpOworbXkgJHBzcWxf c2Vzc2lvbjIgPSAkbm9kZS0+YmFja2dyb3VuZF9wc3FsKCdwb3N0Z3JlcycpOworCisjIFNl dCBpbmplY3Rpb24gcG9pbnQgaW4gdGhlIHNlc3Npb24sIHRvIHBhdXNlIHdoaWxlIHBvcHVs YXRpbmcgdGhlIGNhdGNhY2hlIGxpc3QKKyRwc3FsX3Nlc3Npb24tPnF1ZXJ5X3NhZmUoCisJ cXFbCisgICAgU0VMRUNUIGluamVjdGlvbl9wb2ludHNfc2V0X2xvY2FsKCk7CisgICAgU0VM RUNUIGluamVjdGlvbl9wb2ludHNfYXR0YWNoKCdjYXRjYWNoZS1saXN0LW1pc3Mtc3lzdGFi bGUtc2Nhbi1zdGFydGVkJywgJ3dhaXQnKTsKK10pOworCisjIFRoaXMgcGF1c2VzIG9uIHRo ZSBpbmplY3Rpb24gcG9pbnQgd2hpbGUgcG9wdWxhdGluZyBjYXRjYWNoZSBsaXN0IGZvcgor IyBmdW5jdGlvbnMgd2l0aCBuYW1lICJmb29mdW5jIgorJHBzcWxfc2Vzc2lvbi0+cXVlcnlf dW50aWwoCisJcXIvc3RhcnRpbmdfYmdfcHNxbC8sIHEoCisgICBcZWNobyBzdGFydGluZ19i Z19wc3FsCisgICBTRUxFQ1QgZm9vZnVuYygxKTsKKykpOworCisjIFdoaWxlIHRoZSBmaXJz dCBzZXNzaW9uIGlzIGJ1aWxkaW5nIHRoZSBjYXRjYWNoZSBsaXN0LCBjcmVhdGUgYSBuZXcK KyMgZnVuY3Rpb24gdGhhdCBvdmVybG9hZHMgdGhlIHNhbWUgbmFtZS4gVGhpcyBzZW5kcyBh IGNhdGNhY2hlIGludmFsaWRhdGlvbi4KKyRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywg cXFbCisgICAgQ1JFQVRFIEZVTkNUSU9OIGZvb2Z1bmMoKSBSRVRVUk5TIGludGVnZXIgQVMg XCRcJCBTRUxFQ1QgMTIzIFwkXCQgTEFOR1VBR0UgU1FMCitdKTsKKworIyBDb250aW51ZSB0 aGUgcGF1c2VkIHNlc3Npb24uIEl0IHdpbGwgY29udGludWUgdG8gY29uc3RydWN0IHRoZSBj YXRjYWNoZQorIyBsaXN0LCBhbmQgd2lsbCBhY2NlcHQgaW52YWxpZGF0aW9ucyB3aGlsZSBk b2luZyB0aGF0LCBidXQgaXQgbWlzc2VzIHRoZQorIyBuZXcgZnVuY3Rpb24gd2UganVzdCBj cmVhdGVkLiBUaGUgIlNFTEVDVCBmb29mdW5jKDEpIiBxdWVyeSB3aWxsIG5vdworIyBmaW5p c2guCiskcHNxbF9zZXNzaW9uMi0+cXVlcnlfc2FmZShxcVsKKyAgICBTRUxFQ1QgaW5qZWN0 aW9uX3BvaW50c193YWtldXAoJ2NhdGNhY2hlLWxpc3QtbWlzcy1zeXN0YWJsZS1zY2FuLXN0 YXJ0ZWQnKTsKKyAgICBTRUxFQ1QgaW5qZWN0aW9uX3BvaW50c19kZXRhY2goJ2NhdGNhY2hl LWxpc3QtbWlzcy1zeXN0YWJsZS1zY2FuLXN0YXJ0ZWQnKTsKK10pOworCisjIERlbW9uc3Ry YXRlIHRoYXQgd2UgY2FuIHJ1biBvdGhlciBxdWVyaWVzIGluIHRoZSBzZXNzaW9uLiAoTm90 IG5lY2Vzc2FyeSwgYnV0CisjIG1ha2VzIGl0IG1vcmUgY2xlYXIgdGhhdCB0aGUgc2Vzc2lv biBpcyBwZXJtYW5lbnRseSBtaXNzaW5nIHRoZSBjYXRjYWNoZSBlbnRyeSkKKyRwc3FsX3Nl c3Npb24tPnF1ZXJ5X3NhZmUoIlNFTEVDVCBub3coKTsiKTsKKworIyBUaGlzIHNob3VsZCBm aW5kIHRoZSBuZXcgZnVuY3Rpb24sIGJ1dCBpdCBkb2VzIG5vdC4KKyRwc3FsX3Nlc3Npb24t PnF1ZXJ5X3NhZmUoIlNFTEVDVCBmb29mdW5jKCk7Iik7CisKK29rKCRwc3FsX3Nlc3Npb24t PnF1aXQpOworb2soJHBzcWxfc2Vzc2lvbjItPnF1aXQpOworCitkb25lX3Rlc3RpbmcoKTsK LS0gCjIuMzkuNQoK --------------iMF7ghuB26K8qkIctd4JcLzQ Content-Type: text/x-patch; charset=UTF-8; name="v2-0002-Fix-bug-in-catcache-invalidation.patch" Content-Disposition: attachment; filename="v2-0002-Fix-bug-in-catcache-invalidation.patch" Content-Transfer-Encoding: base64 RnJvbSA5ZWQyMjNjMzY1OTFiOWFiNzc3ZGU0OGU4ZTNmMjhlMzIxZDNmOWQ0IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IFR1ZSwgMjQgRGVjIDIwMjQgMDA6MDc6MzggKzAyMDAK U3ViamVjdDogW1BBVENIIHYyIDIvMl0gRml4IGJ1ZyBpbiBjYXRjYWNoZSBpbnZhbGlkYXRp b24KCklmIGEgbmV3IGVudHJ5IGlzIGFkZGVkIHRoYXQgYmVsb25ncyB0byBhIGNhdGNoZSBs aXN0IGVudHJ5LCBhbmQgY2FjaGUKaW52YWxpZGF0aW9uIGhhcHBlbnMgd2hpbGUgdGhlIGxp c3QgZW50cnkgaXMgYmVpbmcgYnVpbHQsIHRoZSBuZXcgZW50cnkKY2FuIGJlIG1pc3NlZC4K ClRvIGZpeCwgY2hhbmdlIHRoZSB3YXkgd2UgZGV0ZWN0IGNvbmN1cnJlbnQgaW52YWxpZGF0 aW9ucyB3aGlsZSBhCmNhdGNhY2hlIGVudHJ5IGlzIGJlaW5nIGJ1aWx0LiBLZWVwIGEgc3Rh Y2sgb2YgZW50cmllcyB0aGF0IGFyZSBiZWluZwpidWlsdCwgYW5kIGFwcGx5IGNhY2hlIGlu dmFsaWRhdGlvbiB0byB0aG9zZSBlbnRyaWVzIGluIGFkZGl0aW9uIHRvIHRoZQpyZWFsIGNh dGNhY2hlIGVudHJpZXMuCgpEaXNjdXNzaW9uOiBYWFgKLS0tCiBzcmMvYmFja2VuZC91dGls cy9jYWNoZS9jYXRjYWNoZS5jIHwgMTg1ICsrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0t CiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCAgIHwgICAxICsKIDIgZmlsZXMg Y2hhbmdlZCwgMTEyIGluc2VydGlvbnMoKyksIDc0IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL2NhdGNhY2hlLmMgYi9zcmMvYmFja2VuZC91 dGlscy9jYWNoZS9jYXRjYWNoZS5jCmluZGV4IDRmMDZiNDUyMzljLi4yMzMyYzUyYzJiZCAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvY2F0Y2FjaGUuYworKysgYi9z cmMvYmFja2VuZC91dGlscy9jYWNoZS9jYXRjYWNoZS5jCkBAIC00MSw2ICs0MSwyMyBAQAog I2luY2x1ZGUgInV0aWxzL3Jlc293bmVyLmgiCiAjaW5jbHVkZSAidXRpbHMvc3lzY2FjaGUu aCIKIAorLyoKKyAqIElmIGEgY2F0Y2FjaGUgaW52YWxpZGF0aW9uIGhhcHBlbnMgd2hpbGUg d2UgYXJlIGluIHRoZSBtaWRkbGUgb2YgY3JlYXRpbmcgYQorICogY2F0Y2FjaGUgZW50cnkg KG9yIGxpc3QpLCBpdCBtaWdodCBhcHBseSB0byB0aGUgZW50cnkgd2UncmUgY3JlYXRpbmcs CisgKiBtYWtpbmcgaXQgaW52YWxpZCBiZWZvcmUgaXQncyBpbnNlcnRlZCB0byB0aGUgY2F0 Y2FjaGUuICBUbyBjYXRjaCBzdWNoCisgKiBjYXNlcywgd2UgaGF2ZSBhIHN0YWNrIG9mICJj cmVhdGUtaW4tcHJvZ3Jlc3MiIGVudHJpZXMuIENhY2hlIGludmFsaWRhdGlvbgorICogbWFy a3MgYW55IG1hdGNoaW5nIGVudHJpZXMgaW4gdGhlIHN0YWNrIGFzIGRlYWQsIGluIGFkZGl0 aW9uIHRvIHRoZSBhY3R1YWwKKyAqIENhdENUdXAgYW5kIENhdENMaXN0IGVudHJpZXMgLgor ICovCit0eXBlZGVmIHN0cnVjdCBDYXRDQ3JlYXRpbmcKK3sKKwlDYXRDYWNoZSAgICpjYWNo ZTsKKwl1aW50MzIJCWhhc2hfdmFsdWU7CisJYm9vbAkJbGlzdDsKKwlib29sCQlkZWFkOwor CXN0cnVjdCBDYXRDQ3JlYXRpbmcgKm5leHQ7Cit9IENhdENDcmVhdGluZzsKK3N0YXRpYyBD YXRDQ3JlYXRpbmcgKmNhdGNhY2hlX2NyZWF0aW5nX3N0YWNrID0gTlVMTDsKIAogIC8qICNk ZWZpbmUgQ0FDSEVERUJVRyAqLwkvKiB0dXJucyBERUJVRyBlbG9ncyBvbiAqLwogCkBAIC05 Myw4ICsxMTAsNyBAQCBzdGF0aWMgdm9pZCBDYXRDYWNoZVJlbW92ZUNMaXN0KENhdENhY2hl ICpjYWNoZSwgQ2F0Q0xpc3QgKmNsKTsKIHN0YXRpYyB2b2lkIFJlaGFzaENhdENhY2hlKENh dENhY2hlICpjcCk7CiBzdGF0aWMgdm9pZCBSZWhhc2hDYXRDYWNoZUxpc3RzKENhdENhY2hl ICpjcCk7CiBzdGF0aWMgdm9pZCBDYXRhbG9nQ2FjaGVJbml0aWFsaXplQ2FjaGUoQ2F0Q2Fj aGUgKmNhY2hlKTsKLXN0YXRpYyBDYXRDVHVwICpDYXRhbG9nQ2FjaGVDcmVhdGVFbnRyeShD YXRDYWNoZSAqY2FjaGUsCi0JCQkJCQkJCQkJSGVhcFR1cGxlIG50cCwgU3lzU2NhbkRlc2Mg c2NhbmRlc2MsCitzdGF0aWMgQ2F0Q1R1cCAqQ2F0YWxvZ0NhY2hlQ3JlYXRlRW50cnkoQ2F0 Q2FjaGUgKmNhY2hlLCBIZWFwVHVwbGUgbnRwLAogCQkJCQkJCQkJCURhdHVtICphcmd1bWVu dHMsCiAJCQkJCQkJCQkJdWludDMyIGhhc2hWYWx1ZSwgSW5kZXggaGFzaEluZGV4KTsKIApA QCAtNjYyLDYgKzY3OCwxNiBAQCBDYXRDYWNoZUludmFsaWRhdGUoQ2F0Q2FjaGUgKmNhY2hl LCB1aW50MzIgaGFzaFZhbHVlKQogCQkJLyogY291bGQgYmUgbXVsdGlwbGUgbWF0Y2hlcywg c28ga2VlcCBsb29raW5nISAqLwogCQl9CiAJfQorCisJLyogQWxzbyBpbnZhbGlkYXRlIGFu eSBlbnRyaWVzIHRoYXQgYXJlIGJlaW5nIGJ1aWx0ICovCisJZm9yIChDYXRDQ3JlYXRpbmcg KmUgPSBjYXRjYWNoZV9jcmVhdGluZ19zdGFjazsgZSAhPSBOVUxMOyBlID0gZS0+bmV4dCkK Kwl7CisJCWlmIChlLT5jYWNoZSA9PSBjYWNoZSkKKwkJeworCQkJaWYgKGUtPmxpc3QgfHwg ZS0+aGFzaF92YWx1ZSA9PSBoYXNoVmFsdWUpCisJCQkJZS0+ZGVhZCA9IHRydWU7CisJCX0K Kwl9CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTc0NCw2ICs3NzAsMTMgQEAgUmVzZXRDYXRh bG9nQ2FjaGUoQ2F0Q2FjaGUgKmNhY2hlKQogI2VuZGlmCiAJCX0KIAl9CisKKwkvKiBBbHNv IGludmFsaWRhdGUgYW55IGVudHJpZXMgdGhhdCBhcmUgYmVpbmcgYnVpbHQgKi8KKwlmb3Ig KENhdENDcmVhdGluZyAqZSA9IGNhdGNhY2hlX2NyZWF0aW5nX3N0YWNrOyBlICE9IE5VTEw7 IGUgPSBlLT5uZXh0KQorCXsKKwkJaWYgKGUtPmNhY2hlID09IGNhY2hlKQorCQkJZS0+ZGVh ZCA9IHRydWU7CisJfQogfQogCiAvKgpAQCAtMTQ5Myw3ICsxNTI2LDcgQEAgU2VhcmNoQ2F0 Q2FjaGVNaXNzKENhdENhY2hlICpjYWNoZSwKIAogCQl3aGlsZSAoSGVhcFR1cGxlSXNWYWxp ZChudHAgPSBzeXN0YWJsZV9nZXRuZXh0KHNjYW5kZXNjKSkpCiAJCXsKLQkJCWN0ID0gQ2F0 YWxvZ0NhY2hlQ3JlYXRlRW50cnkoY2FjaGUsIG50cCwgc2NhbmRlc2MsIE5VTEwsCisJCQlj dCA9IENhdGFsb2dDYWNoZUNyZWF0ZUVudHJ5KGNhY2hlLCBudHAsIE5VTEwsCiAJCQkJCQkJ CQkJIGhhc2hWYWx1ZSwgaGFzaEluZGV4KTsKIAkJCS8qIHVwb24gZmFpbHVyZSwgd2UgbXVz dCBzdGFydCB0aGUgc2NhbiBvdmVyICovCiAJCQlpZiAoY3QgPT0gTlVMTCkKQEAgLTE1Mjgs NyArMTU2MSw3IEBAIFNlYXJjaENhdENhY2hlTWlzcyhDYXRDYWNoZSAqY2FjaGUsCiAJCWlm IChJc0Jvb3RzdHJhcFByb2Nlc3NpbmdNb2RlKCkpCiAJCQlyZXR1cm4gTlVMTDsKIAotCQlj dCA9IENhdGFsb2dDYWNoZUNyZWF0ZUVudHJ5KGNhY2hlLCBOVUxMLCBOVUxMLCBhcmd1bWVu dHMsCisJCWN0ID0gQ2F0YWxvZ0NhY2hlQ3JlYXRlRW50cnkoY2FjaGUsIE5VTEwsIGFyZ3Vt ZW50cywKIAkJCQkJCQkJCSBoYXNoVmFsdWUsIGhhc2hJbmRleCk7CiAKIAkJLyogQ3JlYXRp bmcgYSBuZWdhdGl2ZSBjYWNoZSBlbnRyeSBzaG91bGRuJ3QgZmFpbCAqLwpAQCAtMTY2NSw2 ICsxNjk4LDggQEAgU2VhcmNoQ2F0Q2FjaGVMaXN0KENhdENhY2hlICpjYWNoZSwKIAlIZWFw VHVwbGUJbnRwOwogCU1lbW9yeUNvbnRleHQgb2xkY3h0OwogCWludAkJCWk7CisJdm9sYXRp bGUgQ2F0Q0NyZWF0aW5nIGNyZWF0aW5nX2xpc3Q7CisJYm9vbAkJZmlyc3RfaXRlciA9IHRy dWU7CiAKIAkvKgogCSAqIG9uZS10aW1lIHN0YXJ0dXAgb3ZlcmhlYWQgZm9yIGVhY2ggY2Fj aGUKQEAgLTE3NzksMTIgKzE4MTQsMjUgQEAgU2VhcmNoQ2F0Q2FjaGVMaXN0KENhdENhY2hl ICpjYWNoZSwKIAkgKi8KIAljdGxpc3QgPSBOSUw7CiAKKwkvKgorCSAqIENhY2hlIGludmFs aWRhdGlvbiBjYW4gaGFwcGVuIHdoaWxlIHdlJ3JlIGJ1aWxkaW5nIHRoZSBsaXN0LgorCSAq IENhdGFsb2dDYWNoZUNyZWF0ZUVudHJ5KCkgaGFuZGxlcyBjb25jdXJyZW50IGludmFsaWRh dGlvbiBvZiBpbmRpdmlkdWFsCisJICogdHVwbGVzLCBidXQgaXQncyBhbHNvIHBvc3NpYmxl IHRoYXQgYSBuZXcgZW50cnkgaXMgY29uY3VycmVudGx5IGFkZGVkCisJICogdGhhdCB3ZSBt aWdodCBtaXNzLiBQdXNoIGFuICJpbi1wcm9ncmVzcyIgZW50cnkgdGhhdCB3aWxsIHJlY2Vp dmUgdGhlCisJICogaW52YWxpZGF0aW9uLCB1bnRpbCB3ZSBoYXZlIGJ1aWx0IHRoZSBmaW5h bCBsaXN0IGVudHJ5LgorCSAqLworCWNyZWF0aW5nX2xpc3QuY2FjaGUgPSBjYWNoZTsKKwlj cmVhdGluZ19saXN0Lmhhc2hfdmFsdWUgPSBsSGFzaFZhbHVlOworCWNyZWF0aW5nX2xpc3Qu bGlzdCA9IHRydWU7CisJY3JlYXRpbmdfbGlzdC5kZWFkID0gZmFsc2U7CisJY3JlYXRpbmdf bGlzdC5uZXh0ID0gY2F0Y2FjaGVfY3JlYXRpbmdfc3RhY2s7CisJY2F0Y2FjaGVfY3JlYXRp bmdfc3RhY2sgPSAoQ2F0Q0NyZWF0aW5nICopICZjcmVhdGluZ19saXN0OworCiAJUEdfVFJZ KCk7CiAJewogCQlTY2FuS2V5RGF0YSBjdXJfc2tleVtDQVRDQUNIRV9NQVhLRVlTXTsKIAkJ UmVsYXRpb24JcmVsYXRpb247CiAJCVN5c1NjYW5EZXNjIHNjYW5kZXNjOwotCQlib29sCQlz dGFsZTsKIAogCQlyZWxhdGlvbiA9IHRhYmxlX29wZW4oY2FjaGUtPmNjX3JlbG9pZCwgQWNj ZXNzU2hhcmVMb2NrKTsKIApAQCAtMTgxMCw5ICsxODU4LDEwIEBAIFNlYXJjaENhdENhY2hl TGlzdChDYXRDYWNoZSAqY2FjaGUsCiAJCQkvKiBUaGUgbGlzdCB3aWxsIGJlIG9yZGVyZWQg aWZmIHdlIGFyZSBkb2luZyBhbiBpbmRleCBzY2FuICovCiAJCQlvcmRlcmVkID0gKHNjYW5k ZXNjLT5pcmVsICE9IE5VTEwpOwogCi0JCQlzdGFsZSA9IGZhbHNlOworCQkJY3JlYXRpbmdf bGlzdC5kZWFkID0gZmFsc2U7CiAKLQkJCUlOSkVDVElPTl9QT0lOVCgiY2F0Y2FjaGUtbGlz dC1taXNzLXN5c3RhYmxlLXNjYW4tc3RhcnRlZCIpOworCQkJaWYgKGZpcnN0X2l0ZXIpCisJ CQkJSU5KRUNUSU9OX1BPSU5UKCJjYXRjYWNoZS1saXN0LW1pc3Mtc3lzdGFibGUtc2Nhbi1z dGFydGVkIik7CiAKIAkJCXdoaWxlIChIZWFwVHVwbGVJc1ZhbGlkKG50cCA9IHN5c3RhYmxl X2dldG5leHQoc2NhbmRlc2MpKSkKIAkJCXsKQEAgLTE4NTYsMzAgKzE5MDUsMTMgQEAgU2Vh cmNoQ2F0Q2FjaGVMaXN0KENhdENhY2hlICpjYWNoZSwKIAkJCQlpZiAoIWZvdW5kKQogCQkJ CXsKIAkJCQkJLyogV2UgZGlkbid0IGZpbmQgYSB1c2FibGUgZW50cnksIHNvIG1ha2UgYSBu ZXcgb25lICovCi0JCQkJCWN0ID0gQ2F0YWxvZ0NhY2hlQ3JlYXRlRW50cnkoY2FjaGUsIG50 cCwgc2NhbmRlc2MsIE5VTEwsCisJCQkJCWN0ID0gQ2F0YWxvZ0NhY2hlQ3JlYXRlRW50cnko Y2FjaGUsIG50cCwgTlVMTCwKIAkJCQkJCQkJCQkJCSBoYXNoVmFsdWUsIGhhc2hJbmRleCk7 CisKIAkJCQkJLyogdXBvbiBmYWlsdXJlLCB3ZSBtdXN0IHN0YXJ0IHRoZSBzY2FuIG92ZXIg Ki8KIAkJCQkJaWYgKGN0ID09IE5VTEwpCiAJCQkJCXsKLQkJCQkJCS8qCi0JCQkJCQkgKiBS ZWxlYXNlIHJlZmNvdW50cyBvbiBhbnkgaXRlbXMgd2UgYWxyZWFkeSBoYWQuICBXZQotCQkJ CQkJICogZGFyZSBub3QgdHJ5IHRvIGZyZWUgdGhlbSBpZiB0aGV5J3JlIG5vdwotCQkJCQkJ ICogdW5yZWZlcmVuY2VkLCBzaW5jZSBhbiBlcnJvciB3aGlsZSBkb2luZyB0aGF0IHdvdWxk Ci0JCQkJCQkgKiByZXN1bHQgaW4gdGhlIFBHX0NBVENIIGJlbG93IGRvaW5nIGV4dHJhIHJl ZmNvdW50Ci0JCQkJCQkgKiBkZWNyZW1lbnRzLiAgQmVzaWRlcywgd2UnbGwgbGlrZWx5IHJl LWFkb3B0IHRob3NlCi0JCQkJCQkgKiBpdGVtcyBpbiB0aGUgbmV4dCBpdGVyYXRpb24sIHNv IGl0J3Mgbm90IHdvcnRoCi0JCQkJCQkgKiBjb21wbGljYXRpbmcgbWF0dGVycyB0byB0cnkg dG8gZ2V0IHJpZCBvZiB0aGVtLgotCQkJCQkJICovCi0JCQkJCQlmb3JlYWNoKGN0bGlzdF9p dGVtLCBjdGxpc3QpCi0JCQkJCQl7Ci0JCQkJCQkJY3QgPSAoQ2F0Q1R1cCAqKSBsZmlyc3Qo Y3RsaXN0X2l0ZW0pOwotCQkJCQkJCUFzc2VydChjdC0+Y19saXN0ID09IE5VTEwpOwotCQkJ CQkJCUFzc2VydChjdC0+cmVmY291bnQgPiAwKTsKLQkJCQkJCQljdC0+cmVmY291bnQtLTsK LQkJCQkJCX0KLQkJCQkJCS8qIFJlc2V0IGN0bGlzdCBpbiBwcmVwYXJhdGlvbiBmb3IgbmV3 IHRyeSAqLwotCQkJCQkJY3RsaXN0ID0gTklMOwotCQkJCQkJc3RhbGUgPSB0cnVlOworCQkJ CQkJY3JlYXRpbmdfbGlzdC5kZWFkID0gdHJ1ZTsKIAkJCQkJCWJyZWFrOwogCQkJCQl9CiAJ CQkJfQpAQCAtMTg5MSw3ICsxOTIzLDMyIEBAIFNlYXJjaENhdENhY2hlTGlzdChDYXRDYWNo ZSAqY2FjaGUsCiAJCQl9CiAKIAkJCXN5c3RhYmxlX2VuZHNjYW4oc2NhbmRlc2MpOwotCQl9 IHdoaWxlIChzdGFsZSk7CisKKwkJCS8qIHVwb24gZmFpbHVyZSwgd2UgbXVzdCBzdGFydCB0 aGUgc2NhbiBvdmVyICovCisJCQlpZiAoY3JlYXRpbmdfbGlzdC5kZWFkKQorCQkJeworCQkJ CS8qCisJCQkJICogUmVsZWFzZSByZWZjb3VudHMgb24gYW55IGl0ZW1zIHdlIGFscmVhZHkg aGFkLiAgV2UgZGFyZSBub3QKKwkJCQkgKiB0cnkgdG8gZnJlZSB0aGVtIGlmIHRoZXkncmUg bm93IHVucmVmZXJlbmNlZCwgc2luY2UgYW4KKwkJCQkgKiBlcnJvciB3aGlsZSBkb2luZyB0 aGF0IHdvdWxkIHJlc3VsdCBpbiB0aGUgUEdfQ0FUQ0ggYmVsb3cKKwkJCQkgKiBkb2luZyBl eHRyYSByZWZjb3VudCBkZWNyZW1lbnRzLiAgQmVzaWRlcywgd2UnbGwgbGlrZWx5CisJCQkJ ICogcmUtYWRvcHQgdGhvc2UgaXRlbXMgaW4gdGhlIG5leHQgaXRlcmF0aW9uLCBzbyBpdCdz IG5vdAorCQkJCSAqIHdvcnRoIGNvbXBsaWNhdGluZyBtYXR0ZXJzIHRvIHRyeSB0byBnZXQg cmlkIG9mIHRoZW0uCisJCQkJICovCisJCQkJZm9yZWFjaChjdGxpc3RfaXRlbSwgY3RsaXN0 KQorCQkJCXsKKwkJCQkJY3QgPSAoQ2F0Q1R1cCAqKSBsZmlyc3QoY3RsaXN0X2l0ZW0pOwor CQkJCQlBc3NlcnQoY3QtPmNfbGlzdCA9PSBOVUxMKTsKKwkJCQkJQXNzZXJ0KGN0LT5yZWZj b3VudCA+IDApOworCQkJCQljdC0+cmVmY291bnQtLTsKKwkJCQl9CisJCQkJLyogUmVzZXQg Y3RsaXN0IGluIHByZXBhcmF0aW9uIGZvciBuZXcgdHJ5ICovCisJCQkJY3RsaXN0ID0gTklM OworCQkJCWZpcnN0X2l0ZXIgPSBmYWxzZTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWJy ZWFrOworCQl9IHdoaWxlICh0cnVlKTsKIAogCQl0YWJsZV9jbG9zZShyZWxhdGlvbiwgQWNj ZXNzU2hhcmVMb2NrKTsKIApAQCAtMTkxOSw2ICsxOTc2LDcgQEAgU2VhcmNoQ2F0Q2FjaGVM aXN0KENhdENhY2hlICpjYWNoZSwKIAl9CiAJUEdfQ0FUQ0goKTsKIAl7CisJCWNhdGNhY2hl X2NyZWF0aW5nX3N0YWNrID0gY3JlYXRpbmdfbGlzdC5uZXh0OwogCQlmb3JlYWNoKGN0bGlz dF9pdGVtLCBjdGxpc3QpCiAJCXsKIAkJCWN0ID0gKENhdENUdXAgKikgbGZpcnN0KGN0bGlz dF9pdGVtKTsKQEAgLTE5MzcsNiArMTk5NSw4IEBAIFNlYXJjaENhdENhY2hlTGlzdChDYXRD YWNoZSAqY2FjaGUsCiAJCVBHX1JFX1RIUk9XKCk7CiAJfQogCVBHX0VORF9UUlkoKTsKKwlj YXRjYWNoZV9jcmVhdGluZ19zdGFjayA9IGNyZWF0aW5nX2xpc3QubmV4dDsKKwlBc3NlcnQo IWNyZWF0aW5nX2xpc3QuZGVhZCk7CiAKIAljbC0+Y2xfbWFnaWMgPSBDTF9NQUdJQzsKIAlj bC0+bXlfY2FjaGUgPSBjYWNoZTsKQEAgLTIwMDksMjMgKzIwNjksNiBAQCBSZWxlYXNlQ2F0 Q2FjaGVMaXN0V2l0aE93bmVyKENhdENMaXN0ICpsaXN0LCBSZXNvdXJjZU93bmVyIHJlc293 bmVyKQogfQogCiAKLS8qCi0gKiBlcXVhbFR1cGxlCi0gKgkJQXJlIHRoZXNlIHR1cGxlcyBt ZW1jbXAoKS1lcXVhbD8KLSAqLwotc3RhdGljIGJvb2wKLWVxdWFsVHVwbGUoSGVhcFR1cGxl IGEsIEhlYXBUdXBsZSBiKQotewotCXVpbnQzMgkJYWxlbjsKLQl1aW50MzIJCWJsZW47Ci0K LQlhbGVuID0gYS0+dF9sZW47Ci0JYmxlbiA9IGItPnRfbGVuOwotCXJldHVybiAoYWxlbiA9 PSBibGVuICYmCi0JCQltZW1jbXAoKGNoYXIgKikgYS0+dF9kYXRhLAotCQkJCSAgIChjaGFy ICopIGItPnRfZGF0YSwgYmxlbikgPT0gMCk7Ci19Ci0KIC8qCiAgKiBDYXRhbG9nQ2FjaGVD cmVhdGVFbnRyeQogICoJCUNyZWF0ZSBhIG5ldyBDYXRDVHVwIGVudHJ5LCBjb3B5aW5nIHRo ZSBnaXZlbiBIZWFwVHVwbGUgYW5kIG90aGVyCkBAIC0yMDMzLDE3ICsyMDc2LDE2IEBAIGVx dWFsVHVwbGUoSGVhcFR1cGxlIGEsIEhlYXBUdXBsZSBiKQogICoKICAqIFRvIGNyZWF0ZSBh IG5vcm1hbCBjYWNoZSBlbnRyeSwgbnRwIG11c3QgYmUgdGhlIEhlYXBUdXBsZSBqdXN0IGZl dGNoZWQKICAqIGZyb20gc2NhbmRlc2MsIGFuZCAiYXJndW1lbnRzIiBpcyBub3QgdXNlZC4g IFRvIGNyZWF0ZSBhIG5lZ2F0aXZlIGNhY2hlCi0gKiBlbnRyeSwgcGFzcyBOVUxMIGZvciBu dHAgYW5kIHNjYW5kZXNjOyB0aGVuICJhcmd1bWVudHMiIGlzIHRoZSBjYWNoZQotICoga2V5 cyB0byB1c2UuICBJbiBlaXRoZXIgY2FzZSwgaGFzaFZhbHVlL2hhc2hJbmRleCBhcmUgdGhl IGhhc2ggdmFsdWVzCi0gKiBjb21wdXRlZCBmcm9tIHRoZSBjYWNoZSBrZXlzLgorICogZW50 cnksIHBhc3MgTlVMTCBmb3IgbnRwOyB0aGVuICJhcmd1bWVudHMiIGlzIHRoZSBjYWNoZSBr ZXlzIHRvIHVzZS4KKyAqIEluIGVpdGhlciBjYXNlLCBoYXNoVmFsdWUvaGFzaEluZGV4IGFy ZSB0aGUgaGFzaCB2YWx1ZXMgY29tcHV0ZWQgZnJvbQorICogdGhlIGNhY2hlIGtleXMuCiAg KgogICogUmV0dXJucyBOVUxMIGlmIHdlIGF0dGVtcHQgdG8gZGV0b2FzdCB0aGUgdHVwbGUg YW5kIG9ic2VydmUgdGhhdCBpdAogICogYmVjYW1lIHN0YWxlLiAgKFRoaXMgY2Fubm90IGhh cHBlbiBmb3IgYSBuZWdhdGl2ZSBlbnRyeS4pICBDYWxsZXIgbXVzdAogICogcmV0cnkgdGhl IHR1cGxlIGxvb2t1cCBpbiB0aGF0IGNhc2UuCiAgKi8KIHN0YXRpYyBDYXRDVHVwICoKLUNh dGFsb2dDYWNoZUNyZWF0ZUVudHJ5KENhdENhY2hlICpjYWNoZSwgSGVhcFR1cGxlIG50cCwg U3lzU2NhbkRlc2Mgc2NhbmRlc2MsCi0JCQkJCQlEYXR1bSAqYXJndW1lbnRzLAorQ2F0YWxv Z0NhY2hlQ3JlYXRlRW50cnkoQ2F0Q2FjaGUgKmNhY2hlLCBIZWFwVHVwbGUgbnRwLCBEYXR1 bSAqYXJndW1lbnRzLAogCQkJCQkJdWludDMyIGhhc2hWYWx1ZSwgSW5kZXggaGFzaEluZGV4 KQogewogCUNhdENUdXAgICAgKmN0OwpAQCAtMjA3NiwzOCArMjExOCwzMyBAQCBDYXRhbG9n Q2FjaGVDcmVhdGVFbnRyeShDYXRDYWNoZSAqY2FjaGUsIEhlYXBUdXBsZSBudHAsIFN5c1Nj YW5EZXNjIHNjYW5kZXNjLAogCQkgKi8KIAkJaWYgKEhlYXBUdXBsZUhhc0V4dGVybmFsKG50 cCkpCiAJCXsKLQkJCWJvb2wJCW5lZWRfY21wID0gSXNJbnBsYWNlVXBkYXRlT2lkKGNhY2hl LT5jY19yZWxvaWQpOwotCQkJSGVhcFR1cGxlCWJlZm9yZSA9IE5VTEw7Ci0JCQlib29sCQlt YXRjaGVzID0gdHJ1ZTsKLQotCQkJaWYgKG5lZWRfY21wKQotCQkJCWJlZm9yZSA9IGhlYXBf Y29weXR1cGxlKG50cCk7Ci0JCQlkdHAgPSB0b2FzdF9mbGF0dGVuX3R1cGxlKG50cCwgY2Fj aGUtPmNjX3R1cGRlc2MpOworCQkJdm9sYXRpbGUgQ2F0Q0NyZWF0aW5nIGNyZWF0aW5nOwog CiAJCQkvKgogCQkJICogVGhlIHR1cGxlIGNvdWxkIGJlY29tZSBzdGFsZSB3aGlsZSB3ZSBh cmUgZG9pbmcgdG9hc3QgdGFibGUKLQkJCSAqIGFjY2VzcyAoc2luY2UgQWNjZXB0SW52YWxp ZGF0aW9uTWVzc2FnZXMgY2FuIHJ1biB0aGVuKS4KLQkJCSAqIGVxdWFsVHVwbGUoKSBkZXRl Y3RzIHN0YWxlbmVzcyBmcm9tIGlucGxhY2UgdXBkYXRlcywgd2hpbGUKLQkJCSAqIHN5c3Rh YmxlX3JlY2hlY2tfdHVwbGUoKSBkZXRlY3RzIHN0YWxlbmVzcyBmcm9tIG5vcm1hbCB1cGRh dGVzLgotCQkJICoKLQkJCSAqIFdoaWxlIHRoaXMgZXF1YWxUdXBsZSgpIGZvbGxvd3MgdGhl IHVzdWFsIHJ1bGUgb2YgcmVhZGluZyB3aXRoCi0JCQkgKiBhIHBpbiBhbmQgbm8gYnVmZmVy IGxvY2ssIGl0IHdhcnJhbnRzIHN1c3BpY2lvbiBzaW5jZSBhbgotCQkJICogaW5wbGFjZSB1 cGRhdGUgY291bGQgYXBwZWFyIGF0IGFueSBtb21lbnQuICBJdCdzIHNhZmUgYmVjYXVzZQot CQkJICogdGhlIGlucGxhY2UgdXBkYXRlIHNlbmRzIGFuIGludmFsaWRhdGlvbiB0aGF0IGNh bid0IHJlb3JkZXIKLQkJCSAqIGJlZm9yZSB0aGUgaW5wbGFjZSBoZWFwIGNoYW5nZS4gIElm IHRoZSBoZWFwIGNoYW5nZSByZWFjaGVzCi0JCQkgKiB0aGlzIHByb2Nlc3MganVzdCBhZnRl ciBlcXVhbFR1cGxlKCkgbG9va3MsIHdlJ3ZlIG5vdCBtaXNzZWQKLQkJCSAqIGl0cyBpbnZh bC4KKwkJCSAqIGFjY2VzcyAoc2luY2UgQWNjZXB0SW52YWxpZGF0aW9uTWVzc2FnZXMgY2Fu IHJ1biB0aGVuKS4gVGhlCisJCQkgKiBpbnZhbGlkYXRpb24gd2lsbCBtYXJrIG91ciAnY3Jl YXRpbmcnIGVudHJ5IGFzIGRlYWQuCiAJCQkgKi8KLQkJCWlmIChuZWVkX2NtcCkKKwkJCWNy ZWF0aW5nLmNhY2hlID0gY2FjaGU7CisJCQljcmVhdGluZy5oYXNoX3ZhbHVlID0gaGFzaFZh bHVlOworCQkJY3JlYXRpbmcubGlzdCA9IGZhbHNlOworCQkJY3JlYXRpbmcuZGVhZCA9IGZh bHNlOworCQkJY3JlYXRpbmcubmV4dCA9IGNhdGNhY2hlX2NyZWF0aW5nX3N0YWNrOworCQkJ Y2F0Y2FjaGVfY3JlYXRpbmdfc3RhY2sgPSAoQ2F0Q0NyZWF0aW5nICopICZjcmVhdGluZzsK KworCQkJUEdfVFJZKCk7CiAJCQl7Ci0JCQkJbWF0Y2hlcyA9IGVxdWFsVHVwbGUoYmVmb3Jl LCBudHApOwotCQkJCWhlYXBfZnJlZXR1cGxlKGJlZm9yZSk7CisJCQkJZHRwID0gdG9hc3Rf ZmxhdHRlbl90dXBsZShudHAsIGNhY2hlLT5jY190dXBkZXNjKTsKIAkJCX0KLQkJCWlmICgh bWF0Y2hlcyB8fCAhc3lzdGFibGVfcmVjaGVja190dXBsZShzY2FuZGVzYywgbnRwKSkKKwkJ CVBHX0ZJTkFMTFkoKTsKIAkJCXsKLQkJCQloZWFwX2ZyZWV0dXBsZShkdHApOwotCQkJCXJl dHVybiBOVUxMOworCQkJCUFzc2VydChjYXRjYWNoZV9jcmVhdGluZ19zdGFjayA9PSAmY3Jl YXRpbmcpOworCQkJCWNhdGNhY2hlX2NyZWF0aW5nX3N0YWNrID0gY3JlYXRpbmcubmV4dDsK IAkJCX0KKwkJCVBHX0VORF9UUlkoKTsKKworCQkJaWYgKGNyZWF0aW5nLmRlYWQpCisJCQkJ cmV0dXJuIE5VTEw7CiAJCX0KIAkJZWxzZQogCQkJZHRwID0gbnRwOwpkaWZmIC0tZ2l0IGEv c3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQv dHlwZWRlZnMubGlzdAppbmRleCBlMWM0ZjkxM2Y4NC4uZTFkNjM3NzY1ODEgMTAwNjQ0Ci0t LSBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CisrKyBiL3NyYy90b29scy9w Z2luZGVudC90eXBlZGVmcy5saXN0CkBAIC0zODMsNiArMzgzLDcgQEAgQ2FzZVRlc3RFeHBy CiBDYXNlV2hlbgogQ2FzaAogQ2FzdEluZm8KK0NhdENDcmVhdGluZwogQ2F0Q0xpc3QKIENh dENUdXAKIENhdENhY2hlCi0tIAoyLjM5LjUKCg== --------------iMF7ghuB26K8qkIctd4JcLzQ--