REDROOM
PHP 8.2.30
Path:
Logout
Edit File
Size: 48.52 KB
Close
//opt/cloudlinux/venv/lib/python3.11/site-packages/numpy/f2py/__pycache__/cfuncs.cpython-311.pyc
Text
Base64
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b24gYWxsIHJpZ2h0cyByZXNlcnZlZCwKUGVhcnUgUGV0ZXJzb24gPHBlYXJ1QGlvYy5lZT4KUGVybWlzc2lvbiB0byB1c2UsIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBpcyBnaXZlbiB1bmRlciB0aGUKdGVybXMgb2YgdGhlIE51bVB5IExpY2Vuc2UuCgpOTyBXQVJSQU5UWSBJUyBFWFBSRVNTRUQgT1IgSU1QTElFRC4gIFVTRSBBVCBZT1VSIE9XTiBSSVNLLgokRGF0ZTogMjAwNS8wNS8wNiAxMTo0MjozNCAkClBlYXJ1IFBldGVyc29uCgrpAAAAAE7pAQAAACkB2gtfX3ZlcnNpb25fXykK2glpbmNsdWRlczDaCGluY2x1ZGVz2gh0eXBlZGVmc9oSdHlwZWRlZnNfZ2VuZXJhdGVk2gx1c2VyaW5jbHVkZXPaCWNwcG1hY3Jvc9oGY2Z1bmNz2gljYWxsYmFja3PaC2Y5MG1vZGhvb2tz2gtjb21tb25ob29rc3IFAAAAehIvKm5lZWRfaW5jbHVkZXMwKi9yBgAAAHoRLypuZWVkX2luY2x1ZGVzKi9yCQAAAHoVLypuZWVkX3VzZXJpbmNsdWRlcyovcgcAAAB6ES8qbmVlZF90eXBlZGVmcyovcggAAAB6Gy8qbmVlZF90eXBlZGVmc19nZW5lcmF0ZWQqL3IKAAAAehIvKm5lZWRfY3BwbWFjcm9zKi9yCwAAAHoPLypuZWVkX2NmdW5jcyovcgwAAAB6Ei8qbmVlZF9jYWxsYmFja3MqL3oULypuZWVkX2Y5MG1vZGhvb2tzKi96GS8qaW5pdGY5MG1vZGhvb2tzc3RhdGljKi96Gi8qaW5pdGY5MG1vZGhvb2tzZHluYW1pYyovKQNyDQAAANoVaW5pdGY5MG1vZGhvb2tzc3RhdGlj2hZpbml0ZjkwbW9kaG9va3NkeW5hbWljehQvKm5lZWRfY29tbW9uaG9va3MqL3oYLypuZWVkX2luaXRjb21tb25ob29rcyovKQJyDgAAANoPaW5pdGNvbW1vbmhvb2tzehEjaW5jbHVkZSA8bWF0aC5oPnoGbWF0aC5oehMjaW5jbHVkZSA8c3RyaW5nLmg+eghzdHJpbmcuaHoTI2luY2x1ZGUgPHNldGptcC5oPnoIc2V0am1wLmh6QyNkZWZpbmUgUFlfQVJSQVlfVU5JUVVFX1NZTUJPTCBQeUFycmF5X0FQSQojaW5jbHVkZSAiYXJyYXlvYmplY3QuaCJ6DWFycmF5b2JqZWN0Lmh6GiNpbmNsdWRlICJmb3J0cmFub2JqZWN0LmgiehMjaW5jbHVkZSA8c3RkYXJnLmg+eghzdGRhcmcuaHokdHlwZWRlZiB1bnNpZ25lZCBjaGFyIHVuc2lnbmVkX2NoYXI72g11bnNpZ25lZF9jaGFyeiZ0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHVuc2lnbmVkX3Nob3J0O9oOdW5zaWduZWRfc2hvcnR6JHR5cGVkZWYgdW5zaWduZWQgbG9uZyB1bnNpZ25lZF9sb25nO9oNdW5zaWduZWRfbG9uZ3ogdHlwZWRlZiBzaWduZWQgY2hhciBzaWduZWRfY2hhcjvaC3NpZ25lZF9jaGFyeo4jaWYgZGVmaW5lZChOUFlfT1NfV0lOMzIpCnR5cGVkZWYgX19pbnQ2NCBsb25nX2xvbmc7CiNlbHNlCnR5cGVkZWYgbG9uZyBsb25nIGxvbmdfbG9uZzsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgdW5zaWduZWRfbG9uZ19sb25nOwojZW5kaWYK2glsb25nX2xvbmd6ciNpZiBkZWZpbmVkKE5QWV9PU19XSU4zMikKdHlwZWRlZiBfX3VpbnQ2NCBsb25nX2xvbmc7CiNlbHNlCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIHVuc2lnbmVkX2xvbmdfbG9uZzsKI2VuZGlmCtoSdW5zaWduZWRfbG9uZ19sb25nej0jaWZuZGVmIF9MT05HX0RPVUJMRQp0eXBlZGVmIGxvbmcgZG91YmxlIGxvbmdfZG91YmxlOwojZW5kaWYK2gtsb25nX2RvdWJsZXo2dHlwZWRlZiBzdHJ1Y3Qge2xvbmcgZG91YmxlIHIsaTt9IGNvbXBsZXhfbG9uZ19kb3VibGU72hNjb21wbGV4X2xvbmdfZG91Ymxleip0eXBlZGVmIHN0cnVjdCB7ZmxvYXQgcixpO30gY29tcGxleF9mbG9hdDvaDWNvbXBsZXhfZmxvYXR6LHR5cGVkZWYgc3RydWN0IHtkb3VibGUgcixpO30gY29tcGxleF9kb3VibGU72g5jb21wbGV4X2RvdWJsZXoWdHlwZWRlZiBjaGFyICogc3RyaW5nO9oGc3RyaW5nehd0eXBlZGVmIGNoYXIgY2hhcmFjdGVyO9oJY2hhcmFjdGVyYRoBAAAjaWZkZWYgREVCVUdDRlVOQ1MKI2RlZmluZSBDRlVOQ1NNRVNTKG1lc3MpIGZwcmludGYoc3RkZXJyLCJkZWJ1Zy1jYXBpOiJtZXNzKTsKI2RlZmluZSBDRlVOQ1NNRVNTUFkobWVzcyxvYmopIENGVU5DU01FU1MobWVzcykgXAogICAgUHlPYmplY3RfUHJpbnQoKFB5T2JqZWN0ICopb2JqLHN0ZGVycixQeV9QUklOVF9SQVcpO1wKICAgIGZwcmludGYoc3RkZXJyLCJcbiIpOwojZWxzZQojZGVmaW5lIENGVU5DU01FU1MobWVzcykKI2RlZmluZSBDRlVOQ1NNRVNTUFkobWVzcyxvYmopCiNlbmRpZgraCkNGVU5DU01FU1NhbwIAACNpZiBkZWZpbmVkKFBSRVBFTkRfRk9SVFJBTikKI2lmIGRlZmluZWQoTk9fQVBQRU5EX0ZPUlRSQU4pCiNpZiBkZWZpbmVkKFVQUEVSQ0FTRV9GT1JUUkFOKQojZGVmaW5lIEZfRlVOQyhmLEYpIF8jI0YKI2Vsc2UKI2RlZmluZSBGX0ZVTkMoZixGKSBfIyNmCiNlbmRpZgojZWxzZQojaWYgZGVmaW5lZChVUFBFUkNBU0VfRk9SVFJBTikKI2RlZmluZSBGX0ZVTkMoZixGKSBfIyNGIyNfCiNlbHNlCiNkZWZpbmUgRl9GVU5DKGYsRikgXyMjZiMjXwojZW5kaWYKI2VuZGlmCiNlbHNlCiNpZiBkZWZpbmVkKE5PX0FQUEVORF9GT1JUUkFOKQojaWYgZGVmaW5lZChVUFBFUkNBU0VfRk9SVFJBTikKI2RlZmluZSBGX0ZVTkMoZixGKSBGCiNlbHNlCiNkZWZpbmUgRl9GVU5DKGYsRikgZgojZW5kaWYKI2Vsc2UKI2lmIGRlZmluZWQoVVBQRVJDQVNFX0ZPUlRSQU4pCiNkZWZpbmUgRl9GVU5DKGYsRikgRiMjXwojZWxzZQojZGVmaW5lIEZfRlVOQyhmLEYpIGYjI18KI2VuZGlmCiNlbmRpZgojZW5kaWYKI2lmIGRlZmluZWQoVU5ERVJTQ09SRV9HNzcpCiNkZWZpbmUgRl9GVU5DX1VTKGYsRikgRl9GVU5DKGYjI18sRiMjXykKI2Vsc2UKI2RlZmluZSBGX0ZVTkNfVVMoZixGKSBGX0ZVTkMoZixGKQojZW5kaWYK2gZGX0ZVTkNhCwMAACNpZiBkZWZpbmVkKFBSRVBFTkRfRk9SVFJBTikKI2lmIGRlZmluZWQoTk9fQVBQRU5EX0ZPUlRSQU4pCiNpZiBkZWZpbmVkKFVQUEVSQ0FTRV9GT1JUUkFOKQojZGVmaW5lIEZfV1JBUFBFREZVTkMoZixGKSBfRjJQWVdSQVAjI0YKI2Vsc2UKI2RlZmluZSBGX1dSQVBQRURGVU5DKGYsRikgX2YycHl3cmFwIyNmCiNlbmRpZgojZWxzZQojaWYgZGVmaW5lZChVUFBFUkNBU0VfRk9SVFJBTikKI2RlZmluZSBGX1dSQVBQRURGVU5DKGYsRikgX0YyUFlXUkFQIyNGIyNfCiNlbHNlCiNkZWZpbmUgRl9XUkFQUEVERlVOQyhmLEYpIF9mMnB5d3JhcCMjZiMjXwojZW5kaWYKI2VuZGlmCiNlbHNlCiNpZiBkZWZpbmVkKE5PX0FQUEVORF9GT1JUUkFOKQojaWYgZGVmaW5lZChVUFBFUkNBU0VfRk9SVFJBTikKI2RlZmluZSBGX1dSQVBQRURGVU5DKGYsRikgRjJQWVdSQVAjI0YKI2Vsc2UKI2RlZmluZSBGX1dSQVBQRURGVU5DKGYsRikgZjJweXdyYXAjI2YKI2VuZGlmCiNlbHNlCiNpZiBkZWZpbmVkKFVQUEVSQ0FTRV9GT1JUUkFOKQojZGVmaW5lIEZfV1JBUFBFREZVTkMoZixGKSBGMlBZV1JBUCMjRiMjXwojZWxzZQojZGVmaW5lIEZfV1JBUFBFREZVTkMoZixGKSBmMnB5d3JhcCMjZiMjXwojZW5kaWYKI2VuZGlmCiNlbmRpZgojaWYgZGVmaW5lZChVTkRFUlNDT1JFX0c3NykKI2RlZmluZSBGX1dSQVBQRURGVU5DX1VTKGYsRikgRl9XUkFQUEVERlVOQyhmIyNfLEYjI18pCiNlbHNlCiNkZWZpbmUgRl9XUkFQUEVERlVOQ19VUyhmLEYpIEZfV1JBUFBFREZVTkMoZixGKQojZW5kaWYK2g1GX1dSQVBQRURGVU5DYTADAAAjaWYgZGVmaW5lZChGOTBNT0QyQ0NPTlYxKSAvKkUuZy4gQ29tcGFxIEZvcnRyYW4gKi8KI2lmIGRlZmluZWQoTk9fQVBQRU5EX0ZPUlRSQU4pCiNkZWZpbmUgRl9NT0RGVU5DTkFNRShtLGYpICQgIyMgbSAjIyAkICMjIGYKI2Vsc2UKI2RlZmluZSBGX01PREZVTkNOQU1FKG0sZikgJCAjIyBtICMjICQgIyMgZiAjIyBfCiNlbmRpZgojZW5kaWYKCiNpZiBkZWZpbmVkKEY5ME1PRDJDQ09OVjIpIC8qRS5nLiBJQk0gWEwgRm9ydHJhbiwgbm90IHRlc3RlZCB0aG91Z2ggKi8KI2lmIGRlZmluZWQoTk9fQVBQRU5EX0ZPUlRSQU4pCiNkZWZpbmUgRl9NT0RGVU5DTkFNRShtLGYpICBfXyAjIyBtICMjIF9NT0RfICMjIGYKI2Vsc2UKI2RlZmluZSBGX01PREZVTkNOQU1FKG0sZikgIF9fICMjIG0gIyMgX01PRF8gIyMgZiAjIyBfCiNlbmRpZgojZW5kaWYKCiNpZiBkZWZpbmVkKEY5ME1PRDJDQ09OVjMpIC8qRS5nLiBNSVBTUHJvIENvbXBpbGVycyAqLwojaWYgZGVmaW5lZChOT19BUFBFTkRfRk9SVFJBTikKI2RlZmluZSBGX01PREZVTkNOQU1FKG0sZikgIGYgIyMgLmluLiAjIyBtCiNlbHNlCiNkZWZpbmUgRl9NT0RGVU5DTkFNRShtLGYpICBmICMjIC5pbi4gIyMgbSAjIyBfCiNlbmRpZgojZW5kaWYKLyoKI2lmIGRlZmluZWQoVVBQRVJDQVNFX0ZPUlRSQU4pCiNkZWZpbmUgRl9NT0RGVU5DKG0sTSxmLEYpIEZfTU9ERlVOQ05BTUUoTSxGKQojZWxzZQojZGVmaW5lIEZfTU9ERlVOQyhtLE0sZixGKSBGX01PREZVTkNOQU1FKG0sZikKI2VuZGlmCiovCgojZGVmaW5lIEZfTU9ERlVOQyhtLGYpICgqKGYycHltb2RzdHJ1Y3QjI20jIy4jI2YpKQraCUZfTU9ERlVOQ3qWI2RlZmluZSBTV0FQKGEsYikgKHNpemVfdCkoYSkgPSAoKHNpemVfdCkoYSkgXiAoc2l6ZV90KShiKSk7XAogKHNpemVfdCkoYikgPSAoKHNpemVfdCkoYSkgXiAoc2l6ZV90KShiKSk7XAogKHNpemVfdCkoYSkgPSAoKHNpemVfdCkoYSkgXiAoc2l6ZV90KShiKSkK2gpTV0FQVU5TQUZFekYjZGVmaW5lIFNXQVAoYSxiLHQpIHtcCiAgICB0ICpjO1wKICAgIGMgPSBhO1wKICAgIGEgPSBiO1wKICAgIGIgPSBjO30K2gRTV0FQeqojZGVmaW5lIFBSSU5UUFlPQkpFUlIob2JqKVwKICAgIGZwcmludGYoc3RkZXJyLCIjbW9kdWxlbmFtZSMuZXJyb3IgaXMgcmVsYXRlZCB0byAiKTtcCiAgICBQeU9iamVjdF9QcmludCgoUHlPYmplY3QgKilvYmosc3RkZXJyLFB5X1BSSU5UX1JBVyk7XAogICAgZnByaW50ZihzdGRlcnIsIlxuIik7CtoNUFJJTlRQWU9CSkVSUnroI2lmbmRlZiBtYXgKI2RlZmluZSBtYXgoYSxiKSAoKGEgPiBiKSA/IChhKSA6IChiKSkKI2VuZGlmCiNpZm5kZWYgbWluCiNkZWZpbmUgbWluKGEsYikgKChhIDwgYikgPyAoYSkgOiAoYikpCiNlbmRpZgojaWZuZGVmIE1BWAojZGVmaW5lIE1BWChhLGIpICgoYSA+IGIpID8gKGEpIDogKGIpKQojZW5kaWYKI2lmbmRlZiBNSU4KI2RlZmluZSBNSU4oYSxiKSAoKGEgPCBiKSA/IChhKSA6IChiKSkKI2VuZGlmCtoGTUlOTUFYevQvKiBTZWUgZm9ydHJhbm9iamVjdC5oIGZvciBkZWZpbml0aW9ucy4gVGhlIG1hY3JvcyBoZXJlIGFyZSBwcm92aWRlZCBmb3IgQkMuICovCiNkZWZpbmUgcmFuayBmMnB5X3JhbmsKI2RlZmluZSBzaGFwZSBmMnB5X3NoYXBlCiNkZWZpbmUgZnNoYXBlIGYycHlfc2hhcGUKI2RlZmluZSBsZW4gZjJweV9sZW4KI2RlZmluZSBmbGVuIGYycHlfZmxlbgojZGVmaW5lIHNsZW4gZjJweV9zbGVuCiNkZWZpbmUgc2l6ZSBmMnB5X3NpemUKegVsZW4uLnowI2RlZmluZSBweW9ial9mcm9tX2NoYXIxKHYpIChQeUxvbmdfRnJvbUxvbmcodikp2hBweW9ial9mcm9tX2NoYXIxejEjZGVmaW5lIHB5b2JqX2Zyb21fc2hvcnQxKHYpIChQeUxvbmdfRnJvbUxvbmcodikp2hFweW9ial9mcm9tX3Nob3J0MdoPcHlvYmpfZnJvbV9pbnQxei8jZGVmaW5lIHB5b2JqX2Zyb21faW50MSh2KSAoUHlMb25nX0Zyb21Mb25nKHYpKXowI2RlZmluZSBweW9ial9mcm9tX2xvbmcxKHYpIChQeUxvbmdfRnJvbUxvbmcodikp2hBweW9ial9mcm9tX2xvbmcx2hVweW9ial9mcm9tX2xvbmdfbG9uZzF63iNpZmRlZiBIQVZFX0xPTkdfTE9ORwojZGVmaW5lIHB5b2JqX2Zyb21fbG9uZ19sb25nMSh2KSAoUHlMb25nX0Zyb21Mb25nTG9uZyh2KSkKI2Vsc2UKI3dhcm5pbmcgSEFWRV9MT05HX0xPTkcgaXMgbm90IGF2YWlsYWJsZS4gUmVkZWZpbmluZyBweW9ial9mcm9tX2xvbmdfbG9uZy4KI2RlZmluZSBweW9ial9mcm9tX2xvbmdfbG9uZzEodikgKFB5TG9uZ19Gcm9tTG9uZyh2KSkKI2VuZGlmCtoXcHlvYmpfZnJvbV9sb25nX2RvdWJsZTF6OiNkZWZpbmUgcHlvYmpfZnJvbV9sb25nX2RvdWJsZTEodikgKFB5RmxvYXRfRnJvbURvdWJsZSh2KSl6NSNkZWZpbmUgcHlvYmpfZnJvbV9kb3VibGUxKHYpIChQeUZsb2F0X0Zyb21Eb3VibGUodikp2hJweW9ial9mcm9tX2RvdWJsZTF6NCNkZWZpbmUgcHlvYmpfZnJvbV9mbG9hdDEodikgKFB5RmxvYXRfRnJvbURvdWJsZSh2KSnaEXB5b2JqX2Zyb21fZmxvYXQx2h9weW9ial9mcm9tX2NvbXBsZXhfbG9uZ19kb3VibGUxeksjZGVmaW5lIHB5b2JqX2Zyb21fY29tcGxleF9sb25nX2RvdWJsZTEodikgKFB5Q29tcGxleF9Gcm9tRG91Ymxlcyh2LnIsdi5pKSnaGnB5b2JqX2Zyb21fY29tcGxleF9kb3VibGUxekYjZGVmaW5lIHB5b2JqX2Zyb21fY29tcGxleF9kb3VibGUxKHYpIChQeUNvbXBsZXhfRnJvbURvdWJsZXModi5yLHYuaSkp2hlweW9ial9mcm9tX2NvbXBsZXhfZmxvYXQxekUjZGVmaW5lIHB5b2JqX2Zyb21fY29tcGxleF9mbG9hdDEodikgKFB5Q29tcGxleF9Gcm9tRG91Ymxlcyh2LnIsdi5pKSnaEnB5b2JqX2Zyb21fc3RyaW5nMXo/I2RlZmluZSBweW9ial9mcm9tX3N0cmluZzEodikgKFB5VW5pY29kZV9Gcm9tU3RyaW5nKChjaGFyICopdikp2hZweW9ial9mcm9tX3N0cmluZzFzaXplelMjZGVmaW5lIHB5b2JqX2Zyb21fc3RyaW5nMXNpemUodixsZW4pIChQeVVuaWNvZGVfRnJvbVN0cmluZ0FuZFNpemUoKGNoYXIgKil2LCBsZW4pKdoSVFJZUFlBUlJBWVRFTVBMQVRFYcwIAAAvKiBOZXcgU2NpUHkgKi8KI2RlZmluZSBUUllQWUFSUkFZVEVNUExBVEVDSEFSIGNhc2UgTlBZX1NUUklORzogKihjaGFyICopKFB5QXJyYXlfREFUQShhcnIpKT0qdjsgYnJlYWs7CiNkZWZpbmUgVFJZUFlBUlJBWVRFTVBMQVRFTE9ORyBjYXNlIE5QWV9MT05HOiAqKGxvbmcgKikoUHlBcnJheV9EQVRBKGFycikpPSp2OyBicmVhazsKI2RlZmluZSBUUllQWUFSUkFZVEVNUExBVEVPQkpFQ1QgY2FzZSBOUFlfT0JKRUNUOiBQeUFycmF5X1NFVElURU0oYXJyLFB5QXJyYXlfREFUQShhcnIpLHB5b2JqX2Zyb21fICMjIGN0eXBlICMjIDEoKnYpKTsgYnJlYWs7CgojZGVmaW5lIFRSWVBZQVJSQVlURU1QTEFURShjdHlwZSx0eXBlY29kZSkgXAogICAgICAgIFB5QXJyYXlPYmplY3QgKmFyciA9IE5VTEw7XAogICAgICAgIGlmICghb2JqKSByZXR1cm4gLTI7XAogICAgICAgIGlmICghUHlBcnJheV9DaGVjayhvYmopKSByZXR1cm4gLTE7XAogICAgICAgIGlmICghKGFycj0oUHlBcnJheU9iamVjdCAqKW9iaikpIHtmcHJpbnRmKHN0ZGVyciwiVFJZUFlBUlJBWVRFTVBMQVRFOiIpO1BSSU5UUFlPQkpFUlIob2JqKTtyZXR1cm4gMDt9XAogICAgICAgIGlmIChQeUFycmF5X0RFU0NSKGFyciktPnR5cGU9PXR5cGVjb2RlKSAgeyooY3R5cGUgKikoUHlBcnJheV9EQVRBKGFycikpPSp2OyByZXR1cm4gMTt9XAogICAgICAgIHN3aXRjaCAoUHlBcnJheV9UWVBFKGFycikpIHtcCiAgICAgICAgICAgICAgICBjYXNlIE5QWV9ET1VCTEU6ICoobnB5X2RvdWJsZSAqKShQeUFycmF5X0RBVEEoYXJyKSk9KnY7IGJyZWFrO1wKICAgICAgICAgICAgICAgIGNhc2UgTlBZX0lOVDogKihucHlfaW50ICopKFB5QXJyYXlfREFUQShhcnIpKT0qdjsgYnJlYWs7XAogICAgICAgICAgICAgICAgY2FzZSBOUFlfTE9ORzogKihucHlfbG9uZyAqKShQeUFycmF5X0RBVEEoYXJyKSk9KnY7IGJyZWFrO1wKICAgICAgICAgICAgICAgIGNhc2UgTlBZX0ZMT0FUOiAqKG5weV9mbG9hdCAqKShQeUFycmF5X0RBVEEoYXJyKSk9KnY7IGJyZWFrO1wKICAgICAgICAgICAgICAgIGNhc2UgTlBZX0NET1VCTEU6ICoobnB5X2RvdWJsZSAqKShQeUFycmF5X0RBVEEoYXJyKSk9KnY7IGJyZWFrO1wKICAgICAgICAgICAgICAgIGNhc2UgTlBZX0NGTE9BVDogKihucHlfZmxvYXQgKikoUHlBcnJheV9EQVRBKGFycikpPSp2OyBicmVhaztcCiAgICAgICAgICAgICAgICBjYXNlIE5QWV9CT09MOiAqKG5weV9ib29sICopKFB5QXJyYXlfREFUQShhcnIpKT0oKnYhPTApOyBicmVhaztcCiAgICAgICAgICAgICAgICBjYXNlIE5QWV9VQllURTogKihucHlfdWJ5dGUgKikoUHlBcnJheV9EQVRBKGFycikpPSp2OyBicmVhaztcCiAgICAgICAgICAgICAgICBjYXNlIE5QWV9CWVRFOiAqKG5weV9ieXRlICopKFB5QXJyYXlfREFUQShhcnIpKT0qdjsgYnJlYWs7XAogICAgICAgICAgICAgICAgY2FzZSBOUFlfU0hPUlQ6ICoobnB5X3Nob3J0ICopKFB5QXJyYXlfREFUQShhcnIpKT0qdjsgYnJlYWs7XAogICAgICAgICAgICAgICAgY2FzZSBOUFlfVVNIT1JUOiAqKG5weV91c2hvcnQgKikoUHlBcnJheV9EQVRBKGFycikpPSp2OyBicmVhaztcCiAgICAgICAgICAgICAgICBjYXNlIE5QWV9VSU5UOiAqKG5weV91aW50ICopKFB5QXJyYXlfREFUQShhcnIpKT0qdjsgYnJlYWs7XAogICAgICAgICAgICAgICAgY2FzZSBOUFlfVUxPTkc6ICoobnB5X3Vsb25nICopKFB5QXJyYXlfREFUQShhcnIpKT0qdjsgYnJlYWs7XAogICAgICAgICAgICAgICAgY2FzZSBOUFlfTE9OR0xPTkc6ICoobnB5X2xvbmdsb25nICopKFB5QXJyYXlfREFUQShhcnIpKT0qdjsgYnJlYWs7XAogICAgICAgICAgICAgICAgY2FzZSBOUFlfVUxPTkdMT05HOiAqKG5weV91bG9uZ2xvbmcgKikoUHlBcnJheV9EQVRBKGFycikpPSp2OyBicmVhaztcCiAgICAgICAgICAgICAgICBjYXNlIE5QWV9MT05HRE9VQkxFOiAqKG5weV9sb25nZG91YmxlICopKFB5QXJyYXlfREFUQShhcnIpKT0qdjsgYnJlYWs7XAogICAgICAgICAgICAgICAgY2FzZSBOUFlfQ0xPTkdET1VCTEU6ICoobnB5X2xvbmdkb3VibGUgKikoUHlBcnJheV9EQVRBKGFycikpPSp2OyBicmVhaztcCiAgICAgICAgICAgICAgICBjYXNlIE5QWV9PQkpFQ1Q6IFB5QXJyYXlfU0VUSVRFTShhcnIsIFB5QXJyYXlfREFUQShhcnIpLCBweW9ial9mcm9tXyAjIyBjdHlwZSAjIyAxKCp2KSk7IGJyZWFrO1wKICAgICAgICBkZWZhdWx0OiByZXR1cm4gLTI7XAogICAgICAgIH07XAogICAgICAgIHJldHVybiAxCtoZVFJZQ09NUExFWFBZQVJSQVlURU1QTEFURWGTCgAAI2RlZmluZSBUUllDT01QTEVYUFlBUlJBWVRFTVBMQVRFT0JKRUNUIGNhc2UgTlBZX09CSkVDVDogUHlBcnJheV9TRVRJVEVNKGFyciwgUHlBcnJheV9EQVRBKGFyciksIHB5b2JqX2Zyb21fY29tcGxleF8gIyMgY3R5cGUgIyMgMSgoKnYpKSk7IGJyZWFrOwojZGVmaW5lIFRSWUNPTVBMRVhQWUFSUkFZVEVNUExBVEUoY3R5cGUsdHlwZWNvZGUpXAogICAgICAgIFB5QXJyYXlPYmplY3QgKmFyciA9IE5VTEw7XAogICAgICAgIGlmICghb2JqKSByZXR1cm4gLTI7XAogICAgICAgIGlmICghUHlBcnJheV9DaGVjayhvYmopKSByZXR1cm4gLTE7XAogICAgICAgIGlmICghKGFycj0oUHlBcnJheU9iamVjdCAqKW9iaikpIHtmcHJpbnRmKHN0ZGVyciwiVFJZQ09NUExFWFBZQVJSQVlURU1QTEFURToiKTtQUklOVFBZT0JKRVJSKG9iaik7cmV0dXJuIDA7fVwKICAgICAgICBpZiAoUHlBcnJheV9ERVNDUihhcnIpLT50eXBlPT10eXBlY29kZSkge1wKICAgICAgICAgICAgKihjdHlwZSAqKShQeUFycmF5X0RBVEEoYXJyKSk9KCp2KS5yO1wKICAgICAgICAgICAgKihjdHlwZSAqKShQeUFycmF5X0RBVEEoYXJyKStzaXplb2YoY3R5cGUpKT0oKnYpLmk7XAogICAgICAgICAgICByZXR1cm4gMTtcCiAgICAgICAgfVwKICAgICAgICBzd2l0Y2ggKFB5QXJyYXlfVFlQRShhcnIpKSB7XAogICAgICAgICAgICAgICAgY2FzZSBOUFlfQ0RPVUJMRTogKihucHlfZG91YmxlICopKFB5QXJyYXlfREFUQShhcnIpKT0oKnYpLnI7XAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKihucHlfZG91YmxlICopKFB5QXJyYXlfREFUQShhcnIpK3NpemVvZihucHlfZG91YmxlKSk9KCp2KS5pO1wKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1wKICAgICAgICAgICAgICAgIGNhc2UgTlBZX0NGTE9BVDogKihucHlfZmxvYXQgKikoUHlBcnJheV9EQVRBKGFycikpPSgqdikucjtcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoobnB5X2Zsb2F0ICopKFB5QXJyYXlfREFUQShhcnIpK3NpemVvZihucHlfZmxvYXQpKT0oKnYpLmk7XAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcCiAgICAgICAgICAgICAgICBjYXNlIE5QWV9ET1VCTEU6ICoobnB5X2RvdWJsZSAqKShQeUFycmF5X0RBVEEoYXJyKSk9KCp2KS5yOyBicmVhaztcCiAgICAgICAgICAgICAgICBjYXNlIE5QWV9MT05HOiAqKG5weV9sb25nICopKFB5QXJyYXlfREFUQShhcnIpKT0oKnYpLnI7IGJyZWFrO1wKICAgICAgICAgICAgICAgIGNhc2UgTlBZX0ZMT0FUOiAqKG5weV9mbG9hdCAqKShQeUFycmF5X0RBVEEoYXJyKSk9KCp2KS5yOyBicmVhaztcCiAgICAgICAgICAgICAgICBjYXNlIE5QWV9JTlQ6ICoobnB5X2ludCAqKShQeUFycmF5X0RBVEEoYXJyKSk9KCp2KS5yOyBicmVhaztcCiAgICAgICAgICAgICAgICBjYXNlIE5QWV9TSE9SVDogKihucHlfc2hvcnQgKikoUHlBcnJheV9EQVRBKGFycikpPSgqdikucjsgYnJlYWs7XAogICAgICAgICAgICAgICAgY2FzZSBOUFlfVUJZVEU6ICoobnB5X3VieXRlICopKFB5QXJyYXlfREFUQShhcnIpKT0oKnYpLnI7IGJyZWFrO1wKICAgICAgICAgICAgICAgIGNhc2UgTlBZX0JZVEU6ICoobnB5X2J5dGUgKikoUHlBcnJheV9EQVRBKGFycikpPSgqdikucjsgYnJlYWs7XAogICAgICAgICAgICAgICAgY2FzZSBOUFlfQk9PTDogKihucHlfYm9vbCAqKShQeUFycmF5X0RBVEEoYXJyKSk9KCgqdikuciE9MCAmJiAoKnYpLmkhPTApOyBicmVhaztcCiAgICAgICAgICAgICAgICBjYXNlIE5QWV9VU0hPUlQ6ICoobnB5X3VzaG9ydCAqKShQeUFycmF5X0RBVEEoYXJyKSk9KCp2KS5yOyBicmVhaztcCiAgICAgICAgICAgICAgICBjYXNlIE5QWV9VSU5UOiAqKG5weV91aW50ICopKFB5QXJyYXlfREFUQShhcnIpKT0oKnYpLnI7IGJyZWFrO1wKICAgICAgICAgICAgICAgIGNhc2UgTlBZX1VMT05HOiAqKG5weV91bG9uZyAqKShQeUFycmF5X0RBVEEoYXJyKSk9KCp2KS5yOyBicmVhaztcCiAgICAgICAgICAgICAgICBjYXNlIE5QWV9MT05HTE9ORzogKihucHlfbG9uZ2xvbmcgKikoUHlBcnJheV9EQVRBKGFycikpPSgqdikucjsgYnJlYWs7XAogICAgICAgICAgICAgICAgY2FzZSBOUFlfVUxPTkdMT05HOiAqKG5weV91bG9uZ2xvbmcgKikoUHlBcnJheV9EQVRBKGFycikpPSgqdikucjsgYnJlYWs7XAogICAgICAgICAgICAgICAgY2FzZSBOUFlfTE9OR0RPVUJMRTogKihucHlfbG9uZ2RvdWJsZSAqKShQeUFycmF5X0RBVEEoYXJyKSk9KCp2KS5yOyBicmVhaztcCiAgICAgICAgICAgICAgICBjYXNlIE5QWV9DTE9OR0RPVUJMRTogKihucHlfbG9uZ2RvdWJsZSAqKShQeUFycmF5X0RBVEEoYXJyKSk9KCp2KS5yO1wKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKG5weV9sb25nZG91YmxlICopKFB5QXJyYXlfREFUQShhcnIpK3NpemVvZihucHlfbG9uZ2RvdWJsZSkpPSgqdikuaTtcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XAogICAgICAgICAgICAgICAgY2FzZSBOUFlfT0JKRUNUOiBQeUFycmF5X1NFVElURU0oYXJyLCBQeUFycmF5X0RBVEEoYXJyKSwgcHlvYmpfZnJvbV9jb21wbGV4XyAjIyBjdHlwZSAjIyAxKCgqdikpKTsgYnJlYWs7XAogICAgICAgICAgICAgICAgZGVmYXVsdDogcmV0dXJuIC0yO1wKICAgICAgICB9O1wKICAgICAgICByZXR1cm4gLTE7CtoLU1RSSU5HQ09QWU7aEUdFVFNUUkZST01QWVRVUExFYf0BAAAjZGVmaW5lIEdFVFNUUkZST01QWVRVUExFKHR1cGxlLGluZGV4LHN0cixsZW4pIHtcCiAgICAgICAgUHlPYmplY3QgKnJ2X2NiX3N0ciA9IFB5VHVwbGVfR2V0SXRlbSgodHVwbGUpLChpbmRleCkpO1wKICAgICAgICBpZiAocnZfY2Jfc3RyID09IE5VTEwpXAogICAgICAgICAgICBnb3RvIGNhcGlfZmFpbDtcCiAgICAgICAgaWYgKFB5Qnl0ZXNfQ2hlY2socnZfY2Jfc3RyKSkge1wKICAgICAgICAgICAgc3RyW2xlbi0xXT0nXDAnO1wKICAgICAgICAgICAgU1RSSU5HQ09QWU4oKHN0ciksUHlCeXRlc19BU19TVFJJTkcoKFB5Qnl0ZXNPYmplY3QqKXJ2X2NiX3N0ciksKGxlbikpO1wKICAgICAgICB9IGVsc2Uge1wKICAgICAgICAgICAgUFJJTlRQWU9CSkVSUihydl9jYl9zdHIpO1wKICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKCNtb2R1bGVuYW1lI19lcnJvciwic3RyaW5nIG9iamVjdCBleHBlY3RlZCIpO1wKICAgICAgICAgICAgZ290byBjYXBpX2ZhaWw7XAogICAgICAgIH1cCiAgICB9CnrsI2RlZmluZSBHRVRTQ0FMQVJGUk9NUFlUVVBMRSh0dXBsZSxpbmRleCx2YXIsY3R5cGUsbWVzcykge1wKICAgICAgICBpZiAoKGNhcGlfdG1wID0gUHlUdXBsZV9HZXRJdGVtKCh0dXBsZSksKGluZGV4KSkpPT1OVUxMKSBnb3RvIGNhcGlfZmFpbDtcCiAgICAgICAgaWYgKCEoY3R5cGUgIyMgX2Zyb21fcHlvYmooKHZhciksY2FwaV90bXAsbWVzcykpKVwKICAgICAgICAgICAgZ290byBjYXBpX2ZhaWw7XAogICAgfQraFEdFVFNDQUxBUkZST01QWVRVUExFYWwBAABcCiNkZWZpbmUgRkFJTE5VTEwocCkgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgaWYgKChwKSA9PSBOVUxMKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfTWVtb3J5RXJyb3IsICJOVUxMIHBvaW50ZXIgZm91bmQiKTsgICBcCiAgICAgICAgZ290byBjYXBpX2ZhaWw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKfSB3aGlsZSAoMCkK2ghGQUlMTlVMTNoHTUVNQ09QWXpoI2RlZmluZSBNRU1DT1BZKHRvLGZyb20sbilcCiAgICBkbyB7IEZBSUxOVUxMKHRvKTsgRkFJTE5VTEwoZnJvbSk7ICh2b2lkKW1lbWNweSh0byxmcm9tLG4pOyB9IHdoaWxlICgwKQp62CNkZWZpbmUgU1RSSU5HTUFMTE9DKHN0cixsZW4pXAogICAgaWYgKChzdHIgPSAoc3RyaW5nKW1hbGxvYyhsZW4rMSkpID09IE5VTEwpIHtcCiAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX01lbW9yeUVycm9yLCAib3V0IG9mIG1lbW9yeSIpO1wKICAgICAgICBnb3RvIGNhcGlfZmFpbDtcCiAgICB9IGVsc2Uge1wKICAgICAgICAoc3RyKVtsZW5dID0gJ1wwJztcCiAgICB9CtoMU1RSSU5HTUFMTE9DekYjZGVmaW5lIFNUUklOR0ZSRUUoc3RyKSBkbyB7aWYgKCEoc3RyID09IE5VTEwpKSBmcmVlKHN0cik7fSB3aGlsZSAoMCkK2gpTVFJJTkdGUkVF2gpTVFJJTkdQQUROYfkCAAAvKgpTVFJJTkdQQUROIHJlcGxhY2VzIG51bGwgdmFsdWVzIHdpdGggcGFkZGluZyB2YWx1ZXMgZnJvbSB0aGUgcmlnaHQuCgpgdG9gIG11c3QgaGF2ZSBzaXplIG9mIGF0IGxlYXN0IE4gYnl0ZXMuCgpJZiB0aGUgYHRvW04tMV1gIGhhcyBudWxsIHZhbHVlLCB0aGVuIHJlcGxhY2UgaXQgYW5kIGFsbCB0aGUKcHJlY2VkaW5nLCBudWxscyB3aXRoIHRoZSBnaXZlbiBwYWRkaW5nLgoKU1RSSU5HUEFETih0bywgTiwgUEFERElORywgTlVMTFZBTFVFKSBpcyBhbiBpbnZlcnNlIG9wZXJhdGlvbi4KKi8KI2RlZmluZSBTVFJJTkdQQUROKHRvLCBOLCBOVUxMVkFMVUUsIFBBRERJTkcpICAgICAgICAgICAgICAgICAgIFwKICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICBpbnQgX20gPSAoTik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICBjaGFyICpfdG8gPSAodG8pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICBmb3IgKF9tIC09IDE7IF9tID49IDAgJiYgX3RvW19tXSA9PSBOVUxMVkFMVUU7IF9tLS0pIHsgIFwKICAgICAgICAgICAgIF90b1tfbV0gPSBQQURESU5HOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIH0gd2hpbGUgKDApCmExAgAALyoKU1RSSU5HQ09QWU4gY29waWVzIE4gYnl0ZXMuCgpgdG9gIGFuZCBgZnJvbWAgYnVmZmVycyBtdXN0IGhhdmUgc2l6ZXMgb2YgYXQgbGVhc3QgTiBieXRlcy4KKi8KI2RlZmluZSBTVFJJTkdDT1BZTih0byxmcm9tLE4pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICBpbnQgX20gPSAoTik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICBjaGFyICpfdG8gPSAodG8pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICBjaGFyICpfZnJvbSA9IChmcm9tKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICBGQUlMTlVMTChfdG8pOyBGQUlMTlVMTChfZnJvbSk7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAodm9pZClzdHJuY3B5KF90bywgX2Zyb20sIF9tKTsgICAgICAgICAgICAgXAogICAgfSB3aGlsZSAoMCkK2gpTVFJJTkdDT1BZemcjZGVmaW5lIFNUUklOR0NPUFkodG8sZnJvbSlcCiAgICBkbyB7IEZBSUxOVUxMKHRvKTsgRkFJTE5VTEwoZnJvbSk7ICh2b2lkKXN0cmNweSh0byxmcm9tKTsgfSB3aGlsZSAoMCkKerIjZGVmaW5lIENIRUNLR0VORVJJQyhjaGVjayx0Y2hlY2ssbmFtZSkgXAogICAgaWYgKCEoY2hlY2spKSB7XAogICAgICAgIFB5RXJyX1NldFN0cmluZygjbW9kdWxlbmFtZSNfZXJyb3IsIigidGNoZWNrIikgZmFpbGVkIGZvciAibmFtZSk7XAogICAgICAgIC8qZ290byBjYXBpX2ZhaWw7Ki9cCiAgICB9IGVsc2Ug2gxDSEVDS0dFTkVSSUN6sCNkZWZpbmUgQ0hFQ0tBUlJBWShjaGVjayx0Y2hlY2ssbmFtZSkgXAogICAgaWYgKCEoY2hlY2spKSB7XAogICAgICAgIFB5RXJyX1NldFN0cmluZygjbW9kdWxlbmFtZSNfZXJyb3IsIigidGNoZWNrIikgZmFpbGVkIGZvciAibmFtZSk7XAogICAgICAgIC8qZ290byBjYXBpX2ZhaWw7Ki9cCiAgICB9IGVsc2Ug2gpDSEVDS0FSUkFZYRwBAAAjZGVmaW5lIENIRUNLU1RSSU5HKGNoZWNrLHRjaGVjayxuYW1lLHNob3csdmFyKVwKICAgIGlmICghKGNoZWNrKSkge1wKICAgICAgICBjaGFyIGVycnN0cmluZ1syNTZdO1wKICAgICAgICBzcHJpbnRmKGVycnN0cmluZywgIiVzOiAic2hvdywgIigidGNoZWNrIikgZmFpbGVkIGZvciAibmFtZSwgc2xlbih2YXIpLCB2YXIpO1wKICAgICAgICBQeUVycl9TZXRTdHJpbmcoI21vZHVsZW5hbWUjX2Vycm9yLCBlcnJzdHJpbmcpO1wKICAgICAgICAvKmdvdG8gY2FwaV9mYWlsOyovXAogICAgfSBlbHNlINoLQ0hFQ0tTVFJJTkdhEAEAACNkZWZpbmUgQ0hFQ0tTQ0FMQVIoY2hlY2ssdGNoZWNrLG5hbWUsc2hvdyx2YXIpXAogICAgaWYgKCEoY2hlY2spKSB7XAogICAgICAgIGNoYXIgZXJyc3RyaW5nWzI1Nl07XAogICAgICAgIHNwcmludGYoZXJyc3RyaW5nLCAiJXM6ICJzaG93LCAiKCJ0Y2hlY2siKSBmYWlsZWQgZm9yICJuYW1lLCB2YXIpO1wKICAgICAgICBQeUVycl9TZXRTdHJpbmcoI21vZHVsZW5hbWUjX2Vycm9yLGVycnN0cmluZyk7XAogICAgICAgIC8qZ290byBjYXBpX2ZhaWw7Ki9cCiAgICB9IGVsc2Ug2gtDSEVDS1NDQUxBUno+I2RlZmluZSBBUlJTSVpFKGRpbXMscmFuaykgKF9QeUFycmF5X211bHRpcGx5X2xpc3QoZGltcyxyYW5rKSnaB0FSUlNJWkV6cyNpZmRlZiBPTERQWU5VTQojZXJyb3IgWW91IG5lZWQgdG8gaW5zdGFsbCBOdW1QeSB2ZXJzaW9uIDAuMTMgb3IgaGlnaGVyLiBTZWUgaHR0cHM6Ly9zY2lweS5vcmcvaW5zdGFsbC5odG1sCiNlbmRpZgraCE9MRFBZTlVNYeIDAAAjaWZuZGVmIEYyUFlfVEhSRUFEX0xPQ0FMX0RFQ0wKI2lmIGRlZmluZWQoX01TQ19WRVIpCiNkZWZpbmUgRjJQWV9USFJFQURfTE9DQUxfREVDTCBfX2RlY2xzcGVjKHRocmVhZCkKI2VsaWYgZGVmaW5lZChOUFlfT1NfTUlOR1cpCiNkZWZpbmUgRjJQWV9USFJFQURfTE9DQUxfREVDTCBfX3RocmVhZAojZWxpZiBkZWZpbmVkKF9fU1REQ19WRVJTSU9OX18pIFwKICAgICAgJiYgKF9fU1REQ19WRVJTSU9OX18gPj0gMjAxMTEyTCkgXAogICAgICAmJiAhZGVmaW5lZChfX1NURENfTk9fVEhSRUFEU19fKSBcCiAgICAgICYmICghZGVmaW5lZChfX0dMSUJDX18pIHx8IF9fR0xJQkNfXyA+IDIgfHwgKF9fR0xJQkNfXyA9PSAyICYmIF9fR0xJQkNfTUlOT1JfXyA+IDEyKSkgXAogICAgICAmJiAhZGVmaW5lZChOUFlfT1NfT1BFTkJTRCkgJiYgIWRlZmluZWQoTlBZX09TX0hBSUtVKQovKiBfX1NURENfTk9fVEhSRUFEU19fIHdhcyBmaXJzdCBkZWZpbmVkIGluIGEgbWFpbnRlbmFuY2UgcmVsZWFzZSBvZiBnbGliYyAyLjEyLAogICBzZWUgaHR0cHM6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9jb21taXQtaHVyZC8yMDEyLTA3L21zZzAwMTgwLmh0bWwsCiAgIHNvIGAhZGVmaW5lZChfX1NURENfTk9fVEhSRUFEU19fKWAgbWF5IGdpdmUgZmFsc2UgcG9zaXRpdmUgZm9yIHRoZSBleGlzdGVuY2UKICAgb2YgYHRocmVhZHMuaGAgd2hlbiB1c2luZyBhbiBvbGRlciByZWxlYXNlIG9mIGdsaWJjIDIuMTIKICAgU2VlIGdoLTE5NDM3IGZvciBkZXRhaWxzIG9uIE9wZW5CU0QgKi8KI2luY2x1ZGUgPHRocmVhZHMuaD4KI2RlZmluZSBGMlBZX1RIUkVBRF9MT0NBTF9ERUNMIHRocmVhZF9sb2NhbAojZWxpZiBkZWZpbmVkKF9fR05VQ19fKSBcCiAgICAgICYmIChfX0dOVUNfXyA+IDQgfHwgKF9fR05VQ19fID09IDQgJiYgKF9fR05VQ19NSU5PUl9fID49IDQpKSkKI2RlZmluZSBGMlBZX1RIUkVBRF9MT0NBTF9ERUNMIF9fdGhyZWFkCiNlbmRpZgojZW5kaWYK2hZGMlBZX1RIUkVBRF9MT0NBTF9ERUNMetRzdGF0aWMgaW50IGNhbGNhcnJpbmRleChpbnQgKmksUHlBcnJheU9iamVjdCAqYXJyKSB7CiAgICBpbnQgayxpaSA9IGlbMF07CiAgICBmb3IgKGs9MTsgayA8IFB5QXJyYXlfTkRJTShhcnIpOyBrKyspCiAgICAgICAgaWkgKz0gKGlpKihQeUFycmF5X0RJTShhcnIsaykgLSAxKStpW2tdKTsgLyogYXNzdW1pbmcgY29udGlndW91cyBhcnIgKi8KICAgIHJldHVybiBpaTsKfdoMY2FsY2FycmluZGV4YRABAABzdGF0aWMgaW50IGNhbGNhcnJpbmRleHRyKGludCAqaSxQeUFycmF5T2JqZWN0ICphcnIpIHsKICAgIGludCBrLGlpID0gaVtQeUFycmF5X05ESU0oYXJyKS0xXTsKICAgIGZvciAoaz0xOyBrIDwgUHlBcnJheV9ORElNKGFycik7IGsrKykKICAgICAgICBpaSArPSAoaWkqKFB5QXJyYXlfRElNKGFycixQeUFycmF5X05ESU0oYXJyKS1rLTEpIC0gMSkraVtQeUFycmF5X05ESU0oYXJyKS1rLTFdKTsgLyogYXNzdW1pbmcgY29udGlndW91cyBhcnIgKi8KICAgIHJldHVybiBpaTsKfdoOY2FsY2FycmluZGV4dHJhVAQAAHN0YXRpYyBzdHJ1Y3QgeyBpbnQgbmQ7bnB5X2ludHAgKmQ7aW50ICppLCppX3RyLHRyOyB9IGZvcmNvbWJjYWNoZTsKc3RhdGljIGludCBpbml0Zm9yY29tYihucHlfaW50cCAqZGltcyxpbnQgbmQsaW50IHRyKSB7CiAgaW50IGs7CiAgaWYgKGRpbXM9PU5VTEwpIHJldHVybiAwOwogIGlmIChuZDwwKSByZXR1cm4gMDsKICBmb3Jjb21iY2FjaGUubmQgPSBuZDsKICBmb3Jjb21iY2FjaGUuZCA9IGRpbXM7CiAgZm9yY29tYmNhY2hlLnRyID0gdHI7CiAgaWYgKChmb3Jjb21iY2FjaGUuaSA9IChpbnQgKiltYWxsb2Moc2l6ZW9mKGludCkqbmQpKT09TlVMTCkgcmV0dXJuIDA7CiAgaWYgKChmb3Jjb21iY2FjaGUuaV90ciA9IChpbnQgKiltYWxsb2Moc2l6ZW9mKGludCkqbmQpKT09TlVMTCkgcmV0dXJuIDA7CiAgZm9yIChrPTE7azxuZDtrKyspIHsKICAgIGZvcmNvbWJjYWNoZS5pW2tdID0gZm9yY29tYmNhY2hlLmlfdHJbbmQtay0xXSA9IDA7CiAgfQogIGZvcmNvbWJjYWNoZS5pWzBdID0gZm9yY29tYmNhY2hlLmlfdHJbbmQtMV0gPSAtMTsKICByZXR1cm4gMTsKfQpzdGF0aWMgaW50ICpuZXh0Zm9yY29tYih2b2lkKSB7CiAgaW50IGosKmksKmlfdHIsazsKICBpbnQgbmQ9Zm9yY29tYmNhY2hlLm5kOwogIGlmICgoaT1mb3Jjb21iY2FjaGUuaSkgPT0gTlVMTCkgcmV0dXJuIE5VTEw7CiAgaWYgKChpX3RyPWZvcmNvbWJjYWNoZS5pX3RyKSA9PSBOVUxMKSByZXR1cm4gTlVMTDsKICBpZiAoZm9yY29tYmNhY2hlLmQgPT0gTlVMTCkgcmV0dXJuIE5VTEw7CiAgaVswXSsrOwogIGlmIChpWzBdPT1mb3Jjb21iY2FjaGUuZFswXSkgewogICAgaj0xOwogICAgd2hpbGUgKChqPG5kKSAmJiAoaVtqXT09Zm9yY29tYmNhY2hlLmRbal0tMSkpIGorKzsKICAgIGlmIChqPT1uZCkgewogICAgICBmcmVlKGkpOwogICAgICBmcmVlKGlfdHIpOwogICAgICByZXR1cm4gTlVMTDsKICAgIH0KICAgIGZvciAoaz0wO2s8ajtrKyspIGlba10gPSBpX3RyW25kLWstMV0gPSAwOwogICAgaVtqXSsrOwogICAgaV90cltuZC1qLTFdKys7CiAgfSBlbHNlCiAgICBpX3RyW25kLTFdKys7CiAgaWYgKGZvcmNvbWJjYWNoZS50cikgcmV0dXJuIGlfdHI7CiAgcmV0dXJuIGk7Cn3aB2ZvcmNvbWIpA3I1AAAAciQAAAByHAAAANoVdHJ5X3B5YXJyX2Zyb21fc3RyaW5nYecDAAAvKgogIHRyeV9weWFycl9mcm9tX3N0cmluZyBjb3BpZXMgc3RyWzpsZW4ob2JqKV0gdG8gdGhlIGRhdGEgb2YgYW4gYG5kYXJyYXlgLgoKICBJZiBvYmogaXMgYW4gYG5kYXJyYXlgLCBpdCBpcyBhc3N1bWVkIHRvIGJlIGNvbnRpZ3VvdXMuCgogIElmIHRoZSBzcGVjaWZpZWQgbGVuPT0tMSwgc3RyIG11c3QgYmUgbnVsbC10ZXJtaW5hdGVkLgoqLwpzdGF0aWMgaW50IHRyeV9weWFycl9mcm9tX3N0cmluZyhQeU9iamVjdCAqb2JqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJpbmcgc3RyLCBjb25zdCBpbnQgbGVuKSB7CiNpZmRlZiBERUJVR0NGVU5DUwpmcHJpbnRmKHN0ZGVyciwgInRyeV9weWFycl9mcm9tX3N0cmluZyhzdHI9JyVzJywgbGVuPSVkLCBvYmo9JXApXG4iLAogICAgICAgIChjaGFyKilzdHIsbGVuLCBvYmopOwojZW5kaWYKICAgIGlmIChQeUFycmF5X0NoZWNrKG9iaikpIHsKICAgICAgICBQeUFycmF5T2JqZWN0ICphcnIgPSAoUHlBcnJheU9iamVjdCAqKW9iajsKICAgICAgICBhc3NlcnQoSVNDT05USUdVT1VTKGFycikpOwogICAgICAgIHN0cmluZyBidWYgPSBQeUFycmF5X0RBVEEoYXJyKTsKICAgICAgICBucHlfaW50cCBuID0gbGVuOwogICAgICAgIGlmIChuID09IC0xKSB7CiAgICAgICAgICAgIC8qIEFzc3VtaW5nIG51bGwtdGVybWluYXRlZCBzdHIuICovCiAgICAgICAgICAgIG4gPSBzdHJsZW4oc3RyKTsKICAgICAgICB9CiAgICAgICAgaWYgKG4gPiBQeUFycmF5X05CWVRFUyhhcnIpKSB7CiAgICAgICAgICAgIG4gPSBQeUFycmF5X05CWVRFUyhhcnIpOwogICAgICAgIH0KICAgICAgICBTVFJJTkdDT1BZTihidWYsIHN0ciwgbik7CiAgICAgICAgcmV0dXJuIDE7CiAgICB9CmNhcGlfZmFpbDoKICAgIFBSSU5UUFlPQkpFUlIob2JqKTsKICAgIFB5RXJyX1NldFN0cmluZygjbW9kdWxlbmFtZSNfZXJyb3IsICJ0cnlfcHlhcnJfZnJvbV9zdHJpbmcgZmFpbGVkIik7CiAgICByZXR1cm4gMDsKfQopA3IcAAAAcjoAAAByNQAAANoRc3RyaW5nX2Zyb21fcHlvYmph5goAAC8qCiAgQ3JlYXRlIGEgbmV3IHN0cmluZyBidWZmZXIgYHN0cmAgb2YgYXQgbW9zdCBsZW5ndGggYGxlbmAgZnJvbSBhCiAgUHl0aG9uIHN0cmluZy1saWtlIG9iamVjdCBgb2JqYC4KCiAgVGhlIHN0cmluZyBidWZmZXIgaGFzIGdpdmVuIHNpemUgKGxlbikgb3IgdGhlIHNpemUgb2YgaW5pc3RyIHdoZW4gbGVuPT0tMS4KCiAgVGhlIHN0cmluZyBidWZmZXIgaXMgcGFkZGVkIHdpdGggYmxhbmtzOiBpbiBGb3J0cmFuLCB0cmFpbGluZyBibGFua3MKICBhcmUgaW5zaWduaWZpY2FudCBjb250cmFyeSB0byBDIG51bGxzLgogKi8Kc3RhdGljIGludApzdHJpbmdfZnJvbV9weW9iaihzdHJpbmcgKnN0ciwgaW50ICpsZW4sIGNvbnN0IHN0cmluZyBpbmlzdHIsIFB5T2JqZWN0ICpvYmosCiAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVycm1lc3MpCnsKICAgIFB5T2JqZWN0ICp0bXAgPSBOVUxMOwogICAgc3RyaW5nIGJ1ZiA9IE5VTEw7CiAgICBucHlfaW50cCBuID0gLTE7CiNpZmRlZiBERUJVR0NGVU5DUwpmcHJpbnRmKHN0ZGVyciwic3RyaW5nX2Zyb21fcHlvYmooc3RyPSclcycsbGVuPSVkLGluaXN0cj0nJXMnLG9iaj0lcClcbiIsCiAgICAgICAgICAgICAgIChjaGFyKilzdHIsICpsZW4sIChjaGFyICopaW5pc3RyLCBvYmopOwojZW5kaWYKICAgIGlmIChvYmogPT0gUHlfTm9uZSkgewogICAgICAgIG4gPSBzdHJsZW4oaW5pc3RyKTsKICAgICAgICBidWYgPSBpbmlzdHI7CiAgICB9CiAgICBlbHNlIGlmIChQeUFycmF5X0NoZWNrKG9iaikpIHsKICAgICAgICBQeUFycmF5T2JqZWN0ICphcnIgPSAoUHlBcnJheU9iamVjdCAqKW9iajsKICAgICAgICBpZiAoIUlTQ09OVElHVU9VUyhhcnIpKSB7CiAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgImFycmF5IG9iamVjdCBpcyBub24tY29udGlndW91cy4iKTsKICAgICAgICAgICAgZ290byBjYXBpX2ZhaWw7CiAgICAgICAgfQogICAgICAgIG4gPSBQeUFycmF5X05CWVRFUyhhcnIpOwogICAgICAgIGJ1ZiA9IFB5QXJyYXlfREFUQShhcnIpOwogICAgICAgIG4gPSBzdHJubGVuKGJ1Ziwgbik7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBpZiAoUHlCeXRlc19DaGVjayhvYmopKSB7CiAgICAgICAgICAgIHRtcCA9IG9iajsKICAgICAgICAgICAgUHlfSU5DUkVGKHRtcCk7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKFB5VW5pY29kZV9DaGVjayhvYmopKSB7CiAgICAgICAgICAgIHRtcCA9IFB5VW5pY29kZV9Bc0FTQ0lJU3RyaW5nKG9iaik7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBQeU9iamVjdCAqdG1wMjsKICAgICAgICAgICAgdG1wMiA9IFB5T2JqZWN0X1N0cihvYmopOwogICAgICAgICAgICBpZiAodG1wMikgewogICAgICAgICAgICAgICAgdG1wID0gUHlVbmljb2RlX0FzQVNDSUlTdHJpbmcodG1wMik7CiAgICAgICAgICAgICAgICBQeV9ERUNSRUYodG1wMik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICB0bXAgPSBOVUxMOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmICh0bXAgPT0gTlVMTCkgZ290byBjYXBpX2ZhaWw7CiAgICAgICAgbiA9IFB5Qnl0ZXNfR0VUX1NJWkUodG1wKTsKICAgICAgICBidWYgPSBQeUJ5dGVzX0FTX1NUUklORyh0bXApOwogICAgfQogICAgaWYgKCpsZW4gPT0gLTEpIHsKICAgICAgICAvKiBUT0RPOiBjaGFuZ2UgdGhlIHR5cGUgb2YgYGxlbmAgc28gdGhhdCB3ZSBjYW4gcmVtb3ZlIHRoaXMgKi8KICAgICAgICBpZiAobiA+IE5QWV9NQVhfSU5UKSB7CiAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9iamVjdCB0b28gbGFyZ2UgZm9yIGEgMzItYml0IGludCIpOwogICAgICAgICAgICBnb3RvIGNhcGlfZmFpbDsKICAgICAgICB9CiAgICAgICAgKmxlbiA9IG47CiAgICB9CiAgICBlbHNlIGlmICgqbGVuIDwgbikgewogICAgICAgIC8qIGRpc2NhcmQgdGhlIGxhc3QgKGxlbi1uKSBieXRlcyBvZiBpbnB1dCBidWYgKi8KICAgICAgICBuID0gKmxlbjsKICAgIH0KICAgIGlmIChuIDwgMCB8fCAqbGVuIDwgMCB8fCBidWYgPT0gTlVMTCkgewogICAgICAgIGdvdG8gY2FwaV9mYWlsOwogICAgfQogICAgU1RSSU5HTUFMTE9DKCpzdHIsICpsZW4pOyAgLy8gKnN0ciBpcyBhbGxvY2F0ZWQgd2l0aCBzaXplICgqbGVuICsgMSkKICAgIGlmIChuIDwgKmxlbikgewogICAgICAgIC8qCiAgICAgICAgICBQYWQgZml4ZWQtd2lkdGggc3RyaW5nIHdpdGggbnVsbHMuIFRoZSBjYWxsZXIgd2lsbCByZXBsYWNlCiAgICAgICAgICBudWxscyB3aXRoIGJsYW5rcyB3aGVuIHRoZSBjb3JyZXNwb25kaW5nIGFyZ3VtZW50IGlzIG5vdAogICAgICAgICAgaW50ZW50KGMpLgogICAgICAgICovCiAgICAgICAgbWVtc2V0KCpzdHIgKyBuLCAnXDAnLCAqbGVuIC0gbik7CiAgICB9CiAgICBTVFJJTkdDT1BZTigqc3RyLCBidWYsIG4pOwogICAgUHlfWERFQ1JFRih0bXApOwogICAgcmV0dXJuIDE7CmNhcGlfZmFpbDoKICAgIFB5X1hERUNSRUYodG1wKTsKICAgIHsKICAgICAgICBQeU9iamVjdCogZXJyID0gUHlFcnJfT2NjdXJyZWQoKTsKICAgICAgICBpZiAoZXJyID09IE5VTEwpIHsKICAgICAgICAgICAgZXJyID0gI21vZHVsZW5hbWUjX2Vycm9yOwogICAgICAgIH0KICAgICAgICBQeUVycl9TZXRTdHJpbmcoZXJyLCBlcnJtZXNzKTsKICAgIH0KICAgIHJldHVybiAwOwp9CmGPCAAAc3RhdGljIGludApjaGFyYWN0ZXJfZnJvbV9weW9iaihjaGFyYWN0ZXIqIHYsIFB5T2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKmVycm1lc3MpIHsKICAgIGlmIChQeUJ5dGVzX0NoZWNrKG9iaikpIHsKICAgICAgICAvKiBlbXB0eSBieXRlcyBoYXMgdHJhaWxpbmcgbnVsbCwgc28gZGVyZWZlcmVuY2luZyBpcyBhbHdheXMgc2FmZSAqLwogICAgICAgICp2ID0gUHlCeXRlc19BU19TVFJJTkcob2JqKVswXTsKICAgICAgICByZXR1cm4gMTsKICAgIH0gZWxzZSBpZiAoUHlVbmljb2RlX0NoZWNrKG9iaikpIHsKICAgICAgICBQeU9iamVjdCogdG1wID0gUHlVbmljb2RlX0FzQVNDSUlTdHJpbmcob2JqKTsKICAgICAgICBpZiAodG1wICE9IE5VTEwpIHsKICAgICAgICAgICAgKnYgPSBQeUJ5dGVzX0FTX1NUUklORyh0bXApWzBdOwogICAgICAgICAgICBQeV9ERUNSRUYodG1wKTsKICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgfQogICAgfSBlbHNlIGlmIChQeUFycmF5X0NoZWNrKG9iaikpIHsKICAgICAgICBQeUFycmF5T2JqZWN0KiBhcnIgPSAoUHlBcnJheU9iamVjdCopb2JqOwogICAgICAgIGlmIChGMlBZX0FSUkFZX0lTX0NIQVJBQ1RFUl9DT01QQVRJQkxFKGFycikpIHsKICAgICAgICAgICAgKnYgPSBQeUFycmF5X0JZVEVTKGFycilbMF07CiAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgIH0gZWxzZSBpZiAoRjJQWV9JU19VTklDT0RFX0FSUkFZKGFycikpIHsKICAgICAgICAgICAgLy8gVE9ETzogdXBkYXRlIHdoZW4gbnVtcHkgd2lsbCBzdXBwb3J0IDEtYnl0ZSBhbmQKICAgICAgICAgICAgLy8gMi1ieXRlIHVuaWNvZGUgZHR5cGVzCiAgICAgICAgICAgIFB5T2JqZWN0KiB0bXAgPSBQeVVuaWNvZGVfRnJvbUtpbmRBbmREYXRhKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfNEJZVEVfS0lORCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlBcnJheV9CWVRFUyhhcnIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUHlBcnJheV9OQllURVMoYXJyKT4wPzE6MCkpOwogICAgICAgICAgICBpZiAodG1wICE9IE5VTEwpIHsKICAgICAgICAgICAgICAgIGlmIChjaGFyYWN0ZXJfZnJvbV9weW9iaih2LCB0bXAsIGVycm1lc3MpKSB7CiAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHRtcCk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBQeV9ERUNSRUYodG1wKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0gZWxzZSBpZiAoUHlTZXF1ZW5jZV9DaGVjayhvYmopKSB7CiAgICAgICAgUHlPYmplY3QqIHRtcCA9IFB5U2VxdWVuY2VfR2V0SXRlbShvYmosMCk7CiAgICAgICAgaWYgKHRtcCAhPSBOVUxMKSB7CiAgICAgICAgICAgIGlmIChjaGFyYWN0ZXJfZnJvbV9weW9iaih2LCB0bXAsIGVycm1lc3MpKSB7CiAgICAgICAgICAgICAgICBQeV9ERUNSRUYodG1wKTsKICAgICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICAgICB9CiAgICAgICAgICAgIFB5X0RFQ1JFRih0bXApOwogICAgICAgIH0KICAgIH0KICAgIHsKICAgICAgICAvKiBUT0RPOiBUaGlzIGVycm9yIChhbmQgbW9zdCBvdGhlcikgZXJyb3IgaGFuZGxpbmcgbmVlZHMgY2xlYW5pbmcuICovCiAgICAgICAgY2hhciBtZXNzW0YyUFlfTUVTU0FHRV9CVUZGRVJfU0laRV07CiAgICAgICAgc3RyY3B5KG1lc3MsIGVycm1lc3MpOwogICAgICAgIFB5T2JqZWN0KiBlcnIgPSBQeUVycl9PY2N1cnJlZCgpOwogICAgICAgIGlmIChlcnIgPT0gTlVMTCkgewogICAgICAgICAgICBlcnIgPSBQeUV4Y19UeXBlRXJyb3I7CiAgICAgICAgICAgIFB5X0lOQ1JFRihlcnIpOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgUHlfSU5DUkVGKGVycik7CiAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CiAgICAgICAgfQogICAgICAgIHNwcmludGYobWVzcyArIHN0cmxlbihtZXNzKSwKICAgICAgICAgICAgICAgICIgLS0gZXhwZWN0ZWQgc3RyfGJ5dGVzfHNlcXVlbmNlLW9mLXN0ci1vci1ieXRlcywgZ290ICIpOwogICAgICAgIGYycHlfZGVzY3JpYmUob2JqLCBtZXNzICsgc3RybGVuKG1lc3MpKTsKICAgICAgICBQeUVycl9TZXRTdHJpbmcoZXJyLCBtZXNzKTsKICAgICAgICBQeV9ERUNSRUYoZXJyKTsKICAgIH0KICAgIHJldHVybiAwOwp9CtoUY2hhcmFjdGVyX2Zyb21fcHlvYmraDmludF9mcm9tX3B5b2Jq2g9jaGFyX2Zyb21fcHlvYmp6w3N0YXRpYyBpbnQKY2hhcl9mcm9tX3B5b2JqKGNoYXIqIHYsIFB5T2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKmVycm1lc3MpIHsKICAgIGludCBpID0gMDsKICAgIGlmIChpbnRfZnJvbV9weW9iaigmaSwgb2JqLCBlcnJtZXNzKSkgewogICAgICAgICp2ID0gKGNoYXIpaTsKICAgICAgICByZXR1cm4gMTsKICAgIH0KICAgIHJldHVybiAwOwp9CtoWc2lnbmVkX2NoYXJfZnJvbV9weW9ianrYc3RhdGljIGludApzaWduZWRfY2hhcl9mcm9tX3B5b2JqKHNpZ25lZF9jaGFyKiB2LCBQeU9iamVjdCAqb2JqLCBjb25zdCBjaGFyICplcnJtZXNzKSB7CiAgICBpbnQgaSA9IDA7CiAgICBpZiAoaW50X2Zyb21fcHlvYmooJmksIG9iaiwgZXJybWVzcykpIHsKICAgICAgICAqdiA9IChzaWduZWRfY2hhcilpOwogICAgICAgIHJldHVybiAxOwogICAgfQogICAgcmV0dXJuIDA7Cn0K2hBzaG9ydF9mcm9tX3B5b2JqesZzdGF0aWMgaW50CnNob3J0X2Zyb21fcHlvYmooc2hvcnQqIHYsIFB5T2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKmVycm1lc3MpIHsKICAgIGludCBpID0gMDsKICAgIGlmIChpbnRfZnJvbV9weW9iaigmaSwgb2JqLCBlcnJtZXNzKSkgewogICAgICAgICp2ID0gKHNob3J0KWk7CiAgICAgICAgcmV0dXJuIDE7CiAgICB9CiAgICByZXR1cm4gMDsKfQph/gMAAHN0YXRpYyBpbnQKaW50X2Zyb21fcHlvYmooaW50KiB2LCBQeU9iamVjdCAqb2JqLCBjb25zdCBjaGFyICplcnJtZXNzKQp7CiAgICBQeU9iamVjdCogdG1wID0gTlVMTDsKCiAgICBpZiAoUHlMb25nX0NoZWNrKG9iaikpIHsKICAgICAgICAqdiA9IE5weV9fUHlMb25nX0FzSW50KG9iaik7CiAgICAgICAgcmV0dXJuICEoKnYgPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSk7CiAgICB9CgogICAgdG1wID0gUHlOdW1iZXJfTG9uZyhvYmopOwogICAgaWYgKHRtcCkgewogICAgICAgICp2ID0gTnB5X19QeUxvbmdfQXNJbnQodG1wKTsKICAgICAgICBQeV9ERUNSRUYodG1wKTsKICAgICAgICByZXR1cm4gISgqdiA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKTsKICAgIH0KCiAgICBpZiAoUHlDb21wbGV4X0NoZWNrKG9iaikpIHsKICAgICAgICBQeUVycl9DbGVhcigpOwogICAgICAgIHRtcCA9IFB5T2JqZWN0X0dldEF0dHJTdHJpbmcob2JqLCJyZWFsIik7CiAgICB9CiAgICBlbHNlIGlmIChQeUJ5dGVzX0NoZWNrKG9iaikgfHwgUHlVbmljb2RlX0NoZWNrKG9iaikpIHsKICAgICAgICAvKnBhc3MqLzsKICAgIH0KICAgIGVsc2UgaWYgKFB5U2VxdWVuY2VfQ2hlY2sob2JqKSkgewogICAgICAgIFB5RXJyX0NsZWFyKCk7CiAgICAgICAgdG1wID0gUHlTZXF1ZW5jZV9HZXRJdGVtKG9iaiwgMCk7CiAgICB9CgogICAgaWYgKHRtcCkgewogICAgICAgIGlmIChpbnRfZnJvbV9weW9iaih2LCB0bXAsIGVycm1lc3MpKSB7CiAgICAgICAgICAgIFB5X0RFQ1JFRih0bXApOwogICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICB9CiAgICAgICAgUHlfREVDUkVGKHRtcCk7CiAgICB9CgogICAgewogICAgICAgIFB5T2JqZWN0KiBlcnIgPSBQeUVycl9PY2N1cnJlZCgpOwogICAgICAgIGlmIChlcnIgPT0gTlVMTCkgewogICAgICAgICAgICBlcnIgPSAjbW9kdWxlbmFtZSNfZXJyb3I7CiAgICAgICAgfQogICAgICAgIFB5RXJyX1NldFN0cmluZyhlcnIsIGVycm1lc3MpOwogICAgfQogICAgcmV0dXJuIDA7Cn0KYfgDAABzdGF0aWMgaW50CmxvbmdfZnJvbV9weW9iaihsb25nKiB2LCBQeU9iamVjdCAqb2JqLCBjb25zdCBjaGFyICplcnJtZXNzKSB7CiAgICBQeU9iamVjdCogdG1wID0gTlVMTDsKCiAgICBpZiAoUHlMb25nX0NoZWNrKG9iaikpIHsKICAgICAgICAqdiA9IFB5TG9uZ19Bc0xvbmcob2JqKTsKICAgICAgICByZXR1cm4gISgqdiA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKTsKICAgIH0KCiAgICB0bXAgPSBQeU51bWJlcl9Mb25nKG9iaik7CiAgICBpZiAodG1wKSB7CiAgICAgICAgKnYgPSBQeUxvbmdfQXNMb25nKHRtcCk7CiAgICAgICAgUHlfREVDUkVGKHRtcCk7CiAgICAgICAgcmV0dXJuICEoKnYgPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSk7CiAgICB9CgogICAgaWYgKFB5Q29tcGxleF9DaGVjayhvYmopKSB7CiAgICAgICAgUHlFcnJfQ2xlYXIoKTsKICAgICAgICB0bXAgPSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKG9iaiwicmVhbCIpOwogICAgfQogICAgZWxzZSBpZiAoUHlCeXRlc19DaGVjayhvYmopIHx8IFB5VW5pY29kZV9DaGVjayhvYmopKSB7CiAgICAgICAgLypwYXNzKi87CiAgICB9CiAgICBlbHNlIGlmIChQeVNlcXVlbmNlX0NoZWNrKG9iaikpIHsKICAgICAgICBQeUVycl9DbGVhcigpOwogICAgICAgIHRtcCA9IFB5U2VxdWVuY2VfR2V0SXRlbShvYmosIDApOwogICAgfQoKICAgIGlmICh0bXApIHsKICAgICAgICBpZiAobG9uZ19mcm9tX3B5b2JqKHYsIHRtcCwgZXJybWVzcykpIHsKICAgICAgICAgICAgUHlfREVDUkVGKHRtcCk7CiAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgIH0KICAgICAgICBQeV9ERUNSRUYodG1wKTsKICAgIH0KICAgIHsKICAgICAgICBQeU9iamVjdCogZXJyID0gUHlFcnJfT2NjdXJyZWQoKTsKICAgICAgICBpZiAoZXJyID09IE5VTEwpIHsKICAgICAgICAgICAgZXJyID0gI21vZHVsZW5hbWUjX2Vycm9yOwogICAgICAgIH0KICAgICAgICBQeUVycl9TZXRTdHJpbmcoZXJyLCBlcnJtZXNzKTsKICAgIH0KICAgIHJldHVybiAwOwp9CtoPbG9uZ19mcm9tX3B5b2Jq2hRsb25nX2xvbmdfZnJvbV9weW9iamEOBAAAc3RhdGljIGludApsb25nX2xvbmdfZnJvbV9weW9iaihsb25nX2xvbmcqIHYsIFB5T2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKmVycm1lc3MpCnsKICAgIFB5T2JqZWN0KiB0bXAgPSBOVUxMOwoKICAgIGlmIChQeUxvbmdfQ2hlY2sob2JqKSkgewogICAgICAgICp2ID0gUHlMb25nX0FzTG9uZ0xvbmcob2JqKTsKICAgICAgICByZXR1cm4gISgqdiA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKTsKICAgIH0KCiAgICB0bXAgPSBQeU51bWJlcl9Mb25nKG9iaik7CiAgICBpZiAodG1wKSB7CiAgICAgICAgKnYgPSBQeUxvbmdfQXNMb25nTG9uZyh0bXApOwogICAgICAgIFB5X0RFQ1JFRih0bXApOwogICAgICAgIHJldHVybiAhKCp2ID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpOwogICAgfQoKICAgIGlmIChQeUNvbXBsZXhfQ2hlY2sob2JqKSkgewogICAgICAgIFB5RXJyX0NsZWFyKCk7CiAgICAgICAgdG1wID0gUHlPYmplY3RfR2V0QXR0clN0cmluZyhvYmosInJlYWwiKTsKICAgIH0KICAgIGVsc2UgaWYgKFB5Qnl0ZXNfQ2hlY2sob2JqKSB8fCBQeVVuaWNvZGVfQ2hlY2sob2JqKSkgewogICAgICAgIC8qcGFzcyovOwogICAgfQogICAgZWxzZSBpZiAoUHlTZXF1ZW5jZV9DaGVjayhvYmopKSB7CiAgICAgICAgUHlFcnJfQ2xlYXIoKTsKICAgICAgICB0bXAgPSBQeVNlcXVlbmNlX0dldEl0ZW0ob2JqLCAwKTsKICAgIH0KCiAgICBpZiAodG1wKSB7CiAgICAgICAgaWYgKGxvbmdfbG9uZ19mcm9tX3B5b2JqKHYsIHRtcCwgZXJybWVzcykpIHsKICAgICAgICAgICAgUHlfREVDUkVGKHRtcCk7CiAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgIH0KICAgICAgICBQeV9ERUNSRUYodG1wKTsKICAgIH0KICAgIHsKICAgICAgICBQeU9iamVjdCogZXJyID0gUHlFcnJfT2NjdXJyZWQoKTsKICAgICAgICBpZiAoZXJyID09IE5VTEwpIHsKICAgICAgICAgICAgZXJyID0gI21vZHVsZW5hbWUjX2Vycm9yOwogICAgICAgIH0KICAgICAgICBQeUVycl9TZXRTdHJpbmcoZXJyLGVycm1lc3MpOwogICAgfQogICAgcmV0dXJuIDA7Cn0K2hFkb3VibGVfZnJvbV9weW9iatoWbG9uZ19kb3VibGVfZnJvbV9weW9iamEoAgAAc3RhdGljIGludApsb25nX2RvdWJsZV9mcm9tX3B5b2JqKGxvbmdfZG91YmxlKiB2LCBQeU9iamVjdCAqb2JqLCBjb25zdCBjaGFyICplcnJtZXNzKQp7CiAgICBkb3VibGUgZD0wOwogICAgaWYgKFB5QXJyYXlfQ2hlY2tTY2FsYXIob2JqKSl7CiAgICAgICAgaWYgUHlBcnJheV9Jc1NjYWxhcihvYmosIExvbmdEb3VibGUpIHsKICAgICAgICAgICAgUHlBcnJheV9TY2FsYXJBc0N0eXBlKG9iaiwgdik7CiAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChQeUFycmF5X0NoZWNrKG9iaikgJiYgUHlBcnJheV9UWVBFKG9iaikgPT0gTlBZX0xPTkdET1VCTEUpIHsKICAgICAgICAgICAgKCp2KSA9ICooKG5weV9sb25nZG91YmxlICopUHlBcnJheV9EQVRBKG9iaikpOwogICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICB9CiAgICB9CiAgICBpZiAoZG91YmxlX2Zyb21fcHlvYmooJmQsIG9iaiwgZXJybWVzcykpIHsKICAgICAgICAqdiA9IChsb25nX2RvdWJsZSlkOwogICAgICAgIHJldHVybiAxOwogICAgfQogICAgcmV0dXJuIDA7Cn0KYcoDAABzdGF0aWMgaW50CmRvdWJsZV9mcm9tX3B5b2JqKGRvdWJsZSogdiwgUHlPYmplY3QgKm9iaiwgY29uc3QgY2hhciAqZXJybWVzcykKewogICAgUHlPYmplY3QqIHRtcCA9IE5VTEw7CiAgICBpZiAoUHlGbG9hdF9DaGVjayhvYmopKSB7CiAgICAgICAgKnYgPSBQeUZsb2F0X0FzRG91YmxlKG9iaik7CiAgICAgICAgcmV0dXJuICEoKnYgPT0gLTEuMCAmJiBQeUVycl9PY2N1cnJlZCgpKTsKICAgIH0KCiAgICB0bXAgPSBQeU51bWJlcl9GbG9hdChvYmopOwogICAgaWYgKHRtcCkgewogICAgICAgICp2ID0gUHlGbG9hdF9Bc0RvdWJsZSh0bXApOwogICAgICAgIFB5X0RFQ1JFRih0bXApOwogICAgICAgIHJldHVybiAhKCp2ID09IC0xLjAgJiYgUHlFcnJfT2NjdXJyZWQoKSk7CiAgICB9CgogICAgaWYgKFB5Q29tcGxleF9DaGVjayhvYmopKSB7CiAgICAgICAgUHlFcnJfQ2xlYXIoKTsKICAgICAgICB0bXAgPSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKG9iaiwicmVhbCIpOwogICAgfQogICAgZWxzZSBpZiAoUHlCeXRlc19DaGVjayhvYmopIHx8IFB5VW5pY29kZV9DaGVjayhvYmopKSB7CiAgICAgICAgLypwYXNzKi87CiAgICB9CiAgICBlbHNlIGlmIChQeVNlcXVlbmNlX0NoZWNrKG9iaikpIHsKICAgICAgICBQeUVycl9DbGVhcigpOwogICAgICAgIHRtcCA9IFB5U2VxdWVuY2VfR2V0SXRlbShvYmosIDApOwogICAgfQoKICAgIGlmICh0bXApIHsKICAgICAgICBpZiAoZG91YmxlX2Zyb21fcHlvYmoodix0bXAsZXJybWVzcykpIHtQeV9ERUNSRUYodG1wKTsgcmV0dXJuIDE7fQogICAgICAgIFB5X0RFQ1JFRih0bXApOwogICAgfQogICAgewogICAgICAgIFB5T2JqZWN0KiBlcnIgPSBQeUVycl9PY2N1cnJlZCgpOwogICAgICAgIGlmIChlcnI9PU5VTEwpIGVyciA9ICNtb2R1bGVuYW1lI19lcnJvcjsKICAgICAgICBQeUVycl9TZXRTdHJpbmcoZXJyLGVycm1lc3MpOwogICAgfQogICAgcmV0dXJuIDA7Cn0K2hBmbG9hdF9mcm9tX3B5b2JqespzdGF0aWMgaW50CmZsb2F0X2Zyb21fcHlvYmooZmxvYXQqIHYsIFB5T2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKmVycm1lc3MpCnsKICAgIGRvdWJsZSBkPTAuMDsKICAgIGlmIChkb3VibGVfZnJvbV9weW9iaigmZCxvYmosZXJybWVzcykpIHsKICAgICAgICAqdiA9IChmbG9hdClkOwogICAgICAgIHJldHVybiAxOwogICAgfQogICAgcmV0dXJuIDA7Cn0KKQNyGQAAAHIYAAAA2hljb21wbGV4X2RvdWJsZV9mcm9tX3B5b2Jq2h5jb21wbGV4X2xvbmdfZG91YmxlX2Zyb21fcHlvYmphyAIAAHN0YXRpYyBpbnQKY29tcGxleF9sb25nX2RvdWJsZV9mcm9tX3B5b2JqKGNvbXBsZXhfbG9uZ19kb3VibGUqIHYsIFB5T2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKmVycm1lc3MpCnsKICAgIGNvbXBsZXhfZG91YmxlIGNkID0gezAuMCwwLjB9OwogICAgaWYgKFB5QXJyYXlfQ2hlY2tTY2FsYXIob2JqKSl7CiAgICAgICAgaWYgUHlBcnJheV9Jc1NjYWxhcihvYmosIENMb25nRG91YmxlKSB7CiAgICAgICAgICAgIFB5QXJyYXlfU2NhbGFyQXNDdHlwZShvYmosIHYpOwogICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAoUHlBcnJheV9DaGVjayhvYmopICYmIFB5QXJyYXlfVFlQRShvYmopPT1OUFlfQ0xPTkdET1VCTEUpIHsKICAgICAgICAgICAgKCp2KS5yID0gKChucHlfY2xvbmdkb3VibGUgKilQeUFycmF5X0RBVEEob2JqKSktPnJlYWw7CiAgICAgICAgICAgICgqdikuaSA9ICgobnB5X2Nsb25nZG91YmxlICopUHlBcnJheV9EQVRBKG9iaikpLT5pbWFnOwogICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICB9CiAgICB9CiAgICBpZiAoY29tcGxleF9kb3VibGVfZnJvbV9weW9iaigmY2Qsb2JqLGVycm1lc3MpKSB7CiAgICAgICAgKCp2KS5yID0gKGxvbmdfZG91YmxlKWNkLnI7CiAgICAgICAgKCp2KS5pID0gKGxvbmdfZG91YmxlKWNkLmk7CiAgICAgICAgcmV0dXJuIDE7CiAgICB9CiAgICByZXR1cm4gMDsKfQpyVAAAAGHqCAAAc3RhdGljIGludApjb21wbGV4X2RvdWJsZV9mcm9tX3B5b2JqKGNvbXBsZXhfZG91YmxlKiB2LCBQeU9iamVjdCAqb2JqLCBjb25zdCBjaGFyICplcnJtZXNzKSB7CiAgICBQeV9jb21wbGV4IGM7CiAgICBpZiAoUHlDb21wbGV4X0NoZWNrKG9iaikpIHsKICAgICAgICBjID0gUHlDb21wbGV4X0FzQ0NvbXBsZXgob2JqKTsKICAgICAgICAoKnYpLnIgPSBjLnJlYWw7CiAgICAgICAgKCp2KS5pID0gYy5pbWFnOwogICAgICAgIHJldHVybiAxOwogICAgfQogICAgaWYgKFB5QXJyYXlfSXNTY2FsYXIob2JqLCBDb21wbGV4RmxvYXRpbmcpKSB7CiAgICAgICAgaWYgKFB5QXJyYXlfSXNTY2FsYXIob2JqLCBDRmxvYXQpKSB7CiAgICAgICAgICAgIG5weV9jZmxvYXQgbmV3OwogICAgICAgICAgICBQeUFycmF5X1NjYWxhckFzQ3R5cGUob2JqLCAmbmV3KTsKICAgICAgICAgICAgKCp2KS5yID0gKGRvdWJsZSluZXcucmVhbDsKICAgICAgICAgICAgKCp2KS5pID0gKGRvdWJsZSluZXcuaW1hZzsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAoUHlBcnJheV9Jc1NjYWxhcihvYmosIENMb25nRG91YmxlKSkgewogICAgICAgICAgICBucHlfY2xvbmdkb3VibGUgbmV3OwogICAgICAgICAgICBQeUFycmF5X1NjYWxhckFzQ3R5cGUob2JqLCAmbmV3KTsKICAgICAgICAgICAgKCp2KS5yID0gKGRvdWJsZSluZXcucmVhbDsKICAgICAgICAgICAgKCp2KS5pID0gKGRvdWJsZSluZXcuaW1hZzsKICAgICAgICB9CiAgICAgICAgZWxzZSB7IC8qIGlmIChQeUFycmF5X0lzU2NhbGFyKG9iaiwgQ0RvdWJsZSkpICovCiAgICAgICAgICAgIFB5QXJyYXlfU2NhbGFyQXNDdHlwZShvYmosIHYpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gMTsKICAgIH0KICAgIGlmIChQeUFycmF5X0NoZWNrU2NhbGFyKG9iaikpIHsgLyogMC1kaW0gYXJyYXkgb3Igc3RpbGwgYXJyYXkgc2NhbGFyICovCiAgICAgICAgUHlBcnJheU9iamVjdCAqYXJyOwogICAgICAgIGlmIChQeUFycmF5X0NoZWNrKG9iaikpIHsKICAgICAgICAgICAgYXJyID0gKFB5QXJyYXlPYmplY3QgKilQeUFycmF5X0Nhc3QoKFB5QXJyYXlPYmplY3QgKilvYmosIE5QWV9DRE9VQkxFKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIGFyciA9IChQeUFycmF5T2JqZWN0ICopUHlBcnJheV9Gcm9tU2NhbGFyKG9iaiwgUHlBcnJheV9EZXNjckZyb21UeXBlKE5QWV9DRE9VQkxFKSk7CiAgICAgICAgfQogICAgICAgIGlmIChhcnIgPT0gTlVMTCkgewogICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICB9CiAgICAgICAgKCp2KS5yID0gKChucHlfY2RvdWJsZSAqKVB5QXJyYXlfREFUQShhcnIpKS0+cmVhbDsKICAgICAgICAoKnYpLmkgPSAoKG5weV9jZG91YmxlICopUHlBcnJheV9EQVRBKGFycikpLT5pbWFnOwogICAgICAgIFB5X0RFQ1JFRihhcnIpOwogICAgICAgIHJldHVybiAxOwogICAgfQogICAgLyogUHl0aG9uIGRvZXMgbm90IHByb3ZpZGUgUHlOdW1iZXJfQ29tcGxleCBmdW5jdGlvbiA6LSggKi8KICAgICgqdikuaSA9IDAuMDsKICAgIGlmIChQeUZsb2F0X0NoZWNrKG9iaikpIHsKICAgICAgICAoKnYpLnIgPSBQeUZsb2F0X0FzRG91YmxlKG9iaik7CiAgICAgICAgcmV0dXJuICEoKCp2KS5yID09IC0xLjAgJiYgUHlFcnJfT2NjdXJyZWQoKSk7CiAgICB9CiAgICBpZiAoUHlMb25nX0NoZWNrKG9iaikpIHsKICAgICAgICAoKnYpLnIgPSBQeUxvbmdfQXNEb3VibGUob2JqKTsKICAgICAgICByZXR1cm4gISgoKnYpLnIgPT0gLTEuMCAmJiBQeUVycl9PY2N1cnJlZCgpKTsKICAgIH0KICAgIGlmIChQeVNlcXVlbmNlX0NoZWNrKG9iaikgJiYgIShQeUJ5dGVzX0NoZWNrKG9iaikgfHwgUHlVbmljb2RlX0NoZWNrKG9iaikpKSB7CiAgICAgICAgUHlPYmplY3QgKnRtcCA9IFB5U2VxdWVuY2VfR2V0SXRlbShvYmosMCk7CiAgICAgICAgaWYgKHRtcCkgewogICAgICAgICAgICBpZiAoY29tcGxleF9kb3VibGVfZnJvbV9weW9iaih2LHRtcCxlcnJtZXNzKSkgewogICAgICAgICAgICAgICAgUHlfREVDUkVGKHRtcCk7CiAgICAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICAgICAgfQogICAgICAgICAgICBQeV9ERUNSRUYodG1wKTsKICAgICAgICB9CiAgICB9CiAgICB7CiAgICAgICAgUHlPYmplY3QqIGVyciA9IFB5RXJyX09jY3VycmVkKCk7CiAgICAgICAgaWYgKGVycj09TlVMTCkKICAgICAgICAgICAgZXJyID0gUHlFeGNfVHlwZUVycm9yOwogICAgICAgIFB5RXJyX1NldFN0cmluZyhlcnIsZXJybWVzcyk7CiAgICB9CiAgICByZXR1cm4gMDsKfQraGGNvbXBsZXhfZmxvYXRfZnJvbV9weW9iamEVAQAAc3RhdGljIGludApjb21wbGV4X2Zsb2F0X2Zyb21fcHlvYmooY29tcGxleF9mbG9hdCogdixQeU9iamVjdCAqb2JqLGNvbnN0IGNoYXIgKmVycm1lc3MpCnsKICAgIGNvbXBsZXhfZG91YmxlIGNkPXswLjAsMC4wfTsKICAgIGlmIChjb21wbGV4X2RvdWJsZV9mcm9tX3B5b2JqKCZjZCxvYmosZXJybWVzcykpIHsKICAgICAgICAoKnYpLnIgPSAoZmxvYXQpY2QucjsKICAgICAgICAoKnYpLmkgPSAoZmxvYXQpY2QuaTsKICAgICAgICByZXR1cm4gMTsKICAgIH0KICAgIHJldHVybiAwOwp9CmHXAgAAc3RhdGljIGludCB0cnlfcHlhcnJfZnJvbV9jaGFyYWN0ZXIoUHlPYmplY3QqIG9iaiwgY2hhcmFjdGVyKiB2KSB7CiAgICBQeUFycmF5T2JqZWN0ICphcnIgPSAoUHlBcnJheU9iamVjdCopb2JqOwogICAgaWYgKCFvYmopIHJldHVybiAtMjsKICAgIGlmIChQeUFycmF5X0NoZWNrKG9iaikpIHsKICAgICAgICBpZiAoRjJQWV9BUlJBWV9JU19DSEFSQUNURVJfQ09NUEFUSUJMRShhcnIpKSAgewogICAgICAgICAgICAqKGNoYXJhY3RlciAqKShQeUFycmF5X0RBVEEoYXJyKSkgPSAqdjsKICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgfQogICAgfQogICAgewogICAgICAgIGNoYXIgbWVzc1tGMlBZX01FU1NBR0VfQlVGRkVSX1NJWkVdOwogICAgICAgIFB5T2JqZWN0KiBlcnIgPSBQeUVycl9PY2N1cnJlZCgpOwogICAgICAgIGlmIChlcnIgPT0gTlVMTCkgewogICAgICAgICAgICBlcnIgPSBQeUV4Y19WYWx1ZUVycm9yOwogICAgICAgICAgICBzdHJjcHkobWVzcywgInRyeV9weWFycl9mcm9tX2NoYXJhY3RlciBmYWlsZWQiCiAgICAgICAgICAgICAgICAgICAgICAgICAiIC0tIGV4cGVjdGVkIGJ5dGVzIGFycmF5LXNjYWxhcnxhcnJheSwgZ290ICIpOwogICAgICAgICAgICBmMnB5X2Rlc2NyaWJlKG9iaiwgbWVzcyArIHN0cmxlbihtZXNzKSk7CiAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhlcnIsIG1lc3MpOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybiAwOwp9CtoYdHJ5X3B5YXJyX2Zyb21fY2hhcmFjdGVy2hN0cnlfcHlhcnJfZnJvbV9jaGFyelxzdGF0aWMgaW50IHRyeV9weWFycl9mcm9tX2NoYXIoUHlPYmplY3QqIG9iaixjaGFyKiB2KSB7CiAgICBUUllQWUFSUkFZVEVNUExBVEUoY2hhciwnYycpOwp9CtoadHJ5X3B5YXJyX2Zyb21fc2lnbmVkX2NoYXJ6d3N0YXRpYyBpbnQgdHJ5X3B5YXJyX2Zyb21fdW5zaWduZWRfY2hhcihQeU9iamVjdCogb2JqLHVuc2lnbmVkX2NoYXIqIHYpIHsKICAgIFRSWVBZQVJSQVlURU1QTEFURSh1bnNpZ25lZF9jaGFyLCdiJyk7Cn0K2hx0cnlfcHlhcnJfZnJvbV91bnNpZ25lZF9jaGFyenFzdGF0aWMgaW50IHRyeV9weWFycl9mcm9tX3NpZ25lZF9jaGFyKFB5T2JqZWN0KiBvYmosc2lnbmVkX2NoYXIqIHYpIHsKICAgIFRSWVBZQVJSQVlURU1QTEFURShzaWduZWRfY2hhciwnMScpOwp9CtoUdHJ5X3B5YXJyX2Zyb21fc2hvcnR6X3N0YXRpYyBpbnQgdHJ5X3B5YXJyX2Zyb21fc2hvcnQoUHlPYmplY3QqIG9iaixzaG9ydCogdikgewogICAgVFJZUFlBUlJBWVRFTVBMQVRFKHNob3J0LCdzJyk7Cn0K2hJ0cnlfcHlhcnJfZnJvbV9pbnR6WXN0YXRpYyBpbnQgdHJ5X3B5YXJyX2Zyb21faW50KFB5T2JqZWN0KiBvYmosaW50KiB2KSB7CiAgICBUUllQWUFSUkFZVEVNUExBVEUoaW50LCdpJyk7Cn0K2hN0cnlfcHlhcnJfZnJvbV9sb25nelxzdGF0aWMgaW50IHRyeV9weWFycl9mcm9tX2xvbmcoUHlPYmplY3QqIG9iaixsb25nKiB2KSB7CiAgICBUUllQWUFSUkFZVEVNUExBVEUobG9uZywnbCcpOwp9CikDcioAAAByMwAAAHIWAAAA2hh0cnlfcHlhcnJfZnJvbV9sb25nX2xvbmd6a3N0YXRpYyBpbnQgdHJ5X3B5YXJyX2Zyb21fbG9uZ19sb25nKFB5T2JqZWN0KiBvYmosbG9uZ19sb25nKiB2KSB7CiAgICBUUllQWUFSUkFZVEVNUExBVEUobG9uZ19sb25nLCdMJyk7Cn0K2hR0cnlfcHlhcnJfZnJvbV9mbG9hdHpfc3RhdGljIGludCB0cnlfcHlhcnJfZnJvbV9mbG9hdChQeU9iamVjdCogb2JqLGZsb2F0KiB2KSB7CiAgICBUUllQWUFSUkFZVEVNUExBVEUoZmxvYXQsJ2YnKTsKfQraFXRyeV9weWFycl9mcm9tX2RvdWJsZXpic3RhdGljIGludCB0cnlfcHlhcnJfZnJvbV9kb3VibGUoUHlPYmplY3QqIG9iaixkb3VibGUqIHYpIHsKICAgIFRSWVBZQVJSQVlURU1QTEFURShkb3VibGUsJ2QnKTsKfQopA3IwAAAAcjQAAAByGgAAANocdHJ5X3B5YXJyX2Zyb21fY29tcGxleF9mbG9hdHp2c3RhdGljIGludCB0cnlfcHlhcnJfZnJvbV9jb21wbGV4X2Zsb2F0KFB5T2JqZWN0KiBvYmosY29tcGxleF9mbG9hdCogdikgewogICAgVFJZQ09NUExFWFBZQVJSQVlURU1QTEFURShmbG9hdCwnRicpOwp9CikDci8AAAByNAAAAHIbAAAA2h10cnlfcHlhcnJfZnJvbV9jb21wbGV4X2RvdWJsZXp5c3RhdGljIGludCB0cnlfcHlhcnJfZnJvbV9jb21wbGV4X2RvdWJsZShQeU9iamVjdCogb2JqLGNvbXBsZXhfZG91YmxlKiB2KSB7CiAgICBUUllDT01QTEVYUFlBUlJBWVRFTVBMQVRFKGRvdWJsZSwnRCcpOwp9CikDch4AAAByJAAAAHIlAAAA2hFjcmVhdGVfY2JfYXJnbGlzdGFGEQAAc3RhdGljIGludApjcmVhdGVfY2JfYXJnbGlzdChQeU9iamVjdCogZnVuLCBQeVR1cGxlT2JqZWN0KiB4YSAsIGNvbnN0IGludCBtYXhub2ZhcmdzLAogICAgICAgICAgICAgICAgICBjb25zdCBpbnQgbm9mb3B0YXJncywgaW50ICpub2ZhcmdzLCBQeVR1cGxlT2JqZWN0ICoqYXJncywKICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZXJybWVzcykKewogICAgUHlPYmplY3QgKnRtcCA9IE5VTEw7CiAgICBQeU9iamVjdCAqdG1wX2Z1biA9IE5VTEw7CiAgICBQeV9zc2l6ZV90IHRvdCwgb3B0LCBleHQsIHNpeiwgaSwgZGkgPSAwOwogICAgQ0ZVTkNTTUVTUygiY3JlYXRlX2NiX2FyZ2xpc3RcbiIpOwogICAgdG90PW9wdD1leHQ9c2l6PTA7CiAgICAvKiBHZXQgdGhlIHRvdGFsIG51bWJlciBvZiBhcmd1bWVudHMgKi8KICAgIGlmIChQeUZ1bmN0aW9uX0NoZWNrKGZ1bikpIHsKICAgICAgICB0bXBfZnVuID0gZnVuOwogICAgICAgIFB5X0lOQ1JFRih0bXBfZnVuKTsKICAgIH0KICAgIGVsc2UgewogICAgICAgIGRpID0gMTsKICAgICAgICBpZiAoUHlPYmplY3RfSGFzQXR0clN0cmluZyhmdW4sImltX2Z1bmMiKSkgewogICAgICAgICAgICB0bXBfZnVuID0gUHlPYmplY3RfR2V0QXR0clN0cmluZyhmdW4sImltX2Z1bmMiKTsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAoUHlPYmplY3RfSGFzQXR0clN0cmluZyhmdW4sIl9fY2FsbF9fIikpIHsKICAgICAgICAgICAgdG1wID0gUHlPYmplY3RfR2V0QXR0clN0cmluZyhmdW4sIl9fY2FsbF9fIik7CiAgICAgICAgICAgIGlmIChQeU9iamVjdF9IYXNBdHRyU3RyaW5nKHRtcCwiaW1fZnVuYyIpKQogICAgICAgICAgICAgICAgdG1wX2Z1biA9IFB5T2JqZWN0X0dldEF0dHJTdHJpbmcodG1wLCJpbV9mdW5jIik7CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgdG1wX2Z1biA9IGZ1bjsgLyogYnVpbHQtaW4gZnVuY3Rpb24gKi8KICAgICAgICAgICAgICAgIFB5X0lOQ1JFRih0bXBfZnVuKTsKICAgICAgICAgICAgICAgIHRvdCA9IG1heG5vZmFyZ3M7CiAgICAgICAgICAgICAgICBpZiAoUHlDRnVuY3Rpb25fQ2hlY2soZnVuKSkgewogICAgICAgICAgICAgICAgICAgIC8qIEluIGNhc2UgdGhlIGZ1bmN0aW9uIGhhcyBhIGNvX2FyZ2NvdW50IChsaWtlIG9uIFB5UHkpICovCiAgICAgICAgICAgICAgICAgICAgZGkgPSAwOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKHhhICE9IE5VTEwpCiAgICAgICAgICAgICAgICAgICAgdG90ICs9IFB5VHVwbGVfU2l6ZSgoUHlPYmplY3QgKil4YSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgUHlfWERFQ1JFRih0bXApOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChQeUZvcnRyYW5fQ2hlY2soZnVuKSB8fCBQeUZvcnRyYW5fQ2hlY2sxKGZ1bikpIHsKICAgICAgICAgICAgdG90ID0gbWF4bm9mYXJnczsKICAgICAgICAgICAgaWYgKHhhICE9IE5VTEwpCiAgICAgICAgICAgICAgICB0b3QgKz0gUHlUdXBsZV9TaXplKChQeU9iamVjdCAqKXhhKTsKICAgICAgICAgICAgdG1wX2Z1biA9IGZ1bjsKICAgICAgICAgICAgUHlfSU5DUkVGKHRtcF9mdW4pOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChGMlB5Q2Fwc3VsZV9DaGVjayhmdW4pKSB7CiAgICAgICAgICAgIHRvdCA9IG1heG5vZmFyZ3M7CiAgICAgICAgICAgIGlmICh4YSAhPSBOVUxMKQogICAgICAgICAgICAgICAgZXh0ID0gUHlUdXBsZV9TaXplKChQeU9iamVjdCAqKXhhKTsKICAgICAgICAgICAgaWYoZXh0PjApIHsKICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCJleHRyYSBhcmd1bWVudHMgdHVwbGUgY2Fubm90IGJlIHVzZWQgd2l0aCBQeUNhcHN1bGUgY2FsbC1iYWNrXG4iKTsKICAgICAgICAgICAgICAgIGdvdG8gY2FwaV9mYWlsOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHRtcF9mdW4gPSBmdW47CiAgICAgICAgICAgIFB5X0lOQ1JFRih0bXBfZnVuKTsKICAgICAgICB9CiAgICB9CgogICAgaWYgKHRtcF9mdW4gPT0gTlVMTCkgewogICAgICAgIGZwcmludGYoc3RkZXJyLAogICAgICAgICAgICAgICAgIkNhbGwtYmFjayBhcmd1bWVudCBtdXN0IGJlIGZ1bmN0aW9ufGluc3RhbmNlfGluc3RhbmNlLl9fY2FsbF9ffGYycHktZnVuY3Rpb24gIgogICAgICAgICAgICAgICAgImJ1dCBnb3QgJXMuXG4iLAogICAgICAgICAgICAgICAgKChmdW4gPT0gTlVMTCkgPyAiTlVMTCIgOiBQeV9UWVBFKGZ1biktPnRwX25hbWUpKTsKICAgICAgICBnb3RvIGNhcGlfZmFpbDsKICAgIH0KCiAgICBpZiAoUHlPYmplY3RfSGFzQXR0clN0cmluZyh0bXBfZnVuLCJfX2NvZGVfXyIpKSB7CiAgICAgICAgaWYgKFB5T2JqZWN0X0hhc0F0dHJTdHJpbmcodG1wID0gUHlPYmplY3RfR2V0QXR0clN0cmluZyh0bXBfZnVuLCJfX2NvZGVfXyIpLCJjb19hcmdjb3VudCIpKSB7CiAgICAgICAgICAgIFB5T2JqZWN0ICp0bXBfYXJnY291bnQgPSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKHRtcCwiY29fYXJnY291bnQiKTsKICAgICAgICAgICAgUHlfREVDUkVGKHRtcCk7CiAgICAgICAgICAgIGlmICh0bXBfYXJnY291bnQgPT0gTlVMTCkgewogICAgICAgICAgICAgICAgZ290byBjYXBpX2ZhaWw7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdG90ID0gUHlMb25nX0FzU3NpemVfdCh0bXBfYXJnY291bnQpIC0gZGk7CiAgICAgICAgICAgIFB5X0RFQ1JFRih0bXBfYXJnY291bnQpOwogICAgICAgIH0KICAgIH0KICAgIC8qIEdldCB0aGUgbnVtYmVyIG9mIG9wdGlvbmFsIGFyZ3VtZW50cyAqLwogICAgaWYgKFB5T2JqZWN0X0hhc0F0dHJTdHJpbmcodG1wX2Z1biwiX19kZWZhdWx0c19fIikpIHsKICAgICAgICBpZiAoUHlUdXBsZV9DaGVjayh0bXAgPSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKHRtcF9mdW4sIl9fZGVmYXVsdHNfXyIpKSkKICAgICAgICAgICAgb3B0ID0gUHlUdXBsZV9TaXplKHRtcCk7CiAgICAgICAgUHlfWERFQ1JFRih0bXApOwogICAgfQogICAgLyogR2V0IHRoZSBudW1iZXIgb2YgZXh0cmEgYXJndW1lbnRzICovCiAgICBpZiAoeGEgIT0gTlVMTCkKICAgICAgICBleHQgPSBQeVR1cGxlX1NpemUoKFB5T2JqZWN0ICopeGEpOwogICAgLyogQ2FsY3VsYXRlIHRoZSBzaXplIG9mIGNhbGwtYmFja3MgYXJndW1lbnQgbGlzdCAqLwogICAgc2l6ID0gTUlOKG1heG5vZmFyZ3MrZXh0LHRvdCk7CiAgICAqbm9mYXJncyA9IE1BWCgwLHNpei1leHQpOwoKI2lmZGVmIERFQlVHQ0ZVTkNTCiAgICBmcHJpbnRmKHN0ZGVyciwKICAgICAgICAgICAgImRlYnVnLWNhcGk6Y3JlYXRlX2NiX2FyZ2xpc3Q6bWF4bm9mYXJncygtbm9mb3B0YXJncyksIgogICAgICAgICAgICAidG90LG9wdCxleHQsc2l6LG5vZmFyZ3MgPSAlZCgtJWQpLCAlemQsICV6ZCwgJXpkLCAlemQsICVkXG4iLAogICAgICAgICAgICBtYXhub2ZhcmdzLCBub2ZvcHRhcmdzLCB0b3QsIG9wdCwgZXh0LCBzaXosICpub2ZhcmdzKTsKI2VuZGlmCgogICAgaWYgKHNpeiA8IHRvdC1vcHQpIHsKICAgICAgICBmcHJpbnRmKHN0ZGVyciwKICAgICAgICAgICAgICAgICJjcmVhdGVfY2JfYXJnbGlzdDogRmFpbGVkIHRvIGJ1aWxkIGFyZ3VtZW50IGxpc3QgIgogICAgICAgICAgICAgICAgIihzaXopIHdpdGggZW5vdWdoIGFyZ3VtZW50cyAodG90LW9wdCkg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
Base64 mode: content will be decoded on save.
Save
Close
Exit & Reset
Directory Contents
Dirs: 0 × Files: 17
Delete Selected
Select All
Select None
Sort:
Name
Size
Modified
Enable drag-to-move
Name
Size
Perms
Modified
Actions
auxfuncs.cpython-311.pyc
38.01 KB
lrw-r--r--
2026-01-20 13:01:48
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
capi_maps.cpython-311.pyc
37.70 KB
lrw-r--r--
2026-01-20 13:01:48
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
cb_rules.cpython-311.pyc
23.89 KB
lrw-r--r--
2026-01-20 13:01:48
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
cfuncs.cpython-311.pyc
48.52 KB
lrw-r--r--
2026-01-20 13:01:48
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
common_rules.cpython-311.pyc
8.75 KB
lrw-r--r--
2026-01-20 13:01:48
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
crackfortran.cpython-311.pyc
165.27 KB
lrw-r--r--
2026-01-20 13:01:48
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
diagnose.cpython-311.pyc
8.13 KB
lrw-r--r--
2026-01-20 13:01:48
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
f2py2e.cpython-311.pyc
34.11 KB
lrw-r--r--
2026-01-20 13:01:48
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
f90mod_rules.cpython-311.pyc
13.70 KB
lrw-r--r--
2026-01-20 13:01:48
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
func2subr.cpython-311.pyc
13.35 KB
lrw-r--r--
2026-01-20 13:01:48
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
rules.cpython-311.pyc
57.52 KB
lrw-r--r--
2026-01-20 13:01:48
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
setup.cpython-311.pyc
2.75 KB
lrw-r--r--
2026-01-20 13:01:48
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
symbolic.cpython-311.pyc
83.56 KB
lrw-r--r--
2026-01-20 13:01:48
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
use_rules.cpython-311.pyc
4.89 KB
lrw-r--r--
2026-01-20 13:01:48
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
__init__.cpython-311.pyc
6.57 KB
lrw-r--r--
2026-01-20 13:01:48
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
__main__.cpython-311.pyc
303 B
lrw-r--r--
2026-01-20 13:01:48
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
__version__.cpython-311.pyc
274 B
lrw-r--r--
2026-01-20 13:01:48
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
Zip Selected
If ZipArchive is unavailable, a
.tar
will be created (no compression).