From e458bb13288c4e8354a0094394639df5a2d30c25 Mon Sep 17 00:00:00 2001 From: Jannis Mattheis Date: Tue, 20 Feb 2018 17:40:23 +0100 Subject: [PATCH] Add version api & model --- docs/docs-packr.go | 6 +++--- docs/spec.json | 43 +++++++++++++++++++++++++++++++++++++++++++ model/version.go | 12 ++++++++++++ router/router.go | 19 ++++++++++++++++++- router/router_test.go | 8 +++++++- 5 files changed, 83 insertions(+), 5 deletions(-) create mode 100644 model/version.go diff --git a/docs/docs-packr.go b/docs/docs-packr.go index 9a156e7..b058182 100644 --- a/docs/docs-packr.go +++ b/docs/docs-packr.go @@ -9,7 +9,7 @@ import "github.com/gobuffalo/packr" // Go binary. You can use the "packr clean" command to clean up this, // and any other packr generated files. func init() { - packr.PackJSONBytes("./", "package.go", "\"Ly8gUGFja2FnZSBkb2NzIEdvdGlmeSBSRVNULUFQSS4KLy8KLy8gVGhpcyBpcyB0aGUgZG9jdW1lbnRhdGlvbiBvZiB0aGUgR290aWZ5IFJFU1QtQVBJLgovLwovLyAgICAgU2NoZW1lczogaHR0cCwgaHR0cHMKLy8gICAgIEhvc3Q6IGxvY2FsaG9zdAovLyAgICAgVmVyc2lvbjogMS4wLjAKLy8gICAgIExpY2Vuc2U6IE1JVCBodHRwczovL2dpdGh1Yi5jb20vZ290aWZ5L3NlcnZlci9ibG9iL21hc3Rlci9MSUNFTlNFCi8vICAgICBDb250YWN0OiBodHRwczovL2dpdGh1Yi5jb20vZ290aWZ5L3NlcnZlci9pc3N1ZXMKLy8KLy8gICAgIENvbnN1bWVzOgovLyAgICAgLSBhcHBsaWNhdGlvbi9qc29uCi8vCi8vICAgICBQcm9kdWNlczoKLy8gICAgIC0gYXBwbGljYXRpb24vanNvbgovLwovLyAgICAgU2VjdXJpdHlEZWZpbml0aW9uczoKLy8gICAgICAgIGFwcFRva2VuUXVlcnk6Ci8vICAgICAgICAgICB0eXBlOiBhcGlLZXkKLy8gICAgICAgICAgIG5hbWU6IHRva2VuCi8vICAgICAgICAgICBpbjogcXVlcnkKLy8gICAgICAgIGNsaWVudFRva2VuUXVlcnk6Ci8vICAgICAgICAgICB0eXBlOiBhcGlLZXkKLy8gICAgICAgICAgIG5hbWU6IHRva2VuCi8vICAgICAgICAgICBpbjogcXVlcnkKLy8gCSAgICAgIGFwcFRva2VuSGVhZGVyOgovLyAgICAgICAgICAgdHlwZTogYXBpS2V5Ci8vICAgICAgICAgICBuYW1lOiBYLUdvdGlmeS1LZXkKLy8gICAgICAgICAgIGluOiBoZWFkZXIKLy8gCSAgICAgIGNsaWVudFRva2VuSGVhZGVyOgovLyAgICAgICAgICAgdHlwZTogYXBpS2V5Ci8vICAgICAgICAgICBuYW1lOiBYLUdvdGlmeS1LZXkKLy8gICAgICAgICAgIGluOiBoZWFkZXIKLy8gICAgICAgIGJhc2ljQXV0aDoKLy8gICAgICAgICAgIHR5cGU6IGJhc2ljCi8vCi8vIHN3YWdnZXI6bWV0YQpwYWNrYWdlIGRvY3MK\"") - packr.PackJSONBytes("./", "spec.json", "\"ewogICJjb25zdW1lcyI6IFsKICAgICJhcHBsaWNhdGlvbi9qc29uIgogIF0sCiAgInByb2R1Y2VzIjogWwogICAgImFwcGxpY2F0aW9uL2pzb24iCiAgXSwKICAic2NoZW1lcyI6IFsKICAgICJodHRwIiwKICAgICJodHRwcyIKICBdLAogICJzd2FnZ2VyIjogIjIuMCIsCiAgImluZm8iOiB7CiAgICAiZGVzY3JpcHRpb24iOiAiVGhpcyBpcyB0aGUgZG9jdW1lbnRhdGlvbiBvZiB0aGUgR290aWZ5IFJFU1QtQVBJLiIsCiAgICAidGl0bGUiOiAiR290aWZ5IFJFU1QtQVBJLiIsCiAgICAiY29udGFjdCI6IHsKICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vZ290aWZ5L3NlcnZlci9pc3N1ZXMiCiAgICB9LAogICAgImxpY2Vuc2UiOiB7CiAgICAgICJuYW1lIjogIk1JVCIsCiAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL2dvdGlmeS9zZXJ2ZXIvYmxvYi9tYXN0ZXIvTElDRU5TRSIKICAgIH0sCiAgICAidmVyc2lvbiI6ICIxLjAuMCIKICB9LAogICJob3N0IjogImxvY2FsaG9zdCIsCiAgInBhdGhzIjogewogICAgIi9hcHBsaWNhdGlvbiI6IHsKICAgICAgImdldCI6IHsKICAgICAgICAic2VjdXJpdHkiOiBbCiAgICAgICAgICB7CiAgICAgICAgICAgICJjbGllbnRUb2tlbkhlYWRlciI6IFtdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiY2xpZW50VG9rZW5RdWVyeSI6IFtdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiYmFzaWNBdXRoIjogW10KICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJjb25zdW1lcyI6IFsKICAgICAgICAgICJhcHBsaWNhdGlvbi9qc29uIgogICAgICAgIF0sCiAgICAgICAgInByb2R1Y2VzIjogWwogICAgICAgICAgImFwcGxpY2F0aW9uL2pzb24iCiAgICAgICAgXSwKICAgICAgICAidGFncyI6IFsKICAgICAgICAgICJ0b2tlbiIKICAgICAgICBdLAogICAgICAgICJzdW1tYXJ5IjogIlJldHVybiBhbGwgYXBwbGljYXRpb25zLiIsCiAgICAgICAgIm9wZXJhdGlvbklkIjogImdldEFwcHMiLAogICAgICAgICJyZXNwb25zZXMiOiB7CiAgICAgICAgICAiMjAwIjogewogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiT2siLAogICAgICAgICAgICAic2NoZW1hIjogewogICAgICAgICAgICAgICJ0eXBlIjogImFycmF5IiwKICAgICAgICAgICAgICAiaXRlbXMiOiB7CiAgICAgICAgICAgICAgICAiJHJlZiI6ICIjL2RlZmluaXRpb25zL0FwcGxpY2F0aW9uIgogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgICI0MDEiOiB7CiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmF1dGhvcml6ZWQiLAogICAgICAgICAgICAic2NoZW1hIjogewogICAgICAgICAgICAgICIkcmVmIjogIiMvZGVmaW5pdGlvbnMvRXJyb3IiCiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICAiNDAzIjogewogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiRm9yYmlkZGVuIiwKICAgICAgICAgICAgInNjaGVtYSI6IHsKICAgICAgICAgICAgICAiJHJlZiI6ICIjL2RlZmluaXRpb25zL0Vycm9yIgogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9LAogICAgICAicG9zdCI6IHsKICAgICAgICAic2VjdXJpdHkiOiBbCiAgICAgICAgICB7CiAgICAgICAgICAgICJjbGllbnRUb2tlbkhlYWRlciI6IFtdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiY2xpZW50VG9rZW5RdWVyeSI6IFtdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiYmFzaWNBdXRoIjogW10KICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJjb25zdW1lcyI6IFsKICAgICAgICAgICJhcHBsaWNhdGlvbi9qc29uIgogICAgICAgIF0sCiAgICAgICAgInByb2R1Y2VzIjogWwogICAgICAgICAgImFwcGxpY2F0aW9uL2pzb24iCiAgICAgICAgXSwKICAgICAgICAidGFncyI6IFsKICAgICAgICAgICJ0b2tlbiIKICAgICAgICBdLAogICAgICAgICJzdW1tYXJ5IjogIkNyZWF0ZSBhbiBhcHBsaWNhdGlvbi4iLAogICAgICAgICJvcGVyYXRpb25JZCI6ICJjcmVhdGVBcHAiLAogICAgICAgICJwYXJhbWV0ZXJzIjogWwogICAgICAgICAgewogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAidGhlIGFwcGxpY2F0aW9uIHRvIGFkZCIsCiAgICAgICAgICAgICJuYW1lIjogImJvZHkiLAogICAgICAgICAgICAiaW4iOiAiYm9keSIsCiAgICAgICAgICAgICJyZXF1aXJlZCI6IHRydWUsCiAgICAgICAgICAgICJzY2hlbWEiOiB7CiAgICAgICAgICAgICAgIiRyZWYiOiAiIy9kZWZpbml0aW9ucy9BcHBsaWNhdGlvbiIKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgInJlc3BvbnNlcyI6IHsKICAgICAgICAgICIyMDAiOiB7CiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJPayIsCiAgICAgICAgICAgICJzY2hlbWEiOiB7CiAgICAgICAgICAgICAgIiRyZWYiOiAiIy9kZWZpbml0aW9ucy9BcHBsaWNhdGlvbiIKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgICI0MDEiOiB7CiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmF1dGhvcml6ZWQiLAogICAgICAgICAgICAic2NoZW1hIjogewogICAgICAgICAgICAgICIkcmVmIjogIiMvZGVmaW5pdGlvbnMvRXJyb3IiCiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICAiNDAzIjogewogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiRm9yYmlkZGVuIiwKICAgICAgICAgICAgInNjaGVtYSI6IHsKICAgICAgICAgICAgICAiJHJlZiI6ICIjL2RlZmluaXRpb25zL0Vycm9yIgogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgIi9hcHBsaWNhdGlvbi97aWR9IjogewogICAgICAiZGVsZXRlIjogewogICAgICAgICJzZWN1cml0eSI6IFsKICAgICAgICAgIHsKICAgICAgICAgICAgImNsaWVudFRva2VuSGVhZGVyIjogW10KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJjbGllbnRUb2tlblF1ZXJ5IjogW10KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJiYXNpY0F1dGgiOiBbXQogICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgImNvbnN1bWVzIjogWwogICAgICAgICAgImFwcGxpY2F0aW9uL2pzb24iCiAgICAgICAgXSwKICAgICAgICAicHJvZHVjZXMiOiBbCiAgICAgICAgICAiYXBwbGljYXRpb24vanNvbiIKICAgICAgICBdLAogICAgICAgICJ0YWdzIjogWwogICAgICAgICAgInRva2VuIgogICAgICAgIF0sCiAgICAgICAgInN1bW1hcnkiOiAiRGVsZXRlIGFuIGFwcGxpY2F0aW9uLiIsCiAgICAgICAgIm9wZXJhdGlvbklkIjogImRlbGV0ZUFwcCIsCiAgICAgICAgInBhcmFtZXRlcnMiOiBbCiAgICAgICAgICB7CiAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJ0aGUgYXBwbGljYXRpb24gaWQiLAogICAgICAgICAgICAibmFtZSI6ICJpZCIsCiAgICAgICAgICAgICJpbiI6ICJwYXRoIiwKICAgICAgICAgICAgInJlcXVpcmVkIjogdHJ1ZQogICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgInJlc3BvbnNlcyI6IHsKICAgICAgICAgICIyMDAiOiB7CiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJPayIKICAgICAgICAgIH0sCiAgICAgICAgICAiNDAxIjogewogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVW5hdXRob3JpemVkIiwKICAgICAgICAgICAgInNjaGVtYSI6IHsKICAgICAgICAgICAgICAiJHJlZiI6ICIjL2RlZmluaXRpb25zL0Vycm9yIgogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgIjQwMyI6IHsKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkZvcmJpZGRlbiIsCiAgICAgICAgICAgICJzY2hlbWEiOiB7CiAgICAgICAgICAgICAgIiRyZWYiOiAiIy9kZWZpbml0aW9ucy9FcnJvciIKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgICIvYXBwbGljYXRpb24ve2lkfS9tZXNzYWdlIjogewogICAgICAiZ2V0IjogewogICAgICAgICJzZWN1cml0eSI6IFsKICAgICAgICAgIHsKICAgICAgICAgICAgImNsaWVudFRva2VuSGVhZGVyIjogW10KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJjbGllbnRUb2tlblF1ZXJ5IjogW10KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJiYXNpY0F1dGgiOiBbXQogICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgInByb2R1Y2VzIjogWwogICAgICAgICAgImFwcGxpY2F0aW9uL2pzb24iCiAgICAgICAgXSwKICAgICAgICAidGFncyI6IFsKICAgICAgICAgICJtZXNzYWdlIgogICAgICAgIF0sCiAgICAgICAgInN1bW1hcnkiOiAiUmV0dXJuIGFsbCBtZXNzYWdlcyBmcm9tIGEgc3BlY2lmaWMgYXBwbGljYXRpb24uIiwKICAgICAgICAib3BlcmF0aW9uSWQiOiAiZ2V0QXBwTWVzc2FnZXMiLAogICAgICAgICJwYXJhbWV0ZXJzIjogWwogICAgICAgICAgewogICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAidGhlIGFwcGxpY2F0aW9uIGlkIiwKICAgICAgICAgICAgIm5hbWUiOiAiaWQiLAogICAgICAgICAgICAiaW4iOiAicGF0aCIsCiAgICAgICAgICAgICJyZXF1aXJlZCI6IHRydWUKICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJyZXNwb25zZXMiOiB7CiAgICAgICAgICAiMjAwIjogewogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiT2siLAogICAgICAgICAgICAic2NoZW1hIjogewogICAgICAgICAgICAgICJ0eXBlIjogImFycmF5IiwKICAgICAgICAgICAgICAiaXRlbXMiOiB7CiAgICAgICAgICAgICAgICAiJHJlZiI6ICIjL2RlZmluaXRpb25zL01lc3NhZ2UiCiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgIjQwMSI6IHsKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuYXV0aG9yaXplZCIsCiAgICAgICAgICAgICJzY2hlbWEiOiB7CiAgICAgICAgICAgICAgIiRyZWYiOiAiIy9kZWZpbml0aW9ucy9FcnJvciIKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgICI0MDMiOiB7CiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJGb3JiaWRkZW4iLAogICAgICAgICAgICAic2NoZW1hIjogewogICAgICAgICAgICAgICIkcmVmIjogIiMvZGVmaW5pdGlvbnMvRXJyb3IiCiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0sCiAgICAgICJkZWxldGUiOiB7CiAgICAgICAgInNlY3VyaXR5IjogWwogICAgICAgICAgewogICAgICAgICAgICAiY2xpZW50VG9rZW5IZWFkZXIiOiBbXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImNsaWVudFRva2VuUXVlcnkiOiBbXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImJhc2ljQXV0aCI6IFtdCiAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicHJvZHVjZXMiOiBbCiAgICAgICAgICAiYXBwbGljYXRpb24vanNvbiIKICAgICAgICBdLAogICAgICAgICJ0YWdzIjogWwogICAgICAgICAgIm1lc3NhZ2UiCiAgICAgICAgXSwKICAgICAgICAic3VtbWFyeSI6ICJEZWxldGUgYWxsIG1lc3NhZ2VzIGZyb20gYSBzcGVjaWZpYyBhcHBsaWNhdGlvbi4iLAogICAgICAgICJvcGVyYXRpb25JZCI6ICJkZWxldGVBcHBNZXNzYWdlcyIsCiAgICAgICAgInBhcmFtZXRlcnMiOiBbCiAgICAgICAgICB7CiAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJ0aGUgYXBwbGljYXRpb24gaWQiLAogICAgICAgICAgICAibmFtZSI6ICJpZCIsCiAgICAgICAgICAgICJpbiI6ICJwYXRoIiwKICAgICAgICAgICAgInJlcXVpcmVkIjogdHJ1ZQogICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgInJlc3BvbnNlcyI6IHsKICAgICAgICAgICIyMDAiOiB7CiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJPayIKICAgICAgICAgIH0sCiAgICAgICAgICAiNDAxIjogewogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVW5hdXRob3JpemVkIiwKICAgICAgICAgICAgInNjaGVtYSI6IHsKICAgICAgICAgICAgICAiJHJlZiI6ICIjL2RlZmluaXRpb25zL0Vycm9yIgogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgIjQwMyI6IHsKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkZvcmJpZGRlbiIsCiAgICAgICAgICAgICJzY2hlbWEiOiB7CiAgICAgICAgICAgICAgIiRyZWYiOiAiIy9kZWZpbml0aW9ucy9FcnJvciIKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgICIvY2xpZW50IjogewogICAgICAiZ2V0IjogewogICAgICAgICJzZWN1cml0eSI6IFsKICAgICAgICAgIHsKICAgICAgICAgICAgImNsaWVudFRva2VuSGVhZGVyIjogW10KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJjbGllbnRUb2tlblF1ZXJ5IjogW10KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJiYXNpY0F1dGgiOiBbXQogICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgImNvbnN1bWVzIjogWwogICAgICAgICAgImFwcGxpY2F0aW9uL2pzb24iCiAgICAgICAgXSwKICAgICAgICAicHJvZHVjZXMiOiBbCiAgICAgICAgICAiYXBwbGljYXRpb24vanNvbiIKICAgICAgICBdLAogICAgICAgICJ0YWdzIjogWwogICAgICAgICAgInRva2VuIgogICAgICAgIF0sCiAgICAgICAgInN1bW1hcnkiOiAiUmV0dXJuIGFsbCBjbGllbnRzLiIsCiAgICAgICAgIm9wZXJhdGlvbklkIjogImdldENsaWVudHMiLAogICAgICAgICJyZXNwb25zZXMiOiB7CiAgICAgICAgICAiMjAwIjogewogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiT2siLAogICAgICAgICAgICAic2NoZW1hIjogewogICAgICAgICAgICAgICJ0eXBlIjogImFycmF5IiwKICAgICAgICAgICAgICAiaXRlbXMiOiB7CiAgICAgICAgICAgICAgICAiJHJlZiI6ICIjL2RlZmluaXRpb25zL0NsaWVudCIKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICAiNDAxIjogewogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVW5hdXRob3JpemVkIiwKICAgICAgICAgICAgInNjaGVtYSI6IHsKICAgICAgICAgICAgICAiJHJlZiI6ICIjL2RlZmluaXRpb25zL0Vycm9yIgogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgIjQwMyI6IHsKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkZvcmJpZGRlbiIsCiAgICAgICAgICAgICJzY2hlbWEiOiB7CiAgICAgICAgICAgICAgIiRyZWYiOiAiIy9kZWZpbml0aW9ucy9FcnJvciIKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSwKICAgICAgInBvc3QiOiB7CiAgICAgICAgInNlY3VyaXR5IjogWwogICAgICAgICAgewogICAgICAgICAgICAiY2xpZW50VG9rZW5IZWFkZXIiOiBbXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImNsaWVudFRva2VuUXVlcnkiOiBbXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImJhc2ljQXV0aCI6IFtdCiAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAiY29uc3VtZXMiOiBbCiAgICAgICAgICAiYXBwbGljYXRpb24vanNvbiIKICAgICAgICBdLAogICAgICAgICJwcm9kdWNlcyI6IFsKICAgICAgICAgICJhcHBsaWNhdGlvbi9qc29uIgogICAgICAgIF0sCiAgICAgICAgInRhZ3MiOiBbCiAgICAgICAgICAidG9rZW4iCiAgICAgICAgXSwKICAgICAgICAic3VtbWFyeSI6ICJDcmVhdGUgYSBjbGllbnQuIiwKICAgICAgICAib3BlcmF0aW9uSWQiOiAiY3JlYXRlQ2xpZW50IiwKICAgICAgICAicGFyYW1ldGVycyI6IFsKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogInRoZSBjbGllbnQgdG8gYWRkIiwKICAgICAgICAgICAgIm5hbWUiOiAiYm9keSIsCiAgICAgICAgICAgICJpbiI6ICJib2R5IiwKICAgICAgICAgICAgInJlcXVpcmVkIjogdHJ1ZSwKICAgICAgICAgICAgInNjaGVtYSI6IHsKICAgICAgICAgICAgICAiJHJlZiI6ICIjL2RlZmluaXRpb25zL0NsaWVudCIKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgInJlc3BvbnNlcyI6IHsKICAgICAgICAgICIyMDAiOiB7CiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJPayIsCiAgICAgICAgICAgICJzY2hlbWEiOiB7CiAgICAgICAgICAgICAgIiRyZWYiOiAiIy9kZWZpbml0aW9ucy9DbGllbnQiCiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICAiNDAxIjogewogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVW5hdXRob3JpemVkIiwKICAgICAgICAgICAgInNjaGVtYSI6IHsKICAgICAgICAgICAgICAiJHJlZiI6ICIjL2RlZmluaXRpb25zL0Vycm9yIgogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgIjQwMyI6IHsKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkZvcmJpZGRlbiIsCiAgICAgICAgICAgICJzY2hlbWEiOiB7CiAgICAgICAgICAgICAgIiRyZWYiOiAiIy9kZWZpbml0aW9ucy9FcnJvciIKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgICIvY2xpZW50L3tpZH0iOiB7CiAgICAgICJkZWxldGUiOiB7CiAgICAgICAgInNlY3VyaXR5IjogWwogICAgICAgICAgewogICAgICAgICAgICAiY2xpZW50VG9rZW5IZWFkZXIiOiBbXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImNsaWVudFRva2VuUXVlcnkiOiBbXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImJhc2ljQXV0aCI6IFtdCiAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAiY29uc3VtZXMiOiBbCiAgICAgICAgICAiYXBwbGljYXRpb24vanNvbiIKICAgICAgICBdLAogICAgICAgICJwcm9kdWNlcyI6IFsKICAgICAgICAgICJhcHBsaWNhdGlvbi9qc29uIgogICAgICAgIF0sCiAgICAgICAgInRhZ3MiOiBbCiAgICAgICAgICAidG9rZW4iCiAgICAgICAgXSwKICAgICAgICAic3VtbWFyeSI6ICJEZWxldGUgYSBjbGllbnQuIiwKICAgICAgICAib3BlcmF0aW9uSWQiOiAiZGVsZXRlQ2xpZW50IiwKICAgICAgICAicGFyYW1ldGVycyI6IFsKICAgICAgICAgIHsKICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogInRoZSBjbGllbnQgaWQiLAogICAgICAgICAgICAibmFtZSI6ICJpZCIsCiAgICAgICAgICAgICJpbiI6ICJwYXRoIiwKICAgICAgICAgICAgInJlcXVpcmVkIjogdHJ1ZQogICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgInJlc3BvbnNlcyI6IHsKICAgICAgICAgICIyMDAiOiB7CiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJPayIKICAgICAgICAgIH0sCiAgICAgICAgICAiNDAxIjogewogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVW5hdXRob3JpemVkIiwKICAgICAgICAgICAgInNjaGVtYSI6IHsKICAgICAgICAgICAgICAiJHJlZiI6ICIjL2RlZmluaXRpb25zL0Vycm9yIgogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgIjQwMyI6IHsKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkZvcmJpZGRlbiIsCiAgICAgICAgICAgICJzY2hlbWEiOiB7CiAgICAgICAgICAgICAgIiRyZWYiOiAiIy9kZWZpbml0aW9ucy9FcnJvciIKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgICIvY3VycmVudC91c2VyIjogewogICAgICAiZ2V0IjogewogICAgICAgICJzZWN1cml0eSI6IFsKICAgICAgICAgIHsKICAgICAgICAgICAgImNsaWVudFRva2VuSGVhZGVyIjogW10KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJjbGllbnRUb2tlblF1ZXJ5IjogW10KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJiYXNpY0F1dGgiOiBbXQogICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgInByb2R1Y2VzIjogWwogICAgICAgICAgImFwcGxpY2F0aW9uL2pzb24iCiAgICAgICAgXSwKICAgICAgICAidGFncyI6IFsKICAgICAgICAgICJ1c2VyIgogICAgICAgIF0sCiAgICAgICAgInN1bW1hcnkiOiAiUmV0dXJuIHRoZSBjdXJyZW50IHVzZXIuIiwKICAgICAgICAib3BlcmF0aW9uSWQiOiAiY3VycmVudFVzZXIiLAogICAgICAgICJyZXNwb25zZXMiOiB7CiAgICAgICAgICAiMjAwIjogewogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiT2siLAogICAgICAgICAgICAic2NoZW1hIjogewogICAgICAgICAgICAgICIkcmVmIjogIiMvZGVmaW5pdGlvbnMvVXNlciIKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgICI0MDEiOiB7CiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmF1dGhvcml6ZWQiLAogICAgICAgICAgICAic2NoZW1hIjogewogICAgICAgICAgICAgICIkcmVmIjogIiMvZGVmaW5pdGlvbnMvRXJyb3IiCiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICAiNDAzIjogewogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiRm9yYmlkZGVuIiwKICAgICAgICAgICAgInNjaGVtYSI6IHsKICAgICAgICAgICAgICAiJHJlZiI6ICIjL2RlZmluaXRpb25zL0Vycm9yIgogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgIi9jdXJyZW50L3VzZXIvcGFzc3dvcmQiOiB7CiAgICAgICJwb3N0IjogewogICAgICAgICJzZWN1cml0eSI6IFsKICAgICAgICAgIHsKICAgICAgICAgICAgImNsaWVudFRva2VuSGVhZGVyIjogW10KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJjbGllbnRUb2tlblF1ZXJ5IjogW10KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJiYXNpY0F1dGgiOiBbXQogICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgImNvbnN1bWVzIjogWwogICAgICAgICAgImFwcGxpY2F0aW9uL2pzb24iCiAgICAgICAgXSwKICAgICAgICAicHJvZHVjZXMiOiBbCiAgICAgICAgICAiYXBwbGljYXRpb24vanNvbiIKICAgICAgICBdLAogICAgICAgICJ0YWdzIjogWwogICAgICAgICAgInVzZXIiCiAgICAgICAgXSwKICAgICAgICAic3VtbWFyeSI6ICJVcGRhdGUgdGhlIHBhc3N3b3JkIG9mIHRoZSBjdXJyZW50IHVzZXIuIiwKICAgICAgICAib3BlcmF0aW9uSWQiOiAidXBkYXRlQ3VycmVudFVzZXIiLAogICAgICAgICJwYXJhbWV0ZXJzIjogWwogICAgICAgICAgewogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAidGhlIHVzZXIiLAogICAgICAgICAgICAibmFtZSI6ICJib2R5IiwKICAgICAgICAgICAgImluIjogImJvZHkiLAogICAgICAgICAgICAicmVxdWlyZWQiOiB0cnVlLAogICAgICAgICAgICAic2NoZW1hIjogewogICAgICAgICAgICAgICIkcmVmIjogIiMvZGVmaW5pdGlvbnMvVXNlciIKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgInJlc3BvbnNlcyI6IHsKICAgICAgICAgICIyMDAiOiB7CiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJPayIKICAgICAgICAgIH0sCiAgICAgICAgICAiNDAxIjogewogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVW5hdXRob3JpemVkIiwKICAgICAgICAgICAgInNjaGVtYSI6IHsKICAgICAgICAgICAgICAiJHJlZiI6ICIjL2RlZmluaXRpb25zL0Vycm9yIgogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgIjQwMyI6IHsKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkZvcmJpZGRlbiIsCiAgICAgICAgICAgICJzY2hlbWEiOiB7CiAgICAgICAgICAgICAgIiRyZWYiOiAiIy9kZWZpbml0aW9ucy9FcnJvciIKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgICIvbWVzc2FnZSI6IHsKICAgICAgImdldCI6IHsKICAgICAgICAic2VjdXJpdHkiOiBbCiAgICAgICAgICB7CiAgICAgICAgICAgICJjbGllbnRUb2tlbkhlYWRlciI6IFtdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiY2xpZW50VG9rZW5RdWVyeSI6IFtdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiYmFzaWNBdXRoIjogW10KICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJwcm9kdWNlcyI6IFsKICAgICAgICAgICJhcHBsaWNhdGlvbi9qc29uIgogICAgICAgIF0sCiAgICAgICAgInRhZ3MiOiBbCiAgICAgICAgICAibWVzc2FnZSIKICAgICAgICBdLAogICAgICAgICJzdW1tYXJ5IjogIlJldHVybiBhbGwgbWVzc2FnZXMuIiwKICAgICAgICAib3BlcmF0aW9uSWQiOiAiZ2V0TWVzc2FnZXMiLAogICAgICAgICJyZXNwb25zZXMiOiB7CiAgICAgICAgICAiMjAwIjogewogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiT2siLAogICAgICAgICAgICAic2NoZW1hIjogewogICAgICAgICAgICAgICJ0eXBlIjogImFycmF5IiwKICAgICAgICAgICAgICAiaXRlbXMiOiB7CiAgICAgICAgICAgICAgICAiJHJlZiI6ICIjL2RlZmluaXRpb25zL01lc3NhZ2UiCiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgIjQwMSI6IHsKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuYXV0aG9yaXplZCIsCiAgICAgICAgICAgICJzY2hlbWEiOiB7CiAgICAgICAgICAgICAgIiRyZWYiOiAiIy9kZWZpbml0aW9ucy9FcnJvciIKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgICI0MDMiOiB7CiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJGb3JiaWRkZW4iLAogICAgICAgICAgICAic2NoZW1hIjogewogICAgICAgICAgICAgICIkcmVmIjogIiMvZGVmaW5pdGlvbnMvRXJyb3IiCiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0sCiAgICAgICJwb3N0IjogewogICAgICAgICJzZWN1cml0eSI6IFsKICAgICAgICAgIHsKICAgICAgICAgICAgImFwcFRva2VuSGVhZGVyIjogW10KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJhcHBUb2tlblF1ZXJ5IjogW10KICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJjb25zdW1lcyI6IFsKICAgICAgICAgICJhcHBsaWNhdGlvbi9qc29uIgogICAgICAgIF0sCiAgICAgICAgInByb2R1Y2VzIjogWwogICAgICAgICAgImFwcGxpY2F0aW9uL2pzb24iCiAgICAgICAgXSwKICAgICAgICAidGFncyI6IFsKICAgICAgICAgICJtZXNzYWdlIgogICAgICAgIF0sCiAgICAgICAgInN1bW1hcnkiOiAiQ3JlYXRlIGEgbWVzc2FnZS4iLAogICAgICAgICJvcGVyYXRpb25JZCI6ICJjcmVhdGVNZXNzYWdlIiwKICAgICAgICAicGFyYW1ldGVycyI6IFsKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogInRoZSBtZXNzYWdlIHRvIGFkZCIsCiAgICAgICAgICAgICJuYW1lIjogImJvZHkiLAogICAgICAgICAgICAiaW4iOiAiYm9keSIsCiAgICAgICAgICAgICJyZXF1aXJlZCI6IHRydWUsCiAgICAgICAgICAgICJzY2hlbWEiOiB7CiAgICAgICAgICAgICAgIiRyZWYiOiAiIy9kZWZpbml0aW9ucy9NZXNzYWdlIgogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicmVzcG9uc2VzIjogewogICAgICAgICAgIjIwMCI6IHsKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIk9rIiwKICAgICAgICAgICAgInNjaGVtYSI6IHsKICAgICAgICAgICAgICAidHlwZSI6ICJhcnJheSIsCiAgICAgICAgICAgICAgIml0ZW1zIjogewogICAgICAgICAgICAgICAgIiRyZWYiOiAiIy9kZWZpbml0aW9ucy9NZXNzYWdlIgogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgICI0MDEiOiB7CiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmF1dGhvcml6ZWQiLAogICAgICAgICAgICAic2NoZW1hIjogewogICAgICAgICAgICAgICIkcmVmIjogIiMvZGVmaW5pdGlvbnMvRXJyb3IiCiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0sCiAgICAgICJkZWxldGUiOiB7CiAgICAgICAgInNlY3VyaXR5IjogWwogICAgICAgICAgewogICAgICAgICAgICAiY2xpZW50VG9rZW5IZWFkZXIiOiBbXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImNsaWVudFRva2VuUXVlcnkiOiBbXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImJhc2ljQXV0aCI6IFtdCiAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicHJvZHVjZXMiOiBbCiAgICAgICAgICAiYXBwbGljYXRpb24vanNvbiIKICAgICAgICBdLAogICAgICAgICJ0YWdzIjogWwogICAgICAgICAgIm1lc3NhZ2UiCiAgICAgICAgXSwKICAgICAgICAic3VtbWFyeSI6ICJEZWxldGUgYWxsIG1lc3NhZ2VzLiIsCiAgICAgICAgIm9wZXJhdGlvbklkIjogImRlbGV0ZU1lc3NhZ2VzIiwKICAgICAgICAicmVzcG9uc2VzIjogewogICAgICAgICAgIjIwMCI6IHsKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIk9rIgogICAgICAgICAgfSwKICAgICAgICAgICI0MDEiOiB7CiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmF1dGhvcml6ZWQiLAogICAgICAgICAgICAic2NoZW1hIjogewogICAgICAgICAgICAgICIkcmVmIjogIiMvZGVmaW5pdGlvbnMvRXJyb3IiCiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICAiNDAzIjogewogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiRm9yYmlkZGVuIiwKICAgICAgICAgICAgInNjaGVtYSI6IHsKICAgICAgICAgICAgICAiJHJlZiI6ICIjL2RlZmluaXRpb25zL0Vycm9yIgogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgIi9tZXNzYWdlL3tpZH0iOiB7CiAgICAgICJkZWxldGUiOiB7CiAgICAgICAgInNlY3VyaXR5IjogWwogICAgICAgICAgewogICAgICAgICAgICAiY2xpZW50VG9rZW5IZWFkZXIiOiBbXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImNsaWVudFRva2VuUXVlcnkiOiBbXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImJhc2ljQXV0aCI6IFtdCiAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicHJvZHVjZXMiOiBbCiAgICAgICAgICAiYXBwbGljYXRpb24vanNvbiIKICAgICAgICBdLAogICAgICAgICJ0YWdzIjogWwogICAgICAgICAgIm1lc3NhZ2UiCiAgICAgICAgXSwKICAgICAgICAic3VtbWFyeSI6ICJEZWxldGVzIGEgbWVzc2FnZSB3aXRoIGFuIGlkLiIsCiAgICAgICAgIm9wZXJhdGlvbklkIjogImRlbGV0ZU1lc3NhZ2UiLAogICAgICAgICJwYXJhbWV0ZXJzIjogWwogICAgICAgICAgewogICAgICAgICAgICAidHlwZSI6ICJpbnRlZ2VyIiwKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogInRoZSBtZXNzYWdlIGlkIiwKICAgICAgICAgICAgIm5hbWUiOiAiaWQiLAogICAgICAgICAgICAiaW4iOiAicGF0aCIsCiAgICAgICAgICAgICJyZXF1aXJlZCI6IHRydWUKICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJyZXNwb25zZXMiOiB7CiAgICAgICAgICAiMjAwIjogewogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiT2siCiAgICAgICAgICB9LAogICAgICAgICAgIjQwMSI6IHsKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuYXV0aG9yaXplZCIsCiAgICAgICAgICAgICJzY2hlbWEiOiB7CiAgICAgICAgICAgICAgIiRyZWYiOiAiIy9kZWZpbml0aW9ucy9FcnJvciIKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgICI0MDMiOiB7CiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJGb3JiaWRkZW4iLAogICAgICAgICAgICAic2NoZW1hIjogewogICAgICAgICAgICAgICIkcmVmIjogIiMvZGVmaW5pdGlvbnMvRXJyb3IiCiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAiL3N0cmVhbSI6IHsKICAgICAgImdldCI6IHsKICAgICAgICAic2VjdXJpdHkiOiBbCiAgICAgICAgICB7CiAgICAgICAgICAgICJjbGllbnRUb2tlbkhlYWRlciI6IFtdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiY2xpZW50VG9rZW5RdWVyeSI6IFtdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiYmFzaWNBdXRoIjogW10KICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJwcm9kdWNlcyI6IFsKICAgICAgICAgICJhcHBsaWNhdGlvbi9qc29uIgogICAgICAgIF0sCiAgICAgICAgInRhZ3MiOiBbCiAgICAgICAgICAibWVzc2FnZSIKICAgICAgICBdLAogICAgICAgICJzdW1tYXJ5IjogIldlYnNvY2tldCwgcmV0dXJuIG5ld2x5IGNyZWF0ZWQgbWVzc2FnZXMuIiwKICAgICAgICAib3BlcmF0aW9uSWQiOiAic3RyZWFtTWVzc2FnZXMiLAogICAgICAgICJyZXNwb25zZXMiOiB7CiAgICAgICAgICAiMjAwIjogewogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiT2siLAogICAgICAgICAgICAic2NoZW1hIjogewogICAgICAgICAgICAgICIkcmVmIjogIiMvZGVmaW5pdGlvbnMvTWVzc2FnZSIKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgICI0MDEiOiB7CiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmF1dGhvcml6ZWQiLAogICAgICAgICAgICAic2NoZW1hIjogewogICAgICAgICAgICAgICIkcmVmIjogIiMvZGVmaW5pdGlvbnMvRXJyb3IiCiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICAiNDAzIjogewogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiRm9yYmlkZGVuIiwKICAgICAgICAgICAgInNjaGVtYSI6IHsKICAgICAgICAgICAgICAiJHJlZiI6ICIjL2RlZmluaXRpb25zL0Vycm9yIgogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgIi91c2VyIjogewogICAgICAiZ2V0IjogewogICAgICAgICJzZWN1cml0eSI6IFsKICAgICAgICAgIHsKICAgICAgICAgICAgImNsaWVudFRva2VuSGVhZGVyIjogW10KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJjbGllbnRUb2tlblF1ZXJ5IjogW10KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJiYXNpY0F1dGgiOiBbXQogICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgInByb2R1Y2VzIjogWwogICAgICAgICAgImFwcGxpY2F0aW9uL2pzb24iCiAgICAgICAgXSwKICAgICAgICAidGFncyI6IFsKICAgICAgICAgICJ1c2VyIgogICAgICAgIF0sCiAgICAgICAgInN1bW1hcnkiOiAiUmV0dXJuIGFsbCB1c2Vycy4iLAogICAgICAgICJvcGVyYXRpb25JZCI6ICJnZXRVc2VycyIsCiAgICAgICAgInJlc3BvbnNlcyI6IHsKICAgICAgICAgICIyMDAiOiB7CiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJPayIsCiAgICAgICAgICAgICJzY2hlbWEiOiB7CiAgICAgICAgICAgICAgInR5cGUiOiAiYXJyYXkiLAogICAgICAgICAgICAgICJpdGVtcyI6IHsKICAgICAgICAgICAgICAgICIkcmVmIjogIiMvZGVmaW5pdGlvbnMvVXNlciIKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICAiNDAxIjogewogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVW5hdXRob3JpemVkIiwKICAgICAgICAgICAgInNjaGVtYSI6IHsKICAgICAgICAgICAgICAiJHJlZiI6ICIjL2RlZmluaXRpb25zL0Vycm9yIgogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgIjQwMyI6IHsKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkZvcmJpZGRlbiIsCiAgICAgICAgICAgICJzY2hlbWEiOiB7CiAgICAgICAgICAgICAgIiRyZWYiOiAiIy9kZWZpbml0aW9ucy9FcnJvciIKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSwKICAgICAgInBvc3QiOiB7CiAgICAgICAgInNlY3VyaXR5IjogWwogICAgICAgICAgewogICAgICAgICAgICAiY2xpZW50VG9rZW5IZWFkZXIiOiBbXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImNsaWVudFRva2VuUXVlcnkiOiBbXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImJhc2ljQXV0aCI6IFtdCiAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAiY29uc3VtZXMiOiBbCiAgICAgICAgICAiYXBwbGljYXRpb24vanNvbiIKICAgICAgICBdLAogICAgICAgICJwcm9kdWNlcyI6IFsKICAgICAgICAgICJhcHBsaWNhdGlvbi9qc29uIgogICAgICAgIF0sCiAgICAgICAgInRhZ3MiOiBbCiAgICAgICAgICAidXNlciIKICAgICAgICBdLAogICAgICAgICJzdW1tYXJ5IjogIkNyZWF0ZSBhIHVzZXIuIiwKICAgICAgICAib3BlcmF0aW9uSWQiOiAiY3JlYXRlVXNlciIsCiAgICAgICAgInBhcmFtZXRlcnMiOiBbCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJ0aGUgdXNlciB0byBhZGQiLAogICAgICAgICAgICAibmFtZSI6ICJib2R5IiwKICAgICAgICAgICAgImluIjogImJvZHkiLAogICAgICAgICAgICAicmVxdWlyZWQiOiB0cnVlLAogICAgICAgICAgICAic2NoZW1hIjogewogICAgICAgICAgICAgICIkcmVmIjogIiMvZGVmaW5pdGlvbnMvVXNlciIKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgInJlc3BvbnNlcyI6IHsKICAgICAgICAgICIyMDAiOiB7CiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJPayIsCiAgICAgICAgICAgICJzY2hlbWEiOiB7CiAgICAgICAgICAgICAgIiRyZWYiOiAiIy9kZWZpbml0aW9ucy9Vc2VyIgogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgIjQwMSI6IHsKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuYXV0aG9yaXplZCIsCiAgICAgICAgICAgICJzY2hlbWEiOiB7CiAgICAgICAgICAgICAgIiRyZWYiOiAiIy9kZWZpbml0aW9ucy9FcnJvciIKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgICI0MDMiOiB7CiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJGb3JiaWRkZW4iLAogICAgICAgICAgICAic2NoZW1hIjogewogICAgICAgICAgICAgICIkcmVmIjogIiMvZGVmaW5pdGlvbnMvRXJyb3IiCiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAiL3VzZXIve2lkfSI6IHsKICAgICAgImdldCI6IHsKICAgICAgICAic2VjdXJpdHkiOiBbCiAgICAgICAgICB7CiAgICAgICAgICAgICJjbGllbnRUb2tlbkhlYWRlciI6IFtdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiY2xpZW50VG9rZW5RdWVyeSI6IFtdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiYmFzaWNBdXRoIjogW10KICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJjb25zdW1lcyI6IFsKICAgICAgICAgICJhcHBsaWNhdGlvbi9qc29uIgogICAgICAgIF0sCiAgICAgICAgInByb2R1Y2VzIjogWwogICAgICAgICAgImFwcGxpY2F0aW9uL2pzb24iCiAgICAgICAgXSwKICAgICAgICAidGFncyI6IFsKICAgICAgICAgICJ1c2VyIgogICAgICAgIF0sCiAgICAgICAgInN1bW1hcnkiOiAiR2V0IGEgdXNlci4iLAogICAgICAgICJvcGVyYXRpb25JZCI6ICJnZXRVc2VyIiwKICAgICAgICAicGFyYW1ldGVycyI6IFsKICAgICAgICAgIHsKICAgICAgICAgICAgInR5cGUiOiAiaW50ZWdlciIsCiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJ0aGUgdXNlciBpZCIsCiAgICAgICAgICAgICJuYW1lIjogImlkIiwKICAgICAgICAgICAgImluIjogInBhdGgiLAogICAgICAgICAgICAicmVxdWlyZWQiOiB0cnVlCiAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicmVzcG9uc2VzIjogewogICAgICAgICAgIjIwMCI6IHsKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIk9rIiwKICAgICAgICAgICAgInNjaGVtYSI6IHsKICAgICAgICAgICAgICAiJHJlZiI6ICIjL2RlZmluaXRpb25zL1VzZXIiCiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICAiNDAxIjogewogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVW5hdXRob3JpemVkIiwKICAgICAgICAgICAgInNjaGVtYSI6IHsKICAgICAgICAgICAgICAiJHJlZiI6ICIjL2RlZmluaXRpb25zL0Vycm9yIgogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgIjQwMyI6IHsKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkZvcmJpZGRlbiIsCiAgICAgICAgICAgICJzY2hlbWEiOiB7CiAgICAgICAgICAgICAgIiRyZWYiOiAiIy9kZWZpbml0aW9ucy9FcnJvciIKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSwKICAgICAgInBvc3QiOiB7CiAgICAgICAgInNlY3VyaXR5IjogWwogICAgICAgICAgewogICAgICAgICAgICAiY2xpZW50VG9rZW5IZWFkZXIiOiBbXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImNsaWVudFRva2VuUXVlcnkiOiBbXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImJhc2ljQXV0aCI6IFtdCiAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAiY29uc3VtZXMiOiBbCiAgICAgICAgICAiYXBwbGljYXRpb24vanNvbiIKICAgICAgICBdLAogICAgICAgICJwcm9kdWNlcyI6IFsKICAgICAgICAgICJhcHBsaWNhdGlvbi9qc29uIgogICAgICAgIF0sCiAgICAgICAgInRhZ3MiOiBbCiAgICAgICAgICAidXNlciIKICAgICAgICBdLAogICAgICAgICJzdW1tYXJ5IjogIlVwZGF0ZSBhIHVzZXIuIiwKICAgICAgICAib3BlcmF0aW9uSWQiOiAidXBkYXRlVXNlciIsCiAgICAgICAgInBhcmFtZXRlcnMiOiBbCiAgICAgICAgICB7CiAgICAgICAgICAgICJ0eXBlIjogImludGVnZXIiLAogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAidGhlIHVzZXIgaWQiLAogICAgICAgICAgICAibmFtZSI6ICJpZCIsCiAgICAgICAgICAgICJpbiI6ICJwYXRoIiwKICAgICAgICAgICAgInJlcXVpcmVkIjogdHJ1ZQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogInRoZSB1cGRhdGVkIHVzZXIiLAogICAgICAgICAgICAibmFtZSI6ICJib2R5IiwKICAgICAgICAgICAgImluIjogImJvZHkiLAogICAgICAgICAgICAicmVxdWlyZWQiOiB0cnVlLAogICAgICAgICAgICAic2NoZW1hIjogewogICAgICAgICAgICAgICIkcmVmIjogIiMvZGVmaW5pdGlvbnMvVXNlciIKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgInJlc3BvbnNlcyI6IHsKICAgICAgICAgICIyMDAiOiB7CiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJPayIsCiAgICAgICAgICAgICJzY2hlbWEiOiB7CiAgICAgICAgICAgICAgIiRyZWYiOiAiIy9kZWZpbml0aW9ucy9Vc2VyIgogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgIjQwMSI6IHsKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuYXV0aG9yaXplZCIsCiAgICAgICAgICAgICJzY2hlbWEiOiB7CiAgICAgICAgICAgICAgIiRyZWYiOiAiIy9kZWZpbml0aW9ucy9FcnJvciIKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgICI0MDMiOiB7CiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJGb3JiaWRkZW4iLAogICAgICAgICAgICAic2NoZW1hIjogewogICAgICAgICAgICAgICIkcmVmIjogIiMvZGVmaW5pdGlvbnMvRXJyb3IiCiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0sCiAgICAgICJkZWxldGUiOiB7CiAgICAgICAgInNlY3VyaXR5IjogWwogICAgICAgICAgewogICAgICAgICAgICAiY2xpZW50VG9rZW5IZWFkZXIiOiBbXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImNsaWVudFRva2VuUXVlcnkiOiBbXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImJhc2ljQXV0aCI6IFtdCiAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicHJvZHVjZXMiOiBbCiAgICAgICAgICAiYXBwbGljYXRpb24vanNvbiIKICAgICAgICBdLAogICAgICAgICJ0YWdzIjogWwogICAgICAgICAgInVzZXIiCiAgICAgICAgXSwKICAgICAgICAic3VtbWFyeSI6ICJEZWxldGVzIGEgdXNlci4iLAogICAgICAgICJvcGVyYXRpb25JZCI6ICJkZWxldGVVc2VyIiwKICAgICAgICAicGFyYW1ldGVycyI6IFsKICAgICAgICAgIHsKICAgICAgICAgICAgInR5cGUiOiAiaW50ZWdlciIsCiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJ0aGUgdXNlciBpZCIsCiAgICAgICAgICAgICJuYW1lIjogImlkIiwKICAgICAgICAgICAgImluIjogInBhdGgiLAogICAgICAgICAgICAicmVxdWlyZWQiOiB0cnVlCiAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicmVzcG9uc2VzIjogewogICAgICAgICAgIjIwMCI6IHsKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIk9rIgogICAgICAgICAgfSwKICAgICAgICAgICI0MDEiOiB7CiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmF1dGhvcml6ZWQiLAogICAgICAgICAgICAic2NoZW1hIjogewogICAgICAgICAgICAgICIkcmVmIjogIiMvZGVmaW5pdGlvbnMvRXJyb3IiCiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICAiNDAzIjogewogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiRm9yYmlkZGVuIiwKICAgICAgICAgICAgInNjaGVtYSI6IHsKICAgICAgICAgICAgICAiJHJlZiI6ICIjL2RlZmluaXRpb25zL0Vycm9yIgogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfSwKICAiZGVmaW5pdGlvbnMiOiB7CiAgICAiQXBwbGljYXRpb24iOiB7CiAgICAgICJkZXNjcmlwdGlvbiI6ICJUaGUgQXBwbGljYXRpb24gaG9sZHMgaW5mb3JtYXRpb24gYWJvdXQgYW4gYXBwIHdoaWNoIGNhbiBzZW5kIG5vdGlmaWNhdGlvbnMuIiwKICAgICAgInR5cGUiOiAib2JqZWN0IiwKICAgICAgInRpdGxlIjogIkFwcGxpY2F0aW9uIE1vZGVsIiwKICAgICAgInByb3BlcnRpZXMiOiB7CiAgICAgICAgImRlc2NyaXB0aW9uIjogewogICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKICAgICAgICAgICJ4LWdvLW5hbWUiOiAiRGVzY3JpcHRpb24iCiAgICAgICAgfSwKICAgICAgICAiaWQiOiB7CiAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAogICAgICAgICAgIngtZ28tbmFtZSI6ICJJRCIKICAgICAgICB9LAogICAgICAgICJuYW1lIjogewogICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKICAgICAgICAgICJ4LWdvLW5hbWUiOiAiTmFtZSIKICAgICAgICB9CiAgICAgIH0sCiAgICAgICJ4LWdvLXBhY2thZ2UiOiAiZ2l0aHViLmNvbS9nb3RpZnkvc2VydmVyL21vZGVsIgogICAgfSwKICAgICJDbGllbnQiOiB7CiAgICAgICJkZXNjcmlwdGlvbiI6ICJUaGUgQ2xpZW50IGhvbGRzIGluZm9ybWF0aW9uIGFib3V0IGEgZGV2aWNlIHdoaWNoIGNhbiByZWNlaXZlIG5vdGlmaWNhdGlvbnMgKGFuZCBvdGhlciBzdHVmZikuIiwKICAgICAgInR5cGUiOiAib2JqZWN0IiwKICAgICAgInRpdGxlIjogIkNsaWVudCBNb2RlbCIsCiAgICAgICJwcm9wZXJ0aWVzIjogewogICAgICAgICJpZCI6IHsKICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCiAgICAgICAgICAieC1nby1uYW1lIjogIklEIgogICAgICAgIH0sCiAgICAgICAgIm5hbWUiOiB7CiAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAogICAgICAgICAgIngtZ28tbmFtZSI6ICJOYW1lIgogICAgICAgIH0KICAgICAgfSwKICAgICAgIngtZ28tcGFja2FnZSI6ICJnaXRodWIuY29tL2dvdGlmeS9zZXJ2ZXIvbW9kZWwiCiAgICB9LAogICAgIkVycm9yIjogewogICAgICAiZGVzY3JpcHRpb24iOiAiVGhlIEVycm9yIGNvbnRhaW5zIGVycm9yIHJlbGV2YW50IGluZm9ybWF0aW9uLiIsCiAgICAgICJ0eXBlIjogIm9iamVjdCIsCiAgICAgICJ0aXRsZSI6ICJFcnJvciBNb2RlbCIsCiAgICAgICJwcm9wZXJ0aWVzIjogewogICAgICAgICJlcnJvciI6IHsKICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCiAgICAgICAgICAieC1nby1uYW1lIjogIkVycm9yIgogICAgICAgIH0sCiAgICAgICAgImVycm9yQ29kZSI6IHsKICAgICAgICAgICJ0eXBlIjogImludGVnZXIiLAogICAgICAgICAgImZvcm1hdCI6ICJpbnQ2NCIsCiAgICAgICAgICAieC1nby1uYW1lIjogIkVycm9yQ29kZSIKICAgICAgICB9LAogICAgICAgICJlcnJvckRlc2NyaXB0aW9uIjogewogICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKICAgICAgICAgICJ4LWdvLW5hbWUiOiAiRXJyb3JEZXNjcmlwdGlvbiIKICAgICAgICB9CiAgICAgIH0sCiAgICAgICJ4LWdvLXBhY2thZ2UiOiAiZ2l0aHViLmNvbS9nb3RpZnkvc2VydmVyL21vZGVsIgogICAgfSwKICAgICJNZXNzYWdlIjogewogICAgICAiZGVzY3JpcHRpb24iOiAiVGhlIE1lc3NhZ2UgaG9sZHMgaW5mb3JtYXRpb24gYWJvdXQgYSBtZXNzYWdlIHdoaWNoIHdhcyBzZW50IGJ5IGFuIEFwcGxpY2F0aW9uLiIsCiAgICAgICJ0eXBlIjogIm9iamVjdCIsCiAgICAgICJ0aXRsZSI6ICJNZXNzYWdlIE1vZGVsIiwKICAgICAgInByb3BlcnRpZXMiOiB7CiAgICAgICAgImFwcGlkIjogewogICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKICAgICAgICAgICJ4LWdvLW5hbWUiOiAiQXBwbGljYXRpb25JRCIKICAgICAgICB9LAogICAgICAgICJkYXRlIjogewogICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKICAgICAgICAgICJmb3JtYXQiOiAiZGF0ZS10aW1lIiwKICAgICAgICAgICJ4LWdvLW5hbWUiOiAiRGF0ZSIKICAgICAgICB9LAogICAgICAgICJpZCI6IHsKICAgICAgICAgICJ0eXBlIjogImludGVnZXIiLAogICAgICAgICAgImZvcm1hdCI6ICJ1aW50NjQiLAogICAgICAgICAgIngtZ28tbmFtZSI6ICJJRCIKICAgICAgICB9LAogICAgICAgICJtZXNzYWdlIjogewogICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKICAgICAgICAgICJ4LWdvLW5hbWUiOiAiTWVzc2FnZSIKICAgICAgICB9LAogICAgICAgICJwcmlvcml0eSI6IHsKICAgICAgICAgICJ0eXBlIjogImludGVnZXIiLAogICAgICAgICAgImZvcm1hdCI6ICJpbnQ2NCIsCiAgICAgICAgICAieC1nby1uYW1lIjogIlByaW9yaXR5IgogICAgICAgIH0sCiAgICAgICAgInRpdGxlIjogewogICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKICAgICAgICAgICJ4LWdvLW5hbWUiOiAiVGl0bGUiCiAgICAgICAgfQogICAgICB9LAogICAgICAieC1nby1wYWNrYWdlIjogImdpdGh1Yi5jb20vZ290aWZ5L3NlcnZlci9tb2RlbCIKICAgIH0sCiAgICAiVXNlciI6IHsKICAgICAgImRlc2NyaXB0aW9uIjogIlRoZSBVc2VyIGhvbGRzIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjcmVkZW50aWFscyBhbmQgb3RoZXIgc3R1ZmYuIiwKICAgICAgInR5cGUiOiAib2JqZWN0IiwKICAgICAgInRpdGxlIjogIlVzZXJFeHRlcm5hbCBNb2RlbCIsCiAgICAgICJwcm9wZXJ0aWVzIjogewogICAgICAgICJhZG1pbiI6IHsKICAgICAgICAgICJ0eXBlIjogImJvb2xlYW4iLAogICAgICAgICAgIngtZ28tbmFtZSI6ICJBZG1pbiIKICAgICAgICB9LAogICAgICAgICJpZCI6IHsKICAgICAgICAgICJ0eXBlIjogImludGVnZXIiLAogICAgICAgICAgImZvcm1hdCI6ICJ1aW50NjQiLAogICAgICAgICAgIngtZ28tbmFtZSI6ICJJRCIKICAgICAgICB9LAogICAgICAgICJuYW1lIjogewogICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKICAgICAgICAgICJ4LWdvLW5hbWUiOiAiTmFtZSIKICAgICAgICB9LAogICAgICAgICJwYXNzIjogewogICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKICAgICAgICAgICJ4LWdvLW5hbWUiOiAiUGFzcyIKICAgICAgICB9CiAgICAgIH0sCiAgICAgICJ4LWdvLW5hbWUiOiAiVXNlckV4dGVybmFsIiwKICAgICAgIngtZ28tcGFja2FnZSI6ICJnaXRodWIuY29tL2dvdGlmeS9zZXJ2ZXIvbW9kZWwiCiAgICB9CiAgfSwKICAic2VjdXJpdHlEZWZpbml0aW9ucyI6IHsKICAgICJhcHBUb2tlbkhlYWRlciI6IHsKICAgICAgInR5cGUiOiAiYXBpS2V5IiwKICAgICAgIm5hbWUiOiAiWC1Hb3RpZnktS2V5IiwKICAgICAgImluIjogImhlYWRlciIKICAgIH0sCiAgICAiYXBwVG9rZW5RdWVyeSI6IHsKICAgICAgInR5cGUiOiAiYXBpS2V5IiwKICAgICAgIm5hbWUiOiAidG9rZW4iLAogICAgICAiaW4iOiAicXVlcnkiCiAgICB9LAogICAgImJhc2ljQXV0aCI6IHsKICAgICAgInR5cGUiOiAiYmFzaWMiCiAgICB9LAogICAgImNsaWVudFRva2VuSGVhZGVyIjogewogICAgICAidHlwZSI6ICJhcGlLZXkiLAogICAgICAibmFtZSI6ICJYLUdvdGlmeS1LZXkiLAogICAgICAiaW4iOiAiaGVhZGVyIgogICAgfSwKICAgICJjbGllbnRUb2tlblF1ZXJ5IjogewogICAgICAidHlwZSI6ICJhcGlLZXkiLAogICAgICAibmFtZSI6ICJ0b2tlbiIsCiAgICAgICJpbiI6ICJxdWVyeSIKICAgIH0KICB9Cn0=\"") - packr.PackJSONBytes("./", "swagger.go", "\"cGFja2FnZSBkb2NzCgppbXBvcnQgKAoJImdpdGh1Yi5jb20vZ2luLWdvbmljL2dpbiIKCSJnaXRodWIuY29tL2dvYnVmZmFsby9wYWNrciIKCSJzdHJpbmdzIgopCgovLyBTZXJ2ZSBzZXJ2ZXMgdGhlIGRvY3VtZW50YXRpb24uCmZ1bmMgU2VydmUoY3R4ICpnaW4uQ29udGV4dCkgewoJY3R4LldyaXRlci5Xcml0ZVN0cmluZyhnZXQoY3R4LlJlcXVlc3QuVVJMLkhvc3QpKQp9CgpmdW5jIGdldChob3N0IHN0cmluZykgc3RyaW5nIHsKCWJveCA6PSBwYWNrci5OZXdCb3goIi4vIikKCXJldHVybiBzdHJpbmdzLlJlcGxhY2UoYm94LlN0cmluZygic3BlYy5qc29uIiksICJsb2NhbGhvc3QiLCBob3N0LCAxKQp9Cg==\"") + packr.PackJSONBytes("./", "package.go", "\"Ly8gUGFja2FnZSBkb2NzIEdvdGlmeSBSRVNULUFQSS4NCi8vDQovLyBUaGlzIGlzIHRoZSBkb2N1bWVudGF0aW9uIG9mIHRoZSBHb3RpZnkgUkVTVC1BUEkuDQovLw0KLy8gICAgIFNjaGVtZXM6IGh0dHAsIGh0dHBzDQovLyAgICAgSG9zdDogbG9jYWxob3N0DQovLyAgICAgVmVyc2lvbjogMS4wLjANCi8vICAgICBMaWNlbnNlOiBNSVQgaHR0cHM6Ly9naXRodWIuY29tL2dvdGlmeS9zZXJ2ZXIvYmxvYi9tYXN0ZXIvTElDRU5TRQ0KLy8gICAgIENvbnRhY3Q6IGh0dHBzOi8vZ2l0aHViLmNvbS9nb3RpZnkvc2VydmVyL2lzc3Vlcw0KLy8NCi8vICAgICBDb25zdW1lczoNCi8vICAgICAtIGFwcGxpY2F0aW9uL2pzb24NCi8vDQovLyAgICAgUHJvZHVjZXM6DQovLyAgICAgLSBhcHBsaWNhdGlvbi9qc29uDQovLw0KLy8gICAgIFNlY3VyaXR5RGVmaW5pdGlvbnM6DQovLyAgICAgICAgYXBwVG9rZW5RdWVyeToNCi8vICAgICAgICAgICB0eXBlOiBhcGlLZXkNCi8vICAgICAgICAgICBuYW1lOiB0b2tlbg0KLy8gICAgICAgICAgIGluOiBxdWVyeQ0KLy8gICAgICAgIGNsaWVudFRva2VuUXVlcnk6DQovLyAgICAgICAgICAgdHlwZTogYXBpS2V5DQovLyAgICAgICAgICAgbmFtZTogdG9rZW4NCi8vICAgICAgICAgICBpbjogcXVlcnkNCi8vIAkgICAgICBhcHBUb2tlbkhlYWRlcjoNCi8vICAgICAgICAgICB0eXBlOiBhcGlLZXkNCi8vICAgICAgICAgICBuYW1lOiBYLUdvdGlmeS1LZXkNCi8vICAgICAgICAgICBpbjogaGVhZGVyDQovLyAJICAgICAgY2xpZW50VG9rZW5IZWFkZXI6DQovLyAgICAgICAgICAgdHlwZTogYXBpS2V5DQovLyAgICAgICAgICAgbmFtZTogWC1Hb3RpZnktS2V5DQovLyAgICAgICAgICAgaW46IGhlYWRlcg0KLy8gICAgICAgIGJhc2ljQXV0aDoNCi8vICAgICAgICAgICB0eXBlOiBiYXNpYw0KLy8NCi8vIHN3YWdnZXI6bWV0YQ0KcGFja2FnZSBkb2NzDQo=\"") + packr.PackJSONBytes("./", "spec.json", "\"ewogICJjb25zdW1lcyI6IFsKICAgICJhcHBsaWNhdGlvbi9qc29uIgogIF0sCiAgInByb2R1Y2VzIjogWwogICAgImFwcGxpY2F0aW9uL2pzb24iCiAgXSwKICAic2NoZW1lcyI6IFsKICAgICJodHRwIiwKICAgICJodHRwcyIKICBdLAogICJzd2FnZ2VyIjogIjIuMCIsCiAgImluZm8iOiB7CiAgICAiZGVzY3JpcHRpb24iOiAiVGhpcyBpcyB0aGUgZG9jdW1lbnRhdGlvbiBvZiB0aGUgR290aWZ5IFJFU1QtQVBJLiIsCiAgICAidGl0bGUiOiAiR290aWZ5IFJFU1QtQVBJLiIsCiAgICAiY29udGFjdCI6IHsKICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vZ290aWZ5L3NlcnZlci9pc3N1ZXMiCiAgICB9LAogICAgImxpY2Vuc2UiOiB7CiAgICAgICJuYW1lIjogIk1JVCIsCiAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL2dvdGlmeS9zZXJ2ZXIvYmxvYi9tYXN0ZXIvTElDRU5TRSIKICAgIH0sCiAgICAidmVyc2lvbiI6ICIxLjAuMCIKICB9LAogICJob3N0IjogImxvY2FsaG9zdCIsCiAgInBhdGhzIjogewogICAgIi9hcHBsaWNhdGlvbiI6IHsKICAgICAgImdldCI6IHsKICAgICAgICAic2VjdXJpdHkiOiBbCiAgICAgICAgICB7CiAgICAgICAgICAgICJjbGllbnRUb2tlbkhlYWRlciI6IFtdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiY2xpZW50VG9rZW5RdWVyeSI6IFtdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiYmFzaWNBdXRoIjogW10KICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJjb25zdW1lcyI6IFsKICAgICAgICAgICJhcHBsaWNhdGlvbi9qc29uIgogICAgICAgIF0sCiAgICAgICAgInByb2R1Y2VzIjogWwogICAgICAgICAgImFwcGxpY2F0aW9uL2pzb24iCiAgICAgICAgXSwKICAgICAgICAidGFncyI6IFsKICAgICAgICAgICJ0b2tlbiIKICAgICAgICBdLAogICAgICAgICJzdW1tYXJ5IjogIlJldHVybiBhbGwgYXBwbGljYXRpb25zLiIsCiAgICAgICAgIm9wZXJhdGlvbklkIjogImdldEFwcHMiLAogICAgICAgICJyZXNwb25zZXMiOiB7CiAgICAgICAgICAiMjAwIjogewogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiT2siLAogICAgICAgICAgICAic2NoZW1hIjogewogICAgICAgICAgICAgICJ0eXBlIjogImFycmF5IiwKICAgICAgICAgICAgICAiaXRlbXMiOiB7CiAgICAgICAgICAgICAgICAiJHJlZiI6ICIjL2RlZmluaXRpb25zL0FwcGxpY2F0aW9uIgogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgICI0MDEiOiB7CiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmF1dGhvcml6ZWQiLAogICAgICAgICAgICAic2NoZW1hIjogewogICAgICAgICAgICAgICIkcmVmIjogIiMvZGVmaW5pdGlvbnMvRXJyb3IiCiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICAiNDAzIjogewogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiRm9yYmlkZGVuIiwKICAgICAgICAgICAgInNjaGVtYSI6IHsKICAgICAgICAgICAgICAiJHJlZiI6ICIjL2RlZmluaXRpb25zL0Vycm9yIgogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9LAogICAgICAicG9zdCI6IHsKICAgICAgICAic2VjdXJpdHkiOiBbCiAgICAgICAgICB7CiAgICAgICAgICAgICJjbGllbnRUb2tlbkhlYWRlciI6IFtdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiY2xpZW50VG9rZW5RdWVyeSI6IFtdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiYmFzaWNBdXRoIjogW10KICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJjb25zdW1lcyI6IFsKICAgICAgICAgICJhcHBsaWNhdGlvbi9qc29uIgogICAgICAgIF0sCiAgICAgICAgInByb2R1Y2VzIjogWwogICAgICAgICAgImFwcGxpY2F0aW9uL2pzb24iCiAgICAgICAgXSwKICAgICAgICAidGFncyI6IFsKICAgICAgICAgICJ0b2tlbiIKICAgICAgICBdLAogICAgICAgICJzdW1tYXJ5IjogIkNyZWF0ZSBhbiBhcHBsaWNhdGlvbi4iLAogICAgICAgICJvcGVyYXRpb25JZCI6ICJjcmVhdGVBcHAiLAogICAgICAgICJwYXJhbWV0ZXJzIjogWwogICAgICAgICAgewogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAidGhlIGFwcGxpY2F0aW9uIHRvIGFkZCIsCiAgICAgICAgICAgICJuYW1lIjogImJvZHkiLAogICAgICAgICAgICAiaW4iOiAiYm9keSIsCiAgICAgICAgICAgICJyZXF1aXJlZCI6IHRydWUsCiAgICAgICAgICAgICJzY2hlbWEiOiB7CiAgICAgICAgICAgICAgIiRyZWYiOiAiIy9kZWZpbml0aW9ucy9BcHBsaWNhdGlvbiIKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgInJlc3BvbnNlcyI6IHsKICAgICAgICAgICIyMDAiOiB7CiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJPayIsCiAgICAgICAgICAgICJzY2hlbWEiOiB7CiAgICAgICAgICAgICAgIiRyZWYiOiAiIy9kZWZpbml0aW9ucy9BcHBsaWNhdGlvbiIKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgICI0MDEiOiB7CiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmF1dGhvcml6ZWQiLAogICAgICAgICAgICAic2NoZW1hIjogewogICAgICAgICAgICAgICIkcmVmIjogIiMvZGVmaW5pdGlvbnMvRXJyb3IiCiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICAiNDAzIjogewogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiRm9yYmlkZGVuIiwKICAgICAgICAgICAgInNjaGVtYSI6IHsKICAgICAgICAgICAgICAiJHJlZiI6ICIjL2RlZmluaXRpb25zL0Vycm9yIgogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgIi9hcHBsaWNhdGlvbi97aWR9IjogewogICAgICAiZGVsZXRlIjogewogICAgICAgICJzZWN1cml0eSI6IFsKICAgICAgICAgIHsKICAgICAgICAgICAgImNsaWVudFRva2VuSGVhZGVyIjogW10KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJjbGllbnRUb2tlblF1ZXJ5IjogW10KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJiYXNpY0F1dGgiOiBbXQogICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgImNvbnN1bWVzIjogWwogICAgICAgICAgImFwcGxpY2F0aW9uL2pzb24iCiAgICAgICAgXSwKICAgICAgICAicHJvZHVjZXMiOiBbCiAgICAgICAgICAiYXBwbGljYXRpb24vanNvbiIKICAgICAgICBdLAogICAgICAgICJ0YWdzIjogWwogICAgICAgICAgInRva2VuIgogICAgICAgIF0sCiAgICAgICAgInN1bW1hcnkiOiAiRGVsZXRlIGFuIGFwcGxpY2F0aW9uLiIsCiAgICAgICAgIm9wZXJhdGlvbklkIjogImRlbGV0ZUFwcCIsCiAgICAgICAgInBhcmFtZXRlcnMiOiBbCiAgICAgICAgICB7CiAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJ0aGUgYXBwbGljYXRpb24gaWQiLAogICAgICAgICAgICAibmFtZSI6ICJpZCIsCiAgICAgICAgICAgICJpbiI6ICJwYXRoIiwKICAgICAgICAgICAgInJlcXVpcmVkIjogdHJ1ZQogICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgInJlc3BvbnNlcyI6IHsKICAgICAgICAgICIyMDAiOiB7CiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJPayIKICAgICAgICAgIH0sCiAgICAgICAgICAiNDAxIjogewogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVW5hdXRob3JpemVkIiwKICAgICAgICAgICAgInNjaGVtYSI6IHsKICAgICAgICAgICAgICAiJHJlZiI6ICIjL2RlZmluaXRpb25zL0Vycm9yIgogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgIjQwMyI6IHsKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkZvcmJpZGRlbiIsCiAgICAgICAgICAgICJzY2hlbWEiOiB7CiAgICAgICAgICAgICAgIiRyZWYiOiAiIy9kZWZpbml0aW9ucy9FcnJvciIKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgICIvYXBwbGljYXRpb24ve2lkfS9tZXNzYWdlIjogewogICAgICAiZ2V0IjogewogICAgICAgICJzZWN1cml0eSI6IFsKICAgICAgICAgIHsKICAgICAgICAgICAgImNsaWVudFRva2VuSGVhZGVyIjogW10KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJjbGllbnRUb2tlblF1ZXJ5IjogW10KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJiYXNpY0F1dGgiOiBbXQogICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgInByb2R1Y2VzIjogWwogICAgICAgICAgImFwcGxpY2F0aW9uL2pzb24iCiAgICAgICAgXSwKICAgICAgICAidGFncyI6IFsKICAgICAgICAgICJtZXNzYWdlIgogICAgICAgIF0sCiAgICAgICAgInN1bW1hcnkiOiAiUmV0dXJuIGFsbCBtZXNzYWdlcyBmcm9tIGEgc3BlY2lmaWMgYXBwbGljYXRpb24uIiwKICAgICAgICAib3BlcmF0aW9uSWQiOiAiZ2V0QXBwTWVzc2FnZXMiLAogICAgICAgICJwYXJhbWV0ZXJzIjogWwogICAgICAgICAgewogICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAidGhlIGFwcGxpY2F0aW9uIGlkIiwKICAgICAgICAgICAgIm5hbWUiOiAiaWQiLAogICAgICAgICAgICAiaW4iOiAicGF0aCIsCiAgICAgICAgICAgICJyZXF1aXJlZCI6IHRydWUKICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJyZXNwb25zZXMiOiB7CiAgICAgICAgICAiMjAwIjogewogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiT2siLAogICAgICAgICAgICAic2NoZW1hIjogewogICAgICAgICAgICAgICJ0eXBlIjogImFycmF5IiwKICAgICAgICAgICAgICAiaXRlbXMiOiB7CiAgICAgICAgICAgICAgICAiJHJlZiI6ICIjL2RlZmluaXRpb25zL01lc3NhZ2UiCiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgIjQwMSI6IHsKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuYXV0aG9yaXplZCIsCiAgICAgICAgICAgICJzY2hlbWEiOiB7CiAgICAgICAgICAgICAgIiRyZWYiOiAiIy9kZWZpbml0aW9ucy9FcnJvciIKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgICI0MDMiOiB7CiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJGb3JiaWRkZW4iLAogICAgICAgICAgICAic2NoZW1hIjogewogICAgICAgICAgICAgICIkcmVmIjogIiMvZGVmaW5pdGlvbnMvRXJyb3IiCiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0sCiAgICAgICJkZWxldGUiOiB7CiAgICAgICAgInNlY3VyaXR5IjogWwogICAgICAgICAgewogICAgICAgICAgICAiY2xpZW50VG9rZW5IZWFkZXIiOiBbXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImNsaWVudFRva2VuUXVlcnkiOiBbXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImJhc2ljQXV0aCI6IFtdCiAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicHJvZHVjZXMiOiBbCiAgICAgICAgICAiYXBwbGljYXRpb24vanNvbiIKICAgICAgICBdLAogICAgICAgICJ0YWdzIjogWwogICAgICAgICAgIm1lc3NhZ2UiCiAgICAgICAgXSwKICAgICAgICAic3VtbWFyeSI6ICJEZWxldGUgYWxsIG1lc3NhZ2VzIGZyb20gYSBzcGVjaWZpYyBhcHBsaWNhdGlvbi4iLAogICAgICAgICJvcGVyYXRpb25JZCI6ICJkZWxldGVBcHBNZXNzYWdlcyIsCiAgICAgICAgInBhcmFtZXRlcnMiOiBbCiAgICAgICAgICB7CiAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJ0aGUgYXBwbGljYXRpb24gaWQiLAogICAgICAgICAgICAibmFtZSI6ICJpZCIsCiAgICAgICAgICAgICJpbiI6ICJwYXRoIiwKICAgICAgICAgICAgInJlcXVpcmVkIjogdHJ1ZQogICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgInJlc3BvbnNlcyI6IHsKICAgICAgICAgICIyMDAiOiB7CiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJPayIKICAgICAgICAgIH0sCiAgICAgICAgICAiNDAxIjogewogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVW5hdXRob3JpemVkIiwKICAgICAgICAgICAgInNjaGVtYSI6IHsKICAgICAgICAgICAgICAiJHJlZiI6ICIjL2RlZmluaXRpb25zL0Vycm9yIgogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgIjQwMyI6IHsKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkZvcmJpZGRlbiIsCiAgICAgICAgICAgICJzY2hlbWEiOiB7CiAgICAgICAgICAgICAgIiRyZWYiOiAiIy9kZWZpbml0aW9ucy9FcnJvciIKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgICIvY2xpZW50IjogewogICAgICAiZ2V0IjogewogICAgICAgICJzZWN1cml0eSI6IFsKICAgICAgICAgIHsKICAgICAgICAgICAgImNsaWVudFRva2VuSGVhZGVyIjogW10KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJjbGllbnRUb2tlblF1ZXJ5IjogW10KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJiYXNpY0F1dGgiOiBbXQogICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgImNvbnN1bWVzIjogWwogICAgICAgICAgImFwcGxpY2F0aW9uL2pzb24iCiAgICAgICAgXSwKICAgICAgICAicHJvZHVjZXMiOiBbCiAgICAgICAgICAiYXBwbGljYXRpb24vanNvbiIKICAgICAgICBdLAogICAgICAgICJ0YWdzIjogWwogICAgICAgICAgInRva2VuIgogICAgICAgIF0sCiAgICAgICAgInN1bW1hcnkiOiAiUmV0dXJuIGFsbCBjbGllbnRzLiIsCiAgICAgICAgIm9wZXJhdGlvbklkIjogImdldENsaWVudHMiLAogICAgICAgICJyZXNwb25zZXMiOiB7CiAgICAgICAgICAiMjAwIjogewogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiT2siLAogICAgICAgICAgICAic2NoZW1hIjogewogICAgICAgICAgICAgICJ0eXBlIjogImFycmF5IiwKICAgICAgICAgICAgICAiaXRlbXMiOiB7CiAgICAgICAgICAgICAgICAiJHJlZiI6ICIjL2RlZmluaXRpb25zL0NsaWVudCIKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICAiNDAxIjogewogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVW5hdXRob3JpemVkIiwKICAgICAgICAgICAgInNjaGVtYSI6IHsKICAgICAgICAgICAgICAiJHJlZiI6ICIjL2RlZmluaXRpb25zL0Vycm9yIgogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgIjQwMyI6IHsKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkZvcmJpZGRlbiIsCiAgICAgICAgICAgICJzY2hlbWEiOiB7CiAgICAgICAgICAgICAgIiRyZWYiOiAiIy9kZWZpbml0aW9ucy9FcnJvciIKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSwKICAgICAgInBvc3QiOiB7CiAgICAgICAgInNlY3VyaXR5IjogWwogICAgICAgICAgewogICAgICAgICAgICAiY2xpZW50VG9rZW5IZWFkZXIiOiBbXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImNsaWVudFRva2VuUXVlcnkiOiBbXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImJhc2ljQXV0aCI6IFtdCiAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAiY29uc3VtZXMiOiBbCiAgICAgICAgICAiYXBwbGljYXRpb24vanNvbiIKICAgICAgICBdLAogICAgICAgICJwcm9kdWNlcyI6IFsKICAgICAgICAgICJhcHBsaWNhdGlvbi9qc29uIgogICAgICAgIF0sCiAgICAgICAgInRhZ3MiOiBbCiAgICAgICAgICAidG9rZW4iCiAgICAgICAgXSwKICAgICAgICAic3VtbWFyeSI6ICJDcmVhdGUgYSBjbGllbnQuIiwKICAgICAgICAib3BlcmF0aW9uSWQiOiAiY3JlYXRlQ2xpZW50IiwKICAgICAgICAicGFyYW1ldGVycyI6IFsKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogInRoZSBjbGllbnQgdG8gYWRkIiwKICAgICAgICAgICAgIm5hbWUiOiAiYm9keSIsCiAgICAgICAgICAgICJpbiI6ICJib2R5IiwKICAgICAgICAgICAgInJlcXVpcmVkIjogdHJ1ZSwKICAgICAgICAgICAgInNjaGVtYSI6IHsKICAgICAgICAgICAgICAiJHJlZiI6ICIjL2RlZmluaXRpb25zL0NsaWVudCIKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgInJlc3BvbnNlcyI6IHsKICAgICAgICAgICIyMDAiOiB7CiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJPayIsCiAgICAgICAgICAgICJzY2hlbWEiOiB7CiAgICAgICAgICAgICAgIiRyZWYiOiAiIy9kZWZpbml0aW9ucy9DbGllbnQiCiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICAiNDAxIjogewogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVW5hdXRob3JpemVkIiwKICAgICAgICAgICAgInNjaGVtYSI6IHsKICAgICAgICAgICAgICAiJHJlZiI6ICIjL2RlZmluaXRpb25zL0Vycm9yIgogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgIjQwMyI6IHsKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkZvcmJpZGRlbiIsCiAgICAgICAgICAgICJzY2hlbWEiOiB7CiAgICAgICAgICAgICAgIiRyZWYiOiAiIy9kZWZpbml0aW9ucy9FcnJvciIKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgICIvY2xpZW50L3tpZH0iOiB7CiAgICAgICJkZWxldGUiOiB7CiAgICAgICAgInNlY3VyaXR5IjogWwogICAgICAgICAgewogICAgICAgICAgICAiY2xpZW50VG9rZW5IZWFkZXIiOiBbXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImNsaWVudFRva2VuUXVlcnkiOiBbXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImJhc2ljQXV0aCI6IFtdCiAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAiY29uc3VtZXMiOiBbCiAgICAgICAgICAiYXBwbGljYXRpb24vanNvbiIKICAgICAgICBdLAogICAgICAgICJwcm9kdWNlcyI6IFsKICAgICAgICAgICJhcHBsaWNhdGlvbi9qc29uIgogICAgICAgIF0sCiAgICAgICAgInRhZ3MiOiBbCiAgICAgICAgICAidG9rZW4iCiAgICAgICAgXSwKICAgICAgICAic3VtbWFyeSI6ICJEZWxldGUgYSBjbGllbnQuIiwKICAgICAgICAib3BlcmF0aW9uSWQiOiAiZGVsZXRlQ2xpZW50IiwKICAgICAgICAicGFyYW1ldGVycyI6IFsKICAgICAgICAgIHsKICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogInRoZSBjbGllbnQgaWQiLAogICAgICAgICAgICAibmFtZSI6ICJpZCIsCiAgICAgICAgICAgICJpbiI6ICJwYXRoIiwKICAgICAgICAgICAgInJlcXVpcmVkIjogdHJ1ZQogICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgInJlc3BvbnNlcyI6IHsKICAgICAgICAgICIyMDAiOiB7CiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJPayIKICAgICAgICAgIH0sCiAgICAgICAgICAiNDAxIjogewogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVW5hdXRob3JpemVkIiwKICAgICAgICAgICAgInNjaGVtYSI6IHsKICAgICAgICAgICAgICAiJHJlZiI6ICIjL2RlZmluaXRpb25zL0Vycm9yIgogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgIjQwMyI6IHsKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkZvcmJpZGRlbiIsCiAgICAgICAgICAgICJzY2hlbWEiOiB7CiAgICAgICAgICAgICAgIiRyZWYiOiAiIy9kZWZpbml0aW9ucy9FcnJvciIKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgICIvY3VycmVudC91c2VyIjogewogICAgICAiZ2V0IjogewogICAgICAgICJzZWN1cml0eSI6IFsKICAgICAgICAgIHsKICAgICAgICAgICAgImNsaWVudFRva2VuSGVhZGVyIjogW10KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJjbGllbnRUb2tlblF1ZXJ5IjogW10KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJiYXNpY0F1dGgiOiBbXQogICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgInByb2R1Y2VzIjogWwogICAgICAgICAgImFwcGxpY2F0aW9uL2pzb24iCiAgICAgICAgXSwKICAgICAgICAidGFncyI6IFsKICAgICAgICAgICJ1c2VyIgogICAgICAgIF0sCiAgICAgICAgInN1bW1hcnkiOiAiUmV0dXJuIHRoZSBjdXJyZW50IHVzZXIuIiwKICAgICAgICAib3BlcmF0aW9uSWQiOiAiY3VycmVudFVzZXIiLAogICAgICAgICJyZXNwb25zZXMiOiB7CiAgICAgICAgICAiMjAwIjogewogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiT2siLAogICAgICAgICAgICAic2NoZW1hIjogewogICAgICAgICAgICAgICIkcmVmIjogIiMvZGVmaW5pdGlvbnMvVXNlciIKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgICI0MDEiOiB7CiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmF1dGhvcml6ZWQiLAogICAgICAgICAgICAic2NoZW1hIjogewogICAgICAgICAgICAgICIkcmVmIjogIiMvZGVmaW5pdGlvbnMvRXJyb3IiCiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICAiNDAzIjogewogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiRm9yYmlkZGVuIiwKICAgICAgICAgICAgInNjaGVtYSI6IHsKICAgICAgICAgICAgICAiJHJlZiI6ICIjL2RlZmluaXRpb25zL0Vycm9yIgogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgIi9jdXJyZW50L3VzZXIvcGFzc3dvcmQiOiB7CiAgICAgICJwb3N0IjogewogICAgICAgICJzZWN1cml0eSI6IFsKICAgICAgICAgIHsKICAgICAgICAgICAgImNsaWVudFRva2VuSGVhZGVyIjogW10KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJjbGllbnRUb2tlblF1ZXJ5IjogW10KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJiYXNpY0F1dGgiOiBbXQogICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgImNvbnN1bWVzIjogWwogICAgICAgICAgImFwcGxpY2F0aW9uL2pzb24iCiAgICAgICAgXSwKICAgICAgICAicHJvZHVjZXMiOiBbCiAgICAgICAgICAiYXBwbGljYXRpb24vanNvbiIKICAgICAgICBdLAogICAgICAgICJ0YWdzIjogWwogICAgICAgICAgInVzZXIiCiAgICAgICAgXSwKICAgICAgICAic3VtbWFyeSI6ICJVcGRhdGUgdGhlIHBhc3N3b3JkIG9mIHRoZSBjdXJyZW50IHVzZXIuIiwKICAgICAgICAib3BlcmF0aW9uSWQiOiAidXBkYXRlQ3VycmVudFVzZXIiLAogICAgICAgICJwYXJhbWV0ZXJzIjogWwogICAgICAgICAgewogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAidGhlIHVzZXIiLAogICAgICAgICAgICAibmFtZSI6ICJib2R5IiwKICAgICAgICAgICAgImluIjogImJvZHkiLAogICAgICAgICAgICAicmVxdWlyZWQiOiB0cnVlLAogICAgICAgICAgICAic2NoZW1hIjogewogICAgICAgICAgICAgICIkcmVmIjogIiMvZGVmaW5pdGlvbnMvVXNlciIKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgInJlc3BvbnNlcyI6IHsKICAgICAgICAgICIyMDAiOiB7CiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJPayIKICAgICAgICAgIH0sCiAgICAgICAgICAiNDAxIjogewogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVW5hdXRob3JpemVkIiwKICAgICAgICAgICAgInNjaGVtYSI6IHsKICAgICAgICAgICAgICAiJHJlZiI6ICIjL2RlZmluaXRpb25zL0Vycm9yIgogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgIjQwMyI6IHsKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkZvcmJpZGRlbiIsCiAgICAgICAgICAgICJzY2hlbWEiOiB7CiAgICAgICAgICAgICAgIiRyZWYiOiAiIy9kZWZpbml0aW9ucy9FcnJvciIKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgICIvbWVzc2FnZSI6IHsKICAgICAgImdldCI6IHsKICAgICAgICAic2VjdXJpdHkiOiBbCiAgICAgICAgICB7CiAgICAgICAgICAgICJjbGllbnRUb2tlbkhlYWRlciI6IFtdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiY2xpZW50VG9rZW5RdWVyeSI6IFtdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiYmFzaWNBdXRoIjogW10KICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJwcm9kdWNlcyI6IFsKICAgICAgICAgICJhcHBsaWNhdGlvbi9qc29uIgogICAgICAgIF0sCiAgICAgICAgInRhZ3MiOiBbCiAgICAgICAgICAibWVzc2FnZSIKICAgICAgICBdLAogICAgICAgICJzdW1tYXJ5IjogIlJldHVybiBhbGwgbWVzc2FnZXMuIiwKICAgICAgICAib3BlcmF0aW9uSWQiOiAiZ2V0TWVzc2FnZXMiLAogICAgICAgICJyZXNwb25zZXMiOiB7CiAgICAgICAgICAiMjAwIjogewogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiT2siLAogICAgICAgICAgICAic2NoZW1hIjogewogICAgICAgICAgICAgICJ0eXBlIjogImFycmF5IiwKICAgICAgICAgICAgICAiaXRlbXMiOiB7CiAgICAgICAgICAgICAgICAiJHJlZiI6ICIjL2RlZmluaXRpb25zL01lc3NhZ2UiCiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgIjQwMSI6IHsKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuYXV0aG9yaXplZCIsCiAgICAgICAgICAgICJzY2hlbWEiOiB7CiAgICAgICAgICAgICAgIiRyZWYiOiAiIy9kZWZpbml0aW9ucy9FcnJvciIKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgICI0MDMiOiB7CiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJGb3JiaWRkZW4iLAogICAgICAgICAgICAic2NoZW1hIjogewogICAgICAgICAgICAgICIkcmVmIjogIiMvZGVmaW5pdGlvbnMvRXJyb3IiCiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0sCiAgICAgICJwb3N0IjogewogICAgICAgICJzZWN1cml0eSI6IFsKICAgICAgICAgIHsKICAgICAgICAgICAgImFwcFRva2VuSGVhZGVyIjogW10KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJhcHBUb2tlblF1ZXJ5IjogW10KICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJjb25zdW1lcyI6IFsKICAgICAgICAgICJhcHBsaWNhdGlvbi9qc29uIgogICAgICAgIF0sCiAgICAgICAgInByb2R1Y2VzIjogWwogICAgICAgICAgImFwcGxpY2F0aW9uL2pzb24iCiAgICAgICAgXSwKICAgICAgICAidGFncyI6IFsKICAgICAgICAgICJtZXNzYWdlIgogICAgICAgIF0sCiAgICAgICAgInN1bW1hcnkiOiAiQ3JlYXRlIGEgbWVzc2FnZS4iLAogICAgICAgICJvcGVyYXRpb25JZCI6ICJjcmVhdGVNZXNzYWdlIiwKICAgICAgICAicGFyYW1ldGVycyI6IFsKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogInRoZSBtZXNzYWdlIHRvIGFkZCIsCiAgICAgICAgICAgICJuYW1lIjogImJvZHkiLAogICAgICAgICAgICAiaW4iOiAiYm9keSIsCiAgICAgICAgICAgICJyZXF1aXJlZCI6IHRydWUsCiAgICAgICAgICAgICJzY2hlbWEiOiB7CiAgICAgICAgICAgICAgIiRyZWYiOiAiIy9kZWZpbml0aW9ucy9NZXNzYWdlIgogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicmVzcG9uc2VzIjogewogICAgICAgICAgIjIwMCI6IHsKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIk9rIiwKICAgICAgICAgICAgInNjaGVtYSI6IHsKICAgICAgICAgICAgICAidHlwZSI6ICJhcnJheSIsCiAgICAgICAgICAgICAgIml0ZW1zIjogewogICAgICAgICAgICAgICAgIiRyZWYiOiAiIy9kZWZpbml0aW9ucy9NZXNzYWdlIgogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgICI0MDEiOiB7CiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmF1dGhvcml6ZWQiLAogICAgICAgICAgICAic2NoZW1hIjogewogICAgICAgICAgICAgICIkcmVmIjogIiMvZGVmaW5pdGlvbnMvRXJyb3IiCiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0sCiAgICAgICJkZWxldGUiOiB7CiAgICAgICAgInNlY3VyaXR5IjogWwogICAgICAgICAgewogICAgICAgICAgICAiY2xpZW50VG9rZW5IZWFkZXIiOiBbXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImNsaWVudFRva2VuUXVlcnkiOiBbXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImJhc2ljQXV0aCI6IFtdCiAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicHJvZHVjZXMiOiBbCiAgICAgICAgICAiYXBwbGljYXRpb24vanNvbiIKICAgICAgICBdLAogICAgICAgICJ0YWdzIjogWwogICAgICAgICAgIm1lc3NhZ2UiCiAgICAgICAgXSwKICAgICAgICAic3VtbWFyeSI6ICJEZWxldGUgYWxsIG1lc3NhZ2VzLiIsCiAgICAgICAgIm9wZXJhdGlvbklkIjogImRlbGV0ZU1lc3NhZ2VzIiwKICAgICAgICAicmVzcG9uc2VzIjogewogICAgICAgICAgIjIwMCI6IHsKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIk9rIgogICAgICAgICAgfSwKICAgICAgICAgICI0MDEiOiB7CiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmF1dGhvcml6ZWQiLAogICAgICAgICAgICAic2NoZW1hIjogewogICAgICAgICAgICAgICIkcmVmIjogIiMvZGVmaW5pdGlvbnMvRXJyb3IiCiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICAiNDAzIjogewogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiRm9yYmlkZGVuIiwKICAgICAgICAgICAgInNjaGVtYSI6IHsKICAgICAgICAgICAgICAiJHJlZiI6ICIjL2RlZmluaXRpb25zL0Vycm9yIgogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgIi9tZXNzYWdlL3tpZH0iOiB7CiAgICAgICJkZWxldGUiOiB7CiAgICAgICAgInNlY3VyaXR5IjogWwogICAgICAgICAgewogICAgICAgICAgICAiY2xpZW50VG9rZW5IZWFkZXIiOiBbXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImNsaWVudFRva2VuUXVlcnkiOiBbXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImJhc2ljQXV0aCI6IFtdCiAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicHJvZHVjZXMiOiBbCiAgICAgICAgICAiYXBwbGljYXRpb24vanNvbiIKICAgICAgICBdLAogICAgICAgICJ0YWdzIjogWwogICAgICAgICAgIm1lc3NhZ2UiCiAgICAgICAgXSwKICAgICAgICAic3VtbWFyeSI6ICJEZWxldGVzIGEgbWVzc2FnZSB3aXRoIGFuIGlkLiIsCiAgICAgICAgIm9wZXJhdGlvbklkIjogImRlbGV0ZU1lc3NhZ2UiLAogICAgICAgICJwYXJhbWV0ZXJzIjogWwogICAgICAgICAgewogICAgICAgICAgICAidHlwZSI6ICJpbnRlZ2VyIiwKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogInRoZSBtZXNzYWdlIGlkIiwKICAgICAgICAgICAgIm5hbWUiOiAiaWQiLAogICAgICAgICAgICAiaW4iOiAicGF0aCIsCiAgICAgICAgICAgICJyZXF1aXJlZCI6IHRydWUKICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJyZXNwb25zZXMiOiB7CiAgICAgICAgICAiMjAwIjogewogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiT2siCiAgICAgICAgICB9LAogICAgICAgICAgIjQwMSI6IHsKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuYXV0aG9yaXplZCIsCiAgICAgICAgICAgICJzY2hlbWEiOiB7CiAgICAgICAgICAgICAgIiRyZWYiOiAiIy9kZWZpbml0aW9ucy9FcnJvciIKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgICI0MDMiOiB7CiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJGb3JiaWRkZW4iLAogICAgICAgICAgICAic2NoZW1hIjogewogICAgICAgICAgICAgICIkcmVmIjogIiMvZGVmaW5pdGlvbnMvRXJyb3IiCiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAiL3N0cmVhbSI6IHsKICAgICAgImdldCI6IHsKICAgICAgICAic2VjdXJpdHkiOiBbCiAgICAgICAgICB7CiAgICAgICAgICAgICJjbGllbnRUb2tlbkhlYWRlciI6IFtdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiY2xpZW50VG9rZW5RdWVyeSI6IFtdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiYmFzaWNBdXRoIjogW10KICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJwcm9kdWNlcyI6IFsKICAgICAgICAgICJhcHBsaWNhdGlvbi9qc29uIgogICAgICAgIF0sCiAgICAgICAgInRhZ3MiOiBbCiAgICAgICAgICAibWVzc2FnZSIKICAgICAgICBdLAogICAgICAgICJzdW1tYXJ5IjogIldlYnNvY2tldCwgcmV0dXJuIG5ld2x5IGNyZWF0ZWQgbWVzc2FnZXMuIiwKICAgICAgICAib3BlcmF0aW9uSWQiOiAic3RyZWFtTWVzc2FnZXMiLAogICAgICAgICJyZXNwb25zZXMiOiB7CiAgICAgICAgICAiMjAwIjogewogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiT2siLAogICAgICAgICAgICAic2NoZW1hIjogewogICAgICAgICAgICAgICIkcmVmIjogIiMvZGVmaW5pdGlvbnMvTWVzc2FnZSIKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgICI0MDEiOiB7CiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmF1dGhvcml6ZWQiLAogICAgICAgICAgICAic2NoZW1hIjogewogICAgICAgICAgICAgICIkcmVmIjogIiMvZGVmaW5pdGlvbnMvRXJyb3IiCiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICAiNDAzIjogewogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiRm9yYmlkZGVuIiwKICAgICAgICAgICAgInNjaGVtYSI6IHsKICAgICAgICAgICAgICAiJHJlZiI6ICIjL2RlZmluaXRpb25zL0Vycm9yIgogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgIi91c2VyIjogewogICAgICAiZ2V0IjogewogICAgICAgICJzZWN1cml0eSI6IFsKICAgICAgICAgIHsKICAgICAgICAgICAgImNsaWVudFRva2VuSGVhZGVyIjogW10KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJjbGllbnRUb2tlblF1ZXJ5IjogW10KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgICJiYXNpY0F1dGgiOiBbXQogICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgInByb2R1Y2VzIjogWwogICAgICAgICAgImFwcGxpY2F0aW9uL2pzb24iCiAgICAgICAgXSwKICAgICAgICAidGFncyI6IFsKICAgICAgICAgICJ1c2VyIgogICAgICAgIF0sCiAgICAgICAgInN1bW1hcnkiOiAiUmV0dXJuIGFsbCB1c2Vycy4iLAogICAgICAgICJvcGVyYXRpb25JZCI6ICJnZXRVc2VycyIsCiAgICAgICAgInJlc3BvbnNlcyI6IHsKICAgICAgICAgICIyMDAiOiB7CiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJPayIsCiAgICAgICAgICAgICJzY2hlbWEiOiB7CiAgICAgICAgICAgICAgInR5cGUiOiAiYXJyYXkiLAogICAgICAgICAgICAgICJpdGVtcyI6IHsKICAgICAgICAgICAgICAgICIkcmVmIjogIiMvZGVmaW5pdGlvbnMvVXNlciIKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICAiNDAxIjogewogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVW5hdXRob3JpemVkIiwKICAgICAgICAgICAgInNjaGVtYSI6IHsKICAgICAgICAgICAgICAiJHJlZiI6ICIjL2RlZmluaXRpb25zL0Vycm9yIgogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgIjQwMyI6IHsKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkZvcmJpZGRlbiIsCiAgICAgICAgICAgICJzY2hlbWEiOiB7CiAgICAgICAgICAgICAgIiRyZWYiOiAiIy9kZWZpbml0aW9ucy9FcnJvciIKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSwKICAgICAgInBvc3QiOiB7CiAgICAgICAgInNlY3VyaXR5IjogWwogICAgICAgICAgewogICAgICAgICAgICAiY2xpZW50VG9rZW5IZWFkZXIiOiBbXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImNsaWVudFRva2VuUXVlcnkiOiBbXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImJhc2ljQXV0aCI6IFtdCiAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAiY29uc3VtZXMiOiBbCiAgICAgICAgICAiYXBwbGljYXRpb24vanNvbiIKICAgICAgICBdLAogICAgICAgICJwcm9kdWNlcyI6IFsKICAgICAgICAgICJhcHBsaWNhdGlvbi9qc29uIgogICAgICAgIF0sCiAgICAgICAgInRhZ3MiOiBbCiAgICAgICAgICAidXNlciIKICAgICAgICBdLAogICAgICAgICJzdW1tYXJ5IjogIkNyZWF0ZSBhIHVzZXIuIiwKICAgICAgICAib3BlcmF0aW9uSWQiOiAiY3JlYXRlVXNlciIsCiAgICAgICAgInBhcmFtZXRlcnMiOiBbCiAgICAgICAgICB7CiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJ0aGUgdXNlciB0byBhZGQiLAogICAgICAgICAgICAibmFtZSI6ICJib2R5IiwKICAgICAgICAgICAgImluIjogImJvZHkiLAogICAgICAgICAgICAicmVxdWlyZWQiOiB0cnVlLAogICAgICAgICAgICAic2NoZW1hIjogewogICAgICAgICAgICAgICIkcmVmIjogIiMvZGVmaW5pdGlvbnMvVXNlciIKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgInJlc3BvbnNlcyI6IHsKICAgICAgICAgICIyMDAiOiB7CiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJPayIsCiAgICAgICAgICAgICJzY2hlbWEiOiB7CiAgICAgICAgICAgICAgIiRyZWYiOiAiIy9kZWZpbml0aW9ucy9Vc2VyIgogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgIjQwMSI6IHsKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuYXV0aG9yaXplZCIsCiAgICAgICAgICAgICJzY2hlbWEiOiB7CiAgICAgICAgICAgICAgIiRyZWYiOiAiIy9kZWZpbml0aW9ucy9FcnJvciIKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgICI0MDMiOiB7CiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJGb3JiaWRkZW4iLAogICAgICAgICAgICAic2NoZW1hIjogewogICAgICAgICAgICAgICIkcmVmIjogIiMvZGVmaW5pdGlvbnMvRXJyb3IiCiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAiL3VzZXIve2lkfSI6IHsKICAgICAgImdldCI6IHsKICAgICAgICAic2VjdXJpdHkiOiBbCiAgICAgICAgICB7CiAgICAgICAgICAgICJjbGllbnRUb2tlbkhlYWRlciI6IFtdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiY2xpZW50VG9rZW5RdWVyeSI6IFtdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICAiYmFzaWNBdXRoIjogW10KICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJjb25zdW1lcyI6IFsKICAgICAgICAgICJhcHBsaWNhdGlvbi9qc29uIgogICAgICAgIF0sCiAgICAgICAgInByb2R1Y2VzIjogWwogICAgICAgICAgImFwcGxpY2F0aW9uL2pzb24iCiAgICAgICAgXSwKICAgICAgICAidGFncyI6IFsKICAgICAgICAgICJ1c2VyIgogICAgICAgIF0sCiAgICAgICAgInN1bW1hcnkiOiAiR2V0IGEgdXNlci4iLAogICAgICAgICJvcGVyYXRpb25JZCI6ICJnZXRVc2VyIiwKICAgICAgICAicGFyYW1ldGVycyI6IFsKICAgICAgICAgIHsKICAgICAgICAgICAgInR5cGUiOiAiaW50ZWdlciIsCiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJ0aGUgdXNlciBpZCIsCiAgICAgICAgICAgICJuYW1lIjogImlkIiwKICAgICAgICAgICAgImluIjogInBhdGgiLAogICAgICAgICAgICAicmVxdWlyZWQiOiB0cnVlCiAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicmVzcG9uc2VzIjogewogICAgICAgICAgIjIwMCI6IHsKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIk9rIiwKICAgICAgICAgICAgInNjaGVtYSI6IHsKICAgICAgICAgICAgICAiJHJlZiI6ICIjL2RlZmluaXRpb25zL1VzZXIiCiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICAiNDAxIjogewogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVW5hdXRob3JpemVkIiwKICAgICAgICAgICAgInNjaGVtYSI6IHsKICAgICAgICAgICAgICAiJHJlZiI6ICIjL2RlZmluaXRpb25zL0Vycm9yIgogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgIjQwMyI6IHsKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkZvcmJpZGRlbiIsCiAgICAgICAgICAgICJzY2hlbWEiOiB7CiAgICAgICAgICAgICAgIiRyZWYiOiAiIy9kZWZpbml0aW9ucy9FcnJvciIKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSwKICAgICAgInBvc3QiOiB7CiAgICAgICAgInNlY3VyaXR5IjogWwogICAgICAgICAgewogICAgICAgICAgICAiY2xpZW50VG9rZW5IZWFkZXIiOiBbXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImNsaWVudFRva2VuUXVlcnkiOiBbXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImJhc2ljQXV0aCI6IFtdCiAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAiY29uc3VtZXMiOiBbCiAgICAgICAgICAiYXBwbGljYXRpb24vanNvbiIKICAgICAgICBdLAogICAgICAgICJwcm9kdWNlcyI6IFsKICAgICAgICAgICJhcHBsaWNhdGlvbi9qc29uIgogICAgICAgIF0sCiAgICAgICAgInRhZ3MiOiBbCiAgICAgICAgICAidXNlciIKICAgICAgICBdLAogICAgICAgICJzdW1tYXJ5IjogIlVwZGF0ZSBhIHVzZXIuIiwKICAgICAgICAib3BlcmF0aW9uSWQiOiAidXBkYXRlVXNlciIsCiAgICAgICAgInBhcmFtZXRlcnMiOiBbCiAgICAgICAgICB7CiAgICAgICAgICAgICJ0eXBlIjogImludGVnZXIiLAogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAidGhlIHVzZXIgaWQiLAogICAgICAgICAgICAibmFtZSI6ICJpZCIsCiAgICAgICAgICAgICJpbiI6ICJwYXRoIiwKICAgICAgICAgICAgInJlcXVpcmVkIjogdHJ1ZQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogInRoZSB1cGRhdGVkIHVzZXIiLAogICAgICAgICAgICAibmFtZSI6ICJib2R5IiwKICAgICAgICAgICAgImluIjogImJvZHkiLAogICAgICAgICAgICAicmVxdWlyZWQiOiB0cnVlLAogICAgICAgICAgICAic2NoZW1hIjogewogICAgICAgICAgICAgICIkcmVmIjogIiMvZGVmaW5pdGlvbnMvVXNlciIKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgInJlc3BvbnNlcyI6IHsKICAgICAgICAgICIyMDAiOiB7CiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJPayIsCiAgICAgICAgICAgICJzY2hlbWEiOiB7CiAgICAgICAgICAgICAgIiRyZWYiOiAiIy9kZWZpbml0aW9ucy9Vc2VyIgogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgIjQwMSI6IHsKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuYXV0aG9yaXplZCIsCiAgICAgICAgICAgICJzY2hlbWEiOiB7CiAgICAgICAgICAgICAgIiRyZWYiOiAiIy9kZWZpbml0aW9ucy9FcnJvciIKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgICI0MDMiOiB7CiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJGb3JiaWRkZW4iLAogICAgICAgICAgICAic2NoZW1hIjogewogICAgICAgICAgICAgICIkcmVmIjogIiMvZGVmaW5pdGlvbnMvRXJyb3IiCiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0sCiAgICAgICJkZWxldGUiOiB7CiAgICAgICAgInNlY3VyaXR5IjogWwogICAgICAgICAgewogICAgICAgICAgICAiY2xpZW50VG9rZW5IZWFkZXIiOiBbXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImNsaWVudFRva2VuUXVlcnkiOiBbXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgImJhc2ljQXV0aCI6IFtdCiAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicHJvZHVjZXMiOiBbCiAgICAgICAgICAiYXBwbGljYXRpb24vanNvbiIKICAgICAgICBdLAogICAgICAgICJ0YWdzIjogWwogICAgICAgICAgInVzZXIiCiAgICAgICAgXSwKICAgICAgICAic3VtbWFyeSI6ICJEZWxldGVzIGEgdXNlci4iLAogICAgICAgICJvcGVyYXRpb25JZCI6ICJkZWxldGVVc2VyIiwKICAgICAgICAicGFyYW1ldGVycyI6IFsKICAgICAgICAgIHsKICAgICAgICAgICAgInR5cGUiOiAiaW50ZWdlciIsCiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJ0aGUgdXNlciBpZCIsCiAgICAgICAgICAgICJuYW1lIjogImlkIiwKICAgICAgICAgICAgImluIjogInBhdGgiLAogICAgICAgICAgICAicmVxdWlyZWQiOiB0cnVlCiAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicmVzcG9uc2VzIjogewogICAgICAgICAgIjIwMCI6IHsKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIk9rIgogICAgICAgICAgfSwKICAgICAgICAgICI0MDEiOiB7CiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmF1dGhvcml6ZWQiLAogICAgICAgICAgICAic2NoZW1hIjogewogICAgICAgICAgICAgICIkcmVmIjogIiMvZGVmaW5pdGlvbnMvRXJyb3IiCiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICAiNDAzIjogewogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiRm9yYmlkZGVuIiwKICAgICAgICAgICAgInNjaGVtYSI6IHsKICAgICAgICAgICAgICAiJHJlZiI6ICIjL2RlZmluaXRpb25zL0Vycm9yIgogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgIi92ZXJzaW9uIjogewogICAgICAiZ2V0IjogewogICAgICAgICJwcm9kdWNlcyI6IFsKICAgICAgICAgICJhcHBsaWNhdGlvbi9qc29uIgogICAgICAgIF0sCiAgICAgICAgInRhZ3MiOiBbCiAgICAgICAgICAidmVyc2lvbiIKICAgICAgICBdLAogICAgICAgICJzdW1tYXJ5IjogIkdldCB2ZXJzaW9uIGluZm9ybWF0aW9uLiIsCiAgICAgICAgIm9wZXJhdGlvbklkIjogImdldFZlcnNpb24iLAogICAgICAgICJyZXNwb25zZXMiOiB7CiAgICAgICAgICAiMjAwIjogewogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiT2siLAogICAgICAgICAgICAic2NoZW1hIjogewogICAgICAgICAgICAgICIkcmVmIjogIiMvZGVmaW5pdGlvbnMvVmVyc2lvbkluZm8iCiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9LAogICJkZWZpbml0aW9ucyI6IHsKICAgICJBcHBsaWNhdGlvbiI6IHsKICAgICAgImRlc2NyaXB0aW9uIjogIlRoZSBBcHBsaWNhdGlvbiBob2xkcyBpbmZvcm1hdGlvbiBhYm91dCBhbiBhcHAgd2hpY2ggY2FuIHNlbmQgbm90aWZpY2F0aW9ucy4iLAogICAgICAidHlwZSI6ICJvYmplY3QiLAogICAgICAidGl0bGUiOiAiQXBwbGljYXRpb24gTW9kZWwiLAogICAgICAicHJvcGVydGllcyI6IHsKICAgICAgICAiZGVzY3JpcHRpb24iOiB7CiAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAogICAgICAgICAgIngtZ28tbmFtZSI6ICJEZXNjcmlwdGlvbiIKICAgICAgICB9LAogICAgICAgICJpZCI6IHsKICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCiAgICAgICAgICAieC1nby1uYW1lIjogIklEIgogICAgICAgIH0sCiAgICAgICAgIm5hbWUiOiB7CiAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAogICAgICAgICAgIngtZ28tbmFtZSI6ICJOYW1lIgogICAgICAgIH0KICAgICAgfSwKICAgICAgIngtZ28tcGFja2FnZSI6ICJnaXRodWIuY29tL2dvdGlmeS9zZXJ2ZXIvbW9kZWwiCiAgICB9LAogICAgIkNsaWVudCI6IHsKICAgICAgImRlc2NyaXB0aW9uIjogIlRoZSBDbGllbnQgaG9sZHMgaW5mb3JtYXRpb24gYWJvdXQgYSBkZXZpY2Ugd2hpY2ggY2FuIHJlY2VpdmUgbm90aWZpY2F0aW9ucyAoYW5kIG90aGVyIHN0dWZmKS4iLAogICAgICAidHlwZSI6ICJvYmplY3QiLAogICAgICAidGl0bGUiOiAiQ2xpZW50IE1vZGVsIiwKICAgICAgInByb3BlcnRpZXMiOiB7CiAgICAgICAgImlkIjogewogICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKICAgICAgICAgICJ4LWdvLW5hbWUiOiAiSUQiCiAgICAgICAgfSwKICAgICAgICAibmFtZSI6IHsKICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCiAgICAgICAgICAieC1nby1uYW1lIjogIk5hbWUiCiAgICAgICAgfQogICAgICB9LAogICAgICAieC1nby1wYWNrYWdlIjogImdpdGh1Yi5jb20vZ290aWZ5L3NlcnZlci9tb2RlbCIKICAgIH0sCiAgICAiRXJyb3IiOiB7CiAgICAgICJkZXNjcmlwdGlvbiI6ICJUaGUgRXJyb3IgY29udGFpbnMgZXJyb3IgcmVsZXZhbnQgaW5mb3JtYXRpb24uIiwKICAgICAgInR5cGUiOiAib2JqZWN0IiwKICAgICAgInRpdGxlIjogIkVycm9yIE1vZGVsIiwKICAgICAgInByb3BlcnRpZXMiOiB7CiAgICAgICAgImVycm9yIjogewogICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKICAgICAgICAgICJ4LWdvLW5hbWUiOiAiRXJyb3IiCiAgICAgICAgfSwKICAgICAgICAiZXJyb3JDb2RlIjogewogICAgICAgICAgInR5cGUiOiAiaW50ZWdlciIsCiAgICAgICAgICAiZm9ybWF0IjogImludDY0IiwKICAgICAgICAgICJ4LWdvLW5hbWUiOiAiRXJyb3JDb2RlIgogICAgICAgIH0sCiAgICAgICAgImVycm9yRGVzY3JpcHRpb24iOiB7CiAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAogICAgICAgICAgIngtZ28tbmFtZSI6ICJFcnJvckRlc2NyaXB0aW9uIgogICAgICAgIH0KICAgICAgfSwKICAgICAgIngtZ28tcGFja2FnZSI6ICJnaXRodWIuY29tL2dvdGlmeS9zZXJ2ZXIvbW9kZWwiCiAgICB9LAogICAgIk1lc3NhZ2UiOiB7CiAgICAgICJkZXNjcmlwdGlvbiI6ICJUaGUgTWVzc2FnZSBob2xkcyBpbmZvcm1hdGlvbiBhYm91dCBhIG1lc3NhZ2Ugd2hpY2ggd2FzIHNlbnQgYnkgYW4gQXBwbGljYXRpb24uIiwKICAgICAgInR5cGUiOiAib2JqZWN0IiwKICAgICAgInRpdGxlIjogIk1lc3NhZ2UgTW9kZWwiLAogICAgICAicHJvcGVydGllcyI6IHsKICAgICAgICAiYXBwaWQiOiB7CiAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAogICAgICAgICAgIngtZ28tbmFtZSI6ICJBcHBsaWNhdGlvbklEIgogICAgICAgIH0sCiAgICAgICAgImRhdGUiOiB7CiAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAogICAgICAgICAgImZvcm1hdCI6ICJkYXRlLXRpbWUiLAogICAgICAgICAgIngtZ28tbmFtZSI6ICJEYXRlIgogICAgICAgIH0sCiAgICAgICAgImlkIjogewogICAgICAgICAgInR5cGUiOiAiaW50ZWdlciIsCiAgICAgICAgICAiZm9ybWF0IjogInVpbnQ2NCIsCiAgICAgICAgICAieC1nby1uYW1lIjogIklEIgogICAgICAgIH0sCiAgICAgICAgIm1lc3NhZ2UiOiB7CiAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAogICAgICAgICAgIngtZ28tbmFtZSI6ICJNZXNzYWdlIgogICAgICAgIH0sCiAgICAgICAgInByaW9yaXR5IjogewogICAgICAgICAgInR5cGUiOiAiaW50ZWdlciIsCiAgICAgICAgICAiZm9ybWF0IjogImludDY0IiwKICAgICAgICAgICJ4LWdvLW5hbWUiOiAiUHJpb3JpdHkiCiAgICAgICAgfSwKICAgICAgICAidGl0bGUiOiB7CiAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAogICAgICAgICAgIngtZ28tbmFtZSI6ICJUaXRsZSIKICAgICAgICB9CiAgICAgIH0sCiAgICAgICJ4LWdvLXBhY2thZ2UiOiAiZ2l0aHViLmNvbS9nb3RpZnkvc2VydmVyL21vZGVsIgogICAgfSwKICAgICJVc2VyIjogewogICAgICAiZGVzY3JpcHRpb24iOiAiVGhlIFVzZXIgaG9sZHMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNyZWRlbnRpYWxzIGFuZCBvdGhlciBzdHVmZi4iLAogICAgICAidHlwZSI6ICJvYmplY3QiLAogICAgICAidGl0bGUiOiAiVXNlckV4dGVybmFsIE1vZGVsIiwKICAgICAgInByb3BlcnRpZXMiOiB7CiAgICAgICAgImFkbWluIjogewogICAgICAgICAgInR5cGUiOiAiYm9vbGVhbiIsCiAgICAgICAgICAieC1nby1uYW1lIjogIkFkbWluIgogICAgICAgIH0sCiAgICAgICAgImlkIjogewogICAgICAgICAgInR5cGUiOiAiaW50ZWdlciIsCiAgICAgICAgICAiZm9ybWF0IjogInVpbnQ2NCIsCiAgICAgICAgICAieC1nby1uYW1lIjogIklEIgogICAgICAgIH0sCiAgICAgICAgIm5hbWUiOiB7CiAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAogICAgICAgICAgIngtZ28tbmFtZSI6ICJOYW1lIgogICAgICAgIH0sCiAgICAgICAgInBhc3MiOiB7CiAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAogICAgICAgICAgIngtZ28tbmFtZSI6ICJQYXNzIgogICAgICAgIH0KICAgICAgfSwKICAgICAgIngtZ28tbmFtZSI6ICJVc2VyRXh0ZXJuYWwiLAogICAgICAieC1nby1wYWNrYWdlIjogImdpdGh1Yi5jb20vZ290aWZ5L3NlcnZlci9tb2RlbCIKICAgIH0sCiAgICAiVmVyc2lvbkluZm8iOiB7CiAgICAgICJkZXNjcmlwdGlvbiI6ICJWZXJzaW9uSW5mbyBNb2RlbCIsCiAgICAgICJ0eXBlIjogIm9iamVjdCIsCiAgICAgICJwcm9wZXJ0aWVzIjogewogICAgICAgICJicmFuY2giOiB7CiAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAogICAgICAgICAgIngtZ28tbmFtZSI6ICJCcmFuY2giCiAgICAgICAgfSwKICAgICAgICAiYnVpbGREYXRlIjogewogICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKICAgICAgICAgICJ4LWdvLW5hbWUiOiAiQnVpbGREYXRlIgogICAgICAgIH0sCiAgICAgICAgImNvbW1pdCI6IHsKICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCiAgICAgICAgICAieC1nby1uYW1lIjogIkNvbW1pdCIKICAgICAgICB9LAogICAgICAgICJ2ZXJzaW9uIjogewogICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKICAgICAgICAgICJ4LWdvLW5hbWUiOiAiVmVyc2lvbiIKICAgICAgICB9CiAgICAgIH0sCiAgICAgICJ4LWdvLXBhY2thZ2UiOiAiZ2l0aHViLmNvbS9nb3RpZnkvc2VydmVyL21vZGVsIgogICAgfQogIH0sCiAgInNlY3VyaXR5RGVmaW5pdGlvbnMiOiB7CiAgICAiYXBwVG9rZW5IZWFkZXIiOiB7CiAgICAgICJ0eXBlIjogImFwaUtleSIsCiAgICAgICJuYW1lIjogIlgtR290aWZ5LUtleSIsCiAgICAgICJpbiI6ICJoZWFkZXIiCiAgICB9LAogICAgImFwcFRva2VuUXVlcnkiOiB7CiAgICAgICJ0eXBlIjogImFwaUtleSIsCiAgICAgICJuYW1lIjogInRva2VuIiwKICAgICAgImluIjogInF1ZXJ5IgogICAgfSwKICAgICJiYXNpY0F1dGgiOiB7CiAgICAgICJ0eXBlIjogImJhc2ljIgogICAgfSwKICAgICJjbGllbnRUb2tlbkhlYWRlciI6IHsKICAgICAgInR5cGUiOiAiYXBpS2V5IiwKICAgICAgIm5hbWUiOiAiWC1Hb3RpZnktS2V5IiwKICAgICAgImluIjogImhlYWRlciIKICAgIH0sCiAgICAiY2xpZW50VG9rZW5RdWVyeSI6IHsKICAgICAgInR5cGUiOiAiYXBpS2V5IiwKICAgICAgIm5hbWUiOiAidG9rZW4iLAogICAgICAiaW4iOiAicXVlcnkiCiAgICB9CiAgfQp9\"") + packr.PackJSONBytes("./", "swagger.go", "\"cGFja2FnZSBkb2NzDQoNCmltcG9ydCAoDQoJImdpdGh1Yi5jb20vZ2luLWdvbmljL2dpbiINCgkiZ2l0aHViLmNvbS9nb2J1ZmZhbG8vcGFja3IiDQoJInN0cmluZ3MiDQopDQoNCi8vIFNlcnZlIHNlcnZlcyB0aGUgZG9jdW1lbnRhdGlvbi4NCmZ1bmMgU2VydmUoY3R4ICpnaW4uQ29udGV4dCkgew0KCWN0eC5Xcml0ZXIuV3JpdGVTdHJpbmcoZ2V0KGN0eC5SZXF1ZXN0LlVSTC5Ib3N0KSkNCn0NCg0KZnVuYyBnZXQoaG9zdCBzdHJpbmcpIHN0cmluZyB7DQoJYm94IDo9IHBhY2tyLk5ld0JveCgiLi8iKQ0KCXJldHVybiBzdHJpbmdzLlJlcGxhY2UoYm94LlN0cmluZygic3BlYy5qc29uIiksICJsb2NhbGhvc3QiLCBob3N0LCAxKQ0KfQ0K\"") } diff --git a/docs/spec.json b/docs/spec.json index 6b12561..8b5cd93 100644 --- a/docs/spec.json +++ b/docs/spec.json @@ -1024,6 +1024,26 @@ } } } + }, + "/version": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "version" + ], + "summary": "Get version information.", + "operationId": "getVersion", + "responses": { + "200": { + "description": "Ok", + "schema": { + "$ref": "#/definitions/VersionInfo" + } + } + } + } } }, "definitions": { @@ -1144,6 +1164,29 @@ }, "x-go-name": "UserExternal", "x-go-package": "github.com/gotify/server/model" + }, + "VersionInfo": { + "description": "VersionInfo Model", + "type": "object", + "properties": { + "branch": { + "type": "string", + "x-go-name": "Branch" + }, + "buildDate": { + "type": "string", + "x-go-name": "BuildDate" + }, + "commit": { + "type": "string", + "x-go-name": "Commit" + }, + "version": { + "type": "string", + "x-go-name": "Version" + } + }, + "x-go-package": "github.com/gotify/server/model" } }, "securityDefinitions": { diff --git a/model/version.go b/model/version.go new file mode 100644 index 0000000..93725de --- /dev/null +++ b/model/version.go @@ -0,0 +1,12 @@ +package model + +// VersionInfo Model +// +// swagger:model VersionInfo +type VersionInfo struct { + Version string `json:"version"` + Commit string `json:"commit"` + BuildDate string `json:"buildDate"` + Branch string `json:"branch"` +} + diff --git a/router/router.go b/router/router.go index 84a6098..b8391c8 100644 --- a/router/router.go +++ b/router/router.go @@ -14,10 +14,11 @@ import ( "github.com/gotify/server/docs" "github.com/gotify/server/stream" + "github.com/gotify/server/model" ) // Create creates the gin engine with all routes. -func Create(db *database.GormDatabase) (*gin.Engine, func()) { +func Create(db *database.GormDatabase, vInfo *model.VersionInfo) (*gin.Engine, func()) { streamHandler := stream.New(200*time.Second, 15*time.Second) authentication := auth.Auth{DB: db} messageHandler := api.MessageAPI{Notifier: streamHandler, DB: db} @@ -36,6 +37,22 @@ func Create(db *database.GormDatabase) (*gin.Engine, func()) { ctx.Header("Content-Type", "application/json") }) + // swagger:operation GET /version version getVersion + // + // Get version information. + // + // --- + // produces: + // - application/json + // responses: + // 200: + // description: Ok + // schema: + // $ref: "#/definitions/VersionInfo" + g.GET("version", func(ctx *gin.Context) { + ctx.JSON(200, vInfo) + }) + // swagger:operation POST /message message createMessage // // Create a message. diff --git a/router/router_test.go b/router/router_test.go index b22c966..6073a20 100644 --- a/router/router_test.go +++ b/router/router_test.go @@ -38,7 +38,7 @@ func (s *IntegrationSuite) BeforeTest(string, string) { var err error s.db, err = database.New("sqlite3", "itest.db", "admin", "pw") assert.Nil(s.T(), err) - g, closable := Create(s.db) + g, closable := Create(s.db, &model.VersionInfo{Version:"1.0.0", BuildDate:"2018-02-20-17:30:47", Branch:"master", Commit:"asdasds"}) s.closable = closable s.server = httptest.NewServer(g) } @@ -50,6 +50,12 @@ func (s *IntegrationSuite) AfterTest(string, string) { s.server.Close() } +func (s *IntegrationSuite) TestVersionInfo() { + req := s.newRequest("GET", "version", "") + + doRequestAndExpect(s.T(), req, 200, `{"version":"1.0.0", "commit":"asdasds", "buildDate":"2018-02-20-17:30:47", "branch":"master"}`) +} + func (s *IntegrationSuite) TestSendMessage() { req := s.newRequest("POST", "application", `{"name": "backup-server"}`) req.SetBasicAuth("admin", "pw")