Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtp (Exim 4.80) (envelope-from ) id 1ZK5w0-0003HU-7P for pgsql-hackers@arkaria.postgresql.org; Tue, 28 Jul 2015 14:32:48 +0000 Received: from localhost ([127.0.0.1] helo=postgresql.org) by malur.postgresql.org with smtp (Exim 4.84) (envelope-from ) id 1ZK5vz-00033o-6Y for pgsql-hackers@arkaria.postgresql.org; Tue, 28 Jul 2015 14:32:47 +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 1ZK5uS-0001Xe-Jx for pgsql-hackers@postgresql.org; Tue, 28 Jul 2015 14:31:12 +0000 Received: from boipeva.ensmp.fr ([194.214.158.136]) by magus.postgresql.org with esmtp (Exim 4.84) (envelope-from ) id 1ZK5uJ-0005O2-GF for pgsql-hackers@postgresql.org; Tue, 28 Jul 2015 14:31:11 +0000 Received: from cri.ensmp.fr (250.197.81.79.rev.sfr.net [79.81.197.250]) (authenticated bits=0) by boipeva.ensmp.fr (8.15.1/8.15.1/JMMC-22/Oct/2013) with ESMTPSA id t6SEUekv005228 (version=TLSv1 cipher=ECDHE-RSA-AES256-SHA bits=256 verify=NO); Tue, 28 Jul 2015 16:30:41 +0200 Date: Tue, 28 Jul 2015 16:30:38 +0200 (CEST) From: Fabien COELHO X-X-Sender: fabien@sto Reply-To: Fabien COELHO To: Robert Haas cc: Josh Berkus , "pgsql-hackers@postgresql.org" Subject: Re: pgbench stats per script & other stuff In-Reply-To: Message-ID: References: <55AEDDA4.8020009@agliodbs.com> <55AFD8C6.8010507@agliodbs.com> User-Agent: Alpine 2.10 (DEB 1266 2009-07-14) MIME-Version: 1.0 Content-Type: MULTIPART/MIXED; BOUNDARY="8323329-1289346998-1438093840=:3538" X-Miltered: at boipeva.ensmp.fr with ID 55B79210.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: 55B79210.000 from 250.197.81.79.rev.sfr.net/250.197.81.79.rev.sfr.net/79.81.197.250/cri.ensmp.fr/ X-Pg-Spam-Score: -3.3 (---) 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-1289346998-1438093840=:3538 Content-Type: TEXT/PLAIN; charset=US-ASCII; format=flowed v6 is just a rebase after a bug fix by Andres Freund. Also a small question: The patch currently displays pgbench scripts starting numbering at 0. Probably a little too geek... should start at 1? -- Fabien. --8323329-1289346998-1438093840=:3538 Content-Type: TEXT/x-diff; name=pgbench-script-stats-6.patch Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: attachment; filename=pgbench-script-stats-6.patch ZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvcGdiZW5jaC5zZ21sIGIv ZG9jL3NyYy9zZ21sL3JlZi9wZ2JlbmNoLnNnbWwNCmluZGV4IDI1MTdhM2Eu Ljk5NjcwZDQgMTAwNjQ0DQotLS0gYS9kb2Mvc3JjL3NnbWwvcmVmL3BnYmVu Y2guc2dtbA0KKysrIGIvZG9jL3NyYy9zZ21sL3JlZi9wZ2JlbmNoLnNnbWwN CkBAIC0yNjEsNiArMjYxLDIzIEBAIHBnYmVuY2ggPG9wdGlvbmFsPiA8cmVw 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+c2ltcGxlLXVwZGF0ZTwvPi4NCisgICAgICAgPC9wYXJhPg0KKyAg ICAgIDwvbGlzdGl0ZW0+DQorICAgICA8L3Zhcmxpc3RlbnRyeT4NCisNCiAN CiAgICAgIDx2YXJsaXN0ZW50cnk+DQogICAgICAgPHRlcm0+PG9wdGlvbj4t Yzwvb3B0aW9uPiA8cmVwbGFjZWFibGU+Y2xpZW50czwvPjwvdGVybT4NCkBA IC0zMDcsMTQgKzMyNCwxNSBAQCBwZ2JlbmNoIDxvcHRpb25hbD4gPHJlcGxh Y2VhYmxlPm9wdGlvbnM8Lz4gPC9vcHRpb25hbD4gPHJlcGxhY2VhYmxlPmRi bmFtZTwvPg0KICAgICAgPC92YXJsaXN0ZW50cnk+DQogDQogICAgICA8dmFy bGlzdGVudHJ5Pg0KLSAgICAgIDx0ZXJtPjxvcHRpb24+LWY8L29wdGlvbj4g PHJlcGxhY2VhYmxlPmZpbGVuYW1lPC8+PC90ZXJtPg0KLSAgICAgIDx0ZXJt PjxvcHRpb24+LS1maWxlPTwvb3B0aW9uPjxyZXBsYWNlYWJsZT5maWxlbmFt ZTwvPjwvdGVybT4NCisgICAgICA8dGVybT48b3B0aW9uPi1mPC8+IDxyZXBs YWNlYWJsZT5maWxlbmFtZVtAd2VpZ2h0XTwvPjwvdGVybT4NCisgICAgICA8 dGVybT48b3B0aW9uPi0tZmlsZT08Lz48cmVwbGFjZWFibGU+ZmlsZW5hbWVb QHdlaWdodF08Lz48L3Rlcm0+DQogICAgICAgPGxpc3RpdGVtPg0KICAgICAg ICA8cGFyYT4NCi0gICAgICAgIFJlYWQgdHJhbnNhY3Rpb24gc2NyaXB0IGZy b20gPHJlcGxhY2VhYmxlPmZpbGVuYW1lPC8+Lg0KKyAgICAgICAgQWRkIGEg dHJhbnNhY3Rpb24gc2NyaXB0IHJlYWQgZnJvbSA8cmVwbGFjZWFibGU+Zmls ZW5hbWU8Lz4gdG8NCisgICAgICAgIHRoZSBsaXN0IG9mIGV4ZWN1dGVkIHNj cmlwdHMuDQorICAgICAgICBBbiBvcHRpb25hbCBpbnRlZ2VyIHdlaWdodCBh ZnRlciA8bGl0ZXJhbD5APC8+IGFsbG93cyB0byBhZGp1c3QgdGhlDQorICAg ICAgICBwcm9iYWJpbGl0eSBvZiBkcmF3aW5nIHRoZSB0ZXN0Lg0KICAgICAg ICAgU2VlIGJlbG93IGZvciBkZXRhaWxzLg0KLSAgICAgICAgPG9wdGlvbj4t Tjwvb3B0aW9uPiwgPG9wdGlvbj4tUzwvb3B0aW9uPiwgYW5kIDxvcHRpb24+ LWY8L29wdGlvbj4NCi0gICAgICAgIGFyZSBtdXR1YWxseSBleGNsdXNpdmUu DQogICAgICAgIDwvcGFyYT4NCiAgICAgICA8L2xpc3RpdGVtPg0KICAgICAg PC92YXJsaXN0ZW50cnk+DQpAQCAtNDA0LDEwICs0MjIsNyBAQCBwZ2JlbmNo IDxvcHRpb25hbD4gPHJlcGxhY2VhYmxlPm9wdGlvbnM8Lz4gPC9vcHRpb25h bD4gPHJlcGxhY2VhYmxlPmRibmFtZTwvPg0KICAgICAgIDx0ZXJtPjxvcHRp b24+LS1za2lwLXNvbWUtdXBkYXRlczwvb3B0aW9uPjwvdGVybT4NCiAgICAg ICA8bGlzdGl0ZW0+DQogICAgICAgIDxwYXJhPg0KLSAgICAgICAgRG8gbm90 IHVwZGF0ZSA8c3RydWN0bmFtZT5wZ2JlbmNoX3RlbGxlcnM8Lz4gYW5kDQot ICAgICAgICA8c3RydWN0bmFtZT5wZ2JlbmNoX2JyYW5jaGVzPC8+Lg0KLSAg ICAgICAgVGhpcyB3aWxsIGF2b2lkIHVwZGF0ZSBjb250ZW50aW9uIG9uIHRo ZXNlIHRhYmxlcywgYnV0DQotICAgICAgICBpdCBtYWtlcyB0aGUgdGVzdCBj YXNlIGV2ZW4gbGVzcyBsaWtlIFRQQy1CLg0KKyAgICAgICAgU2hvcnRoYW5k IGZvciA8b3B0aW9uPi1iIHNpbXBsZS11cGRhdGVAMTwvPi4NCiAgICAgICAg PC9wYXJhPg0KICAgICAgIDwvbGlzdGl0ZW0+DQogICAgICA8L3Zhcmxpc3Rl bnRyeT4NCkBAIC00OTksOSArNTE0LDkgQEAgcGdiZW5jaCA8b3B0aW9uYWw+ IDxyZXBsYWNlYWJsZT5vcHRpb25zPC8+IDwvb3B0aW9uYWw+IDxyZXBsYWNl YWJsZT5kYm5hbWU8Lz4NCiAgICAgICAgIFJlcG9ydCB0aGUgc3BlY2lmaWVk IHNjYWxlIGZhY3RvciBpbiA8YXBwbGljYXRpb24+cGdiZW5jaDwvPidzDQog ICAgICAgICBvdXRwdXQuICBXaXRoIHRoZSBidWlsdC1pbiB0ZXN0cywgdGhp cyBpcyBub3QgbmVjZXNzYXJ5OyB0aGUNCiAgICAgICAgIGNvcnJlY3Qgc2Nh bGUgZmFjdG9yIHdpbGwgYmUgZGV0ZWN0ZWQgYnkgY291bnRpbmcgdGhlIG51 bWJlciBvZg0KLSAgICAgICAgcm93cyBpbiB0aGUgPHN0cnVjdG5hbWU+cGdi ZW5jaF9icmFuY2hlczwvPiB0YWJsZS4gIEhvd2V2ZXIsIHdoZW4gdGVzdGlu Zw0KLSAgICAgICAgY3VzdG9tIGJlbmNobWFya3MgKDxvcHRpb24+LWY8Lz4g b3B0aW9uKSwgdGhlIHNjYWxlIGZhY3Rvcg0KLSAgICAgICAgd2lsbCBiZSBy ZXBvcnRlZCBhcyAxIHVubGVzcyB0aGlzIG9wdGlvbiBpcyB1c2VkLg0KKyAg ICAgICAgcm93cyBpbiB0aGUgPHN0cnVjdG5hbWU+cGdiZW5jaF9icmFuY2hl czwvPiB0YWJsZS4NCisgICAgICAgIEhvd2V2ZXIsIHdoZW4gdGVzdGluZyBv bmx5IGN1c3RvbSBiZW5jaG1hcmtzICg8b3B0aW9uPi1mPC8+IG9wdGlvbiks DQorICAgICAgICB0aGUgc2NhbGUgZmFjdG9yIHdpbGwgYmUgcmVwb3J0ZWQg YXMgMSB1bmxlc3MgdGhpcyBvcHRpb24gaXMgdXNlZC4NCiAgICAgICAgPC9w YXJhPg0KICAgICAgIDwvbGlzdGl0ZW0+DQogICAgICA8L3Zhcmxpc3RlbnRy eT4NCkBAIC01MTEsNyArNTI2LDcgQEAgcGdiZW5jaCA8b3B0aW9uYWw+IDxy ZXBsYWNlYWJsZT5vcHRpb25zPC8+IDwvb3B0aW9uYWw+IDxyZXBsYWNlYWJs ZT5kYm5hbWU8Lz4NCiAgICAgICA8dGVybT48b3B0aW9uPi0tc2VsZWN0LW9u bHk8L29wdGlvbj48L3Rlcm0+DQogICAgICAgPGxpc3RpdGVtPg0KICAgICAg ICA8cGFyYT4NCi0gICAgICAgIFBlcmZvcm0gc2VsZWN0LW9ubHkgdHJhbnNh Y3Rpb25zIGluc3RlYWQgb2YgVFBDLUItbGlrZSB0ZXN0Lg0KKyAgICAgICAg U2hvcnRoYW5kIGZvciA8b3B0aW9uPi1iIHNlbGVjdC1vbmx5QDE8Lz4uDQog ICAgICAgIDwvcGFyYT4NCiAgICAgICA8L2xpc3RpdGVtPg0KICAgICAgPC92 YXJsaXN0ZW50cnk+DQpAQCAtNTY3LDYgKzU4MiwxNiBAQCBwZ2JlbmNoIDxv cHRpb25hbD4gPHJlcGxhY2VhYmxlPm9wdGlvbnM8Lz4gPC9vcHRpb25hbD4g PHJlcGxhY2VhYmxlPmRibmFtZTwvPg0KICAgICAgPC92YXJsaXN0ZW50cnk+ DQogDQogICAgICA8dmFybGlzdGVudHJ5Pg0KKyAgICAgIDx0ZXJtPjxvcHRp b24+LS1wZXItc2NyaXB0LXN0YXRzPC9vcHRpb24+PC90ZXJtPg0KKyAgICAg IDxsaXN0aXRlbT4NCisgICAgICAgPHBhcmE+DQorICAgICAgICBSZXBvcnQg c29tZSBzdGF0aXN0aWNzIHBlciBzY3JpcHQgcnVuIGJ5IHBnYmVuY2guDQor ICAgICAgIDwvcGFyYT4NCisgICAgICA8L2xpc3RpdGVtPg0KKyAgICAgPC92 YXJsaXN0ZW50cnk+DQorDQorDQorICAgICA8dmFybGlzdGVudHJ5Pg0KICAg ICAgIDx0ZXJtPjxvcHRpb24+LS1zYW1wbGluZy1yYXRlPTxyZXBsYWNlYWJs ZT5yYXRlPC8+PC9vcHRpb24+PC90ZXJtPg0KICAgICAgIDxsaXN0aXRlbT4N CiAgICAgICAgPHBhcmE+DQpAQCAtNjYxLDcgKzY4NiwyMCBAQCBwZ2JlbmNo IDxvcHRpb25hbD4gPHJlcGxhY2VhYmxlPm9wdGlvbnM8Lz4gPC9vcHRpb25h bD4gPHJlcGxhY2VhYmxlPmRibmFtZTwvPg0KICAgPHRpdGxlPldoYXQgaXMg dGhlIDxxdW90ZT5UcmFuc2FjdGlvbjwvPiBBY3R1YWxseSBQZXJmb3JtZWQg aW4gcGdiZW5jaD88L3RpdGxlPg0KIA0KICAgPHBhcmE+DQotICAgVGhlIGRl ZmF1bHQgdHJhbnNhY3Rpb24gc2NyaXB0IGlzc3VlcyBzZXZlbiBjb21tYW5k cyBwZXIgdHJhbnNhY3Rpb246DQorICAgUGdiZW5jaCBleGVjdXRlcyB0ZXN0 IHNjcmlwdHMgY2hvc2VuIHJhbmRvbWx5IGZyb20gYSBzcGVjaWZpZWQgbGlz dC4NCisgICBUaGV5IGluY2x1ZGUgYnVpbHQtaW4gc2NyaXB0cyB3aXRoIDxv cHRpb24+LWI8Lz4gYW5kDQorICAgdXNlci1wcm92aWRlZCBjdXN0b20gc2Ny aXB0cyB3aXRoIDxvcHRpb24+LWY8Lz4uDQorICAgRWFjaCBzY3JpcHQgbWF5 IGJlIGdpdmVuIGEgcmVsYXRpdmUgd2VpZ2h0IHNwZWNpZmllZCBhZnRlciBh DQorICAgPGxpdGVyYWw+QDwvPiBzbyBhcyB0byBjaGFuZ2UgaXRzIGRyYXdp bmcgcHJvYmFiaWxpdHkuDQorICAgVGhlIGRlZmF1bHQgd2VpZ2h0IGlzIDxs aXRlcmFsPjE8Lz4uDQorIDwvcGFyYT4NCisNCisgIDxwYXJhPg0KKyAgIFRo ZSBkZWZhdWx0IGJ1aWx0aW4gdHJhbnNhY3Rpb24gc2NyaXB0IChhbHNvIGlu dm9rZWQgd2l0aCA8b3B0aW9uPi1iIHRwY2ItbGlrZTwvPikNCisgICBpc3N1 ZXMgc2V2ZW4gY29tbWFuZHMgcGVyIHRyYW5zYWN0aW9uIG92ZXIgcmFuZG9t bHkgY2hvc2VuIDxsaXRlcmFsPmFpZDwvPiwNCisgICA8bGl0ZXJhbD50aWQ8 Lz4sIDxsaXRlcmFsPmJpZDwvPiBhbmQgPGxpdGVyYWw+YmFsYW5jZTwvPi4N CisgICBUaGUgc2NlbmFyaW8gaXMgaW5zcGlyZWQgYnkgdGhlIFRQQy1CIGJl bmNobWFyaywgYnV0IGlzIG5vdCBhY3R1YWxseSBUUEMtQiwNCisgICBoZW5j ZSB0aGUgbmFtZS4NCiAgIDwvcGFyYT4NCiANCiAgIDxvcmRlcmVkbGlzdD4N CkBAIC02NzUsOSArNzEzLDE1IEBAIHBnYmVuY2ggPG9wdGlvbmFsPiA8cmVw bGFjZWFibGU+b3B0aW9uczwvPiA8L29wdGlvbmFsPiA8cmVwbGFjZWFibGU+ ZGJuYW1lPC8+DQogICA8L29yZGVyZWRsaXN0Pg0KIA0KICAgPHBhcmE+DQot ICAgSWYgeW91IHNwZWNpZnkgPG9wdGlvbj4tTjwvPiwgc3RlcHMgNCBhbmQg NSBhcmVuJ3QgaW5jbHVkZWQgaW4gdGhlDQotICAgdHJhbnNhY3Rpb24uICBJ ZiB5b3Ugc3BlY2lmeSA8b3B0aW9uPi1TPC8+LCBvbmx5IHRoZSA8Y29tbWFu ZD5TRUxFQ1Q8Lz4gaXMNCi0gICBpc3N1ZWQuDQorICAgSWYgeW91IHNlbGVj dCB0aGUgPGxpdGVyYWw+c2ltcGxlLXVwZGF0ZTwvPiBidWlsdGluIChhbHNv IDxvcHRpb24+LU48Lz4pLA0KKyAgIHN0ZXBzIDQgYW5kIDUgYXJlbid0IGlu Y2x1ZGVkIGluIHRoZSB0cmFuc2FjdGlvbi4NCisgICBUaGlzIHdpbGwgYXZv aWQgdXBkYXRlIGNvbnRlbnRpb24gb24gdGhlc2UgdGFibGVzLCBidXQNCisg ICBpdCBtYWtlcyB0aGUgdGVzdCBjYXNlIGV2ZW4gbGVzcyBsaWtlIFRQQy1C Lg0KKyAgPC9wYXJhPg0KKw0KKyAgPHBhcmE+DQorICAgSWYgeW91IHNlbGVj dCB0aGUgPGxpdGVyYWw+c2VsZWN0LW9ubHk8Lz4gYnVpbHRpbiAoYWxzbyA8 b3B0aW9uPi1TPC8+KSwNCisgICBvbmx5IHRoZSA8Y29tbWFuZD5TRUxFQ1Q8 Lz4gaXMgaXNzdWVkLg0KICAgPC9wYXJhPg0KICA8L3JlZnNlY3QyPg0KIA0K QEAgLTY4OSwxMCArNzMzLDcgQEAgcGdiZW5jaCA8b3B0aW9uYWw+IDxyZXBs YWNlYWJsZT5vcHRpb25zPC8+IDwvb3B0aW9uYWw+IDxyZXBsYWNlYWJsZT5k Ym5hbWU8Lz4NCiAgICBiZW5jaG1hcmsgc2NlbmFyaW9zIGJ5IHJlcGxhY2lu ZyB0aGUgZGVmYXVsdCB0cmFuc2FjdGlvbiBzY3JpcHQNCiAgICAoZGVzY3Jp YmVkIGFib3ZlKSB3aXRoIGEgdHJhbnNhY3Rpb24gc2NyaXB0IHJlYWQgZnJv bSBhIGZpbGUNCiAgICAoPG9wdGlvbj4tZjwvb3B0aW9uPiBvcHRpb24pLiAg SW4gdGhpcyBjYXNlIGEgPHF1b3RlPnRyYW5zYWN0aW9uPC8+DQotICAgY291 bnRzIGFzIG9uZSBleGVjdXRpb24gb2YgYSBzY3JpcHQgZmlsZS4gIFlvdSBj YW4gZXZlbiBzcGVjaWZ5DQotICAgbXVsdGlwbGUgc2NyaXB0cyAobXVsdGlw bGUgPG9wdGlvbj4tZjwvb3B0aW9uPiBvcHRpb25zKSwgaW4gd2hpY2gNCi0g ICBjYXNlIGEgcmFuZG9tIG9uZSBvZiB0aGUgc2NyaXB0cyBpcyBjaG9zZW4g ZWFjaCB0aW1lIGEgY2xpZW50IHNlc3Npb24NCi0gICBzdGFydHMgYSBuZXcg dHJhbnNhY3Rpb24uDQorICAgY291bnRzIGFzIG9uZSBleGVjdXRpb24gb2Yg YSBzY3JpcHQgZmlsZS4NCiAgIDwvcGFyYT4NCiANCiAgIDxwYXJhPg0KZGlm ZiAtLWdpdCBhL3NyYy9iaW4vcGdiZW5jaC9wZ2JlbmNoLmMgYi9zcmMvYmlu L3BnYmVuY2gvcGdiZW5jaC5jDQppbmRleCAzYjhhODBmLi45OGE4OGY5IDEw MDY0NA0KLS0tIGEvc3JjL2Jpbi9wZ2JlbmNoL3BnYmVuY2guYw0KKysrIGIv c3JjL2Jpbi9wZ2JlbmNoL3BnYmVuY2guYw0KQEAgLTE2MiwxMSArMTYyLDEw IEBAIGJvb2wJCXVzZV9sb2c7CQkJLyogbG9nIHRyYW5zYWN0aW9uIGxhdGVu Y2llcyB0byBhIGZpbGUgKi8NCiBib29sCQl1c2VfcXVpZXQ7CQkJLyogcXVp ZXQgbG9nZ2luZyBvbnRvIHN0ZGVyciAqLw0KIGludAkJCWFnZ19pbnRlcnZh bDsJCS8qIGxvZyBhZ2dyZWdhdGVzIGluc3RlYWQgb2YgaW5kaXZpZHVhbA0K IAkJCQkJCQkJICogdHJhbnNhY3Rpb25zICovDQorYm9vbCAgICAgICAgcGVy X3NjcmlwdF9zdGF0cyA9IGZhbHNlOyAvKiB3aGV0aGVyIHRvIGNvbGxlY3Qg c3RhdHMgcGVyIHNjcmlwdCAqLw0KIGludAkJCXByb2dyZXNzID0gMDsJCS8q IHRocmVhZCBwcm9ncmVzcyByZXBvcnQgZXZlcnkgdGhpcyBzZWNvbmRzICov DQotaW50CQkJcHJvZ3Jlc3NfbmNsaWVudHMgPSAwOwkJLyogbnVtYmVyIG9m IGNsaWVudHMgZm9yIHByb2dyZXNzDQotCQkJCQkJCQkJCSAqIHJlcG9ydCAq Lw0KLWludAkJCXByb2dyZXNzX250aHJlYWRzID0gMDsJCS8qIG51bWJlciBv ZiB0aHJlYWRzIGZvciBwcm9ncmVzcw0KLQkJCQkJCQkJCQkgKiByZXBvcnQg Ki8NCitpbnQJCQluY2xpZW50cyA9IDE7CQkvKiBudW1iZXIgb2YgY2xpZW50 cyAqLw0KK2ludAkJCW50aHJlYWRzID0gMTsJICAgIC8qIG51bWJlciBvZiB0 aHJlYWRzICovDQogYm9vbAkJaXNfY29ubmVjdDsJCQkvKiBlc3RhYmxpc2gg Y29ubmVjdGlvbiBmb3IgZWFjaCB0cmFuc2FjdGlvbiAqLw0KIGJvb2wJCWlz X2xhdGVuY2llczsJCS8qIHJlcG9ydCBwZXItY29tbWFuZCBsYXRlbmNpZXMg Ki8NCiBpbnQJCQltYWluX3BpZDsJCQkvKiBtYWluIHByb2Nlc3MgaWQgdXNl ZCBpbiBsb2cgZmlsZW5hbWUgKi8NCkBAIC0xNzcsNiArMTc2LDggQEAgY2hh cgkgICAqbG9naW4gPSBOVUxMOw0KIGNoYXIJICAgKmRiTmFtZTsNCiBjb25z dCBjaGFyICpwcm9nbmFtZTsNCiANCisjZGVmaW5lIFdTRVAgJ0AnIC8qIHdl aWdodCBzZXBhcmF0b3IgKi8NCisNCiB2b2xhdGlsZSBib29sIHRpbWVyX2V4 Y2VlZGVkID0gZmFsc2U7CS8qIGZsYWcgZnJvbSBzaWduYWwgaGFuZGxlciAq Lw0KIA0KIC8qIHZhcmlhYmxlIGRlZmluaXRpb25zICovDQpAQCAtMTg2LDEz ICsxODcsMzkgQEAgdHlwZWRlZiBzdHJ1Y3QNCiAJY2hhcgkgICAqdmFsdWU7 CQkJLyogaXRzIHZhbHVlICovDQogfSBWYXJpYWJsZTsNCiANCi0jZGVmaW5l IE1BWF9GSUxFUwkJMTI4CQkvKiBtYXggbnVtYmVyIG9mIFNRTCBzY3JpcHQg ZmlsZXMgYWxsb3dlZCAqLw0KKyNkZWZpbmUgTUFYX1NDUklQVFMJCTEyOAkJ LyogbWF4IG51bWJlciBvZiBTUUwgc2NyaXB0cyBhbGxvd2VkICovDQogI2Rl ZmluZSBTSEVMTF9DT01NQU5EX1NJWkUJMjU2IC8qIG1heGltdW0gc2l6ZSBh bGxvd2VkIGZvciBzaGVsbCBjb21tYW5kICovDQogDQogLyoNCi0gKiBzdHJ1 Y3R1cmVzIHVzZWQgaW4gY3VzdG9tIHF1ZXJ5IG1vZGUNCisgKiBzaW1wbGUg ZGF0YSBzdHJ1Y3R1cmUgdG8ga2VlcCBzdGF0cyBhYm91dCBzb21ldGhpbmcu DQorICogcHJvYmFibHkgdGhlIGZpcnN0IHZhbHVlIHNob3VsZCBiZSBrZXB0 IGFuZCB1c2VkIGFzIGFuIG9mZnNldCBmb3INCisgKiBiZXR0ZXIgbnVtZXJp Y2FsIHN0YWJpbGl0eS4uLg0KKyAqLw0KK3R5cGVkZWYgc3RydWN0DQorew0K KwlpbnQ2NF90IGNvdW50OyAgICAvKiBob3cgbWFueSB2YWx1ZXMgd2hlcmUg ZW5jb3VudGVyZWQgKi8NCisJZG91YmxlIG1pbjsgICAvKiB0aGUgbWluaW11 bSBzZWVuICovDQorCWRvdWJsZSBtYXg7ICAgLyogdGhlIG1heGltdW0gc2Vl biAqLw0KKwlkb3VibGUgc3VtOyAgIC8qIHN1bSBvZiB2YWx1ZXMgKi8NCisJ ZG91YmxlIHN1bTI7ICAvKiBzdW0gb2Ygc3F1YXJlZCB2YWx1ZXMgKi8NCit9 IFNpbXBsZVN0YXRzOw0KKw0KKy8qIGRhdGEgc3RydWN0dXJlIHRvIGhvbGQg dmFyaW91cyBzdGF0aXN0aWNzLg0KKyAqIGl0IGlzIHVzZWQgZm9yIGludGVy dmFsIHN0YXRpc3RpY3MgYXMgd2VsbCBhcyBmaWxlIHN0YXRpc3RpY3MuDQog ICovDQordHlwZWRlZiBzdHJ1Y3QNCit7DQorCWxvbmcJCXN0YXJ0X3RpbWU7 CQkvKiB3aGVuIHRoZSBpbnRlcnZhbCBzdGFydHMsIGZvciBhZ2dyZWdhdGVz ICovDQorCWludDY0CQljbnQ7CQkJLyogbnVtYmVyIG9mIHRyYW5zYWN0aW9u cyAqLw0KKwlpbnQ2NAkJc2tpcHBlZDsJCS8qIG51bWJlciBvZiB0cmFuc2Fj dGlvbnMgc2tpcHBlZCB1bmRlciAtLXJhdGUNCisJCQkJCQkJCSAqIGFuZCAt LWxhdGVuY3ktbGltaXQgKi8NCisJU2ltcGxlU3RhdHMJbGF0ZW5jeTsNCisJ U2ltcGxlU3RhdHMJbGFnOw0KK30gU3RhdHNEYXRhOw0KIA0KKy8qDQorICog c3RydWN0dXJlcyB1c2VkIGluIGN1c3RvbSBxdWVyeSBtb2RlDQorICovDQog dHlwZWRlZiBzdHJ1Y3QNCiB7DQogCVBHY29ubgkgICAqY29uOwkJCS8qIGNv bm5lY3Rpb24gaGFuZGxlIHRvIERCICovDQpAQCAtMjAwLDIyICsyMjcsMjAg QEAgdHlwZWRlZiBzdHJ1Y3QNCiAJaW50CQkJc3RhdGU7CQkJLyogc3RhdGUg Tm8uICovDQogCWludAkJCWxpc3RlbjsJCQkvKiAwIGluZGljYXRlcyB0aGF0 IGFuIGFzeW5jIHF1ZXJ5IGhhcyBiZWVuDQogCQkJCQkJCQkgKiBzZW50ICov DQotCWludAkJCXNsZWVwaW5nOwkJLyogMSBpbmRpY2F0ZXMgdGhhdCB0aGUg Y2xpZW50IGlzIG5hcHBpbmcgKi8NCisJYm9vbAkJaXNfdGhyb3R0bGVkOwkv KiB3aGV0aGVyIHRyYW5zYWN0aW9uIHRocm90dGxpbmcgaXMgZG9uZSAqLw0K Kwlib29sCQlzbGVlcGluZzsJCS8qIHdoZXRoZXIgdGhlIGNsaWVudCBpcyBu YXBwaW5nICovDQogCWJvb2wJCXRocm90dGxpbmc7CQkvKiB3aGV0aGVyIG5h cCBpcyBmb3IgdGhyb3R0bGluZyAqLw0KIAlWYXJpYWJsZSAgICp2YXJpYWJs ZXM7CQkvKiBhcnJheSBvZiB2YXJpYWJsZSBkZWZpbml0aW9ucyAqLw0KIAlp bnQJCQludmFyaWFibGVzOw0KIAlpbnQ2NAkJdHhuX3NjaGVkdWxlZDsJLyog c2NoZWR1bGVkIHN0YXJ0IHRpbWUgb2YgdHJhbnNhY3Rpb24gKHVzZWMpICov DQogCWluc3RyX3RpbWUJdHhuX2JlZ2luOwkJLyogdXNlZCBmb3IgbWVhc3Vy aW5nIHNjaGVkdWxlIGxhZyB0aW1lcyAqLw0KIAlpbnN0cl90aW1lCXN0bXRf YmVnaW47CQkvKiB1c2VkIGZvciBtZWFzdXJpbmcgc3RhdGVtZW50IGxhdGVu Y2llcyAqLw0KLQlib29sCQlpc190aHJvdHRsZWQ7CS8qIHdoZXRoZXIgdHJh bnNhY3Rpb24gdGhyb3R0bGluZyBpcyBkb25lICovDQotCWludAkJCXVzZV9m aWxlOwkJLyogaW5kZXggaW4gc3FsX2ZpbGVzIGZvciB0aGlzIGNsaWVudCAq Lw0KLQlib29sCQlwcmVwYXJlZFtNQVhfRklMRVNdOw0KKwlpbnQJCQl1c2Vf ZmlsZTsJCS8qIGluZGV4IGluIHNxbF9zY3JpcHRzIGZvciB0aGlzIGNsaWVu dCAqLw0KKwlib29sCQlwcmVwYXJlZFtNQVhfU0NSSVBUU107IC8qIHdoZXRo ZXIgY2xpZW50IHByZXBhcmVkIHRoZSBzY3JpcHQgKi8NCiANCiAJLyogcGVy IGNsaWVudCBjb2xsZWN0ZWQgc3RhdHMgKi8NCi0JaW50CQkJY250OwkJCS8q IHhhY3RzIGNvdW50ICovDQorCWludDY0CQljbnQ7CQkJLyogdHJhbnNhY3Rp b24gY291bnQgKi8NCiAJaW50CQkJZWNudDsJCQkvKiBlcnJvciBjb3VudCAq Lw0KLQlpbnQ2NAkJdHhuX2xhdGVuY2llczsJLyogY3VtdWxhdGVkIGxhdGVu Y2llcyAqLw0KLQlpbnQ2NAkJdHhuX3NxbGF0czsJCS8qIGN1bXVsYXRlZCBz cXVhcmUgbGF0ZW5jaWVzICovDQogfSBDU3RhdGU7DQogDQogLyoNCkBAIC0y MjcsMTkgKzI1MiwxNCBAQCB0eXBlZGVmIHN0cnVjdA0KIAlwdGhyZWFkX3QJ dGhyZWFkOwkJCS8qIHRocmVhZCBoYW5kbGUgKi8NCiAJQ1N0YXRlCSAgICpz dGF0ZTsJCQkvKiBhcnJheSBvZiBDU3RhdGUgKi8NCiAJaW50CQkJbnN0YXRl OwkJCS8qIGxlbmd0aCBvZiBzdGF0ZVtdICovDQotCWluc3RyX3RpbWUJc3Rh cnRfdGltZTsJCS8qIHRocmVhZCBzdGFydCB0aW1lICovDQotCWluc3RyX3Rp bWUgKmV4ZWNfZWxhcHNlZDsJLyogdGltZSBzcGVudCBleGVjdXRpbmcgY21k cyAocGVyIENvbW1hbmQpICovDQotCWludAkJICAgKmV4ZWNfY291bnQ7CQkv KiBudW1iZXIgb2YgY21kIGV4ZWN1dGlvbnMgKHBlciBDb21tYW5kKSAqLw0K LQl1bnNpZ25lZCBzaG9ydCByYW5kb21fc3RhdGVbM107CQkvKiBzZXBhcmF0 ZSByYW5kb21uZXNzIGZvciBlYWNoIHRocmVhZCAqLw0KLQlpbnQ2NAkJdGhy b3R0bGVfdHJpZ2dlcjsJCS8qIHByZXZpb3VzL25leHQgdGhyb3R0bGluZyAo dXMpICovDQorCXVuc2lnbmVkIHNob3J0IHJhbmRvbV9zdGF0ZVszXTsJIC8q IHNlcGFyYXRlIHJhbmRvbW5lc3MgZm9yIGVhY2ggdGhyZWFkICovDQorCWlu dDY0CQl0aHJvdHRsZV90cmlnZ2VyOwkgLyogcHJldmlvdXMvbmV4dCB0aHJv dHRsaW5nICh1cykgKi8NCiANCiAJLyogcGVyIHRocmVhZCBjb2xsZWN0ZWQg c3RhdHMgKi8NCisJaW5zdHJfdGltZQlzdGFydF90aW1lOwkJLyogdGhyZWFk IHN0YXJ0IHRpbWUgKi8NCiAJaW5zdHJfdGltZQljb25uX3RpbWU7DQotCWlu dDY0CQl0aHJvdHRsZV9sYWc7CS8qIHRvdGFsIHRyYW5zYWN0aW9uIGxhZyBi ZWhpbmQgdGhyb3R0bGluZyAqLw0KLQlpbnQ2NAkJdGhyb3R0bGVfbGFnX21h eDsJCS8qIG1heCB0cmFuc2FjdGlvbiBsYWcgKi8NCi0JaW50NjQJCXRocm90 dGxlX2xhdGVuY3lfc2tpcHBlZDsJCS8qIGxhZ2dpbmcgdHJhbnNhY3Rpb25z DQotCQkJCQkJCQkJCQkJICogc2tpcHBlZCAqLw0KLQlpbnQ2NAkJbGF0ZW5j eV9sYXRlOwkvKiBsYXRlIHRyYW5zYWN0aW9ucyAqLw0KKwlTdGF0c0RhdGEg ICBzdGF0czsNCisJaW50NjQJCWxhdGVuY3lfbGF0ZTsJLyogZXhlY3V0ZWQg YnV0IGxhdGUgdHJhbnNhY3Rpb25zICovDQogfSBUU3RhdGU7DQogDQogI2Rl ZmluZSBJTlZBTElEX1RIUkVBRAkJKChwdGhyZWFkX3QpIDApDQpAQCAtMjcx LDM1ICsyOTEsNDEgQEAgdHlwZWRlZiBzdHJ1Y3QNCiAJY2hhcgkgICAqYXJn dltNQVhfQVJHU107IC8qIGNvbW1hbmQgd29yZCBsaXN0ICovDQogCWludAkJ CWNvbHNbTUFYX0FSR1NdOyAvKiBjb3JyZXNwb25kaW5nIGNvbHVtbiBzdGFy dGluZyBmcm9tIDEgKi8NCiAJUGdCZW5jaEV4cHIgKmV4cHI7CQkJLyogcGFy c2VkIGV4cHJlc3Npb24gKi8NCisJU2ltcGxlU3RhdHMJc3RhdHM7ICAgICAg ICAgIC8qIHRpbWUgc3BlbnQgaW4gdGhpcyBjb21tYW5kICovDQogfSBDb21t YW5kOw0KIA0KKy8qIFNRTCBzY3JpcHQgdG8gYmUgZXhlY3V0ZWQsIGVpdGhl ciBhIGZpbGUgb3IgYW4gaW50ZXJuYWwgc2NyaXB0DQorICovDQogdHlwZWRl ZiBzdHJ1Y3QNCiB7DQotDQotCWxvbmcJCXN0YXJ0X3RpbWU7CQkvKiB3aGVu IGRvZXMgdGhlIGludGVydmFsIHN0YXJ0ICovDQotCWludAkJCWNudDsJCQkv KiBudW1iZXIgb2YgdHJhbnNhY3Rpb25zICovDQotCWludAkJCXNraXBwZWQ7 CQkvKiBudW1iZXIgb2YgdHJhbnNhY3Rpb25zIHNraXBwZWQgdW5kZXIgLS1y YXRlDQotCQkJCQkJCQkgKiBhbmQgLS1sYXRlbmN5LWxpbWl0ICovDQotDQot CWRvdWJsZQkJbWluX2xhdGVuY3k7CS8qIG1pbi9tYXggbGF0ZW5jaWVzICov DQotCWRvdWJsZQkJbWF4X2xhdGVuY3k7DQotCWRvdWJsZQkJc3VtX2xhdGVu Y3k7CS8qIHN1bShsYXRlbmN5KSwgc3VtKGxhdGVuY3leMikgLSBmb3INCi0J CQkJCQkJCSAqIGVzdGltYXRlcyAqLw0KLQlkb3VibGUJCXN1bTJfbGF0ZW5j eTsNCi0NCi0JZG91YmxlCQltaW5fbGFnOw0KLQlkb3VibGUJCW1heF9sYWc7 DQotCWRvdWJsZQkJc3VtX2xhZzsJCS8qIHN1bShsYWcpICovDQotCWRvdWJs ZQkJc3VtMl9sYWc7CQkvKiBzdW0obGFnKmxhZykgKi8NCi19IEFnZ1ZhbHM7 DQotDQotc3RhdGljIENvbW1hbmQgKipzcWxfZmlsZXNbTUFYX0ZJTEVTXTsJ LyogU1FMIHNjcmlwdCBmaWxlcyAqLw0KLXN0YXRpYyBpbnQJbnVtX2ZpbGVz OwkJCS8qIG51bWJlciBvZiBzY3JpcHQgZmlsZXMgKi8NCisJY29uc3QgY2hh ciAqbmFtZTsNCisJaW50IHdlaWdodDsNCisJQ29tbWFuZCAqKmNvbW1hbmRz Ow0KKwlTdGF0c0RhdGEgc3RhdHM7DQorfSBTUUxTY3JpcHQ7DQorDQorc3Rh dGljIFNRTFNjcmlwdCBzcWxfc2NyaXB0W01BWF9TQ1JJUFRTXTsNCitzdGF0 aWMgaW50CW51bV9zY3JpcHRzOwkJLyogbnVtYmVyIG9mIHNjcmlwdCBpbiBz cWxfc2NyaXB0W10gKi8NCiBzdGF0aWMgaW50CW51bV9jb21tYW5kcyA9IDA7 CS8qIHRvdGFsIG51bWJlciBvZiBDb21tYW5kIHN0cnVjdHMgKi8NCitzdGF0 aWMgaW50ICB0b3RhbF93ZWlnaHQgPSAwOw0KKw0KIHN0YXRpYyBpbnQJZGVi dWcgPSAwOwkJCS8qIGRlYnVnIGZsYWcgKi8NCiANCi0vKiBkZWZhdWx0IHNj ZW5hcmlvICovDQotc3RhdGljIGNoYXIgKnRwY19iID0gew0KKy8qIEZ1bmN0 aW9uIHByb3RvdHlwZXMgKi8NCitzdGF0aWMgdm9pZCBzZXRhbGFybShpbnQg c2Vjb25kcyk7DQorc3RhdGljIHZvaWQgKnRocmVhZFJ1bih2b2lkICphcmcp Ow0KK3N0YXRpYyB2b2lkIGRvVHhTdGF0cyhUU3RhdGUqLCBDU3RhdGUqLCBp bnN0cl90aW1lKiwgYm9vbCwgRklMRSosIFN0YXRzRGF0YSopOw0KKw0KKy8q IERlZmluZSBidWlsdGluIHRlc3Qgc2NyaXB0cyAqLw0KKyNkZWZpbmUgTl9C VUlMVElOIDMNCitzdGF0aWMgc3RydWN0IHsNCisJY2hhciAqbmFtZTsgICAv KiB2ZXJ5IHNob3J0IG5hbWUgZm9yIC1iIC4uLiovDQorCWNoYXIgKmRlc2M7 ICAgLyogc2hvcnQgZGVzY3JpcHRpb24gKi8NCisJY2hhciAqc2NyaXB0OyAv KiBhY3R1YWwgcGdiZW5jaCBzY3JpcHQgKi8NCit9IGJ1aWx0aW5fc2NyaXB0 W10gPSB7DQorew0KKwkidHBjYi1saWtlIiwNCisJIjxidWlsdGluOiBUUEMt QiAoc29ydCBvZik+IiwNCiAJIlxcc2V0IG5icmFuY2hlcyAiIENwcEFzU3Ry aW5nMihuYnJhbmNoZXMpICIgKiA6c2NhbGVcbiINCiAJIlxcc2V0IG50ZWxs ZXJzICIgQ3BwQXNTdHJpbmcyKG50ZWxsZXJzKSAiICogOnNjYWxlXG4iDQog CSJcXHNldCBuYWNjb3VudHMgIiBDcHBBc1N0cmluZzIobmFjY291bnRzKSAi ICogOnNjYWxlXG4iDQpAQCAtMzE0LDEwICszNDAsMTAgQEAgc3RhdGljIGNo YXIgKnRwY19iID0gew0KIAkiVVBEQVRFIHBnYmVuY2hfYnJhbmNoZXMgU0VU IGJiYWxhbmNlID0gYmJhbGFuY2UgKyA6ZGVsdGEgV0hFUkUgYmlkID0gOmJp ZDtcbiINCiAJIklOU0VSVCBJTlRPIHBnYmVuY2hfaGlzdG9yeSAodGlkLCBi aWQsIGFpZCwgZGVsdGEsIG10aW1lKSBWQUxVRVMgKDp0aWQsIDpiaWQsIDph aWQsIDpkZWx0YSwgQ1VSUkVOVF9USU1FU1RBTVApO1xuIg0KIAkiRU5EO1xu Ig0KLX07DQotDQotLyogLU4gY2FzZSAqLw0KLXN0YXRpYyBjaGFyICpzaW1w bGVfdXBkYXRlID0gew0KK30sDQorew0KKwkic2ltcGxlLXVwZGF0ZSIsDQor CSI8YnVpbHRpbjogc2ltcGxlIHVwZGF0ZT4iLA0KIAkiXFxzZXQgbmJyYW5j aGVzICIgQ3BwQXNTdHJpbmcyKG5icmFuY2hlcykgIiAqIDpzY2FsZVxuIg0K IAkiXFxzZXQgbnRlbGxlcnMgIiBDcHBBc1N0cmluZzIobnRlbGxlcnMpICIg KiA6c2NhbGVcbiINCiAJIlxcc2V0IG5hY2NvdW50cyAiIENwcEFzU3RyaW5n MihuYWNjb3VudHMpICIgKiA6c2NhbGVcbiINCkBAIC0zMzAsMjEgKzM1Niwz MiBAQCBzdGF0aWMgY2hhciAqc2ltcGxlX3VwZGF0ZSA9IHsNCiAJIlNFTEVD VCBhYmFsYW5jZSBGUk9NIHBnYmVuY2hfYWNjb3VudHMgV0hFUkUgYWlkID0g OmFpZDtcbiINCiAJIklOU0VSVCBJTlRPIHBnYmVuY2hfaGlzdG9yeSAodGlk LCBiaWQsIGFpZCwgZGVsdGEsIG10aW1lKSBWQUxVRVMgKDp0aWQsIDpiaWQs IDphaWQsIDpkZWx0YSwgQ1VSUkVOVF9USU1FU1RBTVApO1xuIg0KIAkiRU5E O1xuIg0KLX07DQotDQotLyogLVMgY2FzZSAqLw0KLXN0YXRpYyBjaGFyICpz ZWxlY3Rfb25seSA9IHsNCit9LA0KK3sNCisJInNlbGVjdC1vbmx5IiwNCisJ IjxidWlsdGluOiBzZWxlY3Qgb25seT4iLA0KIAkiXFxzZXQgbmFjY291bnRz ICIgQ3BwQXNTdHJpbmcyKG5hY2NvdW50cykgIiAqIDpzY2FsZVxuIg0KIAki XFxzZXRyYW5kb20gYWlkIDEgOm5hY2NvdW50c1xuIg0KIAkiU0VMRUNUIGFi YWxhbmNlIEZST00gcGdiZW5jaF9hY2NvdW50cyBXSEVSRSBhaWQgPSA6YWlk O1xuIg0KLX07DQorfSB9Ow0KIA0KLS8qIEZ1bmN0aW9uIHByb3RvdHlwZXMg Ki8NCi1zdGF0aWMgdm9pZCBzZXRhbGFybShpbnQgc2Vjb25kcyk7DQotc3Rh dGljIHZvaWQgKnRocmVhZFJ1bih2b2lkICphcmcpOw0KK3N0YXRpYyBjaGFy ICoNCitmaW5kX2J1aWx0aW4oY29uc3QgY2hhciAqbmFtZSwgY2hhciAqKmRl c2MpDQorew0KKwlpbnQJCWxlbiA9IHN0cmxlbihuYW1lKSwgaTsNCisNCisJ Zm9yIChpID0gMDsgaSA8IE5fQlVJTFRJTjsgaSsrKQ0KKwl7DQorCQlpZiAo c3RybmNtcChidWlsdGluX3NjcmlwdFtpXS5uYW1lLCBuYW1lLCBsZW4pID09 IDApDQorCQl7DQorCQkJKmRlc2MgPSBidWlsdGluX3NjcmlwdFtpXS5kZXNj Ow0KKwkJCXJldHVybiBidWlsdGluX3NjcmlwdFtpXS5zY3JpcHQ7DQorCQl9 DQorCX0NCiANCi1zdGF0aWMgdm9pZCBkb0xvZyhUU3RhdGUgKnRocmVhZCwg Q1N0YXRlICpzdCwgRklMRSAqbG9nZmlsZSwgaW5zdHJfdGltZSAqbm93LA0K LQkgIEFnZ1ZhbHMgKmFnZywgYm9vbCBza2lwcGVkKTsNCisJZnByaW50Zihz dGRlcnIsICJubyBidWlsdGluIGZvdW5kIGZvciBcIiVzXCJcbiIsIG5hbWUp Ow0KKwlleGl0KDEpOw0KK30NCiANCiBzdGF0aWMgdm9pZA0KIHVzYWdlKHZv aWQpDQpAQCAtMzY0LDExICs0MDEsMTMgQEAgdXNhZ2Uodm9pZCkNCiAJICIg IC0tdGFibGVzcGFjZT1UQUJMRVNQQUNFICBjcmVhdGUgdGFibGVzIGluIHRo ZSBzcGVjaWZpZWQgdGFibGVzcGFjZVxuIg0KIAkJICAgIiAgLS11bmxvZ2dl ZC10YWJsZXMgICAgICAgIGNyZWF0ZSB0YWJsZXMgYXMgdW5sb2dnZWQgdGFi bGVzXG4iDQogCQkgICAiXG5CZW5jaG1hcmtpbmcgb3B0aW9uczpcbiINCisJ CSAgICIgIC1iLCAtLWJ1aWx0aW49TkFNRUBXICAgICBhZGQgd2VpZ2h0ZWQg YnVpdGluIHNjcmlwdCBhbW9uZyBcInRwY2ItbGlrZVwiXG4iDQorCQkgICAi ICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzaW1wbGUtdXBkYXRlXCIg YW5kIFwic2VsZWN0LW9ubHlcIi5cbiINCiAJCSAgICIgIC1jLCAtLWNsaWVu dD1OVU0gICAgICAgICBudW1iZXIgb2YgY29uY3VycmVudCBkYXRhYmFzZSBj bGllbnRzIChkZWZhdWx0OiAxKVxuIg0KIAkJICAgIiAgLUMsIC0tY29ubmVj dCAgICAgICAgICAgIGVzdGFibGlzaCBuZXcgY29ubmVjdGlvbiBmb3IgZWFj aCB0cmFuc2FjdGlvblxuIg0KIAkJICAgIiAgLUQsIC0tZGVmaW5lPVZBUk5B TUU9VkFMVUVcbiINCiAJICAiICAgICAgICAgICAgICAgICAgICAgICAgICAg ZGVmaW5lIHZhcmlhYmxlIGZvciB1c2UgYnkgY3VzdG9tIHNjcmlwdFxuIg0K LQkJICIgIC1mLCAtLWZpbGU9RklMRU5BTUUgICAgICByZWFkIHRyYW5zYWN0 aW9uIHNjcmlwdCBmcm9tIEZJTEVOQU1FXG4iDQorCQkgIiAgLWYsIC0tZmls ZT1GSUxFTkFNRUBXICAgIGFkZCB3ZWlnaHRlZCB0cmFuc2FjdGlvbiBzY3Jp cHQgZnJvbSBGSUxFTkFNRVxuIg0KIAkJICAgIiAgLWosIC0tam9icz1OVU0g ICAgICAgICAgIG51bWJlciBvZiB0aHJlYWRzIChkZWZhdWx0OiAxKVxuIg0K IAkJICAgIiAgLWwsIC0tbG9nICAgICAgICAgICAgICAgIHdyaXRlIHRyYW5z YWN0aW9uIHRpbWVzIHRvIGxvZyBmaWxlXG4iDQogCSIgIC1MLCAtLWxhdGVu Y3ktbGltaXQ9TlVNICBjb3VudCB0cmFuc2FjdGlvbnMgbGFzdGluZyBtb3Jl IHRoYW4gTlVNIG1zXG4iDQpAQCAtMzc2LDE3ICs0MTUsMTggQEAgdXNhZ2Uo dm9pZCkNCiAJCSAgICIgIC1NLCAtLXByb3RvY29sPXNpbXBsZXxleHRlbmRl ZHxwcmVwYXJlZFxuIg0KIAkJICAgIiAgICAgICAgICAgICAgICAgICAgICAg ICAgIHByb3RvY29sIGZvciBzdWJtaXR0aW5nIHF1ZXJpZXMgKGRlZmF1bHQ6 IHNpbXBsZSlcbiINCiAJCSAgICIgIC1uLCAtLW5vLXZhY3V1bSAgICAgICAg ICBkbyBub3QgcnVuIFZBQ1VVTSBiZWZvcmUgdGVzdHNcbiINCi0JCSAgICIg IC1OLCAtLXNraXAtc29tZS11cGRhdGVzICBza2lwIHVwZGF0ZXMgb2YgcGdi ZW5jaF90ZWxsZXJzIGFuZCBwZ2JlbmNoX2JyYW5jaGVzXG4iDQorCQkgICAi ICAtTiwgLS1za2lwLXNvbWUtdXBkYXRlcyAgc2FtZSBhcyBcIi1iIHNpbXBs ZS11cGRhdGVAMVwiXG4iDQogCQkgICAiICAtUCwgLS1wcm9ncmVzcz1OVU0g ICAgICAgc2hvdyB0aHJlYWQgcHJvZ3Jlc3MgcmVwb3J0IGV2ZXJ5IE5VTSBz ZWNvbmRzXG4iDQogCQkgICAiICAtciwgLS1yZXBvcnQtbGF0ZW5jaWVzICAg cmVwb3J0IGF2ZXJhZ2UgbGF0ZW5jeSBwZXIgY29tbWFuZFxuIg0KIAkJIiAg LVIsIC0tcmF0ZT1OVU0gICAgICAgICAgIHRhcmdldCByYXRlIGluIHRyYW5z YWN0aW9ucyBwZXIgc2Vjb25kXG4iDQogCQkgICAiICAtcywgLS1zY2FsZT1O VU0gICAgICAgICAgcmVwb3J0IHRoaXMgc2NhbGUgZmFjdG9yIGluIG91dHB1 dFxuIg0KLQkJICAgIiAgLVMsIC0tc2VsZWN0LW9ubHkgICAgICAgIHBlcmZv cm0gU0VMRUNULW9ubHkgdHJhbnNhY3Rpb25zXG4iDQorCQkgICAiICAtUywg LS1zZWxlY3Qtb25seSAgICAgICAgc2FtZSBhcyBcIi1iIHNlbGVjdC1vbmx5 QDFcIlxuIg0KIAkJICAgIiAgLXQsIC0tdHJhbnNhY3Rpb25zPU5VTSAgIG51 bWJlciBvZiB0cmFuc2FjdGlvbnMgZWFjaCBjbGllbnQgcnVucyAoZGVmYXVs dDogMTApXG4iDQogCQkgIiAgLVQsIC0tdGltZT1OVU0gICAgICAgICAgIGR1 cmF0aW9uIG9mIGJlbmNobWFyayB0ZXN0IGluIHNlY29uZHNcbiINCiAJCSAg ICIgIC12LCAtLXZhY3V1bS1hbGwgICAgICAgICB2YWN1dW0gYWxsIGZvdXIg c3RhbmRhcmQgdGFibGVzIGJlZm9yZSB0ZXN0c1xuIg0KIAkJICAgIiAgLS1h Z2dyZWdhdGUtaW50ZXJ2YWw9TlVNIGFnZ3JlZ2F0ZSBkYXRhIG92ZXIgTlVN IHNlY29uZHNcbiINCiAJCSAgICIgIC0tc2FtcGxpbmctcmF0ZT1OVU0gICAg ICBmcmFjdGlvbiBvZiB0cmFuc2FjdGlvbnMgdG8gbG9nIChlLmcuIDAuMDEg Zm9yIDElJSlcbiINCisJCSAgICIgIC0tcGVyLXNjcmlwdC1zdGF0cyAgICAg ICByZXBvcnQgcGVyLXNjcmlwdCBzdGF0aXN0aWNzXG4iDQogCQkgICAiXG5D b21tb24gb3B0aW9uczpcbiINCiAJCSAgICIgIC1kLCAtLWRlYnVnICAgICAg ICAgICAgICBwcmludCBkZWJ1Z2dpbmcgb3V0cHV0XG4iDQogCSAgIiAgLWgs IC0taG9zdD1IT1NUTkFNRSAgICAgIGRhdGFiYXNlIHNlcnZlciBob3N0IG9y IHNvY2tldCBkaXJlY3RvcnlcbiINCkBAIC01NzgsNiArNjE4LDQ5IEBAIGdl dFBvaXNzb25SYW5kKFRTdGF0ZSAqdGhyZWFkLCBpbnQ2NCBjZW50ZXIpDQog CXJldHVybiAoaW50NjQpICgtbG9nKHVuaWZvcm0pICogKChkb3VibGUpIGNl bnRlcikgKyAwLjUpOw0KIH0NCiANCitzdGF0aWMgdm9pZA0KK2luaXRTaW1w bGVTdGF0cyhTaW1wbGVTdGF0cyAqIHNzKQ0KK3sNCisJbWVtc2V0KHNzLCAw LCBzaXplb2YoU2ltcGxlU3RhdHMpKTsNCit9DQorDQorc3RhdGljIHZvaWQN Citkb1NpbXBsZVN0YXRzKFNpbXBsZVN0YXRzICpzcywgZG91YmxlIHZhbCkN Cit7DQorCWlmIChzcy0+Y291bnQgPT0gMCB8fCB2YWwgPCBzcy0+bWluKQ0K KwkJc3MtPm1pbiA9IHZhbDsNCisJaWYgKHNzLT5jb3VudCA9PSAwIHx8IHZh bCA+IHNzLT5tYXgpDQorCQlzcy0+bWF4ID0gdmFsOw0KKwlzcy0+Y291bnQg Kys7DQorCXNzLT5zdW0gKz0gdmFsOw0KKwlzcy0+c3VtMiArPSB2YWwgKiB2 YWw7DQorfQ0KKw0KK3N0YXRpYyB2b2lkDQorYXBwZW5kU2ltcGxlU3RhdHMo U2ltcGxlU3RhdHMgKmFjYywgU2ltcGxlU3RhdHMgKnNzKQ0KK3sNCisJaWYg KGFjYy0+Y291bnQgPT0gMCB8fCBzcy0+bWluIDwgYWNjLT5taW4pDQorCQlh Y2MtPm1pbiA9IHNzLT5taW47DQorCWlmIChhY2MtPmNvdW50ID09IDAgfHwg c3MtPm1heCA+IGFjYy0+bWF4KQ0KKwkJYWNjLT5tYXggPSBzcy0+bWF4Ow0K KwlhY2MtPmNvdW50ICs9IHNzLT5jb3VudDsNCisJYWNjLT5zdW0gKz0gc3Mt PnN1bTsNCisJYWNjLT5zdW0yICs9IHNzLT5zdW0yOw0KK30NCisNCitzdGF0 aWMgdm9pZA0KK2luaXRTdGF0cyhTdGF0c0RhdGEgKnNkLCBkb3VibGUgc3Rh cnRfdGltZSkNCit7DQorCXNkLT5jbnQgPSAwOw0KKwlzZC0+c2tpcHBlZCA9 IDA7DQorCWluaXRTaW1wbGVTdGF0cygmIHNkLT5sYXRlbmN5KTsNCisJaW5p dFNpbXBsZVN0YXRzKCYgc2QtPmxhZyk7DQorDQorCS8qIG5vdCBuZWNlc3Nh cmlseSBvdmVycmlkZW4/ICovDQorCWlmIChzdGFydF90aW1lKQ0KKwkJc2Qt PnN0YXJ0X3RpbWUgPSBzdGFydF90aW1lOw0KK30NCisNCiAvKiBjYWxsIFBR ZXhlYygpIGFuZCBleGl0KCkgb24gZmFpbHVyZSAqLw0KIHN0YXRpYyB2b2lk DQogZXhlY3V0ZVN0YXRlbWVudChQR2Nvbm4gKmNvbiwgY29uc3QgY2hhciAq c3FsKQ0KQEAgLTEwOTcsNTAgKzExODAsNDEgQEAgY2xpZW50RG9uZShDU3Rh dGUgKnN0LCBib29sIG9rKQ0KIAlyZXR1cm4gZmFsc2U7CQkJCS8qIGFsd2F5 cyBmYWxzZSAqLw0KIH0NCiANCi1zdGF0aWMgdm9pZA0KLWFnZ192YWxzX2lu aXQoQWdnVmFscyAqYWdncywgaW5zdHJfdGltZSBzdGFydCkNCitzdGF0aWMg aW50DQorY2hvb3NlU2NyaXB0KFRTdGF0ZSAqdGhyZWFkKQ0KIHsNCi0JLyog YmFzaWMgY291bnRlcnMgKi8NCi0JYWdncy0+Y250ID0gMDsJCQkJLyogbnVt YmVyIG9mIHRyYW5zYWN0aW9ucyAoaW5jbHVkZXMgc2tpcHBlZCkgKi8NCi0J YWdncy0+c2tpcHBlZCA9IDA7CQkJLyogeGFjdHMgc2tpcHBlZCB1bmRlciAt LXJhdGUgLS1sYXRlbmN5LWxpbWl0ICovDQorCWludCBpID0gMCwgdyA9IDAs IHdjID0gKGludCkgZ2V0cmFuZCh0aHJlYWQsIDAsIHRvdGFsX3dlaWdodCAt IDEpOw0KIA0KLQlhZ2dzLT5zdW1fbGF0ZW5jeSA9IDA7CQkvKiBTVU0obGF0 ZW5jeSkgKi8NCi0JYWdncy0+c3VtMl9sYXRlbmN5ID0gMDsJCS8qIFNVTShs YXRlbmN5KmxhdGVuY3kpICovDQorCWRvIHsNCisJCXcgKz0gc3FsX3Njcmlw dFtpKytdLndlaWdodDsNCisJfSB3aGlsZSAodyA8PSB3Yyk7DQogDQotCS8q IG1pbiBhbmQgbWF4IHRyYW5zYWN0aW9uIGR1cmF0aW9uICovDQotCWFnZ3Mt Pm1pbl9sYXRlbmN5ID0gMDsNCi0JYWdncy0+bWF4X2xhdGVuY3kgPSAwOw0K LQ0KLQkvKiBzY2hlZHVsZSBsYWcgY291bnRlcnMgKi8NCi0JYWdncy0+c3Vt X2xhZyA9IDA7DQotCWFnZ3MtPnN1bTJfbGFnID0gMDsNCi0JYWdncy0+bWlu X2xhZyA9IDA7DQotCWFnZ3MtPm1heF9sYWcgPSAwOw0KLQ0KLQkvKiBzdGFy dCBvZiB0aGUgY3VycmVudCBpbnRlcnZhbCAqLw0KLQlhZ2dzLT5zdGFydF90 aW1lID0gSU5TVFJfVElNRV9HRVRfRE9VQkxFKHN0YXJ0KTsNCisJcmV0dXJu IGkgLSAxOw0KIH0NCiANCiAvKiByZXR1cm4gZmFsc2UgaWZmIGNsaWVudCBz aG91bGQgYmUgZGlzY29ubmVjdGVkICovDQogc3RhdGljIGJvb2wNCi1kb0N1 c3RvbShUU3RhdGUgKnRocmVhZCwgQ1N0YXRlICpzdCwgaW5zdHJfdGltZSAq Y29ubl90aW1lLCBGSUxFICpsb2dmaWxlLCBBZ2dWYWxzICphZ2cpDQorZG9D dXN0b20oVFN0YXRlICp0aHJlYWQsIENTdGF0ZSAqc3QsIGluc3RyX3RpbWUg KmNvbm5fdGltZSwgRklMRSAqbG9nZmlsZSwgU3RhdHNEYXRhICphZ2cpDQog ew0KIAlQR3Jlc3VsdCAgICpyZXM7DQogCUNvbW1hbmQgICAqKmNvbW1hbmRz Ow0KIAlib29sCQl0cmFuc19uZWVkc190aHJvdHRsZSA9IGZhbHNlOw0KIAlp bnN0cl90aW1lCW5vdzsNCiANCit0b3A6DQogCS8qDQogCSAqIGdldHRpbWVv ZmRheSgpIGlzbid0IGZyZWUsIHNvIHdlIGdldCB0aGUgY3VycmVudCB0aW1l c3RhbXAgbGF6aWx5IHRoZQ0KIAkgKiBmaXJzdCB0aW1lIGl0J3MgbmVlZGVk LCBhbmQgcmV1c2UgdGhlIHNhbWUgdmFsdWUgdGhyb3VnaG91dCB0aGlzDQog CSAqIGZ1bmN0aW9uIGFmdGVyIHRoYXQuIFRoaXMgYWxzbyBlbnN1cmVzIHRo YXQgZS5nLiB0aGUgY2FsY3VsYXRlZCBsYXRlbmN5DQogCSAqIHJlcG9ydGVk IGluIHRoZSBsb2cgZmlsZSBhbmQgaW4gdGhlIHRvdGFscyBhcmUgdGhlIHNh bWUuIFplcm8gbWVhbnMNCiAJICogIm5vdCBzZXQgeWV0Ii4NCisJICoNCisJ ICogb24gbWV0YSBjb21tYW5kIHdlIGxvb3Agb3ZlciBhbmQgYWxzbyByZXNl dCBub3cgd2hpY2ggbWF5IGJlIHVzZWQgZm9yDQorCSAqIHBlci1jb21tYW5k IHN0YXRzLg0KIAkgKi8NCiAJSU5TVFJfVElNRV9TRVRfWkVSTyhub3cpOw0K IA0KLXRvcDoNCi0JY29tbWFuZHMgPSBzcWxfZmlsZXNbc3QtPnVzZV9maWxl XTsNCisJY29tbWFuZHMgPSBzcWxfc2NyaXB0W3N0LT51c2VfZmlsZV0uY29t bWFuZHM7DQogDQogCS8qDQogCSAqIEhhbmRsZSB0aHJvdHRsaW5nIG9uY2Ug cGVyIHRyYW5zYWN0aW9uIGJ5IHNsZWVwaW5nLiAgSXQgaXMgc2ltcGxlciB0 bw0KQEAgLTExNzYsMTggKzEyNTAsMTUgQEAgdG9wOg0KIAkJCW5vd191cyA9 IElOU1RSX1RJTUVfR0VUX01JQ1JPU0VDKG5vdyk7DQogCQkJd2hpbGUgKHRo cmVhZC0+dGhyb3R0bGVfdHJpZ2dlciA8IG5vd191cyAtIGxhdGVuY3lfbGlt aXQpDQogCQkJew0KLQkJCQl0aHJlYWQtPnRocm90dGxlX2xhdGVuY3lfc2tp cHBlZCsrOw0KLQ0KLQkJCQlpZiAobG9nZmlsZSkNCi0JCQkJCWRvTG9nKHRo cmVhZCwgc3QsIGxvZ2ZpbGUsICZub3csIGFnZywgdHJ1ZSk7DQotDQorCQkJ CWRvVHhTdGF0cyh0aHJlYWQsIHN0LCAgJm5vdywgdHJ1ZSwgbG9nZmlsZSwg YWdnKTsNCisJCQkJLyogbmV4dCByZW5kZXotdm91cyAqLw0KIAkJCQl3YWl0 ID0gZ2V0UG9pc3NvblJhbmQodGhyZWFkLCB0aHJvdHRsZV9kZWxheSk7DQog CQkJCXRocmVhZC0+dGhyb3R0bGVfdHJpZ2dlciArPSB3YWl0Ow0KIAkJCQlz dC0+dHhuX3NjaGVkdWxlZCA9IHRocmVhZC0+dGhyb3R0bGVfdHJpZ2dlcjsN CiAJCQl9DQogCQl9DQogDQotCQlzdC0+c2xlZXBpbmcgPSAxOw0KKwkJc3Qt PnNsZWVwaW5nID0gdHJ1ZTsNCiAJCXN0LT50aHJvdHRsaW5nID0gdHJ1ZTsN CiAJCXN0LT5pc190aHJvdHRsZWQgPSB0cnVlOw0KIAkJaWYgKGRlYnVnKQ0K QEAgLTExOTcsMjcgKzEyNjgsMTMgQEAgdG9wOg0KIA0KIAlpZiAoc3QtPnNs ZWVwaW5nKQ0KIAl7CQkJCQkJCS8qIGFyZSB3ZSBzbGVlcGluZz8gKi8NCi0J CWludDY0CQlub3dfdXM7DQotDQogCQlpZiAoSU5TVFJfVElNRV9JU19aRVJP KG5vdykpDQogCQkJSU5TVFJfVElNRV9TRVRfQ1VSUkVOVChub3cpOw0KLQkJ bm93X3VzID0gSU5TVFJfVElNRV9HRVRfTUlDUk9TRUMobm93KTsNCi0JCWlm IChzdC0+dHhuX3NjaGVkdWxlZCA8PSBub3dfdXMpDQotCQl7DQotCQkJc3Qt PnNsZWVwaW5nID0gMDsJLyogRG9uZSBzbGVlcGluZywgZ28gYWhlYWQgd2l0 aCBuZXh0IGNvbW1hbmQgKi8NCi0JCQlpZiAoc3QtPnRocm90dGxpbmcpDQot CQkJew0KLQkJCQkvKiBNZWFzdXJlIGxhZyBvZiB0aHJvdHRsZWQgdHJhbnNh Y3Rpb24gcmVsYXRpdmUgdG8gdGFyZ2V0ICovDQotCQkJCWludDY0CQlsYWcg PSBub3dfdXMgLSBzdC0+dHhuX3NjaGVkdWxlZDsNCi0NCi0JCQkJdGhyZWFk LT50aHJvdHRsZV9sYWcgKz0gbGFnOw0KLQkJCQlpZiAobGFnID4gdGhyZWFk LT50aHJvdHRsZV9sYWdfbWF4KQ0KLQkJCQkJdGhyZWFkLT50aHJvdHRsZV9s YWdfbWF4ID0gbGFnOw0KLQkJCQlzdC0+dGhyb3R0bGluZyA9IGZhbHNlOw0K LQkJCX0NCi0JCX0NCi0JCWVsc2UNCisJCWlmIChJTlNUUl9USU1FX0dFVF9N SUNST1NFQyhub3cpIDwgc3QtPnR4bl9zY2hlZHVsZWQpDQogCQkJcmV0dXJu IHRydWU7CQkvKiBTdGlsbCBzbGVlcGluZywgbm90aGluZyB0byBkbyBoZXJl ICovDQorCQkvKiBFbHNlIGRvbmUgc2xlZXBpbmcsIGdvIGFoZWFkIHdpdGgg bmV4dCBjb21tYW5kICovDQorCQlzdC0+c2xlZXBpbmcgPSBmYWxzZTsNCisJ CXN0LT50aHJvdHRsaW5nID0gZmFsc2U7DQogCX0NCiANCiAJaWYgKHN0LT5s aXN0ZW4pDQpAQCAtMTI0MSw0NyArMTI5OCwyNCBAQCB0b3A6DQogCQkgKi8N CiAJCWlmIChpc19sYXRlbmNpZXMpDQogCQl7DQotCQkJaW50CQkJY251bSA9 IGNvbW1hbmRzW3N0LT5zdGF0ZV0tPmNvbW1hbmRfbnVtOw0KLQ0KIAkJCWlm IChJTlNUUl9USU1FX0lTX1pFUk8obm93KSkNCiAJCQkJSU5TVFJfVElNRV9T RVRfQ1VSUkVOVChub3cpOw0KLQkJCUlOU1RSX1RJTUVfQUNDVU1fRElGRih0 aHJlYWQtPmV4ZWNfZWxhcHNlZFtjbnVtXSwNCi0JCQkJCQkJCSAgbm93LCBz dC0+c3RtdF9iZWdpbik7DQotCQkJdGhyZWFkLT5leGVjX2NvdW50W2NudW1d Kys7DQorDQorCQkJLyogYWx0aG91Z2ggYSBtdXRleCB3b3VsZCBtYWtlIHNl bnNlLCB0aGUgbGlrZWx5aG9vZCBvZiBhbiBpc3N1ZQ0KKwkJCSAqIGlzIHNt YWxsIGFuZCB0aGVzZSBhcmUgb25seSBzdGF0cyB3aGljaCBtYXkgYmUgc2xp Z2h0bHkgZmFsc2UNCisJCQkgKi8NCisJCQlkb1NpbXBsZVN0YXRzKCYgY29t bWFuZHNbc3QtPnN0YXRlXS0+c3RhdHMsDQorCQkJCQkJICBJTlNUUl9USU1F X0dFVF9ET1VCTEUobm93KSAtDQorCQkJCQkJICBJTlNUUl9USU1FX0dFVF9E T1VCTEUoc3QtPnN0bXRfYmVnaW4pKTsNCiAJCX0NCiANCiAJCS8qIHRyYW5z YWN0aW9uIGZpbmlzaGVkOiBjYWxjdWxhdGUgbGF0ZW5jeSBhbmQgbG9nIHRo ZSB0cmFuc2FjdGlvbiAqLw0KIAkJaWYgKGNvbW1hbmRzW3N0LT5zdGF0ZSAr IDFdID09IE5VTEwpDQogCQl7DQotCQkJLyogb25seSBjYWxjdWxhdGUgbGF0 ZW5jeSBpZiBhbiBvcHRpb24gaXMgdXNlZCB0aGF0IG5lZWRzIGl0ICovDQot CQkJaWYgKHByb2dyZXNzIHx8IHRocm90dGxlX2RlbGF5IHx8IGxhdGVuY3lf bGltaXQpDQotCQkJew0KLQkJCQlpbnQ2NAkJbGF0ZW5jeTsNCi0NCi0JCQkJ aWYgKElOU1RSX1RJTUVfSVNfWkVSTyhub3cpKQ0KLQkJCQkJSU5TVFJfVElN RV9TRVRfQ1VSUkVOVChub3cpOw0KLQ0KLQkJCQlsYXRlbmN5ID0gSU5TVFJf VElNRV9HRVRfTUlDUk9TRUMobm93KSAtIHN0LT50eG5fc2NoZWR1bGVkOw0K LQ0KLQkJCQlzdC0+dHhuX2xhdGVuY2llcyArPSBsYXRlbmN5Ow0KLQ0KLQkJ CQkvKg0KLQkJCQkgKiBYWFggSW4gYSBsb25nIGJlbmNobWFyayBydW4gb2Yg aGlnaC1sYXRlbmN5IHRyYW5zYWN0aW9ucywNCi0JCQkJICogdGhpcyBpbnQ2 NCBhZGRpdGlvbiBldmVudHVhbGx5IG92ZXJmbG93cy4gIEZvciBleGFtcGxl LCAxMDANCi0JCQkJICogdGhyZWFkcyBydW5uaW5nIDEwcyB0cmFuc2FjdGlv bnMgd2lsbCBvdmVyZmxvdyBpdCBpbiAyLjU2DQotCQkJCSAqIGhvdXJzLiAg V2l0aCBhIG1vcmUtdHlwaWNhbCBPTFRQIHdvcmtsb2FkIG9mIC4xcw0KLQkJ CQkgKiB0cmFuc2FjdGlvbnMsIG92ZXJmbG93IHdvdWxkIHRha2UgMjU2IGhv dXJzLg0KLQkJCQkgKi8NCi0JCQkJc3QtPnR4bl9zcWxhdHMgKz0gbGF0ZW5j eSAqIGxhdGVuY3k7DQotDQotCQkJCS8qIHJlY29yZCBvdmVyIHRoZSBsaW1p dCB0cmFuc2FjdGlvbnMgaWYgbmVlZGVkLiAqLw0KLQkJCQlpZiAobGF0ZW5j eV9saW1pdCAmJiBsYXRlbmN5ID4gbGF0ZW5jeV9saW1pdCkNCi0JCQkJCXRo cmVhZC0+bGF0ZW5jeV9sYXRlKys7DQotCQkJfQ0KLQ0KLQkJCS8qIHJlY29y ZCB0aGUgdGltZSBpdCB0b29rIGluIHRoZSBsb2cgKi8NCi0JCQlpZiAobG9n ZmlsZSkNCi0JCQkJZG9Mb2codGhyZWFkLCBzdCwgbG9nZmlsZSwgJm5vdywg YWdnLCBmYWxzZSk7DQorCQkJaWYgKHByb2dyZXNzIHx8IHRocm90dGxlX2Rl bGF5IHx8IGxhdGVuY3lfbGltaXQgfHwgcGVyX3NjcmlwdF9zdGF0cyB8fCBs b2dmaWxlKQ0KKwkJCQlkb1R4U3RhdHModGhyZWFkLCBzdCwgJm5vdywgZmFs c2UsIGxvZ2ZpbGUsIGFnZyk7DQorCQkJZWxzZQ0KKwkJCQl0aHJlYWQtPnN0 YXRzLmNudCArKzsNCiAJCX0NCiANCiAJCWlmIChjb21tYW5kc1tzdC0+c3Rh dGVdLT50eXBlID09IFNRTF9DT01NQU5EKQ0KQEAgLTEzMjQsOCArMTM1OCw5 IEBAIHRvcDoNCiAJCWlmIChjb21tYW5kc1tzdC0+c3RhdGVdID09IE5VTEwp DQogCQl7DQogCQkJc3QtPnN0YXRlID0gMDsNCi0JCQlzdC0+dXNlX2ZpbGUg PSAoaW50KSBnZXRyYW5kKHRocmVhZCwgMCwgbnVtX2ZpbGVzIC0gMSk7DQot CQkJY29tbWFuZHMgPSBzcWxfZmlsZXNbc3QtPnVzZV9maWxlXTsNCisJCQlz dC0+dXNlX2ZpbGUgPSBudW1fc2NyaXB0cz09MT8gMDogY2hvb3NlU2NyaXB0 KHRocmVhZCk7DQorDQorCQkJY29tbWFuZHMgPSBzcWxfc2NyaXB0W3N0LT51 c2VfZmlsZV0uY29tbWFuZHM7DQogCQkJc3QtPmlzX3Rocm90dGxlZCA9IGZh bHNlOw0KIA0KIAkJCS8qDQpAQCAtMTM2OCw3ICsxNDAzLDcgQEAgdG9wOg0K IAl9DQogDQogCS8qIFJlY29yZCB0cmFuc2FjdGlvbiBzdGFydCB0aW1lIHVu ZGVyIGxvZ2dpbmcsIHByb2dyZXNzIG9yIHRocm90dGxpbmcgKi8NCi0JaWYg KChsb2dmaWxlIHx8IHByb2dyZXNzIHx8IHRocm90dGxlX2RlbGF5IHx8IGxh dGVuY3lfbGltaXQpICYmIHN0LT5zdGF0ZSA9PSAwKQ0KKwlpZiAoKGxvZ2Zp bGUgfHwgcHJvZ3Jlc3MgfHwgdGhyb3R0bGVfZGVsYXkgfHwgbGF0ZW5jeV9s aW1pdCB8fCBwZXJfc2NyaXB0X3N0YXRzKSAmJiBzdC0+c3RhdGUgPT0gMCkN CiAJew0KIAkJSU5TVFJfVElNRV9TRVRfQ1VSUkVOVChzdC0+dHhuX2JlZ2lu KTsNCiANCkBAIC0xNjU2LDcgKzE2OTEsNyBAQCB0b3A6DQogDQogCQkJSU5T VFJfVElNRV9TRVRfQ1VSUkVOVChub3cpOw0KIAkJCXN0LT50eG5fc2NoZWR1 bGVkID0gSU5TVFJfVElNRV9HRVRfTUlDUk9TRUMobm93KSArIHVzZWM7DQot CQkJc3QtPnNsZWVwaW5nID0gMTsNCisJCQlzdC0+c2xlZXBpbmcgPSB0cnVl Ow0KIA0KIAkJCXN0LT5saXN0ZW4gPSAxOw0KIAkJfQ0KQEAgLTE2ODgsMjIg KzE3MjMsMzkgQEAgdG9wOg0KIAkJCWVsc2UJLyogc3VjY2VlZGVkICovDQog CQkJCXN0LT5saXN0ZW4gPSAxOw0KIAkJfQ0KKw0KKwkJLyogYWZ0ZXIgYSBt ZXRhIGNvbW1hbmQsIGltbWVkaWF0ZWx5IHByb2NlZWQgd2l0aCBuZXh0IGNv bW1hbmQgKi8NCiAJCWdvdG8gdG9wOw0KIAl9DQogDQogCXJldHVybiB0cnVl Ow0KIH0NCiANCitzdGF0aWMgdm9pZA0KK2RvU3RhdHMoU3RhdHNEYXRhICpz dGF0cywgYm9vbCBza2lwcGVkLCBkb3VibGUgbGF0LCBkb3VibGUgbGFnKQ0K K3sNCisJc3RhdHMtPmNudCArKzsNCisNCisJaWYgKHNraXBwZWQpDQorCQkv KiBubyBsYXRlbmN5IHRvIHJlY29yZCBvbiBza2lwcGVkIHRyYW5zYWN0aW9u cyAqLw0KKwkJc3RhdHMtPnNraXBwZWQgKys7DQorCWVsc2UNCisJew0KKwkJ ZG9TaW1wbGVTdGF0cygmIHN0YXRzLT5sYXRlbmN5LCBsYXQpOw0KKw0KKwkJ LyogYW5kIHBvc3NpYmx5IHRoZSBzYW1lIGZvciBzY2hlZHVsZSBsYWcgKi8N CisJCWlmICh0aHJvdHRsZV9kZWxheSkNCisJCQlkb1NpbXBsZVN0YXRzKCYg c3RhdHMtPmxhZywgbGFnKTsNCisJfQ0KK30NCisNCiAvKg0KICAqIHByaW50 IGxvZyBlbnRyeSBhZnRlciBjb21wbGV0aW5nIG9uZSB0cmFuc2FjdGlvbi4N CiAgKi8NCiBzdGF0aWMgdm9pZA0KLWRvTG9nKFRTdGF0ZSAqdGhyZWFkLCBD U3RhdGUgKnN0LCBGSUxFICpsb2dmaWxlLCBpbnN0cl90aW1lICpub3csIEFn Z1ZhbHMgKmFnZywNCi0JICBib29sIHNraXBwZWQpDQorZG9Mb2coVFN0YXRl ICp0aHJlYWQsIENTdGF0ZSAqc3QsIEZJTEUgKmxvZ2ZpbGUsIGluc3RyX3Rp bWUgKm5vdywNCisJICBTdGF0c0RhdGEgKmFnZywgYm9vbCBza2lwcGVkLCBk b3VibGUgbGF0ZW5jeSwgZG91YmxlIGxhZykNCiB7DQotCWRvdWJsZQkJbGFn Ow0KLQlkb3VibGUJCWxhdGVuY3k7DQotDQogCS8qDQogCSAqIFNraXAgdGhl IGxvZyBlbnRyeSBpZiBzYW1wbGluZyBpcyBlbmFibGVkIGFuZCB0aGlzIHJv dyBkb2Vzbid0IGJlbG9uZw0KIAkgKiB0byB0aGUgcmFuZG9tIHNhbXBsZS4N CkBAIC0xNzEyLDE1ICsxNzY0LDYgQEAgZG9Mb2coVFN0YXRlICp0aHJlYWQs IENTdGF0ZSAqc3QsIEZJTEUgKmxvZ2ZpbGUsIGluc3RyX3RpbWUgKm5vdywg QWdnVmFscyAqYWdnLA0KIAkJcGdfZXJhbmQ0OCh0aHJlYWQtPnJhbmRvbV9z dGF0ZSkgPiBzYW1wbGVfcmF0ZSkNCiAJCXJldHVybjsNCiANCi0JaWYgKElO U1RSX1RJTUVfSVNfWkVSTygqbm93KSkNCi0JCUlOU1RSX1RJTUVfU0VUX0NV UlJFTlQoKm5vdyk7DQotDQotCWxhdGVuY3kgPSAoZG91YmxlKSAoSU5TVFJf VElNRV9HRVRfTUlDUk9TRUMoKm5vdykgLSBzdC0+dHhuX3NjaGVkdWxlZCk7 DQotCWlmIChza2lwcGVkKQ0KLQkJbGFnID0gbGF0ZW5jeTsNCi0JZWxzZQ0K LQkJbGFnID0gKGRvdWJsZSkgKElOU1RSX1RJTUVfR0VUX01JQ1JPU0VDKHN0 LT50eG5fYmVnaW4pIC0gc3QtPnR4bl9zY2hlZHVsZWQpOw0KLQ0KIAkvKiBz aG91bGQgd2UgYWdncmVnYXRlIHRoZSByZXN1bHRzIG9yIG5vdD8gKi8NCiAJ aWYgKGFnZ19pbnRlcnZhbCA+IDApDQogCXsNCkBAIC0xNzMwLDM5ICsxNzcz LDcgQEAgZG9Mb2coVFN0YXRlICp0aHJlYWQsIENTdGF0ZSAqc3QsIEZJTEUg KmxvZ2ZpbGUsIGluc3RyX3RpbWUgKm5vdywgQWdnVmFscyAqYWdnLA0KIAkJ ICovDQogCQlpZiAoYWdnLT5zdGFydF90aW1lICsgYWdnX2ludGVydmFsID49 IElOU1RSX1RJTUVfR0VUX0RPVUJMRSgqbm93KSkNCiAJCXsNCi0JCQlhZ2ct PmNudCArPSAxOw0KLQkJCWlmIChza2lwcGVkKQ0KLQkJCXsNCi0JCQkJLyoN Ci0JCQkJICogdGhlcmUgaXMgbm8gbGF0ZW5jeSB0byByZWNvcmQgaWYgdGhl IHRyYW5zYWN0aW9uIHdhcw0KLQkJCQkgKiBza2lwcGVkDQotCQkJCSAqLw0K LQkJCQlhZ2ctPnNraXBwZWQgKz0gMTsNCi0JCQl9DQotCQkJZWxzZQ0KLQkJ CXsNCi0JCQkJYWdnLT5zdW1fbGF0ZW5jeSArPSBsYXRlbmN5Ow0KLQkJCQlh Z2ctPnN1bTJfbGF0ZW5jeSArPSBsYXRlbmN5ICogbGF0ZW5jeTsNCi0NCi0J CQkJLyogZmlyc3QgaW4gdGhpcyBhZ2dyZWdhdGlvbiBpbnRlcnZhbCAqLw0K LQkJCQlpZiAoKGFnZy0+Y250ID09IDEpIHx8IChsYXRlbmN5IDwgYWdnLT5t aW5fbGF0ZW5jeSkpDQotCQkJCQlhZ2ctPm1pbl9sYXRlbmN5ID0gbGF0ZW5j eTsNCi0NCi0JCQkJaWYgKChhZ2ctPmNudCA9PSAxKSB8fCAobGF0ZW5jeSA+ IGFnZy0+bWF4X2xhdGVuY3kpKQ0KLQkJCQkJYWdnLT5tYXhfbGF0ZW5jeSA9 IGxhdGVuY3k7DQotDQotCQkJCS8qIGFuZCB0aGUgc2FtZSBmb3Igc2NoZWR1 bGUgbGFnICovDQotCQkJCWlmICh0aHJvdHRsZV9kZWxheSkNCi0JCQkJew0K LQkJCQkJYWdnLT5zdW1fbGFnICs9IGxhZzsNCi0JCQkJCWFnZy0+c3VtMl9s YWcgKz0gbGFnICogbGFnOw0KLQ0KLQkJCQkJaWYgKChhZ2ctPmNudCA9PSAx KSB8fCAobGFnIDwgYWdnLT5taW5fbGFnKSkNCi0JCQkJCQlhZ2ctPm1pbl9s YWcgPSBsYWc7DQotCQkJCQlpZiAoKGFnZy0+Y250ID09IDEpIHx8IChsYWcg PiBhZ2ctPm1heF9sYWcpKQ0KLQkJCQkJCWFnZy0+bWF4X2xhZyA9IGxhZzsN Ci0JCQkJfQ0KLQkJCX0NCisJCQlkb1N0YXRzKGFnZywgc2tpcHBlZCwgbGF0 ZW5jeSwgbGFnKTsNCiAJCX0NCiAJCWVsc2UNCiAJCXsNCkBAIC0xNzc3LDUy ICsxNzg4LDM0IEBAIGRvTG9nKFRTdGF0ZSAqdGhyZWFkLCBDU3RhdGUgKnN0 LCBGSUxFICpsb2dmaWxlLCBpbnN0cl90aW1lICpub3csIEFnZ1ZhbHMgKmFn ZywNCiAJCQkJICogdXNhZ2UpLCBzbyB3ZSBkb24ndCBuZWVkIHRvIGhhbmRs ZSB0aGlzIGluIGEgc3BlY2lhbCB3YXkNCiAJCQkJICogKHNlZSBiZWxvdyku DQogCQkJCSAqLw0KLQkJCQlmcHJpbnRmKGxvZ2ZpbGUsICIlbGQgJWQgJS4w ZiAlLjBmICUuMGYgJS4wZiIsDQorCQkJCWZwcmludGYobG9nZmlsZSwgIiVs ZCAiIElOVDY0X0ZPUk1BVCAiICUuMGYgJS4wZiAlLjBmICUuMGYiLA0KIAkJ CQkJCWFnZy0+c3RhcnRfdGltZSwNCiAJCQkJCQlhZ2ctPmNudCwNCi0JCQkJ CQlhZ2ctPnN1bV9sYXRlbmN5LA0KLQkJCQkJCWFnZy0+c3VtMl9sYXRlbmN5 LA0KLQkJCQkJCWFnZy0+bWluX2xhdGVuY3ksDQotCQkJCQkJYWdnLT5tYXhf bGF0ZW5jeSk7DQorCQkJCQkJYWdnLT5sYXRlbmN5LnN1bSwNCisJCQkJCQlh Z2ctPmxhdGVuY3kuc3VtMiwNCisJCQkJCQlhZ2ctPmxhdGVuY3kubWluLA0K KwkJCQkJCWFnZy0+bGF0ZW5jeS5tYXgpOw0KIAkJCQlpZiAodGhyb3R0bGVf ZGVsYXkpDQogCQkJCXsNCiAJCQkJCWZwcmludGYobG9nZmlsZSwgIiAlLjBm ICUuMGYgJS4wZiAlLjBmIiwNCi0JCQkJCQkJYWdnLT5zdW1fbGFnLA0KLQkJ CQkJCQlhZ2ctPnN1bTJfbGFnLA0KLQkJCQkJCQlhZ2ctPm1pbl9sYWcsDQot CQkJCQkJCWFnZy0+bWF4X2xhZyk7DQorCQkJCQkJCWFnZy0+bGFnLnN1bSwN CisJCQkJCQkJYWdnLT5sYWcuc3VtMiwNCisJCQkJCQkJYWdnLT5sYWcubWlu LA0KKwkJCQkJCQlhZ2ctPmxhZy5tYXgpOw0KIAkJCQkJaWYgKGxhdGVuY3lf bGltaXQpDQotCQkJCQkJZnByaW50Zihsb2dmaWxlLCAiICVkIiwgYWdnLT5z a2lwcGVkKTsNCisJCQkJCQlmcHJpbnRmKGxvZ2ZpbGUsICIgIiBJTlQ2NF9G T1JNQVQsIGFnZy0+c2tpcHBlZCk7DQogCQkJCX0NCiAJCQkJZnB1dGMoJ1xu JywgbG9nZmlsZSk7DQogDQotCQkJCS8qIG1vdmUgdG8gdGhlIG5leHQgaW50 ZXZhbCAqLw0KLQkJCQlhZ2ctPnN0YXJ0X3RpbWUgPSBhZ2ctPnN0YXJ0X3Rp bWUgKyBhZ2dfaW50ZXJ2YWw7DQorCQkJCS8qIG1vdmUgdG8gdGhlIG5leHQg aW50ZXJ2YWwgKi8NCisJCQkJYWdnLT5zdGFydF90aW1lICs9IGFnZ19pbnRl cnZhbDsNCiANCiAJCQkJLyogcmVzZXQgZm9yICJubyB0cmFuc2FjdGlvbiIg aW50ZXJ2YWxzICovDQotCQkJCWFnZy0+Y250ID0gMDsNCi0JCQkJYWdnLT5z a2lwcGVkID0gMDsNCi0JCQkJYWdnLT5taW5fbGF0ZW5jeSA9IDA7DQotCQkJ CWFnZy0+bWF4X2xhdGVuY3kgPSAwOw0KLQkJCQlhZ2ctPnN1bV9sYXRlbmN5 ID0gMDsNCi0JCQkJYWdnLT5zdW0yX2xhdGVuY3kgPSAwOw0KLQkJCQlhZ2ct Pm1pbl9sYWcgPSAwOw0KLQkJCQlhZ2ctPm1heF9sYWcgPSAwOw0KLQkJCQlh Z2ctPnN1bV9sYWcgPSAwOw0KLQkJCQlhZ2ctPnN1bTJfbGFnID0gMDsNCisJ CQkJaW5pdFN0YXRzKGFnZywgMC4wKTsNCiAJCQl9DQogDQogCQkJLyogcmVz ZXQgdGhlIHZhbHVlcyB0byBpbmNsdWRlIG9ubHkgdGhlIGN1cnJlbnQgdHJh bnNhY3Rpb24uICovDQotCQkJYWdnLT5jbnQgPSAxOw0KLQkJCWFnZy0+c2tp cHBlZCA9IHNraXBwZWQgPyAxIDogMDsNCi0JCQlhZ2ctPm1pbl9sYXRlbmN5 ID0gbGF0ZW5jeTsNCi0JCQlhZ2ctPm1heF9sYXRlbmN5ID0gbGF0ZW5jeTsN Ci0JCQlhZ2ctPnN1bV9sYXRlbmN5ID0gc2tpcHBlZCA/IDAuMCA6IGxhdGVu Y3k7DQotCQkJYWdnLT5zdW0yX2xhdGVuY3kgPSBza2lwcGVkID8gMC4wIDog bGF0ZW5jeSAqIGxhdGVuY3k7DQotCQkJYWdnLT5taW5fbGFnID0gbGFnOw0K LQkJCWFnZy0+bWF4X2xhZyA9IGxhZzsNCi0JCQlhZ2ctPnN1bV9sYWcgPSBs YWc7DQotCQkJYWdnLT5zdW0yX2xhZyA9IGxhZyAqIGxhZzsNCisJCQlkb1N0 YXRzKGFnZywgc2tpcHBlZCwgbGF0ZW5jeSwgbGFnKTsNCiAJCX0NCiAJfQ0K IAllbHNlDQpAQCAtMTgzMiwyMSArMTgyNSwyMSBAQCBkb0xvZyhUU3RhdGUg KnRocmVhZCwgQ1N0YXRlICpzdCwgRklMRSAqbG9nZmlsZSwgaW5zdHJfdGlt ZSAqbm93LCBBZ2dWYWxzICphZ2csDQogDQogCQkvKiBUaGlzIGlzIG1vcmUg dGhhbiB3ZSByZWFsbHkgb3VnaHQgdG8ga25vdyBhYm91dCBpbnN0cl90aW1l ICovDQogCQlpZiAoc2tpcHBlZCkNCi0JCQlmcHJpbnRmKGxvZ2ZpbGUsICIl ZCAlZCBza2lwcGVkICVkICVsZCAlbGQiLA0KKwkJCWZwcmludGYobG9nZmls ZSwgIiVkICIgSU5UNjRfRk9STUFUICIgc2tpcHBlZCAlZCAlbGQgJWxkIiwN CiAJCQkJCXN0LT5pZCwgc3QtPmNudCwgc3QtPnVzZV9maWxlLA0KIAkJCQkJ KGxvbmcpIG5vdy0+dHZfc2VjLCAobG9uZykgbm93LT50dl91c2VjKTsNCiAJ CWVsc2UNCi0JCQlmcHJpbnRmKGxvZ2ZpbGUsICIlZCAlZCAlLjBmICVkICVs ZCAlbGQiLA0KKwkJCWZwcmludGYobG9nZmlsZSwgIiVkICIgSU5UNjRfRk9S TUFUICIgJS4wZiAlZCAlbGQgJWxkIiwNCiAJCQkJCXN0LT5pZCwgc3QtPmNu dCwgbGF0ZW5jeSwgc3QtPnVzZV9maWxlLA0KIAkJCQkJKGxvbmcpIG5vdy0+ dHZfc2VjLCAobG9uZykgbm93LT50dl91c2VjKTsNCiAjZWxzZQ0KIA0KIAkJ LyogT24gV2luZG93cywgaW5zdHJfdGltZSBkb2Vzbid0IHByb3ZpZGUgYSB0 aW1lc3RhbXAgYW55d2F5ICovDQogCQlpZiAoc2tpcHBlZCkNCi0JCQlmcHJp bnRmKGxvZ2ZpbGUsICIlZCAlZCBza2lwcGVkICVkIDAgMCIsDQorCQkJZnBy aW50Zihsb2dmaWxlLCAiJWQgIklOVDY0X0ZPUk1BVCIgc2tpcHBlZCAlZCAw IDAiLA0KIAkJCQkJc3QtPmlkLCBzdC0+Y250LCBzdC0+dXNlX2ZpbGUpOw0K IAkJZWxzZQ0KLQkJCWZwcmludGYobG9nZmlsZSwgIiVkICVkICUuMGYgJWQg MCAwIiwNCisJCQlmcHJpbnRmKGxvZ2ZpbGUsICIlZCAiSU5UNjRfRk9STUFU IiAlLjBmICVkIDAgMCIsDQogCQkJCQlzdC0+aWQsIHN0LT5jbnQsIGxhdGVu Y3ksIHN0LT51c2VfZmlsZSk7DQogI2VuZGlmDQogCQlpZiAodGhyb3R0bGVf ZGVsYXkpDQpAQCAtMTg1NSw2ICsxODQ4LDQ0IEBAIGRvTG9nKFRTdGF0ZSAq dGhyZWFkLCBDU3RhdGUgKnN0LCBGSUxFICpsb2dmaWxlLCBpbnN0cl90aW1l ICpub3csIEFnZ1ZhbHMgKmFnZywNCiAJfQ0KIH0NCiANCisvKg0KKyAqIGVu ZCBvZiB0cmFuc2FjdGlvbiBzdGF0aXN0aWNzDQorICovDQorc3RhdGljIHZv aWQNCitkb1R4U3RhdHMoVFN0YXRlICp0aHJlYWQsIENTdGF0ZSAqc3QsIGlu c3RyX3RpbWUgKm5vdywNCisJCSAgYm9vbCBza2lwcGVkLCBGSUxFICpsb2dm aWxlLCBTdGF0c0RhdGEgKmFnZykNCit7DQorCWRvdWJsZSBsYXRlbmN5ID0g MC4wLCBsYWcgPSAwLjA7DQorDQorCWlmICgoIXNraXBwZWQgfHwgYWdnX2lu dGVydmFsKSAmJiBJTlNUUl9USU1FX0lTX1pFUk8oKm5vdykpDQorCQlJTlNU Ul9USU1FX1NFVF9DVVJSRU5UKCpub3cpOw0KKw0KKwlpZiAoIXNraXBwZWQp DQorCXsNCisJCS8qIGNvbXB1dGUgbGF0ZW5jeSAmIGxhZyBpZiBuZWVkZWQg Ki8NCisJCWxhdGVuY3kgPSBJTlNUUl9USU1FX0dFVF9NSUNST1NFQygqbm93 KSAtIHN0LT50eG5fc2NoZWR1bGVkOw0KKwkJbGFnID0gSU5TVFJfVElNRV9H RVRfTUlDUk9TRUMoc3QtPnR4bl9iZWdpbikgLSBzdC0+dHhuX3NjaGVkdWxl ZDsNCisJfQ0KKw0KKwlpZiAocHJvZ3Jlc3MgfHwgdGhyb3R0bGVfZGVsYXkg fHwgbGF0ZW5jeV9saW1pdCkNCisJew0KKwkJZG9TdGF0cygmIHRocmVhZC0+ c3RhdHMsIHNraXBwZWQsIGxhdGVuY3ksIGxhZyk7DQorDQorCQkvKiByZWNv cmQgb3ZlciB0aGUgbGltaXQgdHJhbnNhY3Rpb25zIGlmIG5lZWRlZC4gKi8N CisJCWlmIChsYXRlbmN5X2xpbWl0ICYmIGxhdGVuY3kgPiBsYXRlbmN5X2xp bWl0KQ0KKwkJCXRocmVhZC0+bGF0ZW5jeV9sYXRlKys7DQorCX0NCisJZWxz ZQ0KKwkJdGhyZWFkLT5zdGF0cy5jbnQgKys7DQorDQorCWlmICh1c2VfbG9n KQ0KKwkJZG9Mb2codGhyZWFkLCBzdCwgbG9nZmlsZSwgbm93LCBhZ2csIHNr aXBwZWQsIGxhdGVuY3ksIGxhZyk7DQorDQorCWlmIChwZXJfc2NyaXB0X3N0 YXRzKSAvKiBtdXRleD8gaG1tbS4uLiB0aGVzZSBhcmUgb25seSBzdGF0aXN0 aWNzICovDQorCQlkb1N0YXRzKCYgc3FsX3NjcmlwdFtzdC0+dXNlX2ZpbGVd LnN0YXRzLCBza2lwcGVkLCBsYXRlbmN5LCBsYWcpOw0KK30NCisNCisNCiAv KiBkaXNjYXJkIGNvbm5lY3Rpb25zICovDQogc3RhdGljIHZvaWQNCiBkaXNj b25uZWN0X2FsbChDU3RhdGUgKnN0YXRlLCBpbnQgbGVuZ3RoKQ0KQEAgLTIy NTEsNiArMjI4Miw3IEBAIHByb2Nlc3NfY29tbWFuZHMoY2hhciAqYnVmLCBj b25zdCBjaGFyICpzb3VyY2UsIGNvbnN0IGludCBsaW5lbm8pDQogCW15X2Nv bW1hbmRzLT5jb21tYW5kX251bSA9IG51bV9jb21tYW5kcysrOw0KIAlteV9j b21tYW5kcy0+dHlwZSA9IDA7CQkvKiB1bnRpbCBzZXQgKi8NCiAJbXlfY29t bWFuZHMtPmFyZ2MgPSAwOw0KKwlpbml0U2ltcGxlU3RhdHMoJiBteV9jb21t YW5kcy0+c3RhdHMpOw0KIA0KIAlpZiAoKnAgPT0gJ1xcJykNCiAJew0KQEAg LTI0NzUsNyArMjUwNyw3IEBAIHJlYWRfbGluZV9mcm9tX2ZpbGUoRklMRSAq ZmQpDQogCXJldHVybiBOVUxMOw0KIH0NCiANCi1zdGF0aWMgaW50DQorc3Rh dGljIENvbW1hbmQgKioNCiBwcm9jZXNzX2ZpbGUoY2hhciAqZmlsZW5hbWUp DQogew0KICNkZWZpbmUgQ09NTUFORFNfQUxMT0NfTlVNIDEyOA0KQEAgLTI0 ODMsMTUgKzI1MTUsOSBAQCBwcm9jZXNzX2ZpbGUoY2hhciAqZmlsZW5hbWUp DQogCUNvbW1hbmQgICAqKm15X2NvbW1hbmRzOw0KIAlGSUxFCSAgICpmZDsN CiAJaW50CQkJbGluZW5vLA0KLQkJCQlpbmRleDsNCisJCQkJaW5kZXgsDQor CQkJCWFsbG9jX251bTsNCiAJY2hhcgkgICAqYnVmOw0KLQlpbnQJCQlhbGxv Y19udW07DQotDQotCWlmIChudW1fZmlsZXMgPj0gTUFYX0ZJTEVTKQ0KLQl7 DQotCQlmcHJpbnRmKHN0ZGVyciwgImF0IG1vc3QgJWQgU1FMIGZpbGVzIGFy ZSBhbGxvd2VkXG4iLCBNQVhfRklMRVMpOw0KLQkJZXhpdCgxKTsNCi0JfQ0K IA0KIAlhbGxvY19udW0gPSBDT01NQU5EU19BTExPQ19OVU07DQogCW15X2Nv bW1hbmRzID0gKENvbW1hbmQgKiopIHBnX21hbGxvYyhzaXplb2YoQ29tbWFu ZCAqKSAqIGFsbG9jX251bSk7DQpAQCAtMjUwMyw3ICsyNTI5LDcgQEAgcHJv Y2Vzc19maWxlKGNoYXIgKmZpbGVuYW1lKQ0KIAkJZnByaW50ZihzdGRlcnIs ICJjb3VsZCBub3Qgb3BlbiBmaWxlIFwiJXNcIjogJXNcbiIsDQogCQkJCWZp bGVuYW1lLCBzdHJlcnJvcihlcnJubykpOw0KIAkJcGdfZnJlZShteV9jb21t YW5kcyk7DQotCQlyZXR1cm4gZmFsc2U7DQorCQlyZXR1cm4gTlVMTDsNCiAJ fQ0KIA0KIAlsaW5lbm8gPSAwOw0KQEAgLTI1MzUsMTMgKzI1NjEsMTEgQEAg cHJvY2Vzc19maWxlKGNoYXIgKmZpbGVuYW1lKQ0KIA0KIAlteV9jb21tYW5k c1tpbmRleF0gPSBOVUxMOw0KIA0KLQlzcWxfZmlsZXNbbnVtX2ZpbGVzKytd ID0gbXlfY29tbWFuZHM7DQotDQotCXJldHVybiB0cnVlOw0KKwlyZXR1cm4g bXlfY29tbWFuZHM7DQogfQ0KIA0KIHN0YXRpYyBDb21tYW5kICoqDQotcHJv Y2Vzc19idWlsdGluKGNoYXIgKnRiLCBjb25zdCBjaGFyICpzb3VyY2UpDQor cHJvY2Vzc19idWlsdGluKGNvbnN0IGNoYXIgKnRiLCBjb25zdCBjaGFyICpz b3VyY2UpDQogew0KICNkZWZpbmUgQ09NTUFORFNfQUxMT0NfTlVNIDEyOA0K IA0KQEAgLTI1OTUsMzUgKzI2MTksNzcgQEAgcHJvY2Vzc19idWlsdGluKGNo YXIgKnRiLCBjb25zdCBjaGFyICpzb3VyY2UpDQogCXJldHVybiBteV9jb21t YW5kczsNCiB9DQogDQorLyogUG9zc2lieSB0cnVuY2F0ZSBvcHRpb24gYW5k IHJldHVybiB3ZWlnaHQgKi8NCitzdGF0aWMgaW50DQorZ2V0V2VpZ2h0KGNo YXIgKm9wdGlvbikNCit7DQorCWNoYXIgICAqc2VwOw0KKwlpbnQJCXdlaWdo dDsNCisNCisJaWYgKChzZXAgPSBzdHJyY2hyKG9wdGlvbiwgV1NFUCkpKQ0K Kwl7DQorCQkqc2VwKysgPSAnXDAnOw0KKwkJd2VpZ2h0ID0gYXRvaShzZXAp Ow0KKwkJaWYgKHdlaWdodCA8PSAwKQ0KKwkJew0KKwkJCWZwcmludGYoc3Rk ZXJyLA0KKwkJCQkJIndlaWdodCBtdXN0IGJlIHN0cmljdGx5IHBvc2l0aXZl LCBnb3QgXCIlc1wiXG4iLCBzZXApOw0KKwkJCWV4aXQoMSk7DQorCQl9DQor CX0NCisJZWxzZQ0KKwkJd2VpZ2h0ID0gMTsNCisJcmV0dXJuIHdlaWdodDsN Cit9DQorDQorc3RhdGljIHZvaWQNCithZGRTY3JpcHQoY29uc3QgY2hhciAq bmFtZSwgQ29tbWFuZCAqKiBjb21tYW5kcywgaW50IHdlaWdodCkNCit7DQor CWlmIChjb21tYW5kcyA9PSBOVUxMKQ0KKwl7DQorCQlmcHJpbnRmKHN0ZGVy ciwgImVtcHR5IGNvbW1hbmRzIGZvciAlc1xuIiwgbmFtZSk7DQorCQlleGl0 KDEpOw0KKwl9DQorDQorCWlmIChudW1fc2NyaXB0cyA+PSBNQVhfU0NSSVBU UykNCisJew0KKwkJZnByaW50ZihzdGRlcnIsICJhdCBtb3N0ICVkIFNRTCBz Y3JpcHRzIGFyZSBhbGxvd2VkXG4iLCBNQVhfU0NSSVBUUyk7DQorCQlleGl0 KDEpOw0KKwl9DQorDQorCXNxbF9zY3JpcHRbbnVtX3NjcmlwdHNdLm5hbWUg PSBuYW1lOw0KKwlzcWxfc2NyaXB0W251bV9zY3JpcHRzXS53ZWlnaHQgPSB3 ZWlnaHQ7DQorCXNxbF9zY3JpcHRbbnVtX3NjcmlwdHNdLmNvbW1hbmRzID0g Y29tbWFuZHM7DQorCWluaXRTdGF0cygmIHNxbF9zY3JpcHRbbnVtX3Njcmlw dHNdLnN0YXRzLCAwLjApOw0KKwludW1fc2NyaXB0cysrOw0KK30NCisNCitz dGF0aWMgdm9pZA0KK3ByaW50U2ltcGxlU3RhdHMoY2hhciAqcHJlZml4LCBT aW1wbGVTdGF0cyAqc3MpDQorew0KKwkvKiBwcmludCBOYU4gaWYgbm8gdHJh bnNhY3Rpb25zIHdoZXJlIGV4ZWN1dGVkICovDQorCWRvdWJsZSBsYXRlbmN5 ID0gc3MtPnN1bSAvIHNzLT5jb3VudDsNCisJZG91YmxlIHN0ZGRldiA9IHNx cnQoc3MtPnN1bTIgLyBzcy0+Y291bnQgLSBsYXRlbmN5KmxhdGVuY3kpOw0K KwlwcmludGYoIiVzIGF2ZXJhZ2UgPSAlLjNmIG1zXG4iLCBwcmVmaXgsIDAu MDAxICogbGF0ZW5jeSk7DQorCXByaW50ZigiJXMgc3RkZGV2ID0gJS4zZiBt c1xuIiwgcHJlZml4LCAwLjAwMSAqIHN0ZGRldik7DQorfQ0KKw0KIC8qIHBy aW50IG91dCByZXN1bHRzICovDQogc3RhdGljIHZvaWQNCi1wcmludFJlc3Vs dHMoaW50IHR0eXBlLCBpbnQ2NCBub3JtYWxfeGFjdHMsIGludCBuY2xpZW50 cywNCi0JCQkgVFN0YXRlICp0aHJlYWRzLCBpbnQgbnRocmVhZHMsDQotCQkJ IGluc3RyX3RpbWUgdG90YWxfdGltZSwgaW5zdHJfdGltZSBjb25uX3RvdGFs X3RpbWUsDQotCQkJIGludDY0IHRvdGFsX2xhdGVuY2llcywgaW50NjQgdG90 YWxfc3FsYXRzLA0KLQkJCSBpbnQ2NCB0aHJvdHRsZV9sYWcsIGludDY0IHRo cm90dGxlX2xhZ19tYXgsDQotCQkJIGludDY0IHRocm90dGxlX2xhdGVuY3lf c2tpcHBlZCwgaW50NjQgbGF0ZW5jeV9sYXRlKQ0KK3ByaW50UmVzdWx0cyhU U3RhdGUgKnRocmVhZHMsIFN0YXRzRGF0YSAqdG90YWwsIGluc3RyX3RpbWUg dG90YWxfdGltZSwNCisJCQkgaW5zdHJfdGltZSBjb25uX3RvdGFsX3RpbWUs IGludCBsYXRlbmN5X2xhdGUpDQogew0KIAlkb3VibGUJCXRpbWVfaW5jbHVk ZSwNCiAJCQkJdHBzX2luY2x1ZGUsDQogCQkJCXRwc19leGNsdWRlOw0KLQlj aGFyCSAgICpzOw0KIA0KIAl0aW1lX2luY2x1ZGUgPSBJTlNUUl9USU1FX0dF VF9ET1VCTEUodG90YWxfdGltZSk7DQotCXRwc19pbmNsdWRlID0gbm9ybWFs X3hhY3RzIC8gdGltZV9pbmNsdWRlOw0KLQl0cHNfZXhjbHVkZSA9IG5vcm1h bF94YWN0cyAvICh0aW1lX2luY2x1ZGUgLQ0KKwl0cHNfaW5jbHVkZSA9IHRv dGFsLT5jbnQgLyB0aW1lX2luY2x1ZGU7DQorCXRwc19leGNsdWRlID0gdG90 YWwtPmNudCAvICh0aW1lX2luY2x1ZGUgLQ0KIAkJCQkJCShJTlNUUl9USU1F X0dFVF9ET1VCTEUoY29ubl90b3RhbF90aW1lKSAvIG50aHJlYWRzKSk7DQog DQotCWlmICh0dHlwZSA9PSAwKQ0KLQkJcyA9ICJUUEMtQiAoc29ydCBvZiki Ow0KLQllbHNlIGlmICh0dHlwZSA9PSAyKQ0KLQkJcyA9ICJVcGRhdGUgb25s eSBwZ2JlbmNoX2FjY291bnRzIjsNCi0JZWxzZSBpZiAodHR5cGUgPT0gMSkN Ci0JCXMgPSAiU0VMRUNUIG9ubHkiOw0KLQllbHNlDQotCQlzID0gIkN1c3Rv bSBxdWVyeSI7DQotDQotCXByaW50ZigidHJhbnNhY3Rpb24gdHlwZTogJXNc biIsIHMpOw0KKwlwcmludGYoInRyYW5zYWN0aW9uIHR5cGU6ICVzXG4iLA0K KwkJICAgbnVtX3NjcmlwdHMgPT0gMT8gc3FsX3NjcmlwdFswXS5uYW1lOiAi bXVsdGlwbGUgc2NyaXB0cyIpOw0KIAlwcmludGYoInNjYWxpbmcgZmFjdG9y OiAlZFxuIiwgc2NhbGUpOw0KIAlwcmludGYoInF1ZXJ5IG1vZGU6ICVzXG4i LCBRVUVSWU1PREVbcXVlcnltb2RlXSk7DQogCXByaW50ZigibnVtYmVyIG9m IGNsaWVudHM6ICVkXG4iLCBuY2xpZW50cyk7DQpAQCAtMjYzMSw0OSArMjY5 NywzOCBAQCBwcmludFJlc3VsdHMoaW50IHR0eXBlLCBpbnQ2NCBub3JtYWxf eGFjdHMsIGludCBuY2xpZW50cywNCiAJaWYgKGR1cmF0aW9uIDw9IDApDQog CXsNCiAJCXByaW50ZigibnVtYmVyIG9mIHRyYW5zYWN0aW9ucyBwZXIgY2xp ZW50OiAlZFxuIiwgbnhhY3RzKTsNCi0JCXByaW50ZigibnVtYmVyIG9mIHRy YW5zYWN0aW9ucyBhY3R1YWxseSBwcm9jZXNzZWQ6ICIgSU5UNjRfRk9STUFU ICIvIiBJTlQ2NF9GT1JNQVQgIlxuIiwNCi0JCQkgICBub3JtYWxfeGFjdHMs IChpbnQ2NCkgbnhhY3RzICogbmNsaWVudHMpOw0KKwkJcHJpbnRmKCJudW1i ZXIgb2YgdHJhbnNhY3Rpb25zIGFjdHVhbGx5IHByb2Nlc3NlZDogIklOVDY0 X0ZPUk1BVCIvJWRcbiIsDQorCQkJICAgdG90YWwtPmNudCwgbnhhY3RzICog bmNsaWVudHMpOw0KIAl9DQogCWVsc2UNCiAJew0KIAkJcHJpbnRmKCJkdXJh dGlvbjogJWQgc1xuIiwgZHVyYXRpb24pOw0KLQkJcHJpbnRmKCJudW1iZXIg b2YgdHJhbnNhY3Rpb25zIGFjdHVhbGx5IHByb2Nlc3NlZDogIiBJTlQ2NF9G T1JNQVQgIlxuIiwNCi0JCQkgICBub3JtYWxfeGFjdHMpOw0KKwkJcHJpbnRm KCJudW1iZXIgb2YgdHJhbnNhY3Rpb25zIGFjdHVhbGx5IHByb2Nlc3NlZDog IklOVDY0X0ZPUk1BVCJcbiIsDQorCQkJICAgdG90YWwtPmNudCk7DQogCX0N CiANCiAJLyogUmVtYWluaW5nIHN0YXRzIGFyZSBub25zZW5zaWNhbCBpZiB3 ZSBmYWlsZWQgdG8gZXhlY3V0ZSBhbnkgeGFjdHMgKi8NCi0JaWYgKG5vcm1h bF94YWN0cyA8PSAwKQ0KKwlpZiAodG90YWwtPmNudCA8PSAwKQ0KIAkJcmV0 dXJuOw0KIA0KIAlpZiAodGhyb3R0bGVfZGVsYXkgJiYgbGF0ZW5jeV9saW1p dCkNCi0JCXByaW50ZigibnVtYmVyIG9mIHRyYW5zYWN0aW9ucyBza2lwcGVk OiAiIElOVDY0X0ZPUk1BVCAiICglLjNmICUlKVxuIiwNCi0JCQkgICB0aHJv dHRsZV9sYXRlbmN5X3NraXBwZWQsDQotCQkJICAgMTAwLjAgKiB0aHJvdHRs ZV9sYXRlbmN5X3NraXBwZWQgLyAodGhyb3R0bGVfbGF0ZW5jeV9za2lwcGVk ICsgbm9ybWFsX3hhY3RzKSk7DQorCQlwcmludGYoIm51bWJlciBvZiB0cmFu c2FjdGlvbnMgc2tpcHBlZDogIklOVDY0X0ZPUk1BVCIgKCUuM2YgJSUpXG4i LA0KKwkJCSAgIHRvdGFsLT5za2lwcGVkLA0KKwkJCSAgIDEwMC4wICogdG90 YWwtPnNraXBwZWQgLyAodG90YWwtPnNraXBwZWQgKyB0b3RhbC0+Y250KSk7 DQogDQogCWlmIChsYXRlbmN5X2xpbWl0KQ0KLQkJcHJpbnRmKCJudW1iZXIg b2YgdHJhbnNhY3Rpb25zIGFib3ZlIHRoZSAlLjFmIG1zIGxhdGVuY3kgbGlt aXQ6ICIgSU5UNjRfRk9STUFUICIgKCUuM2YgJSUpXG4iLA0KKwkJcHJpbnRm KCJudW1iZXIgb2YgdHJhbnNhY3Rpb25zIGFib3ZlIHRoZSAlLjFmIG1zIGxh dGVuY3kgbGltaXQ6ICVkICglLjNmICUlKVxuIiwNCiAJCQkgICBsYXRlbmN5 X2xpbWl0IC8gMTAwMC4wLCBsYXRlbmN5X2xhdGUsDQotCQkgICAxMDAuMCAq IGxhdGVuY3lfbGF0ZSAvICh0aHJvdHRsZV9sYXRlbmN5X3NraXBwZWQgKyBu b3JtYWxfeGFjdHMpKTsNCisJCSAgIDEwMC4wICogbGF0ZW5jeV9sYXRlIC8g KHRvdGFsLT5za2lwcGVkICsgdG90YWwtPmNudCkpOw0KIA0KIAlpZiAodGhy b3R0bGVfZGVsYXkgfHwgcHJvZ3Jlc3MgfHwgbGF0ZW5jeV9saW1pdCkNCi0J ew0KLQkJLyogY29tcHV0ZSBhbmQgc2hvdyBsYXRlbmN5IGF2ZXJhZ2UgYW5k IHN0YW5kYXJkIGRldmlhdGlvbiAqLw0KLQkJZG91YmxlCQlsYXRlbmN5ID0g MC4wMDEgKiB0b3RhbF9sYXRlbmNpZXMgLyBub3JtYWxfeGFjdHM7DQotCQlk b3VibGUJCXNxbGF0ID0gKGRvdWJsZSkgdG90YWxfc3FsYXRzIC8gbm9ybWFs X3hhY3RzOw0KLQ0KLQkJcHJpbnRmKCJsYXRlbmN5IGF2ZXJhZ2U6ICUuM2Yg bXNcbiINCi0JCQkgICAibGF0ZW5jeSBzdGRkZXY6ICUuM2YgbXNcbiIsDQot CQkJICAgbGF0ZW5jeSwgMC4wMDEgKiBzcXJ0KHNxbGF0IC0gMTAwMDAwMC4w ICogbGF0ZW5jeSAqIGxhdGVuY3kpKTsNCi0JfQ0KKwkJcHJpbnRTaW1wbGVT dGF0cygibGF0ZW5jeSIsICYgdG90YWwtPmxhdGVuY3kpOw0KIAllbHNlDQot CXsNCiAJCS8qIG9ubHkgYW4gYXZlcmFnZSBsYXRlbmN5IGNvbXB1dGVkIGZy b20gdGhlIGR1cmF0aW9uIGlzIGF2YWlsYWJsZSAqLw0KIAkJcHJpbnRmKCJs YXRlbmN5IGF2ZXJhZ2U6ICUuM2YgbXNcbiIsDQotCQkJICAgMTAwMC4wICog ZHVyYXRpb24gKiBuY2xpZW50cyAvIG5vcm1hbF94YWN0cyk7DQotCX0NCisJ CQkgICAxMDAwLjAgKiBkdXJhdGlvbiAqIG5jbGllbnRzIC8gdG90YWwtPmNu dCk7DQogDQogCWlmICh0aHJvdHRsZV9kZWxheSkNCi0Jew0KIAkJLyoNCiAJ CSAqIFJlcG9ydCBhdmVyYWdlIHRyYW5zYWN0aW9uIGxhZyB1bmRlciByYXRl IGxpbWl0IHRocm90dGxpbmcuICBUaGlzDQogCQkgKiBpcyB0aGUgZGVsYXkg YmV0d2VlbiBzY2hlZHVsZWQgYW5kIGFjdHVhbCBzdGFydCB0aW1lcyBmb3Ig dGhlDQpAQCAtMjY4MSw1MyArMjczNiw0NCBAQCBwcmludFJlc3VsdHMoaW50 IHR0eXBlLCBpbnQ2NCBub3JtYWxfeGFjdHMsIGludCBuY2xpZW50cywNCiAJ CSAqIHRoZSBkYXRhYmFzZSBsb2FkLCBvciB0aGUgUG9pc3NvbiB0aHJvdHRs aW5nIHByb2Nlc3MuDQogCQkgKi8NCiAJCXByaW50ZigicmF0ZSBsaW1pdCBz Y2hlZHVsZSBsYWc6IGF2ZyAlLjNmIChtYXggJS4zZikgbXNcbiIsDQotCQkJ ICAgMC4wMDEgKiB0aHJvdHRsZV9sYWcgLyBub3JtYWxfeGFjdHMsIDAuMDAx ICogdGhyb3R0bGVfbGFnX21heCk7DQotCX0NCisJCQkgICAwLjAwMSAqIHRv dGFsLT5sYWcuc3VtIC8gdG90YWwtPmNudCwgMC4wMDEgKiB0b3RhbC0+bGFn Lm1heCk7DQogDQogCXByaW50ZigidHBzID0gJWYgKGluY2x1ZGluZyBjb25u ZWN0aW9ucyBlc3RhYmxpc2hpbmcpXG4iLCB0cHNfaW5jbHVkZSk7DQogCXBy aW50ZigidHBzID0gJWYgKGV4Y2x1ZGluZyBjb25uZWN0aW9ucyBlc3RhYmxp c2hpbmcpXG4iLCB0cHNfZXhjbHVkZSk7DQogDQotCS8qIFJlcG9ydCBwZXIt Y29tbWFuZCBsYXRlbmNpZXMgKi8NCi0JaWYgKGlzX2xhdGVuY2llcykNCisJ LyogUmVwb3J0IHBlci1maWxlIGRhdGEgKi8NCisJaWYgKHBlcl9zY3JpcHRf c3RhdHMpDQogCXsNCi0JCWludAkJCWk7DQorCQlpbnQgaTsNCiANCi0JCWZv ciAoaSA9IDA7IGkgPCBudW1fZmlsZXM7IGkrKykNCisJCWZvciAoaSA9IDA7 IGkgPCBudW1fc2NyaXB0czsgaSsrKQ0KIAkJew0KLQkJCUNvbW1hbmQgICAq KmNvbW1hbmRzOw0KKwkJCXByaW50ZigiU1FMIHNjcmlwdCAlZCwgd2VpZ2h0 ICVkOiAlc1xuIg0KKwkJCQkgICAiIC0gIklOVDY0X0ZPUk1BVCIgdHJhbnNh Y3Rpb25zICglLjFmJSUgb2YgdG90YWwsIHRwcyA9ICVmKVxuIiwNCisJCQkJ ICAgaSwgc3FsX3NjcmlwdFtpXS53ZWlnaHQsIHNxbF9zY3JpcHRbaV0ubmFt ZSwNCisJCQkJICAgc3FsX3NjcmlwdFtpXS5zdGF0cy5jbnQsDQorCQkJCSAg IDEwMC4wICogc3FsX3NjcmlwdFtpXS5zdGF0cy5jbnQgLyB0b3RhbC0+Y250 LA0KKwkJCQkgICBzcWxfc2NyaXB0W2ldLnN0YXRzLmNudCAvIHRpbWVfaW5j bHVkZSk7DQogDQotCQkJaWYgKG51bV9maWxlcyA+IDEpDQotCQkJCXByaW50 Zigic3RhdGVtZW50IGxhdGVuY2llcyBpbiBtaWxsaXNlY29uZHMsIGZpbGUg JWQ6XG4iLCBpICsgMSk7DQotCQkJZWxzZQ0KLQkJCQlwcmludGYoInN0YXRl bWVudCBsYXRlbmNpZXMgaW4gbWlsbGlzZWNvbmRzOlxuIik7DQorCQkJaWYg KGxhdGVuY3lfbGltaXQpDQorCQkJCXByaW50ZigiIC0gbnVtYmVyIG9mIHRy YW5zYWN0aW9ucyBza2lwcGVkOiAiSU5UNjRfRk9STUFUIiAoJS4zZiUlKVxu IiwNCisJCQkJCSAgIHNxbF9zY3JpcHRbaV0uc3RhdHMuc2tpcHBlZCwNCisJ CQkJCSAgIDEwMC4wICogc3FsX3NjcmlwdFtpXS5zdGF0cy5za2lwcGVkIC8N CisJCQkJCSAgIChzcWxfc2NyaXB0W2ldLnN0YXRzLnNraXBwZWQgKyBzcWxf c2NyaXB0W2ldLnN0YXRzLmNudCkpOw0KIA0KLQkJCWZvciAoY29tbWFuZHMg PSBzcWxfZmlsZXNbaV07ICpjb21tYW5kcyAhPSBOVUxMOyBjb21tYW5kcysr KQ0KLQkJCXsNCi0JCQkJQ29tbWFuZCAgICAqY29tbWFuZCA9ICpjb21tYW5k czsNCi0JCQkJaW50CQkJY251bSA9IGNvbW1hbmQtPmNvbW1hbmRfbnVtOw0K LQkJCQlkb3VibGUJCXRvdGFsX3RpbWU7DQotCQkJCWluc3RyX3RpbWUJdG90 YWxfZXhlY19lbGFwc2VkOw0KLQkJCQlpbnQJCQl0b3RhbF9leGVjX2NvdW50 Ow0KLQkJCQlpbnQJCQl0Ow0KLQ0KLQkJCQkvKiBBY2N1bXVsYXRlIHBlci10 aHJlYWQgZGF0YSBmb3IgY29tbWFuZCAqLw0KLQkJCQlJTlNUUl9USU1FX1NF VF9aRVJPKHRvdGFsX2V4ZWNfZWxhcHNlZCk7DQotCQkJCXRvdGFsX2V4ZWNf Y291bnQgPSAwOw0KLQkJCQlmb3IgKHQgPSAwOyB0IDwgbnRocmVhZHM7IHQr KykNCi0JCQkJew0KLQkJCQkJVFN0YXRlCSAgICp0aHJlYWQgPSAmdGhyZWFk c1t0XTsNCisJCQlwcmludFNpbXBsZVN0YXRzKCIgLSBsYXRlbmN5IiwgJiBz cWxfc2NyaXB0W2ldLnN0YXRzLmxhdGVuY3kpOw0KIA0KLQkJCQkJSU5TVFJf VElNRV9BREQodG90YWxfZXhlY19lbGFwc2VkLA0KLQkJCQkJCQkJICAgdGhy ZWFkLT5leGVjX2VsYXBzZWRbY251bV0pOw0KLQkJCQkJdG90YWxfZXhlY19j b3VudCArPSB0aHJlYWQtPmV4ZWNfY291bnRbY251bV07DQotCQkJCX0NCisJ CQkvKiBSZXBvcnQgcGVyLWNvbW1hbmQgbGF0ZW5jaWVzICovDQorCQkJaWYg KGlzX2xhdGVuY2llcykNCisJCQl7DQorCQkJCUNvbW1hbmQgKiogY29tOw0K IA0KLQkJCQlpZiAodG90YWxfZXhlY19jb3VudCA+IDApDQotCQkJCQl0b3Rh bF90aW1lID0gSU5TVFJfVElNRV9HRVRfTUlMTElTRUModG90YWxfZXhlY19l bGFwc2VkKSAvIChkb3VibGUpIHRvdGFsX2V4ZWNfY291bnQ7DQotCQkJCWVs c2UNCi0JCQkJCXRvdGFsX3RpbWUgPSAwLjA7DQorCQkJCXByaW50ZigiIC0g cGVyIGNvbW1hbmQgbGF0ZW5jaWVzIGluIG1zOlxuIik7DQogDQotCQkJCXBy aW50ZigiXHQlZlx0JXNcbiIsIHRvdGFsX3RpbWUsIGNvbW1hbmQtPmxpbmUp Ow0KKwkJCQlmb3IgKGNvbSA9IHNxbF9zY3JpcHRbaV0uY29tbWFuZHM7ICpj b20gIT0gTlVMTDsgY29tKyspDQorCQkJCQlwcmludGYoIiAgICUxMS4zZiAg JXNcbiIsDQorCQkJCQkJICAgMTAwMC4wICogKCpjb20pLT5zdGF0cy5zdW0g LyAoKmNvbSktPnN0YXRzLmNvdW50LA0KKwkJCQkJCSAgICgqY29tKS0+bGlu ZSk7DQogCQkJfQ0KIAkJfQ0KIAl9DQpAQCAtMjczOSw2ICsyNzg1LDcgQEAg bWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpDQogew0KIAlzdGF0aWMgc3Ry dWN0IG9wdGlvbiBsb25nX29wdGlvbnNbXSA9IHsNCiAJCS8qIHN5c3RlbWF0 aWMgbG9uZy9zaG9ydCBuYW1lZCBvcHRpb25zICovDQorCQl7InRwYy1iIiwg bm9fYXJndW1lbnQsIE5VTEwsICdCJ30sDQogCQl7ImNsaWVudCIsIHJlcXVp cmVkX2FyZ3VtZW50LCBOVUxMLCAnYyd9LA0KIAkJeyJjb25uZWN0Iiwgbm9f YXJndW1lbnQsIE5VTEwsICdDJ30sDQogCQl7ImRlYnVnIiwgbm9fYXJndW1l bnQsIE5VTEwsICdkJ30sDQpAQCAtMjc0OSwxMiArMjc5NiwxNCBAQCBtYWlu KGludCBhcmdjLCBjaGFyICoqYXJndikNCiAJCXsiaW5pdGlhbGl6ZSIsIG5v X2FyZ3VtZW50LCBOVUxMLCAnaSd9LA0KIAkJeyJqb2JzIiwgcmVxdWlyZWRf YXJndW1lbnQsIE5VTEwsICdqJ30sDQogCQl7ImxvZyIsIG5vX2FyZ3VtZW50 LCBOVUxMLCAnbCd9LA0KKwkJeyJsYXRlbmN5LWxpbWl0IiwgcmVxdWlyZWRf YXJndW1lbnQsIE5VTEwsICdMJ30sDQogCQl7Im5vLXZhY3V1bSIsIG5vX2Fy Z3VtZW50LCBOVUxMLCAnbid9LA0KIAkJeyJwb3J0IiwgcmVxdWlyZWRfYXJn dW1lbnQsIE5VTEwsICdwJ30sDQogCQl7InByb2dyZXNzIiwgcmVxdWlyZWRf YXJndW1lbnQsIE5VTEwsICdQJ30sDQogCQl7InByb3RvY29sIiwgcmVxdWly ZWRfYXJndW1lbnQsIE5VTEwsICdNJ30sDQogCQl7InF1aWV0Iiwgbm9fYXJn dW1lbnQsIE5VTEwsICdxJ30sDQogCQl7InJlcG9ydC1sYXRlbmNpZXMiLCBu b19hcmd1bWVudCwgTlVMTCwgJ3InfSwNCisJCXsicmF0ZSIsIHJlcXVpcmVk X2FyZ3VtZW50LCBOVUxMLCAnUid9LA0KIAkJeyJzY2FsZSIsIHJlcXVpcmVk X2FyZ3VtZW50LCBOVUxMLCAncyd9LA0KIAkJeyJzZWxlY3Qtb25seSIsIG5v X2FyZ3VtZW50LCBOVUxMLCAnUyd9LA0KIAkJeyJza2lwLXNvbWUtdXBkYXRl cyIsIG5vX2FyZ3VtZW50LCBOVUxMLCAnTid9LA0KQEAgLTI3NjksMjUgKzI4 MTgsMjAgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpDQogCQl7InVu bG9nZ2VkLXRhYmxlcyIsIG5vX2FyZ3VtZW50LCAmdW5sb2dnZWRfdGFibGVz LCAxfSwNCiAJCXsic2FtcGxpbmctcmF0ZSIsIHJlcXVpcmVkX2FyZ3VtZW50 LCBOVUxMLCA0fSwNCiAJCXsiYWdncmVnYXRlLWludGVydmFsIiwgcmVxdWly ZWRfYXJndW1lbnQsIE5VTEwsIDV9LA0KLQkJeyJyYXRlIiwgcmVxdWlyZWRf YXJndW1lbnQsIE5VTEwsICdSJ30sDQotCQl7ImxhdGVuY3ktbGltaXQiLCBy ZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgJ0wnfSwNCisJCXsicGVyLXNjcmlw dC1zdGF0cyIsIG5vX2FyZ3VtZW50LCBOVUxMLCA2fSwNCiAJCXtOVUxMLCAw LCBOVUxMLCAwfQ0KIAl9Ow0KIA0KIAlpbnQJCQljOw0KLQlpbnQJCQluY2xp ZW50cyA9IDE7CS8qIGRlZmF1bHQgbnVtYmVyIG9mIHNpbXVsYXRlZCBjbGll bnRzICovDQotCWludAkJCW50aHJlYWRzID0gMTsJLyogZGVmYXVsdCBudW1i ZXIgb2YgdGhyZWFkcyAqLw0KIAlpbnQJCQlpc19pbml0X21vZGUgPSAwOwkJ LyogaW5pdGlhbGl6ZSBtb2RlPyAqLw0KIAlpbnQJCQlpc19ub192YWN1dW0g PSAwOwkJLyogbm8gdmFjdXVtIGF0IGFsbCBiZWZvcmUgdGVzdGluZz8gKi8N CiAJaW50CQkJZG9fdmFjdXVtX2FjY291bnRzID0gMDsgLyogZG8gdmFjdXVt IGFjY291bnRzIGJlZm9yZSB0ZXN0aW5nPyAqLw0KLQlpbnQJCQl0dHlwZSA9 IDA7CQkvKiB0cmFuc2FjdGlvbiB0eXBlLiAwOiBUUEMtQiwgMTogU0VMRUNU IG9ubHksDQotCQkJCQkJCQkgKiAyOiBza2lwIHVwZGF0ZSBvZiBicmFuY2hl cyBhbmQgdGVsbGVycyAqLw0KIAlpbnQJCQlvcHRpbmRleDsNCi0JY2hhcgkg ICAqZmlsZW5hbWUgPSBOVUxMOw0KIAlib29sCQlzY2FsZV9naXZlbiA9IGZh bHNlOw0KIA0KIAlib29sCQliZW5jaG1hcmtpbmdfb3B0aW9uX3NldCA9IGZh bHNlOw0KIAlib29sCQlpbml0aWFsaXphdGlvbl9vcHRpb25fc2V0ID0gZmFs c2U7DQorCWJvb2wJCWludGVybmFsX3NjcmlwdF91c2VkID0gZmFsc2U7DQog DQogCUNTdGF0ZQkgICAqc3RhdGU7CQkJLyogc3RhdHVzIG9mIGNsaWVudHMg Ki8NCiAJVFN0YXRlCSAgICp0aHJlYWRzOwkJLyogYXJyYXkgb2YgdGhyZWFk ICovDQpAQCAtMjc5NSwxMyArMjgzOSwxMCBAQCBtYWluKGludCBhcmdjLCBj aGFyICoqYXJndikNCiAJaW5zdHJfdGltZQlzdGFydF90aW1lOwkJLyogc3Rh cnQgdXAgdGltZSAqLw0KIAlpbnN0cl90aW1lCXRvdGFsX3RpbWU7DQogCWlu c3RyX3RpbWUJY29ubl90b3RhbF90aW1lOw0KLQlpbnQ2NAkJdG90YWxfeGFj dHMgPSAwOw0KLQlpbnQ2NAkJdG90YWxfbGF0ZW5jaWVzID0gMDsNCi0JaW50 NjQJCXRvdGFsX3NxbGF0cyA9IDA7DQotCWludDY0CQl0aHJvdHRsZV9sYWcg PSAwOw0KLQlpbnQ2NAkJdGhyb3R0bGVfbGFnX21heCA9IDA7DQotCWludDY0 CQl0aHJvdHRsZV9sYXRlbmN5X3NraXBwZWQgPSAwOw0KIAlpbnQ2NAkJbGF0 ZW5jeV9sYXRlID0gMDsNCisJU3RhdHNEYXRhCXN0YXRzOw0KKwlpbnQJCQl3 ZWlnaHQ7DQorCWNoYXIJICAgKmRlc2M7DQogDQogCWludAkJCWk7DQogCWlu dAkJCW5jbGllbnRzX2RlYWx0Ow0KQEAgLTI4NDcsNyArMjg4OCw3IEBAIG1h aW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQ0KIAlzdGF0ZSA9IChDU3RhdGUg KikgcGdfbWFsbG9jKHNpemVvZihDU3RhdGUpKTsNCiAJbWVtc2V0KHN0YXRl LCAwLCBzaXplb2YoQ1N0YXRlKSk7DQogDQotCXdoaWxlICgoYyA9IGdldG9w dF9sb25nKGFyZ2MsIGFyZ3YsICJpaDpudnA6ZHFTTmM6ajpDcnM6dDpUOlU6 bGY6RDpGOk06UDpSOkw6IiwgbG9uZ19vcHRpb25zLCAmb3B0aW5kZXgpKSAh PSAtMSkNCisJd2hpbGUgKChjID0gZ2V0b3B0X2xvbmcoYXJnYywgYXJndiwg ImloOm52cDpkcWI6U05jOmo6Q3JzOnQ6VDpVOmxmOkQ6RjpNOlA6UjpMOiIs IGxvbmdfb3B0aW9ucywgJm9wdGluZGV4KSkgIT0gLTEpDQogCXsNCiAJCXN3 aXRjaCAoYykNCiAJCXsNCkBAIC0yODY5LDE0ICsyOTEwLDYgQEAgbWFpbihp bnQgYXJnYywgY2hhciAqKmFyZ3YpDQogCQkJY2FzZSAnZCc6DQogCQkJCWRl YnVnKys7DQogCQkJCWJyZWFrOw0KLQkJCWNhc2UgJ1MnOg0KLQkJCQl0dHlw ZSA9IDE7DQotCQkJCWJlbmNobWFya2luZ19vcHRpb25fc2V0ID0gdHJ1ZTsN Ci0JCQkJYnJlYWs7DQotCQkJY2FzZSAnTic6DQotCQkJCXR0eXBlID0gMjsN Ci0JCQkJYmVuY2htYXJraW5nX29wdGlvbl9zZXQgPSB0cnVlOw0KLQkJCQli cmVhazsNCiAJCQljYXNlICdjJzoNCiAJCQkJYmVuY2htYXJraW5nX29wdGlv bl9zZXQgPSB0cnVlOw0KIAkJCQluY2xpZW50cyA9IGF0b2kob3B0YXJnKTsN CkBAIC0yOTI4LDYgKzI5NjEsNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICoq YXJndikNCiAJCQkJYnJlYWs7DQogCQkJY2FzZSAncic6DQogCQkJCWJlbmNo bWFya2luZ19vcHRpb25fc2V0ID0gdHJ1ZTsNCisJCQkJcGVyX3NjcmlwdF9z dGF0cyA9IHRydWU7DQogCQkJCWlzX2xhdGVuY2llcyA9IHRydWU7DQogCQkJ CWJyZWFrOw0KIAkJCWNhc2UgJ3MnOg0KQEAgLTI5NzksMTIgKzMwMTMsMzAg QEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpDQogCQkJCWluaXRpYWxp emF0aW9uX29wdGlvbl9zZXQgPSB0cnVlOw0KIAkJCQl1c2VfcXVpZXQgPSB0 cnVlOw0KIAkJCQlicmVhazsNCisJCQkJLyogd2hhdCB0byBydW4qLw0KKwkJ CWNhc2UgJ2InOg0KKwkJCQl3ZWlnaHQgPSBnZXRXZWlnaHQob3B0YXJnKTsN CisJCQkJYWRkU2NyaXB0KGRlc2MsIHByb2Nlc3NfYnVpbHRpbigNCisJCQkJ CQkJICBmaW5kX2J1aWx0aW4ob3B0YXJnLCAmZGVzYyksIGRlc2MpLCB3ZWln aHQpOw0KKwkJCQliZW5jaG1hcmtpbmdfb3B0aW9uX3NldCA9IHRydWU7DQor CQkJCWludGVybmFsX3NjcmlwdF91c2VkID0gdHJ1ZTsNCisJCQkJYnJlYWs7 DQorCQkJY2FzZSAnUyc6DQorCQkJCWFkZFNjcmlwdChkZXNjLCBwcm9jZXNz X2J1aWx0aW4oDQorCQkJCQkJCSAgZmluZF9idWlsdGluKCJzZWxlY3Qtb25s eSIsICZkZXNjKSwgZGVzYyksIDEpOw0KKwkJCQliZW5jaG1hcmtpbmdfb3B0 aW9uX3NldCA9IHRydWU7DQorCQkJCWludGVybmFsX3NjcmlwdF91c2VkID0g dHJ1ZTsNCisJCQkJYnJlYWs7DQorCQkJY2FzZSAnTic6DQorCQkJCWFkZFNj cmlwdChkZXNjLCBwcm9jZXNzX2J1aWx0aW4oDQorCQkJCQkJCSAgZmluZF9i dWlsdGluKCJzaW1wbGUtdXBkYXRlIiwgJmRlc2MpLCBkZXNjKSwgMSk7DQor CQkJCWJlbmNobWFya2luZ19vcHRpb25fc2V0ID0gdHJ1ZTsNCisJCQkJaW50 ZXJuYWxfc2NyaXB0X3VzZWQgPSB0cnVlOw0KKwkJCQlicmVhazsNCiAJCQlj YXNlICdmJzoNCisJCQkJd2VpZ2h0ID0gZ2V0V2VpZ2h0KG9wdGFyZyk7DQor CQkJCWFkZFNjcmlwdChvcHRhcmcsIHByb2Nlc3NfZmlsZShvcHRhcmcpLCB3 ZWlnaHQpOw0KIAkJCQliZW5jaG1hcmtpbmdfb3B0aW9uX3NldCA9IHRydWU7 DQotCQkJCXR0eXBlID0gMzsNCi0JCQkJZmlsZW5hbWUgPSBwZ19zdHJkdXAo b3B0YXJnKTsNCi0JCQkJaWYgKHByb2Nlc3NfZmlsZShmaWxlbmFtZSkgPT0g ZmFsc2UgfHwgKnNxbF9maWxlc1tudW1fZmlsZXMgLSAxXSA9PSBOVUxMKQ0K LQkJCQkJZXhpdCgxKTsNCiAJCQkJYnJlYWs7DQogCQkJY2FzZSAnRCc6DQog CQkJCXsNCkBAIC0zMDE1LDkgKzMwNjcsOSBAQCBtYWluKGludCBhcmdjLCBj aGFyICoqYXJndikNCiAJCQkJYnJlYWs7DQogCQkJY2FzZSAnTSc6DQogCQkJ CWJlbmNobWFya2luZ19vcHRpb25fc2V0ID0gdHJ1ZTsNCi0JCQkJaWYgKG51 bV9maWxlcyA+IDApDQorCQkJCWlmIChudW1fc2NyaXB0cyA+IDApDQogCQkJ CXsNCi0JCQkJCWZwcmludGYoc3RkZXJyLCAicXVlcnkgbW9kZSAoLU0pIHNo b3VsZCBiZSBzcGVjaWZpZWQgYmVmb3JlIGFueSB0cmFuc2FjdGlvbiBzY3Jp cHRzICgtZilcbiIpOw0KKwkJCQkJZnByaW50ZihzdGRlcnIsICJxdWVyeSBt b2RlICgtTSkgc2hvdWxkIGJlIHNwZWNpZmllZCBiZWZvcmUgYW55IHRyYW5z YWN0aW9uIHNjcmlwdHMgKC1mIG9yIC1iKVxuIik7DQogCQkJCQlleGl0KDEp Ow0KIAkJCQl9DQogCQkJCWZvciAocXVlcnltb2RlID0gMDsgcXVlcnltb2Rl IDwgTlVNX1FVRVJZTU9ERTsgcXVlcnltb2RlKyspDQpAQCAtMzEwNyw2ICsz MTU5LDkgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpDQogCQkJCX0N CiAjZW5kaWYNCiAJCQkJYnJlYWs7DQorCQkJY2FzZSA2Og0KKwkJCQlwZXJf c2NyaXB0X3N0YXRzID0gdHJ1ZTsNCisJCQkJYnJlYWs7DQogCQkJZGVmYXVs dDoNCiAJCQkJZnByaW50ZihzdGRlcnIsIF8oIlRyeSBcIiVzIC0taGVscFwi IGZvciBtb3JlIGluZm9ybWF0aW9uLlxuIiksIHByb2duYW1lKTsNCiAJCQkJ ZXhpdCgxKTsNCkBAIC0zMTE0LDYgKzMxNjksMTkgQEAgbWFpbihpbnQgYXJn YywgY2hhciAqKmFyZ3YpDQogCQl9DQogCX0NCiANCisJLyogc2V0IGRlZmF1 bHQgc2NyaXB0IGlmIG5vbmUgKi8NCisJaWYgKG51bV9zY3JpcHRzID09IDAg JiYgIWluaXRpYWxpemF0aW9uX29wdGlvbl9zZXQpDQorCXsNCisJCWFkZFNj cmlwdChkZXNjLCBwcm9jZXNzX2J1aWx0aW4oDQorCQkJCQkgIGZpbmRfYnVp bHRpbigidHBjYi1saWtlIiwgJmRlc2MpLCBkZXNjKSwgMSk7DQorCQliZW5j aG1hcmtpbmdfb3B0aW9uX3NldCA9IHRydWU7DQorCQlpbnRlcm5hbF9zY3Jp cHRfdXNlZCA9IHRydWU7DQorCX0NCisNCisJLyogY29tcHV0ZSB0b3RhbF93 ZWlnaHQgKi8NCisJZm9yIChpID0gMDsgaSA8IG51bV9zY3JpcHRzOyBpKysp DQorCQl0b3RhbF93ZWlnaHQgKz0gc3FsX3NjcmlwdFtpXS53ZWlnaHQ7DQor DQogCS8qDQogCSAqIERvbid0IG5lZWQgbW9yZSB0aHJlYWRzIHRoYW4gdGhl cmUgYXJlIGNsaWVudHMuICAoVGhpcyBpcyBub3QgbWVyZWx5IGFuDQogCSAq IG9wdGltaXphdGlvbjsgdGhyb3R0bGVfZGVsYXkgaXMgY2FsY3VsYXRlZCBp bmNvcnJlY3RseSBiZWxvdyBpZiBzb21lDQpAQCAtMzE5OCw4ICszMjY2LDYg QEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpDQogCSAqIGNoYW5nZWQg YWZ0ZXIgZm9yay4NCiAJICovDQogCW1haW5fcGlkID0gKGludCkgZ2V0cGlk KCk7DQotCXByb2dyZXNzX25jbGllbnRzID0gbmNsaWVudHM7DQotCXByb2dy ZXNzX250aHJlYWRzID0gbnRocmVhZHM7DQogDQogCWlmIChuY2xpZW50cyA+ IDEpDQogCXsNCkBAIC0zMjQyLDcgKzMzMDgsNyBAQCBtYWluKGludCBhcmdj LCBjaGFyICoqYXJndikNCiAJCWV4aXQoMSk7DQogCX0NCiANCi0JaWYgKHR0 eXBlICE9IDMpDQorCWlmIChpbnRlcm5hbF9zY3JpcHRfdXNlZCkNCiAJew0K IAkJLyoNCiAJCSAqIGdldCB0aGUgc2NhbGluZyBmYWN0b3IgdGhhdCBzaG91 bGQgYmUgc2FtZSBhcyBjb3VudCgqKSBmcm9tDQpAQCAtMzMxOSwzMSArMzM4 NSw2IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQ0KIAlJTlNUUl9U SU1FX1NFVF9DVVJSRU5UKHN0YXJ0X3RpbWUpOw0KIAlzcmFuZG9tKCh1bnNp Z25lZCBpbnQpIElOU1RSX1RJTUVfR0VUX01JQ1JPU0VDKHN0YXJ0X3RpbWUp KTsNCiANCi0JLyogcHJvY2VzcyBidWlsdGluIFNRTCBzY3JpcHRzICovDQot CXN3aXRjaCAodHR5cGUpDQotCXsNCi0JCWNhc2UgMDoNCi0JCQlzcWxfZmls ZXNbMF0gPSBwcm9jZXNzX2J1aWx0aW4odHBjX2IsDQotCQkJCQkJCQkJCSAg ICI8YnVpbHRpbjogVFBDLUIgKHNvcnQgb2YpPiIpOw0KLQkJCW51bV9maWxl cyA9IDE7DQotCQkJYnJlYWs7DQotDQotCQljYXNlIDE6DQotCQkJc3FsX2Zp bGVzWzBdID0gcHJvY2Vzc19idWlsdGluKHNlbGVjdF9vbmx5LA0KLQkJCQkJ CQkJCQkgICAiPGJ1aWx0aW46IHNlbGVjdCBvbmx5PiIpOw0KLQkJCW51bV9m aWxlcyA9IDE7DQotCQkJYnJlYWs7DQotDQotCQljYXNlIDI6DQotCQkJc3Fs X2ZpbGVzWzBdID0gcHJvY2Vzc19idWlsdGluKHNpbXBsZV91cGRhdGUsDQot CQkJCQkJCQkJCSAgICI8YnVpbHRpbjogc2ltcGxlIHVwZGF0ZT4iKTsNCi0J CQludW1fZmlsZXMgPSAxOw0KLQkJCWJyZWFrOw0KLQ0KLQkJZGVmYXVsdDoN Ci0JCQlicmVhazsNCi0JfQ0KLQ0KIAkvKiBzZXQgdXAgdGhyZWFkIGRhdGEg c3RydWN0dXJlcyAqLw0KIAl0aHJlYWRzID0gKFRTdGF0ZSAqKSBwZ19tYWxs b2Moc2l6ZW9mKFRTdGF0ZSkgKiBudGhyZWFkcyk7DQogCW5jbGllbnRzX2Rl YWx0ID0gMDsNCkBAIC0zMzU5LDMyICszNDAwLDEwIEBAIG1haW4oaW50IGFy Z2MsIGNoYXIgKiphcmd2KQ0KIAkJdGhyZWFkLT5yYW5kb21fc3RhdGVbMF0g PSByYW5kb20oKTsNCiAJCXRocmVhZC0+cmFuZG9tX3N0YXRlWzFdID0gcmFu ZG9tKCk7DQogCQl0aHJlYWQtPnJhbmRvbV9zdGF0ZVsyXSA9IHJhbmRvbSgp Ow0KLQkJdGhyZWFkLT50aHJvdHRsZV9sYXRlbmN5X3NraXBwZWQgPSAwOw0K IAkJdGhyZWFkLT5sYXRlbmN5X2xhdGUgPSAwOw0KKwkJaW5pdFN0YXRzKCYg dGhyZWFkLT5zdGF0cywgMC4wKTsNCiANCiAJCW5jbGllbnRzX2RlYWx0ICs9 IHRocmVhZC0+bnN0YXRlOw0KLQ0KLQkJaWYgKGlzX2xhdGVuY2llcykNCi0J CXsNCi0JCQkvKiBSZXNlcnZlIG1lbW9yeSBmb3IgdGhlIHRocmVhZCB0byBz dG9yZSBwZXItY29tbWFuZCBsYXRlbmNpZXMgKi8NCi0JCQlpbnQJCQl0Ow0K LQ0KLQkJCXRocmVhZC0+ZXhlY19lbGFwc2VkID0gKGluc3RyX3RpbWUgKikN Ci0JCQkJcGdfbWFsbG9jKHNpemVvZihpbnN0cl90aW1lKSAqIG51bV9jb21t YW5kcyk7DQotCQkJdGhyZWFkLT5leGVjX2NvdW50ID0gKGludCAqKQ0KLQkJ CQlwZ19tYWxsb2Moc2l6ZW9mKGludCkgKiBudW1fY29tbWFuZHMpOw0KLQ0K LQkJCWZvciAodCA9IDA7IHQgPCBudW1fY29tbWFuZHM7IHQrKykNCi0JCQl7 DQotCQkJCUlOU1RSX1RJTUVfU0VUX1pFUk8odGhyZWFkLT5leGVjX2VsYXBz ZWRbdF0pOw0KLQkJCQl0aHJlYWQtPmV4ZWNfY291bnRbdF0gPSAwOw0KLQkJ CX0NCi0JCX0NCi0JCWVsc2UNCi0JCXsNCi0JCQl0aHJlYWQtPmV4ZWNfZWxh cHNlZCA9IE5VTEw7DQotCQkJdGhyZWFkLT5leGVjX2NvdW50ID0gTlVMTDsN Ci0JCX0NCiAJfQ0KIA0KIAkvKiBhbGwgY2xpZW50cyBtdXN0IGJlIGFzc2ln bmVkIHRvIGEgdGhyZWFkICovDQpAQCAtMzQyNywxMSArMzQ0NiwxMSBAQCBt YWluKGludCBhcmdjLCBjaGFyICoqYXJndikNCiAjZW5kaWYgICAvKiBFTkFC TEVfVEhSRUFEX1NBRkVUWSAqLw0KIA0KIAkvKiB3YWl0IGZvciB0aHJlYWRz IGFuZCBhY2N1bXVsYXRlIHJlc3VsdHMgKi8NCisJaW5pdFN0YXRzKCYgc3Rh dHMsIDAuMCk7DQogCUlOU1RSX1RJTUVfU0VUX1pFUk8oY29ubl90b3RhbF90 aW1lKTsNCiAJZm9yIChpID0gMDsgaSA8IG50aHJlYWRzOyBpKyspDQogCXsN CiAJCVRTdGF0ZQkgICAqdGhyZWFkID0gJnRocmVhZHNbaV07DQotCQlpbnQJ CQlqOw0KIA0KICNpZmRlZiBFTkFCTEVfVEhSRUFEX1NBRkVUWQ0KIAkJaWYg KHRocmVhZHNbaV0udGhyZWFkID09IElOVkFMSURfVEhSRUFEKQ0KQEAgLTM0 NDQsMjEgKzM0NjMsMTMgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3Yp DQogCQkodm9pZCkgdGhyZWFkUnVuKHRocmVhZCk7DQogI2VuZGlmICAgLyog RU5BQkxFX1RIUkVBRF9TQUZFVFkgKi8NCiANCi0JCS8qIHRocmVhZCBsZXZl bCBzdGF0cyAqLw0KLQkJdGhyb3R0bGVfbGFnICs9IHRocmVhZC0+dGhyb3R0 bGVfbGFnOw0KLQkJdGhyb3R0bGVfbGF0ZW5jeV9za2lwcGVkID0gdGhyZWFk cy0+dGhyb3R0bGVfbGF0ZW5jeV9za2lwcGVkOw0KLQkJbGF0ZW5jeV9sYXRl ID0gdGhyZWFkLT5sYXRlbmN5X2xhdGU7DQotCQlpZiAodGhyb3R0bGVfbGFn X21heCA+IHRocmVhZC0+dGhyb3R0bGVfbGFnX21heCkNCi0JCQl0aHJvdHRs ZV9sYWdfbWF4ID0gdGhyZWFkLT50aHJvdHRsZV9sYWdfbWF4Ow0KKwkJLyog YWdncmVnYXRlIHRocmVhZCBsZXZlbCBzdGF0cyAqLw0KKwkJYXBwZW5kU2lt cGxlU3RhdHMoJiBzdGF0cy5sYXRlbmN5LCAmIHRocmVhZC0+c3RhdHMubGF0 ZW5jeSk7DQorCQlhcHBlbmRTaW1wbGVTdGF0cygmIHN0YXRzLmxhZywgJiB0 aHJlYWQtPnN0YXRzLmxhZyk7DQorCQlzdGF0cy5jbnQgKz0gdGhyZWFkLT5z dGF0cy5jbnQ7DQorCQlzdGF0cy5za2lwcGVkICs9IHRocmVhZC0+c3RhdHMu c2tpcHBlZDsNCisJCWxhdGVuY3lfbGF0ZSArPSB0aHJlYWQtPmxhdGVuY3lf bGF0ZTsNCiAJCUlOU1RSX1RJTUVfQUREKGNvbm5fdG90YWxfdGltZSwgdGhy ZWFkLT5jb25uX3RpbWUpOw0KLQ0KLQkJLyogY2xpZW50LWxldmVsIHN0YXRz ICovDQotCQlmb3IgKGogPSAwOyBqIDwgdGhyZWFkLT5uc3RhdGU7IGorKykN Ci0JCXsNCi0JCQl0b3RhbF94YWN0cyArPSB0aHJlYWQtPnN0YXRlW2pdLmNu dDsNCi0JCQl0b3RhbF9sYXRlbmNpZXMgKz0gdGhyZWFkLT5zdGF0ZVtqXS50 eG5fbGF0ZW5jaWVzOw0KLQkJCXRvdGFsX3NxbGF0cyArPSB0aHJlYWQtPnN0 YXRlW2pdLnR4bl9zcWxhdHM7DQotCQl9DQogCX0NCiAJZGlzY29ubmVjdF9h bGwoc3RhdGUsIG5jbGllbnRzKTsNCiANCkBAIC0zNDc0LDEwICszNDg1LDcg QEAgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpDQogCSAqLw0KIAlJTlNU Ul9USU1FX1NFVF9DVVJSRU5UKHRvdGFsX3RpbWUpOw0KIAlJTlNUUl9USU1F X1NVQlRSQUNUKHRvdGFsX3RpbWUsIHN0YXJ0X3RpbWUpOw0KLQlwcmludFJl c3VsdHModHR5cGUsIHRvdGFsX3hhY3RzLCBuY2xpZW50cywgdGhyZWFkcywg bnRocmVhZHMsDQotCQkJCSB0b3RhbF90aW1lLCBjb25uX3RvdGFsX3RpbWUs IHRvdGFsX2xhdGVuY2llcywgdG90YWxfc3FsYXRzLA0KLQkJCQkgdGhyb3R0 bGVfbGFnLCB0aHJvdHRsZV9sYWdfbWF4LCB0aHJvdHRsZV9sYXRlbmN5X3Nr aXBwZWQsDQotCQkJCSBsYXRlbmN5X2xhdGUpOw0KKwlwcmludFJlc3VsdHMo dGhyZWFkcywgJnN0YXRzLCB0b3RhbF90aW1lLCBjb25uX3RvdGFsX3RpbWUs IGxhdGVuY3lfbGF0ZSk7DQogDQogCXJldHVybiAwOw0KIH0NCkBAIC0zNDk4 LDEzICszNTA2LDcgQEAgdGhyZWFkUnVuKHZvaWQgKmFyZykNCiAJaW50NjQJ CXRocmVhZF9zdGFydCA9IElOU1RSX1RJTUVfR0VUX01JQ1JPU0VDKHRocmVh ZC0+c3RhcnRfdGltZSk7DQogCWludDY0CQlsYXN0X3JlcG9ydCA9IHRocmVh ZF9zdGFydDsNCiAJaW50NjQJCW5leHRfcmVwb3J0ID0gbGFzdF9yZXBvcnQg KyAoaW50NjQpIHByb2dyZXNzICogMTAwMDAwMDsNCi0JaW50NjQJCWxhc3Rf Y291bnQgPSAwLA0KLQkJCQlsYXN0X2xhdHMgPSAwLA0KLQkJCQlsYXN0X3Nx bGF0cyA9IDAsDQotCQkJCWxhc3RfbGFncyA9IDAsDQotCQkJCWxhc3Rfc2tp cHBlZCA9IDA7DQotDQotCUFnZ1ZhbHMJCWFnZ3M7DQorCVN0YXRzRGF0YQls YXN0LCBhZ2dzOw0KIA0KIAkvKg0KIAkgKiBJbml0aWFsaXplIHRocm90dGxp bmcgcmF0ZSB0YXJnZXQgZm9yIGFsbCBvZiB0aGUgdGhyZWFkJ3MgY2xpZW50 cy4gIEl0DQpAQCAtMzUxNCw4ICszNTE2LDYgQEAgdGhyZWFkUnVuKHZvaWQg KmFyZykNCiAJICovDQogCUlOU1RSX1RJTUVfU0VUX0NVUlJFTlQoc3RhcnQp Ow0KIAl0aHJlYWQtPnRocm90dGxlX3RyaWdnZXIgPSBJTlNUUl9USU1FX0dF VF9NSUNST1NFQyhzdGFydCk7DQotCXRocmVhZC0+dGhyb3R0bGVfbGFnID0g MDsNCi0JdGhyZWFkLT50aHJvdHRsZV9sYWdfbWF4ID0gMDsNCiANCiAJSU5T VFJfVElNRV9TRVRfWkVSTyh0aHJlYWQtPmNvbm5fdGltZSk7DQogDQpAQCAt MzU1MiwxNiArMzU1MiwxNyBAQCB0aHJlYWRSdW4odm9pZCAqYXJnKQ0KIAlJ TlNUUl9USU1FX1NFVF9DVVJSRU5UKHRocmVhZC0+Y29ubl90aW1lKTsNCiAJ SU5TVFJfVElNRV9TVUJUUkFDVCh0aHJlYWQtPmNvbm5fdGltZSwgdGhyZWFk LT5zdGFydF90aW1lKTsNCiANCi0JYWdnX3ZhbHNfaW5pdCgmYWdncywgdGhy ZWFkLT5zdGFydF90aW1lKTsNCisJaW5pdFN0YXRzKCZhZ2dzLCBJTlNUUl9U SU1FX0dFVF9ET1VCTEUodGhyZWFkLT5zdGFydF90aW1lKSk7DQorCWxhc3Qg PSBhZ2dzOw0KIA0KIAkvKiBzZW5kIHN0YXJ0IHVwIHF1ZXJpZXMgaW4gYXN5 bmMgbWFubmVyICovDQogCWZvciAoaSA9IDA7IGkgPCBuc3RhdGU7IGkrKykN CiAJew0KIAkJQ1N0YXRlCSAgICpzdCA9ICZzdGF0ZVtpXTsNCi0JCUNvbW1h bmQgICAqKmNvbW1hbmRzID0gc3FsX2ZpbGVzW3N0LT51c2VfZmlsZV07DQor CQlDb21tYW5kICAgKipjb21tYW5kcyA9IHNxbF9zY3JpcHRbc3QtPnVzZV9m aWxlXS5jb21tYW5kczsNCiAJCWludAkJCXByZXZfZWNudCA9IHN0LT5lY250 Ow0KIA0KLQkJc3QtPnVzZV9maWxlID0gZ2V0cmFuZCh0aHJlYWQsIDAsIG51 bV9maWxlcyAtIDEpOw0KKwkJc3QtPnVzZV9maWxlID0gbnVtX3NjcmlwdHM9 PTE/IDA6IGNob29zZVNjcmlwdCh0aHJlYWQpOw0KIAkJaWYgKCFkb0N1c3Rv bSh0aHJlYWQsIHN0LCAmdGhyZWFkLT5jb25uX3RpbWUsIGxvZ2ZpbGUsICZh Z2dzKSkNCiAJCQlyZW1haW5zLS07CQkJLyogSSd2ZSBhYm9ydGVkICovDQog DQpAQCAtMzU4OSw3ICszNTkwLDcgQEAgdGhyZWFkUnVuKHZvaWQgKmFyZykN CiAJCWZvciAoaSA9IDA7IGkgPCBuc3RhdGU7IGkrKykNCiAJCXsNCiAJCQlD U3RhdGUJICAgKnN0ID0gJnN0YXRlW2ldOw0KLQkJCUNvbW1hbmQgICAqKmNv bW1hbmRzID0gc3FsX2ZpbGVzW3N0LT51c2VfZmlsZV07DQorCQkJQ29tbWFu ZCAgICoqY29tbWFuZHMgPSBzcWxfc2NyaXB0W3N0LT51c2VfZmlsZV0uY29t bWFuZHM7DQogCQkJaW50CQkJc29jazsNCiANCiAJCQlpZiAoc3QtPmNvbiA9 PSBOVUxMKQ0KQEAgLTM2MDIsNyArMzYwMyw3IEBAIHRocmVhZFJ1bih2b2lk ICphcmcpDQogCQkJCXsNCiAJCQkJCS8qIGludGVycnVwdCBjbGllbnQgd2hp Y2ggaGFzIG5vdCBzdGFydGVkIGEgdHJhbnNhY3Rpb24gKi8NCiAJCQkJCXJl bWFpbnMtLTsNCi0JCQkJCXN0LT5zbGVlcGluZyA9IDA7DQorCQkJCQlzdC0+ c2xlZXBpbmcgPSBmYWxzZTsNCiAJCQkJCXN0LT50aHJvdHRsaW5nID0gZmFs c2U7DQogCQkJCQlQUWZpbmlzaChzdC0+Y29uKTsNCiAJCQkJCXN0LT5jb24g PSBOVUxMOw0KQEAgLTM2OTUsNyArMzY5Niw3IEBAIHRocmVhZFJ1bih2b2lk ICphcmcpDQogCQlmb3IgKGkgPSAwOyBpIDwgbnN0YXRlOyBpKyspDQogCQl7 DQogCQkJQ1N0YXRlCSAgICpzdCA9ICZzdGF0ZVtpXTsNCi0JCQlDb21tYW5k ICAgKipjb21tYW5kcyA9IHNxbF9maWxlc1tzdC0+dXNlX2ZpbGVdOw0KKwkJ CUNvbW1hbmQgICAqKmNvbW1hbmRzID0gc3FsX3NjcmlwdFtzdC0+dXNlX2Zp bGVdLmNvbW1hbmRzOw0KIAkJCWludAkJCXByZXZfZWNudCA9IHN0LT5lY250 Ow0KIA0KIAkJCWlmIChzdC0+Y29uICYmIChGRF9JU1NFVChQUXNvY2tldChz dC0+Y29uKSwgJmlucHV0X21hc2spDQpAQCAtMzcyNiwxMSArMzcyNyw3IEBA IHRocmVhZFJ1bih2b2lkICphcmcpDQogCQkJaWYgKG5vdyA+PSBuZXh0X3Jl cG9ydCkNCiAJCQl7DQogCQkJCS8qIGdlbmVyYXRlIGFuZCBzaG93IHJlcG9y dCAqLw0KLQkJCQlpbnQ2NAkJY291bnQgPSAwLA0KLQkJCQkJCQlsYXRzID0g MCwNCi0JCQkJCQkJc3FsYXRzID0gMCwNCi0JCQkJCQkJbGFncyA9IDAsDQot CQkJCQkJCXNraXBwZWQgPSAwOw0KKwkJCQlTdGF0c0RhdGEgICBjdXI7DQog CQkJCWludDY0CQlydW4gPSBub3cgLSBsYXN0X3JlcG9ydDsNCiAJCQkJZG91 YmxlCQl0cHMsDQogCQkJCQkJCXRvdGFsX3J1biwNCkBAIC0zNzUwLDIzICsz NzQ3LDI0IEBAIHRocmVhZFJ1bih2b2lkICphcmcpDQogCQkJCSAqIChJZiBh IHJlYWQgZnJvbSBhIDY0LWJpdCBpbnRlZ2VyIGlzIG5vdCBhdG9taWMsIHlv dSBtaWdodA0KIAkJCQkgKiBnZXQgYSAidG9ybiIgcmVhZCBhbmQgY29tcGxl dGVseSBib2d1cyBsYXRlbmNpZXMgdGhvdWdoISkNCiAJCQkJICovDQotCQkJ CWZvciAoaSA9IDA7IGkgPCBwcm9ncmVzc19uY2xpZW50czsgaSsrKQ0KKwkJ CQlpbml0U3RhdHMoJiBjdXIsIDAuMCk7DQorCQkJCWZvciAoaSA9IDA7IGkg PCBudGhyZWFkczsgaSsrKQ0KIAkJCQl7DQotCQkJCQljb3VudCArPSBzdGF0 ZVtpXS5jbnQ7DQotCQkJCQlsYXRzICs9IHN0YXRlW2ldLnR4bl9sYXRlbmNp ZXM7DQotCQkJCQlzcWxhdHMgKz0gc3RhdGVbaV0udHhuX3NxbGF0czsNCisJ CQkJCWFwcGVuZFNpbXBsZVN0YXRzKCYgY3VyLmxhdGVuY3ksICYgdGhyZWFk W2ldLnN0YXRzLmxhdGVuY3kpOw0KKwkJCQkJYXBwZW5kU2ltcGxlU3RhdHMo JiBjdXIubGFnLCAmIHRocmVhZFtpXS5zdGF0cy5sYWcpOw0KKwkJCQkJY3Vy LmNudCArPSB0aHJlYWRbaV0uc3RhdHMuY250Ow0KKwkJCQkJY3VyLnNraXBw ZWQgKz0gdGhyZWFkW2ldLnN0YXRzLnNraXBwZWQ7DQogCQkJCX0NCiANCi0J CQkJZm9yIChpID0gMDsgaSA8IHByb2dyZXNzX250aHJlYWRzOyBpKyspDQot CQkJCQlsYWdzICs9IHRocmVhZFtpXS50aHJvdHRsZV9sYWc7DQotDQogCQkJ CXRvdGFsX3J1biA9IChub3cgLSB0aHJlYWRfc3RhcnQpIC8gMTAwMDAwMC4w Ow0KLQkJCQl0cHMgPSAxMDAwMDAwLjAgKiAoY291bnQgLSBsYXN0X2NvdW50 KSAvIHJ1bjsNCi0JCQkJbGF0ZW5jeSA9IDAuMDAxICogKGxhdHMgLSBsYXN0 X2xhdHMpIC8gKGNvdW50IC0gbGFzdF9jb3VudCk7DQotCQkJCXNxbGF0ID0g MS4wICogKHNxbGF0cyAtIGxhc3Rfc3FsYXRzKSAvIChjb3VudCAtIGxhc3Rf Y291bnQpOw0KKwkJCQl0cHMgPSAxMDAwMDAwLjAgKiAoY3VyLmNudCAtIGxh c3QuY250KSAvIHJ1bjsNCisJCQkJbGF0ZW5jeSA9IDAuMDAxICogKGN1ci5s YXRlbmN5LnN1bSAtIGxhc3QubGF0ZW5jeS5zdW0pIC8NCisJCQkJCShjdXIu Y250IC0gbGFzdC5jbnQpOw0KKwkJCQlzcWxhdCA9IDEuMCAqIChjdXIubGF0 ZW5jeS5zdW0yIC0gbGFzdC5sYXRlbmN5LnN1bTIpDQorCQkJCQkvIChjdXIu Y250IC0gbGFzdC5jbnQpOw0KIAkJCQlzdGRldiA9IDAuMDAxICogc3FydChz cWxhdCAtIDEwMDAwMDAuMCAqIGxhdGVuY3kgKiBsYXRlbmN5KTsNCi0JCQkJ bGFnID0gMC4wMDEgKiAobGFncyAtIGxhc3RfbGFncykgLyAoY291bnQgLSBs YXN0X2NvdW50KTsNCi0JCQkJc2tpcHBlZCA9IHRocmVhZC0+dGhyb3R0bGVf bGF0ZW5jeV9za2lwcGVkIC0gbGFzdF9za2lwcGVkOw0KKwkJCQlsYWcgPSAw LjAwMSAqIChjdXIubGFnLnN1bSAtIGxhc3QubGFnLnN1bSkgLw0KKwkJCQkJ KGN1ci5jbnQgLSBsYXN0LmNudCk7DQogDQogCQkJCWZwcmludGYoc3RkZXJy LA0KIAkJCQkJCSJwcm9ncmVzczogJS4xZiBzLCAlLjFmIHRwcywgIg0KQEAg LTM3NzYsMTYgKzM3NzQsMTMgQEAgdGhyZWFkUnVuKHZvaWQgKmFyZykNCiAJ CQkJew0KIAkJCQkJZnByaW50ZihzdGRlcnIsICIsIGxhZyAlLjNmIG1zIiwg bGFnKTsNCiAJCQkJCWlmIChsYXRlbmN5X2xpbWl0KQ0KLQkJCQkJCWZwcmlu dGYoc3RkZXJyLCAiLCAiIElOVDY0X0ZPUk1BVCAiIHNraXBwZWQiLCBza2lw cGVkKTsNCisJCQkJCQlmcHJpbnRmKHN0ZGVyciwgIiwgIklOVDY0X0ZPUk1B VCIgc2tpcHBlZCIsDQorCQkJCQkJCQljdXIuc2tpcHBlZCAtIGxhc3Quc2tp cHBlZCk7DQogCQkJCX0NCiAJCQkJZnByaW50ZihzdGRlcnIsICJcbiIpOw0K IA0KLQkJCQlsYXN0X2NvdW50ID0gY291bnQ7DQotCQkJCWxhc3RfbGF0cyA9 IGxhdHM7DQotCQkJCWxhc3Rfc3FsYXRzID0gc3FsYXRzOw0KLQkJCQlsYXN0 X2xhZ3MgPSBsYWdzOw0KKwkJCQlsYXN0ID0gY3VyOw0KIAkJCQlsYXN0X3Jl cG9ydCA9IG5vdzsNCi0JCQkJbGFzdF9za2lwcGVkID0gdGhyZWFkLT50aHJv dHRsZV9sYXRlbmN5X3NraXBwZWQ7DQogDQogCQkJCS8qDQogCQkJCSAqIEVu c3VyZSB0aGF0IHRoZSBuZXh0IHJlcG9ydCBpcyBpbiB0aGUgZnV0dXJlLCBp biBjYXNlDQo= --8323329-1289346998-1438093840=:3538 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-1289346998-1438093840=:3538--