diff --git a/addons/cetmix_tower_server/tests/test_reference_mixin.py b/addons/cetmix_tower_server/tests/test_reference_mixin.py new file mode 100644 index 0000000..fc99b9a --- /dev/null +++ b/addons/cetmix_tower_server/tests/test_reference_mixin.py @@ -0,0 +1 @@ +aW1wb3J0IHJlCgpmcm9tIC5jb21tb24gaW1wb3J0IFRlc3RUb3dlckNvbW1vbgoKCmNsYXNzIFRlc3RUb3dlclJlZmVyZW5jZShUZXN0VG93ZXJDb21tb24pOgogICAgIiIiVGVzdCByZWZlcmVuY2UgZ2VuZXJhdGlvbi4KICAgIFdlIGFyZSB1c2luZyBTZXJ2ZXJUZW1wbGF0ZSBmb3IgdGhhdC4KICAgICIiIgoKICAgIEBjbGFzc21ldGhvZAogICAgZGVmIHNldFVwQ2xhc3MoY2xzKToKICAgICAgICBzdXBlcigpLnNldFVwQ2xhc3MoKQoKICAgICAgICBjbHMucGxhbl90ZXN0X21peGluID0gY2xzLlBsYW4uY3JlYXRlKAogICAgICAgICAgICB7Im5hbWUiOiAiVGVzdCBQbGFuIHJlZmVyZW5jZSBtaXhpbiIsICJub3RlIjogIlRlc3QgTm90ZSByZWZlcmVuY2UgbWl4aW4ifQogICAgICAgICkKCiAgICAgICAgY2xzLnBsYW5fbGluZV9yZWZlcmVuY2VfbWl4aW4gPSBjbHMucGxhbl9saW5lLmNyZWF0ZSgKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgInBsYW5faWQiOiBjbHMucGxhbl90ZXN0X21peGluLmlkLAogICAgICAgICAgICAgICAgInNlcXVlbmNlIjogMSwKICAgICAgICAgICAgICAgICJjb21tYW5kX2lkIjogY2xzLmNvbW1hbmRfbGlzdF9kaXIuaWQsCiAgICAgICAgICAgIH0KICAgICAgICApCgogICAgZGVmIHRlc3RfcmVmZXJlbmNlX2dlbmVyYXRpb24oc2VsZik6CiAgICAgICAgIiIiVGVzdCByZWZlcmVuY2UgZ2VuZXJhdGlvbiIiIgoKICAgICAgICAjIC0tLSAxIC0tLQogICAgICAgICMgQ2hlY2sgaWYgYXV0byBnZW5lcmF0ZWQgcmVmZXJlbmNlIG1hdGNoZXMgdGhlIHBhdHRlcm4KICAgICAgICByZWZlcmVuY2VfcGF0dGVybiA9IHNlbGYuU2VydmVyVGVtcGxhdGUuX2dldF9yZWZlcmVuY2VfcGF0dGVybigpCiAgICAgICAgc2VsZi5hc3NlcnRUcnVlKAogICAgICAgICAgICByZS5tYXRjaChyZiJ7cmVmZXJlbmNlX3BhdHRlcm59Iiwgc2VsZi5zZXJ2ZXJfdGVtcGxhdGVfc2FtcGxlLnJlZmVyZW5jZSksCiAgICAgICAgICAgICJSZWZlcmVuY2UgZG9lc24ndCBtYXRjaCB0ZW1wbGF0ZSIsCiAgICAgICAgKQoKICAgICAgICAjIC0tLSAyIC0tLQogICAgICAgICMgQ3JlYXRlIGEgbmV3IHNlcnZlciB0ZW1wbGF0ZSB3aXRoIGN1c3RvbSByZWZlcmVuY2UKICAgICAgICAjIGFuZCBlbnN1cmUgdGhhdCBpdCdzIGZpeGVkIGFjY29yZGluZyB0byB0aGUgcGF0dGVybgogICAgICAgIG5ld190ZW1wbGF0ZSA9IHNlbGYuU2VydmVyVGVtcGxhdGUuY3JlYXRlKAogICAgICAgICAgICB7Im5hbWUiOiAiU3VjaCBNdWNoIFRlbXBsYXRlIiwgInJlZmVyZW5jZSI6ICIgU29tZSByZWZlcmVuY2UgeCooKCopKSAifQogICAgICAgICkKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5ld190ZW1wbGF0ZS5yZWZlcmVuY2UsICJzb21lX3JlZmVyZW5jZV94IikKCiAgICAgICAgIyAtLS0gMyAtLS0KICAgICAgICAjIFRyeSB0byBjcmVhdGUgYW5vdGhlciBzZXJ2ZXIgdGVtcGxhdGUgd2l0aCB0aGUgc2FtZSByZWZlcmVuY2UgYW5kIGVuc3VyZQogICAgICAgICMgdGhhdCBpdHMgcmVmZXJlbmNlIGlzIGNvcnJlY3RlZCBhdXRvbWF0aWNhbGx5CiAgICAgICAgeWV0X2Fub3RoZXJfdGVtcGxhdGUgPSBzZWxmLlNlcnZlclRlbXBsYXRlLmNyZWF0ZSgKICAgICAgICAgICAgeyJuYW1lIjogIllldCBhbm90aGVyIHRlbXBsYXRlIiwgInJlZmVyZW5jZSI6ICJzb21lX3JlZmVyZW5jZV94In0KICAgICAgICApCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh5ZXRfYW5vdGhlcl90ZW1wbGF0ZS5yZWZlcmVuY2UsICJzb21lX3JlZmVyZW5jZV94XzIiKQoKICAgICAgICAjIC0tIDQgLS0tCiAgICAgICAgIyBEdXBsaWNhdGUgdGhlIHNlcnZlciB0ZW1wbGF0ZSBhbmQgZW5zdXJlIHRoYXQgaXRzIG5hbWUgYW5kIHJlZmVyZW5jZQogICAgICAgICMgYXJlIGdlbmVyYXRlZCBwcm9wZXJseQogICAgICAgIHlldF9hbm90aGVyX3RlbXBsYXRlX2NvcHkgPSB5ZXRfYW5vdGhlcl90ZW1wbGF0ZS5jb3B5KCkKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHlldF9hbm90aGVyX3RlbXBsYXRlX2NvcHkubmFtZSwgIllldCBhbm90aGVyIHRlbXBsYXRlIChjb3B5KSIpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKICAgICAgICAgICAgeWV0X2Fub3RoZXJfdGVtcGxhdGVfY29weS5yZWZlcmVuY2UsICJ5ZXRfYW5vdGhlcl90ZW1wbGF0ZV9jb3B5IgogICAgICAgICkKCiAgICAgICAgIyAtLSA1IC0tLQogICAgICAgICMgVXBkYXRlIHJlZmVyZW5jZSBhbmQgZW5zdXJlIHRoYXQgdXBkYXRlZCB2YWx1ZSBpcyBjb3JyZWN0CiAgICAgICAgeWV0X2Fub3RoZXJfdGVtcGxhdGVfY29weS53cml0ZSh7InJlZmVyZW5jZSI6ICIgU29tZSByZWZlcmVuY2UgeCooKCopKSAifSkKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHlldF9hbm90aGVyX3RlbXBsYXRlX2NvcHkucmVmZXJlbmNlLCAic29tZV9yZWZlcmVuY2VfeF8zIikKCiAgICAgICAgIyAtLSA2IC0tLQogICAgICAgICMgVXBkYXRlIHRlbXBsYXRlIHdpdGggYSBuZXcgbmFtZSBhbmQgcmVtb3ZlIHJlZmVyZW5jZSBzaW11bHRhbmVvdXNseQogICAgICAgIHlldF9hbm90aGVyX3RlbXBsYXRlX2NvcHkud3JpdGUoeyJuYW1lIjogIkRvZ2Ugc28gbGlrZSIsICJyZWZlcmVuY2UiOiBGYWxzZX0pCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh5ZXRfYW5vdGhlcl90ZW1wbGF0ZV9jb3B5LnJlZmVyZW5jZSwgImRvZ2Vfc29fbGlrZSIpCgogICAgICAgICMgLS0gNyAtLS0KICAgICAgICAjIFJlbmFtZSB0aGUgdGVtcGxhdGUgYW5kIGVuc3VyZSByZWZlcmVuY2UgaXMgbm90IGFmZmVjdGVkCiAgICAgICAgeWV0X2Fub3RoZXJfdGVtcGxhdGVfY29weS53cml0ZSh7Im5hbWUiOiAiQ2hhZCJ9KQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeWV0X2Fub3RoZXJfdGVtcGxhdGVfY29weS5yZWZlcmVuY2UsICJkb2dlX3NvX2xpa2UiKQoKICAgICAgICAjIC0tIDggLS0tCiAgICAgICAgIyBSZW1vdmUgdGhlIHJlZmVyZW5jZSBhbmQgZW5zdXJlIGl0J3MgcmVnZW5lcmF0ZWQgZnJvbSB0aGUgbmFtZQogICAgICAgIHlldF9hbm90aGVyX3RlbXBsYXRlX2NvcHkud3JpdGUoeyJyZWZlcmVuY2UiOiBGYWxzZX0pCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh5ZXRfYW5vdGhlcl90ZW1wbGF0ZV9jb3B5LnJlZmVyZW5jZSwgImNoYWQiKQoKICAgICAgICAjIC0tIDkgLS0KICAgICAgICAjIFVwZGF0ZSByZWNvcmQgd2l0aCB0aGUgc2FtZSByZWZlcmVuY2UgbmFtZSBhbmQgZW5zdXJlIGl0IHJlbWFpbnMgdGhlIHNhbWUKICAgICAgICB5ZXRfYW5vdGhlcl90ZW1wbGF0ZV9jb3B5LndyaXRlKHsicmVmZXJlbmNlIjogImNoYWQifSkKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHlldF9hbm90aGVyX3RlbXBsYXRlX2NvcHkucmVmZXJlbmNlLCAiY2hhZCIpCgogICAgICAgICMgLS0gMTAgLS0KICAgICAgICAjIENyZWF0ZSBuZXcgdGVtcGxhdGUgd2l0aCByZWZlcmVuY2Ugc2V0IHRvIEZhbHNlCiAgICAgICAgZXhwZWN0ZWRfcmVmZXJlbmNlID0gc2VsZi5TZXJ2ZXJUZW1wbGF0ZS5fZ2VuZXJhdGVfb3JfZml4X3JlZmVyZW5jZSgKICAgICAgICAgICAgIlN1Y2ggTXVjaCBGYWxzZSBUZW1wbGF0ZSIKICAgICAgICApCiAgICAgICAgbmV3X3RlbXBsYXRlX3dpdGhfZmFsc2UgPSBzZWxmLlNlcnZlclRlbXBsYXRlLmNyZWF0ZSgKICAgICAgICAgICAgeyJuYW1lIjogIlN1Y2ggTXVjaCBGYWxzZSBUZW1wbGF0ZSIsICJyZWZlcmVuY2UiOiBGYWxzZX0KICAgICAgICApCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKICAgICAgICAgICAgbmV3X3RlbXBsYXRlX3dpdGhfZmFsc2UucmVmZXJlbmNlLAogICAgICAgICAgICBleHBlY3RlZF9yZWZlcmVuY2UsCiAgICAgICAgICAgICJSZWZlcmVuY2UgZG9lc24ndCBtYXRjaCBleHBlY3RlZCBvbmUiLAogICAgICAgICkKCiAgICAgICAgIyAtLSAxMSAtLQogICAgICAgICMgQ3JlYXRlIG5ldyB0ZW1wbGF0ZSB3aXRoIHJlZmVyZW5jZSBhbmQgbmFtZSBzZXQgdG8gYSBub24gdmFsaWQgc3ltYm9sCiAgICAgICAgIyBHZW5lcmljIG1vZGVsIHJlZmVyZW5jZSBzaG91bGQgYmUgdXNlZCBhcyBhIHJlZmVyZW5jZQogICAgICAgIGV4cGVjdGVkX3JlZmVyZW5jZSA9IHNlbGYuU2VydmVyVGVtcGxhdGUuX2dldF9tb2RlbF9nZW5lcmljX3JlZmVyZW5jZSgpCiAgICAgICAgbmV3X3RlbXBsYXRlX3dpdGhfbm9uX3ZhbGlkX3JlZmVyZW5jZSA9IHNlbGYuU2VydmVyVGVtcGxhdGUuY3JlYXRlKAogICAgICAgICAgICB7Im5hbWUiOiAiLyIsICJyZWZlcmVuY2UiOiAiLyJ9CiAgICAgICAgKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCiAgICAgICAgICAgIG5ld190ZW1wbGF0ZV93aXRoX25vbl92YWxpZF9yZWZlcmVuY2UucmVmZXJlbmNlLAogICAgICAgICAgICBleHBlY3RlZF9yZWZlcmVuY2UsCiAgICAgICAgICAgICJSZWZlcmVuY2UgZG9lc24ndCBtYXRjaCBleHBlY3RlZCBvbmUiLAogICAgICAgICkKCiAgICBkZWYgdGVzdF9zZWFyY2hfYnlfcmVmZXJlbmNlKHNlbGYpOgogICAgICAgICIiIlNlYXJjaCByZWNvcmQgYnkgaXRzIHJlZmVyZW5jZSIiIgoKICAgICAgICAjIENyZWF0ZSBhIG5ldyBzZXJ2ZXIgdGVtcGxhdGUgd2l0aCBjdXN0b20gcmVmZXJlbmNlCiAgICAgICAgc2VydmVyX3RlbXBsYXRlID0gc2VsZi5TZXJ2ZXJUZW1wbGF0ZS5jcmVhdGUoCiAgICAgICAgICAgIHsibmFtZSI6ICJTdWNoIE11Y2ggVGVtcGxhdGUiLCAicmVmZXJlbmNlIjogInN1Y2hfbXVjaF90ZW1wbGF0ZSJ9CiAgICAgICAgKQoKICAgICAgICAjIFNlYXJjaCB1c2luZyBjb3JyZWN0IHRlbXBsYXRlIHJlZmVyZW5jZQogICAgICAgIHNlYXJjaF9yZXN1bHQgPSBzZWxmLlNlcnZlclRlbXBsYXRlLmdldF9ieV9yZWZlcmVuY2UoInN1Y2hfbXVjaF90ZW1wbGF0ZSIpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXJ2ZXJfdGVtcGxhdGUsIHNlYXJjaF9yZXN1bHQsICJUZW1wbGF0ZSBtdXN0IGJlIGZvdW5kIikKCiAgICAgICAgIyBTZWFyY2ggdXNpbmcgbWFsZm9ybWVkIChjYXNlIHNlbnNpdGl2ZSkKICAgICAgICBzZWFyY2hfcmVzdWx0ID0gc2VsZi5TZXJ2ZXJUZW1wbGF0ZS5nZXRfYnlfcmVmZXJlbmNlKCJub3RfbXVjaF90ZW1wbGF0ZSIpCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VhcmNoX3Jlc3VsdCksIDAsICJSZXN1bHQgc2hvdWxkIGJlIGVtcHR5IikKCiAgICBkZWYgdGVzdF9wcmVwYXJlX3JlZmVyZW5jZXNfdmFsaWRfaW5wdXQoc2VsZik6CiAgICAgICAgIiIiCiAgICAgICAgRW5zdXJlIHJlZmVyZW5jZXMgYXJlIGNvcnJlY3RseSBwcmVwYXJlZCBmb3IgdmFsaWQgaW5wdXQuCiAgICAgICAgIiIiCgogICAgICAgIHZhbHNfbGlzdCA9IFt7InBsYW5faWQiOiBzZWxmLnBsYW5fdGVzdF9taXhpbi5pZH1dCiAgICAgICAgcmVzdWx0ID0gc2VsZi5wbGFuX2xpbmUuX3ByZXBhcmVfcmVmZXJlbmNlcygKICAgICAgICAgICAgImN4LnRvd2VyLnBsYW4iLCAicGxhbl9pZCIsIHZhbHNfbGlzdAogICAgICAgICkKCiAgICAgICAgIyBWZXJpZnkgdGhlIHJlc3VsdCBjb250YWlucyB0aGUgZXhwZWN0ZWQgcmVmZXJlbmNlCiAgICAgICAgc2VsZi5hc3NlcnRJbigKICAgICAgICAgICAgc2VsZi5wbGFuX3Rlc3RfbWl4aW4uaWQsCiAgICAgICAgICAgIHJlc3VsdCwKICAgICAgICAgICAgIlRoZSByZWZlcmVuY2UgSUQgc2hvdWxkIGJlIGluIHRoZSByZXN1bHQuIiwKICAgICAgICApCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKICAgICAgICAgICAgcmVzdWx0W3NlbGYucGxhbl90ZXN0X21peGluLmlkXSwKICAgICAgICAgICAgc2VsZi5wbGFuX3Rlc3RfbWl4aW4ucmVmZXJlbmNlLAogICAgICAgICAgICAiVGhlIHJlZmVyZW5jZSBzaG91bGQgbWF0Y2ggdGhlIGV4cGVjdGVkIHZhbHVlLiIsCiAgICAgICAgKQoKICAgIGRlZiB0ZXN0X3ByZXBhcmVfcmVmZXJlbmNlc19pbnZhbGlkX21vZGVsX25hbWUoc2VsZik6CiAgICAgICAgIiIiCiAgICAgICAgQ2hlY2sgdGhhdCBhbiBlcnJvciBpcyByYWlzZWQgZm9yIGFuIGludmFsaWQgbW9kZWwgbmFtZS4KICAgICAgICAiIiIKCiAgICAgICAgdmFsc19saXN0ID0gW3sicGxhbl9pZCI6IHNlbGYucGxhbl90ZXN0X21peGluLmlkfV0KICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpIGFzIGNtOgogICAgICAgICAgICBzZWxmLnBsYW5fbGluZS5fcHJlcGFyZV9yZWZlcmVuY2VzKCJpbnZhbGlkLm1vZGVsIiwgInBsYW5faWQiLCB2YWxzX2xpc3QpCgogICAgICAgICMgQ29uZmlybSB0aGUgZXhjZXB0aW9uIG1lc3NhZ2UgaXMgYXMgZXhwZWN0ZWQKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAogICAgICAgICAgICBzdHIoY20uZXhjZXB0aW9uKSwKICAgICAgICAgICAgIk1vZGVsICdpbnZhbGlkLm1vZGVsJyBkb2VzIG5vdCBleGlzdC4gUGxlYXNlIHByb3ZpZGUgYSB2YWxpZCBtb2RlbCBuYW1lLiIsCiAgICAgICAgICAgICJUaGUgZXJyb3IgbWVzc2FnZSBzaG91bGQgaW5kaWNhdGUgYW4gaW52YWxpZCBtb2RlbCBuYW1lLiIsCiAgICAgICAgKQoKICAgIGRlZiB0ZXN0X3ByZXBhcmVfcmVmZXJlbmNlc19lbXB0eV92YWxzX2xpc3Qoc2VsZik6CiAgICAgICAgIiIiCiAgICAgICAgVmVyaWZ5IHRoYXQgYW4gZW1wdHkgdmFsc19saXN0IHJldHVybnMgYW4gZW1wdHkgZGljdGlvbmFyeS4KICAgICAgICAiIiIKICAgICAgICByZXN1bHQgPSBzZWxmLnBsYW5fbGluZS5fcHJlcGFyZV9yZWZlcmVuY2VzKCJjeC50b3dlci5wbGFuIiwgInBsYW5faWQiLCBbXSkKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAogICAgICAgICAgICByZXN1bHQsCiAgICAgICAgICAgIHt9LAogICAgICAgICAgICAiVGhlIHJlc3VsdCBzaG91bGQgYmUgYW4gZW1wdHkgZGljdGlvbmFyeSB3aGVuIHZhbHNfbGlzdCBpcyBlbXB0eS4iLAogICAgICAgICkKCiAgICBkZWYgdGVzdF9wb3B1bGF0ZV9yZWZlcmVuY2VzX3dpdGhfdmFsaWRfaW5wdXQoc2VsZik6CiAgICAgICAgIiIiCiAgICAgICAgRW5zdXJlIHJlZmVyZW5jZXMgYXJlIHBvcHVsYXRlZCBjb3JyZWN0bHkgaW4gdGhlIHByb3ZpZGVkIHZhbHVlcyBsaXN0LgogICAgICAgICIiIgogICAgICAgIHZhbHNfbGlzdCA9IFt7InBsYW5faWQiOiBzZWxmLnBsYW5fdGVzdF9taXhpbi5pZH1dCiAgICAgICAgdXBkYXRlZF92YWxzID0gc2VsZi5wbGFuX2xpbmUuX3ByZV9wb3B1bGF0ZV9yZWZlcmVuY2VzKAogICAgICAgICAgICAiY3gudG93ZXIucGxhbiIsICJwbGFuX2lkIiwgdmFsc19saXN0CiAgICAgICAgKQoKICAgICAgICAjIENoZWNrIHRoZSB1cGRhdGVkIHZhbHVlcyBjb250YWluIHRoZSBleHBlY3RlZCByZWZlcmVuY2UgZm9ybWF0CiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKICAgICAgICAgICAgdXBkYXRlZF92YWxzWzBdWyJyZWZlcmVuY2UiXSwKICAgICAgICAgICAgZiJ7c2VsZi5wbGFuX3Rlc3RfbWl4aW4ucmVmZXJlbmNlfV9wbGFuX2xpbmVfMSIsCiAgICAgICAgICAgICJUaGUgcmVmZXJlbmNlIHNob3VsZCBiZSBjb3JyZWN0bHkgcG9wdWxhdGVkIHdpdGggdGhlIHN1ZmZpeC4iLAogICAgICAgICkKCiAgICBkZWYgdGVzdF9wb3B1bGF0ZV9yZWZlcmVuY2VzX21pc3NpbmdfZmllbGQoc2VsZik6CiAgICAgICAgIiIiCiAgICAgICAgQ29uZmlybSB0aGF0IGVudHJpZXMgbWlzc2luZyB0aGUgcmVxdWlyZWQgZmllbGQgYXJlIGhhbmRsZWQgcHJvcGVybHkuCiAgICAgICAgIiIiCgogICAgICAgIHZhbHNfbGlzdF93aXRoX21pc3NpbmdfZmllbGQgPSBbeyJhbm90aGVyX2tleSI6IDEyM31dCiAgICAgICAgdXBkYXRlZF92YWxzX3dpdGhfbWlzc2luZyA9IHNlbGYucGxhbl9saW5lLl9wcmVfcG9wdWxhdGVfcmVmZXJlbmNlcygKICAgICAgICAgICAgImN4LnRvd2VyLnBsYW4iLCAicGxhbl9pZCIsIHZhbHNfbGlzdF93aXRoX21pc3NpbmdfZmllbGQKICAgICAgICApCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKICAgICAgICAgICAgdXBkYXRlZF92YWxzX3dpdGhfbWlzc2luZ1swXVsicmVmZXJlbmNlIl0sCiAgICAgICAgICAgICJub19wbGFuX2xpbmVfMSIsCiAgICAgICAgICAgICJFbnRyaWVzIG1pc3NpbmcgdGhlIHJlcXVpcmVkIGZpZWxkIHNob3VsZCBoYXZlIGEgZGVmYXVsdCByZWZlcmVuY2UuIiwKICAgICAgICApCgogICAgZGVmIHRlc3RfcG9wdWxhdGVfcmVmZXJlbmNlc19kdXBsaWNhdGVfaWRzKHNlbGYpOgogICAgICAgICIiIgogICAgICAgIEVuc3VyZSB0aGF0IGR1cGxpY2F0ZSBJRHMgaW4gdGhlIGlucHV0IGxpc3QgYXJlIGNvcnJlY3RseQogICAgICAgIGhhbmRsZWQgYW5kIHJlZmVyZW5jZWQuCiAgICAgICAgIiIiCiAgICAgICAgdmFsc19saXN0ID0gWwogICAgICAgICAgICB7InBsYW5faWQiOiBzZWxmLnBsYW5fdGVzdF9taXhpbi5pZH0sCiAgICAgICAgICAgIHsicGxhbl9pZCI6IHNlbGYucGxhbl90ZXN0X21peGluLmlkfSwKICAgICAgICBdCiAgICAgICAgdXBkYXRlZF92YWxzID0gc2VsZi5wbGFuX2xpbmUuX3ByZV9wb3B1bGF0ZV9yZWZlcmVuY2VzKAogICAgICAgICAgICAiY3gudG93ZXIucGxhbiIsICJwbGFuX2lkIiwgdmFsc19saXN0CiAgICAgICAgKQoKICAgICAgICAjIFZlcmlmeSB0aGF0IGVhY2ggZHVwbGljYXRlIGVudHJ5IGhhcyBhIHVuaXF1ZSBzdWZmaXgKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAogICAgICAgICAgICB1cGRhdGVkX3ZhbHNbMF1bInJlZmVyZW5jZSJdLAogICAgICAgICAgICBmIntzZWxmLnBsYW5fdGVzdF9taXhpbi5yZWZlcmVuY2V9X3BsYW5fbGluZV8xIiwKICAgICAgICAgICAgIlRoZSBmaXJzdCBkdXBsaWNhdGUgcmVmZXJlbmNlIHNob3VsZCBoYXZlIHRoZSBjb3JyZWN0IHN1ZmZpeC4iLAogICAgICAgICkKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAogICAgICAgICAgICB1cGRhdGVkX3ZhbHNbMV1bInJlZmVyZW5jZSJdLAogICAgICAgICAgICBmIntzZWxmLnBsYW5fdGVzdF9taXhpbi5yZWZlcmVuY2V9X3BsYW5fbGluZV8yIiwKICAgICAgICAgICAgIlRoZSBzZWNvbmQgZHVwbGljYXRlIHJlZmVyZW5jZSBzaG91bGQgaGF2ZSB0aGUgY29ycmVjdCBzdWZmaXguIiwKICAgICAgICApCgogICAgZGVmIHRlc3RfcG9wdWxhdGVfcmVmZXJlbmNlc19lbXB0eV92YWxzX2xpc3Qoc2VsZik6CiAgICAgICAgIiIiCiAgICAgICAgQ2hlY2sgdGhhdCBhbiBlbXB0eSBpbnB1dCBsaXN0IHJldHVybnMgYW4gZW1wdHkgcmVzdWx0CiAgICAgICAgd2hlbiBwb3B1bGF0aW5nIHJlZmVyZW5jZXMuCiAgICAgICAgIiIiCiAgICAgICAgdXBkYXRlZF92YWxzID0gc2VsZi5wbGFuX2xpbmUuX3ByZV9wb3B1bGF0ZV9yZWZlcmVuY2VzKAogICAgICAgICAgICAiY3gudG93ZXIucGxhbiIsICJwbGFuX2lkIiwgW10KICAgICAgICApCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKICAgICAgICAgICAgdXBkYXRlZF92YWxzLAogICAgICAgICAgICBbXSwKICAgICAgICAgICAgIlRoZSByZXN1bHQgc2hvdWxkIGJlIGFuIGVtcHR5IGxpc3Qgd2hlbiB2YWxzX2xpc3QgaXMgZW1wdHkuIiwKICAgICAgICApCgogICAgZGVmIHRlc3RfcG9wdWxhdGVfcmVmZXJlbmNlc19yZWZlcmVuY2VfcHJlc2VudChzZWxmKToKICAgICAgICAiIiIKICAgICAgICBDaGVjayB0aGF0IHJlZmVyZW5jZSBpcyBwcmVzZXJ2ZXIgd2hlbiBwcmVzZW50IGluIHZhbHMKICAgICAgICAiIiIKCiAgICAgICAgdmFsc19saXN0ID0gWwogICAgICAgICAgICB7InJlZmVyZW5jZSI6ICJteV9jdXN0b21fbGluZV8xIn0sCiAgICAgICAgICAgIHsicmVmZXJlbmNlIjogIm15X2N1c3RvbV9saW5lXzIifSwKICAgICAgICBdCiAgICAgICAgdXBkYXRlZF92YWxzID0gc2VsZi5wbGFuX2xpbmUuX3ByZV9wb3B1bGF0ZV9yZWZlcmVuY2VzKAogICAgICAgICAgICAiY3gudG93ZXIucGxhbiIsICJwbGFuX2lkIiwgdmFsc19saXN0CiAgICAgICAgKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCiAgICAgICAgICAgIHVwZGF0ZWRfdmFsc1swXVsicmVmZXJlbmNlIl0sCiAgICAgICAgICAgICJteV9jdXN0b21fbGluZV8xIiwKICAgICAgICAgICAgIk9yaWdpbmFsIHJlZmVyZW5jZSBtdXN0IGJlIHByZXNlcnZlZCIsCiAgICAgICAgKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCiAgICAgICAgICAgIHVwZGF0ZWRfdmFsc1sxXVsicmVmZXJlbmNlIl0sCiAgICAgICAgICAgICJteV9jdXN0b21fbGluZV8yIiwKICAgICAgICAgICAgIk9yaWdpbmFsIHJlZmVyZW5jZSBtdXN0IGJlIHByZXNlcnZlZCIsCiAgICAgICAgKQoKICAgIGRlZiB0ZXN0X3BvcHVsYXRlX3JlZmVyZW5jZXNfbWl4ZWRfc2NlbmFyaW9zKHNlbGYpOgogICAgICAgICIiIlRlc3QgbWl4ZWQgc2NlbmFyaW9zIHdpdGggZXhpc3RpbmcgYW5kIG1pc3NpbmcgcmVmZXJlbmNlcyIiIgogICAgICAgIHZhbHNfbGlzdCA9IFsKICAgICAgICAgICAgeyJyZWZlcmVuY2UiOiAibXlfY3VzdG9tX2xpbmVfMSJ9LAogICAgICAgICAgICB7InBsYW5faWQiOiBzZWxmLnBsYW5fdGVzdF9taXhpbi5pZH0sICAjIE5vIHJlZmVyZW5jZQogICAgICAgICAgICB7InJlZmVyZW5jZSI6ICIgICJ9LCAgIyBXaGl0ZXNwYWNlIHJlZmVyZW5jZQogICAgICAgICAgICB7InJlZmVyZW5jZSI6ICIifSwgICMgRW1wdHkgcmVmZXJlbmNlCiAgICAgICAgICAgIHsicmVmZXJlbmNlIjogIlxuXyJ9LCAgIyBTb21lIGlycmVsZXZhbnQgc3ltYm9scwogICAgICAgIF0KICAgICAgICB1cGRhdGVkX3ZhbHMgPSBzZWxmLnBsYW5fbGluZS5fcHJlX3BvcHVsYXRlX3JlZmVyZW5jZXMoCiAgICAgICAgICAgICJjeC50b3dlci5wbGFuIiwgInBsYW5faWQiLCB2YWxzX2xpc3QKICAgICAgICApCgogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCiAgICAgICAgICAgIHVwZGF0ZWRfdmFsc1swXVsicmVmZXJlbmNlIl0sCiAgICAgICAgICAgICJteV9jdXN0b21fbGluZV8xIiwKICAgICAgICAgICAgIk9yaWdpbmFsIHJlZmVyZW5jZSBtdXN0IGJlIHByZXNlcnZlZCIsCiAgICAgICAgKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCiAgICAgICAgICAgIHVwZGF0ZWRfdmFsc1sxXVsicmVmZXJlbmNlIl0sCiAgICAgICAgICAgIGYie3NlbGYucGxhbl90ZXN0X21peGluLnJlZmVyZW5jZX1fcGxhbl9saW5lXzEiLAogICAgICAgICAgICAiTWlzc2luZyByZWZlcmVuY2Ugc2hvdWxkIGJlIGdlbmVyYXRlZCIsCiAgICAgICAgKQogICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCiAgICAgICAgICAgIHVwZGF0ZWRfdmFsc1syXVsicmVmZXJlbmNlIl0sCiAgICAgICAgICAgICJub19wbGFuX2xpbmVfMSIsCiAgICAgICAgICAgICJNaXNzaW5nIHJlZmVyZW5jZSBzaG91bGQgYmUgZ2VuZXJhdGVkIiwKICAgICAgICApCiAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKICAgICAgICAgICAgdXBkYXRlZF92YWxzWzNdWyJyZWZlcmVuY2UiXSwKICAgICAgICAgICAgIm5vX3BsYW5fbGluZV8yIiwKICAgICAgICAgICAgIk1pc3NpbmcgcmVmZXJlbmNlIHNob3VsZCBiZSBnZW5lcmF0ZWQiLAogICAgICAgICkKICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAogICAgICAgICAgICB1cGRhdGVkX3ZhbHNbNF1bInJlZmVyZW5jZSJdLAogICAgICAgICAgICAibm9fcGxhbl9saW5lXzMiLAogICAgICAgICAgICAiTWlzc2luZyByZWZlcmVuY2Ugc2hvdWxkIGJlIGdlbmVyYXRlZCIsCiAgICAgICAgKQo= \ No newline at end of file