ZGlmZiAtLWdpdCBhL0xpYi9zcWxpdGUzL2RiYXBpMi5weSBiL0xpYi9zcWxpdGUzL2RiYXBpMi5weQppbmRleCA1MmZiNGFlLi5kMDUxZjA0IDEwMDY0NAotLS0gYS9MaWIvc3FsaXRlMy9kYmFwaTIucHkKKysrIGIvTGliL3NxbGl0ZTMvZGJhcGkyLnB5CkBAIC02MCwxMyArNjAsMTMgQEAKICAgICAgICAgcmV0dXJuIHZhbC5pc29mb3JtYXQoIiAiKQogCiAgICAgZGVmIGNvbnZlcnRfZGF0ZSh2YWwpOgotICAgICAgICByZXR1cm4gZGF0ZXRpbWUuZGF0ZSgqbWFwKGludCwgdmFsLnNwbGl0KCItIikpKQorICAgICAgICByZXR1cm4gZGF0ZXRpbWUuZGF0ZSgqbWFwKGludCwgdmFsLnNwbGl0KGIiLSIpKSkKIAogICAgIGRlZiBjb252ZXJ0X3RpbWVzdGFtcCh2YWwpOgotICAgICAgICBkYXRlcGFydCwgdGltZXBhcnQgPSB2YWwuc3BsaXQoIiAiKQotICAgICAgICB5ZWFyLCBtb250aCwgZGF5ID0gbWFwKGludCwgZGF0ZXBhcnQuc3BsaXQoIi0iKSkKLSAgICAgICAgdGltZXBhcnRfZnVsbCA9IHRpbWVwYXJ0LnNwbGl0KCIuIikKLSAgICAgICAgaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMgPSBtYXAoaW50LCB0aW1lcGFydF9mdWxsWzBdLnNwbGl0KCI6IikpCisgICAgICAgIGRhdGVwYXJ0LCB0aW1lcGFydCA9IHZhbC5zcGxpdChiIiAiKQorICAgICAgICB5ZWFyLCBtb250aCwgZGF5ID0gbWFwKGludCwgZGF0ZXBhcnQuc3BsaXQoYiItIikpCisgICAgICAgIHRpbWVwYXJ0X2Z1bGwgPSB0aW1lcGFydC5zcGxpdChiIi4iKQorICAgICAgICBob3VycywgbWludXRlcywgc2Vjb25kcyA9IG1hcChpbnQsIHRpbWVwYXJ0X2Z1bGxbMF0uc3BsaXQoYiI6IikpCiAgICAgICAgIGlmIGxlbih0aW1lcGFydF9mdWxsKSA9PSAyOgogICAgICAgICAgICAgbWljcm9zZWNvbmRzID0gaW50KHRpbWVwYXJ0X2Z1bGxbMV0pCiAgICAgICAgIGVsc2U6CmRpZmYgLS1naXQgYS9MaWIvc3FsaXRlMy90ZXN0L2ZhY3RvcnkucHkgYi9MaWIvc3FsaXRlMy90ZXN0L2ZhY3RvcnkucHkKaW5kZXggZjIwODQ4Zi4uYTlhODI4ZiAxMDA2NDQKLS0tIGEvTGliL3NxbGl0ZTMvdGVzdC9mYWN0b3J5LnB5CisrKyBiL0xpYi9zcWxpdGUzL3Rlc3QvZmFjdG9yeS5weQpAQCAtMTYzLDggKzE2Myw4IEBACiAgICAgICAgIGdlcm1hbnkgPSAiRGV1dGNobGFuZCIKICAgICAgICAgYV9yb3cgPSBzZWxmLmNvbi5leGVjdXRlKCJzZWxlY3QgPyIsIChhdXN0cmlhLCkpLmZldGNob25lKCkKICAgICAgICAgZF9yb3cgPSBzZWxmLmNvbi5leGVjdXRlKCJzZWxlY3QgPyIsIChnZXJtYW55LCkpLmZldGNob25lKCkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHR5cGUoYV9yb3dbMF0pID09IHN0ciwgInR5cGUgb2Ygbm9uLUFTQ0lJIHJvdyBtdXN0IGJlIHVuaWNvZGUiKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3ModHlwZShkX3Jvd1swXSkgPT0gc3RyOCwgInR5cGUgb2YgQVNDSUktb25seSByb3cgbXVzdCBiZSBzdHI4IikKKyAgICAgICAgc2VsZi5mYWlsVW5sZXNzKHR5cGUoYV9yb3dbMF0pID09IHN0ciwgInR5cGUgb2Ygbm9uLUFTQ0lJIHJvdyBtdXN0IGJlIHN0ciIpCisgICAgICAgIHNlbGYuZmFpbFVubGVzcyh0eXBlKGRfcm93WzBdKSA9PSBzdHIsICJ0eXBlIG9mIEFTQ0lJLW9ubHkgcm93IG11c3QgYmUgc3RyIikKIAogICAgIGRlZiB0ZWFyRG93bihzZWxmKToKICAgICAgICAgc2VsZi5jb24uY2xvc2UoKQpkaWZmIC0tZ2l0IGEvTGliL3NxbGl0ZTMvdGVzdC90eXBlcy5weSBiL0xpYi9zcWxpdGUzL3Rlc3QvdHlwZXMucHkKaW5kZXggNGZmOTQ4ZC4uODg0NWUwYyAxMDA2NDQKLS0tIGEvTGliL3NxbGl0ZTMvdGVzdC90eXBlcy5weQorKysgYi9MaWIvc3FsaXRlMy90ZXN0L3R5cGVzLnB5CkBAIC02MiwxMSArNjIsMTIgQEAKICAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwocm93WzBdLCB2YWwpCiAKICAgICBkZWYgQ2hlY2tCbG9iKHNlbGYpOgotICAgICAgICB2YWwgPSBtZW1vcnl2aWV3KGIiR3VnbGh1cGYiKQorICAgICAgICBzYW1wbGUgPSBiIkd1Z2xodXBmIgorICAgICAgICB2YWwgPSBtZW1vcnl2aWV3KHNhbXBsZSkKICAgICAgICAgc2VsZi5jdXIuZXhlY3V0ZSgiaW5zZXJ0IGludG8gdGVzdChiKSB2YWx1ZXMgKD8pIiwgKHZhbCwpKQogICAgICAgICBzZWxmLmN1ci5leGVjdXRlKCJzZWxlY3QgYiBmcm9tIHRlc3QiKQogICAgICAgICByb3cgPSBzZWxmLmN1ci5mZXRjaG9uZSgpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHJvd1swXSwgdmFsKQorICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChyb3dbMF0sIHNhbXBsZSkKIAogICAgIGRlZiBDaGVja1VuaWNvZGVFeGVjdXRlKHNlbGYpOgogICAgICAgICBzZWxmLmN1ci5leGVjdXRlKCJzZWxlY3QgJ9ZzdGVycmVpY2gnIikKQEAgLTc2LDggKzc3LDggQEAKIGNsYXNzIERlY2xUeXBlc1Rlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBjbGFzcyBGb286CiAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBfdmFsKToKLSAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoX3ZhbCwgc3RyOCk6Ci0gICAgICAgICAgICAgICAgIyBzcWxpdGUzIGFsd2F5cyBjYWxscyBfX2luaXRfXyB3aXRoIGEgc3RyOCBjcmVhdGVkIGZyb20gYQorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShfdmFsLCBieXRlcyk6CisgICAgICAgICAgICAgICAgIyBzcWxpdGUzIGFsd2F5cyBjYWxscyBfX2luaXRfXyB3aXRoIGEgYnl0ZXMgY3JlYXRlZCBmcm9tIGEKICAgICAgICAgICAgICAgICAjIFVURi04IHN0cmluZyB3aGVuIF9fY29uZm9ybV9fIHdhcyB1c2VkIHRvIHN0b3JlIHRoZSBvYmplY3QuCiAgICAgICAgICAgICAgICAgX3ZhbCA9IF92YWwuZGVjb2RlKCd1dGY4JykKICAgICAgICAgICAgIHNlbGYudmFsID0gX3ZhbApAQCAtMjA3LDExICsyMDgsMTIgQEAKIAogICAgIGRlZiBDaGVja0Jsb2Ioc2VsZik6CiAgICAgICAgICMgZGVmYXVsdAotICAgICAgICB2YWwgPSBtZW1vcnl2aWV3KGIiR3VnbGh1cGYiKQorICAgICAgICBzYW1wbGUgPSBiIkd1Z2xodXBmIgorICAgICAgICB2YWwgPSBtZW1vcnl2aWV3KHNhbXBsZSkKICAgICAgICAgc2VsZi5jdXIuZXhlY3V0ZSgiaW5zZXJ0IGludG8gdGVzdChiaW4pIHZhbHVlcyAoPykiLCAodmFsLCkpCiAgICAgICAgIHNlbGYuY3VyLmV4ZWN1dGUoInNlbGVjdCBiaW4gZnJvbSB0ZXN0IikKICAgICAgICAgcm93ID0gc2VsZi5jdXIuZmV0Y2hvbmUoKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbChyb3dbMF0sIHZhbCkKKyAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwocm93WzBdLCBzYW1wbGUpCiAKIGNsYXNzIENvbE5hbWVzVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiBzZXRVcChzZWxmKToKQEAgLTIxOSwxMyArMjIxLDExIEBACiAgICAgICAgIHNlbGYuY3VyID0gc2VsZi5jb24uY3Vyc29yKCkKICAgICAgICAgc2VsZi5jdXIuZXhlY3V0ZSgiY3JlYXRlIHRhYmxlIHRlc3QoeCBmb28pIikKIAotICAgICAgICBzcWxpdGUuY29udmVydGVyc1siRk9PIl0gPSBsYW1iZGEgeDogIlslc10iICUgeAotICAgICAgICBzcWxpdGUuY29udmVydGVyc1siQkFSIl0gPSBsYW1iZGEgeDogIjwlcz4iICUgeAorICAgICAgICBzcWxpdGUuY29udmVydGVyc1siQkFSIl0gPSBsYW1iZGEgeDogYiI8IiArIHggKyBiIj4iCiAgICAgICAgIHNxbGl0ZS5jb252ZXJ0ZXJzWyJFWEMiXSA9IGxhbWJkYSB4OiA1LzAKICAgICAgICAgc3FsaXRlLmNvbnZlcnRlcnNbIkIxQjEiXSA9IGxhbWJkYSB4OiAiTUFSS0VSIgogCiAgICAgZGVmIHRlYXJEb3duKHNlbGYpOgotICAgICAgICBkZWwgc3FsaXRlLmNvbnZlcnRlcnNbIkZPTyJdCiAgICAgICAgIGRlbCBzcWxpdGUuY29udmVydGVyc1siQkFSIl0KICAgICAgICAgZGVsIHNxbGl0ZS5jb252ZXJ0ZXJzWyJFWEMiXQogICAgICAgICBkZWwgc3FsaXRlLmNvbnZlcnRlcnNbIkIxQjEiXQpAQCAtMjUyLDE0ICsyNTIsMTQgQEAKICAgICAgICAgc2VsZi5jdXIuZXhlY3V0ZSgiaW5zZXJ0IGludG8gdGVzdCh4KSB2YWx1ZXMgKD8pIiwgKCJ4eHgiLCkpCiAgICAgICAgIHNlbGYuY3VyLmV4ZWN1dGUoJ3NlbGVjdCB4IGFzICJ4IFtiYXJdIiBmcm9tIHRlc3QnKQogICAgICAgICB2YWwgPSBzZWxmLmN1ci5mZXRjaG9uZSgpWzBdCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHZhbCwgIjx4eHg+IikKKyAgICAgICAgc2VsZi5mYWlsVW5sZXNzRXF1YWwodmFsLCBiIjx4eHg+IikKIAogICAgICAgICAjIENoZWNrIGlmIHRoZSBzdHJpcHBpbmcgb2YgY29sbmFtZXMgd29ya3MuIEV2ZXJ5dGhpbmcgYWZ0ZXIgdGhlIGZpcnN0CiAgICAgICAgICMgd2hpdGVzcGFjZSBzaG91bGQgYmUgc3RyaXBwZWQuCiAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHNlbGYuY3VyLmRlc2NyaXB0aW9uWzBdWzBdLCAieCIpCiAKICAgICBkZWYgQ2hlY2tDYXNlSW5Db252ZXJ0ZXJOYW1lKHNlbGYpOgotICAgICAgICBzZWxmLmN1ci5leGVjdXRlKCIiInNlbGVjdCAnb3RoZXInIGFzICJ4IFtiMWIxXVwiIiIiKQorICAgICAgICBzZWxmLmN1ci5leGVjdXRlKCJzZWxlY3QgJ290aGVyJyBhcyBcInggW2IxYjFdXCIiKQogICAgICAgICB2YWwgPSBzZWxmLmN1ci5mZXRjaG9uZSgpWzBdCiAgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHZhbCwgIk1BUktFUiIpCiAKZGlmZiAtLWdpdCBhL0xpYi9zcWxpdGUzL3Rlc3QvdXNlcmZ1bmN0aW9ucy5weSBiL0xpYi9zcWxpdGUzL3Rlc3QvdXNlcmZ1bmN0aW9ucy5weQppbmRleCA5OTQwNTdlLi5kYzNhNzA5IDEwMDY0NAotLS0gYS9MaWIvc3FsaXRlMy90ZXN0L3VzZXJmdW5jdGlvbnMucHkKKysrIGIvTGliL3NxbGl0ZTMvdGVzdC91c2VyZnVuY3Rpb25zLnB5CkBAIC0xOTgsNyArMTk4LDcgQEAKICAgICAgICAgY3VyLmV4ZWN1dGUoInNlbGVjdCByZXR1cm5ibG9iKCkiKQogICAgICAgICB2YWwgPSBjdXIuZmV0Y2hvbmUoKVswXQogICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCh0eXBlKHZhbCksIGJ5dGVzKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3NFcXVhbCh2YWwsIG1lbW9yeXZpZXcoYiJibG9iIikpCisgICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKHZhbCwgYiJibG9iIikKIAogICAgIGRlZiBDaGVja0Z1bmNFeGNlcHRpb24oc2VsZik6CiAgICAgICAgIGN1ciA9IHNlbGYuY29uLmN1cnNvcigpCg==