X-Original-To: pgsql-patches-postgresql.org@localhost.postgresql.org Received: from localhost (unknown [200.46.204.144]) by svr1.postgresql.org (Postfix) with ESMTP id DE8E452972 for ; Tue, 28 Jun 2005 01:45:25 -0300 (ADT) Received: from svr1.postgresql.org ([200.46.204.71]) by localhost (av.hub.org [200.46.204.144]) (amavisd-new, port 10024) with ESMTP id 13788-04 for ; Tue, 28 Jun 2005 04:45:25 +0000 (GMT) Received: from mail.Mi8.com (nycgw05.mi8.com [63.240.6.50]) by svr1.postgresql.org (Postfix) with ESMTP id 60B6252886 for ; Tue, 28 Jun 2005 01:45:21 -0300 (ADT) Received: from 172.16.1.118 by mail.Mi8.com with ESMTP (- GW05 Welcome to Mi8 Corporation www.Mi8.com); Tue, 28 Jun 2005 00:45:10 -0400 X-Server-Uuid: E0C866E6-C6CD-48B5-AE61-E57E73CF3CC7 Received: from MI8NYCMAIL06.Mi8.com ([172.16.1.175]) by d01smtp03.Mi8.com with Microsoft SMTPSVC(6.0.3790.1830); Tue, 28 Jun 2005 00:45:09 -0400 Received: from 24.5.173.15 ([24.5.173.15]) by MI8NYCMAIL06.Mi8.com ( [172.16.1.219]) via Exchange Front-End Server mi8owa.mi8.com ( [172.16.1.104]) with Microsoft Exchange Server HTTP-DAV ; Tue, 28 Jun 2005 00:45:05 -0500 User-Agent: Microsoft-Entourage/11.1.0.040913 Date: Mon, 27 Jun 2005 21:44:59 -0700 Subject: Re: COPY FROM performance improvements From: "Luke Lonergan" To: "Andrew Dunstan" Cc: "Alvaro Herrera" , "Bruce Momjian" , "Alon Goldshuv" , pgsql-patches@postgresql.org Message-ID: In-Reply-To: <42C05F88.7000105@dunslane.net> MIME-Version: 1.0 X-OriginalArrivalTime: 28 Jun 2005 04:45:09.0283 (UTC) FILETIME=[29976730:01C57B9C] X-WSS-ID: 6EDE0A5C2EW3728066-01-01 Content-Type: multipart/mixed; boundary=B_3202753503_1429494 X-Virus-Scanned: by amavisd-new at hub.org X-Archive-Number: 200506/542 X-Sequence-Number: 16274 > This message is in MIME format. Since your mail reader does not understand this format, some or all of this message may not be legible. --B_3202753503_1429494 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Andrew, > Something strange has happened. I suspect that you've inadvertantly used > GNU indent or an unpatched BSD indent. pgindent needs a special patched > BSD indent to work according to the PG standards - see the README OK - phew! I generated new symbols for pgindent and fixed a bug in the awk scripting within (diff attached) and ran against the CVS tip copy.c and got only minor changes in formatting that appear to be consistent with the rest of the code. I pgindent'ed the COPY FROM performance modded code and it looks good and tests good. Only formatting changes to the previous patch for copy.c attached. Patch to update pgindent with new symbols and fix a bug in an awk section (extra \\ in front of a ')'). - Luke --B_3202753503_1429494 Content-Type: application/octet-stream; name=fast_copy_V14_8.1.patch Content-Disposition: attachment; filename=fast_copy_V14_8.1.patch Content-Transfer-Encoding: base64 SW5kZXg6IHNyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHkuYwo9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm aWxlOiAvcHJvamVjdHMvY3Zzcm9vdC9wZ3NxbC9zcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5 LmMsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMjQ1CmRpZmYgLWMgLXIxLjI0NSBjb3B5LmMK KioqIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2NvcHkuYwkyIEp1biAyMDA1IDAxOjIxOjIyIC0w MDAwCTEuMjQ1Ci0tLSBzcmMvYmFja2VuZC9jb21tYW5kcy9jb3B5LmMJMjggSnVuIDIwMDUg MDQ6MzU6MDkgLTAwMDAKKioqKioqKioqKioqKioqCioqKiA1MSw1NiAqKioqCi0tLSA1MSw1 NyAtLS0tCiAgCiAgI2RlZmluZSBJU09DVEFMKGMpICgoKGMpID49ICcwJykgJiYgKChjKSA8 PSAnNycpKQogICNkZWZpbmUgT0NUVkFMVUUoYykgKChjKSAtICcwJykKKyAjZGVmaW5lIENP UFlfQlVGX1NJWkUgNjU1MzYKICAKICAvKgogICAqIFJlcHJlc2VudHMgdGhlIGRpZmZlcmVu dCBzb3VyY2UvZGVzdCBjYXNlcyB3ZSBuZWVkIHRvIHdvcnJ5IGFib3V0IGF0CioqKioqKioq KioqKioqKgoqKiogNjEsNjcgKioqKgogIAlDT1BZX0ZJTEUsCQkJCQkvKiB0by9mcm9tIGZp bGUgKi8KICAJQ09QWV9PTERfRkUsCQkJCS8qIHRvL2Zyb20gZnJvbnRlbmQgKDIuMCBwcm90 b2NvbCkgKi8KICAJQ09QWV9ORVdfRkUJCQkJCS8qIHRvL2Zyb20gZnJvbnRlbmQgKDMuMCBw cm90b2NvbCkgKi8KISB9IENvcHlEZXN0OwogIAogIC8qCiAgICogU3RhdGUgaW5kaWNhdG9y IHNob3dpbmcgd2hhdCBzdG9wcGVkIENvcHlSZWFkQXR0cmlidXRlKCkKLS0tIDYyLDY4IC0t LS0KICAJQ09QWV9GSUxFLAkJCQkJLyogdG8vZnJvbSBmaWxlICovCiAgCUNPUFlfT0xEX0ZF LAkJCQkvKiB0by9mcm9tIGZyb250ZW5kICgyLjAgcHJvdG9jb2wpICovCiAgCUNPUFlfTkVX X0ZFCQkJCQkvKiB0by9mcm9tIGZyb250ZW5kICgzLjAgcHJvdG9jb2wpICovCiEgfQlDb3B5 RGVzdDsKICAKICAvKgogICAqIFN0YXRlIGluZGljYXRvciBzaG93aW5nIHdoYXQgc3RvcHBl ZCBDb3B5UmVhZEF0dHJpYnV0ZSgpCioqKioqKioqKioqKioqKgoqKiogODIsODkgKioqKgog IAlFT0xfTkwsCiAgCUVPTF9DUiwKICAJRU9MX0NSTkwKISB9IEVvbFR5cGU7CiEgCiAgCiAg c3RhdGljIGNvbnN0IGNoYXIgQmluYXJ5U2lnbmF0dXJlWzExXSA9ICJQR0NPUFlcblwzNzdc clxuXDAiOwogIAotLS0gODMsODkgLS0tLQogIAlFT0xfTkwsCiAgCUVPTF9DUiwKICAJRU9M X0NSTkwKISB9CUVvbFR5cGU7CiAgCiAgc3RhdGljIGNvbnN0IGNoYXIgQmluYXJ5U2lnbmF0 dXJlWzExXSA9ICJQR0NPUFlcblwzNzdcclxuXDAiOwogIAoqKioqKioqKioqKioqKioKKioq IDkyLDk3ICoqKioKLS0tIDkyLDEwMSAtLS0tCiAgICogbmV2ZXIgYmVlbiByZWVudHJhbnQu Li4KICAgKi8KICBzdGF0aWMgQ29weURlc3QgY29weV9kZXN0OworIHN0YXRpYyBpbnQJZW9s X2NoWzJdOwkJCS8qIFRoZSBieXRlIHZhbHVlcyBvZiB0aGUgMSBvciAyIGVvbCBieXRlcyAq LworIHN0YXRpYyBjaGFyIGVzY2FwZWM7CQkJLyogZXNjYXBlIGNoYXIgZm9yIGRlbGltaXRl ZCBkYXRhIGZvcm1hdC4gKi8KKyBzdGF0aWMgYm9vbCBjbGllbnRfZW5jb2Rpbmdfb25seTsJ CS8qIHRydWUgaWYgY2xpZW50IGVuY29kaW5nIGlzIGEgbm9uCisgCQkJCQkJCQkJCSAqIHN1 cHBvcnRlZCBzZXJ2ZXIgZW5jb2RpbmcgKi8KICBzdGF0aWMgRklMRSAqY29weV9maWxlOwkJ CS8qIHVzZWQgaWYgY29weV9kZXN0ID09IENPUFlfRklMRSAqLwogIHN0YXRpYyBTdHJpbmdJ bmZvIGNvcHlfbXNnYnVmOwkvKiB1c2VkIGlmIGNvcHlfZGVzdCA9PSBDT1BZX05FV19GRSAq LwogIHN0YXRpYyBib29sIGZlX2VvZjsJCQkJLyogdHJ1ZSBpZiBkZXRlY3RlZCBlbmQgb2Yg Y29weSBkYXRhICovCioqKioqKioqKioqKioqKgoqKiogMTA1LDE0NCAqKioqCiAgc3RhdGlj IGludAljb3B5X2xpbmVubzsJCS8qIGxpbmUgbnVtYmVyIGZvciBlcnJvciBtZXNzYWdlcyAq LwogIHN0YXRpYyBjb25zdCBjaGFyICpjb3B5X2F0dG5hbWU7CS8qIGN1cnJlbnQgYXR0IGZv ciBlcnJvciBtZXNzYWdlcyAqLwogIAogIAogIC8qCiAgICogVGhlc2Ugc3RhdGljIHZhcmlh YmxlcyBhcmUgdXNlZCB0byBhdm9pZCBpbmN1cnJpbmcgb3ZlcmhlYWQgZm9yIGVhY2gKISAg KiBhdHRyaWJ1dGUgcHJvY2Vzc2VkLiAgYXR0cmlidXRlX2J1ZiBpcyByZXVzZWQgb24gZWFj aCBDb3B5UmVhZEF0dHJpYnV0ZQogICAqIGNhbGwgdG8gaG9sZCB0aGUgc3RyaW5nIGJlaW5n IHJlYWQgaW4uICBVbmRlciBub3JtYWwgdXNlIGl0IHdpbGwgc29vbgogICAqIGdyb3cgdG8g YSBzdWl0YWJsZSBzaXplLCBhbmQgdGhlbiB3ZSB3aWxsIGF2b2lkIHBhbGxvYy9wZnJlZSBv dmVyaGVhZAogICAqIGZvciBzdWJzZXF1ZW50IGF0dHJpYnV0ZXMuICBOb3RlIHRoYXQgQ29w eVJlYWRBdHRyaWJ1dGUgcmV0dXJucyBhIHBvaW50ZXIKISAgKiB0byBhdHRyaWJ1dGVfYnVm J3MgZGF0YSBidWZmZXIhCiAgICovCiEgc3RhdGljIFN0cmluZ0luZm9EYXRhIGF0dHJpYnV0 ZV9idWY7CiAgCiAgLyoKICAgKiBTaW1pbGFybHksIGxpbmVfYnVmIGhvbGRzIHRoZSB3aG9s ZSBpbnB1dCBsaW5lIGJlaW5nIHByb2Nlc3NlZCAoaXRzCiAgICogY3Vyc29yIGZpZWxkIHBv aW50cyB0byB0aGUgbmV4dCBjaGFyYWN0ZXIgdG8gYmUgcmVhZCBieSBDb3B5UmVhZEF0dHJp YnV0ZSkuCiAgICogVGhlIGlucHV0IGN5Y2xlIGlzIGZpcnN0IHRvIHJlYWQgdGhlIHdob2xl IGxpbmUgaW50byBsaW5lX2J1ZiwgY29udmVydCBpdAogICAqIHRvIHNlcnZlciBlbmNvZGlu ZywgYW5kIHRoZW4gZXh0cmFjdCBpbmRpdmlkdWFsIGF0dHJpYnV0ZSBmaWVsZHMgaW50bwoh ICAqIGF0dHJpYnV0ZV9idWYuICAoV2UgdXNlZCB0byBoYXZlIENvcHlSZWFkQXR0cmlidXRl IHJlYWQgdGhlIGlucHV0IHNvdXJjZQogICAqIGRpcmVjdGx5LCBidXQgdGhhdCBjYXVzZWQg YSBsb3Qgb2YgZW5jb2RpbmcgaXNzdWVzIGFuZCB1bm5lY2Vzc2FyeSBsb2dpYwogICAqIGNv bXBsZXhpdHkuKQogICAqLwohIHN0YXRpYyBTdHJpbmdJbmZvRGF0YSBsaW5lX2J1ZjsKICBz dGF0aWMgYm9vbCBsaW5lX2J1Zl9jb252ZXJ0ZWQ7CiAgCiAgLyogbm9uLWV4cG9ydCBmdW5j dGlvbiBwcm90b3R5cGVzICovCiAgc3RhdGljIHZvaWQgRG9Db3B5VG8oUmVsYXRpb24gcmVs LCBMaXN0ICphdHRudW1saXN0LCBib29sIGJpbmFyeSwgYm9vbCBvaWRzLAogIAkJIGNoYXIg KmRlbGltLCBjaGFyICpudWxsX3ByaW50LCBib29sIGNzdl9tb2RlLCBjaGFyICpxdW90ZSwK ISAJCSBjaGFyICplc2NhcGUsIExpc3QgKmZvcmNlX3F1b3RlX2F0dHMsIGJvb2wgaGVhZGVy X2xpbmUsIGJvb2wgZmVfY29weSk7CiAgc3RhdGljIHZvaWQgQ29weVRvKFJlbGF0aW9uIHJl bCwgTGlzdCAqYXR0bnVtbGlzdCwgYm9vbCBiaW5hcnksIGJvb2wgb2lkcywKISAgY2hhciAq ZGVsaW0sIGNoYXIgKm51bGxfcHJpbnQsIGJvb2wgY3N2X21vZGUsIGNoYXIgKnF1b3RlLCBj aGFyICplc2NhcGUsCiAgCSAgIExpc3QgKmZvcmNlX3F1b3RlX2F0dHMsIGJvb2wgaGVhZGVy X2xpbmUpOwogIHN0YXRpYyB2b2lkIENvcHlGcm9tKFJlbGF0aW9uIHJlbCwgTGlzdCAqYXR0 bnVtbGlzdCwgYm9vbCBiaW5hcnksIGJvb2wgb2lkcywKISAgY2hhciAqZGVsaW0sIGNoYXIg Km51bGxfcHJpbnQsIGJvb2wgY3N2X21vZGUsIGNoYXIgKnF1b3RlLCBjaGFyICplc2NhcGUs CiAgCQkgTGlzdCAqZm9yY2Vfbm90bnVsbF9hdHRzLCBib29sIGhlYWRlcl9saW5lKTsKISBz dGF0aWMgYm9vbCBDb3B5UmVhZExpbmUoY2hhciAqIHF1b3RlLCBjaGFyICogZXNjYXBlKTsK ICBzdGF0aWMgY2hhciAqQ29weVJlYWRBdHRyaWJ1dGUoY29uc3QgY2hhciAqZGVsaW0sIGNv bnN0IGNoYXIgKm51bGxfcHJpbnQsCiAgCQkJCSAgQ29weVJlYWRSZXN1bHQgKnJlc3VsdCwg Ym9vbCAqaXNudWxsKTsKICBzdGF0aWMgY2hhciAqQ29weVJlYWRBdHRyaWJ1dGVDU1YoY29u c3QgY2hhciAqZGVsaW0sIGNvbnN0IGNoYXIgKm51bGxfcHJpbnQsCi0tLSAxMDksMTYyIC0t LS0KICBzdGF0aWMgaW50CWNvcHlfbGluZW5vOwkJLyogbGluZSBudW1iZXIgZm9yIGVycm9y IG1lc3NhZ2VzICovCiAgc3RhdGljIGNvbnN0IGNoYXIgKmNvcHlfYXR0bmFtZTsJLyogY3Vy cmVudCBhdHQgZm9yIGVycm9yIG1lc3NhZ2VzICovCiAgCisgLyogU3RhdGljIHZhcmlhYmxl cyBmb3IgYnVmZmVyZWQgaW5wdXQgcGFyc2luZyAqLworIC8qIGxlYXZlIHJvb20gZm9yIGV4 dHJhIG51bGwgKHRvIGVuYWJsZSB1c2Ugb2Ygc3RyaW5nIGZ1bmN0aW9ucykgKi8KKyBzdGF0 aWMgY2hhciBpbnB1dF9idWZbQ09QWV9CVUZfU0laRSArIDFdOworIHN0YXRpYyBjaGFyICpi ZWdsb2M7Cisgc3RhdGljIGNoYXIgKmVuZGxvYzsKKyBzdGF0aWMgYm9vbCBlc2NfaW5fcHJl dmJ1ZjsJCS8qIGJhY2tzbGFzaCB3YXMgbGFzdCBjaGFyYWN0ZXIgb2YgdGhlIGRhdGEKKyAJ CQkJCQkJCSAqIGlucHV0IGJ1ZmZlciAqLworIHN0YXRpYyBib29sIGNyX2luX3ByZXZidWY7 CQkvKiBDUiB3YXMgbGFzdCBjaGFyYWN0ZXIgb2YgdGhlIGRhdGEgaW5wdXQKKyAJCQkJCQkJ CSAqIGJ1ZmZlciAqLworIHN0YXRpYyBib29sIGxpbmVfZG9uZTsJCQkvKiBmaW5pc2hlZCBw cm9jZXNzaW5nIHRoZSB3aG9sZSBsaW5lIG9yCisgCQkJCQkJCQkgKiBzdG9wcGVkIGluIHRo ZSBtaWRkbGUgKi8KKyBzdGF0aWMgYm9vbCBidWZfZG9uZTsJCQkvKiBmaW5pc2hlZCBwcm9j ZXNzaW5nIHRoZSBjdXJyZW50IGJ1ZmZlciAqLworIHN0YXRpYyBpbnQJYnVmZmVyX2luZGV4 OwkJLyogaW5wdXQgYnVmZmVyIGluZGV4ICovCisgCiAgCiAgLyoKICAgKiBUaGVzZSBzdGF0 aWMgdmFyaWFibGVzIGFyZSB1c2VkIHRvIGF2b2lkIGluY3VycmluZyBvdmVyaGVhZCBmb3Ig ZWFjaAohICAqIGF0dHJpYnV0ZSBwcm9jZXNzZWQuICBhdHRyX2J1ZiBpcyByZXVzZWQgb24g ZWFjaCBDb3B5UmVhZEF0dHJpYnV0ZQogICAqIGNhbGwgdG8gaG9sZCB0aGUgc3RyaW5nIGJl aW5nIHJlYWQgaW4uICBVbmRlciBub3JtYWwgdXNlIGl0IHdpbGwgc29vbgogICAqIGdyb3cg dG8gYSBzdWl0YWJsZSBzaXplLCBhbmQgdGhlbiB3ZSB3aWxsIGF2b2lkIHBhbGxvYy9wZnJl ZSBvdmVyaGVhZAogICAqIGZvciBzdWJzZXF1ZW50IGF0dHJpYnV0ZXMuICBOb3RlIHRoYXQg Q29weVJlYWRBdHRyaWJ1dGUgcmV0dXJucyBhIHBvaW50ZXIKISAgKiB0byBhdHRyX2J1Zidz IGRhdGEgYnVmZmVyIQogICAqLwohIHN0YXRpYyBTdHJpbmdJbmZvRGF0YSBhdHRyX2J1Zjsg Lyogc3RpbGwgdXNlZCBpbiBDb3B5RnJvbSgpCQkqLwogIAogIC8qCiAgICogU2ltaWxhcmx5 LCBsaW5lX2J1ZiBob2xkcyB0aGUgd2hvbGUgaW5wdXQgbGluZSBiZWluZyBwcm9jZXNzZWQg KGl0cwogICAqIGN1cnNvciBmaWVsZCBwb2ludHMgdG8gdGhlIG5leHQgY2hhcmFjdGVyIHRv IGJlIHJlYWQgYnkgQ29weVJlYWRBdHRyaWJ1dGUpLgogICAqIFRoZSBpbnB1dCBjeWNsZSBp cyBmaXJzdCB0byByZWFkIHRoZSB3aG9sZSBsaW5lIGludG8gbGluZV9idWYsIGNvbnZlcnQg aXQKICAgKiB0byBzZXJ2ZXIgZW5jb2RpbmcsIGFuZCB0aGVuIGV4dHJhY3QgaW5kaXZpZHVh bCBhdHRyaWJ1dGUgZmllbGRzIGludG8KISAgKiBhdHRyX2J1Zi4gIChXZSB1c2VkIHRvIGhh dmUgQ29weVJlYWRBdHRyaWJ1dGUgcmVhZCB0aGUgaW5wdXQgc291cmNlCiAgICogZGlyZWN0 bHksIGJ1dCB0aGF0IGNhdXNlZCBhIGxvdCBvZiBlbmNvZGluZyBpc3N1ZXMgYW5kIHVubmVj ZXNzYXJ5IGxvZ2ljCiAgICogY29tcGxleGl0eS4pCiAgICovCiEgc3RhdGljIFN0cmluZ0lu Zm9EYXRhIGxpbmVfYnVmOyAvKiBzdGlsbCB1c2VkIGluIENvcHlGcm9tQmluYXJ5L0NTVigp ICovCiAgc3RhdGljIGJvb2wgbGluZV9idWZfY29udmVydGVkOwogIAogIC8qIG5vbi1leHBv cnQgZnVuY3Rpb24gcHJvdG90eXBlcyAqLwogIHN0YXRpYyB2b2lkIERvQ29weVRvKFJlbGF0 aW9uIHJlbCwgTGlzdCAqYXR0bnVtbGlzdCwgYm9vbCBiaW5hcnksIGJvb2wgb2lkcywKICAJ CSBjaGFyICpkZWxpbSwgY2hhciAqbnVsbF9wcmludCwgYm9vbCBjc3ZfbW9kZSwgY2hhciAq cXVvdGUsCiEgCSAgIGNoYXIgKmVzY2FwZSwgTGlzdCAqZm9yY2VfcXVvdGVfYXR0cywgYm9v bCBoZWFkZXJfbGluZSwgYm9vbCBmZV9jb3B5KTsKICBzdGF0aWMgdm9pZCBDb3B5VG8oUmVs YXRpb24gcmVsLCBMaXN0ICphdHRudW1saXN0LCBib29sIGJpbmFyeSwgYm9vbCBvaWRzLAoh IAkgY2hhciAqZGVsaW0sIGNoYXIgKm51bGxfcHJpbnQsIGJvb2wgY3N2X21vZGUsIGNoYXIg KnF1b3RlLCBjaGFyICplc2NhcGUsCiAgCSAgIExpc3QgKmZvcmNlX3F1b3RlX2F0dHMsIGJv b2wgaGVhZGVyX2xpbmUpOwogIHN0YXRpYyB2b2lkIENvcHlGcm9tKFJlbGF0aW9uIHJlbCwg TGlzdCAqYXR0bnVtbGlzdCwgYm9vbCBiaW5hcnksIGJvb2wgb2lkcywKISAJIGNoYXIgKmRl bGltLCBjaGFyICpudWxsX3ByaW50LCBib29sIGNzdl9tb2RlLCBjaGFyICpxdW90ZSwgY2hh ciAqZXNjYXBlLAogIAkJIExpc3QgKmZvcmNlX25vdG51bGxfYXR0cywgYm9vbCBoZWFkZXJf bGluZSk7CiEgc3RhdGljIGJvb2wgQ29weVJlYWRMaW5lKGNoYXIgKnF1b3RlLCBjaGFyICpl c2NhcGUpOwogIHN0YXRpYyBjaGFyICpDb3B5UmVhZEF0dHJpYnV0ZShjb25zdCBjaGFyICpk ZWxpbSwgY29uc3QgY2hhciAqbnVsbF9wcmludCwKICAJCQkJICBDb3B5UmVhZFJlc3VsdCAq cmVzdWx0LCBib29sICppc251bGwpOwogIHN0YXRpYyBjaGFyICpDb3B5UmVhZEF0dHJpYnV0 ZUNTVihjb25zdCBjaGFyICpkZWxpbSwgY29uc3QgY2hhciAqbnVsbF9wcmludCwKKioqKioq KioqKioqKioqCioqKiAxNTEsMTU2ICoqKioKLS0tIDE2OSwxODcgLS0tLQogIAkJCQkJY2hh ciAqZXNjYXBlLCBib29sIGZvcmNlX3F1b3RlKTsKICBzdGF0aWMgTGlzdCAqQ29weUdldEF0 dG51bXMoUmVsYXRpb24gcmVsLCBMaXN0ICphdHRuYW1lbGlzdCk7CiAgc3RhdGljIHZvaWQg bGltaXRfcHJpbnRvdXRfbGVuZ3RoKFN0cmluZ0luZm8gYnVmKTsKKyBzdGF0aWMgYm9vbCBD b3B5UmVhZExpbmVCdWZmZXJlZChzaXplX3QgYnl0ZXNyZWFkKTsKKyBzdGF0aWMgdm9pZCBD b3B5RnJvbURlbGltaXRlZChSZWxhdGlvbiByZWwsIExpc3QgKmF0dG51bWxpc3QsIGJvb2wg YmluYXJ5LCBib29sIG9pZHMsCisgCSBjaGFyICpkZWxpbSwgY2hhciAqbnVsbF9wcmludCwg Ym9vbCBjc3ZfbW9kZSwgY2hhciAqcXVvdGUsIGNoYXIgKmVzY2FwZSwKKyAJCQkJICBMaXN0 ICpmb3JjZV9ub3RudWxsX2F0dHMpOworIHN0YXRpYyBjaGFyICpDb3B5UmVhZEF0dHJpYnV0 ZShjb25zdCBjaGFyICpkZWxpbSwgY29uc3QgY2hhciAqbnVsbF9wcmludCwKKyAJCQkJICBD b3B5UmVhZFJlc3VsdCAqcmVzdWx0LCBib29sICppc251bGwpOworIHN0YXRpYyB2b2lkIENv cHlSZWFkQWxsQXR0cnMoY29uc3QgY2hhciAqZGVsaW0sIGNvbnN0IGNoYXIgKm51bGxfcHJp bnQsIGludCBudWxsX3ByaW50X2xlbiwKKyAJCWNoYXIgKm51bGxzLCBMaXN0ICphdHRudW1s aXN0LCBpbnQgKmF0dHJfb2Zmc2V0cywgaW50IG51bV9waHlzX2F0dHJzLAorIAkJCQkgRm9y bV9wZ19hdHRyaWJ1dGUgKmF0dHIpOworIHN0YXRpYyBjaGFyICpDb3B5UmVhZE9pZEF0dHIo Y29uc3QgY2hhciAqZGVsaW0sIGNvbnN0IGNoYXIgKm51bGxfcHJpbnQsIGludCBudWxsX3By aW50X2xlbiwKKyAJCQkJQ29weVJlYWRSZXN1bHQgKnJlc3VsdCwgYm9vbCAqaXNudWxsKTsK KyBzdGF0aWMgYm9vbCBEZXRlY3RMaW5lRW5kKHNpemVfdCBieXRlc3JlYWQpOworIAogIAog IC8qIEludGVybmFsIGNvbW11bmljYXRpb25zIGZ1bmN0aW9ucyAqLwogIHN0YXRpYyB2b2lk IFNlbmRDb3B5QmVnaW4oYm9vbCBiaW5hcnksIGludCBuYXR0cyk7CioqKioqKioqKioqKioq KgoqKiogMTYwLDE2NiAqKioqCiAgc3RhdGljIHZvaWQgQ29weVNlbmRTdHJpbmcoY29uc3Qg Y2hhciAqc3RyKTsKICBzdGF0aWMgdm9pZCBDb3B5U2VuZENoYXIoY2hhciBjKTsKICBzdGF0 aWMgdm9pZCBDb3B5U2VuZEVuZE9mUm93KGJvb2wgYmluYXJ5KTsKISBzdGF0aWMgdm9pZCBD b3B5R2V0RGF0YSh2b2lkICpkYXRhYnVmLCBpbnQgZGF0YXNpemUpOwogIHN0YXRpYyBpbnQJ Q29weUdldENoYXIodm9pZCk7CiAgCiAgI2RlZmluZSBDb3B5R2V0RW9mKCkgIChmZV9lb2Yp Ci0tLSAxOTEsMTk3IC0tLS0KICBzdGF0aWMgdm9pZCBDb3B5U2VuZFN0cmluZyhjb25zdCBj aGFyICpzdHIpOwogIHN0YXRpYyB2b2lkIENvcHlTZW5kQ2hhcihjaGFyIGMpOwogIHN0YXRp YyB2b2lkIENvcHlTZW5kRW5kT2ZSb3coYm9vbCBiaW5hcnkpOwohIHN0YXRpYyBpbnQJQ29w eUdldERhdGEodm9pZCAqZGF0YWJ1ZiwgaW50IGRhdGFzaXplKTsKICBzdGF0aWMgaW50CUNv cHlHZXRDaGFyKHZvaWQpOwogIAogICNkZWZpbmUgQ29weUdldEVvZigpICAoZmVfZW9mKQoq KioqKioqKioqKioqKioKKioqIDE3MSwxNzYgKioqKgotLS0gMjAyLDIxMCAtLS0tCiAgc3Rh dGljIHZvaWQgQ29weVNlbmRJbnQxNihpbnQxNiB2YWwpOwogIHN0YXRpYyBpbnQxNiBDb3B5 R2V0SW50MTYodm9pZCk7CiAgCisgLyogbmV3IHBhcnNpbmcgdXRpbHMgKi8KKyBzdGF0aWMg Y2hhciAqc3RyY2hybGVuKGNvbnN0IGNoYXIgKnMsIGludCBjLCBzaXplX3QgbGVuKTsKKyBz dGF0aWMgY2hhciAqc3RyMmNocmxlbihjb25zdCBjaGFyICpzLCBpbnQgYzEsIGludCBjMiwg c2l6ZV90IGxlbiwgY2hhciAqY19mb3VuZCk7CiAgCiAgLyoKICAgKiBTZW5kIGNvcHkgc3Rh cnQvc3RvcCBtZXNzYWdlcyBmb3IgZnJvbnRlbmQgY29waWVzLiAgVGhlc2UgaGF2ZSBjaGFu Z2VkCioqKioqKioqKioqKioqKgoqKiogMjAxLDIwNyAqKioqCiAgCQlpZiAoYmluYXJ5KQog IAkJCWVyZXBvcnQoRVJST1IsCiAgCQkJCQkoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9U X1NVUFBPUlRFRCksCiEgCQkJCQkgZXJybXNnKCJDT1BZIEJJTkFSWSBpcyBub3Qgc3VwcG9y dGVkIHRvIHN0ZG91dCBvciBmcm9tIHN0ZGluIikpKTsKICAJCXBxX3B1dGVtcHR5bWVzc2Fn ZSgnSCcpOwogIAkJLyogZ3JvdHRpbmVzcyBuZWVkZWQgZm9yIG9sZCBDT1BZIE9VVCBwcm90 b2NvbCAqLwogIAkJcHFfc3RhcnRjb3B5b3V0KCk7Ci0tLSAyMzUsMjQxIC0tLS0KICAJCWlm IChiaW5hcnkpCiAgCQkJZXJlcG9ydChFUlJPUiwKICAJCQkJCShlcnJjb2RlKEVSUkNPREVf RkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKISAJCQllcnJtc2coIkNPUFkgQklOQVJZIGlzIG5v dCBzdXBwb3J0ZWQgdG8gc3Rkb3V0IG9yIGZyb20gc3RkaW4iKSkpOwogIAkJcHFfcHV0ZW1w dHltZXNzYWdlKCdIJyk7CiAgCQkvKiBncm90dGluZXNzIG5lZWRlZCBmb3Igb2xkIENPUFkg T1VUIHByb3RvY29sICovCiAgCQlwcV9zdGFydGNvcHlvdXQoKTsKKioqKioqKioqKioqKioq CioqKiAyMTMsMjE5ICoqKioKICAJCWlmIChiaW5hcnkpCiAgCQkJZXJlcG9ydChFUlJPUiwK ICAJCQkJCShlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKISAJCQkJ CSBlcnJtc2coIkNPUFkgQklOQVJZIGlzIG5vdCBzdXBwb3J0ZWQgdG8gc3Rkb3V0IG9yIGZy b20gc3RkaW4iKSkpOwogIAkJcHFfcHV0ZW1wdHltZXNzYWdlKCdCJyk7CiAgCQkvKiBncm90 dGluZXNzIG5lZWRlZCBmb3Igb2xkIENPUFkgT1VUIHByb3RvY29sICovCiAgCQlwcV9zdGFy dGNvcHlvdXQoKTsKLS0tIDI0NywyNTMgLS0tLQogIAkJaWYgKGJpbmFyeSkKICAJCQllcmVw b3J0KEVSUk9SLAogIAkJCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JU RUQpLAohIAkJCWVycm1zZygiQ09QWSBCSU5BUlkgaXMgbm90IHN1cHBvcnRlZCB0byBzdGRv dXQgb3IgZnJvbSBzdGRpbiIpKSk7CiAgCQlwcV9wdXRlbXB0eW1lc3NhZ2UoJ0InKTsKICAJ CS8qIGdyb3R0aW5lc3MgbmVlZGVkIGZvciBvbGQgQ09QWSBPVVQgcHJvdG9jb2wgKi8KICAJ CXBxX3N0YXJ0Y29weW91dCgpOwoqKioqKioqKioqKioqKioKKioqIDI0NiwyNTIgKioqKgog IAkJaWYgKGJpbmFyeSkKICAJCQllcmVwb3J0KEVSUk9SLAogIAkJCQkJKGVycmNvZGUoRVJS Q09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAohIAkJCQkJIGVycm1zZygiQ09QWSBCSU5B UlkgaXMgbm90IHN1cHBvcnRlZCB0byBzdGRvdXQgb3IgZnJvbSBzdGRpbiIpKSk7CiAgCQlw cV9wdXRlbXB0eW1lc3NhZ2UoJ0cnKTsKICAJCWNvcHlfZGVzdCA9IENPUFlfT0xEX0ZFOwog IAl9Ci0tLSAyODAsMjg2IC0tLS0KICAJCWlmIChiaW5hcnkpCiAgCQkJZXJlcG9ydChFUlJP UiwKICAJCQkJCShlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKISAJ CQllcnJtc2coIkNPUFkgQklOQVJZIGlzIG5vdCBzdXBwb3J0ZWQgdG8gc3Rkb3V0IG9yIGZy b20gc3RkaW4iKSkpOwogIAkJcHFfcHV0ZW1wdHltZXNzYWdlKCdHJyk7CiAgCQljb3B5X2Rl c3QgPSBDT1BZX09MRF9GRTsKICAJfQoqKioqKioqKioqKioqKioKKioqIDI1NiwyNjIgKioq KgogIAkJaWYgKGJpbmFyeSkKICAJCQllcmVwb3J0KEVSUk9SLAogIAkJCQkJKGVycmNvZGUo RVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAohIAkJCQkJIGVycm1zZygiQ09QWSBC SU5BUlkgaXMgbm90IHN1cHBvcnRlZCB0byBzdGRvdXQgb3IgZnJvbSBzdGRpbiIpKSk7CiAg CQlwcV9wdXRlbXB0eW1lc3NhZ2UoJ0QnKTsKICAJCWNvcHlfZGVzdCA9IENPUFlfT0xEX0ZF OwogIAl9Ci0tLSAyOTAsMjk2IC0tLS0KICAJCWlmIChiaW5hcnkpCiAgCQkJZXJlcG9ydChF UlJPUiwKICAJCQkJCShlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwK ISAJCQllcnJtc2coIkNPUFkgQklOQVJZIGlzIG5vdCBzdXBwb3J0ZWQgdG8gc3Rkb3V0IG9y IGZyb20gc3RkaW4iKSkpOwogIAkJcHFfcHV0ZW1wdHltZXNzYWdlKCdEJyk7CiAgCQljb3B5 X2Rlc3QgPSBDT1BZX09MRF9GRTsKICAJfQoqKioqKioqKioqKioqKioKKioqIDMxNywzMjMg KioqKgogIAkJCQkvKiBubyBob3BlIG9mIHJlY292ZXJpbmcgY29ubmVjdGlvbiBzeW5jLCBz byBGQVRBTCAqLwogIAkJCQllcmVwb3J0KEZBVEFMLAogIAkJCQkJCShlcnJjb2RlKEVSUkNP REVfQ09OTkVDVElPTl9GQUlMVVJFKSwKISAJCQkJCSAgIGVycm1zZygiY29ubmVjdGlvbiBs b3N0IGR1cmluZyBDT1BZIHRvIHN0ZG91dCIpKSk7CiAgCQkJfQogIAkJCWJyZWFrOwogIAkJ Y2FzZSBDT1BZX05FV19GRToKLS0tIDM1MSwzNTcgLS0tLQogIAkJCQkvKiBubyBob3BlIG9m IHJlY292ZXJpbmcgY29ubmVjdGlvbiBzeW5jLCBzbyBGQVRBTCAqLwogIAkJCQllcmVwb3J0 KEZBVEFMLAogIAkJCQkJCShlcnJjb2RlKEVSUkNPREVfQ09OTkVDVElPTl9GQUlMVVJFKSwK ISAJCQkJCQkgZXJybXNnKCJjb25uZWN0aW9uIGxvc3QgZHVyaW5nIENPUFkgdG8gc3Rkb3V0 IikpKTsKICAJCQl9CiAgCQkJYnJlYWs7CiAgCQljYXNlIENPUFlfTkVXX0ZFOgoqKioqKioq KioqKioqKioKKioqIDM4MywzOTYgKioqKgogICAqIEl0IHNlZW1zIHVud2lzZSB0byBhbGxv dyB0aGUgQ09QWSBJTiB0byBjb21wbGV0ZSBub3JtYWxseSBpbiB0aGF0IGNhc2UuCiAgICoK ICAgKiBOQjogbm8gZGF0YSBjb252ZXJzaW9uIGlzIGFwcGxpZWQgYnkgdGhlc2UgZnVuY3Rp b25zCiAgICovCiEgc3RhdGljIHZvaWQKICBDb3B5R2V0RGF0YSh2b2lkICpkYXRhYnVmLCBp bnQgZGF0YXNpemUpCiAgewogIAlzd2l0Y2ggKGNvcHlfZGVzdCkKICAJewogIAkJY2FzZSBD T1BZX0ZJTEU6CiEgCQkJZnJlYWQoZGF0YWJ1ZiwgZGF0YXNpemUsIDEsIGNvcHlfZmlsZSk7 CiAgCQkJaWYgKGZlb2YoY29weV9maWxlKSkKICAJCQkJZmVfZW9mID0gdHJ1ZTsKICAJCQli cmVhazsKLS0tIDQxNyw0MzUgLS0tLQogICAqIEl0IHNlZW1zIHVud2lzZSB0byBhbGxvdyB0 aGUgQ09QWSBJTiB0byBjb21wbGV0ZSBub3JtYWxseSBpbiB0aGF0IGNhc2UuCiAgICoKICAg KiBOQjogbm8gZGF0YSBjb252ZXJzaW9uIGlzIGFwcGxpZWQgYnkgdGhlc2UgZnVuY3Rpb25z CisgICoKKyAgKiBSZXR1cm5zOiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgd2VyZSBzdWNj ZXNzZnVsbHkgcmVhZAorICAqIGludG8gdGhlIGRhdGEgYnVmZmVyLgogICAqLwohIHN0YXRp YyBpbnQKICBDb3B5R2V0RGF0YSh2b2lkICpkYXRhYnVmLCBpbnQgZGF0YXNpemUpCiAgewor IAlzaXplX3QJCWJ5dGVzcmVhZCA9IDA7CisgCiAgCXN3aXRjaCAoY29weV9kZXN0KQogIAl7 CiAgCQljYXNlIENPUFlfRklMRToKISAJCQlieXRlc3JlYWQgPSBmcmVhZChkYXRhYnVmLCAx LCBkYXRhc2l6ZSwgY29weV9maWxlKTsKICAJCQlpZiAoZmVvZihjb3B5X2ZpbGUpKQogIAkJ CQlmZV9lb2YgPSB0cnVlOwogIAkJCWJyZWFrOwoqKioqKioqKioqKioqKioKKioqIDQwMiw0 MDcgKioqKgotLS0gNDQxLDQ0OCAtLS0tCiAgCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9DT05O RUNUSU9OX0ZBSUxVUkUpLAogIAkJCQkJCSBlcnJtc2coInVuZXhwZWN0ZWQgRU9GIG9uIGNs aWVudCBjb25uZWN0aW9uIikpKTsKICAJCQl9CisgCQkJYnl0ZXNyZWFkICs9IGRhdGFzaXpl OwkJLyogdXBkYXRlIHRoZSBjb3VudCBvZiBieXRlcyB0aGF0IHdlcmUKKyAJCQkJCQkJCQkJ ICogcmVhZCBzbyBmYXIgKi8KICAJCQlicmVhazsKICAJCWNhc2UgQ09QWV9ORVdfRkU6CiAg CQkJd2hpbGUgKGRhdGFzaXplID4gMCAmJiAhZmVfZW9mKQoqKioqKioqKioqKioqKioKKioq IDQxOCw0MjggKioqKgogIAkJCQkJaWYgKG10eXBlID09IEVPRikKICAJCQkJCQllcmVwb3J0 KEVSUk9SLAogIAkJCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9DT05ORUNUSU9OX0ZBSUxVUkUp LAohIAkJCQkJCSBlcnJtc2coInVuZXhwZWN0ZWQgRU9GIG9uIGNsaWVudCBjb25uZWN0aW9u IikpKTsKICAJCQkJCWlmIChwcV9nZXRtZXNzYWdlKGNvcHlfbXNnYnVmLCAwKSkKICAJCQkJ CQllcmVwb3J0KEVSUk9SLAogIAkJCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9DT05ORUNUSU9O X0ZBSUxVUkUpLAohIAkJCQkJCSBlcnJtc2coInVuZXhwZWN0ZWQgRU9GIG9uIGNsaWVudCBj b25uZWN0aW9uIikpKTsKICAJCQkJCXN3aXRjaCAobXR5cGUpCiAgCQkJCQl7CiAgCQkJCQkJ Y2FzZSAnZCc6CQkvKiBDb3B5RGF0YSAqLwotLS0gNDU5LDQ2OSAtLS0tCiAgCQkJCQlpZiAo bXR5cGUgPT0gRU9GKQogIAkJCQkJCWVyZXBvcnQoRVJST1IsCiAgCQkJCQkJCQkoZXJyY29k ZShFUlJDT0RFX0NPTk5FQ1RJT05fRkFJTFVSRSksCiEgCQkJCQkJCSBlcnJtc2coInVuZXhw ZWN0ZWQgRU9GIG9uIGNsaWVudCBjb25uZWN0aW9uIikpKTsKICAJCQkJCWlmIChwcV9nZXRt ZXNzYWdlKGNvcHlfbXNnYnVmLCAwKSkKICAJCQkJCQllcmVwb3J0KEVSUk9SLAogIAkJCQkJ CQkJKGVycmNvZGUoRVJSQ09ERV9DT05ORUNUSU9OX0ZBSUxVUkUpLAohIAkJCQkJCQkgZXJy bXNnKCJ1bmV4cGVjdGVkIEVPRiBvbiBjbGllbnQgY29ubmVjdGlvbiIpKSk7CiAgCQkJCQlz d2l0Y2ggKG10eXBlKQogIAkJCQkJewogIAkJCQkJCWNhc2UgJ2QnOgkJLyogQ29weURhdGEg Ki8KKioqKioqKioqKioqKioqCioqKiA0MzAsNDQxICoqKioKICAJCQkJCQljYXNlICdjJzoJ CS8qIENvcHlEb25lICovCiAgCQkJCQkJCS8qIENPUFkgSU4gY29ycmVjdGx5IHRlcm1pbmF0 ZWQgYnkgZnJvbnRlbmQgKi8KICAJCQkJCQkJZmVfZW9mID0gdHJ1ZTsKISAJCQkJCQkJcmV0 dXJuOwogIAkJCQkJCWNhc2UgJ2YnOgkJLyogQ29weUZhaWwgKi8KICAJCQkJCQkJZXJlcG9y dChFUlJPUiwKICAJCQkJCQkJCQkoZXJyY29kZShFUlJDT0RFX1FVRVJZX0NBTkNFTEVEKSwK ICAJCQkJCQkJCQkgZXJybXNnKCJDT1BZIGZyb20gc3RkaW4gZmFpbGVkOiAlcyIsCiEgCQkJ CQkJCQkJCSBwcV9nZXRtc2dzdHJpbmcoY29weV9tc2didWYpKSkpOwogIAkJCQkJCQlicmVh azsKICAJCQkJCQljYXNlICdIJzoJCS8qIEZsdXNoICovCiAgCQkJCQkJY2FzZSAnUyc6CQkv KiBTeW5jICovCi0tLSA0NzEsNDgyIC0tLS0KICAJCQkJCQljYXNlICdjJzoJCS8qIENvcHlE b25lICovCiAgCQkJCQkJCS8qIENPUFkgSU4gY29ycmVjdGx5IHRlcm1pbmF0ZWQgYnkgZnJv bnRlbmQgKi8KICAJCQkJCQkJZmVfZW9mID0gdHJ1ZTsKISAJCQkJCQkJcmV0dXJuIGJ5dGVz cmVhZDsKICAJCQkJCQljYXNlICdmJzoJCS8qIENvcHlGYWlsICovCiAgCQkJCQkJCWVyZXBv cnQoRVJST1IsCiAgCQkJCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9RVUVSWV9DQU5DRUxFRCks CiAgCQkJCQkJCQkJIGVycm1zZygiQ09QWSBmcm9tIHN0ZGluIGZhaWxlZDogJXMiLAohIAkJ CQkJCQkJCQkJcHFfZ2V0bXNnc3RyaW5nKGNvcHlfbXNnYnVmKSkpKTsKICAJCQkJCQkJYnJl YWs7CiAgCQkJCQkJY2FzZSAnSCc6CQkvKiBGbHVzaCAqLwogIAkJCQkJCWNhc2UgJ1MnOgkJ LyogU3luYyAqLwoqKioqKioqKioqKioqKioKKioqIDQ2MCw0NjkgKioqKgotLS0gNTAxLDUx NCAtLS0tCiAgCQkJCQlhdmFpbCA9IGRhdGFzaXplOwogIAkJCQlwcV9jb3B5bXNnYnl0ZXMo Y29weV9tc2didWYsIGRhdGFidWYsIGF2YWlsKTsKICAJCQkJZGF0YWJ1ZiA9ICh2b2lkICop ICgoY2hhciAqKSBkYXRhYnVmICsgYXZhaWwpOworIAkJCQlieXRlc3JlYWQgKz0gYXZhaWw7 CQkvKiB1cGRhdGUgdGhlIGNvdW50IG9mIGJ5dGVzIHRoYXQgd2VyZQorIAkJCQkJCQkJCQkg KiByZWFkIHNvIGZhciAqLwogIAkJCQlkYXRhc2l6ZSAtPSBhdmFpbDsKICAJCQl9CiAgCQkJ YnJlYWs7CiAgCX0KKyAKKyAJcmV0dXJuIGJ5dGVzcmVhZDsKICB9CiAgCiAgc3RhdGljIGlu dAoqKioqKioqKioqKioqKioKKioqIDY5NSw3MDEgKioqKgogIAlib29sCQliaW5hcnkgPSBm YWxzZTsKICAJYm9vbAkJb2lkcyA9IGZhbHNlOwogIAlib29sCQljc3ZfbW9kZSA9IGZhbHNl OwohIAlib29sICAgICAgICBoZWFkZXJfbGluZSA9IGZhbHNlOwogIAljaGFyCSAgICpkZWxp bSA9IE5VTEw7CiAgCWNoYXIJICAgKnF1b3RlID0gTlVMTDsKICAJY2hhcgkgICAqZXNjYXBl ID0gTlVMTDsKLS0tIDc0MCw3NDYgLS0tLQogIAlib29sCQliaW5hcnkgPSBmYWxzZTsKICAJ Ym9vbAkJb2lkcyA9IGZhbHNlOwogIAlib29sCQljc3ZfbW9kZSA9IGZhbHNlOwohIAlib29s CQloZWFkZXJfbGluZSA9IGZhbHNlOwogIAljaGFyCSAgICpkZWxpbSA9IE5VTEw7CiAgCWNo YXIJICAgKnF1b3RlID0gTlVMTDsKICAJY2hhcgkgICAqZXNjYXBlID0gTlVMTDsKKioqKioq KioqKioqKioqCioqKiA4MjgsODQwICoqKioKICAJCQllc2NhcGUgPSBxdW90ZTsKICAJfQog IAogIAkvKiBPbmx5IHNpbmdsZS1jaGFyYWN0ZXIgZGVsaW1pdGVyIHN0cmluZ3MgYXJlIHN1 cHBvcnRlZC4gKi8KICAJaWYgKHN0cmxlbihkZWxpbSkgIT0gMSkKICAJCWVyZXBvcnQoRVJS T1IsCiAgCQkJCShlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKICAJ CQkJIGVycm1zZygiQ09QWSBkZWxpbWl0ZXIgbXVzdCBiZSBhIHNpbmdsZSBjaGFyYWN0ZXIi KSkpOwogIAohICAgCS8qIENoZWNrIGhlYWRlciAqLwogIAlpZiAoIWNzdl9tb2RlICYmIGhl YWRlcl9saW5lKQogIAkJZXJlcG9ydChFUlJPUiwKICAJCQkJKGVycmNvZGUoRVJSQ09ERV9G RUFUVVJFX05PVF9TVVBQT1JURUQpLAotLS0gODczLDg4NyAtLS0tCiAgCQkJZXNjYXBlID0g cXVvdGU7CiAgCX0KICAKKyAJZXNjYXBlYyA9ICdcXCc7CQkJCS8qIHdpbGwgYmUgY29uZmln dXJhYmxlIGluIHRoZSBmdXR1cmUgKi8KKyAKICAJLyogT25seSBzaW5nbGUtY2hhcmFjdGVy IGRlbGltaXRlciBzdHJpbmdzIGFyZSBzdXBwb3J0ZWQuICovCiAgCWlmIChzdHJsZW4oZGVs aW0pICE9IDEpCiAgCQllcmVwb3J0KEVSUk9SLAogIAkJCQkoZXJyY29kZShFUlJDT0RFX0ZF QVRVUkVfTk9UX1NVUFBPUlRFRCksCiAgCQkJCSBlcnJtc2coIkNPUFkgZGVsaW1pdGVyIG11 c3QgYmUgYSBzaW5nbGUgY2hhcmFjdGVyIikpKTsKICAKISAJLyogQ2hlY2sgaGVhZGVyICov CiAgCWlmICghY3N2X21vZGUgJiYgaGVhZGVyX2xpbmUpCiAgCQllcmVwb3J0KEVSUk9SLAog IAkJCQkoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCioqKioqKioq KioqKioqKgoqKiogODcwLDg5MiAqKioqCiAgCWlmIChmb3JjZV9xdW90ZSAhPSBOSUwgJiYg aXNfZnJvbSkKICAJCWVyZXBvcnQoRVJST1IsCiAgCQkJCShlcnJjb2RlKEVSUkNPREVfRkVB VFVSRV9OT1RfU1VQUE9SVEVEKSwKISAJCQkgICBlcnJtc2coIkNPUFkgZm9yY2UgcXVvdGUg b25seSBhdmFpbGFibGUgdXNpbmcgQ09QWSBUTyIpKSk7CiAgCiAgCS8qIENoZWNrIGZvcmNl X25vdG51bGwgKi8KICAJaWYgKCFjc3ZfbW9kZSAmJiBmb3JjZV9ub3RudWxsICE9IE5JTCkK ICAJCWVyZXBvcnQoRVJST1IsCiAgCQkJCShlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1Rf U1VQUE9SVEVEKSwKISAJCQkgIGVycm1zZygiQ09QWSBmb3JjZSBub3QgbnVsbCBhdmFpbGFi bGUgb25seSBpbiBDU1YgbW9kZSIpKSk7CiAgCWlmIChmb3JjZV9ub3RudWxsICE9IE5JTCAm JiAhaXNfZnJvbSkKICAJCWVyZXBvcnQoRVJST1IsCiAgCQkJCShlcnJjb2RlKEVSUkNPREVf RkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKISAJCSAgZXJybXNnKCJDT1BZIGZvcmNlIG5vdCBu dWxsIG9ubHkgYXZhaWxhYmxlIHVzaW5nIENPUFkgRlJPTSIpKSk7CiAgCiAgCS8qIERvbid0 IGFsbG93IHRoZSBkZWxpbWl0ZXIgdG8gYXBwZWFyIGluIHRoZSBudWxsIHN0cmluZy4gKi8K ICAJaWYgKHN0cmNocihudWxsX3ByaW50LCBkZWxpbVswXSkgIT0gTlVMTCkKICAJCWVyZXBv cnQoRVJST1IsCiAgCQkJCShlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVE KSwKISAJCQkJIGVycm1zZygiQ09QWSBkZWxpbWl0ZXIgbXVzdCBub3QgYXBwZWFyIGluIHRo ZSBOVUxMIHNwZWNpZmljYXRpb24iKSkpOwogIAogIAkvKiBEb24ndCBhbGxvdyB0aGUgY3N2 IHF1b3RlIGNoYXIgdG8gYXBwZWFyIGluIHRoZSBudWxsIHN0cmluZy4gKi8KICAJaWYgKGNz dl9tb2RlICYmIHN0cmNocihudWxsX3ByaW50LCBxdW90ZVswXSkgIT0gTlVMTCkKLS0tIDkx Nyw5MzkgLS0tLQogIAlpZiAoZm9yY2VfcXVvdGUgIT0gTklMICYmIGlzX2Zyb20pCiAgCQll cmVwb3J0KEVSUk9SLAogIAkJCQkoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBP UlRFRCksCiEgCQkJCSBlcnJtc2coIkNPUFkgZm9yY2UgcXVvdGUgb25seSBhdmFpbGFibGUg dXNpbmcgQ09QWSBUTyIpKSk7CiAgCiAgCS8qIENoZWNrIGZvcmNlX25vdG51bGwgKi8KICAJ aWYgKCFjc3ZfbW9kZSAmJiBmb3JjZV9ub3RudWxsICE9IE5JTCkKICAJCWVyZXBvcnQoRVJS T1IsCiAgCQkJCShlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKISAJ CQkJIGVycm1zZygiQ09QWSBmb3JjZSBub3QgbnVsbCBhdmFpbGFibGUgb25seSBpbiBDU1Yg bW9kZSIpKSk7CiAgCWlmIChmb3JjZV9ub3RudWxsICE9IE5JTCAmJiAhaXNfZnJvbSkKICAJ CWVyZXBvcnQoRVJST1IsCiAgCQkJCShlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQ UE9SVEVEKSwKISAJCQkgIGVycm1zZygiQ09QWSBmb3JjZSBub3QgbnVsbCBvbmx5IGF2YWls YWJsZSB1c2luZyBDT1BZIEZST00iKSkpOwogIAogIAkvKiBEb24ndCBhbGxvdyB0aGUgZGVs aW1pdGVyIHRvIGFwcGVhciBpbiB0aGUgbnVsbCBzdHJpbmcuICovCiAgCWlmIChzdHJjaHIo bnVsbF9wcmludCwgZGVsaW1bMF0pICE9IE5VTEwpCiAgCQllcmVwb3J0KEVSUk9SLAogIAkJ CQkoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCiEgCQllcnJtc2co IkNPUFkgZGVsaW1pdGVyIG11c3Qgbm90IGFwcGVhciBpbiB0aGUgTlVMTCBzcGVjaWZpY2F0 aW9uIikpKTsKICAKICAJLyogRG9uJ3QgYWxsb3cgdGhlIGNzdiBxdW90ZSBjaGFyIHRvIGFw cGVhciBpbiB0aGUgbnVsbCBzdHJpbmcuICovCiAgCWlmIChjc3ZfbW9kZSAmJiBzdHJjaHIo bnVsbF9wcmludCwgcXVvdGVbMF0pICE9IE5VTEwpCioqKioqKioqKioqKioqKgoqKiogOTE0 LDkyMCAqKioqCiAgCQkJCShlcnJjb2RlKEVSUkNPREVfSU5TVUZGSUNJRU5UX1BSSVZJTEVH RSksCiAgCQkJCSBlcnJtc2coIm11c3QgYmUgc3VwZXJ1c2VyIHRvIENPUFkgdG8gb3IgZnJv bSBhIGZpbGUiKSwKICAJCQkJIGVycmhpbnQoIkFueW9uZSBjYW4gQ09QWSB0byBzdGRvdXQg b3IgZnJvbSBzdGRpbi4gIgohIAkJCQkJICAgInBzcWwncyBcXGNvcHkgY29tbWFuZCBhbHNv IHdvcmtzIGZvciBhbnlvbmUuIikpKTsKICAKICAJLyogRG9uJ3QgYWxsb3cgQ09QWSB3LyBP SURzIHRvIG9yIGZyb20gYSB0YWJsZSB3aXRob3V0IHRoZW0gKi8KICAJaWYgKG9pZHMgJiYg IXJlbC0+cmRfcmVsLT5yZWxoYXNvaWRzKQotLS0gOTYxLDk2NyAtLS0tCiAgCQkJCShlcnJj b2RlKEVSUkNPREVfSU5TVUZGSUNJRU5UX1BSSVZJTEVHRSksCiAgCQkJCSBlcnJtc2coIm11 c3QgYmUgc3VwZXJ1c2VyIHRvIENPUFkgdG8gb3IgZnJvbSBhIGZpbGUiKSwKICAJCQkJIGVy cmhpbnQoIkFueW9uZSBjYW4gQ09QWSB0byBzdGRvdXQgb3IgZnJvbSBzdGRpbi4gIgohIAkJ CQkJCSAicHNxbCdzIFxcY29weSBjb21tYW5kIGFsc28gd29ya3MgZm9yIGFueW9uZS4iKSkp OwogIAogIAkvKiBEb24ndCBhbGxvdyBDT1BZIHcvIE9JRHMgdG8gb3IgZnJvbSBhIHRhYmxl IHdpdGhvdXQgdGhlbSAqLwogIAlpZiAob2lkcyAmJiAhcmVsLT5yZF9yZWwtPnJlbGhhc29p ZHMpCioqKioqKioqKioqKioqKgoqKiogOTQyLDk0OSAqKioqCiAgCQkJaWYgKCFsaXN0X21l bWJlcl9pbnQoYXR0bnVtbGlzdCwgYXR0bnVtKSkKICAJCQkJZXJlcG9ydChFUlJPUiwKICAJ CQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfQ09MVU1OX1JFRkVSRU5DRSksCiEgCQkJ CWVycm1zZygiRk9SQ0UgUVVPVEUgY29sdW1uIFwiJXNcIiBub3QgcmVmZXJlbmNlZCBieSBD T1BZIiwKISAJCQkJCSAgIE5hbWVTdHIoYXR0clthdHRudW0gLSAxXS0+YXR0bmFtZSkpKSk7 CiAgCQl9CiAgCX0KICAKLS0tIDk4OSw5OTYgLS0tLQogIAkJCWlmICghbGlzdF9tZW1iZXJf aW50KGF0dG51bWxpc3QsIGF0dG51bSkpCiAgCQkJCWVyZXBvcnQoRVJST1IsCiAgCQkJCQkJ KGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX0NPTFVNTl9SRUZFUkVOQ0UpLAohIAkJCQkgICBl cnJtc2coIkZPUkNFIFFVT1RFIGNvbHVtbiBcIiVzXCIgbm90IHJlZmVyZW5jZWQgYnkgQ09Q WSIsCiEgCQkJCQkJICBOYW1lU3RyKGF0dHJbYXR0bnVtIC0gMV0tPmF0dG5hbWUpKSkpOwog IAkJfQogIAl9CiAgCioqKioqKioqKioqKioqKgoqKiogOTYzLDk4MSAqKioqCiAgCQkJaWYg KCFsaXN0X21lbWJlcl9pbnQoYXR0bnVtbGlzdCwgYXR0bnVtKSkKICAJCQkJZXJlcG9ydChF UlJPUiwKICAJCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfQ09MVU1OX1JFRkVSRU5D RSksCiEgCQkJCQkJIGVycm1zZygiRk9SQ0UgTk9UIE5VTEwgY29sdW1uIFwiJXNcIiBub3Qg cmVmZXJlbmNlZCBieSBDT1BZIiwKISAJCQkJCQkJCU5hbWVTdHIoYXR0clthdHRudW0gLSAx XS0+YXR0bmFtZSkpKSk7CiAgCQl9CiAgCX0KICAKICAJLyogU2V0IHVwIHZhcmlhYmxlcyB0 byBhdm9pZCBwZXItYXR0cmlidXRlIG92ZXJoZWFkLiAqLwohIAlpbml0U3RyaW5nSW5mbygm YXR0cmlidXRlX2J1Zik7CiAgCWluaXRTdHJpbmdJbmZvKCZsaW5lX2J1Zik7CiAgCWxpbmVf YnVmX2NvbnZlcnRlZCA9IGZhbHNlOwogIAogIAljbGllbnRfZW5jb2RpbmcgPSBwZ19nZXRf Y2xpZW50X2VuY29kaW5nKCk7CiAgCXNlcnZlcl9lbmNvZGluZyA9IEdldERhdGFiYXNlRW5j b2RpbmcoKTsKICAKICAJY29weV9kZXN0ID0gQ09QWV9GSUxFOwkJLyogZGVmYXVsdCAqLwog IAljb3B5X2ZpbGUgPSBOVUxMOwogIAljb3B5X21zZ2J1ZiA9IE5VTEw7Ci0tLSAxMDEwLDEw NDYgLS0tLQogIAkJCWlmICghbGlzdF9tZW1iZXJfaW50KGF0dG51bWxpc3QsIGF0dG51bSkp CiAgCQkJCWVyZXBvcnQoRVJST1IsCiAgCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElE X0NPTFVNTl9SRUZFUkVOQ0UpLAohIAkJCQllcnJtc2coIkZPUkNFIE5PVCBOVUxMIGNvbHVt biBcIiVzXCIgbm90IHJlZmVyZW5jZWQgYnkgQ09QWSIsCiEgCQkJCQkgICBOYW1lU3RyKGF0 dHJbYXR0bnVtIC0gMV0tPmF0dG5hbWUpKSkpOwogIAkJfQogIAl9CiAgCiAgCS8qIFNldCB1 cCB2YXJpYWJsZXMgdG8gYXZvaWQgcGVyLWF0dHJpYnV0ZSBvdmVyaGVhZC4gKi8KISAJaW5p dFN0cmluZ0luZm8oJmF0dHJfYnVmKTsKICAJaW5pdFN0cmluZ0luZm8oJmxpbmVfYnVmKTsK ICAJbGluZV9idWZfY29udmVydGVkID0gZmFsc2U7CiAgCiAgCWNsaWVudF9lbmNvZGluZyA9 IHBnX2dldF9jbGllbnRfZW5jb2RpbmcoKTsKICAJc2VydmVyX2VuY29kaW5nID0gR2V0RGF0 YWJhc2VFbmNvZGluZygpOwogIAorIAkvKgorIAkgKiBjaGVjayBpZiB0aGUgY2xpZW50IGVu Y29kaW5nIGlzIG9uZSBvZiB0aGUgNSBlbmNvZGluZ3MKKyAJICogdGhhdCBhcmUgbm90IHN1 cHBvcnRlZCBhcyBhIHNlcnZlciBlbmNvZGluZ3MuCisgCSAqLworIAlzd2l0Y2ggKGNsaWVu dF9lbmNvZGluZykKKyAJeworIAkJY2FzZSBQR19TSklTOgorIAkJY2FzZSBQR19CSUc1Ogor IAkJY2FzZSBQR19HQks6CisgCQljYXNlIFBHX1VIQzoKKyAJCWNhc2UgUEdfR0IxODAzMDoK KyAJCQljbGllbnRfZW5jb2Rpbmdfb25seSA9IHRydWU7CisgCQkJYnJlYWs7CisgCQlkZWZh dWx0OgorIAkJCWNsaWVudF9lbmNvZGluZ19vbmx5ID0gZmFsc2U7CisgCX0KKyAKKyAKICAJ Y29weV9kZXN0ID0gQ09QWV9GSUxFOwkJLyogZGVmYXVsdCAqLwogIAljb3B5X2ZpbGUgPSBO VUxMOwogIAljb3B5X21zZ2J1ZiA9IE5VTEw7CioqKioqKioqKioqKioqKgoqKiogOTk4LDEw MDUgKioqKgogIAkJCWVsc2UKICAJCQkJZXJlcG9ydChFUlJPUiwKICAJCQkJCQkoZXJyY29k ZShFUlJDT0RFX1dST05HX09CSkVDVF9UWVBFKSwKISAJCQkJCSAgIGVycm1zZygiY2Fubm90 IGNvcHkgdG8gbm9uLXRhYmxlIHJlbGF0aW9uIFwiJXNcIiIsCiEgCQkJCQkJCSAgUmVsYXRp b25HZXRSZWxhdGlvbk5hbWUocmVsKSkpKTsKICAJCX0KICAJCWlmIChwaXBlKQogIAkJewot LS0gMTA2MywxMDcwIC0tLS0KICAJCQllbHNlCiAgCQkJCWVyZXBvcnQoRVJST1IsCiAgCQkJ CQkJKGVycmNvZGUoRVJSQ09ERV9XUk9OR19PQkpFQ1RfVFlQRSksCiEgCQkJCQkJIGVycm1z ZygiY2Fubm90IGNvcHkgdG8gbm9uLXRhYmxlIHJlbGF0aW9uIFwiJXNcIiIsCiEgCQkJCQkJ CQlSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWwpKSkpOwogIAkJfQogIAkJaWYgKHBpcGUp CiAgCQl7CioqKioqKioqKioqKioqKgoqKiogMTAxNywxMDI0ICoqKioKICAJCQlpZiAoY29w eV9maWxlID09IE5VTEwpCiAgCQkJCWVyZXBvcnQoRVJST1IsCiAgCQkJCQkJKGVycmNvZGVf Zm9yX2ZpbGVfYWNjZXNzKCksCiEgCQkJCQkgZXJybXNnKCJjb3VsZCBub3Qgb3BlbiBmaWxl IFwiJXNcIiBmb3IgcmVhZGluZzogJW0iLAohIAkJCQkJCQlmaWxlbmFtZSkpKTsKICAKICAJ CQlmc3RhdChmaWxlbm8oY29weV9maWxlKSwgJnN0KTsKICAJCQlpZiAoU19JU0RJUihzdC5z dF9tb2RlKSkKLS0tIDEwODIsMTA4OSAtLS0tCiAgCQkJaWYgKGNvcHlfZmlsZSA9PSBOVUxM KQogIAkJCQllcmVwb3J0KEVSUk9SLAogIAkJCQkJCShlcnJjb2RlX2Zvcl9maWxlX2FjY2Vz cygpLAohIAkJCQkJCSBlcnJtc2coImNvdWxkIG5vdCBvcGVuIGZpbGUgXCIlc1wiIGZvciBy ZWFkaW5nOiAlbSIsCiEgCQkJCQkJCQlmaWxlbmFtZSkpKTsKICAKICAJCQlmc3RhdChmaWxl bm8oY29weV9maWxlKSwgJnN0KTsKICAJCQlpZiAoU19JU0RJUihzdC5zdF9tb2RlKSkKKioq KioqKioqKioqKioqCioqKiAxMDI5LDEwMzYgKioqKgogIAkJCQkJCSBlcnJtc2coIlwiJXNc IiBpcyBhIGRpcmVjdG9yeSIsIGZpbGVuYW1lKSkpOwogIAkJCX0KICAJCX0KISAJCUNvcHlG cm9tKHJlbCwgYXR0bnVtbGlzdCwgYmluYXJ5LCBvaWRzLCBkZWxpbSwgbnVsbF9wcmludCwg Y3N2X21vZGUsCiEgCQkJCSBxdW90ZSwgZXNjYXBlLCBmb3JjZV9ub3RudWxsX2F0dHMsIGhl YWRlcl9saW5lKTsKICAJfQogIAllbHNlCiAgCXsJCQkJCQkJLyogY29weSBmcm9tIGRhdGFi YXNlIHRvIGZpbGUgKi8KLS0tIDEwOTQsMTExMiAtLS0tCiAgCQkJCQkJIGVycm1zZygiXCIl c1wiIGlzIGEgZGlyZWN0b3J5IiwgZmlsZW5hbWUpKSk7CiAgCQkJfQogIAkJfQohIAohIAkJ aWYgKGNzdl9tb2RlIHx8IGJpbmFyeSkgLyogb2xkIHBhdGggKi8KISAJCQlDb3B5RnJvbShy ZWwsIGF0dG51bWxpc3QsIGJpbmFyeSwgb2lkcywgZGVsaW0sIG51bGxfcHJpbnQsIGNzdl9t b2RlLAohIAkJCQkJIHF1b3RlLCBlc2NhcGUsIGZvcmNlX25vdG51bGxfYXR0cywgaGVhZGVy X2xpbmUpOwohIAohIAkJLyoKISAJCSAqIG5ldyBwYXRoIGZvciBpbXByb3ZlZCBwZXJmb3Jt YW5jZSAob25seSBmb3IgZGVsaW1pdGVkIGZvcm1hdCBmb3IKISAJCSAqIG5vdykKISAJCSAq LwohIAkJZWxzZQohIAkJCUNvcHlGcm9tRGVsaW1pdGVkKHJlbCwgYXR0bnVtbGlzdCwgYmlu YXJ5LCBvaWRzLCBkZWxpbSwgbnVsbF9wcmludCwgY3N2X21vZGUsCiEgCQkJCQkJCSAgcXVv dGUsIGVzY2FwZSwgZm9yY2Vfbm90bnVsbF9hdHRzKTsKISAKICAJfQogIAllbHNlCiAgCXsJ CQkJCQkJLyogY29weSBmcm9tIGRhdGFiYXNlIHRvIGZpbGUgKi8KKioqKioqKioqKioqKioq CioqKiAxMDQ5LDEwNTYgKioqKgogIAkJCWVsc2UKICAJCQkJZXJlcG9ydChFUlJPUiwKICAJ CQkJCQkoZXJyY29kZShFUlJDT0RFX1dST05HX09CSkVDVF9UWVBFKSwKISAJCQkJCSBlcnJt c2coImNhbm5vdCBjb3B5IGZyb20gbm9uLXRhYmxlIHJlbGF0aW9uIFwiJXNcIiIsCiEgCQkJ CQkJCVJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHJlbCkpKSk7CiAgCQl9CiAgCQlpZiAocGlw ZSkKICAJCXsKLS0tIDExMjUsMTEzMiAtLS0tCiAgCQkJZWxzZQogIAkJCQllcmVwb3J0KEVS Uk9SLAogIAkJCQkJCShlcnJjb2RlKEVSUkNPREVfV1JPTkdfT0JKRUNUX1RZUEUpLAohIAkJ CQkJCSBlcnJtc2coImNhbm5vdCBjb3B5IGZyb20gbm9uLXRhYmxlIHJlbGF0aW9uIFwiJXNc IiIsCiEgCQkJCQkJCQlSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWwpKSkpOwogIAkJfQog IAkJaWYgKHBpcGUpCiAgCQl7CioqKioqKioqKioqKioqKgoqKiogMTA3MSwxMDc3ICoqKioK ICAJCQlpZiAoIWlzX2Fic29sdXRlX3BhdGgoZmlsZW5hbWUpKQogIAkJCQllcmVwb3J0KEVS Uk9SLAogIAkJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9OQU1FKSwKISAJCQkJICBl cnJtc2coInJlbGF0aXZlIHBhdGggbm90IGFsbG93ZWQgZm9yIENPUFkgdG8gZmlsZSIpKSk7 CiAgCiAgCQkJb3VtYXNrID0gdW1hc2soKG1vZGVfdCkgMDIyKTsKICAJCQljb3B5X2ZpbGUg PSBBbGxvY2F0ZUZpbGUoZmlsZW5hbWUsIFBHX0JJTkFSWV9XKTsKLS0tIDExNDcsMTE1MyAt LS0tCiAgCQkJaWYgKCFpc19hYnNvbHV0ZV9wYXRoKGZpbGVuYW1lKSkKICAJCQkJZXJlcG9y dChFUlJPUiwKICAJCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfTkFNRSksCiEgCQkJ CQkgIGVycm1zZygicmVsYXRpdmUgcGF0aCBub3QgYWxsb3dlZCBmb3IgQ09QWSB0byBmaWxl IikpKTsKICAKICAJCQlvdW1hc2sgPSB1bWFzaygobW9kZV90KSAwMjIpOwogIAkJCWNvcHlf ZmlsZSA9IEFsbG9jYXRlRmlsZShmaWxlbmFtZSwgUEdfQklOQVJZX1cpOwoqKioqKioqKioq KioqKioKKioqIDEwODAsMTA4NyAqKioqCiAgCQkJaWYgKGNvcHlfZmlsZSA9PSBOVUxMKQog IAkJCQllcmVwb3J0KEVSUk9SLAogIAkJCQkJCShlcnJjb2RlX2Zvcl9maWxlX2FjY2Vzcygp LAohIAkJCQkJIGVycm1zZygiY291bGQgbm90IG9wZW4gZmlsZSBcIiVzXCIgZm9yIHdyaXRp bmc6ICVtIiwKISAJCQkJCQkJZmlsZW5hbWUpKSk7CiAgCiAgCQkJZnN0YXQoZmlsZW5vKGNv cHlfZmlsZSksICZzdCk7CiAgCQkJaWYgKFNfSVNESVIoc3Quc3RfbW9kZSkpCi0tLSAxMTU2 LDExNjMgLS0tLQogIAkJCWlmIChjb3B5X2ZpbGUgPT0gTlVMTCkKICAJCQkJZXJlcG9ydChF UlJPUiwKICAJCQkJCQkoZXJyY29kZV9mb3JfZmlsZV9hY2Nlc3MoKSwKISAJCQkJCQkgZXJy bXNnKCJjb3VsZCBub3Qgb3BlbiBmaWxlIFwiJXNcIiBmb3Igd3JpdGluZzogJW0iLAohIAkJ CQkJCQkJZmlsZW5hbWUpKSk7CiAgCiAgCQkJZnN0YXQoZmlsZW5vKGNvcHlfZmlsZSksICZz dCk7CiAgCQkJaWYgKFNfSVNESVIoc3Quc3RfbW9kZSkpCioqKioqKioqKioqKioqKgoqKiog MTEwNiwxMTE0ICoqKioKICAJCQkJCSBlcnJtc2coImNvdWxkIG5vdCB3cml0ZSB0byBmaWxl IFwiJXNcIjogJW0iLAogIAkJCQkJCQlmaWxlbmFtZSkpKTsKICAJfQohIAlwZnJlZShhdHRy aWJ1dGVfYnVmLmRhdGEpOwogIAlwZnJlZShsaW5lX2J1Zi5kYXRhKTsKICAKICAJLyoKICAJ ICogQ2xvc2UgdGhlIHJlbGF0aW9uLglJZiByZWFkaW5nLCB3ZSBjYW4gcmVsZWFzZSB0aGUg QWNjZXNzU2hhcmVMb2NrCiAgCSAqIHdlIGdvdDsgaWYgd3JpdGluZywgd2Ugc2hvdWxkIGhv bGQgdGhlIGxvY2sgdW50aWwgZW5kIG9mCi0tLSAxMTgyLDExOTEgLS0tLQogIAkJCQkJIGVy cm1zZygiY291bGQgbm90IHdyaXRlIHRvIGZpbGUgXCIlc1wiOiAlbSIsCiAgCQkJCQkJCWZp bGVuYW1lKSkpOwogIAl9CiEgCXBmcmVlKGF0dHJfYnVmLmRhdGEpOwogIAlwZnJlZShsaW5l X2J1Zi5kYXRhKTsKICAKKyAKICAJLyoKICAJICogQ2xvc2UgdGhlIHJlbGF0aW9uLglJZiBy ZWFkaW5nLCB3ZSBjYW4gcmVsZWFzZSB0aGUgQWNjZXNzU2hhcmVMb2NrCiAgCSAqIHdlIGdv dDsgaWYgd3JpdGluZywgd2Ugc2hvdWxkIGhvbGQgdGhlIGxvY2sgdW50aWwgZW5kIG9mCioq KioqKioqKioqKioqKgoqKiogMTI0NSwxMjUzICoqKioKICAJCS8qIGlmIGEgaGVhZGVyIGhh cyBiZWVuIHJlcXVlc3RlZCBzZW5kIHRoZSBsaW5lICovCiAgCQlpZiAoaGVhZGVyX2xpbmUp CiAgCQl7CiEgCQkJYm9vbCBoZHJfZGVsaW0gPSBmYWxzZTsKISAJCQljaGFyICpjb2xuYW1l OwohIAkJCQogIAkJCWZvcmVhY2goY3VyLCBhdHRudW1saXN0KQogIAkJCXsKICAJCQkJaW50 CQkJYXR0bnVtID0gbGZpcnN0X2ludChjdXIpOwotLS0gMTMyMiwxMzMwIC0tLS0KICAJCS8q IGlmIGEgaGVhZGVyIGhhcyBiZWVuIHJlcXVlc3RlZCBzZW5kIHRoZSBsaW5lICovCiAgCQlp ZiAoaGVhZGVyX2xpbmUpCiAgCQl7CiEgCQkJYm9vbAkJaGRyX2RlbGltID0gZmFsc2U7CiEg CQkJY2hhcgkgICAqY29sbmFtZTsKISAKICAJCQlmb3JlYWNoKGN1ciwgYXR0bnVtbGlzdCkK ICAJCQl7CiAgCQkJCWludAkJCWF0dG51bSA9IGxmaXJzdF9pbnQoY3VyKTsKKioqKioqKioq KioqKioqCioqKiAxMjk4LDEzMDQgKioqKgogIAkJCWlmIChvaWRzKQogIAkJCXsKICAJCQkJ c3RyaW5nID0gRGF0dW1HZXRDU3RyaW5nKERpcmVjdEZ1bmN0aW9uQ2FsbDEob2lkb3V0LAoh IAkJCQkJCQkgIE9iamVjdElkR2V0RGF0dW0oSGVhcFR1cGxlR2V0T2lkKHR1cGxlKSkpKTsK ICAJCQkJQ29weVNlbmRTdHJpbmcoc3RyaW5nKTsKICAJCQkJbmVlZF9kZWxpbSA9IHRydWU7 CiAgCQkJfQotLS0gMTM3NSwxMzgxIC0tLS0KICAJCQlpZiAob2lkcykKICAJCQl7CiAgCQkJ CXN0cmluZyA9IERhdHVtR2V0Q1N0cmluZyhEaXJlY3RGdW5jdGlvbkNhbGwxKG9pZG91dCwK ISAJCQkJCQkJCSAgT2JqZWN0SWRHZXREYXR1bShIZWFwVHVwbGVHZXRPaWQodHVwbGUpKSkp OwogIAkJCQlDb3B5U2VuZFN0cmluZyhzdHJpbmcpOwogIAkJCQluZWVkX2RlbGltID0gdHJ1 ZTsKICAJCQl9CioqKioqKioqKioqKioqKgoqKiogMTMzNSwxMzQyICoqKioKICAJCQkJCWlm IChjc3ZfbW9kZSkKICAJCQkJCXsKICAJCQkJCQlDb3B5QXR0cmlidXRlT3V0Q1NWKHN0cmlu ZywgZGVsaW0sIHF1b3RlLCBlc2NhcGUsCiEgCQkJCQkJCQkJICAoc3RyY21wKHN0cmluZywg bnVsbF9wcmludCkgPT0gMCB8fAohIAkJCQkJCQkJCSAgIGZvcmNlX3F1b3RlW2F0dG51bSAt IDFdKSk7CiAgCQkJCQl9CiAgCQkJCQllbHNlCiAgCQkJCQkJQ29weUF0dHJpYnV0ZU91dChz dHJpbmcsIGRlbGltKTsKLS0tIDE0MTIsMTQxOSAtLS0tCiAgCQkJCQlpZiAoY3N2X21vZGUp CiAgCQkJCQl7CiAgCQkJCQkJQ29weUF0dHJpYnV0ZU91dENTVihzdHJpbmcsIGRlbGltLCBx dW90ZSwgZXNjYXBlLAohIAkJCQkJCQkJCQkgIChzdHJjbXAoc3RyaW5nLCBudWxsX3ByaW50 KSA9PSAwIHx8CiEgCQkJCQkJCQkJCSAgIGZvcmNlX3F1b3RlW2F0dG51bSAtIDFdKSk7CiAg CQkJCQl9CiAgCQkJCQllbHNlCiAgCQkJCQkJQ29weUF0dHJpYnV0ZU91dChzdHJpbmcsIGRl bGltKTsKKioqKioqKioqKioqKioqCioqKiAxMzQ2LDEzNTMgKioqKgogIAkJCQl7CiAgCQkJ CQlieXRlYQkgICAqb3V0cHV0Ynl0ZXM7CiAgCiEgCQkJCQlvdXRwdXRieXRlcyA9IERhdHVt R2V0Qnl0ZWFQKEZ1bmN0aW9uQ2FsbDEoJm91dF9mdW5jdGlvbnNbYXR0bnVtIC0gMV0sCiEg CQkJCQkJCQkJCQkJCQkJICAgdmFsdWUpKTsKICAJCQkJCS8qIFdlIGFzc3VtZSB0aGUgcmVz dWx0IHdpbGwgbm90IGhhdmUgYmVlbiB0b2FzdGVkICovCiAgCQkJCQlDb3B5U2VuZEludDMy KFZBUlNJWkUob3V0cHV0Ynl0ZXMpIC0gVkFSSERSU1opOwogIAkJCQkJQ29weVNlbmREYXRh KFZBUkRBVEEob3V0cHV0Ynl0ZXMpLAotLS0gMTQyMywxNDMxIC0tLS0KICAJCQkJewogIAkJ CQkJYnl0ZWEJICAgKm91dHB1dGJ5dGVzOwogIAohIAkJCQkJb3V0cHV0Ynl0ZXMgPQohIAkJ CQkJCURhdHVtR2V0Qnl0ZWFQKEZ1bmN0aW9uQ2FsbDEoJm91dF9mdW5jdGlvbnNbYXR0bnVt IC0gMV0sCiEgCQkJCQkJCQkJCQkJCSB2YWx1ZSkpOwogIAkJCQkJLyogV2UgYXNzdW1lIHRo ZSByZXN1bHQgd2lsbCBub3QgaGF2ZSBiZWVuIHRvYXN0ZWQgKi8KICAJCQkJCUNvcHlTZW5k SW50MzIoVkFSU0laRShvdXRwdXRieXRlcykgLSBWQVJIRFJTWik7CiAgCQkJCQlDb3B5U2Vu ZERhdGEoVkFSREFUQShvdXRwdXRieXRlcyksCioqKioqKioqKioqKioqKgoqKiogMTM5Niwx NDA1ICoqKioKICAJCWlmIChjb3B5X2F0dG5hbWUpCiAgCQl7CiAgCQkJLyogZXJyb3IgaXMg cmVsZXZhbnQgdG8gYSBwYXJ0aWN1bGFyIGNvbHVtbiAqLwohIAkJCWxpbWl0X3ByaW50b3V0 X2xlbmd0aCgmYXR0cmlidXRlX2J1Zik7CiAgCQkJZXJyY29udGV4dCgiQ09QWSAlcywgbGlu ZSAlZCwgY29sdW1uICVzOiBcIiVzXCIiLAogIAkJCQkJICAgY29weV9yZWxuYW1lLCBjb3B5 X2xpbmVubywgY29weV9hdHRuYW1lLAohIAkJCQkJICAgYXR0cmlidXRlX2J1Zi5kYXRhKTsK ICAJCX0KICAJCWVsc2UKICAJCXsKLS0tIDE0NzQsMTQ4MyAtLS0tCiAgCQlpZiAoY29weV9h dHRuYW1lKQogIAkJewogIAkJCS8qIGVycm9yIGlzIHJlbGV2YW50IHRvIGEgcGFydGljdWxh ciBjb2x1bW4gKi8KISAJCQlsaW1pdF9wcmludG91dF9sZW5ndGgoJmF0dHJfYnVmKTsKICAJ CQllcnJjb250ZXh0KCJDT1BZICVzLCBsaW5lICVkLCBjb2x1bW4gJXM6IFwiJXNcIiIsCiAg CQkJCQkgICBjb3B5X3JlbG5hbWUsIGNvcHlfbGluZW5vLCBjb3B5X2F0dG5hbWUsCiEgCQkJ CQkgICBhdHRyX2J1Zi5kYXRhKTsKICAJCX0KICAJCWVsc2UKICAJCXsKKioqKioqKioqKioq KioqCioqKiAxNDA3LDE0MTIgKioqKgotLS0gMTQ4NSwxNDkyIC0tLS0KICAJCQlpZiAobGlu ZV9idWZfY29udmVydGVkIHx8CiAgCQkJCWNsaWVudF9lbmNvZGluZyA9PSBzZXJ2ZXJfZW5j b2RpbmcpCiAgCQkJeworIAkJCQkvKiBTdHJpcCBvZmYgdGhlIG5ld2xpbmUgKi8KKyAJCQkJ KihsaW5lX2J1Zi5kYXRhICsgbGluZV9idWYubGVuIC0gMSkgPSAnXDAnOwogIAkJCQlsaW1p dF9wcmludG91dF9sZW5ndGgoJmxpbmVfYnVmKTsKICAJCQkJZXJyY29udGV4dCgiQ09QWSAl cywgbGluZSAlZDogXCIlc1wiIiwKICAJCQkJCQkgICBjb3B5X3JlbG5hbWUsIGNvcHlfbGlu ZW5vLAoqKioqKioqKioqKioqKioKKioqIDE0MTcsMTQyMyAqKioqCiAgCQkJCS8qCiAgCQkJ CSAqIEhlcmUsIHRoZSBsaW5lIGJ1ZmZlciBpcyBzdGlsbCBpbiBhIGZvcmVpZ24gZW5jb2Rp bmcsCiAgCQkJCSAqIGFuZCBpbmRlZWQgaXQncyBxdWl0ZSBsaWtlbHkgdGhhdCB0aGUgZXJy b3IgaXMgcHJlY2lzZWx5CiEgCQkJCSAqIGEgZmFpbHVyZSB0byBkbyBlbmNvZGluZyBjb252 ZXJzaW9uIChpZSwgYmFkIGRhdGEpLiAgV2UKICAJCQkJICogZGFyZSBub3QgdHJ5IHRvIGNv bnZlcnQgaXQsIGFuZCBhdCBwcmVzZW50IHRoZXJlJ3Mgbm8gd2F5CiAgCQkJCSAqIHRvIHJl Z3VyZ2l0YXRlIGl0IHdpdGhvdXQgY29udmVyc2lvbi4gIFNvIHdlIGhhdmUgdG8gcHVudAog IAkJCQkgKiBhbmQganVzdCByZXBvcnQgdGhlIGxpbmUgbnVtYmVyLgotLS0gMTQ5NywxNTAz IC0tLS0KICAJCQkJLyoKICAJCQkJICogSGVyZSwgdGhlIGxpbmUgYnVmZmVyIGlzIHN0aWxs IGluIGEgZm9yZWlnbiBlbmNvZGluZywKICAJCQkJICogYW5kIGluZGVlZCBpdCdzIHF1aXRl IGxpa2VseSB0aGF0IHRoZSBlcnJvciBpcyBwcmVjaXNlbHkKISAJCQkJICogYSBmYWlsdXJl IHRvIGRvIGVuY29kaW5nIGNvbnZlcnNpb24gKGllLCBiYWQgZGF0YSkuCVdlCiAgCQkJCSAq IGRhcmUgbm90IHRyeSB0byBjb252ZXJ0IGl0LCBhbmQgYXQgcHJlc2VudCB0aGVyZSdzIG5v IHdheQogIAkJCQkgKiB0byByZWd1cmdpdGF0ZSBpdCB3aXRob3V0IGNvbnZlcnNpb24uICBT byB3ZSBoYXZlIHRvIHB1bnQKICAJCQkJICogYW5kIGp1c3QgcmVwb3J0IHRoZSBsaW5lIG51 bWJlci4KKioqKioqKioqKioqKioqCioqKiAxNDYwLDE0NjUgKioqKgotLS0gMTU0MCwxNTQ2 IC0tLS0KICAJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsICIuLi4iKTsKICB9CiAgCisg CiAgLyoKICAgKiBDb3B5IEZST00gZmlsZSB0byByZWxhdGlvbi4KICAgKi8KKioqKioqKioq KioqKioqCioqKiAxNTUxLDE1NTcgKioqKgogIAkJLyogRmV0Y2ggdGhlIGlucHV0IGZ1bmN0 aW9uIGFuZCB0eXBpb3BhcmFtIGluZm8gKi8KICAJCWlmIChiaW5hcnkpCiAgCQkJZ2V0VHlw ZUJpbmFyeUlucHV0SW5mbyhhdHRyW2F0dG51bSAtIDFdLT5hdHR0eXBpZCwKISAJCQkJCQkJ CSAmaW5fZnVuY19vaWQsICZ0eXBpb3BhcmFtc1thdHRudW0gLSAxXSk7CiAgCQllbHNlCiAg CQkJZ2V0VHlwZUlucHV0SW5mbyhhdHRyW2F0dG51bSAtIDFdLT5hdHR0eXBpZCwKICAJCQkJ CQkJICZpbl9mdW5jX29pZCwgJnR5cGlvcGFyYW1zW2F0dG51bSAtIDFdKTsKLS0tIDE2MzIs MTYzOCAtLS0tCiAgCQkvKiBGZXRjaCB0aGUgaW5wdXQgZnVuY3Rpb24gYW5kIHR5cGlvcGFy YW0gaW5mbyAqLwogIAkJaWYgKGJpbmFyeSkKICAJCQlnZXRUeXBlQmluYXJ5SW5wdXRJbmZv KGF0dHJbYXR0bnVtIC0gMV0tPmF0dHR5cGlkLAohIAkJCQkJCQkJICAgJmluX2Z1bmNfb2lk LCAmdHlwaW9wYXJhbXNbYXR0bnVtIC0gMV0pOwogIAkJZWxzZQogIAkJCWdldFR5cGVJbnB1 dEluZm8oYXR0clthdHRudW0gLSAxXS0+YXR0dHlwaWQsCiAgCQkJCQkJCSAmaW5fZnVuY19v aWQsICZ0eXBpb3BhcmFtc1thdHRudW0gLSAxXSk7CioqKioqKioqKioqKioqKgoqKiogMTY0 NSwxNjU3ICoqKioKICAJCWlmICgodG1wID4+IDE2KSAhPSAwKQogIAkJCWVyZXBvcnQoRVJS T1IsCiAgCQkJCQkoZXJyY29kZShFUlJDT0RFX0JBRF9DT1BZX0ZJTEVfRk9STUFUKSwKISAJ CQkgZXJybXNnKCJ1bnJlY29nbml6ZWQgY3JpdGljYWwgZmxhZ3MgaW4gQ09QWSBmaWxlIGhl YWRlciIpKSk7CiAgCQkvKiBIZWFkZXIgZXh0ZW5zaW9uIGxlbmd0aCAqLwogIAkJdG1wID0g Q29weUdldEludDMyKCk7CiAgCQlpZiAoQ29weUdldEVvZigpIHx8IHRtcCA8IDApCiAgCQkJ ZXJlcG9ydChFUlJPUiwKICAJCQkJCShlcnJjb2RlKEVSUkNPREVfQkFEX0NPUFlfRklMRV9G T1JNQVQpLAohIAkJCQkgICBlcnJtc2coImludmFsaWQgQ09QWSBmaWxlIGhlYWRlciAobWlz c2luZyBsZW5ndGgpIikpKTsKICAJCS8qIFNraXAgZXh0ZW5zaW9uIGhlYWRlciwgaWYgcHJl c2VudCAqLwogIAkJd2hpbGUgKHRtcC0tID4gMCkKICAJCXsKLS0tIDE3MjYsMTczOCAtLS0t CiAgCQlpZiAoKHRtcCA+PiAxNikgIT0gMCkKICAJCQllcmVwb3J0KEVSUk9SLAogIAkJCQkJ KGVycmNvZGUoRVJSQ09ERV9CQURfQ09QWV9GSUxFX0ZPUk1BVCksCiEgCQkJCSBlcnJtc2co InVucmVjb2duaXplZCBjcml0aWNhbCBmbGFncyBpbiBDT1BZIGZpbGUgaGVhZGVyIikpKTsK ICAJCS8qIEhlYWRlciBleHRlbnNpb24gbGVuZ3RoICovCiAgCQl0bXAgPSBDb3B5R2V0SW50 MzIoKTsKICAJCWlmIChDb3B5R2V0RW9mKCkgfHwgdG1wIDwgMCkKICAJCQllcmVwb3J0KEVS Uk9SLAogIAkJCQkJKGVycmNvZGUoRVJSQ09ERV9CQURfQ09QWV9GSUxFX0ZPUk1BVCksCiEg CQkJCQkgZXJybXNnKCJpbnZhbGlkIENPUFkgZmlsZSBoZWFkZXIgKG1pc3NpbmcgbGVuZ3Ro KSIpKSk7CiAgCQkvKiBTa2lwIGV4dGVuc2lvbiBoZWFkZXIsIGlmIHByZXNlbnQgKi8KICAJ CXdoaWxlICh0bXAtLSA+IDApCiAgCQl7CioqKioqKioqKioqKioqKgoqKiogMTY1OSwxNjY1 ICoqKioKICAJCQlpZiAoQ29weUdldEVvZigpKQogIAkJCQllcmVwb3J0KEVSUk9SLAogIAkJ CQkJCShlcnJjb2RlKEVSUkNPREVfQkFEX0NPUFlfRklMRV9GT1JNQVQpLAohIAkJCQkJIGVy cm1zZygiaW52YWxpZCBDT1BZIGZpbGUgaGVhZGVyICh3cm9uZyBsZW5ndGgpIikpKTsKICAJ CX0KICAJfQogIAotLS0gMTc0MCwxNzQ2IC0tLS0KICAJCQlpZiAoQ29weUdldEVvZigpKQog IAkJCQllcmVwb3J0KEVSUk9SLAogIAkJCQkJCShlcnJjb2RlKEVSUkNPREVfQkFEX0NPUFlf RklMRV9GT1JNQVQpLAohIAkJCQkJCSBlcnJtc2coImludmFsaWQgQ09QWSBmaWxlIGhlYWRl ciAod3JvbmcgbGVuZ3RoKSIpKSk7CiAgCQl9CiAgCX0KICAKKioqKioqKioqKioqKioqCioq KiAxNjk2LDE3MDIgKioqKgogIAlpZiAoaGVhZGVyX2xpbmUpCiAgCXsKICAJCWNvcHlfbGlu ZW5vKys7CiEgCQlkb25lID0gQ29weVJlYWRMaW5lKHF1b3RlLCBlc2NhcGUpIDsKICAJfQog IAogIAl3aGlsZSAoIWRvbmUpCi0tLSAxNzc3LDE3ODMgLS0tLQogIAlpZiAoaGVhZGVyX2xp bmUpCiAgCXsKICAJCWNvcHlfbGluZW5vKys7CiEgCQlkb25lID0gQ29weVJlYWRMaW5lKHF1 b3RlLCBlc2NhcGUpOwogIAl9CiAgCiAgCXdoaWxlICghZG9uZSkKKioqKioqKioqKioqKioq CioqKiAxNzI1LDE3MzEgKioqKgogIAkJCUxpc3RDZWxsICAgKmN1cjsKICAKICAJCQkvKiBB Y3R1YWxseSByZWFkIHRoZSBsaW5lIGludG8gbWVtb3J5IGhlcmUgKi8KISAJCQlkb25lID0g Y3N2X21vZGUgPyAKICAJCQkJQ29weVJlYWRMaW5lKHF1b3RlLCBlc2NhcGUpIDogQ29weVJl YWRMaW5lKE5VTEwsIE5VTEwpOwogIAogIAkJCS8qCi0tLSAxODA2LDE4MTIgLS0tLQogIAkJ CUxpc3RDZWxsICAgKmN1cjsKICAKICAJCQkvKiBBY3R1YWxseSByZWFkIHRoZSBsaW5lIGlu dG8gbWVtb3J5IGhlcmUgKi8KISAJCQlkb25lID0gY3N2X21vZGUgPwogIAkJCQlDb3B5UmVh ZExpbmUocXVvdGUsIGVzY2FwZSkgOiBDb3B5UmVhZExpbmUoTlVMTCwgTlVMTCk7CiAgCiAg CQkJLyoKKioqKioqKioqKioqKioqCioqKiAxNzUxLDE3NTcgKioqKgogIAkJCQl7CiAgCQkJ CQljb3B5X2F0dG5hbWUgPSAib2lkIjsKICAJCQkJCWxvYWRlZF9vaWQgPSBEYXR1bUdldE9i amVjdElkKERpcmVjdEZ1bmN0aW9uQ2FsbDEob2lkaW4sCiEgCQkJCQkJCQkJCQkgICBDU3Ry aW5nR2V0RGF0dW0oc3RyaW5nKSkpOwogIAkJCQkJaWYgKGxvYWRlZF9vaWQgPT0gSW52YWxp ZE9pZCkKICAJCQkJCQllcmVwb3J0KEVSUk9SLAogIAkJCQkJCQkJKGVycmNvZGUoRVJSQ09E RV9CQURfQ09QWV9GSUxFX0ZPUk1BVCksCi0tLSAxODMyLDE4MzggLS0tLQogIAkJCQl7CiAg CQkJCQljb3B5X2F0dG5hbWUgPSAib2lkIjsKICAJCQkJCWxvYWRlZF9vaWQgPSBEYXR1bUdl dE9iamVjdElkKERpcmVjdEZ1bmN0aW9uQ2FsbDEob2lkaW4sCiEgCQkJCQkJCQkJCQkJICAg Q1N0cmluZ0dldERhdHVtKHN0cmluZykpKTsKICAJCQkJCWlmIChsb2FkZWRfb2lkID09IElu dmFsaWRPaWQpCiAgCQkJCQkJZXJlcG9ydChFUlJPUiwKICAJCQkJCQkJCShlcnJjb2RlKEVS UkNPREVfQkFEX0NPUFlfRklMRV9GT1JNQVQpLAoqKioqKioqKioqKioqKioKKioqIDE3Nzks MTc4OSAqKioqCiAgCQkJCWlmIChjc3ZfbW9kZSkKICAJCQkJewogIAkJCQkJc3RyaW5nID0g Q29weVJlYWRBdHRyaWJ1dGVDU1YoZGVsaW0sIG51bGxfcHJpbnQsIHF1b3RlLAohIAkJCQkJ CQkJCQkJICAgZXNjYXBlLCAmcmVzdWx0LCAmaXNudWxsKTsKICAJCQkJCWlmIChyZXN1bHQg PT0gVU5URVJNSU5BVEVEX0ZJRUxEKQogIAkJCQkJCWVyZXBvcnQoRVJST1IsCiAgCQkJCQkJ CQkoZXJyY29kZShFUlJDT0RFX0JBRF9DT1BZX0ZJTEVfRk9STUFUKSwKISAJCQkJCQkJICAg ZXJybXNnKCJ1bnRlcm1pbmF0ZWQgQ1NWIHF1b3RlZCBmaWVsZCIpKSk7CiAgCQkJCX0KICAJ CQkJZWxzZQogIAkJCQkJc3RyaW5nID0gQ29weVJlYWRBdHRyaWJ1dGUoZGVsaW0sIG51bGxf cHJpbnQsCi0tLSAxODYwLDE4NzAgLS0tLQogIAkJCQlpZiAoY3N2X21vZGUpCiAgCQkJCXsK ICAJCQkJCXN0cmluZyA9IENvcHlSZWFkQXR0cmlidXRlQ1NWKGRlbGltLCBudWxsX3ByaW50 LCBxdW90ZSwKISAJCQkJCQkJCQkJCQkgIGVzY2FwZSwgJnJlc3VsdCwgJmlzbnVsbCk7CiAg CQkJCQlpZiAocmVzdWx0ID09IFVOVEVSTUlOQVRFRF9GSUVMRCkKICAJCQkJCQllcmVwb3J0 KEVSUk9SLAogIAkJCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9CQURfQ09QWV9GSUxFX0ZPUk1B VCksCiEgCQkJCQkJCQkgZXJybXNnKCJ1bnRlcm1pbmF0ZWQgQ1NWIHF1b3RlZCBmaWVsZCIp KSk7CiAgCQkJCX0KICAJCQkJZWxzZQogIAkJCQkJc3RyaW5nID0gQ29weVJlYWRBdHRyaWJ1 dGUoZGVsaW0sIG51bGxfcHJpbnQsCioqKioqKioqKioqKioqKgoqKiogMTgwMSwxODA4ICoq KioKICAJCQkJCWNvcHlfYXR0bmFtZSA9IE5hbWVTdHIoYXR0clttXS0+YXR0bmFtZSk7CiAg CQkJCQl2YWx1ZXNbbV0gPSBGdW5jdGlvbkNhbGwzKCZpbl9mdW5jdGlvbnNbbV0sCiAgCQkJ CQkJCQkJCQkgIENTdHJpbmdHZXREYXR1bShzdHJpbmcpLAohIAkJCQkJCQkJCQlPYmplY3RJ ZEdldERhdHVtKHR5cGlvcGFyYW1zW21dKSwKISAJCQkJCQkJCQkgIEludDMyR2V0RGF0dW0o YXR0clttXS0+YXR0dHlwbW9kKSk7CiAgCQkJCQludWxsc1ttXSA9ICcgJzsKICAJCQkJCWNv cHlfYXR0bmFtZSA9IE5VTEw7CiAgCQkJCX0KLS0tIDE4ODIsMTg4OSAtLS0tCiAgCQkJCQlj b3B5X2F0dG5hbWUgPSBOYW1lU3RyKGF0dHJbbV0tPmF0dG5hbWUpOwogIAkJCQkJdmFsdWVz W21dID0gRnVuY3Rpb25DYWxsMygmaW5fZnVuY3Rpb25zW21dLAogIAkJCQkJCQkJCQkJICBD U3RyaW5nR2V0RGF0dW0oc3RyaW5nKSwKISAJCQkJCQkJCQkJCU9iamVjdElkR2V0RGF0dW0o dHlwaW9wYXJhbXNbbV0pLAohIAkJCQkJCQkJCQkgIEludDMyR2V0RGF0dW0oYXR0clttXS0+ YXR0dHlwbW9kKSk7CiAgCQkJCQludWxsc1ttXSA9ICcgJzsKICAJCQkJCWNvcHlfYXR0bmFt ZSA9IE5VTEw7CiAgCQkJCX0KKioqKioqKioqKioqKioqCioqKiAxODE4LDE4MjQgKioqKgog IAkJCWlmIChyZXN1bHQgPT0gTk9STUFMX0FUVFIgJiYgbGluZV9idWYubGVuICE9IDApCiAg CQkJCWVyZXBvcnQoRVJST1IsCiAgCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9CQURfQ09QWV9G SUxFX0ZPUk1BVCksCiEgCQkJCQkgICBlcnJtc2coImV4dHJhIGRhdGEgYWZ0ZXIgbGFzdCBl eHBlY3RlZCBjb2x1bW4iKSkpOwogIAkJfQogIAkJZWxzZQogIAkJewotLS0gMTg5OSwxOTA1 IC0tLS0KICAJCQlpZiAocmVzdWx0ID09IE5PUk1BTF9BVFRSICYmIGxpbmVfYnVmLmxlbiAh PSAwKQogIAkJCQllcmVwb3J0KEVSUk9SLAogIAkJCQkJCShlcnJjb2RlKEVSUkNPREVfQkFE X0NPUFlfRklMRV9GT1JNQVQpLAohIAkJCQkJCSBlcnJtc2coImV4dHJhIGRhdGEgYWZ0ZXIg bGFzdCBleHBlY3RlZCBjb2x1bW4iKSkpOwogIAkJfQogIAkJZWxzZQogIAkJewoqKioqKioq KioqKioqKioKKioqIDE4NDQsMTg1MSAqKioqCiAgCQkJCWNvcHlfYXR0bmFtZSA9ICJvaWQi OwogIAkJCQlsb2FkZWRfb2lkID0KICAJCQkJCURhdHVtR2V0T2JqZWN0SWQoQ29weVJlYWRC aW5hcnlBdHRyaWJ1dGUoMCwKISAJCQkJCQkJCQkJCQkJCSZvaWRfaW5fZnVuY3Rpb24sCiEg CQkJCQkJCQkJCQkJCQkgIG9pZF90eXBpb3BhcmFtLAogIAkJCQkJCQkJCQkJCQkJCSAmaXNu dWxsKSk7CiAgCQkJCWlmIChpc251bGwgfHwgbG9hZGVkX29pZCA9PSBJbnZhbGlkT2lkKQog IAkJCQkJZXJlcG9ydChFUlJPUiwKLS0tIDE5MjUsMTkzMiAtLS0tCiAgCQkJCWNvcHlfYXR0 bmFtZSA9ICJvaWQiOwogIAkJCQlsb2FkZWRfb2lkID0KICAJCQkJCURhdHVtR2V0T2JqZWN0 SWQoQ29weVJlYWRCaW5hcnlBdHRyaWJ1dGUoMCwKISAJCQkJCQkJCQkJCQkJCQkgJm9pZF9p bl9mdW5jdGlvbiwKISAJCQkJCQkJCQkJCQkJCQkgb2lkX3R5cGlvcGFyYW0sCiAgCQkJCQkJ CQkJCQkJCQkJICZpc251bGwpKTsKICAJCQkJaWYgKGlzbnVsbCB8fCBsb2FkZWRfb2lkID09 IEludmFsaWRPaWQpCiAgCQkJCQllcmVwb3J0KEVSUk9SLAoqKioqKioqKioqKioqKioKKioq IDE5MjQsMTkzMCAqKioqCiAgCiAgCQkvKiBCRUZPUkUgUk9XIElOU0VSVCBUcmlnZ2VycyAq LwogIAkJaWYgKHJlc3VsdFJlbEluZm8tPnJpX1RyaWdEZXNjICYmCiEgCQkJcmVzdWx0UmVs SW5mby0+cmlfVHJpZ0Rlc2MtPm5fYmVmb3JlX3Jvd1tUUklHR0VSX0VWRU5UX0lOU0VSVF0g PiAwKQogIAkJewogIAkJCUhlYXBUdXBsZQluZXd0dXBsZTsKICAKLS0tIDIwMDUsMjAxMSAt LS0tCiAgCiAgCQkvKiBCRUZPUkUgUk9XIElOU0VSVCBUcmlnZ2VycyAqLwogIAkJaWYgKHJl c3VsdFJlbEluZm8tPnJpX1RyaWdEZXNjICYmCiEgCQkgIHJlc3VsdFJlbEluZm8tPnJpX1Ry aWdEZXNjLT5uX2JlZm9yZV9yb3dbVFJJR0dFUl9FVkVOVF9JTlNFUlRdID4gMCkKICAJCXsK ICAJCQlIZWFwVHVwbGUJbmV3dHVwbGU7CiAgCioqKioqKioqKioqKioqKgoqKiogMTk4Nywy MTczICoqKioKICAJRnJlZUV4ZWN1dG9yU3RhdGUoZXN0YXRlKTsKICB9CiAgCi0gCiAgLyoK ISAgKiBSZWFkIHRoZSBuZXh0IGlucHV0IGxpbmUgYW5kIHN0YXNoIGl0IGluIGxpbmVfYnVm LCB3aXRoIGNvbnZlcnNpb24gdG8KISAgKiBzZXJ2ZXIgZW5jb2RpbmcuCiEgICoKISAgKiBS ZXN1bHQgaXMgdHJ1ZSBpZiByZWFkIHdhcyB0ZXJtaW5hdGVkIGJ5IEVPRiwgZmFsc2UgaWYg dGVybWluYXRlZAohICAqIGJ5IG5ld2xpbmUuCiAgICovCiEgc3RhdGljIGJvb2wKISBDb3B5 UmVhZExpbmUoY2hhciAqIHF1b3RlLCBjaGFyICogZXNjYXBlKQogIHsKISAJYm9vbAkJcmVz dWx0OwohIAlib29sCQljaGFuZ2VfZW5jb2RpbmcgPSAoY2xpZW50X2VuY29kaW5nICE9IHNl cnZlcl9lbmNvZGluZyk7CiEgCWludAkJCWM7CiEgCWludAkJCW1ibGVuOwohIAlpbnQJCQlq OwohIAl1bnNpZ25lZCBjaGFyIHNbMl07CiEgCWNoYXIJICAgKmN2dDsKISAJYm9vbCAgICAg ICAgaW5fcXVvdGUgPSBmYWxzZSwgbGFzdF93YXNfZXNjID0gZmFsc2UsIGNzdl9tb2RlID0g ZmFsc2U7CiEgCWNoYXIgICAgICAgIHF1b3RlYyA9ICdcMCcsIGVzY2FwZWMgPSAnXDAnOwog IAohIAlpZiAocXVvdGUpCiEgCXsKISAJCWNzdl9tb2RlID0gdHJ1ZTsKISAJCXF1b3RlYyA9 IHF1b3RlWzBdOwohIAkJZXNjYXBlYyA9IGVzY2FwZVswXTsKISAJCS8qIGlnbm9yZSBzcGVj aWFsIGVzY2FwZSBwcm9jZXNzaW5nIGlmIGl0J3MgdGhlIHNhbWUgYXMgcXVvdGVjICovCiEg CQlpZiAocXVvdGVjID09IGVzY2FwZWMpCiEgCQkJZXNjYXBlYyA9ICdcMCc7CiEgCX0KICAK ICAKISAJc1sxXSA9IDA7CiAgCiEgCS8qIHJlc2V0IGxpbmVfYnVmIHRvIGVtcHR5ICovCiEg CWxpbmVfYnVmLmxlbiA9IDA7CiEgCWxpbmVfYnVmLmRhdGFbMF0gPSAnXDAnOwohIAlsaW5l X2J1Zi5jdXJzb3IgPSAwOwogIAohIAkvKiBtYXJrIHRoYXQgZW5jb2RpbmcgY29udmVyc2lv biBoYXNuJ3Qgb2NjdXJyZWQgeWV0ICovCiEgCWxpbmVfYnVmX2NvbnZlcnRlZCA9IGZhbHNl OwogIAohIAkvKiBzZXQgZGVmYXVsdCBzdGF0dXMgKi8KISAJcmVzdWx0ID0gZmFsc2U7CiAg CiAgCS8qCiEgCSAqIEluIHRoaXMgbG9vcCB3ZSBvbmx5IGNhcmUgZm9yIGRldGVjdGluZyBu ZXdsaW5lcyAoXHIgYW5kL29yIFxuKSBhbmQKISAJICogdGhlIGVuZC1vZi1jb3B5IG1hcmtl ciAoXC4pLiAgCiEgCSAqCiEgCSAqIEluIFRleHQgbW9kZSwgZm9yIGJhY2t3YXJkcyBjb21w YXRpYmlsaXR5IHdlIGFsbG93CiEgCSAqIGJhY2tzbGFzaGVzIHRvIGVzY2FwZSBuZXdsaW5l IGNoYXJhY3RlcnMuICBCYWNrc2xhc2hlcyBvdGhlciB0aGFuCiEgCSAqIHRoZSBlbmQgbWFy a2VyIGdldCBwdXQgaW50byB0aGUgbGluZV9idWYsIHNpbmNlIENvcHlSZWFkQXR0cmlidXRl CiEgCSAqIGRvZXMgaXRzIG93biBlc2NhcGUgcHJvY2Vzc2luZy4JCiEgCSAqCiEgCSAqIElu IENTViBtb2RlLCBDUiBhbmQgTkwgaW5zaWRlIHEgcXVvdGVkIGZpZWxkIGFyZSBqdXN0IHBh cnQgb2YgdGhlCiEgCSAqIGRhdGEgdmFsdWUgYW5kIGFyZSBwdXQgaW4gbGluZV9idWYuIFdl IGtlZXAganVzdCBlbm91Z2ggc3RhdGUKISAJICogdG8ga25vdyBpZiB3ZSBhcmUgY3VycmVu dGx5IGluIGEgcXVvdGVkIGZpZWxkIG9yIG5vdC4KISAJICoKISAJICogVGhlc2UgZm91ciBj aGFyYWN0ZXJzLCBhbmQgb25seSB0aGVzZSBmb3VyLCBhcmUgYXNzdW1lZCB0aGUgc2FtZSBp biAKISAJICogZnJvbnRlbmQgYW5kIGJhY2tlbmQgZW5jb2RpbmdzLgohIAkgKgohIAkgKiBX ZSBkbyBub3QgYXNzdW1lIHRoYXQgc2Vjb25kIGFuZCBsYXRlciBieXRlcyBvZiBhIGZyb250 ZW5kCiEgCSAqIG11bHRpYnl0ZSBjaGFyYWN0ZXIgY291bGRuJ3QgbG9vayBsaWtlIEFTQ0lJ IGNoYXJhY3RlcnMuCiAgCSAqLwohIAlmb3IgKDs7KQogIAl7CiEgCQljID0gQ29weUdldENo YXIoKTsKISAJCWlmIChjID09IEVPRikKISAJCXsKISAJCQlyZXN1bHQgPSB0cnVlOwohIAkJ CWJyZWFrOwohIAkJfQogIAohIAkJaWYgKGNzdl9tb2RlKQohIAkJewohIAkJCS8qICAKISAJ CQkgKiBEZWFsaW5nIHdpdGggcXVvdGVzIGFuZCBlc2NhcGVzIGhlcmUgaXMgbWlsZGx5IHRy aWNreS4gSWYgdGhlCiEgCQkJICogcXVvdGUgY2hhciBpcyBhbHNvIHRoZSBlc2NhcGUgY2hh ciwgdGhlcmUncyBubyBwcm9ibGVtIC0gd2UgIAohIAkJCSAqIGp1c3QgdXNlIHRoZSBjaGFy IGFzIGEgdG9nZ2xlLiBJZiB0aGV5IGFyZSBkaWZmZXJlbnQsIHdlIG5lZWQKISAJCQkgKiB0 byBlbnN1cmUgdGhhdCB3ZSBvbmx5IHRha2UgYWNjb3VudCBvZiBhbiBlc2NhcGUgaW5zaWRl IGEgcXVvdGVkCiEgCQkJICogZmllbGQgYW5kIGltbWVkaWF0ZWx5IHByZWNlZGluZyBhIHF1 b3RlIGNoYXIsIGFuZCBub3QgdGhlCiEgCQkJICogc2Vjb25kIGluIGEgZXNjYXBlLWVzY2Fw ZSBzZXF1ZW5jZS4KISAJCQkgKi8gCiAgCiEgCQkJaWYgKGluX3F1b3RlICYmIGMgPT0gZXNj YXBlYykKISAJCQkJbGFzdF93YXNfZXNjID0gISBsYXN0X3dhc19lc2M7CiEgCQkJaWYgKGMg PT0gcXVvdGVjICYmICEgbGFzdF93YXNfZXNjKQohIAkJCQlpbl9xdW90ZSA9ICEgaW5fcXVv dGU7CiEgCQkJaWYgKGMgIT0gZXNjYXBlYykKISAJCQkJbGFzdF93YXNfZXNjID0gZmFsc2U7 CiAgCiEgCQkJLyoKISAJCQkgKiB1cGRhdGluZyB0aGUgbGluZSBjb3VudCBmb3IgZW1iZWRk ZWQgQ1IgYW5kL29yIExGIGNoYXJzIGlzIAohIAkJCSAqIG5lY2Vzc2FyaWx5IGEgbGl0dGxl IGZyYWdpbGUgLSB0aGlzIHRlc3QgaXMgcHJvYmFibHkgYWJvdXQgCiEgCQkJICogdGhlIGJl c3Qgd2UgY2FuIGRvLgohIAkJCSAqLyAKISAJCQlpZiAoaW5fcXVvdGUgJiYgYyA9PSAoZW9s X3R5cGUgPT0gRU9MX0NSID8gJ1xyJyA6ICdcbicpKSAKISAJCQkJY29weV9saW5lbm8rKzsg CiEgCQl9CiAgCiEgCQlpZiAoIWluX3F1b3RlICYmIGMgPT0gJ1xyJykKICAJCXsKISAJCQlp ZiAoZW9sX3R5cGUgPT0gRU9MX05MKQohIAkJCXsKISAJCQkJaWYgKCEgY3N2X21vZGUpCiEg CQkJCQllcmVwb3J0KEVSUk9SLAohIAkJCQkJCQkoZXJyY29kZShFUlJDT0RFX0JBRF9DT1BZ X0ZJTEVfRk9STUFUKSwKISAJCQkJCQkJIGVycm1zZygibGl0ZXJhbCBjYXJyaWFnZSByZXR1 cm4gZm91bmQgaW4gZGF0YSIpLAohIAkJCQkJCQkgZXJyaGludCgiVXNlIFwiXFxyXCIgdG8g cmVwcmVzZW50IGNhcnJpYWdlIHJldHVybi4iKSkpOwohIAkJCQllbHNlCiEgCQkJCQllcmVw b3J0KEVSUk9SLAohIAkJCQkJCQkoZXJyY29kZShFUlJDT0RFX0JBRF9DT1BZX0ZJTEVfRk9S TUFUKSwKISAJCQkJCQkJIGVycm1zZygidW5xdW90ZWQgY2FycmlhZ2UgcmV0dXJuIGZvdW5k IGluIENTViBkYXRhIiksCiEgCQkJCQkJCSBlcnJoaW50KCJVc2UgcXVvdGVkIENTViBmaWVs ZCB0byByZXByZXNlbnQgY2FycmlhZ2UgcmV0dXJuLiIpKSk7CiEgCQkJfQohIAkJCS8qIENo ZWNrIGZvciBcclxuIG9uIGZpcnN0IGxpbmUsIF9hbmRfIGhhbmRsZSBcclxuLiAqLwohIAkJ CWlmIChlb2xfdHlwZSA9PSBFT0xfVU5LTk9XTiB8fCBlb2xfdHlwZSA9PSBFT0xfQ1JOTCkK ISAJCQl7CiEgCQkJCWludAkJCWMyID0gQ29weVBlZWtDaGFyKCk7CiEgCiEgCQkJCWlmIChj MiA9PSAnXG4nKQohIAkJCQl7CiEgCQkJCQlDb3B5RG9uZVBlZWsoYzIsIHRydWUpOwkJLyog ZWF0IG5ld2xpbmUgKi8KISAJCQkJCWVvbF90eXBlID0gRU9MX0NSTkw7CiEgCQkJCX0KISAJ CQkJZWxzZQohIAkJCQl7CiEgCQkJCQkvKiBmb3VuZCBcciwgYnV0IG5vIFxuICovCiEgCQkJ CQlpZiAoZW9sX3R5cGUgPT0gRU9MX0NSTkwpCiEgCQkJCQl7CiEgCQkJCQkJaWYgKCFjc3Zf bW9kZSkKISAJCQkJCQkJZXJlcG9ydChFUlJPUiwKISAJCQkJCQkJCQkoZXJyY29kZShFUlJD T0RFX0JBRF9DT1BZX0ZJTEVfRk9STUFUKSwKISAJCQkJCQkJCQkgZXJybXNnKCJsaXRlcmFs IGNhcnJpYWdlIHJldHVybiBmb3VuZCBpbiBkYXRhIiksCiEgCQkJCQkJCQkJIGVycmhpbnQo IlVzZSBcIlxcclwiIHRvIHJlcHJlc2VudCBjYXJyaWFnZSByZXR1cm4uIikpKTsKISAJCQkJ CQllbHNlCiEgCQkJCQkJCWVyZXBvcnQoRVJST1IsCiEgCQkJCQkJCQkJKGVycmNvZGUoRVJS Q09ERV9CQURfQ09QWV9GSUxFX0ZPUk1BVCksCiEgCQkJCQkJCQkJIGVycm1zZygidW5xdW90 ZWQgY2FycmlhZ2UgcmV0dXJuIGZvdW5kIGluIGRhdGEiKSwKISAJCQkJCQkJCQkgZXJyaGlu dCgiVXNlIHF1b3RlZCBDU1YgZmllbGQgdG8gcmVwcmVzZW50IGNhcnJpYWdlIHJldHVybi4i KSkpOwohIAohIAkJCQkJfQogIAohIAkJCQkJLyoKISAJCQkJCSAqIGlmIHdlIGdvdCBoZXJl LCBpdCBpcyB0aGUgZmlyc3QgbGluZSBhbmQgd2UgZGlkbid0CiEgCQkJCQkgKiBnZXQgXG4s IHNvIHB1dCBpdCBiYWNrCiEgCQkJCQkgKi8KISAJCQkJCUNvcHlEb25lUGVlayhjMiwgZmFs c2UpOwohIAkJCQkJZW9sX3R5cGUgPSBFT0xfQ1I7CiEgCQkJCX0KISAJCQl9CiEgCQkJYnJl YWs7CiEgCQl9CiEgCQlpZiAoIWluX3F1b3RlICYmIGMgPT0gJ1xuJykKISAJCXsKISAJCQlp ZiAoZW9sX3R5cGUgPT0gRU9MX0NSIHx8IGVvbF90eXBlID09IEVPTF9DUk5MKQogIAkJCXsK ISAJCQkJaWYgKCFjc3ZfbW9kZSkKISAJCQkJCWVyZXBvcnQoRVJST1IsCiEgCQkJCQkJCShl cnJjb2RlKEVSUkNPREVfQkFEX0NPUFlfRklMRV9GT1JNQVQpLAohIAkJCQkJCQkgZXJybXNn KCJsaXRlcmFsIG5ld2xpbmUgZm91bmQgaW4gZGF0YSIpLAohIAkJCQkJCQkgZXJyaGludCgi VXNlIFwiXFxuXCIgdG8gcmVwcmVzZW50IG5ld2xpbmUuIikpKTsKISAJCQkJZWxzZQohIAkJ CQkJZXJlcG9ydChFUlJPUiwKISAJCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9CQURfQ09QWV9G SUxFX0ZPUk1BVCksCiEgCQkJCQkJCSBlcnJtc2coInVucXVvdGVkIG5ld2xpbmUgZm91bmQg aW4gZGF0YSIpLAohIAkJCQkJCQkgZXJyaGludCgiVXNlIHF1b3RlZCBDU1YgZmllbGQgdG8g cmVwcmVzZW50IG5ld2xpbmUuIikpKTsKISAJCQkJCQogIAkJCX0KLSAJCQllb2xfdHlwZSA9 IEVPTF9OTDsKLSAJCQlicmVhazsKICAJCX0KICAKISAJCWlmICgobGluZV9idWYubGVuID09 IDAgfHwgIWNzdl9tb2RlKSAmJiBjID09ICdcXCcpCiAgCQl7CiEgCQkJaW50IGMyOwohIAkJ CQohIAkJCWlmIChjc3ZfbW9kZSkKISAJCQkJYzIgPSBDb3B5UGVla0NoYXIoKTsKISAJCQll bHNlCiEgCQkJCWMyID0gYyA9IENvcHlHZXRDaGFyKCk7CiAgCiAgCQkJaWYgKGMyID09IEVP RikKICAJCQl7Ci0tLSAyMDY4LDI3MTAgLS0tLQogIAlGcmVlRXhlY3V0b3JTdGF0ZShlc3Rh dGUpOwogIH0KICAKICAvKgohICAqIENvcHkgRlJPTSBmaWxlIHRvIHJlbGF0aW9uIHdpdGgg ZmFzdGVyIHByb2Nlc3NpbmcuCiAgICovCiEgc3RhdGljIHZvaWQKISBDb3B5RnJvbURlbGlt aXRlZChSZWxhdGlvbiByZWwsIExpc3QgKmF0dG51bWxpc3QsIGJvb2wgYmluYXJ5LCBib29s IG9pZHMsCiEgCQkJCSAgY2hhciAqZGVsaW0sIGNoYXIgKm51bGxfcHJpbnQsIGJvb2wgY3N2 X21vZGUsIGNoYXIgKnF1b3RlLAohIAkJCQkgIGNoYXIgKmVzY2FwZSwgTGlzdCAqZm9yY2Vf bm90bnVsbF9hdHRzKQogIHsKISAJSGVhcFR1cGxlCXR1cGxlOwohIAlUdXBsZURlc2MJdHVw RGVzYzsKISAJRm9ybV9wZ19hdHRyaWJ1dGUgKmF0dHI7CiEgCUF0dHJOdW1iZXIJbnVtX3Bo eXNfYXR0cnMsCiEgCQkJCWF0dHJfY291bnQsCiEgCQkJCW51bV9kZWZhdWx0czsKISAJRm1n ckluZm8gICAqaW5fZnVuY3Rpb25zOwohIAlPaWQJCSAgICp0eXBpb3BhcmFtczsKISAJRXhw clN0YXRlICoqY29uc3RyYWludGV4cHJzOwohIAlib29sCSAgICpmb3JjZV9ub3RudWxsOwoh IAlib29sCQloYXNDb25zdHJhaW50cyA9IGZhbHNlOwohIAlpbnQJCQlhdHRudW07CiEgCWlu dAkJCWk7CiEgCU9pZAkJCWluX2Z1bmNfb2lkOwohIAlEYXR1bQkgICAqdmFsdWVzOwohIAlj aGFyCSAgICpudWxsczsKICAKISAJLyogYW4gYXJyYXkgb2Ygb2Zmc2V0cyBpbnRvIGF0dHJf YnVmIHRoYXQgcG9pbnQgdG8gYmVnaW5uaW5nIG9mIGF0dHJpYnV0ZXMgKi8KISAJaW50CQkg ICAqYXR0cl9vZmZzZXRzOwohIAlib29sCQlpc251bGw7CiEgCWludAkJCW51bGxfcHJpbnRf bGVuOyAvKiBsZW5ndGggb2YgbnVsbCBwcmludCAqLwohIAlSZXN1bHRSZWxJbmZvICpyZXN1 bHRSZWxJbmZvOwohIAlFU3RhdGUJICAgKmVzdGF0ZSA9IENyZWF0ZUV4ZWN1dG9yU3RhdGUo KTsgLyogZm9yIEV4ZWNDb25zdHJhaW50cygpICovCiEgCVR1cGxlVGFibGVTbG90ICpzbG90 OwohIAlib29sCQlmaWxlX2hhc19vaWRzOwohIAlpbnQJCSAgICpkZWZtYXA7CiEgCUV4cHJT dGF0ZSAqKmRlZmV4cHJzOwkJLyogYXJyYXkgb2YgZGVmYXVsdCBhdHQgZXhwcmVzc2lvbnMg Ki8KISAJRXhwckNvbnRleHQgKmVjb250ZXh0OwkJLyogdXNlZCBmb3IgRXhlY0V2YWxFeHBy IGZvciBkZWZhdWx0IGF0dHMgKi8KISAJTWVtb3J5Q29udGV4dCBvbGRjb250ZXh0ID0gQ3Vy cmVudE1lbW9yeUNvbnRleHQ7CiEgCUVycm9yQ29udGV4dENhbGxiYWNrIGVycmNvbnRleHQ7 CiEgCWJvb2wJCW5vX21vcmVfZGF0YTsKISAJQ29weVJlYWRSZXN1bHQgcmVzdWx0OwohIAlM aXN0Q2VsbCAgICpjdXI7CiAgCiAgCiEgCXR1cERlc2MgPSBSZWxhdGlvbkdldERlc2NyKHJl bCk7CiEgCWF0dHIgPSB0dXBEZXNjLT5hdHRyczsKISAJbnVtX3BoeXNfYXR0cnMgPSB0dXBE ZXNjLT5uYXR0czsKISAJYXR0cl9jb3VudCA9IGxpc3RfbGVuZ3RoKGF0dG51bWxpc3QpOwoh IAludW1fZGVmYXVsdHMgPSAwOwogIAohIAkvKgohIAkgKiBXZSBuZWVkIGEgUmVzdWx0UmVs SW5mbyBzbyB3ZSBjYW4gdXNlIHRoZSByZWd1bGFyIGV4ZWN1dG9yJ3MKISAJICogaW5kZXgt ZW50cnktbWFraW5nIG1hY2hpbmVyeS4gIChUaGVyZSB1c2VkIHRvIGJlIGEgaHVnZSBhbW91 bnQgb2YKISAJICogY29kZSBoZXJlIHRoYXQgYmFzaWNhbGx5IGR1cGxpY2F0ZWQgZXhlY1V0 aWxzLmMgLi4uKQohIAkgKi8KISAJcmVzdWx0UmVsSW5mbyA9IG1ha2VOb2RlKFJlc3VsdFJl bEluZm8pOwohIAlyZXN1bHRSZWxJbmZvLT5yaV9SYW5nZVRhYmxlSW5kZXggPSAxOwkJLyog ZHVtbXkgKi8KISAJcmVzdWx0UmVsSW5mby0+cmlfUmVsYXRpb25EZXNjID0gcmVsOwohIAly ZXN1bHRSZWxJbmZvLT5yaV9UcmlnRGVzYyA9IENvcHlUcmlnZ2VyRGVzYyhyZWwtPnRyaWdk ZXNjKTsKISAJaWYgKHJlc3VsdFJlbEluZm8tPnJpX1RyaWdEZXNjKQohIAkJcmVzdWx0UmVs SW5mby0+cmlfVHJpZ0Z1bmN0aW9ucyA9IChGbWdySW5mbyAqKQohIAkJCXBhbGxvYzAocmVz dWx0UmVsSW5mby0+cmlfVHJpZ0Rlc2MtPm51bXRyaWdnZXJzICogc2l6ZW9mKEZtZ3JJbmZv KSk7CiEgCXJlc3VsdFJlbEluZm8tPnJpX1RyaWdJbnN0cnVtZW50ID0gTlVMTDsKICAKISAJ RXhlY09wZW5JbmRpY2VzKHJlc3VsdFJlbEluZm8pOwogIAohIAllc3RhdGUtPmVzX3Jlc3Vs dF9yZWxhdGlvbnMgPSByZXN1bHRSZWxJbmZvOwohIAllc3RhdGUtPmVzX251bV9yZXN1bHRf cmVsYXRpb25zID0gMTsKISAJZXN0YXRlLT5lc19yZXN1bHRfcmVsYXRpb25faW5mbyA9IHJl c3VsdFJlbEluZm87CiEgCiEgCS8qIFNldCB1cCBhIHR1cGxlIHNsb3QgdG9vICovCiEgCXNs b3QgPSBNYWtlU2luZ2xlVHVwbGVUYWJsZVNsb3QodHVwRGVzYyk7CiEgCiEgCWVjb250ZXh0 ID0gR2V0UGVyVHVwbGVFeHByQ29udGV4dChlc3RhdGUpOwogIAogIAkvKgohIAkgKiBQaWNr IHVwIHRoZSByZXF1aXJlZCBjYXRhbG9nIGluZm9ybWF0aW9uIGZvciBlYWNoIGF0dHJpYnV0 ZSBpbiB0aGUKISAJICogcmVsYXRpb24sIGluY2x1ZGluZyB0aGUgaW5wdXQgZnVuY3Rpb24s IHRoZSBlbGVtZW50IHR5cGUgKHRvIHBhc3MKISAJICogdG8gdGhlIGlucHV0IGZ1bmN0aW9u KSwgYW5kIGluZm8gYWJvdXQgZGVmYXVsdHMgYW5kIGNvbnN0cmFpbnRzLgohIAkgKiAoV2hp Y2ggaW5wdXQgZnVuY3Rpb24gd2UgdXNlIGRlcGVuZHMgb24gdGV4dC9iaW5hcnkgZm9ybWF0 IGNob2ljZS4pCiAgCSAqLwohIAlpbl9mdW5jdGlvbnMgPSAoRm1nckluZm8gKikgcGFsbG9j KG51bV9waHlzX2F0dHJzICogc2l6ZW9mKEZtZ3JJbmZvKSk7CiEgCXR5cGlvcGFyYW1zID0g KE9pZCAqKSBwYWxsb2MobnVtX3BoeXNfYXR0cnMgKiBzaXplb2YoT2lkKSk7CiEgCWRlZm1h cCA9IChpbnQgKikgcGFsbG9jKG51bV9waHlzX2F0dHJzICogc2l6ZW9mKGludCkpOwohIAlk ZWZleHBycyA9IChFeHByU3RhdGUgKiopIHBhbGxvYyhudW1fcGh5c19hdHRycyAqIHNpemVv ZihFeHByU3RhdGUgKikpOwohIAljb25zdHJhaW50ZXhwcnMgPSAoRXhwclN0YXRlICoqKSBw YWxsb2MwKG51bV9waHlzX2F0dHJzICogc2l6ZW9mKEV4cHJTdGF0ZSAqKSk7CiEgCWZvcmNl X25vdG51bGwgPSAoYm9vbCAqKSBwYWxsb2MobnVtX3BoeXNfYXR0cnMgKiBzaXplb2YoYm9v bCkpOwohIAohIAlmb3IgKGF0dG51bSA9IDE7IGF0dG51bSA8PSBudW1fcGh5c19hdHRyczsg YXR0bnVtKyspCiAgCXsKISAJCS8qIFdlIGRvbid0IG5lZWQgaW5mbyBmb3IgZHJvcHBlZCBh dHRyaWJ1dGVzICovCiEgCQlpZiAoYXR0clthdHRudW0gLSAxXS0+YXR0aXNkcm9wcGVkKQoh IAkJCWNvbnRpbnVlOwogIAohIAkJZ2V0VHlwZUlucHV0SW5mbyhhdHRyW2F0dG51bSAtIDFd LT5hdHR0eXBpZCwKISAJCQkJCQkgJmluX2Z1bmNfb2lkLCAmdHlwaW9wYXJhbXNbYXR0bnVt IC0gMV0pOwogIAohIAkJZm1ncl9pbmZvKGluX2Z1bmNfb2lkLCAmaW5fZnVuY3Rpb25zW2F0 dG51bSAtIDFdKTsKICAKISAJCWlmIChsaXN0X21lbWJlcl9pbnQoZm9yY2Vfbm90bnVsbF9h dHRzLCBhdHRudW0pKQohIAkJCWZvcmNlX25vdG51bGxbYXR0bnVtIC0gMV0gPSB0cnVlOwoh IAkJZWxzZQohIAkJCWZvcmNlX25vdG51bGxbYXR0bnVtIC0gMV0gPSBmYWxzZTsKICAKISAJ CS8qIEdldCBkZWZhdWx0IGluZm8gaWYgbmVlZGVkICovCiEgCQlpZiAoIWxpc3RfbWVtYmVy X2ludChhdHRudW1saXN0LCBhdHRudW0pKQogIAkJewohIAkJCS8qIGF0dHJpYnV0ZSBpcyBO T1QgdG8gYmUgY29waWVkIGZyb20gaW5wdXQgKi8KISAJCQkvKiB1c2UgZGVmYXVsdCB2YWx1 ZSBpZiBvbmUgZXhpc3RzICovCiEgCQkJTm9kZQkgICAqZGVmZXhwciA9IGJ1aWxkX2NvbHVt bl9kZWZhdWx0KHJlbCwgYXR0bnVtKTsKICAKISAJCQlpZiAoZGVmZXhwciAhPSBOVUxMKQog IAkJCXsKISAJCQkJZGVmZXhwcnNbbnVtX2RlZmF1bHRzXSA9IEV4ZWNQcmVwYXJlRXhwcigo RXhwciAqKSBkZWZleHByLAohIAkJCQkJCQkJCQkJCQkJIGVzdGF0ZSk7CiEgCQkJCWRlZm1h cFtudW1fZGVmYXVsdHNdID0gYXR0bnVtIC0gMTsKISAJCQkJbnVtX2RlZmF1bHRzKys7CiAg CQkJfQogIAkJfQogIAohIAkJLyogSWYgaXQncyBhIGRvbWFpbiB0eXBlLCBzZXQgdXAgdG8g Y2hlY2sgZG9tYWluIGNvbnN0cmFpbnRzICovCiEgCQlpZiAoZ2V0X3R5cHR5cGUoYXR0clth dHRudW0gLSAxXS0+YXR0dHlwaWQpID09ICdkJykKICAJCXsKISAJCQlQYXJhbQkgICAqcHJt OwohIAkJCU5vZGUJICAgKm5vZGU7CiEgCiEgCQkJLyoKISAJCQkgKiBFYXNpZXN0IHdheSB0 byBkbyB0aGlzIGlzIHRvIHVzZSBwYXJzZV9jb2VyY2UuYyB0byBzZXQgdXAKISAJCQkgKiBh biBleHByZXNzaW9uIHRoYXQgY2hlY2tzIHRoZSBjb25zdHJhaW50cy4gIChBdCBwcmVzZW50 LAohIAkJCSAqIHRoZSBleHByZXNzaW9uIG1pZ2h0IGNvbnRhaW4gYSBsZW5ndGgtY29lcmNp b24tZnVuY3Rpb24KISAJCQkgKiBjYWxsIGFuZC9vciBDb2VyY2VUb0RvbWFpbiBub2Rlcy4p ICBUaGUgYm90dG9tIG9mIHRoZQohIAkJCSAqIGV4cHJlc3Npb24gaXMgYSBQYXJhbSBub2Rl IHNvIHRoYXQgd2UgY2FuIGZpbGwgaW4gdGhlCiEgCQkJICogYWN0dWFsIGRhdHVtIGR1cmlu ZyB0aGUgZGF0YSBpbnB1dCBsb29wLgohIAkJCSAqLwohIAkJCXBybSA9IG1ha2VOb2RlKFBh cmFtKTsKISAJCQlwcm0tPnBhcmFta2luZCA9IFBBUkFNX0VYRUM7CiEgCQkJcHJtLT5wYXJh bWlkID0gMDsKISAJCQlwcm0tPnBhcmFtdHlwZSA9IGdldEJhc2VUeXBlKGF0dHJbYXR0bnVt IC0gMV0tPmF0dHR5cGlkKTsKISAKISAJCQlub2RlID0gY29lcmNlX3RvX2RvbWFpbigoTm9k ZSAqKSBwcm0sCiEgCQkJCQkJCQkJcHJtLT5wYXJhbXR5cGUsCiEgCQkJCQkJCQkJYXR0clth dHRudW0gLSAxXS0+YXR0dHlwaWQsCiEgCQkJCQkJCQkJQ09FUkNFX0lNUExJQ0lUX0NBU1Qs IGZhbHNlLCBmYWxzZSk7CiEgCiEgCQkJY29uc3RyYWludGV4cHJzW2F0dG51bSAtIDFdID0g RXhlY1ByZXBhcmVFeHByKChFeHByICopIG5vZGUsIGVzdGF0ZSk7CiEgCQkJaGFzQ29uc3Ry YWludHMgPSB0cnVlOwohIAkJfQohIAl9CiEgCiEgCS8qCiEgCSAqIFByZXBhcmUgdG8gY2F0 Y2ggQUZURVIgdHJpZ2dlcnMuCiEgCSAqLwohIAlBZnRlclRyaWdnZXJCZWdpblF1ZXJ5KCk7 CiEgCiEgCS8qCiEgCSAqIENoZWNrIEJFRk9SRSBTVEFURU1FTlQgaW5zZXJ0aW9uIHRyaWdn ZXJzLiBJdCdzIGRlYmF0ZWFibGUgd2hldGhlcgohIAkgKiB3ZSBzaG91bGQgZG8gdGhpcyBm b3IgQ09QWSwgc2luY2UgaXQncyBub3QgcmVhbGx5IGFuICJJTlNFUlQiCiEgCSAqIHN0YXRl bWVudCBhcyBzdWNoLiBIb3dldmVyLCBleGVjdXRpbmcgdGhlc2UgdHJpZ2dlcnMgbWFpbnRh aW5zCiEgCSAqIGNvbnNpc3RlbmN5IHdpdGggdGhlIEVBQ0ggUk9XIHRyaWdnZXJzIHRoYXQg d2UgYWxyZWFkeSBmaXJlIG9uCiEgCSAqIENPUFkuCiEgCSAqLwohIAlFeGVjQlNJbnNlcnRU cmlnZ2Vycyhlc3RhdGUsIHJlc3VsdFJlbEluZm8pOwohIAohIAlmaWxlX2hhc19vaWRzID0g b2lkczsJCS8qIG11c3QgcmVseSBvbiB1c2VyIHRvIHRlbGwgdXMgdGhpcy4uLiAqLwohIAoh IAl2YWx1ZXMgPSAoRGF0dW0gKikgcGFsbG9jKG51bV9waHlzX2F0dHJzICogc2l6ZW9mKERh dHVtKSk7CiEgCW51bGxzID0gKGNoYXIgKikgcGFsbG9jKG51bV9waHlzX2F0dHJzICogc2l6 ZW9mKGNoYXIpKTsKISAJYXR0cl9vZmZzZXRzID0gKGludCAqKSBwYWxsb2MobnVtX3BoeXNf YXR0cnMgKiBzaXplb2YoaW50KSk7CiEgCiEgCS8qIE1ha2Ugcm9vbSBmb3IgYSBQQVJBTV9F WEVDIHZhbHVlIGZvciBkb21haW4gY29uc3RyYWludCBjaGVja3MgKi8KISAJaWYgKGhhc0Nv bnN0cmFpbnRzKQohIAkJZWNvbnRleHQtPmVjeHRfcGFyYW1fZXhlY192YWxzID0gKFBhcmFt RXhlY0RhdGEgKikKISAJCQlwYWxsb2MwKHNpemVvZihQYXJhbUV4ZWNEYXRhKSk7CiEgCiEg CS8qIEluaXRpYWxpemUgc3RhdGljIHZhcmlhYmxlcyAqLwohIAlmZV9lb2YgPSBmYWxzZTsK ISAJZW9sX3R5cGUgPSBFT0xfVU5LTk9XTjsKISAJY29weV9iaW5hcnkgPSBiaW5hcnk7CiEg CWNvcHlfcmVsbmFtZSA9IFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHJlbCk7CiEgCWNvcHlf bGluZW5vID0gMDsKISAJY29weV9hdHRuYW1lID0gTlVMTDsKISAJbGluZV9idWZfY29udmVy dGVkID0gZmFsc2U7CiEgCiEgCS8qIGl0IGlzIE1VQ0ggZmFzdGVyIHRvIGRvIHRoaXMgb25j ZSBoZXJlIHRoYW4gaW4gdGhlIGF0dHJpYnV0ZSBwYXJzZSBsb29wICovCiEgCW51bGxfcHJp bnRfbGVuID0gc3RybGVuKG51bGxfcHJpbnQpOwohIAohIAkvKiBTZXQgdXAgY2FsbGJhY2sg dG8gaWRlbnRpZnkgZXJyb3IgbGluZSBudW1iZXIgKi8KISAJZXJyY29udGV4dC5jYWxsYmFj ayA9IGNvcHlfaW5fZXJyb3JfY2FsbGJhY2s7CiEgCWVycmNvbnRleHQuYXJnID0gTlVMTDsK ISAJZXJyY29udGV4dC5wcmV2aW91cyA9IGVycm9yX2NvbnRleHRfc3RhY2s7CiEgCWVycm9y X2NvbnRleHRfc3RhY2sgPSAmZXJyY29udGV4dDsKISAKISAJLyogU2V0IHVwIGRhdGEgYnVm ZmVyIHRvIGhvbGQgYSBjaHVuayBvZiBkYXRhICovCiEgCU1lbVNldChpbnB1dF9idWYsICcg JywgQ09QWV9CVUZfU0laRSAqIHNpemVvZihjaGFyKSk7CiEgCWlucHV0X2J1ZltDT1BZX0JV Rl9TSVpFXSA9ICdcMCc7CiEgCiEgCW5vX21vcmVfZGF0YSA9IGZhbHNlOwkJLyogbm8gbW9y ZSBpbnB1dCBkYXRhIHRvIHJlYWQgZnJvbSBmaWxlIG9yIEZFICovCiEgCWxpbmVfZG9uZSA9 IHRydWU7CiEgCiEgCWRvCiEgCXsKISAJCS8qIHJlYWQgYSBjaHVuayBvZiBkYXRhIGludG8g dGhlIGJ1ZmZlciAqLwohIAkJc2l6ZV90CQlieXRlc3JlYWQgPSBDb3B5R2V0RGF0YShpbnB1 dF9idWYsIENPUFlfQlVGX1NJWkUpOwohIAohIAkJYnVmX2RvbmUgPSBmYWxzZTsKISAKISAJ CS8qIHNldCBidWZmZXIgcG9pbnRlcnMgdG8gYmVnaW5uaW5nIG9mIHRoZSBidWZmZXIgKi8K ISAJCWJlZ2xvYyA9IGlucHV0X2J1ZjsKISAJCWJ1ZmZlcl9pbmRleCA9IDA7CiEgCiEgCQkv KgohIAkJICogY29udGludWUgaWYgc29tZSBieXRlcyB3ZXJlIHJlYWQgb3IgaWYgd2UgZGlk bid0IHJlYWNoIEVPRi4gaWYgd2UKISAJCSAqIGJvdGggKiByZWFjaGVkIEVPRiBfYW5kXyBu byBieXRlcyB3ZXJlIHJlYWQsIHF1aXQgdGhlIGxvb3Agd2UgYXJlCiEgCQkgKiBkb25lCiEg CQkgKi8KISAJCWlmIChieXRlc3JlYWQgPiAwIHx8ICFmZV9lb2YpCiEgCQl7CiEgCiEgCQkJ d2hpbGUgKCFidWZfZG9uZSkKISAJCQl7CiEgCQkJCWJvb2wJCXNraXBfdHVwbGU7CiEgCQkJ CU9pZAkJCWxvYWRlZF9vaWQgPSBJbnZhbGlkT2lkOwohIAohIAkJCQlDSEVDS19GT1JfSU5U RVJSVVBUUygpOwohIAohIAkJCQkvKiBSZXNldCB0aGUgcGVyLXR1cGxlIGV4cHJjb250ZXh0 ICovCiEgCQkJCVJlc2V0UGVyVHVwbGVFeHByQ29udGV4dChlc3RhdGUpOwohIAohIAkJCQkv KiBTd2l0Y2ggaW50byBpdHMgbWVtb3J5IGNvbnRleHQgKi8KISAJCQkJTWVtb3J5Q29udGV4 dFN3aXRjaFRvKEdldFBlclR1cGxlTWVtb3J5Q29udGV4dChlc3RhdGUpKTsKISAKISAJCQkJ LyogSW5pdGlhbGl6ZSBhbGwgdmFsdWVzIGZvciByb3cgdG8gTlVMTCAqLwohIAkJCQlNZW1T ZXQodmFsdWVzLCAwLCBudW1fcGh5c19hdHRycyAqIHNpemVvZihEYXR1bSkpOwohIAkJCQlN ZW1TZXQobnVsbHMsICduJywgbnVtX3BoeXNfYXR0cnMgKiBzaXplb2YoY2hhcikpOwohIAkJ CQkvKiByZXNldCBhdHRyaWJ1dGUgcG9pbnRlcnMgKi8KISAJCQkJTWVtU2V0KGF0dHJfb2Zm c2V0cywgMCwgbnVtX3BoeXNfYXR0cnMgKiBzaXplb2YoaW50KSk7CiEgCiEgCQkJCXJlc3Vs dCA9IE5PUk1BTF9BVFRSOwohIAohIAkJCQkvKiBBY3R1YWxseSByZWFkIHRoZSBsaW5lIGlu dG8gbWVtb3J5IGhlcmUgKi8KISAJCQkJbGluZV9kb25lID0gQ29weVJlYWRMaW5lQnVmZmVy ZWQoYnl0ZXNyZWFkKTsKISAJCQkJY29weV9saW5lbm8rKzsKISAKISAJCQkJLyoKISAJCQkJ ICogaWYgZGlkbid0IGZpbmlzaCBwcm9jZXNzaW5nIGRhdGEgbGluZSwgc2tpcCBhdHQgcGFy c2luZyBhbmQKISAJCQkJICogcmVhZCBtb3JlIGRhdGEsIHVubGVzcyB0aGVyZSBpcyBubyBt b3JlIGRhdGEgdG8gcmVhZC4uLgohIAkJCQkgKiAod2hpY2ggbWVhbnMgdGhhdCB0aGUgb3Jp Z2luYWwgbGFzdCBkYXRhIGxpbmUgaXMgbWlzc2luZwohIAkJCQkgKiBhdHRycyBhbmQgd2Ug d2FudCB0byBjYXRjaCB0aGF0IGVycm9yKQohIAkJCQkgKi8KISAJCQkJaWYgKCFsaW5lX2Rv bmUpCiEgCQkJCXsKISAJCQkJCWNvcHlfbGluZW5vLS07CiEgCQkJCQlpZiAoIWZlX2VvZiB8 fCBidWZfZG9uZSkKISAJCQkJCQlicmVhazsKISAJCQkJfQohIAohIAkJCQlpZiAoZmlsZV9o YXNfb2lkcykKISAJCQkJewohIAkJCQkJY2hhcgkgICAqb2lkX3N0cmluZzsKISAKISAJCQkJ CS8qIGNhbid0IGJlIGluIENTViBtb2RlIGhlcmUgKi8KISAJCQkJCW9pZF9zdHJpbmcgPSBD b3B5UmVhZE9pZEF0dHIoZGVsaW0sIG51bGxfcHJpbnQsIG51bGxfcHJpbnRfbGVuLAohIAkJ CQkJCQkJCQkJCSAmcmVzdWx0LCAmaXNudWxsKTsKISAKISAJCQkJCWlmIChpc251bGwpCiEg CQkJCQkJZXJlcG9ydChFUlJPUiwKISAJCQkJCQkJCShlcnJjb2RlKEVSUkNPREVfQkFEX0NP UFlfRklMRV9GT1JNQVQpLAohIAkJCQkJCQkJIGVycm1zZygibnVsbCBPSUQgaW4gQ09QWSBk YXRhIikpKTsKISAJCQkJCWVsc2UKISAJCQkJCXsKISAJCQkJCQljb3B5X2F0dG5hbWUgPSAi b2lkIjsKISAJCQkJCQlsb2FkZWRfb2lkID0gRGF0dW1HZXRPYmplY3RJZChEaXJlY3RGdW5j dGlvbkNhbGwxKG9pZGluLAohIAkJCQkJCQkJCQkJICAgQ1N0cmluZ0dldERhdHVtKG9pZF9z dHJpbmcpKSk7CiEgCQkJCQkJaWYgKGxvYWRlZF9vaWQgPT0gSW52YWxpZE9pZCkKISAJCQkJ CQkJZXJlcG9ydChFUlJPUiwKISAJCQkJCQkJCQkoZXJyY29kZShFUlJDT0RFX0JBRF9DT1BZ X0ZJTEVfRk9STUFUKSwKISAJCQkJCQkJCQkgZXJybXNnKCJpbnZhbGlkIE9JRCBpbiBDT1BZ IGRhdGEiKSkpOwohIAkJCQkJCWNvcHlfYXR0bmFtZSA9IE5VTEw7CiEgCQkJCQl9CiEgCQkJ CX0KISAKISAJCQkJLyogcGFyc2UgYWxsIHRoZSBhdHRyaWJ1dGUgaW4gdGhlIGRhdGEgbGlu ZSAqLwohIAkJCQlDb3B5UmVhZEFsbEF0dHJzKGRlbGltLCBudWxsX3ByaW50LCBudWxsX3By aW50X2xlbiwKISAJCQkJCSAgbnVsbHMsIGF0dG51bWxpc3QsIGF0dHJfb2Zmc2V0cywgbnVt X3BoeXNfYXR0cnMsIGF0dHIpOwohIAohIAkJCQkvKgohIAkJCQkgKiBMb29wIHRvIHJlYWQg dGhlIHVzZXIgYXR0cmlidXRlcyBvbiB0aGUgbGluZS4KISAJCQkJICovCiEgCQkJCWZvcmVh Y2goY3VyLCBhdHRudW1saXN0KQohIAkJCQl7CiEgCQkJCQlpbnQJCQlhdHRudW0gPSBsZmly c3RfaW50KGN1cik7CiEgCQkJCQlpbnQJCQltID0gYXR0bnVtIC0gMTsKISAKISAJCQkJCWlm IChudWxsc1ttXSA9PSAnICcpCiEgCQkJCQkJaXNudWxsID0gZmFsc2U7CiEgCQkJCQllbHNl CiEgCQkJCQkJaXNudWxsID0gdHJ1ZTsKISAKISAJCQkJCS8qIHdlIHJlYWQgYW4gU1FMIE5V TEwsIG5vIG5lZWQgdG8gZG8gYW55dGhpbmcgKi8KISAJCQkJCWlmICghaXNudWxsKQohIAkJ CQkJewohIAkJCQkJCWNvcHlfYXR0bmFtZSA9IE5hbWVTdHIoYXR0clttXS0+YXR0bmFtZSk7 CiEgCQkJCQkJdmFsdWVzW21dID0gRnVuY3Rpb25DYWxsMygmaW5fZnVuY3Rpb25zW21dLAoh IAkJCQkJCQlDU3RyaW5nR2V0RGF0dW0oYXR0cl9idWYuZGF0YSArIGF0dHJfb2Zmc2V0c1tt XSksCiEgCQkJCQkJCQkJCQlPYmplY3RJZEdldERhdHVtKHR5cGlvcGFyYW1zW21dKSwKISAJ CQkJCQkJCQkJICBJbnQzMkdldERhdHVtKGF0dHJbbV0tPmF0dHR5cG1vZCkpOwohIAkJCQkJ CWNvcHlfYXR0bmFtZSA9IE5VTEw7CiEgCQkJCQl9CiEgCQkJCX0KISAKISAJCQkJLyoKISAJ CQkJICogTm93IGNvbXB1dGUgYW5kIGluc2VydCBhbnkgZGVmYXVsdHMgYXZhaWxhYmxlIGZv ciB0aGUgY29sdW1ucwohIAkJCQkgKiBub3QgcHJvdmlkZWQgYnkgdGhlIGlucHV0IGRhdGEu CUFueXRoaW5nIG5vdCBwcm9jZXNzZWQgaGVyZSBvcgohIAkJCQkgKiBhYm92ZSB3aWxsIHJl bWFpbiBOVUxMLgohIAkJCQkgKi8KISAJCQkJZm9yIChpID0gMDsgaSA8IG51bV9kZWZhdWx0 czsgaSsrKQohIAkJCQl7CiEgCQkJCQl2YWx1ZXNbZGVmbWFwW2ldXSA9IEV4ZWNFdmFsRXhw cihkZWZleHByc1tpXSwgZWNvbnRleHQsICZpc251bGwsIE5VTEwpOwohIAkJCQkJaWYgKCFp c251bGwpCiEgCQkJCQkJbnVsbHNbZGVmbWFwW2ldXSA9ICcgJzsKISAJCQkJfQohIAohIAkJ CQkvKgohIAkJCQkgKiBOZXh0IGFwcGx5IGFueSBkb21haW4gY29uc3RyYWludHMKISAJCQkJ ICovCiEgCQkJCWlmIChoYXNDb25zdHJhaW50cykKISAJCQkJewohIAkJCQkJUGFyYW1FeGVj RGF0YSAqcHJtZGF0YSA9ICZlY29udGV4dC0+ZWN4dF9wYXJhbV9leGVjX3ZhbHNbMF07CiEg CiEgCQkJCQlmb3IgKGkgPSAwOyBpIDwgbnVtX3BoeXNfYXR0cnM7IGkrKykKISAJCQkJCXsK ISAJCQkJCQlFeHByU3RhdGUgICpleHByc3RhdGUgPSBjb25zdHJhaW50ZXhwcnNbaV07CiEg CiEgCQkJCQkJaWYgKGV4cHJzdGF0ZSA9PSBOVUxMKQohIAkJCQkJCQljb250aW51ZTsJLyog bm8gY29uc3RyYWludCBmb3IgdGhpcyBhdHRyICovCiEgCiEgCQkJCQkJLyogSW5zZXJ0IGN1 cnJlbnQgcm93J3MgdmFsdWUgaW50byB0aGUgUGFyYW0gdmFsdWUgKi8KISAJCQkJCQlwcm1k YXRhLT52YWx1ZSA9IHZhbHVlc1tpXTsKISAJCQkJCQlwcm1kYXRhLT5pc251bGwgPSAobnVs bHNbaV0gPT0gJ24nKTsKISAKISAJCQkJCQkvKgohIAkJCQkJCSAqIEV4ZWN1dGUgdGhlIGNv bnN0cmFpbnQgZXhwcmVzc2lvbi4gIEFsbG93IHRoZQohIAkJCQkJCSAqIGV4cHJlc3Npb24g dG8gcmVwbGFjZSB0aGUgdmFsdWUgKGNvbnNpZGVyIGUuZy4gYQohIAkJCQkJCSAqIHRpbWVz dGFtcCBwcmVjaXNpb24gcmVzdHJpY3Rpb24pLgohIAkJCQkJCSAqLwohIAkJCQkJCXZhbHVl c1tpXSA9IEV4ZWNFdmFsRXhwcihleHByc3RhdGUsIGVjb250ZXh0LAohIAkJCQkJCQkJCQkJ CSAmaXNudWxsLCBOVUxMKTsKISAJCQkJCQludWxsc1tpXSA9IGlzbnVsbCA/ICduJyA6ICcg JzsKISAJCQkJCX0KISAJCQkJfQohIAohIAkJCQkvKgohIAkJCQkgKiBBbmQgbm93IHdlIGNh biBmb3JtIHRoZSBpbnB1dCB0dXBsZS4KISAJCQkJICovCiEgCQkJCXR1cGxlID0gaGVhcF9m b3JtdHVwbGUodHVwRGVzYywgdmFsdWVzLCBudWxscyk7CiEgCiEgCQkJCWlmIChvaWRzICYm IGZpbGVfaGFzX29pZHMpCiEgCQkJCQlIZWFwVHVwbGVTZXRPaWQodHVwbGUsIGxvYWRlZF9v aWQpOwohIAohIAkJCQkvKgohIAkJCQkgKiBUcmlnZ2VycyBhbmQgc3R1ZmYgbmVlZCB0byBi ZSBpbnZva2VkIGluIHF1ZXJ5IGNvbnRleHQuCiEgCQkJCSAqLwohIAkJCQlNZW1vcnlDb250 ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7CiEgCiEgCQkJCXNraXBfdHVwbGUgPSBmYWxzZTsK ISAKISAJCQkJLyogQkVGT1JFIFJPVyBJTlNFUlQgVHJpZ2dlcnMgKi8KISAJCQkJaWYgKHJl c3VsdFJlbEluZm8tPnJpX1RyaWdEZXNjICYmCiEgCQkJCQlyZXN1bHRSZWxJbmZvLT5yaV9U cmlnRGVzYy0+bl9iZWZvcmVfcm93W1RSSUdHRVJfRVZFTlRfSU5TRVJUXSA+IDApCiEgCQkJ CXsKISAJCQkJCUhlYXBUdXBsZQluZXd0dXBsZTsKISAKISAJCQkJCW5ld3R1cGxlID0gRXhl Y0JSSW5zZXJ0VHJpZ2dlcnMoZXN0YXRlLCByZXN1bHRSZWxJbmZvLCB0dXBsZSk7CiEgCiEg CQkJCQlpZiAobmV3dHVwbGUgPT0gTlVMTCkJCS8qICJkbyBub3RoaW5nIiAqLwohIAkJCQkJ CXNraXBfdHVwbGUgPSB0cnVlOwohIAkJCQkJZWxzZSBpZiAobmV3dHVwbGUgIT0gdHVwbGUp IC8qIG1vZGlmaWVkIGJ5IFRyaWdnZXIocykgKi8KISAJCQkJCXsKISAJCQkJCQloZWFwX2Zy ZWV0dXBsZSh0dXBsZSk7CiEgCQkJCQkJdHVwbGUgPSBuZXd0dXBsZTsKISAJCQkJCX0KISAJ CQkJfQohIAohIAkJCQlpZiAoIXNraXBfdHVwbGUpCiEgCQkJCXsKISAJCQkJCS8qIFBsYWNl IHR1cGxlIGluIHR1cGxlIHNsb3QgKi8KISAJCQkJCUV4ZWNTdG9yZVR1cGxlKHR1cGxlLCBz bG90LCBJbnZhbGlkQnVmZmVyLCBmYWxzZSk7CiEgCiEgCQkJCQkvKgohIAkJCQkJICogQ2hl Y2sgdGhlIGNvbnN0cmFpbnRzIG9mIHRoZSB0dXBsZQohIAkJCQkJICovCiEgCQkJCQlpZiAo cmVsLT5yZF9hdHQtPmNvbnN0cikKISAJCQkJCQlFeGVjQ29uc3RyYWludHMocmVzdWx0UmVs SW5mbywgc2xvdCwgZXN0YXRlKTsKISAKISAJCQkJCS8qCiEgCQkJCQkgKiBPSywgc3RvcmUg dGhlIHR1cGxlIGFuZCBjcmVhdGUgaW5kZXggZW50cmllcyBmb3IgaXQKISAJCQkJCSAqLwoh IAkJCQkJc2ltcGxlX2hlYXBfaW5zZXJ0KHJlbCwgdHVwbGUpOwohIAohIAkJCQkJaWYgKHJl c3VsdFJlbEluZm8tPnJpX051bUluZGljZXMgPiAwKQohIAkJCQkJCUV4ZWNJbnNlcnRJbmRl eFR1cGxlcyhzbG90LCAmKHR1cGxlLT50X3NlbGYpLCBlc3RhdGUsIGZhbHNlKTsKISAKISAJ CQkJCS8qIEFGVEVSIFJPVyBJTlNFUlQgVHJpZ2dlcnMgKi8KISAJCQkJCUV4ZWNBUkluc2Vy dFRyaWdnZXJzKGVzdGF0ZSwgcmVzdWx0UmVsSW5mbywgdHVwbGUpOwohIAkJCQl9CiEgCiEg CQkJCWxpbmVfYnVmLmxlbiA9IDA7CQkvKiB3ZSBjYW4gcmVzZXQgbGluZSBidWZmZXIgbm93 LiAqLwohIAkJCQlsaW5lX2J1Zi5kYXRhWzBdID0gJ1wwJzsKISAJCQkJbGluZV9idWYuY3Vy c29yID0gMDsKISAJCQl9CQkJCQkvKiBlbmQgd2hpbGUoIWJ1Zl9kb25lKSAqLwohIAkJfQkJ CQkJCS8qIGVuZCBpZiAoYnl0ZXNyZWFkID4gMCB8fCAhZmVfZW9mKSAqLwohIAkJZWxzZQoh IAkJCS8qIG5vIGJ5dGVzIHJlYWQsIGVuZCBvZiBkYXRhICovCiEgCQl7CiEgCQkJbm9fbW9y ZV9kYXRhID0gVFJVRTsKISAJCX0KISAJfSB3aGlsZSAoIW5vX21vcmVfZGF0YSk7CiEgCiEg CS8qCiEgCSAqIERvbmUsIGNsZWFuIHVwCiEgCSAqLwohIAllcnJvcl9jb250ZXh0X3N0YWNr ID0gZXJyY29udGV4dC5wcmV2aW91czsKISAKISAJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9s ZGNvbnRleHQpOwohIAohIAkvKgohIAkgKiBFeGVjdXRlIEFGVEVSIFNUQVRFTUVOVCBpbnNl cnRpb24gdHJpZ2dlcnMKISAJICovCiEgCUV4ZWNBU0luc2VydFRyaWdnZXJzKGVzdGF0ZSwg cmVzdWx0UmVsSW5mbyk7CiEgCiEgCS8qCiEgCSAqIEhhbmRsZSBxdWV1ZWQgQUZURVIgdHJp Z2dlcnMKISAJICovCiEgCUFmdGVyVHJpZ2dlckVuZFF1ZXJ5KGVzdGF0ZSk7CiEgCiEgCXBm cmVlKHZhbHVlcyk7CiEgCXBmcmVlKG51bGxzKTsKISAKISAJcGZyZWUoYXR0cl9vZmZzZXRz KTsKISAKISAJcGZyZWUoaW5fZnVuY3Rpb25zKTsKISAJcGZyZWUodHlwaW9wYXJhbXMpOwoh IAlwZnJlZShkZWZtYXApOwohIAlwZnJlZShkZWZleHBycyk7CiEgCXBmcmVlKGNvbnN0cmFp bnRleHBycyk7CiEgCXBmcmVlKGZvcmNlX25vdG51bGwpOwohIAohIAlFeGVjRHJvcFNpbmds ZVR1cGxlVGFibGVTbG90KHNsb3QpOwohIAohIAlFeGVjQ2xvc2VJbmRpY2VzKHJlc3VsdFJl bEluZm8pOwohIAohIAlGcmVlRXhlY3V0b3JTdGF0ZShlc3RhdGUpOwohIH0KISAKISAKISAv KgohICAqIFJlYWQgdGhlIG5leHQgaW5wdXQgbGluZSBhbmQgc3Rhc2ggaXQgaW4gbGluZV9i dWYsIHdpdGggY29udmVyc2lvbiB0bwohICAqIHNlcnZlciBlbmNvZGluZy4KISAgKgohICAq IFJlc3VsdCBpcyB0cnVlIGlmIHJlYWQgd2FzIHRlcm1pbmF0ZWQgYnkgRU9GLCBmYWxzZSBp ZiB0ZXJtaW5hdGVkCiEgICogYnkgbmV3bGluZS4KISAgKi8KISBzdGF0aWMgYm9vbAohIENv cHlSZWFkTGluZShjaGFyICpxdW90ZSwgY2hhciAqZXNjYXBlKQohIHsKISAJYm9vbAkJcmVz dWx0OwohIAlib29sCQljaGFuZ2VfZW5jb2RpbmcgPSAoY2xpZW50X2VuY29kaW5nICE9IHNl cnZlcl9lbmNvZGluZyk7CiEgCWludAkJCWM7CiEgCWludAkJCW1ibGVuOwohIAlpbnQJCQlq OwohIAl1bnNpZ25lZCBjaGFyIHNbMl07CiEgCWNoYXIJICAgKmN2dDsKISAJYm9vbAkJaW5f cXVvdGUgPSBmYWxzZSwKISAJCQkJbGFzdF93YXNfZXNjID0gZmFsc2UsCiEgCQkJCWNzdl9t b2RlID0gZmFsc2U7CiEgCWNoYXIJCXF1b3RlYyA9ICdcMCcsCiEgCQkJCWVzY2FwZWMgPSAn XDAnOwohIAohIAlpZiAocXVvdGUpCiEgCXsKISAJCWNzdl9tb2RlID0gdHJ1ZTsKISAJCXF1 b3RlYyA9IHF1b3RlWzBdOwohIAkJZXNjYXBlYyA9IGVzY2FwZVswXTsKISAJCS8qIGlnbm9y ZSBzcGVjaWFsIGVzY2FwZSBwcm9jZXNzaW5nIGlmIGl0J3MgdGhlIHNhbWUgYXMgcXVvdGVj ICovCiEgCQlpZiAocXVvdGVjID09IGVzY2FwZWMpCiEgCQkJZXNjYXBlYyA9ICdcMCc7CiEg CX0KISAKISAKISAJc1sxXSA9IDA7CiEgCiEgCS8qIHJlc2V0IGxpbmVfYnVmIHRvIGVtcHR5 ICovCiEgCWxpbmVfYnVmLmxlbiA9IDA7CiEgCWxpbmVfYnVmLmRhdGFbMF0gPSAnXDAnOwoh IAlsaW5lX2J1Zi5jdXJzb3IgPSAwOwohIAohIAkvKiBtYXJrIHRoYXQgZW5jb2RpbmcgY29u dmVyc2lvbiBoYXNuJ3Qgb2NjdXJyZWQgeWV0ICovCiEgCWxpbmVfYnVmX2NvbnZlcnRlZCA9 IGZhbHNlOwohIAohIAkvKiBzZXQgZGVmYXVsdCBzdGF0dXMgKi8KISAJcmVzdWx0ID0gZmFs c2U7CiEgCiEgCS8qCiEgCSAqIEluIHRoaXMgbG9vcCB3ZSBvbmx5IGNhcmUgZm9yIGRldGVj dGluZyBuZXdsaW5lcyAoXHIgYW5kL29yIFxuKSBhbmQKISAJICogdGhlIGVuZC1vZi1jb3B5 IG1hcmtlciAoXC4pLgohIAkgKgohIAkgKiBJbiBUZXh0IG1vZGUsIGZvciBiYWNrd2FyZHMg Y29tcGF0aWJpbGl0eSB3ZSBhbGxvdwohIAkgKiBiYWNrc2xhc2hlcyB0byBlc2NhcGUgbmV3 bGluZSBjaGFyYWN0ZXJzLiAgQmFja3NsYXNoZXMgb3RoZXIgdGhhbgohIAkgKiB0aGUgZW5k IG1hcmtlciBnZXQgcHV0IGludG8gdGhlIGxpbmVfYnVmLCBzaW5jZSBDb3B5UmVhZEF0dHJp YnV0ZQohIAkgKiBkb2VzIGl0cyBvd24gZXNjYXBlIHByb2Nlc3NpbmcuCiEgCSAqCiEgCSAq IEluIENTViBtb2RlLCBDUiBhbmQgTkwgaW5zaWRlIHEgcXVvdGVkIGZpZWxkIGFyZSBqdXN0 IHBhcnQgb2YgdGhlCiEgCSAqIGRhdGEgdmFsdWUgYW5kIGFyZSBwdXQgaW4gbGluZV9idWYu IFdlIGtlZXAganVzdCBlbm91Z2ggc3RhdGUKISAJICogdG8ga25vdyBpZiB3ZSBhcmUgY3Vy cmVudGx5IGluIGEgcXVvdGVkIGZpZWxkIG9yIG5vdC4KISAJICoKISAJICogVGhlc2UgZm91 ciBjaGFyYWN0ZXJzLCBhbmQgb25seSB0aGVzZSBmb3VyLCBhcmUgYXNzdW1lZCB0aGUgc2Ft ZSBpbgohIAkgKiBmcm9udGVuZCBhbmQgYmFja2VuZCBlbmNvZGluZ3MuCiEgCSAqCiEgCSAq IFdlIGRvIG5vdCBhc3N1bWUgdGhhdCBzZWNvbmQgYW5kIGxhdGVyIGJ5dGVzIG9mIGEgZnJv bnRlbmQKISAJICogbXVsdGlieXRlIGNoYXJhY3RlciBjb3VsZG4ndCBsb29rIGxpa2UgQVND SUkgY2hhcmFjdGVycy4KISAJICovCiEgCWZvciAoOzspCiEgCXsKISAJCWMgPSBDb3B5R2V0 Q2hhcigpOwohIAkJaWYgKGMgPT0gRU9GKQohIAkJewohIAkJCXJlc3VsdCA9IHRydWU7CiEg CQkJYnJlYWs7CiEgCQl9CiEgCiEgCQlpZiAoY3N2X21vZGUpCiEgCQl7CiEgCQkJLyoKISAJ CQkgKiBEZWFsaW5nIHdpdGggcXVvdGVzIGFuZCBlc2NhcGVzIGhlcmUgaXMgbWlsZGx5IHRy aWNreS4gSWYgdGhlCiEgCQkJICogcXVvdGUgY2hhciBpcyBhbHNvIHRoZSBlc2NhcGUgY2hh ciwgdGhlcmUncyBubyBwcm9ibGVtIC0gd2UKISAJCQkgKiBqdXN0IHVzZSB0aGUgY2hhciBh cyBhIHRvZ2dsZS4gSWYgdGhleSBhcmUgZGlmZmVyZW50LCB3ZSBuZWVkCiEgCQkJICogdG8g ZW5zdXJlIHRoYXQgd2Ugb25seSB0YWtlIGFjY291bnQgb2YgYW4gZXNjYXBlIGluc2lkZSBh IHF1b3RlZAohIAkJCSAqIGZpZWxkIGFuZCBpbW1lZGlhdGVseSBwcmVjZWRpbmcgYSBxdW90 ZSBjaGFyLCBhbmQgbm90IHRoZQohIAkJCSAqIHNlY29uZCBpbiBhIGVzY2FwZS1lc2NhcGUg c2VxdWVuY2UuCiEgCQkJICovCiEgCiEgCQkJaWYgKGluX3F1b3RlICYmIGMgPT0gZXNjYXBl YykKISAJCQkJbGFzdF93YXNfZXNjID0gIWxhc3Rfd2FzX2VzYzsKISAJCQlpZiAoYyA9PSBx dW90ZWMgJiYgIWxhc3Rfd2FzX2VzYykKISAJCQkJaW5fcXVvdGUgPSAhaW5fcXVvdGU7CiEg CQkJaWYgKGMgIT0gZXNjYXBlYykKISAJCQkJbGFzdF93YXNfZXNjID0gZmFsc2U7CiEgCiEg CQkJLyoKISAJCQkgKiB1cGRhdGluZyB0aGUgbGluZSBjb3VudCBmb3IgZW1iZWRkZWQgQ1Ig YW5kL29yIExGIGNoYXJzIGlzCiEgCQkJICogbmVjZXNzYXJpbHkgYSBsaXR0bGUgZnJhZ2ls ZSAtIHRoaXMgdGVzdCBpcyBwcm9iYWJseSBhYm91dAohIAkJCSAqIHRoZSBiZXN0IHdlIGNh biBkby4KISAJCQkgKi8KISAJCQlpZiAoaW5fcXVvdGUgJiYgYyA9PSAoZW9sX3R5cGUgPT0g RU9MX0NSID8gJ1xyJyA6ICdcbicpKQohIAkJCQljb3B5X2xpbmVubysrOwohIAkJfQohIAoh IAkJaWYgKCFpbl9xdW90ZSAmJiBjID09ICdccicpCiEgCQl7CiEgCQkJaWYgKGVvbF90eXBl ID09IEVPTF9OTCkKISAJCQl7CiEgCQkJCWlmICghY3N2X21vZGUpCiEgCQkJCQllcmVwb3J0 KEVSUk9SLAohIAkJCQkJCQkoZXJyY29kZShFUlJDT0RFX0JBRF9DT1BZX0ZJTEVfRk9STUFU KSwKISAJCQkJCQkJIGVycm1zZygibGl0ZXJhbCBjYXJyaWFnZSByZXR1cm4gZm91bmQgaW4g ZGF0YSIpLAohIAkJCQkJICBlcnJoaW50KCJVc2UgXCJcXHJcIiB0byByZXByZXNlbnQgY2Fy cmlhZ2UgcmV0dXJuLiIpKSk7CiEgCQkJCWVsc2UKISAJCQkJCWVyZXBvcnQoRVJST1IsCiEg CQkJCQkJCShlcnJjb2RlKEVSUkNPREVfQkFEX0NPUFlfRklMRV9GT1JNQVQpLAohIAkJCQkJ CWVycm1zZygidW5xdW90ZWQgY2FycmlhZ2UgcmV0dXJuIGZvdW5kIGluIENTViBkYXRhIiks CiEgCQkJCQkJCSBlcnJoaW50KCJVc2UgcXVvdGVkIENTViBmaWVsZCB0byByZXByZXNlbnQg Y2FycmlhZ2UgcmV0dXJuLiIpKSk7CiEgCQkJfQohIAkJCS8qIENoZWNrIGZvciBcclxuIG9u IGZpcnN0IGxpbmUsIF9hbmRfIGhhbmRsZSBcclxuLiAqLwohIAkJCWlmIChlb2xfdHlwZSA9 PSBFT0xfVU5LTk9XTiB8fCBlb2xfdHlwZSA9PSBFT0xfQ1JOTCkKISAJCQl7CiEgCQkJCWlu dAkJCWMyID0gQ29weVBlZWtDaGFyKCk7CiEgCiEgCQkJCWlmIChjMiA9PSAnXG4nKQohIAkJ CQl7CiEgCQkJCQlDb3B5RG9uZVBlZWsoYzIsIHRydWUpOwkJLyogZWF0IG5ld2xpbmUgKi8K ISAJCQkJCWVvbF90eXBlID0gRU9MX0NSTkw7CiEgCQkJCX0KISAJCQkJZWxzZQohIAkJCQl7 CiEgCQkJCQkvKiBmb3VuZCBcciwgYnV0IG5vIFxuICovCiEgCQkJCQlpZiAoZW9sX3R5cGUg PT0gRU9MX0NSTkwpCiEgCQkJCQl7CiEgCQkJCQkJaWYgKCFjc3ZfbW9kZSkKISAJCQkJCQkJ ZXJlcG9ydChFUlJPUiwKISAJCQkJCQkJCQkoZXJyY29kZShFUlJDT0RFX0JBRF9DT1BZX0ZJ TEVfRk9STUFUKSwKISAJCQkJCQkJIGVycm1zZygibGl0ZXJhbCBjYXJyaWFnZSByZXR1cm4g Zm91bmQgaW4gZGF0YSIpLAohIAkJCQkJCQkJCSBlcnJoaW50KCJVc2UgXCJcXHJcIiB0byBy ZXByZXNlbnQgY2FycmlhZ2UgcmV0dXJuLiIpKSk7CiEgCQkJCQkJZWxzZQohIAkJCQkJCQll cmVwb3J0KEVSUk9SLAohIAkJCQkJCQkJCShlcnJjb2RlKEVSUkNPREVfQkFEX0NPUFlfRklM RV9GT1JNQVQpLAohIAkJCQkJCQllcnJtc2coInVucXVvdGVkIGNhcnJpYWdlIHJldHVybiBm b3VuZCBpbiBkYXRhIiksCiEgCQkJCQkJCQkJIGVycmhpbnQoIlVzZSBxdW90ZWQgQ1NWIGZp ZWxkIHRvIHJlcHJlc2VudCBjYXJyaWFnZSByZXR1cm4uIikpKTsKISAKISAJCQkJCX0KISAK ISAJCQkJCS8qCiEgCQkJCQkgKiBpZiB3ZSBnb3QgaGVyZSwgaXQgaXMgdGhlIGZpcnN0IGxp bmUgYW5kIHdlIGRpZG4ndAohIAkJCQkJICogZ2V0IFxuLCBzbyBwdXQgaXQgYmFjawohIAkJ CQkJICovCiEgCQkJCQlDb3B5RG9uZVBlZWsoYzIsIGZhbHNlKTsKISAJCQkJCWVvbF90eXBl ID0gRU9MX0NSOwohIAkJCQl9CiEgCQkJfQohIAkJCWJyZWFrOwohIAkJfQohIAkJaWYgKCFp bl9xdW90ZSAmJiBjID09ICdcbicpCiEgCQl7CiEgCQkJaWYgKGVvbF90eXBlID09IEVPTF9D UiB8fCBlb2xfdHlwZSA9PSBFT0xfQ1JOTCkKISAJCQl7CiEgCQkJCWlmICghY3N2X21vZGUp CiEgCQkJCQllcmVwb3J0KEVSUk9SLAohIAkJCQkJCQkoZXJyY29kZShFUlJDT0RFX0JBRF9D T1BZX0ZJTEVfRk9STUFUKSwKISAJCQkJCQkJIGVycm1zZygibGl0ZXJhbCBuZXdsaW5lIGZv dW5kIGluIGRhdGEiKSwKISAJCQkJCQkJIGVycmhpbnQoIlVzZSBcIlxcblwiIHRvIHJlcHJl c2VudCBuZXdsaW5lLiIpKSk7CiEgCQkJCWVsc2UKISAJCQkJCWVyZXBvcnQoRVJST1IsCiEg CQkJCQkJCShlcnJjb2RlKEVSUkNPREVfQkFEX0NPUFlfRklMRV9GT1JNQVQpLAohIAkJCQkJ CQkgZXJybXNnKCJ1bnF1b3RlZCBuZXdsaW5lIGZvdW5kIGluIGRhdGEiKSwKISAJCQkJCSBl cnJoaW50KCJVc2UgcXVvdGVkIENTViBmaWVsZCB0byByZXByZXNlbnQgbmV3bGluZS4iKSkp OwohIAohIAkJCX0KISAJCQllb2xfdHlwZSA9IEVPTF9OTDsKISAJCQlicmVhazsKISAJCX0K ISAKISAJCWlmICgobGluZV9idWYubGVuID09IDAgfHwgIWNzdl9tb2RlKSAmJiBjID09ICdc XCcpCiEgCQl7CiEgCQkJaW50CQkJYzI7CiEgCiEgCQkJaWYgKGNzdl9tb2RlKQohIAkJCQlj MiA9IENvcHlQZWVrQ2hhcigpOwohIAkJCWVsc2UKISAJCQkJYzIgPSBjID0gQ29weUdldENo YXIoKTsKICAKICAJCQlpZiAoYzIgPT0gRU9GKQogIAkJCXsKKioqKioqKioqKioqKioqCioq KiAyMTc5LDIxODUgKioqKgogIAkJCWlmIChjMiA9PSAnLicpCiAgCQkJewogIAkJCQlpZiAo Y3N2X21vZGUpCiEgCQkJCQlDb3B5RG9uZVBlZWsoYzIsIHRydWUpOyAvKiBhbGxvdyBrZWVw IGNhbGxpbmcgR2V0Q2hhcigpICovCiAgCiAgCQkJCWlmIChlb2xfdHlwZSA9PSBFT0xfQ1JO TCkKICAJCQkJewotLS0gMjcxNiwyNzIzIC0tLS0KICAJCQlpZiAoYzIgPT0gJy4nKQogIAkJ CXsKICAJCQkJaWYgKGNzdl9tb2RlKQohIAkJCQkJQ29weURvbmVQZWVrKGMyLCB0cnVlKTsJ CS8qIGFsbG93IGtlZXAgY2FsbGluZwohIAkJCQkJCQkJCQkJCSAqIEdldENoYXIoKSAqLwog IAogIAkJCQlpZiAoZW9sX3R5cGUgPT0gRU9MX0NSTkwpCiAgCQkJCXsKKioqKioqKioqKioq KioqCioqKiAyMjA2LDIyNjEgKioqKgogIAkJCQkJCQkgZXJybXNnKCJlbmQtb2YtY29weSBt YXJrZXIgZG9lcyBub3QgbWF0Y2ggcHJldmlvdXMgbmV3bGluZSBzdHlsZSIpKSk7CiAgCiAg CQkJCS8qCiEgCQkJCSAqIEluIHByb3RvY29sIHZlcnNpb24gMywgd2Ugc2hvdWxkIGlnbm9y ZSBhbnl0aGluZyBhZnRlcgohIAkJCQkgKiBcLiB1cCB0byB0aGUgcHJvdG9jb2wgZW5kIG9m IGNvcHkgZGF0YS4JKFhYWCBtYXliZQohIAkJCQkgKiBiZXR0ZXIgbm90IHRvIHRyZWF0IFwu IGFzIHNwZWNpYWw/KQogIAkJCQkgKi8KISAJCQkJaWYgKGNvcHlfZGVzdCA9PSBDT1BZX05F V19GRSkKICAJCQkJewohIAkJCQkJd2hpbGUgKGMgIT0gRU9GKQohIAkJCQkJCWMgPSBDb3B5 R2V0Q2hhcigpOwogIAkJCQl9Ci0gCQkJCXJlc3VsdCA9IHRydWU7CS8qIHJlcG9ydCBFT0Yg Ki8KLSAJCQkJYnJlYWs7CiAgCQkJfQotIAkJCQotIAkJCWlmIChjc3ZfbW9kZSkKLSAJCQkJ Q29weURvbmVQZWVrKGMyLCBmYWxzZSk7IC8qIG5vdCBhIGRvdCwgc28gcHV0IGl0IGJhY2sg Ki8gCi0gCQkJZWxzZQotIAkJCQkvKiBub3QgRU9GIG1hcmssIHNvIGVtaXQgXCBhbmQgZm9s bG93aW5nIGNoYXIgbGl0ZXJhbGx5ICovCi0gCQkJCWFwcGVuZFN0cmluZ0luZm9DaGFyTWFj cm8oJmxpbmVfYnVmLCAnXFwnKTsKLSAJCX0KICAKISAJCWFwcGVuZFN0cmluZ0luZm9DaGFy TWFjcm8oJmxpbmVfYnVmLCBjKTsKICAKISAJCS8qCiEgCQkgKiBXaGVuIGNsaWVudCBlbmNv ZGluZyAhPSBzZXJ2ZXIsIG11c3QgYmUgY2FyZWZ1bCB0byByZWFkIHRoZQohIAkJICogZXh0 cmEgYnl0ZXMgb2YgYSBtdWx0aWJ5dGUgY2hhcmFjdGVyIGV4YWN0bHksIHNpbmNlIHRoZQoh IAkJICogZW5jb2RpbmcgbWlnaHQgbm90IGVuc3VyZSB0aGV5IGRvbid0IGxvb2sgbGlrZSBB U0NJSS4gIFdoZW4gdGhlCiEgCQkgKiBlbmNvZGluZ3MgYXJlIHRoZSBzYW1lLCB3ZSBuZWVk IG5vdCBkbyB0aGlzLCBzaW5jZSBubyBzZXJ2ZXIKISAJCSAqIGVuY29kaW5nIHdlIHVzZSBo YXMgQVNDSUktbGlrZSBmb2xsb3dpbmcgYnl0ZXMuCiEgCQkgKi8KISAJCWlmIChjaGFuZ2Vf ZW5jb2RpbmcpCiAgCQl7CiEgCQkJc1swXSA9IGM7CiEgCQkJbWJsZW4gPSBwZ19lbmNvZGlu Z19tYmxlbihjbGllbnRfZW5jb2RpbmcsIHMpOwohIAkJCWZvciAoaiA9IDE7IGogPCBtYmxl bjsgaisrKQogIAkJCXsKISAJCQkJYyA9IENvcHlHZXRDaGFyKCk7CiEgCQkJCWlmIChjID09 IEVPRikKICAJCQkJewohIAkJCQkJcmVzdWx0ID0gdHJ1ZTsKISAJCQkJCWJyZWFrOwogIAkJ CQl9Ci0gCQkJCWFwcGVuZFN0cmluZ0luZm9DaGFyTWFjcm8oJmxpbmVfYnVmLCBjKTsKICAJ CQl9CiEgCQkJaWYgKHJlc3VsdCkKISAJCQkJYnJlYWs7CQkJLyogb3V0IG9mIG91dGVyIGxv b3AgKi8KICAJCX0KISAJfQkJCQkJCQkvKiBlbmQgb2Ygb3V0ZXIgbG9vcCAqLwogIAohIAkv KiBEb25lIHJlYWRpbmcgdGhlIGxpbmUuICBDb252ZXJ0IGl0IHRvIHNlcnZlciBlbmNvZGlu Zy4gKi8KISAJaWYgKGNoYW5nZV9lbmNvZGluZykKICAJewogIAkJY3Z0ID0gKGNoYXIgKikg cGdfY2xpZW50X3RvX3NlcnZlcigodW5zaWduZWQgY2hhciAqKSBsaW5lX2J1Zi5kYXRhLAog IAkJCQkJCQkJCQkgICBsaW5lX2J1Zi5sZW4pOwotLS0gMjc0NCwzMTAwIC0tLS0KICAJCQkJ CQkJIGVycm1zZygiZW5kLW9mLWNvcHkgbWFya2VyIGRvZXMgbm90IG1hdGNoIHByZXZpb3Vz IG5ld2xpbmUgc3R5bGUiKSkpOwogIAogIAkJCQkvKgohIAkJCQkgKiBJbiBwcm90b2NvbCB2 ZXJzaW9uIDMsIHdlIHNob3VsZCBpZ25vcmUgYW55dGhpbmcgYWZ0ZXIKISAJCQkJICogXC4g dXAgdG8gdGhlIHByb3RvY29sIGVuZCBvZiBjb3B5IGRhdGEuCShYWFggbWF5YmUKISAJCQkJ ICogYmV0dGVyIG5vdCB0byB0cmVhdCBcLiBhcyBzcGVjaWFsPykKISAJCQkJICovCiEgCQkJ CWlmIChjb3B5X2Rlc3QgPT0gQ09QWV9ORVdfRkUpCiEgCQkJCXsKISAJCQkJCXdoaWxlIChj ICE9IEVPRikKISAJCQkJCQljID0gQ29weUdldENoYXIoKTsKISAJCQkJfQohIAkJCQlyZXN1 bHQgPSB0cnVlOwkvKiByZXBvcnQgRU9GICovCiEgCQkJCWJyZWFrOwohIAkJCX0KISAKISAJ CQlpZiAoY3N2X21vZGUpCiEgCQkJCUNvcHlEb25lUGVlayhjMiwgZmFsc2UpOwkJLyogbm90 IGEgZG90LCBzbyBwdXQgaXQgYmFjayAqLwohIAkJCWVsc2UKISAJCQkJLyogbm90IEVPRiBt YXJrLCBzbyBlbWl0IFwgYW5kIGZvbGxvd2luZyBjaGFyIGxpdGVyYWxseSAqLwohIAkJCQlh cHBlbmRTdHJpbmdJbmZvQ2hhck1hY3JvKCZsaW5lX2J1ZiwgJ1xcJyk7CiEgCQl9CiEgCiEg CQlhcHBlbmRTdHJpbmdJbmZvQ2hhck1hY3JvKCZsaW5lX2J1ZiwgYyk7CiEgCiEgCQkvKgoh IAkJICogV2hlbiBjbGllbnQgZW5jb2RpbmcgIT0gc2VydmVyLCBtdXN0IGJlIGNhcmVmdWwg dG8gcmVhZCB0aGUKISAJCSAqIGV4dHJhIGJ5dGVzIG9mIGEgbXVsdGlieXRlIGNoYXJhY3Rl ciBleGFjdGx5LCBzaW5jZSB0aGUKISAJCSAqIGVuY29kaW5nIG1pZ2h0IG5vdCBlbnN1cmUg dGhleSBkb24ndCBsb29rIGxpa2UgQVNDSUkuICBXaGVuIHRoZQohIAkJICogZW5jb2Rpbmdz IGFyZSB0aGUgc2FtZSwgd2UgbmVlZCBub3QgZG8gdGhpcywgc2luY2Ugbm8gc2VydmVyCiEg CQkgKiBlbmNvZGluZyB3ZSB1c2UgaGFzIEFTQ0lJLWxpa2UgZm9sbG93aW5nIGJ5dGVzLgoh IAkJICovCiEgCQlpZiAoY2hhbmdlX2VuY29kaW5nKQohIAkJewohIAkJCXNbMF0gPSBjOwoh IAkJCW1ibGVuID0gcGdfZW5jb2RpbmdfbWJsZW4oY2xpZW50X2VuY29kaW5nLCBzKTsKISAJ CQlmb3IgKGogPSAxOyBqIDwgbWJsZW47IGorKykKISAJCQl7CiEgCQkJCWMgPSBDb3B5R2V0 Q2hhcigpOwohIAkJCQlpZiAoYyA9PSBFT0YpCiEgCQkJCXsKISAJCQkJCXJlc3VsdCA9IHRy dWU7CiEgCQkJCQlicmVhazsKISAJCQkJfQohIAkJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhck1h Y3JvKCZsaW5lX2J1ZiwgYyk7CiEgCQkJfQohIAkJCWlmIChyZXN1bHQpCiEgCQkJCWJyZWFr OwkJCS8qIG91dCBvZiBvdXRlciBsb29wICovCiEgCQl9CiEgCX0JCQkJCQkJLyogZW5kIG9m IG91dGVyIGxvb3AgKi8KISAKISAJLyogRG9uZSByZWFkaW5nIHRoZSBsaW5lLiAgQ29udmVy dCBpdCB0byBzZXJ2ZXIgZW5jb2RpbmcuICovCiEgCWlmIChjaGFuZ2VfZW5jb2RpbmcpCiEg CXsKISAJCWN2dCA9IChjaGFyICopIHBnX2NsaWVudF90b19zZXJ2ZXIoKHVuc2lnbmVkIGNo YXIgKikgbGluZV9idWYuZGF0YSwKISAJCQkJCQkJCQkJICAgbGluZV9idWYubGVuKTsKISAJ CWlmIChjdnQgIT0gbGluZV9idWYuZGF0YSkKISAJCXsKISAJCQkvKiB0cmFuc2ZlciBjb252 ZXJ0ZWQgZGF0YSBiYWNrIHRvIGxpbmVfYnVmICovCiEgCQkJbGluZV9idWYubGVuID0gMDsK ISAJCQlsaW5lX2J1Zi5kYXRhWzBdID0gJ1wwJzsKISAJCQlsaW5lX2J1Zi5jdXJzb3IgPSAw OwohIAkJCWFwcGVuZEJpbmFyeVN0cmluZ0luZm8oJmxpbmVfYnVmLCBjdnQsIHN0cmxlbihj dnQpKTsKISAJCX0KISAJfQohIAohIAkvKiBOb3cgaXQncyBzYWZlIHRvIHVzZSB0aGUgYnVm ZmVyIGluIGVycm9yIG1lc3NhZ2VzICovCiEgCWxpbmVfYnVmX2NvbnZlcnRlZCA9IHRydWU7 CiEgCiEgCXJldHVybiByZXN1bHQ7CiEgfQohIAohIC8qCiEgICoJUmV0dXJuIGRlY2ltYWwg dmFsdWUgZm9yIGEgaGV4YWRlY2ltYWwgZGlnaXQKISAgKi8KISBzdGF0aWMKISBpbnQKISBH ZXREZWNpbWFsRnJvbUhleChjaGFyIGhleCkKISB7CiEgCWlmIChpc2RpZ2l0KGhleCkpCiEg CQlyZXR1cm4gaGV4IC0gJzAnOwohIAllbHNlCiEgCQlyZXR1cm4gdG9sb3dlcihoZXgpIC0g J2EnICsgMTA7CiEgfQohIAohIC8qCiEgICogRGV0ZWN0ZWQgdGhlIGVvbCB0eXBlIGJ5IGxv b2tpbmcgYXQgdGhlIGZpcnN0IGRhdGEgcm93LgohICAqIFBvc3NpYmxlIGVvbCB0eXBlcyBh cmUgTkwsIENSLCBvciBDUk5MLiBJZiBlb2wgdHlwZSB3YXMKISAgKiBkZXRlY3RlZCwgaXQg aXMgc2V0IGFuZCBhIGJvb2xlYW4gdHJ1ZSBpcyByZXR1cm5lZCB0bwohICAqIGluZGljYXRl ZCBkZXRlY3Rpb24gd2FzIHN1Y2Nlc3NmdWwuIElmIHRoZSBmaXJzdCBkYXRhIHJvdwohICAq IGlzIGxvbmdlciB0aGFuIHRoZSBpbnB1dCBidWZmZXIsIHdlIHJldHVybiBmYWxzZSBhbmQg d2lsbAohICAqIHRyeSBhZ2FpbiBpbiB0aGUgbmV4dCBidWZmZXIuCiEgICovCiEgc3RhdGlj IGJvb2wKISBEZXRlY3RMaW5lRW5kKHNpemVfdCBieXRlc3JlYWQpCiEgewohIAlpbnQJCQli eXRlc19yZW1haW5pbmcgPSBDT1BZX0JVRl9TSVpFOwohIAljaGFyCQljaF9mb3VuZDsJCS8q IHRoZSBjaGFyYWN0ZXIgZm91bmQgaW4gdGhlIHNjYW4gKCdcbicgb3IKISAJCQkJCQkJCSAq ICdccicgb3IgZXNjYXBlYykgKi8KISAJY2hhcgkgICAqc3RhcnQgPSBpbnB1dF9idWY7CiEg CWNoYXIJICAgKmVuZDsKISAKISAJd2hpbGUgKHRydWUpCiEgCXsKISAJCWJ5dGVzX3JlbWFp bmluZyA9IENPUFlfQlVGX1NJWkUgLSAoaW5wdXRfYnVmIC0gc3RhcnQpOwohIAohIAkJaWYg KGJ5dGVzX3JlbWFpbmluZyA8PSAwKQohIAkJCXJldHVybiBmYWxzZTsKISAKISAJCWlmICgo ZW5kID0gc3RyMmNocmxlbihzdGFydCwgJ1xuJywgJ1xyJywgYnl0ZXNfcmVtYWluaW5nLCAm Y2hfZm91bmQpKSA9PSBOVUxMKQohIAkJewohIAkJCXJldHVybiBmYWxzZTsKISAJCX0KISAJ CWVsc2UKISAJCXsKISAJCQlpZiAoY2hfZm91bmQgPT0gJ1xuJykKISAJCQl7CiEgCQkJCWVv bF90eXBlID0gRU9MX05MOwohIAkJCQllb2xfY2hbMF0gPSAnXG4nOwohIAkJCQllb2xfY2hb MV0gPSAnXDAnOwohIAohIAkJCQlyZXR1cm4gdHJ1ZTsKISAJCQl9CiEgCQkJaWYgKGNoX2Zv dW5kID09ICdccicpCiEgCQkJewohIAkJCQlpZiAoKihlbmQgKyAxKSA9PSAnXG4nKQohIAkJ CQl7CiEgCQkJCQllb2xfdHlwZSA9IEVPTF9DUk5MOwohIAkJCQkJZW9sX2NoWzBdID0gJ1xy JzsKISAJCQkJCWVvbF9jaFsxXSA9ICdcbic7CiEgCQkJCX0KISAJCQkJZWxzZQohIAkJCQl7 CiEgCQkJCQllb2xfdHlwZSA9IEVPTF9DUjsKISAJCQkJCWVvbF9jaFswXSA9ICdccic7CiEg CQkJCQllb2xfY2hbMV0gPSAnXDAnOwohIAkJCQl9CiEgCiEgCQkJCXJldHVybiB0cnVlOwoh IAkJCX0KISAJCX0KISAJfQohIAohIH0KISAKISAKISAvKgohICAqIEZpbmRzIHRoZSBuZXh0 IGRhdGEgbGluZSB0aGF0IGlzIGluIHRoZSBpbnB1dCBidWZmZXIgYW5kIGxvYWRzIGl0IGlu dG8gbGluZV9idWYuCiEgICogUmV0dXJucyBhbiBpbmRpY2F0aW9uIGlmIHRoZSBsaW5lIHRo YXQgd2FzIHJlYWQgaXMgY29tcGxldGUgKGlmIGFuIHVuZXNjYXBlZCBsaW5lLWVuZCB3YXMK ISAgKiBlbmNvdW50ZXJlZCkuIElmIHdlIHJlYWNoZWQgdGhlIGVuZCBvZiBidWZmZXIgYmVm b3JlIHRoZSB3aG9sZSBsaW5lIHdhcyB3cml0dGVuIGludG8gdGhlCiEgICogbGluZSBidWZm ZXIgdGhlbiByZXR1cm5zIGZhbHNlLgohICAqLwohIHN0YXRpYyBib29sCiEgQ29weVJlYWRM aW5lQnVmZmVyZWQoc2l6ZV90IGJ5dGVzcmVhZCkKISB7CiEgCWludAkJCWxpbmVzaXplOwoh IAlib29sCQl0cmFuc2NvZGUgPSAoY2xpZW50X2VuY29kaW5nICE9IHNlcnZlcl9lbmNvZGlu Zyk7CiEgCWNoYXIJICAgKmN2dDsKISAJYm9vbAkJZW5kX21hcmtlcjsKISAKISAJLyogbWFy ayB0aGF0IGVuY29kaW5nIGNvbnZlcnNpb24gaGFzbid0IG9jY3VycmVkIHlldCAqLwohIAls aW5lX2J1Zl9jb252ZXJ0ZWQgPSBmYWxzZTsKISAKISAJLyoKISAJICogRGV0ZWN0IGVuZCBv ZiBsaW5lIHR5cGUgaWYgbm90IGFscmVhZHkgZGV0ZWN0ZWQuCiEgCSAqLwohIAlpZiAoZW9s X3R5cGUgPT0gRU9MX1VOS05PV04pCiEgCXsKISAJCWJvb2wJCWVvbF9kZXRlY3RlZCA9IERl dGVjdExpbmVFbmQoYnl0ZXNyZWFkKTsKISAKISAJCWlmICghZW9sX2RldGVjdGVkKQohIAkJ ewohIAkJCS8qIGxvYWQgZW50aXJlIGlucHV0IGJ1ZmZlciBpbnRvIGxpbmUgYnVmLCBhbmQg cXVpdCAqLwohIAkJCWFwcGVuZEJpbmFyeVN0cmluZ0luZm8oJmxpbmVfYnVmLCBpbnB1dF9i dWYsIENPUFlfQlVGX1NJWkUpOwohIAkJCWxpbmVfZG9uZSA9IGZhbHNlOwohIAkJCWJ1Zl9k b25lID0gdHJ1ZTsKISAKISAJCQlyZXR1cm4gbGluZV9kb25lOwohIAkJfQohIAl9CiEgCiEg CS8qCiEgCSAqIFNwZWNpYWwgY2FzZTogZW9sIGlzIENSTkwsIGxhc3QgYnl0ZSBvZiBwcmV2 aW91cyBidWZmZXIgd2FzIGFuCiEgCSAqIHVuZXNjYXBlZCBDUiBhbmQgMXN0IGJ5dGUgb2Yg Y3VycmVudCBidWZmZXIgaXMgTkwuIFdlIGNoZWNrIGZvcgohIAkgKiB0aGF0IGhlcmUuCiEg CSAqLwohIAlpZiAoZW9sX3R5cGUgPT0gRU9MX0NSTkwpCiEgCXsKISAJCS8qIGlmIHdlIHN0 YXJ0ZWQgc2Nhbm5pbmcgZnJvbSB0aGUgMXN0IGJ5dGUgb2YgdGhlIGJ1ZmZlciAqLwohIAkJ aWYgKGJlZ2xvYyA9PSBpbnB1dF9idWYpCiEgCQl7CiEgCQkJLyogYW5kIGhhZCBhIENSIGlu IGxhc3QgYnl0ZSBvZiBwcmV2IGJ1ZiAqLwohIAkJCWlmIChjcl9pbl9wcmV2YnVmKQohIAkJ CXsKISAJCQkJLyoKISAJCQkJICogaWYgdGhpcyAxc3QgYnl0ZSBpbiBidWZmZXIgaXMgMm5k IGJ5dGUgb2YgbGluZSBlbmQgc2VxdWVuY2UKISAJCQkJICogKGxpbmVmZWVkKQogIAkJCQkg Ki8KISAJCQkJaWYgKCpiZWdsb2MgPT0gZW9sX2NoWzFdKQogIAkJCQl7CiEgCQkJCQkvKgoh IAkJCQkJICogbG9hZCB0aGF0IG9uZSBsaW5lZmVlZCBieXRlIGFuZCBpbmRpY2F0ZSB3ZSBh cmUgZG9uZQohIAkJCQkJICogd2l0aCB0aGUgZGF0YSBsaW5lCiEgCQkJCQkgKi8KISAJCQkJ CWFwcGVuZEJpbmFyeVN0cmluZ0luZm8oJmxpbmVfYnVmLCBiZWdsb2MsIDEpOwohIAkJCQkJ YnVmZmVyX2luZGV4Kys7CiEgCQkJCQliZWdsb2MrKzsKISAKISAJCQkJCWxpbmVfZG9uZSA9 IHRydWU7CiEgCQkJCQllc2NfaW5fcHJldmJ1ZiA9IGZhbHNlOwohIAkJCQkJY3JfaW5fcHJl dmJ1ZiA9IGZhbHNlOwohIAohIAkJCQkJcmV0dXJuIGxpbmVfZG9uZTsKICAJCQkJfQogIAkJ CX0KICAKISAJCQljcl9pbl9wcmV2YnVmID0gZmFsc2U7CiEgCQl9CiEgCX0KICAKISAJLyoK ISAJICogKHdlIG5lZWQgYSBsb29wIHNvIHRoYXQgaWYgZW9sX2NoIGlzIGZvdW5kLCBidXQg cHJldiBjaCBpcyBiYWNrc2xhc2gsCiEgCSAqIHdlIGNhbiBzZWFyY2ggZm9yIHRoZSBuZXh0 IGVvbF9jaCkKISAJICovCiEgCXdoaWxlICh0cnVlKQohIAl7CiEgCQkvKiByZWFjaGVkIGVu ZCBvZiBidWZmZXIgKi8KISAJCWlmICgoZW5kbG9jID0gc3RyY2hybGVuKGJlZ2xvYywgZW9s X2NoWzBdLCBieXRlc3JlYWQgLSBidWZmZXJfaW5kZXgpKSA9PSBOVUxMKQogIAkJewohIAkJ CWxpbmVzaXplID0gQ09QWV9CVUZfU0laRSAtIChiZWdsb2MgLSBpbnB1dF9idWYpOwohIAkJ CWFwcGVuZEJpbmFyeVN0cmluZ0luZm8oJmxpbmVfYnVmLCBiZWdsb2MsIGxpbmVzaXplKTsK ISAKISAJCQlpZiAobGluZV9idWYubGVuID4gMSkKICAJCQl7CiEgCQkJCWNoYXIJICAgKmxh c3RfY2ggPSBsaW5lX2J1Zi5kYXRhICsgbGluZV9idWYubGVuIC0gMTsgLyogYmVmb3JlIHRl cm1pbmF0aW5nIFwwICovCiEgCiEgCQkJCWlmICgqbGFzdF9jaCA9PSBlc2NhcGVjKQogIAkJ CQl7CiEgCQkJCQllc2NfaW5fcHJldmJ1ZiA9IHRydWU7CiEgCiEgCQkJCQlpZiAobGluZV9i dWYubGVuID4gMikKISAJCQkJCXsKISAJCQkJCQlsYXN0X2NoLS07CiEgCQkJCQkJaWYgKCps YXN0X2NoID09IGVzY2FwZWMpCiEgCQkJCQkJCWVzY19pbl9wcmV2YnVmID0gZmFsc2U7CiEg CQkJCQl9CiEgCQkJCX0KISAJCQkJZWxzZSBpZiAoKmxhc3RfY2ggPT0gJ1xyJykKISAJCQkJ ewohIAkJCQkJaWYgKGVvbF90eXBlID09IEVPTF9DUk5MKQohIAkJCQkJCWNyX2luX3ByZXZi dWYgPSB0cnVlOwogIAkJCQl9CiAgCQkJfQohIAohIAkJCWxpbmVfZG9uZSA9IGZhbHNlOwoh IAkJCWJ1Zl9kb25lID0gdHJ1ZTsKISAJCQlicmVhazsKICAJCX0KISAJCWVsc2UKISAJCQkv KiBmb3VuZCB0aGUgMXN0IGVvbCBjaCBpbiBpbnB1dF9idWYuICovCiEgCQl7CiEgCQkJYm9v bAkJZW9sX2ZvdW5kID0gdHJ1ZTsKISAJCQlib29sCQllb2xfZXNjYXBlZCA9IHRydWU7CiAg CiEgCQkJLyoKISAJCQkgKiBMb2FkIHRoYXQgcGllY2Ugb2YgZGF0YSAocG90ZW50aWFsbHkg YSBkYXRhIGxpbmUpIGludG8gdGhlIGxpbmUgYnVmZmVyLAohIAkJCSAqIGFuZCB1cGRhdGUg dGhlIHBvaW50ZXJzIGZvciB0aGUgbmV4dCBzY2FuLgohIAkJCSAqLwohIAkJCWxpbmVzaXpl ID0gZW5kbG9jIC0gYmVnbG9jICsgMTsKISAJCQlhcHBlbmRCaW5hcnlTdHJpbmdJbmZvKCZs aW5lX2J1ZiwgYmVnbG9jLCBsaW5lc2l6ZSk7CiEgCQkJYnVmZmVyX2luZGV4ICs9IGxpbmVz aXplOwohIAkJCWJlZ2xvYyA9IGVuZGxvYyArIDE7CiEgCiEgCQkJaWYgKGVvbF90eXBlID09 IEVPTF9DUk5MKQohIAkJCXsKISAJCQkJLyogY2hlY2sgaWYgdGhlcmUgaXMgYSAnXG4nIGFm dGVyIHRoZSAnXHInICovCiEgCQkJCWlmICgqKGVuZGxvYyArIDEpID09ICdcbicpCiEgCQkJ CXsKISAJCQkJCS8qIHRoaXMgaXMgYSBsaW5lIGVuZCAqLwohIAkJCQkJYXBwZW5kQmluYXJ5 U3RyaW5nSW5mbygmbGluZV9idWYsIGJlZ2xvYywgMSk7CQkvKiBsb2FkIHRoYXQgJ1xuJyAq LwohIAkJCQkJYnVmZmVyX2luZGV4Kys7CiEgCQkJCQliZWdsb2MrKzsKISAJCQkJfQohIAkJ CQllbHNlCiEgCQkJCQkvKiBqdXN0IGEgQ1IsIG5vdCBhIGxpbmUgZW5kICovCiEgCQkJCQll b2xfZm91bmQgPSBmYWxzZTsKISAJCQl9CiEgCiEgCQkJLyoKISAJCQkgKiBpbiBzb21lIGNh c2VzLCB0aGlzIGVuZCBvZiBsaW5lIGNoYXIgaGFwcGVucyB0byBiZSB0aGUKISAJCQkgKiBs YXN0IGNoYXJhY3RlciBpbiB0aGUgYnVmZmVyLiB3ZSBuZWVkIHRvIGNhdGNoIHRoYXQuCiEg CQkJICovCiEgCQkJaWYgKGJ1ZmZlcl9pbmRleCA+PSBieXRlc3JlYWQpCiEgCQkJCWJ1Zl9k b25lID0gdHJ1ZTsKISAKISAJCQkvKgohIAkJCSAqIENoZWNrIGlmIHRoZSAxc3QgZW5kIG9m IGxpbmUgY2ggaXMgZXNjYXBlZC4KISAJCQkgKi8KISAJCQlpZiAoZW5kbG9jICE9IGlucHV0 X2J1ZikJLyogY2FuIHdlIGxvb2sgMSBjaGFyIGJhY2s/ICovCiEgCQkJewohIAkJCQlpZiAo KihlbmRsb2MgLSAxKSAhPSBlc2NhcGVjKQkvKiBwcmV2IGNoYXIgaXMgbm90IGFuIGVzY2Fw ZSAqLwohIAkJCQkJZW9sX2VzY2FwZWQgPSBmYWxzZTsKISAJCQkJZWxzZQohIAkJCQkJLyog cHJldiBjaGFyIGlzIGFuIGVzY2FwZSAqLwohIAkJCQl7CiEgCQkJCQlpZiAoZW5kbG9jICE9 IChpbnB1dF9idWYgKyAxKSkJCS8qIGNhbiB3ZSBsb29rIGFub3RoZXIKISAJCQkJCQkJCQkJ CQkJCSAqIGNoYXIgYmFjaz8gKi8KISAJCQkJCXsKISAJCQkJCQkvKiBpdCdzIGEgZG91Ymxl IGVzY2FwZSBjaGFyLCBzbyBpdCdzIG5vdCBhbiBlc2NhcGUgKi8KISAJCQkJCQlpZiAoKihl bmRsb2MgLSAyKSA9PSBlc2NhcGVjKQohIAkJCQkJCQllb2xfZXNjYXBlZCA9IGZhbHNlOwoh IAkJCQkJCS8qIGVsc2UgaXQncyBhIHNpbmdsZSBlc2NhcGUgY2hhciwgc28gRU9MIGlzIGFz Y2FwZWQgKi8KISAJCQkJCX0KISAJCQkJCWVsc2UKISAJCQkJCXsKISAJCQkJCQkvKiB3ZSBu ZWVkIHRvIGNoZWNrIGluIHRoZSBsYXN0IGJ1ZmZlciAqLwohIAkJCQkJCWlmIChlc2NfaW5f cHJldmJ1ZikJCS8qIGRvdWJsZSBlc2NhcGUgY2hhciwgc28gbm90CiEgCQkJCQkJCQkJCQkJ ICogYW4gZXNjYXBlICovCiEgCQkJCQkJCWVvbF9lc2NhcGVkID0gZmFsc2U7CiEgCQkJCQl9 CiEgCQkJCX0KISAJCQl9CiEgCQkJZWxzZQohIAohIAkJCQkvKgohIAkJCQkgKiB0aGlzIGVv bCBjaCBpcyBmaXJzdCBjaCBpbiBidWZmZXIsIGNoZWNrIGZvciBlc2NhcGUgaW4gcHJldgoh IAkJCQkgKiBidWYKISAJCQkJICovCiEgCQkJewohIAkJCQlpZiAoIWVzY19pbl9wcmV2YnVm KQohIAkJCQkJZW9sX2VzY2FwZWQgPSBmYWxzZTsKISAJCQl9CiEgCiEgCQkJZXNjX2luX3By ZXZidWYgPSBmYWxzZTsJCS8qIHJlc2V0IHZhcmlhYmxlICovCiEgCiEgCQkJLyoKISAJCQkg KiBpZiBlb2wgd2FzIGZvdW5kLCBhbmQgaXQgaXNuJ3QgZXNjYXBlZCwgbGluZSBpcyBkb25l CiEgCQkJICovCiEgCQkJaWYgKChlb2xfZXNjYXBlZCA9PSBmYWxzZSkgJiYgZW9sX2ZvdW5k KQohIAkJCXsKISAJCQkJbGluZV9kb25lID0gdHJ1ZTsKISAJCQkJYnJlYWs7CiEgCQkJfQoh IAkJCWVsc2UKISAJCQkJLyogc3RheSBpbiB0aGUgbG9vcCBhbmQgcHJvY2VzcyBzb21lIG1v cmUgZGF0YS4gKi8KISAJCQkJbGluZV9kb25lID0gZmFsc2U7CiEgCiEgCQl9CQkJCQkJLyog ZW5kIG9mIGZvdW5kIGVvbF9jaCAqLwohIAl9CiEgCiEgCS8qCiEgCSAqIERvbmUgcmVhZGlu ZyB0aGUgbGluZS4gQ29udmVydCBpdCB0byBzZXJ2ZXIgZW5jb2RpbmcuCiEgCSAqLwohIAlp ZiAodHJhbnNjb2RlKQogIAl7CiAgCQljdnQgPSAoY2hhciAqKSBwZ19jbGllbnRfdG9fc2Vy dmVyKCh1bnNpZ25lZCBjaGFyICopIGxpbmVfYnVmLmRhdGEsCiAgCQkJCQkJCQkJCSAgIGxp bmVfYnVmLmxlbik7CioqKioqKioqKioqKioqKgoqKiogMjI2NCwyMjkxICoqKioKICAJCQkv KiB0cmFuc2ZlciBjb252ZXJ0ZWQgZGF0YSBiYWNrIHRvIGxpbmVfYnVmICovCiAgCQkJbGlu ZV9idWYubGVuID0gMDsKICAJCQlsaW5lX2J1Zi5kYXRhWzBdID0gJ1wwJzsKICAJCQlhcHBl bmRCaW5hcnlTdHJpbmdJbmZvKCZsaW5lX2J1ZiwgY3Z0LCBzdHJsZW4oY3Z0KSk7CiAgCQl9 CiAgCX0KICAKISAJLyogTm93IGl0J3Mgc2FmZSB0byB1c2UgdGhlIGJ1ZmZlciBpbiBlcnJv ciBtZXNzYWdlcyAqLwogIAlsaW5lX2J1Zl9jb252ZXJ0ZWQgPSB0cnVlOwogIAohIAlyZXR1 cm4gcmVzdWx0OwohIH0KICAKISAvKgohICAqCVJldHVybiBkZWNpbWFsIHZhbHVlIGZvciBh IGhleGFkZWNpbWFsIGRpZ2l0CiEgICovCiEgc3RhdGljCiEgaW50IEdldERlY2ltYWxGcm9t SGV4KGNoYXIgaGV4KQohIHsKISAJaWYgKGlzZGlnaXQoaGV4KSkKISAJCXJldHVybiBoZXgg LSAnMCc7CiEgCWVsc2UKISAJCXJldHVybiB0b2xvd2VyKGhleCkgLSAnYScgKyAxMDsKICB9 CiAgCiAgLyotLS0tLS0tLS0tCiAgICogUmVhZCB0aGUgdmFsdWUgb2YgYSBzaW5nbGUgYXR0 cmlidXRlLCBwZXJmb3JtaW5nIGRlLWVzY2FwaW5nIGFzIG5lZWRlZC4KICAgKgotLS0gMzEw MywzMTUxIC0tLS0KICAJCQkvKiB0cmFuc2ZlciBjb252ZXJ0ZWQgZGF0YSBiYWNrIHRvIGxp bmVfYnVmICovCiAgCQkJbGluZV9idWYubGVuID0gMDsKICAJCQlsaW5lX2J1Zi5kYXRhWzBd ID0gJ1wwJzsKKyAJCQlsaW5lX2J1Zi5jdXJzb3IgPSAwOwogIAkJCWFwcGVuZEJpbmFyeVN0 cmluZ0luZm8oJmxpbmVfYnVmLCBjdnQsIHN0cmxlbihjdnQpKTsKICAJCX0KICAJfQogIAoh IAkvKiBpbmRpY2F0ZSB0aGF0IGNvbnZlcnNpb24gaGFkIG9jY3VyZWQgKi8KICAJbGluZV9i dWZfY29udmVydGVkID0gdHJ1ZTsKICAKISAJLyoKISAJICogY2hlY2sgaWYgdGhpcyBsaW5l IGlzIGFuIGVuZCBtYXJrZXIgLS0gIlwuIgohIAkgKi8KISAJZW5kX21hcmtlciA9IGZhbHNl OwogIAohIAlzd2l0Y2ggKGVvbF90eXBlKQohIAl7CiEgCQljYXNlIEVPTF9OTDoKISAJCQlp ZiAoIXN0cmNtcChsaW5lX2J1Zi5kYXRhLCAiXFwuXG4iKSkKISAJCQkJZW5kX21hcmtlciA9 IHRydWU7CiEgCQkJYnJlYWs7CiEgCQljYXNlIEVPTF9DUjoKISAJCQlpZiAoIXN0cmNtcChs aW5lX2J1Zi5kYXRhLCAiXFwuXHIiKSkKISAJCQkJZW5kX21hcmtlciA9IHRydWU7CiEgCQkJ YnJlYWs7CiEgCQljYXNlIEVPTF9DUk5MOgohIAkJCWlmICghc3RyY21wKGxpbmVfYnVmLmRh dGEsICJcXC5cclxuIikpCiEgCQkJCWVuZF9tYXJrZXIgPSB0cnVlOwohIAkJCWJyZWFrOwoh IAkJY2FzZSBFT0xfVU5LTk9XTjoKISAJCQlicmVhazsKISAJfQohIAohIAlpZiAoZW5kX21h cmtlcikKISAJewohIAkJZmVfZW9mID0gdHJ1ZTsKISAJCS8qIHdlIGRvbid0IHdhbnQgdG8g cHJvY2VzcyBhIFwuIGFzIGRhdGEgbGluZSwgd2FudCB0byBxdWl0LiAqLwohIAkJbGluZV9k b25lID0gZmFsc2U7CiEgCQlidWZfZG9uZSA9IHRydWU7CiEgCX0KISAKISAJcmV0dXJuIGxp bmVfZG9uZTsKICB9CiAgCisgCiAgLyotLS0tLS0tLS0tCiAgICogUmVhZCB0aGUgdmFsdWUg b2YgYSBzaW5nbGUgYXR0cmlidXRlLCBwZXJmb3JtaW5nIGRlLWVzY2FwaW5nIGFzIG5lZWRl ZC4KICAgKgoqKioqKioqKioqKioqKioKKioqIDIzMTQsMjMyMiAqKioqCiAgCWludAkJCWVu ZF9jdXJzb3I7CiAgCWludAkJCWlucHV0X2xlbjsKICAKISAJLyogcmVzZXQgYXR0cmlidXRl X2J1ZiB0byBlbXB0eSAqLwohIAlhdHRyaWJ1dGVfYnVmLmxlbiA9IDA7CiEgCWF0dHJpYnV0 ZV9idWYuZGF0YVswXSA9ICdcMCc7CiAgCiAgCS8qIHNldCBkZWZhdWx0IHN0YXR1cyAqLwog IAkqcmVzdWx0ID0gRU5EX09GX0xJTkU7Ci0tLSAzMTc0LDMxODMgLS0tLQogIAlpbnQJCQll bmRfY3Vyc29yOwogIAlpbnQJCQlpbnB1dF9sZW47CiAgCiEgCS8qIHJlc2V0IGF0dHJfYnVm IHRvIGVtcHR5ICovCiEgCWF0dHJfYnVmLmxlbiA9IDA7CiEgCWF0dHJfYnVmLmRhdGFbMF0g PSAnXDAnOwohIAlhdHRyX2J1Zi5jdXJzb3IgPSAwOwogIAogIAkvKiBzZXQgZGVmYXVsdCBz dGF0dXMgKi8KICAJKnJlc3VsdCA9IEVORF9PRl9MSU5FOwoqKioqKioqKioqKioqKioKKioq IDIzNzcsMjM4NyAqKioqCiAgCQkJCQkvKiBIYW5kbGUgXHgzRiAqLwogIAkJCQkJaWYgKGxp bmVfYnVmLmN1cnNvciA8IGxpbmVfYnVmLmxlbikKICAJCQkJCXsKISAJCQkJCQljaGFyIGhl eGNoYXIgPSBsaW5lX2J1Zi5kYXRhW2xpbmVfYnVmLmN1cnNvcl07CiAgCiAgCQkJCQkJaWYg KGlzeGRpZ2l0KGhleGNoYXIpKQogIAkJCQkJCXsKISAJCQkJCQkJaW50IHZhbCA9IEdldERl Y2ltYWxGcm9tSGV4KGhleGNoYXIpOwogIAogIAkJCQkJCQlsaW5lX2J1Zi5jdXJzb3IrKzsK ICAJCQkJCQkJaWYgKGxpbmVfYnVmLmN1cnNvciA8IGxpbmVfYnVmLmxlbikKLS0tIDMyMzgs MzI0OCAtLS0tCiAgCQkJCQkvKiBIYW5kbGUgXHgzRiAqLwogIAkJCQkJaWYgKGxpbmVfYnVm LmN1cnNvciA8IGxpbmVfYnVmLmxlbikKICAJCQkJCXsKISAJCQkJCQljaGFyCQloZXhjaGFy ID0gbGluZV9idWYuZGF0YVtsaW5lX2J1Zi5jdXJzb3JdOwogIAogIAkJCQkJCWlmIChpc3hk aWdpdChoZXhjaGFyKSkKICAJCQkJCQl7CiEgCQkJCQkJCWludAkJCXZhbCA9IEdldERlY2lt YWxGcm9tSGV4KGhleGNoYXIpOwogIAogIAkJCQkJCQlsaW5lX2J1Zi5jdXJzb3IrKzsKICAJ CQkJCQkJaWYgKGxpbmVfYnVmLmN1cnNvciA8IGxpbmVfYnVmLmxlbikKKioqKioqKioqKioq KioqCioqKiAyNDIyLDI0MjggKioqKgogIAkJCQkJICovCiAgCQkJfQogIAkJfQohIAkJYXBw ZW5kU3RyaW5nSW5mb0NoYXJNYWNybygmYXR0cmlidXRlX2J1ZiwgYyk7CiAgCX0KICAKICAJ LyogY2hlY2sgd2hldGhlciByYXcgaW5wdXQgbWF0Y2hlZCBudWxsIG1hcmtlciAqLwotLS0g MzI4MywzMjg5IC0tLS0KICAJCQkJCSAqLwogIAkJCX0KICAJCX0KISAJCWFwcGVuZFN0cmlu Z0luZm9DaGFyTWFjcm8oJmF0dHJfYnVmLCBjKTsKICAJfQogIAogIAkvKiBjaGVjayB3aGV0 aGVyIHJhdyBpbnB1dCBtYXRjaGVkIG51bGwgbWFya2VyICovCioqKioqKioqKioqKioqKgoq KiogMjQzMywyNDM5ICoqKioKICAJZWxzZQogIAkJKmlzbnVsbCA9IGZhbHNlOwogIAohIAly ZXR1cm4gYXR0cmlidXRlX2J1Zi5kYXRhOwogIH0KICAKICAKLS0tIDMyOTQsMzY2MiAtLS0t CiAgCWVsc2UKICAJCSppc251bGwgPSBmYWxzZTsKICAKISAJcmV0dXJuIGF0dHJfYnVmLmRh dGE7CiEgfQohIAohIC8qCiEgICogUmVhZCB0aGUgZmlyc3QgYXR0cmlidXRlLiBUaGlzIGlz IG1haW5seSB1c2VkIHRvIG1haW50YWluIHN1cHBvcnQKISAgKiBmb3IgYW4gT0lEIGNvbHVt bi4gQWxsIHRoZSByZXN0IG9mIHRoZSBjb2x1bW5zIHdpbGwgYmUgcmVhZCBhdCBvbmNlIHdp dGgKISAgKiBDb3B5UmVhZEFsbEF0dHJzKCkuCiEgICovCiEgc3RhdGljIGNoYXIgKgohIENv cHlSZWFkT2lkQXR0cihjb25zdCBjaGFyICpkZWxpbSwgY29uc3QgY2hhciAqbnVsbF9wcmlu dCwgaW50IG51bGxfcHJpbnRfbGVuLAohIAkJCQlDb3B5UmVhZFJlc3VsdCAqcmVzdWx0LCBi b29sICppc251bGwpCiEgewohIAljaGFyCQlkZWxpbWMgPSBkZWxpbVswXTsKISAJY2hhcgkg ICAqc3RhcnRfbG9jID0gbGluZV9idWYuZGF0YSArIGxpbmVfYnVmLmN1cnNvcjsKISAJY2hh cgkgICAqZW5kX2xvYzsKISAJaW50CQkJYXR0cl9sZW4gPSAwOwohIAlpbnQJCQlieXRlc19y ZW1haW5pbmc7CiEgCiEgCS8qIHJlc2V0IGF0dHJpYnV0ZSBidWYgdG8gZW1wdHkgKi8KISAJ YXR0cl9idWYubGVuID0gMDsKISAJYXR0cl9idWYuZGF0YVswXSA9ICdcMCc7CiEgCWF0dHJf YnVmLmN1cnNvciA9IDA7CiEgCiEgCS8qIHNldCBkZWZhdWx0IHN0YXR1cyAqLwohIAkqcmVz dWx0ID0gRU5EX09GX0xJTkU7CiEgCiEgCS8qICMgb2YgYnl0ZXMgdGhhdCB3ZXJlIG5vdCB5 ZXQgcHJvY2Vzc2VkIGluIHRoaXMgbGluZSAqLwohIAlieXRlc19yZW1haW5pbmcgPSBsaW5l X2J1Zi5sZW4gLSBsaW5lX2J1Zi5jdXJzb3I7CiEgCiEgCS8qIGdvdCB0byBlbmQgb2YgbGlu ZSAqLwohIAlpZiAoKGVuZF9sb2MgPSBzdHJjaHJsZW4oc3RhcnRfbG9jLCBkZWxpbWMsIGJ5 dGVzX3JlbWFpbmluZykpID09IE5VTEwpCiEgCXsKISAJCWF0dHJfbGVuID0gYnl0ZXNfcmVt YWluaW5nIC0gMTsgLyogZG9uJ3QgY291bnQgJ1xuJyBpbiBsZW4gY2FsY3VsYXRpb24gKi8K ISAJCWFwcGVuZEJpbmFyeVN0cmluZ0luZm8oJmF0dHJfYnVmLCBzdGFydF9sb2MsIGF0dHJf bGVuKTsKISAJCWxpbmVfYnVmLmN1cnNvciArPSBhdHRyX2xlbiArIDI7CQkvKiBza2lwICdc bicgYW5kICdcMCcgKi8KISAKISAJCSpyZXN1bHQgPSBFTkRfT0ZfTElORTsKISAJfQohIAll bHNlCiEgCQkvKiBmb3VuZCBhIGRlbGltaXRlciAqLwohIAl7CiEgCQkvKgohIAkJICogKHdl IGRvbid0IGNhcmUgaWYgZGVsaW0gd2FzIHByZWNlZGVkIHdpdGggYSBiYWNrc2xhc2gsIGJl Y2F1c2UgaXQncwohIAkJICogYW4gaW52YWxpZCBPSUQgYW55d2F5KQohIAkJICovCiEgCiEg CQlhdHRyX2xlbiA9IGVuZF9sb2MgLSBzdGFydF9sb2M7IC8qIHdlIGRvbid0IGluY2x1ZGUg dGhlIGRlbGltaXRlciBjaCAqLwohIAohIAkJYXBwZW5kQmluYXJ5U3RyaW5nSW5mbygmYXR0 cl9idWYsIHN0YXJ0X2xvYywgYXR0cl9sZW4pOwohIAkJbGluZV9idWYuY3Vyc29yICs9IGF0 dHJfbGVuICsgMTsKISAKISAJCSpyZXN1bHQgPSBOT1JNQUxfQVRUUjsKISAJfQohIAohIAoh IAkvKiBjaGVjayB3aGV0aGVyIHJhdyBpbnB1dCBtYXRjaGVkIG51bGwgbWFya2VyICovCiEg CWlmIChhdHRyX2xlbiA9PSBudWxsX3ByaW50X2xlbiAmJiBzdHJuY21wKHN0YXJ0X2xvYywg bnVsbF9wcmludCwgYXR0cl9sZW4pID09IDApCiEgCQkqaXNudWxsID0gdHJ1ZTsKISAJZWxz ZQohIAkJKmlzbnVsbCA9IGZhbHNlOwohIAohIAlyZXR1cm4gYXR0cl9idWYuZGF0YTsKISB9 CiEgCiEgCiEgLyoKISAgKiBSZWFkIGFsbCBhdHRyaWJ1dGVzLiBBdHRyaWJ1dGVzIGFyZSBw YXJzZWQgZnJvbSBsaW5lX2J1ZiBhbmQKISAgKiBpbnNlcnRlZCAoYWxsIGF0IG9uY2UpIHRv IGF0dHJfYnVmLCB3aGlsZSBzYXZpbmcgcG9pbnRlcnMgdG8KISAgKiBlYWNoIGF0dHJpYnV0 ZSdzIHN0YXJ0aW5nIHBvc2l0aW9uLgohICAqCiEgICogV2hlbiB0aGlzIHJvdXRpbmUgZmlu aXNoZXMgZXhlY3V0aW9uIGJvdGggdGhlIG51bGxzIGFycmF5IGFuZAohICAqIHRoZSBhdHRy X29mZnNldHMgYXJyYXkgYXJlIHVwZGF0ZWQuIFRoZSBhdHRyX29mZnNldHMgd2lsbCBpbmNs dWRlCiEgICogdGhlIG9mZnNldCBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGF0dHJpYnV0 ZSBhcnJheSBvZiB3aGljaAohICAqIGVhY2ggYXR0cmlidXRlIGJlZ2lucy4gSWYgYSBzcGVj aWZpYyBhdHRyaWJ1dGUgaXMgbm90IHVzZWQgZm9yIHRoaXMKISAgKiBDT1BZIGNvbW1hbmQg KG9tbWl0dGVkIGZyb20gdGhlIGNvbHVtbiBsaXN0KSwgYSB2YWx1ZSBvZiAwIHdpbGwgYmUg YXNzaWduZWQuCiEgICogRm9yIGV4YW1wbGU6IGZvciB0YWJsZSBmb28oYSxiLGMsZCxlKSBh bmQgQ09QWSBmb28oYSxiLGUpCiEgICogYXR0cl9vZmZzZXRzIG1heSBsb29rIHNvbWV0aGlu ZyBsaWtlIHRoaXMgYWZ0ZXIgdGhpcyByb3V0aW5lCiEgICogcmV0dXJuczogWzAsMjAsMCww LDU1XS4gVGhhdCBtZWFucyB0aGF0IGNvbHVtbiAiYSIgdmFsdWUgc3RhcnRzCiEgICogYXQg Ynl0ZSBvZmZzZXQgMCwgImIiIGluIDIwIGFuZCAiZSIgaW4gNTUsIGluIGF0dHJfYnVmLgoh ICAqCiEgICogSW4gdGhlIGF0dHJpYnV0ZSBidWZmZXIgKGF0dHJfYnVmKSBlYWNoIGF0dHJp YnV0ZQohICAqIGlzIHRlcm1pbmF0ZWQgd2l0aCBhICdcMCcsIGFuZCB0aGVyZWZvcmUgYnkg dXNpbmcgdGhlIGF0dHJfb2Zmc2V0cwohICAqIGFycmF5IHdlIGNvdWxkIHBvaW50IHRvIGEg YmVnaW5uaW5nIG9mIGFuIGF0dHJpYnV0ZSBhbmQgaGF2ZSBpdAohICAqIGJlaGF2ZSBhcyBh IEMgc3RyaW5nLCBtdWNoIGxpa2UgcHJldmlvdXNseSBkb25lIGluIENPUFkuCiEgICoKISAg KiBBbm90aGVyIGFzcGVjdCB0byBpbXByb3ZpbmcgcGVyZm9ybWFuY2UgaXMgcmVkdWNpbmcg dGhlIGZyZXF1ZW5jeQohICAqIG9mIGRhdGEgbG9hZCBpbnRvIGJ1ZmZlcnMuIFRoZSBvcmln aW5hbCBDT1BZIHJlYWQgYXR0cmlidXRlIGNvZGUKISAgKiBsb2FkZWQgYSBjaGFyYWN0ZXIg YXQgYSB0aW1lLiBJbiBoZXJlIHdlIHRyeSB0byBsb2FkIGEgY2h1bmsgb2YgZGF0YQohICAq IGF0IGEgdGltZS4gVXN1YWxseSBhIGNodW5rIHdpbGwgaW5jbHVkZSBhIGZ1bGwgZGF0YSBy b3cKISAgKiAodW5sZXNzIHdlIGhhdmUgYW4gZXNjYXBlZCBkZWxpbSkuIFRoYXQgZWZmZWN0 aXZlbHkgcmVkdWNlcyB0aGUgbnVtYmVyIG9mCiEgICogbG9hZHMgYnkgYSBmYWN0b3Igb2Yg bnVtYmVyIG9mIGJ5dGVzIHBlciByb3cuIFRoaXMgaW1wcm92ZXMgcGVyZm9ybWFuY2UKISAg KiBncmVhdGx5LCB1bmZvcnR1bmF0ZWx5IGl0IGFkZCBtb3JlIGNvbXBsZXhpdHkgdG8gdGhl IGNvZGUuCiEgICoKISAgKiBHbG9iYWwgcGFydGljaXBhbnRzIGluIHBhcnNpbmcgbG9naWM6 CiEgICoKISAgKiBsaW5lX2J1Zi5jdXJzb3IgLS0gYW4gb2Zmc2V0IGZyb20gYmVnaW5uaW5n IG9mIHRoZSBsaW5lIGJ1ZmZlcgohICAqIHRoYXQgaW5kaWNhdGVzIHdoZXJlIHdlIGFyZSBh Ym91dCB0byBiZWdpbiB0aGUgbmV4dCBzY2FuLiBOb3RlIHRoYXQKISAgKiBpZiB3ZSBoYXZl IFdJVEggT0lEUyB0aGlzIGN1cnNvciBpcyBhbHJlYWR5IHNoaWZ0ZWQgcGFzdCB0aGUgZmly c3QKISAgKiBPSUQgYXR0cmlidXRlLgohICAqCiEgICogYXR0cl9idWYuY3Vyc29yIC0tIGFu IG9mZnNldCBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlCiEgICogYXR0cmlidXRlIGJ1ZmZl ciB0aGF0IGluZGljYXRlcyB3aGVyZSB0aGUgY3VycmVudCBhdHRyaWJ1dGUgYmVnaW5zLgoh ICAqLwohIHN0YXRpYyB2b2lkCiEgQ29weVJlYWRBbGxBdHRycyhjb25zdCBjaGFyICpkZWxp bSwgY29uc3QgY2hhciAqbnVsbF9wcmludCwgaW50IG51bGxfcHJpbnRfbGVuLAohIAkJCQkg Y2hhciAqbnVsbHMsIExpc3QgKmF0dG51bWxpc3QsIGludCAqYXR0cl9vZmZzZXRzLAohIAkJ CQkgaW50IG51bV9waHlzX2F0dHJzLCBGb3JtX3BnX2F0dHJpYnV0ZSAqYXR0cikKISB7CiEg CWNoYXIJCWRlbGltYyA9IGRlbGltWzBdOwkJLyogZGVsaW1pdGVyIGNoYXJhY3RlciAqLwoh IAljaGFyCSAgICpzY2FuX3N0YXJ0OwkJLyogcG9pbnRlciB0byBsaW5lIGJ1ZmZlciB3aGVy ZSBzY2FuIHNob3VsZAohIAkJCQkJCQkJICogc3RhcnQuICovCiEgCWNoYXIJICAgKnNjYW5f ZW5kOwkJLyogcG9pbnRlciB0byBsaW5lIGJ1ZmZlciB3aGVyZSBjaGFyIHdhcyBmb3VuZCAq LwohIAljaGFyCQljaF9mb3VuZDsJCS8qIHRoZSBjaGFyYWN0ZXIgZm91bmQgaW4gdGhlIHNj YW4gKGRlbGltYyBvcgohIAkJCQkJCQkJICogZXNjYXBlKSAqLwohIAlpbnQJCQlhdHRyX3By ZV9sZW47CS8qIGN1cnJlbnQgYXR0ciByYXcgbGVuLCBiZWZvcmUgcHJvY2Vzc2luZwohIAkJ CQkJCQkJICogZXNjYXBlcyAqLwohIAlpbnQJCQlhdHRyX3Bvc3RfbGVuOwkvKiBjdXJyZW50 IGF0dHIgbGVuIGFmdGVyIGVzY2FwaW5nICovCiEgCWludAkJCW07CQkJCS8qIGF0dHJpYnV0 ZSBpbmRleCBiZWluZyBwYXJzZWQgKi8KISAJaW50CQkJYnl0ZXNfcmVtYWluaW5nOy8qIG51 bSBvZiBieXRlcyByZW1haW5pbmcgdG8gYmUgc2Nhbm5lZCBpbgohIAkJCQkJCQkJICogbGlu ZSBidWYgKi8KISAJaW50CQkJY2h1bmtfc3RhcnQ7CS8qIG9mZnNldCB0byBiZWdpbm5pbmcg b2YgbGluZSBjaHVuayB0byBsb2FkICovCiEgCWludAkJCWNodW5rX2xlbjsJCS8qIGxlbmd0 aCBvZiBjaHVuayBvZiBkYXRhIHRvIGxvYWQgdG8gYXR0ciBidWYgKi8KISAJaW50CQkJb2N0 X3ZhbDsJCS8qIGJ5dGUgdmFsdWUgZm9yIG9jdGFsIGVzY2FwZXMgKi8KISAJaW50CQkJYXR0 bnVtOwkJCS8qIGF0dHJpYnV0ZSBudW1iZXIgYmVpbmcgcGFyc2VkICovCiEgCUxpc3RDZWxs ICAgKmN1cjsJCQkvKiBjdXJzb3IgdG8gYXR0cmlidXRlIGxpc3QgdXNlZCBmb3IgdGhpcyBD T1BZICovCiEgCWludAkJCWF0dHJpYnV0ZTsKISAKISAJLyoKISAJICogaW5pdCB2YXJpYWJs ZXMgZm9yIGF0dHJpYnV0ZSBzY2FuCiEgCSAqLwohIAlhdHRyX2J1Zi5sZW4gPSAwOwohIAlh dHRyX2J1Zi5kYXRhWzBdID0gJ1wwJzsKISAJYXR0cl9idWYuY3Vyc29yID0gMDsKISAJLyog Y3Vyc29yIGlzIG5vdyA+IDAgaWYgd2UgY29weSBXSVRIIE9JRFMgKi8KISAJc2Nhbl9zdGFy dCA9IGxpbmVfYnVmLmRhdGEgKyBsaW5lX2J1Zi5jdXJzb3I7CiEgCWN1ciA9IGxpc3RfaGVh ZChhdHRudW1saXN0KTsKISAJYXR0bnVtID0gbGZpcnN0X2ludChjdXIpOwohIAltID0gYXR0 bnVtIC0gMTsKISAJY2h1bmtfc3RhcnQgPSBsaW5lX2J1Zi5jdXJzb3I7CiEgCWNodW5rX2xl biA9IDA7CiEgCWF0dHJfcHJlX2xlbiA9IDA7CiEgCWF0dHJfcG9zdF9sZW4gPSAwOwohIAoh IAkvKgohIAkgKiBTY2FuIHRocm91Z2ggdGhlIGxpbmUgYnVmZmVyIHRvIHJlYWQgYWxsIGF0 dHJpYnV0ZXMgZGF0YQohIAkgKi8KISAJd2hpbGUgKGxpbmVfYnVmLmN1cnNvciA8IGxpbmVf YnVmLmxlbikKISAJewohIAkJYnl0ZXNfcmVtYWluaW5nID0gbGluZV9idWYubGVuIC0gbGlu ZV9idWYuY3Vyc29yOwohIAkJY2hfZm91bmQgPSAnXDAnOwohIAohIAkJaWYgKChzY2FuX2Vu ZCA9IHN0cjJjaHJsZW4oc2Nhbl9zdGFydCwgZGVsaW1jLCBlc2NhcGVjLCBieXRlc19yZW1h aW5pbmcsICZjaF9mb3VuZCkpCiEgCQkJPT0gTlVMTCkKISAJCXsKISAJCQkvKiBHT1QgVE8g RU5EIE9GIExJTkUgQlVGRkVSICovCiEgCiEgCQkJaWYgKGN1ciA9PSBOVUxMKQohIAkJCQll cmVwb3J0KEVSUk9SLAohIAkJCQkJCShlcnJjb2RlKEVSUkNPREVfQkFEX0NPUFlfRklMRV9G T1JNQVQpLAohIAkJCQkJCSBlcnJtc2coImV4dHJhIGRhdGEgYWZ0ZXIgbGFzdCBleHBlY3Rl ZCBjb2x1bW4iKSkpOwohIAohIAkJCWF0dG51bSA9IGxmaXJzdF9pbnQoY3VyKTsKISAJCQlt ID0gYXR0bnVtIC0gMTsKISAKISAJCQkvKiBkb24ndCBjb3VudCBlb2wgY2hhcihzKSBpbiBh dHRyIGFuZCBjaHVuayBsZW4gY2FsY3VsYXRpb24gKi8KISAJCQlpZiAoZW9sX3R5cGUgPT0g RU9MX0NSTkwpCiEgCQkJewohIAkJCQlhdHRyX3ByZV9sZW4gKz0gYnl0ZXNfcmVtYWluaW5n IC0gMjsKISAJCQkJY2h1bmtfbGVuID0gbGluZV9idWYubGVuIC0gY2h1bmtfc3RhcnQgLSAy OwohIAkJCX0KISAJCQllbHNlCiEgCQkJewohIAkJCQlhdHRyX3ByZV9sZW4gKz0gYnl0ZXNf cmVtYWluaW5nIC0gMTsKISAJCQkJY2h1bmtfbGVuID0gbGluZV9idWYubGVuIC0gY2h1bmtf c3RhcnQgLSAxOwohIAkJCX0KISAKISAJCQkvKiBjaGVjayBpZiB0aGlzIGlzIGEgTlVMTCB2 YWx1ZSBvciBkYXRhIHZhbHVlIChhc3N1bWVkIE5VTEwpICovCiEgCQkJaWYgKGF0dHJfcHJl X2xlbiA9PSBudWxsX3ByaW50X2xlbgohIAkJCQkmJgohIAkJCQlzdHJuY21wKGxpbmVfYnVm LmRhdGEgKyBsaW5lX2J1Zi5sZW4gLSBhdHRyX3ByZV9sZW4gLSAxLCBudWxsX3ByaW50LCBh dHRyX3ByZV9sZW4pCiEgCQkJCT09IDApCiEgCQkJCW51bGxzW21dID0gJ24nOwohIAkJCWVs c2UKISAJCQkJbnVsbHNbbV0gPSAnICc7CiEgCiEgCQkJYXR0cl9vZmZzZXRzW21dID0gYXR0 cl9idWYuY3Vyc29yOwohIAohIAohIAkJCS8qIGxvYWQgdGhlIGxhc3QgY2h1bmssIHRoZSB3 aG9sZSBidWZmZXIgaW4gbW9zdCBjYXNlcyAqLwohIAkJCWFwcGVuZEJpbmFyeVN0cmluZ0lu Zm8oJmF0dHJfYnVmLCBsaW5lX2J1Zi5kYXRhICsgY2h1bmtfc3RhcnQsIGNodW5rX2xlbik7 CiEgCiEgCQkJbGluZV9idWYuY3Vyc29yICs9IGF0dHJfcHJlX2xlbiArIDI7CQkvKiBza2lw IGVvbCBjaGFyIGFuZAohIAkJCQkJCQkJCQkJCQkJICogJ1wwJyB0byBleGl0IGxvb3AgKi8K ISAKISAJCQlpZiAobG5leHQoY3VyKSAhPSBOVUxMKQohIAkJCXsKISAJCQkJLyoKISAJCQkJ ICogRm9yIGFuIGVtcHR5IGRhdGEgbGluZSwgdGhlIHByZXZpb3VzIENPUFkgY29kZSB3aWxs CiEgCQkJCSAqIGZhaWwgaXQgZHVyaW5nIHRoZSBjb252ZXJzaW9uIHN0YWdlLiBXZSBjYW4g ZmFpbCBpdCBoZXJlCiEgCQkJCSAqIGFscmVhZHksIGJ1dCB0aGVuIHdlIHdpbGwgZmFpbCB0 aGUgcmVncmVzc2lvbiB0ZXN0cyBiL2MKISAJCQkJICogb2YgYSBkaWZmZXJlbnQgZXJyb3Ig bWVzc2FnZS4gdGhhdCdzIHdoeSB3ZSByZXR1cm4gc28gd2UKISAJCQkJICogY2FuIGdldCB0 aGUgc2FtZSBlcnJvciBtZXNzYWdlIHRoYXQgcmVncmVzcyBleHBlY3RzLiBhaGguLi4KISAJ CQkJICogdGhpcyBjb25kaXRpb25hbCBpcyB1bm5lY2Vzc2FyeSBhbmQgc2hvdWxkIGJlIHJl bW92ZWQgc29vbi4KISAJCQkJICovCiEgCQkJCWlmIChsaW5lX2J1Zi5sZW4gPiAxKQohIAkJ CQkJZXJlcG9ydChFUlJPUiwKISAJCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9CQURfQ09QWV9G SUxFX0ZPUk1BVCksCiEgCQkJCQkJCSBlcnJtc2coIm1pc3NpbmcgZGF0YSBmb3IgY29sdW1u IFwiJXNcIiIsCiEgCQkJCQkJCQkJTmFtZVN0cihhdHRyW20gKyAxXS0+YXR0bmFtZSkpKSk7 CiEgCQkJCWVsc2UKISAJCQkJCXJldHVybjsKISAJCQl9CiEgCQl9CiEgCQllbHNlCiEgCQkJ LyogRk9VTkQgQSBERUxJTUlURVIgT1IgRVNDQVBFICovCiEgCQl7CiEgCQkJaWYgKGN1ciA9 PSBOVUxMKQohIAkJCQllcmVwb3J0KEVSUk9SLAohIAkJCQkJCShlcnJjb2RlKEVSUkNPREVf QkFEX0NPUFlfRklMRV9GT1JNQVQpLAohIAkJCQkJCSBlcnJtc2coImV4dHJhIGRhdGEgYWZ0 ZXIgbGFzdCBleHBlY3RlZCBjb2x1bW4iKSkpOwohIAohIAkJCWlmIChjaF9mb3VuZCA9PSBk ZWxpbWMpCQkvKiBmb3VuZCBhIGRlbGltaXRlciAqLwohIAkJCXsKISAJCQkJYXR0bnVtID0g bGZpcnN0X2ludChjdXIpOwohIAkJCQltID0gYXR0bnVtIC0gMTsKISAKISAJCQkJLyogKHdl IGRvbid0IGluY2x1ZGUgdGhlIGRlbGltaXRlciBjaCBpbiBsZW5ndGgpICovCiEgCQkJCWF0 dHJfcHJlX2xlbiArPSBzY2FuX2VuZCAtIHNjYW5fc3RhcnQ7CiEgCQkJCS8qICh3ZSBkb24n dCBpbmNsdWRlIHRoZSBkZWxpbWl0ZXIgY2ggaW4gbGVuZ3RoKSAqLwohIAkJCQlhdHRyX3Bv c3RfbGVuICs9IHNjYW5fZW5kIC0gc2Nhbl9zdGFydDsKISAKISAJCQkJLyogY2hlY2sgaWYg dGhpcyBpcyBhIG51bGwgcHJpbnQgb3IgZGF0YSAoYXNzdW1lZCBOVUxMKSAqLwohIAkJCQlp ZiAoYXR0cl9wcmVfbGVuID09IG51bGxfcHJpbnRfbGVuCiEgCQkJCQkmJgohIAkJCQkJc3Ry bmNtcChzY2FuX2VuZCAtIGF0dHJfcHJlX2xlbiwgbnVsbF9wcmludCwgYXR0cl9wcmVfbGVu KQohIAkJCQkJPT0gMCkKISAJCQkJCW51bGxzW21dID0gJ24nOwohIAkJCQllbHNlCiEgCQkJ CQludWxsc1ttXSA9ICcgJzsKISAKISAJCQkJLyogc2V0IHRoZSBwb2ludGVyIHRvIG5leHQg YXR0cmlidXRlIHBvc2l0aW9uICovCiEgCQkJCWF0dHJfb2Zmc2V0c1ttXSA9IGF0dHJfYnVm LmN1cnNvcjsKISAKISAJCQkJLyoKISAJCQkJICogdXBkYXRlIGJ1ZmZlciBjdXJzb3JzIHRv IG91ciBjdXJyZW50IGxvY2F0aW9uLCArMSB0byBza2lwCiEgCQkJCSAqIHRoZSBkZWxpbWMK ISAJCQkJICovCiEgCQkJCWxpbmVfYnVmLmN1cnNvciA9IHNjYW5fZW5kIC0gbGluZV9idWYu ZGF0YSArIDE7CiEgCQkJCWF0dHJfYnVmLmN1cnNvciArPSBhdHRyX3Bvc3RfbGVuICsgMTsK ISAKISAJCQkJLyogcHJlcGFyZSBzY2FuIGZvciBuZXh0IGF0dHIgKi8KISAJCQkJc2Nhbl9z dGFydCA9IGxpbmVfYnVmLmRhdGEgKyBsaW5lX2J1Zi5jdXJzb3I7CiEgCQkJCWN1ciA9IGxu ZXh0KGN1cik7CiEgCQkJCWF0dHJfcHJlX2xlbiA9IDA7CiEgCQkJCWF0dHJfcG9zdF9sZW4g PSAwOwohIAkJCX0KISAJCQllbHNlCiEgCQkJCS8qIGZvdW5kIGFuIGVzY2FwZSBjaGFyYWN0 ZXIgKi8KISAJCQl7CiEgCQkJCWNoYXIJCW5leHRjID0gKihzY2FuX2VuZCArIDEpOwohIAkJ CQljaGFyCQluZXdjOwohIAkJCQlpbnQJCQlza2lwID0gMjsKISAKISAJCQkJY2h1bmtfbGVu ID0gKHNjYW5fZW5kIC0gbGluZV9idWYuZGF0YSkgLSBjaHVua19zdGFydCArIDE7CiEgCiEg CQkJCS8qIGxvYWQgYSBjaHVuayBvZiBkYXRhICovCiEgCQkJCWFwcGVuZEJpbmFyeVN0cmlu Z0luZm8oJmF0dHJfYnVmLCBsaW5lX2J1Zi5kYXRhICsgY2h1bmtfc3RhcnQsIGNodW5rX2xl bik7CiEgCiEgCQkJCXN3aXRjaCAobmV4dGMpCiEgCQkJCXsKISAJCQkJCWNhc2UgJzAnOgoh IAkJCQkJY2FzZSAnMSc6CiEgCQkJCQljYXNlICcyJzoKISAJCQkJCWNhc2UgJzMnOgohIAkJ CQkJY2FzZSAnNCc6CiEgCQkJCQljYXNlICc1JzoKISAJCQkJCWNhc2UgJzYnOgohIAkJCQkJ Y2FzZSAnNyc6CiEgCQkJCQkJb2N0X3ZhbCA9IE9DVFZBTFVFKG5leHRjKTsKISAJCQkJCQlu ZXh0YyA9ICooc2Nhbl9lbmQgKyAyKTsKISAKISAJCQkJCQkvKgohIAkJCQkJCSAqIChubyBu ZWVkIGZvciBvdXQgYmFkIGFjY2VzcyBjaGVjayBzaW5jZSBsaW5lIGlmCiEgCQkJCQkJICog YnVmZmVyZWQpCiEgCQkJCQkJICovCiEgCQkJCQkJaWYgKElTT0NUQUwobmV4dGMpKQohIAkJ CQkJCXsKISAJCQkJCQkJc2tpcCsrOwohIAkJCQkJCQlvY3RfdmFsID0gKG9jdF92YWwgPDwg MykgKyBPQ1RWQUxVRShuZXh0Yyk7CiEgCQkJCQkJCW5leHRjID0gKihzY2FuX2VuZCArIDMp OwohIAkJCQkJCQlpZiAoSVNPQ1RBTChuZXh0YykpCiEgCQkJCQkJCXsKISAJCQkJCQkJCXNr aXArKzsKISAJCQkJCQkJCW9jdF92YWwgPSAob2N0X3ZhbCA8PCAzKSArIE9DVFZBTFVFKG5l eHRjKTsKISAJCQkJCQkJfQohIAkJCQkJCX0KISAJCQkJCQluZXdjID0gb2N0X3ZhbCAmIDAz Nzc7CS8qIHRoZSBlc2NhcGVkIGJ5dGUgdmFsdWUgKi8KISAJCQkJCQlicmVhazsKISAJCQkJ CWNhc2UgJ2InOgohIAkJCQkJCW5ld2MgPSAnXGInOwohIAkJCQkJCWJyZWFrOwohIAkJCQkJ Y2FzZSAnZic6CiEgCQkJCQkJbmV3YyA9ICdcZic7CiEgCQkJCQkJYnJlYWs7CiEgCQkJCQlj YXNlICduJzoKISAJCQkJCQluZXdjID0gJ1xuJzsKISAJCQkJCQlicmVhazsKISAJCQkJCWNh c2UgJ3InOgohIAkJCQkJCW5ld2MgPSAnXHInOwohIAkJCQkJCWJyZWFrOwohIAkJCQkJY2Fz ZSAndCc6CiEgCQkJCQkJbmV3YyA9ICdcdCc7CiEgCQkJCQkJYnJlYWs7CiEgCQkJCQljYXNl ICd2JzoKISAJCQkJCQluZXdjID0gJ1x2JzsKISAJCQkJCQlicmVhazsKISAJCQkJCWRlZmF1 bHQ6CiEgCQkJCQkJaWYgKG5leHRjID09IGRlbGltYykKISAJCQkJCQkJbmV3YyA9IGRlbGlt YzsKISAJCQkJCQllbHNlIGlmIChuZXh0YyA9PSBlc2NhcGVjKQohIAkJCQkJCQluZXdjID0g ZXNjYXBlYzsKISAJCQkJCQllbHNlCiEgCQkJCQkJCS8qIG5vIGVzY2FwZSBzZXF1ZW5jZSwg dGFrZSBuZXh0IGNoYXIgbGl0ZXJhbHkgKi8KISAJCQkJCQkJbmV3YyA9IG5leHRjOwohIAkJ CQkJCWJyZWFrOwohIAkJCQl9CiEgCiEgCQkJCS8qIHVwZGF0ZSB0byBjdXJyZW50IGxlbmd0 aCwgYWRkIGVzY2FwZSBhbmQgZXNjYXBlZCBjaGFycyAgKi8KISAJCQkJYXR0cl9wcmVfbGVu ICs9IHNjYW5fZW5kIC0gc2Nhbl9zdGFydCArIDI7CiEgCQkJCS8qIHVwZGF0ZSB0byBjdXJy ZW50IGxlbmd0aCwgZXNjYXBlZCBjaGFyICovCiEgCQkJCWF0dHJfcG9zdF9sZW4gKz0gc2Nh bl9lbmQgLSBzY2FuX3N0YXJ0ICsgMTsKISAKISAJCQkJLyoKISAJCQkJICogTmVlZCB0byBn ZXQgcmlkIG9mIHRoZSBlc2NhcGUgY2hhcmFjdGVyLiBUaGlzIGlzIGRvbmUgYnkKISAJCQkJ ICogbG9hZGluZyB0aGUgY2h1bmsgdXAgdG8gaW5jbHVkaW5nIHRoZSBlc2NhcGUgY2hhcmFj dGVyCiEgCQkJCSAqIGludG8gdGhlIGF0dHJpYnV0ZSBidWZmZXIuIFRoZW4gb3ZlcndyaXR0 aW5nIHRoZSBiYWNrc2xhc2gKISAJCQkJICogd2l0aCB0aGUgZXNjYXBlZCBzZXF1ZW5jZSBv ciBjaGFyLCBhbmQgY29udGludWluZyB0byBzY2FuCiEgCQkJCSAqIGZyb20gKmFmdGVyKiB0 aGUgY2hhciB0aGFuIGlzIGFmdGVyIHRoZSBlc2NhcGUgaW4gbGluZSBidWYuCiEgCQkJCSAq LwohIAkJCQkqKGF0dHJfYnVmLmRhdGEgKyBhdHRyX2J1Zi5sZW4gLSAxKSA9IG5ld2M7CiEg CQkJCWxpbmVfYnVmLmN1cnNvciA9IHNjYW5fZW5kIC0gbGluZV9idWYuZGF0YSArIHNraXA7 CiEgCQkJCXNjYW5fc3RhcnQgPSBzY2FuX2VuZCArIHNraXA7CiEgCQkJCWNodW5rX3N0YXJ0 ID0gbGluZV9idWYuY3Vyc29yOwohIAkJCQljaHVua19sZW4gPSAwOwohIAkJCX0KISAKISAJ CX0JCQkJCQkvKiBlbmQgZGVsaW1pdGVyL2JhY2tzbGFzaCAqLwohIAohIAl9CQkJCQkJCS8q IGVuZCBsaW5lIGJ1ZmZlciBzY2FuLiAqLwohIAohIAkvKgohIAkgKiBSZXBsYWNlIGFsbCBk ZWxpbWl0ZXJzIHdpdGggTlVMTCBmb3Igc3RyaW5nIHRlcm1pbmF0aW9uLgohIAkgKiBOT1RF OiBvbmx5IGRlbGltaXRlcnMgKE5PVCBuZWNlc3NhcmlseSBhbGwgZGVsaW1jKSBhcmUgcmVw bGFjZWQuCiEgCSAqIEV4YW1wbGUgKGRlbGltYyA9ICd8Jyk6CiEgCSAqIC0gQmVmb3JlOiAg ZiAgMQl8ICBmICBcfCAgMiAgfAlmICAzCiEgCSAqIC0gQWZ0ZXIgOiAgZiAgMSBcMCAgZiAg IHwgIDIgXDAJZiAgMwohIAkgKi8KISAJZm9yIChhdHRyaWJ1dGUgPSAxOyBhdHRyaWJ1dGUg PCBudW1fcGh5c19hdHRyczsgYXR0cmlidXRlKyspCiEgCXsKISAJCWlmIChhdHRyX29mZnNl dHNbYXR0cmlidXRlXSAhPSAwKQohIAkJCSooYXR0cl9idWYuZGF0YSArIGF0dHJfb2Zmc2V0 c1thdHRyaWJ1dGVdIC0gMSkgPSAnXDAnOwohIAl9CiEgCiAgfQogIAogIAoqKioqKioqKioq KioqKioKKioqIDI0NzcsMjQ4NSAqKioqCiAgCWJvb2wJCWluX3F1b3RlID0gZmFsc2U7CiAg CWJvb2wJCXNhd19xdW90ZSA9IGZhbHNlOwogIAohIAkvKiByZXNldCBhdHRyaWJ1dGVfYnVm IHRvIGVtcHR5ICovCiEgCWF0dHJpYnV0ZV9idWYubGVuID0gMDsKISAJYXR0cmlidXRlX2J1 Zi5kYXRhWzBdID0gJ1wwJzsKICAKICAJLyogc2V0IGRlZmF1bHQgc3RhdHVzICovCiAgCSpy ZXN1bHQgPSBFTkRfT0ZfTElORTsKLS0tIDM3MDAsMzcwOSAtLS0tCiAgCWJvb2wJCWluX3F1 b3RlID0gZmFsc2U7CiAgCWJvb2wJCXNhd19xdW90ZSA9IGZhbHNlOwogIAohIAkvKiByZXNl dCBhdHRyX2J1ZiB0byBlbXB0eSAqLwohIAlhdHRyX2J1Zi5sZW4gPSAwOwohIAlhdHRyX2J1 Zi5kYXRhWzBdID0gJ1wwJzsKISAJYXR0cl9idWYuY3Vyc29yID0gMDsKICAKICAJLyogc2V0 IGRlZmF1bHQgc3RhdHVzICovCiAgCSpyZXN1bHQgPSBFTkRfT0ZfTElORTsKKioqKioqKioq KioqKioqCioqKiAyNTE5LDI1MjUgKioqKgogIAogIAkJCQlpZiAobmV4dGMgPT0gZXNjYXBl YyB8fCBuZXh0YyA9PSBxdW90ZWMpCiAgCQkJCXsKISAJCQkJCWFwcGVuZFN0cmluZ0luZm9D aGFyTWFjcm8oJmF0dHJpYnV0ZV9idWYsIG5leHRjKTsKICAJCQkJCWxpbmVfYnVmLmN1cnNv cisrOwogIAkJCQkJY29udGludWU7CiAgCQkJCX0KLS0tIDM3NDMsMzc0OSAtLS0tCiAgCiAg CQkJCWlmIChuZXh0YyA9PSBlc2NhcGVjIHx8IG5leHRjID09IHF1b3RlYykKICAJCQkJewoh IAkJCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXJNYWNybygmYXR0cl9idWYsIG5leHRjKTsKICAJ CQkJCWxpbmVfYnVmLmN1cnNvcisrOwogIAkJCQkJY29udGludWU7CiAgCQkJCX0KKioqKioq KioqKioqKioqCioqKiAyNTM2LDI1NDIgKioqKgogIAkJCWluX3F1b3RlID0gZmFsc2U7CiAg CQkJY29udGludWU7CiAgCQl9CiEgCQlhcHBlbmRTdHJpbmdJbmZvQ2hhck1hY3JvKCZhdHRy aWJ1dGVfYnVmLCBjKTsKICAJfQogIAogIAlpZiAoaW5fcXVvdGUpCi0tLSAzNzYwLDM3NjYg LS0tLQogIAkJCWluX3F1b3RlID0gZmFsc2U7CiAgCQkJY29udGludWU7CiAgCQl9CiEgCQlh cHBlbmRTdHJpbmdJbmZvQ2hhck1hY3JvKCZhdHRyX2J1ZiwgYyk7CiAgCX0KICAKICAJaWYg KGluX3F1b3RlKQoqKioqKioqKioqKioqKioKKioqIDI1NTAsMjU1NiAqKioqCiAgCWVsc2UK ICAJCSppc251bGwgPSBmYWxzZTsKICAKISAJcmV0dXJuIGF0dHJpYnV0ZV9idWYuZGF0YTsK ICB9CiAgCiAgLyoKLS0tIDM3NzQsMzc4MCAtLS0tCiAgCWVsc2UKICAJCSppc251bGwgPSBm YWxzZTsKICAKISAJcmV0dXJuIGF0dHJfYnVmLmRhdGE7CiAgfQogIAogIC8qCioqKioqKioq KioqKioqKgoqKiogMjU3OCwyNjA2ICoqKioKICAJCQkJKGVycmNvZGUoRVJSQ09ERV9CQURf Q09QWV9GSUxFX0ZPUk1BVCksCiAgCQkJCSBlcnJtc2coImludmFsaWQgZmllbGQgc2l6ZSIp KSk7CiAgCiEgCS8qIHJlc2V0IGF0dHJpYnV0ZV9idWYgdG8gZW1wdHksIGFuZCBsb2FkIHJh dyBkYXRhIGluIGl0ICovCiEgCWF0dHJpYnV0ZV9idWYubGVuID0gMDsKISAJYXR0cmlidXRl X2J1Zi5kYXRhWzBdID0gJ1wwJzsKISAJYXR0cmlidXRlX2J1Zi5jdXJzb3IgPSAwOwogIAoh IAllbmxhcmdlU3RyaW5nSW5mbygmYXR0cmlidXRlX2J1ZiwgZmxkX3NpemUpOwogIAohIAlD b3B5R2V0RGF0YShhdHRyaWJ1dGVfYnVmLmRhdGEsIGZsZF9zaXplKTsKICAJaWYgKENvcHlH ZXRFb2YoKSkKICAJCWVyZXBvcnQoRVJST1IsCiAgCQkJCShlcnJjb2RlKEVSUkNPREVfQkFE X0NPUFlfRklMRV9GT1JNQVQpLAogIAkJCQkgZXJybXNnKCJ1bmV4cGVjdGVkIEVPRiBpbiBD T1BZIGRhdGEiKSkpOwogIAohIAlhdHRyaWJ1dGVfYnVmLmxlbiA9IGZsZF9zaXplOwohIAlh dHRyaWJ1dGVfYnVmLmRhdGFbZmxkX3NpemVdID0gJ1wwJzsKICAKICAJLyogQ2FsbCB0aGUg Y29sdW1uIHR5cGUncyBiaW5hcnkgaW5wdXQgY29udmVydGVyICovCiAgCXJlc3VsdCA9IEZ1 bmN0aW9uQ2FsbDIoZmxpbmZvLAohIAkJCQkJCSAgIFBvaW50ZXJHZXREYXR1bSgmYXR0cmli dXRlX2J1ZiksCiAgCQkJCQkJICAgT2JqZWN0SWRHZXREYXR1bSh0eXBpb3BhcmFtKSk7CiAg CiAgCS8qIFRyb3VibGUgaWYgaXQgZGlkbid0IGVhdCB0aGUgd2hvbGUgYnVmZmVyICovCiEg CWlmIChhdHRyaWJ1dGVfYnVmLmN1cnNvciAhPSBhdHRyaWJ1dGVfYnVmLmxlbikKICAJCWVy ZXBvcnQoRVJST1IsCiAgCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9CSU5BUllfUkVQ UkVTRU5UQVRJT04pLAogIAkJCQkgZXJybXNnKCJpbmNvcnJlY3QgYmluYXJ5IGRhdGEgZm9y bWF0IikpKTsKLS0tIDM4MDIsMzgzMCAtLS0tCiAgCQkJCShlcnJjb2RlKEVSUkNPREVfQkFE X0NPUFlfRklMRV9GT1JNQVQpLAogIAkJCQkgZXJybXNnKCJpbnZhbGlkIGZpZWxkIHNpemUi KSkpOwogIAohIAkvKiByZXNldCBhdHRyX2J1ZiB0byBlbXB0eSwgYW5kIGxvYWQgcmF3IGRh dGEgaW4gaXQgKi8KISAJYXR0cl9idWYubGVuID0gMDsKISAJYXR0cl9idWYuZGF0YVswXSA9 ICdcMCc7CiEgCWF0dHJfYnVmLmN1cnNvciA9IDA7CiAgCiEgCWVubGFyZ2VTdHJpbmdJbmZv KCZhdHRyX2J1ZiwgZmxkX3NpemUpOwogIAohIAlDb3B5R2V0RGF0YShhdHRyX2J1Zi5kYXRh LCBmbGRfc2l6ZSk7CiAgCWlmIChDb3B5R2V0RW9mKCkpCiAgCQllcmVwb3J0KEVSUk9SLAog IAkJCQkoZXJyY29kZShFUlJDT0RFX0JBRF9DT1BZX0ZJTEVfRk9STUFUKSwKICAJCQkJIGVy cm1zZygidW5leHBlY3RlZCBFT0YgaW4gQ09QWSBkYXRhIikpKTsKICAKISAJYXR0cl9idWYu bGVuID0gZmxkX3NpemU7CiEgCWF0dHJfYnVmLmRhdGFbZmxkX3NpemVdID0gJ1wwJzsKICAK ICAJLyogQ2FsbCB0aGUgY29sdW1uIHR5cGUncyBiaW5hcnkgaW5wdXQgY29udmVydGVyICov CiAgCXJlc3VsdCA9IEZ1bmN0aW9uQ2FsbDIoZmxpbmZvLAohIAkJCQkJCSAgIFBvaW50ZXJH ZXREYXR1bSgmYXR0cl9idWYpLAogIAkJCQkJCSAgIE9iamVjdElkR2V0RGF0dW0odHlwaW9w YXJhbSkpOwogIAogIAkvKiBUcm91YmxlIGlmIGl0IGRpZG4ndCBlYXQgdGhlIHdob2xlIGJ1 ZmZlciAqLwohIAlpZiAoYXR0cl9idWYuY3Vyc29yICE9IGF0dHJfYnVmLmxlbikKICAJCWVy ZXBvcnQoRVJST1IsCiAgCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9CSU5BUllfUkVQ UkVTRU5UQVRJT04pLAogIAkJCQkgZXJybXNnKCJpbmNvcnJlY3QgYmluYXJ5IGRhdGEgZm9y bWF0IikpKTsKKioqKioqKioqKioqKioqCioqKiAyNzk3LDI3OTkgKioqKgotLS0gNDAyMSw0 MDg2IC0tLS0KICAKICAJcmV0dXJuIGF0dG51bXM7CiAgfQorIAorIC8qKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgKiB1dGlsaXR5 IGZ1bmN0aW9ucywgc2hvdWxkIGJlIHBsYWNlZCBlbHNld2hlcmUgaW4gc3JjCisgICoqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAv KgorICAqIFRoZXNlIGFyZSBjdXN0b20gdmVyc2lvbnMgb2YgdGhlIHN0cmluZyBmdW5jdGlv biBzdHJjaHIoKS4KKyAgKiBBcyBvcHBvc2VkIHRvIHRoZSBvcmlnaW5hbCBzdHJjaHIgd2hp Y2ggc2VhcmNoZXMgdGhyb3VnaAorICAqIGEgc3RyaW5nIHVudGlsIHRoZSB0YXJnZXQgY2hh cmFjdGVyIGlzIGZvdW5kLCBvciBhIE5VTEwgaXMKKyAgKiBmb3VuZCwgdGhpcyB2ZXJzaW9u IHdpbGwgbm90IHJldHVybiB3aGVuIGEgTlVMTCBpcyBmb3VuZC4KKyAgKiBJbnN0ZWFkIGl0 IHdpbGwgc2VhcmNoIHRocm91Z2ggYSBwcmUtZGVmaW5lZCBsZW5ndGggb2YKKyAgKiBieXRl cyBhbmQgd2lsbCByZXR1cm4gb25seSBpZiB0aGUgdGFyZ2V0IGNoYXJhY3RlcihzKSBpcyBy ZWFjaGVkLgorICAqCisgICogSWYgb3VyIGNsaWVudCBlbmNvZGluZyBpcyBub3QgYSBzdXBw b3J0ZWQgc2VydmVyIGVuY29kaW5nLCB3ZQorICAqIGtub3cgdGhhdCBpdCBpcyBub3Qgc2Fm ZSB0byBsb29rIGF0IGVhY2ggY2hhcmFjdGVyIGFzIHRyYWlsaW5nCisgICogYnl0ZSBpbiBh IG11bHRpYnl0ZSBjaGFyYWN0ZXIgbWF5IGJlIGEgNy1iaXQgQVNDSUkgZXF1aXZhbGVudC4K KyAgKiBUaGVyZWZvcmUgd2UgdXNlIHBnX2VuY29kaW5nX21ibGVuIHRvIHNraXAgdG8gdGhl IGVuZCBvZiB0aGUKKyAgKiBjaGFyYWN0ZXIuCisgICoKKyAgKiBwYXJhbWV0ZXJzOgorICAq CSBzCSAgLSBzdHJpbmcgYmVpbmcgc2VhcmNoZWQuCisgICoJIGMobikgLSBjaGFyIHdlIGFy ZSBzZWFyY2hpbmcgZm9yLgorICAqCSBsZW4gIC0gbWF4aW11bSAjIG9mIGJ5dGVzIHRvIHNl YXJjaC4KKyAgKgorICAqIHJldHVybnM6CisgICoJIHBvaW50ZXIgdG8gYyAtIGlmIGMgaXMg bG9jYXRlZCB3aXRoaW4gdGhlIHN0cmluZy4KKyAgKgkgTlVMTCAtIGlmIGMgd2FzIG5vdCBm b3VuZCBpbiBzcGVjaWZpZWQgbGVuZ3RoIG9mIHNlYXJjaC4gTm90ZToKKyAgKgkJCXRoaXMg RE9FU04nVCBtZWFuIHRoYXQgYSAnXDAnIHdhcyByZWFjaGVkLgorICAqLworIGNoYXIgKgor IHN0cmNocmxlbihjb25zdCBjaGFyICpzLCBpbnQgYywgc2l6ZV90IGxlbikKKyB7CisgCWNv bnN0IGNoYXIgKnN0YXJ0OworIAorIAlpZiAoY2xpZW50X2VuY29kaW5nX29ubHkpCisgCXsK KyAJCWludAkJCW1ibGVuID0gcGdfZW5jb2RpbmdfbWJsZW4oY2xpZW50X2VuY29kaW5nLCBz KTsKKyAKKyAJCWZvciAoc3RhcnQgPSBzOyAqcyAhPSBjICYmIHMgPCBzdGFydCArIGxlbjsg cyArPSBtYmxlbikKKyAJCQltYmxlbiA9IHBnX2VuY29kaW5nX21ibGVuKGNsaWVudF9lbmNv ZGluZywgcyk7CisgCX0KKyAJZWxzZQorIAkJLyogc2FmZSB0byBzY3JvbGwgYnl0ZSBieSBi eXRlICovCisgCXsKKyAJCWZvciAoc3RhcnQgPSBzOyAqcyAhPSBjICYmIHMgPCBzdGFydCAr IGxlbjsgcysrKQorIAkJCTsKKyAJfQorIAorIAlyZXR1cm4gKCgqcyA9PSBjKSA/IChjaGFy ICopIHMgOiBOVUxMKTsKKyB9CisgCisgY2hhciAqCisgc3RyMmNocmxlbihjb25zdCBjaGFy ICpzLCBpbnQgYzEsIGludCBjMiwgc2l6ZV90IGxlbiwgY2hhciAqY19mb3VuZCkKKyB7Cisg CWNvbnN0IGNoYXIgKnN0YXJ0OworIAorIAkqY19mb3VuZCA9ICdcMCc7CisgCisgCWZvciAo c3RhcnQgPSBzOyAqcyAhPSBjMSAmJiAqcyAhPSBjMiAmJiBzIDwgc3RhcnQgKyBsZW47IHMr KykKKyAJCTsKKyAKKyAJKmNfZm91bmQgPSAqczsKKyAJcmV0dXJuICgqY19mb3VuZCAhPSAn XDAnID8gKGNoYXIgKikgcyA6IE5VTEwpOworIH0K --B_3202753503_1429494 Content-Type: application/octet-stream; name=pgindent-81.patch Content-Disposition: attachment; filename=pgindent-81.patch Content-Transfer-Encoding: base64 SW5kZXg6IHNyYy90b29scy9wZ2luZGVudC9wZ2luZGVudAo9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBm aWxlOiAvcHJvamVjdHMvY3Zzcm9vdC9wZ3NxbC9zcmMvdG9vbHMvcGdpbmRlbnQvcGdpbmRl bnQsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNzMKZGlmZiAtYyAtcjEuNzMgcGdpbmRlbnQK KioqIHNyYy90b29scy9wZ2luZGVudC9wZ2luZGVudAk3IE9jdCAyMDA0IDE0OjE1OjUwIC0w MDAwCTEuNzMKLS0tIHNyYy90b29scy9wZ2luZGVudC9wZ2luZGVudAkyOCBKdW4gMjAwNSAw NDo0Mzo0OCAtMDAwMAoqKioqKioqKioqKioqKioKKioqIDU2LDYyICoqKioKICAJCQkgICAg bGluZTEgIX4gIl50eXBlZGVmIiAmJgogIAkJCSAgICBsaW5lMSAhfiAiXmV4dGVyblsgCV1b IAldKlwiQ1wiIiAmJgogIAkJCSAgICBsaW5lMSAhfiAiPSIgJiYKISAJCQkgICAgbGluZTEg fiAiXCkiKQogIAkJCQlwcmludCAiaW50CXBnaW5kZW50X2Z1bmNfbm9fdmFyX2ZpeDsiOwog IAkJCWxpbmUxID0gbGluZTI7CiAgCQl9Ci0tLSA1Niw2MiAtLS0tCiAgCQkJICAgIGxpbmUx ICF+ICJedHlwZWRlZiIgJiYKICAJCQkgICAgbGluZTEgIX4gIl5leHRlcm5bIAldWyAJXSpc IkNcIiIgJiYKICAJCQkgICAgbGluZTEgIX4gIj0iICYmCiEgCQkJICAgIGxpbmUxIH4gIiki KQogIAkJCQlwcmludCAiaW50CXBnaW5kZW50X2Z1bmNfbm9fdmFyX2ZpeDsiOwogIAkJCWxp bmUxID0gbGluZTI7CiAgCQl9CioqKioqKioqKioqKioqKgoqKiogMTA2LDE0NSAqKioqCiAg IyBXZSBnZXQgdGhlIGxpc3Qgb2YgdHlwZWRlZidzIGZyb20gL3NyYy90b29scy9maW5kX3R5 cGVkZWYKICAJaW5kZW50IC1iYWQgLWJhcCAtYmMgLWJsIC1kMCAtY2RiIC1uY2UgLW5mYzEg LWRpMTIgLWk0IC1sNzkgXAogIAkJLWxwIC1uaXAgLW5wcm8gLWJiYiAkRVhUUkFfT1BUUyBc Ci0gLVRBRVNfS0VZIFwKLSAtVEFNVCBcCi0gLVRBTVRTIFwKLSAtVEFTTjFfQklUX1NUUklO RyBcCi0gLVRBU04xX0JNUFNUUklORyBcCi0gLVRBU04xX0JPT0xFQU4gXAotIC1UQVNOMV9D VFggXAotIC1UQVNOMV9FTkNPRElORyBcCi0gLVRBU04xX0VOVU1FUkFURUQgXAotIC1UQVNO MV9HRU5FUkFMSVpFRFRJTUUgXAotIC1UQVNOMV9HRU5FUkFMU1RSSU5HIFwKLSAtVEFTTjFf SEVBREVSIFwKLSAtVEFTTjFfSUE1U1RSSU5HIFwKLSAtVEFTTjFfSU5URUdFUiBcCi0gLVRB U04xX0lURU0gXAotIC1UQVNOMV9JVEVNX0VYUCBcCi0gLVRBU04xX01FVEhPRCBcCi0gLVRB U04xX05VTEwgXAotIC1UQVNOMV9PQkpFQ1QgXAotIC1UQVNOMV9PQ1RFVF9TVFJJTkcgXAot IC1UQVNOMV9QUklOVEFCTEVTVFJJTkcgXAotIC1UQVNOMV9TVFJJTkcgXAotIC1UQVNOMV9T VFJJTkdfVEFCTEUgXAotIC1UQVNOMV9UNjFTVFJJTkcgXAotIC1UQVNOMV9URU1QTEFURSBc Ci0gLVRBU04xX1RJTUUgXAotIC1UQVNOMV9UTEMgXAotIC1UQVNOMV9UWVBFIFwKLSAtVEFT TjFfVU5JVkVSU0FMU1RSSU5HIFwKLSAtVEFTTjFfVVRDVElNRSBcCi0gLVRBU04xX1VURjhT VFJJTkcgXAotIC1UQVNOMV9WQUxVRSBcCi0gLVRBU04xX1ZJU0lCTEVTVFJJTkcgXAotIC1U QVYgXAogIC1UQV9Db25zdCBcCiAgLVRBX0V4cHIgXAogIC1UQV9FeHByX0tpbmQgXAotLS0g MTA2LDExMSAtLS0tCioqKioqKioqKioqKioqKgoqKiogMTUzLDE3NSAqKioqCiAgLVRBY2xN b2RlIFwKICAtVEFjbE9iamVjdEtpbmQgXAogIC1UQWNsUmVzdWx0IFwKICAtVEFnZyBcCiEg LVRBZ2dIYXNoRW50cnkgXAohIC1UQWdnSGFzaEVudHJ5RGF0YSBcCiAgLVRBZ2dJbmZvIFwK ICAtVEFnZ1N0YXRlIFwKICAtVEFnZ1N0YXRlUGVyQWdnIFwKLSAtVEFnZ1N0YXRlUGVyQWdn RGF0YSBcCiAgLVRBZ2dTdGF0ZVBlckdyb3VwIFwKLSAtVEFnZ1N0YXRlUGVyR3JvdXBEYXRh IFwKICAtVEFnZ1N0cmF0ZWd5IFwKICAtVEFnZ3JlZiBcCiAgLVRBZ2dyZWZFeHByU3RhdGUg XAogIC1UQWxpYXMgXAogIC1UQWxsb2NCbG9jayBcCi0gLVRBbGxvY0Jsb2NrRGF0YSBcCiAg LVRBbGxvY0NodW5rIFwKLSAtVEFsbG9jQ2h1bmtEYXRhIFwKICAtVEFsbG9jUG9pbnRlciBc CiAgLVRBbGxvY1NldCBcCiAgLVRBbGxvY1NldENvbnRleHQgXAotLS0gMTE5LDEzOCAtLS0t CiAgLVRBY2xNb2RlIFwKICAtVEFjbE9iamVjdEtpbmQgXAogIC1UQWNsUmVzdWx0IFwKKyAt VEFmdGVyVHJpZ2dlckV2ZW50IFwKKyAtVEFmdGVyVHJpZ2dlckV2ZW50TGlzdCBcCiAgLVRB Z2cgXAohIC1UQWdnQ2xhdXNlQ291bnRzIFwKICAtVEFnZ0luZm8gXAogIC1UQWdnU3RhdGUg XAogIC1UQWdnU3RhdGVQZXJBZ2cgXAogIC1UQWdnU3RhdGVQZXJHcm91cCBcCiAgLVRBZ2dT dHJhdGVneSBcCiAgLVRBZ2dyZWYgXAogIC1UQWdncmVmRXhwclN0YXRlIFwKICAtVEFsaWFz IFwKICAtVEFsbG9jQmxvY2sgXAogIC1UQWxsb2NDaHVuayBcCiAgLVRBbGxvY1BvaW50ZXIg XAogIC1UQWxsb2NTZXQgXAogIC1UQWxsb2NTZXRDb250ZXh0IFwKKioqKioqKioqKioqKioq CioqKiAxNzcsMTgyICoqKioKLS0tIDE0MCwxNDYgLS0tLQogIC1UQWxsb2NhdGVEZXNjS2lu ZCBcCiAgLVRBbHRlckRhdGFiYXNlU2V0U3RtdCBcCiAgLVRBbHRlckRvbWFpblN0bXQgXAor IC1UQWx0ZXJGdW5jdGlvblN0bXQgXAogIC1UQWx0ZXJHcm91cFN0bXQgXAogIC1UQWx0ZXJP d25lclN0bXQgXAogIC1UQWx0ZXJTZXFTdG10IFwKKioqKioqKioqKioqKioqCioqKiAyMDAs MjI5ICoqKioKICAtVEFycmF5QnVpbGRTdGF0ZSBcCiAgLVRBcnJheUV4cHIgXAogIC1UQXJy YXlFeHByU3RhdGUgXAogIC1UQXJyYXlNZXRhU3RhdGUgXAogIC1UQXJyYXlQYXJzZVN0YXRl IFwKICAtVEFycmF5UmVmIFwKICAtVEFycmF5UmVmRXhwclN0YXRlIFwKICAtVEFycmF5VHlw ZSBcCiAgLVRBdHRJbk1ldGFkYXRhIFwKLSAtVEF0dHJEZWZJbmZvIFwKICAtVEF0dHJEZWZh dWx0IFwKICAtVEF0dHJOdW1iZXIgXAogIC1UQXV0aFJlcXVlc3QgXAotIC1UQkZfS0VZIFwK LSAtVEJJR05VTSBcCi0gLVRCSU5PUCBcCi0gLVRCSU8gXAotIC1UQklPX0ZfQlVGRkVSX0NU WCBcCi0gLVRCSU9fTUVUSE9EIFwKLSAtVEJJT19kdW1teSBcCi0gLVRCSVRfU1RSSU5HX0JJ VE5BTUUgXAotIC1UQkxPQ0sgXAogIC1UQk1TX01lbWJlcnNoaXAgXAotIC1UQk5fQkxJTkRJ TkcgXAotIC1UQk5fQ1RYIFwKLSAtVEJOX01PTlRfQ1RYIFwKLSAtVEJOX1JFQ1BfQ1RYIFwK ICAtVEJPWCBcCiAgLVRCVEJ1aWxkU3RhdGUgXAogIC1UQlRJdGVtIFwKLS0tIDE2NCwxODEg LS0tLQogIC1UQXJyYXlCdWlsZFN0YXRlIFwKICAtVEFycmF5RXhwciBcCiAgLVRBcnJheUV4 cHJTdGF0ZSBcCisgLVRBcnJheU1hcFN0YXRlIFwKICAtVEFycmF5TWV0YVN0YXRlIFwKICAt VEFycmF5UGFyc2VTdGF0ZSBcCiAgLVRBcnJheVJlZiBcCiAgLVRBcnJheVJlZkV4cHJTdGF0 ZSBcCisgLVRBcnJheVR1cGxlIFwKICAtVEFycmF5VHlwZSBcCiAgLVRBdHRJbk1ldGFkYXRh IFwKICAtVEF0dHJEZWZhdWx0IFwKICAtVEF0dHJOdW1iZXIgXAogIC1UQXV0aFJlcXVlc3Qg XAogIC1UQk1TX01lbWJlcnNoaXAgXAogIC1UQk9YIFwKICAtVEJUQnVpbGRTdGF0ZSBcCiAg LVRCVEl0ZW0gXAoqKioqKioqKioqKioqKioKKioqIDIzOCwyNjAgKioqKgogIC1UQlRTdGFj ayBcCiAgLVRCVFN0YWNrRGF0YSBcCiAgLVRCVFdyaXRlU3RhdGUgXAotIC1UQlVGX01FTSBc CiAgLVRCYWNrZW5kIFwKICAtVEJhY2tlbmRJZCBcCiAgLVRCZ1dyaXRlclJlcXVlc3QgXAog IC1UQmdXcml0ZXJTaG1lbVN0cnVjdCBcCiAgLVRCaXRtYXBzZXQgXAogIC1UQmtwQmxvY2sg XAogIC1UQmxvY2sgXAotIC1UQmxvY2tJZCBcCiAgLVRCbG9ja0lkRGF0YSBcCiAgLVRCbG9j a051bWJlciBcCi0gLVRCbG9ja1NhbXBsZXIgXAotIC1UQmxvY2tTYW1wbGVyRGF0YSBcCiAg LVRCb29sRXhwciBcCiAgLVRCb29sRXhwclN0YXRlIFwKICAtVEJvb2xFeHByVHlwZSBcCi0g LVRCb29sUHRyIFwKICAtVEJvb2xUZXN0VHlwZSBcCiAgLVRCb29sZWFuVGVzdCBcCiAgLVRC cENoYXIgXAotLS0gMTkwLDIxOCAtLS0tCiAgLVRCVFN0YWNrIFwKICAtVEJUU3RhY2tEYXRh IFwKICAtVEJUV3JpdGVTdGF0ZSBcCiAgLVRCYWNrZW5kIFwKICAtVEJhY2tlbmRJZCBcCiAg LVRCZ1dyaXRlclJlcXVlc3QgXAogIC1UQmdXcml0ZXJTaG1lbVN0cnVjdCBcCisgLVRCaXRt YXBBbmQgXAorIC1UQml0bWFwQW5kUGF0aCBcCisgLVRCaXRtYXBBbmRTdGF0ZSBcCisgLVRC aXRtYXBIZWFwUGF0aCBcCisgLVRCaXRtYXBIZWFwU2NhbiBcCisgLVRCaXRtYXBIZWFwU2Nh blN0YXRlIFwKKyAtVEJpdG1hcEluZGV4U2NhbiBcCisgLVRCaXRtYXBJbmRleFNjYW5TdGF0 ZSBcCisgLVRCaXRtYXBPciBcCisgLVRCaXRtYXBPclBhdGggXAorIC1UQml0bWFwT3JTdGF0 ZSBcCiAgLVRCaXRtYXBzZXQgXAogIC1UQmtwQmxvY2sgXAogIC1UQmxvY2sgXAogIC1UQmxv Y2tJZERhdGEgXAogIC1UQmxvY2tOdW1iZXIgXAogIC1UQm9vbEV4cHIgXAogIC1UQm9vbEV4 cHJTdGF0ZSBcCiAgLVRCb29sRXhwclR5cGUgXAogIC1UQm9vbFRlc3RUeXBlIFwKICAtVEJv b2xlYW5UZXN0IFwKICAtVEJwQ2hhciBcCioqKioqKioqKioqKioqKgoqKiogMjY0LDI5NSAq KioqCiAgLVRCdWZmZXIgXAogIC1UQnVmZmVyRGVzYyBcCiAgLVRCdWZmZXJMb29rdXBFbnQg XAotIC1UQnVmZmVyU3RyYXRlZ3lDREIgXAogIC1UQnVmZmVyU3RyYXRlZ3lDb250cm9sIFwK ICAtVEJ1ZmZlclRhZyBcCiAgLVRCeXRlIFwKICAtVEJ5dGVmIFwKICAtVENBQ19zdGF0ZSBc Ci0gLVRDQVNUX0tFWSBcCiAgLVRDQVRFR09SWSBcCi0gLVRDRnVuY0hhc2hUYWJFbnRyeSBc CiAgLVRDSVJDTEUgXAotIC1UQ09NUF9DVFggXAotIC1UQ09NUF9NRVRIT0QgXAotIC1UQ09O RE9QIFwKLSAtVENPUCBcCi0gLVRDUEZ1bmN0aW9uIFwKLSAtVENQUEZ1bmN0aW9uIFwKLSAt VENSWVBUT19FWF9EQVRBIFwKLSAtVENSWVBUT19FWF9EQVRBX0ZVTkNTIFwKLSAtVENSWVBU T19FWF9EQVRBX0lNUEwgXAotIC1UQ1JZUFRPX0VYX2R1cCBcCi0gLVRDUllQVE9fRVhfZnJl ZSBcCi0gLVRDUllQVE9fRVhfbmV3IFwKLSAtVENSWVBUT19NRU1fTEVBS19DQiBcCi0gLVRD UllQVE9fZHlubG9jayBcCi0gLVRDVVJDVVIgXAotIC1UQ1YgXAogIC1UQ2FjaGVDYWxsYmFj a0Z1bmN0aW9uIFwKICAtVENhbmNlbFJlcXVlc3RQYWNrZXQgXAogIC1UQ2FzZUV4cHIgXAot LS0gMjIyLDIzNCAtLS0tCioqKioqKioqKioqKioqKgoqKiogMzA3LDMxNiAqKioqCiAgLVRD YXRhbG9nSW5kZXhTdGF0ZSBcCiAgLVRDaGFuZ2VWYXJOb2Rlc19jb250ZXh0IFwKICAtVENo ZWNrUG9pbnQgXAotIC1UQ2hlY2tQb2ludFN0bXQgXAogIC1UQ2hyb21vc29tZSBcCiAgLVRD aXR5IFwKLSAtVENsaWVudERhdGEgXAogIC1UQ2xvc2VQb3J0YWxTdG10IFwKICAtVENsb3Nl UHRyIFwKICAtVENsdXN0ZXJTdG10IFwKLS0tIDI0NiwyNTMgLS0tLQoqKioqKioqKioqKioq KioKKioqIDMyMCwzMjYgKioqKgogIC1UQ29lcmNlVG9Eb21haW4gXAogIC1UQ29lcmNlVG9E b21haW5TdGF0ZSBcCiAgLVRDb2VyY2VUb0RvbWFpblZhbHVlIFwKLSAtVENvZXJjaW9uQ29k ZXMgXAogIC1UQ29lcmNpb25Db250ZXh0IFwKICAtVENvZXJjaW9uRm9ybSBcCiAgLVRDb2x1 bW5EZWYgXAotLS0gMjU3LDI2MiAtLS0tCioqKioqKioqKioqKioqKgoqKiogMzQyLDM0OSAq KioqCiAgLVRDb250YWluc09pZHMgXAogIC1UQ29udHJvbEZpbGVEYXRhIFwKICAtVENvbnZJ bmZvIFwKICAtVENvb2tlZENvbnN0cmFpbnQgXAotIC1UQ29weURlc3QgXAogIC1UQ29weVJl YWRSZXN1bHQgXAogIC1UQ29weVN0bXQgXAogIC1UQ29zdCBcCi0tLSAyNzgsMjg2IC0tLS0K ICAtVENvbnRhaW5zT2lkcyBcCiAgLVRDb250cm9sRmlsZURhdGEgXAogIC1UQ29udkluZm8g XAorIC1UQ29udmVydFJvd3R5cGVFeHByIFwKKyAtVENvbnZlcnRSb3d0eXBlRXhwclN0YXRl IFwKICAtVENvb2tlZENvbnN0cmFpbnQgXAogIC1UQ29weVJlYWRSZXN1bHQgXAogIC1UQ29w eVN0bXQgXAogIC1UQ29zdCBcCioqKioqKioqKioqKioqKgoqKiogMzU3LDM2MyAqKioqCiAg LVRDcmVhdGVPcENsYXNzU3RtdCBcCiAgLVRDcmVhdGVQTGFuZ1N0bXQgXAogIC1UQ3JlYXRl U2NoZW1hU3RtdCBcCi0gLVRDcmVhdGVTY2hlbWFTdG10Q29udGV4dCBcCiAgLVRDcmVhdGVT ZXFTdG10IFwKICAtVENyZWF0ZVN0bXQgXAogIC1UQ3JlYXRlU3RtdENvbnRleHQgXAotLS0g Mjk0LDI5OSAtLS0tCioqKioqKioqKioqKioqKgoqKiogMzY1LDQxMCAqKioqCiAgLVRDcmVh dGVUcmlnU3RtdCBcCiAgLVRDcmVhdGVVc2VyU3RtdCBcCiAgLVRDcmVhdGVkYlN0bXQgXAot IC1UQ3JlZCBcCiAgLVRDdGxDb21tYW5kIFwKICAtVEN1c3RvbU91dFB0ciBcCiAgLVREQlN0 YXRlIFwKICAtVERDSENhY2hlRW50cnkgXAotIC1URENIX3BveiBcCiAgLVRERUFETE9DS19J TkZPIFwKLSAtVERFU19jYmxvY2sgXAotIC1UREVTX2tleV9zY2hlZHVsZSBcCi0gLVRESCBc Ci0gLVRESF9NRVRIT0QgXAogIC1URElSIFwKICAtVERSX3ByaW50dHVwIFwKLSAtVERTQSBc Ci0gLVREU0FfTUVUSE9EIFwKLSAtVERTQV9TSUcgXAogIC1URGF0YUR1bXBlclB0ciBcCiAg LVREYXRlQURUIFwKICAtVERhdHVtIFwKLSAtVERhdHVtUHRyIFwKICAtVERhdHVtVHVwbGUg XAogIC1URGF0dW1UdXBsZUZpZWxkcyBcCiAgLVREZWFsbG9jYXRlU3RtdCBcCiAgLVREZWNs YXJlQ3Vyc29yU3RtdCBcCiAgLVREZWZFbGVtIFwKLSAtVERlZmVycmVkVHJpZ2dlckV2ZW50 IFwKLSAtVERlZmVycmVkVHJpZ2dlckV2ZW50RGF0YSBcCi0gLVREZWZlcnJlZFRyaWdnZXJF dmVudEl0ZW0gXAotIC1URGVmZXJyZWRUcmlnZ2VyU3RhdGUgXAotIC1URGVmZXJyZWRUcmln Z2VyU3RhdGVEYXRhIFwKLSAtVERlZmVycmVkVHJpZ2dlclN0YXR1cyBcCi0gLVREZWZlcnJl ZFRyaWdnZXJTdGF0dXNEYXRhIFwKLSAtVERlZmVycmVkVHJpZ2dlcnMgXAotIC1URGVmZXJy ZWRUcmlnZ2Vyc0RhdGEgXAogIC1URGVmaW5lU3RtdCBcCiAgLVREZWxldGVTdG10IFwKICAt VERlcGVuZGVuY3lUeXBlIFwKICAtVERlc3RSZWNlaXZlciBcCiAgLVREaXN0aW5jdEV4cHIg XAotIC1URGxfaW5mbyBcCiAgLVREbGVsZW0gXAogIC1URGxsaXN0IFwKICAtVERvbWFpbkNv bnN0cmFpbnRTdGF0ZSBcCi0tLSAzMDEsMzI2IC0tLS0KKioqKioqKioqKioqKioqCioqKiA0 MjEsNDUyICoqKioKICAtVER1bXBJZCBcCiAgLVREdW1wYWJsZU9iamVjdCBcCiAgLVREdW1w YWJsZU9iamVjdFR5cGUgXAotIC1URHVwSGFzaFRhYkVudHJ5IFwKICAtVER5bmFtaWNGaWxl TGlzdCBcCiAgLVRFREdFIFwKLSAtVEVOR0lORSBcCi0gLVRFUlJfRk5TIFwKLSAtVEVSUl9T VEFURSBcCi0gLVRFUlJfU1RSSU5HX0RBVEEgXAogIC1URVN0YXRlIFwKLSAtVEVWUF9DSVBI RVIgXAotIC1URVZQX0NJUEhFUl9DVFggXAotIC1URVZQX0NJUEhFUl9JTkZPIFwKLSAtVEVW UF9FTkNPREVfQ1RYIFwKLSAtVEVWUF9NRCBcCi0gLVRFVlBfTURfQ1RYIFwKLSAtVEVWUF9Q QkVfS0VZR0VOIFwKLSAtVEVWUF9QS0VZIFwKICAtVEVkZ2UgXAogIC1URW5kQmxvYlB0ciBc CiAgLVRFbmRCbG9ic1B0ciBcCiAgLVRFbmREYXRhUHRyIFwKLSAtVEVvbFR5cGUgXAogIC1U RXJyb3JDb250ZXh0Q2FsbGJhY2sgXAogIC1URXJyb3JEYXRhIFwKICAtVEV4Y2VwdGlvbkxh YmVsTWFwIFwKLSAtVEV4ZWNDb250ZXh0IFwKLSAtVEV4ZWNDb250ZXh0RGF0YSBcCiAgLVRF eGVjU2NhbkFjY2Vzc010ZCBcCiAgLVRFeGVjU3RhdHVzIFwKICAtVEV4ZWNTdGF0dXNUeXBl IFwKLS0tIDMzNywzNTIgLS0tLQoqKioqKioqKioqKioqKioKKioqIDQ2MCw0NzEgKioqKgog IC1URXhwckRvbmVDb25kIFwKICAtVEV4cHJTdGF0ZSBcCiAgLVRFeHByU3RhdGVFdmFsRnVu YyBcCi0gLVRGRiBcCiAgLVRGSUxFIFwKLSAtVEZTTUhlYWRlciBcCiAgLVRGU01QYWdlRGF0 YSBcCiAgLVRGU01SZWxhdGlvbiBcCi0gLVRGVU5NQVAgXAogIC1URmV0Y2hEaXJlY3Rpb24g XAogIC1URmV0Y2hTdG10IFwKICAtVEZpZWxkU2VsZWN0IFwKLS0tIDM2MCwzNjggLS0tLQoq KioqKioqKioqKioqKioKKioqIDQ4MSw0ODcgKioqKgogIC1URm9ybURhdGFfcGdfYWdncmVn YXRlIFwKICAtVEZvcm1EYXRhX3BnX2FtIFwKICAtVEZvcm1EYXRhX3BnX2Ftb3AgXAotIC1U Rm9ybURhdGFfcGdfYW1wcm9jIFwKICAtVEZvcm1EYXRhX3BnX2F0dHJkZWYgXAogIC1URm9y bURhdGFfcGdfYXR0cmlidXRlIFwKICAtVEZvcm1EYXRhX3BnX2Nhc3QgXAotLS0gMzc4LDM4 MyAtLS0tCioqKioqKioqKioqKioqKgoqKiogNDkwLDQ5OSAqKioqCiAgLVRGb3JtRGF0YV9w Z19jb252ZXJzaW9uIFwKICAtVEZvcm1EYXRhX3BnX2RhdGFiYXNlIFwKICAtVEZvcm1EYXRh X3BnX2RlcGVuZCBcCi0gLVRGb3JtRGF0YV9wZ19kZXNjcmlwdGlvbiBcCiAgLVRGb3JtRGF0 YV9wZ19ncm91cCBcCiAgLVRGb3JtRGF0YV9wZ19pbmRleCBcCi0gLVRGb3JtRGF0YV9wZ19p bmhlcml0cyBcCiAgLVRGb3JtRGF0YV9wZ19sYW5ndWFnZSBcCiAgLVRGb3JtRGF0YV9wZ19s YXJnZW9iamVjdCBcCiAgLVRGb3JtRGF0YV9wZ19saXN0ZW5lciBcCi0tLSAzODYsMzkzIC0t LS0KKioqKioqKioqKioqKioqCioqKiA1MTEsNTE3ICoqKioKICAtVEZvcm1fcGdfYWdncmVn YXRlIFwKICAtVEZvcm1fcGdfYW0gXAogIC1URm9ybV9wZ19hbW9wIFwKLSAtVEZvcm1fcGdf YW1wcm9jIFwKICAtVEZvcm1fcGdfYXR0cmRlZiBcCiAgLVRGb3JtX3BnX2F0dHJpYnV0ZSBc CiAgLVRGb3JtX3BnX2Nhc3QgXAotLS0gNDA1LDQxMCAtLS0tCioqKioqKioqKioqKioqKgoq KiogNTIwLDUyOSAqKioqCiAgLVRGb3JtX3BnX2NvbnZlcnNpb24gXAogIC1URm9ybV9wZ19k YXRhYmFzZSBcCiAgLVRGb3JtX3BnX2RlcGVuZCBcCi0gLVRGb3JtX3BnX2Rlc2NyaXB0aW9u IFwKICAtVEZvcm1fcGdfZ3JvdXAgXAogIC1URm9ybV9wZ19pbmRleCBcCi0gLVRGb3JtX3Bn X2luaGVyaXRzIFwKICAtVEZvcm1fcGdfbGFuZ3VhZ2UgXAogIC1URm9ybV9wZ19sYXJnZW9i amVjdCBcCiAgLVRGb3JtX3BnX2xpc3RlbmVyIFwKLS0tIDQxMyw0MjAgLS0tLQoqKioqKioq KioqKioqKioKKioqIDU1MCw1NjQgKioqKgogIC1URnVuY0V4cHJTdGF0ZSBcCiAgLVRGdW5j SW5mbyBcCiAgLVRGdW5jV2l0aEFyZ3MgXAotIC1URnVuY3Rpb24gXAogIC1URnVuY3Rpb25D YWxsSW5mbyBcCiAgLVRGdW5jdGlvbkNhbGxJbmZvRGF0YSBcCiAgLVRGdW5jdGlvblBhcmFt ZXRlciBcCiAgLVRGdW5jdGlvblNjYW4gXAogIC1URnVuY3Rpb25TY2FuU3RhdGUgXAotIC1U R0VOX1NFU1NJT05fQ0IgXAogIC1UR0lTVEJ1aWxkU3RhdGUgXAogIC1UR0lTVEVOVFJZIFwK ICAtVEdJU1RQYWdlT3BhcXVlIFwKICAtVEdJU1RQYWdlT3BhcXVlRGF0YSBcCiAgLVRHSVNU U1RBQ0sgXAotLS0gNDQxLDQ1NiAtLS0tCiAgLVRGdW5jRXhwclN0YXRlIFwKICAtVEZ1bmNJ bmZvIFwKICAtVEZ1bmNXaXRoQXJncyBcCiAgLVRGdW5jdGlvbkNhbGxJbmZvIFwKICAtVEZ1 bmN0aW9uQ2FsbEluZm9EYXRhIFwKICAtVEZ1bmN0aW9uUGFyYW1ldGVyIFwKKyAtVEZ1bmN0 aW9uUGFyYW1ldGVyTW9kZSBcCiAgLVRGdW5jdGlvblNjYW4gXAogIC1URnVuY3Rpb25TY2Fu U3RhdGUgXAogIC1UR0lTVEJ1aWxkU3RhdGUgXAogIC1UR0lTVEVOVFJZIFwKKyAtVEdJU1RJ bnNlcnRTdGFjayBcCisgLVRHSVNUSW5zZXJ0U3RhdGUgXAogIC1UR0lTVFBhZ2VPcGFxdWUg XAogIC1UR0lTVFBhZ2VPcGFxdWVEYXRhIFwKICAtVEdJU1RTVEFDSyBcCioqKioqKioqKioq KioqKgoqKiogNTY4LDU4NyAqKioqCiAgLVRHSVNUU2Nhbk9wYXF1ZSBcCiAgLVRHSVNUU2Nh bk9wYXF1ZURhdGEgXAogIC1UR0lTVF9TUExJVFZFQyBcCi0gLVRHUCBcCiAgLVRHVUNfeXlf c2l6ZV90IFwKICAtVEdVQ195eV9zdGF0ZV90eXBlIFwKLSAtVEdWIFwKLSAtVEdWT1AgXAog IC1UR2VuZSBcCiAgLVRHZW5lcmljRXhwclN0YXRlIFwKICAtVEdlcW9FdmFsRGF0YSBcCiAg LVRHaXN0RW50cnlWZWN0b3IgXAogIC1UR3JhbnRPYmplY3RUeXBlIFwKICAtVEdyYW50U3Rt dCBcCiAgLVRHcm91cCBcCiAgLVRHcm91cENsYXVzZSBcCiAgLVRHcm91cFN0YXRlIFwKICAt VEd1Y0Jvb2xBc3NpZ25Ib29rIFwKICAtVEd1Y0NvbnRleHQgXAogIC1UR3VjSW50QXNzaWdu SG9vayBcCi0tLSA0NjAsNDgwIC0tLS0KICAtVEdJU1RTY2FuT3BhcXVlIFwKICAtVEdJU1RT Y2FuT3BhcXVlRGF0YSBcCiAgLVRHSVNUX1NQTElUVkVDIFwKICAtVEdVQ195eV9zaXplX3Qg XAogIC1UR1VDX3l5X3N0YXRlX3R5cGUgXAogIC1UR2VuZSBcCiAgLVRHZW5lcmljRXhwclN0 YXRlIFwKICAtVEdlcW9FdmFsRGF0YSBcCisgLVRHaXN0QkRJdGVtIFwKICAtVEdpc3RFbnRy eVZlY3RvciBcCisgLVRHaXN0VmFjdXVtIFwKKyAtVEdsb2JhbFRyYW5zYWN0aW9uIFwKICAt VEdyYW50T2JqZWN0VHlwZSBcCiAgLVRHcmFudFN0bXQgXAogIC1UR3JvdXAgXAogIC1UR3Jv dXBDbGF1c2UgXAogIC1UR3JvdXBTdGF0ZSBcCisgLVRHcm91cFZhckluZm8gXAogIC1UR3Vj Qm9vbEFzc2lnbkhvb2sgXAogIC1UR3VjQ29udGV4dCBcCiAgLVRHdWNJbnRBc3NpZ25Ib29r IFwKKioqKioqKioqKioqKioqCioqKiA1OTcsNjIwICoqKioKICAtVEhBU0hIRFIgXAogIC1U SEFTSFNFR01FTlQgXAogIC1USEFTSF9TRVFfU1RBVFVTIFwKLSAtVEhFIFwKLSAtVEhFSyBc Ci0gLVRISVNUT1JZX1NUQVRFIFwKLSAtVEhJU1RfRU5UUlkgXAogIC1USFRBQiBcCiAgLVRI VFNWX1Jlc3VsdCBcCi0gLVRIViBcCiAgLVRIYXNoIFwKICAtVEhhc2hBbGxvY0Z1bmMgXAog IC1USGFzaEJ1aWxkU3RhdGUgXAogIC1USGFzaENvbXBhcmVGdW5jIFwKICAtVEhhc2hJdGVt IFwKICAtVEhhc2hJdGVtRGF0YSBcCiAgLVRIYXNoSm9pbiBcCiAgLVRIYXNoSm9pblN0YXRl IFwKICAtVEhhc2hKb2luVGFibGUgXAogIC1USGFzaEpvaW5UdXBsZSBcCi0gLVRIYXNoSm9p blR1cGxlRGF0YSBcCiAgLVRIYXNoTWV0YVBhZ2UgXAogIC1USGFzaE1ldGFQYWdlRGF0YSBc CiAgLVRIYXNoUGFnZU9wYXF1ZSBcCi0tLSA0OTAsNTA5IC0tLS0KICAtVEhBU0hIRFIgXAog IC1USEFTSFNFR01FTlQgXAogIC1USEFTSF9TRVFfU1RBVFVTIFwKICAtVEhUQUIgXAorIC1U SFRTVV9SZXN1bHQgXAogIC1USFRTVl9SZXN1bHQgXAogIC1USGFzaCBcCiAgLVRIYXNoQWxs b2NGdW5jIFwKICAtVEhhc2hCdWlsZFN0YXRlIFwKICAtVEhhc2hDb21wYXJlRnVuYyBcCisg LVRIYXNoQ29weUZ1bmMgXAogIC1USGFzaEl0ZW0gXAogIC1USGFzaEl0ZW1EYXRhIFwKICAt VEhhc2hKb2luIFwKICAtVEhhc2hKb2luU3RhdGUgXAogIC1USGFzaEpvaW5UYWJsZSBcCiAg LVRIYXNoSm9pblR1cGxlIFwKICAtVEhhc2hNZXRhUGFnZSBcCiAgLVRIYXNoTWV0YVBhZ2VE YXRhIFwKICAtVEhhc2hQYWdlT3BhcXVlIFwKKioqKioqKioqKioqKioqCioqKiA2MjUsNjMx ICoqKioKICAtVEhhc2hTY2FuT3BhcXVlIFwKICAtVEhhc2hTY2FuT3BhcXVlRGF0YSBcCiAg LVRIYXNoU3RhdGUgXAotIC1USGFzaFRhYmxlRGF0YSBcCiAgLVRIYXNoVmFsdWVGdW5jIFwK ICAtVEhlYXBTY2FuRGVzYyBcCiAgLVRIZWFwU2NhbkRlc2NEYXRhIFwKLS0tIDUxNCw1MTkg LS0tLQoqKioqKioqKioqKioqKioKKioqIDYzNCw2NTIgKioqKgogIC1USGVhcFR1cGxlRmll bGRzIFwKICAtVEhlYXBUdXBsZUhlYWRlciBcCiAgLVRIZWFwVHVwbGVIZWFkZXJEYXRhIFwK LSAtVEkxNiBcCi0gLVRJMzIgXAotIC1USTggXAotIC1USU8gXAogIC1USU9GdW5jU2VsZWN0 b3IgXAotIC1USVYgXAotIC1USVY2NCBcCiAgLVRJZExpc3QgXAogIC1USW5DbGF1c2VJbmZv IFwKICAtVEluY3JlbWVudFZhclN1YmxldmVsc1VwX2NvbnRleHQgXAogIC1USW5kZXggXAot IC1USW5kZXhBdHRyaWJ1dGVCaXRNYXAgXAotIC1USW5kZXhBdHRyaWJ1dGVCaXRNYXBEYXRh IFwKICAtVEluZGV4QnVpbGRDYWxsYmFjayBcCiAgLVRJbmRleEJ1bGtEZWxldGVDYWxsYmFj ayBcCiAgLVRJbmRleEJ1bGtEZWxldGVSZXN1bHQgXAotLS0gNTIyLDUzMiAtLS0tCioqKioq KioqKioqKioqKgoqKiogNjU5LDY2NSAqKioqCiAgLVRJbmRleFNjYW4gXAogIC1USW5kZXhT Y2FuRGVzYyBcCiAgLVRJbmRleFNjYW5EZXNjRGF0YSBcCi0gLVRJbmRleFNjYW5EZXNjUHRy IFwKICAtVEluZGV4U2NhblN0YXRlIFwKICAtVEluZGV4U3RtdCBcCiAgLVRJbmRleFR1cGxl IFwKLS0tIDUzOSw1NDQgLS0tLQoqKioqKioqKioqKioqKioKKioqIDY2OSw2NzkgKioqKgog IC1USW5keEluZm8gXAogIC1USW5oSW5mbyBcCiAgLVRJbmhPcHRpb24gXAotIC1USW5oUGF0 aHMgXAogIC1USW5oUmVsYXRpb24gXAogIC1USW5uZXJJbmRleHNjYW5JbmZvIFwKLSAtVElu c2VydEluZGV4UmVzdWx0IFwKLSAtVEluc2VydEluZGV4UmVzdWx0RGF0YSBcCiAgLVRJbnNl cnRTdG10IFwKICAtVEluc3RydW1lbnRhdGlvbiBcCiAgLVRJbnQ4VHJhbnNUeXBlRGF0YSBc Ci0tLSA1NDgsNTU1IC0tLS0KKioqKioqKioqKioqKioqCioqKiA2ODYsNzIyICoqKioKICAt VEludmFsaWRhdGlvbkxpc3RIZWFkZXIgXAogIC1USXBjTWVtb3J5SWQgXAogIC1USXBjTWVt b3J5S2V5IFwKLSAtVElwY1NlbWFwaG9yZUlkIFwKLSAtVElwY1NlbWFwaG9yZUtleSBcCiAg LVRJdGVtIFwKICAtVEl0ZW1JZCBcCiAgLVRJdGVtSWREYXRhIFwKICAtVEl0ZW1JZEZsYWdz IFwKLSAtVEl0ZW1MZW5ndGggXAotIC1USXRlbU9mZnNldCBcCiAgLVRJdGVtUG9pbnRlciBc CiAgLVRJdGVtUG9pbnRlckRhdGEgXAotIC1USk1QRU5WIFwKICAtVEpvaW4gXAogIC1USm9p bkV4cHIgXAotIC1USm9pbkluZm8gXAogIC1USm9pblBhdGggXAogIC1USm9pblN0YXRlIFwK ICAtVEpvaW5UeXBlIFwKICAtVEp1bmtGaWx0ZXIgXAotIC1US0VZTUFQX0VOVFJZIFwKLSAt VEtFWU1BUF9FTlRSWV9BUlJBWSBcCiAgLVRLZXlTdWZmaXggXAogIC1US2V5V29yZCBcCi0g LVRLZXltYXAgXAotIC1UTEhBU0ggXAotIC1UTEhBU0hfQ09NUF9GTl9UWVBFIFwKLSAtVExI QVNIX0RPQUxMX0FSR19GTl9UWVBFIFwKLSAtVExIQVNIX0RPQUxMX0ZOX1RZUEUgXAotIC1U TEhBU0hfSEFTSF9GTl9UWVBFIFwKLSAtVExIQVNIX05PREUgXAogIC1UTElORSBcCi0gLVRM SVNUT1AgXAogIC1UTE9DQUxMT0NLIFwKICAtVExPQ0FMTE9DS09XTkVSIFwKICAtVExPQ0FM TE9DS1RBRyBcCi0tLSA1NjIsNTgyIC0tLS0KKioqKioqKioqKioqKioqCioqKiA3MjUsNzMy ICoqKioKICAtVExPQ0tNRVRIT0RJRCBcCiAgLVRMT0NLTU9ERSBcCiAgLVRMT0NLVEFHIFwK LSAtVExPR09QIFwKLSAtVExPT1AgXAogIC1UTFNFRyBcCiAgLVRMVlJlbFN0YXRzIFwKICAt VExXTG9jayBcCi0tLSA1ODUsNTkwIC0tLS0KKioqKioqKioqKioqKioqCioqKiA3NDEsNzYy ICoqKioKICAtVExpc3RlblN0bXQgXAogIC1UTG9hZFN0bXQgXAogIC1UTG9jYXRpb25JbmRl eCBcCiAgLVRMb2NrRGF0YSBcCi0gLVRMb2NrSW5mbyBcCiAgLVRMb2NrSW5mb0RhdGEgXAog IC1UTG9ja01ldGhvZCBcCiAgLVRMb2NrTWV0aG9kRGF0YSBcCiAgLVRMb2NrUmVsSWQgXAog IC1UTG9ja1N0bXQgXAogIC1UTG9nU3RtdExldmVsIFwKICAtVExvZ2ljYWxUYXBlIFwKICAt VExvZ2ljYWxUYXBlU2V0IFwKLSAtVE1BR0lDIFwKLSAtVE1EMl9DVFggXAotIC1UTUQ0X0NU WCBcCi0gLVRNRDVfQ1RYIFwKLSAtVE1EQzJfQ1RYIFwKLSAtVE1HVlRCTCBcCiAgLVRNYXRl cmlhbCBcCiAgLVRNYXRlcmlhbFBhdGggXAogIC1UTWF0ZXJpYWxTdGF0ZSBcCi0tLSA1OTks NjE1IC0tLS0KICAtVExpc3RlblN0bXQgXAogIC1UTG9hZFN0bXQgXAogIC1UTG9jYXRpb25J bmRleCBcCisgLVRMb2NrQWNxdWlyZVJlc3VsdCBcCiAgLVRMb2NrRGF0YSBcCiAgLVRMb2Nr SW5mb0RhdGEgXAogIC1UTG9ja01ldGhvZCBcCiAgLVRMb2NrTWV0aG9kRGF0YSBcCiAgLVRM b2NrUmVsSWQgXAogIC1UTG9ja1N0bXQgXAorIC1UTG9ja1R1cGxlTW9kZSBcCiAgLVRMb2dT dG10TGV2ZWwgXAogIC1UTG9naWNhbFRhcGUgXAogIC1UTG9naWNhbFRhcGVTZXQgXAogIC1U TWF0ZXJpYWwgXAogIC1UTWF0ZXJpYWxQYXRoIFwKICAtVE1hdGVyaWFsU3RhdGUgXAoqKioq KioqKioqKioqKioKKioqIDc2NCw3ODIgKioqKgogIC1UTWVtb3J5Q29udGV4dCBcCiAgLVRN ZW1vcnlDb250ZXh0RGF0YSBcCiAgLVRNZW1vcnlDb250ZXh0TWV0aG9kcyBcCiAgLVRNZXJn ZUpvaW4gXAogIC1UTWVyZ2VKb2luU3RhdGUgXAogIC1UTWVyZ2VQYXRoIFwKICAtVE1zZ1R5 cGUgXAohIC1UTXlWYXJJbmZvIFwKISAtVE5FVFNDQVBFX0NFUlRfU0VRVUVOQ0UgXAohIC1U TkVUU0NBUEVfU1BLQUMgXAohIC1UTkVUU0NBUEVfU1BLSSBcCiAgLVROVU1DYWNoZUVudHJ5 IFwKICAtVE5VTURlc2MgXAogIC1UTlVNUHJvYyBcCi0gLVROVU1fcG96IFwKLSAtVE5WIFwK ICAtVE5hbWUgXAogIC1UTmFtZURhdGEgXAogIC1UTmFtZXNwYWNlSW5mbyBcCi0tLSA2MTcs NjM4IC0tLS0KICAtVE1lbW9yeUNvbnRleHQgXAogIC1UTWVtb3J5Q29udGV4dERhdGEgXAog IC1UTWVtb3J5Q29udGV4dE1ldGhvZHMgXAorIC1UTWVyZ2VGdW5jdGlvbktpbmQgXAogIC1U TWVyZ2VKb2luIFwKKyAtVE1lcmdlSm9pbkNsYXVzZSBcCiAgLVRNZXJnZUpvaW5TdGF0ZSBc CiAgLVRNZXJnZVBhdGggXAorIC1UTWluTWF4QWdnSW5mbyBcCiAgLVRNc2dUeXBlIFwKISAt VE11bHRpWGFjdElkIFwKISAtVE11bHRpWGFjdE9mZnNldCBcCiEgLVROU0xpbmtFZGl0RXJy b3JzIFwKISAtVE5TT2JqZWN0RmlsZUltYWdlIFwKISAtVE5TT2JqZWN0RmlsZUltYWdlUmV0 dXJuQ29kZSBcCiEgLVROU1N5bWJvbCBcCiAgLVROVU1DYWNoZUVudHJ5IFwKICAtVE5VTURl c2MgXAogIC1UTlVNUHJvYyBcCiAgLVROYW1lIFwKICAtVE5hbWVEYXRhIFwKICAtVE5hbWVz cGFjZUluZm8gXAoqKioqKioqKioqKioqKioKKioqIDc4NSw3OTAgKioqKgotLS0gNjQxLDY0 NyAtLS0tCiAgLVROZXN0UGF0aCBcCiAgLVROZXdDb2x1bW5WYWx1ZSBcCiAgLVROZXdDb25z dHJhaW50IFwKKyAtVE5ld1BhZ2UgXAogIC1UTm9kZSBcCiAgLVROb2RlVGFnIFwKICAtVE5v dGlmeVN0bXQgXAoqKioqKioqKioqKioqKioKKioqIDc5NSw4MDIgKioqKgogIC1UTnVtZXJp Y0RhdGEgXAogIC1UTnVtZXJpY0RpZ2l0IFwKICAtVE51bWVyaWNWYXIgXAotIC1UT0JKX05B TUUgXAotIC1UT1AgXAogIC1UT2JqZWN0QWRkcmVzcyBcCiAgLVRPYmplY3RBZGRyZXNzZXMg XAogIC1UT2JqZWN0Q2xhc3MgXAotLS0gNjUyLDY1NyAtLS0tCioqKioqKioqKioqKioqKgoq KiogODA5LDgxNSAqKioqCiAgLVRPbGRzdHlsZV9mbmV4dHJhIFwKICAtVE9uQ29tbWl0QWN0 aW9uIFwKICAtVE9uQ29tbWl0SXRlbSBcCi0gLVRPcENsYXNzQ2FjaGVFbnQgXAogIC1UT3BD bGFzc01lbWJlciBcCiAgLVRPcEV4cHIgXAogIC1UT3BjbGFzc0NhbmRpZGF0ZUxpc3QgXAot LS0gNjY0LDY2OSAtLS0tCioqKioqKioqKioqKioqKgoqKiogODE3LDgzMyAqKioqCiAgLVRP cGVyYXRvciBcCiAgLVRPcHJJbmZvIFwKICAtVE91dHB1dENvbnRleHQgXAotIC1UT3V0cmVj IFwKLSAtVFBBRE9GRlNFVCBcCiAgLVRQQVRIIFwKLSAtVFBCRTJQQVJBTSBcCi0gLVRQQkVQ QVJBTSBcCi0gLVRQQktERjJQQVJBTSBcCi0gLVRQRU1fQ1RYIFwKLSAtVFBFTV9FTkNPREVf U0VBTF9DVFggXAotIC1UUEVNX1VTRVIgXAotIC1UUEVSTF9DT05URVhUIFwKLSAtVFBFUkxf U0kgXAogIC1UUEdBc3luY1N0YXR1c1R5cGUgXAogIC1UUEdFcnJvclZlcmJvc2l0eSBcCiAg LVRQR0ZJbmZvRnVuY3Rpb24gXAotLS0gNjcxLDY3NyAtLS0tCioqKioqKioqKioqKioqKgoq KiogODM5LDg0NCAqKioqCi0tLSA2ODMsNjg5IC0tLS0KICAtVFBHTWVzc2FnZUZpZWxkIFwK ICAtVFBHTm90aWNlSG9va3MgXAogIC1UUEdQUk9DIFwKKyAtVFBHUXVlcnlDbGFzcyBcCiAg LVRQR1NlbWFwaG9yZSBcCiAgLVRQR1NlbWFwaG9yZURhdGEgXAogIC1UUEdTZXRlbnZTdGF0 dXNUeXBlIFwKKioqKioqKioqKioqKioqCioqKiA4NDYsODUxICoqKioKLS0tIDY5MSw2OTcg LS0tLQogIC1UUEdUcmFuc2FjdGlvblN0YXR1c1R5cGUgXAogIC1UUEdWZXJib3NpdHkgXAog IC1UUEdfTG9ja19TdGF0dXMgXAorIC1UUEdjYW5jZWwgXAogIC1UUEdjb25uIFwKICAtVFBH bG9iamZ1bmNzIFwKICAtVFBHbm90aWZ5IFwKKioqKioqKioqKioqKioqCioqKiA4NTMsODc3 ICoqKioKICAtVFBHcmVzQXR0VmFsdWUgXAogIC1UUEdyZXN1bHQgXAogIC1UUEdyZXN1bHRf ZGF0YSBcCi0gLVRQS0NTNyBcCi0gLVRQS0NTN19ESUdFU1QgXAotIC1UUEtDUzdfRU5DUllQ VCBcCi0gLVRQS0NTN19FTkNfQ09OVEVOVCBcCi0gLVRQS0NTN19FTlZFTE9QRSBcCi0gLVRQ S0NTN19JU1NVRVJfQU5EX1NFUklBTCBcCi0gLVRQS0NTN19SRUNJUF9JTkZPIFwKLSAtVFBL Q1M3X1NJR05FRCBcCi0gLVRQS0NTN19TSUdORVJfSU5GTyBcCi0gLVRQS0NTN19TSUdOX0VO VkVMT1BFIFwKLSAtVFBLQ1M4X1BSSVZfS0VZX0lORk8gXAogIC1UUExQR1NRTF9ZWVNUWVBF IFwKLSAtVFBMcGdTUUxfYXJyYXllbGVtIFwKICAtVFBMcGdTUUxfY29uZGl0aW9uIFwKICAt VFBMcGdTUUxfZGF0dW0gXAogIC1UUExwZ1NRTF9kaWFnX2l0ZW0gXAogIC1UUExwZ1NRTF9k c3RyaW5nIFwKICAtVFBMcGdTUUxfZXhjZXB0aW9uIFwKISAtVFBMcGdTUUxfZXhjZXB0aW9u cyBcCiAgLVRQTHBnU1FMX2V4ZWNzdGF0ZSBcCiAgLVRQTHBnU1FMX2V4cHIgXAogIC1UUExw Z1NRTF9mdW5jX2hhc2hrZXkgXAotLS0gNjk5LDcxMSAtLS0tCiAgLVRQR3Jlc0F0dFZhbHVl IFwKICAtVFBHcmVzdWx0IFwKICAtVFBHcmVzdWx0X2RhdGEgXAogIC1UUExQR1NRTF9ZWVNU WVBFIFwKICAtVFBMcGdTUUxfY29uZGl0aW9uIFwKICAtVFBMcGdTUUxfZGF0dW0gXAogIC1U UExwZ1NRTF9kaWFnX2l0ZW0gXAogIC1UUExwZ1NRTF9kc3RyaW5nIFwKICAtVFBMcGdTUUxf ZXhjZXB0aW9uIFwKISAtVFBMcGdTUUxfZXhjZXB0aW9uX2Jsb2NrIFwKICAtVFBMcGdTUUxf ZXhlY3N0YXRlIFwKICAtVFBMcGdTUUxfZXhwciBcCiAgLVRQTHBnU1FMX2Z1bmNfaGFzaGtl eSBcCioqKioqKioqKioqKioqKgoqKiogODc5LDkxMyAqKioqCiAgLVRQTHBnU1FMX25zIFwK ICAtVFBMcGdTUUxfbnNpdGVtIFwKICAtVFBMcGdTUUxfcmVjIFwKLSAtVFBMcGdTUUxfcmVj ZmllbGQgXAogIC1UUExwZ1NRTF9yb3cgXAogIC1UUExwZ1NRTF9zdG10IFwKLSAtVFBMcGdT UUxfc3RtdF9hc3NpZ24gXAogIC1UUExwZ1NRTF9zdG10X2Jsb2NrIFwKLSAtVFBMcGdTUUxf c3RtdF9jbG9zZSBcCiAgLVRQTHBnU1FMX3N0bXRfZHluZXhlY3V0ZSBcCiAgLVRQTHBnU1FM X3N0bXRfZHluZm9ycyBcCi0gLVRQTHBnU1FMX3N0bXRfZXhlY3NxbCBcCi0gLVRQTHBnU1FM X3N0bXRfZXhpdCBcCi0gLVRQTHBnU1FMX3N0bXRfZmV0Y2ggXAotIC1UUExwZ1NRTF9zdG10 X2ZvcmkgXAogIC1UUExwZ1NRTF9zdG10X2ZvcnMgXAotIC1UUExwZ1NRTF9zdG10X2dldGRp YWcgXAotIC1UUExwZ1NRTF9zdG10X2lmIFwKLSAtVFBMcGdTUUxfc3RtdF9sb29wIFwKICAt VFBMcGdTUUxfc3RtdF9vcGVuIFwKLSAtVFBMcGdTUUxfc3RtdF9wZXJmb3JtIFwKICAtVFBM cGdTUUxfc3RtdF9yYWlzZSBcCiAgLVRQTHBnU1FMX3N0bXRfcmV0dXJuIFwKICAtVFBMcGdT UUxfc3RtdF9yZXR1cm5fbmV4dCBcCiAgLVRQTHBnU1FMX3N0bXRfc2VsZWN0IFwKLSAtVFBM cGdTUUxfc3RtdF93aGlsZSBcCi0gLVRQTHBnU1FMX3N0bXRzIFwKICAtVFBMcGdTUUxfdHJp Z2FyZyBcCiAgLVRQTHBnU1FMX3R5cGUgXAogIC1UUExwZ1NRTF92YXIgXAogIC1UUExwZ1NR TF92YXJpYWJsZSBcCi0gLVRQTU9QIFwKICAtVFBNU2lnbmFsUmVhc29uIFwKICAtVFBPTFlH T04gXAogIC1UUFFBcmdCbG9jayBcCi0tLSA3MTMsNzMzIC0tLS0KKioqKioqKioqKioqKioq CioqKiA5MjIsOTM0ICoqKioKICAtVFBST0NMT0NLVEFHIFwKICAtVFBST0NfSERSIFwKICAt VFBST0NfUVVFVUUgXAotIC1UUFYgXAotIC1UUFZPUCBcCi0gLVRQYWNrZXRMZW4gXAogIC1U UGFnZSBcCiAgLVRQYWdlRnJlZVNwYWNlSW5mbyBcCiAgLVRQYWdlSGVhZGVyIFwKICAtVFBh Z2VIZWFkZXJEYXRhIFwKICAtVFBhcmFtIFwKICAtVFBhcmFtRXhlY0RhdGEgXAogIC1UUGFy YW1MaXN0SW5mbyBcCi0tLSA3NDIsNzUzIC0tLS0KICAtVFBST0NMT0NLVEFHIFwKICAtVFBS T0NfSERSIFwKICAtVFBST0NfUVVFVUUgXAogIC1UUGFnZSBcCiAgLVRQYWdlRnJlZVNwYWNl SW5mbyBcCiAgLVRQYWdlSGVhZGVyIFwKICAtVFBhZ2VIZWFkZXJEYXRhIFwKKyAtVFBhZ2VT cGxpdFJlY29yZCBcCisgLVRQYWdldGFibGVFbnRyeSBcCiAgLVRQYXJhbSBcCiAgLVRQYXJh bUV4ZWNEYXRhIFwKICAtVFBhcmFtTGlzdEluZm8gXAoqKioqKioqKioqKioqKioKKioqIDk0 Miw5NjIgKioqKgogIC1UUGF0dGVybl9UeXBlIFwKICAtVFBlbmRpbmdPcGVyYXRpb25FbnRy eSBcCiAgLVRQZW5kaW5nUmVsRGVsZXRlIFwKLSAtVFBlcmxFeGl0TGlzdEVudHJ5IFwKLSAt VFBlcmxJbnRlcnByZXRlciBcCiAgLVRQZ1N0YXRfQ291bnRlciBcCiAgLVRQZ1N0YXRfSW5m byBcCi0gLVRQZ1N0YXRfTXNnIFwKICAtVFBnU3RhdF9Nc2dBY3Rpdml0eSBcCiAgLVRQZ1N0 YXRfTXNnQmVzdGFydCBcCiAgLVRQZ1N0YXRfTXNnQmV0ZXJtIFwKLSAtVFBnU3RhdF9Nc2dE cm9wZGIgXAogIC1UUGdTdGF0X01zZ0R1bW15IFwKICAtVFBnU3RhdF9Nc2dIZHIgXAogIC1U UGdTdGF0X01zZ1Jlc2V0Y291bnRlciBcCiAgLVRQZ1N0YXRfTXNnVGFicHVyZ2UgXAogIC1U UGdTdGF0X01zZ1RhYnN0YXQgXAotIC1UUGdTdGF0X1N0YXRCZURlYWQgXAogIC1UUGdTdGF0 X1N0YXRCZUVudHJ5IFwKICAtVFBnU3RhdF9TdGF0REJFbnRyeSBcCiAgLVRQZ1N0YXRfU3Rh dFRhYkVudHJ5IFwKLS0tIDc2MSw3NzYgLS0tLQoqKioqKioqKioqKioqKioKKioqIDk2NCw5 NzYgKioqKgogIC1UUGdfZmluZm9fcmVjb3JkIFwKICAtVFBsYW4gXAogIC1UUGxhblN0YXRl IFwKICAtVFBsYW5uZXJQYXJhbUl0ZW0gXAogIC1UUG9pbnQgXAogIC1UUG9pbnRlciBcCiAg LVRQb29sIFwKICAtVFBvcnQgXAogIC1UUG9ydGFsIFwKLSAtVFBvcnRhbERhdGEgXAogIC1U UG9ydGFsSGFzaEVudCBcCiAgLVRQb3J0YWxTdGF0dXMgXAogIC1UUG9ydGFsU3RyYXRlZ3kg XAotLS0gNzc4LDc5MCAtLS0tCiAgLVRQZ19maW5mb19yZWNvcmQgXAogIC1UUGxhbiBcCiAg LVRQbGFuU3RhdGUgXAorIC1UUGxhbm5lckluZm8gXAogIC1UUGxhbm5lclBhcmFtSXRlbSBc CiAgLVRQb2ludCBcCiAgLVRQb2ludGVyIFwKICAtVFBvb2wgXAogIC1UUG9ydCBcCiAgLVRQ b3J0YWwgXAogIC1UUG9ydGFsSGFzaEVudCBcCiAgLVRQb3J0YWxTdGF0dXMgXAogIC1UUG9y dGFsU3RyYXRlZ3kgXAoqKioqKioqKioqKioqKioKKioqIDk4Miw5ODcgKioqKgotLS0gNzk2 LDgwMiAtLS0tCiAgLVRQcmludHR1cEF0dHJJbmZvIFwKICAtVFByaXZHcmFudGVlIFwKICAt VFByaXZUYXJnZXQgXAorIC1UUHJvY0FycmF5U3RydWN0IFwKICAtVFByb2NMYW5nSW5mbyBc CiAgLVRQcm9jU3RhdGUgXAogIC1UUHJvY2Vzc2luZ01vZGUgXAoqKioqKioqKioqKioqKioK KioqIDk4OSwxMDA4ICoqKioKICAtVFByb3RvY29sVmVyc2lvbiBcCiAgLVRQc3FsU2NhblJl c3VsdCBcCiAgLVRQc3FsU2NhblN0YXRlIFwKLSAtVFBzcWxTY2FuU3RhdGVEYXRhIFwKLSAt VFBzcWxTZXR0aW5ncyBcCiAgLVRRdWFsQ29zdCBcCiAgLVRRdWVyeSBcCiAgLVRRdWVyeURl c2MgXAogIC1UUXVlcnlTb3VyY2UgXAotIC1UUkMyX0tFWSBcCi0gLVRSQzRfS0VZIFwKLSAt VFJFR0VYUCBcCi0gLVRSSVBFTUQxNjBfQ1RYIFwKICAtVFJJX1F1ZXJ5SGFzaEVudHJ5IFwK ICAtVFJJX1F1ZXJ5S2V5IFwKLSAtVFJTQSBcCi0gLVRSU0FfTUVUSE9EIFwKICAtVFJUQnVp bGRTdGF0ZSBcCiAgLVRSVEVLaW5kIFwKICAtVFJUU1RBQ0sgXAotLS0gODA0LDgxNSAtLS0t CioqKioqKioqKioqKioqKgoqKiogMTAyOSwxMDQyICoqKioKICAtVFJlaW5kZXhTdG10IFwK ICAtVFJlbEZpbGVOb2RlIFwKICAtVFJlbElkQ2FjaGVFbnQgXAotIC1UUmVsTmFtZUNhY2hl RW50IFwKICAtVFJlbE9wdEluZm8gXAogIC1UUmVsT3B0S2luZCBcCiAgLVRSZWxUb0NoZWNr IFwKICAtVFJlbFRvQ2x1c3RlciBcCiAgLVRSZWxhYmVsVHlwZSBcCiAgLVRSZWxhdGlvbiBc CiEgLVRSZWxhdGlvbkJ1aWxkRGVzY0luZm8gXAogIC1UUmVsYXRpb25EYXRhIFwKICAtVFJl bGF0aW9uUHRyIFwKICAtVFJlbGF0aXZlVGltZSBcCi0tLSA4MzYsODQ4IC0tLS0KICAtVFJl aW5kZXhTdG10IFwKICAtVFJlbEZpbGVOb2RlIFwKICAtVFJlbElkQ2FjaGVFbnQgXAogIC1U UmVsT3B0SW5mbyBcCiAgLVRSZWxPcHRLaW5kIFwKICAtVFJlbFRvQ2hlY2sgXAogIC1UUmVs VG9DbHVzdGVyIFwKICAtVFJlbGFiZWxUeXBlIFwKICAtVFJlbGF0aW9uIFwKISAtVFJlbGF0 aW9uQW1JbmZvIFwKICAtVFJlbGF0aW9uRGF0YSBcCiAgLVRSZWxhdGlvblB0ciBcCiAgLVRS ZWxhdGl2ZVRpbWUgXAoqKioqKioqKioqKioqKioKKioqIDEwNDcsMTA1NiAqKioqCiAgLVRS ZW1vdmVPcGVyU3RtdCBcCiAgLVRSZW5hbWVTdG10IFwKICAtVFJlc1RhcmdldCBcCi0gLVRS ZXNkb20gXAogIC1UUmVzb2x2ZU5ld19jb250ZXh0IFwKICAtVFJlc291cmNlT3duZXIgXAot IC1UUmVzb3VyY2VPd25lckRhdGEgXAogIC1UUmVzb3VyY2VSZWxlYXNlQ2FsbGJhY2sgXAog IC1UUmVzb3VyY2VSZWxlYXNlQ2FsbGJhY2tJdGVtIFwKICAtVFJlc291cmNlUmVsZWFzZVBo YXNlIFwKLS0tIDg1Myw4NjAgLS0tLQoqKioqKioqKioqKioqKioKKioqIDEwNjksMTEwMSAq KioqCiAgLVRSdWxlSW5mbyBcCiAgLVRSdWxlTG9jayBcCiAgLVRSdWxlU3RtdCBcCi0gLVRT SEFfQ1RYIFwKICAtVFNITUVNX09GRlNFVCBcCiAgLVRTSE1fUVVFVUUgXAogIC1UU0lTZWcg XAogIC1UU01nclJlbGF0aW9uIFwKICAtVFNNZ3JSZWxhdGlvbkRhdGEgXAogIC1UU1BJVHVw bGVUYWJsZSBcCi0gLVRTUExJVENPU1QgXAogIC1UU1BMSVRWRUMgXAogIC1UU1FMRnVuY3Rp b25DYWNoZSBcCiAgLVRTUUxGdW5jdGlvbkNhY2hlUHRyIFwKLSAtVFNTTCBcCi0gLVRTU0wy X1NUQVRFIFwKLSAtVFNTTDNfQlVGRkVSIFwKLSAtVFNTTDNfUkVDT1JEIFwKLSAtVFNTTDNf U1RBVEUgXAotIC1UU1NMX0NJUEhFUiBcCi0gLVRTU0xfQ09NUCBcCi0gLVRTU0xfQ1RYIFwK LSAtVFNTTF9NRVRIT0QgXAotIC1UU1NMX1NFU1NJT04gXAotIC1UU1RBQ0sgXAotIC1UU1RS TEVOIFwKLSAtVFNVQkxFWElORk8gXAotIC1UU1YgXAotIC1UU1ZPUCBcCi0gLVRTYXZlQXJj aGl2ZVB0ciBcCiAgLVRTY2FsYXJBcnJheU9wRXhwciBcCiAgLVRTY2FsYXJBcnJheU9wRXhw clN0YXRlIFwKICAtVFNjYWxhckl0ZW0gXAotLS0gODczLDg4NyAtLS0tCioqKioqKioqKioq KioqKgoqKiogMTExMywxMTE4ICoqKioKLS0tIDg5OSw5MDcgLS0tLQogIC1UU2VxU2NhblN0 YXRlIFwKICAtVFNlcVRhYmxlIFwKICAtVFNlcVRhYmxlRGF0YSBcCisgLVRTZXRDb25zdHJh aW50U3RhdGUgXAorIC1UU2V0Q29uc3RyYWludFN0YXRlRGF0YSBcCisgLVRTZXRDb25zdHJh aW50VHJpZ2dlckRhdGEgXAogIC1UU2V0RnVuY3Rpb25SZXR1cm5Nb2RlIFwKICAtVFNldE9w IFwKICAtVFNldE9wQ21kIFwKKioqKioqKioqKioqKioqCioqKiAxMTIyLDExMzcgKioqKgog IC1UU2V0VG9EZWZhdWx0IFwKICAtVFNoYXJlZEludmFsQ2F0Y2FjaGVNc2cgXAogIC1UU2hh cmVkSW52YWxSZWxjYWNoZU1zZyBcCiAgLVRTaGFyZWRJbnZhbGlkYXRpb25NZXNzYWdlIFwK ICAtVFNobWVtSW5kZXhFbnQgXAogIC1UU2h1dGRvd25Nb2RlIFwKLSAtVFNpZ0hhbmRsZXIg XAotIC1UU2lnaGFuZGxlcl90IFwKLSAtVFNpZ3NhdmVfdCBcCiAgLVRTaXplIFwKICAtVFNs cnVDdGwgXAogIC1UU2xydUN0bERhdGEgXAotIC1UU2xydUVycm9yQ2F1c2UgXAogIC1UU2xy dUZsdXNoIFwKICAtVFNscnVGbHVzaERhdGEgXAogIC1UU2xydVBhZ2VTdGF0dXMgXAotLS0g OTExLDkyMyAtLS0tCiAgLVRTZXRUb0RlZmF1bHQgXAogIC1UU2hhcmVkSW52YWxDYXRjYWNo ZU1zZyBcCiAgLVRTaGFyZWRJbnZhbFJlbGNhY2hlTXNnIFwKKyAtVFNoYXJlZEludmFsU21n ck1zZyBcCiAgLVRTaGFyZWRJbnZhbGlkYXRpb25NZXNzYWdlIFwKICAtVFNobWVtSW5kZXhF bnQgXAogIC1UU2h1dGRvd25Nb2RlIFwKICAtVFNpemUgXAogIC1UU2xydUN0bCBcCiAgLVRT bHJ1Q3RsRGF0YSBcCiAgLVRTbHJ1Rmx1c2ggXAogIC1UU2xydUZsdXNoRGF0YSBcCiAgLVRT bHJ1UGFnZVN0YXR1cyBcCioqKioqKioqKioqKioqKgoqKiogMTE0NSwxMTU2ICoqKioKICAt VFNvcnRDbGF1c2UgXAogIC1UU29ydEZ1bmN0aW9uS2luZCBcCiAgLVRTb3J0U3RhdGUgXAog IC1UU3RhY2tFbGVtIFwKICAtVFN0YW5kYXJkQ2h1bmtIZWFkZXIgXAogIC1UU3RhcnRCbG9i UHRyIFwKICAtVFN0YXJ0QmxvYnNQdHIgXAogIC1UU3RhcnREYXRhUHRyIFwKLSAtVFN0YXJ0 dXBQYWNrZXQgXAogIC1UU3RkQW5hbHl6ZURhdGEgXAogIC1UU3RyYXRlZ3lOdW1iZXIgXAog IC1UU3RyaW5nSW5mbyBcCi0tLSA5MzEsOTQyIC0tLS0KICAtVFNvcnRDbGF1c2UgXAogIC1U U29ydEZ1bmN0aW9uS2luZCBcCiAgLVRTb3J0U3RhdGUgXAorIC1UU3BsaXRlZFBhZ2VMYXlv dXQgXAogIC1UU3RhY2tFbGVtIFwKICAtVFN0YW5kYXJkQ2h1bmtIZWFkZXIgXAogIC1UU3Rh cnRCbG9iUHRyIFwKICAtVFN0YXJ0QmxvYnNQdHIgXAogIC1UU3RhcnREYXRhUHRyIFwKICAt VFN0ZEFuYWx5emVEYXRhIFwKICAtVFN0cmF0ZWd5TnVtYmVyIFwKICAtVFN0cmluZ0luZm8g XAoqKioqKioqKioqKioqKioKKioqIDExNTksMTI2OSAqKioqCiAgLVRTdWJMaW5rVHlwZSBc CiAgLVRTdWJQbGFuIFwKICAtVFN1YlBsYW5TdGF0ZSBcCiAgLVRTdWJxdWVyeVNjYW4gXAog IC1UU3VicXVlcnlTY2FuU3RhdGUgXAogIC1UU3lzU2NhbkRlc2MgXAogIC1UU3lzU2NhbkRl c2NEYXRhIFwKICAtVFRBUl9NRU1CRVIgXAogIC1UVEJsb2NrU3RhdGUgXAohIC1UVFN0b3Jl U3RhdGUgXAohIC1UVGFibGVEYXRhSW5mbyBcCiAgLVRUYWJsZUluZm8gXAogIC1UVGFyZ2V0 RW50cnkgXAotIC1UVGNsU3R1Ykhvb2tzIFwKLSAtVFRjbFN0dWJzIFwKLSAtVFRjbF9BcHBJ bml0UHJvYyBcCi0gLVRUY2xfQXN5bmNIYW5kbGVyIFwKLSAtVFRjbF9Bc3luY1Byb2MgXAot IC1UVGNsX0NhbGxGcmFtZSBcCi0gLVRUY2xfQ2hhbm5lbCBcCi0gLVRUY2xfQ2hhbm5lbFBy b2MgXAotIC1UVGNsX0NoYW5uZWxUeXBlIFwKLSAtVFRjbF9DaGFubmVsVHlwZVZlcnNpb24g XAotIC1UVGNsX0Nsb3NlUHJvYyBcCi0gLVRUY2xfQ21kRGVsZXRlUHJvYyBcCi0gLVRUY2xf Q21kSW5mbyBcCi0gLVRUY2xfQ21kUHJvYyBcCi0gLVRUY2xfQ21kVHJhY2VQcm9jIFwKLSAt VFRjbF9Db21tYW5kIFwKLSAtVFRjbF9Db25kaXRpb24gXAotIC1UVGNsX0NyZWF0ZUZpbGVI YW5kbGVyUHJvYyBcCi0gLVRUY2xfRFN0cmluZyBcCi0gLVRUY2xfRGVsZXRlRmlsZUhhbmRs ZXJQcm9jIFwKLSAtVFRjbF9Ecml2ZXJCbG9ja01vZGVQcm9jIFwKLSAtVFRjbF9Ecml2ZXJD bG9zZTJQcm9jIFwKLSAtVFRjbF9Ecml2ZXJDbG9zZVByb2MgXAotIC1UVGNsX0RyaXZlckZs dXNoUHJvYyBcCi0gLVRUY2xfRHJpdmVyR2V0SGFuZGxlUHJvYyBcCi0gLVRUY2xfRHJpdmVy R2V0T3B0aW9uUHJvYyBcCi0gLVRUY2xfRHJpdmVySGFuZGxlclByb2MgXAotIC1UVGNsX0Ry aXZlcklucHV0UHJvYyBcCi0gLVRUY2xfRHJpdmVyT3V0cHV0UHJvYyBcCi0gLVRUY2xfRHJp dmVyU2Vla1Byb2MgXAotIC1UVGNsX0RyaXZlclNldE9wdGlvblByb2MgXAotIC1UVGNsX0Ry aXZlcldhdGNoUHJvYyBcCi0gLVRUY2xfRHVwSW50ZXJuYWxSZXBQcm9jIFwKLSAtVFRjbF9F bmNvZGluZyBcCi0gLVRUY2xfRW5jb2RpbmdDb252ZXJ0UHJvYyBcCi0gLVRUY2xfRW5jb2Rp bmdGcmVlUHJvYyBcCi0gLVRUY2xfRW5jb2RpbmdTdGF0ZSBcCi0gLVRUY2xfRW5jb2RpbmdU eXBlIFwKLSAtVFRjbF9Fb2xUcmFuc2xhdGlvbiBcCi0gLVRUY2xfRXZlbnQgXAotIC1UVGNs X0V2ZW50Q2hlY2tQcm9jIFwKLSAtVFRjbF9FdmVudERlbGV0ZVByb2MgXAotIC1UVGNsX0V2 ZW50UHJvYyBcCi0gLVRUY2xfRXZlbnRTZXR1cFByb2MgXAotIC1UVGNsX0V4aXRQcm9jIFwK LSAtVFRjbF9GaWxlRnJlZVByb2MgXAotIC1UVGNsX0ZpbGVQcm9jIFwKLSAtVFRjbF9GcmVl SW50ZXJuYWxSZXBQcm9jIFwKLSAtVFRjbF9GcmVlUHJvYyBcCi0gLVRUY2xfSGFzaEVudHJ5 IFwKLSAtVFRjbF9IYXNoU2VhcmNoIFwKLSAtVFRjbF9IYXNoVGFibGUgXAotIC1UVGNsX0lk bGVQcm9jIFwKLSAtVFRjbF9JbnRlcnAgXAotIC1UVGNsX0ludGVycERlbGV0ZVByb2MgXAot IC1UVGNsX01haW5Mb29wUHJvYyBcCi0gLVRUY2xfTWF0aFByb2MgXAotIC1UVGNsX011dGV4 IFwKLSAtVFRjbF9OYW1lc3BhY2UgXAotIC1UVGNsX05hbWVzcGFjZURlbGV0ZVByb2MgXAot IC1UVGNsX05vdGlmaWVyUHJvY3MgXAotIC1UVGNsX09iaiBcCi0gLVRUY2xfT2JqQ21kUHJv YyBcCi0gLVRUY2xfT2JqVHlwZSBcCi0gLVRUY2xfUGFja2FnZUluaXRQcm9jIFwKLSAtVFRj bF9QYW5pY1Byb2MgXAotIC1UVGNsX1BhcnNlIFwKLSAtVFRjbF9QYXRoVHlwZSBcCi0gLVRU Y2xfUGlkIFwKLSAtVFRjbF9RdWV1ZVBvc2l0aW9uIFwKLSAtVFRjbF9SZWdFeHAgXAotIC1U VGNsX1JlZ0V4cEluZGljZXMgXAotIC1UVGNsX1JlZ0V4cEluZm8gXAotIC1UVGNsX1NhdmVk UmVzdWx0IFwKLSAtVFRjbF9TZXRGcm9tQW55UHJvYyBcCi0gLVRUY2xfU2V0VGltZXJQcm9j IFwKLSAtVFRjbF9TdGF0XyBcCi0gLVRUY2xfVGNwQWNjZXB0UHJvYyBcCi0gLVRUY2xfVGhy ZWFkQ3JlYXRlUHJvYyBcCi0gLVRUY2xfVGhyZWFkRGF0YUtleSBcCi0gLVRUY2xfVGhyZWFk SWQgXAotIC1UVGNsX1RpbWUgXAotIC1UVGNsX1RpbWVyUHJvYyBcCi0gLVRUY2xfVGltZXJU b2tlbiBcCi0gLVRUY2xfVG9rZW4gXAotIC1UVGNsX1RyYWNlIFwKLSAtVFRjbF9VbmlDaGFy IFwKLSAtVFRjbF9VcGRhdGVTdHJpbmdQcm9jIFwKLSAtVFRjbF9WYWx1ZSBcCi0gLVRUY2xf VmFsdWVUeXBlIFwKLSAtVFRjbF9WYXIgXAotIC1UVGNsX1ZhclRyYWNlUHJvYyBcCi0gLVRU Y2xfV2FpdEZvckV2ZW50UHJvYyBcCiAgLVRUaGluZ0ZpbGUgXAotIC1UVGhyZWFkIFwKICAt VFRpZFBhdGggXAogIC1UVGlkU2NhbiBcCiAgLVRUaWRTY2FuU3RhdGUgXAotLS0gOTQ1LDk2 NiAtLS0tCiAgLVRTdWJMaW5rVHlwZSBcCiAgLVRTdWJQbGFuIFwKICAtVFN1YlBsYW5TdGF0 ZSBcCisgLVRTdWJUcmFuc2FjdGlvbklkIFwKKyAtVFN1YlhhY3RDYWxsYmFjayBcCisgLVRT dWJYYWN0Q2FsbGJhY2tJdGVtIFwKKyAtVFN1YlhhY3RFdmVudCBcCiAgLVRTdWJxdWVyeVNj YW4gXAogIC1UU3VicXVlcnlTY2FuU3RhdGUgXAogIC1UU3lzU2NhbkRlc2MgXAogIC1UU3lz U2NhbkRlc2NEYXRhIFwKICAtVFRBUl9NRU1CRVIgXAorIC1UVEJNSXRlcmF0ZVJlc3VsdCBc CisgLVRUQk1TdGF0dXMgXAogIC1UVEJsb2NrU3RhdGUgXAohIC1UVElEQml0bWFwIFwKICAt VFRhYmxlSW5mbyBcCiAgLVRUYXJnZXRFbnRyeSBcCiAgLVRUaGluZ0ZpbGUgXAogIC1UVGlk UGF0aCBcCiAgLVRUaWRTY2FuIFwKICAtVFRpZFNjYW5TdGF0ZSBcCioqKioqKioqKioqKioq KgoqKiogMTI5MCwxMjk2ICoqKioKICAtVFRyaWdnZXJEYXRhIFwKICAtVFRyaWdnZXJEZXNj IFwKICAtVFRyaWdnZXJFdmVudCBcCi0gLVRUcmlnZ2VySW5mbyBcCiAgLVRUcnVuY2F0ZVN0 bXQgXAogIC1UVHVwT3V0cHV0U3RhdGUgXAogIC1UVHVwU29ydFN0YXR1cyBcCi0tLSA5ODcs OTkyIC0tLS0KKioqKioqKioqKioqKioqCioqKiAxMzAxLDEzMjYgKioqKgogIC1UVHVwbGVI YXNoRW50cnlEYXRhIFwKICAtVFR1cGxlSGFzaEl0ZXJhdG9yIFwKICAtVFR1cGxlSGFzaFRh YmxlIFwKLSAtVFR1cGxlSGFzaFRhYmxlRGF0YSBcCiAgLVRUdXBsZVRhYmxlIFwKICAtVFR1 cGxlVGFibGVEYXRhIFwKICAtVFR1cGxlVGFibGVTbG90IFwKICAtVFR1cGxlc29ydHN0YXRl IFwKICAtVFR1cGxlc3RvcmVzdGF0ZSBcCiAgLVRUeXBlIFwKICAtVFR5cGVDYWNoZUVudHJ5 IFwKICAtVFR5cGVDYXN0IFwKICAtVFR5cGVJbmZvIFwKICAtVFR5cGVOYW1lIFwKLSAtVFUx NiBcCi0gLVRVMzIgXAotIC1UVTggXAotIC1UVUkgXAotIC1UVUlfTUVUSE9EIFwKLSAtVFVJ X1NUUklORyBcCi0gLVRVTkRPX0xJU1QgXAotIC1UVU5PUCBcCi0gLVRVViBcCiAgLVRVbmlx dWUgXAogIC1UVW5pcXVlUGF0aCBcCiAgLVRVbmlxdWVQYXRoTWV0aG9kIFwKLS0tIDk5Nywx MDE4IC0tLS0KICAtVFR1cGxlSGFzaEVudHJ5RGF0YSBcCiAgLVRUdXBsZUhhc2hJdGVyYXRv ciBcCiAgLVRUdXBsZUhhc2hUYWJsZSBcCiAgLVRUdXBsZVRhYmxlIFwKICAtVFR1cGxlVGFi bGVEYXRhIFwKICAtVFR1cGxlVGFibGVTbG90IFwKICAtVFR1cGxlc29ydHN0YXRlIFwKICAt VFR1cGxlc3RvcmVzdGF0ZSBcCisgLVRUd29QaGFzZUNhbGxiYWNrIFwKKyAtVFR3b1BoYXNl RmlsZUhlYWRlciBcCisgLVRUd29QaGFzZUxvY2tSZWNvcmQgXAorIC1UVHdvUGhhc2VSZWNv cmRPbkRpc2sgXAorIC1UVHdvUGhhc2VSbWdySWQgXAogIC1UVHlwZSBcCiAgLVRUeXBlQ2Fj aGVFbnRyeSBcCiAgLVRUeXBlQ2FzdCBcCisgLVRUeXBlRnVuY0NsYXNzIFwKICAtVFR5cGVJ bmZvIFwKICAtVFR5cGVOYW1lIFwKICAtVFVuaXF1ZSBcCiAgLVRVbmlxdWVQYXRoIFwKICAt VFVuaXF1ZVBhdGhNZXRob2QgXAoqKioqKioqKioqKioqKioKKioqIDEzMjgsMTMzNCAqKioq CiAgLVRVbmxpc3RlblN0bXQgXAogIC1UVXBkYXRlU3RtdCBcCiAgLVRVc2VyQXV0aCBcCi0g LVRWRnVuY3Rpb24gXAogIC1UVlJlbFN0YXRzIFwKICAtVFZUdXBsZUxpbmsgXAogIC1UVlR1 cGxlTGlua0RhdGEgXAotLS0gMTAyMCwxMDI1IC0tLS0KKioqKioqKioqKioqKioqCioqKiAx MzU1LDE0MjEgKioqKgogIC1UVmFyaWFibGVTdGF0RGF0YSBcCiAgLVRWZmQgXAogIC1UVmll d1N0bXQgXAohIC1UV0FJVF9PUkRFUiBcCiAgLVRXcml0ZUJ1ZlB0ciBcCiAgLVRXcml0ZUJ5 dGVQdHIgXAogIC1UV3JpdGVEYXRhUHRyIFwKICAtVFdyaXRlRXh0cmFUb2NQdHIgXAotIC1U WDUwOSBcCi0gLVRYNTA5X0FMR09SIFwKLSAtVFg1MDlfQVRUUklCVVRFIFwKLSAtVFg1MDlf Q0VSVF9BVVggXAotIC1UWDUwOV9DRVJUX0ZJTEVfQ1RYIFwKLSAtVFg1MDlfQ0lORiBcCi0g LVRYNTA5X0NSTCBcCi0gLVRYNTA5X0NSTF9JTkZPIFwKLSAtVFg1MDlfRVhURU5TSU9OIFwK LSAtVFg1MDlfSEFTSF9ESVJfQ1RYIFwKLSAtVFg1MDlfSU5GTyBcCi0gLVRYNTA5X0xPT0tV UCBcCi0gLVRYNTA5X0xPT0tVUF9NRVRIT0QgXAotIC1UWDUwOV9OQU1FIFwKLSAtVFg1MDlf TkFNRV9FTlRSWSBcCi0gLVRYNTA5X09CSkVDVCBcCi0gLVRYNTA5X09CSkVDVFMgXAotIC1U WDUwOV9QS0VZIFwKLSAtVFg1MDlfUFVCS0VZIFwKLSAtVFg1MDlfUkVRIFwKLSAtVFg1MDlf UkVRX0lORk8gXAotIC1UWDUwOV9SRVZPS0VEIFwKLSAtVFg1MDlfU0lHIFwKLSAtVFg1MDlf U1RPUkUgXAotIC1UWDUwOV9TVE9SRV9DVFggXAotIC1UWDUwOV9UUlVTVCBcCi0gLVRYNTA5 X1ZBTCBcCiAgLVRYTG9nQ29udFJlY29yZCBcCiAgLVRYTG9nQ3RsRGF0YSBcCiAgLVRYTG9n Q3RsSW5zZXJ0IFwKICAtVFhMb2dDdGxXcml0ZSBcCi0gLVRYTG9nTG9uZ1BhZ2VIZWFkZXIg XAotIC1UWExvZ0xvbmdQYWdlSGVhZGVyRGF0YSBcCiAgLVRYTG9nUGFnZUhlYWRlciBcCiAg LVRYTG9nUGFnZUhlYWRlckRhdGEgXAogIC1UWExvZ1JlY0RhdGEgXAogIC1UWExvZ1JlY1B0 ciBcCiAgLVRYTG9nUmVjb3JkIFwKLSAtVFhMb2dSZWxDYWNoZUVudHJ5IFwKICAtVFhMb2dS ZWxEZXNjIFwKICAtVFhMb2d3cnRSZXN1bHQgXAogIC1UWExvZ3dydFJxc3QgXAotIC1UWFBW IFwKLSAtVFhQVkFWIFwKLSAtVFhQVkJNIFwKLSAtVFhQVkNWIFwKLSAtVFhQVkZNIFwKLSAt VFhQVkdWIFwKLSAtVFhQVkhWIFwKLSAtVFhQVklPIFwKLSAtVFhQVklWIFwKLSAtVFhQVkxW IFwKLSAtVFhQVk1HIFwKLSAtVFhQVk5WIFwKLSAtVFhQVlVWIFwKLSAtVFhSViBcCiAgLVRY YWN0Q2FsbGJhY2sgXAogIC1UWGFjdENhbGxiYWNrSXRlbSBcCiAgLVRYYWN0RXZlbnQgXAot LS0gMTA0NiwxMDY4IC0tLS0KICAtVFZhcmlhYmxlU3RhdERhdGEgXAogIC1UVmZkIFwKICAt VFZpZXdTdG10IFwKISAtVFdvcmtpbmdfU3RhdGUgXAogIC1UV3JpdGVCdWZQdHIgXAogIC1U V3JpdGVCeXRlUHRyIFwKICAtVFdyaXRlRGF0YVB0ciBcCiAgLVRXcml0ZUV4dHJhVG9jUHRy IFwKICAtVFhMb2dDb250UmVjb3JkIFwKICAtVFhMb2dDdGxEYXRhIFwKICAtVFhMb2dDdGxJ bnNlcnQgXAogIC1UWExvZ0N0bFdyaXRlIFwKICAtVFhMb2dQYWdlSGVhZGVyIFwKICAtVFhM b2dQYWdlSGVhZGVyRGF0YSBcCiAgLVRYTG9nUmVjRGF0YSBcCiAgLVRYTG9nUmVjUHRyIFwK ICAtVFhMb2dSZWNvcmQgXAogIC1UWExvZ1JlbERlc2MgXAogIC1UWExvZ3dydFJlc3VsdCBc CiAgLVRYTG9nd3J0UnFzdCBcCiAgLVRYYWN0Q2FsbGJhY2sgXAogIC1UWGFjdENhbGxiYWNr SXRlbSBcCiAgLVRYYWN0RXZlbnQgXAoqKioqKioqKioqKioqKioKKioqIDE0MjMsMTU0OCAq KioqCiAgLVRZWVNUWVBFIFwKICAtVFlZX0JVRkZFUl9TVEFURSBcCiAgLVRZWV9DSEFSIFwK LSAtVF9MSUJfVkVSU0lPTl9UWVBFIFwKLSAtVF9SdW5lRW50cnkgXAotIC1UX1J1bmVMb2Nh bGUgXAotIC1UX1J1bmVSYW5nZSBcCiAgLVRfU1BJX2Nvbm5lY3Rpb24gXAogIC1UX1NQSV9w bGFuIFwKISAtVF9vc3NsX29sZF9kZXNfY2Jsb2NrIFwKISAtVF9vc3NsX29sZF9kZXNfa2V5 X3NjaGVkdWxlIFwKICAtVGFjbGl0ZW0gXAogIC1UYWRqdXN0X2luaGVyaXRlZF9hdHRyc19j b250ZXh0IFwKICAtVGFsY19leHRyYSBcCiAgLVRhbGxvY19mdW5jIFwKLSAtVGFtX2V4dHJh IFwKICAtVGFueWFycmF5IFwKLSAtVGFzc29jX2xpc3QgXAogIC1UYXRjX2V4dHJhIFwKICAt VGF0dHJpYnV0ZV91c2VkX2NvbnRleHQgXAogIC1UYmFja3NsYXNoUmVzdWx0IFwKLSAtVGJp b19pbmZvX2NiIFwKICAtVGJpdG1hcHdvcmQgXAogIC1UYml0czE2IFwKLSAtVGJpdHMzMiBc CiAgLVRiaXRzOCBcCiAgLVRib29sIFwKICAtVGJ0X2luY29tcGxldGVfc3BsaXQgXAogIC1U Ynl0ZWEgXAogIC1UY2FjaGVkX3JlX3N0ciBcCi0gLVRjYWRkcl90IFwKICAtVGNjX3QgXAog IC1UY2VsdCBcCiAgLVRjaGFyIFwKLSAtVGNoYXJmIFwKICAtVGNoZWNrRXhwckhhc0FnZ3Nf Y29udGV4dCBcCiAgLVRjaGVja19wYXJhbWV0ZXJfcmVzb2x1dGlvbl9jb250ZXh0IFwKICAt VGNoZWNrX3VuZ3JvdXBlZF9jb2x1bW5zX2NvbnRleHQgXAogIC1UY2hyIFwKLSAtVGNsb2Nr X3QgXAotIC1UY2xvY2tpZF90IFwKICAtVGNvZGVzX3QgXAogIC1UY29sb3IgXAotIC1UY29t bWVudF90IFwKLSAtVGNvbnN0X0RFU19jYmxvY2sgXAogIC1UY29udGFpbl92YXJfcmVmZXJl bmNlX2NvbnRleHQgXAotIC1UY3JjNjQgXAotIC1UY3ZfZmxhZ3NfdCBcCi0gLVRkYWRkcl90 IFwKICAtVGRhdGUgXAogIC1UZGF0ZXRrbiBcCiAgLVRkZWNpbWFsIFwKICAtVGRlcGFyc2Vf Y29udGV4dCBcCiAgLVRkZXBhcnNlX25hbWVzcGFjZSBcCiAgLVRkZXZfdCBcCi0gLVRkaXZf dCBcCiAgLVRkb3VibGUgXAogIC1UZXZhbFBsYW5RdWFsIFwKICAtVGV2YWxfY29uc3RfZXhw cmVzc2lvbnNfY29udGV4dCBcCi0gLVRleGVjUm93TWFyayBcCiAgLVRleGVjdXRpb25fc3Rh dGUgXAotIC1UZXhwZWN0YXRpb24gXAogIC1UZl9zbWdyIFwKLSAtVGZkX21hc2sgXAogIC1U ZmRfc2V0IFwKLSAtVGZpbHRlcl90IFwKICAtVGZpbmFsaXplX3ByaW1ub2RlX2NvbnRleHQg XAogIC1UZmluZF9leHByX3JlZmVyZW5jZXNfY29udGV4dCBcCiAgLVRmaW5kX21pbmltdW1f dmFyX2xldmVsX2NvbnRleHQgXAotIC1UZml4cHRfdCBcCiAgLVRmbGF0dGVuX2pvaW5fYWxp YXNfdmFyc19jb250ZXh0IFwKICAtVGZsb2F0IFwKLSAtVGZsb2F0MzIgXAotIC1UZmxvYXQz MmRhdGEgXAogIC1UZmxvYXQ0IFwKLSAtVGZsb2F0NjQgXAotIC1UZmxvYXQ2NGRhdGEgXAog IC1UZmxvYXQ4IFwKISAtVGZwX2V4Y2VwdCBcCiEgLVRmcF9ybmQgXAohIC1UZnBjbGFzc190 IFwKICAtVGZwb3NfdCBcCiAgLVRmcmVlX2Z1bmMgXAogIC1UZnNlY190IFwKICAtVGZ1bmNf cHRyIFwKICAtVGdlbmVyYXRlX3Nlcmllc19mY3R4IFwKICAtVGdpZF90IFwKICAtVGd6Rmls ZSBcCiAgLVRoYXNobm9kZSBcCiAgLVRoYmFQb3J0IFwKICAtVGhlbHBfaGFuZGxlciBcCiAg LVRpbl9hZGRyX3QgXAogIC1UaW5fcG9ydF90IFwKICAtVGluZXQgXAotIC1UaW5ldF9zdHJ1 Y3QgXAogIC1UaW5vX3QgXAogIC1UaW50IFwKICAtVGludDE2IFwKLSAtVGludDE2X3QgXAot IC1UaW50MTZtX3QgXAogIC1UaW50MiBcCiAgLVRpbnQydmVjdG9yIFwKICAtVGludDMyIFwK LSAtVGludDMyX3QgXAotIC1UaW50MzJtX3QgXAogIC1UaW50NCBcCiAgLVRpbnQ2NCBcCi0g LVRpbnQ2NF90IFwKLSAtVGludDY0bV90IFwKICAtVGludDggXAotIC1UaW50OF90IFwKLSAt VGludDhtX3QgXAogIC1UaW50ZXJ2YWwgXAotIC1UaW50ZiBcCiAgLVRpdGVtSWRTb3J0IFwK ICAtVGl0ZW1JZFNvcnREYXRhIFwKLSAtVGptcF9idWYgXAogIC1Uam9pbl9yZWZlcmVuY2Vz X2NvbnRleHQgXAogIC1Ua2V5X3QgXAogIC1UbGNsQ29udGV4dCBcCiAgLVRsY2xUb2NFbnRy eSBcCiEgLVRsZGl2X3QgXAohIC1UbGluZV90IFwKICAtVG1hY2FkZHIgXAogIC1UbWIyd2No YXJfd2l0aF9sZW5fY29udmVydGVyIFwKICAtVG1iZGlzcGxheWxlbl9jb252ZXJ0ZXIgXAot LS0gMTA3MCwxMTg1IC0tLS0KICAtVFlZU1RZUEUgXAogIC1UWVlfQlVGRkVSX1NUQVRFIFwK ICAtVFlZX0NIQVIgXAogIC1UX1NQSV9jb25uZWN0aW9uIFwKICAtVF9TUElfcGxhbiBcCiEg LVRfX2J1aWx0aW5fdmFfbGlzdCBcCiEgLVRfX2Rhcndpbl9ibGtjbnRfdCBcCiEgLVRfX2Rh cndpbl9ibGtzaXplX3QgXAohIC1UX19kYXJ3aW5fZGV2X3QgXAohIC1UX19kYXJ3aW5fZ2lk X3QgXAohIC1UX19kYXJ3aW5faW5vX3QgXAohIC1UX19kYXJ3aW5fbW9kZV90IFwKISAtVF9f ZGFyd2luX29mZl90IFwKISAtVF9fZGFyd2luX3BpZF90IFwKISAtVF9fZGFyd2luX3B0aHJl YWRfbXV0ZXhfdCBcCiEgLVRfX2Rhcndpbl9zaWdzZXRfdCBcCiEgLVRfX2Rhcndpbl9zaXpl X3QgXAohIC1UX19kYXJ3aW5fc29ja2xlbl90IFwKISAtVF9fZGFyd2luX3NzaXplX3QgXAoh IC1UX19kYXJ3aW5fc3VzZWNvbmRzX3QgXAohIC1UX19kYXJ3aW5fdGltZV90IFwKISAtVF9f ZGFyd2luX3VpZF90IFwKISAtVF9fZGFyd2luX3ZhX2xpc3QgXAohIC1UX19kYXJ3aW5fd2No YXJfdCBcCiEgLVRfX2ludDMyX3QgXAohIC1UX19pbnQ2NF90IFwKISAtVF9fdWludDE2X3Qg XAohIC1UX191aW50MzJfdCBcCiEgLVRfX3VpbnQ4X3QgXAogIC1UYWNsaXRlbSBcCiAgLVRh ZGp1c3RfaW5oZXJpdGVkX2F0dHJzX2NvbnRleHQgXAogIC1UYWxjX2V4dHJhIFwKICAtVGFs bG9jX2Z1bmMgXAogIC1UYW55YXJyYXkgXAogIC1UYXRjX2V4dHJhIFwKICAtVGF0dHJpYnV0 ZV91c2VkX2NvbnRleHQgXAogIC1UYmFja3NsYXNoUmVzdWx0IFwKICAtVGJpdG1hcHdvcmQg XAogIC1UYml0czE2IFwKICAtVGJpdHM4IFwKKyAtVGJsa2NudF90IFwKKyAtVGJsa3NpemVf dCBcCiAgLVRib29sIFwKICAtVGJ0X2luY29tcGxldGVfc3BsaXQgXAogIC1UYnl0ZWEgXAog IC1UY2FjaGVkX3JlX3N0ciBcCiAgLVRjY190IFwKICAtVGNlbHQgXAogIC1UY2hhciBcCiAg LVRjaGVja0V4cHJIYXNBZ2dzX2NvbnRleHQgXAogIC1UY2hlY2tfcGFyYW1ldGVyX3Jlc29s dXRpb25fY29udGV4dCBcCiAgLVRjaGVja191bmdyb3VwZWRfY29sdW1uc19jb250ZXh0IFwK ICAtVGNociBcCiAgLVRjb2Rlc190IFwKICAtVGNvbG9yIFwKICAtVGNvbnRhaW5fdmFyX3Jl ZmVyZW5jZV9jb250ZXh0IFwKICAtVGRhdGUgXAogIC1UZGF0ZXRrbiBcCiAgLVRkZWNpbWFs IFwKICAtVGRlcGFyc2VfY29udGV4dCBcCiAgLVRkZXBhcnNlX25hbWVzcGFjZSBcCiAgLVRk ZXZfdCBcCiAgLVRkb3VibGUgXAogIC1UZXZhbFBsYW5RdWFsIFwKICAtVGV2YWxfY29uc3Rf ZXhwcmVzc2lvbnNfY29udGV4dCBcCiAgLVRleGVjdXRpb25fc3RhdGUgXAogIC1UZl9zbWdy IFwKICAtVGZkX3NldCBcCiAgLVRmaW5hbGl6ZV9wcmltbm9kZV9jb250ZXh0IFwKICAtVGZp bmRfZXhwcl9yZWZlcmVuY2VzX2NvbnRleHQgXAogIC1UZmluZF9taW5pbXVtX3Zhcl9sZXZl bF9jb250ZXh0IFwKICAtVGZsYXR0ZW5fam9pbl9hbGlhc192YXJzX2NvbnRleHQgXAogIC1U ZmxvYXQgXAogIC1UZmxvYXQ0IFwKICAtVGZsb2F0OCBcCiEgLVRmbU5vZGVQdHIgXAogIC1U ZnBvc190IFwKICAtVGZyZWVfZnVuYyBcCiAgLVRmc2VjX3QgXAogIC1UZnVuY19wdHIgXAog IC1UZ2VuZXJhdGVfc2VyaWVzX2ZjdHggXAogIC1UZ2lkX3QgXAorIC1UZ2lzdEluY29tcGxl dGVJbnNlcnQgXAorIC1UZ2lzdHhsb2dFbnRyeVVwZGF0ZSBcCisgLVRnaXN0eGxvZ0luc2Vy dENvbXBsZXRlIFwKKyAtVGdpc3R4bG9nUGFnZSBcCisgLVRnaXN0eGxvZ1BhZ2VTcGxpdCBc CiAgLVRnekZpbGUgXAogIC1UaGFzaG5vZGUgXAogIC1UaGJhUG9ydCBcCiAgLVRoZWxwX2hh bmRsZXIgXAogIC1UaW5fYWRkcl90IFwKICAtVGluX3BvcnRfdCBcCisgLVRpbmRleGVkX3Rs aXN0IFwKICAtVGluZXQgXAogIC1UaW5vX3QgXAorIC1UaW5zdHJfdGltZSBcCiAgLVRpbnQg XAogIC1UaW50MTYgXAogIC1UaW50MiBcCiAgLVRpbnQydmVjdG9yIFwKICAtVGludDMyIFwK ICAtVGludDQgXAogIC1UaW50NjQgXAogIC1UaW50OCBcCiAgLVRpbnRlcnZhbCBcCiAgLVRp dGVtSWRTb3J0IFwKICAtVGl0ZW1JZFNvcnREYXRhIFwKICAtVGpvaW5fcmVmZXJlbmNlc19j b250ZXh0IFwKICAtVGtleV90IFwKICAtVGxjbENvbnRleHQgXAogIC1UbGNsVG9jRW50cnkg XAohIC1UbVhhY3RDYWNoZUVudCBcCiAgLVRtYWNhZGRyIFwKICAtVG1iMndjaGFyX3dpdGhf bGVuX2NvbnZlcnRlciBcCiAgLVRtYmRpc3BsYXlsZW5fY29udmVydGVyIFwKKioqKioqKioq KioqKioqCioqKiAxNTUwLDE1NzIgKioqKgogIC1UbWl4ZWRTdHJ1Y3QgXAogIC1UbW9kZV90 IFwKICAtVG5saW5rX3QgXAotIC1UbmxzX3VpbnQzMiBcCiAgLVRudW1lcmljIFwKICAtVG9m Zl90IFwKICAtVG9pZHZlY3RvciBcCi0gLVRvcF90cl9hcnJheSBcCi0gLVRvcGNvZGUgXAot IC1Ub3BpbmRleCBcCi0gLVRvcHRUeXBlIFwKICAtVHBjb2xvciBcCi0gLVRwZW1fcGFzc3dv cmRfY2IgXAogIC1UcGdQYXJhbWV0ZXJTdGF0dXMgXAogIC1UcGdfY29udl9tYXAgXAogIC1U cGdfZW5jIFwKICAtVHBnX2VuYzJuYW1lIFwKICAtVHBnX2VuY25hbWUgXAogIC1UcGdfbG9j YWxfdG9fdXRmIFwKICAtVHBnX3RpbWVfdCBcCiAgLVRwZ191dGZfdG9fbG9jYWwgXAogIC1U cGdfd2NoYXIgXAogIC1UcGdfd2NoYXJfdGJsIFwKLS0tIDExODcsMTIwNSAtLS0tCiAgLVRt aXhlZFN0cnVjdCBcCiAgLVRtb2RlX3QgXAogIC1UbmxpbmtfdCBcCiAgLVRudW1lcmljIFwK ICAtVG9mZl90IFwKICAtVG9pZHZlY3RvciBcCiAgLVRwY29sb3IgXAogIC1UcGdQYXJhbWV0 ZXJTdGF0dXMgXAogIC1UcGdfY29udl9tYXAgXAorIC1UcGdfY3JjMzIgXAogIC1UcGdfZW5j IFwKICAtVHBnX2VuYzJuYW1lIFwKICAtVHBnX2VuY25hbWUgXAogIC1UcGdfbG9jYWxfdG9f dXRmIFwKICAtVHBnX3RpbWVfdCBcCisgLVRwZ190eiBcCiAgLVRwZ191dGZfdG9fbG9jYWwg XAogIC1UcGdfd2NoYXIgXAogIC1UcGdfd2NoYXJfdGJsIFwKKioqKioqKioqKioqKioqCioq KiAxNTc0LDE2MjggKioqKgogIC1UcGdzcWxfdGhpbmdfdCBcCiAgLVRwZ3RocmVhZGxvY2tf dCBcCiAgLVRwaWRfdCBcCi0gLVRwbHBlcmxfcHJvY19kZXNjIFwKLSAtVHBscGdzcWxfSGFz aEVudCBcCi0gLVRwbHBnc3FsX3l5c2lnbmVkX2NoYXIgXAotIC1UcGx0Y2xfcHJvY19kZXNj IFwKLSAtVHBsdGNsX3F1ZXJ5X2Rlc2MgXAogIC1UcHFib29sIFwKICAtVHBxc2lnZnVuYyBc CiAgLVRwcmludFF1ZXJ5T3B0IFwKICAtVHByaW50VGFibGVPcHQgXAogIC1UcHJvbXB0U3Rh dHVzX3QgXAotIC1UcHRocmVhZF9hdHRyX3QgXAotIC1UcHRocmVhZF9jb25kX3QgXAotIC1U cHRocmVhZF9jb25kYXR0cl90IFwKLSAtVHB0aHJlYWRfa2V5X3QgXAotIC1UcHRocmVhZF9t dXRleF90IFwKLSAtVHB0aHJlYWRfbXV0ZXhhdHRyX3QgXAotIC1UcHRocmVhZF9vbmNlX3Qg XAotIC1UcHRocmVhZF90IFwKLSAtVHB0cmRpZmZfdCBcCiAgLVRwdWxsX3Zhcl9jbGF1c2Vf Y29udGV4dCBcCiAgLVRwdWxsX3Zhcm5vc19jb250ZXh0IFwKLSAtVHB2Y29udGVudHMgXAot IC1UcTEyOF90IFwKLSAtVHFhZGRyX3QgXAotIC1UcXVhZF90IFwKICAtVHJhbmdlVGFibGVF bnRyeV91c2VkX2NvbnRleHQgXAogIC1UcmVkdWNlX291dGVyX2pvaW5zX3N0YXRlIFwKLSAt VHJlZ2NvbXBfdCBcCiAgLVRyZWdleF90IFwKLSAtVHJlZ2V4ZWNfdCBcCi0gLVRyZWdleHAg XAotIC1UcmVnaXN0ZXJfdCBcCiAgLVRyZWdtYXRjaF90IFwKLSAtVHJlZ25vZGUgXAogIC1U cmVnb2ZmX3QgXAogIC1UcmVncHJvYyBcCiAgLVRyZXBsYWNlX3ZhcnNfd2l0aF9zdWJwbGFu X3JlZnNfY29udGV4dCBcCi0gLVRyZXdyaXRlX2V2ZW50IFwKICAtVHJtX2RldGFpbF90IFwK LSAtVHJ1bmVfdCBcCi0gLVRydW5vcHNfcHJvY190IFwKICAtVHNhX2ZhbWlseV90IFwKISAt VHNlZ3N6X3QgXAohIC1Uc2VxdWVuY2VfbWFnaWMgXAogIC1Uc2lnX2F0b21pY190IFwKLSAt VHNpZ190IFwKLSAtVHNpZ2hhbmRsZXJfY3h0IFwKICAtVHNpZ2ptcF9idWYgXAotIC1Uc2ln bmVkYml0bWFwd29yZCBcCiAgLVRzaWdzZXRfdCBcCiAgLVRzaXplX3QgXAogIC1Uc2xvY2tf dCBcCi0tLSAxMjA3LDEyMzEgLS0tLQogIC1UcGdzcWxfdGhpbmdfdCBcCiAgLVRwZ3RocmVh ZGxvY2tfdCBcCiAgLVRwaWRfdCBcCiAgLVRwcWJvb2wgXAogIC1UcHFzaWdmdW5jIFwKICAt VHByaW50UXVlcnlPcHQgXAogIC1UcHJpbnRUYWJsZU9wdCBcCiAgLVRwcm9tcHRTdGF0dXNf dCBcCiAgLVRwdWxsX3Zhcl9jbGF1c2VfY29udGV4dCBcCiAgLVRwdWxsX3Zhcm5vc19jb250 ZXh0IFwKICAtVHJhbmdlVGFibGVFbnRyeV91c2VkX2NvbnRleHQgXAogIC1UcmVkdWNlX291 dGVyX2pvaW5zX3N0YXRlIFwKICAtVHJlZ2V4X3QgXAogIC1UcmVnbWF0Y2hfdCBcCiAgLVRy ZWdvZmZfdCBcCiAgLVRyZWdwcm9jIFwKICAtVHJlcGxhY2VfdmFyc193aXRoX3N1YnBsYW5f cmVmc19jb250ZXh0IFwKICAtVHJtX2RldGFpbF90IFwKICAtVHNhX2ZhbWlseV90IFwKISAt VHNlbV90IFwKICAtVHNpZ19hdG9taWNfdCBcCiAgLVRzaWdqbXBfYnVmIFwKICAtVHNpZ3Nl dF90IFwKICAtVHNpemVfdCBcCiAgLVRzbG9ja190IFwKKioqKioqKioqKioqKioqCioqKiAx NjMyLDE2ODcgKioqKgogIC1Uc3FscGFyc2VJbmZvIFwKICAtVHNxbHBhcnNlU3RhdGUgXAog IC1Uc3NpemVfdCBcCi0gLVRzc2xfY3JvY2tfc3QgXAotIC1Uc3RhY2tfdCBcCi0gLVRzdHJj b25zdCBcCiAgLVRzdWJzdGl0dXRlX2FjdHVhbF9wYXJhbWV0ZXJzX2NvbnRleHQgXAotIC1U c3ZpbmRleCBcCi0gLVRzdnR5cGUgXAotIC1Uc3dibGtfdCBcCiAgLVR0Y2ZsYWdfdCBcCi0g LVR0Y3Bfc2VxIFwKICAtVHRlUmVxcyBcCiAgLVR0ZXh0IFwKICAtVHRpbWVfdCBcCiAgLVR0 aW1lc3RhbXAgXAogIC1UdHNfZGJfZmN0eCBcCiAgLVR1SW50IFwKLSAtVHVJbnRmIFwKICAt VHVMb25nIFwKLSAtVHVMb25nZiBcCiAgLVR1X2NoYXIgXAogIC1UdV9pbnQgXAotIC1UdV9p bnQxNl90IFwKLSAtVHVfaW50MTZtX3QgXAotIC1UdV9pbnQzMl90IFwKLSAtVHVfaW50MzJt X3QgXAotIC1UdV9pbnQ2NF90IFwKLSAtVHVfaW50NjRtX3QgXAotIC1UdV9pbnQ4X3QgXAot IC1UdV9pbnQ4bV90IFwKLSAtVHVfbG9uZyBcCi0gLVR1X3F1YWRfdCBcCi0gLVR1X3Nob3J0 IFwKICAtVHVjaHIgXAogIC1UdWlkX3QgXAotIC1UdWludCBcCiAgLVR1aW50MTYgXAogIC1U dWludDMyIFwKICAtVHVpbnQ2NCBcCiAgLVR1aW50OCBcCi0gLVR1bmtub3duIFwKLSAtVHVz aG9ydCBcCiAgLVR2YV9saXN0IFwKICAtVHZhcmF0dHJpYiBcCi0gLVR2bV9vZmZzZXRfdCBc Ci0gLVR2bV9zaXplX3QgXAogIC1Udm9pZCBcCiAgLVR2b2lkcCBcCiAgLVR2b2lkcGYgXAog IC1Ud2NoYXJfdCBcCi0gLVR3Y3R5cGVfdCBcCi0gLVR3aW50X3QgXAogIC1UeGxfYnRyZWVf ZGVsZXRlIFwKICAtVHhsX2J0cmVlX2RlbGV0ZV9wYWdlIFwKICAtVHhsX2J0cmVlX2luc2Vy dCBcCi0tLSAxMjM1LDEyNjQgLS0tLQogIC1Uc3FscGFyc2VJbmZvIFwKICAtVHNxbHBhcnNl U3RhdGUgXAogIC1Uc3NpemVfdCBcCiAgLVRzdWJzdGl0dXRlX2FjdHVhbF9wYXJhbWV0ZXJz X2NvbnRleHQgXAogIC1UdGNmbGFnX3QgXAogIC1UdGVSZXFzIFwKICAtVHRleHQgXAogIC1U dGltZV90IFwKICAtVHRpbWVzdGFtcCBcCisgLVR0bGlzdF92aW5mbyBcCiAgLVR0c19kYl9m Y3R4IFwKICAtVHVJbnQgXAogIC1UdUxvbmcgXAogIC1UdV9jaGFyIFwKICAtVHVfaW50IFwK ICAtVHVjaHIgXAogIC1UdWlkX3QgXAogIC1UdWludDE2IFwKICAtVHVpbnQzMiBcCiAgLVR1 aW50NjQgXAogIC1UdWludDggXAogIC1UdmFfbGlzdCBcCiAgLVR2YXJhdHRyaWIgXAogIC1U dm9pZCBcCiAgLVR2b2lkcCBcCiAgLVR2b2lkcGYgXAogIC1Ud2NoYXJfdCBcCiAgLVR4bF9i dHJlZV9kZWxldGUgXAogIC1UeGxfYnRyZWVfZGVsZXRlX3BhZ2UgXAogIC1UeGxfYnRyZWVf aW5zZXJ0IFwKKioqKioqKioqKioqKioqCioqKiAxNjkwLDE3MTAgKioqKgogIC1UeGxfYnRy ZWVfbmV3cm9vdCBcCiAgLVR4bF9idHJlZV9zcGxpdCBcCiAgLVR4bF9idHJlZXRpZCBcCiAg LVR4bF9oZWFwX2NsZWFuIFwKICAtVHhsX2hlYXBfZGVsZXRlIFwKICAtVHhsX2hlYXBfaGVh ZGVyIFwKICAtVHhsX2hlYXBfaW5zZXJ0IFwKICAtVHhsX2hlYXBfbmV3cGFnZSBcCiAgLVR4 bF9oZWFwX3VwZGF0ZSBcCiAgLVR4bF9oZWFwdGlkIFwKICAtVHhsX3NlcV9yZWMgXAogIC1U eGxfc21ncl9jcmVhdGUgXAogIC1UeGxfc21ncl90cnVuY2F0ZSBcCiAgLVR4bF94YWN0X2Fi b3J0IFwKICAtVHhsX3hhY3RfY29tbWl0IFwKICAtVHl5X3NpemVfdCBcCiAgLVR5eV9zdGF0 ZV90eXBlIFwKLSAtVHl5c2lnbmVkX2NoYXIgXAogIC1Uel9zdHJlYW0gXAogIC1Uel9zdHJl YW1wIFwKICAvdG1wLyQkYSA+L3RtcC8kJCAyPiYxCi0tLSAxMjY3LDEyOTIgLS0tLQogIC1U eGxfYnRyZWVfbmV3cm9vdCBcCiAgLVR4bF9idHJlZV9zcGxpdCBcCiAgLVR4bF9idHJlZXRp ZCBcCisgLVR4bF9kYmFzZV9jcmVhdGVfcmVjIFwKKyAtVHhsX2RiYXNlX2Ryb3BfcmVjIFwK ICAtVHhsX2hlYXBfY2xlYW4gXAogIC1UeGxfaGVhcF9kZWxldGUgXAogIC1UeGxfaGVhcF9o ZWFkZXIgXAogIC1UeGxfaGVhcF9pbnNlcnQgXAorIC1UeGxfaGVhcF9sb2NrIFwKICAtVHhs X2hlYXBfbmV3cGFnZSBcCiAgLVR4bF9oZWFwX3VwZGF0ZSBcCiAgLVR4bF9oZWFwdGlkIFwK KyAtVHhsX211bHRpeGFjdF9jcmVhdGUgXAogIC1UeGxfc2VxX3JlYyBcCiAgLVR4bF9zbWdy X2NyZWF0ZSBcCiAgLVR4bF9zbWdyX3RydW5jYXRlIFwKKyAtVHhsX3RibHNwY19jcmVhdGVf cmVjIFwKKyAtVHhsX3RibHNwY19kcm9wX3JlYyBcCiAgLVR4bF94YWN0X2Fib3J0IFwKICAt VHhsX3hhY3RfY29tbWl0IFwKICAtVHl5X3NpemVfdCBcCiAgLVR5eV9zdGF0ZV90eXBlIFwK ICAtVHpfc3RyZWFtIFwKICAtVHpfc3RyZWFtcCBcCiAgL3RtcC8kJGEgPi90bXAvJCQgMj4m MQo= --B_3202753503_1429494--