From: Alexander Barkov Date: February 17 2011 11:20am Subject: WL#5331 Support Unicode for Windows command line client List-Archive: http://lists.mysql.com/commits/131516 Message-Id: <4D5D047F.8050302@oracle.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="------------020204070206090606010803" --------------020204070206090606010803 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Based on Vlad's patch: http://lists.mysql.com/commits/105379 Version N2, with wide popen(). --------------020204070206090606010803 Content-Type: text/plain; name="w5331.diff" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="w5331.diff" PT09IG1vZGlmaWVkIGZpbGUgJ2NsaWVudC9teXNxbC5jYycKLS0tIGNsaWVudC9teXNxbC5j YwkyMDExLTAyLTE1IDEyOjM4OjM5ICswMDAwCisrKyBjbGllbnQvbXlzcWwuY2MJMjAxMS0w Mi0xNyAxMToxNjozMyArMDAwMApAQCAtMTk1LDYgKzE5NSwyMCBAQAogCiBjb25zdCBjaGFy ICpkZWZhdWx0X2RidWdfb3B0aW9uPSJkOnQ6bywvdG1wL215c3FsLnRyYWNlIjsKIAorCisj aWZkZWYgX19XSU5fXworc3RhdGljIG15X2Jvb2wgdXNlX3VuaWNvZGVfYXBpPSAxOworc3Rh dGljIG15X2Jvb2wgY29udmVyc2lvbl9kb25lPSAwOyAvKiBGbGFnIHRvIGF2b2lkIGNvbnZl cnNpb24gb24gcmVjb25uZWN0ICovCisjZW5kaWYgLyogX19XSU5fXyAqLworCisvKiBWYXJp b3VzIHByaW50aW5nIGZsYWdzICovCisjZGVmaW5lIE1ZX1BSSU5UX0VTQ18wIDEgIC8qIFJl cGxhY2UgMHgwMCBieXRlcyB0byAiXDAiICAgICAgICAgICAgICAqLworI2RlZmluZSBNWV9Q UklOVF9TUFNfMCAyICAvKiBSZXBsYWNlIDB4MDAgYnl0ZXMgdG8gc3BhY2UgICAgICAgICAg ICAgKi8KKyNkZWZpbmUgTVlfUFJJTlRfWE1MICAgNCAgLyogRW5jb2RlIFhNTCBlbnRpdGll cyAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIE1ZX1BSSU5UX01CICAgIDggIC8q IFJlY29nbml6ZSBtdWx0aS1ieXRlIGNoYXJhY3RlcnMgICAgICAgICAqLworI2RlZmluZSBN WV9QUklOVF9DVFJMIDE2ICAvKiBSZXBsYWNlIFRBQiwgTkwsIENSIHRvICJcdCIsICJcbiIs ICJcciIgKi8KKwordm9pZCB0ZWVfd3JpdGUoRklMRSAqZmlsZSwgY29uc3QgY2hhciAqcywg c2l6ZV90IHNsZW4sIGludCBmbGFncyk7CiB2b2lkIHRlZV9mcHJpbnRmKEZJTEUgKmZpbGUs IGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKIHZvaWQgdGVlX2ZwdXRzKGNvbnN0IGNoYXIgKnMs IEZJTEUgKmZpbGUpOwogdm9pZCB0ZWVfcHV0cyhjb25zdCBjaGFyICpzLCBGSUxFICpmaWxl KTsKQEAgLTExMTMsNiArMTEyNywxNyBAQAogICAgICAgY2xvc2Uoc3Rkb3V0X2ZpbGVub19j b3B5KTsgICAgICAgICAgICAgLyogQ2xlYW4gdXAgZHVwKCkuICovCiAgIH0KIAorI2lmZGVm IF9fV0lOX18KKyAgLyoKKyAgICBDb252ZXJ0IGNvbW1hbmQgbGluZSBwYXJhbWV0ZXJzIGZy b20gVVRGMTZMRSB0byBVVEY4TUI0CisgICAgd2hlbiAibXlzcWwuZXhlIC0tdW5pY29kZSIg aXMgc3BlY2lmaWVkLgorICAgIE90aGVyd2lzZSwgdGhlIHVzdWFsIGFyZ2MvYXJndiB3aWxs IGJlIHVzZWQsCisgICAgd2hpY2ggYnJpbmcgYXJndW1lbnRzIHVzaW5nIEFOU0kgY29kZSBw YWdlLgorICAqLworICBpZiAodXNlX3VuaWNvZGVfYXBpKQorICAgIG15X3dpbl90cmFuc2xh dGVfY29tbWFuZF9saW5lX2FyZ3MoJm15X2NoYXJzZXRfdXRmOG1iNF9iaW4sICZhcmdjLCAm YXJndik7CisjZW5kaWYKKwogICBpZiAobG9hZF9kZWZhdWx0cygibXkiLGxvYWRfZGVmYXVs dF9ncm91cHMsJmFyZ2MsJmFyZ3YpKQogICB7CiAgICAgbXlfZW5kKDApOwpAQCAtMTg4NSw2 ICsxOTEwLDE1IEBACiAgICAgICAgIHRtcGJ1Zi5hbGxvYyg2NTUzNSk7CiAgICAgICB0bXBi dWYubGVuZ3RoKDApOwogICAgICAgYnVmZmVyLmxlbmd0aCgwKTsKKworICAgICAgaWYgKHVz ZV91bmljb2RlX2FwaSkKKyAgICAgIHsKKyAgICAgICAgbGluZT0gbXlfd2luX2NvbnNvbGVf cmVhZGxpbmUoY2hhcnNldF9pbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAoY2hhciopIHRtcGJ1Zi5wdHIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdG1wYnVmLmFsbG9jZWRfbGVuZ3RoKCkpOworICAgICAgICBnb3Rv IGdvdF9hX2xpbmU7CisgICAgICB9CisKICAgICAgIHNpemVfdCBjbGVuOwogICAgICAgZG8K ICAgICAgIHsKQEAgLTE5MDEsNiArMTkzNSw4IEBACiAgICAgICAqLwogICAgICAgaWYgKGxp bmUpCiAgICAgICAgIGxpbmU9IGJ1ZmZlci5jX3B0cigpOworCitnb3RfYV9saW5lOgogI2Vs c2UKICAgICAgIGlmIChvcHRfb3V0ZmlsZSkKIAlmcHV0cyhwcm9tcHQsIE9VVEZJTEUpOwpA QCAtMzQ1NSwxOSArMzQ5MSwxMiBAQAogICAgIGdyaWQuICAoVGhlIFwwIGlzIGFsc28gdGhl IHJlYXNvbiB3ZSBjYW4ndCB1c2UgZnByaW50ZigpIC4pIAogICAqLwogICB1bnNpZ25lZCBp bnQgaTsKLSAgY29uc3QgY2hhciAqcDsKIAogICBpZiAocmlnaHRfanVzdGlmaWVkKSAKICAg ICBmb3IgKGk9IGRhdGFfbGVuZ3RoOyBpIDwgdG90YWxfYnl0ZXNfdG9fc2VuZDsgaSsrKQog ICAgICAgdGVlX3B1dGMoKGludCknICcsIFBBR0VSKTsKIAotICBmb3IgKGk9IDAsIHA9IGRh dGE7IGkgPCBkYXRhX2xlbmd0aDsgaSs9IDEsIHArPSAxKQotICB7Ci0gICAgaWYgKCpwID09 ICdcMCcpCi0gICAgICB0ZWVfcHV0YygoaW50KScgJywgUEFHRVIpOwotICAgIGVsc2UKLSAg ICAgIHRlZV9wdXRjKChpbnQpKnAsIFBBR0VSKTsKLSAgfQorICB0ZWVfd3JpdGUoUEFHRVIs IGRhdGEsIGRhdGFfbGVuZ3RoLCBNWV9QUklOVF9TUFNfMHxNWV9QUklOVF9NQik7CiAKICAg aWYgKCEgcmlnaHRfanVzdGlmaWVkKSAKICAgICBmb3IgKGk9IGRhdGFfbGVuZ3RoOyBpIDwg dG90YWxfYnl0ZXNfdG9fc2VuZDsgaSsrKQpAQCAtMzU4NywxNiArMzYxNiw3IEBACiAgICAg ICAgIHRlZV9mcHJpbnRmKFBBR0VSLCAiJSpzOiAiLChpbnQpIG1heF9sZW5ndGgsZmllbGQt Pm5hbWUpOwogICAgICAgaWYgKGN1cltvZmZdKQogICAgICAgewotICAgICAgICB1bnNpZ25l ZCBpbnQgaTsKLSAgICAgICAgY29uc3QgY2hhciAqcDsKLQotICAgICAgICBmb3IgKGk9IDAs IHA9IGN1cltvZmZdOyBpIDwgbGVuZ3Roc1tvZmZdOyBpKz0gMSwgcCs9IDEpCi0gICAgICAg IHsKLSAgICAgICAgICBpZiAoKnAgPT0gJ1wwJykKLSAgICAgICAgICAgIHRlZV9wdXRjKChp bnQpJyAnLCBQQUdFUik7Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgdGVlX3B1dGMo KGludCkqcCwgUEFHRVIpOwotICAgICAgICB9CisgICAgICAgIHRlZV93cml0ZShQQUdFUiwg Y3VyW29mZl0sIGxlbmd0aHNbb2ZmXSwgTVlfUFJJTlRfU1BTXzB8TVlfUFJJTlRfTUIpOwog ICAgICAgICB0ZWVfcHV0YygnXG4nLCBQQUdFUik7CiAgICAgICB9CiAgICAgICBlbHNlCkBA IC0zNjY2LDE2ICszNjg2LDcgQEAKICAgaWYgKCFzcmMpCiAgICAgdGVlX2ZwdXRzKCJOVUxM IiwgUEFHRVIpOwogICBlbHNlCi0gIHsKLSAgICBmb3IgKGNvbnN0IGNoYXIgKnAgPSBzcmM7 IGxlbmd0aDsgcCsrLCBsZW5ndGgtLSkKLSAgICB7Ci0gICAgICBjb25zdCBjaGFyICp0Owot ICAgICAgaWYgKCh0ID0gYXJyYXlfdmFsdWUoeG1sbWV0YSwgKnApKSkKLQl0ZWVfZnB1dHMo dCwgUEFHRVIpOwotICAgICAgZWxzZQotCXRlZV9wdXRjKCpwLCBQQUdFUik7Ci0gICAgfQot ICB9CisgICAgdGVlX3dyaXRlKFBBR0VSLCBzcmMsIGxlbmd0aCwgTVlfUFJJTlRfWE1MfE1Z X1BSSU5UX01CKTsKIH0KIAogCkBAIC0zNjg2LDM3ICszNjk3LDkgQEAKICAgICB0ZWVfZnB1 dHMoIk5VTEwiLCBQQUdFUik7CiAgIGVsc2UKICAgewotICAgIGlmIChvcHRfcmF3X2RhdGEp Ci0gICAgewotICAgICAgdW5zaWduZWQgbG9uZyBpOwotICAgICAgLyogQ2FuJ3QgdXNlIHRl ZV9mcHV0cygpLCBpdCBzdG9wcyB3aXRoIE5VTCBjaGFyYWN0ZXJzLiAqLwotICAgICAgZm9y IChpPSAwOyBpIDwgbGVuZ3RoOyBpKyssIHBvcysrKQotICAgICAgICB0ZWVfcHV0YygqcG9z LCBQQUdFUik7Ci0gICAgfQotICAgIGVsc2UgZm9yIChjb25zdCBjaGFyICplbmQ9cG9zK2xl bmd0aCA7IHBvcyAhPSBlbmQgOyBwb3MrKykKLSAgICB7Ci0jaWZkZWYgVVNFX01CCi0gICAg ICBpbnQgbDsKLSAgICAgIGlmICh1c2VfbWIoY2hhcnNldF9pbmZvKSAmJgotICAgICAgICAg IChsID0gbXlfaXNtYmNoYXIoY2hhcnNldF9pbmZvLCBwb3MsIGVuZCkpKQotICAgICAgewot CSAgd2hpbGUgKGwtLSkKLQkgICAgdGVlX3B1dGMoKnBvcysrLCBQQUdFUik7Ci0JICBwb3Mt LTsKLQkgIGNvbnRpbnVlOwotICAgICAgfQotI2VuZGlmCi0gICAgICBpZiAoISpwb3MpCi0J dGVlX2ZwdXRzKCJcXDAiLCBQQUdFUik7IC8vIFRoaXMgbWFrZXMgZXZlcnl0aGluZyBoYXJk Ci0gICAgICBlbHNlIGlmICgqcG9zID09ICdcdCcpCi0JdGVlX2ZwdXRzKCJcXHQiLCBQQUdF Uik7IC8vIFRoaXMgd291bGQgZGVzdHJveSB0YWIgZm9ybWF0Ci0gICAgICBlbHNlIGlmICgq cG9zID09ICdcbicpCi0JdGVlX2ZwdXRzKCJcXG4iLCBQQUdFUik7IC8vIFRoaXMgdG9vCi0g ICAgICBlbHNlIGlmICgqcG9zID09ICdcXCcpCi0JdGVlX2ZwdXRzKCJcXFxcIiwgUEFHRVIp OwotCWVsc2UKLQl0ZWVfcHV0YygqcG9zLCBQQUdFUik7Ci0gICAgfQorICAgIGludCBmbGFn cz0gTVlfUFJJTlRfTUIgfCAob3B0X3Jhd19kYXRhID8gMCA6IChNWV9QUklOVF9FU0NfMHxN WV9QUklOVF9DVFJMKSk7CisgICAgLyogQ2FuJ3QgdXNlIHRlZV9mcHV0cygpLCBpdCBzdG9w cyB3aXRoIE5VTCBjaGFyYWN0ZXJzLiAqLworICAgIHRlZV93cml0ZShQQUdFUiwgcG9zLCBs ZW5ndGgsIGZsYWdzKTsKICAgfQogfQogCkBAIC00MzE3LDcgKzQzMDAsMzAgQEAKICAgICBt eXNxbF9vcHRpb25zKCZteXNxbCwgTVlTUUxfSU5JVF9DT01NQU5ELCBpbml0X2NvbW1hbmQp OwogICB9CiAKLSAgbXlzcWxfb3B0aW9ucygmbXlzcWwsIE1ZU1FMX1NFVF9DSEFSU0VUX05B TUUsIGRlZmF1bHRfY2hhcnNldCk7CisgIG15c3FsX3NldF9jaGFyYWN0ZXJfc2V0KCZteXNx bCwgZGVmYXVsdF9jaGFyc2V0KTsKKyNpZmRlZiBfX1dJTl9fCisgIHVpbnQgY252X2Vycm9y czsKKyAgU3RyaW5nIGNvbnZlcnRlZF9kYXRhYmFzZSwgY29udmVydGVkX3VzZXI7CisgIGlm ICh1c2VfdW5pY29kZV9hcGkgJiYKKyAgICAgICFteV9jaGFyc2V0X3NhbWUoJm15X2NoYXJz ZXRfdXRmOG1iNF9iaW4sIG15c3FsLmNoYXJzZXQpKQorICB7CisgICAgLyogQ29udmVydCB1 c2VyIGFuZCBkYXRhYmFzZSBmcm9tIFVURjhNQjQgdG8gY29ubmVjdGlvbiBjaGFyYWN0ZXIg c2V0ICovCisgICAgaWYgKHVzZXIpCisgICAgeworICAgICAgY29udmVydGVkX3VzZXIuY29w eSh1c2VyLCBzdHJsZW4odXNlcikgKyAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAm bXlfY2hhcnNldF91dGY4bWI0X2JpbiwgbXlzcWwuY2hhcnNldCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgJmNudl9lcnJvcnMpOworICAgICAgdXNlcj0gKGNoYXIqKSBjb252ZXJ0 ZWRfdXNlci5wdHIoKTsKKyAgICB9CisgICAgaWYgKGRhdGFiYXNlKQorICAgIHsKKyAgICAg IGNvbnZlcnRlZF9kYXRhYmFzZS5jb3B5KGRhdGFiYXNlLCBzdHJsZW4oZGF0YWJhc2UpICsg MSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZteV9jaGFyc2V0X3V0ZjhtYjRf YmluLCBteXNxbC5jaGFyc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNu dl9lcnJvcnMpOworICAgICAgZGF0YWJhc2U9IChjaGFyKikgY29udmVydGVkX2RhdGFiYXNl LnB0cigpOworICAgIH0KKyAgfQorI2VuZGlmCiAgIAogICBpZiAob3B0X3BsdWdpbl9kaXIg JiYgKm9wdF9wbHVnaW5fZGlyKQogICAgIG15c3FsX29wdGlvbnMoJm15c3FsLCBNWVNRTF9Q TFVHSU5fRElSLCBvcHRfcGx1Z2luX2Rpcik7CkBAIC00MzM5LDcgKzQzNDUsMzkgQEAKICAg ICB9CiAgICAgcmV0dXJuIC0xOwkJCQkJLy8gUmV0cnlhYmxlCiAgIH0KLSAgCisKKyNpZmRl ZiBfX1dJTl9fCisgIC8qIENvbnZlcnQgLS1leGVjdXRlIGJ1ZmZlciBmcm9tIFVURjhNQjQg dG8gY29ubmVjdGlvbiBjaGFyYWN0ZXIgc2V0ICovCisgIGlmICghY29udmVyc2lvbl9kb25l KysgJiYKKyAgICAgIHN0YXR1cy5saW5lX2J1ZmYgJiYKKyAgICAgICFzdGF0dXMubGluZV9i dWZmLT5maWxlICYmIC8qIENvbnZlcnQgb25seSAtZSBidWZmZXIsIG5vdCByZWFsIGZpbGUg Ki8KKyAgICAgIHN0YXR1cy5saW5lX2J1ZmYtPmJ1ZmZlciA8IHN0YXR1cy5saW5lX2J1ZmYt PmVuZCAmJiAvKiBOb24tZW1wdHkgKi8KKyAgICAgIHVzZV91bmljb2RlX2FwaSAmJgorICAg ICAgIW15X2NoYXJzZXRfc2FtZSgmbXlfY2hhcnNldF91dGY4bWI0X2JpbiwgbXlzcWwuY2hh cnNldCkpCisgIHsKKyAgICBTdHJpbmcgdG1wOworICAgIHNpemVfdCBsZW49IHN0YXR1cy5s aW5lX2J1ZmYtPmVuZCAtIHN0YXR1cy5saW5lX2J1ZmYtPmJ1ZmZlcjsKKyAgICB1aW50IGR1 bW15X2Vycm9yczsKKyAgICAvKgorCSAgICBEb24ndCBjb252ZXJ0IHRyYWlsaW5nICdcbicg Y2hhcmFjdGVyIC0gaXQgd2FzIGFwcGVuZGVkIGR1cmluZworCSAgICBsYXN0IGJhdGNoX3Jl YWRsaW5lX2NvbW1hbmQoKSBjYWxsLgorCSAgIE90aGVyd2lzZSB3ZSdsbCBnZXQgYW4gZXh0 cmEgbGluZSwgd2hpY2ggbWFrZXMgc29tZSB0ZXN0cyBmYWlsLgorICAgICovCisgICAgaWYg KHN0YXR1cy5saW5lX2J1ZmYtPmJ1ZmZlcltsZW4gLSAxXSA9PSAnXG4nKQorICAgICAgbGVu LS07CisgICAgaWYgKHRtcC5jb3B5KHN0YXR1cy5saW5lX2J1ZmYtPmJ1ZmZlciwgbGVuLAor ICAgICAgICAgICAgICAgICAmbXlfY2hhcnNldF91dGY4bWI0X2JpbiwgbXlzcWwuY2hhcnNl dCwgJmR1bW15X2Vycm9ycykpCisgICAgICByZXR1cm4gMTsKKworICAgIC8qIEZyZWUgdGhl IG9sZCBsaW5lIGJ1ZmZlciAqLworICAgIGJhdGNoX3JlYWRsaW5lX2VuZChzdGF0dXMubGlu ZV9idWZmKTsKKworICAgIC8qIFJlLWluaXRpYWxpemUgbGluZSBidWZmZXIgZnJvbSB0aGUg Y29udmVydGVkIHN0cmluZyAqLworICAgIGlmICghKHN0YXR1cy5saW5lX2J1ZmY9IGJhdGNo X3JlYWRsaW5lX2NvbW1hbmQoTlVMTCwgKGNoYXIqKSB0bXAuY19wdHJfc2FmZSgpKSkpCisg ICAgICByZXR1cm4gMTsKKyAgfQorI2VuZGlmIC8qIF9fV0lOX18gKi8KKwogICBjaGFyc2V0 X2luZm89IG15c3FsLmNoYXJzZXQ7CiAgIAogICBjb25uZWN0ZWQ9MTsKQEAgLTQ2NDUsMTEg KzQ2ODMsNzUgQEAKIH0KIAogCisvKioKKyAgV3JpdGUgZGF0YSB0byBhIHN0cmVhbS4KKyAg VmFyaW91cyBtb2RlcywgY29ycmVzcG9uZGluZyB0byAtLXRhYiwgLS14bWwsIC0tcmF3IHBh cmFtZXRlcnMsCisgIGFyZSBzdXBwb3J0ZWQuCisKKyAgQHBhcmFtIGZpbGUgICBTdHJlYW0g dG8gd3JpdGUgdG8KKyAgQHBhcmFtIHMgICAgICBTdHJpbmcgdG8gd3JpdGUKKyAgQHBhcmFt IHNsZW4gICBTdHJpbmcgbGVuZ3RoCisgIEBmbGFncyAgICAgICAgRmxhZ3MgZm9yIC0tdGFi LCAtLXhtbCwgLS1yYXcuCisqLwordm9pZCB0ZWVfd3JpdGUoRklMRSAqZmlsZSwgY29uc3Qg Y2hhciAqcywgc2l6ZV90IHNsZW4sIGludCBmbGFncykKK3sKKyAgY29uc3QgY2hhciAqc2U7 CisKKyAgZm9yIChzZT0gcyArIHNsZW47IHMgPCBzZTsgcysrKQorICB7CisgICAgY29uc3Qg Y2hhciAqdDsKKworICAgIGlmIChmbGFncyAmIE1ZX1BSSU5UX01CKQorICAgIHsKKyAgICAg IGludCBtYmxlbiwgaTsKKyAgICAgIGlmICh1c2VfbWIoY2hhcnNldF9pbmZvKSAmJgorICAg ICAgICAgIChtYmxlbj0gbXlfaXNtYmNoYXIoY2hhcnNldF9pbmZvLCBzLCBzZSkpKQorICAg ICAgeworI2lmZGVmIF9fV0lOX18KKyAgICAgICAgaWYgKHVzZV91bmljb2RlX2FwaSAmJiBt eV93aW5faXNfY29uc29sZShmaWxlKSkKKyAgICAgICAgICBteV93aW5fY29uc29sZV93cml0 ZShjaGFyc2V0X2luZm8sIHMsIG1ibGVuKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgIGZ3 cml0ZShzLCAxLCBtYmxlbiwgZmlsZSk7CisgICAgICAgIGlmIChvcHRfb3V0ZmlsZSkKKyAg ICAgICAgICBmd3JpdGUocywgMSwgbWJsZW4sIE9VVEZJTEUpOworICAgICAgICBzKz0gbWJs ZW4gLSAxOworICAgICAgICBjb250aW51ZTsKKyNlbmRpZgorICAgICAgICBmb3IgKGk9IDA7 IGkgPCBtYmxlbjsgaSsrKQorCSAgICAgICAgdGVlX3B1dGMoc1tpXSwgZmlsZSk7CisgICAg ICAgIHMrPSBtYmxlbiAtIDE7CisJICAgICAgY29udGludWU7CisgICAgICB9CisgICAgfQor CisgICAgaWYgKChmbGFncyAmIE1ZX1BSSU5UX1hNTCkgJiYgKHQ9IGFycmF5X3ZhbHVlKHht bG1ldGEsICpzKSkpCisgICAgICB0ZWVfZnB1dHModCwgZmlsZSk7CisgICAgZWxzZSBpZiAo KGZsYWdzICYgTVlfUFJJTlRfU1BTXzApICYmICpzID09ICdcMCcpCisgICAgICB0ZWVfcHV0 YygoaW50KSAnICcsIGZpbGUpOyAgIC8vIFRoaXMgbWFrZXMgZXZlcnl0aGluZyBoYXJkCisg ICAgZWxzZSBpZiAoKGZsYWdzICYgTVlfUFJJTlRfRVNDXzApICYmICpzID09ICdcMCcpCisg ICAgICB0ZWVfZnB1dHMoIlxcMCIsIGZpbGUpOyAgIC8vIFRoaXMgbWFrZXMgZXZlcnl0aGlu ZyBoYXJkCisgICAgZWxzZSBpZiAoKGZsYWdzICYgTVlfUFJJTlRfQ1RSTCkgJiYgKnMgPT0g J1x0JykKKyAgICAgIHRlZV9mcHV0cygiXFx0IiwgZmlsZSk7ICAgICAgLy8gVGhpcyB3b3Vs ZCBkZXN0cm95IHRhYiBmb3JtYXQKKyAgICBlbHNlIGlmICgoZmxhZ3MgJiBNWV9QUklOVF9D VFJMKSAmJiAqcyA9PSAnXG4nKQorICAgICAgdGVlX2ZwdXRzKCJcXG4iLCBmaWxlKTsgICAg ICAvLyBUaGlzIHRvbworICAgIGVsc2UgaWYgKChmbGFncyAmIE1ZX1BSSU5UX0NUUkwpICYm ICpzID09ICdcXCcpCisgICAgICB0ZWVfZnB1dHMoIlxcXFwiLCBmaWxlKTsKKyAgICBlbHNl CisgICAgICB0ZWVfcHV0YygoaW50KSAqcywgZmlsZSk7CisgIH0KK30KKworCiB2b2lkIHRl ZV9mcHJpbnRmKEZJTEUgKmZpbGUsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQogewogICB2YV9s aXN0IGFyZ3M7CiAKICAgdmFfc3RhcnQoYXJncywgZm10KTsKKyNpZmRlZiBfX1dJTl9fCisg IGlmICh1c2VfdW5pY29kZV9hcGkgJiYgbXlfd2luX2lzX2NvbnNvbGUoZmlsZSkpCisgICAg bXlfd2luX2NvbnNvbGVfdmZwcmludGYoY2hhcnNldF9pbmZvLCBmbXQsIGFyZ3MpOworICBl bHNlCisjZW5kaWYKICAgKHZvaWQpIHZmcHJpbnRmKGZpbGUsIGZtdCwgYXJncyk7CiAgIHZh X2VuZChhcmdzKTsKIApAQCAtNDY2NCw2ICs0NzY2LDExIEBACiAKIHZvaWQgdGVlX2ZwdXRz KGNvbnN0IGNoYXIgKnMsIEZJTEUgKmZpbGUpCiB7CisjaWZkZWYgX19XSU5fXworICBpZiAo dXNlX3VuaWNvZGVfYXBpICYmIG15X3dpbl9pc19jb25zb2xlKGZpbGUpKQorICAgIG15X3dp bl9jb25zb2xlX2ZwdXRzKGNoYXJzZXRfaW5mbywgcyk7CisgIGVsc2UKKyNlbmRpZgogICBm cHV0cyhzLCBmaWxlKTsKICAgaWYgKG9wdF9vdXRmaWxlKQogICAgIGZwdXRzKHMsIE9VVEZJ TEUpOwpAQCAtNDY3MiwxNyArNDc3OSwxNyBAQAogCiB2b2lkIHRlZV9wdXRzKGNvbnN0IGNo YXIgKnMsIEZJTEUgKmZpbGUpCiB7Ci0gIGZwdXRzKHMsIGZpbGUpOwotICBmcHV0YygnXG4n LCBmaWxlKTsKLSAgaWYgKG9wdF9vdXRmaWxlKQotICB7Ci0gICAgZnB1dHMocywgT1VURklM RSk7Ci0gICAgZnB1dGMoJ1xuJywgT1VURklMRSk7Ci0gIH0KKyAgdGVlX2ZwdXRzKHMsIGZp bGUpOworICB0ZWVfcHV0YygnXG4nLCBmaWxlKTsKIH0KIAogdm9pZCB0ZWVfcHV0YyhpbnQg YywgRklMRSAqZmlsZSkKIHsKKyNpZmRlZiBfX1dJTl9fCisgIGlmICh1c2VfdW5pY29kZV9h cGkgJiYgbXlfd2luX2lzX2NvbnNvbGUoZmlsZSkpCisgICAgbXlfd2luX2NvbnNvbGVfcHV0 YyhjaGFyc2V0X2luZm8sIGMpOworICBlbHNlCisjZW5kaWYKICAgcHV0YyhjLCBmaWxlKTsK ICAgaWYgKG9wdF9vdXRmaWxlKQogICAgIHB1dGMoYywgT1VURklMRSk7Cgo9PT0gbW9kaWZp ZWQgZmlsZSAnY2xpZW50L215c3FsdGVzdC5jYycKLS0tIGNsaWVudC9teXNxbHRlc3QuY2MJ MjAxMS0wMS0yNiAyMDoxMzozMSArMDAwMAorKysgY2xpZW50L215c3FsdGVzdC5jYwkyMDEx LTAyLTE3IDExOjA1OjIyICswMDAwCkBAIC0zMDIsNyArMzAyLDcgQEAKICAgUV9FTkFCTEVf V0FSTklOR1MsIFFfRElTQUJMRV9XQVJOSU5HUywKICAgUV9FTkFCTEVfSU5GTywgUV9ESVNB QkxFX0lORk8sCiAgIFFfRU5BQkxFX01FVEFEQVRBLCBRX0RJU0FCTEVfTUVUQURBVEEsCi0g IFFfRVhFQywgUV9ERUxJTUlURVIsCisgIFFfRVhFQywgUV9FWEVDVywgUV9ERUxJTUlURVIs CiAgIFFfRElTQUJMRV9BQk9SVF9PTl9FUlJPUiwgUV9FTkFCTEVfQUJPUlRfT05fRVJST1Is CiAgIFFfRElTUExBWV9WRVJUSUNBTF9SRVNVTFRTLCBRX0RJU1BMQVlfSE9SSVpPTlRBTF9S RVNVTFRTLAogICBRX1FVRVJZX1ZFUlRJQ0FMLCBRX1FVRVJZX0hPUklaT05UQUwsIFFfU09S VEVEX1JFU1VMVCwKQEAgLTM3Myw2ICszNzMsNyBAQAogICAiZW5hYmxlX21ldGFkYXRhIiwK ICAgImRpc2FibGVfbWV0YWRhdGEiLAogICAiZXhlYyIsCisgICJleGVjdyIsCiAgICJkZWxp bWl0ZXIiLAogICAiZGlzYWJsZV9hYm9ydF9vbl9lcnJvciIsCiAgICJlbmFibGVfYWJvcnRf b25fZXJyb3IiLApAQCAtMjc1MCw4ICsyNzUxLDUyIEBACiAjZW5kaWYKIAogCi1GSUxFKiBt eV9wb3BlbihEWU5BTUlDX1NUUklORyAqZHNfY21kLCBjb25zdCBjaGFyICptb2RlKQorRklM RSogbXlfcG9wZW4oRFlOQU1JQ19TVFJJTkcgKmRzX2NtZCwgY29uc3QgY2hhciAqbW9kZSwK KyAgICAgICAgICAgICAgIHN0cnVjdCBzdF9jb21tYW5kICpjb21tYW5kKQogeworI2lmIF9f V0lOX18NCisgIC8qDQorICAgIC0tZXhlY3cgaXMgZm9yIHRlc3RzIGV4ZWN1dGluZyBjb21t YW5kcyBjb250YWluaW5nIG5vbi1BU0NJSSBjaGFyYWN0ZXJzLg0KKw0KKyAgICBUbyBjb3Jy ZWN0bHkgc3RhcnQgc3VjaCBhIHByb2dyYW0gb24gV2luZG93cywgd2UgbmVlZCB0byB1c2Ug dGhlICJ3aWRlIg0KKyAgICB2ZXJzaW9uIG9mIHBvcGVuLCB3aXRoIHByaW9yIHRyYW5zbGF0 aW9uIG9mIHRoZSBjb21tYW5kIGxpbmUgZnJvbQ0KKyAgICB0aGUgZmlsZSBjaGFyYWN0ZXIg c2V0IHRvIHdpZGUgc3RyaW5nLiBXZSB1c2UgdGhlIGN1cnJlbnQgdmFsdWUNCisgICAgb2Yg LS1jaGFyYWN0ZXJfc2V0IGFzIGEgZmlsZSBjaGFyY3RlciBzZXQsIHNvIGJlZm9yZSB1c2lu ZyAtLWV4ZWN3DQorICAgIG1ha2Ugc3VyZSB0byBzZXQgLS1jaGFyYWN0ZXJfc2V0IHByb3Bl cmx5Lg0KKw0KKyAgICBJZiB3ZSB1c2UgdGhlIG5vbi13aWRlIHZlcnNpb24gb2YgcG9wZW4s IFdpbmRvd3MgaW50ZXJuYWxseQ0KKyAgICBjb252ZXJ0cyBjb21tYW5kIGxpbmUgZnJvbSB0 aGUgY3VycmVudCBBTlNJIGNvZGUgcGFnZSB0byB3aWRlIHN0cmluZy4NCisgICAgSW4gY2Fz ZSB3aGVuIGNoYXJhY3RlciBzZXQgb2YgdGhlIGNvbW1hbmQgbGluZSBkb2VzIG5vdCBtYXRj aCB0aGUNCisgICAgY3VycmVudCBBTlNJIGNvZGUgcGFnZSwgbm9uLUFTQ0lJIGNoYXJhY3Rl cnMgZ2V0IGdhcmJsZWQgaW4gbW9zdCBjYXNlcy4NCisNCisgICAgT24gTGludXgsIHRoZSBj b21tYW5kIGxpbmUgcGFzc2VkIHRvIHBvcGVuKCkgaXMgY29uc2lkZXJlZA0KKyAgICBhcyBh IGJpbmFyeSBzdHJpbmcsIG5vIGFueSBpbnRlcm5hbCB0by13aWRlIGFuZCBmcm9tLXdpZGUN CisgICAgY2hhcmFjdGVyIHNldCBjb252ZXJzaW9uIGhhcHBlbnMsIHNvIHdlIGRvbid0IG5l ZWQgdG8gZG8gYW55dGhpbmcuDQorICAgIE9uIExpbnV4IC0tZXhlY3cgaXMganVzdCBhIHN5 bm9ueW0gdG8gLS1leGVjLg0KKw0KKyAgICBGb3Igc2ltcGxpY2l0eSwgYXNzdW1lIHRoYXQg IGNvbW1hbmQgbGluZSBpcyBsaW1pdGVkIHRvIDRLQg0KKyAgICAobGlrZSBpbiBjbWQuZXhl KSBhbmQgdGhhdCBtb2RlIGF0IG1vc3QgMTAgY2hhcmFjdGVycy4NCisgICovDQorICBpZiAo Y29tbWFuZC0+dHlwZSA9PSBRX0VYRUNXKQ0KKyAgew0KKyAgICB3Y2hhcl90IHdjbWRbNDA5 Nl07DQorICAgIHdjaGFyX3Qgd21vZGVbMTBdOw0KKyAgICBjb25zdCBjaGFyICpjbWQ9IGRz X2NtZC0+c3RyOw0KKyAgICB1aW50IGR1bW15X2Vycm9yczsNCisgICAgc2l6ZV90IGxlbjsN CisgICAgbGVuPSBteV9jb252ZXJ0KChjaGFyKikgd2NtZCwgc2l6ZW9mKHdjbWQpIC0gc2l6 ZW9mKHdjbWRbMF0pLA0KKyAgICAgICAgICAgICAgICAgICAgJm15X2NoYXJzZXRfdXRmMTZs ZV9iaW4sDQorICAgICAgICAgICAgICAgICAgICBkc19jbWQtPnN0ciwgc3RybGVuKGRzX2Nt ZC0+c3RyKSwgY2hhcnNldF9pbmZvLA0KKyAgICAgICAgICAgICAgICAgICAgJmR1bW15X2Vy cm9ycyk7DQorICAgIHdjbWRbbGVuIC8gc2l6ZW9mKHdjaGFyX3QpXT0gMDsNCisgICAgbGVu PSBteV9jb252ZXJ0KChjaGFyKikgd21vZGUsIHNpemVvZih3bW9kZSkgLSBzaXplb2Yod21v ZGVbMF0pLA0KKyAgICAgICAgICAgICAgICAgICAgJm15X2NoYXJzZXRfdXRmMTZsZV9iaW4s DQorICAgICAgICAgICAgICAgICAgICBtb2RlLCBzdHJsZW4obW9kZSksIGNoYXJzZXRfaW5m bywgJmR1bW15X2Vycm9ycyk7DQorICAgIHdtb2RlW2xlbiAvIHNpemVvZih3Y2hhcl90KV09 IDA7DQorICAgIHJldHVybiBfd3BvcGVuKHdjbWQsIHdtb2RlKTsKKyAgfQorI2VuZGlmIF9f V0lOX18KKwogI2lmIGRlZmluZWQgX19XSU5fXyAmJiBkZWZpbmVkIFVTRV9DWUdXSU4KICAg LyogRHVtcCB0aGUgY29tbWFuZCBpbnRvIGEgc2ggc2NyaXB0IGZpbGUgYW5kIGV4ZWN1dGUg d2l0aCBwb3BlbiAqLwogICBzdHJfdG9fZmlsZSh0bXBfc2hfbmFtZSwgZHNfY21kLT5zdHIs IGRzX2NtZC0+bGVuZ3RoKTsKQEAgLTI4ODgsNyArMjkzMyw3IEBACiAgIERCVUdfUFJJTlQo ImluZm8iLCAoIkV4ZWN1dGluZyAnJXMnIGFzICclcyciLAogICAgICAgICAgICAgICAgICAg ICAgIGNvbW1hbmQtPmZpcnN0X2FyZ3VtZW50LCBkc19jbWQuc3RyKSk7CiAKLSAgaWYgKCEo cmVzX2ZpbGU9IG15X3BvcGVuKCZkc19jbWQsICJyIikpICYmIGNvbW1hbmQtPmFib3J0X29u X2Vycm9yKQorICBpZiAoIShyZXNfZmlsZT0gbXlfcG9wZW4oJmRzX2NtZCwgInIiLCBjb21t YW5kKSkgJiYgY29tbWFuZC0+YWJvcnRfb25fZXJyb3IpCiAgIHsKICAgICBkeW5zdHJfZnJl ZSgmZHNfY21kKTsKICAgICBkaWUoInBvcGVuKFwiJXNcIiwgXCJyXCIpIGZhaWxlZCIsIGNv bW1hbmQtPmZpcnN0X2FyZ3VtZW50KTsKQEAgLTg3NjMsNiArODgwOCw3IEBACiAgICAgICAg IGRvX3NodXRkb3duX3NlcnZlcihjb21tYW5kKTsKICAgICAgICAgYnJlYWs7CiAgICAgICBj YXNlIFFfRVhFQzoKKyAgICAgIGNhc2UgUV9FWEVDVzoKIAlkb19leGVjKGNvbW1hbmQpOwog CWNvbW1hbmRfZXhlY3V0ZWQrKzsKIAlicmVhazsKCj09PSBtb2RpZmllZCBmaWxlICdpbmNs dWRlL215X3N5cy5oJwotLS0gaW5jbHVkZS9teV9zeXMuaAkyMDExLTAyLTA4IDE1OjU0OjEy ICswMDAwCisrKyBpbmNsdWRlL215X3N5cy5oCTIwMTEtMDItMTYgMTY6NDc6MTQgKzAwMDAK QEAgLTk0Nyw4ICs5NDcsMTQgQEAKIAogLyogaW1wbGVtZW50ZWQgaW4gbXlfY29uaW8uYyAq LwogY2hhciogbXlfY2dldHMoY2hhciAqc3RyaW5nLCBzaXplX3QgY2xlbiwgc2l6ZV90KiBw bGVuKTsKLQotI2VuZGlmCitteV9ib29sIG15X3dpbl9pc19jb25zb2xlKEZJTEUgKmZpbGUp OworY2hhciAqbXlfd2luX2NvbnNvbGVfcmVhZGxpbmUoQ0hBUlNFVF9JTkZPICpjcywgY2hh ciAqbWJidWYsIHNpemVfdCBtYmJ1ZnNpemUpOwordm9pZCBteV93aW5fY29uc29sZV93cml0 ZShDSEFSU0VUX0lORk8gKmNzLCBjb25zdCBjaGFyICpkYXRhLCBzaXplX3QgZGF0YWxlbik7 Cit2b2lkIG15X3dpbl9jb25zb2xlX2ZwdXRzKENIQVJTRVRfSU5GTyAqY3MsIGNvbnN0IGNo YXIgKmRhdGEpOwordm9pZCBteV93aW5fY29uc29sZV9wdXRjKENIQVJTRVRfSU5GTyAqY3Ms IGludCBjKTsKK3ZvaWQgbXlfd2luX2NvbnNvbGVfdmZwcmludGYoQ0hBUlNFVF9JTkZPICpj cywgY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFyZ3MpOworaW50IG15X3dpbl90cmFuc2xh dGVfY29tbWFuZF9saW5lX2FyZ3MoQ0hBUlNFVF9JTkZPICpjcywgaW50ICphYywgY2hhciAq Kiphdik7CisjZW5kaWYgLyogX19XSU5fXyAqLwogCiAjaW5jbHVkZSA8bXlzcWwvcHNpL3Bz aS5oPgogCgo9PT0gbW9kaWZpZWQgZmlsZSAnbXlzcWwtdGVzdC90L2dyYW50LnRlc3QnCi0t LSBteXNxbC10ZXN0L3QvZ3JhbnQudGVzdAkyMDEwLTEyLTE1IDE2OjE1OjQwICswMDAwCisr KyBteXNxbC10ZXN0L3QvZ3JhbnQudGVzdAkyMDExLTAyLTE3IDA5OjQxOjA2ICswMDAwCkBA IC0xNDAxLDkgKzE0MDEsMTAgQEAKICMKICMgQnVnIzIxNDMyIERhdGFiYXNlL1RhYmxlIG5h bWUgbGltaXRlZCB0byA2NCBieXRlcywgbm90IGNoYXJzLCBwcm9ibGVtcyB3aXRoIG11bHRp LWJ5dGUKICMKKy0tY2hhcmFjdGVyX3NldCB1dGY4CiBzZXQgbmFtZXMgdXRmODsKIGdyYW50 IHNlbGVjdCBvbiB0ZXN0LiogdG8g0Y7Qt9C10YBf0Y7Qt9C10YBAbG9jYWxob3N0OwotLS1l eGVjICRNWVNRTCAtLWRlZmF1bHQtY2hhcmFjdGVyLXNldD11dGY4IC0tdXNlcj3RjtC30LXR gF/RjtC30LXRgCAtZSAic2VsZWN0IHVzZXIoKSIKKy0tZXhlY3cgJE1ZU1FMIC0tZGVmYXVs dC1jaGFyYWN0ZXItc2V0PXV0ZjggLS11c2VyPdGO0LfQtdGAX9GO0LfQtdGAIC1lICJzZWxl Y3QgdXNlcigpIgogcmV2b2tlIGFsbCBvbiB0ZXN0LiogZnJvbSDRjtC30LXRgF/RjtC30LXR gEBsb2NhbGhvc3Q7CiBkcm9wIHVzZXIg0Y7Qt9C10YBf0Y7Qt9C10YBAbG9jYWxob3N0Owog LS1lcnJvciBFUl9XUk9OR19TVFJJTkdfTEVOR1RICgo9PT0gbW9kaWZpZWQgZmlsZSAnbXlz cWwtdGVzdC90L215c3FsLnRlc3QnCi0tLSBteXNxbC10ZXN0L3QvbXlzcWwudGVzdAkyMDEx LTAyLTA1IDA1OjA2OjI5ICswMDAwCisrKyBteXNxbC10ZXN0L3QvbXlzcWwudGVzdAkyMDEx LTAyLTE3IDExOjA5OjE2ICswMDAwCkBAIC01MSwxMyArNTEsMTQgQEAKICMKICMgQnVnIzE3 OTM5IFdyb25nIHRhYmxlIGZvcm1hdCB3aGVuIHVzaW5nIFVURjggc3RyaW5ncwogIwotLS1l eGVjICRNWVNRTCAtLWRlZmF1bHQtY2hhcmFjdGVyLXNldD11dGY4IC0tdGFibGUgLWUgIlNF TEVDVCAnSm9obiBEb2UnIGFzICdfX3Rhw7Fnw6ggw5HDo23DqSciIDI+JjEKLS0tZXhlYyAk TVlTUUwgLS1kZWZhdWx0LWNoYXJhY3Rlci1zZXQ9dXRmOCAtLXRhYmxlIC1lICJTRUxFQ1Qg J19fdGHDsWfDqCDDkcOjbcOpJyBhcyAnSm9obiBEb2UnIiAyPiYxCistLWNoYXJhY3Rlcl9z ZXQgdXRmOAorLS1leGVjdyAkTVlTUUwgLS1kZWZhdWx0LWNoYXJhY3Rlci1zZXQ9dXRmOCAt LXRhYmxlIC1lICJTRUxFQ1QgJ0pvaG4gRG9lJyBhcyAnX190YcOxZ8OoIMORw6Ntw6knIiAy PiYxCistLWV4ZWN3ICRNWVNRTCAtLWRlZmF1bHQtY2hhcmFjdGVyLXNldD11dGY4IC0tdGFi bGUgLWUgIlNFTEVDVCAnX190YcOxZ8OoIMORw6Ntw6knIGFzICdKb2huIERvZSciIDI+JjEK IAogIwogIyBCdWcjMTgyNjUgLS0gbXlzcWwgY2xpZW50OiBObyBsb25nZXIgcmlnaHQtanVz dGlmaWVzIG51bWVyaWMgY29sdW1ucwogIwotLS1leGVjICRNWVNRTCAtdCAtLWRlZmF1bHQt Y2hhcmFjdGVyLXNldCB1dGY4IHRlc3QgLWUgImNyZWF0ZSB0YWJsZSB0MSAoaSBpbnQsIGog aW50LCBrIGNoYXIoMjUpIGNoYXJzZXQgdXRmOCk7IGluc2VydCBpbnRvIHQxIChpKSB2YWx1 ZXMgKDEpOyBpbnNlcnQgaW50byB0MSAoaykgdmFsdWVzICgnPC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tPicpOyBpbnNlcnQgaW50byB0MSAoaykgdmFsdWVzICgnPC0tLS0tJyk7IGluc2Vy dCBpbnRvIHQxIChrKSB2YWx1ZXMgKCfOpM63IM6zzrvPjs+Dz4POsScpOyBpbnNlcnQgaW50 byB0MSAoaykgdmFsdWVzICgn4ZuW4Zq0IOGat+GbluGbjycpOyBzZWxlY3QgKiBmcm9tIHQx OyBEUk9QIFRBQkxFIHQxOyIKKy0tZXhlY3cgJE1ZU1FMIC10IC0tZGVmYXVsdC1jaGFyYWN0 ZXItc2V0IHV0ZjggdGVzdCAtZSAiY3JlYXRlIHRhYmxlIHQxIChpIGludCwgaiBpbnQsIGsg Y2hhcigyNSkgY2hhcnNldCB1dGY4KTsgaW5zZXJ0IGludG8gdDEgKGkpIHZhbHVlcyAoMSk7 IGluc2VydCBpbnRvIHQxIChrKSB2YWx1ZXMgKCc8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+ Jyk7IGluc2VydCBpbnRvIHQxIChrKSB2YWx1ZXMgKCc8LS0tLS0nKTsgaW5zZXJ0IGludG8g dDEgKGspIHZhbHVlcyAoJ86kzrcgzrPOu8+Oz4PPg86xJyk7IGluc2VydCBpbnRvIHQxIChr KSB2YWx1ZXMgKCfhm5bhmrQg4Zq34ZuW4ZuPJyk7IHNlbGVjdCAqIGZyb20gdDE7IERST1Ag VEFCTEUgdDE7IgogCiAjCiAjICJERVNDUklCRSIgY29tbWFuZHMgbWF5IHJldHVybiBzdHJh bmdlIE5VTExuZXNzIGZsYWdzLgoKPT09IG1vZGlmaWVkIGZpbGUgJ215c3FsLXRlc3QvdC9t eXNxbF9jcDkzMi50ZXN0JwotLS0gbXlzcWwtdGVzdC90L215c3FsX2NwOTMyLnRlc3QJMjAw Ny0wMi0yMSAxNjo1MDo0OCArMDAwMAorKysgbXlzcWwtdGVzdC90L215c3FsX2NwOTMyLnRl c3QJMjAxMS0wMi0xNyAxMToxMzoxNiArMDAwMApAQCAtMTUsOCArMTUsOSBAQAogLS1leGVj ICRNWVNRTCAtLWRlZmF1bHQtY2hhcmFjdGVyLXNldD1jcDkzMiB0ZXN0IC1lICJjaGFyc2V0 IHV0Zjg7IgogCiAjIGl0cyB1c2FnZSB0byBzd2l0Y2ggaW50ZXJuYWxseSBpbiBteXNxbCB0 byByZXF1ZXN0ZWQgY2hhcnNldAotLS1leGVjICRNWVNRTCAtLWRlZmF1bHQtY2hhcmFjdGVy LXNldD11dGY4IHRlc3QgLWUgImNoYXJzZXQgY3A5MzI7IHNlbGVjdCAng1wnOyBjcmVhdGUg dGFibGUgdDEgKGNfY3A5MzIgVEVYVCBDSEFSQUNURVIgU0VUIGNwOTMyKTsgaW5zZXJ0IGlu dG8gdDEgdmFsdWVzKCeDXCcpOyBzZWxlY3QgKiBmcm9tIHQxOyAgZHJvcCB0YWJsZSB0MTsi Ci0tLWV4ZWMgJE1ZU1FMIC0tZGVmYXVsdC1jaGFyYWN0ZXItc2V0PXV0ZjggdGVzdCAtZSAi Y2hhcnNldCBjcDkzMjsgc2VsZWN0ICeDXCciCi0tLWV4ZWMgJE1ZU1FMIC0tZGVmYXVsdC1j aGFyYWN0ZXItc2V0PXV0ZjggdGVzdCAtZSAiLypjaGFyc2V0IGNwOTMyICovOyBzZXQgY2hh cmFjdGVyX3NldF9jbGllbnQ9IGNwOTMyOyBzZWxlY3QgJ4NcJyIKLS0tZXhlYyAkTVlTUUwg LS1kZWZhdWx0LWNoYXJhY3Rlci1zZXQ9dXRmOCB0ZXN0IC1lICIvKiFcQyBjcDkzMiAqLzsg c2V0IGNoYXJhY3Rlcl9zZXRfY2xpZW50PSBjcDkzMjsgc2VsZWN0ICeDXCciCistLWNoYXJh Y3Rlcl9zZXQgbGF0aW4xCistLWV4ZWN3ICRNWVNRTCAtLWRlZmF1bHQtY2hhcmFjdGVyLXNl dD1sYXRpbjEgdGVzdCAtZSAiY2hhcnNldCBjcDkzMjsgc2VsZWN0ICeDXCc7IGNyZWF0ZSB0 YWJsZSB0MSAoY19jcDkzMiBURVhUIENIQVJBQ1RFUiBTRVQgY3A5MzIpOyBpbnNlcnQgaW50 byB0MSB2YWx1ZXMoJ4NcJyk7IHNlbGVjdCAqIGZyb20gdDE7ICBkcm9wIHRhYmxlIHQxOyIK Ky0tZXhlY3cgJE1ZU1FMIC0tZGVmYXVsdC1jaGFyYWN0ZXItc2V0PWxhdGluMSB0ZXN0IC1l ICJjaGFyc2V0IGNwOTMyOyBzZWxlY3QgJ4NcJyIKKy0tZXhlY3cgJE1ZU1FMIC0tZGVmYXVs dC1jaGFyYWN0ZXItc2V0PWxhdGluMSB0ZXN0IC1lICIvKmNoYXJzZXQgY3A5MzIgKi87IHNl dCBuYW1lcyBjcDkzMiwgY2hhcmFjdGVyX3NldF9yZXN1bHRzPXV0Zjg7IHNlbGVjdCAng1wn IgorLS1leGVjdyAkTVlTUUwgLS1kZWZhdWx0LWNoYXJhY3Rlci1zZXQ9bGF0aW4xIHRlc3Qg LWUgIi8qIVxDIGNwOTMyICovOyBzZXQgY2hhcmFjdGVyX3NldF9jbGllbnQ9IGNwOTMyOyBz ZWxlY3QgJ4NcJyIKIAoKPT09IG1vZGlmaWVkIGZpbGUgJ215c3FsLXRlc3QvdC9teXNxbGJp bmxvZy1jcDkzMi50ZXN0JwotLS0gbXlzcWwtdGVzdC90L215c3FsYmlubG9nLWNwOTMyLnRl c3QJMjAwOS0wOS0wNyAwNTo0Mjo1NCArMDAwMAorKysgbXlzcWwtdGVzdC90L215c3FsYmlu bG9nLWNwOTMyLnRlc3QJMjAxMS0wMi0xNyAwOToxNjozNCArMDAwMApAQCAtMTAsOCArMTAs MTAgQEAKICMgQnVnIzE2MjE3IChteXNxbCBjbGllbnQgZGlkIG5vdCBrbm93IGhvdyBub3Qg c3dpdGNoIGl0cyBpbnRlcm5hbCBjaGFyc2V0KQogY3JlYXRlIHRhYmxlIHQzIChmIHRleHQg Y2hhcmFjdGVyIHNldCB1dGY4KTsKIGNyZWF0ZSB0YWJsZSB0NCAoZiB0ZXh0IGNoYXJhY3Rl ciBzZXQgY3A5MzIpOyAKLS0tZXhlYyAkTVlTUUwgLS1kZWZhdWx0LWNoYXJhY3Rlci1zZXQ9 dXRmOCB0ZXN0IC1lICJpbnNlcnQgaW50byB0MyB2YWx1ZXMoX3V0Zjgn44K9JykiCi0tLWV4 ZWMgJE1ZU1FMIC0tZGVmYXVsdC1jaGFyYWN0ZXItc2V0PWNwOTMyIHRlc3QgLWUgImluc2Vy dCBpbnRvIHQ0IHZhbHVlcyhfY3A5MzIng1wnKTsiCistLWNoYXJhY3Rlcl9zZXQgdXRmOAor LS1leGVjdyAkTVlTUUwgLS1kZWZhdWx0LWNoYXJhY3Rlci1zZXQ9dXRmOCB0ZXN0IC1lICJp bnNlcnQgaW50byB0MyB2YWx1ZXMoX3V0Zjgn44K9JykiCistLWNoYXJhY3Rlcl9zZXQgY3A5 MzIKKy0tZXhlY3cgJE1ZU1FMIC0tZGVmYXVsdC1jaGFyYWN0ZXItc2V0PWNwOTMyIHRlc3Qg LWUgImluc2VydCBpbnRvIHQ0IHZhbHVlcyhfY3A5MzIng1wnKTsiCiBmbHVzaCBsb2dzOwog cmVuYW1lIHRhYmxlIHQzIHRvIHQwMywgdDQgdG8gdDA0OwogbGV0ICRNWVNRTERfREFUQURJ Uj0gYHNlbGVjdCBAQGRhdGFkaXJgOwoKPT09IG1vZGlmaWVkIGZpbGUgJ215c3lzL215X2Nv bmlvLmMnCi0tLSBteXN5cy9teV9jb25pby5jCTIwMDktMDItMTMgMTY6NDE6NDcgKzAwMDAK KysrIG15c3lzL215X2NvbmlvLmMJMjAxMS0wMi0xNiAxNjo0NzoxNCArMDAwMApAQCAtMjE5 LDQgKzIxOSwyNjEgQEAKICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorCisvKiBXaW5kb3dzIGNv bnNvbGUgaGFuZGxpbmcgKi8KKworLyogTWF4aW11bSBsaW5lIGxlbmd0aCBvbiBXaW5kb3dz IGNvbnNvbGUgKi8KKyNkZWZpbmUgTUFYX0NPTlNPTEVfTElORV9TSVpFIDY1NTM1CisKKy8q KgorICBEZXRlcm1pbmUgaWYgYSBmaWxlIGlzIGEgd2luZG93cyBjb25zb2xlCisKKyAgQHBh cmFtIGZpbGUgSW5wdXQgc3RyZWFtCisKKyAgQHJldHVybgorICBAcmV0dmFsICAwIGlmIGZp bGUgaXMgbm90IFdpbmRvd3MgY29uc29sZQorICBAcmV0dmFsICAxIGlmIGZpbGUgaXMgV2lu ZG93cyBjb25zb2xlCisqLworbXlfYm9vbAorbXlfd2luX2lzX2NvbnNvbGUoRklMRSAqZmls ZSkKK3sKKyAgRFdPUkQgbW9kZTsKKyAgaWYgKEdldENvbnNvbGVNb2RlKChIQU5ETEUpIF9n ZXRfb3NmaGFuZGxlKF9maWxlbm8oZmlsZSkpLCAmbW9kZSkpCisgICAgcmV0dXJuIDE7Cisg IHJldHVybiAwOworfQorCisKKy8qKgorICBSZWFkIGxpbmUgZnJvbSBXaW5kb3dzIGNvbnNv bGUgdXNpbmcgVW5pY29kZSBBUEkKKyAgYW5kIHRyYW5zbGF0ZSBpbnB1dCB0byBzZXNzaW9u IGNoYXJhY3RlciBzZXQuCisgIE5vdGUsIGFzIFdpbmRvd3MgQVBJIGJyZWFrcyBzdXBwbGVt ZW50YXJ5IGNoYXJhY3RlcnMKKyAgaW50byB0byB3Y2hhcl90IHBhaXJzLCB3ZSBjYW5ub3Qg cmVhZCBhbmQgY29udmVydCBpbmRpdmlkdWFsCisgIHdjaGFyX3QgdmFsdWVzIHNlcGFyYXRl bHkuIFNvIGxldCdzIHVzZSBhIGJ1ZmZlciBmb3IKKyAgVW5pY29kZSBjb25zb2xlIGlucHV0 LCBhbmQgdGhlbiBjb252ZXJ0IGl0IHRvICJjcyIgaW4gYSBzaW5nbGUgc2hvdC4KKyAgU3Ry aW5nIGlzIHRlcm1pbmF0ZWQgd2l0aCAnXDAnIGNoYXJhY3Rlci4KKworICBAcGFyYW0gY3Mg ICAgICAgICBDaGFyYWN0ZXIgc3RyaW5nIHRvIGNvbnZlcnQgdG8uCisgIEBwYXJhbSBtYmJ1 ZiAgICAgIFdyaXRlIGlucHV0IGRhdGEgaGVyZS4KKyAgQHBhcmFtIG1iYnVmc2l6ZSAgTnVt YmVyIG9mIGJ5dGVzIGF2YWlsYWJsZSBpbiBtYmJ1Zi4KKworICBAcmVydmFsICAgICAgICAg ICBQb2ludGVyIHRvIG1iYnVmLCBvciBOVUxMIG9uIEkvMCBlcnJvci4KKyovCitjaGFyICoK K215X3dpbl9jb25zb2xlX3JlYWRsaW5lKENIQVJTRVRfSU5GTyAqY3MsIGNoYXIgKm1iYnVm LCBzaXplX3QgbWJidWZzaXplKQoreworICB1aW50IGR1bW15X2Vycm9yczsKKyAgc3RhdGlj IHdjaGFyX3QgdTE2YnVmW01BWF9DT05TT0xFX0xJTkVfU0laRSArIDFdOworICBzaXplX3Qg cG9zLCBtYmxlbjsKKyAgRFdPUkQgY29uc29sZV9tb2RlOworICBIQU5ETEUgY29uc29sZT0g R2V0U3RkSGFuZGxlKFNURF9JTlBVVF9IQU5ETEUpOworCisgIERCVUdfQVNTRVJUKG1iYnVm c2l6ZSA+IDApOyAvKiBOZWVkIHNwYWNlIGZvciBhdCBsZWFzdCB0cmFpbGluZyAnXDAnICov CisgIEdldENvbnNvbGVNb2RlKGNvbnNvbGUsICZjb25zb2xlX21vZGUpOworICBTZXRDb25z b2xlTW9kZShjb25zb2xlLCBFTkFCTEVfTElORV9JTlBVVCB8CisJICAgICAgICAgICAgICAg ICAgICAgICAgRU5BQkxFX1BST0NFU1NFRF9JTlBVVCB8IEVOQUJMRV9FQ0hPX0lOUFVUKTsK KyAgZm9yKHBvcz0gMDsgOyApCisgIHsKKyAgICBEV09SRCBuY2hhcnM7CisgICAgQk9PTCBv az0gUmVhZENvbnNvbGVXKGNvbnNvbGUsICZ1MTZidWZbcG9zXSwgMSwgJm5jaGFycywgTlVM TCk7CisgICAgaWYgKCFvayB8fCBuY2hhcnMgPT0gMCkKKyAgICB7CisgICAgICBTZXRDb25z b2xlTW9kZShjb25zb2xlLCBjb25zb2xlX21vZGUpOworICAgICAgcmV0dXJuIE5VTEw7Cisg ICAgfQorICAgIGlmICh1MTZidWZbcG9zXSA9PSBMJ1xyJykKKyAgICAgIGNvbnRpbnVlOwor ICAgIGlmIChwb3MgPT0gTUFYX0NPTlNPTEVfTElORV9TSVpFIHx8IHUxNmJ1Zltwb3NdID09 IEwnXG4nKQorICAgICAgYnJlYWs7CisgICAgcG9zKys7CisgIH0KKyAgU2V0Q29uc29sZU1v ZGUoY29uc29sZSwgY29uc29sZV9tb2RlKTsKKyAgLyogQ29udmVydCBVbmljb2RlIHRvIHNl c3Npb24gY2hhcmFjdGVyIHNldCAqLworICBtYmxlbj0gbXlfY29udmVydChtYmJ1ZiwgbWJi dWZzaXplIC0gMSwgY3MsCisgICAgICAgICAgICAgICAgICAgIChjb25zdCBjaGFyICopIHUx NmJ1ZiwgcG9zICogc2l6ZW9mKHdjaGFyX3QpLAorCSAgICAgICAgICAgICAgICAgICAmbXlf Y2hhcnNldF91dGYxNmxlX2JpbiwgJmR1bW15X2Vycm9ycyk7CisgIERCVUdfQVNTRVJUKG1i bGVuIDwgbWJidWZzaXplKTsgLyogU2FmZXR5ICovCisgIG1iYnVmW21ibGVuXT0gMDsKKyAg cmV0dXJuIG1iYnVmOworfQorCisKKy8qKgorICBUcmFuc2xhdGUgY2xpZW50IGNoYXJzZXQg dG8gV2luZG93cyB3Y2hhcnMgZm9yIGNvbnNvbGUgSS9PLgorICBVbmxpa2UgY29weV9hbmRf Y29udmVydCgpLCBpbiBjYXNlIG9mIGEgd3JvbmcgbXVsdGktYnl0ZSBzZXF1ZW5jZQorICB3 ZSBkb24ndCBwcmludCAnPycgY2hhcmFjdGVyLCB3ZSBmYWxsYmFjayB0byBJU08tODg1OS0x IGluc3RlYWQuCisgIFRoaXMgZ2l2ZXMgYSBiZXR0ZXIgaWRlYSBob3cgYmluYXJ5IGRhdGEg KGUuZy4gQkxPQikgbG9vayBsaWtlLgorCisgIEBwYXJhbSBjcyAgICAgICAgICAgQ2hhcmFj dGVyIHNldCBvZiB0aGUgaW5wdXQgc3RyaW5nCisgIEBwYXJhbSBmcm9tICAgICAgICAgSW5w dXQgc3RyaW5nCisgIEBwYXJhbSBmcm9tX2xlbmd0aCAgTGVuZ3RoIG9mIHRoZSBpbnB1dCBz dHJpbmcKKyAgQHBhcmFtIHRvW09VVF0gICAgICBXcml0ZSBVbmljb2RlIGRhdGEgaGVyZQor ICBAcGFyYW0gdG9fY2hhcnMgICAgIE51bWJlciBvZiBjaGFyYWN0ZXJzIGF2YWlsYWJsZSBp biAidG8iCisqLworc3RhdGljIHNpemVfdAorbXlfbWJzdG91MTZzKENIQVJTRVRfSU5GTyAq Y3MsIGNvbnN0IHVjaGFyICogZnJvbSwgc2l6ZV90IGZyb21fbGVuZ3RoLAorICAgICAgICAg ICAgIHdjaGFyX3QgKnRvLCBzaXplX3QgdG9fY2hhcnMpCit7CisgIENIQVJTRVRfSU5GTyAq dG9fY3M9ICZteV9jaGFyc2V0X3V0ZjE2bGVfYmluOworICBjb25zdCB1Y2hhciAqZnJvbV9l bmQ9IGZyb20gKyBmcm9tX2xlbmd0aDsKKyAgd2NoYXJfdCAqdG9fb3JpZz0gdG8sICp0b19l bmQ9IHRvICsgdG9fY2hhcnM7CisgIG15X2NoYXJzZXRfY29udl9tYl93YyBtYl93Yz0gY3Mt PmNzZXQtPm1iX3djOworICBteV9jaGFyc2V0X2NvbnZfd2NfbWIgd2NfbWI9IHRvX2NzLT5j c2V0LT53Y19tYjsKKyAgd2hpbGUgKGZyb20gPCBmcm9tX2VuZCkKKyAgeworICAgIGludCBj bnZyZXM7CisgICAgbXlfd2NfdCB3YzsKKyAgICBpZiAoKGNudnJlcz0gKCptYl93YykoY3Ms ICZ3YywgZnJvbSwgZnJvbV9lbmQpKSA+IDApCisgICAgeworICAgICAgaWYgKCF3YykKKyAg ICAgICAgYnJlYWs7CisgICAgICBmcm9tKz0gY252cmVzOworICAgIH0KKyAgICBlbHNlIGlm IChjbnZyZXMgPT0gTVlfQ1NfSUxTRVEpCisgICAgeworICAgICAgd2M9IChteV93Y190KSAo dWNoYXIpICpmcm9tOyAvKiBGYWxsYmFjayB0byBJU08tODg1OS0xICovCisgICAgICBmcm9t Kz0gMTsKKyAgICB9CisgICAgZWxzZSBpZiAoY252cmVzID4gTVlfQ1NfVE9PU01BTEwpCisg ICAgeworICAgICAgLyoKKyAgICAgICAgQSBjb3JyZWN0IG11bHRpYnl0ZSBzZXF1ZW5jZSBk ZXRlY3RlZAorICAgICAgICBCdXQgaXQgZG9lc24ndCBoYXZlIFVuaWNvZGUgbWFwcGluZy4g CisgICAgICAqLworICAgICAgZnJvbSs9ICgtY252cmVzKTsKKyAgICAgIHdjPSAnPyc7Cisg ICAgfQorICAgIGVsc2UgLyogSW5jb21wbGV0ZSBjaGFyYWN0ZXIgKi8KKyAgICB7CisgICAg ICB3Yz0gKG15X3djX3QpICh1Y2hhcikgKmZyb207IC8qIEZhbGxiYWNrIHRvIElTTy04ODU5 LTEgKi8KKyAgICAgIGZyb20rPSAxOworICAgIH0KK291dHA6CisgICAgaWYgKChjbnZyZXM9 ICgqd2NfbWIpKHRvX2NzLCB3YywgKHVjaGFyKikgdG8sICh1Y2hhciopIHRvX2VuZCkpID4g MCkKKyAgICB7CisgICAgICAvKiBXZSBjYW4gbmV2ZXIgY29udmVydCBvbmx5IGEgcGFydCBv ZiB3Y2hhcl90ICovCisgICAgICBEQlVHX0FTU0VSVCgoY252cmVzICUgc2l6ZW9mKHdjaGFy X3QpKSA9PSAwKTsKKyAgICAgIC8qIGNudnJlcyByZXR1cm5zIG51bW5lciBvZiBieXRlcywg Y29udmVydCB0byBudW1iZXIgb2Ygd2NoYXJfdCdzICovCisgICAgICB0bys9IGNudnJlcyAv IHNpemVvZih3Y2hhcl90KTsKKyAgICB9CisgICAgZWxzZSBpZiAoY252cmVzID09IE1ZX0NT X0lMVU5JICYmIHdjICE9ICc/JykKKyAgICB7CisgICAgICB3Yz0gJz8nOworICAgICAgZ290 byBvdXRwOworICAgIH0KKyAgICBlbHNlCisgICAgICBicmVhazsgLyogTm90IGVub3VnaCBz cGFjZSAqLworICB9CisgIHJldHVybiB0byAtIHRvX29yaWc7Cit9CisKKworLyoqCisgIFdy aXRlIGEgc3RyaW5nIGluIHRoZSBnaXZlbiBjaGFyYWN0ZXIgc2V0IHRvIFdpbmRvd3MgY29u c29sZS4gCisgIEFzIFdpbmRvdyBicmVha3Mgc3VwcGxlbWVudGFyeSBjaGFyYWN0ZXJzIGlu dG8gdHdvIHBhcnRzLAorICB3ZSBjYW5ub3QgdXNlIGEgc2ltcGxlIGxvb3Agc2VuZGluZyB0 aGUgcmVzdWx0IG9mCisgIGNzLT5jc2V0LT5tYl93YygpIHRvIGNvbnNvbGUuCisgIFNvIHdl IGNvbnZlcnRzIHN0cmluZyBmcm9tIGNsaWVudCBjaGFyc2V0IHRvIGFuIGFycmF5IG9mIHdj aGFyX3QsCisgIHRoZW4gd3JpdGUgdGhlIGFycmF5IHRvIGNvbnNvbGUgaW4gYSBzaW5nbGUg c2hvdC4KKworICBAcGFyYW0gY3MgICAgICAgQ2hhcmFjdGVyIHNldCBvZiB0aGUgc3RyaW5n CisgIEBwYXJhbSBkYXRhICAgICBTdHJpbmcgdG8gcHJpbnQKKyAgQHBhcmFtIGRhdGFsZW4g IExlbmd0aCBvZiBpbnB1dCBzdHJpbmcgaW4gYnl0ZXMKKyovCit2b2lkCitteV93aW5fY29u c29sZV93cml0ZShDSEFSU0VUX0lORk8gKmNzLCBjb25zdCBjaGFyICpkYXRhLCBzaXplX3Qg ZGF0YWxlbikKK3sKKyAgc3RhdGljIHdjaGFyX3QgdTE2YnVmW01BWF9DT05TT0xFX0xJTkVf U0laRSArIDFdOworICBzaXplX3QgbmNoYXJzPSBteV9tYnN0b3UxNnMoY3MsIChjb25zdCB1 Y2hhciopIGRhdGEsIGRhdGFsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1 MTZidWYsIHNpemVvZih1MTZidWYpKTsKKyAgRFdPUkQgbndyaXR0ZW47CisgIFdyaXRlQ29u c29sZVcoR2V0U3RkSGFuZGxlKFNURF9PVVRQVVRfSEFORExFKSwKKyAgICAgICAgICAgICAg ICB1MTZidWYsIChEV09SRCluY2hhcnMsICZud3JpdHRlbiwgTlVMTCk7Cit9CisKKworLyoq CisgIFdyaXRlIGEgc2luZ2xlLWJ5dGUgY2hhcmFjdGVyIHRvIGNvbnNvbGUuCisgIE5vdGU6 IG9uZSBzaG91bGQgbm90IHNlbmQgcGFydHMgb2YgYSBzaW5nbGUgbXVsdGktYnl0ZSBjaGFy YWN0ZXJzCisgIGluIHNlcGFyYXRlIGNvbnNlcXVlbnQgbXlfd2luX2NvbnNvbGVfcHV0Yygp IGNhbGxzLgorICBGb3IgbXVsdGktYnl0ZSBjaGFyYWN0ZXJzIHVzZSBteV93aW5fY29sc29s ZV93cml0ZSgpIGluc3RlYWQuCisKKyAgQHBhcmFtIGNzICBDaGFyYWN0ZXIgc2V0IG9mIHRo ZSBpbnB1dCBjaGFyYWN0ZXIKKyAgQHBhcmFtIGMgICBDaGFyYWN0ZXIgKHNpbmdsZSBieXRl KQorKi8KK3ZvaWQKK215X3dpbl9jb25zb2xlX3B1dGMoQ0hBUlNFVF9JTkZPICpjcywgaW50 IGMpCit7CisgIGNoYXIgY2g9IChjaGFyKSBjOworICBteV93aW5fY29uc29sZV93cml0ZShj cywgJmNoLCAxKTsKK30KKworCisvKioKKyAgV3JpdGUgYSAwLXRlcm1pbmF0ZWQgc3RyaW5n IHRvIFdpbmRvd3MgY29uc29sZS4KKworICBAcGFyYW0gY3MgICAgQ2hhcmFjdGVyIHNldCBv ZiB0aGUgc3RyaW5nIHRvIHByaW50CisgIEBwYXJhbSBkYXRhICBTdHJpbmcgdG8gcHJpbnQK KyovCit2b2lkCitteV93aW5fY29uc29sZV9mcHV0cyhDSEFSU0VUX0lORk8gKmNzLCBjb25z dCBjaGFyICpkYXRhKQoreworICBteV93aW5fY29uc29sZV93cml0ZShjcywgZGF0YSwgc3Ry bGVuKGRhdGEpKTsKK30KKworCisvKgorICBIYW5kbGUgZm9ybWF0dGVkIG91dHB1dCBvbiB0 aGUgV2luZG93cyBjb25zb2xlLgorKi8KK3ZvaWQKK215X3dpbl9jb25zb2xlX3ZmcHJpbnRm KENIQVJTRVRfSU5GTyAqY3MsIGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcmdzKQorewor ICBzdGF0aWMgY2hhciBidWZmW01BWF9DT05TT0xFX0xJTkVfU0laRSArIDFdOworICBzaXpl X3QgbGVuPSB2c25wcmludGYoYnVmZiwgc2l6ZW9mKGJ1ZmYpIC0gMSwgZm10LCBhcmdzKTsK KyAgbXlfd2luX2NvbnNvbGVfd3JpdGUoY3MsIGJ1ZmYsIGxlbik7Cit9CisKKworI2luY2x1 ZGUgPHNoZWxsYXBpLmg+CisKKy8qKgorICBUcmFuc2xhdGUgVW5pY29kZSBjb21tYW5kIGxp bmUgcGFyYW1ldGVycyB0byB0aGUgZ2l2ZW4gY2hhcmFjdGVyIHNldAorICAoVHlwaWNhbGx5 IHRvIHV0ZjhtYjQpLgorICBUcmFuc2xhdGVkIHBhcmFtZXRlcnMgYXJlIGFsbG9jYXRlZCB1 c2luZyBteV9vbmNlX2FsbG9jKCkuCisKKyAgQHBhcmFtICAgICAgdG9jcyAgICBDaGFyYWN0 ZXIgc2V0IHRvIGNvbnZlcnQgcGFyYW1ldGVycyB0by4KKyAgQHBhcmFtW09VVF0gYXJnYyAg ICBXcml0ZSBudW1iZXIgb2YgcGFyYW1ldGVycyBoZXJlCisgIEBwYXJhbVtPVVRdIGFyZ3Yg ICAgV3JpdGUgcG9pbnRlciB0byBhbGxvY2F0ZWQgcGFyYW1ldGVycyBoZXJlLgorKi8KK2lu dAorbXlfd2luX3RyYW5zbGF0ZV9jb21tYW5kX2xpbmVfYXJncyhDSEFSU0VUX0lORk8gKmNz LCBpbnQgKmFyZ2MsIGNoYXIgKioqYXJndikKK3sKKyAgaW50IGksIGFjOworICBjaGFyICoq YXY7CisgIHdjaGFyX3QgKmNvbW1hbmRfbGluZT0gR2V0Q29tbWFuZExpbmVXKCk7CisgIHdj aGFyX3QgKip3YXJncz0gQ29tbWFuZExpbmVUb0FyZ3ZXKGNvbW1hbmRfbGluZSwgJmFjKTsK KyAgc2l6ZV90IG5ieXRlcz0gKGFjICsgMSkgKiBzaXplb2YoY2hhciopOworCisgIC8qIEFs bG9jYXRlIG5ldyBjb21tYW5kIGxpbmUgcGFyYW1ldGVyICovCisgIGF2PSAoY2hhcioqKSBt eV9vbmNlX2FsbG9jKG5ieXRlcywgTVlGKE1ZX1pFUk9GSUxMKSk7CisKKyAgZm9yKGk9IDA7 IGkgPCAqYXJnYzsgaSsrKQorICB7CisgICAgdWludCBkdW1teV9lcnJvcnM7CisgICAgc2l6 ZV90IGFyZ19sZW49IHdjc2xlbih3YXJnc1tpXSk7CisgICAgc2l6ZV90IGxlbiwgYWxsb2Nl ZF9sZW49IGFyZ19sZW4gKiBjcy0+bWJtYXhsZW4gKyAxOworICAgIGF2W2ldPSAoY2hhciAq KSBteV9vbmNlX2FsbG9jKGFsbG9jZWRfbGVuLCBNWUYoMCkpOworICAgIGxlbj0gbXlfY29u dmVydChhdltpXSwgYWxsb2NlZF9sZW4sIGNzLAorICAgICAgICAgICAgICAgICAgICAoY29u c3QgY2hhciAqKSB3YXJnc1tpXSwgYXJnX2xlbiAqIHNpemVvZih3Y2hhcl90KSwKKyAgICAg ICAgICAgICAgICAgICAgJm15X2NoYXJzZXRfdXRmMTZsZV9iaW4sICZkdW1teV9lcnJvcnMp OworICAgIERCVUdfQVNTRVJUKGxlbiA8IGFsbG9jZWRfbGVuKTsKKyAgICBhdltpXVtsZW5d PSAnXDAnOworICB9CisgICphcmd2PSBhdjsKKyAgKmFyZ2M9IGFjOworICAvKiBDbGVhbnVw IG9uIGV4aXQgKi8KKyAgTG9jYWxGcmVlKChITE9DQUwpIHdhcmdzKTsKKyAgcmV0dXJuIDA7 Cit9CisKICNlbmRpZiAvKiBfX1dJTl9fICovCgo9PT0gbW9kaWZpZWQgZmlsZSAnc3FsLWNv bW1vbi9jbGllbnQuYycKLS0tIHNxbC1jb21tb24vY2xpZW50LmMJMjAxMS0wMS0zMSAxNTo1 NTo1OCArMDAwMAorKysgc3FsLWNvbW1vbi9jbGllbnQuYwkyMDExLTAyLTE2IDE2OjQ3OjE0 ICswMDAwCkBAIC00MjQ2LDExICs0MjQ2LDI1IEBACiAgIGlmIChteXNxbC0+b3B0aW9ucy5j aGFyc2V0X2RpcikKICAgICBjaGFyc2V0c19kaXI9IG15c3FsLT5vcHRpb25zLmNoYXJzZXRf ZGlyOwogCisgIGlmICghbXlzcWwtPm5ldC52aW8pCisgIHsKKyAgICAvKiBJbml0aWFsaXpl IHdpdGggYXV0b21hdGljIE9TIGNoYXJhY3RlciBzZXQgZGV0ZWN0aW9uLiAqLworICAgIG15 c3FsX29wdGlvbnMobXlzcWwsIE1ZU1FMX1NFVF9DSEFSU0VUX05BTUUsIGNzX25hbWUpOwor ICAgIG15c3FsX2luaXRfY2hhcmFjdGVyX3NldChteXNxbCk7CisgICAgY3NfbmFtZT0gbXlz cWwtPm9wdGlvbnMuY2hhcnNldF9uYW1lOworICB9CisKICAgaWYgKHN0cmxlbihjc19uYW1l KSA8IE1ZX0NTX05BTUVfU0laRSAmJgogICAgICAoY3M9IGdldF9jaGFyc2V0X2J5X2NzbmFt ZShjc19uYW1lLCBNWV9DU19QUklNQVJZLCBNWUYoMCkpKSkKICAgewogICAgIGNoYXIgYnVm ZltNWV9DU19OQU1FX1NJWkUgKyAxMF07CiAgICAgY2hhcnNldHNfZGlyPSBzYXZlX2NzZGly OworICAgIGlmICghbXlzcWwtPm5ldC52aW8pCisgICAgeworICAgICAgLyogSWYgdGhlcmUg aXMgbm8gY29ubmVjdGlvbiB5ZXQgd2UgZG9uJ3Qgc2VuZCAiU0VUIE5BTUVTIiBxdWVyeSAq LworICAgICAgbXlzcWwtPmNoYXJzZXQ9IGNzOworICAgICAgcmV0dXJuIDA7CisgICAgfQog ICAgIC8qIFNraXAgZXhlY3V0aW9uIG9mICJTRVQgTkFNRVMiIGZvciBwcmUtNC4xIHNlcnZl cnMgKi8KICAgICBpZiAobXlzcWxfZ2V0X3NlcnZlcl92ZXJzaW9uKG15c3FsKSA8IDQwMTAw KQogICAgICAgcmV0dXJuIDA7Cgo= --------------020204070206090606010803--