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