From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on inbox.vuxu.org X-Spam-Level: X-Spam-Status: No, score=-1.0 required=5.0 tests=ALL_TRUSTED autolearn=unavailable autolearn_force=no version=3.4.2 Received: from inbox.vuxu.org (localhost [IPv6:::1]) by inbox.vuxu.org (OpenSMTPD) with ESMTP id d22602dc for ; Sun, 27 Oct 2019 09:06:23 +0000 (UTC) Content-Type: multipart/mixed; boundary="===============7639971906355611833==" MIME-Version: 1.0 Subject: Re: [PR PATCH] [Updated] par: added unicode support To: ml@inbox.vuxu.org From: voidlinux-github@inbox.vuxu.org Reply-to: ml@inbox.vuxu.org In-Reply-To: References: Date: Sun, 27 Oct 2019 10:06:23 +0100 Message-ID: <20191027090623.tXHluhCSqN_HmtAA_kRoIKQjMsx3-I0OAEAhoQDtl1c@z> GitHub notification mails are now in MIME to allow UTF8. --===============7639971906355611833== MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 VGhlcmUgaXMgYW4gdXBkYXRlZCBwdWxsIHJlcXVlc3QgYnkgVmFsVGltY2hlbmtvIGFnYWluc3Qg bWFzdGVyIG9uIHRoZSB2b2lkLXBhY2thZ2VzIHJlcG9zaXRvcnkKCmh0dHBzOi8vZ2l0aHViLmNv bS9WYWxUaW1jaGVua28vdm9pZC1wYWNrYWdlcyBwYXItdW5pY29kZQpodHRwczovL2dpdGh1Yi5j b20vdm9pZC1saW51eC92b2lkLXBhY2thZ2VzL3B1bGwvMTU4MTIKCnBhcjogYWRkZWQgdW5pY29k ZSBzdXBwb3J0ClN1YmouIEp1c3QgYWRkZWQgdW5pY29kZSBwYXRjaCBtYWRlIGJ5IErDg8KpcsOD wrRtZSBQb3VpbGxlciBhcyBvZjogaHR0cDovL3N5c21pYy5vcmcvZG90Y2xlYXIvaW5kZXgucGhw P3Bvc3QvMjAwNi8wNi8yMi81NS1hZGQtbXVsdGlieXRlLWNoYXJhY3RlcnMtc3VwcG9ydC1pbi1w YXIKCkEgcGF0Y2ggZmlsZSBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS92b2lkLWxpbnV4L3ZvaWQt cGFja2FnZXMvcHVsbC8xNTgxMi5wYXRjaCBpcyBhdHRhY2hlZA== --===============7639971906355611833== Content-Type: text/x-diff MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="github-pr-par-unicode-15812.patch" RnJvbSAzNDcxZTBlNWQ0MTAxZGE5M2ZiMjQxN2MwZDM0MGNiNDk0MGUzMmU1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBWYWxUaW1jaGVua28gPFZhbFRpbWNoZW5rb0BnbWFpbC5jb20+ CkRhdGU6IFNhdCwgMjYgT2N0IDIwMTkgMTc6MzU6MjkgKzAzMDAKU3ViamVjdDogW1BBVENIXSBB ZGRlZCB1bmljb2RlIHBhdGNoIGZvciBwYXItMS41MgoKLS0tCiBzcmNwa2dzL3Bhci9wYXRjaGVz L3Bhci1pMThuLnBhdGNoIHwgMjg1OCArKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBzcmNw a2dzL3Bhci90ZW1wbGF0ZSAgICAgICAgICAgICAgIHwgICAgMiArLQogMiBmaWxlcyBjaGFuZ2Vk LCAyODU5IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBz cmNwa2dzL3Bhci9wYXRjaGVzL3Bhci1pMThuLnBhdGNoCgpkaWZmIC0tZ2l0IGEvc3JjcGtncy9w YXIvcGF0Y2hlcy9wYXItaTE4bi5wYXRjaCBiL3NyY3BrZ3MvcGFyL3BhdGNoZXMvcGFyLWkxOG4u cGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjI3NTU0MjVmNzAy Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjcGtncy9wYXIvcGF0Y2hlcy9wYXItaTE4bi5wYXRjaApA QCAtMCwwICsxLDI4NTggQEAKK2RpZmYgLWMgLi9idWZmZXIuYyAuLi9QYXIxNTItdW5pY29kZS9i dWZmZXIuYworKioqIC4vYnVmZmVyLmMJMjAwMS0wMy0wOSAwMjo1MToxMS4wMDAwMDAwMDAgKzAz MDAKKy0tLSAuLi9QYXIxNTItdW5pY29kZS9idWZmZXIuYwkyMDE5LTEwLTI2IDE3OjIxOjA4LjU0 MjA1MDg1MyArMDMwMAorKioqKioqKioqKioqKioqCisqKiogMSw5ICoqKioKKyEgLyoqKioqKioq KioqKioqKioqKioqKi8KKyEgLyogYnVmZmVyLmMgICAgICAgICAgKi8KKyEgLyogZm9yIFBhciAx LjUyICAgICAgKi8KKyEgLyogQ29weXJpZ2h0IDIwMDEgYnkgKi8KKyEgLyogQWRhbSBNLiBDb3N0 ZWxsbyAgKi8KKyEgLyoqKioqKioqKioqKioqKioqKioqKi8KKyAgCisgIC8qIFRoaXMgaXMgQU5T SSBDIGNvZGUgKEM4OSkuICovCisgIAorLS0tIDEsMTEgLS0tLQorISAvKioqKioqKioqKioqKioq KioqKioqKiovCishIC8qIGJ1ZmZlci5jICAgICAgICAgICAgKi8KKyEgLyogZm9yIFBhciAxLjUy LWkxOG4uNCAqLworISAvKiBDb3B5cmlnaHQgMjAwMSBieSAgICovCishIC8qIEFkYW0gTS4gQ29z dGVsbG8gICAgKi8KKyEgLyogTW9kaWZpZWQgYnkgICAgICAgICAqLworISAvKiBKw6lyw7RtZSBQ b3VpbGxlciAgICAgKi8KKyEgLyoqKioqKioqKioqKioqKioqKioqKioqLworICAKKyAgLyogVGhp cyBpcyBBTlNJIEMgY29kZSAoQzg5KS4gKi8KKyAgCisqKioqKioqKioqKioqKioKKyoqKiAxOCwy MyAqKioqCistLS0gMjAsMjYgLS0tLQorICAKKyAgI2luY2x1ZGUgPHN0ZGxpYi5oPgorICAjaW5j bHVkZSA8c3RyaW5nLmg+CisrICNpbmNsdWRlIDx3Y2hhci5oPgorICAKKyAgI3VuZGVmIE5VTEwK KyAgI2RlZmluZSBOVUxMICgodm9pZCAqKSAwKQorKioqKioqKioqKioqKioqCisqKiogNjAsNjYg KioqKgorICAgIGJsayA9IG1hbGxvYyhzaXplb2YgKGJsb2NrKSk7CisgICAgaXRlbXMgPSBtYWxs b2MobWF4aGVyZSAqIGl0ZW1zaXplKTsKKyAgICBpZiAoIWJ1ZiB8fCAhYmxrIHx8ICFpdGVtcykg eworISAgICAgc3RyY3B5KGVycm1zZyxvdXRvZm1lbSk7CisgICAgICBnb3RvIG5iZXJyb3I7Cisg ICAgfQorICAKKy0tLSA2Myw2OSAtLS0tCisgICAgYmxrID0gbWFsbG9jKHNpemVvZiAoYmxvY2sp KTsKKyAgICBpdGVtcyA9IG1hbGxvYyhtYXhoZXJlICogaXRlbXNpemUpOworICAgIGlmICghYnVm IHx8ICFibGsgfHwgIWl0ZW1zKSB7CishICAgICB3Y3NjcHkoZXJybXNnLG91dG9mbWVtKTsKKyAg ICAgIGdvdG8gbmJlcnJvcjsKKyAgICB9CisgIAorKioqKioqKioqKioqKioqCisqKiogMTI3LDEz MyAqKioqCisgICAgICAgIG5ldyA9IG1hbGxvYyhzaXplb2YgKGJsb2NrKSk7CisgICAgICAgIGl0 ZW1zID0gbWFsbG9jKG1heGhlcmUgKiBpdGVtc2l6ZSk7CisgICAgICAgIGlmICghbmV3IHx8ICFp dGVtcykgeworISAgICAgICAgIHN0cmNweShlcnJtc2csb3V0b2ZtZW0pOworICAgICAgICAgIGdv dG8gYWllcnJvcjsKKyAgICAgICAgfQorICAgICAgICBibGstPm5leHQgPSBuZXc7CistLS0gMTMw LDEzNiAtLS0tCisgICAgICAgIG5ldyA9IG1hbGxvYyhzaXplb2YgKGJsb2NrKSk7CisgICAgICAg IGl0ZW1zID0gbWFsbG9jKG1heGhlcmUgKiBpdGVtc2l6ZSk7CisgICAgICAgIGlmICghbmV3IHx8 ICFpdGVtcykgeworISAgICAgICAgIHdjc2NweShlcnJtc2csb3V0b2ZtZW0pOworICAgICAgICAg IGdvdG8gYWllcnJvcjsKKyAgICAgICAgfQorICAgICAgICBibGstPm5leHQgPSBuZXc7CisqKioq KioqKioqKioqKioKKyoqKiAxNzQsMTgwICoqKioKKyAgCisgICAgciA9IG1hbGxvYyhuICogaXRl bXNpemUpOworICAgIGlmICghcikgeworISAgICAgc3RyY3B5KGVycm1zZyxvdXRvZm1lbSk7Cisg ICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgIAorLS0tIDE3NywxODMgLS0tLQorICAKKyAgICBy ID0gbWFsbG9jKG4gKiBpdGVtc2l6ZSk7CisgICAgaWYgKCFyKSB7CishICAgICB3Y3NjcHkoZXJy bXNnLG91dG9mbWVtKTsKKyAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgCitkaWZmIC1jIC4v YnVmZmVyLmggLi4vUGFyMTUyLXVuaWNvZGUvYnVmZmVyLmgKKyoqKiAuL2J1ZmZlci5oCTIwMDEt MDMtMDkgMDI6NTE6MjUuMDAwMDAwMDAwICswMzAwCistLS0gLi4vUGFyMTUyLXVuaWNvZGUvYnVm ZmVyLmgJMjAxOS0xMC0yNiAxNzoyMTowOC41NDMwNTA4NTMgKzAzMDAKKyoqKioqKioqKioqKioq KgorKioqIDEsOSAqKioqCishIC8qKioqKioqKioqKioqKioqKioqKiovCishIC8qIGJ1ZmZlci5o ICAgICAgICAgICovCishIC8qIGZvciBQYXIgMS41MiAgICAgICovCishIC8qIENvcHlyaWdodCAy MDAxIGJ5ICovCishIC8qIEFkYW0gTS4gQ29zdGVsbG8gICovCishIC8qKioqKioqKioqKioqKioq KioqKiovCisgIAorICAvKiBUaGlzIGlzIEFOU0kgQyBjb2RlIChDODkpLiAqLworICAKKy0tLSAx LDExIC0tLS0KKyEgLyoqKioqKioqKioqKioqKioqKioqKioqLworISAvKiBidWZmZXIuaCAgICAg ICAgICAgICovCishIC8qIGZvciBQYXIgMS41Mi1pMThuLjQgKi8KKyEgLyogQ29weXJpZ2h0IDIw MDEgYnkgICAqLworISAvKiBBZGFtIE0uIENvc3RlbGxvICAgICovCishIC8qIE1vZGlmaWVkIGJ5 ICAgICAgICAgKi8KKyEgLyogSsOpcsO0bWUgUG91aWxsZXIgICAgICovCishIC8qKioqKioqKioq KioqKioqKioqKioqKi8KKyAgCisgIC8qIFRoaXMgaXMgQU5TSSBDIGNvZGUgKEM4OSkuICovCisg IAorZGlmZiAtYyAuL2NoYXJzZXQuYyAuLi9QYXIxNTItdW5pY29kZS9jaGFyc2V0LmMKKyoqKiAu L2NoYXJzZXQuYwkyMDAxLTA0LTAzIDAxOjUxOjQ4LjAwMDAwMDAwMCArMDQwMAorLS0tIC4uL1Bh cjE1Mi11bmljb2RlL2NoYXJzZXQuYwkyMDE5LTEwLTI2IDE3OjIxOjA4LjU0NDA1MDg1MyArMDMw MAorKioqKioqKioqKioqKioqCisqKiogMSw5ICoqKioKKyEgLyoqKioqKioqKioqKioqKioqKioq Ki8KKyEgLyogY2hhcnNldC5jICAgICAgICAgKi8KKyEgLyogZm9yIFBhciAxLjUyICAgICAgKi8K KyEgLyogQ29weXJpZ2h0IDIwMDEgYnkgKi8KKyEgLyogQWRhbSBNLiBDb3N0ZWxsbyAgKi8KKyEg LyoqKioqKioqKioqKioqKioqKioqKi8KKyAgCisgIC8qIFRoaXMgaXMgQU5TSSBDIGNvZGUgKEM4 OSkuICovCisgIAorLS0tIDEsMTEgLS0tLQorISAvKioqKioqKioqKioqKioqKioqKioqKiovCish IC8qIGNoYXJzZXQuYyAgICAgICAgICAgKi8KKyEgLyogZm9yIFBhciAxLjUyLWkxOG4uNCAqLwor ISAvKiBDb3B5cmlnaHQgMjAwMSBieSAgICovCishIC8qIEFkYW0gTS4gQ29zdGVsbG8gICAgKi8K KyEgLyogTW9kaWZpZWQgYnkgICAgICAgICAqLworISAvKiBKw6lyw7RtZSBQb3VpbGxlciAgICAg Ki8KKyEgLyoqKioqKioqKioqKioqKioqKioqKioqLworICAKKyAgLyogVGhpcyBpcyBBTlNJIEMg Y29kZSAoQzg5KS4gKi8KKyAgCisqKioqKioqKioqKioqKioKKyoqKiAxOCwyNSAqKioqCisgICAg ICAgICAgICAgICAgICAgICAgICAvKiBwcm90b3R5cGVzLiAgQWxzbyBpbmNsdWRlcyAiZXJybXNn LmgiLiAqLworICAjaW5jbHVkZSAiYnVmZmVyLmgiICAgLyogQWxzbyBpbmNsdWRlcyA8c3RkZGVm Lmg+LiAgICAgICAgICAgICAgKi8KKyAgCistICNpbmNsdWRlIDxjdHlwZS5oPgorICAjaW5jbHVk ZSA8c3RkaW8uaD4KKyAgI2luY2x1ZGUgPHN0ZGxpYi5oPgorICAjaW5jbHVkZSA8c3RyaW5nLmg+ CisgIAorLS0tIDIwLDI4IC0tLS0KKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIHByb3RvdHlw ZXMuICBBbHNvIGluY2x1ZGVzICJlcnJtc2cuaCIuICovCisgICNpbmNsdWRlICJidWZmZXIuaCIg ICAvKiBBbHNvIGluY2x1ZGVzIDxzdGRkZWYuaD4uICAgICAgICAgICAgICAqLworICAKKyAgI2lu Y2x1ZGUgPHN0ZGlvLmg+CisrICNpbmNsdWRlIDx3Y2hhci5oPgorKyAjaW5jbHVkZSA8d2N0eXBl Lmg+CisgICNpbmNsdWRlIDxzdGRsaWIuaD4KKyAgI2luY2x1ZGUgPHN0cmluZy5oPgorICAKKyoq KioqKioqKioqKioqKgorKioqIDM5LDQ2ICoqKioKKyAgdHlwZWRlZiB1bnNpZ25lZCBjaGFyIGNz ZmxhZ190OworICAKKyAgc3RydWN0IGNoYXJzZXQgeworISAgIGNoYXIgKmlubGlzdDsgICAgLyog Q2hhcmFjdGVycyBpbiBpbmxpc3QgYXJlIGluIHRoZSBzZXQuICAgICAgICAgICAgICAgICovCish ICAgY2hhciAqb3V0bGlzdDsgICAvKiBDaGFyYWN0ZXJzIGluIG91dGxpc3QgYXJlIG5vdCBpbiB0 aGUgc2V0LiAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgIC8qIGlubGlzdCBhbmQg b3V0bGlzdCBtdXN0IGhhdmUgbm8gY29tbW9uIGNoYXJhY3RlcnMuICAqLworICAgICAgICAgICAg ICAgICAgICAgLyogaW5saXN0IGFuZCBvdXRsaXN0IG1heSBiZSBOVUxMLCB3aGljaCBhY3RzIGxp a2UgIiIuICovCisgICAgY3NmbGFnX3QgZmxhZ3M7ICAvKiBDaGFyYWN0ZXJzIGluIG5laXRoZXIg bGlzdCBhcmUgaW4gdGhlIHNldCBpZiB0aGV5ICAgKi8KKy0tLSA0Miw0OSAtLS0tCisgIHR5cGVk ZWYgdW5zaWduZWQgY2hhciBjc2ZsYWdfdDsKKyAgCisgIHN0cnVjdCBjaGFyc2V0IHsKKyEgICB3 Y2hhcl90ICppbmxpc3Q7ICAgIC8qIENoYXJhY3RlcnMgaW4gaW5saXN0IGFyZSBpbiB0aGUgc2V0 LiAgICAgICAgICAgICAgICAqLworISAgIHdjaGFyX3QgKm91dGxpc3Q7ICAgLyogQ2hhcmFjdGVy cyBpbiBvdXRsaXN0IGFyZSBub3QgaW4gdGhlIHNldC4gICAgICAgICAgICovCisgICAgICAgICAg ICAgICAgICAgICAvKiBpbmxpc3QgYW5kIG91dGxpc3QgbXVzdCBoYXZlIG5vIGNvbW1vbiBjaGFy YWN0ZXJzLiAgKi8KKyAgICAgICAgICAgICAgICAgICAgIC8qIGlubGlzdCBhbmQgb3V0bGlzdCBt YXkgYmUgTlVMTCwgd2hpY2ggYWN0cyBsaWtlICIiLiAqLworICAgIGNzZmxhZ190IGZsYWdzOyAg LyogQ2hhcmFjdGVycyBpbiBuZWl0aGVyIGxpc3QgYXJlIGluIHRoZSBzZXQgaWYgdGhleSAgICov CisqKioqKioqKioqKioqKioKKyoqKiA1Niw4MCAqKioqCisgICAgICAgICAgICAgICAgICAgICAg ICBDU19OVUwgICA9IDg7ICAvKiBJbmNsdWRlcyB0aGUgTlVMIGNoYXJhY3Rlci4gICAgICAqLwor ICAKKyAgCishIHN0YXRpYyBpbnQgYXBwZWFyc2luKGNoYXIgYywgY29uc3QgY2hhciAqc3RyKQor ICAKKyAgLyogUmV0dXJucyAwIGlmIGMgaXMgJ1wwJyBvciBzdHIgaXMgTlVMTCBvciBjICAgICAq LworICAvKiBkb2VzIG5vdCBhcHBlYXIgaW4gKnN0ci4gIE90aGVyd2lzZSByZXR1cm5zIDEuICov CisgIHsKKyEgICByZXR1cm4gYyAmJiBzdHIgJiYgc3RyY2hyKHN0cixjKTsKKyAgfQorICAKKyAg CishIHN0YXRpYyBpbnQgaGV4ZGlndG9pbnQoY2hhciBjKQorICAKKyAgLyogUmV0dXJucyB0aGUg dmFsdWUgcmVwcmVzZW50ZWQgYnkgdGhlIGhleGFkZWNpbWFsICovCisgIC8qIGRpZ2l0IGMsIG9y IC0xIGlmIGMgaXMgbm90IGEgaGV4YWRlY2ltYWwgZGlnaXQuICAqLworICB7CishICAgY29uc3Qg Y2hhciAqcCwgKiBjb25zdCBoZXhkaWdpdHMgPSAiMDEyMzQ1Njc4OUFCQ0RFRmFiY2RlZiI7Cisg ICAgaW50IG47CisgIAorICAgIGlmICghYykgcmV0dXJuIC0xOworISAgIHAgPSBzdHJjaHIoaGV4 ZGlnaXRzLCAqKHVuc2lnbmVkIGNoYXIgKikmYyk7CisgICAgaWYgKCFwKSByZXR1cm4gLTE7Cisg ICAgbiA9IHAgLSBoZXhkaWdpdHM7CisgICAgaWYgKG4gPj0gMTYpIG4gLT0gNjsKKy0tLSA1OSw4 MyAtLS0tCisgICAgICAgICAgICAgICAgICAgICAgICBDU19OVUwgICA9IDg7ICAvKiBJbmNsdWRl cyB0aGUgTlVMIGNoYXJhY3Rlci4gICAgICAqLworICAKKyAgCishIHN0YXRpYyBpbnQgYXBwZWFy c2luKHdjaGFyX3QgYywgY29uc3Qgd2NoYXJfdCAqc3RyKQorICAKKyAgLyogUmV0dXJucyAwIGlm IGMgaXMgJ1wwJyBvciBzdHIgaXMgTlVMTCBvciBjICAgICAqLworICAvKiBkb2VzIG5vdCBhcHBl YXIgaW4gKnN0ci4gIE90aGVyd2lzZSByZXR1cm5zIDEuICovCisgIHsKKyEgICByZXR1cm4gYyAm JiBzdHIgJiYgd2NzY2hyKHN0cixjKTsKKyAgfQorICAKKyAgCishIHN0YXRpYyBpbnQgaGV4ZGln dG9pbnQod2NoYXJfdCBjKQorICAKKyAgLyogUmV0dXJucyB0aGUgdmFsdWUgcmVwcmVzZW50ZWQg YnkgdGhlIGhleGFkZWNpbWFsICovCisgIC8qIGRpZ2l0IGMsIG9yIC0xIGlmIGMgaXMgbm90IGEg aGV4YWRlY2ltYWwgZGlnaXQuICAqLworICB7CishICAgY29uc3Qgd2NoYXJfdCAqcCwgKiBjb25z dCBoZXhkaWdpdHMgPSBMIjAxMjM0NTY3ODlBQkNERUZhYmNkZWYiOworICAgIGludCBuOworICAK KyAgICBpZiAoIWMpIHJldHVybiAtMTsKKyEgICBwID0gd2NzY2hyKGhleGRpZ2l0cywgYyk7Cisg ICAgaWYgKCFwKSByZXR1cm4gLTE7CisgICAgbiA9IHAgLSBoZXhkaWdpdHM7CisgICAgaWYgKG4g Pj0gMTYpIG4gLT0gNjsKKyoqKioqKioqKioqKioqKgorKioqIDg3LDEyNSAqKioqCisgIH0KKyAg CisgIAorISBjaGFyc2V0ICpwYXJzZWNoYXJzZXQoY29uc3QgY2hhciAqc3RyLCBlcnJtc2dfdCBl cnJtc2cpCisgIHsKKyAgICBjaGFyc2V0ICpjc2V0ID0gTlVMTDsKKyAgICBidWZmZXIgKmNidWYg PSBOVUxMOworISAgIGNvbnN0IGNoYXIgKnAsICogY29uc3Qgc2luZ2xlZXNjYXBlcyA9ICJfc2Jx UXgiOworICAgIGludCBoZXgxLCBoZXgyOworISAgIGNoYXIgY2g7CishIAorICAgIGNzZXQgPSBt YWxsb2Moc2l6ZW9mIChjaGFyc2V0KSk7CisgICAgaWYgKCFjc2V0KSB7CishICAgICBzdHJjcHko ZXJybXNnLG91dG9mbWVtKTsKKyAgICAgIGdvdG8gcGNzZXJyb3I7CisgICAgfQorICAgIGNzZXQt PmlubGlzdCA9IGNzZXQtPm91dGxpc3QgPSBOVUxMOworICAgIGNzZXQtPmZsYWdzID0gMDsKKyAg CishICAgY2J1ZiA9IG5ld2J1ZmZlcihzaXplb2YgKGNoYXIpLCBlcnJtc2cpOworICAgIGlmICgq ZXJybXNnKSBnb3RvIHBjc2Vycm9yOworICAKKyAgICBmb3IgKHAgPSBzdHI7ICAqcDsgICsrcCkK KyEgICAgIGlmICgqcCA9PSAnXycpIHsKKyAgICAgICAgKytwOworICAgICAgICBpZiAoYXBwZWFy c2luKCpwLCBzaW5nbGVlc2NhcGVzKSkgeworISAgICAgICAgIGlmICAgICAgKCpwID09ICdfJykg Y2ggPSAnXycgOworISAgICAgICAgIGVsc2UgaWYgKCpwID09ICdzJykgY2ggPSAnICcgOworISAg ICAgICAgIGVsc2UgaWYgKCpwID09ICdiJykgY2ggPSAnXFwnOworISAgICAgICAgIGVsc2UgaWYg KCpwID09ICdxJykgY2ggPSAnXCcnOworISAgICAgICAgIGVsc2UgaWYgKCpwID09ICdRJykgY2gg PSAnXCInOworICAgICAgICAgIGVsc2UgLyogICpwID09ICd4JyAgKi8geworICAgICAgICAgICAg aGV4MSA9IGhleGRpZ3RvaW50KHBbMV0pOworICAgICAgICAgICAgaGV4MiA9IGhleGRpZ3RvaW50 KHBbMl0pOworICAgICAgICAgICAgaWYgKGhleDEgPCAwICB8fCAgaGV4MiA8IDApIGdvdG8gcGNz YmFkc3RyOworISAgICAgICAgICAgKih1bnNpZ25lZCBjaGFyICopJmNoID0gMTYgKiBoZXgxICsg aGV4MjsKKyAgICAgICAgICAgIHAgKz0gMjsKKyAgICAgICAgICB9CisgICAgICAgICAgaWYgKCFj aCkKKy0tLSA5MCwxMjkgLS0tLQorICB9CisgIAorICAKKyEgY2hhcnNldCAqcGFyc2VjaGFyc2V0 KGNvbnN0IHdjaGFyX3QgKnN0ciwgZXJybXNnX3QgZXJybXNnKQorICB7CisgICAgY2hhcnNldCAq Y3NldCA9IE5VTEw7CisgICAgYnVmZmVyICpjYnVmID0gTlVMTDsKKyEgICBjb25zdCB3Y2hhcl90 ICpwLCAqIGNvbnN0IHNpbmdsZWVzY2FwZXMgPSBMIl9zYnFReCI7CisgICAgaW50IGhleDEsIGhl eDI7CishICAgd2NoYXJfdCBjaDsKKyEgICAgICAgCisgICAgY3NldCA9IG1hbGxvYyhzaXplb2Yg KGNoYXJzZXQpKTsKKyAgICBpZiAoIWNzZXQpIHsKKyEgICAgIHdjc2NweShlcnJtc2csb3V0b2Zt ZW0pOworICAgICAgZ290byBwY3NlcnJvcjsKKyAgICB9CisgICAgY3NldC0+aW5saXN0ID0gY3Nl dC0+b3V0bGlzdCA9IE5VTEw7CisgICAgY3NldC0+ZmxhZ3MgPSAwOworICAKKyEgICBjYnVmID0g bmV3YnVmZmVyKHNpemVvZiAod2NoYXJfdCksIGVycm1zZyk7CisgICAgaWYgKCplcnJtc2cpIGdv dG8gcGNzZXJyb3I7CisgIAorICAgIGZvciAocCA9IHN0cjsgICpwOyAgKytwKQorISAgICAgaWYg KCpwID09IEwnXycpIHsKKyAgICAgICAgKytwOworICAgICAgICBpZiAoYXBwZWFyc2luKCpwLCBz aW5nbGVlc2NhcGVzKSkgeworISAgICAgICAgIGlmICAgICAgKCpwID09IEwnXycpIGNoID0gTCdf JyA7CishICAgICAgICAgZWxzZSBpZiAoKnAgPT0gTCdzJykgY2ggPSBMJyAnIDsKKyEgICAgICAg ICBlbHNlIGlmICgqcCA9PSBMJ2InKSBjaCA9IEwnXFwnOworISAgICAgICAgIGVsc2UgaWYgKCpw ID09IEwncScpIGNoID0gTCdcJyc7CishICAgICAgICAgZWxzZSBpZiAoKnAgPT0gTCdRJykgY2gg PSBMJ1wiJzsKKyAgICAgICAgICBlbHNlIC8qICAqcCA9PSAneCcgICovIHsKKysgICAgICAgICAg IC8qIEZJWE1FIF94IG1ldGFjaGFyYWN0ZXIgc2hvdWxkIGFsbG93IHdpZGUgY2hhcmFjdGVycyBp bnB1dC4qLworICAgICAgICAgICAgaGV4MSA9IGhleGRpZ3RvaW50KHBbMV0pOworICAgICAgICAg ICAgaGV4MiA9IGhleGRpZ3RvaW50KHBbMl0pOworICAgICAgICAgICAgaWYgKGhleDEgPCAwICB8 fCAgaGV4MiA8IDApIGdvdG8gcGNzYmFkc3RyOworISAgICAgICAgICAgY2ggPSAxNiAqIGhleDEg KyBoZXgyOworICAgICAgICAgICAgcCArPSAyOworICAgICAgICAgIH0KKyAgICAgICAgICBpZiAo IWNoKQorKioqKioqKioqKioqKioqCisqKiogMTMwLDE0MyAqKioqCisgICAgICAgICAgfQorICAg ICAgICB9CisgICAgICAgIGVsc2UgeworISAgICAgICAgIGlmICAgICAgKCpwID09ICdBJykgY3Nl dC0+ZmxhZ3MgfD0gQ1NfVUNBU0U7CishICAgICAgICAgZWxzZSBpZiAoKnAgPT0gJ2EnKSBjc2V0 LT5mbGFncyB8PSBDU19MQ0FTRTsKKyEgICAgICAgICBlbHNlIGlmICgqcCA9PSAnMCcpIGNzZXQt PmZsYWdzIHw9IENTX0RJR0lUOworICAgICAgICAgIGVsc2UgZ290byBwY3NiYWRzdHI7CisgICAg ICAgIH0KKyAgICAgIH0KKyAgICAgIGVsc2UgeworISAgICAgICBhZGRpdGVtKGNidWYscCxlcnJt c2cpOworICAgICAgICBpZiAoKmVycm1zZykgZ290byBwY3NlcnJvcjsKKyAgICAgIH0KKyAgICBj aCA9ICdcMCc7CistLS0gMTM0LDE0NyAtLS0tCisgICAgICAgICAgfQorICAgICAgICB9CisgICAg ICAgIGVsc2UgeworISAgICAgICAgIGlmICAgICAgKCpwID09IEwnQScpIGNzZXQtPmZsYWdzIHw9 IENTX1VDQVNFOworISAgICAgICAgIGVsc2UgaWYgKCpwID09IEwnYScpIGNzZXQtPmZsYWdzIHw9 IENTX0xDQVNFOworISAgICAgICAgIGVsc2UgaWYgKCpwID09IEwnMCcpIGNzZXQtPmZsYWdzIHw9 IENTX0RJR0lUOworICAgICAgICAgIGVsc2UgZ290byBwY3NiYWRzdHI7CisgICAgICAgIH0KKyAg ICAgIH0KKyAgICAgIGVsc2UgeworISAgICAgICBhZGRpdGVtKGNidWYsIHAsZXJybXNnKTsKKyAg ICAgICAgaWYgKCplcnJtc2cpIGdvdG8gcGNzZXJyb3I7CisgICAgICB9CisgICAgY2ggPSAnXDAn OworKioqKioqKioqKioqKioqCisqKiogMTQ5LDE1OSAqKioqCisgIHBjc2NsZWFudXA6CisgIAor ICAgIGlmIChjYnVmKSBmcmVlYnVmZmVyKGNidWYpOworICAgIHJldHVybiBjc2V0OworICAKKyAg cGNzYmFkc3RyOgorICAKKyEgICBzcHJpbnRmKGVycm1zZywgIkJhZCBjaGFyc2V0IHN5bnRheDog JS4qc1xuIiwgZXJybXNnX3NpemUgLSAyMiwgc3RyKTsKKyAgCisgIHBjc2Vycm9yOgorICAKKy0t LSAxNTMsMTY0IC0tLS0KKyAgcGNzY2xlYW51cDoKKyAgCisgICAgaWYgKGNidWYpIGZyZWVidWZm ZXIoY2J1Zik7CisrICAgLy9pZiAod3N0cikgZnJlZSh3c3RyKTsKKyAgICByZXR1cm4gY3NldDsK KyAgCisgIHBjc2JhZHN0cjoKKyAgCishICAgc3dwcmludGYoZXJybXNnLCBlcnJtc2dfc2l6ZSwg TCJCYWQgY2hhcnNldCBzeW50YXg6ICUuKnNcbiIsIGVycm1zZ19zaXplIC0gMjIsIHN0cik7Cisg IAorICBwY3NlcnJvcjoKKyAgCisqKioqKioqKioqKioqKioKKyoqKiAxNzEsMTg0ICoqKioKKyAg fQorICAKKyAgCishIGludCBjc21lbWJlcihjaGFyIGMsIGNvbnN0IGNoYXJzZXQgKmNzZXQpCisg IHsKKyAgICByZXR1cm4KKyAgICAgIGFwcGVhcnNpbihjLCBjc2V0LT5pbmxpc3QpIHx8CisgICAg ICAoICFhcHBlYXJzaW4oYywgY3NldC0+b3V0bGlzdCkgJiYKKyEgICAgICAgKCAoY3NldC0+Zmxh Z3MgJiBDU19MQ0FTRSAmJiBpc2xvd2VyKCoodW5zaWduZWQgY2hhciAqKSZjKSkgfHwKKyEgICAg ICAgICAoY3NldC0+ZmxhZ3MgJiBDU19VQ0FTRSAmJiBpc3VwcGVyKCoodW5zaWduZWQgY2hhciAq KSZjKSkgfHwKKyEgICAgICAgICAoY3NldC0+ZmxhZ3MgJiBDU19ESUdJVCAmJiBpc2RpZ2l0KCoo dW5zaWduZWQgY2hhciAqKSZjKSkgfHwKKyAgICAgICAgICAoY3NldC0+ZmxhZ3MgJiBDU19OVUwg ICAmJiAhYyAgICAgICAgICAgICAgICAgICAgICAgICAgICkgICApICk7CisgIH0KKyAgCistLS0g MTc2LDE4OSAtLS0tCisgIH0KKyAgCisgIAorISBpbnQgY3NtZW1iZXIod2NoYXJfdCBjLCBjb25z dCBjaGFyc2V0ICpjc2V0KQorICB7CisgICAgcmV0dXJuCisgICAgICBhcHBlYXJzaW4oYywgY3Nl dC0+aW5saXN0KSB8fAorICAgICAgKCAhYXBwZWFyc2luKGMsIGNzZXQtPm91dGxpc3QpICYmCish ICAgICAgICAgKCAoY3NldC0+ZmxhZ3MgJiBDU19MQ0FTRSAmJiBpc3dsb3dlcigqKHdpbnRfdCAq KSZjKSkgfHwKKyEgICAgICAgICAgIChjc2V0LT5mbGFncyAmIENTX1VDQVNFICYmIGlzd3VwcGVy KCood2ludF90ICopJmMpKSB8fAorISAgICAgICAgICAgKGNzZXQtPmZsYWdzICYgQ1NfRElHSVQg JiYgaXN3ZGlnaXQoKih3aW50X3QgKikmYykpIHx8CisgICAgICAgICAgKGNzZXQtPmZsYWdzICYg Q1NfTlVMICAgJiYgIWMgICAgICAgICAgICAgICAgICAgICAgICAgICApICAgKSApOworICB9Cisg IAorKioqKioqKioqKioqKioqCisqKiogMTkxLDIwNiAqKioqCisgIHsKKyAgICBjaGFyc2V0ICpj c3U7CisgICAgYnVmZmVyICppbmJ1ZiA9IE5VTEwsICpvdXRidWYgPSBOVUxMOworISAgIGNoYXIg Kmxpc3RzWzRdLCAqKmxpc3QsICpwLCBudWxsY2hhciA9ICdcMCc7CisgIAorICAgIGNzdSA9IG1h bGxvYyhzaXplb2YgKGNoYXJzZXQpKTsKKyAgICBpZiAoIWNzdSkgeworISAgICAgc3RyY3B5KGVy cm1zZyxvdXRvZm1lbSk7CisgICAgICBnb3RvIGNzdWRlcnJvcjsKKyAgICB9CishICAgaW5idWYg PSBuZXdidWZmZXIoc2l6ZW9mIChjaGFyKSwgZXJybXNnKTsKKyAgICBpZiAoKmVycm1zZykgZ290 byBjc3VkZXJyb3I7CishICAgb3V0YnVmID0gbmV3YnVmZmVyKHNpemVvZiAoY2hhciksIGVycm1z Zyk7CisgICAgaWYgKCplcnJtc2cpIGdvdG8gY3N1ZGVycm9yOworICAgIGNzdS0+aW5saXN0ID0g Y3N1LT5vdXRsaXN0ID0gTlVMTDsKKyAgICBjc3UtPmZsYWdzID0gIHUgID8gIGNzZXQxLT5mbGFn cyB8ICBjc2V0Mi0+ZmxhZ3MKKy0tLSAxOTYsMjExIC0tLS0KKyAgeworICAgIGNoYXJzZXQgKmNz dTsKKyAgICBidWZmZXIgKmluYnVmID0gTlVMTCwgKm91dGJ1ZiA9IE5VTEw7CishICAgd2NoYXJf dCAqbGlzdHNbNF0sICoqbGlzdCwgKnAsIG51bGxjaGFyID0gTCdcMCc7CisgIAorICAgIGNzdSA9 IG1hbGxvYyhzaXplb2YgKGNoYXJzZXQpKTsKKyAgICBpZiAoIWNzdSkgeworISAgICAgd2NzY3B5 KGVycm1zZyxvdXRvZm1lbSk7CisgICAgICBnb3RvIGNzdWRlcnJvcjsKKyAgICB9CishICAgaW5i dWYgPSBuZXdidWZmZXIoc2l6ZW9mICh3Y2hhcl90KSwgZXJybXNnKTsKKyAgICBpZiAoKmVycm1z ZykgZ290byBjc3VkZXJyb3I7CishICAgb3V0YnVmID0gbmV3YnVmZmVyKHNpemVvZiAod2NoYXJf dCksIGVycm1zZyk7CisgICAgaWYgKCplcnJtc2cpIGdvdG8gY3N1ZGVycm9yOworICAgIGNzdS0+ aW5saXN0ID0gY3N1LT5vdXRsaXN0ID0gTlVMTDsKKyAgICBjc3UtPmZsYWdzID0gIHUgID8gIGNz ZXQxLT5mbGFncyB8ICBjc2V0Mi0+ZmxhZ3MKK2RpZmYgLWMgLi9jaGFyc2V0LmggLi4vUGFyMTUy LXVuaWNvZGUvY2hhcnNldC5oCisqKiogLi9jaGFyc2V0LmgJMjAwMS0wMy0wOSAwMzo1MDozNS4w MDAwMDAwMDAgKzAzMDAKKy0tLSAuLi9QYXIxNTItdW5pY29kZS9jaGFyc2V0LmgJMjAxOS0xMC0y NiAxNzoyMTowOC41NDQwNTA4NTMgKzAzMDAKKyoqKioqKioqKioqKioqKgorKioqIDEsOSAqKioq CishIC8qKioqKioqKioqKioqKioqKioqKiovCishIC8qIGNoYXJzZXQuaCAgICAgICAgICovCish IC8qIGZvciBQYXIgMS41MiAgICAgICovCishIC8qIENvcHlyaWdodCAyMDAxIGJ5ICovCishIC8q IEFkYW0gTS4gQ29zdGVsbG8gICovCishIC8qKioqKioqKioqKioqKioqKioqKiovCisgIAorICAv KiBUaGlzIGlzIEFOU0kgQyBjb2RlIChDODkpLiAqLworICAKKy0tLSAxLDExIC0tLS0KKyEgLyoq KioqKioqKioqKioqKioqKioqKioqLworISAvKiBjaGFyc2V0LmggICAgICAgICAgICovCishIC8q IGZvciBQYXIgMS41Mi1pMThuLjQgKi8KKyEgLyogQ29weXJpZ2h0IDIwMDEgYnkgICAqLworISAv KiBBZGFtIE0uIENvc3RlbGxvICAgICovCishIC8qIE1vZGlmaWVkIGJ5ICAgICAgICAgKi8KKyEg LyogSsOpcsO0bWUgUG91aWxsZXIgICAgICovCishIC8qKioqKioqKioqKioqKioqKioqKioqKi8K KyAgCisgIC8qIFRoaXMgaXMgQU5TSSBDIGNvZGUgKEM4OSkuICovCisgIAorKioqKioqKioqKioq KioqCisqKiogMTEsMjQgKioqKgorICAvKiBOb3RlOiBUaG9zZSBmdW5jdGlvbnMgZGVjbGFyZWQg aGVyZSB3aGljaCBkbyBub3QgdXNlIGVycm1zZyAgICAqLworICAvKiBhbHdheXMgc3VjY2VlZCwg cHJvdmlkZWQgdGhhdCB0aGV5IGFyZSBwYXNzZWQgdmFsaWQgYXJndW1lbnRzLiAqLworICAKKyEg CisgICNpbmNsdWRlICJlcnJtc2cuaCIKKyAgCisgIAorICB0eXBlZGVmIHN0cnVjdCBjaGFyc2V0 IGNoYXJzZXQ7CisgIAorICAKKyEgY2hhcnNldCAqcGFyc2VjaGFyc2V0KGNvbnN0IGNoYXIgKnN0 ciwgZXJybXNnX3QgZXJybXNnKTsKKyAgCisgICAgLyogcGFyc2VjaGFyc2V0KHN0cixlcnJtc2cp IHJldHVybnMgdGhlIHNldCBvZiBjaGFyYWN0ZXJzIGRlZmluZWQgYnkgKi8KKyAgICAvKiBzdHIg dXNpbmcgY2hhcnNldCBzeW50YXggKHNlZSBwYXIuZG9jKS4gIFJldHVybnMgTlVMTCBvbiBmYWls dXJlLiAqLworLS0tIDEzLDI2IC0tLS0KKyAgLyogTm90ZTogVGhvc2UgZnVuY3Rpb25zIGRlY2xh cmVkIGhlcmUgd2hpY2ggZG8gbm90IHVzZSBlcnJtc2cgICAgKi8KKyAgLyogYWx3YXlzIHN1Y2Nl ZWQsIHByb3ZpZGVkIHRoYXQgdGhleSBhcmUgcGFzc2VkIHZhbGlkIGFyZ3VtZW50cy4gKi8KKyAg CishICNpbmNsdWRlIDx3Y2hhci5oPgorICAjaW5jbHVkZSAiZXJybXNnLmgiCisgIAorICAKKyAg dHlwZWRlZiBzdHJ1Y3QgY2hhcnNldCBjaGFyc2V0OworICAKKyAgCishIGNoYXJzZXQgKnBhcnNl Y2hhcnNldChjb25zdCB3Y2hhcl90ICpzdHIsIGVycm1zZ190IGVycm1zZyk7CisgIAorICAgIC8q IHBhcnNlY2hhcnNldChzdHIsZXJybXNnKSByZXR1cm5zIHRoZSBzZXQgb2YgY2hhcmFjdGVycyBk ZWZpbmVkIGJ5ICovCisgICAgLyogc3RyIHVzaW5nIGNoYXJzZXQgc3ludGF4IChzZWUgcGFyLmRv YykuICBSZXR1cm5zIE5VTEwgb24gZmFpbHVyZS4gKi8KKyoqKioqKioqKioqKioqKgorKioqIDMw LDM2ICoqKioKKyAgICAvKiAqY3NldC4gIGNzZXQgbWF5IG5vdCBiZSB1c2VkIGFmdGVyIHRoaXMg Y2FsbC4gICAgICAqLworICAKKyAgCishIGludCBjc21lbWJlcihjaGFyIGMsIGNvbnN0IGNoYXJz ZXQgKmNzZXQpOworICAKKyAgICAvKiBjc21lbWJlcihjLGNzZXQpIHJldHVybnMgMSBpZiBjIGlz IGEgbWVtYmVyIG9mICpjc2V0LCAwIG90aGVyd2lzZS4gKi8KKyAgCistLS0gMzIsMzggLS0tLQor ICAgIC8qICpjc2V0LiAgY3NldCBtYXkgbm90IGJlIHVzZWQgYWZ0ZXIgdGhpcyBjYWxsLiAgICAg ICovCisgIAorICAKKyEgaW50IGNzbWVtYmVyKHdjaGFyX3QgYywgY29uc3QgY2hhcnNldCAqY3Nl dCk7CisgIAorICAgIC8qIGNzbWVtYmVyKGMsY3NldCkgcmV0dXJucyAxIGlmIGMgaXMgYSBtZW1i ZXIgb2YgKmNzZXQsIDAgb3RoZXJ3aXNlLiAqLworICAKK2RpZmYgLWMgLi9lcnJtc2cuYyAuLi9Q YXIxNTItdW5pY29kZS9lcnJtc2cuYworKioqIC4vZXJybXNnLmMJMjAwMS0wMy0wOSAwMzo1MDo0 Ni4wMDAwMDAwMDAgKzAzMDAKKy0tLSAuLi9QYXIxNTItdW5pY29kZS9lcnJtc2cuYwkyMDE5LTEw LTI2IDE3OjIxOjA4LjU0NTA1MDg1MyArMDMwMAorKioqKioqKioqKioqKioqCisqKiogMSw5ICoq KioKKyEgLyoqKioqKioqKioqKioqKioqKioqKi8KKyEgLyogZXJybXNnLmMgICAgICAgICAgKi8K KyEgLyogZm9yIFBhciAxLjUyICAgICAgKi8KKyEgLyogQ29weXJpZ2h0IDIwMDEgYnkgKi8KKyEg LyogQWRhbSBNLiBDb3N0ZWxsbyAgKi8KKyEgLyoqKioqKioqKioqKioqKioqKioqKi8KKyAgCisg IC8qIFRoaXMgaXMgQU5TSSBDIGNvZGUgKEM4OSkuICovCisgIAorLS0tIDEsMTEgLS0tLQorISAv KioqKioqKioqKioqKioqKioqKioqKiovCishIC8qIGVycm1zZy5jICAgICAgICAgICAgKi8KKyEg LyogZm9yIFBhciAxLjUyLWkxOG4uNCAqLworISAvKiBDb3B5cmlnaHQgMjAwMSBieSAgICovCish IC8qIEFkYW0gTS4gQ29zdGVsbG8gICAgKi8KKyEgLyogTW9kaWZpZWQgYnkgICAgICAgICAqLwor ISAvKiBKw6lyw7RtZSBQb3VpbGxlciAgICAgKi8KKyEgLyoqKioqKioqKioqKioqKioqKioqKioq LworICAKKyAgLyogVGhpcyBpcyBBTlNJIEMgY29kZSAoQzg5KS4gKi8KKyAgCisqKioqKioqKioq KioqKioKKyoqKiAxMSwxOCAqKioqCisgICNpbmNsdWRlICJlcnJtc2cuaCIgIC8qIE1ha2VzIHN1 cmUgd2UncmUgY29uc2lzdGVudCB3aXRoIHRoZSBkZWNsYXJhdGlvbnMuICovCisgIAorICAKKyEg Y29uc3QgY2hhciAqIGNvbnN0IG91dG9mbWVtID0KKyEgICAiT3V0IG9mIG1lbW9yeS5cbiI7Cisg IAorISBjb25zdCBjaGFyICogY29uc3QgaW1wb3NzaWJpbGl0eSA9CishICAgIkltcG9zc2liaWxp dHkgIyVkIGhhcyBvY2N1cnJlZC4gIFBsZWFzZSByZXBvcnQgaXQuXG4iOworLS0tIDEzLDIzIC0t LS0KKyAgI2luY2x1ZGUgImVycm1zZy5oIiAgLyogTWFrZXMgc3VyZSB3ZSdyZSBjb25zaXN0ZW50 IHdpdGggdGhlIGRlY2xhcmF0aW9ucy4gKi8KKyAgCisgIAorISBjb25zdCB3Y2hhcl90ICogY29u c3Qgb3V0b2ZtZW0gPQorISAgIEwiT3V0IG9mIG1lbW9yeS5cbiI7CisgIAorISBjb25zdCB3Y2hh cl90ICogY29uc3QgbWJzZXJyb3IgPQorISAgIEwiRXJyb3IgaW4gaW5wdXQgbXVsdGlieXRlIHN0 cmluZy5cbiI7CishIAorISBjb25zdCB3Y2hhcl90ICogY29uc3QgaW1wb3NzaWJpbGl0eSA9Cish ICAgTCJJbXBvc3NpYmlsaXR5ICMlZCBoYXMgb2NjdXJyZWQuICBQbGVhc2UgcmVwb3J0IGl0Llxu IjsKK2RpZmYgLWMgLi9lcnJtc2cuaCAuLi9QYXIxNTItdW5pY29kZS9lcnJtc2cuaAorKioqIC4v ZXJybXNnLmgJMjAwMS0wMy0wOSAwMzo1MDo1Ni4wMDAwMDAwMDAgKzAzMDAKKy0tLSAuLi9QYXIx NTItdW5pY29kZS9lcnJtc2cuaAkyMDE5LTEwLTI2IDE3OjIxOjA4LjU0NTA1MDg1MyArMDMwMAor KioqKioqKioqKioqKioqCisqKiogMSw5ICoqKioKKyEgLyoqKioqKioqKioqKioqKioqKioqKi8K KyEgLyogZXJybXNnLmggICAgICAgICAgKi8KKyEgLyogZm9yIFBhciAxLjUyICAgICAgKi8KKyEg LyogQ29weXJpZ2h0IDIwMDEgYnkgKi8KKyEgLyogQWRhbSBNLiBDb3N0ZWxsbyAgKi8KKyEgLyoq KioqKioqKioqKioqKioqKioqKi8KKyAgCisgIC8qIFRoaXMgaXMgQU5TSSBDIGNvZGUgKEM4OSku ICovCisgIAorLS0tIDEsMTEgLS0tLQorISAvKioqKioqKioqKioqKioqKioqKioqKiovCishIC8q IGVycm1zZy5oICAgICAgICAgICAgKi8KKyEgLyogZm9yIFBhciAxLjUyLWkxOG4uNCAqLworISAv KiBDb3B5cmlnaHQgMjAwMSBieSAgICovCishIC8qIEFkYW0gTS4gQ29zdGVsbG8gICAgKi8KKyEg LyogTW9kaWZpZWQgYnkgICAgICAgICAqLworISAvKiBKw6lyw7RtZSBQb3VpbGxlciAgICAgKi8K KyEgLyoqKioqKioqKioqKioqKioqKioqKioqLworICAKKyAgLyogVGhpcyBpcyBBTlNJIEMgY29k ZSAoQzg5KS4gKi8KKyAgCisqKioqKioqKioqKioqKioKKyoqKiAxMSwxNyAqKioqCisgICNpZm5k ZWYgRVJSTVNHX0gKKyAgI2RlZmluZSBFUlJNU0dfSAorICAKKyEgCisgICNkZWZpbmUgZXJybXNn X3NpemUgMTYzCisgIAorICAvKiBUaGlzIGlzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBjaGFyYWN0 ZXJzIHRoYXQgd2lsbCAgKi8KKy0tLSAxMywxOSAtLS0tCisgICNpZm5kZWYgRVJSTVNHX0gKKyAg I2RlZmluZSBFUlJNU0dfSAorICAKKyEgI2luY2x1ZGUgPHdjaGFyLmg+CisgICNkZWZpbmUgZXJy bXNnX3NpemUgMTYzCisgIAorICAvKiBUaGlzIGlzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBjaGFy YWN0ZXJzIHRoYXQgd2lsbCAgKi8KKyoqKioqKioqKioqKioqKgorKioqIDIwLDI2ICoqKioKKyAg LyogdmVyc2lvbnMgb2YgdGhpcyBoZWFkZXIgZmlsZS4gICAgICAgICAgICAgICAgICAgICAgICov CisgIAorICAKKyEgdHlwZWRlZiBjaGFyIGVycm1zZ190W2Vycm1zZ19zaXplXTsKKyAgCisgIC8q IEFueSBmdW5jdGlvbiB3aGljaCB0YWtlcyB0aGUgYXJndW1lbnQgZXJybXNnX3QgZXJybXNnIG11 c3QsIGJlZm9yZSAqLworICAvKiByZXR1cm5pbmcsIGVpdGhlciBzZXQgZXJybXNnWzBdIHRvICdc MCcgKGluZGljYXRpbmcgc3VjY2VzcyksIG9yICAgKi8KKy0tLSAyMiwyOCAtLS0tCisgIC8qIHZl cnNpb25zIG9mIHRoaXMgaGVhZGVyIGZpbGUuICAgICAgICAgICAgICAgICAgICAgICAqLworICAK KyAgCishIHR5cGVkZWYgd2NoYXJfdCBlcnJtc2dfdFtlcnJtc2dfc2l6ZV07CisgIAorICAvKiBB bnkgZnVuY3Rpb24gd2hpY2ggdGFrZXMgdGhlIGFyZ3VtZW50IGVycm1zZ190IGVycm1zZyBtdXN0 LCBiZWZvcmUgKi8KKyAgLyogcmV0dXJuaW5nLCBlaXRoZXIgc2V0IGVycm1zZ1swXSB0byAnXDAn IChpbmRpY2F0aW5nIHN1Y2Nlc3MpLCBvciAgICovCisqKioqKioqKioqKioqKioKKyoqKiAyOCwz NyAqKioqCisgIC8qIGJlaW5nIGNhcmVmdWwgbm90IHRvIG92ZXJydW4gdGhlIHNwYWNlLiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAqLworICAKKyAgCishIGV4dGVybiBjb25zdCBjaGFyICog Y29uc3Qgb3V0b2ZtZW07CisgICAgLyogIk91dCBvZiBtZW1vcnkuXG4iICovCisgIAorISBleHRl cm4gY29uc3QgY2hhciAqIGNvbnN0IGltcG9zc2liaWxpdHk7CisgICAgLyogIkltcG9zc2liaWxp dHkgIyVkIGhhcyBvY2N1cnJlZC4gIFBsZWFzZSByZXBvcnQgaXQuXG4iICovCisgIAorICAKKy0t LSAzMCw0MiAtLS0tCisgIC8qIGJlaW5nIGNhcmVmdWwgbm90IHRvIG92ZXJydW4gdGhlIHNwYWNl LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAKKyAgCishIGV4dGVybiBjb25zdCB3 Y2hhcl90ICogY29uc3Qgb3V0b2ZtZW07CisgICAgLyogIk91dCBvZiBtZW1vcnkuXG4iICovCisg IAorISBleHRlcm4gY29uc3Qgd2NoYXJfdCAqIGNvbnN0IG1ic2Vycm9yOworISAgIC8qICJFcnJv ciBpbiBpbnB1dCBtdWx0aWJ5dGUgc3RyaW5nLlxuIiAqLworISAgIAorISBleHRlcm4gY29uc3Qg d2NoYXJfdCAqIGNvbnN0IGltcG9zc2liaWxpdHk7CisgICAgLyogIkltcG9zc2liaWxpdHkgIyVk IGhhcyBvY2N1cnJlZC4gIFBsZWFzZSByZXBvcnQgaXQuXG4iICovCisgIAorICAKK2RpZmYgLWMg Li9wYXIuMSAuLi9QYXIxNTItdW5pY29kZS9wYXIuMQorKioqIC4vcGFyLjEJMjAwMS0wNC0zMCAw MToxNjoyMi4wMDAwMDAwMDAgKzA0MDAKKy0tLSAuLi9QYXIxNTItdW5pY29kZS9wYXIuMQkyMDE5 LTEwLTI2IDE3OjIxOjA4LjU0NjA1MDg1MyArMDMwMAorKioqKioqKioqKioqKioqCisqKiogMSw2 ICoqKioKKyAgLlwiKioqKioqKioqKioqKioqKioqKioqCisgIC5cIiogcGFyLjEgICAgICAgICAg ICAgKgorISAuXCIqIGZvciBQYXIgMS41MiAgICAgICoKKyAgLlwiKiBDb3B5cmlnaHQgMjAwMSBi eSAqCisgIC5cIiogQWRhbSBNLiBDb3N0ZWxsbyAgKgorICAuXCIqKioqKioqKioqKioqKioqKioq KioKKy0tLSAxLDYgLS0tLQorICAuXCIqKioqKioqKioqKioqKioqKioqKioKKyAgLlwiKiBwYXIu MSAgICAgICAgICAgICAqCishIC5cIiogZm9yIFBhciAxLjUyIGkxOG4gKgorICAuXCIqIENvcHly aWdodCAyMDAxIGJ5ICoKKyAgLlwiKiBBZGFtIE0uIENvc3RlbGxvICAqCisgIC5cIioqKioqKioq KioqKioqKioqKioqKgorZGlmZiAtYyAuL3Bhci5jIC4uL1BhcjE1Mi11bmljb2RlL3Bhci5jCisq KiogLi9wYXIuYwkyMDAxLTA0LTAyIDA4OjI1OjU3LjAwMDAwMDAwMCArMDQwMAorLS0tIC4uL1Bh cjE1Mi11bmljb2RlL3Bhci5jCTIwMTktMTAtMjYgMTc6MjE6MDguNTQ3MDUwODUzICswMzAwCisq KioqKioqKioqKioqKioKKyoqKiAxLDkgKioqKgorISAvKioqKioqKioqKioqKioqKioqKioqLwor ISAvKiBwYXIuYyAgICAgICAgICAgICAqLworISAvKiBmb3IgUGFyIDEuNTIgICAgICAqLworISAv KiBDb3B5cmlnaHQgMjAwMSBieSAqLworISAvKiBBZGFtIE0uIENvc3RlbGxvICAqLworISAvKioq KioqKioqKioqKioqKioqKioqLworICAKKyAgLyogVGhpcyBpcyBBTlNJIEMgY29kZSAoQzg5KS4g Ki8KKyAgCistLS0gMSwxMSAtLS0tCishIC8qKioqKioqKioqKioqKioqKioqKioqKi8KKyEgLyog cGFyLmMgICAgICAgICAgICAgICAqLworISAvKiBmb3IgUGFyIDEuNTItaTE4bi40ICovCishIC8q IENvcHlyaWdodCAyMDAxIGJ5ICAgKi8KKyEgLyogQWRhbSBNLiBDb3N0ZWxsbyAgICAqLworISAv KiBNb2RpZmllZCBieSAgICAgICAgICovCishIC8qIErDqXLDtG1lIFBvdWlsbGVyICAgICAqLwor ISAvKioqKioqKioqKioqKioqKioqKioqKiovCisgIAorICAvKiBUaGlzIGlzIEFOU0kgQyBjb2Rl IChDODkpLiAqLworICAKKyoqKioqKioqKioqKioqKgorKioqIDEyLDIyICoqKioKKyAgI2luY2x1 ZGUgImJ1ZmZlci5oIiAgICAvKiBBbHNvIGluY2x1ZGVzIDxzdGRkZWYuaD4uICovCisgICNpbmNs dWRlICJyZWZvcm1hdC5oIgorICAKKyEgI2luY2x1ZGUgPGN0eXBlLmg+CisgICNpbmNsdWRlIDxs b2NhbGUuaD4KKyAgI2luY2x1ZGUgPHN0ZGlvLmg+CisgICNpbmNsdWRlIDxzdGRsaWIuaD4KKyAg I2luY2x1ZGUgPHN0cmluZy5oPgorICAKKyAgI3VuZGVmIE5VTEwKKyAgI2RlZmluZSBOVUxMICgo dm9pZCAqKSAwKQorLS0tIDE0LDI3IC0tLS0KKyAgI2luY2x1ZGUgImJ1ZmZlci5oIiAgICAvKiBB bHNvIGluY2x1ZGVzIDxzdGRkZWYuaD4uICovCisgICNpbmNsdWRlICJyZWZvcm1hdC5oIgorICAK KyEgI2luY2x1ZGUgPGxhbmdpbmZvLmg+CishICNpbmNsdWRlIDx3Y2hhci5oPgorISAjaW5jbHVk ZSA8d2N0eXBlLmg+CisgICNpbmNsdWRlIDxsb2NhbGUuaD4KKyAgI2luY2x1ZGUgPHN0ZGlvLmg+ CisgICNpbmNsdWRlIDxzdGRsaWIuaD4KKyAgI2luY2x1ZGUgPHN0cmluZy5oPgorKyAjaW5jbHVk ZSA8ZXJybm8uaD4KKyAgCisgICN1bmRlZiBOVUxMCisgICNkZWZpbmUgTlVMTCAoKHZvaWQgKikg MCkKKyoqKioqKioqKioqKioqKgorKioqIDI1LDgwICoqKioKKyAgI2RlZmluZSBmcmVlKHB0cikK KyAgI2VuZGlmCisgIAorLSAKKy0gLyo9PT0KKy0gCistIFJlZ2FyZGluZyBjaGFyIGFuZCB1bnNp Z25lZCBjaGFyOiAgQU5TSSBDIGlzIGEgbmlnaHRtYXJlIGluIHRoaXMKKy0gcmVzcGVjdC4gIFNv bWUgZnVuY3Rpb25zLCBsaWtlIHB1dHMoKSwgc3RyY2hyKCksIGFuZCBnZXRlbnYoKSwgdXNlIGNo YXIKKy0gb3IgY2hhciosIHNvIHRoZXkgd29yayB3ZWxsIHdpdGggY2hhcmFjdGVyIGNvbnN0YW50 cyBsaWtlICdhJywgd2hpY2gKKy0gYXJlIGNoYXIsIGFuZCB3aXRoIGFyZ3YsIHdoaWNoIGlzIGNo YXIqKi4gIEJ1dCBzZXZlcmFsIG90aGVyIGZ1bmN0aW9ucywKKy0gbGlrZSBnZXRjaGFyKCksIHB1 dGNoYXIoKSwgYW5kIGlzZGlnaXQoKSwgdXNlIHVuc2lnbmVkIGNoYXIgKGNvbnZlcnRlZAorLSB0 by9mcm9tIGludCkuICBUaGVyZWZvcmUgaW5ub2NlbnQtbG9va2luZyBjb2RlIGNhbiBiZSB3cm9u ZywgZm9yCistIGV4YW1wbGU6CistIAorLSAgICAgaW50IGMgPSBnZXRjaGFyKCk7CistICAgICBp ZiAoYyA9PSAnYScpIC4uLgorLSAKKy0gVGhpcyBpcyB3cm9uZyBiZWNhdXNlICdhJyBpcyBjaGFy IChjb252ZXJ0ZWQgdG8gaW50KSBhbmQgY291bGQgYmUKKy0gbmVnYXRpdmUsIGJ1dCBnZXRjaGFy KCkgcmV0dXJucyB1bnNpZ25lZCBjaGFyIChjb252ZXJ0ZWQgdG8gaW50KSwgc28gYworLSBpcyBh bHdheXMgbm9ubmVnYXRpdmUgb3IgRU9GLiAgRm9yIHNpbWlsYXIgcmVhc29ucywgaXQgaXMgd3Jv bmcgdG8gcGFzcworLSBhIGNoYXIgdG8gYSBmdW5jdGlvbiB0aGF0IGV4cGVjdHMgYW4gdW5zaWdu ZWQgY2hhcjoKKy0gCistICAgICBwdXRjaGFyKCdcbicpOworLSAgICAgaWYgKGlzZGlnaXQoYXJn dlsxXVswXSkpIC4uLgorLSAKKy0gSW5ldml0YWJseSwgd2UgbmVlZCB0byBjb252ZXJ0IGJldHdl ZW4gY2hhciBhbmQgdW5zaWduZWQgY2hhci4gIFRoaXMgY2FuCistIGJlIGRvbmUgYnkgaW50ZWdy YWwgY29udmVyc2lvbiAoY2FzdGluZyBvciBhc3NpZ25pbmcgYSBjaGFyIHRvIHVuc2lnbmVkCist IGNoYXIgb3IgdmljZSB2ZXJzYSksIG9yIGJ5IGFsaWFzaW5nIChjb252ZXJ0aW5nIGEgcG9pbnRl ciB0byBjaGFyIHRvCistIGEgcG9pbnRlciB0byB1bnNpZ25lZCBjaGFyIChvciB2aWNlIHZlcnNh KSBhbmQgdGhlbiBkZXJlZmVyZW5jaW5nCistIGl0KS4gIEFOU0kgQyByZXF1aXJlcyB0aGF0IGlu dGVncmFsIGNvbnZlcnNpb24gYWx0ZXJzIHRoZSBiaXRzIHdoZW4gdGhlCistIHVuc2lnbmVkIHZh bHVlIGlzIG5vdCByZXByZXNlbnRhYmxlIGluIHRoZSBzaWduZWQgdHlwZSBhbmQgdGhlIHNpZ25l ZAorLSB0eXBlIGRvZXMgbm90IHVzZSB0d28ncyBjb21wbGVtZW50IHJlcHJlc2VudGF0aW9uLiAg QWxpYXNpbmcsIG9uIHRoZQorLSBvdGhlciBoYW5kLCBwcmVzZXJ2ZXMgdGhlIGJpdHMuICBBbHRo b3VnaCB0aGUgQyBzdGFuZGFyZCBpcyBub3QgYXQgYWxsCistIGNsZWFyIGFib3V0IHdoaWNoIHNv cnQgb2YgY29udmVyc2lvbiBpcyBhcHByb3ByaWF0ZSBmb3IgbWFraW5nIHRoZQorLSBzdGFuZGFy ZCBsaWJyYXJ5IGZ1bmN0aW9ucyBpbnRlcm9wZXJhdGUsIEkgdGhpbmsgcHJlc2VydmluZyB0aGUg Yml0cworLSBpcyB3aGF0IGlzIG5lZWRlZC4gIFVuZGVyIHRoYXQgYXNzdW1wdGlvbiwgaGVyZSBh cmUgc29tZSBleGFtcGxlcyBvZgorLSBjb3JyZWN0IGNvZGU6CistIAorLSAgICAgaW50IGMgPSBn ZXRjaGFyKCk7CistICAgICBjaGFyIGNoOworLSAKKy0gICAgIGlmIChjICE9IEVPRikgeworLSAg ICAgICAqKHVuc2lnbmVkIGNoYXIgKikmY2ggPSBjOworLSAgICAgICBpZiAoY2ggPT0gJ2EnKSAu Li4KKy0gICAgICAgaWYgKGlzZGlnaXQoYykpIC4uLgorLSAgICAgfQorLSAKKy0gICAgIGNoYXIg KnMgPSAuLi4KKy0gICAgIGlmIChpc2RpZ2l0KCoodW5zaWduZWQgY2hhciAqKXMpKSAuLi4KKy0g CistID09PSovCistIAorLSAKKyAgc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCB1c2FnZW1zZyA9 CisgICJcbiIKKyAgIk9wdGlvbnMgZm9yIHBhcjpcbiIKKy0tLSAzMCwzNSAtLS0tCisqKioqKioq KioqKioqKioKKyoqKiAxMjYsMTMyICoqKioKKyAgICAgICAgICAgICAgICAgICAgLyogbGluZSwg b3IgdGhlIGZhbGxiYWNrIHByZWxlbiBhbmQgc3VmbGVuICAgICAgICovCisgICAgICAgICAgICAg ICAgICAgIC8qIG9mIHRoZSBJUCBjb250YWluaW5nIGEgbm9uLWJvZGlsZXNzIGxpbmUuICAgICAq LworICAgIGxmbGFnX3QgZmxhZ3M7ICAvKiBCb29sZWFuIHByb3BlcnRpZXMgKHNlZSBiZWxvdyku ICAgICAgICAgICAgICAgKi8KKyEgICBjaGFyIHJjOyAgICAgICAgLyogVGhlIHJlcGVhdGVkIGNo YXJhY3RlciBvZiBhIGJvZGlsZXNzIGxpbmUuICAgICovCisgIH0gbGluZXByb3A7CisgIAorICAv KiBGbGFncyBmb3IgbWFya2luZyBib29sZWFuIHByb3BlcnRpZXM6ICovCistLS0gODEsODcgLS0t LQorICAgICAgICAgICAgICAgICAgICAvKiBsaW5lLCBvciB0aGUgZmFsbGJhY2sgcHJlbGVuIGFu ZCBzdWZsZW4gICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgLyogb2YgdGhlIElQIGNvbnRh aW5pbmcgYSBub24tYm9kaWxlc3MgbGluZS4gICAgICovCisgICAgbGZsYWdfdCBmbGFnczsgIC8q IEJvb2xlYW4gcHJvcGVydGllcyAoc2VlIGJlbG93KS4gICAgICAgICAgICAgICAqLworISAgIHdj aGFyX3QgcmM7ICAgICAvKiBUaGUgcmVwZWF0ZWQgY2hhcmFjdGVyIG9mIGEgYm9kaWxlc3MgbGlu ZS4gICAgKi8KKyAgfSBsaW5lcHJvcDsKKyAgCisgIC8qIEZsYWdzIGZvciBtYXJraW5nIGJvb2xl YW4gcHJvcGVydGllczogKi8KKyoqKioqKioqKioqKioqKgorKioqIDE0MywxNTYgKioqKgorICAj ZGVmaW5lICAgaXN2YWNhbnQocHJvcCkgKGlzYm9kaWxlc3MocHJvcCkgJiYgKHByb3ApLT5yYyA9 PSAnICcpCisgIAorICAKKyEgc3RhdGljIGludCBkaWd0b2ludChjaGFyIGMpCisgIAorICAvKiBS ZXR1cm5zIHRoZSB2YWx1ZSByZXByZXNlbnRlZCBieSB0aGUgZGlnaXQgYywgb3IgLTEgaWYgYyBp cyBub3QgYSBkaWdpdC4gKi8KKyAgeworISAgIGNvbnN0IGNoYXIgKnAsICogY29uc3QgZGlnaXRz ID0gIjAxMjM0NTY3ODkiOworICAKKyAgICBpZiAoIWMpIHJldHVybiAtMTsKKyEgICBwID0gc3Ry Y2hyKGRpZ2l0cyxjKTsKKyAgICByZXR1cm4gIHAgID8gIHAgLSBkaWdpdHMgIDogIC0xOworICAK KyAgICAvKiBXZSBjYW4ndCBzaW1wbHkgcmV0dXJuIGMgLSAnMCcgYmVjYXVzZSB0aGlzIGlzIEFO U0kgQyBjb2RlLCAgKi8KKy0tLSA5OCwxMTEgLS0tLQorICAjZGVmaW5lICAgaXN2YWNhbnQocHJv cCkgKGlzYm9kaWxlc3MocHJvcCkgJiYgKHByb3ApLT5yYyA9PSAnICcpCisgIAorICAKKyEgc3Rh dGljIGludCBkaWd0b2ludCh3Y2hhcl90IGMpCisgIAorICAvKiBSZXR1cm5zIHRoZSB2YWx1ZSBy ZXByZXNlbnRlZCBieSB0aGUgZGlnaXQgYywgb3IgLTEgaWYgYyBpcyBub3QgYSBkaWdpdC4gKi8K KyAgeworISAgIGNvbnN0IHdjaGFyX3QgKnAsICogY29uc3QgZGlnaXRzID0gTCIwMTIzNDU2Nzg5 IjsKKyAgCisgICAgaWYgKCFjKSByZXR1cm4gLTE7CishICAgcCA9IHdjc2NocihkaWdpdHMsYyk7 CisgICAgcmV0dXJuICBwICA/ICBwIC0gZGlnaXRzICA6ICAtMTsKKyAgCisgICAgLyogV2UgY2Fu J3Qgc2ltcGx5IHJldHVybiBjIC0gJzAnIGJlY2F1c2UgdGhpcyBpcyBBTlNJIEMgY29kZSwgICov CisqKioqKioqKioqKioqKioKKyoqKiAxNjEsMTY3ICoqKioKKyAgfQorICAKKyAgCishIHN0YXRp YyBpbnQgc3RydG91ZGVjKGNvbnN0IGNoYXIgKnMsIGludCAqcG4pCisgIAorICAvKiBDb252ZXJ0 cyB0aGUgbG9uZ2VzdCBwcmVmaXggb2Ygc3RyaW5nIHMgY29uc2lzdGluZyBvZiBkZWNpbWFsICAg Ki8KKyAgLyogZGlnaXRzIHRvIGFuIGludGVnZXIsIHdoaWNoIGlzIHN0b3JlZCBpbiAqcG4uICBO b3JtYWxseSByZXR1cm5zICovCistLS0gMTE2LDEyMiAtLS0tCisgIH0KKyAgCisgIAorISBzdGF0 aWMgaW50IHN0cnRvdWRlYyhjb25zdCB3Y2hhcl90ICpzLCBpbnQgKnBuKQorICAKKyAgLyogQ29u dmVydHMgdGhlIGxvbmdlc3QgcHJlZml4IG9mIHN0cmluZyBzIGNvbnNpc3Rpbmcgb2YgZGVjaW1h bCAgICovCisgIC8qIGRpZ2l0cyB0byBhbiBpbnRlZ2VyLCB3aGljaCBpcyBzdG9yZWQgaW4gKnBu LiAgTm9ybWFsbHkgcmV0dXJucyAqLworKioqKioqKioqKioqKioqCisqKiogMTg3LDE5MyAqKioq CisgIAorICAKKyAgc3RhdGljIHZvaWQgcGFyc2VhcmcoCishICAgY29uc3QgY2hhciAqYXJnLCBp bnQgKnBoZWxwLCBpbnQgKnB2ZXJzaW9uLCBjaGFyc2V0ICpib2R5Y2hhcnMsIGNoYXJzZXQKKyAg ICAqcHJvdGVjdGNoYXJzLCBjaGFyc2V0ICpxdW90ZWNoYXJzLCBpbnQgKnBoYW5nLCBpbnQgKnBw cmVmaXgsIGludCAqcHJlcGVhdCwKKyAgICBpbnQgKnBzdWZmaXgsIGludCAqcFRhYiwgaW50ICpw d2lkdGgsIGludCAqcGJvZHksIGludCAqcGNhcCwgaW50ICpwZGl2LCBpbnQKKyAgICAqcEVyciwg aW50ICpwZXhwZWwsIGludCAqcGZpdCwgaW50ICpwZ3Vlc3MsIGludCAqcGludmlzLCBpbnQgKnBq dXN0LCBpbnQKKy0tLSAxNDIsMTQ4IC0tLS0KKyAgCisgIAorICBzdGF0aWMgdm9pZCBwYXJzZWFy ZygKKyEgICBjb25zdCB3Y2hhcl90ICphcmcsIGludCAqcGhlbHAsIGludCAqcHZlcnNpb24sIGNo YXJzZXQgKmJvZHljaGFycywgY2hhcnNldAorICAgICpwcm90ZWN0Y2hhcnMsIGNoYXJzZXQgKnF1 b3RlY2hhcnMsIGludCAqcGhhbmcsIGludCAqcHByZWZpeCwgaW50ICpwcmVwZWF0LAorICAgIGlu dCAqcHN1ZmZpeCwgaW50ICpwVGFiLCBpbnQgKnB3aWR0aCwgaW50ICpwYm9keSwgaW50ICpwY2Fw LCBpbnQgKnBkaXYsIGludAorICAgICpwRXJyLCBpbnQgKnBleHBlbCwgaW50ICpwZml0LCBpbnQg KnBndWVzcywgaW50ICpwaW52aXMsIGludCAqcGp1c3QsIGludAorKioqKioqKioqKioqKioqCisq KiogMTk3LDI3NCAqKioqCisgIC8qIGJ5IHRoZSBvdGhlciBwb2ludGVycyBhcyBhcHByb3ByaWF0 ZS4gICpwaGVscCBhbmQgKnB2ZXJzaW9uIGFyZSBib29sZWFuICAqLworICAvKiBmbGFncyBpbmRp Y2F0aW5nIHdoZXRoZXIgdGhlIGhlbHAgYW5kIHZlcnNpb24gb3B0aW9ucyB3ZXJlIHN1cHBsaWVk LiAgICAgKi8KKyAgeworISAgIGNvbnN0IGNoYXIgKnNhdmVhcmcgPSBhcmc7CisgICAgY2hhcnNl dCAqY2hhcnMsICpjaGFuZ2U7CishICAgY2hhciBvYzsKKyAgICBpbnQgbjsKKyAgCisgICAgKmVy cm1zZyA9ICdcMCc7CisgIAorISAgIGlmICgqYXJnID09ICctJykgKythcmc7CishIAorISAgIGlm ICghc3RyY21wKGFyZywgImhlbHAiKSkgeworICAgICAgKnBoZWxwID0gMTsKKyAgICAgIHJldHVy bjsKKyAgICB9CisgIAorISAgIGlmICghc3RyY21wKGFyZywgInZlcnNpb24iKSkgeworICAgICAg KnB2ZXJzaW9uID0gMTsKKyAgICAgIHJldHVybjsKKyAgICB9CisgIAorISAgIGlmICgqYXJnID09 ICdCJyB8fCAqYXJnID09ICdQJyB8fCAqYXJnID09ICdRJyApIHsKKyEgICAgIGNoYXJzID0gICph cmcgPT0gJ0InICA/ICBib2R5Y2hhcnMgICAgOgorISAgICAgICAgICAgICAgKmFyZyA9PSAnUCcg ID8gIHByb3RlY3RjaGFycyA6CishICAgICAgICAgICAvKiAqYXJnID09ICdRJyAqLyAgcXVvdGVj aGFycyAgIDsKKyAgICAgICsrYXJnOworISAgICAgaWYgKCphcmcgIT0gJz0nICAmJiAgKmFyZyAh PSAnKycgICYmICAqYXJnICE9ICctJykgZ290byBiYWRhcmc7CisgICAgICBjaGFuZ2UgPSBwYXJz ZWNoYXJzZXQoYXJnICsgMSwgZXJybXNnKTsKKyAgICAgIGlmIChjaGFuZ2UpIHsKKyEgICAgICAg aWYgICAgICAoKmFyZyA9PSAnPScpICAgY3Nzd2FwKGNoYXJzLGNoYW5nZSk7CishICAgICAgIGVs c2UgaWYgKCphcmcgPT0gJysnKSAgIGNzYWRkKGNoYXJzLGNoYW5nZSxlcnJtc2cpOworISAgICAg ICBlbHNlICAvKiAqYXJnID09ICctJyAqLyBjc3JlbW92ZShjaGFycyxjaGFuZ2UsZXJybXNnKTsK KyAgICAgICAgZnJlZWNoYXJzZXQoY2hhbmdlKTsKKyAgICAgIH0KKyAgICAgIHJldHVybjsKKyAg ICB9CisgIAorISAgIGlmIChpc2RpZ2l0KCoodW5zaWduZWQgY2hhciAqKWFyZykpIHsKKyAgICAg IGlmICghc3RydG91ZGVjKGFyZywgJm4pKSBnb3RvIGJhZGFyZzsKKyAgICAgIGlmIChuIDw9IDgp ICpwcHJlZml4ID0gbjsKKyAgICAgIGVsc2UgKnB3aWR0aCA9IG47CisgICAgfQorICAKKyAgICBm b3IgKDs7KSB7CishICAgICB3aGlsZSAoaXNkaWdpdCgqKHVuc2lnbmVkIGNoYXIgKilhcmcpKSAr K2FyZzsKKyAgICAgIG9jID0gKmFyZzsKKyAgICAgIGlmICghb2MpIGJyZWFrOworICAgICAgbiA9 IC0xOworICAgICAgaWYgKCFzdHJ0b3VkZWMoKythcmcsICZuKSkgZ290byBiYWRhcmc7CishICAg ICBpZiAoICAgb2MgPT0gJ2gnIHx8IG9jID09ICdwJyB8fCBvYyA9PSAncicKKyEgICAgICAgICB8 fCBvYyA9PSAncycgfHwgb2MgPT0gJ1QnIHx8IG9jID09ICd3JykgeworISAgICAgICBpZiAgICAg IChvYyA9PSAnaCcpICAgKnBoYW5nICAgPSAgbiA+PSAwID8gbiA6ICAxOworISAgICAgICBlbHNl IGlmIChvYyA9PSAncCcpICAgKnBwcmVmaXggPSAgbjsKKyEgICAgICAgZWxzZSBpZiAob2MgPT0g J3InKSAgICpwcmVwZWF0ID0gIG4gPj0gMCA/IG4gOiAgMzsKKyEgICAgICAgZWxzZSBpZiAob2Mg PT0gJ3MnKSAgICpwc3VmZml4ID0gIG47CishICAgICAgIGVsc2UgaWYgKG9jID09ICdUJykgICAq cFRhYiAgICA9ICBuID49IDAgPyBuIDogIDg7CishICAgICAgIGVsc2UgIC8qIG9jID09ICd3JyAq LyAqcHdpZHRoICA9ICBuID49IDAgPyBuIDogNzk7CisgICAgICB9CisgICAgICBlbHNlIHsKKyAg ICAgICAgaWYgKG4gPCAwKSBuID0gMTsKKyAgICAgICAgaWYgKG4gPiAxKSBnb3RvIGJhZGFyZzsK KyEgICAgICAgaWYgICAgICAob2MgPT0gJ2InKSAqcGJvZHkgICA9IG47CishICAgICAgIGVsc2Ug aWYgKG9jID09ICdjJykgKnBjYXAgICAgPSBuOworISAgICAgICBlbHNlIGlmIChvYyA9PSAnZCcp ICpwZGl2ICAgID0gbjsKKyEgICAgICAgZWxzZSBpZiAob2MgPT0gJ0UnKSAqcEVyciAgICA9IG47 CishICAgICAgIGVsc2UgaWYgKG9jID09ICdlJykgKnBleHBlbCAgPSBuOworISAgICAgICBlbHNl IGlmIChvYyA9PSAnZicpICpwZml0ICAgID0gbjsKKyEgICAgICAgZWxzZSBpZiAob2MgPT0gJ2cn KSAqcGd1ZXNzICA9IG47CishICAgICAgIGVsc2UgaWYgKG9jID09ICdpJykgKnBpbnZpcyAgPSBu OworISAgICAgICBlbHNlIGlmIChvYyA9PSAnaicpICpwanVzdCAgID0gbjsKKyEgICAgICAgZWxz ZSBpZiAob2MgPT0gJ2wnKSAqcGxhc3QgICA9IG47CishICAgICAgIGVsc2UgaWYgKG9jID09ICdx JykgKnBxdW90ZSAgPSBuOworISAgICAgICBlbHNlIGlmIChvYyA9PSAnUicpICpwUmVwb3J0ID0g bjsKKyEgICAgICAgZWxzZSBpZiAob2MgPT0gJ3QnKSAqcHRvdWNoICA9IG47CisgICAgICAgIGVs c2UgZ290byBiYWRhcmc7CisgICAgICB9CisgICAgfQorLS0tIDE1MiwyMjkgLS0tLQorICAvKiBi eSB0aGUgb3RoZXIgcG9pbnRlcnMgYXMgYXBwcm9wcmlhdGUuICAqcGhlbHAgYW5kICpwdmVyc2lv biBhcmUgYm9vbGVhbiAgKi8KKyAgLyogZmxhZ3MgaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBoZWxw IGFuZCB2ZXJzaW9uIG9wdGlvbnMgd2VyZSBzdXBwbGllZC4gICAgICovCisgIHsKKyEgICBjb25z dCB3Y2hhcl90ICpzYXZlYXJnID0gYXJnOworICAgIGNoYXJzZXQgKmNoYXJzLCAqY2hhbmdlOwor ISAgIHdjaGFyX3Qgb2M7CisgICAgaW50IG47CisgIAorICAgICplcnJtc2cgPSAnXDAnOworKyAg IAorKyAgIGlmICgqYXJnID09IEwnLScpICsrYXJnOworICAKKyEgICBpZiAoIXdjc2NtcChhcmcs IEwiaGVscCIpKSB7CisgICAgICAqcGhlbHAgPSAxOworICAgICAgcmV0dXJuOworICAgIH0KKyAg CishICAgaWYgKCF3Y3NjbXAoYXJnLCBMInZlcnNpb24iKSkgeworICAgICAgKnB2ZXJzaW9uID0g MTsKKyAgICAgIHJldHVybjsKKyAgICB9CisgIAorISAgIGlmICgqYXJnID09IEwnQicgfHwgKmFy ZyA9PSBMJ1AnIHx8ICphcmcgPT0gTCdRJyApIHsKKyEgICAgIGNoYXJzID0gICphcmcgPT0gTCdC JyAgPyAgYm9keWNoYXJzICAgIDoKKyEgICAgICAgICAgICAgICphcmcgPT0gTCdQJyAgPyAgcHJv dGVjdGNoYXJzIDoKKyEgICAgICAgICAgIC8qICphcmcgPT0gTCdRJyAqLyAgcXVvdGVjaGFycyAg IDsKKyAgICAgICsrYXJnOworISAgICAgaWYgKCphcmcgIT0gTCc9JyAgJiYgICphcmcgIT0gTCcr JyAgJiYgICphcmcgIT0gTCctJykgZ290byBiYWRhcmc7CisgICAgICBjaGFuZ2UgPSBwYXJzZWNo YXJzZXQoYXJnICsgMSwgZXJybXNnKTsKKyAgICAgIGlmIChjaGFuZ2UpIHsKKyEgICAgICAgaWYg ICAgICAoKmFyZyA9PSBMJz0nKSAgIGNzc3dhcChjaGFycyxjaGFuZ2UpOworISAgICAgICBlbHNl IGlmICgqYXJnID09IEwnKycpICAgY3NhZGQoY2hhcnMsY2hhbmdlLGVycm1zZyk7CishICAgICAg IGVsc2UgIC8qICphcmcgPT0gTCctJyAqLyBjc3JlbW92ZShjaGFycyxjaGFuZ2UsZXJybXNnKTsK KyAgICAgICAgZnJlZWNoYXJzZXQoY2hhbmdlKTsKKyAgICAgIH0KKyAgICAgIHJldHVybjsKKyAg ICB9CisgIAorISAgIGlmIChpc3dkaWdpdCgqYXJnKSkgeworICAgICAgaWYgKCFzdHJ0b3VkZWMo YXJnLCAmbikpIGdvdG8gYmFkYXJnOworICAgICAgaWYgKG4gPD0gOCkgKnBwcmVmaXggPSBuOwor ICAgICAgZWxzZSAqcHdpZHRoID0gbjsKKyAgICB9CisgIAorICAgIGZvciAoOzspIHsKKyEgICAg IHdoaWxlIChpc3dkaWdpdCgqYXJnKSkgKythcmc7CisgICAgICBvYyA9ICphcmc7CisgICAgICBp ZiAoIW9jKSBicmVhazsKKyAgICAgIG4gPSAtMTsKKyAgICAgIGlmICghc3RydG91ZGVjKCsrYXJn LCAmbikpIGdvdG8gYmFkYXJnOworISAgICAgaWYgKCAgIG9jID09IEwnaCcgfHwgb2MgPT0gTCdw JyB8fCBvYyA9PSBMJ3InCishICAgICAgICAgfHwgb2MgPT0gTCdzJyB8fCBvYyA9PSBMJ1QnIHx8 IG9jID09IEwndycpIHsKKyEgICAgICAgaWYgICAgICAob2MgPT0gTCdoJykgICAqcGhhbmcgICA9 ICBuID49IDAgPyBuIDogIDE7CishICAgICAgIGVsc2UgaWYgKG9jID09IEwncCcpICAgKnBwcmVm aXggPSAgbjsKKyEgICAgICAgZWxzZSBpZiAob2MgPT0gTCdyJykgICAqcHJlcGVhdCA9ICBuID49 IDAgPyBuIDogIDM7CishICAgICAgIGVsc2UgaWYgKG9jID09IEwncycpICAgKnBzdWZmaXggPSAg bjsKKyEgICAgICAgZWxzZSBpZiAob2MgPT0gTCdUJykgICAqcFRhYiAgICA9ICBuID49IDAgPyBu IDogIDg7CishICAgICAgIGVsc2UgIC8qIG9jID09IEwndycgKi8gKnB3aWR0aCAgPSAgbiA+PSAw ID8gbiA6IDc5OworICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgIGlmIChuIDwgMCkgbiA9 IDE7CisgICAgICAgIGlmIChuID4gMSkgZ290byBiYWRhcmc7CishICAgICAgIGlmICAgICAgKG9j ID09IEwnYicpICpwYm9keSAgID0gbjsKKyEgICAgICAgZWxzZSBpZiAob2MgPT0gTCdjJykgKnBj YXAgICAgPSBuOworISAgICAgICBlbHNlIGlmIChvYyA9PSBMJ2QnKSAqcGRpdiAgICA9IG47Cish ICAgICAgIGVsc2UgaWYgKG9jID09IEwnRScpICpwRXJyICAgID0gbjsKKyEgICAgICAgZWxzZSBp ZiAob2MgPT0gTCdlJykgKnBleHBlbCAgPSBuOworISAgICAgICBlbHNlIGlmIChvYyA9PSBMJ2Yn KSAqcGZpdCAgICA9IG47CishICAgICAgIGVsc2UgaWYgKG9jID09IEwnZycpICpwZ3Vlc3MgID0g bjsKKyEgICAgICAgZWxzZSBpZiAob2MgPT0gTCdpJykgKnBpbnZpcyAgPSBuOworISAgICAgICBl bHNlIGlmIChvYyA9PSBMJ2onKSAqcGp1c3QgICA9IG47CishICAgICAgIGVsc2UgaWYgKG9jID09 IEwnbCcpICpwbGFzdCAgID0gbjsKKyEgICAgICAgZWxzZSBpZiAob2MgPT0gTCdxJykgKnBxdW90 ZSAgPSBuOworISAgICAgICBlbHNlIGlmIChvYyA9PSBMJ1InKSAqcFJlcG9ydCA9IG47CishICAg ICAgIGVsc2UgaWYgKG9jID09IEwndCcpICpwdG91Y2ggID0gbjsKKyAgICAgICAgZWxzZSBnb3Rv IGJhZGFyZzsKKyAgICAgIH0KKyAgICB9CisqKioqKioqKioqKioqKioKKyoqKiAyNzcsMjg4ICoq KioKKyAgCisgIGJhZGFyZzoKKyAgCishICAgc3ByaW50ZihlcnJtc2csICJCYWQgYXJndW1lbnQ6 ICUuKnNcbiIsIGVycm1zZ19zaXplIC0gMTYsIHNhdmVhcmcpOworICAgICpwaGVscCA9IDE7Cisg IH0KKyAgCisgIAorISBzdGF0aWMgY2hhciAqKnJlYWRsaW5lcygKKyAgICBsaW5lcHJvcCAqKnBw cm9wcywgY29uc3QgY2hhcnNldCAqcHJvdGVjdGNoYXJzLAorICAgIGNvbnN0IGNoYXJzZXQgKnF1 b3RlY2hhcnMsIGludCBUYWIsIGludCBpbnZpcywgaW50IHF1b3RlLCBlcnJtc2dfdCBlcnJtc2cK KyAgKQorLS0tIDIzMiwyNDMgLS0tLQorICAKKyAgYmFkYXJnOgorICAKKyEgICBzd3ByaW50Zihl cnJtc2csIGVycm1zZ19zaXplLCBMIkJhZCBhcmd1bWVudDogJS4qc1xuIiwgZXJybXNnX3NpemUg LSAxNiwgc2F2ZWFyZyk7CisgICAgKnBoZWxwID0gMTsKKyAgfQorICAKKyAgCishIHN0YXRpYyB3 Y2hhcl90ICoqcmVhZGxpbmVzKAorICAgIGxpbmVwcm9wICoqcHByb3BzLCBjb25zdCBjaGFyc2V0 ICpwcm90ZWN0Y2hhcnMsCisgICAgY29uc3QgY2hhcnNldCAqcXVvdGVjaGFycywgaW50IFRhYiwg aW50IGludmlzLCBpbnQgcXVvdGUsIGVycm1zZ190IGVycm1zZworICApCisqKioqKioqKioqKioq KioKKyoqKiAzMDIsMzEwICoqKioKKyAgLyogaXQncyBub3QgTlVMTC4gIE9uIGZhaWx1cmUsIHJl dHVybnMgTlVMTCBhbmQgc2V0cyAqcHByb3BzIHRvIE5VTEwuICAgKi8KKyAgeworICAgIGJ1ZmZl ciAqY2J1ZiA9IE5VTEwsICpsYnVmID0gTlVMTCwgKmxwYnVmID0gTlVMTDsKKyEgICBpbnQgYywg ZW1wdHksIGJsYW5rLCBmaXJzdGxpbmUsIHFzb25seSwgb2xkcXNvbmx5ID0gMCwgdmxubGVuLCBp OworISAgIGNoYXIgY2gsICpsbiA9IE5VTEwsIG51bGxjaGFyID0gJ1wwJywgKm51bGxsaW5lID0g TlVMTCwgKnFwZW5kLAorISAgICAgICAgKm9sZGxuID0gTlVMTCwgKm9sZHFwZW5kID0gTlVMTCwg KnAsICpvcCwgKnZsbiA9IE5VTEwsICoqbGluZXMgPSBOVUxMOworICAgIGxpbmVwcm9wIHZwcm9w ID0geyAwLCAwLCAwLCAnXDAnIH0sIGlwcm9wID0geyAwLCAwLCAwLCAnXDAnIH07CisgIAorICAg IC8qIG9sZHFzb25seSwgb2xkbG4sIGFuZCBvbGRxdWVuZCBkb24ndCByZWFsbHkgbmVlZCB0byBi ZSBpbml0aWFsaXplZC4gICAqLworLS0tIDI1NywyNjYgLS0tLQorICAvKiBpdCdzIG5vdCBOVUxM LiAgT24gZmFpbHVyZSwgcmV0dXJucyBOVUxMIGFuZCBzZXRzICpwcHJvcHMgdG8gTlVMTC4gICAq LworICB7CisgICAgYnVmZmVyICpjYnVmID0gTlVMTCwgKmxidWYgPSBOVUxMLCAqbHBidWYgPSBO VUxMOworISAgIHdpbnRfdCBjOworISAgIGludCBlbXB0eSwgYmxhbmssIGZpcnN0bGluZSwgcXNv bmx5LCBvbGRxc29ubHkgPSAwLCB2bG5sZW4sIGk7CishICAgd2NoYXJfdCAqbG4gPSBOVUxMLCBu dWxsY2hhciA9IEwnXDAnLCAqbnVsbGxpbmUgPSBOVUxMLCAqcXBlbmQsIAorISAgICAgKm9sZGxu ID0gTlVMTCwgKm9sZHFwZW5kID0gTlVMTCwgKnAsICpvcCwgKnZsbiA9IE5VTEwsICoqbGluZXMg PSBOVUxMOworICAgIGxpbmVwcm9wIHZwcm9wID0geyAwLCAwLCAwLCAnXDAnIH0sIGlwcm9wID0g eyAwLCAwLCAwLCAnXDAnIH07CisgIAorICAgIC8qIG9sZHFzb25seSwgb2xkbG4sIGFuZCBvbGRx dWVuZCBkb24ndCByZWFsbHkgbmVlZCB0byBiZSBpbml0aWFsaXplZC4gICAqLworKioqKioqKioq KioqKioqCisqKiogMzE2LDMzNSAqKioqCisgIAorICAgICpwcHJvcHMgPSBOVUxMOworICAKKyEg ICBjYnVmID0gbmV3YnVmZmVyKHNpemVvZiAoY2hhciksIGVycm1zZyk7CisgICAgaWYgKCplcnJt c2cpIGdvdG8gcmxjbGVhbnVwOworISAgIGxidWYgPSBuZXdidWZmZXIoc2l6ZW9mIChjaGFyICop LCBlcnJtc2cpOworICAgIGlmICgqZXJybXNnKSBnb3RvIHJsY2xlYW51cDsKKyAgICBscGJ1ZiA9 IG5ld2J1ZmZlcihzaXplb2YgKGxpbmVwcm9wKSwgZXJybXNnKTsKKyAgICBpZiAoKmVycm1zZykg Z290byBybGNsZWFudXA7CisgIAorICAgIGZvciAoZW1wdHkgPSBibGFuayA9IGZpcnN0bGluZSA9 IDE7ICA7ICApIHsKKyEgICAgIGMgPSBnZXRjaGFyKCk7CishICAgICBpZiAoYyA9PSBFT0YpIGJy ZWFrOworISAgICAgKih1bnNpZ25lZCBjaGFyICopJmNoID0gYzsKKyEgICAgIGlmIChjaCA9PSAn XG4nKSB7CisgICAgICAgIGlmIChibGFuaykgeworISAgICAgICAgIHVuZ2V0YyhjLHN0ZGluKTsK KyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBhZGRpdGVtKGNidWYsICZudWxs Y2hhciwgZXJybXNnKTsKKy0tLSAyNzIsMjk2IC0tLS0KKyAgCisgICAgKnBwcm9wcyA9IE5VTEw7 CisgIAorISAgIGNidWYgPSBuZXdidWZmZXIoc2l6ZW9mICh3Y2hhcl90KSwgZXJybXNnKTsKKyAg ICBpZiAoKmVycm1zZykgZ290byBybGNsZWFudXA7CishICAgbGJ1ZiA9IG5ld2J1ZmZlcihzaXpl b2YgKHdjaGFyX3QgKiksIGVycm1zZyk7CisgICAgaWYgKCplcnJtc2cpIGdvdG8gcmxjbGVhbnVw OworICAgIGxwYnVmID0gbmV3YnVmZmVyKHNpemVvZiAobGluZXByb3ApLCBlcnJtc2cpOworICAg IGlmICgqZXJybXNnKSBnb3RvIHJsY2xlYW51cDsKKyAgCisgICAgZm9yIChlbXB0eSA9IGJsYW5r ID0gZmlyc3RsaW5lID0gMTsgIDsgICkgeworISAgICAgYyA9IGdldHdjaGFyKCk7CishICAgICBp ZiAoYyA9PSBXRU9GKSB7CishICAgICAgIGlmIChlcnJubyA9PSBFSUxTRVEpIHsKKyEgICAgICAg CXdjc2NweShlcnJtc2csIEwiSW52YWxpZCBtdWx0aWJ5dGUgc2VxdWVuY2UgaW4gaW5wdXRcbiIp OworISAJZ290byBybGNsZWFudXA7CishICAgICAgIH0KKyEgICAgICAgYnJlYWs7CishICAgICB9 CishICAgICBpZiAoYyA9PSBMJ1xuJykgeworICAgICAgICBpZiAoYmxhbmspIHsKKyEgICAgICAg ICB1bmdldHdjKGMsc3RkaW4pOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg IGFkZGl0ZW0oY2J1ZiwgJm51bGxjaGFyLCBlcnJtc2cpOworKioqKioqKioqKioqKioqCisqKiog MzM4LDM0NiAqKioqCisgICAgICAgIGlmICgqZXJybXNnKSBnb3RvIHJsY2xlYW51cDsKKyAgICAg ICAgaWYgKHF1b3RlKSB7CisgICAgICAgICAgZm9yIChxcGVuZCA9IGxuOyAgKnFwZW5kICYmIGNz bWVtYmVyKCpxcGVuZCwgcXVvdGVjaGFycyk7ICArK3FwZW5kKTsKKyEgICAgICAgICBmb3IgKHAg PSBxcGVuZDsgICpwID09ICcgJyB8fCBjc21lbWJlcigqcCwgcXVvdGVjaGFycyk7ICArK3ApOwor ISAgICAgICAgIHFzb25seSA9ICAqcCA9PSAnXDAnOworISAgICAgICAgIHdoaWxlIChxcGVuZCA+ IGxuICYmIHFwZW5kWy0xXSA9PSAnICcpIC0tcXBlbmQ7CisgICAgICAgICAgaWYgKCFmaXJzdGxp bmUpIHsKKyAgICAgICAgICAgIGZvciAocCA9IGxuLCBvcCA9IG9sZGxuOworICAgICAgICAgICAg ICAgICBwIDwgcXBlbmQgJiYgb3AgPCBvbGRxcGVuZCAmJiAqcCA9PSAqb3A7CistLS0gMjk5LDMw NyAtLS0tCisgICAgICAgIGlmICgqZXJybXNnKSBnb3RvIHJsY2xlYW51cDsKKyAgICAgICAgaWYg KHF1b3RlKSB7CisgICAgICAgICAgZm9yIChxcGVuZCA9IGxuOyAgKnFwZW5kICYmIGNzbWVtYmVy KCpxcGVuZCwgcXVvdGVjaGFycyk7ICArK3FwZW5kKTsKKyEgICAgICAgICBmb3IgKHAgPSBxcGVu ZDsgICpwID09IEwnICcgfHwgY3NtZW1iZXIoKnAsIHF1b3RlY2hhcnMpOyAgKytwKTsKKyEgICAg ICAgICBxc29ubHkgPSAgKCpwID09IEwnXDAnKTsKKyEgICAgICAgICB3aGlsZSAocXBlbmQgPiBs biAmJiBxcGVuZFstMV0gPT0gTCcgJykgLS1xcGVuZDsKKyAgICAgICAgICBpZiAoIWZpcnN0bGlu ZSkgeworICAgICAgICAgICAgZm9yIChwID0gbG4sIG9wID0gb2xkbG47CisgICAgICAgICAgICAg ICAgIHAgPCBxcGVuZCAmJiBvcCA8IG9sZHFwZW5kICYmICpwID09ICpvcDsKKyoqKioqKioqKioq KioqKgorKioqIDM0OCwzNzAgKioqKgorICAgICAgICAgICAgaWYgKCEocCA9PSBxcGVuZCAmJiBv cCA9PSBvbGRxcGVuZCkpIHsKKyAgICAgICAgICAgICAgaWYgKCFpbnZpcyAmJiAob2xkcXNvbmx5 IHx8IHFzb25seSkpIHsKKyAgICAgICAgICAgICAgICBpZiAob2xkcXNvbmx5KSB7CishICAgICAg ICAgICAgICAgICAqb3AgPSAnXDAnOworICAgICAgICAgICAgICAgICAgb2xkcXBlbmQgPSBvcDsK KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHFzb25seSkgeworISAgICAg ICAgICAgICAgICAgKnAgPSAnXDAnOworICAgICAgICAgICAgICAgICAgcXBlbmQgPSBwOworICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBlbHNlIHsKKyAg ICAgICAgICAgICAgICB2bG5sZW4gPSBwIC0gbG47CishICAgICAgICAgICAgICAgdmxuID0gbWFs bG9jKCh2bG5sZW4gKyAxKSAqIHNpemVvZiAoY2hhcikpOworICAgICAgICAgICAgICAgIGlmICgh dmxuKSB7CishICAgICAgICAgICAgICAgICBzdHJjcHkoZXJybXNnLG91dG9mbWVtKTsKKyAgICAg ICAgICAgICAgICAgIGdvdG8gcmxjbGVhbnVwOworICAgICAgICAgICAgICAgIH0KKyEgICAgICAg ICAgICAgICBzdHJuY3B5KHZsbixsbix2bG5sZW4pOworISAgICAgICAgICAgICAgIHZsblt2bG5s ZW5dID0gJ1wwJzsKKyAgICAgICAgICAgICAgICBhZGRpdGVtKGxidWYsICZ2bG4sIGVycm1zZyk7 CisgICAgICAgICAgICAgICAgaWYgKCplcnJtc2cpIGdvdG8gcmxjbGVhbnVwOworICAgICAgICAg ICAgICAgIGFkZGl0ZW0obHBidWYsICBpbnZpcyA/ICZpcHJvcCA6ICZ2cHJvcCwgIGVycm1zZyk7 CistLS0gMzA5LDMzMSAtLS0tCisgICAgICAgICAgICBpZiAoIShwID09IHFwZW5kICYmIG9wID09 IG9sZHFwZW5kKSkgeworICAgICAgICAgICAgICBpZiAoIWludmlzICYmIChvbGRxc29ubHkgfHwg cXNvbmx5KSkgeworICAgICAgICAgICAgICAgIGlmIChvbGRxc29ubHkpIHsKKyEgICAgICAgICAg ICAgICAgICpvcCA9IEwnXDAnOworICAgICAgICAgICAgICAgICAgb2xkcXBlbmQgPSBvcDsKKyAg ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHFzb25seSkgeworISAgICAgICAg ICAgICAgICAgKnAgPSBMJ1wwJzsKKyAgICAgICAgICAgICAgICAgIHFwZW5kID0gcDsKKyAgICAg ICAgICAgICAgICB9CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgZWxzZSB7CisgICAg ICAgICAgICAgICAgdmxubGVuID0gcCAtIGxuOworISAgICAgICAgICAgICAgIHZsbiA9IG1hbGxv YygodmxubGVuICsgMSkgKiBzaXplb2YgKHdjaGFyX3QpKTsKKyAgICAgICAgICAgICAgICBpZiAo IXZsbikgeworISAgICAgICAgICAgICAgICAgd2NzY3B5KGVycm1zZyxvdXRvZm1lbSk7CisgICAg ICAgICAgICAgICAgICBnb3RvIHJsY2xlYW51cDsKKyAgICAgICAgICAgICAgICB9CishICAgICAg ICAgICAgICAgd2NzbmNweSh2bG4sIGxuLCB2bG5sZW4pOworISAgICAgICAgICAgICAgIHZsblt2 bG5sZW5dID0gTCdcMCc7CisgICAgICAgICAgICAgICAgYWRkaXRlbShsYnVmLCAmdmxuLCBlcnJt c2cpOworICAgICAgICAgICAgICAgIGlmICgqZXJybXNnKSBnb3RvIHJsY2xlYW51cDsKKyAgICAg ICAgICAgICAgICBhZGRpdGVtKGxwYnVmLCAgaW52aXMgPyAmaXByb3AgOiAmdnByb3AsICBlcnJt c2cpOworKioqKioqKioqKioqKioqCisqKiogMzg4LDQxNSAqKioqCisgICAgICB9CisgICAgICBl bHNlIHsKKyAgICAgICAgaWYgKGVtcHR5KSB7CishICAgICAgICAgaWYgKGNzbWVtYmVyKGNoLCBw cm90ZWN0Y2hhcnMpKSB7CishICAgICAgICAgICB1bmdldGMoYyxzdGRpbik7CisgICAgICAgICAg ICBicmVhazsKKyAgICAgICAgICB9CisgICAgICAgICAgZW1wdHkgPSAwOworICAgICAgICB9Cish ICAgICAgIGlmICghY2gpIGNvbnRpbnVlOworISAgICAgICBpZiAoY2ggPT0gJ1x0JykgeworISAg ICAgICAgIGNoID0gJyAnOworICAgICAgICAgIGZvciAoaSA9IFRhYiAtIG51bWl0ZW1zKGNidWYp ICUgVGFiOyAgaSA+IDA7ICAtLWkpIHsKKyEgICAgICAgICAgIGFkZGl0ZW0oY2J1ZiwgJmNoLCBl cnJtc2cpOworICAgICAgICAgICAgaWYgKCplcnJtc2cpIGdvdG8gcmxjbGVhbnVwOworICAgICAg ICAgIH0KKyAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorISAgICAgICBpZiAoaXNzcGFj ZShjKSkgY2ggPSAnICc7CishICAgICAgIGVsc2UgYmxhbmsgPSAwOworISAgICAgICBhZGRpdGVt KGNidWYsICZjaCwgZXJybXNnKTsKKyEgICAgICAgaWYgKCplcnJtc2cpIGdvdG8gcmxjbGVhbnVw OworICAgICAgfQorICAgIH0KKyEgCisgICAgaWYgKCFibGFuaykgeworICAgICAgYWRkaXRlbShj YnVmLCAmbnVsbGNoYXIsIGVycm1zZyk7CisgICAgICBpZiAoKmVycm1zZykgZ290byBybGNsZWFu dXA7CistLS0gMzQ5LDM3OSAtLS0tCisgICAgICB9CisgICAgICBlbHNlIHsKKyAgICAgICAgaWYg KGVtcHR5KSB7CishICAgICAgICAgaWYgKGNzbWVtYmVyKGMsIHByb3RlY3RjaGFycykpIHsKKyEg ICAgICAgICAgIHVuZ2V0d2MoYyxzdGRpbik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg ICB9CisgICAgICAgICAgZW1wdHkgPSAwOworICAgICAgICB9CishICAgICAgIGlmICghYykgY29u dGludWU7CishICAgICAgIGlmIChjID09IEwnXHQnKSB7CishICAgICAgICAgYyA9IEwnICc7Cisg ICAgICAgICAgZm9yIChpID0gVGFiIC0gbnVtaXRlbXMoY2J1ZikgJSBUYWI7ICBpID4gMDsgIC0t aSkgeworISAgICAgICAgICAgYWRkaXRlbShjYnVmLCAmYywgZXJybXNnKTsKKyAgICAgICAgICAg IGlmICgqZXJybXNnKSBnb3RvIHJsY2xlYW51cDsKKyAgICAgICAgICB9CisgICAgICAgICAgY29u dGludWU7CisgICAgICAgIH0KKyEgICAgICAgaWYgKGlzd3NwYWNlKGMpKSAKKyEgICAgICAgICBj ID0gTCcgJzsKKyEgICAgICAgZWxzZSAKKyEgICAgICAgICBibGFuayA9IDA7CishICAgICAgIGFk ZGl0ZW0oY2J1ZiwgJmMsIGVycm1zZyk7CishICAgICAgIGlmICgqZXJybXNnKSAKKyEgICAgICAg ICBnb3RvIHJsY2xlYW51cDsKKyAgICAgIH0KKyAgICB9CishICAgCisgICAgaWYgKCFibGFuaykg eworICAgICAgYWRkaXRlbShjYnVmLCAmbnVsbGNoYXIsIGVycm1zZyk7CisgICAgICBpZiAoKmVy cm1zZykgZ290byBybGNsZWFudXA7CisqKioqKioqKioqKioqKioKKyoqKiA0NDksNDU1ICoqKioK KyAgCisgIAorICBzdGF0aWMgdm9pZCBjb21wcmVzdWZsZW4oCishICAgY29uc3QgY2hhciAqIGNv bnN0ICpsaW5lcywgY29uc3QgY2hhciAqIGNvbnN0ICplbmRsaW5lLAorICAgIGNvbnN0IGNoYXJz ZXQgKmJvZHljaGFycywgaW50IGJvZHksIGludCBwcmUsIGludCBzdWYsIGludCAqcHByZSwgaW50 ICpwc3VmCisgICkKKyAgLyogbGluZXMgaXMgYW4gYXJyYXkgb2Ygc3RyaW5ncywgdXAgdG8gYnV0 IG5vdCBpbmNsdWRpbmcgZW5kbGluZS4gICovCistLS0gNDEzLDQxOSAtLS0tCisgIAorICAKKyAg c3RhdGljIHZvaWQgY29tcHJlc3VmbGVuKAorISAgIGNvbnN0IHdjaGFyX3QgKiBjb25zdCAqbGlu ZXMsIGNvbnN0IHdjaGFyX3QgKiBjb25zdCAqZW5kbGluZSwKKyAgICBjb25zdCBjaGFyc2V0ICpi b2R5Y2hhcnMsIGludCBib2R5LCBpbnQgcHJlLCBpbnQgc3VmLCBpbnQgKnBwcmUsIGludCAqcHN1 ZgorICApCisgIC8qIGxpbmVzIGlzIGFuIGFycmF5IG9mIHN0cmluZ3MsIHVwIHRvIGJ1dCBub3Qg aW5jbHVkaW5nIGVuZGxpbmUuICAqLworKioqKioqKioqKioqKioqCisqKiogNDU3LDQ2NSAqKioq CisgIC8qIGxpbmVzIGluIGxpbmVzLiAgQXNzdW1lcyB0aGF0IHRoZXkgaGF2ZSBhbHJlYWR5IGJl ZW4gZGV0ZXJtaW5lZCAqLworICAvKiB0byBiZSBhdCBsZWFzdCBwcmUgYW5kIHN1Zi4gIGVuZGxp bmUgbXVzdCBub3QgZXF1YWwgbGluZXMuICAgICAgKi8KKyAgeworISAgIGNvbnN0IGNoYXIgKnN0 YXJ0LCAqZW5kLCAqa25vd25zdGFydCwgKiBjb25zdCAqbGluZSwgKnAxLCAqcDIsICprbm93bmVu ZCwKKyAgICAgICAgICAgICAgICprbm93bnN0YXJ0MjsKKyEgCisgICAgc3RhcnQgPSAqbGluZXM7 CisgICAgZW5kID0ga25vd25zdGFydCA9IHN0YXJ0ICsgcHJlOworICAgIGlmIChib2R5KQorLS0t IDQyMSw0MjkgLS0tLQorICAvKiBsaW5lcyBpbiBsaW5lcy4gIEFzc3VtZXMgdGhhdCB0aGV5IGhh dmUgYWxyZWFkeSBiZWVuIGRldGVybWluZWQgKi8KKyAgLyogdG8gYmUgYXQgbGVhc3QgcHJlIGFu ZCBzdWYuICBlbmRsaW5lIG11c3Qgbm90IGVxdWFsIGxpbmVzLiAgICAgICovCisgIHsKKyEgICBj b25zdCB3Y2hhcl90ICpzdGFydCwgKmVuZCwgKmtub3duc3RhcnQsICogY29uc3QgKmxpbmUsICpw MSwgKnAyLCAqa25vd25lbmQsCisgICAgICAgICAgICAgICAqa25vd25zdGFydDI7CishICAgICAg ICAgICAgCisgICAgc3RhcnQgPSAqbGluZXM7CisgICAgZW5kID0ga25vd25zdGFydCA9IHN0YXJ0 ICsgcHJlOworICAgIGlmIChib2R5KQorKioqKioqKioqKioqKioqCisqKiogNDc0LDQ4MCAqKioq CisgICAgfQorICAgIGlmIChib2R5KQorICAgICAgZm9yIChwMSA9IGVuZDsgIHAxID4ga25vd25z dGFydDsgICkKKyEgICAgICAgaWYgKCotLXAxICE9ICcgJykgeworICAgICAgICAgIGlmIChjc21l bWJlcigqcDEsIGJvZHljaGFycykpCisgICAgICAgICAgICBlbmQgPSBwMTsKKyAgICAgICAgICBl bHNlCistLS0gNDM4LDQ0NCAtLS0tCisgICAgfQorICAgIGlmIChib2R5KQorICAgICAgZm9yIChw MSA9IGVuZDsgIHAxID4ga25vd25zdGFydDsgICkKKyEgICAgICAgaWYgKCotLXAxICE9IEwnICcp IHsKKyAgICAgICAgICBpZiAoY3NtZW1iZXIoKnAxLCBib2R5Y2hhcnMpKQorICAgICAgICAgICAg ZW5kID0gcDE7CisgICAgICAgICAgZWxzZQorKioqKioqKioqKioqKioqCisqKiogNTAxLDUxOCAq KioqCisgICAgfQorICAgIGlmIChib2R5KSB7CisgICAgICBmb3IgKHAxID0gc3RhcnQ7CishICAg ICAgICAgIHN0YXJ0IDwga25vd25lbmQgJiYgKCpzdGFydCA9PSAnICcgfHwgY3NtZW1iZXIoKnN0 YXJ0LCBib2R5Y2hhcnMpKTsKKyAgICAgICAgICAgKytzdGFydCk7CishICAgICBpZiAoc3RhcnQg PiBwMSAmJiBzdGFydFstMV0gPT0gJyAnKSAtLXN0YXJ0OworICAgIH0KKyAgICBlbHNlCishICAg ICB3aGlsZSAoZW5kIC0gc3RhcnQgPj0gMiAmJiAqc3RhcnQgPT0gJyAnICYmIHN0YXJ0WzFdID09 ICcgJykgKytzdGFydDsKKyAgICAqcHN1ZiA9IGVuZCAtIHN0YXJ0OworICB9CisgIAorICAKKyAg c3RhdGljIHZvaWQgZGVsaW1pdCgKKyEgICBjb25zdCBjaGFyICogY29uc3QgKmxpbmVzLCBjb25z dCBjaGFyICogY29uc3QgKmVuZGxpbmUsCisgICAgY29uc3QgY2hhcnNldCAqYm9keWNoYXJzLCBp bnQgcmVwZWF0LCBpbnQgYm9keSwgaW50IGRpdiwKKyAgICBpbnQgcHJlLCBpbnQgc3VmLCBsaW5l cHJvcCAqcHJvcHMKKyAgKQorLS0tIDQ2NSw0ODIgLS0tLQorICAgIH0KKyAgICBpZiAoYm9keSkg eworICAgICAgZm9yIChwMSA9IHN0YXJ0OworISAgICAgICAgICBzdGFydCA8IGtub3duZW5kICYm ICgqc3RhcnQgPT0gTCcgJyB8fCBjc21lbWJlcigqc3RhcnQsIGJvZHljaGFycykpOworICAgICAg ICAgICArK3N0YXJ0KTsKKyEgICAgIGlmIChzdGFydCA+IHAxICYmIHN0YXJ0Wy0xXSA9PSBMJyAn KSAtLXN0YXJ0OworICAgIH0KKyAgICBlbHNlCishICAgICB3aGlsZSAoZW5kIC0gc3RhcnQgPj0g MiAmJiAqc3RhcnQgPT0gTCcgJyAmJiBzdGFydFsxXSA9PSBMJyAnKSArK3N0YXJ0OworICAgICpw c3VmID0gZW5kIC0gc3RhcnQ7CisgIH0KKyAgCisgIAorICBzdGF0aWMgdm9pZCBkZWxpbWl0KAor ISAgIGNvbnN0IHdjaGFyX3QgKiBjb25zdCAqbGluZXMsIGNvbnN0IHdjaGFyX3QgKiBjb25zdCAq ZW5kbGluZSwKKyAgICBjb25zdCBjaGFyc2V0ICpib2R5Y2hhcnMsIGludCByZXBlYXQsIGludCBi b2R5LCBpbnQgZGl2LAorICAgIGludCBwcmUsIGludCBzdWYsIGxpbmVwcm9wICpwcm9wcworICAp CisqKioqKioqKioqKioqKioKKyoqKiA1MjMsNTMwICoqKioKKyAgLyogYW5kIGNvbXN1ZmxlbiBv ZiB0aGUgbGluZXMgaW4gbGluZXMgaGF2ZSBhbHJlYWR5IGJlZW4gICAgICovCisgIC8qIGRldGVy bWluZWQgdG8gYmUgYXQgbGVhc3QgcHJlIGFuZCBzdWYsIHJlc3BlY3RpdmVseS4gICAgICAqLwor ICB7CishICAgY29uc3QgY2hhciAqIGNvbnN0ICpsaW5lLCAqZW5kLCAqcCwgKiBjb25zdCAqbmV4 dGxpbmU7CishICAgY2hhciByYzsKKyAgICBsaW5lcHJvcCAqcHJvcCwgKm5leHRwcm9wOworICAg IGludCBhbnlib2RpbGVzcyA9IDAsIHN0YXR1czsKKyAgCistLS0gNDg3LDQ5NCAtLS0tCisgIC8q IGFuZCBjb21zdWZsZW4gb2YgdGhlIGxpbmVzIGluIGxpbmVzIGhhdmUgYWxyZWFkeSBiZWVuICAg ICAqLworICAvKiBkZXRlcm1pbmVkIHRvIGJlIGF0IGxlYXN0IHByZSBhbmQgc3VmLCByZXNwZWN0 aXZlbHkuICAgICAgKi8KKyAgeworISAgIGNvbnN0IHdjaGFyX3QgKiBjb25zdCAqbGluZSwgKmVu ZCwgKnAsICogY29uc3QgKm5leHRsaW5lOworISAgIHdjaGFyX3QgcmM7CisgICAgbGluZXByb3Ag KnByb3AsICpuZXh0cHJvcDsKKyAgICBpbnQgYW55Ym9kaWxlc3MgPSAwLCBzdGF0dXM7CisgIAor KioqKioqKioqKioqKioqCisqKiogNTQ1LDU1MiAqKioqCisgICAgICBmb3IgKGVuZCA9ICpsaW5l OyAgKmVuZDsgICsrZW5kKTsKKyAgICAgIGVuZCAtPSBzdWY7CisgICAgICBwID0gKmxpbmUgKyBw cmU7CishICAgICByYyA9ICBwIDwgZW5kICA/ICAqcCAgOiAgJyAnOworISAgICAgaWYgKHJjICE9 ICcgJyAmJiAoIXJlcGVhdCB8fCBlbmQgLSBwIDwgcmVwZWF0KSkKKyAgICAgICAgcHJvcC0+Zmxh Z3MgJj0gfkxfQk9ESUxFU1M7CisgICAgICBlbHNlCisgICAgICAgIHdoaWxlIChwIDwgZW5kKSB7 CistLS0gNTA5LDUxNiAtLS0tCisgICAgICBmb3IgKGVuZCA9ICpsaW5lOyAgKmVuZDsgICsrZW5k KTsKKyAgICAgIGVuZCAtPSBzdWY7CisgICAgICBwID0gKmxpbmUgKyBwcmU7CishICAgICByYyA9 ICBwIDwgZW5kICA/ICAqcCAgOiAgTCcgJzsKKyEgICAgIGlmIChyYyAhPSBMJyAnICYmICghcmVw ZWF0IHx8IGVuZCAtIHAgPCByZXBlYXQpKQorICAgICAgICBwcm9wLT5mbGFncyAmPSB+TF9CT0RJ TEVTUzsKKyAgICAgIGVsc2UKKyAgICAgICAgd2hpbGUgKHAgPCBlbmQpIHsKKyoqKioqKioqKioq KioqKgorKioqIDU4OSw1OTcgKioqKgorICAgIH0KKyAgCisgICAgbGluZSA9IGxpbmVzLCBwcm9w ID0gcHJvcHM7CishICAgc3RhdHVzID0gKCgqbGluZXMpW3ByZV0gPT0gJyAnKTsKKyAgICBkbyB7 CishICAgICBpZiAoKCgqbGluZSlbcHJlXSA9PSAnICcpID09IHN0YXR1cykKKyAgICAgICAgcHJv cC0+ZmxhZ3MgfD0gTF9GSVJTVDsKKyAgICAgICsrbGluZSwgKytwcm9wOworICAgIH0gd2hpbGUg KGxpbmUgPCBlbmRsaW5lKTsKKy0tLSA1NTMsNTYxIC0tLS0KKyAgICB9CisgIAorICAgIGxpbmUg PSBsaW5lcywgcHJvcCA9IHByb3BzOworISAgIHN0YXR1cyA9ICgoKmxpbmVzKVtwcmVdID09IEwn ICcpOworICAgIGRvIHsKKyEgICAgIGlmICgoKCpsaW5lKVtwcmVdID09IEwnICcpID09IHN0YXR1 cykKKyAgICAgICAgcHJvcC0+ZmxhZ3MgfD0gTF9GSVJTVDsKKyAgICAgICsrbGluZSwgKytwcm9w OworICAgIH0gd2hpbGUgKGxpbmUgPCBlbmRsaW5lKTsKKyoqKioqKioqKioqKioqKgorKioqIDU5 OSw2MTIgKioqKgorICAKKyAgCisgIHN0YXRpYyB2b2lkIG1hcmtzdXBlcmYoCishICAgY29uc3Qg Y2hhciAqIGNvbnN0ICogbGluZXMsIGNvbnN0IGNoYXIgKiBjb25zdCAqIGVuZGxpbmUsIGxpbmVw cm9wICpwcm9wcworICApCisgIC8qIGxpbmVzIHBvaW50cyB0byB0aGUgZmlyc3QgbGluZSBvZiBh IHNlZ21lbnQsIGFuZCBlbmRsaW5lIHRvIG9uZSAgKi8KKyAgLyogbGluZSBiZXlvbmQgdGhlIGxh c3QgbGluZSBpbiB0aGUgc2VnbWVudC4gIFNldHMgTF9TVVBFUkYgYml0cyBpbiAqLworICAvKiB0 aGUgZmxhZ3MgZmllbGRzIG9mIHRoZSBwcm9wcyBhcnJheSB3aGVuZXZlciB0aGUgY29ycmVzcG9u ZGluZyAgICovCisgIC8qIGxpbmUgaXMgc3VwZXJmbHVvdXMuICBMX0JPRElMRVNTIGJpdHMgbXVz dCBhbHJlYWR5IGJlIHNldC4gICAgICAgKi8KKyAgeworISAgIGNvbnN0IGNoYXIgKiBjb25zdCAq bGluZSwgKnA7CisgICAgbGluZXByb3AgKnByb3AsICptcHJvcCwgZHVtbXk7CisgICAgaW50IGlu Ym9keSwgbnVtLCBtbnVtOworICAKKy0tLSA1NjMsNTc2IC0tLS0KKyAgCisgIAorICBzdGF0aWMg dm9pZCBtYXJrc3VwZXJmKAorISAgIGNvbnN0IHdjaGFyX3QgKiBjb25zdCAqIGxpbmVzLCBjb25z dCB3Y2hhcl90ICogY29uc3QgKiBlbmRsaW5lLCBsaW5lcHJvcCAqcHJvcHMKKyAgKQorICAvKiBs aW5lcyBwb2ludHMgdG8gdGhlIGZpcnN0IGxpbmUgb2YgYSBzZWdtZW50LCBhbmQgZW5kbGluZSB0 byBvbmUgICovCisgIC8qIGxpbmUgYmV5b25kIHRoZSBsYXN0IGxpbmUgaW4gdGhlIHNlZ21lbnQu ICBTZXRzIExfU1VQRVJGIGJpdHMgaW4gKi8KKyAgLyogdGhlIGZsYWdzIGZpZWxkcyBvZiB0aGUg cHJvcHMgYXJyYXkgd2hlbmV2ZXIgdGhlIGNvcnJlc3BvbmRpbmcgICAqLworICAvKiBsaW5lIGlz IHN1cGVyZmx1b3VzLiAgTF9CT0RJTEVTUyBiaXRzIG11c3QgYWxyZWFkeSBiZSBzZXQuICAgICAg ICovCisgIHsKKyEgICBjb25zdCB3Y2hhcl90ICogY29uc3QgKmxpbmUsICpwOworICAgIGxpbmVw cm9wICpwcm9wLCAqbXByb3AsIGR1bW15OworICAgIGludCBpbmJvZHksIG51bSwgbW51bTsKKyAg CisqKioqKioqKioqKioqKioKKyoqKiA2MTksNjI1ICoqKioKKyAgICBmb3IgKGxpbmUgPSBsaW5l cywgcHJvcCA9IHByb3BzOyAgbGluZSA8IGVuZGxpbmU7ICArK2xpbmUsICsrcHJvcCkKKyAgICAg IGlmIChpc3ZhY2FudChwcm9wKSkgeworICAgICAgICBmb3IgKG51bSA9IDAsIHAgPSAqbGluZTsg ICpwOyAgKytwKQorISAgICAgICAgIGlmICgqcCAhPSAnICcpICsrbnVtOworICAgICAgICBpZiAo aW5ib2R5IHx8IG51bSA8IG1udW0pCisgICAgICAgICAgbW51bSA9IG51bSwgbXByb3AgPSBwcm9w OworICAgICAgICBpbmJvZHkgPSAwOworLS0tIDU4Myw1ODkgLS0tLQorICAgIGZvciAobGluZSA9 IGxpbmVzLCBwcm9wID0gcHJvcHM7ICBsaW5lIDwgZW5kbGluZTsgICsrbGluZSwgKytwcm9wKQor ICAgICAgaWYgKGlzdmFjYW50KHByb3ApKSB7CisgICAgICAgIGZvciAobnVtID0gMCwgcCA9ICps aW5lOyAgKnA7ICArK3ApCishICAgICAgICAgaWYgKCpwICE9IEwnICcpICsrbnVtOworICAgICAg ICBpZiAoaW5ib2R5IHx8IG51bSA8IG1udW0pCisgICAgICAgICAgbW51bSA9IG51bSwgbXByb3Ag PSBwcm9wOworICAgICAgICBpbmJvZHkgPSAwOworKioqKioqKioqKioqKioqCisqKiogNjMxLDYz NyAqKioqCisgIAorICAKKyAgc3RhdGljIHZvaWQgc2V0YWZmaXhlcygKKyEgICBjb25zdCBjaGFy ICogY29uc3QgKmlubGluZXMsIGNvbnN0IGNoYXIgKiBjb25zdCAqZW5kbGluZSwKKyAgICBjb25z dCBsaW5lcHJvcCAqcHJvcHMsIGNvbnN0IGNoYXJzZXQgKmJvZHljaGFycywKKyAgICBjb25zdCBj aGFyc2V0ICpxdW90ZWNoYXJzLCBpbnQgaGFuZywgaW50IGJvZHksIGludCBxdW90ZSwKKyAgICBp bnQgKnBhZnAsIGludCAqcGZzLCBpbnQgKnBwcmVmaXgsIGludCAqcHN1ZmZpeAorLS0tIDU5NSw2 MDEgLS0tLQorICAKKyAgCisgIHN0YXRpYyB2b2lkIHNldGFmZml4ZXMoCishICAgY29uc3Qgd2No YXJfdCAqIGNvbnN0ICppbmxpbmVzLCBjb25zdCB3Y2hhcl90ICogY29uc3QgKmVuZGxpbmUsCisg ICAgY29uc3QgbGluZXByb3AgKnByb3BzLCBjb25zdCBjaGFyc2V0ICpib2R5Y2hhcnMsCisgICAg Y29uc3QgY2hhcnNldCAqcXVvdGVjaGFycywgaW50IGhhbmcsIGludCBib2R5LCBpbnQgcXVvdGUs CisgICAgaW50ICpwYWZwLCBpbnQgKnBmcywgaW50ICpwcHJlZml4LCBpbnQgKnBzdWZmaXgKKyoq KioqKioqKioqKioqKgorKioqIDY0NCw2NTAgKioqKgorICAvKiBkZWZhdWx0IHZhbHVlIGFzIHNw ZWNpZmllZCBpbiAicGFyLmRvYyIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIHsK KyAgICBpbnQgbnVtaW4sIHByZSwgc3VmOworISAgIGNvbnN0IGNoYXIgKnA7CisgIAorICAgIG51 bWluID0gZW5kbGluZSAtIGlubGluZXM7CisgIAorLS0tIDYwOCw2MTQgLS0tLQorICAvKiBkZWZh dWx0IHZhbHVlIGFzIHNwZWNpZmllZCBpbiAicGFyLmRvYyIuICAgICAgICAgICAgICAgICAgICAg ICAgICAgICovCisgIHsKKyAgICBpbnQgbnVtaW4sIHByZSwgc3VmOworISAgIGNvbnN0IHdjaGFy X3QgKnA7CisgIAorICAgIG51bWluID0gZW5kbGluZSAtIGlubGluZXM7CisgIAorKioqKioqKioq KioqKioqCisqKiogNjY2LDY3NiAqKioqCisgIH0KKyAgCisgIAorISBzdGF0aWMgdm9pZCBmcmVl bGluZXMoY2hhciAqKmxpbmVzKQorICAvKiBGcmVlcyB0aGUgZWxlbWVudHMgb2YgbGluZXMsIGFu ZCBsaW5lcyBpdHNlbGYuICovCisgIC8qIGxpbmVzIGlzIGEgTlVMTC10ZXJtaW5hdGVkIGFycmF5 IG9mIHN0cmluZ3MuICAgKi8KKyAgeworISAgIGNoYXIgKipsaW5lOworICAKKyAgICBmb3IgKGxp bmUgPSBsaW5lczsgICpsaW5lOyAgKytsaW5lKQorICAgICAgZnJlZSgqbGluZSk7CistLS0gNjMw LDY0MCAtLS0tCisgIH0KKyAgCisgIAorISBzdGF0aWMgdm9pZCBmcmVlbGluZXMod2NoYXJfdCAq KmxpbmVzKQorICAvKiBGcmVlcyB0aGUgZWxlbWVudHMgb2YgbGluZXMsIGFuZCBsaW5lcyBpdHNl bGYuICovCisgIC8qIGxpbmVzIGlzIGEgTlVMTC10ZXJtaW5hdGVkIGFycmF5IG9mIHN0cmluZ3Mu ICAgKi8KKyAgeworISAgIHdjaGFyX3QgKipsaW5lOworICAKKyAgICBmb3IgKGxpbmUgPSBsaW5l czsgICpsaW5lOyAgKytsaW5lKQorICAgICAgZnJlZSgqbGluZSk7CisqKioqKioqKioqKioqKioK KyoqKiA2NzgsNzQ1ICoqKioKKyAgICBmcmVlKGxpbmVzKTsKKyAgfQorICAKKy0gCisgIGludCBt YWluKGludCBhcmdjLCBjb25zdCBjaGFyICogY29uc3QgKmFyZ3YpCisgIHsKKyAgICBpbnQgaGVs cCA9IDAsIHZlcnNpb24gPSAwLCBoYW5nID0gMCwgcHJlZml4ID0gLTEsIHJlcGVhdCA9IDAsIHN1 ZmZpeCA9IC0xLAorICAgICAgICBUYWIgPSAxLCB3aWR0aCA9IDcyLCBib2R5ID0gMCwgY2FwID0g MCwgZGl2ID0gMCwgRXJyID0gMCwgZXhwZWwgPSAwLAorICAgICAgICBmaXQgPSAwLCBndWVzcyA9 IDAsIGludmlzID0gMCwganVzdCA9IDAsIGxhc3QgPSAwLCBxdW90ZSA9IDAsIFJlcG9ydCA9IDAs CisgICAgICAgIHRvdWNoID0gLTE7CishICAgaW50IHByZWZpeGJhaywgc3VmZml4YmFrLCBjLCBz YXdub25ibGFuaywgb3dlYmxhbmssIG4sIGksIGFmcCwgZnM7CisgICAgY2hhcnNldCAqYm9keWNo YXJzID0gTlVMTCwgKnByb3RlY3RjaGFycyA9IE5VTEwsICpxdW90ZWNoYXJzID0gTlVMTDsKKyEg ICBjaGFyICpwYXJpbml0ID0gTlVMTCwgKmFyZywgKippbmxpbmVzID0gTlVMTCwgKiplbmRsaW5l LCAqKmZpcnN0bGluZSwgKmVuZCwKKyEgICAgICAgICoqbmV4dGxpbmUsICoqb3V0bGluZXMgPSBO VUxMLCAqKmxpbmUsIGNoOworISAgIGNvbnN0IGNoYXIgKmVudiwgKiBjb25zdCB3aGl0ZWNoYXJz ID0gIiBcZlxuXHJcdFx2IjsKKyAgICBlcnJtc2dfdCBlcnJtc2cgPSB7ICdcMCcgfTsKKyAgICBs aW5lcHJvcCAqcHJvcHMgPSBOVUxMLCAqZmlyc3Rwcm9wLCAqbmV4dHByb3A7CisgICAgRklMRSAq ZXJyb3V0OworICAKKyAgLyogU2V0IHRoZSBjdXJyZW50IGxvY2FsZSBmcm9tIHRoZSBlbnZpcm9u bWVudDogKi8KKyAgCisgICAgc2V0bG9jYWxlKExDX0FMTCwiIik7CisgIAorICAvKiBQcm9jZXNz IGVudmlyb25tZW50IHZhcmlhYmxlczogKi8KKyAgCisgICAgZW52ID0gZ2V0ZW52KCJQQVJCT0RZ Iik7CisgICAgaWYgKCFlbnYpIGVudiA9ICIiOworISAgIGJvZHljaGFycyA9IHBhcnNlY2hhcnNl dChlbnYsZXJybXNnKTsKKyAgICBpZiAoKmVycm1zZykgeworICAgICAgaGVscCA9IDE7CisgICAg ICBnb3RvIHBhcmNsZWFudXA7CisgICAgfQorICAKKyAgICBlbnYgPSBnZXRlbnYoIlBBUlBST1RF Q1QiKTsKKyAgICBpZiAoIWVudikgZW52ID0gIiI7CishICAgcHJvdGVjdGNoYXJzID0gcGFyc2Vj aGFyc2V0KGVudixlcnJtc2cpOworICAgIGlmICgqZXJybXNnKSB7CisgICAgICBoZWxwID0gMTsK KyAgICAgIGdvdG8gcGFyY2xlYW51cDsKKyAgICB9CisgIAorICAgIGVudiA9IGdldGVudigiUEFS UVVPVEUiKTsKKyAgICBpZiAoIWVudikgZW52ID0gIj4gIjsKKyEgICBxdW90ZWNoYXJzID0gcGFy c2VjaGFyc2V0KGVudixlcnJtc2cpOworICAgIGlmICgqZXJybXNnKSB7CisgICAgICBoZWxwID0g MTsKKyAgICAgIGdvdG8gcGFyY2xlYW51cDsKKyAgICB9CisgIAorICAgIGVudiA9IGdldGVudigi UEFSSU5JVCIpOworICAgIGlmIChlbnYpIHsKKyEgICAgIHBhcmluaXQgPSBtYWxsb2MoKHN0cmxl bihlbnYpICsgMSkgKiBzaXplb2YgKGNoYXIpKTsKKyAgICAgIGlmICghcGFyaW5pdCkgeworISAg ICAgICBzdHJjcHkoZXJybXNnLG91dG9mbWVtKTsKKyAgICAgICAgZ290byBwYXJjbGVhbnVwOwor ICAgICAgfQorISAgICAgc3RyY3B5KHBhcmluaXQsZW52KTsKKyEgICAgIGFyZyA9IHN0cnRvayhw YXJpbml0LHdoaXRlY2hhcnMpOworICAgICAgd2hpbGUgKGFyZykgeworICAgICAgICBwYXJzZWFy ZyhhcmcsICZoZWxwLCAmdmVyc2lvbiwgYm9keWNoYXJzLCBwcm90ZWN0Y2hhcnMsCisgICAgICAg ICAgICAgICAgIHF1b3RlY2hhcnMsICZoYW5nLCAmcHJlZml4LCAmcmVwZWF0LCAmc3VmZml4LCAm VGFiLAorICAgICAgICAgICAgICAgICAmd2lkdGgsICZib2R5LCAmY2FwLCAmZGl2LCAmRXJyLCAm ZXhwZWwsICZmaXQsICZndWVzcywKKyAgICAgICAgICAgICAgICAgJmludmlzLCAmanVzdCwgJmxh c3QsICZxdW90ZSwgJlJlcG9ydCwgJnRvdWNoLCBlcnJtc2cgKTsKKyAgICAgICAgaWYgKCplcnJt c2cgfHwgaGVscCB8fCB2ZXJzaW9uKSBnb3RvIHBhcmNsZWFudXA7CishICAgICAgIGFyZyA9IHN0 cnRvayhOVUxMLHdoaXRlY2hhcnMpOworICAgICAgfQorICAgICAgZnJlZShwYXJpbml0KTsKKyAg ICAgIHBhcmluaXQgPSBOVUxMOworLS0tIDY0Miw3NTcgLS0tLQorICAgIGZyZWUobGluZXMpOwor ICB9CisgIAorICBpbnQgbWFpbihpbnQgYXJnYywgY29uc3QgY2hhciAqIGNvbnN0ICphcmd2KQor ICB7CisgICAgaW50IGhlbHAgPSAwLCB2ZXJzaW9uID0gMCwgaGFuZyA9IDAsIHByZWZpeCA9IC0x LCByZXBlYXQgPSAwLCBzdWZmaXggPSAtMSwKKyAgICAgICAgVGFiID0gMSwgd2lkdGggPSA3Miwg Ym9keSA9IDAsIGNhcCA9IDAsIGRpdiA9IDAsIEVyciA9IDAsIGV4cGVsID0gMCwKKyAgICAgICAg Zml0ID0gMCwgZ3Vlc3MgPSAwLCBpbnZpcyA9IDAsIGp1c3QgPSAwLCBsYXN0ID0gMCwgcXVvdGUg PSAwLCBSZXBvcnQgPSAwLAorICAgICAgICB0b3VjaCA9IC0xOworISAgIGludCBwcmVmaXhiYWss IHN1ZmZpeGJhaywgc2F3bm9uYmxhbmssIG93ZWJsYW5rLCBuLCBpLCBhZnAsIGZzOworICAgIGNo YXJzZXQgKmJvZHljaGFycyA9IE5VTEwsICpwcm90ZWN0Y2hhcnMgPSBOVUxMLCAqcXVvdGVjaGFy cyA9IE5VTEw7CishICAgd2ludF90IGM7CishICAgd2NoYXJfdCAqc3RhdGU7CishICAgd2NoYXJf dCAqcGFyaW5pdCA9IE5VTEwsICphcmcsICoqaW5saW5lcyA9IE5VTEwsICoqZW5kbGluZSwgKipm aXJzdGxpbmUsICplbmQsCishICAgICAqKm5leHRsaW5lLCAqKm91dGxpbmVzID0gTlVMTCwgKips aW5lOworISAgIGNvbnN0IGNoYXIgKmVudjsKKyEgICB3Y2hhcl90ICp3ZW52ID0gTlVMTDsKKyEg ICBjb25zdCB3Y2hhcl90ICogY29uc3Qgd2hpdGVjaGFycyA9IEwiIFxmXG5cclx0XHYiOworICAg IGVycm1zZ190IGVycm1zZyA9IHsgJ1wwJyB9OworICAgIGxpbmVwcm9wICpwcm9wcyA9IE5VTEws ICpmaXJzdHByb3AsICpuZXh0cHJvcDsKKyAgICBGSUxFICplcnJvdXQ7CisrICAgY2hhciAqbGFu Z2luZm87CisgIAorICAvKiBTZXQgdGhlIGN1cnJlbnQgbG9jYWxlIGZyb20gdGhlIGVudmlyb25t ZW50OiAqLworICAKKyAgICBzZXRsb2NhbGUoTENfQUxMLCIiKTsKKysgICBsYW5naW5mbyA9IG5s X2xhbmdpbmZvKENPREVTRVQpOworKyAgIGlmICghc3RyY21wKGxhbmdpbmZvLCAiQU5TSV9YMy40 LTE5NjgiKSkgeworKyAgICAgLy8gV2Ugd291bGQgbGlrZSB0byBmYWxsYmFjayBpbiBhbiA4IGJp dHMgZW5jb2RpbmcsIGJ1dCBpdCBpcyBub3QgZWFzaWx5IHBvc3NpYmxlLgorKyAgICAgLy9zZXRs b2NhbGUoTENfQ1RZUEUsICJDIik7CisrICAgICAvL2xhbmdpbmZvID0gbmxfbGFuZ2luZm8oQ09E RVNFVCk7CisrICAgICBmd3ByaW50ZiggRXJyID8gc3RkZXJyIDogc3Rkb3V0LCAKKysgICAgICAg ICBMIldhcm5pbmc6IExvY2FsZSBzZWVtcyBub3QgY29uZmlndXJlZFxuIik7CisrICAgfQorICAK KyAgLyogUHJvY2VzcyBlbnZpcm9ubWVudCB2YXJpYWJsZXM6ICovCisgIAorICAgIGVudiA9IGdl dGVudigiUEFSQk9EWSIpOworICAgIGlmICghZW52KSBlbnYgPSAiIjsKKyEgICB3ZW52ID0gbWFs bG9jKChzdHJsZW4oZW52KSArIDEpICogc2l6ZW9mICh3Y2hhcl90KSk7CishICAgaWYgKCF3ZW52 KSB7CishICAgICB3Y3NjcHkoZXJybXNnLG91dG9mbWVtKTsKKyEgICAgIGdvdG8gcGFyY2xlYW51 cDsKKyEgICB9CishICAgaWYgKDAgPiBtYnN0b3djcyh3ZW52LGVudiwgc3RybGVuKGVudikgKyAx KSkgeworISAgICAgd2NzY3B5KGVycm1zZywgTCJJbnZhbGlkIG11bHRpYnl0ZSBzZXF1ZW5jZSBp biBQQVJCT0RZXG4iKTsKKyEgICAgIGdvdG8gcGFyY2xlYW51cDsKKyEgICB9CishICAgYm9keWNo YXJzID0gcGFyc2VjaGFyc2V0KHdlbnYsZXJybXNnKTsKKyAgICBpZiAoKmVycm1zZykgeworICAg ICAgaGVscCA9IDE7CisgICAgICBnb3RvIHBhcmNsZWFudXA7CisgICAgfQorKyAgIGZyZWUod2Vu dik7CisrICAgd2VudiA9IE5VTEw7CisgIAorICAgIGVudiA9IGdldGVudigiUEFSUFJPVEVDVCIp OworICAgIGlmICghZW52KSBlbnYgPSAiIjsKKyEgICB3ZW52ID0gbWFsbG9jKChzdHJsZW4oZW52 KSArIDEpICogc2l6ZW9mICh3Y2hhcl90KSk7CishICAgaWYgKCF3ZW52KSB7CishICAgICB3Y3Nj cHkoZXJybXNnLG91dG9mbWVtKTsKKyEgICAgIGdvdG8gcGFyY2xlYW51cDsKKyEgICB9CishICAg aWYgKDAgPiBtYnN0b3djcyh3ZW52LGVudiwgc3RybGVuKGVudikgKyAxKSkgeworISAgICAgd2Nz Y3B5KGVycm1zZywgTCJJbnZhbGlkIG11bHRpYnl0ZSBzZXF1ZW5jZSBpbiBQQVJQUk9URUNUXG4i KTsKKyEgICAgIGdvdG8gcGFyY2xlYW51cDsKKyEgICB9CishICAgcHJvdGVjdGNoYXJzID0gcGFy c2VjaGFyc2V0KHdlbnYsZXJybXNnKTsKKyAgICBpZiAoKmVycm1zZykgeworICAgICAgaGVscCA9 IDE7CisgICAgICBnb3RvIHBhcmNsZWFudXA7CisgICAgfQorKyAgIGZyZWUod2Vudik7CisrICAg d2VudiA9IE5VTEw7CisgIAorICAgIGVudiA9IGdldGVudigiUEFSUVVPVEUiKTsKKyAgICBpZiAo IWVudikgZW52ID0gIj4gIjsKKyEgICB3ZW52ID0gbWFsbG9jKChzdHJsZW4oZW52KSArIDEpICog c2l6ZW9mICh3Y2hhcl90KSk7CishICAgaWYgKCF3ZW52KSB7CishICAgICB3Y3NjcHkoZXJybXNn LG91dG9mbWVtKTsKKyEgICAgIGdvdG8gcGFyY2xlYW51cDsKKyEgICB9CishICAgaWYgKDAgPiBt YnN0b3djcyh3ZW52LGVudiwgc3RybGVuKGVudikgKyAxKSkgeworISAgICAgd2NzY3B5KGVycm1z ZywgTCJJbnZhbGlkIG11bHRpYnl0ZSBzZXF1ZW5jZSBpbiBQQVJRVU9URVxuIik7CishICAgICBn b3RvIHBhcmNsZWFudXA7CishICAgfQorISAgIHF1b3RlY2hhcnMgPSBwYXJzZWNoYXJzZXQod2Vu dixlcnJtc2cpOworICAgIGlmICgqZXJybXNnKSB7CisgICAgICBoZWxwID0gMTsKKyAgICAgIGdv dG8gcGFyY2xlYW51cDsKKyAgICB9CisrICAgZnJlZSh3ZW52KTsKKysgICB3ZW52ID0gTlVMTDsK KyAgCisgICAgZW52ID0gZ2V0ZW52KCJQQVJJTklUIik7CisgICAgaWYgKGVudikgeworISAgICAg cGFyaW5pdCA9IG1hbGxvYygoc3RybGVuKGVudikgKyAxKSAqIHNpemVvZiAod2NoYXJfdCkpOwor ICAgICAgaWYgKCFwYXJpbml0KSB7CishICAgICAgIHdjc2NweShlcnJtc2csb3V0b2ZtZW0pOwor ICAgICAgICBnb3RvIHBhcmNsZWFudXA7CisgICAgICB9CishICAgICBpZiAoMCA+IG1ic3Rvd2Nz KHBhcmluaXQsZW52LCBzdHJsZW4oZW52KSArIDEpKSB7CishICAgICAgIHdjc2NweShlcnJtc2cs IEwiSW52YWxpZCBtdWx0aWJ5dGUgc2VxdWVuY2UgaW4gUEFSSU5JVFxuIik7CishICAgICAgIGdv dG8gcGFyY2xlYW51cDsKKyEgICAgIH0gICAgCishICAgICBhcmcgPSB3Y3N0b2socGFyaW5pdCwg d2hpdGVjaGFycywgJnN0YXRlKTsKKyAgICAgIHdoaWxlIChhcmcpIHsKKyAgICAgICAgcGFyc2Vh cmcoYXJnLCAmaGVscCwgJnZlcnNpb24sIGJvZHljaGFycywgcHJvdGVjdGNoYXJzLAorICAgICAg ICAgICAgICAgICBxdW90ZWNoYXJzLCAmaGFuZywgJnByZWZpeCwgJnJlcGVhdCwgJnN1ZmZpeCwg JlRhYiwKKyAgICAgICAgICAgICAgICAgJndpZHRoLCAmYm9keSwgJmNhcCwgJmRpdiwgJkVyciwg JmV4cGVsLCAmZml0LCAmZ3Vlc3MsCisgICAgICAgICAgICAgICAgICZpbnZpcywgJmp1c3QsICZs YXN0LCAmcXVvdGUsICZSZXBvcnQsICZ0b3VjaCwgZXJybXNnICk7CisgICAgICAgIGlmICgqZXJy bXNnIHx8IGhlbHAgfHwgdmVyc2lvbikgZ290byBwYXJjbGVhbnVwOworISAgICAgICBhcmcgPSB3 Y3N0b2soTlVMTCwgd2hpdGVjaGFycywgJnN0YXRlKTsKKyAgICAgIH0KKyAgICAgIGZyZWUocGFy aW5pdCk7CisgICAgICBwYXJpbml0ID0gTlVMTDsKKyoqKioqKioqKioqKioqKgorKioqIDc0OCw4 MDQgKioqKgorICAvKiBQcm9jZXNzIGNvbW1hbmQgbGluZSBhcmd1bWVudHM6ICovCisgIAorICAg IHdoaWxlICgqKythcmd2KSB7CishICAgICBwYXJzZWFyZygqYXJndiwgJmhlbHAsICZ2ZXJzaW9u LCBib2R5Y2hhcnMsIHByb3RlY3RjaGFycywKKyAgICAgICAgICAgICAgIHF1b3RlY2hhcnMsICZo YW5nLCAmcHJlZml4LCAmcmVwZWF0LCAmc3VmZml4LCAmVGFiLAorICAgICAgICAgICAgICAgJndp ZHRoLCAmYm9keSwgJmNhcCwgJmRpdiwgJkVyciwgJmV4cGVsLCAmZml0LCAmZ3Vlc3MsCisgICAg ICAgICAgICAgICAmaW52aXMsICZqdXN0LCAmbGFzdCwgJnF1b3RlLCAmUmVwb3J0LCAmdG91Y2gs IGVycm1zZyApOworICAgICAgaWYgKCplcnJtc2cgfHwgaGVscCB8fCB2ZXJzaW9uKSBnb3RvIHBh cmNsZWFudXA7CisgICAgfQorICAKKyAgICBpZiAoVGFiID09IDApIHsKKyEgICAgIHN0cmNweShl cnJtc2csICI8VGFiPiBtdXN0IG5vdCBiZSAwLlxuIik7CisgICAgICBnb3RvIHBhcmNsZWFudXA7 CisgICAgfQorICAKKyAgICBpZiAodG91Y2ggPCAwKSB0b3VjaCA9IGZpdCB8fCBsYXN0OworICAg IHByZWZpeGJhayA9IHByZWZpeDsKKyAgICBzdWZmaXhiYWsgPSBzdWZmaXg7CishIAorISAvKiBN YWluIGxvb3A6ICovCishIAorICAgIGZvciAoc2F3bm9uYmxhbmsgPSBvd2VibGFuayA9IDA7ICA7 ICApIHsKKyAgICAgIGZvciAoOzspIHsKKyEgICAgICAgYyA9IGdldGNoYXIoKTsKKyEgICAgICAg aWYgKGMgPT0gRU9GKSBicmVhazsKKyEgICAgICAgKih1bnNpZ25lZCBjaGFyICopJmNoID0gYzsK KyEgICAgICAgaWYgKGV4cGVsICYmIGNoID09ICdcbicpIHsKKyAgICAgICAgICBvd2VibGFuayA9 IHNhd25vbmJsYW5rOworICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CishICAgICAgIGlm IChjc21lbWJlcihjaCwgcHJvdGVjdGNoYXJzKSkgeworICAgICAgICAgIHNhd25vbmJsYW5rID0g MTsKKyAgICAgICAgICBpZiAob3dlYmxhbmspIHsKKyEgICAgICAgICAgIHB1dHMoIiIpOworICAg ICAgICAgICAgb3dlYmxhbmsgPSAwOworICAgICAgICAgIH0KKyEgICAgICAgICB3aGlsZSAoY2gg IT0gJ1xuJykgeworISAgICAgICAgICAgcHV0Y2hhcihjKTsKKyEgICAgICAgICAgIGMgPSBnZXRj aGFyKCk7CishICAgICAgICAgICBpZiAoYyA9PSBFT0YpIGJyZWFrOworISAgICAgICAgICAgKih1 bnNpZ25lZCBjaGFyICopJmNoID0gYzsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyEgICAgICAg aWYgKGNoICE9ICdcbicpIGJyZWFrOyAgLyogc3Vic3VtZXMgdGhlIGNhc2UgdGhhdCBjID09IEVP RiAqLworISAgICAgICBwdXRjaGFyKGMpOworICAgICAgfQorISAgICAgaWYgKGMgPT0gRU9GKSBi cmVhazsKKyEgICAgIHVuZ2V0YyhjLHN0ZGluKTsKKyAgCisgICAgICBpbmxpbmVzID0KKyAgICAg ICAgcmVhZGxpbmVzKCZwcm9wcywgcHJvdGVjdGNoYXJzLCBxdW90ZWNoYXJzLCBUYWIsIGludmlz LCBxdW90ZSwgZXJybXNnKTsKKyAgICAgIGlmICgqZXJybXNnKSBnb3RvIHBhcmNsZWFudXA7Cish IAorISAgICAgZm9yIChlbmRsaW5lID0gaW5saW5lczsgICplbmRsaW5lOyAgKytlbmRsaW5lKTsK KyAgICAgIGlmIChlbmRsaW5lID09IGlubGluZXMpIHsKKyAgICAgICAgZnJlZShpbmxpbmVzKTsK KyAgICAgICAgaW5saW5lcyA9IE5VTEw7CistLS0gNzYwLDgzMCAtLS0tCisgIC8qIFByb2Nlc3Mg Y29tbWFuZCBsaW5lIGFyZ3VtZW50czogKi8KKyAgCisgICAgd2hpbGUgKCorK2FyZ3YpIHsKKyEg ICAgIGFyZyA9IG1hbGxvYygoc3RybGVuKCphcmd2KSArIDEpICogc2l6ZW9mICh3Y2hhcl90KSk7 CishICAgICBpZiAoMCA+IG1ic3Rvd2NzKGFyZywgKmFyZ3YsIHN0cmxlbigqYXJndikgKyAxKSkg eworISAgICAgICB3Y3NjcHkoZXJybXNnLCBMIkludmFsaWQgbXVsdGlieXRlIHNlcXVlbmNlIGlu IGFyZ3VtZW50XG4iKTsKKyEgICAgICAgZ290byBwYXJjbGVhbnVwOworISAgICAgfQorISAgICAg cGFyc2VhcmcoYXJnLCAmaGVscCwgJnZlcnNpb24sIGJvZHljaGFycywgcHJvdGVjdGNoYXJzLAor ICAgICAgICAgICAgICAgcXVvdGVjaGFycywgJmhhbmcsICZwcmVmaXgsICZyZXBlYXQsICZzdWZm aXgsICZUYWIsCisgICAgICAgICAgICAgICAmd2lkdGgsICZib2R5LCAmY2FwLCAmZGl2LCAmRXJy LCAmZXhwZWwsICZmaXQsICZndWVzcywKKyAgICAgICAgICAgICAgICZpbnZpcywgJmp1c3QsICZs YXN0LCAmcXVvdGUsICZSZXBvcnQsICZ0b3VjaCwgZXJybXNnICk7CisrICAgICBmcmVlKGFyZyk7 CisgICAgICBpZiAoKmVycm1zZyB8fCBoZWxwIHx8IHZlcnNpb24pIGdvdG8gcGFyY2xlYW51cDsK KyAgICB9CisgIAorICAgIGlmIChUYWIgPT0gMCkgeworISAgICAgd2NzY3B5KGVycm1zZywgTCI8 VGFiPiBtdXN0IG5vdCBiZSAwLlxuIik7CisgICAgICBnb3RvIHBhcmNsZWFudXA7CisgICAgfQor ICAKKyAgICBpZiAodG91Y2ggPCAwKSB0b3VjaCA9IGZpdCB8fCBsYXN0OworICAgIHByZWZpeGJh ayA9IHByZWZpeDsKKyAgICBzdWZmaXhiYWsgPSBzdWZmaXg7CishICAgCishICAgLyogTWFpbiBs b29wOiAqLworICAgIGZvciAoc2F3bm9uYmxhbmsgPSBvd2VibGFuayA9IDA7ICA7ICApIHsKKyAg ICAgIGZvciAoOzspIHsKKyEgICAgICAgYyA9IGdldHdjaGFyKCk7CishICAgICAgIGlmIChjID09 IFdFT0YpIHsKKyEgICAgICAgICBpZiAoZXJybm8gPT0gRUlMU0VRKSB7CishICAgICAgICAgICB3 Y3NjcHkoZXJybXNnLCBMIkludmFsaWQgbXVsdGlieXRlIHNlcXVlbmNlIGluIGlucHV0XG4iKTsK KyEgICAgICAgICAgIGdvdG8gcGFyY2xlYW51cDsKKyEgICAgICAgICB9CishICAgICAgICAgYnJl YWs7CishICAgICAgIH0KKyEgICAgICAgaWYgKGV4cGVsICYmIGMgPT0gTCdcbicpIHsKKyAgICAg ICAgICBvd2VibGFuayA9IHNhd25vbmJsYW5rOworICAgICAgICAgIGNvbnRpbnVlOworICAgICAg ICB9CishICAgICAgIGlmIChjc21lbWJlcihjLCBwcm90ZWN0Y2hhcnMpKSB7CisgICAgICAgICAg c2F3bm9uYmxhbmsgPSAxOworICAgICAgICAgIGlmIChvd2VibGFuaykgeworISAgICAgICAgICAg ZnB1dHdjKEwnXG4nLCBzdGRvdXQpOworICAgICAgICAgICAgb3dlYmxhbmsgPSAwOworICAgICAg ICAgIH0KKyEgICAgICAgICB3aGlsZSAoYyAhPSBMJ1xuJykgeworISAgICAgICAgICAgcHV0d2No YXIoYyk7CishICAgICAgICAgICBjID0gZ2V0d2NoYXIoKTsKKyEgICAgICAgICAgIGlmIChjID09 IFdFT0YpIHsKKyEgICAgICAgICAgICAgaWYgKGVycm5vID09IEVJTFNFUSkgeworISAgICAgICAg ICAgICAgIHdjc2NweShlcnJtc2csIEwiSW52YWxpZCBtdWx0aWJ5dGUgc2VxdWVuY2UgaW4gaW5w dXRcbiIpOworISAgICAgICAgICAgICAgIGdvdG8gcGFyY2xlYW51cDsKKyEgICAgICAgICAgICAg fQorISAgICAgICAgICAgICBicmVhazsKKyEgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAg ICAgIH0KKyEgICAgICAgaWYgKGMgIT0gTCdcbicpIGJyZWFrOyAgLyogc3Vic3VtZXMgdGhlIGNh c2UgdGhhdCBjID09IEVPRiAqLworISAgICAgICBwdXR3Y2hhcihjKTsKKyAgICAgIH0KKyEgICAg IGlmIChjID09IFdFT0YpIGJyZWFrOworISAgICAgdW5nZXR3YyhjLHN0ZGluKTsKKyAgCisgICAg ICBpbmxpbmVzID0KKyAgICAgICAgcmVhZGxpbmVzKCZwcm9wcywgcHJvdGVjdGNoYXJzLCBxdW90 ZWNoYXJzLCBUYWIsIGludmlzLCBxdW90ZSwgZXJybXNnKTsKKyAgICAgIGlmICgqZXJybXNnKSBn b3RvIHBhcmNsZWFudXA7CishICAgICBmb3IgKGVuZGxpbmUgPSBpbmxpbmVzOyAgKmVuZGxpbmU7 ICArK2VuZGxpbmUpIDsKKyAgICAgIGlmIChlbmRsaW5lID09IGlubGluZXMpIHsKKyAgICAgICAg ZnJlZShpbmxpbmVzKTsKKyAgICAgICAgaW5saW5lcyA9IE5VTEw7CisqKioqKioqKioqKioqKioK KyoqKiA4MDcsODQ0ICoqKioKKyAgCisgICAgICBzYXdub25ibGFuayA9IDE7CisgICAgICBpZiAo b3dlYmxhbmspIHsKKyEgICAgICAgcHV0cygiIik7CisgICAgICAgIG93ZWJsYW5rID0gMDsKKyAg ICAgIH0KKyAgCishICAgICBkZWxpbWl0KChjb25zdCBjaGFyICogY29uc3QgKikgaW5saW5lcywK KyEgICAgICAgICAgICAgKGNvbnN0IGNoYXIgKiBjb25zdCAqKSBlbmRsaW5lLAorICAgICAgICAg ICAgICBib2R5Y2hhcnMsIHJlcGVhdCwgYm9keSwgZGl2LCAwLCAwLCBwcm9wcyk7CisgIAorICAg ICAgaWYgKGV4cGVsKQorISAgICAgICBtYXJrc3VwZXJmKChjb25zdCBjaGFyICogY29uc3QgKikg aW5saW5lcywKKyEgICAgICAgICAgICAgICAgICAoY29uc3QgY2hhciAqIGNvbnN0ICopIGVuZGxp bmUsIHByb3BzKTsKKyAgCisgICAgICBmaXJzdGxpbmUgPSBpbmxpbmVzLCBmaXJzdHByb3AgPSBw cm9wczsKKyAgICAgIGRvIHsKKyAgICAgICAgaWYgKGlzYm9kaWxlc3MoZmlyc3Rwcm9wKSkgewor ICAgICAgICAgIGlmICghaXNpbnZpcyhmaXJzdHByb3ApICYmICEoZXhwZWwgJiYgaXNzdXBlcmYo Zmlyc3Rwcm9wKSkpIHsKKyAgICAgICAgICAgIGZvciAoZW5kID0gKmZpcnN0bGluZTsgICplbmQ7 ICArK2VuZCk7CishICAgICAgICAgICBpZiAoIXJlcGVhdCB8fCAoZmlyc3Rwcm9wLT5yYyA9PSAn ICcgJiYgIWZpcnN0cHJvcC0+cykpIHsKKyEgICAgICAgICAgICAgd2hpbGUgKGVuZCA+ICpmaXJz dGxpbmUgJiYgZW5kWy0xXSA9PSAnICcpIC0tZW5kOworISAgICAgICAgICAgICAqZW5kID0gJ1ww JzsKKyEgICAgICAgICAgICAgcHV0cygqZmlyc3RsaW5lKTsKKyAgICAgICAgICAgIH0KKyAgICAg ICAgICAgIGVsc2UgeworICAgICAgICAgICAgICBuID0gd2lkdGggLSBmaXJzdHByb3AtPnAgLSBm aXJzdHByb3AtPnM7CisgICAgICAgICAgICAgIGlmIChuIDwgMCkgeworISAgICAgICAgICAgICAg IHNwcmludGYoZXJybXNnLGltcG9zc2liaWxpdHksNSk7CisgICAgICAgICAgICAgICAgZ290byBw YXJjbGVhbnVwOworICAgICAgICAgICAgICB9CishICAgICAgICAgICAgIHByaW50ZigiJS4qcyIs IGZpcnN0cHJvcC0+cCwgKmZpcnN0bGluZSk7CisgICAgICAgICAgICAgIGZvciAoaSA9IG47ICBp OyAgLS1pKQorISAgICAgICAgICAgICAgIHB1dGNoYXIoKih1bnNpZ25lZCBjaGFyICopJmZpcnN0 cHJvcC0+cmMpOworISAgICAgICAgICAgICBwdXRzKGVuZCAtIGZpcnN0cHJvcC0+cyk7CisgICAg ICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICAgICsrZmlyc3RsaW5lLCArK2ZpcnN0cHJv cDsKKy0tLSA4MzMsODcxIC0tLS0KKyAgCisgICAgICBzYXdub25ibGFuayA9IDE7CisgICAgICBp ZiAob3dlYmxhbmspIHsKKyEgICAgICAgZnB1dHdjKEwnXG4nLCBzdGRvdXQpOworICAgICAgICBv d2VibGFuayA9IDA7CisgICAgICB9CisgIAorISAgICAgZGVsaW1pdCgoY29uc3Qgd2NoYXJfdCAq IGNvbnN0ICopIGlubGluZXMsCishICAgICAgICAgICAgIChjb25zdCB3Y2hhcl90ICogY29uc3Qg KikgZW5kbGluZSwKKyAgICAgICAgICAgICAgYm9keWNoYXJzLCByZXBlYXQsIGJvZHksIGRpdiwg MCwgMCwgcHJvcHMpOworICAKKyAgICAgIGlmIChleHBlbCkKKyEgICAgICAgbWFya3N1cGVyZigo Y29uc3Qgd2NoYXJfdCAqIGNvbnN0ICopIGlubGluZXMsCishICAgICAgICAgICAgICAgICAgKGNv bnN0IHdjaGFyX3QgKiBjb25zdCAqKSBlbmRsaW5lLCBwcm9wcyk7CisgIAorICAgICAgZmlyc3Rs aW5lID0gaW5saW5lcywgZmlyc3Rwcm9wID0gcHJvcHM7CisrIAorICAgICAgZG8geworICAgICAg ICBpZiAoaXNib2RpbGVzcyhmaXJzdHByb3ApKSB7CisgICAgICAgICAgaWYgKCFpc2ludmlzKGZp cnN0cHJvcCkgJiYgIShleHBlbCAmJiBpc3N1cGVyZihmaXJzdHByb3ApKSkgeworICAgICAgICAg ICAgZm9yIChlbmQgPSAqZmlyc3RsaW5lOyAgKmVuZDsgICsrZW5kKTsKKyEgICAgICAgICAgIGlm ICghcmVwZWF0IHx8IChmaXJzdHByb3AtPnJjID09IEwnICcgJiYgIWZpcnN0cHJvcC0+cykpIHsK KyEgICAgICAgICAgICAgd2hpbGUgKGVuZCA+ICpmaXJzdGxpbmUgJiYgZW5kWy0xXSA9PSBMJyAn KSAtLWVuZDsKKyEgICAgICAgICAgICAgKmVuZCA9IEwnXDAnOworISAgICAgICAgICAgICBmd3By aW50ZihzdGRvdXQsIEwiJWxzXG4iLCAqZmlyc3RsaW5lKTsKKyAgICAgICAgICAgIH0KKyAgICAg ICAgICAgIGVsc2UgeworICAgICAgICAgICAgICBuID0gd2lkdGggLSBmaXJzdHByb3AtPnAgLSBm aXJzdHByb3AtPnM7CisgICAgICAgICAgICAgIGlmIChuIDwgMCkgeworISAgICAgICAgICAgICAg IHN3cHJpbnRmKGVycm1zZyxlcnJtc2dfc2l6ZSxpbXBvc3NpYmlsaXR5LDUpOworICAgICAgICAg ICAgICAgIGdvdG8gcGFyY2xlYW51cDsKKyAgICAgICAgICAgICAgfQorISAgICAgICAgICAgICBm d3ByaW50ZihzdGRvdXQsIEwiJS4qbHMiLCBmaXJzdHByb3AtPnAsICpmaXJzdGxpbmUpOworICAg ICAgICAgICAgICBmb3IgKGkgPSBuOyAgaTsgIC0taSkKKyEgICAgICAgICAgICAgICBmcHV0d2Mo Zmlyc3Rwcm9wLT5yYywgc3Rkb3V0KTsKKyEgICAgICAgICAgICAgZndwcmludGYoc3Rkb3V0LCBM IiVsc1xuIiwgZW5kIC0gZmlyc3Rwcm9wLT5zKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9 CisgICAgICAgICAgKytmaXJzdGxpbmUsICsrZmlyc3Rwcm9wOworKioqKioqKioqKioqKioqCisq KiogODQ4LDg3NSAqKioqCisgICAgICAgIGZvciAobmV4dGxpbmUgPSBmaXJzdGxpbmUgKyAxLCBu ZXh0cHJvcCA9IGZpcnN0cHJvcCArIDE7CisgICAgICAgICAgICAgbmV4dGxpbmUgPCBlbmRsaW5l ICYmICFpc2JvZGlsZXNzKG5leHRwcm9wKSAmJiAhaXNmaXJzdChuZXh0cHJvcCk7CisgICAgICAg ICAgICAgKytuZXh0bGluZSwgKytuZXh0cHJvcCk7CishIAorICAgICAgICBwcmVmaXggPSBwcmVm aXhiYWssIHN1ZmZpeCA9IHN1ZmZpeGJhazsKKyEgICAgICAgc2V0YWZmaXhlcygoY29uc3QgY2hh ciAqIGNvbnN0ICopIGZpcnN0bGluZSwKKyEgICAgICAgICAgICAgICAgICAoY29uc3QgY2hhciAq IGNvbnN0ICopIG5leHRsaW5lLCBmaXJzdHByb3AsIGJvZHljaGFycywKKyAgICAgICAgICAgICAg ICAgICBxdW90ZWNoYXJzLCBoYW5nLCBib2R5LCBxdW90ZSwgJmFmcCwgJmZzLCAmcHJlZml4LCAm c3VmZml4KTsKKyAgICAgICAgaWYgKHdpZHRoIDw9IHByZWZpeCArIHN1ZmZpeCkgeworISAgICAg ICAgIHNwcmludGYoZXJybXNnLAorISAgICAgICAgICAgICAgICAgIjx3aWR0aD4gKCVkKSA8PSA8 cHJlZml4PiAoJWQpICsgPHN1ZmZpeD4gKCVkKVxuIiwKKyAgICAgICAgICAgICAgICAgIHdpZHRo LCBwcmVmaXgsIHN1ZmZpeCk7CisgICAgICAgICAgZ290byBwYXJjbGVhbnVwOworICAgICAgICB9 CisgIAorICAgICAgICBvdXRsaW5lcyA9CishICAgICAgICAgcmVmb3JtYXQoKGNvbnN0IGNoYXIg KiBjb25zdCAqKSBmaXJzdGxpbmUsCishICAgICAgICAgICAgICAgICAgKGNvbnN0IGNoYXIgKiBj b25zdCAqKSBuZXh0bGluZSwKKyAgICAgICAgICAgICAgICAgICBhZnAsIGZzLCBoYW5nLCBwcmVm aXgsIHN1ZmZpeCwgd2lkdGgsIGNhcCwKKyAgICAgICAgICAgICAgICAgICBmaXQsIGd1ZXNzLCBq dXN0LCBsYXN0LCBSZXBvcnQsIHRvdWNoLCBlcnJtc2cpOworICAgICAgICBpZiAoKmVycm1zZykg Z290byBwYXJjbGVhbnVwOworLSAKKyAgICAgICAgZm9yIChsaW5lID0gb3V0bGluZXM7ICAqbGlu ZTsgICsrbGluZSkKKyEgICAgICAgICBwdXRzKCpsaW5lKTsKKyEgCisgICAgICAgIGZyZWVsaW5l cyhvdXRsaW5lcyk7CisgICAgICAgIG91dGxpbmVzID0gTlVMTDsKKyAgCistLS0gODc1LDkwMCAt LS0tCisgICAgICAgIGZvciAobmV4dGxpbmUgPSBmaXJzdGxpbmUgKyAxLCBuZXh0cHJvcCA9IGZp cnN0cHJvcCArIDE7CisgICAgICAgICAgICAgbmV4dGxpbmUgPCBlbmRsaW5lICYmICFpc2JvZGls ZXNzKG5leHRwcm9wKSAmJiAhaXNmaXJzdChuZXh0cHJvcCk7CisgICAgICAgICAgICAgKytuZXh0 bGluZSwgKytuZXh0cHJvcCk7CishICAgICAgIAorICAgICAgICBwcmVmaXggPSBwcmVmaXhiYWss IHN1ZmZpeCA9IHN1ZmZpeGJhazsKKyEgICAgICAgc2V0YWZmaXhlcygoY29uc3Qgd2NoYXJfdCAq IGNvbnN0ICopIGZpcnN0bGluZSwKKyEgICAgICAgICAgICAgICAgICAoY29uc3Qgd2NoYXJfdCAq IGNvbnN0ICopIG5leHRsaW5lLCBmaXJzdHByb3AsIGJvZHljaGFycywKKyAgICAgICAgICAgICAg ICAgICBxdW90ZWNoYXJzLCBoYW5nLCBib2R5LCBxdW90ZSwgJmFmcCwgJmZzLCAmcHJlZml4LCAm c3VmZml4KTsKKyAgICAgICAgaWYgKHdpZHRoIDw9IHByZWZpeCArIHN1ZmZpeCkgeworISAgICAg ICAgIHN3cHJpbnRmKGVycm1zZyxlcnJtc2dfc2l6ZSwKKyEgICAgICAgICAgICAgICAgIEwiPHdp ZHRoPiAoJWQpIDw9IDxwcmVmaXg+ICglZCkgKyA8c3VmZml4PiAoJWQpXG4iLAorICAgICAgICAg ICAgICAgICAgd2lkdGgsIHByZWZpeCwgc3VmZml4KTsKKyAgICAgICAgICBnb3RvIHBhcmNsZWFu dXA7CisgICAgICAgIH0KKyAgCisgICAgICAgIG91dGxpbmVzID0KKyEgICAgICAgICByZWZvcm1h dCgoY29uc3Qgd2NoYXJfdCAqIGNvbnN0ICopIGZpcnN0bGluZSwKKyEgICAgICAgICAgICAgICAg ICAoY29uc3Qgd2NoYXJfdCAqIGNvbnN0ICopIG5leHRsaW5lLAorICAgICAgICAgICAgICAgICAg IGFmcCwgZnMsIGhhbmcsIHByZWZpeCwgc3VmZml4LCB3aWR0aCwgY2FwLAorICAgICAgICAgICAg ICAgICAgIGZpdCwgZ3Vlc3MsIGp1c3QsIGxhc3QsIFJlcG9ydCwgdG91Y2gsIGVycm1zZyk7Cisg ICAgICAgIGlmICgqZXJybXNnKSBnb3RvIHBhcmNsZWFudXA7CisgICAgICAgIGZvciAobGluZSA9 IG91dGxpbmVzOyAgKmxpbmU7ICArK2xpbmUpCishICAgICAgICAgZndwcmludGYoc3Rkb3V0LCBM IiVsc1xuIiwgKmxpbmUpOworICAgICAgICBmcmVlbGluZXMob3V0bGluZXMpOworICAgICAgICBv dXRsaW5lcyA9IE5VTEw7CisgIAorKioqKioqKioqKioqKioqCisqKiogODg0LDg5MCAqKioqCisg ICAgfQorICAKKyAgcGFyY2xlYW51cDoKKyEgCisgICAgaWYgKGJvZHljaGFycykgZnJlZWNoYXJz ZXQoYm9keWNoYXJzKTsKKyAgICBpZiAocHJvdGVjdGNoYXJzKSBmcmVlY2hhcnNldChwcm90ZWN0 Y2hhcnMpOworICAgIGlmIChxdW90ZWNoYXJzKSBmcmVlY2hhcnNldChxdW90ZWNoYXJzKTsKKy0t LSA5MDksOTE1IC0tLS0KKyAgICB9CisgIAorICBwYXJjbGVhbnVwOgorISAgIGlmICh3ZW52KSBm cmVlKHdlbnYpOworICAgIGlmIChib2R5Y2hhcnMpIGZyZWVjaGFyc2V0KGJvZHljaGFycyk7Cisg ICAgaWYgKHByb3RlY3RjaGFycykgZnJlZWNoYXJzZXQocHJvdGVjdGNoYXJzKTsKKyAgICBpZiAo cXVvdGVjaGFycykgZnJlZWNoYXJzZXQocXVvdGVjaGFycyk7CisqKioqKioqKioqKioqKioKKyoq KiA4OTQsOTAxICoqKioKKyAgICBpZiAob3V0bGluZXMpIGZyZWVsaW5lcyhvdXRsaW5lcyk7Cisg IAorICAgIGVycm91dCA9IEVyciA/IHN0ZGVyciA6IHN0ZG91dDsKKyEgICBpZiAoKmVycm1zZykg ZnByaW50ZihlcnJvdXQsICJwYXIgZXJyb3I6XG4lLipzIiwgZXJybXNnX3NpemUsIGVycm1zZyk7 CishICAgaWYgKHZlcnNpb24pIGZwdXRzKCJwYXIgMS41MlxuIixlcnJvdXQpOworICAgIGlmICho ZWxwKSAgICBmcHV0cyh1c2FnZW1zZyxlcnJvdXQpOworICAKKyAgICByZXR1cm4gKmVycm1zZyA/ IEVYSVRfRkFJTFVSRSA6IEVYSVRfU1VDQ0VTUzsKKy0tLSA5MTksOTMwIC0tLS0KKyAgICBpZiAo b3V0bGluZXMpIGZyZWVsaW5lcyhvdXRsaW5lcyk7CisgIAorICAgIGVycm91dCA9IEVyciA/IHN0 ZGVyciA6IHN0ZG91dDsKKyEgICBpZiAoKmVycm1zZykgZndwcmludGYoZXJyb3V0LCBMInBhciBl cnJvcjpcbiUuKmxzIiwgZXJybXNnX3NpemUsIGVycm1zZyk7CishICNpZmRlZiBOT1dJRFRICish ICAgaWYgKHZlcnNpb24pIGZwdXR3cyhMInBhciAxLjUyLWkxOG4uNCAod2l0aG91dCB3Y3dpZHRo KCkgc3VwcG9ydClcbiIsZXJyb3V0KTsKKyEgI2Vsc2UKKyEgICBpZiAodmVyc2lvbikgZnB1dHdz KEwicGFyIDEuNTItaTE4bi40XG4iLGVycm91dCk7CishICNlbmRpZgorICAgIGlmIChoZWxwKSAg ICBmcHV0cyh1c2FnZW1zZyxlcnJvdXQpOworICAKKyAgICByZXR1cm4gKmVycm1zZyA/IEVYSVRf RkFJTFVSRSA6IEVYSVRfU1VDQ0VTUzsKK9Ci0L7Qu9GM0LrQviDQsiAuLi9QYXIxNTItdW5pY29k ZS86IHBhci5jLm9yaWcKK2RpZmYgLWMgLi9wYXIuZG9jIC4uL1BhcjE1Mi11bmljb2RlL3Bhci5k b2MKKyoqKiAuL3Bhci5kb2MJMjAwMS0wNC0zMCAwMToxNzoyOC4wMDAwMDAwMDAgKzA0MDAKKy0t LSAuLi9QYXIxNTItdW5pY29kZS9wYXIuZG9jCTIwMTktMTAtMjYgMTc6MjE6MDguNTQ4MDUwODUz ICswMzAwCisqKioqKioqKioqKioqKioKKyoqKiAxLDYgKioqKgorICAgICoqKioqKioqKioqKioq KioqKioqKgorICAgICogcGFyLmRvYyAgICAgICAgICAgKgorISAgICogZm9yIFBhciAxLjUyICAg ICAgKgorICAgICogQ29weXJpZ2h0IDIwMDEgYnkgKgorICAgICogQWRhbSBNLiBDb3N0ZWxsbyAg KgorICAgICoqKioqKioqKioqKioqKioqKioqKgorLS0tIDEsNiAtLS0tCisgICAgKioqKioqKioq KioqKioqKioqKioqCisgICAgKiBwYXIuZG9jICAgICAgICAgICAqCishICAgKiBmb3IgUGFyIDEu NTIgaTE4biAqCisgICAgKiBDb3B5cmlnaHQgMjAwMSBieSAqCisgICAgKiBBZGFtIE0uIENvc3Rl bGxvICAqCisgICAgKioqKioqKioqKioqKioqKioqKioqCitkaWZmIC1jIC4vcHJvdG9NYWtlZmls ZSAuLi9QYXIxNTItdW5pY29kZS9wcm90b01ha2VmaWxlCisqKiogLi9wcm90b01ha2VmaWxlCTIw MDEtMDMtMDkgMDM6NTM6MjUuMDAwMDAwMDAwICswMzAwCistLS0gLi4vUGFyMTUyLXVuaWNvZGUv cHJvdG9NYWtlZmlsZQkyMDE5LTEwLTI2IDE3OjIxOjA4LjU0ODA1MDg1MyArMDMwMAorKioqKioq KioqKioqKioqCisqKiogNDcsNTMgKioqKgorICAjIEV4YW1wbGUgKGZvciBTb2xhcmlzIDIueCB3 aXRoIFNQQVJDb21waWxlciBDKToKKyAgIyBDQyA9IGNjIC1jIC1PIC1zIC1YYyAtRERPTlRGUkVF CisgIAorISBDQyA9IGNjIC1jCisgIAorICAjIERlZmluZSBMSU5LMSBhbmQgTElOSzIgc28gdGhh dCB0aGUgY29tbWFuZAorICAjCistLS0gNDcsNTMgLS0tLQorICAjIEV4YW1wbGUgKGZvciBTb2xh cmlzIDIueCB3aXRoIFNQQVJDb21waWxlciBDKToKKyAgIyBDQyA9IGNjIC1jIC1PIC1zIC1YYyAt RERPTlRGUkVFCisgIAorISBDQyA9IGNjIC1zdGQ9Yzk5IC1jCisgIAorICAjIERlZmluZSBMSU5L MSBhbmQgTElOSzIgc28gdGhhdCB0aGUgY29tbWFuZAorICAjCitkaWZmIC1jIC4vcmVmb3JtYXQu YyAuLi9QYXIxNTItdW5pY29kZS9yZWZvcm1hdC5jCisqKiogLi9yZWZvcm1hdC5jCTIwMDEtMDMt MjIgMDc6MTc6MTUuMDAwMDAwMDAwICswMzAwCistLS0gLi4vUGFyMTUyLXVuaWNvZGUvcmVmb3Jt YXQuYwkyMDE5LTEwLTI2IDE3OjIxOjA4LjU0ODA1MDg1MyArMDMwMAorKioqKioqKioqKioqKioq CisqKiogMSw5ICoqKioKKyEgLyoqKioqKioqKioqKioqKioqKioqKi8KKyEgLyogcmVmb3JtYXQu YyAgICAgICAgKi8KKyEgLyogZm9yIFBhciAxLjUyICAgICAgKi8KKyEgLyogQ29weXJpZ2h0IDIw MDEgYnkgKi8KKyEgLyogQWRhbSBNLiBDb3N0ZWxsbyAgKi8KKyEgLyoqKioqKioqKioqKioqKioq KioqKi8KKyAgCisgIC8qIFRoaXMgaXMgQU5TSSBDIGNvZGUgKEM4OSkuICovCisgIAorLS0tIDEs MTEgLS0tLQorISAvKioqKioqKioqKioqKioqKioqKioqKiovCishIC8qIHJlZm9ybWF0LmMgICAg ICAgICAgKi8KKyEgLyogZm9yIFBhciAxLjUyLWkxOG4uNCAqLworISAvKiBDb3B5cmlnaHQgMjAw MSBieSAgICovCishIC8qIEFkYW0gTS4gQ29zdGVsbG8gICAgKi8KKyEgLyogTW9kaWZpZWQgYnkg ICAgICAgICAqLworISAvKiBKw6lyw7RtZSBQb3VpbGxlciAgICAgKi8KKyEgLyoqKioqKioqKioq KioqKioqKioqKioqLworICAKKyAgLyogVGhpcyBpcyBBTlNJIEMgY29kZSAoQzg5KS4gKi8KKyAg CisqKioqKioqKioqKioqKioKKyoqKiAxNiwyMSAqKioqCistLS0gMTgsMjQgLS0tLQorICAjaW5j bHVkZSA8c3RkaW8uaD4KKyAgI2luY2x1ZGUgPHN0ZGxpYi5oPgorICAjaW5jbHVkZSA8c3RyaW5n Lmg+CisrICNpbmNsdWRlIDx3Y3R5cGUuaD4KKyAgCisgICN1bmRlZiBOVUxMCisgICNkZWZpbmUg TlVMTCAoKHZvaWQgKikgMCkKKyoqKioqKioqKioqKioqKgorKioqIDMzLDQ2ICoqKioKKyAgdHlw ZWRlZiB1bnNpZ25lZCBjaGFyIHdmbGFnX3Q7CisgIAorICB0eXBlZGVmIHN0cnVjdCB3b3JkIHsK KyEgICBjb25zdCBjaGFyICpjaHJzOyAgICAgICAvKiBQb2ludGVyIHRvIHRoZSBjaGFyYWN0ZXJz IGluIHRoZSB3b3JkICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogKE5PVCB0ZXJt aW5hdGVkIGJ5ICdcMCcpLiAgICAgICAgICAgICAqLworICAgIHN0cnVjdCB3b3JkICpwcmV2LCAg ICAgIC8qIFBvaW50ZXIgdG8gcHJldmlvdXMgd29yZC4gICAgICAgICAgICAgKi8KKyAgICAgICAg ICAgICAgICAqbmV4dCwgICAgICAvKiBQb2ludGVyIHRvIG5leHQgd29yZC4gICAgICAgICAgICAg ICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU3VwcG9zaW5nIHRoaXMgd29y ZCB3ZXJlIHRoZSBmaXJzdC4uLiAqLworICAgICAgICAgICAgICAgICpuZXh0bGluZTsgIC8qICAg UG9pbnRlciB0byBmaXJzdCB3b3JkIGluIG5leHQgbGluZS4gKi8KKyAgICBpbnQgc2NvcmUsICAg ICAgICAgICAgICAvKiAgIFZhbHVlIG9mIHRoZSBvYmplY3RpdmUgZnVuY3Rpb24uICAgICovCish ICAgICAgIGxlbmd0aDsgICAgICAgICAgICAgLyogTGVuZ3RoIG9mIHRoaXMgd29yZC4gICAgICAg ICAgICAgICAgICAqLworICAgIHdmbGFnX3QgZmxhZ3M7ICAgICAgICAgIC8qIE5vdGFibGUgcHJv cGVydGllcyBvZiB0aGlzIHdvcmQuICAgICAgKi8KKyAgfSB3b3JkOworICAKKy0tLSAzNiw1MCAt LS0tCisgIHR5cGVkZWYgdW5zaWduZWQgY2hhciB3ZmxhZ190OworICAKKyAgdHlwZWRlZiBzdHJ1 Y3Qgd29yZCB7CishICAgY29uc3Qgd2NoYXJfdCAqY2hyczsgICAgLyogUG9pbnRlciB0byB0aGUg Y2hhcmFjdGVycyBpbiB0aGUgd29yZCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IChOT1QgdGVybWluYXRlZCBieSAnXDAnKS4gICAgICAgICAgICAgKi8KKyAgICBzdHJ1Y3Qgd29y ZCAqcHJldiwgICAgICAvKiBQb2ludGVyIHRvIHByZXZpb3VzIHdvcmQuICAgICAgICAgICAgICov CisgICAgICAgICAgICAgICAgKm5leHQsICAgICAgLyogUG9pbnRlciB0byBuZXh0IHdvcmQuICAg ICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFN1cHBvc2lu ZyB0aGlzIHdvcmQgd2VyZSB0aGUgZmlyc3QuLi4gKi8KKyAgICAgICAgICAgICAgICAqbmV4dGxp bmU7ICAvKiAgIFBvaW50ZXIgdG8gZmlyc3Qgd29yZCBpbiBuZXh0IGxpbmUuICovCisgICAgaW50 IHNjb3JlLCAgICAgICAgICAgICAgLyogICBWYWx1ZSBvZiB0aGUgb2JqZWN0aXZlIGZ1bmN0aW9u LiAgICAqLworISAgICAgICBsZW5ndGgsICAgICAgICAgICAgIC8qIExlbmd0aCAoaW4gd2lkZWNo YXIpIG9mIHRoaXMgd29yZC4gICAgKi8KKyEgICAgICAgd2lkdGg7ICAgICAgICAgICAgICAvKiBW aXN1YWwgd2lkdGggb2YgdGhpcyB3b3JkLiAgICAgICAgICAgICovCisgICAgd2ZsYWdfdCBmbGFn czsgICAgICAgICAgLyogTm90YWJsZSBwcm9wZXJ0aWVzIG9mIHRoaXMgd29yZC4gICAgICAqLwor ICB9IHdvcmQ7CisgIAorKioqKioqKioqKioqKioqCisqKiogNTcsNzMgKioqKgorICAjZGVmaW5l IGlzY3VyaW91cyh3KSAoKCh3KS0+ZmxhZ3MgJiAyKSAhPSAwKQorICAjZGVmaW5lIGlzY2FwaXRh bCh3KSAoKCh3KS0+ZmxhZ3MgJiA0KSAhPSAwKQorICAKKyAgCisgIHN0YXRpYyBpbnQgY2hlY2tj YXBpdGFsKHdvcmQgKncpCisgIC8qIFJldHVybnMgMSBpZiAqdyBpcyBjYXBpdGFsaXplZCBhY2Nv cmRpbmcgdG8gdGhlIGRlZmluaXRpb24gKi8KKyAgLyogaW4gcGFyLmRvYyAoYXNzdW1pbmcgPGNh cD4gaXMgMCksIG9yIDAgaWYgbm90LiAgICAgICAgICAgICAqLworICB7CishICAgY29uc3QgY2hh ciAqcCwgKmVuZDsKKyAgCisgICAgZm9yIChwID0gdy0+Y2hycywgZW5kID0gcCArIHctPmxlbmd0 aDsKKyEgICAgICAgIHAgPCBlbmQgJiYgIWlzYWxudW0oKih1bnNpZ25lZCBjaGFyICopcCk7Cisg ICAgICAgICArK3ApOworISAgIHJldHVybiBwIDwgZW5kICYmICFpc2xvd2VyKCoodW5zaWduZWQg Y2hhciAqKXApOworICB9CisgIAorICAKKy0tLSA2MSw5OSAtLS0tCisgICNkZWZpbmUgaXNjdXJp b3VzKHcpICgoKHcpLT5mbGFncyAmIDIpICE9IDApCisgICNkZWZpbmUgaXNjYXBpdGFsKHcpICgo KHcpLT5mbGFncyAmIDQpICE9IDApCisgIAorKyBzdGF0aWMgaW50IGdldFdpZHRoKGNvbnN0IHdj aGFyX3QgKmJlZywgY29uc3Qgd2NoYXJfdCAqZW5kKQorKyAvKiBDb21wdXRlICh2aXN1YWwpIHdp ZHRoIG9mIGEgIHdvcmQuIFRoaXMgZnVuY3Rpb24gaXMgYXdhcmUgKi8KKysgLyogYWJvdXQgZG91 YmxlLXdpZHRoIGNoYXJhY3RlcnMgdXNlZCBpbiBvcmllbnRhbCBsYW5nYWdlcy4gICovCisrIHsK KysgICBpbnQgcmV0LCB0bXA7CisrICAgCisrICAgZm9yIChyZXQgPSAwOyBiZWcgIT0gZW5kOyBi ZWcrKykgeworKyAjaWZkZWYgTk9XSURUSAorKyAgICAgdG1wID0gMTsKKysgI2Vsc2UKKysgICAg IHRtcCA9IHdjd2lkdGgoKmJlZyk7CisrICNlbmRpZgorKyAgICAgLy8gQlVHOiBJdCBpcyBub3Qg cmVhbGx5IGVhc3kgdG8gaGFuZGxlIGNhc2Ugb2YgemVybyB3aWR0aCBjaGFyYWN0ZXJzLgorKyAg ICAgLy8gSWYgd2UgZG9uJ3QgZG8gdGhpcywgc2l6ZSBtYWxsbG9jIGZvciBxMSB3aWxsIGJlIGxl c3MgdGhhbiByZWFsIAorKyAgICAgLy8gc2l6ZSBhbmQgcHJvZ3JhbSB3aWxsIHNlZ2ZhdWx0LiBT byBJIHByZWZlciB0byBoYXZlIGEgYnVnIHRoYW4gYSBzZWdmYXVsdC4KKysgICAgIGlmICh0bXAg PD0gMCkKKysgICAgICAgdG1wID0gMTsKKysgICAgIHJldCArPSB0bXA7CisrICAgfQorKyAgIAor KyAgIHJldHVybiByZXQ7CisrIH0KKyAgCisgIHN0YXRpYyBpbnQgY2hlY2tjYXBpdGFsKHdvcmQg KncpCisgIC8qIFJldHVybnMgMSBpZiAqdyBpcyBjYXBpdGFsaXplZCBhY2NvcmRpbmcgdG8gdGhl IGRlZmluaXRpb24gKi8KKyAgLyogaW4gcGFyLmRvYyAoYXNzdW1pbmcgPGNhcD4gaXMgMCksIG9y IDAgaWYgbm90LiAgICAgICAgICAgICAqLworICB7CishICAgY29uc3Qgd2NoYXJfdCAqcCwgKmVu ZDsKKyAgCisgICAgZm9yIChwID0gdy0+Y2hycywgZW5kID0gcCArIHctPmxlbmd0aDsKKyEgICAg ICAgIHAgPCBlbmQgJiYgIWlzd2FsbnVtKCpwKTsKKyAgICAgICAgICsrcCk7CishICAgcmV0dXJu IHAgPCBlbmQgJiYgIWlzd2xvd2VyKCpwKTsKKyAgfQorICAKKyAgCisqKioqKioqKioqKioqKioK KyoqKiA3NSw5MyAqKioqCisgIC8qIFJldHVybnMgMSBpZiAqdyBpcyBjdXJpb3VzIGFjY29yZGlu ZyB0byAqLworICAvKiB0aGUgZGVmaW5pdGlvbiBpbiBwYXIuZG9jLCBvciAwIGlmIG5vdC4gKi8K KyAgeworISAgIGNvbnN0IGNoYXIgKnN0YXJ0LCAqcDsKKyEgICBjaGFyIGNoOworICAKKyAgICBm b3IgKHN0YXJ0ID0gdy0+Y2hycywgcCA9IHN0YXJ0ICsgdy0+bGVuZ3RoOyAgcCA+IHN0YXJ0OyAg LS1wKSB7CisgICAgICBjaCA9IHBbLTFdOworISAgICAgaWYgKGlzYWxudW0oKih1bnNpZ25lZCBj aGFyICopJmNoKSkgcmV0dXJuIDA7CishICAgICBpZiAoY2ggPT0gJy4nIHx8IGNoID09ICc/JyB8 fCBjaCA9PSAnIScgfHwgY2ggPT0gJzonKSBicmVhazsKKyAgICB9CisgIAorICAgIGlmIChwIDw9 IHN0YXJ0ICsgMSkgcmV0dXJuIDA7CisgIAorICAgIC0tcDsKKyEgICBkbyBpZiAoaXNhbG51bSgq KHVuc2lnbmVkIGNoYXIgKiktLXApKSByZXR1cm4gMTsKKyAgICB3aGlsZSAocCA+IHN0YXJ0KTsK KyAgCisgICAgcmV0dXJuIDA7CistLS0gMTAxLDExOSAtLS0tCisgIC8qIFJldHVybnMgMSBpZiAq dyBpcyBjdXJpb3VzIGFjY29yZGluZyB0byAqLworICAvKiB0aGUgZGVmaW5pdGlvbiBpbiBwYXIu ZG9jLCBvciAwIGlmIG5vdC4gKi8KKyAgeworISAgIGNvbnN0IHdjaGFyX3QgKnN0YXJ0LCAqcDsK KyEgICB3Y2hhcl90IGNoOworICAKKyAgICBmb3IgKHN0YXJ0ID0gdy0+Y2hycywgcCA9IHN0YXJ0 ICsgdy0+bGVuZ3RoOyAgcCA+IHN0YXJ0OyAgLS1wKSB7CisgICAgICBjaCA9IHBbLTFdOworISAg ICAgaWYgKGlzd2FsbnVtKCood2NoYXJfdCAqKSZjaCkpIHJldHVybiAwOworISAgICAgaWYgKGNo ID09IEwnLicgfHwgY2ggPT0gTCc/JyB8fCBjaCA9PSBMJyEnIHx8IGNoID09IEwnOicpIGJyZWFr OworICAgIH0KKyAgCisgICAgaWYgKHAgPD0gc3RhcnQgKyAxKSByZXR1cm4gMDsKKyAgCisgICAg LS1wOworISAgIGRvIGlmIChpc3dhbG51bSgqKHdjaGFyX3QgKiktLXApKSByZXR1cm4gMTsKKyAg ICB3aGlsZSAocCA+IHN0YXJ0KTsKKyAgCisgICAgcmV0dXJuIDA7CisqKioqKioqKioqKioqKioK KyoqKiA5NSwxMjUgKioqKgorICAKKyAgCisgIHN0YXRpYyBpbnQgc2ltcGxlYnJlYWtzKHdvcmQg KmhlYWQsIHdvcmQgKnRhaWwsIGludCBMLCBpbnQgbGFzdCkKKyEgCishIC8qIENob29zZXMgbGlu ZSBicmVha3MgaW4gYSBsaXN0IG9mIHdvcmRzIHdoaWNoIG1heGltaXplIHRoZSBsZW5ndGggb2Yg dGhlICAgKi8KKyEgLyogc2hvcnRlc3QgbGluZS4gIEwgaXMgdGhlIG1heGltdW0gbGluZSBsZW5n dGguICBUaGUgbGFzdCBsaW5lIGNvdW50cyBhcyBhICAqLworISAvKiBsaW5lIG9ubHkgaWYgbGFz dCBpcyBub24temVyby4gX2hlYWQgbXVzdCBwb2ludCB0byBhIGR1bW15IHdvcmQsIGFuZCB0YWls ICovCishIC8qIG11c3QgcG9pbnQgdG8gdGhlIGxhc3Qgd29yZCwgd2hvc2UgbmV4dCBmaWVsZCBt dXN0IGJlIE5VTEwuICBSZXR1cm5zIHRoZSAgKi8KKyEgLyogbGVuZ3RoIG9mIHRoZSBzaG9ydGVz dCBsaW5lIG9uIHN1Y2Nlc3MsIC0xIGlmIHRoZXJlIGlzIGEgd29yZCBvZiBsZW5ndGggICAqLwor ISAvKiBncmVhdGVyIHRoYW4gTCwgb3IgTCBpZiB0aGVyZSBhcmUgbm8gbGluZXMuICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICovCisgIHsKKyAgICB3b3JkICp3MSwgKncyOworICAgIGlu dCBsaW5lbGVuLCBzY29yZTsKKyAgCisgICAgaWYgKCFoZWFkLT5uZXh0KSByZXR1cm4gTDsKKyAg CishICAgZm9yICh3MSA9IHRhaWwsIGxpbmVsZW4gPSB3MS0+bGVuZ3RoOworICAgICAgICAgdzEg IT0gaGVhZCAmJiBsaW5lbGVuIDw9IEw7CishICAgICAgICBsaW5lbGVuICs9IGlzc2hpZnRlZCh3 MSksIHcxID0gdzEtPnByZXYsIGxpbmVsZW4gKz0gMSArIHcxLT5sZW5ndGgpIHsKKyAgICAgIHcx LT5zY29yZSA9IGxhc3QgPyBsaW5lbGVuIDogTDsKKyAgICAgIHcxLT5uZXh0bGluZSA9IE5VTEw7 CisgICAgfQorICAKKyAgICBmb3IgKCA7ICB3MSAhPSBoZWFkOyAgdzEgPSB3MS0+cHJldikgewor ICAgICAgdzEtPnNjb3JlID0gLTE7CishICAgICBmb3IgKGxpbmVsZW4gPSB3MS0+bGVuZ3RoLCAg dzIgPSB3MS0+bmV4dDsKKyAgICAgICAgICAgbGluZWxlbiA8PSBMOworISAgICAgICAgICBsaW5l bGVuICs9IDEgKyBpc3NoaWZ0ZWQodzIpICsgdzItPmxlbmd0aCwgIHcyID0gdzItPm5leHQpIHsK KyAgICAgICAgc2NvcmUgPSB3Mi0+c2NvcmU7CisgICAgICAgIGlmIChsaW5lbGVuIDwgc2NvcmUp IHNjb3JlID0gbGluZWxlbjsKKyAgICAgICAgaWYgKHNjb3JlID49IHcxLT5zY29yZSkgeworLS0t IDEyMSwxNTIgLS0tLQorICAKKyAgCisgIHN0YXRpYyBpbnQgc2ltcGxlYnJlYWtzKHdvcmQgKmhl YWQsIHdvcmQgKnRhaWwsIGludCBMLCBpbnQgbGFzdCkKKyEgLyogQ2hvb3NlcyBsaW5lICBicmVh a3MgaW4gYSAgbGlzdCBvZiB3b3JkcyAgd2hpY2ggbWF4aW1pemUgKi8KKyEgLyogdGhlIGxlbmd0 aCBvZiAgdGhlIHNob3J0ZXN0IGxpbmUuIEwgaXMgIHRoZSBtYXhpbXVtIGxpbmUgKi8KKyEgLyog bGVuZ3RoLiBUaGUgbGFzdCAgbGluZSBjb3VudHMgYXMgYSBsaW5lIG9ubHkgIGlmIGxhc3QgaXMg Ki8KKyEgLyogbm9uLXplcm8uIF9oZWFkICBtdXN0IHBvaW50ICB0byBhICBkdW1teSB3b3JkLCAg YW5kIHRhaWwgKi8KKyEgLyogbXVzdCBwb2ludCAgdG8gdGhlIGxhc3QgIHdvcmQsIHdob3NlIG5l eHQgZmllbGQgIG11c3QgYmUgKi8KKyEgLyogTlVMTC4gIFJldHVybnMgIHRoZSAgbGVuZ3RoICBv ZiAgdGhlICBzaG9ydGVzdCAgbGluZSAgb24gKi8KKyEgLyogc3VjY2VzcywgLTEgaWYgdGhlcmUg aXMgYSB3b3JkIG9mIGxlbmd0aCBncmVhdGVyIHRoYW4gTCwgKi8KKyEgLyogb3IgTCBpZiB0aGVy ZSBhcmUgbm8gbGluZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgeworICAg IHdvcmQgKncxLCAqdzI7CisgICAgaW50IGxpbmVsZW4sIHNjb3JlOworICAKKyAgICBpZiAoIWhl YWQtPm5leHQpIHJldHVybiBMOworICAKKyEgICBmb3IgKHcxID0gdGFpbCwgbGluZWxlbiA9IHcx LT53aWR0aDsKKyAgICAgICAgIHcxICE9IGhlYWQgJiYgbGluZWxlbiA8PSBMOworISAgICAgICAg bGluZWxlbiArPSBpc3NoaWZ0ZWQodzEpLCB3MSA9IHcxLT5wcmV2LCBsaW5lbGVuICs9IDEgKyB3 MS0+d2lkdGgpIHsKKyAgICAgIHcxLT5zY29yZSA9IGxhc3QgPyBsaW5lbGVuIDogTDsKKyAgICAg IHcxLT5uZXh0bGluZSA9IE5VTEw7CisgICAgfQorICAKKyAgICBmb3IgKCA7ICB3MSAhPSBoZWFk OyAgdzEgPSB3MS0+cHJldikgeworICAgICAgdzEtPnNjb3JlID0gLTE7CishICAgICBmb3IgKGxp bmVsZW4gPSB3MS0+d2lkdGgsICB3MiA9IHcxLT5uZXh0OworICAgICAgICAgICBsaW5lbGVuIDw9 IEw7CishICAgICAgICAgIGxpbmVsZW4gKz0gMSArIGlzc2hpZnRlZCh3MikgKyB3Mi0+d2lkdGgs ICB3MiA9IHcyLT5uZXh0KSB7CisgICAgICAgIHNjb3JlID0gdzItPnNjb3JlOworICAgICAgICBp ZiAobGluZWxlbiA8IHNjb3JlKSBzY29yZSA9IGxpbmVsZW47CisgICAgICAgIGlmIChzY29yZSA+ PSB3MS0+c2NvcmUpIHsKKyoqKioqKioqKioqKioqKgorKioqIDE2OCwxNzQgKioqKgorICAKKyAg ICBzaG9ydGVzdCA9IHNpbXBsZWJyZWFrcyhoZWFkLHRhaWwsdGFyZ2V0LGxhc3QpOworICAgIGlm IChzaG9ydGVzdCA8IDApIHsKKyEgICAgIHNwcmludGYoZXJybXNnLGltcG9zc2liaWxpdHksMSk7 CisgICAgICByZXR1cm47CisgICAgfQorICAKKy0tLSAxOTUsMjAxIC0tLS0KKyAgCisgICAgc2hv cnRlc3QgPSBzaW1wbGVicmVha3MoaGVhZCx0YWlsLHRhcmdldCxsYXN0KTsKKyAgICBpZiAoc2hv cnRlc3QgPCAwKSB7CishICAgICBzd3ByaW50ZihlcnJtc2csZXJybXNnX3NpemUsaW1wb3NzaWJp bGl0eSwxKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisgIAorKioqKioqKioqKioqKioqCisqKiog MTc4LDE4NiAqKioqCisgICAgdzEgPSB0YWlsOworICAgIGRvIHsKKyAgICAgIHcxLT5zY29yZSA9 IC0xOworISAgICAgZm9yIChsaW5lbGVuID0gdzEtPmxlbmd0aCwgIHcyID0gdzEtPm5leHQ7Cisg ICAgICAgICAgIGxpbmVsZW4gPD0gdGFyZ2V0OworISAgICAgICAgICBsaW5lbGVuICs9IDEgKyBp c3NoaWZ0ZWQodzIpICsgdzItPmxlbmd0aCwgIHcyID0gdzItPm5leHQpIHsKKyAgICAgICAgZXh0 cmEgPSB0YXJnZXQgLSBsaW5lbGVuOworICAgICAgICBtaW5sZW4gPSBzaG9ydGVzdDsKKyAgICAg ICAgaWYgKHcyKQorLS0tIDIwNSwyMTMgLS0tLQorICAgIHcxID0gdGFpbDsKKyAgICBkbyB7Cisg ICAgICB3MS0+c2NvcmUgPSAtMTsKKyEgICAgIGZvciAobGluZWxlbiA9IHcxLT53aWR0aCwgIHcy ID0gdzEtPm5leHQ7CisgICAgICAgICAgIGxpbmVsZW4gPD0gdGFyZ2V0OworISAgICAgICAgICBs aW5lbGVuICs9IDEgKyBpc3NoaWZ0ZWQodzIpICsgdzItPndpZHRoLCAgdzIgPSB3Mi0+bmV4dCkg eworICAgICAgICBleHRyYSA9IHRhcmdldCAtIGxpbmVsZW47CisgICAgICAgIG1pbmxlbiA9IHNo b3J0ZXN0OworICAgICAgICBpZiAodzIpCisqKioqKioqKioqKioqKioKKyoqKiAyMDIsMjA4ICoq KioKKyAgICB9IHdoaWxlICh3MSAhPSBoZWFkKTsKKyAgCisgICAgaWYgKGhlYWQtPm5leHQtPnNj b3JlIDwgMCkKKyEgICAgIHNwcmludGYoZXJybXNnLGltcG9zc2liaWxpdHksMik7CisgIH0KKyAg CisgIAorLS0tIDIyOSwyMzUgLS0tLQorICAgIH0gd2hpbGUgKHcxICE9IGhlYWQpOworICAKKyAg ICBpZiAoaGVhZC0+bmV4dC0+c2NvcmUgPCAwKQorISAgICAgc3dwcmludGYoZXJybXNnLGVycm1z Z19zaXplLGltcG9zc2liaWxpdHksMik7CisgIH0KKyAgCisgIAorKioqKioqKioqKioqKioqCisq KiogMjI1LDIzMyAqKioqCisgICAgdzEgPSB0YWlsOworICAgIGRvIHsKKyAgICAgIHcxLT5zY29y ZSA9IEw7CishICAgICBmb3IgKG51bWdhcHMgPSAwLCBleHRyYSA9IEwgLSB3MS0+bGVuZ3RoLCB3 MiA9IHcxLT5uZXh0OworICAgICAgICAgICBleHRyYSA+PSAwOworISAgICAgICAgICArK251bWdh cHMsIGV4dHJhIC09IDEgKyBpc3NoaWZ0ZWQodzIpICsgdzItPmxlbmd0aCwgdzIgPSB3Mi0+bmV4 dCkgeworICAgICAgICBnYXAgPSBudW1nYXBzID8gKGV4dHJhICsgbnVtZ2FwcyAtIDEpIC8gbnVt Z2FwcyA6IEw7CisgICAgICAgIGlmICh3MikKKyAgICAgICAgICBzY29yZSA9IHcyLT5zY29yZTsK Ky0tLSAyNTIsMjYwIC0tLS0KKyAgICB3MSA9IHRhaWw7CisgICAgZG8geworICAgICAgdzEtPnNj b3JlID0gTDsKKyEgICAgIGZvciAobnVtZ2FwcyA9IDAsIGV4dHJhID0gTCAtIHcxLT53aWR0aCwg dzIgPSB3MS0+bmV4dDsKKyAgICAgICAgICAgZXh0cmEgPj0gMDsKKyEgICAgICAgICAgKytudW1n YXBzLCBleHRyYSAtPSAxICsgaXNzaGlmdGVkKHcyKSArIHcyLT53aWR0aCwgdzIgPSB3Mi0+bmV4 dCkgeworICAgICAgICBnYXAgPSBudW1nYXBzID8gKGV4dHJhICsgbnVtZ2FwcyAtIDEpIC8gbnVt Z2FwcyA6IEw7CisgICAgICAgIGlmICh3MikKKyAgICAgICAgICBzY29yZSA9IHcyLT5zY29yZTsK KyoqKioqKioqKioqKioqKgorKioqIDI0NywyNTMgKioqKgorICAKKyAgICBtYXhnYXAgPSBoZWFk LT5uZXh0LT5zY29yZTsKKyAgICBpZiAobWF4Z2FwID49IEwpIHsKKyEgICAgIHN0cmNweShlcnJt c2csICJDYW5ub3QganVzdGlmeS5cbiIpOworICAgICAgcmV0dXJuOworICAgIH0KKyAgCistLS0g Mjc0LDI4MCAtLS0tCisgIAorICAgIG1heGdhcCA9IGhlYWQtPm5leHQtPnNjb3JlOworICAgIGlm IChtYXhnYXAgPj0gTCkgeworISAgICAgd2NzY3B5KGVycm1zZywgTCJDYW5ub3QganVzdGlmeS5c biIpOworICAgICAgcmV0dXJuOworICAgIH0KKyAgCisqKioqKioqKioqKioqKioKKyoqKiAyNTcs MjY1ICoqKioKKyAgICB3MSA9IHRhaWw7CisgICAgZG8geworICAgICAgdzEtPnNjb3JlID0gLTE7 CishICAgICBmb3IgKG51bWdhcHMgPSAwLCBleHRyYSA9IEwgLSB3MS0+bGVuZ3RoLCB3MiA9IHcx LT5uZXh0OworICAgICAgICAgICBleHRyYSA+PSAwOworISAgICAgICAgICArK251bWdhcHMsIGV4 dHJhIC09IDEgKyBpc3NoaWZ0ZWQodzIpICsgdzItPmxlbmd0aCwgdzIgPSB3Mi0+bmV4dCkgewor ICAgICAgICBnYXAgPSBudW1nYXBzID8gKGV4dHJhICsgbnVtZ2FwcyAtIDEpIC8gbnVtZ2FwcyA6 IEw7CisgICAgICAgIGlmICh3MikKKyAgICAgICAgICBzY29yZSA9IHcyLT5zY29yZTsKKy0tLSAy ODQsMjkyIC0tLS0KKyAgICB3MSA9IHRhaWw7CisgICAgZG8geworICAgICAgdzEtPnNjb3JlID0g LTE7CishICAgICBmb3IgKG51bWdhcHMgPSAwLCBleHRyYSA9IEwgLSB3MS0+d2lkdGgsIHcyID0g dzEtPm5leHQ7CisgICAgICAgICAgIGV4dHJhID49IDA7CishICAgICAgICAgICsrbnVtZ2Fwcywg ZXh0cmEgLT0gMSArIGlzc2hpZnRlZCh3MikgKyB3Mi0+d2lkdGgsIHcyID0gdzItPm5leHQpIHsK KyAgICAgICAgZ2FwID0gbnVtZ2FwcyA/IChleHRyYSArIG51bWdhcHMgLSAxKSAvIG51bWdhcHMg OiBMOworICAgICAgICBpZiAodzIpCisgICAgICAgICAgc2NvcmUgPSB3Mi0+c2NvcmU7CisqKioq KioqKioqKioqKioKKyoqKiAyODgsMzI3ICoqKioKKyAgICB9IHdoaWxlICh3MSAhPSBoZWFkKTsK KyAgCisgICAgaWYgKGhlYWQtPm5leHQtPnNjb3JlIDwgMCkKKyEgICAgIHNwcmludGYoZXJybXNn LGltcG9zc2liaWxpdHksMyk7CisgIH0KKyAgCisgIAorISBjaGFyICoqcmVmb3JtYXQoCishICAg Y29uc3QgY2hhciAqIGNvbnN0ICppbmxpbmVzLCBjb25zdCBjaGFyICogY29uc3QgKmVuZGxpbmUs IGludCBhZnAsIGludCBmcywKKyAgICBpbnQgaGFuZywgaW50IHByZWZpeCwgaW50IHN1ZmZpeCwg aW50IHdpZHRoLCBpbnQgY2FwLCBpbnQgZml0LCBpbnQgZ3Vlc3MsCisgICAgaW50IGp1c3QsIGlu dCBsYXN0LCBpbnQgUmVwb3J0LCBpbnQgdG91Y2gsIGVycm1zZ190IGVycm1zZworICApCisgIHsK KyAgICBpbnQgbnVtaW4sIGFmZml4LCBMLCBvbmZpcnN0d29yZCA9IDEsIGxpbmVsZW4sIG51bW91 dCwgbnVtZ2FwcywgZXh0cmEsIHBoYXNlOworISAgIGNvbnN0IGNoYXIgKiBjb25zdCAqbGluZSwg KipzdWZmaXhlcyA9IE5VTEwsICoqc3VmLCAqZW5kLCAqcDEsICpwMjsKKyEgICBjaGFyICpxMSwg KnEyLCAqKm91dGxpbmVzID0gTlVMTDsKKyAgICB3b3JkIGR1bW15LCAqaGVhZCwgKnRhaWwsICp3 MSwgKncyOworICAgIGJ1ZmZlciAqcGJ1ZiA9IE5VTEw7CisgIAorICAvKiBJbml0aWFsaXphdGlv bjogKi8KKy0gCisgICAgKmVycm1zZyA9ICdcMCc7CisgICAgZHVtbXkubmV4dCA9IGR1bW15LnBy ZXYgPSBOVUxMOworICAgIGR1bW15LmZsYWdzID0gMDsKKyAgICBoZWFkID0gdGFpbCA9ICZkdW1t eTsKKyAgICBudW1pbiA9IGVuZGxpbmUgLSBpbmxpbmVzOworICAgIGlmIChudW1pbiA8PSAwKSB7 CishICAgICBzcHJpbnRmKGVycm1zZyxpbXBvc3NpYmlsaXR5LDQpOworICAgICAgZ290byByZmNs ZWFudXA7CisgICAgfQorICAgIG51bWdhcHMgPSBleHRyYSA9IDA7ICAvKiB1bm5lY2Vzc2FyeSwg YnV0IHF1aWV0cyBjb21waWxlciB3YXJuaW5ncyAqLworICAKKyAgLyogQWxsb2NhdGUgc3BhY2Ug Zm9yIHBvaW50ZXJzIHRvIHRoZSBzdWZmaXhlczogKi8KKyAgCishICAgc3VmZml4ZXMgPSBtYWxs b2MobnVtaW4gKiBzaXplb2YgKGNvbnN0IGNoYXIgKikpOworICAgIGlmICghc3VmZml4ZXMpIHsK KyEgICAgIHN0cmNweShlcnJtc2csb3V0b2ZtZW0pOworICAgICAgZ290byByZmNsZWFudXA7Cisg ICAgfQorICAKKy0tLSAzMTUsMzUzIC0tLS0KKyAgICB9IHdoaWxlICh3MSAhPSBoZWFkKTsKKyAg CisgICAgaWYgKGhlYWQtPm5leHQtPnNjb3JlIDwgMCkKKyEgICAgIHN3cHJpbnRmKGVycm1zZyxl cnJtc2dfc2l6ZSxpbXBvc3NpYmlsaXR5LDMpOworICB9CisgIAorICAKKyEgd2NoYXJfdCAqKnJl Zm9ybWF0KAorISAgIGNvbnN0IHdjaGFyX3QgKiBjb25zdCAqaW5saW5lcywgY29uc3Qgd2NoYXJf dCAqIGNvbnN0ICplbmRsaW5lLCBpbnQgYWZwLCBpbnQgZnMsCisgICAgaW50IGhhbmcsIGludCBw cmVmaXgsIGludCBzdWZmaXgsIGludCB3aWR0aCwgaW50IGNhcCwgaW50IGZpdCwgaW50IGd1ZXNz LAorICAgIGludCBqdXN0LCBpbnQgbGFzdCwgaW50IFJlcG9ydCwgaW50IHRvdWNoLCBlcnJtc2df dCBlcnJtc2cKKyAgKQorICB7CisgICAgaW50IG51bWluLCBhZmZpeCwgTCwgb25maXJzdHdvcmQg PSAxLCBsaW5lbGVuLCBudW1vdXQsIG51bWdhcHMsIGV4dHJhLCBwaGFzZTsKKyEgICBjb25zdCB3 Y2hhcl90ICogY29uc3QgKmxpbmUsICoqc3VmZml4ZXMgPSBOVUxMLCAqKnN1ZiwgKmVuZCwgKnAx LCAqcDI7CishICAgd2NoYXJfdCAqcTEsICpxMiwgKipvdXRsaW5lcyA9IE5VTEw7CisgICAgd29y ZCBkdW1teSwgKmhlYWQsICp0YWlsLCAqdzEsICp3MjsKKyAgICBidWZmZXIgKnBidWYgPSBOVUxM OworICAKKyAgLyogSW5pdGlhbGl6YXRpb246ICovCisgICAgKmVycm1zZyA9ICdcMCc7CisgICAg ZHVtbXkubmV4dCA9IGR1bW15LnByZXYgPSBOVUxMOworICAgIGR1bW15LmZsYWdzID0gMDsKKyAg ICBoZWFkID0gdGFpbCA9ICZkdW1teTsKKyAgICBudW1pbiA9IGVuZGxpbmUgLSBpbmxpbmVzOwor ICAgIGlmIChudW1pbiA8PSAwKSB7CishICAgICBzd3ByaW50ZihlcnJtc2csZXJybXNnX3NpemUs aW1wb3NzaWJpbGl0eSw0KTsKKyAgICAgIGdvdG8gcmZjbGVhbnVwOworICAgIH0KKyAgICBudW1n YXBzID0gZXh0cmEgPSAwOyAgLyogdW5uZWNlc3NhcnksIGJ1dCBxdWlldHMgY29tcGlsZXIgd2Fy bmluZ3MgKi8KKyAgCisgIC8qIEFsbG9jYXRlIHNwYWNlIGZvciBwb2ludGVycyB0byB0aGUgc3Vm Zml4ZXM6ICovCisgIAorISAgIHN1ZmZpeGVzID0gbWFsbG9jKG51bWluICogc2l6ZW9mIChjb25z dCB3Y2hhcl90ICopKTsKKyAgICBpZiAoIXN1ZmZpeGVzKSB7CishICAgICB3Y3NjcHkoZXJybXNn LG91dG9mbWVtKTsKKyAgICAgIGdvdG8gcmZjbGVhbnVwOworICAgIH0KKyAgCisqKioqKioqKioq KioqKioKKyoqKiAzMzQsMzQxICoqKioKKyAgICBkbyB7CisgICAgICBmb3IgKGVuZCA9ICpsaW5l OyAgKmVuZDsgICsrZW5kKTsKKyAgICAgIGlmIChlbmQgLSAqbGluZSA8IGFmZml4KSB7CishICAg ICAgIHNwcmludGYoZXJybXNnLAorISAgICAgICAgICAgICAgICJMaW5lICVkIHNob3J0ZXIgdGhh biA8cHJlZml4PiArIDxzdWZmaXg+ID0gJWQgKyAlZCA9ICVkXG4iLAorICAgICAgICAgICAgICAg IGxpbmUgLSBpbmxpbmVzICsgMSwgcHJlZml4LCBzdWZmaXgsIGFmZml4KTsKKyAgICAgICAgZ290 byByZmNsZWFudXA7CisgICAgICB9CistLS0gMzYwLDM2NyAtLS0tCisgICAgZG8geworICAgICAg Zm9yIChlbmQgPSAqbGluZTsgICplbmQ7ICArK2VuZCk7CisgICAgICBpZiAoZW5kIC0gKmxpbmUg PCBhZmZpeCkgeworISAgICAgICBzd3ByaW50ZihlcnJtc2csZXJybXNnX3NpemUsCishICAgICAg ICAgICAgICAgTCJMaW5lICVkIHNob3J0ZXIgdGhhbiA8cHJlZml4PiArIDxzdWZmaXg+ID0gJWQg KyAlZCA9ICVkXG4iLAorICAgICAgICAgICAgICAgIGxpbmUgLSBpbmxpbmVzICsgMSwgcHJlZml4 LCBzdWZmaXgsIGFmZml4KTsKKyAgICAgICAgZ290byByZmNsZWFudXA7CisgICAgICB9CisqKioq KioqKioqKioqKioKKyoqKiAzNDMsMzU5ICoqKioKKyAgICAgICpzdWYgPSBlbmQ7CisgICAgICBw MSA9ICpsaW5lICsgcHJlZml4OworICAgICAgZm9yICg7OykgeworISAgICAgICB3aGlsZSAocDEg PCBlbmQgJiYgKnAxID09ICcgJykgKytwMTsKKyAgICAgICAgaWYgKHAxID09IGVuZCkgYnJlYWs7 CisgICAgICAgIHAyID0gcDE7CisgICAgICAgIGlmIChvbmZpcnN0d29yZCkgeworICAgICAgICAg IHAxID0gKmxpbmUgKyBwcmVmaXg7CisgICAgICAgICAgb25maXJzdHdvcmQgPSAwOworICAgICAg ICB9CishICAgICAgIHdoaWxlIChwMiA8IGVuZCAmJiAqcDIgIT0gJyAnKSArK3AyOworICAgICAg ICB3MSA9IG1hbGxvYyhzaXplb2YgKHdvcmQpKTsKKyAgICAgICAgaWYgKCF3MSkgeworISAgICAg ICAgIHN0cmNweShlcnJtc2csb3V0b2ZtZW0pOworICAgICAgICAgIGdvdG8gcmZjbGVhbnVwOwor ICAgICAgICB9CisgICAgICAgIHcxLT5uZXh0ID0gTlVMTDsKKy0tLSAzNjksMzg1IC0tLS0KKyAg ICAgICpzdWYgPSBlbmQ7CisgICAgICBwMSA9ICpsaW5lICsgcHJlZml4OworICAgICAgZm9yICg7 OykgeworISAgICAgICB3aGlsZSAocDEgPCBlbmQgJiYgKnAxID09IEwnICcpICsrcDE7CisgICAg ICAgIGlmIChwMSA9PSBlbmQpIGJyZWFrOworICAgICAgICBwMiA9IHAxOworICAgICAgICBpZiAo b25maXJzdHdvcmQpIHsKKyAgICAgICAgICBwMSA9ICpsaW5lICsgcHJlZml4OworICAgICAgICAg IG9uZmlyc3R3b3JkID0gMDsKKyAgICAgICAgfQorISAgICAgICB3aGlsZSAocDIgPCBlbmQgJiYg KnAyICE9IEwnICcpICsrcDI7CisgICAgICAgIHcxID0gbWFsbG9jKHNpemVvZiAod29yZCkpOwor ICAgICAgICBpZiAoIXcxKSB7CishICAgICAgICAgd2NzY3B5KGVycm1zZyxvdXRvZm1lbSk7Cisg ICAgICAgICAgZ290byByZmNsZWFudXA7CisgICAgICAgIH0KKyAgICAgICAgdzEtPm5leHQgPSBO VUxMOworKioqKioqKioqKioqKioqCisqKiogMzYxLDM2NiAqKioqCistLS0gMzg3LDM5MyAtLS0t CisgICAgICAgIHRhaWwgPSB0YWlsLT5uZXh0ID0gdzE7CisgICAgICAgIHcxLT5jaHJzID0gcDE7 CisgICAgICAgIHcxLT5sZW5ndGggPSBwMiAtIHAxOworKyAgICAgICB3MS0+d2lkdGggPSBnZXRX aWR0aChwMSwgcDIpOworICAgICAgICB3MS0+ZmxhZ3MgPSAwOworICAgICAgICBwMSA9IHAyOwor ICAgICAgfQorKioqKioqKioqKioqKioqCisqKiogMzc3LDM4MiAqKioqCistLS0gNDA0LDQxMCAt LS0tCisgICAgICAgICAgaWYgKGlzY3VyaW91cyh3MSkpIHsKKyAgICAgICAgICAgIGlmICh3MS0+ Y2hyc1t3MS0+bGVuZ3RoXSAmJiB3MS0+Y2hycyArIHcxLT5sZW5ndGggKyAxID09IHcyLT5jaHJz KSB7CisgICAgICAgICAgICAgIHcyLT5sZW5ndGggKz0gdzEtPmxlbmd0aCArIDE7CisrICAgICAg ICAgICAgIHcyLT53aWR0aCArPSB3MS0+d2lkdGggKyAxOworICAgICAgICAgICAgICB3Mi0+Y2hy cyA9IHcxLT5jaHJzOworICAgICAgICAgICAgICB3Mi0+cHJldiA9IHcxLT5wcmV2OworICAgICAg ICAgICAgICB3Mi0+cHJldi0+bmV4dCA9IHcyOworKioqKioqKioqKioqKioqCisqKiogMzk3LDQx NiAqKioqCisgIAorICAgIGlmIChSZXBvcnQpCisgICAgICBmb3IgKHcyID0gaGVhZC0+bmV4dDsg IHcyOyAgdzIgPSB3Mi0+bmV4dCkgeworISAgICAgICBpZiAodzItPmxlbmd0aCA+IEwpIHsKKyEg ICAgICAgICBsaW5lbGVuID0gdzItPmxlbmd0aDsKKyAgICAgICAgICBpZiAobGluZWxlbiA+IGVy cm1zZ19zaXplIC0gMTcpCisgICAgICAgICAgICBsaW5lbGVuID0gZXJybXNnX3NpemUgLSAxNzsK KyEgICAgICAgICBzcHJpbnRmKGVycm1zZywgIldvcmQgdG9vIGxvbmc6ICUuKnNcbiIsIGxpbmVs ZW4sIHcyLT5jaHJzKTsKKyAgICAgICAgICBnb3RvIHJmY2xlYW51cDsKKyAgICAgICAgfQorICAg ICAgfQorICAgIGVsc2UKKyAgICAgIGZvciAodzIgPSBoZWFkLT5uZXh0OyAgdzI7ICB3MiA9IHcy LT5uZXh0KQorISAgICAgICB3aGlsZSAodzItPmxlbmd0aCA+IEwpIHsKKyAgICAgICAgICB3MSA9 IG1hbGxvYyhzaXplb2YgKHdvcmQpKTsKKyAgICAgICAgICBpZiAoIXcxKSB7CishICAgICAgICAg ICBzdHJjcHkoZXJybXNnLG91dG9mbWVtKTsKKyAgICAgICAgICAgIGdvdG8gcmZjbGVhbnVwOwor ICAgICAgICAgIH0KKyAgICAgICAgICB3MS0+bmV4dCA9IHcyOworLS0tIDQyNSw0NDQgLS0tLQor ICAKKyAgICBpZiAoUmVwb3J0KQorICAgICAgZm9yICh3MiA9IGhlYWQtPm5leHQ7ICB3MjsgIHcy ID0gdzItPm5leHQpIHsKKyEgICAgICAgaWYgKHcyLT53aWR0aCA+IEwpIHsKKyEgICAgICAgICBs aW5lbGVuID0gdzItPndpZHRoOworICAgICAgICAgIGlmIChsaW5lbGVuID4gZXJybXNnX3NpemUg LSAxNykKKyAgICAgICAgICAgIGxpbmVsZW4gPSBlcnJtc2dfc2l6ZSAtIDE3OworISAgICAgICAg IHN3cHJpbnRmKGVycm1zZyxlcnJtc2dfc2l6ZSwgTCJXb3JkIHRvbyBsb25nOiAlLipsc1xuIiwg bGluZWxlbiwgdzItPmNocnMpOworICAgICAgICAgIGdvdG8gcmZjbGVhbnVwOworICAgICAgICB9 CisgICAgICB9CisgICAgZWxzZQorICAgICAgZm9yICh3MiA9IGhlYWQtPm5leHQ7ICB3MjsgIHcy ID0gdzItPm5leHQpCishICAgICAgIHdoaWxlICh3Mi0+d2lkdGggPiBMKSB7CisgICAgICAgICAg dzEgPSBtYWxsb2Moc2l6ZW9mICh3b3JkKSk7CisgICAgICAgICAgaWYgKCF3MSkgeworISAgICAg ICAgICAgd2NzY3B5KGVycm1zZyxvdXRvZm1lbSk7CisgICAgICAgICAgICBnb3RvIHJmY2xlYW51 cDsKKyAgICAgICAgICB9CisgICAgICAgICAgdzEtPm5leHQgPSB3MjsKKyoqKioqKioqKioqKioq KgorKioqIDQyMCw0MjYgKioqKgorLS0tIDQ0OCw0NTYgLS0tLQorICAgICAgICAgIHcxLT5jaHJz ID0gdzItPmNocnM7CisgICAgICAgICAgdzItPmNocnMgKz0gTDsKKyAgICAgICAgICB3MS0+bGVu Z3RoID0gTDsKKysgICAgICAgICB3MS0+d2lkdGggPSBnZXRXaWR0aCh3MS0+Y2hycywgdzEtPmNo cnMgKyBMKTsKKyAgICAgICAgICB3Mi0+bGVuZ3RoIC09IEw7CisrICAgICAgICAgdzItPndpZHRo IC09IHcxLT53aWR0aDsKKyAgICAgICAgICB3MS0+ZmxhZ3MgPSAwOworICAgICAgICAgIGlmIChp c2NhcGl0YWwodzIpKSB7CisgICAgICAgICAgICB3MS0+ZmxhZ3MgfD0gV19DQVBJVEFMOworKioq KioqKioqKioqKioqCisqKiogNDQ0LDQ1MiAqKioqCisgICAgICBMID0gMDsKKyAgICAgIHcxID0g aGVhZC0+bmV4dDsKKyAgICAgIHdoaWxlICh3MSkgeworISAgICAgICBmb3IgKGxpbmVsZW4gPSB3 MS0+bGVuZ3RoLCB3MiA9IHcxLT5uZXh0OworICAgICAgICAgICAgIHcyICE9IHcxLT5uZXh0bGlu ZTsKKyEgICAgICAgICAgICBsaW5lbGVuICs9IDEgKyBpc3NoaWZ0ZWQodzIpICsgdzItPmxlbmd0 aCwgdzIgPSB3Mi0+bmV4dCk7CisgICAgICAgIGlmIChsaW5lbGVuID4gTCkgTCA9IGxpbmVsZW47 CisgICAgICAgIHcxID0gdzI7CisgICAgICB9CistLS0gNDc0LDQ4MiAtLS0tCisgICAgICBMID0g MDsKKyAgICAgIHcxID0gaGVhZC0+bmV4dDsKKyAgICAgIHdoaWxlICh3MSkgeworISAgICAgICBm b3IgKGxpbmVsZW4gPSB3MS0+d2lkdGgsIHcyID0gdzEtPm5leHQ7CisgICAgICAgICAgICAgdzIg IT0gdzEtPm5leHRsaW5lOworISAgICAgICAgICAgIGxpbmVsZW4gKz0gMSArIGlzc2hpZnRlZCh3 MikgKyB3Mi0+d2lkdGgsIHcyID0gdzItPm5leHQpOworICAgICAgICBpZiAobGluZWxlbiA+IEwp IEwgPSBsaW5lbGVuOworICAgICAgICB3MSA9IHcyOworICAgICAgfQorKioqKioqKioqKioqKioq CisqKiogNDU0LDUyMCAqKioqCisgIAorICAvKiBDb25zdHJ1Y3QgdGhlIGxpbmVzOiAqLworICAK KyEgICBwYnVmID0gbmV3YnVmZmVyKHNpemVvZiAoY2hhciAqKSwgZXJybXNnKTsKKyAgICBpZiAo KmVycm1zZykgZ290byByZmNsZWFudXA7CisgIAorICAgIG51bW91dCA9IDA7CisgICAgdzEgPSBo ZWFkLT5uZXh0OworICAgIHdoaWxlIChudW1vdXQgPCBoYW5nIHx8IHcxKSB7CisgICAgICBpZiAo dzEpCishICAgICAgIGZvciAodzIgPSB3MS0+bmV4dCwgbnVtZ2FwcyA9IDAsIGV4dHJhID0gTCAt IHcxLT5sZW5ndGg7CisgICAgICAgICAgICAgdzIgIT0gdzEtPm5leHRsaW5lOworISAgICAgICAg ICAgICsrbnVtZ2FwcywgZXh0cmEgLT0gMSArIGlzc2hpZnRlZCh3MikgKyB3Mi0+bGVuZ3RoLCB3 MiA9IHcyLT5uZXh0KTsKKyAgICAgIGxpbmVsZW4gPSBzdWZmaXggfHwgKGp1c3QgJiYgKHcyIHx8 IGxhc3QpKSA/CisgICAgICAgICAgICAgICAgICBMICsgYWZmaXggOgorICAgICAgICAgICAgICAg ICAgdzEgPyBwcmVmaXggKyBMIC0gZXh0cmEgOiBwcmVmaXg7CishICAgICBxMSA9IG1hbGxvYygo bGluZWxlbiArIDEpICogc2l6ZW9mIChjaGFyKSk7CisgICAgICBpZiAoIXExKSB7CishICAgICAg IHN0cmNweShlcnJtc2csb3V0b2ZtZW0pOworICAgICAgICBnb3RvIHJmY2xlYW51cDsKKyAgICAg IH0KKyAgICAgIGFkZGl0ZW0ocGJ1ZiwgJnExLCBlcnJtc2cpOworICAgICAgaWYgKCplcnJtc2cp IGdvdG8gcmZjbGVhbnVwOworICAgICAgKytudW1vdXQ7CisgICAgICBxMiA9IHExICsgcHJlZml4 OworISAgICAgaWYgICAgICAobnVtb3V0IDw9IG51bWluKSBtZW1jcHkocTEsIGlubGluZXNbbnVt b3V0IC0gMV0sIHByZWZpeCk7CishICAgICBlbHNlIGlmIChudW1pbiAgPiAgaGFuZyApIG1lbWNw eShxMSwgZW5kbGluZVstMV0sICAgICAgICAgcHJlZml4KTsKKyAgICAgIGVsc2UgeworICAgICAg ICBpZiAoYWZwID4gcHJlZml4KSBhZnAgPSBwcmVmaXg7CishICAgICAgIG1lbWNweShxMSwgZW5k bGluZVstMV0sIGFmcCk7CisgICAgICAgIHExICs9IGFmcDsKKyEgICAgICAgd2hpbGUgKHExIDwg cTIpICpxMSsrID0gJyAnOworICAgICAgfQorICAgICAgcTEgPSBxMjsKKyAgICAgIGlmICh3MSkg eworICAgICAgICBwaGFzZSA9IG51bWdhcHMgLyAyOworICAgICAgICBmb3IgKHcyID0gdzE7ICA7 ICApIHsKKyEgICAgICAgICBtZW1jcHkocTEsIHcyLT5jaHJzLCB3Mi0+bGVuZ3RoKTsKKyAgICAg ICAgICBxMSArPSB3Mi0+bGVuZ3RoOworICAgICAgICAgIHcyID0gdzItPm5leHQ7CisgICAgICAg ICAgaWYgKHcyID09IHcxLT5uZXh0bGluZSkgYnJlYWs7CishICAgICAgICAgKnExKysgPSAnICc7 CisgICAgICAgICAgaWYgKGp1c3QgJiYgKHcxLT5uZXh0bGluZSB8fCBsYXN0KSkgeworICAgICAg ICAgICAgcGhhc2UgKz0gZXh0cmE7CisgICAgICAgICAgICB3aGlsZSAocGhhc2UgPj0gbnVtZ2Fw cykgeworISAgICAgICAgICAgICAqcTErKyA9ICcgJzsKKyAgICAgICAgICAgICAgcGhhc2UgLT0g bnVtZ2FwczsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CishICAgICAgICAgaWYgKGlzc2hp ZnRlZCh3MikpICpxMSsrID0gJyAnOworICAgICAgICB9CisgICAgICB9CisgICAgICBxMiArPSBs aW5lbGVuIC0gYWZmaXg7CishICAgICB3aGlsZSAocTEgPCBxMikgKnExKysgPSAnICc7CisgICAg ICBxMiA9IHExICsgc3VmZml4OworISAgICAgaWYgICAgICAobnVtb3V0IDw9IG51bWluKSBtZW1j cHkocTEsIHN1ZmZpeGVzW251bW91dCAtIDFdLCBzdWZmaXgpOworISAgICAgZWxzZSBpZiAobnVt aW4gID4gIGhhbmcgKSBtZW1jcHkocTEsIHN1ZmZpeGVzW251bWluICAtIDFdLCBzdWZmaXgpOwor ICAgICAgZWxzZSB7CisgICAgICAgIGlmIChmcyA+IHN1ZmZpeCkgZnMgPSBzdWZmaXg7CishICAg ICAgIG1lbWNweShxMSwgc3VmZml4ZXNbbnVtaW4gLSAxXSwgZnMpOworICAgICAgICBxMSArPSBm czsKKyEgICAgICAgd2hpbGUocTEgPCBxMikgKnExKysgPSAnICc7CisgICAgICB9CishICAgICAq cTIgPSAnXDAnOworICAgICAgaWYgKHcxKSB3MSA9IHcxLT5uZXh0bGluZTsKKyAgICB9CisgIAor LS0tIDQ4NCw1NTAgLS0tLQorICAKKyAgLyogQ29uc3RydWN0IHRoZSBsaW5lczogKi8KKyAgCish ICAgcGJ1ZiA9IG5ld2J1ZmZlcihzaXplb2YgKHdjaGFyX3QgKiksIGVycm1zZyk7CisgICAgaWYg KCplcnJtc2cpIGdvdG8gcmZjbGVhbnVwOworICAKKyAgICBudW1vdXQgPSAwOworICAgIHcxID0g aGVhZC0+bmV4dDsKKyAgICB3aGlsZSAobnVtb3V0IDwgaGFuZyB8fCB3MSkgeworICAgICAgaWYg KHcxKQorISAgICAgICBmb3IgKHcyID0gdzEtPm5leHQsIG51bWdhcHMgPSAwLCBleHRyYSA9IEwg LSB3MS0+d2lkdGg7CisgICAgICAgICAgICAgdzIgIT0gdzEtPm5leHRsaW5lOworISAgICAgICAg ICAgICsrbnVtZ2FwcywgZXh0cmEgLT0gMSArIGlzc2hpZnRlZCh3MikgKyB3Mi0+d2lkdGgsIHcy ID0gdzItPm5leHQpOworICAgICAgbGluZWxlbiA9IHN1ZmZpeCB8fCAoanVzdCAmJiAodzIgfHwg bGFzdCkpID8KKyAgICAgICAgICAgICAgICAgIEwgKyBhZmZpeCA6CisgICAgICAgICAgICAgICAg ICB3MSA/IHByZWZpeCArIEwgLSBleHRyYSA6IHByZWZpeDsKKyEgICAgIHExID0gbWFsbG9jKChs aW5lbGVuICsgMSkgKiBzaXplb2YgKHdjaGFyX3QpKTsKKyAgICAgIGlmICghcTEpIHsKKyEgICAg ICAgd2NzY3B5KGVycm1zZyxvdXRvZm1lbSk7CisgICAgICAgIGdvdG8gcmZjbGVhbnVwOworICAg ICAgfQorICAgICAgYWRkaXRlbShwYnVmLCAmcTEsIGVycm1zZyk7CisgICAgICBpZiAoKmVycm1z ZykgZ290byByZmNsZWFudXA7CisgICAgICArK251bW91dDsKKyAgICAgIHEyID0gcTEgKyBwcmVm aXg7CishICAgICBpZiAgICAgIChudW1vdXQgPD0gbnVtaW4pIG1lbWNweShxMSwgaW5saW5lc1tu dW1vdXQgLSAxXSwgcHJlZml4ICogc2l6ZW9mKHdjaGFyX3QpKTsKKyEgICAgIGVsc2UgaWYgKG51 bWluICA+ICBoYW5nICkgbWVtY3B5KHExLCBlbmRsaW5lWy0xXSwgICAgICAgICBwcmVmaXggKiBz aXplb2Yod2NoYXJfdCkpOworICAgICAgZWxzZSB7CisgICAgICAgIGlmIChhZnAgPiBwcmVmaXgp IGFmcCA9IHByZWZpeDsKKyEgICAgICAgbWVtY3B5KHExLCBlbmRsaW5lWy0xXSwgYWZwICogc2l6 ZW9mKHdjaGFyX3QpKTsKKyAgICAgICAgcTEgKz0gYWZwOworISAgICAgICB3aGlsZSAocTEgPCBx MikgKnExKysgPSBMJyAnOworICAgICAgfQorICAgICAgcTEgPSBxMjsKKyAgICAgIGlmICh3MSkg eworICAgICAgICBwaGFzZSA9IG51bWdhcHMgLyAyOworICAgICAgICBmb3IgKHcyID0gdzE7ICA7 ICApIHsKKyEgICAgICAgICBtZW1jcHkocTEsIHcyLT5jaHJzLCB3Mi0+bGVuZ3RoICogc2l6ZW9m KHdjaGFyX3QpKTsKKyAgICAgICAgICBxMSArPSB3Mi0+bGVuZ3RoOworICAgICAgICAgIHcyID0g dzItPm5leHQ7CisgICAgICAgICAgaWYgKHcyID09IHcxLT5uZXh0bGluZSkgYnJlYWs7CishICAg ICAgICAgKnExKysgPSBMJyAnOworICAgICAgICAgIGlmIChqdXN0ICYmICh3MS0+bmV4dGxpbmUg fHwgbGFzdCkpIHsKKyAgICAgICAgICAgIHBoYXNlICs9IGV4dHJhOworICAgICAgICAgICAgd2hp bGUgKHBoYXNlID49IG51bWdhcHMpIHsKKyEgICAgICAgICAgICAgKnExKysgPSBMJyAnOworICAg ICAgICAgICAgICBwaGFzZSAtPSBudW1nYXBzOworICAgICAgICAgICAgfQorICAgICAgICAgIH0K KyEgICAgICAgICBpZiAoaXNzaGlmdGVkKHcyKSkgKnExKysgPSBMJyAnOworICAgICAgICB9Cisg ICAgICB9CisgICAgICBxMiArPSBsaW5lbGVuIC0gYWZmaXg7CishICAgICB3aGlsZSAocTEgPCBx MikgKnExKysgPSBMJyAnOworICAgICAgcTIgPSBxMSArIHN1ZmZpeDsKKyEgICAgIGlmICAgICAg KG51bW91dCA8PSBudW1pbikgbWVtY3B5KHExLCBzdWZmaXhlc1tudW1vdXQgLSAxXSwgc3VmZml4 ICogc2l6ZW9mKHdjaGFyX3QpKTsKKyEgICAgIGVsc2UgaWYgKG51bWluICA+ICBoYW5nICkgbWVt Y3B5KHExLCBzdWZmaXhlc1tudW1pbiAgLSAxXSwgc3VmZml4ICogc2l6ZW9mKHdjaGFyX3QpKTsK KyAgICAgIGVsc2UgeworICAgICAgICBpZiAoZnMgPiBzdWZmaXgpIGZzID0gc3VmZml4OworISAg ICAgICBtZW1jcHkocTEsIHN1ZmZpeGVzW251bWluIC0gMV0sIGZzICogc2l6ZW9mKHdjaGFyX3Qp KTsKKyAgICAgICAgcTEgKz0gZnM7CishICAgICAgIHdoaWxlKHExIDwgcTIpICpxMSsrID0gTCcg JzsKKyAgICAgIH0KKyEgICAgICpxMiA9IEwnXDAnOworICAgICAgaWYgKHcxKSB3MSA9IHcxLT5u ZXh0bGluZTsKKyAgICB9CisgIAorKioqKioqKioqKioqKioqCisqKiogNTQzLDU0NyAqKioqCist LS0gNTczLDU3OCAtLS0tCisgICAgICBmcmVlYnVmZmVyKHBidWYpOworICAgIH0KKyAgCisrICAg CisgICAgcmV0dXJuIG91dGxpbmVzOworICB9CitkaWZmIC1jIC4vcmVmb3JtYXQuaCAuLi9QYXIx NTItdW5pY29kZS9yZWZvcm1hdC5oCisqKiogLi9yZWZvcm1hdC5oCTIwMDEtMDMtMDkgMDM6NTM6 NDMuMDAwMDAwMDAwICswMzAwCistLS0gLi4vUGFyMTUyLXVuaWNvZGUvcmVmb3JtYXQuaAkyMDE5 LTEwLTI2IDE3OjIxOjA4LjU0OTA1MDg1MyArMDMwMAorKioqKioqKioqKioqKioqCisqKiogMSwx OCAqKioqCishIC8qKioqKioqKioqKioqKioqKioqKiovCishIC8qIHJlZm9ybWF0LmggICAgICAg ICovCishIC8qIGZvciBQYXIgMS41MiAgICAgICovCishIC8qIENvcHlyaWdodCAyMDAxIGJ5ICov CishIC8qIEFkYW0gTS4gQ29zdGVsbG8gICovCishIC8qKioqKioqKioqKioqKioqKioqKiovCisg IAorICAvKiBUaGlzIGlzIEFOU0kgQyBjb2RlIChDODkpLiAqLworICAKKyAgCisgICNpbmNsdWRl ICJlcnJtc2cuaCIKKyAgCishIAorISBjaGFyICoqcmVmb3JtYXQoCishICAgY29uc3QgY2hhciAq IGNvbnN0ICppbmxpbmVzLCBjb25zdCBjaGFyICogY29uc3QgKmVuZGxpbmUsIGludCBhZnAsIGlu dCBmcywKKyAgICBpbnQgaGFuZywgaW50IHByZWZpeCwgaW50IHN1ZmZpeCwgaW50IHdpZHRoLCBp bnQgY2FwLCBpbnQgZml0LCBpbnQgZ3Vlc3MsCisgICAgaW50IGp1c3QsIGludCBsYXN0LCBpbnQg UmVwb3J0LCBpbnQgdG91Y2gsIGVycm1zZ190IGVycm1zZworICApOworLS0tIDEsMjAgLS0tLQor ISAvKioqKioqKioqKioqKioqKioqKioqKiovCishIC8qIHJlZm9ybWF0LmggICAgICAgICAgKi8K KyEgLyogZm9yIFBhciAxLjUyLWkxOG4uNCAqLworISAvKiBDb3B5cmlnaHQgMjAwMSBieSAgICov CishIC8qIEFkYW0gTS4gQ29zdGVsbG8gICAgKi8KKyEgLyogTW9kaWZpZWQgYnkgICAgICAgICAq LworISAvKiBKw6lyw7RtZSBQb3VpbGxlciAgICAgKi8KKyEgLyoqKioqKioqKioqKioqKioqKioq KioqLworICAKKyAgLyogVGhpcyBpcyBBTlNJIEMgY29kZSAoQzg5KS4gKi8KKyAgCisgIAorICAj aW5jbHVkZSAiZXJybXNnLmgiCisrICNpbmNsdWRlIDx3Y2hhci5oPgorICAKKyEgd2NoYXJfdCAq KnJlZm9ybWF0KAorISAgIGNvbnN0IHdjaGFyX3QgKiBjb25zdCAqaW5saW5lcywgY29uc3Qgd2No YXJfdCAqIGNvbnN0ICplbmRsaW5lLCBpbnQgYWZwLCBpbnQgZnMsCisgICAgaW50IGhhbmcsIGlu dCBwcmVmaXgsIGludCBzdWZmaXgsIGludCB3aWR0aCwgaW50IGNhcCwgaW50IGZpdCwgaW50IGd1 ZXNzLAorICAgIGludCBqdXN0LCBpbnQgbGFzdCwgaW50IFJlcG9ydCwgaW50IHRvdWNoLCBlcnJt c2dfdCBlcnJtc2cKKyAgKTsKK2RpZmYgLWMgLi9yZWxlYXNlbm90ZXMgLi4vUGFyMTUyLXVuaWNv ZGUvcmVsZWFzZW5vdGVzCisqKiogLi9yZWxlYXNlbm90ZXMJMjAwMS0wNC0zMCAwMToxMjowNS4w MDAwMDAwMDAgKzA0MDAKKy0tLSAuLi9QYXIxNTItdW5pY29kZS9yZWxlYXNlbm90ZXMJMjAxOS0x MC0yNiAxNzoyMTowOC41NDkwNTA4NTMgKzAzMDAKKyoqKioqKioqKioqKioqKgorKioqIDEsMTIg KioqKgorISAgICoqKioqKioqKioqKioqKioqKioqKgorISAgICogcmVsZWFzZW5vdGVzICAgICAg KgorISAgICogZm9yIFBhciAxLjUyICAgICAgKgorISAgICogQ29weXJpZ2h0IDIwMDEgYnkgKgor ISAgICogQWRhbSBNLiBDb3N0ZWxsbyAgKgorISAgICoqKioqKioqKioqKioqKioqKioqKgorICAK KyAgCisgIEVhY2ggZW50cnkgYmVsb3cgZGVzY3JpYmVzIGNoYW5nZXMgc2luY2UgdGhlIHByZXZp b3VzIHZlcnNpb24uCisgIAorICBQYXIgMS41MiByZWxlYXNlZCAyMDAxLUFwci0yOQorICAgICAg Rml4ZWQgYSBwb3J0YWJpbGl0eSBwcm9ibGVtIHJlZ2FyZGluZyB1bnNpZ25lZCBjaGFyIHZlcnN1 cyBjaGFyLgorLS0tIDEsMjggLS0tLQorISAgICoqKioqKioqKioqKioqKioqKioqKioqCishICAg KiByZWxlYXNlbm90ZXMgICAgICAgICoKKyEgICAqIGZvciBQYXIgMS41Mi1pMThuLjQgKgorISAg ICogQ29weXJpZ2h0IDIwMDEgYnkgICAqCishICAgKiBBZGFtIE0uIENvc3RlbGxvICAgICoKKyEg ICAqIE1vZGlmaWVkIGJ5ICAgICAgICAgKgorISAgICogSsOpcsO0bWUgUG91aWxsZXIgICAgICoK KyEgICAqKioqKioqKioqKioqKioqKioqKioqKgorICAKKyAgCisgIEVhY2ggZW50cnkgYmVsb3cg ZGVzY3JpYmVzIGNoYW5nZXMgc2luY2UgdGhlIHByZXZpb3VzIHZlcnNpb24uCisrIFBhciAxLjUy LWkxOG4uNCByZWxlYXNlZCAyMDA5LU1heS0wNQorKyAgICAgQ2hhbmdlIG5lYXJseSBhbGwgY2hh ciBpbiB3Y2hhcl90IHJlbW92ZSBuaWdodG1hcmUgb2YgdW5zaWduZWQgY2hhciB2cyBzaWduZWQg Y2hhcgorKyAgICAgRml4IGJ1Z3Mgd2l0aCBvcHRpb24gJ3EnCisrICAgICBGaXggYnVncyB3aXRo ICdcbicKKysgCisrIFBhciAxLjUyLWkxOG4uMyByZWxlYXNlZCAyMDA2LU9jdC0wMworKyAgICAg Rml4IGJ1ZyB3aXRoIG9wdGlvbiAnZycKKysgCisrIFBhciAxLjUyLWkxOG4uMiByZWxlYXNlZCAy MDA2LUF1Zy0wMworKyAgICAgRml4IGJ1ZyBkZWJpYW4gIzMxMDQ5NS4KKysgCisrIFBhciAxLjUy LWkxOG4uMSByZWxlYXNlZCAyMDA2LUp1bi0yMgorKyAgICAgQ2hhbmdlZCBjaGFyIGluIHdjaGFy X3QuIEFsbG93IHN1cHBvcnQgb2YgbXVsdGlieXRlcyBjaGFyYWN0ZXJzLgorKyAgICAgQWRkZWQg c3VwcG9ydCBmb3IgZG91YmxlLXdpZHRoIGNoYXJhY3RlcnMuCisgIAorICBQYXIgMS41MiByZWxl YXNlZCAyMDAxLUFwci0yOQorICAgICAgRml4ZWQgYSBwb3J0YWJpbGl0eSBwcm9ibGVtIHJlZ2Fy ZGluZyB1bnNpZ25lZCBjaGFyIHZlcnN1cyBjaGFyLgor0J7QsdGJ0LjQtSDQv9C+0LTQutCw0YLQ sNC70L7Qs9C4OiAuL3Rlc3Qg0LggLi4vUGFyMTUyLXVuaWNvZGUvdGVzdApkaWZmIC0tZ2l0IGEv c3JjcGtncy9wYXIvdGVtcGxhdGUgYi9zcmNwa2dzL3Bhci90ZW1wbGF0ZQppbmRleCA1ODVhODg4 Nzg0MS4uZDNlMmQ1ODg2YWQgMTAwNjQ0Ci0tLSBhL3NyY3BrZ3MvcGFyL3RlbXBsYXRlCisrKyBi L3NyY3BrZ3MvcGFyL3RlbXBsYXRlCkBAIC0xLDcgKzEsNyBAQAogIyBUZW1wbGF0ZSBmaWxlIGZv ciAncGFyJwogcGtnbmFtZT1wYXIKIHZlcnNpb249MS41MgotcmV2aXNpb249MworcmV2aXNpb249 NAogd3Jrc3JjPVBhcjE1MgogYnVpbGRfc3R5bGU9Z251LWNvbmZpZ3VyZQogc2hvcnRfZGVzYz0i UGFyYWdyYXBoIHJlZm9ybWF0dGVyIgo= --===============7639971906355611833==--