Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtp (Exim 4.80) (envelope-from ) id 1WEGVx-0005D6-P6 for pgsql-hackers@arkaria.postgresql.org; Fri, 14 Feb 2014 11:01:02 +0000 Received: from localhost ([127.0.0.1] helo=postgresql.org) by malur.postgresql.org with smtp (Exim 4.80) (envelope-from ) id 1WEGVx-0001NA-7L for pgsql-hackers@arkaria.postgresql.org; Fri, 14 Feb 2014 11:01:01 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtp (Exim 4.80) (envelope-from ) id 1WEGVv-0001N1-3f for pgsql-hackers@postgresql.org; Fri, 14 Feb 2014 11:00:59 +0000 Received: from tama500.ecl.ntt.co.jp ([129.60.39.148]) by magus.postgresql.org with esmtp (Exim 4.80) (envelope-from ) id 1WEGVo-0007kK-Ds for pgsql-hackers@postgresql.org; Fri, 14 Feb 2014 11:00:58 +0000 Received: from mfs5.rdh.ecl.ntt.co.jp (mfs5.rdh.ecl.ntt.co.jp [129.60.39.144]) by tama500.ecl.ntt.co.jp (8.13.8/8.13.8) with ESMTP id s1EB0mFq026645; Fri, 14 Feb 2014 20:00:48 +0900 Received: from mfs5.rdh.ecl.ntt.co.jp (localhost.localdomain [127.0.0.1]) by mfs5.rdh.ecl.ntt.co.jp (Postfix) with ESMTP id 8FE46E0141; Fri, 14 Feb 2014 20:00:48 +0900 (JST) Received: from imail3.m.ecl.ntt.co.jp (imail3.m.ecl.ntt.co.jp [129.60.5.248]) by mfs5.rdh.ecl.ntt.co.jp (Postfix) with ESMTP id 83CBAE0140; Fri, 14 Feb 2014 20:00:48 +0900 (JST) Received: from [129.60.241.197] ([129.60.241.197]) by imail3.m.ecl.ntt.co.jp (8.13.8/8.13.8) with ESMTP id s1EB0mjt017169; Fri, 14 Feb 2014 20:00:48 +0900 Message-ID: <52FDF74A.5070203@lab.ntt.co.jp> Date: Fri, 14 Feb 2014 20:00:26 +0900 From: Etsuro Fujita User-Agent: Mozilla/5.0 (Windows NT 6.0; rv:24.0) Gecko/20100101 Thunderbird/24.3.0 MIME-Version: 1.0 To: Shigeru Hanada CC: PostgreSQL-development Subject: Re: inherit support for foreign tables References: <12432.1384406906@sss.pgh.pa.us> <10163.1384786524@sss.pgh.pa.us> <52DDD071.9090405@ak.jp.nec.com> <52E5F3FD.6050000@lab.ntt.co.jp> <52E6137B.1080704@lab.ntt.co.jp> <52F4D206.7010704@lab.ntt.co.jp> <52F8BF6F.2050204@lab.ntt.co.jp> In-Reply-To: <52F8BF6F.2050204@lab.ntt.co.jp> Content-Type: multipart/mixed; boundary="------------040306010407050709000305" X-TM-AS-MML: No X-Pg-Spam-Score: -2.6 (--) 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 is a multi-part message in MIME format. --------------040306010407050709000305 Content-Type: text/plain; charset=Shift_JIS Content-Transfer-Encoding: 7bit (2014/02/10 21:00), Etsuro Fujita wrote: > (2014/02/07 21:31), Etsuro Fujita wrote: >> So, I've modified the patch so >> that we continue to disallow SET STORAGE on a foreign table *in the same >> manner as before*, but, as your patch does, allow it on an inheritance >> hierarchy that contains foreign tables, with the semantics that we >> quietly ignore the foreign tables and apply the operation to the plain >> tables, by modifying the ALTER TABLE simple recursion mechanism. > While reviwing the patch, I've found some issues on interactions with > other commands, other than the SET STORAGE command. > * ADD table_constraint NOT VALID: the patch allows ADD table_constraint > *NOT VALID* to be set on a foreign table as well as an inheritance > hierarchy that contains foreign tables. But I think it would be better > to disallow ADD table_constraint *NOT VALID* on a foreign table, but > allow it on an inheritance hierarchy that contains foreign tables, with > the semantics that we apply the operation to the plain tables and apply > the transformed operation *ADD table_constraint* to the foreign tables. Done. > * VALIDATE CONSTRAINT constraint_name: I've modified the patch so that though we continue to disallow the operation on a foreign table, we allow it on an inheritance hierarchy that contains foreign tables. In that case, the to-be-validated constraints on the plain tables are validated by the operation, as before, and the constraints on the foreign tables are ignored. Note that the constraints on the foreign tables are not NOT VALID due to the spec mentioned above. > * SET WITH OIDS: though the patch disallow the direct operation on > foreign tables, it allows the operation on an inheritance hierarchy that > contains foreign tables, and that operation is successfully done on > foreign tables. I think it would be better to modify the patch so that > we allow it on an inheritance hierarchy that contains foreign tables, > with the semantics that we quietly ignore the foreign tables and apply > the operation to the plain tables just like the semantics of SET STORAGE. I noticed this breaks inheritance hierarchy. To avoid this, I've modified the patch to disallow SET WITH OIDS on an inheritance hierarchy that contains at least one foreign table. The other changes: - if (stmt->constraints != NIL && relkind == RELKIND_FOREIGN_TABLE) - ereport(ERROR, - (errcode(ERRCODE_WRONG_OBJECT_TYPE), - errmsg("constraints are not supported on foreign tables"))); +/* + * Shouldn't this have been checked in parser? + */ + if (relkind == RELKIND_FOREIGN_TABLE) + { + ListCell *lc; + foreach(lc, stmt->constraints) + { + NewConstraint *nc = lfirst(lc); + + if (nc->contype != CONSTR_CHECK && + nc->contype != CONSTR_DEFAULT && + nc->contype != CONSTR_NULL && + nc->contype != CONSTR_NOTNULL) + ereport(ERROR, + (errcode(ERRCODE_WRONG_OBJECT_TYPE), + errmsg("only check constraints are supported on foreign tables"))); + } + } ISTM we wouldn't need the above check in DefineRelation(), so I've removed the check from the patch. And I've modified the vague error messages in parse_utilcmd.c. There seems to be no objections, I've merged the ANALYZE patch [1] with your patch. I noticed that the patch in [1] isn't efficient. (To ANALYZE one inheritance tree that contains foreign tables, the patch in [1] calls the AnalyzeForeignTable() routine two times for each such foreign table.) So, the updated version has been merged that calls the routine only once for each such foreign table. Todo: ISTM the documentation would need to be updated further. Thanks, [1] http://www.postgresql.org/message-id/52EB10AC.4070307@lab.ntt.co.jp Best regards, Etsuro Fujita --------------040306010407050709000305 Content-Type: text/plain; charset=Shift_JIS; name="foreign_inherit-v3.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="foreign_inherit-v3.patch" KioqIGEvZG9jL3NyYy9zZ21sL2RkbC5zZ21sCi0tLSBiL2RvYy9zcmMvc2dt bC9kZGwuc2dtbAoqKioqKioqKioqKioqKioKKioqIDI1OCwyNjMgKioqKiBD UkVBVEUgVEFCTEUgcHJvZHVjdHMgKAotLS0gMjU4LDI3NCAtLS0tCiAgICAg ZXZlbiBpZiB0aGUgdmFsdWUgY2FtZSBmcm9tIHRoZSBkZWZhdWx0IHZhbHVl IGRlZmluaXRpb24uCiAgICA8L3BhcmE+CiAgCisgICA8bm90ZT4KKyAgICA8 cGFyYT4KKyAgICAgTm90ZSB0aGF0IGNvbnN0cmFpbnRzIGNhbiBiZSBkZWZp bmVkIG9uIGZvcmVpZ24gdGFibGVzIHRvbywgYnV0IHN1Y2gKKyAgICAgY29u c3RyYWludHMgYXJlIG5vdCBlbmZvcmNlZCBvbiBpbnNlcnQgb3IgdXBkYXRl LiAgVGhvc2UgY29uc3RyYWludHMgYXJlCisgICAgICJhc3NlcnRpdmUiLCBh bmQgd29yayBvbmx5IHRvIHRlbGwgcGxhbm5lciB0aGF0IHNvbWUga2luZCBv ZiBvcHRpbWl6YXRpb24KKyAgICAgc3VjaCBhcyBjb25zdHJhaW50IGV4Y2x1 c2lvbiBjYW4gYmUgY29uc2lkZXJkLiAgVGhpcyBzZWVtcyB1c2VsZXNzLCBi dXQKKyAgICAgYWxsb3dzIHVzIHRvIHVzZSBmb3JpZWduIHRhYmxlIGFzIGNo aWxkIHRhYmxlIChzZWUKKyAgICAgPHhyZWYgbGlua2VuZD0iZGRsLWluaGVy aXQiPikgdG8gb2ZmLWxvYWQgdG8gbXVsdGlwbGUgc2VydmVycy4KKyAgICA8 L3BhcmE+CisgICA8L25vdGU+CisgCiAgICA8c2VjdDIgaWQ9ImRkbC1jb25z dHJhaW50cy1jaGVjay1jb25zdHJhaW50cyI+CiAgICAgPHRpdGxlPkNoZWNr IENvbnN0cmFpbnRzPC90aXRsZT4KICAKKioqKioqKioqKioqKioqCioqKiAy MDIxLDIwMjggKioqKiBDUkVBVEUgVEFCTEUgY2FwaXRhbHMgKAogICAgPC9w YXJhPgogIAogICAgPHBhcmE+CiEgICAgSW4gPHByb2R1Y3RuYW1lPlBvc3Rn cmVTUUw8L3Byb2R1Y3RuYW1lPiwgYSB0YWJsZSBjYW4gaW5oZXJpdCBmcm9t CiEgICAgemVybyBvciBtb3JlIG90aGVyIHRhYmxlcywgYW5kIGEgcXVlcnkg Y2FuIHJlZmVyZW5jZSBlaXRoZXIgYWxsCiAgICAgcm93cyBvZiBhIHRhYmxl IG9yIGFsbCByb3dzIG9mIGEgdGFibGUgcGx1cyBhbGwgb2YgaXRzIGRlc2Nl bmRhbnQgdGFibGVzLgogICAgIFRoZSBsYXR0ZXIgYmVoYXZpb3IgaXMgdGhl IGRlZmF1bHQuCiAgICAgRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgcXVl cnkgZmluZHMgdGhlIG5hbWVzIG9mIGFsbCBjaXRpZXMsCi0tLSAyMDMyLDIw MzkgLS0tLQogICAgPC9wYXJhPgogIAogICAgPHBhcmE+CiEgICAgSW4gPHBy b2R1Y3RuYW1lPlBvc3RncmVTUUw8L3Byb2R1Y3RuYW1lPiwgYSB0YWJsZSBv ciBmb3JlaWduIHRhYmxlIGNhbgohICAgIGluaGVyaXQgZnJvbSB6ZXJvIG9y IG1vcmUgb3RoZXIgdGFibGVzLCBhbmQgYSBxdWVyeSBjYW4gcmVmZXJlbmNl IGVpdGhlciBhbGwKICAgICByb3dzIG9mIGEgdGFibGUgb3IgYWxsIHJvd3Mg b2YgYSB0YWJsZSBwbHVzIGFsbCBvZiBpdHMgZGVzY2VuZGFudCB0YWJsZXMu CiAgICAgVGhlIGxhdHRlciBiZWhhdmlvciBpcyB0aGUgZGVmYXVsdC4KICAg ICBGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBxdWVyeSBmaW5kcyB0aGUg bmFtZXMgb2YgYWxsIGNpdGllcywKKioqIGEvZG9jL3NyYy9zZ21sL3JlZi9h bHRlcl9mb3JlaWduX3RhYmxlLnNnbWwKLS0tIGIvZG9jL3NyYy9zZ21sL3Jl Zi9hbHRlcl9mb3JlaWduX3RhYmxlLnNnbWwKKioqKioqKioqKioqKioqCioq KiA0Miw0NyAqKioqIEFMVEVSIEZPUkVJR04gVEFCTEUgWyBJRiBFWElTVFMg XSA8cmVwbGFjZWFibGUgY2xhc3M9IlBBUkFNRVRFUiI+bmFtZTwvcmVwbGFj ZWFiCi0tLSA0Miw0OSAtLS0tCiAgICAgIEFMVEVSIFsgQ09MVU1OIF0gPHJl cGxhY2VhYmxlIGNsYXNzPSJQQVJBTUVURVIiPmNvbHVtbl9uYW1lPC9yZXBs YWNlYWJsZT4gU0VUICggPHJlcGxhY2VhYmxlIGNsYXNzPSJQQVJBTUVURVIi PmF0dHJpYnV0ZV9vcHRpb248L3JlcGxhY2VhYmxlPiA9IDxyZXBsYWNlYWJs ZSBjbGFzcz0iUEFSQU1FVEVSIj52YWx1ZTwvcmVwbGFjZWFibGU+IFssIC4u LiBdICkKICAgICAgQUxURVIgWyBDT0xVTU4gXSA8cmVwbGFjZWFibGUgY2xh c3M9IlBBUkFNRVRFUiI+Y29sdW1uX25hbWU8L3JlcGxhY2VhYmxlPiBSRVNF VCAoIDxyZXBsYWNlYWJsZSBjbGFzcz0iUEFSQU1FVEVSIj5hdHRyaWJ1dGVf b3B0aW9uPC9yZXBsYWNlYWJsZT4gWywgLi4uIF0gKQogICAgICBBTFRFUiBb IENPTFVNTiBdIDxyZXBsYWNlYWJsZSBjbGFzcz0iUEFSQU1FVEVSIj5jb2x1 bW5fbmFtZTwvcmVwbGFjZWFibGU+IE9QVElPTlMgKCBbIEFERCB8IFNFVCB8 IERST1AgXSA8cmVwbGFjZWFibGUgY2xhc3M9IlBBUkFNRVRFUiI+b3B0aW9u PC9yZXBsYWNlYWJsZT4gWyc8cmVwbGFjZWFibGUgY2xhc3M9IlBBUkFNRVRF UiI+dmFsdWU8L3JlcGxhY2VhYmxlPiddIFssIC4uLiBdKQorICAgICBJTkhF UklUIDxyZXBsYWNlYWJsZSBjbGFzcz0iUEFSQU1FVEVSIj5wYXJlbnRfdGFi bGU8L3JlcGxhY2VhYmxlPgorICAgICBOTyBJTkhFUklUIDxyZXBsYWNlYWJs ZSBjbGFzcz0iUEFSQU1FVEVSIj5wYXJlbnRfdGFibGU8L3JlcGxhY2VhYmxl PgogICAgICBPV05FUiBUTyA8cmVwbGFjZWFibGUgY2xhc3M9IlBBUkFNRVRF UiI+bmV3X293bmVyPC9yZXBsYWNlYWJsZT4KICAgICAgT1BUSU9OUyAoIFsg QUREIHwgU0VUIHwgRFJPUCBdIDxyZXBsYWNlYWJsZSBjbGFzcz0iUEFSQU1F VEVSIj5vcHRpb248L3JlcGxhY2VhYmxlPiBbJzxyZXBsYWNlYWJsZSBjbGFz cz0iUEFSQU1FVEVSIj52YWx1ZTwvcmVwbGFjZWFibGU+J10gWywgLi4uIF0p CiAgPC9zeW5vcHNpcz4KKioqKioqKioqKioqKioqCioqKiAxNzgsMTgzICoq KiogQUxURVIgRk9SRUlHTiBUQUJMRSBbIElGIEVYSVNUUyBdIDxyZXBsYWNl YWJsZSBjbGFzcz0iUEFSQU1FVEVSIj5uYW1lPC9yZXBsYWNlYWIKLS0tIDE4 MCwyMDUgLS0tLQogICAgIDwvdmFybGlzdGVudHJ5PgogIAogICAgIDx2YXJs aXN0ZW50cnk+CisgICAgIDx0ZXJtPjxsaXRlcmFsPklOSEVSSVQgPHJlcGxh Y2VhYmxlIGNsYXNzPSJQQVJBTUVURVIiPnBhcmVudF90YWJsZTwvcmVwbGFj ZWFibGU+PC9saXRlcmFsPjwvdGVybT4KKyAgICAgPGxpc3RpdGVtPgorICAg ICAgPHBhcmE+CisgICAgICAgVGhpcyBmb3JtIGFkZHMgdGhlIHRhcmdldCBm b3JlaWduIHRhYmxlIGFzIGEgbmV3IGNoaWxkIG9mIHRoZSBzcGVjaWZpZWQK KyAgICAgICBwYXJlbnQgdGFibGUuICBUaGUgcGFyZW50IHRhYmxlIG11c3Qg YmUgYSBwbGFpbiB0YWJsZS4KKyAgICAgIDwvcGFyYT4KKyAgICAgPC9saXN0 aXRlbT4KKyAgICA8L3Zhcmxpc3RlbnRyeT4KKyAKKyAgICA8dmFybGlzdGVu dHJ5PgorICAgICA8dGVybT48bGl0ZXJhbD5OTyBJTkhFUklUIDxyZXBsYWNl YWJsZSBjbGFzcz0iUEFSQU1FVEVSIj5wYXJlbnRfdGFibGU8L3JlcGxhY2Vh YmxlPjwvbGl0ZXJhbD48L3Rlcm0+CisgICAgIDxsaXN0aXRlbT4KKyAgICAg IDxwYXJhPgorICAgICAgIFRoaXMgZm9ybSByZW1vdmVzIHRoZSB0YXJnZXQg Zm9yZWlnbiB0YWJsZSBmcm9tIHRoZSBsaXN0IG9mIGNoaWxkcmVuIG9mCisg ICAgICAgdGhlIHNwZWNpZmllZCBwYXJlbnQgdGFibGUuCisgICAgICA8L3Bh cmE+CisgICAgIDwvbGlzdGl0ZW0+CisgICAgPC92YXJsaXN0ZW50cnk+Cisg CisgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgPHRlcm0+PGxpdGVyYWw+T1BU SU9OUyAoIFsgQUREIHwgU0VUIHwgRFJPUCBdIDxyZXBsYWNlYWJsZSBjbGFz cz0iUEFSQU1FVEVSIj5vcHRpb248L3JlcGxhY2VhYmxlPiBbJzxyZXBsYWNl YWJsZSBjbGFzcz0iUEFSQU1FVEVSIj52YWx1ZTwvcmVwbGFjZWFibGU+J10g WywgLi4uIF0gKTwvbGl0ZXJhbD48L3Rlcm0+CiAgICAgIDxsaXN0aXRlbT4K ICAgICAgIDxwYXJhPgoqKioqKioqKioqKioqKioKKioqIDMwNiwzMTEgKioq KiBBTFRFUiBGT1JFSUdOIFRBQkxFIFsgSUYgRVhJU1RTIF0gPHJlcGxhY2Vh YmxlIGNsYXNzPSJQQVJBTUVURVIiPm5hbWU8L3JlcGxhY2VhYgotLS0gMzI4 LDM0MyAtLS0tCiAgICAgICAgIDwvcGFyYT4KICAgICAgICA8L2xpc3RpdGVt PgogICAgICAgPC92YXJsaXN0ZW50cnk+CisgCisgICAgICA8dmFybGlzdGVu dHJ5PgorICAgICAgIDx0ZXJtPjxyZXBsYWNlYWJsZSBjbGFzcz0iUEFSQU1F VEVSIj5wYXJlbnRfbmFtZTwvcmVwbGFjZWFibGU+PC90ZXJtPgorICAgICAg IDxsaXN0aXRlbT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICBBIHBhcmVu dCB0YWJsZSB0byBhc3NvY2lhdGUgb3IgZGUtYXNzb2NpYXRlIHdpdGggdGhp cyBmb3JlaWduIHRhYmxlLgorICAgICAgICAgVGhlIHBhcmVudCB0YWJsZSBt dXN0IGJlIGEgcGxhaW4gdGFibGUuCisgICAgICAgIDwvcGFyYT4KKyAgICAg ICA8L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CiAgICAgIDwv dmFyaWFibGVsaXN0PgogICA8L3JlZnNlY3QxPgogIAoqKiogYS9kb2Mvc3Jj L3NnbWwvcmVmL2NyZWF0ZV9mb3JlaWduX3RhYmxlLnNnbWwKLS0tIGIvZG9j L3NyYy9zZ21sL3JlZi9jcmVhdGVfZm9yZWlnbl90YWJsZS5zZ21sCioqKioq KioqKioqKioqKgoqKiogMjIsMjcgKioqKiBDUkVBVEUgRk9SRUlHTiBUQUJM RSBbIElGIE5PVCBFWElTVFMgXSA8cmVwbGFjZWFibGUgY2xhc3M9IlBBUkFN RVRFUiI+dGFibGVfbmFtZQotLS0gMjIsMjggLS0tLQogICAgICA8cmVwbGFj ZWFibGUgY2xhc3M9IlBBUkFNRVRFUiI+Y29sdW1uX25hbWU8L3JlcGxhY2Vh YmxlPiA8cmVwbGFjZWFibGUgY2xhc3M9IlBBUkFNRVRFUiI+ZGF0YV90eXBl PC9yZXBsYWNlYWJsZT4gWyBPUFRJT05TICggPHJlcGxhY2VhYmxlIGNsYXNz PSJQQVJBTUVURVIiPm9wdGlvbjwvcmVwbGFjZWFibGU+ICc8cmVwbGFjZWFi bGUgY2xhc3M9IlBBUkFNRVRFUiI+dmFsdWU8L3JlcGxhY2VhYmxlPicgWywg Li4uIF0gKSBdIFsgQ09MTEFURSA8cmVwbGFjZWFibGU+Y29sbGF0aW9uPC9y ZXBsYWNlYWJsZT4gXSBbIDxyZXBsYWNlYWJsZSBjbGFzcz0iUEFSQU1FVEVS Ij5jb2x1bW5fY29uc3RyYWludDwvcmVwbGFjZWFibGU+IFsgLi4uIF0gXQog ICAgICBbLCAuLi4gXQogIF0gKQorIFsgSU5IRVJJVFMgKCA8cmVwbGFjZWFi bGU+cGFyZW50X3RhYmxlPC9yZXBsYWNlYWJsZT4gWywgLi4uIF0gKSBdCiAg ICBTRVJWRVIgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnNlcnZl cl9uYW1lPC9yZXBsYWNlYWJsZT4KICBbIE9QVElPTlMgKCA8cmVwbGFjZWFi bGUgY2xhc3M9IlBBUkFNRVRFUiI+b3B0aW9uPC9yZXBsYWNlYWJsZT4gJzxy ZXBsYWNlYWJsZSBjbGFzcz0iUEFSQU1FVEVSIj52YWx1ZTwvcmVwbGFjZWFi bGU+JyBbLCAuLi4gXSApIF0KICAKKioqKioqKioqKioqKioqCioqKiAxNTks MTY0ICoqKiogQ1JFQVRFIEZPUkVJR04gVEFCTEUgWyBJRiBOT1QgRVhJU1RT IF0gPHJlcGxhY2VhYmxlIGNsYXNzPSJQQVJBTUVURVIiPnRhYmxlX25hbWUK LS0tIDE2MCwxNzcgLS0tLQogICAgIDwvdmFybGlzdGVudHJ5PgogIAogICAg IDx2YXJsaXN0ZW50cnk+CisgICAgIDx0ZXJtPjxyZXBsYWNlYWJsZSBjbGFz cz0iUEFSQU1FVEVSIj5wYXJlbnRfdGFibGU8L3JlcGxhY2VhYmxlPjwvdGVy bT4KKyAgICAgPGxpc3RpdGVtPgorICAgICAgPHBhcmE+CisgICAgICAgVGhl IG5hbWUgb2YgYW4gZXhpc3RpbmcgdGFibGUgZnJvbSB3aGljaCB0aGUgbmV3 IGZvcmVpZ24gdGFibGUKKyAgICAgICBhdXRvbWF0aWNhbGx5IGluaGVyaXRz IGFsbCBjb2x1bW5zLiAgVGhlIHNwZWNpZmllZCBwYXJlbnQgdGFibGUKKyAg ICAgICBtdXN0IGJlIGEgcGxhaW4gdGFibGUuICBTZWUgPHhyZWYgbGlua2Vu ZD0iZGRsLWluaGVyaXQiPiBmb3IgdGhlCisgICAgICAgZGV0YWlscyBvZiB0 YWJsZSBpbmhlcml0YW5jZS4KKyAgICAgIDwvcGFyYT4KKyAgICAgPC9saXN0 aXRlbT4KKyAgICA8L3Zhcmxpc3RlbnRyeT4KKyAKKyAgICA8dmFybGlzdGVu dHJ5PgogICAgICA8dGVybT48cmVwbGFjZWFibGUgY2xhc3M9IlBBUkFNRVRF UiI+c2VydmVyX25hbWU8L3JlcGxhY2VhYmxlPjwvdGVybT4KICAgICAgPGxp c3RpdGVtPgogICAgICAgPHBhcmE+CioqKiBhL3NyYy9iYWNrZW5kL2NhdGFs b2cvcGdfaW5oZXJpdHMuYwotLS0gYi9zcmMvYmFja2VuZC9jYXRhbG9nL3Bn X2luaGVyaXRzLmMKKioqKioqKioqKioqKioqCioqKiAyNTYsMjYxICoqKiog aGFzX3N1YmNsYXNzKE9pZCByZWxhdGlvbklkKQotLS0gMjU2LDMwMyAtLS0t CiAgCiAgCiAgLyoKKyAgKiBDaGVjayB3ZXRoZXIgdGhlIGluaGVyaXRhbmNl IHRyZWUgY29udGFpbnMgZm9yZWlnbiB0YWJsZShzKS4KKyAgKi8KKyBib29s CisgY29udGFpbnNfZm9yZWlnbihPaWQgcGFyZW50cmVsSWQsIExPQ0tNT0RF IGxvY2ttb2RlKQorIHsKKyAJYm9vbAkJcmVzdWx0ID0gZmFsc2U7CisgCUxp c3QJICAgKnRhYmxlT0lEczsKKyAJTGlzdENlbGwgICAqbGM7CisgCisgCS8q IEZpbmQgYWxsIG1lbWJlcnMgb2YgdGhlIGluaGVyaXRhbmNlIHRyZWUgKi8K KyAJdGFibGVPSURzID0gZmluZF9hbGxfaW5oZXJpdG9ycyhwYXJlbnRyZWxJ ZCwgbG9ja21vZGUsIE5VTEwpOworIAorIAkvKiBUaGVyZSBhcmUgbm8gY2hp bGRyZW4gKi8KKyAJaWYgKGxpc3RfbGVuZ3RoKHRhYmxlT0lEcykgPCAyKQor IAkJcmV0dXJuIHJlc3VsdDsKKyAKKyAJZm9yZWFjaChsYywgdGFibGVPSURz KQorIAl7CisgCQlPaWQJCQljaGlsZE9JRCA9IGxmaXJzdF9vaWQobGMpOwor IAkJUmVsYXRpb24JY2hpbGRyZWw7CisgCisgCQkvKiBQYXJlbnQgc2hvdWxk IG5vdCBiZSBmb3JlaWduICovCisgCQlpZiAoY2hpbGRPSUQgPT0gcGFyZW50 cmVsSWQpCisgCQkJY29udGludWU7CisgCisgCQkvKiBXZSBhbHJlYWR5IGdv dCB0aGUgbmVlZGVkIGxvY2sgKi8KKyAJCWNoaWxkcmVsID0gaGVhcF9vcGVu KGNoaWxkT0lELCBOb0xvY2spOworIAorIAkJaWYgKGNoaWxkcmVsLT5yZF9y ZWwtPnJlbGtpbmQgPT0gUkVMS0lORF9GT1JFSUdOX1RBQkxFKQorIAkJewor IAkJCS8qIEZvdW5kIGl0ICovCisgCQkJcmVzdWx0ID0gdHJ1ZTsKKyAJCX0K KyAKKyAJCWhlYXBfY2xvc2UoY2hpbGRyZWwsIGxvY2ttb2RlKTsKKyAJfQor IAorIAlyZXR1cm4gcmVzdWx0OworIH0KKyAKKyAKKyAvKgogICAqIEdpdmVu IHR3byB0eXBlIE9JRHMsIGRldGVybWluZSB3aGV0aGVyIHRoZSBmaXJzdCBp cyBhIGNvbXBsZXggdHlwZQogICAqIChjbGFzcyB0eXBlKSB0aGF0IGluaGVy aXRzIGZyb20gdGhlIHNlY29uZC4KICAgKi8KKioqIGEvc3JjL2JhY2tlbmQv Y29tbWFuZHMvYW5hbHl6ZS5jCi0tLSBiL3NyYy9iYWNrZW5kL2NvbW1hbmRz L2FuYWx5emUuYwoqKioqKioqKioqKioqKioKKioqIDExNCwxMjAgKioqKiBz dGF0aWMgRGF0dW0gaW5kX2ZldGNoX2Z1bmMoVmFjQXR0clN0YXRzUCBzdGF0 cywgaW50IHJvd251bSwgYm9vbCAqaXNOdWxsKTsKICAgKglhbmFseXplX3Jl bCgpIC0tIGFuYWx5emUgb25lIHJlbGF0aW9uCiAgICovCiAgdm9pZAohIGFu YWx5emVfcmVsKE9pZCByZWxpZCwgVmFjdXVtU3RtdCAqdmFjc3RtdCwgQnVm ZmVyQWNjZXNzU3RyYXRlZ3kgYnN0cmF0ZWd5KQogIHsKICAJUmVsYXRpb24J b25lcmVsOwogIAlpbnQJCQllbGV2ZWw7Ci0tLSAxMTQsMTIxIC0tLS0KICAg KglhbmFseXplX3JlbCgpIC0tIGFuYWx5emUgb25lIHJlbGF0aW9uCiAgICov CiAgdm9pZAohIGFuYWx5emVfcmVsKE9pZCByZWxpZCwgVmFjdXVtU3RtdCAq dmFjc3RtdCwgVmFjdXVtTW9kZSB2YWNtb2RlLAohIAkJCUJ1ZmZlckFjY2Vz c1N0cmF0ZWd5IGJzdHJhdGVneSkKICB7CiAgCVJlbGF0aW9uCW9uZXJlbDsK ICAJaW50CQkJZWxldmVsOwoqKioqKioqKioqKioqKioKKioqIDI2OSwyNzUg KioqKiBhbmFseXplX3JlbChPaWQgcmVsaWQsIFZhY3V1bVN0bXQgKnZhY3N0 bXQsIEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IGJzdHJhdGVneSkKICAJLyoKICAJ ICogSWYgdGhlcmUgYXJlIGNoaWxkIHRhYmxlcywgZG8gcmVjdXJzaXZlIEFO QUxZWkUuCiAgCSAqLwohIAlpZiAob25lcmVsLT5yZF9yZWwtPnJlbGhhc3N1 YmNsYXNzKQogIAkJZG9fYW5hbHl6ZV9yZWwob25lcmVsLCB2YWNzdG10LCBh Y3F1aXJlZnVuYywgcmVscGFnZXMsIHRydWUsIGVsZXZlbCk7CiAgCiAgCS8q Ci0tLSAyNzAsMjc4IC0tLS0KICAJLyoKICAJICogSWYgdGhlcmUgYXJlIGNo aWxkIHRhYmxlcywgZG8gcmVjdXJzaXZlIEFOQUxZWkUuCiAgCSAqLwohIAlp ZiAob25lcmVsLT5yZF9yZWwtPnJlbGhhc3N1YmNsYXNzICYmCiEgCQkodmFj bW9kZSA9PSBWQUNfTU9ERV9TSU5HTEUgfHwKISAJCSAhY29udGFpbnNfZm9y ZWlnbihSZWxhdGlvbkdldFJlbGlkKG9uZXJlbCksIEFjY2Vzc1NoYXJlTG9j aykpKQogIAkJZG9fYW5hbHl6ZV9yZWwob25lcmVsLCB2YWNzdG10LCBhY3F1 aXJlZnVuYywgcmVscGFnZXMsIHRydWUsIGVsZXZlbCk7CiAgCiAgCS8qCioq KioqKioqKioqKioqKgoqKiogMTQ1MSwxNDYyICoqKiogYWNxdWlyZV9pbmhl cml0ZWRfc2FtcGxlX3Jvd3MoUmVsYXRpb24gb25lcmVsLCBpbnQgZWxldmVs LAotLS0gMTQ1NCwxNDY4IC0tLS0KICB7CiAgCUxpc3QJICAgKnRhYmxlT0lE czsKICAJUmVsYXRpb24gICAqcmVsczsKKyAJQWNxdWlyZVNhbXBsZVJvd3NG dW5jICphY3F1aXJlZnVuYzsKICAJZG91YmxlCSAgICpyZWxibG9ja3M7CiAg CWRvdWJsZQkJdG90YWxibG9ja3M7CisgCVJlbGF0aW9uCXNhdmVkX3JlbDsK ICAJaW50CQkJbnVtcm93cywKICAJCQkJbnJlbHMsCiAgCQkJCWk7CiAgCUxp c3RDZWxsICAgKmxjOworIAlib29sCQlpc0FuYWx5emFibGUgPSB0cnVlOwog IAogIAkvKgogIAkgKiBGaW5kIGFsbCBtZW1iZXJzIG9mIGluaGVyaXRhbmNl IHNldC4gIFdlIG9ubHkgbmVlZCBBY2Nlc3NTaGFyZUxvY2sgb24KKioqKioq KioqKioqKioqCioqKiAxNDg1LDE0OTAgKioqKiBhY3F1aXJlX2luaGVyaXRl ZF9zYW1wbGVfcm93cyhSZWxhdGlvbiBvbmVyZWwsIGludCBlbGV2ZWwsCi0t LSAxNDkxLDE0OTggLS0tLQogIAkgKiBCbG9ja051bWJlciwgc28gd2UgdXNl IGRvdWJsZSBhcml0aG1ldGljLgogIAkgKi8KICAJcmVscyA9IChSZWxhdGlv biAqKSBwYWxsb2MobGlzdF9sZW5ndGgodGFibGVPSURzKSAqIHNpemVvZihS ZWxhdGlvbikpOworIAlhY3F1aXJlZnVuYyA9IChBY3F1aXJlU2FtcGxlUm93 c0Z1bmMgKikgcGFsbG9jKGxpc3RfbGVuZ3RoKHRhYmxlT0lEcykKKyAJCQkJ CQkJCQkJCSogc2l6ZW9mKEFjcXVpcmVTYW1wbGVSb3dzRnVuYykpOwogIAly ZWxibG9ja3MgPSAoZG91YmxlICopIHBhbGxvYyhsaXN0X2xlbmd0aCh0YWJs ZU9JRHMpICogc2l6ZW9mKGRvdWJsZSkpOwogIAl0b3RhbGJsb2NrcyA9IDA7 CiAgCW5yZWxzID0gMDsKKioqKioqKioqKioqKioqCioqKiAxNTA2LDE1MTcg KioqKiBhY3F1aXJlX2luaGVyaXRlZF9zYW1wbGVfcm93cyhSZWxhdGlvbiBv bmVyZWwsIGludCBlbGV2ZWwsCiAgCQl9CiAgCiAgCQlyZWxzW25yZWxzXSA9 IGNoaWxkcmVsOwohIAkJcmVsYmxvY2tzW25yZWxzXSA9IChkb3VibGUpIFJl bGF0aW9uR2V0TnVtYmVyT2ZCbG9ja3MoY2hpbGRyZWwpOwogIAkJdG90YWxi bG9ja3MgKz0gcmVsYmxvY2tzW25yZWxzXTsKICAJCW5yZWxzKys7CiAgCX0K ICAKICAJLyoKICAJICogTm93IHNhbXBsZSByb3dzIGZyb20gZWFjaCByZWxh dGlvbiwgcHJvcG9ydGlvbmFsbHkgdG8gaXRzIGZyYWN0aW9uIG9mCiAgCSAq IHRoZSB0b3RhbCBibG9jayBjb3VudC4gIChUaGlzIG1pZ2h0IGJlIGxlc3Mg dGhhbiBkZXNpcmFibGUgaWYgdGhlIGNoaWxkCiAgCSAqIHJlbHMgaGF2ZSBy YWRpY2FsbHkgZGlmZmVyZW50IGZyZWUtc3BhY2UgcGVyY2VudGFnZXMsIGJ1 dCBpdCdzIG5vdAotLS0gMTUxNCwxNTcyIC0tLS0KICAJCX0KICAKICAJCXJl bHNbbnJlbHNdID0gY2hpbGRyZWw7CiEgCiEgCQlpZiAoY2hpbGRyZWwtPnJk X3JlbC0+cmVsa2luZCAhPSBSRUxLSU5EX0ZPUkVJR05fVEFCTEUpCiEgCQl7 CiEgCQkJYWNxdWlyZWZ1bmNbbnJlbHNdID0gYWNxdWlyZV9zYW1wbGVfcm93 czsKISAJCQlyZWxibG9ja3NbbnJlbHNdID0gKGRvdWJsZSkgUmVsYXRpb25H ZXROdW1iZXJPZkJsb2NrcyhjaGlsZHJlbCk7CiEgCQl9CiEgCQllbHNlCiEg CQl7CiEgCQkJLyoKISAJCQkgKiBGb3IgYSBmb3JlaWduIHRhYmxlLCBjYWxs IHRoZSBGRFcncyBob29rIGZ1bmN0aW9uIHRvIHNlZSB3aGV0aGVyCiEgCQkJ ICogaXQgc3VwcG9ydHMgYW5hbHlzaXMuCiEgCQkJICovCiEgCQkJRmR3Um91 dGluZSAqZmR3cm91dGluZTsKISAJCQlCbG9ja051bWJlciByZWxwYWdlcyA9 IDA7CiEgCQkJYm9vbAkJb2sgPSBmYWxzZTsKISAKISAJCQlmZHdyb3V0aW5l ID0gR2V0RmR3Um91dGluZUZvclJlbGF0aW9uKGNoaWxkcmVsLCBmYWxzZSk7 CiEgCQkJaWYgKGZkd3JvdXRpbmUtPkFuYWx5emVGb3JlaWduVGFibGUgIT0g TlVMTCkKISAJCQkJb2sgPSBmZHdyb3V0aW5lLT5BbmFseXplRm9yZWlnblRh YmxlKGNoaWxkcmVsLAohIAkJCQkJCQkJCQkJCQkgJmFjcXVpcmVmdW5jW25y ZWxzXSwKISAJCQkJCQkJCQkJCQkJICZyZWxwYWdlcyk7CiEgCQkJaWYgKCFv aykKISAJCQl7CiEgCQkJCWlzQW5hbHl6YWJsZSA9IGZhbHNlOwohIAkJCQli cmVhazsKISAJCQl9CiEgCiEgCQkJcmVsYmxvY2tzW25yZWxzXSA9IChkb3Vi bGUpIHJlbHBhZ2VzOwohIAkJfQohIAogIAkJdG90YWxibG9ja3MgKz0gcmVs YmxvY2tzW25yZWxzXTsKICAJCW5yZWxzKys7CiAgCX0KICAKICAJLyoKKyAJ ICogSWYgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGZvcmVpZ24gdGFibGUgdGhh dCBjYW5ub3QgYmUgYW5hbHl6ZWQsIGdpdmUgdXAuCisgCSAqLworIAlpZiAo IWlzQW5hbHl6YWJsZSkKKyAJeworIAkJZXJlcG9ydChXQVJOSU5HLAorIAkJ CQkoZXJybXNnKCJza2lwcGluZyBcIiVzXCIgaW5oZXJpdGFuY2UgdHJlZSAt LS0gY2Fubm90IGFuYWx5emUgZm9yZWlnbiB0YWJsZSBcIiVzXCIiLAorIAkJ CQkJCVJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKG9uZXJlbCksCisgCQkJCQkJ UmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVsc1tucmVsc10pKSkpOworIAkJ Zm9yIChpID0gMDsgaSA8IG5yZWxzOyBpKyspCisgCQl7CisgCQkJUmVsYXRp b24JY2hpbGRyZWwgPSByZWxzW2ldOworIAorIAkJCWhlYXBfY2xvc2UoY2hp bGRyZWwsIE5vTG9jayk7CisgCQl9CisgCQlyZXR1cm4gMDsKKyAJfQorIAor IAkvKgogIAkgKiBOb3cgc2FtcGxlIHJvd3MgZnJvbSBlYWNoIHJlbGF0aW9u LCBwcm9wb3J0aW9uYWxseSB0byBpdHMgZnJhY3Rpb24gb2YKICAJICogdGhl IHRvdGFsIGJsb2NrIGNvdW50LiAgKFRoaXMgbWlnaHQgYmUgbGVzcyB0aGFu IGRlc2lyYWJsZSBpZiB0aGUgY2hpbGQKICAJICogcmVscyBoYXZlIHJhZGlj YWxseSBkaWZmZXJlbnQgZnJlZS1zcGFjZSBwZXJjZW50YWdlcywgYnV0IGl0 J3Mgbm90CioqKioqKioqKioqKioqKgoqKiogMTUyNCwxNTI5ICoqKiogYWNx dWlyZV9pbmhlcml0ZWRfc2FtcGxlX3Jvd3MoUmVsYXRpb24gb25lcmVsLCBp bnQgZWxldmVsLAotLS0gMTU3OSwxNTg1IC0tLS0KICAJewogIAkJUmVsYXRp b24JY2hpbGRyZWwgPSByZWxzW2ldOwogIAkJZG91YmxlCQljaGlsZGJsb2Nr cyA9IHJlbGJsb2Nrc1tpXTsKKyAJCUFjcXVpcmVTYW1wbGVSb3dzRnVuYyBj aGlsZGFjcXVpcmVmdW5jID0gYWNxdWlyZWZ1bmNbaV07CiAgCiAgCQlpZiAo Y2hpbGRibG9ja3MgPiAwKQogIAkJewoqKioqKioqKioqKioqKioKKioqIDE1 MzksMTU1MCAqKioqIGFjcXVpcmVfaW5oZXJpdGVkX3NhbXBsZV9yb3dzKFJl bGF0aW9uIG9uZXJlbCwgaW50IGVsZXZlbCwKICAJCQkJCQkJdGRyb3dzOwog IAogIAkJCQkvKiBGZXRjaCBhIHJhbmRvbSBzYW1wbGUgb2YgdGhlIGNoaWxk J3Mgcm93cyAqLwohIAkJCQljaGlsZHJvd3MgPSBhY3F1aXJlX3NhbXBsZV9y b3dzKGNoaWxkcmVsLAohIAkJCQkJCQkJCQkJCWVsZXZlbCwKISAJCQkJCQkJ CQkJCQlyb3dzICsgbnVtcm93cywKISAJCQkJCQkJCQkJCQljaGlsZHRhcmdy b3dzLAohIAkJCQkJCQkJCQkJCSZ0cm93cywKISAJCQkJCQkJCQkJCQkmdGRy b3dzKTsKICAKICAJCQkJLyogV2UgbWF5IG5lZWQgdG8gY29udmVydCBmcm9t IGNoaWxkJ3Mgcm93dHlwZSB0byBwYXJlbnQncyAqLwogIAkJCQlpZiAoY2hp bGRyb3dzID4gMCAmJgotLS0gMTU5NSwxNjA2IC0tLS0KICAJCQkJCQkJdGRy b3dzOwogIAogIAkJCQkvKiBGZXRjaCBhIHJhbmRvbSBzYW1wbGUgb2YgdGhl IGNoaWxkJ3Mgcm93cyAqLwohIAkJCQljaGlsZHJvd3MgPSBjaGlsZGFjcXVp cmVmdW5jKGNoaWxkcmVsLAohIAkJCQkJCQkJCQkJIGVsZXZlbCwKISAJCQkJ CQkJCQkJCSByb3dzICsgbnVtcm93cywKISAJCQkJCQkJCQkJCSBjaGlsZHRh cmdyb3dzLAohIAkJCQkJCQkJCQkJICZ0cm93cywKISAJCQkJCQkJCQkJCSAm dGRyb3dzKTsKICAKICAJCQkJLyogV2UgbWF5IG5lZWQgdG8gY29udmVydCBm cm9tIGNoaWxkJ3Mgcm93dHlwZSB0byBwYXJlbnQncyAqLwogIAkJCQlpZiAo Y2hpbGRyb3dzID4gMCAmJgoqKiogYS9zcmMvYmFja2VuZC9jb21tYW5kcy90 YWJsZWNtZHMuYwotLS0gYi9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNt ZHMuYwoqKioqKioqKioqKioqKioKKioqIDMxMCwzMTYgKioqKiBzdGF0aWMg QWx0ZXJlZFRhYmxlSW5mbyAqQVRHZXRRdWV1ZUVudHJ5KExpc3QgKip3cXVl dWUsIFJlbGF0aW9uIHJlbCk7CiAgc3RhdGljIHZvaWQgQVRTaW1wbGVQZXJt aXNzaW9ucyhSZWxhdGlvbiByZWwsIGludCBhbGxvd2VkX3RhcmdldHMpOwog IHN0YXRpYyB2b2lkIEFUV3JvbmdSZWxraW5kRXJyb3IoUmVsYXRpb24gcmVs LCBpbnQgYWxsb3dlZF90YXJnZXRzKTsKICBzdGF0aWMgdm9pZCBBVFNpbXBs ZVJlY3Vyc2lvbihMaXN0ICoqd3F1ZXVlLCBSZWxhdGlvbiByZWwsCiEgCQkJ CSAgQWx0ZXJUYWJsZUNtZCAqY21kLCBib29sIHJlY3Vyc2UsIExPQ0tNT0RF IGxvY2ttb2RlKTsKICBzdGF0aWMgdm9pZCBBVFR5cGVkVGFibGVSZWN1cnNp b24oTGlzdCAqKndxdWV1ZSwgUmVsYXRpb24gcmVsLCBBbHRlclRhYmxlQ21k ICpjbWQsCiAgCQkJCQkgIExPQ0tNT0RFIGxvY2ttb2RlKTsKICBzdGF0aWMg TGlzdCAqZmluZF90eXBlZF90YWJsZV9kZXBlbmRlbmNpZXMoT2lkIHR5cGVP aWQsIGNvbnN0IGNoYXIgKnR5cGVOYW1lLAotLS0gMzEwLDMxNyAtLS0tCiAg c3RhdGljIHZvaWQgQVRTaW1wbGVQZXJtaXNzaW9ucyhSZWxhdGlvbiByZWws IGludCBhbGxvd2VkX3RhcmdldHMpOwogIHN0YXRpYyB2b2lkIEFUV3JvbmdS ZWxraW5kRXJyb3IoUmVsYXRpb24gcmVsLCBpbnQgYWxsb3dlZF90YXJnZXRz KTsKICBzdGF0aWMgdm9pZCBBVFNpbXBsZVJlY3Vyc2lvbihMaXN0ICoqd3F1 ZXVlLCBSZWxhdGlvbiByZWwsCiEgCQkJCSAgQWx0ZXJUYWJsZUNtZCAqY21k LCBib29sIHJlY3Vyc2UsCiEgCQkJCSAgYm9vbCBpbmNsdWRlX2ZvcmVpZ24s IExPQ0tNT0RFIGxvY2ttb2RlKTsKICBzdGF0aWMgdm9pZCBBVFR5cGVkVGFi bGVSZWN1cnNpb24oTGlzdCAqKndxdWV1ZSwgUmVsYXRpb24gcmVsLCBBbHRl clRhYmxlQ21kICpjbWQsCiAgCQkJCQkgIExPQ0tNT0RFIGxvY2ttb2RlKTsK ICBzdGF0aWMgTGlzdCAqZmluZF90eXBlZF90YWJsZV9kZXBlbmRlbmNpZXMo T2lkIHR5cGVPaWQsIGNvbnN0IGNoYXIgKnR5cGVOYW1lLAoqKioqKioqKioq KioqKioKKioqIDQ2NSw0NzQgKioqKiBEZWZpbmVSZWxhdGlvbihDcmVhdGVT dG10ICpzdG10LCBjaGFyIHJlbGtpbmQsIE9pZCBvd25lcklkKQogIAkJZXJl cG9ydChFUlJPUiwKICAJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1RB QkxFX0RFRklOSVRJT04pLAogIAkJCQkgZXJybXNnKCJPTiBDT01NSVQgY2Fu IG9ubHkgYmUgdXNlZCBvbiB0ZW1wb3JhcnkgdGFibGVzIikpKTsKLSAJaWYg KHN0bXQtPmNvbnN0cmFpbnRzICE9IE5JTCAmJiByZWxraW5kID09IFJFTEtJ TkRfRk9SRUlHTl9UQUJMRSkKLSAJCWVyZXBvcnQoRVJST1IsCi0gCQkJCShl cnJjb2RlKEVSUkNPREVfV1JPTkdfT0JKRUNUX1RZUEUpLAotIAkJCQkgZXJy bXNnKCJjb25zdHJhaW50cyBhcmUgbm90IHN1cHBvcnRlZCBvbiBmb3JlaWdu IHRhYmxlcyIpKSk7CiAgCiAgCS8qCiAgCSAqIExvb2sgdXAgdGhlIG5hbWVz cGFjZSBpbiB3aGljaCB3ZSBhcmUgc3VwcG9zZWQgdG8gY3JlYXRlIHRoZSBy ZWxhdGlvbiwKLS0tIDQ2Niw0NzEgLS0tLQoqKioqKioqKioqKioqKioKKioq IDMwMTQsMzAzNyAqKioqIEFUUHJlcENtZChMaXN0ICoqd3F1ZXVlLCBSZWxh dGlvbiByZWwsIEFsdGVyVGFibGVDbWQgKmNtZCwKICAJCQkgKiBydWxlcy4K ICAJCQkgKi8KICAJCQlBVFNpbXBsZVBlcm1pc3Npb25zKHJlbCwgQVRUX1RB QkxFIHwgQVRUX1ZJRVcgfCBBVFRfRk9SRUlHTl9UQUJMRSk7CiEgCQkJQVRT aW1wbGVSZWN1cnNpb24od3F1ZXVlLCByZWwsIGNtZCwgcmVjdXJzZSwgbG9j a21vZGUpOwogIAkJCS8qIE5vIGNvbW1hbmQtc3BlY2lmaWMgcHJlcCBuZWVk ZWQgKi8KICAJCQlwYXNzID0gY21kLT5kZWYgPyBBVF9QQVNTX0FERF9DT05T VFIgOiBBVF9QQVNTX0RST1A7CiAgCQkJYnJlYWs7CiAgCQljYXNlIEFUX0Ry b3BOb3ROdWxsOgkvKiBBTFRFUiBDT0xVTU4gRFJPUCBOT1QgTlVMTCAqLwog IAkJCUFUU2ltcGxlUGVybWlzc2lvbnMocmVsLCBBVFRfVEFCTEUgfCBBVFRf Rk9SRUlHTl9UQUJMRSk7CiEgCQkJQVRTaW1wbGVSZWN1cnNpb24od3F1ZXVl LCByZWwsIGNtZCwgcmVjdXJzZSwgbG9ja21vZGUpOwogIAkJCS8qIE5vIGNv bW1hbmQtc3BlY2lmaWMgcHJlcCBuZWVkZWQgKi8KICAJCQlwYXNzID0gQVRf UEFTU19EUk9QOwogIAkJCWJyZWFrOwogIAkJY2FzZSBBVF9TZXROb3ROdWxs OgkJLyogQUxURVIgQ09MVU1OIFNFVCBOT1QgTlVMTCAqLwogIAkJCUFUU2lt cGxlUGVybWlzc2lvbnMocmVsLCBBVFRfVEFCTEUgfCBBVFRfRk9SRUlHTl9U QUJMRSk7CiEgCQkJQVRTaW1wbGVSZWN1cnNpb24od3F1ZXVlLCByZWwsIGNt ZCwgcmVjdXJzZSwgbG9ja21vZGUpOwogIAkJCS8qIE5vIGNvbW1hbmQtc3Bl Y2lmaWMgcHJlcCBuZWVkZWQgKi8KICAJCQlwYXNzID0gQVRfUEFTU19BRERf Q09OU1RSOwogIAkJCWJyZWFrOwogIAkJY2FzZSBBVF9TZXRTdGF0aXN0aWNz OgkvKiBBTFRFUiBDT0xVTU4gU0VUIFNUQVRJU1RJQ1MgKi8KISAJCQlBVFNp bXBsZVJlY3Vyc2lvbih3cXVldWUsIHJlbCwgY21kLCByZWN1cnNlLCBsb2Nr bW9kZSk7CiAgCQkJLyogUGVyZm9ybXMgb3duIHBlcm1pc3Npb24gY2hlY2tz ICovCiAgCQkJQVRQcmVwU2V0U3RhdGlzdGljcyhyZWwsIGNtZC0+bmFtZSwg Y21kLT5kZWYsIGxvY2ttb2RlKTsKICAJCQlwYXNzID0gQVRfUEFTU19NSVND OwotLS0gMzAxMSwzMDM4IC0tLS0KICAJCQkgKiBydWxlcy4KICAJCQkgKi8K ICAJCQlBVFNpbXBsZVBlcm1pc3Npb25zKHJlbCwgQVRUX1RBQkxFIHwgQVRU X1ZJRVcgfCBBVFRfRk9SRUlHTl9UQUJMRSk7CiEgCQkJLyogUmVjdXJzZXMg dG8gY2hpbGQgdGFibGVzIHRoYXQgYXJlIGZvcmVpZ24sIHRvbyAqLwohIAkJ CUFUU2ltcGxlUmVjdXJzaW9uKHdxdWV1ZSwgcmVsLCBjbWQsIHJlY3Vyc2Us IHRydWUsIGxvY2ttb2RlKTsKICAJCQkvKiBObyBjb21tYW5kLXNwZWNpZmlj IHByZXAgbmVlZGVkICovCiAgCQkJcGFzcyA9IGNtZC0+ZGVmID8gQVRfUEFT U19BRERfQ09OU1RSIDogQVRfUEFTU19EUk9QOwogIAkJCWJyZWFrOwogIAkJ Y2FzZSBBVF9Ecm9wTm90TnVsbDoJLyogQUxURVIgQ09MVU1OIERST1AgTk9U IE5VTEwgKi8KICAJCQlBVFNpbXBsZVBlcm1pc3Npb25zKHJlbCwgQVRUX1RB QkxFIHwgQVRUX0ZPUkVJR05fVEFCTEUpOwohIAkJCS8qIFJlY3Vyc2VzIHRv IGNoaWxkIHRhYmxlcyB0aGF0IGFyZSBmb3JlaWduLCB0b28gKi8KISAJCQlB VFNpbXBsZVJlY3Vyc2lvbih3cXVldWUsIHJlbCwgY21kLCByZWN1cnNlLCB0 cnVlLCBsb2NrbW9kZSk7CiAgCQkJLyogTm8gY29tbWFuZC1zcGVjaWZpYyBw cmVwIG5lZWRlZCAqLwogIAkJCXBhc3MgPSBBVF9QQVNTX0RST1A7CiAgCQkJ YnJlYWs7CiAgCQljYXNlIEFUX1NldE5vdE51bGw6CQkvKiBBTFRFUiBDT0xV TU4gU0VUIE5PVCBOVUxMICovCiAgCQkJQVRTaW1wbGVQZXJtaXNzaW9ucyhy ZWwsIEFUVF9UQUJMRSB8IEFUVF9GT1JFSUdOX1RBQkxFKTsKISAJCQkvKiBS ZWN1cnNlcyB0byBjaGlsZCB0YWJsZXMgdGhhdCBhcmUgZm9yZWlnbiwgdG9v ICovCiEgCQkJQVRTaW1wbGVSZWN1cnNpb24od3F1ZXVlLCByZWwsIGNtZCwg cmVjdXJzZSwgdHJ1ZSwgbG9ja21vZGUpOwogIAkJCS8qIE5vIGNvbW1hbmQt c3BlY2lmaWMgcHJlcCBuZWVkZWQgKi8KICAJCQlwYXNzID0gQVRfUEFTU19B RERfQ09OU1RSOwogIAkJCWJyZWFrOwogIAkJY2FzZSBBVF9TZXRTdGF0aXN0 aWNzOgkvKiBBTFRFUiBDT0xVTU4gU0VUIFNUQVRJU1RJQ1MgKi8KISAJCQkv KiBSZWN1cnNlcyB0byBjaGlsZCB0YWJsZXMgdGhhdCBhcmUgZm9yZWlnbiwg dG9vICovCiEgCQkJQVRTaW1wbGVSZWN1cnNpb24od3F1ZXVlLCByZWwsIGNt ZCwgcmVjdXJzZSwgdHJ1ZSwgbG9ja21vZGUpOwogIAkJCS8qIFBlcmZvcm1z IG93biBwZXJtaXNzaW9uIGNoZWNrcyAqLwogIAkJCUFUUHJlcFNldFN0YXRp c3RpY3MocmVsLCBjbWQtPm5hbWUsIGNtZC0+ZGVmLCBsb2NrbW9kZSk7CiAg CQkJcGFzcyA9IEFUX1BBU1NfTUlTQzsKKioqKioqKioqKioqKioqCioqKiAz MDQ0LDMwNTAgKioqKiBBVFByZXBDbWQoTGlzdCAqKndxdWV1ZSwgUmVsYXRp b24gcmVsLCBBbHRlclRhYmxlQ21kICpjbWQsCiAgCQkJYnJlYWs7CiAgCQlj YXNlIEFUX1NldFN0b3JhZ2U6CQkvKiBBTFRFUiBDT0xVTU4gU0VUIFNUT1JB R0UgKi8KICAJCQlBVFNpbXBsZVBlcm1pc3Npb25zKHJlbCwgQVRUX1RBQkxF IHwgQVRUX01BVFZJRVcpOwohIAkJCUFUU2ltcGxlUmVjdXJzaW9uKHdxdWV1 ZSwgcmVsLCBjbWQsIHJlY3Vyc2UsIGxvY2ttb2RlKTsKICAJCQkvKiBObyBj b21tYW5kLXNwZWNpZmljIHByZXAgbmVlZGVkICovCiAgCQkJcGFzcyA9IEFU X1BBU1NfTUlTQzsKICAJCQlicmVhazsKLS0tIDMwNDUsMzA1MiAtLS0tCiAg CQkJYnJlYWs7CiAgCQljYXNlIEFUX1NldFN0b3JhZ2U6CQkvKiBBTFRFUiBD T0xVTU4gU0VUIFNUT1JBR0UgKi8KICAJCQlBVFNpbXBsZVBlcm1pc3Npb25z KHJlbCwgQVRUX1RBQkxFIHwgQVRUX01BVFZJRVcpOwohIAkJCS8qIERvbid0 IHJlY3Vyc2UgdG8gY2hpbGQgdGFibGVzIHRoYXQgYXJlIGZvcmVpZ24gKi8K ISAJCQlBVFNpbXBsZVJlY3Vyc2lvbih3cXVldWUsIHJlbCwgY21kLCByZWN1 cnNlLCBmYWxzZSwgbG9ja21vZGUpOwogIAkJCS8qIE5vIGNvbW1hbmQtc3Bl Y2lmaWMgcHJlcCBuZWVkZWQgKi8KICAJCQlwYXNzID0gQVRfUEFTU19NSVND OwogIAkJCWJyZWFrOwoqKioqKioqKioqKioqKioKKioqIDMwNjIsMzA2OCAq KioqIEFUUHJlcENtZChMaXN0ICoqd3F1ZXVlLCBSZWxhdGlvbiByZWwsIEFs dGVyVGFibGVDbWQgKmNtZCwKICAJCQlwYXNzID0gQVRfUEFTU19BRERfSU5E RVg7CiAgCQkJYnJlYWs7CiAgCQljYXNlIEFUX0FkZENvbnN0cmFpbnQ6CS8q IEFERCBDT05TVFJBSU5UICovCiEgCQkJQVRTaW1wbGVQZXJtaXNzaW9ucyhy ZWwsIEFUVF9UQUJMRSk7CiAgCQkJLyogUmVjdXJzaW9uIG9jY3VycyBkdXJp bmcgZXhlY3V0aW9uIHBoYXNlICovCiAgCQkJLyogTm8gY29tbWFuZC1zcGVj aWZpYyBwcmVwIG5lZWRlZCBleGNlcHQgc2F2aW5nIHJlY3Vyc2UgZmxhZyAq LwogIAkJCWlmIChyZWN1cnNlKQotLS0gMzA2NCwzMDcwIC0tLS0KICAJCQlw YXNzID0gQVRfUEFTU19BRERfSU5ERVg7CiAgCQkJYnJlYWs7CiAgCQljYXNl IEFUX0FkZENvbnN0cmFpbnQ6CS8qIEFERCBDT05TVFJBSU5UICovCiEgCQkJ QVRTaW1wbGVQZXJtaXNzaW9ucyhyZWwsIEFUVF9UQUJMRSB8IEFUVF9GT1JF SUdOX1RBQkxFKTsKICAJCQkvKiBSZWN1cnNpb24gb2NjdXJzIGR1cmluZyBl eGVjdXRpb24gcGhhc2UgKi8KICAJCQkvKiBObyBjb21tYW5kLXNwZWNpZmlj IHByZXAgbmVlZGVkIGV4Y2VwdCBzYXZpbmcgcmVjdXJzZSBmbGFnICovCiAg CQkJaWYgKHJlY3Vyc2UpCioqKioqKioqKioqKioqKgoqKiogMzA3NiwzMDgy ICoqKiogQVRQcmVwQ21kKExpc3QgKip3cXVldWUsIFJlbGF0aW9uIHJlbCwg QWx0ZXJUYWJsZUNtZCAqY21kLAogIAkJCXBhc3MgPSBBVF9QQVNTX0FERF9D T05TVFI7CiAgCQkJYnJlYWs7CiAgCQljYXNlIEFUX0Ryb3BDb25zdHJhaW50 OgkvKiBEUk9QIENPTlNUUkFJTlQgKi8KISAJCQlBVFNpbXBsZVBlcm1pc3Np b25zKHJlbCwgQVRUX1RBQkxFKTsKICAJCQkvKiBSZWN1cnNpb24gb2NjdXJz IGR1cmluZyBleGVjdXRpb24gcGhhc2UgKi8KICAJCQkvKiBObyBjb21tYW5k LXNwZWNpZmljIHByZXAgbmVlZGVkIGV4Y2VwdCBzYXZpbmcgcmVjdXJzZSBm bGFnICovCiAgCQkJaWYgKHJlY3Vyc2UpCi0tLSAzMDc4LDMwODQgLS0tLQog IAkJCXBhc3MgPSBBVF9QQVNTX0FERF9DT05TVFI7CiAgCQkJYnJlYWs7CiAg CQljYXNlIEFUX0Ryb3BDb25zdHJhaW50OgkvKiBEUk9QIENPTlNUUkFJTlQg Ki8KISAJCQlBVFNpbXBsZVBlcm1pc3Npb25zKHJlbCwgQVRUX1RBQkxFIHwg QVRUX0ZPUkVJR05fVEFCTEUpOwogIAkJCS8qIFJlY3Vyc2lvbiBvY2N1cnMg ZHVyaW5nIGV4ZWN1dGlvbiBwaGFzZSAqLwogIAkJCS8qIE5vIGNvbW1hbmQt c3BlY2lmaWMgcHJlcCBuZWVkZWQgZXhjZXB0IHNhdmluZyByZWN1cnNlIGZs YWcgKi8KICAJCQlpZiAocmVjdXJzZSkKKioqKioqKioqKioqKioqCioqKiAz MTQ0LDMxNTYgKioqKiBBVFByZXBDbWQoTGlzdCAqKndxdWV1ZSwgUmVsYXRp b24gcmVsLCBBbHRlclRhYmxlQ21kICpjbWQsCiAgCQkJcGFzcyA9IEFUX1BB U1NfTUlTQzsKICAJCQlicmVhazsKICAJCWNhc2UgQVRfQWRkSW5oZXJpdDoJ CS8qIElOSEVSSVQgKi8KISAJCQlBVFNpbXBsZVBlcm1pc3Npb25zKHJlbCwg QVRUX1RBQkxFKTsKICAJCQkvKiBUaGlzIGNvbW1hbmQgbmV2ZXIgcmVjdXJz ZXMgKi8KICAJCQlBVFByZXBBZGRJbmhlcml0KHJlbCk7CiAgCQkJcGFzcyA9 IEFUX1BBU1NfTUlTQzsKICAJCQlicmVhazsKICAJCWNhc2UgQVRfQWx0ZXJD b25zdHJhaW50OgkJLyogQUxURVIgQ09OU1RSQUlOVCAqLwohIAkJCUFUU2lt cGxlUGVybWlzc2lvbnMocmVsLCBBVFRfVEFCTEUpOwogIAkJCXBhc3MgPSBB VF9QQVNTX01JU0M7CiAgCQkJYnJlYWs7CiAgCQljYXNlIEFUX1ZhbGlkYXRl Q29uc3RyYWludDoJCS8qIFZBTElEQVRFIENPTlNUUkFJTlQgKi8KLS0tIDMx NDYsMzE2NCAtLS0tCiAgCQkJcGFzcyA9IEFUX1BBU1NfTUlTQzsKICAJCQli cmVhazsKICAJCWNhc2UgQVRfQWRkSW5oZXJpdDoJCS8qIElOSEVSSVQgKi8K ISAJCQlBVFNpbXBsZVBlcm1pc3Npb25zKHJlbCwgQVRUX1RBQkxFIHwgQVRU X0ZPUkVJR05fVEFCTEUpOwogIAkJCS8qIFRoaXMgY29tbWFuZCBuZXZlciBy ZWN1cnNlcyAqLwogIAkJCUFUUHJlcEFkZEluaGVyaXQocmVsKTsKICAJCQlw YXNzID0gQVRfUEFTU19NSVNDOwogIAkJCWJyZWFrOworIAkJY2FzZSBBVF9E cm9wSW5oZXJpdDoJLyogTk8gSU5IRVJJVCAqLworIAkJCUFUU2ltcGxlUGVy bWlzc2lvbnMocmVsLCBBVFRfVEFCTEUgfCBBVFRfRk9SRUlHTl9UQUJMRSk7 CisgCQkJLyogVGhpcyBjb21tYW5kIG5ldmVyIHJlY3Vyc2VzICovCisgCQkJ LyogTm8gY29tbWFuZC1zcGVjaWZpYyBwcmVwIG5lZWRlZCAqLworIAkJCXBh c3MgPSBBVF9QQVNTX01JU0M7CisgCQkJYnJlYWs7CiAgCQljYXNlIEFUX0Fs dGVyQ29uc3RyYWludDoJCS8qIEFMVEVSIENPTlNUUkFJTlQgKi8KISAJCQlB VFNpbXBsZVBlcm1pc3Npb25zKHJlbCwgQVRUX1RBQkxFIHwgQVRUX0ZPUkVJ R05fVEFCTEUpOwogIAkJCXBhc3MgPSBBVF9QQVNTX01JU0M7CiAgCQkJYnJl YWs7CiAgCQljYXNlIEFUX1ZhbGlkYXRlQ29uc3RyYWludDoJCS8qIFZBTElE QVRFIENPTlNUUkFJTlQgKi8KKioqKioqKioqKioqKioqCioqKiAzMTc5LDMx ODUgKioqKiBBVFByZXBDbWQoTGlzdCAqKndxdWV1ZSwgUmVsYXRpb24gcmVs LCBBbHRlclRhYmxlQ21kICpjbWQsCiAgCQljYXNlIEFUX0VuYWJsZUFsd2F5 c1J1bGU6CiAgCQljYXNlIEFUX0VuYWJsZVJlcGxpY2FSdWxlOgogIAkJY2Fz ZSBBVF9EaXNhYmxlUnVsZToKLSAJCWNhc2UgQVRfRHJvcEluaGVyaXQ6CS8q IE5PIElOSEVSSVQgKi8KICAJCWNhc2UgQVRfQWRkT2Y6CQkJLyogT0YgKi8K ICAJCWNhc2UgQVRfRHJvcE9mOiAvKiBOT1QgT0YgKi8KICAJCQlBVFNpbXBs ZVBlcm1pc3Npb25zKHJlbCwgQVRUX1RBQkxFKTsKLS0tIDMxODcsMzE5MiAt LS0tCioqKioqKioqKioqKioqKgoqKiogNDEyMCw0MTI2ICoqKiogQVRXcm9u Z1JlbGtpbmRFcnJvcihSZWxhdGlvbiByZWwsIGludCBhbGxvd2VkX3Rhcmdl dHMpCiAgICovCiAgc3RhdGljIHZvaWQKICBBVFNpbXBsZVJlY3Vyc2lvbihM aXN0ICoqd3F1ZXVlLCBSZWxhdGlvbiByZWwsCiEgCQkJCSAgQWx0ZXJUYWJs ZUNtZCAqY21kLCBib29sIHJlY3Vyc2UsIExPQ0tNT0RFIGxvY2ttb2RlKQog IHsKICAJLyoKICAJICogUHJvcGFnYXRlIHRvIGNoaWxkcmVuIGlmIGRlc2ly ZWQuICBOb24tdGFibGUgcmVsYXRpb25zIG5ldmVyIGhhdmUKLS0tIDQxMjcs NDEzNCAtLS0tCiAgICovCiAgc3RhdGljIHZvaWQKICBBVFNpbXBsZVJlY3Vy c2lvbihMaXN0ICoqd3F1ZXVlLCBSZWxhdGlvbiByZWwsCiEgCQkJCSAgQWx0 ZXJUYWJsZUNtZCAqY21kLCBib29sIHJlY3Vyc2UsCiEgCQkJCSAgYm9vbCBp bmNsdWRlX2ZvcmVpZ24sIExPQ0tNT0RFIGxvY2ttb2RlKQogIHsKICAJLyoK ICAJICogUHJvcGFnYXRlIHRvIGNoaWxkcmVuIGlmIGRlc2lyZWQuICBOb24t dGFibGUgcmVsYXRpb25zIG5ldmVyIGhhdmUKKioqKioqKioqKioqKioqCioq KiA0MTQ4LDQxNTUgKioqKiBBVFNpbXBsZVJlY3Vyc2lvbihMaXN0ICoqd3F1 ZXVlLCBSZWxhdGlvbiByZWwsCiAgCQkJCWNvbnRpbnVlOwogIAkJCS8qIGZp bmRfYWxsX2luaGVyaXRvcnMgYWxyZWFkeSBnb3QgbG9jayAqLwogIAkJCWNo aWxkcmVsID0gcmVsYXRpb25fb3BlbihjaGlsZHJlbGlkLCBOb0xvY2spOwoh IAkJCUNoZWNrVGFibGVOb3RJblVzZShjaGlsZHJlbCwgIkFMVEVSIFRBQkxF Iik7CiEgCQkJQVRQcmVwQ21kKHdxdWV1ZSwgY2hpbGRyZWwsIGNtZCwgZmFs c2UsIHRydWUsIGxvY2ttb2RlKTsKICAJCQlyZWxhdGlvbl9jbG9zZShjaGls ZHJlbCwgTm9Mb2NrKTsKICAJCX0KICAJfQotLS0gNDE1Niw0MTY3IC0tLS0K ICAJCQkJY29udGludWU7CiAgCQkJLyogZmluZF9hbGxfaW5oZXJpdG9ycyBh bHJlYWR5IGdvdCBsb2NrICovCiAgCQkJY2hpbGRyZWwgPSByZWxhdGlvbl9v cGVuKGNoaWxkcmVsaWQsIE5vTG9jayk7CiEgCQkJaWYgKGNoaWxkcmVsLT5y ZF9yZWwtPnJlbGtpbmQgIT0gUkVMS0lORF9GT1JFSUdOX1RBQkxFCiEgCQkJ CXx8IGluY2x1ZGVfZm9yZWlnbikKISAJCQl7CiEgCQkJCUNoZWNrVGFibGVO b3RJblVzZShjaGlsZHJlbCwgIkFMVEVSIFRBQkxFIik7CiEgCQkJCUFUUHJl cENtZCh3cXVldWUsIGNoaWxkcmVsLCBjbWQsIGZhbHNlLCB0cnVlLCBsb2Nr bW9kZSk7CiEgCQkJfQogIAkJCXJlbGF0aW9uX2Nsb3NlKGNoaWxkcmVsLCBO b0xvY2spOwogIAkJfQogIAl9CioqKioqKioqKioqKioqKgoqKiogNDQzOSw0 NDQ1ICoqKiogQVRFeGVjQWRkQ29sdW1uKExpc3QgKip3cXVldWUsIEFsdGVy ZWRUYWJsZUluZm8gKnRhYiwgUmVsYXRpb24gcmVsLAogIAogIAkvKiBBdCB0 b3AgbGV2ZWwsIHBlcm1pc3Npb24gY2hlY2sgd2FzIGRvbmUgaW4gQVRQcmVw Q21kLCBlbHNlIGRvIGl0ICovCiAgCWlmIChyZWN1cnNpbmcpCiEgCQlBVFNp bXBsZVBlcm1pc3Npb25zKHJlbCwgQVRUX1RBQkxFKTsKICAKICAJYXR0cmRl c2MgPSBoZWFwX29wZW4oQXR0cmlidXRlUmVsYXRpb25JZCwgUm93RXhjbHVz aXZlTG9jayk7CiAgCi0tLSA0NDUxLDQ0NTcgLS0tLQogIAogIAkvKiBBdCB0 b3AgbGV2ZWwsIHBlcm1pc3Npb24gY2hlY2sgd2FzIGRvbmUgaW4gQVRQcmVw Q21kLCBlbHNlIGRvIGl0ICovCiAgCWlmIChyZWN1cnNpbmcpCiEgCQlBVFNp bXBsZVBlcm1pc3Npb25zKHJlbCwgQVRUX1RBQkxFIHwgQVRUX0ZPUkVJR05f VEFCTEUpOwogIAogIAlhdHRyZGVzYyA9IGhlYXBfb3BlbihBdHRyaWJ1dGVS ZWxhdGlvbklkLCBSb3dFeGNsdXNpdmVMb2NrKTsKICAKKioqKioqKioqKioq KioqCioqKiA0ODU0LDQ4NjAgKioqKiBBVFByZXBBZGRPaWRzKExpc3QgKip3 cXVldWUsIFJlbGF0aW9uIHJlbCwgYm9vbCByZWN1cnNlLCBBbHRlclRhYmxl Q21kICpjbWQsIExPQwotLS0gNDg2Niw0ODg0IC0tLS0KICAJQVRQcmVwQWRk Q29sdW1uKHdxdWV1ZSwgcmVsLCByZWN1cnNlLCBmYWxzZSwgY21kLCBsb2Nr bW9kZSk7CiAgCiAgCWlmIChyZWN1cnNlKQorIAl7CisgCQkvKgorIAkJICog RG9uJ3QgYWxsb3cgdG8gYWRkIGFuIE9JRCBjb2x1bW4gdG8gaW5oZXJpdGFu Y2UgdHJlZSB0aGF0IGNvbnRhaW5zCisgCQkgKiBmb3JlaWduIHRhYmxlKHMp CisgCQkgKi8KKyAJICBpZiAoY29udGFpbnNfZm9yZWlnbihSZWxhdGlvbkdl dFJlbGlkKHJlbCksIEFjY2Vzc1NoYXJlTG9jaykpCisgCQkJZXJlcG9ydChF UlJPUiwKKyAJCQkJCShlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQ UE9SVEVEKSwKKyAJCQkJCSBlcnJtc2coImNhbm5vdCBhZGQgT0lEIGNvbHVt biB0byBpbmhlcml0YW5jZSB0cmVlIFwiJXNcIiBiZWNhdXNlIGl0IGNvbnRh aW5zIGZvcmVpZ24gdGFibGUocykiLAorIAkJCQkJCQlSZWxhdGlvbkdldFJl bGF0aW9uTmFtZShyZWwpKSkpOworIAogIAkJY21kLT5zdWJ0eXBlID0gQVRf QWRkT2lkc1JlY3Vyc2U7CisgCX0KICB9CiAgCiAgLyoKKioqKioqKioqKioq KioqCioqKiA1MzM1LDUzNDEgKioqKiBBVEV4ZWNEcm9wQ29sdW1uKExpc3Qg Kip3cXVldWUsIFJlbGF0aW9uIHJlbCwgY29uc3QgY2hhciAqY29sTmFtZSwK ICAKICAJLyogQXQgdG9wIGxldmVsLCBwZXJtaXNzaW9uIGNoZWNrIHdhcyBk b25lIGluIEFUUHJlcENtZCwgZWxzZSBkbyBpdCAqLwogIAlpZiAocmVjdXJz aW5nKQohIAkJQVRTaW1wbGVQZXJtaXNzaW9ucyhyZWwsIEFUVF9UQUJMRSk7 CiAgCiAgCS8qCiAgCSAqIGdldCB0aGUgbnVtYmVyIG9mIHRoZSBhdHRyaWJ1 dGUKLS0tIDUzNTksNTM2NSAtLS0tCiAgCiAgCS8qIEF0IHRvcCBsZXZlbCwg cGVybWlzc2lvbiBjaGVjayB3YXMgZG9uZSBpbiBBVFByZXBDbWQsIGVsc2Ug ZG8gaXQgKi8KICAJaWYgKHJlY3Vyc2luZykKISAJCUFUU2ltcGxlUGVybWlz c2lvbnMocmVsLCBBVFRfVEFCTEUgfCBBVFRfRk9SRUlHTl9UQUJMRSk7CiAg CiAgCS8qCiAgCSAqIGdldCB0aGUgbnVtYmVyIG9mIHRoZSBhdHRyaWJ1dGUK KioqKioqKioqKioqKioqCioqKiA1NzI2LDU3MzIgKioqKiBBVEFkZENoZWNr Q29uc3RyYWludChMaXN0ICoqd3F1ZXVlLCBBbHRlcmVkVGFibGVJbmZvICp0 YWIsIFJlbGF0aW9uIHJlbCwKICAKICAJLyogQXQgdG9wIGxldmVsLCBwZXJt aXNzaW9uIGNoZWNrIHdhcyBkb25lIGluIEFUUHJlcENtZCwgZWxzZSBkbyBp dCAqLwogIAlpZiAocmVjdXJzaW5nKQohIAkJQVRTaW1wbGVQZXJtaXNzaW9u cyhyZWwsIEFUVF9UQUJMRSk7CiAgCiAgCS8qCiAgCSAqIENhbGwgQWRkUmVs YXRpb25OZXdDb25zdHJhaW50cyB0byBkbyB0aGUgd29yaywgbWFraW5nIHN1 cmUgaXQgd29ya3Mgb24KLS0tIDU3NTAsNTc2MyAtLS0tCiAgCiAgCS8qIEF0 IHRvcCBsZXZlbCwgcGVybWlzc2lvbiBjaGVjayB3YXMgZG9uZSBpbiBBVFBy ZXBDbWQsIGVsc2UgZG8gaXQgKi8KICAJaWYgKHJlY3Vyc2luZykKISAJCUFU U2ltcGxlUGVybWlzc2lvbnMocmVsLCBBVFRfVEFCTEUgfCBBVFRfRk9SRUlH Tl9UQUJMRSk7CiEgCiEgCS8qIERvbid0IGFsbG93IEFERCBjb25zdHJhaW50 IE5PVCBWQUxJRCBvbiBmb3JlaWduIHRhYmxlcyAqLwohIAlpZiAodGFiLT5y ZWxraW5kID09IFJFTEtJTkRfRk9SRUlHTl9UQUJMRSAmJgohIAkJY29uc3Ry LT5za2lwX3ZhbGlkYXRpb24gJiYgIXJlY3Vyc2luZykKISAJCWVyZXBvcnQo RVJST1IsCiEgCQkJCShlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQ UE9SVEVEKSwKISAJCQkJIGVycm1zZygiTk9UIFZBTElEIGlzIG5vdCBzdXBw b3J0ZWQgb24gZm9yZWlnbiB0YWJsZXMiKSkpOwogIAogIAkvKgogIAkgKiBD YWxsIEFkZFJlbGF0aW9uTmV3Q29uc3RyYWludHMgdG8gZG8gdGhlIHdvcmss IG1ha2luZyBzdXJlIGl0IHdvcmtzIG9uCioqKioqKioqKioqKioqKgoqKiog NTczNyw1NzQ1ICoqKiogQVRBZGRDaGVja0NvbnN0cmFpbnQoTGlzdCAqKndx dWV1ZSwgQWx0ZXJlZFRhYmxlSW5mbyAqdGFiLCBSZWxhdGlvbiByZWwsCiAg CSAqIG9taXR0ZWQgZnJvbSB0aGUgcmV0dXJuZWQgbGlzdCwgd2hpY2ggaXMg d2hhdCB3ZSB3YW50OiB3ZSBkbyBub3QgbmVlZAogIAkgKiB0byBkbyBhbnkg dmFsaWRhdGlvbiB3b3JrLiAgVGhhdCBjYW4gb25seSBoYXBwZW4gYXQgY2hp bGQgdGFibGVzLAogIAkgKiB0aG91Z2gsIHNpbmNlIHdlIGRpc2FsbG93IG1l cmdpbmcgYXQgdGhlIHRvcCBsZXZlbC4KICAJICovCiAgCW5ld2NvbnMgPSBB ZGRSZWxhdGlvbk5ld0NvbnN0cmFpbnRzKHJlbCwgTklMLAohIAkJCQkJCQkJ CQlsaXN0X21ha2UxKGNvcHlPYmplY3QoY29uc3RyKSksCiAgCQkJCQkJCQkJ CXJlY3Vyc2luZywJCS8qIGFsbG93X21lcmdlICovCiAgCQkJCQkJCQkJCSFy ZWN1cnNpbmcsCQkvKiBpc19sb2NhbCAqLwogIAkJCQkJCQkJCQlpc19yZWFk ZCk7CQkvKiBpc19pbnRlcm5hbCAqLwotLS0gNTc2OCw1Nzg0IC0tLS0KICAJ ICogb21pdHRlZCBmcm9tIHRoZSByZXR1cm5lZCBsaXN0LCB3aGljaCBpcyB3 aGF0IHdlIHdhbnQ6IHdlIGRvIG5vdCBuZWVkCiAgCSAqIHRvIGRvIGFueSB2 YWxpZGF0aW9uIHdvcmsuICBUaGF0IGNhbiBvbmx5IGhhcHBlbiBhdCBjaGls ZCB0YWJsZXMsCiAgCSAqIHRob3VnaCwgc2luY2Ugd2UgZGlzYWxsb3cgbWVy Z2luZyBhdCB0aGUgdG9wIGxldmVsLgorIAkgKgorIAkgKiBXaGVuIHByb3Bh Z2F0aW5nIGEgTk9UIFZBTElEIG9wdGlvbiB0byBjaGlsZHJlbiB0aGF0IGFy ZSBmb3JlaWduIHRhYmxlcywKKyAJICogd2UgcXVpZXRseSBpZ25vcmUgdGhl IG9wdGlvbi4gIE5vdGUgdGhhdCB0aGlzIGlzIHNhZmUgYmVjYXVzZSBmb3Jl aWduCisgCSAqIHRhYmxlcyBkb24ndCBoYXZlIGFueSBjaGlsZHJlbi4KICAJ ICovCisgCWNvbnN0ciA9IGNvcHlPYmplY3QoY29uc3RyKTsKKyAJaWYgKHRh Yi0+cmVsa2luZCA9PSBSRUxLSU5EX0ZPUkVJR05fVEFCTEUgJiYKKyAJCWNv bnN0ci0+c2tpcF92YWxpZGF0aW9uICYmIHJlY3Vyc2luZykKKyAJCWNvbnN0 ci0+c2tpcF92YWxpZGF0aW9uID0gZmFsc2U7CiAgCW5ld2NvbnMgPSBBZGRS ZWxhdGlvbk5ld0NvbnN0cmFpbnRzKHJlbCwgTklMLAohIAkJCQkJCQkJCQls aXN0X21ha2UxKGNvbnN0ciksCiAgCQkJCQkJCQkJCXJlY3Vyc2luZywJCS8q IGFsbG93X21lcmdlICovCiAgCQkJCQkJCQkJCSFyZWN1cnNpbmcsCQkvKiBp c19sb2NhbCAqLwogIAkJCQkJCQkJCQlpc19yZWFkZCk7CQkvKiBpc19pbnRl cm5hbCAqLwoqKioqKioqKioqKioqKioKKioqIDcyMTUsNzIyMSAqKioqIEFU RXhlY0Ryb3BDb25zdHJhaW50KFJlbGF0aW9uIHJlbCwgY29uc3QgY2hhciAq Y29uc3RyTmFtZSwKICAKICAJLyogQXQgdG9wIGxldmVsLCBwZXJtaXNzaW9u IGNoZWNrIHdhcyBkb25lIGluIEFUUHJlcENtZCwgZWxzZSBkbyBpdCAqLwog IAlpZiAocmVjdXJzaW5nKQohIAkJQVRTaW1wbGVQZXJtaXNzaW9ucyhyZWws IEFUVF9UQUJMRSk7CiAgCiAgCWNvbnJlbCA9IGhlYXBfb3BlbihDb25zdHJh aW50UmVsYXRpb25JZCwgUm93RXhjbHVzaXZlTG9jayk7CiAgCi0tLSA3MjU0 LDcyNjAgLS0tLQogIAogIAkvKiBBdCB0b3AgbGV2ZWwsIHBlcm1pc3Npb24g Y2hlY2sgd2FzIGRvbmUgaW4gQVRQcmVwQ21kLCBlbHNlIGRvIGl0ICovCiAg CWlmIChyZWN1cnNpbmcpCiEgCQlBVFNpbXBsZVBlcm1pc3Npb25zKHJlbCwg QVRUX1RBQkxFIHwgQVRUX0ZPUkVJR05fVEFCTEUpOwogIAogIAljb25yZWwg PSBoZWFwX29wZW4oQ29uc3RyYWludFJlbGF0aW9uSWQsIFJvd0V4Y2x1c2l2 ZUxvY2spOwogIAoqKioqKioqKioqKioqKioKKioqIDc1NTAsNzU1NiAqKioq IEFUUHJlcEFsdGVyQ29sdW1uVHlwZShMaXN0ICoqd3F1ZXVlLAogIAkgKiBh bHRlciB3b3VsZCBwdXQgdGhlbSBvdXQgb2Ygc3RlcC4KICAJICovCiAgCWlm IChyZWN1cnNlKQohIAkJQVRTaW1wbGVSZWN1cnNpb24od3F1ZXVlLCByZWws IGNtZCwgcmVjdXJzZSwgbG9ja21vZGUpOwogIAllbHNlIGlmICghcmVjdXJz aW5nICYmCiAgCQkJIGZpbmRfaW5oZXJpdGFuY2VfY2hpbGRyZW4oUmVsYXRp b25HZXRSZWxpZChyZWwpLCBOb0xvY2spICE9IE5JTCkKICAJCWVyZXBvcnQo RVJST1IsCi0tLSA3NTg5LDc1OTggLS0tLQogIAkgKiBhbHRlciB3b3VsZCBw dXQgdGhlbSBvdXQgb2Ygc3RlcC4KICAJICovCiAgCWlmIChyZWN1cnNlKQoh IAl7CiEgCQkvKiBSZWN1cnNlcyB0byBjaGlsZCB0YWJsZXMgdGhhdCBhcmUg Zm9yZWlnbiwgdG9vICovCiEgCQlBVFNpbXBsZVJlY3Vyc2lvbih3cXVldWUs IHJlbCwgY21kLCByZWN1cnNlLCB0cnVlLCBsb2NrbW9kZSk7CiEgCX0KICAJ ZWxzZSBpZiAoIXJlY3Vyc2luZyAmJgogIAkJCSBmaW5kX2luaGVyaXRhbmNl X2NoaWxkcmVuKFJlbGF0aW9uR2V0UmVsaWQocmVsKSwgTm9Mb2NrKSAhPSBO SUwpCiAgCQllcmVwb3J0KEVSUk9SLAoqKiogYS9zcmMvYmFja2VuZC9jb21t YW5kcy92YWN1dW0uYwotLS0gYi9zcmMvYmFja2VuZC9jb21tYW5kcy92YWN1 dW0uYwoqKioqKioqKioqKioqKioKKioqIDk2LDEwMSAqKioqIHZhY3V1bShW YWN1dW1TdG10ICp2YWNzdG10LCBPaWQgcmVsaWQsIGJvb2wgZG9fdG9hc3Qs Ci0tLSA5NiwxMDIgLS0tLQogIAkgICBCdWZmZXJBY2Nlc3NTdHJhdGVneSBi c3RyYXRlZ3ksIGJvb2wgZm9yX3dyYXBhcm91bmQsIGJvb2wgaXNUb3BMZXZl bCkKICB7CiAgCWNvbnN0IGNoYXIgKnN0bXR0eXBlOworIAlWYWN1dW1Nb2Rl CXZhY21vZGU7CiAgCXZvbGF0aWxlIGJvb2wgaW5fb3V0ZXJfeGFjdCwKICAJ CQkJdXNlX293bl94YWN0czsKICAJTGlzdAkgICAqcmVsYXRpb25zOwoqKioq KioqKioqKioqKioKKioqIDE0NCwxNDkgKioqKiB2YWN1dW0oVmFjdXVtU3Rt dCAqdmFjc3RtdCwgT2lkIHJlbGlkLCBib29sIGRvX3RvYXN0LAotLS0gMTQ1 LDE2NCAtLS0tCiAgCQkJCQkJCQkJCUFMTE9DU0VUX0RFRkFVTFRfTUFYU0la RSk7CiAgCiAgCS8qCisgCSAqIElkZW50aWZ5IHZhY3V1bSBtb2RlLiAgSWYg cmVsaWQgaXMgbm90IEludmFsaWRPaWQsIHRoZSBjYWxsZXIgc2hvdWxkIGJl CisgCSAqIGFuIGF1dG92YWN1dW0gd29ya2VyLiAgU2VlIHRoZSBhYm92ZSBj b21tZW50cy4KKyAJICovCisgCWlmIChyZWxpZCAhPSBJbnZhbGlkT2lkKQor IAkJdmFjbW9kZSA9IFZBQ19NT0RFX0FVVE9WQUNVVU07CisgCWVsc2UKKyAJ eworIAkJaWYgKCF2YWNzdG10LT5yZWxhdGlvbikKKyAJCQl2YWNtb2RlID0g VkFDX01PREVfQUxMOworIAkJZWxzZQorIAkJCXZhY21vZGUgPSBWQUNfTU9E RV9TSU5HTEU7CisgCX0KKyAKKyAJLyoKICAJICogSWYgY2FsbGVyIGRpZG4n dCBnaXZlIHVzIGEgYnVmZmVyIHN0cmF0ZWd5IG9iamVjdCwgbWFrZSBvbmUg aW4gdGhlCiAgCSAqIGNyb3NzLXRyYW5zYWN0aW9uIG1lbW9yeSBjb250ZXh0 LgogIAkgKi8KKioqKioqKioqKioqKioqCioqKiAyNDYsMjUyICoqKiogdmFj dXVtKFZhY3V1bVN0bXQgKnZhY3N0bXQsIE9pZCByZWxpZCwgYm9vbCBkb190 b2FzdCwKICAJCQkJCVB1c2hBY3RpdmVTbmFwc2hvdChHZXRUcmFuc2FjdGlv blNuYXBzaG90KCkpOwogIAkJCQl9CiAgCiEgCQkJCWFuYWx5emVfcmVsKHJl bGlkLCB2YWNzdG10LCB2YWNfc3RyYXRlZ3kpOwogIAogIAkJCQlpZiAodXNl X293bl94YWN0cykKICAJCQkJewotLS0gMjYxLDI2NyAtLS0tCiAgCQkJCQlQ dXNoQWN0aXZlU25hcHNob3QoR2V0VHJhbnNhY3Rpb25TbmFwc2hvdCgpKTsK ICAJCQkJfQogIAohIAkJCQlhbmFseXplX3JlbChyZWxpZCwgdmFjc3RtdCwg dmFjbW9kZSwgdmFjX3N0cmF0ZWd5KTsKICAKICAJCQkJaWYgKHVzZV9vd25f eGFjdHMpCiAgCQkJCXsKKioqIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3By ZXAvcHJlcHVuaW9uLmMKLS0tIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3By ZXAvcHJlcHVuaW9uLmMKKioqKioqKioqKioqKioqCioqKiAxMzM3LDEzNDcg KioqKiBleHBhbmRfaW5oZXJpdGVkX3J0ZW50cnkoUGxhbm5lckluZm8gKnJv b3QsIFJhbmdlVGJsRW50cnkgKnJ0ZSwgSW5kZXggcnRpKQogIAkJLyoKICAJ CSAqIEJ1aWxkIGFuIFJURSBmb3IgdGhlIGNoaWxkLCBhbmQgYXR0YWNoIHRv IHF1ZXJ5J3MgcmFuZ2V0YWJsZSBsaXN0LgogIAkJICogV2UgY29weSBtb3N0 IGZpZWxkcyBvZiB0aGUgcGFyZW50J3MgUlRFLCBidXQgcmVwbGFjZSByZWxh dGlvbiBPSUQsCiEgCQkgKiBhbmQgc2V0IGluaCA9IGZhbHNlLiAgQWxzbywg c2V0IHJlcXVpcmVkUGVybXMgdG8gemVybyBzaW5jZSBhbGwKISAJCSAqIHJl cXVpcmVkIHBlcm1pc3Npb25zIGNoZWNrcyBhcmUgZG9uZSBvbiB0aGUgb3Jp Z2luYWwgUlRFLgogIAkJICovCiAgCQljaGlsZHJ0ZSA9IGNvcHlPYmplY3Qo cnRlKTsKICAJCWNoaWxkcnRlLT5yZWxpZCA9IGNoaWxkT0lEOwogIAkJY2hp bGRydGUtPmluaCA9IGZhbHNlOwogIAkJY2hpbGRydGUtPnJlcXVpcmVkUGVy bXMgPSAwOwogIAkJcGFyc2UtPnJ0YWJsZSA9IGxhcHBlbmQocGFyc2UtPnJ0 YWJsZSwgY2hpbGRydGUpOwotLS0gMTMzNywxMzQ4IC0tLS0KICAJCS8qCiAg CQkgKiBCdWlsZCBhbiBSVEUgZm9yIHRoZSBjaGlsZCwgYW5kIGF0dGFjaCB0 byBxdWVyeSdzIHJhbmdldGFibGUgbGlzdC4KICAJCSAqIFdlIGNvcHkgbW9z dCBmaWVsZHMgb2YgdGhlIHBhcmVudCdzIFJURSwgYnV0IHJlcGxhY2UgcmVs YXRpb24gT0lELAohIAkJICogcmVsa2luZCBhbmQgc2V0IGluaCA9IGZhbHNl LiAgQWxzbywgc2V0IHJlcXVpcmVkUGVybXMgdG8gemVybyBzaW5jZQohIAkJ ICogYWxsIHJlcXVpcmVkIHBlcm1pc3Npb25zIGNoZWNrcyBhcmUgZG9uZSBv biB0aGUgb3JpZ2luYWwgUlRFLgogIAkJICovCiAgCQljaGlsZHJ0ZSA9IGNv cHlPYmplY3QocnRlKTsKICAJCWNoaWxkcnRlLT5yZWxpZCA9IGNoaWxkT0lE OworIAkJY2hpbGRydGUtPnJlbGtpbmQgPSBuZXdyZWxhdGlvbi0+cmRfcmVs LT5yZWxraW5kOwogIAkJY2hpbGRydGUtPmluaCA9IGZhbHNlOwogIAkJY2hp bGRydGUtPnJlcXVpcmVkUGVybXMgPSAwOwogIAkJcGFyc2UtPnJ0YWJsZSA9 IGxhcHBlbmQocGFyc2UtPnJ0YWJsZSwgY2hpbGRydGUpOwoqKiogYS9zcmMv YmFja2VuZC9wYXJzZXIvZ3JhbS55Ci0tLSBiL3NyYy9iYWNrZW5kL3BhcnNl ci9ncmFtLnkKKioqKioqKioqKioqKioqCioqKiA0MjA3LDQyMzggKioqKiBB bHRlckZvcmVpZ25TZXJ2ZXJTdG10OiBBTFRFUiBTRVJWRVIgbmFtZSBmb3Jl aWduX3NlcnZlcl92ZXJzaW9uIGFsdGVyX2dlbmVyaWNfbwogIENyZWF0ZUZv cmVpZ25UYWJsZVN0bXQ6CiAgCQlDUkVBVEUgRk9SRUlHTiBUQUJMRSBxdWFs aWZpZWRfbmFtZQogIAkJCScoJyBPcHRUYWJsZUVsZW1lbnRMaXN0ICcpJwoh IAkJCVNFUlZFUiBuYW1lIGNyZWF0ZV9nZW5lcmljX29wdGlvbnMKICAJCQkJ ewogIAkJCQkJQ3JlYXRlRm9yZWlnblRhYmxlU3RtdCAqbiA9IG1ha2VOb2Rl KENyZWF0ZUZvcmVpZ25UYWJsZVN0bXQpOwogIAkJCQkJJDQtPnJlbHBlcnNp c3RlbmNlID0gUkVMUEVSU0lTVEVOQ0VfUEVSTUFORU5UOwogIAkJCQkJbi0+ YmFzZS5yZWxhdGlvbiA9ICQ0OwogIAkJCQkJbi0+YmFzZS50YWJsZUVsdHMg PSAkNjsKISAJCQkJCW4tPmJhc2UuaW5oUmVsYXRpb25zID0gTklMOwogIAkJ CQkJbi0+YmFzZS5pZl9ub3RfZXhpc3RzID0gZmFsc2U7CiAgCQkJCQkvKiBG RFctc3BlY2lmaWMgZGF0YSAqLwohIAkJCQkJbi0+c2VydmVybmFtZSA9ICQ5 OwohIAkJCQkJbi0+b3B0aW9ucyA9ICQxMDsKICAJCQkJCSQkID0gKE5vZGUg KikgbjsKICAJCQkJfQogIAkJfCBDUkVBVEUgRk9SRUlHTiBUQUJMRSBJRl9Q IE5PVCBFWElTVFMgcXVhbGlmaWVkX25hbWUKICAJCQknKCcgT3B0VGFibGVF bGVtZW50TGlzdCAnKScKISAJCQlTRVJWRVIgbmFtZSBjcmVhdGVfZ2VuZXJp Y19vcHRpb25zCiAgCQkJCXsKICAJCQkJCUNyZWF0ZUZvcmVpZ25UYWJsZVN0 bXQgKm4gPSBtYWtlTm9kZShDcmVhdGVGb3JlaWduVGFibGVTdG10KTsKICAJ CQkJCSQ3LT5yZWxwZXJzaXN0ZW5jZSA9IFJFTFBFUlNJU1RFTkNFX1BFUk1B TkVOVDsKICAJCQkJCW4tPmJhc2UucmVsYXRpb24gPSAkNzsKICAJCQkJCW4t PmJhc2UudGFibGVFbHRzID0gJDk7CiEgCQkJCQluLT5iYXNlLmluaFJlbGF0 aW9ucyA9IE5JTDsKICAJCQkJCW4tPmJhc2UuaWZfbm90X2V4aXN0cyA9IHRy dWU7CiAgCQkJCQkvKiBGRFctc3BlY2lmaWMgZGF0YSAqLwohIAkJCQkJbi0+ c2VydmVybmFtZSA9ICQxMjsKISAJCQkJCW4tPm9wdGlvbnMgPSAkMTM7CiAg CQkJCQkkJCA9IChOb2RlICopIG47CiAgCQkJCX0KICAJCTsKLS0tIDQyMDcs NDIzOCAtLS0tCiAgQ3JlYXRlRm9yZWlnblRhYmxlU3RtdDoKICAJCUNSRUFU RSBGT1JFSUdOIFRBQkxFIHF1YWxpZmllZF9uYW1lCiAgCQkJJygnIE9wdFRh YmxlRWxlbWVudExpc3QgJyknCiEgCQkJT3B0SW5oZXJpdCBTRVJWRVIgbmFt ZSBjcmVhdGVfZ2VuZXJpY19vcHRpb25zCiAgCQkJCXsKICAJCQkJCUNyZWF0 ZUZvcmVpZ25UYWJsZVN0bXQgKm4gPSBtYWtlTm9kZShDcmVhdGVGb3JlaWdu VGFibGVTdG10KTsKICAJCQkJCSQ0LT5yZWxwZXJzaXN0ZW5jZSA9IFJFTFBF UlNJU1RFTkNFX1BFUk1BTkVOVDsKICAJCQkJCW4tPmJhc2UucmVsYXRpb24g PSAkNDsKICAJCQkJCW4tPmJhc2UudGFibGVFbHRzID0gJDY7CiEgCQkJCQlu LT5iYXNlLmluaFJlbGF0aW9ucyA9ICQ4OwogIAkJCQkJbi0+YmFzZS5pZl9u b3RfZXhpc3RzID0gZmFsc2U7CiAgCQkJCQkvKiBGRFctc3BlY2lmaWMgZGF0 YSAqLwohIAkJCQkJbi0+c2VydmVybmFtZSA9ICQxMDsKISAJCQkJCW4tPm9w dGlvbnMgPSAkMTE7CiAgCQkJCQkkJCA9IChOb2RlICopIG47CiAgCQkJCX0K ICAJCXwgQ1JFQVRFIEZPUkVJR04gVEFCTEUgSUZfUCBOT1QgRVhJU1RTIHF1 YWxpZmllZF9uYW1lCiAgCQkJJygnIE9wdFRhYmxlRWxlbWVudExpc3QgJykn CiEgCQkJT3B0SW5oZXJpdCBTRVJWRVIgbmFtZSBjcmVhdGVfZ2VuZXJpY19v cHRpb25zCiAgCQkJCXsKICAJCQkJCUNyZWF0ZUZvcmVpZ25UYWJsZVN0bXQg Km4gPSBtYWtlTm9kZShDcmVhdGVGb3JlaWduVGFibGVTdG10KTsKICAJCQkJ CSQ3LT5yZWxwZXJzaXN0ZW5jZSA9IFJFTFBFUlNJU1RFTkNFX1BFUk1BTkVO VDsKICAJCQkJCW4tPmJhc2UucmVsYXRpb24gPSAkNzsKICAJCQkJCW4tPmJh c2UudGFibGVFbHRzID0gJDk7CiEgCQkJCQluLT5iYXNlLmluaFJlbGF0aW9u cyA9ICQxMTsKICAJCQkJCW4tPmJhc2UuaWZfbm90X2V4aXN0cyA9IHRydWU7 CiAgCQkJCQkvKiBGRFctc3BlY2lmaWMgZGF0YSAqLwohIAkJCQkJbi0+c2Vy dmVybmFtZSA9ICQxMzsKISAJCQkJCW4tPm9wdGlvbnMgPSAkMTQ7CiAgCQkJ CQkkJCA9IChOb2RlICopIG47CiAgCQkJCX0KICAJCTsKKioqIGEvc3JjL2Jh Y2tlbmQvcGFyc2VyL3BhcnNlX3V0aWxjbWQuYwotLS0gYi9zcmMvYmFja2Vu ZC9wYXJzZXIvcGFyc2VfdXRpbGNtZC5jCioqKioqKioqKioqKioqKgoqKiog NTE1LDUyNiAqKioqIHRyYW5zZm9ybUNvbHVtbkRlZmluaXRpb24oQ3JlYXRl U3RtdENvbnRleHQgKmN4dCwgQ29sdW1uRGVmICpjb2x1bW4pCiAgCQkJCWJy ZWFrOwogIAogIAkJCWNhc2UgQ09OU1RSX0NIRUNLOgotIAkJCQlpZiAoY3h0 LT5pc2ZvcmVpZ24pCi0gCQkJCQllcmVwb3J0KEVSUk9SLAotIAkJCQkJCQko ZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCi0gCQkJ CQllcnJtc2coImNvbnN0cmFpbnRzIGFyZSBub3Qgc3VwcG9ydGVkIG9uIGZv cmVpZ24gdGFibGVzIiksCi0gCQkJCQkJCSBwYXJzZXJfZXJycG9zaXRpb24o Y3h0LT5wc3RhdGUsCi0gCQkJCQkJCQkJCQkJY29uc3RyYWludC0+bG9jYXRp b24pKSk7CiAgCQkJCWN4dC0+Y2tjb25zdHJhaW50cyA9IGxhcHBlbmQoY3h0 LT5ja2NvbnN0cmFpbnRzLCBjb25zdHJhaW50KTsKICAJCQkJYnJlYWs7CiAg Ci0tLSA1MTUsNTIwIC0tLS0KKioqKioqKioqKioqKioqCioqKiA1MjksNTM1 ICoqKiogdHJhbnNmb3JtQ29sdW1uRGVmaW5pdGlvbihDcmVhdGVTdG10Q29u dGV4dCAqY3h0LCBDb2x1bW5EZWYgKmNvbHVtbikKICAJCQkJaWYgKGN4dC0+ aXNmb3JlaWduKQogIAkJCQkJZXJlcG9ydChFUlJPUiwKICAJCQkJCQkJKGVy cmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAohIAkJCQkJ ZXJybXNnKCJjb25zdHJhaW50cyBhcmUgbm90IHN1cHBvcnRlZCBvbiBmb3Jl aWduIHRhYmxlcyIpLAogIAkJCQkJCQkgcGFyc2VyX2VycnBvc2l0aW9uKGN4 dC0+cHN0YXRlLAogIAkJCQkJCQkJCQkJCWNvbnN0cmFpbnQtPmxvY2F0aW9u KSkpOwogIAkJCQlpZiAoY29uc3RyYWludC0+a2V5cyA9PSBOSUwpCi0tLSA1 MjMsNTI5IC0tLS0KICAJCQkJaWYgKGN4dC0+aXNmb3JlaWduKQogIAkJCQkJ ZXJlcG9ydChFUlJPUiwKICAJCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFU VVJFX05PVF9TVVBQT1JURUQpLAohIAkJCQkJZXJybXNnKCJwcmltYXJ5IGtl eSBvciB1bmlxdWUgY29uc3RyYWludHMgYXJlIG5vdCBzdXBwb3J0ZWQgb24g Zm9yZWlnbiB0YWJsZXMiKSwKICAJCQkJCQkJIHBhcnNlcl9lcnJwb3NpdGlv bihjeHQtPnBzdGF0ZSwKICAJCQkJCQkJCQkJCQljb25zdHJhaW50LT5sb2Nh dGlvbikpKTsKICAJCQkJaWYgKGNvbnN0cmFpbnQtPmtleXMgPT0gTklMKQoq KioqKioqKioqKioqKioKKioqIDU0Niw1NTIgKioqKiB0cmFuc2Zvcm1Db2x1 bW5EZWZpbml0aW9uKENyZWF0ZVN0bXRDb250ZXh0ICpjeHQsIENvbHVtbkRl ZiAqY29sdW1uKQogIAkJCQlpZiAoY3h0LT5pc2ZvcmVpZ24pCiAgCQkJCQll cmVwb3J0KEVSUk9SLAogIAkJCQkJCQkoZXJyY29kZShFUlJDT0RFX0ZFQVRV UkVfTk9UX1NVUFBPUlRFRCksCiEgCQkJCQllcnJtc2coImNvbnN0cmFpbnRz IGFyZSBub3Qgc3VwcG9ydGVkIG9uIGZvcmVpZ24gdGFibGVzIiksCiAgCQkJ CQkJCSBwYXJzZXJfZXJycG9zaXRpb24oY3h0LT5wc3RhdGUsCiAgCQkJCQkJ CQkJCQkJY29uc3RyYWludC0+bG9jYXRpb24pKSk7CiAgCi0tLSA1NDAsNTQ2 IC0tLS0KICAJCQkJaWYgKGN4dC0+aXNmb3JlaWduKQogIAkJCQkJZXJlcG9y dChFUlJPUiwKICAJCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05P VF9TVVBQT1JURUQpLAohIAkJCQkJZXJybXNnKCJmb3JlaWduIGtleSBjb25z dHJhaW50cyBhcmUgbm90IHN1cHBvcnRlZCBvbiBmb3JlaWduIHRhYmxlcyIp LAogIAkJCQkJCQkgcGFyc2VyX2VycnBvc2l0aW9uKGN4dC0+cHN0YXRlLAog IAkJCQkJCQkJCQkJCWNvbnN0cmFpbnQtPmxvY2F0aW9uKSkpOwogIAoqKioq KioqKioqKioqKioKKioqIDYwNSw2MTQgKioqKiB0cmFuc2Zvcm1Db2x1bW5E ZWZpbml0aW9uKENyZWF0ZVN0bXRDb250ZXh0ICpjeHQsIENvbHVtbkRlZiAq Y29sdW1uKQogIHN0YXRpYyB2b2lkCiAgdHJhbnNmb3JtVGFibGVDb25zdHJh aW50KENyZWF0ZVN0bXRDb250ZXh0ICpjeHQsIENvbnN0cmFpbnQgKmNvbnN0 cmFpbnQpCiAgewohIAlpZiAoY3h0LT5pc2ZvcmVpZ24pCiAgCQllcmVwb3J0 KEVSUk9SLAogIAkJCQkoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NV UFBPUlRFRCksCiEgCQkJCSBlcnJtc2coImNvbnN0cmFpbnRzIGFyZSBub3Qg c3VwcG9ydGVkIG9uIGZvcmVpZ24gdGFibGVzIiksCiAgCQkJCSBwYXJzZXJf ZXJycG9zaXRpb24oY3h0LT5wc3RhdGUsCiAgCQkJCQkJCQkJY29uc3RyYWlu dC0+bG9jYXRpb24pKSk7CiAgCi0tLSA1OTksNjEyIC0tLS0KICBzdGF0aWMg dm9pZAogIHRyYW5zZm9ybVRhYmxlQ29uc3RyYWludChDcmVhdGVTdG10Q29u dGV4dCAqY3h0LCBDb25zdHJhaW50ICpjb25zdHJhaW50KQogIHsKISAJaWYg KGN4dC0+aXNmb3JlaWduICYmCiEgCQkoY29uc3RyYWludC0+Y29udHlwZSA9 PSBDT05TVFJfUFJJTUFSWSB8fAohIAkJIGNvbnN0cmFpbnQtPmNvbnR5cGUg PT0gQ09OU1RSX1VOSVFVRSB8fAohIAkJIGNvbnN0cmFpbnQtPmNvbnR5cGUg PT0gQ09OU1RSX0VYQ0xVU0lPTiB8fAohIAkJIGNvbnN0cmFpbnQtPmNvbnR5 cGUgPT0gQ09OU1RSX0ZPUkVJR04pKQogIAkJZXJlcG9ydChFUlJPUiwKICAJ CQkJKGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAoh IAkJCQkgZXJybXNnKCJwcmltYXJ5IGtleSwgdW5pcXVlLCBleGNsdXNpb24s IG9yIGZvcmVpZ24ga2V5IGNvbnN0cmFpbnRzIGFyZSBub3Qgc3VwcG9ydGVk IG9uIGZvcmVpZ24gdGFibGVzIiksCiAgCQkJCSBwYXJzZXJfZXJycG9zaXRp b24oY3h0LT5wc3RhdGUsCiAgCQkJCQkJCQkJY29uc3RyYWludC0+bG9jYXRp b24pKSk7CiAgCioqKiBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfaW5oZXJp dHNfZm4uaAotLS0gYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX2luaGVyaXRz X2ZuLmgKKioqKioqKioqKioqKioqCioqKiAyMSwyNiAqKioqIGV4dGVybiBM aXN0ICpmaW5kX2luaGVyaXRhbmNlX2NoaWxkcmVuKE9pZCBwYXJlbnRyZWxJ ZCwgTE9DS01PREUgbG9ja21vZGUpOwotLS0gMjEsMjcgLS0tLQogIGV4dGVy biBMaXN0ICpmaW5kX2FsbF9pbmhlcml0b3JzKE9pZCBwYXJlbnRyZWxJZCwg TE9DS01PREUgbG9ja21vZGUsCiAgCQkJCQlMaXN0ICoqcGFyZW50cyk7CiAg ZXh0ZXJuIGJvb2wgaGFzX3N1YmNsYXNzKE9pZCByZWxhdGlvbklkKTsKKyBl eHRlcm4gYm9vbCBjb250YWluc19mb3JlaWduKE9pZCBwYXJlbnRyZWxJZCwg TE9DS01PREUgbG9ja21vZGUpOwogIGV4dGVybiBib29sIHR5cGVJbmhlcml0 c0Zyb20oT2lkIHN1YmNsYXNzVHlwZUlkLCBPaWQgc3VwZXJjbGFzc1R5cGVJ ZCk7CiAgCiAgI2VuZGlmICAgLyogUEdfSU5IRVJJVFNfRk5fSCAqLwoqKiog YS9zcmMvaW5jbHVkZS9jb21tYW5kcy92YWN1dW0uaAotLS0gYi9zcmMvaW5j bHVkZS9jb21tYW5kcy92YWN1dW0uaAoqKioqKioqKioqKioqKioKKioqIDEz OCwxNDMgKioqKiBleHRlcm4gaW50CXZhY3V1bV9mcmVlemVfbWluX2FnZTsK LS0tIDEzOCwxNTIgLS0tLQogIGV4dGVybiBpbnQJdmFjdXVtX2ZyZWV6ZV90 YWJsZV9hZ2U7CiAgCiAgCisgLyogUG9zc2libGUgbW9kZXMgZm9yIHZhY3V1 bSgpICovCisgdHlwZWRlZiBlbnVtCisgeworIAlWQUNfTU9ERV9BTEwsCQkJ CS8qIFZhY3V1bS9hbmFseXplIGFsbCByZWxhdGlvbnMgKi8KKyAJVkFDX01P REVfU0lOR0xFLAkJCS8qIFZhY3V1bS9hbmFseXplIGEgc3BlY2lmaWMgcmVs YXRpb24gKi8KKyAJVkFDX01PREVfQVVUT1ZBQ1VVTQkJCS8qIEF1dG92YWN1 dW0gd29ya2VyICovCisgfSBWYWN1dW1Nb2RlOworIAorIAogIC8qIGluIGNv bW1hbmRzL3ZhY3V1bS5jICovCiAgZXh0ZXJuIHZvaWQgdmFjdXVtKFZhY3V1 bVN0bXQgKnZhY3N0bXQsIE9pZCByZWxpZCwgYm9vbCBkb190b2FzdCwKICAJ ICAgQnVmZmVyQWNjZXNzU3RyYXRlZ3kgYnN0cmF0ZWd5LCBib29sIGZvcl93 cmFwYXJvdW5kLCBib29sIGlzVG9wTGV2ZWwpOwoqKioqKioqKioqKioqKioK KioqIDE3MCwxNzYgKioqKiBleHRlcm4gdm9pZCBsYXp5X3ZhY3V1bV9yZWwo UmVsYXRpb24gb25lcmVsLCBWYWN1dW1TdG10ICp2YWNzdG10LAogIAkJCQlC dWZmZXJBY2Nlc3NTdHJhdGVneSBic3RyYXRlZ3kpOwogIAogIC8qIGluIGNv bW1hbmRzL2FuYWx5emUuYyAqLwohIGV4dGVybiB2b2lkIGFuYWx5emVfcmVs KE9pZCByZWxpZCwgVmFjdXVtU3RtdCAqdmFjc3RtdCwKICAJCQlCdWZmZXJB Y2Nlc3NTdHJhdGVneSBic3RyYXRlZ3kpOwogIGV4dGVybiBib29sIHN0ZF90 eXBhbmFseXplKFZhY0F0dHJTdGF0cyAqc3RhdHMpOwogIGV4dGVybiBkb3Vi bGUgYW5sX3JhbmRvbV9mcmFjdCh2b2lkKTsKLS0tIDE3OSwxODUgLS0tLQog IAkJCQlCdWZmZXJBY2Nlc3NTdHJhdGVneSBic3RyYXRlZ3kpOwogIAogIC8q IGluIGNvbW1hbmRzL2FuYWx5emUuYyAqLwohIGV4dGVybiB2b2lkIGFuYWx5 emVfcmVsKE9pZCByZWxpZCwgVmFjdXVtU3RtdCAqdmFjc3RtdCwgVmFjdXVt TW9kZSB2YWNtb2RlLAogIAkJCUJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IGJzdHJh dGVneSk7CiAgZXh0ZXJuIGJvb2wgc3RkX3R5cGFuYWx5emUoVmFjQXR0clN0 YXRzICpzdGF0cyk7CiAgZXh0ZXJuIGRvdWJsZSBhbmxfcmFuZG9tX2ZyYWN0 KHZvaWQpOwoqKiogYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2ZvcmVp Z25fZGF0YS5vdXQKLS0tIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9m b3JlaWduX2RhdGEub3V0CioqKioqKioqKioqKioqKgoqKiogNzUwLDc2NSAq KioqIENSRUFURSBUQUJMRSB1c2VfZnQxX2NvbHVtbl90eXBlICh4IGZ0MSk7 CiAgQUxURVIgRk9SRUlHTiBUQUJMRSBmdDEgQUxURVIgQ09MVU1OIGM4IFNF VCBEQVRBIFRZUEUgaW50ZWdlcjsJLS0gRVJST1IKICBFUlJPUjogIGNhbm5v dCBhbHRlciBmb3JlaWduIHRhYmxlICJmdDEiIGJlY2F1c2UgY29sdW1uICJ1 c2VfZnQxX2NvbHVtbl90eXBlLngiIHVzZXMgaXRzIHJvdyB0eXBlCiAgRFJP UCBUQUJMRSB1c2VfZnQxX2NvbHVtbl90eXBlOwohIEFMVEVSIEZPUkVJR04g VEFCTEUgZnQxIEFERCBDT05TVFJBSU5UIGZ0MV9jOV9jaGVjayBDSEVDSyAo YzkgPCAwKTsgLS0gRVJST1IKISBFUlJPUjogIGNvbnN0cmFpbnRzIGFyZSBu b3Qgc3VwcG9ydGVkIG9uIGZvcmVpZ24gdGFibGVzCiEgTElORSAxOiBBTFRF UiBGT1JFSUdOIFRBQkxFIGZ0MSBBREQgQ09OU1RSQUlOVCBmdDFfYzlfY2hl Y2sgQ0hFQ0sgKGMuLi4KISAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBeCiAgQUxURVIgRk9SRUlHTiBUQUJMRSBmdDEgRFJPUCBDT05T VFJBSU5UIG5vX2NvbnN0OyAgICAgICAgICAgICAgIC0tIEVSUk9SCiEgRVJS T1I6ICAiZnQxIiBpcyBub3QgYSB0YWJsZQogIEFMVEVSIEZPUkVJR04gVEFC TEUgZnQxIERST1AgQ09OU1RSQUlOVCBJRiBFWElTVFMgbm9fY29uc3Q7CiEg RVJST1I6ICAiZnQxIiBpcyBub3QgYSB0YWJsZQohIEFMVEVSIEZPUkVJR04g VEFCTEUgZnQxIERST1AgQ09OU1RSQUlOVCBmdDFfYzFfY2hlY2s7CiEgRVJS T1I6ICAiZnQxIiBpcyBub3QgYSB0YWJsZQogIEFMVEVSIEZPUkVJR04gVEFC TEUgZnQxIFNFVCBXSVRIIE9JRFM7ICAgICAgICAgICAgICAgICAgICAgICAg ICAtLSBFUlJPUgogIEVSUk9SOiAgImZ0MSIgaXMgbm90IGEgdGFibGUKICBB TFRFUiBGT1JFSUdOIFRBQkxFIGZ0MSBPV05FUiBUTyByZWdyZXNzX3Rlc3Rf cm9sZTsKLS0tIDc1MCw3NjEgLS0tLQogIEFMVEVSIEZPUkVJR04gVEFCTEUg ZnQxIEFMVEVSIENPTFVNTiBjOCBTRVQgREFUQSBUWVBFIGludGVnZXI7CS0t IEVSUk9SCiAgRVJST1I6ICBjYW5ub3QgYWx0ZXIgZm9yZWlnbiB0YWJsZSAi ZnQxIiBiZWNhdXNlIGNvbHVtbiAidXNlX2Z0MV9jb2x1bW5fdHlwZS54IiB1 c2VzIGl0cyByb3cgdHlwZQogIERST1AgVEFCTEUgdXNlX2Z0MV9jb2x1bW5f dHlwZTsKISBBTFRFUiBGT1JFSUdOIFRBQkxFIGZ0MSBBREQgQ09OU1RSQUlO VCBmdDFfYzlfY2hlY2sgQ0hFQ0sgKGM5IDwgMCk7CiAgQUxURVIgRk9SRUlH TiBUQUJMRSBmdDEgRFJPUCBDT05TVFJBSU5UIG5vX2NvbnN0OyAgICAgICAg ICAgICAgIC0tIEVSUk9SCiEgRVJST1I6ICBjb25zdHJhaW50ICJub19jb25z dCIgb2YgcmVsYXRpb24gImZ0MSIgZG9lcyBub3QgZXhpc3QKICBBTFRFUiBG T1JFSUdOIFRBQkxFIGZ0MSBEUk9QIENPTlNUUkFJTlQgSUYgRVhJU1RTIG5v X2NvbnN0OwohIE5PVElDRTogIGNvbnN0cmFpbnQgIm5vX2NvbnN0IiBvZiBy ZWxhdGlvbiAiZnQxIiBkb2VzIG5vdCBleGlzdCwgc2tpcHBpbmcKISBBTFRF UiBGT1JFSUdOIFRBQkxFIGZ0MSBEUk9QIENPTlNUUkFJTlQgZnQxX2M5X2No ZWNrOwogIEFMVEVSIEZPUkVJR04gVEFCTEUgZnQxIFNFVCBXSVRIIE9JRFM7 ICAgICAgICAgICAgICAgICAgICAgICAgICAtLSBFUlJPUgogIEVSUk9SOiAg ImZ0MSIgaXMgbm90IGEgdGFibGUKICBBTFRFUiBGT1JFSUdOIFRBQkxFIGZ0 MSBPV05FUiBUTyByZWdyZXNzX3Rlc3Rfcm9sZTsKKioqIGEvc3JjL3Rlc3Qv cmVncmVzcy9zcWwvZm9yZWlnbl9kYXRhLnNxbAotLS0gYi9zcmMvdGVzdC9y ZWdyZXNzL3NxbC9mb3JlaWduX2RhdGEuc3FsCioqKioqKioqKioqKioqKgoq KiogMzE0LDMyMyAqKioqIEFMVEVSIEZPUkVJR04gVEFCTEUgZnQxIEFMVEVS IENPTFVNTiBjOCBTRVQgU1RBVElTVElDUyAtMTsKICBDUkVBVEUgVEFCTEUg dXNlX2Z0MV9jb2x1bW5fdHlwZSAoeCBmdDEpOwogIEFMVEVSIEZPUkVJR04g VEFCTEUgZnQxIEFMVEVSIENPTFVNTiBjOCBTRVQgREFUQSBUWVBFIGludGVn ZXI7CS0tIEVSUk9SCiAgRFJPUCBUQUJMRSB1c2VfZnQxX2NvbHVtbl90eXBl OwohIEFMVEVSIEZPUkVJR04gVEFCTEUgZnQxIEFERCBDT05TVFJBSU5UIGZ0 MV9jOV9jaGVjayBDSEVDSyAoYzkgPCAwKTsgLS0gRVJST1IKICBBTFRFUiBG T1JFSUdOIFRBQkxFIGZ0MSBEUk9QIENPTlNUUkFJTlQgbm9fY29uc3Q7ICAg ICAgICAgICAgICAgLS0gRVJST1IKICBBTFRFUiBGT1JFSUdOIFRBQkxFIGZ0 MSBEUk9QIENPTlNUUkFJTlQgSUYgRVhJU1RTIG5vX2NvbnN0OwohIEFMVEVS IEZPUkVJR04gVEFCTEUgZnQxIERST1AgQ09OU1RSQUlOVCBmdDFfYzFfY2hl Y2s7CiAgQUxURVIgRk9SRUlHTiBUQUJMRSBmdDEgU0VUIFdJVEggT0lEUzsg ICAgICAgICAgICAgICAgICAgICAgICAgIC0tIEVSUk9SCiAgQUxURVIgRk9S RUlHTiBUQUJMRSBmdDEgT1dORVIgVE8gcmVncmVzc190ZXN0X3JvbGU7CiAg QUxURVIgRk9SRUlHTiBUQUJMRSBmdDEgT1BUSU9OUyAoRFJPUCBkZWxpbWl0 ZXIsIFNFVCBxdW90ZSAnficsIEFERCBlc2NhcGUgJ0AnKTsKLS0tIDMxNCwz MjMgLS0tLQogIENSRUFURSBUQUJMRSB1c2VfZnQxX2NvbHVtbl90eXBlICh4 IGZ0MSk7CiAgQUxURVIgRk9SRUlHTiBUQUJMRSBmdDEgQUxURVIgQ09MVU1O IGM4IFNFVCBEQVRBIFRZUEUgaW50ZWdlcjsJLS0gRVJST1IKICBEUk9QIFRB QkxFIHVzZV9mdDFfY29sdW1uX3R5cGU7CiEgQUxURVIgRk9SRUlHTiBUQUJM RSBmdDEgQUREIENPTlNUUkFJTlQgZnQxX2M5X2NoZWNrIENIRUNLIChjOSA8 IDApOwogIEFMVEVSIEZPUkVJR04gVEFCTEUgZnQxIERST1AgQ09OU1RSQUlO VCBub19jb25zdDsgICAgICAgICAgICAgICAtLSBFUlJPUgogIEFMVEVSIEZP UkVJR04gVEFCTEUgZnQxIERST1AgQ09OU1RSQUlOVCBJRiBFWElTVFMgbm9f Y29uc3Q7CiEgQUxURVIgRk9SRUlHTiBUQUJMRSBmdDEgRFJPUCBDT05TVFJB SU5UIGZ0MV9jOV9jaGVjazsKICBBTFRFUiBGT1JFSUdOIFRBQkxFIGZ0MSBT RVQgV0lUSCBPSURTOyAgICAgICAgICAgICAgICAgICAgICAgICAgLS0gRVJS T1IKICBBTFRFUiBGT1JFSUdOIFRBQkxFIGZ0MSBPV05FUiBUTyByZWdyZXNz X3Rlc3Rfcm9sZTsKICBBTFRFUiBGT1JFSUdOIFRBQkxFIGZ0MSBPUFRJT05T IChEUk9QIGRlbGltaXRlciwgU0VUIHF1b3RlICd+JywgQUREIGVzY2FwZSAn QCcpOwo= --------------040306010407050709000305 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 --------------040306010407050709000305--