Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ag7G2-0000XN-IU for pgsql-hackers@arkaria.postgresql.org; Wed, 16 Mar 2016 08:56:46 +0000 Received: from localhost ([127.0.0.1] helo=postgresql.org) by malur.postgresql.org with smtp (Exim 4.84_2) (envelope-from ) id 1ag7G1-00079m-PF for pgsql-hackers@arkaria.postgresql.org; Wed, 16 Mar 2016 08:56:45 +0000 Received: from makus.postgresql.org ([2001:4800:1501:1::229]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.84_2) (envelope-from ) id 1ag7Fz-000794-Ta for pgsql-hackers@postgresql.org; Wed, 16 Mar 2016 08:56:44 +0000 Received: from jiboia.ensmp.fr ([194.214.158.137]) by makus.postgresql.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ag7Fv-0001ls-B1 for pgsql-hackers@postgresql.org; Wed, 16 Mar 2016 08:56:42 +0000 Received: from cri.ensmp.fr (nat-any-rnt.cri.ensmp.fr [195.83.117.252]) (authenticated bits=0) by jiboia.ensmp.fr (8.15.2/8.15.1/JMMC-22/Oct/2013) with ESMTPSA id u2G8uWOL027303 (version=TLSv1 cipher=ECDHE-RSA-AES256-SHA bits=256 verify=NO); Wed, 16 Mar 2016 09:56:32 +0100 Date: Wed, 16 Mar 2016 09:56:32 +0100 (CET) From: Fabien COELHO X-X-Sender: fabien@sto To: Alvaro Herrera cc: Michael Paquier , "pgsql-hackers@postgresql.org" Subject: Re: pgbench stats per script & other stuff In-Reply-To: <20160315215850.GA41105@alvherre.pgsql> Message-ID: References: <20160315215850.GA41105@alvherre.pgsql> User-Agent: Alpine 2.10 (DEB 1266 2009-07-14) MIME-Version: 1.0 Content-Type: MULTIPART/MIXED; BOUNDARY="8323329-2042481995-1458118593=:3528" X-Miltered: at jiboia.ensmp.fr with ID 56E91FC0.000 by Joe's j-chkmail (http : // j-chkmail dot ensmp dot fr)! X-j-chkmail-Auth: USER-ID fabien.coelho X-j-chkmail-Enveloppe: 56E91FC0.000 from nat-any-rnt.cri.ensmp.fr/nat-any-rnt.cri.ensmp.fr/195.83.117.252/cri.ensmp.fr/ X-Pg-Spam-Score: -1.9 (-) List-Archive: List-Help: List-ID: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: X-Mailing-List: pgsql-hackers Precedence: bulk Sender: pgsql-hackers-owner@postgresql.org This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. --8323329-2042481995-1458118593=:3528 Content-Type: TEXT/PLAIN; format=flowed; charset=US-ASCII Hello Alvaro, >>> If somebody specifies thousands of -f switches, they will waste a few >>> bytes with each, but I'm hardly concerned about a few dozen kilobytes >>> there ... >> >> Ok, so you prefer a memory leak. I hate it on principle. > > I don't "prefer" memory leaks -- I prefer interfaces that make sense. C is not designed to return two things, and if it is what is needed it looks awkward whatever is done. The static variable trick is dirty, but it is the minimal fuss solution, IMO. So we are only trading awkward code against awkward code. > Speaking of which, I don't think the arrangement in your patch really > does. I know I suggested it, Yep:-) > but now that I look again, it turns out I chose badly and you > implemented a bad idea, so can we go back and fix it, please? Yep. I have very little time available, so I'm trying to minimize the effort. I've tried "argue my point with committers", but it has proven very ineffective. I've switched to "do whatever is asked if it still works", but it is not very effective either. > What I now think should really happen is that the current sql_scripts > array, currently under an anonymous struct, should be a typedef, say > ParsedScript, Why not. > and get a new member for the weight; Hm... it already contains "weight". > process_file and process_builtin return a ParsedScript. The weight and > Command ** should not be part of script_t at all. Sure. > In fact, with ParsedScript I don't think we need to give a name to the > anon struct used for builtin scripts. It is useful that it has a name so that find_builtin can return it. > Rename the current sql_scripts.name to "desc", to mirror what > is actually put in there from the builtin array struct. Make addScript > receive a ParsedScript and weight, fill in the weight into the struct, > and put it to the array after sanity-checking. (I'm OK with keeping > "name" instead of renaming to "desc", if that change becomes too > invasive.) See attached a v24 & v25. The awkwardness in v24 is that functions allocate a struct which is freed afterwards, really just to return two data. Whether it is better or worst than a static is really a matter of taste. Version v25 results a script which is then passed as an argument, so it avoid the dynamic allocation & later free. Maybe it is better. I had to cut short the error handling if a file does not exists, though, and it passes a struct by value. Feel free to pick whichever you like most. > No need for N_BUILTIN; we can use lengthof(builtin_script) instead. Indeed. "lengthof" does not seem to be standard... ok, it is a macro in some header file. I really wanted to avoid an ugly sizeof divide hack, but as it is hidden elsewhere this is fine. -- Fabien. --8323329-2042481995-1458118593=:3528 Content-Type: TEXT/x-diff; name=pgbench-script-stats-24.patch Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: attachment; filename=pgbench-script-stats-24.patch ZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvcGdiZW5jaC5zZ21sIGIv ZG9jL3NyYy9zZ21sL3JlZi9wZ2JlbmNoLnNnbWwNCmluZGV4IGNjODBiM2Yu LmRkM2ZiMWQgMTAwNjQ0DQotLS0gYS9kb2Mvc3JjL3NnbWwvcmVmL3BnYmVu Y2guc2dtbA0KKysrIGIvZG9jL3NyYy9zZ21sL3JlZi9wZ2JlbmNoLnNnbWwN CkBAIC0yNjIsMTEgKzI2MiwxMyBAQCBwZ2JlbmNoIDxvcHRpb25hbD4gPHJl cGxhY2VhYmxlPm9wdGlvbnM8Lz4gPC9vcHRpb25hbD4gPHJlcGxhY2VhYmxl PmRibmFtZTwvPg0KIA0KICAgICA8dmFyaWFibGVsaXN0Pg0KICAgICAgPHZh cmxpc3RlbnRyeT4NCi0gICAgICA8dGVybT48b3B0aW9uPi1iPC8+IDxyZXBs YWNlYWJsZT5zY3JpcHRuYW1lPC8+PC90ZXJtPg0KLSAgICAgIDx0ZXJtPjxv cHRpb24+LS1idWlsdGluPC8+IDxyZXBsYWNlYWJsZT5zY3JpcHRuYW1lPC8+ PC90ZXJtPg0KKyAgICAgIDx0ZXJtPjxvcHRpb24+LWI8Lz4gPHJlcGxhY2Vh YmxlPnNjcmlwdG5hbWVbQHdlaWdodF08Lz48L3Rlcm0+DQorICAgICAgPHRl cm0+PG9wdGlvbj4tLWJ1aWx0aW48Lz49PHJlcGxhY2VhYmxlPnNjcmlwdG5h bWVbQHdlaWdodF08Lz48L3Rlcm0+DQogICAgICAgPGxpc3RpdGVtPg0KICAg ICAgICA8cGFyYT4NCiAgICAgICAgIEFkZCB0aGUgc3BlY2lmaWVkIGJ1aWx0 aW4gc2NyaXB0IHRvIHRoZSBsaXN0IG9mIGV4ZWN1dGVkIHNjcmlwdHMuDQor ICAgICAgICBBbiBvcHRpb25hbCBpbnRlZ2VyIHdlaWdodCBhZnRlciA8bGl0 ZXJhbD5APC8+IGFsbG93cyB0byBhZGp1c3QgdGhlDQorICAgICAgICBwcm9i YWJpbGl0eSBvZiBkcmF3aW5nIHRoZSBzY3JpcHQuICBJZiBub3Qgc3BlY2lm aWVkLCBpdCBpcyBzZXQgdG8gMS4NCiAgICAgICAgIEF2YWlsYWJsZSBidWls dGluIHNjcmlwdHMgYXJlOiA8bGl0ZXJhbD50cGNiLWxpa2U8Lz4sDQogICAg ICAgICA8bGl0ZXJhbD5zaW1wbGUtdXBkYXRlPC8+IGFuZCA8bGl0ZXJhbD5z ZWxlY3Qtb25seTwvPi4NCiAgICAgICAgIFVuYW1iaWd1b3VzIHByZWZpeGVz IG9mIGJ1aWx0aW4gbmFtZXMgYXJlIGFjY2VwdGVkLg0KQEAgLTMyMiwxMiAr MzI0LDE0IEBAIHBnYmVuY2ggPG9wdGlvbmFsPiA8cmVwbGFjZWFibGU+b3B0 aW9uczwvPiA8L29wdGlvbmFsPiA8cmVwbGFjZWFibGU+ZGJuYW1lPC8+DQog ICAgICA8L3Zhcmxpc3RlbnRyeT4NCiANCiAgICAgIDx2YXJsaXN0ZW50cnk+ DQotICAgICAgPHRlcm0+PG9wdGlvbj4tZjwvPiA8cmVwbGFjZWFibGU+Zmls ZW5hbWU8Lz48L3Rlcm0+DQotICAgICAgPHRlcm0+PG9wdGlvbj4tLWZpbGU9 PC8+PHJlcGxhY2VhYmxlPmZpbGVuYW1lPC8+PC90ZXJtPg0KKyAgICAgIDx0 ZXJtPjxvcHRpb24+LWY8Lz4gPHJlcGxhY2VhYmxlPmZpbGVuYW1lW0B3ZWln aHRdPC8+PC90ZXJtPg0KKyAgICAgIDx0ZXJtPjxvcHRpb24+LS1maWxlPTwv PjxyZXBsYWNlYWJsZT5maWxlbmFtZVtAd2VpZ2h0XTwvPjwvdGVybT4NCiAg ICAgICA8bGlzdGl0ZW0+DQogICAgICAgIDxwYXJhPg0KICAgICAgICAgQWRk IGEgdHJhbnNhY3Rpb24gc2NyaXB0IHJlYWQgZnJvbSA8cmVwbGFjZWFibGU+ ZmlsZW5hbWU8Lz4gdG8NCiAgICAgICAgIHRoZSBsaXN0IG9mIGV4ZWN1dGVk IHNjcmlwdHMuDQorICAgICAgICBBbiBvcHRpb25hbCBpbnRlZ2VyIHdlaWdo dCBhZnRlciA8bGl0ZXJhbD5APC8+IGFsbG93cyB0byBhZGp1c3QgdGhlDQor ICAgICAgICBwcm9iYWJpbGl0eSBvZiBkcmF3aW5nIHRoZSB0ZXN0Lg0KICAg ICAgICAgU2VlIGJlbG93IGZvciBkZXRhaWxzLg0KICAgICAgICA8L3BhcmE+ DQogICAgICAgPC9saXN0aXRlbT4NCkBAIC02ODcsOSArNjkxLDEzIEBAIHBn YmVuY2ggPG9wdGlvbmFsPiA8cmVwbGFjZWFibGU+b3B0aW9uczwvPiA8L29w dGlvbmFsPiA8cmVwbGFjZWFibGU+ZGJuYW1lPC8+DQogICA8dGl0bGU+V2hh dCBpcyB0aGUgPHF1b3RlPlRyYW5zYWN0aW9uPC8+IEFjdHVhbGx5IFBlcmZv cm1lZCBpbiA8YXBwbGljYXRpb24+cGdiZW5jaDwvYXBwbGljYXRpb24+Pzwv dGl0bGU+DQogDQogICA8cGFyYT4NCi0gICBQZ2JlbmNoIGV4ZWN1dGVzIHRl c3Qgc2NyaXB0cyBjaG9zZW4gcmFuZG9tbHkgZnJvbSBhIHNwZWNpZmllZCBs aXN0Lg0KKyAgIDxhcHBsaWNhdGlvbj5wZ2JlbmNoPC8+IGV4ZWN1dGVzIHRl c3Qgc2NyaXB0cyBjaG9zZW4gcmFuZG9tbHkNCisgICBmcm9tIGEgc3BlY2lm aWVkIGxpc3QuDQogICAgVGhleSBpbmNsdWRlIGJ1aWx0LWluIHNjcmlwdHMg d2l0aCA8b3B0aW9uPi1iPC8+IGFuZA0KICAgIHVzZXItcHJvdmlkZWQgY3Vz dG9tIHNjcmlwdHMgd2l0aCA8b3B0aW9uPi1mPC8+Lg0KKyAgIEVhY2ggc2Ny aXB0IG1heSBiZSBnaXZlbiBhIHJlbGF0aXZlIHdlaWdodCBzcGVjaWZpZWQg YWZ0ZXIgYQ0KKyAgIDxsaXRlcmFsPkA8Lz4gc28gYXMgdG8gY2hhbmdlIGl0 cyBkcmF3aW5nIHByb2JhYmlsaXR5Lg0KKyAgIFRoZSBkZWZhdWx0IHdlaWdo dCBpcyA8bGl0ZXJhbD4xPC8+Lg0KICA8L3BhcmE+DQogDQogICA8cGFyYT4N CkBAIC0xMTk0LDEyICsxMjAyLDExIEBAIG51bWJlciBvZiBjbGllbnRzOiAx MA0KIG51bWJlciBvZiB0aHJlYWRzOiAxDQogbnVtYmVyIG9mIHRyYW5zYWN0 aW9ucyBwZXIgY2xpZW50OiAxMDAwDQogbnVtYmVyIG9mIHRyYW5zYWN0aW9u cyBhY3R1YWxseSBwcm9jZXNzZWQ6IDEwMDAwLzEwMDAwDQorbGF0ZW5jeSBh dmVyYWdlID0gMTUuODQ0IG1zDQorbGF0ZW5jeSBzdGRkZXYgPSAyLjcxNSBt cw0KIHRwcyA9IDYxOC43NjQ1NTUgKGluY2x1ZGluZyBjb25uZWN0aW9ucyBl c3RhYmxpc2hpbmcpDQogdHBzID0gNjIyLjk3NzY5OCAoZXhjbHVkaW5nIGNv bm5lY3Rpb25zIGVzdGFibGlzaGluZykNCi1TUUwgc2NyaXB0IDE6ICZsdDti dWlsdGluOiBUUEMtQiAoc29ydCBvZikmZ3Q7DQotIC0gMTAwMDAgdHJhbnNh Y3Rpb25zICgxMDAuMCUgb2YgdG90YWwsIHRwcyA9IDYxOC43NjQ1NTUpDQot IC0gbGF0ZW5jeSBhdmVyYWdlID0gMTUuODQ0IG1zDQotIC0gbGF0ZW5jeSBz dGRkZXYgPSAyLjcxNSBtcw0KK3NjcmlwdCBzdGF0aXN0aWNzOg0KICAtIHN0 YXRlbWVudCBsYXRlbmNpZXMgaW4gbWlsbGlzZWNvbmRzOg0KICAgICAgICAg MC4wMDQzODYgICAgICAgIFxzZXQgbmJyYW5jaGVzIDEgKiA6c2NhbGUNCiAg ICAgICAgIDAuMDAxMzQzICAgICAgICBcc2V0IG50ZWxsZXJzIDEwICogOnNj YWxlDQpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ2JlbmNoL3BnYmVuY2guYyBi L3NyYy9iaW4vcGdiZW5jaC9wZ2JlbmNoLmMNCmluZGV4IDVhM2M2Y2QuLjA0 ZGViMmMgMTAwNjQ0DQotLS0gYS9zcmMvYmluL3BnYmVuY2gvcGdiZW5jaC5j DQorKysgYi9zcmMvYmluL3BnYmVuY2gvcGdiZW5jaC5jDQpAQCAtMzgsNiAr MzgsNyBAQA0KICNpbmNsdWRlICJwb3J0YWJpbGl0eS9pbnN0cl90aW1lLmgi DQogDQogI2luY2x1ZGUgPGN0eXBlLmg+DQorI2luY2x1ZGUgPGxpbWl0cy5o Pg0KICNpbmNsdWRlIDxtYXRoLmg+DQogI2luY2x1ZGUgPHNpZ25hbC5oPg0K ICNpbmNsdWRlIDxzeXMvdGltZS5oPg0KQEAgLTE4MCw2ICsxODEsOCBAQCBj aGFyCSAgICpsb2dpbiA9IE5VTEw7DQogY2hhcgkgICAqZGJOYW1lOw0KIGNv bnN0IGNoYXIgKnByb2duYW1lOw0KIA0KKyNkZWZpbmUgV1NFUCAnQCcJCQkJ Lyogd2VpZ2h0IHNlcGFyYXRvciAqLw0KKw0KIHZvbGF0aWxlIGJvb2wgdGlt ZXJfZXhjZWVkZWQgPSBmYWxzZTsJLyogZmxhZyBmcm9tIHNpZ25hbCBoYW5k bGVyICovDQogDQogLyogdmFyaWFibGUgZGVmaW5pdGlvbnMgKi8NCkBAIC0y OTgsMjYgKzMwMSwzMCBAQCB0eXBlZGVmIHN0cnVjdA0KIAlTaW1wbGVTdGF0 cyBzdGF0czsJCQkvKiB0aW1lIHNwZW50IGluIHRoaXMgY29tbWFuZCAqLw0K IH0gQ29tbWFuZDsNCiANCi1zdGF0aWMgc3RydWN0DQordHlwZWRlZiBzdHJ1 Y3QNCiB7DQotCWNvbnN0IGNoYXIgKm5hbWU7DQorCWNvbnN0IGNoYXIgKmRl c2M7DQorCWludAkJCXdlaWdodDsNCiAJQ29tbWFuZCAgICoqY29tbWFuZHM7 DQotCVN0YXRzRGF0YSBzdGF0czsNCi19CXNxbF9zY3JpcHRbTUFYX1NDUklQ VFNdOwkvKiBTUUwgc2NyaXB0IGZpbGVzICovDQorCVN0YXRzRGF0YQlzdGF0 czsNCit9IFBhcnNlZFNjcmlwdDsNCisNCitzdGF0aWMgUGFyc2VkU2NyaXB0 IHNxbF9zY3JpcHRbTUFYX1NDUklQVFNdOwkvKiBTUUwgc2NyaXB0IGZpbGVz ICovDQogc3RhdGljIGludAludW1fc2NyaXB0czsJCS8qIG51bWJlciBvZiBz Y3JpcHRzIGluIHNxbF9zY3JpcHRbXSAqLw0KIHN0YXRpYyBpbnQJbnVtX2Nv bW1hbmRzID0gMDsJLyogdG90YWwgbnVtYmVyIG9mIENvbW1hbmQgc3RydWN0 cyAqLw0KK3N0YXRpYyBpbnQ2NCB0b3RhbF93ZWlnaHQgPSAwOw0KKw0KIHN0 YXRpYyBpbnQJZGVidWcgPSAwOwkJCS8qIGRlYnVnIGZsYWcgKi8NCiANCiAv KiBEZWZpbmUgYnVpbHRpbiB0ZXN0IHNjcmlwdHMgKi8NCi0jZGVmaW5lIE5f QlVJTFRJTiAzDQotc3RhdGljIHN0cnVjdA0KK3R5cGVkZWYgc3RydWN0IHNj cmlwdF90DQogew0KIAljaGFyCSAgICpuYW1lOwkJCS8qIHZlcnkgc2hvcnQg bmFtZSBmb3IgLWIgLi4uICovDQogCWNoYXIJICAgKmRlc2M7CQkJLyogc2hv cnQgZGVzY3JpcHRpb24gKi8NCi0JY2hhcgkgICAqY29tbWFuZHM7CQkvKiBh Y3R1YWwgcGdiZW5jaCBzY3JpcHQgKi8NCi19DQorCWNoYXIJICAgKnNjcmlw dDsJCQkvKiBhY3R1YWwgcGdiZW5jaCBzY3JpcHQgKi8NCit9IHNjcmlwdF90 Ow0KIA0KLQkJCWJ1aWx0aW5fc2NyaXB0W10gPQ0KK3N0YXRpYyBzY3JpcHRf dCBidWlsdGluX3NjcmlwdFtdID0NCiB7DQogCXsNCiAJCSJ0cGNiLWxpa2Ui LA0KQEAgLTM5Myw5ICs0MDAsOSBAQCB1c2FnZSh2b2lkKQ0KIAkgIiAgLS10 YWJsZXNwYWNlPVRBQkxFU1BBQ0UgIGNyZWF0ZSB0YWJsZXMgaW4gdGhlIHNw ZWNpZmllZCB0YWJsZXNwYWNlXG4iDQogCQkgICAiICAtLXVubG9nZ2VkLXRh YmxlcyAgICAgICAgY3JlYXRlIHRhYmxlcyBhcyB1bmxvZ2dlZCB0YWJsZXNc biINCiAJCSAgICJcbk9wdGlvbnMgdG8gc2VsZWN0IHdoYXQgdG8gcnVuOlxu Ig0KLQkJICAgIiAgLWIsIC0tYnVpbHRpbj1OQU1FICAgICAgIGFkZCBidWl0 aW4gc2NyaXB0ICh1c2UgXCItYiBsaXN0XCIgdG8gZGlzcGxheVxuIg0KLQkJ ICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZSBzY3Jp cHRzKVxuIg0KLQkJICAgIiAgLWYsIC0tZmlsZT1GSUxFTkFNRSAgICAgIGFk ZCB0cmFuc2FjdGlvbiBzY3JpcHQgZnJvbSBGSUxFTkFNRVxuIg0KKwkJICAg IiAgLWIsIC0tYnVpbHRpbj1OQU1FW0BXXSAgIGFkZCBidWlsdGluIHNjcmlw dCBOQU1FIHdlaWdodGVkIGF0IFcgKGRlZmF1bHQ6IDEpXG4iDQorCQkgICAi ICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVzZSBcIi1iIGxpc3RcIiB0 byBsaXN0IGF2YWlsYWJsZSBzY3JpcHRzKVxuIg0KKwkJICAgIiAgLWYsIC0t ZmlsZT1GSUxFTkFNRVtAV10gIGFkZCBzY3JpcHQgRklMRU5BTUUgd2VpZ2h0 ZWQgYXQgVyAoZGVmYXVsdDogMSlcbiINCiAJCSAgICIgIC1OLCAtLXNraXAt c29tZS11cGRhdGVzICBza2lwIHVwZGF0ZXMgb2YgcGdiZW5jaF90ZWxsZXJz IGFuZCBwZ2JlbmNoX2JyYW5jaGVzXG4iDQogCQkgICAiICAgICAgICAgICAg ICAgICAgICAgICAgICAgKHNhbWUgYXMgXCItYiBzaW1wbGUtdXBkYXRlXCIp XG4iDQogCQkgICAiICAtUywgLS1zZWxlY3Qtb25seSAgICAgICAgcGVyZm9y bSBTRUxFQ1Qtb25seSB0cmFuc2FjdGlvbnNcbiINCkBAIC0xMzEzLDEzICsx MzIwLDIzIEBAIGNsaWVudERvbmUoQ1N0YXRlICpzdCwgYm9vbCBvaykNCiAJ cmV0dXJuIGZhbHNlOwkJCQkvKiBhbHdheXMgZmFsc2UgKi8NCiB9DQogDQor LyogcmV0dXJuIGEgc2NyaXB0IG51bWJlciB3aXRoIGEgd2VpZ2h0ZWQgY2hv aWNlLiAqLw0KIHN0YXRpYyBpbnQNCiBjaG9vc2VTY3JpcHQoVFN0YXRlICp0 aHJlYWQpDQogew0KKwlpbnQJCQlpID0gMDsNCisJaW50NjQJCXc7DQorDQog CWlmIChudW1fc2NyaXB0cyA9PSAxKQ0KIAkJcmV0dXJuIDA7DQogDQotCXJl dHVybiBnZXRyYW5kKHRocmVhZCwgMCwgbnVtX3NjcmlwdHMgLSAxKTsNCisJ dyA9IGdldHJhbmQodGhyZWFkLCAwLCB0b3RhbF93ZWlnaHQgLSAxKTsNCisJ ZG8NCisJew0KKwkJdyAtPSBzcWxfc2NyaXB0W2krK10ud2VpZ2h0Ow0KKwl9 IHdoaWxlICh3ID49IDApOw0KKw0KKwlyZXR1cm4gaSAtIDE7DQogfQ0KIA0K IC8qIHJldHVybiBmYWxzZSBpZmYgY2xpZW50IHNob3VsZCBiZSBkaXNjb25u ZWN0ZWQgKi8NCkBAIC0xNDkzLDcgKzE1MTAsNyBAQCB0b3A6DQogCQkJY29t bWFuZHMgPSBzcWxfc2NyaXB0W3N0LT51c2VfZmlsZV0uY29tbWFuZHM7DQog CQkJaWYgKGRlYnVnKQ0KIAkJCQlmcHJpbnRmKHN0ZGVyciwgImNsaWVudCAl ZCBleGVjdXRpbmcgc2NyaXB0IFwiJXNcIlxuIiwgc3QtPmlkLA0KLQkJCQkJ CXNxbF9zY3JpcHRbc3QtPnVzZV9maWxlXS5uYW1lKTsNCisJCQkJCQlzcWxf c2NyaXB0W3N0LT51c2VfZmlsZV0uZGVzYyk7DQogCQkJc3QtPmlzX3Rocm90 dGxlZCA9IGZhbHNlOw0KIA0KIAkJCS8qDQpAQCAtMjYyNSwzNCArMjY0Miwz NiBAQCByZWFkX2xpbmVfZnJvbV9maWxlKEZJTEUgKmZkKQ0KIH0NCiANCiAv Kg0KLSAqIEdpdmVuIGEgZmlsZSBuYW1lLCByZWFkIGl0IGFuZCByZXR1cm4g dGhlIGFycmF5IG9mIENvbW1hbmRzIGNvbnRhaW5lZA0KLSAqIHRoZXJlaW4u ICAiLSIgbWVhbnMgdG8gcmVhZCBzdGRpbi4NCisgKiBHaXZlbiBhIGZpbGUg bmFtZSwgcmVhZCBpdCBhbmQgcmV0dXJuIGEgc2NyaXB0X3Qgd2l0aCBhIGRl c2NyaXB0aW9uICYNCisgKiBhbiBhcnJheSBvZiBjb21tYW5kcy4gICItIiBt ZWFucyB0byByZWFkIHN0ZGluLg0KICAqLw0KLXN0YXRpYyBDb21tYW5kICoq DQorc3RhdGljIFBhcnNlZFNjcmlwdCAqDQogcHJvY2Vzc19maWxlKGNoYXIg KmZpbGVuYW1lKQ0KIHsNCiAjZGVmaW5lIENPTU1BTkRTX0FMTE9DX05VTSAx MjgNCiANCi0JQ29tbWFuZCAgICoqbXlfY29tbWFuZHM7DQorCVBhcnNlZFNj cmlwdCAqIHBzOw0KKw0KIAlGSUxFCSAgICpmZDsNCiAJaW50CQkJbGluZW5v LA0KIAkJCQlpbmRleDsNCiAJY2hhcgkgICAqYnVmOw0KIAlpbnQJCQlhbGxv Y19udW07DQogDQotCWFsbG9jX251bSA9IENPTU1BTkRTX0FMTE9DX05VTTsN Ci0JbXlfY29tbWFuZHMgPSAoQ29tbWFuZCAqKikgcGdfbWFsbG9jKHNpemVv ZihDb21tYW5kICopICogYWxsb2NfbnVtKTsNCi0NCiAJaWYgKHN0cmNtcChm aWxlbmFtZSwgIi0iKSA9PSAwKQ0KIAkJZmQgPSBzdGRpbjsNCiAJZWxzZSBp ZiAoKGZkID0gZm9wZW4oZmlsZW5hbWUsICJyIikpID09IE5VTEwpDQogCXsN CiAJCWZwcmludGYoc3RkZXJyLCAiY291bGQgbm90IG9wZW4gZmlsZSBcIiVz XCI6ICVzXG4iLA0KIAkJCQlmaWxlbmFtZSwgc3RyZXJyb3IoZXJybm8pKTsN Ci0JCXBnX2ZyZWUobXlfY29tbWFuZHMpOw0KIAkJcmV0dXJuIE5VTEw7DQog CX0NCiANCisJYWxsb2NfbnVtID0gQ09NTUFORFNfQUxMT0NfTlVNOw0KKwlw cyA9IHBnX21hbGxvYyhzaXplb2YoUGFyc2VkU2NyaXB0KSk7DQorCXBzLT5j b21tYW5kcyA9IChDb21tYW5kICoqKSBwZ19tYWxsb2Moc2l6ZW9mKENvbW1h bmQgKikgKiBhbGxvY19udW0pOw0KKwlwcy0+ZGVzYyA9IGZpbGVuYW1lOw0K Kw0KIAlsaW5lbm8gPSAwOw0KIAlpbmRleCA9IDA7DQogDQpAQCAtMjY2OSwz NSArMjY4OCw0MCBAQCBwcm9jZXNzX2ZpbGUoY2hhciAqZmlsZW5hbWUpDQog CQlpZiAoY29tbWFuZCA9PSBOVUxMKQ0KIAkJCWNvbnRpbnVlOw0KIA0KLQkJ bXlfY29tbWFuZHNbaW5kZXhdID0gY29tbWFuZDsNCisJCXBzLT5jb21tYW5k c1tpbmRleF0gPSBjb21tYW5kOw0KIAkJaW5kZXgrKzsNCiANCiAJCWlmIChp bmRleCA+PSBhbGxvY19udW0pDQogCQl7DQogCQkJYWxsb2NfbnVtICs9IENP TU1BTkRTX0FMTE9DX05VTTsNCi0JCQlteV9jb21tYW5kcyA9IHBnX3JlYWxs b2MobXlfY29tbWFuZHMsIHNpemVvZihDb21tYW5kICopICogYWxsb2NfbnVt KTsNCisJCQlwcy0+Y29tbWFuZHMgPSBwZ19yZWFsbG9jKHBzLT5jb21tYW5k cywNCisJCQkJCQkJCQkgIHNpemVvZihDb21tYW5kICopICogYWxsb2NfbnVt KTsNCiAJCX0NCiAJfQ0KIAlmY2xvc2UoZmQpOw0KIA0KLQlteV9jb21tYW5k c1tpbmRleF0gPSBOVUxMOw0KKwlwcy0+Y29tbWFuZHNbaW5kZXhdID0gTlVM TDsNCiANCi0JcmV0dXJuIG15X2NvbW1hbmRzOw0KKwlyZXR1cm4gcHM7DQog fQ0KIA0KLXN0YXRpYyBDb21tYW5kICoqDQotcHJvY2Vzc19idWlsdGluKGNv bnN0IGNoYXIgKnRiLCBjb25zdCBjaGFyICpzb3VyY2UpDQorLyogcHJvY2Vz cyBidWlsdGluIHNjcmlwdCBiaSBieSBhZGRpbmcgdGhlIGFycmF5IG9mIGNv bW1hbmRzIGFuZCByZXR1cm5pbmcgaXQgKi8NCitzdGF0aWMgUGFyc2VkU2Ny aXB0ICoNCitwcm9jZXNzX2J1aWx0aW4oc2NyaXB0X3QgKiBiaSkNCiB7DQog I2RlZmluZSBDT01NQU5EU19BTExPQ19OVU0gMTI4DQogDQotCUNvbW1hbmQg ICAqKm15X2NvbW1hbmRzOw0KIAlpbnQJCQlsaW5lbm8sDQogCQkJCWluZGV4 Ow0KIAljaGFyCQlidWZbQlVGU0laXTsNCiAJaW50CQkJYWxsb2NfbnVtOw0K KwljaGFyCSAgICp0YiA9IGJpLT5zY3JpcHQ7DQorCVBhcnNlZFNjcmlwdCAq cHM7DQogDQogCWFsbG9jX251bSA9IENPTU1BTkRTX0FMTE9DX05VTTsNCi0J bXlfY29tbWFuZHMgPSAoQ29tbWFuZCAqKikgcGdfbWFsbG9jKHNpemVvZihD b21tYW5kICopICogYWxsb2NfbnVtKTsNCisJcHMgPSAoUGFyc2VkU2NyaXB0 ICopIHBnX21hbGxvYyhzaXplb2YoUGFyc2VkU2NyaXB0KSk7DQorCXBzLT5k ZXNjID0gYmktPmRlc2M7DQorCXBzLT5jb21tYW5kcyA9IChDb21tYW5kICoq KSBwZ19tYWxsb2Moc2l6ZW9mKENvbW1hbmQgKikgKiBhbGxvY19udW0pOw0K IA0KIAlsaW5lbm8gPSAwOw0KIAlpbmRleCA9IDA7DQpAQCAtMjcwNyw2ICsy NzMxLDcgQEAgcHJvY2Vzc19idWlsdGluKGNvbnN0IGNoYXIgKnRiLCBjb25z dCBjaGFyICpzb3VyY2UpDQogCQljaGFyCSAgICpwOw0KIAkJQ29tbWFuZCAg ICAqY29tbWFuZDsNCiANCisJCS8qIGJ1ZmZlciBvdmVyZmxvdyBjaGVjaz8g Ki8NCiAJCXAgPSBidWY7DQogCQl3aGlsZSAoKnRiICYmICp0YiAhPSAnXG4n KQ0KIAkJCSpwKysgPSAqdGIrKzsNCkBAIC0yNzIxLDU4ICsyNzQ2LDU5IEBA IHByb2Nlc3NfYnVpbHRpbihjb25zdCBjaGFyICp0YiwgY29uc3QgY2hhciAq c291cmNlKQ0KIA0KIAkJbGluZW5vICs9IDE7DQogDQotCQljb21tYW5kID0g cHJvY2Vzc19jb21tYW5kcyhidWYsIHNvdXJjZSwgbGluZW5vKTsNCisJCWNv bW1hbmQgPSBwcm9jZXNzX2NvbW1hbmRzKGJ1ZiwgYmktPmRlc2MsIGxpbmVu byk7DQogCQlpZiAoY29tbWFuZCA9PSBOVUxMKQ0KIAkJCWNvbnRpbnVlOw0K IA0KLQkJbXlfY29tbWFuZHNbaW5kZXhdID0gY29tbWFuZDsNCisJCXBzLT5j b21tYW5kc1tpbmRleF0gPSBjb21tYW5kOw0KIAkJaW5kZXgrKzsNCiANCiAJ CWlmIChpbmRleCA+PSBhbGxvY19udW0pDQogCQl7DQogCQkJYWxsb2NfbnVt ICs9IENPTU1BTkRTX0FMTE9DX05VTTsNCi0JCQlteV9jb21tYW5kcyA9IHBn X3JlYWxsb2MobXlfY29tbWFuZHMsIHNpemVvZihDb21tYW5kICopICogYWxs b2NfbnVtKTsNCisJCQlwcy0+Y29tbWFuZHMgPQ0KKwkJCQlwZ19yZWFsbG9j KHBzLT5jb21tYW5kcywgc2l6ZW9mKENvbW1hbmQgKikgKiBhbGxvY19udW0p Ow0KIAkJfQ0KIAl9DQogDQotCW15X2NvbW1hbmRzW2luZGV4XSA9IE5VTEw7 DQorCXBzLT5jb21tYW5kc1tpbmRleF0gPSBOVUxMOw0KIA0KLQlyZXR1cm4g bXlfY29tbWFuZHM7DQorCXJldHVybiBwczsNCiB9DQogDQorLyogc2hvdyBh dmFpbGFibGUgYnVpbHRpbiBzY3JpcHRzICovDQogc3RhdGljIHZvaWQNCiBs aXN0QXZhaWxhYmxlU2NyaXB0cyh2b2lkKQ0KIHsNCiAJaW50CQkJaTsNCiAN CiAJZnByaW50ZihzdGRlcnIsICJBdmFpbGFibGUgYnVpbHRpbiBzY3JpcHRz OlxuIik7DQotCWZvciAoaSA9IDA7IGkgPCBOX0JVSUxUSU47IGkrKykNCisJ Zm9yIChpID0gMDsgaSA8IGxlbmd0aG9mKGJ1aWx0aW5fc2NyaXB0KTsgaSsr KQ0KIAkJZnByaW50ZihzdGRlcnIsICJcdCVzXG4iLCBidWlsdGluX3Njcmlw dFtpXS5uYW1lKTsNCiAJZnByaW50ZihzdGRlcnIsICJcbiIpOw0KIH0NCiAN Ci0vKiByZXR1cm4gYnVpbHRpbiBzY3JpcHQgIm5hbWUiIGlmIHVuYW1iaWd1 b3VzICovDQotc3RhdGljIGNoYXIgKg0KLWZpbmRCdWlsdGluKGNvbnN0IGNo YXIgKm5hbWUsIGNoYXIgKipkZXNjKQ0KKy8qIHJldHVybiBidWlsdGluIHNj cmlwdCAibmFtZSIgaWYgdW5hbWJpZ3VvdXMsIG9mIGZhaWxzIGlmIG5vdCBm b3VuZCAqLw0KK3N0YXRpYyBzY3JpcHRfdCAqDQorZmluZEJ1aWx0aW4oY29u c3QgY2hhciAqbmFtZSkNCiB7DQogCWludAkJCWksDQogCQkJCWZvdW5kID0g MCwNCiAJCQkJbGVuID0gc3RybGVuKG5hbWUpOw0KLQljaGFyCSAgICpjb21t YW5kcyA9IE5VTEw7DQorCXNjcmlwdF90ICAgKnJlc3VsdCA9IE5VTEw7DQog DQotCWZvciAoaSA9IDA7IGkgPCBOX0JVSUxUSU47IGkrKykNCisJZm9yIChp ID0gMDsgaSA8IGxlbmd0aG9mKGJ1aWx0aW5fc2NyaXB0KTsgaSsrKQ0KIAl7 DQogCQlpZiAoc3RybmNtcChidWlsdGluX3NjcmlwdFtpXS5uYW1lLCBuYW1l LCBsZW4pID09IDApDQogCQl7DQotCQkJKmRlc2MgPSBidWlsdGluX3Njcmlw dFtpXS5kZXNjOw0KLQkJCWNvbW1hbmRzID0gYnVpbHRpbl9zY3JpcHRbaV0u Y29tbWFuZHM7DQorCQkJcmVzdWx0ID0gJiBidWlsdGluX3NjcmlwdFtpXTsN CiAJCQlmb3VuZCsrOw0KIAkJfQ0KIAl9DQogDQogCS8qIG9rLCB1bmFtYmln dW91cyByZXN1bHQgKi8NCiAJaWYgKGZvdW5kID09IDEpDQotCQlyZXR1cm4g Y29tbWFuZHM7DQorCQlyZXR1cm4gcmVzdWx0Ow0KIA0KIAkvKiBlcnJvciBj YXNlcyAqLw0KIAlpZiAoZm91bmQgPT0gMCkNCkBAIC0yNzg1LDEzICsyODEx LDYxIEBAIGZpbmRCdWlsdGluKGNvbnN0IGNoYXIgKm5hbWUsIGNoYXIgKipk ZXNjKQ0KIAlleGl0KDEpOw0KIH0NCiANCisvKg0KKyAqIERldGVybWluZSB0 aGUgd2VpZ2h0IHNwZWNpZmljYXRpb24gZnJvbSBhIHNjcmlwdCBvcHRpb24g KC1iLCAtZiksIGlmIGFueSwNCisgKiBhbmQgcmV0dXJuIGl0IGFzIGFuIGlu dGVnZXIgKDEgaXMgcmV0dXJuZWQgaWYgdGhlcmUncyBubyB3ZWlnaHQpLiAg VGhlDQorICogc2NyaXB0IG5hbWUgaXMgcmV0dXJuZWQgaW4gKnNjcmlwdCBh cyBhIG1hbGxvYydkIHN0cmluZy4NCisgKi8NCitzdGF0aWMgaW50DQorcGFy c2VTY3JpcHRXZWlnaHQoY29uc3QgY2hhciAqb3B0aW9uLCBjaGFyICoqc2Ny aXB0KQ0KK3sNCisJY2hhcgkgICAqc2VwOw0KKwlpbnQJCQl3ZWlnaHQ7DQor DQorCWlmICgoc2VwID0gc3RycmNocihvcHRpb24sIFdTRVApKSkNCisJew0K KwkJaW50CQluYW1lbGVuID0gc2VwIC0gb3B0aW9uOw0KKwkJbG9uZwl3dG1w Ow0KKwkJY2hhciAgICpiYWRwOw0KKw0KKwkJLyogZ2VuZXJhdGUgdGhlIHNj cmlwdCBuYW1lICovDQorCQkqc2NyaXB0ID0gcGdfbWFsbG9jKG5hbWVsZW4g KyAxKTsNCisJCXN0cm5jcHkoKnNjcmlwdCwgb3B0aW9uLCBuYW1lbGVuKTsN CisJCSgqc2NyaXB0KVtuYW1lbGVuXSA9ICdcMCc7DQorDQorCQkvKiBwcm9j ZXNzIGRpZ2l0cyBvZiB0aGUgd2VpZ2h0IHNwZWMgKi8NCisJCWVycm5vID0g MDsNCisJCXd0bXAgPSBzdHJ0b2woc2VwICsgMSwgJmJhZHAsIDEwKTsNCisJ CWlmIChlcnJubyAhPSAwIHx8IGJhZHAgPT0gc2VwICsgMSB8fCAqYmFkcCAh PSAnXDAnKQ0KKwkJew0KKwkJCWZwcmludGYoc3RkZXJyLCAiaW52YWxpZCB3 ZWlnaHQgc3BlY2lmaWNhdGlvbjogJXNcbiIsIHNlcCk7DQorCQkJZXhpdCgx KTsNCisJCX0NCisJCWlmICh3dG1wID4gSU5UX01BWCB8fCB3dG1wIDw9IDAp DQorCQl7DQorCQkJZnByaW50ZihzdGRlcnIsDQorCQkJCQkid2VpZ2h0IHNw ZWNpZmljYXRpb24gb3V0IG9mIHJhbmdlICgxIC4uICV1KTogIiBJTlQ2NF9G T1JNQVQgIlxuIiwNCisJCQkJCUlOVF9NQVgsIChpbnQ2NCkgd3RtcCk7DQor CQkJZXhpdCgxKTsNCisJCX0NCisJCXdlaWdodCA9IHd0bXA7DQorCX0NCisJ ZWxzZQ0KKwl7DQorCQkqc2NyaXB0ID0gcGdfc3RyZHVwKG9wdGlvbik7DQor CQl3ZWlnaHQgPSAxOw0KKwl9DQorDQorCXJldHVybiB3ZWlnaHQ7DQorfQ0K Kw0KKy8qIGFwcGVuZCBhIHNjcmlwdCB0byB0aGUgbGlzdCBvZiBzY3JpcHRz IHRvIHByb2Nlc3MgKi8NCiBzdGF0aWMgdm9pZA0KLWFkZFNjcmlwdChjb25z dCBjaGFyICpuYW1lLCBDb21tYW5kICoqY29tbWFuZHMpDQorYWRkU2NyaXB0 KFBhcnNlZFNjcmlwdCAqc2NyaXB0LCBpbnQgd2VpZ2h0KQ0KIHsNCi0JaWYg KGNvbW1hbmRzID09IE5VTEwgfHwNCi0JCWNvbW1hbmRzWzBdID09IE5VTEwp DQorCWlmIChzY3JpcHQtPmNvbW1hbmRzID09IE5VTEwgfHwgc2NyaXB0LT5j b21tYW5kc1swXSA9PSBOVUxMKQ0KIAl7DQotCQlmcHJpbnRmKHN0ZGVyciwg ImVtcHR5IGNvbW1hbmQgbGlzdCBmb3Igc2NyaXB0IFwiJXNcIlxuIiwgbmFt ZSk7DQorCQlmcHJpbnRmKHN0ZGVyciwgImVtcHR5IGNvbW1hbmQgbGlzdCBm b3Igc2NyaXB0IFwiJXNcIlxuIiwgc2NyaXB0LT5kZXNjKTsNCiAJCWV4aXQo MSk7DQogCX0NCiANCkBAIC0yODAxLDEwICsyODc1LDEzIEBAIGFkZFNjcmlw dChjb25zdCBjaGFyICpuYW1lLCBDb21tYW5kICoqY29tbWFuZHMpDQogCQll eGl0KDEpOw0KIAl9DQogDQotCXNxbF9zY3JpcHRbbnVtX3NjcmlwdHNdLm5h bWUgPSBuYW1lOw0KLQlzcWxfc2NyaXB0W251bV9zY3JpcHRzXS5jb21tYW5k cyA9IGNvbW1hbmRzOw0KKwlzcWxfc2NyaXB0W251bV9zY3JpcHRzXSA9ICpz Y3JpcHQ7DQorCXNxbF9zY3JpcHRbbnVtX3NjcmlwdHNdLndlaWdodCA9IHdl aWdodDsNCiAJaW5pdFN0YXRzKCZzcWxfc2NyaXB0W251bV9zY3JpcHRzXS5z dGF0cywgMC4wKTsNCiAJbnVtX3NjcmlwdHMrKzsNCisNCisJLyogd2FzIGFs bG9jYXRlZCBpbiBwcm9jZXNzX2J1aWx0aW4gb3IgcHJvY2Vzc19maWxlICov DQorCWZyZWUoc2NyaXB0KTsNCiB9DQogDQogc3RhdGljIHZvaWQNCkBAIC0y ODMzLDcgKzI5MTAsNyBAQCBwcmludFJlc3VsdHMoVFN0YXRlICp0aHJlYWRz LCBTdGF0c0RhdGEgKnRvdGFsLCBpbnN0cl90aW1lIHRvdGFsX3RpbWUsDQog CQkJCQkJKElOU1RSX1RJTUVfR0VUX0RPVUJMRShjb25uX3RvdGFsX3RpbWUp IC8gbmNsaWVudHMpKTsNCiANCiAJcHJpbnRmKCJ0cmFuc2FjdGlvbiB0eXBl OiAlc1xuIiwNCi0JCSAgIG51bV9zY3JpcHRzID09IDEgPyBzcWxfc2NyaXB0 WzBdLm5hbWUgOiAibXVsdGlwbGUgc2NyaXB0cyIpOw0KKwkJICAgbnVtX3Nj cmlwdHMgPT0gMSA/IHNxbF9zY3JpcHRbMF0uZGVzYyA6ICJtdWx0aXBsZSBz Y3JpcHRzIik7DQogCXByaW50Zigic2NhbGluZyBmYWN0b3I6ICVkXG4iLCBz Y2FsZSk7DQogCXByaW50ZigicXVlcnkgbW9kZTogJXNcbiIsIFFVRVJZTU9E RVtxdWVyeW1vZGVdKTsNCiAJcHJpbnRmKCJudW1iZXIgb2YgY2xpZW50czog JWRcbiIsIG5jbGllbnRzKTsNCkBAIC0yODg3LDE5ICsyOTY0LDI0IEBAIHBy aW50UmVzdWx0cyhUU3RhdGUgKnRocmVhZHMsIFN0YXRzRGF0YSAqdG90YWws IGluc3RyX3RpbWUgdG90YWxfdGltZSwNCiAJcHJpbnRmKCJ0cHMgPSAlZiAo aW5jbHVkaW5nIGNvbm5lY3Rpb25zIGVzdGFibGlzaGluZylcbiIsIHRwc19p bmNsdWRlKTsNCiAJcHJpbnRmKCJ0cHMgPSAlZiAoZXhjbHVkaW5nIGNvbm5l Y3Rpb25zIGVzdGFibGlzaGluZylcbiIsIHRwc19leGNsdWRlKTsNCiANCi0J LyogUmVwb3J0IHBlci1jb21tYW5kIHN0YXRpc3RpY3MgKi8NCi0JaWYgKHBl cl9zY3JpcHRfc3RhdHMpDQorCS8qIFJlcG9ydCBwZXItc2NyaXB0L2NvbW1h bmQgc3RhdGlzdGljcyAqLw0KKwlpZiAocGVyX3NjcmlwdF9zdGF0cyB8fCBs YXRlbmN5X2xpbWl0IHx8IGlzX2xhdGVuY2llcykNCiAJew0KIAkJaW50CQkJ aTsNCiANCiAJCWZvciAoaSA9IDA7IGkgPCBudW1fc2NyaXB0czsgaSsrKQ0K IAkJew0KLQkJCXByaW50ZigiU1FMIHNjcmlwdCAlZDogJXNcbiINCi0JCQki IC0gIiBJTlQ2NF9GT1JNQVQgIiB0cmFuc2FjdGlvbnMgKCUuMWYlJSBvZiB0 b3RhbCwgdHBzID0gJWYpXG4iLA0KLQkJCQkgICBpICsgMSwgc3FsX3Njcmlw dFtpXS5uYW1lLA0KLQkJCQkgICBzcWxfc2NyaXB0W2ldLnN0YXRzLmNudCwN Ci0JCQkJICAgMTAwLjAgKiBzcWxfc2NyaXB0W2ldLnN0YXRzLmNudCAvIHRv dGFsLT5jbnQsDQotCQkJCSAgIHNxbF9zY3JpcHRbaV0uc3RhdHMuY250IC8g dGltZV9pbmNsdWRlKTsNCisJCQlpZiAobnVtX3NjcmlwdHMgPiAxKQ0KKwkJ CQlwcmludGYoIlNRTCBzY3JpcHQgJWQ6ICVzXG4iDQorCQkJCQkgICAiIC0g d2VpZ2h0ID0gJWRcbiINCisJCQkJCSAgICIgLSAiIElOVDY0X0ZPUk1BVCAi IHRyYW5zYWN0aW9ucyAoJS4xZiUlIG9mIHRvdGFsLCB0cHMgPSAlZilcbiIs DQorCQkJCQkgICBpICsgMSwgc3FsX3NjcmlwdFtpXS5kZXNjLA0KKwkJCQkJ ICAgc3FsX3NjcmlwdFtpXS53ZWlnaHQsDQorCQkJCQkgICBzcWxfc2NyaXB0 W2ldLnN0YXRzLmNudCwNCisJCQkJCSAgIDEwMC4wICogc3FsX3NjcmlwdFtp XS5zdGF0cy5jbnQgLyB0b3RhbC0+Y250LA0KKwkJCQkJICAgc3FsX3Njcmlw dFtpXS5zdGF0cy5jbnQgLyB0aW1lX2luY2x1ZGUpOw0KKwkJCWVsc2UNCisJ CQkJcHJpbnRmKCJzY3JpcHQgc3RhdGlzdGljczpcbiIpOw0KIA0KIAkJCWlm IChsYXRlbmN5X2xpbWl0KQ0KIAkJCQlwcmludGYoIiAtIG51bWJlciBvZiB0 cmFuc2FjdGlvbnMgc2tpcHBlZDogIiBJTlQ2NF9GT1JNQVQgIiAoJS4zZiUl KVxuIiwNCkBAIC0yOTA3LDcgKzI5ODksOCBAQCBwcmludFJlc3VsdHMoVFN0 YXRlICp0aHJlYWRzLCBTdGF0c0RhdGEgKnRvdGFsLCBpbnN0cl90aW1lIHRv dGFsX3RpbWUsDQogCQkJCQkgICAxMDAuMCAqIHNxbF9zY3JpcHRbaV0uc3Rh dHMuc2tpcHBlZCAvDQogCQkJCQkoc3FsX3NjcmlwdFtpXS5zdGF0cy5za2lw cGVkICsgc3FsX3NjcmlwdFtpXS5zdGF0cy5jbnQpKTsNCiANCi0JCQlwcmlu dFNpbXBsZVN0YXRzKCIgLSBsYXRlbmN5IiwgJnNxbF9zY3JpcHRbaV0uc3Rh dHMubGF0ZW5jeSk7DQorCQkJaWYgKG51bV9zY3JpcHRzID4gMSkNCisJCQkJ cHJpbnRTaW1wbGVTdGF0cygiIC0gbGF0ZW5jeSIsICZzcWxfc2NyaXB0W2ld LnN0YXRzLmxhdGVuY3kpOw0KIA0KIAkJCS8qIFJlcG9ydCBwZXItY29tbWFu ZCBsYXRlbmNpZXMgKi8NCiAJCQlpZiAoaXNfbGF0ZW5jaWVzKQ0KQEAgLTI5 OTAsNyArMzA3Myw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQ0K IAlpbnN0cl90aW1lCWNvbm5fdG90YWxfdGltZTsNCiAJaW50NjQJCWxhdGVu Y3lfbGF0ZSA9IDA7DQogCVN0YXRzRGF0YQlzdGF0czsNCi0JY2hhcgkgICAq ZGVzYzsNCisJaW50CQkJd2VpZ2h0Ow0KIA0KIAlpbnQJCQlpOw0KIAlpbnQJ CQluY2xpZW50c19kZWFsdDsNCkBAIC0zMDM4LDYgKzMxMjEsOCBAQCBtYWlu KGludCBhcmdjLCBjaGFyICoqYXJndikNCiANCiAJd2hpbGUgKChjID0gZ2V0 b3B0X2xvbmcoYXJnYywgYXJndiwgImloOm52cDpkcWI6U05jOmo6Q3JzOnQ6 VDpVOmxmOkQ6RjpNOlA6UjpMOiIsIGxvbmdfb3B0aW9ucywgJm9wdGluZGV4 KSkgIT0gLTEpDQogCXsNCisJCWNoYXIJCSpzY3JpcHQ7DQorDQogCQlzd2l0 Y2ggKGMpDQogCQl7DQogCQkJY2FzZSAnaSc6DQpAQCAtMzE2OSwyNyArMzI1 NCwyNSBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikNCiAJCQkJCWV4 aXQoMCk7DQogCQkJCX0NCiANCi0JCQkJYWRkU2NyaXB0KGRlc2MsDQotCQkJ CQkJICBwcm9jZXNzX2J1aWx0aW4oZmluZEJ1aWx0aW4ob3B0YXJnLCAmZGVz YyksIGRlc2MpKTsNCisJCQkJd2VpZ2h0ID0gcGFyc2VTY3JpcHRXZWlnaHQo b3B0YXJnLCAmc2NyaXB0KTsNCisJCQkJYWRkU2NyaXB0KHByb2Nlc3NfYnVp bHRpbihmaW5kQnVpbHRpbihzY3JpcHQpKSwgd2VpZ2h0KTsNCiAJCQkJYmVu Y2htYXJraW5nX29wdGlvbl9zZXQgPSB0cnVlOw0KIAkJCQlpbnRlcm5hbF9z Y3JpcHRfdXNlZCA9IHRydWU7DQogCQkJCWJyZWFrOw0KKw0KIAkJCWNhc2Ug J1MnOg0KLQkJCQlhZGRTY3JpcHQoZGVzYywNCi0JCQkJCQkgIHByb2Nlc3Nf YnVpbHRpbihmaW5kQnVpbHRpbigic2VsZWN0LW9ubHkiLCAmZGVzYyksDQot CQkJCQkJCQkJCSAgZGVzYykpOw0KKwkJCQlhZGRTY3JpcHQocHJvY2Vzc19i dWlsdGluKGZpbmRCdWlsdGluKCJzZWxlY3Qtb25seSIpKSwgMSk7DQogCQkJ CWJlbmNobWFya2luZ19vcHRpb25fc2V0ID0gdHJ1ZTsNCiAJCQkJaW50ZXJu YWxfc2NyaXB0X3VzZWQgPSB0cnVlOw0KIAkJCQlicmVhazsNCiAJCQljYXNl ICdOJzoNCi0JCQkJYWRkU2NyaXB0KGRlc2MsDQotCQkJCQkJICBwcm9jZXNz X2J1aWx0aW4oZmluZEJ1aWx0aW4oInNpbXBsZS11cGRhdGUiLCAmZGVzYyks DQotCQkJCQkJCQkJCSAgZGVzYykpOw0KKwkJCQlhZGRTY3JpcHQocHJvY2Vz c19idWlsdGluKGZpbmRCdWlsdGluKCJzaW1wbGUtdXBkYXRlIikpLCAxKTsN CiAJCQkJYmVuY2htYXJraW5nX29wdGlvbl9zZXQgPSB0cnVlOw0KIAkJCQlp bnRlcm5hbF9zY3JpcHRfdXNlZCA9IHRydWU7DQogCQkJCWJyZWFrOw0KIAkJ CWNhc2UgJ2YnOg0KLQkJCQlhZGRTY3JpcHQob3B0YXJnLCBwcm9jZXNzX2Zp bGUob3B0YXJnKSk7DQorCQkJCXdlaWdodCA9IHBhcnNlU2NyaXB0V2VpZ2h0 KG9wdGFyZywgJnNjcmlwdCk7DQorCQkJCWFkZFNjcmlwdChwcm9jZXNzX2Zp bGUoc2NyaXB0KSwgd2VpZ2h0KTsNCiAJCQkJYmVuY2htYXJraW5nX29wdGlv bl9zZXQgPSB0cnVlOw0KIAkJCQlicmVhazsNCiAJCQljYXNlICdEJzoNCkBA IC0zMzI3LDEyICszNDEwLDE2IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiph cmd2KQ0KIAkvKiBzZXQgZGVmYXVsdCBzY3JpcHQgaWYgbm9uZSAqLw0KIAlp ZiAobnVtX3NjcmlwdHMgPT0gMCAmJiAhaXNfaW5pdF9tb2RlKQ0KIAl7DQot CQlhZGRTY3JpcHQoZGVzYywNCi0JCQkJICBwcm9jZXNzX2J1aWx0aW4oZmlu ZEJ1aWx0aW4oInRwY2ItbGlrZSIsICZkZXNjKSwgZGVzYykpOw0KKwkJYWRk U2NyaXB0KHByb2Nlc3NfYnVpbHRpbihmaW5kQnVpbHRpbigidHBjYi1saWtl IikpLCAxKTsNCiAJCWJlbmNobWFya2luZ19vcHRpb25fc2V0ID0gdHJ1ZTsN CiAJCWludGVybmFsX3NjcmlwdF91c2VkID0gdHJ1ZTsNCiAJfQ0KIA0KKwkv KiBjb21wdXRlIHRvdGFsX3dlaWdodCAqLw0KKwlmb3IgKGkgPSAwOyBpIDwg bnVtX3NjcmlwdHM7IGkrKykNCisJCS8qIGNhbm5vdCBvdmVyZmxvdzogd2Vp Z2h0IGlzIDMyYiwgdG90YWxfd2VpZ2h0IDY0YiAqLw0KKwkJdG90YWxfd2Vp Z2h0ICs9IHNxbF9zY3JpcHRbaV0ud2VpZ2h0Ow0KKw0KIAkvKiBzaG93IHBl ciBzY3JpcHQgc3RhdHMgaWYgc2V2ZXJhbCBzY3JpcHRzIGFyZSB1c2VkICov DQogCWlmIChudW1fc2NyaXB0cyA+IDEpDQogCQlwZXJfc2NyaXB0X3N0YXRz ID0gdHJ1ZTsNCkBAIC0zNzM4LDcgKzM4MjUsNyBAQCB0aHJlYWRSdW4odm9p ZCAqYXJnKQ0KIAkJY29tbWFuZHMgPSBzcWxfc2NyaXB0W3N0LT51c2VfZmls ZV0uY29tbWFuZHM7DQogCQlpZiAoZGVidWcpDQogCQkJZnByaW50ZihzdGRl cnIsICJjbGllbnQgJWQgZXhlY3V0aW5nIHNjcmlwdCBcIiVzXCJcbiIsIHN0 LT5pZCwNCi0JCQkJCXNxbF9zY3JpcHRbc3QtPnVzZV9maWxlXS5uYW1lKTsN CisJCQkJCXNxbF9zY3JpcHRbc3QtPnVzZV9maWxlXS5kZXNjKTsNCiAJCWlm ICghZG9DdXN0b20odGhyZWFkLCBzdCwgJmFnZ3MpKQ0KIAkJCXJlbWFpbnMt LTsJCQkvKiBJJ3ZlIGFib3J0ZWQgKi8NCiANCg== --8323329-2042481995-1458118593=:3528 Content-Type: TEXT/x-diff; name=pgbench-script-stats-25.patch Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: attachment; filename=pgbench-script-stats-25.patch ZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvcGdiZW5jaC5zZ21sIGIv ZG9jL3NyYy9zZ21sL3JlZi9wZ2JlbmNoLnNnbWwNCmluZGV4IGNjODBiM2Yu LmRkM2ZiMWQgMTAwNjQ0DQotLS0gYS9kb2Mvc3JjL3NnbWwvcmVmL3BnYmVu Y2guc2dtbA0KKysrIGIvZG9jL3NyYy9zZ21sL3JlZi9wZ2JlbmNoLnNnbWwN CkBAIC0yNjIsMTEgKzI2MiwxMyBAQCBwZ2JlbmNoIDxvcHRpb25hbD4gPHJl cGxhY2VhYmxlPm9wdGlvbnM8Lz4gPC9vcHRpb25hbD4gPHJlcGxhY2VhYmxl PmRibmFtZTwvPg0KIA0KICAgICA8dmFyaWFibGVsaXN0Pg0KICAgICAgPHZh cmxpc3RlbnRyeT4NCi0gICAgICA8dGVybT48b3B0aW9uPi1iPC8+IDxyZXBs YWNlYWJsZT5zY3JpcHRuYW1lPC8+PC90ZXJtPg0KLSAgICAgIDx0ZXJtPjxv cHRpb24+LS1idWlsdGluPC8+IDxyZXBsYWNlYWJsZT5zY3JpcHRuYW1lPC8+ PC90ZXJtPg0KKyAgICAgIDx0ZXJtPjxvcHRpb24+LWI8Lz4gPHJlcGxhY2Vh YmxlPnNjcmlwdG5hbWVbQHdlaWdodF08Lz48L3Rlcm0+DQorICAgICAgPHRl cm0+PG9wdGlvbj4tLWJ1aWx0aW48Lz49PHJlcGxhY2VhYmxlPnNjcmlwdG5h bWVbQHdlaWdodF08Lz48L3Rlcm0+DQogICAgICAgPGxpc3RpdGVtPg0KICAg ICAgICA8cGFyYT4NCiAgICAgICAgIEFkZCB0aGUgc3BlY2lmaWVkIGJ1aWx0 aW4gc2NyaXB0IHRvIHRoZSBsaXN0IG9mIGV4ZWN1dGVkIHNjcmlwdHMuDQor ICAgICAgICBBbiBvcHRpb25hbCBpbnRlZ2VyIHdlaWdodCBhZnRlciA8bGl0 ZXJhbD5APC8+IGFsbG93cyB0byBhZGp1c3QgdGhlDQorICAgICAgICBwcm9i YWJpbGl0eSBvZiBkcmF3aW5nIHRoZSBzY3JpcHQuICBJZiBub3Qgc3BlY2lm aWVkLCBpdCBpcyBzZXQgdG8gMS4NCiAgICAgICAgIEF2YWlsYWJsZSBidWls dGluIHNjcmlwdHMgYXJlOiA8bGl0ZXJhbD50cGNiLWxpa2U8Lz4sDQogICAg ICAgICA8bGl0ZXJhbD5zaW1wbGUtdXBkYXRlPC8+IGFuZCA8bGl0ZXJhbD5z ZWxlY3Qtb25seTwvPi4NCiAgICAgICAgIFVuYW1iaWd1b3VzIHByZWZpeGVz IG9mIGJ1aWx0aW4gbmFtZXMgYXJlIGFjY2VwdGVkLg0KQEAgLTMyMiwxMiAr MzI0LDE0IEBAIHBnYmVuY2ggPG9wdGlvbmFsPiA8cmVwbGFjZWFibGU+b3B0 aW9uczwvPiA8L29wdGlvbmFsPiA8cmVwbGFjZWFibGU+ZGJuYW1lPC8+DQog ICAgICA8L3Zhcmxpc3RlbnRyeT4NCiANCiAgICAgIDx2YXJsaXN0ZW50cnk+ DQotICAgICAgPHRlcm0+PG9wdGlvbj4tZjwvPiA8cmVwbGFjZWFibGU+Zmls ZW5hbWU8Lz48L3Rlcm0+DQotICAgICAgPHRlcm0+PG9wdGlvbj4tLWZpbGU9 PC8+PHJlcGxhY2VhYmxlPmZpbGVuYW1lPC8+PC90ZXJtPg0KKyAgICAgIDx0 ZXJtPjxvcHRpb24+LWY8Lz4gPHJlcGxhY2VhYmxlPmZpbGVuYW1lW0B3ZWln aHRdPC8+PC90ZXJtPg0KKyAgICAgIDx0ZXJtPjxvcHRpb24+LS1maWxlPTwv PjxyZXBsYWNlYWJsZT5maWxlbmFtZVtAd2VpZ2h0XTwvPjwvdGVybT4NCiAg ICAgICA8bGlzdGl0ZW0+DQogICAgICAgIDxwYXJhPg0KICAgICAgICAgQWRk IGEgdHJhbnNhY3Rpb24gc2NyaXB0IHJlYWQgZnJvbSA8cmVwbGFjZWFibGU+ ZmlsZW5hbWU8Lz4gdG8NCiAgICAgICAgIHRoZSBsaXN0IG9mIGV4ZWN1dGVk IHNjcmlwdHMuDQorICAgICAgICBBbiBvcHRpb25hbCBpbnRlZ2VyIHdlaWdo dCBhZnRlciA8bGl0ZXJhbD5APC8+IGFsbG93cyB0byBhZGp1c3QgdGhlDQor ICAgICAgICBwcm9iYWJpbGl0eSBvZiBkcmF3aW5nIHRoZSB0ZXN0Lg0KICAg ICAgICAgU2VlIGJlbG93IGZvciBkZXRhaWxzLg0KICAgICAgICA8L3BhcmE+ DQogICAgICAgPC9saXN0aXRlbT4NCkBAIC02ODcsOSArNjkxLDEzIEBAIHBn YmVuY2ggPG9wdGlvbmFsPiA8cmVwbGFjZWFibGU+b3B0aW9uczwvPiA8L29w dGlvbmFsPiA8cmVwbGFjZWFibGU+ZGJuYW1lPC8+DQogICA8dGl0bGU+V2hh dCBpcyB0aGUgPHF1b3RlPlRyYW5zYWN0aW9uPC8+IEFjdHVhbGx5IFBlcmZv cm1lZCBpbiA8YXBwbGljYXRpb24+cGdiZW5jaDwvYXBwbGljYXRpb24+Pzwv dGl0bGU+DQogDQogICA8cGFyYT4NCi0gICBQZ2JlbmNoIGV4ZWN1dGVzIHRl c3Qgc2NyaXB0cyBjaG9zZW4gcmFuZG9tbHkgZnJvbSBhIHNwZWNpZmllZCBs aXN0Lg0KKyAgIDxhcHBsaWNhdGlvbj5wZ2JlbmNoPC8+IGV4ZWN1dGVzIHRl c3Qgc2NyaXB0cyBjaG9zZW4gcmFuZG9tbHkNCisgICBmcm9tIGEgc3BlY2lm aWVkIGxpc3QuDQogICAgVGhleSBpbmNsdWRlIGJ1aWx0LWluIHNjcmlwdHMg d2l0aCA8b3B0aW9uPi1iPC8+IGFuZA0KICAgIHVzZXItcHJvdmlkZWQgY3Vz dG9tIHNjcmlwdHMgd2l0aCA8b3B0aW9uPi1mPC8+Lg0KKyAgIEVhY2ggc2Ny aXB0IG1heSBiZSBnaXZlbiBhIHJlbGF0aXZlIHdlaWdodCBzcGVjaWZpZWQg YWZ0ZXIgYQ0KKyAgIDxsaXRlcmFsPkA8Lz4gc28gYXMgdG8gY2hhbmdlIGl0 cyBkcmF3aW5nIHByb2JhYmlsaXR5Lg0KKyAgIFRoZSBkZWZhdWx0IHdlaWdo dCBpcyA8bGl0ZXJhbD4xPC8+Lg0KICA8L3BhcmE+DQogDQogICA8cGFyYT4N CkBAIC0xMTk0LDEyICsxMjAyLDExIEBAIG51bWJlciBvZiBjbGllbnRzOiAx MA0KIG51bWJlciBvZiB0aHJlYWRzOiAxDQogbnVtYmVyIG9mIHRyYW5zYWN0 aW9ucyBwZXIgY2xpZW50OiAxMDAwDQogbnVtYmVyIG9mIHRyYW5zYWN0aW9u cyBhY3R1YWxseSBwcm9jZXNzZWQ6IDEwMDAwLzEwMDAwDQorbGF0ZW5jeSBh dmVyYWdlID0gMTUuODQ0IG1zDQorbGF0ZW5jeSBzdGRkZXYgPSAyLjcxNSBt cw0KIHRwcyA9IDYxOC43NjQ1NTUgKGluY2x1ZGluZyBjb25uZWN0aW9ucyBl c3RhYmxpc2hpbmcpDQogdHBzID0gNjIyLjk3NzY5OCAoZXhjbHVkaW5nIGNv bm5lY3Rpb25zIGVzdGFibGlzaGluZykNCi1TUUwgc2NyaXB0IDE6ICZsdDti dWlsdGluOiBUUEMtQiAoc29ydCBvZikmZ3Q7DQotIC0gMTAwMDAgdHJhbnNh Y3Rpb25zICgxMDAuMCUgb2YgdG90YWwsIHRwcyA9IDYxOC43NjQ1NTUpDQot IC0gbGF0ZW5jeSBhdmVyYWdlID0gMTUuODQ0IG1zDQotIC0gbGF0ZW5jeSBz dGRkZXYgPSAyLjcxNSBtcw0KK3NjcmlwdCBzdGF0aXN0aWNzOg0KICAtIHN0 YXRlbWVudCBsYXRlbmNpZXMgaW4gbWlsbGlzZWNvbmRzOg0KICAgICAgICAg MC4wMDQzODYgICAgICAgIFxzZXQgbmJyYW5jaGVzIDEgKiA6c2NhbGUNCiAg ICAgICAgIDAuMDAxMzQzICAgICAgICBcc2V0IG50ZWxsZXJzIDEwICogOnNj YWxlDQpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ2JlbmNoL3BnYmVuY2guYyBi L3NyYy9iaW4vcGdiZW5jaC9wZ2JlbmNoLmMNCmluZGV4IDVhM2M2Y2QuLmEz MmRiMmIgMTAwNjQ0DQotLS0gYS9zcmMvYmluL3BnYmVuY2gvcGdiZW5jaC5j DQorKysgYi9zcmMvYmluL3BnYmVuY2gvcGdiZW5jaC5jDQpAQCAtMzgsNiAr MzgsNyBAQA0KICNpbmNsdWRlICJwb3J0YWJpbGl0eS9pbnN0cl90aW1lLmgi DQogDQogI2luY2x1ZGUgPGN0eXBlLmg+DQorI2luY2x1ZGUgPGxpbWl0cy5o Pg0KICNpbmNsdWRlIDxtYXRoLmg+DQogI2luY2x1ZGUgPHNpZ25hbC5oPg0K ICNpbmNsdWRlIDxzeXMvdGltZS5oPg0KQEAgLTE4MCw2ICsxODEsOCBAQCBj aGFyCSAgICpsb2dpbiA9IE5VTEw7DQogY2hhcgkgICAqZGJOYW1lOw0KIGNv bnN0IGNoYXIgKnByb2duYW1lOw0KIA0KKyNkZWZpbmUgV1NFUCAnQCcJCQkJ Lyogd2VpZ2h0IHNlcGFyYXRvciAqLw0KKw0KIHZvbGF0aWxlIGJvb2wgdGlt ZXJfZXhjZWVkZWQgPSBmYWxzZTsJLyogZmxhZyBmcm9tIHNpZ25hbCBoYW5k bGVyICovDQogDQogLyogdmFyaWFibGUgZGVmaW5pdGlvbnMgKi8NCkBAIC0y OTgsMjYgKzMwMSwzMCBAQCB0eXBlZGVmIHN0cnVjdA0KIAlTaW1wbGVTdGF0 cyBzdGF0czsJCQkvKiB0aW1lIHNwZW50IGluIHRoaXMgY29tbWFuZCAqLw0K IH0gQ29tbWFuZDsNCiANCi1zdGF0aWMgc3RydWN0DQordHlwZWRlZiBzdHJ1 Y3QNCiB7DQotCWNvbnN0IGNoYXIgKm5hbWU7DQorCWNvbnN0IGNoYXIgKmRl c2M7DQorCWludAkJCXdlaWdodDsNCiAJQ29tbWFuZCAgICoqY29tbWFuZHM7 DQotCVN0YXRzRGF0YSBzdGF0czsNCi19CXNxbF9zY3JpcHRbTUFYX1NDUklQ VFNdOwkvKiBTUUwgc2NyaXB0IGZpbGVzICovDQorCVN0YXRzRGF0YQlzdGF0 czsNCit9IFBhcnNlZFNjcmlwdDsNCisNCitzdGF0aWMgUGFyc2VkU2NyaXB0 IHNxbF9zY3JpcHRbTUFYX1NDUklQVFNdOwkvKiBTUUwgc2NyaXB0IGZpbGVz ICovDQogc3RhdGljIGludAludW1fc2NyaXB0czsJCS8qIG51bWJlciBvZiBz Y3JpcHRzIGluIHNxbF9zY3JpcHRbXSAqLw0KIHN0YXRpYyBpbnQJbnVtX2Nv bW1hbmRzID0gMDsJLyogdG90YWwgbnVtYmVyIG9mIENvbW1hbmQgc3RydWN0 cyAqLw0KK3N0YXRpYyBpbnQ2NCB0b3RhbF93ZWlnaHQgPSAwOw0KKw0KIHN0 YXRpYyBpbnQJZGVidWcgPSAwOwkJCS8qIGRlYnVnIGZsYWcgKi8NCiANCiAv KiBEZWZpbmUgYnVpbHRpbiB0ZXN0IHNjcmlwdHMgKi8NCi0jZGVmaW5lIE5f QlVJTFRJTiAzDQotc3RhdGljIHN0cnVjdA0KK3R5cGVkZWYgc3RydWN0IHNj cmlwdF90DQogew0KIAljaGFyCSAgICpuYW1lOwkJCS8qIHZlcnkgc2hvcnQg bmFtZSBmb3IgLWIgLi4uICovDQogCWNoYXIJICAgKmRlc2M7CQkJLyogc2hv cnQgZGVzY3JpcHRpb24gKi8NCi0JY2hhcgkgICAqY29tbWFuZHM7CQkvKiBh Y3R1YWwgcGdiZW5jaCBzY3JpcHQgKi8NCi19DQorCWNoYXIJICAgKnNjcmlw dDsJCQkvKiBhY3R1YWwgcGdiZW5jaCBzY3JpcHQgKi8NCit9IHNjcmlwdF90 Ow0KIA0KLQkJCWJ1aWx0aW5fc2NyaXB0W10gPQ0KK3N0YXRpYyBzY3JpcHRf dCBidWlsdGluX3NjcmlwdFtdID0NCiB7DQogCXsNCiAJCSJ0cGNiLWxpa2Ui LA0KQEAgLTM5Myw5ICs0MDAsOSBAQCB1c2FnZSh2b2lkKQ0KIAkgIiAgLS10 YWJsZXNwYWNlPVRBQkxFU1BBQ0UgIGNyZWF0ZSB0YWJsZXMgaW4gdGhlIHNw ZWNpZmllZCB0YWJsZXNwYWNlXG4iDQogCQkgICAiICAtLXVubG9nZ2VkLXRh YmxlcyAgICAgICAgY3JlYXRlIHRhYmxlcyBhcyB1bmxvZ2dlZCB0YWJsZXNc biINCiAJCSAgICJcbk9wdGlvbnMgdG8gc2VsZWN0IHdoYXQgdG8gcnVuOlxu Ig0KLQkJICAgIiAgLWIsIC0tYnVpbHRpbj1OQU1FICAgICAgIGFkZCBidWl0 aW4gc2NyaXB0ICh1c2UgXCItYiBsaXN0XCIgdG8gZGlzcGxheVxuIg0KLQkJ ICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZSBzY3Jp cHRzKVxuIg0KLQkJICAgIiAgLWYsIC0tZmlsZT1GSUxFTkFNRSAgICAgIGFk ZCB0cmFuc2FjdGlvbiBzY3JpcHQgZnJvbSBGSUxFTkFNRVxuIg0KKwkJICAg IiAgLWIsIC0tYnVpbHRpbj1OQU1FW0BXXSAgIGFkZCBidWlsdGluIHNjcmlw dCBOQU1FIHdlaWdodGVkIGF0IFcgKGRlZmF1bHQ6IDEpXG4iDQorCQkgICAi ICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVzZSBcIi1iIGxpc3RcIiB0 byBsaXN0IGF2YWlsYWJsZSBzY3JpcHRzKVxuIg0KKwkJICAgIiAgLWYsIC0t ZmlsZT1GSUxFTkFNRVtAV10gIGFkZCBzY3JpcHQgRklMRU5BTUUgd2VpZ2h0 ZWQgYXQgVyAoZGVmYXVsdDogMSlcbiINCiAJCSAgICIgIC1OLCAtLXNraXAt c29tZS11cGRhdGVzICBza2lwIHVwZGF0ZXMgb2YgcGdiZW5jaF90ZWxsZXJz IGFuZCBwZ2JlbmNoX2JyYW5jaGVzXG4iDQogCQkgICAiICAgICAgICAgICAg ICAgICAgICAgICAgICAgKHNhbWUgYXMgXCItYiBzaW1wbGUtdXBkYXRlXCIp XG4iDQogCQkgICAiICAtUywgLS1zZWxlY3Qtb25seSAgICAgICAgcGVyZm9y bSBTRUxFQ1Qtb25seSB0cmFuc2FjdGlvbnNcbiINCkBAIC0xMzEzLDEzICsx MzIwLDIzIEBAIGNsaWVudERvbmUoQ1N0YXRlICpzdCwgYm9vbCBvaykNCiAJ cmV0dXJuIGZhbHNlOwkJCQkvKiBhbHdheXMgZmFsc2UgKi8NCiB9DQogDQor LyogcmV0dXJuIGEgc2NyaXB0IG51bWJlciB3aXRoIGEgd2VpZ2h0ZWQgY2hv aWNlLiAqLw0KIHN0YXRpYyBpbnQNCiBjaG9vc2VTY3JpcHQoVFN0YXRlICp0 aHJlYWQpDQogew0KKwlpbnQJCQlpID0gMDsNCisJaW50NjQJCXc7DQorDQog CWlmIChudW1fc2NyaXB0cyA9PSAxKQ0KIAkJcmV0dXJuIDA7DQogDQotCXJl dHVybiBnZXRyYW5kKHRocmVhZCwgMCwgbnVtX3NjcmlwdHMgLSAxKTsNCisJ dyA9IGdldHJhbmQodGhyZWFkLCAwLCB0b3RhbF93ZWlnaHQgLSAxKTsNCisJ ZG8NCisJew0KKwkJdyAtPSBzcWxfc2NyaXB0W2krK10ud2VpZ2h0Ow0KKwl9 IHdoaWxlICh3ID49IDApOw0KKw0KKwlyZXR1cm4gaSAtIDE7DQogfQ0KIA0K IC8qIHJldHVybiBmYWxzZSBpZmYgY2xpZW50IHNob3VsZCBiZSBkaXNjb25u ZWN0ZWQgKi8NCkBAIC0xNDkzLDcgKzE1MTAsNyBAQCB0b3A6DQogCQkJY29t bWFuZHMgPSBzcWxfc2NyaXB0W3N0LT51c2VfZmlsZV0uY29tbWFuZHM7DQog CQkJaWYgKGRlYnVnKQ0KIAkJCQlmcHJpbnRmKHN0ZGVyciwgImNsaWVudCAl ZCBleGVjdXRpbmcgc2NyaXB0IFwiJXNcIlxuIiwgc3QtPmlkLA0KLQkJCQkJ CXNxbF9zY3JpcHRbc3QtPnVzZV9maWxlXS5uYW1lKTsNCisJCQkJCQlzcWxf c2NyaXB0W3N0LT51c2VfZmlsZV0uZGVzYyk7DQogCQkJc3QtPmlzX3Rocm90 dGxlZCA9IGZhbHNlOw0KIA0KIAkJCS8qDQpAQCAtMjYyNSwzNCArMjY0Miwz NSBAQCByZWFkX2xpbmVfZnJvbV9maWxlKEZJTEUgKmZkKQ0KIH0NCiANCiAv Kg0KLSAqIEdpdmVuIGEgZmlsZSBuYW1lLCByZWFkIGl0IGFuZCByZXR1cm4g dGhlIGFycmF5IG9mIENvbW1hbmRzIGNvbnRhaW5lZA0KLSAqIHRoZXJlaW4u ICAiLSIgbWVhbnMgdG8gcmVhZCBzdGRpbi4NCisgKiBHaXZlbiBhIGZpbGUg bmFtZSwgcmVhZCBpdCBhbmQgcmV0dXJuIGEgc2NyaXB0X3Qgd2l0aCBhIGRl c2NyaXB0aW9uICYNCisgKiBhbiBhcnJheSBvZiBjb21tYW5kcy4gICItIiBt ZWFucyB0byByZWFkIHN0ZGluLg0KICAqLw0KLXN0YXRpYyBDb21tYW5kICoq DQorc3RhdGljIFBhcnNlZFNjcmlwdA0KIHByb2Nlc3NfZmlsZShjaGFyICpm aWxlbmFtZSkNCiB7DQogI2RlZmluZSBDT01NQU5EU19BTExPQ19OVU0gMTI4 DQogDQotCUNvbW1hbmQgICAqKm15X2NvbW1hbmRzOw0KKwlQYXJzZWRTY3Jp cHQgcHM7DQorDQogCUZJTEUJICAgKmZkOw0KIAlpbnQJCQlsaW5lbm8sDQog CQkJCWluZGV4Ow0KIAljaGFyCSAgICpidWY7DQogCWludAkJCWFsbG9jX251 bTsNCiANCi0JYWxsb2NfbnVtID0gQ09NTUFORFNfQUxMT0NfTlVNOw0KLQlt eV9jb21tYW5kcyA9IChDb21tYW5kICoqKSBwZ19tYWxsb2Moc2l6ZW9mKENv bW1hbmQgKikgKiBhbGxvY19udW0pOw0KLQ0KIAlpZiAoc3RyY21wKGZpbGVu YW1lLCAiLSIpID09IDApDQogCQlmZCA9IHN0ZGluOw0KIAllbHNlIGlmICgo ZmQgPSBmb3BlbihmaWxlbmFtZSwgInIiKSkgPT0gTlVMTCkNCiAJew0KIAkJ ZnByaW50ZihzdGRlcnIsICJjb3VsZCBub3Qgb3BlbiBmaWxlIFwiJXNcIjog JXNcbiIsDQogCQkJCWZpbGVuYW1lLCBzdHJlcnJvcihlcnJubykpOw0KLQkJ cGdfZnJlZShteV9jb21tYW5kcyk7DQotCQlyZXR1cm4gTlVMTDsNCisJCWV4 aXQoMSk7DQogCX0NCiANCisJYWxsb2NfbnVtID0gQ09NTUFORFNfQUxMT0Nf TlVNOw0KKwlwcy5jb21tYW5kcyA9IChDb21tYW5kICoqKSBwZ19tYWxsb2Mo c2l6ZW9mKENvbW1hbmQgKikgKiBhbGxvY19udW0pOw0KKwlwcy5kZXNjID0g ZmlsZW5hbWU7DQorDQogCWxpbmVubyA9IDA7DQogCWluZGV4ID0gMDsNCiAN CkBAIC0yNjY5LDM1ICsyNjg3LDM4IEBAIHByb2Nlc3NfZmlsZShjaGFyICpm aWxlbmFtZSkNCiAJCWlmIChjb21tYW5kID09IE5VTEwpDQogCQkJY29udGlu dWU7DQogDQotCQlteV9jb21tYW5kc1tpbmRleF0gPSBjb21tYW5kOw0KKwkJ cHMuY29tbWFuZHNbaW5kZXhdID0gY29tbWFuZDsNCiAJCWluZGV4Kys7DQog DQogCQlpZiAoaW5kZXggPj0gYWxsb2NfbnVtKQ0KIAkJew0KIAkJCWFsbG9j X251bSArPSBDT01NQU5EU19BTExPQ19OVU07DQotCQkJbXlfY29tbWFuZHMg PSBwZ19yZWFsbG9jKG15X2NvbW1hbmRzLCBzaXplb2YoQ29tbWFuZCAqKSAq IGFsbG9jX251bSk7DQorCQkJcHMuY29tbWFuZHMgPSBwZ19yZWFsbG9jKHBz LmNvbW1hbmRzLCBzaXplb2YoQ29tbWFuZCAqKSAqIGFsbG9jX251bSk7DQog CQl9DQogCX0NCiAJZmNsb3NlKGZkKTsNCiANCi0JbXlfY29tbWFuZHNbaW5k ZXhdID0gTlVMTDsNCisJcHMuY29tbWFuZHNbaW5kZXhdID0gTlVMTDsNCiAN Ci0JcmV0dXJuIG15X2NvbW1hbmRzOw0KKwlyZXR1cm4gcHM7DQogfQ0KIA0K LXN0YXRpYyBDb21tYW5kICoqDQotcHJvY2Vzc19idWlsdGluKGNvbnN0IGNo YXIgKnRiLCBjb25zdCBjaGFyICpzb3VyY2UpDQorLyogcHJvY2VzcyBidWls dGluIHNjcmlwdCBiaSBieSBhZGRpbmcgdGhlIGFycmF5IG9mIGNvbW1hbmRz IGFuZCByZXR1cm5pbmcgaXQgKi8NCitzdGF0aWMgUGFyc2VkU2NyaXB0DQor cHJvY2Vzc19idWlsdGluKHNjcmlwdF90ICogYmkpDQogew0KICNkZWZpbmUg Q09NTUFORFNfQUxMT0NfTlVNIDEyOA0KIA0KLQlDb21tYW5kICAgKipteV9j b21tYW5kczsNCiAJaW50CQkJbGluZW5vLA0KIAkJCQlpbmRleDsNCiAJY2hh cgkJYnVmW0JVRlNJWl07DQogCWludAkJCWFsbG9jX251bTsNCisJY2hhcgkg ICAqdGIgPSBiaS0+c2NyaXB0Ow0KKwlQYXJzZWRTY3JpcHQgcHM7DQogDQog CWFsbG9jX251bSA9IENPTU1BTkRTX0FMTE9DX05VTTsNCi0JbXlfY29tbWFu ZHMgPSAoQ29tbWFuZCAqKikgcGdfbWFsbG9jKHNpemVvZihDb21tYW5kICop ICogYWxsb2NfbnVtKTsNCisJcHMuZGVzYyA9IGJpLT5kZXNjOw0KKwlwcy5j b21tYW5kcyA9IChDb21tYW5kICoqKSBwZ19tYWxsb2Moc2l6ZW9mKENvbW1h bmQgKikgKiBhbGxvY19udW0pOw0KIA0KIAlsaW5lbm8gPSAwOw0KIAlpbmRl eCA9IDA7DQpAQCAtMjcwNyw2ICsyNzI4LDcgQEAgcHJvY2Vzc19idWlsdGlu KGNvbnN0IGNoYXIgKnRiLCBjb25zdCBjaGFyICpzb3VyY2UpDQogCQljaGFy CSAgICpwOw0KIAkJQ29tbWFuZCAgICAqY29tbWFuZDsNCiANCisJCS8qIGJ1 ZmZlciBvdmVyZmxvdyBjaGVjaz8gKi8NCiAJCXAgPSBidWY7DQogCQl3aGls ZSAoKnRiICYmICp0YiAhPSAnXG4nKQ0KIAkJCSpwKysgPSAqdGIrKzsNCkBA IC0yNzIxLDU4ICsyNzQzLDU4IEBAIHByb2Nlc3NfYnVpbHRpbihjb25zdCBj aGFyICp0YiwgY29uc3QgY2hhciAqc291cmNlKQ0KIA0KIAkJbGluZW5vICs9 IDE7DQogDQotCQljb21tYW5kID0gcHJvY2Vzc19jb21tYW5kcyhidWYsIHNv dXJjZSwgbGluZW5vKTsNCisJCWNvbW1hbmQgPSBwcm9jZXNzX2NvbW1hbmRz KGJ1ZiwgYmktPmRlc2MsIGxpbmVubyk7DQogCQlpZiAoY29tbWFuZCA9PSBO VUxMKQ0KIAkJCWNvbnRpbnVlOw0KIA0KLQkJbXlfY29tbWFuZHNbaW5kZXhd ID0gY29tbWFuZDsNCisJCXBzLmNvbW1hbmRzW2luZGV4XSA9IGNvbW1hbmQ7 DQogCQlpbmRleCsrOw0KIA0KIAkJaWYgKGluZGV4ID49IGFsbG9jX251bSkN CiAJCXsNCiAJCQlhbGxvY19udW0gKz0gQ09NTUFORFNfQUxMT0NfTlVNOw0K LQkJCW15X2NvbW1hbmRzID0gcGdfcmVhbGxvYyhteV9jb21tYW5kcywgc2l6 ZW9mKENvbW1hbmQgKikgKiBhbGxvY19udW0pOw0KKwkJCXBzLmNvbW1hbmRz ID0gcGdfcmVhbGxvYyhwcy5jb21tYW5kcywgc2l6ZW9mKENvbW1hbmQgKikg KiBhbGxvY19udW0pOw0KIAkJfQ0KIAl9DQogDQotCW15X2NvbW1hbmRzW2lu ZGV4XSA9IE5VTEw7DQorCXBzLmNvbW1hbmRzW2luZGV4XSA9IE5VTEw7DQog DQotCXJldHVybiBteV9jb21tYW5kczsNCisJcmV0dXJuIHBzOw0KIH0NCiAN CisvKiBzaG93IGF2YWlsYWJsZSBidWlsdGluIHNjcmlwdHMgKi8NCiBzdGF0 aWMgdm9pZA0KIGxpc3RBdmFpbGFibGVTY3JpcHRzKHZvaWQpDQogew0KIAlp bnQJCQlpOw0KIA0KIAlmcHJpbnRmKHN0ZGVyciwgIkF2YWlsYWJsZSBidWls dGluIHNjcmlwdHM6XG4iKTsNCi0JZm9yIChpID0gMDsgaSA8IE5fQlVJTFRJ TjsgaSsrKQ0KKwlmb3IgKGkgPSAwOyBpIDwgbGVuZ3Rob2YoYnVpbHRpbl9z Y3JpcHQpOyBpKyspDQogCQlmcHJpbnRmKHN0ZGVyciwgIlx0JXNcbiIsIGJ1 aWx0aW5fc2NyaXB0W2ldLm5hbWUpOw0KIAlmcHJpbnRmKHN0ZGVyciwgIlxu Iik7DQogfQ0KIA0KLS8qIHJldHVybiBidWlsdGluIHNjcmlwdCAibmFtZSIg aWYgdW5hbWJpZ3VvdXMgKi8NCi1zdGF0aWMgY2hhciAqDQotZmluZEJ1aWx0 aW4oY29uc3QgY2hhciAqbmFtZSwgY2hhciAqKmRlc2MpDQorLyogcmV0dXJu IGJ1aWx0aW4gc2NyaXB0ICJuYW1lIiBpZiB1bmFtYmlndW91cywgb2YgZmFp bHMgaWYgbm90IGZvdW5kICovDQorc3RhdGljIHNjcmlwdF90ICoNCitmaW5k QnVpbHRpbihjb25zdCBjaGFyICpuYW1lKQ0KIHsNCiAJaW50CQkJaSwNCiAJ CQkJZm91bmQgPSAwLA0KIAkJCQlsZW4gPSBzdHJsZW4obmFtZSk7DQotCWNo YXIJICAgKmNvbW1hbmRzID0gTlVMTDsNCisJc2NyaXB0X3QgICAqcmVzdWx0 ID0gTlVMTDsNCiANCi0JZm9yIChpID0gMDsgaSA8IE5fQlVJTFRJTjsgaSsr KQ0KKwlmb3IgKGkgPSAwOyBpIDwgbGVuZ3Rob2YoYnVpbHRpbl9zY3JpcHQp OyBpKyspDQogCXsNCiAJCWlmIChzdHJuY21wKGJ1aWx0aW5fc2NyaXB0W2ld Lm5hbWUsIG5hbWUsIGxlbikgPT0gMCkNCiAJCXsNCi0JCQkqZGVzYyA9IGJ1 aWx0aW5fc2NyaXB0W2ldLmRlc2M7DQotCQkJY29tbWFuZHMgPSBidWlsdGlu X3NjcmlwdFtpXS5jb21tYW5kczsNCisJCQlyZXN1bHQgPSAmIGJ1aWx0aW5f c2NyaXB0W2ldOw0KIAkJCWZvdW5kKys7DQogCQl9DQogCX0NCiANCiAJLyog b2ssIHVuYW1iaWd1b3VzIHJlc3VsdCAqLw0KIAlpZiAoZm91bmQgPT0gMSkN Ci0JCXJldHVybiBjb21tYW5kczsNCisJCXJldHVybiByZXN1bHQ7DQogDQog CS8qIGVycm9yIGNhc2VzICovDQogCWlmIChmb3VuZCA9PSAwKQ0KQEAgLTI3 ODUsMTMgKzI4MDcsNjEgQEAgZmluZEJ1aWx0aW4oY29uc3QgY2hhciAqbmFt ZSwgY2hhciAqKmRlc2MpDQogCWV4aXQoMSk7DQogfQ0KIA0KKy8qDQorICog RGV0ZXJtaW5lIHRoZSB3ZWlnaHQgc3BlY2lmaWNhdGlvbiBmcm9tIGEgc2Ny aXB0IG9wdGlvbiAoLWIsIC1mKSwgaWYgYW55LA0KKyAqIGFuZCByZXR1cm4g aXQgYXMgYW4gaW50ZWdlciAoMSBpcyByZXR1cm5lZCBpZiB0aGVyZSdzIG5v IHdlaWdodCkuICBUaGUNCisgKiBzY3JpcHQgbmFtZSBpcyByZXR1cm5lZCBp biAqc2NyaXB0IGFzIGEgbWFsbG9jJ2Qgc3RyaW5nLg0KKyAqLw0KK3N0YXRp YyBpbnQNCitwYXJzZVNjcmlwdFdlaWdodChjb25zdCBjaGFyICpvcHRpb24s IGNoYXIgKipzY3JpcHQpDQorew0KKwljaGFyCSAgICpzZXA7DQorCWludAkJ CXdlaWdodDsNCisNCisJaWYgKChzZXAgPSBzdHJyY2hyKG9wdGlvbiwgV1NF UCkpKQ0KKwl7DQorCQlpbnQJCW5hbWVsZW4gPSBzZXAgLSBvcHRpb247DQor CQlsb25nCXd0bXA7DQorCQljaGFyICAgKmJhZHA7DQorDQorCQkvKiBnZW5l cmF0ZSB0aGUgc2NyaXB0IG5hbWUgKi8NCisJCSpzY3JpcHQgPSBwZ19tYWxs b2MobmFtZWxlbiArIDEpOw0KKwkJc3RybmNweSgqc2NyaXB0LCBvcHRpb24s IG5hbWVsZW4pOw0KKwkJKCpzY3JpcHQpW25hbWVsZW5dID0gJ1wwJzsNCisN CisJCS8qIHByb2Nlc3MgZGlnaXRzIG9mIHRoZSB3ZWlnaHQgc3BlYyAqLw0K KwkJZXJybm8gPSAwOw0KKwkJd3RtcCA9IHN0cnRvbChzZXAgKyAxLCAmYmFk cCwgMTApOw0KKwkJaWYgKGVycm5vICE9IDAgfHwgYmFkcCA9PSBzZXAgKyAx IHx8ICpiYWRwICE9ICdcMCcpDQorCQl7DQorCQkJZnByaW50ZihzdGRlcnIs ICJpbnZhbGlkIHdlaWdodCBzcGVjaWZpY2F0aW9uOiAlc1xuIiwgc2VwKTsN CisJCQlleGl0KDEpOw0KKwkJfQ0KKwkJaWYgKHd0bXAgPiBJTlRfTUFYIHx8 IHd0bXAgPD0gMCkNCisJCXsNCisJCQlmcHJpbnRmKHN0ZGVyciwNCisJCQkJ CSJ3ZWlnaHQgc3BlY2lmaWNhdGlvbiBvdXQgb2YgcmFuZ2UgKDEgLi4gJXUp OiAiIElOVDY0X0ZPUk1BVCAiXG4iLA0KKwkJCQkJSU5UX01BWCwgKGludDY0 KSB3dG1wKTsNCisJCQlleGl0KDEpOw0KKwkJfQ0KKwkJd2VpZ2h0ID0gd3Rt cDsNCisJfQ0KKwllbHNlDQorCXsNCisJCSpzY3JpcHQgPSBwZ19zdHJkdXAo b3B0aW9uKTsNCisJCXdlaWdodCA9IDE7DQorCX0NCisNCisJcmV0dXJuIHdl aWdodDsNCit9DQorDQorLyogYXBwZW5kIGEgc2NyaXB0IHRvIHRoZSBsaXN0 IG9mIHNjcmlwdHMgdG8gcHJvY2VzcyAqLw0KIHN0YXRpYyB2b2lkDQotYWRk U2NyaXB0KGNvbnN0IGNoYXIgKm5hbWUsIENvbW1hbmQgKipjb21tYW5kcykN CithZGRTY3JpcHQoUGFyc2VkU2NyaXB0IHNjcmlwdCwgaW50IHdlaWdodCkN CiB7DQotCWlmIChjb21tYW5kcyA9PSBOVUxMIHx8DQotCQljb21tYW5kc1sw XSA9PSBOVUxMKQ0KKwlpZiAoc2NyaXB0LmNvbW1hbmRzID09IE5VTEwgfHwg c2NyaXB0LmNvbW1hbmRzWzBdID09IE5VTEwpDQogCXsNCi0JCWZwcmludGYo c3RkZXJyLCAiZW1wdHkgY29tbWFuZCBsaXN0IGZvciBzY3JpcHQgXCIlc1wi XG4iLCBuYW1lKTsNCisJCWZwcmludGYoc3RkZXJyLCAiZW1wdHkgY29tbWFu ZCBsaXN0IGZvciBzY3JpcHQgXCIlc1wiXG4iLCBzY3JpcHQuZGVzYyk7DQog CQlleGl0KDEpOw0KIAl9DQogDQpAQCAtMjgwMSw4ICsyODcxLDggQEAgYWRk U2NyaXB0KGNvbnN0IGNoYXIgKm5hbWUsIENvbW1hbmQgKipjb21tYW5kcykN CiAJCWV4aXQoMSk7DQogCX0NCiANCi0Jc3FsX3NjcmlwdFtudW1fc2NyaXB0 c10ubmFtZSA9IG5hbWU7DQotCXNxbF9zY3JpcHRbbnVtX3NjcmlwdHNdLmNv bW1hbmRzID0gY29tbWFuZHM7DQorCXNxbF9zY3JpcHRbbnVtX3NjcmlwdHNd ID0gc2NyaXB0Ow0KKwlzcWxfc2NyaXB0W251bV9zY3JpcHRzXS53ZWlnaHQg PSB3ZWlnaHQ7DQogCWluaXRTdGF0cygmc3FsX3NjcmlwdFtudW1fc2NyaXB0 c10uc3RhdHMsIDAuMCk7DQogCW51bV9zY3JpcHRzKys7DQogfQ0KQEAgLTI4 MzMsNyArMjkwMyw3IEBAIHByaW50UmVzdWx0cyhUU3RhdGUgKnRocmVhZHMs IFN0YXRzRGF0YSAqdG90YWwsIGluc3RyX3RpbWUgdG90YWxfdGltZSwNCiAJ CQkJCQkoSU5TVFJfVElNRV9HRVRfRE9VQkxFKGNvbm5fdG90YWxfdGltZSkg LyBuY2xpZW50cykpOw0KIA0KIAlwcmludGYoInRyYW5zYWN0aW9uIHR5cGU6 ICVzXG4iLA0KLQkJICAgbnVtX3NjcmlwdHMgPT0gMSA/IHNxbF9zY3JpcHRb MF0ubmFtZSA6ICJtdWx0aXBsZSBzY3JpcHRzIik7DQorCQkgICBudW1fc2Ny aXB0cyA9PSAxID8gc3FsX3NjcmlwdFswXS5kZXNjIDogIm11bHRpcGxlIHNj cmlwdHMiKTsNCiAJcHJpbnRmKCJzY2FsaW5nIGZhY3RvcjogJWRcbiIsIHNj YWxlKTsNCiAJcHJpbnRmKCJxdWVyeSBtb2RlOiAlc1xuIiwgUVVFUllNT0RF W3F1ZXJ5bW9kZV0pOw0KIAlwcmludGYoIm51bWJlciBvZiBjbGllbnRzOiAl ZFxuIiwgbmNsaWVudHMpOw0KQEAgLTI4ODcsMTkgKzI5NTcsMjQgQEAgcHJp bnRSZXN1bHRzKFRTdGF0ZSAqdGhyZWFkcywgU3RhdHNEYXRhICp0b3RhbCwg aW5zdHJfdGltZSB0b3RhbF90aW1lLA0KIAlwcmludGYoInRwcyA9ICVmIChp bmNsdWRpbmcgY29ubmVjdGlvbnMgZXN0YWJsaXNoaW5nKVxuIiwgdHBzX2lu Y2x1ZGUpOw0KIAlwcmludGYoInRwcyA9ICVmIChleGNsdWRpbmcgY29ubmVj dGlvbnMgZXN0YWJsaXNoaW5nKVxuIiwgdHBzX2V4Y2x1ZGUpOw0KIA0KLQkv KiBSZXBvcnQgcGVyLWNvbW1hbmQgc3RhdGlzdGljcyAqLw0KLQlpZiAocGVy X3NjcmlwdF9zdGF0cykNCisJLyogUmVwb3J0IHBlci1zY3JpcHQvY29tbWFu ZCBzdGF0aXN0aWNzICovDQorCWlmIChwZXJfc2NyaXB0X3N0YXRzIHx8IGxh dGVuY3lfbGltaXQgfHwgaXNfbGF0ZW5jaWVzKQ0KIAl7DQogCQlpbnQJCQlp Ow0KIA0KIAkJZm9yIChpID0gMDsgaSA8IG51bV9zY3JpcHRzOyBpKyspDQog CQl7DQotCQkJcHJpbnRmKCJTUUwgc2NyaXB0ICVkOiAlc1xuIg0KLQkJCSIg LSAiIElOVDY0X0ZPUk1BVCAiIHRyYW5zYWN0aW9ucyAoJS4xZiUlIG9mIHRv dGFsLCB0cHMgPSAlZilcbiIsDQotCQkJCSAgIGkgKyAxLCBzcWxfc2NyaXB0 W2ldLm5hbWUsDQotCQkJCSAgIHNxbF9zY3JpcHRbaV0uc3RhdHMuY250LA0K LQkJCQkgICAxMDAuMCAqIHNxbF9zY3JpcHRbaV0uc3RhdHMuY250IC8gdG90 YWwtPmNudCwNCi0JCQkJICAgc3FsX3NjcmlwdFtpXS5zdGF0cy5jbnQgLyB0 aW1lX2luY2x1ZGUpOw0KKwkJCWlmIChudW1fc2NyaXB0cyA+IDEpDQorCQkJ CXByaW50ZigiU1FMIHNjcmlwdCAlZDogJXNcbiINCisJCQkJCSAgICIgLSB3 ZWlnaHQgPSAlZFxuIg0KKwkJCQkJICAgIiAtICIgSU5UNjRfRk9STUFUICIg dHJhbnNhY3Rpb25zICglLjFmJSUgb2YgdG90YWwsIHRwcyA9ICVmKVxuIiwN CisJCQkJCSAgIGkgKyAxLCBzcWxfc2NyaXB0W2ldLmRlc2MsDQorCQkJCQkg ICBzcWxfc2NyaXB0W2ldLndlaWdodCwNCisJCQkJCSAgIHNxbF9zY3JpcHRb aV0uc3RhdHMuY250LA0KKwkJCQkJICAgMTAwLjAgKiBzcWxfc2NyaXB0W2ld LnN0YXRzLmNudCAvIHRvdGFsLT5jbnQsDQorCQkJCQkgICBzcWxfc2NyaXB0 W2ldLnN0YXRzLmNudCAvIHRpbWVfaW5jbHVkZSk7DQorCQkJZWxzZQ0KKwkJ CQlwcmludGYoInNjcmlwdCBzdGF0aXN0aWNzOlxuIik7DQogDQogCQkJaWYg KGxhdGVuY3lfbGltaXQpDQogCQkJCXByaW50ZigiIC0gbnVtYmVyIG9mIHRy YW5zYWN0aW9ucyBza2lwcGVkOiAiIElOVDY0X0ZPUk1BVCAiICglLjNmJSUp XG4iLA0KQEAgLTI5MDcsNyArMjk4Miw4IEBAIHByaW50UmVzdWx0cyhUU3Rh dGUgKnRocmVhZHMsIFN0YXRzRGF0YSAqdG90YWwsIGluc3RyX3RpbWUgdG90 YWxfdGltZSwNCiAJCQkJCSAgIDEwMC4wICogc3FsX3NjcmlwdFtpXS5zdGF0 cy5za2lwcGVkIC8NCiAJCQkJCShzcWxfc2NyaXB0W2ldLnN0YXRzLnNraXBw ZWQgKyBzcWxfc2NyaXB0W2ldLnN0YXRzLmNudCkpOw0KIA0KLQkJCXByaW50 U2ltcGxlU3RhdHMoIiAtIGxhdGVuY3kiLCAmc3FsX3NjcmlwdFtpXS5zdGF0 cy5sYXRlbmN5KTsNCisJCQlpZiAobnVtX3NjcmlwdHMgPiAxKQ0KKwkJCQlw cmludFNpbXBsZVN0YXRzKCIgLSBsYXRlbmN5IiwgJnNxbF9zY3JpcHRbaV0u c3RhdHMubGF0ZW5jeSk7DQogDQogCQkJLyogUmVwb3J0IHBlci1jb21tYW5k IGxhdGVuY2llcyAqLw0KIAkJCWlmIChpc19sYXRlbmNpZXMpDQpAQCAtMjk5 MCw3ICszMDY2LDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpDQog CWluc3RyX3RpbWUJY29ubl90b3RhbF90aW1lOw0KIAlpbnQ2NAkJbGF0ZW5j eV9sYXRlID0gMDsNCiAJU3RhdHNEYXRhCXN0YXRzOw0KLQljaGFyCSAgICpk ZXNjOw0KKwlpbnQJCQl3ZWlnaHQ7DQogDQogCWludAkJCWk7DQogCWludAkJ CW5jbGllbnRzX2RlYWx0Ow0KQEAgLTMwMzgsNiArMzExNCw4IEBAIG1haW4o aW50IGFyZ2MsIGNoYXIgKiphcmd2KQ0KIA0KIAl3aGlsZSAoKGMgPSBnZXRv cHRfbG9uZyhhcmdjLCBhcmd2LCAiaWg6bnZwOmRxYjpTTmM6ajpDcnM6dDpU OlU6bGY6RDpGOk06UDpSOkw6IiwgbG9uZ19vcHRpb25zLCAmb3B0aW5kZXgp KSAhPSAtMSkNCiAJew0KKwkJY2hhcgkJKnNjcmlwdDsNCisNCiAJCXN3aXRj aCAoYykNCiAJCXsNCiAJCQljYXNlICdpJzoNCkBAIC0zMTY5LDI3ICszMjQ3 LDI1IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQ0KIAkJCQkJZXhp dCgwKTsNCiAJCQkJfQ0KIA0KLQkJCQlhZGRTY3JpcHQoZGVzYywNCi0JCQkJ CQkgIHByb2Nlc3NfYnVpbHRpbihmaW5kQnVpbHRpbihvcHRhcmcsICZkZXNj KSwgZGVzYykpOw0KKwkJCQl3ZWlnaHQgPSBwYXJzZVNjcmlwdFdlaWdodChv cHRhcmcsICZzY3JpcHQpOw0KKwkJCQlhZGRTY3JpcHQocHJvY2Vzc19idWls dGluKGZpbmRCdWlsdGluKHNjcmlwdCkpLCB3ZWlnaHQpOw0KIAkJCQliZW5j aG1hcmtpbmdfb3B0aW9uX3NldCA9IHRydWU7DQogCQkJCWludGVybmFsX3Nj cmlwdF91c2VkID0gdHJ1ZTsNCiAJCQkJYnJlYWs7DQorDQogCQkJY2FzZSAn Uyc6DQotCQkJCWFkZFNjcmlwdChkZXNjLA0KLQkJCQkJCSAgcHJvY2Vzc19i dWlsdGluKGZpbmRCdWlsdGluKCJzZWxlY3Qtb25seSIsICZkZXNjKSwNCi0J CQkJCQkJCQkJICBkZXNjKSk7DQorCQkJCWFkZFNjcmlwdChwcm9jZXNzX2J1 aWx0aW4oZmluZEJ1aWx0aW4oInNlbGVjdC1vbmx5IikpLCAxKTsNCiAJCQkJ YmVuY2htYXJraW5nX29wdGlvbl9zZXQgPSB0cnVlOw0KIAkJCQlpbnRlcm5h bF9zY3JpcHRfdXNlZCA9IHRydWU7DQogCQkJCWJyZWFrOw0KIAkJCWNhc2Ug J04nOg0KLQkJCQlhZGRTY3JpcHQoZGVzYywNCi0JCQkJCQkgIHByb2Nlc3Nf YnVpbHRpbihmaW5kQnVpbHRpbigic2ltcGxlLXVwZGF0ZSIsICZkZXNjKSwN Ci0JCQkJCQkJCQkJICBkZXNjKSk7DQorCQkJCWFkZFNjcmlwdChwcm9jZXNz X2J1aWx0aW4oZmluZEJ1aWx0aW4oInNpbXBsZS11cGRhdGUiKSksIDEpOw0K IAkJCQliZW5jaG1hcmtpbmdfb3B0aW9uX3NldCA9IHRydWU7DQogCQkJCWlu dGVybmFsX3NjcmlwdF91c2VkID0gdHJ1ZTsNCiAJCQkJYnJlYWs7DQogCQkJ Y2FzZSAnZic6DQotCQkJCWFkZFNjcmlwdChvcHRhcmcsIHByb2Nlc3NfZmls ZShvcHRhcmcpKTsNCisJCQkJd2VpZ2h0ID0gcGFyc2VTY3JpcHRXZWlnaHQo b3B0YXJnLCAmc2NyaXB0KTsNCisJCQkJYWRkU2NyaXB0KHByb2Nlc3NfZmls ZShzY3JpcHQpLCB3ZWlnaHQpOw0KIAkJCQliZW5jaG1hcmtpbmdfb3B0aW9u X3NldCA9IHRydWU7DQogCQkJCWJyZWFrOw0KIAkJCWNhc2UgJ0QnOg0KQEAg LTMzMjcsMTIgKzM0MDMsMTYgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFy Z3YpDQogCS8qIHNldCBkZWZhdWx0IHNjcmlwdCBpZiBub25lICovDQogCWlm IChudW1fc2NyaXB0cyA9PSAwICYmICFpc19pbml0X21vZGUpDQogCXsNCi0J CWFkZFNjcmlwdChkZXNjLA0KLQkJCQkgIHByb2Nlc3NfYnVpbHRpbihmaW5k QnVpbHRpbigidHBjYi1saWtlIiwgJmRlc2MpLCBkZXNjKSk7DQorCQlhZGRT Y3JpcHQocHJvY2Vzc19idWlsdGluKGZpbmRCdWlsdGluKCJ0cGNiLWxpa2Ui KSksIDEpOw0KIAkJYmVuY2htYXJraW5nX29wdGlvbl9zZXQgPSB0cnVlOw0K IAkJaW50ZXJuYWxfc2NyaXB0X3VzZWQgPSB0cnVlOw0KIAl9DQogDQorCS8q IGNvbXB1dGUgdG90YWxfd2VpZ2h0ICovDQorCWZvciAoaSA9IDA7IGkgPCBu dW1fc2NyaXB0czsgaSsrKQ0KKwkJLyogY2Fubm90IG92ZXJmbG93OiB3ZWln aHQgaXMgMzJiLCB0b3RhbF93ZWlnaHQgNjRiICovDQorCQl0b3RhbF93ZWln aHQgKz0gc3FsX3NjcmlwdFtpXS53ZWlnaHQ7DQorDQogCS8qIHNob3cgcGVy IHNjcmlwdCBzdGF0cyBpZiBzZXZlcmFsIHNjcmlwdHMgYXJlIHVzZWQgKi8N CiAJaWYgKG51bV9zY3JpcHRzID4gMSkNCiAJCXBlcl9zY3JpcHRfc3RhdHMg PSB0cnVlOw0KQEAgLTM3MzgsNyArMzgxOCw3IEBAIHRocmVhZFJ1bih2b2lk ICphcmcpDQogCQljb21tYW5kcyA9IHNxbF9zY3JpcHRbc3QtPnVzZV9maWxl XS5jb21tYW5kczsNCiAJCWlmIChkZWJ1ZykNCiAJCQlmcHJpbnRmKHN0ZGVy ciwgImNsaWVudCAlZCBleGVjdXRpbmcgc2NyaXB0IFwiJXNcIlxuIiwgc3Qt PmlkLA0KLQkJCQkJc3FsX3NjcmlwdFtzdC0+dXNlX2ZpbGVdLm5hbWUpOw0K KwkJCQkJc3FsX3NjcmlwdFtzdC0+dXNlX2ZpbGVdLmRlc2MpOw0KIAkJaWYg KCFkb0N1c3RvbSh0aHJlYWQsIHN0LCAmYWdncykpDQogCQkJcmVtYWlucy0t OwkJCS8qIEkndmUgYWJvcnRlZCAqLw0KIA0K --8323329-2042481995-1458118593=:3528 Content-Type: text/plain Content-Disposition: inline Content-Transfer-Encoding: 8bit MIME-Version: 1.0 -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers --8323329-2042481995-1458118593=:3528--