Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtp (Exim 4.80) (envelope-from ) id 1ZgaaN-0001GJ-6Y for pgsql-hackers@arkaria.postgresql.org; Mon, 28 Sep 2015 15:43:27 +0000 Received: from localhost ([127.0.0.1] helo=postgresql.org) by malur.postgresql.org with smtp (Exim 4.84) (envelope-from ) id 1ZgaaM-0002Bh-Jo for pgsql-hackers@arkaria.postgresql.org; Mon, 28 Sep 2015 15:43:26 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.84) (envelope-from ) id 1ZgaaL-0002Bb-Fw for pgsql-hackers@postgresql.org; Mon, 28 Sep 2015 15:43:25 +0000 Received: from jiboia.ensmp.fr ([194.214.158.137]) by magus.postgresql.org with esmtp (Exim 4.84) (envelope-from ) id 1ZgaaG-0006CM-3o for pgsql-hackers@postgresql.org; Mon, 28 Sep 2015 15:43:24 +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 t8SFhI7J022092 (version=TLSv1 cipher=ECDHE-RSA-AES256-SHA bits=256 verify=NO); Mon, 28 Sep 2015 17:43:18 +0200 Date: Mon, 28 Sep 2015 17:43:17 +0200 (CEST) From: Fabien COELHO X-X-Sender: fabien@sto To: Robert Haas cc: "pgsql-hackers@postgresql.org" Subject: Re: pgbench stats per script & other stuff In-Reply-To: Message-ID: References: <55AFD8C6.8010507@agliodbs.com> <20150902172617.GJ5286@alap3.anarazel.de> User-Agent: Alpine 2.10 (DEB 1266 2009-07-14) MIME-Version: 1.0 Content-Type: MULTIPART/MIXED; BOUNDARY="8323329-353480406-1443454997=:4252" X-Miltered: at jiboia.ensmp.fr with ID 56096016.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: 56096016.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-353480406-1443454997=:4252 Content-Type: TEXT/PLAIN; charset=US-ASCII; format=flowed >> Here is a v10, which is a rebase because of the "--progress-timestamp" >> option addition. > > I do not see it attached. Indeed. Here it is. -- Fabien. --8323329-353480406-1443454997=:4252 Content-Type: TEXT/x-diff; name=pgbench-script-stats-10.patch Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: attachment; filename=pgbench-script-stats-10.patch ZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvcGdiZW5jaC5zZ21sIGIv ZG9jL3NyYy9zZ21sL3JlZi9wZ2JlbmNoLnNnbWwNCmluZGV4IDBhYzQwZjEu LmUzYTkwZTUgMTAwNjQ0DQotLS0gYS9kb2Mvc3JjL3NnbWwvcmVmL3BnYmVu Y2guc2dtbA0KKysrIGIvZG9jL3NyYy9zZ21sL3JlZi9wZ2JlbmNoLnNnbWwN CkBAIC0yNjEsNiArMjYxLDI1IEBAIHBnYmVuY2ggPG9wdGlvbmFsPiA8cmVw bGFjZWFibGU+b3B0aW9uczwvPiA8L29wdGlvbmFsPiA8cmVwbGFjZWFibGU+ ZGJuYW1lPC8+DQogICAgIGJlbmNobWFya2luZyBhcmd1bWVudHM6DQogDQog ICAgIDx2YXJpYWJsZWxpc3Q+DQorICAgICA8dmFybGlzdGVudHJ5Pg0KKyAg ICAgIDx0ZXJtPjxvcHRpb24+LWI8Lz4gPHJlcGxhY2VhYmxlPnNjcmlwdG5h bWVbQHdlaWdodF08Lz48L3Rlcm0+DQorICAgICAgPHRlcm0+PG9wdGlvbj4t LWJ1aWx0aW48Lz4gPHJlcGxhY2VhYmxlPnNjcmlwdG5hbWVbQHdlaWdodF08 Lz48L3Rlcm0+DQorICAgICAgPGxpc3RpdGVtPg0KKyAgICAgICA8cGFyYT4N CisgICAgICAgIEFkZCB0aGUgc3BlY2lmaWVkIGJ1aWx0aW4gc2NyaXB0IHRv IHRoZSBsaXN0IG9mIGV4ZWN1dGVkIHNjcmlwdHMuDQorICAgICAgICBBbiBv cHRpb25hbCBpbnRlZ2VyIHdlaWdodCBhZnRlciA8bGl0ZXJhbD5APC8+IGFs bG93cyB0byBhZGp1c3QgdGhlDQorICAgICAgICBwcm9iYWJpbGl0eSBvZiBk cmF3aW5nIHRoZSB0ZXN0Lg0KKyAgICAgICAgQXZhaWxhYmxlIGJ1aWx0aW4g c2NyaXB0cyBhcmU6IDxsaXRlcmFsPnRwY2ItbGlrZTwvPiwNCisgICAgICAg IDxsaXRlcmFsPnNpbXBsZS11cGRhdGU8Lz4gYW5kIDxsaXRlcmFsPnNlbGVj dC1vbmx5PC8+Lg0KKyAgICAgICAgVGhlIHByb3ZpZGVkIDxyZXBsZWFjYWJs ZT5zY3JpcHRuYW1lPC8+IG5lZWRzIG9ubHkgdG8gYmUgYSBwcmVmaXgNCisg ICAgICAgIG9mIHRoZSBidWlsdGluIG5hbWUsIGhlbmNlIDxsaXRlcmFsPnNp bXA8Lz4gd291bGQgYmUgZW5vdWdoIHRvIHNlbGVjdA0KKyAgICAgICAgPGxp dGVyYWw+c2ltcGxlLXVwZGF0ZTwvPi4NCisgICAgICAgIFdpdGggc3BlY2lh bCBuYW1lIDxsaXRlcmFsPmxpc3Q8Lz4sIHNob3cgdGhlIGxpc3Qgb2YgYnVp bHRpbiBzY3JpcHRzDQorICAgICAgICBhbmQgZXhpdCBpbW1lZGlhdGVseS4N CisgICAgICAgPC9wYXJhPg0KKyAgICAgIDwvbGlzdGl0ZW0+DQorICAgICA8 L3Zhcmxpc3RlbnRyeT4NCisNCiANCiAgICAgIDx2YXJsaXN0ZW50cnk+DQog ICAgICAgPHRlcm0+PG9wdGlvbj4tYzwvb3B0aW9uPiA8cmVwbGFjZWFibGU+ Y2xpZW50czwvPjwvdGVybT4NCkBAIC0zMDcsMTQgKzMyNiwxNSBAQCBwZ2Jl bmNoIDxvcHRpb25hbD4gPHJlcGxhY2VhYmxlPm9wdGlvbnM8Lz4gPC9vcHRp b25hbD4gPHJlcGxhY2VhYmxlPmRibmFtZTwvPg0KICAgICAgPC92YXJsaXN0 ZW50cnk+DQogDQogICAgICA8dmFybGlzdGVudHJ5Pg0KLSAgICAgIDx0ZXJt PjxvcHRpb24+LWY8L29wdGlvbj4gPHJlcGxhY2VhYmxlPmZpbGVuYW1lPC8+ PC90ZXJtPg0KLSAgICAgIDx0ZXJtPjxvcHRpb24+LS1maWxlPTwvb3B0aW9u PjxyZXBsYWNlYWJsZT5maWxlbmFtZTwvPjwvdGVybT4NCisgICAgICA8dGVy bT48b3B0aW9uPi1mPC8+IDxyZXBsYWNlYWJsZT5maWxlbmFtZVtAd2VpZ2h0 XTwvPjwvdGVybT4NCisgICAgICA8dGVybT48b3B0aW9uPi0tZmlsZT08Lz48 cmVwbGFjZWFibGU+ZmlsZW5hbWVbQHdlaWdodF08Lz48L3Rlcm0+DQogICAg ICAgPGxpc3RpdGVtPg0KICAgICAgICA8cGFyYT4NCi0gICAgICAgIFJlYWQg dHJhbnNhY3Rpb24gc2NyaXB0IGZyb20gPHJlcGxhY2VhYmxlPmZpbGVuYW1l PC8+Lg0KKyAgICAgICAgQWRkIGEgdHJhbnNhY3Rpb24gc2NyaXB0IHJlYWQg ZnJvbSA8cmVwbGFjZWFibGU+ZmlsZW5hbWU8Lz4gdG8NCisgICAgICAgIHRo ZSBsaXN0IG9mIGV4ZWN1dGVkIHNjcmlwdHMuDQorICAgICAgICBBbiBvcHRp b25hbCBpbnRlZ2VyIHdlaWdodCBhZnRlciA8bGl0ZXJhbD5APC8+IGFsbG93 cyB0byBhZGp1c3QgdGhlDQorICAgICAgICBwcm9iYWJpbGl0eSBvZiBkcmF3 aW5nIHRoZSB0ZXN0Lg0KICAgICAgICAgU2VlIGJlbG93IGZvciBkZXRhaWxz Lg0KLSAgICAgICAgPG9wdGlvbj4tTjwvb3B0aW9uPiwgPG9wdGlvbj4tUzwv b3B0aW9uPiwgYW5kIDxvcHRpb24+LWY8L29wdGlvbj4NCi0gICAgICAgIGFy ZSBtdXR1YWxseSBleGNsdXNpdmUuDQogICAgICAgIDwvcGFyYT4NCiAgICAg ICA8L2xpc3RpdGVtPg0KICAgICAgPC92YXJsaXN0ZW50cnk+DQpAQCAtNDA0 LDEwICs0MjQsNyBAQCBwZ2JlbmNoIDxvcHRpb25hbD4gPHJlcGxhY2VhYmxl Pm9wdGlvbnM8Lz4gPC9vcHRpb25hbD4gPHJlcGxhY2VhYmxlPmRibmFtZTwv Pg0KICAgICAgIDx0ZXJtPjxvcHRpb24+LS1za2lwLXNvbWUtdXBkYXRlczwv b3B0aW9uPjwvdGVybT4NCiAgICAgICA8bGlzdGl0ZW0+DQogICAgICAgIDxw YXJhPg0KLSAgICAgICAgRG8gbm90IHVwZGF0ZSA8c3RydWN0bmFtZT5wZ2Jl bmNoX3RlbGxlcnM8Lz4gYW5kDQotICAgICAgICA8c3RydWN0bmFtZT5wZ2Jl bmNoX2JyYW5jaGVzPC8+Lg0KLSAgICAgICAgVGhpcyB3aWxsIGF2b2lkIHVw ZGF0ZSBjb250ZW50aW9uIG9uIHRoZXNlIHRhYmxlcywgYnV0DQotICAgICAg ICBpdCBtYWtlcyB0aGUgdGVzdCBjYXNlIGV2ZW4gbGVzcyBsaWtlIFRQQy1C Lg0KKyAgICAgICAgU2hvcnRoYW5kIGZvciA8b3B0aW9uPi1iIHNpbXBsZS11 cGRhdGVAMTwvPi4NCiAgICAgICAgPC9wYXJhPg0KICAgICAgIDwvbGlzdGl0 ZW0+DQogICAgICA8L3Zhcmxpc3RlbnRyeT4NCkBAIC01MTIsOSArNTI5LDkg QEAgcGdiZW5jaCA8b3B0aW9uYWw+IDxyZXBsYWNlYWJsZT5vcHRpb25zPC8+ IDwvb3B0aW9uYWw+IDxyZXBsYWNlYWJsZT5kYm5hbWU8Lz4NCiAgICAgICAg IFJlcG9ydCB0aGUgc3BlY2lmaWVkIHNjYWxlIGZhY3RvciBpbiA8YXBwbGlj YXRpb24+cGdiZW5jaDwvPidzDQogICAgICAgICBvdXRwdXQuICBXaXRoIHRo ZSBidWlsdC1pbiB0ZXN0cywgdGhpcyBpcyBub3QgbmVjZXNzYXJ5OyB0aGUN CiAgICAgICAgIGNvcnJlY3Qgc2NhbGUgZmFjdG9yIHdpbGwgYmUgZGV0ZWN0 ZWQgYnkgY291bnRpbmcgdGhlIG51bWJlciBvZg0KLSAgICAgICAgcm93cyBp biB0aGUgPHN0cnVjdG5hbWU+cGdiZW5jaF9icmFuY2hlczwvPiB0YWJsZS4g IEhvd2V2ZXIsIHdoZW4gdGVzdGluZw0KLSAgICAgICAgY3VzdG9tIGJlbmNo bWFya3MgKDxvcHRpb24+LWY8Lz4gb3B0aW9uKSwgdGhlIHNjYWxlIGZhY3Rv cg0KLSAgICAgICAgd2lsbCBiZSByZXBvcnRlZCBhcyAxIHVubGVzcyB0aGlz IG9wdGlvbiBpcyB1c2VkLg0KKyAgICAgICAgcm93cyBpbiB0aGUgPHN0cnVj dG5hbWU+cGdiZW5jaF9icmFuY2hlczwvPiB0YWJsZS4NCisgICAgICAgIEhv d2V2ZXIsIHdoZW4gdGVzdGluZyBvbmx5IGN1c3RvbSBiZW5jaG1hcmtzICg8 b3B0aW9uPi1mPC8+IG9wdGlvbiksDQorICAgICAgICB0aGUgc2NhbGUgZmFj dG9yIHdpbGwgYmUgcmVwb3J0ZWQgYXMgMSB1bmxlc3MgdGhpcyBvcHRpb24g aXMgdXNlZC4NCiAgICAgICAgPC9wYXJhPg0KICAgICAgIDwvbGlzdGl0ZW0+ DQogICAgICA8L3Zhcmxpc3RlbnRyeT4NCkBAIC01MjQsNyArNTQxLDcgQEAg cGdiZW5jaCA8b3B0aW9uYWw+IDxyZXBsYWNlYWJsZT5vcHRpb25zPC8+IDwv b3B0aW9uYWw+IDxyZXBsYWNlYWJsZT5kYm5hbWU8Lz4NCiAgICAgICA8dGVy bT48b3B0aW9uPi0tc2VsZWN0LW9ubHk8L29wdGlvbj48L3Rlcm0+DQogICAg ICAgPGxpc3RpdGVtPg0KICAgICAgICA8cGFyYT4NCi0gICAgICAgIFBlcmZv cm0gc2VsZWN0LW9ubHkgdHJhbnNhY3Rpb25zIGluc3RlYWQgb2YgVFBDLUIt bGlrZSB0ZXN0Lg0KKyAgICAgICAgU2hvcnRoYW5kIGZvciA8b3B0aW9uPi1i IHNlbGVjdC1vbmx5QDE8Lz4uDQogICAgICAgIDwvcGFyYT4NCiAgICAgICA8 L2xpc3RpdGVtPg0KICAgICAgPC92YXJsaXN0ZW50cnk+DQpAQCAtNjc0LDcg KzY5MSwyMCBAQCBwZ2JlbmNoIDxvcHRpb25hbD4gPHJlcGxhY2VhYmxlPm9w dGlvbnM8Lz4gPC9vcHRpb25hbD4gPHJlcGxhY2VhYmxlPmRibmFtZTwvPg0K ICAgPHRpdGxlPldoYXQgaXMgdGhlIDxxdW90ZT5UcmFuc2FjdGlvbjwvPiBB Y3R1YWxseSBQZXJmb3JtZWQgaW4gPGFwcGxpY2F0aW9uPnBnYmVuY2g8L2Fw cGxpY2F0aW9uPj88L3RpdGxlPg0KIA0KICAgPHBhcmE+DQotICAgVGhlIGRl ZmF1bHQgdHJhbnNhY3Rpb24gc2NyaXB0IGlzc3VlcyBzZXZlbiBjb21tYW5k cyBwZXIgdHJhbnNhY3Rpb246DQorICAgUGdiZW5jaCBleGVjdXRlcyB0ZXN0 IHNjcmlwdHMgY2hvc2VuIHJhbmRvbWx5IGZyb20gYSBzcGVjaWZpZWQgbGlz dC4NCisgICBUaGV5IGluY2x1ZGUgYnVpbHQtaW4gc2NyaXB0cyB3aXRoIDxv cHRpb24+LWI8Lz4gYW5kDQorICAgdXNlci1wcm92aWRlZCBjdXN0b20gc2Ny aXB0cyB3aXRoIDxvcHRpb24+LWY8Lz4uDQorICAgRWFjaCBzY3JpcHQgbWF5 IGJlIGdpdmVuIGEgcmVsYXRpdmUgd2VpZ2h0IHNwZWNpZmllZCBhZnRlciBh DQorICAgPGxpdGVyYWw+QDwvPiBzbyBhcyB0byBjaGFuZ2UgaXRzIGRyYXdp bmcgcHJvYmFiaWxpdHkuDQorICAgVGhlIGRlZmF1bHQgd2VpZ2h0IGlzIDxs aXRlcmFsPjE8Lz4uDQorIDwvcGFyYT4NCisNCisgIDxwYXJhPg0KKyAgIFRo ZSBkZWZhdWx0IGJ1aWx0aW4gdHJhbnNhY3Rpb24gc2NyaXB0IChhbHNvIGlu dm9rZWQgd2l0aCA8b3B0aW9uPi1iIHRwY2ItbGlrZTwvPikNCisgICBpc3N1 ZXMgc2V2ZW4gY29tbWFuZHMgcGVyIHRyYW5zYWN0aW9uIG92ZXIgcmFuZG9t bHkgY2hvc2VuIDxsaXRlcmFsPmFpZDwvPiwNCisgICA8bGl0ZXJhbD50aWQ8 Lz4sIDxsaXRlcmFsPmJpZDwvPiBhbmQgPGxpdGVyYWw+YmFsYW5jZTwvPi4N CisgICBUaGUgc2NlbmFyaW8gaXMgaW5zcGlyZWQgYnkgdGhlIFRQQy1CIGJl bmNobWFyaywgYnV0IGlzIG5vdCBhY3R1YWxseSBUUEMtQiwNCisgICBoZW5j ZSB0aGUgbmFtZS4NCiAgIDwvcGFyYT4NCiANCiAgIDxvcmRlcmVkbGlzdD4N CkBAIC02ODgsOSArNzE4LDE1IEBAIHBnYmVuY2ggPG9wdGlvbmFsPiA8cmVw bGFjZWFibGU+b3B0aW9uczwvPiA8L29wdGlvbmFsPiA8cmVwbGFjZWFibGU+ ZGJuYW1lPC8+DQogICA8L29yZGVyZWRsaXN0Pg0KIA0KICAgPHBhcmE+DQot ICAgSWYgeW91IHNwZWNpZnkgPG9wdGlvbj4tTjwvPiwgc3RlcHMgNCBhbmQg NSBhcmVuJ3QgaW5jbHVkZWQgaW4gdGhlDQotICAgdHJhbnNhY3Rpb24uICBJ ZiB5b3Ugc3BlY2lmeSA8b3B0aW9uPi1TPC8+LCBvbmx5IHRoZSA8Y29tbWFu ZD5TRUxFQ1Q8Lz4gaXMNCi0gICBpc3N1ZWQuDQorICAgSWYgeW91IHNlbGVj dCB0aGUgPGxpdGVyYWw+c2ltcGxlLXVwZGF0ZTwvPiBidWlsdGluIChhbHNv IDxvcHRpb24+LU48Lz4pLA0KKyAgIHN0ZXBzIDQgYW5kIDUgYXJlbid0IGlu Y2x1ZGVkIGluIHRoZSB0cmFuc2FjdGlvbi4NCisgICBUaGlzIHdpbGwgYXZv aWQgdXBkYXRlIGNvbnRlbnRpb24gb24gdGhlc2UgdGFibGVzLCBidXQNCisg ICBpdCBtYWtlcyB0aGUgdGVzdCBjYXNlIGV2ZW4gbGVzcyBsaWtlIFRQQy1C Lg0KKyAgPC9wYXJhPg0KKw0KKyAgPHBhcmE+DQorICAgSWYgeW91IHNlbGVj dCB0aGUgPGxpdGVyYWw+c2VsZWN0LW9ubHk8Lz4gYnVpbHRpbiAoYWxzbyA8 b3B0aW9uPi1TPC8+KSwNCisgICBvbmx5IHRoZSA8Y29tbWFuZD5TRUxFQ1Q8 Lz4gaXMgaXNzdWVkLg0KICAgPC9wYXJhPg0KICA8L3JlZnNlY3QyPg0KIA0K QEAgLTcwMiwxMCArNzM4LDcgQEAgcGdiZW5jaCA8b3B0aW9uYWw+IDxyZXBs YWNlYWJsZT5vcHRpb25zPC8+IDwvb3B0aW9uYWw+IDxyZXBsYWNlYWJsZT5k Ym5hbWU8Lz4NCiAgICBiZW5jaG1hcmsgc2NlbmFyaW9zIGJ5IHJlcGxhY2lu ZyB0aGUgZGVmYXVsdCB0cmFuc2FjdGlvbiBzY3JpcHQNCiAgICAoZGVzY3Jp YmVkIGFib3ZlKSB3aXRoIGEgdHJhbnNhY3Rpb24gc2NyaXB0IHJlYWQgZnJv bSBhIGZpbGUNCiAgICAoPG9wdGlvbj4tZjwvb3B0aW9uPiBvcHRpb24pLiAg SW4gdGhpcyBjYXNlIGEgPHF1b3RlPnRyYW5zYWN0aW9uPC8+DQotICAgY291 bnRzIGFzIG9uZSBleGVjdXRpb24gb2YgYSBzY3JpcHQgZmlsZS4gIFlvdSBj YW4gZXZlbiBzcGVjaWZ5DQotICAgbXVsdGlwbGUgc2NyaXB0cyAobXVsdGlw bGUgPG9wdGlvbj4tZjwvb3B0aW9uPiBvcHRpb25zKSwgaW4gd2hpY2gNCi0g ICBjYXNlIGEgcmFuZG9tIG9uZSBvZiB0aGUgc2NyaXB0cyBpcyBjaG9zZW4g ZWFjaCB0aW1lIGEgY2xpZW50IHNlc3Npb24NCi0gICBzdGFydHMgYSBuZXcg dHJhbnNhY3Rpb24uDQorICAgY291bnRzIGFzIG9uZSBleGVjdXRpb24gb2Yg YSBzY3JpcHQgZmlsZS4NCiAgIDwvcGFyYT4NCiANCiAgIDxwYXJhPg0KZGlm ZiAtLWdpdCBhL3NyYy9iaW4vcGdiZW5jaC9wZ2JlbmNoLmMgYi9zcmMvYmlu L3BnYmVuY2gvcGdiZW5jaC5jDQppbmRleCA2YWUxYjg2Li4wZTU2ZWQ3IDEw MDY0NA0KLS0tIGEvc3JjL2Jpbi9wZ2JlbmNoL3BnYmVuY2guYw0KKysrIGIv c3JjL2Jpbi9wZ2JlbmNoL3BnYmVuY2guYw0KQEAgLTE2NCwxMiArMTY0LDEx IEBAIGJvb2wJCXVzZV9sb2c7CQkJLyogbG9nIHRyYW5zYWN0aW9uIGxhdGVu Y2llcyB0byBhIGZpbGUgKi8NCiBib29sCQl1c2VfcXVpZXQ7CQkJLyogcXVp ZXQgbG9nZ2luZyBvbnRvIHN0ZGVyciAqLw0KIGludAkJCWFnZ19pbnRlcnZh bDsJCS8qIGxvZyBhZ2dyZWdhdGVzIGluc3RlYWQgb2YgaW5kaXZpZHVhbA0K IAkJCQkJCQkJICogdHJhbnNhY3Rpb25zICovDQorYm9vbCAgICAgICAgcGVy X3NjcmlwdF9zdGF0cyA9IGZhbHNlOyAvKiB3aGV0aGVyIHRvIGNvbGxlY3Qg c3RhdHMgcGVyIHNjcmlwdCAqLw0KIGludAkJCXByb2dyZXNzID0gMDsJCS8q IHRocmVhZCBwcm9ncmVzcyByZXBvcnQgZXZlcnkgdGhpcyBzZWNvbmRzICov DQogYm9vbAkJcHJvZ3Jlc3NfdGltZXN0YW1wID0gZmFsc2U7IC8qIHByb2dy ZXNzIHJlcG9ydCB3aXRoIFVuaXggdGltZSAqLw0KLWludAkJCXByb2dyZXNz X25jbGllbnRzID0gMDsJCS8qIG51bWJlciBvZiBjbGllbnRzIGZvciBwcm9n cmVzcw0KLQkJCQkJCQkJCQkgKiByZXBvcnQgKi8NCi1pbnQJCQlwcm9ncmVz c19udGhyZWFkcyA9IDA7CQkvKiBudW1iZXIgb2YgdGhyZWFkcyBmb3IgcHJv Z3Jlc3MNCi0JCQkJCQkJCQkJICogcmVwb3J0ICovDQoraW50CQkJbmNsaWVu dHMgPSAxOwkJLyogbnVtYmVyIG9mIGNsaWVudHMgKi8NCitpbnQJCQludGhy ZWFkcyA9IDE7CSAgICAvKiBudW1iZXIgb2YgdGhyZWFkcyAqLw0KIGJvb2wJ CWlzX2Nvbm5lY3Q7CQkJLyogZXN0YWJsaXNoIGNvbm5lY3Rpb24gZm9yIGVh Y2ggdHJhbnNhY3Rpb24gKi8NCiBib29sCQlpc19sYXRlbmNpZXM7CQkvKiBy ZXBvcnQgcGVyLWNvbW1hbmQgbGF0ZW5jaWVzICovDQogaW50CQkJbWFpbl9w aWQ7CQkJLyogbWFpbiBwcm9jZXNzIGlkIHVzZWQgaW4gbG9nIGZpbGVuYW1l ICovDQpAQCAtMTgwLDYgKzE3OSw4IEBAIGNoYXIJICAgKmxvZ2luID0gTlVM TDsNCiBjaGFyCSAgICpkYk5hbWU7DQogY29uc3QgY2hhciAqcHJvZ25hbWU7 DQogDQorI2RlZmluZSBXU0VQICdAJyAvKiB3ZWlnaHQgc2VwYXJhdG9yICov DQorDQogdm9sYXRpbGUgYm9vbCB0aW1lcl9leGNlZWRlZCA9IGZhbHNlOwkv KiBmbGFnIGZyb20gc2lnbmFsIGhhbmRsZXIgKi8NCiANCiAvKiB2YXJpYWJs ZSBkZWZpbml0aW9ucyAqLw0KQEAgLTE4OSwxMyArMTkwLDM5IEBAIHR5cGVk ZWYgc3RydWN0DQogCWNoYXIJICAgKnZhbHVlOwkJCS8qIGl0cyB2YWx1ZSAq Lw0KIH0gVmFyaWFibGU7DQogDQotI2RlZmluZSBNQVhfRklMRVMJCTEyOAkJ LyogbWF4IG51bWJlciBvZiBTUUwgc2NyaXB0IGZpbGVzIGFsbG93ZWQgKi8N CisjZGVmaW5lIE1BWF9TQ1JJUFRTCQkxMjgJCS8qIG1heCBudW1iZXIgb2Yg U1FMIHNjcmlwdHMgYWxsb3dlZCAqLw0KICNkZWZpbmUgU0hFTExfQ09NTUFO RF9TSVpFCTI1NiAvKiBtYXhpbXVtIHNpemUgYWxsb3dlZCBmb3Igc2hlbGwg Y29tbWFuZCAqLw0KIA0KIC8qDQotICogc3RydWN0dXJlcyB1c2VkIGluIGN1 c3RvbSBxdWVyeSBtb2RlDQorICogc2ltcGxlIGRhdGEgc3RydWN0dXJlIHRv IGtlZXAgc3RhdHMgYWJvdXQgc29tZXRoaW5nLg0KKyAqIHByb2JhYmx5IHRo ZSBmaXJzdCB2YWx1ZSBzaG91bGQgYmUga2VwdCBhbmQgdXNlZCBhcyBhbiBv ZmZzZXQgZm9yDQorICogYmV0dGVyIG51bWVyaWNhbCBzdGFiaWxpdHkuLi4N CisgKi8NCit0eXBlZGVmIHN0cnVjdA0KK3sNCisJaW50NjRfdCBjb3VudDsg ICAgLyogaG93IG1hbnkgdmFsdWVzIHdoZXJlIGVuY291bnRlcmVkICovDQor CWRvdWJsZSBtaW47ICAgLyogdGhlIG1pbmltdW0gc2VlbiAqLw0KKwlkb3Vi bGUgbWF4OyAgIC8qIHRoZSBtYXhpbXVtIHNlZW4gKi8NCisJZG91YmxlIHN1 bTsgICAvKiBzdW0gb2YgdmFsdWVzICovDQorCWRvdWJsZSBzdW0yOyAgLyog c3VtIG9mIHNxdWFyZWQgdmFsdWVzICovDQorfSBTaW1wbGVTdGF0czsNCisN CisvKiBkYXRhIHN0cnVjdHVyZSB0byBob2xkIHZhcmlvdXMgc3RhdGlzdGlj cy4NCisgKiBpdCBpcyB1c2VkIGZvciBpbnRlcnZhbCBzdGF0aXN0aWNzIGFz IHdlbGwgYXMgZmlsZSBzdGF0aXN0aWNzLg0KICAqLw0KK3R5cGVkZWYgc3Ry dWN0DQorew0KKwlsb25nCQlzdGFydF90aW1lOwkJLyogd2hlbiB0aGUgaW50 ZXJ2YWwgc3RhcnRzLCBmb3IgYWdncmVnYXRlcyAqLw0KKwlpbnQ2NAkJY250 OwkJCS8qIG51bWJlciBvZiB0cmFuc2FjdGlvbnMgKi8NCisJaW50NjQJCXNr aXBwZWQ7CQkvKiBudW1iZXIgb2YgdHJhbnNhY3Rpb25zIHNraXBwZWQgdW5k ZXIgLS1yYXRlDQorCQkJCQkJCQkgKiBhbmQgLS1sYXRlbmN5LWxpbWl0ICov DQorCVNpbXBsZVN0YXRzCWxhdGVuY3k7DQorCVNpbXBsZVN0YXRzCWxhZzsN Cit9IFN0YXRzRGF0YTsNCiANCisvKg0KKyAqIHN0cnVjdHVyZXMgdXNlZCBp biBjdXN0b20gcXVlcnkgbW9kZQ0KKyAqLw0KIHR5cGVkZWYgc3RydWN0DQog ew0KIAlQR2Nvbm4JICAgKmNvbjsJCQkvKiBjb25uZWN0aW9uIGhhbmRsZSB0 byBEQiAqLw0KQEAgLTIwMywyMiArMjMwLDIwIEBAIHR5cGVkZWYgc3RydWN0 DQogCWludAkJCXN0YXRlOwkJCS8qIHN0YXRlIE5vLiAqLw0KIAlpbnQJCQls aXN0ZW47CQkJLyogMCBpbmRpY2F0ZXMgdGhhdCBhbiBhc3luYyBxdWVyeSBo YXMgYmVlbg0KIAkJCQkJCQkJICogc2VudCAqLw0KLQlpbnQJCQlzbGVlcGlu ZzsJCS8qIDEgaW5kaWNhdGVzIHRoYXQgdGhlIGNsaWVudCBpcyBuYXBwaW5n ICovDQorCWJvb2wJCWlzX3Rocm90dGxlZDsJLyogd2hldGhlciB0cmFuc2Fj dGlvbiB0aHJvdHRsaW5nIGlzIGRvbmUgKi8NCisJYm9vbAkJc2xlZXBpbmc7 CQkvKiB3aGV0aGVyIHRoZSBjbGllbnQgaXMgbmFwcGluZyAqLw0KIAlib29s CQl0aHJvdHRsaW5nOwkJLyogd2hldGhlciBuYXAgaXMgZm9yIHRocm90dGxp bmcgKi8NCiAJVmFyaWFibGUgICAqdmFyaWFibGVzOwkJLyogYXJyYXkgb2Yg dmFyaWFibGUgZGVmaW5pdGlvbnMgKi8NCiAJaW50CQkJbnZhcmlhYmxlczsN CiAJaW50NjQJCXR4bl9zY2hlZHVsZWQ7CS8qIHNjaGVkdWxlZCBzdGFydCB0 aW1lIG9mIHRyYW5zYWN0aW9uICh1c2VjKSAqLw0KIAlpbnN0cl90aW1lCXR4 bl9iZWdpbjsJCS8qIHVzZWQgZm9yIG1lYXN1cmluZyBzY2hlZHVsZSBsYWcg dGltZXMgKi8NCiAJaW5zdHJfdGltZQlzdG10X2JlZ2luOwkJLyogdXNlZCBm b3IgbWVhc3VyaW5nIHN0YXRlbWVudCBsYXRlbmNpZXMgKi8NCi0JYm9vbAkJ aXNfdGhyb3R0bGVkOwkvKiB3aGV0aGVyIHRyYW5zYWN0aW9uIHRocm90dGxp bmcgaXMgZG9uZSAqLw0KLQlpbnQJCQl1c2VfZmlsZTsJCS8qIGluZGV4IGlu IHNxbF9maWxlcyBmb3IgdGhpcyBjbGllbnQgKi8NCi0JYm9vbAkJcHJlcGFy ZWRbTUFYX0ZJTEVTXTsNCisJaW50CQkJdXNlX2ZpbGU7CQkvKiBpbmRleCBp biBzcWxfc2NyaXB0cyBmb3IgdGhpcyBjbGllbnQgKi8NCisJYm9vbAkJcHJl cGFyZWRbTUFYX1NDUklQVFNdOyAvKiB3aGV0aGVyIGNsaWVudCBwcmVwYXJl ZCB0aGUgc2NyaXB0ICovDQogDQogCS8qIHBlciBjbGllbnQgY29sbGVjdGVk IHN0YXRzICovDQotCWludAkJCWNudDsJCQkvKiB4YWN0cyBjb3VudCAqLw0K KwlpbnQ2NAkJY250OwkJCS8qIHRyYW5zYWN0aW9uIGNvdW50ICovDQogCWlu dAkJCWVjbnQ7CQkJLyogZXJyb3IgY291bnQgKi8NCi0JaW50NjQJCXR4bl9s YXRlbmNpZXM7CS8qIGN1bXVsYXRlZCBsYXRlbmNpZXMgKi8NCi0JaW50NjQJ CXR4bl9zcWxhdHM7CQkvKiBjdW11bGF0ZWQgc3F1YXJlIGxhdGVuY2llcyAq Lw0KIH0gQ1N0YXRlOw0KIA0KIC8qDQpAQCAtMjMwLDE5ICsyNTUsMTQgQEAg dHlwZWRlZiBzdHJ1Y3QNCiAJcHRocmVhZF90CXRocmVhZDsJCQkvKiB0aHJl YWQgaGFuZGxlICovDQogCUNTdGF0ZQkgICAqc3RhdGU7CQkJLyogYXJyYXkg b2YgQ1N0YXRlICovDQogCWludAkJCW5zdGF0ZTsJCQkvKiBsZW5ndGggb2Yg c3RhdGVbXSAqLw0KLQlpbnN0cl90aW1lCXN0YXJ0X3RpbWU7CQkvKiB0aHJl YWQgc3RhcnQgdGltZSAqLw0KLQlpbnN0cl90aW1lICpleGVjX2VsYXBzZWQ7 CS8qIHRpbWUgc3BlbnQgZXhlY3V0aW5nIGNtZHMgKHBlciBDb21tYW5kKSAq Lw0KLQlpbnQJCSAgICpleGVjX2NvdW50OwkJLyogbnVtYmVyIG9mIGNtZCBl eGVjdXRpb25zIChwZXIgQ29tbWFuZCkgKi8NCi0JdW5zaWduZWQgc2hvcnQg cmFuZG9tX3N0YXRlWzNdOwkJLyogc2VwYXJhdGUgcmFuZG9tbmVzcyBmb3Ig ZWFjaCB0aHJlYWQgKi8NCi0JaW50NjQJCXRocm90dGxlX3RyaWdnZXI7CQkv KiBwcmV2aW91cy9uZXh0IHRocm90dGxpbmcgKHVzKSAqLw0KKwl1bnNpZ25l ZCBzaG9ydCByYW5kb21fc3RhdGVbM107CSAvKiBzZXBhcmF0ZSByYW5kb21u ZXNzIGZvciBlYWNoIHRocmVhZCAqLw0KKwlpbnQ2NAkJdGhyb3R0bGVfdHJp Z2dlcjsJIC8qIHByZXZpb3VzL25leHQgdGhyb3R0bGluZyAodXMpICovDQog DQogCS8qIHBlciB0aHJlYWQgY29sbGVjdGVkIHN0YXRzICovDQorCWluc3Ry X3RpbWUJc3RhcnRfdGltZTsJCS8qIHRocmVhZCBzdGFydCB0aW1lICovDQog CWluc3RyX3RpbWUJY29ubl90aW1lOw0KLQlpbnQ2NAkJdGhyb3R0bGVfbGFn OwkvKiB0b3RhbCB0cmFuc2FjdGlvbiBsYWcgYmVoaW5kIHRocm90dGxpbmcg Ki8NCi0JaW50NjQJCXRocm90dGxlX2xhZ19tYXg7CQkvKiBtYXggdHJhbnNh Y3Rpb24gbGFnICovDQotCWludDY0CQl0aHJvdHRsZV9sYXRlbmN5X3NraXBw ZWQ7CQkvKiBsYWdnaW5nIHRyYW5zYWN0aW9ucw0KLQkJCQkJCQkJCQkJCSAq IHNraXBwZWQgKi8NCi0JaW50NjQJCWxhdGVuY3lfbGF0ZTsJLyogbGF0ZSB0 cmFuc2FjdGlvbnMgKi8NCisJU3RhdHNEYXRhICAgc3RhdHM7DQorCWludDY0 CQlsYXRlbmN5X2xhdGU7CS8qIGV4ZWN1dGVkIGJ1dCBsYXRlIHRyYW5zYWN0 aW9ucyAqLw0KIH0gVFN0YXRlOw0KIA0KICNkZWZpbmUgSU5WQUxJRF9USFJF QUQJCSgocHRocmVhZF90KSAwKQ0KQEAgLTI3NCwzNSArMjk0LDQxIEBAIHR5 cGVkZWYgc3RydWN0DQogCWNoYXIJICAgKmFyZ3ZbTUFYX0FSR1NdOyAvKiBj b21tYW5kIHdvcmQgbGlzdCAqLw0KIAlpbnQJCQljb2xzW01BWF9BUkdTXTsg LyogY29ycmVzcG9uZGluZyBjb2x1bW4gc3RhcnRpbmcgZnJvbSAxICovDQog CVBnQmVuY2hFeHByICpleHByOwkJCS8qIHBhcnNlZCBleHByZXNzaW9uICov DQorCVNpbXBsZVN0YXRzCXN0YXRzOyAgICAgICAgICAvKiB0aW1lIHNwZW50 IGluIHRoaXMgY29tbWFuZCAqLw0KIH0gQ29tbWFuZDsNCiANCisvKiBTUUwg c2NyaXB0IHRvIGJlIGV4ZWN1dGVkLCBlaXRoZXIgYSBmaWxlIG9yIGFuIGlu dGVybmFsIHNjcmlwdA0KKyAqLw0KIHR5cGVkZWYgc3RydWN0DQogew0KLQ0K LQlsb25nCQlzdGFydF90aW1lOwkJLyogd2hlbiBkb2VzIHRoZSBpbnRlcnZh bCBzdGFydCAqLw0KLQlpbnQJCQljbnQ7CQkJLyogbnVtYmVyIG9mIHRyYW5z YWN0aW9ucyAqLw0KLQlpbnQJCQlza2lwcGVkOwkJLyogbnVtYmVyIG9mIHRy YW5zYWN0aW9ucyBza2lwcGVkIHVuZGVyIC0tcmF0ZQ0KLQkJCQkJCQkJICog YW5kIC0tbGF0ZW5jeS1saW1pdCAqLw0KLQ0KLQlkb3VibGUJCW1pbl9sYXRl bmN5OwkvKiBtaW4vbWF4IGxhdGVuY2llcyAqLw0KLQlkb3VibGUJCW1heF9s YXRlbmN5Ow0KLQlkb3VibGUJCXN1bV9sYXRlbmN5OwkvKiBzdW0obGF0ZW5j eSksIHN1bShsYXRlbmN5XjIpIC0gZm9yDQotCQkJCQkJCQkgKiBlc3RpbWF0 ZXMgKi8NCi0JZG91YmxlCQlzdW0yX2xhdGVuY3k7DQotDQotCWRvdWJsZQkJ bWluX2xhZzsNCi0JZG91YmxlCQltYXhfbGFnOw0KLQlkb3VibGUJCXN1bV9s YWc7CQkvKiBzdW0obGFnKSAqLw0KLQlkb3VibGUJCXN1bTJfbGFnOwkJLyog c3VtKGxhZypsYWcpICovDQotfSBBZ2dWYWxzOw0KLQ0KLXN0YXRpYyBDb21t YW5kICoqc3FsX2ZpbGVzW01BWF9GSUxFU107CS8qIFNRTCBzY3JpcHQgZmls ZXMgKi8NCi1zdGF0aWMgaW50CW51bV9maWxlczsJCQkvKiBudW1iZXIgb2Yg c2NyaXB0IGZpbGVzICovDQorCWNvbnN0IGNoYXIgKm5hbWU7DQorCWludCB3 ZWlnaHQ7DQorCUNvbW1hbmQgKipjb21tYW5kczsNCisJU3RhdHNEYXRhIHN0 YXRzOw0KK30gU1FMU2NyaXB0Ow0KKw0KK3N0YXRpYyBTUUxTY3JpcHQgc3Fs X3NjcmlwdFtNQVhfU0NSSVBUU107DQorc3RhdGljIGludAludW1fc2NyaXB0 czsJCS8qIG51bWJlciBvZiBzY3JpcHQgaW4gc3FsX3NjcmlwdFtdICovDQog c3RhdGljIGludAludW1fY29tbWFuZHMgPSAwOwkvKiB0b3RhbCBudW1iZXIg b2YgQ29tbWFuZCBzdHJ1Y3RzICovDQorc3RhdGljIGludCAgdG90YWxfd2Vp Z2h0ID0gMDsNCisNCiBzdGF0aWMgaW50CWRlYnVnID0gMDsJCQkvKiBkZWJ1 ZyBmbGFnICovDQogDQotLyogZGVmYXVsdCBzY2VuYXJpbyAqLw0KLXN0YXRp YyBjaGFyICp0cGNfYiA9IHsNCisvKiBGdW5jdGlvbiBwcm90b3R5cGVzICov DQorc3RhdGljIHZvaWQgc2V0YWxhcm0oaW50IHNlY29uZHMpOw0KK3N0YXRp YyB2b2lkICp0aHJlYWRSdW4odm9pZCAqYXJnKTsNCitzdGF0aWMgdm9pZCBk b1R4U3RhdHMoVFN0YXRlKiwgQ1N0YXRlKiwgaW5zdHJfdGltZSosIGJvb2ws IEZJTEUqLCBTdGF0c0RhdGEqKTsNCisNCisvKiBEZWZpbmUgYnVpbHRpbiB0 ZXN0IHNjcmlwdHMgKi8NCisjZGVmaW5lIE5fQlVJTFRJTiAzDQorc3RhdGlj IHN0cnVjdCB7DQorCWNoYXIgKm5hbWU7ICAgLyogdmVyeSBzaG9ydCBuYW1l IGZvciAtYiAuLi4qLw0KKwljaGFyICpkZXNjOyAgIC8qIHNob3J0IGRlc2Ny aXB0aW9uICovDQorCWNoYXIgKnNjcmlwdDsgLyogYWN0dWFsIHBnYmVuY2gg c2NyaXB0ICovDQorfSBidWlsdGluX3NjcmlwdFtdID0gew0KK3sNCisJInRw Y2ItbGlrZSIsDQorCSI8YnVpbHRpbjogVFBDLUIgKHNvcnQgb2YpPiIsDQog CSJcXHNldCBuYnJhbmNoZXMgIiBDcHBBc1N0cmluZzIobmJyYW5jaGVzKSAi ICogOnNjYWxlXG4iDQogCSJcXHNldCBudGVsbGVycyAiIENwcEFzU3RyaW5n MihudGVsbGVycykgIiAqIDpzY2FsZVxuIg0KIAkiXFxzZXQgbmFjY291bnRz ICIgQ3BwQXNTdHJpbmcyKG5hY2NvdW50cykgIiAqIDpzY2FsZVxuIg0KQEAg LTMxNywxMCArMzQzLDEwIEBAIHN0YXRpYyBjaGFyICp0cGNfYiA9IHsNCiAJ IlVQREFURSBwZ2JlbmNoX2JyYW5jaGVzIFNFVCBiYmFsYW5jZSA9IGJiYWxh bmNlICsgOmRlbHRhIFdIRVJFIGJpZCA9IDpiaWQ7XG4iDQogCSJJTlNFUlQg SU5UTyBwZ2JlbmNoX2hpc3RvcnkgKHRpZCwgYmlkLCBhaWQsIGRlbHRhLCBt dGltZSkgVkFMVUVTICg6dGlkLCA6YmlkLCA6YWlkLCA6ZGVsdGEsIENVUlJF TlRfVElNRVNUQU1QKTtcbiINCiAJIkVORDtcbiINCi19Ow0KLQ0KLS8qIC1O IGNhc2UgKi8NCi1zdGF0aWMgY2hhciAqc2ltcGxlX3VwZGF0ZSA9IHsNCit9 LA0KK3sNCisJInNpbXBsZS11cGRhdGUiLA0KKwkiPGJ1aWx0aW46IHNpbXBs ZSB1cGRhdGU+IiwNCiAJIlxcc2V0IG5icmFuY2hlcyAiIENwcEFzU3RyaW5n MihuYnJhbmNoZXMpICIgKiA6c2NhbGVcbiINCiAJIlxcc2V0IG50ZWxsZXJz ICIgQ3BwQXNTdHJpbmcyKG50ZWxsZXJzKSAiICogOnNjYWxlXG4iDQogCSJc XHNldCBuYWNjb3VudHMgIiBDcHBBc1N0cmluZzIobmFjY291bnRzKSAiICog OnNjYWxlXG4iDQpAQCAtMzMzLDIxICszNTksMzIgQEAgc3RhdGljIGNoYXIg KnNpbXBsZV91cGRhdGUgPSB7DQogCSJTRUxFQ1QgYWJhbGFuY2UgRlJPTSBw Z2JlbmNoX2FjY291bnRzIFdIRVJFIGFpZCA9IDphaWQ7XG4iDQogCSJJTlNF UlQgSU5UTyBwZ2JlbmNoX2hpc3RvcnkgKHRpZCwgYmlkLCBhaWQsIGRlbHRh LCBtdGltZSkgVkFMVUVTICg6dGlkLCA6YmlkLCA6YWlkLCA6ZGVsdGEsIENV UlJFTlRfVElNRVNUQU1QKTtcbiINCiAJIkVORDtcbiINCi19Ow0KLQ0KLS8q IC1TIGNhc2UgKi8NCi1zdGF0aWMgY2hhciAqc2VsZWN0X29ubHkgPSB7DQor fSwNCit7DQorCSJzZWxlY3Qtb25seSIsDQorCSI8YnVpbHRpbjogc2VsZWN0 IG9ubHk+IiwNCiAJIlxcc2V0IG5hY2NvdW50cyAiIENwcEFzU3RyaW5nMihu YWNjb3VudHMpICIgKiA6c2NhbGVcbiINCiAJIlxcc2V0cmFuZG9tIGFpZCAx IDpuYWNjb3VudHNcbiINCiAJIlNFTEVDVCBhYmFsYW5jZSBGUk9NIHBnYmVu Y2hfYWNjb3VudHMgV0hFUkUgYWlkID0gOmFpZDtcbiINCi19Ow0KK30gfTsN CiANCi0vKiBGdW5jdGlvbiBwcm90b3R5cGVzICovDQotc3RhdGljIHZvaWQg c2V0YWxhcm0oaW50IHNlY29uZHMpOw0KLXN0YXRpYyB2b2lkICp0aHJlYWRS dW4odm9pZCAqYXJnKTsNCitzdGF0aWMgY2hhciAqDQorZmluZF9idWlsdGlu KGNvbnN0IGNoYXIgKm5hbWUsIGNoYXIgKipkZXNjKQ0KK3sNCisJaW50CQls ZW4gPSBzdHJsZW4obmFtZSksIGk7DQorDQorCWZvciAoaSA9IDA7IGkgPCBO X0JVSUxUSU47IGkrKykNCisJew0KKwkJaWYgKHN0cm5jbXAoYnVpbHRpbl9z Y3JpcHRbaV0ubmFtZSwgbmFtZSwgbGVuKSA9PSAwKQ0KKwkJew0KKwkJCSpk ZXNjID0gYnVpbHRpbl9zY3JpcHRbaV0uZGVzYzsNCisJCQlyZXR1cm4gYnVp bHRpbl9zY3JpcHRbaV0uc2NyaXB0Ow0KKwkJfQ0KKwl9DQogDQotc3RhdGlj IHZvaWQgZG9Mb2coVFN0YXRlICp0aHJlYWQsIENTdGF0ZSAqc3QsIEZJTEUg KmxvZ2ZpbGUsIGluc3RyX3RpbWUgKm5vdywNCi0JICBBZ2dWYWxzICphZ2cs IGJvb2wgc2tpcHBlZCk7DQorCWZwcmludGYoc3RkZXJyLCAibm8gYnVpbHRp biBmb3VuZCBmb3IgXCIlc1wiXG4iLCBuYW1lKTsNCisJZXhpdCgxKTsNCit9 DQogDQogc3RhdGljIHZvaWQNCiB1c2FnZSh2b2lkKQ0KQEAgLTM2NywyMyAr NDA0LDI1IEBAIHVzYWdlKHZvaWQpDQogCSAiICAtLXRhYmxlc3BhY2U9VEFC TEVTUEFDRSAgY3JlYXRlIHRhYmxlcyBpbiB0aGUgc3BlY2lmaWVkIHRhYmxl c3BhY2VcbiINCiAJCSAgICIgIC0tdW5sb2dnZWQtdGFibGVzICAgICAgICBj cmVhdGUgdGFibGVzIGFzIHVubG9nZ2VkIHRhYmxlc1xuIg0KIAkJICAgIlxu QmVuY2htYXJraW5nIG9wdGlvbnM6XG4iDQorCQkgICAiICAtYiwgLS1idWls dGluPU5BTUVAVyAgICAgYWRkIHdlaWdodGVkIGJ1aXRpbiBzY3JpcHQgYW1v bmcgXCJ0cGNiLWxpa2VcIlxuIg0KKwkJICAgIiAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwic2ltcGxlLXVwZGF0ZVwiIGFuZCBcInNlbGVjdC1vbmx5 XCIuXG4iDQogCQkgICAiICAtYywgLS1jbGllbnQ9TlVNICAgICAgICAgbnVt YmVyIG9mIGNvbmN1cnJlbnQgZGF0YWJhc2UgY2xpZW50cyAoZGVmYXVsdDog MSlcbiINCiAJCSAgICIgIC1DLCAtLWNvbm5lY3QgICAgICAgICAgICBlc3Rh Ymxpc2ggbmV3IGNvbm5lY3Rpb24gZm9yIGVhY2ggdHJhbnNhY3Rpb25cbiIN CiAJCSAgICIgIC1ELCAtLWRlZmluZT1WQVJOQU1FPVZBTFVFXG4iDQogCSAg IiAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZSB2YXJpYWJsZSBm b3IgdXNlIGJ5IGN1c3RvbSBzY3JpcHRcbiINCi0JCSAiICAtZiwgLS1maWxl PUZJTEVOQU1FICAgICAgcmVhZCB0cmFuc2FjdGlvbiBzY3JpcHQgZnJvbSBG SUxFTkFNRVxuIg0KKwkJICIgIC1mLCAtLWZpbGU9RklMRU5BTUVAVyAgICBh ZGQgd2VpZ2h0ZWQgdHJhbnNhY3Rpb24gc2NyaXB0IGZyb20gRklMRU5BTUVc biINCiAJCSAgICIgIC1qLCAtLWpvYnM9TlVNICAgICAgICAgICBudW1iZXIg b2YgdGhyZWFkcyAoZGVmYXVsdDogMSlcbiINCiAJCSAgICIgIC1sLCAtLWxv ZyAgICAgICAgICAgICAgICB3cml0ZSB0cmFuc2FjdGlvbiB0aW1lcyB0byBs b2cgZmlsZVxuIg0KIAkiICAtTCwgLS1sYXRlbmN5LWxpbWl0PU5VTSAgY291 bnQgdHJhbnNhY3Rpb25zIGxhc3RpbmcgbW9yZSB0aGFuIE5VTSBtcyBhcyBs YXRlXG4iDQogCQkgICAiICAtTSwgLS1wcm90b2NvbD1zaW1wbGV8ZXh0ZW5k ZWR8cHJlcGFyZWRcbiINCiAJCSAgICIgICAgICAgICAgICAgICAgICAgICAg ICAgICBwcm90b2NvbCBmb3Igc3VibWl0dGluZyBxdWVyaWVzIChkZWZhdWx0 OiBzaW1wbGUpXG4iDQogCQkgICAiICAtbiwgLS1uby12YWN1dW0gICAgICAg ICAgZG8gbm90IHJ1biBWQUNVVU0gYmVmb3JlIHRlc3RzXG4iDQotCQkgICAi ICAtTiwgLS1za2lwLXNvbWUtdXBkYXRlcyAgc2tpcCB1cGRhdGVzIG9mIHBn YmVuY2hfdGVsbGVycyBhbmQgcGdiZW5jaF9icmFuY2hlc1xuIg0KKwkJICAg IiAgLU4sIC0tc2tpcC1zb21lLXVwZGF0ZXMgIHNhbWUgYXMgXCItYiBzaW1w bGUtdXBkYXRlQDFcIlxuIg0KIAkJICAgIiAgLVAsIC0tcHJvZ3Jlc3M9TlVN ICAgICAgIHNob3cgdGhyZWFkIHByb2dyZXNzIHJlcG9ydCBldmVyeSBOVU0g c2Vjb25kc1xuIg0KIAkJICAgIiAgLXIsIC0tcmVwb3J0LWxhdGVuY2llcyAg IHJlcG9ydCBhdmVyYWdlIGxhdGVuY3kgcGVyIGNvbW1hbmRcbiINCiAJCSIg IC1SLCAtLXJhdGU9TlVNICAgICAgICAgICB0YXJnZXQgcmF0ZSBpbiB0cmFu c2FjdGlvbnMgcGVyIHNlY29uZFxuIg0KIAkJICAgIiAgLXMsIC0tc2NhbGU9 TlVNICAgICAgICAgIHJlcG9ydCB0aGlzIHNjYWxlIGZhY3RvciBpbiBvdXRw dXRcbiINCi0JCSAgICIgIC1TLCAtLXNlbGVjdC1vbmx5ICAgICAgICBwZXJm b3JtIFNFTEVDVC1vbmx5IHRyYW5zYWN0aW9uc1xuIg0KKwkJICAgIiAgLVMs IC0tc2VsZWN0LW9ubHkgICAgICAgIHNhbWUgYXMgXCItYiBzZWxlY3Qtb25s eUAxXCJcbiINCiAJCSAgICIgIC10LCAtLXRyYW5zYWN0aW9ucz1OVU0gICBu dW1iZXIgb2YgdHJhbnNhY3Rpb25zIGVhY2ggY2xpZW50IHJ1bnMgKGRlZmF1 bHQ6IDEwKVxuIg0KIAkJICIgIC1ULCAtLXRpbWU9TlVNICAgICAgICAgICBk dXJhdGlvbiBvZiBiZW5jaG1hcmsgdGVzdCBpbiBzZWNvbmRzXG4iDQogCQkg ICAiICAtdiwgLS12YWN1dW0tYWxsICAgICAgICAgdmFjdXVtIGFsbCBmb3Vy IHN0YW5kYXJkIHRhYmxlcyBiZWZvcmUgdGVzdHNcbiINCkBAIC01ODEsNiAr NjIwLDQ5IEBAIGdldFBvaXNzb25SYW5kKFRTdGF0ZSAqdGhyZWFkLCBpbnQ2 NCBjZW50ZXIpDQogCXJldHVybiAoaW50NjQpICgtbG9nKHVuaWZvcm0pICog KChkb3VibGUpIGNlbnRlcikgKyAwLjUpOw0KIH0NCiANCitzdGF0aWMgdm9p ZA0KK2luaXRTaW1wbGVTdGF0cyhTaW1wbGVTdGF0cyAqIHNzKQ0KK3sNCisJ bWVtc2V0KHNzLCAwLCBzaXplb2YoU2ltcGxlU3RhdHMpKTsNCit9DQorDQor c3RhdGljIHZvaWQNCitkb1NpbXBsZVN0YXRzKFNpbXBsZVN0YXRzICpzcywg ZG91YmxlIHZhbCkNCit7DQorCWlmIChzcy0+Y291bnQgPT0gMCB8fCB2YWwg PCBzcy0+bWluKQ0KKwkJc3MtPm1pbiA9IHZhbDsNCisJaWYgKHNzLT5jb3Vu dCA9PSAwIHx8IHZhbCA+IHNzLT5tYXgpDQorCQlzcy0+bWF4ID0gdmFsOw0K Kwlzcy0+Y291bnQgKys7DQorCXNzLT5zdW0gKz0gdmFsOw0KKwlzcy0+c3Vt MiArPSB2YWwgKiB2YWw7DQorfQ0KKw0KK3N0YXRpYyB2b2lkDQorYXBwZW5k U2ltcGxlU3RhdHMoU2ltcGxlU3RhdHMgKmFjYywgU2ltcGxlU3RhdHMgKnNz KQ0KK3sNCisJaWYgKGFjYy0+Y291bnQgPT0gMCB8fCBzcy0+bWluIDwgYWNj LT5taW4pDQorCQlhY2MtPm1pbiA9IHNzLT5taW47DQorCWlmIChhY2MtPmNv dW50ID09IDAgfHwgc3MtPm1heCA+IGFjYy0+bWF4KQ0KKwkJYWNjLT5tYXgg PSBzcy0+bWF4Ow0KKwlhY2MtPmNvdW50ICs9IHNzLT5jb3VudDsNCisJYWNj LT5zdW0gKz0gc3MtPnN1bTsNCisJYWNjLT5zdW0yICs9IHNzLT5zdW0yOw0K K30NCisNCitzdGF0aWMgdm9pZA0KK2luaXRTdGF0cyhTdGF0c0RhdGEgKnNk LCBkb3VibGUgc3RhcnRfdGltZSkNCit7DQorCXNkLT5jbnQgPSAwOw0KKwlz ZC0+c2tpcHBlZCA9IDA7DQorCWluaXRTaW1wbGVTdGF0cygmIHNkLT5sYXRl bmN5KTsNCisJaW5pdFNpbXBsZVN0YXRzKCYgc2QtPmxhZyk7DQorDQorCS8q IG5vdCBuZWNlc3NhcmlseSBvdmVycmlkZW4/ICovDQorCWlmIChzdGFydF90 aW1lKQ0KKwkJc2QtPnN0YXJ0X3RpbWUgPSBzdGFydF90aW1lOw0KK30NCisN CiAvKiBjYWxsIFBRZXhlYygpIGFuZCBleGl0KCkgb24gZmFpbHVyZSAqLw0K IHN0YXRpYyB2b2lkDQogZXhlY3V0ZVN0YXRlbWVudChQR2Nvbm4gKmNvbiwg Y29uc3QgY2hhciAqc3FsKQ0KQEAgLTExMDAsMzMgKzExODIsMjEgQEAgY2xp ZW50RG9uZShDU3RhdGUgKnN0LCBib29sIG9rKQ0KIAlyZXR1cm4gZmFsc2U7 CQkJCS8qIGFsd2F5cyBmYWxzZSAqLw0KIH0NCiANCi1zdGF0aWMgdm9pZA0K LWFnZ192YWxzX2luaXQoQWdnVmFscyAqYWdncywgaW5zdHJfdGltZSBzdGFy dCkNCitzdGF0aWMgaW50DQorY2hvb3NlU2NyaXB0KFRTdGF0ZSAqdGhyZWFk KQ0KIHsNCi0JLyogYmFzaWMgY291bnRlcnMgKi8NCi0JYWdncy0+Y250ID0g MDsJCQkJLyogbnVtYmVyIG9mIHRyYW5zYWN0aW9ucyAoaW5jbHVkZXMgc2tp cHBlZCkgKi8NCi0JYWdncy0+c2tpcHBlZCA9IDA7CQkJLyogeGFjdHMgc2tp cHBlZCB1bmRlciAtLXJhdGUgLS1sYXRlbmN5LWxpbWl0ICovDQorCWludCBp ID0gMCwgdyA9IDAsIHdjID0gKGludCkgZ2V0cmFuZCh0aHJlYWQsIDAsIHRv dGFsX3dlaWdodCAtIDEpOw0KIA0KLQlhZ2dzLT5zdW1fbGF0ZW5jeSA9IDA7 CQkvKiBTVU0obGF0ZW5jeSkgKi8NCi0JYWdncy0+c3VtMl9sYXRlbmN5ID0g MDsJCS8qIFNVTShsYXRlbmN5KmxhdGVuY3kpICovDQorCWRvIHsNCisJCXcg Kz0gc3FsX3NjcmlwdFtpKytdLndlaWdodDsNCisJfSB3aGlsZSAodyA8PSB3 Yyk7DQogDQotCS8qIG1pbiBhbmQgbWF4IHRyYW5zYWN0aW9uIGR1cmF0aW9u ICovDQotCWFnZ3MtPm1pbl9sYXRlbmN5ID0gMDsNCi0JYWdncy0+bWF4X2xh dGVuY3kgPSAwOw0KLQ0KLQkvKiBzY2hlZHVsZSBsYWcgY291bnRlcnMgKi8N Ci0JYWdncy0+c3VtX2xhZyA9IDA7DQotCWFnZ3MtPnN1bTJfbGFnID0gMDsN Ci0JYWdncy0+bWluX2xhZyA9IDA7DQotCWFnZ3MtPm1heF9sYWcgPSAwOw0K LQ0KLQkvKiBzdGFydCBvZiB0aGUgY3VycmVudCBpbnRlcnZhbCAqLw0KLQlh Z2dzLT5zdGFydF90aW1lID0gSU5TVFJfVElNRV9HRVRfRE9VQkxFKHN0YXJ0 KTsNCisJcmV0dXJuIGkgLSAxOw0KIH0NCiANCiAvKiByZXR1cm4gZmFsc2Ug aWZmIGNsaWVudCBzaG91bGQgYmUgZGlzY29ubmVjdGVkICovDQogc3RhdGlj IGJvb2wNCi1kb0N1c3RvbShUU3RhdGUgKnRocmVhZCwgQ1N0YXRlICpzdCwg aW5zdHJfdGltZSAqY29ubl90aW1lLCBGSUxFICpsb2dmaWxlLCBBZ2dWYWxz ICphZ2cpDQorZG9DdXN0b20oVFN0YXRlICp0aHJlYWQsIENTdGF0ZSAqc3Qs IEZJTEUgKmxvZ2ZpbGUsIFN0YXRzRGF0YSAqYWdnKQ0KIHsNCiAJUEdyZXN1 bHQgICAqcmVzOw0KIAlDb21tYW5kICAgKipjb21tYW5kczsNCkBAIC0xMTQ0 LDcgKzEyMTQsNyBAQCBkb0N1c3RvbShUU3RhdGUgKnRocmVhZCwgQ1N0YXRl ICpzdCwgaW5zdHJfdGltZSAqY29ubl90aW1lLCBGSUxFICpsb2dmaWxlLCBB Z2dWYQ0KIHRvcDoNCiAJSU5TVFJfVElNRV9TRVRfWkVSTyhub3cpOw0KIA0K LQljb21tYW5kcyA9IHNxbF9maWxlc1tzdC0+dXNlX2ZpbGVdOw0KKwljb21t YW5kcyA9IHNxbF9zY3JpcHRbc3QtPnVzZV9maWxlXS5jb21tYW5kczsNCiAN CiAJLyoNCiAJICogSGFuZGxlIHRocm90dGxpbmcgb25jZSBwZXIgdHJhbnNh Y3Rpb24gYnkgc2xlZXBpbmcuICBJdCBpcyBzaW1wbGVyIHRvDQpAQCAtMTE4 MCwxOCArMTI1MCwxNSBAQCB0b3A6DQogCQkJbm93X3VzID0gSU5TVFJfVElN RV9HRVRfTUlDUk9TRUMobm93KTsNCiAJCQl3aGlsZSAodGhyZWFkLT50aHJv dHRsZV90cmlnZ2VyIDwgbm93X3VzIC0gbGF0ZW5jeV9saW1pdCkNCiAJCQl7 DQotCQkJCXRocmVhZC0+dGhyb3R0bGVfbGF0ZW5jeV9za2lwcGVkKys7DQot DQotCQkJCWlmIChsb2dmaWxlKQ0KLQkJCQkJZG9Mb2codGhyZWFkLCBzdCwg bG9nZmlsZSwgJm5vdywgYWdnLCB0cnVlKTsNCi0NCisJCQkJZG9UeFN0YXRz KHRocmVhZCwgc3QsICAmbm93LCB0cnVlLCBsb2dmaWxlLCBhZ2cpOw0KKwkJ CQkvKiBuZXh0IHJlbmRlei12b3VzICovDQogCQkJCXdhaXQgPSBnZXRQb2lz c29uUmFuZCh0aHJlYWQsIHRocm90dGxlX2RlbGF5KTsNCiAJCQkJdGhyZWFk LT50aHJvdHRsZV90cmlnZ2VyICs9IHdhaXQ7DQogCQkJCXN0LT50eG5fc2No ZWR1bGVkID0gdGhyZWFkLT50aHJvdHRsZV90cmlnZ2VyOw0KIAkJCX0NCiAJ CX0NCiANCi0JCXN0LT5zbGVlcGluZyA9IDE7DQorCQlzdC0+c2xlZXBpbmcg PSB0cnVlOw0KIAkJc3QtPnRocm90dGxpbmcgPSB0cnVlOw0KIAkJc3QtPmlz X3Rocm90dGxlZCA9IHRydWU7DQogCQlpZiAoZGVidWcpDQpAQCAtMTIwMSwy NyArMTI2OCwxMyBAQCB0b3A6DQogDQogCWlmIChzdC0+c2xlZXBpbmcpDQog CXsJCQkJCQkJLyogYXJlIHdlIHNsZWVwaW5nPyAqLw0KLQkJaW50NjQJCW5v d191czsNCi0NCiAJCWlmIChJTlNUUl9USU1FX0lTX1pFUk8obm93KSkNCiAJ CQlJTlNUUl9USU1FX1NFVF9DVVJSRU5UKG5vdyk7DQotCQlub3dfdXMgPSBJ TlNUUl9USU1FX0dFVF9NSUNST1NFQyhub3cpOw0KLQkJaWYgKHN0LT50eG5f c2NoZWR1bGVkIDw9IG5vd191cykNCi0JCXsNCi0JCQlzdC0+c2xlZXBpbmcg PSAwOwkvKiBEb25lIHNsZWVwaW5nLCBnbyBhaGVhZCB3aXRoIG5leHQgY29t bWFuZCAqLw0KLQkJCWlmIChzdC0+dGhyb3R0bGluZykNCi0JCQl7DQotCQkJ CS8qIE1lYXN1cmUgbGFnIG9mIHRocm90dGxlZCB0cmFuc2FjdGlvbiByZWxh dGl2ZSB0byB0YXJnZXQgKi8NCi0JCQkJaW50NjQJCWxhZyA9IG5vd191cyAt IHN0LT50eG5fc2NoZWR1bGVkOw0KLQ0KLQkJCQl0aHJlYWQtPnRocm90dGxl X2xhZyArPSBsYWc7DQotCQkJCWlmIChsYWcgPiB0aHJlYWQtPnRocm90dGxl X2xhZ19tYXgpDQotCQkJCQl0aHJlYWQtPnRocm90dGxlX2xhZ19tYXggPSBs YWc7DQotCQkJCXN0LT50aHJvdHRsaW5nID0gZmFsc2U7DQotCQkJfQ0KLQkJ fQ0KLQkJZWxzZQ0KKwkJaWYgKElOU1RSX1RJTUVfR0VUX01JQ1JPU0VDKG5v dykgPCBzdC0+dHhuX3NjaGVkdWxlZCkNCiAJCQlyZXR1cm4gdHJ1ZTsJCS8q IFN0aWxsIHNsZWVwaW5nLCBub3RoaW5nIHRvIGRvIGhlcmUgKi8NCisJCS8q IEVsc2UgZG9uZSBzbGVlcGluZywgZ28gYWhlYWQgd2l0aCBuZXh0IGNvbW1h bmQgKi8NCisJCXN0LT5zbGVlcGluZyA9IGZhbHNlOw0KKwkJc3QtPnRocm90 dGxpbmcgPSBmYWxzZTsNCiAJfQ0KIA0KIAlpZiAoc3QtPmxpc3RlbikNCkBA IC0xMjQ1LDQ3ICsxMjk4LDI0IEBAIHRvcDoNCiAJCSAqLw0KIAkJaWYgKGlz X2xhdGVuY2llcykNCiAJCXsNCi0JCQlpbnQJCQljbnVtID0gY29tbWFuZHNb c3QtPnN0YXRlXS0+Y29tbWFuZF9udW07DQotDQogCQkJaWYgKElOU1RSX1RJ TUVfSVNfWkVSTyhub3cpKQ0KIAkJCQlJTlNUUl9USU1FX1NFVF9DVVJSRU5U KG5vdyk7DQotCQkJSU5TVFJfVElNRV9BQ0NVTV9ESUZGKHRocmVhZC0+ZXhl Y19lbGFwc2VkW2NudW1dLA0KLQkJCQkJCQkJICBub3csIHN0LT5zdG10X2Jl Z2luKTsNCi0JCQl0aHJlYWQtPmV4ZWNfY291bnRbY251bV0rKzsNCisNCisJ CQkvKiBhbHRob3VnaCBhIG11dGV4IHdvdWxkIG1ha2Ugc2Vuc2UsIHRoZSBs aWtlbHlob29kIG9mIGFuIGlzc3VlDQorCQkJICogaXMgc21hbGwgYW5kIHRo ZXNlIGFyZSBvbmx5IHN0YXRzIHdoaWNoIG1heSBiZSBzbGlnaHRseSBmYWxz ZQ0KKwkJCSAqLw0KKwkJCWRvU2ltcGxlU3RhdHMoJiBjb21tYW5kc1tzdC0+ c3RhdGVdLT5zdGF0cywNCisJCQkJCQkgIElOU1RSX1RJTUVfR0VUX0RPVUJM RShub3cpIC0NCisJCQkJCQkgIElOU1RSX1RJTUVfR0VUX0RPVUJMRShzdC0+ c3RtdF9iZWdpbikpOw0KIAkJfQ0KIA0KIAkJLyogdHJhbnNhY3Rpb24gZmlu aXNoZWQ6IGNhbGN1bGF0ZSBsYXRlbmN5IGFuZCBsb2cgdGhlIHRyYW5zYWN0 aW9uICovDQogCQlpZiAoY29tbWFuZHNbc3QtPnN0YXRlICsgMV0gPT0gTlVM TCkNCiAJCXsNCi0JCQkvKiBvbmx5IGNhbGN1bGF0ZSBsYXRlbmN5IGlmIGFu IG9wdGlvbiBpcyB1c2VkIHRoYXQgbmVlZHMgaXQgKi8NCi0JCQlpZiAocHJv Z3Jlc3MgfHwgdGhyb3R0bGVfZGVsYXkgfHwgbGF0ZW5jeV9saW1pdCkNCi0J CQl7DQotCQkJCWludDY0CQlsYXRlbmN5Ow0KLQ0KLQkJCQlpZiAoSU5TVFJf VElNRV9JU19aRVJPKG5vdykpDQotCQkJCQlJTlNUUl9USU1FX1NFVF9DVVJS RU5UKG5vdyk7DQotDQotCQkJCWxhdGVuY3kgPSBJTlNUUl9USU1FX0dFVF9N SUNST1NFQyhub3cpIC0gc3QtPnR4bl9zY2hlZHVsZWQ7DQotDQotCQkJCXN0 LT50eG5fbGF0ZW5jaWVzICs9IGxhdGVuY3k7DQotDQotCQkJCS8qDQotCQkJ CSAqIFhYWCBJbiBhIGxvbmcgYmVuY2htYXJrIHJ1biBvZiBoaWdoLWxhdGVu Y3kgdHJhbnNhY3Rpb25zLA0KLQkJCQkgKiB0aGlzIGludDY0IGFkZGl0aW9u IGV2ZW50dWFsbHkgb3ZlcmZsb3dzLiAgRm9yIGV4YW1wbGUsIDEwMA0KLQkJ CQkgKiB0aHJlYWRzIHJ1bm5pbmcgMTBzIHRyYW5zYWN0aW9ucyB3aWxsIG92 ZXJmbG93IGl0IGluIDIuNTYNCi0JCQkJICogaG91cnMuICBXaXRoIGEgbW9y ZS10eXBpY2FsIE9MVFAgd29ya2xvYWQgb2YgLjFzDQotCQkJCSAqIHRyYW5z YWN0aW9ucywgb3ZlcmZsb3cgd291bGQgdGFrZSAyNTYgaG91cnMuDQotCQkJ CSAqLw0KLQkJCQlzdC0+dHhuX3NxbGF0cyArPSBsYXRlbmN5ICogbGF0ZW5j eTsNCi0NCi0JCQkJLyogcmVjb3JkIG92ZXIgdGhlIGxpbWl0IHRyYW5zYWN0 aW9ucyBpZiBuZWVkZWQuICovDQotCQkJCWlmIChsYXRlbmN5X2xpbWl0ICYm IGxhdGVuY3kgPiBsYXRlbmN5X2xpbWl0KQ0KLQkJCQkJdGhyZWFkLT5sYXRl bmN5X2xhdGUrKzsNCi0JCQl9DQotDQotCQkJLyogcmVjb3JkIHRoZSB0aW1l IGl0IHRvb2sgaW4gdGhlIGxvZyAqLw0KLQkJCWlmIChsb2dmaWxlKQ0KLQkJ CQlkb0xvZyh0aHJlYWQsIHN0LCBsb2dmaWxlLCAmbm93LCBhZ2csIGZhbHNl KTsNCisJCQlpZiAocHJvZ3Jlc3MgfHwgdGhyb3R0bGVfZGVsYXkgfHwgbGF0 ZW5jeV9saW1pdCB8fCBwZXJfc2NyaXB0X3N0YXRzIHx8IGxvZ2ZpbGUpDQor CQkJCWRvVHhTdGF0cyh0aHJlYWQsIHN0LCAmbm93LCBmYWxzZSwgbG9nZmls ZSwgYWdnKTsNCisJCQllbHNlDQorCQkJCXRocmVhZC0+c3RhdHMuY250ICsr Ow0KIAkJfQ0KIA0KIAkJaWYgKGNvbW1hbmRzW3N0LT5zdGF0ZV0tPnR5cGUg PT0gU1FMX0NPTU1BTkQpDQpAQCAtMTMyOCw4ICsxMzU4LDkgQEAgdG9wOg0K IAkJaWYgKGNvbW1hbmRzW3N0LT5zdGF0ZV0gPT0gTlVMTCkNCiAJCXsNCiAJ CQlzdC0+c3RhdGUgPSAwOw0KLQkJCXN0LT51c2VfZmlsZSA9IChpbnQpIGdl dHJhbmQodGhyZWFkLCAwLCBudW1fZmlsZXMgLSAxKTsNCi0JCQljb21tYW5k cyA9IHNxbF9maWxlc1tzdC0+dXNlX2ZpbGVdOw0KKwkJCXN0LT51c2VfZmls ZSA9IG51bV9zY3JpcHRzPT0xPyAwOiBjaG9vc2VTY3JpcHQodGhyZWFkKTsN CisNCisJCQljb21tYW5kcyA9IHNxbF9zY3JpcHRbc3QtPnVzZV9maWxlXS5j b21tYW5kczsNCiAJCQlzdC0+aXNfdGhyb3R0bGVkID0gZmFsc2U7DQogDQog CQkJLyoNCkBAIC0xMzU3LDcgKzEzODgsNyBAQCB0b3A6DQogCQkJcmV0dXJu IGNsaWVudERvbmUoc3QsIGZhbHNlKTsNCiAJCX0NCiAJCUlOU1RSX1RJTUVf U0VUX0NVUlJFTlQoZW5kKTsNCi0JCUlOU1RSX1RJTUVfQUNDVU1fRElGRigq Y29ubl90aW1lLCBlbmQsIHN0YXJ0KTsNCisJCUlOU1RSX1RJTUVfQUNDVU1f RElGRih0aHJlYWQtPmNvbm5fdGltZSwgZW5kLCBzdGFydCk7DQogCX0NCiAN CiAJLyoNCkBAIC0xMzcyLDcgKzE0MDMsNyBAQCB0b3A6DQogCX0NCiANCiAJ LyogUmVjb3JkIHRyYW5zYWN0aW9uIHN0YXJ0IHRpbWUgdW5kZXIgbG9nZ2lu ZywgcHJvZ3Jlc3Mgb3IgdGhyb3R0bGluZyAqLw0KLQlpZiAoKGxvZ2ZpbGUg fHwgcHJvZ3Jlc3MgfHwgdGhyb3R0bGVfZGVsYXkgfHwgbGF0ZW5jeV9saW1p dCkgJiYgc3QtPnN0YXRlID09IDApDQorCWlmICgobG9nZmlsZSB8fCBwcm9n cmVzcyB8fCB0aHJvdHRsZV9kZWxheSB8fCBsYXRlbmN5X2xpbWl0IHx8IHBl cl9zY3JpcHRfc3RhdHMpICYmIHN0LT5zdGF0ZSA9PSAwKQ0KIAl7DQogCQlJ TlNUUl9USU1FX1NFVF9DVVJSRU5UKHN0LT50eG5fYmVnaW4pOw0KIA0KQEAg LTE2NjAsNyArMTY5MSw3IEBAIHRvcDoNCiANCiAJCQlJTlNUUl9USU1FX1NF VF9DVVJSRU5UKG5vdyk7DQogCQkJc3QtPnR4bl9zY2hlZHVsZWQgPSBJTlNU Ul9USU1FX0dFVF9NSUNST1NFQyhub3cpICsgdXNlYzsNCi0JCQlzdC0+c2xl ZXBpbmcgPSAxOw0KKwkJCXN0LT5zbGVlcGluZyA9IHRydWU7DQogDQogCQkJ c3QtPmxpc3RlbiA9IDE7DQogCQl9DQpAQCAtMTY5MiwyMiArMTcyMywzOSBA QCB0b3A6DQogCQkJZWxzZQkvKiBzdWNjZWVkZWQgKi8NCiAJCQkJc3QtPmxp c3RlbiA9IDE7DQogCQl9DQorDQorCQkvKiBhZnRlciBhIG1ldGEgY29tbWFu ZCwgaW1tZWRpYXRlbHkgcHJvY2VlZCB3aXRoIG5leHQgY29tbWFuZCAqLw0K IAkJZ290byB0b3A7DQogCX0NCiANCiAJcmV0dXJuIHRydWU7DQogfQ0KIA0K K3N0YXRpYyB2b2lkDQorZG9TdGF0cyhTdGF0c0RhdGEgKnN0YXRzLCBib29s IHNraXBwZWQsIGRvdWJsZSBsYXQsIGRvdWJsZSBsYWcpDQorew0KKwlzdGF0 cy0+Y250ICsrOw0KKw0KKwlpZiAoc2tpcHBlZCkNCisJCS8qIG5vIGxhdGVu Y3kgdG8gcmVjb3JkIG9uIHNraXBwZWQgdHJhbnNhY3Rpb25zICovDQorCQlz dGF0cy0+c2tpcHBlZCArKzsNCisJZWxzZQ0KKwl7DQorCQlkb1NpbXBsZVN0 YXRzKCYgc3RhdHMtPmxhdGVuY3ksIGxhdCk7DQorDQorCQkvKiBhbmQgcG9z c2libHkgdGhlIHNhbWUgZm9yIHNjaGVkdWxlIGxhZyAqLw0KKwkJaWYgKHRo cm90dGxlX2RlbGF5KQ0KKwkJCWRvU2ltcGxlU3RhdHMoJiBzdGF0cy0+bGFn LCBsYWcpOw0KKwl9DQorfQ0KKw0KIC8qDQogICogcHJpbnQgbG9nIGVudHJ5 IGFmdGVyIGNvbXBsZXRpbmcgb25lIHRyYW5zYWN0aW9uLg0KICAqLw0KIHN0 YXRpYyB2b2lkDQotZG9Mb2coVFN0YXRlICp0aHJlYWQsIENTdGF0ZSAqc3Qs IEZJTEUgKmxvZ2ZpbGUsIGluc3RyX3RpbWUgKm5vdywgQWdnVmFscyAqYWdn LA0KLQkgIGJvb2wgc2tpcHBlZCkNCitkb0xvZyhUU3RhdGUgKnRocmVhZCwg Q1N0YXRlICpzdCwgRklMRSAqbG9nZmlsZSwgaW5zdHJfdGltZSAqbm93LA0K KwkgIFN0YXRzRGF0YSAqYWdnLCBib29sIHNraXBwZWQsIGRvdWJsZSBsYXRl bmN5LCBkb3VibGUgbGFnKQ0KIHsNCi0JZG91YmxlCQlsYWc7DQotCWRvdWJs ZQkJbGF0ZW5jeTsNCi0NCiAJLyoNCiAJICogU2tpcCB0aGUgbG9nIGVudHJ5 IGlmIHNhbXBsaW5nIGlzIGVuYWJsZWQgYW5kIHRoaXMgcm93IGRvZXNuJ3Qg YmVsb25nDQogCSAqIHRvIHRoZSByYW5kb20gc2FtcGxlLg0KQEAgLTE3MTYs MTUgKzE3NjQsNiBAQCBkb0xvZyhUU3RhdGUgKnRocmVhZCwgQ1N0YXRlICpz dCwgRklMRSAqbG9nZmlsZSwgaW5zdHJfdGltZSAqbm93LCBBZ2dWYWxzICph Z2csDQogCQlwZ19lcmFuZDQ4KHRocmVhZC0+cmFuZG9tX3N0YXRlKSA+IHNh bXBsZV9yYXRlKQ0KIAkJcmV0dXJuOw0KIA0KLQlpZiAoSU5TVFJfVElNRV9J U19aRVJPKCpub3cpKQ0KLQkJSU5TVFJfVElNRV9TRVRfQ1VSUkVOVCgqbm93 KTsNCi0NCi0JbGF0ZW5jeSA9IChkb3VibGUpIChJTlNUUl9USU1FX0dFVF9N SUNST1NFQygqbm93KSAtIHN0LT50eG5fc2NoZWR1bGVkKTsNCi0JaWYgKHNr aXBwZWQpDQotCQlsYWcgPSBsYXRlbmN5Ow0KLQllbHNlDQotCQlsYWcgPSAo ZG91YmxlKSAoSU5TVFJfVElNRV9HRVRfTUlDUk9TRUMoc3QtPnR4bl9iZWdp bikgLSBzdC0+dHhuX3NjaGVkdWxlZCk7DQotDQogCS8qIHNob3VsZCB3ZSBh Z2dyZWdhdGUgdGhlIHJlc3VsdHMgb3Igbm90PyAqLw0KIAlpZiAoYWdnX2lu dGVydmFsID4gMCkNCiAJew0KQEAgLTE3MzQsMzkgKzE3NzMsNyBAQCBkb0xv ZyhUU3RhdGUgKnRocmVhZCwgQ1N0YXRlICpzdCwgRklMRSAqbG9nZmlsZSwg aW5zdHJfdGltZSAqbm93LCBBZ2dWYWxzICphZ2csDQogCQkgKi8NCiAJCWlm IChhZ2ctPnN0YXJ0X3RpbWUgKyBhZ2dfaW50ZXJ2YWwgPj0gSU5TVFJfVElN RV9HRVRfRE9VQkxFKCpub3cpKQ0KIAkJew0KLQkJCWFnZy0+Y250ICs9IDE7 DQotCQkJaWYgKHNraXBwZWQpDQotCQkJew0KLQkJCQkvKg0KLQkJCQkgKiB0 aGVyZSBpcyBubyBsYXRlbmN5IHRvIHJlY29yZCBpZiB0aGUgdHJhbnNhY3Rp b24gd2FzDQotCQkJCSAqIHNraXBwZWQNCi0JCQkJICovDQotCQkJCWFnZy0+ c2tpcHBlZCArPSAxOw0KLQkJCX0NCi0JCQllbHNlDQotCQkJew0KLQkJCQlh Z2ctPnN1bV9sYXRlbmN5ICs9IGxhdGVuY3k7DQotCQkJCWFnZy0+c3VtMl9s YXRlbmN5ICs9IGxhdGVuY3kgKiBsYXRlbmN5Ow0KLQ0KLQkJCQkvKiBmaXJz dCBpbiB0aGlzIGFnZ3JlZ2F0aW9uIGludGVydmFsICovDQotCQkJCWlmICgo YWdnLT5jbnQgPT0gMSkgfHwgKGxhdGVuY3kgPCBhZ2ctPm1pbl9sYXRlbmN5 KSkNCi0JCQkJCWFnZy0+bWluX2xhdGVuY3kgPSBsYXRlbmN5Ow0KLQ0KLQkJ CQlpZiAoKGFnZy0+Y250ID09IDEpIHx8IChsYXRlbmN5ID4gYWdnLT5tYXhf bGF0ZW5jeSkpDQotCQkJCQlhZ2ctPm1heF9sYXRlbmN5ID0gbGF0ZW5jeTsN Ci0NCi0JCQkJLyogYW5kIHRoZSBzYW1lIGZvciBzY2hlZHVsZSBsYWcgKi8N Ci0JCQkJaWYgKHRocm90dGxlX2RlbGF5KQ0KLQkJCQl7DQotCQkJCQlhZ2ct PnN1bV9sYWcgKz0gbGFnOw0KLQkJCQkJYWdnLT5zdW0yX2xhZyArPSBsYWcg KiBsYWc7DQotDQotCQkJCQlpZiAoKGFnZy0+Y250ID09IDEpIHx8IChsYWcg PCBhZ2ctPm1pbl9sYWcpKQ0KLQkJCQkJCWFnZy0+bWluX2xhZyA9IGxhZzsN Ci0JCQkJCWlmICgoYWdnLT5jbnQgPT0gMSkgfHwgKGxhZyA+IGFnZy0+bWF4 X2xhZykpDQotCQkJCQkJYWdnLT5tYXhfbGFnID0gbGFnOw0KLQkJCQl9DQot CQkJfQ0KKwkJCWRvU3RhdHMoYWdnLCBza2lwcGVkLCBsYXRlbmN5LCBsYWcp Ow0KIAkJfQ0KIAkJZWxzZQ0KIAkJew0KQEAgLTE3ODEsNTIgKzE3ODgsMzQg QEAgZG9Mb2coVFN0YXRlICp0aHJlYWQsIENTdGF0ZSAqc3QsIEZJTEUgKmxv Z2ZpbGUsIGluc3RyX3RpbWUgKm5vdywgQWdnVmFscyAqYWdnLA0KIAkJCQkg KiB1c2FnZSksIHNvIHdlIGRvbid0IG5lZWQgdG8gaGFuZGxlIHRoaXMgaW4g YSBzcGVjaWFsIHdheQ0KIAkJCQkgKiAoc2VlIGJlbG93KS4NCiAJCQkJICov DQotCQkJCWZwcmludGYobG9nZmlsZSwgIiVsZCAlZCAlLjBmICUuMGYgJS4w ZiAlLjBmIiwNCisJCQkJZnByaW50Zihsb2dmaWxlLCAiJWxkICIgSU5UNjRf Rk9STUFUICIgJS4wZiAlLjBmICUuMGYgJS4wZiIsDQogCQkJCQkJYWdnLT5z dGFydF90aW1lLA0KIAkJCQkJCWFnZy0+Y250LA0KLQkJCQkJCWFnZy0+c3Vt X2xhdGVuY3ksDQotCQkJCQkJYWdnLT5zdW0yX2xhdGVuY3ksDQotCQkJCQkJ YWdnLT5taW5fbGF0ZW5jeSwNCi0JCQkJCQlhZ2ctPm1heF9sYXRlbmN5KTsN CisJCQkJCQlhZ2ctPmxhdGVuY3kuc3VtLA0KKwkJCQkJCWFnZy0+bGF0ZW5j eS5zdW0yLA0KKwkJCQkJCWFnZy0+bGF0ZW5jeS5taW4sDQorCQkJCQkJYWdn LT5sYXRlbmN5Lm1heCk7DQogCQkJCWlmICh0aHJvdHRsZV9kZWxheSkNCiAJ CQkJew0KIAkJCQkJZnByaW50Zihsb2dmaWxlLCAiICUuMGYgJS4wZiAlLjBm ICUuMGYiLA0KLQkJCQkJCQlhZ2ctPnN1bV9sYWcsDQotCQkJCQkJCWFnZy0+ c3VtMl9sYWcsDQotCQkJCQkJCWFnZy0+bWluX2xhZywNCi0JCQkJCQkJYWdn LT5tYXhfbGFnKTsNCisJCQkJCQkJYWdnLT5sYWcuc3VtLA0KKwkJCQkJCQlh Z2ctPmxhZy5zdW0yLA0KKwkJCQkJCQlhZ2ctPmxhZy5taW4sDQorCQkJCQkJ CWFnZy0+bGFnLm1heCk7DQogCQkJCQlpZiAobGF0ZW5jeV9saW1pdCkNCi0J CQkJCQlmcHJpbnRmKGxvZ2ZpbGUsICIgJWQiLCBhZ2ctPnNraXBwZWQpOw0K KwkJCQkJCWZwcmludGYobG9nZmlsZSwgIiAiIElOVDY0X0ZPUk1BVCwgYWdn LT5za2lwcGVkKTsNCiAJCQkJfQ0KIAkJCQlmcHV0YygnXG4nLCBsb2dmaWxl KTsNCiANCi0JCQkJLyogbW92ZSB0byB0aGUgbmV4dCBpbnRldmFsICovDQot CQkJCWFnZy0+c3RhcnRfdGltZSA9IGFnZy0+c3RhcnRfdGltZSArIGFnZ19p bnRlcnZhbDsNCisJCQkJLyogbW92ZSB0byB0aGUgbmV4dCBpbnRlcnZhbCAq Lw0KKwkJCQlhZ2ctPnN0YXJ0X3RpbWUgKz0gYWdnX2ludGVydmFsOw0KIA0K IAkJCQkvKiByZXNldCBmb3IgIm5vIHRyYW5zYWN0aW9uIiBpbnRlcnZhbHMg Ki8NCi0JCQkJYWdnLT5jbnQgPSAwOw0KLQkJCQlhZ2ctPnNraXBwZWQgPSAw Ow0KLQkJCQlhZ2ctPm1pbl9sYXRlbmN5ID0gMDsNCi0JCQkJYWdnLT5tYXhf bGF0ZW5jeSA9IDA7DQotCQkJCWFnZy0+c3VtX2xhdGVuY3kgPSAwOw0KLQkJ CQlhZ2ctPnN1bTJfbGF0ZW5jeSA9IDA7DQotCQkJCWFnZy0+bWluX2xhZyA9 IDA7DQotCQkJCWFnZy0+bWF4X2xhZyA9IDA7DQotCQkJCWFnZy0+c3VtX2xh ZyA9IDA7DQotCQkJCWFnZy0+c3VtMl9sYWcgPSAwOw0KKwkJCQlpbml0U3Rh dHMoYWdnLCAwLjApOw0KIAkJCX0NCiANCiAJCQkvKiByZXNldCB0aGUgdmFs dWVzIHRvIGluY2x1ZGUgb25seSB0aGUgY3VycmVudCB0cmFuc2FjdGlvbi4g Ki8NCi0JCQlhZ2ctPmNudCA9IDE7DQotCQkJYWdnLT5za2lwcGVkID0gc2tp cHBlZCA/IDEgOiAwOw0KLQkJCWFnZy0+bWluX2xhdGVuY3kgPSBsYXRlbmN5 Ow0KLQkJCWFnZy0+bWF4X2xhdGVuY3kgPSBsYXRlbmN5Ow0KLQkJCWFnZy0+ c3VtX2xhdGVuY3kgPSBza2lwcGVkID8gMC4wIDogbGF0ZW5jeTsNCi0JCQlh Z2ctPnN1bTJfbGF0ZW5jeSA9IHNraXBwZWQgPyAwLjAgOiBsYXRlbmN5ICog bGF0ZW5jeTsNCi0JCQlhZ2ctPm1pbl9sYWcgPSBsYWc7DQotCQkJYWdnLT5t YXhfbGFnID0gbGFnOw0KLQkJCWFnZy0+c3VtX2xhZyA9IGxhZzsNCi0JCQlh Z2ctPnN1bTJfbGFnID0gbGFnICogbGFnOw0KKwkJCWRvU3RhdHMoYWdnLCBz a2lwcGVkLCBsYXRlbmN5LCBsYWcpOw0KIAkJfQ0KIAl9DQogCWVsc2UNCkBA IC0xODM2LDIxICsxODI1LDIxIEBAIGRvTG9nKFRTdGF0ZSAqdGhyZWFkLCBD U3RhdGUgKnN0LCBGSUxFICpsb2dmaWxlLCBpbnN0cl90aW1lICpub3csIEFn Z1ZhbHMgKmFnZywNCiANCiAJCS8qIFRoaXMgaXMgbW9yZSB0aGFuIHdlIHJl YWxseSBvdWdodCB0byBrbm93IGFib3V0IGluc3RyX3RpbWUgKi8NCiAJCWlm IChza2lwcGVkKQ0KLQkJCWZwcmludGYobG9nZmlsZSwgIiVkICVkIHNraXBw ZWQgJWQgJWxkICVsZCIsDQorCQkJZnByaW50Zihsb2dmaWxlLCAiJWQgIiBJ TlQ2NF9GT1JNQVQgIiBza2lwcGVkICVkICVsZCAlbGQiLA0KIAkJCQkJc3Qt PmlkLCBzdC0+Y250LCBzdC0+dXNlX2ZpbGUsDQogCQkJCQkobG9uZykgbm93 LT50dl9zZWMsIChsb25nKSBub3ctPnR2X3VzZWMpOw0KIAkJZWxzZQ0KLQkJ CWZwcmludGYobG9nZmlsZSwgIiVkICVkICUuMGYgJWQgJWxkICVsZCIsDQor CQkJZnByaW50Zihsb2dmaWxlLCAiJWQgIiBJTlQ2NF9GT1JNQVQgIiAlLjBm ICVkICVsZCAlbGQiLA0KIAkJCQkJc3QtPmlkLCBzdC0+Y250LCBsYXRlbmN5 LCBzdC0+dXNlX2ZpbGUsDQogCQkJCQkobG9uZykgbm93LT50dl9zZWMsIChs b25nKSBub3ctPnR2X3VzZWMpOw0KICNlbHNlDQogDQogCQkvKiBPbiBXaW5k b3dzLCBpbnN0cl90aW1lIGRvZXNuJ3QgcHJvdmlkZSBhIHRpbWVzdGFtcCBh bnl3YXkgKi8NCiAJCWlmIChza2lwcGVkKQ0KLQkJCWZwcmludGYobG9nZmls ZSwgIiVkICVkIHNraXBwZWQgJWQgMCAwIiwNCisJCQlmcHJpbnRmKGxvZ2Zp bGUsICIlZCAiSU5UNjRfRk9STUFUIiBza2lwcGVkICVkIDAgMCIsDQogCQkJ CQlzdC0+aWQsIHN0LT5jbnQsIHN0LT51c2VfZmlsZSk7DQogCQllbHNlDQot CQkJZnByaW50Zihsb2dmaWxlLCAiJWQgJWQgJS4wZiAlZCAwIDAiLA0KKwkJ CWZwcmludGYobG9nZmlsZSwgIiVkICJJTlQ2NF9GT1JNQVQiICUuMGYgJWQg MCAwIiwNCiAJCQkJCXN0LT5pZCwgc3QtPmNudCwgbGF0ZW5jeSwgc3QtPnVz ZV9maWxlKTsNCiAjZW5kaWYNCiAJCWlmICh0aHJvdHRsZV9kZWxheSkNCkBA IC0xODU5LDYgKzE4NDgsNDQgQEAgZG9Mb2coVFN0YXRlICp0aHJlYWQsIENT dGF0ZSAqc3QsIEZJTEUgKmxvZ2ZpbGUsIGluc3RyX3RpbWUgKm5vdywgQWdn VmFscyAqYWdnLA0KIAl9DQogfQ0KIA0KKy8qDQorICogZW5kIG9mIHRyYW5z YWN0aW9uIHN0YXRpc3RpY3MNCisgKi8NCitzdGF0aWMgdm9pZA0KK2RvVHhT dGF0cyhUU3RhdGUgKnRocmVhZCwgQ1N0YXRlICpzdCwgaW5zdHJfdGltZSAq bm93LA0KKwkJICBib29sIHNraXBwZWQsIEZJTEUgKmxvZ2ZpbGUsIFN0YXRz RGF0YSAqYWdnKQ0KK3sNCisJZG91YmxlIGxhdGVuY3kgPSAwLjAsIGxhZyA9 IDAuMDsNCisNCisJaWYgKCghc2tpcHBlZCB8fCBhZ2dfaW50ZXJ2YWwpICYm IElOU1RSX1RJTUVfSVNfWkVSTygqbm93KSkNCisJCUlOU1RSX1RJTUVfU0VU X0NVUlJFTlQoKm5vdyk7DQorDQorCWlmICghc2tpcHBlZCkNCisJew0KKwkJ LyogY29tcHV0ZSBsYXRlbmN5ICYgbGFnIGlmIG5lZWRlZCAqLw0KKwkJbGF0 ZW5jeSA9IElOU1RSX1RJTUVfR0VUX01JQ1JPU0VDKCpub3cpIC0gc3QtPnR4 bl9zY2hlZHVsZWQ7DQorCQlsYWcgPSBJTlNUUl9USU1FX0dFVF9NSUNST1NF QyhzdC0+dHhuX2JlZ2luKSAtIHN0LT50eG5fc2NoZWR1bGVkOw0KKwl9DQor DQorCWlmIChwcm9ncmVzcyB8fCB0aHJvdHRsZV9kZWxheSB8fCBsYXRlbmN5 X2xpbWl0KQ0KKwl7DQorCQlkb1N0YXRzKCYgdGhyZWFkLT5zdGF0cywgc2tp cHBlZCwgbGF0ZW5jeSwgbGFnKTsNCisNCisJCS8qIHJlY29yZCBvdmVyIHRo ZSBsaW1pdCB0cmFuc2FjdGlvbnMgaWYgbmVlZGVkLiAqLw0KKwkJaWYgKGxh dGVuY3lfbGltaXQgJiYgbGF0ZW5jeSA+IGxhdGVuY3lfbGltaXQpDQorCQkJ dGhyZWFkLT5sYXRlbmN5X2xhdGUrKzsNCisJfQ0KKwllbHNlDQorCQl0aHJl YWQtPnN0YXRzLmNudCArKzsNCisNCisJaWYgKHVzZV9sb2cpDQorCQlkb0xv Zyh0aHJlYWQsIHN0LCBsb2dmaWxlLCBub3csIGFnZywgc2tpcHBlZCwgbGF0 ZW5jeSwgbGFnKTsNCisNCisJaWYgKHBlcl9zY3JpcHRfc3RhdHMpIC8qIG11 dGV4PyBobW1tLi4uIHRoZXNlIGFyZSBvbmx5IHN0YXRpc3RpY3MgKi8NCisJ CWRvU3RhdHMoJiBzcWxfc2NyaXB0W3N0LT51c2VfZmlsZV0uc3RhdHMsIHNr aXBwZWQsIGxhdGVuY3ksIGxhZyk7DQorfQ0KKw0KKw0KIC8qIGRpc2NhcmQg Y29ubmVjdGlvbnMgKi8NCiBzdGF0aWMgdm9pZA0KIGRpc2Nvbm5lY3RfYWxs KENTdGF0ZSAqc3RhdGUsIGludCBsZW5ndGgpDQpAQCAtMjI1NSw2ICsyMjgy LDcgQEAgcHJvY2Vzc19jb21tYW5kcyhjaGFyICpidWYsIGNvbnN0IGNoYXIg KnNvdXJjZSwgY29uc3QgaW50IGxpbmVubykNCiAJbXlfY29tbWFuZHMtPmNv bW1hbmRfbnVtID0gbnVtX2NvbW1hbmRzKys7DQogCW15X2NvbW1hbmRzLT50 eXBlID0gMDsJCS8qIHVudGlsIHNldCAqLw0KIAlteV9jb21tYW5kcy0+YXJn YyA9IDA7DQorCWluaXRTaW1wbGVTdGF0cygmIG15X2NvbW1hbmRzLT5zdGF0 cyk7DQogDQogCWlmICgqcCA9PSAnXFwnKQ0KIAl7DQpAQCAtMjQ3OSw3ICsy NTA3LDcgQEAgcmVhZF9saW5lX2Zyb21fZmlsZShGSUxFICpmZCkNCiAJcmV0 dXJuIE5VTEw7DQogfQ0KIA0KLXN0YXRpYyBpbnQNCitzdGF0aWMgQ29tbWFu ZCAqKg0KIHByb2Nlc3NfZmlsZShjaGFyICpmaWxlbmFtZSkNCiB7DQogI2Rl ZmluZSBDT01NQU5EU19BTExPQ19OVU0gMTI4DQpAQCAtMjQ4NywxNSArMjUx NSw5IEBAIHByb2Nlc3NfZmlsZShjaGFyICpmaWxlbmFtZSkNCiAJQ29tbWFu ZCAgICoqbXlfY29tbWFuZHM7DQogCUZJTEUJICAgKmZkOw0KIAlpbnQJCQls aW5lbm8sDQotCQkJCWluZGV4Ow0KKwkJCQlpbmRleCwNCisJCQkJYWxsb2Nf bnVtOw0KIAljaGFyCSAgICpidWY7DQotCWludAkJCWFsbG9jX251bTsNCi0N Ci0JaWYgKG51bV9maWxlcyA+PSBNQVhfRklMRVMpDQotCXsNCi0JCWZwcmlu dGYoc3RkZXJyLCAiYXQgbW9zdCAlZCBTUUwgZmlsZXMgYXJlIGFsbG93ZWRc biIsIE1BWF9GSUxFUyk7DQotCQlleGl0KDEpOw0KLQl9DQogDQogCWFsbG9j X251bSA9IENPTU1BTkRTX0FMTE9DX05VTTsNCiAJbXlfY29tbWFuZHMgPSAo Q29tbWFuZCAqKikgcGdfbWFsbG9jKHNpemVvZihDb21tYW5kICopICogYWxs b2NfbnVtKTsNCkBAIC0yNTA3LDcgKzI1MjksNyBAQCBwcm9jZXNzX2ZpbGUo Y2hhciAqZmlsZW5hbWUpDQogCQlmcHJpbnRmKHN0ZGVyciwgImNvdWxkIG5v dCBvcGVuIGZpbGUgXCIlc1wiOiAlc1xuIiwNCiAJCQkJZmlsZW5hbWUsIHN0 cmVycm9yKGVycm5vKSk7DQogCQlwZ19mcmVlKG15X2NvbW1hbmRzKTsNCi0J CXJldHVybiBmYWxzZTsNCisJCXJldHVybiBOVUxMOw0KIAl9DQogDQogCWxp bmVubyA9IDA7DQpAQCAtMjUzOSwxMyArMjU2MSwxMSBAQCBwcm9jZXNzX2Zp bGUoY2hhciAqZmlsZW5hbWUpDQogDQogCW15X2NvbW1hbmRzW2luZGV4XSA9 IE5VTEw7DQogDQotCXNxbF9maWxlc1tudW1fZmlsZXMrK10gPSBteV9jb21t YW5kczsNCi0NCi0JcmV0dXJuIHRydWU7DQorCXJldHVybiBteV9jb21tYW5k czsNCiB9DQogDQogc3RhdGljIENvbW1hbmQgKioNCi1wcm9jZXNzX2J1aWx0 aW4oY2hhciAqdGIsIGNvbnN0IGNoYXIgKnNvdXJjZSkNCitwcm9jZXNzX2J1 aWx0aW4oY29uc3QgY2hhciAqdGIsIGNvbnN0IGNoYXIgKnNvdXJjZSkNCiB7 DQogI2RlZmluZSBDT01NQU5EU19BTExPQ19OVU0gMTI4DQogDQpAQCAtMjU5 OSwzNSArMjYxOSw3NyBAQCBwcm9jZXNzX2J1aWx0aW4oY2hhciAqdGIsIGNv bnN0IGNoYXIgKnNvdXJjZSkNCiAJcmV0dXJuIG15X2NvbW1hbmRzOw0KIH0N CiANCisvKiBQb3NzaWJ5IHRydW5jYXRlIG9wdGlvbiBhbmQgcmV0dXJuIHdl aWdodCAqLw0KK3N0YXRpYyBpbnQNCitnZXRXZWlnaHQoY2hhciAqb3B0aW9u KQ0KK3sNCisJY2hhciAgICpzZXA7DQorCWludAkJd2VpZ2h0Ow0KKw0KKwlp ZiAoKHNlcCA9IHN0cnJjaHIob3B0aW9uLCBXU0VQKSkpDQorCXsNCisJCSpz ZXArKyA9ICdcMCc7DQorCQl3ZWlnaHQgPSBhdG9pKHNlcCk7DQorCQlpZiAo d2VpZ2h0IDw9IDApDQorCQl7DQorCQkJZnByaW50ZihzdGRlcnIsDQorCQkJ CQkid2VpZ2h0IG11c3QgYmUgc3RyaWN0bHkgcG9zaXRpdmUsIGdvdCBcIiVz XCJcbiIsIHNlcCk7DQorCQkJZXhpdCgxKTsNCisJCX0NCisJfQ0KKwllbHNl DQorCQl3ZWlnaHQgPSAxOw0KKwlyZXR1cm4gd2VpZ2h0Ow0KK30NCisNCitz dGF0aWMgdm9pZA0KK2FkZFNjcmlwdChjb25zdCBjaGFyICpuYW1lLCBDb21t YW5kICoqIGNvbW1hbmRzLCBpbnQgd2VpZ2h0KQ0KK3sNCisJaWYgKGNvbW1h bmRzID09IE5VTEwpDQorCXsNCisJCWZwcmludGYoc3RkZXJyLCAiZW1wdHkg Y29tbWFuZHMgZm9yICVzXG4iLCBuYW1lKTsNCisJCWV4aXQoMSk7DQorCX0N CisNCisJaWYgKG51bV9zY3JpcHRzID49IE1BWF9TQ1JJUFRTKQ0KKwl7DQor CQlmcHJpbnRmKHN0ZGVyciwgImF0IG1vc3QgJWQgU1FMIHNjcmlwdHMgYXJl IGFsbG93ZWRcbiIsIE1BWF9TQ1JJUFRTKTsNCisJCWV4aXQoMSk7DQorCX0N CisNCisJc3FsX3NjcmlwdFtudW1fc2NyaXB0c10ubmFtZSA9IG5hbWU7DQor CXNxbF9zY3JpcHRbbnVtX3NjcmlwdHNdLndlaWdodCA9IHdlaWdodDsNCisJ c3FsX3NjcmlwdFtudW1fc2NyaXB0c10uY29tbWFuZHMgPSBjb21tYW5kczsN CisJaW5pdFN0YXRzKCYgc3FsX3NjcmlwdFtudW1fc2NyaXB0c10uc3RhdHMs IDAuMCk7DQorCW51bV9zY3JpcHRzKys7DQorfQ0KKw0KK3N0YXRpYyB2b2lk DQorcHJpbnRTaW1wbGVTdGF0cyhjaGFyICpwcmVmaXgsIFNpbXBsZVN0YXRz ICpzcykNCit7DQorCS8qIHByaW50IE5hTiBpZiBubyB0cmFuc2FjdGlvbnMg d2hlcmUgZXhlY3V0ZWQgKi8NCisJZG91YmxlIGxhdGVuY3kgPSBzcy0+c3Vt IC8gc3MtPmNvdW50Ow0KKwlkb3VibGUgc3RkZGV2ID0gc3FydChzcy0+c3Vt MiAvIHNzLT5jb3VudCAtIGxhdGVuY3kqbGF0ZW5jeSk7DQorCXByaW50Zigi JXMgYXZlcmFnZSA9ICUuM2YgbXNcbiIsIHByZWZpeCwgMC4wMDEgKiBsYXRl bmN5KTsNCisJcHJpbnRmKCIlcyBzdGRkZXYgPSAlLjNmIG1zXG4iLCBwcmVm aXgsIDAuMDAxICogc3RkZGV2KTsNCit9DQorDQogLyogcHJpbnQgb3V0IHJl c3VsdHMgKi8NCiBzdGF0aWMgdm9pZA0KLXByaW50UmVzdWx0cyhpbnQgdHR5 cGUsIGludDY0IG5vcm1hbF94YWN0cywgaW50IG5jbGllbnRzLA0KLQkJCSBU U3RhdGUgKnRocmVhZHMsIGludCBudGhyZWFkcywNCi0JCQkgaW5zdHJfdGlt ZSB0b3RhbF90aW1lLCBpbnN0cl90aW1lIGNvbm5fdG90YWxfdGltZSwNCi0J CQkgaW50NjQgdG90YWxfbGF0ZW5jaWVzLCBpbnQ2NCB0b3RhbF9zcWxhdHMs DQotCQkJIGludDY0IHRocm90dGxlX2xhZywgaW50NjQgdGhyb3R0bGVfbGFn X21heCwNCi0JCQkgaW50NjQgdGhyb3R0bGVfbGF0ZW5jeV9za2lwcGVkLCBp bnQ2NCBsYXRlbmN5X2xhdGUpDQorcHJpbnRSZXN1bHRzKFRTdGF0ZSAqdGhy ZWFkcywgU3RhdHNEYXRhICp0b3RhbCwgaW5zdHJfdGltZSB0b3RhbF90aW1l LA0KKwkJCSBpbnN0cl90aW1lIGNvbm5fdG90YWxfdGltZSwgaW50IGxhdGVu Y3lfbGF0ZSkNCiB7DQogCWRvdWJsZQkJdGltZV9pbmNsdWRlLA0KIAkJCQl0 cHNfaW5jbHVkZSwNCiAJCQkJdHBzX2V4Y2x1ZGU7DQotCWNoYXIJICAgKnM7 DQogDQogCXRpbWVfaW5jbHVkZSA9IElOU1RSX1RJTUVfR0VUX0RPVUJMRSh0 b3RhbF90aW1lKTsNCi0JdHBzX2luY2x1ZGUgPSBub3JtYWxfeGFjdHMgLyB0 aW1lX2luY2x1ZGU7DQotCXRwc19leGNsdWRlID0gbm9ybWFsX3hhY3RzIC8g KHRpbWVfaW5jbHVkZSAtDQotCQkJCQkJKElOU1RSX1RJTUVfR0VUX0RPVUJM RShjb25uX3RvdGFsX3RpbWUpIC8gbnRocmVhZHMpKTsNCi0NCi0JaWYgKHR0 eXBlID09IDApDQotCQlzID0gIlRQQy1CIChzb3J0IG9mKSI7DQotCWVsc2Ug aWYgKHR0eXBlID09IDIpDQotCQlzID0gIlVwZGF0ZSBvbmx5IHBnYmVuY2hf YWNjb3VudHMiOw0KLQllbHNlIGlmICh0dHlwZSA9PSAxKQ0KLQkJcyA9ICJT RUxFQ1Qgb25seSI7DQotCWVsc2UNCi0JCXMgPSAiQ3VzdG9tIHF1ZXJ5IjsN CisJdHBzX2luY2x1ZGUgPSB0b3RhbC0+Y250IC8gdGltZV9pbmNsdWRlOw0K Kwl0cHNfZXhjbHVkZSA9IHRvdGFsLT5jbnQgLyAodGltZV9pbmNsdWRlIC0N CisJCQkJCQkoSU5TVFJfVElNRV9HRVRfRE9VQkxFKGNvbm5fdG90YWxfdGlt ZSkgLyBuY2xpZW50cykpOw0KIA0KLQlwcmludGYoInRyYW5zYWN0aW9uIHR5 cGU6ICVzXG4iLCBzKTsNCisJcHJpbnRmKCJ0cmFuc2FjdGlvbiB0eXBlOiAl c1xuIiwNCisJCSAgIG51bV9zY3JpcHRzID09IDE/IHNxbF9zY3JpcHRbMF0u bmFtZTogIm11bHRpcGxlIHNjcmlwdHMiKTsNCiAJcHJpbnRmKCJzY2FsaW5n IGZhY3RvcjogJWRcbiIsIHNjYWxlKTsNCiAJcHJpbnRmKCJxdWVyeSBtb2Rl OiAlc1xuIiwgUVVFUllNT0RFW3F1ZXJ5bW9kZV0pOw0KIAlwcmludGYoIm51 bWJlciBvZiBjbGllbnRzOiAlZFxuIiwgbmNsaWVudHMpOw0KQEAgLTI2MzUs NDkgKzI2OTcsMzggQEAgcHJpbnRSZXN1bHRzKGludCB0dHlwZSwgaW50NjQg bm9ybWFsX3hhY3RzLCBpbnQgbmNsaWVudHMsDQogCWlmIChkdXJhdGlvbiA8 PSAwKQ0KIAl7DQogCQlwcmludGYoIm51bWJlciBvZiB0cmFuc2FjdGlvbnMg cGVyIGNsaWVudDogJWRcbiIsIG54YWN0cyk7DQotCQlwcmludGYoIm51bWJl ciBvZiB0cmFuc2FjdGlvbnMgYWN0dWFsbHkgcHJvY2Vzc2VkOiAiIElOVDY0 X0ZPUk1BVCAiLyIgSU5UNjRfRk9STUFUICJcbiIsDQotCQkJICAgbm9ybWFs X3hhY3RzLCAoaW50NjQpIG54YWN0cyAqIG5jbGllbnRzKTsNCisJCXByaW50 ZigibnVtYmVyIG9mIHRyYW5zYWN0aW9ucyBhY3R1YWxseSBwcm9jZXNzZWQ6 ICJJTlQ2NF9GT1JNQVQiLyVkXG4iLA0KKwkJCSAgIHRvdGFsLT5jbnQsIG54 YWN0cyAqIG5jbGllbnRzKTsNCiAJfQ0KIAllbHNlDQogCXsNCiAJCXByaW50 ZigiZHVyYXRpb246ICVkIHNcbiIsIGR1cmF0aW9uKTsNCi0JCXByaW50Zigi bnVtYmVyIG9mIHRyYW5zYWN0aW9ucyBhY3R1YWxseSBwcm9jZXNzZWQ6ICIg SU5UNjRfRk9STUFUICJcbiIsDQotCQkJICAgbm9ybWFsX3hhY3RzKTsNCisJ CXByaW50ZigibnVtYmVyIG9mIHRyYW5zYWN0aW9ucyBhY3R1YWxseSBwcm9j ZXNzZWQ6ICJJTlQ2NF9GT1JNQVQiXG4iLA0KKwkJCSAgIHRvdGFsLT5jbnQp Ow0KIAl9DQogDQogCS8qIFJlbWFpbmluZyBzdGF0cyBhcmUgbm9uc2Vuc2lj YWwgaWYgd2UgZmFpbGVkIHRvIGV4ZWN1dGUgYW55IHhhY3RzICovDQotCWlm IChub3JtYWxfeGFjdHMgPD0gMCkNCisJaWYgKHRvdGFsLT5jbnQgPD0gMCkN CiAJCXJldHVybjsNCiANCiAJaWYgKHRocm90dGxlX2RlbGF5ICYmIGxhdGVu Y3lfbGltaXQpDQotCQlwcmludGYoIm51bWJlciBvZiB0cmFuc2FjdGlvbnMg c2tpcHBlZDogIiBJTlQ2NF9GT1JNQVQgIiAoJS4zZiAlJSlcbiIsDQotCQkJ ICAgdGhyb3R0bGVfbGF0ZW5jeV9za2lwcGVkLA0KLQkJCSAgIDEwMC4wICog dGhyb3R0bGVfbGF0ZW5jeV9za2lwcGVkIC8gKHRocm90dGxlX2xhdGVuY3lf c2tpcHBlZCArIG5vcm1hbF94YWN0cykpOw0KKwkJcHJpbnRmKCJudW1iZXIg b2YgdHJhbnNhY3Rpb25zIHNraXBwZWQ6ICJJTlQ2NF9GT1JNQVQiICglLjNm ICUlKVxuIiwNCisJCQkgICB0b3RhbC0+c2tpcHBlZCwNCisJCQkgICAxMDAu MCAqIHRvdGFsLT5za2lwcGVkIC8gKHRvdGFsLT5za2lwcGVkICsgdG90YWwt PmNudCkpOw0KIA0KIAlpZiAobGF0ZW5jeV9saW1pdCkNCi0JCXByaW50Zigi bnVtYmVyIG9mIHRyYW5zYWN0aW9ucyBhYm92ZSB0aGUgJS4xZiBtcyBsYXRl bmN5IGxpbWl0OiAiIElOVDY0X0ZPUk1BVCAiICglLjNmICUlKVxuIiwNCisJ CXByaW50ZigibnVtYmVyIG9mIHRyYW5zYWN0aW9ucyBhYm92ZSB0aGUgJS4x ZiBtcyBsYXRlbmN5IGxpbWl0OiAlZCAoJS4zZiAlJSlcbiIsDQogCQkJICAg bGF0ZW5jeV9saW1pdCAvIDEwMDAuMCwgbGF0ZW5jeV9sYXRlLA0KLQkJICAg MTAwLjAgKiBsYXRlbmN5X2xhdGUgLyAodGhyb3R0bGVfbGF0ZW5jeV9za2lw cGVkICsgbm9ybWFsX3hhY3RzKSk7DQorCQkgICAxMDAuMCAqIGxhdGVuY3lf bGF0ZSAvICh0b3RhbC0+c2tpcHBlZCArIHRvdGFsLT5jbnQpKTsNCiANCiAJ aWYgKHRocm90dGxlX2RlbGF5IHx8IHByb2dyZXNzIHx8IGxhdGVuY3lfbGlt aXQpDQotCXsNCi0JCS8qIGNvbXB1dGUgYW5kIHNob3cgbGF0ZW5jeSBhdmVy YWdlIGFuZCBzdGFuZGFyZCBkZXZpYXRpb24gKi8NCi0JCWRvdWJsZQkJbGF0 ZW5jeSA9IDAuMDAxICogdG90YWxfbGF0ZW5jaWVzIC8gbm9ybWFsX3hhY3Rz Ow0KLQkJZG91YmxlCQlzcWxhdCA9IChkb3VibGUpIHRvdGFsX3NxbGF0cyAv IG5vcm1hbF94YWN0czsNCi0NCi0JCXByaW50ZigibGF0ZW5jeSBhdmVyYWdl OiAlLjNmIG1zXG4iDQotCQkJICAgImxhdGVuY3kgc3RkZGV2OiAlLjNmIG1z XG4iLA0KLQkJCSAgIGxhdGVuY3ksIDAuMDAxICogc3FydChzcWxhdCAtIDEw MDAwMDAuMCAqIGxhdGVuY3kgKiBsYXRlbmN5KSk7DQotCX0NCisJCXByaW50 U2ltcGxlU3RhdHMoImxhdGVuY3kiLCAmIHRvdGFsLT5sYXRlbmN5KTsNCiAJ ZWxzZQ0KLQl7DQogCQkvKiBvbmx5IGFuIGF2ZXJhZ2UgbGF0ZW5jeSBjb21w dXRlZCBmcm9tIHRoZSBkdXJhdGlvbiBpcyBhdmFpbGFibGUgKi8NCiAJCXBy aW50ZigibGF0ZW5jeSBhdmVyYWdlOiAlLjNmIG1zXG4iLA0KLQkJCSAgIDEw MDAuMCAqIGR1cmF0aW9uICogbmNsaWVudHMgLyBub3JtYWxfeGFjdHMpOw0K LQl9DQorCQkJICAgMTAwMC4wICogZHVyYXRpb24gKiBuY2xpZW50cyAvIHRv dGFsLT5jbnQpOw0KIA0KIAlpZiAodGhyb3R0bGVfZGVsYXkpDQotCXsNCiAJ CS8qDQogCQkgKiBSZXBvcnQgYXZlcmFnZSB0cmFuc2FjdGlvbiBsYWcgdW5k ZXIgcmF0ZSBsaW1pdCB0aHJvdHRsaW5nLiAgVGhpcw0KIAkJICogaXMgdGhl IGRlbGF5IGJldHdlZW4gc2NoZWR1bGVkIGFuZCBhY3R1YWwgc3RhcnQgdGlt ZXMgZm9yIHRoZQ0KQEAgLTI2ODUsNTMgKzI3MzYsNDQgQEAgcHJpbnRSZXN1 bHRzKGludCB0dHlwZSwgaW50NjQgbm9ybWFsX3hhY3RzLCBpbnQgbmNsaWVu dHMsDQogCQkgKiB0aGUgZGF0YWJhc2UgbG9hZCwgb3IgdGhlIFBvaXNzb24g dGhyb3R0bGluZyBwcm9jZXNzLg0KIAkJICovDQogCQlwcmludGYoInJhdGUg bGltaXQgc2NoZWR1bGUgbGFnOiBhdmcgJS4zZiAobWF4ICUuM2YpIG1zXG4i LA0KLQkJCSAgIDAuMDAxICogdGhyb3R0bGVfbGFnIC8gbm9ybWFsX3hhY3Rz LCAwLjAwMSAqIHRocm90dGxlX2xhZ19tYXgpOw0KLQl9DQorCQkJICAgMC4w MDEgKiB0b3RhbC0+bGFnLnN1bSAvIHRvdGFsLT5jbnQsIDAuMDAxICogdG90 YWwtPmxhZy5tYXgpOw0KIA0KIAlwcmludGYoInRwcyA9ICVmIChpbmNsdWRp bmcgY29ubmVjdGlvbnMgZXN0YWJsaXNoaW5nKVxuIiwgdHBzX2luY2x1ZGUp Ow0KIAlwcmludGYoInRwcyA9ICVmIChleGNsdWRpbmcgY29ubmVjdGlvbnMg ZXN0YWJsaXNoaW5nKVxuIiwgdHBzX2V4Y2x1ZGUpOw0KIA0KLQkvKiBSZXBv cnQgcGVyLWNvbW1hbmQgbGF0ZW5jaWVzICovDQotCWlmIChpc19sYXRlbmNp ZXMpDQorCS8qIFJlcG9ydCBwZXItZmlsZSBkYXRhICovDQorCWlmIChwZXJf c2NyaXB0X3N0YXRzKQ0KIAl7DQotCQlpbnQJCQlpOw0KKwkJaW50IGk7DQog DQotCQlmb3IgKGkgPSAwOyBpIDwgbnVtX2ZpbGVzOyBpKyspDQorCQlmb3Ig KGkgPSAwOyBpIDwgbnVtX3NjcmlwdHM7IGkrKykNCiAJCXsNCi0JCQlDb21t YW5kICAgKipjb21tYW5kczsNCisJCQlwcmludGYoIlNRTCBzY3JpcHQgJWQs IHdlaWdodCAlZDogJXNcbiINCisJCQkJICAgIiAtICJJTlQ2NF9GT1JNQVQi IHRyYW5zYWN0aW9ucyAoJS4xZiUlIG9mIHRvdGFsLCB0cHMgPSAlZilcbiIs DQorCQkJCSAgIGkrMSwgc3FsX3NjcmlwdFtpXS53ZWlnaHQsIHNxbF9zY3Jp cHRbaV0ubmFtZSwNCisJCQkJICAgc3FsX3NjcmlwdFtpXS5zdGF0cy5jbnQs DQorCQkJCSAgIDEwMC4wICogc3FsX3NjcmlwdFtpXS5zdGF0cy5jbnQgLyB0 b3RhbC0+Y250LA0KKwkJCQkgICBzcWxfc2NyaXB0W2ldLnN0YXRzLmNudCAv IHRpbWVfaW5jbHVkZSk7DQogDQotCQkJaWYgKG51bV9maWxlcyA+IDEpDQot CQkJCXByaW50Zigic3RhdGVtZW50IGxhdGVuY2llcyBpbiBtaWxsaXNlY29u ZHMsIGZpbGUgJWQ6XG4iLCBpICsgMSk7DQotCQkJZWxzZQ0KLQkJCQlwcmlu dGYoInN0YXRlbWVudCBsYXRlbmNpZXMgaW4gbWlsbGlzZWNvbmRzOlxuIik7 DQorCQkJaWYgKGxhdGVuY3lfbGltaXQpDQorCQkJCXByaW50ZigiIC0gbnVt YmVyIG9mIHRyYW5zYWN0aW9ucyBza2lwcGVkOiAiSU5UNjRfRk9STUFUIiAo JS4zZiUlKVxuIiwNCisJCQkJCSAgIHNxbF9zY3JpcHRbaV0uc3RhdHMuc2tp cHBlZCwNCisJCQkJCSAgIDEwMC4wICogc3FsX3NjcmlwdFtpXS5zdGF0cy5z a2lwcGVkIC8NCisJCQkJCSAgIChzcWxfc2NyaXB0W2ldLnN0YXRzLnNraXBw ZWQgKyBzcWxfc2NyaXB0W2ldLnN0YXRzLmNudCkpOw0KIA0KLQkJCWZvciAo Y29tbWFuZHMgPSBzcWxfZmlsZXNbaV07ICpjb21tYW5kcyAhPSBOVUxMOyBj b21tYW5kcysrKQ0KLQkJCXsNCi0JCQkJQ29tbWFuZCAgICAqY29tbWFuZCA9 ICpjb21tYW5kczsNCi0JCQkJaW50CQkJY251bSA9IGNvbW1hbmQtPmNvbW1h bmRfbnVtOw0KLQkJCQlkb3VibGUJCXRvdGFsX3RpbWU7DQotCQkJCWluc3Ry X3RpbWUJdG90YWxfZXhlY19lbGFwc2VkOw0KLQkJCQlpbnQJCQl0b3RhbF9l eGVjX2NvdW50Ow0KLQkJCQlpbnQJCQl0Ow0KLQ0KLQkJCQkvKiBBY2N1bXVs YXRlIHBlci10aHJlYWQgZGF0YSBmb3IgY29tbWFuZCAqLw0KLQkJCQlJTlNU Ul9USU1FX1NFVF9aRVJPKHRvdGFsX2V4ZWNfZWxhcHNlZCk7DQotCQkJCXRv dGFsX2V4ZWNfY291bnQgPSAwOw0KLQkJCQlmb3IgKHQgPSAwOyB0IDwgbnRo cmVhZHM7IHQrKykNCi0JCQkJew0KLQkJCQkJVFN0YXRlCSAgICp0aHJlYWQg PSAmdGhyZWFkc1t0XTsNCisJCQlwcmludFNpbXBsZVN0YXRzKCIgLSBsYXRl bmN5IiwgJiBzcWxfc2NyaXB0W2ldLnN0YXRzLmxhdGVuY3kpOw0KIA0KLQkJ CQkJSU5TVFJfVElNRV9BREQodG90YWxfZXhlY19lbGFwc2VkLA0KLQkJCQkJ CQkJICAgdGhyZWFkLT5leGVjX2VsYXBzZWRbY251bV0pOw0KLQkJCQkJdG90 YWxfZXhlY19jb3VudCArPSB0aHJlYWQtPmV4ZWNfY291bnRbY251bV07DQot CQkJCX0NCisJCQkvKiBSZXBvcnQgcGVyLWNvbW1hbmQgbGF0ZW5jaWVzICov DQorCQkJaWYgKGlzX2xhdGVuY2llcykNCisJCQl7DQorCQkJCUNvbW1hbmQg KiogY29tOw0KIA0KLQkJCQlpZiAodG90YWxfZXhlY19jb3VudCA+IDApDQot CQkJCQl0b3RhbF90aW1lID0gSU5TVFJfVElNRV9HRVRfTUlMTElTRUModG90 YWxfZXhlY19lbGFwc2VkKSAvIChkb3VibGUpIHRvdGFsX2V4ZWNfY291bnQ7 DQotCQkJCWVsc2UNCi0JCQkJCXRvdGFsX3RpbWUgPSAwLjA7DQorCQkJCXBy aW50ZigiIC0gcGVyIGNvbW1hbmQgbGF0ZW5jaWVzIGluIG1zOlxuIik7DQog DQotCQkJCXByaW50ZigiXHQlZlx0JXNcbiIsIHRvdGFsX3RpbWUsIGNvbW1h bmQtPmxpbmUpOw0KKwkJCQlmb3IgKGNvbSA9IHNxbF9zY3JpcHRbaV0uY29t bWFuZHM7ICpjb20gIT0gTlVMTDsgY29tKyspDQorCQkJCQlwcmludGYoIiAg ICUxMS4zZiAgJXNcbiIsDQorCQkJCQkJICAgMTAwMC4wICogKCpjb20pLT5z dGF0cy5zdW0gLyAoKmNvbSktPnN0YXRzLmNvdW50LA0KKwkJCQkJCSAgICgq Y29tKS0+bGluZSk7DQogCQkJfQ0KIAkJfQ0KIAl9DQpAQCAtMjc0Myw2ICsy Nzg1LDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpDQogew0KIAlz dGF0aWMgc3RydWN0IG9wdGlvbiBsb25nX29wdGlvbnNbXSA9IHsNCiAJCS8q IHN5c3RlbWF0aWMgbG9uZy9zaG9ydCBuYW1lZCBvcHRpb25zICovDQorCQl7 InRwYy1iIiwgbm9fYXJndW1lbnQsIE5VTEwsICdCJ30sDQogCQl7ImNsaWVu dCIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAnYyd9LA0KIAkJeyJjb25u ZWN0Iiwgbm9fYXJndW1lbnQsIE5VTEwsICdDJ30sDQogCQl7ImRlYnVnIiwg bm9fYXJndW1lbnQsIE5VTEwsICdkJ30sDQpAQCAtMjc1MywxMiArMjc5Niwx NCBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikNCiAJCXsiaW5pdGlh bGl6ZSIsIG5vX2FyZ3VtZW50LCBOVUxMLCAnaSd9LA0KIAkJeyJqb2JzIiwg cmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICdqJ30sDQogCQl7ImxvZyIsIG5v X2FyZ3VtZW50LCBOVUxMLCAnbCd9LA0KKwkJeyJsYXRlbmN5LWxpbWl0Iiwg cmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICdMJ30sDQogCQl7Im5vLXZhY3V1 bSIsIG5vX2FyZ3VtZW50LCBOVUxMLCAnbid9LA0KIAkJeyJwb3J0IiwgcmVx dWlyZWRfYXJndW1lbnQsIE5VTEwsICdwJ30sDQogCQl7InByb2dyZXNzIiwg cmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICdQJ30sDQogCQl7InByb3RvY29s IiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICdNJ30sDQogCQl7InF1aWV0 Iiwgbm9fYXJndW1lbnQsIE5VTEwsICdxJ30sDQogCQl7InJlcG9ydC1sYXRl bmNpZXMiLCBub19hcmd1bWVudCwgTlVMTCwgJ3InfSwNCisJCXsicmF0ZSIs IHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAnUid9LA0KIAkJeyJzY2FsZSIs IHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAncyd9LA0KIAkJeyJzZWxlY3Qt b25seSIsIG5vX2FyZ3VtZW50LCBOVUxMLCAnUyd9LA0KIAkJeyJza2lwLXNv bWUtdXBkYXRlcyIsIG5vX2FyZ3VtZW50LCBOVUxMLCAnTid9LA0KQEAgLTI3 NzMsMjYgKzI4MTgsMjAgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3Yp DQogCQl7InVubG9nZ2VkLXRhYmxlcyIsIG5vX2FyZ3VtZW50LCAmdW5sb2dn ZWRfdGFibGVzLCAxfSwNCiAJCXsic2FtcGxpbmctcmF0ZSIsIHJlcXVpcmVk X2FyZ3VtZW50LCBOVUxMLCA0fSwNCiAJCXsiYWdncmVnYXRlLWludGVydmFs IiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsIDV9LA0KLQkJeyJyYXRlIiwg cmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICdSJ30sDQotCQl7ImxhdGVuY3kt bGltaXQiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgJ0wnfSwNCiAJCXsi cHJvZ3Jlc3MtdGltZXN0YW1wIiwgbm9fYXJndW1lbnQsIE5VTEwsIDZ9LA0K IAkJe05VTEwsIDAsIE5VTEwsIDB9DQogCX07DQogDQogCWludAkJCWM7DQot CWludAkJCW5jbGllbnRzID0gMTsJLyogZGVmYXVsdCBudW1iZXIgb2Ygc2lt dWxhdGVkIGNsaWVudHMgKi8NCi0JaW50CQkJbnRocmVhZHMgPSAxOwkvKiBk ZWZhdWx0IG51bWJlciBvZiB0aHJlYWRzICovDQogCWludAkJCWlzX2luaXRf bW9kZSA9IDA7CQkvKiBpbml0aWFsaXplIG1vZGU/ICovDQogCWludAkJCWlz X25vX3ZhY3V1bSA9IDA7CQkvKiBubyB2YWN1dW0gYXQgYWxsIGJlZm9yZSB0 ZXN0aW5nPyAqLw0KIAlpbnQJCQlkb192YWN1dW1fYWNjb3VudHMgPSAwOyAv KiBkbyB2YWN1dW0gYWNjb3VudHMgYmVmb3JlIHRlc3Rpbmc/ICovDQotCWlu dAkJCXR0eXBlID0gMDsJCS8qIHRyYW5zYWN0aW9uIHR5cGUuIDA6IFRQQy1C LCAxOiBTRUxFQ1Qgb25seSwNCi0JCQkJCQkJCSAqIDI6IHNraXAgdXBkYXRl IG9mIGJyYW5jaGVzIGFuZCB0ZWxsZXJzICovDQogCWludAkJCW9wdGluZGV4 Ow0KLQljaGFyCSAgICpmaWxlbmFtZSA9IE5VTEw7DQogCWJvb2wJCXNjYWxl X2dpdmVuID0gZmFsc2U7DQogDQogCWJvb2wJCWJlbmNobWFya2luZ19vcHRp b25fc2V0ID0gZmFsc2U7DQogCWJvb2wJCWluaXRpYWxpemF0aW9uX29wdGlv bl9zZXQgPSBmYWxzZTsNCisJYm9vbAkJaW50ZXJuYWxfc2NyaXB0X3VzZWQg PSBmYWxzZTsNCiANCiAJQ1N0YXRlCSAgICpzdGF0ZTsJCQkvKiBzdGF0dXMg b2YgY2xpZW50cyAqLw0KIAlUU3RhdGUJICAgKnRocmVhZHM7CQkvKiBhcnJh eSBvZiB0aHJlYWQgKi8NCkBAIC0yODAwLDEzICsyODM5LDEwIEBAIG1haW4o aW50IGFyZ2MsIGNoYXIgKiphcmd2KQ0KIAlpbnN0cl90aW1lCXN0YXJ0X3Rp bWU7CQkvKiBzdGFydCB1cCB0aW1lICovDQogCWluc3RyX3RpbWUJdG90YWxf dGltZTsNCiAJaW5zdHJfdGltZQljb25uX3RvdGFsX3RpbWU7DQotCWludDY0 CQl0b3RhbF94YWN0cyA9IDA7DQotCWludDY0CQl0b3RhbF9sYXRlbmNpZXMg PSAwOw0KLQlpbnQ2NAkJdG90YWxfc3FsYXRzID0gMDsNCi0JaW50NjQJCXRo cm90dGxlX2xhZyA9IDA7DQotCWludDY0CQl0aHJvdHRsZV9sYWdfbWF4ID0g MDsNCi0JaW50NjQJCXRocm90dGxlX2xhdGVuY3lfc2tpcHBlZCA9IDA7DQog CWludDY0CQlsYXRlbmN5X2xhdGUgPSAwOw0KKwlTdGF0c0RhdGEJc3RhdHM7 DQorCWludAkJCXdlaWdodDsNCisJY2hhcgkgICAqZGVzYzsNCiANCiAJaW50 CQkJaTsNCiAJaW50CQkJbmNsaWVudHNfZGVhbHQ7DQpAQCAtMjg1Miw3ICsy ODg4LDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpDQogCXN0YXRl ID0gKENTdGF0ZSAqKSBwZ19tYWxsb2Moc2l6ZW9mKENTdGF0ZSkpOw0KIAlt ZW1zZXQoc3RhdGUsIDAsIHNpemVvZihDU3RhdGUpKTsNCiANCi0Jd2hpbGUg KChjID0gZ2V0b3B0X2xvbmcoYXJnYywgYXJndiwgImloOm52cDpkcVNOYzpq OkNyczp0OlQ6VTpsZjpEOkY6TTpQOlI6TDoiLCBsb25nX29wdGlvbnMsICZv cHRpbmRleCkpICE9IC0xKQ0KKwl3aGlsZSAoKGMgPSBnZXRvcHRfbG9uZyhh cmdjLCBhcmd2LCAiaWg6bnZwOmRxYjpTTmM6ajpDcnM6dDpUOlU6bGY6RDpG Ok06UDpSOkw6IiwgbG9uZ19vcHRpb25zLCAmb3B0aW5kZXgpKSAhPSAtMSkN CiAJew0KIAkJc3dpdGNoIChjKQ0KIAkJew0KQEAgLTI4NzQsMTQgKzI5MTAs NiBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikNCiAJCQljYXNlICdk JzoNCiAJCQkJZGVidWcrKzsNCiAJCQkJYnJlYWs7DQotCQkJY2FzZSAnUyc6 DQotCQkJCXR0eXBlID0gMTsNCi0JCQkJYmVuY2htYXJraW5nX29wdGlvbl9z ZXQgPSB0cnVlOw0KLQkJCQlicmVhazsNCi0JCQljYXNlICdOJzoNCi0JCQkJ dHR5cGUgPSAyOw0KLQkJCQliZW5jaG1hcmtpbmdfb3B0aW9uX3NldCA9IHRy dWU7DQotCQkJCWJyZWFrOw0KIAkJCWNhc2UgJ2MnOg0KIAkJCQliZW5jaG1h cmtpbmdfb3B0aW9uX3NldCA9IHRydWU7DQogCQkJCW5jbGllbnRzID0gYXRv aShvcHRhcmcpOw0KQEAgLTI5MzMsNiArMjk2MSw3IEBAIG1haW4oaW50IGFy Z2MsIGNoYXIgKiphcmd2KQ0KIAkJCQlicmVhazsNCiAJCQljYXNlICdyJzoN CiAJCQkJYmVuY2htYXJraW5nX29wdGlvbl9zZXQgPSB0cnVlOw0KKwkJCQlw ZXJfc2NyaXB0X3N0YXRzID0gdHJ1ZTsNCiAJCQkJaXNfbGF0ZW5jaWVzID0g dHJ1ZTsNCiAJCQkJYnJlYWs7DQogCQkJY2FzZSAncyc6DQpAQCAtMjk4NCwx MiArMzAxMyw0MSBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikNCiAJ CQkJaW5pdGlhbGl6YXRpb25fb3B0aW9uX3NldCA9IHRydWU7DQogCQkJCXVz ZV9xdWlldCA9IHRydWU7DQogCQkJCWJyZWFrOw0KKwkJCQkvKiB3aGF0IHRv IHJ1biAqLw0KKwkJCWNhc2UgJ2InOg0KKw0KKwkJCQlpZiAoc3RyY21wKG9w dGFyZywgImxpc3QiKSA9PSAwKQ0KKwkJCQl7DQorCQkJCQlpbnQgaTsNCisJ CQkJCWZwcmludGYoc3Rkb3V0LCAiJWQgYnVpbHRpbiBzY3JpcHRzOiAiLCBO X0JVSUxUSU4pOw0KKwkJCQkJZm9yIChpID0gMDsgaSA8IE5fQlVJTFRJTjsg aSsrKQ0KKwkJCQkJCWZwcmludGYoc3Rkb3V0LCAiJXMgIiwgYnVpbHRpbl9z Y3JpcHRbaV0ubmFtZSk7DQorCQkJCQlmcHJpbnRmKHN0ZG91dCwgIlxuIik7 DQorCQkJCQlleGl0KDApOw0KKwkJCQl9DQorDQorCQkJCXdlaWdodCA9IGdl dFdlaWdodChvcHRhcmcpOw0KKwkJCQlhZGRTY3JpcHQoZGVzYywgcHJvY2Vz c19idWlsdGluKA0KKwkJCQkJCQkgIGZpbmRfYnVpbHRpbihvcHRhcmcsICZk ZXNjKSwgZGVzYyksIHdlaWdodCk7DQorCQkJCWJlbmNobWFya2luZ19vcHRp b25fc2V0ID0gdHJ1ZTsNCisJCQkJaW50ZXJuYWxfc2NyaXB0X3VzZWQgPSB0 cnVlOw0KKwkJCQlicmVhazsNCisJCQljYXNlICdTJzoNCisJCQkJYWRkU2Ny aXB0KGRlc2MsIHByb2Nlc3NfYnVpbHRpbigNCisJCQkJCQkJICBmaW5kX2J1 aWx0aW4oInNlbGVjdC1vbmx5IiwgJmRlc2MpLCBkZXNjKSwgMSk7DQorCQkJ CWJlbmNobWFya2luZ19vcHRpb25fc2V0ID0gdHJ1ZTsNCisJCQkJaW50ZXJu YWxfc2NyaXB0X3VzZWQgPSB0cnVlOw0KKwkJCQlicmVhazsNCisJCQljYXNl ICdOJzoNCisJCQkJYWRkU2NyaXB0KGRlc2MsIHByb2Nlc3NfYnVpbHRpbigN CisJCQkJCQkJICBmaW5kX2J1aWx0aW4oInNpbXBsZS11cGRhdGUiLCAmZGVz YyksIGRlc2MpLCAxKTsNCisJCQkJYmVuY2htYXJraW5nX29wdGlvbl9zZXQg PSB0cnVlOw0KKwkJCQlpbnRlcm5hbF9zY3JpcHRfdXNlZCA9IHRydWU7DQor CQkJCWJyZWFrOw0KIAkJCWNhc2UgJ2YnOg0KKwkJCQl3ZWlnaHQgPSBnZXRX ZWlnaHQob3B0YXJnKTsNCisJCQkJYWRkU2NyaXB0KG9wdGFyZywgcHJvY2Vz c19maWxlKG9wdGFyZyksIHdlaWdodCk7DQogCQkJCWJlbmNobWFya2luZ19v cHRpb25fc2V0ID0gdHJ1ZTsNCi0JCQkJdHR5cGUgPSAzOw0KLQkJCQlmaWxl bmFtZSA9IHBnX3N0cmR1cChvcHRhcmcpOw0KLQkJCQlpZiAocHJvY2Vzc19m aWxlKGZpbGVuYW1lKSA9PSBmYWxzZSB8fCAqc3FsX2ZpbGVzW251bV9maWxl cyAtIDFdID09IE5VTEwpDQotCQkJCQlleGl0KDEpOw0KIAkJCQlicmVhazsN CiAJCQljYXNlICdEJzoNCiAJCQkJew0KQEAgLTMwMjAsOSArMzA3OCw5IEBA IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQ0KIAkJCQlicmVhazsNCiAJ CQljYXNlICdNJzoNCiAJCQkJYmVuY2htYXJraW5nX29wdGlvbl9zZXQgPSB0 cnVlOw0KLQkJCQlpZiAobnVtX2ZpbGVzID4gMCkNCisJCQkJaWYgKG51bV9z Y3JpcHRzID4gMCkNCiAJCQkJew0KLQkJCQkJZnByaW50ZihzdGRlcnIsICJx dWVyeSBtb2RlICgtTSkgc2hvdWxkIGJlIHNwZWNpZmllZCBiZWZvcmUgYW55 IHRyYW5zYWN0aW9uIHNjcmlwdHMgKC1mKVxuIik7DQorCQkJCQlmcHJpbnRm KHN0ZGVyciwgInF1ZXJ5IG1vZGUgKC1NKSBzaG91bGQgYmUgc3BlY2lmaWVk IGJlZm9yZSBhbnkgdHJhbnNhY3Rpb24gc2NyaXB0cyAoLWYgb3IgLWIpXG4i KTsNCiAJCQkJCWV4aXQoMSk7DQogCQkJCX0NCiAJCQkJZm9yIChxdWVyeW1v ZGUgPSAwOyBxdWVyeW1vZGUgPCBOVU1fUVVFUllNT0RFOyBxdWVyeW1vZGUr KykNCkBAIC0zMTIzLDYgKzMxODEsMjMgQEAgbWFpbihpbnQgYXJnYywgY2hh ciAqKmFyZ3YpDQogCQl9DQogCX0NCiANCisJLyogc2V0IGRlZmF1bHQgc2Ny aXB0IGlmIG5vbmUgKi8NCisJaWYgKG51bV9zY3JpcHRzID09IDAgJiYgIWlu aXRpYWxpemF0aW9uX29wdGlvbl9zZXQpDQorCXsNCisJCWFkZFNjcmlwdChk ZXNjLCBwcm9jZXNzX2J1aWx0aW4oDQorCQkJCQkgIGZpbmRfYnVpbHRpbigi dHBjYi1saWtlIiwgJmRlc2MpLCBkZXNjKSwgMSk7DQorCQliZW5jaG1hcmtp bmdfb3B0aW9uX3NldCA9IHRydWU7DQorCQlpbnRlcm5hbF9zY3JpcHRfdXNl ZCA9IHRydWU7DQorCX0NCisNCisJLyogY29tcHV0ZSB0b3RhbF93ZWlnaHQg Ki8NCisJZm9yIChpID0gMDsgaSA8IG51bV9zY3JpcHRzOyBpKyspDQorCQl0 b3RhbF93ZWlnaHQgKz0gc3FsX3NjcmlwdFtpXS53ZWlnaHQ7DQorDQorCS8q IHNob3cgcGVyIHNjcmlwdCBzdGF0cyBpZiBzZXZlcmFsIHNjcmlwdHMgYXJl IHVzZWQgKi8NCisJaWYgKCFpbml0aWFsaXphdGlvbl9vcHRpb25fc2V0ICYm IG51bV9zY3JpcHRzID4gMSkNCisJCXBlcl9zY3JpcHRfc3RhdHMgPSB0cnVl Ow0KKw0KIAkvKg0KIAkgKiBEb24ndCBuZWVkIG1vcmUgdGhyZWFkcyB0aGFu IHRoZXJlIGFyZSBjbGllbnRzLiAgKFRoaXMgaXMgbm90IG1lcmVseSBhbg0K IAkgKiBvcHRpbWl6YXRpb247IHRocm90dGxlX2RlbGF5IGlzIGNhbGN1bGF0 ZWQgaW5jb3JyZWN0bHkgYmVsb3cgaWYgc29tZQ0KQEAgLTMyMDcsOCArMzI4 Miw2IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQ0KIAkgKiBjaGFu Z2VkIGFmdGVyIGZvcmsuDQogCSAqLw0KIAltYWluX3BpZCA9IChpbnQpIGdl dHBpZCgpOw0KLQlwcm9ncmVzc19uY2xpZW50cyA9IG5jbGllbnRzOw0KLQlw cm9ncmVzc19udGhyZWFkcyA9IG50aHJlYWRzOw0KIA0KIAlpZiAobmNsaWVu dHMgPiAxKQ0KIAl7DQpAQCAtMzI1MSw3ICszMzI0LDcgQEAgbWFpbihpbnQg YXJnYywgY2hhciAqKmFyZ3YpDQogCQlleGl0KDEpOw0KIAl9DQogDQotCWlm ICh0dHlwZSAhPSAzKQ0KKwlpZiAoaW50ZXJuYWxfc2NyaXB0X3VzZWQpDQog CXsNCiAJCS8qDQogCQkgKiBnZXQgdGhlIHNjYWxpbmcgZmFjdG9yIHRoYXQg c2hvdWxkIGJlIHNhbWUgYXMgY291bnQoKikgZnJvbQ0KQEAgLTMzMzUsMzEg KzM0MDgsNiBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikNCiAJSU5T VFJfVElNRV9TRVRfQ1VSUkVOVChzdGFydF90aW1lKTsNCiAJc3JhbmRvbSgo dW5zaWduZWQgaW50KSBJTlNUUl9USU1FX0dFVF9NSUNST1NFQyhzdGFydF90 aW1lKSk7DQogDQotCS8qIHByb2Nlc3MgYnVpbHRpbiBTUUwgc2NyaXB0cyAq Lw0KLQlzd2l0Y2ggKHR0eXBlKQ0KLQl7DQotCQljYXNlIDA6DQotCQkJc3Fs X2ZpbGVzWzBdID0gcHJvY2Vzc19idWlsdGluKHRwY19iLA0KLQkJCQkJCQkJ CQkgICAiPGJ1aWx0aW46IFRQQy1CIChzb3J0IG9mKT4iKTsNCi0JCQludW1f ZmlsZXMgPSAxOw0KLQkJCWJyZWFrOw0KLQ0KLQkJY2FzZSAxOg0KLQkJCXNx bF9maWxlc1swXSA9IHByb2Nlc3NfYnVpbHRpbihzZWxlY3Rfb25seSwNCi0J CQkJCQkJCQkJICAgIjxidWlsdGluOiBzZWxlY3Qgb25seT4iKTsNCi0JCQlu dW1fZmlsZXMgPSAxOw0KLQkJCWJyZWFrOw0KLQ0KLQkJY2FzZSAyOg0KLQkJ CXNxbF9maWxlc1swXSA9IHByb2Nlc3NfYnVpbHRpbihzaW1wbGVfdXBkYXRl LA0KLQkJCQkJCQkJCQkgICAiPGJ1aWx0aW46IHNpbXBsZSB1cGRhdGU+Iik7 DQotCQkJbnVtX2ZpbGVzID0gMTsNCi0JCQlicmVhazsNCi0NCi0JCWRlZmF1 bHQ6DQotCQkJYnJlYWs7DQotCX0NCi0NCiAJLyogc2V0IHVwIHRocmVhZCBk YXRhIHN0cnVjdHVyZXMgKi8NCiAJdGhyZWFkcyA9IChUU3RhdGUgKikgcGdf bWFsbG9jKHNpemVvZihUU3RhdGUpICogbnRocmVhZHMpOw0KIAluY2xpZW50 c19kZWFsdCA9IDA7DQpAQCAtMzM3NSwzMiArMzQyMywxMCBAQCBtYWluKGlu dCBhcmdjLCBjaGFyICoqYXJndikNCiAJCXRocmVhZC0+cmFuZG9tX3N0YXRl WzBdID0gcmFuZG9tKCk7DQogCQl0aHJlYWQtPnJhbmRvbV9zdGF0ZVsxXSA9 IHJhbmRvbSgpOw0KIAkJdGhyZWFkLT5yYW5kb21fc3RhdGVbMl0gPSByYW5k b20oKTsNCi0JCXRocmVhZC0+dGhyb3R0bGVfbGF0ZW5jeV9za2lwcGVkID0g MDsNCiAJCXRocmVhZC0+bGF0ZW5jeV9sYXRlID0gMDsNCisJCWluaXRTdGF0 cygmIHRocmVhZC0+c3RhdHMsIDAuMCk7DQogDQogCQluY2xpZW50c19kZWFs dCArPSB0aHJlYWQtPm5zdGF0ZTsNCi0NCi0JCWlmIChpc19sYXRlbmNpZXMp DQotCQl7DQotCQkJLyogUmVzZXJ2ZSBtZW1vcnkgZm9yIHRoZSB0aHJlYWQg dG8gc3RvcmUgcGVyLWNvbW1hbmQgbGF0ZW5jaWVzICovDQotCQkJaW50CQkJ dDsNCi0NCi0JCQl0aHJlYWQtPmV4ZWNfZWxhcHNlZCA9IChpbnN0cl90aW1l ICopDQotCQkJCXBnX21hbGxvYyhzaXplb2YoaW5zdHJfdGltZSkgKiBudW1f Y29tbWFuZHMpOw0KLQkJCXRocmVhZC0+ZXhlY19jb3VudCA9IChpbnQgKikN Ci0JCQkJcGdfbWFsbG9jKHNpemVvZihpbnQpICogbnVtX2NvbW1hbmRzKTsN Ci0NCi0JCQlmb3IgKHQgPSAwOyB0IDwgbnVtX2NvbW1hbmRzOyB0KyspDQot CQkJew0KLQkJCQlJTlNUUl9USU1FX1NFVF9aRVJPKHRocmVhZC0+ZXhlY19l bGFwc2VkW3RdKTsNCi0JCQkJdGhyZWFkLT5leGVjX2NvdW50W3RdID0gMDsN Ci0JCQl9DQotCQl9DQotCQllbHNlDQotCQl7DQotCQkJdGhyZWFkLT5leGVj X2VsYXBzZWQgPSBOVUxMOw0KLQkJCXRocmVhZC0+ZXhlY19jb3VudCA9IE5V TEw7DQotCQl9DQogCX0NCiANCiAJLyogYWxsIGNsaWVudHMgbXVzdCBiZSBh c3NpZ25lZCB0byBhIHRocmVhZCAqLw0KQEAgLTM0NDMsMTEgKzM0NjksMTEg QEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpDQogI2VuZGlmICAgLyog RU5BQkxFX1RIUkVBRF9TQUZFVFkgKi8NCiANCiAJLyogd2FpdCBmb3IgdGhy ZWFkcyBhbmQgYWNjdW11bGF0ZSByZXN1bHRzICovDQorCWluaXRTdGF0cygm IHN0YXRzLCAwLjApOw0KIAlJTlNUUl9USU1FX1NFVF9aRVJPKGNvbm5fdG90 YWxfdGltZSk7DQogCWZvciAoaSA9IDA7IGkgPCBudGhyZWFkczsgaSsrKQ0K IAl7DQogCQlUU3RhdGUJICAgKnRocmVhZCA9ICZ0aHJlYWRzW2ldOw0KLQkJ aW50CQkJajsNCiANCiAjaWZkZWYgRU5BQkxFX1RIUkVBRF9TQUZFVFkNCiAJ CWlmICh0aHJlYWRzW2ldLnRocmVhZCA9PSBJTlZBTElEX1RIUkVBRCkNCkBA IC0zNDYwLDIxICszNDg2LDEzIEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiph cmd2KQ0KIAkJKHZvaWQpIHRocmVhZFJ1bih0aHJlYWQpOw0KICNlbmRpZiAg IC8qIEVOQUJMRV9USFJFQURfU0FGRVRZICovDQogDQotCQkvKiB0aHJlYWQg bGV2ZWwgc3RhdHMgKi8NCi0JCXRocm90dGxlX2xhZyArPSB0aHJlYWQtPnRo cm90dGxlX2xhZzsNCi0JCXRocm90dGxlX2xhdGVuY3lfc2tpcHBlZCArPSB0 aHJlYWRzLT50aHJvdHRsZV9sYXRlbmN5X3NraXBwZWQ7DQorCQkvKiBhZ2dy ZWdhdGUgdGhyZWFkIGxldmVsIHN0YXRzICovDQorCQlhcHBlbmRTaW1wbGVT dGF0cygmIHN0YXRzLmxhdGVuY3ksICYgdGhyZWFkLT5zdGF0cy5sYXRlbmN5 KTsNCisJCWFwcGVuZFNpbXBsZVN0YXRzKCYgc3RhdHMubGFnLCAmIHRocmVh ZC0+c3RhdHMubGFnKTsNCisJCXN0YXRzLmNudCArPSB0aHJlYWQtPnN0YXRz LmNudDsNCisJCXN0YXRzLnNraXBwZWQgKz0gdGhyZWFkLT5zdGF0cy5za2lw cGVkOw0KIAkJbGF0ZW5jeV9sYXRlICs9IHRocmVhZC0+bGF0ZW5jeV9sYXRl Ow0KLQkJaWYgKHRocm90dGxlX2xhZ19tYXggPiB0aHJlYWQtPnRocm90dGxl X2xhZ19tYXgpDQotCQkJdGhyb3R0bGVfbGFnX21heCA9IHRocmVhZC0+dGhy b3R0bGVfbGFnX21heDsNCiAJCUlOU1RSX1RJTUVfQUREKGNvbm5fdG90YWxf dGltZSwgdGhyZWFkLT5jb25uX3RpbWUpOw0KLQ0KLQkJLyogY2xpZW50LWxl dmVsIHN0YXRzICovDQotCQlmb3IgKGogPSAwOyBqIDwgdGhyZWFkLT5uc3Rh dGU7IGorKykNCi0JCXsNCi0JCQl0b3RhbF94YWN0cyArPSB0aHJlYWQtPnN0 YXRlW2pdLmNudDsNCi0JCQl0b3RhbF9sYXRlbmNpZXMgKz0gdGhyZWFkLT5z dGF0ZVtqXS50eG5fbGF0ZW5jaWVzOw0KLQkJCXRvdGFsX3NxbGF0cyArPSB0 aHJlYWQtPnN0YXRlW2pdLnR4bl9zcWxhdHM7DQotCQl9DQogCX0NCiAJZGlz Y29ubmVjdF9hbGwoc3RhdGUsIG5jbGllbnRzKTsNCiANCkBAIC0zNDkwLDEw ICszNTA4LDcgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpDQogCSAq Lw0KIAlJTlNUUl9USU1FX1NFVF9DVVJSRU5UKHRvdGFsX3RpbWUpOw0KIAlJ TlNUUl9USU1FX1NVQlRSQUNUKHRvdGFsX3RpbWUsIHN0YXJ0X3RpbWUpOw0K LQlwcmludFJlc3VsdHModHR5cGUsIHRvdGFsX3hhY3RzLCBuY2xpZW50cywg dGhyZWFkcywgbnRocmVhZHMsDQotCQkJCSB0b3RhbF90aW1lLCBjb25uX3Rv dGFsX3RpbWUsIHRvdGFsX2xhdGVuY2llcywgdG90YWxfc3FsYXRzLA0KLQkJ CQkgdGhyb3R0bGVfbGFnLCB0aHJvdHRsZV9sYWdfbWF4LCB0aHJvdHRsZV9s YXRlbmN5X3NraXBwZWQsDQotCQkJCSBsYXRlbmN5X2xhdGUpOw0KKwlwcmlu dFJlc3VsdHModGhyZWFkcywgJnN0YXRzLCB0b3RhbF90aW1lLCBjb25uX3Rv dGFsX3RpbWUsIGxhdGVuY3lfbGF0ZSk7DQogDQogCXJldHVybiAwOw0KIH0N CkBAIC0zNTE0LDEzICszNTI5LDcgQEAgdGhyZWFkUnVuKHZvaWQgKmFyZykN CiAJaW50NjQJCXRocmVhZF9zdGFydCA9IElOU1RSX1RJTUVfR0VUX01JQ1JP U0VDKHRocmVhZC0+c3RhcnRfdGltZSk7DQogCWludDY0CQlsYXN0X3JlcG9y dCA9IHRocmVhZF9zdGFydDsNCiAJaW50NjQJCW5leHRfcmVwb3J0ID0gbGFz dF9yZXBvcnQgKyAoaW50NjQpIHByb2dyZXNzICogMTAwMDAwMDsNCi0JaW50 NjQJCWxhc3RfY291bnQgPSAwLA0KLQkJCQlsYXN0X2xhdHMgPSAwLA0KLQkJ CQlsYXN0X3NxbGF0cyA9IDAsDQotCQkJCWxhc3RfbGFncyA9IDAsDQotCQkJ CWxhc3Rfc2tpcHBlZCA9IDA7DQotDQotCUFnZ1ZhbHMJCWFnZ3M7DQorCVN0 YXRzRGF0YQlsYXN0LCBhZ2dzOw0KIA0KIAkvKg0KIAkgKiBJbml0aWFsaXpl IHRocm90dGxpbmcgcmF0ZSB0YXJnZXQgZm9yIGFsbCBvZiB0aGUgdGhyZWFk J3MgY2xpZW50cy4gIEl0DQpAQCAtMzUzMCw4ICszNTM5LDYgQEAgdGhyZWFk UnVuKHZvaWQgKmFyZykNCiAJICovDQogCUlOU1RSX1RJTUVfU0VUX0NVUlJF TlQoc3RhcnQpOw0KIAl0aHJlYWQtPnRocm90dGxlX3RyaWdnZXIgPSBJTlNU Ul9USU1FX0dFVF9NSUNST1NFQyhzdGFydCk7DQotCXRocmVhZC0+dGhyb3R0 bGVfbGFnID0gMDsNCi0JdGhyZWFkLT50aHJvdHRsZV9sYWdfbWF4ID0gMDsN CiANCiAJSU5TVFJfVElNRV9TRVRfWkVSTyh0aHJlYWQtPmNvbm5fdGltZSk7 DQogDQpAQCAtMzU2OCwxNyArMzU3NSwxOCBAQCB0aHJlYWRSdW4odm9pZCAq YXJnKQ0KIAlJTlNUUl9USU1FX1NFVF9DVVJSRU5UKHRocmVhZC0+Y29ubl90 aW1lKTsNCiAJSU5TVFJfVElNRV9TVUJUUkFDVCh0aHJlYWQtPmNvbm5fdGlt ZSwgdGhyZWFkLT5zdGFydF90aW1lKTsNCiANCi0JYWdnX3ZhbHNfaW5pdCgm YWdncywgdGhyZWFkLT5zdGFydF90aW1lKTsNCisJaW5pdFN0YXRzKCZhZ2dz LCBJTlNUUl9USU1FX0dFVF9ET1VCTEUodGhyZWFkLT5zdGFydF90aW1lKSk7 DQorCWxhc3QgPSBhZ2dzOw0KIA0KIAkvKiBzZW5kIHN0YXJ0IHVwIHF1ZXJp ZXMgaW4gYXN5bmMgbWFubmVyICovDQogCWZvciAoaSA9IDA7IGkgPCBuc3Rh dGU7IGkrKykNCiAJew0KIAkJQ1N0YXRlCSAgICpzdCA9ICZzdGF0ZVtpXTsN Ci0JCUNvbW1hbmQgICAqKmNvbW1hbmRzID0gc3FsX2ZpbGVzW3N0LT51c2Vf ZmlsZV07DQorCQlDb21tYW5kICAgKipjb21tYW5kcyA9IHNxbF9zY3JpcHRb c3QtPnVzZV9maWxlXS5jb21tYW5kczsNCiAJCWludAkJCXByZXZfZWNudCA9 IHN0LT5lY250Ow0KIA0KLQkJc3QtPnVzZV9maWxlID0gZ2V0cmFuZCh0aHJl YWQsIDAsIG51bV9maWxlcyAtIDEpOw0KLQkJaWYgKCFkb0N1c3RvbSh0aHJl YWQsIHN0LCAmdGhyZWFkLT5jb25uX3RpbWUsIGxvZ2ZpbGUsICZhZ2dzKSkN CisJCXN0LT51c2VfZmlsZSA9IG51bV9zY3JpcHRzPT0xPyAwOiBjaG9vc2VT Y3JpcHQodGhyZWFkKTsNCisJCWlmICghZG9DdXN0b20odGhyZWFkLCBzdCwg bG9nZmlsZSwgJmFnZ3MpKQ0KIAkJCXJlbWFpbnMtLTsJCQkvKiBJJ3ZlIGFi b3J0ZWQgKi8NCiANCiAJCWlmIChzdC0+ZWNudCA+IHByZXZfZWNudCAmJiBj b21tYW5kc1tzdC0+c3RhdGVdLT50eXBlID09IE1FVEFfQ09NTUFORCkNCkBA IC0zNjA1LDcgKzM2MTMsNyBAQCB0aHJlYWRSdW4odm9pZCAqYXJnKQ0KIAkJ Zm9yIChpID0gMDsgaSA8IG5zdGF0ZTsgaSsrKQ0KIAkJew0KIAkJCUNTdGF0 ZQkgICAqc3QgPSAmc3RhdGVbaV07DQotCQkJQ29tbWFuZCAgICoqY29tbWFu ZHMgPSBzcWxfZmlsZXNbc3QtPnVzZV9maWxlXTsNCisJCQlDb21tYW5kICAg Kipjb21tYW5kcyA9IHNxbF9zY3JpcHRbc3QtPnVzZV9maWxlXS5jb21tYW5k czsNCiAJCQlpbnQJCQlzb2NrOw0KIA0KIAkJCWlmIChzdC0+Y29uID09IE5V TEwpDQpAQCAtMzYxOCw3ICszNjI2LDcgQEAgdGhyZWFkUnVuKHZvaWQgKmFy ZykNCiAJCQkJew0KIAkJCQkJLyogaW50ZXJydXB0IGNsaWVudCB3aGljaCBo YXMgbm90IHN0YXJ0ZWQgYSB0cmFuc2FjdGlvbiAqLw0KIAkJCQkJcmVtYWlu cy0tOw0KLQkJCQkJc3QtPnNsZWVwaW5nID0gMDsNCisJCQkJCXN0LT5zbGVl cGluZyA9IGZhbHNlOw0KIAkJCQkJc3QtPnRocm90dGxpbmcgPSBmYWxzZTsN CiAJCQkJCVBRZmluaXNoKHN0LT5jb24pOw0KIAkJCQkJc3QtPmNvbiA9IE5V TEw7DQpAQCAtMzcxMSwxMyArMzcxOSwxMyBAQCB0aHJlYWRSdW4odm9pZCAq YXJnKQ0KIAkJZm9yIChpID0gMDsgaSA8IG5zdGF0ZTsgaSsrKQ0KIAkJew0K IAkJCUNTdGF0ZQkgICAqc3QgPSAmc3RhdGVbaV07DQotCQkJQ29tbWFuZCAg ICoqY29tbWFuZHMgPSBzcWxfZmlsZXNbc3QtPnVzZV9maWxlXTsNCisJCQlD b21tYW5kICAgKipjb21tYW5kcyA9IHNxbF9zY3JpcHRbc3QtPnVzZV9maWxl XS5jb21tYW5kczsNCiAJCQlpbnQJCQlwcmV2X2VjbnQgPSBzdC0+ZWNudDsN CiANCiAJCQlpZiAoc3QtPmNvbiAmJiAoRkRfSVNTRVQoUFFzb2NrZXQoc3Qt PmNvbiksICZpbnB1dF9tYXNrKQ0KIAkJCQkJCQl8fCBjb21tYW5kc1tzdC0+ c3RhdGVdLT50eXBlID09IE1FVEFfQ09NTUFORCkpDQogCQkJew0KLQkJCQlp ZiAoIWRvQ3VzdG9tKHRocmVhZCwgc3QsICZ0aHJlYWQtPmNvbm5fdGltZSwg bG9nZmlsZSwgJmFnZ3MpKQ0KKwkJCQlpZiAoIWRvQ3VzdG9tKHRocmVhZCwg c3QsIGxvZ2ZpbGUsICZhZ2dzKSkNCiAJCQkJCXJlbWFpbnMtLTsJLyogSSd2 ZSBhYm9ydGVkICovDQogCQkJfQ0KIA0KQEAgLTM3NDIsMTEgKzM3NTAsNyBA QCB0aHJlYWRSdW4odm9pZCAqYXJnKQ0KIAkJCWlmIChub3cgPj0gbmV4dF9y ZXBvcnQpDQogCQkJew0KIAkJCQkvKiBnZW5lcmF0ZSBhbmQgc2hvdyByZXBv cnQgKi8NCi0JCQkJaW50NjQJCWNvdW50ID0gMCwNCi0JCQkJCQkJbGF0cyA9 IDAsDQotCQkJCQkJCXNxbGF0cyA9IDAsDQotCQkJCQkJCWxhZ3MgPSAwLA0K LQkJCQkJCQlza2lwcGVkID0gMDsNCisJCQkJU3RhdHNEYXRhICAgY3VyOw0K IAkJCQlpbnQ2NAkJcnVuID0gbm93IC0gbGFzdF9yZXBvcnQ7DQogCQkJCWRv dWJsZQkJdHBzLA0KIAkJCQkJCQl0b3RhbF9ydW4sDQpAQCAtMzc2NywyNSAr Mzc3MSwyNCBAQCB0aHJlYWRSdW4odm9pZCAqYXJnKQ0KIAkJCQkgKiAoSWYg YSByZWFkIGZyb20gYSA2NC1iaXQgaW50ZWdlciBpcyBub3QgYXRvbWljLCB5 b3UgbWlnaHQNCiAJCQkJICogZ2V0IGEgInRvcm4iIHJlYWQgYW5kIGNvbXBs ZXRlbHkgYm9ndXMgbGF0ZW5jaWVzIHRob3VnaCEpDQogCQkJCSAqLw0KLQkJ CQlmb3IgKGkgPSAwOyBpIDwgcHJvZ3Jlc3NfbmNsaWVudHM7IGkrKykNCi0J CQkJew0KLQkJCQkJY291bnQgKz0gc3RhdGVbaV0uY250Ow0KLQkJCQkJbGF0 cyArPSBzdGF0ZVtpXS50eG5fbGF0ZW5jaWVzOw0KLQkJCQkJc3FsYXRzICs9 IHN0YXRlW2ldLnR4bl9zcWxhdHM7DQotCQkJCX0NCi0NCi0JCQkJZm9yIChp ID0gMDsgaSA8IHByb2dyZXNzX250aHJlYWRzOyBpKyspDQorCQkJCWluaXRT dGF0cygmIGN1ciwgMC4wKTsNCisJCQkJZm9yIChpID0gMDsgaSA8IG50aHJl YWRzOyBpKyspDQogCQkJCXsNCi0JCQkJCXNraXBwZWQgKz0gdGhyZWFkW2ld LnRocm90dGxlX2xhdGVuY3lfc2tpcHBlZDsNCi0JCQkJCWxhZ3MgKz0gdGhy ZWFkW2ldLnRocm90dGxlX2xhZzsNCisJCQkJCWFwcGVuZFNpbXBsZVN0YXRz KCYgY3VyLmxhdGVuY3ksICYgdGhyZWFkW2ldLnN0YXRzLmxhdGVuY3kpOw0K KwkJCQkJYXBwZW5kU2ltcGxlU3RhdHMoJiBjdXIubGFnLCAmIHRocmVhZFtp XS5zdGF0cy5sYWcpOw0KKwkJCQkJY3VyLmNudCArPSB0aHJlYWRbaV0uc3Rh dHMuY250Ow0KKwkJCQkJY3VyLnNraXBwZWQgKz0gdGhyZWFkW2ldLnN0YXRz LnNraXBwZWQ7DQogCQkJCX0NCiANCiAJCQkJdG90YWxfcnVuID0gKG5vdyAt IHRocmVhZF9zdGFydCkgLyAxMDAwMDAwLjA7DQotCQkJCXRwcyA9IDEwMDAw MDAuMCAqIChjb3VudCAtIGxhc3RfY291bnQpIC8gcnVuOw0KLQkJCQlsYXRl bmN5ID0gMC4wMDEgKiAobGF0cyAtIGxhc3RfbGF0cykgLyAoY291bnQgLSBs YXN0X2NvdW50KTsNCi0JCQkJc3FsYXQgPSAxLjAgKiAoc3FsYXRzIC0gbGFz dF9zcWxhdHMpIC8gKGNvdW50IC0gbGFzdF9jb3VudCk7DQorCQkJCXRwcyA9 IDEwMDAwMDAuMCAqIChjdXIuY250IC0gbGFzdC5jbnQpIC8gcnVuOw0KKwkJ CQlsYXRlbmN5ID0gMC4wMDEgKiAoY3VyLmxhdGVuY3kuc3VtIC0gbGFzdC5s YXRlbmN5LnN1bSkgLw0KKwkJCQkJKGN1ci5jbnQgLSBsYXN0LmNudCk7DQor CQkJCXNxbGF0ID0gMS4wICogKGN1ci5sYXRlbmN5LnN1bTIgLSBsYXN0Lmxh dGVuY3kuc3VtMikNCisJCQkJCS8gKGN1ci5jbnQgLSBsYXN0LmNudCk7DQog CQkJCXN0ZGV2ID0gMC4wMDEgKiBzcXJ0KHNxbGF0IC0gMTAwMDAwMC4wICog bGF0ZW5jeSAqIGxhdGVuY3kpOw0KLQkJCQlsYWcgPSAwLjAwMSAqIChsYWdz IC0gbGFzdF9sYWdzKSAvIChjb3VudCAtIGxhc3RfY291bnQpOw0KKwkJCQls YWcgPSAwLjAwMSAqIChjdXIubGFnLnN1bSAtIGxhc3QubGFnLnN1bSkgLw0K KwkJCQkJKGN1ci5jbnQgLSBsYXN0LmNudCk7DQogDQogCQkJCWlmIChwcm9n cmVzc190aW1lc3RhbXApDQogCQkJCQlzcHJpbnRmKHRidWYsICIlLjAzZiBz IiwNCkBAIC0zODAxLDE3ICszODA0LDEzIEBAIHRocmVhZFJ1bih2b2lkICph cmcpDQogCQkJCXsNCiAJCQkJCWZwcmludGYoc3RkZXJyLCAiLCBsYWcgJS4z ZiBtcyIsIGxhZyk7DQogCQkJCQlpZiAobGF0ZW5jeV9saW1pdCkNCi0JCQkJ CQlmcHJpbnRmKHN0ZGVyciwgIiwgIiBJTlQ2NF9GT1JNQVQgIiBza2lwcGVk IiwNCi0JCQkJCQkJCXNraXBwZWQgLSBsYXN0X3NraXBwZWQpOw0KKwkJCQkJ CWZwcmludGYoc3RkZXJyLCAiLCAiSU5UNjRfRk9STUFUIiBza2lwcGVkIiwN CisJCQkJCQkJCWN1ci5za2lwcGVkIC0gbGFzdC5za2lwcGVkKTsNCiAJCQkJ fQ0KIAkJCQlmcHJpbnRmKHN0ZGVyciwgIlxuIik7DQogDQotCQkJCWxhc3Rf Y291bnQgPSBjb3VudDsNCi0JCQkJbGFzdF9sYXRzID0gbGF0czsNCi0JCQkJ bGFzdF9zcWxhdHMgPSBzcWxhdHM7DQotCQkJCWxhc3RfbGFncyA9IGxhZ3M7 DQorCQkJCWxhc3QgPSBjdXI7DQogCQkJCWxhc3RfcmVwb3J0ID0gbm93Ow0K LQkJCQlsYXN0X3NraXBwZWQgPSBza2lwcGVkOw0KIA0KIAkJCQkvKg0KIAkJ CQkgKiBFbnN1cmUgdGhhdCB0aGUgbmV4dCByZXBvcnQgaXMgaW4gdGhlIGZ1 dHVyZSwgaW4gY2FzZQ0K --8323329-353480406-1443454997=:4252 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-353480406-1443454997=:4252--