{



	"shortName": "redirts",



    "name" : "redirts v1.2",



	"description" : "units' metalcost got upside down, changed values: hp, damage, range, speed, aoe,(include selfd,) shield, build, sight, jump, areacloak and radar jam, with pretty functions ! (idea from K-ORZE)",



	"options":{



		"noelo" : 1,



		"equalcom" : "enable",



		"option_notes" : "units' metalcost got upside down. plop Strider Hub first.",



		"tweakdefs" : "DQoNCmxvY2FsIFRIRURlYnVnPWZhbHNlDQpsb2NhbCBEQkdUYWJDb3VudD0wDQpsb2NhbCBEQkdUYWJTdHI9IiINCmxvY2FsIGZ1bmN0aW9uIERCR0VjaG8oc3RyKQ0KICAgIGlmIFRIRURlYnVnIHRoZW4NCiAgICAgICAgU3ByaW5nLkVjaG8oREJHVGFiU3RyIC4uIHN0cikNCiAgICBlbmQNCmVuZA0KbG9jYWwgZnVuY3Rpb24gREJHVGFiKCkNCiAgICBEQkdUYWJDb3VudD1EQkdUYWJDb3VudCsxDQogICAgREJHVGFiU3RyPURCR1RhYlN0ciAuLiAiXHQiDQplbmQNCg0KbG9jYWwgZnVuY3Rpb24gREJHVGFiRW5kKCkNCiAgICBEQkdUYWJDb3VudD1EQkdUYWJDb3VudC0xDQogICAgREJHVGFiU3RyPSIiDQogICAgZm9yIGkgPSAxLCBEQkdUYWJDb3VudCBkbw0KICAgICAgICBEQkdUYWJTdHI9REJHVGFiU3RyIC4uICJcdCINCiAgICBlbmQNCmVuZA0KU3ByaW5nLkVjaG8oInJlcyBpcyIgLi4gdG9zdHJpbmcoIG1hdGgucG93KDIsMS41KSkpDQoNCmxvY2FsIE1pZGRsZUNvc3Q9MTIwMA0KDQpsb2NhbCBsYz1zdHJpbmcubG93ZXINCg0KbG9jYWwgV0RTPSBXZWFwb25EZWZzIG9yIHdlYXBvbmRlZnMgb3IgREVGUy53ZWFwb25EZWZzDQoNCi0tIGdldCBtdWx0IHZhbHVlIGZvciB2YWx1ZXMgcGVyIGNvc3QgdG8gY2hhbmdlLCBlLmcuIGNvc3QNCmxvY2FsIGZ1bmN0aW9uIEdldEZsaXBSYXRpbyhtaWRkbGUpDQogICAgcmV0dXJuIGZ1bmN0aW9uICh4KQ0KICAgICAgICBsb2NhbCByPW1pZGRsZS94DQogICAgICAgIHJldHVybiAgbWF0aC5wb3cociwyKS0tcipyDQogICAgZW5kDQplbmQNCg0KbG9jYWwgZnVuY3Rpb24gRGVjZW50UmF0aW8obWlkZGxlKQ0KICAgIGxvY2FsIGNvc3RSYXRpbz1tYXRoLmxvZyg4KQ0KICAgIGxvY2FsIHZhbHVlUmF0aW89MS4yNQ0KICAgIGxvY2FsIHI9R2V0RmxpcFJhdGlvKG1pZGRsZSkNCiAgICByZXR1cm4gZnVuY3Rpb24gKHgsZmFjdG9yKQ0KICAgICAgICByZXR1cm4gbWF0aC5wb3codmFsdWVSYXRpbywgbWF0aC5sb2cocih4KSkvY29zdFJhdGlvKmZhY3RvciApDQogICAgZW5kDQplbmQNCg0KU3ByaW5nLkVjaG8oImRyIHRlc3QgMTogIiAuLiB0b3N0cmluZyggRGVjZW50UmF0aW8oTWlkZGxlQ29zdCkoMjQwMDAsLTAuNzUpICkpDQpTcHJpbmcuRWNobygiZHIgdGVzdCAxOiAiIC4uIHRvc3RyaW5nKCBEZWNlbnRSYXRpbyhNaWRkbGVDb3N0KSgyNDAwMCwtMSkgKSkNCg0KbG9jYWwgZnVuY3Rpb24gRmxpcFdEKHdkLHVkLGNvc3QpDQoNCiAgICBEQkdFY2hvKCJEbyBmbGlwICIgLi4gd2QubmFtZSkNCiAgICBEQkdUYWIoKQ0KICAgIGlmIHdkLndlYXBvbnR5cGUgPT0gW1tTaGllbGRdXSBhbmQgd2Quc2hpZWxkcG93ZXIgdGhlbg0KICAgICAgICBkbw0KICAgICAgICAgICAgREJHRWNobyh3ZC5uYW1lIC4uICIgaXMgc2hpZWxkIikNCiAgICAgICAgICAgIGxvY2FsIHJhdGlvPUdldEZsaXBSYXRpbyhNaWRkbGVDb3N0KShjb3N0KSAtLSAqRGVjZW50UmF0aW8oTWlkZGxlQ29zdCkoY29zdCwtMSkNCiAgICAgICAgICAgIHdkLnNoaWVsZHBvd2VyPXdkLnNoaWVsZHBvd2VyKnJhdGlvDQogICAgICAgICAgICBpZiB3ZC5zaGllbGRwb3dlcnJlZ2VuIHRoZW4NCiAgICAgICAgICAgICAgICB3ZC5zaGllbGRwb3dlcnJlZ2VuPXdkLnNoaWVsZHBvd2VycmVnZW4qcmF0aW8NCiAgICAgICAgICAgIGVuZA0KICAgICAgICAgICAgaWYgd2Quc2hpZWxkcG93ZXJyZWdlbmVuZXJneSB0aGVuDQogICAgICAgICAgICAgICAgd2Quc2hpZWxkcG93ZXJyZWdlbmVuZXJneT13ZC5zaGllbGRwb3dlcnJlZ2VuZW5lcmd5KnJhdGlvDQogICAgICAgICAgICBlbmQNCiAgICAgICAgZW5kDQogICAgZWxzZQ0KICAgICAgICBpZiB3ZC5kYW1hZ2UgYW5kIHdkLmRhbWFnZS5kZWZhdWx0IGFuZCAwPHdkLmRhbWFnZS5kZWZhdWx0IHRoZW4NCiAgICAgICAgICAgIERCR0VjaG8od2QubmFtZSAuLiAiIGlzIHdlYXBvbiIpDQogICAgICAgICAgICBkbw0KICAgICAgICAgICAgICAgIGxvY2FsIHJhdGlvPUdldEZsaXBSYXRpbyhNaWRkbGVDb3N0KShjb3N0KSpEZWNlbnRSYXRpbyhNaWRkbGVDb3N0KShjb3N0LC00KSAtLS8vR2V0U1FGbGlwUmF0aW8oTWlkZGxlQ29zdCkoY29zdCkvRGVjZW50UmF0aW8oTWlkZGxlQ29zdCkoY29zdCkNCiAgICAgICAgICAgICAgICB3ZC5kYW1hZ2UuZGVmYXVsdD13ZC5kYW1hZ2UuZGVmYXVsdCpyYXRpbw0KICAgICAgICAgICAgICAgIGlmIHdkLmN1c3RvbXBhcmFtcyBhbmQgd2QuY3VzdG9tcGFyYW1zLmV4dHJhX2RhbWFnZSB0aGVuDQogICAgICAgICAgICAgICAgICAgIHdkLmN1c3RvbXBhcmFtcy5leHRyYV9kYW1hZ2U9d2QuY3VzdG9tcGFyYW1zLmV4dHJhX2RhbWFnZSpyYXRpbw0KICAgICAgICAgICAgICAgIGVuZA0KICAgICAgICAgICAgICAgIGlmIHdkLmRhbWFnZS5wbGFuZXMgdGhlbg0KICAgICAgICAgICAgICAgICAgICB3ZC5kYW1hZ2UucGxhbmVzPXdkLmRhbWFnZS5wbGFuZXMqcmF0aW8NCiAgICAgICAgICAgICAgICBlbmQNCiAgICAgICAgICAgICAgICBpZiB3ZC5jdXN0b21wYXJhbXMgYW5kIHdkLmN1c3RvbXBhcmFtcy5zaGllbGRfZHJhaW4gdGhlbg0KICAgICAgICAgICAgICAgICAgICB3ZC5jdXN0b21wYXJhbXMuc2hpZWxkX2RyYWluPXdkLmN1c3RvbXBhcmFtcy5zaGllbGRfZHJhaW4qcmF0aW8NCiAgICAgICAgICAgICAgICBlbmQNCiAgICAgICAgICAgIGVuZA0KICAgICAgICAgICAgZG8NCiAgICAgICAgICAgICAgICBpZiB3ZC5yYW5nZSB0aGVuDQogICAgICAgICAgICAgICAgICAgIERCR0VjaG8od2QubmFtZSAuLiAiIGhhcyByYW5nZSIpDQogICAgICAgICAgICAgICAgICAgIGxvY2FsIHJhdGlvXz0xLjUNCiAgICAgICAgICAgICAgICAgICAgbG9jYWwgcmF0aW89RGVjZW50UmF0aW8oTWlkZGxlQ29zdCkoY29zdCxyYXRpb18pDQogICAgICAgICAgICAgICAgICAgIHdkLnJhbmdlPXdkLnJhbmdlKnJhdGlvDQoNCiAgICAgICAgICAgICAgICAgICAgaWYgd2Qud2VhcG9udmVsb2NpdHkgdGhlbg0KICAgICAgICAgICAgICAgICAgICAgICAgd2Qud2VhcG9udmVsb2NpdHk9d2Qud2VhcG9udmVsb2NpdHkqcmF0aW8NCiAgICAgICAgICAgICAgICAgICAgZW5kDQoNCiAgICAgICAgICAgICAgICAgICAgaWYgd2Quc3RhcnR2ZWxvY2l0eSB0aGVuDQogICAgICAgICAgICAgICAgICAgICAgICB3ZC5zdGFydHZlbG9jaXR5PXdkLnN0YXJ0dmVsb2NpdHkqcmF0aW8NCiAgICAgICAgICAgICAgICAgICAgZW5kDQogICAgICAgICAgICAgICAgZW5kDQogICAgICAgICAgICBlbmQNCiAgICAgICAgICAgIGRvDQogICAgICAgICAgICAgICAgaWYgbm90IHdkLmFyZWFvZmVmZmVjdCB0aGVuDQogICAgICAgICAgICAgICAgICAgIERCR0VjaG8od2QubmFtZSAuLiAiIGdpdmUgYW9lIikNCiAgICAgICAgICAgICAgICAgICAgd2QuYXJlYW9mZWZmZWN0PTE2DQogICAgICAgICAgICAgICAgICAgIHdkLmV4cGxvc2lvbmdlbmVyYXRvcj1bW2N1c3RvbTpFTUdfSElUX0hFXV0NCiAgICAgICAgICAgICAgICBlbmQNCiAgICAgICAgICAgICAgICBsb2NhbCByYXRpbz1EZWNlbnRSYXRpbyhNaWRkbGVDb3N0KShjb3N0LDEuNSkNCiAgICAgICAgICAgICAgICB3ZC5hcmVhb2ZlZmZlY3Q9d2QuYXJlYW9mZWZmZWN0KnJhdGlvDQogICAgICAgICAgICBlbmQNCiAgICAgICAgICAgIGRvDQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICBlbmQNCiAgICAgICAgZWxzZQ0KICAgICAgICBlbmQNCiAgICBlbmQNCiAgICBEQkdUYWJFbmQoKQ0KICAgIHJldHVybiB0cnVlDQplbmQNCg0KbG9jYWwgRmxpcGVyc09uVUQ9ew0KICAgIGZ1bmN0aW9uICh1ZCkNCiAgICAgICAgaWYgdWQubWV0YWxjb3N0IGFuZCAwPHVkLm1ldGFsY29zdCB0aGVuDQogICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGNvc3QpDQogICAgICAgICAgICAgICAgbG9jYWwgcmF0aW89R2V0RmxpcFJhdGlvKE1pZGRsZUNvc3QpKGNvc3QpDQogICAgICAgICAgICAgICAgdWQubWV0YWxjb3N0PXJhdGlvKmNvc3QNCiAgICAgICAgICAgIGVuZA0KICAgICAgICBlbHNlDQogICAgICAgICAgICBEQkdFY2hvKCJVbml0ICIgLi4gdWQubmFtZSAuLiAiICdzIG1ldGFsY29zdCBpcyAiIC4uIHRvc3RyaW5nKHVkLm1ldGFsY29zdCkpDQogICAgICAgICAgICByZXR1cm4gbmlsDQogICAgICAgIGVuZA0KICAgIGVuZCwNCg0KICAgIGZ1bmN0aW9uICh1ZCkNCiAgICAgICAgaWYgdWQuaGVhbHRoIGFuZCAwIDwgdWQuaGVhbHRoIHRoZW4NCiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoY29zdCkNCiAgICAgICAgICAgICAgICBpZiB1ZC5hdXRvaGVhbCB0aGVuDQogICAgICAgICAgICAgICAgICAgIHVkLmhlYWx0aD11ZC5oZWFsdGgrdWQuYXV0b2hlYWwqMzANCiAgICAgICAgICAgICAgICAgICAgdWQuYXV0b2hlYWw9bmlsDQogICAgICAgICAgICAgICAgZW5kDQogICAgICAgICAgICAgICAgaWYgdWQuaWRsZUF1dG9IZWFsIHRoZW4NCiAgICAgICAgICAgICAgICAgICAgdWQuaGVhbHRoPXVkLmhlYWx0aCt1ZC5pZGxlQXV0b0hlYWwqKDMwLXVkLmlkbGVUaW1lLzMwKQ0KICAgICAgICAgICAgICAgICAgICB1ZC5pZGxlQXV0b0hlYWw9bmlsDQogICAgICAgICAgICAgICAgZW5kDQogICAgICAgICAgICAgICAgdWQuaGVhbHRoPXVkLmhlYWx0aCpHZXRGbGlwUmF0aW8oTWlkZGxlQ29zdCkoY29zdCkqRGVjZW50UmF0aW8oTWlkZGxlQ29zdCkoY29zdCwtMC43NSktLUdldFNRRmxpcFJhdGlvKE1pZGRsZUNvc3QpKGNvc3QpDQogICAgICAgICAgICBlbmQNCiAgICAgICAgZWxzZQ0KICAgICAgICAgICAgREJHRWNobygiXHRVbml0ICIgLi4gdWQubmFtZSAuLiAiICdzIGhlYWx0aCBpcyAiIC4uIHRvc3RyaW5nKHVkLmhlYWx0aCkpDQogICAgICAgICAgICByZXR1cm4gbmlsDQogICAgICAgIGVuZA0KICAgIGVuZCwNCiAgICAtLXNwZWVkDQogICAgZnVuY3Rpb24gKHVkKQ0KICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChjb3N0KQ0KICAgICAgICAgICAgICAgIGxvY2FsIHJhdGlvPURlY2VudFJhdGlvKE1pZGRsZUNvc3QpKGNvc3QsLTEpOw0KICAgICAgICAgICAgICAgIGlmIHVkLnNwZWVkIHRoZW4NCiAgICAgICAgICAgICAgICAgICAgdWQuc3BlZWQ9dWQuc3BlZWQqcmF0aW8NCiAgICAgICAgICAgICAgICBlbmQgLS1HZXRTUUZsaXBSYXRpbyhNaWRkbGVDb3N0KShjb3N0KQ0KICAgICAgICAgICAgICAgIGlmIHVkLnR1cm5yYWRpdXMgdGhlbg0KICAgICAgICAgICAgICAgICAgICB1ZC50dXJucmFkaXVzPXVkLnR1cm5yYWRpdXMqcmF0aW8NCiAgICAgICAgICAgICAgICBlbmQNCiAgICAgICAgICAgIGVuZA0KICAgIGVuZCwNCiAgICAtLSBzaXplDQogICAgZnVuY3Rpb24gKHVkKQ0KICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGNvc3QpDQogICAgICAgICAgICAtLSBUT0RPDQogICAgICAgIGVuZA0KICAgIGVuZCwNCiAgICAtLXdwbnMNCiAgICBmdW5jdGlvbiAodWQpDQogICAgICAgIGxvY2FsIEZsaXBXRHM9e30NCg0KICAgICAgICBsb2NhbCBPbldEPWZ1bmN0aW9uICh3bmFtZSkNCiAgICAgICAgICAgIGlmIEZsaXBXRHNbd25hbWVdIHRoZW4gcmV0dXJuIHRydWUgZW5kDQogICAgICAgICAgICBpZiB1ZC53ZWFwb25kZWZzIGFuZCB1ZC53ZWFwb25kZWZzW3duYW1lXSB0aGVuDQogICAgICAgICAgICAgICAgREJHRWNobygiRmxpcCBXRDogIiAuLiB1ZC53ZWFwb25kZWZzW3duYW1lXS5uYW1lKQ0KICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgIGlmIFdEUyB0aGVuDQogICAgICAgICAgICAgICAgICAgIGlmIFdEU1t3bmFtZV0gdGhlbg0KICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWwgQ3B5V0Q9U3ByaW5nLlV0aWxpdGllcy5Db3B5VGFibGUoV0RTW3duYW1lXSkNCiAgICAgICAgICAgICAgICAgICAgICAgIHVkLndlYXBvbmRlZnM9dWQud2VhcG9uZGVmcyBvciB7fQ0KICAgICAgICAgICAgICAgICAgICAgICAgdWQud2VhcG9uZGVmc1t3bmFtZV09Q3B5V0QNCiAgICAgICAgICAgICAgICAgICAgICAgIERCR0VjaG8oIkZsaXAgQ29weWVkIFdEOiAiIC4uIHVkLndlYXBvbmRlZnNbd25hbWVdLm5hbWUpDQogICAgICAgICAgICAgICAgICAgIGVuZA0KICAgICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICAgICAgREJHRWNobygiV0Qgbm90IChjYW4ndCkgZm91bmQgIiAuLiB3bmFtZSkNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5pbA0KICAgICAgICAgICAgICAgIGVuZA0KICAgICAgICAgICAgZW5kDQogICAgICAgICAgICBGbGlwV0RzW3duYW1lXSA9IHVkLndlYXBvbmRlZnNbd25hbWVdDQogICAgICAgICAgICByZXR1cm4gdHJ1ZQ0KICAgICAgICBlbmQNCg0KICAgICAgICBpZiB1ZC53ZWFwb25zIHRoZW4NCiAgICAgICAgICAgIGlmIFRIRURlYnVnIHRoZW4NCiAgICAgICAgICAgICAgICBEQkdFY2hvKCJVbml0IEhhcyB3ZWFwb25zOiAiKQ0KICAgICAgICAgICAgICAgIERCR1RhYigpDQogICAgICAgICAgICAgICAgZm9yIF8sIHdwbiBpbiBwYWlycyh1ZC53ZWFwb25zKSBkbw0KICAgICAgICAgICAgICAgICAgICBEQkdFY2hvKHdwbi5kZWYpDQogICAgICAgICAgICAgICAgZW5kDQogICAgICAgICAgICAgICAgREJHVGFiRW5kKCkNCiAgICAgICAgICAgICAgICBpZiB1ZC53ZWFwb25kZWZzIHRoZW4NCiAgICAgICAgICAgICAgICAgICAgREJHRWNobygiVW5pdCBIYXMgd2VhcG9uRGVmczogIikNCiAgICAgICAgICAgICAgICAgICAgREJHVGFiKCkNCiAgICAgICAgICAgICAgICAgICAgZm9yIG5hbWUsIHdkIGluIHBhaXJzKHVkLndlYXBvbmRlZnMpIGRvDQogICAgICAgICAgICAgICAgICAgICAgICBEQkdFY2hvKG5hbWUgLi4gIiAtLSAiIC4uIHdkLm5hbWUpDQogICAgICAgICAgICAgICAgICAgIGVuZA0KICAgICAgICAgICAgICAgICAgICBEQkdUYWJFbmQoKQ0KICAgICAgICAgICAgICAgIGVuZA0KICAgICAgICAgICAgZW5kDQoNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgZm9yIF8sIHdwbiBpbiBwYWlycyh1ZC53ZWFwb25zKSBkbw0KICAgICAgICAgICAgICAgIGxvY2FsIHduYW1lPWxjKHdwbi5kZWYpDQogICAgICAgICAgICAgICAgREJHRWNobygiRm9yIFdlYXBvbjogIiAuLiB3bmFtZSkNCiAgICAgICAgICAgICAgICBEQkdUYWIoKQ0KICAgICAgICAgICAgICAgIGlmIG5vdCBPbldEKHduYW1lKSB0aGVuDQogICAgICAgICAgICAgICAgICAgIERCR1RhYkVuZCgpDQogICAgICAgICAgICAgICAgICAgIHJldHVybiBuaWwNCiAgICAgICAgICAgICAgICBlbmQNCiAgICAgICAgICAgICAgICBEQkdUYWJFbmQoKQ0KICAgICAgICAgICAgZW5kDQogICAgICAgIGVuZA0KICAgICAgICANCiAgICAgICAgaWYgdWQuc2VsZmRlc3RydWN0YXMgdGhlbg0KICAgICAgICAgICAgREJHRWNobygiRm9yIGRlYXRoYm9vbSAiIC4uIHVkLnNlbGZkZXN0cnVjdGFzKQ0KICAgICAgICAgICAgREJHVGFiKCkNCiAgICAgICAgICAgIGlmIG5vdCBPbldEKGxjKHVkLnNlbGZkZXN0cnVjdGFzKSkgdGhlbg0KICAgICAgICAgICAgICAgIERCR0VjaG8oIk5vIFdELCByZW1vdmUgIiAuLiB1ZC5zZWxmZGVzdHJ1Y3RhcykNCiAgICAgICAgICAgICAgICAtLXVkLmV4cGxvZGVBcz0gIFtbVElOWV9CVUlMRElOR0VYXV0NCiAgICAgICAgICAgICAgICAtLXVkLnNlbGZEZXN0cnVjdEFzPVtbVElOWV9CVUlMRElOR0VYXV0NCiAgICAgICAgICAgICAgICB1ZC5leHBsb2RlYXM9ICBbW1RJTllfQlVJTERJTkdFWF1dDQogICAgICAgICAgICAgICAgdWQuc2VsZmRlc3RydWN0YXM9W1tUSU5ZX0JVSUxESU5HRVhdXQ0KICAgICAgICAgICAgZW5kDQogICAgICAgICAgICBEQkdUYWJFbmQoKQ0KICAgICAgICBlbmQNCg0KICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGNvc3QpDQogICAgICAgICAgICBEQkdFY2hvKCJEbyBGbGlwIFdlYXBvbiIpDQogICAgICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBwYWlycyhGbGlwV0RzKSBkbw0KICAgICAgICAgICAgICAgIERCR0VjaG8oIkRvIEZsaXAgV2VhcG9uICIgLi4gdmFsdWUubmFtZSkNCiAgICAgICAgICAgICAgICBEQkdUYWIoKQ0KICAgICAgICAgICAgICAgIEZsaXBXRCh2YWx1ZSx1ZCxjb3N0KQ0KICAgICAgICAgICAgICAgIERCR1RhYkVuZCgpDQogICAgICAgICAgICBlbmQNCiAgICAgICAgZW5kDQogICAgICAgIA0KICAgIGVuZCwNCiAgICAtLWJwDQogICAgZnVuY3Rpb24gKHVkKQ0KICAgICAgICBpZiB1ZC53b3JrZXJ0aW1lIGFuZCB1ZC5idWlsZGRpc3RhbmNlIHRoZW4NCiAgICAgICAgICAgIERCR0VjaG8oInVuaXQgaXMgYnVpbGRlciIpDQogICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGNvc3QpDQogICAgICAgICAgICAgICAgREJHRWNobygidW5pdCBzZXQgYnAiKQ0KICAgICAgICAgICAgICAgIHVkLndvcmtlcnRpbWU9dWQud29ya2VydGltZSpHZXRGbGlwUmF0aW8oTWlkZGxlQ29zdCkoY29zdCkNCiAgICAgICAgICAgICAgICB1ZC5idWlsZGRpc3RhbmNlPXVkLmJ1aWxkZGlzdGFuY2UqRGVjZW50UmF0aW8oTWlkZGxlQ29zdCkoY29zdCwxLjUpDQogICAgICAgICAgICBlbmQNCiAgICAgICAgZWxzZQ0KICAgICAgICAgICAgREJHRWNobygidW5pdCBpcyBub3QgYnVpbGRlciIpDQogICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGNvc3QpDQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICBlbmQNCiAgICAgICAgZW5kDQogICAgZW5kLA0KICAgIC0tc2lnaHQNCiAgICBmdW5jdGlvbiAodWQpDQogICAgICAgIHJldHVybiBmdW5jdGlvbiAoY29zdCkNCiAgICAgICAgICAgIGxvY2FsIHJhdGlvXz0xLjUNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgbG9jYWwgcmF0aW89RGVjZW50UmF0aW8oTWlkZGxlQ29zdCkoY29zdCxyYXRpb18pDQogICAgICAgICAgICBEQkdFY2hvKCJDaGFuZ2UgdW5pdCBzaWdodCIpDQogICAgICAgICAgICBpZiB1ZC5zaWdodGRpc3RhbmNlIHRoZW4NCiAgICAgICAgICAgICAgICB1ZC5zaWdodGRpc3RhbmNlPXVkLnNpZ2h0ZGlzdGFuY2UqcmF0aW8NCiAgICAgICAgICAgIGVuZA0KICAgICAgICAgICAgaWYgdWQucmFkYXJkaXN0YW5jZSB0aGVuDQogICAgICAgICAgICAgICAgdWQucmFkYXJkaXN0YW5jZT11ZC5yYWRhcmRpc3RhbmNlKnJhdGlvDQogICAgICAgICAgICBlbmQNCiAgICAgICAgICAgIGlmIHVkLnNvbmFyZGlzdGFuY2UgdGhlbg0KICAgICAgICAgICAgICAgIHVkLnNvbmFyZGlzdGFuY2U9dWQuc29uYXJkaXN0YW5jZSpyYXRpbw0KICAgICAgICAgICAgZW5kDQogICAgICAgIGVuZA0KICAgIGVuZCwNCiAgICAtLSBqdW1wDQogICAgZnVuY3Rpb24gKHVkKQ0KICAgICAgICBpZiB1ZC5jdXN0b21wYXJhbXMgYW5kIHVkLmN1c3RvbXBhcmFtcy5jYW5qdW1wPT0xIHRoZW4NCiAgICAgICAgICAgIERCR0VjaG8oInVuaXQgaXMganVtcHkiKQ0KICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChjb3N0KQ0KICAgICAgICAgICAgICAgIERCR0VjaG8oIkNoYW5nZSB1bml0IGp1bXAiKQ0KICAgICAgICAgICAgICAgIGxvY2FsIHJhdGlvPURlY2VudFJhdGlvKE1pZGRsZUNvc3QpKGNvc3QsMS41KQ0KICAgICAgICAgICAgICAgIHVkLmN1c3RvbXBhcmFtcy5qdW1wX3JhbmdlPXVkLmN1c3RvbXBhcmFtcy5qdW1wX3JhbmdlKnJhdGlvDQogICAgICAgICAgICAgICAgdWQuY3VzdG9tcGFyYW1zLmp1bXBfc3BlZWQ9dWQuY3VzdG9tcGFyYW1zLmp1bXBfc3BlZWQqcmF0aW8NCiAgICAgICAgICAgICAgICB1ZC5jdXN0b21wYXJhbXMuanVtcF9yZWxvYWQ9dWQuY3VzdG9tcGFyYW1zLmp1bXBfcmVsb2FkKnJhdGlvDQogICAgICAgICAgICBlbmQNCiAgICAgICAgZWxzZQ0KICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChjb3N0KQ0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgZW5kDQogICAgICAgIGVuZA0KICAgIGVuZCwNCiAgICAtLSBhcmVhY2xvYWsNCiAgICBmdW5jdGlvbiAodWQpDQogICAgICAgIHJldHVybiBmdW5jdGlvbiAoY29zdCkNCiAgICAgICAgICAgIGxvY2FsIHJhdGlvPURlY2VudFJhdGlvKE1pZGRsZUNvc3QpKGNvc3QsMS41KQ0KICAgICAgICAgICAgaWYgdWQuY3VzdG9tcGFyYW1zIGFuZCB1ZC5jdXN0b21wYXJhbXMuYXJlYV9jbG9haz09MSB0aGVuDQogICAgICAgICAgICAgICAgREJHRWNobygiQ2hhbmdlIHVuaXQgYXJlYWNsb2FrIikNCiAgICAgICAgICAgICAgICB1ZC5jdXN0b21wYXJhbXMuYXJlYV9jbG9ha191cGtlZXA9dWQuY3VzdG9tcGFyYW1zLmFyZWFfY2xvYWtfdXBrZWVwKnJhdGlvDQogICAgICAgICAgICAgICAgdWQuY3VzdG9tcGFyYW1zLmFyZWFfY2xvYWtfcmFkaXVzPXVkLmN1c3RvbXBhcmFtcy5hcmVhX2Nsb2FrX3JhZGl1cypyYXRpbw0KICAgICAgICAgICAgZW5kDQoNCiAgICAgICAgICAgIGlmIHVkLnJhZGFyZGlzdGFuY2VqYW0gdGhlbg0KICAgICAgICAgICAgICAgIERCR0VjaG8oIkNoYW5nZSB1bml0IHJhZGFyZGlzdGFuY2VqYW0iKQ0KICAgICAgICAgICAgICAgIHVkLnJhZGFyZGlzdGFuY2VqYW09dWQucmFkYXJkaXN0YW5jZWphbSpyYXRpbw0KICAgICAgICAgICAgZW5kDQogICAgICAgIGVuZA0KICAgIGVuZCwNCiAgICAtLS0gb3AgZ3JheSBnb28NCiAgICBmdW5jdGlvbiAodWQpDQogICAgICAgIGlmIHVkLmN1c3RvbXBhcmFtcyBhbmQgdWQuY3VzdG9tcGFyYW1zLmdyZXlfZ29vPT0xIHRoZW4NCiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoY29zdCkNCiAgICAgICAgICAgICAgICBsb2NhbCByYXRpbz1HZXRGbGlwUmF0aW8oTWlkZGxlQ29zdCkoY29zdCkNCiAgICAgICAgICAgICAgICB1ZC5jdXN0b21wYXJhbXMuZ3JleV9nb29fZHJhaW49dWQuY3VzdG9tcGFyYW1zLmdyZXlfZ29vX2RyYWluKnJhdGlvDQogICAgICAgICAgICAgICAgdWQuY3VzdG9tcGFyYW1zLmdyZXlfZ29vX2Nvc3Q9dWQuY3VzdG9tcGFyYW1zLmdyZXlfZ29vX2Nvc3QqcmF0aW8NCiAgICAgICAgICAgICAgICBsb2NhbCByYW5nZXJhdGlvPURlY2VudFJhdGlvKE1pZGRsZUNvc3QpKGNvc3QsMS41KQ0KICAgICAgICAgICAgICAgIHVkLmN1c3RvbXBhcmFtcy5ncmV5X2dvb19yYW5nZT11ZC5jdXN0b21wYXJhbXMuZ3JleV9nb29fcmFuZ2UqcmFuZ2VyYXRpbw0KICAgICAgICAgICAgZW5kDQogICAgICAgIGVsc2UNCiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoY29zdCkNCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgIGVuZA0KICAgICAgICBlbmQNCiAgICBlbmQNCn0NCg0KDQpsb2NhbCBmdW5jdGlvbiBGbGlwVUQodWQpDQogICAgREJHRWNobygiT24gVW5pdCAiIC4uIHVkLm5hbWUpDQogICAgREJHVGFiKCkNCiAgICBsb2NhbCBtZXRhbENvc3Q9MA0KICAgIGlmIHVkLm1ldGFsY29zdCBhbmQgMDx1ZC5tZXRhbGNvc3QgdGhlbg0KICAgICAgICBtZXRhbENvc3Q9dWQubWV0YWxjb3N0DQogICAgZWxzZQ0KICAgICAgICBEQkdUYWJFbmQoKQ0KICAgICAgICByZXR1cm4gZmFsc2UNCiAgICBlbmQNCg0KICAgIGxvY2FsIHBhc3M9dHJ1ZQ0KICAgIGxvY2FsIEZsaXBGbnM9e30NCiAgICBmb3IgbmFtZSxmIGluIHBhaXJzKEZsaXBlcnNPblVEKSBkbw0KICAgICAgICBsb2NhbCByZXM9Zih1ZCkNCiAgICAgICAgaWYgbm90IHJlcyB0aGVuDQogICAgICAgICAgICBwYXNzPWZhbHNlDQogICAgICAgICAgICBEQkdFY2hvKCJVbml0ICIgLi4gdWQubmFtZSAuLiAiIENhbid0IHBhc3MgQ2hlY2sgIiAuLiBuYW1lKQ0KICAgICAgICAgICAgYnJlYWsNCiAgICAgICAgZWxzZQ0KICAgICAgICAgICAgRmxpcEZuc1sjRmxpcEZucysxXSA9IHJlcw0KICAgICAgICBlbmQNCiAgICBlbmQNCiAgICBpZiBub3QgcGFzcyB0aGVuDQogICAgICAgIHJldHVybiBmYWxzZQ0KICAgIGVuZA0KICAgIC0tREJHVGFiRW5kKCkNCiAgICAtLURCR1RhYigpDQogICAgREJHRWNobygiRG8gRmxpcCBVbml0ICIgLi4gdWQubmFtZSkNCiAgICBmb3IgXyxmIGluIHBhaXJzKEZsaXBGbnMpIGRvDQogICAgICAgIGYobWV0YWxDb3N0KQ0KICAgIGVuZA0KICAgIERCR1RhYkVuZCgpDQoNCiAgICByZXR1cm4gdHJ1ZQ0KDQplbmQNCmxvY2FsIG5vdEluVW5pdHM9ew0KICAgIHNsaWNlcj10cnVlLA0KICAgIGR5bmFzc2F1bHQxPXRydWUsDQogICAgZHlua25pZ2h0MT10cnVlLA0KICAgIGR5bnJlY29uMT10cnVlLA0KICAgIGR5bnN0cmlrZTE9dHJ1ZSwNCiAgICBkeW5zdXBwb3J0MT10cnVlLA0KICAgIHBsYW5lbGlnaHRzY291dD10cnVlLA0KICAgIHN1YnRhY21pc3NpbGU9dHJ1ZSwNCiAgICBzaGlwY2Fycmllcj10cnVlLA0KfQ0KDQpsb2NhbCBUZXN0VW5pdHM9ew0KICAgIHR1cnJldGxhc2VyPXRydWUsDQogICAgc3RyaWRlcmFudGloZWF2eT10cnVlLA0KICAgIHN0cmlkZXJhcnR5PXRydWUsDQogICAgc3RyaWRlcmJhbnRoYT10cnVlLA0KICAgIHN0cmlkZXJkYW50ZT10cnVlLA0KICAgIHN0cmlkZXJkZXRyaW1lbnQ9dHJ1ZSwNCiAgICBzdHJpZGVyZnVubmVsd2ViPXRydWUsDQogICAgc3RyaWRlcnNjb3JwaW9uPXRydWUsDQogICAgc3BpZGVyYWE9dHJ1ZSwNCiAgICBzcGlkZXJhbnRpaGVhdnk9dHJ1ZSwNCiAgICBzcGlkZXJhc3NhdWx0PXRydWUsDQogICAgc3BpZGVyY29uPXRydWUsDQogICAgc3BpZGVyY3JhYmU9dHJ1ZSwNCiAgICBzcGlkZXJlbXA9dHJ1ZSwNCiAgICBzcGlkZXJyaW90PXRydWUsDQogICAgc3BpZGVyc2NvdXQ9dHJ1ZSwNCiAgICBzcGlkZXJza2lybT10cnVlLA0KDQp9DQoNCmxvY2FsIEVjb25Vbml0cz17DQoNCiAgICBlbmVyZ3lmdXNpb249dHJ1ZSwNCiAgICBlbmVyZ3lnZW89dHJ1ZSwNCiAgICBlbmVyZ3loZWF2eWdlbz10cnVlLA0KICAgIGVuZXJneXB5bG9uPXRydWUsDQogICAgZW5lcmd5c2luZ3U9dHJ1ZSwNCiAgICBlbmVyZ3lzb2xhcj10cnVlLA0KICAgIGVuZXJneXdpbmQ9dHJ1ZSwNCiAgICBzdGF0aWNtZXg9dHJ1ZSwNCiAgICBzdGF0aWNzdG9yYWdlPXRydWUsDQoNCn0NCg0KbG9jYWwgU3BlY2lhbFVuaXRzPXsNCiAgICBzdGF0aWNhbnRpbnVrZT10cnVlLA0KICAgIHN0YXRpY2Nvbj10cnVlLA0KICAgIHN0YXRpY2hlYXZ5cmFkYXI9dHJ1ZSwNCiAgICBzdGF0aWNqYW1tZXI9dHJ1ZSwNCiAgICBzdGF0aWNtaXNzaWxlc2lsbz10cnVlLA0KICAgIHRhY251a2U9dHJ1ZSwNCiAgICBzZWlzbWljPXRydWUsDQogICAgZW1wbWlzc2lsZT10cnVlLA0KICAgIG5hcGFsbW1pc3NpbGU9dHJ1ZSwNCiAgICBtaXNzaWxlc2xvdz10cnVlLA0KICAgIHN0YXRpY251a2U9dHJ1ZSwNCiAgICBzdGF0aWNyYWRhcj10cnVlLA0KICAgIHN0YXRpY3JlYXJtPXRydWUNCn0NCg0KLS1bWw0KZm9yIF8sIG5hbWUgaW4gcGFpcnMoVGVzdFVuaXRzKSBkbw0KICAgIEZsaXBVRChVbml0RGVmc1tuYW1lXSkNCmVuZA0KXV0NCg0KZm9yIG5hbWUsdmFsdWUgaW4gcGFpcnMoVW5pdERlZnMpIGRvDQogICAgaWYgbm90IG5vdEluVW5pdHNbbmFtZV0gdGhlbg0KICAgICAgICBpZiAoIHZhbHVlLmN1c3RvbXBhcmFtcyBhbmQgKHZhbHVlLmN1c3RvbXBhcmFtcy5zb2xpZF9mYWN0b3J5IG9yIHZhbHVlLmN1c3RvbXBhcmFtcy5mYWN0b3J5dGFiPT0xKSApIG9yIChuYW1lPT0icGxhdGVndW5zaGlwIiBvciBuYW1lID09ICJwbGF0ZXBsYW5lIikgdGhlbg0KICAgICAgICAgICAgaWYgbmFtZSA9PSAic3RyaWRlcmh1YiIgdGhlbg0KICAgICAgICAgICAgICAgIHZhbHVlLmN1c3RvbXBhcmFtcy5wbG9wcGFibGU9MQ0KICAgICAgICAgICAgICAgIHZhbHVlLmN1c3RvbXBhcmFtcy5uZWVkZWRsaW5rPSBuaWwNCiAgICAgICAgICAgICAgICB2YWx1ZS5jdXN0b21wYXJhbXMucHlsb25yYW5nZT0gbmlsDQogICAgICAgICAgICAgICAgLS0gdmFsdWUubmFtZT0iUmVkaXJ0cyBIdWIiDQogICAgICAgICAgICAgICAgLS0gdmFsdWUuZGVzY3JpcHRpb249IkNvbnN0cnVjdHMgUmVkaXJ0c2VzIiAtLSBzYWQNCiAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICB2YWx1ZS5jdXN0b21wYXJhbXMucGxvcHBhYmxlPW5pbA0KICAgICAgICAgICAgICAgIHZhbHVlLmN1c3RvbXBhcmFtcy5uZWVkZWRsaW5rPSA1MA0KICAgICAgICAgICAgICAgIHZhbHVlLmN1c3RvbXBhcmFtcy5weWxvbnJhbmdlPSAyNTANCiAgICAgICAgICAgIGVuZA0KICAgICAgICBlbHNlaWYgdmFsdWUuY3VzdG9tcGFyYW1zIGFuZCAoIHZhbHVlLmN1c3RvbXBhcmFtcy5kb250Y291bnQ9PSIxIiBvciB2YWx1ZS5jdXN0b21wYXJhbXMuaXNfZHJvbmUgKXRoZW4NCiAgICAgICAgDQogICAgICAgIGVsc2VpZiBFY29uVW5pdHNbbmFtZV0gb3IgU3BlY2lhbFVuaXRzW25hbWVdIHRoZW4NCg0KICAgICAgICBlbHNlaWYgbm90IHZhbHVlLnNwZWVkIG9yIHZhbHVlLnNwZWVkPT0wIHRoZW4gLS0gbm8gc3dhcCB0dXJyZW50cyBjdXogb2RkDQogICAgICAgICAgICAtLSBqdXN0IHNraXAgYWxsIHRyb3VibGUgdGhvDQogICAgICAgIGVsc2UNCiAgICAgICAgICAgIEZsaXBVRCh2YWx1ZSkNCiAgICAgICAgZW5kDQogICAgZW5kDQplbmQNClVuaXREZWZzWyJzdHJpZGVyZnVubmVsd2ViIl0ud29ya2VydGltZT1Vbml0RGVmc1sic3RyaWRlcmZ1bm5lbHdlYiJdLndvcmtlcnRpbWUqNQ0KVW5pdERlZnNbInN0cmlkZXJmdW5uZWx3ZWIiXS5oZWFsdGg9VW5pdERlZnNbInN0cmlkZXJmdW5uZWx3ZWIiXS5oZWFsdGgqMg"



	}



}