LyoKICogVW5pdCB0ZXN0IHN1aXRlIGZvciBsb2NhbGUgZnVuY3Rpb25zLgogKgogKiBDb3B5cmlnaHQgMjAxMCBQaW90ciBDYWJhbiBmb3IgQ29kZVdlYXZlcnMKICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCiAqLwoKI2luY2x1ZGUgPGxvY2FsZS5oPgoKI2luY2x1ZGUgIndpbmUvdGVzdC5oIgojaW5jbHVkZSAid2lubmxzLmgiCgpzdGF0aWMgQk9PTCAoX19jZGVjbCAqcF9fY3J0R2V0U3RyaW5nVHlwZVcpKERXT1JELCBEV09SRCwgY29uc3Qgd2NoYXJfdCosIGludCwgV09SRCopOwpzdGF0aWMgaW50IChfX2NkZWNsICpwbWVtY3B5X3MpKHZvaWQgKiwgc2l6ZV90LCB2b2lkKiwgc2l6ZV90KTsKCnN0YXRpYyB2b2lkIGluaXQodm9pZCkKewogICAgSE1PRFVMRSBobW9kID0gR2V0TW9kdWxlSGFuZGxlQSgibXN2Y3J0LmRsbCIpOwoKICAgIHBfX2NydEdldFN0cmluZ1R5cGVXID0gKHZvaWQqKUdldFByb2NBZGRyZXNzKGhtb2QsICJfX2NydEdldFN0cmluZ1R5cGVXIik7CiAgICBwbWVtY3B5X3MgPSAodm9pZCopR2V0UHJvY0FkZHJlc3MoaG1vZCwgIm1lbWNweV9zIik7Cn0KCnN0YXRpYyB2b2lkIHRlc3Rfc2V0bG9jYWxlKHZvaWQpCnsKICAgIHN0YXRpYyBjb25zdCBjaGFyIGxjX2FsbFtdID0gIkxDX0NPTExBVEU9QztMQ19DVFlQRT1DOyIKICAgICAgICAiTENfTU9ORVRBUlk9R3JlZWtfR3JlZWNlLjEyNTM7TENfTlVNRVJJQz1Qb2xpc2hfUG9sYW5kLjEyNTA7TENfVElNRT1DIjsKCiAgICBjaGFyICpyZXQsIGJ1ZlsxMDBdOwoKICAgIHJldCA9IHNldGxvY2FsZSgyMCwgIkMiKTsKICAgIG9rKHJldCA9PSBOVUxMLCAicmV0ID0gJXNcbiIsIHJldCk7CgogICAgcmV0ID0gc2V0bG9jYWxlKExDX0FMTCwgIiIpOwogICAgb2socmV0ICE9IE5VTEwsICJyZXQgPT0gTlVMTFxuIik7CgogICAgcmV0ID0gc2V0bG9jYWxlKExDX0FMTCwgIkMiKTsKICAgIG9rKCFzdHJjbXAocmV0LCAiQyIpLCAicmV0ID0gJXNcbiIsIHJldCk7CgogICAgcmV0ID0gc2V0bG9jYWxlKExDX0FMTCwgTlVMTCk7CiAgICBvayghc3RyY21wKHJldCwgIkMiKSwgInJldCA9ICVzXG4iLCByZXQpOwoKICAgIGlmKCFzZXRsb2NhbGUoTENfTlVNRVJJQywgIlBvbGlzaCIpCiAgICAgICAgICAgIHx8ICFzZXRsb2NhbGUoTENfTlVNRVJJQywgIkdyZWVrIikKICAgICAgICAgICAgfHwgIXNldGxvY2FsZShMQ19OVU1FUklDLCAiR2VybWFuIikKICAgICAgICAgICAgfHwgIXNldGxvY2FsZShMQ19OVU1FUklDLCAiRW5nbGlzaCIpKSB7CiAgICAgICAgd2luX3NraXAoIlN5c3RlbSB3aXRoIGxpbWl0ZWQgbG9jYWxlc1xuIik7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIHJldCA9IHNldGxvY2FsZShMQ19OVU1FUklDLCAiUG9saXNoIik7CiAgICBvayghc3RyY21wKHJldCwgIlBvbGlzaF9Qb2xhbmQuMTI1MCIpLCAicmV0ID0gJXNcbiIsIHJldCk7CgogICAgcmV0ID0gc2V0bG9jYWxlKExDX01PTkVUQVJZLCAiR3JlZWsiKTsKICAgIG9rKCFzdHJjbXAocmV0LCAiR3JlZWtfR3JlZWNlLjEyNTMiKSwgInJldCA9ICVzXG4iLCByZXQpOwoKICAgIHJldCA9IHNldGxvY2FsZShMQ19BTEwsIE5VTEwpOwogICAgb2soIXN0cmNtcChyZXQsIGxjX2FsbCksICJyZXQgPSAlc1xuIiwgcmV0KTsKCiAgICBzdHJjcHkoYnVmLCByZXQpOwogICAgcmV0ID0gc2V0bG9jYWxlKExDX0FMTCwgYnVmKTsKICAgIG9rKCFzdHJjbXAocmV0LCBsY19hbGwpLCAicmV0ID0gJXNcbiIsIHJldCk7CgogICAgcmV0ID0gc2V0bG9jYWxlKExDX0FMTCwgIkdlcm1hbiIpOwogICAgb2soIXN0cmNtcChyZXQsICJHZXJtYW5fR2VybWFueS4xMjUyIiksICJyZXQgPSAlc1xuIiwgcmV0KTsKCiAgICByZXQgPSBzZXRsb2NhbGUoTENfQUxMLCAiYW1lcmljYW4iKTsKICAgIG9rKHJldCAhPSBOVUxMIHx8IGJyb2tlbiAocmV0ID09IE5VTEwpLCAicmV0ID09IE5VTExcbiIpOwogICAgaWYocmV0KQogICAgICAgIG9rKCFzdHJjbXAocmV0LCAiRW5nbGlzaF9Vbml0ZWQgU3RhdGVzLjEyNTIiKSwgInJldCA9ICVzXG4iLCByZXQpOwoKICAgIHJldCA9IHNldGxvY2FsZShMQ19BTEwsICJhbWVyaWNhbiBlbmdsaXNoIik7CiAgICBvayhyZXQgIT0gTlVMTCB8fCBicm9rZW4gKHJldCA9PSBOVUxMKSwgInJldCA9PSBOVUxMXG4iKTsKICAgIGlmKHJldCkKICAgICAgICBvayghc3RyY21wKHJldCwgIkVuZ2xpc2hfVW5pdGVkIFN0YXRlcy4xMjUyIiksICJyZXQgPSAlc1xuIiwgcmV0KTsKCiAgICByZXQgPSBzZXRsb2NhbGUoTENfQUxMLCAiYW1lcmljYW4tZW5nbGlzaCIpOwogICAgb2socmV0ICE9IE5VTEwgfHwgYnJva2VuIChyZXQgPT0gTlVMTCksICJyZXQgPT0gTlVMTFxuIik7CiAgICBpZihyZXQpCiAgICAgICAgb2soIXN0cmNtcChyZXQsICJFbmdsaXNoX1VuaXRlZCBTdGF0ZXMuMTI1MiIpLCAicmV0ID0gJXNcbiIsIHJldCk7CgogICAgcmV0ID0gc2V0bG9jYWxlKExDX0FMTCwgImF1c3RyYWxpYW4iKTsKICAgIG9rKHJldCAhPSBOVUxMIHx8IGJyb2tlbiAocmV0ID09IE5VTEwpLCAicmV0ID09IE5VTExcbiIpOwogICAgaWYocmV0KQogICAgICAgIG9rKCFzdHJjbXAocmV0LCAiRW5nbGlzaF9BdXN0cmFsaWEuMTI1MiIpLCAicmV0ID0gJXNcbiIsIHJldCk7CgogICAgcmV0ID0gc2V0bG9jYWxlKExDX0FMTCwgImJlbGdpYW4iKTsKICAgIG9rKHJldCAhPSBOVUxMIHx8IGJyb2tlbiAocmV0ID09IE5VTEwpLCAicmV0ID09IE5VTExcbiIpOwogICAgaWYocmV0KQogICAgICAgIG9rKCFzdHJjbXAocmV0LCAiRHV0Y2hfQmVsZ2l1bS4xMjUyIiksICJyZXQgPSAlc1xuIiwgcmV0KTsKCiAgICByZXQgPSBzZXRsb2NhbGUoTENfQUxMLCAiY2FuYWRpYW4iKTsKICAgIG9rKHJldCAhPSBOVUxMIHx8IGJyb2tlbiAocmV0ID09IE5VTEwpLCAicmV0ID09IE5VTExcbiIpOwogICAgaWYocmV0KQogICAgICAgIG9rKCFzdHJjbXAocmV0LCAiRW5nbGlzaF9DYW5hZGEuMTI1MiIpLCAicmV0ID0gJXNcbiIsIHJldCk7CgogICAgcmV0ID0gc2V0bG9jYWxlKExDX0FMTCwgImNoaW5lc2UiKTsKICAgIG9rKHJldCAhPSBOVUxMIHx8IGJyb2tlbiAocmV0ID09IE5VTEwpLCAicmV0ID09IE5VTExcbiIpOwogICAgaWYocmV0KQogICAgICAgIHRvZG9fd2luZSBvayghc3RyY21wKHJldCwgIkNoaW5lc2UgKFNpbXBsaWZpZWQpX1Blb3BsZSdzIFJlcHVibGljIG9mIENoaW5hLjkzNiIpCiAgICAgICAgfHwgYnJva2VuKCFzdHJjbXAocmV0LCAiQ2hpbmVzZV9UYWl3YW4uOTUwIikpLCAicmV0ID0gJXNcbiIsIHJldCk7CgogICAgcmV0ID0gc2V0bG9jYWxlKExDX0FMTCwgImNoaW5lc2Utc2ltcGxpZmllZCIpOwogICAgb2socmV0ICE9IE5VTEwgfHwgYnJva2VuIChyZXQgPT0gTlVMTCksICJyZXQgPT0gTlVMTFxuIik7CiAgICBpZihyZXQpCiAgICAgICAgdG9kb193aW5lIG9rKCFzdHJjbXAocmV0LCAiQ2hpbmVzZSAoU2ltcGxpZmllZClfUGVvcGxlJ3MgUmVwdWJsaWMgb2YgQ2hpbmEuOTM2IikKICAgICAgICB8fCBicm9rZW4oIXN0cmNtcChyZXQsICJDaGluZXNlX1Blb3BsZSdzIFJlcHVibGljIG9mIENoaW5hLjkzNiIpKQogICAgICAgIHx8IGJyb2tlbighc3RyY21wKHJldCwgIkNoaW5lc2VfVGFpd2FuLjk1MCIpKSwgInJldCA9ICVzXG4iLCByZXQpOwoKICAgIHJldCA9IHNldGxvY2FsZShMQ19BTEwsICJjaGluZXNlLXRyYWRpdGlvbmFsIik7CiAgICBvayhyZXQgIT0gTlVMTCB8fCBicm9rZW4gKHJldCA9PSBOVUxMKSwgInJldCA9PSBOVUxMXG4iKTsKICAgIGlmKHJldCkKICAgICAgICB0b2RvX3dpbmUgb2soIXN0cmNtcChyZXQsICJDaGluZXNlIChUcmFkaXRpb25hbClfVGFpd2FuLjk1MCIpCiAgICAgICAgfHwgYnJva2VuKCFzdHJjbXAocmV0LCAiQ2hpbmVzZV9UYWl3YW4uOTUwIikpLCAicmV0ID0gJXNcbiIsIHJldCk7CgogICAgcmV0ID0gc2V0bG9jYWxlKExDX0FMTCwgImNocyIpOwogICAgb2socmV0ICE9IE5VTEwgfHwgYnJva2VuIChyZXQgPT0gTlVMTCksICJyZXQgPT0gTlVMTFxuIik7CiAgICBpZihyZXQpCiAgICAgICAgdG9kb193aW5lIG9rKCFzdHJjbXAocmV0LCAiQ2hpbmVzZSAoU2ltcGxpZmllZClfUGVvcGxlJ3MgUmVwdWJsaWMgb2YgQ2hpbmEuOTM2IikKICAgICAgICB8fCBicm9rZW4oIXN0cmNtcChyZXQsICJDaGluZXNlX1Blb3BsZSdzIFJlcHVibGljIG9mIENoaW5hLjkzNiIpKSwgInJldCA9ICVzXG4iLCByZXQpOwoKICAgIHJldCA9IHNldGxvY2FsZShMQ19BTEwsICJjaHQiKTsKICAgIG9rKHJldCAhPSBOVUxMIHx8IGJyb2tlbiAocmV0ID09IE5VTEwpLCAicmV0ID09IE5VTExcbiIpOwogICAgaWYocmV0KQogICAgICAgIHRvZG9fd2luZSBvayghc3RyY21wKHJldCwgIkNoaW5lc2UgKFRyYWRpdGlvbmFsKV9UYWl3YW4uOTUwIikKICAgICAgICB8fCBicm9rZW4oIXN0cmNtcChyZXQsICJDaGluZXNlX1RhaXdhbi45NTAiKSksICJyZXQgPSAlc1xuIiwgcmV0KTsKCiAgICByZXQgPSBzZXRsb2NhbGUoTENfQUxMLCAiY3N5Iik7CiAgICBvayhyZXQgIT0gTlVMTCB8fCBicm9rZW4gKHJldCA9PSBOVUxMKSwgInJldCA9PSBOVUxMXG4iKTsKICAgIGlmKHJldCkKICAgICAgICBvayghc3RyY21wKHJldCwgIkN6ZWNoX0N6ZWNoIFJlcHVibGljLjEyNTAiKSwgInJldCA9ICVzXG4iLCByZXQpOwoKICAgIHJldCA9IHNldGxvY2FsZShMQ19BTEwsICJjemVjaCIpOwogICAgb2socmV0ICE9IE5VTEwgfHwgYnJva2VuIChyZXQgPT0gTlVMTCksICJyZXQgPT0gTlVMTFxuIik7CiAgICBpZihyZXQpCiAgICAgICAgb2soIXN0cmNtcChyZXQsICJDemVjaF9DemVjaCBSZXB1YmxpYy4xMjUwIiksICJyZXQgPSAlc1xuIiwgcmV0KTsKCiAgICByZXQgPSBzZXRsb2NhbGUoTENfQUxMLCAiZGFuIik7CiAgICBvayhyZXQgIT0gTlVMTCB8fCBicm9rZW4gKHJldCA9PSBOVUxMKSwgInJldCA9PSBOVUxMXG4iKTsKICAgIGlmKHJldCkKICAgICAgICBvayghc3RyY21wKHJldCwgIkRhbmlzaF9EZW5tYXJrLjEyNTIiKSwgInJldCA9ICVzXG4iLCByZXQpOwoKICAgIHJldCA9IHNldGxvY2FsZShMQ19BTEwsICJkYW5pc2giKTsKICAgIG9rKHJldCAhPSBOVUxMIHx8IGJyb2tlbiAocmV0ID09IE5VTEwpLCAicmV0ID09IE5VTExcbiIpOwogICAgaWYocmV0KQogICAgICAgIG9rKCFzdHJjbXAocmV0LCAiRGFuaXNoX0Rlbm1hcmsuMTI1MiIpLCAicmV0ID0gJXNcbiIsIHJldCk7CgogICAgcmV0ID0gc2V0bG9jYWxlKExDX0FMTCwgImRlYSIpOwogICAgb2socmV0ICE9IE5VTEwgfHwgYnJva2VuIChyZXQgPT0gTlVMTCksICJyZXQgPT0gTlVMTFxuIik7CiAgICBpZihyZXQpCiAgICAgICAgb2soIXN0cmNtcChyZXQsICJHZXJtYW5fQXVzdHJpYS4xMjUyIiksICJyZXQgPSAlc1xuIiwgcmV0KTsKCiAgICByZXQgPSBzZXRsb2NhbGUoTENfQUxMLCAiZGVzIik7CiAgICBvayhyZXQgIT0gTlVMTCB8fCBicm9rZW4gKHJldCA9PSBOVUxMKSwgInJldCA9PSBOVUxMXG4iKTsKICAgIGlmKHJldCkKICAgICAgICBvayghc3RyY21wKHJldCwgIkdlcm1hbl9Td2l0emVybGFuZC4xMjUyIiksICJyZXQgPSAlc1xuIiwgcmV0KTsKCiAgICByZXQgPSBzZXRsb2NhbGUoTENfQUxMLCAiZGV1Iik7CiAgICBvayhyZXQgIT0gTlVMTCB8fCBicm9rZW4gKHJldCA9PSBOVUxMKSwgInJldCA9PSBOVUxMXG4iKTsKICAgIGlmKHJldCkKICAgICAgICBvayghc3RyY21wKHJldCwgIkdlcm1hbl9HZXJtYW55LjEyNTIiKSwgInJldCA9ICVzXG4iLCByZXQpOwoKICAgIHJldCA9IHNldGxvY2FsZShMQ19BTEwsICJkdXRjaCIpOwogICAgb2socmV0ICE9IE5VTEwgfHwgYnJva2VuIChyZXQgPT0gTlVMTCksICJyZXQgPT0gTlVMTFxuIik7CiAgICBpZihyZXQpCiAgICAgICAgb2soIXN0cmNtcChyZXQsICJEdXRjaF9OZXRoZXJsYW5kcy4xMjUyIiksICJyZXQgPSAlc1xuIiwgcmV0KTsKCiAgICByZXQgPSBzZXRsb2NhbGUoTENfQUxMLCAiZHV0Y2gtYmVsZ2lhbiIpOwogICAgb2socmV0ICE9IE5VTEwgfHwgYnJva2VuIChyZXQgPT0gTlVMTCksICJyZXQgPT0gTlVMTFxuIik7CiAgICBpZihyZXQpCiAgICAgICAgb2soIXN0cmNtcChyZXQsICJEdXRjaF9CZWxnaXVtLjEyNTIiKQogICAgICAgIHx8IGJyb2tlbighc3RyY21wKHJldCwgIkR1dGNoX05ldGhlcmxhbmRzLjEyNTIiKSksICJyZXQgPSAlc1xuIiwgcmV0KTsKCiAgICByZXQgPSBzZXRsb2NhbGUoTENfQUxMLCAiZW5hIik7CiAgICBvayhyZXQgIT0gTlVMTCB8fCBicm9rZW4gKHJldCA9PSBOVUxMKSwgInJldCA9PSBOVUxMXG4iKTsKICAgIGlmKHJldCkKICAgICAgICBvayghc3RyY21wKHJldCwgIkVuZ2xpc2hfQXVzdHJhbGlhLjEyNTIiKQogICAgICAgIHx8IGJyb2tlbighc3RyY21wKHJldCwgIkVuZ2xpc2hfVW5pdGVkIFN0YXRlcy4xMjUyIikpLCAicmV0ID0gJXNcbiIsIHJldCk7CgogICAgcmV0ID0gc2V0bG9jYWxlKExDX0FMTCwgImVsbCIpOwogICAgb2socmV0ICE9IE5VTEwgfHwgYnJva2VuIChyZXQgPT0gTlVMTCksICJyZXQgPT0gTlVMTFxuIik7CiAgICBpZihyZXQpCiAgICAgICAgb2soIXN0cmNtcChyZXQsICJHcmVla19HcmVlY2UuMTI1MyIpLCAicmV0ID0gJXNcbiIsIHJldCk7CgogICAgcmV0ID0gc2V0bG9jYWxlKExDX0FMTCwgImVuYyIpOwogICAgb2socmV0ICE9IE5VTEwgfHwgYnJva2VuIChyZXQgPT0gTlVMTCksICJyZXQgPT0gTlVMTFxuIik7CiAgICBpZihyZXQpCiAgICAgICAgb2soIXN0cmNtcChyZXQsICJFbmdsaXNoX0NhbmFkYS4xMjUyIikKICAgICAgICB8fCBicm9rZW4oIXN0cmNtcChyZXQsICJFbmdsaXNoX1VuaXRlZCBTdGF0ZXMuMTI1MiIpKSwgInJldCA9ICVzXG4iLCByZXQpOwoKICAgIHJldCA9IHNldGxvY2FsZShMQ19BTEwsICJlbmciKTsKICAgIG9rKHJldCAhPSBOVUxMIHx8IGJyb2tlbiAocmV0ID09IE5VTEwpLCAicmV0ID09IE5VTExcbiIpOwogICAgaWYocmV0KQogICAgICAgIG9rKCFzdHJjbXAocmV0LCAiRW5nbGlzaF9Vbml0ZWQgS2luZ2RvbS4xMjUyIikKICAgICAgICB8fCBicm9rZW4oIXN0cmNtcChyZXQsICJFbmdsaXNoX1VuaXRlZCBTdGF0ZXMuMTI1MiIpKSwgInJldCA9ICVzXG4iLCByZXQpOwoKICAgIHJldCA9IHNldGxvY2FsZShMQ19BTEwsICJlbnUiKTsKICAgIG9rKHJldCAhPSBOVUxMIHx8IGJyb2tlbiAocmV0ID09IE5VTEwpLCAicmV0ID09IE5VTExcbiIpOwogICAgaWYocmV0KQogICAgICAgIG9rKCFzdHJjbXAocmV0LCAiRW5nbGlzaF9Vbml0ZWQgU3RhdGVzLjEyNTIiKSwgInJldCA9ICVzXG4iLCByZXQpOwoKICAgIHJldCA9IHNldGxvY2FsZShMQ19BTEwsICJlbnoiKTsKICAgIG9rKHJldCAhPSBOVUxMIHx8IGJyb2tlbiAocmV0ID09IE5VTEwpLCAicmV0ID09IE5VTExcbiIpOwogICAgaWYocmV0KQogICAgICAgIG9rKCFzdHJjbXAocmV0LCAiRW5nbGlzaF9OZXcgWmVhbGFuZC4xMjUyIikKICAgICAgICB8fCBicm9rZW4oIXN0cmNtcChyZXQsICJFbmdsaXNoX1VuaXRlZCBTdGF0ZXMuMTI1MiIpKSwgInJldCA9ICVzXG4iLCByZXQpOwoKICAgIHJldCA9IHNldGxvY2FsZShMQ19BTEwsICJlbmdsaXNoIik7CiAgICBvayhyZXQgIT0gTlVMTCB8fCBicm9rZW4gKHJldCA9PSBOVUxMKSwgInJldCA9PSBOVUxMXG4iKTsKICAgIGlmKHJldCkKICAgICAgICBvayghc3RyY21wKHJldCwgIkVuZ2xpc2hfVW5pdGVkIFN0YXRlcy4xMjUyIiksICJyZXQgPSAlc1xuIiwgcmV0KTsKCiAgICByZXQgPSBzZXRsb2NhbGUoTENfQUxMLCAiZW5nbGlzaC1hbWVyaWNhbiIpOwogICAgb2socmV0ICE9IE5VTEwgfHwgYnJva2VuIChyZXQgPT0gTlVMTCksICJyZXQgPT0gTlVMTFxuIik7CiAgICBpZihyZXQpCiAgICAgICAgb2soIXN0cmNtcChyZXQsICJFbmdsaXNoX1VuaXRlZCBTdGF0ZXMuMTI1MiIpLCAicmV0ID0gJXNcbiIsIHJldCk7CgogICAgcmV0ID0gc2V0bG9jYWxlKExDX0FMTCwgImVuZ2xpc2gtYXVzIik7CiAgICBvayhyZXQgIT0gTlVMTCB8fCBicm9rZW4gKHJldCA9PSBOVUxMKSwgInJldCA9PSBOVUxMXG4iKTsKICAgIGlmKHJldCkKICAgICAgICBvayghc3RyY21wKHJldCwgIkVuZ2xpc2hfQXVzdHJhbGlhLjEyNTIiKQogICAgICAgIHx8IGJyb2tlbighc3RyY21wKHJldCwgIkVuZ2xpc2hfVW5pdGVkIFN0YXRlcy4xMjUyIikpLCAicmV0ID0gJXNcbiIsIHJldCk7CgogICAgcmV0ID0gc2V0bG9jYWxlKExDX0FMTCwgImVuZ2xpc2gtY2FuIik7CiAgICBvayhyZXQgIT0gTlVMTCB8fCBicm9rZW4gKHJldCA9PSBOVUxMKSwgInJldCA9PSBOVUxMXG4iKTsKICAgIGlmKHJldCkKICAgICAgICBvayghc3RyY21wKHJldCwgIkVuZ2xpc2hfQ2FuYWRhLjEyNTIiKQogICAgICAgIHx8IGJyb2tlbighc3RyY21wKHJldCwgIkVuZ2xpc2hfVW5pdGVkIFN0YXRlcy4xMjUyIikpLCAicmV0ID0gJXNcbiIsIHJldCk7CgogICAgcmV0ID0gc2V0bG9jYWxlKExDX0FMTCwgImVuZ2xpc2gtbnoiKTsKICAgIG9rKHJldCAhPSBOVUxMIHx8IGJyb2tlbiAocmV0ID09IE5VTEwpLCAicmV0ID09IE5VTExcbiIpOwogICAgaWYocmV0KQogICAgICAgIG9rKCFzdHJjbXAocmV0LCAiRW5nbGlzaF9OZXcgWmVhbGFuZC4xMjUyIikKICAgICAgICB8fCBicm9rZW4oIXN0cmNtcChyZXQsICJFbmdsaXNoX1VuaXRlZCBTdGF0ZXMuMTI1MiIpKSwgInJldCA9ICVzXG4iLCByZXQpOwoKICAgIHJldCA9IHNldGxvY2FsZShMQ19BTEwsICJlbmdsaXNoLXVrIik7CiAgICBvayhyZXQgIT0gTlVMTCB8fCBicm9rZW4gKHJldCA9PSBOVUxMKSwgInJldCA9PSBOVUxMXG4iKTsKICAgIGlmKHJldCkKICAgICAgICBvayghc3RyY21wKHJldCwgIkVuZ2xpc2hfVW5pdGVkIEtpbmdkb20uMTI1MiIpCiAgICAgICAgfHwgYnJva2VuKCFzdHJjbXAocmV0LCAiRW5nbGlzaF9Vbml0ZWQgU3RhdGVzLjEyNTIiKSksICJyZXQgPSAlc1xuIiwgcmV0KTsKCiAgICByZXQgPSBzZXRsb2NhbGUoTENfQUxMLCAiZW5nbGlzaC11cyIpOwogICAgb2socmV0ICE9IE5VTEwgfHwgYnJva2VuIChyZXQgPT0gTlVMTCksICJyZXQgPT0gTlVMTFxuIik7CiAgICBpZihyZXQpCiAgICAgICAgb2soIXN0cmNtcChyZXQsICJFbmdsaXNoX1VuaXRlZCBTdGF0ZXMuMTI1MiIpLCAicmV0ID0gJXNcbiIsIHJldCk7CgogICAgcmV0ID0gc2V0bG9jYWxlKExDX0FMTCwgImVuZ2xpc2gtdXNhIik7CiAgICBvayhyZXQgIT0gTlVMTCB8fCBicm9rZW4gKHJldCA9PSBOVUxMKSwgInJldCA9PSBOVUxMXG4iKTsKICAgIGlmKHJldCkKICAgICAgICBvayghc3RyY21wKHJldCwgIkVuZ2xpc2hfVW5pdGVkIFN0YXRlcy4xMjUyIiksICJyZXQgPSAlc1xuIiwgcmV0KTsKCiAgICByZXQgPSBzZXRsb2NhbGUoTENfQUxMLCAiZXNtIik7CiAgICBvayhyZXQgIT0gTlVMTCB8fCBicm9rZW4gKHJldCA9PSBOVUxMKSwgInJldCA9PSBOVUxMXG4iKTsKICAgIGlmKHJldCkKICAgICAgICBvayghc3RyY21wKHJldCwgIlNwYW5pc2hfTWV4aWNvLjEyNTIiKSwgInJldCA9ICVzXG4iLCByZXQpOwoKICAgIHJldCA9IHNldGxvY2FsZShMQ19BTEwsICJlc24iKTsKICAgIG9rKHJldCAhPSBOVUxMIHx8IGJyb2tlbiAocmV0ID09IE5VTEwpLCAicmV0ID09IE5VTExcbiIpOwogICAgaWYocmV0KQogICAgICAgIG9rKCFzdHJjbXAocmV0LCAiU3BhbmlzaF9TcGFpbi4xMjUyIikKICAgICAgICB8fCBicm9rZW4oIXN0cmNtcChyZXQsICJTcGFuaXNoIC0gTW9kZXJuIFNvcnRfU3BhaW4uMTI1MiIpKSwgInJldCA9ICVzXG4iLCByZXQpOwoKICAgIHJldCA9IHNldGxvY2FsZShMQ19BTEwsICJlc3AiKTsKICAgIG9rKHJldCAhPSBOVUxMIHx8IGJyb2tlbiAocmV0ID09IE5VTEwpLCAicmV0ID09IE5VTExcbiIpOwogICAgaWYocmV0KQogICAgICAgIG9rKCFzdHJjbXAocmV0LCAiU3BhbmlzaF9TcGFpbi4xMjUyIikKICAgICAgICB8fCBicm9rZW4oIXN0cmNtcChyZXQsICJTcGFuaXNoIC0gVHJhZGl0aW9uYWwgU29ydF9TcGFpbi4xMjUyIikpLCAicmV0ID0gJXNcbiIsIHJldCk7CgogICAgcmV0ID0gc2V0bG9jYWxlKExDX0FMTCwgImZpbiIpOwogICAgb2socmV0ICE9IE5VTEwgfHwgYnJva2VuIChyZXQgPT0gTlVMTCksICJyZXQgPT0gTlVMTFxuIik7CiAgICBpZihyZXQpCiAgICAgICAgb2soIXN0cmNtcChyZXQsICJGaW5uaXNoX0ZpbmxhbmQuMTI1MiIpLCAicmV0ID0gJXNcbiIsIHJldCk7CgogICAgcmV0ID0gc2V0bG9jYWxlKExDX0FMTCwgImZpbm5pc2giKTsKICAgIG9rKHJldCAhPSBOVUxMIHx8IGJyb2tlbiAocmV0ID09IE5VTEwpLCAicmV0ID09IE5VTExcbiIpOwogICAgaWYocmV0KQogICAgICAgIG9rKCFzdHJjbXAocmV0LCAiRmlubmlzaF9GaW5sYW5kLjEyNTIiKSwgInJldCA9ICVzXG4iLCByZXQpOwoKICAgIHJldCA9IHNldGxvY2FsZShMQ19BTEwsICJmcmEiKTsKICAgIG9rKHJldCAhPSBOVUxMIHx8IGJyb2tlbiAocmV0ID09IE5VTEwpLCAicmV0ID09IE5VTExcbiIpOwogICAgaWYocmV0KQogICAgICAgIG9rKCFzdHJjbXAocmV0LCAiRnJlbmNoX0ZyYW5jZS4xMjUyIiksICJyZXQgPSAlc1xuIiwgcmV0KTsKCiAgICByZXQgPSBzZXRsb2NhbGUoTENfQUxMLCAiZnJiIik7CiAgICBvayhyZXQgIT0gTlVMTCB8fCBicm9rZW4gKHJldCA9PSBOVUxMKSwgInJldCA9PSBOVUxMXG4iKTsKICAgIGlmKHJldCkKICAgICAgICBvayghc3RyY21wKHJldCwgIkZyZW5jaF9CZWxnaXVtLjEyNTIiKQogICAgICAgIHx8IGJyb2tlbighc3RyY21wKHJldCwgIkZyZW5jaF9GcmFuY2UuMTI1MiIpKSwgInJldCA9ICVzXG4iLCByZXQpOwoKICAgIHJldCA9IHNldGxvY2FsZShMQ19BTEwsICJmcmMiKTsKICAgIG9rKHJldCAhPSBOVUxMIHx8IGJyb2tlbiAocmV0ID09IE5VTEwpLCAicmV0ID09IE5VTExcbiIpOwogICAgaWYocmV0KQogICAgICAgIG9rKCFzdHJjbXAocmV0LCAiRnJlbmNoX0NhbmFkYS4xMjUyIikKICAgICAgICB8fCBicm9rZW4oIXN0cmNtcChyZXQsICJGcmVuY2hfRnJhbmNlLjEyNTIiKSksICJyZXQgPSAlc1xuIiwgcmV0KTsKCiAgICByZXQgPSBzZXRsb2NhbGUoTENfQUxMLCAiZnJlbmNoIik7CiAgICBvayhyZXQgIT0gTlVMTCB8fCBicm9rZW4gKHJldCA9PSBOVUxMKSwgInJldCA9PSBOVUxMXG4iKTsKICAgIGlmKHJldCkKICAgICAgICBvayghc3RyY21wKHJldCwgIkZyZW5jaF9GcmFuY2UuMTI1MiIpLCAicmV0ID0gJXNcbiIsIHJldCk7CgogICAgcmV0ID0gc2V0bG9jYWxlKExDX0FMTCwgImZyZW5jaC1iZWxnaWFuIik7CiAgICBvayhyZXQgIT0gTlVMTCB8fCBicm9rZW4gKHJldCA9PSBOVUxMKSwgInJldCA9PSBOVUxMXG4iKTsKICAgIGlmKHJldCkKICAgICAgICBvayghc3RyY21wKHJldCwgIkZyZW5jaF9CZWxnaXVtLjEyNTIiKQogICAgICAgIHx8IGJyb2tlbighc3RyY21wKHJldCwgIkZyZW5jaF9GcmFuY2UuMTI1MiIpKSwgInJldCA9ICVzXG4iLCByZXQpOwoKICAgIHJldCA9IHNldGxvY2FsZShMQ19BTEwsICJmcmVuY2gtY2FuYWRpYW4iKTsKICAgIG9rKHJldCAhPSBOVUxMIHx8IGJyb2tlbiAocmV0ID09IE5VTEwpLCAicmV0ID09IE5VTExcbiIpOwogICAgaWYocmV0KQogICAgICAgIG9rKCFzdHJjbXAocmV0LCAiRnJlbmNoX0NhbmFkYS4xMjUyIikKICAgICAgICB8fCBicm9rZW4oIXN0cmNtcChyZXQsICJGcmVuY2hfRnJhbmNlLjEyNTIiKSksICJyZXQgPSAlc1xuIiwgcmV0KTsKCiAgICByZXQgPSBzZXRsb2NhbGUoTENfQUxMLCAiZnJlbmNoLXN3aXNzIik7CiAgICBvayhyZXQgIT0gTlVMTCB8fCBicm9rZW4gKHJldCA9PSBOVUxMKSwgInJldCA9PSBOVUxMXG4iKTsKICAgIGlmKHJldCkKICAgICAgICBvayghc3RyY21wKHJldCwgIkZyZW5jaF9Td2l0emVybGFuZC4xMjUyIikKICAgICAgICB8fCBicm9rZW4oIXN0cmNtcChyZXQsICJGcmVuY2hfRnJhbmNlLjEyNTIiKSksICJyZXQgPSAlc1xuIiwgcmV0KTsKCiAgICByZXQgPSBzZXRsb2NhbGUoTENfQUxMLCAiZnJzIik7CiAgICBvayhyZXQgIT0gTlVMTCB8fCBicm9rZW4gKHJldCA9PSBOVUxMKSwgInJldCA9PSBOVUxMXG4iKTsKICAgIGlmKHJldCkKICAgICAgICBvayghc3RyY21wKHJldCwgIkZyZW5jaF9Td2l0emVybGFuZC4xMjUyIikKICAgICAgICB8fCBicm9rZW4oIXN0cmNtcChyZXQsICJGcmVuY2hfRnJhbmNlLjEyNTIiKSksICJyZXQgPSAlc1xuIiwgcmV0KTsKCiAgICByZXQgPSBzZXRsb2NhbGUoTENfQUxMLCAiZ2VybWFuIik7CiAgICBvayhyZXQgIT0gTlVMTCB8fCBicm9rZW4gKHJldCA9PSBOVUxMKSwgInJldCA9PSBOVUxMXG4iKTsKICAgIGlmKHJldCkKICAgICAgICBvayghc3RyY21wKHJldCwgIkdlcm1hbl9HZXJtYW55LjEyNTIiKSwgInJldCA9ICVzXG4iLCByZXQpOwoKICAgIHJldCA9IHNldGxvY2FsZShMQ19BTEwsICJnZXJtYW4tYXVzdHJpYW4iKTsKICAgIG9rKHJldCAhPSBOVUxMIHx8IGJyb2tlbiAocmV0ID09IE5VTEwpLCAicmV0ID09IE5VTExcbiIpOwogICAgaWYocmV0KQogICAgICAgIG9rKCFzdHJjbXAocmV0LCAiR2VybWFuX0F1c3RyaWEuMTI1MiIpCiAgICAgICAgfHwgYnJva2VuKCFzdHJjbXAocmV0LCAiR2VybWFuX0dlcm1hbnkuMTI1MiIpKSwgInJldCA9ICVzXG4iLCByZXQpOwoKICAgIHJldCA9IHNldGxvY2FsZShMQ19BTEwsICJnZXJtYW4tc3dpc3MiKTsKICAgIG9rKHJldCAhPSBOVUxMIHx8IGJyb2tlbiAocmV0ID09IE5VTEwpLCAicmV0ID09IE5VTExcbiIpOwogICAgaWYocmV0KQogICAgICAgIG9rKCFzdHJjbXAocmV0LCAiR2VybWFuX1N3aXR6ZXJsYW5kLjEyNTIiKQogICAgICAgIHx8IGJyb2tlbighc3RyY21wKHJldCwgIkdlcm1hbl9HZXJtYW55LjEyNTIiKSksICJyZXQgPSAlc1xuIiwgcmV0KTsKCiAgICByZXQgPSBzZXRsb2NhbGUoTENfQUxMLCAiZ3JlZWsiKTsKICAgIG9rKHJldCAhPSBOVUxMIHx8IGJyb2tlbiAocmV0ID09IE5VTEwpLCAicmV0ID09IE5VTExcbiIpOwogICAgaWYocmV0KQogICAgICAgIG9rKCFzdHJjbXAocmV0LCAiR3JlZWtfR3JlZWNlLjEyNTMiKSwgInJldCA9ICVzXG4iLCByZXQpOwoKICAgIHJldCA9IHNldGxvY2FsZShMQ19BTEwsICJodW4iKTsKICAgIG9rKHJldCAhPSBOVUxMIHx8IGJyb2tlbiAocmV0ID09IE5VTEwpLCAicmV0ID09IE5VTExcbiIpOwogICAgaWYocmV0KQogICAgICAgIG9rKCFzdHJjbXAocmV0LCAiSHVuZ2FyaWFuX0h1bmdhcnkuMTI1MCIpLCAicmV0ID0gJXNcbiIsIHJldCk7CgogICAgcmV0ID0gc2V0bG9jYWxlKExDX0FMTCwgImh1bmdhcmlhbiIpOwogICAgb2socmV0ICE9IE5VTEwgfHwgYnJva2VuIChyZXQgPT0gTlVMTCksICJyZXQgPT0gTlVMTFxuIik7CiAgICBpZihyZXQpCiAgICAgICAgb2soIXN0cmNtcChyZXQsICJIdW5nYXJpYW5fSHVuZ2FyeS4xMjUwIiksICJyZXQgPSAlc1xuIiwgcmV0KTsKCiAgICByZXQgPSBzZXRsb2NhbGUoTENfQUxMLCAiaWNlbGFuZGljIik7CiAgICBvayhyZXQgIT0gTlVMTCB8fCBicm9rZW4gKHJldCA9PSBOVUxMKSwgInJldCA9PSBOVUxMXG4iKTsKICAgIGlmKHJldCkKICAgICAgICBvayghc3RyY21wKHJldCwgIkljZWxhbmRpY19JY2VsYW5kLjEyNTIiKSwgInJldCA9ICVzXG4iLCByZXQpOwoKICAgIHJldCA9IHNldGxvY2FsZShMQ19BTEwsICJpc2wiKTsKICAgIG9rKHJldCAhPSBOVUxMIHx8IGJyb2tlbiAocmV0ID09IE5VTEwpLCAicmV0ID09IE5VTExcbiIpOwogICAgaWYocmV0KQogICAgICAgIG9rKCFzdHJjbXAocmV0LCAiSWNlbGFuZGljX0ljZWxhbmQuMTI1MiIpLCAicmV0ID0gJXNcbiIsIHJldCk7CgogICAgcmV0ID0gc2V0bG9jYWxlKExDX0FMTCwgIml0YSIpOwogICAgb2socmV0ICE9IE5VTEwgfHwgYnJva2VuIChyZXQgPT0gTlVMTCksICJyZXQgPT0gTlVMTFxuIik7CiAgICBpZihyZXQpCiAgICAgICAgb2soIXN0cmNtcChyZXQsICJJdGFsaWFuX0l0YWx5LjEyNTIiKSwgInJldCA9ICVzXG4iLCByZXQpOwoKICAgIHJldCA9IHNldGxvY2FsZShMQ19BTEwsICJpdGFsaWFuIik7CiAgICBvayhyZXQgIT0gTlVMTCB8fCBicm9rZW4gKHJldCA9PSBOVUxMKSwgInJldCA9PSBOVUxMXG4iKTsKICAgIGlmKHJldCkKICAgICAgICBvayghc3RyY21wKHJldCwgIkl0YWxpYW5fSXRhbHkuMTI1MiIpLCAicmV0ID0gJXNcbiIsIHJldCk7CgogICAgcmV0ID0gc2V0bG9jYWxlKExDX0FMTCwgIml0YWxpYW4tc3dpc3MiKTsKICAgIG9rKHJldCAhPSBOVUxMIHx8IGJyb2tlbiAocmV0ID09IE5VTEwpLCAicmV0ID09IE5VTExcbiIpOwogICAgaWYocmV0KQogICAgICAgIG9rKCFzdHJjbXAocmV0LCAiSXRhbGlhbl9Td2l0emVybGFuZC4xMjUyIikgfHwgYnJva2VuKCFzdHJjbXAocmV0LCAiSXRhbGlhbl9JdGFseS4xMjUyIikpLCAicmV0ID0gJXNcbiIsIHJldCk7CgogICAgcmV0ID0gc2V0bG9jYWxlKExDX0FMTCwgIml0cyIpOwogICAgb2socmV0ICE9IE5VTEwgfHwgYnJva2VuIChyZXQgPT0gTlVMTCksICJyZXQgPT0gTlVMTFxuIik7CiAgICBpZihyZXQpCiAgICAgICAgb2soIXN0cmNtcChyZXQsICJJdGFsaWFuX1N3aXR6ZXJsYW5kLjEyNTIiKSB8fCBicm9rZW4oIXN0cmNtcChyZXQsICJJdGFsaWFuX0l0YWx5LjEyNTIiKSksICJyZXQgPSAlc1xuIiwgcmV0KTsKCiAgICByZXQgPSBzZXRsb2NhbGUoTENfQUxMLCAiamFwYW5lc2UiKTsKICAgIG9rKHJldCAhPSBOVUxMIHx8IGJyb2tlbiAocmV0ID09IE5VTEwpLCAicmV0ID09IE5VTExcbiIpOwogICAgaWYocmV0KQogICAgICAgIG9rKCFzdHJjbXAocmV0LCAiSmFwYW5lc2VfSmFwYW4uOTMyIiksICJyZXQgPSAlc1xuIiwgcmV0KTsKCiAgICByZXQgPSBzZXRsb2NhbGUoTENfQUxMLCAianBuIik7CiAgICBvayhyZXQgIT0gTlVMTCB8fCBicm9rZW4gKHJldCA9PSBOVUxMKSwgInJldCA9PSBOVUxMXG4iKTsKICAgIGlmKHJldCkKICAgICAgICBvayghc3RyY21wKHJldCwgIkphcGFuZXNlX0phcGFuLjkzMiIpLCAicmV0ID0gJXNcbiIsIHJldCk7CgogICAgcmV0ID0gc2V0bG9jYWxlKExDX0FMTCwgImtvcmVhbiIpOwogICAgb2socmV0ICE9IE5VTEwgfHwgYnJva2VuIChyZXQgPT0gTlVMTCksICJyZXQgPT0gTlVMTFxuIik7CiAgICBpZihyZXQpCiAgICAgICAgb2soIXN0cmNtcChyZXQsICJLb3JlYW5fS29yZWEuOTQ5IiksICJyZXQgPSAlc1xuIiwgcmV0KTsKCiAgICByZXQgPSBzZXRsb2NhbGUoTENfQUxMLCAia29yZWFuIik7CiAgICBvayhyZXQgIT0gTlVMTCB8fCBicm9rZW4gKHJldCA9PSBOVUxMKSwgInJldCA9PSBOVUxMXG4iKTsKICAgIGlmKHJldCkKICAgICAgICBvayghc3RyY21wKHJldCwgIktvcmVhbl9Lb3JlYS45NDkiKSwgInJldCA9ICVzXG4iLCByZXQpOwoKICAgIHJldCA9IHNldGxvY2FsZShMQ19BTEwsICJubGIiKTsKICAgIG9rKHJldCAhPSBOVUxMIHx8IGJyb2tlbiAocmV0ID09IE5VTEwpLCAicmV0ID09IE5VTExcbiIpOwogICAgaWYocmV0KQogICAgICAgIG9rKCFzdHJjbXAocmV0LCAiRHV0Y2hfQmVsZ2l1bS4xMjUyIikKICAgICAgICB8fCBicm9rZW4oIXN0cmNtcChyZXQsICJEdXRjaF9OZXRoZXJsYW5kcy4xMjUyIikpLCAicmV0ID0gJXNcbiIsIHJldCk7CgogICAgcmV0ID0gc2V0bG9jYWxlKExDX0FMTCwgIm5sZCIpOwogICAgb2socmV0ICE9IE5VTEwgfHwgYnJva2VuIChyZXQgPT0gTlVMTCksICJyZXQgPT0gTlVMTFxuIik7CiAgICBpZihyZXQpCiAgICAgICAgb2soIXN0cmNtcChyZXQsICJEdXRjaF9OZXRoZXJsYW5kcy4xMjUyIiksICJyZXQgPSAlc1xuIiwgcmV0KTsKCiAgICByZXQgPSBzZXRsb2NhbGUoTENfQUxMLCAibm9uIik7CiAgICBvayhyZXQgIT0gTlVMTCB8fCBicm9rZW4gKHJldCA9PSBOVUxMKSwgInJldCA9PSBOVUxMXG4iKTsKICAgIGlmKHJldCkKICAgICAgICB0b2RvX3dpbmUgb2soKCFzdHJjbXAoIHJldCwgIk5vcndlZ2lhbi1OeW5vcnNrX05vcndheS4xMjUyIikpCiAgICAgICAgfHwgYnJva2VuKCFzdHJjbXAocmV0LCAiTm9yd2VnaWFuIChCb2tt5WwpX05vcndheS4xMjUyIikpCiAgICAgICAgfHwgYnJva2VuKCFzdHJjbXAocmV0LCAiTm9yd2VnaWFuX05vcndheS4xMjUyIikpCiAgICAgICAgfHwgYnJva2VuKCFzdHJjbXAocmV0LCAiTm9yd2VnaWFuIChOeW5vcnNrKV9Ob3J3YXkuMTI1MiIpKSwgInJldCA9ICVzXG4iLCByZXQpOwoKICAgIHJldCA9IHNldGxvY2FsZShMQ19BTEwsICJub3IiKTsKICAgIG9rKHJldCAhPSBOVUxMIHx8IGJyb2tlbiAocmV0ID09IE5VTEwpLCAicmV0ID09IE5VTExcbiIpOwogICAgaWYocmV0KQogICAgICAgIG9rKCFzdHJjbXAocmV0LCAiTm9yd2VnaWFuIChCb2tt5WwpX05vcndheS4xMjUyIikKICAgICAgICB8fCBicm9rZW4oIXN0cmNtcChyZXQsICJOb3J3ZWdpYW4gKEJva21hbClfTm9yd2F5LjEyNTIiKSkKICAgICAgICB8fCBicm9rZW4oIXN0cmNtcChyZXQsICJOb3J3ZWdpYW5fTm9yd2F5LjEyNTIiKSksICJyZXQgPSAlc1xuIiwgcmV0KTsKCiAgICByZXQgPSBzZXRsb2NhbGUoTENfQUxMLCAibm9yd2VnaWFuLWJva21hbCIpOwogICAgb2socmV0ICE9IE5VTEwgfHwgYnJva2VuIChyZXQgPT0gTlVMTCksICJyZXQgPT0gTlVMTFxuIik7CiAgICBpZihyZXQpCiAgICAgICAgb2soIXN0cmNtcChyZXQsICJOb3J3ZWdpYW4gKEJva23lbClfTm9yd2F5LjEyNTIiKQogICAgICAgIHx8IGJyb2tlbighc3RyY21wKHJldCwgIk5vcndlZ2lhbiAoQm9rbWFsKV9Ob3J3YXkuMTI1MiIpKQogICAgICAgIHx8IGJyb2tlbighc3RyY21wKHJldCwgIk5vcndlZ2lhbl9Ob3J3YXkuMTI1MiIpKSwgInJldCA9ICVzXG4iLCByZXQpOwoKICAgIHJldCA9IHNldGxvY2FsZShMQ19BTEwsICJub3J3ZWdpYW4tbnlub3JzayIpOwogICAgb2socmV0ICE9IE5VTEwgfHwgYnJva2VuIChyZXQgPT0gTlVMTCksICJyZXQgPT0gTlVMTFxuIik7CiAgICBpZihyZXQpCiAgICAgICAgdG9kb193aW5lIG9rKCFzdHJjbXAocmV0LCAiTm9yd2VnaWFuLU55bm9yc2tfTm9yd2F5LjEyNTIiKQogICAgICAgIHx8IGJyb2tlbighc3RyY21wKHJldCwgIk5vcndlZ2lhbl9Ob3J3YXkuMTI1MiIpKQogICAgICAgIHx8IGJyb2tlbighc3RyY21wKHJldCwgIk5vcndlZ2lhbiAoTnlub3JzaylfTm9yd2F5LjEyNTIiKSkKICAgICAgICB8fCBicm9rZW4oIXN0cmNtcChyZXQsICJOb3J3ZWdpYW4gKEJva21hbClfTm9yd2F5LjEyNTIiKSkKICAgICAgICB8fCBicm9rZW4oIXN0cmNtcChyZXQsICJOb3J3ZWdpYW4gKEJva23lbClfTm9yd2F5LjEyNTIiKSksICJyZXQgPSAlc1xuIiwgcmV0KTsKCiAgICByZXQgPSBzZXRsb2NhbGUoTENfQUxMLCAicGxrIik7CiAgICBvayhyZXQgIT0gTlVMTCB8fCBicm9rZW4gKHJldCA9PSBOVUxMKSwgInJldCA9PSBOVUxMXG4iKTsKICAgIGlmKHJldCkKICAgICAgICBvayghc3RyY21wKHJldCwgIlBvbGlzaF9Qb2xhbmQuMTI1MCIpLCAicmV0ID0gJXNcbiIsIHJldCk7CgogICAgcmV0ID0gc2V0bG9jYWxlKExDX0FMTCwgInBvbGlzaCIpOwogICAgb2socmV0ICE9IE5VTEwgfHwgYnJva2VuIChyZXQgPT0gTlVMTCksICJyZXQgPT0gTlVMTFxuIik7CiAgICBpZihyZXQpCiAgICAgICAgb2soIXN0cmNtcChyZXQsICJQb2xpc2hfUG9sYW5kLjEyNTAiKSwgInJldCA9ICVzXG4iLCByZXQpOwoKICAgIHJldCA9IHNldGxvY2FsZShMQ19BTEwsICJwb3J0dWdlc2UiKTsKICAgIG9rKHJldCAhPSBOVUxMIHx8IGJyb2tlbiAocmV0ID09IE5VTEwpLCAicmV0ID09IE5VTExcbiIpOwogICAgaWYocmV0KQogICAgICAgIG9rKCFzdHJjbXAocmV0LCAiUG9ydHVndWVzZV9CcmF6aWwuMTI1MiIpLCAicmV0ID0gJXNcbiIsIHJldCk7CgogICAgcmV0ID0gc2V0bG9jYWxlKExDX0FMTCwgInBvcnR1Z3Vlc2UtYnJhemlsIik7CiAgICBvayhyZXQgIT0gTlVMTCB8fCBicm9rZW4gKHJldCA9PSBOVUxMKSwgInJldCA9PSBOVUxMXG4iKTsKICAgIGlmKHJldCkKICAgICAgICBvayghc3RyY21wKHJldCwgIlBvcnR1Z3Vlc2VfQnJhemlsLjEyNTIiKSwgInJldCA9ICVzXG4iLCByZXQpOwoKICAgIHJldCA9IHNldGxvY2FsZShMQ19BTEwsICJwdGIiKTsKICAgIG9rKHJldCAhPSBOVUxMIHx8IGJyb2tlbiAocmV0ID09IE5VTEwpLCAicmV0ID09IE5VTExcbiIpOwogICAgaWYocmV0KQogICAgICAgIG9rKCFzdHJjbXAocmV0LCAiUG9ydHVndWVzZV9CcmF6aWwuMTI1MiIpLCAicmV0ID0gJXNcbiIsIHJldCk7CgogICAgcmV0ID0gc2V0bG9jYWxlKExDX0FMTCwgInB0ZyIpOwogICAgb2socmV0ICE9IE5VTEwgfHwgYnJva2VuIChyZXQgPT0gTlVMTCksICJyZXQgPT0gTlVMTFxuIik7CiAgICBpZihyZXQpCiAgICAgICAgb2soIXN0cmNtcChyZXQsICJQb3J0dWd1ZXNlX1BvcnR1Z2FsLjEyNTIiKSwgInJldCA9ICVzXG4iLCByZXQpOwoKICAgIHJldCA9IHNldGxvY2FsZShMQ19BTEwsICJydXMiKTsKICAgIG9rKHJldCAhPSBOVUxMIHx8IGJyb2tlbiAocmV0ID09IE5VTEwpLCAicmV0ID09IE5VTExcbiIpOwogICAgaWYocmV0KQogICAgICAgIG9rKCFzdHJjbXAocmV0LCAiUnVzc2lhbl9SdXNzaWEuMTI1MSIpLCAicmV0ID0gJXNcbiIsIHJldCk7CgogICAgcmV0ID0gc2V0bG9jYWxlKExDX0FMTCwgInJ1c3NpYW4iKTsKICAgIG9rKHJldCAhPSBOVUxMIHx8IGJyb2tlbiAocmV0ID09IE5VTEwpLCAicmV0ID09IE5VTExcbiIpOwogICAgaWYocmV0KQogICAgICAgIG9rKCFzdHJjbXAocmV0LCAiUnVzc2lhbl9SdXNzaWEuMTI1MSIpLCAicmV0ID0gJXNcbiIsIHJldCk7CgogICAgcmV0ID0gc2V0bG9jYWxlKExDX0FMTCwgInNreSIpOwogICAgb2socmV0ICE9IE5VTEwgfHwgYnJva2VuIChyZXQgPT0gTlVMTCksICJyZXQgPT0gTlVMTFxuIik7CiAgICBpZihyZXQpCiAgICAgICAgb2soIXN0cmNtcChyZXQsICJTbG92YWtfU2xvdmFraWEuMTI1MCIpLCAicmV0ID0gJXNcbiIsIHJldCk7CgogICAgcmV0ID0gc2V0bG9jYWxlKExDX0FMTCwgInNsb3ZhayIpOwogICAgb2socmV0ICE9IE5VTEwgfHwgYnJva2VuIChyZXQgPT0gTlVMTCksICJyZXQgPT0gTlVMTFxuIik7CiAgICBpZihyZXQpCiAgICAgICAgb2soIXN0cmNtcChyZXQsICJTbG92YWtfU2xvdmFraWEuMTI1MCIpLCAicmV0ID0gJXNcbiIsIHJldCk7CgogICAgcmV0ID0gc2V0bG9jYWxlKExDX0FMTCwgInNwYW5pc2giKTsKICAgIG9rKHJldCAhPSBOVUxMIHx8IGJyb2tlbiAocmV0ID09IE5VTEwpLCAicmV0ID09IE5VTExcbiIpOwogICAgaWYocmV0KQogICAgICAgIG9rKCFzdHJjbXAocmV0LCAiU3BhbmlzaF9TcGFpbi4xMjUyIikKICAgICAgICB8fCBicm9rZW4oIXN0cmNtcChyZXQsICJTcGFuaXNoIC0gVHJhZGl0aW9uYWwgU29ydF9TcGFpbi4xMjUyIikpLCAicmV0ID0gJXNcbiIsIHJldCk7CgogICAgcmV0ID0gc2V0bG9jYWxlKExDX0FMTCwgInNwYW5pc2gtbWV4aWNhbiIpOwogICAgb2socmV0ICE9IE5VTEwgfHwgYnJva2VuIChyZXQgPT0gTlVMTCksICJyZXQgPT0gTlVMTFxuIik7CiAgICBpZihyZXQpCiAgICAgICAgb2soIXN0cmNtcChyZXQsICJTcGFuaXNoX01leGljby4xMjUyIikKICAgICAgICB8fCBicm9rZW4oIXN0cmNtcChyZXQsICJTcGFuaXNoX1NwYWluLjEyNTIiKSksICJyZXQgPSAlc1xuIiwgcmV0KTsKCiAgICByZXQgPSBzZXRsb2NhbGUoTENfQUxMLCAic3BhbmlzaC1tb2Rlcm4iKTsKICAgIG9rKHJldCAhPSBOVUxMIHx8IGJyb2tlbiAocmV0ID09IE5VTEwpLCAicmV0ID09IE5VTExcbiIpOwogICAgaWYocmV0KQogICAgICAgIHRvZG9fd2luZSBvayghc3RyY21wKHJldCwgIlNwYW5pc2ggLSBNb2Rlcm4gU29ydF9TcGFpbi4xMjUyIikKICAgICAgICB8fCBicm9rZW4oIXN0cmNtcChyZXQsICJTcGFuaXNoX1NwYWluLjEyNTIiKSksICJyZXQgPSAlc1xuIiwgcmV0KTsKCiAgICByZXQgPSBzZXRsb2NhbGUoTENfQUxMLCAic3ZlIik7CiAgICBvayhyZXQgIT0gTlVMTCB8fCBicm9rZW4gKHJldCA9PSBOVUxMKSwgInJldCA9PSBOVUxMXG4iKTsKICAgIGlmKHJldCkKICAgICAgICBvayghc3RyY21wKHJldCwgIlN3ZWRpc2hfU3dlZGVuLjEyNTIiKSwgInJldCA9ICVzXG4iLCByZXQpOwoKICAgIHJldCA9IHNldGxvY2FsZShMQ19BTEwsICJzd2VkaXNoIik7CiAgICBvayhyZXQgIT0gTlVMTCB8fCBicm9rZW4gKHJldCA9PSBOVUxMKSwgInJldCA9PSBOVUxMXG4iKTsKICAgIGlmKHJldCkKICAgICAgICBvayghc3RyY21wKHJldCwgIlN3ZWRpc2hfU3dlZGVuLjEyNTIiKSwgInJldCA9ICVzXG4iLCByZXQpOwoKICAgIHJldCA9IHNldGxvY2FsZShMQ19BTEwsICJzd2lzcyIpOwogICAgb2socmV0ICE9IE5VTEwgfHwgYnJva2VuIChyZXQgPT0gTlVMTCksICJyZXQgPT0gTlVMTFxuIik7CiAgICBpZihyZXQpCiAgICAgICAgb2soIXN0cmNtcChyZXQsICJHZXJtYW5fU3dpdHplcmxhbmQuMTI1MiIpLCAicmV0ID0gJXNcbiIsIHJldCk7CgogICAgcmV0ID0gc2V0bG9jYWxlKExDX0FMTCwgInRyayIpOwogICAgb2socmV0ICE9IE5VTEwgfHwgYnJva2VuIChyZXQgPT0gTlVMTCksICJyZXQgPT0gTlVMTFxuIik7CiAgICBpZihyZXQpCiAgICAgICAgb2soIXN0cmNtcChyZXQsICJUdXJraXNoX1R1cmtleS4xMjU0IiksICJyZXQgPSAlc1xuIiwgcmV0KTsKCiAgICByZXQgPSBzZXRsb2NhbGUoTENfQUxMLCAidHVya2lzaCIpOwogICAgb2socmV0ICE9IE5VTEwgfHwgYnJva2VuIChyZXQgPT0gTlVMTCksICJyZXQgPT0gTlVMTFxuIik7CiAgICBpZihyZXQpCiAgICAgICAgb2soIXN0cmNtcChyZXQsICJUdXJraXNoX1R1cmtleS4xMjU0IiksICJyZXQgPSAlc1xuIiwgcmV0KTsKCiAgICByZXQgPSBzZXRsb2NhbGUoTENfQUxMLCAidWsiKTsKICAgIG9rKHJldCAhPSBOVUxMLCAicmV0ID09IE5VTExcbiIpOwogICAgaWYocmV0KQogICAgICAgIG9rKCFzdHJjbXAocmV0LCAiRW5nbGlzaF9Vbml0ZWQgS2luZ2RvbS4xMjUyIikKICAgICAgICB8fCBicm9rZW4oIXN0cmNtcChyZXQsICJVa3JhaW5pYW5fVWtyYWluZS4xMjUxIikpLCAicmV0ID0gJXNcbiIsIHJldCk7CgogICAgcmV0ID0gc2V0bG9jYWxlKExDX0FMTCwgInVzIik7CiAgICBvayhyZXQgIT0gTlVMTCB8fCBicm9rZW4gKHJldCA9PSBOVUxMKSwgInJldCA9PSBOVUxMXG4iKTsKICAgIGlmKHJldCkKICAgICAgICBvayghc3RyY21wKHJldCwgIkVuZ2xpc2hfVW5pdGVkIFN0YXRlcy4xMjUyIiksICJyZXQgPSAlc1xuIiwgcmV0KTsKCiAgICByZXQgPSBzZXRsb2NhbGUoTENfQUxMLCAidXNhIik7CiAgICBvayhyZXQgIT0gTlVMTCB8fCBicm9rZW4gKHJldCA9PSBOVUxMKSwgInJldCA9PSBOVUxMXG4iKTsKICAgIGlmKHJldCkKICAgICAgICBvayghc3RyY21wKHJldCwgIkVuZ2xpc2hfVW5pdGVkIFN0YXRlcy4xMjUyIiksICJyZXQgPSAlc1xuIiwgcmV0KTsKfQoKc3RhdGljIHZvaWQgdGVzdF9jcnRHZXRTdHJpbmdUeXBlVyh2b2lkKQp7CiAgICBzdGF0aWMgY29uc3Qgd2NoYXJfdCBzdHIwW10gPSB7ICcwJywgJ1wwJyB9OwogICAgc3RhdGljIGNvbnN0IHdjaGFyX3Qgc3RyQVtdID0geyAnQScsICdcMCcgfTsKICAgIHN0YXRpYyBjb25zdCB3Y2hhcl90IHN0cl9zcGFjZVtdID0geyAnICcsICdcMCcgfTsKICAgIHN0YXRpYyBjb25zdCB3Y2hhcl90IHN0cl9udWxsW10gPSB7ICdcMCcsICdcMCcgfTsKICAgIHN0YXRpYyBjb25zdCB3Y2hhcl90IHN0cl9yYW5kW10gPSB7IDEyMzQsICdcMCcgfTsKCiAgICBjb25zdCB3Y2hhcl90ICpzdHJbXSA9IHsgc3RyMCwgc3RyQSwgc3RyX3NwYWNlLCBzdHJfbnVsbCwgc3RyX3JhbmQgfTsKCiAgICBXT1JEIG91dF9jcnQsIG91dDsKICAgIEJPT0wgcmV0X2NydCwgcmV0OwogICAgaW50IGk7CgogICAgaWYoIXBfX2NydEdldFN0cmluZ1R5cGVXKSB7CiAgICAgICAgd2luX3NraXAoIlNraXBwaW5nIF9fY3J0R2V0U3RyaW5nVHlwZVcgdGVzdHNcbiIpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZighcG1lbWNweV9zKSB7CiAgICAgICAgd2luX3NraXAoIlRvbyBvbGQgdmVyc2lvbiBvZiBtc3ZjcnQuZGxsXG4iKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgZm9yKGk9MDsgaTxzaXplb2Yoc3RyKS9zaXplb2YoKnN0cik7IGkrKykgewogICAgICAgIHJldF9jcnQgPSBwX19jcnRHZXRTdHJpbmdUeXBlVygwLCBDVF9DVFlQRTEsIHN0cltpXSwgMSwgJm91dF9jcnQpOwogICAgICAgIHJldCA9IEdldFN0cmluZ1R5cGVXKENUX0NUWVBFMSwgc3RyW2ldLCAxLCAmb3V0KTsKICAgICAgICBvayhyZXQgPT0gcmV0X2NydCwgIiVkKSByZXRfY3J0ID0gJWRcbiIsIGksIChpbnQpcmV0X2NydCk7CiAgICAgICAgb2sob3V0ID09IG91dF9jcnQsICIlZCkgb3V0X2NydCA9ICV4LCBleHBlY3RlZCAleFxuIiwgaSwgKGludClvdXRfY3J0LCAoaW50KW91dCk7CgogICAgICAgIHJldF9jcnQgPSBwX19jcnRHZXRTdHJpbmdUeXBlVygwLCBDVF9DVFlQRTIsIHN0cltpXSwgMSwgJm91dF9jcnQpOwogICAgICAgIHJldCA9IEdldFN0cmluZ1R5cGVXKENUX0NUWVBFMiwgc3RyW2ldLCAxLCAmb3V0KTsKICAgICAgICBvayhyZXQgPT0gcmV0X2NydCwgIiVkKSByZXRfY3J0ID0gJWRcbiIsIGksIChpbnQpcmV0X2NydCk7CiAgICAgICAgb2sob3V0ID09IG91dF9jcnQsICIlZCkgb3V0X2NydCA9ICV4LCBleHBlY3RlZCAleFxuIiwgaSwgKGludClvdXRfY3J0LCAoaW50KW91dCk7CgogICAgICAgIHJldF9jcnQgPSBwX19jcnRHZXRTdHJpbmdUeXBlVygwLCBDVF9DVFlQRTMsIHN0cltpXSwgMSwgJm91dF9jcnQpOwogICAgICAgIHJldCA9IEdldFN0cmluZ1R5cGVXKENUX0NUWVBFMywgc3RyW2ldLCAxLCAmb3V0KTsKICAgICAgICBvayhyZXQgPT0gcmV0X2NydCwgIiVkKSByZXRfY3J0ID0gJWRcbiIsIGksIChpbnQpcmV0X2NydCk7CiAgICAgICAgb2sob3V0ID09IG91dF9jcnQsICIlZCkgb3V0X2NydCA9ICV4LCBleHBlY3RlZCAleFxuIiwgaSwgKGludClvdXRfY3J0LCAoaW50KW91dCk7CiAgICB9CgogICAgcmV0ID0gcF9fY3J0R2V0U3RyaW5nVHlwZVcoMCwgMywgc3RyWzBdLCAxLCAmb3V0KTsKICAgIG9rKCFyZXQsICJyZXQgPT0gVFJVRVxuIik7Cn0KClNUQVJUX1RFU1QobG9jYWxlKQp7CiAgICBpbml0KCk7CgogICAgdGVzdF9jcnRHZXRTdHJpbmdUeXBlVygpOwogICAgdGVzdF9zZXRsb2NhbGUoKTsKfQo=