From 236b78c33b46726c0f3df60dfaaa7d6ea22e6500 Mon Sep 17 00:00:00 2001 From: git_admin Date: Mon, 27 Apr 2026 06:54:02 +0000 Subject: [PATCH] Tower: upload cetmix_tower_server 16.0.3.0.1 (via marketplace) --- .../tests/test_jet_waypoint_template_access.py | 1 + 1 file changed, 1 insertion(+) create mode 100644 addons/cetmix_tower_server/tests/test_jet_waypoint_template_access.py diff --git a/addons/cetmix_tower_server/tests/test_jet_waypoint_template_access.py b/addons/cetmix_tower_server/tests/test_jet_waypoint_template_access.py new file mode 100644 index 0000000..c3f0242 --- /dev/null +++ b/addons/cetmix_tower_server/tests/test_jet_waypoint_template_access.py @@ -0,0 +1 @@ +IyBDb3B5cmlnaHQgKEMpIDIwMjUgQ2V0bWl4IE/DnAojIExpY2Vuc2UgQUdQTC0zLjAgb3IgbGF0ZXIgKGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsKS4KCmZyb20gb2Rvby5leGNlcHRpb25zIGltcG9ydCBBY2Nlc3NFcnJvcgoKZnJvbSAuY29tbW9uX2pldHMgaW1wb3J0IFRlc3RUb3dlckpldHNDb21tb24KCgpjbGFzcyBUZXN0VG93ZXJKZXRXYXlwb2ludFRlbXBsYXRlQWNjZXNzKFRlc3RUb3dlckpldHNDb21tb24pOgogICAgIiIiCiAgICBUZXN0IGFjY2VzcyBydWxlcyBmb3IgSmV0IFdheXBvaW50IFRlbXBsYXRlIG1vZGVsCiAgICAiIiIKCiAgICBAY2xhc3NtZXRob2QKICAgIGRlZiBzZXRVcENsYXNzKGNscyk6CiAgICAgICAgc3VwZXIoKS5zZXRVcENsYXNzKCkKCiAgICAgICAgIyBVc2UgZXhpc3RpbmcgdXNlcnMgZnJvbSBjb21tb24ucHkgKGNscy51c2VyLCBjbHMubWFuYWdlciwgY2xzLnJvb3QpCiAgICAgICAgIyBDcmVhdGUgYWRkaXRpb25hbCBtYW5hZ2VyIGZvciBtdWx0aS1tYW5hZ2VyIHRlc3RzCiAgICAgICAgY2xzLm1hbmFnZXIyID0gY2xzLlVzZXJzLmNyZWF0ZSgKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIm5hbWUiOiAiVGVzdCBNYW5hZ2VyIDIiLAogICAgICAgICAgICAgICAgImxvZ2luIjogInRlc3RfbWFuYWdlcl8yIiwKICAgICAgICAgICAgICAgICJlbWFpbCI6ICJ0ZXN0X21hbmFnZXJfMkBleGFtcGxlLmNvbSIsCiAgICAgICAgICAgICAgICAiZ3JvdXBzX2lkIjogWyg2LCAwLCBbY2xzLmdyb3VwX21hbmFnZXIuaWRdKV0sCiAgICAgICAgICAgIH0KICAgICAgICApCgogICAgIyA9PT09PT09PT09PT09PT09PT09PT09CiAgICAjIE1hbmFnZXIgUmVhZCBBY2Nlc3MgVGVzdHMKICAgICMgPT09PT09PT09PT09PT09PT09PT09PQoKICAgIGRlZiB0ZXN0X21hbmFnZXJfcmVhZF9hY2Nlc3NfdXNlcl9pZHMoc2VsZik6CiAgICAgICAgIiIiVGVzdCBNYW5hZ2VyOiBSZWFkIHdoZW4gdXNlciBpcyBhZGRlZCBpbiB0ZW1wbGF0ZSdzIHVzZXJfaWRzIiIiCiAgICAgICAgIyBDcmVhdGUgamV0IHRlbXBsYXRlIHdpdGggbWFuYWdlciBpbiB1c2VyX2lkcwogICAgICAgIGpldF90ZW1wbGF0ZSA9IHNlbGYuSmV0VGVtcGxhdGUuY3JlYXRlKAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAibmFtZSI6ICJUZXN0IFRlbXBsYXRlIiwKICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAidGVzdF90ZW1wbGF0ZSIsCiAgICAgICAgICAgICAgICAidXNlcl9pZHMiOiBbKDQsIHNlbGYubWFuYWdlci5pZCldLAogICAgICAgICAgICB9CiAgICAgICAgKQoKICAgICAgICByZWNvcmQgPSBzZWxmLkpldFdheXBvaW50VGVtcGxhdGUuY3JlYXRlKAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAibmFtZSI6ICJXYXlwb2ludCB3aXRoIFVzZXIgQWNjZXNzIiwKICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAid2F5cG9pbnRfdXNlcl9hY2Nlc3MiLAogICAgICAgICAgICAgICAgImpldF90ZW1wbGF0ZV9pZCI6IGpldF90ZW1wbGF0ZS5pZCwKICAgICAgICAgICAgICAgICJhY2Nlc3NfbGV2ZWwiOiAiMiIsICAjIE1hbmFnZXIgbGV2ZWwKICAgICAgICAgICAgfQogICAgICAgICkKCiAgICAgICAgcmVjb3JkcyA9IHNlbGYuSmV0V2F5cG9pbnRUZW1wbGF0ZS53aXRoX3VzZXIoc2VsZi5tYW5hZ2VyKS5zZWFyY2goCiAgICAgICAgICAgIFsoImlkIiwgIj0iLCByZWNvcmQuaWQpXQogICAgICAgICkKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAogICAgICAgICAgICBsZW4ocmVjb3JkcyksCiAgICAgICAgICAgIDEsCiAgICAgICAgICAgICJNYW5hZ2VyIHNob3VsZCBiZSBhYmxlIHRvIHJlYWQgd2hlbiBhZGRlZCB0byB0ZW1wbGF0ZSdzIHVzZXJfaWRzIiwKICAgICAgICApCgogICAgZGVmIHRlc3RfbWFuYWdlcl9yZWFkX2FjY2Vzc19tYW5hZ2VyX2lkcyhzZWxmKToKICAgICAgICAiIiJUZXN0IE1hbmFnZXI6IFJlYWQgd2hlbiB1c2VyIGlzIGFkZGVkIGluIHRlbXBsYXRlJ3MgbWFuYWdlcl9pZHMiIiIKICAgICAgICAjIENyZWF0ZSBqZXQgdGVtcGxhdGUgd2l0aCBtYW5hZ2VyIGluIG1hbmFnZXJfaWRzCiAgICAgICAgamV0X3RlbXBsYXRlID0gc2VsZi5KZXRUZW1wbGF0ZS5jcmVhdGUoCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJuYW1lIjogIlRlc3QgVGVtcGxhdGUiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICJ0ZXN0X3RlbXBsYXRlIiwKICAgICAgICAgICAgICAgICJtYW5hZ2VyX2lkcyI6IFsoNCwgc2VsZi5tYW5hZ2VyLmlkKV0sCiAgICAgICAgICAgIH0KICAgICAgICApCgogICAgICAgIHJlY29yZCA9IHNlbGYuSmV0V2F5cG9pbnRUZW1wbGF0ZS5jcmVhdGUoCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJuYW1lIjogIldheXBvaW50IHdpdGggTWFuYWdlciBBY2Nlc3MiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICJ3YXlwb2ludF9tYW5hZ2VyX2FjY2VzcyIsCiAgICAgICAgICAgICAgICAiamV0X3RlbXBsYXRlX2lkIjogamV0X3RlbXBsYXRlLmlkLAogICAgICAgICAgICAgICAgImFjY2Vzc19sZXZlbCI6ICIyIiwgICMgTWFuYWdlciBsZXZlbAogICAgICAgICAgICB9CiAgICAgICAgKQoKICAgICAgICByZWNvcmRzID0gc2VsZi5KZXRXYXlwb2ludFRlbXBsYXRlLndpdGhfdXNlcihzZWxmLm1hbmFnZXIpLnNlYXJjaCgKICAgICAgICAgICAgWygiaWQiLCAiPSIsIHJlY29yZC5pZCldCiAgICAgICAgKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCiAgICAgICAgICAgIGxlbihyZWNvcmRzKSwKICAgICAgICAgICAgMSwKICAgICAgICAgICAgIk1hbmFnZXIgc2hvdWxkIGJlIGFibGUgdG8gcmVhZCB3aGVuIGFkZGVkIHRvIHRlbXBsYXRlJ3MgbWFuYWdlcl9pZHMiLAogICAgICAgICkKCiAgICBkZWYgdGVzdF9tYW5hZ2VyX3JlYWRfbm9fYWNjZXNzX3Jvb3RfbGV2ZWwoc2VsZik6CiAgICAgICAgIiIiCiAgICAgICAgVGVzdCBNYW5hZ2VyOiBObyByZWFkIGFjY2VzcyBmb3IgUm9vdCBsZXZlbCAoMykKICAgICAgICB3aXRob3V0IHVzZXJfaWRzL21hbmFnZXJfaWRzCiAgICAgICAgIiIiCiAgICAgICAgIyBDcmVhdGUgamV0IHRlbXBsYXRlIHdpdGhvdXQgbWFuYWdlciBhY2Nlc3MKICAgICAgICBqZXRfdGVtcGxhdGUgPSBzZWxmLkpldFRlbXBsYXRlLmNyZWF0ZSgKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIm5hbWUiOiAiVGVzdCBUZW1wbGF0ZSIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogInRlc3RfdGVtcGxhdGUiLAogICAgICAgICAgICAgICAgInVzZXJfaWRzIjogRmFsc2UsCiAgICAgICAgICAgICAgICAibWFuYWdlcl9pZHMiOiBGYWxzZSwKICAgICAgICAgICAgfQogICAgICAgICkKCiAgICAgICAgcmVjb3JkID0gc2VsZi5KZXRXYXlwb2ludFRlbXBsYXRlLmNyZWF0ZSgKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIm5hbWUiOiAiUm9vdCBMZXZlbCBXYXlwb2ludCIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogInJvb3RfbGV2ZWxfd2F5cG9pbnQiLAogICAgICAgICAgICAgICAgImpldF90ZW1wbGF0ZV9pZCI6IGpldF90ZW1wbGF0ZS5pZCwKICAgICAgICAgICAgICAgICJhY2Nlc3NfbGV2ZWwiOiAiMyIsICAjIFJvb3QgbGV2ZWwKICAgICAgICAgICAgfQogICAgICAgICkKCiAgICAgICAgcmVjb3JkcyA9IHNlbGYuSmV0V2F5cG9pbnRUZW1wbGF0ZS53aXRoX3VzZXIoc2VsZi5tYW5hZ2VyKS5zZWFyY2goCiAgICAgICAgICAgIFsoImlkIiwgIj0iLCByZWNvcmQuaWQpXQogICAgICAgICkKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAogICAgICAgICAgICBsZW4ocmVjb3JkcyksCiAgICAgICAgICAgIDAsCiAgICAgICAgICAgICJNYW5hZ2VyIHNob3VsZCBub3QgcmVhZCBhY2Nlc3NfbGV2ZWw9JzMnICIKICAgICAgICAgICAgIndoZW4gbm90IGluIHRlbXBsYXRlJ3MgdXNlcl9pZHMgb3IgbWFuYWdlcl9pZHMiLAogICAgICAgICkKCiAgICBkZWYgdGVzdF9tYW5hZ2VyX3JlYWRfbm9fYWNjZXNzX25vdF9pbl90ZW1wbGF0ZShzZWxmKToKICAgICAgICAiIiJUZXN0IE1hbmFnZXI6IE5vIHJlYWQgYWNjZXNzIHdoZW4gbm90IGluIHRlbXBsYXRlJ3MgVXNlcnMgb3IgTWFuYWdlcnMiIiIKICAgICAgICAjIENyZWF0ZSBqZXQgdGVtcGxhdGUgd2l0aG91dCBtYW5hZ2VyIGFjY2VzcwogICAgICAgIGpldF90ZW1wbGF0ZSA9IHNlbGYuSmV0VGVtcGxhdGUuY3JlYXRlKAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAibmFtZSI6ICJUZXN0IFRlbXBsYXRlIiwKICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAidGVzdF90ZW1wbGF0ZSIsCiAgICAgICAgICAgICAgICAidXNlcl9pZHMiOiBGYWxzZSwKICAgICAgICAgICAgICAgICJtYW5hZ2VyX2lkcyI6IEZhbHNlLAogICAgICAgICAgICB9CiAgICAgICAgKQoKICAgICAgICByZWNvcmQgPSBzZWxmLkpldFdheXBvaW50VGVtcGxhdGUuY3JlYXRlKAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAibmFtZSI6ICJObyBBY2Nlc3MgV2F5cG9pbnQiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICJub19hY2Nlc3Nfd2F5cG9pbnQiLAogICAgICAgICAgICAgICAgImpldF90ZW1wbGF0ZV9pZCI6IGpldF90ZW1wbGF0ZS5pZCwKICAgICAgICAgICAgICAgICJhY2Nlc3NfbGV2ZWwiOiAiMiIsICAjIE1hbmFnZXIgbGV2ZWwKICAgICAgICAgICAgfQogICAgICAgICkKCiAgICAgICAgcmVjb3JkcyA9IHNlbGYuSmV0V2F5cG9pbnRUZW1wbGF0ZS53aXRoX3VzZXIoc2VsZi5tYW5hZ2VyKS5zZWFyY2goCiAgICAgICAgICAgIFsoImlkIiwgIj0iLCByZWNvcmQuaWQpXQogICAgICAgICkKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAogICAgICAgICAgICBsZW4ocmVjb3JkcyksCiAgICAgICAgICAgIDAsCiAgICAgICAgICAgICJNYW5hZ2VyIHNob3VsZCBub3QgcmVhZCB3aGVuIG5vdCBpbiB0ZW1wbGF0ZSdzIHVzZXJfaWRzIG9yIG1hbmFnZXJfaWRzIiwKICAgICAgICApCgogICAgIyA9PT09PT09PT09PT09PT09PT09PT09CiAgICAjIE1hbmFnZXIgV3JpdGUvQ3JlYXRlIEFjY2VzcyBUZXN0cwogICAgIyA9PT09PT09PT09PT09PT09PT09PT09CgogICAgZGVmIHRlc3RfbWFuYWdlcl93cml0ZV9hY2Nlc3NfbGV2ZWxfYW5kX21hbmFnZXJfaWRzKHNlbGYpOgogICAgICAgICIiIlRlc3QgTWFuYWdlcjogV3JpdGUgd2hlbiBhY2Nlc3NfbGV2ZWwgPD0gMiBBTkQgaW4gdGVtcGxhdGUncyBtYW5hZ2VyX2lkcyIiIgogICAgICAgICMgQ3JlYXRlIGpldCB0ZW1wbGF0ZSB3aXRoIG1hbmFnZXIgaW4gbWFuYWdlcl9pZHMKICAgICAgICBqZXRfdGVtcGxhdGUgPSBzZWxmLkpldFRlbXBsYXRlLmNyZWF0ZSgKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIm5hbWUiOiAiVGVzdCBUZW1wbGF0ZSIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogInRlc3RfdGVtcGxhdGUiLAogICAgICAgICAgICAgICAgIm1hbmFnZXJfaWRzIjogWyg0LCBzZWxmLm1hbmFnZXIuaWQpXSwKICAgICAgICAgICAgfQogICAgICAgICkKCiAgICAgICAgcmVjb3JkID0gc2VsZi5KZXRXYXlwb2ludFRlbXBsYXRlLmNyZWF0ZSgKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIm5hbWUiOiAiTWFuYWdlciBDYW4gV3JpdGUiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICJtYW5hZ2VyX2Nhbl93cml0ZSIsCiAgICAgICAgICAgICAgICAiamV0X3RlbXBsYXRlX2lkIjogamV0X3RlbXBsYXRlLmlkLAogICAgICAgICAgICAgICAgImFjY2Vzc19sZXZlbCI6ICIyIiwKICAgICAgICAgICAgfQogICAgICAgICkKCiAgICAgICAgIyBNYW5hZ2VyIHNob3VsZCBiZSBhYmxlIHRvIHdyaXRlCiAgICAgICAgdHJ5OgogICAgICAgICAgICByZWNvcmQud2l0aF91c2VyKHNlbGYubWFuYWdlcikud3JpdGUoeyJuYW1lIjogIlVwZGF0ZWQgTmFtZSJ9KQogICAgICAgICAgICByZWNvcmQuaW52YWxpZGF0ZV9yZWNvcmRzZXQoKQogICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAogICAgICAgICAgICAgICAgcmVjb3JkLm5hbWUsICJVcGRhdGVkIE5hbWUiLCAiTWFuYWdlciBzaG91bGQgYmUgYWJsZSB0byB1cGRhdGUiCiAgICAgICAgICAgICkKICAgICAgICBleGNlcHQgQWNjZXNzRXJyb3I6CiAgICAgICAgICAgIHNlbGYuZmFpbCgiTWFuYWdlciBzaG91bGQgYmUgYWJsZSB0byB1cGRhdGUgd2hlbiBpbiB0ZW1wbGF0ZSdzIG1hbmFnZXJfaWRzIikKCiAgICBkZWYgdGVzdF9tYW5hZ2VyX3dyaXRlX2ZvcmJpZGRlbl9ub3RfaW5fbWFuYWdlcl9pZHMoc2VsZik6CiAgICAgICAgIiIiVGVzdCBNYW5hZ2VyOiBObyB3cml0ZSB3aGVuIG5vdCBpbiB0ZW1wbGF0ZSdzIG1hbmFnZXJfaWRzIiIiCiAgICAgICAgIyBDcmVhdGUgamV0IHRlbXBsYXRlIHdpdGggbWFuYWdlciBvbmx5IGluIHVzZXJfaWRzLCBub3QgbWFuYWdlcl9pZHMKICAgICAgICBqZXRfdGVtcGxhdGUgPSBzZWxmLkpldFRlbXBsYXRlLmNyZWF0ZSgKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIm5hbWUiOiAiVGVzdCBUZW1wbGF0ZSIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogInRlc3RfdGVtcGxhdGUiLAogICAgICAgICAgICAgICAgInVzZXJfaWRzIjogWyg0LCBzZWxmLm1hbmFnZXIuaWQpXSwgICMgT25seSBpbiB1c2VyX2lkcwogICAgICAgICAgICAgICAgIm1hbmFnZXJfaWRzIjogRmFsc2UsCiAgICAgICAgICAgIH0KICAgICAgICApCgogICAgICAgIHJlY29yZCA9IHNlbGYuSmV0V2F5cG9pbnRUZW1wbGF0ZS5jcmVhdGUoCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJuYW1lIjogIk5vIFdyaXRlIEFjY2VzcyIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogIm5vX3dyaXRlX2FjY2VzcyIsCiAgICAgICAgICAgICAgICAiamV0X3RlbXBsYXRlX2lkIjogamV0X3RlbXBsYXRlLmlkLAogICAgICAgICAgICAgICAgImFjY2Vzc19sZXZlbCI6ICIyIiwKICAgICAgICAgICAgfQogICAgICAgICkKCiAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhBY2Nlc3NFcnJvcik6CiAgICAgICAgICAgIHJlY29yZC53aXRoX3VzZXIoc2VsZi5tYW5hZ2VyKS53cml0ZSh7Im5hbWUiOiAiU2hvdWxkIEZhaWwifSkKCiAgICBkZWYgdGVzdF9tYW5hZ2VyX3dyaXRlX2ZvcmJpZGRlbl9yb290X2xldmVsKHNlbGYpOgogICAgICAgICIiIlRlc3QgTWFuYWdlcjogTm8gd3JpdGUgd2hlbiBhY2Nlc3NfbGV2ZWwgaXMgUm9vdCAoMykiIiIKICAgICAgICAjIENyZWF0ZSBqZXQgdGVtcGxhdGUgd2l0aCBtYW5hZ2VyIGluIG1hbmFnZXJfaWRzCiAgICAgICAgamV0X3RlbXBsYXRlID0gc2VsZi5KZXRUZW1wbGF0ZS5jcmVhdGUoCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJuYW1lIjogIlRlc3QgVGVtcGxhdGUiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICJ0ZXN0X3RlbXBsYXRlIiwKICAgICAgICAgICAgICAgICJtYW5hZ2VyX2lkcyI6IFsoNCwgc2VsZi5tYW5hZ2VyLmlkKV0sCiAgICAgICAgICAgIH0KICAgICAgICApCgogICAgICAgIHJlY29yZCA9IHNlbGYuSmV0V2F5cG9pbnRUZW1wbGF0ZS5jcmVhdGUoCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJuYW1lIjogIlJvb3QgTGV2ZWwgTm8gV3JpdGUiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICJyb290X2xldmVsX25vX3dyaXRlIiwKICAgICAgICAgICAgICAgICJqZXRfdGVtcGxhdGVfaWQiOiBqZXRfdGVtcGxhdGUuaWQsCiAgICAgICAgICAgICAgICAiYWNjZXNzX2xldmVsIjogIjMiLCAgIyBSb290IGxldmVsCiAgICAgICAgICAgIH0KICAgICAgICApCgogICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoQWNjZXNzRXJyb3IpOgogICAgICAgICAgICByZWNvcmQud2l0aF91c2VyKHNlbGYubWFuYWdlcikud3JpdGUoeyJuYW1lIjogIlNob3VsZCBGYWlsIn0pCgogICAgZGVmIHRlc3RfbWFuYWdlcl9jcmVhdGVfYWNjZXNzKHNlbGYpOgogICAgICAgICIiIlRlc3QgTWFuYWdlcjogQ3JlYXRlIHdoZW4gYWNjZXNzX2xldmVsIDw9IDIgQU5EIGluIHRlbXBsYXRlJ3MgbWFuYWdlcl9pZHMiIiIKICAgICAgICAjIENyZWF0ZSBqZXQgdGVtcGxhdGUgd2l0aCBtYW5hZ2VyIGluIG1hbmFnZXJfaWRzCiAgICAgICAgamV0X3RlbXBsYXRlID0gc2VsZi5KZXRUZW1wbGF0ZS5jcmVhdGUoCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJuYW1lIjogIlRlc3QgVGVtcGxhdGUiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICJ0ZXN0X3RlbXBsYXRlIiwKICAgICAgICAgICAgICAgICJtYW5hZ2VyX2lkcyI6IFsoNCwgc2VsZi5tYW5hZ2VyLmlkKV0sCiAgICAgICAgICAgIH0KICAgICAgICApCgogICAgICAgICMgVHJ5IHRvIGNyZWF0ZSB3aXRob3V0IGJlaW5nIGluIG1hbmFnZXJfaWRzIC0gc2hvdWxkIGZhaWwKICAgICAgICBqZXRfdGVtcGxhdGVfbm9fYWNjZXNzID0gc2VsZi5KZXRUZW1wbGF0ZS5jcmVhdGUoCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJuYW1lIjogIk5vIEFjY2VzcyBUZW1wbGF0ZSIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogIm5vX2FjY2Vzc190ZW1wbGF0ZSIsCiAgICAgICAgICAgICAgICAibWFuYWdlcl9pZHMiOiBGYWxzZSwKICAgICAgICAgICAgfQogICAgICAgICkKCiAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhBY2Nlc3NFcnJvcik6CiAgICAgICAgICAgIHNlbGYuSmV0V2F5cG9pbnRUZW1wbGF0ZS53aXRoX3VzZXIoc2VsZi5tYW5hZ2VyKS5jcmVhdGUoCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiQ3JlYXRlIEZhaWwiLAogICAgICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiY3JlYXRlX2ZhaWwiLAogICAgICAgICAgICAgICAgICAgICJqZXRfdGVtcGxhdGVfaWQiOiBqZXRfdGVtcGxhdGVfbm9fYWNjZXNzLmlkLAogICAgICAgICAgICAgICAgICAgICJhY2Nlc3NfbGV2ZWwiOiAiMiIsCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkKCiAgICAgICAgIyBDcmVhdGUgd2l0aCBtYW5hZ2VyIGluIHRlbXBsYXRlJ3MgbWFuYWdlcl9pZHMgLSBzaG91bGQgc3VjY2VlZAogICAgICAgIHRyeToKICAgICAgICAgICAgcmVjb3JkID0gc2VsZi5KZXRXYXlwb2ludFRlbXBsYXRlLndpdGhfdXNlcihzZWxmLm1hbmFnZXIpLmNyZWF0ZSgKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJDcmVhdGUgU3VjY2VzcyIsCiAgICAgICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICJjcmVhdGVfc3VjY2VzcyIsCiAgICAgICAgICAgICAgICAgICAgImpldF90ZW1wbGF0ZV9pZCI6IGpldF90ZW1wbGF0ZS5pZCwKICAgICAgICAgICAgICAgICAgICAiYWNjZXNzX2xldmVsIjogIjIiLAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApCiAgICAgICAgICAgIHJlY29yZHMgPSBzZWxmLkpldFdheXBvaW50VGVtcGxhdGUuc2VhcmNoKFsoImlkIiwgIj0iLCByZWNvcmQuaWQpXSkKICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVjb3JkcyksIDEsICJNYW5hZ2VyIHNob3VsZCBiZSBhYmxlIHRvIGNyZWF0ZSIpCiAgICAgICAgZXhjZXB0IEFjY2Vzc0Vycm9yOgogICAgICAgICAgICBzZWxmLmZhaWwoIk1hbmFnZXIgc2hvdWxkIGJlIGFibGUgdG8gY3JlYXRlIHdoZW4gaW4gdGVtcGxhdGUncyBtYW5hZ2VyX2lkcyIpCgogICAgIyA9PT09PT09PT09PT09PT09PT09PT09CiAgICAjIE1hbmFnZXIgRGVsZXRlIEFjY2VzcyBUZXN0cwogICAgIyA9PT09PT09PT09PT09PT09PT09PT09CgogICAgZGVmIHRlc3RfbWFuYWdlcl9kZWxldGVfb3duX3JlY29yZChzZWxmKToKICAgICAgICAiIiJUZXN0IE1hbmFnZXI6IERlbGV0ZSBvd24gcmVjb3JkIHdoZW4gaW4gdGVtcGxhdGUncyBtYW5hZ2VyX2lkcyIiIgogICAgICAgICMgQ3JlYXRlIGpldCB0ZW1wbGF0ZSB3aXRoIG1hbmFnZXIgaW4gbWFuYWdlcl9pZHMKICAgICAgICBqZXRfdGVtcGxhdGUgPSBzZWxmLkpldFRlbXBsYXRlLmNyZWF0ZSgKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIm5hbWUiOiAiVGVzdCBUZW1wbGF0ZSIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogInRlc3RfdGVtcGxhdGUiLAogICAgICAgICAgICAgICAgIm1hbmFnZXJfaWRzIjogWyg0LCBzZWxmLm1hbmFnZXIuaWQpXSwKICAgICAgICAgICAgfQogICAgICAgICkKCiAgICAgICAgcmVjb3JkID0gc2VsZi5KZXRXYXlwb2ludFRlbXBsYXRlLndpdGhfdXNlcihzZWxmLm1hbmFnZXIpLmNyZWF0ZSgKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIm5hbWUiOiAiTXkgUmVjb3JkIiwKICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAibXlfcmVjb3JkIiwKICAgICAgICAgICAgICAgICJqZXRfdGVtcGxhdGVfaWQiOiBqZXRfdGVtcGxhdGUuaWQsCiAgICAgICAgICAgICAgICAiYWNjZXNzX2xldmVsIjogIjIiLAogICAgICAgICAgICB9CiAgICAgICAgKQoKICAgICAgICB0cnk6CiAgICAgICAgICAgIHJlY29yZC53aXRoX3VzZXIoc2VsZi5tYW5hZ2VyKS51bmxpbmsoKQogICAgICAgICAgICByZWNvcmRzID0gc2VsZi5KZXRXYXlwb2ludFRlbXBsYXRlLnNlYXJjaChbKCJpZCIsICI9IiwgcmVjb3JkLmlkKV0pCiAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCiAgICAgICAgICAgICAgICBsZW4ocmVjb3JkcyksIDAsICJNYW5hZ2VyIHNob3VsZCBiZSBhYmxlIHRvIGRlbGV0ZSBvd24gcmVjb3JkIgogICAgICAgICAgICApCiAgICAgICAgZXhjZXB0IEFjY2Vzc0Vycm9yOgogICAgICAgICAgICBzZWxmLmZhaWwoIk1hbmFnZXIgc2hvdWxkIGJlIGFibGUgdG8gZGVsZXRlIG93biByZWNvcmQiKQoKICAgIGRlZiB0ZXN0X21hbmFnZXJfZGVsZXRlX25vdF9jcmVhdG9yKHNlbGYpOgogICAgICAgICIiIlRlc3QgTWFuYWdlcjogQ2Fubm90IGRlbGV0ZSByZWNvcmQgY3JlYXRlZCBieSBhbm90aGVyIHVzZXIiIiIKICAgICAgICAjIENyZWF0ZSBqZXQgdGVtcGxhdGUgd2l0aCBib3RoIG1hbmFnZXJzIGluIG1hbmFnZXJfaWRzCiAgICAgICAgamV0X3RlbXBsYXRlID0gc2VsZi5KZXRUZW1wbGF0ZS5jcmVhdGUoCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJuYW1lIjogIlRlc3QgVGVtcGxhdGUiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICJ0ZXN0X3RlbXBsYXRlIiwKICAgICAgICAgICAgICAgICJtYW5hZ2VyX2lkcyI6IFsoNCwgc2VsZi5tYW5hZ2VyLmlkKSwgKDQsIHNlbGYubWFuYWdlcjIuaWQpXSwKICAgICAgICAgICAgfQogICAgICAgICkKCiAgICAgICAgcmVjb3JkID0gc2VsZi5KZXRXYXlwb2ludFRlbXBsYXRlLndpdGhfdXNlcihzZWxmLm1hbmFnZXIyKS5jcmVhdGUoCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJuYW1lIjogIk90aGVyJ3MgUmVjb3JkIiwKICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAib3RoZXJzX3JlY29yZCIsCiAgICAgICAgICAgICAgICAiamV0X3RlbXBsYXRlX2lkIjogamV0X3RlbXBsYXRlLmlkLAogICAgICAgICAgICAgICAgImFjY2Vzc19sZXZlbCI6ICIyIiwKICAgICAgICAgICAgfQogICAgICAgICkKCiAgICAgICAgIyBNYW5hZ2VyMSBjYW5ub3QgZGVsZXRlIE1hbmFnZXIyJ3MgcmVjb3JkCiAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhBY2Nlc3NFcnJvcik6CiAgICAgICAgICAgIHJlY29yZC53aXRoX3VzZXIoc2VsZi5tYW5hZ2VyKS51bmxpbmsoKQoKICAgIGRlZiB0ZXN0X21hbmFnZXJfZGVsZXRlX25vdF9pbl9tYW5hZ2VyX2lkcyhzZWxmKToKICAgICAgICAiIiJUZXN0IE1hbmFnZXI6IENhbm5vdCBkZWxldGUgd2hlbiBub3QgaW4gdGVtcGxhdGUncyBtYW5hZ2VyX2lkcyIiIgogICAgICAgICMgQ3JlYXRlIGpldCB0ZW1wbGF0ZSB3aXRoIG1hbmFnZXIgaW4gbWFuYWdlcl9pZHMKICAgICAgICBqZXRfdGVtcGxhdGUgPSBzZWxmLkpldFRlbXBsYXRlLmNyZWF0ZSgKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIm5hbWUiOiAiVGVzdCBUZW1wbGF0ZSIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogInRlc3RfdGVtcGxhdGUiLAogICAgICAgICAgICAgICAgIm1hbmFnZXJfaWRzIjogWyg0LCBzZWxmLm1hbmFnZXIuaWQpXSwKICAgICAgICAgICAgfQogICAgICAgICkKCiAgICAgICAgcmVjb3JkID0gc2VsZi5KZXRXYXlwb2ludFRlbXBsYXRlLndpdGhfdXNlcihzZWxmLm1hbmFnZXIpLmNyZWF0ZSgKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIm5hbWUiOiAiUmVtb3ZlZCBNYW5hZ2VyIiwKICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAicmVtb3ZlZF9tYW5hZ2VyIiwKICAgICAgICAgICAgICAgICJqZXRfdGVtcGxhdGVfaWQiOiBqZXRfdGVtcGxhdGUuaWQsCiAgICAgICAgICAgICAgICAiYWNjZXNzX2xldmVsIjogIjIiLAogICAgICAgICAgICB9CiAgICAgICAgKQoKICAgICAgICAjIFJlbW92ZSBmcm9tIG1hbmFnZXJfaWRzCiAgICAgICAgamV0X3RlbXBsYXRlLndyaXRlKHsibWFuYWdlcl9pZHMiOiBGYWxzZX0pCgogICAgICAgICMgQ2Fubm90IGRlbGV0ZSBhbnltb3JlCiAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhBY2Nlc3NFcnJvcik6CiAgICAgICAgICAgIHJlY29yZC53aXRoX3VzZXIoc2VsZi5tYW5hZ2VyKS51bmxpbmsoKQoKICAgIGRlZiB0ZXN0X21hbmFnZXJfZGVsZXRlX3Jvb3RfbGV2ZWwoc2VsZik6CiAgICAgICAgIiIiVGVzdCBNYW5hZ2VyOiBDYW5ub3QgZGVsZXRlIFJvb3QgbGV2ZWwgcmVjb3JkIiIiCiAgICAgICAgIyBDcmVhdGUgamV0IHRlbXBsYXRlIHdpdGggbWFuYWdlciBpbiBtYW5hZ2VyX2lkcwogICAgICAgIGpldF90ZW1wbGF0ZSA9IHNlbGYuSmV0VGVtcGxhdGUuY3JlYXRlKAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAibmFtZSI6ICJUZXN0IFRlbXBsYXRlIiwKICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAidGVzdF90ZW1wbGF0ZSIsCiAgICAgICAgICAgICAgICAibWFuYWdlcl9pZHMiOiBbKDQsIHNlbGYubWFuYWdlci5pZCldLAogICAgICAgICAgICB9CiAgICAgICAgKQoKICAgICAgICAjIENyZWF0ZSByZWNvcmQgd2l0aCBSb290IGxldmVsIGFzIHJvb3QgKGRlZmF1bHQgdXNlcikKICAgICAgICByZWNvcmQgPSBzZWxmLkpldFdheXBvaW50VGVtcGxhdGUuY3JlYXRlKAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAibmFtZSI6ICJSb290IExldmVsIERlbGV0ZSIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogInJvb3RfbGV2ZWxfZGVsZXRlIiwKICAgICAgICAgICAgICAgICJqZXRfdGVtcGxhdGVfaWQiOiBqZXRfdGVtcGxhdGUuaWQsCiAgICAgICAgICAgICAgICAiYWNjZXNzX2xldmVsIjogIjMiLCAgIyBSb290IGxldmVsCiAgICAgICAgICAgIH0KICAgICAgICApCgogICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoQWNjZXNzRXJyb3IpOgogICAgICAgICAgICByZWNvcmQud2l0aF91c2VyKHNlbGYubWFuYWdlcikudW5saW5rKCkKCiAgICAjID09PT09PT09PT09PT09PT09PT09PT0KICAgICMgUm9vdCBBY2Nlc3MgVGVzdHMKICAgICMgPT09PT09PT09PT09PT09PT09PT09PQoKICAgIGRlZiB0ZXN0X3Jvb3RfZnVsbF9hY2Nlc3Moc2VsZik6CiAgICAgICAgIiIiCiAgICAgICAgVGVzdCBSb290OiBGdWxsIENSVUQgYWNjZXNzIHJlZ2FyZGxlc3Mgb2YgYWNjZXNzX2xldmVsIG9yIGNyZWF0b3IuCgogICAgICAgIFJvb3QgaGFzIHVucmVzdHJpY3RlZCBhY2Nlc3MgdG8gYWxsIHJlY29yZHMgdmlhIHNlY3VyaXR5IHJ1bGUKICAgICAgICBbKDEsICc9JywgMSldLCBzbyB3ZSB0ZXN0OgogICAgICAgIC0gQ3JlYXRlIHJlY29yZHMgd2l0aCBhbGwgYWNjZXNzIGxldmVscwogICAgICAgIC0gUmVhZCByZWNvcmRzIHdpdGggYWxsIGFjY2VzcyBsZXZlbHMKICAgICAgICAtIFdyaXRlIHRvIHJlY29yZHMgd2l0aCBhbGwgYWNjZXNzIGxldmVscwogICAgICAgIC0gRGVsZXRlIHJlY29yZHMgcmVnYXJkbGVzcyBvZiBjcmVhdG9yCiAgICAgICAgIiIiCiAgICAgICAgIyBDcmVhdGUgamV0IHRlbXBsYXRlIGZvciB0ZXN0aW5nCiAgICAgICAgamV0X3RlbXBsYXRlID0gc2VsZi5KZXRUZW1wbGF0ZS5jcmVhdGUoCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJuYW1lIjogIlRlc3QgVGVtcGxhdGUiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICJ0ZXN0X3RlbXBsYXRlIiwKICAgICAgICAgICAgfQogICAgICAgICkKCiAgICAgICAgIyBUZXN0IENSVUQgb3BlcmF0aW9ucyBmb3IgYWxsIGFjY2VzcyBsZXZlbHMgKG9ubHkgTWFuYWdlciBhbmQgUm9vdCBleGlzdCkKICAgICAgICBmb3IgYWNjZXNzX2xldmVsIGluIFsiMiIsICIzIl06CiAgICAgICAgICAgICMgUm9vdCBjYW4gY3JlYXRlIGFueSBsZXZlbAogICAgICAgICAgICByZWNvcmQgPSBzZWxmLkpldFdheXBvaW50VGVtcGxhdGUud2l0aF91c2VyKHNlbGYucm9vdCkuY3JlYXRlKAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJuYW1lIjogZiJSb290IExldmVsIHthY2Nlc3NfbGV2ZWx9IiwKICAgICAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogZiJyb290X2xldmVsX3thY2Nlc3NfbGV2ZWx9IiwKICAgICAgICAgICAgICAgICAgICAiamV0X3RlbXBsYXRlX2lkIjogamV0X3RlbXBsYXRlLmlkLAogICAgICAgICAgICAgICAgICAgICJhY2Nlc3NfbGV2ZWwiOiBhY2Nlc3NfbGV2ZWwsCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICkKCiAgICAgICAgICAgICMgUm9vdCBjYW4gcmVhZCBhbnkgbGV2ZWwKICAgICAgICAgICAgcmVjb3JkcyA9IHNlbGYuSmV0V2F5cG9pbnRUZW1wbGF0ZS53aXRoX3VzZXIoc2VsZi5yb290KS5zZWFyY2goCiAgICAgICAgICAgICAgICBbKCJpZCIsICI9IiwgcmVjb3JkLmlkKV0KICAgICAgICAgICAgKQogICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAogICAgICAgICAgICAgICAgbGVuKHJlY29yZHMpLAogICAgICAgICAgICAgICAgMSwKICAgICAgICAgICAgICAgIGYiUm9vdCBzaG91bGQgYmUgYWJsZSB0byByZWFkIGFjY2Vzc19sZXZlbD17YWNjZXNzX2xldmVsfSIsCiAgICAgICAgICAgICkKCiAgICAgICAgICAgICMgUm9vdCBjYW4gd3JpdGUgYW55IGxldmVsCiAgICAgICAgICAgIHJlY29yZC53aXRoX3VzZXIoc2VsZi5yb290KS53cml0ZSgKICAgICAgICAgICAgICAgIHsibmFtZSI6IGYiUm9vdCBVcGRhdGVkIExldmVsIHthY2Nlc3NfbGV2ZWx9In0KICAgICAgICAgICAgKQogICAgICAgICAgICByZWNvcmQuaW52YWxpZGF0ZV9yZWNvcmRzZXQoKQogICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAogICAgICAgICAgICAgICAgcmVjb3JkLm5hbWUsCiAgICAgICAgICAgICAgICBmIlJvb3QgVXBkYXRlZCBMZXZlbCB7YWNjZXNzX2xldmVsfSIsCiAgICAgICAgICAgICAgICBmIlJvb3Qgc2hvdWxkIGJlIGFibGUgdG8gdXBkYXRlIGFjY2Vzc19sZXZlbD17YWNjZXNzX2xldmVsfSIsCiAgICAgICAgICAgICkKCiAgICAgICAgIyBUZXN0IFJvb3QgY2FuIGRlbGV0ZSByZWNvcmRzIGNyZWF0ZWQgYnkgb3RoZXIgdXNlcnMKICAgICAgICAjIEFkZCBtYW5hZ2VyIHRvIHRlbXBsYXRlJ3MgbWFuYWdlcl9pZHMgc28gdGhleSBjYW4gY3JlYXRlIHRoZSByZWNvcmQKICAgICAgICBqZXRfdGVtcGxhdGUud3JpdGUoeyJtYW5hZ2VyX2lkcyI6IFsoNCwgc2VsZi5tYW5hZ2VyLmlkKV19KQogICAgICAgIG1hbmFnZXJfcmVjb3JkID0gc2VsZi5KZXRXYXlwb2ludFRlbXBsYXRlLndpdGhfdXNlcihzZWxmLm1hbmFnZXIpLmNyZWF0ZSgKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIm5hbWUiOiAiTWFuYWdlcidzIFJlY29yZCIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogIm1hbmFnZXJzX3JlY29yZCIsCiAgICAgICAgICAgICAgICAiamV0X3RlbXBsYXRlX2lkIjogamV0X3RlbXBsYXRlLmlkLAogICAgICAgICAgICAgICAgImFjY2Vzc19sZXZlbCI6ICIyIiwKICAgICAgICAgICAgfQogICAgICAgICkKICAgICAgICBtYW5hZ2VyX3JlY29yZC53aXRoX3VzZXIoc2VsZi5yb290KS51bmxpbmsoKQogICAgICAgIHJlY29yZHMgPSBzZWxmLkpldFdheXBvaW50VGVtcGxhdGUud2l0aF91c2VyKHNlbGYucm9vdCkuc2VhcmNoKAogICAgICAgICAgICBbKCJpZCIsICI9IiwgbWFuYWdlcl9yZWNvcmQuaWQpXQogICAgICAgICkKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAogICAgICAgICAgICBsZW4ocmVjb3JkcyksCiAgICAgICAgICAgIDAsCiAgICAgICAgICAgICJSb290IHNob3VsZCBiZSBhYmxlIHRvIGRlbGV0ZSByZWNvcmRzIGZyb20gYW55IGNyZWF0b3IiLAogICAgICAgICkKCiAgICAjID09PT09PT09PT09PT09PT09PT09PT0KICAgICMgRWRnZSBDYXNlcwogICAgIyA9PT09PT09PT09PT09PT09PT09PT09CgogICAgZGVmIHRlc3RfYWNjZXNzX2xldmVsX2NoYW5nZXNfdmlzaWJpbGl0eShzZWxmKToKICAgICAgICAiIiJUZXN0IHRoYXQgY2hhbmdpbmcgYWNjZXNzX2xldmVsIGFmZmVjdHMgdmlzaWJpbGl0eSIiIgogICAgICAgICMgQ3JlYXRlIGpldCB0ZW1wbGF0ZSB3aXRoIG1hbmFnZXIgaW4gbWFuYWdlcl9pZHMKICAgICAgICBqZXRfdGVtcGxhdGUgPSBzZWxmLkpldFRlbXBsYXRlLmNyZWF0ZSgKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIm5hbWUiOiAiVGVzdCBUZW1wbGF0ZSIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogInRlc3RfdGVtcGxhdGUiLAogICAgICAgICAgICAgICAgIm1hbmFnZXJfaWRzIjogWyg0LCBzZWxmLm1hbmFnZXIuaWQpXSwKICAgICAgICAgICAgfQogICAgICAgICkKCiAgICAgICAgIyBDcmVhdGUgd2l0aCBNYW5hZ2VyIGxldmVsCiAgICAgICAgcmVjb3JkID0gc2VsZi5KZXRXYXlwb2ludFRlbXBsYXRlLmNyZWF0ZSgKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIm5hbWUiOiAiQ2hhbmdpbmcgTGV2ZWwiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICJjaGFuZ2luZ19sZXZlbCIsCiAgICAgICAgICAgICAgICAiamV0X3RlbXBsYXRlX2lkIjogamV0X3RlbXBsYXRlLmlkLAogICAgICAgICAgICAgICAgImFjY2Vzc19sZXZlbCI6ICIyIiwKICAgICAgICAgICAgfQogICAgICAgICkKCiAgICAgICAgIyBNYW5hZ2VyIGNhbiByZWFkCiAgICAgICAgcmVjb3JkcyA9IHNlbGYuSmV0V2F5cG9pbnRUZW1wbGF0ZS53aXRoX3VzZXIoc2VsZi5tYW5hZ2VyKS5zZWFyY2goCiAgICAgICAgICAgIFsoImlkIiwgIj0iLCByZWNvcmQuaWQpXQogICAgICAgICkKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZWNvcmRzKSwgMSwgIk1hbmFnZXIgc2hvdWxkIHJlYWQgbGV2ZWwgMiIpCgogICAgICAgICMgQ2hhbmdlIHRvIFJvb3QgbGV2ZWwKICAgICAgICByZWNvcmQud3JpdGUoeyJhY2Nlc3NfbGV2ZWwiOiAiMyJ9KQoKICAgICAgICAjIE1hbmFnZXIgY2Fubm90IHJlYWQgYW55bW9yZQogICAgICAgIHJlY29yZHMgPSBzZWxmLkpldFdheXBvaW50VGVtcGxhdGUud2l0aF91c2VyKHNlbGYubWFuYWdlcikuc2VhcmNoKAogICAgICAgICAgICBbKCJpZCIsICI9IiwgcmVjb3JkLmlkKV0KICAgICAgICApCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVjb3JkcyksIDAsICJNYW5hZ2VyIHNob3VsZCBub3QgcmVhZCBsZXZlbCAzIikK \ No newline at end of file