diff --git a/catalog/ocs.yaml b/catalog/ocs.yaml index 2cb1cdd42..a1616ab02 100644 --- a/catalog/ocs.yaml +++ b/catalog/ocs.yaml @@ -1,5 +1,5 @@ --- -image: quay.io/ocs-dev/ocs-operator-bundle:main-34fff28 +image: quay.io/ocs-dev/ocs-operator-bundle:main-b18b234 name: ocs-operator.v4.17.0 package: ocs-operator properties: @@ -58,7 +58,7 @@ properties: data: eyJhcGlWZXJzaW9uIjoicmJhYy5hdXRob3JpemF0aW9uLms4cy5pby92MSIsImtpbmQiOiJDbHVzdGVyUm9sZSIsIm1ldGFkYXRhIjp7Im5hbWUiOiJrOHMtbWV0cmljcy1zbS1wcm9tZXRoZXVzLWs4cyJ9LCJydWxlcyI6W3siYXBpR3JvdXBzIjpbIiJdLCJyZXNvdXJjZXMiOlsibm9kZXMvbWV0cmljcyJdLCJ2ZXJicyI6WyJnZXQiXX0seyJub25SZXNvdXJjZVVSTHMiOlsiL21ldHJpY3MiXSwidmVyYnMiOlsiZ2V0Il19LHsiYXBpR3JvdXBzIjpbImF1dGhlbnRpY2F0aW9uLms4cy5pbyJdLCJyZXNvdXJjZXMiOlsidG9rZW5yZXZpZXdzIl0sInZlcmJzIjpbImNyZWF0ZSJdfSx7ImFwaUdyb3VwcyI6WyJhdXRob3JpemF0aW9uLms4cy5pbyJdLCJyZXNvdXJjZXMiOlsic3ViamVjdGFjY2Vzc3Jldmlld3MiXSwidmVyYnMiOlsiY3JlYXRlIl19LHsiYXBpR3JvdXBzIjpbIiJdLCJyZXNvdXJjZXMiOlsibmFtZXNwYWNlcyJdLCJ2ZXJicyI6WyJnZXQiXX0seyJhcGlHcm91cHMiOlsic2VjdXJpdHkub3BlbnNoaWZ0LmlvIl0sInJlc291cmNlTmFtZXMiOlsibm9ucm9vdCJdLCJyZXNvdXJjZXMiOlsic2VjdXJpdHljb250ZXh0Y29uc3RyYWludHMiXSwidmVyYnMiOlsidXNlIl19LHsiYXBpR3JvdXBzIjpbIiJdLCJyZXNvdXJjZXMiOlsicG9kcyIsImVuZHBvaW50cyIsInNlcnZpY2VzIl0sInZlcmJzIjpbImxpc3QiLCJ3YXRjaCIsImdldCJdfV19 - type: olm.bundle.object value: - data: eyJhcGlWZXJzaW9uIjoib3BlcmF0b3JzLmNvcmVvcy5jb20vdjFhbHBoYTEiLCJraW5kIjoiQ2x1c3RlclNlcnZpY2VWZXJzaW9uIiwibWV0YWRhdGEiOnsiYW5ub3RhdGlvbnMiOnsiYWxtLWV4YW1wbGVzIjoiXG5bXG4gICAge1xuICAgICAgICBcImFwaVZlcnNpb25cIjogXCJvY3Mub3BlbnNoaWZ0LmlvL3YxXCIsXG4gICAgICAgIFwia2luZFwiOiBcIlN0b3JhZ2VDbHVzdGVyXCIsXG4gICAgICAgIFwibWV0YWRhdGFcIjoge1xuICAgICAgICAgICAgXCJuYW1lXCI6IFwiZXhhbXBsZS1zdG9yYWdlY2x1c3RlclwiLFxuICAgICAgICAgICAgXCJuYW1lc3BhY2VcIjogXCJvcGVuc2hpZnQtc3RvcmFnZVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwic3BlY1wiOiB7XG4gICAgICAgICAgICBcIm1hbmFnZU5vZGVzXCI6IGZhbHNlLFxuICAgICAgICAgICAgXCJtb25QVkNUZW1wbGF0ZVwiOiB7XG4gICAgICAgICAgICAgICAgXCJzcGVjXCI6IHtcbiAgICAgICAgICAgICAgICAgICAgXCJhY2Nlc3NNb2Rlc1wiOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlJlYWRXcml0ZU9uY2VcIlxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICBcInJlc291cmNlc1wiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBcInJlcXVlc3RzXCI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInN0b3JhZ2VcIjogXCIxMEdpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgXCJzdG9yYWdlQ2xhc3NOYW1lXCI6IFwiZ3AyLWNzaVwiXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFwic3RvcmFnZURldmljZVNldHNcIjogW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgXCJjb3VudFwiOiAzLFxuICAgICAgICAgICAgICAgICAgICBcImRhdGFQVkNUZW1wbGF0ZVwiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBcInNwZWNcIjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYWNjZXNzTW9kZXNcIjogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlJlYWRXcml0ZU9uY2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJyZXNvdXJjZXNcIjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInJlcXVlc3RzXCI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic3RvcmFnZVwiOiBcIjFUaVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic3RvcmFnZUNsYXNzTmFtZVwiOiBcImdwMi1jc2lcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInZvbHVtZU1vZGVcIjogXCJCbG9ja1wiXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIFwibmFtZVwiOiBcImV4YW1wbGUtZGV2aWNlc2V0XCIsXG4gICAgICAgICAgICAgICAgICAgIFwicGxhY2VtZW50XCI6IHt9LFxuICAgICAgICAgICAgICAgICAgICBcInBvcnRhYmxlXCI6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIFwicmVzb3VyY2VzXCI6IHt9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXVxuICAgICAgICB9XG4gICAgfVxuXSIsImNhcGFiaWxpdGllcyI6IkRlZXAgSW5zaWdodHMiLCJjYXRlZ29yaWVzIjoiU3RvcmFnZSIsImNvbnRhaW5lckltYWdlIjoicXVheS5pby9vY3MtZGV2L29jcy1vcGVyYXRvcjptYWluLTM0ZmZmMjgiLCJkZXNjcmlwdGlvbiI6IlJlZCBIYXQgT3BlblNoaWZ0IENvbnRhaW5lciBTdG9yYWdlIHByb3ZpZGVzIGh5cGVyY29udmVyZ2VkIHN0b3JhZ2UgZm9yIGFwcGxpY2F0aW9ucyB3aXRoaW4gYW4gT3BlblNoaWZ0IGNsdXN0ZXIuIiwiZXh0ZXJuYWwuZmVhdHVyZXMub2NzLm9wZW5zaGlmdC5pby9zdXBwb3J0ZWQtcGxhdGZvcm1zIjoiW1wiQmFyZU1ldGFsXCIsIFwiTm9uZVwiLCBcIlZTcGhlcmVcIiwgXCJPcGVuU3RhY2tcIiwgXCJvVmlydFwiXSIsImV4dGVybmFsLmZlYXR1cmVzLm9jcy5vcGVuc2hpZnQuaW8vdmFsaWRhdGlvbiI6IntcInNlY3JldHNcIjpbXCJyb29rLWNlcGgtb3BlcmF0b3ItY3JlZHNcIiwgXCJyb29rLWNzaS1yYmQtbm9kZVwiLCBcInJvb2stY3NpLXJiZC1wcm92aXNpb25lclwiXSwgXCJjb25maWdNYXBzXCI6IFtcInJvb2stY2VwaC1tb24tZW5kcG9pbnRzXCIsIFwicm9vay1jZXBoLW1vblwiXSwgXCJzdG9yYWdlQ2xhc3Nlc1wiOiBbXCJjZXBoLXJiZFwiXSwgXCJjZXBoQ2x1c3RlcnNcIjogW1wibW9uaXRvcmluZy1lbmRwb2ludFwiXX0iLCJmZWF0dXJlcy5vY3Mub3BlbnNoaWZ0LmlvL2Rpc2FibGVkIjoiW1wic3MtbGlzdFwiLCBcImluc3RhbGwtd2l6YXJkXCIsIFwiYmxvY2stcG9vbFwiLCBcIm1jZy1yZXNvdXJjZVwiLCBcIm9kZi1kYXNoYm9hcmRcIiwgXCJjb21tb25cIiwgXCJzdG9yYWdlLXByb3ZpZGVyXCIsIFwic3RvcmFnZS1wcm92aXNpb25lclwiLCBcImRhc2hib2FyZC1yZXNvdXJjZXNcIiwgXCJjc3YtYWN0aW9uc1wiLCBcImludmVudG9yeS1pdGVtXCIsIFwiYWxlcnQtYWN0aW9uc1wiXSIsImZlYXR1cmVzLm9jcy5vcGVuc2hpZnQuaW8vZW5hYmxlZCI6IltcImttc1wiLCBcImFyYml0ZXJcIiwgXCJmbGV4aWJsZS1zY2FsaW5nXCIsIFwibXVsdHVzXCIsIFwicG9vbC1tYW5hZ2VtZW50XCIsIFwibmFtZXNwYWNlLXN0b3JlXCIsIFwibWNnLXN0YW5kYWxvbmVcIiwgXCJ0YWludC1ub2Rlc1wiLCBcInZhdWx0LXNhLWttc1wiLCBcImhwY3Mta21zXCJdIiwib2xtLnNraXBSYW5nZSI6Ilx1MDAzZT0wLjAuMSBcdTAwM2M0LjE3LjAiLCJvcGVyYXRvcmZyYW1ld29yay5pby9pbml0aWFsaXphdGlvbi1yZXNvdXJjZSI6IlxuICAgIHtcbiAgICAgICAgXCJhcGlWZXJzaW9uXCI6IFwib2NzLm9wZW5zaGlmdC5pby92MVwiLFxuICAgICAgICBcImtpbmRcIjogXCJTdG9yYWdlQ2x1c3RlclwiLFxuICAgICAgICBcIm1ldGFkYXRhXCI6IHtcbiAgICAgICAgICAgIFwibmFtZVwiOiBcImV4YW1wbGUtc3RvcmFnZWNsdXN0ZXJcIixcbiAgICAgICAgICAgIFwibmFtZXNwYWNlXCI6IFwib3BlbnNoaWZ0LXN0b3JhZ2VcIlxuICAgICAgICB9LFxuICAgICAgICBcInNwZWNcIjoge1xuICAgICAgICAgICAgXCJtYW5hZ2VOb2Rlc1wiOiBmYWxzZSxcbiAgICAgICAgICAgIFwibW9uUFZDVGVtcGxhdGVcIjoge1xuICAgICAgICAgICAgICAgIFwic3BlY1wiOiB7XG4gICAgICAgICAgICAgICAgICAgIFwiYWNjZXNzTW9kZXNcIjogW1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJSZWFkV3JpdGVPbmNlXCJcbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgXCJyZXNvdXJjZXNcIjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJyZXF1ZXN0c1wiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzdG9yYWdlXCI6IFwiMTBHaVwiXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIFwic3RvcmFnZUNsYXNzTmFtZVwiOiBcImdwMi1jc2lcIlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBcInN0b3JhZ2VEZXZpY2VTZXRzXCI6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIFwiY291bnRcIjogMyxcbiAgICAgICAgICAgICAgICAgICAgXCJkYXRhUFZDVGVtcGxhdGVcIjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJzcGVjXCI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImFjY2Vzc01vZGVzXCI6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJSZWFkV3JpdGVPbmNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicmVzb3VyY2VzXCI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJyZXF1ZXN0c1wiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInN0b3JhZ2VcIjogXCIxVGlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInN0b3JhZ2VDbGFzc05hbWVcIjogXCJncDItY3NpXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ2b2x1bWVNb2RlXCI6IFwiQmxvY2tcIlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBcIm5hbWVcIjogXCJleGFtcGxlLWRldmljZXNldFwiLFxuICAgICAgICAgICAgICAgICAgICBcInBsYWNlbWVudFwiOiB7fSxcbiAgICAgICAgICAgICAgICAgICAgXCJwb3J0YWJsZVwiOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBcInJlc291cmNlc1wiOiB7fVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgfVxuICAgIH1cblx0Iiwib3BlcmF0b3JmcmFtZXdvcmsuaW8vc3VnZ2VzdGVkLW5hbWVzcGFjZSI6Im9wZW5zaGlmdC1zdG9yYWdlIiwib3BlcmF0b3JzLm9wZW5zaGlmdC5pby9pbmZyYXN0cnVjdHVyZS1mZWF0dXJlcyI6IltcImRpc2Nvbm5lY3RlZFwiXSIsIm9wZXJhdG9ycy5vcGVyYXRvcmZyYW1ld29yay5pby9idWlsZGVyIjoib3BlcmF0b3Itc2RrLXYxLjI1LjQiLCJvcGVyYXRvcnMub3BlcmF0b3JmcmFtZXdvcmsuaW8vaW50ZXJuYWwtb2JqZWN0cyI6IltcIm9jc2luaXRpYWxpemF0aW9ucy5vY3Mub3BlbnNoaWZ0LmlvXCIsXCJzdG9yYWdlY29uc3VtZXJzLm9jcy5vcGVuc2hpZnQuaW9cIixcInN0b3JhZ2Vwcm9maWxlcy5vY3Mub3BlbnNoaWZ0LmlvXCIsXCJzdG9yYWdlcmVxdWVzdHMub2NzLm9wZW5zaGlmdC5pb1wiXSIsIm9wZXJhdG9ycy5vcGVyYXRvcmZyYW1ld29yay5pby9vcGVyYXRvci10eXBlIjoibm9uLXN0YW5kYWxvbmUiLCJvcGVyYXRvcnMub3BlcmF0b3JmcmFtZXdvcmsuaW8vcHJvamVjdF9sYXlvdXQiOiJnby5rdWJlYnVpbGRlci5pby92MyIsInJlcG9zaXRvcnkiOiJodHRwczovL2dpdGh1Yi5jb20vcmVkLWhhdC1zdG9yYWdlL29jcy1vcGVyYXRvciIsInN1cHBvcnQiOiJSZWQgSGF0In0sImxhYmVscyI6eyJvcGVyYXRvcmZyYW1ld29yay5pby9hcmNoLmFtZDY0Ijoic3VwcG9ydGVkIiwib3BlcmF0b3JmcmFtZXdvcmsuaW8vYXJjaC5wcGM2NGxlIjoic3VwcG9ydGVkIiwib3BlcmF0b3JmcmFtZXdvcmsuaW8vYXJjaC5zMzkweCI6InN1cHBvcnRlZCJ9LCJuYW1lIjoib2NzLW9wZXJhdG9yLnY0LjE3LjAiLCJuYW1lc3BhY2UiOiJwbGFjZWhvbGRlciJ9LCJzcGVjIjp7ImFwaXNlcnZpY2VkZWZpbml0aW9ucyI6e30sImNsZWFudXAiOnsiZW5hYmxlZCI6ZmFsc2V9LCJjdXN0b21yZXNvdXJjZWRlZmluaXRpb25zIjp7Im93bmVkIjpbeyJkZXNjcmlwdGlvbiI6Ik9DU0luaXRpYWxpemF0aW9uIHJlcHJlc2VudHMgdGhlIGluaXRpYWwgZGF0YSB0byBiZSBjcmVhdGVkIHdoZW4gdGhlIG9wZXJhdG9yIGlzIGluc3RhbGxlZC4iLCJkaXNwbGF5TmFtZSI6Ik9DUyBJbml0aWFsaXphdGlvbiIsImtpbmQiOiJPQ1NJbml0aWFsaXphdGlvbiIsIm5hbWUiOiJvY3Npbml0aWFsaXphdGlvbnMub2NzLm9wZW5zaGlmdC5pbyIsInZlcnNpb24iOiJ2MSJ9LHsiZGVzY3JpcHRpb24iOiJTdG9yYWdlQ2x1c3RlciByZXByZXNlbnRzIGEgY2x1c3RlciBpbmNsdWRpbmcgQ2VwaCBDbHVzdGVyLCBOb29CYWEgYW5kIGFsbCB0aGUgc3RvcmFnZSBhbmQgY29tcHV0ZSByZXNvdXJjZXMgcmVxdWlyZWQuIiwiZGlzcGxheU5hbWUiOiJTdG9yYWdlIENsdXN0ZXIiLCJraW5kIjoiU3RvcmFnZUNsdXN0ZXIiLCJuYW1lIjoic3RvcmFnZWNsdXN0ZXJzLm9jcy5vcGVuc2hpZnQuaW8iLCJyZXNvdXJjZXMiOlt7ImtpbmQiOiJDZXBoQ2x1c3RlciIsIm5hbWUiOiJjZXBoY2x1c3RlcnMuY2VwaC5yb29rLmlvIiwidmVyc2lvbiI6InYxIn0seyJraW5kIjoiTm9vQmFhIiwibmFtZSI6Im5vb2JhYXMubm9vYmFhLmlvIiwidmVyc2lvbiI6InYxYWxwaGExIn1dLCJ2ZXJzaW9uIjoidjEifSx7ImRlc2NyaXB0aW9uIjoiU3RvcmFnZUNvbnN1bWVyIGlzIHRoZSBTY2hlbWEgZm9yIHRoZSBzdG9yYWdlY29uc3VtZXJzIEFQSSIsImRpc3BsYXlOYW1lIjoiU3RvcmFnZSBDb25zdW1lciIsImtpbmQiOiJTdG9yYWdlQ29uc3VtZXIiLCJuYW1lIjoic3RvcmFnZWNvbnN1bWVycy5vY3Mub3BlbnNoaWZ0LmlvIiwidmVyc2lvbiI6InYxYWxwaGExIn0seyJkZXNjcmlwdGlvbiI6IlN0b3JhZ2VQcm9maWxlIGlzIHRoZSBTY2hlbWEgZm9yIHRoZSBzdG9yYWdlcHJvZmlsZXMgQVBJIiwiZGlzcGxheU5hbWUiOiJTdG9yYWdlIFByb2ZpbGUiLCJraW5kIjoiU3RvcmFnZVByb2ZpbGUiLCJuYW1lIjoic3RvcmFnZXByb2ZpbGVzLm9jcy5vcGVuc2hpZnQuaW8iLCJ2ZXJzaW9uIjoidjEifSx7ImRlc2NyaXB0aW9uIjoiU3RvcmFnZVJlcXVlc3QgaXMgdGhlIFNjaGVtYSBmb3IgdGhlIFN0b3JhZ2VSZXF1ZXN0cyBBUEkiLCJkaXNwbGF5TmFtZSI6IlN0b3JhZ2UgUmVxdWVzdCIsImtpbmQiOiJTdG9yYWdlUmVxdWVzdCIsIm5hbWUiOiJzdG9yYWdlcmVxdWVzdHMub2NzLm9wZW5zaGlmdC5pbyIsInZlcnNpb24iOiJ2MWFscGhhMSJ9XX0sImRlc2NyaXB0aW9uIjoiKipSZWQgSGF0IE9wZW5TaGlmdCBDb250YWluZXIgU3RvcmFnZSoqIGRlcGxveXMgdGhyZWUgb3BlcmF0b3JzLlxuXG4jIyMgT3BlblNoaWZ0IENvbnRhaW5lciBTdG9yYWdlIG9wZXJhdG9yXG5cblRoZSBPcGVuU2hpZnQgQ29udGFpbmVyIFN0b3JhZ2Ugb3BlcmF0b3IgaXMgdGhlIHByaW1hcnkgb3BlcmF0b3IgZm9yIE9wZW5TaGlmdCBDb250YWluZXIgU3RvcmFnZS4gSXQgc2VydmVzIHRvIGZhY2lsaXRhdGUgdGhlIG90aGVyIG9wZXJhdG9ycyBpbiBPcGVuU2hpZnQgQ29udGFpbmVyIFN0b3JhZ2UgYnkgcGVyZm9ybWluZyBhZG1pbmlzdHJhdGl2ZSB0YXNrcyBvdXRzaWRlIHRoZWlyIHNjb3BlIGFzIHdlbGwgYXMgd2F0Y2hpbmcgYW5kIGNvbmZpZ3VyaW5nIHRoZWlyIEN1c3RvbVJlc291cmNlcy5cblxuIyMjIFJvb2tcblxuW1Jvb2tdWzFdIGRlcGxveXMgYW5kIG1hbmFnZXMgQ2VwaCBvbiBPcGVuU2hpZnQsIHdoaWNoIHByb3ZpZGVzIGJsb2NrIGFuZCBmaWxlIHN0b3JhZ2UuXG5cbiMgQ29yZSBDYXBhYmlsaXRpZXNcblxuKiAqKlNlbGYtbWFuYWdpbmcgc2VydmljZToqKiBObyBtYXR0ZXIgd2hpY2ggc3VwcG9ydGVkIHN0b3JhZ2UgdGVjaG5vbG9naWVzIHlvdSBjaG9vc2UsIE9wZW5TaGlmdCBDb250YWluZXIgU3RvcmFnZSBlbnN1cmVzIHRoYXQgcmVzb3VyY2VzIGNhbiBiZSBkZXBsb3llZCBhbmQgbWFuYWdlZCBhdXRvbWF0aWNhbGx5LlxuXG4qICoqSHlwZXItc2NhbGUgb3IgaHlwZXItY29udmVyZ2VkOioqIFdpdGggT3BlblNoaWZ0IENvbnRhaW5lciBTdG9yYWdlIHlvdSBjYW4gZWl0aGVyIGJ1aWxkIGRlZGljYXRlZCBzdG9yYWdlIGNsdXN0ZXJzIG9yIGh5cGVyLWNvbnZlcmdlZCBjbHVzdGVycyB3aGVyZSB5b3VyIGFwcHMgcnVuIGFsb25nc2lkZSBzdG9yYWdlLlxuXG4qICoqRmlsZSwgQmxvY2ssIGFuZCBPYmplY3QgcHJvdmlkZWQgYnkgT3BlblNoaWZ0IENvbnRhaW5lciBTdG9yYWdlOioqIE9wZW5TaGlmdCBDb250YWluZXIgU3RvcmFnZSBpbnRlZ3JhdGVzIENlcGggd2l0aCBtdWx0aXBsZSBzdG9yYWdlIHByZXNlbnRhdGlvbnMgaW5jbHVkaW5nIG9iamVjdCBzdG9yYWdlIChjb21wYXRpYmxlIHdpdGggUzMpLCBibG9jayBzdG9yYWdlLCBhbmQgUE9TSVgtY29tcGxpYW50IHNoYXJlZCBmaWxlIHN5c3RlbS5cblxuKiAqKllvdXIgZGF0YSwgcHJvdGVjdGVkOioqIE9wZW5TaGlmdCBDb250YWluZXIgU3RvcmFnZSBlZmZpY2llbnRseSBkaXN0cmlidXRlcyBhbmQgcmVwbGljYXRlcyB5b3VyIGRhdGEgYWNyb3NzIHlvdXIgY2x1c3RlciB0byBtaW5pbWl6ZSB0aGUgcmlzayBvZiBkYXRhIGxvc3MuIFdpdGggc25hcHNob3RzLCBjbG9uaW5nLCBhbmQgdmVyc2lvbmluZywgbm8gbW9yZSBsb3Npbmcgc2xlZXAgb3ZlciB5b3VyIGRhdGEuXG5cbiogKipFbGFzdGljIHN0b3JhZ2UgaW4geW91ciBkYXRhY2VudGVyOioqIFNjYWxlIGlzIG5vdyBwb3NzaWJsZSBpbiB5b3VyIGRhdGFjZW50ZXIuIEdldCBzdGFydGVkIHdpdGggYSBmZXcgdGVyYWJ5dGVzLCBhbmQgZWFzaWx5IHNjYWxlIHVwLlxuXG4qICoqU2ltcGxpZmllZCBkYXRhIG1hbmFnZW1lbnQ6KiogRWFzaWx5IGNyZWF0ZSBoeWJyaWQgYW5kIG11bHRpLWNsb3VkIGRhdGEgc3RvcmFnZSBmb3IgeW91ciB3b3JrbG9hZHMsIHVzaW5nIGEgc2luZ2xlIG5hbWVzcGFjZS5cblxuWzFdOiBodHRwczovL3Jvb2suaW9cbiIsImRpc3BsYXlOYW1lIjoiT3BlblNoaWZ0IENvbnRhaW5lciBTdG9yYWdlIiwiaWNvbiI6W3siYmFzZTY0ZGF0YSI6IlBITjJaeUJwWkQwaVRHRjVaWEpmTVNJZ1pHRjBZUzF1WVcxbFBTSk1ZWGxsY2lBeElpQjRiV3h1Y3owaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNQzl6ZG1jaUlIWnBaWGRDYjNnOUlqQWdNQ0F4T1RJZ01UUTFJajQ4WkdWbWN6NDhjM1I1YkdVK0xtTnNjeTB4ZTJacGJHdzZJMlV3TUR0OVBDOXpkSGxzWlQ0OEwyUmxabk0rUEhScGRHeGxQbEpsWkVoaGRDMU1iMmR2TFVoaGRDMURiMnh2Y2p3dmRHbDBiR1UrUEhCaGRHZ2daRDBpVFRFMU55NDNOeXcyTWk0Mk1XRXhOQ3d4TkN3d0xEQXNNU3d1TXpFc015NDBNbU13TERFMExqZzRMVEU0TGpFc01UY3VORFl0TXpBdU5qRXNNVGN1TkRaRE56Z3VPRE1zT0RNdU5Ea3NOREl1TlRNc05UTXVNallzTkRJdU5UTXNORFJoTmk0ME15dzJMalF6TERBc01Dd3hMQzR5TWkweExqazBiQzB6TGpZMkxEa3VNRFpoTVRndU5EVXNNVGd1TkRVc01Dd3dMREF0TVM0MU1TdzNMak16WXpBc01UZ3VNVEVzTkRFc05EVXVORGdzT0RjdU56UXNORFV1TkRnc01qQXVOamtzTUN3ek5pNDBNeTAzTGpjMkxETTJMalF6TFRJeExqYzNMREF0TVM0d09Dd3dMVEV1T1RRdE1TNDNNeTB4TUM0eE0xb2lMejQ4Y0dGMGFDQmpiR0Z6Y3owaVkyeHpMVEVpSUdROUlrMHhNamN1TkRjc09ETXVORGxqTVRJdU5URXNNQ3d6TUM0Mk1TMHlMalU0TERNd0xqWXhMVEUzTGpRMllURTBMREUwTERBc01Dd3dMUzR6TVMwekxqUXliQzAzTGpRMUxUTXlMak0yWXkweExqY3lMVGN1TVRJdE15NHlNeTB4TUM0ek5TMHhOUzQzTXkweE5pNDJRekV5TkM0NE9TdzRMalk1TERFd015NDNOaTQxTERrM0xqVXhMalVzT1RFdU5qa3VOU3c1TUN3NExEZ3pMakEyTERoakxUWXVOamdzTUMweE1TNDJOQzAxTGpZdE1UY3VPRGt0TlM0MkxUWXNNQzA1TGpreExEUXVNRGt0TVRJdU9UTXNNVEl1TlN3d0xEQXRPQzQwTVN3eU15NDNNaTA1TGpRNUxESTNMakUyUVRZdU5ETXNOaTQwTXl3d0xEQXNNQ3cwTWk0MU15dzBOR013TERrdU1qSXNNell1TXl3ek9TNDBOU3c0TkM0NU5Dd3pPUzQwTlUweE5qQXNOekl1TURkak1TNDNNeXc0TGpFNUxERXVOek1zT1M0d05Td3hMamN6TERFd0xqRXpMREFzTVRRdE1UVXVOelFzTWpFdU56Y3RNell1TkRNc01qRXVOemRETnpndU5UUXNNVEEwTERNM0xqVTRMRGMyTGpZc016Y3VOVGdzTlRndU5EbGhNVGd1TkRVc01UZ3VORFVzTUN3d0xERXNNUzQxTVMwM0xqTXpRekl5TGpJM0xEVXlMQzQxTERVMUxDNDFMRGMwTGpJeVl6QXNNekV1TkRnc056UXVOVGtzTnpBdU1qZ3NNVE16TGpZMUxEY3dMakk0TERRMUxqSTRMREFzTlRZdU55MHlNQzQwT0N3MU5pNDNMVE0yTGpZMUxEQXRNVEl1TnpJdE1URXRNamN1TVRZdE16QXVPRE10TXpVdU56Z2lMejQ4TDNOMlp6ND0iLCJtZWRpYXR5cGUiOiJpbWFnZS9zdmcreG1sIn1dLCJpbnN0YWxsIjp7InNwZWMiOnsiY2x1c3RlclBlcm1pc3Npb25zIjpbeyJydWxlcyI6W3siYXBpR3JvdXBzIjpbImFwaWV4dGVuc2lvbnMuazhzLmlvIl0sInJlc291cmNlcyI6WyJjdXN0b21yZXNvdXJjZWRlZmluaXRpb25zIl0sInZlcmJzIjpbImNyZWF0ZSIsImdldCIsImxpc3QiLCJ1cGRhdGUiLCJ3YXRjaCJdfSx7ImFwaUdyb3VwcyI6WyJhcHBzIl0sInJlc291cmNlcyI6WyJkYWVtb25zZXRzIiwiZGVwbG95bWVudHMiLCJyZXBsaWNhc2V0cyIsInN0YXRlZnVsc2V0cyJdLCJ2ZXJicyI6WyIqIl19LHsiYXBpR3JvdXBzIjpbImJhdGNoIl0sInJlc291cmNlcyI6WyJjcm9uam9icyIsImpvYnMiXSwidmVyYnMiOlsiY3JlYXRlIiwiZGVsZXRlIiwiZ2V0IiwibGlzdCIsInVwZGF0ZSIsIndhdGNoIl19LHsiYXBpR3JvdXBzIjpbImNlcGgucm9vay5pbyJdLCJyZXNvdXJjZXMiOlsiY2VwaGJsb2NrcG9vbHJhZG9zbmFtZXNwYWNlcyJdLCJ2ZXJicyI6WyJjcmVhdGUiLCJkZWxldGUiLCJnZXQiLCJsaXN0IiwidXBkYXRlIiwid2F0Y2giXX0seyJhcGlHcm91cHMiOlsiY2VwaC5yb29rLmlvIl0sInJlc291cmNlcyI6WyJjZXBoYmxvY2twb29scmFkb3NuYW1lc3BhY2VzIiwiY2VwaGJsb2NrcG9vbHMiLCJjZXBoY2x1c3RlcnMiLCJjZXBoZmlsZXN5c3RlbXMiLCJjZXBobmZzZXMiLCJjZXBob2JqZWN0c3RvcmVzIiwiY2VwaG9iamVjdHN0b3JldXNlcnMiLCJjZXBocmJkbWlycm9ycyJdLCJ2ZXJicyI6WyIqIl19LHsiYXBpR3JvdXBzIjpbImNlcGgucm9vay5pbyJdLCJyZXNvdXJjZXMiOlsiY2VwaGNsaWVudHMiXSwidmVyYnMiOlsiY3JlYXRlIiwiZGVsZXRlIiwiZ2V0IiwibGlzdCIsInVwZGF0ZSIsIndhdGNoIl19LHsiYXBpR3JvdXBzIjpbImNlcGgucm9vay5pbyJdLCJyZXNvdXJjZXMiOlsiY2VwaGZpbGVzeXN0ZW1zdWJ2b2x1bWVncm91cHMiXSwidmVyYnMiOlsiY3JlYXRlIiwiZGVsZXRlIiwiZ2V0IiwibGlzdCIsInVwZGF0ZSIsIndhdGNoIl19LHsiYXBpR3JvdXBzIjpbImNsdXN0ZXIub3Blbi1jbHVzdGVyLW1hbmFnZW1lbnQuaW8iXSwicmVzb3VyY2VzIjpbImNsdXN0ZXJjbGFpbXMiXSwidmVyYnMiOlsiY3JlYXRlIiwiZGVsZXRlIiwiZ2V0IiwibGlzdCIsInVwZGF0ZSIsIndhdGNoIl19LHsiYXBpR3JvdXBzIjpbImNvbmZpZy5vcGVuc2hpZnQuaW8iXSwicmVzb3VyY2VzIjpbImNsdXN0ZXJ2ZXJzaW9ucyIsIm5ldHdvcmtzIl0sInZlcmJzIjpbImdldCIsImxpc3QiLCJ3YXRjaCJdfSx7ImFwaUdyb3VwcyI6WyJjb25maWcub3BlbnNoaWZ0LmlvIl0sInJlc291cmNlcyI6WyJpbmZyYXN0cnVjdHVyZXMiLCJuZXR3b3JrcyJdLCJ2ZXJicyI6WyJnZXQiLCJsaXN0Iiwid2F0Y2giXX0seyJhcGlHcm91cHMiOlsiY29uc29sZS5vcGVuc2hpZnQuaW8iXSwicmVzb3VyY2VzIjpbImNvbnNvbGVxdWlja3N0YXJ0cyJdLCJ2ZXJicyI6WyIqIl19LHsiYXBpR3JvdXBzIjpbImNvb3JkaW5hdGlvbi5rOHMuaW8iXSwicmVzb3VyY2VzIjpbImxlYXNlcyJdLCJ2ZXJicyI6WyJjcmVhdGUiLCJnZXQiLCJsaXN0IiwidXBkYXRlIl19LHsiYXBpR3JvdXBzIjpbIiJdLCJyZXNvdXJjZXMiOlsiY29uZmlnbWFwcyIsImVuZHBvaW50cyIsImV2ZW50cyIsIm5vZGVzIiwicGVyc2lzdGVudHZvbHVtZWNsYWltcyIsInBlcnNpc3RlbnR2b2x1bWVzIiwicG9kcyIsInNlY3JldHMiLCJzZXJ2aWNlYWNjb3VudHMiLCJzZXJ2aWNlcyJdLCJ2ZXJicyI6WyIqIl19LHsiYXBpR3JvdXBzIjpbIiJdLCJyZXNvdXJjZXMiOlsibmFtZXNwYWNlcyJdLCJ2ZXJicyI6WyJnZXQiXX0seyJhcGlHcm91cHMiOlsiIl0sInJlc291cmNlcyI6WyJwZXJzaXN0ZW50dm9sdW1lcyJdLCJ2ZXJicyI6WyJnZXQiLCJsaXN0Iiwid2F0Y2giXX0seyJhcGlHcm91cHMiOlsiazhzLmNuaS5jbmNmLmlvIl0sInJlc291cmNlcyI6WyJuZXR3b3JrLWF0dGFjaG1lbnQtZGVmaW5pdGlvbnMiXSwidmVyYnMiOlsiZ2V0IiwibGlzdCIsIndhdGNoIl19LHsiYXBpR3JvdXBzIjpbIm1vbml0b3JpbmcuY29yZW9zLmNvbSJdLCJyZXNvdXJjZXMiOlsiYWxlcnRtYW5hZ2VycyIsInByb21ldGhldXNlcyJdLCJ2ZXJicyI6WyJjcmVhdGUiLCJkZWxldGUiLCJnZXQiLCJsaXN0IiwicGF0Y2giLCJ1cGRhdGUiLCJ3YXRjaCJdfSx7ImFwaUdyb3VwcyI6WyJtb25pdG9yaW5nLmNvcmVvcy5jb20iXSwicmVzb3VyY2VzIjpbInByb21ldGhldXNydWxlcyIsInNlcnZpY2Vtb25pdG9ycyJdLCJ2ZXJicyI6WyJjcmVhdGUiLCJkZWxldGUiLCJnZXQiLCJsaXN0IiwidXBkYXRlIiwid2F0Y2giXX0seyJhcGlHcm91cHMiOlsibW9uaXRvcmluZy5jb3Jlb3MuY29tIl0sInJlc291cmNlcyI6WyJzZXJ2aWNlbW9uaXRvcnMiXSwidmVyYnMiOlsiY3JlYXRlIiwiZGVsZXRlIiwiZ2V0IiwibGlzdCIsInBhdGNoIiwidXBkYXRlIiwid2F0Y2giXX0seyJhcGlHcm91cHMiOlsibm9vYmFhLmlvIl0sInJlc291cmNlcyI6WyJub29iYWFzIl0sInZlcmJzIjpbIioiXX0seyJhcGlHcm91cHMiOlsib2JqZWN0YnVja2V0LmlvIl0sInJlc291cmNlcyI6WyJvYmplY3RidWNrZXRjbGFpbXMiLCJvYmplY3RidWNrZXRzIl0sInZlcmJzIjpbImdldCIsImxpc3QiLCJ3YXRjaCJdfSx7ImFwaUdyb3VwcyI6WyJvY3Mub3BlbnNoaWZ0LmlvIl0sInJlc291cmNlcyI6WyIqIl0sInZlcmJzIjpbImNyZWF0ZSIsImRlbGV0ZSIsImdldCIsImxpc3QiLCJwYXRjaCIsInVwZGF0ZSIsIndhdGNoIl19LHsiYXBpR3JvdXBzIjpbIm9jcy5vcGVuc2hpZnQuaW8iXSwicmVzb3VyY2VzIjpbInN0b3JhZ2VjbHVzdGVycyJdLCJ2ZXJicyI6WyJnZXQiLCJsaXN0Iiwid2F0Y2giXX0seyJhcGlHcm91cHMiOlsib2NzLm9wZW5zaGlmdC5pbyJdLCJyZXNvdXJjZXMiOlsic3RvcmFnZWNvbnN1bWVycyJdLCJ2ZXJicyI6WyJjcmVhdGUiLCJkZWxldGUiLCJnZXQiLCJsaXN0IiwicGF0Y2giLCJ1cGRhdGUiLCJ3YXRjaCJdfSx7ImFwaUdyb3VwcyI6WyJvY3Mub3BlbnNoaWZ0LmlvIl0sInJlc291cmNlcyI6WyJzdG9yYWdlY29uc3VtZXJzL3N0YXR1cyJdLCJ2ZXJicyI6WyJnZXQiLCJwYXRjaCIsInVwZGF0ZSJdfSx7ImFwaUdyb3VwcyI6WyJvY3Mub3BlbnNoaWZ0LmlvIl0sInJlc291cmNlcyI6WyJzdG9yYWdlcmVxdWVzdHMiXSwidmVyYnMiOlsiY3JlYXRlIiwiZGVsZXRlIiwiZ2V0IiwibGlzdCIsInBhdGNoIiwidXBkYXRlIiwid2F0Y2giXX0seyJhcGlHcm91cHMiOlsib2NzLm9wZW5zaGlmdC5pbyJdLCJyZXNvdXJjZXMiOlsic3RvcmFnZXJlcXVlc3RzL3N0YXR1cyJdLCJ2ZXJicyI6WyJnZXQiLCJwYXRjaCIsInVwZGF0ZSJdfSx7ImFwaUdyb3VwcyI6WyJvcGVyYXRvcnMuY29yZW9zLmNvbSJdLCJyZXNvdXJjZXMiOlsiY2x1c3RlcnNlcnZpY2V2ZXJzaW9ucyJdLCJ2ZXJicyI6WyJkZWxldGUiLCJnZXQiLCJsaXN0IiwicGF0Y2giLCJ1cGRhdGUiLCJ3YXRjaCJdfSx7ImFwaUdyb3VwcyI6WyJvcGVyYXRvcnMuY29yZW9zLmNvbSJdLCJyZXNvdXJjZXMiOlsib3BlcmF0b3Jjb25kaXRpb25zIl0sInZlcmJzIjpbImNyZWF0ZSIsImRlbGV0ZSIsImdldCIsImxpc3QiLCJwYXRjaCIsInVwZGF0ZSIsIndhdGNoIl19LHsiYXBpR3JvdXBzIjpbInF1b3RhLm9wZW5zaGlmdC5pbyJdLCJyZXNvdXJjZXMiOlsiY2x1c3RlcnJlc291cmNlcXVvdGFzIl0sInZlcmJzIjpbIioiXX0seyJhcGlHcm91cHMiOlsicmJhYy5hdXRob3JpemF0aW9uLms4cy5pbyJdLCJyZXNvdXJjZXMiOlsiY2x1c3RlcnJvbGViaW5kaW5ncyIsImNsdXN0ZXJyb2xlcyIsInJvbGViaW5kaW5ncyIsInJvbGVzIl0sInZlcmJzIjpbImNyZWF0ZSIsImRlbGV0ZSIsImdldCIsImxpc3QiLCJwYXRjaCIsInVwZGF0ZSIsIndhdGNoIl19LHsiYXBpR3JvdXBzIjpbInJvdXRlLm9wZW5zaGlmdC5pbyJdLCJyZXNvdXJjZXMiOlsicm91dGVzIl0sInZlcmJzIjpbIioiXX0seyJhcGlHcm91cHMiOlsic2VjdXJpdHkub3BlbnNoaWZ0LmlvIl0sInJlc291cmNlcyI6WyJzZWN1cml0eWNvbnRleHRjb25zdHJhaW50cyJdLCJ2ZXJicyI6WyJjcmVhdGUiLCJnZXQiLCJ1cGRhdGUiXX0seyJhcGlHcm91cHMiOlsic2VjdXJpdHkub3BlbnNoaWZ0LmlvIl0sInJlc291cmNlTmFtZXMiOlsicHJpdmlsZWdlZCJdLCJyZXNvdXJjZXMiOlsic2VjdXJpdHljb250ZXh0Y29uc3RyYWludHMiXSwidmVyYnMiOlsiY3JlYXRlIiwiZ2V0IiwidXBkYXRlIl19LHsiYXBpR3JvdXBzIjpbInNuYXBzaG90LnN0b3JhZ2UuazhzLmlvIl0sInJlc291cmNlcyI6WyJ2b2x1bWVzbmFwc2hvdGNsYXNzZXMiXSwidmVyYnMiOlsiY3JlYXRlIiwiZGVsZXRlIiwiZ2V0IiwibGlzdCIsIndhdGNoIl19LHsiYXBpR3JvdXBzIjpbInNuYXBzaG90LnN0b3JhZ2UuazhzLmlvIl0sInJlc291cmNlcyI6WyJ2b2x1bWVzbmFwc2hvdGNsYXNzZXMiLCJ2b2x1bWVzbmFwc2hvdHMiXSwidmVyYnMiOlsiKiJdfSx7ImFwaUdyb3VwcyI6WyJzdG9yYWdlLms4cy5pbyJdLCJyZXNvdXJjZXMiOlsic3RvcmFnZWNsYXNzZXMiXSwidmVyYnMiOlsiKiIsImNyZWF0ZSIsImRlbGV0ZSIsImdldCIsImxpc3QiLCJwYXRjaCIsInVwZGF0ZSIsIndhdGNoIl19LHsiYXBpR3JvdXBzIjpbInRlbXBsYXRlLm9wZW5zaGlmdC5pbyJdLCJyZXNvdXJjZXMiOlsidGVtcGxhdGVzIl0sInZlcmJzIjpbIioiXX1dLCJzZXJ2aWNlQWNjb3VudE5hbWUiOiJvY3Mtb3BlcmF0b3IifSx7InJ1bGVzIjpbeyJhcGlHcm91cHMiOlsiYXV0aGVudGljYXRpb24uazhzLmlvIl0sInJlc291cmNlcyI6WyJ0b2tlbnJldmlld3MiXSwidmVyYnMiOlsiY3JlYXRlIl19LHsiYXBpR3JvdXBzIjpbImF1dGhvcml6YXRpb24uazhzLmlvIl0sInJlc291cmNlcyI6WyJzdWJqZWN0YWNjZXNzcmV2aWV3cyJdLCJ2ZXJicyI6WyJjcmVhdGUiXX1dLCJzZXJ2aWNlQWNjb3VudE5hbWUiOiJ1eC1iYWNrZW5kLXNlcnZlciJ9XSwiZGVwbG95bWVudHMiOlt7Im5hbWUiOiJvY3Mtb3BlcmF0b3IiLCJzcGVjIjp7InJlcGxpY2FzIjoxLCJzZWxlY3RvciI6eyJtYXRjaExhYmVscyI6eyJuYW1lIjoib2NzLW9wZXJhdG9yIn19LCJzdHJhdGVneSI6eyJ0eXBlIjoiUmVjcmVhdGUifSwidGVtcGxhdGUiOnsibWV0YWRhdGEiOnsibGFiZWxzIjp7Im5hbWUiOiJvY3Mtb3BlcmF0b3IifX0sInNwZWMiOnsiY29udGFpbmVycyI6W3siYXJncyI6WyItLWVuYWJsZS1sZWFkZXItZWxlY3Rpb24iLCItLWhlYWx0aC1wcm9iZS1iaW5kLWFkZHJlc3M9OjgwODEiXSwiY29tbWFuZCI6WyJvY3Mtb3BlcmF0b3IiXSwiZW52IjpbeyJuYW1lIjoiV0FUQ0hfTkFNRVNQQUNFIiwidmFsdWVGcm9tIjp7ImZpZWxkUmVmIjp7ImZpZWxkUGF0aCI6Im1ldGFkYXRhLmFubm90YXRpb25zWydvbG0udGFyZ2V0TmFtZXNwYWNlcyddIn19fSx7Im5hbWUiOiJPQ1NfTUVUUklDU19FWFBPUlRFUl9JTUFHRSIsInZhbHVlIjoicXVheS5pby9vY3MtZGV2L29jcy1tZXRyaWNzLWV4cG9ydGVyOm1haW4tMzRmZmYyOCJ9LHsibmFtZSI6IlJPT0tfQ0VQSF9JTUFHRSIsInZhbHVlIjoicXVheS5pby9vY3MtZGV2L3Jvb2stY2VwaDpsYXRlc3QtZG93bnN0cmVhbSJ9LHsibmFtZSI6IkNFUEhfSU1BR0UiLCJ2YWx1ZSI6InF1YXkuaW8vY2VwaC9jZXBoOnYxOC4yLjAifSx7Im5hbWUiOiJOT09CQUFfQ09SRV9JTUFHRSIsInZhbHVlIjoicXVheS5pby9ub29iYWEvbm9vYmFhLWNvcmU6bWFzdGVyLTIwMjQwMTA4In0seyJuYW1lIjoiTk9PQkFBX0RCX0lNQUdFIiwidmFsdWUiOiJkb2NrZXIuaW8vY2VudG9zL3Bvc3RncmVzcWwtMTItY2VudG9zOCJ9LHsibmFtZSI6IlBST1ZJREVSX0FQSV9TRVJWRVJfSU1BR0UiLCJ2YWx1ZSI6InF1YXkuaW8vb2NzLWRldi9vY3Mtb3BlcmF0b3I6bWFpbi0zNGZmZjI4In0seyJuYW1lIjoiT05CT0FSRElOR19WQUxJREFUSU9OX0tFWVNfR0VORVJBVE9SX0lNQUdFIiwidmFsdWUiOiJxdWF5LmlvL29jcy1kZXYvb2NzLW9wZXJhdG9yOm1haW4tMzRmZmYyOCJ9LHsibmFtZSI6Ik9QRVJBVE9SX05BTUVTUEFDRSIsInZhbHVlRnJvbSI6eyJmaWVsZFJlZiI6eyJmaWVsZFBhdGgiOiJtZXRhZGF0YS5uYW1lc3BhY2UifX19XSwiaW1hZ2UiOiJxdWF5LmlvL29jcy1kZXYvb2NzLW9wZXJhdG9yOm1haW4tMzRmZmYyOCIsImltYWdlUHVsbFBvbGljeSI6IkFsd2F5cyIsIm5hbWUiOiJvY3Mtb3BlcmF0b3IiLCJyZWFkaW5lc3NQcm9iZSI6eyJodHRwR2V0Ijp7InBhdGgiOiIvcmVhZHl6IiwicG9ydCI6ODA4MX0sImluaXRpYWxEZWxheVNlY29uZHMiOjUsInBlcmlvZFNlY29uZHMiOjEwfSwicmVzb3VyY2VzIjp7fSwic2VjdXJpdHlDb250ZXh0Ijp7ImFsbG93UHJpdmlsZWdlRXNjYWxhdGlvbiI6ZmFsc2UsImNhcGFiaWxpdGllcyI6eyJkcm9wIjpbImFsbCJdfSwicmVhZE9ubHlSb290RmlsZXN5c3RlbSI6dHJ1ZX0sInZvbHVtZU1vdW50cyI6W3sibW91bnRQYXRoIjoiL2V0Yy9wcml2YXRlLWtleSIsIm5hbWUiOiJvbmJvYXJkaW5nLXByaXZhdGUta2V5In1dfV0sInNlY3VyaXR5Q29udGV4dCI6eyJydW5Bc05vblJvb3QiOnRydWV9LCJzZXJ2aWNlQWNjb3VudE5hbWUiOiJvY3Mtb3BlcmF0b3IiLCJ0ZXJtaW5hdGlvbkdyYWNlUGVyaW9kU2Vjb25kcyI6MTAsInRvbGVyYXRpb25zIjpbeyJlZmZlY3QiOiJOb1NjaGVkdWxlIiwia2V5Ijoibm9kZS5vY3Mub3BlbnNoaWZ0LmlvL3N0b3JhZ2UiLCJvcGVyYXRvciI6IkVxdWFsIiwidmFsdWUiOiJ0cnVlIn1dLCJ2b2x1bWVzIjpbeyJuYW1lIjoib25ib2FyZGluZy1wcml2YXRlLWtleSIsInNlY3JldCI6eyJvcHRpb25hbCI6dHJ1ZSwic2VjcmV0TmFtZSI6Im9uYm9hcmRpbmctcHJpdmF0ZS1rZXkifX1dfX19fSx7Im5hbWUiOiJ1eC1iYWNrZW5kLXNlcnZlciIsInNwZWMiOnsicmVwbGljYXMiOjEsInNlbGVjdG9yIjp7Im1hdGNoTGFiZWxzIjp7ImFwcCI6InV4LWJhY2tlbmQtc2VydmVyIiwiYXBwLmt1YmVybmV0ZXMuaW8vY29tcG9uZW50IjoidXgtYmFja2VuZC1zZXJ2ZXIiLCJhcHAua3ViZXJuZXRlcy5pby9uYW1lIjoidXgtYmFja2VuZC1zZXJ2ZXIifX0sInN0cmF0ZWd5Ijp7InR5cGUiOiJSZWNyZWF0ZSJ9LCJ0ZW1wbGF0ZSI6eyJtZXRhZGF0YSI6eyJsYWJlbHMiOnsiYXBwIjoidXgtYmFja2VuZC1zZXJ2ZXIiLCJhcHAua3ViZXJuZXRlcy5pby9jb21wb25lbnQiOiJ1eC1iYWNrZW5kLXNlcnZlciIsImFwcC5rdWJlcm5ldGVzLmlvL25hbWUiOiJ1eC1iYWNrZW5kLXNlcnZlciJ9fSwic3BlYyI6eyJjb250YWluZXJzIjpbeyJjb21tYW5kIjpbIi91c3IvbG9jYWwvYmluL3V4LWJhY2tlbmQtc2VydmVyIl0sImVudiI6W3sibmFtZSI6Ik9OQk9BUkRJTkdfVE9LRU5fTElGRVRJTUUifSx7Im5hbWUiOiJVWF9CQUNLRU5EX1BPUlQifSx7Im5hbWUiOiJUTFNfRU5BQkxFRCJ9XSwiaW1hZ2UiOiJxdWF5LmlvL29jcy1kZXYvb2NzLW9wZXJhdG9yOm1haW4tMzRmZmYyOCIsImltYWdlUHVsbFBvbGljeSI6IklmTm90UHJlc2VudCIsIm5hbWUiOiJ1eC1iYWNrZW5kLXNlcnZlciIsInBvcnRzIjpbeyJjb250YWluZXJQb3J0Ijo4MDgwfV0sInJlc291cmNlcyI6e30sInNlY3VyaXR5Q29udGV4dCI6eyJyZWFkT25seVJvb3RGaWxlc3lzdGVtIjp0cnVlLCJydW5Bc05vblJvb3QiOnRydWV9LCJ2b2x1bWVNb3VudHMiOlt7Im1vdW50UGF0aCI6Ii9ldGMvcHJpdmF0ZS1rZXkiLCJuYW1lIjoib25ib2FyZGluZy1wcml2YXRlLWtleSJ9LHsibW91bnRQYXRoIjoiL2V0Yy90bHMvcHJpdmF0ZSIsIm5hbWUiOiJ1eC1jZXJ0LXNlY3JldCJ9XX0seyJhcmdzIjpbIi1wcm92aWRlcj1vcGVuc2hpZnQiLCItaHR0cHMtYWRkcmVzcz06ODg4OCIsIi1odHRwLWFkZHJlc3M9IiwiLWVtYWlsLWRvbWFpbj0qIiwiLXVwc3RyZWFtPWh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8iLCItdGxzLWNlcnQ9L2V0Yy90bHMvcHJpdmF0ZS90bHMuY3J0IiwiLXRscy1rZXk9L2V0Yy90bHMvcHJpdmF0ZS90bHMua2V5IiwiLWNvb2tpZS1zZWNyZXQtZmlsZT0vZXRjL3Byb3h5L3NlY3JldHMvc2Vzc2lvbl9zZWNyZXQiLCItb3BlbnNoaWZ0LXNlcnZpY2UtYWNjb3VudD11eC1iYWNrZW5kLXNlcnZlciIsIi1vcGVuc2hpZnQtZGVsZWdhdGUtdXJscz17XCIvXCI6e1wiZ3JvdXBcIjpcIm9jcy5vcGVuc2hpZnQuaW9cIixcInJlc291cmNlXCI6XCJzdG9yYWdlY2x1c3RlcnNcIixcIm5hbWVzcGFjZVwiOlwib3BlbnNoaWZ0LXN0b3JhZ2VcIixcInZlcmJcIjpcImNyZWF0ZVwifX0iLCItb3BlbnNoaWZ0LWNhPS92YXIvcnVuL3NlY3JldHMva3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9jYS5jcnQiXSwiaW1hZ2UiOiJxdWF5LmlvL29wZW5zaGlmdC9vcmlnaW4tb2F1dGgtcHJveHk6NC4xNi4wIiwiaW1hZ2VQdWxsUG9saWN5IjoiSWZOb3RQcmVzZW50IiwibmFtZSI6Im9hdXRoLXByb3h5IiwicG9ydHMiOlt7ImNvbnRhaW5lclBvcnQiOjg4ODh9XSwicmVzb3VyY2VzIjp7fSwic2VjdXJpdHlDb250ZXh0Ijp7InJlYWRPbmx5Um9vdEZpbGVzeXN0ZW0iOnRydWUsInJ1bkFzTm9uUm9vdCI6dHJ1ZX0sInZvbHVtZU1vdW50cyI6W3sibW91bnRQYXRoIjoiL2V0Yy9wcm94eS9zZWNyZXRzIiwibmFtZSI6InV4LXByb3h5LXNlY3JldCJ9LHsibW91bnRQYXRoIjoiL2V0Yy90bHMvcHJpdmF0ZSIsIm5hbWUiOiJ1eC1jZXJ0LXNlY3JldCJ9XX1dLCJzZXJ2aWNlQWNjb3VudE5hbWUiOiJ1eC1iYWNrZW5kLXNlcnZlciIsInRvbGVyYXRpb25zIjpbeyJlZmZlY3QiOiJOb1NjaGVkdWxlIiwia2V5Ijoibm9kZS5vY3Mub3BlbnNoaWZ0LmlvL3N0b3JhZ2UiLCJvcGVyYXRvciI6IkVxdWFsIiwidmFsdWUiOiJ0cnVlIn1dLCJ2b2x1bWVzIjpbeyJuYW1lIjoib25ib2FyZGluZy1wcml2YXRlLWtleSIsInNlY3JldCI6eyJvcHRpb25hbCI6dHJ1ZSwic2VjcmV0TmFtZSI6Im9uYm9hcmRpbmctcHJpdmF0ZS1rZXkifX0seyJuYW1lIjoidXgtcHJveHktc2VjcmV0Iiwic2VjcmV0Ijp7InNlY3JldE5hbWUiOiJ1eC1iYWNrZW5kLXByb3h5In19LHsibmFtZSI6InV4LWNlcnQtc2VjcmV0Iiwic2VjcmV0Ijp7InNlY3JldE5hbWUiOiJ1eC1jZXJ0LXNlY3JldCJ9fV19fX19XX0sInN0cmF0ZWd5IjoiZGVwbG95bWVudCJ9LCJpbnN0YWxsTW9kZXMiOlt7InN1cHBvcnRlZCI6dHJ1ZSwidHlwZSI6Ik93bk5hbWVzcGFjZSJ9LHsic3VwcG9ydGVkIjp0cnVlLCJ0eXBlIjoiU2luZ2xlTmFtZXNwYWNlIn0seyJzdXBwb3J0ZWQiOmZhbHNlLCJ0eXBlIjoiTXVsdGlOYW1lc3BhY2UifSx7InN1cHBvcnRlZCI6ZmFsc2UsInR5cGUiOiJBbGxOYW1lc3BhY2VzIn1dLCJrZXl3b3JkcyI6WyJzdG9yYWdlIiwicm9vayIsImNlcGgiLCJibG9jayBzdG9yYWdlIiwic2hhcmVkIGZpbGVzeXN0ZW0iLCJvYmplY3Qgc3RvcmFnZSJdLCJsaW5rcyI6W3sibmFtZSI6IlNvdXJjZSBDb2RlIiwidXJsIjoiaHR0cHM6Ly9naXRodWIuY29tL3JlZC1oYXQtc3RvcmFnZS9vY3Mtb3BlcmF0b3IifV0sIm1haW50YWluZXJzIjpbeyJlbWFpbCI6Im9jcy1zdXBwb3J0QHJlZGhhdC5jb20iLCJuYW1lIjoiUmVkIEhhdCBTdXBwb3J0In1dLCJtYXR1cml0eSI6ImFscGhhIiwibWluS3ViZVZlcnNpb24iOiIxLjE2LjAiLCJwcm92aWRlciI6eyJuYW1lIjoiUmVkIEhhdCJ9LCJyZWxhdGVkSW1hZ2VzIjpbeyJpbWFnZSI6InF1YXkuaW8vb2NzLWRldi9yb29rLWNlcGg6bGF0ZXN0LWRvd25zdHJlYW0iLCJuYW1lIjoicm9vay1jb250YWluZXIifSx7ImltYWdlIjoicXVheS5pby9jZXBoL2NlcGg6djE4LjIuMCIsIm5hbWUiOiJjZXBoLWNvbnRhaW5lciJ9LHsiaW1hZ2UiOiJxdWF5LmlvL29jcy1kZXYvb2NzLW11c3QtZ2F0aGVyOmxhdGVzdCIsIm5hbWUiOiJvY3MtbXVzdC1nYXRoZXIifSx7ImltYWdlIjoicXVheS5pby9vY3MtZGV2L29jcy1tZXRyaWNzLWV4cG9ydGVyOm1haW4tMzRmZmYyOCIsIm5hbWUiOiJvY3MtbWV0cmljcy1leHBvcnRlciJ9LHsiaW1hZ2UiOiJxdWF5LmlvL29wZW5zaGlmdC9vcmlnaW4tb2F1dGgtcHJveHk6NC4xNi4wIiwibmFtZSI6InV4LWJhY2tlbmQtb2F1dGgtaW1hZ2UifV0sInZlcnNpb24iOiI0LjE3LjAifX0= + data: eyJhcGlWZXJzaW9uIjoib3BlcmF0b3JzLmNvcmVvcy5jb20vdjFhbHBoYTEiLCJraW5kIjoiQ2x1c3RlclNlcnZpY2VWZXJzaW9uIiwibWV0YWRhdGEiOnsiYW5ub3RhdGlvbnMiOnsiYWxtLWV4YW1wbGVzIjoiXG5bXG4gICAge1xuICAgICAgICBcImFwaVZlcnNpb25cIjogXCJvY3Mub3BlbnNoaWZ0LmlvL3YxXCIsXG4gICAgICAgIFwia2luZFwiOiBcIlN0b3JhZ2VDbHVzdGVyXCIsXG4gICAgICAgIFwibWV0YWRhdGFcIjoge1xuICAgICAgICAgICAgXCJuYW1lXCI6IFwiZXhhbXBsZS1zdG9yYWdlY2x1c3RlclwiLFxuICAgICAgICAgICAgXCJuYW1lc3BhY2VcIjogXCJvcGVuc2hpZnQtc3RvcmFnZVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwic3BlY1wiOiB7XG4gICAgICAgICAgICBcIm1hbmFnZU5vZGVzXCI6IGZhbHNlLFxuICAgICAgICAgICAgXCJtb25QVkNUZW1wbGF0ZVwiOiB7XG4gICAgICAgICAgICAgICAgXCJzcGVjXCI6IHtcbiAgICAgICAgICAgICAgICAgICAgXCJhY2Nlc3NNb2Rlc1wiOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlJlYWRXcml0ZU9uY2VcIlxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICBcInJlc291cmNlc1wiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBcInJlcXVlc3RzXCI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInN0b3JhZ2VcIjogXCIxMEdpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgXCJzdG9yYWdlQ2xhc3NOYW1lXCI6IFwiZ3AyLWNzaVwiXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFwic3RvcmFnZURldmljZVNldHNcIjogW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgXCJjb3VudFwiOiAzLFxuICAgICAgICAgICAgICAgICAgICBcImRhdGFQVkNUZW1wbGF0ZVwiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBcInNwZWNcIjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYWNjZXNzTW9kZXNcIjogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlJlYWRXcml0ZU9uY2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJyZXNvdXJjZXNcIjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInJlcXVlc3RzXCI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic3RvcmFnZVwiOiBcIjFUaVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic3RvcmFnZUNsYXNzTmFtZVwiOiBcImdwMi1jc2lcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInZvbHVtZU1vZGVcIjogXCJCbG9ja1wiXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIFwibmFtZVwiOiBcImV4YW1wbGUtZGV2aWNlc2V0XCIsXG4gICAgICAgICAgICAgICAgICAgIFwicGxhY2VtZW50XCI6IHt9LFxuICAgICAgICAgICAgICAgICAgICBcInBvcnRhYmxlXCI6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIFwicmVzb3VyY2VzXCI6IHt9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXVxuICAgICAgICB9XG4gICAgfVxuXSIsImNhcGFiaWxpdGllcyI6IkRlZXAgSW5zaWdodHMiLCJjYXRlZ29yaWVzIjoiU3RvcmFnZSIsImNvbnRhaW5lckltYWdlIjoicXVheS5pby9vY3MtZGV2L29jcy1vcGVyYXRvcjptYWluLWIxOGIyMzQiLCJkZXNjcmlwdGlvbiI6IlJlZCBIYXQgT3BlblNoaWZ0IENvbnRhaW5lciBTdG9yYWdlIHByb3ZpZGVzIGh5cGVyY29udmVyZ2VkIHN0b3JhZ2UgZm9yIGFwcGxpY2F0aW9ucyB3aXRoaW4gYW4gT3BlblNoaWZ0IGNsdXN0ZXIuIiwiZXh0ZXJuYWwuZmVhdHVyZXMub2NzLm9wZW5zaGlmdC5pby9zdXBwb3J0ZWQtcGxhdGZvcm1zIjoiW1wiQmFyZU1ldGFsXCIsIFwiTm9uZVwiLCBcIlZTcGhlcmVcIiwgXCJPcGVuU3RhY2tcIiwgXCJvVmlydFwiXSIsImV4dGVybmFsLmZlYXR1cmVzLm9jcy5vcGVuc2hpZnQuaW8vdmFsaWRhdGlvbiI6IntcInNlY3JldHNcIjpbXCJyb29rLWNlcGgtb3BlcmF0b3ItY3JlZHNcIiwgXCJyb29rLWNzaS1yYmQtbm9kZVwiLCBcInJvb2stY3NpLXJiZC1wcm92aXNpb25lclwiXSwgXCJjb25maWdNYXBzXCI6IFtcInJvb2stY2VwaC1tb24tZW5kcG9pbnRzXCIsIFwicm9vay1jZXBoLW1vblwiXSwgXCJzdG9yYWdlQ2xhc3Nlc1wiOiBbXCJjZXBoLXJiZFwiXSwgXCJjZXBoQ2x1c3RlcnNcIjogW1wibW9uaXRvcmluZy1lbmRwb2ludFwiXX0iLCJmZWF0dXJlcy5vY3Mub3BlbnNoaWZ0LmlvL2Rpc2FibGVkIjoiW1wic3MtbGlzdFwiLCBcImluc3RhbGwtd2l6YXJkXCIsIFwiYmxvY2stcG9vbFwiLCBcIm1jZy1yZXNvdXJjZVwiLCBcIm9kZi1kYXNoYm9hcmRcIiwgXCJjb21tb25cIiwgXCJzdG9yYWdlLXByb3ZpZGVyXCIsIFwic3RvcmFnZS1wcm92aXNpb25lclwiLCBcImRhc2hib2FyZC1yZXNvdXJjZXNcIiwgXCJjc3YtYWN0aW9uc1wiLCBcImludmVudG9yeS1pdGVtXCIsIFwiYWxlcnQtYWN0aW9uc1wiXSIsImZlYXR1cmVzLm9jcy5vcGVuc2hpZnQuaW8vZW5hYmxlZCI6IltcImttc1wiLCBcImFyYml0ZXJcIiwgXCJmbGV4aWJsZS1zY2FsaW5nXCIsIFwibXVsdHVzXCIsIFwicG9vbC1tYW5hZ2VtZW50XCIsIFwibmFtZXNwYWNlLXN0b3JlXCIsIFwibWNnLXN0YW5kYWxvbmVcIiwgXCJ0YWludC1ub2Rlc1wiLCBcInZhdWx0LXNhLWttc1wiLCBcImhwY3Mta21zXCJdIiwib2xtLnNraXBSYW5nZSI6Ilx1MDAzZT0wLjAuMSBcdTAwM2M0LjE3LjAiLCJvcGVyYXRvcmZyYW1ld29yay5pby9pbml0aWFsaXphdGlvbi1yZXNvdXJjZSI6IlxuICAgIHtcbiAgICAgICAgXCJhcGlWZXJzaW9uXCI6IFwib2NzLm9wZW5zaGlmdC5pby92MVwiLFxuICAgICAgICBcImtpbmRcIjogXCJTdG9yYWdlQ2x1c3RlclwiLFxuICAgICAgICBcIm1ldGFkYXRhXCI6IHtcbiAgICAgICAgICAgIFwibmFtZVwiOiBcImV4YW1wbGUtc3RvcmFnZWNsdXN0ZXJcIixcbiAgICAgICAgICAgIFwibmFtZXNwYWNlXCI6IFwib3BlbnNoaWZ0LXN0b3JhZ2VcIlxuICAgICAgICB9LFxuICAgICAgICBcInNwZWNcIjoge1xuICAgICAgICAgICAgXCJtYW5hZ2VOb2Rlc1wiOiBmYWxzZSxcbiAgICAgICAgICAgIFwibW9uUFZDVGVtcGxhdGVcIjoge1xuICAgICAgICAgICAgICAgIFwic3BlY1wiOiB7XG4gICAgICAgICAgICAgICAgICAgIFwiYWNjZXNzTW9kZXNcIjogW1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJSZWFkV3JpdGVPbmNlXCJcbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgXCJyZXNvdXJjZXNcIjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJyZXF1ZXN0c1wiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzdG9yYWdlXCI6IFwiMTBHaVwiXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIFwic3RvcmFnZUNsYXNzTmFtZVwiOiBcImdwMi1jc2lcIlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBcInN0b3JhZ2VEZXZpY2VTZXRzXCI6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIFwiY291bnRcIjogMyxcbiAgICAgICAgICAgICAgICAgICAgXCJkYXRhUFZDVGVtcGxhdGVcIjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJzcGVjXCI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImFjY2Vzc01vZGVzXCI6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJSZWFkV3JpdGVPbmNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicmVzb3VyY2VzXCI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJyZXF1ZXN0c1wiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInN0b3JhZ2VcIjogXCIxVGlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInN0b3JhZ2VDbGFzc05hbWVcIjogXCJncDItY3NpXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ2b2x1bWVNb2RlXCI6IFwiQmxvY2tcIlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBcIm5hbWVcIjogXCJleGFtcGxlLWRldmljZXNldFwiLFxuICAgICAgICAgICAgICAgICAgICBcInBsYWNlbWVudFwiOiB7fSxcbiAgICAgICAgICAgICAgICAgICAgXCJwb3J0YWJsZVwiOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBcInJlc291cmNlc1wiOiB7fVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgfVxuICAgIH1cblx0Iiwib3BlcmF0b3JmcmFtZXdvcmsuaW8vc3VnZ2VzdGVkLW5hbWVzcGFjZSI6Im9wZW5zaGlmdC1zdG9yYWdlIiwib3BlcmF0b3JzLm9wZW5zaGlmdC5pby9pbmZyYXN0cnVjdHVyZS1mZWF0dXJlcyI6IltcImRpc2Nvbm5lY3RlZFwiXSIsIm9wZXJhdG9ycy5vcGVyYXRvcmZyYW1ld29yay5pby9idWlsZGVyIjoib3BlcmF0b3Itc2RrLXYxLjI1LjQiLCJvcGVyYXRvcnMub3BlcmF0b3JmcmFtZXdvcmsuaW8vaW50ZXJuYWwtb2JqZWN0cyI6IltcIm9jc2luaXRpYWxpemF0aW9ucy5vY3Mub3BlbnNoaWZ0LmlvXCIsXCJzdG9yYWdlY29uc3VtZXJzLm9jcy5vcGVuc2hpZnQuaW9cIixcInN0b3JhZ2Vwcm9maWxlcy5vY3Mub3BlbnNoaWZ0LmlvXCIsXCJzdG9yYWdlcmVxdWVzdHMub2NzLm9wZW5zaGlmdC5pb1wiXSIsIm9wZXJhdG9ycy5vcGVyYXRvcmZyYW1ld29yay5pby9vcGVyYXRvci10eXBlIjoibm9uLXN0YW5kYWxvbmUiLCJvcGVyYXRvcnMub3BlcmF0b3JmcmFtZXdvcmsuaW8vcHJvamVjdF9sYXlvdXQiOiJnby5rdWJlYnVpbGRlci5pby92MyIsInJlcG9zaXRvcnkiOiJodHRwczovL2dpdGh1Yi5jb20vcmVkLWhhdC1zdG9yYWdlL29jcy1vcGVyYXRvciIsInN1cHBvcnQiOiJSZWQgSGF0In0sImxhYmVscyI6eyJvcGVyYXRvcmZyYW1ld29yay5pby9hcmNoLmFtZDY0Ijoic3VwcG9ydGVkIiwib3BlcmF0b3JmcmFtZXdvcmsuaW8vYXJjaC5wcGM2NGxlIjoic3VwcG9ydGVkIiwib3BlcmF0b3JmcmFtZXdvcmsuaW8vYXJjaC5zMzkweCI6InN1cHBvcnRlZCJ9LCJuYW1lIjoib2NzLW9wZXJhdG9yLnY0LjE3LjAiLCJuYW1lc3BhY2UiOiJwbGFjZWhvbGRlciJ9LCJzcGVjIjp7ImFwaXNlcnZpY2VkZWZpbml0aW9ucyI6e30sImNsZWFudXAiOnsiZW5hYmxlZCI6ZmFsc2V9LCJjdXN0b21yZXNvdXJjZWRlZmluaXRpb25zIjp7Im93bmVkIjpbeyJkZXNjcmlwdGlvbiI6Ik9DU0luaXRpYWxpemF0aW9uIHJlcHJlc2VudHMgdGhlIGluaXRpYWwgZGF0YSB0byBiZSBjcmVhdGVkIHdoZW4gdGhlIG9wZXJhdG9yIGlzIGluc3RhbGxlZC4iLCJkaXNwbGF5TmFtZSI6Ik9DUyBJbml0aWFsaXphdGlvbiIsImtpbmQiOiJPQ1NJbml0aWFsaXphdGlvbiIsIm5hbWUiOiJvY3Npbml0aWFsaXphdGlvbnMub2NzLm9wZW5zaGlmdC5pbyIsInZlcnNpb24iOiJ2MSJ9LHsiZGVzY3JpcHRpb24iOiJTdG9yYWdlQ2x1c3RlciByZXByZXNlbnRzIGEgY2x1c3RlciBpbmNsdWRpbmcgQ2VwaCBDbHVzdGVyLCBOb29CYWEgYW5kIGFsbCB0aGUgc3RvcmFnZSBhbmQgY29tcHV0ZSByZXNvdXJjZXMgcmVxdWlyZWQuIiwiZGlzcGxheU5hbWUiOiJTdG9yYWdlIENsdXN0ZXIiLCJraW5kIjoiU3RvcmFnZUNsdXN0ZXIiLCJuYW1lIjoic3RvcmFnZWNsdXN0ZXJzLm9jcy5vcGVuc2hpZnQuaW8iLCJyZXNvdXJjZXMiOlt7ImtpbmQiOiJDZXBoQ2x1c3RlciIsIm5hbWUiOiJjZXBoY2x1c3RlcnMuY2VwaC5yb29rLmlvIiwidmVyc2lvbiI6InYxIn0seyJraW5kIjoiTm9vQmFhIiwibmFtZSI6Im5vb2JhYXMubm9vYmFhLmlvIiwidmVyc2lvbiI6InYxYWxwaGExIn1dLCJ2ZXJzaW9uIjoidjEifSx7ImRlc2NyaXB0aW9uIjoiU3RvcmFnZUNvbnN1bWVyIGlzIHRoZSBTY2hlbWEgZm9yIHRoZSBzdG9yYWdlY29uc3VtZXJzIEFQSSIsImRpc3BsYXlOYW1lIjoiU3RvcmFnZSBDb25zdW1lciIsImtpbmQiOiJTdG9yYWdlQ29uc3VtZXIiLCJuYW1lIjoic3RvcmFnZWNvbnN1bWVycy5vY3Mub3BlbnNoaWZ0LmlvIiwidmVyc2lvbiI6InYxYWxwaGExIn0seyJkZXNjcmlwdGlvbiI6IlN0b3JhZ2VQcm9maWxlIGlzIHRoZSBTY2hlbWEgZm9yIHRoZSBzdG9yYWdlcHJvZmlsZXMgQVBJIiwiZGlzcGxheU5hbWUiOiJTdG9yYWdlIFByb2ZpbGUiLCJraW5kIjoiU3RvcmFnZVByb2ZpbGUiLCJuYW1lIjoic3RvcmFnZXByb2ZpbGVzLm9jcy5vcGVuc2hpZnQuaW8iLCJ2ZXJzaW9uIjoidjEifSx7ImRlc2NyaXB0aW9uIjoiU3RvcmFnZVJlcXVlc3QgaXMgdGhlIFNjaGVtYSBmb3IgdGhlIFN0b3JhZ2VSZXF1ZXN0cyBBUEkiLCJkaXNwbGF5TmFtZSI6IlN0b3JhZ2UgUmVxdWVzdCIsImtpbmQiOiJTdG9yYWdlUmVxdWVzdCIsIm5hbWUiOiJzdG9yYWdlcmVxdWVzdHMub2NzLm9wZW5zaGlmdC5pbyIsInZlcnNpb24iOiJ2MWFscGhhMSJ9XX0sImRlc2NyaXB0aW9uIjoiKipSZWQgSGF0IE9wZW5TaGlmdCBDb250YWluZXIgU3RvcmFnZSoqIGRlcGxveXMgdGhyZWUgb3BlcmF0b3JzLlxuXG4jIyMgT3BlblNoaWZ0IENvbnRhaW5lciBTdG9yYWdlIG9wZXJhdG9yXG5cblRoZSBPcGVuU2hpZnQgQ29udGFpbmVyIFN0b3JhZ2Ugb3BlcmF0b3IgaXMgdGhlIHByaW1hcnkgb3BlcmF0b3IgZm9yIE9wZW5TaGlmdCBDb250YWluZXIgU3RvcmFnZS4gSXQgc2VydmVzIHRvIGZhY2lsaXRhdGUgdGhlIG90aGVyIG9wZXJhdG9ycyBpbiBPcGVuU2hpZnQgQ29udGFpbmVyIFN0b3JhZ2UgYnkgcGVyZm9ybWluZyBhZG1pbmlzdHJhdGl2ZSB0YXNrcyBvdXRzaWRlIHRoZWlyIHNjb3BlIGFzIHdlbGwgYXMgd2F0Y2hpbmcgYW5kIGNvbmZpZ3VyaW5nIHRoZWlyIEN1c3RvbVJlc291cmNlcy5cblxuIyMjIFJvb2tcblxuW1Jvb2tdWzFdIGRlcGxveXMgYW5kIG1hbmFnZXMgQ2VwaCBvbiBPcGVuU2hpZnQsIHdoaWNoIHByb3ZpZGVzIGJsb2NrIGFuZCBmaWxlIHN0b3JhZ2UuXG5cbiMgQ29yZSBDYXBhYmlsaXRpZXNcblxuKiAqKlNlbGYtbWFuYWdpbmcgc2VydmljZToqKiBObyBtYXR0ZXIgd2hpY2ggc3VwcG9ydGVkIHN0b3JhZ2UgdGVjaG5vbG9naWVzIHlvdSBjaG9vc2UsIE9wZW5TaGlmdCBDb250YWluZXIgU3RvcmFnZSBlbnN1cmVzIHRoYXQgcmVzb3VyY2VzIGNhbiBiZSBkZXBsb3llZCBhbmQgbWFuYWdlZCBhdXRvbWF0aWNhbGx5LlxuXG4qICoqSHlwZXItc2NhbGUgb3IgaHlwZXItY29udmVyZ2VkOioqIFdpdGggT3BlblNoaWZ0IENvbnRhaW5lciBTdG9yYWdlIHlvdSBjYW4gZWl0aGVyIGJ1aWxkIGRlZGljYXRlZCBzdG9yYWdlIGNsdXN0ZXJzIG9yIGh5cGVyLWNvbnZlcmdlZCBjbHVzdGVycyB3aGVyZSB5b3VyIGFwcHMgcnVuIGFsb25nc2lkZSBzdG9yYWdlLlxuXG4qICoqRmlsZSwgQmxvY2ssIGFuZCBPYmplY3QgcHJvdmlkZWQgYnkgT3BlblNoaWZ0IENvbnRhaW5lciBTdG9yYWdlOioqIE9wZW5TaGlmdCBDb250YWluZXIgU3RvcmFnZSBpbnRlZ3JhdGVzIENlcGggd2l0aCBtdWx0aXBsZSBzdG9yYWdlIHByZXNlbnRhdGlvbnMgaW5jbHVkaW5nIG9iamVjdCBzdG9yYWdlIChjb21wYXRpYmxlIHdpdGggUzMpLCBibG9jayBzdG9yYWdlLCBhbmQgUE9TSVgtY29tcGxpYW50IHNoYXJlZCBmaWxlIHN5c3RlbS5cblxuKiAqKllvdXIgZGF0YSwgcHJvdGVjdGVkOioqIE9wZW5TaGlmdCBDb250YWluZXIgU3RvcmFnZSBlZmZpY2llbnRseSBkaXN0cmlidXRlcyBhbmQgcmVwbGljYXRlcyB5b3VyIGRhdGEgYWNyb3NzIHlvdXIgY2x1c3RlciB0byBtaW5pbWl6ZSB0aGUgcmlzayBvZiBkYXRhIGxvc3MuIFdpdGggc25hcHNob3RzLCBjbG9uaW5nLCBhbmQgdmVyc2lvbmluZywgbm8gbW9yZSBsb3Npbmcgc2xlZXAgb3ZlciB5b3VyIGRhdGEuXG5cbiogKipFbGFzdGljIHN0b3JhZ2UgaW4geW91ciBkYXRhY2VudGVyOioqIFNjYWxlIGlzIG5vdyBwb3NzaWJsZSBpbiB5b3VyIGRhdGFjZW50ZXIuIEdldCBzdGFydGVkIHdpdGggYSBmZXcgdGVyYWJ5dGVzLCBhbmQgZWFzaWx5IHNjYWxlIHVwLlxuXG4qICoqU2ltcGxpZmllZCBkYXRhIG1hbmFnZW1lbnQ6KiogRWFzaWx5IGNyZWF0ZSBoeWJyaWQgYW5kIG11bHRpLWNsb3VkIGRhdGEgc3RvcmFnZSBmb3IgeW91ciB3b3JrbG9hZHMsIHVzaW5nIGEgc2luZ2xlIG5hbWVzcGFjZS5cblxuWzFdOiBodHRwczovL3Jvb2suaW9cbiIsImRpc3BsYXlOYW1lIjoiT3BlblNoaWZ0IENvbnRhaW5lciBTdG9yYWdlIiwiaWNvbiI6W3siYmFzZTY0ZGF0YSI6IlBITjJaeUJwWkQwaVRHRjVaWEpmTVNJZ1pHRjBZUzF1WVcxbFBTSk1ZWGxsY2lBeElpQjRiV3h1Y3owaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNQzl6ZG1jaUlIWnBaWGRDYjNnOUlqQWdNQ0F4T1RJZ01UUTFJajQ4WkdWbWN6NDhjM1I1YkdVK0xtTnNjeTB4ZTJacGJHdzZJMlV3TUR0OVBDOXpkSGxzWlQ0OEwyUmxabk0rUEhScGRHeGxQbEpsWkVoaGRDMU1iMmR2TFVoaGRDMURiMnh2Y2p3dmRHbDBiR1UrUEhCaGRHZ2daRDBpVFRFMU55NDNOeXcyTWk0Mk1XRXhOQ3d4TkN3d0xEQXNNU3d1TXpFc015NDBNbU13TERFMExqZzRMVEU0TGpFc01UY3VORFl0TXpBdU5qRXNNVGN1TkRaRE56Z3VPRE1zT0RNdU5Ea3NOREl1TlRNc05UTXVNallzTkRJdU5UTXNORFJoTmk0ME15dzJMalF6TERBc01Dd3hMQzR5TWkweExqazBiQzB6TGpZMkxEa3VNRFpoTVRndU5EVXNNVGd1TkRVc01Dd3dMREF0TVM0MU1TdzNMak16WXpBc01UZ3VNVEVzTkRFc05EVXVORGdzT0RjdU56UXNORFV1TkRnc01qQXVOamtzTUN3ek5pNDBNeTAzTGpjMkxETTJMalF6TFRJeExqYzNMREF0TVM0d09Dd3dMVEV1T1RRdE1TNDNNeTB4TUM0eE0xb2lMejQ4Y0dGMGFDQmpiR0Z6Y3owaVkyeHpMVEVpSUdROUlrMHhNamN1TkRjc09ETXVORGxqTVRJdU5URXNNQ3d6TUM0Mk1TMHlMalU0TERNd0xqWXhMVEUzTGpRMllURTBMREUwTERBc01Dd3dMUzR6TVMwekxqUXliQzAzTGpRMUxUTXlMak0yWXkweExqY3lMVGN1TVRJdE15NHlNeTB4TUM0ek5TMHhOUzQzTXkweE5pNDJRekV5TkM0NE9TdzRMalk1TERFd015NDNOaTQxTERrM0xqVXhMalVzT1RFdU5qa3VOU3c1TUN3NExEZ3pMakEyTERoakxUWXVOamdzTUMweE1TNDJOQzAxTGpZdE1UY3VPRGt0TlM0MkxUWXNNQzA1TGpreExEUXVNRGt0TVRJdU9UTXNNVEl1TlN3d0xEQXRPQzQwTVN3eU15NDNNaTA1TGpRNUxESTNMakUyUVRZdU5ETXNOaTQwTXl3d0xEQXNNQ3cwTWk0MU15dzBOR013TERrdU1qSXNNell1TXl3ek9TNDBOU3c0TkM0NU5Dd3pPUzQwTlUweE5qQXNOekl1TURkak1TNDNNeXc0TGpFNUxERXVOek1zT1M0d05Td3hMamN6TERFd0xqRXpMREFzTVRRdE1UVXVOelFzTWpFdU56Y3RNell1TkRNc01qRXVOemRETnpndU5UUXNNVEEwTERNM0xqVTRMRGMyTGpZc016Y3VOVGdzTlRndU5EbGhNVGd1TkRVc01UZ3VORFVzTUN3d0xERXNNUzQxTVMwM0xqTXpRekl5TGpJM0xEVXlMQzQxTERVMUxDNDFMRGMwTGpJeVl6QXNNekV1TkRnc056UXVOVGtzTnpBdU1qZ3NNVE16TGpZMUxEY3dMakk0TERRMUxqSTRMREFzTlRZdU55MHlNQzQwT0N3MU5pNDNMVE0yTGpZMUxEQXRNVEl1TnpJdE1URXRNamN1TVRZdE16QXVPRE10TXpVdU56Z2lMejQ4TDNOMlp6ND0iLCJtZWRpYXR5cGUiOiJpbWFnZS9zdmcreG1sIn1dLCJpbnN0YWxsIjp7InNwZWMiOnsiY2x1c3RlclBlcm1pc3Npb25zIjpbeyJydWxlcyI6W3siYXBpR3JvdXBzIjpbImFwaWV4dGVuc2lvbnMuazhzLmlvIl0sInJlc291cmNlcyI6WyJjdXN0b21yZXNvdXJjZWRlZmluaXRpb25zIl0sInZlcmJzIjpbImNyZWF0ZSIsImdldCIsImxpc3QiLCJ1cGRhdGUiLCJ3YXRjaCJdfSx7ImFwaUdyb3VwcyI6WyJhcHBzIl0sInJlc291cmNlcyI6WyJkYWVtb25zZXRzIiwiZGVwbG95bWVudHMiLCJyZXBsaWNhc2V0cyIsInN0YXRlZnVsc2V0cyJdLCJ2ZXJicyI6WyIqIl19LHsiYXBpR3JvdXBzIjpbImJhdGNoIl0sInJlc291cmNlcyI6WyJjcm9uam9icyIsImpvYnMiXSwidmVyYnMiOlsiY3JlYXRlIiwiZGVsZXRlIiwiZ2V0IiwibGlzdCIsInVwZGF0ZSIsIndhdGNoIl19LHsiYXBpR3JvdXBzIjpbImNlcGgucm9vay5pbyJdLCJyZXNvdXJjZXMiOlsiY2VwaGJsb2NrcG9vbHJhZG9zbmFtZXNwYWNlcyJdLCJ2ZXJicyI6WyJjcmVhdGUiLCJkZWxldGUiLCJnZXQiLCJsaXN0IiwidXBkYXRlIiwid2F0Y2giXX0seyJhcGlHcm91cHMiOlsiY2VwaC5yb29rLmlvIl0sInJlc291cmNlcyI6WyJjZXBoYmxvY2twb29scmFkb3NuYW1lc3BhY2VzIiwiY2VwaGJsb2NrcG9vbHMiLCJjZXBoY2x1c3RlcnMiLCJjZXBoZmlsZXN5c3RlbXMiLCJjZXBobmZzZXMiLCJjZXBob2JqZWN0c3RvcmVzIiwiY2VwaG9iamVjdHN0b3JldXNlcnMiLCJjZXBocmJkbWlycm9ycyJdLCJ2ZXJicyI6WyIqIl19LHsiYXBpR3JvdXBzIjpbImNlcGgucm9vay5pbyJdLCJyZXNvdXJjZXMiOlsiY2VwaGNsaWVudHMiXSwidmVyYnMiOlsiY3JlYXRlIiwiZGVsZXRlIiwiZ2V0IiwibGlzdCIsInVwZGF0ZSIsIndhdGNoIl19LHsiYXBpR3JvdXBzIjpbImNlcGgucm9vay5pbyJdLCJyZXNvdXJjZXMiOlsiY2VwaGZpbGVzeXN0ZW1zdWJ2b2x1bWVncm91cHMiXSwidmVyYnMiOlsiY3JlYXRlIiwiZGVsZXRlIiwiZ2V0IiwibGlzdCIsInVwZGF0ZSIsIndhdGNoIl19LHsiYXBpR3JvdXBzIjpbImNvbmZpZy5vcGVuc2hpZnQuaW8iXSwicmVzb3VyY2VzIjpbImNsdXN0ZXJ2ZXJzaW9ucyIsIm5ldHdvcmtzIl0sInZlcmJzIjpbImdldCIsImxpc3QiLCJ3YXRjaCJdfSx7ImFwaUdyb3VwcyI6WyJjb25maWcub3BlbnNoaWZ0LmlvIl0sInJlc291cmNlcyI6WyJpbmZyYXN0cnVjdHVyZXMiLCJuZXR3b3JrcyJdLCJ2ZXJicyI6WyJnZXQiLCJsaXN0Iiwid2F0Y2giXX0seyJhcGlHcm91cHMiOlsiY29uc29sZS5vcGVuc2hpZnQuaW8iXSwicmVzb3VyY2VzIjpbImNvbnNvbGVxdWlja3N0YXJ0cyJdLCJ2ZXJicyI6WyIqIl19LHsiYXBpR3JvdXBzIjpbImNvb3JkaW5hdGlvbi5rOHMuaW8iXSwicmVzb3VyY2VzIjpbImxlYXNlcyJdLCJ2ZXJicyI6WyJjcmVhdGUiLCJnZXQiLCJsaXN0IiwidXBkYXRlIl19LHsiYXBpR3JvdXBzIjpbIiJdLCJyZXNvdXJjZXMiOlsiY29uZmlnbWFwcyIsImVuZHBvaW50cyIsImV2ZW50cyIsIm5vZGVzIiwicGVyc2lzdGVudHZvbHVtZWNsYWltcyIsInBlcnNpc3RlbnR2b2x1bWVzIiwicG9kcyIsInNlY3JldHMiLCJzZXJ2aWNlYWNjb3VudHMiLCJzZXJ2aWNlcyJdLCJ2ZXJicyI6WyIqIl19LHsiYXBpR3JvdXBzIjpbIiJdLCJyZXNvdXJjZXMiOlsibmFtZXNwYWNlcyJdLCJ2ZXJicyI6WyJnZXQiXX0seyJhcGlHcm91cHMiOlsiIl0sInJlc291cmNlcyI6WyJwZXJzaXN0ZW50dm9sdW1lcyJdLCJ2ZXJicyI6WyJnZXQiLCJsaXN0Iiwid2F0Y2giXX0seyJhcGlHcm91cHMiOlsiazhzLmNuaS5jbmNmLmlvIl0sInJlc291cmNlcyI6WyJuZXR3b3JrLWF0dGFjaG1lbnQtZGVmaW5pdGlvbnMiXSwidmVyYnMiOlsiZ2V0IiwibGlzdCIsIndhdGNoIl19LHsiYXBpR3JvdXBzIjpbIm1vbml0b3JpbmcuY29yZW9zLmNvbSJdLCJyZXNvdXJjZXMiOlsiYWxlcnRtYW5hZ2VycyIsInByb21ldGhldXNlcyJdLCJ2ZXJicyI6WyJjcmVhdGUiLCJkZWxldGUiLCJnZXQiLCJsaXN0IiwicGF0Y2giLCJ1cGRhdGUiLCJ3YXRjaCJdfSx7ImFwaUdyb3VwcyI6WyJtb25pdG9yaW5nLmNvcmVvcy5jb20iXSwicmVzb3VyY2VzIjpbInByb21ldGhldXNydWxlcyIsInNlcnZpY2Vtb25pdG9ycyJdLCJ2ZXJicyI6WyJjcmVhdGUiLCJkZWxldGUiLCJnZXQiLCJsaXN0IiwidXBkYXRlIiwid2F0Y2giXX0seyJhcGlHcm91cHMiOlsibW9uaXRvcmluZy5jb3Jlb3MuY29tIl0sInJlc291cmNlcyI6WyJzZXJ2aWNlbW9uaXRvcnMiXSwidmVyYnMiOlsiY3JlYXRlIiwiZGVsZXRlIiwiZ2V0IiwibGlzdCIsInBhdGNoIiwidXBkYXRlIiwid2F0Y2giXX0seyJhcGlHcm91cHMiOlsibm9vYmFhLmlvIl0sInJlc291cmNlcyI6WyJub29iYWFzIl0sInZlcmJzIjpbIioiXX0seyJhcGlHcm91cHMiOlsib2JqZWN0YnVja2V0LmlvIl0sInJlc291cmNlcyI6WyJvYmplY3RidWNrZXRjbGFpbXMiLCJvYmplY3RidWNrZXRzIl0sInZlcmJzIjpbImdldCIsImxpc3QiLCJ3YXRjaCJdfSx7ImFwaUdyb3VwcyI6WyJvY3Mub3BlbnNoaWZ0LmlvIl0sInJlc291cmNlcyI6WyIqIl0sInZlcmJzIjpbImNyZWF0ZSIsImRlbGV0ZSIsImdldCIsImxpc3QiLCJwYXRjaCIsInVwZGF0ZSIsIndhdGNoIl19LHsiYXBpR3JvdXBzIjpbIm9jcy5vcGVuc2hpZnQuaW8iXSwicmVzb3VyY2VzIjpbInN0b3JhZ2VjbHVzdGVycyJdLCJ2ZXJicyI6WyJnZXQiLCJsaXN0Iiwid2F0Y2giXX0seyJhcGlHcm91cHMiOlsib2NzLm9wZW5zaGlmdC5pbyJdLCJyZXNvdXJjZXMiOlsic3RvcmFnZWNvbnN1bWVycyJdLCJ2ZXJicyI6WyJjcmVhdGUiLCJkZWxldGUiLCJnZXQiLCJsaXN0IiwicGF0Y2giLCJ1cGRhdGUiLCJ3YXRjaCJdfSx7ImFwaUdyb3VwcyI6WyJvY3Mub3BlbnNoaWZ0LmlvIl0sInJlc291cmNlcyI6WyJzdG9yYWdlY29uc3VtZXJzL3N0YXR1cyJdLCJ2ZXJicyI6WyJnZXQiLCJwYXRjaCIsInVwZGF0ZSJdfSx7ImFwaUdyb3VwcyI6WyJvY3Mub3BlbnNoaWZ0LmlvIl0sInJlc291cmNlcyI6WyJzdG9yYWdlcmVxdWVzdHMiXSwidmVyYnMiOlsiY3JlYXRlIiwiZGVsZXRlIiwiZ2V0IiwibGlzdCIsInBhdGNoIiwidXBkYXRlIiwid2F0Y2giXX0seyJhcGlHcm91cHMiOlsib2NzLm9wZW5zaGlmdC5pbyJdLCJyZXNvdXJjZXMiOlsic3RvcmFnZXJlcXVlc3RzL3N0YXR1cyJdLCJ2ZXJicyI6WyJnZXQiLCJwYXRjaCIsInVwZGF0ZSJdfSx7ImFwaUdyb3VwcyI6WyJvcGVyYXRvcnMuY29yZW9zLmNvbSJdLCJyZXNvdXJjZXMiOlsiY2x1c3RlcnNlcnZpY2V2ZXJzaW9ucyJdLCJ2ZXJicyI6WyJkZWxldGUiLCJnZXQiLCJsaXN0IiwicGF0Y2giLCJ1cGRhdGUiLCJ3YXRjaCJdfSx7ImFwaUdyb3VwcyI6WyJvcGVyYXRvcnMuY29yZW9zLmNvbSJdLCJyZXNvdXJjZXMiOlsib3BlcmF0b3Jjb25kaXRpb25zIl0sInZlcmJzIjpbImNyZWF0ZSIsImRlbGV0ZSIsImdldCIsImxpc3QiLCJwYXRjaCIsInVwZGF0ZSIsIndhdGNoIl19LHsiYXBpR3JvdXBzIjpbInF1b3RhLm9wZW5zaGlmdC5pbyJdLCJyZXNvdXJjZXMiOlsiY2x1c3RlcnJlc291cmNlcXVvdGFzIl0sInZlcmJzIjpbIioiXX0seyJhcGlHcm91cHMiOlsicmJhYy5hdXRob3JpemF0aW9uLms4cy5pbyJdLCJyZXNvdXJjZXMiOlsiY2x1c3RlcnJvbGViaW5kaW5ncyIsImNsdXN0ZXJyb2xlcyIsInJvbGViaW5kaW5ncyIsInJvbGVzIl0sInZlcmJzIjpbImNyZWF0ZSIsImRlbGV0ZSIsImdldCIsImxpc3QiLCJwYXRjaCIsInVwZGF0ZSIsIndhdGNoIl19LHsiYXBpR3JvdXBzIjpbInJvdXRlLm9wZW5zaGlmdC5pbyJdLCJyZXNvdXJjZXMiOlsicm91dGVzIl0sInZlcmJzIjpbIioiXX0seyJhcGlHcm91cHMiOlsic2VjdXJpdHkub3BlbnNoaWZ0LmlvIl0sInJlc291cmNlcyI6WyJzZWN1cml0eWNvbnRleHRjb25zdHJhaW50cyJdLCJ2ZXJicyI6WyJjcmVhdGUiLCJnZXQiLCJ1cGRhdGUiXX0seyJhcGlHcm91cHMiOlsic2VjdXJpdHkub3BlbnNoaWZ0LmlvIl0sInJlc291cmNlTmFtZXMiOlsicHJpdmlsZWdlZCJdLCJyZXNvdXJjZXMiOlsic2VjdXJpdHljb250ZXh0Y29uc3RyYWludHMiXSwidmVyYnMiOlsiY3JlYXRlIiwiZ2V0IiwidXBkYXRlIl19LHsiYXBpR3JvdXBzIjpbInNuYXBzaG90LnN0b3JhZ2UuazhzLmlvIl0sInJlc291cmNlcyI6WyJ2b2x1bWVzbmFwc2hvdGNsYXNzZXMiXSwidmVyYnMiOlsiY3JlYXRlIiwiZGVsZXRlIiwiZ2V0IiwibGlzdCIsIndhdGNoIl19LHsiYXBpR3JvdXBzIjpbInNuYXBzaG90LnN0b3JhZ2UuazhzLmlvIl0sInJlc291cmNlcyI6WyJ2b2x1bWVzbmFwc2hvdGNsYXNzZXMiLCJ2b2x1bWVzbmFwc2hvdHMiXSwidmVyYnMiOlsiKiJdfSx7ImFwaUdyb3VwcyI6WyJzdG9yYWdlLms4cy5pbyJdLCJyZXNvdXJjZXMiOlsic3RvcmFnZWNsYXNzZXMiXSwidmVyYnMiOlsiKiIsImNyZWF0ZSIsImRlbGV0ZSIsImdldCIsImxpc3QiLCJwYXRjaCIsInVwZGF0ZSIsIndhdGNoIl19LHsiYXBpR3JvdXBzIjpbInRlbXBsYXRlLm9wZW5zaGlmdC5pbyJdLCJyZXNvdXJjZXMiOlsidGVtcGxhdGVzIl0sInZlcmJzIjpbIioiXX1dLCJzZXJ2aWNlQWNjb3VudE5hbWUiOiJvY3Mtb3BlcmF0b3IifSx7InJ1bGVzIjpbeyJhcGlHcm91cHMiOlsiYXV0aGVudGljYXRpb24uazhzLmlvIl0sInJlc291cmNlcyI6WyJ0b2tlbnJldmlld3MiXSwidmVyYnMiOlsiY3JlYXRlIl19LHsiYXBpR3JvdXBzIjpbImF1dGhvcml6YXRpb24uazhzLmlvIl0sInJlc291cmNlcyI6WyJzdWJqZWN0YWNjZXNzcmV2aWV3cyJdLCJ2ZXJicyI6WyJjcmVhdGUiXX1dLCJzZXJ2aWNlQWNjb3VudE5hbWUiOiJ1eC1iYWNrZW5kLXNlcnZlciJ9XSwiZGVwbG95bWVudHMiOlt7Im5hbWUiOiJvY3Mtb3BlcmF0b3IiLCJzcGVjIjp7InJlcGxpY2FzIjoxLCJzZWxlY3RvciI6eyJtYXRjaExhYmVscyI6eyJuYW1lIjoib2NzLW9wZXJhdG9yIn19LCJzdHJhdGVneSI6eyJ0eXBlIjoiUmVjcmVhdGUifSwidGVtcGxhdGUiOnsibWV0YWRhdGEiOnsibGFiZWxzIjp7Im5hbWUiOiJvY3Mtb3BlcmF0b3IifX0sInNwZWMiOnsiY29udGFpbmVycyI6W3siYXJncyI6WyItLWVuYWJsZS1sZWFkZXItZWxlY3Rpb24iLCItLWhlYWx0aC1wcm9iZS1iaW5kLWFkZHJlc3M9OjgwODEiXSwiY29tbWFuZCI6WyJvY3Mtb3BlcmF0b3IiXSwiZW52IjpbeyJuYW1lIjoiV0FUQ0hfTkFNRVNQQUNFIiwidmFsdWVGcm9tIjp7ImZpZWxkUmVmIjp7ImZpZWxkUGF0aCI6Im1ldGFkYXRhLmFubm90YXRpb25zWydvbG0udGFyZ2V0TmFtZXNwYWNlcyddIn19fSx7Im5hbWUiOiJPQ1NfTUVUUklDU19FWFBPUlRFUl9JTUFHRSIsInZhbHVlIjoicXVheS5pby9vY3MtZGV2L29jcy1tZXRyaWNzLWV4cG9ydGVyOm1haW4tYjE4YjIzNCJ9LHsibmFtZSI6IlJPT0tfQ0VQSF9JTUFHRSIsInZhbHVlIjoicXVheS5pby9vY3MtZGV2L3Jvb2stY2VwaDp2bWFzdGVyLTc1MTgwZjRmMyJ9LHsibmFtZSI6IkNFUEhfSU1BR0UiLCJ2YWx1ZSI6InF1YXkuaW8vY2VwaC9jZXBoOnYxOC4yLjAifSx7Im5hbWUiOiJOT09CQUFfQ09SRV9JTUFHRSIsInZhbHVlIjoicXVheS5pby9ub29iYWEvbm9vYmFhLWNvcmU6bWFzdGVyLTIwMjQwMTA4In0seyJuYW1lIjoiTk9PQkFBX0RCX0lNQUdFIiwidmFsdWUiOiJkb2NrZXIuaW8vY2VudG9zL3Bvc3RncmVzcWwtMTItY2VudG9zOCJ9LHsibmFtZSI6IlBST1ZJREVSX0FQSV9TRVJWRVJfSU1BR0UiLCJ2YWx1ZSI6InF1YXkuaW8vb2NzLWRldi9vY3Mtb3BlcmF0b3I6bWFpbi1iMThiMjM0In0seyJuYW1lIjoiT05CT0FSRElOR19WQUxJREFUSU9OX0tFWVNfR0VORVJBVE9SX0lNQUdFIiwidmFsdWUiOiJxdWF5LmlvL29jcy1kZXYvb2NzLW9wZXJhdG9yOm1haW4tYjE4YjIzNCJ9LHsibmFtZSI6Ik9QRVJBVE9SX05BTUVTUEFDRSIsInZhbHVlRnJvbSI6eyJmaWVsZFJlZiI6eyJmaWVsZFBhdGgiOiJtZXRhZGF0YS5uYW1lc3BhY2UifX19XSwiaW1hZ2UiOiJxdWF5LmlvL29jcy1kZXYvb2NzLW9wZXJhdG9yOm1haW4tYjE4YjIzNCIsImltYWdlUHVsbFBvbGljeSI6IkFsd2F5cyIsIm5hbWUiOiJvY3Mtb3BlcmF0b3IiLCJyZWFkaW5lc3NQcm9iZSI6eyJodHRwR2V0Ijp7InBhdGgiOiIvcmVhZHl6IiwicG9ydCI6ODA4MX0sImluaXRpYWxEZWxheVNlY29uZHMiOjUsInBlcmlvZFNlY29uZHMiOjEwfSwicmVzb3VyY2VzIjp7fSwic2VjdXJpdHlDb250ZXh0Ijp7ImFsbG93UHJpdmlsZWdlRXNjYWxhdGlvbiI6ZmFsc2UsImNhcGFiaWxpdGllcyI6eyJkcm9wIjpbImFsbCJdfSwicmVhZE9ubHlSb290RmlsZXN5c3RlbSI6dHJ1ZX0sInZvbHVtZU1vdW50cyI6W3sibW91bnRQYXRoIjoiL2V0Yy9wcml2YXRlLWtleSIsIm5hbWUiOiJvbmJvYXJkaW5nLXByaXZhdGUta2V5In1dfV0sInNlY3VyaXR5Q29udGV4dCI6eyJydW5Bc05vblJvb3QiOnRydWV9LCJzZXJ2aWNlQWNjb3VudE5hbWUiOiJvY3Mtb3BlcmF0b3IiLCJ0ZXJtaW5hdGlvbkdyYWNlUGVyaW9kU2Vjb25kcyI6MTAsInRvbGVyYXRpb25zIjpbeyJlZmZlY3QiOiJOb1NjaGVkdWxlIiwia2V5Ijoibm9kZS5vY3Mub3BlbnNoaWZ0LmlvL3N0b3JhZ2UiLCJvcGVyYXRvciI6IkVxdWFsIiwidmFsdWUiOiJ0cnVlIn1dLCJ2b2x1bWVzIjpbeyJuYW1lIjoib25ib2FyZGluZy1wcml2YXRlLWtleSIsInNlY3JldCI6eyJvcHRpb25hbCI6dHJ1ZSwic2VjcmV0TmFtZSI6Im9uYm9hcmRpbmctcHJpdmF0ZS1rZXkifX1dfX19fSx7Im5hbWUiOiJ1eC1iYWNrZW5kLXNlcnZlciIsInNwZWMiOnsicmVwbGljYXMiOjEsInNlbGVjdG9yIjp7Im1hdGNoTGFiZWxzIjp7ImFwcCI6InV4LWJhY2tlbmQtc2VydmVyIiwiYXBwLmt1YmVybmV0ZXMuaW8vY29tcG9uZW50IjoidXgtYmFja2VuZC1zZXJ2ZXIiLCJhcHAua3ViZXJuZXRlcy5pby9uYW1lIjoidXgtYmFja2VuZC1zZXJ2ZXIifX0sInN0cmF0ZWd5Ijp7InR5cGUiOiJSZWNyZWF0ZSJ9LCJ0ZW1wbGF0ZSI6eyJtZXRhZGF0YSI6eyJsYWJlbHMiOnsiYXBwIjoidXgtYmFja2VuZC1zZXJ2ZXIiLCJhcHAua3ViZXJuZXRlcy5pby9jb21wb25lbnQiOiJ1eC1iYWNrZW5kLXNlcnZlciIsImFwcC5rdWJlcm5ldGVzLmlvL25hbWUiOiJ1eC1iYWNrZW5kLXNlcnZlciJ9fSwic3BlYyI6eyJjb250YWluZXJzIjpbeyJjb21tYW5kIjpbIi91c3IvbG9jYWwvYmluL3V4LWJhY2tlbmQtc2VydmVyIl0sImVudiI6W3sibmFtZSI6Ik9OQk9BUkRJTkdfVE9LRU5fTElGRVRJTUUifSx7Im5hbWUiOiJVWF9CQUNLRU5EX1BPUlQifSx7Im5hbWUiOiJUTFNfRU5BQkxFRCJ9XSwiaW1hZ2UiOiJxdWF5LmlvL29jcy1kZXYvb2NzLW9wZXJhdG9yOm1haW4tYjE4YjIzNCIsImltYWdlUHVsbFBvbGljeSI6IklmTm90UHJlc2VudCIsIm5hbWUiOiJ1eC1iYWNrZW5kLXNlcnZlciIsInBvcnRzIjpbeyJjb250YWluZXJQb3J0Ijo4MDgwfV0sInJlc291cmNlcyI6e30sInNlY3VyaXR5Q29udGV4dCI6eyJyZWFkT25seVJvb3RGaWxlc3lzdGVtIjp0cnVlLCJydW5Bc05vblJvb3QiOnRydWV9LCJ2b2x1bWVNb3VudHMiOlt7Im1vdW50UGF0aCI6Ii9ldGMvcHJpdmF0ZS1rZXkiLCJuYW1lIjoib25ib2FyZGluZy1wcml2YXRlLWtleSJ9LHsibW91bnRQYXRoIjoiL2V0Yy90bHMvcHJpdmF0ZSIsIm5hbWUiOiJ1eC1jZXJ0LXNlY3JldCJ9XX0seyJhcmdzIjpbIi1wcm92aWRlcj1vcGVuc2hpZnQiLCItaHR0cHMtYWRkcmVzcz06ODg4OCIsIi1odHRwLWFkZHJlc3M9IiwiLWVtYWlsLWRvbWFpbj0qIiwiLXVwc3RyZWFtPWh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8iLCItdGxzLWNlcnQ9L2V0Yy90bHMvcHJpdmF0ZS90bHMuY3J0IiwiLXRscy1rZXk9L2V0Yy90bHMvcHJpdmF0ZS90bHMua2V5IiwiLWNvb2tpZS1zZWNyZXQtZmlsZT0vZXRjL3Byb3h5L3NlY3JldHMvc2Vzc2lvbl9zZWNyZXQiLCItb3BlbnNoaWZ0LXNlcnZpY2UtYWNjb3VudD11eC1iYWNrZW5kLXNlcnZlciIsIi1vcGVuc2hpZnQtZGVsZWdhdGUtdXJscz17XCIvXCI6e1wiZ3JvdXBcIjpcIm9jcy5vcGVuc2hpZnQuaW9cIixcInJlc291cmNlXCI6XCJzdG9yYWdlY2x1c3RlcnNcIixcIm5hbWVzcGFjZVwiOlwib3BlbnNoaWZ0LXN0b3JhZ2VcIixcInZlcmJcIjpcImNyZWF0ZVwifX0iLCItb3BlbnNoaWZ0LWNhPS92YXIvcnVuL3NlY3JldHMva3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9jYS5jcnQiXSwiaW1hZ2UiOiJxdWF5LmlvL29wZW5zaGlmdC9vcmlnaW4tb2F1dGgtcHJveHk6NC4xNi4wIiwiaW1hZ2VQdWxsUG9saWN5IjoiSWZOb3RQcmVzZW50IiwibmFtZSI6Im9hdXRoLXByb3h5IiwicG9ydHMiOlt7ImNvbnRhaW5lclBvcnQiOjg4ODh9XSwicmVzb3VyY2VzIjp7fSwic2VjdXJpdHlDb250ZXh0Ijp7InJlYWRPbmx5Um9vdEZpbGVzeXN0ZW0iOnRydWUsInJ1bkFzTm9uUm9vdCI6dHJ1ZX0sInZvbHVtZU1vdW50cyI6W3sibW91bnRQYXRoIjoiL2V0Yy9wcm94eS9zZWNyZXRzIiwibmFtZSI6InV4LXByb3h5LXNlY3JldCJ9LHsibW91bnRQYXRoIjoiL2V0Yy90bHMvcHJpdmF0ZSIsIm5hbWUiOiJ1eC1jZXJ0LXNlY3JldCJ9XX1dLCJzZXJ2aWNlQWNjb3VudE5hbWUiOiJ1eC1iYWNrZW5kLXNlcnZlciIsInRvbGVyYXRpb25zIjpbeyJlZmZlY3QiOiJOb1NjaGVkdWxlIiwia2V5Ijoibm9kZS5vY3Mub3BlbnNoaWZ0LmlvL3N0b3JhZ2UiLCJvcGVyYXRvciI6IkVxdWFsIiwidmFsdWUiOiJ0cnVlIn1dLCJ2b2x1bWVzIjpbeyJuYW1lIjoib25ib2FyZGluZy1wcml2YXRlLWtleSIsInNlY3JldCI6eyJvcHRpb25hbCI6dHJ1ZSwic2VjcmV0TmFtZSI6Im9uYm9hcmRpbmctcHJpdmF0ZS1rZXkifX0seyJuYW1lIjoidXgtcHJveHktc2VjcmV0Iiwic2VjcmV0Ijp7InNlY3JldE5hbWUiOiJ1eC1iYWNrZW5kLXByb3h5In19LHsibmFtZSI6InV4LWNlcnQtc2VjcmV0Iiwic2VjcmV0Ijp7InNlY3JldE5hbWUiOiJ1eC1jZXJ0LXNlY3JldCJ9fV19fX19XX0sInN0cmF0ZWd5IjoiZGVwbG95bWVudCJ9LCJpbnN0YWxsTW9kZXMiOlt7InN1cHBvcnRlZCI6dHJ1ZSwidHlwZSI6Ik93bk5hbWVzcGFjZSJ9LHsic3VwcG9ydGVkIjp0cnVlLCJ0eXBlIjoiU2luZ2xlTmFtZXNwYWNlIn0seyJzdXBwb3J0ZWQiOmZhbHNlLCJ0eXBlIjoiTXVsdGlOYW1lc3BhY2UifSx7InN1cHBvcnRlZCI6ZmFsc2UsInR5cGUiOiJBbGxOYW1lc3BhY2VzIn1dLCJrZXl3b3JkcyI6WyJzdG9yYWdlIiwicm9vayIsImNlcGgiLCJibG9jayBzdG9yYWdlIiwic2hhcmVkIGZpbGVzeXN0ZW0iLCJvYmplY3Qgc3RvcmFnZSJdLCJsaW5rcyI6W3sibmFtZSI6IlNvdXJjZSBDb2RlIiwidXJsIjoiaHR0cHM6Ly9naXRodWIuY29tL3JlZC1oYXQtc3RvcmFnZS9vY3Mtb3BlcmF0b3IifV0sIm1haW50YWluZXJzIjpbeyJlbWFpbCI6Im9jcy1zdXBwb3J0QHJlZGhhdC5jb20iLCJuYW1lIjoiUmVkIEhhdCBTdXBwb3J0In1dLCJtYXR1cml0eSI6ImFscGhhIiwibWluS3ViZVZlcnNpb24iOiIxLjE2LjAiLCJwcm92aWRlciI6eyJuYW1lIjoiUmVkIEhhdCJ9LCJyZWxhdGVkSW1hZ2VzIjpbeyJpbWFnZSI6InF1YXkuaW8vb2NzLWRldi9yb29rLWNlcGg6dm1hc3Rlci03NTE4MGY0ZjMiLCJuYW1lIjoicm9vay1jb250YWluZXIifSx7ImltYWdlIjoicXVheS5pby9jZXBoL2NlcGg6djE4LjIuMCIsIm5hbWUiOiJjZXBoLWNvbnRhaW5lciJ9LHsiaW1hZ2UiOiJxdWF5LmlvL29jcy1kZXYvb2NzLW11c3QtZ2F0aGVyOmxhdGVzdCIsIm5hbWUiOiJvY3MtbXVzdC1nYXRoZXIifSx7ImltYWdlIjoicXVheS5pby9vY3MtZGV2L29jcy1tZXRyaWNzLWV4cG9ydGVyOm1haW4tYjE4YjIzNCIsIm5hbWUiOiJvY3MtbWV0cmljcy1leHBvcnRlciJ9LHsiaW1hZ2UiOiJxdWF5LmlvL29wZW5zaGlmdC9vcmlnaW4tb2F1dGgtcHJveHk6NC4xNi4wIiwibmFtZSI6InV4LWJhY2tlbmQtb2F1dGgtaW1hZ2UifV0sInZlcnNpb24iOiI0LjE3LjAifX0= - type: olm.bundle.object value: data: eyJhcGlWZXJzaW9uIjoiYXBpZXh0ZW5zaW9ucy5rOHMuaW8vdjEiLCJraW5kIjoiQ3VzdG9tUmVzb3VyY2VEZWZpbml0aW9uIiwibWV0YWRhdGEiOnsiYW5ub3RhdGlvbnMiOnsiY29udHJvbGxlci1nZW4ua3ViZWJ1aWxkZXIuaW8vdmVyc2lvbiI6InYwLjkuMiJ9LCJuYW1lIjoib2NzaW5pdGlhbGl6YXRpb25zLm9jcy5vcGVuc2hpZnQuaW8ifSwic3BlYyI6eyJncm91cCI6Im9jcy5vcGVuc2hpZnQuaW8iLCJuYW1lcyI6eyJraW5kIjoiT0NTSW5pdGlhbGl6YXRpb24iLCJsaXN0S2luZCI6Ik9DU0luaXRpYWxpemF0aW9uTGlzdCIsInBsdXJhbCI6Im9jc2luaXRpYWxpemF0aW9ucyIsInNpbmd1bGFyIjoib2NzaW5pdGlhbGl6YXRpb24ifSwic2NvcGUiOiJOYW1lc3BhY2VkIiwidmVyc2lvbnMiOlt7ImFkZGl0aW9uYWxQcmludGVyQ29sdW1ucyI6W3sianNvblBhdGgiOiIubWV0YWRhdGEuY3JlYXRpb25UaW1lc3RhbXAiLCJuYW1lIjoiQWdlIiwidHlwZSI6ImRhdGUifSx7ImRlc2NyaXB0aW9uIjoiQ3VycmVudCBQaGFzZSIsImpzb25QYXRoIjoiLnN0YXR1cy5waGFzZSIsIm5hbWUiOiJQaGFzZSIsInR5cGUiOiJzdHJpbmcifSx7Impzb25QYXRoIjoiLm1ldGFkYXRhLmNyZWF0aW9uVGltZXN0YW1wIiwibmFtZSI6IkNyZWF0ZWQgQXQiLCJ0eXBlIjoic3RyaW5nIn1dLCJuYW1lIjoidjEiLCJzY2hlbWEiOnsib3BlbkFQSVYzU2NoZW1hIjp7ImRlc2NyaXB0aW9uIjoiT0NTSW5pdGlhbGl6YXRpb24gcmVwcmVzZW50cyB0aGUgaW5pdGlhbCBkYXRhIHRvIGJlIGNyZWF0ZWQgd2hlbiB0aGUgb3BlcmF0b3IgaXMgaW5zdGFsbGVkLiIsInByb3BlcnRpZXMiOnsiYXBpVmVyc2lvbiI6eyJkZXNjcmlwdGlvbiI6IkFQSVZlcnNpb24gZGVmaW5lcyB0aGUgdmVyc2lvbmVkIHNjaGVtYSBvZiB0aGlzIHJlcHJlc2VudGF0aW9uIG9mIGFuIG9iamVjdC4gU2VydmVycyBzaG91bGQgY29udmVydCByZWNvZ25pemVkIHNjaGVtYXMgdG8gdGhlIGxhdGVzdCBpbnRlcm5hbCB2YWx1ZSwgYW5kIG1heSByZWplY3QgdW5yZWNvZ25pemVkIHZhbHVlcy4gTW9yZSBpbmZvOiBodHRwczovL2dpdC5rOHMuaW8vY29tbXVuaXR5L2NvbnRyaWJ1dG9ycy9kZXZlbC9zaWctYXJjaGl0ZWN0dXJlL2FwaS1jb252ZW50aW9ucy5tZCNyZXNvdXJjZXMiLCJ0eXBlIjoic3RyaW5nIn0sImtpbmQiOnsiZGVzY3JpcHRpb24iOiJLaW5kIGlzIGEgc3RyaW5nIHZhbHVlIHJlcHJlc2VudGluZyB0aGUgUkVTVCByZXNvdXJjZSB0aGlzIG9iamVjdCByZXByZXNlbnRzLiBTZXJ2ZXJzIG1heSBpbmZlciB0aGlzIGZyb20gdGhlIGVuZHBvaW50IHRoZSBjbGllbnQgc3VibWl0cyByZXF1ZXN0cyB0by4gQ2Fubm90IGJlIHVwZGF0ZWQuIEluIENhbWVsQ2FzZS4gTW9yZSBpbmZvOiBodHRwczovL2dpdC5rOHMuaW8vY29tbXVuaXR5L2NvbnRyaWJ1dG9ycy9kZXZlbC9zaWctYXJjaGl0ZWN0dXJlL2FwaS1jb252ZW50aW9ucy5tZCN0eXBlcy1raW5kcyIsInR5cGUiOiJzdHJpbmcifSwibWV0YWRhdGEiOnsidHlwZSI6Im9iamVjdCJ9LCJzcGVjIjp7ImRlc2NyaXB0aW9uIjoiT0NTSW5pdGlhbGl6YXRpb25TcGVjIGRlZmluZXMgdGhlIGRlc2lyZWQgc3RhdGUgb2YgT0NTSW5pdGlhbGl6YXRpb24iLCJwcm9wZXJ0aWVzIjp7ImVuYWJsZUNlcGhUb29scyI6eyJkZXNjcmlwdGlvbiI6IkVuYWJsZUNlcGhUb29scyB0b2dnbGVzIG9uIHdoZXRoZXIgb3Igbm90IHRoZSBjZXBoIHRvb2xzIHBvZCBzaG91bGQgYmUgZGVwbG95ZWQuIERlZmF1bHRzIHRvIGZhbHNlIiwidHlwZSI6ImJvb2xlYW4ifSwidG9sZXJhdGlvbnMiOnsiZGVzY3JpcHRpb24iOiJUb2xlcmF0aW9ucyBpZiBzcGVjaWZpZWQgc2V0IHRvb2xib3ggY2VwaCB0b29scyBwb2QgdG9sZXJhdGlvbnMgRGVmYXVsdHMgdG8gZW1wdHkiLCJpdGVtcyI6eyJkZXNjcmlwdGlvbiI6IlRoZSBwb2QgdGhpcyBUb2xlcmF0aW9uIGlzIGF0dGFjaGVkIHRvIHRvbGVyYXRlcyBhbnkgdGFpbnQgdGhhdCBtYXRjaGVzIHRoZSB0cmlwbGUgXHUwMDNja2V5LHZhbHVlLGVmZmVjdFx1MDAzZSB1c2luZyB0aGUgbWF0Y2hpbmcgb3BlcmF0b3IgXHUwMDNjb3BlcmF0b3JcdTAwM2UuIiwicHJvcGVydGllcyI6eyJlZmZlY3QiOnsiZGVzY3JpcHRpb24iOiJFZmZlY3QgaW5kaWNhdGVzIHRoZSB0YWludCBlZmZlY3QgdG8gbWF0Y2guIEVtcHR5IG1lYW5zIG1hdGNoIGFsbCB0YWludCBlZmZlY3RzLiBXaGVuIHNwZWNpZmllZCwgYWxsb3dlZCB2YWx1ZXMgYXJlIE5vU2NoZWR1bGUsIFByZWZlck5vU2NoZWR1bGUgYW5kIE5vRXhlY3V0ZS4iLCJ0eXBlIjoic3RyaW5nIn0sImtleSI6eyJkZXNjcmlwdGlvbiI6IktleSBpcyB0aGUgdGFpbnQga2V5IHRoYXQgdGhlIHRvbGVyYXRpb24gYXBwbGllcyB0by4gRW1wdHkgbWVhbnMgbWF0Y2ggYWxsIHRhaW50IGtleXMuIElmIHRoZSBrZXkgaXMgZW1wdHksIG9wZXJhdG9yIG11c3QgYmUgRXhpc3RzOyB0aGlzIGNvbWJpbmF0aW9uIG1lYW5zIHRvIG1hdGNoIGFsbCB2YWx1ZXMgYW5kIGFsbCBrZXlzLiIsInR5cGUiOiJzdHJpbmcifSwib3BlcmF0b3IiOnsiZGVzY3JpcHRpb24iOiJPcGVyYXRvciByZXByZXNlbnRzIGEga2V5J3MgcmVsYXRpb25zaGlwIHRvIHRoZSB2YWx1ZS4gVmFsaWQgb3BlcmF0b3JzIGFyZSBFeGlzdHMgYW5kIEVxdWFsLiBEZWZhdWx0cyB0byBFcXVhbC4gRXhpc3RzIGlzIGVxdWl2YWxlbnQgdG8gd2lsZGNhcmQgZm9yIHZhbHVlLCBzbyB0aGF0IGEgcG9kIGNhbiB0b2xlcmF0ZSBhbGwgdGFpbnRzIG9mIGEgcGFydGljdWxhciBjYXRlZ29yeS4iLCJ0eXBlIjoic3RyaW5nIn0sInRvbGVyYXRpb25TZWNvbmRzIjp7ImRlc2NyaXB0aW9uIjoiVG9sZXJhdGlvblNlY29uZHMgcmVwcmVzZW50cyB0aGUgcGVyaW9kIG9mIHRpbWUgdGhlIHRvbGVyYXRpb24gKHdoaWNoIG11c3QgYmUgb2YgZWZmZWN0IE5vRXhlY3V0ZSwgb3RoZXJ3aXNlIHRoaXMgZmllbGQgaXMgaWdub3JlZCkgdG9sZXJhdGVzIHRoZSB0YWludC4gQnkgZGVmYXVsdCwgaXQgaXMgbm90IHNldCwgd2hpY2ggbWVhbnMgdG9sZXJhdGUgdGhlIHRhaW50IGZvcmV2ZXIgKGRvIG5vdCBldmljdCkuIFplcm8gYW5kIG5lZ2F0aXZlIHZhbHVlcyB3aWxsIGJlIHRyZWF0ZWQgYXMgMCAoZXZpY3QgaW1tZWRpYXRlbHkpIGJ5IHRoZSBzeXN0ZW0uIiwiZm9ybWF0IjoiaW50NjQiLCJ0eXBlIjoiaW50ZWdlciJ9LCJ2YWx1ZSI6eyJkZXNjcmlwdGlvbiI6IlZhbHVlIGlzIHRoZSB0YWludCB2YWx1ZSB0aGUgdG9sZXJhdGlvbiBtYXRjaGVzIHRvLiBJZiB0aGUgb3BlcmF0b3IgaXMgRXhpc3RzLCB0aGUgdmFsdWUgc2hvdWxkIGJlIGVtcHR5LCBvdGhlcndpc2UganVzdCBhIHJlZ3VsYXIgc3RyaW5nLiIsInR5cGUiOiJzdHJpbmcifX0sInR5cGUiOiJvYmplY3QifSwidHlwZSI6ImFycmF5In19LCJ0eXBlIjoib2JqZWN0In0sInN0YXR1cyI6eyJkZXNjcmlwdGlvbiI6Ik9DU0luaXRpYWxpemF0aW9uU3RhdHVzIGRlZmluZXMgdGhlIG9ic2VydmVkIHN0YXRlIG9mIE9DU0luaXRpYWxpemF0aW9uIiwicHJvcGVydGllcyI6eyJjb25kaXRpb25zIjp7ImRlc2NyaXB0aW9uIjoiQ29uZGl0aW9ucyBkZXNjcmliZXMgdGhlIHN0YXRlIG9mIHRoZSBPQ1NJbml0aWFsaXphdGlvbiByZXNvdXJjZS4iLCJpdGVtcyI6eyJkZXNjcmlwdGlvbiI6IkNvbmRpdGlvbiByZXByZXNlbnRzIHRoZSBzdGF0ZSBvZiB0aGUgb3BlcmF0b3IncyByZWNvbmNpbGlhdGlvbiBmdW5jdGlvbmFsaXR5LiIsInByb3BlcnRpZXMiOnsibGFzdEhlYXJ0YmVhdFRpbWUiOnsiZm9ybWF0IjoiZGF0ZS10aW1lIiwidHlwZSI6InN0cmluZyJ9LCJsYXN0VHJhbnNpdGlvblRpbWUiOnsiZm9ybWF0IjoiZGF0ZS10aW1lIiwidHlwZSI6InN0cmluZyJ9LCJtZXNzYWdlIjp7InR5cGUiOiJzdHJpbmcifSwicmVhc29uIjp7InR5cGUiOiJzdHJpbmcifSwic3RhdHVzIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6eyJkZXNjcmlwdGlvbiI6IkNvbmRpdGlvblR5cGUgaXMgdGhlIHN0YXRlIG9mIHRoZSBvcGVyYXRvcidzIHJlY29uY2lsaWF0aW9uIGZ1bmN0aW9uYWxpdHkuIiwidHlwZSI6InN0cmluZyJ9fSwicmVxdWlyZWQiOlsic3RhdHVzIiwidHlwZSJdLCJ0eXBlIjoib2JqZWN0In0sInR5cGUiOiJhcnJheSJ9LCJlcnJvck1lc3NhZ2UiOnsidHlwZSI6InN0cmluZyJ9LCJwaGFzZSI6eyJkZXNjcmlwdGlvbiI6IlBoYXNlIGRlc2NyaWJlcyB0aGUgUGhhc2Ugb2YgT0NTSW5pdGlhbGl6YXRpb24gVGhpcyBpcyB1c2VkIGJ5IE9MTSBVSSB0byBwcm92aWRlIHN0YXR1cyBpbmZvcm1hdGlvbiB0byB0aGUgdXNlciIsInR5cGUiOiJzdHJpbmcifSwicmVsYXRlZE9iamVjdHMiOnsiZGVzY3JpcHRpb24iOiJSZWxhdGVkT2JqZWN0cyBpcyBhIGxpc3Qgb2Ygb2JqZWN0cyBjcmVhdGVkIGFuZCBtYWludGFpbmVkIGJ5IHRoaXMgb3BlcmF0b3IuIE9iamVjdCByZWZlcmVuY2VzIHdpbGwgYmUgYWRkZWQgdG8gdGhpcyBsaXN0IGFmdGVyIHRoZXkgaGF2ZSBiZWVuIGNyZWF0ZWQgQU5EIGZvdW5kIGluIHRoZSBjbHVzdGVyLiIsIml0ZW1zIjp7ImRlc2NyaXB0aW9uIjoiT2JqZWN0UmVmZXJlbmNlIGNvbnRhaW5zIGVub3VnaCBpbmZvcm1hdGlvbiB0byBsZXQgeW91IGluc3BlY3Qgb3IgbW9kaWZ5IHRoZSByZWZlcnJlZCBvYmplY3QuIE5ldyB1c2VzIG9mIHRoaXMgdHlwZSBhcmUgZGlzY291cmFnZWQgYmVjYXVzZSBvZiBkaWZmaWN1bHR5IGRlc2NyaWJpbmcgaXRzIHVzYWdlIHdoZW4gZW1iZWRkZWQgaW4gQVBJcy4gMS4gSWdub3JlZCBmaWVsZHMuICBJdCBpbmNsdWRlcyBtYW55IGZpZWxkcyB3aGljaCBhcmUgbm90IGdlbmVyYWxseSBob25vcmVkLiAgRm9yIGluc3RhbmNlLCBSZXNvdXJjZVZlcnNpb24gYW5kIEZpZWxkUGF0aCBhcmUgYm90aCB2ZXJ5IHJhcmVseSB2YWxpZCBpbiBhY3R1YWwgdXNhZ2UuIDIuIEludmFsaWQgdXNhZ2UgaGVscC4gIEl0IGlzIGltcG9zc2libGUgdG8gYWRkIHNwZWNpZmljIGhlbHAgZm9yIGluZGl2aWR1YWwgdXNhZ2UuICBJbiBtb3N0IGVtYmVkZGVkIHVzYWdlcywgdGhlcmUgYXJlIHBhcnRpY3VsYXIgcmVzdHJpY3Rpb25zIGxpa2UsIFwibXVzdCByZWZlciBvbmx5IHRvIHR5cGVzIEEgYW5kIEJcIiBvciBcIlVJRCBub3QgaG9ub3JlZFwiIG9yIFwibmFtZSBtdXN0IGJlIHJlc3RyaWN0ZWRcIi4gVGhvc2UgY2Fubm90IGJlIHdlbGwgZGVzY3JpYmVkIHdoZW4gZW1iZWRkZWQuIDMuIEluY29uc2lzdGVudCB2YWxpZGF0aW9uLiAgQmVjYXVzZSB0aGUgdXNhZ2VzIGFyZSBkaWZmZXJlbnQsIHRoZSB2YWxpZGF0aW9uIHJ1bGVzIGFyZSBkaWZmZXJlbnQgYnkgdXNhZ2UsIHdoaWNoIG1ha2VzIGl0IGhhcmQgZm9yIHVzZXJzIHRvIHByZWRpY3Qgd2hhdCB3aWxsIGhhcHBlbi4gNC4gVGhlIGZpZWxkcyBhcmUgYm90aCBpbXByZWNpc2UgYW5kIG92ZXJseSBwcmVjaXNlLiAgS2luZCBpcyBub3QgYSBwcmVjaXNlIG1hcHBpbmcgdG8gYSBVUkwuIFRoaXMgY2FuIHByb2R1Y2UgYW1iaWd1aXR5IGR1cmluZyBpbnRlcnByZXRhdGlvbiBhbmQgcmVxdWlyZSBhIFJFU1QgbWFwcGluZy4gIEluIG1vc3QgY2FzZXMsIHRoZSBkZXBlbmRlbmN5IGlzIG9uIHRoZSBncm91cCxyZXNvdXJjZSB0dXBsZSBhbmQgdGhlIHZlcnNpb24gb2YgdGhlIGFjdHVhbCBzdHJ1Y3QgaXMgaXJyZWxldmFudC4gNS4gV2UgY2Fubm90IGVhc2lseSBjaGFuZ2UgaXQuICBCZWNhdXNlIHRoaXMgdHlwZSBpcyBlbWJlZGRlZCBpbiBtYW55IGxvY2F0aW9ucywgdXBkYXRlcyB0byB0aGlzIHR5cGUgd2lsbCBhZmZlY3QgbnVtZXJvdXMgc2NoZW1hcy4gIERvbid0IG1ha2UgbmV3IEFQSXMgZW1iZWQgYW4gdW5kZXJzcGVjaWZpZWQgQVBJIHR5cGUgdGhleSBkbyBub3QgY29udHJvbC4gXG4gSW5zdGVhZCBvZiB1c2luZyB0aGlzIHR5cGUsIGNyZWF0ZSBhIGxvY2FsbHkgcHJvdmlkZWQgYW5kIHVzZWQgdHlwZSB0aGF0IGlzIHdlbGwtZm9jdXNlZCBvbiB5b3VyIHJlZmVyZW5jZS4gRm9yIGV4YW1wbGUsIFNlcnZpY2VSZWZlcmVuY2VzIGZvciBhZG1pc3Npb24gcmVnaXN0cmF0aW9uOiBodHRwczovL2dpdGh1Yi5jb20va3ViZXJuZXRlcy9hcGkvYmxvYi9yZWxlYXNlLTEuMTcvYWRtaXNzaW9ucmVnaXN0cmF0aW9uL3YxL3R5cGVzLmdvI0w1MzMgLiIsInByb3BlcnRpZXMiOnsiYXBpVmVyc2lvbiI6eyJkZXNjcmlwdGlvbiI6IkFQSSB2ZXJzaW9uIG9mIHRoZSByZWZlcmVudC4iLCJ0eXBlIjoic3RyaW5nIn0sImZpZWxkUGF0aCI6eyJkZXNjcmlwdGlvbiI6IklmIHJlZmVycmluZyB0byBhIHBpZWNlIG9mIGFuIG9iamVjdCBpbnN0ZWFkIG9mIGFuIGVudGlyZSBvYmplY3QsIHRoaXMgc3RyaW5nIHNob3VsZCBjb250YWluIGEgdmFsaWQgSlNPTi9HbyBmaWVsZCBhY2Nlc3Mgc3RhdGVtZW50LCBzdWNoIGFzIGRlc2lyZWRTdGF0ZS5tYW5pZmVzdC5jb250YWluZXJzWzJdLiBGb3IgZXhhbXBsZSwgaWYgdGhlIG9iamVjdCByZWZlcmVuY2UgaXMgdG8gYSBjb250YWluZXIgd2l0aGluIGEgcG9kLCB0aGlzIHdvdWxkIHRha2Ugb24gYSB2YWx1ZSBsaWtlOiBcInNwZWMuY29udGFpbmVyc3tuYW1lfVwiICh3aGVyZSBcIm5hbWVcIiByZWZlcnMgdG8gdGhlIG5hbWUgb2YgdGhlIGNvbnRhaW5lciB0aGF0IHRyaWdnZXJlZCB0aGUgZXZlbnQpIG9yIGlmIG5vIGNvbnRhaW5lciBuYW1lIGlzIHNwZWNpZmllZCBcInNwZWMuY29udGFpbmVyc1syXVwiIChjb250YWluZXIgd2l0aCBpbmRleCAyIGluIHRoaXMgcG9kKS4gVGhpcyBzeW50YXggaXMgY2hvc2VuIG9ubHkgdG8gaGF2ZSBzb21lIHdlbGwtZGVmaW5lZCB3YXkgb2YgcmVmZXJlbmNpbmcgYSBwYXJ0IG9mIGFuIG9iamVjdC4gVE9ETzogdGhpcyBkZXNpZ24gaXMgbm90IGZpbmFsIGFuZCB0aGlzIGZpZWxkIGlzIHN1YmplY3QgdG8gY2hhbmdlIGluIHRoZSBmdXR1cmUuIiwidHlwZSI6InN0cmluZyJ9LCJraW5kIjp7ImRlc2NyaXB0aW9uIjoiS2luZCBvZiB0aGUgcmVmZXJlbnQuIE1vcmUgaW5mbzogaHR0cHM6Ly9naXQuazhzLmlvL2NvbW11bml0eS9jb250cmlidXRvcnMvZGV2ZWwvc2lnLWFyY2hpdGVjdHVyZS9hcGktY29udmVudGlvbnMubWQjdHlwZXMta2luZHMiLCJ0eXBlIjoic3RyaW5nIn0sIm5hbWUiOnsiZGVzY3JpcHRpb24iOiJOYW1lIG9mIHRoZSByZWZlcmVudC4gTW9yZSBpbmZvOiBodHRwczovL2t1YmVybmV0ZXMuaW8vZG9jcy9jb25jZXB0cy9vdmVydmlldy93b3JraW5nLXdpdGgtb2JqZWN0cy9uYW1lcy8jbmFtZXMiLCJ0eXBlIjoic3RyaW5nIn0sIm5hbWVzcGFjZSI6eyJkZXNjcmlwdGlvbiI6Ik5hbWVzcGFjZSBvZiB0aGUgcmVmZXJlbnQuIE1vcmUgaW5mbzogaHR0cHM6Ly9rdWJlcm5ldGVzLmlvL2RvY3MvY29uY2VwdHMvb3ZlcnZpZXcvd29ya2luZy13aXRoLW9iamVjdHMvbmFtZXNwYWNlcy8iLCJ0eXBlIjoic3RyaW5nIn0sInJlc291cmNlVmVyc2lvbiI6eyJkZXNjcmlwdGlvbiI6IlNwZWNpZmljIHJlc291cmNlVmVyc2lvbiB0byB3aGljaCB0aGlzIHJlZmVyZW5jZSBpcyBtYWRlLCBpZiBhbnkuIE1vcmUgaW5mbzogaHR0cHM6Ly9naXQuazhzLmlvL2NvbW11bml0eS9jb250cmlidXRvcnMvZGV2ZWwvc2lnLWFyY2hpdGVjdHVyZS9hcGktY29udmVudGlvbnMubWQjY29uY3VycmVuY3ktY29udHJvbC1hbmQtY29uc2lzdGVuY3kiLCJ0eXBlIjoic3RyaW5nIn0sInVpZCI6eyJkZXNjcmlwdGlvbiI6IlVJRCBvZiB0aGUgcmVmZXJlbnQuIE1vcmUgaW5mbzogaHR0cHM6Ly9rdWJlcm5ldGVzLmlvL2RvY3MvY29uY2VwdHMvb3ZlcnZpZXcvd29ya2luZy13aXRoLW9iamVjdHMvbmFtZXMvI3VpZHMiLCJ0eXBlIjoic3RyaW5nIn19LCJ0eXBlIjoib2JqZWN0IiwieC1rdWJlcm5ldGVzLW1hcC10eXBlIjoiYXRvbWljIn0sInR5cGUiOiJhcnJheSJ9LCJyb29rQ2VwaE9wZXJhdG9yQ29uZmlnIjp7InByb3BlcnRpZXMiOnsiY3NpUGx1Z2luVG9sZXJhdGlvbnNNb2RpZmllZCI6eyJkZXNjcmlwdGlvbiI6IkNzaVBsdWdpblRvbGVyYXRpb25zTW9kaWZpZWQgaW5kaWNhdGVzIGlmIENzaVBsdWdpblRvbGVyYXRpb25zIGFyZSBhZGRlZCB0byB0aGUgY29uZmlnbWFwIHZpYSBjb250cm9sbGVyIiwidHlwZSI6ImJvb2xlYW4ifSwiY3NpUHJvdmlzaW9uZXJUb2xlcmF0aW9uc01vZGlmaWVkIjp7ImRlc2NyaXB0aW9uIjoiQ3NpUHJvdmlzaW9uZXJUb2xlcmF0aW9uc01vZGlmaWVkIGluZGljYXRlcyBpZiBDc2lQcm92aXNpb25lclRvbGVyYXRpb25zIGFyZSBhZGRlZCB0byB0aGUgY29uZmlnbWFwIHZpYSBjb250cm9sbGVyIiwidHlwZSI6ImJvb2xlYW4ifX0sInR5cGUiOiJvYmplY3QifSwicm9va0NlcGhPcGVyYXRvckNvbmZpZ0NyZWF0ZWQiOnsidHlwZSI6ImJvb2xlYW4ifSwic0NDc0NyZWF0ZWQiOnsidHlwZSI6ImJvb2xlYW4ifX0sInR5cGUiOiJvYmplY3QifX0sInR5cGUiOiJvYmplY3QifX0sInNlcnZlZCI6dHJ1ZSwic3RvcmFnZSI6dHJ1ZSwic3VicmVzb3VyY2VzIjp7InN0YXR1cyI6e319fV19fQ== @@ -112,7 +112,7 @@ properties: data: eyJhcGlWZXJzaW9uIjoicmJhYy5hdXRob3JpemF0aW9uLms4cy5pby92MSIsImtpbmQiOiJSb2xlQmluZGluZyIsIm1ldGFkYXRhIjp7Im5hbWUiOiJyb29rLWNlcGgtbW9uaXRvciJ9LCJyb2xlUmVmIjp7ImFwaUdyb3VwIjoicmJhYy5hdXRob3JpemF0aW9uLms4cy5pbyIsImtpbmQiOiJSb2xlIiwibmFtZSI6InJvb2stY2VwaC1tb25pdG9yIn0sInN1YmplY3RzIjpbeyJraW5kIjoiU2VydmljZUFjY291bnQiLCJuYW1lIjoicm9vay1jZXBoLXN5c3RlbSJ9XX0= - type: olm.bundle.object value: - data: eyJhcGlWZXJzaW9uIjoiYXBpZXh0ZW5zaW9ucy5rOHMuaW8vdjEiLCJraW5kIjoiQ3VzdG9tUmVzb3VyY2VEZWZpbml0aW9uIiwibWV0YWRhdGEiOnsiYW5ub3RhdGlvbnMiOnsiY29udHJvbGxlci1nZW4ua3ViZWJ1aWxkZXIuaW8vdmVyc2lvbiI6InYwLjkuMiJ9LCJuYW1lIjoic3RvcmFnZWNsdXN0ZXJzLm9jcy5vcGVuc2hpZnQuaW8ifSwic3BlYyI6eyJncm91cCI6Im9jcy5vcGVuc2hpZnQuaW8iLCJuYW1lcyI6eyJraW5kIjoiU3RvcmFnZUNsdXN0ZXIiLCJsaXN0S2luZCI6IlN0b3JhZ2VDbHVzdGVyTGlzdCIsInBsdXJhbCI6InN0b3JhZ2VjbHVzdGVycyIsInNpbmd1bGFyIjoic3RvcmFnZWNsdXN0ZXIifSwic2NvcGUiOiJOYW1lc3BhY2VkIiwidmVyc2lvbnMiOlt7ImFkZGl0aW9uYWxQcmludGVyQ29sdW1ucyI6W3sianNvblBhdGgiOiIubWV0YWRhdGEuY3JlYXRpb25UaW1lc3RhbXAiLCJuYW1lIjoiQWdlIiwidHlwZSI6ImRhdGUifSx7ImRlc2NyaXB0aW9uIjoiQ3VycmVudCBQaGFzZSIsImpzb25QYXRoIjoiLnN0YXR1cy5waGFzZSIsIm5hbWUiOiJQaGFzZSIsInR5cGUiOiJzdHJpbmcifSx7ImRlc2NyaXB0aW9uIjoiRXh0ZXJuYWwgU3RvcmFnZSBDbHVzdGVyIiwianNvblBhdGgiOiIuc3BlYy5leHRlcm5hbFN0b3JhZ2UuZW5hYmxlIiwibmFtZSI6IkV4dGVybmFsIiwidHlwZSI6ImJvb2xlYW4ifSx7Impzb25QYXRoIjoiLm1ldGFkYXRhLmNyZWF0aW9uVGltZXN0YW1wIiwibmFtZSI6IkNyZWF0ZWQgQXQiLCJ0eXBlIjoic3RyaW5nIn0seyJkZXNjcmlwdGlvbiI6IlN0b3JhZ2UgQ2x1c3RlciBWZXJzaW9uIiwianNvblBhdGgiOiIuc3RhdHVzLnZlcnNpb24iLCJuYW1lIjoiVmVyc2lvbiIsInR5cGUiOiJzdHJpbmcifV0sIm5hbWUiOiJ2MSIsInNjaGVtYSI6eyJvcGVuQVBJVjNTY2hlbWEiOnsiZGVzY3JpcHRpb24iOiJTdG9yYWdlQ2x1c3RlciByZXByZXNlbnRzIGEgY2x1c3RlciBpbmNsdWRpbmcgQ2VwaCBDbHVzdGVyLCBOb29CYWEgYW5kIGFsbCB0aGUgc3RvcmFnZSBhbmQgY29tcHV0ZSByZXNvdXJjZXMgcmVxdWlyZWQuIiwicHJvcGVydGllcyI6eyJhcGlWZXJzaW9uIjp7ImRlc2NyaXB0aW9uIjoiQVBJVmVyc2lvbiBkZWZpbmVzIHRoZSB2ZXJzaW9uZWQgc2NoZW1hIG9mIHRoaXMgcmVwcmVzZW50YXRpb24gb2YgYW4gb2JqZWN0LiBTZXJ2ZXJzIHNob3VsZCBjb252ZXJ0IHJlY29nbml6ZWQgc2NoZW1hcyB0byB0aGUgbGF0ZXN0IGludGVybmFsIHZhbHVlLCBhbmQgbWF5IHJlamVjdCB1bnJlY29nbml6ZWQgdmFsdWVzLiBNb3JlIGluZm86IGh0dHBzOi8vZ2l0Lms4cy5pby9jb21tdW5pdHkvY29udHJpYnV0b3JzL2RldmVsL3NpZy1hcmNoaXRlY3R1cmUvYXBpLWNvbnZlbnRpb25zLm1kI3Jlc291cmNlcyIsInR5cGUiOiJzdHJpbmcifSwia2luZCI6eyJkZXNjcmlwdGlvbiI6IktpbmQgaXMgYSBzdHJpbmcgdmFsdWUgcmVwcmVzZW50aW5nIHRoZSBSRVNUIHJlc291cmNlIHRoaXMgb2JqZWN0IHJlcHJlc2VudHMuIFNlcnZlcnMgbWF5IGluZmVyIHRoaXMgZnJvbSB0aGUgZW5kcG9pbnQgdGhlIGNsaWVudCBzdWJtaXRzIHJlcXVlc3RzIHRvLiBDYW5ub3QgYmUgdXBkYXRlZC4gSW4gQ2FtZWxDYXNlLiBNb3JlIGluZm86IGh0dHBzOi8vZ2l0Lms4cy5pby9jb21tdW5pdHkvY29udHJpYnV0b3JzL2RldmVsL3NpZy1hcmNoaXRlY3R1cmUvYXBpLWNvbnZlbnRpb25zLm1kI3R5cGVzLWtpbmRzIiwidHlwZSI6InN0cmluZyJ9LCJtZXRhZGF0YSI6eyJ0eXBlIjoib2JqZWN0In0sInNwZWMiOnsiZGVzY3JpcHRpb24iOiJTdG9yYWdlQ2x1c3RlclNwZWMgZGVmaW5lcyB0aGUgZGVzaXJlZCBzdGF0ZSBvZiBTdG9yYWdlQ2x1c3RlciIsInByb3BlcnRpZXMiOnsiYWxsb3dSZW1vdGVTdG9yYWdlQ29uc3VtZXJzIjp7ImRlc2NyaXB0aW9uIjoiQWxsb3dSZW1vdGVTdG9yYWdlQ29uc3VtZXJzIEluZGljYXRlcyB0aGF0IHRoZSBPQ1MgY2x1c3RlciBzaG91bGQgZGVwbG95IHRoZSBuZWVkZWQgY29tcG9uZW50cyB0byBlbmFibGUgY29ubmVjdGlvbnMgZnJvbSByZW1vdGUgY29uc3VtZXJzLiIsInR5cGUiOiJib29sZWFuIn0sImFyYml0ZXIiOnsiZGVzY3JpcHRpb24iOiJBcmJpdGVyU3BlYyBzcGVjaWZpZXMgdGhlIHN0b3JhZ2UgY2x1c3RlciBvcHRpb25zIHJlbGF0ZWQgdG8gYXJiaXRlci4gSWYgQXJiaXRlciBpcyBlbmFibGVkLCBBcmJpdGVyTG9jYXRpb24gaW4gdGhlIE5vZGVUb3BvbG9naWVzIG11c3QgYmUgc3BlY2lmaWVkLiIsInByb3BlcnRpZXMiOnsiYXJiaXRlck1vblBWQ1RlbXBsYXRlIjp7ImRlc2NyaXB0aW9uIjoiUGVyc2lzdGVudFZvbHVtZUNsYWltIGlzIGEgdXNlcidzIHJlcXVlc3QgZm9yIGFuZCBjbGFpbSB0byBhIHBlcnNpc3RlbnQgdm9sdW1lIiwicHJvcGVydGllcyI6eyJhcGlWZXJzaW9uIjp7ImRlc2NyaXB0aW9uIjoiQVBJVmVyc2lvbiBkZWZpbmVzIHRoZSB2ZXJzaW9uZWQgc2NoZW1hIG9mIHRoaXMgcmVwcmVzZW50YXRpb24gb2YgYW4gb2JqZWN0LiBTZXJ2ZXJzIHNob3VsZCBjb252ZXJ0IHJlY29nbml6ZWQgc2NoZW1hcyB0byB0aGUgbGF0ZXN0IGludGVybmFsIHZhbHVlLCBhbmQgbWF5IHJlamVjdCB1bnJlY29nbml6ZWQgdmFsdWVzLiBNb3JlIGluZm86IGh0dHBzOi8vZ2l0Lms4cy5pby9jb21tdW5pdHkvY29udHJpYnV0b3JzL2RldmVsL3NpZy1hcmNoaXRlY3R1cmUvYXBpLWNvbnZlbnRpb25zLm1kI3Jlc291cmNlcyIsInR5cGUiOiJzdHJpbmcifSwia2luZCI6eyJkZXNjcmlwdGlvbiI6IktpbmQgaXMgYSBzdHJpbmcgdmFsdWUgcmVwcmVzZW50aW5nIHRoZSBSRVNUIHJlc291cmNlIHRoaXMgb2JqZWN0IHJlcHJlc2VudHMuIFNlcnZlcnMgbWF5IGluZmVyIHRoaXMgZnJvbSB0aGUgZW5kcG9pbnQgdGhlIGNsaWVudCBzdWJtaXRzIHJlcXVlc3RzIHRvLiBDYW5ub3QgYmUgdXBkYXRlZC4gSW4gQ2FtZWxDYXNlLiBNb3JlIGluZm86IGh0dHBzOi8vZ2l0Lms4cy5pby9jb21tdW5pdHkvY29udHJpYnV0b3JzL2RldmVsL3NpZy1hcmNoaXRlY3R1cmUvYXBpLWNvbnZlbnRpb25zLm1kI3R5cGVzLWtpbmRzIiwidHlwZSI6InN0cmluZyJ9LCJtZXRhZGF0YSI6eyJkZXNjcmlwdGlvbiI6IlN0YW5kYXJkIG9iamVjdCdzIG1ldGFkYXRhLiBNb3JlIGluZm86IGh0dHBzOi8vZ2l0Lms4cy5pby9jb21tdW5pdHkvY29udHJpYnV0b3JzL2RldmVsL3NpZy1hcmNoaXRlY3R1cmUvYXBpLWNvbnZlbnRpb25zLm1kI21ldGFkYXRhIiwicHJvcGVydGllcyI6eyJhbm5vdGF0aW9ucyI6eyJhZGRpdGlvbmFsUHJvcGVydGllcyI6eyJ0eXBlIjoic3RyaW5nIn0sInR5cGUiOiJvYmplY3QifSwiZmluYWxpemVycyI6eyJpdGVtcyI6eyJ0eXBlIjoic3RyaW5nIn0sInR5cGUiOiJhcnJheSJ9LCJsYWJlbHMiOnsiYWRkaXRpb25hbFByb3BlcnRpZXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjoib2JqZWN0In0sIm5hbWUiOnsidHlwZSI6InN0cmluZyJ9LCJuYW1lc3BhY2UiOnsidHlwZSI6InN0cmluZyJ9fSwidHlwZSI6Im9iamVjdCJ9LCJzcGVjIjp7ImRlc2NyaXB0aW9uIjoic3BlYyBkZWZpbmVzIHRoZSBkZXNpcmVkIGNoYXJhY3RlcmlzdGljcyBvZiBhIHZvbHVtZSByZXF1ZXN0ZWQgYnkgYSBwb2QgYXV0aG9yLiBNb3JlIGluZm86IGh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL2NvbmNlcHRzL3N0b3JhZ2UvcGVyc2lzdGVudC12b2x1bWVzI3BlcnNpc3RlbnR2b2x1bWVjbGFpbXMiLCJwcm9wZXJ0aWVzIjp7ImFjY2Vzc01vZGVzIjp7ImRlc2NyaXB0aW9uIjoiYWNjZXNzTW9kZXMgY29udGFpbnMgdGhlIGRlc2lyZWQgYWNjZXNzIG1vZGVzIHRoZSB2b2x1bWUgc2hvdWxkIGhhdmUuIE1vcmUgaW5mbzogaHR0cHM6Ly9rdWJlcm5ldGVzLmlvL2RvY3MvY29uY2VwdHMvc3RvcmFnZS9wZXJzaXN0ZW50LXZvbHVtZXMjYWNjZXNzLW1vZGVzLTEiLCJpdGVtcyI6eyJ0eXBlIjoic3RyaW5nIn0sInR5cGUiOiJhcnJheSJ9LCJkYXRhU291cmNlIjp7ImRlc2NyaXB0aW9uIjoiZGF0YVNvdXJjZSBmaWVsZCBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGVpdGhlcjogKiBBbiBleGlzdGluZyBWb2x1bWVTbmFwc2hvdCBvYmplY3QgKHNuYXBzaG90LnN0b3JhZ2UuazhzLmlvL1ZvbHVtZVNuYXBzaG90KSAqIEFuIGV4aXN0aW5nIFBWQyAoUGVyc2lzdGVudFZvbHVtZUNsYWltKSBJZiB0aGUgcHJvdmlzaW9uZXIgb3IgYW4gZXh0ZXJuYWwgY29udHJvbGxlciBjYW4gc3VwcG9ydCB0aGUgc3BlY2lmaWVkIGRhdGEgc291cmNlLCBpdCB3aWxsIGNyZWF0ZSBhIG5ldyB2b2x1bWUgYmFzZWQgb24gdGhlIGNvbnRlbnRzIG9mIHRoZSBzcGVjaWZpZWQgZGF0YSBzb3VyY2UuIFdoZW4gdGhlIEFueVZvbHVtZURhdGFTb3VyY2UgZmVhdHVyZSBnYXRlIGlzIGVuYWJsZWQsIGRhdGFTb3VyY2UgY29udGVudHMgd2lsbCBiZSBjb3BpZWQgdG8gZGF0YVNvdXJjZVJlZiwgYW5kIGRhdGFTb3VyY2VSZWYgY29udGVudHMgd2lsbCBiZSBjb3BpZWQgdG8gZGF0YVNvdXJjZSB3aGVuIGRhdGFTb3VyY2VSZWYubmFtZXNwYWNlIGlzIG5vdCBzcGVjaWZpZWQuIElmIHRoZSBuYW1lc3BhY2UgaXMgc3BlY2lmaWVkLCB0aGVuIGRhdGFTb3VyY2VSZWYgd2lsbCBub3QgYmUgY29waWVkIHRvIGRhdGFTb3VyY2UuIiwicHJvcGVydGllcyI6eyJhcGlHcm91cCI6eyJkZXNjcmlwdGlvbiI6IkFQSUdyb3VwIGlzIHRoZSBncm91cCBmb3IgdGhlIHJlc291cmNlIGJlaW5nIHJlZmVyZW5jZWQuIElmIEFQSUdyb3VwIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBzcGVjaWZpZWQgS2luZCBtdXN0IGJlIGluIHRoZSBjb3JlIEFQSSBncm91cC4gRm9yIGFueSBvdGhlciB0aGlyZC1wYXJ0eSB0eXBlcywgQVBJR3JvdXAgaXMgcmVxdWlyZWQuIiwidHlwZSI6InN0cmluZyJ9LCJraW5kIjp7ImRlc2NyaXB0aW9uIjoiS2luZCBpcyB0aGUgdHlwZSBvZiByZXNvdXJjZSBiZWluZyByZWZlcmVuY2VkIiwidHlwZSI6InN0cmluZyJ9LCJuYW1lIjp7ImRlc2NyaXB0aW9uIjoiTmFtZSBpcyB0aGUgbmFtZSBvZiByZXNvdXJjZSBiZWluZyByZWZlcmVuY2VkIiwidHlwZSI6InN0cmluZyJ9fSwicmVxdWlyZWQiOlsia2luZCIsIm5hbWUiXSwidHlwZSI6Im9iamVjdCIsIngta3ViZXJuZXRlcy1tYXAtdHlwZSI6ImF0b21pYyJ9LCJkYXRhU291cmNlUmVmIjp7ImRlc2NyaXB0aW9uIjoiZGF0YVNvdXJjZVJlZiBzcGVjaWZpZXMgdGhlIG9iamVjdCBmcm9tIHdoaWNoIHRvIHBvcHVsYXRlIHRoZSB2b2x1bWUgd2l0aCBkYXRhLCBpZiBhIG5vbi1lbXB0eSB2b2x1bWUgaXMgZGVzaXJlZC4gVGhpcyBtYXkgYmUgYW55IG9iamVjdCBmcm9tIGEgbm9uLWVtcHR5IEFQSSBncm91cCAobm9uIGNvcmUgb2JqZWN0KSBvciBhIFBlcnNpc3RlbnRWb2x1bWVDbGFpbSBvYmplY3QuIFdoZW4gdGhpcyBmaWVsZCBpcyBzcGVjaWZpZWQsIHZvbHVtZSBiaW5kaW5nIHdpbGwgb25seSBzdWNjZWVkIGlmIHRoZSB0eXBlIG9mIHRoZSBzcGVjaWZpZWQgb2JqZWN0IG1hdGNoZXMgc29tZSBpbnN0YWxsZWQgdm9sdW1lIHBvcHVsYXRvciBvciBkeW5hbWljIHByb3Zpc2lvbmVyLiBUaGlzIGZpZWxkIHdpbGwgcmVwbGFjZSB0aGUgZnVuY3Rpb25hbGl0eSBvZiB0aGUgZGF0YVNvdXJjZSBmaWVsZCBhbmQgYXMgc3VjaCBpZiBib3RoIGZpZWxkcyBhcmUgbm9uLWVtcHR5LCB0aGV5IG11c3QgaGF2ZSB0aGUgc2FtZSB2YWx1ZS4gRm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LCB3aGVuIG5hbWVzcGFjZSBpc24ndCBzcGVjaWZpZWQgaW4gZGF0YVNvdXJjZVJlZiwgYm90aCBmaWVsZHMgKGRhdGFTb3VyY2UgYW5kIGRhdGFTb3VyY2VSZWYpIHdpbGwgYmUgc2V0IHRvIHRoZSBzYW1lIHZhbHVlIGF1dG9tYXRpY2FsbHkgaWYgb25lIG9mIHRoZW0gaXMgZW1wdHkgYW5kIHRoZSBvdGhlciBpcyBub24tZW1wdHkuIFdoZW4gbmFtZXNwYWNlIGlzIHNwZWNpZmllZCBpbiBkYXRhU291cmNlUmVmLCBkYXRhU291cmNlIGlzbid0IHNldCB0byB0aGUgc2FtZSB2YWx1ZSBhbmQgbXVzdCBiZSBlbXB0eS4gVGhlcmUgYXJlIHRocmVlIGltcG9ydGFudCBkaWZmZXJlbmNlcyBiZXR3ZWVuIGRhdGFTb3VyY2UgYW5kIGRhdGFTb3VyY2VSZWY6ICogV2hpbGUgZGF0YVNvdXJjZSBvbmx5IGFsbG93cyB0d28gc3BlY2lmaWMgdHlwZXMgb2Ygb2JqZWN0cywgZGF0YVNvdXJjZVJlZiBhbGxvd3MgYW55IG5vbi1jb3JlIG9iamVjdCwgYXMgd2VsbCBhcyBQZXJzaXN0ZW50Vm9sdW1lQ2xhaW0gb2JqZWN0cy4gKiBXaGlsZSBkYXRhU291cmNlIGlnbm9yZXMgZGlzYWxsb3dlZCB2YWx1ZXMgKGRyb3BwaW5nIHRoZW0pLCBkYXRhU291cmNlUmVmIHByZXNlcnZlcyBhbGwgdmFsdWVzLCBhbmQgZ2VuZXJhdGVzIGFuIGVycm9yIGlmIGEgZGlzYWxsb3dlZCB2YWx1ZSBpcyBzcGVjaWZpZWQuICogV2hpbGUgZGF0YVNvdXJjZSBvbmx5IGFsbG93cyBsb2NhbCBvYmplY3RzLCBkYXRhU291cmNlUmVmIGFsbG93cyBvYmplY3RzIGluIGFueSBuYW1lc3BhY2VzLiAoQmV0YSkgVXNpbmcgdGhpcyBmaWVsZCByZXF1aXJlcyB0aGUgQW55Vm9sdW1lRGF0YVNvdXJjZSBmZWF0dXJlIGdhdGUgdG8gYmUgZW5hYmxlZC4gKEFscGhhKSBVc2luZyB0aGUgbmFtZXNwYWNlIGZpZWxkIG9mIGRhdGFTb3VyY2VSZWYgcmVxdWlyZXMgdGhlIENyb3NzTmFtZXNwYWNlVm9sdW1lRGF0YVNvdXJjZSBmZWF0dXJlIGdhdGUgdG8gYmUgZW5hYmxlZC4iLCJwcm9wZXJ0aWVzIjp7ImFwaUdyb3VwIjp7ImRlc2NyaXB0aW9uIjoiQVBJR3JvdXAgaXMgdGhlIGdyb3VwIGZvciB0aGUgcmVzb3VyY2UgYmVpbmcgcmVmZXJlbmNlZC4gSWYgQVBJR3JvdXAgaXMgbm90IHNwZWNpZmllZCwgdGhlIHNwZWNpZmllZCBLaW5kIG11c3QgYmUgaW4gdGhlIGNvcmUgQVBJIGdyb3VwLiBGb3IgYW55IG90aGVyIHRoaXJkLXBhcnR5IHR5cGVzLCBBUElHcm91cCBpcyByZXF1aXJlZC4iLCJ0eXBlIjoic3RyaW5nIn0sImtpbmQiOnsiZGVzY3JpcHRpb24iOiJLaW5kIGlzIHRoZSB0eXBlIG9mIHJlc291cmNlIGJlaW5nIHJlZmVyZW5jZWQiLCJ0eXBlIjoic3RyaW5nIn0sIm5hbWUiOnsiZGVzY3JpcHRpb24iOiJOYW1lIGlzIHRoZSBuYW1lIG9mIHJlc291cmNlIGJlaW5nIHJlZmVyZW5jZWQiLCJ0eXBlIjoic3RyaW5nIn0sIm5hbWVzcGFjZSI6eyJkZXNjcmlwdGlvbiI6Ik5hbWVzcGFjZSBpcyB0aGUgbmFtZXNwYWNlIG9mIHJlc291cmNlIGJlaW5nIHJlZmVyZW5jZWQgTm90ZSB0aGF0IHdoZW4gYSBuYW1lc3BhY2UgaXMgc3BlY2lmaWVkLCBhIGdhdGV3YXkubmV0d29ya2luZy5rOHMuaW8vUmVmZXJlbmNlR3JhbnQgb2JqZWN0IGlzIHJlcXVpcmVkIGluIHRoZSByZWZlcmVudCBuYW1lc3BhY2UgdG8gYWxsb3cgdGhhdCBuYW1lc3BhY2UncyBvd25lciB0byBhY2NlcHQgdGhlIHJlZmVyZW5jZS4gU2VlIHRoZSBSZWZlcmVuY2VHcmFudCBkb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzLiAoQWxwaGEpIFRoaXMgZmllbGQgcmVxdWlyZXMgdGhlIENyb3NzTmFtZXNwYWNlVm9sdW1lRGF0YVNvdXJjZSBmZWF0dXJlIGdhdGUgdG8gYmUgZW5hYmxlZC4iLCJ0eXBlIjoic3RyaW5nIn19LCJyZXF1aXJlZCI6WyJraW5kIiwibmFtZSJdLCJ0eXBlIjoib2JqZWN0In0sInJlc291cmNlcyI6eyJkZXNjcmlwdGlvbiI6InJlc291cmNlcyByZXByZXNlbnRzIHRoZSBtaW5pbXVtIHJlc291cmNlcyB0aGUgdm9sdW1lIHNob3VsZCBoYXZlLiBJZiBSZWNvdmVyVm9sdW1lRXhwYW5zaW9uRmFpbHVyZSBmZWF0dXJlIGlzIGVuYWJsZWQgdXNlcnMgYXJlIGFsbG93ZWQgdG8gc3BlY2lmeSByZXNvdXJjZSByZXF1aXJlbWVudHMgdGhhdCBhcmUgbG93ZXIgdGhhbiBwcmV2aW91cyB2YWx1ZSBidXQgbXVzdCBzdGlsbCBiZSBoaWdoZXIgdGhhbiBjYXBhY2l0eSByZWNvcmRlZCBpbiB0aGUgc3RhdHVzIGZpZWxkIG9mIHRoZSBjbGFpbS4gTW9yZSBpbmZvOiBodHRwczovL2t1YmVybmV0ZXMuaW8vZG9jcy9jb25jZXB0cy9zdG9yYWdlL3BlcnNpc3RlbnQtdm9sdW1lcyNyZXNvdXJjZXMiLCJwcm9wZXJ0aWVzIjp7ImxpbWl0cyI6eyJhZGRpdGlvbmFsUHJvcGVydGllcyI6eyJhbnlPZiI6W3sidHlwZSI6ImludGVnZXIifSx7InR5cGUiOiJzdHJpbmcifV0sInBhdHRlcm4iOiJeKFxcK3wtKT8oKFswLTldKyhcXC5bMC05XSopPyl8KFxcLlswLTldKykpKChbS01HVFBFXWkpfFtudW1rTUdUUEVdfChbZUVdKFxcK3wtKT8oKFswLTldKyhcXC5bMC05XSopPyl8KFxcLlswLTldKykpKSk/JCIsIngta3ViZXJuZXRlcy1pbnQtb3Itc3RyaW5nIjp0cnVlfSwiZGVzY3JpcHRpb24iOiJMaW1pdHMgZGVzY3JpYmVzIHRoZSBtYXhpbXVtIGFtb3VudCBvZiBjb21wdXRlIHJlc291cmNlcyBhbGxvd2VkLiBNb3JlIGluZm86IGh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL2NvbmNlcHRzL2NvbmZpZ3VyYXRpb24vbWFuYWdlLXJlc291cmNlcy1jb250YWluZXJzLyIsInR5cGUiOiJvYmplY3QifSwicmVxdWVzdHMiOnsiYWRkaXRpb25hbFByb3BlcnRpZXMiOnsiYW55T2YiOlt7InR5cGUiOiJpbnRlZ2VyIn0seyJ0eXBlIjoic3RyaW5nIn1dLCJwYXR0ZXJuIjoiXihcXCt8LSk/KChbMC05XSsoXFwuWzAtOV0qKT8pfChcXC5bMC05XSspKSgoW0tNR1RQRV1pKXxbbnVta01HVFBFXXwoW2VFXShcXCt8LSk/KChbMC05XSsoXFwuWzAtOV0qKT8pfChcXC5bMC05XSspKSkpPyQiLCJ4LWt1YmVybmV0ZXMtaW50LW9yLXN0cmluZyI6dHJ1ZX0sImRlc2NyaXB0aW9uIjoiUmVxdWVzdHMgZGVzY3JpYmVzIHRoZSBtaW5pbXVtIGFtb3VudCBvZiBjb21wdXRlIHJlc291cmNlcyByZXF1aXJlZC4gSWYgUmVxdWVzdHMgaXMgb21pdHRlZCBmb3IgYSBjb250YWluZXIsIGl0IGRlZmF1bHRzIHRvIExpbWl0cyBpZiB0aGF0IGlzIGV4cGxpY2l0bHkgc3BlY2lmaWVkLCBvdGhlcndpc2UgdG8gYW4gaW1wbGVtZW50YXRpb24tZGVmaW5lZCB2YWx1ZS4gUmVxdWVzdHMgY2Fubm90IGV4Y2VlZCBMaW1pdHMuIE1vcmUgaW5mbzogaHR0cHM6Ly9rdWJlcm5ldGVzLmlvL2RvY3MvY29uY2VwdHMvY29uZmlndXJhdGlvbi9tYW5hZ2UtcmVzb3VyY2VzLWNvbnRhaW5lcnMvIiwidHlwZSI6Im9iamVjdCJ9fSwidHlwZSI6Im9iamVjdCJ9LCJzZWxlY3RvciI6eyJkZXNjcmlwdGlvbiI6InNlbGVjdG9yIGlzIGEgbGFiZWwgcXVlcnkgb3ZlciB2b2x1bWVzIHRvIGNvbnNpZGVyIGZvciBiaW5kaW5nLiIsInByb3BlcnRpZXMiOnsibWF0Y2hFeHByZXNzaW9ucyI6eyJkZXNjcmlwdGlvbiI6Im1hdGNoRXhwcmVzc2lvbnMgaXMgYSBsaXN0IG9mIGxhYmVsIHNlbGVjdG9yIHJlcXVpcmVtZW50cy4gVGhlIHJlcXVpcmVtZW50cyBhcmUgQU5EZWQuIiwiaXRlbXMiOnsiZGVzY3JpcHRpb24iOiJBIGxhYmVsIHNlbGVjdG9yIHJlcXVpcmVtZW50IGlzIGEgc2VsZWN0b3IgdGhhdCBjb250YWlucyB2YWx1ZXMsIGEga2V5LCBhbmQgYW4gb3BlcmF0b3IgdGhhdCByZWxhdGVzIHRoZSBrZXkgYW5kIHZhbHVlcy4iLCJwcm9wZXJ0aWVzIjp7ImtleSI6eyJkZXNjcmlwdGlvbiI6ImtleSBpcyB0aGUgbGFiZWwga2V5IHRoYXQgdGhlIHNlbGVjdG9yIGFwcGxpZXMgdG8uIiwidHlwZSI6InN0cmluZyJ9LCJvcGVyYXRvciI6eyJkZXNjcmlwdGlvbiI6Im9wZXJhdG9yIHJlcHJlc2VudHMgYSBrZXkncyByZWxhdGlvbnNoaXAgdG8gYSBzZXQgb2YgdmFsdWVzLiBWYWxpZCBvcGVyYXRvcnMgYXJlIEluLCBOb3RJbiwgRXhpc3RzIGFuZCBEb2VzTm90RXhpc3QuIiwidHlwZSI6InN0cmluZyJ9LCJ2YWx1ZXMiOnsiZGVzY3JpcHRpb24iOiJ2YWx1ZXMgaXMgYW4gYXJyYXkgb2Ygc3RyaW5nIHZhbHVlcy4gSWYgdGhlIG9wZXJhdG9yIGlzIEluIG9yIE5vdEluLCB0aGUgdmFsdWVzIGFycmF5IG11c3QgYmUgbm9uLWVtcHR5LiBJZiB0aGUgb3BlcmF0b3IgaXMgRXhpc3RzIG9yIERvZXNOb3RFeGlzdCwgdGhlIHZhbHVlcyBhcnJheSBtdXN0IGJlIGVtcHR5LiBUaGlzIGFycmF5IGlzIHJlcGxhY2VkIGR1cmluZyBhIHN0cmF0ZWdpYyBtZXJnZSBwYXRjaC4iLCJpdGVtcyI6eyJ0eXBlIjoic3RyaW5nIn0sInR5cGUiOiJhcnJheSJ9fSwicmVxdWlyZWQiOlsia2V5Iiwib3BlcmF0b3IiXSwidHlwZSI6Im9iamVjdCJ9LCJ0eXBlIjoiYXJyYXkifSwibWF0Y2hMYWJlbHMiOnsiYWRkaXRpb25hbFByb3BlcnRpZXMiOnsidHlwZSI6InN0cmluZyJ9LCJkZXNjcmlwdGlvbiI6Im1hdGNoTGFiZWxzIGlzIGEgbWFwIG9mIHtrZXksdmFsdWV9IHBhaXJzLiBBIHNpbmdsZSB7a2V5LHZhbHVlfSBpbiB0aGUgbWF0Y2hMYWJlbHMgbWFwIGlzIGVxdWl2YWxlbnQgdG8gYW4gZWxlbWVudCBvZiBtYXRjaEV4cHJlc3Npb25zLCB3aG9zZSBrZXkgZmllbGQgaXMgXCJrZXlcIiwgdGhlIG9wZXJhdG9yIGlzIFwiSW5cIiwgYW5kIHRoZSB2YWx1ZXMgYXJyYXkgY29udGFpbnMgb25seSBcInZhbHVlXCIuIFRoZSByZXF1aXJlbWVudHMgYXJlIEFORGVkLiIsInR5cGUiOiJvYmplY3QifX0sInR5cGUiOiJvYmplY3QiLCJ4LWt1YmVybmV0ZXMtbWFwLXR5cGUiOiJhdG9taWMifSwic3RvcmFnZUNsYXNzTmFtZSI6eyJkZXNjcmlwdGlvbiI6InN0b3JhZ2VDbGFzc05hbWUgaXMgdGhlIG5hbWUgb2YgdGhlIFN0b3JhZ2VDbGFzcyByZXF1aXJlZCBieSB0aGUgY2xhaW0uIE1vcmUgaW5mbzogaHR0cHM6Ly9rdWJlcm5ldGVzLmlvL2RvY3MvY29uY2VwdHMvc3RvcmFnZS9wZXJzaXN0ZW50LXZvbHVtZXMjY2xhc3MtMSIsInR5cGUiOiJzdHJpbmcifSwidm9sdW1lQXR0cmlidXRlc0NsYXNzTmFtZSI6eyJkZXNjcmlwdGlvbiI6InZvbHVtZUF0dHJpYnV0ZXNDbGFzc05hbWUgbWF5IGJlIHVzZWQgdG8gc2V0IHRoZSBWb2x1bWVBdHRyaWJ1dGVzQ2xhc3MgdXNlZCBieSB0aGlzIGNsYWltLiBJZiBzcGVjaWZpZWQsIHRoZSBDU0kgZHJpdmVyIHdpbGwgY3JlYXRlIG9yIHVwZGF0ZSB0aGUgdm9sdW1lIHdpdGggdGhlIGF0dHJpYnV0ZXMgZGVmaW5lZCBpbiB0aGUgY29ycmVzcG9uZGluZyBWb2x1bWVBdHRyaWJ1dGVzQ2xhc3MuIFRoaXMgaGFzIGEgZGlmZmVyZW50IHB1cnBvc2UgdGhhbiBzdG9yYWdlQ2xhc3NOYW1lLCBpdCBjYW4gYmUgY2hhbmdlZCBhZnRlciB0aGUgY2xhaW0gaXMgY3JlYXRlZC4gQW4gZW1wdHkgc3RyaW5nIHZhbHVlIG1lYW5zIHRoYXQgbm8gVm9sdW1lQXR0cmlidXRlc0NsYXNzIHdpbGwgYmUgYXBwbGllZCB0byB0aGUgY2xhaW0gYnV0IGl0J3Mgbm90IGFsbG93ZWQgdG8gcmVzZXQgdGhpcyBmaWVsZCB0byBlbXB0eSBzdHJpbmcgb25jZSBpdCBpcyBzZXQuIElmIHVuc3BlY2lmaWVkIGFuZCB0aGUgUGVyc2lzdGVudFZvbHVtZUNsYWltIGlzIHVuYm91bmQsIHRoZSBkZWZhdWx0IFZvbHVtZUF0dHJpYnV0ZXNDbGFzcyB3aWxsIGJlIHNldCBieSB0aGUgcGVyc2lzdGVudHZvbHVtZSBjb250cm9sbGVyIGlmIGl0IGV4aXN0cy4gSWYgdGhlIHJlc291cmNlIHJlZmVycmVkIHRvIGJ5IHZvbHVtZUF0dHJpYnV0ZXNDbGFzcyBkb2VzIG5vdCBleGlzdCwgdGhpcyBQZXJzaXN0ZW50Vm9sdW1lQ2xhaW0gd2lsbCBiZSBzZXQgdG8gYSBQZW5kaW5nIHN0YXRlLCBhcyByZWZsZWN0ZWQgYnkgdGhlIG1vZGlmeVZvbHVtZVN0YXR1cyBmaWVsZCwgdW50aWwgc3VjaCBhcyBhIHJlc291cmNlIGV4aXN0cy4gTW9yZSBpbmZvOiBodHRwczovL2t1YmVybmV0ZXMuaW8vZG9jcy9jb25jZXB0cy9zdG9yYWdlL3BlcnNpc3RlbnQtdm9sdW1lcyN2b2x1bWVhdHRyaWJ1dGVzY2xhc3MgKEFscGhhKSBVc2luZyB0aGlzIGZpZWxkIHJlcXVpcmVzIHRoZSBWb2x1bWVBdHRyaWJ1dGVzQ2xhc3MgZmVhdHVyZSBnYXRlIHRvIGJlIGVuYWJsZWQuIiwidHlwZSI6InN0cmluZyJ9LCJ2b2x1bWVNb2RlIjp7ImRlc2NyaXB0aW9uIjoidm9sdW1lTW9kZSBkZWZpbmVzIHdoYXQgdHlwZSBvZiB2b2x1bWUgaXMgcmVxdWlyZWQgYnkgdGhlIGNsYWltLiBWYWx1ZSBvZiBGaWxlc3lzdGVtIGlzIGltcGxpZWQgd2hlbiBub3QgaW5jbHVkZWQgaW4gY2xhaW0gc3BlYy4iLCJ0eXBlIjoic3RyaW5nIn0sInZvbHVtZU5hbWUiOnsiZGVzY3JpcHRpb24iOiJ2b2x1bWVOYW1lIGlzIHRoZSBiaW5kaW5nIHJlZmVyZW5jZSB0byB0aGUgUGVyc2lzdGVudFZvbHVtZSBiYWNraW5nIHRoaXMgY2xhaW0uIiwidHlwZSI6InN0cmluZyJ9fSwidHlwZSI6Im9iamVjdCJ9LCJzdGF0dXMiOnsiZGVzY3JpcHRpb24iOiJzdGF0dXMgcmVwcmVzZW50cyB0aGUgY3VycmVudCBpbmZvcm1hdGlvbi9zdGF0dXMgb2YgYSBwZXJzaXN0ZW50IHZvbHVtZSBjbGFpbS4gUmVhZC1vbmx5LiBNb3JlIGluZm86IGh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL2NvbmNlcHRzL3N0b3JhZ2UvcGVyc2lzdGVudC12b2x1bWVzI3BlcnNpc3RlbnR2b2x1bWVjbGFpbXMiLCJwcm9wZXJ0aWVzIjp7ImFjY2Vzc01vZGVzIjp7ImRlc2NyaXB0aW9uIjoiYWNjZXNzTW9kZXMgY29udGFpbnMgdGhlIGFjdHVhbCBhY2Nlc3MgbW9kZXMgdGhlIHZvbHVtZSBiYWNraW5nIHRoZSBQVkMgaGFzLiBNb3JlIGluZm86IGh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL2NvbmNlcHRzL3N0b3JhZ2UvcGVyc2lzdGVudC12b2x1bWVzI2FjY2Vzcy1tb2Rlcy0xIiwiaXRlbXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjoiYXJyYXkifSwiYWxsb2NhdGVkUmVzb3VyY2VTdGF0dXNlcyI6eyJhZGRpdGlvbmFsUHJvcGVydGllcyI6eyJkZXNjcmlwdGlvbiI6IldoZW4gYSBjb250cm9sbGVyIHJlY2VpdmVzIHBlcnNpc3RlbnR2b2x1bWUgY2xhaW0gdXBkYXRlIHdpdGggQ2xhaW1SZXNvdXJjZVN0YXR1cyBmb3IgYSByZXNvdXJjZSB0aGF0IGl0IGRvZXMgbm90IHJlY29nbml6ZXMsIHRoZW4gaXQgc2hvdWxkIGlnbm9yZSB0aGF0IHVwZGF0ZSBhbmQgbGV0IG90aGVyIGNvbnRyb2xsZXJzIGhhbmRsZSBpdC4iLCJ0eXBlIjoic3RyaW5nIn0sImRlc2NyaXB0aW9uIjoiYWxsb2NhdGVkUmVzb3VyY2VTdGF0dXNlcyBzdG9yZXMgc3RhdHVzIG9mIHJlc291cmNlIGJlaW5nIHJlc2l6ZWQgZm9yIHRoZSBnaXZlbiBQVkMuIEtleSBuYW1lcyBmb2xsb3cgc3RhbmRhcmQgS3ViZXJuZXRlcyBsYWJlbCBzeW50YXguIFZhbGlkIHZhbHVlcyBhcmUgZWl0aGVyOiAqIFVuLXByZWZpeGVkIGtleXM6IC0gc3RvcmFnZSAtIHRoZSBjYXBhY2l0eSBvZiB0aGUgdm9sdW1lLiAqIEN1c3RvbSByZXNvdXJjZXMgbXVzdCB1c2UgaW1wbGVtZW50YXRpb24tZGVmaW5lZCBwcmVmaXhlZCBuYW1lcyBzdWNoIGFzIFwiZXhhbXBsZS5jb20vbXktY3VzdG9tLXJlc291cmNlXCIgQXBhcnQgZnJvbSBhYm92ZSB2YWx1ZXMgLSBrZXlzIHRoYXQgYXJlIHVucHJlZml4ZWQgb3IgaGF2ZSBrdWJlcm5ldGVzLmlvIHByZWZpeCBhcmUgY29uc2lkZXJlZCByZXNlcnZlZCBhbmQgaGVuY2UgbWF5IG5vdCBiZSB1c2VkLiBcbiBDbGFpbVJlc291cmNlU3RhdHVzIGNhbiBiZSBpbiBhbnkgb2YgZm9sbG93aW5nIHN0YXRlczogLSBDb250cm9sbGVyUmVzaXplSW5Qcm9ncmVzczogU3RhdGUgc2V0IHdoZW4gcmVzaXplIGNvbnRyb2xsZXIgc3RhcnRzIHJlc2l6aW5nIHRoZSB2b2x1bWUgaW4gY29udHJvbC1wbGFuZS4gLSBDb250cm9sbGVyUmVzaXplRmFpbGVkOiBTdGF0ZSBzZXQgd2hlbiByZXNpemUgaGFzIGZhaWxlZCBpbiByZXNpemUgY29udHJvbGxlciB3aXRoIGEgdGVybWluYWwgZXJyb3IuIC0gTm9kZVJlc2l6ZVBlbmRpbmc6IFN0YXRlIHNldCB3aGVuIHJlc2l6ZSBjb250cm9sbGVyIGhhcyBmaW5pc2hlZCByZXNpemluZyB0aGUgdm9sdW1lIGJ1dCBmdXJ0aGVyIHJlc2l6aW5nIG9mIHZvbHVtZSBpcyBuZWVkZWQgb24gdGhlIG5vZGUuIC0gTm9kZVJlc2l6ZUluUHJvZ3Jlc3M6IFN0YXRlIHNldCB3aGVuIGt1YmVsZXQgc3RhcnRzIHJlc2l6aW5nIHRoZSB2b2x1bWUuIC0gTm9kZVJlc2l6ZUZhaWxlZDogU3RhdGUgc2V0IHdoZW4gcmVzaXppbmcgaGFzIGZhaWxlZCBpbiBrdWJlbGV0IHdpdGggYSB0ZXJtaW5hbCBlcnJvci4gVHJhbnNpZW50IGVycm9ycyBkb24ndCBzZXQgTm9kZVJlc2l6ZUZhaWxlZC4gRm9yIGV4YW1wbGU6IGlmIGV4cGFuZGluZyBhIFBWQyBmb3IgbW9yZSBjYXBhY2l0eSAtIHRoaXMgZmllbGQgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHN0YXRlczogLSBwdmMuc3RhdHVzLmFsbG9jYXRlZFJlc291cmNlU3RhdHVzWydzdG9yYWdlJ10gPSBcIkNvbnRyb2xsZXJSZXNpemVJblByb2dyZXNzXCIgLSBwdmMuc3RhdHVzLmFsbG9jYXRlZFJlc291cmNlU3RhdHVzWydzdG9yYWdlJ10gPSBcIkNvbnRyb2xsZXJSZXNpemVGYWlsZWRcIiAtIHB2Yy5zdGF0dXMuYWxsb2NhdGVkUmVzb3VyY2VTdGF0dXNbJ3N0b3JhZ2UnXSA9IFwiTm9kZVJlc2l6ZVBlbmRpbmdcIiAtIHB2Yy5zdGF0dXMuYWxsb2NhdGVkUmVzb3VyY2VTdGF0dXNbJ3N0b3JhZ2UnXSA9IFwiTm9kZVJlc2l6ZUluUHJvZ3Jlc3NcIiAtIHB2Yy5zdGF0dXMuYWxsb2NhdGVkUmVzb3VyY2VTdGF0dXNbJ3N0b3JhZ2UnXSA9IFwiTm9kZVJlc2l6ZUZhaWxlZFwiIFdoZW4gdGhpcyBmaWVsZCBpcyBub3Qgc2V0LCBpdCBtZWFucyB0aGF0IG5vIHJlc2l6ZSBvcGVyYXRpb24gaXMgaW4gcHJvZ3Jlc3MgZm9yIHRoZSBnaXZlbiBQVkMuIFxuIEEgY29udHJvbGxlciB0aGF0IHJlY2VpdmVzIFBWQyB1cGRhdGUgd2l0aCBwcmV2aW91c2x5IHVua25vd24gcmVzb3VyY2VOYW1lIG9yIENsYWltUmVzb3VyY2VTdGF0dXMgc2hvdWxkIGlnbm9yZSB0aGUgdXBkYXRlIGZvciB0aGUgcHVycG9zZSBpdCB3YXMgZGVzaWduZWQuIEZvciBleGFtcGxlIC0gYSBjb250cm9sbGVyIHRoYXQgb25seSBpcyByZXNwb25zaWJsZSBmb3IgcmVzaXppbmcgY2FwYWNpdHkgb2YgdGhlIHZvbHVtZSwgc2hvdWxkIGlnbm9yZSBQVkMgdXBkYXRlcyB0aGF0IGNoYW5nZSBvdGhlciB2YWxpZCByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIFBWQy4gXG4gVGhpcyBpcyBhbiBhbHBoYSBmaWVsZCBhbmQgcmVxdWlyZXMgZW5hYmxpbmcgUmVjb3ZlclZvbHVtZUV4cGFuc2lvbkZhaWx1cmUgZmVhdHVyZS4iLCJ0eXBlIjoib2JqZWN0IiwieC1rdWJlcm5ldGVzLW1hcC10eXBlIjoiZ3JhbnVsYXIifSwiYWxsb2NhdGVkUmVzb3VyY2VzIjp7ImFkZGl0aW9uYWxQcm9wZXJ0aWVzIjp7ImFueU9mIjpbeyJ0eXBlIjoiaW50ZWdlciJ9LHsidHlwZSI6InN0cmluZyJ9XSwicGF0dGVybiI6Il4oXFwrfC0pPygoWzAtOV0rKFxcLlswLTldKik/KXwoXFwuWzAtOV0rKSkoKFtLTUdUUEVdaSl8W251bWtNR1RQRV18KFtlRV0oXFwrfC0pPygoWzAtOV0rKFxcLlswLTldKik/KXwoXFwuWzAtOV0rKSkpKT8kIiwieC1rdWJlcm5ldGVzLWludC1vci1zdHJpbmciOnRydWV9LCJkZXNjcmlwdGlvbiI6ImFsbG9jYXRlZFJlc291cmNlcyB0cmFja3MgdGhlIHJlc291cmNlcyBhbGxvY2F0ZWQgdG8gYSBQVkMgaW5jbHVkaW5nIGl0cyBjYXBhY2l0eS4gS2V5IG5hbWVzIGZvbGxvdyBzdGFuZGFyZCBLdWJlcm5ldGVzIGxhYmVsIHN5bnRheC4gVmFsaWQgdmFsdWVzIGFyZSBlaXRoZXI6ICogVW4tcHJlZml4ZWQga2V5czogLSBzdG9yYWdlIC0gdGhlIGNhcGFjaXR5IG9mIHRoZSB2b2x1bWUuICogQ3VzdG9tIHJlc291cmNlcyBtdXN0IHVzZSBpbXBsZW1lbnRhdGlvbi1kZWZpbmVkIHByZWZpeGVkIG5hbWVzIHN1Y2ggYXMgXCJleGFtcGxlLmNvbS9teS1jdXN0b20tcmVzb3VyY2VcIiBBcGFydCBmcm9tIGFib3ZlIHZhbHVlcyAtIGtleXMgdGhhdCBhcmUgdW5wcmVmaXhlZCBvciBoYXZlIGt1YmVybmV0ZXMuaW8gcHJlZml4IGFyZSBjb25zaWRlcmVkIHJlc2VydmVkIGFuZCBoZW5jZSBtYXkgbm90IGJlIHVzZWQuIFxuIENhcGFjaXR5IHJlcG9ydGVkIGhlcmUgbWF5IGJlIGxhcmdlciB0aGFuIHRoZSBhY3R1YWwgY2FwYWNpdHkgd2hlbiBhIHZvbHVtZSBleHBhbnNpb24gb3BlcmF0aW9uIGlzIHJlcXVlc3RlZC4gRm9yIHN0b3JhZ2UgcXVvdGEsIHRoZSBsYXJnZXIgdmFsdWUgZnJvbSBhbGxvY2F0ZWRSZXNvdXJjZXMgYW5kIFBWQy5zcGVjLnJlc291cmNlcyBpcyB1c2VkLiBJZiBhbGxvY2F0ZWRSZXNvdXJjZXMgaXMgbm90IHNldCwgUFZDLnNwZWMucmVzb3VyY2VzIGFsb25lIGlzIHVzZWQgZm9yIHF1b3RhIGNhbGN1bGF0aW9uLiBJZiBhIHZvbHVtZSBleHBhbnNpb24gY2FwYWNpdHkgcmVxdWVzdCBpcyBsb3dlcmVkLCBhbGxvY2F0ZWRSZXNvdXJjZXMgaXMgb25seSBsb3dlcmVkIGlmIHRoZXJlIGFyZSBubyBleHBhbnNpb24gb3BlcmF0aW9ucyBpbiBwcm9ncmVzcyBhbmQgaWYgdGhlIGFjdHVhbCB2b2x1bWUgY2FwYWNpdHkgaXMgZXF1YWwgb3IgbG93ZXIgdGhhbiB0aGUgcmVxdWVzdGVkIGNhcGFjaXR5LiBcbiBBIGNvbnRyb2xsZXIgdGhhdCByZWNlaXZlcyBQVkMgdXBkYXRlIHdpdGggcHJldmlvdXNseSB1bmtub3duIHJlc291cmNlTmFtZSBzaG91bGQgaWdub3JlIHRoZSB1cGRhdGUgZm9yIHRoZSBwdXJwb3NlIGl0IHdhcyBkZXNpZ25lZC4gRm9yIGV4YW1wbGUgLSBhIGNvbnRyb2xsZXIgdGhhdCBvbmx5IGlzIHJlc3BvbnNpYmxlIGZvciByZXNpemluZyBjYXBhY2l0eSBvZiB0aGUgdm9sdW1lLCBzaG91bGQgaWdub3JlIFBWQyB1cGRhdGVzIHRoYXQgY2hhbmdlIG90aGVyIHZhbGlkIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggUFZDLiBcbiBUaGlzIGlzIGFuIGFscGhhIGZpZWxkIGFuZCByZXF1aXJlcyBlbmFibGluZyBSZWNvdmVyVm9sdW1lRXhwYW5zaW9uRmFpbHVyZSBmZWF0dXJlLiIsInR5cGUiOiJvYmplY3QifSwiY2FwYWNpdHkiOnsiYWRkaXRpb25hbFByb3BlcnRpZXMiOnsiYW55T2YiOlt7InR5cGUiOiJpbnRlZ2VyIn0seyJ0eXBlIjoic3RyaW5nIn1dLCJwYXR0ZXJuIjoiXihcXCt8LSk/KChbMC05XSsoXFwuWzAtOV0qKT8pfChcXC5bMC05XSspKSgoW0tNR1RQRV1pKXxbbnVta01HVFBFXXwoW2VFXShcXCt8LSk/KChbMC05XSsoXFwuWzAtOV0qKT8pfChcXC5bMC05XSspKSkpPyQiLCJ4LWt1YmVybmV0ZXMtaW50LW9yLXN0cmluZyI6dHJ1ZX0sImRlc2NyaXB0aW9uIjoiY2FwYWNpdHkgcmVwcmVzZW50cyB0aGUgYWN0dWFsIHJlc291cmNlcyBvZiB0aGUgdW5kZXJseWluZyB2b2x1bWUuIiwidHlwZSI6Im9iamVjdCJ9LCJjb25kaXRpb25zIjp7ImRlc2NyaXB0aW9uIjoiY29uZGl0aW9ucyBpcyB0aGUgY3VycmVudCBDb25kaXRpb24gb2YgcGVyc2lzdGVudCB2b2x1bWUgY2xhaW0uIElmIHVuZGVybHlpbmcgcGVyc2lzdGVudCB2b2x1bWUgaXMgYmVpbmcgcmVzaXplZCB0aGVuIHRoZSBDb25kaXRpb24gd2lsbCBiZSBzZXQgdG8gJ1Jlc2l6ZVN0YXJ0ZWQnLiIsIml0ZW1zIjp7ImRlc2NyaXB0aW9uIjoiUGVyc2lzdGVudFZvbHVtZUNsYWltQ29uZGl0aW9uIGNvbnRhaW5zIGRldGFpbHMgYWJvdXQgc3RhdGUgb2YgcHZjIiwicHJvcGVydGllcyI6eyJsYXN0UHJvYmVUaW1lIjp7ImRlc2NyaXB0aW9uIjoibGFzdFByb2JlVGltZSBpcyB0aGUgdGltZSB3ZSBwcm9iZWQgdGhlIGNvbmRpdGlvbi4iLCJmb3JtYXQiOiJkYXRlLXRpbWUiLCJ0eXBlIjoic3RyaW5nIn0sImxhc3RUcmFuc2l0aW9uVGltZSI6eyJkZXNjcmlwdGlvbiI6Imxhc3RUcmFuc2l0aW9uVGltZSBpcyB0aGUgdGltZSB0aGUgY29uZGl0aW9uIHRyYW5zaXRpb25lZCBmcm9tIG9uZSBzdGF0dXMgdG8gYW5vdGhlci4iLCJmb3JtYXQiOiJkYXRlLXRpbWUiLCJ0eXBlIjoic3RyaW5nIn0sIm1lc3NhZ2UiOnsiZGVzY3JpcHRpb24iOiJtZXNzYWdlIGlzIHRoZSBodW1hbi1yZWFkYWJsZSBtZXNzYWdlIGluZGljYXRpbmcgZGV0YWlscyBhYm91dCBsYXN0IHRyYW5zaXRpb24uIiwidHlwZSI6InN0cmluZyJ9LCJyZWFzb24iOnsiZGVzY3JpcHRpb24iOiJyZWFzb24gaXMgYSB1bmlxdWUsIHRoaXMgc2hvdWxkIGJlIGEgc2hvcnQsIG1hY2hpbmUgdW5kZXJzdGFuZGFibGUgc3RyaW5nIHRoYXQgZ2l2ZXMgdGhlIHJlYXNvbiBmb3IgY29uZGl0aW9uJ3MgbGFzdCB0cmFuc2l0aW9uLiBJZiBpdCByZXBvcnRzIFwiUmVzaXplU3RhcnRlZFwiIHRoYXQgbWVhbnMgdGhlIHVuZGVybHlpbmcgcGVyc2lzdGVudCB2b2x1bWUgaXMgYmVpbmcgcmVzaXplZC4iLCJ0eXBlIjoic3RyaW5nIn0sInN0YXR1cyI6eyJ0eXBlIjoic3RyaW5nIn0sInR5cGUiOnsiZGVzY3JpcHRpb24iOiJQZXJzaXN0ZW50Vm9sdW1lQ2xhaW1Db25kaXRpb25UeXBlIGlzIGEgdmFsaWQgdmFsdWUgb2YgUGVyc2lzdGVudFZvbHVtZUNsYWltQ29uZGl0aW9uLlR5cGUiLCJ0eXBlIjoic3RyaW5nIn19LCJyZXF1aXJlZCI6WyJzdGF0dXMiLCJ0eXBlIl0sInR5cGUiOiJvYmplY3QifSwidHlwZSI6ImFycmF5In0sImN1cnJlbnRWb2x1bWVBdHRyaWJ1dGVzQ2xhc3NOYW1lIjp7ImRlc2NyaXB0aW9uIjoiY3VycmVudFZvbHVtZUF0dHJpYnV0ZXNDbGFzc05hbWUgaXMgdGhlIGN1cnJlbnQgbmFtZSBvZiB0aGUgVm9sdW1lQXR0cmlidXRlc0NsYXNzIHRoZSBQVkMgaXMgdXNpbmcuIFdoZW4gdW5zZXQsIHRoZXJlIGlzIG5vIFZvbHVtZUF0dHJpYnV0ZUNsYXNzIGFwcGxpZWQgdG8gdGhpcyBQZXJzaXN0ZW50Vm9sdW1lQ2xhaW0gVGhpcyBpcyBhbiBhbHBoYSBmaWVsZCBhbmQgcmVxdWlyZXMgZW5hYmxpbmcgVm9sdW1lQXR0cmlidXRlc0NsYXNzIGZlYXR1cmUuIiwidHlwZSI6InN0cmluZyJ9LCJtb2RpZnlWb2x1bWVTdGF0dXMiOnsiZGVzY3JpcHRpb24iOiJNb2RpZnlWb2x1bWVTdGF0dXMgcmVwcmVzZW50cyB0aGUgc3RhdHVzIG9iamVjdCBvZiBDb250cm9sbGVyTW9kaWZ5Vm9sdW1lIG9wZXJhdGlvbi4gV2hlbiB0aGlzIGlzIHVuc2V0LCB0aGVyZSBpcyBubyBNb2RpZnlWb2x1bWUgb3BlcmF0aW9uIGJlaW5nIGF0dGVtcHRlZC4gVGhpcyBpcyBhbiBhbHBoYSBmaWVsZCBhbmQgcmVxdWlyZXMgZW5hYmxpbmcgVm9sdW1lQXR0cmlidXRlc0NsYXNzIGZlYXR1cmUuIiwicHJvcGVydGllcyI6eyJzdGF0dXMiOnsiZGVzY3JpcHRpb24iOiJzdGF0dXMgaXMgdGhlIHN0YXR1cyBvZiB0aGUgQ29udHJvbGxlck1vZGlmeVZvbHVtZSBvcGVyYXRpb24uIEl0IGNhbiBiZSBpbiBhbnkgb2YgZm9sbG93aW5nIHN0YXRlczogLSBQZW5kaW5nIFBlbmRpbmcgaW5kaWNhdGVzIHRoYXQgdGhlIFBlcnNpc3RlbnRWb2x1bWVDbGFpbSBjYW5ub3QgYmUgbW9kaWZpZWQgZHVlIHRvIHVubWV0IHJlcXVpcmVtZW50cywgc3VjaCBhcyB0aGUgc3BlY2lmaWVkIFZvbHVtZUF0dHJpYnV0ZXNDbGFzcyBub3QgZXhpc3RpbmcuIC0gSW5Qcm9ncmVzcyBJblByb2dyZXNzIGluZGljYXRlcyB0aGF0IHRoZSB2b2x1bWUgaXMgYmVpbmcgbW9kaWZpZWQuIC0gSW5mZWFzaWJsZSBJbmZlYXNpYmxlIGluZGljYXRlcyB0aGF0IHRoZSByZXF1ZXN0IGhhcyBiZWVuIHJlamVjdGVkIGFzIGludmFsaWQgYnkgdGhlIENTSSBkcml2ZXIuIFRvIHJlc29sdmUgdGhlIGVycm9yLCBhIHZhbGlkIFZvbHVtZUF0dHJpYnV0ZXNDbGFzcyBuZWVkcyB0byBiZSBzcGVjaWZpZWQuIE5vdGU6IE5ldyBzdGF0dXNlcyBjYW4gYmUgYWRkZWQgaW4gdGhlIGZ1dHVyZS4gQ29uc3VtZXJzIHNob3VsZCBjaGVjayBmb3IgdW5rbm93biBzdGF0dXNlcyBhbmQgZmFpbCBhcHByb3ByaWF0ZWx5LiIsInR5cGUiOiJzdHJpbmcifSwidGFyZ2V0Vm9sdW1lQXR0cmlidXRlc0NsYXNzTmFtZSI6eyJkZXNjcmlwdGlvbiI6InRhcmdldFZvbHVtZUF0dHJpYnV0ZXNDbGFzc05hbWUgaXMgdGhlIG5hbWUgb2YgdGhlIFZvbHVtZUF0dHJpYnV0ZXNDbGFzcyB0aGUgUFZDIGN1cnJlbnRseSBiZWluZyByZWNvbmNpbGVkIiwidHlwZSI6InN0cmluZyJ9fSwicmVxdWlyZWQiOlsic3RhdHVzIl0sInR5cGUiOiJvYmplY3QifSwicGhhc2UiOnsiZGVzY3JpcHRpb24iOiJwaGFzZSByZXByZXNlbnRzIHRoZSBjdXJyZW50IHBoYXNlIG9mIFBlcnNpc3RlbnRWb2x1bWVDbGFpbS4iLCJ0eXBlIjoic3RyaW5nIn19LCJ0eXBlIjoib2JqZWN0In19LCJ0eXBlIjoib2JqZWN0In0sImRpc2FibGVNYXN0ZXJOb2RlVG9sZXJhdGlvbiI6eyJkZXNjcmlwdGlvbiI6IkRpc2FibGVNYXN0ZXJOb2RlVG9sZXJhdGlvbiBjYW4gYmUgdXNlZCB0byB0dXJuIG9mZiB0aGUgYXJiaXRlciBtb24gdG9sZXJhdGlvbiBmb3IgdGhlIG1hc3RlciBub2RlIHRhaW50LiIsInR5cGUiOiJib29sZWFuIn0sImVuYWJsZSI6eyJ0eXBlIjoiYm9vbGVhbiJ9fSwidHlwZSI6Im9iamVjdCJ9LCJiYWNraW5nU3RvcmFnZUNsYXNzZXMiOnsiZGVzY3JpcHRpb24iOiJCYWNraW5nU3RvcmFnZUNsYXNzZXMgaXMgYSBsaXN0IG9mIHN0b3JhZ2UgY2xhc3NlcyB0aGF0IHdpbGwgYmUgcHJvdmlzaW9uZWQgYnkgdGhlIHN0b3JhZ2VjbHVzdGVyIGNvbnRyb2xsZXIgdG8gYmUgdXNlZCBpbiBzdG9yYWdlRGV2aWNlU2V0cyBzZWN0aW9uIG9mIHRoZSBDUi4iLCJpdGVtcyI6eyJkZXNjcmlwdGlvbiI6IkJhY2tpbmdTdG9yYWdlQ2xhc3MgZGVmaW5lcyB0aGUgYmFja2luZyBzdG9yYWdlY2xhc3MgZm9yIFN0b3JhZ2VEZXZpY2VTZXQiLCJwcm9wZXJ0aWVzIjp7Im1ldGFkYXRhIjp7InByb3BlcnRpZXMiOnsiYW5ub3RhdGlvbnMiOnsiYWRkaXRpb25hbFByb3BlcnRpZXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjoib2JqZWN0In0sImZpbmFsaXplcnMiOnsiaXRlbXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjoiYXJyYXkifSwibGFiZWxzIjp7ImFkZGl0aW9uYWxQcm9wZXJ0aWVzIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6Im9iamVjdCJ9LCJuYW1lIjp7InR5cGUiOiJzdHJpbmcifSwibmFtZXNwYWNlIjp7InR5cGUiOiJzdHJpbmcifX0sInR5cGUiOiJvYmplY3QifSwicGFyYW1ldGVycyI6eyJhZGRpdGlvbmFsUHJvcGVydGllcyI6eyJ0eXBlIjoic3RyaW5nIn0sImRlc2NyaXB0aW9uIjoiUGFyYW1ldGVycyBob2xkcyB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIHByb3Zpc2lvbmVyIHRoYXQgc2hvdWxkIGNyZWF0ZSB2b2x1bWVzIG9mIHRoaXMgc3RvcmFnZSBjbGFzcy4iLCJ0eXBlIjoib2JqZWN0In0sInByb3Zpc2lvbmVyIjp7ImRlc2NyaXB0aW9uIjoiUHJvdmlzaW9uZXIgaW5kaWNhdGVzIHRoZSB0eXBlIG9mIHRoZSBwcm92aXNpb25lci4iLCJ0eXBlIjoic3RyaW5nIn19LCJ0eXBlIjoib2JqZWN0In0sInR5cGUiOiJhcnJheSJ9LCJjc2kiOnsiZGVzY3JpcHRpb24iOiJDU0lEcml2ZXJTcGVjIGRlZmluZXMgdGhlIENTSSBkcml2ZXIgc2V0dGluZ3MgZm9yIHRoZSBTdG9yYWdlQ2x1c3Rlci4iLCJwcm9wZXJ0aWVzIjp7InJlYWRBZmZpbml0eSI6eyJkZXNjcmlwdGlvbiI6IlJlYWRBZmZpbml0eSBkZWZpbmVzIHRoZSByZWFkIGFmZmluaXR5IHNldHRpbmdzIGZvciBDU0kgZHJpdmVyLiIsInByb3BlcnRpZXMiOnsiY3J1c2hMb2NhdGlvbkxhYmVscyI6eyJkZXNjcmlwdGlvbiI6IkNydXNoTG9jYXRpb25MYWJlbHMgZGVmaW5lcyB3aGljaCBub2RlIGxhYmVscyB0byB1c2UgYXMgQ1JVU0ggbG9jYXRpb24uIFRoaXMgc2hvdWxkIGNvcnJlc3BvbmQgdG8gdGhlIHZhbHVlcyBzZXQgaW4gdGhlIENSVVNIIG1hcC4iLCJpdGVtcyI6eyJ0eXBlIjoic3RyaW5nIn0sInR5cGUiOiJhcnJheSJ9LCJlbmFibGVkIjp7ImRlc2NyaXB0aW9uIjoiRW5hYmxlcyByZWFkIGFmZmluaXR5IGZvciBDU0kgZHJpdmVyLiIsInR5cGUiOiJib29sZWFuIn19LCJ0eXBlIjoib2JqZWN0In19LCJ0eXBlIjoib2JqZWN0In0sImRlZmF1bHRTdG9yYWdlUHJvZmlsZSI6eyJkZXNjcmlwdGlvbiI6IkRlZmF1bHRTdG9yYWdlUHJvZmlsZSBpcyB0aGUgZGVmYXVsdCBzdG9yYWdlIHByb2ZpbGUgdG8gdXNlIGZvciB0aGUgc3RvcmFnZXJlcXVlc3QgYXMgU3RvcmFnZVByb2ZpbGUgaXMgb3B0aW9uYWwuIiwidHlwZSI6InN0cmluZyJ9LCJlbmFibGVDZXBoVG9vbHMiOnsiZGVzY3JpcHRpb24iOiJFbmFibGVDZXBoVG9vbHMgdG9nZ2xlcyBvbiB3aGV0aGVyIG9yIG5vdCB0aGUgY2VwaCB0b29scyBwb2Qgc2hvdWxkIGJlIGRlcGxveWVkLiBEZWZhdWx0cyB0byBmYWxzZSIsInR5cGUiOiJib29sZWFuIn0sImVuY3J5cHRpb24iOnsiZGVzY3JpcHRpb24iOiJFbmNyeXB0aW9uU3BlYyBkZWZpbmVzIGlmIGVuY3J5cHRpb24gc2hvdWxkIGJlIGVuYWJsZWQgZm9yIHRoZSBTdG9yYWdlIENsdXN0ZXIgSXQgaXMgb3B0aW9uYWwgYW5kIGRlZmF1bHRzIHRvIGZhbHNlLiIsInByb3BlcnRpZXMiOnsiY2x1c3RlcldpZGUiOnsidHlwZSI6ImJvb2xlYW4ifSwiZW5hYmxlIjp7ImRlc2NyaXB0aW9uIjoiZGVwcmVjYXRlZCBmcm9tIE9DUyA0LjEwIG9ud2FyZHMsIGFjdGluZyBhcyBhIGR1bW15LCBVSSB3aWxsIGtlZXAgc2VuZGluZyB0aGlzIGZsYWcgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgKE9DUCA0LjEwICsgT0NTIDQuOSkiLCJ0eXBlIjoiYm9vbGVhbiJ9LCJrZXlSb3RhdGlvbiI6eyJkZXNjcmlwdGlvbiI6IktleVJvdGF0aW9uIGRlZmluZXMgb3B0aW9ucyBmb3IgS2V5IFJvdGF0aW9uLiIsInByb3BlcnRpZXMiOnsiZW5hYmxlIjp7ImRlc2NyaXB0aW9uIjoiRW5hYmxlIHJlcHJlc2VudHMgd2hldGhlciB0aGUga2V5IHJvdGF0aW9uIGlzIGVuYWJsZWQuIiwidHlwZSI6ImJvb2xlYW4ifSwic2NoZWR1bGUiOnsiZGVmYXVsdCI6IkB3ZWVrbHkiLCJkZXNjcmlwdGlvbiI6IlNjaGVkdWxlIHJlcHJlc2VudHMgdGhlIGNyb24gc2NoZWR1bGUgZm9yIGtleSByb3RhdGlvbi4iLCJ0eXBlIjoic3RyaW5nIn19LCJ0eXBlIjoib2JqZWN0In0sImttcyI6eyJkZXNjcmlwdGlvbiI6IktleU1hbmFnZW1lbnRTZXJ2aWNlU3BlYyBwcm92aWRlcyBhIHdheSB0byBlbmFibGUgS01TIiwicHJvcGVydGllcyI6eyJlbmFibGUiOnsidHlwZSI6ImJvb2xlYW4ifX0sInR5cGUiOiJvYmplY3QifSwic3RvcmFnZUNsYXNzIjp7InR5cGUiOiJib29sZWFuIn0sInN0b3JhZ2VDbGFzc05hbWUiOnsiZGVzY3JpcHRpb24iOiJTdG9yYWdlQ2xhc3NOYW1lIHNwZWNpZmllcyB0aGUgbmFtZSBvZiB0aGUgc3RvcmFnZSBjbGFzcyBjcmVhdGVkIGZvciBjZXBoIGVuY3J5cHRlZCBibG9jayBwb29scyIsIm1heExlbmd0aCI6MjUzLCJwYXR0ZXJuIjoiXlthLXowLTldKFstYS16MC05XSpbYS16MC05XSk/KFxcXFwuW2EtejAtOV0oWy1hLXowLTldKlthLXowLTldKT8pKiQiLCJ0eXBlIjoic3RyaW5nIn19LCJ0eXBlIjoib2JqZWN0In0sImV4dGVybmFsU3RvcmFnZSI6eyJkZXNjcmlwdGlvbiI6IkV4dGVybmFsU3RvcmFnZSBpcyBvcHRpb25hbCBhbmQgZGVmYXVsdHMgdG8gZmFsc2UuIFdoZW4gc2V0IHRvIHRydWUsIE9DUyB3aWxsIGNvbm5lY3QgdG8gYW4gZXh0ZXJuYWwgT0NTIFN0b3JhZ2UgQ2x1c3RlciBpbnN0ZWFkIG9mIHByb3Zpc2lvbmluZyBvbmUgbG9jYWxseS4iLCJwcm9wZXJ0aWVzIjp7ImVuYWJsZSI6eyJ0eXBlIjoiYm9vbGVhbiJ9fSwidHlwZSI6Im9iamVjdCJ9LCJmbGV4aWJsZVNjYWxpbmciOnsiZGVzY3JpcHRpb24iOiJJZiBlbmFibGVkLCBzZXRzIHRoZSBmYWlsdXJlRG9tYWluIHRvIGhvc3QsIGFsbG93aW5nIGRldmljZXMgdG8gYmUgZGlzdHJpYnV0ZWQgZXZlbmx5IGFjcm9zcyBhbGwgbm9kZXMsIHJlZ2FyZGxlc3Mgb2YgZGlzdHJpYnV0aW9uIGluIHpvbmVzIG9yIHJhY2tzLiIsInR5cGUiOiJib29sZWFuIn0sImhvc3ROZXR3b3JrIjp7ImRlc2NyaXB0aW9uIjoiSG9zdE5ldHdvcmsgZGVmYXVsdHMgdG8gZmFsc2UiLCJ0eXBlIjoiYm9vbGVhbiJ9LCJpbnN0YW5jZVR5cGUiOnsidHlwZSI6InN0cmluZyJ9LCJsYWJlbFNlbGVjdG9yIjp7ImRlc2NyaXB0aW9uIjoiTGFiZWxTZWxlY3RvciBpcyB1c2VkIHRvIHNwZWNpZnkgY3VzdG9tIGxhYmVscyBvZiBub2RlcyB0byBydW4gT0NTIG9uIiwicHJvcGVydGllcyI6eyJtYXRjaEV4cHJlc3Npb25zIjp7ImRlc2NyaXB0aW9uIjoibWF0Y2hFeHByZXNzaW9ucyBpcyBhIGxpc3Qgb2YgbGFiZWwgc2VsZWN0b3IgcmVxdWlyZW1lbnRzLiBUaGUgcmVxdWlyZW1lbnRzIGFyZSBBTkRlZC4iLCJpdGVtcyI6eyJkZXNjcmlwdGlvbiI6IkEgbGFiZWwgc2VsZWN0b3IgcmVxdWlyZW1lbnQgaXMgYSBzZWxlY3RvciB0aGF0IGNvbnRhaW5zIHZhbHVlcywgYSBrZXksIGFuZCBhbiBvcGVyYXRvciB0aGF0IHJlbGF0ZXMgdGhlIGtleSBhbmQgdmFsdWVzLiIsInByb3BlcnRpZXMiOnsia2V5Ijp7ImRlc2NyaXB0aW9uIjoia2V5IGlzIHRoZSBsYWJlbCBrZXkgdGhhdCB0aGUgc2VsZWN0b3IgYXBwbGllcyB0by4iLCJ0eXBlIjoic3RyaW5nIn0sIm9wZXJhdG9yIjp7ImRlc2NyaXB0aW9uIjoib3BlcmF0b3IgcmVwcmVzZW50cyBhIGtleSdzIHJlbGF0aW9uc2hpcCB0byBhIHNldCBvZiB2YWx1ZXMuIFZhbGlkIG9wZXJhdG9ycyBhcmUgSW4sIE5vdEluLCBFeGlzdHMgYW5kIERvZXNOb3RFeGlzdC4iLCJ0eXBlIjoic3RyaW5nIn0sInZhbHVlcyI6eyJkZXNjcmlwdGlvbiI6InZhbHVlcyBpcyBhbiBhcnJheSBvZiBzdHJpbmcgdmFsdWVzLiBJZiB0aGUgb3BlcmF0b3IgaXMgSW4gb3IgTm90SW4sIHRoZSB2YWx1ZXMgYXJyYXkgbXVzdCBiZSBub24tZW1wdHkuIElmIHRoZSBvcGVyYXRvciBpcyBFeGlzdHMgb3IgRG9lc05vdEV4aXN0LCB0aGUgdmFsdWVzIGFycmF5IG11c3QgYmUgZW1wdHkuIFRoaXMgYXJyYXkgaXMgcmVwbGFjZWQgZHVyaW5nIGEgc3RyYXRlZ2ljIG1lcmdlIHBhdGNoLiIsIml0ZW1zIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6ImFycmF5In19LCJyZXF1aXJlZCI6WyJrZXkiLCJvcGVyYXRvciJdLCJ0eXBlIjoib2JqZWN0In0sInR5cGUiOiJhcnJheSJ9LCJtYXRjaExhYmVscyI6eyJhZGRpdGlvbmFsUHJvcGVydGllcyI6eyJ0eXBlIjoic3RyaW5nIn0sImRlc2NyaXB0aW9uIjoibWF0Y2hMYWJlbHMgaXMgYSBtYXAgb2Yge2tleSx2YWx1ZX0gcGFpcnMuIEEgc2luZ2xlIHtrZXksdmFsdWV9IGluIHRoZSBtYXRjaExhYmVscyBtYXAgaXMgZXF1aXZhbGVudCB0byBhbiBlbGVtZW50IG9mIG1hdGNoRXhwcmVzc2lvbnMsIHdob3NlIGtleSBmaWVsZCBpcyBcImtleVwiLCB0aGUgb3BlcmF0b3IgaXMgXCJJblwiLCBhbmQgdGhlIHZhbHVlcyBhcnJheSBjb250YWlucyBvbmx5IFwidmFsdWVcIi4gVGhlIHJlcXVpcmVtZW50cyBhcmUgQU5EZWQuIiwidHlwZSI6Im9iamVjdCJ9fSwidHlwZSI6Im9iamVjdCIsIngta3ViZXJuZXRlcy1tYXAtdHlwZSI6ImF0b21pYyJ9LCJsb2dDb2xsZWN0b3IiOnsiZGVzY3JpcHRpb24iOiJMb2dnaW5nIHJlcHJlc2VudHMgbG9nZ2luZ3Mgc2V0dGluZ3MiLCJudWxsYWJsZSI6dHJ1ZSwicHJvcGVydGllcyI6eyJlbmFibGVkIjp7ImRlc2NyaXB0aW9uIjoiRW5hYmxlZCByZXByZXNlbnRzIHdoZXRoZXIgdGhlIGxvZyBjb2xsZWN0b3IgaXMgZW5hYmxlZCIsInR5cGUiOiJib29sZWFuIn0sIm1heExvZ1NpemUiOnsiYW55T2YiOlt7InR5cGUiOiJpbnRlZ2VyIn0seyJ0eXBlIjoic3RyaW5nIn1dLCJkZXNjcmlwdGlvbiI6Ik1heExvZ1NpemUgaXMgdGhlIG1heGltdW0gc2l6ZSBvZiB0aGUgbG9nIHBlciBjZXBoIGRhZW1vbnMuIE11c3QgYmUgYXQgbGVhc3QgMU0uIiwicGF0dGVybiI6Il4oXFwrfC0pPygoWzAtOV0rKFxcLlswLTldKik/KXwoXFwuWzAtOV0rKSkoKFtLTUdUUEVdaSl8W251bWtNR1RQRV18KFtlRV0oXFwrfC0pPygoWzAtOV0rKFxcLlswLTldKik/KXwoXFwuWzAtOV0rKSkpKT8kIiwieC1rdWJlcm5ldGVzLWludC1vci1zdHJpbmciOnRydWV9LCJwZXJpb2RpY2l0eSI6eyJkZXNjcmlwdGlvbiI6IlBlcmlvZGljaXR5IGlzIHRoZSBwZXJpb2RpY2l0eSBvZiB0aGUgbG9nIHJvdGF0aW9uLiIsInBhdHRlcm4iOiJeJHxeKGhvdXJseXxkYWlseXx3ZWVrbHl8bW9udGhseXwxaHwyNGh8MWQpJCIsInR5cGUiOiJzdHJpbmcifX0sInR5cGUiOiJvYmplY3QifSwibWFuYWdlTm9kZXMiOnsidHlwZSI6ImJvb2xlYW4ifSwibWFuYWdlZFJlc291cmNlcyI6eyJkZXNjcmlwdGlvbiI6Ik1hbmFnZWRSZXNvdXJjZXMgc3BlY2lmaWVzIGhvdyB0byBkZWFsIHdpdGggYXV4aWxpYXJ5IHJlc291cmNlcyByZWNvbmNpbGVkIHdpdGggdGhlIFN0b3JhZ2VDbHVzdGVyIiwicHJvcGVydGllcyI6eyJjZXBoQmxvY2tQb29scyI6eyJkZXNjcmlwdGlvbiI6Ik1hbmFnZUNlcGhCbG9ja1Bvb2xzIGRlZmluZXMgaG93IHRvIHJlY29uY2lsZSBDZXBoQmxvY2tQb29scyIsInByb3BlcnRpZXMiOnsiZGVmYXVsdFN0b3JhZ2VDbGFzcyI6eyJkZXNjcmlwdGlvbiI6ImlmIHNldCB0byB0cnVlLCB0aGUgc3RvcmFnZUNsYXNzIGNyZWF0ZWQgZm9yIGNlcGhCbG9ja1Bvb2xzIHdpbGwgYmUgYW5ub3RhdGVkIGFzIHRoZSBkZWZhdWx0IGZvciB0aGUgd2hvbGUgY2x1c3RlciIsInR5cGUiOiJib29sZWFuIn0sImRpc2FibGVTbmFwc2hvdENsYXNzIjp7InR5cGUiOiJib29sZWFuIn0sImRpc2FibGVTdG9yYWdlQ2xhc3MiOnsidHlwZSI6ImJvb2xlYW4ifSwicmVjb25jaWxlU3RyYXRlZ3kiOnsidHlwZSI6InN0cmluZyJ9LCJzdG9yYWdlQ2xhc3NOYW1lIjp7ImRlc2NyaXB0aW9uIjoiU3RvcmFnZUNsYXNzTmFtZSBzcGVjaWZpZXMgdGhlIG5hbWUgb2YgdGhlIHN0b3JhZ2UgY2xhc3MgY3JlYXRlZCBmb3IgY2VwaCBibG9jayBwb29scyIsIm1heExlbmd0aCI6MjUzLCJwYXR0ZXJuIjoiXlthLXowLTldKFstYS16MC05XSpbYS16MC05XSk/KFxcXFwuW2EtejAtOV0oWy1hLXowLTldKlthLXowLTldKT8pKiQiLCJ0eXBlIjoic3RyaW5nIn0sInZpcnR1YWxpemF0aW9uU3RvcmFnZUNsYXNzTmFtZSI6eyJkZXNjcmlwdGlvbiI6IlZpcnR1YWxpemF0aW9uU3RvcmFnZUNsYXNzTmFtZSBzcGVjaWZpZXMgdGhlIG5hbWUgb2YgdGhlIHN0b3JhZ2UgY2xhc3MgY3JlYXRlZCBmb3IgY2VwaCBibG9jayBwb29scyBmb3IgdmlydHVhbGl6YXRpb24gZW52aXJvbm1lbnQiLCJtYXhMZW5ndGgiOjI1MywicGF0dGVybiI6Il5bYS16MC05XShbLWEtejAtOV0qW2EtejAtOV0pPyhcXFxcLlthLXowLTldKFstYS16MC05XSpbYS16MC05XSk/KSokIiwidHlwZSI6InN0cmluZyJ9fSwidHlwZSI6Im9iamVjdCJ9LCJjZXBoQ2x1c3RlciI6eyJkZXNjcmlwdGlvbiI6Ik1hbmFnZUNlcGhDbHVzdGVyIGRlZmluZXMgaG93IHRvIHJlY29uY2lsZSB0aGUgQ2VwaCBjbHVzdGVyIGRlZmluaXRpb24iLCJwcm9wZXJ0aWVzIjp7Im1nckNvdW50Ijp7ImVudW0iOlsxLDJdLCJ0eXBlIjoiaW50ZWdlciJ9LCJtb25Db3VudCI6eyJlbnVtIjpbMyw1XSwidHlwZSI6ImludGVnZXIifSwicmVjb25jaWxlU3RyYXRlZ3kiOnsidHlwZSI6InN0cmluZyJ9LCJ3YWl0VGltZW91dEZvckhlYWx0aHlPU0RJbk1pbnV0ZXMiOnsiZGVzY3JpcHRpb24iOiJXYWl0VGltZW91dEZvckhlYWx0aHlPU0RJbk1pbnV0ZXMgZGVmaW5lcyB0aGUgdGltZSB0aGUgb3BlcmF0b3Igd291bGQgd2FpdCBiZWZvcmUgYW4gT1NEIGNhbiBiZSBzdG9wcGVkIGZvciB1cGdyYWRlIG9yIHJlc3RhcnQuIElmIGBjb250aW51ZVVwZ3JhZGVBZnRlckNoZWNrc0V2ZW5JZk5vdEhlYWx0aHlgIGlzIGBmYWxzZWAgYW5kIHRoZSB0aW1lb3V0IGV4Y2VlZHMgYW5kIE9TRCBpcyBub3Qgb2sgdG8gc3RvcCwgdGhlbiB0aGUgb3BlcmF0b3Igd291bGQgc2tpcCB1cGdyYWRlIGZvciB0aGUgY3VycmVudCBPU0QgYW5kIHByb2NlZWQgd2l0aCB0aGUgbmV4dCBvbmUuIElmIGBjb250aW51ZVVwZ3JhZGVBZnRlckNoZWNrc0V2ZW5JZk5vdEhlYWx0aHlgIGlzIGB0cnVlYCwgdGhlbiBvcGVyYXRvciB3b3VsZCBjb250aW51ZSB3aXRoIHRoZSB1cGdyYWRlIG9mIGFuIE9TRCBldmVuIGlmIGl0cyBub3Qgb2sgdG8gc3RvcCBhZnRlciB0aGUgdGltZW91dC4gVGhpcyB0aW1lb3V0IHdvbid0IGJlIGFwcGxpZWQgaWYgYHNraXBVcGdyYWRlQ2hlY2tzYCBpcyBgdHJ1ZWAuIFRoZSBkZWZhdWx0IHdhaXQgdGltZW91dCBpcyAxMCBtaW51dGVzLiIsImZvcm1hdCI6ImludDY0IiwidHlwZSI6ImludGVnZXIifX0sInR5cGUiOiJvYmplY3QifSwiY2VwaENvbmZpZyI6eyJkZXNjcmlwdGlvbiI6Ik1hbmFnZUNlcGhDb25maWcgZGVmaW5lcyBob3cgdG8gcmVjb25jaWxlIHRoZSBDZXBoIGNvbmZpZ3VyYXRpb24iLCJwcm9wZXJ0aWVzIjp7InJlY29uY2lsZVN0cmF0ZWd5Ijp7InR5cGUiOiJzdHJpbmcifX0sInR5cGUiOiJvYmplY3QifSwiY2VwaERhc2hib2FyZCI6eyJkZXNjcmlwdGlvbiI6Ik1hbmFnZUNlcGhEYXNoYm9hcmQgZGVmaW5lcyBob3cgdG8gcmVjb25jaWxlIENlcGggZGFzaGJvYXJkIiwicHJvcGVydGllcyI6eyJlbmFibGUiOnsidHlwZSI6ImJvb2xlYW4ifSwic3NsIjp7ImRlc2NyaXB0aW9uIjoic2VydmUgdGhlIGRhc2hib2FyZCB1c2luZyBTU0wiLCJ0eXBlIjoiYm9vbGVhbiJ9fSwidHlwZSI6Im9iamVjdCJ9LCJjZXBoRmlsZXN5c3RlbXMiOnsiZGVzY3JpcHRpb24iOiJNYW5hZ2VDZXBoRmlsZXN5c3RlbXMgZGVmaW5lcyBob3cgdG8gcmVjb25jaWxlIENlcGhGaWxlc3lzdGVtcyIsInByb3BlcnRpZXMiOnsiYWN0aXZlTWV0YWRhdGFTZXJ2ZXJzIjp7InR5cGUiOiJpbnRlZ2VyIn0sImFkZGl0aW9uYWxEYXRhUG9vbHMiOnsiZGVzY3JpcHRpb24iOiJBZGRpdGlvbmFsRGF0YVBvb2xzIHNwZWNpZmllcyBsaXN0IG9mIGFkZGl0aW9uYWwgbmFtZWQgY2VwaGZzIGRhdGEgcG9vbHMiLCJpdGVtcyI6eyJkZXNjcmlwdGlvbiI6Ik5hbWVkUG9vbFNwZWMgcmVwcmVzZW50cyB0aGUgbmFtZWQgY2VwaCBwb29sIHNwZWMiLCJwcm9wZXJ0aWVzIjp7ImFwcGxpY2F0aW9uIjp7ImRlc2NyaXB0aW9uIjoiVGhlIGFwcGxpY2F0aW9uIG5hbWUgdG8gc2V0IG9uIHRoZSBwb29sLiBPbmx5IGV4cGVjdGVkIHRvIGJlIHNldCBmb3Igcmd3IHBvb2xzLiIsInR5cGUiOiJzdHJpbmcifSwiY29tcHJlc3Npb25Nb2RlIjp7ImRlc2NyaXB0aW9uIjoiREVQUkVDQVRFRDogdXNlIFBhcmFtZXRlcnMgaW5zdGVhZCwgZS5nLiwgUGFyYW1ldGVyc1tcImNvbXByZXNzaW9uX21vZGVcIl0gPSBcImZvcmNlXCIgVGhlIGlubGluZSBjb21wcmVzc2lvbiBtb2RlIGluIEJsdWVzdG9yZSBPU0QgdG8gc2V0IHRvIChvcHRpb25zIGFyZTogbm9uZSwgcGFzc2l2ZSwgYWdncmVzc2l2ZSwgZm9yY2UpIERvIE5PVCBzZXQgYSBkZWZhdWx0IHZhbHVlIGZvciBrdWJlYnVpbGRlciBhcyB0aGlzIHdpbGwgb3ZlcnJpZGUgdGhlIFBhcmFtZXRlcnMiLCJlbnVtIjpbIm5vbmUiLCJwYXNzaXZlIiwiYWdncmVzc2l2ZSIsImZvcmNlIiwiIl0sIm51bGxhYmxlIjp0cnVlLCJ0eXBlIjoic3RyaW5nIn0sImNydXNoUm9vdCI6eyJkZXNjcmlwdGlvbiI6IlRoZSByb290IG9mIHRoZSBjcnVzaCBoaWVyYXJjaHkgdXRpbGl6ZWQgYnkgdGhlIHBvb2wiLCJudWxsYWJsZSI6dHJ1ZSwidHlwZSI6InN0cmluZyJ9LCJkZXZpY2VDbGFzcyI6eyJkZXNjcmlwdGlvbiI6IlRoZSBkZXZpY2UgY2xhc3MgdGhlIE9TRCBzaG91bGQgc2V0IHRvIGZvciB1c2UgaW4gdGhlIHBvb2wiLCJudWxsYWJsZSI6dHJ1ZSwidHlwZSI6InN0cmluZyJ9LCJlbmFibGVSQkRTdGF0cyI6eyJkZXNjcmlwdGlvbiI6IkVuYWJsZVJCRFN0YXRzIGlzIHVzZWQgdG8gZW5hYmxlIGdhdGhlcmluZyBvZiBzdGF0aXN0aWNzIGZvciBhbGwgUkJEIGltYWdlcyBpbiB0aGUgcG9vbCIsInR5cGUiOiJib29sZWFuIn0sImVyYXN1cmVDb2RlZCI6eyJkZXNjcmlwdGlvbiI6IlRoZSBlcmFzdXJlIGNvZGUgc2V0dGluZ3MiLCJwcm9wZXJ0aWVzIjp7ImFsZ29yaXRobSI6eyJkZXNjcmlwdGlvbiI6IlRoZSBhbGdvcml0aG0gZm9yIGVyYXN1cmUgY29kaW5nIiwidHlwZSI6InN0cmluZyJ9LCJjb2RpbmdDaHVua3MiOnsiZGVzY3JpcHRpb24iOiJOdW1iZXIgb2YgY29kaW5nIGNodW5rcyBwZXIgb2JqZWN0IGluIGFuIGVyYXN1cmUgY29kZWQgc3RvcmFnZSBwb29sIChyZXF1aXJlZCBmb3IgZXJhc3VyZS1jb2RlZCBwb29sIHR5cGUpLiBUaGlzIGlzIHRoZSBudW1iZXIgb2YgT1NEcyB0aGF0IGNhbiBiZSBsb3N0IHNpbXVsdGFuZW91c2x5IGJlZm9yZSBkYXRhIGNhbm5vdCBiZSByZWNvdmVyZWQuIiwibWluaW11bSI6MCwidHlwZSI6ImludGVnZXIifSwiZGF0YUNodW5rcyI6eyJkZXNjcmlwdGlvbiI6Ik51bWJlciBvZiBkYXRhIGNodW5rcyBwZXIgb2JqZWN0IGluIGFuIGVyYXN1cmUgY29kZWQgc3RvcmFnZSBwb29sIChyZXF1aXJlZCBmb3IgZXJhc3VyZS1jb2RlZCBwb29sIHR5cGUpLiBUaGUgbnVtYmVyIG9mIGNodW5rcyByZXF1aXJlZCB0byByZWNvdmVyIGFuIG9iamVjdCB3aGVuIGFueSBzaW5nbGUgT1NEIGlzIGxvc3QgaXMgdGhlIHNhbWUgYXMgZGF0YUNodW5rcyBzbyBiZSBhd2FyZSB0aGF0IHRoZSBsYXJnZXIgdGhlIG51bWJlciBvZiBkYXRhIGNodW5rcywgdGhlIGhpZ2hlciB0aGUgY29zdCBvZiByZWNvdmVyeS4iLCJtaW5pbXVtIjowLCJ0eXBlIjoiaW50ZWdlciJ9fSwicmVxdWlyZWQiOlsiY29kaW5nQ2h1bmtzIiwiZGF0YUNodW5rcyJdLCJ0eXBlIjoib2JqZWN0In0sImZhaWx1cmVEb21haW4iOnsiZGVzY3JpcHRpb24iOiJUaGUgZmFpbHVyZSBkb21haW46IG9zZC9ob3N0LyhyZWdpb24gb3Igem9uZSBpZiBhdmFpbGFibGUpIC0gdGVjaG5pY2FsbHkgYWxzbyBhbnkgdHlwZSBpbiB0aGUgY3J1c2ggbWFwIiwidHlwZSI6InN0cmluZyJ9LCJtaXJyb3JpbmciOnsiZGVzY3JpcHRpb24iOiJUaGUgbWlycm9yaW5nIHNldHRpbmdzIiwicHJvcGVydGllcyI6eyJlbmFibGVkIjp7ImRlc2NyaXB0aW9uIjoiRW5hYmxlZCB3aGV0aGVyIHRoaXMgcG9vbCBpcyBtaXJyb3JlZCBvciBub3QiLCJ0eXBlIjoiYm9vbGVhbiJ9LCJtb2RlIjp7ImRlc2NyaXB0aW9uIjoiTW9kZSBpcyB0aGUgbWlycm9yaW5nIG1vZGU6IGVpdGhlciBwb29sIG9yIGltYWdlIiwidHlwZSI6InN0cmluZyJ9LCJwZWVycyI6eyJkZXNjcmlwdGlvbiI6IlBlZXJzIHJlcHJlc2VudHMgdGhlIHBlZXJzIHNwZWMiLCJudWxsYWJsZSI6dHJ1ZSwicHJvcGVydGllcyI6eyJzZWNyZXROYW1lcyI6eyJkZXNjcmlwdGlvbiI6IlNlY3JldE5hbWVzIHJlcHJlc2VudHMgdGhlIEt1YmVybmV0ZXMgU2VjcmV0IG5hbWVzIHRvIGFkZCByYmQtbWlycm9yIG9yIGNlcGhmcy1taXJyb3IgcGVlcnMiLCJpdGVtcyI6eyJ0eXBlIjoic3RyaW5nIn0sInR5cGUiOiJhcnJheSJ9fSwidHlwZSI6Im9iamVjdCJ9LCJzbmFwc2hvdFNjaGVkdWxlcyI6eyJkZXNjcmlwdGlvbiI6IlNuYXBzaG90U2NoZWR1bGVzIGlzIHRoZSBzY2hlZHVsaW5nIG9mIHNuYXBzaG90IGZvciBtaXJyb3JlZCBpbWFnZXMvcG9vbHMiLCJpdGVtcyI6eyJkZXNjcmlwdGlvbiI6IlNuYXBzaG90U2NoZWR1bGVTcGVjIHJlcHJlc2VudHMgdGhlIHNuYXBzaG90IHNjaGVkdWxpbmcgc2V0dGluZ3Mgb2YgYSBtaXJyb3JlZCBwb29sIiwicHJvcGVydGllcyI6eyJpbnRlcnZhbCI6eyJkZXNjcmlwdGlvbiI6IkludGVydmFsIHJlcHJlc2VudCB0aGUgcGVyaW9kaWNpdHkgb2YgdGhlIHNuYXBzaG90LiIsInR5cGUiOiJzdHJpbmcifSwicGF0aCI6eyJkZXNjcmlwdGlvbiI6IlBhdGggaXMgdGhlIHBhdGggdG8gc25hcHNob3QsIG9ubHkgdmFsaWQgZm9yIENlcGhGUyIsInR5cGUiOiJzdHJpbmcifSwic3RhcnRUaW1lIjp7ImRlc2NyaXB0aW9uIjoiU3RhcnRUaW1lIGluZGljYXRlcyB3aGVuIHRvIHN0YXJ0IHRoZSBzbmFwc2hvdCIsInR5cGUiOiJzdHJpbmcifX0sInR5cGUiOiJvYmplY3QifSwidHlwZSI6ImFycmF5In19LCJ0eXBlIjoib2JqZWN0In0sIm5hbWUiOnsiZGVzY3JpcHRpb24iOiJOYW1lIG9mIHRoZSBwb29sIiwidHlwZSI6InN0cmluZyJ9LCJwYXJhbWV0ZXJzIjp7ImFkZGl0aW9uYWxQcm9wZXJ0aWVzIjp7InR5cGUiOiJzdHJpbmcifSwiZGVzY3JpcHRpb24iOiJQYXJhbWV0ZXJzIGlzIGEgbGlzdCBvZiBwcm9wZXJ0aWVzIHRvIGVuYWJsZSBvbiBhIGdpdmVuIHBvb2wiLCJudWxsYWJsZSI6dHJ1ZSwidHlwZSI6Im9iamVjdCIsIngta3ViZXJuZXRlcy1wcmVzZXJ2ZS11bmtub3duLWZpZWxkcyI6dHJ1ZX0sInF1b3RhcyI6eyJkZXNjcmlwdGlvbiI6IlRoZSBxdW90YSBzZXR0aW5ncyIsIm51bGxhYmxlIjp0cnVlLCJwcm9wZXJ0aWVzIjp7Im1heEJ5dGVzIjp7ImRlc2NyaXB0aW9uIjoiTWF4Qnl0ZXMgcmVwcmVzZW50cyB0aGUgcXVvdGEgaW4gYnl0ZXMgRGVwcmVjYXRlZCBpbiBmYXZvciBvZiBNYXhTaXplIiwiZm9ybWF0IjoiaW50NjQiLCJ0eXBlIjoiaW50ZWdlciJ9LCJtYXhPYmplY3RzIjp7ImRlc2NyaXB0aW9uIjoiTWF4T2JqZWN0cyByZXByZXNlbnRzIHRoZSBxdW90YSBpbiBvYmplY3RzIiwiZm9ybWF0IjoiaW50NjQiLCJ0eXBlIjoiaW50ZWdlciJ9LCJtYXhTaXplIjp7ImRlc2NyaXB0aW9uIjoiTWF4U2l6ZSByZXByZXNlbnRzIHRoZSBxdW90YSBpbiBieXRlcyBhcyBhIHN0cmluZyIsInBhdHRlcm4iOiJeWzAtOV0rW1xcLl0/WzAtOV0qKFtLTUdUUEVdaXxba01HVFBFXSk/JCIsInR5cGUiOiJzdHJpbmcifX0sInR5cGUiOiJvYmplY3QifSwicmVwbGljYXRlZCI6eyJkZXNjcmlwdGlvbiI6IlRoZSByZXBsaWNhdGlvbiBzZXR0aW5ncyIsInByb3BlcnRpZXMiOnsiaHlicmlkU3RvcmFnZSI6eyJkZXNjcmlwdGlvbiI6Ikh5YnJpZFN0b3JhZ2UgcmVwcmVzZW50cyBoeWJyaWQgc3RvcmFnZSB0aWVyIHNldHRpbmdzIiwibnVsbGFibGUiOnRydWUsInByb3BlcnRpZXMiOnsicHJpbWFyeURldmljZUNsYXNzIjp7ImRlc2NyaXB0aW9uIjoiUHJpbWFyeURldmljZUNsYXNzIHJlcHJlc2VudHMgaGlnaCBwZXJmb3JtYW5jZSB0aWVyIChmb3IgZXhhbXBsZSBTU0Qgb3IgTlZNRSkgZm9yIFByaW1hcnkgT1NEIiwibWluTGVuZ3RoIjoxLCJ0eXBlIjoic3RyaW5nIn0sInNlY29uZGFyeURldmljZUNsYXNzIjp7ImRlc2NyaXB0aW9uIjoiU2Vjb25kYXJ5RGV2aWNlQ2xhc3MgcmVwcmVzZW50cyBsb3cgcGVyZm9ybWFuY2UgdGllciAoZm9yIGV4YW1wbGUgSEREcykgZm9yIHJlbWFpbmluZyBPU0RzIiwibWluTGVuZ3RoIjoxLCJ0eXBlIjoic3RyaW5nIn19LCJyZXF1aXJlZCI6WyJwcmltYXJ5RGV2aWNlQ2xhc3MiLCJzZWNvbmRhcnlEZXZpY2VDbGFzcyJdLCJ0eXBlIjoib2JqZWN0In0sInJlcGxpY2FzUGVyRmFpbHVyZURvbWFpbiI6eyJkZXNjcmlwdGlvbiI6IlJlcGxpY2FzUGVyRmFpbHVyZURvbWFpbiB0aGUgbnVtYmVyIG9mIHJlcGxpY2EgaW4gdGhlIHNwZWNpZmllZCBmYWlsdXJlIGRvbWFpbiIsIm1pbmltdW0iOjEsInR5cGUiOiJpbnRlZ2VyIn0sInJlcXVpcmVTYWZlUmVwbGljYVNpemUiOnsiZGVzY3JpcHRpb24iOiJSZXF1aXJlU2FmZVJlcGxpY2FTaXplIGlmIGZhbHNlIGFsbG93cyB5b3UgdG8gc2V0IHJlcGxpY2EgMSIsInR5cGUiOiJib29sZWFuIn0sInNpemUiOnsiZGVzY3JpcHRpb24iOiJTaXplIC0gTnVtYmVyIG9mIGNvcGllcyBwZXIgb2JqZWN0IGluIGEgcmVwbGljYXRlZCBzdG9yYWdlIHBvb2wsIGluY2x1ZGluZyB0aGUgb2JqZWN0IGl0c2VsZiAocmVxdWlyZWQgZm9yIHJlcGxpY2F0ZWQgcG9vbCB0eXBlKSIsIm1pbmltdW0iOjAsInR5cGUiOiJpbnRlZ2VyIn0sInN1YkZhaWx1cmVEb21haW4iOnsiZGVzY3JpcHRpb24iOiJTdWJGYWlsdXJlRG9tYWluIHRoZSBuYW1lIG9mIHRoZSBzdWItZmFpbHVyZSBkb21haW4iLCJ0eXBlIjoic3RyaW5nIn0sInRhcmdldFNpemVSYXRpbyI6eyJkZXNjcmlwdGlvbiI6IlRhcmdldFNpemVSYXRpbyBnaXZlcyBhIGhpbnQgKCUpIHRvIENlcGggaW4gdGVybXMgb2YgZXhwZWN0ZWQgY29uc3VtcHRpb24gb2YgdGhlIHRvdGFsIGNsdXN0ZXIgY2FwYWNpdHkiLCJ0eXBlIjoibnVtYmVyIn19LCJyZXF1aXJlZCI6WyJzaXplIl0sInR5cGUiOiJvYmplY3QifSwic3RhdHVzQ2hlY2siOnsiZGVzY3JpcHRpb24iOiJUaGUgbWlycm9yaW5nIHN0YXR1c0NoZWNrIiwicHJvcGVydGllcyI6eyJtaXJyb3IiOnsiZGVzY3JpcHRpb24iOiJIZWFsdGhDaGVja1NwZWMgcmVwcmVzZW50cyB0aGUgaGVhbHRoIGNoZWNrIG9mIGFuIG9iamVjdCBzdG9yZSBidWNrZXQiLCJudWxsYWJsZSI6dHJ1ZSwicHJvcGVydGllcyI6eyJkaXNhYmxlZCI6eyJ0eXBlIjoiYm9vbGVhbiJ9LCJpbnRlcnZhbCI6eyJkZXNjcmlwdGlvbiI6IkludGVydmFsIGlzIHRoZSBpbnRlcm5hbCBpbiBzZWNvbmQgb3IgbWludXRlIGZvciB0aGUgaGVhbHRoIGNoZWNrIHRvIHJ1biBsaWtlIDYwcyBmb3IgNjAgc2Vjb25kcyIsInR5cGUiOiJzdHJpbmcifSwidGltZW91dCI6eyJ0eXBlIjoic3RyaW5nIn19LCJ0eXBlIjoib2JqZWN0In19LCJ0eXBlIjoib2JqZWN0IiwieC1rdWJlcm5ldGVzLXByZXNlcnZlLXVua25vd24tZmllbGRzIjp0cnVlfX0sInR5cGUiOiJvYmplY3QifSwidHlwZSI6ImFycmF5In0sImRhdGFQb29sU3BlYyI6eyJkZXNjcmlwdGlvbiI6IkRhdGFQb29sU3BlYyBzcGVjaWZpZXMgdGhlIHBvb2wgc3BlY2lmaWNhdGlvbiBmb3IgdGhlIGRlZmF1bHQgY2VwaGZzIGRhdGEgcG9vbCIsInByb3BlcnRpZXMiOnsiYXBwbGljYXRpb24iOnsiZGVzY3JpcHRpb24iOiJUaGUgYXBwbGljYXRpb24gbmFtZSB0byBzZXQgb24gdGhlIHBvb2wuIE9ubHkgZXhwZWN0ZWQgdG8gYmUgc2V0IGZvciByZ3cgcG9vbHMuIiwidHlwZSI6InN0cmluZyJ9LCJjb21wcmVzc2lvbk1vZGUiOnsiZGVzY3JpcHRpb24iOiJERVBSRUNBVEVEOiB1c2UgUGFyYW1ldGVycyBpbnN0ZWFkLCBlLmcuLCBQYXJhbWV0ZXJzW1wiY29tcHJlc3Npb25fbW9kZVwiXSA9IFwiZm9yY2VcIiBUaGUgaW5saW5lIGNvbXByZXNzaW9uIG1vZGUgaW4gQmx1ZXN0b3JlIE9TRCB0byBzZXQgdG8gKG9wdGlvbnMgYXJlOiBub25lLCBwYXNzaXZlLCBhZ2dyZXNzaXZlLCBmb3JjZSkgRG8gTk9UIHNldCBhIGRlZmF1bHQgdmFsdWUgZm9yIGt1YmVidWlsZGVyIGFzIHRoaXMgd2lsbCBvdmVycmlkZSB0aGUgUGFyYW1ldGVycyIsImVudW0iOlsibm9uZSIsInBhc3NpdmUiLCJhZ2dyZXNzaXZlIiwiZm9yY2UiLCIiXSwibnVsbGFibGUiOnRydWUsInR5cGUiOiJzdHJpbmcifSwiY3J1c2hSb290Ijp7ImRlc2NyaXB0aW9uIjoiVGhlIHJvb3Qgb2YgdGhlIGNydXNoIGhpZXJhcmNoeSB1dGlsaXplZCBieSB0aGUgcG9vbCIsIm51bGxhYmxlIjp0cnVlLCJ0eXBlIjoic3RyaW5nIn0sImRldmljZUNsYXNzIjp7ImRlc2NyaXB0aW9uIjoiVGhlIGRldmljZSBjbGFzcyB0aGUgT1NEIHNob3VsZCBzZXQgdG8gZm9yIHVzZSBpbiB0aGUgcG9vbCIsIm51bGxhYmxlIjp0cnVlLCJ0eXBlIjoic3RyaW5nIn0sImVuYWJsZVJCRFN0YXRzIjp7ImRlc2NyaXB0aW9uIjoiRW5hYmxlUkJEU3RhdHMgaXMgdXNlZCB0byBlbmFibGUgZ2F0aGVyaW5nIG9mIHN0YXRpc3RpY3MgZm9yIGFsbCBSQkQgaW1hZ2VzIGluIHRoZSBwb29sIiwidHlwZSI6ImJvb2xlYW4ifSwiZXJhc3VyZUNvZGVkIjp7ImRlc2NyaXB0aW9uIjoiVGhlIGVyYXN1cmUgY29kZSBzZXR0aW5ncyIsInByb3BlcnRpZXMiOnsiYWxnb3JpdGhtIjp7ImRlc2NyaXB0aW9uIjoiVGhlIGFsZ29yaXRobSBmb3IgZXJhc3VyZSBjb2RpbmciLCJ0eXBlIjoic3RyaW5nIn0sImNvZGluZ0NodW5rcyI6eyJkZXNjcmlwdGlvbiI6Ik51bWJlciBvZiBjb2RpbmcgY2h1bmtzIHBlciBvYmplY3QgaW4gYW4gZXJhc3VyZSBjb2RlZCBzdG9yYWdlIHBvb2wgKHJlcXVpcmVkIGZvciBlcmFzdXJlLWNvZGVkIHBvb2wgdHlwZSkuIFRoaXMgaXMgdGhlIG51bWJlciBvZiBPU0RzIHRoYXQgY2FuIGJlIGxvc3Qgc2ltdWx0YW5lb3VzbHkgYmVmb3JlIGRhdGEgY2Fubm90IGJlIHJlY292ZXJlZC4iLCJtaW5pbXVtIjowLCJ0eXBlIjoiaW50ZWdlciJ9LCJkYXRhQ2h1bmtzIjp7ImRlc2NyaXB0aW9uIjoiTnVtYmVyIG9mIGRhdGEgY2h1bmtzIHBlciBvYmplY3QgaW4gYW4gZXJhc3VyZSBjb2RlZCBzdG9yYWdlIHBvb2wgKHJlcXVpcmVkIGZvciBlcmFzdXJlLWNvZGVkIHBvb2wgdHlwZSkuIFRoZSBudW1iZXIgb2YgY2h1bmtzIHJlcXVpcmVkIHRvIHJlY292ZXIgYW4gb2JqZWN0IHdoZW4gYW55IHNpbmdsZSBPU0QgaXMgbG9zdCBpcyB0aGUgc2FtZSBhcyBkYXRhQ2h1bmtzIHNvIGJlIGF3YXJlIHRoYXQgdGhlIGxhcmdlciB0aGUgbnVtYmVyIG9mIGRhdGEgY2h1bmtzLCB0aGUgaGlnaGVyIHRoZSBjb3N0IG9mIHJlY292ZXJ5LiIsIm1pbmltdW0iOjAsInR5cGUiOiJpbnRlZ2VyIn19LCJyZXF1aXJlZCI6WyJjb2RpbmdDaHVua3MiLCJkYXRhQ2h1bmtzIl0sInR5cGUiOiJvYmplY3QifSwiZmFpbHVyZURvbWFpbiI6eyJkZXNjcmlwdGlvbiI6IlRoZSBmYWlsdXJlIGRvbWFpbjogb3NkL2hvc3QvKHJlZ2lvbiBvciB6b25lIGlmIGF2YWlsYWJsZSkgLSB0ZWNobmljYWxseSBhbHNvIGFueSB0eXBlIGluIHRoZSBjcnVzaCBtYXAiLCJ0eXBlIjoic3RyaW5nIn0sIm1pcnJvcmluZyI6eyJkZXNjcmlwdGlvbiI6IlRoZSBtaXJyb3Jpbmcgc2V0dGluZ3MiLCJwcm9wZXJ0aWVzIjp7ImVuYWJsZWQiOnsiZGVzY3JpcHRpb24iOiJFbmFibGVkIHdoZXRoZXIgdGhpcyBwb29sIGlzIG1pcnJvcmVkIG9yIG5vdCIsInR5cGUiOiJib29sZWFuIn0sIm1vZGUiOnsiZGVzY3JpcHRpb24iOiJNb2RlIGlzIHRoZSBtaXJyb3JpbmcgbW9kZTogZWl0aGVyIHBvb2wgb3IgaW1hZ2UiLCJ0eXBlIjoic3RyaW5nIn0sInBlZXJzIjp7ImRlc2NyaXB0aW9uIjoiUGVlcnMgcmVwcmVzZW50cyB0aGUgcGVlcnMgc3BlYyIsIm51bGxhYmxlIjp0cnVlLCJwcm9wZXJ0aWVzIjp7InNlY3JldE5hbWVzIjp7ImRlc2NyaXB0aW9uIjoiU2VjcmV0TmFtZXMgcmVwcmVzZW50cyB0aGUgS3ViZXJuZXRlcyBTZWNyZXQgbmFtZXMgdG8gYWRkIHJiZC1taXJyb3Igb3IgY2VwaGZzLW1pcnJvciBwZWVycyIsIml0ZW1zIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6ImFycmF5In19LCJ0eXBlIjoib2JqZWN0In0sInNuYXBzaG90U2NoZWR1bGVzIjp7ImRlc2NyaXB0aW9uIjoiU25hcHNob3RTY2hlZHVsZXMgaXMgdGhlIHNjaGVkdWxpbmcgb2Ygc25hcHNob3QgZm9yIG1pcnJvcmVkIGltYWdlcy9wb29scyIsIml0ZW1zIjp7ImRlc2NyaXB0aW9uIjoiU25hcHNob3RTY2hlZHVsZVNwZWMgcmVwcmVzZW50cyB0aGUgc25hcHNob3Qgc2NoZWR1bGluZyBzZXR0aW5ncyBvZiBhIG1pcnJvcmVkIHBvb2wiLCJwcm9wZXJ0aWVzIjp7ImludGVydmFsIjp7ImRlc2NyaXB0aW9uIjoiSW50ZXJ2YWwgcmVwcmVzZW50IHRoZSBwZXJpb2RpY2l0eSBvZiB0aGUgc25hcHNob3QuIiwidHlwZSI6InN0cmluZyJ9LCJwYXRoIjp7ImRlc2NyaXB0aW9uIjoiUGF0aCBpcyB0aGUgcGF0aCB0byBzbmFwc2hvdCwgb25seSB2YWxpZCBmb3IgQ2VwaEZTIiwidHlwZSI6InN0cmluZyJ9LCJzdGFydFRpbWUiOnsiZGVzY3JpcHRpb24iOiJTdGFydFRpbWUgaW5kaWNhdGVzIHdoZW4gdG8gc3RhcnQgdGhlIHNuYXBzaG90IiwidHlwZSI6InN0cmluZyJ9fSwidHlwZSI6Im9iamVjdCJ9LCJ0eXBlIjoiYXJyYXkifX0sInR5cGUiOiJvYmplY3QifSwicGFyYW1ldGVycyI6eyJhZGRpdGlvbmFsUHJvcGVydGllcyI6eyJ0eXBlIjoic3RyaW5nIn0sImRlc2NyaXB0aW9uIjoiUGFyYW1ldGVycyBpcyBhIGxpc3Qgb2YgcHJvcGVydGllcyB0byBlbmFibGUgb24gYSBnaXZlbiBwb29sIiwibnVsbGFibGUiOnRydWUsInR5cGUiOiJvYmplY3QiLCJ4LWt1YmVybmV0ZXMtcHJlc2VydmUtdW5rbm93bi1maWVsZHMiOnRydWV9LCJxdW90YXMiOnsiZGVzY3JpcHRpb24iOiJUaGUgcXVvdGEgc2V0dGluZ3MiLCJudWxsYWJsZSI6dHJ1ZSwicHJvcGVydGllcyI6eyJtYXhCeXRlcyI6eyJkZXNjcmlwdGlvbiI6Ik1heEJ5dGVzIHJlcHJlc2VudHMgdGhlIHF1b3RhIGluIGJ5dGVzIERlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgTWF4U2l6ZSIsImZvcm1hdCI6ImludDY0IiwidHlwZSI6ImludGVnZXIifSwibWF4T2JqZWN0cyI6eyJkZXNjcmlwdGlvbiI6Ik1heE9iamVjdHMgcmVwcmVzZW50cyB0aGUgcXVvdGEgaW4gb2JqZWN0cyIsImZvcm1hdCI6ImludDY0IiwidHlwZSI6ImludGVnZXIifSwibWF4U2l6ZSI6eyJkZXNjcmlwdGlvbiI6Ik1heFNpemUgcmVwcmVzZW50cyB0aGUgcXVvdGEgaW4gYnl0ZXMgYXMgYSBzdHJpbmciLCJwYXR0ZXJuIjoiXlswLTldK1tcXC5dP1swLTldKihbS01HVFBFXWl8W2tNR1RQRV0pPyQiLCJ0eXBlIjoic3RyaW5nIn19LCJ0eXBlIjoib2JqZWN0In0sInJlcGxpY2F0ZWQiOnsiZGVzY3JpcHRpb24iOiJUaGUgcmVwbGljYXRpb24gc2V0dGluZ3MiLCJwcm9wZXJ0aWVzIjp7Imh5YnJpZFN0b3JhZ2UiOnsiZGVzY3JpcHRpb24iOiJIeWJyaWRTdG9yYWdlIHJlcHJlc2VudHMgaHlicmlkIHN0b3JhZ2UgdGllciBzZXR0aW5ncyIsIm51bGxhYmxlIjp0cnVlLCJwcm9wZXJ0aWVzIjp7InByaW1hcnlEZXZpY2VDbGFzcyI6eyJkZXNjcmlwdGlvbiI6IlByaW1hcnlEZXZpY2VDbGFzcyByZXByZXNlbnRzIGhpZ2ggcGVyZm9ybWFuY2UgdGllciAoZm9yIGV4YW1wbGUgU1NEIG9yIE5WTUUpIGZvciBQcmltYXJ5IE9TRCIsIm1pbkxlbmd0aCI6MSwidHlwZSI6InN0cmluZyJ9LCJzZWNvbmRhcnlEZXZpY2VDbGFzcyI6eyJkZXNjcmlwdGlvbiI6IlNlY29uZGFyeURldmljZUNsYXNzIHJlcHJlc2VudHMgbG93IHBlcmZvcm1hbmNlIHRpZXIgKGZvciBleGFtcGxlIEhERHMpIGZvciByZW1haW5pbmcgT1NEcyIsIm1pbkxlbmd0aCI6MSwidHlwZSI6InN0cmluZyJ9fSwicmVxdWlyZWQiOlsicHJpbWFyeURldmljZUNsYXNzIiwic2Vjb25kYXJ5RGV2aWNlQ2xhc3MiXSwidHlwZSI6Im9iamVjdCJ9LCJyZXBsaWNhc1BlckZhaWx1cmVEb21haW4iOnsiZGVzY3JpcHRpb24iOiJSZXBsaWNhc1BlckZhaWx1cmVEb21haW4gdGhlIG51bWJlciBvZiByZXBsaWNhIGluIHRoZSBzcGVjaWZpZWQgZmFpbHVyZSBkb21haW4iLCJtaW5pbXVtIjoxLCJ0eXBlIjoiaW50ZWdlciJ9LCJyZXF1aXJlU2FmZVJlcGxpY2FTaXplIjp7ImRlc2NyaXB0aW9uIjoiUmVxdWlyZVNhZmVSZXBsaWNhU2l6ZSBpZiBmYWxzZSBhbGxvd3MgeW91IHRvIHNldCByZXBsaWNhIDEiLCJ0eXBlIjoiYm9vbGVhbiJ9LCJzaXplIjp7ImRlc2NyaXB0aW9uIjoiU2l6ZSAtIE51bWJlciBvZiBjb3BpZXMgcGVyIG9iamVjdCBpbiBhIHJlcGxpY2F0ZWQgc3RvcmFnZSBwb29sLCBpbmNsdWRpbmcgdGhlIG9iamVjdCBpdHNlbGYgKHJlcXVpcmVkIGZvciByZXBsaWNhdGVkIHBvb2wgdHlwZSkiLCJtaW5pbXVtIjowLCJ0eXBlIjoiaW50ZWdlciJ9LCJzdWJGYWlsdXJlRG9tYWluIjp7ImRlc2NyaXB0aW9uIjoiU3ViRmFpbHVyZURvbWFpbiB0aGUgbmFtZSBvZiB0aGUgc3ViLWZhaWx1cmUgZG9tYWluIiwidHlwZSI6InN0cmluZyJ9LCJ0YXJnZXRTaXplUmF0aW8iOnsiZGVzY3JpcHRpb24iOiJUYXJnZXRTaXplUmF0aW8gZ2l2ZXMgYSBoaW50ICglKSB0byBDZXBoIGluIHRlcm1zIG9mIGV4cGVjdGVkIGNvbnN1bXB0aW9uIG9mIHRoZSB0b3RhbCBjbHVzdGVyIGNhcGFjaXR5IiwidHlwZSI6Im51bWJlciJ9fSwicmVxdWlyZWQiOlsic2l6ZSJdLCJ0eXBlIjoib2JqZWN0In0sInN0YXR1c0NoZWNrIjp7ImRlc2NyaXB0aW9uIjoiVGhlIG1pcnJvcmluZyBzdGF0dXNDaGVjayIsInByb3BlcnRpZXMiOnsibWlycm9yIjp7ImRlc2NyaXB0aW9uIjoiSGVhbHRoQ2hlY2tTcGVjIHJlcHJlc2VudHMgdGhlIGhlYWx0aCBjaGVjayBvZiBhbiBvYmplY3Qgc3RvcmUgYnVja2V0IiwibnVsbGFibGUiOnRydWUsInByb3BlcnRpZXMiOnsiZGlzYWJsZWQiOnsidHlwZSI6ImJvb2xlYW4ifSwiaW50ZXJ2YWwiOnsiZGVzY3JpcHRpb24iOiJJbnRlcnZhbCBpcyB0aGUgaW50ZXJuYWwgaW4gc2Vjb25kIG9yIG1pbnV0ZSBmb3IgdGhlIGhlYWx0aCBjaGVjayB0byBydW4gbGlrZSA2MHMgZm9yIDYwIHNlY29uZHMiLCJ0eXBlIjoic3RyaW5nIn0sInRpbWVvdXQiOnsidHlwZSI6InN0cmluZyJ9fSwidHlwZSI6Im9iamVjdCJ9fSwidHlwZSI6Im9iamVjdCIsIngta3ViZXJuZXRlcy1wcmVzZXJ2ZS11bmtub3duLWZpZWxkcyI6dHJ1ZX19LCJ0eXBlIjoib2JqZWN0In0sImRpc2FibGVTbmFwc2hvdENsYXNzIjp7InR5cGUiOiJib29sZWFuIn0sImRpc2FibGVTdG9yYWdlQ2xhc3MiOnsidHlwZSI6ImJvb2xlYW4ifSwicmVjb25jaWxlU3RyYXRlZ3kiOnsidHlwZSI6InN0cmluZyJ9LCJzdG9yYWdlQ2xhc3NOYW1lIjp7ImRlc2NyaXB0aW9uIjoiU3RvcmFnZUNsYXNzTmFtZSBzcGVjaWZpZXMgdGhlIG5hbWUgb2YgdGhlIHN0b3JhZ2UgY2xhc3MgY3JlYXRlZCBmb3IgY2VwaGZzIiwibWF4TGVuZ3RoIjoyNTMsInBhdHRlcm4iOiJeW2EtejAtOV0oWy1hLXowLTldKlthLXowLTldKT8oXFxcXC5bYS16MC05XShbLWEtejAtOV0qW2EtejAtOV0pPykqJCIsInR5cGUiOiJzdHJpbmcifX0sInR5cGUiOiJvYmplY3QifSwiY2VwaE5vblJlc2lsaWVudFBvb2xzIjp7ImRlc2NyaXB0aW9uIjoiTWFuYWdlQ2VwaE5vblJlc2lsaWVudFBvb2xzIGRlZmluZXMgaG93IHRvIHJlY29uY2lsZSBjZXBoIG5vbi1yZXNpbGllbnQgcG9vbHMiLCJwcm9wZXJ0aWVzIjp7ImNvdW50Ijp7ImRlZmF1bHQiOjEsImRlc2NyaXB0aW9uIjoiQ291bnQgaXMgdGhlIG51bWJlciBvZiBkZXZpY2VzIGluIHRoaXMgc2V0IiwibWluaW11bSI6MSwidHlwZSI6ImludGVnZXIifSwiZW5hYmxlIjp7InR5cGUiOiJib29sZWFuIn0sInJlc291cmNlcyI6eyJkZXNjcmlwdGlvbiI6IlJlc291cmNlUmVxdWlyZW1lbnRzIChyZXF1ZXN0cy9saW1pdHMpIGZvciB0aGUgZGV2aWNlcyIsInByb3BlcnRpZXMiOnsiY2xhaW1zIjp7ImRlc2NyaXB0aW9uIjoiQ2xhaW1zIGxpc3RzIHRoZSBuYW1lcyBvZiByZXNvdXJjZXMsIGRlZmluZWQgaW4gc3BlYy5yZXNvdXJjZUNsYWltcywgdGhhdCBhcmUgdXNlZCBieSB0aGlzIGNvbnRhaW5lci4gXG4gVGhpcyBpcyBhbiBhbHBoYSBmaWVsZCBhbmQgcmVxdWlyZXMgZW5hYmxpbmcgdGhlIER5bmFtaWNSZXNvdXJjZUFsbG9jYXRpb24gZmVhdHVyZSBnYXRlLiBcbiBUaGlzIGZpZWxkIGlzIGltbXV0YWJsZS4gSXQgY2FuIG9ubHkgYmUgc2V0IGZvciBjb250YWluZXJzLiIsIml0ZW1zIjp7ImRlc2NyaXB0aW9uIjoiUmVzb3VyY2VDbGFpbSByZWZlcmVuY2VzIG9uZSBlbnRyeSBpbiBQb2RTcGVjLlJlc291cmNlQ2xhaW1zLiIsInByb3BlcnRpZXMiOnsibmFtZSI6eyJkZXNjcmlwdGlvbiI6Ik5hbWUgbXVzdCBtYXRjaCB0aGUgbmFtZSBvZiBvbmUgZW50cnkgaW4gcG9kLnNwZWMucmVzb3VyY2VDbGFpbXMgb2YgdGhlIFBvZCB3aGVyZSB0aGlzIGZpZWxkIGlzIHVzZWQuIEl0IG1ha2VzIHRoYXQgcmVzb3VyY2UgYXZhaWxhYmxlIGluc2lkZSBhIGNvbnRhaW5lci4iLCJ0eXBlIjoic3RyaW5nIn19LCJyZXF1aXJlZCI6WyJuYW1lIl0sInR5cGUiOiJvYmplY3QifSwidHlwZSI6ImFycmF5IiwieC1rdWJlcm5ldGVzLWxpc3QtbWFwLWtleXMiOlsibmFtZSJdLCJ4LWt1YmVybmV0ZXMtbGlzdC10eXBlIjoibWFwIn0sImxpbWl0cyI6eyJhZGRpdGlvbmFsUHJvcGVydGllcyI6eyJhbnlPZiI6W3sidHlwZSI6ImludGVnZXIifSx7InR5cGUiOiJzdHJpbmcifV0sInBhdHRlcm4iOiJeKFxcK3wtKT8oKFswLTldKyhcXC5bMC05XSopPyl8KFxcLlswLTldKykpKChbS01HVFBFXWkpfFtudW1rTUdUUEVdfChbZUVdKFxcK3wtKT8oKFswLTldKyhcXC5bMC05XSopPyl8KFxcLlswLTldKykpKSk/JCIsIngta3ViZXJuZXRlcy1pbnQtb3Itc3RyaW5nIjp0cnVlfSwiZGVzY3JpcHRpb24iOiJMaW1pdHMgZGVzY3JpYmVzIHRoZSBtYXhpbXVtIGFtb3VudCBvZiBjb21wdXRlIHJlc291cmNlcyBhbGxvd2VkLiBNb3JlIGluZm86IGh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL2NvbmNlcHRzL2NvbmZpZ3VyYXRpb24vbWFuYWdlLXJlc291cmNlcy1jb250YWluZXJzLyIsInR5cGUiOiJvYmplY3QifSwicmVxdWVzdHMiOnsiYWRkaXRpb25hbFByb3BlcnRpZXMiOnsiYW55T2YiOlt7InR5cGUiOiJpbnRlZ2VyIn0seyJ0eXBlIjoic3RyaW5nIn1dLCJwYXR0ZXJuIjoiXihcXCt8LSk/KChbMC05XSsoXFwuWzAtOV0qKT8pfChcXC5bMC05XSspKSgoW0tNR1RQRV1pKXxbbnVta01HVFBFXXwoW2VFXShcXCt8LSk/KChbMC05XSsoXFwuWzAtOV0qKT8pfChcXC5bMC05XSspKSkpPyQiLCJ4LWt1YmVybmV0ZXMtaW50LW9yLXN0cmluZyI6dHJ1ZX0sImRlc2NyaXB0aW9uIjoiUmVxdWVzdHMgZGVzY3JpYmVzIHRoZSBtaW5pbXVtIGFtb3VudCBvZiBjb21wdXRlIHJlc291cmNlcyByZXF1aXJlZC4gSWYgUmVxdWVzdHMgaXMgb21pdHRlZCBmb3IgYSBjb250YWluZXIsIGl0IGRlZmF1bHRzIHRvIExpbWl0cyBpZiB0aGF0IGlzIGV4cGxpY2l0bHkgc3BlY2lmaWVkLCBvdGhlcndpc2UgdG8gYW4gaW1wbGVtZW50YXRpb24tZGVmaW5lZCB2YWx1ZS4gUmVxdWVzdHMgY2Fubm90IGV4Y2VlZCBMaW1pdHMuIE1vcmUgaW5mbzogaHR0cHM6Ly9rdWJlcm5ldGVzLmlvL2RvY3MvY29uY2VwdHMvY29uZmlndXJhdGlvbi9tYW5hZ2UtcmVzb3VyY2VzLWNvbnRhaW5lcnMvIiwidHlwZSI6Im9iamVjdCJ9fSwidHlwZSI6Im9iamVjdCJ9LCJzdG9yYWdlQ2xhc3NOYW1lIjp7ImRlc2NyaXB0aW9uIjoiU3RvcmFnZUNsYXNzTmFtZSBzcGVjaWZpZXMgdGhlIG5hbWUgb2YgdGhlIHN0b3JhZ2UgY2xhc3MgY3JlYXRlZCBmb3IgY2VwaCBub24tcmVzaWxpZW50IHBvb2xzIiwibWF4TGVuZ3RoIjoyNTMsInBhdHRlcm4iOiJeW2EtejAtOV0oWy1hLXowLTldKlthLXowLTldKT8oXFxcXC5bYS16MC05XShbLWEtejAtOV0qW2EtejAtOV0pPykqJCIsInR5cGUiOiJzdHJpbmcifSwidm9sdW1lQ2xhaW1UZW1wbGF0ZSI6eyJkZXNjcmlwdGlvbiI6IlZvbHVtZUNsYWltVGVtcGxhdGVzIGlzIGEgUFZDIHRlbXBsYXRlIGZvciB0aGUgdW5kZXJseWluZyBzdG9yYWdlIGRldmljZXMiLCJwcm9wZXJ0aWVzIjp7ImFwaVZlcnNpb24iOnsiZGVzY3JpcHRpb24iOiJBUElWZXJzaW9uIGRlZmluZXMgdGhlIHZlcnNpb25lZCBzY2hlbWEgb2YgdGhpcyByZXByZXNlbnRhdGlvbiBvZiBhbiBvYmplY3QuIFNlcnZlcnMgc2hvdWxkIGNvbnZlcnQgcmVjb2duaXplZCBzY2hlbWFzIHRvIHRoZSBsYXRlc3QgaW50ZXJuYWwgdmFsdWUsIGFuZCBtYXkgcmVqZWN0IHVucmVjb2duaXplZCB2YWx1ZXMuIE1vcmUgaW5mbzogaHR0cHM6Ly9naXQuazhzLmlvL2NvbW11bml0eS9jb250cmlidXRvcnMvZGV2ZWwvc2lnLWFyY2hpdGVjdHVyZS9hcGktY29udmVudGlvbnMubWQjcmVzb3VyY2VzIiwidHlwZSI6InN0cmluZyJ9LCJraW5kIjp7ImRlc2NyaXB0aW9uIjoiS2luZCBpcyBhIHN0cmluZyB2YWx1ZSByZXByZXNlbnRpbmcgdGhlIFJFU1QgcmVzb3VyY2UgdGhpcyBvYmplY3QgcmVwcmVzZW50cy4gU2VydmVycyBtYXkgaW5mZXIgdGhpcyBmcm9tIHRoZSBlbmRwb2ludCB0aGUgY2xpZW50IHN1Ym1pdHMgcmVxdWVzdHMgdG8uIENhbm5vdCBiZSB1cGRhdGVkLiBJbiBDYW1lbENhc2UuIE1vcmUgaW5mbzogaHR0cHM6Ly9naXQuazhzLmlvL2NvbW11bml0eS9jb250cmlidXRvcnMvZGV2ZWwvc2lnLWFyY2hpdGVjdHVyZS9hcGktY29udmVudGlvbnMubWQjdHlwZXMta2luZHMiLCJ0eXBlIjoic3RyaW5nIn0sIm1ldGFkYXRhIjp7ImRlc2NyaXB0aW9uIjoiU3RhbmRhcmQgb2JqZWN0J3MgbWV0YWRhdGEuIE1vcmUgaW5mbzogaHR0cHM6Ly9naXQuazhzLmlvL2NvbW11bml0eS9jb250cmlidXRvcnMvZGV2ZWwvc2lnLWFyY2hpdGVjdHVyZS9hcGktY29udmVudGlvbnMubWQjbWV0YWRhdGEiLCJwcm9wZXJ0aWVzIjp7ImFubm90YXRpb25zIjp7ImFkZGl0aW9uYWxQcm9wZXJ0aWVzIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6Im9iamVjdCJ9LCJmaW5hbGl6ZXJzIjp7Iml0ZW1zIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6ImFycmF5In0sImxhYmVscyI6eyJhZGRpdGlvbmFsUHJvcGVydGllcyI6eyJ0eXBlIjoic3RyaW5nIn0sInR5cGUiOiJvYmplY3QifSwibmFtZSI6eyJ0eXBlIjoic3RyaW5nIn0sIm5hbWVzcGFjZSI6eyJ0eXBlIjoic3RyaW5nIn19LCJ0eXBlIjoib2JqZWN0In0sInNwZWMiOnsiZGVzY3JpcHRpb24iOiJzcGVjIGRlZmluZXMgdGhlIGRlc2lyZWQgY2hhcmFjdGVyaXN0aWNzIG9mIGEgdm9sdW1lIHJlcXVlc3RlZCBieSBhIHBvZCBhdXRob3IuIE1vcmUgaW5mbzogaHR0cHM6Ly9rdWJlcm5ldGVzLmlvL2RvY3MvY29uY2VwdHMvc3RvcmFnZS9wZXJzaXN0ZW50LXZvbHVtZXMjcGVyc2lzdGVudHZvbHVtZWNsYWltcyIsInByb3BlcnRpZXMiOnsiYWNjZXNzTW9kZXMiOnsiZGVzY3JpcHRpb24iOiJhY2Nlc3NNb2RlcyBjb250YWlucyB0aGUgZGVzaXJlZCBhY2Nlc3MgbW9kZXMgdGhlIHZvbHVtZSBzaG91bGQgaGF2ZS4gTW9yZSBpbmZvOiBodHRwczovL2t1YmVybmV0ZXMuaW8vZG9jcy9jb25jZXB0cy9zdG9yYWdlL3BlcnNpc3RlbnQtdm9sdW1lcyNhY2Nlc3MtbW9kZXMtMSIsIml0ZW1zIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6ImFycmF5In0sImRhdGFTb3VyY2UiOnsiZGVzY3JpcHRpb24iOiJkYXRhU291cmNlIGZpZWxkIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgZWl0aGVyOiAqIEFuIGV4aXN0aW5nIFZvbHVtZVNuYXBzaG90IG9iamVjdCAoc25hcHNob3Quc3RvcmFnZS5rOHMuaW8vVm9sdW1lU25hcHNob3QpICogQW4gZXhpc3RpbmcgUFZDIChQZXJzaXN0ZW50Vm9sdW1lQ2xhaW0pIElmIHRoZSBwcm92aXNpb25lciBvciBhbiBleHRlcm5hbCBjb250cm9sbGVyIGNhbiBzdXBwb3J0IHRoZSBzcGVjaWZpZWQgZGF0YSBzb3VyY2UsIGl0IHdpbGwgY3JlYXRlIGEgbmV3IHZvbHVtZSBiYXNlZCBvbiB0aGUgY29udGVudHMgb2YgdGhlIHNwZWNpZmllZCBkYXRhIHNvdXJjZS4gV2hlbiB0aGUgQW55Vm9sdW1lRGF0YVNvdXJjZSBmZWF0dXJlIGdhdGUgaXMgZW5hYmxlZCwgZGF0YVNvdXJjZSBjb250ZW50cyB3aWxsIGJlIGNvcGllZCB0byBkYXRhU291cmNlUmVmLCBhbmQgZGF0YVNvdXJjZVJlZiBjb250ZW50cyB3aWxsIGJlIGNvcGllZCB0byBkYXRhU291cmNlIHdoZW4gZGF0YVNvdXJjZVJlZi5uYW1lc3BhY2UgaXMgbm90IHNwZWNpZmllZC4gSWYgdGhlIG5hbWVzcGFjZSBpcyBzcGVjaWZpZWQsIHRoZW4gZGF0YVNvdXJjZVJlZiB3aWxsIG5vdCBiZSBjb3BpZWQgdG8gZGF0YVNvdXJjZS4iLCJwcm9wZXJ0aWVzIjp7ImFwaUdyb3VwIjp7ImRlc2NyaXB0aW9uIjoiQVBJR3JvdXAgaXMgdGhlIGdyb3VwIGZvciB0aGUgcmVzb3VyY2UgYmVpbmcgcmVmZXJlbmNlZC4gSWYgQVBJR3JvdXAgaXMgbm90IHNwZWNpZmllZCwgdGhlIHNwZWNpZmllZCBLaW5kIG11c3QgYmUgaW4gdGhlIGNvcmUgQVBJIGdyb3VwLiBGb3IgYW55IG90aGVyIHRoaXJkLXBhcnR5IHR5cGVzLCBBUElHcm91cCBpcyByZXF1aXJlZC4iLCJ0eXBlIjoic3RyaW5nIn0sImtpbmQiOnsiZGVzY3JpcHRpb24iOiJLaW5kIGlzIHRoZSB0eXBlIG9mIHJlc291cmNlIGJlaW5nIHJlZmVyZW5jZWQiLCJ0eXBlIjoic3RyaW5nIn0sIm5hbWUiOnsiZGVzY3JpcHRpb24iOiJOYW1lIGlzIHRoZSBuYW1lIG9mIHJlc291cmNlIGJlaW5nIHJlZmVyZW5jZWQiLCJ0eXBlIjoic3RyaW5nIn19LCJyZXF1aXJlZCI6WyJraW5kIiwibmFtZSJdLCJ0eXBlIjoib2JqZWN0IiwieC1rdWJlcm5ldGVzLW1hcC10eXBlIjoiYXRvbWljIn0sImRhdGFTb3VyY2VSZWYiOnsiZGVzY3JpcHRpb24iOiJkYXRhU291cmNlUmVmIHNwZWNpZmllcyB0aGUgb2JqZWN0IGZyb20gd2hpY2ggdG8gcG9wdWxhdGUgdGhlIHZvbHVtZSB3aXRoIGRhdGEsIGlmIGEgbm9uLWVtcHR5IHZvbHVtZSBpcyBkZXNpcmVkLiBUaGlzIG1heSBiZSBhbnkgb2JqZWN0IGZyb20gYSBub24tZW1wdHkgQVBJIGdyb3VwIChub24gY29yZSBvYmplY3QpIG9yIGEgUGVyc2lzdGVudFZvbHVtZUNsYWltIG9iamVjdC4gV2hlbiB0aGlzIGZpZWxkIGlzIHNwZWNpZmllZCwgdm9sdW1lIGJpbmRpbmcgd2lsbCBvbmx5IHN1Y2NlZWQgaWYgdGhlIHR5cGUgb2YgdGhlIHNwZWNpZmllZCBvYmplY3QgbWF0Y2hlcyBzb21lIGluc3RhbGxlZCB2b2x1bWUgcG9wdWxhdG9yIG9yIGR5bmFtaWMgcHJvdmlzaW9uZXIuIFRoaXMgZmllbGQgd2lsbCByZXBsYWNlIHRoZSBmdW5jdGlvbmFsaXR5IG9mIHRoZSBkYXRhU291cmNlIGZpZWxkIGFuZCBhcyBzdWNoIGlmIGJvdGggZmllbGRzIGFyZSBub24tZW1wdHksIHRoZXkgbXVzdCBoYXZlIHRoZSBzYW1lIHZhbHVlLiBGb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHksIHdoZW4gbmFtZXNwYWNlIGlzbid0IHNwZWNpZmllZCBpbiBkYXRhU291cmNlUmVmLCBib3RoIGZpZWxkcyAoZGF0YVNvdXJjZSBhbmQgZGF0YVNvdXJjZVJlZikgd2lsbCBiZSBzZXQgdG8gdGhlIHNhbWUgdmFsdWUgYXV0b21hdGljYWxseSBpZiBvbmUgb2YgdGhlbSBpcyBlbXB0eSBhbmQgdGhlIG90aGVyIGlzIG5vbi1lbXB0eS4gV2hlbiBuYW1lc3BhY2UgaXMgc3BlY2lmaWVkIGluIGRhdGFTb3VyY2VSZWYsIGRhdGFTb3VyY2UgaXNuJ3Qgc2V0IHRvIHRoZSBzYW1lIHZhbHVlIGFuZCBtdXN0IGJlIGVtcHR5LiBUaGVyZSBhcmUgdGhyZWUgaW1wb3J0YW50IGRpZmZlcmVuY2VzIGJldHdlZW4gZGF0YVNvdXJjZSBhbmQgZGF0YVNvdXJjZVJlZjogKiBXaGlsZSBkYXRhU291cmNlIG9ubHkgYWxsb3dzIHR3byBzcGVjaWZpYyB0eXBlcyBvZiBvYmplY3RzLCBkYXRhU291cmNlUmVmIGFsbG93cyBhbnkgbm9uLWNvcmUgb2JqZWN0LCBhcyB3ZWxsIGFzIFBlcnNpc3RlbnRWb2x1bWVDbGFpbSBvYmplY3RzLiAqIFdoaWxlIGRhdGFTb3VyY2UgaWdub3JlcyBkaXNhbGxvd2VkIHZhbHVlcyAoZHJvcHBpbmcgdGhlbSksIGRhdGFTb3VyY2VSZWYgcHJlc2VydmVzIGFsbCB2YWx1ZXMsIGFuZCBnZW5lcmF0ZXMgYW4gZXJyb3IgaWYgYSBkaXNhbGxvd2VkIHZhbHVlIGlzIHNwZWNpZmllZC4gKiBXaGlsZSBkYXRhU291cmNlIG9ubHkgYWxsb3dzIGxvY2FsIG9iamVjdHMsIGRhdGFTb3VyY2VSZWYgYWxsb3dzIG9iamVjdHMgaW4gYW55IG5hbWVzcGFjZXMuIChCZXRhKSBVc2luZyB0aGlzIGZpZWxkIHJlcXVpcmVzIHRoZSBBbnlWb2x1bWVEYXRhU291cmNlIGZlYXR1cmUgZ2F0ZSB0byBiZSBlbmFibGVkLiAoQWxwaGEpIFVzaW5nIHRoZSBuYW1lc3BhY2UgZmllbGQgb2YgZGF0YVNvdXJjZVJlZiByZXF1aXJlcyB0aGUgQ3Jvc3NOYW1lc3BhY2VWb2x1bWVEYXRhU291cmNlIGZlYXR1cmUgZ2F0ZSB0byBiZSBlbmFibGVkLiIsInByb3BlcnRpZXMiOnsiYXBpR3JvdXAiOnsiZGVzY3JpcHRpb24iOiJBUElHcm91cCBpcyB0aGUgZ3JvdXAgZm9yIHRoZSByZXNvdXJjZSBiZWluZyByZWZlcmVuY2VkLiBJZiBBUElHcm91cCBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgc3BlY2lmaWVkIEtpbmQgbXVzdCBiZSBpbiB0aGUgY29yZSBBUEkgZ3JvdXAuIEZvciBhbnkgb3RoZXIgdGhpcmQtcGFydHkgdHlwZXMsIEFQSUdyb3VwIGlzIHJlcXVpcmVkLiIsInR5cGUiOiJzdHJpbmcifSwia2luZCI6eyJkZXNjcmlwdGlvbiI6IktpbmQgaXMgdGhlIHR5cGUgb2YgcmVzb3VyY2UgYmVpbmcgcmVmZXJlbmNlZCIsInR5cGUiOiJzdHJpbmcifSwibmFtZSI6eyJkZXNjcmlwdGlvbiI6Ik5hbWUgaXMgdGhlIG5hbWUgb2YgcmVzb3VyY2UgYmVpbmcgcmVmZXJlbmNlZCIsInR5cGUiOiJzdHJpbmcifSwibmFtZXNwYWNlIjp7ImRlc2NyaXB0aW9uIjoiTmFtZXNwYWNlIGlzIHRoZSBuYW1lc3BhY2Ugb2YgcmVzb3VyY2UgYmVpbmcgcmVmZXJlbmNlZCBOb3RlIHRoYXQgd2hlbiBhIG5hbWVzcGFjZSBpcyBzcGVjaWZpZWQsIGEgZ2F0ZXdheS5uZXR3b3JraW5nLms4cy5pby9SZWZlcmVuY2VHcmFudCBvYmplY3QgaXMgcmVxdWlyZWQgaW4gdGhlIHJlZmVyZW50IG5hbWVzcGFjZSB0byBhbGxvdyB0aGF0IG5hbWVzcGFjZSdzIG93bmVyIHRvIGFjY2VwdCB0aGUgcmVmZXJlbmNlLiBTZWUgdGhlIFJlZmVyZW5jZUdyYW50IGRvY3VtZW50YXRpb24gZm9yIGRldGFpbHMuIChBbHBoYSkgVGhpcyBmaWVsZCByZXF1aXJlcyB0aGUgQ3Jvc3NOYW1lc3BhY2VWb2x1bWVEYXRhU291cmNlIGZlYXR1cmUgZ2F0ZSB0byBiZSBlbmFibGVkLiIsInR5cGUiOiJzdHJpbmcifX0sInJlcXVpcmVkIjpbImtpbmQiLCJuYW1lIl0sInR5cGUiOiJvYmplY3QifSwicmVzb3VyY2VzIjp7ImRlc2NyaXB0aW9uIjoicmVzb3VyY2VzIHJlcHJlc2VudHMgdGhlIG1pbmltdW0gcmVzb3VyY2VzIHRoZSB2b2x1bWUgc2hvdWxkIGhhdmUuIElmIFJlY292ZXJWb2x1bWVFeHBhbnNpb25GYWlsdXJlIGZlYXR1cmUgaXMgZW5hYmxlZCB1c2VycyBhcmUgYWxsb3dlZCB0byBzcGVjaWZ5IHJlc291cmNlIHJlcXVpcmVtZW50cyB0aGF0IGFyZSBsb3dlciB0aGFuIHByZXZpb3VzIHZhbHVlIGJ1dCBtdXN0IHN0aWxsIGJlIGhpZ2hlciB0aGFuIGNhcGFjaXR5IHJlY29yZGVkIGluIHRoZSBzdGF0dXMgZmllbGQgb2YgdGhlIGNsYWltLiBNb3JlIGluZm86IGh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL2NvbmNlcHRzL3N0b3JhZ2UvcGVyc2lzdGVudC12b2x1bWVzI3Jlc291cmNlcyIsInByb3BlcnRpZXMiOnsibGltaXRzIjp7ImFkZGl0aW9uYWxQcm9wZXJ0aWVzIjp7ImFueU9mIjpbeyJ0eXBlIjoiaW50ZWdlciJ9LHsidHlwZSI6InN0cmluZyJ9XSwicGF0dGVybiI6Il4oXFwrfC0pPygoWzAtOV0rKFxcLlswLTldKik/KXwoXFwuWzAtOV0rKSkoKFtLTUdUUEVdaSl8W251bWtNR1RQRV18KFtlRV0oXFwrfC0pPygoWzAtOV0rKFxcLlswLTldKik/KXwoXFwuWzAtOV0rKSkpKT8kIiwieC1rdWJlcm5ldGVzLWludC1vci1zdHJpbmciOnRydWV9LCJkZXNjcmlwdGlvbiI6IkxpbWl0cyBkZXNjcmliZXMgdGhlIG1heGltdW0gYW1vdW50IG9mIGNvbXB1dGUgcmVzb3VyY2VzIGFsbG93ZWQuIE1vcmUgaW5mbzogaHR0cHM6Ly9rdWJlcm5ldGVzLmlvL2RvY3MvY29uY2VwdHMvY29uZmlndXJhdGlvbi9tYW5hZ2UtcmVzb3VyY2VzLWNvbnRhaW5lcnMvIiwidHlwZSI6Im9iamVjdCJ9LCJyZXF1ZXN0cyI6eyJhZGRpdGlvbmFsUHJvcGVydGllcyI6eyJhbnlPZiI6W3sidHlwZSI6ImludGVnZXIifSx7InR5cGUiOiJzdHJpbmcifV0sInBhdHRlcm4iOiJeKFxcK3wtKT8oKFswLTldKyhcXC5bMC05XSopPyl8KFxcLlswLTldKykpKChbS01HVFBFXWkpfFtudW1rTUdUUEVdfChbZUVdKFxcK3wtKT8oKFswLTldKyhcXC5bMC05XSopPyl8KFxcLlswLTldKykpKSk/JCIsIngta3ViZXJuZXRlcy1pbnQtb3Itc3RyaW5nIjp0cnVlfSwiZGVzY3JpcHRpb24iOiJSZXF1ZXN0cyBkZXNjcmliZXMgdGhlIG1pbmltdW0gYW1vdW50IG9mIGNvbXB1dGUgcmVzb3VyY2VzIHJlcXVpcmVkLiBJZiBSZXF1ZXN0cyBpcyBvbWl0dGVkIGZvciBhIGNvbnRhaW5lciwgaXQgZGVmYXVsdHMgdG8gTGltaXRzIGlmIHRoYXQgaXMgZXhwbGljaXRseSBzcGVjaWZpZWQsIG90aGVyd2lzZSB0byBhbiBpbXBsZW1lbnRhdGlvbi1kZWZpbmVkIHZhbHVlLiBSZXF1ZXN0cyBjYW5ub3QgZXhjZWVkIExpbWl0cy4gTW9yZSBpbmZvOiBodHRwczovL2t1YmVybmV0ZXMuaW8vZG9jcy9jb25jZXB0cy9jb25maWd1cmF0aW9uL21hbmFnZS1yZXNvdXJjZXMtY29udGFpbmVycy8iLCJ0eXBlIjoib2JqZWN0In19LCJ0eXBlIjoib2JqZWN0In0sInNlbGVjdG9yIjp7ImRlc2NyaXB0aW9uIjoic2VsZWN0b3IgaXMgYSBsYWJlbCBxdWVyeSBvdmVyIHZvbHVtZXMgdG8gY29uc2lkZXIgZm9yIGJpbmRpbmcuIiwicHJvcGVydGllcyI6eyJtYXRjaEV4cHJlc3Npb25zIjp7ImRlc2NyaXB0aW9uIjoibWF0Y2hFeHByZXNzaW9ucyBpcyBhIGxpc3Qgb2YgbGFiZWwgc2VsZWN0b3IgcmVxdWlyZW1lbnRzLiBUaGUgcmVxdWlyZW1lbnRzIGFyZSBBTkRlZC4iLCJpdGVtcyI6eyJkZXNjcmlwdGlvbiI6IkEgbGFiZWwgc2VsZWN0b3IgcmVxdWlyZW1lbnQgaXMgYSBzZWxlY3RvciB0aGF0IGNvbnRhaW5zIHZhbHVlcywgYSBrZXksIGFuZCBhbiBvcGVyYXRvciB0aGF0IHJlbGF0ZXMgdGhlIGtleSBhbmQgdmFsdWVzLiIsInByb3BlcnRpZXMiOnsia2V5Ijp7ImRlc2NyaXB0aW9uIjoia2V5IGlzIHRoZSBsYWJlbCBrZXkgdGhhdCB0aGUgc2VsZWN0b3IgYXBwbGllcyB0by4iLCJ0eXBlIjoic3RyaW5nIn0sIm9wZXJhdG9yIjp7ImRlc2NyaXB0aW9uIjoib3BlcmF0b3IgcmVwcmVzZW50cyBhIGtleSdzIHJlbGF0aW9uc2hpcCB0byBhIHNldCBvZiB2YWx1ZXMuIFZhbGlkIG9wZXJhdG9ycyBhcmUgSW4sIE5vdEluLCBFeGlzdHMgYW5kIERvZXNOb3RFeGlzdC4iLCJ0eXBlIjoic3RyaW5nIn0sInZhbHVlcyI6eyJkZXNjcmlwdGlvbiI6InZhbHVlcyBpcyBhbiBhcnJheSBvZiBzdHJpbmcgdmFsdWVzLiBJZiB0aGUgb3BlcmF0b3IgaXMgSW4gb3IgTm90SW4sIHRoZSB2YWx1ZXMgYXJyYXkgbXVzdCBiZSBub24tZW1wdHkuIElmIHRoZSBvcGVyYXRvciBpcyBFeGlzdHMgb3IgRG9lc05vdEV4aXN0LCB0aGUgdmFsdWVzIGFycmF5IG11c3QgYmUgZW1wdHkuIFRoaXMgYXJyYXkgaXMgcmVwbGFjZWQgZHVyaW5nIGEgc3RyYXRlZ2ljIG1lcmdlIHBhdGNoLiIsIml0ZW1zIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6ImFycmF5In19LCJyZXF1aXJlZCI6WyJrZXkiLCJvcGVyYXRvciJdLCJ0eXBlIjoib2JqZWN0In0sInR5cGUiOiJhcnJheSJ9LCJtYXRjaExhYmVscyI6eyJhZGRpdGlvbmFsUHJvcGVydGllcyI6eyJ0eXBlIjoic3RyaW5nIn0sImRlc2NyaXB0aW9uIjoibWF0Y2hMYWJlbHMgaXMgYSBtYXAgb2Yge2tleSx2YWx1ZX0gcGFpcnMuIEEgc2luZ2xlIHtrZXksdmFsdWV9IGluIHRoZSBtYXRjaExhYmVscyBtYXAgaXMgZXF1aXZhbGVudCB0byBhbiBlbGVtZW50IG9mIG1hdGNoRXhwcmVzc2lvbnMsIHdob3NlIGtleSBmaWVsZCBpcyBcImtleVwiLCB0aGUgb3BlcmF0b3IgaXMgXCJJblwiLCBhbmQgdGhlIHZhbHVlcyBhcnJheSBjb250YWlucyBvbmx5IFwidmFsdWVcIi4gVGhlIHJlcXVpcmVtZW50cyBhcmUgQU5EZWQuIiwidHlwZSI6Im9iamVjdCJ9fSwidHlwZSI6Im9iamVjdCIsIngta3ViZXJuZXRlcy1tYXAtdHlwZSI6ImF0b21pYyJ9LCJzdG9yYWdlQ2xhc3NOYW1lIjp7ImRlc2NyaXB0aW9uIjoic3RvcmFnZUNsYXNzTmFtZSBpcyB0aGUgbmFtZSBvZiB0aGUgU3RvcmFnZUNsYXNzIHJlcXVpcmVkIGJ5IHRoZSBjbGFpbS4gTW9yZSBpbmZvOiBodHRwczovL2t1YmVybmV0ZXMuaW8vZG9jcy9jb25jZXB0cy9zdG9yYWdlL3BlcnNpc3RlbnQtdm9sdW1lcyNjbGFzcy0xIiwidHlwZSI6InN0cmluZyJ9LCJ2b2x1bWVBdHRyaWJ1dGVzQ2xhc3NOYW1lIjp7ImRlc2NyaXB0aW9uIjoidm9sdW1lQXR0cmlidXRlc0NsYXNzTmFtZSBtYXkgYmUgdXNlZCB0byBzZXQgdGhlIFZvbHVtZUF0dHJpYnV0ZXNDbGFzcyB1c2VkIGJ5IHRoaXMgY2xhaW0uIElmIHNwZWNpZmllZCwgdGhlIENTSSBkcml2ZXIgd2lsbCBjcmVhdGUgb3IgdXBkYXRlIHRoZSB2b2x1bWUgd2l0aCB0aGUgYXR0cmlidXRlcyBkZWZpbmVkIGluIHRoZSBjb3JyZXNwb25kaW5nIFZvbHVtZUF0dHJpYnV0ZXNDbGFzcy4gVGhpcyBoYXMgYSBkaWZmZXJlbnQgcHVycG9zZSB0aGFuIHN0b3JhZ2VDbGFzc05hbWUsIGl0IGNhbiBiZSBjaGFuZ2VkIGFmdGVyIHRoZSBjbGFpbSBpcyBjcmVhdGVkLiBBbiBlbXB0eSBzdHJpbmcgdmFsdWUgbWVhbnMgdGhhdCBubyBWb2x1bWVBdHRyaWJ1dGVzQ2xhc3Mgd2lsbCBiZSBhcHBsaWVkIHRvIHRoZSBjbGFpbSBidXQgaXQncyBub3QgYWxsb3dlZCB0byByZXNldCB0aGlzIGZpZWxkIHRvIGVtcHR5IHN0cmluZyBvbmNlIGl0IGlzIHNldC4gSWYgdW5zcGVjaWZpZWQgYW5kIHRoZSBQZXJzaXN0ZW50Vm9sdW1lQ2xhaW0gaXMgdW5ib3VuZCwgdGhlIGRlZmF1bHQgVm9sdW1lQXR0cmlidXRlc0NsYXNzIHdpbGwgYmUgc2V0IGJ5IHRoZSBwZXJzaXN0ZW50dm9sdW1lIGNvbnRyb2xsZXIgaWYgaXQgZXhpc3RzLiBJZiB0aGUgcmVzb3VyY2UgcmVmZXJyZWQgdG8gYnkgdm9sdW1lQXR0cmlidXRlc0NsYXNzIGRvZXMgbm90IGV4aXN0LCB0aGlzIFBlcnNpc3RlbnRWb2x1bWVDbGFpbSB3aWxsIGJlIHNldCB0byBhIFBlbmRpbmcgc3RhdGUsIGFzIHJlZmxlY3RlZCBieSB0aGUgbW9kaWZ5Vm9sdW1lU3RhdHVzIGZpZWxkLCB1bnRpbCBzdWNoIGFzIGEgcmVzb3VyY2UgZXhpc3RzLiBNb3JlIGluZm86IGh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL2NvbmNlcHRzL3N0b3JhZ2UvcGVyc2lzdGVudC12b2x1bWVzI3ZvbHVtZWF0dHJpYnV0ZXNjbGFzcyAoQWxwaGEpIFVzaW5nIHRoaXMgZmllbGQgcmVxdWlyZXMgdGhlIFZvbHVtZUF0dHJpYnV0ZXNDbGFzcyBmZWF0dXJlIGdhdGUgdG8gYmUgZW5hYmxlZC4iLCJ0eXBlIjoic3RyaW5nIn0sInZvbHVtZU1vZGUiOnsiZGVzY3JpcHRpb24iOiJ2b2x1bWVNb2RlIGRlZmluZXMgd2hhdCB0eXBlIG9mIHZvbHVtZSBpcyByZXF1aXJlZCBieSB0aGUgY2xhaW0uIFZhbHVlIG9mIEZpbGVzeXN0ZW0gaXMgaW1wbGllZCB3aGVuIG5vdCBpbmNsdWRlZCBpbiBjbGFpbSBzcGVjLiIsInR5cGUiOiJzdHJpbmcifSwidm9sdW1lTmFtZSI6eyJkZXNjcmlwdGlvbiI6InZvbHVtZU5hbWUgaXMgdGhlIGJpbmRpbmcgcmVmZXJlbmNlIHRvIHRoZSBQZXJzaXN0ZW50Vm9sdW1lIGJhY2tpbmcgdGhpcyBjbGFpbS4iLCJ0eXBlIjoic3RyaW5nIn19LCJ0eXBlIjoib2JqZWN0In0sInN0YXR1cyI6eyJkZXNjcmlwdGlvbiI6InN0YXR1cyByZXByZXNlbnRzIHRoZSBjdXJyZW50IGluZm9ybWF0aW9uL3N0YXR1cyBvZiBhIHBlcnNpc3RlbnQgdm9sdW1lIGNsYWltLiBSZWFkLW9ubHkuIE1vcmUgaW5mbzogaHR0cHM6Ly9rdWJlcm5ldGVzLmlvL2RvY3MvY29uY2VwdHMvc3RvcmFnZS9wZXJzaXN0ZW50LXZvbHVtZXMjcGVyc2lzdGVudHZvbHVtZWNsYWltcyIsInByb3BlcnRpZXMiOnsiYWNjZXNzTW9kZXMiOnsiZGVzY3JpcHRpb24iOiJhY2Nlc3NNb2RlcyBjb250YWlucyB0aGUgYWN0dWFsIGFjY2VzcyBtb2RlcyB0aGUgdm9sdW1lIGJhY2tpbmcgdGhlIFBWQyBoYXMuIE1vcmUgaW5mbzogaHR0cHM6Ly9rdWJlcm5ldGVzLmlvL2RvY3MvY29uY2VwdHMvc3RvcmFnZS9wZXJzaXN0ZW50LXZvbHVtZXMjYWNjZXNzLW1vZGVzLTEiLCJpdGVtcyI6eyJ0eXBlIjoic3RyaW5nIn0sInR5cGUiOiJhcnJheSJ9LCJhbGxvY2F0ZWRSZXNvdXJjZVN0YXR1c2VzIjp7ImFkZGl0aW9uYWxQcm9wZXJ0aWVzIjp7ImRlc2NyaXB0aW9uIjoiV2hlbiBhIGNvbnRyb2xsZXIgcmVjZWl2ZXMgcGVyc2lzdGVudHZvbHVtZSBjbGFpbSB1cGRhdGUgd2l0aCBDbGFpbVJlc291cmNlU3RhdHVzIGZvciBhIHJlc291cmNlIHRoYXQgaXQgZG9lcyBub3QgcmVjb2duaXplcywgdGhlbiBpdCBzaG91bGQgaWdub3JlIHRoYXQgdXBkYXRlIGFuZCBsZXQgb3RoZXIgY29udHJvbGxlcnMgaGFuZGxlIGl0LiIsInR5cGUiOiJzdHJpbmcifSwiZGVzY3JpcHRpb24iOiJhbGxvY2F0ZWRSZXNvdXJjZVN0YXR1c2VzIHN0b3JlcyBzdGF0dXMgb2YgcmVzb3VyY2UgYmVpbmcgcmVzaXplZCBmb3IgdGhlIGdpdmVuIFBWQy4gS2V5IG5hbWVzIGZvbGxvdyBzdGFuZGFyZCBLdWJlcm5ldGVzIGxhYmVsIHN5bnRheC4gVmFsaWQgdmFsdWVzIGFyZSBlaXRoZXI6ICogVW4tcHJlZml4ZWQga2V5czogLSBzdG9yYWdlIC0gdGhlIGNhcGFjaXR5IG9mIHRoZSB2b2x1bWUuICogQ3VzdG9tIHJlc291cmNlcyBtdXN0IHVzZSBpbXBsZW1lbnRhdGlvbi1kZWZpbmVkIHByZWZpeGVkIG5hbWVzIHN1Y2ggYXMgXCJleGFtcGxlLmNvbS9teS1jdXN0b20tcmVzb3VyY2VcIiBBcGFydCBmcm9tIGFib3ZlIHZhbHVlcyAtIGtleXMgdGhhdCBhcmUgdW5wcmVmaXhlZCBvciBoYXZlIGt1YmVybmV0ZXMuaW8gcHJlZml4IGFyZSBjb25zaWRlcmVkIHJlc2VydmVkIGFuZCBoZW5jZSBtYXkgbm90IGJlIHVzZWQuIFxuIENsYWltUmVzb3VyY2VTdGF0dXMgY2FuIGJlIGluIGFueSBvZiBmb2xsb3dpbmcgc3RhdGVzOiAtIENvbnRyb2xsZXJSZXNpemVJblByb2dyZXNzOiBTdGF0ZSBzZXQgd2hlbiByZXNpemUgY29udHJvbGxlciBzdGFydHMgcmVzaXppbmcgdGhlIHZvbHVtZSBpbiBjb250cm9sLXBsYW5lLiAtIENvbnRyb2xsZXJSZXNpemVGYWlsZWQ6IFN0YXRlIHNldCB3aGVuIHJlc2l6ZSBoYXMgZmFpbGVkIGluIHJlc2l6ZSBjb250cm9sbGVyIHdpdGggYSB0ZXJtaW5hbCBlcnJvci4gLSBOb2RlUmVzaXplUGVuZGluZzogU3RhdGUgc2V0IHdoZW4gcmVzaXplIGNvbnRyb2xsZXIgaGFzIGZpbmlzaGVkIHJlc2l6aW5nIHRoZSB2b2x1bWUgYnV0IGZ1cnRoZXIgcmVzaXppbmcgb2Ygdm9sdW1lIGlzIG5lZWRlZCBvbiB0aGUgbm9kZS4gLSBOb2RlUmVzaXplSW5Qcm9ncmVzczogU3RhdGUgc2V0IHdoZW4ga3ViZWxldCBzdGFydHMgcmVzaXppbmcgdGhlIHZvbHVtZS4gLSBOb2RlUmVzaXplRmFpbGVkOiBTdGF0ZSBzZXQgd2hlbiByZXNpemluZyBoYXMgZmFpbGVkIGluIGt1YmVsZXQgd2l0aCBhIHRlcm1pbmFsIGVycm9yLiBUcmFuc2llbnQgZXJyb3JzIGRvbid0IHNldCBOb2RlUmVzaXplRmFpbGVkLiBGb3IgZXhhbXBsZTogaWYgZXhwYW5kaW5nIGEgUFZDIGZvciBtb3JlIGNhcGFjaXR5IC0gdGhpcyBmaWVsZCBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgc3RhdGVzOiAtIHB2Yy5zdGF0dXMuYWxsb2NhdGVkUmVzb3VyY2VTdGF0dXNbJ3N0b3JhZ2UnXSA9IFwiQ29udHJvbGxlclJlc2l6ZUluUHJvZ3Jlc3NcIiAtIHB2Yy5zdGF0dXMuYWxsb2NhdGVkUmVzb3VyY2VTdGF0dXNbJ3N0b3JhZ2UnXSA9IFwiQ29udHJvbGxlclJlc2l6ZUZhaWxlZFwiIC0gcHZjLnN0YXR1cy5hbGxvY2F0ZWRSZXNvdXJjZVN0YXR1c1snc3RvcmFnZSddID0gXCJOb2RlUmVzaXplUGVuZGluZ1wiIC0gcHZjLnN0YXR1cy5hbGxvY2F0ZWRSZXNvdXJjZVN0YXR1c1snc3RvcmFnZSddID0gXCJOb2RlUmVzaXplSW5Qcm9ncmVzc1wiIC0gcHZjLnN0YXR1cy5hbGxvY2F0ZWRSZXNvdXJjZVN0YXR1c1snc3RvcmFnZSddID0gXCJOb2RlUmVzaXplRmFpbGVkXCIgV2hlbiB0aGlzIGZpZWxkIGlzIG5vdCBzZXQsIGl0IG1lYW5zIHRoYXQgbm8gcmVzaXplIG9wZXJhdGlvbiBpcyBpbiBwcm9ncmVzcyBmb3IgdGhlIGdpdmVuIFBWQy4gXG4gQSBjb250cm9sbGVyIHRoYXQgcmVjZWl2ZXMgUFZDIHVwZGF0ZSB3aXRoIHByZXZpb3VzbHkgdW5rbm93biByZXNvdXJjZU5hbWUgb3IgQ2xhaW1SZXNvdXJjZVN0YXR1cyBzaG91bGQgaWdub3JlIHRoZSB1cGRhdGUgZm9yIHRoZSBwdXJwb3NlIGl0IHdhcyBkZXNpZ25lZC4gRm9yIGV4YW1wbGUgLSBhIGNvbnRyb2xsZXIgdGhhdCBvbmx5IGlzIHJlc3BvbnNpYmxlIGZvciByZXNpemluZyBjYXBhY2l0eSBvZiB0aGUgdm9sdW1lLCBzaG91bGQgaWdub3JlIFBWQyB1cGRhdGVzIHRoYXQgY2hhbmdlIG90aGVyIHZhbGlkIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggUFZDLiBcbiBUaGlzIGlzIGFuIGFscGhhIGZpZWxkIGFuZCByZXF1aXJlcyBlbmFibGluZyBSZWNvdmVyVm9sdW1lRXhwYW5zaW9uRmFpbHVyZSBmZWF0dXJlLiIsInR5cGUiOiJvYmplY3QiLCJ4LWt1YmVybmV0ZXMtbWFwLXR5cGUiOiJncmFudWxhciJ9LCJhbGxvY2F0ZWRSZXNvdXJjZXMiOnsiYWRkaXRpb25hbFByb3BlcnRpZXMiOnsiYW55T2YiOlt7InR5cGUiOiJpbnRlZ2VyIn0seyJ0eXBlIjoic3RyaW5nIn1dLCJwYXR0ZXJuIjoiXihcXCt8LSk/KChbMC05XSsoXFwuWzAtOV0qKT8pfChcXC5bMC05XSspKSgoW0tNR1RQRV1pKXxbbnVta01HVFBFXXwoW2VFXShcXCt8LSk/KChbMC05XSsoXFwuWzAtOV0qKT8pfChcXC5bMC05XSspKSkpPyQiLCJ4LWt1YmVybmV0ZXMtaW50LW9yLXN0cmluZyI6dHJ1ZX0sImRlc2NyaXB0aW9uIjoiYWxsb2NhdGVkUmVzb3VyY2VzIHRyYWNrcyB0aGUgcmVzb3VyY2VzIGFsbG9jYXRlZCB0byBhIFBWQyBpbmNsdWRpbmcgaXRzIGNhcGFjaXR5LiBLZXkgbmFtZXMgZm9sbG93IHN0YW5kYXJkIEt1YmVybmV0ZXMgbGFiZWwgc3ludGF4LiBWYWxpZCB2YWx1ZXMgYXJlIGVpdGhlcjogKiBVbi1wcmVmaXhlZCBrZXlzOiAtIHN0b3JhZ2UgLSB0aGUgY2FwYWNpdHkgb2YgdGhlIHZvbHVtZS4gKiBDdXN0b20gcmVzb3VyY2VzIG11c3QgdXNlIGltcGxlbWVudGF0aW9uLWRlZmluZWQgcHJlZml4ZWQgbmFtZXMgc3VjaCBhcyBcImV4YW1wbGUuY29tL215LWN1c3RvbS1yZXNvdXJjZVwiIEFwYXJ0IGZyb20gYWJvdmUgdmFsdWVzIC0ga2V5cyB0aGF0IGFyZSB1bnByZWZpeGVkIG9yIGhhdmUga3ViZXJuZXRlcy5pbyBwcmVmaXggYXJlIGNvbnNpZGVyZWQgcmVzZXJ2ZWQgYW5kIGhlbmNlIG1heSBub3QgYmUgdXNlZC4gXG4gQ2FwYWNpdHkgcmVwb3J0ZWQgaGVyZSBtYXkgYmUgbGFyZ2VyIHRoYW4gdGhlIGFjdHVhbCBjYXBhY2l0eSB3aGVuIGEgdm9sdW1lIGV4cGFuc2lvbiBvcGVyYXRpb24gaXMgcmVxdWVzdGVkLiBGb3Igc3RvcmFnZSBxdW90YSwgdGhlIGxhcmdlciB2YWx1ZSBmcm9tIGFsbG9jYXRlZFJlc291cmNlcyBhbmQgUFZDLnNwZWMucmVzb3VyY2VzIGlzIHVzZWQuIElmIGFsbG9jYXRlZFJlc291cmNlcyBpcyBub3Qgc2V0LCBQVkMuc3BlYy5yZXNvdXJjZXMgYWxvbmUgaXMgdXNlZCBmb3IgcXVvdGEgY2FsY3VsYXRpb24uIElmIGEgdm9sdW1lIGV4cGFuc2lvbiBjYXBhY2l0eSByZXF1ZXN0IGlzIGxvd2VyZWQsIGFsbG9jYXRlZFJlc291cmNlcyBpcyBvbmx5IGxvd2VyZWQgaWYgdGhlcmUgYXJlIG5vIGV4cGFuc2lvbiBvcGVyYXRpb25zIGluIHByb2dyZXNzIGFuZCBpZiB0aGUgYWN0dWFsIHZvbHVtZSBjYXBhY2l0eSBpcyBlcXVhbCBvciBsb3dlciB0aGFuIHRoZSByZXF1ZXN0ZWQgY2FwYWNpdHkuIFxuIEEgY29udHJvbGxlciB0aGF0IHJlY2VpdmVzIFBWQyB1cGRhdGUgd2l0aCBwcmV2aW91c2x5IHVua25vd24gcmVzb3VyY2VOYW1lIHNob3VsZCBpZ25vcmUgdGhlIHVwZGF0ZSBmb3IgdGhlIHB1cnBvc2UgaXQgd2FzIGRlc2lnbmVkLiBGb3IgZXhhbXBsZSAtIGEgY29udHJvbGxlciB0aGF0IG9ubHkgaXMgcmVzcG9uc2libGUgZm9yIHJlc2l6aW5nIGNhcGFjaXR5IG9mIHRoZSB2b2x1bWUsIHNob3VsZCBpZ25vcmUgUFZDIHVwZGF0ZXMgdGhhdCBjaGFuZ2Ugb3RoZXIgdmFsaWQgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCBQVkMuIFxuIFRoaXMgaXMgYW4gYWxwaGEgZmllbGQgYW5kIHJlcXVpcmVzIGVuYWJsaW5nIFJlY292ZXJWb2x1bWVFeHBhbnNpb25GYWlsdXJlIGZlYXR1cmUuIiwidHlwZSI6Im9iamVjdCJ9LCJjYXBhY2l0eSI6eyJhZGRpdGlvbmFsUHJvcGVydGllcyI6eyJhbnlPZiI6W3sidHlwZSI6ImludGVnZXIifSx7InR5cGUiOiJzdHJpbmcifV0sInBhdHRlcm4iOiJeKFxcK3wtKT8oKFswLTldKyhcXC5bMC05XSopPyl8KFxcLlswLTldKykpKChbS01HVFBFXWkpfFtudW1rTUdUUEVdfChbZUVdKFxcK3wtKT8oKFswLTldKyhcXC5bMC05XSopPyl8KFxcLlswLTldKykpKSk/JCIsIngta3ViZXJuZXRlcy1pbnQtb3Itc3RyaW5nIjp0cnVlfSwiZGVzY3JpcHRpb24iOiJjYXBhY2l0eSByZXByZXNlbnRzIHRoZSBhY3R1YWwgcmVzb3VyY2VzIG9mIHRoZSB1bmRlcmx5aW5nIHZvbHVtZS4iLCJ0eXBlIjoib2JqZWN0In0sImNvbmRpdGlvbnMiOnsiZGVzY3JpcHRpb24iOiJjb25kaXRpb25zIGlzIHRoZSBjdXJyZW50IENvbmRpdGlvbiBvZiBwZXJzaXN0ZW50IHZvbHVtZSBjbGFpbS4gSWYgdW5kZXJseWluZyBwZXJzaXN0ZW50IHZvbHVtZSBpcyBiZWluZyByZXNpemVkIHRoZW4gdGhlIENvbmRpdGlvbiB3aWxsIGJlIHNldCB0byAnUmVzaXplU3RhcnRlZCcuIiwiaXRlbXMiOnsiZGVzY3JpcHRpb24iOiJQZXJzaXN0ZW50Vm9sdW1lQ2xhaW1Db25kaXRpb24gY29udGFpbnMgZGV0YWlscyBhYm91dCBzdGF0ZSBvZiBwdmMiLCJwcm9wZXJ0aWVzIjp7Imxhc3RQcm9iZVRpbWUiOnsiZGVzY3JpcHRpb24iOiJsYXN0UHJvYmVUaW1lIGlzIHRoZSB0aW1lIHdlIHByb2JlZCB0aGUgY29uZGl0aW9uLiIsImZvcm1hdCI6ImRhdGUtdGltZSIsInR5cGUiOiJzdHJpbmcifSwibGFzdFRyYW5zaXRpb25UaW1lIjp7ImRlc2NyaXB0aW9uIjoibGFzdFRyYW5zaXRpb25UaW1lIGlzIHRoZSB0aW1lIHRoZSBjb25kaXRpb24gdHJhbnNpdGlvbmVkIGZyb20gb25lIHN0YXR1cyB0byBhbm90aGVyLiIsImZvcm1hdCI6ImRhdGUtdGltZSIsInR5cGUiOiJzdHJpbmcifSwibWVzc2FnZSI6eyJkZXNjcmlwdGlvbiI6Im1lc3NhZ2UgaXMgdGhlIGh1bWFuLXJlYWRhYmxlIG1lc3NhZ2UgaW5kaWNhdGluZyBkZXRhaWxzIGFib3V0IGxhc3QgdHJhbnNpdGlvbi4iLCJ0eXBlIjoic3RyaW5nIn0sInJlYXNvbiI6eyJkZXNjcmlwdGlvbiI6InJlYXNvbiBpcyBhIHVuaXF1ZSwgdGhpcyBzaG91bGQgYmUgYSBzaG9ydCwgbWFjaGluZSB1bmRlcnN0YW5kYWJsZSBzdHJpbmcgdGhhdCBnaXZlcyB0aGUgcmVhc29uIGZvciBjb25kaXRpb24ncyBsYXN0IHRyYW5zaXRpb24uIElmIGl0IHJlcG9ydHMgXCJSZXNpemVTdGFydGVkXCIgdGhhdCBtZWFucyB0aGUgdW5kZXJseWluZyBwZXJzaXN0ZW50IHZvbHVtZSBpcyBiZWluZyByZXNpemVkLiIsInR5cGUiOiJzdHJpbmcifSwic3RhdHVzIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6eyJkZXNjcmlwdGlvbiI6IlBlcnNpc3RlbnRWb2x1bWVDbGFpbUNvbmRpdGlvblR5cGUgaXMgYSB2YWxpZCB2YWx1ZSBvZiBQZXJzaXN0ZW50Vm9sdW1lQ2xhaW1Db25kaXRpb24uVHlwZSIsInR5cGUiOiJzdHJpbmcifX0sInJlcXVpcmVkIjpbInN0YXR1cyIsInR5cGUiXSwidHlwZSI6Im9iamVjdCJ9LCJ0eXBlIjoiYXJyYXkifSwiY3VycmVudFZvbHVtZUF0dHJpYnV0ZXNDbGFzc05hbWUiOnsiZGVzY3JpcHRpb24iOiJjdXJyZW50Vm9sdW1lQXR0cmlidXRlc0NsYXNzTmFtZSBpcyB0aGUgY3VycmVudCBuYW1lIG9mIHRoZSBWb2x1bWVBdHRyaWJ1dGVzQ2xhc3MgdGhlIFBWQyBpcyB1c2luZy4gV2hlbiB1bnNldCwgdGhlcmUgaXMgbm8gVm9sdW1lQXR0cmlidXRlQ2xhc3MgYXBwbGllZCB0byB0aGlzIFBlcnNpc3RlbnRWb2x1bWVDbGFpbSBUaGlzIGlzIGFuIGFscGhhIGZpZWxkIGFuZCByZXF1aXJlcyBlbmFibGluZyBWb2x1bWVBdHRyaWJ1dGVzQ2xhc3MgZmVhdHVyZS4iLCJ0eXBlIjoic3RyaW5nIn0sIm1vZGlmeVZvbHVtZVN0YXR1cyI6eyJkZXNjcmlwdGlvbiI6Ik1vZGlmeVZvbHVtZVN0YXR1cyByZXByZXNlbnRzIHRoZSBzdGF0dXMgb2JqZWN0IG9mIENvbnRyb2xsZXJNb2RpZnlWb2x1bWUgb3BlcmF0aW9uLiBXaGVuIHRoaXMgaXMgdW5zZXQsIHRoZXJlIGlzIG5vIE1vZGlmeVZvbHVtZSBvcGVyYXRpb24gYmVpbmcgYXR0ZW1wdGVkLiBUaGlzIGlzIGFuIGFscGhhIGZpZWxkIGFuZCByZXF1aXJlcyBlbmFibGluZyBWb2x1bWVBdHRyaWJ1dGVzQ2xhc3MgZmVhdHVyZS4iLCJwcm9wZXJ0aWVzIjp7InN0YXR1cyI6eyJkZXNjcmlwdGlvbiI6InN0YXR1cyBpcyB0aGUgc3RhdHVzIG9mIHRoZSBDb250cm9sbGVyTW9kaWZ5Vm9sdW1lIG9wZXJhdGlvbi4gSXQgY2FuIGJlIGluIGFueSBvZiBmb2xsb3dpbmcgc3RhdGVzOiAtIFBlbmRpbmcgUGVuZGluZyBpbmRpY2F0ZXMgdGhhdCB0aGUgUGVyc2lzdGVudFZvbHVtZUNsYWltIGNhbm5vdCBiZSBtb2RpZmllZCBkdWUgdG8gdW5tZXQgcmVxdWlyZW1lbnRzLCBzdWNoIGFzIHRoZSBzcGVjaWZpZWQgVm9sdW1lQXR0cmlidXRlc0NsYXNzIG5vdCBleGlzdGluZy4gLSBJblByb2dyZXNzIEluUHJvZ3Jlc3MgaW5kaWNhdGVzIHRoYXQgdGhlIHZvbHVtZSBpcyBiZWluZyBtb2RpZmllZC4gLSBJbmZlYXNpYmxlIEluZmVhc2libGUgaW5kaWNhdGVzIHRoYXQgdGhlIHJlcXVlc3QgaGFzIGJlZW4gcmVqZWN0ZWQgYXMgaW52YWxpZCBieSB0aGUgQ1NJIGRyaXZlci4gVG8gcmVzb2x2ZSB0aGUgZXJyb3IsIGEgdmFsaWQgVm9sdW1lQXR0cmlidXRlc0NsYXNzIG5lZWRzIHRvIGJlIHNwZWNpZmllZC4gTm90ZTogTmV3IHN0YXR1c2VzIGNhbiBiZSBhZGRlZCBpbiB0aGUgZnV0dXJlLiBDb25zdW1lcnMgc2hvdWxkIGNoZWNrIGZvciB1bmtub3duIHN0YXR1c2VzIGFuZCBmYWlsIGFwcHJvcHJpYXRlbHkuIiwidHlwZSI6InN0cmluZyJ9LCJ0YXJnZXRWb2x1bWVBdHRyaWJ1dGVzQ2xhc3NOYW1lIjp7ImRlc2NyaXB0aW9uIjoidGFyZ2V0Vm9sdW1lQXR0cmlidXRlc0NsYXNzTmFtZSBpcyB0aGUgbmFtZSBvZiB0aGUgVm9sdW1lQXR0cmlidXRlc0NsYXNzIHRoZSBQVkMgY3VycmVudGx5IGJlaW5nIHJlY29uY2lsZWQiLCJ0eXBlIjoic3RyaW5nIn19LCJyZXF1aXJlZCI6WyJzdGF0dXMiXSwidHlwZSI6Im9iamVjdCJ9LCJwaGFzZSI6eyJkZXNjcmlwdGlvbiI6InBoYXNlIHJlcHJlc2VudHMgdGhlIGN1cnJlbnQgcGhhc2Ugb2YgUGVyc2lzdGVudFZvbHVtZUNsYWltLiIsInR5cGUiOiJzdHJpbmcifX0sInR5cGUiOiJvYmplY3QifX0sInR5cGUiOiJvYmplY3QifX0sInR5cGUiOiJvYmplY3QifSwiY2VwaE9iamVjdFN0b3JlVXNlcnMiOnsiZGVzY3JpcHRpb24iOiJNYW5hZ2VDZXBoT2JqZWN0U3RvcmVVc2VycyBkZWZpbmVzIGhvdyB0byByZWNvbmNpbGUgQ2VwaE9iamVjdFN0b3JlVXNlcnMiLCJwcm9wZXJ0aWVzIjp7InJlY29uY2lsZVN0cmF0ZWd5Ijp7InR5cGUiOiJzdHJpbmcifX0sInR5cGUiOiJvYmplY3QifSwiY2VwaE9iamVjdFN0b3JlcyI6eyJkZXNjcmlwdGlvbiI6Ik1hbmFnZUNlcGhPYmplY3RTdG9yZXMgZGVmaW5lcyBob3cgdG8gcmVjb25jaWxlIENlcGhPYmplY3RTdG9yZXMiLCJwcm9wZXJ0aWVzIjp7ImRpc2FibGVSb3V0ZSI6eyJ0eXBlIjoiYm9vbGVhbiJ9LCJkaXNhYmxlU3RvcmFnZUNsYXNzIjp7InR5cGUiOiJib29sZWFuIn0sImdhdGV3YXlJbnN0YW5jZXMiOnsidHlwZSI6ImludGVnZXIifSwiaG9zdE5ldHdvcmsiOnsidHlwZSI6ImJvb2xlYW4ifSwicmVjb25jaWxlU3RyYXRlZ3kiOnsidHlwZSI6InN0cmluZyJ9LCJzdG9yYWdlQ2xhc3NOYW1lIjp7ImRlc2NyaXB0aW9uIjoiU3RvcmFnZUNsYXNzTmFtZSBzcGVjaWZpZXMgdGhlIG5hbWUgb2YgdGhlIHN0b3JhZ2UgY2xhc3MgY3JlYXRlZCBmb3IgY2VwaCBvYmMncyIsIm1heExlbmd0aCI6MjUzLCJwYXR0ZXJuIjoiXlthLXowLTldKFstYS16MC05XSpbYS16MC05XSk/KFxcXFwuW2EtejAtOV0oWy1hLXowLTldKlthLXowLTldKT8pKiQiLCJ0eXBlIjoic3RyaW5nIn0sInZpcnR1YWxIb3N0bmFtZXMiOnsiaXRlbXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjoiYXJyYXkifX0sInR5cGUiOiJvYmplY3QifSwiY2VwaFJCRE1pcnJvciI6eyJkZXNjcmlwdGlvbiI6Ik1hbmFnZUNlcGhSQkRNaXJyb3IgZGVmaW5lcyBob3cgdG8gcmVjb25jaWxlIENlcGggUkJETWlycm9yIiwicHJvcGVydGllcyI6eyJkYWVtb25Db3VudCI6eyJkZWZhdWx0IjoxLCJtaW5pbXVtIjoxLCJ0eXBlIjoiaW50ZWdlciJ9LCJyZWNvbmNpbGVTdHJhdGVneSI6eyJ0eXBlIjoic3RyaW5nIn19LCJ0eXBlIjoib2JqZWN0In0sImNlcGhUb29sYm94Ijp7ImRlc2NyaXB0aW9uIjoiTWFuYWdlQ2VwaFRvb2xib3ggZGVmaW5lcyBob3cgdG8gcmVjb25jaWxlIENlcGggdG9vbGJveCIsInByb3BlcnRpZXMiOnsicmVjb25jaWxlU3RyYXRlZ3kiOnsidHlwZSI6InN0cmluZyJ9fSwidHlwZSI6Im9iamVjdCJ9fSwidHlwZSI6Im9iamVjdCJ9LCJtZ3IiOnsiZGVzY3JpcHRpb24iOiJNZ3JTcGVjIGRlZmluZXMgdGhlIHNldHRpbmdzIGZvciB0aGUgQ2VwaCBNYW5hZ2VyIiwicHJvcGVydGllcyI6eyJlbmFibGVBY3RpdmVQYXNzaXZlIjp7ImRlc2NyaXB0aW9uIjoiRW5hYmxlQWN0aXZlUGFzc2l2ZSBjYW4gYmUgc2V0IGFzIHRydWUgdG8gZGVwbG95IDIgY2VwaCBtYW5hZ2VyIHBvZHMsIG9uZSBhY3RpdmUgYW5kIG9uZSBzdGFuZGJ5IENlcGggd2lsbCBwcm9tb3RlIHRoZSBzdGFuZGJ5IG1nciB3aGVuIHRoZSBhY3RpdmUgbWdyIGdvZXMgZG93biBkdWUgdG8gYW55IHJlYXNvbiIsInR5cGUiOiJib29sZWFuIn19LCJ0eXBlIjoib2JqZWN0In0sIm1pcnJvcmluZyI6eyJkZXNjcmlwdGlvbiI6Ik1pcnJvcmluZyBzcGVjaWZpZXMgZGF0YSBtaXJyb3JpbmcgY29uZmlndXJhdGlvbiBmb3IgdGhlIHN0b3JhZ2UgY2x1c3Rlci4gVGhpcyBjb25maWd1cmF0aW9uIHdpbGwgb25seSBiZSBhcHBsaWVkIHRvIHJlc291cmNlcyBtYW5hZ2VkIGJ5IHRoZSBvcGVyYXRvci4iLCJwcm9wZXJ0aWVzIjp7ImVuYWJsZWQiOnsiZGVzY3JpcHRpb24iOiJJZiB0cnVlLCBkYXRhIG1pcnJvcmluZyBpcyBlbmFibGVkIGZvciB0aGUgU3RvcmFnZUNsdXN0ZXIuIFRoaXMgY29uZmlndXJhdGlvbiB3aWxsIG9ubHkgYmUgYXBwbGllZCB0byByZXNvdXJjZXMgKHN1Y2ggYXMgQ2VwaEJsb2NrUG9vbCkgbWFuYWdlZCBieSB0aGUgb3BlcmF0b3IuIEl0IGlzIG9wdGlvbmFsIGFuZCBkZWZhdWx0cyB0byBmYWxzZS4iLCJ0eXBlIjoiYm9vbGVhbiJ9LCJwZWVyU2VjcmV0TmFtZXMiOnsiZGVzY3JpcHRpb24iOiJQZWVyU2VjcmV0TmFtZXMgcmVwcmVzZW50cyB0aGUgS3ViZXJuZXRlcyBTZWNyZXQgbmFtZXMgb2YgcmJkLW1pcnJvciBwZWVycyB0b2tlbnMiLCJpdGVtcyI6eyJ0eXBlIjoic3RyaW5nIn0sInR5cGUiOiJhcnJheSJ9fSwidHlwZSI6Im9iamVjdCJ9LCJtb25EYXRhRGlySG9zdFBhdGgiOnsidHlwZSI6InN0cmluZyJ9LCJtb25QVkNUZW1wbGF0ZSI6eyJkZXNjcmlwdGlvbiI6IlBlcnNpc3RlbnRWb2x1bWVDbGFpbSBpcyBhIHVzZXIncyByZXF1ZXN0IGZvciBhbmQgY2xhaW0gdG8gYSBwZXJzaXN0ZW50IHZvbHVtZSIsInByb3BlcnRpZXMiOnsiYXBpVmVyc2lvbiI6eyJkZXNjcmlwdGlvbiI6IkFQSVZlcnNpb24gZGVmaW5lcyB0aGUgdmVyc2lvbmVkIHNjaGVtYSBvZiB0aGlzIHJlcHJlc2VudGF0aW9uIG9mIGFuIG9iamVjdC4gU2VydmVycyBzaG91bGQgY29udmVydCByZWNvZ25pemVkIHNjaGVtYXMgdG8gdGhlIGxhdGVzdCBpbnRlcm5hbCB2YWx1ZSwgYW5kIG1heSByZWplY3QgdW5yZWNvZ25pemVkIHZhbHVlcy4gTW9yZSBpbmZvOiBodHRwczovL2dpdC5rOHMuaW8vY29tbXVuaXR5L2NvbnRyaWJ1dG9ycy9kZXZlbC9zaWctYXJjaGl0ZWN0dXJlL2FwaS1jb252ZW50aW9ucy5tZCNyZXNvdXJjZXMiLCJ0eXBlIjoic3RyaW5nIn0sImtpbmQiOnsiZGVzY3JpcHRpb24iOiJLaW5kIGlzIGEgc3RyaW5nIHZhbHVlIHJlcHJlc2VudGluZyB0aGUgUkVTVCByZXNvdXJjZSB0aGlzIG9iamVjdCByZXByZXNlbnRzLiBTZXJ2ZXJzIG1heSBpbmZlciB0aGlzIGZyb20gdGhlIGVuZHBvaW50IHRoZSBjbGllbnQgc3VibWl0cyByZXF1ZXN0cyB0by4gQ2Fubm90IGJlIHVwZGF0ZWQuIEluIENhbWVsQ2FzZS4gTW9yZSBpbmZvOiBodHRwczovL2dpdC5rOHMuaW8vY29tbXVuaXR5L2NvbnRyaWJ1dG9ycy9kZXZlbC9zaWctYXJjaGl0ZWN0dXJlL2FwaS1jb252ZW50aW9ucy5tZCN0eXBlcy1raW5kcyIsInR5cGUiOiJzdHJpbmcifSwibWV0YWRhdGEiOnsiZGVzY3JpcHRpb24iOiJTdGFuZGFyZCBvYmplY3QncyBtZXRhZGF0YS4gTW9yZSBpbmZvOiBodHRwczovL2dpdC5rOHMuaW8vY29tbXVuaXR5L2NvbnRyaWJ1dG9ycy9kZXZlbC9zaWctYXJjaGl0ZWN0dXJlL2FwaS1jb252ZW50aW9ucy5tZCNtZXRhZGF0YSIsInByb3BlcnRpZXMiOnsiYW5ub3RhdGlvbnMiOnsiYWRkaXRpb25hbFByb3BlcnRpZXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjoib2JqZWN0In0sImZpbmFsaXplcnMiOnsiaXRlbXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjoiYXJyYXkifSwibGFiZWxzIjp7ImFkZGl0aW9uYWxQcm9wZXJ0aWVzIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6Im9iamVjdCJ9LCJuYW1lIjp7InR5cGUiOiJzdHJpbmcifSwibmFtZXNwYWNlIjp7InR5cGUiOiJzdHJpbmcifX0sInR5cGUiOiJvYmplY3QifSwic3BlYyI6eyJkZXNjcmlwdGlvbiI6InNwZWMgZGVmaW5lcyB0aGUgZGVzaXJlZCBjaGFyYWN0ZXJpc3RpY3Mgb2YgYSB2b2x1bWUgcmVxdWVzdGVkIGJ5IGEgcG9kIGF1dGhvci4gTW9yZSBpbmZvOiBodHRwczovL2t1YmVybmV0ZXMuaW8vZG9jcy9jb25jZXB0cy9zdG9yYWdlL3BlcnNpc3RlbnQtdm9sdW1lcyNwZXJzaXN0ZW50dm9sdW1lY2xhaW1zIiwicHJvcGVydGllcyI6eyJhY2Nlc3NNb2RlcyI6eyJkZXNjcmlwdGlvbiI6ImFjY2Vzc01vZGVzIGNvbnRhaW5zIHRoZSBkZXNpcmVkIGFjY2VzcyBtb2RlcyB0aGUgdm9sdW1lIHNob3VsZCBoYXZlLiBNb3JlIGluZm86IGh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL2NvbmNlcHRzL3N0b3JhZ2UvcGVyc2lzdGVudC12b2x1bWVzI2FjY2Vzcy1tb2Rlcy0xIiwiaXRlbXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjoiYXJyYXkifSwiZGF0YVNvdXJjZSI6eyJkZXNjcmlwdGlvbiI6ImRhdGFTb3VyY2UgZmllbGQgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBlaXRoZXI6ICogQW4gZXhpc3RpbmcgVm9sdW1lU25hcHNob3Qgb2JqZWN0IChzbmFwc2hvdC5zdG9yYWdlLms4cy5pby9Wb2x1bWVTbmFwc2hvdCkgKiBBbiBleGlzdGluZyBQVkMgKFBlcnNpc3RlbnRWb2x1bWVDbGFpbSkgSWYgdGhlIHByb3Zpc2lvbmVyIG9yIGFuIGV4dGVybmFsIGNvbnRyb2xsZXIgY2FuIHN1cHBvcnQgdGhlIHNwZWNpZmllZCBkYXRhIHNvdXJjZSwgaXQgd2lsbCBjcmVhdGUgYSBuZXcgdm9sdW1lIGJhc2VkIG9uIHRoZSBjb250ZW50cyBvZiB0aGUgc3BlY2lmaWVkIGRhdGEgc291cmNlLiBXaGVuIHRoZSBBbnlWb2x1bWVEYXRhU291cmNlIGZlYXR1cmUgZ2F0ZSBpcyBlbmFibGVkLCBkYXRhU291cmNlIGNvbnRlbnRzIHdpbGwgYmUgY29waWVkIHRvIGRhdGFTb3VyY2VSZWYsIGFuZCBkYXRhU291cmNlUmVmIGNvbnRlbnRzIHdpbGwgYmUgY29waWVkIHRvIGRhdGFTb3VyY2Ugd2hlbiBkYXRhU291cmNlUmVmLm5hbWVzcGFjZSBpcyBub3Qgc3BlY2lmaWVkLiBJZiB0aGUgbmFtZXNwYWNlIGlzIHNwZWNpZmllZCwgdGhlbiBkYXRhU291cmNlUmVmIHdpbGwgbm90IGJlIGNvcGllZCB0byBkYXRhU291cmNlLiIsInByb3BlcnRpZXMiOnsiYXBpR3JvdXAiOnsiZGVzY3JpcHRpb24iOiJBUElHcm91cCBpcyB0aGUgZ3JvdXAgZm9yIHRoZSByZXNvdXJjZSBiZWluZyByZWZlcmVuY2VkLiBJZiBBUElHcm91cCBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgc3BlY2lmaWVkIEtpbmQgbXVzdCBiZSBpbiB0aGUgY29yZSBBUEkgZ3JvdXAuIEZvciBhbnkgb3RoZXIgdGhpcmQtcGFydHkgdHlwZXMsIEFQSUdyb3VwIGlzIHJlcXVpcmVkLiIsInR5cGUiOiJzdHJpbmcifSwia2luZCI6eyJkZXNjcmlwdGlvbiI6IktpbmQgaXMgdGhlIHR5cGUgb2YgcmVzb3VyY2UgYmVpbmcgcmVmZXJlbmNlZCIsInR5cGUiOiJzdHJpbmcifSwibmFtZSI6eyJkZXNjcmlwdGlvbiI6Ik5hbWUgaXMgdGhlIG5hbWUgb2YgcmVzb3VyY2UgYmVpbmcgcmVmZXJlbmNlZCIsInR5cGUiOiJzdHJpbmcifX0sInJlcXVpcmVkIjpbImtpbmQiLCJuYW1lIl0sInR5cGUiOiJvYmplY3QiLCJ4LWt1YmVybmV0ZXMtbWFwLXR5cGUiOiJhdG9taWMifSwiZGF0YVNvdXJjZVJlZiI6eyJkZXNjcmlwdGlvbiI6ImRhdGFTb3VyY2VSZWYgc3BlY2lmaWVzIHRoZSBvYmplY3QgZnJvbSB3aGljaCB0byBwb3B1bGF0ZSB0aGUgdm9sdW1lIHdpdGggZGF0YSwgaWYgYSBub24tZW1wdHkgdm9sdW1lIGlzIGRlc2lyZWQuIFRoaXMgbWF5IGJlIGFueSBvYmplY3QgZnJvbSBhIG5vbi1lbXB0eSBBUEkgZ3JvdXAgKG5vbiBjb3JlIG9iamVjdCkgb3IgYSBQZXJzaXN0ZW50Vm9sdW1lQ2xhaW0gb2JqZWN0LiBXaGVuIHRoaXMgZmllbGQgaXMgc3BlY2lmaWVkLCB2b2x1bWUgYmluZGluZyB3aWxsIG9ubHkgc3VjY2VlZCBpZiB0aGUgdHlwZSBvZiB0aGUgc3BlY2lmaWVkIG9iamVjdCBtYXRjaGVzIHNvbWUgaW5zdGFsbGVkIHZvbHVtZSBwb3B1bGF0b3Igb3IgZHluYW1pYyBwcm92aXNpb25lci4gVGhpcyBmaWVsZCB3aWxsIHJlcGxhY2UgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIGRhdGFTb3VyY2UgZmllbGQgYW5kIGFzIHN1Y2ggaWYgYm90aCBmaWVsZHMgYXJlIG5vbi1lbXB0eSwgdGhleSBtdXN0IGhhdmUgdGhlIHNhbWUgdmFsdWUuIEZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSwgd2hlbiBuYW1lc3BhY2UgaXNuJ3Qgc3BlY2lmaWVkIGluIGRhdGFTb3VyY2VSZWYsIGJvdGggZmllbGRzIChkYXRhU291cmNlIGFuZCBkYXRhU291cmNlUmVmKSB3aWxsIGJlIHNldCB0byB0aGUgc2FtZSB2YWx1ZSBhdXRvbWF0aWNhbGx5IGlmIG9uZSBvZiB0aGVtIGlzIGVtcHR5IGFuZCB0aGUgb3RoZXIgaXMgbm9uLWVtcHR5LiBXaGVuIG5hbWVzcGFjZSBpcyBzcGVjaWZpZWQgaW4gZGF0YVNvdXJjZVJlZiwgZGF0YVNvdXJjZSBpc24ndCBzZXQgdG8gdGhlIHNhbWUgdmFsdWUgYW5kIG11c3QgYmUgZW1wdHkuIFRoZXJlIGFyZSB0aHJlZSBpbXBvcnRhbnQgZGlmZmVyZW5jZXMgYmV0d2VlbiBkYXRhU291cmNlIGFuZCBkYXRhU291cmNlUmVmOiAqIFdoaWxlIGRhdGFTb3VyY2Ugb25seSBhbGxvd3MgdHdvIHNwZWNpZmljIHR5cGVzIG9mIG9iamVjdHMsIGRhdGFTb3VyY2VSZWYgYWxsb3dzIGFueSBub24tY29yZSBvYmplY3QsIGFzIHdlbGwgYXMgUGVyc2lzdGVudFZvbHVtZUNsYWltIG9iamVjdHMuICogV2hpbGUgZGF0YVNvdXJjZSBpZ25vcmVzIGRpc2FsbG93ZWQgdmFsdWVzIChkcm9wcGluZyB0aGVtKSwgZGF0YVNvdXJjZVJlZiBwcmVzZXJ2ZXMgYWxsIHZhbHVlcywgYW5kIGdlbmVyYXRlcyBhbiBlcnJvciBpZiBhIGRpc2FsbG93ZWQgdmFsdWUgaXMgc3BlY2lmaWVkLiAqIFdoaWxlIGRhdGFTb3VyY2Ugb25seSBhbGxvd3MgbG9jYWwgb2JqZWN0cywgZGF0YVNvdXJjZVJlZiBhbGxvd3Mgb2JqZWN0cyBpbiBhbnkgbmFtZXNwYWNlcy4gKEJldGEpIFVzaW5nIHRoaXMgZmllbGQgcmVxdWlyZXMgdGhlIEFueVZvbHVtZURhdGFTb3VyY2UgZmVhdHVyZSBnYXRlIHRvIGJlIGVuYWJsZWQuIChBbHBoYSkgVXNpbmcgdGhlIG5hbWVzcGFjZSBmaWVsZCBvZiBkYXRhU291cmNlUmVmIHJlcXVpcmVzIHRoZSBDcm9zc05hbWVzcGFjZVZvbHVtZURhdGFTb3VyY2UgZmVhdHVyZSBnYXRlIHRvIGJlIGVuYWJsZWQuIiwicHJvcGVydGllcyI6eyJhcGlHcm91cCI6eyJkZXNjcmlwdGlvbiI6IkFQSUdyb3VwIGlzIHRoZSBncm91cCBmb3IgdGhlIHJlc291cmNlIGJlaW5nIHJlZmVyZW5jZWQuIElmIEFQSUdyb3VwIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBzcGVjaWZpZWQgS2luZCBtdXN0IGJlIGluIHRoZSBjb3JlIEFQSSBncm91cC4gRm9yIGFueSBvdGhlciB0aGlyZC1wYXJ0eSB0eXBlcywgQVBJR3JvdXAgaXMgcmVxdWlyZWQuIiwidHlwZSI6InN0cmluZyJ9LCJraW5kIjp7ImRlc2NyaXB0aW9uIjoiS2luZCBpcyB0aGUgdHlwZSBvZiByZXNvdXJjZSBiZWluZyByZWZlcmVuY2VkIiwidHlwZSI6InN0cmluZyJ9LCJuYW1lIjp7ImRlc2NyaXB0aW9uIjoiTmFtZSBpcyB0aGUgbmFtZSBvZiByZXNvdXJjZSBiZWluZyByZWZlcmVuY2VkIiwidHlwZSI6InN0cmluZyJ9LCJuYW1lc3BhY2UiOnsiZGVzY3JpcHRpb24iOiJOYW1lc3BhY2UgaXMgdGhlIG5hbWVzcGFjZSBvZiByZXNvdXJjZSBiZWluZyByZWZlcmVuY2VkIE5vdGUgdGhhdCB3aGVuIGEgbmFtZXNwYWNlIGlzIHNwZWNpZmllZCwgYSBnYXRld2F5Lm5ldHdvcmtpbmcuazhzLmlvL1JlZmVyZW5jZUdyYW50IG9iamVjdCBpcyByZXF1aXJlZCBpbiB0aGUgcmVmZXJlbnQgbmFtZXNwYWNlIHRvIGFsbG93IHRoYXQgbmFtZXNwYWNlJ3Mgb3duZXIgdG8gYWNjZXB0IHRoZSByZWZlcmVuY2UuIFNlZSB0aGUgUmVmZXJlbmNlR3JhbnQgZG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy4gKEFscGhhKSBUaGlzIGZpZWxkIHJlcXVpcmVzIHRoZSBDcm9zc05hbWVzcGFjZVZvbHVtZURhdGFTb3VyY2UgZmVhdHVyZSBnYXRlIHRvIGJlIGVuYWJsZWQuIiwidHlwZSI6InN0cmluZyJ9fSwicmVxdWlyZWQiOlsia2luZCIsIm5hbWUiXSwidHlwZSI6Im9iamVjdCJ9LCJyZXNvdXJjZXMiOnsiZGVzY3JpcHRpb24iOiJyZXNvdXJjZXMgcmVwcmVzZW50cyB0aGUgbWluaW11bSByZXNvdXJjZXMgdGhlIHZvbHVtZSBzaG91bGQgaGF2ZS4gSWYgUmVjb3ZlclZvbHVtZUV4cGFuc2lvbkZhaWx1cmUgZmVhdHVyZSBpcyBlbmFibGVkIHVzZXJzIGFyZSBhbGxvd2VkIHRvIHNwZWNpZnkgcmVzb3VyY2UgcmVxdWlyZW1lbnRzIHRoYXQgYXJlIGxvd2VyIHRoYW4gcHJldmlvdXMgdmFsdWUgYnV0IG11c3Qgc3RpbGwgYmUgaGlnaGVyIHRoYW4gY2FwYWNpdHkgcmVjb3JkZWQgaW4gdGhlIHN0YXR1cyBmaWVsZCBvZiB0aGUgY2xhaW0uIE1vcmUgaW5mbzogaHR0cHM6Ly9rdWJlcm5ldGVzLmlvL2RvY3MvY29uY2VwdHMvc3RvcmFnZS9wZXJzaXN0ZW50LXZvbHVtZXMjcmVzb3VyY2VzIiwicHJvcGVydGllcyI6eyJsaW1pdHMiOnsiYWRkaXRpb25hbFByb3BlcnRpZXMiOnsiYW55T2YiOlt7InR5cGUiOiJpbnRlZ2VyIn0seyJ0eXBlIjoic3RyaW5nIn1dLCJwYXR0ZXJuIjoiXihcXCt8LSk/KChbMC05XSsoXFwuWzAtOV0qKT8pfChcXC5bMC05XSspKSgoW0tNR1RQRV1pKXxbbnVta01HVFBFXXwoW2VFXShcXCt8LSk/KChbMC05XSsoXFwuWzAtOV0qKT8pfChcXC5bMC05XSspKSkpPyQiLCJ4LWt1YmVybmV0ZXMtaW50LW9yLXN0cmluZyI6dHJ1ZX0sImRlc2NyaXB0aW9uIjoiTGltaXRzIGRlc2NyaWJlcyB0aGUgbWF4aW11bSBhbW91bnQgb2YgY29tcHV0ZSByZXNvdXJjZXMgYWxsb3dlZC4gTW9yZSBpbmZvOiBodHRwczovL2t1YmVybmV0ZXMuaW8vZG9jcy9jb25jZXB0cy9jb25maWd1cmF0aW9uL21hbmFnZS1yZXNvdXJjZXMtY29udGFpbmVycy8iLCJ0eXBlIjoib2JqZWN0In0sInJlcXVlc3RzIjp7ImFkZGl0aW9uYWxQcm9wZXJ0aWVzIjp7ImFueU9mIjpbeyJ0eXBlIjoiaW50ZWdlciJ9LHsidHlwZSI6InN0cmluZyJ9XSwicGF0dGVybiI6Il4oXFwrfC0pPygoWzAtOV0rKFxcLlswLTldKik/KXwoXFwuWzAtOV0rKSkoKFtLTUdUUEVdaSl8W251bWtNR1RQRV18KFtlRV0oXFwrfC0pPygoWzAtOV0rKFxcLlswLTldKik/KXwoXFwuWzAtOV0rKSkpKT8kIiwieC1rdWJlcm5ldGVzLWludC1vci1zdHJpbmciOnRydWV9LCJkZXNjcmlwdGlvbiI6IlJlcXVlc3RzIGRlc2NyaWJlcyB0aGUgbWluaW11bSBhbW91bnQgb2YgY29tcHV0ZSByZXNvdXJjZXMgcmVxdWlyZWQuIElmIFJlcXVlc3RzIGlzIG9taXR0ZWQgZm9yIGEgY29udGFpbmVyLCBpdCBkZWZhdWx0cyB0byBMaW1pdHMgaWYgdGhhdCBpcyBleHBsaWNpdGx5IHNwZWNpZmllZCwgb3RoZXJ3aXNlIHRvIGFuIGltcGxlbWVudGF0aW9uLWRlZmluZWQgdmFsdWUuIFJlcXVlc3RzIGNhbm5vdCBleGNlZWQgTGltaXRzLiBNb3JlIGluZm86IGh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL2NvbmNlcHRzL2NvbmZpZ3VyYXRpb24vbWFuYWdlLXJlc291cmNlcy1jb250YWluZXJzLyIsInR5cGUiOiJvYmplY3QifX0sInR5cGUiOiJvYmplY3QifSwic2VsZWN0b3IiOnsiZGVzY3JpcHRpb24iOiJzZWxlY3RvciBpcyBhIGxhYmVsIHF1ZXJ5IG92ZXIgdm9sdW1lcyB0byBjb25zaWRlciBmb3IgYmluZGluZy4iLCJwcm9wZXJ0aWVzIjp7Im1hdGNoRXhwcmVzc2lvbnMiOnsiZGVzY3JpcHRpb24iOiJtYXRjaEV4cHJlc3Npb25zIGlzIGEgbGlzdCBvZiBsYWJlbCBzZWxlY3RvciByZXF1aXJlbWVudHMuIFRoZSByZXF1aXJlbWVudHMgYXJlIEFORGVkLiIsIml0ZW1zIjp7ImRlc2NyaXB0aW9uIjoiQSBsYWJlbCBzZWxlY3RvciByZXF1aXJlbWVudCBpcyBhIHNlbGVjdG9yIHRoYXQgY29udGFpbnMgdmFsdWVzLCBhIGtleSwgYW5kIGFuIG9wZXJhdG9yIHRoYXQgcmVsYXRlcyB0aGUga2V5IGFuZCB2YWx1ZXMuIiwicHJvcGVydGllcyI6eyJrZXkiOnsiZGVzY3JpcHRpb24iOiJrZXkgaXMgdGhlIGxhYmVsIGtleSB0aGF0IHRoZSBzZWxlY3RvciBhcHBsaWVzIHRvLiIsInR5cGUiOiJzdHJpbmcifSwib3BlcmF0b3IiOnsiZGVzY3JpcHRpb24iOiJvcGVyYXRvciByZXByZXNlbnRzIGEga2V5J3MgcmVsYXRpb25zaGlwIHRvIGEgc2V0IG9mIHZhbHVlcy4gVmFsaWQgb3BlcmF0b3JzIGFyZSBJbiwgTm90SW4sIEV4aXN0cyBhbmQgRG9lc05vdEV4aXN0LiIsInR5cGUiOiJzdHJpbmcifSwidmFsdWVzIjp7ImRlc2NyaXB0aW9uIjoidmFsdWVzIGlzIGFuIGFycmF5IG9mIHN0cmluZyB2YWx1ZXMuIElmIHRoZSBvcGVyYXRvciBpcyBJbiBvciBOb3RJbiwgdGhlIHZhbHVlcyBhcnJheSBtdXN0IGJlIG5vbi1lbXB0eS4gSWYgdGhlIG9wZXJhdG9yIGlzIEV4aXN0cyBvciBEb2VzTm90RXhpc3QsIHRoZSB2YWx1ZXMgYXJyYXkgbXVzdCBiZSBlbXB0eS4gVGhpcyBhcnJheSBpcyByZXBsYWNlZCBkdXJpbmcgYSBzdHJhdGVnaWMgbWVyZ2UgcGF0Y2guIiwiaXRlbXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjoiYXJyYXkifX0sInJlcXVpcmVkIjpbImtleSIsIm9wZXJhdG9yIl0sInR5cGUiOiJvYmplY3QifSwidHlwZSI6ImFycmF5In0sIm1hdGNoTGFiZWxzIjp7ImFkZGl0aW9uYWxQcm9wZXJ0aWVzIjp7InR5cGUiOiJzdHJpbmcifSwiZGVzY3JpcHRpb24iOiJtYXRjaExhYmVscyBpcyBhIG1hcCBvZiB7a2V5LHZhbHVlfSBwYWlycy4gQSBzaW5nbGUge2tleSx2YWx1ZX0gaW4gdGhlIG1hdGNoTGFiZWxzIG1hcCBpcyBlcXVpdmFsZW50IHRvIGFuIGVsZW1lbnQgb2YgbWF0Y2hFeHByZXNzaW9ucywgd2hvc2Uga2V5IGZpZWxkIGlzIFwia2V5XCIsIHRoZSBvcGVyYXRvciBpcyBcIkluXCIsIGFuZCB0aGUgdmFsdWVzIGFycmF5IGNvbnRhaW5zIG9ubHkgXCJ2YWx1ZVwiLiBUaGUgcmVxdWlyZW1lbnRzIGFyZSBBTkRlZC4iLCJ0eXBlIjoib2JqZWN0In19LCJ0eXBlIjoib2JqZWN0IiwieC1rdWJlcm5ldGVzLW1hcC10eXBlIjoiYXRvbWljIn0sInN0b3JhZ2VDbGFzc05hbWUiOnsiZGVzY3JpcHRpb24iOiJzdG9yYWdlQ2xhc3NOYW1lIGlzIHRoZSBuYW1lIG9mIHRoZSBTdG9yYWdlQ2xhc3MgcmVxdWlyZWQgYnkgdGhlIGNsYWltLiBNb3JlIGluZm86IGh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL2NvbmNlcHRzL3N0b3JhZ2UvcGVyc2lzdGVudC12b2x1bWVzI2NsYXNzLTEiLCJ0eXBlIjoic3RyaW5nIn0sInZvbHVtZUF0dHJpYnV0ZXNDbGFzc05hbWUiOnsiZGVzY3JpcHRpb24iOiJ2b2x1bWVBdHRyaWJ1dGVzQ2xhc3NOYW1lIG1heSBiZSB1c2VkIHRvIHNldCB0aGUgVm9sdW1lQXR0cmlidXRlc0NsYXNzIHVzZWQgYnkgdGhpcyBjbGFpbS4gSWYgc3BlY2lmaWVkLCB0aGUgQ1NJIGRyaXZlciB3aWxsIGNyZWF0ZSBvciB1cGRhdGUgdGhlIHZvbHVtZSB3aXRoIHRoZSBhdHRyaWJ1dGVzIGRlZmluZWQgaW4gdGhlIGNvcnJlc3BvbmRpbmcgVm9sdW1lQXR0cmlidXRlc0NsYXNzLiBUaGlzIGhhcyBhIGRpZmZlcmVudCBwdXJwb3NlIHRoYW4gc3RvcmFnZUNsYXNzTmFtZSwgaXQgY2FuIGJlIGNoYW5nZWQgYWZ0ZXIgdGhlIGNsYWltIGlzIGNyZWF0ZWQuIEFuIGVtcHR5IHN0cmluZyB2YWx1ZSBtZWFucyB0aGF0IG5vIFZvbHVtZUF0dHJpYnV0ZXNDbGFzcyB3aWxsIGJlIGFwcGxpZWQgdG8gdGhlIGNsYWltIGJ1dCBpdCdzIG5vdCBhbGxvd2VkIHRvIHJlc2V0IHRoaXMgZmllbGQgdG8gZW1wdHkgc3RyaW5nIG9uY2UgaXQgaXMgc2V0LiBJZiB1bnNwZWNpZmllZCBhbmQgdGhlIFBlcnNpc3RlbnRWb2x1bWVDbGFpbSBpcyB1bmJvdW5kLCB0aGUgZGVmYXVsdCBWb2x1bWVBdHRyaWJ1dGVzQ2xhc3Mgd2lsbCBiZSBzZXQgYnkgdGhlIHBlcnNpc3RlbnR2b2x1bWUgY29udHJvbGxlciBpZiBpdCBleGlzdHMuIElmIHRoZSByZXNvdXJjZSByZWZlcnJlZCB0byBieSB2b2x1bWVBdHRyaWJ1dGVzQ2xhc3MgZG9lcyBub3QgZXhpc3QsIHRoaXMgUGVyc2lzdGVudFZvbHVtZUNsYWltIHdpbGwgYmUgc2V0IHRvIGEgUGVuZGluZyBzdGF0ZSwgYXMgcmVmbGVjdGVkIGJ5IHRoZSBtb2RpZnlWb2x1bWVTdGF0dXMgZmllbGQsIHVudGlsIHN1Y2ggYXMgYSByZXNvdXJjZSBleGlzdHMuIE1vcmUgaW5mbzogaHR0cHM6Ly9rdWJlcm5ldGVzLmlvL2RvY3MvY29uY2VwdHMvc3RvcmFnZS9wZXJzaXN0ZW50LXZvbHVtZXMjdm9sdW1lYXR0cmlidXRlc2NsYXNzIChBbHBoYSkgVXNpbmcgdGhpcyBmaWVsZCByZXF1aXJlcyB0aGUgVm9sdW1lQXR0cmlidXRlc0NsYXNzIGZlYXR1cmUgZ2F0ZSB0byBiZSBlbmFibGVkLiIsInR5cGUiOiJzdHJpbmcifSwidm9sdW1lTW9kZSI6eyJkZXNjcmlwdGlvbiI6InZvbHVtZU1vZGUgZGVmaW5lcyB3aGF0IHR5cGUgb2Ygdm9sdW1lIGlzIHJlcXVpcmVkIGJ5IHRoZSBjbGFpbS4gVmFsdWUgb2YgRmlsZXN5c3RlbSBpcyBpbXBsaWVkIHdoZW4gbm90IGluY2x1ZGVkIGluIGNsYWltIHNwZWMuIiwidHlwZSI6InN0cmluZyJ9LCJ2b2x1bWVOYW1lIjp7ImRlc2NyaXB0aW9uIjoidm9sdW1lTmFtZSBpcyB0aGUgYmluZGluZyByZWZlcmVuY2UgdG8gdGhlIFBlcnNpc3RlbnRWb2x1bWUgYmFja2luZyB0aGlzIGNsYWltLiIsInR5cGUiOiJzdHJpbmcifX0sInR5cGUiOiJvYmplY3QifSwic3RhdHVzIjp7ImRlc2NyaXB0aW9uIjoic3RhdHVzIHJlcHJlc2VudHMgdGhlIGN1cnJlbnQgaW5mb3JtYXRpb24vc3RhdHVzIG9mIGEgcGVyc2lzdGVudCB2b2x1bWUgY2xhaW0uIFJlYWQtb25seS4gTW9yZSBpbmZvOiBodHRwczovL2t1YmVybmV0ZXMuaW8vZG9jcy9jb25jZXB0cy9zdG9yYWdlL3BlcnNpc3RlbnQtdm9sdW1lcyNwZXJzaXN0ZW50dm9sdW1lY2xhaW1zIiwicHJvcGVydGllcyI6eyJhY2Nlc3NNb2RlcyI6eyJkZXNjcmlwdGlvbiI6ImFjY2Vzc01vZGVzIGNvbnRhaW5zIHRoZSBhY3R1YWwgYWNjZXNzIG1vZGVzIHRoZSB2b2x1bWUgYmFja2luZyB0aGUgUFZDIGhhcy4gTW9yZSBpbmZvOiBodHRwczovL2t1YmVybmV0ZXMuaW8vZG9jcy9jb25jZXB0cy9zdG9yYWdlL3BlcnNpc3RlbnQtdm9sdW1lcyNhY2Nlc3MtbW9kZXMtMSIsIml0ZW1zIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6ImFycmF5In0sImFsbG9jYXRlZFJlc291cmNlU3RhdHVzZXMiOnsiYWRkaXRpb25hbFByb3BlcnRpZXMiOnsiZGVzY3JpcHRpb24iOiJXaGVuIGEgY29udHJvbGxlciByZWNlaXZlcyBwZXJzaXN0ZW50dm9sdW1lIGNsYWltIHVwZGF0ZSB3aXRoIENsYWltUmVzb3VyY2VTdGF0dXMgZm9yIGEgcmVzb3VyY2UgdGhhdCBpdCBkb2VzIG5vdCByZWNvZ25pemVzLCB0aGVuIGl0IHNob3VsZCBpZ25vcmUgdGhhdCB1cGRhdGUgYW5kIGxldCBvdGhlciBjb250cm9sbGVycyBoYW5kbGUgaXQuIiwidHlwZSI6InN0cmluZyJ9LCJkZXNjcmlwdGlvbiI6ImFsbG9jYXRlZFJlc291cmNlU3RhdHVzZXMgc3RvcmVzIHN0YXR1cyBvZiByZXNvdXJjZSBiZWluZyByZXNpemVkIGZvciB0aGUgZ2l2ZW4gUFZDLiBLZXkgbmFtZXMgZm9sbG93IHN0YW5kYXJkIEt1YmVybmV0ZXMgbGFiZWwgc3ludGF4LiBWYWxpZCB2YWx1ZXMgYXJlIGVpdGhlcjogKiBVbi1wcmVmaXhlZCBrZXlzOiAtIHN0b3JhZ2UgLSB0aGUgY2FwYWNpdHkgb2YgdGhlIHZvbHVtZS4gKiBDdXN0b20gcmVzb3VyY2VzIG11c3QgdXNlIGltcGxlbWVudGF0aW9uLWRlZmluZWQgcHJlZml4ZWQgbmFtZXMgc3VjaCBhcyBcImV4YW1wbGUuY29tL215LWN1c3RvbS1yZXNvdXJjZVwiIEFwYXJ0IGZyb20gYWJvdmUgdmFsdWVzIC0ga2V5cyB0aGF0IGFyZSB1bnByZWZpeGVkIG9yIGhhdmUga3ViZXJuZXRlcy5pbyBwcmVmaXggYXJlIGNvbnNpZGVyZWQgcmVzZXJ2ZWQgYW5kIGhlbmNlIG1heSBub3QgYmUgdXNlZC4gXG4gQ2xhaW1SZXNvdXJjZVN0YXR1cyBjYW4gYmUgaW4gYW55IG9mIGZvbGxvd2luZyBzdGF0ZXM6IC0gQ29udHJvbGxlclJlc2l6ZUluUHJvZ3Jlc3M6IFN0YXRlIHNldCB3aGVuIHJlc2l6ZSBjb250cm9sbGVyIHN0YXJ0cyByZXNpemluZyB0aGUgdm9sdW1lIGluIGNvbnRyb2wtcGxhbmUuIC0gQ29udHJvbGxlclJlc2l6ZUZhaWxlZDogU3RhdGUgc2V0IHdoZW4gcmVzaXplIGhhcyBmYWlsZWQgaW4gcmVzaXplIGNvbnRyb2xsZXIgd2l0aCBhIHRlcm1pbmFsIGVycm9yLiAtIE5vZGVSZXNpemVQZW5kaW5nOiBTdGF0ZSBzZXQgd2hlbiByZXNpemUgY29udHJvbGxlciBoYXMgZmluaXNoZWQgcmVzaXppbmcgdGhlIHZvbHVtZSBidXQgZnVydGhlciByZXNpemluZyBvZiB2b2x1bWUgaXMgbmVlZGVkIG9uIHRoZSBub2RlLiAtIE5vZGVSZXNpemVJblByb2dyZXNzOiBTdGF0ZSBzZXQgd2hlbiBrdWJlbGV0IHN0YXJ0cyByZXNpemluZyB0aGUgdm9sdW1lLiAtIE5vZGVSZXNpemVGYWlsZWQ6IFN0YXRlIHNldCB3aGVuIHJlc2l6aW5nIGhhcyBmYWlsZWQgaW4ga3ViZWxldCB3aXRoIGEgdGVybWluYWwgZXJyb3IuIFRyYW5zaWVudCBlcnJvcnMgZG9uJ3Qgc2V0IE5vZGVSZXNpemVGYWlsZWQuIEZvciBleGFtcGxlOiBpZiBleHBhbmRpbmcgYSBQVkMgZm9yIG1vcmUgY2FwYWNpdHkgLSB0aGlzIGZpZWxkIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyBzdGF0ZXM6IC0gcHZjLnN0YXR1cy5hbGxvY2F0ZWRSZXNvdXJjZVN0YXR1c1snc3RvcmFnZSddID0gXCJDb250cm9sbGVyUmVzaXplSW5Qcm9ncmVzc1wiIC0gcHZjLnN0YXR1cy5hbGxvY2F0ZWRSZXNvdXJjZVN0YXR1c1snc3RvcmFnZSddID0gXCJDb250cm9sbGVyUmVzaXplRmFpbGVkXCIgLSBwdmMuc3RhdHVzLmFsbG9jYXRlZFJlc291cmNlU3RhdHVzWydzdG9yYWdlJ10gPSBcIk5vZGVSZXNpemVQZW5kaW5nXCIgLSBwdmMuc3RhdHVzLmFsbG9jYXRlZFJlc291cmNlU3RhdHVzWydzdG9yYWdlJ10gPSBcIk5vZGVSZXNpemVJblByb2dyZXNzXCIgLSBwdmMuc3RhdHVzLmFsbG9jYXRlZFJlc291cmNlU3RhdHVzWydzdG9yYWdlJ10gPSBcIk5vZGVSZXNpemVGYWlsZWRcIiBXaGVuIHRoaXMgZmllbGQgaXMgbm90IHNldCwgaXQgbWVhbnMgdGhhdCBubyByZXNpemUgb3BlcmF0aW9uIGlzIGluIHByb2dyZXNzIGZvciB0aGUgZ2l2ZW4gUFZDLiBcbiBBIGNvbnRyb2xsZXIgdGhhdCByZWNlaXZlcyBQVkMgdXBkYXRlIHdpdGggcHJldmlvdXNseSB1bmtub3duIHJlc291cmNlTmFtZSBvciBDbGFpbVJlc291cmNlU3RhdHVzIHNob3VsZCBpZ25vcmUgdGhlIHVwZGF0ZSBmb3IgdGhlIHB1cnBvc2UgaXQgd2FzIGRlc2lnbmVkLiBGb3IgZXhhbXBsZSAtIGEgY29udHJvbGxlciB0aGF0IG9ubHkgaXMgcmVzcG9uc2libGUgZm9yIHJlc2l6aW5nIGNhcGFjaXR5IG9mIHRoZSB2b2x1bWUsIHNob3VsZCBpZ25vcmUgUFZDIHVwZGF0ZXMgdGhhdCBjaGFuZ2Ugb3RoZXIgdmFsaWQgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCBQVkMuIFxuIFRoaXMgaXMgYW4gYWxwaGEgZmllbGQgYW5kIHJlcXVpcmVzIGVuYWJsaW5nIFJlY292ZXJWb2x1bWVFeHBhbnNpb25GYWlsdXJlIGZlYXR1cmUuIiwidHlwZSI6Im9iamVjdCIsIngta3ViZXJuZXRlcy1tYXAtdHlwZSI6ImdyYW51bGFyIn0sImFsbG9jYXRlZFJlc291cmNlcyI6eyJhZGRpdGlvbmFsUHJvcGVydGllcyI6eyJhbnlPZiI6W3sidHlwZSI6ImludGVnZXIifSx7InR5cGUiOiJzdHJpbmcifV0sInBhdHRlcm4iOiJeKFxcK3wtKT8oKFswLTldKyhcXC5bMC05XSopPyl8KFxcLlswLTldKykpKChbS01HVFBFXWkpfFtudW1rTUdUUEVdfChbZUVdKFxcK3wtKT8oKFswLTldKyhcXC5bMC05XSopPyl8KFxcLlswLTldKykpKSk/JCIsIngta3ViZXJuZXRlcy1pbnQtb3Itc3RyaW5nIjp0cnVlfSwiZGVzY3JpcHRpb24iOiJhbGxvY2F0ZWRSZXNvdXJjZXMgdHJhY2tzIHRoZSByZXNvdXJjZXMgYWxsb2NhdGVkIHRvIGEgUFZDIGluY2x1ZGluZyBpdHMgY2FwYWNpdHkuIEtleSBuYW1lcyBmb2xsb3cgc3RhbmRhcmQgS3ViZXJuZXRlcyBsYWJlbCBzeW50YXguIFZhbGlkIHZhbHVlcyBhcmUgZWl0aGVyOiAqIFVuLXByZWZpeGVkIGtleXM6IC0gc3RvcmFnZSAtIHRoZSBjYXBhY2l0eSBvZiB0aGUgdm9sdW1lLiAqIEN1c3RvbSByZXNvdXJjZXMgbXVzdCB1c2UgaW1wbGVtZW50YXRpb24tZGVmaW5lZCBwcmVmaXhlZCBuYW1lcyBzdWNoIGFzIFwiZXhhbXBsZS5jb20vbXktY3VzdG9tLXJlc291cmNlXCIgQXBhcnQgZnJvbSBhYm92ZSB2YWx1ZXMgLSBrZXlzIHRoYXQgYXJlIHVucHJlZml4ZWQgb3IgaGF2ZSBrdWJlcm5ldGVzLmlvIHByZWZpeCBhcmUgY29uc2lkZXJlZCByZXNlcnZlZCBhbmQgaGVuY2UgbWF5IG5vdCBiZSB1c2VkLiBcbiBDYXBhY2l0eSByZXBvcnRlZCBoZXJlIG1heSBiZSBsYXJnZXIgdGhhbiB0aGUgYWN0dWFsIGNhcGFjaXR5IHdoZW4gYSB2b2x1bWUgZXhwYW5zaW9uIG9wZXJhdGlvbiBpcyByZXF1ZXN0ZWQuIEZvciBzdG9yYWdlIHF1b3RhLCB0aGUgbGFyZ2VyIHZhbHVlIGZyb20gYWxsb2NhdGVkUmVzb3VyY2VzIGFuZCBQVkMuc3BlYy5yZXNvdXJjZXMgaXMgdXNlZC4gSWYgYWxsb2NhdGVkUmVzb3VyY2VzIGlzIG5vdCBzZXQsIFBWQy5zcGVjLnJlc291cmNlcyBhbG9uZSBpcyB1c2VkIGZvciBxdW90YSBjYWxjdWxhdGlvbi4gSWYgYSB2b2x1bWUgZXhwYW5zaW9uIGNhcGFjaXR5IHJlcXVlc3QgaXMgbG93ZXJlZCwgYWxsb2NhdGVkUmVzb3VyY2VzIGlzIG9ubHkgbG93ZXJlZCBpZiB0aGVyZSBhcmUgbm8gZXhwYW5zaW9uIG9wZXJhdGlvbnMgaW4gcHJvZ3Jlc3MgYW5kIGlmIHRoZSBhY3R1YWwgdm9sdW1lIGNhcGFjaXR5IGlzIGVxdWFsIG9yIGxvd2VyIHRoYW4gdGhlIHJlcXVlc3RlZCBjYXBhY2l0eS4gXG4gQSBjb250cm9sbGVyIHRoYXQgcmVjZWl2ZXMgUFZDIHVwZGF0ZSB3aXRoIHByZXZpb3VzbHkgdW5rbm93biByZXNvdXJjZU5hbWUgc2hvdWxkIGlnbm9yZSB0aGUgdXBkYXRlIGZvciB0aGUgcHVycG9zZSBpdCB3YXMgZGVzaWduZWQuIEZvciBleGFtcGxlIC0gYSBjb250cm9sbGVyIHRoYXQgb25seSBpcyByZXNwb25zaWJsZSBmb3IgcmVzaXppbmcgY2FwYWNpdHkgb2YgdGhlIHZvbHVtZSwgc2hvdWxkIGlnbm9yZSBQVkMgdXBkYXRlcyB0aGF0IGNoYW5nZSBvdGhlciB2YWxpZCByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIFBWQy4gXG4gVGhpcyBpcyBhbiBhbHBoYSBmaWVsZCBhbmQgcmVxdWlyZXMgZW5hYmxpbmcgUmVjb3ZlclZvbHVtZUV4cGFuc2lvbkZhaWx1cmUgZmVhdHVyZS4iLCJ0eXBlIjoib2JqZWN0In0sImNhcGFjaXR5Ijp7ImFkZGl0aW9uYWxQcm9wZXJ0aWVzIjp7ImFueU9mIjpbeyJ0eXBlIjoiaW50ZWdlciJ9LHsidHlwZSI6InN0cmluZyJ9XSwicGF0dGVybiI6Il4oXFwrfC0pPygoWzAtOV0rKFxcLlswLTldKik/KXwoXFwuWzAtOV0rKSkoKFtLTUdUUEVdaSl8W251bWtNR1RQRV18KFtlRV0oXFwrfC0pPygoWzAtOV0rKFxcLlswLTldKik/KXwoXFwuWzAtOV0rKSkpKT8kIiwieC1rdWJlcm5ldGVzLWludC1vci1zdHJpbmciOnRydWV9LCJkZXNjcmlwdGlvbiI6ImNhcGFjaXR5IHJlcHJlc2VudHMgdGhlIGFjdHVhbCByZXNvdXJjZXMgb2YgdGhlIHVuZGVybHlpbmcgdm9sdW1lLiIsInR5cGUiOiJvYmplY3QifSwiY29uZGl0aW9ucyI6eyJkZXNjcmlwdGlvbiI6ImNvbmRpdGlvbnMgaXMgdGhlIGN1cnJlbnQgQ29uZGl0aW9uIG9mIHBlcnNpc3RlbnQgdm9sdW1lIGNsYWltLiBJZiB1bmRlcmx5aW5nIHBlcnNpc3RlbnQgdm9sdW1lIGlzIGJlaW5nIHJlc2l6ZWQgdGhlbiB0aGUgQ29uZGl0aW9uIHdpbGwgYmUgc2V0IHRvICdSZXNpemVTdGFydGVkJy4iLCJpdGVtcyI6eyJkZXNjcmlwdGlvbiI6IlBlcnNpc3RlbnRWb2x1bWVDbGFpbUNvbmRpdGlvbiBjb250YWlucyBkZXRhaWxzIGFib3V0IHN0YXRlIG9mIHB2YyIsInByb3BlcnRpZXMiOnsibGFzdFByb2JlVGltZSI6eyJkZXNjcmlwdGlvbiI6Imxhc3RQcm9iZVRpbWUgaXMgdGhlIHRpbWUgd2UgcHJvYmVkIHRoZSBjb25kaXRpb24uIiwiZm9ybWF0IjoiZGF0ZS10aW1lIiwidHlwZSI6InN0cmluZyJ9LCJsYXN0VHJhbnNpdGlvblRpbWUiOnsiZGVzY3JpcHRpb24iOiJsYXN0VHJhbnNpdGlvblRpbWUgaXMgdGhlIHRpbWUgdGhlIGNvbmRpdGlvbiB0cmFuc2l0aW9uZWQgZnJvbSBvbmUgc3RhdHVzIHRvIGFub3RoZXIuIiwiZm9ybWF0IjoiZGF0ZS10aW1lIiwidHlwZSI6InN0cmluZyJ9LCJtZXNzYWdlIjp7ImRlc2NyaXB0aW9uIjoibWVzc2FnZSBpcyB0aGUgaHVtYW4tcmVhZGFibGUgbWVzc2FnZSBpbmRpY2F0aW5nIGRldGFpbHMgYWJvdXQgbGFzdCB0cmFuc2l0aW9uLiIsInR5cGUiOiJzdHJpbmcifSwicmVhc29uIjp7ImRlc2NyaXB0aW9uIjoicmVhc29uIGlzIGEgdW5pcXVlLCB0aGlzIHNob3VsZCBiZSBhIHNob3J0LCBtYWNoaW5lIHVuZGVyc3RhbmRhYmxlIHN0cmluZyB0aGF0IGdpdmVzIHRoZSByZWFzb24gZm9yIGNvbmRpdGlvbidzIGxhc3QgdHJhbnNpdGlvbi4gSWYgaXQgcmVwb3J0cyBcIlJlc2l6ZVN0YXJ0ZWRcIiB0aGF0IG1lYW5zIHRoZSB1bmRlcmx5aW5nIHBlcnNpc3RlbnQgdm9sdW1lIGlzIGJlaW5nIHJlc2l6ZWQuIiwidHlwZSI6InN0cmluZyJ9LCJzdGF0dXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjp7ImRlc2NyaXB0aW9uIjoiUGVyc2lzdGVudFZvbHVtZUNsYWltQ29uZGl0aW9uVHlwZSBpcyBhIHZhbGlkIHZhbHVlIG9mIFBlcnNpc3RlbnRWb2x1bWVDbGFpbUNvbmRpdGlvbi5UeXBlIiwidHlwZSI6InN0cmluZyJ9fSwicmVxdWlyZWQiOlsic3RhdHVzIiwidHlwZSJdLCJ0eXBlIjoib2JqZWN0In0sInR5cGUiOiJhcnJheSJ9LCJjdXJyZW50Vm9sdW1lQXR0cmlidXRlc0NsYXNzTmFtZSI6eyJkZXNjcmlwdGlvbiI6ImN1cnJlbnRWb2x1bWVBdHRyaWJ1dGVzQ2xhc3NOYW1lIGlzIHRoZSBjdXJyZW50IG5hbWUgb2YgdGhlIFZvbHVtZUF0dHJpYnV0ZXNDbGFzcyB0aGUgUFZDIGlzIHVzaW5nLiBXaGVuIHVuc2V0LCB0aGVyZSBpcyBubyBWb2x1bWVBdHRyaWJ1dGVDbGFzcyBhcHBsaWVkIHRvIHRoaXMgUGVyc2lzdGVudFZvbHVtZUNsYWltIFRoaXMgaXMgYW4gYWxwaGEgZmllbGQgYW5kIHJlcXVpcmVzIGVuYWJsaW5nIFZvbHVtZUF0dHJpYnV0ZXNDbGFzcyBmZWF0dXJlLiIsInR5cGUiOiJzdHJpbmcifSwibW9kaWZ5Vm9sdW1lU3RhdHVzIjp7ImRlc2NyaXB0aW9uIjoiTW9kaWZ5Vm9sdW1lU3RhdHVzIHJlcHJlc2VudHMgdGhlIHN0YXR1cyBvYmplY3Qgb2YgQ29udHJvbGxlck1vZGlmeVZvbHVtZSBvcGVyYXRpb24uIFdoZW4gdGhpcyBpcyB1bnNldCwgdGhlcmUgaXMgbm8gTW9kaWZ5Vm9sdW1lIG9wZXJhdGlvbiBiZWluZyBhdHRlbXB0ZWQuIFRoaXMgaXMgYW4gYWxwaGEgZmllbGQgYW5kIHJlcXVpcmVzIGVuYWJsaW5nIFZvbHVtZUF0dHJpYnV0ZXNDbGFzcyBmZWF0dXJlLiIsInByb3BlcnRpZXMiOnsic3RhdHVzIjp7ImRlc2NyaXB0aW9uIjoic3RhdHVzIGlzIHRoZSBzdGF0dXMgb2YgdGhlIENvbnRyb2xsZXJNb2RpZnlWb2x1bWUgb3BlcmF0aW9uLiBJdCBjYW4gYmUgaW4gYW55IG9mIGZvbGxvd2luZyBzdGF0ZXM6IC0gUGVuZGluZyBQZW5kaW5nIGluZGljYXRlcyB0aGF0IHRoZSBQZXJzaXN0ZW50Vm9sdW1lQ2xhaW0gY2Fubm90IGJlIG1vZGlmaWVkIGR1ZSB0byB1bm1ldCByZXF1aXJlbWVudHMsIHN1Y2ggYXMgdGhlIHNwZWNpZmllZCBWb2x1bWVBdHRyaWJ1dGVzQ2xhc3Mgbm90IGV4aXN0aW5nLiAtIEluUHJvZ3Jlc3MgSW5Qcm9ncmVzcyBpbmRpY2F0ZXMgdGhhdCB0aGUgdm9sdW1lIGlzIGJlaW5nIG1vZGlmaWVkLiAtIEluZmVhc2libGUgSW5mZWFzaWJsZSBpbmRpY2F0ZXMgdGhhdCB0aGUgcmVxdWVzdCBoYXMgYmVlbiByZWplY3RlZCBhcyBpbnZhbGlkIGJ5IHRoZSBDU0kgZHJpdmVyLiBUbyByZXNvbHZlIHRoZSBlcnJvciwgYSB2YWxpZCBWb2x1bWVBdHRyaWJ1dGVzQ2xhc3MgbmVlZHMgdG8gYmUgc3BlY2lmaWVkLiBOb3RlOiBOZXcgc3RhdHVzZXMgY2FuIGJlIGFkZGVkIGluIHRoZSBmdXR1cmUuIENvbnN1bWVycyBzaG91bGQgY2hlY2sgZm9yIHVua25vd24gc3RhdHVzZXMgYW5kIGZhaWwgYXBwcm9wcmlhdGVseS4iLCJ0eXBlIjoic3RyaW5nIn0sInRhcmdldFZvbHVtZUF0dHJpYnV0ZXNDbGFzc05hbWUiOnsiZGVzY3JpcHRpb24iOiJ0YXJnZXRWb2x1bWVBdHRyaWJ1dGVzQ2xhc3NOYW1lIGlzIHRoZSBuYW1lIG9mIHRoZSBWb2x1bWVBdHRyaWJ1dGVzQ2xhc3MgdGhlIFBWQyBjdXJyZW50bHkgYmVpbmcgcmVjb25jaWxlZCIsInR5cGUiOiJzdHJpbmcifX0sInJlcXVpcmVkIjpbInN0YXR1cyJdLCJ0eXBlIjoib2JqZWN0In0sInBoYXNlIjp7ImRlc2NyaXB0aW9uIjoicGhhc2UgcmVwcmVzZW50cyB0aGUgY3VycmVudCBwaGFzZSBvZiBQZXJzaXN0ZW50Vm9sdW1lQ2xhaW0uIiwidHlwZSI6InN0cmluZyJ9fSwidHlwZSI6Im9iamVjdCJ9fSwidHlwZSI6Im9iamVjdCJ9LCJtb25pdG9yaW5nIjp7ImRlc2NyaXB0aW9uIjoiTW9uaXRvcmluZyBjb250cm9scyB0aGUgY29uZmlndXJhdGlvbiBvZiByZXNvdXJjZXMgZm9yIGV4cG9zaW5nIE9DUyBtZXRyaWNzIiwicHJvcGVydGllcyI6eyJsYWJlbHMiOnsiYWRkaXRpb25hbFByb3BlcnRpZXMiOnsidHlwZSI6InN0cmluZyJ9LCJkZXNjcmlwdGlvbiI6IkxhYmVscyB0byBhZGQgdG8gbW9uaXRvcmluZyByZXNvdXJjZXMgY3JlYXRlZCBieSBvcGVyYXRvci4gVGhlc2UgbGFiZWxzIGFyZSB1c2VkIGFzIExhYmVsU2VsZWN0b3IgZm9yIFByb21ldGhldXMiLCJ0eXBlIjoib2JqZWN0In0sInJlY29uY2lsZVN0cmF0ZWd5Ijp7InR5cGUiOiJzdHJpbmcifX0sInR5cGUiOiJvYmplY3QifSwibXVsdGlDbG91ZEdhdGV3YXkiOnsiZGVzY3JpcHRpb24iOiJNdWx0aUNsb3VkR2F0ZXdheVNwZWMgZGVmaW5lcyBzcGVjaWZpYyBtdWx0aS1jbG91ZCBnYXRld2F5IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyIsInByb3BlcnRpZXMiOnsiZGJTdG9yYWdlQ2xhc3NOYW1lIjp7ImRlc2NyaXB0aW9uIjoiRGJTdG9yYWdlQ2xhc3NOYW1lIHNwZWNpZmllcyB0aGUgZGVmYXVsdCBzdG9yYWdlIGNsYXNzIGZvciBub29iYS1kYiBwb2RzIiwidHlwZSI6InN0cmluZyJ9LCJkaXNhYmxlTG9hZEJhbGFuY2VyU2VydmljZSI6eyJkZXNjcmlwdGlvbiI6IkRpc2FibGVMb2FkQmFsYW5jZXJTZXJ2aWNlIChvcHRpb25hbCkgc2V0cyB0aGUgc2VydmljZSB0eXBlIHRvIENsdXN0ZXJJUCBpbnN0ZWFkIG9mIExvYWRCYWxhbmNlciIsIm51bGxhYmxlIjp0cnVlLCJ0eXBlIjoiYm9vbGVhbiJ9LCJlbmRwb2ludHMiOnsiZGVzY3JpcHRpb24iOiJFbmRwb2ludHMgKG9wdGlvbmFsKSBzZXRzIGNvbmZpZ3VyYXRpb24gaW5mbyBmb3IgdGhlIG5vb2JhYSBlbmRwb2ludCBkZXBsb3ltZW50LiIsInByb3BlcnRpZXMiOnsiYWRkaXRpb25hbFZpcnR1YWxIb3N0cyI6eyJkZXNjcmlwdGlvbiI6IkFkZGl0aW9uYWxWaXJ0dWFsSG9zdHMgKG9wdGlvbmFsKSBwcm92aWRlIGEgbGlzdCBvZiBhZGRpdGlvbmFsIGhvc3RuYW1lcyAob24gdG9wIG9mIHRoZSBidWlsdGluIG5hbWVzIGRlZmluZWQgYnkgdGhlIGNsdXN0ZXI6IHNlcnZpY2UgbmFtZSwgZWxiIG5hbWUsIHJvdXRlIG5hbWUpIHRvIGJlIHVzZWQgYXMgdmlydHVhbCBob3N0cyBieSB0aGUgdGhlIGVuZHBvaW50cyBpbiB0aGUgZW5kcG9pbnQgZGVwbG95bWVudCIsIml0ZW1zIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6ImFycmF5In0sIm1heENvdW50Ijp7ImRlc2NyaXB0aW9uIjoiTWF4Q291bnQsIHRoZSBudW1iZXIgb2YgZW5kcG9pbnQgaW5zdGFuY2VzIChwb2RzKSB0byBiZSB1c2VkIGFzIHRoZSB1cHBlciBib3VuZCB3aGVuIGF1dG9zY2FsaW5nIiwiZm9ybWF0IjoiaW50MzIiLCJ0eXBlIjoiaW50ZWdlciJ9LCJtaW5Db3VudCI6eyJkZXNjcmlwdGlvbiI6Ik1pbkNvdW50LCB0aGUgbnVtYmVyIG9mIGVuZHBvaW50IGluc3RhbmNlcyAocG9kcykgdG8gYmUgdXNlZCBhcyB0aGUgbG93ZXIgYm91bmQgd2hlbiBhdXRvc2NhbGluZyIsImZvcm1hdCI6ImludDMyIiwidHlwZSI6ImludGVnZXIifSwicmVzb3VyY2VzIjp7ImRlc2NyaXB0aW9uIjoiUmVzb3VyY2VzIChvcHRpb25hbCkgb3ZlcnJpZGVzIHRoZSBkZWZhdWx0IHJlc291cmNlIHJlcXVpcmVtZW50cyBmb3IgZXZlcnkgZW5kcG9pbnQgcG9kIiwicHJvcGVydGllcyI6eyJjbGFpbXMiOnsiZGVzY3JpcHRpb24iOiJDbGFpbXMgbGlzdHMgdGhlIG5hbWVzIG9mIHJlc291cmNlcywgZGVmaW5lZCBpbiBzcGVjLnJlc291cmNlQ2xhaW1zLCB0aGF0IGFyZSB1c2VkIGJ5IHRoaXMgY29udGFpbmVyLiBcbiBUaGlzIGlzIGFuIGFscGhhIGZpZWxkIGFuZCByZXF1aXJlcyBlbmFibGluZyB0aGUgRHluYW1pY1Jlc291cmNlQWxsb2NhdGlvbiBmZWF0dXJlIGdhdGUuIFxuIFRoaXMgZmllbGQgaXMgaW1tdXRhYmxlLiBJdCBjYW4gb25seSBiZSBzZXQgZm9yIGNvbnRhaW5lcnMuIiwiaXRlbXMiOnsiZGVzY3JpcHRpb24iOiJSZXNvdXJjZUNsYWltIHJlZmVyZW5jZXMgb25lIGVudHJ5IGluIFBvZFNwZWMuUmVzb3VyY2VDbGFpbXMuIiwicHJvcGVydGllcyI6eyJuYW1lIjp7ImRlc2NyaXB0aW9uIjoiTmFtZSBtdXN0IG1hdGNoIHRoZSBuYW1lIG9mIG9uZSBlbnRyeSBpbiBwb2Quc3BlYy5yZXNvdXJjZUNsYWltcyBvZiB0aGUgUG9kIHdoZXJlIHRoaXMgZmllbGQgaXMgdXNlZC4gSXQgbWFrZXMgdGhhdCByZXNvdXJjZSBhdmFpbGFibGUgaW5zaWRlIGEgY29udGFpbmVyLiIsInR5cGUiOiJzdHJpbmcifX0sInJlcXVpcmVkIjpbIm5hbWUiXSwidHlwZSI6Im9iamVjdCJ9LCJ0eXBlIjoiYXJyYXkiLCJ4LWt1YmVybmV0ZXMtbGlzdC1tYXAta2V5cyI6WyJuYW1lIl0sIngta3ViZXJuZXRlcy1saXN0LXR5cGUiOiJtYXAifSwibGltaXRzIjp7ImFkZGl0aW9uYWxQcm9wZXJ0aWVzIjp7ImFueU9mIjpbeyJ0eXBlIjoiaW50ZWdlciJ9LHsidHlwZSI6InN0cmluZyJ9XSwicGF0dGVybiI6Il4oXFwrfC0pPygoWzAtOV0rKFxcLlswLTldKik/KXwoXFwuWzAtOV0rKSkoKFtLTUdUUEVdaSl8W251bWtNR1RQRV18KFtlRV0oXFwrfC0pPygoWzAtOV0rKFxcLlswLTldKik/KXwoXFwuWzAtOV0rKSkpKT8kIiwieC1rdWJlcm5ldGVzLWludC1vci1zdHJpbmciOnRydWV9LCJkZXNjcmlwdGlvbiI6IkxpbWl0cyBkZXNjcmliZXMgdGhlIG1heGltdW0gYW1vdW50IG9mIGNvbXB1dGUgcmVzb3VyY2VzIGFsbG93ZWQuIE1vcmUgaW5mbzogaHR0cHM6Ly9rdWJlcm5ldGVzLmlvL2RvY3MvY29uY2VwdHMvY29uZmlndXJhdGlvbi9tYW5hZ2UtcmVzb3VyY2VzLWNvbnRhaW5lcnMvIiwidHlwZSI6Im9iamVjdCJ9LCJyZXF1ZXN0cyI6eyJhZGRpdGlvbmFsUHJvcGVydGllcyI6eyJhbnlPZiI6W3sidHlwZSI6ImludGVnZXIifSx7InR5cGUiOiJzdHJpbmcifV0sInBhdHRlcm4iOiJeKFxcK3wtKT8oKFswLTldKyhcXC5bMC05XSopPyl8KFxcLlswLTldKykpKChbS01HVFBFXWkpfFtudW1rTUdUUEVdfChbZUVdKFxcK3wtKT8oKFswLTldKyhcXC5bMC05XSopPyl8KFxcLlswLTldKykpKSk/JCIsIngta3ViZXJuZXRlcy1pbnQtb3Itc3RyaW5nIjp0cnVlfSwiZGVzY3JpcHRpb24iOiJSZXF1ZXN0cyBkZXNjcmliZXMgdGhlIG1pbmltdW0gYW1vdW50IG9mIGNvbXB1dGUgcmVzb3VyY2VzIHJlcXVpcmVkLiBJZiBSZXF1ZXN0cyBpcyBvbWl0dGVkIGZvciBhIGNvbnRhaW5lciwgaXQgZGVmYXVsdHMgdG8gTGltaXRzIGlmIHRoYXQgaXMgZXhwbGljaXRseSBzcGVjaWZpZWQsIG90aGVyd2lzZSB0byBhbiBpbXBsZW1lbnRhdGlvbi1kZWZpbmVkIHZhbHVlLiBSZXF1ZXN0cyBjYW5ub3QgZXhjZWVkIExpbWl0cy4gTW9yZSBpbmZvOiBodHRwczovL2t1YmVybmV0ZXMuaW8vZG9jcy9jb25jZXB0cy9jb25maWd1cmF0aW9uL21hbmFnZS1yZXNvdXJjZXMtY29udGFpbmVycy8iLCJ0eXBlIjoib2JqZWN0In19LCJ0eXBlIjoib2JqZWN0In19LCJ0eXBlIjoib2JqZWN0In0sImV4dGVybmFsUGdDb25maWciOnsiZGVzY3JpcHRpb24iOiJBbGxvd3MgTm9vYmFhIHRvIGNvbm5lY3QgdG8gYW4gZXh0ZXJuYWwgUG9zdGdyZXMgc2VydmVyIiwicHJvcGVydGllcyI6eyJhbGxvd1NlbGZTaWduZWRDZXJ0cyI6eyJkZXNjcmlwdGlvbiI6IkFsbG93U2VsZlNpZ25lZENlcnRzIHdpbGwgYWxsb3cgdGhlIFBvc3RncmVzIHNlcnZlciB0byB1c2Ugc2VsZiBzaWduZWQgY2VydGlmaWNhdGVzIHRvIGF1dGhlbnRpY2F0ZSIsInR5cGUiOiJib29sZWFuIn0sImVuYWJsZVRscyI6eyJkZXNjcmlwdGlvbiI6IkVuYWJsZVRMUyB3aWxsIGFsbG93IHRoZSBwb3N0Z3JlcyBzZXJ2ZXIgdG8gY29ubmVjdCB2aWEgVExTL1NTTCIsInR5cGUiOiJib29sZWFuIn0sInBnU2VjcmV0TmFtZSI6eyJkZXNjcmlwdGlvbiI6IlBHU2VjcmV0IHN0b3JlcyB0aGUgc2VjcmV0IG5hbWUgd2hpY2ggY29udGFpbnMgY29ubmVjdGlvbiBzdHJpbmcgb2YgdGhlIFBvc3RncmVzIHNlcnZlciIsInR5cGUiOiJzdHJpbmcifSwidGxzU2VjcmV0TmFtZSI6eyJkZXNjcmlwdGlvbiI6IlRMU1NlY3JldCBzdG9yZXMgdGhlIHNlY3JldCBuYW1lIHdoaWNoIGNvbnRhaW5zIHRoZSBjbGllbnQgc2lkZSBjZXJ0aWZpY2F0ZXMgaWYgZW5hYmxlZCIsInR5cGUiOiJzdHJpbmcifX0sInR5cGUiOiJvYmplY3QifSwicmVjb25jaWxlU3RyYXRlZ3kiOnsiZGVzY3JpcHRpb24iOiJSZWNvbmNpbGVTdHJhdGVneSBzcGVjaWZpZXMgd2hldGhlciB0byByZWNvbmNpbGUgTm9vQmFhIENScy4gVmFsaWQgdmFsdWVzIGFyZSBcIm1hbmFnZVwiLCBcInN0YW5kYWxvbmVcIiwgXCJpZ25vcmVcIiAoc2FtZSBhcyBcInN0YW5kYWxvbmVcIiksIGFuZCBcIlwiIChzYW1lIGFzIFwibWFuYWdlXCIpLiIsInR5cGUiOiJzdHJpbmcifX0sInR5cGUiOiJvYmplY3QifSwibmV0d29yayI6eyJkZXNjcmlwdGlvbiI6Ik5ldHdvcmsgcmVwcmVzZW50cyBjbHVzdGVyIG5ldHdvcmsgc2V0dGluZ3MiLCJwcm9wZXJ0aWVzIjp7ImFkZHJlc3NSYW5nZXMiOnsiZGVzY3JpcHRpb24iOiJBZGRyZXNzUmFuZ2VzIHNwZWNpZnkgYSBsaXN0IG9mIENJRFJzIHRoYXQgUm9vayB3aWxsIGFwcGx5IHRvIENlcGgncyAncHVibGljX25ldHdvcmsnIGFuZC9vciAnY2x1c3Rlcl9uZXR3b3JrJyBjb25maWd1cmF0aW9ucy4gVGhpcyBjb25maWcgc2VjdGlvbiBtYXkgYmUgdXNlZCBmb3IgdGhlIFwiaG9zdFwiIG9yIFwibXVsdHVzXCIgbmV0d29yayBwcm92aWRlcnMuIiwibnVsbGFibGUiOnRydWUsInByb3BlcnRpZXMiOnsiY2x1c3RlciI6eyJkZXNjcmlwdGlvbiI6IkNsdXN0ZXIgZGVmaW5lcyBhIGxpc3Qgb2YgQ0lEUnMgdG8gdXNlIGZvciBDZXBoIGNsdXN0ZXIgbmV0d29yayBjb21tdW5pY2F0aW9uLiIsIml0ZW1zIjp7ImRlc2NyaXB0aW9uIjoiQW4gSVB2NCBvciBJUHY2IG5ldHdvcmsgQ0lEUi4gXG4gVGhpcyBuYWl2ZSBrdWJlYnVpbGRlciByZWdleCBwcm92aWRlcyBpbW1lZGlhdGUgZmVlZGJhY2sgZm9yIHNvbWUgdHlwb3MgYW5kIGZvciBhIGNvbW1vbiBwcm9ibGVtIGNhc2Ugd2hlcmUgdGhlIHJhbmdlIHNwZWMgaXMgZm9yZ290dGVuIChlLmcuLCAvMjQpLiBSb29rIGRvZXMgaW4tZGVwdGggdmFsaWRhdGlvbiBpbiBjb2RlLiIsInBhdHRlcm4iOiJeWzAtOWEtZkEtRjouXXsyLH1cXC9bMC05XXsxLDN9JCIsInR5cGUiOiJzdHJpbmcifSwidHlwZSI6ImFycmF5In0sInB1YmxpYyI6eyJkZXNjcmlwdGlvbiI6IlB1YmxpYyBkZWZpbmVzIGEgbGlzdCBvZiBDSURScyB0byB1c2UgZm9yIENlcGggcHVibGljIG5ldHdvcmsgY29tbXVuaWNhdGlvbi4iLCJpdGVtcyI6eyJkZXNjcmlwdGlvbiI6IkFuIElQdjQgb3IgSVB2NiBuZXR3b3JrIENJRFIuIFxuIFRoaXMgbmFpdmUga3ViZWJ1aWxkZXIgcmVnZXggcHJvdmlkZXMgaW1tZWRpYXRlIGZlZWRiYWNrIGZvciBzb21lIHR5cG9zIGFuZCBmb3IgYSBjb21tb24gcHJvYmxlbSBjYXNlIHdoZXJlIHRoZSByYW5nZSBzcGVjIGlzIGZvcmdvdHRlbiAoZS5nLiwgLzI0KS4gUm9vayBkb2VzIGluLWRlcHRoIHZhbGlkYXRpb24gaW4gY29kZS4iLCJwYXR0ZXJuIjoiXlswLTlhLWZBLUY6Ll17Mix9XFwvWzAtOV17MSwzfSQiLCJ0eXBlIjoic3RyaW5nIn0sInR5cGUiOiJhcnJheSJ9fSwidHlwZSI6Im9iamVjdCJ9LCJjb25uZWN0aW9ucyI6eyJkZXNjcmlwdGlvbiI6IlNldHRpbmdzIGZvciBuZXR3b3JrIGNvbm5lY3Rpb25zIHN1Y2ggYXMgY29tcHJlc3Npb24gYW5kIGVuY3J5cHRpb24gYWNyb3NzIHRoZSB3aXJlLiIsIm51bGxhYmxlIjp0cnVlLCJwcm9wZXJ0aWVzIjp7ImNvbXByZXNzaW9uIjp7ImRlc2NyaXB0aW9uIjoiQ29tcHJlc3Npb24gc2V0dGluZ3MgZm9yIHRoZSBuZXR3b3JrIGNvbm5lY3Rpb25zLiIsIm51bGxhYmxlIjp0cnVlLCJwcm9wZXJ0aWVzIjp7ImVuYWJsZWQiOnsiZGVzY3JpcHRpb24iOiJXaGV0aGVyIHRvIGNvbXByZXNzIHRoZSBkYXRhIGluIHRyYW5zaXQgYWNyb3NzIHRoZSB3aXJlLiBUaGUgZGVmYXVsdCBpcyBub3Qgc2V0LiIsInR5cGUiOiJib29sZWFuIn19LCJ0eXBlIjoib2JqZWN0In0sImVuY3J5cHRpb24iOnsiZGVzY3JpcHRpb24iOiJFbmNyeXB0aW9uIHNldHRpbmdzIGZvciB0aGUgbmV0d29yayBjb25uZWN0aW9ucy4iLCJudWxsYWJsZSI6dHJ1ZSwicHJvcGVydGllcyI6eyJlbmFibGVkIjp7ImRlc2NyaXB0aW9uIjoiV2hldGhlciB0byBlbmNyeXB0IHRoZSBkYXRhIGluIHRyYW5zaXQgYWNyb3NzIHRoZSB3aXJlIHRvIHByZXZlbnQgZWF2ZXNkcm9wcGluZyB0aGUgZGF0YSBvbiB0aGUgbmV0d29yay4gVGhlIGRlZmF1bHQgaXMgbm90IHNldC4gRXZlbiBpZiBlbmNyeXB0aW9uIGlzIG5vdCBlbmFibGVkLCBjbGllbnRzIHN0aWxsIGVzdGFibGlzaCBhIHN0cm9uZyBpbml0aWFsIGF1dGhlbnRpY2F0aW9uIGZvciB0aGUgY29ubmVjdGlvbiBhbmQgZGF0YSBpbnRlZ3JpdHkgaXMgc3RpbGwgdmFsaWRhdGVkIHdpdGggYSBjcmMgY2hlY2suIFdoZW4gZW5jcnlwdGlvbiBpcyBlbmFibGVkLCBhbGwgY29tbXVuaWNhdGlvbiBiZXR3ZWVuIGNsaWVudHMgYW5kIENlcGggZGFlbW9ucywgb3IgYmV0d2VlbiBDZXBoIGRhZW1vbnMgd2lsbCBiZSBlbmNyeXB0ZWQuIiwidHlwZSI6ImJvb2xlYW4ifX0sInR5cGUiOiJvYmplY3QifSwicmVxdWlyZU1zZ3IyIjp7ImRlc2NyaXB0aW9uIjoiV2hldGhlciB0byByZXF1aXJlIG1zZ3IyIChwb3J0IDMzMDApIGV2ZW4gaWYgY29tcHJlc3Npb24gb3IgZW5jcnlwdGlvbiBhcmUgbm90IGVuYWJsZWQuIElmIHRydWUsIHRoZSBtc2dyMSBwb3J0ICg2Nzg5KSB3aWxsIGJlIGRpc2FibGVkLiBSZXF1aXJlcyBhIGtlcm5lbCB0aGF0IHN1cHBvcnRzIG1zZ3IyIChrZXJuZWwgNS4xMSBvciBDZW50T1MgOC40IG9yIG5ld2VyKS4iLCJ0eXBlIjoiYm9vbGVhbiJ9fSwidHlwZSI6Im9iamVjdCJ9LCJkdWFsU3RhY2siOnsiZGVzY3JpcHRpb24iOiJEdWFsU3RhY2sgZGV0ZXJtaW5lcyB3aGV0aGVyIENlcGggZGFlbW9ucyBzaG91bGQgbGlzdGVuIG9uIGJvdGggSVB2NCBhbmQgSVB2NiIsInR5cGUiOiJib29sZWFuIn0sImhvc3ROZXR3b3JrIjp7ImRlc2NyaXB0aW9uIjoiSG9zdE5ldHdvcmsgdG8gZW5hYmxlIGhvc3QgbmV0d29yay4gSWYgaG9zdCBuZXR3b3JraW5nIGlzIGVuYWJsZWQgb3IgZGlzYWJsZWQgb24gYSBydW5uaW5nIGNsdXN0ZXIsIHRoZW4gdGhlIG9wZXJhdG9yIHdpbGwgYXV0b21hdGljYWxseSBmYWlsIG92ZXIgYWxsIHRoZSBtb25zIHRvIGFwcGx5IHRoZSBuZXcgbmV0d29yayBzZXR0aW5ncy4iLCJ0eXBlIjoiYm9vbGVhbiJ9LCJpcEZhbWlseSI6eyJkZXNjcmlwdGlvbiI6IklQRmFtaWx5IGlzIHRoZSBzaW5nbGUgc3RhY2sgSVB2NiBvciBJUHY0IHByb3RvY29sIiwiZW51bSI6WyJJUHY0IiwiSVB2NiJdLCJudWxsYWJsZSI6dHJ1ZSwidHlwZSI6InN0cmluZyJ9LCJtdWx0aUNsdXN0ZXJTZXJ2aWNlIjp7ImRlc2NyaXB0aW9uIjoiRW5hYmxlIG11bHRpQ2x1c3RlclNlcnZpY2UgdG8gZXhwb3J0IHRoZSBTZXJ2aWNlcyBiZXR3ZWVuIHBlZXIgY2x1c3RlcnMiLCJwcm9wZXJ0aWVzIjp7ImNsdXN0ZXJJRCI6eyJkZXNjcmlwdGlvbiI6IkNsdXN0ZXJJRCB1bmlxdWVseSBpZGVudGlmaWVzIGEgY2x1c3Rlci4gSXQgaXMgdXNlZCBhcyBhIHByZWZpeCB0byBuc2xvb2t1cCBleHBvcnRlZCBzZXJ2aWNlcy4gRm9yIGV4YW1wbGU6IFx1MDAzY2NsdXN0ZXJpZFx1MDAzZS5cdTAwM2NzdmNcdTAwM2UuXHUwMDNjbnNcdTAwM2Uuc3ZjLmNsdXN0ZXJzZXQubG9jYWwiLCJ0eXBlIjoic3RyaW5nIn0sImVuYWJsZWQiOnsiZGVzY3JpcHRpb24iOiJFbmFibGUgbXVsdGlDbHVzdGVyU2VydmljZSB0byBleHBvcnQgdGhlIG1vbiBhbmQgT1NEIHNlcnZpY2VzIHRvIHBlZXIgY2x1c3Rlci4gRW5zdXJlIHRoYXQgcGVlciBjbHVzdGVycyBhcmUgY29ubmVjdGVkIHVzaW5nIGFuIE1DUyBBUEkgY29tcGF0aWJsZSBhcHBsaWNhdGlvbiwgbGlrZSBHbG9iYWxuZXQgU3VibWFyaW5lci4iLCJ0eXBlIjoiYm9vbGVhbiJ9fSwidHlwZSI6Im9iamVjdCJ9LCJwcm92aWRlciI6eyJkZXNjcmlwdGlvbiI6IlByb3ZpZGVyIGlzIHdoYXQgcHJvdmlkZXMgbmV0d29yayBjb25uZWN0aXZpdHkgdG8gdGhlIGNsdXN0ZXIgZS5nLiBcImhvc3RcIiBvciBcIm11bHR1c1wiLiBJZiB0aGUgUHJvdmlkZXIgaXMgdXBkYXRlZCBmcm9tIGJlaW5nIGVtcHR5IHRvIFwiaG9zdFwiIG9uIGEgcnVubmluZyBjbHVzdGVyLCB0aGVuIHRoZSBvcGVyYXRvciB3aWxsIGF1dG9tYXRpY2FsbHkgZmFpbCBvdmVyIGFsbCB0aGUgbW9ucyB0byBhcHBseSB0aGUgXCJob3N0XCIgbmV0d29yayBzZXR0aW5ncy4iLCJlbnVtIjpbIiIsImhvc3QiLCJtdWx0dXMiXSwibnVsbGFibGUiOnRydWUsInR5cGUiOiJzdHJpbmciLCJ4LWt1YmVybmV0ZXMtdmFsaWRhdGlvbnMiOlt7Im1lc3NhZ2UiOiJuZXR3b3JrIHByb3ZpZGVyIG11c3QgYmUgZGlzYWJsZWQgKHJldmVydGVkIHRvIGVtcHR5IHN0cmluZykgYmVmb3JlIGEgbmV3IHByb3ZpZGVyIGlzIGVuYWJsZWQiLCJydWxlIjoic2VsZiA9PSAnJyB8fCBzZWxmID09IG9sZFNlbGYifV19LCJzZWxlY3RvcnMiOnsiYWRkaXRpb25hbFByb3BlcnRpZXMiOnsidHlwZSI6InN0cmluZyJ9LCJkZXNjcmlwdGlvbiI6IlNlbGVjdG9ycyBkZWZpbmUgTmV0d29ya0F0dGFjaG1lbnREZWZpbml0aW9ucyB0byBiZSB1c2VkIGZvciBDZXBoIHB1YmxpYyBhbmQvb3IgY2x1c3RlciBuZXR3b3JrcyB3aGVuIHRoZSBcIm11bHR1c1wiIG5ldHdvcmsgcHJvdmlkZXIgaXMgdXNlZC4gVGhpcyBjb25maWcgc2VjdGlvbiBpcyBub3QgdXNlZCBmb3Igb3RoZXIgbmV0d29yayBwcm92aWRlcnMuIFxuIFZhbGlkIGtleXMgYXJlIFwicHVibGljXCIgYW5kIFwiY2x1c3RlclwiLiBSZWZlciB0byBDZXBoIG5ldHdvcmtpbmcgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZTogaHR0cHM6Ly9kb2NzLmNlcGguY29tL2VuL3JlZWYvcmFkb3MvY29uZmlndXJhdGlvbi9uZXR3b3JrLWNvbmZpZy1yZWYvIFxuIFJlZmVyIHRvIE11bHR1cyBuZXR3b3JrIGFubm90YXRpb24gZG9jdW1lbnRhdGlvbiBmb3IgaGVscCBzZWxlY3RpbmcgdmFsdWVzOiBodHRwczovL2dpdGh1Yi5jb20vazhzbmV0d29ya3BsdW1iaW5nd2cvbXVsdHVzLWNuaS9ibG9iL21hc3Rlci9kb2NzL2hvdy10by11c2UubWQjcnVuLXBvZC13aXRoLW5ldHdvcmstYW5ub3RhdGlvbiBcbiBSb29rIHdpbGwgbWFrZSBhIGJlc3QtZWZmb3J0IGF0dGVtcHQgdG8gYXV0b21hdGljYWxseSBkZXRlY3QgQ0lEUiBhZGRyZXNzIHJhbmdlcyBmb3IgZ2l2ZW4gbmV0d29yayBhdHRhY2htZW50IGRlZmluaXRpb25zLiBSb29rJ3MgbWV0aG9kcyBhcmUgcm9idXN0IGJ1dCBtYXkgYmUgaW1wcmVjaXNlIGZvciBzdWZmaWNpZW50bHkgY29tcGxpY2F0ZWQgbmV0d29ya3MuIFJvb2sncyBhdXRvLWRldGVjdGlvbiBwcm9jZXNzIG9idGFpbnMgYSBuZXcgSVAgYWRkcmVzcyBsZWFzZSBmb3IgZWFjaCBDZXBoQ2x1c3RlciByZWNvbmNpbGUuIElmIFJvb2sgZmFpbHMgdG8gZGV0ZWN0LCBpbmNvcnJlY3RseSBkZXRlY3RzLCBvbmx5IHBhcnRpYWxseSBkZXRlY3RzLCBvciBpZiB1bmRlcmx5aW5nIG5ldHdvcmtzIGRvIG5vdCBzdXBwb3J0IHJldXNpbmcgb2xkIElQIGFkZHJlc3NlcywgaXQgaXMgYmVzdCB0byB1c2UgdGhlICdhZGRyZXNzUmFuZ2VzJyBjb25maWcgc2VjdGlvbiB0byBzcGVjaWZ5IENJRFIgcmFuZ2VzIGZvciB0aGUgQ2VwaCBjbHVzdGVyLiBcbiBBcyBhIGNvbnRyaXZlZCBleGFtcGxlLCBvbmUgY2FuIHVzZSBhIHRoZW9yZXRpY2FsIEt1YmVybmV0ZXMtd2lkZSBuZXR3b3JrIGZvciBDZXBoIGNsaWVudCB0cmFmZmljIGFuZCBhIHRoZW9yZXRpY2FsIFJvb2stb25seSBuZXR3b3JrIGZvciBDZXBoIHJlcGxpY2F0aW9uIHRyYWZmaWMgYXMgc2hvd246IHNlbGVjdG9yczogcHVibGljOiBcImRlZmF1bHQvY2x1c3Rlci1mYXN0LW5ldFwiIGNsdXN0ZXI6IFwicm9vay1jZXBoL2NlcGgtYmFja2VuZC1uZXRcIiIsIm51bGxhYmxlIjp0cnVlLCJ0eXBlIjoib2JqZWN0In19LCJ0eXBlIjoib2JqZWN0IiwieC1rdWJlcm5ldGVzLXZhbGlkYXRpb25zIjpbeyJtZXNzYWdlIjoiYXQgbGVhc3Qgb25lIG5ldHdvcmsgc2VsZWN0b3IgbXVzdCBiZSBzcGVjaWZpZWQgd2hlbiB1c2luZyBtdWx0dXMiLCJydWxlIjoiIWhhcyhzZWxmLnByb3ZpZGVyKSB8fCAoc2VsZi5wcm92aWRlciAhPSAnbXVsdHVzJyB8fCAoc2VsZi5wcm92aWRlciA9PSAnbXVsdHVzJyBcdTAwMjZcdTAwMjYgc2l6ZShzZWxmLnNlbGVjdG9ycykgXHUwMDNlIDApKSJ9LHsibWVzc2FnZSI6InRoZSBsZWdhY3kgaG9zdE5ldHdvcmsgc2V0dGluZyBjYW4gb25seSBiZSBzZXQgaWYgdGhlIG5ldHdvcmsucHJvdmlkZXIgaXMgc2V0IHRvIHRoZSBlbXB0eSBzdHJpbmciLCJydWxlIjoiIWhhcyhzZWxmLmhvc3ROZXR3b3JrKSB8fCBzZWxmLmhvc3ROZXR3b3JrID09IGZhbHNlIHx8ICFoYXMoc2VsZi5wcm92aWRlcikgfHwgc2VsZi5wcm92aWRlciA9PSBcIlwiIn1dfSwibmZzIjp7ImRlc2NyaXB0aW9uIjoiTkZTU3BlYyBkZWZpbmVzIHNwZWNpZmljIG5mcyBjb25maWd1cmF0aW9uIG9wdGlvbnMiLCJwcm9wZXJ0aWVzIjp7ImVuYWJsZSI6eyJkZXNjcmlwdGlvbiI6IkVuYWJsZSBzcGVjaWZpZXMgd2hldGhlciB0byBlbmFibGUgTkZTLiIsInR5cGUiOiJib29sZWFuIn0sInN0b3JhZ2VDbGFzc05hbWUiOnsiZGVzY3JpcHRpb24iOiJTdG9yYWdlQ2xhc3NOYW1lIHNwZWNpZmllcyB0aGUgbmFtZSBvZiB0aGUgc3RvcmFnZSBjbGFzcyBjcmVhdGVkIGZvciBORlMiLCJtYXhMZW5ndGgiOjI1MywicGF0dGVybiI6Il5bYS16MC05XShbLWEtejAtOV0qW2EtejAtOV0pPyhcXFxcLlthLXowLTldKFstYS16MC05XSpbYS16MC05XSk/KSokIiwidHlwZSI6InN0cmluZyJ9fSwidHlwZSI6Im9iamVjdCJ9LCJub2RlVG9wb2xvZ2llcyI6eyJkZXNjcmlwdGlvbiI6Ik5vZGVUb3BvbG9naWVzIHNwZWNpZmllcyB0aGUgbm9kZXMgYXZhaWxhYmxlIGZvciB0aGUgc3RvcmFnZSBjbHVzdGVyLCBwcmVmZXJyZWQgZmFpbHVyZSBkb21haW4gYW5kIGxvY2F0aW9uIGZvciB0aGUgYXJiaXRlciByZXNvdXJjZXMuIFRoaXMgaXMgb3B0aW9uYWwgZm9yIG5vbi1hcmJpdGVyIGNsdXN0ZXJzLiBGb3IgYXJiaXRlciBjbHVzdGVycywgdGhlIGFyYml0ZXJMb2NhdGlvbiBpcyByZXF1aXJlZDsgZmFpbHVyZSBkb21haW4gYW5kIHRoZSBub2RlIGxhYmVscyBhcmUgb3B0aW9uYWwuIFdoZW4gdGhlIGZhaWx1cmUgZG9tYWluIGFuZCB0aGUgbm9kZSBsYWJlbHMgYXJlIG1pc3NpbmcsIHRoZSBvY3Mtb3BlcmF0b3IgbWFrZXMgYSBiZXN0IGVmZm9ydCB0byBkZXRlcm1pbmUgdGhlbSBhdXRvbWF0aWNhbGx5LiIsInByb3BlcnRpZXMiOnsiYXJiaXRlckxvY2F0aW9uIjp7ImRlc2NyaXB0aW9uIjoiQXJiaXRlckxvY2F0aW9uIGlzIHRoZSBjaG9zZW4gbG9jYXRpb24gaW4gdGhlIGZhaWx1cmUgZG9tYWluIGZvciBwbGFjaW5nIHRoZSBhcmJpdGVyIHJlc291cmNlcy4gV2hlbiB0aGUgZmFpbHVyZSBkb21haW4gaXMgbm90IHByb3ZpZGVkIGFzIGFuIGlucHV0LCBvY3Mtb3BlcmF0b3IgZGV0ZXJtaW5lcyB0aGUgZmFpbHVyZSBkb21haW4uIiwidHlwZSI6InN0cmluZyJ9LCJsYWJlbHMiOnsiYWRkaXRpb25hbFByb3BlcnRpZXMiOnsiZGVzY3JpcHRpb24iOiJUb3BvbG9neUxhYmVsVmFsdWVzIGlzIGEgbGlzdCBvZiB2YWx1ZXMgZm9yIGEgdG9wb2xvZ3kgbGFiZWwiLCJpdGVtcyI6eyJ0eXBlIjoic3RyaW5nIn0sInR5cGUiOiJhcnJheSJ9LCJkZXNjcmlwdGlvbiI6IkxhYmVscyBpcyBhIG1hcCBvZiB0b3BvbG9neSBsYWJlbCBrZXlzIChlLmcuIFwiZmFpbHVyZS1kb21haW4ua3ViZXJuZXRlcy5pb1wiKSB0byBhIHNldCBvZiB2YWx1ZXMgZm9yIHRob3NlIGtleXMuIiwibnVsbGFibGUiOnRydWUsInR5cGUiOiJvYmplY3QifX0sInR5cGUiOiJvYmplY3QifSwib3ZlcnByb3Zpc2lvbkNvbnRyb2wiOnsiZGVzY3JpcHRpb24iOiJPdmVycHJvdmlzaW9uQ29udHJvbCBzcGVjaWZpZXMgdGhlIGFsbG93ZWQgaGFyZC1saW1pdCBQVnMgb3ZlcnByb3Zpc2lvbmluZyByZWxhdGl2ZSB0byB0aGUgZWZmZWN0aXZlIHVzYWJsZSBzdG9yYWdlIGNhcGFjaXR5LiIsIml0ZW1zIjp7ImRlc2NyaXB0aW9uIjoiT3ZlcnByb3Zpc2lvbkNvbnRyb2xTcGVjIGRlZmluZXMgdGhlIGFsbG93ZWQgb3ZlcnByb3Zpc2lvbmluZyBQVkMgY29uc3VtcHRpb24gZnJvbSB0aGUgdW5kZXJseWluZyBjbHVzdGVyLiBUaGlzIG1heSBiZSBhbiBhYnNvbHV0ZSB2YWx1ZSBvciBhcyBhIHBlcmNlbnRhZ2Ugb2YgdGhlIG92ZXJhbGwgZWZmZWN0aXZlIGNhcGFjaXR5LiBPbmUsIGFuZCBvbmx5IG9uZSBvZiB0aG9zZSB0d28gKENhcGFjaXR5IGFuZCBQZXJjZW50YWdlKSBtYXkgYmUgZGVmaW5lZC4iLCJwcm9wZXJ0aWVzIjp7ImNhcGFjaXR5Ijp7ImFueU9mIjpbeyJ0eXBlIjoiaW50ZWdlciJ9LHsidHlwZSI6InN0cmluZyJ9XSwicGF0dGVybiI6Il4oXFwrfC0pPygoWzAtOV0rKFxcLlswLTldKik/KXwoXFwuWzAtOV0rKSkoKFtLTUdUUEVdaSl8W251bWtNR1RQRV18KFtlRV0oXFwrfC0pPygoWzAtOV0rKFxcLlswLTldKik/KXwoXFwuWzAtOV0rKSkpKT8kIiwieC1rdWJlcm5ldGVzLWludC1vci1zdHJpbmciOnRydWV9LCJxdW90YU5hbWUiOnsidHlwZSI6InN0cmluZyJ9LCJzZWxlY3RvciI6eyJkZXNjcmlwdGlvbiI6IkNsdXN0ZXJSZXNvdXJjZVF1b3RhU2VsZWN0b3IgaXMgdXNlZCB0byBzZWxlY3QgcHJvamVjdHMuICBBdCBsZWFzdCBvbmUgb2YgTGFiZWxTZWxlY3RvciBvciBBbm5vdGF0aW9uU2VsZWN0b3IgbXVzdCBwcmVzZW50LiAgSWYgb25seSBvbmUgaXMgcHJlc2VudCwgaXQgaXMgdGhlIG9ubHkgc2VsZWN0aW9uIGNyaXRlcmlhLiAgSWYgYm90aCBhcmUgc3BlY2lmaWVkLCB0aGUgcHJvamVjdCBtdXN0IG1hdGNoIGJvdGggcmVzdHJpY3Rpb25zLiIsInByb3BlcnRpZXMiOnsiYW5ub3RhdGlvbnMiOnsiYWRkaXRpb25hbFByb3BlcnRpZXMiOnsidHlwZSI6InN0cmluZyJ9LCJkZXNjcmlwdGlvbiI6IkFubm90YXRpb25TZWxlY3RvciBpcyB1c2VkIHRvIHNlbGVjdCBwcm9qZWN0cyBieSBhbm5vdGF0aW9uLiIsIm51bGxhYmxlIjp0cnVlLCJ0eXBlIjoib2JqZWN0In0sImxhYmVscyI6eyJkZXNjcmlwdGlvbiI6IkxhYmVsU2VsZWN0b3IgaXMgdXNlZCB0byBzZWxlY3QgcHJvamVjdHMgYnkgbGFiZWwuIiwibnVsbGFibGUiOnRydWUsInByb3BlcnRpZXMiOnsibWF0Y2hFeHByZXNzaW9ucyI6eyJkZXNjcmlwdGlvbiI6Im1hdGNoRXhwcmVzc2lvbnMgaXMgYSBsaXN0IG9mIGxhYmVsIHNlbGVjdG9yIHJlcXVpcmVtZW50cy4gVGhlIHJlcXVpcmVtZW50cyBhcmUgQU5EZWQuIiwiaXRlbXMiOnsiZGVzY3JpcHRpb24iOiJBIGxhYmVsIHNlbGVjdG9yIHJlcXVpcmVtZW50IGlzIGEgc2VsZWN0b3IgdGhhdCBjb250YWlucyB2YWx1ZXMsIGEga2V5LCBhbmQgYW4gb3BlcmF0b3IgdGhhdCByZWxhdGVzIHRoZSBrZXkgYW5kIHZhbHVlcy4iLCJwcm9wZXJ0aWVzIjp7ImtleSI6eyJkZXNjcmlwdGlvbiI6ImtleSBpcyB0aGUgbGFiZWwga2V5IHRoYXQgdGhlIHNlbGVjdG9yIGFwcGxpZXMgdG8uIiwidHlwZSI6InN0cmluZyJ9LCJvcGVyYXRvciI6eyJkZXNjcmlwdGlvbiI6Im9wZXJhdG9yIHJlcHJlc2VudHMgYSBrZXkncyByZWxhdGlvbnNoaXAgdG8gYSBzZXQgb2YgdmFsdWVzLiBWYWxpZCBvcGVyYXRvcnMgYXJlIEluLCBOb3RJbiwgRXhpc3RzIGFuZCBEb2VzTm90RXhpc3QuIiwidHlwZSI6InN0cmluZyJ9LCJ2YWx1ZXMiOnsiZGVzY3JpcHRpb24iOiJ2YWx1ZXMgaXMgYW4gYXJyYXkgb2Ygc3RyaW5nIHZhbHVlcy4gSWYgdGhlIG9wZXJhdG9yIGlzIEluIG9yIE5vdEluLCB0aGUgdmFsdWVzIGFycmF5IG11c3QgYmUgbm9uLWVtcHR5LiBJZiB0aGUgb3BlcmF0b3IgaXMgRXhpc3RzIG9yIERvZXNOb3RFeGlzdCwgdGhlIHZhbHVlcyBhcnJheSBtdXN0IGJlIGVtcHR5LiBUaGlzIGFycmF5IGlzIHJlcGxhY2VkIGR1cmluZyBhIHN0cmF0ZWdpYyBtZXJnZSBwYXRjaC4iLCJpdGVtcyI6eyJ0eXBlIjoic3RyaW5nIn0sInR5cGUiOiJhcnJheSJ9fSwicmVxdWlyZWQiOlsia2V5Iiwib3BlcmF0b3IiXSwidHlwZSI6Im9iamVjdCJ9LCJ0eXBlIjoiYXJyYXkifSwibWF0Y2hMYWJlbHMiOnsiYWRkaXRpb25hbFByb3BlcnRpZXMiOnsidHlwZSI6InN0cmluZyJ9LCJkZXNjcmlwdGlvbiI6Im1hdGNoTGFiZWxzIGlzIGEgbWFwIG9mIHtrZXksdmFsdWV9IHBhaXJzLiBBIHNpbmdsZSB7a2V5LHZhbHVlfSBpbiB0aGUgbWF0Y2hMYWJlbHMgbWFwIGlzIGVxdWl2YWxlbnQgdG8gYW4gZWxlbWVudCBvZiBtYXRjaEV4cHJlc3Npb25zLCB3aG9zZSBrZXkgZmllbGQgaXMgXCJrZXlcIiwgdGhlIG9wZXJhdG9yIGlzIFwiSW5cIiwgYW5kIHRoZSB2YWx1ZXMgYXJyYXkgY29udGFpbnMgb25seSBcInZhbHVlXCIuIFRoZSByZXF1aXJlbWVudHMgYXJlIEFORGVkLiIsInR5cGUiOiJvYmplY3QifX0sInR5cGUiOiJvYmplY3QiLCJ4LWt1YmVybmV0ZXMtbWFwLXR5cGUiOiJhdG9taWMifX0sInR5cGUiOiJvYmplY3QifSwic3RvcmFnZUNsYXNzTmFtZSI6eyJ0eXBlIjoic3RyaW5nIn19LCJ0eXBlIjoib2JqZWN0In0sInR5cGUiOiJhcnJheSJ9LCJwbGFjZW1lbnQiOnsiYWRkaXRpb25hbFByb3BlcnRpZXMiOnsiZGVzY3JpcHRpb24iOiJQbGFjZW1lbnQgaXMgdGhlIHBsYWNlbWVudCBmb3IgYW4gb2JqZWN0IiwicHJvcGVydGllcyI6eyJub2RlQWZmaW5pdHkiOnsiZGVzY3JpcHRpb24iOiJOb2RlQWZmaW5pdHkgaXMgYSBncm91cCBvZiBub2RlIGFmZmluaXR5IHNjaGVkdWxpbmcgcnVsZXMiLCJwcm9wZXJ0aWVzIjp7InByZWZlcnJlZER1cmluZ1NjaGVkdWxpbmdJZ25vcmVkRHVyaW5nRXhlY3V0aW9uIjp7ImRlc2NyaXB0aW9uIjoiVGhlIHNjaGVkdWxlciB3aWxsIHByZWZlciB0byBzY2hlZHVsZSBwb2RzIHRvIG5vZGVzIHRoYXQgc2F0aXNmeSB0aGUgYWZmaW5pdHkgZXhwcmVzc2lvbnMgc3BlY2lmaWVkIGJ5IHRoaXMgZmllbGQsIGJ1dCBpdCBtYXkgY2hvb3NlIGEgbm9kZSB0aGF0IHZpb2xhdGVzIG9uZSBvciBtb3JlIG9mIHRoZSBleHByZXNzaW9ucy4gVGhlIG5vZGUgdGhhdCBpcyBtb3N0IHByZWZlcnJlZCBpcyB0aGUgb25lIHdpdGggdGhlIGdyZWF0ZXN0IHN1bSBvZiB3ZWlnaHRzLCBpLmUuIGZvciBlYWNoIG5vZGUgdGhhdCBtZWV0cyBhbGwgb2YgdGhlIHNjaGVkdWxpbmcgcmVxdWlyZW1lbnRzIChyZXNvdXJjZSByZXF1ZXN0LCByZXF1aXJlZER1cmluZ1NjaGVkdWxpbmcgYWZmaW5pdHkgZXhwcmVzc2lvbnMsIGV0Yy4pLCBjb21wdXRlIGEgc3VtIGJ5IGl0ZXJhdGluZyB0aHJvdWdoIHRoZSBlbGVtZW50cyBvZiB0aGlzIGZpZWxkIGFuZCBhZGRpbmcgXCJ3ZWlnaHRcIiB0byB0aGUgc3VtIGlmIHRoZSBub2RlIG1hdGNoZXMgdGhlIGNvcnJlc3BvbmRpbmcgbWF0Y2hFeHByZXNzaW9uczsgdGhlIG5vZGUocykgd2l0aCB0aGUgaGlnaGVzdCBzdW0gYXJlIHRoZSBtb3N0IHByZWZlcnJlZC4iLCJpdGVtcyI6eyJkZXNjcmlwdGlvbiI6IkFuIGVtcHR5IHByZWZlcnJlZCBzY2hlZHVsaW5nIHRlcm0gbWF0Y2hlcyBhbGwgb2JqZWN0cyB3aXRoIGltcGxpY2l0IHdlaWdodCAwIChpLmUuIGl0J3MgYSBuby1vcCkuIEEgbnVsbCBwcmVmZXJyZWQgc2NoZWR1bGluZyB0ZXJtIG1hdGNoZXMgbm8gb2JqZWN0cyAoaS5lLiBpcyBhbHNvIGEgbm8tb3ApLiIsInByb3BlcnRpZXMiOnsicHJlZmVyZW5jZSI6eyJkZXNjcmlwdGlvbiI6IkEgbm9kZSBzZWxlY3RvciB0ZXJtLCBhc3NvY2lhdGVkIHdpdGggdGhlIGNvcnJlc3BvbmRpbmcgd2VpZ2h0LiIsInByb3BlcnRpZXMiOnsibWF0Y2hFeHByZXNzaW9ucyI6eyJkZXNjcmlwdGlvbiI6IkEgbGlzdCBvZiBub2RlIHNlbGVjdG9yIHJlcXVpcmVtZW50cyBieSBub2RlJ3MgbGFiZWxzLiIsIml0ZW1zIjp7ImRlc2NyaXB0aW9uIjoiQSBub2RlIHNlbGVjdG9yIHJlcXVpcmVtZW50IGlzIGEgc2VsZWN0b3IgdGhhdCBjb250YWlucyB2YWx1ZXMsIGEga2V5LCBhbmQgYW4gb3BlcmF0b3IgdGhhdCByZWxhdGVzIHRoZSBrZXkgYW5kIHZhbHVlcy4iLCJwcm9wZXJ0aWVzIjp7ImtleSI6eyJkZXNjcmlwdGlvbiI6IlRoZSBsYWJlbCBrZXkgdGhhdCB0aGUgc2VsZWN0b3IgYXBwbGllcyB0by4iLCJ0eXBlIjoic3RyaW5nIn0sIm9wZXJhdG9yIjp7ImRlc2NyaXB0aW9uIjoiUmVwcmVzZW50cyBhIGtleSdzIHJlbGF0aW9uc2hpcCB0byBhIHNldCBvZiB2YWx1ZXMuIFZhbGlkIG9wZXJhdG9ycyBhcmUgSW4sIE5vdEluLCBFeGlzdHMsIERvZXNOb3RFeGlzdC4gR3QsIGFuZCBMdC4iLCJ0eXBlIjoic3RyaW5nIn0sInZhbHVlcyI6eyJkZXNjcmlwdGlvbiI6IkFuIGFycmF5IG9mIHN0cmluZyB2YWx1ZXMuIElmIHRoZSBvcGVyYXRvciBpcyBJbiBvciBOb3RJbiwgdGhlIHZhbHVlcyBhcnJheSBtdXN0IGJlIG5vbi1lbXB0eS4gSWYgdGhlIG9wZXJhdG9yIGlzIEV4aXN0cyBvciBEb2VzTm90RXhpc3QsIHRoZSB2YWx1ZXMgYXJyYXkgbXVzdCBiZSBlbXB0eS4gSWYgdGhlIG9wZXJhdG9yIGlzIEd0IG9yIEx0LCB0aGUgdmFsdWVzIGFycmF5IG11c3QgaGF2ZSBhIHNpbmdsZSBlbGVtZW50LCB3aGljaCB3aWxsIGJlIGludGVycHJldGVkIGFzIGFuIGludGVnZXIuIFRoaXMgYXJyYXkgaXMgcmVwbGFjZWQgZHVyaW5nIGEgc3RyYXRlZ2ljIG1lcmdlIHBhdGNoLiIsIml0ZW1zIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6ImFycmF5In19LCJyZXF1aXJlZCI6WyJrZXkiLCJvcGVyYXRvciJdLCJ0eXBlIjoib2JqZWN0In0sInR5cGUiOiJhcnJheSJ9LCJtYXRjaEZpZWxkcyI6eyJkZXNjcmlwdGlvbiI6IkEgbGlzdCBvZiBub2RlIHNlbGVjdG9yIHJlcXVpcmVtZW50cyBieSBub2RlJ3MgZmllbGRzLiIsIml0ZW1zIjp7ImRlc2NyaXB0aW9uIjoiQSBub2RlIHNlbGVjdG9yIHJlcXVpcmVtZW50IGlzIGEgc2VsZWN0b3IgdGhhdCBjb250YWlucyB2YWx1ZXMsIGEga2V5LCBhbmQgYW4gb3BlcmF0b3IgdGhhdCByZWxhdGVzIHRoZSBrZXkgYW5kIHZhbHVlcy4iLCJwcm9wZXJ0aWVzIjp7ImtleSI6eyJkZXNjcmlwdGlvbiI6IlRoZSBsYWJlbCBrZXkgdGhhdCB0aGUgc2VsZWN0b3IgYXBwbGllcyB0by4iLCJ0eXBlIjoic3RyaW5nIn0sIm9wZXJhdG9yIjp7ImRlc2NyaXB0aW9uIjoiUmVwcmVzZW50cyBhIGtleSdzIHJlbGF0aW9uc2hpcCB0byBhIHNldCBvZiB2YWx1ZXMuIFZhbGlkIG9wZXJhdG9ycyBhcmUgSW4sIE5vdEluLCBFeGlzdHMsIERvZXNOb3RFeGlzdC4gR3QsIGFuZCBMdC4iLCJ0eXBlIjoic3RyaW5nIn0sInZhbHVlcyI6eyJkZXNjcmlwdGlvbiI6IkFuIGFycmF5IG9mIHN0cmluZyB2YWx1ZXMuIElmIHRoZSBvcGVyYXRvciBpcyBJbiBvciBOb3RJbiwgdGhlIHZhbHVlcyBhcnJheSBtdXN0IGJlIG5vbi1lbXB0eS4gSWYgdGhlIG9wZXJhdG9yIGlzIEV4aXN0cyBvciBEb2VzTm90RXhpc3QsIHRoZSB2YWx1ZXMgYXJyYXkgbXVzdCBiZSBlbXB0eS4gSWYgdGhlIG9wZXJhdG9yIGlzIEd0IG9yIEx0LCB0aGUgdmFsdWVzIGFycmF5IG11c3QgaGF2ZSBhIHNpbmdsZSBlbGVtZW50LCB3aGljaCB3aWxsIGJlIGludGVycHJldGVkIGFzIGFuIGludGVnZXIuIFRoaXMgYXJyYXkgaXMgcmVwbGFjZWQgZHVyaW5nIGEgc3RyYXRlZ2ljIG1lcmdlIHBhdGNoLiIsIml0ZW1zIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6ImFycmF5In19LCJyZXF1aXJlZCI6WyJrZXkiLCJvcGVyYXRvciJdLCJ0eXBlIjoib2JqZWN0In0sInR5cGUiOiJhcnJheSJ9fSwidHlwZSI6Im9iamVjdCIsIngta3ViZXJuZXRlcy1tYXAtdHlwZSI6ImF0b21pYyJ9LCJ3ZWlnaHQiOnsiZGVzY3JpcHRpb24iOiJXZWlnaHQgYXNzb2NpYXRlZCB3aXRoIG1hdGNoaW5nIHRoZSBjb3JyZXNwb25kaW5nIG5vZGVTZWxlY3RvclRlcm0sIGluIHRoZSByYW5nZSAxLTEwMC4iLCJmb3JtYXQiOiJpbnQzMiIsInR5cGUiOiJpbnRlZ2VyIn19LCJyZXF1aXJlZCI6WyJwcmVmZXJlbmNlIiwid2VpZ2h0Il0sInR5cGUiOiJvYmplY3QifSwidHlwZSI6ImFycmF5In0sInJlcXVpcmVkRHVyaW5nU2NoZWR1bGluZ0lnbm9yZWREdXJpbmdFeGVjdXRpb24iOnsiZGVzY3JpcHRpb24iOiJJZiB0aGUgYWZmaW5pdHkgcmVxdWlyZW1lbnRzIHNwZWNpZmllZCBieSB0aGlzIGZpZWxkIGFyZSBub3QgbWV0IGF0IHNjaGVkdWxpbmcgdGltZSwgdGhlIHBvZCB3aWxsIG5vdCBiZSBzY2hlZHVsZWQgb250byB0aGUgbm9kZS4gSWYgdGhlIGFmZmluaXR5IHJlcXVpcmVtZW50cyBzcGVjaWZpZWQgYnkgdGhpcyBmaWVsZCBjZWFzZSB0byBiZSBtZXQgYXQgc29tZSBwb2ludCBkdXJpbmcgcG9kIGV4ZWN1dGlvbiAoZS5nLiBkdWUgdG8gYW4gdXBkYXRlKSwgdGhlIHN5c3RlbSBtYXkgb3IgbWF5IG5vdCB0cnkgdG8gZXZlbnR1YWxseSBldmljdCB0aGUgcG9kIGZyb20gaXRzIG5vZGUuIiwicHJvcGVydGllcyI6eyJub2RlU2VsZWN0b3JUZXJtcyI6eyJkZXNjcmlwdGlvbiI6IlJlcXVpcmVkLiBBIGxpc3Qgb2Ygbm9kZSBzZWxlY3RvciB0ZXJtcy4gVGhlIHRlcm1zIGFyZSBPUmVkLiIsIml0ZW1zIjp7ImRlc2NyaXB0aW9uIjoiQSBudWxsIG9yIGVtcHR5IG5vZGUgc2VsZWN0b3IgdGVybSBtYXRjaGVzIG5vIG9iamVjdHMuIFRoZSByZXF1aXJlbWVudHMgb2YgdGhlbSBhcmUgQU5EZWQuIFRoZSBUb3BvbG9neVNlbGVjdG9yVGVybSB0eXBlIGltcGxlbWVudHMgYSBzdWJzZXQgb2YgdGhlIE5vZGVTZWxlY3RvclRlcm0uIiwicHJvcGVydGllcyI6eyJtYXRjaEV4cHJlc3Npb25zIjp7ImRlc2NyaXB0aW9uIjoiQSBsaXN0IG9mIG5vZGUgc2VsZWN0b3IgcmVxdWlyZW1lbnRzIGJ5IG5vZGUncyBsYWJlbHMuIiwiaXRlbXMiOnsiZGVzY3JpcHRpb24iOiJBIG5vZGUgc2VsZWN0b3IgcmVxdWlyZW1lbnQgaXMgYSBzZWxlY3RvciB0aGF0IGNvbnRhaW5zIHZhbHVlcywgYSBrZXksIGFuZCBhbiBvcGVyYXRvciB0aGF0IHJlbGF0ZXMgdGhlIGtleSBhbmQgdmFsdWVzLiIsInByb3BlcnRpZXMiOnsia2V5Ijp7ImRlc2NyaXB0aW9uIjoiVGhlIGxhYmVsIGtleSB0aGF0IHRoZSBzZWxlY3RvciBhcHBsaWVzIHRvLiIsInR5cGUiOiJzdHJpbmcifSwib3BlcmF0b3IiOnsiZGVzY3JpcHRpb24iOiJSZXByZXNlbnRzIGEga2V5J3MgcmVsYXRpb25zaGlwIHRvIGEgc2V0IG9mIHZhbHVlcy4gVmFsaWQgb3BlcmF0b3JzIGFyZSBJbiwgTm90SW4sIEV4aXN0cywgRG9lc05vdEV4aXN0LiBHdCwgYW5kIEx0LiIsInR5cGUiOiJzdHJpbmcifSwidmFsdWVzIjp7ImRlc2NyaXB0aW9uIjoiQW4gYXJyYXkgb2Ygc3RyaW5nIHZhbHVlcy4gSWYgdGhlIG9wZXJhdG9yIGlzIEluIG9yIE5vdEluLCB0aGUgdmFsdWVzIGFycmF5IG11c3QgYmUgbm9uLWVtcHR5LiBJZiB0aGUgb3BlcmF0b3IgaXMgRXhpc3RzIG9yIERvZXNOb3RFeGlzdCwgdGhlIHZhbHVlcyBhcnJheSBtdXN0IGJlIGVtcHR5LiBJZiB0aGUgb3BlcmF0b3IgaXMgR3Qgb3IgTHQsIHRoZSB2YWx1ZXMgYXJyYXkgbXVzdCBoYXZlIGEgc2luZ2xlIGVsZW1lbnQsIHdoaWNoIHdpbGwgYmUgaW50ZXJwcmV0ZWQgYXMgYW4gaW50ZWdlci4gVGhpcyBhcnJheSBpcyByZXBsYWNlZCBkdXJpbmcgYSBzdHJhdGVnaWMgbWVyZ2UgcGF0Y2guIiwiaXRlbXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjoiYXJyYXkifX0sInJlcXVpcmVkIjpbImtleSIsIm9wZXJhdG9yIl0sInR5cGUiOiJvYmplY3QifSwidHlwZSI6ImFycmF5In0sIm1hdGNoRmllbGRzIjp7ImRlc2NyaXB0aW9uIjoiQSBsaXN0IG9mIG5vZGUgc2VsZWN0b3IgcmVxdWlyZW1lbnRzIGJ5IG5vZGUncyBmaWVsZHMuIiwiaXRlbXMiOnsiZGVzY3JpcHRpb24iOiJBIG5vZGUgc2VsZWN0b3IgcmVxdWlyZW1lbnQgaXMgYSBzZWxlY3RvciB0aGF0IGNvbnRhaW5zIHZhbHVlcywgYSBrZXksIGFuZCBhbiBvcGVyYXRvciB0aGF0IHJlbGF0ZXMgdGhlIGtleSBhbmQgdmFsdWVzLiIsInByb3BlcnRpZXMiOnsia2V5Ijp7ImRlc2NyaXB0aW9uIjoiVGhlIGxhYmVsIGtleSB0aGF0IHRoZSBzZWxlY3RvciBhcHBsaWVzIHRvLiIsInR5cGUiOiJzdHJpbmcifSwib3BlcmF0b3IiOnsiZGVzY3JpcHRpb24iOiJSZXByZXNlbnRzIGEga2V5J3MgcmVsYXRpb25zaGlwIHRvIGEgc2V0IG9mIHZhbHVlcy4gVmFsaWQgb3BlcmF0b3JzIGFyZSBJbiwgTm90SW4sIEV4aXN0cywgRG9lc05vdEV4aXN0LiBHdCwgYW5kIEx0LiIsInR5cGUiOiJzdHJpbmcifSwidmFsdWVzIjp7ImRlc2NyaXB0aW9uIjoiQW4gYXJyYXkgb2Ygc3RyaW5nIHZhbHVlcy4gSWYgdGhlIG9wZXJhdG9yIGlzIEluIG9yIE5vdEluLCB0aGUgdmFsdWVzIGFycmF5IG11c3QgYmUgbm9uLWVtcHR5LiBJZiB0aGUgb3BlcmF0b3IgaXMgRXhpc3RzIG9yIERvZXNOb3RFeGlzdCwgdGhlIHZhbHVlcyBhcnJheSBtdXN0IGJlIGVtcHR5LiBJZiB0aGUgb3BlcmF0b3IgaXMgR3Qgb3IgTHQsIHRoZSB2YWx1ZXMgYXJyYXkgbXVzdCBoYXZlIGEgc2luZ2xlIGVsZW1lbnQsIHdoaWNoIHdpbGwgYmUgaW50ZXJwcmV0ZWQgYXMgYW4gaW50ZWdlci4gVGhpcyBhcnJheSBpcyByZXBsYWNlZCBkdXJpbmcgYSBzdHJhdGVnaWMgbWVyZ2UgcGF0Y2guIiwiaXRlbXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjoiYXJyYXkifX0sInJlcXVpcmVkIjpbImtleSIsIm9wZXJhdG9yIl0sInR5cGUiOiJvYmplY3QifSwidHlwZSI6ImFycmF5In19LCJ0eXBlIjoib2JqZWN0IiwieC1rdWJlcm5ldGVzLW1hcC10eXBlIjoiYXRvbWljIn0sInR5cGUiOiJhcnJheSJ9fSwicmVxdWlyZWQiOlsibm9kZVNlbGVjdG9yVGVybXMiXSwidHlwZSI6Im9iamVjdCIsIngta3ViZXJuZXRlcy1tYXAtdHlwZSI6ImF0b21pYyJ9fSwidHlwZSI6Im9iamVjdCJ9LCJwb2RBZmZpbml0eSI6eyJkZXNjcmlwdGlvbiI6IlBvZEFmZmluaXR5IGlzIGEgZ3JvdXAgb2YgaW50ZXIgcG9kIGFmZmluaXR5IHNjaGVkdWxpbmcgcnVsZXMiLCJwcm9wZXJ0aWVzIjp7InByZWZlcnJlZER1cmluZ1NjaGVkdWxpbmdJZ25vcmVkRHVyaW5nRXhlY3V0aW9uIjp7ImRlc2NyaXB0aW9uIjoiVGhlIHNjaGVkdWxlciB3aWxsIHByZWZlciB0byBzY2hlZHVsZSBwb2RzIHRvIG5vZGVzIHRoYXQgc2F0aXNmeSB0aGUgYWZmaW5pdHkgZXhwcmVzc2lvbnMgc3BlY2lmaWVkIGJ5IHRoaXMgZmllbGQsIGJ1dCBpdCBtYXkgY2hvb3NlIGEgbm9kZSB0aGF0IHZpb2xhdGVzIG9uZSBvciBtb3JlIG9mIHRoZSBleHByZXNzaW9ucy4gVGhlIG5vZGUgdGhhdCBpcyBtb3N0IHByZWZlcnJlZCBpcyB0aGUgb25lIHdpdGggdGhlIGdyZWF0ZXN0IHN1bSBvZiB3ZWlnaHRzLCBpLmUuIGZvciBlYWNoIG5vZGUgdGhhdCBtZWV0cyBhbGwgb2YgdGhlIHNjaGVkdWxpbmcgcmVxdWlyZW1lbnRzIChyZXNvdXJjZSByZXF1ZXN0LCByZXF1aXJlZER1cmluZ1NjaGVkdWxpbmcgYWZmaW5pdHkgZXhwcmVzc2lvbnMsIGV0Yy4pLCBjb21wdXRlIGEgc3VtIGJ5IGl0ZXJhdGluZyB0aHJvdWdoIHRoZSBlbGVtZW50cyBvZiB0aGlzIGZpZWxkIGFuZCBhZGRpbmcgXCJ3ZWlnaHRcIiB0byB0aGUgc3VtIGlmIHRoZSBub2RlIGhhcyBwb2RzIHdoaWNoIG1hdGNoZXMgdGhlIGNvcnJlc3BvbmRpbmcgcG9kQWZmaW5pdHlUZXJtOyB0aGUgbm9kZShzKSB3aXRoIHRoZSBoaWdoZXN0IHN1bSBhcmUgdGhlIG1vc3QgcHJlZmVycmVkLiIsIml0ZW1zIjp7ImRlc2NyaXB0aW9uIjoiVGhlIHdlaWdodHMgb2YgYWxsIG9mIHRoZSBtYXRjaGVkIFdlaWdodGVkUG9kQWZmaW5pdHlUZXJtIGZpZWxkcyBhcmUgYWRkZWQgcGVyLW5vZGUgdG8gZmluZCB0aGUgbW9zdCBwcmVmZXJyZWQgbm9kZShzKSIsInByb3BlcnRpZXMiOnsicG9kQWZmaW5pdHlUZXJtIjp7ImRlc2NyaXB0aW9uIjoiUmVxdWlyZWQuIEEgcG9kIGFmZmluaXR5IHRlcm0sIGFzc29jaWF0ZWQgd2l0aCB0aGUgY29ycmVzcG9uZGluZyB3ZWlnaHQuIiwicHJvcGVydGllcyI6eyJsYWJlbFNlbGVjdG9yIjp7ImRlc2NyaXB0aW9uIjoiQSBsYWJlbCBxdWVyeSBvdmVyIGEgc2V0IG9mIHJlc291cmNlcywgaW4gdGhpcyBjYXNlIHBvZHMuIElmIGl0J3MgbnVsbCwgdGhpcyBQb2RBZmZpbml0eVRlcm0gbWF0Y2hlcyB3aXRoIG5vIFBvZHMuIiwicHJvcGVydGllcyI6eyJtYXRjaEV4cHJlc3Npb25zIjp7ImRlc2NyaXB0aW9uIjoibWF0Y2hFeHByZXNzaW9ucyBpcyBhIGxpc3Qgb2YgbGFiZWwgc2VsZWN0b3IgcmVxdWlyZW1lbnRzLiBUaGUgcmVxdWlyZW1lbnRzIGFyZSBBTkRlZC4iLCJpdGVtcyI6eyJkZXNjcmlwdGlvbiI6IkEgbGFiZWwgc2VsZWN0b3IgcmVxdWlyZW1lbnQgaXMgYSBzZWxlY3RvciB0aGF0IGNvbnRhaW5zIHZhbHVlcywgYSBrZXksIGFuZCBhbiBvcGVyYXRvciB0aGF0IHJlbGF0ZXMgdGhlIGtleSBhbmQgdmFsdWVzLiIsInByb3BlcnRpZXMiOnsia2V5Ijp7ImRlc2NyaXB0aW9uIjoia2V5IGlzIHRoZSBsYWJlbCBrZXkgdGhhdCB0aGUgc2VsZWN0b3IgYXBwbGllcyB0by4iLCJ0eXBlIjoic3RyaW5nIn0sIm9wZXJhdG9yIjp7ImRlc2NyaXB0aW9uIjoib3BlcmF0b3IgcmVwcmVzZW50cyBhIGtleSdzIHJlbGF0aW9uc2hpcCB0byBhIHNldCBvZiB2YWx1ZXMuIFZhbGlkIG9wZXJhdG9ycyBhcmUgSW4sIE5vdEluLCBFeGlzdHMgYW5kIERvZXNOb3RFeGlzdC4iLCJ0eXBlIjoic3RyaW5nIn0sInZhbHVlcyI6eyJkZXNjcmlwdGlvbiI6InZhbHVlcyBpcyBhbiBhcnJheSBvZiBzdHJpbmcgdmFsdWVzLiBJZiB0aGUgb3BlcmF0b3IgaXMgSW4gb3IgTm90SW4sIHRoZSB2YWx1ZXMgYXJyYXkgbXVzdCBiZSBub24tZW1wdHkuIElmIHRoZSBvcGVyYXRvciBpcyBFeGlzdHMgb3IgRG9lc05vdEV4aXN0LCB0aGUgdmFsdWVzIGFycmF5IG11c3QgYmUgZW1wdHkuIFRoaXMgYXJyYXkgaXMgcmVwbGFjZWQgZHVyaW5nIGEgc3RyYXRlZ2ljIG1lcmdlIHBhdGNoLiIsIml0ZW1zIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6ImFycmF5In19LCJyZXF1aXJlZCI6WyJrZXkiLCJvcGVyYXRvciJdLCJ0eXBlIjoib2JqZWN0In0sInR5cGUiOiJhcnJheSJ9LCJtYXRjaExhYmVscyI6eyJhZGRpdGlvbmFsUHJvcGVydGllcyI6eyJ0eXBlIjoic3RyaW5nIn0sImRlc2NyaXB0aW9uIjoibWF0Y2hMYWJlbHMgaXMgYSBtYXAgb2Yge2tleSx2YWx1ZX0gcGFpcnMuIEEgc2luZ2xlIHtrZXksdmFsdWV9IGluIHRoZSBtYXRjaExhYmVscyBtYXAgaXMgZXF1aXZhbGVudCB0byBhbiBlbGVtZW50IG9mIG1hdGNoRXhwcmVzc2lvbnMsIHdob3NlIGtleSBmaWVsZCBpcyBcImtleVwiLCB0aGUgb3BlcmF0b3IgaXMgXCJJblwiLCBhbmQgdGhlIHZhbHVlcyBhcnJheSBjb250YWlucyBvbmx5IFwidmFsdWVcIi4gVGhlIHJlcXVpcmVtZW50cyBhcmUgQU5EZWQuIiwidHlwZSI6Im9iamVjdCJ9fSwidHlwZSI6Im9iamVjdCIsIngta3ViZXJuZXRlcy1tYXAtdHlwZSI6ImF0b21pYyJ9LCJtYXRjaExhYmVsS2V5cyI6eyJkZXNjcmlwdGlvbiI6Ik1hdGNoTGFiZWxLZXlzIGlzIGEgc2V0IG9mIHBvZCBsYWJlbCBrZXlzIHRvIHNlbGVjdCB3aGljaCBwb2RzIHdpbGwgYmUgdGFrZW4gaW50byBjb25zaWRlcmF0aW9uLiBUaGUga2V5cyBhcmUgdXNlZCB0byBsb29rdXAgdmFsdWVzIGZyb20gdGhlIGluY29taW5nIHBvZCBsYWJlbHMsIHRob3NlIGtleS12YWx1ZSBsYWJlbHMgYXJlIG1lcmdlZCB3aXRoIGBMYWJlbFNlbGVjdG9yYCBhcyBga2V5IGluICh2YWx1ZSlgIHRvIHNlbGVjdCB0aGUgZ3JvdXAgb2YgZXhpc3RpbmcgcG9kcyB3aGljaCBwb2RzIHdpbGwgYmUgdGFrZW4gaW50byBjb25zaWRlcmF0aW9uIGZvciB0aGUgaW5jb21pbmcgcG9kJ3MgcG9kIChhbnRpKSBhZmZpbml0eS4gS2V5cyB0aGF0IGRvbid0IGV4aXN0IGluIHRoZSBpbmNvbWluZyBwb2QgbGFiZWxzIHdpbGwgYmUgaWdub3JlZC4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgZW1wdHkuIFRoZSBzYW1lIGtleSBpcyBmb3JiaWRkZW4gdG8gZXhpc3QgaW4gYm90aCBNYXRjaExhYmVsS2V5cyBhbmQgTGFiZWxTZWxlY3Rvci4gQWxzbywgTWF0Y2hMYWJlbEtleXMgY2Fubm90IGJlIHNldCB3aGVuIExhYmVsU2VsZWN0b3IgaXNuJ3Qgc2V0LiBUaGlzIGlzIGFuIGFscGhhIGZpZWxkIGFuZCByZXF1aXJlcyBlbmFibGluZyBNYXRjaExhYmVsS2V5c0luUG9kQWZmaW5pdHkgZmVhdHVyZSBnYXRlLiIsIml0ZW1zIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6ImFycmF5IiwieC1rdWJlcm5ldGVzLWxpc3QtdHlwZSI6ImF0b21pYyJ9LCJtaXNtYXRjaExhYmVsS2V5cyI6eyJkZXNjcmlwdGlvbiI6Ik1pc21hdGNoTGFiZWxLZXlzIGlzIGEgc2V0IG9mIHBvZCBsYWJlbCBrZXlzIHRvIHNlbGVjdCB3aGljaCBwb2RzIHdpbGwgYmUgdGFrZW4gaW50byBjb25zaWRlcmF0aW9uLiBUaGUga2V5cyBhcmUgdXNlZCB0byBsb29rdXAgdmFsdWVzIGZyb20gdGhlIGluY29taW5nIHBvZCBsYWJlbHMsIHRob3NlIGtleS12YWx1ZSBsYWJlbHMgYXJlIG1lcmdlZCB3aXRoIGBMYWJlbFNlbGVjdG9yYCBhcyBga2V5IG5vdGluICh2YWx1ZSlgIHRvIHNlbGVjdCB0aGUgZ3JvdXAgb2YgZXhpc3RpbmcgcG9kcyB3aGljaCBwb2RzIHdpbGwgYmUgdGFrZW4gaW50byBjb25zaWRlcmF0aW9uIGZvciB0aGUgaW5jb21pbmcgcG9kJ3MgcG9kIChhbnRpKSBhZmZpbml0eS4gS2V5cyB0aGF0IGRvbid0IGV4aXN0IGluIHRoZSBpbmNvbWluZyBwb2QgbGFiZWxzIHdpbGwgYmUgaWdub3JlZC4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgZW1wdHkuIFRoZSBzYW1lIGtleSBpcyBmb3JiaWRkZW4gdG8gZXhpc3QgaW4gYm90aCBNaXNtYXRjaExhYmVsS2V5cyBhbmQgTGFiZWxTZWxlY3Rvci4gQWxzbywgTWlzbWF0Y2hMYWJlbEtleXMgY2Fubm90IGJlIHNldCB3aGVuIExhYmVsU2VsZWN0b3IgaXNuJ3Qgc2V0LiBUaGlzIGlzIGFuIGFscGhhIGZpZWxkIGFuZCByZXF1aXJlcyBlbmFibGluZyBNYXRjaExhYmVsS2V5c0luUG9kQWZmaW5pdHkgZmVhdHVyZSBnYXRlLiIsIml0ZW1zIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6ImFycmF5IiwieC1rdWJlcm5ldGVzLWxpc3QtdHlwZSI6ImF0b21pYyJ9LCJuYW1lc3BhY2VTZWxlY3RvciI6eyJkZXNjcmlwdGlvbiI6IkEgbGFiZWwgcXVlcnkgb3ZlciB0aGUgc2V0IG9mIG5hbWVzcGFjZXMgdGhhdCB0aGUgdGVybSBhcHBsaWVzIHRvLiBUaGUgdGVybSBpcyBhcHBsaWVkIHRvIHRoZSB1bmlvbiBvZiB0aGUgbmFtZXNwYWNlcyBzZWxlY3RlZCBieSB0aGlzIGZpZWxkIGFuZCB0aGUgb25lcyBsaXN0ZWQgaW4gdGhlIG5hbWVzcGFjZXMgZmllbGQuIG51bGwgc2VsZWN0b3IgYW5kIG51bGwgb3IgZW1wdHkgbmFtZXNwYWNlcyBsaXN0IG1lYW5zIFwidGhpcyBwb2QncyBuYW1lc3BhY2VcIi4gQW4gZW1wdHkgc2VsZWN0b3IgKHt9KSBtYXRjaGVzIGFsbCBuYW1lc3BhY2VzLiIsInByb3BlcnRpZXMiOnsibWF0Y2hFeHByZXNzaW9ucyI6eyJkZXNjcmlwdGlvbiI6Im1hdGNoRXhwcmVzc2lvbnMgaXMgYSBsaXN0IG9mIGxhYmVsIHNlbGVjdG9yIHJlcXVpcmVtZW50cy4gVGhlIHJlcXVpcmVtZW50cyBhcmUgQU5EZWQuIiwiaXRlbXMiOnsiZGVzY3JpcHRpb24iOiJBIGxhYmVsIHNlbGVjdG9yIHJlcXVpcmVtZW50IGlzIGEgc2VsZWN0b3IgdGhhdCBjb250YWlucyB2YWx1ZXMsIGEga2V5LCBhbmQgYW4gb3BlcmF0b3IgdGhhdCByZWxhdGVzIHRoZSBrZXkgYW5kIHZhbHVlcy4iLCJwcm9wZXJ0aWVzIjp7ImtleSI6eyJkZXNjcmlwdGlvbiI6ImtleSBpcyB0aGUgbGFiZWwga2V5IHRoYXQgdGhlIHNlbGVjdG9yIGFwcGxpZXMgdG8uIiwidHlwZSI6InN0cmluZyJ9LCJvcGVyYXRvciI6eyJkZXNjcmlwdGlvbiI6Im9wZXJhdG9yIHJlcHJlc2VudHMgYSBrZXkncyByZWxhdGlvbnNoaXAgdG8gYSBzZXQgb2YgdmFsdWVzLiBWYWxpZCBvcGVyYXRvcnMgYXJlIEluLCBOb3RJbiwgRXhpc3RzIGFuZCBEb2VzTm90RXhpc3QuIiwidHlwZSI6InN0cmluZyJ9LCJ2YWx1ZXMiOnsiZGVzY3JpcHRpb24iOiJ2YWx1ZXMgaXMgYW4gYXJyYXkgb2Ygc3RyaW5nIHZhbHVlcy4gSWYgdGhlIG9wZXJhdG9yIGlzIEluIG9yIE5vdEluLCB0aGUgdmFsdWVzIGFycmF5IG11c3QgYmUgbm9uLWVtcHR5LiBJZiB0aGUgb3BlcmF0b3IgaXMgRXhpc3RzIG9yIERvZXNOb3RFeGlzdCwgdGhlIHZhbHVlcyBhcnJheSBtdXN0IGJlIGVtcHR5LiBUaGlzIGFycmF5IGlzIHJlcGxhY2VkIGR1cmluZyBhIHN0cmF0ZWdpYyBtZXJnZSBwYXRjaC4iLCJpdGVtcyI6eyJ0eXBlIjoic3RyaW5nIn0sInR5cGUiOiJhcnJheSJ9fSwicmVxdWlyZWQiOlsia2V5Iiwib3BlcmF0b3IiXSwidHlwZSI6Im9iamVjdCJ9LCJ0eXBlIjoiYXJyYXkifSwibWF0Y2hMYWJlbHMiOnsiYWRkaXRpb25hbFByb3BlcnRpZXMiOnsidHlwZSI6InN0cmluZyJ9LCJkZXNjcmlwdGlvbiI6Im1hdGNoTGFiZWxzIGlzIGEgbWFwIG9mIHtrZXksdmFsdWV9IHBhaXJzLiBBIHNpbmdsZSB7a2V5LHZhbHVlfSBpbiB0aGUgbWF0Y2hMYWJlbHMgbWFwIGlzIGVxdWl2YWxlbnQgdG8gYW4gZWxlbWVudCBvZiBtYXRjaEV4cHJlc3Npb25zLCB3aG9zZSBrZXkgZmllbGQgaXMgXCJrZXlcIiwgdGhlIG9wZXJhdG9yIGlzIFwiSW5cIiwgYW5kIHRoZSB2YWx1ZXMgYXJyYXkgY29udGFpbnMgb25seSBcInZhbHVlXCIuIFRoZSByZXF1aXJlbWVudHMgYXJlIEFORGVkLiIsInR5cGUiOiJvYmplY3QifX0sInR5cGUiOiJvYmplY3QiLCJ4LWt1YmVybmV0ZXMtbWFwLXR5cGUiOiJhdG9taWMifSwibmFtZXNwYWNlcyI6eyJkZXNjcmlwdGlvbiI6Im5hbWVzcGFjZXMgc3BlY2lmaWVzIGEgc3RhdGljIGxpc3Qgb2YgbmFtZXNwYWNlIG5hbWVzIHRoYXQgdGhlIHRlcm0gYXBwbGllcyB0by4gVGhlIHRlcm0gaXMgYXBwbGllZCB0byB0aGUgdW5pb24gb2YgdGhlIG5hbWVzcGFjZXMgbGlzdGVkIGluIHRoaXMgZmllbGQgYW5kIHRoZSBvbmVzIHNlbGVjdGVkIGJ5IG5hbWVzcGFjZVNlbGVjdG9yLiBudWxsIG9yIGVtcHR5IG5hbWVzcGFjZXMgbGlzdCBhbmQgbnVsbCBuYW1lc3BhY2VTZWxlY3RvciBtZWFucyBcInRoaXMgcG9kJ3MgbmFtZXNwYWNlXCIuIiwiaXRlbXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjoiYXJyYXkifSwidG9wb2xvZ3lLZXkiOnsiZGVzY3JpcHRpb24iOiJUaGlzIHBvZCBzaG91bGQgYmUgY28tbG9jYXRlZCAoYWZmaW5pdHkpIG9yIG5vdCBjby1sb2NhdGVkIChhbnRpLWFmZmluaXR5KSB3aXRoIHRoZSBwb2RzIG1hdGNoaW5nIHRoZSBsYWJlbFNlbGVjdG9yIGluIHRoZSBzcGVjaWZpZWQgbmFtZXNwYWNlcywgd2hlcmUgY28tbG9jYXRlZCBpcyBkZWZpbmVkIGFzIHJ1bm5pbmcgb24gYSBub2RlIHdob3NlIHZhbHVlIG9mIHRoZSBsYWJlbCB3aXRoIGtleSB0b3BvbG9neUtleSBtYXRjaGVzIHRoYXQgb2YgYW55IG5vZGUgb24gd2hpY2ggYW55IG9mIHRoZSBzZWxlY3RlZCBwb2RzIGlzIHJ1bm5pbmcuIEVtcHR5IHRvcG9sb2d5S2V5IGlzIG5vdCBhbGxvd2VkLiIsInR5cGUiOiJzdHJpbmcifX0sInJlcXVpcmVkIjpbInRvcG9sb2d5S2V5Il0sInR5cGUiOiJvYmplY3QifSwid2VpZ2h0Ijp7ImRlc2NyaXB0aW9uIjoid2VpZ2h0IGFzc29jaWF0ZWQgd2l0aCBtYXRjaGluZyB0aGUgY29ycmVzcG9uZGluZyBwb2RBZmZpbml0eVRlcm0sIGluIHRoZSByYW5nZSAxLTEwMC4iLCJmb3JtYXQiOiJpbnQzMiIsInR5cGUiOiJpbnRlZ2VyIn19LCJyZXF1aXJlZCI6WyJwb2RBZmZpbml0eVRlcm0iLCJ3ZWlnaHQiXSwidHlwZSI6Im9iamVjdCJ9LCJ0eXBlIjoiYXJyYXkifSwicmVxdWlyZWREdXJpbmdTY2hlZHVsaW5nSWdub3JlZER1cmluZ0V4ZWN1dGlvbiI6eyJkZXNjcmlwdGlvbiI6IklmIHRoZSBhZmZpbml0eSByZXF1aXJlbWVudHMgc3BlY2lmaWVkIGJ5IHRoaXMgZmllbGQgYXJlIG5vdCBtZXQgYXQgc2NoZWR1bGluZyB0aW1lLCB0aGUgcG9kIHdpbGwgbm90IGJlIHNjaGVkdWxlZCBvbnRvIHRoZSBub2RlLiBJZiB0aGUgYWZmaW5pdHkgcmVxdWlyZW1lbnRzIHNwZWNpZmllZCBieSB0aGlzIGZpZWxkIGNlYXNlIHRvIGJlIG1ldCBhdCBzb21lIHBvaW50IGR1cmluZyBwb2QgZXhlY3V0aW9uIChlLmcuIGR1ZSB0byBhIHBvZCBsYWJlbCB1cGRhdGUpLCB0aGUgc3lzdGVtIG1heSBvciBtYXkgbm90IHRyeSB0byBldmVudHVhbGx5IGV2aWN0IHRoZSBwb2QgZnJvbSBpdHMgbm9kZS4gV2hlbiB0aGVyZSBhcmUgbXVsdGlwbGUgZWxlbWVudHMsIHRoZSBsaXN0cyBvZiBub2RlcyBjb3JyZXNwb25kaW5nIHRvIGVhY2ggcG9kQWZmaW5pdHlUZXJtIGFyZSBpbnRlcnNlY3RlZCwgaS5lLiBhbGwgdGVybXMgbXVzdCBiZSBzYXRpc2ZpZWQuIiwiaXRlbXMiOnsiZGVzY3JpcHRpb24iOiJEZWZpbmVzIGEgc2V0IG9mIHBvZHMgKG5hbWVseSB0aG9zZSBtYXRjaGluZyB0aGUgbGFiZWxTZWxlY3RvciByZWxhdGl2ZSB0byB0aGUgZ2l2ZW4gbmFtZXNwYWNlKHMpKSB0aGF0IHRoaXMgcG9kIHNob3VsZCBiZSBjby1sb2NhdGVkIChhZmZpbml0eSkgb3Igbm90IGNvLWxvY2F0ZWQgKGFudGktYWZmaW5pdHkpIHdpdGgsIHdoZXJlIGNvLWxvY2F0ZWQgaXMgZGVmaW5lZCBhcyBydW5uaW5nIG9uIGEgbm9kZSB3aG9zZSB2YWx1ZSBvZiB0aGUgbGFiZWwgd2l0aCBrZXkgXHUwMDNjdG9wb2xvZ3lLZXlcdTAwM2UgbWF0Y2hlcyB0aGF0IG9mIGFueSBub2RlIG9uIHdoaWNoIGEgcG9kIG9mIHRoZSBzZXQgb2YgcG9kcyBpcyBydW5uaW5nIiwicHJvcGVydGllcyI6eyJsYWJlbFNlbGVjdG9yIjp7ImRlc2NyaXB0aW9uIjoiQSBsYWJlbCBxdWVyeSBvdmVyIGEgc2V0IG9mIHJlc291cmNlcywgaW4gdGhpcyBjYXNlIHBvZHMuIElmIGl0J3MgbnVsbCwgdGhpcyBQb2RBZmZpbml0eVRlcm0gbWF0Y2hlcyB3aXRoIG5vIFBvZHMuIiwicHJvcGVydGllcyI6eyJtYXRjaEV4cHJlc3Npb25zIjp7ImRlc2NyaXB0aW9uIjoibWF0Y2hFeHByZXNzaW9ucyBpcyBhIGxpc3Qgb2YgbGFiZWwgc2VsZWN0b3IgcmVxdWlyZW1lbnRzLiBUaGUgcmVxdWlyZW1lbnRzIGFyZSBBTkRlZC4iLCJpdGVtcyI6eyJkZXNjcmlwdGlvbiI6IkEgbGFiZWwgc2VsZWN0b3IgcmVxdWlyZW1lbnQgaXMgYSBzZWxlY3RvciB0aGF0IGNvbnRhaW5zIHZhbHVlcywgYSBrZXksIGFuZCBhbiBvcGVyYXRvciB0aGF0IHJlbGF0ZXMgdGhlIGtleSBhbmQgdmFsdWVzLiIsInByb3BlcnRpZXMiOnsia2V5Ijp7ImRlc2NyaXB0aW9uIjoia2V5IGlzIHRoZSBsYWJlbCBrZXkgdGhhdCB0aGUgc2VsZWN0b3IgYXBwbGllcyB0by4iLCJ0eXBlIjoic3RyaW5nIn0sIm9wZXJhdG9yIjp7ImRlc2NyaXB0aW9uIjoib3BlcmF0b3IgcmVwcmVzZW50cyBhIGtleSdzIHJlbGF0aW9uc2hpcCB0byBhIHNldCBvZiB2YWx1ZXMuIFZhbGlkIG9wZXJhdG9ycyBhcmUgSW4sIE5vdEluLCBFeGlzdHMgYW5kIERvZXNOb3RFeGlzdC4iLCJ0eXBlIjoic3RyaW5nIn0sInZhbHVlcyI6eyJkZXNjcmlwdGlvbiI6InZhbHVlcyBpcyBhbiBhcnJheSBvZiBzdHJpbmcgdmFsdWVzLiBJZiB0aGUgb3BlcmF0b3IgaXMgSW4gb3IgTm90SW4sIHRoZSB2YWx1ZXMgYXJyYXkgbXVzdCBiZSBub24tZW1wdHkuIElmIHRoZSBvcGVyYXRvciBpcyBFeGlzdHMgb3IgRG9lc05vdEV4aXN0LCB0aGUgdmFsdWVzIGFycmF5IG11c3QgYmUgZW1wdHkuIFRoaXMgYXJyYXkgaXMgcmVwbGFjZWQgZHVyaW5nIGEgc3RyYXRlZ2ljIG1lcmdlIHBhdGNoLiIsIml0ZW1zIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6ImFycmF5In19LCJyZXF1aXJlZCI6WyJrZXkiLCJvcGVyYXRvciJdLCJ0eXBlIjoib2JqZWN0In0sInR5cGUiOiJhcnJheSJ9LCJtYXRjaExhYmVscyI6eyJhZGRpdGlvbmFsUHJvcGVydGllcyI6eyJ0eXBlIjoic3RyaW5nIn0sImRlc2NyaXB0aW9uIjoibWF0Y2hMYWJlbHMgaXMgYSBtYXAgb2Yge2tleSx2YWx1ZX0gcGFpcnMuIEEgc2luZ2xlIHtrZXksdmFsdWV9IGluIHRoZSBtYXRjaExhYmVscyBtYXAgaXMgZXF1aXZhbGVudCB0byBhbiBlbGVtZW50IG9mIG1hdGNoRXhwcmVzc2lvbnMsIHdob3NlIGtleSBmaWVsZCBpcyBcImtleVwiLCB0aGUgb3BlcmF0b3IgaXMgXCJJblwiLCBhbmQgdGhlIHZhbHVlcyBhcnJheSBjb250YWlucyBvbmx5IFwidmFsdWVcIi4gVGhlIHJlcXVpcmVtZW50cyBhcmUgQU5EZWQuIiwidHlwZSI6Im9iamVjdCJ9fSwidHlwZSI6Im9iamVjdCIsIngta3ViZXJuZXRlcy1tYXAtdHlwZSI6ImF0b21pYyJ9LCJtYXRjaExhYmVsS2V5cyI6eyJkZXNjcmlwdGlvbiI6Ik1hdGNoTGFiZWxLZXlzIGlzIGEgc2V0IG9mIHBvZCBsYWJlbCBrZXlzIHRvIHNlbGVjdCB3aGljaCBwb2RzIHdpbGwgYmUgdGFrZW4gaW50byBjb25zaWRlcmF0aW9uLiBUaGUga2V5cyBhcmUgdXNlZCB0byBsb29rdXAgdmFsdWVzIGZyb20gdGhlIGluY29taW5nIHBvZCBsYWJlbHMsIHRob3NlIGtleS12YWx1ZSBsYWJlbHMgYXJlIG1lcmdlZCB3aXRoIGBMYWJlbFNlbGVjdG9yYCBhcyBga2V5IGluICh2YWx1ZSlgIHRvIHNlbGVjdCB0aGUgZ3JvdXAgb2YgZXhpc3RpbmcgcG9kcyB3aGljaCBwb2RzIHdpbGwgYmUgdGFrZW4gaW50byBjb25zaWRlcmF0aW9uIGZvciB0aGUgaW5jb21pbmcgcG9kJ3MgcG9kIChhbnRpKSBhZmZpbml0eS4gS2V5cyB0aGF0IGRvbid0IGV4aXN0IGluIHRoZSBpbmNvbWluZyBwb2QgbGFiZWxzIHdpbGwgYmUgaWdub3JlZC4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgZW1wdHkuIFRoZSBzYW1lIGtleSBpcyBmb3JiaWRkZW4gdG8gZXhpc3QgaW4gYm90aCBNYXRjaExhYmVsS2V5cyBhbmQgTGFiZWxTZWxlY3Rvci4gQWxzbywgTWF0Y2hMYWJlbEtleXMgY2Fubm90IGJlIHNldCB3aGVuIExhYmVsU2VsZWN0b3IgaXNuJ3Qgc2V0LiBUaGlzIGlzIGFuIGFscGhhIGZpZWxkIGFuZCByZXF1aXJlcyBlbmFibGluZyBNYXRjaExhYmVsS2V5c0luUG9kQWZmaW5pdHkgZmVhdHVyZSBnYXRlLiIsIml0ZW1zIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6ImFycmF5IiwieC1rdWJlcm5ldGVzLWxpc3QtdHlwZSI6ImF0b21pYyJ9LCJtaXNtYXRjaExhYmVsS2V5cyI6eyJkZXNjcmlwdGlvbiI6Ik1pc21hdGNoTGFiZWxLZXlzIGlzIGEgc2V0IG9mIHBvZCBsYWJlbCBrZXlzIHRvIHNlbGVjdCB3aGljaCBwb2RzIHdpbGwgYmUgdGFrZW4gaW50byBjb25zaWRlcmF0aW9uLiBUaGUga2V5cyBhcmUgdXNlZCB0byBsb29rdXAgdmFsdWVzIGZyb20gdGhlIGluY29taW5nIHBvZCBsYWJlbHMsIHRob3NlIGtleS12YWx1ZSBsYWJlbHMgYXJlIG1lcmdlZCB3aXRoIGBMYWJlbFNlbGVjdG9yYCBhcyBga2V5IG5vdGluICh2YWx1ZSlgIHRvIHNlbGVjdCB0aGUgZ3JvdXAgb2YgZXhpc3RpbmcgcG9kcyB3aGljaCBwb2RzIHdpbGwgYmUgdGFrZW4gaW50byBjb25zaWRlcmF0aW9uIGZvciB0aGUgaW5jb21pbmcgcG9kJ3MgcG9kIChhbnRpKSBhZmZpbml0eS4gS2V5cyB0aGF0IGRvbid0IGV4aXN0IGluIHRoZSBpbmNvbWluZyBwb2QgbGFiZWxzIHdpbGwgYmUgaWdub3JlZC4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgZW1wdHkuIFRoZSBzYW1lIGtleSBpcyBmb3JiaWRkZW4gdG8gZXhpc3QgaW4gYm90aCBNaXNtYXRjaExhYmVsS2V5cyBhbmQgTGFiZWxTZWxlY3Rvci4gQWxzbywgTWlzbWF0Y2hMYWJlbEtleXMgY2Fubm90IGJlIHNldCB3aGVuIExhYmVsU2VsZWN0b3IgaXNuJ3Qgc2V0LiBUaGlzIGlzIGFuIGFscGhhIGZpZWxkIGFuZCByZXF1aXJlcyBlbmFibGluZyBNYXRjaExhYmVsS2V5c0luUG9kQWZmaW5pdHkgZmVhdHVyZSBnYXRlLiIsIml0ZW1zIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6ImFycmF5IiwieC1rdWJlcm5ldGVzLWxpc3QtdHlwZSI6ImF0b21pYyJ9LCJuYW1lc3BhY2VTZWxlY3RvciI6eyJkZXNjcmlwdGlvbiI6IkEgbGFiZWwgcXVlcnkgb3ZlciB0aGUgc2V0IG9mIG5hbWVzcGFjZXMgdGhhdCB0aGUgdGVybSBhcHBsaWVzIHRvLiBUaGUgdGVybSBpcyBhcHBsaWVkIHRvIHRoZSB1bmlvbiBvZiB0aGUgbmFtZXNwYWNlcyBzZWxlY3RlZCBieSB0aGlzIGZpZWxkIGFuZCB0aGUgb25lcyBsaXN0ZWQgaW4gdGhlIG5hbWVzcGFjZXMgZmllbGQuIG51bGwgc2VsZWN0b3IgYW5kIG51bGwgb3IgZW1wdHkgbmFtZXNwYWNlcyBsaXN0IG1lYW5zIFwidGhpcyBwb2QncyBuYW1lc3BhY2VcIi4gQW4gZW1wdHkgc2VsZWN0b3IgKHt9KSBtYXRjaGVzIGFsbCBuYW1lc3BhY2VzLiIsInByb3BlcnRpZXMiOnsibWF0Y2hFeHByZXNzaW9ucyI6eyJkZXNjcmlwdGlvbiI6Im1hdGNoRXhwcmVzc2lvbnMgaXMgYSBsaXN0IG9mIGxhYmVsIHNlbGVjdG9yIHJlcXVpcmVtZW50cy4gVGhlIHJlcXVpcmVtZW50cyBhcmUgQU5EZWQuIiwiaXRlbXMiOnsiZGVzY3JpcHRpb24iOiJBIGxhYmVsIHNlbGVjdG9yIHJlcXVpcmVtZW50IGlzIGEgc2VsZWN0b3IgdGhhdCBjb250YWlucyB2YWx1ZXMsIGEga2V5LCBhbmQgYW4gb3BlcmF0b3IgdGhhdCByZWxhdGVzIHRoZSBrZXkgYW5kIHZhbHVlcy4iLCJwcm9wZXJ0aWVzIjp7ImtleSI6eyJkZXNjcmlwdGlvbiI6ImtleSBpcyB0aGUgbGFiZWwga2V5IHRoYXQgdGhlIHNlbGVjdG9yIGFwcGxpZXMgdG8uIiwidHlwZSI6InN0cmluZyJ9LCJvcGVyYXRvciI6eyJkZXNjcmlwdGlvbiI6Im9wZXJhdG9yIHJlcHJlc2VudHMgYSBrZXkncyByZWxhdGlvbnNoaXAgdG8gYSBzZXQgb2YgdmFsdWVzLiBWYWxpZCBvcGVyYXRvcnMgYXJlIEluLCBOb3RJbiwgRXhpc3RzIGFuZCBEb2VzTm90RXhpc3QuIiwidHlwZSI6InN0cmluZyJ9LCJ2YWx1ZXMiOnsiZGVzY3JpcHRpb24iOiJ2YWx1ZXMgaXMgYW4gYXJyYXkgb2Ygc3RyaW5nIHZhbHVlcy4gSWYgdGhlIG9wZXJhdG9yIGlzIEluIG9yIE5vdEluLCB0aGUgdmFsdWVzIGFycmF5IG11c3QgYmUgbm9uLWVtcHR5LiBJZiB0aGUgb3BlcmF0b3IgaXMgRXhpc3RzIG9yIERvZXNOb3RFeGlzdCwgdGhlIHZhbHVlcyBhcnJheSBtdXN0IGJlIGVtcHR5LiBUaGlzIGFycmF5IGlzIHJlcGxhY2VkIGR1cmluZyBhIHN0cmF0ZWdpYyBtZXJnZSBwYXRjaC4iLCJpdGVtcyI6eyJ0eXBlIjoic3RyaW5nIn0sInR5cGUiOiJhcnJheSJ9fSwicmVxdWlyZWQiOlsia2V5Iiwib3BlcmF0b3IiXSwidHlwZSI6Im9iamVjdCJ9LCJ0eXBlIjoiYXJyYXkifSwibWF0Y2hMYWJlbHMiOnsiYWRkaXRpb25hbFByb3BlcnRpZXMiOnsidHlwZSI6InN0cmluZyJ9LCJkZXNjcmlwdGlvbiI6Im1hdGNoTGFiZWxzIGlzIGEgbWFwIG9mIHtrZXksdmFsdWV9IHBhaXJzLiBBIHNpbmdsZSB7a2V5LHZhbHVlfSBpbiB0aGUgbWF0Y2hMYWJlbHMgbWFwIGlzIGVxdWl2YWxlbnQgdG8gYW4gZWxlbWVudCBvZiBtYXRjaEV4cHJlc3Npb25zLCB3aG9zZSBrZXkgZmllbGQgaXMgXCJrZXlcIiwgdGhlIG9wZXJhdG9yIGlzIFwiSW5cIiwgYW5kIHRoZSB2YWx1ZXMgYXJyYXkgY29udGFpbnMgb25seSBcInZhbHVlXCIuIFRoZSByZXF1aXJlbWVudHMgYXJlIEFORGVkLiIsInR5cGUiOiJvYmplY3QifX0sInR5cGUiOiJvYmplY3QiLCJ4LWt1YmVybmV0ZXMtbWFwLXR5cGUiOiJhdG9taWMifSwibmFtZXNwYWNlcyI6eyJkZXNjcmlwdGlvbiI6Im5hbWVzcGFjZXMgc3BlY2lmaWVzIGEgc3RhdGljIGxpc3Qgb2YgbmFtZXNwYWNlIG5hbWVzIHRoYXQgdGhlIHRlcm0gYXBwbGllcyB0by4gVGhlIHRlcm0gaXMgYXBwbGllZCB0byB0aGUgdW5pb24gb2YgdGhlIG5hbWVzcGFjZXMgbGlzdGVkIGluIHRoaXMgZmllbGQgYW5kIHRoZSBvbmVzIHNlbGVjdGVkIGJ5IG5hbWVzcGFjZVNlbGVjdG9yLiBudWxsIG9yIGVtcHR5IG5hbWVzcGFjZXMgbGlzdCBhbmQgbnVsbCBuYW1lc3BhY2VTZWxlY3RvciBtZWFucyBcInRoaXMgcG9kJ3MgbmFtZXNwYWNlXCIuIiwiaXRlbXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjoiYXJyYXkifSwidG9wb2xvZ3lLZXkiOnsiZGVzY3JpcHRpb24iOiJUaGlzIHBvZCBzaG91bGQgYmUgY28tbG9jYXRlZCAoYWZmaW5pdHkpIG9yIG5vdCBjby1sb2NhdGVkIChhbnRpLWFmZmluaXR5KSB3aXRoIHRoZSBwb2RzIG1hdGNoaW5nIHRoZSBsYWJlbFNlbGVjdG9yIGluIHRoZSBzcGVjaWZpZWQgbmFtZXNwYWNlcywgd2hlcmUgY28tbG9jYXRlZCBpcyBkZWZpbmVkIGFzIHJ1bm5pbmcgb24gYSBub2RlIHdob3NlIHZhbHVlIG9mIHRoZSBsYWJlbCB3aXRoIGtleSB0b3BvbG9neUtleSBtYXRjaGVzIHRoYXQgb2YgYW55IG5vZGUgb24gd2hpY2ggYW55IG9mIHRoZSBzZWxlY3RlZCBwb2RzIGlzIHJ1bm5pbmcuIEVtcHR5IHRvcG9sb2d5S2V5IGlzIG5vdCBhbGxvd2VkLiIsInR5cGUiOiJzdHJpbmcifX0sInJlcXVpcmVkIjpbInRvcG9sb2d5S2V5Il0sInR5cGUiOiJvYmplY3QifSwidHlwZSI6ImFycmF5In19LCJ0eXBlIjoib2JqZWN0In0sInBvZEFudGlBZmZpbml0eSI6eyJkZXNjcmlwdGlvbiI6IlBvZEFudGlBZmZpbml0eSBpcyBhIGdyb3VwIG9mIGludGVyIHBvZCBhbnRpIGFmZmluaXR5IHNjaGVkdWxpbmcgcnVsZXMiLCJwcm9wZXJ0aWVzIjp7InByZWZlcnJlZER1cmluZ1NjaGVkdWxpbmdJZ25vcmVkRHVyaW5nRXhlY3V0aW9uIjp7ImRlc2NyaXB0aW9uIjoiVGhlIHNjaGVkdWxlciB3aWxsIHByZWZlciB0byBzY2hlZHVsZSBwb2RzIHRvIG5vZGVzIHRoYXQgc2F0aXNmeSB0aGUgYW50aS1hZmZpbml0eSBleHByZXNzaW9ucyBzcGVjaWZpZWQgYnkgdGhpcyBmaWVsZCwgYnV0IGl0IG1heSBjaG9vc2UgYSBub2RlIHRoYXQgdmlvbGF0ZXMgb25lIG9yIG1vcmUgb2YgdGhlIGV4cHJlc3Npb25zLiBUaGUgbm9kZSB0aGF0IGlzIG1vc3QgcHJlZmVycmVkIGlzIHRoZSBvbmUgd2l0aCB0aGUgZ3JlYXRlc3Qgc3VtIG9mIHdlaWdodHMsIGkuZS4gZm9yIGVhY2ggbm9kZSB0aGF0IG1lZXRzIGFsbCBvZiB0aGUgc2NoZWR1bGluZyByZXF1aXJlbWVudHMgKHJlc291cmNlIHJlcXVlc3QsIHJlcXVpcmVkRHVyaW5nU2NoZWR1bGluZyBhbnRpLWFmZmluaXR5IGV4cHJlc3Npb25zLCBldGMuKSwgY29tcHV0ZSBhIHN1bSBieSBpdGVyYXRpbmcgdGhyb3VnaCB0aGUgZWxlbWVudHMgb2YgdGhpcyBmaWVsZCBhbmQgYWRkaW5nIFwid2VpZ2h0XCIgdG8gdGhlIHN1bSBpZiB0aGUgbm9kZSBoYXMgcG9kcyB3aGljaCBtYXRjaGVzIHRoZSBjb3JyZXNwb25kaW5nIHBvZEFmZmluaXR5VGVybTsgdGhlIG5vZGUocykgd2l0aCB0aGUgaGlnaGVzdCBzdW0gYXJlIHRoZSBtb3N0IHByZWZlcnJlZC4iLCJpdGVtcyI6eyJkZXNjcmlwdGlvbiI6IlRoZSB3ZWlnaHRzIG9mIGFsbCBvZiB0aGUgbWF0Y2hlZCBXZWlnaHRlZFBvZEFmZmluaXR5VGVybSBmaWVsZHMgYXJlIGFkZGVkIHBlci1ub2RlIHRvIGZpbmQgdGhlIG1vc3QgcHJlZmVycmVkIG5vZGUocykiLCJwcm9wZXJ0aWVzIjp7InBvZEFmZmluaXR5VGVybSI6eyJkZXNjcmlwdGlvbiI6IlJlcXVpcmVkLiBBIHBvZCBhZmZpbml0eSB0ZXJtLCBhc3NvY2lhdGVkIHdpdGggdGhlIGNvcnJlc3BvbmRpbmcgd2VpZ2h0LiIsInByb3BlcnRpZXMiOnsibGFiZWxTZWxlY3RvciI6eyJkZXNjcmlwdGlvbiI6IkEgbGFiZWwgcXVlcnkgb3ZlciBhIHNldCBvZiByZXNvdXJjZXMsIGluIHRoaXMgY2FzZSBwb2RzLiBJZiBpdCdzIG51bGwsIHRoaXMgUG9kQWZmaW5pdHlUZXJtIG1hdGNoZXMgd2l0aCBubyBQb2RzLiIsInByb3BlcnRpZXMiOnsibWF0Y2hFeHByZXNzaW9ucyI6eyJkZXNjcmlwdGlvbiI6Im1hdGNoRXhwcmVzc2lvbnMgaXMgYSBsaXN0IG9mIGxhYmVsIHNlbGVjdG9yIHJlcXVpcmVtZW50cy4gVGhlIHJlcXVpcmVtZW50cyBhcmUgQU5EZWQuIiwiaXRlbXMiOnsiZGVzY3JpcHRpb24iOiJBIGxhYmVsIHNlbGVjdG9yIHJlcXVpcmVtZW50IGlzIGEgc2VsZWN0b3IgdGhhdCBjb250YWlucyB2YWx1ZXMsIGEga2V5LCBhbmQgYW4gb3BlcmF0b3IgdGhhdCByZWxhdGVzIHRoZSBrZXkgYW5kIHZhbHVlcy4iLCJwcm9wZXJ0aWVzIjp7ImtleSI6eyJkZXNjcmlwdGlvbiI6ImtleSBpcyB0aGUgbGFiZWwga2V5IHRoYXQgdGhlIHNlbGVjdG9yIGFwcGxpZXMgdG8uIiwidHlwZSI6InN0cmluZyJ9LCJvcGVyYXRvciI6eyJkZXNjcmlwdGlvbiI6Im9wZXJhdG9yIHJlcHJlc2VudHMgYSBrZXkncyByZWxhdGlvbnNoaXAgdG8gYSBzZXQgb2YgdmFsdWVzLiBWYWxpZCBvcGVyYXRvcnMgYXJlIEluLCBOb3RJbiwgRXhpc3RzIGFuZCBEb2VzTm90RXhpc3QuIiwidHlwZSI6InN0cmluZyJ9LCJ2YWx1ZXMiOnsiZGVzY3JpcHRpb24iOiJ2YWx1ZXMgaXMgYW4gYXJyYXkgb2Ygc3RyaW5nIHZhbHVlcy4gSWYgdGhlIG9wZXJhdG9yIGlzIEluIG9yIE5vdEluLCB0aGUgdmFsdWVzIGFycmF5IG11c3QgYmUgbm9uLWVtcHR5LiBJZiB0aGUgb3BlcmF0b3IgaXMgRXhpc3RzIG9yIERvZXNOb3RFeGlzdCwgdGhlIHZhbHVlcyBhcnJheSBtdXN0IGJlIGVtcHR5LiBUaGlzIGFycmF5IGlzIHJlcGxhY2VkIGR1cmluZyBhIHN0cmF0ZWdpYyBtZXJnZSBwYXRjaC4iLCJpdGVtcyI6eyJ0eXBlIjoic3RyaW5nIn0sInR5cGUiOiJhcnJheSJ9fSwicmVxdWlyZWQiOlsia2V5Iiwib3BlcmF0b3IiXSwidHlwZSI6Im9iamVjdCJ9LCJ0eXBlIjoiYXJyYXkifSwibWF0Y2hMYWJlbHMiOnsiYWRkaXRpb25hbFByb3BlcnRpZXMiOnsidHlwZSI6InN0cmluZyJ9LCJkZXNjcmlwdGlvbiI6Im1hdGNoTGFiZWxzIGlzIGEgbWFwIG9mIHtrZXksdmFsdWV9IHBhaXJzLiBBIHNpbmdsZSB7a2V5LHZhbHVlfSBpbiB0aGUgbWF0Y2hMYWJlbHMgbWFwIGlzIGVxdWl2YWxlbnQgdG8gYW4gZWxlbWVudCBvZiBtYXRjaEV4cHJlc3Npb25zLCB3aG9zZSBrZXkgZmllbGQgaXMgXCJrZXlcIiwgdGhlIG9wZXJhdG9yIGlzIFwiSW5cIiwgYW5kIHRoZSB2YWx1ZXMgYXJyYXkgY29udGFpbnMgb25seSBcInZhbHVlXCIuIFRoZSByZXF1aXJlbWVudHMgYXJlIEFORGVkLiIsInR5cGUiOiJvYmplY3QifX0sInR5cGUiOiJvYmplY3QiLCJ4LWt1YmVybmV0ZXMtbWFwLXR5cGUiOiJhdG9taWMifSwibWF0Y2hMYWJlbEtleXMiOnsiZGVzY3JpcHRpb24iOiJNYXRjaExhYmVsS2V5cyBpcyBhIHNldCBvZiBwb2QgbGFiZWwga2V5cyB0byBzZWxlY3Qgd2hpY2ggcG9kcyB3aWxsIGJlIHRha2VuIGludG8gY29uc2lkZXJhdGlvbi4gVGhlIGtleXMgYXJlIHVzZWQgdG8gbG9va3VwIHZhbHVlcyBmcm9tIHRoZSBpbmNvbWluZyBwb2QgbGFiZWxzLCB0aG9zZSBrZXktdmFsdWUgbGFiZWxzIGFyZSBtZXJnZWQgd2l0aCBgTGFiZWxTZWxlY3RvcmAgYXMgYGtleSBpbiAodmFsdWUpYCB0byBzZWxlY3QgdGhlIGdyb3VwIG9mIGV4aXN0aW5nIHBvZHMgd2hpY2ggcG9kcyB3aWxsIGJlIHRha2VuIGludG8gY29uc2lkZXJhdGlvbiBmb3IgdGhlIGluY29taW5nIHBvZCdzIHBvZCAoYW50aSkgYWZmaW5pdHkuIEtleXMgdGhhdCBkb24ndCBleGlzdCBpbiB0aGUgaW5jb21pbmcgcG9kIGxhYmVscyB3aWxsIGJlIGlnbm9yZWQuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGVtcHR5LiBUaGUgc2FtZSBrZXkgaXMgZm9yYmlkZGVuIHRvIGV4aXN0IGluIGJvdGggTWF0Y2hMYWJlbEtleXMgYW5kIExhYmVsU2VsZWN0b3IuIEFsc28sIE1hdGNoTGFiZWxLZXlzIGNhbm5vdCBiZSBzZXQgd2hlbiBMYWJlbFNlbGVjdG9yIGlzbid0IHNldC4gVGhpcyBpcyBhbiBhbHBoYSBmaWVsZCBhbmQgcmVxdWlyZXMgZW5hYmxpbmcgTWF0Y2hMYWJlbEtleXNJblBvZEFmZmluaXR5IGZlYXR1cmUgZ2F0ZS4iLCJpdGVtcyI6eyJ0eXBlIjoic3RyaW5nIn0sInR5cGUiOiJhcnJheSIsIngta3ViZXJuZXRlcy1saXN0LXR5cGUiOiJhdG9taWMifSwibWlzbWF0Y2hMYWJlbEtleXMiOnsiZGVzY3JpcHRpb24iOiJNaXNtYXRjaExhYmVsS2V5cyBpcyBhIHNldCBvZiBwb2QgbGFiZWwga2V5cyB0byBzZWxlY3Qgd2hpY2ggcG9kcyB3aWxsIGJlIHRha2VuIGludG8gY29uc2lkZXJhdGlvbi4gVGhlIGtleXMgYXJlIHVzZWQgdG8gbG9va3VwIHZhbHVlcyBmcm9tIHRoZSBpbmNvbWluZyBwb2QgbGFiZWxzLCB0aG9zZSBrZXktdmFsdWUgbGFiZWxzIGFyZSBtZXJnZWQgd2l0aCBgTGFiZWxTZWxlY3RvcmAgYXMgYGtleSBub3RpbiAodmFsdWUpYCB0byBzZWxlY3QgdGhlIGdyb3VwIG9mIGV4aXN0aW5nIHBvZHMgd2hpY2ggcG9kcyB3aWxsIGJlIHRha2VuIGludG8gY29uc2lkZXJhdGlvbiBmb3IgdGhlIGluY29taW5nIHBvZCdzIHBvZCAoYW50aSkgYWZmaW5pdHkuIEtleXMgdGhhdCBkb24ndCBleGlzdCBpbiB0aGUgaW5jb21pbmcgcG9kIGxhYmVscyB3aWxsIGJlIGlnbm9yZWQuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGVtcHR5LiBUaGUgc2FtZSBrZXkgaXMgZm9yYmlkZGVuIHRvIGV4aXN0IGluIGJvdGggTWlzbWF0Y2hMYWJlbEtleXMgYW5kIExhYmVsU2VsZWN0b3IuIEFsc28sIE1pc21hdGNoTGFiZWxLZXlzIGNhbm5vdCBiZSBzZXQgd2hlbiBMYWJlbFNlbGVjdG9yIGlzbid0IHNldC4gVGhpcyBpcyBhbiBhbHBoYSBmaWVsZCBhbmQgcmVxdWlyZXMgZW5hYmxpbmcgTWF0Y2hMYWJlbEtleXNJblBvZEFmZmluaXR5IGZlYXR1cmUgZ2F0ZS4iLCJpdGVtcyI6eyJ0eXBlIjoic3RyaW5nIn0sInR5cGUiOiJhcnJheSIsIngta3ViZXJuZXRlcy1saXN0LXR5cGUiOiJhdG9taWMifSwibmFtZXNwYWNlU2VsZWN0b3IiOnsiZGVzY3JpcHRpb24iOiJBIGxhYmVsIHF1ZXJ5IG92ZXIgdGhlIHNldCBvZiBuYW1lc3BhY2VzIHRoYXQgdGhlIHRlcm0gYXBwbGllcyB0by4gVGhlIHRlcm0gaXMgYXBwbGllZCB0byB0aGUgdW5pb24gb2YgdGhlIG5hbWVzcGFjZXMgc2VsZWN0ZWQgYnkgdGhpcyBmaWVsZCBhbmQgdGhlIG9uZXMgbGlzdGVkIGluIHRoZSBuYW1lc3BhY2VzIGZpZWxkLiBudWxsIHNlbGVjdG9yIGFuZCBudWxsIG9yIGVtcHR5IG5hbWVzcGFjZXMgbGlzdCBtZWFucyBcInRoaXMgcG9kJ3MgbmFtZXNwYWNlXCIuIEFuIGVtcHR5IHNlbGVjdG9yICh7fSkgbWF0Y2hlcyBhbGwgbmFtZXNwYWNlcy4iLCJwcm9wZXJ0aWVzIjp7Im1hdGNoRXhwcmVzc2lvbnMiOnsiZGVzY3JpcHRpb24iOiJtYXRjaEV4cHJlc3Npb25zIGlzIGEgbGlzdCBvZiBsYWJlbCBzZWxlY3RvciByZXF1aXJlbWVudHMuIFRoZSByZXF1aXJlbWVudHMgYXJlIEFORGVkLiIsIml0ZW1zIjp7ImRlc2NyaXB0aW9uIjoiQSBsYWJlbCBzZWxlY3RvciByZXF1aXJlbWVudCBpcyBhIHNlbGVjdG9yIHRoYXQgY29udGFpbnMgdmFsdWVzLCBhIGtleSwgYW5kIGFuIG9wZXJhdG9yIHRoYXQgcmVsYXRlcyB0aGUga2V5IGFuZCB2YWx1ZXMuIiwicHJvcGVydGllcyI6eyJrZXkiOnsiZGVzY3JpcHRpb24iOiJrZXkgaXMgdGhlIGxhYmVsIGtleSB0aGF0IHRoZSBzZWxlY3RvciBhcHBsaWVzIHRvLiIsInR5cGUiOiJzdHJpbmcifSwib3BlcmF0b3IiOnsiZGVzY3JpcHRpb24iOiJvcGVyYXRvciByZXByZXNlbnRzIGEga2V5J3MgcmVsYXRpb25zaGlwIHRvIGEgc2V0IG9mIHZhbHVlcy4gVmFsaWQgb3BlcmF0b3JzIGFyZSBJbiwgTm90SW4sIEV4aXN0cyBhbmQgRG9lc05vdEV4aXN0LiIsInR5cGUiOiJzdHJpbmcifSwidmFsdWVzIjp7ImRlc2NyaXB0aW9uIjoidmFsdWVzIGlzIGFuIGFycmF5IG9mIHN0cmluZyB2YWx1ZXMuIElmIHRoZSBvcGVyYXRvciBpcyBJbiBvciBOb3RJbiwgdGhlIHZhbHVlcyBhcnJheSBtdXN0IGJlIG5vbi1lbXB0eS4gSWYgdGhlIG9wZXJhdG9yIGlzIEV4aXN0cyBvciBEb2VzTm90RXhpc3QsIHRoZSB2YWx1ZXMgYXJyYXkgbXVzdCBiZSBlbXB0eS4gVGhpcyBhcnJheSBpcyByZXBsYWNlZCBkdXJpbmcgYSBzdHJhdGVnaWMgbWVyZ2UgcGF0Y2guIiwiaXRlbXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjoiYXJyYXkifX0sInJlcXVpcmVkIjpbImtleSIsIm9wZXJhdG9yIl0sInR5cGUiOiJvYmplY3QifSwidHlwZSI6ImFycmF5In0sIm1hdGNoTGFiZWxzIjp7ImFkZGl0aW9uYWxQcm9wZXJ0aWVzIjp7InR5cGUiOiJzdHJpbmcifSwiZGVzY3JpcHRpb24iOiJtYXRjaExhYmVscyBpcyBhIG1hcCBvZiB7a2V5LHZhbHVlfSBwYWlycy4gQSBzaW5nbGUge2tleSx2YWx1ZX0gaW4gdGhlIG1hdGNoTGFiZWxzIG1hcCBpcyBlcXVpdmFsZW50IHRvIGFuIGVsZW1lbnQgb2YgbWF0Y2hFeHByZXNzaW9ucywgd2hvc2Uga2V5IGZpZWxkIGlzIFwia2V5XCIsIHRoZSBvcGVyYXRvciBpcyBcIkluXCIsIGFuZCB0aGUgdmFsdWVzIGFycmF5IGNvbnRhaW5zIG9ubHkgXCJ2YWx1ZVwiLiBUaGUgcmVxdWlyZW1lbnRzIGFyZSBBTkRlZC4iLCJ0eXBlIjoib2JqZWN0In19LCJ0eXBlIjoib2JqZWN0IiwieC1rdWJlcm5ldGVzLW1hcC10eXBlIjoiYXRvbWljIn0sIm5hbWVzcGFjZXMiOnsiZGVzY3JpcHRpb24iOiJuYW1lc3BhY2VzIHNwZWNpZmllcyBhIHN0YXRpYyBsaXN0IG9mIG5hbWVzcGFjZSBuYW1lcyB0aGF0IHRoZSB0ZXJtIGFwcGxpZXMgdG8uIFRoZSB0ZXJtIGlzIGFwcGxpZWQgdG8gdGhlIHVuaW9uIG9mIHRoZSBuYW1lc3BhY2VzIGxpc3RlZCBpbiB0aGlzIGZpZWxkIGFuZCB0aGUgb25lcyBzZWxlY3RlZCBieSBuYW1lc3BhY2VTZWxlY3Rvci4gbnVsbCBvciBlbXB0eSBuYW1lc3BhY2VzIGxpc3QgYW5kIG51bGwgbmFtZXNwYWNlU2VsZWN0b3IgbWVhbnMgXCJ0aGlzIHBvZCdzIG5hbWVzcGFjZVwiLiIsIml0ZW1zIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6ImFycmF5In0sInRvcG9sb2d5S2V5Ijp7ImRlc2NyaXB0aW9uIjoiVGhpcyBwb2Qgc2hvdWxkIGJlIGNvLWxvY2F0ZWQgKGFmZmluaXR5KSBvciBub3QgY28tbG9jYXRlZCAoYW50aS1hZmZpbml0eSkgd2l0aCB0aGUgcG9kcyBtYXRjaGluZyB0aGUgbGFiZWxTZWxlY3RvciBpbiB0aGUgc3BlY2lmaWVkIG5hbWVzcGFjZXMsIHdoZXJlIGNvLWxvY2F0ZWQgaXMgZGVmaW5lZCBhcyBydW5uaW5nIG9uIGEgbm9kZSB3aG9zZSB2YWx1ZSBvZiB0aGUgbGFiZWwgd2l0aCBrZXkgdG9wb2xvZ3lLZXkgbWF0Y2hlcyB0aGF0IG9mIGFueSBub2RlIG9uIHdoaWNoIGFueSBvZiB0aGUgc2VsZWN0ZWQgcG9kcyBpcyBydW5uaW5nLiBFbXB0eSB0b3BvbG9neUtleSBpcyBub3QgYWxsb3dlZC4iLCJ0eXBlIjoic3RyaW5nIn19LCJyZXF1aXJlZCI6WyJ0b3BvbG9neUtleSJdLCJ0eXBlIjoib2JqZWN0In0sIndlaWdodCI6eyJkZXNjcmlwdGlvbiI6IndlaWdodCBhc3NvY2lhdGVkIHdpdGggbWF0Y2hpbmcgdGhlIGNvcnJlc3BvbmRpbmcgcG9kQWZmaW5pdHlUZXJtLCBpbiB0aGUgcmFuZ2UgMS0xMDAuIiwiZm9ybWF0IjoiaW50MzIiLCJ0eXBlIjoiaW50ZWdlciJ9fSwicmVxdWlyZWQiOlsicG9kQWZmaW5pdHlUZXJtIiwid2VpZ2h0Il0sInR5cGUiOiJvYmplY3QifSwidHlwZSI6ImFycmF5In0sInJlcXVpcmVkRHVyaW5nU2NoZWR1bGluZ0lnbm9yZWREdXJpbmdFeGVjdXRpb24iOnsiZGVzY3JpcHRpb24iOiJJZiB0aGUgYW50aS1hZmZpbml0eSByZXF1aXJlbWVudHMgc3BlY2lmaWVkIGJ5IHRoaXMgZmllbGQgYXJlIG5vdCBtZXQgYXQgc2NoZWR1bGluZyB0aW1lLCB0aGUgcG9kIHdpbGwgbm90IGJlIHNjaGVkdWxlZCBvbnRvIHRoZSBub2RlLiBJZiB0aGUgYW50aS1hZmZpbml0eSByZXF1aXJlbWVudHMgc3BlY2lmaWVkIGJ5IHRoaXMgZmllbGQgY2Vhc2UgdG8gYmUgbWV0IGF0IHNvbWUgcG9pbnQgZHVyaW5nIHBvZCBleGVjdXRpb24gKGUuZy4gZHVlIHRvIGEgcG9kIGxhYmVsIHVwZGF0ZSksIHRoZSBzeXN0ZW0gbWF5IG9yIG1heSBub3QgdHJ5IHRvIGV2ZW50dWFsbHkgZXZpY3QgdGhlIHBvZCBmcm9tIGl0cyBub2RlLiBXaGVuIHRoZXJlIGFyZSBtdWx0aXBsZSBlbGVtZW50cywgdGhlIGxpc3RzIG9mIG5vZGVzIGNvcnJlc3BvbmRpbmcgdG8gZWFjaCBwb2RBZmZpbml0eVRlcm0gYXJlIGludGVyc2VjdGVkLCBpLmUuIGFsbCB0ZXJtcyBtdXN0IGJlIHNhdGlzZmllZC4iLCJpdGVtcyI6eyJkZXNjcmlwdGlvbiI6IkRlZmluZXMgYSBzZXQgb2YgcG9kcyAobmFtZWx5IHRob3NlIG1hdGNoaW5nIHRoZSBsYWJlbFNlbGVjdG9yIHJlbGF0aXZlIHRvIHRoZSBnaXZlbiBuYW1lc3BhY2UocykpIHRoYXQgdGhpcyBwb2Qgc2hvdWxkIGJlIGNvLWxvY2F0ZWQgKGFmZmluaXR5KSBvciBub3QgY28tbG9jYXRlZCAoYW50aS1hZmZpbml0eSkgd2l0aCwgd2hlcmUgY28tbG9jYXRlZCBpcyBkZWZpbmVkIGFzIHJ1bm5pbmcgb24gYSBub2RlIHdob3NlIHZhbHVlIG9mIHRoZSBsYWJlbCB3aXRoIGtleSBcdTAwM2N0b3BvbG9neUtleVx1MDAzZSBtYXRjaGVzIHRoYXQgb2YgYW55IG5vZGUgb24gd2hpY2ggYSBwb2Qgb2YgdGhlIHNldCBvZiBwb2RzIGlzIHJ1bm5pbmciLCJwcm9wZXJ0aWVzIjp7ImxhYmVsU2VsZWN0b3IiOnsiZGVzY3JpcHRpb24iOiJBIGxhYmVsIHF1ZXJ5IG92ZXIgYSBzZXQgb2YgcmVzb3VyY2VzLCBpbiB0aGlzIGNhc2UgcG9kcy4gSWYgaXQncyBudWxsLCB0aGlzIFBvZEFmZmluaXR5VGVybSBtYXRjaGVzIHdpdGggbm8gUG9kcy4iLCJwcm9wZXJ0aWVzIjp7Im1hdGNoRXhwcmVzc2lvbnMiOnsiZGVzY3JpcHRpb24iOiJtYXRjaEV4cHJlc3Npb25zIGlzIGEgbGlzdCBvZiBsYWJlbCBzZWxlY3RvciByZXF1aXJlbWVudHMuIFRoZSByZXF1aXJlbWVudHMgYXJlIEFORGVkLiIsIml0ZW1zIjp7ImRlc2NyaXB0aW9uIjoiQSBsYWJlbCBzZWxlY3RvciByZXF1aXJlbWVudCBpcyBhIHNlbGVjdG9yIHRoYXQgY29udGFpbnMgdmFsdWVzLCBhIGtleSwgYW5kIGFuIG9wZXJhdG9yIHRoYXQgcmVsYXRlcyB0aGUga2V5IGFuZCB2YWx1ZXMuIiwicHJvcGVydGllcyI6eyJrZXkiOnsiZGVzY3JpcHRpb24iOiJrZXkgaXMgdGhlIGxhYmVsIGtleSB0aGF0IHRoZSBzZWxlY3RvciBhcHBsaWVzIHRvLiIsInR5cGUiOiJzdHJpbmcifSwib3BlcmF0b3IiOnsiZGVzY3JpcHRpb24iOiJvcGVyYXRvciByZXByZXNlbnRzIGEga2V5J3MgcmVsYXRpb25zaGlwIHRvIGEgc2V0IG9mIHZhbHVlcy4gVmFsaWQgb3BlcmF0b3JzIGFyZSBJbiwgTm90SW4sIEV4aXN0cyBhbmQgRG9lc05vdEV4aXN0LiIsInR5cGUiOiJzdHJpbmcifSwidmFsdWVzIjp7ImRlc2NyaXB0aW9uIjoidmFsdWVzIGlzIGFuIGFycmF5IG9mIHN0cmluZyB2YWx1ZXMuIElmIHRoZSBvcGVyYXRvciBpcyBJbiBvciBOb3RJbiwgdGhlIHZhbHVlcyBhcnJheSBtdXN0IGJlIG5vbi1lbXB0eS4gSWYgdGhlIG9wZXJhdG9yIGlzIEV4aXN0cyBvciBEb2VzTm90RXhpc3QsIHRoZSB2YWx1ZXMgYXJyYXkgbXVzdCBiZSBlbXB0eS4gVGhpcyBhcnJheSBpcyByZXBsYWNlZCBkdXJpbmcgYSBzdHJhdGVnaWMgbWVyZ2UgcGF0Y2guIiwiaXRlbXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjoiYXJyYXkifX0sInJlcXVpcmVkIjpbImtleSIsIm9wZXJhdG9yIl0sInR5cGUiOiJvYmplY3QifSwidHlwZSI6ImFycmF5In0sIm1hdGNoTGFiZWxzIjp7ImFkZGl0aW9uYWxQcm9wZXJ0aWVzIjp7InR5cGUiOiJzdHJpbmcifSwiZGVzY3JpcHRpb24iOiJtYXRjaExhYmVscyBpcyBhIG1hcCBvZiB7a2V5LHZhbHVlfSBwYWlycy4gQSBzaW5nbGUge2tleSx2YWx1ZX0gaW4gdGhlIG1hdGNoTGFiZWxzIG1hcCBpcyBlcXVpdmFsZW50IHRvIGFuIGVsZW1lbnQgb2YgbWF0Y2hFeHByZXNzaW9ucywgd2hvc2Uga2V5IGZpZWxkIGlzIFwia2V5XCIsIHRoZSBvcGVyYXRvciBpcyBcIkluXCIsIGFuZCB0aGUgdmFsdWVzIGFycmF5IGNvbnRhaW5zIG9ubHkgXCJ2YWx1ZVwiLiBUaGUgcmVxdWlyZW1lbnRzIGFyZSBBTkRlZC4iLCJ0eXBlIjoib2JqZWN0In19LCJ0eXBlIjoib2JqZWN0IiwieC1rdWJlcm5ldGVzLW1hcC10eXBlIjoiYXRvbWljIn0sIm1hdGNoTGFiZWxLZXlzIjp7ImRlc2NyaXB0aW9uIjoiTWF0Y2hMYWJlbEtleXMgaXMgYSBzZXQgb2YgcG9kIGxhYmVsIGtleXMgdG8gc2VsZWN0IHdoaWNoIHBvZHMgd2lsbCBiZSB0YWtlbiBpbnRvIGNvbnNpZGVyYXRpb24uIFRoZSBrZXlzIGFyZSB1c2VkIHRvIGxvb2t1cCB2YWx1ZXMgZnJvbSB0aGUgaW5jb21pbmcgcG9kIGxhYmVscywgdGhvc2Uga2V5LXZhbHVlIGxhYmVscyBhcmUgbWVyZ2VkIHdpdGggYExhYmVsU2VsZWN0b3JgIGFzIGBrZXkgaW4gKHZhbHVlKWAgdG8gc2VsZWN0IHRoZSBncm91cCBvZiBleGlzdGluZyBwb2RzIHdoaWNoIHBvZHMgd2lsbCBiZSB0YWtlbiBpbnRvIGNvbnNpZGVyYXRpb24gZm9yIHRoZSBpbmNvbWluZyBwb2QncyBwb2QgKGFudGkpIGFmZmluaXR5LiBLZXlzIHRoYXQgZG9uJ3QgZXhpc3QgaW4gdGhlIGluY29taW5nIHBvZCBsYWJlbHMgd2lsbCBiZSBpZ25vcmVkLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBlbXB0eS4gVGhlIHNhbWUga2V5IGlzIGZvcmJpZGRlbiB0byBleGlzdCBpbiBib3RoIE1hdGNoTGFiZWxLZXlzIGFuZCBMYWJlbFNlbGVjdG9yLiBBbHNvLCBNYXRjaExhYmVsS2V5cyBjYW5ub3QgYmUgc2V0IHdoZW4gTGFiZWxTZWxlY3RvciBpc24ndCBzZXQuIFRoaXMgaXMgYW4gYWxwaGEgZmllbGQgYW5kIHJlcXVpcmVzIGVuYWJsaW5nIE1hdGNoTGFiZWxLZXlzSW5Qb2RBZmZpbml0eSBmZWF0dXJlIGdhdGUuIiwiaXRlbXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjoiYXJyYXkiLCJ4LWt1YmVybmV0ZXMtbGlzdC10eXBlIjoiYXRvbWljIn0sIm1pc21hdGNoTGFiZWxLZXlzIjp7ImRlc2NyaXB0aW9uIjoiTWlzbWF0Y2hMYWJlbEtleXMgaXMgYSBzZXQgb2YgcG9kIGxhYmVsIGtleXMgdG8gc2VsZWN0IHdoaWNoIHBvZHMgd2lsbCBiZSB0YWtlbiBpbnRvIGNvbnNpZGVyYXRpb24uIFRoZSBrZXlzIGFyZSB1c2VkIHRvIGxvb2t1cCB2YWx1ZXMgZnJvbSB0aGUgaW5jb21pbmcgcG9kIGxhYmVscywgdGhvc2Uga2V5LXZhbHVlIGxhYmVscyBhcmUgbWVyZ2VkIHdpdGggYExhYmVsU2VsZWN0b3JgIGFzIGBrZXkgbm90aW4gKHZhbHVlKWAgdG8gc2VsZWN0IHRoZSBncm91cCBvZiBleGlzdGluZyBwb2RzIHdoaWNoIHBvZHMgd2lsbCBiZSB0YWtlbiBpbnRvIGNvbnNpZGVyYXRpb24gZm9yIHRoZSBpbmNvbWluZyBwb2QncyBwb2QgKGFudGkpIGFmZmluaXR5LiBLZXlzIHRoYXQgZG9uJ3QgZXhpc3QgaW4gdGhlIGluY29taW5nIHBvZCBsYWJlbHMgd2lsbCBiZSBpZ25vcmVkLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBlbXB0eS4gVGhlIHNhbWUga2V5IGlzIGZvcmJpZGRlbiB0byBleGlzdCBpbiBib3RoIE1pc21hdGNoTGFiZWxLZXlzIGFuZCBMYWJlbFNlbGVjdG9yLiBBbHNvLCBNaXNtYXRjaExhYmVsS2V5cyBjYW5ub3QgYmUgc2V0IHdoZW4gTGFiZWxTZWxlY3RvciBpc24ndCBzZXQuIFRoaXMgaXMgYW4gYWxwaGEgZmllbGQgYW5kIHJlcXVpcmVzIGVuYWJsaW5nIE1hdGNoTGFiZWxLZXlzSW5Qb2RBZmZpbml0eSBmZWF0dXJlIGdhdGUuIiwiaXRlbXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjoiYXJyYXkiLCJ4LWt1YmVybmV0ZXMtbGlzdC10eXBlIjoiYXRvbWljIn0sIm5hbWVzcGFjZVNlbGVjdG9yIjp7ImRlc2NyaXB0aW9uIjoiQSBsYWJlbCBxdWVyeSBvdmVyIHRoZSBzZXQgb2YgbmFtZXNwYWNlcyB0aGF0IHRoZSB0ZXJtIGFwcGxpZXMgdG8uIFRoZSB0ZXJtIGlzIGFwcGxpZWQgdG8gdGhlIHVuaW9uIG9mIHRoZSBuYW1lc3BhY2VzIHNlbGVjdGVkIGJ5IHRoaXMgZmllbGQgYW5kIHRoZSBvbmVzIGxpc3RlZCBpbiB0aGUgbmFtZXNwYWNlcyBmaWVsZC4gbnVsbCBzZWxlY3RvciBhbmQgbnVsbCBvciBlbXB0eSBuYW1lc3BhY2VzIGxpc3QgbWVhbnMgXCJ0aGlzIHBvZCdzIG5hbWVzcGFjZVwiLiBBbiBlbXB0eSBzZWxlY3RvciAoe30pIG1hdGNoZXMgYWxsIG5hbWVzcGFjZXMuIiwicHJvcGVydGllcyI6eyJtYXRjaEV4cHJlc3Npb25zIjp7ImRlc2NyaXB0aW9uIjoibWF0Y2hFeHByZXNzaW9ucyBpcyBhIGxpc3Qgb2YgbGFiZWwgc2VsZWN0b3IgcmVxdWlyZW1lbnRzLiBUaGUgcmVxdWlyZW1lbnRzIGFyZSBBTkRlZC4iLCJpdGVtcyI6eyJkZXNjcmlwdGlvbiI6IkEgbGFiZWwgc2VsZWN0b3IgcmVxdWlyZW1lbnQgaXMgYSBzZWxlY3RvciB0aGF0IGNvbnRhaW5zIHZhbHVlcywgYSBrZXksIGFuZCBhbiBvcGVyYXRvciB0aGF0IHJlbGF0ZXMgdGhlIGtleSBhbmQgdmFsdWVzLiIsInByb3BlcnRpZXMiOnsia2V5Ijp7ImRlc2NyaXB0aW9uIjoia2V5IGlzIHRoZSBsYWJlbCBrZXkgdGhhdCB0aGUgc2VsZWN0b3IgYXBwbGllcyB0by4iLCJ0eXBlIjoic3RyaW5nIn0sIm9wZXJhdG9yIjp7ImRlc2NyaXB0aW9uIjoib3BlcmF0b3IgcmVwcmVzZW50cyBhIGtleSdzIHJlbGF0aW9uc2hpcCB0byBhIHNldCBvZiB2YWx1ZXMuIFZhbGlkIG9wZXJhdG9ycyBhcmUgSW4sIE5vdEluLCBFeGlzdHMgYW5kIERvZXNOb3RFeGlzdC4iLCJ0eXBlIjoic3RyaW5nIn0sInZhbHVlcyI6eyJkZXNjcmlwdGlvbiI6InZhbHVlcyBpcyBhbiBhcnJheSBvZiBzdHJpbmcgdmFsdWVzLiBJZiB0aGUgb3BlcmF0b3IgaXMgSW4gb3IgTm90SW4sIHRoZSB2YWx1ZXMgYXJyYXkgbXVzdCBiZSBub24tZW1wdHkuIElmIHRoZSBvcGVyYXRvciBpcyBFeGlzdHMgb3IgRG9lc05vdEV4aXN0LCB0aGUgdmFsdWVzIGFycmF5IG11c3QgYmUgZW1wdHkuIFRoaXMgYXJyYXkgaXMgcmVwbGFjZWQgZHVyaW5nIGEgc3RyYXRlZ2ljIG1lcmdlIHBhdGNoLiIsIml0ZW1zIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6ImFycmF5In19LCJyZXF1aXJlZCI6WyJrZXkiLCJvcGVyYXRvciJdLCJ0eXBlIjoib2JqZWN0In0sInR5cGUiOiJhcnJheSJ9LCJtYXRjaExhYmVscyI6eyJhZGRpdGlvbmFsUHJvcGVydGllcyI6eyJ0eXBlIjoic3RyaW5nIn0sImRlc2NyaXB0aW9uIjoibWF0Y2hMYWJlbHMgaXMgYSBtYXAgb2Yge2tleSx2YWx1ZX0gcGFpcnMuIEEgc2luZ2xlIHtrZXksdmFsdWV9IGluIHRoZSBtYXRjaExhYmVscyBtYXAgaXMgZXF1aXZhbGVudCB0byBhbiBlbGVtZW50IG9mIG1hdGNoRXhwcmVzc2lvbnMsIHdob3NlIGtleSBmaWVsZCBpcyBcImtleVwiLCB0aGUgb3BlcmF0b3IgaXMgXCJJblwiLCBhbmQgdGhlIHZhbHVlcyBhcnJheSBjb250YWlucyBvbmx5IFwidmFsdWVcIi4gVGhlIHJlcXVpcmVtZW50cyBhcmUgQU5EZWQuIiwidHlwZSI6Im9iamVjdCJ9fSwidHlwZSI6Im9iamVjdCIsIngta3ViZXJuZXRlcy1tYXAtdHlwZSI6ImF0b21pYyJ9LCJuYW1lc3BhY2VzIjp7ImRlc2NyaXB0aW9uIjoibmFtZXNwYWNlcyBzcGVjaWZpZXMgYSBzdGF0aWMgbGlzdCBvZiBuYW1lc3BhY2UgbmFtZXMgdGhhdCB0aGUgdGVybSBhcHBsaWVzIHRvLiBUaGUgdGVybSBpcyBhcHBsaWVkIHRvIHRoZSB1bmlvbiBvZiB0aGUgbmFtZXNwYWNlcyBsaXN0ZWQgaW4gdGhpcyBmaWVsZCBhbmQgdGhlIG9uZXMgc2VsZWN0ZWQgYnkgbmFtZXNwYWNlU2VsZWN0b3IuIG51bGwgb3IgZW1wdHkgbmFtZXNwYWNlcyBsaXN0IGFuZCBudWxsIG5hbWVzcGFjZVNlbGVjdG9yIG1lYW5zIFwidGhpcyBwb2QncyBuYW1lc3BhY2VcIi4iLCJpdGVtcyI6eyJ0eXBlIjoic3RyaW5nIn0sInR5cGUiOiJhcnJheSJ9LCJ0b3BvbG9neUtleSI6eyJkZXNjcmlwdGlvbiI6IlRoaXMgcG9kIHNob3VsZCBiZSBjby1sb2NhdGVkIChhZmZpbml0eSkgb3Igbm90IGNvLWxvY2F0ZWQgKGFudGktYWZmaW5pdHkpIHdpdGggdGhlIHBvZHMgbWF0Y2hpbmcgdGhlIGxhYmVsU2VsZWN0b3IgaW4gdGhlIHNwZWNpZmllZCBuYW1lc3BhY2VzLCB3aGVyZSBjby1sb2NhdGVkIGlzIGRlZmluZWQgYXMgcnVubmluZyBvbiBhIG5vZGUgd2hvc2UgdmFsdWUgb2YgdGhlIGxhYmVsIHdpdGgga2V5IHRvcG9sb2d5S2V5IG1hdGNoZXMgdGhhdCBvZiBhbnkgbm9kZSBvbiB3aGljaCBhbnkgb2YgdGhlIHNlbGVjdGVkIHBvZHMgaXMgcnVubmluZy4gRW1wdHkgdG9wb2xvZ3lLZXkgaXMgbm90IGFsbG93ZWQuIiwidHlwZSI6InN0cmluZyJ9fSwicmVxdWlyZWQiOlsidG9wb2xvZ3lLZXkiXSwidHlwZSI6Im9iamVjdCJ9LCJ0eXBlIjoiYXJyYXkifX0sInR5cGUiOiJvYmplY3QifSwidG9sZXJhdGlvbnMiOnsiZGVzY3JpcHRpb24iOiJUaGUgcG9kIHRoaXMgVG9sZXJhdGlvbiBpcyBhdHRhY2hlZCB0byB0b2xlcmF0ZXMgYW55IHRhaW50IHRoYXQgbWF0Y2hlcyB0aGUgdHJpcGxlIFx1MDAzY2tleSx2YWx1ZSxlZmZlY3RcdTAwM2UgdXNpbmcgdGhlIG1hdGNoaW5nIG9wZXJhdG9yIFx1MDAzY29wZXJhdG9yXHUwMDNlIiwiaXRlbXMiOnsiZGVzY3JpcHRpb24iOiJUaGUgcG9kIHRoaXMgVG9sZXJhdGlvbiBpcyBhdHRhY2hlZCB0byB0b2xlcmF0ZXMgYW55IHRhaW50IHRoYXQgbWF0Y2hlcyB0aGUgdHJpcGxlIFx1MDAzY2tleSx2YWx1ZSxlZmZlY3RcdTAwM2UgdXNpbmcgdGhlIG1hdGNoaW5nIG9wZXJhdG9yIFx1MDAzY29wZXJhdG9yXHUwMDNlLiIsInByb3BlcnRpZXMiOnsiZWZmZWN0Ijp7ImRlc2NyaXB0aW9uIjoiRWZmZWN0IGluZGljYXRlcyB0aGUgdGFpbnQgZWZmZWN0IHRvIG1hdGNoLiBFbXB0eSBtZWFucyBtYXRjaCBhbGwgdGFpbnQgZWZmZWN0cy4gV2hlbiBzcGVjaWZpZWQsIGFsbG93ZWQgdmFsdWVzIGFyZSBOb1NjaGVkdWxlLCBQcmVmZXJOb1NjaGVkdWxlIGFuZCBOb0V4ZWN1dGUuIiwidHlwZSI6InN0cmluZyJ9LCJrZXkiOnsiZGVzY3JpcHRpb24iOiJLZXkgaXMgdGhlIHRhaW50IGtleSB0aGF0IHRoZSB0b2xlcmF0aW9uIGFwcGxpZXMgdG8uIEVtcHR5IG1lYW5zIG1hdGNoIGFsbCB0YWludCBrZXlzLiBJZiB0aGUga2V5IGlzIGVtcHR5LCBvcGVyYXRvciBtdXN0IGJlIEV4aXN0czsgdGhpcyBjb21iaW5hdGlvbiBtZWFucyB0byBtYXRjaCBhbGwgdmFsdWVzIGFuZCBhbGwga2V5cy4iLCJ0eXBlIjoic3RyaW5nIn0sIm9wZXJhdG9yIjp7ImRlc2NyaXB0aW9uIjoiT3BlcmF0b3IgcmVwcmVzZW50cyBhIGtleSdzIHJlbGF0aW9uc2hpcCB0byB0aGUgdmFsdWUuIFZhbGlkIG9wZXJhdG9ycyBhcmUgRXhpc3RzIGFuZCBFcXVhbC4gRGVmYXVsdHMgdG8gRXF1YWwuIEV4aXN0cyBpcyBlcXVpdmFsZW50IHRvIHdpbGRjYXJkIGZvciB2YWx1ZSwgc28gdGhhdCBhIHBvZCBjYW4gdG9sZXJhdGUgYWxsIHRhaW50cyBvZiBhIHBhcnRpY3VsYXIgY2F0ZWdvcnkuIiwidHlwZSI6InN0cmluZyJ9LCJ0b2xlcmF0aW9uU2Vjb25kcyI6eyJkZXNjcmlwdGlvbiI6IlRvbGVyYXRpb25TZWNvbmRzIHJlcHJlc2VudHMgdGhlIHBlcmlvZCBvZiB0aW1lIHRoZSB0b2xlcmF0aW9uICh3aGljaCBtdXN0IGJlIG9mIGVmZmVjdCBOb0V4ZWN1dGUsIG90aGVyd2lzZSB0aGlzIGZpZWxkIGlzIGlnbm9yZWQpIHRvbGVyYXRlcyB0aGUgdGFpbnQuIEJ5IGRlZmF1bHQsIGl0IGlzIG5vdCBzZXQsIHdoaWNoIG1lYW5zIHRvbGVyYXRlIHRoZSB0YWludCBmb3JldmVyIChkbyBub3QgZXZpY3QpLiBaZXJvIGFuZCBuZWdhdGl2ZSB2YWx1ZXMgd2lsbCBiZSB0cmVhdGVkIGFzIDAgKGV2aWN0IGltbWVkaWF0ZWx5KSBieSB0aGUgc3lzdGVtLiIsImZvcm1hdCI6ImludDY0IiwidHlwZSI6ImludGVnZXIifSwidmFsdWUiOnsiZGVzY3JpcHRpb24iOiJWYWx1ZSBpcyB0aGUgdGFpbnQgdmFsdWUgdGhlIHRvbGVyYXRpb24gbWF0Y2hlcyB0by4gSWYgdGhlIG9wZXJhdG9yIGlzIEV4aXN0cywgdGhlIHZhbHVlIHNob3VsZCBiZSBlbXB0eSwgb3RoZXJ3aXNlIGp1c3QgYSByZWd1bGFyIHN0cmluZy4iLCJ0eXBlIjoic3RyaW5nIn19LCJ0eXBlIjoib2JqZWN0In0sInR5cGUiOiJhcnJheSJ9LCJ0b3BvbG9neVNwcmVhZENvbnN0cmFpbnRzIjp7ImRlc2NyaXB0aW9uIjoiVG9wb2xvZ3lTcHJlYWRDb25zdHJhaW50IHNwZWNpZmllcyBob3cgdG8gc3ByZWFkIG1hdGNoaW5nIHBvZHMgYW1vbmcgdGhlIGdpdmVuIHRvcG9sb2d5IiwiaXRlbXMiOnsiZGVzY3JpcHRpb24iOiJUb3BvbG9neVNwcmVhZENvbnN0cmFpbnQgc3BlY2lmaWVzIGhvdyB0byBzcHJlYWQgbWF0Y2hpbmcgcG9kcyBhbW9uZyB0aGUgZ2l2ZW4gdG9wb2xvZ3kuIiwicHJvcGVydGllcyI6eyJsYWJlbFNlbGVjdG9yIjp7ImRlc2NyaXB0aW9uIjoiTGFiZWxTZWxlY3RvciBpcyB1c2VkIHRvIGZpbmQgbWF0Y2hpbmcgcG9kcy4gUG9kcyB0aGF0IG1hdGNoIHRoaXMgbGFiZWwgc2VsZWN0b3IgYXJlIGNvdW50ZWQgdG8gZGV0ZXJtaW5lIHRoZSBudW1iZXIgb2YgcG9kcyBpbiB0aGVpciBjb3JyZXNwb25kaW5nIHRvcG9sb2d5IGRvbWFpbi4iLCJwcm9wZXJ0aWVzIjp7Im1hdGNoRXhwcmVzc2lvbnMiOnsiZGVzY3JpcHRpb24iOiJtYXRjaEV4cHJlc3Npb25zIGlzIGEgbGlzdCBvZiBsYWJlbCBzZWxlY3RvciByZXF1aXJlbWVudHMuIFRoZSByZXF1aXJlbWVudHMgYXJlIEFORGVkLiIsIml0ZW1zIjp7ImRlc2NyaXB0aW9uIjoiQSBsYWJlbCBzZWxlY3RvciByZXF1aXJlbWVudCBpcyBhIHNlbGVjdG9yIHRoYXQgY29udGFpbnMgdmFsdWVzLCBhIGtleSwgYW5kIGFuIG9wZXJhdG9yIHRoYXQgcmVsYXRlcyB0aGUga2V5IGFuZCB2YWx1ZXMuIiwicHJvcGVydGllcyI6eyJrZXkiOnsiZGVzY3JpcHRpb24iOiJrZXkgaXMgdGhlIGxhYmVsIGtleSB0aGF0IHRoZSBzZWxlY3RvciBhcHBsaWVzIHRvLiIsInR5cGUiOiJzdHJpbmcifSwib3BlcmF0b3IiOnsiZGVzY3JpcHRpb24iOiJvcGVyYXRvciByZXByZXNlbnRzIGEga2V5J3MgcmVsYXRpb25zaGlwIHRvIGEgc2V0IG9mIHZhbHVlcy4gVmFsaWQgb3BlcmF0b3JzIGFyZSBJbiwgTm90SW4sIEV4aXN0cyBhbmQgRG9lc05vdEV4aXN0LiIsInR5cGUiOiJzdHJpbmcifSwidmFsdWVzIjp7ImRlc2NyaXB0aW9uIjoidmFsdWVzIGlzIGFuIGFycmF5IG9mIHN0cmluZyB2YWx1ZXMuIElmIHRoZSBvcGVyYXRvciBpcyBJbiBvciBOb3RJbiwgdGhlIHZhbHVlcyBhcnJheSBtdXN0IGJlIG5vbi1lbXB0eS4gSWYgdGhlIG9wZXJhdG9yIGlzIEV4aXN0cyBvciBEb2VzTm90RXhpc3QsIHRoZSB2YWx1ZXMgYXJyYXkgbXVzdCBiZSBlbXB0eS4gVGhpcyBhcnJheSBpcyByZXBsYWNlZCBkdXJpbmcgYSBzdHJhdGVnaWMgbWVyZ2UgcGF0Y2guIiwiaXRlbXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjoiYXJyYXkifX0sInJlcXVpcmVkIjpbImtleSIsIm9wZXJhdG9yIl0sInR5cGUiOiJvYmplY3QifSwidHlwZSI6ImFycmF5In0sIm1hdGNoTGFiZWxzIjp7ImFkZGl0aW9uYWxQcm9wZXJ0aWVzIjp7InR5cGUiOiJzdHJpbmcifSwiZGVzY3JpcHRpb24iOiJtYXRjaExhYmVscyBpcyBhIG1hcCBvZiB7a2V5LHZhbHVlfSBwYWlycy4gQSBzaW5nbGUge2tleSx2YWx1ZX0gaW4gdGhlIG1hdGNoTGFiZWxzIG1hcCBpcyBlcXVpdmFsZW50IHRvIGFuIGVsZW1lbnQgb2YgbWF0Y2hFeHByZXNzaW9ucywgd2hvc2Uga2V5IGZpZWxkIGlzIFwia2V5XCIsIHRoZSBvcGVyYXRvciBpcyBcIkluXCIsIGFuZCB0aGUgdmFsdWVzIGFycmF5IGNvbnRhaW5zIG9ubHkgXCJ2YWx1ZVwiLiBUaGUgcmVxdWlyZW1lbnRzIGFyZSBBTkRlZC4iLCJ0eXBlIjoib2JqZWN0In19LCJ0eXBlIjoib2JqZWN0IiwieC1rdWJlcm5ldGVzLW1hcC10eXBlIjoiYXRvbWljIn0sIm1hdGNoTGFiZWxLZXlzIjp7ImRlc2NyaXB0aW9uIjoiTWF0Y2hMYWJlbEtleXMgaXMgYSBzZXQgb2YgcG9kIGxhYmVsIGtleXMgdG8gc2VsZWN0IHRoZSBwb2RzIG92ZXIgd2hpY2ggc3ByZWFkaW5nIHdpbGwgYmUgY2FsY3VsYXRlZC4gVGhlIGtleXMgYXJlIHVzZWQgdG8gbG9va3VwIHZhbHVlcyBmcm9tIHRoZSBpbmNvbWluZyBwb2QgbGFiZWxzLCB0aG9zZSBrZXktdmFsdWUgbGFiZWxzIGFyZSBBTkRlZCB3aXRoIGxhYmVsU2VsZWN0b3IgdG8gc2VsZWN0IHRoZSBncm91cCBvZiBleGlzdGluZyBwb2RzIG92ZXIgd2hpY2ggc3ByZWFkaW5nIHdpbGwgYmUgY2FsY3VsYXRlZCBmb3IgdGhlIGluY29taW5nIHBvZC4gVGhlIHNhbWUga2V5IGlzIGZvcmJpZGRlbiB0byBleGlzdCBpbiBib3RoIE1hdGNoTGFiZWxLZXlzIGFuZCBMYWJlbFNlbGVjdG9yLiBNYXRjaExhYmVsS2V5cyBjYW5ub3QgYmUgc2V0IHdoZW4gTGFiZWxTZWxlY3RvciBpc24ndCBzZXQuIEtleXMgdGhhdCBkb24ndCBleGlzdCBpbiB0aGUgaW5jb21pbmcgcG9kIGxhYmVscyB3aWxsIGJlIGlnbm9yZWQuIEEgbnVsbCBvciBlbXB0eSBsaXN0IG1lYW5zIG9ubHkgbWF0Y2ggYWdhaW5zdCBsYWJlbFNlbGVjdG9yLiBcbiBUaGlzIGlzIGEgYmV0YSBmaWVsZCBhbmQgcmVxdWlyZXMgdGhlIE1hdGNoTGFiZWxLZXlzSW5Qb2RUb3BvbG9neVNwcmVhZCBmZWF0dXJlIGdhdGUgdG8gYmUgZW5hYmxlZCAoZW5hYmxlZCBieSBkZWZhdWx0KS4iLCJpdGVtcyI6eyJ0eXBlIjoic3RyaW5nIn0sInR5cGUiOiJhcnJheSIsIngta3ViZXJuZXRlcy1saXN0LXR5cGUiOiJhdG9taWMifSwibWF4U2tldyI6eyJkZXNjcmlwdGlvbiI6Ik1heFNrZXcgZGVzY3JpYmVzIHRoZSBkZWdyZWUgdG8gd2hpY2ggcG9kcyBtYXkgYmUgdW5ldmVubHkgZGlzdHJpYnV0ZWQuIFdoZW4gYHdoZW5VbnNhdGlzZmlhYmxlPURvTm90U2NoZWR1bGVgLCBpdCBpcyB0aGUgbWF4aW11bSBwZXJtaXR0ZWQgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBudW1iZXIgb2YgbWF0Y2hpbmcgcG9kcyBpbiB0aGUgdGFyZ2V0IHRvcG9sb2d5IGFuZCB0aGUgZ2xvYmFsIG1pbmltdW0uIFRoZSBnbG9iYWwgbWluaW11bSBpcyB0aGUgbWluaW11bSBudW1iZXIgb2YgbWF0Y2hpbmcgcG9kcyBpbiBhbiBlbGlnaWJsZSBkb21haW4gb3IgemVybyBpZiB0aGUgbnVtYmVyIG9mIGVsaWdpYmxlIGRvbWFpbnMgaXMgbGVzcyB0aGFuIE1pbkRvbWFpbnMuIEZvciBleGFtcGxlLCBpbiBhIDMtem9uZSBjbHVzdGVyLCBNYXhTa2V3IGlzIHNldCB0byAxLCBhbmQgcG9kcyB3aXRoIHRoZSBzYW1lIGxhYmVsU2VsZWN0b3Igc3ByZWFkIGFzIDIvMi8xOiBJbiB0aGlzIGNhc2UsIHRoZSBnbG9iYWwgbWluaW11bSBpcyAxLiB8IHpvbmUxIHwgem9uZTIgfCB6b25lMyB8IHwgIFAgUCAgfCAgUCBQICB8ICAgUCAgIHwgLSBpZiBNYXhTa2V3IGlzIDEsIGluY29taW5nIHBvZCBjYW4gb25seSBiZSBzY2hlZHVsZWQgdG8gem9uZTMgdG8gYmVjb21lIDIvMi8yOyBzY2hlZHVsaW5nIGl0IG9udG8gem9uZTEoem9uZTIpIHdvdWxkIG1ha2UgdGhlIEFjdHVhbFNrZXcoMy0xKSBvbiB6b25lMSh6b25lMikgdmlvbGF0ZSBNYXhTa2V3KDEpLiAtIGlmIE1heFNrZXcgaXMgMiwgaW5jb21pbmcgcG9kIGNhbiBiZSBzY2hlZHVsZWQgb250byBhbnkgem9uZS4gV2hlbiBgd2hlblVuc2F0aXNmaWFibGU9U2NoZWR1bGVBbnl3YXlgLCBpdCBpcyB1c2VkIHRvIGdpdmUgaGlnaGVyIHByZWNlZGVuY2UgdG8gdG9wb2xvZ2llcyB0aGF0IHNhdGlzZnkgaXQuIEl0J3MgYSByZXF1aXJlZCBmaWVsZC4gRGVmYXVsdCB2YWx1ZSBpcyAxIGFuZCAwIGlzIG5vdCBhbGxvd2VkLiIsImZvcm1hdCI6ImludDMyIiwidHlwZSI6ImludGVnZXIifSwibWluRG9tYWlucyI6eyJkZXNjcmlwdGlvbiI6Ik1pbkRvbWFpbnMgaW5kaWNhdGVzIGEgbWluaW11bSBudW1iZXIgb2YgZWxpZ2libGUgZG9tYWlucy4gV2hlbiB0aGUgbnVtYmVyIG9mIGVsaWdpYmxlIGRvbWFpbnMgd2l0aCBtYXRjaGluZyB0b3BvbG9neSBrZXlzIGlzIGxlc3MgdGhhbiBtaW5Eb21haW5zLCBQb2QgVG9wb2xvZ3kgU3ByZWFkIHRyZWF0cyBcImdsb2JhbCBtaW5pbXVtXCIgYXMgMCwgYW5kIHRoZW4gdGhlIGNhbGN1bGF0aW9uIG9mIFNrZXcgaXMgcGVyZm9ybWVkLiBBbmQgd2hlbiB0aGUgbnVtYmVyIG9mIGVsaWdpYmxlIGRvbWFpbnMgd2l0aCBtYXRjaGluZyB0b3BvbG9neSBrZXlzIGVxdWFscyBvciBncmVhdGVyIHRoYW4gbWluRG9tYWlucywgdGhpcyB2YWx1ZSBoYXMgbm8gZWZmZWN0IG9uIHNjaGVkdWxpbmcuIEFzIGEgcmVzdWx0LCB3aGVuIHRoZSBudW1iZXIgb2YgZWxpZ2libGUgZG9tYWlucyBpcyBsZXNzIHRoYW4gbWluRG9tYWlucywgc2NoZWR1bGVyIHdvbid0IHNjaGVkdWxlIG1vcmUgdGhhbiBtYXhTa2V3IFBvZHMgdG8gdGhvc2UgZG9tYWlucy4gSWYgdmFsdWUgaXMgbmlsLCB0aGUgY29uc3RyYWludCBiZWhhdmVzIGFzIGlmIE1pbkRvbWFpbnMgaXMgZXF1YWwgdG8gMS4gVmFsaWQgdmFsdWVzIGFyZSBpbnRlZ2VycyBncmVhdGVyIHRoYW4gMC4gV2hlbiB2YWx1ZSBpcyBub3QgbmlsLCBXaGVuVW5zYXRpc2ZpYWJsZSBtdXN0IGJlIERvTm90U2NoZWR1bGUuIFxuIEZvciBleGFtcGxlLCBpbiBhIDMtem9uZSBjbHVzdGVyLCBNYXhTa2V3IGlzIHNldCB0byAyLCBNaW5Eb21haW5zIGlzIHNldCB0byA1IGFuZCBwb2RzIHdpdGggdGhlIHNhbWUgbGFiZWxTZWxlY3RvciBzcHJlYWQgYXMgMi8yLzI6IHwgem9uZTEgfCB6b25lMiB8IHpvbmUzIHwgfCAgUCBQICB8ICBQIFAgIHwgIFAgUCAgfCBUaGUgbnVtYmVyIG9mIGRvbWFpbnMgaXMgbGVzcyB0aGFuIDUoTWluRG9tYWlucyksIHNvIFwiZ2xvYmFsIG1pbmltdW1cIiBpcyB0cmVhdGVkIGFzIDAuIEluIHRoaXMgc2l0dWF0aW9uLCBuZXcgcG9kIHdpdGggdGhlIHNhbWUgbGFiZWxTZWxlY3RvciBjYW5ub3QgYmUgc2NoZWR1bGVkLCBiZWNhdXNlIGNvbXB1dGVkIHNrZXcgd2lsbCBiZSAzKDMgLSAwKSBpZiBuZXcgUG9kIGlzIHNjaGVkdWxlZCB0byBhbnkgb2YgdGhlIHRocmVlIHpvbmVzLCBpdCB3aWxsIHZpb2xhdGUgTWF4U2tldy4gXG4gVGhpcyBpcyBhIGJldGEgZmllbGQgYW5kIHJlcXVpcmVzIHRoZSBNaW5Eb21haW5zSW5Qb2RUb3BvbG9neVNwcmVhZCBmZWF0dXJlIGdhdGUgdG8gYmUgZW5hYmxlZCAoZW5hYmxlZCBieSBkZWZhdWx0KS4iLCJmb3JtYXQiOiJpbnQzMiIsInR5cGUiOiJpbnRlZ2VyIn0sIm5vZGVBZmZpbml0eVBvbGljeSI6eyJkZXNjcmlwdGlvbiI6Ik5vZGVBZmZpbml0eVBvbGljeSBpbmRpY2F0ZXMgaG93IHdlIHdpbGwgdHJlYXQgUG9kJ3Mgbm9kZUFmZmluaXR5L25vZGVTZWxlY3RvciB3aGVuIGNhbGN1bGF0aW5nIHBvZCB0b3BvbG9neSBzcHJlYWQgc2tldy4gT3B0aW9ucyBhcmU6IC0gSG9ub3I6IG9ubHkgbm9kZXMgbWF0Y2hpbmcgbm9kZUFmZmluaXR5L25vZGVTZWxlY3RvciBhcmUgaW5jbHVkZWQgaW4gdGhlIGNhbGN1bGF0aW9ucy4gLSBJZ25vcmU6IG5vZGVBZmZpbml0eS9ub2RlU2VsZWN0b3IgYXJlIGlnbm9yZWQuIEFsbCBub2RlcyBhcmUgaW5jbHVkZWQgaW4gdGhlIGNhbGN1bGF0aW9ucy4gXG4gSWYgdGhpcyB2YWx1ZSBpcyBuaWwsIHRoZSBiZWhhdmlvciBpcyBlcXVpdmFsZW50IHRvIHRoZSBIb25vciBwb2xpY3kuIFRoaXMgaXMgYSBiZXRhLWxldmVsIGZlYXR1cmUgZGVmYXVsdCBlbmFibGVkIGJ5IHRoZSBOb2RlSW5jbHVzaW9uUG9saWN5SW5Qb2RUb3BvbG9neVNwcmVhZCBmZWF0dXJlIGZsYWcuIiwidHlwZSI6InN0cmluZyJ9LCJub2RlVGFpbnRzUG9saWN5Ijp7ImRlc2NyaXB0aW9uIjoiTm9kZVRhaW50c1BvbGljeSBpbmRpY2F0ZXMgaG93IHdlIHdpbGwgdHJlYXQgbm9kZSB0YWludHMgd2hlbiBjYWxjdWxhdGluZyBwb2QgdG9wb2xvZ3kgc3ByZWFkIHNrZXcuIE9wdGlvbnMgYXJlOiAtIEhvbm9yOiBub2RlcyB3aXRob3V0IHRhaW50cywgYWxvbmcgd2l0aCB0YWludGVkIG5vZGVzIGZvciB3aGljaCB0aGUgaW5jb21pbmcgcG9kIGhhcyBhIHRvbGVyYXRpb24sIGFyZSBpbmNsdWRlZC4gLSBJZ25vcmU6IG5vZGUgdGFpbnRzIGFyZSBpZ25vcmVkLiBBbGwgbm9kZXMgYXJlIGluY2x1ZGVkLiBcbiBJZiB0aGlzIHZhbHVlIGlzIG5pbCwgdGhlIGJlaGF2aW9yIGlzIGVxdWl2YWxlbnQgdG8gdGhlIElnbm9yZSBwb2xpY3kuIFRoaXMgaXMgYSBiZXRhLWxldmVsIGZlYXR1cmUgZGVmYXVsdCBlbmFibGVkIGJ5IHRoZSBOb2RlSW5jbHVzaW9uUG9saWN5SW5Qb2RUb3BvbG9neVNwcmVhZCBmZWF0dXJlIGZsYWcuIiwidHlwZSI6InN0cmluZyJ9LCJ0b3BvbG9neUtleSI6eyJkZXNjcmlwdGlvbiI6IlRvcG9sb2d5S2V5IGlzIHRoZSBrZXkgb2Ygbm9kZSBsYWJlbHMuIE5vZGVzIHRoYXQgaGF2ZSBhIGxhYmVsIHdpdGggdGhpcyBrZXkgYW5kIGlkZW50aWNhbCB2YWx1ZXMgYXJlIGNvbnNpZGVyZWQgdG8gYmUgaW4gdGhlIHNhbWUgdG9wb2xvZ3kuIFdlIGNvbnNpZGVyIGVhY2ggXHUwMDNja2V5LCB2YWx1ZVx1MDAzZSBhcyBhIFwiYnVja2V0XCIsIGFuZCB0cnkgdG8gcHV0IGJhbGFuY2VkIG51bWJlciBvZiBwb2RzIGludG8gZWFjaCBidWNrZXQuIFdlIGRlZmluZSBhIGRvbWFpbiBhcyBhIHBhcnRpY3VsYXIgaW5zdGFuY2Ugb2YgYSB0b3BvbG9neS4gQWxzbywgd2UgZGVmaW5lIGFuIGVsaWdpYmxlIGRvbWFpbiBhcyBhIGRvbWFpbiB3aG9zZSBub2RlcyBtZWV0IHRoZSByZXF1aXJlbWVudHMgb2Ygbm9kZUFmZmluaXR5UG9saWN5IGFuZCBub2RlVGFpbnRzUG9saWN5LiBlLmcuIElmIFRvcG9sb2d5S2V5IGlzIFwia3ViZXJuZXRlcy5pby9ob3N0bmFtZVwiLCBlYWNoIE5vZGUgaXMgYSBkb21haW4gb2YgdGhhdCB0b3BvbG9neS4gQW5kLCBpZiBUb3BvbG9neUtleSBpcyBcInRvcG9sb2d5Lmt1YmVybmV0ZXMuaW8vem9uZVwiLCBlYWNoIHpvbmUgaXMgYSBkb21haW4gb2YgdGhhdCB0b3BvbG9neS4gSXQncyBhIHJlcXVpcmVkIGZpZWxkLiIsInR5cGUiOiJzdHJpbmcifSwid2hlblVuc2F0aXNmaWFibGUiOnsiZGVzY3JpcHRpb24iOiJXaGVuVW5zYXRpc2ZpYWJsZSBpbmRpY2F0ZXMgaG93IHRvIGRlYWwgd2l0aCBhIHBvZCBpZiBpdCBkb2Vzbid0IHNhdGlzZnkgdGhlIHNwcmVhZCBjb25zdHJhaW50LiAtIERvTm90U2NoZWR1bGUgKGRlZmF1bHQpIHRlbGxzIHRoZSBzY2hlZHVsZXIgbm90IHRvIHNjaGVkdWxlIGl0LiAtIFNjaGVkdWxlQW55d2F5IHRlbGxzIHRoZSBzY2hlZHVsZXIgdG8gc2NoZWR1bGUgdGhlIHBvZCBpbiBhbnkgbG9jYXRpb24sIGJ1dCBnaXZpbmcgaGlnaGVyIHByZWNlZGVuY2UgdG8gdG9wb2xvZ2llcyB0aGF0IHdvdWxkIGhlbHAgcmVkdWNlIHRoZSBza2V3LiBBIGNvbnN0cmFpbnQgaXMgY29uc2lkZXJlZCBcIlVuc2F0aXNmaWFibGVcIiBmb3IgYW4gaW5jb21pbmcgcG9kIGlmIGFuZCBvbmx5IGlmIGV2ZXJ5IHBvc3NpYmxlIG5vZGUgYXNzaWdubWVudCBmb3IgdGhhdCBwb2Qgd291bGQgdmlvbGF0ZSBcIk1heFNrZXdcIiBvbiBzb21lIHRvcG9sb2d5LiBGb3IgZXhhbXBsZSwgaW4gYSAzLXpvbmUgY2x1c3RlciwgTWF4U2tldyBpcyBzZXQgdG8gMSwgYW5kIHBvZHMgd2l0aCB0aGUgc2FtZSBsYWJlbFNlbGVjdG9yIHNwcmVhZCBhcyAzLzEvMTogfCB6b25lMSB8IHpvbmUyIHwgem9uZTMgfCB8IFAgUCBQIHwgICBQICAgfCAgIFAgICB8IElmIFdoZW5VbnNhdGlzZmlhYmxlIGlzIHNldCB0byBEb05vdFNjaGVkdWxlLCBpbmNvbWluZyBwb2QgY2FuIG9ubHkgYmUgc2NoZWR1bGVkIHRvIHpvbmUyKHpvbmUzKSB0byBiZWNvbWUgMy8yLzEoMy8xLzIpIGFzIEFjdHVhbFNrZXcoMi0xKSBvbiB6b25lMih6b25lMykgc2F0aXNmaWVzIE1heFNrZXcoMSkuIEluIG90aGVyIHdvcmRzLCB0aGUgY2x1c3RlciBjYW4gc3RpbGwgYmUgaW1iYWxhbmNlZCwgYnV0IHNjaGVkdWxlciB3b24ndCBtYWtlIGl0ICptb3JlKiBpbWJhbGFuY2VkLiBJdCdzIGEgcmVxdWlyZWQgZmllbGQuIiwidHlwZSI6InN0cmluZyJ9fSwicmVxdWlyZWQiOlsibWF4U2tldyIsInRvcG9sb2d5S2V5Iiwid2hlblVuc2F0aXNmaWFibGUiXSwidHlwZSI6Im9iamVjdCJ9LCJ0eXBlIjoiYXJyYXkifX0sInR5cGUiOiJvYmplY3QifSwiZGVzY3JpcHRpb24iOiJQbGFjZW1lbnQgaXMgb3B0aW9uYWwgYW5kIHVzZWQgdG8gc3BlY2lmeSBwbGFjZW1lbnRzIG9mIE9DUyBjb21wb25lbnRzIGV4cGxpY2l0bHkiLCJ0eXBlIjoib2JqZWN0In0sInByb3ZpZGVyQVBJU2VydmVyU2VydmljZVR5cGUiOnsiZGVzY3JpcHRpb24iOiJQcm92aWRlckFQSVNlcnZlclNlcnZpY2VUeXBlIEluZGljYXRlcyB0aGUgU2VydmljZVR5cGUgZm9yIE9DUyBQcm92aWRlciBBUEkgU2VydmVyIFNlcnZpY2UuIFRoZSBzdXBwb3J0ZWQgdmFsdWVzIGFyZSBOb2RlUG9ydCBvciBMb2FkQmFsYW5jZXIuIFRoZSBkZWZhdWx0IFNlcnZpY2VUeXBlIGlzIE5vZGVQb3J0IGlmIHRoZSB2YWx1ZSBpcyBlbXB0eS4gVGhpcyB3aWxsIG9ubHkgYmUgdXNlZCB3aGVuIEFsbG93UmVtb3RlU3RvcmFnZUNvbnN1bWVycyBpcyBzZXQgdG8gdHJ1ZSIsInR5cGUiOiJzdHJpbmcifSwicmVzb3VyY2VQcm9maWxlIjp7ImRlc2NyaXB0aW9uIjoiUmVzb3VyY2UgUHJvZmlsZSBjYW4gYmUgdXNlZCB0byBjaG9vc2UgZnJvbSBhIHNldCBvZiBwcmVkZWZpbmVkIHJlc291cmNlIHByb2ZpbGVzIGZvciB0aGUgY2VwaCBkYWVtb25zLiBXZSBoYXZlIDMgcHJvZmlsZXMgbGVhbjogc3VpdGFibGUgZm9yIGNsdXN0ZXJzIHdpdGggbGltaXRlZCByZXNvdXJjZXMsIGJhbGFuY2VkOiBzdWl0YWJsZSBmb3IgbW9zdCB1c2UgY2FzZXMsIHBlcmZvcm1hbmNlOiBzdWl0YWJsZSBmb3IgY2x1c3RlcnMgd2l0aCBoaWdoIGFtb3VudCBvZiByZXNvdXJjZXMuIiwiZW51bSI6WyJsZWFuIiwiTGVhbiIsImJhbGFuY2VkIiwiQmFsYW5jZWQiLCJwZXJmb3JtYW5jZSIsIlBlcmZvcm1hbmNlIl0sInR5cGUiOiJzdHJpbmcifSwicmVzb3VyY2VzIjp7ImFkZGl0aW9uYWxQcm9wZXJ0aWVzIjp7ImRlc2NyaXB0aW9uIjoiUmVzb3VyY2VSZXF1aXJlbWVudHMgZGVzY3JpYmVzIHRoZSBjb21wdXRlIHJlc291cmNlIHJlcXVpcmVtZW50cy4iLCJwcm9wZXJ0aWVzIjp7ImNsYWltcyI6eyJkZXNjcmlwdGlvbiI6IkNsYWltcyBsaXN0cyB0aGUgbmFtZXMgb2YgcmVzb3VyY2VzLCBkZWZpbmVkIGluIHNwZWMucmVzb3VyY2VDbGFpbXMsIHRoYXQgYXJlIHVzZWQgYnkgdGhpcyBjb250YWluZXIuIFxuIFRoaXMgaXMgYW4gYWxwaGEgZmllbGQgYW5kIHJlcXVpcmVzIGVuYWJsaW5nIHRoZSBEeW5hbWljUmVzb3VyY2VBbGxvY2F0aW9uIGZlYXR1cmUgZ2F0ZS4gXG4gVGhpcyBmaWVsZCBpcyBpbW11dGFibGUuIEl0IGNhbiBvbmx5IGJlIHNldCBmb3IgY29udGFpbmVycy4iLCJpdGVtcyI6eyJkZXNjcmlwdGlvbiI6IlJlc291cmNlQ2xhaW0gcmVmZXJlbmNlcyBvbmUgZW50cnkgaW4gUG9kU3BlYy5SZXNvdXJjZUNsYWltcy4iLCJwcm9wZXJ0aWVzIjp7Im5hbWUiOnsiZGVzY3JpcHRpb24iOiJOYW1lIG11c3QgbWF0Y2ggdGhlIG5hbWUgb2Ygb25lIGVudHJ5IGluIHBvZC5zcGVjLnJlc291cmNlQ2xhaW1zIG9mIHRoZSBQb2Qgd2hlcmUgdGhpcyBmaWVsZCBpcyB1c2VkLiBJdCBtYWtlcyB0aGF0IHJlc291cmNlIGF2YWlsYWJsZSBpbnNpZGUgYSBjb250YWluZXIuIiwidHlwZSI6InN0cmluZyJ9fSwicmVxdWlyZWQiOlsibmFtZSJdLCJ0eXBlIjoib2JqZWN0In0sInR5cGUiOiJhcnJheSIsIngta3ViZXJuZXRlcy1saXN0LW1hcC1rZXlzIjpbIm5hbWUiXSwieC1rdWJlcm5ldGVzLWxpc3QtdHlwZSI6Im1hcCJ9LCJsaW1pdHMiOnsiYWRkaXRpb25hbFByb3BlcnRpZXMiOnsiYW55T2YiOlt7InR5cGUiOiJpbnRlZ2VyIn0seyJ0eXBlIjoic3RyaW5nIn1dLCJwYXR0ZXJuIjoiXihcXCt8LSk/KChbMC05XSsoXFwuWzAtOV0qKT8pfChcXC5bMC05XSspKSgoW0tNR1RQRV1pKXxbbnVta01HVFBFXXwoW2VFXShcXCt8LSk/KChbMC05XSsoXFwuWzAtOV0qKT8pfChcXC5bMC05XSspKSkpPyQiLCJ4LWt1YmVybmV0ZXMtaW50LW9yLXN0cmluZyI6dHJ1ZX0sImRlc2NyaXB0aW9uIjoiTGltaXRzIGRlc2NyaWJlcyB0aGUgbWF4aW11bSBhbW91bnQgb2YgY29tcHV0ZSByZXNvdXJjZXMgYWxsb3dlZC4gTW9yZSBpbmZvOiBodHRwczovL2t1YmVybmV0ZXMuaW8vZG9jcy9jb25jZXB0cy9jb25maWd1cmF0aW9uL21hbmFnZS1yZXNvdXJjZXMtY29udGFpbmVycy8iLCJ0eXBlIjoib2JqZWN0In0sInJlcXVlc3RzIjp7ImFkZGl0aW9uYWxQcm9wZXJ0aWVzIjp7ImFueU9mIjpbeyJ0eXBlIjoiaW50ZWdlciJ9LHsidHlwZSI6InN0cmluZyJ9XSwicGF0dGVybiI6Il4oXFwrfC0pPygoWzAtOV0rKFxcLlswLTldKik/KXwoXFwuWzAtOV0rKSkoKFtLTUdUUEVdaSl8W251bWtNR1RQRV18KFtlRV0oXFwrfC0pPygoWzAtOV0rKFxcLlswLTldKik/KXwoXFwuWzAtOV0rKSkpKT8kIiwieC1rdWJlcm5ldGVzLWludC1vci1zdHJpbmciOnRydWV9LCJkZXNjcmlwdGlvbiI6IlJlcXVlc3RzIGRlc2NyaWJlcyB0aGUgbWluaW11bSBhbW91bnQgb2YgY29tcHV0ZSByZXNvdXJjZXMgcmVxdWlyZWQuIElmIFJlcXVlc3RzIGlzIG9taXR0ZWQgZm9yIGEgY29udGFpbmVyLCBpdCBkZWZhdWx0cyB0byBMaW1pdHMgaWYgdGhhdCBpcyBleHBsaWNpdGx5IHNwZWNpZmllZCwgb3RoZXJ3aXNlIHRvIGFuIGltcGxlbWVudGF0aW9uLWRlZmluZWQgdmFsdWUuIFJlcXVlc3RzIGNhbm5vdCBleGNlZWQgTGltaXRzLiBNb3JlIGluZm86IGh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL2NvbmNlcHRzL2NvbmZpZ3VyYXRpb24vbWFuYWdlLXJlc291cmNlcy1jb250YWluZXJzLyIsInR5cGUiOiJvYmplY3QifX0sInR5cGUiOiJvYmplY3QifSwiZGVzY3JpcHRpb24iOiJSZXNvdXJjZXMgZm9sbG93cyB0aGUgY29udmVudGlvbnMgb2YgYW5kIGlzIG1hcHBlZCB0byBDZXBoQ2x1c3Rlci5TcGVjLlJlc291cmNlcyIsInR5cGUiOiJvYmplY3QifSwic3RvcmFnZURldmljZVNldHMiOnsiaXRlbXMiOnsiZGVzY3JpcHRpb24iOiJTdG9yYWdlRGV2aWNlU2V0IGRlZmluZXMgYSBzZXQgb2Ygc3RvcmFnZSBkZXZpY2VzLiBJdCBjb25maWd1cmVzIHRoZSBTdG9yYWdlQ2xhc3NEZXZpY2VTZXRzIGZpZWxkIGluIFJvb2stQ2VwaC4iLCJwcm9wZXJ0aWVzIjp7ImNvbmZpZyI6eyJkZXNjcmlwdGlvbiI6IlN0b3JhZ2VEZXZpY2VTZXRDb25maWcgZGVmaW5lcyBDZXBoIE9TRCBzcGVjaWZpYyBjb25maWcgb3B0aW9ucyBmb3IgdGhlIFN0b3JhZ2VEZXZpY2VTZXQiLCJwcm9wZXJ0aWVzIjp7InR1bmVGYXN0RGV2aWNlQ2xhc3MiOnsiZGVzY3JpcHRpb24iOiJUdW5lRmFzdERldmljZUNsYXNzIHR1bmVzIHRoZSBPU0Qgd2hlbiBydW5uaW5nIG9uIGEgZmFzdCBEZXZpY2UgQ2xhc3MiLCJ0eXBlIjoiYm9vbGVhbiJ9LCJ0dW5lU2xvd0RldmljZUNsYXNzIjp7ImRlc2NyaXB0aW9uIjoiVHVuZVNsb3dEZXZpY2VDbGFzcyB0dW5lcyB0aGUgT1NEIHdoZW4gcnVubmluZyBvbiBhIHNsb3cgRGV2aWNlIENsYXNzIiwidHlwZSI6ImJvb2xlYW4ifX0sInR5cGUiOiJvYmplY3QifSwiY291bnQiOnsiZGVzY3JpcHRpb24iOiJDb3VudCBpcyB0aGUgbnVtYmVyIG9mIGRldmljZXMgaW4gZWFjaCBTdG9yYWdlQ2xhc3NEZXZpY2VTZXQiLCJtaW5pbXVtIjoxLCJ0eXBlIjoiaW50ZWdlciJ9LCJkYXRhUFZDVGVtcGxhdGUiOnsiZGVzY3JpcHRpb24iOiJQZXJzaXN0ZW50Vm9sdW1lQ2xhaW0gaXMgYSB1c2VyJ3MgcmVxdWVzdCBmb3IgYW5kIGNsYWltIHRvIGEgcGVyc2lzdGVudCB2b2x1bWUiLCJwcm9wZXJ0aWVzIjp7ImFwaVZlcnNpb24iOnsiZGVzY3JpcHRpb24iOiJBUElWZXJzaW9uIGRlZmluZXMgdGhlIHZlcnNpb25lZCBzY2hlbWEgb2YgdGhpcyByZXByZXNlbnRhdGlvbiBvZiBhbiBvYmplY3QuIFNlcnZlcnMgc2hvdWxkIGNvbnZlcnQgcmVjb2duaXplZCBzY2hlbWFzIHRvIHRoZSBsYXRlc3QgaW50ZXJuYWwgdmFsdWUsIGFuZCBtYXkgcmVqZWN0IHVucmVjb2duaXplZCB2YWx1ZXMuIE1vcmUgaW5mbzogaHR0cHM6Ly9naXQuazhzLmlvL2NvbW11bml0eS9jb250cmlidXRvcnMvZGV2ZWwvc2lnLWFyY2hpdGVjdHVyZS9hcGktY29udmVudGlvbnMubWQjcmVzb3VyY2VzIiwidHlwZSI6InN0cmluZyJ9LCJraW5kIjp7ImRlc2NyaXB0aW9uIjoiS2luZCBpcyBhIHN0cmluZyB2YWx1ZSByZXByZXNlbnRpbmcgdGhlIFJFU1QgcmVzb3VyY2UgdGhpcyBvYmplY3QgcmVwcmVzZW50cy4gU2VydmVycyBtYXkgaW5mZXIgdGhpcyBmcm9tIHRoZSBlbmRwb2ludCB0aGUgY2xpZW50IHN1Ym1pdHMgcmVxdWVzdHMgdG8uIENhbm5vdCBiZSB1cGRhdGVkLiBJbiBDYW1lbENhc2UuIE1vcmUgaW5mbzogaHR0cHM6Ly9naXQuazhzLmlvL2NvbW11bml0eS9jb250cmlidXRvcnMvZGV2ZWwvc2lnLWFyY2hpdGVjdHVyZS9hcGktY29udmVudGlvbnMubWQjdHlwZXMta2luZHMiLCJ0eXBlIjoic3RyaW5nIn0sIm1ldGFkYXRhIjp7ImRlc2NyaXB0aW9uIjoiU3RhbmRhcmQgb2JqZWN0J3MgbWV0YWRhdGEuIE1vcmUgaW5mbzogaHR0cHM6Ly9naXQuazhzLmlvL2NvbW11bml0eS9jb250cmlidXRvcnMvZGV2ZWwvc2lnLWFyY2hpdGVjdHVyZS9hcGktY29udmVudGlvbnMubWQjbWV0YWRhdGEiLCJwcm9wZXJ0aWVzIjp7ImFubm90YXRpb25zIjp7ImFkZGl0aW9uYWxQcm9wZXJ0aWVzIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6Im9iamVjdCJ9LCJmaW5hbGl6ZXJzIjp7Iml0ZW1zIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6ImFycmF5In0sImxhYmVscyI6eyJhZGRpdGlvbmFsUHJvcGVydGllcyI6eyJ0eXBlIjoic3RyaW5nIn0sInR5cGUiOiJvYmplY3QifSwibmFtZSI6eyJ0eXBlIjoic3RyaW5nIn0sIm5hbWVzcGFjZSI6eyJ0eXBlIjoic3RyaW5nIn19LCJ0eXBlIjoib2JqZWN0In0sInNwZWMiOnsiZGVzY3JpcHRpb24iOiJzcGVjIGRlZmluZXMgdGhlIGRlc2lyZWQgY2hhcmFjdGVyaXN0aWNzIG9mIGEgdm9sdW1lIHJlcXVlc3RlZCBieSBhIHBvZCBhdXRob3IuIE1vcmUgaW5mbzogaHR0cHM6Ly9rdWJlcm5ldGVzLmlvL2RvY3MvY29uY2VwdHMvc3RvcmFnZS9wZXJzaXN0ZW50LXZvbHVtZXMjcGVyc2lzdGVudHZvbHVtZWNsYWltcyIsInByb3BlcnRpZXMiOnsiYWNjZXNzTW9kZXMiOnsiZGVzY3JpcHRpb24iOiJhY2Nlc3NNb2RlcyBjb250YWlucyB0aGUgZGVzaXJlZCBhY2Nlc3MgbW9kZXMgdGhlIHZvbHVtZSBzaG91bGQgaGF2ZS4gTW9yZSBpbmZvOiBodHRwczovL2t1YmVybmV0ZXMuaW8vZG9jcy9jb25jZXB0cy9zdG9yYWdlL3BlcnNpc3RlbnQtdm9sdW1lcyNhY2Nlc3MtbW9kZXMtMSIsIml0ZW1zIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6ImFycmF5In0sImRhdGFTb3VyY2UiOnsiZGVzY3JpcHRpb24iOiJkYXRhU291cmNlIGZpZWxkIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgZWl0aGVyOiAqIEFuIGV4aXN0aW5nIFZvbHVtZVNuYXBzaG90IG9iamVjdCAoc25hcHNob3Quc3RvcmFnZS5rOHMuaW8vVm9sdW1lU25hcHNob3QpICogQW4gZXhpc3RpbmcgUFZDIChQZXJzaXN0ZW50Vm9sdW1lQ2xhaW0pIElmIHRoZSBwcm92aXNpb25lciBvciBhbiBleHRlcm5hbCBjb250cm9sbGVyIGNhbiBzdXBwb3J0IHRoZSBzcGVjaWZpZWQgZGF0YSBzb3VyY2UsIGl0IHdpbGwgY3JlYXRlIGEgbmV3IHZvbHVtZSBiYXNlZCBvbiB0aGUgY29udGVudHMgb2YgdGhlIHNwZWNpZmllZCBkYXRhIHNvdXJjZS4gV2hlbiB0aGUgQW55Vm9sdW1lRGF0YVNvdXJjZSBmZWF0dXJlIGdhdGUgaXMgZW5hYmxlZCwgZGF0YVNvdXJjZSBjb250ZW50cyB3aWxsIGJlIGNvcGllZCB0byBkYXRhU291cmNlUmVmLCBhbmQgZGF0YVNvdXJjZVJlZiBjb250ZW50cyB3aWxsIGJlIGNvcGllZCB0byBkYXRhU291cmNlIHdoZW4gZGF0YVNvdXJjZVJlZi5uYW1lc3BhY2UgaXMgbm90IHNwZWNpZmllZC4gSWYgdGhlIG5hbWVzcGFjZSBpcyBzcGVjaWZpZWQsIHRoZW4gZGF0YVNvdXJjZVJlZiB3aWxsIG5vdCBiZSBjb3BpZWQgdG8gZGF0YVNvdXJjZS4iLCJwcm9wZXJ0aWVzIjp7ImFwaUdyb3VwIjp7ImRlc2NyaXB0aW9uIjoiQVBJR3JvdXAgaXMgdGhlIGdyb3VwIGZvciB0aGUgcmVzb3VyY2UgYmVpbmcgcmVmZXJlbmNlZC4gSWYgQVBJR3JvdXAgaXMgbm90IHNwZWNpZmllZCwgdGhlIHNwZWNpZmllZCBLaW5kIG11c3QgYmUgaW4gdGhlIGNvcmUgQVBJIGdyb3VwLiBGb3IgYW55IG90aGVyIHRoaXJkLXBhcnR5IHR5cGVzLCBBUElHcm91cCBpcyByZXF1aXJlZC4iLCJ0eXBlIjoic3RyaW5nIn0sImtpbmQiOnsiZGVzY3JpcHRpb24iOiJLaW5kIGlzIHRoZSB0eXBlIG9mIHJlc291cmNlIGJlaW5nIHJlZmVyZW5jZWQiLCJ0eXBlIjoic3RyaW5nIn0sIm5hbWUiOnsiZGVzY3JpcHRpb24iOiJOYW1lIGlzIHRoZSBuYW1lIG9mIHJlc291cmNlIGJlaW5nIHJlZmVyZW5jZWQiLCJ0eXBlIjoic3RyaW5nIn19LCJyZXF1aXJlZCI6WyJraW5kIiwibmFtZSJdLCJ0eXBlIjoib2JqZWN0IiwieC1rdWJlcm5ldGVzLW1hcC10eXBlIjoiYXRvbWljIn0sImRhdGFTb3VyY2VSZWYiOnsiZGVzY3JpcHRpb24iOiJkYXRhU291cmNlUmVmIHNwZWNpZmllcyB0aGUgb2JqZWN0IGZyb20gd2hpY2ggdG8gcG9wdWxhdGUgdGhlIHZvbHVtZSB3aXRoIGRhdGEsIGlmIGEgbm9uLWVtcHR5IHZvbHVtZSBpcyBkZXNpcmVkLiBUaGlzIG1heSBiZSBhbnkgb2JqZWN0IGZyb20gYSBub24tZW1wdHkgQVBJIGdyb3VwIChub24gY29yZSBvYmplY3QpIG9yIGEgUGVyc2lzdGVudFZvbHVtZUNsYWltIG9iamVjdC4gV2hlbiB0aGlzIGZpZWxkIGlzIHNwZWNpZmllZCwgdm9sdW1lIGJpbmRpbmcgd2lsbCBvbmx5IHN1Y2NlZWQgaWYgdGhlIHR5cGUgb2YgdGhlIHNwZWNpZmllZCBvYmplY3QgbWF0Y2hlcyBzb21lIGluc3RhbGxlZCB2b2x1bWUgcG9wdWxhdG9yIG9yIGR5bmFtaWMgcHJvdmlzaW9uZXIuIFRoaXMgZmllbGQgd2lsbCByZXBsYWNlIHRoZSBmdW5jdGlvbmFsaXR5IG9mIHRoZSBkYXRhU291cmNlIGZpZWxkIGFuZCBhcyBzdWNoIGlmIGJvdGggZmllbGRzIGFyZSBub24tZW1wdHksIHRoZXkgbXVzdCBoYXZlIHRoZSBzYW1lIHZhbHVlLiBGb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHksIHdoZW4gbmFtZXNwYWNlIGlzbid0IHNwZWNpZmllZCBpbiBkYXRhU291cmNlUmVmLCBib3RoIGZpZWxkcyAoZGF0YVNvdXJjZSBhbmQgZGF0YVNvdXJjZVJlZikgd2lsbCBiZSBzZXQgdG8gdGhlIHNhbWUgdmFsdWUgYXV0b21hdGljYWxseSBpZiBvbmUgb2YgdGhlbSBpcyBlbXB0eSBhbmQgdGhlIG90aGVyIGlzIG5vbi1lbXB0eS4gV2hlbiBuYW1lc3BhY2UgaXMgc3BlY2lmaWVkIGluIGRhdGFTb3VyY2VSZWYsIGRhdGFTb3VyY2UgaXNuJ3Qgc2V0IHRvIHRoZSBzYW1lIHZhbHVlIGFuZCBtdXN0IGJlIGVtcHR5LiBUaGVyZSBhcmUgdGhyZWUgaW1wb3J0YW50IGRpZmZlcmVuY2VzIGJldHdlZW4gZGF0YVNvdXJjZSBhbmQgZGF0YVNvdXJjZVJlZjogKiBXaGlsZSBkYXRhU291cmNlIG9ubHkgYWxsb3dzIHR3byBzcGVjaWZpYyB0eXBlcyBvZiBvYmplY3RzLCBkYXRhU291cmNlUmVmIGFsbG93cyBhbnkgbm9uLWNvcmUgb2JqZWN0LCBhcyB3ZWxsIGFzIFBlcnNpc3RlbnRWb2x1bWVDbGFpbSBvYmplY3RzLiAqIFdoaWxlIGRhdGFTb3VyY2UgaWdub3JlcyBkaXNhbGxvd2VkIHZhbHVlcyAoZHJvcHBpbmcgdGhlbSksIGRhdGFTb3VyY2VSZWYgcHJlc2VydmVzIGFsbCB2YWx1ZXMsIGFuZCBnZW5lcmF0ZXMgYW4gZXJyb3IgaWYgYSBkaXNhbGxvd2VkIHZhbHVlIGlzIHNwZWNpZmllZC4gKiBXaGlsZSBkYXRhU291cmNlIG9ubHkgYWxsb3dzIGxvY2FsIG9iamVjdHMsIGRhdGFTb3VyY2VSZWYgYWxsb3dzIG9iamVjdHMgaW4gYW55IG5hbWVzcGFjZXMuIChCZXRhKSBVc2luZyB0aGlzIGZpZWxkIHJlcXVpcmVzIHRoZSBBbnlWb2x1bWVEYXRhU291cmNlIGZlYXR1cmUgZ2F0ZSB0byBiZSBlbmFibGVkLiAoQWxwaGEpIFVzaW5nIHRoZSBuYW1lc3BhY2UgZmllbGQgb2YgZGF0YVNvdXJjZVJlZiByZXF1aXJlcyB0aGUgQ3Jvc3NOYW1lc3BhY2VWb2x1bWVEYXRhU291cmNlIGZlYXR1cmUgZ2F0ZSB0byBiZSBlbmFibGVkLiIsInByb3BlcnRpZXMiOnsiYXBpR3JvdXAiOnsiZGVzY3JpcHRpb24iOiJBUElHcm91cCBpcyB0aGUgZ3JvdXAgZm9yIHRoZSByZXNvdXJjZSBiZWluZyByZWZlcmVuY2VkLiBJZiBBUElHcm91cCBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgc3BlY2lmaWVkIEtpbmQgbXVzdCBiZSBpbiB0aGUgY29yZSBBUEkgZ3JvdXAuIEZvciBhbnkgb3RoZXIgdGhpcmQtcGFydHkgdHlwZXMsIEFQSUdyb3VwIGlzIHJlcXVpcmVkLiIsInR5cGUiOiJzdHJpbmcifSwia2luZCI6eyJkZXNjcmlwdGlvbiI6IktpbmQgaXMgdGhlIHR5cGUgb2YgcmVzb3VyY2UgYmVpbmcgcmVmZXJlbmNlZCIsInR5cGUiOiJzdHJpbmcifSwibmFtZSI6eyJkZXNjcmlwdGlvbiI6Ik5hbWUgaXMgdGhlIG5hbWUgb2YgcmVzb3VyY2UgYmVpbmcgcmVmZXJlbmNlZCIsInR5cGUiOiJzdHJpbmcifSwibmFtZXNwYWNlIjp7ImRlc2NyaXB0aW9uIjoiTmFtZXNwYWNlIGlzIHRoZSBuYW1lc3BhY2Ugb2YgcmVzb3VyY2UgYmVpbmcgcmVmZXJlbmNlZCBOb3RlIHRoYXQgd2hlbiBhIG5hbWVzcGFjZSBpcyBzcGVjaWZpZWQsIGEgZ2F0ZXdheS5uZXR3b3JraW5nLms4cy5pby9SZWZlcmVuY2VHcmFudCBvYmplY3QgaXMgcmVxdWlyZWQgaW4gdGhlIHJlZmVyZW50IG5hbWVzcGFjZSB0byBhbGxvdyB0aGF0IG5hbWVzcGFjZSdzIG93bmVyIHRvIGFjY2VwdCB0aGUgcmVmZXJlbmNlLiBTZWUgdGhlIFJlZmVyZW5jZUdyYW50IGRvY3VtZW50YXRpb24gZm9yIGRldGFpbHMuIChBbHBoYSkgVGhpcyBmaWVsZCByZXF1aXJlcyB0aGUgQ3Jvc3NOYW1lc3BhY2VWb2x1bWVEYXRhU291cmNlIGZlYXR1cmUgZ2F0ZSB0byBiZSBlbmFibGVkLiIsInR5cGUiOiJzdHJpbmcifX0sInJlcXVpcmVkIjpbImtpbmQiLCJuYW1lIl0sInR5cGUiOiJvYmplY3QifSwicmVzb3VyY2VzIjp7ImRlc2NyaXB0aW9uIjoicmVzb3VyY2VzIHJlcHJlc2VudHMgdGhlIG1pbmltdW0gcmVzb3VyY2VzIHRoZSB2b2x1bWUgc2hvdWxkIGhhdmUuIElmIFJlY292ZXJWb2x1bWVFeHBhbnNpb25GYWlsdXJlIGZlYXR1cmUgaXMgZW5hYmxlZCB1c2VycyBhcmUgYWxsb3dlZCB0byBzcGVjaWZ5IHJlc291cmNlIHJlcXVpcmVtZW50cyB0aGF0IGFyZSBsb3dlciB0aGFuIHByZXZpb3VzIHZhbHVlIGJ1dCBtdXN0IHN0aWxsIGJlIGhpZ2hlciB0aGFuIGNhcGFjaXR5IHJlY29yZGVkIGluIHRoZSBzdGF0dXMgZmllbGQgb2YgdGhlIGNsYWltLiBNb3JlIGluZm86IGh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL2NvbmNlcHRzL3N0b3JhZ2UvcGVyc2lzdGVudC12b2x1bWVzI3Jlc291cmNlcyIsInByb3BlcnRpZXMiOnsibGltaXRzIjp7ImFkZGl0aW9uYWxQcm9wZXJ0aWVzIjp7ImFueU9mIjpbeyJ0eXBlIjoiaW50ZWdlciJ9LHsidHlwZSI6InN0cmluZyJ9XSwicGF0dGVybiI6Il4oXFwrfC0pPygoWzAtOV0rKFxcLlswLTldKik/KXwoXFwuWzAtOV0rKSkoKFtLTUdUUEVdaSl8W251bWtNR1RQRV18KFtlRV0oXFwrfC0pPygoWzAtOV0rKFxcLlswLTldKik/KXwoXFwuWzAtOV0rKSkpKT8kIiwieC1rdWJlcm5ldGVzLWludC1vci1zdHJpbmciOnRydWV9LCJkZXNjcmlwdGlvbiI6IkxpbWl0cyBkZXNjcmliZXMgdGhlIG1heGltdW0gYW1vdW50IG9mIGNvbXB1dGUgcmVzb3VyY2VzIGFsbG93ZWQuIE1vcmUgaW5mbzogaHR0cHM6Ly9rdWJlcm5ldGVzLmlvL2RvY3MvY29uY2VwdHMvY29uZmlndXJhdGlvbi9tYW5hZ2UtcmVzb3VyY2VzLWNvbnRhaW5lcnMvIiwidHlwZSI6Im9iamVjdCJ9LCJyZXF1ZXN0cyI6eyJhZGRpdGlvbmFsUHJvcGVydGllcyI6eyJhbnlPZiI6W3sidHlwZSI6ImludGVnZXIifSx7InR5cGUiOiJzdHJpbmcifV0sInBhdHRlcm4iOiJeKFxcK3wtKT8oKFswLTldKyhcXC5bMC05XSopPyl8KFxcLlswLTldKykpKChbS01HVFBFXWkpfFtudW1rTUdUUEVdfChbZUVdKFxcK3wtKT8oKFswLTldKyhcXC5bMC05XSopPyl8KFxcLlswLTldKykpKSk/JCIsIngta3ViZXJuZXRlcy1pbnQtb3Itc3RyaW5nIjp0cnVlfSwiZGVzY3JpcHRpb24iOiJSZXF1ZXN0cyBkZXNjcmliZXMgdGhlIG1pbmltdW0gYW1vdW50IG9mIGNvbXB1dGUgcmVzb3VyY2VzIHJlcXVpcmVkLiBJZiBSZXF1ZXN0cyBpcyBvbWl0dGVkIGZvciBhIGNvbnRhaW5lciwgaXQgZGVmYXVsdHMgdG8gTGltaXRzIGlmIHRoYXQgaXMgZXhwbGljaXRseSBzcGVjaWZpZWQsIG90aGVyd2lzZSB0byBhbiBpbXBsZW1lbnRhdGlvbi1kZWZpbmVkIHZhbHVlLiBSZXF1ZXN0cyBjYW5ub3QgZXhjZWVkIExpbWl0cy4gTW9yZSBpbmZvOiBodHRwczovL2t1YmVybmV0ZXMuaW8vZG9jcy9jb25jZXB0cy9jb25maWd1cmF0aW9uL21hbmFnZS1yZXNvdXJjZXMtY29udGFpbmVycy8iLCJ0eXBlIjoib2JqZWN0In19LCJ0eXBlIjoib2JqZWN0In0sInNlbGVjdG9yIjp7ImRlc2NyaXB0aW9uIjoic2VsZWN0b3IgaXMgYSBsYWJlbCBxdWVyeSBvdmVyIHZvbHVtZXMgdG8gY29uc2lkZXIgZm9yIGJpbmRpbmcuIiwicHJvcGVydGllcyI6eyJtYXRjaEV4cHJlc3Npb25zIjp7ImRlc2NyaXB0aW9uIjoibWF0Y2hFeHByZXNzaW9ucyBpcyBhIGxpc3Qgb2YgbGFiZWwgc2VsZWN0b3IgcmVxdWlyZW1lbnRzLiBUaGUgcmVxdWlyZW1lbnRzIGFyZSBBTkRlZC4iLCJpdGVtcyI6eyJkZXNjcmlwdGlvbiI6IkEgbGFiZWwgc2VsZWN0b3IgcmVxdWlyZW1lbnQgaXMgYSBzZWxlY3RvciB0aGF0IGNvbnRhaW5zIHZhbHVlcywgYSBrZXksIGFuZCBhbiBvcGVyYXRvciB0aGF0IHJlbGF0ZXMgdGhlIGtleSBhbmQgdmFsdWVzLiIsInByb3BlcnRpZXMiOnsia2V5Ijp7ImRlc2NyaXB0aW9uIjoia2V5IGlzIHRoZSBsYWJlbCBrZXkgdGhhdCB0aGUgc2VsZWN0b3IgYXBwbGllcyB0by4iLCJ0eXBlIjoic3RyaW5nIn0sIm9wZXJhdG9yIjp7ImRlc2NyaXB0aW9uIjoib3BlcmF0b3IgcmVwcmVzZW50cyBhIGtleSdzIHJlbGF0aW9uc2hpcCB0byBhIHNldCBvZiB2YWx1ZXMuIFZhbGlkIG9wZXJhdG9ycyBhcmUgSW4sIE5vdEluLCBFeGlzdHMgYW5kIERvZXNOb3RFeGlzdC4iLCJ0eXBlIjoic3RyaW5nIn0sInZhbHVlcyI6eyJkZXNjcmlwdGlvbiI6InZhbHVlcyBpcyBhbiBhcnJheSBvZiBzdHJpbmcgdmFsdWVzLiBJZiB0aGUgb3BlcmF0b3IgaXMgSW4gb3IgTm90SW4sIHRoZSB2YWx1ZXMgYXJyYXkgbXVzdCBiZSBub24tZW1wdHkuIElmIHRoZSBvcGVyYXRvciBpcyBFeGlzdHMgb3IgRG9lc05vdEV4aXN0LCB0aGUgdmFsdWVzIGFycmF5IG11c3QgYmUgZW1wdHkuIFRoaXMgYXJyYXkgaXMgcmVwbGFjZWQgZHVyaW5nIGEgc3RyYXRlZ2ljIG1lcmdlIHBhdGNoLiIsIml0ZW1zIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6ImFycmF5In19LCJyZXF1aXJlZCI6WyJrZXkiLCJvcGVyYXRvciJdLCJ0eXBlIjoib2JqZWN0In0sInR5cGUiOiJhcnJheSJ9LCJtYXRjaExhYmVscyI6eyJhZGRpdGlvbmFsUHJvcGVydGllcyI6eyJ0eXBlIjoic3RyaW5nIn0sImRlc2NyaXB0aW9uIjoibWF0Y2hMYWJlbHMgaXMgYSBtYXAgb2Yge2tleSx2YWx1ZX0gcGFpcnMuIEEgc2luZ2xlIHtrZXksdmFsdWV9IGluIHRoZSBtYXRjaExhYmVscyBtYXAgaXMgZXF1aXZhbGVudCB0byBhbiBlbGVtZW50IG9mIG1hdGNoRXhwcmVzc2lvbnMsIHdob3NlIGtleSBmaWVsZCBpcyBcImtleVwiLCB0aGUgb3BlcmF0b3IgaXMgXCJJblwiLCBhbmQgdGhlIHZhbHVlcyBhcnJheSBjb250YWlucyBvbmx5IFwidmFsdWVcIi4gVGhlIHJlcXVpcmVtZW50cyBhcmUgQU5EZWQuIiwidHlwZSI6Im9iamVjdCJ9fSwidHlwZSI6Im9iamVjdCIsIngta3ViZXJuZXRlcy1tYXAtdHlwZSI6ImF0b21pYyJ9LCJzdG9yYWdlQ2xhc3NOYW1lIjp7ImRlc2NyaXB0aW9uIjoic3RvcmFnZUNsYXNzTmFtZSBpcyB0aGUgbmFtZSBvZiB0aGUgU3RvcmFnZUNsYXNzIHJlcXVpcmVkIGJ5IHRoZSBjbGFpbS4gTW9yZSBpbmZvOiBodHRwczovL2t1YmVybmV0ZXMuaW8vZG9jcy9jb25jZXB0cy9zdG9yYWdlL3BlcnNpc3RlbnQtdm9sdW1lcyNjbGFzcy0xIiwidHlwZSI6InN0cmluZyJ9LCJ2b2x1bWVBdHRyaWJ1dGVzQ2xhc3NOYW1lIjp7ImRlc2NyaXB0aW9uIjoidm9sdW1lQXR0cmlidXRlc0NsYXNzTmFtZSBtYXkgYmUgdXNlZCB0byBzZXQgdGhlIFZvbHVtZUF0dHJpYnV0ZXNDbGFzcyB1c2VkIGJ5IHRoaXMgY2xhaW0uIElmIHNwZWNpZmllZCwgdGhlIENTSSBkcml2ZXIgd2lsbCBjcmVhdGUgb3IgdXBkYXRlIHRoZSB2b2x1bWUgd2l0aCB0aGUgYXR0cmlidXRlcyBkZWZpbmVkIGluIHRoZSBjb3JyZXNwb25kaW5nIFZvbHVtZUF0dHJpYnV0ZXNDbGFzcy4gVGhpcyBoYXMgYSBkaWZmZXJlbnQgcHVycG9zZSB0aGFuIHN0b3JhZ2VDbGFzc05hbWUsIGl0IGNhbiBiZSBjaGFuZ2VkIGFmdGVyIHRoZSBjbGFpbSBpcyBjcmVhdGVkLiBBbiBlbXB0eSBzdHJpbmcgdmFsdWUgbWVhbnMgdGhhdCBubyBWb2x1bWVBdHRyaWJ1dGVzQ2xhc3Mgd2lsbCBiZSBhcHBsaWVkIHRvIHRoZSBjbGFpbSBidXQgaXQncyBub3QgYWxsb3dlZCB0byByZXNldCB0aGlzIGZpZWxkIHRvIGVtcHR5IHN0cmluZyBvbmNlIGl0IGlzIHNldC4gSWYgdW5zcGVjaWZpZWQgYW5kIHRoZSBQZXJzaXN0ZW50Vm9sdW1lQ2xhaW0gaXMgdW5ib3VuZCwgdGhlIGRlZmF1bHQgVm9sdW1lQXR0cmlidXRlc0NsYXNzIHdpbGwgYmUgc2V0IGJ5IHRoZSBwZXJzaXN0ZW50dm9sdW1lIGNvbnRyb2xsZXIgaWYgaXQgZXhpc3RzLiBJZiB0aGUgcmVzb3VyY2UgcmVmZXJyZWQgdG8gYnkgdm9sdW1lQXR0cmlidXRlc0NsYXNzIGRvZXMgbm90IGV4aXN0LCB0aGlzIFBlcnNpc3RlbnRWb2x1bWVDbGFpbSB3aWxsIGJlIHNldCB0byBhIFBlbmRpbmcgc3RhdGUsIGFzIHJlZmxlY3RlZCBieSB0aGUgbW9kaWZ5Vm9sdW1lU3RhdHVzIGZpZWxkLCB1bnRpbCBzdWNoIGFzIGEgcmVzb3VyY2UgZXhpc3RzLiBNb3JlIGluZm86IGh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL2NvbmNlcHRzL3N0b3JhZ2UvcGVyc2lzdGVudC12b2x1bWVzI3ZvbHVtZWF0dHJpYnV0ZXNjbGFzcyAoQWxwaGEpIFVzaW5nIHRoaXMgZmllbGQgcmVxdWlyZXMgdGhlIFZvbHVtZUF0dHJpYnV0ZXNDbGFzcyBmZWF0dXJlIGdhdGUgdG8gYmUgZW5hYmxlZC4iLCJ0eXBlIjoic3RyaW5nIn0sInZvbHVtZU1vZGUiOnsiZGVzY3JpcHRpb24iOiJ2b2x1bWVNb2RlIGRlZmluZXMgd2hhdCB0eXBlIG9mIHZvbHVtZSBpcyByZXF1aXJlZCBieSB0aGUgY2xhaW0uIFZhbHVlIG9mIEZpbGVzeXN0ZW0gaXMgaW1wbGllZCB3aGVuIG5vdCBpbmNsdWRlZCBpbiBjbGFpbSBzcGVjLiIsInR5cGUiOiJzdHJpbmcifSwidm9sdW1lTmFtZSI6eyJkZXNjcmlwdGlvbiI6InZvbHVtZU5hbWUgaXMgdGhlIGJpbmRpbmcgcmVmZXJlbmNlIHRvIHRoZSBQZXJzaXN0ZW50Vm9sdW1lIGJhY2tpbmcgdGhpcyBjbGFpbS4iLCJ0eXBlIjoic3RyaW5nIn19LCJ0eXBlIjoib2JqZWN0In0sInN0YXR1cyI6eyJkZXNjcmlwdGlvbiI6InN0YXR1cyByZXByZXNlbnRzIHRoZSBjdXJyZW50IGluZm9ybWF0aW9uL3N0YXR1cyBvZiBhIHBlcnNpc3RlbnQgdm9sdW1lIGNsYWltLiBSZWFkLW9ubHkuIE1vcmUgaW5mbzogaHR0cHM6Ly9rdWJlcm5ldGVzLmlvL2RvY3MvY29uY2VwdHMvc3RvcmFnZS9wZXJzaXN0ZW50LXZvbHVtZXMjcGVyc2lzdGVudHZvbHVtZWNsYWltcyIsInByb3BlcnRpZXMiOnsiYWNjZXNzTW9kZXMiOnsiZGVzY3JpcHRpb24iOiJhY2Nlc3NNb2RlcyBjb250YWlucyB0aGUgYWN0dWFsIGFjY2VzcyBtb2RlcyB0aGUgdm9sdW1lIGJhY2tpbmcgdGhlIFBWQyBoYXMuIE1vcmUgaW5mbzogaHR0cHM6Ly9rdWJlcm5ldGVzLmlvL2RvY3MvY29uY2VwdHMvc3RvcmFnZS9wZXJzaXN0ZW50LXZvbHVtZXMjYWNjZXNzLW1vZGVzLTEiLCJpdGVtcyI6eyJ0eXBlIjoic3RyaW5nIn0sInR5cGUiOiJhcnJheSJ9LCJhbGxvY2F0ZWRSZXNvdXJjZVN0YXR1c2VzIjp7ImFkZGl0aW9uYWxQcm9wZXJ0aWVzIjp7ImRlc2NyaXB0aW9uIjoiV2hlbiBhIGNvbnRyb2xsZXIgcmVjZWl2ZXMgcGVyc2lzdGVudHZvbHVtZSBjbGFpbSB1cGRhdGUgd2l0aCBDbGFpbVJlc291cmNlU3RhdHVzIGZvciBhIHJlc291cmNlIHRoYXQgaXQgZG9lcyBub3QgcmVjb2duaXplcywgdGhlbiBpdCBzaG91bGQgaWdub3JlIHRoYXQgdXBkYXRlIGFuZCBsZXQgb3RoZXIgY29udHJvbGxlcnMgaGFuZGxlIGl0LiIsInR5cGUiOiJzdHJpbmcifSwiZGVzY3JpcHRpb24iOiJhbGxvY2F0ZWRSZXNvdXJjZVN0YXR1c2VzIHN0b3JlcyBzdGF0dXMgb2YgcmVzb3VyY2UgYmVpbmcgcmVzaXplZCBmb3IgdGhlIGdpdmVuIFBWQy4gS2V5IG5hbWVzIGZvbGxvdyBzdGFuZGFyZCBLdWJlcm5ldGVzIGxhYmVsIHN5bnRheC4gVmFsaWQgdmFsdWVzIGFyZSBlaXRoZXI6ICogVW4tcHJlZml4ZWQga2V5czogLSBzdG9yYWdlIC0gdGhlIGNhcGFjaXR5IG9mIHRoZSB2b2x1bWUuICogQ3VzdG9tIHJlc291cmNlcyBtdXN0IHVzZSBpbXBsZW1lbnRhdGlvbi1kZWZpbmVkIHByZWZpeGVkIG5hbWVzIHN1Y2ggYXMgXCJleGFtcGxlLmNvbS9teS1jdXN0b20tcmVzb3VyY2VcIiBBcGFydCBmcm9tIGFib3ZlIHZhbHVlcyAtIGtleXMgdGhhdCBhcmUgdW5wcmVmaXhlZCBvciBoYXZlIGt1YmVybmV0ZXMuaW8gcHJlZml4IGFyZSBjb25zaWRlcmVkIHJlc2VydmVkIGFuZCBoZW5jZSBtYXkgbm90IGJlIHVzZWQuIFxuIENsYWltUmVzb3VyY2VTdGF0dXMgY2FuIGJlIGluIGFueSBvZiBmb2xsb3dpbmcgc3RhdGVzOiAtIENvbnRyb2xsZXJSZXNpemVJblByb2dyZXNzOiBTdGF0ZSBzZXQgd2hlbiByZXNpemUgY29udHJvbGxlciBzdGFydHMgcmVzaXppbmcgdGhlIHZvbHVtZSBpbiBjb250cm9sLXBsYW5lLiAtIENvbnRyb2xsZXJSZXNpemVGYWlsZWQ6IFN0YXRlIHNldCB3aGVuIHJlc2l6ZSBoYXMgZmFpbGVkIGluIHJlc2l6ZSBjb250cm9sbGVyIHdpdGggYSB0ZXJtaW5hbCBlcnJvci4gLSBOb2RlUmVzaXplUGVuZGluZzogU3RhdGUgc2V0IHdoZW4gcmVzaXplIGNvbnRyb2xsZXIgaGFzIGZpbmlzaGVkIHJlc2l6aW5nIHRoZSB2b2x1bWUgYnV0IGZ1cnRoZXIgcmVzaXppbmcgb2Ygdm9sdW1lIGlzIG5lZWRlZCBvbiB0aGUgbm9kZS4gLSBOb2RlUmVzaXplSW5Qcm9ncmVzczogU3RhdGUgc2V0IHdoZW4ga3ViZWxldCBzdGFydHMgcmVzaXppbmcgdGhlIHZvbHVtZS4gLSBOb2RlUmVzaXplRmFpbGVkOiBTdGF0ZSBzZXQgd2hlbiByZXNpemluZyBoYXMgZmFpbGVkIGluIGt1YmVsZXQgd2l0aCBhIHRlcm1pbmFsIGVycm9yLiBUcmFuc2llbnQgZXJyb3JzIGRvbid0IHNldCBOb2RlUmVzaXplRmFpbGVkLiBGb3IgZXhhbXBsZTogaWYgZXhwYW5kaW5nIGEgUFZDIGZvciBtb3JlIGNhcGFjaXR5IC0gdGhpcyBmaWVsZCBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgc3RhdGVzOiAtIHB2Yy5zdGF0dXMuYWxsb2NhdGVkUmVzb3VyY2VTdGF0dXNbJ3N0b3JhZ2UnXSA9IFwiQ29udHJvbGxlclJlc2l6ZUluUHJvZ3Jlc3NcIiAtIHB2Yy5zdGF0dXMuYWxsb2NhdGVkUmVzb3VyY2VTdGF0dXNbJ3N0b3JhZ2UnXSA9IFwiQ29udHJvbGxlclJlc2l6ZUZhaWxlZFwiIC0gcHZjLnN0YXR1cy5hbGxvY2F0ZWRSZXNvdXJjZVN0YXR1c1snc3RvcmFnZSddID0gXCJOb2RlUmVzaXplUGVuZGluZ1wiIC0gcHZjLnN0YXR1cy5hbGxvY2F0ZWRSZXNvdXJjZVN0YXR1c1snc3RvcmFnZSddID0gXCJOb2RlUmVzaXplSW5Qcm9ncmVzc1wiIC0gcHZjLnN0YXR1cy5hbGxvY2F0ZWRSZXNvdXJjZVN0YXR1c1snc3RvcmFnZSddID0gXCJOb2RlUmVzaXplRmFpbGVkXCIgV2hlbiB0aGlzIGZpZWxkIGlzIG5vdCBzZXQsIGl0IG1lYW5zIHRoYXQgbm8gcmVzaXplIG9wZXJhdGlvbiBpcyBpbiBwcm9ncmVzcyBmb3IgdGhlIGdpdmVuIFBWQy4gXG4gQSBjb250cm9sbGVyIHRoYXQgcmVjZWl2ZXMgUFZDIHVwZGF0ZSB3aXRoIHByZXZpb3VzbHkgdW5rbm93biByZXNvdXJjZU5hbWUgb3IgQ2xhaW1SZXNvdXJjZVN0YXR1cyBzaG91bGQgaWdub3JlIHRoZSB1cGRhdGUgZm9yIHRoZSBwdXJwb3NlIGl0IHdhcyBkZXNpZ25lZC4gRm9yIGV4YW1wbGUgLSBhIGNvbnRyb2xsZXIgdGhhdCBvbmx5IGlzIHJlc3BvbnNpYmxlIGZvciByZXNpemluZyBjYXBhY2l0eSBvZiB0aGUgdm9sdW1lLCBzaG91bGQgaWdub3JlIFBWQyB1cGRhdGVzIHRoYXQgY2hhbmdlIG90aGVyIHZhbGlkIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggUFZDLiBcbiBUaGlzIGlzIGFuIGFscGhhIGZpZWxkIGFuZCByZXF1aXJlcyBlbmFibGluZyBSZWNvdmVyVm9sdW1lRXhwYW5zaW9uRmFpbHVyZSBmZWF0dXJlLiIsInR5cGUiOiJvYmplY3QiLCJ4LWt1YmVybmV0ZXMtbWFwLXR5cGUiOiJncmFudWxhciJ9LCJhbGxvY2F0ZWRSZXNvdXJjZXMiOnsiYWRkaXRpb25hbFByb3BlcnRpZXMiOnsiYW55T2YiOlt7InR5cGUiOiJpbnRlZ2VyIn0seyJ0eXBlIjoic3RyaW5nIn1dLCJwYXR0ZXJuIjoiXihcXCt8LSk/KChbMC05XSsoXFwuWzAtOV0qKT8pfChcXC5bMC05XSspKSgoW0tNR1RQRV1pKXxbbnVta01HVFBFXXwoW2VFXShcXCt8LSk/KChbMC05XSsoXFwuWzAtOV0qKT8pfChcXC5bMC05XSspKSkpPyQiLCJ4LWt1YmVybmV0ZXMtaW50LW9yLXN0cmluZyI6dHJ1ZX0sImRlc2NyaXB0aW9uIjoiYWxsb2NhdGVkUmVzb3VyY2VzIHRyYWNrcyB0aGUgcmVzb3VyY2VzIGFsbG9jYXRlZCB0byBhIFBWQyBpbmNsdWRpbmcgaXRzIGNhcGFjaXR5LiBLZXkgbmFtZXMgZm9sbG93IHN0YW5kYXJkIEt1YmVybmV0ZXMgbGFiZWwgc3ludGF4LiBWYWxpZCB2YWx1ZXMgYXJlIGVpdGhlcjogKiBVbi1wcmVmaXhlZCBrZXlzOiAtIHN0b3JhZ2UgLSB0aGUgY2FwYWNpdHkgb2YgdGhlIHZvbHVtZS4gKiBDdXN0b20gcmVzb3VyY2VzIG11c3QgdXNlIGltcGxlbWVudGF0aW9uLWRlZmluZWQgcHJlZml4ZWQgbmFtZXMgc3VjaCBhcyBcImV4YW1wbGUuY29tL215LWN1c3RvbS1yZXNvdXJjZVwiIEFwYXJ0IGZyb20gYWJvdmUgdmFsdWVzIC0ga2V5cyB0aGF0IGFyZSB1bnByZWZpeGVkIG9yIGhhdmUga3ViZXJuZXRlcy5pbyBwcmVmaXggYXJlIGNvbnNpZGVyZWQgcmVzZXJ2ZWQgYW5kIGhlbmNlIG1heSBub3QgYmUgdXNlZC4gXG4gQ2FwYWNpdHkgcmVwb3J0ZWQgaGVyZSBtYXkgYmUgbGFyZ2VyIHRoYW4gdGhlIGFjdHVhbCBjYXBhY2l0eSB3aGVuIGEgdm9sdW1lIGV4cGFuc2lvbiBvcGVyYXRpb24gaXMgcmVxdWVzdGVkLiBGb3Igc3RvcmFnZSBxdW90YSwgdGhlIGxhcmdlciB2YWx1ZSBmcm9tIGFsbG9jYXRlZFJlc291cmNlcyBhbmQgUFZDLnNwZWMucmVzb3VyY2VzIGlzIHVzZWQuIElmIGFsbG9jYXRlZFJlc291cmNlcyBpcyBub3Qgc2V0LCBQVkMuc3BlYy5yZXNvdXJjZXMgYWxvbmUgaXMgdXNlZCBmb3IgcXVvdGEgY2FsY3VsYXRpb24uIElmIGEgdm9sdW1lIGV4cGFuc2lvbiBjYXBhY2l0eSByZXF1ZXN0IGlzIGxvd2VyZWQsIGFsbG9jYXRlZFJlc291cmNlcyBpcyBvbmx5IGxvd2VyZWQgaWYgdGhlcmUgYXJlIG5vIGV4cGFuc2lvbiBvcGVyYXRpb25zIGluIHByb2dyZXNzIGFuZCBpZiB0aGUgYWN0dWFsIHZvbHVtZSBjYXBhY2l0eSBpcyBlcXVhbCBvciBsb3dlciB0aGFuIHRoZSByZXF1ZXN0ZWQgY2FwYWNpdHkuIFxuIEEgY29udHJvbGxlciB0aGF0IHJlY2VpdmVzIFBWQyB1cGRhdGUgd2l0aCBwcmV2aW91c2x5IHVua25vd24gcmVzb3VyY2VOYW1lIHNob3VsZCBpZ25vcmUgdGhlIHVwZGF0ZSBmb3IgdGhlIHB1cnBvc2UgaXQgd2FzIGRlc2lnbmVkLiBGb3IgZXhhbXBsZSAtIGEgY29udHJvbGxlciB0aGF0IG9ubHkgaXMgcmVzcG9uc2libGUgZm9yIHJlc2l6aW5nIGNhcGFjaXR5IG9mIHRoZSB2b2x1bWUsIHNob3VsZCBpZ25vcmUgUFZDIHVwZGF0ZXMgdGhhdCBjaGFuZ2Ugb3RoZXIgdmFsaWQgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCBQVkMuIFxuIFRoaXMgaXMgYW4gYWxwaGEgZmllbGQgYW5kIHJlcXVpcmVzIGVuYWJsaW5nIFJlY292ZXJWb2x1bWVFeHBhbnNpb25GYWlsdXJlIGZlYXR1cmUuIiwidHlwZSI6Im9iamVjdCJ9LCJjYXBhY2l0eSI6eyJhZGRpdGlvbmFsUHJvcGVydGllcyI6eyJhbnlPZiI6W3sidHlwZSI6ImludGVnZXIifSx7InR5cGUiOiJzdHJpbmcifV0sInBhdHRlcm4iOiJeKFxcK3wtKT8oKFswLTldKyhcXC5bMC05XSopPyl8KFxcLlswLTldKykpKChbS01HVFBFXWkpfFtudW1rTUdUUEVdfChbZUVdKFxcK3wtKT8oKFswLTldKyhcXC5bMC05XSopPyl8KFxcLlswLTldKykpKSk/JCIsIngta3ViZXJuZXRlcy1pbnQtb3Itc3RyaW5nIjp0cnVlfSwiZGVzY3JpcHRpb24iOiJjYXBhY2l0eSByZXByZXNlbnRzIHRoZSBhY3R1YWwgcmVzb3VyY2VzIG9mIHRoZSB1bmRlcmx5aW5nIHZvbHVtZS4iLCJ0eXBlIjoib2JqZWN0In0sImNvbmRpdGlvbnMiOnsiZGVzY3JpcHRpb24iOiJjb25kaXRpb25zIGlzIHRoZSBjdXJyZW50IENvbmRpdGlvbiBvZiBwZXJzaXN0ZW50IHZvbHVtZSBjbGFpbS4gSWYgdW5kZXJseWluZyBwZXJzaXN0ZW50IHZvbHVtZSBpcyBiZWluZyByZXNpemVkIHRoZW4gdGhlIENvbmRpdGlvbiB3aWxsIGJlIHNldCB0byAnUmVzaXplU3RhcnRlZCcuIiwiaXRlbXMiOnsiZGVzY3JpcHRpb24iOiJQZXJzaXN0ZW50Vm9sdW1lQ2xhaW1Db25kaXRpb24gY29udGFpbnMgZGV0YWlscyBhYm91dCBzdGF0ZSBvZiBwdmMiLCJwcm9wZXJ0aWVzIjp7Imxhc3RQcm9iZVRpbWUiOnsiZGVzY3JpcHRpb24iOiJsYXN0UHJvYmVUaW1lIGlzIHRoZSB0aW1lIHdlIHByb2JlZCB0aGUgY29uZGl0aW9uLiIsImZvcm1hdCI6ImRhdGUtdGltZSIsInR5cGUiOiJzdHJpbmcifSwibGFzdFRyYW5zaXRpb25UaW1lIjp7ImRlc2NyaXB0aW9uIjoibGFzdFRyYW5zaXRpb25UaW1lIGlzIHRoZSB0aW1lIHRoZSBjb25kaXRpb24gdHJhbnNpdGlvbmVkIGZyb20gb25lIHN0YXR1cyB0byBhbm90aGVyLiIsImZvcm1hdCI6ImRhdGUtdGltZSIsInR5cGUiOiJzdHJpbmcifSwibWVzc2FnZSI6eyJkZXNjcmlwdGlvbiI6Im1lc3NhZ2UgaXMgdGhlIGh1bWFuLXJlYWRhYmxlIG1lc3NhZ2UgaW5kaWNhdGluZyBkZXRhaWxzIGFib3V0IGxhc3QgdHJhbnNpdGlvbi4iLCJ0eXBlIjoic3RyaW5nIn0sInJlYXNvbiI6eyJkZXNjcmlwdGlvbiI6InJlYXNvbiBpcyBhIHVuaXF1ZSwgdGhpcyBzaG91bGQgYmUgYSBzaG9ydCwgbWFjaGluZSB1bmRlcnN0YW5kYWJsZSBzdHJpbmcgdGhhdCBnaXZlcyB0aGUgcmVhc29uIGZvciBjb25kaXRpb24ncyBsYXN0IHRyYW5zaXRpb24uIElmIGl0IHJlcG9ydHMgXCJSZXNpemVTdGFydGVkXCIgdGhhdCBtZWFucyB0aGUgdW5kZXJseWluZyBwZXJzaXN0ZW50IHZvbHVtZSBpcyBiZWluZyByZXNpemVkLiIsInR5cGUiOiJzdHJpbmcifSwic3RhdHVzIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6eyJkZXNjcmlwdGlvbiI6IlBlcnNpc3RlbnRWb2x1bWVDbGFpbUNvbmRpdGlvblR5cGUgaXMgYSB2YWxpZCB2YWx1ZSBvZiBQZXJzaXN0ZW50Vm9sdW1lQ2xhaW1Db25kaXRpb24uVHlwZSIsInR5cGUiOiJzdHJpbmcifX0sInJlcXVpcmVkIjpbInN0YXR1cyIsInR5cGUiXSwidHlwZSI6Im9iamVjdCJ9LCJ0eXBlIjoiYXJyYXkifSwiY3VycmVudFZvbHVtZUF0dHJpYnV0ZXNDbGFzc05hbWUiOnsiZGVzY3JpcHRpb24iOiJjdXJyZW50Vm9sdW1lQXR0cmlidXRlc0NsYXNzTmFtZSBpcyB0aGUgY3VycmVudCBuYW1lIG9mIHRoZSBWb2x1bWVBdHRyaWJ1dGVzQ2xhc3MgdGhlIFBWQyBpcyB1c2luZy4gV2hlbiB1bnNldCwgdGhlcmUgaXMgbm8gVm9sdW1lQXR0cmlidXRlQ2xhc3MgYXBwbGllZCB0byB0aGlzIFBlcnNpc3RlbnRWb2x1bWVDbGFpbSBUaGlzIGlzIGFuIGFscGhhIGZpZWxkIGFuZCByZXF1aXJlcyBlbmFibGluZyBWb2x1bWVBdHRyaWJ1dGVzQ2xhc3MgZmVhdHVyZS4iLCJ0eXBlIjoic3RyaW5nIn0sIm1vZGlmeVZvbHVtZVN0YXR1cyI6eyJkZXNjcmlwdGlvbiI6Ik1vZGlmeVZvbHVtZVN0YXR1cyByZXByZXNlbnRzIHRoZSBzdGF0dXMgb2JqZWN0IG9mIENvbnRyb2xsZXJNb2RpZnlWb2x1bWUgb3BlcmF0aW9uLiBXaGVuIHRoaXMgaXMgdW5zZXQsIHRoZXJlIGlzIG5vIE1vZGlmeVZvbHVtZSBvcGVyYXRpb24gYmVpbmcgYXR0ZW1wdGVkLiBUaGlzIGlzIGFuIGFscGhhIGZpZWxkIGFuZCByZXF1aXJlcyBlbmFibGluZyBWb2x1bWVBdHRyaWJ1dGVzQ2xhc3MgZmVhdHVyZS4iLCJwcm9wZXJ0aWVzIjp7InN0YXR1cyI6eyJkZXNjcmlwdGlvbiI6InN0YXR1cyBpcyB0aGUgc3RhdHVzIG9mIHRoZSBDb250cm9sbGVyTW9kaWZ5Vm9sdW1lIG9wZXJhdGlvbi4gSXQgY2FuIGJlIGluIGFueSBvZiBmb2xsb3dpbmcgc3RhdGVzOiAtIFBlbmRpbmcgUGVuZGluZyBpbmRpY2F0ZXMgdGhhdCB0aGUgUGVyc2lzdGVudFZvbHVtZUNsYWltIGNhbm5vdCBiZSBtb2RpZmllZCBkdWUgdG8gdW5tZXQgcmVxdWlyZW1lbnRzLCBzdWNoIGFzIHRoZSBzcGVjaWZpZWQgVm9sdW1lQXR0cmlidXRlc0NsYXNzIG5vdCBleGlzdGluZy4gLSBJblByb2dyZXNzIEluUHJvZ3Jlc3MgaW5kaWNhdGVzIHRoYXQgdGhlIHZvbHVtZSBpcyBiZWluZyBtb2RpZmllZC4gLSBJbmZlYXNpYmxlIEluZmVhc2libGUgaW5kaWNhdGVzIHRoYXQgdGhlIHJlcXVlc3QgaGFzIGJlZW4gcmVqZWN0ZWQgYXMgaW52YWxpZCBieSB0aGUgQ1NJIGRyaXZlci4gVG8gcmVzb2x2ZSB0aGUgZXJyb3IsIGEgdmFsaWQgVm9sdW1lQXR0cmlidXRlc0NsYXNzIG5lZWRzIHRvIGJlIHNwZWNpZmllZC4gTm90ZTogTmV3IHN0YXR1c2VzIGNhbiBiZSBhZGRlZCBpbiB0aGUgZnV0dXJlLiBDb25zdW1lcnMgc2hvdWxkIGNoZWNrIGZvciB1bmtub3duIHN0YXR1c2VzIGFuZCBmYWlsIGFwcHJvcHJpYXRlbHkuIiwidHlwZSI6InN0cmluZyJ9LCJ0YXJnZXRWb2x1bWVBdHRyaWJ1dGVzQ2xhc3NOYW1lIjp7ImRlc2NyaXB0aW9uIjoidGFyZ2V0Vm9sdW1lQXR0cmlidXRlc0NsYXNzTmFtZSBpcyB0aGUgbmFtZSBvZiB0aGUgVm9sdW1lQXR0cmlidXRlc0NsYXNzIHRoZSBQVkMgY3VycmVudGx5IGJlaW5nIHJlY29uY2lsZWQiLCJ0eXBlIjoic3RyaW5nIn19LCJyZXF1aXJlZCI6WyJzdGF0dXMiXSwidHlwZSI6Im9iamVjdCJ9LCJwaGFzZSI6eyJkZXNjcmlwdGlvbiI6InBoYXNlIHJlcHJlc2VudHMgdGhlIGN1cnJlbnQgcGhhc2Ugb2YgUGVyc2lzdGVudFZvbHVtZUNsYWltLiIsInR5cGUiOiJzdHJpbmcifX0sInR5cGUiOiJvYmplY3QifX0sInR5cGUiOiJvYmplY3QifSwiZGV2aWNlQ2xhc3MiOnsiZGVzY3JpcHRpb24iOiJEZXZpY2VDbGFzcyBpcyBhbiBvcHRpb25hbCwgZmluZS1ncmFpbmVkIHByb3BlcnR5IG9mIERldmljZVR5cGUuIElmIG5vbiBlbXB0eSwgaXQgZGVmaW5lcyB0aGUgJ2NydXNoRGV2aWNlQ2xhc3MnIHZhbHVlIGFzIHVzZWQgYnkgY2VwaCdzIENSVVNIIG1hcC4gSWYgZW1wdHksIHRoZW4gb3BlcmF0b3Igd2lsbCBzZXQgJ2NydXNoRGV2aWNlQ2xhc3MnIHRvIFNTRCBhbmQgJ1R1bmVGYXN0RGV2aWNlQ2xhc3MnIHRvIHRydWUiLCJ0eXBlIjoic3RyaW5nIn0sImRldmljZVR5cGUiOnsiZGVzY3JpcHRpb24iOiJEZXZpY2VUeXBlIGlzIHRoZSB2YWx1ZSBvZiBkZXZpY2UgdHlwZSBpbiB0aGlzIFN0b3JhZ2VEZXZpY2VTZXQuIEl0IGNhbiBoYXZlIG9uZSBvZiB0aGUgdGhyZWUgdmFsdWVzIChTU0QsIEhERCwgTlZNZSkiLCJlbnVtIjpbIlNTRCIsInNzZCIsIkhERCIsImhkZCIsIk5WTWUiLCJOVk1FIiwibnZtZSJdLCJ0eXBlIjoic3RyaW5nIn0sImluaXRpYWxXZWlnaHQiOnsiZGVzY3JpcHRpb24iOiJJbml0aWFsV2VpZ2h0IGlzIGFuIG9wdGlvbmFsIGV4cGxpY2l0IE9TRCB3ZWlnaHQgdmFsdWUgaW4gVGlCIHVuaXRzLiBJZiBub24gZW1wdHksIGl0IGRlZmluZXMgdGhlICdDcnVzaEluaXRpYWxXZWlnaHQnIHZhbHVlIHdoaWNoIGlzIGFzc2lnbmVkIHRvIGNlcGggT1NEIHVwb24gaW5pdCIsInBhdHRlcm4iOiJeKFswLTldKlsuXSk/WzAtOV0rKFRpW0JdKSQiLCJ0eXBlIjoic3RyaW5nIn0sIm1ldGFkYXRhUFZDVGVtcGxhdGUiOnsiZGVzY3JpcHRpb24iOiJQZXJzaXN0ZW50Vm9sdW1lQ2xhaW0gaXMgYSB1c2VyJ3MgcmVxdWVzdCBmb3IgYW5kIGNsYWltIHRvIGEgcGVyc2lzdGVudCB2b2x1bWUiLCJwcm9wZXJ0aWVzIjp7ImFwaVZlcnNpb24iOnsiZGVzY3JpcHRpb24iOiJBUElWZXJzaW9uIGRlZmluZXMgdGhlIHZlcnNpb25lZCBzY2hlbWEgb2YgdGhpcyByZXByZXNlbnRhdGlvbiBvZiBhbiBvYmplY3QuIFNlcnZlcnMgc2hvdWxkIGNvbnZlcnQgcmVjb2duaXplZCBzY2hlbWFzIHRvIHRoZSBsYXRlc3QgaW50ZXJuYWwgdmFsdWUsIGFuZCBtYXkgcmVqZWN0IHVucmVjb2duaXplZCB2YWx1ZXMuIE1vcmUgaW5mbzogaHR0cHM6Ly9naXQuazhzLmlvL2NvbW11bml0eS9jb250cmlidXRvcnMvZGV2ZWwvc2lnLWFyY2hpdGVjdHVyZS9hcGktY29udmVudGlvbnMubWQjcmVzb3VyY2VzIiwidHlwZSI6InN0cmluZyJ9LCJraW5kIjp7ImRlc2NyaXB0aW9uIjoiS2luZCBpcyBhIHN0cmluZyB2YWx1ZSByZXByZXNlbnRpbmcgdGhlIFJFU1QgcmVzb3VyY2UgdGhpcyBvYmplY3QgcmVwcmVzZW50cy4gU2VydmVycyBtYXkgaW5mZXIgdGhpcyBmcm9tIHRoZSBlbmRwb2ludCB0aGUgY2xpZW50IHN1Ym1pdHMgcmVxdWVzdHMgdG8uIENhbm5vdCBiZSB1cGRhdGVkLiBJbiBDYW1lbENhc2UuIE1vcmUgaW5mbzogaHR0cHM6Ly9naXQuazhzLmlvL2NvbW11bml0eS9jb250cmlidXRvcnMvZGV2ZWwvc2lnLWFyY2hpdGVjdHVyZS9hcGktY29udmVudGlvbnMubWQjdHlwZXMta2luZHMiLCJ0eXBlIjoic3RyaW5nIn0sIm1ldGFkYXRhIjp7ImRlc2NyaXB0aW9uIjoiU3RhbmRhcmQgb2JqZWN0J3MgbWV0YWRhdGEuIE1vcmUgaW5mbzogaHR0cHM6Ly9naXQuazhzLmlvL2NvbW11bml0eS9jb250cmlidXRvcnMvZGV2ZWwvc2lnLWFyY2hpdGVjdHVyZS9hcGktY29udmVudGlvbnMubWQjbWV0YWRhdGEiLCJwcm9wZXJ0aWVzIjp7ImFubm90YXRpb25zIjp7ImFkZGl0aW9uYWxQcm9wZXJ0aWVzIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6Im9iamVjdCJ9LCJmaW5hbGl6ZXJzIjp7Iml0ZW1zIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6ImFycmF5In0sImxhYmVscyI6eyJhZGRpdGlvbmFsUHJvcGVydGllcyI6eyJ0eXBlIjoic3RyaW5nIn0sInR5cGUiOiJvYmplY3QifSwibmFtZSI6eyJ0eXBlIjoic3RyaW5nIn0sIm5hbWVzcGFjZSI6eyJ0eXBlIjoic3RyaW5nIn19LCJ0eXBlIjoib2JqZWN0In0sInNwZWMiOnsiZGVzY3JpcHRpb24iOiJzcGVjIGRlZmluZXMgdGhlIGRlc2lyZWQgY2hhcmFjdGVyaXN0aWNzIG9mIGEgdm9sdW1lIHJlcXVlc3RlZCBieSBhIHBvZCBhdXRob3IuIE1vcmUgaW5mbzogaHR0cHM6Ly9rdWJlcm5ldGVzLmlvL2RvY3MvY29uY2VwdHMvc3RvcmFnZS9wZXJzaXN0ZW50LXZvbHVtZXMjcGVyc2lzdGVudHZvbHVtZWNsYWltcyIsInByb3BlcnRpZXMiOnsiYWNjZXNzTW9kZXMiOnsiZGVzY3JpcHRpb24iOiJhY2Nlc3NNb2RlcyBjb250YWlucyB0aGUgZGVzaXJlZCBhY2Nlc3MgbW9kZXMgdGhlIHZvbHVtZSBzaG91bGQgaGF2ZS4gTW9yZSBpbmZvOiBodHRwczovL2t1YmVybmV0ZXMuaW8vZG9jcy9jb25jZXB0cy9zdG9yYWdlL3BlcnNpc3RlbnQtdm9sdW1lcyNhY2Nlc3MtbW9kZXMtMSIsIml0ZW1zIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6ImFycmF5In0sImRhdGFTb3VyY2UiOnsiZGVzY3JpcHRpb24iOiJkYXRhU291cmNlIGZpZWxkIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgZWl0aGVyOiAqIEFuIGV4aXN0aW5nIFZvbHVtZVNuYXBzaG90IG9iamVjdCAoc25hcHNob3Quc3RvcmFnZS5rOHMuaW8vVm9sdW1lU25hcHNob3QpICogQW4gZXhpc3RpbmcgUFZDIChQZXJzaXN0ZW50Vm9sdW1lQ2xhaW0pIElmIHRoZSBwcm92aXNpb25lciBvciBhbiBleHRlcm5hbCBjb250cm9sbGVyIGNhbiBzdXBwb3J0IHRoZSBzcGVjaWZpZWQgZGF0YSBzb3VyY2UsIGl0IHdpbGwgY3JlYXRlIGEgbmV3IHZvbHVtZSBiYXNlZCBvbiB0aGUgY29udGVudHMgb2YgdGhlIHNwZWNpZmllZCBkYXRhIHNvdXJjZS4gV2hlbiB0aGUgQW55Vm9sdW1lRGF0YVNvdXJjZSBmZWF0dXJlIGdhdGUgaXMgZW5hYmxlZCwgZGF0YVNvdXJjZSBjb250ZW50cyB3aWxsIGJlIGNvcGllZCB0byBkYXRhU291cmNlUmVmLCBhbmQgZGF0YVNvdXJjZVJlZiBjb250ZW50cyB3aWxsIGJlIGNvcGllZCB0byBkYXRhU291cmNlIHdoZW4gZGF0YVNvdXJjZVJlZi5uYW1lc3BhY2UgaXMgbm90IHNwZWNpZmllZC4gSWYgdGhlIG5hbWVzcGFjZSBpcyBzcGVjaWZpZWQsIHRoZW4gZGF0YVNvdXJjZVJlZiB3aWxsIG5vdCBiZSBjb3BpZWQgdG8gZGF0YVNvdXJjZS4iLCJwcm9wZXJ0aWVzIjp7ImFwaUdyb3VwIjp7ImRlc2NyaXB0aW9uIjoiQVBJR3JvdXAgaXMgdGhlIGdyb3VwIGZvciB0aGUgcmVzb3VyY2UgYmVpbmcgcmVmZXJlbmNlZC4gSWYgQVBJR3JvdXAgaXMgbm90IHNwZWNpZmllZCwgdGhlIHNwZWNpZmllZCBLaW5kIG11c3QgYmUgaW4gdGhlIGNvcmUgQVBJIGdyb3VwLiBGb3IgYW55IG90aGVyIHRoaXJkLXBhcnR5IHR5cGVzLCBBUElHcm91cCBpcyByZXF1aXJlZC4iLCJ0eXBlIjoic3RyaW5nIn0sImtpbmQiOnsiZGVzY3JpcHRpb24iOiJLaW5kIGlzIHRoZSB0eXBlIG9mIHJlc291cmNlIGJlaW5nIHJlZmVyZW5jZWQiLCJ0eXBlIjoic3RyaW5nIn0sIm5hbWUiOnsiZGVzY3JpcHRpb24iOiJOYW1lIGlzIHRoZSBuYW1lIG9mIHJlc291cmNlIGJlaW5nIHJlZmVyZW5jZWQiLCJ0eXBlIjoic3RyaW5nIn19LCJyZXF1aXJlZCI6WyJraW5kIiwibmFtZSJdLCJ0eXBlIjoib2JqZWN0IiwieC1rdWJlcm5ldGVzLW1hcC10eXBlIjoiYXRvbWljIn0sImRhdGFTb3VyY2VSZWYiOnsiZGVzY3JpcHRpb24iOiJkYXRhU291cmNlUmVmIHNwZWNpZmllcyB0aGUgb2JqZWN0IGZyb20gd2hpY2ggdG8gcG9wdWxhdGUgdGhlIHZvbHVtZSB3aXRoIGRhdGEsIGlmIGEgbm9uLWVtcHR5IHZvbHVtZSBpcyBkZXNpcmVkLiBUaGlzIG1heSBiZSBhbnkgb2JqZWN0IGZyb20gYSBub24tZW1wdHkgQVBJIGdyb3VwIChub24gY29yZSBvYmplY3QpIG9yIGEgUGVyc2lzdGVudFZvbHVtZUNsYWltIG9iamVjdC4gV2hlbiB0aGlzIGZpZWxkIGlzIHNwZWNpZmllZCwgdm9sdW1lIGJpbmRpbmcgd2lsbCBvbmx5IHN1Y2NlZWQgaWYgdGhlIHR5cGUgb2YgdGhlIHNwZWNpZmllZCBvYmplY3QgbWF0Y2hlcyBzb21lIGluc3RhbGxlZCB2b2x1bWUgcG9wdWxhdG9yIG9yIGR5bmFtaWMgcHJvdmlzaW9uZXIuIFRoaXMgZmllbGQgd2lsbCByZXBsYWNlIHRoZSBmdW5jdGlvbmFsaXR5IG9mIHRoZSBkYXRhU291cmNlIGZpZWxkIGFuZCBhcyBzdWNoIGlmIGJvdGggZmllbGRzIGFyZSBub24tZW1wdHksIHRoZXkgbXVzdCBoYXZlIHRoZSBzYW1lIHZhbHVlLiBGb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHksIHdoZW4gbmFtZXNwYWNlIGlzbid0IHNwZWNpZmllZCBpbiBkYXRhU291cmNlUmVmLCBib3RoIGZpZWxkcyAoZGF0YVNvdXJjZSBhbmQgZGF0YVNvdXJjZVJlZikgd2lsbCBiZSBzZXQgdG8gdGhlIHNhbWUgdmFsdWUgYXV0b21hdGljYWxseSBpZiBvbmUgb2YgdGhlbSBpcyBlbXB0eSBhbmQgdGhlIG90aGVyIGlzIG5vbi1lbXB0eS4gV2hlbiBuYW1lc3BhY2UgaXMgc3BlY2lmaWVkIGluIGRhdGFTb3VyY2VSZWYsIGRhdGFTb3VyY2UgaXNuJ3Qgc2V0IHRvIHRoZSBzYW1lIHZhbHVlIGFuZCBtdXN0IGJlIGVtcHR5LiBUaGVyZSBhcmUgdGhyZWUgaW1wb3J0YW50IGRpZmZlcmVuY2VzIGJldHdlZW4gZGF0YVNvdXJjZSBhbmQgZGF0YVNvdXJjZVJlZjogKiBXaGlsZSBkYXRhU291cmNlIG9ubHkgYWxsb3dzIHR3byBzcGVjaWZpYyB0eXBlcyBvZiBvYmplY3RzLCBkYXRhU291cmNlUmVmIGFsbG93cyBhbnkgbm9uLWNvcmUgb2JqZWN0LCBhcyB3ZWxsIGFzIFBlcnNpc3RlbnRWb2x1bWVDbGFpbSBvYmplY3RzLiAqIFdoaWxlIGRhdGFTb3VyY2UgaWdub3JlcyBkaXNhbGxvd2VkIHZhbHVlcyAoZHJvcHBpbmcgdGhlbSksIGRhdGFTb3VyY2VSZWYgcHJlc2VydmVzIGFsbCB2YWx1ZXMsIGFuZCBnZW5lcmF0ZXMgYW4gZXJyb3IgaWYgYSBkaXNhbGxvd2VkIHZhbHVlIGlzIHNwZWNpZmllZC4gKiBXaGlsZSBkYXRhU291cmNlIG9ubHkgYWxsb3dzIGxvY2FsIG9iamVjdHMsIGRhdGFTb3VyY2VSZWYgYWxsb3dzIG9iamVjdHMgaW4gYW55IG5hbWVzcGFjZXMuIChCZXRhKSBVc2luZyB0aGlzIGZpZWxkIHJlcXVpcmVzIHRoZSBBbnlWb2x1bWVEYXRhU291cmNlIGZlYXR1cmUgZ2F0ZSB0byBiZSBlbmFibGVkLiAoQWxwaGEpIFVzaW5nIHRoZSBuYW1lc3BhY2UgZmllbGQgb2YgZGF0YVNvdXJjZVJlZiByZXF1aXJlcyB0aGUgQ3Jvc3NOYW1lc3BhY2VWb2x1bWVEYXRhU291cmNlIGZlYXR1cmUgZ2F0ZSB0byBiZSBlbmFibGVkLiIsInByb3BlcnRpZXMiOnsiYXBpR3JvdXAiOnsiZGVzY3JpcHRpb24iOiJBUElHcm91cCBpcyB0aGUgZ3JvdXAgZm9yIHRoZSByZXNvdXJjZSBiZWluZyByZWZlcmVuY2VkLiBJZiBBUElHcm91cCBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgc3BlY2lmaWVkIEtpbmQgbXVzdCBiZSBpbiB0aGUgY29yZSBBUEkgZ3JvdXAuIEZvciBhbnkgb3RoZXIgdGhpcmQtcGFydHkgdHlwZXMsIEFQSUdyb3VwIGlzIHJlcXVpcmVkLiIsInR5cGUiOiJzdHJpbmcifSwia2luZCI6eyJkZXNjcmlwdGlvbiI6IktpbmQgaXMgdGhlIHR5cGUgb2YgcmVzb3VyY2UgYmVpbmcgcmVmZXJlbmNlZCIsInR5cGUiOiJzdHJpbmcifSwibmFtZSI6eyJkZXNjcmlwdGlvbiI6Ik5hbWUgaXMgdGhlIG5hbWUgb2YgcmVzb3VyY2UgYmVpbmcgcmVmZXJlbmNlZCIsInR5cGUiOiJzdHJpbmcifSwibmFtZXNwYWNlIjp7ImRlc2NyaXB0aW9uIjoiTmFtZXNwYWNlIGlzIHRoZSBuYW1lc3BhY2Ugb2YgcmVzb3VyY2UgYmVpbmcgcmVmZXJlbmNlZCBOb3RlIHRoYXQgd2hlbiBhIG5hbWVzcGFjZSBpcyBzcGVjaWZpZWQsIGEgZ2F0ZXdheS5uZXR3b3JraW5nLms4cy5pby9SZWZlcmVuY2VHcmFudCBvYmplY3QgaXMgcmVxdWlyZWQgaW4gdGhlIHJlZmVyZW50IG5hbWVzcGFjZSB0byBhbGxvdyB0aGF0IG5hbWVzcGFjZSdzIG93bmVyIHRvIGFjY2VwdCB0aGUgcmVmZXJlbmNlLiBTZWUgdGhlIFJlZmVyZW5jZUdyYW50IGRvY3VtZW50YXRpb24gZm9yIGRldGFpbHMuIChBbHBoYSkgVGhpcyBmaWVsZCByZXF1aXJlcyB0aGUgQ3Jvc3NOYW1lc3BhY2VWb2x1bWVEYXRhU291cmNlIGZlYXR1cmUgZ2F0ZSB0byBiZSBlbmFibGVkLiIsInR5cGUiOiJzdHJpbmcifX0sInJlcXVpcmVkIjpbImtpbmQiLCJuYW1lIl0sInR5cGUiOiJvYmplY3QifSwicmVzb3VyY2VzIjp7ImRlc2NyaXB0aW9uIjoicmVzb3VyY2VzIHJlcHJlc2VudHMgdGhlIG1pbmltdW0gcmVzb3VyY2VzIHRoZSB2b2x1bWUgc2hvdWxkIGhhdmUuIElmIFJlY292ZXJWb2x1bWVFeHBhbnNpb25GYWlsdXJlIGZlYXR1cmUgaXMgZW5hYmxlZCB1c2VycyBhcmUgYWxsb3dlZCB0byBzcGVjaWZ5IHJlc291cmNlIHJlcXVpcmVtZW50cyB0aGF0IGFyZSBsb3dlciB0aGFuIHByZXZpb3VzIHZhbHVlIGJ1dCBtdXN0IHN0aWxsIGJlIGhpZ2hlciB0aGFuIGNhcGFjaXR5IHJlY29yZGVkIGluIHRoZSBzdGF0dXMgZmllbGQgb2YgdGhlIGNsYWltLiBNb3JlIGluZm86IGh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL2NvbmNlcHRzL3N0b3JhZ2UvcGVyc2lzdGVudC12b2x1bWVzI3Jlc291cmNlcyIsInByb3BlcnRpZXMiOnsibGltaXRzIjp7ImFkZGl0aW9uYWxQcm9wZXJ0aWVzIjp7ImFueU9mIjpbeyJ0eXBlIjoiaW50ZWdlciJ9LHsidHlwZSI6InN0cmluZyJ9XSwicGF0dGVybiI6Il4oXFwrfC0pPygoWzAtOV0rKFxcLlswLTldKik/KXwoXFwuWzAtOV0rKSkoKFtLTUdUUEVdaSl8W251bWtNR1RQRV18KFtlRV0oXFwrfC0pPygoWzAtOV0rKFxcLlswLTldKik/KXwoXFwuWzAtOV0rKSkpKT8kIiwieC1rdWJlcm5ldGVzLWludC1vci1zdHJpbmciOnRydWV9LCJkZXNjcmlwdGlvbiI6IkxpbWl0cyBkZXNjcmliZXMgdGhlIG1heGltdW0gYW1vdW50IG9mIGNvbXB1dGUgcmVzb3VyY2VzIGFsbG93ZWQuIE1vcmUgaW5mbzogaHR0cHM6Ly9rdWJlcm5ldGVzLmlvL2RvY3MvY29uY2VwdHMvY29uZmlndXJhdGlvbi9tYW5hZ2UtcmVzb3VyY2VzLWNvbnRhaW5lcnMvIiwidHlwZSI6Im9iamVjdCJ9LCJyZXF1ZXN0cyI6eyJhZGRpdGlvbmFsUHJvcGVydGllcyI6eyJhbnlPZiI6W3sidHlwZSI6ImludGVnZXIifSx7InR5cGUiOiJzdHJpbmcifV0sInBhdHRlcm4iOiJeKFxcK3wtKT8oKFswLTldKyhcXC5bMC05XSopPyl8KFxcLlswLTldKykpKChbS01HVFBFXWkpfFtudW1rTUdUUEVdfChbZUVdKFxcK3wtKT8oKFswLTldKyhcXC5bMC05XSopPyl8KFxcLlswLTldKykpKSk/JCIsIngta3ViZXJuZXRlcy1pbnQtb3Itc3RyaW5nIjp0cnVlfSwiZGVzY3JpcHRpb24iOiJSZXF1ZXN0cyBkZXNjcmliZXMgdGhlIG1pbmltdW0gYW1vdW50IG9mIGNvbXB1dGUgcmVzb3VyY2VzIHJlcXVpcmVkLiBJZiBSZXF1ZXN0cyBpcyBvbWl0dGVkIGZvciBhIGNvbnRhaW5lciwgaXQgZGVmYXVsdHMgdG8gTGltaXRzIGlmIHRoYXQgaXMgZXhwbGljaXRseSBzcGVjaWZpZWQsIG90aGVyd2lzZSB0byBhbiBpbXBsZW1lbnRhdGlvbi1kZWZpbmVkIHZhbHVlLiBSZXF1ZXN0cyBjYW5ub3QgZXhjZWVkIExpbWl0cy4gTW9yZSBpbmZvOiBodHRwczovL2t1YmVybmV0ZXMuaW8vZG9jcy9jb25jZXB0cy9jb25maWd1cmF0aW9uL21hbmFnZS1yZXNvdXJjZXMtY29udGFpbmVycy8iLCJ0eXBlIjoib2JqZWN0In19LCJ0eXBlIjoib2JqZWN0In0sInNlbGVjdG9yIjp7ImRlc2NyaXB0aW9uIjoic2VsZWN0b3IgaXMgYSBsYWJlbCBxdWVyeSBvdmVyIHZvbHVtZXMgdG8gY29uc2lkZXIgZm9yIGJpbmRpbmcuIiwicHJvcGVydGllcyI6eyJtYXRjaEV4cHJlc3Npb25zIjp7ImRlc2NyaXB0aW9uIjoibWF0Y2hFeHByZXNzaW9ucyBpcyBhIGxpc3Qgb2YgbGFiZWwgc2VsZWN0b3IgcmVxdWlyZW1lbnRzLiBUaGUgcmVxdWlyZW1lbnRzIGFyZSBBTkRlZC4iLCJpdGVtcyI6eyJkZXNjcmlwdGlvbiI6IkEgbGFiZWwgc2VsZWN0b3IgcmVxdWlyZW1lbnQgaXMgYSBzZWxlY3RvciB0aGF0IGNvbnRhaW5zIHZhbHVlcywgYSBrZXksIGFuZCBhbiBvcGVyYXRvciB0aGF0IHJlbGF0ZXMgdGhlIGtleSBhbmQgdmFsdWVzLiIsInByb3BlcnRpZXMiOnsia2V5Ijp7ImRlc2NyaXB0aW9uIjoia2V5IGlzIHRoZSBsYWJlbCBrZXkgdGhhdCB0aGUgc2VsZWN0b3IgYXBwbGllcyB0by4iLCJ0eXBlIjoic3RyaW5nIn0sIm9wZXJhdG9yIjp7ImRlc2NyaXB0aW9uIjoib3BlcmF0b3IgcmVwcmVzZW50cyBhIGtleSdzIHJlbGF0aW9uc2hpcCB0byBhIHNldCBvZiB2YWx1ZXMuIFZhbGlkIG9wZXJhdG9ycyBhcmUgSW4sIE5vdEluLCBFeGlzdHMgYW5kIERvZXNOb3RFeGlzdC4iLCJ0eXBlIjoic3RyaW5nIn0sInZhbHVlcyI6eyJkZXNjcmlwdGlvbiI6InZhbHVlcyBpcyBhbiBhcnJheSBvZiBzdHJpbmcgdmFsdWVzLiBJZiB0aGUgb3BlcmF0b3IgaXMgSW4gb3IgTm90SW4sIHRoZSB2YWx1ZXMgYXJyYXkgbXVzdCBiZSBub24tZW1wdHkuIElmIHRoZSBvcGVyYXRvciBpcyBFeGlzdHMgb3IgRG9lc05vdEV4aXN0LCB0aGUgdmFsdWVzIGFycmF5IG11c3QgYmUgZW1wdHkuIFRoaXMgYXJyYXkgaXMgcmVwbGFjZWQgZHVyaW5nIGEgc3RyYXRlZ2ljIG1lcmdlIHBhdGNoLiIsIml0ZW1zIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6ImFycmF5In19LCJyZXF1aXJlZCI6WyJrZXkiLCJvcGVyYXRvciJdLCJ0eXBlIjoib2JqZWN0In0sInR5cGUiOiJhcnJheSJ9LCJtYXRjaExhYmVscyI6eyJhZGRpdGlvbmFsUHJvcGVydGllcyI6eyJ0eXBlIjoic3RyaW5nIn0sImRlc2NyaXB0aW9uIjoibWF0Y2hMYWJlbHMgaXMgYSBtYXAgb2Yge2tleSx2YWx1ZX0gcGFpcnMuIEEgc2luZ2xlIHtrZXksdmFsdWV9IGluIHRoZSBtYXRjaExhYmVscyBtYXAgaXMgZXF1aXZhbGVudCB0byBhbiBlbGVtZW50IG9mIG1hdGNoRXhwcmVzc2lvbnMsIHdob3NlIGtleSBmaWVsZCBpcyBcImtleVwiLCB0aGUgb3BlcmF0b3IgaXMgXCJJblwiLCBhbmQgdGhlIHZhbHVlcyBhcnJheSBjb250YWlucyBvbmx5IFwidmFsdWVcIi4gVGhlIHJlcXVpcmVtZW50cyBhcmUgQU5EZWQuIiwidHlwZSI6Im9iamVjdCJ9fSwidHlwZSI6Im9iamVjdCIsIngta3ViZXJuZXRlcy1tYXAtdHlwZSI6ImF0b21pYyJ9LCJzdG9yYWdlQ2xhc3NOYW1lIjp7ImRlc2NyaXB0aW9uIjoic3RvcmFnZUNsYXNzTmFtZSBpcyB0aGUgbmFtZSBvZiB0aGUgU3RvcmFnZUNsYXNzIHJlcXVpcmVkIGJ5IHRoZSBjbGFpbS4gTW9yZSBpbmZvOiBodHRwczovL2t1YmVybmV0ZXMuaW8vZG9jcy9jb25jZXB0cy9zdG9yYWdlL3BlcnNpc3RlbnQtdm9sdW1lcyNjbGFzcy0xIiwidHlwZSI6InN0cmluZyJ9LCJ2b2x1bWVBdHRyaWJ1dGVzQ2xhc3NOYW1lIjp7ImRlc2NyaXB0aW9uIjoidm9sdW1lQXR0cmlidXRlc0NsYXNzTmFtZSBtYXkgYmUgdXNlZCB0byBzZXQgdGhlIFZvbHVtZUF0dHJpYnV0ZXNDbGFzcyB1c2VkIGJ5IHRoaXMgY2xhaW0uIElmIHNwZWNpZmllZCwgdGhlIENTSSBkcml2ZXIgd2lsbCBjcmVhdGUgb3IgdXBkYXRlIHRoZSB2b2x1bWUgd2l0aCB0aGUgYXR0cmlidXRlcyBkZWZpbmVkIGluIHRoZSBjb3JyZXNwb25kaW5nIFZvbHVtZUF0dHJpYnV0ZXNDbGFzcy4gVGhpcyBoYXMgYSBkaWZmZXJlbnQgcHVycG9zZSB0aGFuIHN0b3JhZ2VDbGFzc05hbWUsIGl0IGNhbiBiZSBjaGFuZ2VkIGFmdGVyIHRoZSBjbGFpbSBpcyBjcmVhdGVkLiBBbiBlbXB0eSBzdHJpbmcgdmFsdWUgbWVhbnMgdGhhdCBubyBWb2x1bWVBdHRyaWJ1dGVzQ2xhc3Mgd2lsbCBiZSBhcHBsaWVkIHRvIHRoZSBjbGFpbSBidXQgaXQncyBub3QgYWxsb3dlZCB0byByZXNldCB0aGlzIGZpZWxkIHRvIGVtcHR5IHN0cmluZyBvbmNlIGl0IGlzIHNldC4gSWYgdW5zcGVjaWZpZWQgYW5kIHRoZSBQZXJzaXN0ZW50Vm9sdW1lQ2xhaW0gaXMgdW5ib3VuZCwgdGhlIGRlZmF1bHQgVm9sdW1lQXR0cmlidXRlc0NsYXNzIHdpbGwgYmUgc2V0IGJ5IHRoZSBwZXJzaXN0ZW50dm9sdW1lIGNvbnRyb2xsZXIgaWYgaXQgZXhpc3RzLiBJZiB0aGUgcmVzb3VyY2UgcmVmZXJyZWQgdG8gYnkgdm9sdW1lQXR0cmlidXRlc0NsYXNzIGRvZXMgbm90IGV4aXN0LCB0aGlzIFBlcnNpc3RlbnRWb2x1bWVDbGFpbSB3aWxsIGJlIHNldCB0byBhIFBlbmRpbmcgc3RhdGUsIGFzIHJlZmxlY3RlZCBieSB0aGUgbW9kaWZ5Vm9sdW1lU3RhdHVzIGZpZWxkLCB1bnRpbCBzdWNoIGFzIGEgcmVzb3VyY2UgZXhpc3RzLiBNb3JlIGluZm86IGh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL2NvbmNlcHRzL3N0b3JhZ2UvcGVyc2lzdGVudC12b2x1bWVzI3ZvbHVtZWF0dHJpYnV0ZXNjbGFzcyAoQWxwaGEpIFVzaW5nIHRoaXMgZmllbGQgcmVxdWlyZXMgdGhlIFZvbHVtZUF0dHJpYnV0ZXNDbGFzcyBmZWF0dXJlIGdhdGUgdG8gYmUgZW5hYmxlZC4iLCJ0eXBlIjoic3RyaW5nIn0sInZvbHVtZU1vZGUiOnsiZGVzY3JpcHRpb24iOiJ2b2x1bWVNb2RlIGRlZmluZXMgd2hhdCB0eXBlIG9mIHZvbHVtZSBpcyByZXF1aXJlZCBieSB0aGUgY2xhaW0uIFZhbHVlIG9mIEZpbGVzeXN0ZW0gaXMgaW1wbGllZCB3aGVuIG5vdCBpbmNsdWRlZCBpbiBjbGFpbSBzcGVjLiIsInR5cGUiOiJzdHJpbmcifSwidm9sdW1lTmFtZSI6eyJkZXNjcmlwdGlvbiI6InZvbHVtZU5hbWUgaXMgdGhlIGJpbmRpbmcgcmVmZXJlbmNlIHRvIHRoZSBQZXJzaXN0ZW50Vm9sdW1lIGJhY2tpbmcgdGhpcyBjbGFpbS4iLCJ0eXBlIjoic3RyaW5nIn19LCJ0eXBlIjoib2JqZWN0In0sInN0YXR1cyI6eyJkZXNjcmlwdGlvbiI6InN0YXR1cyByZXByZXNlbnRzIHRoZSBjdXJyZW50IGluZm9ybWF0aW9uL3N0YXR1cyBvZiBhIHBlcnNpc3RlbnQgdm9sdW1lIGNsYWltLiBSZWFkLW9ubHkuIE1vcmUgaW5mbzogaHR0cHM6Ly9rdWJlcm5ldGVzLmlvL2RvY3MvY29uY2VwdHMvc3RvcmFnZS9wZXJzaXN0ZW50LXZvbHVtZXMjcGVyc2lzdGVudHZvbHVtZWNsYWltcyIsInByb3BlcnRpZXMiOnsiYWNjZXNzTW9kZXMiOnsiZGVzY3JpcHRpb24iOiJhY2Nlc3NNb2RlcyBjb250YWlucyB0aGUgYWN0dWFsIGFjY2VzcyBtb2RlcyB0aGUgdm9sdW1lIGJhY2tpbmcgdGhlIFBWQyBoYXMuIE1vcmUgaW5mbzogaHR0cHM6Ly9rdWJlcm5ldGVzLmlvL2RvY3MvY29uY2VwdHMvc3RvcmFnZS9wZXJzaXN0ZW50LXZvbHVtZXMjYWNjZXNzLW1vZGVzLTEiLCJpdGVtcyI6eyJ0eXBlIjoic3RyaW5nIn0sInR5cGUiOiJhcnJheSJ9LCJhbGxvY2F0ZWRSZXNvdXJjZVN0YXR1c2VzIjp7ImFkZGl0aW9uYWxQcm9wZXJ0aWVzIjp7ImRlc2NyaXB0aW9uIjoiV2hlbiBhIGNvbnRyb2xsZXIgcmVjZWl2ZXMgcGVyc2lzdGVudHZvbHVtZSBjbGFpbSB1cGRhdGUgd2l0aCBDbGFpbVJlc291cmNlU3RhdHVzIGZvciBhIHJlc291cmNlIHRoYXQgaXQgZG9lcyBub3QgcmVjb2duaXplcywgdGhlbiBpdCBzaG91bGQgaWdub3JlIHRoYXQgdXBkYXRlIGFuZCBsZXQgb3RoZXIgY29udHJvbGxlcnMgaGFuZGxlIGl0LiIsInR5cGUiOiJzdHJpbmcifSwiZGVzY3JpcHRpb24iOiJhbGxvY2F0ZWRSZXNvdXJjZVN0YXR1c2VzIHN0b3JlcyBzdGF0dXMgb2YgcmVzb3VyY2UgYmVpbmcgcmVzaXplZCBmb3IgdGhlIGdpdmVuIFBWQy4gS2V5IG5hbWVzIGZvbGxvdyBzdGFuZGFyZCBLdWJlcm5ldGVzIGxhYmVsIHN5bnRheC4gVmFsaWQgdmFsdWVzIGFyZSBlaXRoZXI6ICogVW4tcHJlZml4ZWQga2V5czogLSBzdG9yYWdlIC0gdGhlIGNhcGFjaXR5IG9mIHRoZSB2b2x1bWUuICogQ3VzdG9tIHJlc291cmNlcyBtdXN0IHVzZSBpbXBsZW1lbnRhdGlvbi1kZWZpbmVkIHByZWZpeGVkIG5hbWVzIHN1Y2ggYXMgXCJleGFtcGxlLmNvbS9teS1jdXN0b20tcmVzb3VyY2VcIiBBcGFydCBmcm9tIGFib3ZlIHZhbHVlcyAtIGtleXMgdGhhdCBhcmUgdW5wcmVmaXhlZCBvciBoYXZlIGt1YmVybmV0ZXMuaW8gcHJlZml4IGFyZSBjb25zaWRlcmVkIHJlc2VydmVkIGFuZCBoZW5jZSBtYXkgbm90IGJlIHVzZWQuIFxuIENsYWltUmVzb3VyY2VTdGF0dXMgY2FuIGJlIGluIGFueSBvZiBmb2xsb3dpbmcgc3RhdGVzOiAtIENvbnRyb2xsZXJSZXNpemVJblByb2dyZXNzOiBTdGF0ZSBzZXQgd2hlbiByZXNpemUgY29udHJvbGxlciBzdGFydHMgcmVzaXppbmcgdGhlIHZvbHVtZSBpbiBjb250cm9sLXBsYW5lLiAtIENvbnRyb2xsZXJSZXNpemVGYWlsZWQ6IFN0YXRlIHNldCB3aGVuIHJlc2l6ZSBoYXMgZmFpbGVkIGluIHJlc2l6ZSBjb250cm9sbGVyIHdpdGggYSB0ZXJtaW5hbCBlcnJvci4gLSBOb2RlUmVzaXplUGVuZGluZzogU3RhdGUgc2V0IHdoZW4gcmVzaXplIGNvbnRyb2xsZXIgaGFzIGZpbmlzaGVkIHJlc2l6aW5nIHRoZSB2b2x1bWUgYnV0IGZ1cnRoZXIgcmVzaXppbmcgb2Ygdm9sdW1lIGlzIG5lZWRlZCBvbiB0aGUgbm9kZS4gLSBOb2RlUmVzaXplSW5Qcm9ncmVzczogU3RhdGUgc2V0IHdoZW4ga3ViZWxldCBzdGFydHMgcmVzaXppbmcgdGhlIHZvbHVtZS4gLSBOb2RlUmVzaXplRmFpbGVkOiBTdGF0ZSBzZXQgd2hlbiByZXNpemluZyBoYXMgZmFpbGVkIGluIGt1YmVsZXQgd2l0aCBhIHRlcm1pbmFsIGVycm9yLiBUcmFuc2llbnQgZXJyb3JzIGRvbid0IHNldCBOb2RlUmVzaXplRmFpbGVkLiBGb3IgZXhhbXBsZTogaWYgZXhwYW5kaW5nIGEgUFZDIGZvciBtb3JlIGNhcGFjaXR5IC0gdGhpcyBmaWVsZCBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgc3RhdGVzOiAtIHB2Yy5zdGF0dXMuYWxsb2NhdGVkUmVzb3VyY2VTdGF0dXNbJ3N0b3JhZ2UnXSA9IFwiQ29udHJvbGxlclJlc2l6ZUluUHJvZ3Jlc3NcIiAtIHB2Yy5zdGF0dXMuYWxsb2NhdGVkUmVzb3VyY2VTdGF0dXNbJ3N0b3JhZ2UnXSA9IFwiQ29udHJvbGxlclJlc2l6ZUZhaWxlZFwiIC0gcHZjLnN0YXR1cy5hbGxvY2F0ZWRSZXNvdXJjZVN0YXR1c1snc3RvcmFnZSddID0gXCJOb2RlUmVzaXplUGVuZGluZ1wiIC0gcHZjLnN0YXR1cy5hbGxvY2F0ZWRSZXNvdXJjZVN0YXR1c1snc3RvcmFnZSddID0gXCJOb2RlUmVzaXplSW5Qcm9ncmVzc1wiIC0gcHZjLnN0YXR1cy5hbGxvY2F0ZWRSZXNvdXJjZVN0YXR1c1snc3RvcmFnZSddID0gXCJOb2RlUmVzaXplRmFpbGVkXCIgV2hlbiB0aGlzIGZpZWxkIGlzIG5vdCBzZXQsIGl0IG1lYW5zIHRoYXQgbm8gcmVzaXplIG9wZXJhdGlvbiBpcyBpbiBwcm9ncmVzcyBmb3IgdGhlIGdpdmVuIFBWQy4gXG4gQSBjb250cm9sbGVyIHRoYXQgcmVjZWl2ZXMgUFZDIHVwZGF0ZSB3aXRoIHByZXZpb3VzbHkgdW5rbm93biByZXNvdXJjZU5hbWUgb3IgQ2xhaW1SZXNvdXJjZVN0YXR1cyBzaG91bGQgaWdub3JlIHRoZSB1cGRhdGUgZm9yIHRoZSBwdXJwb3NlIGl0IHdhcyBkZXNpZ25lZC4gRm9yIGV4YW1wbGUgLSBhIGNvbnRyb2xsZXIgdGhhdCBvbmx5IGlzIHJlc3BvbnNpYmxlIGZvciByZXNpemluZyBjYXBhY2l0eSBvZiB0aGUgdm9sdW1lLCBzaG91bGQgaWdub3JlIFBWQyB1cGRhdGVzIHRoYXQgY2hhbmdlIG90aGVyIHZhbGlkIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggUFZDLiBcbiBUaGlzIGlzIGFuIGFscGhhIGZpZWxkIGFuZCByZXF1aXJlcyBlbmFibGluZyBSZWNvdmVyVm9sdW1lRXhwYW5zaW9uRmFpbHVyZSBmZWF0dXJlLiIsInR5cGUiOiJvYmplY3QiLCJ4LWt1YmVybmV0ZXMtbWFwLXR5cGUiOiJncmFudWxhciJ9LCJhbGxvY2F0ZWRSZXNvdXJjZXMiOnsiYWRkaXRpb25hbFByb3BlcnRpZXMiOnsiYW55T2YiOlt7InR5cGUiOiJpbnRlZ2VyIn0seyJ0eXBlIjoic3RyaW5nIn1dLCJwYXR0ZXJuIjoiXihcXCt8LSk/KChbMC05XSsoXFwuWzAtOV0qKT8pfChcXC5bMC05XSspKSgoW0tNR1RQRV1pKXxbbnVta01HVFBFXXwoW2VFXShcXCt8LSk/KChbMC05XSsoXFwuWzAtOV0qKT8pfChcXC5bMC05XSspKSkpPyQiLCJ4LWt1YmVybmV0ZXMtaW50LW9yLXN0cmluZyI6dHJ1ZX0sImRlc2NyaXB0aW9uIjoiYWxsb2NhdGVkUmVzb3VyY2VzIHRyYWNrcyB0aGUgcmVzb3VyY2VzIGFsbG9jYXRlZCB0byBhIFBWQyBpbmNsdWRpbmcgaXRzIGNhcGFjaXR5LiBLZXkgbmFtZXMgZm9sbG93IHN0YW5kYXJkIEt1YmVybmV0ZXMgbGFiZWwgc3ludGF4LiBWYWxpZCB2YWx1ZXMgYXJlIGVpdGhlcjogKiBVbi1wcmVmaXhlZCBrZXlzOiAtIHN0b3JhZ2UgLSB0aGUgY2FwYWNpdHkgb2YgdGhlIHZvbHVtZS4gKiBDdXN0b20gcmVzb3VyY2VzIG11c3QgdXNlIGltcGxlbWVudGF0aW9uLWRlZmluZWQgcHJlZml4ZWQgbmFtZXMgc3VjaCBhcyBcImV4YW1wbGUuY29tL215LWN1c3RvbS1yZXNvdXJjZVwiIEFwYXJ0IGZyb20gYWJvdmUgdmFsdWVzIC0ga2V5cyB0aGF0IGFyZSB1bnByZWZpeGVkIG9yIGhhdmUga3ViZXJuZXRlcy5pbyBwcmVmaXggYXJlIGNvbnNpZGVyZWQgcmVzZXJ2ZWQgYW5kIGhlbmNlIG1heSBub3QgYmUgdXNlZC4gXG4gQ2FwYWNpdHkgcmVwb3J0ZWQgaGVyZSBtYXkgYmUgbGFyZ2VyIHRoYW4gdGhlIGFjdHVhbCBjYXBhY2l0eSB3aGVuIGEgdm9sdW1lIGV4cGFuc2lvbiBvcGVyYXRpb24gaXMgcmVxdWVzdGVkLiBGb3Igc3RvcmFnZSBxdW90YSwgdGhlIGxhcmdlciB2YWx1ZSBmcm9tIGFsbG9jYXRlZFJlc291cmNlcyBhbmQgUFZDLnNwZWMucmVzb3VyY2VzIGlzIHVzZWQuIElmIGFsbG9jYXRlZFJlc291cmNlcyBpcyBub3Qgc2V0LCBQVkMuc3BlYy5yZXNvdXJjZXMgYWxvbmUgaXMgdXNlZCBmb3IgcXVvdGEgY2FsY3VsYXRpb24uIElmIGEgdm9sdW1lIGV4cGFuc2lvbiBjYXBhY2l0eSByZXF1ZXN0IGlzIGxvd2VyZWQsIGFsbG9jYXRlZFJlc291cmNlcyBpcyBvbmx5IGxvd2VyZWQgaWYgdGhlcmUgYXJlIG5vIGV4cGFuc2lvbiBvcGVyYXRpb25zIGluIHByb2dyZXNzIGFuZCBpZiB0aGUgYWN0dWFsIHZvbHVtZSBjYXBhY2l0eSBpcyBlcXVhbCBvciBsb3dlciB0aGFuIHRoZSByZXF1ZXN0ZWQgY2FwYWNpdHkuIFxuIEEgY29udHJvbGxlciB0aGF0IHJlY2VpdmVzIFBWQyB1cGRhdGUgd2l0aCBwcmV2aW91c2x5IHVua25vd24gcmVzb3VyY2VOYW1lIHNob3VsZCBpZ25vcmUgdGhlIHVwZGF0ZSBmb3IgdGhlIHB1cnBvc2UgaXQgd2FzIGRlc2lnbmVkLiBGb3IgZXhhbXBsZSAtIGEgY29udHJvbGxlciB0aGF0IG9ubHkgaXMgcmVzcG9uc2libGUgZm9yIHJlc2l6aW5nIGNhcGFjaXR5IG9mIHRoZSB2b2x1bWUsIHNob3VsZCBpZ25vcmUgUFZDIHVwZGF0ZXMgdGhhdCBjaGFuZ2Ugb3RoZXIgdmFsaWQgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCBQVkMuIFxuIFRoaXMgaXMgYW4gYWxwaGEgZmllbGQgYW5kIHJlcXVpcmVzIGVuYWJsaW5nIFJlY292ZXJWb2x1bWVFeHBhbnNpb25GYWlsdXJlIGZlYXR1cmUuIiwidHlwZSI6Im9iamVjdCJ9LCJjYXBhY2l0eSI6eyJhZGRpdGlvbmFsUHJvcGVydGllcyI6eyJhbnlPZiI6W3sidHlwZSI6ImludGVnZXIifSx7InR5cGUiOiJzdHJpbmcifV0sInBhdHRlcm4iOiJeKFxcK3wtKT8oKFswLTldKyhcXC5bMC05XSopPyl8KFxcLlswLTldKykpKChbS01HVFBFXWkpfFtudW1rTUdUUEVdfChbZUVdKFxcK3wtKT8oKFswLTldKyhcXC5bMC05XSopPyl8KFxcLlswLTldKykpKSk/JCIsIngta3ViZXJuZXRlcy1pbnQtb3Itc3RyaW5nIjp0cnVlfSwiZGVzY3JpcHRpb24iOiJjYXBhY2l0eSByZXByZXNlbnRzIHRoZSBhY3R1YWwgcmVzb3VyY2VzIG9mIHRoZSB1bmRlcmx5aW5nIHZvbHVtZS4iLCJ0eXBlIjoib2JqZWN0In0sImNvbmRpdGlvbnMiOnsiZGVzY3JpcHRpb24iOiJjb25kaXRpb25zIGlzIHRoZSBjdXJyZW50IENvbmRpdGlvbiBvZiBwZXJzaXN0ZW50IHZvbHVtZSBjbGFpbS4gSWYgdW5kZXJseWluZyBwZXJzaXN0ZW50IHZvbHVtZSBpcyBiZWluZyByZXNpemVkIHRoZW4gdGhlIENvbmRpdGlvbiB3aWxsIGJlIHNldCB0byAnUmVzaXplU3RhcnRlZCcuIiwiaXRlbXMiOnsiZGVzY3JpcHRpb24iOiJQZXJzaXN0ZW50Vm9sdW1lQ2xhaW1Db25kaXRpb24gY29udGFpbnMgZGV0YWlscyBhYm91dCBzdGF0ZSBvZiBwdmMiLCJwcm9wZXJ0aWVzIjp7Imxhc3RQcm9iZVRpbWUiOnsiZGVzY3JpcHRpb24iOiJsYXN0UHJvYmVUaW1lIGlzIHRoZSB0aW1lIHdlIHByb2JlZCB0aGUgY29uZGl0aW9uLiIsImZvcm1hdCI6ImRhdGUtdGltZSIsInR5cGUiOiJzdHJpbmcifSwibGFzdFRyYW5zaXRpb25UaW1lIjp7ImRlc2NyaXB0aW9uIjoibGFzdFRyYW5zaXRpb25UaW1lIGlzIHRoZSB0aW1lIHRoZSBjb25kaXRpb24gdHJhbnNpdGlvbmVkIGZyb20gb25lIHN0YXR1cyB0byBhbm90aGVyLiIsImZvcm1hdCI6ImRhdGUtdGltZSIsInR5cGUiOiJzdHJpbmcifSwibWVzc2FnZSI6eyJkZXNjcmlwdGlvbiI6Im1lc3NhZ2UgaXMgdGhlIGh1bWFuLXJlYWRhYmxlIG1lc3NhZ2UgaW5kaWNhdGluZyBkZXRhaWxzIGFib3V0IGxhc3QgdHJhbnNpdGlvbi4iLCJ0eXBlIjoic3RyaW5nIn0sInJlYXNvbiI6eyJkZXNjcmlwdGlvbiI6InJlYXNvbiBpcyBhIHVuaXF1ZSwgdGhpcyBzaG91bGQgYmUgYSBzaG9ydCwgbWFjaGluZSB1bmRlcnN0YW5kYWJsZSBzdHJpbmcgdGhhdCBnaXZlcyB0aGUgcmVhc29uIGZvciBjb25kaXRpb24ncyBsYXN0IHRyYW5zaXRpb24uIElmIGl0IHJlcG9ydHMgXCJSZXNpemVTdGFydGVkXCIgdGhhdCBtZWFucyB0aGUgdW5kZXJseWluZyBwZXJzaXN0ZW50IHZvbHVtZSBpcyBiZWluZyByZXNpemVkLiIsInR5cGUiOiJzdHJpbmcifSwic3RhdHVzIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6eyJkZXNjcmlwdGlvbiI6IlBlcnNpc3RlbnRWb2x1bWVDbGFpbUNvbmRpdGlvblR5cGUgaXMgYSB2YWxpZCB2YWx1ZSBvZiBQZXJzaXN0ZW50Vm9sdW1lQ2xhaW1Db25kaXRpb24uVHlwZSIsInR5cGUiOiJzdHJpbmcifX0sInJlcXVpcmVkIjpbInN0YXR1cyIsInR5cGUiXSwidHlwZSI6Im9iamVjdCJ9LCJ0eXBlIjoiYXJyYXkifSwiY3VycmVudFZvbHVtZUF0dHJpYnV0ZXNDbGFzc05hbWUiOnsiZGVzY3JpcHRpb24iOiJjdXJyZW50Vm9sdW1lQXR0cmlidXRlc0NsYXNzTmFtZSBpcyB0aGUgY3VycmVudCBuYW1lIG9mIHRoZSBWb2x1bWVBdHRyaWJ1dGVzQ2xhc3MgdGhlIFBWQyBpcyB1c2luZy4gV2hlbiB1bnNldCwgdGhlcmUgaXMgbm8gVm9sdW1lQXR0cmlidXRlQ2xhc3MgYXBwbGllZCB0byB0aGlzIFBlcnNpc3RlbnRWb2x1bWVDbGFpbSBUaGlzIGlzIGFuIGFscGhhIGZpZWxkIGFuZCByZXF1aXJlcyBlbmFibGluZyBWb2x1bWVBdHRyaWJ1dGVzQ2xhc3MgZmVhdHVyZS4iLCJ0eXBlIjoic3RyaW5nIn0sIm1vZGlmeVZvbHVtZVN0YXR1cyI6eyJkZXNjcmlwdGlvbiI6Ik1vZGlmeVZvbHVtZVN0YXR1cyByZXByZXNlbnRzIHRoZSBzdGF0dXMgb2JqZWN0IG9mIENvbnRyb2xsZXJNb2RpZnlWb2x1bWUgb3BlcmF0aW9uLiBXaGVuIHRoaXMgaXMgdW5zZXQsIHRoZXJlIGlzIG5vIE1vZGlmeVZvbHVtZSBvcGVyYXRpb24gYmVpbmcgYXR0ZW1wdGVkLiBUaGlzIGlzIGFuIGFscGhhIGZpZWxkIGFuZCByZXF1aXJlcyBlbmFibGluZyBWb2x1bWVBdHRyaWJ1dGVzQ2xhc3MgZmVhdHVyZS4iLCJwcm9wZXJ0aWVzIjp7InN0YXR1cyI6eyJkZXNjcmlwdGlvbiI6InN0YXR1cyBpcyB0aGUgc3RhdHVzIG9mIHRoZSBDb250cm9sbGVyTW9kaWZ5Vm9sdW1lIG9wZXJhdGlvbi4gSXQgY2FuIGJlIGluIGFueSBvZiBmb2xsb3dpbmcgc3RhdGVzOiAtIFBlbmRpbmcgUGVuZGluZyBpbmRpY2F0ZXMgdGhhdCB0aGUgUGVyc2lzdGVudFZvbHVtZUNsYWltIGNhbm5vdCBiZSBtb2RpZmllZCBkdWUgdG8gdW5tZXQgcmVxdWlyZW1lbnRzLCBzdWNoIGFzIHRoZSBzcGVjaWZpZWQgVm9sdW1lQXR0cmlidXRlc0NsYXNzIG5vdCBleGlzdGluZy4gLSBJblByb2dyZXNzIEluUHJvZ3Jlc3MgaW5kaWNhdGVzIHRoYXQgdGhlIHZvbHVtZSBpcyBiZWluZyBtb2RpZmllZC4gLSBJbmZlYXNpYmxlIEluZmVhc2libGUgaW5kaWNhdGVzIHRoYXQgdGhlIHJlcXVlc3QgaGFzIGJlZW4gcmVqZWN0ZWQgYXMgaW52YWxpZCBieSB0aGUgQ1NJIGRyaXZlci4gVG8gcmVzb2x2ZSB0aGUgZXJyb3IsIGEgdmFsaWQgVm9sdW1lQXR0cmlidXRlc0NsYXNzIG5lZWRzIHRvIGJlIHNwZWNpZmllZC4gTm90ZTogTmV3IHN0YXR1c2VzIGNhbiBiZSBhZGRlZCBpbiB0aGUgZnV0dXJlLiBDb25zdW1lcnMgc2hvdWxkIGNoZWNrIGZvciB1bmtub3duIHN0YXR1c2VzIGFuZCBmYWlsIGFwcHJvcHJpYXRlbHkuIiwidHlwZSI6InN0cmluZyJ9LCJ0YXJnZXRWb2x1bWVBdHRyaWJ1dGVzQ2xhc3NOYW1lIjp7ImRlc2NyaXB0aW9uIjoidGFyZ2V0Vm9sdW1lQXR0cmlidXRlc0NsYXNzTmFtZSBpcyB0aGUgbmFtZSBvZiB0aGUgVm9sdW1lQXR0cmlidXRlc0NsYXNzIHRoZSBQVkMgY3VycmVudGx5IGJlaW5nIHJlY29uY2lsZWQiLCJ0eXBlIjoic3RyaW5nIn19LCJyZXF1aXJlZCI6WyJzdGF0dXMiXSwidHlwZSI6Im9iamVjdCJ9LCJwaGFzZSI6eyJkZXNjcmlwdGlvbiI6InBoYXNlIHJlcHJlc2VudHMgdGhlIGN1cnJlbnQgcGhhc2Ugb2YgUGVyc2lzdGVudFZvbHVtZUNsYWltLiIsInR5cGUiOiJzdHJpbmcifX0sInR5cGUiOiJvYmplY3QifX0sInR5cGUiOiJvYmplY3QifSwibmFtZSI6eyJ0eXBlIjoic3RyaW5nIn0sInBsYWNlbWVudCI6eyJkZXNjcmlwdGlvbiI6IlBsYWNlbWVudCBpcyB0aGUgcGxhY2VtZW50IGZvciBhbiBvYmplY3QiLCJwcm9wZXJ0aWVzIjp7Im5vZGVBZmZpbml0eSI6eyJkZXNjcmlwdGlvbiI6Ik5vZGVBZmZpbml0eSBpcyBhIGdyb3VwIG9mIG5vZGUgYWZmaW5pdHkgc2NoZWR1bGluZyBydWxlcyIsInByb3BlcnRpZXMiOnsicHJlZmVycmVkRHVyaW5nU2NoZWR1bGluZ0lnbm9yZWREdXJpbmdFeGVjdXRpb24iOnsiZGVzY3JpcHRpb24iOiJUaGUgc2NoZWR1bGVyIHdpbGwgcHJlZmVyIHRvIHNjaGVkdWxlIHBvZHMgdG8gbm9kZXMgdGhhdCBzYXRpc2Z5IHRoZSBhZmZpbml0eSBleHByZXNzaW9ucyBzcGVjaWZpZWQgYnkgdGhpcyBmaWVsZCwgYnV0IGl0IG1heSBjaG9vc2UgYSBub2RlIHRoYXQgdmlvbGF0ZXMgb25lIG9yIG1vcmUgb2YgdGhlIGV4cHJlc3Npb25zLiBUaGUgbm9kZSB0aGF0IGlzIG1vc3QgcHJlZmVycmVkIGlzIHRoZSBvbmUgd2l0aCB0aGUgZ3JlYXRlc3Qgc3VtIG9mIHdlaWdodHMsIGkuZS4gZm9yIGVhY2ggbm9kZSB0aGF0IG1lZXRzIGFsbCBvZiB0aGUgc2NoZWR1bGluZyByZXF1aXJlbWVudHMgKHJlc291cmNlIHJlcXVlc3QsIHJlcXVpcmVkRHVyaW5nU2NoZWR1bGluZyBhZmZpbml0eSBleHByZXNzaW9ucywgZXRjLiksIGNvbXB1dGUgYSBzdW0gYnkgaXRlcmF0aW5nIHRocm91Z2ggdGhlIGVsZW1lbnRzIG9mIHRoaXMgZmllbGQgYW5kIGFkZGluZyBcIndlaWdodFwiIHRvIHRoZSBzdW0gaWYgdGhlIG5vZGUgbWF0Y2hlcyB0aGUgY29ycmVzcG9uZGluZyBtYXRjaEV4cHJlc3Npb25zOyB0aGUgbm9kZShzKSB3aXRoIHRoZSBoaWdoZXN0IHN1bSBhcmUgdGhlIG1vc3QgcHJlZmVycmVkLiIsIml0ZW1zIjp7ImRlc2NyaXB0aW9uIjoiQW4gZW1wdHkgcHJlZmVycmVkIHNjaGVkdWxpbmcgdGVybSBtYXRjaGVzIGFsbCBvYmplY3RzIHdpdGggaW1wbGljaXQgd2VpZ2h0IDAgKGkuZS4gaXQncyBhIG5vLW9wKS4gQSBudWxsIHByZWZlcnJlZCBzY2hlZHVsaW5nIHRlcm0gbWF0Y2hlcyBubyBvYmplY3RzIChpLmUuIGlzIGFsc28gYSBuby1vcCkuIiwicHJvcGVydGllcyI6eyJwcmVmZXJlbmNlIjp7ImRlc2NyaXB0aW9uIjoiQSBub2RlIHNlbGVjdG9yIHRlcm0sIGFzc29jaWF0ZWQgd2l0aCB0aGUgY29ycmVzcG9uZGluZyB3ZWlnaHQuIiwicHJvcGVydGllcyI6eyJtYXRjaEV4cHJlc3Npb25zIjp7ImRlc2NyaXB0aW9uIjoiQSBsaXN0IG9mIG5vZGUgc2VsZWN0b3IgcmVxdWlyZW1lbnRzIGJ5IG5vZGUncyBsYWJlbHMuIiwiaXRlbXMiOnsiZGVzY3JpcHRpb24iOiJBIG5vZGUgc2VsZWN0b3IgcmVxdWlyZW1lbnQgaXMgYSBzZWxlY3RvciB0aGF0IGNvbnRhaW5zIHZhbHVlcywgYSBrZXksIGFuZCBhbiBvcGVyYXRvciB0aGF0IHJlbGF0ZXMgdGhlIGtleSBhbmQgdmFsdWVzLiIsInByb3BlcnRpZXMiOnsia2V5Ijp7ImRlc2NyaXB0aW9uIjoiVGhlIGxhYmVsIGtleSB0aGF0IHRoZSBzZWxlY3RvciBhcHBsaWVzIHRvLiIsInR5cGUiOiJzdHJpbmcifSwib3BlcmF0b3IiOnsiZGVzY3JpcHRpb24iOiJSZXByZXNlbnRzIGEga2V5J3MgcmVsYXRpb25zaGlwIHRvIGEgc2V0IG9mIHZhbHVlcy4gVmFsaWQgb3BlcmF0b3JzIGFyZSBJbiwgTm90SW4sIEV4aXN0cywgRG9lc05vdEV4aXN0LiBHdCwgYW5kIEx0LiIsInR5cGUiOiJzdHJpbmcifSwidmFsdWVzIjp7ImRlc2NyaXB0aW9uIjoiQW4gYXJyYXkgb2Ygc3RyaW5nIHZhbHVlcy4gSWYgdGhlIG9wZXJhdG9yIGlzIEluIG9yIE5vdEluLCB0aGUgdmFsdWVzIGFycmF5IG11c3QgYmUgbm9uLWVtcHR5LiBJZiB0aGUgb3BlcmF0b3IgaXMgRXhpc3RzIG9yIERvZXNOb3RFeGlzdCwgdGhlIHZhbHVlcyBhcnJheSBtdXN0IGJlIGVtcHR5LiBJZiB0aGUgb3BlcmF0b3IgaXMgR3Qgb3IgTHQsIHRoZSB2YWx1ZXMgYXJyYXkgbXVzdCBoYXZlIGEgc2luZ2xlIGVsZW1lbnQsIHdoaWNoIHdpbGwgYmUgaW50ZXJwcmV0ZWQgYXMgYW4gaW50ZWdlci4gVGhpcyBhcnJheSBpcyByZXBsYWNlZCBkdXJpbmcgYSBzdHJhdGVnaWMgbWVyZ2UgcGF0Y2guIiwiaXRlbXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjoiYXJyYXkifX0sInJlcXVpcmVkIjpbImtleSIsIm9wZXJhdG9yIl0sInR5cGUiOiJvYmplY3QifSwidHlwZSI6ImFycmF5In0sIm1hdGNoRmllbGRzIjp7ImRlc2NyaXB0aW9uIjoiQSBsaXN0IG9mIG5vZGUgc2VsZWN0b3IgcmVxdWlyZW1lbnRzIGJ5IG5vZGUncyBmaWVsZHMuIiwiaXRlbXMiOnsiZGVzY3JpcHRpb24iOiJBIG5vZGUgc2VsZWN0b3IgcmVxdWlyZW1lbnQgaXMgYSBzZWxlY3RvciB0aGF0IGNvbnRhaW5zIHZhbHVlcywgYSBrZXksIGFuZCBhbiBvcGVyYXRvciB0aGF0IHJlbGF0ZXMgdGhlIGtleSBhbmQgdmFsdWVzLiIsInByb3BlcnRpZXMiOnsia2V5Ijp7ImRlc2NyaXB0aW9uIjoiVGhlIGxhYmVsIGtleSB0aGF0IHRoZSBzZWxlY3RvciBhcHBsaWVzIHRvLiIsInR5cGUiOiJzdHJpbmcifSwib3BlcmF0b3IiOnsiZGVzY3JpcHRpb24iOiJSZXByZXNlbnRzIGEga2V5J3MgcmVsYXRpb25zaGlwIHRvIGEgc2V0IG9mIHZhbHVlcy4gVmFsaWQgb3BlcmF0b3JzIGFyZSBJbiwgTm90SW4sIEV4aXN0cywgRG9lc05vdEV4aXN0LiBHdCwgYW5kIEx0LiIsInR5cGUiOiJzdHJpbmcifSwidmFsdWVzIjp7ImRlc2NyaXB0aW9uIjoiQW4gYXJyYXkgb2Ygc3RyaW5nIHZhbHVlcy4gSWYgdGhlIG9wZXJhdG9yIGlzIEluIG9yIE5vdEluLCB0aGUgdmFsdWVzIGFycmF5IG11c3QgYmUgbm9uLWVtcHR5LiBJZiB0aGUgb3BlcmF0b3IgaXMgRXhpc3RzIG9yIERvZXNOb3RFeGlzdCwgdGhlIHZhbHVlcyBhcnJheSBtdXN0IGJlIGVtcHR5LiBJZiB0aGUgb3BlcmF0b3IgaXMgR3Qgb3IgTHQsIHRoZSB2YWx1ZXMgYXJyYXkgbXVzdCBoYXZlIGEgc2luZ2xlIGVsZW1lbnQsIHdoaWNoIHdpbGwgYmUgaW50ZXJwcmV0ZWQgYXMgYW4gaW50ZWdlci4gVGhpcyBhcnJheSBpcyByZXBsYWNlZCBkdXJpbmcgYSBzdHJhdGVnaWMgbWVyZ2UgcGF0Y2guIiwiaXRlbXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjoiYXJyYXkifX0sInJlcXVpcmVkIjpbImtleSIsIm9wZXJhdG9yIl0sInR5cGUiOiJvYmplY3QifSwidHlwZSI6ImFycmF5In19LCJ0eXBlIjoib2JqZWN0IiwieC1rdWJlcm5ldGVzLW1hcC10eXBlIjoiYXRvbWljIn0sIndlaWdodCI6eyJkZXNjcmlwdGlvbiI6IldlaWdodCBhc3NvY2lhdGVkIHdpdGggbWF0Y2hpbmcgdGhlIGNvcnJlc3BvbmRpbmcgbm9kZVNlbGVjdG9yVGVybSwgaW4gdGhlIHJhbmdlIDEtMTAwLiIsImZvcm1hdCI6ImludDMyIiwidHlwZSI6ImludGVnZXIifX0sInJlcXVpcmVkIjpbInByZWZlcmVuY2UiLCJ3ZWlnaHQiXSwidHlwZSI6Im9iamVjdCJ9LCJ0eXBlIjoiYXJyYXkifSwicmVxdWlyZWREdXJpbmdTY2hlZHVsaW5nSWdub3JlZER1cmluZ0V4ZWN1dGlvbiI6eyJkZXNjcmlwdGlvbiI6IklmIHRoZSBhZmZpbml0eSByZXF1aXJlbWVudHMgc3BlY2lmaWVkIGJ5IHRoaXMgZmllbGQgYXJlIG5vdCBtZXQgYXQgc2NoZWR1bGluZyB0aW1lLCB0aGUgcG9kIHdpbGwgbm90IGJlIHNjaGVkdWxlZCBvbnRvIHRoZSBub2RlLiBJZiB0aGUgYWZmaW5pdHkgcmVxdWlyZW1lbnRzIHNwZWNpZmllZCBieSB0aGlzIGZpZWxkIGNlYXNlIHRvIGJlIG1ldCBhdCBzb21lIHBvaW50IGR1cmluZyBwb2QgZXhlY3V0aW9uIChlLmcuIGR1ZSB0byBhbiB1cGRhdGUpLCB0aGUgc3lzdGVtIG1heSBvciBtYXkgbm90IHRyeSB0byBldmVudHVhbGx5IGV2aWN0IHRoZSBwb2QgZnJvbSBpdHMgbm9kZS4iLCJwcm9wZXJ0aWVzIjp7Im5vZGVTZWxlY3RvclRlcm1zIjp7ImRlc2NyaXB0aW9uIjoiUmVxdWlyZWQuIEEgbGlzdCBvZiBub2RlIHNlbGVjdG9yIHRlcm1zLiBUaGUgdGVybXMgYXJlIE9SZWQuIiwiaXRlbXMiOnsiZGVzY3JpcHRpb24iOiJBIG51bGwgb3IgZW1wdHkgbm9kZSBzZWxlY3RvciB0ZXJtIG1hdGNoZXMgbm8gb2JqZWN0cy4gVGhlIHJlcXVpcmVtZW50cyBvZiB0aGVtIGFyZSBBTkRlZC4gVGhlIFRvcG9sb2d5U2VsZWN0b3JUZXJtIHR5cGUgaW1wbGVtZW50cyBhIHN1YnNldCBvZiB0aGUgTm9kZVNlbGVjdG9yVGVybS4iLCJwcm9wZXJ0aWVzIjp7Im1hdGNoRXhwcmVzc2lvbnMiOnsiZGVzY3JpcHRpb24iOiJBIGxpc3Qgb2Ygbm9kZSBzZWxlY3RvciByZXF1aXJlbWVudHMgYnkgbm9kZSdzIGxhYmVscy4iLCJpdGVtcyI6eyJkZXNjcmlwdGlvbiI6IkEgbm9kZSBzZWxlY3RvciByZXF1aXJlbWVudCBpcyBhIHNlbGVjdG9yIHRoYXQgY29udGFpbnMgdmFsdWVzLCBhIGtleSwgYW5kIGFuIG9wZXJhdG9yIHRoYXQgcmVsYXRlcyB0aGUga2V5IGFuZCB2YWx1ZXMuIiwicHJvcGVydGllcyI6eyJrZXkiOnsiZGVzY3JpcHRpb24iOiJUaGUgbGFiZWwga2V5IHRoYXQgdGhlIHNlbGVjdG9yIGFwcGxpZXMgdG8uIiwidHlwZSI6InN0cmluZyJ9LCJvcGVyYXRvciI6eyJkZXNjcmlwdGlvbiI6IlJlcHJlc2VudHMgYSBrZXkncyByZWxhdGlvbnNoaXAgdG8gYSBzZXQgb2YgdmFsdWVzLiBWYWxpZCBvcGVyYXRvcnMgYXJlIEluLCBOb3RJbiwgRXhpc3RzLCBEb2VzTm90RXhpc3QuIEd0LCBhbmQgTHQuIiwidHlwZSI6InN0cmluZyJ9LCJ2YWx1ZXMiOnsiZGVzY3JpcHRpb24iOiJBbiBhcnJheSBvZiBzdHJpbmcgdmFsdWVzLiBJZiB0aGUgb3BlcmF0b3IgaXMgSW4gb3IgTm90SW4sIHRoZSB2YWx1ZXMgYXJyYXkgbXVzdCBiZSBub24tZW1wdHkuIElmIHRoZSBvcGVyYXRvciBpcyBFeGlzdHMgb3IgRG9lc05vdEV4aXN0LCB0aGUgdmFsdWVzIGFycmF5IG11c3QgYmUgZW1wdHkuIElmIHRoZSBvcGVyYXRvciBpcyBHdCBvciBMdCwgdGhlIHZhbHVlcyBhcnJheSBtdXN0IGhhdmUgYSBzaW5nbGUgZWxlbWVudCwgd2hpY2ggd2lsbCBiZSBpbnRlcnByZXRlZCBhcyBhbiBpbnRlZ2VyLiBUaGlzIGFycmF5IGlzIHJlcGxhY2VkIGR1cmluZyBhIHN0cmF0ZWdpYyBtZXJnZSBwYXRjaC4iLCJpdGVtcyI6eyJ0eXBlIjoic3RyaW5nIn0sInR5cGUiOiJhcnJheSJ9fSwicmVxdWlyZWQiOlsia2V5Iiwib3BlcmF0b3IiXSwidHlwZSI6Im9iamVjdCJ9LCJ0eXBlIjoiYXJyYXkifSwibWF0Y2hGaWVsZHMiOnsiZGVzY3JpcHRpb24iOiJBIGxpc3Qgb2Ygbm9kZSBzZWxlY3RvciByZXF1aXJlbWVudHMgYnkgbm9kZSdzIGZpZWxkcy4iLCJpdGVtcyI6eyJkZXNjcmlwdGlvbiI6IkEgbm9kZSBzZWxlY3RvciByZXF1aXJlbWVudCBpcyBhIHNlbGVjdG9yIHRoYXQgY29udGFpbnMgdmFsdWVzLCBhIGtleSwgYW5kIGFuIG9wZXJhdG9yIHRoYXQgcmVsYXRlcyB0aGUga2V5IGFuZCB2YWx1ZXMuIiwicHJvcGVydGllcyI6eyJrZXkiOnsiZGVzY3JpcHRpb24iOiJUaGUgbGFiZWwga2V5IHRoYXQgdGhlIHNlbGVjdG9yIGFwcGxpZXMgdG8uIiwidHlwZSI6InN0cmluZyJ9LCJvcGVyYXRvciI6eyJkZXNjcmlwdGlvbiI6IlJlcHJlc2VudHMgYSBrZXkncyByZWxhdGlvbnNoaXAgdG8gYSBzZXQgb2YgdmFsdWVzLiBWYWxpZCBvcGVyYXRvcnMgYXJlIEluLCBOb3RJbiwgRXhpc3RzLCBEb2VzTm90RXhpc3QuIEd0LCBhbmQgTHQuIiwidHlwZSI6InN0cmluZyJ9LCJ2YWx1ZXMiOnsiZGVzY3JpcHRpb24iOiJBbiBhcnJheSBvZiBzdHJpbmcgdmFsdWVzLiBJZiB0aGUgb3BlcmF0b3IgaXMgSW4gb3IgTm90SW4sIHRoZSB2YWx1ZXMgYXJyYXkgbXVzdCBiZSBub24tZW1wdHkuIElmIHRoZSBvcGVyYXRvciBpcyBFeGlzdHMgb3IgRG9lc05vdEV4aXN0LCB0aGUgdmFsdWVzIGFycmF5IG11c3QgYmUgZW1wdHkuIElmIHRoZSBvcGVyYXRvciBpcyBHdCBvciBMdCwgdGhlIHZhbHVlcyBhcnJheSBtdXN0IGhhdmUgYSBzaW5nbGUgZWxlbWVudCwgd2hpY2ggd2lsbCBiZSBpbnRlcnByZXRlZCBhcyBhbiBpbnRlZ2VyLiBUaGlzIGFycmF5IGlzIHJlcGxhY2VkIGR1cmluZyBhIHN0cmF0ZWdpYyBtZXJnZSBwYXRjaC4iLCJpdGVtcyI6eyJ0eXBlIjoic3RyaW5nIn0sInR5cGUiOiJhcnJheSJ9fSwicmVxdWlyZWQiOlsia2V5Iiwib3BlcmF0b3IiXSwidHlwZSI6Im9iamVjdCJ9LCJ0eXBlIjoiYXJyYXkifX0sInR5cGUiOiJvYmplY3QiLCJ4LWt1YmVybmV0ZXMtbWFwLXR5cGUiOiJhdG9taWMifSwidHlwZSI6ImFycmF5In19LCJyZXF1aXJlZCI6WyJub2RlU2VsZWN0b3JUZXJtcyJdLCJ0eXBlIjoib2JqZWN0IiwieC1rdWJlcm5ldGVzLW1hcC10eXBlIjoiYXRvbWljIn19LCJ0eXBlIjoib2JqZWN0In0sInBvZEFmZmluaXR5Ijp7ImRlc2NyaXB0aW9uIjoiUG9kQWZmaW5pdHkgaXMgYSBncm91cCBvZiBpbnRlciBwb2QgYWZmaW5pdHkgc2NoZWR1bGluZyBydWxlcyIsInByb3BlcnRpZXMiOnsicHJlZmVycmVkRHVyaW5nU2NoZWR1bGluZ0lnbm9yZWREdXJpbmdFeGVjdXRpb24iOnsiZGVzY3JpcHRpb24iOiJUaGUgc2NoZWR1bGVyIHdpbGwgcHJlZmVyIHRvIHNjaGVkdWxlIHBvZHMgdG8gbm9kZXMgdGhhdCBzYXRpc2Z5IHRoZSBhZmZpbml0eSBleHByZXNzaW9ucyBzcGVjaWZpZWQgYnkgdGhpcyBmaWVsZCwgYnV0IGl0IG1heSBjaG9vc2UgYSBub2RlIHRoYXQgdmlvbGF0ZXMgb25lIG9yIG1vcmUgb2YgdGhlIGV4cHJlc3Npb25zLiBUaGUgbm9kZSB0aGF0IGlzIG1vc3QgcHJlZmVycmVkIGlzIHRoZSBvbmUgd2l0aCB0aGUgZ3JlYXRlc3Qgc3VtIG9mIHdlaWdodHMsIGkuZS4gZm9yIGVhY2ggbm9kZSB0aGF0IG1lZXRzIGFsbCBvZiB0aGUgc2NoZWR1bGluZyByZXF1aXJlbWVudHMgKHJlc291cmNlIHJlcXVlc3QsIHJlcXVpcmVkRHVyaW5nU2NoZWR1bGluZyBhZmZpbml0eSBleHByZXNzaW9ucywgZXRjLiksIGNvbXB1dGUgYSBzdW0gYnkgaXRlcmF0aW5nIHRocm91Z2ggdGhlIGVsZW1lbnRzIG9mIHRoaXMgZmllbGQgYW5kIGFkZGluZyBcIndlaWdodFwiIHRvIHRoZSBzdW0gaWYgdGhlIG5vZGUgaGFzIHBvZHMgd2hpY2ggbWF0Y2hlcyB0aGUgY29ycmVzcG9uZGluZyBwb2RBZmZpbml0eVRlcm07IHRoZSBub2RlKHMpIHdpdGggdGhlIGhpZ2hlc3Qgc3VtIGFyZSB0aGUgbW9zdCBwcmVmZXJyZWQuIiwiaXRlbXMiOnsiZGVzY3JpcHRpb24iOiJUaGUgd2VpZ2h0cyBvZiBhbGwgb2YgdGhlIG1hdGNoZWQgV2VpZ2h0ZWRQb2RBZmZpbml0eVRlcm0gZmllbGRzIGFyZSBhZGRlZCBwZXItbm9kZSB0byBmaW5kIHRoZSBtb3N0IHByZWZlcnJlZCBub2RlKHMpIiwicHJvcGVydGllcyI6eyJwb2RBZmZpbml0eVRlcm0iOnsiZGVzY3JpcHRpb24iOiJSZXF1aXJlZC4gQSBwb2QgYWZmaW5pdHkgdGVybSwgYXNzb2NpYXRlZCB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIHdlaWdodC4iLCJwcm9wZXJ0aWVzIjp7ImxhYmVsU2VsZWN0b3IiOnsiZGVzY3JpcHRpb24iOiJBIGxhYmVsIHF1ZXJ5IG92ZXIgYSBzZXQgb2YgcmVzb3VyY2VzLCBpbiB0aGlzIGNhc2UgcG9kcy4gSWYgaXQncyBudWxsLCB0aGlzIFBvZEFmZmluaXR5VGVybSBtYXRjaGVzIHdpdGggbm8gUG9kcy4iLCJwcm9wZXJ0aWVzIjp7Im1hdGNoRXhwcmVzc2lvbnMiOnsiZGVzY3JpcHRpb24iOiJtYXRjaEV4cHJlc3Npb25zIGlzIGEgbGlzdCBvZiBsYWJlbCBzZWxlY3RvciByZXF1aXJlbWVudHMuIFRoZSByZXF1aXJlbWVudHMgYXJlIEFORGVkLiIsIml0ZW1zIjp7ImRlc2NyaXB0aW9uIjoiQSBsYWJlbCBzZWxlY3RvciByZXF1aXJlbWVudCBpcyBhIHNlbGVjdG9yIHRoYXQgY29udGFpbnMgdmFsdWVzLCBhIGtleSwgYW5kIGFuIG9wZXJhdG9yIHRoYXQgcmVsYXRlcyB0aGUga2V5IGFuZCB2YWx1ZXMuIiwicHJvcGVydGllcyI6eyJrZXkiOnsiZGVzY3JpcHRpb24iOiJrZXkgaXMgdGhlIGxhYmVsIGtleSB0aGF0IHRoZSBzZWxlY3RvciBhcHBsaWVzIHRvLiIsInR5cGUiOiJzdHJpbmcifSwib3BlcmF0b3IiOnsiZGVzY3JpcHRpb24iOiJvcGVyYXRvciByZXByZXNlbnRzIGEga2V5J3MgcmVsYXRpb25zaGlwIHRvIGEgc2V0IG9mIHZhbHVlcy4gVmFsaWQgb3BlcmF0b3JzIGFyZSBJbiwgTm90SW4sIEV4aXN0cyBhbmQgRG9lc05vdEV4aXN0LiIsInR5cGUiOiJzdHJpbmcifSwidmFsdWVzIjp7ImRlc2NyaXB0aW9uIjoidmFsdWVzIGlzIGFuIGFycmF5IG9mIHN0cmluZyB2YWx1ZXMuIElmIHRoZSBvcGVyYXRvciBpcyBJbiBvciBOb3RJbiwgdGhlIHZhbHVlcyBhcnJheSBtdXN0IGJlIG5vbi1lbXB0eS4gSWYgdGhlIG9wZXJhdG9yIGlzIEV4aXN0cyBvciBEb2VzTm90RXhpc3QsIHRoZSB2YWx1ZXMgYXJyYXkgbXVzdCBiZSBlbXB0eS4gVGhpcyBhcnJheSBpcyByZXBsYWNlZCBkdXJpbmcgYSBzdHJhdGVnaWMgbWVyZ2UgcGF0Y2guIiwiaXRlbXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjoiYXJyYXkifX0sInJlcXVpcmVkIjpbImtleSIsIm9wZXJhdG9yIl0sInR5cGUiOiJvYmplY3QifSwidHlwZSI6ImFycmF5In0sIm1hdGNoTGFiZWxzIjp7ImFkZGl0aW9uYWxQcm9wZXJ0aWVzIjp7InR5cGUiOiJzdHJpbmcifSwiZGVzY3JpcHRpb24iOiJtYXRjaExhYmVscyBpcyBhIG1hcCBvZiB7a2V5LHZhbHVlfSBwYWlycy4gQSBzaW5nbGUge2tleSx2YWx1ZX0gaW4gdGhlIG1hdGNoTGFiZWxzIG1hcCBpcyBlcXVpdmFsZW50IHRvIGFuIGVsZW1lbnQgb2YgbWF0Y2hFeHByZXNzaW9ucywgd2hvc2Uga2V5IGZpZWxkIGlzIFwia2V5XCIsIHRoZSBvcGVyYXRvciBpcyBcIkluXCIsIGFuZCB0aGUgdmFsdWVzIGFycmF5IGNvbnRhaW5zIG9ubHkgXCJ2YWx1ZVwiLiBUaGUgcmVxdWlyZW1lbnRzIGFyZSBBTkRlZC4iLCJ0eXBlIjoib2JqZWN0In19LCJ0eXBlIjoib2JqZWN0IiwieC1rdWJlcm5ldGVzLW1hcC10eXBlIjoiYXRvbWljIn0sIm1hdGNoTGFiZWxLZXlzIjp7ImRlc2NyaXB0aW9uIjoiTWF0Y2hMYWJlbEtleXMgaXMgYSBzZXQgb2YgcG9kIGxhYmVsIGtleXMgdG8gc2VsZWN0IHdoaWNoIHBvZHMgd2lsbCBiZSB0YWtlbiBpbnRvIGNvbnNpZGVyYXRpb24uIFRoZSBrZXlzIGFyZSB1c2VkIHRvIGxvb2t1cCB2YWx1ZXMgZnJvbSB0aGUgaW5jb21pbmcgcG9kIGxhYmVscywgdGhvc2Uga2V5LXZhbHVlIGxhYmVscyBhcmUgbWVyZ2VkIHdpdGggYExhYmVsU2VsZWN0b3JgIGFzIGBrZXkgaW4gKHZhbHVlKWAgdG8gc2VsZWN0IHRoZSBncm91cCBvZiBleGlzdGluZyBwb2RzIHdoaWNoIHBvZHMgd2lsbCBiZSB0YWtlbiBpbnRvIGNvbnNpZGVyYXRpb24gZm9yIHRoZSBpbmNvbWluZyBwb2QncyBwb2QgKGFudGkpIGFmZmluaXR5LiBLZXlzIHRoYXQgZG9uJ3QgZXhpc3QgaW4gdGhlIGluY29taW5nIHBvZCBsYWJlbHMgd2lsbCBiZSBpZ25vcmVkLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBlbXB0eS4gVGhlIHNhbWUga2V5IGlzIGZvcmJpZGRlbiB0byBleGlzdCBpbiBib3RoIE1hdGNoTGFiZWxLZXlzIGFuZCBMYWJlbFNlbGVjdG9yLiBBbHNvLCBNYXRjaExhYmVsS2V5cyBjYW5ub3QgYmUgc2V0IHdoZW4gTGFiZWxTZWxlY3RvciBpc24ndCBzZXQuIFRoaXMgaXMgYW4gYWxwaGEgZmllbGQgYW5kIHJlcXVpcmVzIGVuYWJsaW5nIE1hdGNoTGFiZWxLZXlzSW5Qb2RBZmZpbml0eSBmZWF0dXJlIGdhdGUuIiwiaXRlbXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjoiYXJyYXkiLCJ4LWt1YmVybmV0ZXMtbGlzdC10eXBlIjoiYXRvbWljIn0sIm1pc21hdGNoTGFiZWxLZXlzIjp7ImRlc2NyaXB0aW9uIjoiTWlzbWF0Y2hMYWJlbEtleXMgaXMgYSBzZXQgb2YgcG9kIGxhYmVsIGtleXMgdG8gc2VsZWN0IHdoaWNoIHBvZHMgd2lsbCBiZSB0YWtlbiBpbnRvIGNvbnNpZGVyYXRpb24uIFRoZSBrZXlzIGFyZSB1c2VkIHRvIGxvb2t1cCB2YWx1ZXMgZnJvbSB0aGUgaW5jb21pbmcgcG9kIGxhYmVscywgdGhvc2Uga2V5LXZhbHVlIGxhYmVscyBhcmUgbWVyZ2VkIHdpdGggYExhYmVsU2VsZWN0b3JgIGFzIGBrZXkgbm90aW4gKHZhbHVlKWAgdG8gc2VsZWN0IHRoZSBncm91cCBvZiBleGlzdGluZyBwb2RzIHdoaWNoIHBvZHMgd2lsbCBiZSB0YWtlbiBpbnRvIGNvbnNpZGVyYXRpb24gZm9yIHRoZSBpbmNvbWluZyBwb2QncyBwb2QgKGFudGkpIGFmZmluaXR5LiBLZXlzIHRoYXQgZG9uJ3QgZXhpc3QgaW4gdGhlIGluY29taW5nIHBvZCBsYWJlbHMgd2lsbCBiZSBpZ25vcmVkLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBlbXB0eS4gVGhlIHNhbWUga2V5IGlzIGZvcmJpZGRlbiB0byBleGlzdCBpbiBib3RoIE1pc21hdGNoTGFiZWxLZXlzIGFuZCBMYWJlbFNlbGVjdG9yLiBBbHNvLCBNaXNtYXRjaExhYmVsS2V5cyBjYW5ub3QgYmUgc2V0IHdoZW4gTGFiZWxTZWxlY3RvciBpc24ndCBzZXQuIFRoaXMgaXMgYW4gYWxwaGEgZmllbGQgYW5kIHJlcXVpcmVzIGVuYWJsaW5nIE1hdGNoTGFiZWxLZXlzSW5Qb2RBZmZpbml0eSBmZWF0dXJlIGdhdGUuIiwiaXRlbXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjoiYXJyYXkiLCJ4LWt1YmVybmV0ZXMtbGlzdC10eXBlIjoiYXRvbWljIn0sIm5hbWVzcGFjZVNlbGVjdG9yIjp7ImRlc2NyaXB0aW9uIjoiQSBsYWJlbCBxdWVyeSBvdmVyIHRoZSBzZXQgb2YgbmFtZXNwYWNlcyB0aGF0IHRoZSB0ZXJtIGFwcGxpZXMgdG8uIFRoZSB0ZXJtIGlzIGFwcGxpZWQgdG8gdGhlIHVuaW9uIG9mIHRoZSBuYW1lc3BhY2VzIHNlbGVjdGVkIGJ5IHRoaXMgZmllbGQgYW5kIHRoZSBvbmVzIGxpc3RlZCBpbiB0aGUgbmFtZXNwYWNlcyBmaWVsZC4gbnVsbCBzZWxlY3RvciBhbmQgbnVsbCBvciBlbXB0eSBuYW1lc3BhY2VzIGxpc3QgbWVhbnMgXCJ0aGlzIHBvZCdzIG5hbWVzcGFjZVwiLiBBbiBlbXB0eSBzZWxlY3RvciAoe30pIG1hdGNoZXMgYWxsIG5hbWVzcGFjZXMuIiwicHJvcGVydGllcyI6eyJtYXRjaEV4cHJlc3Npb25zIjp7ImRlc2NyaXB0aW9uIjoibWF0Y2hFeHByZXNzaW9ucyBpcyBhIGxpc3Qgb2YgbGFiZWwgc2VsZWN0b3IgcmVxdWlyZW1lbnRzLiBUaGUgcmVxdWlyZW1lbnRzIGFyZSBBTkRlZC4iLCJpdGVtcyI6eyJkZXNjcmlwdGlvbiI6IkEgbGFiZWwgc2VsZWN0b3IgcmVxdWlyZW1lbnQgaXMgYSBzZWxlY3RvciB0aGF0IGNvbnRhaW5zIHZhbHVlcywgYSBrZXksIGFuZCBhbiBvcGVyYXRvciB0aGF0IHJlbGF0ZXMgdGhlIGtleSBhbmQgdmFsdWVzLiIsInByb3BlcnRpZXMiOnsia2V5Ijp7ImRlc2NyaXB0aW9uIjoia2V5IGlzIHRoZSBsYWJlbCBrZXkgdGhhdCB0aGUgc2VsZWN0b3IgYXBwbGllcyB0by4iLCJ0eXBlIjoic3RyaW5nIn0sIm9wZXJhdG9yIjp7ImRlc2NyaXB0aW9uIjoib3BlcmF0b3IgcmVwcmVzZW50cyBhIGtleSdzIHJlbGF0aW9uc2hpcCB0byBhIHNldCBvZiB2YWx1ZXMuIFZhbGlkIG9wZXJhdG9ycyBhcmUgSW4sIE5vdEluLCBFeGlzdHMgYW5kIERvZXNOb3RFeGlzdC4iLCJ0eXBlIjoic3RyaW5nIn0sInZhbHVlcyI6eyJkZXNjcmlwdGlvbiI6InZhbHVlcyBpcyBhbiBhcnJheSBvZiBzdHJpbmcgdmFsdWVzLiBJZiB0aGUgb3BlcmF0b3IgaXMgSW4gb3IgTm90SW4sIHRoZSB2YWx1ZXMgYXJyYXkgbXVzdCBiZSBub24tZW1wdHkuIElmIHRoZSBvcGVyYXRvciBpcyBFeGlzdHMgb3IgRG9lc05vdEV4aXN0LCB0aGUgdmFsdWVzIGFycmF5IG11c3QgYmUgZW1wdHkuIFRoaXMgYXJyYXkgaXMgcmVwbGFjZWQgZHVyaW5nIGEgc3RyYXRlZ2ljIG1lcmdlIHBhdGNoLiIsIml0ZW1zIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6ImFycmF5In19LCJyZXF1aXJlZCI6WyJrZXkiLCJvcGVyYXRvciJdLCJ0eXBlIjoib2JqZWN0In0sInR5cGUiOiJhcnJheSJ9LCJtYXRjaExhYmVscyI6eyJhZGRpdGlvbmFsUHJvcGVydGllcyI6eyJ0eXBlIjoic3RyaW5nIn0sImRlc2NyaXB0aW9uIjoibWF0Y2hMYWJlbHMgaXMgYSBtYXAgb2Yge2tleSx2YWx1ZX0gcGFpcnMuIEEgc2luZ2xlIHtrZXksdmFsdWV9IGluIHRoZSBtYXRjaExhYmVscyBtYXAgaXMgZXF1aXZhbGVudCB0byBhbiBlbGVtZW50IG9mIG1hdGNoRXhwcmVzc2lvbnMsIHdob3NlIGtleSBmaWVsZCBpcyBcImtleVwiLCB0aGUgb3BlcmF0b3IgaXMgXCJJblwiLCBhbmQgdGhlIHZhbHVlcyBhcnJheSBjb250YWlucyBvbmx5IFwidmFsdWVcIi4gVGhlIHJlcXVpcmVtZW50cyBhcmUgQU5EZWQuIiwidHlwZSI6Im9iamVjdCJ9fSwidHlwZSI6Im9iamVjdCIsIngta3ViZXJuZXRlcy1tYXAtdHlwZSI6ImF0b21pYyJ9LCJuYW1lc3BhY2VzIjp7ImRlc2NyaXB0aW9uIjoibmFtZXNwYWNlcyBzcGVjaWZpZXMgYSBzdGF0aWMgbGlzdCBvZiBuYW1lc3BhY2UgbmFtZXMgdGhhdCB0aGUgdGVybSBhcHBsaWVzIHRvLiBUaGUgdGVybSBpcyBhcHBsaWVkIHRvIHRoZSB1bmlvbiBvZiB0aGUgbmFtZXNwYWNlcyBsaXN0ZWQgaW4gdGhpcyBmaWVsZCBhbmQgdGhlIG9uZXMgc2VsZWN0ZWQgYnkgbmFtZXNwYWNlU2VsZWN0b3IuIG51bGwgb3IgZW1wdHkgbmFtZXNwYWNlcyBsaXN0IGFuZCBudWxsIG5hbWVzcGFjZVNlbGVjdG9yIG1lYW5zIFwidGhpcyBwb2QncyBuYW1lc3BhY2VcIi4iLCJpdGVtcyI6eyJ0eXBlIjoic3RyaW5nIn0sInR5cGUiOiJhcnJheSJ9LCJ0b3BvbG9neUtleSI6eyJkZXNjcmlwdGlvbiI6IlRoaXMgcG9kIHNob3VsZCBiZSBjby1sb2NhdGVkIChhZmZpbml0eSkgb3Igbm90IGNvLWxvY2F0ZWQgKGFudGktYWZmaW5pdHkpIHdpdGggdGhlIHBvZHMgbWF0Y2hpbmcgdGhlIGxhYmVsU2VsZWN0b3IgaW4gdGhlIHNwZWNpZmllZCBuYW1lc3BhY2VzLCB3aGVyZSBjby1sb2NhdGVkIGlzIGRlZmluZWQgYXMgcnVubmluZyBvbiBhIG5vZGUgd2hvc2UgdmFsdWUgb2YgdGhlIGxhYmVsIHdpdGgga2V5IHRvcG9sb2d5S2V5IG1hdGNoZXMgdGhhdCBvZiBhbnkgbm9kZSBvbiB3aGljaCBhbnkgb2YgdGhlIHNlbGVjdGVkIHBvZHMgaXMgcnVubmluZy4gRW1wdHkgdG9wb2xvZ3lLZXkgaXMgbm90IGFsbG93ZWQuIiwidHlwZSI6InN0cmluZyJ9fSwicmVxdWlyZWQiOlsidG9wb2xvZ3lLZXkiXSwidHlwZSI6Im9iamVjdCJ9LCJ3ZWlnaHQiOnsiZGVzY3JpcHRpb24iOiJ3ZWlnaHQgYXNzb2NpYXRlZCB3aXRoIG1hdGNoaW5nIHRoZSBjb3JyZXNwb25kaW5nIHBvZEFmZmluaXR5VGVybSwgaW4gdGhlIHJhbmdlIDEtMTAwLiIsImZvcm1hdCI6ImludDMyIiwidHlwZSI6ImludGVnZXIifX0sInJlcXVpcmVkIjpbInBvZEFmZmluaXR5VGVybSIsIndlaWdodCJdLCJ0eXBlIjoib2JqZWN0In0sInR5cGUiOiJhcnJheSJ9LCJyZXF1aXJlZER1cmluZ1NjaGVkdWxpbmdJZ25vcmVkRHVyaW5nRXhlY3V0aW9uIjp7ImRlc2NyaXB0aW9uIjoiSWYgdGhlIGFmZmluaXR5IHJlcXVpcmVtZW50cyBzcGVjaWZpZWQgYnkgdGhpcyBmaWVsZCBhcmUgbm90IG1ldCBhdCBzY2hlZHVsaW5nIHRpbWUsIHRoZSBwb2Qgd2lsbCBub3QgYmUgc2NoZWR1bGVkIG9udG8gdGhlIG5vZGUuIElmIHRoZSBhZmZpbml0eSByZXF1aXJlbWVudHMgc3BlY2lmaWVkIGJ5IHRoaXMgZmllbGQgY2Vhc2UgdG8gYmUgbWV0IGF0IHNvbWUgcG9pbnQgZHVyaW5nIHBvZCBleGVjdXRpb24gKGUuZy4gZHVlIHRvIGEgcG9kIGxhYmVsIHVwZGF0ZSksIHRoZSBzeXN0ZW0gbWF5IG9yIG1heSBub3QgdHJ5IHRvIGV2ZW50dWFsbHkgZXZpY3QgdGhlIHBvZCBmcm9tIGl0cyBub2RlLiBXaGVuIHRoZXJlIGFyZSBtdWx0aXBsZSBlbGVtZW50cywgdGhlIGxpc3RzIG9mIG5vZGVzIGNvcnJlc3BvbmRpbmcgdG8gZWFjaCBwb2RBZmZpbml0eVRlcm0gYXJlIGludGVyc2VjdGVkLCBpLmUuIGFsbCB0ZXJtcyBtdXN0IGJlIHNhdGlzZmllZC4iLCJpdGVtcyI6eyJkZXNjcmlwdGlvbiI6IkRlZmluZXMgYSBzZXQgb2YgcG9kcyAobmFtZWx5IHRob3NlIG1hdGNoaW5nIHRoZSBsYWJlbFNlbGVjdG9yIHJlbGF0aXZlIHRvIHRoZSBnaXZlbiBuYW1lc3BhY2UocykpIHRoYXQgdGhpcyBwb2Qgc2hvdWxkIGJlIGNvLWxvY2F0ZWQgKGFmZmluaXR5KSBvciBub3QgY28tbG9jYXRlZCAoYW50aS1hZmZpbml0eSkgd2l0aCwgd2hlcmUgY28tbG9jYXRlZCBpcyBkZWZpbmVkIGFzIHJ1bm5pbmcgb24gYSBub2RlIHdob3NlIHZhbHVlIG9mIHRoZSBsYWJlbCB3aXRoIGtleSBcdTAwM2N0b3BvbG9neUtleVx1MDAzZSBtYXRjaGVzIHRoYXQgb2YgYW55IG5vZGUgb24gd2hpY2ggYSBwb2Qgb2YgdGhlIHNldCBvZiBwb2RzIGlzIHJ1bm5pbmciLCJwcm9wZXJ0aWVzIjp7ImxhYmVsU2VsZWN0b3IiOnsiZGVzY3JpcHRpb24iOiJBIGxhYmVsIHF1ZXJ5IG92ZXIgYSBzZXQgb2YgcmVzb3VyY2VzLCBpbiB0aGlzIGNhc2UgcG9kcy4gSWYgaXQncyBudWxsLCB0aGlzIFBvZEFmZmluaXR5VGVybSBtYXRjaGVzIHdpdGggbm8gUG9kcy4iLCJwcm9wZXJ0aWVzIjp7Im1hdGNoRXhwcmVzc2lvbnMiOnsiZGVzY3JpcHRpb24iOiJtYXRjaEV4cHJlc3Npb25zIGlzIGEgbGlzdCBvZiBsYWJlbCBzZWxlY3RvciByZXF1aXJlbWVudHMuIFRoZSByZXF1aXJlbWVudHMgYXJlIEFORGVkLiIsIml0ZW1zIjp7ImRlc2NyaXB0aW9uIjoiQSBsYWJlbCBzZWxlY3RvciByZXF1aXJlbWVudCBpcyBhIHNlbGVjdG9yIHRoYXQgY29udGFpbnMgdmFsdWVzLCBhIGtleSwgYW5kIGFuIG9wZXJhdG9yIHRoYXQgcmVsYXRlcyB0aGUga2V5IGFuZCB2YWx1ZXMuIiwicHJvcGVydGllcyI6eyJrZXkiOnsiZGVzY3JpcHRpb24iOiJrZXkgaXMgdGhlIGxhYmVsIGtleSB0aGF0IHRoZSBzZWxlY3RvciBhcHBsaWVzIHRvLiIsInR5cGUiOiJzdHJpbmcifSwib3BlcmF0b3IiOnsiZGVzY3JpcHRpb24iOiJvcGVyYXRvciByZXByZXNlbnRzIGEga2V5J3MgcmVsYXRpb25zaGlwIHRvIGEgc2V0IG9mIHZhbHVlcy4gVmFsaWQgb3BlcmF0b3JzIGFyZSBJbiwgTm90SW4sIEV4aXN0cyBhbmQgRG9lc05vdEV4aXN0LiIsInR5cGUiOiJzdHJpbmcifSwidmFsdWVzIjp7ImRlc2NyaXB0aW9uIjoidmFsdWVzIGlzIGFuIGFycmF5IG9mIHN0cmluZyB2YWx1ZXMuIElmIHRoZSBvcGVyYXRvciBpcyBJbiBvciBOb3RJbiwgdGhlIHZhbHVlcyBhcnJheSBtdXN0IGJlIG5vbi1lbXB0eS4gSWYgdGhlIG9wZXJhdG9yIGlzIEV4aXN0cyBvciBEb2VzTm90RXhpc3QsIHRoZSB2YWx1ZXMgYXJyYXkgbXVzdCBiZSBlbXB0eS4gVGhpcyBhcnJheSBpcyByZXBsYWNlZCBkdXJpbmcgYSBzdHJhdGVnaWMgbWVyZ2UgcGF0Y2guIiwiaXRlbXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjoiYXJyYXkifX0sInJlcXVpcmVkIjpbImtleSIsIm9wZXJhdG9yIl0sInR5cGUiOiJvYmplY3QifSwidHlwZSI6ImFycmF5In0sIm1hdGNoTGFiZWxzIjp7ImFkZGl0aW9uYWxQcm9wZXJ0aWVzIjp7InR5cGUiOiJzdHJpbmcifSwiZGVzY3JpcHRpb24iOiJtYXRjaExhYmVscyBpcyBhIG1hcCBvZiB7a2V5LHZhbHVlfSBwYWlycy4gQSBzaW5nbGUge2tleSx2YWx1ZX0gaW4gdGhlIG1hdGNoTGFiZWxzIG1hcCBpcyBlcXVpdmFsZW50IHRvIGFuIGVsZW1lbnQgb2YgbWF0Y2hFeHByZXNzaW9ucywgd2hvc2Uga2V5IGZpZWxkIGlzIFwia2V5XCIsIHRoZSBvcGVyYXRvciBpcyBcIkluXCIsIGFuZCB0aGUgdmFsdWVzIGFycmF5IGNvbnRhaW5zIG9ubHkgXCJ2YWx1ZVwiLiBUaGUgcmVxdWlyZW1lbnRzIGFyZSBBTkRlZC4iLCJ0eXBlIjoib2JqZWN0In19LCJ0eXBlIjoib2JqZWN0IiwieC1rdWJlcm5ldGVzLW1hcC10eXBlIjoiYXRvbWljIn0sIm1hdGNoTGFiZWxLZXlzIjp7ImRlc2NyaXB0aW9uIjoiTWF0Y2hMYWJlbEtleXMgaXMgYSBzZXQgb2YgcG9kIGxhYmVsIGtleXMgdG8gc2VsZWN0IHdoaWNoIHBvZHMgd2lsbCBiZSB0YWtlbiBpbnRvIGNvbnNpZGVyYXRpb24uIFRoZSBrZXlzIGFyZSB1c2VkIHRvIGxvb2t1cCB2YWx1ZXMgZnJvbSB0aGUgaW5jb21pbmcgcG9kIGxhYmVscywgdGhvc2Uga2V5LXZhbHVlIGxhYmVscyBhcmUgbWVyZ2VkIHdpdGggYExhYmVsU2VsZWN0b3JgIGFzIGBrZXkgaW4gKHZhbHVlKWAgdG8gc2VsZWN0IHRoZSBncm91cCBvZiBleGlzdGluZyBwb2RzIHdoaWNoIHBvZHMgd2lsbCBiZSB0YWtlbiBpbnRvIGNvbnNpZGVyYXRpb24gZm9yIHRoZSBpbmNvbWluZyBwb2QncyBwb2QgKGFudGkpIGFmZmluaXR5LiBLZXlzIHRoYXQgZG9uJ3QgZXhpc3QgaW4gdGhlIGluY29taW5nIHBvZCBsYWJlbHMgd2lsbCBiZSBpZ25vcmVkLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBlbXB0eS4gVGhlIHNhbWUga2V5IGlzIGZvcmJpZGRlbiB0byBleGlzdCBpbiBib3RoIE1hdGNoTGFiZWxLZXlzIGFuZCBMYWJlbFNlbGVjdG9yLiBBbHNvLCBNYXRjaExhYmVsS2V5cyBjYW5ub3QgYmUgc2V0IHdoZW4gTGFiZWxTZWxlY3RvciBpc24ndCBzZXQuIFRoaXMgaXMgYW4gYWxwaGEgZmllbGQgYW5kIHJlcXVpcmVzIGVuYWJsaW5nIE1hdGNoTGFiZWxLZXlzSW5Qb2RBZmZpbml0eSBmZWF0dXJlIGdhdGUuIiwiaXRlbXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjoiYXJyYXkiLCJ4LWt1YmVybmV0ZXMtbGlzdC10eXBlIjoiYXRvbWljIn0sIm1pc21hdGNoTGFiZWxLZXlzIjp7ImRlc2NyaXB0aW9uIjoiTWlzbWF0Y2hMYWJlbEtleXMgaXMgYSBzZXQgb2YgcG9kIGxhYmVsIGtleXMgdG8gc2VsZWN0IHdoaWNoIHBvZHMgd2lsbCBiZSB0YWtlbiBpbnRvIGNvbnNpZGVyYXRpb24uIFRoZSBrZXlzIGFyZSB1c2VkIHRvIGxvb2t1cCB2YWx1ZXMgZnJvbSB0aGUgaW5jb21pbmcgcG9kIGxhYmVscywgdGhvc2Uga2V5LXZhbHVlIGxhYmVscyBhcmUgbWVyZ2VkIHdpdGggYExhYmVsU2VsZWN0b3JgIGFzIGBrZXkgbm90aW4gKHZhbHVlKWAgdG8gc2VsZWN0IHRoZSBncm91cCBvZiBleGlzdGluZyBwb2RzIHdoaWNoIHBvZHMgd2lsbCBiZSB0YWtlbiBpbnRvIGNvbnNpZGVyYXRpb24gZm9yIHRoZSBpbmNvbWluZyBwb2QncyBwb2QgKGFudGkpIGFmZmluaXR5LiBLZXlzIHRoYXQgZG9uJ3QgZXhpc3QgaW4gdGhlIGluY29taW5nIHBvZCBsYWJlbHMgd2lsbCBiZSBpZ25vcmVkLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBlbXB0eS4gVGhlIHNhbWUga2V5IGlzIGZvcmJpZGRlbiB0byBleGlzdCBpbiBib3RoIE1pc21hdGNoTGFiZWxLZXlzIGFuZCBMYWJlbFNlbGVjdG9yLiBBbHNvLCBNaXNtYXRjaExhYmVsS2V5cyBjYW5ub3QgYmUgc2V0IHdoZW4gTGFiZWxTZWxlY3RvciBpc24ndCBzZXQuIFRoaXMgaXMgYW4gYWxwaGEgZmllbGQgYW5kIHJlcXVpcmVzIGVuYWJsaW5nIE1hdGNoTGFiZWxLZXlzSW5Qb2RBZmZpbml0eSBmZWF0dXJlIGdhdGUuIiwiaXRlbXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjoiYXJyYXkiLCJ4LWt1YmVybmV0ZXMtbGlzdC10eXBlIjoiYXRvbWljIn0sIm5hbWVzcGFjZVNlbGVjdG9yIjp7ImRlc2NyaXB0aW9uIjoiQSBsYWJlbCBxdWVyeSBvdmVyIHRoZSBzZXQgb2YgbmFtZXNwYWNlcyB0aGF0IHRoZSB0ZXJtIGFwcGxpZXMgdG8uIFRoZSB0ZXJtIGlzIGFwcGxpZWQgdG8gdGhlIHVuaW9uIG9mIHRoZSBuYW1lc3BhY2VzIHNlbGVjdGVkIGJ5IHRoaXMgZmllbGQgYW5kIHRoZSBvbmVzIGxpc3RlZCBpbiB0aGUgbmFtZXNwYWNlcyBmaWVsZC4gbnVsbCBzZWxlY3RvciBhbmQgbnVsbCBvciBlbXB0eSBuYW1lc3BhY2VzIGxpc3QgbWVhbnMgXCJ0aGlzIHBvZCdzIG5hbWVzcGFjZVwiLiBBbiBlbXB0eSBzZWxlY3RvciAoe30pIG1hdGNoZXMgYWxsIG5hbWVzcGFjZXMuIiwicHJvcGVydGllcyI6eyJtYXRjaEV4cHJlc3Npb25zIjp7ImRlc2NyaXB0aW9uIjoibWF0Y2hFeHByZXNzaW9ucyBpcyBhIGxpc3Qgb2YgbGFiZWwgc2VsZWN0b3IgcmVxdWlyZW1lbnRzLiBUaGUgcmVxdWlyZW1lbnRzIGFyZSBBTkRlZC4iLCJpdGVtcyI6eyJkZXNjcmlwdGlvbiI6IkEgbGFiZWwgc2VsZWN0b3IgcmVxdWlyZW1lbnQgaXMgYSBzZWxlY3RvciB0aGF0IGNvbnRhaW5zIHZhbHVlcywgYSBrZXksIGFuZCBhbiBvcGVyYXRvciB0aGF0IHJlbGF0ZXMgdGhlIGtleSBhbmQgdmFsdWVzLiIsInByb3BlcnRpZXMiOnsia2V5Ijp7ImRlc2NyaXB0aW9uIjoia2V5IGlzIHRoZSBsYWJlbCBrZXkgdGhhdCB0aGUgc2VsZWN0b3IgYXBwbGllcyB0by4iLCJ0eXBlIjoic3RyaW5nIn0sIm9wZXJhdG9yIjp7ImRlc2NyaXB0aW9uIjoib3BlcmF0b3IgcmVwcmVzZW50cyBhIGtleSdzIHJlbGF0aW9uc2hpcCB0byBhIHNldCBvZiB2YWx1ZXMuIFZhbGlkIG9wZXJhdG9ycyBhcmUgSW4sIE5vdEluLCBFeGlzdHMgYW5kIERvZXNOb3RFeGlzdC4iLCJ0eXBlIjoic3RyaW5nIn0sInZhbHVlcyI6eyJkZXNjcmlwdGlvbiI6InZhbHVlcyBpcyBhbiBhcnJheSBvZiBzdHJpbmcgdmFsdWVzLiBJZiB0aGUgb3BlcmF0b3IgaXMgSW4gb3IgTm90SW4sIHRoZSB2YWx1ZXMgYXJyYXkgbXVzdCBiZSBub24tZW1wdHkuIElmIHRoZSBvcGVyYXRvciBpcyBFeGlzdHMgb3IgRG9lc05vdEV4aXN0LCB0aGUgdmFsdWVzIGFycmF5IG11c3QgYmUgZW1wdHkuIFRoaXMgYXJyYXkgaXMgcmVwbGFjZWQgZHVyaW5nIGEgc3RyYXRlZ2ljIG1lcmdlIHBhdGNoLiIsIml0ZW1zIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6ImFycmF5In19LCJyZXF1aXJlZCI6WyJrZXkiLCJvcGVyYXRvciJdLCJ0eXBlIjoib2JqZWN0In0sInR5cGUiOiJhcnJheSJ9LCJtYXRjaExhYmVscyI6eyJhZGRpdGlvbmFsUHJvcGVydGllcyI6eyJ0eXBlIjoic3RyaW5nIn0sImRlc2NyaXB0aW9uIjoibWF0Y2hMYWJlbHMgaXMgYSBtYXAgb2Yge2tleSx2YWx1ZX0gcGFpcnMuIEEgc2luZ2xlIHtrZXksdmFsdWV9IGluIHRoZSBtYXRjaExhYmVscyBtYXAgaXMgZXF1aXZhbGVudCB0byBhbiBlbGVtZW50IG9mIG1hdGNoRXhwcmVzc2lvbnMsIHdob3NlIGtleSBmaWVsZCBpcyBcImtleVwiLCB0aGUgb3BlcmF0b3IgaXMgXCJJblwiLCBhbmQgdGhlIHZhbHVlcyBhcnJheSBjb250YWlucyBvbmx5IFwidmFsdWVcIi4gVGhlIHJlcXVpcmVtZW50cyBhcmUgQU5EZWQuIiwidHlwZSI6Im9iamVjdCJ9fSwidHlwZSI6Im9iamVjdCIsIngta3ViZXJuZXRlcy1tYXAtdHlwZSI6ImF0b21pYyJ9LCJuYW1lc3BhY2VzIjp7ImRlc2NyaXB0aW9uIjoibmFtZXNwYWNlcyBzcGVjaWZpZXMgYSBzdGF0aWMgbGlzdCBvZiBuYW1lc3BhY2UgbmFtZXMgdGhhdCB0aGUgdGVybSBhcHBsaWVzIHRvLiBUaGUgdGVybSBpcyBhcHBsaWVkIHRvIHRoZSB1bmlvbiBvZiB0aGUgbmFtZXNwYWNlcyBsaXN0ZWQgaW4gdGhpcyBmaWVsZCBhbmQgdGhlIG9uZXMgc2VsZWN0ZWQgYnkgbmFtZXNwYWNlU2VsZWN0b3IuIG51bGwgb3IgZW1wdHkgbmFtZXNwYWNlcyBsaXN0IGFuZCBudWxsIG5hbWVzcGFjZVNlbGVjdG9yIG1lYW5zIFwidGhpcyBwb2QncyBuYW1lc3BhY2VcIi4iLCJpdGVtcyI6eyJ0eXBlIjoic3RyaW5nIn0sInR5cGUiOiJhcnJheSJ9LCJ0b3BvbG9neUtleSI6eyJkZXNjcmlwdGlvbiI6IlRoaXMgcG9kIHNob3VsZCBiZSBjby1sb2NhdGVkIChhZmZpbml0eSkgb3Igbm90IGNvLWxvY2F0ZWQgKGFudGktYWZmaW5pdHkpIHdpdGggdGhlIHBvZHMgbWF0Y2hpbmcgdGhlIGxhYmVsU2VsZWN0b3IgaW4gdGhlIHNwZWNpZmllZCBuYW1lc3BhY2VzLCB3aGVyZSBjby1sb2NhdGVkIGlzIGRlZmluZWQgYXMgcnVubmluZyBvbiBhIG5vZGUgd2hvc2UgdmFsdWUgb2YgdGhlIGxhYmVsIHdpdGgga2V5IHRvcG9sb2d5S2V5IG1hdGNoZXMgdGhhdCBvZiBhbnkgbm9kZSBvbiB3aGljaCBhbnkgb2YgdGhlIHNlbGVjdGVkIHBvZHMgaXMgcnVubmluZy4gRW1wdHkgdG9wb2xvZ3lLZXkgaXMgbm90IGFsbG93ZWQuIiwidHlwZSI6InN0cmluZyJ9fSwicmVxdWlyZWQiOlsidG9wb2xvZ3lLZXkiXSwidHlwZSI6Im9iamVjdCJ9LCJ0eXBlIjoiYXJyYXkifX0sInR5cGUiOiJvYmplY3QifSwicG9kQW50aUFmZmluaXR5Ijp7ImRlc2NyaXB0aW9uIjoiUG9kQW50aUFmZmluaXR5IGlzIGEgZ3JvdXAgb2YgaW50ZXIgcG9kIGFudGkgYWZmaW5pdHkgc2NoZWR1bGluZyBydWxlcyIsInByb3BlcnRpZXMiOnsicHJlZmVycmVkRHVyaW5nU2NoZWR1bGluZ0lnbm9yZWREdXJpbmdFeGVjdXRpb24iOnsiZGVzY3JpcHRpb24iOiJUaGUgc2NoZWR1bGVyIHdpbGwgcHJlZmVyIHRvIHNjaGVkdWxlIHBvZHMgdG8gbm9kZXMgdGhhdCBzYXRpc2Z5IHRoZSBhbnRpLWFmZmluaXR5IGV4cHJlc3Npb25zIHNwZWNpZmllZCBieSB0aGlzIGZpZWxkLCBidXQgaXQgbWF5IGNob29zZSBhIG5vZGUgdGhhdCB2aW9sYXRlcyBvbmUgb3IgbW9yZSBvZiB0aGUgZXhwcmVzc2lvbnMuIFRoZSBub2RlIHRoYXQgaXMgbW9zdCBwcmVmZXJyZWQgaXMgdGhlIG9uZSB3aXRoIHRoZSBncmVhdGVzdCBzdW0gb2Ygd2VpZ2h0cywgaS5lLiBmb3IgZWFjaCBub2RlIHRoYXQgbWVldHMgYWxsIG9mIHRoZSBzY2hlZHVsaW5nIHJlcXVpcmVtZW50cyAocmVzb3VyY2UgcmVxdWVzdCwgcmVxdWlyZWREdXJpbmdTY2hlZHVsaW5nIGFudGktYWZmaW5pdHkgZXhwcmVzc2lvbnMsIGV0Yy4pLCBjb21wdXRlIGEgc3VtIGJ5IGl0ZXJhdGluZyB0aHJvdWdoIHRoZSBlbGVtZW50cyBvZiB0aGlzIGZpZWxkIGFuZCBhZGRpbmcgXCJ3ZWlnaHRcIiB0byB0aGUgc3VtIGlmIHRoZSBub2RlIGhhcyBwb2RzIHdoaWNoIG1hdGNoZXMgdGhlIGNvcnJlc3BvbmRpbmcgcG9kQWZmaW5pdHlUZXJtOyB0aGUgbm9kZShzKSB3aXRoIHRoZSBoaWdoZXN0IHN1bSBhcmUgdGhlIG1vc3QgcHJlZmVycmVkLiIsIml0ZW1zIjp7ImRlc2NyaXB0aW9uIjoiVGhlIHdlaWdodHMgb2YgYWxsIG9mIHRoZSBtYXRjaGVkIFdlaWdodGVkUG9kQWZmaW5pdHlUZXJtIGZpZWxkcyBhcmUgYWRkZWQgcGVyLW5vZGUgdG8gZmluZCB0aGUgbW9zdCBwcmVmZXJyZWQgbm9kZShzKSIsInByb3BlcnRpZXMiOnsicG9kQWZmaW5pdHlUZXJtIjp7ImRlc2NyaXB0aW9uIjoiUmVxdWlyZWQuIEEgcG9kIGFmZmluaXR5IHRlcm0sIGFzc29jaWF0ZWQgd2l0aCB0aGUgY29ycmVzcG9uZGluZyB3ZWlnaHQuIiwicHJvcGVydGllcyI6eyJsYWJlbFNlbGVjdG9yIjp7ImRlc2NyaXB0aW9uIjoiQSBsYWJlbCBxdWVyeSBvdmVyIGEgc2V0IG9mIHJlc291cmNlcywgaW4gdGhpcyBjYXNlIHBvZHMuIElmIGl0J3MgbnVsbCwgdGhpcyBQb2RBZmZpbml0eVRlcm0gbWF0Y2hlcyB3aXRoIG5vIFBvZHMuIiwicHJvcGVydGllcyI6eyJtYXRjaEV4cHJlc3Npb25zIjp7ImRlc2NyaXB0aW9uIjoibWF0Y2hFeHByZXNzaW9ucyBpcyBhIGxpc3Qgb2YgbGFiZWwgc2VsZWN0b3IgcmVxdWlyZW1lbnRzLiBUaGUgcmVxdWlyZW1lbnRzIGFyZSBBTkRlZC4iLCJpdGVtcyI6eyJkZXNjcmlwdGlvbiI6IkEgbGFiZWwgc2VsZWN0b3IgcmVxdWlyZW1lbnQgaXMgYSBzZWxlY3RvciB0aGF0IGNvbnRhaW5zIHZhbHVlcywgYSBrZXksIGFuZCBhbiBvcGVyYXRvciB0aGF0IHJlbGF0ZXMgdGhlIGtleSBhbmQgdmFsdWVzLiIsInByb3BlcnRpZXMiOnsia2V5Ijp7ImRlc2NyaXB0aW9uIjoia2V5IGlzIHRoZSBsYWJlbCBrZXkgdGhhdCB0aGUgc2VsZWN0b3IgYXBwbGllcyB0by4iLCJ0eXBlIjoic3RyaW5nIn0sIm9wZXJhdG9yIjp7ImRlc2NyaXB0aW9uIjoib3BlcmF0b3IgcmVwcmVzZW50cyBhIGtleSdzIHJlbGF0aW9uc2hpcCB0byBhIHNldCBvZiB2YWx1ZXMuIFZhbGlkIG9wZXJhdG9ycyBhcmUgSW4sIE5vdEluLCBFeGlzdHMgYW5kIERvZXNOb3RFeGlzdC4iLCJ0eXBlIjoic3RyaW5nIn0sInZhbHVlcyI6eyJkZXNjcmlwdGlvbiI6InZhbHVlcyBpcyBhbiBhcnJheSBvZiBzdHJpbmcgdmFsdWVzLiBJZiB0aGUgb3BlcmF0b3IgaXMgSW4gb3IgTm90SW4sIHRoZSB2YWx1ZXMgYXJyYXkgbXVzdCBiZSBub24tZW1wdHkuIElmIHRoZSBvcGVyYXRvciBpcyBFeGlzdHMgb3IgRG9lc05vdEV4aXN0LCB0aGUgdmFsdWVzIGFycmF5IG11c3QgYmUgZW1wdHkuIFRoaXMgYXJyYXkgaXMgcmVwbGFjZWQgZHVyaW5nIGEgc3RyYXRlZ2ljIG1lcmdlIHBhdGNoLiIsIml0ZW1zIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6ImFycmF5In19LCJyZXF1aXJlZCI6WyJrZXkiLCJvcGVyYXRvciJdLCJ0eXBlIjoib2JqZWN0In0sInR5cGUiOiJhcnJheSJ9LCJtYXRjaExhYmVscyI6eyJhZGRpdGlvbmFsUHJvcGVydGllcyI6eyJ0eXBlIjoic3RyaW5nIn0sImRlc2NyaXB0aW9uIjoibWF0Y2hMYWJlbHMgaXMgYSBtYXAgb2Yge2tleSx2YWx1ZX0gcGFpcnMuIEEgc2luZ2xlIHtrZXksdmFsdWV9IGluIHRoZSBtYXRjaExhYmVscyBtYXAgaXMgZXF1aXZhbGVudCB0byBhbiBlbGVtZW50IG9mIG1hdGNoRXhwcmVzc2lvbnMsIHdob3NlIGtleSBmaWVsZCBpcyBcImtleVwiLCB0aGUgb3BlcmF0b3IgaXMgXCJJblwiLCBhbmQgdGhlIHZhbHVlcyBhcnJheSBjb250YWlucyBvbmx5IFwidmFsdWVcIi4gVGhlIHJlcXVpcmVtZW50cyBhcmUgQU5EZWQuIiwidHlwZSI6Im9iamVjdCJ9fSwidHlwZSI6Im9iamVjdCIsIngta3ViZXJuZXRlcy1tYXAtdHlwZSI6ImF0b21pYyJ9LCJtYXRjaExhYmVsS2V5cyI6eyJkZXNjcmlwdGlvbiI6Ik1hdGNoTGFiZWxLZXlzIGlzIGEgc2V0IG9mIHBvZCBsYWJlbCBrZXlzIHRvIHNlbGVjdCB3aGljaCBwb2RzIHdpbGwgYmUgdGFrZW4gaW50byBjb25zaWRlcmF0aW9uLiBUaGUga2V5cyBhcmUgdXNlZCB0byBsb29rdXAgdmFsdWVzIGZyb20gdGhlIGluY29taW5nIHBvZCBsYWJlbHMsIHRob3NlIGtleS12YWx1ZSBsYWJlbHMgYXJlIG1lcmdlZCB3aXRoIGBMYWJlbFNlbGVjdG9yYCBhcyBga2V5IGluICh2YWx1ZSlgIHRvIHNlbGVjdCB0aGUgZ3JvdXAgb2YgZXhpc3RpbmcgcG9kcyB3aGljaCBwb2RzIHdpbGwgYmUgdGFrZW4gaW50byBjb25zaWRlcmF0aW9uIGZvciB0aGUgaW5jb21pbmcgcG9kJ3MgcG9kIChhbnRpKSBhZmZpbml0eS4gS2V5cyB0aGF0IGRvbid0IGV4aXN0IGluIHRoZSBpbmNvbWluZyBwb2QgbGFiZWxzIHdpbGwgYmUgaWdub3JlZC4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgZW1wdHkuIFRoZSBzYW1lIGtleSBpcyBmb3JiaWRkZW4gdG8gZXhpc3QgaW4gYm90aCBNYXRjaExhYmVsS2V5cyBhbmQgTGFiZWxTZWxlY3Rvci4gQWxzbywgTWF0Y2hMYWJlbEtleXMgY2Fubm90IGJlIHNldCB3aGVuIExhYmVsU2VsZWN0b3IgaXNuJ3Qgc2V0LiBUaGlzIGlzIGFuIGFscGhhIGZpZWxkIGFuZCByZXF1aXJlcyBlbmFibGluZyBNYXRjaExhYmVsS2V5c0luUG9kQWZmaW5pdHkgZmVhdHVyZSBnYXRlLiIsIml0ZW1zIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6ImFycmF5IiwieC1rdWJlcm5ldGVzLWxpc3QtdHlwZSI6ImF0b21pYyJ9LCJtaXNtYXRjaExhYmVsS2V5cyI6eyJkZXNjcmlwdGlvbiI6Ik1pc21hdGNoTGFiZWxLZXlzIGlzIGEgc2V0IG9mIHBvZCBsYWJlbCBrZXlzIHRvIHNlbGVjdCB3aGljaCBwb2RzIHdpbGwgYmUgdGFrZW4gaW50byBjb25zaWRlcmF0aW9uLiBUaGUga2V5cyBhcmUgdXNlZCB0byBsb29rdXAgdmFsdWVzIGZyb20gdGhlIGluY29taW5nIHBvZCBsYWJlbHMsIHRob3NlIGtleS12YWx1ZSBsYWJlbHMgYXJlIG1lcmdlZCB3aXRoIGBMYWJlbFNlbGVjdG9yYCBhcyBga2V5IG5vdGluICh2YWx1ZSlgIHRvIHNlbGVjdCB0aGUgZ3JvdXAgb2YgZXhpc3RpbmcgcG9kcyB3aGljaCBwb2RzIHdpbGwgYmUgdGFrZW4gaW50byBjb25zaWRlcmF0aW9uIGZvciB0aGUgaW5jb21pbmcgcG9kJ3MgcG9kIChhbnRpKSBhZmZpbml0eS4gS2V5cyB0aGF0IGRvbid0IGV4aXN0IGluIHRoZSBpbmNvbWluZyBwb2QgbGFiZWxzIHdpbGwgYmUgaWdub3JlZC4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgZW1wdHkuIFRoZSBzYW1lIGtleSBpcyBmb3JiaWRkZW4gdG8gZXhpc3QgaW4gYm90aCBNaXNtYXRjaExhYmVsS2V5cyBhbmQgTGFiZWxTZWxlY3Rvci4gQWxzbywgTWlzbWF0Y2hMYWJlbEtleXMgY2Fubm90IGJlIHNldCB3aGVuIExhYmVsU2VsZWN0b3IgaXNuJ3Qgc2V0LiBUaGlzIGlzIGFuIGFscGhhIGZpZWxkIGFuZCByZXF1aXJlcyBlbmFibGluZyBNYXRjaExhYmVsS2V5c0luUG9kQWZmaW5pdHkgZmVhdHVyZSBnYXRlLiIsIml0ZW1zIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6ImFycmF5IiwieC1rdWJlcm5ldGVzLWxpc3QtdHlwZSI6ImF0b21pYyJ9LCJuYW1lc3BhY2VTZWxlY3RvciI6eyJkZXNjcmlwdGlvbiI6IkEgbGFiZWwgcXVlcnkgb3ZlciB0aGUgc2V0IG9mIG5hbWVzcGFjZXMgdGhhdCB0aGUgdGVybSBhcHBsaWVzIHRvLiBUaGUgdGVybSBpcyBhcHBsaWVkIHRvIHRoZSB1bmlvbiBvZiB0aGUgbmFtZXNwYWNlcyBzZWxlY3RlZCBieSB0aGlzIGZpZWxkIGFuZCB0aGUgb25lcyBsaXN0ZWQgaW4gdGhlIG5hbWVzcGFjZXMgZmllbGQuIG51bGwgc2VsZWN0b3IgYW5kIG51bGwgb3IgZW1wdHkgbmFtZXNwYWNlcyBsaXN0IG1lYW5zIFwidGhpcyBwb2QncyBuYW1lc3BhY2VcIi4gQW4gZW1wdHkgc2VsZWN0b3IgKHt9KSBtYXRjaGVzIGFsbCBuYW1lc3BhY2VzLiIsInByb3BlcnRpZXMiOnsibWF0Y2hFeHByZXNzaW9ucyI6eyJkZXNjcmlwdGlvbiI6Im1hdGNoRXhwcmVzc2lvbnMgaXMgYSBsaXN0IG9mIGxhYmVsIHNlbGVjdG9yIHJlcXVpcmVtZW50cy4gVGhlIHJlcXVpcmVtZW50cyBhcmUgQU5EZWQuIiwiaXRlbXMiOnsiZGVzY3JpcHRpb24iOiJBIGxhYmVsIHNlbGVjdG9yIHJlcXVpcmVtZW50IGlzIGEgc2VsZWN0b3IgdGhhdCBjb250YWlucyB2YWx1ZXMsIGEga2V5LCBhbmQgYW4gb3BlcmF0b3IgdGhhdCByZWxhdGVzIHRoZSBrZXkgYW5kIHZhbHVlcy4iLCJwcm9wZXJ0aWVzIjp7ImtleSI6eyJkZXNjcmlwdGlvbiI6ImtleSBpcyB0aGUgbGFiZWwga2V5IHRoYXQgdGhlIHNlbGVjdG9yIGFwcGxpZXMgdG8uIiwidHlwZSI6InN0cmluZyJ9LCJvcGVyYXRvciI6eyJkZXNjcmlwdGlvbiI6Im9wZXJhdG9yIHJlcHJlc2VudHMgYSBrZXkncyByZWxhdGlvbnNoaXAgdG8gYSBzZXQgb2YgdmFsdWVzLiBWYWxpZCBvcGVyYXRvcnMgYXJlIEluLCBOb3RJbiwgRXhpc3RzIGFuZCBEb2VzTm90RXhpc3QuIiwidHlwZSI6InN0cmluZyJ9LCJ2YWx1ZXMiOnsiZGVzY3JpcHRpb24iOiJ2YWx1ZXMgaXMgYW4gYXJyYXkgb2Ygc3RyaW5nIHZhbHVlcy4gSWYgdGhlIG9wZXJhdG9yIGlzIEluIG9yIE5vdEluLCB0aGUgdmFsdWVzIGFycmF5IG11c3QgYmUgbm9uLWVtcHR5LiBJZiB0aGUgb3BlcmF0b3IgaXMgRXhpc3RzIG9yIERvZXNOb3RFeGlzdCwgdGhlIHZhbHVlcyBhcnJheSBtdXN0IGJlIGVtcHR5LiBUaGlzIGFycmF5IGlzIHJlcGxhY2VkIGR1cmluZyBhIHN0cmF0ZWdpYyBtZXJnZSBwYXRjaC4iLCJpdGVtcyI6eyJ0eXBlIjoic3RyaW5nIn0sInR5cGUiOiJhcnJheSJ9fSwicmVxdWlyZWQiOlsia2V5Iiwib3BlcmF0b3IiXSwidHlwZSI6Im9iamVjdCJ9LCJ0eXBlIjoiYXJyYXkifSwibWF0Y2hMYWJlbHMiOnsiYWRkaXRpb25hbFByb3BlcnRpZXMiOnsidHlwZSI6InN0cmluZyJ9LCJkZXNjcmlwdGlvbiI6Im1hdGNoTGFiZWxzIGlzIGEgbWFwIG9mIHtrZXksdmFsdWV9IHBhaXJzLiBBIHNpbmdsZSB7a2V5LHZhbHVlfSBpbiB0aGUgbWF0Y2hMYWJlbHMgbWFwIGlzIGVxdWl2YWxlbnQgdG8gYW4gZWxlbWVudCBvZiBtYXRjaEV4cHJlc3Npb25zLCB3aG9zZSBrZXkgZmllbGQgaXMgXCJrZXlcIiwgdGhlIG9wZXJhdG9yIGlzIFwiSW5cIiwgYW5kIHRoZSB2YWx1ZXMgYXJyYXkgY29udGFpbnMgb25seSBcInZhbHVlXCIuIFRoZSByZXF1aXJlbWVudHMgYXJlIEFORGVkLiIsInR5cGUiOiJvYmplY3QifX0sInR5cGUiOiJvYmplY3QiLCJ4LWt1YmVybmV0ZXMtbWFwLXR5cGUiOiJhdG9taWMifSwibmFtZXNwYWNlcyI6eyJkZXNjcmlwdGlvbiI6Im5hbWVzcGFjZXMgc3BlY2lmaWVzIGEgc3RhdGljIGxpc3Qgb2YgbmFtZXNwYWNlIG5hbWVzIHRoYXQgdGhlIHRlcm0gYXBwbGllcyB0by4gVGhlIHRlcm0gaXMgYXBwbGllZCB0byB0aGUgdW5pb24gb2YgdGhlIG5hbWVzcGFjZXMgbGlzdGVkIGluIHRoaXMgZmllbGQgYW5kIHRoZSBvbmVzIHNlbGVjdGVkIGJ5IG5hbWVzcGFjZVNlbGVjdG9yLiBudWxsIG9yIGVtcHR5IG5hbWVzcGFjZXMgbGlzdCBhbmQgbnVsbCBuYW1lc3BhY2VTZWxlY3RvciBtZWFucyBcInRoaXMgcG9kJ3MgbmFtZXNwYWNlXCIuIiwiaXRlbXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjoiYXJyYXkifSwidG9wb2xvZ3lLZXkiOnsiZGVzY3JpcHRpb24iOiJUaGlzIHBvZCBzaG91bGQgYmUgY28tbG9jYXRlZCAoYWZmaW5pdHkpIG9yIG5vdCBjby1sb2NhdGVkIChhbnRpLWFmZmluaXR5KSB3aXRoIHRoZSBwb2RzIG1hdGNoaW5nIHRoZSBsYWJlbFNlbGVjdG9yIGluIHRoZSBzcGVjaWZpZWQgbmFtZXNwYWNlcywgd2hlcmUgY28tbG9jYXRlZCBpcyBkZWZpbmVkIGFzIHJ1bm5pbmcgb24gYSBub2RlIHdob3NlIHZhbHVlIG9mIHRoZSBsYWJlbCB3aXRoIGtleSB0b3BvbG9neUtleSBtYXRjaGVzIHRoYXQgb2YgYW55IG5vZGUgb24gd2hpY2ggYW55IG9mIHRoZSBzZWxlY3RlZCBwb2RzIGlzIHJ1bm5pbmcuIEVtcHR5IHRvcG9sb2d5S2V5IGlzIG5vdCBhbGxvd2VkLiIsInR5cGUiOiJzdHJpbmcifX0sInJlcXVpcmVkIjpbInRvcG9sb2d5S2V5Il0sInR5cGUiOiJvYmplY3QifSwid2VpZ2h0Ijp7ImRlc2NyaXB0aW9uIjoid2VpZ2h0IGFzc29jaWF0ZWQgd2l0aCBtYXRjaGluZyB0aGUgY29ycmVzcG9uZGluZyBwb2RBZmZpbml0eVRlcm0sIGluIHRoZSByYW5nZSAxLTEwMC4iLCJmb3JtYXQiOiJpbnQzMiIsInR5cGUiOiJpbnRlZ2VyIn19LCJyZXF1aXJlZCI6WyJwb2RBZmZpbml0eVRlcm0iLCJ3ZWlnaHQiXSwidHlwZSI6Im9iamVjdCJ9LCJ0eXBlIjoiYXJyYXkifSwicmVxdWlyZWREdXJpbmdTY2hlZHVsaW5nSWdub3JlZER1cmluZ0V4ZWN1dGlvbiI6eyJkZXNjcmlwdGlvbiI6IklmIHRoZSBhbnRpLWFmZmluaXR5IHJlcXVpcmVtZW50cyBzcGVjaWZpZWQgYnkgdGhpcyBmaWVsZCBhcmUgbm90IG1ldCBhdCBzY2hlZHVsaW5nIHRpbWUsIHRoZSBwb2Qgd2lsbCBub3QgYmUgc2NoZWR1bGVkIG9udG8gdGhlIG5vZGUuIElmIHRoZSBhbnRpLWFmZmluaXR5IHJlcXVpcmVtZW50cyBzcGVjaWZpZWQgYnkgdGhpcyBmaWVsZCBjZWFzZSB0byBiZSBtZXQgYXQgc29tZSBwb2ludCBkdXJpbmcgcG9kIGV4ZWN1dGlvbiAoZS5nLiBkdWUgdG8gYSBwb2QgbGFiZWwgdXBkYXRlKSwgdGhlIHN5c3RlbSBtYXkgb3IgbWF5IG5vdCB0cnkgdG8gZXZlbnR1YWxseSBldmljdCB0aGUgcG9kIGZyb20gaXRzIG5vZGUuIFdoZW4gdGhlcmUgYXJlIG11bHRpcGxlIGVsZW1lbnRzLCB0aGUgbGlzdHMgb2Ygbm9kZXMgY29ycmVzcG9uZGluZyB0byBlYWNoIHBvZEFmZmluaXR5VGVybSBhcmUgaW50ZXJzZWN0ZWQsIGkuZS4gYWxsIHRlcm1zIG11c3QgYmUgc2F0aXNmaWVkLiIsIml0ZW1zIjp7ImRlc2NyaXB0aW9uIjoiRGVmaW5lcyBhIHNldCBvZiBwb2RzIChuYW1lbHkgdGhvc2UgbWF0Y2hpbmcgdGhlIGxhYmVsU2VsZWN0b3IgcmVsYXRpdmUgdG8gdGhlIGdpdmVuIG5hbWVzcGFjZShzKSkgdGhhdCB0aGlzIHBvZCBzaG91bGQgYmUgY28tbG9jYXRlZCAoYWZmaW5pdHkpIG9yIG5vdCBjby1sb2NhdGVkIChhbnRpLWFmZmluaXR5KSB3aXRoLCB3aGVyZSBjby1sb2NhdGVkIGlzIGRlZmluZWQgYXMgcnVubmluZyBvbiBhIG5vZGUgd2hvc2UgdmFsdWUgb2YgdGhlIGxhYmVsIHdpdGgga2V5IFx1MDAzY3RvcG9sb2d5S2V5XHUwMDNlIG1hdGNoZXMgdGhhdCBvZiBhbnkgbm9kZSBvbiB3aGljaCBhIHBvZCBvZiB0aGUgc2V0IG9mIHBvZHMgaXMgcnVubmluZyIsInByb3BlcnRpZXMiOnsibGFiZWxTZWxlY3RvciI6eyJkZXNjcmlwdGlvbiI6IkEgbGFiZWwgcXVlcnkgb3ZlciBhIHNldCBvZiByZXNvdXJjZXMsIGluIHRoaXMgY2FzZSBwb2RzLiBJZiBpdCdzIG51bGwsIHRoaXMgUG9kQWZmaW5pdHlUZXJtIG1hdGNoZXMgd2l0aCBubyBQb2RzLiIsInByb3BlcnRpZXMiOnsibWF0Y2hFeHByZXNzaW9ucyI6eyJkZXNjcmlwdGlvbiI6Im1hdGNoRXhwcmVzc2lvbnMgaXMgYSBsaXN0IG9mIGxhYmVsIHNlbGVjdG9yIHJlcXVpcmVtZW50cy4gVGhlIHJlcXVpcmVtZW50cyBhcmUgQU5EZWQuIiwiaXRlbXMiOnsiZGVzY3JpcHRpb24iOiJBIGxhYmVsIHNlbGVjdG9yIHJlcXVpcmVtZW50IGlzIGEgc2VsZWN0b3IgdGhhdCBjb250YWlucyB2YWx1ZXMsIGEga2V5LCBhbmQgYW4gb3BlcmF0b3IgdGhhdCByZWxhdGVzIHRoZSBrZXkgYW5kIHZhbHVlcy4iLCJwcm9wZXJ0aWVzIjp7ImtleSI6eyJkZXNjcmlwdGlvbiI6ImtleSBpcyB0aGUgbGFiZWwga2V5IHRoYXQgdGhlIHNlbGVjdG9yIGFwcGxpZXMgdG8uIiwidHlwZSI6InN0cmluZyJ9LCJvcGVyYXRvciI6eyJkZXNjcmlwdGlvbiI6Im9wZXJhdG9yIHJlcHJlc2VudHMgYSBrZXkncyByZWxhdGlvbnNoaXAgdG8gYSBzZXQgb2YgdmFsdWVzLiBWYWxpZCBvcGVyYXRvcnMgYXJlIEluLCBOb3RJbiwgRXhpc3RzIGFuZCBEb2VzTm90RXhpc3QuIiwidHlwZSI6InN0cmluZyJ9LCJ2YWx1ZXMiOnsiZGVzY3JpcHRpb24iOiJ2YWx1ZXMgaXMgYW4gYXJyYXkgb2Ygc3RyaW5nIHZhbHVlcy4gSWYgdGhlIG9wZXJhdG9yIGlzIEluIG9yIE5vdEluLCB0aGUgdmFsdWVzIGFycmF5IG11c3QgYmUgbm9uLWVtcHR5LiBJZiB0aGUgb3BlcmF0b3IgaXMgRXhpc3RzIG9yIERvZXNOb3RFeGlzdCwgdGhlIHZhbHVlcyBhcnJheSBtdXN0IGJlIGVtcHR5LiBUaGlzIGFycmF5IGlzIHJlcGxhY2VkIGR1cmluZyBhIHN0cmF0ZWdpYyBtZXJnZSBwYXRjaC4iLCJpdGVtcyI6eyJ0eXBlIjoic3RyaW5nIn0sInR5cGUiOiJhcnJheSJ9fSwicmVxdWlyZWQiOlsia2V5Iiwib3BlcmF0b3IiXSwidHlwZSI6Im9iamVjdCJ9LCJ0eXBlIjoiYXJyYXkifSwibWF0Y2hMYWJlbHMiOnsiYWRkaXRpb25hbFByb3BlcnRpZXMiOnsidHlwZSI6InN0cmluZyJ9LCJkZXNjcmlwdGlvbiI6Im1hdGNoTGFiZWxzIGlzIGEgbWFwIG9mIHtrZXksdmFsdWV9IHBhaXJzLiBBIHNpbmdsZSB7a2V5LHZhbHVlfSBpbiB0aGUgbWF0Y2hMYWJlbHMgbWFwIGlzIGVxdWl2YWxlbnQgdG8gYW4gZWxlbWVudCBvZiBtYXRjaEV4cHJlc3Npb25zLCB3aG9zZSBrZXkgZmllbGQgaXMgXCJrZXlcIiwgdGhlIG9wZXJhdG9yIGlzIFwiSW5cIiwgYW5kIHRoZSB2YWx1ZXMgYXJyYXkgY29udGFpbnMgb25seSBcInZhbHVlXCIuIFRoZSByZXF1aXJlbWVudHMgYXJlIEFORGVkLiIsInR5cGUiOiJvYmplY3QifX0sInR5cGUiOiJvYmplY3QiLCJ4LWt1YmVybmV0ZXMtbWFwLXR5cGUiOiJhdG9taWMifSwibWF0Y2hMYWJlbEtleXMiOnsiZGVzY3JpcHRpb24iOiJNYXRjaExhYmVsS2V5cyBpcyBhIHNldCBvZiBwb2QgbGFiZWwga2V5cyB0byBzZWxlY3Qgd2hpY2ggcG9kcyB3aWxsIGJlIHRha2VuIGludG8gY29uc2lkZXJhdGlvbi4gVGhlIGtleXMgYXJlIHVzZWQgdG8gbG9va3VwIHZhbHVlcyBmcm9tIHRoZSBpbmNvbWluZyBwb2QgbGFiZWxzLCB0aG9zZSBrZXktdmFsdWUgbGFiZWxzIGFyZSBtZXJnZWQgd2l0aCBgTGFiZWxTZWxlY3RvcmAgYXMgYGtleSBpbiAodmFsdWUpYCB0byBzZWxlY3QgdGhlIGdyb3VwIG9mIGV4aXN0aW5nIHBvZHMgd2hpY2ggcG9kcyB3aWxsIGJlIHRha2VuIGludG8gY29uc2lkZXJhdGlvbiBmb3IgdGhlIGluY29taW5nIHBvZCdzIHBvZCAoYW50aSkgYWZmaW5pdHkuIEtleXMgdGhhdCBkb24ndCBleGlzdCBpbiB0aGUgaW5jb21pbmcgcG9kIGxhYmVscyB3aWxsIGJlIGlnbm9yZWQuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGVtcHR5LiBUaGUgc2FtZSBrZXkgaXMgZm9yYmlkZGVuIHRvIGV4aXN0IGluIGJvdGggTWF0Y2hMYWJlbEtleXMgYW5kIExhYmVsU2VsZWN0b3IuIEFsc28sIE1hdGNoTGFiZWxLZXlzIGNhbm5vdCBiZSBzZXQgd2hlbiBMYWJlbFNlbGVjdG9yIGlzbid0IHNldC4gVGhpcyBpcyBhbiBhbHBoYSBmaWVsZCBhbmQgcmVxdWlyZXMgZW5hYmxpbmcgTWF0Y2hMYWJlbEtleXNJblBvZEFmZmluaXR5IGZlYXR1cmUgZ2F0ZS4iLCJpdGVtcyI6eyJ0eXBlIjoic3RyaW5nIn0sInR5cGUiOiJhcnJheSIsIngta3ViZXJuZXRlcy1saXN0LXR5cGUiOiJhdG9taWMifSwibWlzbWF0Y2hMYWJlbEtleXMiOnsiZGVzY3JpcHRpb24iOiJNaXNtYXRjaExhYmVsS2V5cyBpcyBhIHNldCBvZiBwb2QgbGFiZWwga2V5cyB0byBzZWxlY3Qgd2hpY2ggcG9kcyB3aWxsIGJlIHRha2VuIGludG8gY29uc2lkZXJhdGlvbi4gVGhlIGtleXMgYXJlIHVzZWQgdG8gbG9va3VwIHZhbHVlcyBmcm9tIHRoZSBpbmNvbWluZyBwb2QgbGFiZWxzLCB0aG9zZSBrZXktdmFsdWUgbGFiZWxzIGFyZSBtZXJnZWQgd2l0aCBgTGFiZWxTZWxlY3RvcmAgYXMgYGtleSBub3RpbiAodmFsdWUpYCB0byBzZWxlY3QgdGhlIGdyb3VwIG9mIGV4aXN0aW5nIHBvZHMgd2hpY2ggcG9kcyB3aWxsIGJlIHRha2VuIGludG8gY29uc2lkZXJhdGlvbiBmb3IgdGhlIGluY29taW5nIHBvZCdzIHBvZCAoYW50aSkgYWZmaW5pdHkuIEtleXMgdGhhdCBkb24ndCBleGlzdCBpbiB0aGUgaW5jb21pbmcgcG9kIGxhYmVscyB3aWxsIGJlIGlnbm9yZWQuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGVtcHR5LiBUaGUgc2FtZSBrZXkgaXMgZm9yYmlkZGVuIHRvIGV4aXN0IGluIGJvdGggTWlzbWF0Y2hMYWJlbEtleXMgYW5kIExhYmVsU2VsZWN0b3IuIEFsc28sIE1pc21hdGNoTGFiZWxLZXlzIGNhbm5vdCBiZSBzZXQgd2hlbiBMYWJlbFNlbGVjdG9yIGlzbid0IHNldC4gVGhpcyBpcyBhbiBhbHBoYSBmaWVsZCBhbmQgcmVxdWlyZXMgZW5hYmxpbmcgTWF0Y2hMYWJlbEtleXNJblBvZEFmZmluaXR5IGZlYXR1cmUgZ2F0ZS4iLCJpdGVtcyI6eyJ0eXBlIjoic3RyaW5nIn0sInR5cGUiOiJhcnJheSIsIngta3ViZXJuZXRlcy1saXN0LXR5cGUiOiJhdG9taWMifSwibmFtZXNwYWNlU2VsZWN0b3IiOnsiZGVzY3JpcHRpb24iOiJBIGxhYmVsIHF1ZXJ5IG92ZXIgdGhlIHNldCBvZiBuYW1lc3BhY2VzIHRoYXQgdGhlIHRlcm0gYXBwbGllcyB0by4gVGhlIHRlcm0gaXMgYXBwbGllZCB0byB0aGUgdW5pb24gb2YgdGhlIG5hbWVzcGFjZXMgc2VsZWN0ZWQgYnkgdGhpcyBmaWVsZCBhbmQgdGhlIG9uZXMgbGlzdGVkIGluIHRoZSBuYW1lc3BhY2VzIGZpZWxkLiBudWxsIHNlbGVjdG9yIGFuZCBudWxsIG9yIGVtcHR5IG5hbWVzcGFjZXMgbGlzdCBtZWFucyBcInRoaXMgcG9kJ3MgbmFtZXNwYWNlXCIuIEFuIGVtcHR5IHNlbGVjdG9yICh7fSkgbWF0Y2hlcyBhbGwgbmFtZXNwYWNlcy4iLCJwcm9wZXJ0aWVzIjp7Im1hdGNoRXhwcmVzc2lvbnMiOnsiZGVzY3JpcHRpb24iOiJtYXRjaEV4cHJlc3Npb25zIGlzIGEgbGlzdCBvZiBsYWJlbCBzZWxlY3RvciByZXF1aXJlbWVudHMuIFRoZSByZXF1aXJlbWVudHMgYXJlIEFORGVkLiIsIml0ZW1zIjp7ImRlc2NyaXB0aW9uIjoiQSBsYWJlbCBzZWxlY3RvciByZXF1aXJlbWVudCBpcyBhIHNlbGVjdG9yIHRoYXQgY29udGFpbnMgdmFsdWVzLCBhIGtleSwgYW5kIGFuIG9wZXJhdG9yIHRoYXQgcmVsYXRlcyB0aGUga2V5IGFuZCB2YWx1ZXMuIiwicHJvcGVydGllcyI6eyJrZXkiOnsiZGVzY3JpcHRpb24iOiJrZXkgaXMgdGhlIGxhYmVsIGtleSB0aGF0IHRoZSBzZWxlY3RvciBhcHBsaWVzIHRvLiIsInR5cGUiOiJzdHJpbmcifSwib3BlcmF0b3IiOnsiZGVzY3JpcHRpb24iOiJvcGVyYXRvciByZXByZXNlbnRzIGEga2V5J3MgcmVsYXRpb25zaGlwIHRvIGEgc2V0IG9mIHZhbHVlcy4gVmFsaWQgb3BlcmF0b3JzIGFyZSBJbiwgTm90SW4sIEV4aXN0cyBhbmQgRG9lc05vdEV4aXN0LiIsInR5cGUiOiJzdHJpbmcifSwidmFsdWVzIjp7ImRlc2NyaXB0aW9uIjoidmFsdWVzIGlzIGFuIGFycmF5IG9mIHN0cmluZyB2YWx1ZXMuIElmIHRoZSBvcGVyYXRvciBpcyBJbiBvciBOb3RJbiwgdGhlIHZhbHVlcyBhcnJheSBtdXN0IGJlIG5vbi1lbXB0eS4gSWYgdGhlIG9wZXJhdG9yIGlzIEV4aXN0cyBvciBEb2VzTm90RXhpc3QsIHRoZSB2YWx1ZXMgYXJyYXkgbXVzdCBiZSBlbXB0eS4gVGhpcyBhcnJheSBpcyByZXBsYWNlZCBkdXJpbmcgYSBzdHJhdGVnaWMgbWVyZ2UgcGF0Y2guIiwiaXRlbXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjoiYXJyYXkifX0sInJlcXVpcmVkIjpbImtleSIsIm9wZXJhdG9yIl0sInR5cGUiOiJvYmplY3QifSwidHlwZSI6ImFycmF5In0sIm1hdGNoTGFiZWxzIjp7ImFkZGl0aW9uYWxQcm9wZXJ0aWVzIjp7InR5cGUiOiJzdHJpbmcifSwiZGVzY3JpcHRpb24iOiJtYXRjaExhYmVscyBpcyBhIG1hcCBvZiB7a2V5LHZhbHVlfSBwYWlycy4gQSBzaW5nbGUge2tleSx2YWx1ZX0gaW4gdGhlIG1hdGNoTGFiZWxzIG1hcCBpcyBlcXVpdmFsZW50IHRvIGFuIGVsZW1lbnQgb2YgbWF0Y2hFeHByZXNzaW9ucywgd2hvc2Uga2V5IGZpZWxkIGlzIFwia2V5XCIsIHRoZSBvcGVyYXRvciBpcyBcIkluXCIsIGFuZCB0aGUgdmFsdWVzIGFycmF5IGNvbnRhaW5zIG9ubHkgXCJ2YWx1ZVwiLiBUaGUgcmVxdWlyZW1lbnRzIGFyZSBBTkRlZC4iLCJ0eXBlIjoib2JqZWN0In19LCJ0eXBlIjoib2JqZWN0IiwieC1rdWJlcm5ldGVzLW1hcC10eXBlIjoiYXRvbWljIn0sIm5hbWVzcGFjZXMiOnsiZGVzY3JpcHRpb24iOiJuYW1lc3BhY2VzIHNwZWNpZmllcyBhIHN0YXRpYyBsaXN0IG9mIG5hbWVzcGFjZSBuYW1lcyB0aGF0IHRoZSB0ZXJtIGFwcGxpZXMgdG8uIFRoZSB0ZXJtIGlzIGFwcGxpZWQgdG8gdGhlIHVuaW9uIG9mIHRoZSBuYW1lc3BhY2VzIGxpc3RlZCBpbiB0aGlzIGZpZWxkIGFuZCB0aGUgb25lcyBzZWxlY3RlZCBieSBuYW1lc3BhY2VTZWxlY3Rvci4gbnVsbCBvciBlbXB0eSBuYW1lc3BhY2VzIGxpc3QgYW5kIG51bGwgbmFtZXNwYWNlU2VsZWN0b3IgbWVhbnMgXCJ0aGlzIHBvZCdzIG5hbWVzcGFjZVwiLiIsIml0ZW1zIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6ImFycmF5In0sInRvcG9sb2d5S2V5Ijp7ImRlc2NyaXB0aW9uIjoiVGhpcyBwb2Qgc2hvdWxkIGJlIGNvLWxvY2F0ZWQgKGFmZmluaXR5KSBvciBub3QgY28tbG9jYXRlZCAoYW50aS1hZmZpbml0eSkgd2l0aCB0aGUgcG9kcyBtYXRjaGluZyB0aGUgbGFiZWxTZWxlY3RvciBpbiB0aGUgc3BlY2lmaWVkIG5hbWVzcGFjZXMsIHdoZXJlIGNvLWxvY2F0ZWQgaXMgZGVmaW5lZCBhcyBydW5uaW5nIG9uIGEgbm9kZSB3aG9zZSB2YWx1ZSBvZiB0aGUgbGFiZWwgd2l0aCBrZXkgdG9wb2xvZ3lLZXkgbWF0Y2hlcyB0aGF0IG9mIGFueSBub2RlIG9uIHdoaWNoIGFueSBvZiB0aGUgc2VsZWN0ZWQgcG9kcyBpcyBydW5uaW5nLiBFbXB0eSB0b3BvbG9neUtleSBpcyBub3QgYWxsb3dlZC4iLCJ0eXBlIjoic3RyaW5nIn19LCJyZXF1aXJlZCI6WyJ0b3BvbG9neUtleSJdLCJ0eXBlIjoib2JqZWN0In0sInR5cGUiOiJhcnJheSJ9fSwidHlwZSI6Im9iamVjdCJ9LCJ0b2xlcmF0aW9ucyI6eyJkZXNjcmlwdGlvbiI6IlRoZSBwb2QgdGhpcyBUb2xlcmF0aW9uIGlzIGF0dGFjaGVkIHRvIHRvbGVyYXRlcyBhbnkgdGFpbnQgdGhhdCBtYXRjaGVzIHRoZSB0cmlwbGUgXHUwMDNja2V5LHZhbHVlLGVmZmVjdFx1MDAzZSB1c2luZyB0aGUgbWF0Y2hpbmcgb3BlcmF0b3IgXHUwMDNjb3BlcmF0b3JcdTAwM2UiLCJpdGVtcyI6eyJkZXNjcmlwdGlvbiI6IlRoZSBwb2QgdGhpcyBUb2xlcmF0aW9uIGlzIGF0dGFjaGVkIHRvIHRvbGVyYXRlcyBhbnkgdGFpbnQgdGhhdCBtYXRjaGVzIHRoZSB0cmlwbGUgXHUwMDNja2V5LHZhbHVlLGVmZmVjdFx1MDAzZSB1c2luZyB0aGUgbWF0Y2hpbmcgb3BlcmF0b3IgXHUwMDNjb3BlcmF0b3JcdTAwM2UuIiwicHJvcGVydGllcyI6eyJlZmZlY3QiOnsiZGVzY3JpcHRpb24iOiJFZmZlY3QgaW5kaWNhdGVzIHRoZSB0YWludCBlZmZlY3QgdG8gbWF0Y2guIEVtcHR5IG1lYW5zIG1hdGNoIGFsbCB0YWludCBlZmZlY3RzLiBXaGVuIHNwZWNpZmllZCwgYWxsb3dlZCB2YWx1ZXMgYXJlIE5vU2NoZWR1bGUsIFByZWZlck5vU2NoZWR1bGUgYW5kIE5vRXhlY3V0ZS4iLCJ0eXBlIjoic3RyaW5nIn0sImtleSI6eyJkZXNjcmlwdGlvbiI6IktleSBpcyB0aGUgdGFpbnQga2V5IHRoYXQgdGhlIHRvbGVyYXRpb24gYXBwbGllcyB0by4gRW1wdHkgbWVhbnMgbWF0Y2ggYWxsIHRhaW50IGtleXMuIElmIHRoZSBrZXkgaXMgZW1wdHksIG9wZXJhdG9yIG11c3QgYmUgRXhpc3RzOyB0aGlzIGNvbWJpbmF0aW9uIG1lYW5zIHRvIG1hdGNoIGFsbCB2YWx1ZXMgYW5kIGFsbCBrZXlzLiIsInR5cGUiOiJzdHJpbmcifSwib3BlcmF0b3IiOnsiZGVzY3JpcHRpb24iOiJPcGVyYXRvciByZXByZXNlbnRzIGEga2V5J3MgcmVsYXRpb25zaGlwIHRvIHRoZSB2YWx1ZS4gVmFsaWQgb3BlcmF0b3JzIGFyZSBFeGlzdHMgYW5kIEVxdWFsLiBEZWZhdWx0cyB0byBFcXVhbC4gRXhpc3RzIGlzIGVxdWl2YWxlbnQgdG8gd2lsZGNhcmQgZm9yIHZhbHVlLCBzbyB0aGF0IGEgcG9kIGNhbiB0b2xlcmF0ZSBhbGwgdGFpbnRzIG9mIGEgcGFydGljdWxhciBjYXRlZ29yeS4iLCJ0eXBlIjoic3RyaW5nIn0sInRvbGVyYXRpb25TZWNvbmRzIjp7ImRlc2NyaXB0aW9uIjoiVG9sZXJhdGlvblNlY29uZHMgcmVwcmVzZW50cyB0aGUgcGVyaW9kIG9mIHRpbWUgdGhlIHRvbGVyYXRpb24gKHdoaWNoIG11c3QgYmUgb2YgZWZmZWN0IE5vRXhlY3V0ZSwgb3RoZXJ3aXNlIHRoaXMgZmllbGQgaXMgaWdub3JlZCkgdG9sZXJhdGVzIHRoZSB0YWludC4gQnkgZGVmYXVsdCwgaXQgaXMgbm90IHNldCwgd2hpY2ggbWVhbnMgdG9sZXJhdGUgdGhlIHRhaW50IGZvcmV2ZXIgKGRvIG5vdCBldmljdCkuIFplcm8gYW5kIG5lZ2F0aXZlIHZhbHVlcyB3aWxsIGJlIHRyZWF0ZWQgYXMgMCAoZXZpY3QgaW1tZWRpYXRlbHkpIGJ5IHRoZSBzeXN0ZW0uIiwiZm9ybWF0IjoiaW50NjQiLCJ0eXBlIjoiaW50ZWdlciJ9LCJ2YWx1ZSI6eyJkZXNjcmlwdGlvbiI6IlZhbHVlIGlzIHRoZSB0YWludCB2YWx1ZSB0aGUgdG9sZXJhdGlvbiBtYXRjaGVzIHRvLiBJZiB0aGUgb3BlcmF0b3IgaXMgRXhpc3RzLCB0aGUgdmFsdWUgc2hvdWxkIGJlIGVtcHR5LCBvdGhlcndpc2UganVzdCBhIHJlZ3VsYXIgc3RyaW5nLiIsInR5cGUiOiJzdHJpbmcifX0sInR5cGUiOiJvYmplY3QifSwidHlwZSI6ImFycmF5In0sInRvcG9sb2d5U3ByZWFkQ29uc3RyYWludHMiOnsiZGVzY3JpcHRpb24iOiJUb3BvbG9neVNwcmVhZENvbnN0cmFpbnQgc3BlY2lmaWVzIGhvdyB0byBzcHJlYWQgbWF0Y2hpbmcgcG9kcyBhbW9uZyB0aGUgZ2l2ZW4gdG9wb2xvZ3kiLCJpdGVtcyI6eyJkZXNjcmlwdGlvbiI6IlRvcG9sb2d5U3ByZWFkQ29uc3RyYWludCBzcGVjaWZpZXMgaG93IHRvIHNwcmVhZCBtYXRjaGluZyBwb2RzIGFtb25nIHRoZSBnaXZlbiB0b3BvbG9neS4iLCJwcm9wZXJ0aWVzIjp7ImxhYmVsU2VsZWN0b3IiOnsiZGVzY3JpcHRpb24iOiJMYWJlbFNlbGVjdG9yIGlzIHVzZWQgdG8gZmluZCBtYXRjaGluZyBwb2RzLiBQb2RzIHRoYXQgbWF0Y2ggdGhpcyBsYWJlbCBzZWxlY3RvciBhcmUgY291bnRlZCB0byBkZXRlcm1pbmUgdGhlIG51bWJlciBvZiBwb2RzIGluIHRoZWlyIGNvcnJlc3BvbmRpbmcgdG9wb2xvZ3kgZG9tYWluLiIsInByb3BlcnRpZXMiOnsibWF0Y2hFeHByZXNzaW9ucyI6eyJkZXNjcmlwdGlvbiI6Im1hdGNoRXhwcmVzc2lvbnMgaXMgYSBsaXN0IG9mIGxhYmVsIHNlbGVjdG9yIHJlcXVpcmVtZW50cy4gVGhlIHJlcXVpcmVtZW50cyBhcmUgQU5EZWQuIiwiaXRlbXMiOnsiZGVzY3JpcHRpb24iOiJBIGxhYmVsIHNlbGVjdG9yIHJlcXVpcmVtZW50IGlzIGEgc2VsZWN0b3IgdGhhdCBjb250YWlucyB2YWx1ZXMsIGEga2V5LCBhbmQgYW4gb3BlcmF0b3IgdGhhdCByZWxhdGVzIHRoZSBrZXkgYW5kIHZhbHVlcy4iLCJwcm9wZXJ0aWVzIjp7ImtleSI6eyJkZXNjcmlwdGlvbiI6ImtleSBpcyB0aGUgbGFiZWwga2V5IHRoYXQgdGhlIHNlbGVjdG9yIGFwcGxpZXMgdG8uIiwidHlwZSI6InN0cmluZyJ9LCJvcGVyYXRvciI6eyJkZXNjcmlwdGlvbiI6Im9wZXJhdG9yIHJlcHJlc2VudHMgYSBrZXkncyByZWxhdGlvbnNoaXAgdG8gYSBzZXQgb2YgdmFsdWVzLiBWYWxpZCBvcGVyYXRvcnMgYXJlIEluLCBOb3RJbiwgRXhpc3RzIGFuZCBEb2VzTm90RXhpc3QuIiwidHlwZSI6InN0cmluZyJ9LCJ2YWx1ZXMiOnsiZGVzY3JpcHRpb24iOiJ2YWx1ZXMgaXMgYW4gYXJyYXkgb2Ygc3RyaW5nIHZhbHVlcy4gSWYgdGhlIG9wZXJhdG9yIGlzIEluIG9yIE5vdEluLCB0aGUgdmFsdWVzIGFycmF5IG11c3QgYmUgbm9uLWVtcHR5LiBJZiB0aGUgb3BlcmF0b3IgaXMgRXhpc3RzIG9yIERvZXNOb3RFeGlzdCwgdGhlIHZhbHVlcyBhcnJheSBtdXN0IGJlIGVtcHR5LiBUaGlzIGFycmF5IGlzIHJlcGxhY2VkIGR1cmluZyBhIHN0cmF0ZWdpYyBtZXJnZSBwYXRjaC4iLCJpdGVtcyI6eyJ0eXBlIjoic3RyaW5nIn0sInR5cGUiOiJhcnJheSJ9fSwicmVxdWlyZWQiOlsia2V5Iiwib3BlcmF0b3IiXSwidHlwZSI6Im9iamVjdCJ9LCJ0eXBlIjoiYXJyYXkifSwibWF0Y2hMYWJlbHMiOnsiYWRkaXRpb25hbFByb3BlcnRpZXMiOnsidHlwZSI6InN0cmluZyJ9LCJkZXNjcmlwdGlvbiI6Im1hdGNoTGFiZWxzIGlzIGEgbWFwIG9mIHtrZXksdmFsdWV9IHBhaXJzLiBBIHNpbmdsZSB7a2V5LHZhbHVlfSBpbiB0aGUgbWF0Y2hMYWJlbHMgbWFwIGlzIGVxdWl2YWxlbnQgdG8gYW4gZWxlbWVudCBvZiBtYXRjaEV4cHJlc3Npb25zLCB3aG9zZSBrZXkgZmllbGQgaXMgXCJrZXlcIiwgdGhlIG9wZXJhdG9yIGlzIFwiSW5cIiwgYW5kIHRoZSB2YWx1ZXMgYXJyYXkgY29udGFpbnMgb25seSBcInZhbHVlXCIuIFRoZSByZXF1aXJlbWVudHMgYXJlIEFORGVkLiIsInR5cGUiOiJvYmplY3QifX0sInR5cGUiOiJvYmplY3QiLCJ4LWt1YmVybmV0ZXMtbWFwLXR5cGUiOiJhdG9taWMifSwibWF0Y2hMYWJlbEtleXMiOnsiZGVzY3JpcHRpb24iOiJNYXRjaExhYmVsS2V5cyBpcyBhIHNldCBvZiBwb2QgbGFiZWwga2V5cyB0byBzZWxlY3QgdGhlIHBvZHMgb3ZlciB3aGljaCBzcHJlYWRpbmcgd2lsbCBiZSBjYWxjdWxhdGVkLiBUaGUga2V5cyBhcmUgdXNlZCB0byBsb29rdXAgdmFsdWVzIGZyb20gdGhlIGluY29taW5nIHBvZCBsYWJlbHMsIHRob3NlIGtleS12YWx1ZSBsYWJlbHMgYXJlIEFORGVkIHdpdGggbGFiZWxTZWxlY3RvciB0byBzZWxlY3QgdGhlIGdyb3VwIG9mIGV4aXN0aW5nIHBvZHMgb3ZlciB3aGljaCBzcHJlYWRpbmcgd2lsbCBiZSBjYWxjdWxhdGVkIGZvciB0aGUgaW5jb21pbmcgcG9kLiBUaGUgc2FtZSBrZXkgaXMgZm9yYmlkZGVuIHRvIGV4aXN0IGluIGJvdGggTWF0Y2hMYWJlbEtleXMgYW5kIExhYmVsU2VsZWN0b3IuIE1hdGNoTGFiZWxLZXlzIGNhbm5vdCBiZSBzZXQgd2hlbiBMYWJlbFNlbGVjdG9yIGlzbid0IHNldC4gS2V5cyB0aGF0IGRvbid0IGV4aXN0IGluIHRoZSBpbmNvbWluZyBwb2QgbGFiZWxzIHdpbGwgYmUgaWdub3JlZC4gQSBudWxsIG9yIGVtcHR5IGxpc3QgbWVhbnMgb25seSBtYXRjaCBhZ2FpbnN0IGxhYmVsU2VsZWN0b3IuIFxuIFRoaXMgaXMgYSBiZXRhIGZpZWxkIGFuZCByZXF1aXJlcyB0aGUgTWF0Y2hMYWJlbEtleXNJblBvZFRvcG9sb2d5U3ByZWFkIGZlYXR1cmUgZ2F0ZSB0byBiZSBlbmFibGVkIChlbmFibGVkIGJ5IGRlZmF1bHQpLiIsIml0ZW1zIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6ImFycmF5IiwieC1rdWJlcm5ldGVzLWxpc3QtdHlwZSI6ImF0b21pYyJ9LCJtYXhTa2V3Ijp7ImRlc2NyaXB0aW9uIjoiTWF4U2tldyBkZXNjcmliZXMgdGhlIGRlZ3JlZSB0byB3aGljaCBwb2RzIG1heSBiZSB1bmV2ZW5seSBkaXN0cmlidXRlZC4gV2hlbiBgd2hlblVuc2F0aXNmaWFibGU9RG9Ob3RTY2hlZHVsZWAsIGl0IGlzIHRoZSBtYXhpbXVtIHBlcm1pdHRlZCBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIG51bWJlciBvZiBtYXRjaGluZyBwb2RzIGluIHRoZSB0YXJnZXQgdG9wb2xvZ3kgYW5kIHRoZSBnbG9iYWwgbWluaW11bS4gVGhlIGdsb2JhbCBtaW5pbXVtIGlzIHRoZSBtaW5pbXVtIG51bWJlciBvZiBtYXRjaGluZyBwb2RzIGluIGFuIGVsaWdpYmxlIGRvbWFpbiBvciB6ZXJvIGlmIHRoZSBudW1iZXIgb2YgZWxpZ2libGUgZG9tYWlucyBpcyBsZXNzIHRoYW4gTWluRG9tYWlucy4gRm9yIGV4YW1wbGUsIGluIGEgMy16b25lIGNsdXN0ZXIsIE1heFNrZXcgaXMgc2V0IHRvIDEsIGFuZCBwb2RzIHdpdGggdGhlIHNhbWUgbGFiZWxTZWxlY3RvciBzcHJlYWQgYXMgMi8yLzE6IEluIHRoaXMgY2FzZSwgdGhlIGdsb2JhbCBtaW5pbXVtIGlzIDEuIHwgem9uZTEgfCB6b25lMiB8IHpvbmUzIHwgfCAgUCBQICB8ICBQIFAgIHwgICBQICAgfCAtIGlmIE1heFNrZXcgaXMgMSwgaW5jb21pbmcgcG9kIGNhbiBvbmx5IGJlIHNjaGVkdWxlZCB0byB6b25lMyB0byBiZWNvbWUgMi8yLzI7IHNjaGVkdWxpbmcgaXQgb250byB6b25lMSh6b25lMikgd291bGQgbWFrZSB0aGUgQWN0dWFsU2tldygzLTEpIG9uIHpvbmUxKHpvbmUyKSB2aW9sYXRlIE1heFNrZXcoMSkuIC0gaWYgTWF4U2tldyBpcyAyLCBpbmNvbWluZyBwb2QgY2FuIGJlIHNjaGVkdWxlZCBvbnRvIGFueSB6b25lLiBXaGVuIGB3aGVuVW5zYXRpc2ZpYWJsZT1TY2hlZHVsZUFueXdheWAsIGl0IGlzIHVzZWQgdG8gZ2l2ZSBoaWdoZXIgcHJlY2VkZW5jZSB0byB0b3BvbG9naWVzIHRoYXQgc2F0aXNmeSBpdC4gSXQncyBhIHJlcXVpcmVkIGZpZWxkLiBEZWZhdWx0IHZhbHVlIGlzIDEgYW5kIDAgaXMgbm90IGFsbG93ZWQuIiwiZm9ybWF0IjoiaW50MzIiLCJ0eXBlIjoiaW50ZWdlciJ9LCJtaW5Eb21haW5zIjp7ImRlc2NyaXB0aW9uIjoiTWluRG9tYWlucyBpbmRpY2F0ZXMgYSBtaW5pbXVtIG51bWJlciBvZiBlbGlnaWJsZSBkb21haW5zLiBXaGVuIHRoZSBudW1iZXIgb2YgZWxpZ2libGUgZG9tYWlucyB3aXRoIG1hdGNoaW5nIHRvcG9sb2d5IGtleXMgaXMgbGVzcyB0aGFuIG1pbkRvbWFpbnMsIFBvZCBUb3BvbG9neSBTcHJlYWQgdHJlYXRzIFwiZ2xvYmFsIG1pbmltdW1cIiBhcyAwLCBhbmQgdGhlbiB0aGUgY2FsY3VsYXRpb24gb2YgU2tldyBpcyBwZXJmb3JtZWQuIEFuZCB3aGVuIHRoZSBudW1iZXIgb2YgZWxpZ2libGUgZG9tYWlucyB3aXRoIG1hdGNoaW5nIHRvcG9sb2d5IGtleXMgZXF1YWxzIG9yIGdyZWF0ZXIgdGhhbiBtaW5Eb21haW5zLCB0aGlzIHZhbHVlIGhhcyBubyBlZmZlY3Qgb24gc2NoZWR1bGluZy4gQXMgYSByZXN1bHQsIHdoZW4gdGhlIG51bWJlciBvZiBlbGlnaWJsZSBkb21haW5zIGlzIGxlc3MgdGhhbiBtaW5Eb21haW5zLCBzY2hlZHVsZXIgd29uJ3Qgc2NoZWR1bGUgbW9yZSB0aGFuIG1heFNrZXcgUG9kcyB0byB0aG9zZSBkb21haW5zLiBJZiB2YWx1ZSBpcyBuaWwsIHRoZSBjb25zdHJhaW50IGJlaGF2ZXMgYXMgaWYgTWluRG9tYWlucyBpcyBlcXVhbCB0byAxLiBWYWxpZCB2YWx1ZXMgYXJlIGludGVnZXJzIGdyZWF0ZXIgdGhhbiAwLiBXaGVuIHZhbHVlIGlzIG5vdCBuaWwsIFdoZW5VbnNhdGlzZmlhYmxlIG11c3QgYmUgRG9Ob3RTY2hlZHVsZS4gXG4gRm9yIGV4YW1wbGUsIGluIGEgMy16b25lIGNsdXN0ZXIsIE1heFNrZXcgaXMgc2V0IHRvIDIsIE1pbkRvbWFpbnMgaXMgc2V0IHRvIDUgYW5kIHBvZHMgd2l0aCB0aGUgc2FtZSBsYWJlbFNlbGVjdG9yIHNwcmVhZCBhcyAyLzIvMjogfCB6b25lMSB8IHpvbmUyIHwgem9uZTMgfCB8ICBQIFAgIHwgIFAgUCAgfCAgUCBQICB8IFRoZSBudW1iZXIgb2YgZG9tYWlucyBpcyBsZXNzIHRoYW4gNShNaW5Eb21haW5zKSwgc28gXCJnbG9iYWwgbWluaW11bVwiIGlzIHRyZWF0ZWQgYXMgMC4gSW4gdGhpcyBzaXR1YXRpb24sIG5ldyBwb2Qgd2l0aCB0aGUgc2FtZSBsYWJlbFNlbGVjdG9yIGNhbm5vdCBiZSBzY2hlZHVsZWQsIGJlY2F1c2UgY29tcHV0ZWQgc2tldyB3aWxsIGJlIDMoMyAtIDApIGlmIG5ldyBQb2QgaXMgc2NoZWR1bGVkIHRvIGFueSBvZiB0aGUgdGhyZWUgem9uZXMsIGl0IHdpbGwgdmlvbGF0ZSBNYXhTa2V3LiBcbiBUaGlzIGlzIGEgYmV0YSBmaWVsZCBhbmQgcmVxdWlyZXMgdGhlIE1pbkRvbWFpbnNJblBvZFRvcG9sb2d5U3ByZWFkIGZlYXR1cmUgZ2F0ZSB0byBiZSBlbmFibGVkIChlbmFibGVkIGJ5IGRlZmF1bHQpLiIsImZvcm1hdCI6ImludDMyIiwidHlwZSI6ImludGVnZXIifSwibm9kZUFmZmluaXR5UG9saWN5Ijp7ImRlc2NyaXB0aW9uIjoiTm9kZUFmZmluaXR5UG9saWN5IGluZGljYXRlcyBob3cgd2Ugd2lsbCB0cmVhdCBQb2QncyBub2RlQWZmaW5pdHkvbm9kZVNlbGVjdG9yIHdoZW4gY2FsY3VsYXRpbmcgcG9kIHRvcG9sb2d5IHNwcmVhZCBza2V3LiBPcHRpb25zIGFyZTogLSBIb25vcjogb25seSBub2RlcyBtYXRjaGluZyBub2RlQWZmaW5pdHkvbm9kZVNlbGVjdG9yIGFyZSBpbmNsdWRlZCBpbiB0aGUgY2FsY3VsYXRpb25zLiAtIElnbm9yZTogbm9kZUFmZmluaXR5L25vZGVTZWxlY3RvciBhcmUgaWdub3JlZC4gQWxsIG5vZGVzIGFyZSBpbmNsdWRlZCBpbiB0aGUgY2FsY3VsYXRpb25zLiBcbiBJZiB0aGlzIHZhbHVlIGlzIG5pbCwgdGhlIGJlaGF2aW9yIGlzIGVxdWl2YWxlbnQgdG8gdGhlIEhvbm9yIHBvbGljeS4gVGhpcyBpcyBhIGJldGEtbGV2ZWwgZmVhdHVyZSBkZWZhdWx0IGVuYWJsZWQgYnkgdGhlIE5vZGVJbmNsdXNpb25Qb2xpY3lJblBvZFRvcG9sb2d5U3ByZWFkIGZlYXR1cmUgZmxhZy4iLCJ0eXBlIjoic3RyaW5nIn0sIm5vZGVUYWludHNQb2xpY3kiOnsiZGVzY3JpcHRpb24iOiJOb2RlVGFpbnRzUG9saWN5IGluZGljYXRlcyBob3cgd2Ugd2lsbCB0cmVhdCBub2RlIHRhaW50cyB3aGVuIGNhbGN1bGF0aW5nIHBvZCB0b3BvbG9neSBzcHJlYWQgc2tldy4gT3B0aW9ucyBhcmU6IC0gSG9ub3I6IG5vZGVzIHdpdGhvdXQgdGFpbnRzLCBhbG9uZyB3aXRoIHRhaW50ZWQgbm9kZXMgZm9yIHdoaWNoIHRoZSBpbmNvbWluZyBwb2QgaGFzIGEgdG9sZXJhdGlvbiwgYXJlIGluY2x1ZGVkLiAtIElnbm9yZTogbm9kZSB0YWludHMgYXJlIGlnbm9yZWQuIEFsbCBub2RlcyBhcmUgaW5jbHVkZWQuIFxuIElmIHRoaXMgdmFsdWUgaXMgbmlsLCB0aGUgYmVoYXZpb3IgaXMgZXF1aXZhbGVudCB0byB0aGUgSWdub3JlIHBvbGljeS4gVGhpcyBpcyBhIGJldGEtbGV2ZWwgZmVhdHVyZSBkZWZhdWx0IGVuYWJsZWQgYnkgdGhlIE5vZGVJbmNsdXNpb25Qb2xpY3lJblBvZFRvcG9sb2d5U3ByZWFkIGZlYXR1cmUgZmxhZy4iLCJ0eXBlIjoic3RyaW5nIn0sInRvcG9sb2d5S2V5Ijp7ImRlc2NyaXB0aW9uIjoiVG9wb2xvZ3lLZXkgaXMgdGhlIGtleSBvZiBub2RlIGxhYmVscy4gTm9kZXMgdGhhdCBoYXZlIGEgbGFiZWwgd2l0aCB0aGlzIGtleSBhbmQgaWRlbnRpY2FsIHZhbHVlcyBhcmUgY29uc2lkZXJlZCB0byBiZSBpbiB0aGUgc2FtZSB0b3BvbG9neS4gV2UgY29uc2lkZXIgZWFjaCBcdTAwM2NrZXksIHZhbHVlXHUwMDNlIGFzIGEgXCJidWNrZXRcIiwgYW5kIHRyeSB0byBwdXQgYmFsYW5jZWQgbnVtYmVyIG9mIHBvZHMgaW50byBlYWNoIGJ1Y2tldC4gV2UgZGVmaW5lIGEgZG9tYWluIGFzIGEgcGFydGljdWxhciBpbnN0YW5jZSBvZiBhIHRvcG9sb2d5LiBBbHNvLCB3ZSBkZWZpbmUgYW4gZWxpZ2libGUgZG9tYWluIGFzIGEgZG9tYWluIHdob3NlIG5vZGVzIG1lZXQgdGhlIHJlcXVpcmVtZW50cyBvZiBub2RlQWZmaW5pdHlQb2xpY3kgYW5kIG5vZGVUYWludHNQb2xpY3kuIGUuZy4gSWYgVG9wb2xvZ3lLZXkgaXMgXCJrdWJlcm5ldGVzLmlvL2hvc3RuYW1lXCIsIGVhY2ggTm9kZSBpcyBhIGRvbWFpbiBvZiB0aGF0IHRvcG9sb2d5LiBBbmQsIGlmIFRvcG9sb2d5S2V5IGlzIFwidG9wb2xvZ3kua3ViZXJuZXRlcy5pby96b25lXCIsIGVhY2ggem9uZSBpcyBhIGRvbWFpbiBvZiB0aGF0IHRvcG9sb2d5LiBJdCdzIGEgcmVxdWlyZWQgZmllbGQuIiwidHlwZSI6InN0cmluZyJ9LCJ3aGVuVW5zYXRpc2ZpYWJsZSI6eyJkZXNjcmlwdGlvbiI6IldoZW5VbnNhdGlzZmlhYmxlIGluZGljYXRlcyBob3cgdG8gZGVhbCB3aXRoIGEgcG9kIGlmIGl0IGRvZXNuJ3Qgc2F0aXNmeSB0aGUgc3ByZWFkIGNvbnN0cmFpbnQuIC0gRG9Ob3RTY2hlZHVsZSAoZGVmYXVsdCkgdGVsbHMgdGhlIHNjaGVkdWxlciBub3QgdG8gc2NoZWR1bGUgaXQuIC0gU2NoZWR1bGVBbnl3YXkgdGVsbHMgdGhlIHNjaGVkdWxlciB0byBzY2hlZHVsZSB0aGUgcG9kIGluIGFueSBsb2NhdGlvbiwgYnV0IGdpdmluZyBoaWdoZXIgcHJlY2VkZW5jZSB0byB0b3BvbG9naWVzIHRoYXQgd291bGQgaGVscCByZWR1Y2UgdGhlIHNrZXcuIEEgY29uc3RyYWludCBpcyBjb25zaWRlcmVkIFwiVW5zYXRpc2ZpYWJsZVwiIGZvciBhbiBpbmNvbWluZyBwb2QgaWYgYW5kIG9ubHkgaWYgZXZlcnkgcG9zc2libGUgbm9kZSBhc3NpZ25tZW50IGZvciB0aGF0IHBvZCB3b3VsZCB2aW9sYXRlIFwiTWF4U2tld1wiIG9uIHNvbWUgdG9wb2xvZ3kuIEZvciBleGFtcGxlLCBpbiBhIDMtem9uZSBjbHVzdGVyLCBNYXhTa2V3IGlzIHNldCB0byAxLCBhbmQgcG9kcyB3aXRoIHRoZSBzYW1lIGxhYmVsU2VsZWN0b3Igc3ByZWFkIGFzIDMvMS8xOiB8IHpvbmUxIHwgem9uZTIgfCB6b25lMyB8IHwgUCBQIFAgfCAgIFAgICB8ICAgUCAgIHwgSWYgV2hlblVuc2F0aXNmaWFibGUgaXMgc2V0IHRvIERvTm90U2NoZWR1bGUsIGluY29taW5nIHBvZCBjYW4gb25seSBiZSBzY2hlZHVsZWQgdG8gem9uZTIoem9uZTMpIHRvIGJlY29tZSAzLzIvMSgzLzEvMikgYXMgQWN0dWFsU2tldygyLTEpIG9uIHpvbmUyKHpvbmUzKSBzYXRpc2ZpZXMgTWF4U2tldygxKS4gSW4gb3RoZXIgd29yZHMsIHRoZSBjbHVzdGVyIGNhbiBzdGlsbCBiZSBpbWJhbGFuY2VkLCBidXQgc2NoZWR1bGVyIHdvbid0IG1ha2UgaXQgKm1vcmUqIGltYmFsYW5jZWQuIEl0J3MgYSByZXF1aXJlZCBmaWVsZC4iLCJ0eXBlIjoic3RyaW5nIn19LCJyZXF1aXJlZCI6WyJtYXhTa2V3IiwidG9wb2xvZ3lLZXkiLCJ3aGVuVW5zYXRpc2ZpYWJsZSJdLCJ0eXBlIjoib2JqZWN0In0sInR5cGUiOiJhcnJheSJ9fSwidHlwZSI6Im9iamVjdCJ9LCJwb3J0YWJsZSI6eyJkZXNjcmlwdGlvbiI6IlBvcnRhYmxlIHNheXMgd2hldGhlciB0aGUgT1NEcyBpbiB0aGlzIGRldmljZSBzZXQgY2FuIG1vdmUgYmV0d2VlbiBub2Rlcy4gVGhpcyBpcyBpZ25vcmVkIGlmIFBsYWNlbWVudCBpcyBub3Qgc2V0IiwidHlwZSI6ImJvb2xlYW4ifSwicHJlcGFyZVBsYWNlbWVudCI6eyJkZXNjcmlwdGlvbiI6IlBsYWNlbWVudCBpcyB0aGUgcGxhY2VtZW50IGZvciBhbiBvYmplY3QiLCJwcm9wZXJ0aWVzIjp7Im5vZGVBZmZpbml0eSI6eyJkZXNjcmlwdGlvbiI6Ik5vZGVBZmZpbml0eSBpcyBhIGdyb3VwIG9mIG5vZGUgYWZmaW5pdHkgc2NoZWR1bGluZyBydWxlcyIsInByb3BlcnRpZXMiOnsicHJlZmVycmVkRHVyaW5nU2NoZWR1bGluZ0lnbm9yZWREdXJpbmdFeGVjdXRpb24iOnsiZGVzY3JpcHRpb24iOiJUaGUgc2NoZWR1bGVyIHdpbGwgcHJlZmVyIHRvIHNjaGVkdWxlIHBvZHMgdG8gbm9kZXMgdGhhdCBzYXRpc2Z5IHRoZSBhZmZpbml0eSBleHByZXNzaW9ucyBzcGVjaWZpZWQgYnkgdGhpcyBmaWVsZCwgYnV0IGl0IG1heSBjaG9vc2UgYSBub2RlIHRoYXQgdmlvbGF0ZXMgb25lIG9yIG1vcmUgb2YgdGhlIGV4cHJlc3Npb25zLiBUaGUgbm9kZSB0aGF0IGlzIG1vc3QgcHJlZmVycmVkIGlzIHRoZSBvbmUgd2l0aCB0aGUgZ3JlYXRlc3Qgc3VtIG9mIHdlaWdodHMsIGkuZS4gZm9yIGVhY2ggbm9kZSB0aGF0IG1lZXRzIGFsbCBvZiB0aGUgc2NoZWR1bGluZyByZXF1aXJlbWVudHMgKHJlc291cmNlIHJlcXVlc3QsIHJlcXVpcmVkRHVyaW5nU2NoZWR1bGluZyBhZmZpbml0eSBleHByZXNzaW9ucywgZXRjLiksIGNvbXB1dGUgYSBzdW0gYnkgaXRlcmF0aW5nIHRocm91Z2ggdGhlIGVsZW1lbnRzIG9mIHRoaXMgZmllbGQgYW5kIGFkZGluZyBcIndlaWdodFwiIHRvIHRoZSBzdW0gaWYgdGhlIG5vZGUgbWF0Y2hlcyB0aGUgY29ycmVzcG9uZGluZyBtYXRjaEV4cHJlc3Npb25zOyB0aGUgbm9kZShzKSB3aXRoIHRoZSBoaWdoZXN0IHN1bSBhcmUgdGhlIG1vc3QgcHJlZmVycmVkLiIsIml0ZW1zIjp7ImRlc2NyaXB0aW9uIjoiQW4gZW1wdHkgcHJlZmVycmVkIHNjaGVkdWxpbmcgdGVybSBtYXRjaGVzIGFsbCBvYmplY3RzIHdpdGggaW1wbGljaXQgd2VpZ2h0IDAgKGkuZS4gaXQncyBhIG5vLW9wKS4gQSBudWxsIHByZWZlcnJlZCBzY2hlZHVsaW5nIHRlcm0gbWF0Y2hlcyBubyBvYmplY3RzIChpLmUuIGlzIGFsc28gYSBuby1vcCkuIiwicHJvcGVydGllcyI6eyJwcmVmZXJlbmNlIjp7ImRlc2NyaXB0aW9uIjoiQSBub2RlIHNlbGVjdG9yIHRlcm0sIGFzc29jaWF0ZWQgd2l0aCB0aGUgY29ycmVzcG9uZGluZyB3ZWlnaHQuIiwicHJvcGVydGllcyI6eyJtYXRjaEV4cHJlc3Npb25zIjp7ImRlc2NyaXB0aW9uIjoiQSBsaXN0IG9mIG5vZGUgc2VsZWN0b3IgcmVxdWlyZW1lbnRzIGJ5IG5vZGUncyBsYWJlbHMuIiwiaXRlbXMiOnsiZGVzY3JpcHRpb24iOiJBIG5vZGUgc2VsZWN0b3IgcmVxdWlyZW1lbnQgaXMgYSBzZWxlY3RvciB0aGF0IGNvbnRhaW5zIHZhbHVlcywgYSBrZXksIGFuZCBhbiBvcGVyYXRvciB0aGF0IHJlbGF0ZXMgdGhlIGtleSBhbmQgdmFsdWVzLiIsInByb3BlcnRpZXMiOnsia2V5Ijp7ImRlc2NyaXB0aW9uIjoiVGhlIGxhYmVsIGtleSB0aGF0IHRoZSBzZWxlY3RvciBhcHBsaWVzIHRvLiIsInR5cGUiOiJzdHJpbmcifSwib3BlcmF0b3IiOnsiZGVzY3JpcHRpb24iOiJSZXByZXNlbnRzIGEga2V5J3MgcmVsYXRpb25zaGlwIHRvIGEgc2V0IG9mIHZhbHVlcy4gVmFsaWQgb3BlcmF0b3JzIGFyZSBJbiwgTm90SW4sIEV4aXN0cywgRG9lc05vdEV4aXN0LiBHdCwgYW5kIEx0LiIsInR5cGUiOiJzdHJpbmcifSwidmFsdWVzIjp7ImRlc2NyaXB0aW9uIjoiQW4gYXJyYXkgb2Ygc3RyaW5nIHZhbHVlcy4gSWYgdGhlIG9wZXJhdG9yIGlzIEluIG9yIE5vdEluLCB0aGUgdmFsdWVzIGFycmF5IG11c3QgYmUgbm9uLWVtcHR5LiBJZiB0aGUgb3BlcmF0b3IgaXMgRXhpc3RzIG9yIERvZXNOb3RFeGlzdCwgdGhlIHZhbHVlcyBhcnJheSBtdXN0IGJlIGVtcHR5LiBJZiB0aGUgb3BlcmF0b3IgaXMgR3Qgb3IgTHQsIHRoZSB2YWx1ZXMgYXJyYXkgbXVzdCBoYXZlIGEgc2luZ2xlIGVsZW1lbnQsIHdoaWNoIHdpbGwgYmUgaW50ZXJwcmV0ZWQgYXMgYW4gaW50ZWdlci4gVGhpcyBhcnJheSBpcyByZXBsYWNlZCBkdXJpbmcgYSBzdHJhdGVnaWMgbWVyZ2UgcGF0Y2guIiwiaXRlbXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjoiYXJyYXkifX0sInJlcXVpcmVkIjpbImtleSIsIm9wZXJhdG9yIl0sInR5cGUiOiJvYmplY3QifSwidHlwZSI6ImFycmF5In0sIm1hdGNoRmllbGRzIjp7ImRlc2NyaXB0aW9uIjoiQSBsaXN0IG9mIG5vZGUgc2VsZWN0b3IgcmVxdWlyZW1lbnRzIGJ5IG5vZGUncyBmaWVsZHMuIiwiaXRlbXMiOnsiZGVzY3JpcHRpb24iOiJBIG5vZGUgc2VsZWN0b3IgcmVxdWlyZW1lbnQgaXMgYSBzZWxlY3RvciB0aGF0IGNvbnRhaW5zIHZhbHVlcywgYSBrZXksIGFuZCBhbiBvcGVyYXRvciB0aGF0IHJlbGF0ZXMgdGhlIGtleSBhbmQgdmFsdWVzLiIsInByb3BlcnRpZXMiOnsia2V5Ijp7ImRlc2NyaXB0aW9uIjoiVGhlIGxhYmVsIGtleSB0aGF0IHRoZSBzZWxlY3RvciBhcHBsaWVzIHRvLiIsInR5cGUiOiJzdHJpbmcifSwib3BlcmF0b3IiOnsiZGVzY3JpcHRpb24iOiJSZXByZXNlbnRzIGEga2V5J3MgcmVsYXRpb25zaGlwIHRvIGEgc2V0IG9mIHZhbHVlcy4gVmFsaWQgb3BlcmF0b3JzIGFyZSBJbiwgTm90SW4sIEV4aXN0cywgRG9lc05vdEV4aXN0LiBHdCwgYW5kIEx0LiIsInR5cGUiOiJzdHJpbmcifSwidmFsdWVzIjp7ImRlc2NyaXB0aW9uIjoiQW4gYXJyYXkgb2Ygc3RyaW5nIHZhbHVlcy4gSWYgdGhlIG9wZXJhdG9yIGlzIEluIG9yIE5vdEluLCB0aGUgdmFsdWVzIGFycmF5IG11c3QgYmUgbm9uLWVtcHR5LiBJZiB0aGUgb3BlcmF0b3IgaXMgRXhpc3RzIG9yIERvZXNOb3RFeGlzdCwgdGhlIHZhbHVlcyBhcnJheSBtdXN0IGJlIGVtcHR5LiBJZiB0aGUgb3BlcmF0b3IgaXMgR3Qgb3IgTHQsIHRoZSB2YWx1ZXMgYXJyYXkgbXVzdCBoYXZlIGEgc2luZ2xlIGVsZW1lbnQsIHdoaWNoIHdpbGwgYmUgaW50ZXJwcmV0ZWQgYXMgYW4gaW50ZWdlci4gVGhpcyBhcnJheSBpcyByZXBsYWNlZCBkdXJpbmcgYSBzdHJhdGVnaWMgbWVyZ2UgcGF0Y2guIiwiaXRlbXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjoiYXJyYXkifX0sInJlcXVpcmVkIjpbImtleSIsIm9wZXJhdG9yIl0sInR5cGUiOiJvYmplY3QifSwidHlwZSI6ImFycmF5In19LCJ0eXBlIjoib2JqZWN0IiwieC1rdWJlcm5ldGVzLW1hcC10eXBlIjoiYXRvbWljIn0sIndlaWdodCI6eyJkZXNjcmlwdGlvbiI6IldlaWdodCBhc3NvY2lhdGVkIHdpdGggbWF0Y2hpbmcgdGhlIGNvcnJlc3BvbmRpbmcgbm9kZVNlbGVjdG9yVGVybSwgaW4gdGhlIHJhbmdlIDEtMTAwLiIsImZvcm1hdCI6ImludDMyIiwidHlwZSI6ImludGVnZXIifX0sInJlcXVpcmVkIjpbInByZWZlcmVuY2UiLCJ3ZWlnaHQiXSwidHlwZSI6Im9iamVjdCJ9LCJ0eXBlIjoiYXJyYXkifSwicmVxdWlyZWREdXJpbmdTY2hlZHVsaW5nSWdub3JlZER1cmluZ0V4ZWN1dGlvbiI6eyJkZXNjcmlwdGlvbiI6IklmIHRoZSBhZmZpbml0eSByZXF1aXJlbWVudHMgc3BlY2lmaWVkIGJ5IHRoaXMgZmllbGQgYXJlIG5vdCBtZXQgYXQgc2NoZWR1bGluZyB0aW1lLCB0aGUgcG9kIHdpbGwgbm90IGJlIHNjaGVkdWxlZCBvbnRvIHRoZSBub2RlLiBJZiB0aGUgYWZmaW5pdHkgcmVxdWlyZW1lbnRzIHNwZWNpZmllZCBieSB0aGlzIGZpZWxkIGNlYXNlIHRvIGJlIG1ldCBhdCBzb21lIHBvaW50IGR1cmluZyBwb2QgZXhlY3V0aW9uIChlLmcuIGR1ZSB0byBhbiB1cGRhdGUpLCB0aGUgc3lzdGVtIG1heSBvciBtYXkgbm90IHRyeSB0byBldmVudHVhbGx5IGV2aWN0IHRoZSBwb2QgZnJvbSBpdHMgbm9kZS4iLCJwcm9wZXJ0aWVzIjp7Im5vZGVTZWxlY3RvclRlcm1zIjp7ImRlc2NyaXB0aW9uIjoiUmVxdWlyZWQuIEEgbGlzdCBvZiBub2RlIHNlbGVjdG9yIHRlcm1zLiBUaGUgdGVybXMgYXJlIE9SZWQuIiwiaXRlbXMiOnsiZGVzY3JpcHRpb24iOiJBIG51bGwgb3IgZW1wdHkgbm9kZSBzZWxlY3RvciB0ZXJtIG1hdGNoZXMgbm8gb2JqZWN0cy4gVGhlIHJlcXVpcmVtZW50cyBvZiB0aGVtIGFyZSBBTkRlZC4gVGhlIFRvcG9sb2d5U2VsZWN0b3JUZXJtIHR5cGUgaW1wbGVtZW50cyBhIHN1YnNldCBvZiB0aGUgTm9kZVNlbGVjdG9yVGVybS4iLCJwcm9wZXJ0aWVzIjp7Im1hdGNoRXhwcmVzc2lvbnMiOnsiZGVzY3JpcHRpb24iOiJBIGxpc3Qgb2Ygbm9kZSBzZWxlY3RvciByZXF1aXJlbWVudHMgYnkgbm9kZSdzIGxhYmVscy4iLCJpdGVtcyI6eyJkZXNjcmlwdGlvbiI6IkEgbm9kZSBzZWxlY3RvciByZXF1aXJlbWVudCBpcyBhIHNlbGVjdG9yIHRoYXQgY29udGFpbnMgdmFsdWVzLCBhIGtleSwgYW5kIGFuIG9wZXJhdG9yIHRoYXQgcmVsYXRlcyB0aGUga2V5IGFuZCB2YWx1ZXMuIiwicHJvcGVydGllcyI6eyJrZXkiOnsiZGVzY3JpcHRpb24iOiJUaGUgbGFiZWwga2V5IHRoYXQgdGhlIHNlbGVjdG9yIGFwcGxpZXMgdG8uIiwidHlwZSI6InN0cmluZyJ9LCJvcGVyYXRvciI6eyJkZXNjcmlwdGlvbiI6IlJlcHJlc2VudHMgYSBrZXkncyByZWxhdGlvbnNoaXAgdG8gYSBzZXQgb2YgdmFsdWVzLiBWYWxpZCBvcGVyYXRvcnMgYXJlIEluLCBOb3RJbiwgRXhpc3RzLCBEb2VzTm90RXhpc3QuIEd0LCBhbmQgTHQuIiwidHlwZSI6InN0cmluZyJ9LCJ2YWx1ZXMiOnsiZGVzY3JpcHRpb24iOiJBbiBhcnJheSBvZiBzdHJpbmcgdmFsdWVzLiBJZiB0aGUgb3BlcmF0b3IgaXMgSW4gb3IgTm90SW4sIHRoZSB2YWx1ZXMgYXJyYXkgbXVzdCBiZSBub24tZW1wdHkuIElmIHRoZSBvcGVyYXRvciBpcyBFeGlzdHMgb3IgRG9lc05vdEV4aXN0LCB0aGUgdmFsdWVzIGFycmF5IG11c3QgYmUgZW1wdHkuIElmIHRoZSBvcGVyYXRvciBpcyBHdCBvciBMdCwgdGhlIHZhbHVlcyBhcnJheSBtdXN0IGhhdmUgYSBzaW5nbGUgZWxlbWVudCwgd2hpY2ggd2lsbCBiZSBpbnRlcnByZXRlZCBhcyBhbiBpbnRlZ2VyLiBUaGlzIGFycmF5IGlzIHJlcGxhY2VkIGR1cmluZyBhIHN0cmF0ZWdpYyBtZXJnZSBwYXRjaC4iLCJpdGVtcyI6eyJ0eXBlIjoic3RyaW5nIn0sInR5cGUiOiJhcnJheSJ9fSwicmVxdWlyZWQiOlsia2V5Iiwib3BlcmF0b3IiXSwidHlwZSI6Im9iamVjdCJ9LCJ0eXBlIjoiYXJyYXkifSwibWF0Y2hGaWVsZHMiOnsiZGVzY3JpcHRpb24iOiJBIGxpc3Qgb2Ygbm9kZSBzZWxlY3RvciByZXF1aXJlbWVudHMgYnkgbm9kZSdzIGZpZWxkcy4iLCJpdGVtcyI6eyJkZXNjcmlwdGlvbiI6IkEgbm9kZSBzZWxlY3RvciByZXF1aXJlbWVudCBpcyBhIHNlbGVjdG9yIHRoYXQgY29udGFpbnMgdmFsdWVzLCBhIGtleSwgYW5kIGFuIG9wZXJhdG9yIHRoYXQgcmVsYXRlcyB0aGUga2V5IGFuZCB2YWx1ZXMuIiwicHJvcGVydGllcyI6eyJrZXkiOnsiZGVzY3JpcHRpb24iOiJUaGUgbGFiZWwga2V5IHRoYXQgdGhlIHNlbGVjdG9yIGFwcGxpZXMgdG8uIiwidHlwZSI6InN0cmluZyJ9LCJvcGVyYXRvciI6eyJkZXNjcmlwdGlvbiI6IlJlcHJlc2VudHMgYSBrZXkncyByZWxhdGlvbnNoaXAgdG8gYSBzZXQgb2YgdmFsdWVzLiBWYWxpZCBvcGVyYXRvcnMgYXJlIEluLCBOb3RJbiwgRXhpc3RzLCBEb2VzTm90RXhpc3QuIEd0LCBhbmQgTHQuIiwidHlwZSI6InN0cmluZyJ9LCJ2YWx1ZXMiOnsiZGVzY3JpcHRpb24iOiJBbiBhcnJheSBvZiBzdHJpbmcgdmFsdWVzLiBJZiB0aGUgb3BlcmF0b3IgaXMgSW4gb3IgTm90SW4sIHRoZSB2YWx1ZXMgYXJyYXkgbXVzdCBiZSBub24tZW1wdHkuIElmIHRoZSBvcGVyYXRvciBpcyBFeGlzdHMgb3IgRG9lc05vdEV4aXN0LCB0aGUgdmFsdWVzIGFycmF5IG11c3QgYmUgZW1wdHkuIElmIHRoZSBvcGVyYXRvciBpcyBHdCBvciBMdCwgdGhlIHZhbHVlcyBhcnJheSBtdXN0IGhhdmUgYSBzaW5nbGUgZWxlbWVudCwgd2hpY2ggd2lsbCBiZSBpbnRlcnByZXRlZCBhcyBhbiBpbnRlZ2VyLiBUaGlzIGFycmF5IGlzIHJlcGxhY2VkIGR1cmluZyBhIHN0cmF0ZWdpYyBtZXJnZSBwYXRjaC4iLCJpdGVtcyI6eyJ0eXBlIjoic3RyaW5nIn0sInR5cGUiOiJhcnJheSJ9fSwicmVxdWlyZWQiOlsia2V5Iiwib3BlcmF0b3IiXSwidHlwZSI6Im9iamVjdCJ9LCJ0eXBlIjoiYXJyYXkifX0sInR5cGUiOiJvYmplY3QiLCJ4LWt1YmVybmV0ZXMtbWFwLXR5cGUiOiJhdG9taWMifSwidHlwZSI6ImFycmF5In19LCJyZXF1aXJlZCI6WyJub2RlU2VsZWN0b3JUZXJtcyJdLCJ0eXBlIjoib2JqZWN0IiwieC1rdWJlcm5ldGVzLW1hcC10eXBlIjoiYXRvbWljIn19LCJ0eXBlIjoib2JqZWN0In0sInBvZEFmZmluaXR5Ijp7ImRlc2NyaXB0aW9uIjoiUG9kQWZmaW5pdHkgaXMgYSBncm91cCBvZiBpbnRlciBwb2QgYWZmaW5pdHkgc2NoZWR1bGluZyBydWxlcyIsInByb3BlcnRpZXMiOnsicHJlZmVycmVkRHVyaW5nU2NoZWR1bGluZ0lnbm9yZWREdXJpbmdFeGVjdXRpb24iOnsiZGVzY3JpcHRpb24iOiJUaGUgc2NoZWR1bGVyIHdpbGwgcHJlZmVyIHRvIHNjaGVkdWxlIHBvZHMgdG8gbm9kZXMgdGhhdCBzYXRpc2Z5IHRoZSBhZmZpbml0eSBleHByZXNzaW9ucyBzcGVjaWZpZWQgYnkgdGhpcyBmaWVsZCwgYnV0IGl0IG1heSBjaG9vc2UgYSBub2RlIHRoYXQgdmlvbGF0ZXMgb25lIG9yIG1vcmUgb2YgdGhlIGV4cHJlc3Npb25zLiBUaGUgbm9kZSB0aGF0IGlzIG1vc3QgcHJlZmVycmVkIGlzIHRoZSBvbmUgd2l0aCB0aGUgZ3JlYXRlc3Qgc3VtIG9mIHdlaWdodHMsIGkuZS4gZm9yIGVhY2ggbm9kZSB0aGF0IG1lZXRzIGFsbCBvZiB0aGUgc2NoZWR1bGluZyByZXF1aXJlbWVudHMgKHJlc291cmNlIHJlcXVlc3QsIHJlcXVpcmVkRHVyaW5nU2NoZWR1bGluZyBhZmZpbml0eSBleHByZXNzaW9ucywgZXRjLiksIGNvbXB1dGUgYSBzdW0gYnkgaXRlcmF0aW5nIHRocm91Z2ggdGhlIGVsZW1lbnRzIG9mIHRoaXMgZmllbGQgYW5kIGFkZGluZyBcIndlaWdodFwiIHRvIHRoZSBzdW0gaWYgdGhlIG5vZGUgaGFzIHBvZHMgd2hpY2ggbWF0Y2hlcyB0aGUgY29ycmVzcG9uZGluZyBwb2RBZmZpbml0eVRlcm07IHRoZSBub2RlKHMpIHdpdGggdGhlIGhpZ2hlc3Qgc3VtIGFyZSB0aGUgbW9zdCBwcmVmZXJyZWQuIiwiaXRlbXMiOnsiZGVzY3JpcHRpb24iOiJUaGUgd2VpZ2h0cyBvZiBhbGwgb2YgdGhlIG1hdGNoZWQgV2VpZ2h0ZWRQb2RBZmZpbml0eVRlcm0gZmllbGRzIGFyZSBhZGRlZCBwZXItbm9kZSB0byBmaW5kIHRoZSBtb3N0IHByZWZlcnJlZCBub2RlKHMpIiwicHJvcGVydGllcyI6eyJwb2RBZmZpbml0eVRlcm0iOnsiZGVzY3JpcHRpb24iOiJSZXF1aXJlZC4gQSBwb2QgYWZmaW5pdHkgdGVybSwgYXNzb2NpYXRlZCB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIHdlaWdodC4iLCJwcm9wZXJ0aWVzIjp7ImxhYmVsU2VsZWN0b3IiOnsiZGVzY3JpcHRpb24iOiJBIGxhYmVsIHF1ZXJ5IG92ZXIgYSBzZXQgb2YgcmVzb3VyY2VzLCBpbiB0aGlzIGNhc2UgcG9kcy4gSWYgaXQncyBudWxsLCB0aGlzIFBvZEFmZmluaXR5VGVybSBtYXRjaGVzIHdpdGggbm8gUG9kcy4iLCJwcm9wZXJ0aWVzIjp7Im1hdGNoRXhwcmVzc2lvbnMiOnsiZGVzY3JpcHRpb24iOiJtYXRjaEV4cHJlc3Npb25zIGlzIGEgbGlzdCBvZiBsYWJlbCBzZWxlY3RvciByZXF1aXJlbWVudHMuIFRoZSByZXF1aXJlbWVudHMgYXJlIEFORGVkLiIsIml0ZW1zIjp7ImRlc2NyaXB0aW9uIjoiQSBsYWJlbCBzZWxlY3RvciByZXF1aXJlbWVudCBpcyBhIHNlbGVjdG9yIHRoYXQgY29udGFpbnMgdmFsdWVzLCBhIGtleSwgYW5kIGFuIG9wZXJhdG9yIHRoYXQgcmVsYXRlcyB0aGUga2V5IGFuZCB2YWx1ZXMuIiwicHJvcGVydGllcyI6eyJrZXkiOnsiZGVzY3JpcHRpb24iOiJrZXkgaXMgdGhlIGxhYmVsIGtleSB0aGF0IHRoZSBzZWxlY3RvciBhcHBsaWVzIHRvLiIsInR5cGUiOiJzdHJpbmcifSwib3BlcmF0b3IiOnsiZGVzY3JpcHRpb24iOiJvcGVyYXRvciByZXByZXNlbnRzIGEga2V5J3MgcmVsYXRpb25zaGlwIHRvIGEgc2V0IG9mIHZhbHVlcy4gVmFsaWQgb3BlcmF0b3JzIGFyZSBJbiwgTm90SW4sIEV4aXN0cyBhbmQgRG9lc05vdEV4aXN0LiIsInR5cGUiOiJzdHJpbmcifSwidmFsdWVzIjp7ImRlc2NyaXB0aW9uIjoidmFsdWVzIGlzIGFuIGFycmF5IG9mIHN0cmluZyB2YWx1ZXMuIElmIHRoZSBvcGVyYXRvciBpcyBJbiBvciBOb3RJbiwgdGhlIHZhbHVlcyBhcnJheSBtdXN0IGJlIG5vbi1lbXB0eS4gSWYgdGhlIG9wZXJhdG9yIGlzIEV4aXN0cyBvciBEb2VzTm90RXhpc3QsIHRoZSB2YWx1ZXMgYXJyYXkgbXVzdCBiZSBlbXB0eS4gVGhpcyBhcnJheSBpcyByZXBsYWNlZCBkdXJpbmcgYSBzdHJhdGVnaWMgbWVyZ2UgcGF0Y2guIiwiaXRlbXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjoiYXJyYXkifX0sInJlcXVpcmVkIjpbImtleSIsIm9wZXJhdG9yIl0sInR5cGUiOiJvYmplY3QifSwidHlwZSI6ImFycmF5In0sIm1hdGNoTGFiZWxzIjp7ImFkZGl0aW9uYWxQcm9wZXJ0aWVzIjp7InR5cGUiOiJzdHJpbmcifSwiZGVzY3JpcHRpb24iOiJtYXRjaExhYmVscyBpcyBhIG1hcCBvZiB7a2V5LHZhbHVlfSBwYWlycy4gQSBzaW5nbGUge2tleSx2YWx1ZX0gaW4gdGhlIG1hdGNoTGFiZWxzIG1hcCBpcyBlcXVpdmFsZW50IHRvIGFuIGVsZW1lbnQgb2YgbWF0Y2hFeHByZXNzaW9ucywgd2hvc2Uga2V5IGZpZWxkIGlzIFwia2V5XCIsIHRoZSBvcGVyYXRvciBpcyBcIkluXCIsIGFuZCB0aGUgdmFsdWVzIGFycmF5IGNvbnRhaW5zIG9ubHkgXCJ2YWx1ZVwiLiBUaGUgcmVxdWlyZW1lbnRzIGFyZSBBTkRlZC4iLCJ0eXBlIjoib2JqZWN0In19LCJ0eXBlIjoib2JqZWN0IiwieC1rdWJlcm5ldGVzLW1hcC10eXBlIjoiYXRvbWljIn0sIm1hdGNoTGFiZWxLZXlzIjp7ImRlc2NyaXB0aW9uIjoiTWF0Y2hMYWJlbEtleXMgaXMgYSBzZXQgb2YgcG9kIGxhYmVsIGtleXMgdG8gc2VsZWN0IHdoaWNoIHBvZHMgd2lsbCBiZSB0YWtlbiBpbnRvIGNvbnNpZGVyYXRpb24uIFRoZSBrZXlzIGFyZSB1c2VkIHRvIGxvb2t1cCB2YWx1ZXMgZnJvbSB0aGUgaW5jb21pbmcgcG9kIGxhYmVscywgdGhvc2Uga2V5LXZhbHVlIGxhYmVscyBhcmUgbWVyZ2VkIHdpdGggYExhYmVsU2VsZWN0b3JgIGFzIGBrZXkgaW4gKHZhbHVlKWAgdG8gc2VsZWN0IHRoZSBncm91cCBvZiBleGlzdGluZyBwb2RzIHdoaWNoIHBvZHMgd2lsbCBiZSB0YWtlbiBpbnRvIGNvbnNpZGVyYXRpb24gZm9yIHRoZSBpbmNvbWluZyBwb2QncyBwb2QgKGFudGkpIGFmZmluaXR5LiBLZXlzIHRoYXQgZG9uJ3QgZXhpc3QgaW4gdGhlIGluY29taW5nIHBvZCBsYWJlbHMgd2lsbCBiZSBpZ25vcmVkLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBlbXB0eS4gVGhlIHNhbWUga2V5IGlzIGZvcmJpZGRlbiB0byBleGlzdCBpbiBib3RoIE1hdGNoTGFiZWxLZXlzIGFuZCBMYWJlbFNlbGVjdG9yLiBBbHNvLCBNYXRjaExhYmVsS2V5cyBjYW5ub3QgYmUgc2V0IHdoZW4gTGFiZWxTZWxlY3RvciBpc24ndCBzZXQuIFRoaXMgaXMgYW4gYWxwaGEgZmllbGQgYW5kIHJlcXVpcmVzIGVuYWJsaW5nIE1hdGNoTGFiZWxLZXlzSW5Qb2RBZmZpbml0eSBmZWF0dXJlIGdhdGUuIiwiaXRlbXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjoiYXJyYXkiLCJ4LWt1YmVybmV0ZXMtbGlzdC10eXBlIjoiYXRvbWljIn0sIm1pc21hdGNoTGFiZWxLZXlzIjp7ImRlc2NyaXB0aW9uIjoiTWlzbWF0Y2hMYWJlbEtleXMgaXMgYSBzZXQgb2YgcG9kIGxhYmVsIGtleXMgdG8gc2VsZWN0IHdoaWNoIHBvZHMgd2lsbCBiZSB0YWtlbiBpbnRvIGNvbnNpZGVyYXRpb24uIFRoZSBrZXlzIGFyZSB1c2VkIHRvIGxvb2t1cCB2YWx1ZXMgZnJvbSB0aGUgaW5jb21pbmcgcG9kIGxhYmVscywgdGhvc2Uga2V5LXZhbHVlIGxhYmVscyBhcmUgbWVyZ2VkIHdpdGggYExhYmVsU2VsZWN0b3JgIGFzIGBrZXkgbm90aW4gKHZhbHVlKWAgdG8gc2VsZWN0IHRoZSBncm91cCBvZiBleGlzdGluZyBwb2RzIHdoaWNoIHBvZHMgd2lsbCBiZSB0YWtlbiBpbnRvIGNvbnNpZGVyYXRpb24gZm9yIHRoZSBpbmNvbWluZyBwb2QncyBwb2QgKGFudGkpIGFmZmluaXR5LiBLZXlzIHRoYXQgZG9uJ3QgZXhpc3QgaW4gdGhlIGluY29taW5nIHBvZCBsYWJlbHMgd2lsbCBiZSBpZ25vcmVkLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBlbXB0eS4gVGhlIHNhbWUga2V5IGlzIGZvcmJpZGRlbiB0byBleGlzdCBpbiBib3RoIE1pc21hdGNoTGFiZWxLZXlzIGFuZCBMYWJlbFNlbGVjdG9yLiBBbHNvLCBNaXNtYXRjaExhYmVsS2V5cyBjYW5ub3QgYmUgc2V0IHdoZW4gTGFiZWxTZWxlY3RvciBpc24ndCBzZXQuIFRoaXMgaXMgYW4gYWxwaGEgZmllbGQgYW5kIHJlcXVpcmVzIGVuYWJsaW5nIE1hdGNoTGFiZWxLZXlzSW5Qb2RBZmZpbml0eSBmZWF0dXJlIGdhdGUuIiwiaXRlbXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjoiYXJyYXkiLCJ4LWt1YmVybmV0ZXMtbGlzdC10eXBlIjoiYXRvbWljIn0sIm5hbWVzcGFjZVNlbGVjdG9yIjp7ImRlc2NyaXB0aW9uIjoiQSBsYWJlbCBxdWVyeSBvdmVyIHRoZSBzZXQgb2YgbmFtZXNwYWNlcyB0aGF0IHRoZSB0ZXJtIGFwcGxpZXMgdG8uIFRoZSB0ZXJtIGlzIGFwcGxpZWQgdG8gdGhlIHVuaW9uIG9mIHRoZSBuYW1lc3BhY2VzIHNlbGVjdGVkIGJ5IHRoaXMgZmllbGQgYW5kIHRoZSBvbmVzIGxpc3RlZCBpbiB0aGUgbmFtZXNwYWNlcyBmaWVsZC4gbnVsbCBzZWxlY3RvciBhbmQgbnVsbCBvciBlbXB0eSBuYW1lc3BhY2VzIGxpc3QgbWVhbnMgXCJ0aGlzIHBvZCdzIG5hbWVzcGFjZVwiLiBBbiBlbXB0eSBzZWxlY3RvciAoe30pIG1hdGNoZXMgYWxsIG5hbWVzcGFjZXMuIiwicHJvcGVydGllcyI6eyJtYXRjaEV4cHJlc3Npb25zIjp7ImRlc2NyaXB0aW9uIjoibWF0Y2hFeHByZXNzaW9ucyBpcyBhIGxpc3Qgb2YgbGFiZWwgc2VsZWN0b3IgcmVxdWlyZW1lbnRzLiBUaGUgcmVxdWlyZW1lbnRzIGFyZSBBTkRlZC4iLCJpdGVtcyI6eyJkZXNjcmlwdGlvbiI6IkEgbGFiZWwgc2VsZWN0b3IgcmVxdWlyZW1lbnQgaXMgYSBzZWxlY3RvciB0aGF0IGNvbnRhaW5zIHZhbHVlcywgYSBrZXksIGFuZCBhbiBvcGVyYXRvciB0aGF0IHJlbGF0ZXMgdGhlIGtleSBhbmQgdmFsdWVzLiIsInByb3BlcnRpZXMiOnsia2V5Ijp7ImRlc2NyaXB0aW9uIjoia2V5IGlzIHRoZSBsYWJlbCBrZXkgdGhhdCB0aGUgc2VsZWN0b3IgYXBwbGllcyB0by4iLCJ0eXBlIjoic3RyaW5nIn0sIm9wZXJhdG9yIjp7ImRlc2NyaXB0aW9uIjoib3BlcmF0b3IgcmVwcmVzZW50cyBhIGtleSdzIHJlbGF0aW9uc2hpcCB0byBhIHNldCBvZiB2YWx1ZXMuIFZhbGlkIG9wZXJhdG9ycyBhcmUgSW4sIE5vdEluLCBFeGlzdHMgYW5kIERvZXNOb3RFeGlzdC4iLCJ0eXBlIjoic3RyaW5nIn0sInZhbHVlcyI6eyJkZXNjcmlwdGlvbiI6InZhbHVlcyBpcyBhbiBhcnJheSBvZiBzdHJpbmcgdmFsdWVzLiBJZiB0aGUgb3BlcmF0b3IgaXMgSW4gb3IgTm90SW4sIHRoZSB2YWx1ZXMgYXJyYXkgbXVzdCBiZSBub24tZW1wdHkuIElmIHRoZSBvcGVyYXRvciBpcyBFeGlzdHMgb3IgRG9lc05vdEV4aXN0LCB0aGUgdmFsdWVzIGFycmF5IG11c3QgYmUgZW1wdHkuIFRoaXMgYXJyYXkgaXMgcmVwbGFjZWQgZHVyaW5nIGEgc3RyYXRlZ2ljIG1lcmdlIHBhdGNoLiIsIml0ZW1zIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6ImFycmF5In19LCJyZXF1aXJlZCI6WyJrZXkiLCJvcGVyYXRvciJdLCJ0eXBlIjoib2JqZWN0In0sInR5cGUiOiJhcnJheSJ9LCJtYXRjaExhYmVscyI6eyJhZGRpdGlvbmFsUHJvcGVydGllcyI6eyJ0eXBlIjoic3RyaW5nIn0sImRlc2NyaXB0aW9uIjoibWF0Y2hMYWJlbHMgaXMgYSBtYXAgb2Yge2tleSx2YWx1ZX0gcGFpcnMuIEEgc2luZ2xlIHtrZXksdmFsdWV9IGluIHRoZSBtYXRjaExhYmVscyBtYXAgaXMgZXF1aXZhbGVudCB0byBhbiBlbGVtZW50IG9mIG1hdGNoRXhwcmVzc2lvbnMsIHdob3NlIGtleSBmaWVsZCBpcyBcImtleVwiLCB0aGUgb3BlcmF0b3IgaXMgXCJJblwiLCBhbmQgdGhlIHZhbHVlcyBhcnJheSBjb250YWlucyBvbmx5IFwidmFsdWVcIi4gVGhlIHJlcXVpcmVtZW50cyBhcmUgQU5EZWQuIiwidHlwZSI6Im9iamVjdCJ9fSwidHlwZSI6Im9iamVjdCIsIngta3ViZXJuZXRlcy1tYXAtdHlwZSI6ImF0b21pYyJ9LCJuYW1lc3BhY2VzIjp7ImRlc2NyaXB0aW9uIjoibmFtZXNwYWNlcyBzcGVjaWZpZXMgYSBzdGF0aWMgbGlzdCBvZiBuYW1lc3BhY2UgbmFtZXMgdGhhdCB0aGUgdGVybSBhcHBsaWVzIHRvLiBUaGUgdGVybSBpcyBhcHBsaWVkIHRvIHRoZSB1bmlvbiBvZiB0aGUgbmFtZXNwYWNlcyBsaXN0ZWQgaW4gdGhpcyBmaWVsZCBhbmQgdGhlIG9uZXMgc2VsZWN0ZWQgYnkgbmFtZXNwYWNlU2VsZWN0b3IuIG51bGwgb3IgZW1wdHkgbmFtZXNwYWNlcyBsaXN0IGFuZCBudWxsIG5hbWVzcGFjZVNlbGVjdG9yIG1lYW5zIFwidGhpcyBwb2QncyBuYW1lc3BhY2VcIi4iLCJpdGVtcyI6eyJ0eXBlIjoic3RyaW5nIn0sInR5cGUiOiJhcnJheSJ9LCJ0b3BvbG9neUtleSI6eyJkZXNjcmlwdGlvbiI6IlRoaXMgcG9kIHNob3VsZCBiZSBjby1sb2NhdGVkIChhZmZpbml0eSkgb3Igbm90IGNvLWxvY2F0ZWQgKGFudGktYWZmaW5pdHkpIHdpdGggdGhlIHBvZHMgbWF0Y2hpbmcgdGhlIGxhYmVsU2VsZWN0b3IgaW4gdGhlIHNwZWNpZmllZCBuYW1lc3BhY2VzLCB3aGVyZSBjby1sb2NhdGVkIGlzIGRlZmluZWQgYXMgcnVubmluZyBvbiBhIG5vZGUgd2hvc2UgdmFsdWUgb2YgdGhlIGxhYmVsIHdpdGgga2V5IHRvcG9sb2d5S2V5IG1hdGNoZXMgdGhhdCBvZiBhbnkgbm9kZSBvbiB3aGljaCBhbnkgb2YgdGhlIHNlbGVjdGVkIHBvZHMgaXMgcnVubmluZy4gRW1wdHkgdG9wb2xvZ3lLZXkgaXMgbm90IGFsbG93ZWQuIiwidHlwZSI6InN0cmluZyJ9fSwicmVxdWlyZWQiOlsidG9wb2xvZ3lLZXkiXSwidHlwZSI6Im9iamVjdCJ9LCJ3ZWlnaHQiOnsiZGVzY3JpcHRpb24iOiJ3ZWlnaHQgYXNzb2NpYXRlZCB3aXRoIG1hdGNoaW5nIHRoZSBjb3JyZXNwb25kaW5nIHBvZEFmZmluaXR5VGVybSwgaW4gdGhlIHJhbmdlIDEtMTAwLiIsImZvcm1hdCI6ImludDMyIiwidHlwZSI6ImludGVnZXIifX0sInJlcXVpcmVkIjpbInBvZEFmZmluaXR5VGVybSIsIndlaWdodCJdLCJ0eXBlIjoib2JqZWN0In0sInR5cGUiOiJhcnJheSJ9LCJyZXF1aXJlZER1cmluZ1NjaGVkdWxpbmdJZ25vcmVkRHVyaW5nRXhlY3V0aW9uIjp7ImRlc2NyaXB0aW9uIjoiSWYgdGhlIGFmZmluaXR5IHJlcXVpcmVtZW50cyBzcGVjaWZpZWQgYnkgdGhpcyBmaWVsZCBhcmUgbm90IG1ldCBhdCBzY2hlZHVsaW5nIHRpbWUsIHRoZSBwb2Qgd2lsbCBub3QgYmUgc2NoZWR1bGVkIG9udG8gdGhlIG5vZGUuIElmIHRoZSBhZmZpbml0eSByZXF1aXJlbWVudHMgc3BlY2lmaWVkIGJ5IHRoaXMgZmllbGQgY2Vhc2UgdG8gYmUgbWV0IGF0IHNvbWUgcG9pbnQgZHVyaW5nIHBvZCBleGVjdXRpb24gKGUuZy4gZHVlIHRvIGEgcG9kIGxhYmVsIHVwZGF0ZSksIHRoZSBzeXN0ZW0gbWF5IG9yIG1heSBub3QgdHJ5IHRvIGV2ZW50dWFsbHkgZXZpY3QgdGhlIHBvZCBmcm9tIGl0cyBub2RlLiBXaGVuIHRoZXJlIGFyZSBtdWx0aXBsZSBlbGVtZW50cywgdGhlIGxpc3RzIG9mIG5vZGVzIGNvcnJlc3BvbmRpbmcgdG8gZWFjaCBwb2RBZmZpbml0eVRlcm0gYXJlIGludGVyc2VjdGVkLCBpLmUuIGFsbCB0ZXJtcyBtdXN0IGJlIHNhdGlzZmllZC4iLCJpdGVtcyI6eyJkZXNjcmlwdGlvbiI6IkRlZmluZXMgYSBzZXQgb2YgcG9kcyAobmFtZWx5IHRob3NlIG1hdGNoaW5nIHRoZSBsYWJlbFNlbGVjdG9yIHJlbGF0aXZlIHRvIHRoZSBnaXZlbiBuYW1lc3BhY2UocykpIHRoYXQgdGhpcyBwb2Qgc2hvdWxkIGJlIGNvLWxvY2F0ZWQgKGFmZmluaXR5KSBvciBub3QgY28tbG9jYXRlZCAoYW50aS1hZmZpbml0eSkgd2l0aCwgd2hlcmUgY28tbG9jYXRlZCBpcyBkZWZpbmVkIGFzIHJ1bm5pbmcgb24gYSBub2RlIHdob3NlIHZhbHVlIG9mIHRoZSBsYWJlbCB3aXRoIGtleSBcdTAwM2N0b3BvbG9neUtleVx1MDAzZSBtYXRjaGVzIHRoYXQgb2YgYW55IG5vZGUgb24gd2hpY2ggYSBwb2Qgb2YgdGhlIHNldCBvZiBwb2RzIGlzIHJ1bm5pbmciLCJwcm9wZXJ0aWVzIjp7ImxhYmVsU2VsZWN0b3IiOnsiZGVzY3JpcHRpb24iOiJBIGxhYmVsIHF1ZXJ5IG92ZXIgYSBzZXQgb2YgcmVzb3VyY2VzLCBpbiB0aGlzIGNhc2UgcG9kcy4gSWYgaXQncyBudWxsLCB0aGlzIFBvZEFmZmluaXR5VGVybSBtYXRjaGVzIHdpdGggbm8gUG9kcy4iLCJwcm9wZXJ0aWVzIjp7Im1hdGNoRXhwcmVzc2lvbnMiOnsiZGVzY3JpcHRpb24iOiJtYXRjaEV4cHJlc3Npb25zIGlzIGEgbGlzdCBvZiBsYWJlbCBzZWxlY3RvciByZXF1aXJlbWVudHMuIFRoZSByZXF1aXJlbWVudHMgYXJlIEFORGVkLiIsIml0ZW1zIjp7ImRlc2NyaXB0aW9uIjoiQSBsYWJlbCBzZWxlY3RvciByZXF1aXJlbWVudCBpcyBhIHNlbGVjdG9yIHRoYXQgY29udGFpbnMgdmFsdWVzLCBhIGtleSwgYW5kIGFuIG9wZXJhdG9yIHRoYXQgcmVsYXRlcyB0aGUga2V5IGFuZCB2YWx1ZXMuIiwicHJvcGVydGllcyI6eyJrZXkiOnsiZGVzY3JpcHRpb24iOiJrZXkgaXMgdGhlIGxhYmVsIGtleSB0aGF0IHRoZSBzZWxlY3RvciBhcHBsaWVzIHRvLiIsInR5cGUiOiJzdHJpbmcifSwib3BlcmF0b3IiOnsiZGVzY3JpcHRpb24iOiJvcGVyYXRvciByZXByZXNlbnRzIGEga2V5J3MgcmVsYXRpb25zaGlwIHRvIGEgc2V0IG9mIHZhbHVlcy4gVmFsaWQgb3BlcmF0b3JzIGFyZSBJbiwgTm90SW4sIEV4aXN0cyBhbmQgRG9lc05vdEV4aXN0LiIsInR5cGUiOiJzdHJpbmcifSwidmFsdWVzIjp7ImRlc2NyaXB0aW9uIjoidmFsdWVzIGlzIGFuIGFycmF5IG9mIHN0cmluZyB2YWx1ZXMuIElmIHRoZSBvcGVyYXRvciBpcyBJbiBvciBOb3RJbiwgdGhlIHZhbHVlcyBhcnJheSBtdXN0IGJlIG5vbi1lbXB0eS4gSWYgdGhlIG9wZXJhdG9yIGlzIEV4aXN0cyBvciBEb2VzTm90RXhpc3QsIHRoZSB2YWx1ZXMgYXJyYXkgbXVzdCBiZSBlbXB0eS4gVGhpcyBhcnJheSBpcyByZXBsYWNlZCBkdXJpbmcgYSBzdHJhdGVnaWMgbWVyZ2UgcGF0Y2guIiwiaXRlbXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjoiYXJyYXkifX0sInJlcXVpcmVkIjpbImtleSIsIm9wZXJhdG9yIl0sInR5cGUiOiJvYmplY3QifSwidHlwZSI6ImFycmF5In0sIm1hdGNoTGFiZWxzIjp7ImFkZGl0aW9uYWxQcm9wZXJ0aWVzIjp7InR5cGUiOiJzdHJpbmcifSwiZGVzY3JpcHRpb24iOiJtYXRjaExhYmVscyBpcyBhIG1hcCBvZiB7a2V5LHZhbHVlfSBwYWlycy4gQSBzaW5nbGUge2tleSx2YWx1ZX0gaW4gdGhlIG1hdGNoTGFiZWxzIG1hcCBpcyBlcXVpdmFsZW50IHRvIGFuIGVsZW1lbnQgb2YgbWF0Y2hFeHByZXNzaW9ucywgd2hvc2Uga2V5IGZpZWxkIGlzIFwia2V5XCIsIHRoZSBvcGVyYXRvciBpcyBcIkluXCIsIGFuZCB0aGUgdmFsdWVzIGFycmF5IGNvbnRhaW5zIG9ubHkgXCJ2YWx1ZVwiLiBUaGUgcmVxdWlyZW1lbnRzIGFyZSBBTkRlZC4iLCJ0eXBlIjoib2JqZWN0In19LCJ0eXBlIjoib2JqZWN0IiwieC1rdWJlcm5ldGVzLW1hcC10eXBlIjoiYXRvbWljIn0sIm1hdGNoTGFiZWxLZXlzIjp7ImRlc2NyaXB0aW9uIjoiTWF0Y2hMYWJlbEtleXMgaXMgYSBzZXQgb2YgcG9kIGxhYmVsIGtleXMgdG8gc2VsZWN0IHdoaWNoIHBvZHMgd2lsbCBiZSB0YWtlbiBpbnRvIGNvbnNpZGVyYXRpb24uIFRoZSBrZXlzIGFyZSB1c2VkIHRvIGxvb2t1cCB2YWx1ZXMgZnJvbSB0aGUgaW5jb21pbmcgcG9kIGxhYmVscywgdGhvc2Uga2V5LXZhbHVlIGxhYmVscyBhcmUgbWVyZ2VkIHdpdGggYExhYmVsU2VsZWN0b3JgIGFzIGBrZXkgaW4gKHZhbHVlKWAgdG8gc2VsZWN0IHRoZSBncm91cCBvZiBleGlzdGluZyBwb2RzIHdoaWNoIHBvZHMgd2lsbCBiZSB0YWtlbiBpbnRvIGNvbnNpZGVyYXRpb24gZm9yIHRoZSBpbmNvbWluZyBwb2QncyBwb2QgKGFudGkpIGFmZmluaXR5LiBLZXlzIHRoYXQgZG9uJ3QgZXhpc3QgaW4gdGhlIGluY29taW5nIHBvZCBsYWJlbHMgd2lsbCBiZSBpZ25vcmVkLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBlbXB0eS4gVGhlIHNhbWUga2V5IGlzIGZvcmJpZGRlbiB0byBleGlzdCBpbiBib3RoIE1hdGNoTGFiZWxLZXlzIGFuZCBMYWJlbFNlbGVjdG9yLiBBbHNvLCBNYXRjaExhYmVsS2V5cyBjYW5ub3QgYmUgc2V0IHdoZW4gTGFiZWxTZWxlY3RvciBpc24ndCBzZXQuIFRoaXMgaXMgYW4gYWxwaGEgZmllbGQgYW5kIHJlcXVpcmVzIGVuYWJsaW5nIE1hdGNoTGFiZWxLZXlzSW5Qb2RBZmZpbml0eSBmZWF0dXJlIGdhdGUuIiwiaXRlbXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjoiYXJyYXkiLCJ4LWt1YmVybmV0ZXMtbGlzdC10eXBlIjoiYXRvbWljIn0sIm1pc21hdGNoTGFiZWxLZXlzIjp7ImRlc2NyaXB0aW9uIjoiTWlzbWF0Y2hMYWJlbEtleXMgaXMgYSBzZXQgb2YgcG9kIGxhYmVsIGtleXMgdG8gc2VsZWN0IHdoaWNoIHBvZHMgd2lsbCBiZSB0YWtlbiBpbnRvIGNvbnNpZGVyYXRpb24uIFRoZSBrZXlzIGFyZSB1c2VkIHRvIGxvb2t1cCB2YWx1ZXMgZnJvbSB0aGUgaW5jb21pbmcgcG9kIGxhYmVscywgdGhvc2Uga2V5LXZhbHVlIGxhYmVscyBhcmUgbWVyZ2VkIHdpdGggYExhYmVsU2VsZWN0b3JgIGFzIGBrZXkgbm90aW4gKHZhbHVlKWAgdG8gc2VsZWN0IHRoZSBncm91cCBvZiBleGlzdGluZyBwb2RzIHdoaWNoIHBvZHMgd2lsbCBiZSB0YWtlbiBpbnRvIGNvbnNpZGVyYXRpb24gZm9yIHRoZSBpbmNvbWluZyBwb2QncyBwb2QgKGFudGkpIGFmZmluaXR5LiBLZXlzIHRoYXQgZG9uJ3QgZXhpc3QgaW4gdGhlIGluY29taW5nIHBvZCBsYWJlbHMgd2lsbCBiZSBpZ25vcmVkLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBlbXB0eS4gVGhlIHNhbWUga2V5IGlzIGZvcmJpZGRlbiB0byBleGlzdCBpbiBib3RoIE1pc21hdGNoTGFiZWxLZXlzIGFuZCBMYWJlbFNlbGVjdG9yLiBBbHNvLCBNaXNtYXRjaExhYmVsS2V5cyBjYW5ub3QgYmUgc2V0IHdoZW4gTGFiZWxTZWxlY3RvciBpc24ndCBzZXQuIFRoaXMgaXMgYW4gYWxwaGEgZmllbGQgYW5kIHJlcXVpcmVzIGVuYWJsaW5nIE1hdGNoTGFiZWxLZXlzSW5Qb2RBZmZpbml0eSBmZWF0dXJlIGdhdGUuIiwiaXRlbXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjoiYXJyYXkiLCJ4LWt1YmVybmV0ZXMtbGlzdC10eXBlIjoiYXRvbWljIn0sIm5hbWVzcGFjZVNlbGVjdG9yIjp7ImRlc2NyaXB0aW9uIjoiQSBsYWJlbCBxdWVyeSBvdmVyIHRoZSBzZXQgb2YgbmFtZXNwYWNlcyB0aGF0IHRoZSB0ZXJtIGFwcGxpZXMgdG8uIFRoZSB0ZXJtIGlzIGFwcGxpZWQgdG8gdGhlIHVuaW9uIG9mIHRoZSBuYW1lc3BhY2VzIHNlbGVjdGVkIGJ5IHRoaXMgZmllbGQgYW5kIHRoZSBvbmVzIGxpc3RlZCBpbiB0aGUgbmFtZXNwYWNlcyBmaWVsZC4gbnVsbCBzZWxlY3RvciBhbmQgbnVsbCBvciBlbXB0eSBuYW1lc3BhY2VzIGxpc3QgbWVhbnMgXCJ0aGlzIHBvZCdzIG5hbWVzcGFjZVwiLiBBbiBlbXB0eSBzZWxlY3RvciAoe30pIG1hdGNoZXMgYWxsIG5hbWVzcGFjZXMuIiwicHJvcGVydGllcyI6eyJtYXRjaEV4cHJlc3Npb25zIjp7ImRlc2NyaXB0aW9uIjoibWF0Y2hFeHByZXNzaW9ucyBpcyBhIGxpc3Qgb2YgbGFiZWwgc2VsZWN0b3IgcmVxdWlyZW1lbnRzLiBUaGUgcmVxdWlyZW1lbnRzIGFyZSBBTkRlZC4iLCJpdGVtcyI6eyJkZXNjcmlwdGlvbiI6IkEgbGFiZWwgc2VsZWN0b3IgcmVxdWlyZW1lbnQgaXMgYSBzZWxlY3RvciB0aGF0IGNvbnRhaW5zIHZhbHVlcywgYSBrZXksIGFuZCBhbiBvcGVyYXRvciB0aGF0IHJlbGF0ZXMgdGhlIGtleSBhbmQgdmFsdWVzLiIsInByb3BlcnRpZXMiOnsia2V5Ijp7ImRlc2NyaXB0aW9uIjoia2V5IGlzIHRoZSBsYWJlbCBrZXkgdGhhdCB0aGUgc2VsZWN0b3IgYXBwbGllcyB0by4iLCJ0eXBlIjoic3RyaW5nIn0sIm9wZXJhdG9yIjp7ImRlc2NyaXB0aW9uIjoib3BlcmF0b3IgcmVwcmVzZW50cyBhIGtleSdzIHJlbGF0aW9uc2hpcCB0byBhIHNldCBvZiB2YWx1ZXMuIFZhbGlkIG9wZXJhdG9ycyBhcmUgSW4sIE5vdEluLCBFeGlzdHMgYW5kIERvZXNOb3RFeGlzdC4iLCJ0eXBlIjoic3RyaW5nIn0sInZhbHVlcyI6eyJkZXNjcmlwdGlvbiI6InZhbHVlcyBpcyBhbiBhcnJheSBvZiBzdHJpbmcgdmFsdWVzLiBJZiB0aGUgb3BlcmF0b3IgaXMgSW4gb3IgTm90SW4sIHRoZSB2YWx1ZXMgYXJyYXkgbXVzdCBiZSBub24tZW1wdHkuIElmIHRoZSBvcGVyYXRvciBpcyBFeGlzdHMgb3IgRG9lc05vdEV4aXN0LCB0aGUgdmFsdWVzIGFycmF5IG11c3QgYmUgZW1wdHkuIFRoaXMgYXJyYXkgaXMgcmVwbGFjZWQgZHVyaW5nIGEgc3RyYXRlZ2ljIG1lcmdlIHBhdGNoLiIsIml0ZW1zIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6ImFycmF5In19LCJyZXF1aXJlZCI6WyJrZXkiLCJvcGVyYXRvciJdLCJ0eXBlIjoib2JqZWN0In0sInR5cGUiOiJhcnJheSJ9LCJtYXRjaExhYmVscyI6eyJhZGRpdGlvbmFsUHJvcGVydGllcyI6eyJ0eXBlIjoic3RyaW5nIn0sImRlc2NyaXB0aW9uIjoibWF0Y2hMYWJlbHMgaXMgYSBtYXAgb2Yge2tleSx2YWx1ZX0gcGFpcnMuIEEgc2luZ2xlIHtrZXksdmFsdWV9IGluIHRoZSBtYXRjaExhYmVscyBtYXAgaXMgZXF1aXZhbGVudCB0byBhbiBlbGVtZW50IG9mIG1hdGNoRXhwcmVzc2lvbnMsIHdob3NlIGtleSBmaWVsZCBpcyBcImtleVwiLCB0aGUgb3BlcmF0b3IgaXMgXCJJblwiLCBhbmQgdGhlIHZhbHVlcyBhcnJheSBjb250YWlucyBvbmx5IFwidmFsdWVcIi4gVGhlIHJlcXVpcmVtZW50cyBhcmUgQU5EZWQuIiwidHlwZSI6Im9iamVjdCJ9fSwidHlwZSI6Im9iamVjdCIsIngta3ViZXJuZXRlcy1tYXAtdHlwZSI6ImF0b21pYyJ9LCJuYW1lc3BhY2VzIjp7ImRlc2NyaXB0aW9uIjoibmFtZXNwYWNlcyBzcGVjaWZpZXMgYSBzdGF0aWMgbGlzdCBvZiBuYW1lc3BhY2UgbmFtZXMgdGhhdCB0aGUgdGVybSBhcHBsaWVzIHRvLiBUaGUgdGVybSBpcyBhcHBsaWVkIHRvIHRoZSB1bmlvbiBvZiB0aGUgbmFtZXNwYWNlcyBsaXN0ZWQgaW4gdGhpcyBmaWVsZCBhbmQgdGhlIG9uZXMgc2VsZWN0ZWQgYnkgbmFtZXNwYWNlU2VsZWN0b3IuIG51bGwgb3IgZW1wdHkgbmFtZXNwYWNlcyBsaXN0IGFuZCBudWxsIG5hbWVzcGFjZVNlbGVjdG9yIG1lYW5zIFwidGhpcyBwb2QncyBuYW1lc3BhY2VcIi4iLCJpdGVtcyI6eyJ0eXBlIjoic3RyaW5nIn0sInR5cGUiOiJhcnJheSJ9LCJ0b3BvbG9neUtleSI6eyJkZXNjcmlwdGlvbiI6IlRoaXMgcG9kIHNob3VsZCBiZSBjby1sb2NhdGVkIChhZmZpbml0eSkgb3Igbm90IGNvLWxvY2F0ZWQgKGFudGktYWZmaW5pdHkpIHdpdGggdGhlIHBvZHMgbWF0Y2hpbmcgdGhlIGxhYmVsU2VsZWN0b3IgaW4gdGhlIHNwZWNpZmllZCBuYW1lc3BhY2VzLCB3aGVyZSBjby1sb2NhdGVkIGlzIGRlZmluZWQgYXMgcnVubmluZyBvbiBhIG5vZGUgd2hvc2UgdmFsdWUgb2YgdGhlIGxhYmVsIHdpdGgga2V5IHRvcG9sb2d5S2V5IG1hdGNoZXMgdGhhdCBvZiBhbnkgbm9kZSBvbiB3aGljaCBhbnkgb2YgdGhlIHNlbGVjdGVkIHBvZHMgaXMgcnVubmluZy4gRW1wdHkgdG9wb2xvZ3lLZXkgaXMgbm90IGFsbG93ZWQuIiwidHlwZSI6InN0cmluZyJ9fSwicmVxdWlyZWQiOlsidG9wb2xvZ3lLZXkiXSwidHlwZSI6Im9iamVjdCJ9LCJ0eXBlIjoiYXJyYXkifX0sInR5cGUiOiJvYmplY3QifSwicG9kQW50aUFmZmluaXR5Ijp7ImRlc2NyaXB0aW9uIjoiUG9kQW50aUFmZmluaXR5IGlzIGEgZ3JvdXAgb2YgaW50ZXIgcG9kIGFudGkgYWZmaW5pdHkgc2NoZWR1bGluZyBydWxlcyIsInByb3BlcnRpZXMiOnsicHJlZmVycmVkRHVyaW5nU2NoZWR1bGluZ0lnbm9yZWREdXJpbmdFeGVjdXRpb24iOnsiZGVzY3JpcHRpb24iOiJUaGUgc2NoZWR1bGVyIHdpbGwgcHJlZmVyIHRvIHNjaGVkdWxlIHBvZHMgdG8gbm9kZXMgdGhhdCBzYXRpc2Z5IHRoZSBhbnRpLWFmZmluaXR5IGV4cHJlc3Npb25zIHNwZWNpZmllZCBieSB0aGlzIGZpZWxkLCBidXQgaXQgbWF5IGNob29zZSBhIG5vZGUgdGhhdCB2aW9sYXRlcyBvbmUgb3IgbW9yZSBvZiB0aGUgZXhwcmVzc2lvbnMuIFRoZSBub2RlIHRoYXQgaXMgbW9zdCBwcmVmZXJyZWQgaXMgdGhlIG9uZSB3aXRoIHRoZSBncmVhdGVzdCBzdW0gb2Ygd2VpZ2h0cywgaS5lLiBmb3IgZWFjaCBub2RlIHRoYXQgbWVldHMgYWxsIG9mIHRoZSBzY2hlZHVsaW5nIHJlcXVpcmVtZW50cyAocmVzb3VyY2UgcmVxdWVzdCwgcmVxdWlyZWREdXJpbmdTY2hlZHVsaW5nIGFudGktYWZmaW5pdHkgZXhwcmVzc2lvbnMsIGV0Yy4pLCBjb21wdXRlIGEgc3VtIGJ5IGl0ZXJhdGluZyB0aHJvdWdoIHRoZSBlbGVtZW50cyBvZiB0aGlzIGZpZWxkIGFuZCBhZGRpbmcgXCJ3ZWlnaHRcIiB0byB0aGUgc3VtIGlmIHRoZSBub2RlIGhhcyBwb2RzIHdoaWNoIG1hdGNoZXMgdGhlIGNvcnJlc3BvbmRpbmcgcG9kQWZmaW5pdHlUZXJtOyB0aGUgbm9kZShzKSB3aXRoIHRoZSBoaWdoZXN0IHN1bSBhcmUgdGhlIG1vc3QgcHJlZmVycmVkLiIsIml0ZW1zIjp7ImRlc2NyaXB0aW9uIjoiVGhlIHdlaWdodHMgb2YgYWxsIG9mIHRoZSBtYXRjaGVkIFdlaWdodGVkUG9kQWZmaW5pdHlUZXJtIGZpZWxkcyBhcmUgYWRkZWQgcGVyLW5vZGUgdG8gZmluZCB0aGUgbW9zdCBwcmVmZXJyZWQgbm9kZShzKSIsInByb3BlcnRpZXMiOnsicG9kQWZmaW5pdHlUZXJtIjp7ImRlc2NyaXB0aW9uIjoiUmVxdWlyZWQuIEEgcG9kIGFmZmluaXR5IHRlcm0sIGFzc29jaWF0ZWQgd2l0aCB0aGUgY29ycmVzcG9uZGluZyB3ZWlnaHQuIiwicHJvcGVydGllcyI6eyJsYWJlbFNlbGVjdG9yIjp7ImRlc2NyaXB0aW9uIjoiQSBsYWJlbCBxdWVyeSBvdmVyIGEgc2V0IG9mIHJlc291cmNlcywgaW4gdGhpcyBjYXNlIHBvZHMuIElmIGl0J3MgbnVsbCwgdGhpcyBQb2RBZmZpbml0eVRlcm0gbWF0Y2hlcyB3aXRoIG5vIFBvZHMuIiwicHJvcGVydGllcyI6eyJtYXRjaEV4cHJlc3Npb25zIjp7ImRlc2NyaXB0aW9uIjoibWF0Y2hFeHByZXNzaW9ucyBpcyBhIGxpc3Qgb2YgbGFiZWwgc2VsZWN0b3IgcmVxdWlyZW1lbnRzLiBUaGUgcmVxdWlyZW1lbnRzIGFyZSBBTkRlZC4iLCJpdGVtcyI6eyJkZXNjcmlwdGlvbiI6IkEgbGFiZWwgc2VsZWN0b3IgcmVxdWlyZW1lbnQgaXMgYSBzZWxlY3RvciB0aGF0IGNvbnRhaW5zIHZhbHVlcywgYSBrZXksIGFuZCBhbiBvcGVyYXRvciB0aGF0IHJlbGF0ZXMgdGhlIGtleSBhbmQgdmFsdWVzLiIsInByb3BlcnRpZXMiOnsia2V5Ijp7ImRlc2NyaXB0aW9uIjoia2V5IGlzIHRoZSBsYWJlbCBrZXkgdGhhdCB0aGUgc2VsZWN0b3IgYXBwbGllcyB0by4iLCJ0eXBlIjoic3RyaW5nIn0sIm9wZXJhdG9yIjp7ImRlc2NyaXB0aW9uIjoib3BlcmF0b3IgcmVwcmVzZW50cyBhIGtleSdzIHJlbGF0aW9uc2hpcCB0byBhIHNldCBvZiB2YWx1ZXMuIFZhbGlkIG9wZXJhdG9ycyBhcmUgSW4sIE5vdEluLCBFeGlzdHMgYW5kIERvZXNOb3RFeGlzdC4iLCJ0eXBlIjoic3RyaW5nIn0sInZhbHVlcyI6eyJkZXNjcmlwdGlvbiI6InZhbHVlcyBpcyBhbiBhcnJheSBvZiBzdHJpbmcgdmFsdWVzLiBJZiB0aGUgb3BlcmF0b3IgaXMgSW4gb3IgTm90SW4sIHRoZSB2YWx1ZXMgYXJyYXkgbXVzdCBiZSBub24tZW1wdHkuIElmIHRoZSBvcGVyYXRvciBpcyBFeGlzdHMgb3IgRG9lc05vdEV4aXN0LCB0aGUgdmFsdWVzIGFycmF5IG11c3QgYmUgZW1wdHkuIFRoaXMgYXJyYXkgaXMgcmVwbGFjZWQgZHVyaW5nIGEgc3RyYXRlZ2ljIG1lcmdlIHBhdGNoLiIsIml0ZW1zIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6ImFycmF5In19LCJyZXF1aXJlZCI6WyJrZXkiLCJvcGVyYXRvciJdLCJ0eXBlIjoib2JqZWN0In0sInR5cGUiOiJhcnJheSJ9LCJtYXRjaExhYmVscyI6eyJhZGRpdGlvbmFsUHJvcGVydGllcyI6eyJ0eXBlIjoic3RyaW5nIn0sImRlc2NyaXB0aW9uIjoibWF0Y2hMYWJlbHMgaXMgYSBtYXAgb2Yge2tleSx2YWx1ZX0gcGFpcnMuIEEgc2luZ2xlIHtrZXksdmFsdWV9IGluIHRoZSBtYXRjaExhYmVscyBtYXAgaXMgZXF1aXZhbGVudCB0byBhbiBlbGVtZW50IG9mIG1hdGNoRXhwcmVzc2lvbnMsIHdob3NlIGtleSBmaWVsZCBpcyBcImtleVwiLCB0aGUgb3BlcmF0b3IgaXMgXCJJblwiLCBhbmQgdGhlIHZhbHVlcyBhcnJheSBjb250YWlucyBvbmx5IFwidmFsdWVcIi4gVGhlIHJlcXVpcmVtZW50cyBhcmUgQU5EZWQuIiwidHlwZSI6Im9iamVjdCJ9fSwidHlwZSI6Im9iamVjdCIsIngta3ViZXJuZXRlcy1tYXAtdHlwZSI6ImF0b21pYyJ9LCJtYXRjaExhYmVsS2V5cyI6eyJkZXNjcmlwdGlvbiI6Ik1hdGNoTGFiZWxLZXlzIGlzIGEgc2V0IG9mIHBvZCBsYWJlbCBrZXlzIHRvIHNlbGVjdCB3aGljaCBwb2RzIHdpbGwgYmUgdGFrZW4gaW50byBjb25zaWRlcmF0aW9uLiBUaGUga2V5cyBhcmUgdXNlZCB0byBsb29rdXAgdmFsdWVzIGZyb20gdGhlIGluY29taW5nIHBvZCBsYWJlbHMsIHRob3NlIGtleS12YWx1ZSBsYWJlbHMgYXJlIG1lcmdlZCB3aXRoIGBMYWJlbFNlbGVjdG9yYCBhcyBga2V5IGluICh2YWx1ZSlgIHRvIHNlbGVjdCB0aGUgZ3JvdXAgb2YgZXhpc3RpbmcgcG9kcyB3aGljaCBwb2RzIHdpbGwgYmUgdGFrZW4gaW50byBjb25zaWRlcmF0aW9uIGZvciB0aGUgaW5jb21pbmcgcG9kJ3MgcG9kIChhbnRpKSBhZmZpbml0eS4gS2V5cyB0aGF0IGRvbid0IGV4aXN0IGluIHRoZSBpbmNvbWluZyBwb2QgbGFiZWxzIHdpbGwgYmUgaWdub3JlZC4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgZW1wdHkuIFRoZSBzYW1lIGtleSBpcyBmb3JiaWRkZW4gdG8gZXhpc3QgaW4gYm90aCBNYXRjaExhYmVsS2V5cyBhbmQgTGFiZWxTZWxlY3Rvci4gQWxzbywgTWF0Y2hMYWJlbEtleXMgY2Fubm90IGJlIHNldCB3aGVuIExhYmVsU2VsZWN0b3IgaXNuJ3Qgc2V0LiBUaGlzIGlzIGFuIGFscGhhIGZpZWxkIGFuZCByZXF1aXJlcyBlbmFibGluZyBNYXRjaExhYmVsS2V5c0luUG9kQWZmaW5pdHkgZmVhdHVyZSBnYXRlLiIsIml0ZW1zIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6ImFycmF5IiwieC1rdWJlcm5ldGVzLWxpc3QtdHlwZSI6ImF0b21pYyJ9LCJtaXNtYXRjaExhYmVsS2V5cyI6eyJkZXNjcmlwdGlvbiI6Ik1pc21hdGNoTGFiZWxLZXlzIGlzIGEgc2V0IG9mIHBvZCBsYWJlbCBrZXlzIHRvIHNlbGVjdCB3aGljaCBwb2RzIHdpbGwgYmUgdGFrZW4gaW50byBjb25zaWRlcmF0aW9uLiBUaGUga2V5cyBhcmUgdXNlZCB0byBsb29rdXAgdmFsdWVzIGZyb20gdGhlIGluY29taW5nIHBvZCBsYWJlbHMsIHRob3NlIGtleS12YWx1ZSBsYWJlbHMgYXJlIG1lcmdlZCB3aXRoIGBMYWJlbFNlbGVjdG9yYCBhcyBga2V5IG5vdGluICh2YWx1ZSlgIHRvIHNlbGVjdCB0aGUgZ3JvdXAgb2YgZXhpc3RpbmcgcG9kcyB3aGljaCBwb2RzIHdpbGwgYmUgdGFrZW4gaW50byBjb25zaWRlcmF0aW9uIGZvciB0aGUgaW5jb21pbmcgcG9kJ3MgcG9kIChhbnRpKSBhZmZpbml0eS4gS2V5cyB0aGF0IGRvbid0IGV4aXN0IGluIHRoZSBpbmNvbWluZyBwb2QgbGFiZWxzIHdpbGwgYmUgaWdub3JlZC4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgZW1wdHkuIFRoZSBzYW1lIGtleSBpcyBmb3JiaWRkZW4gdG8gZXhpc3QgaW4gYm90aCBNaXNtYXRjaExhYmVsS2V5cyBhbmQgTGFiZWxTZWxlY3Rvci4gQWxzbywgTWlzbWF0Y2hMYWJlbEtleXMgY2Fubm90IGJlIHNldCB3aGVuIExhYmVsU2VsZWN0b3IgaXNuJ3Qgc2V0LiBUaGlzIGlzIGFuIGFscGhhIGZpZWxkIGFuZCByZXF1aXJlcyBlbmFibGluZyBNYXRjaExhYmVsS2V5c0luUG9kQWZmaW5pdHkgZmVhdHVyZSBnYXRlLiIsIml0ZW1zIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6ImFycmF5IiwieC1rdWJlcm5ldGVzLWxpc3QtdHlwZSI6ImF0b21pYyJ9LCJuYW1lc3BhY2VTZWxlY3RvciI6eyJkZXNjcmlwdGlvbiI6IkEgbGFiZWwgcXVlcnkgb3ZlciB0aGUgc2V0IG9mIG5hbWVzcGFjZXMgdGhhdCB0aGUgdGVybSBhcHBsaWVzIHRvLiBUaGUgdGVybSBpcyBhcHBsaWVkIHRvIHRoZSB1bmlvbiBvZiB0aGUgbmFtZXNwYWNlcyBzZWxlY3RlZCBieSB0aGlzIGZpZWxkIGFuZCB0aGUgb25lcyBsaXN0ZWQgaW4gdGhlIG5hbWVzcGFjZXMgZmllbGQuIG51bGwgc2VsZWN0b3IgYW5kIG51bGwgb3IgZW1wdHkgbmFtZXNwYWNlcyBsaXN0IG1lYW5zIFwidGhpcyBwb2QncyBuYW1lc3BhY2VcIi4gQW4gZW1wdHkgc2VsZWN0b3IgKHt9KSBtYXRjaGVzIGFsbCBuYW1lc3BhY2VzLiIsInByb3BlcnRpZXMiOnsibWF0Y2hFeHByZXNzaW9ucyI6eyJkZXNjcmlwdGlvbiI6Im1hdGNoRXhwcmVzc2lvbnMgaXMgYSBsaXN0IG9mIGxhYmVsIHNlbGVjdG9yIHJlcXVpcmVtZW50cy4gVGhlIHJlcXVpcmVtZW50cyBhcmUgQU5EZWQuIiwiaXRlbXMiOnsiZGVzY3JpcHRpb24iOiJBIGxhYmVsIHNlbGVjdG9yIHJlcXVpcmVtZW50IGlzIGEgc2VsZWN0b3IgdGhhdCBjb250YWlucyB2YWx1ZXMsIGEga2V5LCBhbmQgYW4gb3BlcmF0b3IgdGhhdCByZWxhdGVzIHRoZSBrZXkgYW5kIHZhbHVlcy4iLCJwcm9wZXJ0aWVzIjp7ImtleSI6eyJkZXNjcmlwdGlvbiI6ImtleSBpcyB0aGUgbGFiZWwga2V5IHRoYXQgdGhlIHNlbGVjdG9yIGFwcGxpZXMgdG8uIiwidHlwZSI6InN0cmluZyJ9LCJvcGVyYXRvciI6eyJkZXNjcmlwdGlvbiI6Im9wZXJhdG9yIHJlcHJlc2VudHMgYSBrZXkncyByZWxhdGlvbnNoaXAgdG8gYSBzZXQgb2YgdmFsdWVzLiBWYWxpZCBvcGVyYXRvcnMgYXJlIEluLCBOb3RJbiwgRXhpc3RzIGFuZCBEb2VzTm90RXhpc3QuIiwidHlwZSI6InN0cmluZyJ9LCJ2YWx1ZXMiOnsiZGVzY3JpcHRpb24iOiJ2YWx1ZXMgaXMgYW4gYXJyYXkgb2Ygc3RyaW5nIHZhbHVlcy4gSWYgdGhlIG9wZXJhdG9yIGlzIEluIG9yIE5vdEluLCB0aGUgdmFsdWVzIGFycmF5IG11c3QgYmUgbm9uLWVtcHR5LiBJZiB0aGUgb3BlcmF0b3IgaXMgRXhpc3RzIG9yIERvZXNOb3RFeGlzdCwgdGhlIHZhbHVlcyBhcnJheSBtdXN0IGJlIGVtcHR5LiBUaGlzIGFycmF5IGlzIHJlcGxhY2VkIGR1cmluZyBhIHN0cmF0ZWdpYyBtZXJnZSBwYXRjaC4iLCJpdGVtcyI6eyJ0eXBlIjoic3RyaW5nIn0sInR5cGUiOiJhcnJheSJ9fSwicmVxdWlyZWQiOlsia2V5Iiwib3BlcmF0b3IiXSwidHlwZSI6Im9iamVjdCJ9LCJ0eXBlIjoiYXJyYXkifSwibWF0Y2hMYWJlbHMiOnsiYWRkaXRpb25hbFByb3BlcnRpZXMiOnsidHlwZSI6InN0cmluZyJ9LCJkZXNjcmlwdGlvbiI6Im1hdGNoTGFiZWxzIGlzIGEgbWFwIG9mIHtrZXksdmFsdWV9IHBhaXJzLiBBIHNpbmdsZSB7a2V5LHZhbHVlfSBpbiB0aGUgbWF0Y2hMYWJlbHMgbWFwIGlzIGVxdWl2YWxlbnQgdG8gYW4gZWxlbWVudCBvZiBtYXRjaEV4cHJlc3Npb25zLCB3aG9zZSBrZXkgZmllbGQgaXMgXCJrZXlcIiwgdGhlIG9wZXJhdG9yIGlzIFwiSW5cIiwgYW5kIHRoZSB2YWx1ZXMgYXJyYXkgY29udGFpbnMgb25seSBcInZhbHVlXCIuIFRoZSByZXF1aXJlbWVudHMgYXJlIEFORGVkLiIsInR5cGUiOiJvYmplY3QifX0sInR5cGUiOiJvYmplY3QiLCJ4LWt1YmVybmV0ZXMtbWFwLXR5cGUiOiJhdG9taWMifSwibmFtZXNwYWNlcyI6eyJkZXNjcmlwdGlvbiI6Im5hbWVzcGFjZXMgc3BlY2lmaWVzIGEgc3RhdGljIGxpc3Qgb2YgbmFtZXNwYWNlIG5hbWVzIHRoYXQgdGhlIHRlcm0gYXBwbGllcyB0by4gVGhlIHRlcm0gaXMgYXBwbGllZCB0byB0aGUgdW5pb24gb2YgdGhlIG5hbWVzcGFjZXMgbGlzdGVkIGluIHRoaXMgZmllbGQgYW5kIHRoZSBvbmVzIHNlbGVjdGVkIGJ5IG5hbWVzcGFjZVNlbGVjdG9yLiBudWxsIG9yIGVtcHR5IG5hbWVzcGFjZXMgbGlzdCBhbmQgbnVsbCBuYW1lc3BhY2VTZWxlY3RvciBtZWFucyBcInRoaXMgcG9kJ3MgbmFtZXNwYWNlXCIuIiwiaXRlbXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjoiYXJyYXkifSwidG9wb2xvZ3lLZXkiOnsiZGVzY3JpcHRpb24iOiJUaGlzIHBvZCBzaG91bGQgYmUgY28tbG9jYXRlZCAoYWZmaW5pdHkpIG9yIG5vdCBjby1sb2NhdGVkIChhbnRpLWFmZmluaXR5KSB3aXRoIHRoZSBwb2RzIG1hdGNoaW5nIHRoZSBsYWJlbFNlbGVjdG9yIGluIHRoZSBzcGVjaWZpZWQgbmFtZXNwYWNlcywgd2hlcmUgY28tbG9jYXRlZCBpcyBkZWZpbmVkIGFzIHJ1bm5pbmcgb24gYSBub2RlIHdob3NlIHZhbHVlIG9mIHRoZSBsYWJlbCB3aXRoIGtleSB0b3BvbG9neUtleSBtYXRjaGVzIHRoYXQgb2YgYW55IG5vZGUgb24gd2hpY2ggYW55IG9mIHRoZSBzZWxlY3RlZCBwb2RzIGlzIHJ1bm5pbmcuIEVtcHR5IHRvcG9sb2d5S2V5IGlzIG5vdCBhbGxvd2VkLiIsInR5cGUiOiJzdHJpbmcifX0sInJlcXVpcmVkIjpbInRvcG9sb2d5S2V5Il0sInR5cGUiOiJvYmplY3QifSwid2VpZ2h0Ijp7ImRlc2NyaXB0aW9uIjoid2VpZ2h0IGFzc29jaWF0ZWQgd2l0aCBtYXRjaGluZyB0aGUgY29ycmVzcG9uZGluZyBwb2RBZmZpbml0eVRlcm0sIGluIHRoZSByYW5nZSAxLTEwMC4iLCJmb3JtYXQiOiJpbnQzMiIsInR5cGUiOiJpbnRlZ2VyIn19LCJyZXF1aXJlZCI6WyJwb2RBZmZpbml0eVRlcm0iLCJ3ZWlnaHQiXSwidHlwZSI6Im9iamVjdCJ9LCJ0eXBlIjoiYXJyYXkifSwicmVxdWlyZWREdXJpbmdTY2hlZHVsaW5nSWdub3JlZER1cmluZ0V4ZWN1dGlvbiI6eyJkZXNjcmlwdGlvbiI6IklmIHRoZSBhbnRpLWFmZmluaXR5IHJlcXVpcmVtZW50cyBzcGVjaWZpZWQgYnkgdGhpcyBmaWVsZCBhcmUgbm90IG1ldCBhdCBzY2hlZHVsaW5nIHRpbWUsIHRoZSBwb2Qgd2lsbCBub3QgYmUgc2NoZWR1bGVkIG9udG8gdGhlIG5vZGUuIElmIHRoZSBhbnRpLWFmZmluaXR5IHJlcXVpcmVtZW50cyBzcGVjaWZpZWQgYnkgdGhpcyBmaWVsZCBjZWFzZSB0byBiZSBtZXQgYXQgc29tZSBwb2ludCBkdXJpbmcgcG9kIGV4ZWN1dGlvbiAoZS5nLiBkdWUgdG8gYSBwb2QgbGFiZWwgdXBkYXRlKSwgdGhlIHN5c3RlbSBtYXkgb3IgbWF5IG5vdCB0cnkgdG8gZXZlbnR1YWxseSBldmljdCB0aGUgcG9kIGZyb20gaXRzIG5vZGUuIFdoZW4gdGhlcmUgYXJlIG11bHRpcGxlIGVsZW1lbnRzLCB0aGUgbGlzdHMgb2Ygbm9kZXMgY29ycmVzcG9uZGluZyB0byBlYWNoIHBvZEFmZmluaXR5VGVybSBhcmUgaW50ZXJzZWN0ZWQsIGkuZS4gYWxsIHRlcm1zIG11c3QgYmUgc2F0aXNmaWVkLiIsIml0ZW1zIjp7ImRlc2NyaXB0aW9uIjoiRGVmaW5lcyBhIHNldCBvZiBwb2RzIChuYW1lbHkgdGhvc2UgbWF0Y2hpbmcgdGhlIGxhYmVsU2VsZWN0b3IgcmVsYXRpdmUgdG8gdGhlIGdpdmVuIG5hbWVzcGFjZShzKSkgdGhhdCB0aGlzIHBvZCBzaG91bGQgYmUgY28tbG9jYXRlZCAoYWZmaW5pdHkpIG9yIG5vdCBjby1sb2NhdGVkIChhbnRpLWFmZmluaXR5KSB3aXRoLCB3aGVyZSBjby1sb2NhdGVkIGlzIGRlZmluZWQgYXMgcnVubmluZyBvbiBhIG5vZGUgd2hvc2UgdmFsdWUgb2YgdGhlIGxhYmVsIHdpdGgga2V5IFx1MDAzY3RvcG9sb2d5S2V5XHUwMDNlIG1hdGNoZXMgdGhhdCBvZiBhbnkgbm9kZSBvbiB3aGljaCBhIHBvZCBvZiB0aGUgc2V0IG9mIHBvZHMgaXMgcnVubmluZyIsInByb3BlcnRpZXMiOnsibGFiZWxTZWxlY3RvciI6eyJkZXNjcmlwdGlvbiI6IkEgbGFiZWwgcXVlcnkgb3ZlciBhIHNldCBvZiByZXNvdXJjZXMsIGluIHRoaXMgY2FzZSBwb2RzLiBJZiBpdCdzIG51bGwsIHRoaXMgUG9kQWZmaW5pdHlUZXJtIG1hdGNoZXMgd2l0aCBubyBQb2RzLiIsInByb3BlcnRpZXMiOnsibWF0Y2hFeHByZXNzaW9ucyI6eyJkZXNjcmlwdGlvbiI6Im1hdGNoRXhwcmVzc2lvbnMgaXMgYSBsaXN0IG9mIGxhYmVsIHNlbGVjdG9yIHJlcXVpcmVtZW50cy4gVGhlIHJlcXVpcmVtZW50cyBhcmUgQU5EZWQuIiwiaXRlbXMiOnsiZGVzY3JpcHRpb24iOiJBIGxhYmVsIHNlbGVjdG9yIHJlcXVpcmVtZW50IGlzIGEgc2VsZWN0b3IgdGhhdCBjb250YWlucyB2YWx1ZXMsIGEga2V5LCBhbmQgYW4gb3BlcmF0b3IgdGhhdCByZWxhdGVzIHRoZSBrZXkgYW5kIHZhbHVlcy4iLCJwcm9wZXJ0aWVzIjp7ImtleSI6eyJkZXNjcmlwdGlvbiI6ImtleSBpcyB0aGUgbGFiZWwga2V5IHRoYXQgdGhlIHNlbGVjdG9yIGFwcGxpZXMgdG8uIiwidHlwZSI6InN0cmluZyJ9LCJvcGVyYXRvciI6eyJkZXNjcmlwdGlvbiI6Im9wZXJhdG9yIHJlcHJlc2VudHMgYSBrZXkncyByZWxhdGlvbnNoaXAgdG8gYSBzZXQgb2YgdmFsdWVzLiBWYWxpZCBvcGVyYXRvcnMgYXJlIEluLCBOb3RJbiwgRXhpc3RzIGFuZCBEb2VzTm90RXhpc3QuIiwidHlwZSI6InN0cmluZyJ9LCJ2YWx1ZXMiOnsiZGVzY3JpcHRpb24iOiJ2YWx1ZXMgaXMgYW4gYXJyYXkgb2Ygc3RyaW5nIHZhbHVlcy4gSWYgdGhlIG9wZXJhdG9yIGlzIEluIG9yIE5vdEluLCB0aGUgdmFsdWVzIGFycmF5IG11c3QgYmUgbm9uLWVtcHR5LiBJZiB0aGUgb3BlcmF0b3IgaXMgRXhpc3RzIG9yIERvZXNOb3RFeGlzdCwgdGhlIHZhbHVlcyBhcnJheSBtdXN0IGJlIGVtcHR5LiBUaGlzIGFycmF5IGlzIHJlcGxhY2VkIGR1cmluZyBhIHN0cmF0ZWdpYyBtZXJnZSBwYXRjaC4iLCJpdGVtcyI6eyJ0eXBlIjoic3RyaW5nIn0sInR5cGUiOiJhcnJheSJ9fSwicmVxdWlyZWQiOlsia2V5Iiwib3BlcmF0b3IiXSwidHlwZSI6Im9iamVjdCJ9LCJ0eXBlIjoiYXJyYXkifSwibWF0Y2hMYWJlbHMiOnsiYWRkaXRpb25hbFByb3BlcnRpZXMiOnsidHlwZSI6InN0cmluZyJ9LCJkZXNjcmlwdGlvbiI6Im1hdGNoTGFiZWxzIGlzIGEgbWFwIG9mIHtrZXksdmFsdWV9IHBhaXJzLiBBIHNpbmdsZSB7a2V5LHZhbHVlfSBpbiB0aGUgbWF0Y2hMYWJlbHMgbWFwIGlzIGVxdWl2YWxlbnQgdG8gYW4gZWxlbWVudCBvZiBtYXRjaEV4cHJlc3Npb25zLCB3aG9zZSBrZXkgZmllbGQgaXMgXCJrZXlcIiwgdGhlIG9wZXJhdG9yIGlzIFwiSW5cIiwgYW5kIHRoZSB2YWx1ZXMgYXJyYXkgY29udGFpbnMgb25seSBcInZhbHVlXCIuIFRoZSByZXF1aXJlbWVudHMgYXJlIEFORGVkLiIsInR5cGUiOiJvYmplY3QifX0sInR5cGUiOiJvYmplY3QiLCJ4LWt1YmVybmV0ZXMtbWFwLXR5cGUiOiJhdG9taWMifSwibWF0Y2hMYWJlbEtleXMiOnsiZGVzY3JpcHRpb24iOiJNYXRjaExhYmVsS2V5cyBpcyBhIHNldCBvZiBwb2QgbGFiZWwga2V5cyB0byBzZWxlY3Qgd2hpY2ggcG9kcyB3aWxsIGJlIHRha2VuIGludG8gY29uc2lkZXJhdGlvbi4gVGhlIGtleXMgYXJlIHVzZWQgdG8gbG9va3VwIHZhbHVlcyBmcm9tIHRoZSBpbmNvbWluZyBwb2QgbGFiZWxzLCB0aG9zZSBrZXktdmFsdWUgbGFiZWxzIGFyZSBtZXJnZWQgd2l0aCBgTGFiZWxTZWxlY3RvcmAgYXMgYGtleSBpbiAodmFsdWUpYCB0byBzZWxlY3QgdGhlIGdyb3VwIG9mIGV4aXN0aW5nIHBvZHMgd2hpY2ggcG9kcyB3aWxsIGJlIHRha2VuIGludG8gY29uc2lkZXJhdGlvbiBmb3IgdGhlIGluY29taW5nIHBvZCdzIHBvZCAoYW50aSkgYWZmaW5pdHkuIEtleXMgdGhhdCBkb24ndCBleGlzdCBpbiB0aGUgaW5jb21pbmcgcG9kIGxhYmVscyB3aWxsIGJlIGlnbm9yZWQuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGVtcHR5LiBUaGUgc2FtZSBrZXkgaXMgZm9yYmlkZGVuIHRvIGV4aXN0IGluIGJvdGggTWF0Y2hMYWJlbEtleXMgYW5kIExhYmVsU2VsZWN0b3IuIEFsc28sIE1hdGNoTGFiZWxLZXlzIGNhbm5vdCBiZSBzZXQgd2hlbiBMYWJlbFNlbGVjdG9yIGlzbid0IHNldC4gVGhpcyBpcyBhbiBhbHBoYSBmaWVsZCBhbmQgcmVxdWlyZXMgZW5hYmxpbmcgTWF0Y2hMYWJlbEtleXNJblBvZEFmZmluaXR5IGZlYXR1cmUgZ2F0ZS4iLCJpdGVtcyI6eyJ0eXBlIjoic3RyaW5nIn0sInR5cGUiOiJhcnJheSIsIngta3ViZXJuZXRlcy1saXN0LXR5cGUiOiJhdG9taWMifSwibWlzbWF0Y2hMYWJlbEtleXMiOnsiZGVzY3JpcHRpb24iOiJNaXNtYXRjaExhYmVsS2V5cyBpcyBhIHNldCBvZiBwb2QgbGFiZWwga2V5cyB0byBzZWxlY3Qgd2hpY2ggcG9kcyB3aWxsIGJlIHRha2VuIGludG8gY29uc2lkZXJhdGlvbi4gVGhlIGtleXMgYXJlIHVzZWQgdG8gbG9va3VwIHZhbHVlcyBmcm9tIHRoZSBpbmNvbWluZyBwb2QgbGFiZWxzLCB0aG9zZSBrZXktdmFsdWUgbGFiZWxzIGFyZSBtZXJnZWQgd2l0aCBgTGFiZWxTZWxlY3RvcmAgYXMgYGtleSBub3RpbiAodmFsdWUpYCB0byBzZWxlY3QgdGhlIGdyb3VwIG9mIGV4aXN0aW5nIHBvZHMgd2hpY2ggcG9kcyB3aWxsIGJlIHRha2VuIGludG8gY29uc2lkZXJhdGlvbiBmb3IgdGhlIGluY29taW5nIHBvZCdzIHBvZCAoYW50aSkgYWZmaW5pdHkuIEtleXMgdGhhdCBkb24ndCBleGlzdCBpbiB0aGUgaW5jb21pbmcgcG9kIGxhYmVscyB3aWxsIGJlIGlnbm9yZWQuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGVtcHR5LiBUaGUgc2FtZSBrZXkgaXMgZm9yYmlkZGVuIHRvIGV4aXN0IGluIGJvdGggTWlzbWF0Y2hMYWJlbEtleXMgYW5kIExhYmVsU2VsZWN0b3IuIEFsc28sIE1pc21hdGNoTGFiZWxLZXlzIGNhbm5vdCBiZSBzZXQgd2hlbiBMYWJlbFNlbGVjdG9yIGlzbid0IHNldC4gVGhpcyBpcyBhbiBhbHBoYSBmaWVsZCBhbmQgcmVxdWlyZXMgZW5hYmxpbmcgTWF0Y2hMYWJlbEtleXNJblBvZEFmZmluaXR5IGZlYXR1cmUgZ2F0ZS4iLCJpdGVtcyI6eyJ0eXBlIjoic3RyaW5nIn0sInR5cGUiOiJhcnJheSIsIngta3ViZXJuZXRlcy1saXN0LXR5cGUiOiJhdG9taWMifSwibmFtZXNwYWNlU2VsZWN0b3IiOnsiZGVzY3JpcHRpb24iOiJBIGxhYmVsIHF1ZXJ5IG92ZXIgdGhlIHNldCBvZiBuYW1lc3BhY2VzIHRoYXQgdGhlIHRlcm0gYXBwbGllcyB0by4gVGhlIHRlcm0gaXMgYXBwbGllZCB0byB0aGUgdW5pb24gb2YgdGhlIG5hbWVzcGFjZXMgc2VsZWN0ZWQgYnkgdGhpcyBmaWVsZCBhbmQgdGhlIG9uZXMgbGlzdGVkIGluIHRoZSBuYW1lc3BhY2VzIGZpZWxkLiBudWxsIHNlbGVjdG9yIGFuZCBudWxsIG9yIGVtcHR5IG5hbWVzcGFjZXMgbGlzdCBtZWFucyBcInRoaXMgcG9kJ3MgbmFtZXNwYWNlXCIuIEFuIGVtcHR5IHNlbGVjdG9yICh7fSkgbWF0Y2hlcyBhbGwgbmFtZXNwYWNlcy4iLCJwcm9wZXJ0aWVzIjp7Im1hdGNoRXhwcmVzc2lvbnMiOnsiZGVzY3JpcHRpb24iOiJtYXRjaEV4cHJlc3Npb25zIGlzIGEgbGlzdCBvZiBsYWJlbCBzZWxlY3RvciByZXF1aXJlbWVudHMuIFRoZSByZXF1aXJlbWVudHMgYXJlIEFORGVkLiIsIml0ZW1zIjp7ImRlc2NyaXB0aW9uIjoiQSBsYWJlbCBzZWxlY3RvciByZXF1aXJlbWVudCBpcyBhIHNlbGVjdG9yIHRoYXQgY29udGFpbnMgdmFsdWVzLCBhIGtleSwgYW5kIGFuIG9wZXJhdG9yIHRoYXQgcmVsYXRlcyB0aGUga2V5IGFuZCB2YWx1ZXMuIiwicHJvcGVydGllcyI6eyJrZXkiOnsiZGVzY3JpcHRpb24iOiJrZXkgaXMgdGhlIGxhYmVsIGtleSB0aGF0IHRoZSBzZWxlY3RvciBhcHBsaWVzIHRvLiIsInR5cGUiOiJzdHJpbmcifSwib3BlcmF0b3IiOnsiZGVzY3JpcHRpb24iOiJvcGVyYXRvciByZXByZXNlbnRzIGEga2V5J3MgcmVsYXRpb25zaGlwIHRvIGEgc2V0IG9mIHZhbHVlcy4gVmFsaWQgb3BlcmF0b3JzIGFyZSBJbiwgTm90SW4sIEV4aXN0cyBhbmQgRG9lc05vdEV4aXN0LiIsInR5cGUiOiJzdHJpbmcifSwidmFsdWVzIjp7ImRlc2NyaXB0aW9uIjoidmFsdWVzIGlzIGFuIGFycmF5IG9mIHN0cmluZyB2YWx1ZXMuIElmIHRoZSBvcGVyYXRvciBpcyBJbiBvciBOb3RJbiwgdGhlIHZhbHVlcyBhcnJheSBtdXN0IGJlIG5vbi1lbXB0eS4gSWYgdGhlIG9wZXJhdG9yIGlzIEV4aXN0cyBvciBEb2VzTm90RXhpc3QsIHRoZSB2YWx1ZXMgYXJyYXkgbXVzdCBiZSBlbXB0eS4gVGhpcyBhcnJheSBpcyByZXBsYWNlZCBkdXJpbmcgYSBzdHJhdGVnaWMgbWVyZ2UgcGF0Y2guIiwiaXRlbXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjoiYXJyYXkifX0sInJlcXVpcmVkIjpbImtleSIsIm9wZXJhdG9yIl0sInR5cGUiOiJvYmplY3QifSwidHlwZSI6ImFycmF5In0sIm1hdGNoTGFiZWxzIjp7ImFkZGl0aW9uYWxQcm9wZXJ0aWVzIjp7InR5cGUiOiJzdHJpbmcifSwiZGVzY3JpcHRpb24iOiJtYXRjaExhYmVscyBpcyBhIG1hcCBvZiB7a2V5LHZhbHVlfSBwYWlycy4gQSBzaW5nbGUge2tleSx2YWx1ZX0gaW4gdGhlIG1hdGNoTGFiZWxzIG1hcCBpcyBlcXVpdmFsZW50IHRvIGFuIGVsZW1lbnQgb2YgbWF0Y2hFeHByZXNzaW9ucywgd2hvc2Uga2V5IGZpZWxkIGlzIFwia2V5XCIsIHRoZSBvcGVyYXRvciBpcyBcIkluXCIsIGFuZCB0aGUgdmFsdWVzIGFycmF5IGNvbnRhaW5zIG9ubHkgXCJ2YWx1ZVwiLiBUaGUgcmVxdWlyZW1lbnRzIGFyZSBBTkRlZC4iLCJ0eXBlIjoib2JqZWN0In19LCJ0eXBlIjoib2JqZWN0IiwieC1rdWJlcm5ldGVzLW1hcC10eXBlIjoiYXRvbWljIn0sIm5hbWVzcGFjZXMiOnsiZGVzY3JpcHRpb24iOiJuYW1lc3BhY2VzIHNwZWNpZmllcyBhIHN0YXRpYyBsaXN0IG9mIG5hbWVzcGFjZSBuYW1lcyB0aGF0IHRoZSB0ZXJtIGFwcGxpZXMgdG8uIFRoZSB0ZXJtIGlzIGFwcGxpZWQgdG8gdGhlIHVuaW9uIG9mIHRoZSBuYW1lc3BhY2VzIGxpc3RlZCBpbiB0aGlzIGZpZWxkIGFuZCB0aGUgb25lcyBzZWxlY3RlZCBieSBuYW1lc3BhY2VTZWxlY3Rvci4gbnVsbCBvciBlbXB0eSBuYW1lc3BhY2VzIGxpc3QgYW5kIG51bGwgbmFtZXNwYWNlU2VsZWN0b3IgbWVhbnMgXCJ0aGlzIHBvZCdzIG5hbWVzcGFjZVwiLiIsIml0ZW1zIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6ImFycmF5In0sInRvcG9sb2d5S2V5Ijp7ImRlc2NyaXB0aW9uIjoiVGhpcyBwb2Qgc2hvdWxkIGJlIGNvLWxvY2F0ZWQgKGFmZmluaXR5KSBvciBub3QgY28tbG9jYXRlZCAoYW50aS1hZmZpbml0eSkgd2l0aCB0aGUgcG9kcyBtYXRjaGluZyB0aGUgbGFiZWxTZWxlY3RvciBpbiB0aGUgc3BlY2lmaWVkIG5hbWVzcGFjZXMsIHdoZXJlIGNvLWxvY2F0ZWQgaXMgZGVmaW5lZCBhcyBydW5uaW5nIG9uIGEgbm9kZSB3aG9zZSB2YWx1ZSBvZiB0aGUgbGFiZWwgd2l0aCBrZXkgdG9wb2xvZ3lLZXkgbWF0Y2hlcyB0aGF0IG9mIGFueSBub2RlIG9uIHdoaWNoIGFueSBvZiB0aGUgc2VsZWN0ZWQgcG9kcyBpcyBydW5uaW5nLiBFbXB0eSB0b3BvbG9neUtleSBpcyBub3QgYWxsb3dlZC4iLCJ0eXBlIjoic3RyaW5nIn19LCJyZXF1aXJlZCI6WyJ0b3BvbG9neUtleSJdLCJ0eXBlIjoib2JqZWN0In0sInR5cGUiOiJhcnJheSJ9fSwidHlwZSI6Im9iamVjdCJ9LCJ0b2xlcmF0aW9ucyI6eyJkZXNjcmlwdGlvbiI6IlRoZSBwb2QgdGhpcyBUb2xlcmF0aW9uIGlzIGF0dGFjaGVkIHRvIHRvbGVyYXRlcyBhbnkgdGFpbnQgdGhhdCBtYXRjaGVzIHRoZSB0cmlwbGUgXHUwMDNja2V5LHZhbHVlLGVmZmVjdFx1MDAzZSB1c2luZyB0aGUgbWF0Y2hpbmcgb3BlcmF0b3IgXHUwMDNjb3BlcmF0b3JcdTAwM2UiLCJpdGVtcyI6eyJkZXNjcmlwdGlvbiI6IlRoZSBwb2QgdGhpcyBUb2xlcmF0aW9uIGlzIGF0dGFjaGVkIHRvIHRvbGVyYXRlcyBhbnkgdGFpbnQgdGhhdCBtYXRjaGVzIHRoZSB0cmlwbGUgXHUwMDNja2V5LHZhbHVlLGVmZmVjdFx1MDAzZSB1c2luZyB0aGUgbWF0Y2hpbmcgb3BlcmF0b3IgXHUwMDNjb3BlcmF0b3JcdTAwM2UuIiwicHJvcGVydGllcyI6eyJlZmZlY3QiOnsiZGVzY3JpcHRpb24iOiJFZmZlY3QgaW5kaWNhdGVzIHRoZSB0YWludCBlZmZlY3QgdG8gbWF0Y2guIEVtcHR5IG1lYW5zIG1hdGNoIGFsbCB0YWludCBlZmZlY3RzLiBXaGVuIHNwZWNpZmllZCwgYWxsb3dlZCB2YWx1ZXMgYXJlIE5vU2NoZWR1bGUsIFByZWZlck5vU2NoZWR1bGUgYW5kIE5vRXhlY3V0ZS4iLCJ0eXBlIjoic3RyaW5nIn0sImtleSI6eyJkZXNjcmlwdGlvbiI6IktleSBpcyB0aGUgdGFpbnQga2V5IHRoYXQgdGhlIHRvbGVyYXRpb24gYXBwbGllcyB0by4gRW1wdHkgbWVhbnMgbWF0Y2ggYWxsIHRhaW50IGtleXMuIElmIHRoZSBrZXkgaXMgZW1wdHksIG9wZXJhdG9yIG11c3QgYmUgRXhpc3RzOyB0aGlzIGNvbWJpbmF0aW9uIG1lYW5zIHRvIG1hdGNoIGFsbCB2YWx1ZXMgYW5kIGFsbCBrZXlzLiIsInR5cGUiOiJzdHJpbmcifSwib3BlcmF0b3IiOnsiZGVzY3JpcHRpb24iOiJPcGVyYXRvciByZXByZXNlbnRzIGEga2V5J3MgcmVsYXRpb25zaGlwIHRvIHRoZSB2YWx1ZS4gVmFsaWQgb3BlcmF0b3JzIGFyZSBFeGlzdHMgYW5kIEVxdWFsLiBEZWZhdWx0cyB0byBFcXVhbC4gRXhpc3RzIGlzIGVxdWl2YWxlbnQgdG8gd2lsZGNhcmQgZm9yIHZhbHVlLCBzbyB0aGF0IGEgcG9kIGNhbiB0b2xlcmF0ZSBhbGwgdGFpbnRzIG9mIGEgcGFydGljdWxhciBjYXRlZ29yeS4iLCJ0eXBlIjoic3RyaW5nIn0sInRvbGVyYXRpb25TZWNvbmRzIjp7ImRlc2NyaXB0aW9uIjoiVG9sZXJhdGlvblNlY29uZHMgcmVwcmVzZW50cyB0aGUgcGVyaW9kIG9mIHRpbWUgdGhlIHRvbGVyYXRpb24gKHdoaWNoIG11c3QgYmUgb2YgZWZmZWN0IE5vRXhlY3V0ZSwgb3RoZXJ3aXNlIHRoaXMgZmllbGQgaXMgaWdub3JlZCkgdG9sZXJhdGVzIHRoZSB0YWludC4gQnkgZGVmYXVsdCwgaXQgaXMgbm90IHNldCwgd2hpY2ggbWVhbnMgdG9sZXJhdGUgdGhlIHRhaW50IGZvcmV2ZXIgKGRvIG5vdCBldmljdCkuIFplcm8gYW5kIG5lZ2F0aXZlIHZhbHVlcyB3aWxsIGJlIHRyZWF0ZWQgYXMgMCAoZXZpY3QgaW1tZWRpYXRlbHkpIGJ5IHRoZSBzeXN0ZW0uIiwiZm9ybWF0IjoiaW50NjQiLCJ0eXBlIjoiaW50ZWdlciJ9LCJ2YWx1ZSI6eyJkZXNjcmlwdGlvbiI6IlZhbHVlIGlzIHRoZSB0YWludCB2YWx1ZSB0aGUgdG9sZXJhdGlvbiBtYXRjaGVzIHRvLiBJZiB0aGUgb3BlcmF0b3IgaXMgRXhpc3RzLCB0aGUgdmFsdWUgc2hvdWxkIGJlIGVtcHR5LCBvdGhlcndpc2UganVzdCBhIHJlZ3VsYXIgc3RyaW5nLiIsInR5cGUiOiJzdHJpbmcifX0sInR5cGUiOiJvYmplY3QifSwidHlwZSI6ImFycmF5In0sInRvcG9sb2d5U3ByZWFkQ29uc3RyYWludHMiOnsiZGVzY3JpcHRpb24iOiJUb3BvbG9neVNwcmVhZENvbnN0cmFpbnQgc3BlY2lmaWVzIGhvdyB0byBzcHJlYWQgbWF0Y2hpbmcgcG9kcyBhbW9uZyB0aGUgZ2l2ZW4gdG9wb2xvZ3kiLCJpdGVtcyI6eyJkZXNjcmlwdGlvbiI6IlRvcG9sb2d5U3ByZWFkQ29uc3RyYWludCBzcGVjaWZpZXMgaG93IHRvIHNwcmVhZCBtYXRjaGluZyBwb2RzIGFtb25nIHRoZSBnaXZlbiB0b3BvbG9neS4iLCJwcm9wZXJ0aWVzIjp7ImxhYmVsU2VsZWN0b3IiOnsiZGVzY3JpcHRpb24iOiJMYWJlbFNlbGVjdG9yIGlzIHVzZWQgdG8gZmluZCBtYXRjaGluZyBwb2RzLiBQb2RzIHRoYXQgbWF0Y2ggdGhpcyBsYWJlbCBzZWxlY3RvciBhcmUgY291bnRlZCB0byBkZXRlcm1pbmUgdGhlIG51bWJlciBvZiBwb2RzIGluIHRoZWlyIGNvcnJlc3BvbmRpbmcgdG9wb2xvZ3kgZG9tYWluLiIsInByb3BlcnRpZXMiOnsibWF0Y2hFeHByZXNzaW9ucyI6eyJkZXNjcmlwdGlvbiI6Im1hdGNoRXhwcmVzc2lvbnMgaXMgYSBsaXN0IG9mIGxhYmVsIHNlbGVjdG9yIHJlcXVpcmVtZW50cy4gVGhlIHJlcXVpcmVtZW50cyBhcmUgQU5EZWQuIiwiaXRlbXMiOnsiZGVzY3JpcHRpb24iOiJBIGxhYmVsIHNlbGVjdG9yIHJlcXVpcmVtZW50IGlzIGEgc2VsZWN0b3IgdGhhdCBjb250YWlucyB2YWx1ZXMsIGEga2V5LCBhbmQgYW4gb3BlcmF0b3IgdGhhdCByZWxhdGVzIHRoZSBrZXkgYW5kIHZhbHVlcy4iLCJwcm9wZXJ0aWVzIjp7ImtleSI6eyJkZXNjcmlwdGlvbiI6ImtleSBpcyB0aGUgbGFiZWwga2V5IHRoYXQgdGhlIHNlbGVjdG9yIGFwcGxpZXMgdG8uIiwidHlwZSI6InN0cmluZyJ9LCJvcGVyYXRvciI6eyJkZXNjcmlwdGlvbiI6Im9wZXJhdG9yIHJlcHJlc2VudHMgYSBrZXkncyByZWxhdGlvbnNoaXAgdG8gYSBzZXQgb2YgdmFsdWVzLiBWYWxpZCBvcGVyYXRvcnMgYXJlIEluLCBOb3RJbiwgRXhpc3RzIGFuZCBEb2VzTm90RXhpc3QuIiwidHlwZSI6InN0cmluZyJ9LCJ2YWx1ZXMiOnsiZGVzY3JpcHRpb24iOiJ2YWx1ZXMgaXMgYW4gYXJyYXkgb2Ygc3RyaW5nIHZhbHVlcy4gSWYgdGhlIG9wZXJhdG9yIGlzIEluIG9yIE5vdEluLCB0aGUgdmFsdWVzIGFycmF5IG11c3QgYmUgbm9uLWVtcHR5LiBJZiB0aGUgb3BlcmF0b3IgaXMgRXhpc3RzIG9yIERvZXNOb3RFeGlzdCwgdGhlIHZhbHVlcyBhcnJheSBtdXN0IGJlIGVtcHR5LiBUaGlzIGFycmF5IGlzIHJlcGxhY2VkIGR1cmluZyBhIHN0cmF0ZWdpYyBtZXJnZSBwYXRjaC4iLCJpdGVtcyI6eyJ0eXBlIjoic3RyaW5nIn0sInR5cGUiOiJhcnJheSJ9fSwicmVxdWlyZWQiOlsia2V5Iiwib3BlcmF0b3IiXSwidHlwZSI6Im9iamVjdCJ9LCJ0eXBlIjoiYXJyYXkifSwibWF0Y2hMYWJlbHMiOnsiYWRkaXRpb25hbFByb3BlcnRpZXMiOnsidHlwZSI6InN0cmluZyJ9LCJkZXNjcmlwdGlvbiI6Im1hdGNoTGFiZWxzIGlzIGEgbWFwIG9mIHtrZXksdmFsdWV9IHBhaXJzLiBBIHNpbmdsZSB7a2V5LHZhbHVlfSBpbiB0aGUgbWF0Y2hMYWJlbHMgbWFwIGlzIGVxdWl2YWxlbnQgdG8gYW4gZWxlbWVudCBvZiBtYXRjaEV4cHJlc3Npb25zLCB3aG9zZSBrZXkgZmllbGQgaXMgXCJrZXlcIiwgdGhlIG9wZXJhdG9yIGlzIFwiSW5cIiwgYW5kIHRoZSB2YWx1ZXMgYXJyYXkgY29udGFpbnMgb25seSBcInZhbHVlXCIuIFRoZSByZXF1aXJlbWVudHMgYXJlIEFORGVkLiIsInR5cGUiOiJvYmplY3QifX0sInR5cGUiOiJvYmplY3QiLCJ4LWt1YmVybmV0ZXMtbWFwLXR5cGUiOiJhdG9taWMifSwibWF0Y2hMYWJlbEtleXMiOnsiZGVzY3JpcHRpb24iOiJNYXRjaExhYmVsS2V5cyBpcyBhIHNldCBvZiBwb2QgbGFiZWwga2V5cyB0byBzZWxlY3QgdGhlIHBvZHMgb3ZlciB3aGljaCBzcHJlYWRpbmcgd2lsbCBiZSBjYWxjdWxhdGVkLiBUaGUga2V5cyBhcmUgdXNlZCB0byBsb29rdXAgdmFsdWVzIGZyb20gdGhlIGluY29taW5nIHBvZCBsYWJlbHMsIHRob3NlIGtleS12YWx1ZSBsYWJlbHMgYXJlIEFORGVkIHdpdGggbGFiZWxTZWxlY3RvciB0byBzZWxlY3QgdGhlIGdyb3VwIG9mIGV4aXN0aW5nIHBvZHMgb3ZlciB3aGljaCBzcHJlYWRpbmcgd2lsbCBiZSBjYWxjdWxhdGVkIGZvciB0aGUgaW5jb21pbmcgcG9kLiBUaGUgc2FtZSBrZXkgaXMgZm9yYmlkZGVuIHRvIGV4aXN0IGluIGJvdGggTWF0Y2hMYWJlbEtleXMgYW5kIExhYmVsU2VsZWN0b3IuIE1hdGNoTGFiZWxLZXlzIGNhbm5vdCBiZSBzZXQgd2hlbiBMYWJlbFNlbGVjdG9yIGlzbid0IHNldC4gS2V5cyB0aGF0IGRvbid0IGV4aXN0IGluIHRoZSBpbmNvbWluZyBwb2QgbGFiZWxzIHdpbGwgYmUgaWdub3JlZC4gQSBudWxsIG9yIGVtcHR5IGxpc3QgbWVhbnMgb25seSBtYXRjaCBhZ2FpbnN0IGxhYmVsU2VsZWN0b3IuIFxuIFRoaXMgaXMgYSBiZXRhIGZpZWxkIGFuZCByZXF1aXJlcyB0aGUgTWF0Y2hMYWJlbEtleXNJblBvZFRvcG9sb2d5U3ByZWFkIGZlYXR1cmUgZ2F0ZSB0byBiZSBlbmFibGVkIChlbmFibGVkIGJ5IGRlZmF1bHQpLiIsIml0ZW1zIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6ImFycmF5IiwieC1rdWJlcm5ldGVzLWxpc3QtdHlwZSI6ImF0b21pYyJ9LCJtYXhTa2V3Ijp7ImRlc2NyaXB0aW9uIjoiTWF4U2tldyBkZXNjcmliZXMgdGhlIGRlZ3JlZSB0byB3aGljaCBwb2RzIG1heSBiZSB1bmV2ZW5seSBkaXN0cmlidXRlZC4gV2hlbiBgd2hlblVuc2F0aXNmaWFibGU9RG9Ob3RTY2hlZHVsZWAsIGl0IGlzIHRoZSBtYXhpbXVtIHBlcm1pdHRlZCBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIG51bWJlciBvZiBtYXRjaGluZyBwb2RzIGluIHRoZSB0YXJnZXQgdG9wb2xvZ3kgYW5kIHRoZSBnbG9iYWwgbWluaW11bS4gVGhlIGdsb2JhbCBtaW5pbXVtIGlzIHRoZSBtaW5pbXVtIG51bWJlciBvZiBtYXRjaGluZyBwb2RzIGluIGFuIGVsaWdpYmxlIGRvbWFpbiBvciB6ZXJvIGlmIHRoZSBudW1iZXIgb2YgZWxpZ2libGUgZG9tYWlucyBpcyBsZXNzIHRoYW4gTWluRG9tYWlucy4gRm9yIGV4YW1wbGUsIGluIGEgMy16b25lIGNsdXN0ZXIsIE1heFNrZXcgaXMgc2V0IHRvIDEsIGFuZCBwb2RzIHdpdGggdGhlIHNhbWUgbGFiZWxTZWxlY3RvciBzcHJlYWQgYXMgMi8yLzE6IEluIHRoaXMgY2FzZSwgdGhlIGdsb2JhbCBtaW5pbXVtIGlzIDEuIHwgem9uZTEgfCB6b25lMiB8IHpvbmUzIHwgfCAgUCBQICB8ICBQIFAgIHwgICBQICAgfCAtIGlmIE1heFNrZXcgaXMgMSwgaW5jb21pbmcgcG9kIGNhbiBvbmx5IGJlIHNjaGVkdWxlZCB0byB6b25lMyB0byBiZWNvbWUgMi8yLzI7IHNjaGVkdWxpbmcgaXQgb250byB6b25lMSh6b25lMikgd291bGQgbWFrZSB0aGUgQWN0dWFsU2tldygzLTEpIG9uIHpvbmUxKHpvbmUyKSB2aW9sYXRlIE1heFNrZXcoMSkuIC0gaWYgTWF4U2tldyBpcyAyLCBpbmNvbWluZyBwb2QgY2FuIGJlIHNjaGVkdWxlZCBvbnRvIGFueSB6b25lLiBXaGVuIGB3aGVuVW5zYXRpc2ZpYWJsZT1TY2hlZHVsZUFueXdheWAsIGl0IGlzIHVzZWQgdG8gZ2l2ZSBoaWdoZXIgcHJlY2VkZW5jZSB0byB0b3BvbG9naWVzIHRoYXQgc2F0aXNmeSBpdC4gSXQncyBhIHJlcXVpcmVkIGZpZWxkLiBEZWZhdWx0IHZhbHVlIGlzIDEgYW5kIDAgaXMgbm90IGFsbG93ZWQuIiwiZm9ybWF0IjoiaW50MzIiLCJ0eXBlIjoiaW50ZWdlciJ9LCJtaW5Eb21haW5zIjp7ImRlc2NyaXB0aW9uIjoiTWluRG9tYWlucyBpbmRpY2F0ZXMgYSBtaW5pbXVtIG51bWJlciBvZiBlbGlnaWJsZSBkb21haW5zLiBXaGVuIHRoZSBudW1iZXIgb2YgZWxpZ2libGUgZG9tYWlucyB3aXRoIG1hdGNoaW5nIHRvcG9sb2d5IGtleXMgaXMgbGVzcyB0aGFuIG1pbkRvbWFpbnMsIFBvZCBUb3BvbG9neSBTcHJlYWQgdHJlYXRzIFwiZ2xvYmFsIG1pbmltdW1cIiBhcyAwLCBhbmQgdGhlbiB0aGUgY2FsY3VsYXRpb24gb2YgU2tldyBpcyBwZXJmb3JtZWQuIEFuZCB3aGVuIHRoZSBudW1iZXIgb2YgZWxpZ2libGUgZG9tYWlucyB3aXRoIG1hdGNoaW5nIHRvcG9sb2d5IGtleXMgZXF1YWxzIG9yIGdyZWF0ZXIgdGhhbiBtaW5Eb21haW5zLCB0aGlzIHZhbHVlIGhhcyBubyBlZmZlY3Qgb24gc2NoZWR1bGluZy4gQXMgYSByZXN1bHQsIHdoZW4gdGhlIG51bWJlciBvZiBlbGlnaWJsZSBkb21haW5zIGlzIGxlc3MgdGhhbiBtaW5Eb21haW5zLCBzY2hlZHVsZXIgd29uJ3Qgc2NoZWR1bGUgbW9yZSB0aGFuIG1heFNrZXcgUG9kcyB0byB0aG9zZSBkb21haW5zLiBJZiB2YWx1ZSBpcyBuaWwsIHRoZSBjb25zdHJhaW50IGJlaGF2ZXMgYXMgaWYgTWluRG9tYWlucyBpcyBlcXVhbCB0byAxLiBWYWxpZCB2YWx1ZXMgYXJlIGludGVnZXJzIGdyZWF0ZXIgdGhhbiAwLiBXaGVuIHZhbHVlIGlzIG5vdCBuaWwsIFdoZW5VbnNhdGlzZmlhYmxlIG11c3QgYmUgRG9Ob3RTY2hlZHVsZS4gXG4gRm9yIGV4YW1wbGUsIGluIGEgMy16b25lIGNsdXN0ZXIsIE1heFNrZXcgaXMgc2V0IHRvIDIsIE1pbkRvbWFpbnMgaXMgc2V0IHRvIDUgYW5kIHBvZHMgd2l0aCB0aGUgc2FtZSBsYWJlbFNlbGVjdG9yIHNwcmVhZCBhcyAyLzIvMjogfCB6b25lMSB8IHpvbmUyIHwgem9uZTMgfCB8ICBQIFAgIHwgIFAgUCAgfCAgUCBQICB8IFRoZSBudW1iZXIgb2YgZG9tYWlucyBpcyBsZXNzIHRoYW4gNShNaW5Eb21haW5zKSwgc28gXCJnbG9iYWwgbWluaW11bVwiIGlzIHRyZWF0ZWQgYXMgMC4gSW4gdGhpcyBzaXR1YXRpb24sIG5ldyBwb2Qgd2l0aCB0aGUgc2FtZSBsYWJlbFNlbGVjdG9yIGNhbm5vdCBiZSBzY2hlZHVsZWQsIGJlY2F1c2UgY29tcHV0ZWQgc2tldyB3aWxsIGJlIDMoMyAtIDApIGlmIG5ldyBQb2QgaXMgc2NoZWR1bGVkIHRvIGFueSBvZiB0aGUgdGhyZWUgem9uZXMsIGl0IHdpbGwgdmlvbGF0ZSBNYXhTa2V3LiBcbiBUaGlzIGlzIGEgYmV0YSBmaWVsZCBhbmQgcmVxdWlyZXMgdGhlIE1pbkRvbWFpbnNJblBvZFRvcG9sb2d5U3ByZWFkIGZlYXR1cmUgZ2F0ZSB0byBiZSBlbmFibGVkIChlbmFibGVkIGJ5IGRlZmF1bHQpLiIsImZvcm1hdCI6ImludDMyIiwidHlwZSI6ImludGVnZXIifSwibm9kZUFmZmluaXR5UG9saWN5Ijp7ImRlc2NyaXB0aW9uIjoiTm9kZUFmZmluaXR5UG9saWN5IGluZGljYXRlcyBob3cgd2Ugd2lsbCB0cmVhdCBQb2QncyBub2RlQWZmaW5pdHkvbm9kZVNlbGVjdG9yIHdoZW4gY2FsY3VsYXRpbmcgcG9kIHRvcG9sb2d5IHNwcmVhZCBza2V3LiBPcHRpb25zIGFyZTogLSBIb25vcjogb25seSBub2RlcyBtYXRjaGluZyBub2RlQWZmaW5pdHkvbm9kZVNlbGVjdG9yIGFyZSBpbmNsdWRlZCBpbiB0aGUgY2FsY3VsYXRpb25zLiAtIElnbm9yZTogbm9kZUFmZmluaXR5L25vZGVTZWxlY3RvciBhcmUgaWdub3JlZC4gQWxsIG5vZGVzIGFyZSBpbmNsdWRlZCBpbiB0aGUgY2FsY3VsYXRpb25zLiBcbiBJZiB0aGlzIHZhbHVlIGlzIG5pbCwgdGhlIGJlaGF2aW9yIGlzIGVxdWl2YWxlbnQgdG8gdGhlIEhvbm9yIHBvbGljeS4gVGhpcyBpcyBhIGJldGEtbGV2ZWwgZmVhdHVyZSBkZWZhdWx0IGVuYWJsZWQgYnkgdGhlIE5vZGVJbmNsdXNpb25Qb2xpY3lJblBvZFRvcG9sb2d5U3ByZWFkIGZlYXR1cmUgZmxhZy4iLCJ0eXBlIjoic3RyaW5nIn0sIm5vZGVUYWludHNQb2xpY3kiOnsiZGVzY3JpcHRpb24iOiJOb2RlVGFpbnRzUG9saWN5IGluZGljYXRlcyBob3cgd2Ugd2lsbCB0cmVhdCBub2RlIHRhaW50cyB3aGVuIGNhbGN1bGF0aW5nIHBvZCB0b3BvbG9neSBzcHJlYWQgc2tldy4gT3B0aW9ucyBhcmU6IC0gSG9ub3I6IG5vZGVzIHdpdGhvdXQgdGFpbnRzLCBhbG9uZyB3aXRoIHRhaW50ZWQgbm9kZXMgZm9yIHdoaWNoIHRoZSBpbmNvbWluZyBwb2QgaGFzIGEgdG9sZXJhdGlvbiwgYXJlIGluY2x1ZGVkLiAtIElnbm9yZTogbm9kZSB0YWludHMgYXJlIGlnbm9yZWQuIEFsbCBub2RlcyBhcmUgaW5jbHVkZWQuIFxuIElmIHRoaXMgdmFsdWUgaXMgbmlsLCB0aGUgYmVoYXZpb3IgaXMgZXF1aXZhbGVudCB0byB0aGUgSWdub3JlIHBvbGljeS4gVGhpcyBpcyBhIGJldGEtbGV2ZWwgZmVhdHVyZSBkZWZhdWx0IGVuYWJsZWQgYnkgdGhlIE5vZGVJbmNsdXNpb25Qb2xpY3lJblBvZFRvcG9sb2d5U3ByZWFkIGZlYXR1cmUgZmxhZy4iLCJ0eXBlIjoic3RyaW5nIn0sInRvcG9sb2d5S2V5Ijp7ImRlc2NyaXB0aW9uIjoiVG9wb2xvZ3lLZXkgaXMgdGhlIGtleSBvZiBub2RlIGxhYmVscy4gTm9kZXMgdGhhdCBoYXZlIGEgbGFiZWwgd2l0aCB0aGlzIGtleSBhbmQgaWRlbnRpY2FsIHZhbHVlcyBhcmUgY29uc2lkZXJlZCB0byBiZSBpbiB0aGUgc2FtZSB0b3BvbG9neS4gV2UgY29uc2lkZXIgZWFjaCBcdTAwM2NrZXksIHZhbHVlXHUwMDNlIGFzIGEgXCJidWNrZXRcIiwgYW5kIHRyeSB0byBwdXQgYmFsYW5jZWQgbnVtYmVyIG9mIHBvZHMgaW50byBlYWNoIGJ1Y2tldC4gV2UgZGVmaW5lIGEgZG9tYWluIGFzIGEgcGFydGljdWxhciBpbnN0YW5jZSBvZiBhIHRvcG9sb2d5LiBBbHNvLCB3ZSBkZWZpbmUgYW4gZWxpZ2libGUgZG9tYWluIGFzIGEgZG9tYWluIHdob3NlIG5vZGVzIG1lZXQgdGhlIHJlcXVpcmVtZW50cyBvZiBub2RlQWZmaW5pdHlQb2xpY3kgYW5kIG5vZGVUYWludHNQb2xpY3kuIGUuZy4gSWYgVG9wb2xvZ3lLZXkgaXMgXCJrdWJlcm5ldGVzLmlvL2hvc3RuYW1lXCIsIGVhY2ggTm9kZSBpcyBhIGRvbWFpbiBvZiB0aGF0IHRvcG9sb2d5LiBBbmQsIGlmIFRvcG9sb2d5S2V5IGlzIFwidG9wb2xvZ3kua3ViZXJuZXRlcy5pby96b25lXCIsIGVhY2ggem9uZSBpcyBhIGRvbWFpbiBvZiB0aGF0IHRvcG9sb2d5LiBJdCdzIGEgcmVxdWlyZWQgZmllbGQuIiwidHlwZSI6InN0cmluZyJ9LCJ3aGVuVW5zYXRpc2ZpYWJsZSI6eyJkZXNjcmlwdGlvbiI6IldoZW5VbnNhdGlzZmlhYmxlIGluZGljYXRlcyBob3cgdG8gZGVhbCB3aXRoIGEgcG9kIGlmIGl0IGRvZXNuJ3Qgc2F0aXNmeSB0aGUgc3ByZWFkIGNvbnN0cmFpbnQuIC0gRG9Ob3RTY2hlZHVsZSAoZGVmYXVsdCkgdGVsbHMgdGhlIHNjaGVkdWxlciBub3QgdG8gc2NoZWR1bGUgaXQuIC0gU2NoZWR1bGVBbnl3YXkgdGVsbHMgdGhlIHNjaGVkdWxlciB0byBzY2hlZHVsZSB0aGUgcG9kIGluIGFueSBsb2NhdGlvbiwgYnV0IGdpdmluZyBoaWdoZXIgcHJlY2VkZW5jZSB0byB0b3BvbG9naWVzIHRoYXQgd291bGQgaGVscCByZWR1Y2UgdGhlIHNrZXcuIEEgY29uc3RyYWludCBpcyBjb25zaWRlcmVkIFwiVW5zYXRpc2ZpYWJsZVwiIGZvciBhbiBpbmNvbWluZyBwb2QgaWYgYW5kIG9ubHkgaWYgZXZlcnkgcG9zc2libGUgbm9kZSBhc3NpZ25tZW50IGZvciB0aGF0IHBvZCB3b3VsZCB2aW9sYXRlIFwiTWF4U2tld1wiIG9uIHNvbWUgdG9wb2xvZ3kuIEZvciBleGFtcGxlLCBpbiBhIDMtem9uZSBjbHVzdGVyLCBNYXhTa2V3IGlzIHNldCB0byAxLCBhbmQgcG9kcyB3aXRoIHRoZSBzYW1lIGxhYmVsU2VsZWN0b3Igc3ByZWFkIGFzIDMvMS8xOiB8IHpvbmUxIHwgem9uZTIgfCB6b25lMyB8IHwgUCBQIFAgfCAgIFAgICB8ICAgUCAgIHwgSWYgV2hlblVuc2F0aXNmaWFibGUgaXMgc2V0IHRvIERvTm90U2NoZWR1bGUsIGluY29taW5nIHBvZCBjYW4gb25seSBiZSBzY2hlZHVsZWQgdG8gem9uZTIoem9uZTMpIHRvIGJlY29tZSAzLzIvMSgzLzEvMikgYXMgQWN0dWFsU2tldygyLTEpIG9uIHpvbmUyKHpvbmUzKSBzYXRpc2ZpZXMgTWF4U2tldygxKS4gSW4gb3RoZXIgd29yZHMsIHRoZSBjbHVzdGVyIGNhbiBzdGlsbCBiZSBpbWJhbGFuY2VkLCBidXQgc2NoZWR1bGVyIHdvbid0IG1ha2UgaXQgKm1vcmUqIGltYmFsYW5jZWQuIEl0J3MgYSByZXF1aXJlZCBmaWVsZC4iLCJ0eXBlIjoic3RyaW5nIn19LCJyZXF1aXJlZCI6WyJtYXhTa2V3IiwidG9wb2xvZ3lLZXkiLCJ3aGVuVW5zYXRpc2ZpYWJsZSJdLCJ0eXBlIjoib2JqZWN0In0sInR5cGUiOiJhcnJheSJ9fSwidHlwZSI6Im9iamVjdCJ9LCJwcmltYXJ5QWZmaW5pdHkiOnsiZGVzY3JpcHRpb24iOiJQcmltYXJ5QWZmaW5pdHkgaXMgYW4gb3B0aW9uYWwgT1NEIHByaW1hcnktYWZmaW5pdHkgdmFsdWUgd2l0aGluIHRoZSByYW5nZSBbMCwxKS4gVGhpcyB2YWx1ZSBpbmZsdWVuY2UgdGhlIHdheSBDZXBoJ3MgQ1JVU0ggc2VsZWN0aW9uIG9mIHByaW1hcnkgT1NEcy4gTG93ZXIgdmFsdWUgcmVkdWNlIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIChlc3BlY2lhbGx5IG9uIHJlYWQgb3BlcmF0aW9ucykuIElmIG5vdCBzZXQsIGRlZmF1bHQgdmFsdWUgaXMgMS4gaHR0cHM6Ly9kb2NzLmNlcGguY29tL2VuL2xhdGVzdC9yYWRvcy9vcGVyYXRpb25zL2NydXNoLW1hcC8jcHJpbWFyeS1hZmZpbml0eSIsInBhdHRlcm4iOiJeMC5bMC05XSskIiwidHlwZSI6InN0cmluZyJ9LCJyZXBsaWNhIjp7ImRlc2NyaXB0aW9uIjoiUmVwbGljYSBpcyB0aGUgbnVtYmVyIG9mIFN0b3JhZ2VDbGFzc0RldmljZVNldHMgZm9yIHRoaXMgU3RvcmFnZURldmljZVNldCIsIm1pbmltdW0iOjEsInR5cGUiOiJpbnRlZ2VyIn0sInJlc291cmNlcyI6eyJkZXNjcmlwdGlvbiI6IlJlc291cmNlUmVxdWlyZW1lbnRzIGRlc2NyaWJlcyB0aGUgY29tcHV0ZSByZXNvdXJjZSByZXF1aXJlbWVudHMuIiwicHJvcGVydGllcyI6eyJjbGFpbXMiOnsiZGVzY3JpcHRpb24iOiJDbGFpbXMgbGlzdHMgdGhlIG5hbWVzIG9mIHJlc291cmNlcywgZGVmaW5lZCBpbiBzcGVjLnJlc291cmNlQ2xhaW1zLCB0aGF0IGFyZSB1c2VkIGJ5IHRoaXMgY29udGFpbmVyLiBcbiBUaGlzIGlzIGFuIGFscGhhIGZpZWxkIGFuZCByZXF1aXJlcyBlbmFibGluZyB0aGUgRHluYW1pY1Jlc291cmNlQWxsb2NhdGlvbiBmZWF0dXJlIGdhdGUuIFxuIFRoaXMgZmllbGQgaXMgaW1tdXRhYmxlLiBJdCBjYW4gb25seSBiZSBzZXQgZm9yIGNvbnRhaW5lcnMuIiwiaXRlbXMiOnsiZGVzY3JpcHRpb24iOiJSZXNvdXJjZUNsYWltIHJlZmVyZW5jZXMgb25lIGVudHJ5IGluIFBvZFNwZWMuUmVzb3VyY2VDbGFpbXMuIiwicHJvcGVydGllcyI6eyJuYW1lIjp7ImRlc2NyaXB0aW9uIjoiTmFtZSBtdXN0IG1hdGNoIHRoZSBuYW1lIG9mIG9uZSBlbnRyeSBpbiBwb2Quc3BlYy5yZXNvdXJjZUNsYWltcyBvZiB0aGUgUG9kIHdoZXJlIHRoaXMgZmllbGQgaXMgdXNlZC4gSXQgbWFrZXMgdGhhdCByZXNvdXJjZSBhdmFpbGFibGUgaW5zaWRlIGEgY29udGFpbmVyLiIsInR5cGUiOiJzdHJpbmcifX0sInJlcXVpcmVkIjpbIm5hbWUiXSwidHlwZSI6Im9iamVjdCJ9LCJ0eXBlIjoiYXJyYXkiLCJ4LWt1YmVybmV0ZXMtbGlzdC1tYXAta2V5cyI6WyJuYW1lIl0sIngta3ViZXJuZXRlcy1saXN0LXR5cGUiOiJtYXAifSwibGltaXRzIjp7ImFkZGl0aW9uYWxQcm9wZXJ0aWVzIjp7ImFueU9mIjpbeyJ0eXBlIjoiaW50ZWdlciJ9LHsidHlwZSI6InN0cmluZyJ9XSwicGF0dGVybiI6Il4oXFwrfC0pPygoWzAtOV0rKFxcLlswLTldKik/KXwoXFwuWzAtOV0rKSkoKFtLTUdUUEVdaSl8W251bWtNR1RQRV18KFtlRV0oXFwrfC0pPygoWzAtOV0rKFxcLlswLTldKik/KXwoXFwuWzAtOV0rKSkpKT8kIiwieC1rdWJlcm5ldGVzLWludC1vci1zdHJpbmciOnRydWV9LCJkZXNjcmlwdGlvbiI6IkxpbWl0cyBkZXNjcmliZXMgdGhlIG1heGltdW0gYW1vdW50IG9mIGNvbXB1dGUgcmVzb3VyY2VzIGFsbG93ZWQuIE1vcmUgaW5mbzogaHR0cHM6Ly9rdWJlcm5ldGVzLmlvL2RvY3MvY29uY2VwdHMvY29uZmlndXJhdGlvbi9tYW5hZ2UtcmVzb3VyY2VzLWNvbnRhaW5lcnMvIiwidHlwZSI6Im9iamVjdCJ9LCJyZXF1ZXN0cyI6eyJhZGRpdGlvbmFsUHJvcGVydGllcyI6eyJhbnlPZiI6W3sidHlwZSI6ImludGVnZXIifSx7InR5cGUiOiJzdHJpbmcifV0sInBhdHRlcm4iOiJeKFxcK3wtKT8oKFswLTldKyhcXC5bMC05XSopPyl8KFxcLlswLTldKykpKChbS01HVFBFXWkpfFtudW1rTUdUUEVdfChbZUVdKFxcK3wtKT8oKFswLTldKyhcXC5bMC05XSopPyl8KFxcLlswLTldKykpKSk/JCIsIngta3ViZXJuZXRlcy1pbnQtb3Itc3RyaW5nIjp0cnVlfSwiZGVzY3JpcHRpb24iOiJSZXF1ZXN0cyBkZXNjcmliZXMgdGhlIG1pbmltdW0gYW1vdW50IG9mIGNvbXB1dGUgcmVzb3VyY2VzIHJlcXVpcmVkLiBJZiBSZXF1ZXN0cyBpcyBvbWl0dGVkIGZvciBhIGNvbnRhaW5lciwgaXQgZGVmYXVsdHMgdG8gTGltaXRzIGlmIHRoYXQgaXMgZXhwbGljaXRseSBzcGVjaWZpZWQsIG90aGVyd2lzZSB0byBhbiBpbXBsZW1lbnRhdGlvbi1kZWZpbmVkIHZhbHVlLiBSZXF1ZXN0cyBjYW5ub3QgZXhjZWVkIExpbWl0cy4gTW9yZSBpbmZvOiBodHRwczovL2t1YmVybmV0ZXMuaW8vZG9jcy9jb25jZXB0cy9jb25maWd1cmF0aW9uL21hbmFnZS1yZXNvdXJjZXMtY29udGFpbmVycy8iLCJ0eXBlIjoib2JqZWN0In19LCJ0eXBlIjoib2JqZWN0In0sInRvcG9sb2d5S2V5Ijp7ImRlc2NyaXB0aW9uIjoiVG9wb2xvZ3lLZXkgaXMgdGhlIEt1YmVybmV0ZXMgdG9wb2xvZ3kgbGFiZWwgdGhhdCB0aGUgU3RvcmFnZUNsYXNzRGV2aWNlU2V0cyB3aWxsIGJlIGRpc3RyaWJ1dGVkIGFjcm9zcy4gSWdub3JlZCBpZiBQbGFjZW1lbnQgaXMgc2V0IiwidHlwZSI6InN0cmluZyJ9LCJ3YWxQVkNUZW1wbGF0ZSI6eyJkZXNjcmlwdGlvbiI6IlBlcnNpc3RlbnRWb2x1bWVDbGFpbSBpcyBhIHVzZXIncyByZXF1ZXN0IGZvciBhbmQgY2xhaW0gdG8gYSBwZXJzaXN0ZW50IHZvbHVtZSIsInByb3BlcnRpZXMiOnsiYXBpVmVyc2lvbiI6eyJkZXNjcmlwdGlvbiI6IkFQSVZlcnNpb24gZGVmaW5lcyB0aGUgdmVyc2lvbmVkIHNjaGVtYSBvZiB0aGlzIHJlcHJlc2VudGF0aW9uIG9mIGFuIG9iamVjdC4gU2VydmVycyBzaG91bGQgY29udmVydCByZWNvZ25pemVkIHNjaGVtYXMgdG8gdGhlIGxhdGVzdCBpbnRlcm5hbCB2YWx1ZSwgYW5kIG1heSByZWplY3QgdW5yZWNvZ25pemVkIHZhbHVlcy4gTW9yZSBpbmZvOiBodHRwczovL2dpdC5rOHMuaW8vY29tbXVuaXR5L2NvbnRyaWJ1dG9ycy9kZXZlbC9zaWctYXJjaGl0ZWN0dXJlL2FwaS1jb252ZW50aW9ucy5tZCNyZXNvdXJjZXMiLCJ0eXBlIjoic3RyaW5nIn0sImtpbmQiOnsiZGVzY3JpcHRpb24iOiJLaW5kIGlzIGEgc3RyaW5nIHZhbHVlIHJlcHJlc2VudGluZyB0aGUgUkVTVCByZXNvdXJjZSB0aGlzIG9iamVjdCByZXByZXNlbnRzLiBTZXJ2ZXJzIG1heSBpbmZlciB0aGlzIGZyb20gdGhlIGVuZHBvaW50IHRoZSBjbGllbnQgc3VibWl0cyByZXF1ZXN0cyB0by4gQ2Fubm90IGJlIHVwZGF0ZWQuIEluIENhbWVsQ2FzZS4gTW9yZSBpbmZvOiBodHRwczovL2dpdC5rOHMuaW8vY29tbXVuaXR5L2NvbnRyaWJ1dG9ycy9kZXZlbC9zaWctYXJjaGl0ZWN0dXJlL2FwaS1jb252ZW50aW9ucy5tZCN0eXBlcy1raW5kcyIsInR5cGUiOiJzdHJpbmcifSwibWV0YWRhdGEiOnsiZGVzY3JpcHRpb24iOiJTdGFuZGFyZCBvYmplY3QncyBtZXRhZGF0YS4gTW9yZSBpbmZvOiBodHRwczovL2dpdC5rOHMuaW8vY29tbXVuaXR5L2NvbnRyaWJ1dG9ycy9kZXZlbC9zaWctYXJjaGl0ZWN0dXJlL2FwaS1jb252ZW50aW9ucy5tZCNtZXRhZGF0YSIsInByb3BlcnRpZXMiOnsiYW5ub3RhdGlvbnMiOnsiYWRkaXRpb25hbFByb3BlcnRpZXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjoib2JqZWN0In0sImZpbmFsaXplcnMiOnsiaXRlbXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjoiYXJyYXkifSwibGFiZWxzIjp7ImFkZGl0aW9uYWxQcm9wZXJ0aWVzIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6Im9iamVjdCJ9LCJuYW1lIjp7InR5cGUiOiJzdHJpbmcifSwibmFtZXNwYWNlIjp7InR5cGUiOiJzdHJpbmcifX0sInR5cGUiOiJvYmplY3QifSwic3BlYyI6eyJkZXNjcmlwdGlvbiI6InNwZWMgZGVmaW5lcyB0aGUgZGVzaXJlZCBjaGFyYWN0ZXJpc3RpY3Mgb2YgYSB2b2x1bWUgcmVxdWVzdGVkIGJ5IGEgcG9kIGF1dGhvci4gTW9yZSBpbmZvOiBodHRwczovL2t1YmVybmV0ZXMuaW8vZG9jcy9jb25jZXB0cy9zdG9yYWdlL3BlcnNpc3RlbnQtdm9sdW1lcyNwZXJzaXN0ZW50dm9sdW1lY2xhaW1zIiwicHJvcGVydGllcyI6eyJhY2Nlc3NNb2RlcyI6eyJkZXNjcmlwdGlvbiI6ImFjY2Vzc01vZGVzIGNvbnRhaW5zIHRoZSBkZXNpcmVkIGFjY2VzcyBtb2RlcyB0aGUgdm9sdW1lIHNob3VsZCBoYXZlLiBNb3JlIGluZm86IGh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL2NvbmNlcHRzL3N0b3JhZ2UvcGVyc2lzdGVudC12b2x1bWVzI2FjY2Vzcy1tb2Rlcy0xIiwiaXRlbXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjoiYXJyYXkifSwiZGF0YVNvdXJjZSI6eyJkZXNjcmlwdGlvbiI6ImRhdGFTb3VyY2UgZmllbGQgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBlaXRoZXI6ICogQW4gZXhpc3RpbmcgVm9sdW1lU25hcHNob3Qgb2JqZWN0IChzbmFwc2hvdC5zdG9yYWdlLms4cy5pby9Wb2x1bWVTbmFwc2hvdCkgKiBBbiBleGlzdGluZyBQVkMgKFBlcnNpc3RlbnRWb2x1bWVDbGFpbSkgSWYgdGhlIHByb3Zpc2lvbmVyIG9yIGFuIGV4dGVybmFsIGNvbnRyb2xsZXIgY2FuIHN1cHBvcnQgdGhlIHNwZWNpZmllZCBkYXRhIHNvdXJjZSwgaXQgd2lsbCBjcmVhdGUgYSBuZXcgdm9sdW1lIGJhc2VkIG9uIHRoZSBjb250ZW50cyBvZiB0aGUgc3BlY2lmaWVkIGRhdGEgc291cmNlLiBXaGVuIHRoZSBBbnlWb2x1bWVEYXRhU291cmNlIGZlYXR1cmUgZ2F0ZSBpcyBlbmFibGVkLCBkYXRhU291cmNlIGNvbnRlbnRzIHdpbGwgYmUgY29waWVkIHRvIGRhdGFTb3VyY2VSZWYsIGFuZCBkYXRhU291cmNlUmVmIGNvbnRlbnRzIHdpbGwgYmUgY29waWVkIHRvIGRhdGFTb3VyY2Ugd2hlbiBkYXRhU291cmNlUmVmLm5hbWVzcGFjZSBpcyBub3Qgc3BlY2lmaWVkLiBJZiB0aGUgbmFtZXNwYWNlIGlzIHNwZWNpZmllZCwgdGhlbiBkYXRhU291cmNlUmVmIHdpbGwgbm90IGJlIGNvcGllZCB0byBkYXRhU291cmNlLiIsInByb3BlcnRpZXMiOnsiYXBpR3JvdXAiOnsiZGVzY3JpcHRpb24iOiJBUElHcm91cCBpcyB0aGUgZ3JvdXAgZm9yIHRoZSByZXNvdXJjZSBiZWluZyByZWZlcmVuY2VkLiBJZiBBUElHcm91cCBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgc3BlY2lmaWVkIEtpbmQgbXVzdCBiZSBpbiB0aGUgY29yZSBBUEkgZ3JvdXAuIEZvciBhbnkgb3RoZXIgdGhpcmQtcGFydHkgdHlwZXMsIEFQSUdyb3VwIGlzIHJlcXVpcmVkLiIsInR5cGUiOiJzdHJpbmcifSwia2luZCI6eyJkZXNjcmlwdGlvbiI6IktpbmQgaXMgdGhlIHR5cGUgb2YgcmVzb3VyY2UgYmVpbmcgcmVmZXJlbmNlZCIsInR5cGUiOiJzdHJpbmcifSwibmFtZSI6eyJkZXNjcmlwdGlvbiI6Ik5hbWUgaXMgdGhlIG5hbWUgb2YgcmVzb3VyY2UgYmVpbmcgcmVmZXJlbmNlZCIsInR5cGUiOiJzdHJpbmcifX0sInJlcXVpcmVkIjpbImtpbmQiLCJuYW1lIl0sInR5cGUiOiJvYmplY3QiLCJ4LWt1YmVybmV0ZXMtbWFwLXR5cGUiOiJhdG9taWMifSwiZGF0YVNvdXJjZVJlZiI6eyJkZXNjcmlwdGlvbiI6ImRhdGFTb3VyY2VSZWYgc3BlY2lmaWVzIHRoZSBvYmplY3QgZnJvbSB3aGljaCB0byBwb3B1bGF0ZSB0aGUgdm9sdW1lIHdpdGggZGF0YSwgaWYgYSBub24tZW1wdHkgdm9sdW1lIGlzIGRlc2lyZWQuIFRoaXMgbWF5IGJlIGFueSBvYmplY3QgZnJvbSBhIG5vbi1lbXB0eSBBUEkgZ3JvdXAgKG5vbiBjb3JlIG9iamVjdCkgb3IgYSBQZXJzaXN0ZW50Vm9sdW1lQ2xhaW0gb2JqZWN0LiBXaGVuIHRoaXMgZmllbGQgaXMgc3BlY2lmaWVkLCB2b2x1bWUgYmluZGluZyB3aWxsIG9ubHkgc3VjY2VlZCBpZiB0aGUgdHlwZSBvZiB0aGUgc3BlY2lmaWVkIG9iamVjdCBtYXRjaGVzIHNvbWUgaW5zdGFsbGVkIHZvbHVtZSBwb3B1bGF0b3Igb3IgZHluYW1pYyBwcm92aXNpb25lci4gVGhpcyBmaWVsZCB3aWxsIHJlcGxhY2UgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIGRhdGFTb3VyY2UgZmllbGQgYW5kIGFzIHN1Y2ggaWYgYm90aCBmaWVsZHMgYXJlIG5vbi1lbXB0eSwgdGhleSBtdXN0IGhhdmUgdGhlIHNhbWUgdmFsdWUuIEZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSwgd2hlbiBuYW1lc3BhY2UgaXNuJ3Qgc3BlY2lmaWVkIGluIGRhdGFTb3VyY2VSZWYsIGJvdGggZmllbGRzIChkYXRhU291cmNlIGFuZCBkYXRhU291cmNlUmVmKSB3aWxsIGJlIHNldCB0byB0aGUgc2FtZSB2YWx1ZSBhdXRvbWF0aWNhbGx5IGlmIG9uZSBvZiB0aGVtIGlzIGVtcHR5IGFuZCB0aGUgb3RoZXIgaXMgbm9uLWVtcHR5LiBXaGVuIG5hbWVzcGFjZSBpcyBzcGVjaWZpZWQgaW4gZGF0YVNvdXJjZVJlZiwgZGF0YVNvdXJjZSBpc24ndCBzZXQgdG8gdGhlIHNhbWUgdmFsdWUgYW5kIG11c3QgYmUgZW1wdHkuIFRoZXJlIGFyZSB0aHJlZSBpbXBvcnRhbnQgZGlmZmVyZW5jZXMgYmV0d2VlbiBkYXRhU291cmNlIGFuZCBkYXRhU291cmNlUmVmOiAqIFdoaWxlIGRhdGFTb3VyY2Ugb25seSBhbGxvd3MgdHdvIHNwZWNpZmljIHR5cGVzIG9mIG9iamVjdHMsIGRhdGFTb3VyY2VSZWYgYWxsb3dzIGFueSBub24tY29yZSBvYmplY3QsIGFzIHdlbGwgYXMgUGVyc2lzdGVudFZvbHVtZUNsYWltIG9iamVjdHMuICogV2hpbGUgZGF0YVNvdXJjZSBpZ25vcmVzIGRpc2FsbG93ZWQgdmFsdWVzIChkcm9wcGluZyB0aGVtKSwgZGF0YVNvdXJjZVJlZiBwcmVzZXJ2ZXMgYWxsIHZhbHVlcywgYW5kIGdlbmVyYXRlcyBhbiBlcnJvciBpZiBhIGRpc2FsbG93ZWQgdmFsdWUgaXMgc3BlY2lmaWVkLiAqIFdoaWxlIGRhdGFTb3VyY2Ugb25seSBhbGxvd3MgbG9jYWwgb2JqZWN0cywgZGF0YVNvdXJjZVJlZiBhbGxvd3Mgb2JqZWN0cyBpbiBhbnkgbmFtZXNwYWNlcy4gKEJldGEpIFVzaW5nIHRoaXMgZmllbGQgcmVxdWlyZXMgdGhlIEFueVZvbHVtZURhdGFTb3VyY2UgZmVhdHVyZSBnYXRlIHRvIGJlIGVuYWJsZWQuIChBbHBoYSkgVXNpbmcgdGhlIG5hbWVzcGFjZSBmaWVsZCBvZiBkYXRhU291cmNlUmVmIHJlcXVpcmVzIHRoZSBDcm9zc05hbWVzcGFjZVZvbHVtZURhdGFTb3VyY2UgZmVhdHVyZSBnYXRlIHRvIGJlIGVuYWJsZWQuIiwicHJvcGVydGllcyI6eyJhcGlHcm91cCI6eyJkZXNjcmlwdGlvbiI6IkFQSUdyb3VwIGlzIHRoZSBncm91cCBmb3IgdGhlIHJlc291cmNlIGJlaW5nIHJlZmVyZW5jZWQuIElmIEFQSUdyb3VwIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBzcGVjaWZpZWQgS2luZCBtdXN0IGJlIGluIHRoZSBjb3JlIEFQSSBncm91cC4gRm9yIGFueSBvdGhlciB0aGlyZC1wYXJ0eSB0eXBlcywgQVBJR3JvdXAgaXMgcmVxdWlyZWQuIiwidHlwZSI6InN0cmluZyJ9LCJraW5kIjp7ImRlc2NyaXB0aW9uIjoiS2luZCBpcyB0aGUgdHlwZSBvZiByZXNvdXJjZSBiZWluZyByZWZlcmVuY2VkIiwidHlwZSI6InN0cmluZyJ9LCJuYW1lIjp7ImRlc2NyaXB0aW9uIjoiTmFtZSBpcyB0aGUgbmFtZSBvZiByZXNvdXJjZSBiZWluZyByZWZlcmVuY2VkIiwidHlwZSI6InN0cmluZyJ9LCJuYW1lc3BhY2UiOnsiZGVzY3JpcHRpb24iOiJOYW1lc3BhY2UgaXMgdGhlIG5hbWVzcGFjZSBvZiByZXNvdXJjZSBiZWluZyByZWZlcmVuY2VkIE5vdGUgdGhhdCB3aGVuIGEgbmFtZXNwYWNlIGlzIHNwZWNpZmllZCwgYSBnYXRld2F5Lm5ldHdvcmtpbmcuazhzLmlvL1JlZmVyZW5jZUdyYW50IG9iamVjdCBpcyByZXF1aXJlZCBpbiB0aGUgcmVmZXJlbnQgbmFtZXNwYWNlIHRvIGFsbG93IHRoYXQgbmFtZXNwYWNlJ3Mgb3duZXIgdG8gYWNjZXB0IHRoZSByZWZlcmVuY2UuIFNlZSB0aGUgUmVmZXJlbmNlR3JhbnQgZG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy4gKEFscGhhKSBUaGlzIGZpZWxkIHJlcXVpcmVzIHRoZSBDcm9zc05hbWVzcGFjZVZvbHVtZURhdGFTb3VyY2UgZmVhdHVyZSBnYXRlIHRvIGJlIGVuYWJsZWQuIiwidHlwZSI6InN0cmluZyJ9fSwicmVxdWlyZWQiOlsia2luZCIsIm5hbWUiXSwidHlwZSI6Im9iamVjdCJ9LCJyZXNvdXJjZXMiOnsiZGVzY3JpcHRpb24iOiJyZXNvdXJjZXMgcmVwcmVzZW50cyB0aGUgbWluaW11bSByZXNvdXJjZXMgdGhlIHZvbHVtZSBzaG91bGQgaGF2ZS4gSWYgUmVjb3ZlclZvbHVtZUV4cGFuc2lvbkZhaWx1cmUgZmVhdHVyZSBpcyBlbmFibGVkIHVzZXJzIGFyZSBhbGxvd2VkIHRvIHNwZWNpZnkgcmVzb3VyY2UgcmVxdWlyZW1lbnRzIHRoYXQgYXJlIGxvd2VyIHRoYW4gcHJldmlvdXMgdmFsdWUgYnV0IG11c3Qgc3RpbGwgYmUgaGlnaGVyIHRoYW4gY2FwYWNpdHkgcmVjb3JkZWQgaW4gdGhlIHN0YXR1cyBmaWVsZCBvZiB0aGUgY2xhaW0uIE1vcmUgaW5mbzogaHR0cHM6Ly9rdWJlcm5ldGVzLmlvL2RvY3MvY29uY2VwdHMvc3RvcmFnZS9wZXJzaXN0ZW50LXZvbHVtZXMjcmVzb3VyY2VzIiwicHJvcGVydGllcyI6eyJsaW1pdHMiOnsiYWRkaXRpb25hbFByb3BlcnRpZXMiOnsiYW55T2YiOlt7InR5cGUiOiJpbnRlZ2VyIn0seyJ0eXBlIjoic3RyaW5nIn1dLCJwYXR0ZXJuIjoiXihcXCt8LSk/KChbMC05XSsoXFwuWzAtOV0qKT8pfChcXC5bMC05XSspKSgoW0tNR1RQRV1pKXxbbnVta01HVFBFXXwoW2VFXShcXCt8LSk/KChbMC05XSsoXFwuWzAtOV0qKT8pfChcXC5bMC05XSspKSkpPyQiLCJ4LWt1YmVybmV0ZXMtaW50LW9yLXN0cmluZyI6dHJ1ZX0sImRlc2NyaXB0aW9uIjoiTGltaXRzIGRlc2NyaWJlcyB0aGUgbWF4aW11bSBhbW91bnQgb2YgY29tcHV0ZSByZXNvdXJjZXMgYWxsb3dlZC4gTW9yZSBpbmZvOiBodHRwczovL2t1YmVybmV0ZXMuaW8vZG9jcy9jb25jZXB0cy9jb25maWd1cmF0aW9uL21hbmFnZS1yZXNvdXJjZXMtY29udGFpbmVycy8iLCJ0eXBlIjoib2JqZWN0In0sInJlcXVlc3RzIjp7ImFkZGl0aW9uYWxQcm9wZXJ0aWVzIjp7ImFueU9mIjpbeyJ0eXBlIjoiaW50ZWdlciJ9LHsidHlwZSI6InN0cmluZyJ9XSwicGF0dGVybiI6Il4oXFwrfC0pPygoWzAtOV0rKFxcLlswLTldKik/KXwoXFwuWzAtOV0rKSkoKFtLTUdUUEVdaSl8W251bWtNR1RQRV18KFtlRV0oXFwrfC0pPygoWzAtOV0rKFxcLlswLTldKik/KXwoXFwuWzAtOV0rKSkpKT8kIiwieC1rdWJlcm5ldGVzLWludC1vci1zdHJpbmciOnRydWV9LCJkZXNjcmlwdGlvbiI6IlJlcXVlc3RzIGRlc2NyaWJlcyB0aGUgbWluaW11bSBhbW91bnQgb2YgY29tcHV0ZSByZXNvdXJjZXMgcmVxdWlyZWQuIElmIFJlcXVlc3RzIGlzIG9taXR0ZWQgZm9yIGEgY29udGFpbmVyLCBpdCBkZWZhdWx0cyB0byBMaW1pdHMgaWYgdGhhdCBpcyBleHBsaWNpdGx5IHNwZWNpZmllZCwgb3RoZXJ3aXNlIHRvIGFuIGltcGxlbWVudGF0aW9uLWRlZmluZWQgdmFsdWUuIFJlcXVlc3RzIGNhbm5vdCBleGNlZWQgTGltaXRzLiBNb3JlIGluZm86IGh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL2NvbmNlcHRzL2NvbmZpZ3VyYXRpb24vbWFuYWdlLXJlc291cmNlcy1jb250YWluZXJzLyIsInR5cGUiOiJvYmplY3QifX0sInR5cGUiOiJvYmplY3QifSwic2VsZWN0b3IiOnsiZGVzY3JpcHRpb24iOiJzZWxlY3RvciBpcyBhIGxhYmVsIHF1ZXJ5IG92ZXIgdm9sdW1lcyB0byBjb25zaWRlciBmb3IgYmluZGluZy4iLCJwcm9wZXJ0aWVzIjp7Im1hdGNoRXhwcmVzc2lvbnMiOnsiZGVzY3JpcHRpb24iOiJtYXRjaEV4cHJlc3Npb25zIGlzIGEgbGlzdCBvZiBsYWJlbCBzZWxlY3RvciByZXF1aXJlbWVudHMuIFRoZSByZXF1aXJlbWVudHMgYXJlIEFORGVkLiIsIml0ZW1zIjp7ImRlc2NyaXB0aW9uIjoiQSBsYWJlbCBzZWxlY3RvciByZXF1aXJlbWVudCBpcyBhIHNlbGVjdG9yIHRoYXQgY29udGFpbnMgdmFsdWVzLCBhIGtleSwgYW5kIGFuIG9wZXJhdG9yIHRoYXQgcmVsYXRlcyB0aGUga2V5IGFuZCB2YWx1ZXMuIiwicHJvcGVydGllcyI6eyJrZXkiOnsiZGVzY3JpcHRpb24iOiJrZXkgaXMgdGhlIGxhYmVsIGtleSB0aGF0IHRoZSBzZWxlY3RvciBhcHBsaWVzIHRvLiIsInR5cGUiOiJzdHJpbmcifSwib3BlcmF0b3IiOnsiZGVzY3JpcHRpb24iOiJvcGVyYXRvciByZXByZXNlbnRzIGEga2V5J3MgcmVsYXRpb25zaGlwIHRvIGEgc2V0IG9mIHZhbHVlcy4gVmFsaWQgb3BlcmF0b3JzIGFyZSBJbiwgTm90SW4sIEV4aXN0cyBhbmQgRG9lc05vdEV4aXN0LiIsInR5cGUiOiJzdHJpbmcifSwidmFsdWVzIjp7ImRlc2NyaXB0aW9uIjoidmFsdWVzIGlzIGFuIGFycmF5IG9mIHN0cmluZyB2YWx1ZXMuIElmIHRoZSBvcGVyYXRvciBpcyBJbiBvciBOb3RJbiwgdGhlIHZhbHVlcyBhcnJheSBtdXN0IGJlIG5vbi1lbXB0eS4gSWYgdGhlIG9wZXJhdG9yIGlzIEV4aXN0cyBvciBEb2VzTm90RXhpc3QsIHRoZSB2YWx1ZXMgYXJyYXkgbXVzdCBiZSBlbXB0eS4gVGhpcyBhcnJheSBpcyByZXBsYWNlZCBkdXJpbmcgYSBzdHJhdGVnaWMgbWVyZ2UgcGF0Y2guIiwiaXRlbXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjoiYXJyYXkifX0sInJlcXVpcmVkIjpbImtleSIsIm9wZXJhdG9yIl0sInR5cGUiOiJvYmplY3QifSwidHlwZSI6ImFycmF5In0sIm1hdGNoTGFiZWxzIjp7ImFkZGl0aW9uYWxQcm9wZXJ0aWVzIjp7InR5cGUiOiJzdHJpbmcifSwiZGVzY3JpcHRpb24iOiJtYXRjaExhYmVscyBpcyBhIG1hcCBvZiB7a2V5LHZhbHVlfSBwYWlycy4gQSBzaW5nbGUge2tleSx2YWx1ZX0gaW4gdGhlIG1hdGNoTGFiZWxzIG1hcCBpcyBlcXVpdmFsZW50IHRvIGFuIGVsZW1lbnQgb2YgbWF0Y2hFeHByZXNzaW9ucywgd2hvc2Uga2V5IGZpZWxkIGlzIFwia2V5XCIsIHRoZSBvcGVyYXRvciBpcyBcIkluXCIsIGFuZCB0aGUgdmFsdWVzIGFycmF5IGNvbnRhaW5zIG9ubHkgXCJ2YWx1ZVwiLiBUaGUgcmVxdWlyZW1lbnRzIGFyZSBBTkRlZC4iLCJ0eXBlIjoib2JqZWN0In19LCJ0eXBlIjoib2JqZWN0IiwieC1rdWJlcm5ldGVzLW1hcC10eXBlIjoiYXRvbWljIn0sInN0b3JhZ2VDbGFzc05hbWUiOnsiZGVzY3JpcHRpb24iOiJzdG9yYWdlQ2xhc3NOYW1lIGlzIHRoZSBuYW1lIG9mIHRoZSBTdG9yYWdlQ2xhc3MgcmVxdWlyZWQgYnkgdGhlIGNsYWltLiBNb3JlIGluZm86IGh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL2NvbmNlcHRzL3N0b3JhZ2UvcGVyc2lzdGVudC12b2x1bWVzI2NsYXNzLTEiLCJ0eXBlIjoic3RyaW5nIn0sInZvbHVtZUF0dHJpYnV0ZXNDbGFzc05hbWUiOnsiZGVzY3JpcHRpb24iOiJ2b2x1bWVBdHRyaWJ1dGVzQ2xhc3NOYW1lIG1heSBiZSB1c2VkIHRvIHNldCB0aGUgVm9sdW1lQXR0cmlidXRlc0NsYXNzIHVzZWQgYnkgdGhpcyBjbGFpbS4gSWYgc3BlY2lmaWVkLCB0aGUgQ1NJIGRyaXZlciB3aWxsIGNyZWF0ZSBvciB1cGRhdGUgdGhlIHZvbHVtZSB3aXRoIHRoZSBhdHRyaWJ1dGVzIGRlZmluZWQgaW4gdGhlIGNvcnJlc3BvbmRpbmcgVm9sdW1lQXR0cmlidXRlc0NsYXNzLiBUaGlzIGhhcyBhIGRpZmZlcmVudCBwdXJwb3NlIHRoYW4gc3RvcmFnZUNsYXNzTmFtZSwgaXQgY2FuIGJlIGNoYW5nZWQgYWZ0ZXIgdGhlIGNsYWltIGlzIGNyZWF0ZWQuIEFuIGVtcHR5IHN0cmluZyB2YWx1ZSBtZWFucyB0aGF0IG5vIFZvbHVtZUF0dHJpYnV0ZXNDbGFzcyB3aWxsIGJlIGFwcGxpZWQgdG8gdGhlIGNsYWltIGJ1dCBpdCdzIG5vdCBhbGxvd2VkIHRvIHJlc2V0IHRoaXMgZmllbGQgdG8gZW1wdHkgc3RyaW5nIG9uY2UgaXQgaXMgc2V0LiBJZiB1bnNwZWNpZmllZCBhbmQgdGhlIFBlcnNpc3RlbnRWb2x1bWVDbGFpbSBpcyB1bmJvdW5kLCB0aGUgZGVmYXVsdCBWb2x1bWVBdHRyaWJ1dGVzQ2xhc3Mgd2lsbCBiZSBzZXQgYnkgdGhlIHBlcnNpc3RlbnR2b2x1bWUgY29udHJvbGxlciBpZiBpdCBleGlzdHMuIElmIHRoZSByZXNvdXJjZSByZWZlcnJlZCB0byBieSB2b2x1bWVBdHRyaWJ1dGVzQ2xhc3MgZG9lcyBub3QgZXhpc3QsIHRoaXMgUGVyc2lzdGVudFZvbHVtZUNsYWltIHdpbGwgYmUgc2V0IHRvIGEgUGVuZGluZyBzdGF0ZSwgYXMgcmVmbGVjdGVkIGJ5IHRoZSBtb2RpZnlWb2x1bWVTdGF0dXMgZmllbGQsIHVudGlsIHN1Y2ggYXMgYSByZXNvdXJjZSBleGlzdHMuIE1vcmUgaW5mbzogaHR0cHM6Ly9rdWJlcm5ldGVzLmlvL2RvY3MvY29uY2VwdHMvc3RvcmFnZS9wZXJzaXN0ZW50LXZvbHVtZXMjdm9sdW1lYXR0cmlidXRlc2NsYXNzIChBbHBoYSkgVXNpbmcgdGhpcyBmaWVsZCByZXF1aXJlcyB0aGUgVm9sdW1lQXR0cmlidXRlc0NsYXNzIGZlYXR1cmUgZ2F0ZSB0byBiZSBlbmFibGVkLiIsInR5cGUiOiJzdHJpbmcifSwidm9sdW1lTW9kZSI6eyJkZXNjcmlwdGlvbiI6InZvbHVtZU1vZGUgZGVmaW5lcyB3aGF0IHR5cGUgb2Ygdm9sdW1lIGlzIHJlcXVpcmVkIGJ5IHRoZSBjbGFpbS4gVmFsdWUgb2YgRmlsZXN5c3RlbSBpcyBpbXBsaWVkIHdoZW4gbm90IGluY2x1ZGVkIGluIGNsYWltIHNwZWMuIiwidHlwZSI6InN0cmluZyJ9LCJ2b2x1bWVOYW1lIjp7ImRlc2NyaXB0aW9uIjoidm9sdW1lTmFtZSBpcyB0aGUgYmluZGluZyByZWZlcmVuY2UgdG8gdGhlIFBlcnNpc3RlbnRWb2x1bWUgYmFja2luZyB0aGlzIGNsYWltLiIsInR5cGUiOiJzdHJpbmcifX0sInR5cGUiOiJvYmplY3QifSwic3RhdHVzIjp7ImRlc2NyaXB0aW9uIjoic3RhdHVzIHJlcHJlc2VudHMgdGhlIGN1cnJlbnQgaW5mb3JtYXRpb24vc3RhdHVzIG9mIGEgcGVyc2lzdGVudCB2b2x1bWUgY2xhaW0uIFJlYWQtb25seS4gTW9yZSBpbmZvOiBodHRwczovL2t1YmVybmV0ZXMuaW8vZG9jcy9jb25jZXB0cy9zdG9yYWdlL3BlcnNpc3RlbnQtdm9sdW1lcyNwZXJzaXN0ZW50dm9sdW1lY2xhaW1zIiwicHJvcGVydGllcyI6eyJhY2Nlc3NNb2RlcyI6eyJkZXNjcmlwdGlvbiI6ImFjY2Vzc01vZGVzIGNvbnRhaW5zIHRoZSBhY3R1YWwgYWNjZXNzIG1vZGVzIHRoZSB2b2x1bWUgYmFja2luZyB0aGUgUFZDIGhhcy4gTW9yZSBpbmZvOiBodHRwczovL2t1YmVybmV0ZXMuaW8vZG9jcy9jb25jZXB0cy9zdG9yYWdlL3BlcnNpc3RlbnQtdm9sdW1lcyNhY2Nlc3MtbW9kZXMtMSIsIml0ZW1zIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6ImFycmF5In0sImFsbG9jYXRlZFJlc291cmNlU3RhdHVzZXMiOnsiYWRkaXRpb25hbFByb3BlcnRpZXMiOnsiZGVzY3JpcHRpb24iOiJXaGVuIGEgY29udHJvbGxlciByZWNlaXZlcyBwZXJzaXN0ZW50dm9sdW1lIGNsYWltIHVwZGF0ZSB3aXRoIENsYWltUmVzb3VyY2VTdGF0dXMgZm9yIGEgcmVzb3VyY2UgdGhhdCBpdCBkb2VzIG5vdCByZWNvZ25pemVzLCB0aGVuIGl0IHNob3VsZCBpZ25vcmUgdGhhdCB1cGRhdGUgYW5kIGxldCBvdGhlciBjb250cm9sbGVycyBoYW5kbGUgaXQuIiwidHlwZSI6InN0cmluZyJ9LCJkZXNjcmlwdGlvbiI6ImFsbG9jYXRlZFJlc291cmNlU3RhdHVzZXMgc3RvcmVzIHN0YXR1cyBvZiByZXNvdXJjZSBiZWluZyByZXNpemVkIGZvciB0aGUgZ2l2ZW4gUFZDLiBLZXkgbmFtZXMgZm9sbG93IHN0YW5kYXJkIEt1YmVybmV0ZXMgbGFiZWwgc3ludGF4LiBWYWxpZCB2YWx1ZXMgYXJlIGVpdGhlcjogKiBVbi1wcmVmaXhlZCBrZXlzOiAtIHN0b3JhZ2UgLSB0aGUgY2FwYWNpdHkgb2YgdGhlIHZvbHVtZS4gKiBDdXN0b20gcmVzb3VyY2VzIG11c3QgdXNlIGltcGxlbWVudGF0aW9uLWRlZmluZWQgcHJlZml4ZWQgbmFtZXMgc3VjaCBhcyBcImV4YW1wbGUuY29tL215LWN1c3RvbS1yZXNvdXJjZVwiIEFwYXJ0IGZyb20gYWJvdmUgdmFsdWVzIC0ga2V5cyB0aGF0IGFyZSB1bnByZWZpeGVkIG9yIGhhdmUga3ViZXJuZXRlcy5pbyBwcmVmaXggYXJlIGNvbnNpZGVyZWQgcmVzZXJ2ZWQgYW5kIGhlbmNlIG1heSBub3QgYmUgdXNlZC4gXG4gQ2xhaW1SZXNvdXJjZVN0YXR1cyBjYW4gYmUgaW4gYW55IG9mIGZvbGxvd2luZyBzdGF0ZXM6IC0gQ29udHJvbGxlclJlc2l6ZUluUHJvZ3Jlc3M6IFN0YXRlIHNldCB3aGVuIHJlc2l6ZSBjb250cm9sbGVyIHN0YXJ0cyByZXNpemluZyB0aGUgdm9sdW1lIGluIGNvbnRyb2wtcGxhbmUuIC0gQ29udHJvbGxlclJlc2l6ZUZhaWxlZDogU3RhdGUgc2V0IHdoZW4gcmVzaXplIGhhcyBmYWlsZWQgaW4gcmVzaXplIGNvbnRyb2xsZXIgd2l0aCBhIHRlcm1pbmFsIGVycm9yLiAtIE5vZGVSZXNpemVQZW5kaW5nOiBTdGF0ZSBzZXQgd2hlbiByZXNpemUgY29udHJvbGxlciBoYXMgZmluaXNoZWQgcmVzaXppbmcgdGhlIHZvbHVtZSBidXQgZnVydGhlciByZXNpemluZyBvZiB2b2x1bWUgaXMgbmVlZGVkIG9uIHRoZSBub2RlLiAtIE5vZGVSZXNpemVJblByb2dyZXNzOiBTdGF0ZSBzZXQgd2hlbiBrdWJlbGV0IHN0YXJ0cyByZXNpemluZyB0aGUgdm9sdW1lLiAtIE5vZGVSZXNpemVGYWlsZWQ6IFN0YXRlIHNldCB3aGVuIHJlc2l6aW5nIGhhcyBmYWlsZWQgaW4ga3ViZWxldCB3aXRoIGEgdGVybWluYWwgZXJyb3IuIFRyYW5zaWVudCBlcnJvcnMgZG9uJ3Qgc2V0IE5vZGVSZXNpemVGYWlsZWQuIEZvciBleGFtcGxlOiBpZiBleHBhbmRpbmcgYSBQVkMgZm9yIG1vcmUgY2FwYWNpdHkgLSB0aGlzIGZpZWxkIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyBzdGF0ZXM6IC0gcHZjLnN0YXR1cy5hbGxvY2F0ZWRSZXNvdXJjZVN0YXR1c1snc3RvcmFnZSddID0gXCJDb250cm9sbGVyUmVzaXplSW5Qcm9ncmVzc1wiIC0gcHZjLnN0YXR1cy5hbGxvY2F0ZWRSZXNvdXJjZVN0YXR1c1snc3RvcmFnZSddID0gXCJDb250cm9sbGVyUmVzaXplRmFpbGVkXCIgLSBwdmMuc3RhdHVzLmFsbG9jYXRlZFJlc291cmNlU3RhdHVzWydzdG9yYWdlJ10gPSBcIk5vZGVSZXNpemVQZW5kaW5nXCIgLSBwdmMuc3RhdHVzLmFsbG9jYXRlZFJlc291cmNlU3RhdHVzWydzdG9yYWdlJ10gPSBcIk5vZGVSZXNpemVJblByb2dyZXNzXCIgLSBwdmMuc3RhdHVzLmFsbG9jYXRlZFJlc291cmNlU3RhdHVzWydzdG9yYWdlJ10gPSBcIk5vZGVSZXNpemVGYWlsZWRcIiBXaGVuIHRoaXMgZmllbGQgaXMgbm90IHNldCwgaXQgbWVhbnMgdGhhdCBubyByZXNpemUgb3BlcmF0aW9uIGlzIGluIHByb2dyZXNzIGZvciB0aGUgZ2l2ZW4gUFZDLiBcbiBBIGNvbnRyb2xsZXIgdGhhdCByZWNlaXZlcyBQVkMgdXBkYXRlIHdpdGggcHJldmlvdXNseSB1bmtub3duIHJlc291cmNlTmFtZSBvciBDbGFpbVJlc291cmNlU3RhdHVzIHNob3VsZCBpZ25vcmUgdGhlIHVwZGF0ZSBmb3IgdGhlIHB1cnBvc2UgaXQgd2FzIGRlc2lnbmVkLiBGb3IgZXhhbXBsZSAtIGEgY29udHJvbGxlciB0aGF0IG9ubHkgaXMgcmVzcG9uc2libGUgZm9yIHJlc2l6aW5nIGNhcGFjaXR5IG9mIHRoZSB2b2x1bWUsIHNob3VsZCBpZ25vcmUgUFZDIHVwZGF0ZXMgdGhhdCBjaGFuZ2Ugb3RoZXIgdmFsaWQgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCBQVkMuIFxuIFRoaXMgaXMgYW4gYWxwaGEgZmllbGQgYW5kIHJlcXVpcmVzIGVuYWJsaW5nIFJlY292ZXJWb2x1bWVFeHBhbnNpb25GYWlsdXJlIGZlYXR1cmUuIiwidHlwZSI6Im9iamVjdCIsIngta3ViZXJuZXRlcy1tYXAtdHlwZSI6ImdyYW51bGFyIn0sImFsbG9jYXRlZFJlc291cmNlcyI6eyJhZGRpdGlvbmFsUHJvcGVydGllcyI6eyJhbnlPZiI6W3sidHlwZSI6ImludGVnZXIifSx7InR5cGUiOiJzdHJpbmcifV0sInBhdHRlcm4iOiJeKFxcK3wtKT8oKFswLTldKyhcXC5bMC05XSopPyl8KFxcLlswLTldKykpKChbS01HVFBFXWkpfFtudW1rTUdUUEVdfChbZUVdKFxcK3wtKT8oKFswLTldKyhcXC5bMC05XSopPyl8KFxcLlswLTldKykpKSk/JCIsIngta3ViZXJuZXRlcy1pbnQtb3Itc3RyaW5nIjp0cnVlfSwiZGVzY3JpcHRpb24iOiJhbGxvY2F0ZWRSZXNvdXJjZXMgdHJhY2tzIHRoZSByZXNvdXJjZXMgYWxsb2NhdGVkIHRvIGEgUFZDIGluY2x1ZGluZyBpdHMgY2FwYWNpdHkuIEtleSBuYW1lcyBmb2xsb3cgc3RhbmRhcmQgS3ViZXJuZXRlcyBsYWJlbCBzeW50YXguIFZhbGlkIHZhbHVlcyBhcmUgZWl0aGVyOiAqIFVuLXByZWZpeGVkIGtleXM6IC0gc3RvcmFnZSAtIHRoZSBjYXBhY2l0eSBvZiB0aGUgdm9sdW1lLiAqIEN1c3RvbSByZXNvdXJjZXMgbXVzdCB1c2UgaW1wbGVtZW50YXRpb24tZGVmaW5lZCBwcmVmaXhlZCBuYW1lcyBzdWNoIGFzIFwiZXhhbXBsZS5jb20vbXktY3VzdG9tLXJlc291cmNlXCIgQXBhcnQgZnJvbSBhYm92ZSB2YWx1ZXMgLSBrZXlzIHRoYXQgYXJlIHVucHJlZml4ZWQgb3IgaGF2ZSBrdWJlcm5ldGVzLmlvIHByZWZpeCBhcmUgY29uc2lkZXJlZCByZXNlcnZlZCBhbmQgaGVuY2UgbWF5IG5vdCBiZSB1c2VkLiBcbiBDYXBhY2l0eSByZXBvcnRlZCBoZXJlIG1heSBiZSBsYXJnZXIgdGhhbiB0aGUgYWN0dWFsIGNhcGFjaXR5IHdoZW4gYSB2b2x1bWUgZXhwYW5zaW9uIG9wZXJhdGlvbiBpcyByZXF1ZXN0ZWQuIEZvciBzdG9yYWdlIHF1b3RhLCB0aGUgbGFyZ2VyIHZhbHVlIGZyb20gYWxsb2NhdGVkUmVzb3VyY2VzIGFuZCBQVkMuc3BlYy5yZXNvdXJjZXMgaXMgdXNlZC4gSWYgYWxsb2NhdGVkUmVzb3VyY2VzIGlzIG5vdCBzZXQsIFBWQy5zcGVjLnJlc291cmNlcyBhbG9uZSBpcyB1c2VkIGZvciBxdW90YSBjYWxjdWxhdGlvbi4gSWYgYSB2b2x1bWUgZXhwYW5zaW9uIGNhcGFjaXR5IHJlcXVlc3QgaXMgbG93ZXJlZCwgYWxsb2NhdGVkUmVzb3VyY2VzIGlzIG9ubHkgbG93ZXJlZCBpZiB0aGVyZSBhcmUgbm8gZXhwYW5zaW9uIG9wZXJhdGlvbnMgaW4gcHJvZ3Jlc3MgYW5kIGlmIHRoZSBhY3R1YWwgdm9sdW1lIGNhcGFjaXR5IGlzIGVxdWFsIG9yIGxvd2VyIHRoYW4gdGhlIHJlcXVlc3RlZCBjYXBhY2l0eS4gXG4gQSBjb250cm9sbGVyIHRoYXQgcmVjZWl2ZXMgUFZDIHVwZGF0ZSB3aXRoIHByZXZpb3VzbHkgdW5rbm93biByZXNvdXJjZU5hbWUgc2hvdWxkIGlnbm9yZSB0aGUgdXBkYXRlIGZvciB0aGUgcHVycG9zZSBpdCB3YXMgZGVzaWduZWQuIEZvciBleGFtcGxlIC0gYSBjb250cm9sbGVyIHRoYXQgb25seSBpcyByZXNwb25zaWJsZSBmb3IgcmVzaXppbmcgY2FwYWNpdHkgb2YgdGhlIHZvbHVtZSwgc2hvdWxkIGlnbm9yZSBQVkMgdXBkYXRlcyB0aGF0IGNoYW5nZSBvdGhlciB2YWxpZCByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIFBWQy4gXG4gVGhpcyBpcyBhbiBhbHBoYSBmaWVsZCBhbmQgcmVxdWlyZXMgZW5hYmxpbmcgUmVjb3ZlclZvbHVtZUV4cGFuc2lvbkZhaWx1cmUgZmVhdHVyZS4iLCJ0eXBlIjoib2JqZWN0In0sImNhcGFjaXR5Ijp7ImFkZGl0aW9uYWxQcm9wZXJ0aWVzIjp7ImFueU9mIjpbeyJ0eXBlIjoiaW50ZWdlciJ9LHsidHlwZSI6InN0cmluZyJ9XSwicGF0dGVybiI6Il4oXFwrfC0pPygoWzAtOV0rKFxcLlswLTldKik/KXwoXFwuWzAtOV0rKSkoKFtLTUdUUEVdaSl8W251bWtNR1RQRV18KFtlRV0oXFwrfC0pPygoWzAtOV0rKFxcLlswLTldKik/KXwoXFwuWzAtOV0rKSkpKT8kIiwieC1rdWJlcm5ldGVzLWludC1vci1zdHJpbmciOnRydWV9LCJkZXNjcmlwdGlvbiI6ImNhcGFjaXR5IHJlcHJlc2VudHMgdGhlIGFjdHVhbCByZXNvdXJjZXMgb2YgdGhlIHVuZGVybHlpbmcgdm9sdW1lLiIsInR5cGUiOiJvYmplY3QifSwiY29uZGl0aW9ucyI6eyJkZXNjcmlwdGlvbiI6ImNvbmRpdGlvbnMgaXMgdGhlIGN1cnJlbnQgQ29uZGl0aW9uIG9mIHBlcnNpc3RlbnQgdm9sdW1lIGNsYWltLiBJZiB1bmRlcmx5aW5nIHBlcnNpc3RlbnQgdm9sdW1lIGlzIGJlaW5nIHJlc2l6ZWQgdGhlbiB0aGUgQ29uZGl0aW9uIHdpbGwgYmUgc2V0IHRvICdSZXNpemVTdGFydGVkJy4iLCJpdGVtcyI6eyJkZXNjcmlwdGlvbiI6IlBlcnNpc3RlbnRWb2x1bWVDbGFpbUNvbmRpdGlvbiBjb250YWlucyBkZXRhaWxzIGFib3V0IHN0YXRlIG9mIHB2YyIsInByb3BlcnRpZXMiOnsibGFzdFByb2JlVGltZSI6eyJkZXNjcmlwdGlvbiI6Imxhc3RQcm9iZVRpbWUgaXMgdGhlIHRpbWUgd2UgcHJvYmVkIHRoZSBjb25kaXRpb24uIiwiZm9ybWF0IjoiZGF0ZS10aW1lIiwidHlwZSI6InN0cmluZyJ9LCJsYXN0VHJhbnNpdGlvblRpbWUiOnsiZGVzY3JpcHRpb24iOiJsYXN0VHJhbnNpdGlvblRpbWUgaXMgdGhlIHRpbWUgdGhlIGNvbmRpdGlvbiB0cmFuc2l0aW9uZWQgZnJvbSBvbmUgc3RhdHVzIHRvIGFub3RoZXIuIiwiZm9ybWF0IjoiZGF0ZS10aW1lIiwidHlwZSI6InN0cmluZyJ9LCJtZXNzYWdlIjp7ImRlc2NyaXB0aW9uIjoibWVzc2FnZSBpcyB0aGUgaHVtYW4tcmVhZGFibGUgbWVzc2FnZSBpbmRpY2F0aW5nIGRldGFpbHMgYWJvdXQgbGFzdCB0cmFuc2l0aW9uLiIsInR5cGUiOiJzdHJpbmcifSwicmVhc29uIjp7ImRlc2NyaXB0aW9uIjoicmVhc29uIGlzIGEgdW5pcXVlLCB0aGlzIHNob3VsZCBiZSBhIHNob3J0LCBtYWNoaW5lIHVuZGVyc3RhbmRhYmxlIHN0cmluZyB0aGF0IGdpdmVzIHRoZSByZWFzb24gZm9yIGNvbmRpdGlvbidzIGxhc3QgdHJhbnNpdGlvbi4gSWYgaXQgcmVwb3J0cyBcIlJlc2l6ZVN0YXJ0ZWRcIiB0aGF0IG1lYW5zIHRoZSB1bmRlcmx5aW5nIHBlcnNpc3RlbnQgdm9sdW1lIGlzIGJlaW5nIHJlc2l6ZWQuIiwidHlwZSI6InN0cmluZyJ9LCJzdGF0dXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjp7ImRlc2NyaXB0aW9uIjoiUGVyc2lzdGVudFZvbHVtZUNsYWltQ29uZGl0aW9uVHlwZSBpcyBhIHZhbGlkIHZhbHVlIG9mIFBlcnNpc3RlbnRWb2x1bWVDbGFpbUNvbmRpdGlvbi5UeXBlIiwidHlwZSI6InN0cmluZyJ9fSwicmVxdWlyZWQiOlsic3RhdHVzIiwidHlwZSJdLCJ0eXBlIjoib2JqZWN0In0sInR5cGUiOiJhcnJheSJ9LCJjdXJyZW50Vm9sdW1lQXR0cmlidXRlc0NsYXNzTmFtZSI6eyJkZXNjcmlwdGlvbiI6ImN1cnJlbnRWb2x1bWVBdHRyaWJ1dGVzQ2xhc3NOYW1lIGlzIHRoZSBjdXJyZW50IG5hbWUgb2YgdGhlIFZvbHVtZUF0dHJpYnV0ZXNDbGFzcyB0aGUgUFZDIGlzIHVzaW5nLiBXaGVuIHVuc2V0LCB0aGVyZSBpcyBubyBWb2x1bWVBdHRyaWJ1dGVDbGFzcyBhcHBsaWVkIHRvIHRoaXMgUGVyc2lzdGVudFZvbHVtZUNsYWltIFRoaXMgaXMgYW4gYWxwaGEgZmllbGQgYW5kIHJlcXVpcmVzIGVuYWJsaW5nIFZvbHVtZUF0dHJpYnV0ZXNDbGFzcyBmZWF0dXJlLiIsInR5cGUiOiJzdHJpbmcifSwibW9kaWZ5Vm9sdW1lU3RhdHVzIjp7ImRlc2NyaXB0aW9uIjoiTW9kaWZ5Vm9sdW1lU3RhdHVzIHJlcHJlc2VudHMgdGhlIHN0YXR1cyBvYmplY3Qgb2YgQ29udHJvbGxlck1vZGlmeVZvbHVtZSBvcGVyYXRpb24uIFdoZW4gdGhpcyBpcyB1bnNldCwgdGhlcmUgaXMgbm8gTW9kaWZ5Vm9sdW1lIG9wZXJhdGlvbiBiZWluZyBhdHRlbXB0ZWQuIFRoaXMgaXMgYW4gYWxwaGEgZmllbGQgYW5kIHJlcXVpcmVzIGVuYWJsaW5nIFZvbHVtZUF0dHJpYnV0ZXNDbGFzcyBmZWF0dXJlLiIsInByb3BlcnRpZXMiOnsic3RhdHVzIjp7ImRlc2NyaXB0aW9uIjoic3RhdHVzIGlzIHRoZSBzdGF0dXMgb2YgdGhlIENvbnRyb2xsZXJNb2RpZnlWb2x1bWUgb3BlcmF0aW9uLiBJdCBjYW4gYmUgaW4gYW55IG9mIGZvbGxvd2luZyBzdGF0ZXM6IC0gUGVuZGluZyBQZW5kaW5nIGluZGljYXRlcyB0aGF0IHRoZSBQZXJzaXN0ZW50Vm9sdW1lQ2xhaW0gY2Fubm90IGJlIG1vZGlmaWVkIGR1ZSB0byB1bm1ldCByZXF1aXJlbWVudHMsIHN1Y2ggYXMgdGhlIHNwZWNpZmllZCBWb2x1bWVBdHRyaWJ1dGVzQ2xhc3Mgbm90IGV4aXN0aW5nLiAtIEluUHJvZ3Jlc3MgSW5Qcm9ncmVzcyBpbmRpY2F0ZXMgdGhhdCB0aGUgdm9sdW1lIGlzIGJlaW5nIG1vZGlmaWVkLiAtIEluZmVhc2libGUgSW5mZWFzaWJsZSBpbmRpY2F0ZXMgdGhhdCB0aGUgcmVxdWVzdCBoYXMgYmVlbiByZWplY3RlZCBhcyBpbnZhbGlkIGJ5IHRoZSBDU0kgZHJpdmVyLiBUbyByZXNvbHZlIHRoZSBlcnJvciwgYSB2YWxpZCBWb2x1bWVBdHRyaWJ1dGVzQ2xhc3MgbmVlZHMgdG8gYmUgc3BlY2lmaWVkLiBOb3RlOiBOZXcgc3RhdHVzZXMgY2FuIGJlIGFkZGVkIGluIHRoZSBmdXR1cmUuIENvbnN1bWVycyBzaG91bGQgY2hlY2sgZm9yIHVua25vd24gc3RhdHVzZXMgYW5kIGZhaWwgYXBwcm9wcmlhdGVseS4iLCJ0eXBlIjoic3RyaW5nIn0sInRhcmdldFZvbHVtZUF0dHJpYnV0ZXNDbGFzc05hbWUiOnsiZGVzY3JpcHRpb24iOiJ0YXJnZXRWb2x1bWVBdHRyaWJ1dGVzQ2xhc3NOYW1lIGlzIHRoZSBuYW1lIG9mIHRoZSBWb2x1bWVBdHRyaWJ1dGVzQ2xhc3MgdGhlIFBWQyBjdXJyZW50bHkgYmVpbmcgcmVjb25jaWxlZCIsInR5cGUiOiJzdHJpbmcifX0sInJlcXVpcmVkIjpbInN0YXR1cyJdLCJ0eXBlIjoib2JqZWN0In0sInBoYXNlIjp7ImRlc2NyaXB0aW9uIjoicGhhc2UgcmVwcmVzZW50cyB0aGUgY3VycmVudCBwaGFzZSBvZiBQZXJzaXN0ZW50Vm9sdW1lQ2xhaW0uIiwidHlwZSI6InN0cmluZyJ9fSwidHlwZSI6Im9iamVjdCJ9fSwidHlwZSI6Im9iamVjdCJ9fSwicmVxdWlyZWQiOlsiY291bnQiLCJkYXRhUFZDVGVtcGxhdGUiLCJuYW1lIl0sInR5cGUiOiJvYmplY3QifSwidHlwZSI6ImFycmF5In0sInZlcnNpb24iOnsiZGVzY3JpcHRpb24iOiJWZXJzaW9uIHNwZWNpZmllcyB0aGUgdmVyc2lvbiBvZiBTdG9yYWdlQ2x1c3RlciIsInR5cGUiOiJzdHJpbmcifX0sInR5cGUiOiJvYmplY3QifSwic3RhdHVzIjp7ImRlc2NyaXB0aW9uIjoiU3RvcmFnZUNsdXN0ZXJTdGF0dXMgZGVmaW5lcyB0aGUgb2JzZXJ2ZWQgc3RhdGUgb2YgU3RvcmFnZUNsdXN0ZXIiLCJwcm9wZXJ0aWVzIjp7ImNvbmRpdGlvbnMiOnsiZGVzY3JpcHRpb24iOiJDb25kaXRpb25zIGRlc2NyaWJlcyB0aGUgc3RhdGUgb2YgdGhlIFN0b3JhZ2VDbHVzdGVyIHJlc291cmNlLiIsIml0ZW1zIjp7ImRlc2NyaXB0aW9uIjoiQ29uZGl0aW9uIHJlcHJlc2VudHMgdGhlIHN0YXRlIG9mIHRoZSBvcGVyYXRvcidzIHJlY29uY2lsaWF0aW9uIGZ1bmN0aW9uYWxpdHkuIiwicHJvcGVydGllcyI6eyJsYXN0SGVhcnRiZWF0VGltZSI6eyJmb3JtYXQiOiJkYXRlLXRpbWUiLCJ0eXBlIjoic3RyaW5nIn0sImxhc3RUcmFuc2l0aW9uVGltZSI6eyJmb3JtYXQiOiJkYXRlLXRpbWUiLCJ0eXBlIjoic3RyaW5nIn0sIm1lc3NhZ2UiOnsidHlwZSI6InN0cmluZyJ9LCJyZWFzb24iOnsidHlwZSI6InN0cmluZyJ9LCJzdGF0dXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjp7ImRlc2NyaXB0aW9uIjoiQ29uZGl0aW9uVHlwZSBpcyB0aGUgc3RhdGUgb2YgdGhlIG9wZXJhdG9yJ3MgcmVjb25jaWxpYXRpb24gZnVuY3Rpb25hbGl0eS4iLCJ0eXBlIjoic3RyaW5nIn19LCJyZXF1aXJlZCI6WyJzdGF0dXMiLCJ0eXBlIl0sInR5cGUiOiJvYmplY3QifSwidHlwZSI6ImFycmF5In0sImN1cnJlbnRNb25Db3VudCI6eyJkZXNjcmlwdGlvbiI6IkN1cnJlbnRNb25Db3VudCBob2xkcyB0aGUgdmFsdWUgb2YgY2VwaCBtb25zIGNvbmZpZ3VyZWQgaW4gY2VwaCBjbHVzdGVyLiIsInR5cGUiOiJpbnRlZ2VyIn0sImV4dGVybmFsU2VjcmV0SGFzaCI6eyJkZXNjcmlwdGlvbiI6IkV4dGVybmFsU2VjcmV0SGFzaCBob2xkcyB0aGUgY2hlY2tzdW0gdmFsdWUgb2YgZXh0ZXJuYWwgc2VjcmV0IGRhdGEuIiwidHlwZSI6InN0cmluZyJ9LCJmYWlsdXJlRG9tYWluIjp7ImRlc2NyaXB0aW9uIjoiRmFpbHVyZURvbWFpbiBpcyB0aGUgYmFzZSBDUlVTSCBlbGVtZW50IENlcGggd2lsbCB1c2UgdG8gZGlzdHJpYnV0ZSBpdHMgZGF0YSByZXBsaWNhcyBmb3IgdGhlIGRlZmF1bHQgQ2VwaEJsb2NrUG9vbCIsInR5cGUiOiJzdHJpbmcifSwiZmFpbHVyZURvbWFpbktleSI6eyJkZXNjcmlwdGlvbiI6IkZhaWx1cmVEb21haW5LZXkgaXMgdGhlIHNwZWNpZmljIGtleSB1c2VkIHRvIGZpbmQgdGhlIGxvY2F0aW9ucyBhdmFpbGFibGUgdW5kZXIgYSBmYWlsdXJlIGRvbWFpbi4gRm9yIGV4YW1wbGUgdG9wb2xvZ3kua3ViZXJuZXRlcy5pby96b25lIiwidHlwZSI6InN0cmluZyJ9LCJmYWlsdXJlRG9tYWluVmFsdWVzIjp7ImRlc2NyaXB0aW9uIjoiRmFpbHVyZURvbWFpblZhbHVlcyBpcyB0aGUgbGlzdCBvZiBsb2NhdGlvbnMgYXZhaWxhYmxlIGZvciBhIGZhaWx1cmUgZG9tYWluIHVuZGVyIHRoZSBmYWlsdXJlIGRvbWFpbiBrZXkuIiwiaXRlbXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjoiYXJyYXkifSwiaW1hZ2VzIjp7ImRlc2NyaXB0aW9uIjoiSW1hZ2VzIGhvbGRzIHRoZSBpbWFnZSByZWNvbmNpbGUgc3RhdHVzIGZvciBhbGwgaW1hZ2VzIHJlY29uY2lsZWQgYnkgdGhlIG9wZXJhdG9yIiwicHJvcGVydGllcyI6eyJjZXBoIjp7ImRlc2NyaXB0aW9uIjoiQ29tcG9uZW50SW1hZ2VTdGF0dXMgaG9sZHMgaW1hZ2Ugc3RhdHVzIGluZm9ybWF0aW9uIGZvciBhIHNwZWNpZmljIGNvbXBvbmVudCBpbWFnZSIsInByb3BlcnRpZXMiOnsiYWN0dWFsSW1hZ2UiOnsidHlwZSI6InN0cmluZyJ9LCJkZXNpcmVkSW1hZ2UiOnsidHlwZSI6InN0cmluZyJ9fSwidHlwZSI6Im9iamVjdCJ9LCJub29iYWFDb3JlIjp7ImRlc2NyaXB0aW9uIjoiQ29tcG9uZW50SW1hZ2VTdGF0dXMgaG9sZHMgaW1hZ2Ugc3RhdHVzIGluZm9ybWF0aW9uIGZvciBhIHNwZWNpZmljIGNvbXBvbmVudCBpbWFnZSIsInByb3BlcnRpZXMiOnsiYWN0dWFsSW1hZ2UiOnsidHlwZSI6InN0cmluZyJ9LCJkZXNpcmVkSW1hZ2UiOnsidHlwZSI6InN0cmluZyJ9fSwidHlwZSI6Im9iamVjdCJ9LCJub29iYWFEQiI6eyJkZXNjcmlwdGlvbiI6IkNvbXBvbmVudEltYWdlU3RhdHVzIGhvbGRzIGltYWdlIHN0YXR1cyBpbmZvcm1hdGlvbiBmb3IgYSBzcGVjaWZpYyBjb21wb25lbnQgaW1hZ2UiLCJwcm9wZXJ0aWVzIjp7ImFjdHVhbEltYWdlIjp7InR5cGUiOiJzdHJpbmcifSwiZGVzaXJlZEltYWdlIjp7InR5cGUiOiJzdHJpbmcifX0sInR5cGUiOiJvYmplY3QifX0sInR5cGUiOiJvYmplY3QifSwia21zU2VydmVyQ29ubmVjdGlvbiI6eyJkZXNjcmlwdGlvbiI6IktNU1NlcnZlckNvbm5lY3Rpb24gaG9sZHMgdGhlIGNvbm5lY3Rpb24gc3RhdGUgdG8gdGhlIEtNUyBzZXJ2ZXIuIiwicHJvcGVydGllcyI6eyJrbXNTZXJ2ZXJBZGRyZXNzIjp7InR5cGUiOiJzdHJpbmcifSwia21zU2VydmVyQ29ubmVjdGlvbkVycm9yIjp7InR5cGUiOiJzdHJpbmcifX0sInR5cGUiOiJvYmplY3QifSwibGFzdEFwcGxpZWRSZXNvdXJjZVByb2ZpbGUiOnsiZGVzY3JpcHRpb24iOiJMYXN0QXBwbGllZFJlc291cmNlUHJvZmlsZSBpcyB0aGUgcmVzb3VyY2UgcHJvZmlsZSB0aGF0IHdhcyBsYXN0IGFwcGxpZWQgc3VjY2Vzc2Z1bGx5IFx1MDAyNiBpcyBjdXJyZW50bHkgaW4gdXNlLiIsInR5cGUiOiJzdHJpbmcifSwibm9kZVRvcG9sb2dpZXMiOnsiZGVzY3JpcHRpb24iOiJOb2RlVG9wb2xvZ2llcyBpcyBhIGxpc3Qgb2YgdG9wb2xvZ3kgbGFiZWxzIG9uIGFsbCBub2RlcyBtYXRjaGluZyB0aGUgU3RvcmFnZUNsdXN0ZXIncyBwbGFjZW1lbnQgc2VsZWN0b3IuIiwicHJvcGVydGllcyI6eyJhcmJpdGVyTG9jYXRpb24iOnsiZGVzY3JpcHRpb24iOiJBcmJpdGVyTG9jYXRpb24gaXMgdGhlIGNob3NlbiBsb2NhdGlvbiBpbiB0aGUgZmFpbHVyZSBkb21haW4gZm9yIHBsYWNpbmcgdGhlIGFyYml0ZXIgcmVzb3VyY2VzLiBXaGVuIHRoZSBmYWlsdXJlIGRvbWFpbiBpcyBub3QgcHJvdmlkZWQgYXMgYW4gaW5wdXQsIG9jcy1vcGVyYXRvciBkZXRlcm1pbmVzIHRoZSBmYWlsdXJlIGRvbWFpbi4iLCJ0eXBlIjoic3RyaW5nIn0sImxhYmVscyI6eyJhZGRpdGlvbmFsUHJvcGVydGllcyI6eyJkZXNjcmlwdGlvbiI6IlRvcG9sb2d5TGFiZWxWYWx1ZXMgaXMgYSBsaXN0IG9mIHZhbHVlcyBmb3IgYSB0b3BvbG9neSBsYWJlbCIsIml0ZW1zIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6ImFycmF5In0sImRlc2NyaXB0aW9uIjoiTGFiZWxzIGlzIGEgbWFwIG9mIHRvcG9sb2d5IGxhYmVsIGtleXMgKGUuZy4gXCJmYWlsdXJlLWRvbWFpbi5rdWJlcm5ldGVzLmlvXCIpIHRvIGEgc2V0IG9mIHZhbHVlcyBmb3IgdGhvc2Uga2V5cy4iLCJudWxsYWJsZSI6dHJ1ZSwidHlwZSI6Im9iamVjdCJ9fSwidHlwZSI6Im9iamVjdCJ9LCJwaGFzZSI6eyJkZXNjcmlwdGlvbiI6IlBoYXNlIGRlc2NyaWJlcyB0aGUgUGhhc2Ugb2YgU3RvcmFnZUNsdXN0ZXIgVGhpcyBpcyB1c2VkIGJ5IE9MTSBVSSB0byBwcm92aWRlIHN0YXR1cyBpbmZvcm1hdGlvbiB0byB0aGUgdXNlciIsInR5cGUiOiJzdHJpbmcifSwicmVsYXRlZE9iamVjdHMiOnsiZGVzY3JpcHRpb24iOiJSZWxhdGVkT2JqZWN0cyBpcyBhIGxpc3Qgb2Ygb2JqZWN0cyBjcmVhdGVkIGFuZCBtYWludGFpbmVkIGJ5IHRoaXMgb3BlcmF0b3IuIE9iamVjdCByZWZlcmVuY2VzIHdpbGwgYmUgYWRkZWQgdG8gdGhpcyBsaXN0IGFmdGVyIHRoZXkgaGF2ZSBiZWVuIGNyZWF0ZWQgQU5EIGZvdW5kIGluIHRoZSBjbHVzdGVyLiIsIml0ZW1zIjp7ImRlc2NyaXB0aW9uIjoiT2JqZWN0UmVmZXJlbmNlIGNvbnRhaW5zIGVub3VnaCBpbmZvcm1hdGlvbiB0byBsZXQgeW91IGluc3BlY3Qgb3IgbW9kaWZ5IHRoZSByZWZlcnJlZCBvYmplY3QuIE5ldyB1c2VzIG9mIHRoaXMgdHlwZSBhcmUgZGlzY291cmFnZWQgYmVjYXVzZSBvZiBkaWZmaWN1bHR5IGRlc2NyaWJpbmcgaXRzIHVzYWdlIHdoZW4gZW1iZWRkZWQgaW4gQVBJcy4gMS4gSWdub3JlZCBmaWVsZHMuICBJdCBpbmNsdWRlcyBtYW55IGZpZWxkcyB3aGljaCBhcmUgbm90IGdlbmVyYWxseSBob25vcmVkLiAgRm9yIGluc3RhbmNlLCBSZXNvdXJjZVZlcnNpb24gYW5kIEZpZWxkUGF0aCBhcmUgYm90aCB2ZXJ5IHJhcmVseSB2YWxpZCBpbiBhY3R1YWwgdXNhZ2UuIDIuIEludmFsaWQgdXNhZ2UgaGVscC4gIEl0IGlzIGltcG9zc2libGUgdG8gYWRkIHNwZWNpZmljIGhlbHAgZm9yIGluZGl2aWR1YWwgdXNhZ2UuICBJbiBtb3N0IGVtYmVkZGVkIHVzYWdlcywgdGhlcmUgYXJlIHBhcnRpY3VsYXIgcmVzdHJpY3Rpb25zIGxpa2UsIFwibXVzdCByZWZlciBvbmx5IHRvIHR5cGVzIEEgYW5kIEJcIiBvciBcIlVJRCBub3QgaG9ub3JlZFwiIG9yIFwibmFtZSBtdXN0IGJlIHJlc3RyaWN0ZWRcIi4gVGhvc2UgY2Fubm90IGJlIHdlbGwgZGVzY3JpYmVkIHdoZW4gZW1iZWRkZWQuIDMuIEluY29uc2lzdGVudCB2YWxpZGF0aW9uLiAgQmVjYXVzZSB0aGUgdXNhZ2VzIGFyZSBkaWZmZXJlbnQsIHRoZSB2YWxpZGF0aW9uIHJ1bGVzIGFyZSBkaWZmZXJlbnQgYnkgdXNhZ2UsIHdoaWNoIG1ha2VzIGl0IGhhcmQgZm9yIHVzZXJzIHRvIHByZWRpY3Qgd2hhdCB3aWxsIGhhcHBlbi4gNC4gVGhlIGZpZWxkcyBhcmUgYm90aCBpbXByZWNpc2UgYW5kIG92ZXJseSBwcmVjaXNlLiAgS2luZCBpcyBub3QgYSBwcmVjaXNlIG1hcHBpbmcgdG8gYSBVUkwuIFRoaXMgY2FuIHByb2R1Y2UgYW1iaWd1aXR5IGR1cmluZyBpbnRlcnByZXRhdGlvbiBhbmQgcmVxdWlyZSBhIFJFU1QgbWFwcGluZy4gIEluIG1vc3QgY2FzZXMsIHRoZSBkZXBlbmRlbmN5IGlzIG9uIHRoZSBncm91cCxyZXNvdXJjZSB0dXBsZSBhbmQgdGhlIHZlcnNpb24gb2YgdGhlIGFjdHVhbCBzdHJ1Y3QgaXMgaXJyZWxldmFudC4gNS4gV2UgY2Fubm90IGVhc2lseSBjaGFuZ2UgaXQuICBCZWNhdXNlIHRoaXMgdHlwZSBpcyBlbWJlZGRlZCBpbiBtYW55IGxvY2F0aW9ucywgdXBkYXRlcyB0byB0aGlzIHR5cGUgd2lsbCBhZmZlY3QgbnVtZXJvdXMgc2NoZW1hcy4gIERvbid0IG1ha2UgbmV3IEFQSXMgZW1iZWQgYW4gdW5kZXJzcGVjaWZpZWQgQVBJIHR5cGUgdGhleSBkbyBub3QgY29udHJvbC4gXG4gSW5zdGVhZCBvZiB1c2luZyB0aGlzIHR5cGUsIGNyZWF0ZSBhIGxvY2FsbHkgcHJvdmlkZWQgYW5kIHVzZWQgdHlwZSB0aGF0IGlzIHdlbGwtZm9jdXNlZCBvbiB5b3VyIHJlZmVyZW5jZS4gRm9yIGV4YW1wbGUsIFNlcnZpY2VSZWZlcmVuY2VzIGZvciBhZG1pc3Npb24gcmVnaXN0cmF0aW9uOiBodHRwczovL2dpdGh1Yi5jb20va3ViZXJuZXRlcy9hcGkvYmxvYi9yZWxlYXNlLTEuMTcvYWRtaXNzaW9ucmVnaXN0cmF0aW9uL3YxL3R5cGVzLmdvI0w1MzMgLiIsInByb3BlcnRpZXMiOnsiYXBpVmVyc2lvbiI6eyJkZXNjcmlwdGlvbiI6IkFQSSB2ZXJzaW9uIG9mIHRoZSByZWZlcmVudC4iLCJ0eXBlIjoic3RyaW5nIn0sImZpZWxkUGF0aCI6eyJkZXNjcmlwdGlvbiI6IklmIHJlZmVycmluZyB0byBhIHBpZWNlIG9mIGFuIG9iamVjdCBpbnN0ZWFkIG9mIGFuIGVudGlyZSBvYmplY3QsIHRoaXMgc3RyaW5nIHNob3VsZCBjb250YWluIGEgdmFsaWQgSlNPTi9HbyBmaWVsZCBhY2Nlc3Mgc3RhdGVtZW50LCBzdWNoIGFzIGRlc2lyZWRTdGF0ZS5tYW5pZmVzdC5jb250YWluZXJzWzJdLiBGb3IgZXhhbXBsZSwgaWYgdGhlIG9iamVjdCByZWZlcmVuY2UgaXMgdG8gYSBjb250YWluZXIgd2l0aGluIGEgcG9kLCB0aGlzIHdvdWxkIHRha2Ugb24gYSB2YWx1ZSBsaWtlOiBcInNwZWMuY29udGFpbmVyc3tuYW1lfVwiICh3aGVyZSBcIm5hbWVcIiByZWZlcnMgdG8gdGhlIG5hbWUgb2YgdGhlIGNvbnRhaW5lciB0aGF0IHRyaWdnZXJlZCB0aGUgZXZlbnQpIG9yIGlmIG5vIGNvbnRhaW5lciBuYW1lIGlzIHNwZWNpZmllZCBcInNwZWMuY29udGFpbmVyc1syXVwiIChjb250YWluZXIgd2l0aCBpbmRleCAyIGluIHRoaXMgcG9kKS4gVGhpcyBzeW50YXggaXMgY2hvc2VuIG9ubHkgdG8gaGF2ZSBzb21lIHdlbGwtZGVmaW5lZCB3YXkgb2YgcmVmZXJlbmNpbmcgYSBwYXJ0IG9mIGFuIG9iamVjdC4gVE9ETzogdGhpcyBkZXNpZ24gaXMgbm90IGZpbmFsIGFuZCB0aGlzIGZpZWxkIGlzIHN1YmplY3QgdG8gY2hhbmdlIGluIHRoZSBmdXR1cmUuIiwidHlwZSI6InN0cmluZyJ9LCJraW5kIjp7ImRlc2NyaXB0aW9uIjoiS2luZCBvZiB0aGUgcmVmZXJlbnQuIE1vcmUgaW5mbzogaHR0cHM6Ly9naXQuazhzLmlvL2NvbW11bml0eS9jb250cmlidXRvcnMvZGV2ZWwvc2lnLWFyY2hpdGVjdHVyZS9hcGktY29udmVudGlvbnMubWQjdHlwZXMta2luZHMiLCJ0eXBlIjoic3RyaW5nIn0sIm5hbWUiOnsiZGVzY3JpcHRpb24iOiJOYW1lIG9mIHRoZSByZWZlcmVudC4gTW9yZSBpbmZvOiBodHRwczovL2t1YmVybmV0ZXMuaW8vZG9jcy9jb25jZXB0cy9vdmVydmlldy93b3JraW5nLXdpdGgtb2JqZWN0cy9uYW1lcy8jbmFtZXMiLCJ0eXBlIjoic3RyaW5nIn0sIm5hbWVzcGFjZSI6eyJkZXNjcmlwdGlvbiI6Ik5hbWVzcGFjZSBvZiB0aGUgcmVmZXJlbnQuIE1vcmUgaW5mbzogaHR0cHM6Ly9rdWJlcm5ldGVzLmlvL2RvY3MvY29uY2VwdHMvb3ZlcnZpZXcvd29ya2luZy13aXRoLW9iamVjdHMvbmFtZXNwYWNlcy8iLCJ0eXBlIjoic3RyaW5nIn0sInJlc291cmNlVmVyc2lvbiI6eyJkZXNjcmlwdGlvbiI6IlNwZWNpZmljIHJlc291cmNlVmVyc2lvbiB0byB3aGljaCB0aGlzIHJlZmVyZW5jZSBpcyBtYWRlLCBpZiBhbnkuIE1vcmUgaW5mbzogaHR0cHM6Ly9naXQuazhzLmlvL2NvbW11bml0eS9jb250cmlidXRvcnMvZGV2ZWwvc2lnLWFyY2hpdGVjdHVyZS9hcGktY29udmVudGlvbnMubWQjY29uY3VycmVuY3ktY29udHJvbC1hbmQtY29uc2lzdGVuY3kiLCJ0eXBlIjoic3RyaW5nIn0sInVpZCI6eyJkZXNjcmlwdGlvbiI6IlVJRCBvZiB0aGUgcmVmZXJlbnQuIE1vcmUgaW5mbzogaHR0cHM6Ly9rdWJlcm5ldGVzLmlvL2RvY3MvY29uY2VwdHMvb3ZlcnZpZXcvd29ya2luZy13aXRoLW9iamVjdHMvbmFtZXMvI3VpZHMiLCJ0eXBlIjoic3RyaW5nIn19LCJ0eXBlIjoib2JqZWN0IiwieC1rdWJlcm5ldGVzLW1hcC10eXBlIjoiYXRvbWljIn0sInR5cGUiOiJhcnJheSJ9LCJzdG9yYWdlUHJvdmlkZXJFbmRwb2ludCI6eyJkZXNjcmlwdGlvbiI6IlN0b3JhZ2VQcm92aWRlckVuZHBvaW50IGhvbGRzIGVuZHBvaW50IGluZm8gb24gUHJvdmlkZXIgY2x1c3RlciB3aGljaCBpcyByZXF1aXJlZCBmb3IgY29uc3VtZXIgdG8gZXN0YWJsaXNoIGNvbm5lY3Rpb24gd2l0aCB0aGUgc3RvcmFnZSBwcm92aWRpbmcgY2x1c3Rlci4iLCJ0eXBlIjoic3RyaW5nIn0sInZlcnNpb24iOnsiZGVzY3JpcHRpb24iOiJWZXJzaW9uIHNwZWNpZmllcyB0aGUgdmVyc2lvbiBvZiBTdG9yYWdlQ2x1c3RlciIsInR5cGUiOiJzdHJpbmcifX0sInR5cGUiOiJvYmplY3QifX0sInR5cGUiOiJvYmplY3QifX0sInNlcnZlZCI6dHJ1ZSwic3RvcmFnZSI6dHJ1ZSwic3VicmVzb3VyY2VzIjp7InN0YXR1cyI6e319fV19fQ== + data: eyJhcGlWZXJzaW9uIjoiYXBpZXh0ZW5zaW9ucy5rOHMuaW8vdjEiLCJraW5kIjoiQ3VzdG9tUmVzb3VyY2VEZWZpbml0aW9uIiwibWV0YWRhdGEiOnsiYW5ub3RhdGlvbnMiOnsiY29udHJvbGxlci1nZW4ua3ViZWJ1aWxkZXIuaW8vdmVyc2lvbiI6InYwLjkuMiJ9LCJuYW1lIjoic3RvcmFnZWNsdXN0ZXJzLm9jcy5vcGVuc2hpZnQuaW8ifSwic3BlYyI6eyJncm91cCI6Im9jcy5vcGVuc2hpZnQuaW8iLCJuYW1lcyI6eyJraW5kIjoiU3RvcmFnZUNsdXN0ZXIiLCJsaXN0S2luZCI6IlN0b3JhZ2VDbHVzdGVyTGlzdCIsInBsdXJhbCI6InN0b3JhZ2VjbHVzdGVycyIsInNpbmd1bGFyIjoic3RvcmFnZWNsdXN0ZXIifSwic2NvcGUiOiJOYW1lc3BhY2VkIiwidmVyc2lvbnMiOlt7ImFkZGl0aW9uYWxQcmludGVyQ29sdW1ucyI6W3sianNvblBhdGgiOiIubWV0YWRhdGEuY3JlYXRpb25UaW1lc3RhbXAiLCJuYW1lIjoiQWdlIiwidHlwZSI6ImRhdGUifSx7ImRlc2NyaXB0aW9uIjoiQ3VycmVudCBQaGFzZSIsImpzb25QYXRoIjoiLnN0YXR1cy5waGFzZSIsIm5hbWUiOiJQaGFzZSIsInR5cGUiOiJzdHJpbmcifSx7ImRlc2NyaXB0aW9uIjoiRXh0ZXJuYWwgU3RvcmFnZSBDbHVzdGVyIiwianNvblBhdGgiOiIuc3BlYy5leHRlcm5hbFN0b3JhZ2UuZW5hYmxlIiwibmFtZSI6IkV4dGVybmFsIiwidHlwZSI6ImJvb2xlYW4ifSx7Impzb25QYXRoIjoiLm1ldGFkYXRhLmNyZWF0aW9uVGltZXN0YW1wIiwibmFtZSI6IkNyZWF0ZWQgQXQiLCJ0eXBlIjoic3RyaW5nIn0seyJkZXNjcmlwdGlvbiI6IlN0b3JhZ2UgQ2x1c3RlciBWZXJzaW9uIiwianNvblBhdGgiOiIuc3RhdHVzLnZlcnNpb24iLCJuYW1lIjoiVmVyc2lvbiIsInR5cGUiOiJzdHJpbmcifV0sIm5hbWUiOiJ2MSIsInNjaGVtYSI6eyJvcGVuQVBJVjNTY2hlbWEiOnsiZGVzY3JpcHRpb24iOiJTdG9yYWdlQ2x1c3RlciByZXByZXNlbnRzIGEgY2x1c3RlciBpbmNsdWRpbmcgQ2VwaCBDbHVzdGVyLCBOb29CYWEgYW5kIGFsbCB0aGUgc3RvcmFnZSBhbmQgY29tcHV0ZSByZXNvdXJjZXMgcmVxdWlyZWQuIiwicHJvcGVydGllcyI6eyJhcGlWZXJzaW9uIjp7ImRlc2NyaXB0aW9uIjoiQVBJVmVyc2lvbiBkZWZpbmVzIHRoZSB2ZXJzaW9uZWQgc2NoZW1hIG9mIHRoaXMgcmVwcmVzZW50YXRpb24gb2YgYW4gb2JqZWN0LiBTZXJ2ZXJzIHNob3VsZCBjb252ZXJ0IHJlY29nbml6ZWQgc2NoZW1hcyB0byB0aGUgbGF0ZXN0IGludGVybmFsIHZhbHVlLCBhbmQgbWF5IHJlamVjdCB1bnJlY29nbml6ZWQgdmFsdWVzLiBNb3JlIGluZm86IGh0dHBzOi8vZ2l0Lms4cy5pby9jb21tdW5pdHkvY29udHJpYnV0b3JzL2RldmVsL3NpZy1hcmNoaXRlY3R1cmUvYXBpLWNvbnZlbnRpb25zLm1kI3Jlc291cmNlcyIsInR5cGUiOiJzdHJpbmcifSwia2luZCI6eyJkZXNjcmlwdGlvbiI6IktpbmQgaXMgYSBzdHJpbmcgdmFsdWUgcmVwcmVzZW50aW5nIHRoZSBSRVNUIHJlc291cmNlIHRoaXMgb2JqZWN0IHJlcHJlc2VudHMuIFNlcnZlcnMgbWF5IGluZmVyIHRoaXMgZnJvbSB0aGUgZW5kcG9pbnQgdGhlIGNsaWVudCBzdWJtaXRzIHJlcXVlc3RzIHRvLiBDYW5ub3QgYmUgdXBkYXRlZC4gSW4gQ2FtZWxDYXNlLiBNb3JlIGluZm86IGh0dHBzOi8vZ2l0Lms4cy5pby9jb21tdW5pdHkvY29udHJpYnV0b3JzL2RldmVsL3NpZy1hcmNoaXRlY3R1cmUvYXBpLWNvbnZlbnRpb25zLm1kI3R5cGVzLWtpbmRzIiwidHlwZSI6InN0cmluZyJ9LCJtZXRhZGF0YSI6eyJ0eXBlIjoib2JqZWN0In0sInNwZWMiOnsiZGVzY3JpcHRpb24iOiJTdG9yYWdlQ2x1c3RlclNwZWMgZGVmaW5lcyB0aGUgZGVzaXJlZCBzdGF0ZSBvZiBTdG9yYWdlQ2x1c3RlciIsInByb3BlcnRpZXMiOnsiYWxsb3dSZW1vdGVTdG9yYWdlQ29uc3VtZXJzIjp7ImRlc2NyaXB0aW9uIjoiQWxsb3dSZW1vdGVTdG9yYWdlQ29uc3VtZXJzIEluZGljYXRlcyB0aGF0IHRoZSBPQ1MgY2x1c3RlciBzaG91bGQgZGVwbG95IHRoZSBuZWVkZWQgY29tcG9uZW50cyB0byBlbmFibGUgY29ubmVjdGlvbnMgZnJvbSByZW1vdGUgY29uc3VtZXJzLiIsInR5cGUiOiJib29sZWFuIn0sImFyYml0ZXIiOnsiZGVzY3JpcHRpb24iOiJBcmJpdGVyU3BlYyBzcGVjaWZpZXMgdGhlIHN0b3JhZ2UgY2x1c3RlciBvcHRpb25zIHJlbGF0ZWQgdG8gYXJiaXRlci4gSWYgQXJiaXRlciBpcyBlbmFibGVkLCBBcmJpdGVyTG9jYXRpb24gaW4gdGhlIE5vZGVUb3BvbG9naWVzIG11c3QgYmUgc3BlY2lmaWVkLiIsInByb3BlcnRpZXMiOnsiYXJiaXRlck1vblBWQ1RlbXBsYXRlIjp7ImRlc2NyaXB0aW9uIjoiUGVyc2lzdGVudFZvbHVtZUNsYWltIGlzIGEgdXNlcidzIHJlcXVlc3QgZm9yIGFuZCBjbGFpbSB0byBhIHBlcnNpc3RlbnQgdm9sdW1lIiwicHJvcGVydGllcyI6eyJhcGlWZXJzaW9uIjp7ImRlc2NyaXB0aW9uIjoiQVBJVmVyc2lvbiBkZWZpbmVzIHRoZSB2ZXJzaW9uZWQgc2NoZW1hIG9mIHRoaXMgcmVwcmVzZW50YXRpb24gb2YgYW4gb2JqZWN0LiBTZXJ2ZXJzIHNob3VsZCBjb252ZXJ0IHJlY29nbml6ZWQgc2NoZW1hcyB0byB0aGUgbGF0ZXN0IGludGVybmFsIHZhbHVlLCBhbmQgbWF5IHJlamVjdCB1bnJlY29nbml6ZWQgdmFsdWVzLiBNb3JlIGluZm86IGh0dHBzOi8vZ2l0Lms4cy5pby9jb21tdW5pdHkvY29udHJpYnV0b3JzL2RldmVsL3NpZy1hcmNoaXRlY3R1cmUvYXBpLWNvbnZlbnRpb25zLm1kI3Jlc291cmNlcyIsInR5cGUiOiJzdHJpbmcifSwia2luZCI6eyJkZXNjcmlwdGlvbiI6IktpbmQgaXMgYSBzdHJpbmcgdmFsdWUgcmVwcmVzZW50aW5nIHRoZSBSRVNUIHJlc291cmNlIHRoaXMgb2JqZWN0IHJlcHJlc2VudHMuIFNlcnZlcnMgbWF5IGluZmVyIHRoaXMgZnJvbSB0aGUgZW5kcG9pbnQgdGhlIGNsaWVudCBzdWJtaXRzIHJlcXVlc3RzIHRvLiBDYW5ub3QgYmUgdXBkYXRlZC4gSW4gQ2FtZWxDYXNlLiBNb3JlIGluZm86IGh0dHBzOi8vZ2l0Lms4cy5pby9jb21tdW5pdHkvY29udHJpYnV0b3JzL2RldmVsL3NpZy1hcmNoaXRlY3R1cmUvYXBpLWNvbnZlbnRpb25zLm1kI3R5cGVzLWtpbmRzIiwidHlwZSI6InN0cmluZyJ9LCJtZXRhZGF0YSI6eyJkZXNjcmlwdGlvbiI6IlN0YW5kYXJkIG9iamVjdCdzIG1ldGFkYXRhLiBNb3JlIGluZm86IGh0dHBzOi8vZ2l0Lms4cy5pby9jb21tdW5pdHkvY29udHJpYnV0b3JzL2RldmVsL3NpZy1hcmNoaXRlY3R1cmUvYXBpLWNvbnZlbnRpb25zLm1kI21ldGFkYXRhIiwicHJvcGVydGllcyI6eyJhbm5vdGF0aW9ucyI6eyJhZGRpdGlvbmFsUHJvcGVydGllcyI6eyJ0eXBlIjoic3RyaW5nIn0sInR5cGUiOiJvYmplY3QifSwiZmluYWxpemVycyI6eyJpdGVtcyI6eyJ0eXBlIjoic3RyaW5nIn0sInR5cGUiOiJhcnJheSJ9LCJsYWJlbHMiOnsiYWRkaXRpb25hbFByb3BlcnRpZXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjoib2JqZWN0In0sIm5hbWUiOnsidHlwZSI6InN0cmluZyJ9LCJuYW1lc3BhY2UiOnsidHlwZSI6InN0cmluZyJ9fSwidHlwZSI6Im9iamVjdCJ9LCJzcGVjIjp7ImRlc2NyaXB0aW9uIjoic3BlYyBkZWZpbmVzIHRoZSBkZXNpcmVkIGNoYXJhY3RlcmlzdGljcyBvZiBhIHZvbHVtZSByZXF1ZXN0ZWQgYnkgYSBwb2QgYXV0aG9yLiBNb3JlIGluZm86IGh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL2NvbmNlcHRzL3N0b3JhZ2UvcGVyc2lzdGVudC12b2x1bWVzI3BlcnNpc3RlbnR2b2x1bWVjbGFpbXMiLCJwcm9wZXJ0aWVzIjp7ImFjY2Vzc01vZGVzIjp7ImRlc2NyaXB0aW9uIjoiYWNjZXNzTW9kZXMgY29udGFpbnMgdGhlIGRlc2lyZWQgYWNjZXNzIG1vZGVzIHRoZSB2b2x1bWUgc2hvdWxkIGhhdmUuIE1vcmUgaW5mbzogaHR0cHM6Ly9rdWJlcm5ldGVzLmlvL2RvY3MvY29uY2VwdHMvc3RvcmFnZS9wZXJzaXN0ZW50LXZvbHVtZXMjYWNjZXNzLW1vZGVzLTEiLCJpdGVtcyI6eyJ0eXBlIjoic3RyaW5nIn0sInR5cGUiOiJhcnJheSJ9LCJkYXRhU291cmNlIjp7ImRlc2NyaXB0aW9uIjoiZGF0YVNvdXJjZSBmaWVsZCBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGVpdGhlcjogKiBBbiBleGlzdGluZyBWb2x1bWVTbmFwc2hvdCBvYmplY3QgKHNuYXBzaG90LnN0b3JhZ2UuazhzLmlvL1ZvbHVtZVNuYXBzaG90KSAqIEFuIGV4aXN0aW5nIFBWQyAoUGVyc2lzdGVudFZvbHVtZUNsYWltKSBJZiB0aGUgcHJvdmlzaW9uZXIgb3IgYW4gZXh0ZXJuYWwgY29udHJvbGxlciBjYW4gc3VwcG9ydCB0aGUgc3BlY2lmaWVkIGRhdGEgc291cmNlLCBpdCB3aWxsIGNyZWF0ZSBhIG5ldyB2b2x1bWUgYmFzZWQgb24gdGhlIGNvbnRlbnRzIG9mIHRoZSBzcGVjaWZpZWQgZGF0YSBzb3VyY2UuIFdoZW4gdGhlIEFueVZvbHVtZURhdGFTb3VyY2UgZmVhdHVyZSBnYXRlIGlzIGVuYWJsZWQsIGRhdGFTb3VyY2UgY29udGVudHMgd2lsbCBiZSBjb3BpZWQgdG8gZGF0YVNvdXJjZVJlZiwgYW5kIGRhdGFTb3VyY2VSZWYgY29udGVudHMgd2lsbCBiZSBjb3BpZWQgdG8gZGF0YVNvdXJjZSB3aGVuIGRhdGFTb3VyY2VSZWYubmFtZXNwYWNlIGlzIG5vdCBzcGVjaWZpZWQuIElmIHRoZSBuYW1lc3BhY2UgaXMgc3BlY2lmaWVkLCB0aGVuIGRhdGFTb3VyY2VSZWYgd2lsbCBub3QgYmUgY29waWVkIHRvIGRhdGFTb3VyY2UuIiwicHJvcGVydGllcyI6eyJhcGlHcm91cCI6eyJkZXNjcmlwdGlvbiI6IkFQSUdyb3VwIGlzIHRoZSBncm91cCBmb3IgdGhlIHJlc291cmNlIGJlaW5nIHJlZmVyZW5jZWQuIElmIEFQSUdyb3VwIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBzcGVjaWZpZWQgS2luZCBtdXN0IGJlIGluIHRoZSBjb3JlIEFQSSBncm91cC4gRm9yIGFueSBvdGhlciB0aGlyZC1wYXJ0eSB0eXBlcywgQVBJR3JvdXAgaXMgcmVxdWlyZWQuIiwidHlwZSI6InN0cmluZyJ9LCJraW5kIjp7ImRlc2NyaXB0aW9uIjoiS2luZCBpcyB0aGUgdHlwZSBvZiByZXNvdXJjZSBiZWluZyByZWZlcmVuY2VkIiwidHlwZSI6InN0cmluZyJ9LCJuYW1lIjp7ImRlc2NyaXB0aW9uIjoiTmFtZSBpcyB0aGUgbmFtZSBvZiByZXNvdXJjZSBiZWluZyByZWZlcmVuY2VkIiwidHlwZSI6InN0cmluZyJ9fSwicmVxdWlyZWQiOlsia2luZCIsIm5hbWUiXSwidHlwZSI6Im9iamVjdCIsIngta3ViZXJuZXRlcy1tYXAtdHlwZSI6ImF0b21pYyJ9LCJkYXRhU291cmNlUmVmIjp7ImRlc2NyaXB0aW9uIjoiZGF0YVNvdXJjZVJlZiBzcGVjaWZpZXMgdGhlIG9iamVjdCBmcm9tIHdoaWNoIHRvIHBvcHVsYXRlIHRoZSB2b2x1bWUgd2l0aCBkYXRhLCBpZiBhIG5vbi1lbXB0eSB2b2x1bWUgaXMgZGVzaXJlZC4gVGhpcyBtYXkgYmUgYW55IG9iamVjdCBmcm9tIGEgbm9uLWVtcHR5IEFQSSBncm91cCAobm9uIGNvcmUgb2JqZWN0KSBvciBhIFBlcnNpc3RlbnRWb2x1bWVDbGFpbSBvYmplY3QuIFdoZW4gdGhpcyBmaWVsZCBpcyBzcGVjaWZpZWQsIHZvbHVtZSBiaW5kaW5nIHdpbGwgb25seSBzdWNjZWVkIGlmIHRoZSB0eXBlIG9mIHRoZSBzcGVjaWZpZWQgb2JqZWN0IG1hdGNoZXMgc29tZSBpbnN0YWxsZWQgdm9sdW1lIHBvcHVsYXRvciBvciBkeW5hbWljIHByb3Zpc2lvbmVyLiBUaGlzIGZpZWxkIHdpbGwgcmVwbGFjZSB0aGUgZnVuY3Rpb25hbGl0eSBvZiB0aGUgZGF0YVNvdXJjZSBmaWVsZCBhbmQgYXMgc3VjaCBpZiBib3RoIGZpZWxkcyBhcmUgbm9uLWVtcHR5LCB0aGV5IG11c3QgaGF2ZSB0aGUgc2FtZSB2YWx1ZS4gRm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LCB3aGVuIG5hbWVzcGFjZSBpc24ndCBzcGVjaWZpZWQgaW4gZGF0YVNvdXJjZVJlZiwgYm90aCBmaWVsZHMgKGRhdGFTb3VyY2UgYW5kIGRhdGFTb3VyY2VSZWYpIHdpbGwgYmUgc2V0IHRvIHRoZSBzYW1lIHZhbHVlIGF1dG9tYXRpY2FsbHkgaWYgb25lIG9mIHRoZW0gaXMgZW1wdHkgYW5kIHRoZSBvdGhlciBpcyBub24tZW1wdHkuIFdoZW4gbmFtZXNwYWNlIGlzIHNwZWNpZmllZCBpbiBkYXRhU291cmNlUmVmLCBkYXRhU291cmNlIGlzbid0IHNldCB0byB0aGUgc2FtZSB2YWx1ZSBhbmQgbXVzdCBiZSBlbXB0eS4gVGhlcmUgYXJlIHRocmVlIGltcG9ydGFudCBkaWZmZXJlbmNlcyBiZXR3ZWVuIGRhdGFTb3VyY2UgYW5kIGRhdGFTb3VyY2VSZWY6ICogV2hpbGUgZGF0YVNvdXJjZSBvbmx5IGFsbG93cyB0d28gc3BlY2lmaWMgdHlwZXMgb2Ygb2JqZWN0cywgZGF0YVNvdXJjZVJlZiBhbGxvd3MgYW55IG5vbi1jb3JlIG9iamVjdCwgYXMgd2VsbCBhcyBQZXJzaXN0ZW50Vm9sdW1lQ2xhaW0gb2JqZWN0cy4gKiBXaGlsZSBkYXRhU291cmNlIGlnbm9yZXMgZGlzYWxsb3dlZCB2YWx1ZXMgKGRyb3BwaW5nIHRoZW0pLCBkYXRhU291cmNlUmVmIHByZXNlcnZlcyBhbGwgdmFsdWVzLCBhbmQgZ2VuZXJhdGVzIGFuIGVycm9yIGlmIGEgZGlzYWxsb3dlZCB2YWx1ZSBpcyBzcGVjaWZpZWQuICogV2hpbGUgZGF0YVNvdXJjZSBvbmx5IGFsbG93cyBsb2NhbCBvYmplY3RzLCBkYXRhU291cmNlUmVmIGFsbG93cyBvYmplY3RzIGluIGFueSBuYW1lc3BhY2VzLiAoQmV0YSkgVXNpbmcgdGhpcyBmaWVsZCByZXF1aXJlcyB0aGUgQW55Vm9sdW1lRGF0YVNvdXJjZSBmZWF0dXJlIGdhdGUgdG8gYmUgZW5hYmxlZC4gKEFscGhhKSBVc2luZyB0aGUgbmFtZXNwYWNlIGZpZWxkIG9mIGRhdGFTb3VyY2VSZWYgcmVxdWlyZXMgdGhlIENyb3NzTmFtZXNwYWNlVm9sdW1lRGF0YVNvdXJjZSBmZWF0dXJlIGdhdGUgdG8gYmUgZW5hYmxlZC4iLCJwcm9wZXJ0aWVzIjp7ImFwaUdyb3VwIjp7ImRlc2NyaXB0aW9uIjoiQVBJR3JvdXAgaXMgdGhlIGdyb3VwIGZvciB0aGUgcmVzb3VyY2UgYmVpbmcgcmVmZXJlbmNlZC4gSWYgQVBJR3JvdXAgaXMgbm90IHNwZWNpZmllZCwgdGhlIHNwZWNpZmllZCBLaW5kIG11c3QgYmUgaW4gdGhlIGNvcmUgQVBJIGdyb3VwLiBGb3IgYW55IG90aGVyIHRoaXJkLXBhcnR5IHR5cGVzLCBBUElHcm91cCBpcyByZXF1aXJlZC4iLCJ0eXBlIjoic3RyaW5nIn0sImtpbmQiOnsiZGVzY3JpcHRpb24iOiJLaW5kIGlzIHRoZSB0eXBlIG9mIHJlc291cmNlIGJlaW5nIHJlZmVyZW5jZWQiLCJ0eXBlIjoic3RyaW5nIn0sIm5hbWUiOnsiZGVzY3JpcHRpb24iOiJOYW1lIGlzIHRoZSBuYW1lIG9mIHJlc291cmNlIGJlaW5nIHJlZmVyZW5jZWQiLCJ0eXBlIjoic3RyaW5nIn0sIm5hbWVzcGFjZSI6eyJkZXNjcmlwdGlvbiI6Ik5hbWVzcGFjZSBpcyB0aGUgbmFtZXNwYWNlIG9mIHJlc291cmNlIGJlaW5nIHJlZmVyZW5jZWQgTm90ZSB0aGF0IHdoZW4gYSBuYW1lc3BhY2UgaXMgc3BlY2lmaWVkLCBhIGdhdGV3YXkubmV0d29ya2luZy5rOHMuaW8vUmVmZXJlbmNlR3JhbnQgb2JqZWN0IGlzIHJlcXVpcmVkIGluIHRoZSByZWZlcmVudCBuYW1lc3BhY2UgdG8gYWxsb3cgdGhhdCBuYW1lc3BhY2UncyBvd25lciB0byBhY2NlcHQgdGhlIHJlZmVyZW5jZS4gU2VlIHRoZSBSZWZlcmVuY2VHcmFudCBkb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzLiAoQWxwaGEpIFRoaXMgZmllbGQgcmVxdWlyZXMgdGhlIENyb3NzTmFtZXNwYWNlVm9sdW1lRGF0YVNvdXJjZSBmZWF0dXJlIGdhdGUgdG8gYmUgZW5hYmxlZC4iLCJ0eXBlIjoic3RyaW5nIn19LCJyZXF1aXJlZCI6WyJraW5kIiwibmFtZSJdLCJ0eXBlIjoib2JqZWN0In0sInJlc291cmNlcyI6eyJkZXNjcmlwdGlvbiI6InJlc291cmNlcyByZXByZXNlbnRzIHRoZSBtaW5pbXVtIHJlc291cmNlcyB0aGUgdm9sdW1lIHNob3VsZCBoYXZlLiBJZiBSZWNvdmVyVm9sdW1lRXhwYW5zaW9uRmFpbHVyZSBmZWF0dXJlIGlzIGVuYWJsZWQgdXNlcnMgYXJlIGFsbG93ZWQgdG8gc3BlY2lmeSByZXNvdXJjZSByZXF1aXJlbWVudHMgdGhhdCBhcmUgbG93ZXIgdGhhbiBwcmV2aW91cyB2YWx1ZSBidXQgbXVzdCBzdGlsbCBiZSBoaWdoZXIgdGhhbiBjYXBhY2l0eSByZWNvcmRlZCBpbiB0aGUgc3RhdHVzIGZpZWxkIG9mIHRoZSBjbGFpbS4gTW9yZSBpbmZvOiBodHRwczovL2t1YmVybmV0ZXMuaW8vZG9jcy9jb25jZXB0cy9zdG9yYWdlL3BlcnNpc3RlbnQtdm9sdW1lcyNyZXNvdXJjZXMiLCJwcm9wZXJ0aWVzIjp7ImxpbWl0cyI6eyJhZGRpdGlvbmFsUHJvcGVydGllcyI6eyJhbnlPZiI6W3sidHlwZSI6ImludGVnZXIifSx7InR5cGUiOiJzdHJpbmcifV0sInBhdHRlcm4iOiJeKFxcK3wtKT8oKFswLTldKyhcXC5bMC05XSopPyl8KFxcLlswLTldKykpKChbS01HVFBFXWkpfFtudW1rTUdUUEVdfChbZUVdKFxcK3wtKT8oKFswLTldKyhcXC5bMC05XSopPyl8KFxcLlswLTldKykpKSk/JCIsIngta3ViZXJuZXRlcy1pbnQtb3Itc3RyaW5nIjp0cnVlfSwiZGVzY3JpcHRpb24iOiJMaW1pdHMgZGVzY3JpYmVzIHRoZSBtYXhpbXVtIGFtb3VudCBvZiBjb21wdXRlIHJlc291cmNlcyBhbGxvd2VkLiBNb3JlIGluZm86IGh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL2NvbmNlcHRzL2NvbmZpZ3VyYXRpb24vbWFuYWdlLXJlc291cmNlcy1jb250YWluZXJzLyIsInR5cGUiOiJvYmplY3QifSwicmVxdWVzdHMiOnsiYWRkaXRpb25hbFByb3BlcnRpZXMiOnsiYW55T2YiOlt7InR5cGUiOiJpbnRlZ2VyIn0seyJ0eXBlIjoic3RyaW5nIn1dLCJwYXR0ZXJuIjoiXihcXCt8LSk/KChbMC05XSsoXFwuWzAtOV0qKT8pfChcXC5bMC05XSspKSgoW0tNR1RQRV1pKXxbbnVta01HVFBFXXwoW2VFXShcXCt8LSk/KChbMC05XSsoXFwuWzAtOV0qKT8pfChcXC5bMC05XSspKSkpPyQiLCJ4LWt1YmVybmV0ZXMtaW50LW9yLXN0cmluZyI6dHJ1ZX0sImRlc2NyaXB0aW9uIjoiUmVxdWVzdHMgZGVzY3JpYmVzIHRoZSBtaW5pbXVtIGFtb3VudCBvZiBjb21wdXRlIHJlc291cmNlcyByZXF1aXJlZC4gSWYgUmVxdWVzdHMgaXMgb21pdHRlZCBmb3IgYSBjb250YWluZXIsIGl0IGRlZmF1bHRzIHRvIExpbWl0cyBpZiB0aGF0IGlzIGV4cGxpY2l0bHkgc3BlY2lmaWVkLCBvdGhlcndpc2UgdG8gYW4gaW1wbGVtZW50YXRpb24tZGVmaW5lZCB2YWx1ZS4gUmVxdWVzdHMgY2Fubm90IGV4Y2VlZCBMaW1pdHMuIE1vcmUgaW5mbzogaHR0cHM6Ly9rdWJlcm5ldGVzLmlvL2RvY3MvY29uY2VwdHMvY29uZmlndXJhdGlvbi9tYW5hZ2UtcmVzb3VyY2VzLWNvbnRhaW5lcnMvIiwidHlwZSI6Im9iamVjdCJ9fSwidHlwZSI6Im9iamVjdCJ9LCJzZWxlY3RvciI6eyJkZXNjcmlwdGlvbiI6InNlbGVjdG9yIGlzIGEgbGFiZWwgcXVlcnkgb3ZlciB2b2x1bWVzIHRvIGNvbnNpZGVyIGZvciBiaW5kaW5nLiIsInByb3BlcnRpZXMiOnsibWF0Y2hFeHByZXNzaW9ucyI6eyJkZXNjcmlwdGlvbiI6Im1hdGNoRXhwcmVzc2lvbnMgaXMgYSBsaXN0IG9mIGxhYmVsIHNlbGVjdG9yIHJlcXVpcmVtZW50cy4gVGhlIHJlcXVpcmVtZW50cyBhcmUgQU5EZWQuIiwiaXRlbXMiOnsiZGVzY3JpcHRpb24iOiJBIGxhYmVsIHNlbGVjdG9yIHJlcXVpcmVtZW50IGlzIGEgc2VsZWN0b3IgdGhhdCBjb250YWlucyB2YWx1ZXMsIGEga2V5LCBhbmQgYW4gb3BlcmF0b3IgdGhhdCByZWxhdGVzIHRoZSBrZXkgYW5kIHZhbHVlcy4iLCJwcm9wZXJ0aWVzIjp7ImtleSI6eyJkZXNjcmlwdGlvbiI6ImtleSBpcyB0aGUgbGFiZWwga2V5IHRoYXQgdGhlIHNlbGVjdG9yIGFwcGxpZXMgdG8uIiwidHlwZSI6InN0cmluZyJ9LCJvcGVyYXRvciI6eyJkZXNjcmlwdGlvbiI6Im9wZXJhdG9yIHJlcHJlc2VudHMgYSBrZXkncyByZWxhdGlvbnNoaXAgdG8gYSBzZXQgb2YgdmFsdWVzLiBWYWxpZCBvcGVyYXRvcnMgYXJlIEluLCBOb3RJbiwgRXhpc3RzIGFuZCBEb2VzTm90RXhpc3QuIiwidHlwZSI6InN0cmluZyJ9LCJ2YWx1ZXMiOnsiZGVzY3JpcHRpb24iOiJ2YWx1ZXMgaXMgYW4gYXJyYXkgb2Ygc3RyaW5nIHZhbHVlcy4gSWYgdGhlIG9wZXJhdG9yIGlzIEluIG9yIE5vdEluLCB0aGUgdmFsdWVzIGFycmF5IG11c3QgYmUgbm9uLWVtcHR5LiBJZiB0aGUgb3BlcmF0b3IgaXMgRXhpc3RzIG9yIERvZXNOb3RFeGlzdCwgdGhlIHZhbHVlcyBhcnJheSBtdXN0IGJlIGVtcHR5LiBUaGlzIGFycmF5IGlzIHJlcGxhY2VkIGR1cmluZyBhIHN0cmF0ZWdpYyBtZXJnZSBwYXRjaC4iLCJpdGVtcyI6eyJ0eXBlIjoic3RyaW5nIn0sInR5cGUiOiJhcnJheSJ9fSwicmVxdWlyZWQiOlsia2V5Iiwib3BlcmF0b3IiXSwidHlwZSI6Im9iamVjdCJ9LCJ0eXBlIjoiYXJyYXkifSwibWF0Y2hMYWJlbHMiOnsiYWRkaXRpb25hbFByb3BlcnRpZXMiOnsidHlwZSI6InN0cmluZyJ9LCJkZXNjcmlwdGlvbiI6Im1hdGNoTGFiZWxzIGlzIGEgbWFwIG9mIHtrZXksdmFsdWV9IHBhaXJzLiBBIHNpbmdsZSB7a2V5LHZhbHVlfSBpbiB0aGUgbWF0Y2hMYWJlbHMgbWFwIGlzIGVxdWl2YWxlbnQgdG8gYW4gZWxlbWVudCBvZiBtYXRjaEV4cHJlc3Npb25zLCB3aG9zZSBrZXkgZmllbGQgaXMgXCJrZXlcIiwgdGhlIG9wZXJhdG9yIGlzIFwiSW5cIiwgYW5kIHRoZSB2YWx1ZXMgYXJyYXkgY29udGFpbnMgb25seSBcInZhbHVlXCIuIFRoZSByZXF1aXJlbWVudHMgYXJlIEFORGVkLiIsInR5cGUiOiJvYmplY3QifX0sInR5cGUiOiJvYmplY3QiLCJ4LWt1YmVybmV0ZXMtbWFwLXR5cGUiOiJhdG9taWMifSwic3RvcmFnZUNsYXNzTmFtZSI6eyJkZXNjcmlwdGlvbiI6InN0b3JhZ2VDbGFzc05hbWUgaXMgdGhlIG5hbWUgb2YgdGhlIFN0b3JhZ2VDbGFzcyByZXF1aXJlZCBieSB0aGUgY2xhaW0uIE1vcmUgaW5mbzogaHR0cHM6Ly9rdWJlcm5ldGVzLmlvL2RvY3MvY29uY2VwdHMvc3RvcmFnZS9wZXJzaXN0ZW50LXZvbHVtZXMjY2xhc3MtMSIsInR5cGUiOiJzdHJpbmcifSwidm9sdW1lQXR0cmlidXRlc0NsYXNzTmFtZSI6eyJkZXNjcmlwdGlvbiI6InZvbHVtZUF0dHJpYnV0ZXNDbGFzc05hbWUgbWF5IGJlIHVzZWQgdG8gc2V0IHRoZSBWb2x1bWVBdHRyaWJ1dGVzQ2xhc3MgdXNlZCBieSB0aGlzIGNsYWltLiBJZiBzcGVjaWZpZWQsIHRoZSBDU0kgZHJpdmVyIHdpbGwgY3JlYXRlIG9yIHVwZGF0ZSB0aGUgdm9sdW1lIHdpdGggdGhlIGF0dHJpYnV0ZXMgZGVmaW5lZCBpbiB0aGUgY29ycmVzcG9uZGluZyBWb2x1bWVBdHRyaWJ1dGVzQ2xhc3MuIFRoaXMgaGFzIGEgZGlmZmVyZW50IHB1cnBvc2UgdGhhbiBzdG9yYWdlQ2xhc3NOYW1lLCBpdCBjYW4gYmUgY2hhbmdlZCBhZnRlciB0aGUgY2xhaW0gaXMgY3JlYXRlZC4gQW4gZW1wdHkgc3RyaW5nIHZhbHVlIG1lYW5zIHRoYXQgbm8gVm9sdW1lQXR0cmlidXRlc0NsYXNzIHdpbGwgYmUgYXBwbGllZCB0byB0aGUgY2xhaW0gYnV0IGl0J3Mgbm90IGFsbG93ZWQgdG8gcmVzZXQgdGhpcyBmaWVsZCB0byBlbXB0eSBzdHJpbmcgb25jZSBpdCBpcyBzZXQuIElmIHVuc3BlY2lmaWVkIGFuZCB0aGUgUGVyc2lzdGVudFZvbHVtZUNsYWltIGlzIHVuYm91bmQsIHRoZSBkZWZhdWx0IFZvbHVtZUF0dHJpYnV0ZXNDbGFzcyB3aWxsIGJlIHNldCBieSB0aGUgcGVyc2lzdGVudHZvbHVtZSBjb250cm9sbGVyIGlmIGl0IGV4aXN0cy4gSWYgdGhlIHJlc291cmNlIHJlZmVycmVkIHRvIGJ5IHZvbHVtZUF0dHJpYnV0ZXNDbGFzcyBkb2VzIG5vdCBleGlzdCwgdGhpcyBQZXJzaXN0ZW50Vm9sdW1lQ2xhaW0gd2lsbCBiZSBzZXQgdG8gYSBQZW5kaW5nIHN0YXRlLCBhcyByZWZsZWN0ZWQgYnkgdGhlIG1vZGlmeVZvbHVtZVN0YXR1cyBmaWVsZCwgdW50aWwgc3VjaCBhcyBhIHJlc291cmNlIGV4aXN0cy4gTW9yZSBpbmZvOiBodHRwczovL2t1YmVybmV0ZXMuaW8vZG9jcy9jb25jZXB0cy9zdG9yYWdlL3BlcnNpc3RlbnQtdm9sdW1lcyN2b2x1bWVhdHRyaWJ1dGVzY2xhc3MgKEFscGhhKSBVc2luZyB0aGlzIGZpZWxkIHJlcXVpcmVzIHRoZSBWb2x1bWVBdHRyaWJ1dGVzQ2xhc3MgZmVhdHVyZSBnYXRlIHRvIGJlIGVuYWJsZWQuIiwidHlwZSI6InN0cmluZyJ9LCJ2b2x1bWVNb2RlIjp7ImRlc2NyaXB0aW9uIjoidm9sdW1lTW9kZSBkZWZpbmVzIHdoYXQgdHlwZSBvZiB2b2x1bWUgaXMgcmVxdWlyZWQgYnkgdGhlIGNsYWltLiBWYWx1ZSBvZiBGaWxlc3lzdGVtIGlzIGltcGxpZWQgd2hlbiBub3QgaW5jbHVkZWQgaW4gY2xhaW0gc3BlYy4iLCJ0eXBlIjoic3RyaW5nIn0sInZvbHVtZU5hbWUiOnsiZGVzY3JpcHRpb24iOiJ2b2x1bWVOYW1lIGlzIHRoZSBiaW5kaW5nIHJlZmVyZW5jZSB0byB0aGUgUGVyc2lzdGVudFZvbHVtZSBiYWNraW5nIHRoaXMgY2xhaW0uIiwidHlwZSI6InN0cmluZyJ9fSwidHlwZSI6Im9iamVjdCJ9LCJzdGF0dXMiOnsiZGVzY3JpcHRpb24iOiJzdGF0dXMgcmVwcmVzZW50cyB0aGUgY3VycmVudCBpbmZvcm1hdGlvbi9zdGF0dXMgb2YgYSBwZXJzaXN0ZW50IHZvbHVtZSBjbGFpbS4gUmVhZC1vbmx5LiBNb3JlIGluZm86IGh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL2NvbmNlcHRzL3N0b3JhZ2UvcGVyc2lzdGVudC12b2x1bWVzI3BlcnNpc3RlbnR2b2x1bWVjbGFpbXMiLCJwcm9wZXJ0aWVzIjp7ImFjY2Vzc01vZGVzIjp7ImRlc2NyaXB0aW9uIjoiYWNjZXNzTW9kZXMgY29udGFpbnMgdGhlIGFjdHVhbCBhY2Nlc3MgbW9kZXMgdGhlIHZvbHVtZSBiYWNraW5nIHRoZSBQVkMgaGFzLiBNb3JlIGluZm86IGh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL2NvbmNlcHRzL3N0b3JhZ2UvcGVyc2lzdGVudC12b2x1bWVzI2FjY2Vzcy1tb2Rlcy0xIiwiaXRlbXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjoiYXJyYXkifSwiYWxsb2NhdGVkUmVzb3VyY2VTdGF0dXNlcyI6eyJhZGRpdGlvbmFsUHJvcGVydGllcyI6eyJkZXNjcmlwdGlvbiI6IldoZW4gYSBjb250cm9sbGVyIHJlY2VpdmVzIHBlcnNpc3RlbnR2b2x1bWUgY2xhaW0gdXBkYXRlIHdpdGggQ2xhaW1SZXNvdXJjZVN0YXR1cyBmb3IgYSByZXNvdXJjZSB0aGF0IGl0IGRvZXMgbm90IHJlY29nbml6ZXMsIHRoZW4gaXQgc2hvdWxkIGlnbm9yZSB0aGF0IHVwZGF0ZSBhbmQgbGV0IG90aGVyIGNvbnRyb2xsZXJzIGhhbmRsZSBpdC4iLCJ0eXBlIjoic3RyaW5nIn0sImRlc2NyaXB0aW9uIjoiYWxsb2NhdGVkUmVzb3VyY2VTdGF0dXNlcyBzdG9yZXMgc3RhdHVzIG9mIHJlc291cmNlIGJlaW5nIHJlc2l6ZWQgZm9yIHRoZSBnaXZlbiBQVkMuIEtleSBuYW1lcyBmb2xsb3cgc3RhbmRhcmQgS3ViZXJuZXRlcyBsYWJlbCBzeW50YXguIFZhbGlkIHZhbHVlcyBhcmUgZWl0aGVyOiAqIFVuLXByZWZpeGVkIGtleXM6IC0gc3RvcmFnZSAtIHRoZSBjYXBhY2l0eSBvZiB0aGUgdm9sdW1lLiAqIEN1c3RvbSByZXNvdXJjZXMgbXVzdCB1c2UgaW1wbGVtZW50YXRpb24tZGVmaW5lZCBwcmVmaXhlZCBuYW1lcyBzdWNoIGFzIFwiZXhhbXBsZS5jb20vbXktY3VzdG9tLXJlc291cmNlXCIgQXBhcnQgZnJvbSBhYm92ZSB2YWx1ZXMgLSBrZXlzIHRoYXQgYXJlIHVucHJlZml4ZWQgb3IgaGF2ZSBrdWJlcm5ldGVzLmlvIHByZWZpeCBhcmUgY29uc2lkZXJlZCByZXNlcnZlZCBhbmQgaGVuY2UgbWF5IG5vdCBiZSB1c2VkLiBcbiBDbGFpbVJlc291cmNlU3RhdHVzIGNhbiBiZSBpbiBhbnkgb2YgZm9sbG93aW5nIHN0YXRlczogLSBDb250cm9sbGVyUmVzaXplSW5Qcm9ncmVzczogU3RhdGUgc2V0IHdoZW4gcmVzaXplIGNvbnRyb2xsZXIgc3RhcnRzIHJlc2l6aW5nIHRoZSB2b2x1bWUgaW4gY29udHJvbC1wbGFuZS4gLSBDb250cm9sbGVyUmVzaXplRmFpbGVkOiBTdGF0ZSBzZXQgd2hlbiByZXNpemUgaGFzIGZhaWxlZCBpbiByZXNpemUgY29udHJvbGxlciB3aXRoIGEgdGVybWluYWwgZXJyb3IuIC0gTm9kZVJlc2l6ZVBlbmRpbmc6IFN0YXRlIHNldCB3aGVuIHJlc2l6ZSBjb250cm9sbGVyIGhhcyBmaW5pc2hlZCByZXNpemluZyB0aGUgdm9sdW1lIGJ1dCBmdXJ0aGVyIHJlc2l6aW5nIG9mIHZvbHVtZSBpcyBuZWVkZWQgb24gdGhlIG5vZGUuIC0gTm9kZVJlc2l6ZUluUHJvZ3Jlc3M6IFN0YXRlIHNldCB3aGVuIGt1YmVsZXQgc3RhcnRzIHJlc2l6aW5nIHRoZSB2b2x1bWUuIC0gTm9kZVJlc2l6ZUZhaWxlZDogU3RhdGUgc2V0IHdoZW4gcmVzaXppbmcgaGFzIGZhaWxlZCBpbiBrdWJlbGV0IHdpdGggYSB0ZXJtaW5hbCBlcnJvci4gVHJhbnNpZW50IGVycm9ycyBkb24ndCBzZXQgTm9kZVJlc2l6ZUZhaWxlZC4gRm9yIGV4YW1wbGU6IGlmIGV4cGFuZGluZyBhIFBWQyBmb3IgbW9yZSBjYXBhY2l0eSAtIHRoaXMgZmllbGQgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHN0YXRlczogLSBwdmMuc3RhdHVzLmFsbG9jYXRlZFJlc291cmNlU3RhdHVzWydzdG9yYWdlJ10gPSBcIkNvbnRyb2xsZXJSZXNpemVJblByb2dyZXNzXCIgLSBwdmMuc3RhdHVzLmFsbG9jYXRlZFJlc291cmNlU3RhdHVzWydzdG9yYWdlJ10gPSBcIkNvbnRyb2xsZXJSZXNpemVGYWlsZWRcIiAtIHB2Yy5zdGF0dXMuYWxsb2NhdGVkUmVzb3VyY2VTdGF0dXNbJ3N0b3JhZ2UnXSA9IFwiTm9kZVJlc2l6ZVBlbmRpbmdcIiAtIHB2Yy5zdGF0dXMuYWxsb2NhdGVkUmVzb3VyY2VTdGF0dXNbJ3N0b3JhZ2UnXSA9IFwiTm9kZVJlc2l6ZUluUHJvZ3Jlc3NcIiAtIHB2Yy5zdGF0dXMuYWxsb2NhdGVkUmVzb3VyY2VTdGF0dXNbJ3N0b3JhZ2UnXSA9IFwiTm9kZVJlc2l6ZUZhaWxlZFwiIFdoZW4gdGhpcyBmaWVsZCBpcyBub3Qgc2V0LCBpdCBtZWFucyB0aGF0IG5vIHJlc2l6ZSBvcGVyYXRpb24gaXMgaW4gcHJvZ3Jlc3MgZm9yIHRoZSBnaXZlbiBQVkMuIFxuIEEgY29udHJvbGxlciB0aGF0IHJlY2VpdmVzIFBWQyB1cGRhdGUgd2l0aCBwcmV2aW91c2x5IHVua25vd24gcmVzb3VyY2VOYW1lIG9yIENsYWltUmVzb3VyY2VTdGF0dXMgc2hvdWxkIGlnbm9yZSB0aGUgdXBkYXRlIGZvciB0aGUgcHVycG9zZSBpdCB3YXMgZGVzaWduZWQuIEZvciBleGFtcGxlIC0gYSBjb250cm9sbGVyIHRoYXQgb25seSBpcyByZXNwb25zaWJsZSBmb3IgcmVzaXppbmcgY2FwYWNpdHkgb2YgdGhlIHZvbHVtZSwgc2hvdWxkIGlnbm9yZSBQVkMgdXBkYXRlcyB0aGF0IGNoYW5nZSBvdGhlciB2YWxpZCByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIFBWQy4gXG4gVGhpcyBpcyBhbiBhbHBoYSBmaWVsZCBhbmQgcmVxdWlyZXMgZW5hYmxpbmcgUmVjb3ZlclZvbHVtZUV4cGFuc2lvbkZhaWx1cmUgZmVhdHVyZS4iLCJ0eXBlIjoib2JqZWN0IiwieC1rdWJlcm5ldGVzLW1hcC10eXBlIjoiZ3JhbnVsYXIifSwiYWxsb2NhdGVkUmVzb3VyY2VzIjp7ImFkZGl0aW9uYWxQcm9wZXJ0aWVzIjp7ImFueU9mIjpbeyJ0eXBlIjoiaW50ZWdlciJ9LHsidHlwZSI6InN0cmluZyJ9XSwicGF0dGVybiI6Il4oXFwrfC0pPygoWzAtOV0rKFxcLlswLTldKik/KXwoXFwuWzAtOV0rKSkoKFtLTUdUUEVdaSl8W251bWtNR1RQRV18KFtlRV0oXFwrfC0pPygoWzAtOV0rKFxcLlswLTldKik/KXwoXFwuWzAtOV0rKSkpKT8kIiwieC1rdWJlcm5ldGVzLWludC1vci1zdHJpbmciOnRydWV9LCJkZXNjcmlwdGlvbiI6ImFsbG9jYXRlZFJlc291cmNlcyB0cmFja3MgdGhlIHJlc291cmNlcyBhbGxvY2F0ZWQgdG8gYSBQVkMgaW5jbHVkaW5nIGl0cyBjYXBhY2l0eS4gS2V5IG5hbWVzIGZvbGxvdyBzdGFuZGFyZCBLdWJlcm5ldGVzIGxhYmVsIHN5bnRheC4gVmFsaWQgdmFsdWVzIGFyZSBlaXRoZXI6ICogVW4tcHJlZml4ZWQga2V5czogLSBzdG9yYWdlIC0gdGhlIGNhcGFjaXR5IG9mIHRoZSB2b2x1bWUuICogQ3VzdG9tIHJlc291cmNlcyBtdXN0IHVzZSBpbXBsZW1lbnRhdGlvbi1kZWZpbmVkIHByZWZpeGVkIG5hbWVzIHN1Y2ggYXMgXCJleGFtcGxlLmNvbS9teS1jdXN0b20tcmVzb3VyY2VcIiBBcGFydCBmcm9tIGFib3ZlIHZhbHVlcyAtIGtleXMgdGhhdCBhcmUgdW5wcmVmaXhlZCBvciBoYXZlIGt1YmVybmV0ZXMuaW8gcHJlZml4IGFyZSBjb25zaWRlcmVkIHJlc2VydmVkIGFuZCBoZW5jZSBtYXkgbm90IGJlIHVzZWQuIFxuIENhcGFjaXR5IHJlcG9ydGVkIGhlcmUgbWF5IGJlIGxhcmdlciB0aGFuIHRoZSBhY3R1YWwgY2FwYWNpdHkgd2hlbiBhIHZvbHVtZSBleHBhbnNpb24gb3BlcmF0aW9uIGlzIHJlcXVlc3RlZC4gRm9yIHN0b3JhZ2UgcXVvdGEsIHRoZSBsYXJnZXIgdmFsdWUgZnJvbSBhbGxvY2F0ZWRSZXNvdXJjZXMgYW5kIFBWQy5zcGVjLnJlc291cmNlcyBpcyB1c2VkLiBJZiBhbGxvY2F0ZWRSZXNvdXJjZXMgaXMgbm90IHNldCwgUFZDLnNwZWMucmVzb3VyY2VzIGFsb25lIGlzIHVzZWQgZm9yIHF1b3RhIGNhbGN1bGF0aW9uLiBJZiBhIHZvbHVtZSBleHBhbnNpb24gY2FwYWNpdHkgcmVxdWVzdCBpcyBsb3dlcmVkLCBhbGxvY2F0ZWRSZXNvdXJjZXMgaXMgb25seSBsb3dlcmVkIGlmIHRoZXJlIGFyZSBubyBleHBhbnNpb24gb3BlcmF0aW9ucyBpbiBwcm9ncmVzcyBhbmQgaWYgdGhlIGFjdHVhbCB2b2x1bWUgY2FwYWNpdHkgaXMgZXF1YWwgb3IgbG93ZXIgdGhhbiB0aGUgcmVxdWVzdGVkIGNhcGFjaXR5LiBcbiBBIGNvbnRyb2xsZXIgdGhhdCByZWNlaXZlcyBQVkMgdXBkYXRlIHdpdGggcHJldmlvdXNseSB1bmtub3duIHJlc291cmNlTmFtZSBzaG91bGQgaWdub3JlIHRoZSB1cGRhdGUgZm9yIHRoZSBwdXJwb3NlIGl0IHdhcyBkZXNpZ25lZC4gRm9yIGV4YW1wbGUgLSBhIGNvbnRyb2xsZXIgdGhhdCBvbmx5IGlzIHJlc3BvbnNpYmxlIGZvciByZXNpemluZyBjYXBhY2l0eSBvZiB0aGUgdm9sdW1lLCBzaG91bGQgaWdub3JlIFBWQyB1cGRhdGVzIHRoYXQgY2hhbmdlIG90aGVyIHZhbGlkIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggUFZDLiBcbiBUaGlzIGlzIGFuIGFscGhhIGZpZWxkIGFuZCByZXF1aXJlcyBlbmFibGluZyBSZWNvdmVyVm9sdW1lRXhwYW5zaW9uRmFpbHVyZSBmZWF0dXJlLiIsInR5cGUiOiJvYmplY3QifSwiY2FwYWNpdHkiOnsiYWRkaXRpb25hbFByb3BlcnRpZXMiOnsiYW55T2YiOlt7InR5cGUiOiJpbnRlZ2VyIn0seyJ0eXBlIjoic3RyaW5nIn1dLCJwYXR0ZXJuIjoiXihcXCt8LSk/KChbMC05XSsoXFwuWzAtOV0qKT8pfChcXC5bMC05XSspKSgoW0tNR1RQRV1pKXxbbnVta01HVFBFXXwoW2VFXShcXCt8LSk/KChbMC05XSsoXFwuWzAtOV0qKT8pfChcXC5bMC05XSspKSkpPyQiLCJ4LWt1YmVybmV0ZXMtaW50LW9yLXN0cmluZyI6dHJ1ZX0sImRlc2NyaXB0aW9uIjoiY2FwYWNpdHkgcmVwcmVzZW50cyB0aGUgYWN0dWFsIHJlc291cmNlcyBvZiB0aGUgdW5kZXJseWluZyB2b2x1bWUuIiwidHlwZSI6Im9iamVjdCJ9LCJjb25kaXRpb25zIjp7ImRlc2NyaXB0aW9uIjoiY29uZGl0aW9ucyBpcyB0aGUgY3VycmVudCBDb25kaXRpb24gb2YgcGVyc2lzdGVudCB2b2x1bWUgY2xhaW0uIElmIHVuZGVybHlpbmcgcGVyc2lzdGVudCB2b2x1bWUgaXMgYmVpbmcgcmVzaXplZCB0aGVuIHRoZSBDb25kaXRpb24gd2lsbCBiZSBzZXQgdG8gJ1Jlc2l6ZVN0YXJ0ZWQnLiIsIml0ZW1zIjp7ImRlc2NyaXB0aW9uIjoiUGVyc2lzdGVudFZvbHVtZUNsYWltQ29uZGl0aW9uIGNvbnRhaW5zIGRldGFpbHMgYWJvdXQgc3RhdGUgb2YgcHZjIiwicHJvcGVydGllcyI6eyJsYXN0UHJvYmVUaW1lIjp7ImRlc2NyaXB0aW9uIjoibGFzdFByb2JlVGltZSBpcyB0aGUgdGltZSB3ZSBwcm9iZWQgdGhlIGNvbmRpdGlvbi4iLCJmb3JtYXQiOiJkYXRlLXRpbWUiLCJ0eXBlIjoic3RyaW5nIn0sImxhc3RUcmFuc2l0aW9uVGltZSI6eyJkZXNjcmlwdGlvbiI6Imxhc3RUcmFuc2l0aW9uVGltZSBpcyB0aGUgdGltZSB0aGUgY29uZGl0aW9uIHRyYW5zaXRpb25lZCBmcm9tIG9uZSBzdGF0dXMgdG8gYW5vdGhlci4iLCJmb3JtYXQiOiJkYXRlLXRpbWUiLCJ0eXBlIjoic3RyaW5nIn0sIm1lc3NhZ2UiOnsiZGVzY3JpcHRpb24iOiJtZXNzYWdlIGlzIHRoZSBodW1hbi1yZWFkYWJsZSBtZXNzYWdlIGluZGljYXRpbmcgZGV0YWlscyBhYm91dCBsYXN0IHRyYW5zaXRpb24uIiwidHlwZSI6InN0cmluZyJ9LCJyZWFzb24iOnsiZGVzY3JpcHRpb24iOiJyZWFzb24gaXMgYSB1bmlxdWUsIHRoaXMgc2hvdWxkIGJlIGEgc2hvcnQsIG1hY2hpbmUgdW5kZXJzdGFuZGFibGUgc3RyaW5nIHRoYXQgZ2l2ZXMgdGhlIHJlYXNvbiBmb3IgY29uZGl0aW9uJ3MgbGFzdCB0cmFuc2l0aW9uLiBJZiBpdCByZXBvcnRzIFwiUmVzaXplU3RhcnRlZFwiIHRoYXQgbWVhbnMgdGhlIHVuZGVybHlpbmcgcGVyc2lzdGVudCB2b2x1bWUgaXMgYmVpbmcgcmVzaXplZC4iLCJ0eXBlIjoic3RyaW5nIn0sInN0YXR1cyI6eyJ0eXBlIjoic3RyaW5nIn0sInR5cGUiOnsiZGVzY3JpcHRpb24iOiJQZXJzaXN0ZW50Vm9sdW1lQ2xhaW1Db25kaXRpb25UeXBlIGlzIGEgdmFsaWQgdmFsdWUgb2YgUGVyc2lzdGVudFZvbHVtZUNsYWltQ29uZGl0aW9uLlR5cGUiLCJ0eXBlIjoic3RyaW5nIn19LCJyZXF1aXJlZCI6WyJzdGF0dXMiLCJ0eXBlIl0sInR5cGUiOiJvYmplY3QifSwidHlwZSI6ImFycmF5In0sImN1cnJlbnRWb2x1bWVBdHRyaWJ1dGVzQ2xhc3NOYW1lIjp7ImRlc2NyaXB0aW9uIjoiY3VycmVudFZvbHVtZUF0dHJpYnV0ZXNDbGFzc05hbWUgaXMgdGhlIGN1cnJlbnQgbmFtZSBvZiB0aGUgVm9sdW1lQXR0cmlidXRlc0NsYXNzIHRoZSBQVkMgaXMgdXNpbmcuIFdoZW4gdW5zZXQsIHRoZXJlIGlzIG5vIFZvbHVtZUF0dHJpYnV0ZUNsYXNzIGFwcGxpZWQgdG8gdGhpcyBQZXJzaXN0ZW50Vm9sdW1lQ2xhaW0gVGhpcyBpcyBhbiBhbHBoYSBmaWVsZCBhbmQgcmVxdWlyZXMgZW5hYmxpbmcgVm9sdW1lQXR0cmlidXRlc0NsYXNzIGZlYXR1cmUuIiwidHlwZSI6InN0cmluZyJ9LCJtb2RpZnlWb2x1bWVTdGF0dXMiOnsiZGVzY3JpcHRpb24iOiJNb2RpZnlWb2x1bWVTdGF0dXMgcmVwcmVzZW50cyB0aGUgc3RhdHVzIG9iamVjdCBvZiBDb250cm9sbGVyTW9kaWZ5Vm9sdW1lIG9wZXJhdGlvbi4gV2hlbiB0aGlzIGlzIHVuc2V0LCB0aGVyZSBpcyBubyBNb2RpZnlWb2x1bWUgb3BlcmF0aW9uIGJlaW5nIGF0dGVtcHRlZC4gVGhpcyBpcyBhbiBhbHBoYSBmaWVsZCBhbmQgcmVxdWlyZXMgZW5hYmxpbmcgVm9sdW1lQXR0cmlidXRlc0NsYXNzIGZlYXR1cmUuIiwicHJvcGVydGllcyI6eyJzdGF0dXMiOnsiZGVzY3JpcHRpb24iOiJzdGF0dXMgaXMgdGhlIHN0YXR1cyBvZiB0aGUgQ29udHJvbGxlck1vZGlmeVZvbHVtZSBvcGVyYXRpb24uIEl0IGNhbiBiZSBpbiBhbnkgb2YgZm9sbG93aW5nIHN0YXRlczogLSBQZW5kaW5nIFBlbmRpbmcgaW5kaWNhdGVzIHRoYXQgdGhlIFBlcnNpc3RlbnRWb2x1bWVDbGFpbSBjYW5ub3QgYmUgbW9kaWZpZWQgZHVlIHRvIHVubWV0IHJlcXVpcmVtZW50cywgc3VjaCBhcyB0aGUgc3BlY2lmaWVkIFZvbHVtZUF0dHJpYnV0ZXNDbGFzcyBub3QgZXhpc3RpbmcuIC0gSW5Qcm9ncmVzcyBJblByb2dyZXNzIGluZGljYXRlcyB0aGF0IHRoZSB2b2x1bWUgaXMgYmVpbmcgbW9kaWZpZWQuIC0gSW5mZWFzaWJsZSBJbmZlYXNpYmxlIGluZGljYXRlcyB0aGF0IHRoZSByZXF1ZXN0IGhhcyBiZWVuIHJlamVjdGVkIGFzIGludmFsaWQgYnkgdGhlIENTSSBkcml2ZXIuIFRvIHJlc29sdmUgdGhlIGVycm9yLCBhIHZhbGlkIFZvbHVtZUF0dHJpYnV0ZXNDbGFzcyBuZWVkcyB0byBiZSBzcGVjaWZpZWQuIE5vdGU6IE5ldyBzdGF0dXNlcyBjYW4gYmUgYWRkZWQgaW4gdGhlIGZ1dHVyZS4gQ29uc3VtZXJzIHNob3VsZCBjaGVjayBmb3IgdW5rbm93biBzdGF0dXNlcyBhbmQgZmFpbCBhcHByb3ByaWF0ZWx5LiIsInR5cGUiOiJzdHJpbmcifSwidGFyZ2V0Vm9sdW1lQXR0cmlidXRlc0NsYXNzTmFtZSI6eyJkZXNjcmlwdGlvbiI6InRhcmdldFZvbHVtZUF0dHJpYnV0ZXNDbGFzc05hbWUgaXMgdGhlIG5hbWUgb2YgdGhlIFZvbHVtZUF0dHJpYnV0ZXNDbGFzcyB0aGUgUFZDIGN1cnJlbnRseSBiZWluZyByZWNvbmNpbGVkIiwidHlwZSI6InN0cmluZyJ9fSwicmVxdWlyZWQiOlsic3RhdHVzIl0sInR5cGUiOiJvYmplY3QifSwicGhhc2UiOnsiZGVzY3JpcHRpb24iOiJwaGFzZSByZXByZXNlbnRzIHRoZSBjdXJyZW50IHBoYXNlIG9mIFBlcnNpc3RlbnRWb2x1bWVDbGFpbS4iLCJ0eXBlIjoic3RyaW5nIn19LCJ0eXBlIjoib2JqZWN0In19LCJ0eXBlIjoib2JqZWN0In0sImRpc2FibGVNYXN0ZXJOb2RlVG9sZXJhdGlvbiI6eyJkZXNjcmlwdGlvbiI6IkRpc2FibGVNYXN0ZXJOb2RlVG9sZXJhdGlvbiBjYW4gYmUgdXNlZCB0byB0dXJuIG9mZiB0aGUgYXJiaXRlciBtb24gdG9sZXJhdGlvbiBmb3IgdGhlIG1hc3RlciBub2RlIHRhaW50LiIsInR5cGUiOiJib29sZWFuIn0sImVuYWJsZSI6eyJ0eXBlIjoiYm9vbGVhbiJ9fSwidHlwZSI6Im9iamVjdCJ9LCJiYWNraW5nU3RvcmFnZUNsYXNzZXMiOnsiZGVzY3JpcHRpb24iOiJCYWNraW5nU3RvcmFnZUNsYXNzZXMgaXMgYSBsaXN0IG9mIHN0b3JhZ2UgY2xhc3NlcyB0aGF0IHdpbGwgYmUgcHJvdmlzaW9uZWQgYnkgdGhlIHN0b3JhZ2VjbHVzdGVyIGNvbnRyb2xsZXIgdG8gYmUgdXNlZCBpbiBzdG9yYWdlRGV2aWNlU2V0cyBzZWN0aW9uIG9mIHRoZSBDUi4iLCJpdGVtcyI6eyJkZXNjcmlwdGlvbiI6IkJhY2tpbmdTdG9yYWdlQ2xhc3MgZGVmaW5lcyB0aGUgYmFja2luZyBzdG9yYWdlY2xhc3MgZm9yIFN0b3JhZ2VEZXZpY2VTZXQiLCJwcm9wZXJ0aWVzIjp7Im1ldGFkYXRhIjp7InByb3BlcnRpZXMiOnsiYW5ub3RhdGlvbnMiOnsiYWRkaXRpb25hbFByb3BlcnRpZXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjoib2JqZWN0In0sImZpbmFsaXplcnMiOnsiaXRlbXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjoiYXJyYXkifSwibGFiZWxzIjp7ImFkZGl0aW9uYWxQcm9wZXJ0aWVzIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6Im9iamVjdCJ9LCJuYW1lIjp7InR5cGUiOiJzdHJpbmcifSwibmFtZXNwYWNlIjp7InR5cGUiOiJzdHJpbmcifX0sInR5cGUiOiJvYmplY3QifSwicGFyYW1ldGVycyI6eyJhZGRpdGlvbmFsUHJvcGVydGllcyI6eyJ0eXBlIjoic3RyaW5nIn0sImRlc2NyaXB0aW9uIjoiUGFyYW1ldGVycyBob2xkcyB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIHByb3Zpc2lvbmVyIHRoYXQgc2hvdWxkIGNyZWF0ZSB2b2x1bWVzIG9mIHRoaXMgc3RvcmFnZSBjbGFzcy4iLCJ0eXBlIjoib2JqZWN0In0sInByb3Zpc2lvbmVyIjp7ImRlc2NyaXB0aW9uIjoiUHJvdmlzaW9uZXIgaW5kaWNhdGVzIHRoZSB0eXBlIG9mIHRoZSBwcm92aXNpb25lci4iLCJ0eXBlIjoic3RyaW5nIn19LCJ0eXBlIjoib2JqZWN0In0sInR5cGUiOiJhcnJheSJ9LCJjc2kiOnsiZGVzY3JpcHRpb24iOiJDU0lEcml2ZXJTcGVjIGRlZmluZXMgdGhlIENTSSBkcml2ZXIgc2V0dGluZ3MgZm9yIHRoZSBTdG9yYWdlQ2x1c3Rlci4iLCJwcm9wZXJ0aWVzIjp7InJlYWRBZmZpbml0eSI6eyJkZXNjcmlwdGlvbiI6IlJlYWRBZmZpbml0eSBkZWZpbmVzIHRoZSByZWFkIGFmZmluaXR5IHNldHRpbmdzIGZvciBDU0kgZHJpdmVyLiIsInByb3BlcnRpZXMiOnsiY3J1c2hMb2NhdGlvbkxhYmVscyI6eyJkZXNjcmlwdGlvbiI6IkNydXNoTG9jYXRpb25MYWJlbHMgZGVmaW5lcyB3aGljaCBub2RlIGxhYmVscyB0byB1c2UgYXMgQ1JVU0ggbG9jYXRpb24uIFRoaXMgc2hvdWxkIGNvcnJlc3BvbmQgdG8gdGhlIHZhbHVlcyBzZXQgaW4gdGhlIENSVVNIIG1hcC4iLCJpdGVtcyI6eyJ0eXBlIjoic3RyaW5nIn0sInR5cGUiOiJhcnJheSJ9LCJlbmFibGVkIjp7ImRlc2NyaXB0aW9uIjoiRW5hYmxlcyByZWFkIGFmZmluaXR5IGZvciBDU0kgZHJpdmVyLiIsInR5cGUiOiJib29sZWFuIn19LCJ0eXBlIjoib2JqZWN0In19LCJ0eXBlIjoib2JqZWN0In0sImRlZmF1bHRTdG9yYWdlUHJvZmlsZSI6eyJkZXNjcmlwdGlvbiI6IkRlZmF1bHRTdG9yYWdlUHJvZmlsZSBpcyB0aGUgZGVmYXVsdCBzdG9yYWdlIHByb2ZpbGUgdG8gdXNlIGZvciB0aGUgc3RvcmFnZXJlcXVlc3QgYXMgU3RvcmFnZVByb2ZpbGUgaXMgb3B0aW9uYWwuIiwidHlwZSI6InN0cmluZyJ9LCJlbmFibGVDZXBoVG9vbHMiOnsiZGVzY3JpcHRpb24iOiJFbmFibGVDZXBoVG9vbHMgdG9nZ2xlcyBvbiB3aGV0aGVyIG9yIG5vdCB0aGUgY2VwaCB0b29scyBwb2Qgc2hvdWxkIGJlIGRlcGxveWVkLiBEZWZhdWx0cyB0byBmYWxzZSIsInR5cGUiOiJib29sZWFuIn0sImVuY3J5cHRpb24iOnsiZGVzY3JpcHRpb24iOiJFbmNyeXB0aW9uU3BlYyBkZWZpbmVzIGlmIGVuY3J5cHRpb24gc2hvdWxkIGJlIGVuYWJsZWQgZm9yIHRoZSBTdG9yYWdlIENsdXN0ZXIgSXQgaXMgb3B0aW9uYWwgYW5kIGRlZmF1bHRzIHRvIGZhbHNlLiIsInByb3BlcnRpZXMiOnsiY2x1c3RlcldpZGUiOnsidHlwZSI6ImJvb2xlYW4ifSwiZW5hYmxlIjp7ImRlc2NyaXB0aW9uIjoiZGVwcmVjYXRlZCBmcm9tIE9DUyA0LjEwIG9ud2FyZHMsIGFjdGluZyBhcyBhIGR1bW15LCBVSSB3aWxsIGtlZXAgc2VuZGluZyB0aGlzIGZsYWcgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgKE9DUCA0LjEwICsgT0NTIDQuOSkiLCJ0eXBlIjoiYm9vbGVhbiJ9LCJrZXlSb3RhdGlvbiI6eyJkZXNjcmlwdGlvbiI6IktleVJvdGF0aW9uIGRlZmluZXMgb3B0aW9ucyBmb3IgS2V5IFJvdGF0aW9uLiIsInByb3BlcnRpZXMiOnsiZW5hYmxlIjp7ImRlc2NyaXB0aW9uIjoiRW5hYmxlIHJlcHJlc2VudHMgd2hldGhlciB0aGUga2V5IHJvdGF0aW9uIGlzIGVuYWJsZWQuIiwidHlwZSI6ImJvb2xlYW4ifSwic2NoZWR1bGUiOnsiZGVmYXVsdCI6IkB3ZWVrbHkiLCJkZXNjcmlwdGlvbiI6IlNjaGVkdWxlIHJlcHJlc2VudHMgdGhlIGNyb24gc2NoZWR1bGUgZm9yIGtleSByb3RhdGlvbi4iLCJ0eXBlIjoic3RyaW5nIn19LCJ0eXBlIjoib2JqZWN0In0sImttcyI6eyJkZXNjcmlwdGlvbiI6IktleU1hbmFnZW1lbnRTZXJ2aWNlU3BlYyBwcm92aWRlcyBhIHdheSB0byBlbmFibGUgS01TIiwicHJvcGVydGllcyI6eyJlbmFibGUiOnsidHlwZSI6ImJvb2xlYW4ifX0sInR5cGUiOiJvYmplY3QifSwic3RvcmFnZUNsYXNzIjp7InR5cGUiOiJib29sZWFuIn0sInN0b3JhZ2VDbGFzc05hbWUiOnsiZGVzY3JpcHRpb24iOiJTdG9yYWdlQ2xhc3NOYW1lIHNwZWNpZmllcyB0aGUgbmFtZSBvZiB0aGUgc3RvcmFnZSBjbGFzcyBjcmVhdGVkIGZvciBjZXBoIGVuY3J5cHRlZCBibG9jayBwb29scyIsIm1heExlbmd0aCI6MjUzLCJwYXR0ZXJuIjoiXlthLXowLTldKFstYS16MC05XSpbYS16MC05XSk/KFxcXFwuW2EtejAtOV0oWy1hLXowLTldKlthLXowLTldKT8pKiQiLCJ0eXBlIjoic3RyaW5nIn19LCJ0eXBlIjoib2JqZWN0In0sImV4dGVybmFsU3RvcmFnZSI6eyJkZXNjcmlwdGlvbiI6IkV4dGVybmFsU3RvcmFnZSBpcyBvcHRpb25hbCBhbmQgZGVmYXVsdHMgdG8gZmFsc2UuIFdoZW4gc2V0IHRvIHRydWUsIE9DUyB3aWxsIGNvbm5lY3QgdG8gYW4gZXh0ZXJuYWwgT0NTIFN0b3JhZ2UgQ2x1c3RlciBpbnN0ZWFkIG9mIHByb3Zpc2lvbmluZyBvbmUgbG9jYWxseS4iLCJwcm9wZXJ0aWVzIjp7ImVuYWJsZSI6eyJ0eXBlIjoiYm9vbGVhbiJ9fSwidHlwZSI6Im9iamVjdCJ9LCJmbGV4aWJsZVNjYWxpbmciOnsiZGVzY3JpcHRpb24iOiJJZiBlbmFibGVkLCBzZXRzIHRoZSBmYWlsdXJlRG9tYWluIHRvIGhvc3QsIGFsbG93aW5nIGRldmljZXMgdG8gYmUgZGlzdHJpYnV0ZWQgZXZlbmx5IGFjcm9zcyBhbGwgbm9kZXMsIHJlZ2FyZGxlc3Mgb2YgZGlzdHJpYnV0aW9uIGluIHpvbmVzIG9yIHJhY2tzLiIsInR5cGUiOiJib29sZWFuIn0sImhvc3ROZXR3b3JrIjp7ImRlc2NyaXB0aW9uIjoiSG9zdE5ldHdvcmsgZGVmYXVsdHMgdG8gZmFsc2UiLCJ0eXBlIjoiYm9vbGVhbiJ9LCJpbnN0YW5jZVR5cGUiOnsidHlwZSI6InN0cmluZyJ9LCJsYWJlbFNlbGVjdG9yIjp7ImRlc2NyaXB0aW9uIjoiTGFiZWxTZWxlY3RvciBpcyB1c2VkIHRvIHNwZWNpZnkgY3VzdG9tIGxhYmVscyBvZiBub2RlcyB0byBydW4gT0NTIG9uIiwicHJvcGVydGllcyI6eyJtYXRjaEV4cHJlc3Npb25zIjp7ImRlc2NyaXB0aW9uIjoibWF0Y2hFeHByZXNzaW9ucyBpcyBhIGxpc3Qgb2YgbGFiZWwgc2VsZWN0b3IgcmVxdWlyZW1lbnRzLiBUaGUgcmVxdWlyZW1lbnRzIGFyZSBBTkRlZC4iLCJpdGVtcyI6eyJkZXNjcmlwdGlvbiI6IkEgbGFiZWwgc2VsZWN0b3IgcmVxdWlyZW1lbnQgaXMgYSBzZWxlY3RvciB0aGF0IGNvbnRhaW5zIHZhbHVlcywgYSBrZXksIGFuZCBhbiBvcGVyYXRvciB0aGF0IHJlbGF0ZXMgdGhlIGtleSBhbmQgdmFsdWVzLiIsInByb3BlcnRpZXMiOnsia2V5Ijp7ImRlc2NyaXB0aW9uIjoia2V5IGlzIHRoZSBsYWJlbCBrZXkgdGhhdCB0aGUgc2VsZWN0b3IgYXBwbGllcyB0by4iLCJ0eXBlIjoic3RyaW5nIn0sIm9wZXJhdG9yIjp7ImRlc2NyaXB0aW9uIjoib3BlcmF0b3IgcmVwcmVzZW50cyBhIGtleSdzIHJlbGF0aW9uc2hpcCB0byBhIHNldCBvZiB2YWx1ZXMuIFZhbGlkIG9wZXJhdG9ycyBhcmUgSW4sIE5vdEluLCBFeGlzdHMgYW5kIERvZXNOb3RFeGlzdC4iLCJ0eXBlIjoic3RyaW5nIn0sInZhbHVlcyI6eyJkZXNjcmlwdGlvbiI6InZhbHVlcyBpcyBhbiBhcnJheSBvZiBzdHJpbmcgdmFsdWVzLiBJZiB0aGUgb3BlcmF0b3IgaXMgSW4gb3IgTm90SW4sIHRoZSB2YWx1ZXMgYXJyYXkgbXVzdCBiZSBub24tZW1wdHkuIElmIHRoZSBvcGVyYXRvciBpcyBFeGlzdHMgb3IgRG9lc05vdEV4aXN0LCB0aGUgdmFsdWVzIGFycmF5IG11c3QgYmUgZW1wdHkuIFRoaXMgYXJyYXkgaXMgcmVwbGFjZWQgZHVyaW5nIGEgc3RyYXRlZ2ljIG1lcmdlIHBhdGNoLiIsIml0ZW1zIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6ImFycmF5In19LCJyZXF1aXJlZCI6WyJrZXkiLCJvcGVyYXRvciJdLCJ0eXBlIjoib2JqZWN0In0sInR5cGUiOiJhcnJheSJ9LCJtYXRjaExhYmVscyI6eyJhZGRpdGlvbmFsUHJvcGVydGllcyI6eyJ0eXBlIjoic3RyaW5nIn0sImRlc2NyaXB0aW9uIjoibWF0Y2hMYWJlbHMgaXMgYSBtYXAgb2Yge2tleSx2YWx1ZX0gcGFpcnMuIEEgc2luZ2xlIHtrZXksdmFsdWV9IGluIHRoZSBtYXRjaExhYmVscyBtYXAgaXMgZXF1aXZhbGVudCB0byBhbiBlbGVtZW50IG9mIG1hdGNoRXhwcmVzc2lvbnMsIHdob3NlIGtleSBmaWVsZCBpcyBcImtleVwiLCB0aGUgb3BlcmF0b3IgaXMgXCJJblwiLCBhbmQgdGhlIHZhbHVlcyBhcnJheSBjb250YWlucyBvbmx5IFwidmFsdWVcIi4gVGhlIHJlcXVpcmVtZW50cyBhcmUgQU5EZWQuIiwidHlwZSI6Im9iamVjdCJ9fSwidHlwZSI6Im9iamVjdCIsIngta3ViZXJuZXRlcy1tYXAtdHlwZSI6ImF0b21pYyJ9LCJsb2dDb2xsZWN0b3IiOnsiZGVzY3JpcHRpb24iOiJMb2dnaW5nIHJlcHJlc2VudHMgbG9nZ2luZ3Mgc2V0dGluZ3MiLCJudWxsYWJsZSI6dHJ1ZSwicHJvcGVydGllcyI6eyJlbmFibGVkIjp7ImRlc2NyaXB0aW9uIjoiRW5hYmxlZCByZXByZXNlbnRzIHdoZXRoZXIgdGhlIGxvZyBjb2xsZWN0b3IgaXMgZW5hYmxlZCIsInR5cGUiOiJib29sZWFuIn0sIm1heExvZ1NpemUiOnsiYW55T2YiOlt7InR5cGUiOiJpbnRlZ2VyIn0seyJ0eXBlIjoic3RyaW5nIn1dLCJkZXNjcmlwdGlvbiI6Ik1heExvZ1NpemUgaXMgdGhlIG1heGltdW0gc2l6ZSBvZiB0aGUgbG9nIHBlciBjZXBoIGRhZW1vbnMuIE11c3QgYmUgYXQgbGVhc3QgMU0uIiwicGF0dGVybiI6Il4oXFwrfC0pPygoWzAtOV0rKFxcLlswLTldKik/KXwoXFwuWzAtOV0rKSkoKFtLTUdUUEVdaSl8W251bWtNR1RQRV18KFtlRV0oXFwrfC0pPygoWzAtOV0rKFxcLlswLTldKik/KXwoXFwuWzAtOV0rKSkpKT8kIiwieC1rdWJlcm5ldGVzLWludC1vci1zdHJpbmciOnRydWV9LCJwZXJpb2RpY2l0eSI6eyJkZXNjcmlwdGlvbiI6IlBlcmlvZGljaXR5IGlzIHRoZSBwZXJpb2RpY2l0eSBvZiB0aGUgbG9nIHJvdGF0aW9uLiIsInBhdHRlcm4iOiJeJHxeKGhvdXJseXxkYWlseXx3ZWVrbHl8bW9udGhseXwxaHwyNGh8MWQpJCIsInR5cGUiOiJzdHJpbmcifX0sInR5cGUiOiJvYmplY3QifSwibWFuYWdlTm9kZXMiOnsidHlwZSI6ImJvb2xlYW4ifSwibWFuYWdlZFJlc291cmNlcyI6eyJkZXNjcmlwdGlvbiI6Ik1hbmFnZWRSZXNvdXJjZXMgc3BlY2lmaWVzIGhvdyB0byBkZWFsIHdpdGggYXV4aWxpYXJ5IHJlc291cmNlcyByZWNvbmNpbGVkIHdpdGggdGhlIFN0b3JhZ2VDbHVzdGVyIiwicHJvcGVydGllcyI6eyJjZXBoQmxvY2tQb29scyI6eyJkZXNjcmlwdGlvbiI6Ik1hbmFnZUNlcGhCbG9ja1Bvb2xzIGRlZmluZXMgaG93IHRvIHJlY29uY2lsZSBDZXBoQmxvY2tQb29scyIsInByb3BlcnRpZXMiOnsiZGVmYXVsdFN0b3JhZ2VDbGFzcyI6eyJkZXNjcmlwdGlvbiI6ImlmIHNldCB0byB0cnVlLCB0aGUgc3RvcmFnZUNsYXNzIGNyZWF0ZWQgZm9yIGNlcGhCbG9ja1Bvb2xzIHdpbGwgYmUgYW5ub3RhdGVkIGFzIHRoZSBkZWZhdWx0IGZvciB0aGUgd2hvbGUgY2x1c3RlciIsInR5cGUiOiJib29sZWFuIn0sImRpc2FibGVTbmFwc2hvdENsYXNzIjp7InR5cGUiOiJib29sZWFuIn0sImRpc2FibGVTdG9yYWdlQ2xhc3MiOnsidHlwZSI6ImJvb2xlYW4ifSwicmVjb25jaWxlU3RyYXRlZ3kiOnsidHlwZSI6InN0cmluZyJ9LCJzdG9yYWdlQ2xhc3NOYW1lIjp7ImRlc2NyaXB0aW9uIjoiU3RvcmFnZUNsYXNzTmFtZSBzcGVjaWZpZXMgdGhlIG5hbWUgb2YgdGhlIHN0b3JhZ2UgY2xhc3MgY3JlYXRlZCBmb3IgY2VwaCBibG9jayBwb29scyIsIm1heExlbmd0aCI6MjUzLCJwYXR0ZXJuIjoiXlthLXowLTldKFstYS16MC05XSpbYS16MC05XSk/KFxcXFwuW2EtejAtOV0oWy1hLXowLTldKlthLXowLTldKT8pKiQiLCJ0eXBlIjoic3RyaW5nIn0sInZpcnR1YWxpemF0aW9uU3RvcmFnZUNsYXNzTmFtZSI6eyJkZXNjcmlwdGlvbiI6IlZpcnR1YWxpemF0aW9uU3RvcmFnZUNsYXNzTmFtZSBzcGVjaWZpZXMgdGhlIG5hbWUgb2YgdGhlIHN0b3JhZ2UgY2xhc3MgY3JlYXRlZCBmb3IgY2VwaCBibG9jayBwb29scyBmb3IgdmlydHVhbGl6YXRpb24gZW52aXJvbm1lbnQiLCJtYXhMZW5ndGgiOjI1MywicGF0dGVybiI6Il5bYS16MC05XShbLWEtejAtOV0qW2EtejAtOV0pPyhcXFxcLlthLXowLTldKFstYS16MC05XSpbYS16MC05XSk/KSokIiwidHlwZSI6InN0cmluZyJ9fSwidHlwZSI6Im9iamVjdCJ9LCJjZXBoQ2x1c3RlciI6eyJkZXNjcmlwdGlvbiI6Ik1hbmFnZUNlcGhDbHVzdGVyIGRlZmluZXMgaG93IHRvIHJlY29uY2lsZSB0aGUgQ2VwaCBjbHVzdGVyIGRlZmluaXRpb24iLCJwcm9wZXJ0aWVzIjp7ImNvbnRpbnVlVXBncmFkZUFmdGVyQ2hlY2tzRXZlbklmTm90SGVhbHRoeSI6eyJkZXNjcmlwdGlvbiI6IldoZXRoZXIgb3Igbm90IGNvbnRpbnVlIGlmIFBHcyBhcmUgbm90IGNsZWFuIGR1cmluZyBhbiB1cGdyYWRlIiwidHlwZSI6ImJvb2xlYW4ifSwibWdyQ291bnQiOnsiZW51bSI6WzEsMl0sInR5cGUiOiJpbnRlZ2VyIn0sIm1vbkNvdW50Ijp7ImVudW0iOlszLDVdLCJ0eXBlIjoiaW50ZWdlciJ9LCJvc2RNYWludGVuYW5jZVRpbWVvdXQiOnsiZGVzY3JpcHRpb24iOiJBIGR1cmF0aW9uIGluIG1pbnV0ZXMgdGhhdCBkZXRlcm1pbmVzIGhvdyBsb25nIGFuIGVudGlyZSBmYWlsdXJlRG9tYWluIGxpa2UgYHJlZ2lvbi96b25lL2hvc3RgIHdpbGwgYmUgaGVsZCBpbiBgbm9vdXRgIChpbiBhZGRpdGlvbiB0byB0aGUgZGVmYXVsdCBET1dOL09VVCBpbnRlcnZhbCkgd2hlbiBpdCBpcyBkcmFpbmluZy4gVGhpcyBpcyBvbmx5IHJlbGV2YW50IHdoZW4gIGBtYW5hZ2VQb2RCdWRnZXRzYCBpcyBgdHJ1ZWAgaW4gY2VwaENsdXN0ZXIgQ1IuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGAzMGAgbWludXRlcy4iLCJmb3JtYXQiOiJpbnQ2NCIsInR5cGUiOiJpbnRlZ2VyIn0sInJlY29uY2lsZVN0cmF0ZWd5Ijp7InR5cGUiOiJzdHJpbmcifSwic2tpcFVwZ3JhZGVDaGVja3MiOnsiZGVzY3JpcHRpb24iOiJXaGV0aGVyIG9yIG5vdCB1cGdyYWRlIHNob3VsZCBjb250aW51ZSBldmVuIGlmIGEgY2hlY2sgZmFpbHMgVGhpcyBtZWFucyBDZXBoJ3Mgc3RhdHVzIGNvdWxkIGJlIGRlZ3JhZGVkIGFuZCB3ZSBkb24ndCByZWNvbW1lbmQgdXBncmFkaW5nIGJ1dCB5b3UgbWlnaHQgZGVjaWRlIG90aGVyd2lzZSBVc2UgYXQgeW91ciBPV04gcmlzayIsInR5cGUiOiJib29sZWFuIn0sInVwZ3JhZGVPU0RSZXF1aXJlc0hlYWx0aHlQR3MiOnsiZGVzY3JpcHRpb24iOiJXaGV0aGVyIG9yIG5vdCByZXF1aXJlcyBQR3MgYXJlIGNsZWFuIGJlZm9yZSBhbiBPU0QgdXBncmFkZS4gSWYgc2V0IHRvIGB0cnVlYCBPU0QgdXBncmFkZSBwcm9jZXNzIHdvbid0IHN0YXJ0IHVudGlsIFBHcyBhcmUgaGVhbHRoeS4gVGhpcyBjb25maWd1cmF0aW9uIHdpbGwgYmUgaWdub3JlZCBpZiBgc2tpcFVwZ3JhZGVDaGVja3NgIGlzIGB0cnVlYC4iLCJ0eXBlIjoiYm9vbGVhbiJ9LCJ3YWl0VGltZW91dEZvckhlYWx0aHlPU0RJbk1pbnV0ZXMiOnsiZGVzY3JpcHRpb24iOiJXYWl0VGltZW91dEZvckhlYWx0aHlPU0RJbk1pbnV0ZXMgZGVmaW5lcyB0aGUgdGltZSB0aGUgb3BlcmF0b3Igd291bGQgd2FpdCBiZWZvcmUgYW4gT1NEIGNhbiBiZSBzdG9wcGVkIGZvciB1cGdyYWRlIG9yIHJlc3RhcnQuIElmIGBjb250aW51ZVVwZ3JhZGVBZnRlckNoZWNrc0V2ZW5JZk5vdEhlYWx0aHlgIGlzIGBmYWxzZWAgYW5kIHRoZSB0aW1lb3V0IGV4Y2VlZHMgYW5kIE9TRCBpcyBub3Qgb2sgdG8gc3RvcCwgdGhlbiB0aGUgb3BlcmF0b3Igd291bGQgc2tpcCB1cGdyYWRlIGZvciB0aGUgY3VycmVudCBPU0QgYW5kIHByb2NlZWQgd2l0aCB0aGUgbmV4dCBvbmUuIElmIGBjb250aW51ZVVwZ3JhZGVBZnRlckNoZWNrc0V2ZW5JZk5vdEhlYWx0aHlgIGlzIGB0cnVlYCwgdGhlbiBvcGVyYXRvciB3b3VsZCBjb250aW51ZSB3aXRoIHRoZSB1cGdyYWRlIG9mIGFuIE9TRCBldmVuIGlmIGl0cyBub3Qgb2sgdG8gc3RvcCBhZnRlciB0aGUgdGltZW91dC4gVGhpcyB0aW1lb3V0IHdvbid0IGJlIGFwcGxpZWQgaWYgYHNraXBVcGdyYWRlQ2hlY2tzYCBpcyBgdHJ1ZWAuIFRoZSBkZWZhdWx0IHdhaXQgdGltZW91dCBpcyAxMCBtaW51dGVzLiIsImZvcm1hdCI6ImludDY0IiwidHlwZSI6ImludGVnZXIifX0sInR5cGUiOiJvYmplY3QifSwiY2VwaENvbmZpZyI6eyJkZXNjcmlwdGlvbiI6Ik1hbmFnZUNlcGhDb25maWcgZGVmaW5lcyBob3cgdG8gcmVjb25jaWxlIHRoZSBDZXBoIGNvbmZpZ3VyYXRpb24iLCJwcm9wZXJ0aWVzIjp7InJlY29uY2lsZVN0cmF0ZWd5Ijp7InR5cGUiOiJzdHJpbmcifX0sInR5cGUiOiJvYmplY3QifSwiY2VwaERhc2hib2FyZCI6eyJkZXNjcmlwdGlvbiI6Ik1hbmFnZUNlcGhEYXNoYm9hcmQgZGVmaW5lcyBob3cgdG8gcmVjb25jaWxlIENlcGggZGFzaGJvYXJkIiwicHJvcGVydGllcyI6eyJlbmFibGUiOnsidHlwZSI6ImJvb2xlYW4ifSwic3NsIjp7ImRlc2NyaXB0aW9uIjoic2VydmUgdGhlIGRhc2hib2FyZCB1c2luZyBTU0wiLCJ0eXBlIjoiYm9vbGVhbiJ9fSwidHlwZSI6Im9iamVjdCJ9LCJjZXBoRmlsZXN5c3RlbXMiOnsiZGVzY3JpcHRpb24iOiJNYW5hZ2VDZXBoRmlsZXN5c3RlbXMgZGVmaW5lcyBob3cgdG8gcmVjb25jaWxlIENlcGhGaWxlc3lzdGVtcyIsInByb3BlcnRpZXMiOnsiYWN0aXZlTWV0YWRhdGFTZXJ2ZXJzIjp7InR5cGUiOiJpbnRlZ2VyIn0sImFkZGl0aW9uYWxEYXRhUG9vbHMiOnsiZGVzY3JpcHRpb24iOiJBZGRpdGlvbmFsRGF0YVBvb2xzIHNwZWNpZmllcyBsaXN0IG9mIGFkZGl0aW9uYWwgbmFtZWQgY2VwaGZzIGRhdGEgcG9vbHMiLCJpdGVtcyI6eyJkZXNjcmlwdGlvbiI6Ik5hbWVkUG9vbFNwZWMgcmVwcmVzZW50cyB0aGUgbmFtZWQgY2VwaCBwb29sIHNwZWMiLCJwcm9wZXJ0aWVzIjp7ImFwcGxpY2F0aW9uIjp7ImRlc2NyaXB0aW9uIjoiVGhlIGFwcGxpY2F0aW9uIG5hbWUgdG8gc2V0IG9uIHRoZSBwb29sLiBPbmx5IGV4cGVjdGVkIHRvIGJlIHNldCBmb3Igcmd3IHBvb2xzLiIsInR5cGUiOiJzdHJpbmcifSwiY29tcHJlc3Npb25Nb2RlIjp7ImRlc2NyaXB0aW9uIjoiREVQUkVDQVRFRDogdXNlIFBhcmFtZXRlcnMgaW5zdGVhZCwgZS5nLiwgUGFyYW1ldGVyc1tcImNvbXByZXNzaW9uX21vZGVcIl0gPSBcImZvcmNlXCIgVGhlIGlubGluZSBjb21wcmVzc2lvbiBtb2RlIGluIEJsdWVzdG9yZSBPU0QgdG8gc2V0IHRvIChvcHRpb25zIGFyZTogbm9uZSwgcGFzc2l2ZSwgYWdncmVzc2l2ZSwgZm9yY2UpIERvIE5PVCBzZXQgYSBkZWZhdWx0IHZhbHVlIGZvciBrdWJlYnVpbGRlciBhcyB0aGlzIHdpbGwgb3ZlcnJpZGUgdGhlIFBhcmFtZXRlcnMiLCJlbnVtIjpbIm5vbmUiLCJwYXNzaXZlIiwiYWdncmVzc2l2ZSIsImZvcmNlIiwiIl0sIm51bGxhYmxlIjp0cnVlLCJ0eXBlIjoic3RyaW5nIn0sImNydXNoUm9vdCI6eyJkZXNjcmlwdGlvbiI6IlRoZSByb290IG9mIHRoZSBjcnVzaCBoaWVyYXJjaHkgdXRpbGl6ZWQgYnkgdGhlIHBvb2wiLCJudWxsYWJsZSI6dHJ1ZSwidHlwZSI6InN0cmluZyJ9LCJkZXZpY2VDbGFzcyI6eyJkZXNjcmlwdGlvbiI6IlRoZSBkZXZpY2UgY2xhc3MgdGhlIE9TRCBzaG91bGQgc2V0IHRvIGZvciB1c2UgaW4gdGhlIHBvb2wiLCJudWxsYWJsZSI6dHJ1ZSwidHlwZSI6InN0cmluZyJ9LCJlbmFibGVSQkRTdGF0cyI6eyJkZXNjcmlwdGlvbiI6IkVuYWJsZVJCRFN0YXRzIGlzIHVzZWQgdG8gZW5hYmxlIGdhdGhlcmluZyBvZiBzdGF0aXN0aWNzIGZvciBhbGwgUkJEIGltYWdlcyBpbiB0aGUgcG9vbCIsInR5cGUiOiJib29sZWFuIn0sImVyYXN1cmVDb2RlZCI6eyJkZXNjcmlwdGlvbiI6IlRoZSBlcmFzdXJlIGNvZGUgc2V0dGluZ3MiLCJwcm9wZXJ0aWVzIjp7ImFsZ29yaXRobSI6eyJkZXNjcmlwdGlvbiI6IlRoZSBhbGdvcml0aG0gZm9yIGVyYXN1cmUgY29kaW5nIiwidHlwZSI6InN0cmluZyJ9LCJjb2RpbmdDaHVua3MiOnsiZGVzY3JpcHRpb24iOiJOdW1iZXIgb2YgY29kaW5nIGNodW5rcyBwZXIgb2JqZWN0IGluIGFuIGVyYXN1cmUgY29kZWQgc3RvcmFnZSBwb29sIChyZXF1aXJlZCBmb3IgZXJhc3VyZS1jb2RlZCBwb29sIHR5cGUpLiBUaGlzIGlzIHRoZSBudW1iZXIgb2YgT1NEcyB0aGF0IGNhbiBiZSBsb3N0IHNpbXVsdGFuZW91c2x5IGJlZm9yZSBkYXRhIGNhbm5vdCBiZSByZWNvdmVyZWQuIiwibWluaW11bSI6MCwidHlwZSI6ImludGVnZXIifSwiZGF0YUNodW5rcyI6eyJkZXNjcmlwdGlvbiI6Ik51bWJlciBvZiBkYXRhIGNodW5rcyBwZXIgb2JqZWN0IGluIGFuIGVyYXN1cmUgY29kZWQgc3RvcmFnZSBwb29sIChyZXF1aXJlZCBmb3IgZXJhc3VyZS1jb2RlZCBwb29sIHR5cGUpLiBUaGUgbnVtYmVyIG9mIGNodW5rcyByZXF1aXJlZCB0byByZWNvdmVyIGFuIG9iamVjdCB3aGVuIGFueSBzaW5nbGUgT1NEIGlzIGxvc3QgaXMgdGhlIHNhbWUgYXMgZGF0YUNodW5rcyBzbyBiZSBhd2FyZSB0aGF0IHRoZSBsYXJnZXIgdGhlIG51bWJlciBvZiBkYXRhIGNodW5rcywgdGhlIGhpZ2hlciB0aGUgY29zdCBvZiByZWNvdmVyeS4iLCJtaW5pbXVtIjowLCJ0eXBlIjoiaW50ZWdlciJ9fSwicmVxdWlyZWQiOlsiY29kaW5nQ2h1bmtzIiwiZGF0YUNodW5rcyJdLCJ0eXBlIjoib2JqZWN0In0sImZhaWx1cmVEb21haW4iOnsiZGVzY3JpcHRpb24iOiJUaGUgZmFpbHVyZSBkb21haW46IG9zZC9ob3N0LyhyZWdpb24gb3Igem9uZSBpZiBhdmFpbGFibGUpIC0gdGVjaG5pY2FsbHkgYWxzbyBhbnkgdHlwZSBpbiB0aGUgY3J1c2ggbWFwIiwidHlwZSI6InN0cmluZyJ9LCJtaXJyb3JpbmciOnsiZGVzY3JpcHRpb24iOiJUaGUgbWlycm9yaW5nIHNldHRpbmdzIiwicHJvcGVydGllcyI6eyJlbmFibGVkIjp7ImRlc2NyaXB0aW9uIjoiRW5hYmxlZCB3aGV0aGVyIHRoaXMgcG9vbCBpcyBtaXJyb3JlZCBvciBub3QiLCJ0eXBlIjoiYm9vbGVhbiJ9LCJtb2RlIjp7ImRlc2NyaXB0aW9uIjoiTW9kZSBpcyB0aGUgbWlycm9yaW5nIG1vZGU6IGVpdGhlciBwb29sIG9yIGltYWdlIiwidHlwZSI6InN0cmluZyJ9LCJwZWVycyI6eyJkZXNjcmlwdGlvbiI6IlBlZXJzIHJlcHJlc2VudHMgdGhlIHBlZXJzIHNwZWMiLCJudWxsYWJsZSI6dHJ1ZSwicHJvcGVydGllcyI6eyJzZWNyZXROYW1lcyI6eyJkZXNjcmlwdGlvbiI6IlNlY3JldE5hbWVzIHJlcHJlc2VudHMgdGhlIEt1YmVybmV0ZXMgU2VjcmV0IG5hbWVzIHRvIGFkZCByYmQtbWlycm9yIG9yIGNlcGhmcy1taXJyb3IgcGVlcnMiLCJpdGVtcyI6eyJ0eXBlIjoic3RyaW5nIn0sInR5cGUiOiJhcnJheSJ9fSwidHlwZSI6Im9iamVjdCJ9LCJzbmFwc2hvdFNjaGVkdWxlcyI6eyJkZXNjcmlwdGlvbiI6IlNuYXBzaG90U2NoZWR1bGVzIGlzIHRoZSBzY2hlZHVsaW5nIG9mIHNuYXBzaG90IGZvciBtaXJyb3JlZCBpbWFnZXMvcG9vbHMiLCJpdGVtcyI6eyJkZXNjcmlwdGlvbiI6IlNuYXBzaG90U2NoZWR1bGVTcGVjIHJlcHJlc2VudHMgdGhlIHNuYXBzaG90IHNjaGVkdWxpbmcgc2V0dGluZ3Mgb2YgYSBtaXJyb3JlZCBwb29sIiwicHJvcGVydGllcyI6eyJpbnRlcnZhbCI6eyJkZXNjcmlwdGlvbiI6IkludGVydmFsIHJlcHJlc2VudCB0aGUgcGVyaW9kaWNpdHkgb2YgdGhlIHNuYXBzaG90LiIsInR5cGUiOiJzdHJpbmcifSwicGF0aCI6eyJkZXNjcmlwdGlvbiI6IlBhdGggaXMgdGhlIHBhdGggdG8gc25hcHNob3QsIG9ubHkgdmFsaWQgZm9yIENlcGhGUyIsInR5cGUiOiJzdHJpbmcifSwic3RhcnRUaW1lIjp7ImRlc2NyaXB0aW9uIjoiU3RhcnRUaW1lIGluZGljYXRlcyB3aGVuIHRvIHN0YXJ0IHRoZSBzbmFwc2hvdCIsInR5cGUiOiJzdHJpbmcifX0sInR5cGUiOiJvYmplY3QifSwidHlwZSI6ImFycmF5In19LCJ0eXBlIjoib2JqZWN0In0sIm5hbWUiOnsiZGVzY3JpcHRpb24iOiJOYW1lIG9mIHRoZSBwb29sIiwidHlwZSI6InN0cmluZyJ9LCJwYXJhbWV0ZXJzIjp7ImFkZGl0aW9uYWxQcm9wZXJ0aWVzIjp7InR5cGUiOiJzdHJpbmcifSwiZGVzY3JpcHRpb24iOiJQYXJhbWV0ZXJzIGlzIGEgbGlzdCBvZiBwcm9wZXJ0aWVzIHRvIGVuYWJsZSBvbiBhIGdpdmVuIHBvb2wiLCJudWxsYWJsZSI6dHJ1ZSwidHlwZSI6Im9iamVjdCIsIngta3ViZXJuZXRlcy1wcmVzZXJ2ZS11bmtub3duLWZpZWxkcyI6dHJ1ZX0sInF1b3RhcyI6eyJkZXNjcmlwdGlvbiI6IlRoZSBxdW90YSBzZXR0aW5ncyIsIm51bGxhYmxlIjp0cnVlLCJwcm9wZXJ0aWVzIjp7Im1heEJ5dGVzIjp7ImRlc2NyaXB0aW9uIjoiTWF4Qnl0ZXMgcmVwcmVzZW50cyB0aGUgcXVvdGEgaW4gYnl0ZXMgRGVwcmVjYXRlZCBpbiBmYXZvciBvZiBNYXhTaXplIiwiZm9ybWF0IjoiaW50NjQiLCJ0eXBlIjoiaW50ZWdlciJ9LCJtYXhPYmplY3RzIjp7ImRlc2NyaXB0aW9uIjoiTWF4T2JqZWN0cyByZXByZXNlbnRzIHRoZSBxdW90YSBpbiBvYmplY3RzIiwiZm9ybWF0IjoiaW50NjQiLCJ0eXBlIjoiaW50ZWdlciJ9LCJtYXhTaXplIjp7ImRlc2NyaXB0aW9uIjoiTWF4U2l6ZSByZXByZXNlbnRzIHRoZSBxdW90YSBpbiBieXRlcyBhcyBhIHN0cmluZyIsInBhdHRlcm4iOiJeWzAtOV0rW1xcLl0/WzAtOV0qKFtLTUdUUEVdaXxba01HVFBFXSk/JCIsInR5cGUiOiJzdHJpbmcifX0sInR5cGUiOiJvYmplY3QifSwicmVwbGljYXRlZCI6eyJkZXNjcmlwdGlvbiI6IlRoZSByZXBsaWNhdGlvbiBzZXR0aW5ncyIsInByb3BlcnRpZXMiOnsiaHlicmlkU3RvcmFnZSI6eyJkZXNjcmlwdGlvbiI6Ikh5YnJpZFN0b3JhZ2UgcmVwcmVzZW50cyBoeWJyaWQgc3RvcmFnZSB0aWVyIHNldHRpbmdzIiwibnVsbGFibGUiOnRydWUsInByb3BlcnRpZXMiOnsicHJpbWFyeURldmljZUNsYXNzIjp7ImRlc2NyaXB0aW9uIjoiUHJpbWFyeURldmljZUNsYXNzIHJlcHJlc2VudHMgaGlnaCBwZXJmb3JtYW5jZSB0aWVyIChmb3IgZXhhbXBsZSBTU0Qgb3IgTlZNRSkgZm9yIFByaW1hcnkgT1NEIiwibWluTGVuZ3RoIjoxLCJ0eXBlIjoic3RyaW5nIn0sInNlY29uZGFyeURldmljZUNsYXNzIjp7ImRlc2NyaXB0aW9uIjoiU2Vjb25kYXJ5RGV2aWNlQ2xhc3MgcmVwcmVzZW50cyBsb3cgcGVyZm9ybWFuY2UgdGllciAoZm9yIGV4YW1wbGUgSEREcykgZm9yIHJlbWFpbmluZyBPU0RzIiwibWluTGVuZ3RoIjoxLCJ0eXBlIjoic3RyaW5nIn19LCJyZXF1aXJlZCI6WyJwcmltYXJ5RGV2aWNlQ2xhc3MiLCJzZWNvbmRhcnlEZXZpY2VDbGFzcyJdLCJ0eXBlIjoib2JqZWN0In0sInJlcGxpY2FzUGVyRmFpbHVyZURvbWFpbiI6eyJkZXNjcmlwdGlvbiI6IlJlcGxpY2FzUGVyRmFpbHVyZURvbWFpbiB0aGUgbnVtYmVyIG9mIHJlcGxpY2EgaW4gdGhlIHNwZWNpZmllZCBmYWlsdXJlIGRvbWFpbiIsIm1pbmltdW0iOjEsInR5cGUiOiJpbnRlZ2VyIn0sInJlcXVpcmVTYWZlUmVwbGljYVNpemUiOnsiZGVzY3JpcHRpb24iOiJSZXF1aXJlU2FmZVJlcGxpY2FTaXplIGlmIGZhbHNlIGFsbG93cyB5b3UgdG8gc2V0IHJlcGxpY2EgMSIsInR5cGUiOiJib29sZWFuIn0sInNpemUiOnsiZGVzY3JpcHRpb24iOiJTaXplIC0gTnVtYmVyIG9mIGNvcGllcyBwZXIgb2JqZWN0IGluIGEgcmVwbGljYXRlZCBzdG9yYWdlIHBvb2wsIGluY2x1ZGluZyB0aGUgb2JqZWN0IGl0c2VsZiAocmVxdWlyZWQgZm9yIHJlcGxpY2F0ZWQgcG9vbCB0eXBlKSIsIm1pbmltdW0iOjAsInR5cGUiOiJpbnRlZ2VyIn0sInN1YkZhaWx1cmVEb21haW4iOnsiZGVzY3JpcHRpb24iOiJTdWJGYWlsdXJlRG9tYWluIHRoZSBuYW1lIG9mIHRoZSBzdWItZmFpbHVyZSBkb21haW4iLCJ0eXBlIjoic3RyaW5nIn0sInRhcmdldFNpemVSYXRpbyI6eyJkZXNjcmlwdGlvbiI6IlRhcmdldFNpemVSYXRpbyBnaXZlcyBhIGhpbnQgKCUpIHRvIENlcGggaW4gdGVybXMgb2YgZXhwZWN0ZWQgY29uc3VtcHRpb24gb2YgdGhlIHRvdGFsIGNsdXN0ZXIgY2FwYWNpdHkiLCJ0eXBlIjoibnVtYmVyIn19LCJyZXF1aXJlZCI6WyJzaXplIl0sInR5cGUiOiJvYmplY3QifSwic3RhdHVzQ2hlY2siOnsiZGVzY3JpcHRpb24iOiJUaGUgbWlycm9yaW5nIHN0YXR1c0NoZWNrIiwicHJvcGVydGllcyI6eyJtaXJyb3IiOnsiZGVzY3JpcHRpb24iOiJIZWFsdGhDaGVja1NwZWMgcmVwcmVzZW50cyB0aGUgaGVhbHRoIGNoZWNrIG9mIGFuIG9iamVjdCBzdG9yZSBidWNrZXQiLCJudWxsYWJsZSI6dHJ1ZSwicHJvcGVydGllcyI6eyJkaXNhYmxlZCI6eyJ0eXBlIjoiYm9vbGVhbiJ9LCJpbnRlcnZhbCI6eyJkZXNjcmlwdGlvbiI6IkludGVydmFsIGlzIHRoZSBpbnRlcm5hbCBpbiBzZWNvbmQgb3IgbWludXRlIGZvciB0aGUgaGVhbHRoIGNoZWNrIHRvIHJ1biBsaWtlIDYwcyBmb3IgNjAgc2Vjb25kcyIsInR5cGUiOiJzdHJpbmcifSwidGltZW91dCI6eyJ0eXBlIjoic3RyaW5nIn19LCJ0eXBlIjoib2JqZWN0In19LCJ0eXBlIjoib2JqZWN0IiwieC1rdWJlcm5ldGVzLXByZXNlcnZlLXVua25vd24tZmllbGRzIjp0cnVlfX0sInR5cGUiOiJvYmplY3QifSwidHlwZSI6ImFycmF5In0sImRhdGFQb29sU3BlYyI6eyJkZXNjcmlwdGlvbiI6IkRhdGFQb29sU3BlYyBzcGVjaWZpZXMgdGhlIHBvb2wgc3BlY2lmaWNhdGlvbiBmb3IgdGhlIGRlZmF1bHQgY2VwaGZzIGRhdGEgcG9vbCIsInByb3BlcnRpZXMiOnsiYXBwbGljYXRpb24iOnsiZGVzY3JpcHRpb24iOiJUaGUgYXBwbGljYXRpb24gbmFtZSB0byBzZXQgb24gdGhlIHBvb2wuIE9ubHkgZXhwZWN0ZWQgdG8gYmUgc2V0IGZvciByZ3cgcG9vbHMuIiwidHlwZSI6InN0cmluZyJ9LCJjb21wcmVzc2lvbk1vZGUiOnsiZGVzY3JpcHRpb24iOiJERVBSRUNBVEVEOiB1c2UgUGFyYW1ldGVycyBpbnN0ZWFkLCBlLmcuLCBQYXJhbWV0ZXJzW1wiY29tcHJlc3Npb25fbW9kZVwiXSA9IFwiZm9yY2VcIiBUaGUgaW5saW5lIGNvbXByZXNzaW9uIG1vZGUgaW4gQmx1ZXN0b3JlIE9TRCB0byBzZXQgdG8gKG9wdGlvbnMgYXJlOiBub25lLCBwYXNzaXZlLCBhZ2dyZXNzaXZlLCBmb3JjZSkgRG8gTk9UIHNldCBhIGRlZmF1bHQgdmFsdWUgZm9yIGt1YmVidWlsZGVyIGFzIHRoaXMgd2lsbCBvdmVycmlkZSB0aGUgUGFyYW1ldGVycyIsImVudW0iOlsibm9uZSIsInBhc3NpdmUiLCJhZ2dyZXNzaXZlIiwiZm9yY2UiLCIiXSwibnVsbGFibGUiOnRydWUsInR5cGUiOiJzdHJpbmcifSwiY3J1c2hSb290Ijp7ImRlc2NyaXB0aW9uIjoiVGhlIHJvb3Qgb2YgdGhlIGNydXNoIGhpZXJhcmNoeSB1dGlsaXplZCBieSB0aGUgcG9vbCIsIm51bGxhYmxlIjp0cnVlLCJ0eXBlIjoic3RyaW5nIn0sImRldmljZUNsYXNzIjp7ImRlc2NyaXB0aW9uIjoiVGhlIGRldmljZSBjbGFzcyB0aGUgT1NEIHNob3VsZCBzZXQgdG8gZm9yIHVzZSBpbiB0aGUgcG9vbCIsIm51bGxhYmxlIjp0cnVlLCJ0eXBlIjoic3RyaW5nIn0sImVuYWJsZVJCRFN0YXRzIjp7ImRlc2NyaXB0aW9uIjoiRW5hYmxlUkJEU3RhdHMgaXMgdXNlZCB0byBlbmFibGUgZ2F0aGVyaW5nIG9mIHN0YXRpc3RpY3MgZm9yIGFsbCBSQkQgaW1hZ2VzIGluIHRoZSBwb29sIiwidHlwZSI6ImJvb2xlYW4ifSwiZXJhc3VyZUNvZGVkIjp7ImRlc2NyaXB0aW9uIjoiVGhlIGVyYXN1cmUgY29kZSBzZXR0aW5ncyIsInByb3BlcnRpZXMiOnsiYWxnb3JpdGhtIjp7ImRlc2NyaXB0aW9uIjoiVGhlIGFsZ29yaXRobSBmb3IgZXJhc3VyZSBjb2RpbmciLCJ0eXBlIjoic3RyaW5nIn0sImNvZGluZ0NodW5rcyI6eyJkZXNjcmlwdGlvbiI6Ik51bWJlciBvZiBjb2RpbmcgY2h1bmtzIHBlciBvYmplY3QgaW4gYW4gZXJhc3VyZSBjb2RlZCBzdG9yYWdlIHBvb2wgKHJlcXVpcmVkIGZvciBlcmFzdXJlLWNvZGVkIHBvb2wgdHlwZSkuIFRoaXMgaXMgdGhlIG51bWJlciBvZiBPU0RzIHRoYXQgY2FuIGJlIGxvc3Qgc2ltdWx0YW5lb3VzbHkgYmVmb3JlIGRhdGEgY2Fubm90IGJlIHJlY292ZXJlZC4iLCJtaW5pbXVtIjowLCJ0eXBlIjoiaW50ZWdlciJ9LCJkYXRhQ2h1bmtzIjp7ImRlc2NyaXB0aW9uIjoiTnVtYmVyIG9mIGRhdGEgY2h1bmtzIHBlciBvYmplY3QgaW4gYW4gZXJhc3VyZSBjb2RlZCBzdG9yYWdlIHBvb2wgKHJlcXVpcmVkIGZvciBlcmFzdXJlLWNvZGVkIHBvb2wgdHlwZSkuIFRoZSBudW1iZXIgb2YgY2h1bmtzIHJlcXVpcmVkIHRvIHJlY292ZXIgYW4gb2JqZWN0IHdoZW4gYW55IHNpbmdsZSBPU0QgaXMgbG9zdCBpcyB0aGUgc2FtZSBhcyBkYXRhQ2h1bmtzIHNvIGJlIGF3YXJlIHRoYXQgdGhlIGxhcmdlciB0aGUgbnVtYmVyIG9mIGRhdGEgY2h1bmtzLCB0aGUgaGlnaGVyIHRoZSBjb3N0IG9mIHJlY292ZXJ5LiIsIm1pbmltdW0iOjAsInR5cGUiOiJpbnRlZ2VyIn19LCJyZXF1aXJlZCI6WyJjb2RpbmdDaHVua3MiLCJkYXRhQ2h1bmtzIl0sInR5cGUiOiJvYmplY3QifSwiZmFpbHVyZURvbWFpbiI6eyJkZXNjcmlwdGlvbiI6IlRoZSBmYWlsdXJlIGRvbWFpbjogb3NkL2hvc3QvKHJlZ2lvbiBvciB6b25lIGlmIGF2YWlsYWJsZSkgLSB0ZWNobmljYWxseSBhbHNvIGFueSB0eXBlIGluIHRoZSBjcnVzaCBtYXAiLCJ0eXBlIjoic3RyaW5nIn0sIm1pcnJvcmluZyI6eyJkZXNjcmlwdGlvbiI6IlRoZSBtaXJyb3Jpbmcgc2V0dGluZ3MiLCJwcm9wZXJ0aWVzIjp7ImVuYWJsZWQiOnsiZGVzY3JpcHRpb24iOiJFbmFibGVkIHdoZXRoZXIgdGhpcyBwb29sIGlzIG1pcnJvcmVkIG9yIG5vdCIsInR5cGUiOiJib29sZWFuIn0sIm1vZGUiOnsiZGVzY3JpcHRpb24iOiJNb2RlIGlzIHRoZSBtaXJyb3JpbmcgbW9kZTogZWl0aGVyIHBvb2wgb3IgaW1hZ2UiLCJ0eXBlIjoic3RyaW5nIn0sInBlZXJzIjp7ImRlc2NyaXB0aW9uIjoiUGVlcnMgcmVwcmVzZW50cyB0aGUgcGVlcnMgc3BlYyIsIm51bGxhYmxlIjp0cnVlLCJwcm9wZXJ0aWVzIjp7InNlY3JldE5hbWVzIjp7ImRlc2NyaXB0aW9uIjoiU2VjcmV0TmFtZXMgcmVwcmVzZW50cyB0aGUgS3ViZXJuZXRlcyBTZWNyZXQgbmFtZXMgdG8gYWRkIHJiZC1taXJyb3Igb3IgY2VwaGZzLW1pcnJvciBwZWVycyIsIml0ZW1zIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6ImFycmF5In19LCJ0eXBlIjoib2JqZWN0In0sInNuYXBzaG90U2NoZWR1bGVzIjp7ImRlc2NyaXB0aW9uIjoiU25hcHNob3RTY2hlZHVsZXMgaXMgdGhlIHNjaGVkdWxpbmcgb2Ygc25hcHNob3QgZm9yIG1pcnJvcmVkIGltYWdlcy9wb29scyIsIml0ZW1zIjp7ImRlc2NyaXB0aW9uIjoiU25hcHNob3RTY2hlZHVsZVNwZWMgcmVwcmVzZW50cyB0aGUgc25hcHNob3Qgc2NoZWR1bGluZyBzZXR0aW5ncyBvZiBhIG1pcnJvcmVkIHBvb2wiLCJwcm9wZXJ0aWVzIjp7ImludGVydmFsIjp7ImRlc2NyaXB0aW9uIjoiSW50ZXJ2YWwgcmVwcmVzZW50IHRoZSBwZXJpb2RpY2l0eSBvZiB0aGUgc25hcHNob3QuIiwidHlwZSI6InN0cmluZyJ9LCJwYXRoIjp7ImRlc2NyaXB0aW9uIjoiUGF0aCBpcyB0aGUgcGF0aCB0byBzbmFwc2hvdCwgb25seSB2YWxpZCBmb3IgQ2VwaEZTIiwidHlwZSI6InN0cmluZyJ9LCJzdGFydFRpbWUiOnsiZGVzY3JpcHRpb24iOiJTdGFydFRpbWUgaW5kaWNhdGVzIHdoZW4gdG8gc3RhcnQgdGhlIHNuYXBzaG90IiwidHlwZSI6InN0cmluZyJ9fSwidHlwZSI6Im9iamVjdCJ9LCJ0eXBlIjoiYXJyYXkifX0sInR5cGUiOiJvYmplY3QifSwicGFyYW1ldGVycyI6eyJhZGRpdGlvbmFsUHJvcGVydGllcyI6eyJ0eXBlIjoic3RyaW5nIn0sImRlc2NyaXB0aW9uIjoiUGFyYW1ldGVycyBpcyBhIGxpc3Qgb2YgcHJvcGVydGllcyB0byBlbmFibGUgb24gYSBnaXZlbiBwb29sIiwibnVsbGFibGUiOnRydWUsInR5cGUiOiJvYmplY3QiLCJ4LWt1YmVybmV0ZXMtcHJlc2VydmUtdW5rbm93bi1maWVsZHMiOnRydWV9LCJxdW90YXMiOnsiZGVzY3JpcHRpb24iOiJUaGUgcXVvdGEgc2V0dGluZ3MiLCJudWxsYWJsZSI6dHJ1ZSwicHJvcGVydGllcyI6eyJtYXhCeXRlcyI6eyJkZXNjcmlwdGlvbiI6Ik1heEJ5dGVzIHJlcHJlc2VudHMgdGhlIHF1b3RhIGluIGJ5dGVzIERlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgTWF4U2l6ZSIsImZvcm1hdCI6ImludDY0IiwidHlwZSI6ImludGVnZXIifSwibWF4T2JqZWN0cyI6eyJkZXNjcmlwdGlvbiI6Ik1heE9iamVjdHMgcmVwcmVzZW50cyB0aGUgcXVvdGEgaW4gb2JqZWN0cyIsImZvcm1hdCI6ImludDY0IiwidHlwZSI6ImludGVnZXIifSwibWF4U2l6ZSI6eyJkZXNjcmlwdGlvbiI6Ik1heFNpemUgcmVwcmVzZW50cyB0aGUgcXVvdGEgaW4gYnl0ZXMgYXMgYSBzdHJpbmciLCJwYXR0ZXJuIjoiXlswLTldK1tcXC5dP1swLTldKihbS01HVFBFXWl8W2tNR1RQRV0pPyQiLCJ0eXBlIjoic3RyaW5nIn19LCJ0eXBlIjoib2JqZWN0In0sInJlcGxpY2F0ZWQiOnsiZGVzY3JpcHRpb24iOiJUaGUgcmVwbGljYXRpb24gc2V0dGluZ3MiLCJwcm9wZXJ0aWVzIjp7Imh5YnJpZFN0b3JhZ2UiOnsiZGVzY3JpcHRpb24iOiJIeWJyaWRTdG9yYWdlIHJlcHJlc2VudHMgaHlicmlkIHN0b3JhZ2UgdGllciBzZXR0aW5ncyIsIm51bGxhYmxlIjp0cnVlLCJwcm9wZXJ0aWVzIjp7InByaW1hcnlEZXZpY2VDbGFzcyI6eyJkZXNjcmlwdGlvbiI6IlByaW1hcnlEZXZpY2VDbGFzcyByZXByZXNlbnRzIGhpZ2ggcGVyZm9ybWFuY2UgdGllciAoZm9yIGV4YW1wbGUgU1NEIG9yIE5WTUUpIGZvciBQcmltYXJ5IE9TRCIsIm1pbkxlbmd0aCI6MSwidHlwZSI6InN0cmluZyJ9LCJzZWNvbmRhcnlEZXZpY2VDbGFzcyI6eyJkZXNjcmlwdGlvbiI6IlNlY29uZGFyeURldmljZUNsYXNzIHJlcHJlc2VudHMgbG93IHBlcmZvcm1hbmNlIHRpZXIgKGZvciBleGFtcGxlIEhERHMpIGZvciByZW1haW5pbmcgT1NEcyIsIm1pbkxlbmd0aCI6MSwidHlwZSI6InN0cmluZyJ9fSwicmVxdWlyZWQiOlsicHJpbWFyeURldmljZUNsYXNzIiwic2Vjb25kYXJ5RGV2aWNlQ2xhc3MiXSwidHlwZSI6Im9iamVjdCJ9LCJyZXBsaWNhc1BlckZhaWx1cmVEb21haW4iOnsiZGVzY3JpcHRpb24iOiJSZXBsaWNhc1BlckZhaWx1cmVEb21haW4gdGhlIG51bWJlciBvZiByZXBsaWNhIGluIHRoZSBzcGVjaWZpZWQgZmFpbHVyZSBkb21haW4iLCJtaW5pbXVtIjoxLCJ0eXBlIjoiaW50ZWdlciJ9LCJyZXF1aXJlU2FmZVJlcGxpY2FTaXplIjp7ImRlc2NyaXB0aW9uIjoiUmVxdWlyZVNhZmVSZXBsaWNhU2l6ZSBpZiBmYWxzZSBhbGxvd3MgeW91IHRvIHNldCByZXBsaWNhIDEiLCJ0eXBlIjoiYm9vbGVhbiJ9LCJzaXplIjp7ImRlc2NyaXB0aW9uIjoiU2l6ZSAtIE51bWJlciBvZiBjb3BpZXMgcGVyIG9iamVjdCBpbiBhIHJlcGxpY2F0ZWQgc3RvcmFnZSBwb29sLCBpbmNsdWRpbmcgdGhlIG9iamVjdCBpdHNlbGYgKHJlcXVpcmVkIGZvciByZXBsaWNhdGVkIHBvb2wgdHlwZSkiLCJtaW5pbXVtIjowLCJ0eXBlIjoiaW50ZWdlciJ9LCJzdWJGYWlsdXJlRG9tYWluIjp7ImRlc2NyaXB0aW9uIjoiU3ViRmFpbHVyZURvbWFpbiB0aGUgbmFtZSBvZiB0aGUgc3ViLWZhaWx1cmUgZG9tYWluIiwidHlwZSI6InN0cmluZyJ9LCJ0YXJnZXRTaXplUmF0aW8iOnsiZGVzY3JpcHRpb24iOiJUYXJnZXRTaXplUmF0aW8gZ2l2ZXMgYSBoaW50ICglKSB0byBDZXBoIGluIHRlcm1zIG9mIGV4cGVjdGVkIGNvbnN1bXB0aW9uIG9mIHRoZSB0b3RhbCBjbHVzdGVyIGNhcGFjaXR5IiwidHlwZSI6Im51bWJlciJ9fSwicmVxdWlyZWQiOlsic2l6ZSJdLCJ0eXBlIjoib2JqZWN0In0sInN0YXR1c0NoZWNrIjp7ImRlc2NyaXB0aW9uIjoiVGhlIG1pcnJvcmluZyBzdGF0dXNDaGVjayIsInByb3BlcnRpZXMiOnsibWlycm9yIjp7ImRlc2NyaXB0aW9uIjoiSGVhbHRoQ2hlY2tTcGVjIHJlcHJlc2VudHMgdGhlIGhlYWx0aCBjaGVjayBvZiBhbiBvYmplY3Qgc3RvcmUgYnVja2V0IiwibnVsbGFibGUiOnRydWUsInByb3BlcnRpZXMiOnsiZGlzYWJsZWQiOnsidHlwZSI6ImJvb2xlYW4ifSwiaW50ZXJ2YWwiOnsiZGVzY3JpcHRpb24iOiJJbnRlcnZhbCBpcyB0aGUgaW50ZXJuYWwgaW4gc2Vjb25kIG9yIG1pbnV0ZSBmb3IgdGhlIGhlYWx0aCBjaGVjayB0byBydW4gbGlrZSA2MHMgZm9yIDYwIHNlY29uZHMiLCJ0eXBlIjoic3RyaW5nIn0sInRpbWVvdXQiOnsidHlwZSI6InN0cmluZyJ9fSwidHlwZSI6Im9iamVjdCJ9fSwidHlwZSI6Im9iamVjdCIsIngta3ViZXJuZXRlcy1wcmVzZXJ2ZS11bmtub3duLWZpZWxkcyI6dHJ1ZX19LCJ0eXBlIjoib2JqZWN0In0sImRpc2FibGVTbmFwc2hvdENsYXNzIjp7InR5cGUiOiJib29sZWFuIn0sImRpc2FibGVTdG9yYWdlQ2xhc3MiOnsidHlwZSI6ImJvb2xlYW4ifSwicmVjb25jaWxlU3RyYXRlZ3kiOnsidHlwZSI6InN0cmluZyJ9LCJzdG9yYWdlQ2xhc3NOYW1lIjp7ImRlc2NyaXB0aW9uIjoiU3RvcmFnZUNsYXNzTmFtZSBzcGVjaWZpZXMgdGhlIG5hbWUgb2YgdGhlIHN0b3JhZ2UgY2xhc3MgY3JlYXRlZCBmb3IgY2VwaGZzIiwibWF4TGVuZ3RoIjoyNTMsInBhdHRlcm4iOiJeW2EtejAtOV0oWy1hLXowLTldKlthLXowLTldKT8oXFxcXC5bYS16MC05XShbLWEtejAtOV0qW2EtejAtOV0pPykqJCIsInR5cGUiOiJzdHJpbmcifX0sInR5cGUiOiJvYmplY3QifSwiY2VwaE5vblJlc2lsaWVudFBvb2xzIjp7ImRlc2NyaXB0aW9uIjoiTWFuYWdlQ2VwaE5vblJlc2lsaWVudFBvb2xzIGRlZmluZXMgaG93IHRvIHJlY29uY2lsZSBjZXBoIG5vbi1yZXNpbGllbnQgcG9vbHMiLCJwcm9wZXJ0aWVzIjp7ImNvdW50Ijp7ImRlZmF1bHQiOjEsImRlc2NyaXB0aW9uIjoiQ291bnQgaXMgdGhlIG51bWJlciBvZiBkZXZpY2VzIGluIHRoaXMgc2V0IiwibWluaW11bSI6MSwidHlwZSI6ImludGVnZXIifSwiZW5hYmxlIjp7InR5cGUiOiJib29sZWFuIn0sInJlc291cmNlcyI6eyJkZXNjcmlwdGlvbiI6IlJlc291cmNlUmVxdWlyZW1lbnRzIChyZXF1ZXN0cy9saW1pdHMpIGZvciB0aGUgZGV2aWNlcyIsInByb3BlcnRpZXMiOnsiY2xhaW1zIjp7ImRlc2NyaXB0aW9uIjoiQ2xhaW1zIGxpc3RzIHRoZSBuYW1lcyBvZiByZXNvdXJjZXMsIGRlZmluZWQgaW4gc3BlYy5yZXNvdXJjZUNsYWltcywgdGhhdCBhcmUgdXNlZCBieSB0aGlzIGNvbnRhaW5lci4gXG4gVGhpcyBpcyBhbiBhbHBoYSBmaWVsZCBhbmQgcmVxdWlyZXMgZW5hYmxpbmcgdGhlIER5bmFtaWNSZXNvdXJjZUFsbG9jYXRpb24gZmVhdHVyZSBnYXRlLiBcbiBUaGlzIGZpZWxkIGlzIGltbXV0YWJsZS4gSXQgY2FuIG9ubHkgYmUgc2V0IGZvciBjb250YWluZXJzLiIsIml0ZW1zIjp7ImRlc2NyaXB0aW9uIjoiUmVzb3VyY2VDbGFpbSByZWZlcmVuY2VzIG9uZSBlbnRyeSBpbiBQb2RTcGVjLlJlc291cmNlQ2xhaW1zLiIsInByb3BlcnRpZXMiOnsibmFtZSI6eyJkZXNjcmlwdGlvbiI6Ik5hbWUgbXVzdCBtYXRjaCB0aGUgbmFtZSBvZiBvbmUgZW50cnkgaW4gcG9kLnNwZWMucmVzb3VyY2VDbGFpbXMgb2YgdGhlIFBvZCB3aGVyZSB0aGlzIGZpZWxkIGlzIHVzZWQuIEl0IG1ha2VzIHRoYXQgcmVzb3VyY2UgYXZhaWxhYmxlIGluc2lkZSBhIGNvbnRhaW5lci4iLCJ0eXBlIjoic3RyaW5nIn19LCJyZXF1aXJlZCI6WyJuYW1lIl0sInR5cGUiOiJvYmplY3QifSwidHlwZSI6ImFycmF5IiwieC1rdWJlcm5ldGVzLWxpc3QtbWFwLWtleXMiOlsibmFtZSJdLCJ4LWt1YmVybmV0ZXMtbGlzdC10eXBlIjoibWFwIn0sImxpbWl0cyI6eyJhZGRpdGlvbmFsUHJvcGVydGllcyI6eyJhbnlPZiI6W3sidHlwZSI6ImludGVnZXIifSx7InR5cGUiOiJzdHJpbmcifV0sInBhdHRlcm4iOiJeKFxcK3wtKT8oKFswLTldKyhcXC5bMC05XSopPyl8KFxcLlswLTldKykpKChbS01HVFBFXWkpfFtudW1rTUdUUEVdfChbZUVdKFxcK3wtKT8oKFswLTldKyhcXC5bMC05XSopPyl8KFxcLlswLTldKykpKSk/JCIsIngta3ViZXJuZXRlcy1pbnQtb3Itc3RyaW5nIjp0cnVlfSwiZGVzY3JpcHRpb24iOiJMaW1pdHMgZGVzY3JpYmVzIHRoZSBtYXhpbXVtIGFtb3VudCBvZiBjb21wdXRlIHJlc291cmNlcyBhbGxvd2VkLiBNb3JlIGluZm86IGh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL2NvbmNlcHRzL2NvbmZpZ3VyYXRpb24vbWFuYWdlLXJlc291cmNlcy1jb250YWluZXJzLyIsInR5cGUiOiJvYmplY3QifSwicmVxdWVzdHMiOnsiYWRkaXRpb25hbFByb3BlcnRpZXMiOnsiYW55T2YiOlt7InR5cGUiOiJpbnRlZ2VyIn0seyJ0eXBlIjoic3RyaW5nIn1dLCJwYXR0ZXJuIjoiXihcXCt8LSk/KChbMC05XSsoXFwuWzAtOV0qKT8pfChcXC5bMC05XSspKSgoW0tNR1RQRV1pKXxbbnVta01HVFBFXXwoW2VFXShcXCt8LSk/KChbMC05XSsoXFwuWzAtOV0qKT8pfChcXC5bMC05XSspKSkpPyQiLCJ4LWt1YmVybmV0ZXMtaW50LW9yLXN0cmluZyI6dHJ1ZX0sImRlc2NyaXB0aW9uIjoiUmVxdWVzdHMgZGVzY3JpYmVzIHRoZSBtaW5pbXVtIGFtb3VudCBvZiBjb21wdXRlIHJlc291cmNlcyByZXF1aXJlZC4gSWYgUmVxdWVzdHMgaXMgb21pdHRlZCBmb3IgYSBjb250YWluZXIsIGl0IGRlZmF1bHRzIHRvIExpbWl0cyBpZiB0aGF0IGlzIGV4cGxpY2l0bHkgc3BlY2lmaWVkLCBvdGhlcndpc2UgdG8gYW4gaW1wbGVtZW50YXRpb24tZGVmaW5lZCB2YWx1ZS4gUmVxdWVzdHMgY2Fubm90IGV4Y2VlZCBMaW1pdHMuIE1vcmUgaW5mbzogaHR0cHM6Ly9rdWJlcm5ldGVzLmlvL2RvY3MvY29uY2VwdHMvY29uZmlndXJhdGlvbi9tYW5hZ2UtcmVzb3VyY2VzLWNvbnRhaW5lcnMvIiwidHlwZSI6Im9iamVjdCJ9fSwidHlwZSI6Im9iamVjdCJ9LCJzdG9yYWdlQ2xhc3NOYW1lIjp7ImRlc2NyaXB0aW9uIjoiU3RvcmFnZUNsYXNzTmFtZSBzcGVjaWZpZXMgdGhlIG5hbWUgb2YgdGhlIHN0b3JhZ2UgY2xhc3MgY3JlYXRlZCBmb3IgY2VwaCBub24tcmVzaWxpZW50IHBvb2xzIiwibWF4TGVuZ3RoIjoyNTMsInBhdHRlcm4iOiJeW2EtejAtOV0oWy1hLXowLTldKlthLXowLTldKT8oXFxcXC5bYS16MC05XShbLWEtejAtOV0qW2EtejAtOV0pPykqJCIsInR5cGUiOiJzdHJpbmcifSwidm9sdW1lQ2xhaW1UZW1wbGF0ZSI6eyJkZXNjcmlwdGlvbiI6IlZvbHVtZUNsYWltVGVtcGxhdGVzIGlzIGEgUFZDIHRlbXBsYXRlIGZvciB0aGUgdW5kZXJseWluZyBzdG9yYWdlIGRldmljZXMiLCJwcm9wZXJ0aWVzIjp7ImFwaVZlcnNpb24iOnsiZGVzY3JpcHRpb24iOiJBUElWZXJzaW9uIGRlZmluZXMgdGhlIHZlcnNpb25lZCBzY2hlbWEgb2YgdGhpcyByZXByZXNlbnRhdGlvbiBvZiBhbiBvYmplY3QuIFNlcnZlcnMgc2hvdWxkIGNvbnZlcnQgcmVjb2duaXplZCBzY2hlbWFzIHRvIHRoZSBsYXRlc3QgaW50ZXJuYWwgdmFsdWUsIGFuZCBtYXkgcmVqZWN0IHVucmVjb2duaXplZCB2YWx1ZXMuIE1vcmUgaW5mbzogaHR0cHM6Ly9naXQuazhzLmlvL2NvbW11bml0eS9jb250cmlidXRvcnMvZGV2ZWwvc2lnLWFyY2hpdGVjdHVyZS9hcGktY29udmVudGlvbnMubWQjcmVzb3VyY2VzIiwidHlwZSI6InN0cmluZyJ9LCJraW5kIjp7ImRlc2NyaXB0aW9uIjoiS2luZCBpcyBhIHN0cmluZyB2YWx1ZSByZXByZXNlbnRpbmcgdGhlIFJFU1QgcmVzb3VyY2UgdGhpcyBvYmplY3QgcmVwcmVzZW50cy4gU2VydmVycyBtYXkgaW5mZXIgdGhpcyBmcm9tIHRoZSBlbmRwb2ludCB0aGUgY2xpZW50IHN1Ym1pdHMgcmVxdWVzdHMgdG8uIENhbm5vdCBiZSB1cGRhdGVkLiBJbiBDYW1lbENhc2UuIE1vcmUgaW5mbzogaHR0cHM6Ly9naXQuazhzLmlvL2NvbW11bml0eS9jb250cmlidXRvcnMvZGV2ZWwvc2lnLWFyY2hpdGVjdHVyZS9hcGktY29udmVudGlvbnMubWQjdHlwZXMta2luZHMiLCJ0eXBlIjoic3RyaW5nIn0sIm1ldGFkYXRhIjp7ImRlc2NyaXB0aW9uIjoiU3RhbmRhcmQgb2JqZWN0J3MgbWV0YWRhdGEuIE1vcmUgaW5mbzogaHR0cHM6Ly9naXQuazhzLmlvL2NvbW11bml0eS9jb250cmlidXRvcnMvZGV2ZWwvc2lnLWFyY2hpdGVjdHVyZS9hcGktY29udmVudGlvbnMubWQjbWV0YWRhdGEiLCJwcm9wZXJ0aWVzIjp7ImFubm90YXRpb25zIjp7ImFkZGl0aW9uYWxQcm9wZXJ0aWVzIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6Im9iamVjdCJ9LCJmaW5hbGl6ZXJzIjp7Iml0ZW1zIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6ImFycmF5In0sImxhYmVscyI6eyJhZGRpdGlvbmFsUHJvcGVydGllcyI6eyJ0eXBlIjoic3RyaW5nIn0sInR5cGUiOiJvYmplY3QifSwibmFtZSI6eyJ0eXBlIjoic3RyaW5nIn0sIm5hbWVzcGFjZSI6eyJ0eXBlIjoic3RyaW5nIn19LCJ0eXBlIjoib2JqZWN0In0sInNwZWMiOnsiZGVzY3JpcHRpb24iOiJzcGVjIGRlZmluZXMgdGhlIGRlc2lyZWQgY2hhcmFjdGVyaXN0aWNzIG9mIGEgdm9sdW1lIHJlcXVlc3RlZCBieSBhIHBvZCBhdXRob3IuIE1vcmUgaW5mbzogaHR0cHM6Ly9rdWJlcm5ldGVzLmlvL2RvY3MvY29uY2VwdHMvc3RvcmFnZS9wZXJzaXN0ZW50LXZvbHVtZXMjcGVyc2lzdGVudHZvbHVtZWNsYWltcyIsInByb3BlcnRpZXMiOnsiYWNjZXNzTW9kZXMiOnsiZGVzY3JpcHRpb24iOiJhY2Nlc3NNb2RlcyBjb250YWlucyB0aGUgZGVzaXJlZCBhY2Nlc3MgbW9kZXMgdGhlIHZvbHVtZSBzaG91bGQgaGF2ZS4gTW9yZSBpbmZvOiBodHRwczovL2t1YmVybmV0ZXMuaW8vZG9jcy9jb25jZXB0cy9zdG9yYWdlL3BlcnNpc3RlbnQtdm9sdW1lcyNhY2Nlc3MtbW9kZXMtMSIsIml0ZW1zIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6ImFycmF5In0sImRhdGFTb3VyY2UiOnsiZGVzY3JpcHRpb24iOiJkYXRhU291cmNlIGZpZWxkIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgZWl0aGVyOiAqIEFuIGV4aXN0aW5nIFZvbHVtZVNuYXBzaG90IG9iamVjdCAoc25hcHNob3Quc3RvcmFnZS5rOHMuaW8vVm9sdW1lU25hcHNob3QpICogQW4gZXhpc3RpbmcgUFZDIChQZXJzaXN0ZW50Vm9sdW1lQ2xhaW0pIElmIHRoZSBwcm92aXNpb25lciBvciBhbiBleHRlcm5hbCBjb250cm9sbGVyIGNhbiBzdXBwb3J0IHRoZSBzcGVjaWZpZWQgZGF0YSBzb3VyY2UsIGl0IHdpbGwgY3JlYXRlIGEgbmV3IHZvbHVtZSBiYXNlZCBvbiB0aGUgY29udGVudHMgb2YgdGhlIHNwZWNpZmllZCBkYXRhIHNvdXJjZS4gV2hlbiB0aGUgQW55Vm9sdW1lRGF0YVNvdXJjZSBmZWF0dXJlIGdhdGUgaXMgZW5hYmxlZCwgZGF0YVNvdXJjZSBjb250ZW50cyB3aWxsIGJlIGNvcGllZCB0byBkYXRhU291cmNlUmVmLCBhbmQgZGF0YVNvdXJjZVJlZiBjb250ZW50cyB3aWxsIGJlIGNvcGllZCB0byBkYXRhU291cmNlIHdoZW4gZGF0YVNvdXJjZVJlZi5uYW1lc3BhY2UgaXMgbm90IHNwZWNpZmllZC4gSWYgdGhlIG5hbWVzcGFjZSBpcyBzcGVjaWZpZWQsIHRoZW4gZGF0YVNvdXJjZVJlZiB3aWxsIG5vdCBiZSBjb3BpZWQgdG8gZGF0YVNvdXJjZS4iLCJwcm9wZXJ0aWVzIjp7ImFwaUdyb3VwIjp7ImRlc2NyaXB0aW9uIjoiQVBJR3JvdXAgaXMgdGhlIGdyb3VwIGZvciB0aGUgcmVzb3VyY2UgYmVpbmcgcmVmZXJlbmNlZC4gSWYgQVBJR3JvdXAgaXMgbm90IHNwZWNpZmllZCwgdGhlIHNwZWNpZmllZCBLaW5kIG11c3QgYmUgaW4gdGhlIGNvcmUgQVBJIGdyb3VwLiBGb3IgYW55IG90aGVyIHRoaXJkLXBhcnR5IHR5cGVzLCBBUElHcm91cCBpcyByZXF1aXJlZC4iLCJ0eXBlIjoic3RyaW5nIn0sImtpbmQiOnsiZGVzY3JpcHRpb24iOiJLaW5kIGlzIHRoZSB0eXBlIG9mIHJlc291cmNlIGJlaW5nIHJlZmVyZW5jZWQiLCJ0eXBlIjoic3RyaW5nIn0sIm5hbWUiOnsiZGVzY3JpcHRpb24iOiJOYW1lIGlzIHRoZSBuYW1lIG9mIHJlc291cmNlIGJlaW5nIHJlZmVyZW5jZWQiLCJ0eXBlIjoic3RyaW5nIn19LCJyZXF1aXJlZCI6WyJraW5kIiwibmFtZSJdLCJ0eXBlIjoib2JqZWN0IiwieC1rdWJlcm5ldGVzLW1hcC10eXBlIjoiYXRvbWljIn0sImRhdGFTb3VyY2VSZWYiOnsiZGVzY3JpcHRpb24iOiJkYXRhU291cmNlUmVmIHNwZWNpZmllcyB0aGUgb2JqZWN0IGZyb20gd2hpY2ggdG8gcG9wdWxhdGUgdGhlIHZvbHVtZSB3aXRoIGRhdGEsIGlmIGEgbm9uLWVtcHR5IHZvbHVtZSBpcyBkZXNpcmVkLiBUaGlzIG1heSBiZSBhbnkgb2JqZWN0IGZyb20gYSBub24tZW1wdHkgQVBJIGdyb3VwIChub24gY29yZSBvYmplY3QpIG9yIGEgUGVyc2lzdGVudFZvbHVtZUNsYWltIG9iamVjdC4gV2hlbiB0aGlzIGZpZWxkIGlzIHNwZWNpZmllZCwgdm9sdW1lIGJpbmRpbmcgd2lsbCBvbmx5IHN1Y2NlZWQgaWYgdGhlIHR5cGUgb2YgdGhlIHNwZWNpZmllZCBvYmplY3QgbWF0Y2hlcyBzb21lIGluc3RhbGxlZCB2b2x1bWUgcG9wdWxhdG9yIG9yIGR5bmFtaWMgcHJvdmlzaW9uZXIuIFRoaXMgZmllbGQgd2lsbCByZXBsYWNlIHRoZSBmdW5jdGlvbmFsaXR5IG9mIHRoZSBkYXRhU291cmNlIGZpZWxkIGFuZCBhcyBzdWNoIGlmIGJvdGggZmllbGRzIGFyZSBub24tZW1wdHksIHRoZXkgbXVzdCBoYXZlIHRoZSBzYW1lIHZhbHVlLiBGb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHksIHdoZW4gbmFtZXNwYWNlIGlzbid0IHNwZWNpZmllZCBpbiBkYXRhU291cmNlUmVmLCBib3RoIGZpZWxkcyAoZGF0YVNvdXJjZSBhbmQgZGF0YVNvdXJjZVJlZikgd2lsbCBiZSBzZXQgdG8gdGhlIHNhbWUgdmFsdWUgYXV0b21hdGljYWxseSBpZiBvbmUgb2YgdGhlbSBpcyBlbXB0eSBhbmQgdGhlIG90aGVyIGlzIG5vbi1lbXB0eS4gV2hlbiBuYW1lc3BhY2UgaXMgc3BlY2lmaWVkIGluIGRhdGFTb3VyY2VSZWYsIGRhdGFTb3VyY2UgaXNuJ3Qgc2V0IHRvIHRoZSBzYW1lIHZhbHVlIGFuZCBtdXN0IGJlIGVtcHR5LiBUaGVyZSBhcmUgdGhyZWUgaW1wb3J0YW50IGRpZmZlcmVuY2VzIGJldHdlZW4gZGF0YVNvdXJjZSBhbmQgZGF0YVNvdXJjZVJlZjogKiBXaGlsZSBkYXRhU291cmNlIG9ubHkgYWxsb3dzIHR3byBzcGVjaWZpYyB0eXBlcyBvZiBvYmplY3RzLCBkYXRhU291cmNlUmVmIGFsbG93cyBhbnkgbm9uLWNvcmUgb2JqZWN0LCBhcyB3ZWxsIGFzIFBlcnNpc3RlbnRWb2x1bWVDbGFpbSBvYmplY3RzLiAqIFdoaWxlIGRhdGFTb3VyY2UgaWdub3JlcyBkaXNhbGxvd2VkIHZhbHVlcyAoZHJvcHBpbmcgdGhlbSksIGRhdGFTb3VyY2VSZWYgcHJlc2VydmVzIGFsbCB2YWx1ZXMsIGFuZCBnZW5lcmF0ZXMgYW4gZXJyb3IgaWYgYSBkaXNhbGxvd2VkIHZhbHVlIGlzIHNwZWNpZmllZC4gKiBXaGlsZSBkYXRhU291cmNlIG9ubHkgYWxsb3dzIGxvY2FsIG9iamVjdHMsIGRhdGFTb3VyY2VSZWYgYWxsb3dzIG9iamVjdHMgaW4gYW55IG5hbWVzcGFjZXMuIChCZXRhKSBVc2luZyB0aGlzIGZpZWxkIHJlcXVpcmVzIHRoZSBBbnlWb2x1bWVEYXRhU291cmNlIGZlYXR1cmUgZ2F0ZSB0byBiZSBlbmFibGVkLiAoQWxwaGEpIFVzaW5nIHRoZSBuYW1lc3BhY2UgZmllbGQgb2YgZGF0YVNvdXJjZVJlZiByZXF1aXJlcyB0aGUgQ3Jvc3NOYW1lc3BhY2VWb2x1bWVEYXRhU291cmNlIGZlYXR1cmUgZ2F0ZSB0byBiZSBlbmFibGVkLiIsInByb3BlcnRpZXMiOnsiYXBpR3JvdXAiOnsiZGVzY3JpcHRpb24iOiJBUElHcm91cCBpcyB0aGUgZ3JvdXAgZm9yIHRoZSByZXNvdXJjZSBiZWluZyByZWZlcmVuY2VkLiBJZiBBUElHcm91cCBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgc3BlY2lmaWVkIEtpbmQgbXVzdCBiZSBpbiB0aGUgY29yZSBBUEkgZ3JvdXAuIEZvciBhbnkgb3RoZXIgdGhpcmQtcGFydHkgdHlwZXMsIEFQSUdyb3VwIGlzIHJlcXVpcmVkLiIsInR5cGUiOiJzdHJpbmcifSwia2luZCI6eyJkZXNjcmlwdGlvbiI6IktpbmQgaXMgdGhlIHR5cGUgb2YgcmVzb3VyY2UgYmVpbmcgcmVmZXJlbmNlZCIsInR5cGUiOiJzdHJpbmcifSwibmFtZSI6eyJkZXNjcmlwdGlvbiI6Ik5hbWUgaXMgdGhlIG5hbWUgb2YgcmVzb3VyY2UgYmVpbmcgcmVmZXJlbmNlZCIsInR5cGUiOiJzdHJpbmcifSwibmFtZXNwYWNlIjp7ImRlc2NyaXB0aW9uIjoiTmFtZXNwYWNlIGlzIHRoZSBuYW1lc3BhY2Ugb2YgcmVzb3VyY2UgYmVpbmcgcmVmZXJlbmNlZCBOb3RlIHRoYXQgd2hlbiBhIG5hbWVzcGFjZSBpcyBzcGVjaWZpZWQsIGEgZ2F0ZXdheS5uZXR3b3JraW5nLms4cy5pby9SZWZlcmVuY2VHcmFudCBvYmplY3QgaXMgcmVxdWlyZWQgaW4gdGhlIHJlZmVyZW50IG5hbWVzcGFjZSB0byBhbGxvdyB0aGF0IG5hbWVzcGFjZSdzIG93bmVyIHRvIGFjY2VwdCB0aGUgcmVmZXJlbmNlLiBTZWUgdGhlIFJlZmVyZW5jZUdyYW50IGRvY3VtZW50YXRpb24gZm9yIGRldGFpbHMuIChBbHBoYSkgVGhpcyBmaWVsZCByZXF1aXJlcyB0aGUgQ3Jvc3NOYW1lc3BhY2VWb2x1bWVEYXRhU291cmNlIGZlYXR1cmUgZ2F0ZSB0byBiZSBlbmFibGVkLiIsInR5cGUiOiJzdHJpbmcifX0sInJlcXVpcmVkIjpbImtpbmQiLCJuYW1lIl0sInR5cGUiOiJvYmplY3QifSwicmVzb3VyY2VzIjp7ImRlc2NyaXB0aW9uIjoicmVzb3VyY2VzIHJlcHJlc2VudHMgdGhlIG1pbmltdW0gcmVzb3VyY2VzIHRoZSB2b2x1bWUgc2hvdWxkIGhhdmUuIElmIFJlY292ZXJWb2x1bWVFeHBhbnNpb25GYWlsdXJlIGZlYXR1cmUgaXMgZW5hYmxlZCB1c2VycyBhcmUgYWxsb3dlZCB0byBzcGVjaWZ5IHJlc291cmNlIHJlcXVpcmVtZW50cyB0aGF0IGFyZSBsb3dlciB0aGFuIHByZXZpb3VzIHZhbHVlIGJ1dCBtdXN0IHN0aWxsIGJlIGhpZ2hlciB0aGFuIGNhcGFjaXR5IHJlY29yZGVkIGluIHRoZSBzdGF0dXMgZmllbGQgb2YgdGhlIGNsYWltLiBNb3JlIGluZm86IGh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL2NvbmNlcHRzL3N0b3JhZ2UvcGVyc2lzdGVudC12b2x1bWVzI3Jlc291cmNlcyIsInByb3BlcnRpZXMiOnsibGltaXRzIjp7ImFkZGl0aW9uYWxQcm9wZXJ0aWVzIjp7ImFueU9mIjpbeyJ0eXBlIjoiaW50ZWdlciJ9LHsidHlwZSI6InN0cmluZyJ9XSwicGF0dGVybiI6Il4oXFwrfC0pPygoWzAtOV0rKFxcLlswLTldKik/KXwoXFwuWzAtOV0rKSkoKFtLTUdUUEVdaSl8W251bWtNR1RQRV18KFtlRV0oXFwrfC0pPygoWzAtOV0rKFxcLlswLTldKik/KXwoXFwuWzAtOV0rKSkpKT8kIiwieC1rdWJlcm5ldGVzLWludC1vci1zdHJpbmciOnRydWV9LCJkZXNjcmlwdGlvbiI6IkxpbWl0cyBkZXNjcmliZXMgdGhlIG1heGltdW0gYW1vdW50IG9mIGNvbXB1dGUgcmVzb3VyY2VzIGFsbG93ZWQuIE1vcmUgaW5mbzogaHR0cHM6Ly9rdWJlcm5ldGVzLmlvL2RvY3MvY29uY2VwdHMvY29uZmlndXJhdGlvbi9tYW5hZ2UtcmVzb3VyY2VzLWNvbnRhaW5lcnMvIiwidHlwZSI6Im9iamVjdCJ9LCJyZXF1ZXN0cyI6eyJhZGRpdGlvbmFsUHJvcGVydGllcyI6eyJhbnlPZiI6W3sidHlwZSI6ImludGVnZXIifSx7InR5cGUiOiJzdHJpbmcifV0sInBhdHRlcm4iOiJeKFxcK3wtKT8oKFswLTldKyhcXC5bMC05XSopPyl8KFxcLlswLTldKykpKChbS01HVFBFXWkpfFtudW1rTUdUUEVdfChbZUVdKFxcK3wtKT8oKFswLTldKyhcXC5bMC05XSopPyl8KFxcLlswLTldKykpKSk/JCIsIngta3ViZXJuZXRlcy1pbnQtb3Itc3RyaW5nIjp0cnVlfSwiZGVzY3JpcHRpb24iOiJSZXF1ZXN0cyBkZXNjcmliZXMgdGhlIG1pbmltdW0gYW1vdW50IG9mIGNvbXB1dGUgcmVzb3VyY2VzIHJlcXVpcmVkLiBJZiBSZXF1ZXN0cyBpcyBvbWl0dGVkIGZvciBhIGNvbnRhaW5lciwgaXQgZGVmYXVsdHMgdG8gTGltaXRzIGlmIHRoYXQgaXMgZXhwbGljaXRseSBzcGVjaWZpZWQsIG90aGVyd2lzZSB0byBhbiBpbXBsZW1lbnRhdGlvbi1kZWZpbmVkIHZhbHVlLiBSZXF1ZXN0cyBjYW5ub3QgZXhjZWVkIExpbWl0cy4gTW9yZSBpbmZvOiBodHRwczovL2t1YmVybmV0ZXMuaW8vZG9jcy9jb25jZXB0cy9jb25maWd1cmF0aW9uL21hbmFnZS1yZXNvdXJjZXMtY29udGFpbmVycy8iLCJ0eXBlIjoib2JqZWN0In19LCJ0eXBlIjoib2JqZWN0In0sInNlbGVjdG9yIjp7ImRlc2NyaXB0aW9uIjoic2VsZWN0b3IgaXMgYSBsYWJlbCBxdWVyeSBvdmVyIHZvbHVtZXMgdG8gY29uc2lkZXIgZm9yIGJpbmRpbmcuIiwicHJvcGVydGllcyI6eyJtYXRjaEV4cHJlc3Npb25zIjp7ImRlc2NyaXB0aW9uIjoibWF0Y2hFeHByZXNzaW9ucyBpcyBhIGxpc3Qgb2YgbGFiZWwgc2VsZWN0b3IgcmVxdWlyZW1lbnRzLiBUaGUgcmVxdWlyZW1lbnRzIGFyZSBBTkRlZC4iLCJpdGVtcyI6eyJkZXNjcmlwdGlvbiI6IkEgbGFiZWwgc2VsZWN0b3IgcmVxdWlyZW1lbnQgaXMgYSBzZWxlY3RvciB0aGF0IGNvbnRhaW5zIHZhbHVlcywgYSBrZXksIGFuZCBhbiBvcGVyYXRvciB0aGF0IHJlbGF0ZXMgdGhlIGtleSBhbmQgdmFsdWVzLiIsInByb3BlcnRpZXMiOnsia2V5Ijp7ImRlc2NyaXB0aW9uIjoia2V5IGlzIHRoZSBsYWJlbCBrZXkgdGhhdCB0aGUgc2VsZWN0b3IgYXBwbGllcyB0by4iLCJ0eXBlIjoic3RyaW5nIn0sIm9wZXJhdG9yIjp7ImRlc2NyaXB0aW9uIjoib3BlcmF0b3IgcmVwcmVzZW50cyBhIGtleSdzIHJlbGF0aW9uc2hpcCB0byBhIHNldCBvZiB2YWx1ZXMuIFZhbGlkIG9wZXJhdG9ycyBhcmUgSW4sIE5vdEluLCBFeGlzdHMgYW5kIERvZXNOb3RFeGlzdC4iLCJ0eXBlIjoic3RyaW5nIn0sInZhbHVlcyI6eyJkZXNjcmlwdGlvbiI6InZhbHVlcyBpcyBhbiBhcnJheSBvZiBzdHJpbmcgdmFsdWVzLiBJZiB0aGUgb3BlcmF0b3IgaXMgSW4gb3IgTm90SW4sIHRoZSB2YWx1ZXMgYXJyYXkgbXVzdCBiZSBub24tZW1wdHkuIElmIHRoZSBvcGVyYXRvciBpcyBFeGlzdHMgb3IgRG9lc05vdEV4aXN0LCB0aGUgdmFsdWVzIGFycmF5IG11c3QgYmUgZW1wdHkuIFRoaXMgYXJyYXkgaXMgcmVwbGFjZWQgZHVyaW5nIGEgc3RyYXRlZ2ljIG1lcmdlIHBhdGNoLiIsIml0ZW1zIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6ImFycmF5In19LCJyZXF1aXJlZCI6WyJrZXkiLCJvcGVyYXRvciJdLCJ0eXBlIjoib2JqZWN0In0sInR5cGUiOiJhcnJheSJ9LCJtYXRjaExhYmVscyI6eyJhZGRpdGlvbmFsUHJvcGVydGllcyI6eyJ0eXBlIjoic3RyaW5nIn0sImRlc2NyaXB0aW9uIjoibWF0Y2hMYWJlbHMgaXMgYSBtYXAgb2Yge2tleSx2YWx1ZX0gcGFpcnMuIEEgc2luZ2xlIHtrZXksdmFsdWV9IGluIHRoZSBtYXRjaExhYmVscyBtYXAgaXMgZXF1aXZhbGVudCB0byBhbiBlbGVtZW50IG9mIG1hdGNoRXhwcmVzc2lvbnMsIHdob3NlIGtleSBmaWVsZCBpcyBcImtleVwiLCB0aGUgb3BlcmF0b3IgaXMgXCJJblwiLCBhbmQgdGhlIHZhbHVlcyBhcnJheSBjb250YWlucyBvbmx5IFwidmFsdWVcIi4gVGhlIHJlcXVpcmVtZW50cyBhcmUgQU5EZWQuIiwidHlwZSI6Im9iamVjdCJ9fSwidHlwZSI6Im9iamVjdCIsIngta3ViZXJuZXRlcy1tYXAtdHlwZSI6ImF0b21pYyJ9LCJzdG9yYWdlQ2xhc3NOYW1lIjp7ImRlc2NyaXB0aW9uIjoic3RvcmFnZUNsYXNzTmFtZSBpcyB0aGUgbmFtZSBvZiB0aGUgU3RvcmFnZUNsYXNzIHJlcXVpcmVkIGJ5IHRoZSBjbGFpbS4gTW9yZSBpbmZvOiBodHRwczovL2t1YmVybmV0ZXMuaW8vZG9jcy9jb25jZXB0cy9zdG9yYWdlL3BlcnNpc3RlbnQtdm9sdW1lcyNjbGFzcy0xIiwidHlwZSI6InN0cmluZyJ9LCJ2b2x1bWVBdHRyaWJ1dGVzQ2xhc3NOYW1lIjp7ImRlc2NyaXB0aW9uIjoidm9sdW1lQXR0cmlidXRlc0NsYXNzTmFtZSBtYXkgYmUgdXNlZCB0byBzZXQgdGhlIFZvbHVtZUF0dHJpYnV0ZXNDbGFzcyB1c2VkIGJ5IHRoaXMgY2xhaW0uIElmIHNwZWNpZmllZCwgdGhlIENTSSBkcml2ZXIgd2lsbCBjcmVhdGUgb3IgdXBkYXRlIHRoZSB2b2x1bWUgd2l0aCB0aGUgYXR0cmlidXRlcyBkZWZpbmVkIGluIHRoZSBjb3JyZXNwb25kaW5nIFZvbHVtZUF0dHJpYnV0ZXNDbGFzcy4gVGhpcyBoYXMgYSBkaWZmZXJlbnQgcHVycG9zZSB0aGFuIHN0b3JhZ2VDbGFzc05hbWUsIGl0IGNhbiBiZSBjaGFuZ2VkIGFmdGVyIHRoZSBjbGFpbSBpcyBjcmVhdGVkLiBBbiBlbXB0eSBzdHJpbmcgdmFsdWUgbWVhbnMgdGhhdCBubyBWb2x1bWVBdHRyaWJ1dGVzQ2xhc3Mgd2lsbCBiZSBhcHBsaWVkIHRvIHRoZSBjbGFpbSBidXQgaXQncyBub3QgYWxsb3dlZCB0byByZXNldCB0aGlzIGZpZWxkIHRvIGVtcHR5IHN0cmluZyBvbmNlIGl0IGlzIHNldC4gSWYgdW5zcGVjaWZpZWQgYW5kIHRoZSBQZXJzaXN0ZW50Vm9sdW1lQ2xhaW0gaXMgdW5ib3VuZCwgdGhlIGRlZmF1bHQgVm9sdW1lQXR0cmlidXRlc0NsYXNzIHdpbGwgYmUgc2V0IGJ5IHRoZSBwZXJzaXN0ZW50dm9sdW1lIGNvbnRyb2xsZXIgaWYgaXQgZXhpc3RzLiBJZiB0aGUgcmVzb3VyY2UgcmVmZXJyZWQgdG8gYnkgdm9sdW1lQXR0cmlidXRlc0NsYXNzIGRvZXMgbm90IGV4aXN0LCB0aGlzIFBlcnNpc3RlbnRWb2x1bWVDbGFpbSB3aWxsIGJlIHNldCB0byBhIFBlbmRpbmcgc3RhdGUsIGFzIHJlZmxlY3RlZCBieSB0aGUgbW9kaWZ5Vm9sdW1lU3RhdHVzIGZpZWxkLCB1bnRpbCBzdWNoIGFzIGEgcmVzb3VyY2UgZXhpc3RzLiBNb3JlIGluZm86IGh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL2NvbmNlcHRzL3N0b3JhZ2UvcGVyc2lzdGVudC12b2x1bWVzI3ZvbHVtZWF0dHJpYnV0ZXNjbGFzcyAoQWxwaGEpIFVzaW5nIHRoaXMgZmllbGQgcmVxdWlyZXMgdGhlIFZvbHVtZUF0dHJpYnV0ZXNDbGFzcyBmZWF0dXJlIGdhdGUgdG8gYmUgZW5hYmxlZC4iLCJ0eXBlIjoic3RyaW5nIn0sInZvbHVtZU1vZGUiOnsiZGVzY3JpcHRpb24iOiJ2b2x1bWVNb2RlIGRlZmluZXMgd2hhdCB0eXBlIG9mIHZvbHVtZSBpcyByZXF1aXJlZCBieSB0aGUgY2xhaW0uIFZhbHVlIG9mIEZpbGVzeXN0ZW0gaXMgaW1wbGllZCB3aGVuIG5vdCBpbmNsdWRlZCBpbiBjbGFpbSBzcGVjLiIsInR5cGUiOiJzdHJpbmcifSwidm9sdW1lTmFtZSI6eyJkZXNjcmlwdGlvbiI6InZvbHVtZU5hbWUgaXMgdGhlIGJpbmRpbmcgcmVmZXJlbmNlIHRvIHRoZSBQZXJzaXN0ZW50Vm9sdW1lIGJhY2tpbmcgdGhpcyBjbGFpbS4iLCJ0eXBlIjoic3RyaW5nIn19LCJ0eXBlIjoib2JqZWN0In0sInN0YXR1cyI6eyJkZXNjcmlwdGlvbiI6InN0YXR1cyByZXByZXNlbnRzIHRoZSBjdXJyZW50IGluZm9ybWF0aW9uL3N0YXR1cyBvZiBhIHBlcnNpc3RlbnQgdm9sdW1lIGNsYWltLiBSZWFkLW9ubHkuIE1vcmUgaW5mbzogaHR0cHM6Ly9rdWJlcm5ldGVzLmlvL2RvY3MvY29uY2VwdHMvc3RvcmFnZS9wZXJzaXN0ZW50LXZvbHVtZXMjcGVyc2lzdGVudHZvbHVtZWNsYWltcyIsInByb3BlcnRpZXMiOnsiYWNjZXNzTW9kZXMiOnsiZGVzY3JpcHRpb24iOiJhY2Nlc3NNb2RlcyBjb250YWlucyB0aGUgYWN0dWFsIGFjY2VzcyBtb2RlcyB0aGUgdm9sdW1lIGJhY2tpbmcgdGhlIFBWQyBoYXMuIE1vcmUgaW5mbzogaHR0cHM6Ly9rdWJlcm5ldGVzLmlvL2RvY3MvY29uY2VwdHMvc3RvcmFnZS9wZXJzaXN0ZW50LXZvbHVtZXMjYWNjZXNzLW1vZGVzLTEiLCJpdGVtcyI6eyJ0eXBlIjoic3RyaW5nIn0sInR5cGUiOiJhcnJheSJ9LCJhbGxvY2F0ZWRSZXNvdXJjZVN0YXR1c2VzIjp7ImFkZGl0aW9uYWxQcm9wZXJ0aWVzIjp7ImRlc2NyaXB0aW9uIjoiV2hlbiBhIGNvbnRyb2xsZXIgcmVjZWl2ZXMgcGVyc2lzdGVudHZvbHVtZSBjbGFpbSB1cGRhdGUgd2l0aCBDbGFpbVJlc291cmNlU3RhdHVzIGZvciBhIHJlc291cmNlIHRoYXQgaXQgZG9lcyBub3QgcmVjb2duaXplcywgdGhlbiBpdCBzaG91bGQgaWdub3JlIHRoYXQgdXBkYXRlIGFuZCBsZXQgb3RoZXIgY29udHJvbGxlcnMgaGFuZGxlIGl0LiIsInR5cGUiOiJzdHJpbmcifSwiZGVzY3JpcHRpb24iOiJhbGxvY2F0ZWRSZXNvdXJjZVN0YXR1c2VzIHN0b3JlcyBzdGF0dXMgb2YgcmVzb3VyY2UgYmVpbmcgcmVzaXplZCBmb3IgdGhlIGdpdmVuIFBWQy4gS2V5IG5hbWVzIGZvbGxvdyBzdGFuZGFyZCBLdWJlcm5ldGVzIGxhYmVsIHN5bnRheC4gVmFsaWQgdmFsdWVzIGFyZSBlaXRoZXI6ICogVW4tcHJlZml4ZWQga2V5czogLSBzdG9yYWdlIC0gdGhlIGNhcGFjaXR5IG9mIHRoZSB2b2x1bWUuICogQ3VzdG9tIHJlc291cmNlcyBtdXN0IHVzZSBpbXBsZW1lbnRhdGlvbi1kZWZpbmVkIHByZWZpeGVkIG5hbWVzIHN1Y2ggYXMgXCJleGFtcGxlLmNvbS9teS1jdXN0b20tcmVzb3VyY2VcIiBBcGFydCBmcm9tIGFib3ZlIHZhbHVlcyAtIGtleXMgdGhhdCBhcmUgdW5wcmVmaXhlZCBvciBoYXZlIGt1YmVybmV0ZXMuaW8gcHJlZml4IGFyZSBjb25zaWRlcmVkIHJlc2VydmVkIGFuZCBoZW5jZSBtYXkgbm90IGJlIHVzZWQuIFxuIENsYWltUmVzb3VyY2VTdGF0dXMgY2FuIGJlIGluIGFueSBvZiBmb2xsb3dpbmcgc3RhdGVzOiAtIENvbnRyb2xsZXJSZXNpemVJblByb2dyZXNzOiBTdGF0ZSBzZXQgd2hlbiByZXNpemUgY29udHJvbGxlciBzdGFydHMgcmVzaXppbmcgdGhlIHZvbHVtZSBpbiBjb250cm9sLXBsYW5lLiAtIENvbnRyb2xsZXJSZXNpemVGYWlsZWQ6IFN0YXRlIHNldCB3aGVuIHJlc2l6ZSBoYXMgZmFpbGVkIGluIHJlc2l6ZSBjb250cm9sbGVyIHdpdGggYSB0ZXJtaW5hbCBlcnJvci4gLSBOb2RlUmVzaXplUGVuZGluZzogU3RhdGUgc2V0IHdoZW4gcmVzaXplIGNvbnRyb2xsZXIgaGFzIGZpbmlzaGVkIHJlc2l6aW5nIHRoZSB2b2x1bWUgYnV0IGZ1cnRoZXIgcmVzaXppbmcgb2Ygdm9sdW1lIGlzIG5lZWRlZCBvbiB0aGUgbm9kZS4gLSBOb2RlUmVzaXplSW5Qcm9ncmVzczogU3RhdGUgc2V0IHdoZW4ga3ViZWxldCBzdGFydHMgcmVzaXppbmcgdGhlIHZvbHVtZS4gLSBOb2RlUmVzaXplRmFpbGVkOiBTdGF0ZSBzZXQgd2hlbiByZXNpemluZyBoYXMgZmFpbGVkIGluIGt1YmVsZXQgd2l0aCBhIHRlcm1pbmFsIGVycm9yLiBUcmFuc2llbnQgZXJyb3JzIGRvbid0IHNldCBOb2RlUmVzaXplRmFpbGVkLiBGb3IgZXhhbXBsZTogaWYgZXhwYW5kaW5nIGEgUFZDIGZvciBtb3JlIGNhcGFjaXR5IC0gdGhpcyBmaWVsZCBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgc3RhdGVzOiAtIHB2Yy5zdGF0dXMuYWxsb2NhdGVkUmVzb3VyY2VTdGF0dXNbJ3N0b3JhZ2UnXSA9IFwiQ29udHJvbGxlclJlc2l6ZUluUHJvZ3Jlc3NcIiAtIHB2Yy5zdGF0dXMuYWxsb2NhdGVkUmVzb3VyY2VTdGF0dXNbJ3N0b3JhZ2UnXSA9IFwiQ29udHJvbGxlclJlc2l6ZUZhaWxlZFwiIC0gcHZjLnN0YXR1cy5hbGxvY2F0ZWRSZXNvdXJjZVN0YXR1c1snc3RvcmFnZSddID0gXCJOb2RlUmVzaXplUGVuZGluZ1wiIC0gcHZjLnN0YXR1cy5hbGxvY2F0ZWRSZXNvdXJjZVN0YXR1c1snc3RvcmFnZSddID0gXCJOb2RlUmVzaXplSW5Qcm9ncmVzc1wiIC0gcHZjLnN0YXR1cy5hbGxvY2F0ZWRSZXNvdXJjZVN0YXR1c1snc3RvcmFnZSddID0gXCJOb2RlUmVzaXplRmFpbGVkXCIgV2hlbiB0aGlzIGZpZWxkIGlzIG5vdCBzZXQsIGl0IG1lYW5zIHRoYXQgbm8gcmVzaXplIG9wZXJhdGlvbiBpcyBpbiBwcm9ncmVzcyBmb3IgdGhlIGdpdmVuIFBWQy4gXG4gQSBjb250cm9sbGVyIHRoYXQgcmVjZWl2ZXMgUFZDIHVwZGF0ZSB3aXRoIHByZXZpb3VzbHkgdW5rbm93biByZXNvdXJjZU5hbWUgb3IgQ2xhaW1SZXNvdXJjZVN0YXR1cyBzaG91bGQgaWdub3JlIHRoZSB1cGRhdGUgZm9yIHRoZSBwdXJwb3NlIGl0IHdhcyBkZXNpZ25lZC4gRm9yIGV4YW1wbGUgLSBhIGNvbnRyb2xsZXIgdGhhdCBvbmx5IGlzIHJlc3BvbnNpYmxlIGZvciByZXNpemluZyBjYXBhY2l0eSBvZiB0aGUgdm9sdW1lLCBzaG91bGQgaWdub3JlIFBWQyB1cGRhdGVzIHRoYXQgY2hhbmdlIG90aGVyIHZhbGlkIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggUFZDLiBcbiBUaGlzIGlzIGFuIGFscGhhIGZpZWxkIGFuZCByZXF1aXJlcyBlbmFibGluZyBSZWNvdmVyVm9sdW1lRXhwYW5zaW9uRmFpbHVyZSBmZWF0dXJlLiIsInR5cGUiOiJvYmplY3QiLCJ4LWt1YmVybmV0ZXMtbWFwLXR5cGUiOiJncmFudWxhciJ9LCJhbGxvY2F0ZWRSZXNvdXJjZXMiOnsiYWRkaXRpb25hbFByb3BlcnRpZXMiOnsiYW55T2YiOlt7InR5cGUiOiJpbnRlZ2VyIn0seyJ0eXBlIjoic3RyaW5nIn1dLCJwYXR0ZXJuIjoiXihcXCt8LSk/KChbMC05XSsoXFwuWzAtOV0qKT8pfChcXC5bMC05XSspKSgoW0tNR1RQRV1pKXxbbnVta01HVFBFXXwoW2VFXShcXCt8LSk/KChbMC05XSsoXFwuWzAtOV0qKT8pfChcXC5bMC05XSspKSkpPyQiLCJ4LWt1YmVybmV0ZXMtaW50LW9yLXN0cmluZyI6dHJ1ZX0sImRlc2NyaXB0aW9uIjoiYWxsb2NhdGVkUmVzb3VyY2VzIHRyYWNrcyB0aGUgcmVzb3VyY2VzIGFsbG9jYXRlZCB0byBhIFBWQyBpbmNsdWRpbmcgaXRzIGNhcGFjaXR5LiBLZXkgbmFtZXMgZm9sbG93IHN0YW5kYXJkIEt1YmVybmV0ZXMgbGFiZWwgc3ludGF4LiBWYWxpZCB2YWx1ZXMgYXJlIGVpdGhlcjogKiBVbi1wcmVmaXhlZCBrZXlzOiAtIHN0b3JhZ2UgLSB0aGUgY2FwYWNpdHkgb2YgdGhlIHZvbHVtZS4gKiBDdXN0b20gcmVzb3VyY2VzIG11c3QgdXNlIGltcGxlbWVudGF0aW9uLWRlZmluZWQgcHJlZml4ZWQgbmFtZXMgc3VjaCBhcyBcImV4YW1wbGUuY29tL215LWN1c3RvbS1yZXNvdXJjZVwiIEFwYXJ0IGZyb20gYWJvdmUgdmFsdWVzIC0ga2V5cyB0aGF0IGFyZSB1bnByZWZpeGVkIG9yIGhhdmUga3ViZXJuZXRlcy5pbyBwcmVmaXggYXJlIGNvbnNpZGVyZWQgcmVzZXJ2ZWQgYW5kIGhlbmNlIG1heSBub3QgYmUgdXNlZC4gXG4gQ2FwYWNpdHkgcmVwb3J0ZWQgaGVyZSBtYXkgYmUgbGFyZ2VyIHRoYW4gdGhlIGFjdHVhbCBjYXBhY2l0eSB3aGVuIGEgdm9sdW1lIGV4cGFuc2lvbiBvcGVyYXRpb24gaXMgcmVxdWVzdGVkLiBGb3Igc3RvcmFnZSBxdW90YSwgdGhlIGxhcmdlciB2YWx1ZSBmcm9tIGFsbG9jYXRlZFJlc291cmNlcyBhbmQgUFZDLnNwZWMucmVzb3VyY2VzIGlzIHVzZWQuIElmIGFsbG9jYXRlZFJlc291cmNlcyBpcyBub3Qgc2V0LCBQVkMuc3BlYy5yZXNvdXJjZXMgYWxvbmUgaXMgdXNlZCBmb3IgcXVvdGEgY2FsY3VsYXRpb24uIElmIGEgdm9sdW1lIGV4cGFuc2lvbiBjYXBhY2l0eSByZXF1ZXN0IGlzIGxvd2VyZWQsIGFsbG9jYXRlZFJlc291cmNlcyBpcyBvbmx5IGxvd2VyZWQgaWYgdGhlcmUgYXJlIG5vIGV4cGFuc2lvbiBvcGVyYXRpb25zIGluIHByb2dyZXNzIGFuZCBpZiB0aGUgYWN0dWFsIHZvbHVtZSBjYXBhY2l0eSBpcyBlcXVhbCBvciBsb3dlciB0aGFuIHRoZSByZXF1ZXN0ZWQgY2FwYWNpdHkuIFxuIEEgY29udHJvbGxlciB0aGF0IHJlY2VpdmVzIFBWQyB1cGRhdGUgd2l0aCBwcmV2aW91c2x5IHVua25vd24gcmVzb3VyY2VOYW1lIHNob3VsZCBpZ25vcmUgdGhlIHVwZGF0ZSBmb3IgdGhlIHB1cnBvc2UgaXQgd2FzIGRlc2lnbmVkLiBGb3IgZXhhbXBsZSAtIGEgY29udHJvbGxlciB0aGF0IG9ubHkgaXMgcmVzcG9uc2libGUgZm9yIHJlc2l6aW5nIGNhcGFjaXR5IG9mIHRoZSB2b2x1bWUsIHNob3VsZCBpZ25vcmUgUFZDIHVwZGF0ZXMgdGhhdCBjaGFuZ2Ugb3RoZXIgdmFsaWQgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCBQVkMuIFxuIFRoaXMgaXMgYW4gYWxwaGEgZmllbGQgYW5kIHJlcXVpcmVzIGVuYWJsaW5nIFJlY292ZXJWb2x1bWVFeHBhbnNpb25GYWlsdXJlIGZlYXR1cmUuIiwidHlwZSI6Im9iamVjdCJ9LCJjYXBhY2l0eSI6eyJhZGRpdGlvbmFsUHJvcGVydGllcyI6eyJhbnlPZiI6W3sidHlwZSI6ImludGVnZXIifSx7InR5cGUiOiJzdHJpbmcifV0sInBhdHRlcm4iOiJeKFxcK3wtKT8oKFswLTldKyhcXC5bMC05XSopPyl8KFxcLlswLTldKykpKChbS01HVFBFXWkpfFtudW1rTUdUUEVdfChbZUVdKFxcK3wtKT8oKFswLTldKyhcXC5bMC05XSopPyl8KFxcLlswLTldKykpKSk/JCIsIngta3ViZXJuZXRlcy1pbnQtb3Itc3RyaW5nIjp0cnVlfSwiZGVzY3JpcHRpb24iOiJjYXBhY2l0eSByZXByZXNlbnRzIHRoZSBhY3R1YWwgcmVzb3VyY2VzIG9mIHRoZSB1bmRlcmx5aW5nIHZvbHVtZS4iLCJ0eXBlIjoib2JqZWN0In0sImNvbmRpdGlvbnMiOnsiZGVzY3JpcHRpb24iOiJjb25kaXRpb25zIGlzIHRoZSBjdXJyZW50IENvbmRpdGlvbiBvZiBwZXJzaXN0ZW50IHZvbHVtZSBjbGFpbS4gSWYgdW5kZXJseWluZyBwZXJzaXN0ZW50IHZvbHVtZSBpcyBiZWluZyByZXNpemVkIHRoZW4gdGhlIENvbmRpdGlvbiB3aWxsIGJlIHNldCB0byAnUmVzaXplU3RhcnRlZCcuIiwiaXRlbXMiOnsiZGVzY3JpcHRpb24iOiJQZXJzaXN0ZW50Vm9sdW1lQ2xhaW1Db25kaXRpb24gY29udGFpbnMgZGV0YWlscyBhYm91dCBzdGF0ZSBvZiBwdmMiLCJwcm9wZXJ0aWVzIjp7Imxhc3RQcm9iZVRpbWUiOnsiZGVzY3JpcHRpb24iOiJsYXN0UHJvYmVUaW1lIGlzIHRoZSB0aW1lIHdlIHByb2JlZCB0aGUgY29uZGl0aW9uLiIsImZvcm1hdCI6ImRhdGUtdGltZSIsInR5cGUiOiJzdHJpbmcifSwibGFzdFRyYW5zaXRpb25UaW1lIjp7ImRlc2NyaXB0aW9uIjoibGFzdFRyYW5zaXRpb25UaW1lIGlzIHRoZSB0aW1lIHRoZSBjb25kaXRpb24gdHJhbnNpdGlvbmVkIGZyb20gb25lIHN0YXR1cyB0byBhbm90aGVyLiIsImZvcm1hdCI6ImRhdGUtdGltZSIsInR5cGUiOiJzdHJpbmcifSwibWVzc2FnZSI6eyJkZXNjcmlwdGlvbiI6Im1lc3NhZ2UgaXMgdGhlIGh1bWFuLXJlYWRhYmxlIG1lc3NhZ2UgaW5kaWNhdGluZyBkZXRhaWxzIGFib3V0IGxhc3QgdHJhbnNpdGlvbi4iLCJ0eXBlIjoic3RyaW5nIn0sInJlYXNvbiI6eyJkZXNjcmlwdGlvbiI6InJlYXNvbiBpcyBhIHVuaXF1ZSwgdGhpcyBzaG91bGQgYmUgYSBzaG9ydCwgbWFjaGluZSB1bmRlcnN0YW5kYWJsZSBzdHJpbmcgdGhhdCBnaXZlcyB0aGUgcmVhc29uIGZvciBjb25kaXRpb24ncyBsYXN0IHRyYW5zaXRpb24uIElmIGl0IHJlcG9ydHMgXCJSZXNpemVTdGFydGVkXCIgdGhhdCBtZWFucyB0aGUgdW5kZXJseWluZyBwZXJzaXN0ZW50IHZvbHVtZSBpcyBiZWluZyByZXNpemVkLiIsInR5cGUiOiJzdHJpbmcifSwic3RhdHVzIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6eyJkZXNjcmlwdGlvbiI6IlBlcnNpc3RlbnRWb2x1bWVDbGFpbUNvbmRpdGlvblR5cGUgaXMgYSB2YWxpZCB2YWx1ZSBvZiBQZXJzaXN0ZW50Vm9sdW1lQ2xhaW1Db25kaXRpb24uVHlwZSIsInR5cGUiOiJzdHJpbmcifX0sInJlcXVpcmVkIjpbInN0YXR1cyIsInR5cGUiXSwidHlwZSI6Im9iamVjdCJ9LCJ0eXBlIjoiYXJyYXkifSwiY3VycmVudFZvbHVtZUF0dHJpYnV0ZXNDbGFzc05hbWUiOnsiZGVzY3JpcHRpb24iOiJjdXJyZW50Vm9sdW1lQXR0cmlidXRlc0NsYXNzTmFtZSBpcyB0aGUgY3VycmVudCBuYW1lIG9mIHRoZSBWb2x1bWVBdHRyaWJ1dGVzQ2xhc3MgdGhlIFBWQyBpcyB1c2luZy4gV2hlbiB1bnNldCwgdGhlcmUgaXMgbm8gVm9sdW1lQXR0cmlidXRlQ2xhc3MgYXBwbGllZCB0byB0aGlzIFBlcnNpc3RlbnRWb2x1bWVDbGFpbSBUaGlzIGlzIGFuIGFscGhhIGZpZWxkIGFuZCByZXF1aXJlcyBlbmFibGluZyBWb2x1bWVBdHRyaWJ1dGVzQ2xhc3MgZmVhdHVyZS4iLCJ0eXBlIjoic3RyaW5nIn0sIm1vZGlmeVZvbHVtZVN0YXR1cyI6eyJkZXNjcmlwdGlvbiI6Ik1vZGlmeVZvbHVtZVN0YXR1cyByZXByZXNlbnRzIHRoZSBzdGF0dXMgb2JqZWN0IG9mIENvbnRyb2xsZXJNb2RpZnlWb2x1bWUgb3BlcmF0aW9uLiBXaGVuIHRoaXMgaXMgdW5zZXQsIHRoZXJlIGlzIG5vIE1vZGlmeVZvbHVtZSBvcGVyYXRpb24gYmVpbmcgYXR0ZW1wdGVkLiBUaGlzIGlzIGFuIGFscGhhIGZpZWxkIGFuZCByZXF1aXJlcyBlbmFibGluZyBWb2x1bWVBdHRyaWJ1dGVzQ2xhc3MgZmVhdHVyZS4iLCJwcm9wZXJ0aWVzIjp7InN0YXR1cyI6eyJkZXNjcmlwdGlvbiI6InN0YXR1cyBpcyB0aGUgc3RhdHVzIG9mIHRoZSBDb250cm9sbGVyTW9kaWZ5Vm9sdW1lIG9wZXJhdGlvbi4gSXQgY2FuIGJlIGluIGFueSBvZiBmb2xsb3dpbmcgc3RhdGVzOiAtIFBlbmRpbmcgUGVuZGluZyBpbmRpY2F0ZXMgdGhhdCB0aGUgUGVyc2lzdGVudFZvbHVtZUNsYWltIGNhbm5vdCBiZSBtb2RpZmllZCBkdWUgdG8gdW5tZXQgcmVxdWlyZW1lbnRzLCBzdWNoIGFzIHRoZSBzcGVjaWZpZWQgVm9sdW1lQXR0cmlidXRlc0NsYXNzIG5vdCBleGlzdGluZy4gLSBJblByb2dyZXNzIEluUHJvZ3Jlc3MgaW5kaWNhdGVzIHRoYXQgdGhlIHZvbHVtZSBpcyBiZWluZyBtb2RpZmllZC4gLSBJbmZlYXNpYmxlIEluZmVhc2libGUgaW5kaWNhdGVzIHRoYXQgdGhlIHJlcXVlc3QgaGFzIGJlZW4gcmVqZWN0ZWQgYXMgaW52YWxpZCBieSB0aGUgQ1NJIGRyaXZlci4gVG8gcmVzb2x2ZSB0aGUgZXJyb3IsIGEgdmFsaWQgVm9sdW1lQXR0cmlidXRlc0NsYXNzIG5lZWRzIHRvIGJlIHNwZWNpZmllZC4gTm90ZTogTmV3IHN0YXR1c2VzIGNhbiBiZSBhZGRlZCBpbiB0aGUgZnV0dXJlLiBDb25zdW1lcnMgc2hvdWxkIGNoZWNrIGZvciB1bmtub3duIHN0YXR1c2VzIGFuZCBmYWlsIGFwcHJvcHJpYXRlbHkuIiwidHlwZSI6InN0cmluZyJ9LCJ0YXJnZXRWb2x1bWVBdHRyaWJ1dGVzQ2xhc3NOYW1lIjp7ImRlc2NyaXB0aW9uIjoidGFyZ2V0Vm9sdW1lQXR0cmlidXRlc0NsYXNzTmFtZSBpcyB0aGUgbmFtZSBvZiB0aGUgVm9sdW1lQXR0cmlidXRlc0NsYXNzIHRoZSBQVkMgY3VycmVudGx5IGJlaW5nIHJlY29uY2lsZWQiLCJ0eXBlIjoic3RyaW5nIn19LCJyZXF1aXJlZCI6WyJzdGF0dXMiXSwidHlwZSI6Im9iamVjdCJ9LCJwaGFzZSI6eyJkZXNjcmlwdGlvbiI6InBoYXNlIHJlcHJlc2VudHMgdGhlIGN1cnJlbnQgcGhhc2Ugb2YgUGVyc2lzdGVudFZvbHVtZUNsYWltLiIsInR5cGUiOiJzdHJpbmcifX0sInR5cGUiOiJvYmplY3QifX0sInR5cGUiOiJvYmplY3QifX0sInR5cGUiOiJvYmplY3QifSwiY2VwaE9iamVjdFN0b3JlVXNlcnMiOnsiZGVzY3JpcHRpb24iOiJNYW5hZ2VDZXBoT2JqZWN0U3RvcmVVc2VycyBkZWZpbmVzIGhvdyB0byByZWNvbmNpbGUgQ2VwaE9iamVjdFN0b3JlVXNlcnMiLCJwcm9wZXJ0aWVzIjp7InJlY29uY2lsZVN0cmF0ZWd5Ijp7InR5cGUiOiJzdHJpbmcifX0sInR5cGUiOiJvYmplY3QifSwiY2VwaE9iamVjdFN0b3JlcyI6eyJkZXNjcmlwdGlvbiI6Ik1hbmFnZUNlcGhPYmplY3RTdG9yZXMgZGVmaW5lcyBob3cgdG8gcmVjb25jaWxlIENlcGhPYmplY3RTdG9yZXMiLCJwcm9wZXJ0aWVzIjp7ImRpc2FibGVSb3V0ZSI6eyJ0eXBlIjoiYm9vbGVhbiJ9LCJkaXNhYmxlU3RvcmFnZUNsYXNzIjp7InR5cGUiOiJib29sZWFuIn0sImdhdGV3YXlJbnN0YW5jZXMiOnsidHlwZSI6ImludGVnZXIifSwiaG9zdE5ldHdvcmsiOnsidHlwZSI6ImJvb2xlYW4ifSwicmVjb25jaWxlU3RyYXRlZ3kiOnsidHlwZSI6InN0cmluZyJ9LCJzdG9yYWdlQ2xhc3NOYW1lIjp7ImRlc2NyaXB0aW9uIjoiU3RvcmFnZUNsYXNzTmFtZSBzcGVjaWZpZXMgdGhlIG5hbWUgb2YgdGhlIHN0b3JhZ2UgY2xhc3MgY3JlYXRlZCBmb3IgY2VwaCBvYmMncyIsIm1heExlbmd0aCI6MjUzLCJwYXR0ZXJuIjoiXlthLXowLTldKFstYS16MC05XSpbYS16MC05XSk/KFxcXFwuW2EtejAtOV0oWy1hLXowLTldKlthLXowLTldKT8pKiQiLCJ0eXBlIjoic3RyaW5nIn0sInZpcnR1YWxIb3N0bmFtZXMiOnsiaXRlbXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjoiYXJyYXkifX0sInR5cGUiOiJvYmplY3QifSwiY2VwaFJCRE1pcnJvciI6eyJkZXNjcmlwdGlvbiI6Ik1hbmFnZUNlcGhSQkRNaXJyb3IgZGVmaW5lcyBob3cgdG8gcmVjb25jaWxlIENlcGggUkJETWlycm9yIiwicHJvcGVydGllcyI6eyJkYWVtb25Db3VudCI6eyJkZWZhdWx0IjoxLCJtaW5pbXVtIjoxLCJ0eXBlIjoiaW50ZWdlciJ9LCJyZWNvbmNpbGVTdHJhdGVneSI6eyJ0eXBlIjoic3RyaW5nIn19LCJ0eXBlIjoib2JqZWN0In0sImNlcGhUb29sYm94Ijp7ImRlc2NyaXB0aW9uIjoiTWFuYWdlQ2VwaFRvb2xib3ggZGVmaW5lcyBob3cgdG8gcmVjb25jaWxlIENlcGggdG9vbGJveCIsInByb3BlcnRpZXMiOnsicmVjb25jaWxlU3RyYXRlZ3kiOnsidHlwZSI6InN0cmluZyJ9fSwidHlwZSI6Im9iamVjdCJ9fSwidHlwZSI6Im9iamVjdCJ9LCJtZ3IiOnsiZGVzY3JpcHRpb24iOiJNZ3JTcGVjIGRlZmluZXMgdGhlIHNldHRpbmdzIGZvciB0aGUgQ2VwaCBNYW5hZ2VyIiwicHJvcGVydGllcyI6eyJlbmFibGVBY3RpdmVQYXNzaXZlIjp7ImRlc2NyaXB0aW9uIjoiRW5hYmxlQWN0aXZlUGFzc2l2ZSBjYW4gYmUgc2V0IGFzIHRydWUgdG8gZGVwbG95IDIgY2VwaCBtYW5hZ2VyIHBvZHMsIG9uZSBhY3RpdmUgYW5kIG9uZSBzdGFuZGJ5IENlcGggd2lsbCBwcm9tb3RlIHRoZSBzdGFuZGJ5IG1nciB3aGVuIHRoZSBhY3RpdmUgbWdyIGdvZXMgZG93biBkdWUgdG8gYW55IHJlYXNvbiIsInR5cGUiOiJib29sZWFuIn19LCJ0eXBlIjoib2JqZWN0In0sIm1pcnJvcmluZyI6eyJkZXNjcmlwdGlvbiI6Ik1pcnJvcmluZyBzcGVjaWZpZXMgZGF0YSBtaXJyb3JpbmcgY29uZmlndXJhdGlvbiBmb3IgdGhlIHN0b3JhZ2UgY2x1c3Rlci4gVGhpcyBjb25maWd1cmF0aW9uIHdpbGwgb25seSBiZSBhcHBsaWVkIHRvIHJlc291cmNlcyBtYW5hZ2VkIGJ5IHRoZSBvcGVyYXRvci4iLCJwcm9wZXJ0aWVzIjp7ImVuYWJsZWQiOnsiZGVzY3JpcHRpb24iOiJJZiB0cnVlLCBkYXRhIG1pcnJvcmluZyBpcyBlbmFibGVkIGZvciB0aGUgU3RvcmFnZUNsdXN0ZXIuIFRoaXMgY29uZmlndXJhdGlvbiB3aWxsIG9ubHkgYmUgYXBwbGllZCB0byByZXNvdXJjZXMgKHN1Y2ggYXMgQ2VwaEJsb2NrUG9vbCkgbWFuYWdlZCBieSB0aGUgb3BlcmF0b3IuIEl0IGlzIG9wdGlvbmFsIGFuZCBkZWZhdWx0cyB0byBmYWxzZS4iLCJ0eXBlIjoiYm9vbGVhbiJ9LCJwZWVyU2VjcmV0TmFtZXMiOnsiZGVzY3JpcHRpb24iOiJQZWVyU2VjcmV0TmFtZXMgcmVwcmVzZW50cyB0aGUgS3ViZXJuZXRlcyBTZWNyZXQgbmFtZXMgb2YgcmJkLW1pcnJvciBwZWVycyB0b2tlbnMiLCJpdGVtcyI6eyJ0eXBlIjoic3RyaW5nIn0sInR5cGUiOiJhcnJheSJ9fSwidHlwZSI6Im9iamVjdCJ9LCJtb25EYXRhRGlySG9zdFBhdGgiOnsidHlwZSI6InN0cmluZyJ9LCJtb25QVkNUZW1wbGF0ZSI6eyJkZXNjcmlwdGlvbiI6IlBlcnNpc3RlbnRWb2x1bWVDbGFpbSBpcyBhIHVzZXIncyByZXF1ZXN0IGZvciBhbmQgY2xhaW0gdG8gYSBwZXJzaXN0ZW50IHZvbHVtZSIsInByb3BlcnRpZXMiOnsiYXBpVmVyc2lvbiI6eyJkZXNjcmlwdGlvbiI6IkFQSVZlcnNpb24gZGVmaW5lcyB0aGUgdmVyc2lvbmVkIHNjaGVtYSBvZiB0aGlzIHJlcHJlc2VudGF0aW9uIG9mIGFuIG9iamVjdC4gU2VydmVycyBzaG91bGQgY29udmVydCByZWNvZ25pemVkIHNjaGVtYXMgdG8gdGhlIGxhdGVzdCBpbnRlcm5hbCB2YWx1ZSwgYW5kIG1heSByZWplY3QgdW5yZWNvZ25pemVkIHZhbHVlcy4gTW9yZSBpbmZvOiBodHRwczovL2dpdC5rOHMuaW8vY29tbXVuaXR5L2NvbnRyaWJ1dG9ycy9kZXZlbC9zaWctYXJjaGl0ZWN0dXJlL2FwaS1jb252ZW50aW9ucy5tZCNyZXNvdXJjZXMiLCJ0eXBlIjoic3RyaW5nIn0sImtpbmQiOnsiZGVzY3JpcHRpb24iOiJLaW5kIGlzIGEgc3RyaW5nIHZhbHVlIHJlcHJlc2VudGluZyB0aGUgUkVTVCByZXNvdXJjZSB0aGlzIG9iamVjdCByZXByZXNlbnRzLiBTZXJ2ZXJzIG1heSBpbmZlciB0aGlzIGZyb20gdGhlIGVuZHBvaW50IHRoZSBjbGllbnQgc3VibWl0cyByZXF1ZXN0cyB0by4gQ2Fubm90IGJlIHVwZGF0ZWQuIEluIENhbWVsQ2FzZS4gTW9yZSBpbmZvOiBodHRwczovL2dpdC5rOHMuaW8vY29tbXVuaXR5L2NvbnRyaWJ1dG9ycy9kZXZlbC9zaWctYXJjaGl0ZWN0dXJlL2FwaS1jb252ZW50aW9ucy5tZCN0eXBlcy1raW5kcyIsInR5cGUiOiJzdHJpbmcifSwibWV0YWRhdGEiOnsiZGVzY3JpcHRpb24iOiJTdGFuZGFyZCBvYmplY3QncyBtZXRhZGF0YS4gTW9yZSBpbmZvOiBodHRwczovL2dpdC5rOHMuaW8vY29tbXVuaXR5L2NvbnRyaWJ1dG9ycy9kZXZlbC9zaWctYXJjaGl0ZWN0dXJlL2FwaS1jb252ZW50aW9ucy5tZCNtZXRhZGF0YSIsInByb3BlcnRpZXMiOnsiYW5ub3RhdGlvbnMiOnsiYWRkaXRpb25hbFByb3BlcnRpZXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjoib2JqZWN0In0sImZpbmFsaXplcnMiOnsiaXRlbXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjoiYXJyYXkifSwibGFiZWxzIjp7ImFkZGl0aW9uYWxQcm9wZXJ0aWVzIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6Im9iamVjdCJ9LCJuYW1lIjp7InR5cGUiOiJzdHJpbmcifSwibmFtZXNwYWNlIjp7InR5cGUiOiJzdHJpbmcifX0sInR5cGUiOiJvYmplY3QifSwic3BlYyI6eyJkZXNjcmlwdGlvbiI6InNwZWMgZGVmaW5lcyB0aGUgZGVzaXJlZCBjaGFyYWN0ZXJpc3RpY3Mgb2YgYSB2b2x1bWUgcmVxdWVzdGVkIGJ5IGEgcG9kIGF1dGhvci4gTW9yZSBpbmZvOiBodHRwczovL2t1YmVybmV0ZXMuaW8vZG9jcy9jb25jZXB0cy9zdG9yYWdlL3BlcnNpc3RlbnQtdm9sdW1lcyNwZXJzaXN0ZW50dm9sdW1lY2xhaW1zIiwicHJvcGVydGllcyI6eyJhY2Nlc3NNb2RlcyI6eyJkZXNjcmlwdGlvbiI6ImFjY2Vzc01vZGVzIGNvbnRhaW5zIHRoZSBkZXNpcmVkIGFjY2VzcyBtb2RlcyB0aGUgdm9sdW1lIHNob3VsZCBoYXZlLiBNb3JlIGluZm86IGh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL2NvbmNlcHRzL3N0b3JhZ2UvcGVyc2lzdGVudC12b2x1bWVzI2FjY2Vzcy1tb2Rlcy0xIiwiaXRlbXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjoiYXJyYXkifSwiZGF0YVNvdXJjZSI6eyJkZXNjcmlwdGlvbiI6ImRhdGFTb3VyY2UgZmllbGQgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBlaXRoZXI6ICogQW4gZXhpc3RpbmcgVm9sdW1lU25hcHNob3Qgb2JqZWN0IChzbmFwc2hvdC5zdG9yYWdlLms4cy5pby9Wb2x1bWVTbmFwc2hvdCkgKiBBbiBleGlzdGluZyBQVkMgKFBlcnNpc3RlbnRWb2x1bWVDbGFpbSkgSWYgdGhlIHByb3Zpc2lvbmVyIG9yIGFuIGV4dGVybmFsIGNvbnRyb2xsZXIgY2FuIHN1cHBvcnQgdGhlIHNwZWNpZmllZCBkYXRhIHNvdXJjZSwgaXQgd2lsbCBjcmVhdGUgYSBuZXcgdm9sdW1lIGJhc2VkIG9uIHRoZSBjb250ZW50cyBvZiB0aGUgc3BlY2lmaWVkIGRhdGEgc291cmNlLiBXaGVuIHRoZSBBbnlWb2x1bWVEYXRhU291cmNlIGZlYXR1cmUgZ2F0ZSBpcyBlbmFibGVkLCBkYXRhU291cmNlIGNvbnRlbnRzIHdpbGwgYmUgY29waWVkIHRvIGRhdGFTb3VyY2VSZWYsIGFuZCBkYXRhU291cmNlUmVmIGNvbnRlbnRzIHdpbGwgYmUgY29waWVkIHRvIGRhdGFTb3VyY2Ugd2hlbiBkYXRhU291cmNlUmVmLm5hbWVzcGFjZSBpcyBub3Qgc3BlY2lmaWVkLiBJZiB0aGUgbmFtZXNwYWNlIGlzIHNwZWNpZmllZCwgdGhlbiBkYXRhU291cmNlUmVmIHdpbGwgbm90IGJlIGNvcGllZCB0byBkYXRhU291cmNlLiIsInByb3BlcnRpZXMiOnsiYXBpR3JvdXAiOnsiZGVzY3JpcHRpb24iOiJBUElHcm91cCBpcyB0aGUgZ3JvdXAgZm9yIHRoZSByZXNvdXJjZSBiZWluZyByZWZlcmVuY2VkLiBJZiBBUElHcm91cCBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgc3BlY2lmaWVkIEtpbmQgbXVzdCBiZSBpbiB0aGUgY29yZSBBUEkgZ3JvdXAuIEZvciBhbnkgb3RoZXIgdGhpcmQtcGFydHkgdHlwZXMsIEFQSUdyb3VwIGlzIHJlcXVpcmVkLiIsInR5cGUiOiJzdHJpbmcifSwia2luZCI6eyJkZXNjcmlwdGlvbiI6IktpbmQgaXMgdGhlIHR5cGUgb2YgcmVzb3VyY2UgYmVpbmcgcmVmZXJlbmNlZCIsInR5cGUiOiJzdHJpbmcifSwibmFtZSI6eyJkZXNjcmlwdGlvbiI6Ik5hbWUgaXMgdGhlIG5hbWUgb2YgcmVzb3VyY2UgYmVpbmcgcmVmZXJlbmNlZCIsInR5cGUiOiJzdHJpbmcifX0sInJlcXVpcmVkIjpbImtpbmQiLCJuYW1lIl0sInR5cGUiOiJvYmplY3QiLCJ4LWt1YmVybmV0ZXMtbWFwLXR5cGUiOiJhdG9taWMifSwiZGF0YVNvdXJjZVJlZiI6eyJkZXNjcmlwdGlvbiI6ImRhdGFTb3VyY2VSZWYgc3BlY2lmaWVzIHRoZSBvYmplY3QgZnJvbSB3aGljaCB0byBwb3B1bGF0ZSB0aGUgdm9sdW1lIHdpdGggZGF0YSwgaWYgYSBub24tZW1wdHkgdm9sdW1lIGlzIGRlc2lyZWQuIFRoaXMgbWF5IGJlIGFueSBvYmplY3QgZnJvbSBhIG5vbi1lbXB0eSBBUEkgZ3JvdXAgKG5vbiBjb3JlIG9iamVjdCkgb3IgYSBQZXJzaXN0ZW50Vm9sdW1lQ2xhaW0gb2JqZWN0LiBXaGVuIHRoaXMgZmllbGQgaXMgc3BlY2lmaWVkLCB2b2x1bWUgYmluZGluZyB3aWxsIG9ubHkgc3VjY2VlZCBpZiB0aGUgdHlwZSBvZiB0aGUgc3BlY2lmaWVkIG9iamVjdCBtYXRjaGVzIHNvbWUgaW5zdGFsbGVkIHZvbHVtZSBwb3B1bGF0b3Igb3IgZHluYW1pYyBwcm92aXNpb25lci4gVGhpcyBmaWVsZCB3aWxsIHJlcGxhY2UgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIGRhdGFTb3VyY2UgZmllbGQgYW5kIGFzIHN1Y2ggaWYgYm90aCBmaWVsZHMgYXJlIG5vbi1lbXB0eSwgdGhleSBtdXN0IGhhdmUgdGhlIHNhbWUgdmFsdWUuIEZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSwgd2hlbiBuYW1lc3BhY2UgaXNuJ3Qgc3BlY2lmaWVkIGluIGRhdGFTb3VyY2VSZWYsIGJvdGggZmllbGRzIChkYXRhU291cmNlIGFuZCBkYXRhU291cmNlUmVmKSB3aWxsIGJlIHNldCB0byB0aGUgc2FtZSB2YWx1ZSBhdXRvbWF0aWNhbGx5IGlmIG9uZSBvZiB0aGVtIGlzIGVtcHR5IGFuZCB0aGUgb3RoZXIgaXMgbm9uLWVtcHR5LiBXaGVuIG5hbWVzcGFjZSBpcyBzcGVjaWZpZWQgaW4gZGF0YVNvdXJjZVJlZiwgZGF0YVNvdXJjZSBpc24ndCBzZXQgdG8gdGhlIHNhbWUgdmFsdWUgYW5kIG11c3QgYmUgZW1wdHkuIFRoZXJlIGFyZSB0aHJlZSBpbXBvcnRhbnQgZGlmZmVyZW5jZXMgYmV0d2VlbiBkYXRhU291cmNlIGFuZCBkYXRhU291cmNlUmVmOiAqIFdoaWxlIGRhdGFTb3VyY2Ugb25seSBhbGxvd3MgdHdvIHNwZWNpZmljIHR5cGVzIG9mIG9iamVjdHMsIGRhdGFTb3VyY2VSZWYgYWxsb3dzIGFueSBub24tY29yZSBvYmplY3QsIGFzIHdlbGwgYXMgUGVyc2lzdGVudFZvbHVtZUNsYWltIG9iamVjdHMuICogV2hpbGUgZGF0YVNvdXJjZSBpZ25vcmVzIGRpc2FsbG93ZWQgdmFsdWVzIChkcm9wcGluZyB0aGVtKSwgZGF0YVNvdXJjZVJlZiBwcmVzZXJ2ZXMgYWxsIHZhbHVlcywgYW5kIGdlbmVyYXRlcyBhbiBlcnJvciBpZiBhIGRpc2FsbG93ZWQgdmFsdWUgaXMgc3BlY2lmaWVkLiAqIFdoaWxlIGRhdGFTb3VyY2Ugb25seSBhbGxvd3MgbG9jYWwgb2JqZWN0cywgZGF0YVNvdXJjZVJlZiBhbGxvd3Mgb2JqZWN0cyBpbiBhbnkgbmFtZXNwYWNlcy4gKEJldGEpIFVzaW5nIHRoaXMgZmllbGQgcmVxdWlyZXMgdGhlIEFueVZvbHVtZURhdGFTb3VyY2UgZmVhdHVyZSBnYXRlIHRvIGJlIGVuYWJsZWQuIChBbHBoYSkgVXNpbmcgdGhlIG5hbWVzcGFjZSBmaWVsZCBvZiBkYXRhU291cmNlUmVmIHJlcXVpcmVzIHRoZSBDcm9zc05hbWVzcGFjZVZvbHVtZURhdGFTb3VyY2UgZmVhdHVyZSBnYXRlIHRvIGJlIGVuYWJsZWQuIiwicHJvcGVydGllcyI6eyJhcGlHcm91cCI6eyJkZXNjcmlwdGlvbiI6IkFQSUdyb3VwIGlzIHRoZSBncm91cCBmb3IgdGhlIHJlc291cmNlIGJlaW5nIHJlZmVyZW5jZWQuIElmIEFQSUdyb3VwIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBzcGVjaWZpZWQgS2luZCBtdXN0IGJlIGluIHRoZSBjb3JlIEFQSSBncm91cC4gRm9yIGFueSBvdGhlciB0aGlyZC1wYXJ0eSB0eXBlcywgQVBJR3JvdXAgaXMgcmVxdWlyZWQuIiwidHlwZSI6InN0cmluZyJ9LCJraW5kIjp7ImRlc2NyaXB0aW9uIjoiS2luZCBpcyB0aGUgdHlwZSBvZiByZXNvdXJjZSBiZWluZyByZWZlcmVuY2VkIiwidHlwZSI6InN0cmluZyJ9LCJuYW1lIjp7ImRlc2NyaXB0aW9uIjoiTmFtZSBpcyB0aGUgbmFtZSBvZiByZXNvdXJjZSBiZWluZyByZWZlcmVuY2VkIiwidHlwZSI6InN0cmluZyJ9LCJuYW1lc3BhY2UiOnsiZGVzY3JpcHRpb24iOiJOYW1lc3BhY2UgaXMgdGhlIG5hbWVzcGFjZSBvZiByZXNvdXJjZSBiZWluZyByZWZlcmVuY2VkIE5vdGUgdGhhdCB3aGVuIGEgbmFtZXNwYWNlIGlzIHNwZWNpZmllZCwgYSBnYXRld2F5Lm5ldHdvcmtpbmcuazhzLmlvL1JlZmVyZW5jZUdyYW50IG9iamVjdCBpcyByZXF1aXJlZCBpbiB0aGUgcmVmZXJlbnQgbmFtZXNwYWNlIHRvIGFsbG93IHRoYXQgbmFtZXNwYWNlJ3Mgb3duZXIgdG8gYWNjZXB0IHRoZSByZWZlcmVuY2UuIFNlZSB0aGUgUmVmZXJlbmNlR3JhbnQgZG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy4gKEFscGhhKSBUaGlzIGZpZWxkIHJlcXVpcmVzIHRoZSBDcm9zc05hbWVzcGFjZVZvbHVtZURhdGFTb3VyY2UgZmVhdHVyZSBnYXRlIHRvIGJlIGVuYWJsZWQuIiwidHlwZSI6InN0cmluZyJ9fSwicmVxdWlyZWQiOlsia2luZCIsIm5hbWUiXSwidHlwZSI6Im9iamVjdCJ9LCJyZXNvdXJjZXMiOnsiZGVzY3JpcHRpb24iOiJyZXNvdXJjZXMgcmVwcmVzZW50cyB0aGUgbWluaW11bSByZXNvdXJjZXMgdGhlIHZvbHVtZSBzaG91bGQgaGF2ZS4gSWYgUmVjb3ZlclZvbHVtZUV4cGFuc2lvbkZhaWx1cmUgZmVhdHVyZSBpcyBlbmFibGVkIHVzZXJzIGFyZSBhbGxvd2VkIHRvIHNwZWNpZnkgcmVzb3VyY2UgcmVxdWlyZW1lbnRzIHRoYXQgYXJlIGxvd2VyIHRoYW4gcHJldmlvdXMgdmFsdWUgYnV0IG11c3Qgc3RpbGwgYmUgaGlnaGVyIHRoYW4gY2FwYWNpdHkgcmVjb3JkZWQgaW4gdGhlIHN0YXR1cyBmaWVsZCBvZiB0aGUgY2xhaW0uIE1vcmUgaW5mbzogaHR0cHM6Ly9rdWJlcm5ldGVzLmlvL2RvY3MvY29uY2VwdHMvc3RvcmFnZS9wZXJzaXN0ZW50LXZvbHVtZXMjcmVzb3VyY2VzIiwicHJvcGVydGllcyI6eyJsaW1pdHMiOnsiYWRkaXRpb25hbFByb3BlcnRpZXMiOnsiYW55T2YiOlt7InR5cGUiOiJpbnRlZ2VyIn0seyJ0eXBlIjoic3RyaW5nIn1dLCJwYXR0ZXJuIjoiXihcXCt8LSk/KChbMC05XSsoXFwuWzAtOV0qKT8pfChcXC5bMC05XSspKSgoW0tNR1RQRV1pKXxbbnVta01HVFBFXXwoW2VFXShcXCt8LSk/KChbMC05XSsoXFwuWzAtOV0qKT8pfChcXC5bMC05XSspKSkpPyQiLCJ4LWt1YmVybmV0ZXMtaW50LW9yLXN0cmluZyI6dHJ1ZX0sImRlc2NyaXB0aW9uIjoiTGltaXRzIGRlc2NyaWJlcyB0aGUgbWF4aW11bSBhbW91bnQgb2YgY29tcHV0ZSByZXNvdXJjZXMgYWxsb3dlZC4gTW9yZSBpbmZvOiBodHRwczovL2t1YmVybmV0ZXMuaW8vZG9jcy9jb25jZXB0cy9jb25maWd1cmF0aW9uL21hbmFnZS1yZXNvdXJjZXMtY29udGFpbmVycy8iLCJ0eXBlIjoib2JqZWN0In0sInJlcXVlc3RzIjp7ImFkZGl0aW9uYWxQcm9wZXJ0aWVzIjp7ImFueU9mIjpbeyJ0eXBlIjoiaW50ZWdlciJ9LHsidHlwZSI6InN0cmluZyJ9XSwicGF0dGVybiI6Il4oXFwrfC0pPygoWzAtOV0rKFxcLlswLTldKik/KXwoXFwuWzAtOV0rKSkoKFtLTUdUUEVdaSl8W251bWtNR1RQRV18KFtlRV0oXFwrfC0pPygoWzAtOV0rKFxcLlswLTldKik/KXwoXFwuWzAtOV0rKSkpKT8kIiwieC1rdWJlcm5ldGVzLWludC1vci1zdHJpbmciOnRydWV9LCJkZXNjcmlwdGlvbiI6IlJlcXVlc3RzIGRlc2NyaWJlcyB0aGUgbWluaW11bSBhbW91bnQgb2YgY29tcHV0ZSByZXNvdXJjZXMgcmVxdWlyZWQuIElmIFJlcXVlc3RzIGlzIG9taXR0ZWQgZm9yIGEgY29udGFpbmVyLCBpdCBkZWZhdWx0cyB0byBMaW1pdHMgaWYgdGhhdCBpcyBleHBsaWNpdGx5IHNwZWNpZmllZCwgb3RoZXJ3aXNlIHRvIGFuIGltcGxlbWVudGF0aW9uLWRlZmluZWQgdmFsdWUuIFJlcXVlc3RzIGNhbm5vdCBleGNlZWQgTGltaXRzLiBNb3JlIGluZm86IGh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL2NvbmNlcHRzL2NvbmZpZ3VyYXRpb24vbWFuYWdlLXJlc291cmNlcy1jb250YWluZXJzLyIsInR5cGUiOiJvYmplY3QifX0sInR5cGUiOiJvYmplY3QifSwic2VsZWN0b3IiOnsiZGVzY3JpcHRpb24iOiJzZWxlY3RvciBpcyBhIGxhYmVsIHF1ZXJ5IG92ZXIgdm9sdW1lcyB0byBjb25zaWRlciBmb3IgYmluZGluZy4iLCJwcm9wZXJ0aWVzIjp7Im1hdGNoRXhwcmVzc2lvbnMiOnsiZGVzY3JpcHRpb24iOiJtYXRjaEV4cHJlc3Npb25zIGlzIGEgbGlzdCBvZiBsYWJlbCBzZWxlY3RvciByZXF1aXJlbWVudHMuIFRoZSByZXF1aXJlbWVudHMgYXJlIEFORGVkLiIsIml0ZW1zIjp7ImRlc2NyaXB0aW9uIjoiQSBsYWJlbCBzZWxlY3RvciByZXF1aXJlbWVudCBpcyBhIHNlbGVjdG9yIHRoYXQgY29udGFpbnMgdmFsdWVzLCBhIGtleSwgYW5kIGFuIG9wZXJhdG9yIHRoYXQgcmVsYXRlcyB0aGUga2V5IGFuZCB2YWx1ZXMuIiwicHJvcGVydGllcyI6eyJrZXkiOnsiZGVzY3JpcHRpb24iOiJrZXkgaXMgdGhlIGxhYmVsIGtleSB0aGF0IHRoZSBzZWxlY3RvciBhcHBsaWVzIHRvLiIsInR5cGUiOiJzdHJpbmcifSwib3BlcmF0b3IiOnsiZGVzY3JpcHRpb24iOiJvcGVyYXRvciByZXByZXNlbnRzIGEga2V5J3MgcmVsYXRpb25zaGlwIHRvIGEgc2V0IG9mIHZhbHVlcy4gVmFsaWQgb3BlcmF0b3JzIGFyZSBJbiwgTm90SW4sIEV4aXN0cyBhbmQgRG9lc05vdEV4aXN0LiIsInR5cGUiOiJzdHJpbmcifSwidmFsdWVzIjp7ImRlc2NyaXB0aW9uIjoidmFsdWVzIGlzIGFuIGFycmF5IG9mIHN0cmluZyB2YWx1ZXMuIElmIHRoZSBvcGVyYXRvciBpcyBJbiBvciBOb3RJbiwgdGhlIHZhbHVlcyBhcnJheSBtdXN0IGJlIG5vbi1lbXB0eS4gSWYgdGhlIG9wZXJhdG9yIGlzIEV4aXN0cyBvciBEb2VzTm90RXhpc3QsIHRoZSB2YWx1ZXMgYXJyYXkgbXVzdCBiZSBlbXB0eS4gVGhpcyBhcnJheSBpcyByZXBsYWNlZCBkdXJpbmcgYSBzdHJhdGVnaWMgbWVyZ2UgcGF0Y2guIiwiaXRlbXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjoiYXJyYXkifX0sInJlcXVpcmVkIjpbImtleSIsIm9wZXJhdG9yIl0sInR5cGUiOiJvYmplY3QifSwidHlwZSI6ImFycmF5In0sIm1hdGNoTGFiZWxzIjp7ImFkZGl0aW9uYWxQcm9wZXJ0aWVzIjp7InR5cGUiOiJzdHJpbmcifSwiZGVzY3JpcHRpb24iOiJtYXRjaExhYmVscyBpcyBhIG1hcCBvZiB7a2V5LHZhbHVlfSBwYWlycy4gQSBzaW5nbGUge2tleSx2YWx1ZX0gaW4gdGhlIG1hdGNoTGFiZWxzIG1hcCBpcyBlcXVpdmFsZW50IHRvIGFuIGVsZW1lbnQgb2YgbWF0Y2hFeHByZXNzaW9ucywgd2hvc2Uga2V5IGZpZWxkIGlzIFwia2V5XCIsIHRoZSBvcGVyYXRvciBpcyBcIkluXCIsIGFuZCB0aGUgdmFsdWVzIGFycmF5IGNvbnRhaW5zIG9ubHkgXCJ2YWx1ZVwiLiBUaGUgcmVxdWlyZW1lbnRzIGFyZSBBTkRlZC4iLCJ0eXBlIjoib2JqZWN0In19LCJ0eXBlIjoib2JqZWN0IiwieC1rdWJlcm5ldGVzLW1hcC10eXBlIjoiYXRvbWljIn0sInN0b3JhZ2VDbGFzc05hbWUiOnsiZGVzY3JpcHRpb24iOiJzdG9yYWdlQ2xhc3NOYW1lIGlzIHRoZSBuYW1lIG9mIHRoZSBTdG9yYWdlQ2xhc3MgcmVxdWlyZWQgYnkgdGhlIGNsYWltLiBNb3JlIGluZm86IGh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL2NvbmNlcHRzL3N0b3JhZ2UvcGVyc2lzdGVudC12b2x1bWVzI2NsYXNzLTEiLCJ0eXBlIjoic3RyaW5nIn0sInZvbHVtZUF0dHJpYnV0ZXNDbGFzc05hbWUiOnsiZGVzY3JpcHRpb24iOiJ2b2x1bWVBdHRyaWJ1dGVzQ2xhc3NOYW1lIG1heSBiZSB1c2VkIHRvIHNldCB0aGUgVm9sdW1lQXR0cmlidXRlc0NsYXNzIHVzZWQgYnkgdGhpcyBjbGFpbS4gSWYgc3BlY2lmaWVkLCB0aGUgQ1NJIGRyaXZlciB3aWxsIGNyZWF0ZSBvciB1cGRhdGUgdGhlIHZvbHVtZSB3aXRoIHRoZSBhdHRyaWJ1dGVzIGRlZmluZWQgaW4gdGhlIGNvcnJlc3BvbmRpbmcgVm9sdW1lQXR0cmlidXRlc0NsYXNzLiBUaGlzIGhhcyBhIGRpZmZlcmVudCBwdXJwb3NlIHRoYW4gc3RvcmFnZUNsYXNzTmFtZSwgaXQgY2FuIGJlIGNoYW5nZWQgYWZ0ZXIgdGhlIGNsYWltIGlzIGNyZWF0ZWQuIEFuIGVtcHR5IHN0cmluZyB2YWx1ZSBtZWFucyB0aGF0IG5vIFZvbHVtZUF0dHJpYnV0ZXNDbGFzcyB3aWxsIGJlIGFwcGxpZWQgdG8gdGhlIGNsYWltIGJ1dCBpdCdzIG5vdCBhbGxvd2VkIHRvIHJlc2V0IHRoaXMgZmllbGQgdG8gZW1wdHkgc3RyaW5nIG9uY2UgaXQgaXMgc2V0LiBJZiB1bnNwZWNpZmllZCBhbmQgdGhlIFBlcnNpc3RlbnRWb2x1bWVDbGFpbSBpcyB1bmJvdW5kLCB0aGUgZGVmYXVsdCBWb2x1bWVBdHRyaWJ1dGVzQ2xhc3Mgd2lsbCBiZSBzZXQgYnkgdGhlIHBlcnNpc3RlbnR2b2x1bWUgY29udHJvbGxlciBpZiBpdCBleGlzdHMuIElmIHRoZSByZXNvdXJjZSByZWZlcnJlZCB0byBieSB2b2x1bWVBdHRyaWJ1dGVzQ2xhc3MgZG9lcyBub3QgZXhpc3QsIHRoaXMgUGVyc2lzdGVudFZvbHVtZUNsYWltIHdpbGwgYmUgc2V0IHRvIGEgUGVuZGluZyBzdGF0ZSwgYXMgcmVmbGVjdGVkIGJ5IHRoZSBtb2RpZnlWb2x1bWVTdGF0dXMgZmllbGQsIHVudGlsIHN1Y2ggYXMgYSByZXNvdXJjZSBleGlzdHMuIE1vcmUgaW5mbzogaHR0cHM6Ly9rdWJlcm5ldGVzLmlvL2RvY3MvY29uY2VwdHMvc3RvcmFnZS9wZXJzaXN0ZW50LXZvbHVtZXMjdm9sdW1lYXR0cmlidXRlc2NsYXNzIChBbHBoYSkgVXNpbmcgdGhpcyBmaWVsZCByZXF1aXJlcyB0aGUgVm9sdW1lQXR0cmlidXRlc0NsYXNzIGZlYXR1cmUgZ2F0ZSB0byBiZSBlbmFibGVkLiIsInR5cGUiOiJzdHJpbmcifSwidm9sdW1lTW9kZSI6eyJkZXNjcmlwdGlvbiI6InZvbHVtZU1vZGUgZGVmaW5lcyB3aGF0IHR5cGUgb2Ygdm9sdW1lIGlzIHJlcXVpcmVkIGJ5IHRoZSBjbGFpbS4gVmFsdWUgb2YgRmlsZXN5c3RlbSBpcyBpbXBsaWVkIHdoZW4gbm90IGluY2x1ZGVkIGluIGNsYWltIHNwZWMuIiwidHlwZSI6InN0cmluZyJ9LCJ2b2x1bWVOYW1lIjp7ImRlc2NyaXB0aW9uIjoidm9sdW1lTmFtZSBpcyB0aGUgYmluZGluZyByZWZlcmVuY2UgdG8gdGhlIFBlcnNpc3RlbnRWb2x1bWUgYmFja2luZyB0aGlzIGNsYWltLiIsInR5cGUiOiJzdHJpbmcifX0sInR5cGUiOiJvYmplY3QifSwic3RhdHVzIjp7ImRlc2NyaXB0aW9uIjoic3RhdHVzIHJlcHJlc2VudHMgdGhlIGN1cnJlbnQgaW5mb3JtYXRpb24vc3RhdHVzIG9mIGEgcGVyc2lzdGVudCB2b2x1bWUgY2xhaW0uIFJlYWQtb25seS4gTW9yZSBpbmZvOiBodHRwczovL2t1YmVybmV0ZXMuaW8vZG9jcy9jb25jZXB0cy9zdG9yYWdlL3BlcnNpc3RlbnQtdm9sdW1lcyNwZXJzaXN0ZW50dm9sdW1lY2xhaW1zIiwicHJvcGVydGllcyI6eyJhY2Nlc3NNb2RlcyI6eyJkZXNjcmlwdGlvbiI6ImFjY2Vzc01vZGVzIGNvbnRhaW5zIHRoZSBhY3R1YWwgYWNjZXNzIG1vZGVzIHRoZSB2b2x1bWUgYmFja2luZyB0aGUgUFZDIGhhcy4gTW9yZSBpbmZvOiBodHRwczovL2t1YmVybmV0ZXMuaW8vZG9jcy9jb25jZXB0cy9zdG9yYWdlL3BlcnNpc3RlbnQtdm9sdW1lcyNhY2Nlc3MtbW9kZXMtMSIsIml0ZW1zIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6ImFycmF5In0sImFsbG9jYXRlZFJlc291cmNlU3RhdHVzZXMiOnsiYWRkaXRpb25hbFByb3BlcnRpZXMiOnsiZGVzY3JpcHRpb24iOiJXaGVuIGEgY29udHJvbGxlciByZWNlaXZlcyBwZXJzaXN0ZW50dm9sdW1lIGNsYWltIHVwZGF0ZSB3aXRoIENsYWltUmVzb3VyY2VTdGF0dXMgZm9yIGEgcmVzb3VyY2UgdGhhdCBpdCBkb2VzIG5vdCByZWNvZ25pemVzLCB0aGVuIGl0IHNob3VsZCBpZ25vcmUgdGhhdCB1cGRhdGUgYW5kIGxldCBvdGhlciBjb250cm9sbGVycyBoYW5kbGUgaXQuIiwidHlwZSI6InN0cmluZyJ9LCJkZXNjcmlwdGlvbiI6ImFsbG9jYXRlZFJlc291cmNlU3RhdHVzZXMgc3RvcmVzIHN0YXR1cyBvZiByZXNvdXJjZSBiZWluZyByZXNpemVkIGZvciB0aGUgZ2l2ZW4gUFZDLiBLZXkgbmFtZXMgZm9sbG93IHN0YW5kYXJkIEt1YmVybmV0ZXMgbGFiZWwgc3ludGF4LiBWYWxpZCB2YWx1ZXMgYXJlIGVpdGhlcjogKiBVbi1wcmVmaXhlZCBrZXlzOiAtIHN0b3JhZ2UgLSB0aGUgY2FwYWNpdHkgb2YgdGhlIHZvbHVtZS4gKiBDdXN0b20gcmVzb3VyY2VzIG11c3QgdXNlIGltcGxlbWVudGF0aW9uLWRlZmluZWQgcHJlZml4ZWQgbmFtZXMgc3VjaCBhcyBcImV4YW1wbGUuY29tL215LWN1c3RvbS1yZXNvdXJjZVwiIEFwYXJ0IGZyb20gYWJvdmUgdmFsdWVzIC0ga2V5cyB0aGF0IGFyZSB1bnByZWZpeGVkIG9yIGhhdmUga3ViZXJuZXRlcy5pbyBwcmVmaXggYXJlIGNvbnNpZGVyZWQgcmVzZXJ2ZWQgYW5kIGhlbmNlIG1heSBub3QgYmUgdXNlZC4gXG4gQ2xhaW1SZXNvdXJjZVN0YXR1cyBjYW4gYmUgaW4gYW55IG9mIGZvbGxvd2luZyBzdGF0ZXM6IC0gQ29udHJvbGxlclJlc2l6ZUluUHJvZ3Jlc3M6IFN0YXRlIHNldCB3aGVuIHJlc2l6ZSBjb250cm9sbGVyIHN0YXJ0cyByZXNpemluZyB0aGUgdm9sdW1lIGluIGNvbnRyb2wtcGxhbmUuIC0gQ29udHJvbGxlclJlc2l6ZUZhaWxlZDogU3RhdGUgc2V0IHdoZW4gcmVzaXplIGhhcyBmYWlsZWQgaW4gcmVzaXplIGNvbnRyb2xsZXIgd2l0aCBhIHRlcm1pbmFsIGVycm9yLiAtIE5vZGVSZXNpemVQZW5kaW5nOiBTdGF0ZSBzZXQgd2hlbiByZXNpemUgY29udHJvbGxlciBoYXMgZmluaXNoZWQgcmVzaXppbmcgdGhlIHZvbHVtZSBidXQgZnVydGhlciByZXNpemluZyBvZiB2b2x1bWUgaXMgbmVlZGVkIG9uIHRoZSBub2RlLiAtIE5vZGVSZXNpemVJblByb2dyZXNzOiBTdGF0ZSBzZXQgd2hlbiBrdWJlbGV0IHN0YXJ0cyByZXNpemluZyB0aGUgdm9sdW1lLiAtIE5vZGVSZXNpemVGYWlsZWQ6IFN0YXRlIHNldCB3aGVuIHJlc2l6aW5nIGhhcyBmYWlsZWQgaW4ga3ViZWxldCB3aXRoIGEgdGVybWluYWwgZXJyb3IuIFRyYW5zaWVudCBlcnJvcnMgZG9uJ3Qgc2V0IE5vZGVSZXNpemVGYWlsZWQuIEZvciBleGFtcGxlOiBpZiBleHBhbmRpbmcgYSBQVkMgZm9yIG1vcmUgY2FwYWNpdHkgLSB0aGlzIGZpZWxkIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyBzdGF0ZXM6IC0gcHZjLnN0YXR1cy5hbGxvY2F0ZWRSZXNvdXJjZVN0YXR1c1snc3RvcmFnZSddID0gXCJDb250cm9sbGVyUmVzaXplSW5Qcm9ncmVzc1wiIC0gcHZjLnN0YXR1cy5hbGxvY2F0ZWRSZXNvdXJjZVN0YXR1c1snc3RvcmFnZSddID0gXCJDb250cm9sbGVyUmVzaXplRmFpbGVkXCIgLSBwdmMuc3RhdHVzLmFsbG9jYXRlZFJlc291cmNlU3RhdHVzWydzdG9yYWdlJ10gPSBcIk5vZGVSZXNpemVQZW5kaW5nXCIgLSBwdmMuc3RhdHVzLmFsbG9jYXRlZFJlc291cmNlU3RhdHVzWydzdG9yYWdlJ10gPSBcIk5vZGVSZXNpemVJblByb2dyZXNzXCIgLSBwdmMuc3RhdHVzLmFsbG9jYXRlZFJlc291cmNlU3RhdHVzWydzdG9yYWdlJ10gPSBcIk5vZGVSZXNpemVGYWlsZWRcIiBXaGVuIHRoaXMgZmllbGQgaXMgbm90IHNldCwgaXQgbWVhbnMgdGhhdCBubyByZXNpemUgb3BlcmF0aW9uIGlzIGluIHByb2dyZXNzIGZvciB0aGUgZ2l2ZW4gUFZDLiBcbiBBIGNvbnRyb2xsZXIgdGhhdCByZWNlaXZlcyBQVkMgdXBkYXRlIHdpdGggcHJldmlvdXNseSB1bmtub3duIHJlc291cmNlTmFtZSBvciBDbGFpbVJlc291cmNlU3RhdHVzIHNob3VsZCBpZ25vcmUgdGhlIHVwZGF0ZSBmb3IgdGhlIHB1cnBvc2UgaXQgd2FzIGRlc2lnbmVkLiBGb3IgZXhhbXBsZSAtIGEgY29udHJvbGxlciB0aGF0IG9ubHkgaXMgcmVzcG9uc2libGUgZm9yIHJlc2l6aW5nIGNhcGFjaXR5IG9mIHRoZSB2b2x1bWUsIHNob3VsZCBpZ25vcmUgUFZDIHVwZGF0ZXMgdGhhdCBjaGFuZ2Ugb3RoZXIgdmFsaWQgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCBQVkMuIFxuIFRoaXMgaXMgYW4gYWxwaGEgZmllbGQgYW5kIHJlcXVpcmVzIGVuYWJsaW5nIFJlY292ZXJWb2x1bWVFeHBhbnNpb25GYWlsdXJlIGZlYXR1cmUuIiwidHlwZSI6Im9iamVjdCIsIngta3ViZXJuZXRlcy1tYXAtdHlwZSI6ImdyYW51bGFyIn0sImFsbG9jYXRlZFJlc291cmNlcyI6eyJhZGRpdGlvbmFsUHJvcGVydGllcyI6eyJhbnlPZiI6W3sidHlwZSI6ImludGVnZXIifSx7InR5cGUiOiJzdHJpbmcifV0sInBhdHRlcm4iOiJeKFxcK3wtKT8oKFswLTldKyhcXC5bMC05XSopPyl8KFxcLlswLTldKykpKChbS01HVFBFXWkpfFtudW1rTUdUUEVdfChbZUVdKFxcK3wtKT8oKFswLTldKyhcXC5bMC05XSopPyl8KFxcLlswLTldKykpKSk/JCIsIngta3ViZXJuZXRlcy1pbnQtb3Itc3RyaW5nIjp0cnVlfSwiZGVzY3JpcHRpb24iOiJhbGxvY2F0ZWRSZXNvdXJjZXMgdHJhY2tzIHRoZSByZXNvdXJjZXMgYWxsb2NhdGVkIHRvIGEgUFZDIGluY2x1ZGluZyBpdHMgY2FwYWNpdHkuIEtleSBuYW1lcyBmb2xsb3cgc3RhbmRhcmQgS3ViZXJuZXRlcyBsYWJlbCBzeW50YXguIFZhbGlkIHZhbHVlcyBhcmUgZWl0aGVyOiAqIFVuLXByZWZpeGVkIGtleXM6IC0gc3RvcmFnZSAtIHRoZSBjYXBhY2l0eSBvZiB0aGUgdm9sdW1lLiAqIEN1c3RvbSByZXNvdXJjZXMgbXVzdCB1c2UgaW1wbGVtZW50YXRpb24tZGVmaW5lZCBwcmVmaXhlZCBuYW1lcyBzdWNoIGFzIFwiZXhhbXBsZS5jb20vbXktY3VzdG9tLXJlc291cmNlXCIgQXBhcnQgZnJvbSBhYm92ZSB2YWx1ZXMgLSBrZXlzIHRoYXQgYXJlIHVucHJlZml4ZWQgb3IgaGF2ZSBrdWJlcm5ldGVzLmlvIHByZWZpeCBhcmUgY29uc2lkZXJlZCByZXNlcnZlZCBhbmQgaGVuY2UgbWF5IG5vdCBiZSB1c2VkLiBcbiBDYXBhY2l0eSByZXBvcnRlZCBoZXJlIG1heSBiZSBsYXJnZXIgdGhhbiB0aGUgYWN0dWFsIGNhcGFjaXR5IHdoZW4gYSB2b2x1bWUgZXhwYW5zaW9uIG9wZXJhdGlvbiBpcyByZXF1ZXN0ZWQuIEZvciBzdG9yYWdlIHF1b3RhLCB0aGUgbGFyZ2VyIHZhbHVlIGZyb20gYWxsb2NhdGVkUmVzb3VyY2VzIGFuZCBQVkMuc3BlYy5yZXNvdXJjZXMgaXMgdXNlZC4gSWYgYWxsb2NhdGVkUmVzb3VyY2VzIGlzIG5vdCBzZXQsIFBWQy5zcGVjLnJlc291cmNlcyBhbG9uZSBpcyB1c2VkIGZvciBxdW90YSBjYWxjdWxhdGlvbi4gSWYgYSB2b2x1bWUgZXhwYW5zaW9uIGNhcGFjaXR5IHJlcXVlc3QgaXMgbG93ZXJlZCwgYWxsb2NhdGVkUmVzb3VyY2VzIGlzIG9ubHkgbG93ZXJlZCBpZiB0aGVyZSBhcmUgbm8gZXhwYW5zaW9uIG9wZXJhdGlvbnMgaW4gcHJvZ3Jlc3MgYW5kIGlmIHRoZSBhY3R1YWwgdm9sdW1lIGNhcGFjaXR5IGlzIGVxdWFsIG9yIGxvd2VyIHRoYW4gdGhlIHJlcXVlc3RlZCBjYXBhY2l0eS4gXG4gQSBjb250cm9sbGVyIHRoYXQgcmVjZWl2ZXMgUFZDIHVwZGF0ZSB3aXRoIHByZXZpb3VzbHkgdW5rbm93biByZXNvdXJjZU5hbWUgc2hvdWxkIGlnbm9yZSB0aGUgdXBkYXRlIGZvciB0aGUgcHVycG9zZSBpdCB3YXMgZGVzaWduZWQuIEZvciBleGFtcGxlIC0gYSBjb250cm9sbGVyIHRoYXQgb25seSBpcyByZXNwb25zaWJsZSBmb3IgcmVzaXppbmcgY2FwYWNpdHkgb2YgdGhlIHZvbHVtZSwgc2hvdWxkIGlnbm9yZSBQVkMgdXBkYXRlcyB0aGF0IGNoYW5nZSBvdGhlciB2YWxpZCByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIFBWQy4gXG4gVGhpcyBpcyBhbiBhbHBoYSBmaWVsZCBhbmQgcmVxdWlyZXMgZW5hYmxpbmcgUmVjb3ZlclZvbHVtZUV4cGFuc2lvbkZhaWx1cmUgZmVhdHVyZS4iLCJ0eXBlIjoib2JqZWN0In0sImNhcGFjaXR5Ijp7ImFkZGl0aW9uYWxQcm9wZXJ0aWVzIjp7ImFueU9mIjpbeyJ0eXBlIjoiaW50ZWdlciJ9LHsidHlwZSI6InN0cmluZyJ9XSwicGF0dGVybiI6Il4oXFwrfC0pPygoWzAtOV0rKFxcLlswLTldKik/KXwoXFwuWzAtOV0rKSkoKFtLTUdUUEVdaSl8W251bWtNR1RQRV18KFtlRV0oXFwrfC0pPygoWzAtOV0rKFxcLlswLTldKik/KXwoXFwuWzAtOV0rKSkpKT8kIiwieC1rdWJlcm5ldGVzLWludC1vci1zdHJpbmciOnRydWV9LCJkZXNjcmlwdGlvbiI6ImNhcGFjaXR5IHJlcHJlc2VudHMgdGhlIGFjdHVhbCByZXNvdXJjZXMgb2YgdGhlIHVuZGVybHlpbmcgdm9sdW1lLiIsInR5cGUiOiJvYmplY3QifSwiY29uZGl0aW9ucyI6eyJkZXNjcmlwdGlvbiI6ImNvbmRpdGlvbnMgaXMgdGhlIGN1cnJlbnQgQ29uZGl0aW9uIG9mIHBlcnNpc3RlbnQgdm9sdW1lIGNsYWltLiBJZiB1bmRlcmx5aW5nIHBlcnNpc3RlbnQgdm9sdW1lIGlzIGJlaW5nIHJlc2l6ZWQgdGhlbiB0aGUgQ29uZGl0aW9uIHdpbGwgYmUgc2V0IHRvICdSZXNpemVTdGFydGVkJy4iLCJpdGVtcyI6eyJkZXNjcmlwdGlvbiI6IlBlcnNpc3RlbnRWb2x1bWVDbGFpbUNvbmRpdGlvbiBjb250YWlucyBkZXRhaWxzIGFib3V0IHN0YXRlIG9mIHB2YyIsInByb3BlcnRpZXMiOnsibGFzdFByb2JlVGltZSI6eyJkZXNjcmlwdGlvbiI6Imxhc3RQcm9iZVRpbWUgaXMgdGhlIHRpbWUgd2UgcHJvYmVkIHRoZSBjb25kaXRpb24uIiwiZm9ybWF0IjoiZGF0ZS10aW1lIiwidHlwZSI6InN0cmluZyJ9LCJsYXN0VHJhbnNpdGlvblRpbWUiOnsiZGVzY3JpcHRpb24iOiJsYXN0VHJhbnNpdGlvblRpbWUgaXMgdGhlIHRpbWUgdGhlIGNvbmRpdGlvbiB0cmFuc2l0aW9uZWQgZnJvbSBvbmUgc3RhdHVzIHRvIGFub3RoZXIuIiwiZm9ybWF0IjoiZGF0ZS10aW1lIiwidHlwZSI6InN0cmluZyJ9LCJtZXNzYWdlIjp7ImRlc2NyaXB0aW9uIjoibWVzc2FnZSBpcyB0aGUgaHVtYW4tcmVhZGFibGUgbWVzc2FnZSBpbmRpY2F0aW5nIGRldGFpbHMgYWJvdXQgbGFzdCB0cmFuc2l0aW9uLiIsInR5cGUiOiJzdHJpbmcifSwicmVhc29uIjp7ImRlc2NyaXB0aW9uIjoicmVhc29uIGlzIGEgdW5pcXVlLCB0aGlzIHNob3VsZCBiZSBhIHNob3J0LCBtYWNoaW5lIHVuZGVyc3RhbmRhYmxlIHN0cmluZyB0aGF0IGdpdmVzIHRoZSByZWFzb24gZm9yIGNvbmRpdGlvbidzIGxhc3QgdHJhbnNpdGlvbi4gSWYgaXQgcmVwb3J0cyBcIlJlc2l6ZVN0YXJ0ZWRcIiB0aGF0IG1lYW5zIHRoZSB1bmRlcmx5aW5nIHBlcnNpc3RlbnQgdm9sdW1lIGlzIGJlaW5nIHJlc2l6ZWQuIiwidHlwZSI6InN0cmluZyJ9LCJzdGF0dXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjp7ImRlc2NyaXB0aW9uIjoiUGVyc2lzdGVudFZvbHVtZUNsYWltQ29uZGl0aW9uVHlwZSBpcyBhIHZhbGlkIHZhbHVlIG9mIFBlcnNpc3RlbnRWb2x1bWVDbGFpbUNvbmRpdGlvbi5UeXBlIiwidHlwZSI6InN0cmluZyJ9fSwicmVxdWlyZWQiOlsic3RhdHVzIiwidHlwZSJdLCJ0eXBlIjoib2JqZWN0In0sInR5cGUiOiJhcnJheSJ9LCJjdXJyZW50Vm9sdW1lQXR0cmlidXRlc0NsYXNzTmFtZSI6eyJkZXNjcmlwdGlvbiI6ImN1cnJlbnRWb2x1bWVBdHRyaWJ1dGVzQ2xhc3NOYW1lIGlzIHRoZSBjdXJyZW50IG5hbWUgb2YgdGhlIFZvbHVtZUF0dHJpYnV0ZXNDbGFzcyB0aGUgUFZDIGlzIHVzaW5nLiBXaGVuIHVuc2V0LCB0aGVyZSBpcyBubyBWb2x1bWVBdHRyaWJ1dGVDbGFzcyBhcHBsaWVkIHRvIHRoaXMgUGVyc2lzdGVudFZvbHVtZUNsYWltIFRoaXMgaXMgYW4gYWxwaGEgZmllbGQgYW5kIHJlcXVpcmVzIGVuYWJsaW5nIFZvbHVtZUF0dHJpYnV0ZXNDbGFzcyBmZWF0dXJlLiIsInR5cGUiOiJzdHJpbmcifSwibW9kaWZ5Vm9sdW1lU3RhdHVzIjp7ImRlc2NyaXB0aW9uIjoiTW9kaWZ5Vm9sdW1lU3RhdHVzIHJlcHJlc2VudHMgdGhlIHN0YXR1cyBvYmplY3Qgb2YgQ29udHJvbGxlck1vZGlmeVZvbHVtZSBvcGVyYXRpb24uIFdoZW4gdGhpcyBpcyB1bnNldCwgdGhlcmUgaXMgbm8gTW9kaWZ5Vm9sdW1lIG9wZXJhdGlvbiBiZWluZyBhdHRlbXB0ZWQuIFRoaXMgaXMgYW4gYWxwaGEgZmllbGQgYW5kIHJlcXVpcmVzIGVuYWJsaW5nIFZvbHVtZUF0dHJpYnV0ZXNDbGFzcyBmZWF0dXJlLiIsInByb3BlcnRpZXMiOnsic3RhdHVzIjp7ImRlc2NyaXB0aW9uIjoic3RhdHVzIGlzIHRoZSBzdGF0dXMgb2YgdGhlIENvbnRyb2xsZXJNb2RpZnlWb2x1bWUgb3BlcmF0aW9uLiBJdCBjYW4gYmUgaW4gYW55IG9mIGZvbGxvd2luZyBzdGF0ZXM6IC0gUGVuZGluZyBQZW5kaW5nIGluZGljYXRlcyB0aGF0IHRoZSBQZXJzaXN0ZW50Vm9sdW1lQ2xhaW0gY2Fubm90IGJlIG1vZGlmaWVkIGR1ZSB0byB1bm1ldCByZXF1aXJlbWVudHMsIHN1Y2ggYXMgdGhlIHNwZWNpZmllZCBWb2x1bWVBdHRyaWJ1dGVzQ2xhc3Mgbm90IGV4aXN0aW5nLiAtIEluUHJvZ3Jlc3MgSW5Qcm9ncmVzcyBpbmRpY2F0ZXMgdGhhdCB0aGUgdm9sdW1lIGlzIGJlaW5nIG1vZGlmaWVkLiAtIEluZmVhc2libGUgSW5mZWFzaWJsZSBpbmRpY2F0ZXMgdGhhdCB0aGUgcmVxdWVzdCBoYXMgYmVlbiByZWplY3RlZCBhcyBpbnZhbGlkIGJ5IHRoZSBDU0kgZHJpdmVyLiBUbyByZXNvbHZlIHRoZSBlcnJvciwgYSB2YWxpZCBWb2x1bWVBdHRyaWJ1dGVzQ2xhc3MgbmVlZHMgdG8gYmUgc3BlY2lmaWVkLiBOb3RlOiBOZXcgc3RhdHVzZXMgY2FuIGJlIGFkZGVkIGluIHRoZSBmdXR1cmUuIENvbnN1bWVycyBzaG91bGQgY2hlY2sgZm9yIHVua25vd24gc3RhdHVzZXMgYW5kIGZhaWwgYXBwcm9wcmlhdGVseS4iLCJ0eXBlIjoic3RyaW5nIn0sInRhcmdldFZvbHVtZUF0dHJpYnV0ZXNDbGFzc05hbWUiOnsiZGVzY3JpcHRpb24iOiJ0YXJnZXRWb2x1bWVBdHRyaWJ1dGVzQ2xhc3NOYW1lIGlzIHRoZSBuYW1lIG9mIHRoZSBWb2x1bWVBdHRyaWJ1dGVzQ2xhc3MgdGhlIFBWQyBjdXJyZW50bHkgYmVpbmcgcmVjb25jaWxlZCIsInR5cGUiOiJzdHJpbmcifX0sInJlcXVpcmVkIjpbInN0YXR1cyJdLCJ0eXBlIjoib2JqZWN0In0sInBoYXNlIjp7ImRlc2NyaXB0aW9uIjoicGhhc2UgcmVwcmVzZW50cyB0aGUgY3VycmVudCBwaGFzZSBvZiBQZXJzaXN0ZW50Vm9sdW1lQ2xhaW0uIiwidHlwZSI6InN0cmluZyJ9fSwidHlwZSI6Im9iamVjdCJ9fSwidHlwZSI6Im9iamVjdCJ9LCJtb25pdG9yaW5nIjp7ImRlc2NyaXB0aW9uIjoiTW9uaXRvcmluZyBjb250cm9scyB0aGUgY29uZmlndXJhdGlvbiBvZiByZXNvdXJjZXMgZm9yIGV4cG9zaW5nIE9DUyBtZXRyaWNzIiwicHJvcGVydGllcyI6eyJsYWJlbHMiOnsiYWRkaXRpb25hbFByb3BlcnRpZXMiOnsidHlwZSI6InN0cmluZyJ9LCJkZXNjcmlwdGlvbiI6IkxhYmVscyB0byBhZGQgdG8gbW9uaXRvcmluZyByZXNvdXJjZXMgY3JlYXRlZCBieSBvcGVyYXRvci4gVGhlc2UgbGFiZWxzIGFyZSB1c2VkIGFzIExhYmVsU2VsZWN0b3IgZm9yIFByb21ldGhldXMiLCJ0eXBlIjoib2JqZWN0In0sInJlY29uY2lsZVN0cmF0ZWd5Ijp7InR5cGUiOiJzdHJpbmcifX0sInR5cGUiOiJvYmplY3QifSwibXVsdGlDbG91ZEdhdGV3YXkiOnsiZGVzY3JpcHRpb24iOiJNdWx0aUNsb3VkR2F0ZXdheVNwZWMgZGVmaW5lcyBzcGVjaWZpYyBtdWx0aS1jbG91ZCBnYXRld2F5IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyIsInByb3BlcnRpZXMiOnsiZGJTdG9yYWdlQ2xhc3NOYW1lIjp7ImRlc2NyaXB0aW9uIjoiRGJTdG9yYWdlQ2xhc3NOYW1lIHNwZWNpZmllcyB0aGUgZGVmYXVsdCBzdG9yYWdlIGNsYXNzIGZvciBub29iYS1kYiBwb2RzIiwidHlwZSI6InN0cmluZyJ9LCJkZW55SFRUUCI6eyJkZXNjcmlwdGlvbiI6IkRlbnlIVFRQIChvcHRpb25hbCkgaWYgZ2l2ZW4gd2lsbCBkZW55IGFjY2VzcyB0byB0aGUgTm9vQmFhIFMzIHNlcnZpY2UgdXNpbmcgSFRUUCAob25seSBIVFRQUykiLCJ0eXBlIjoiYm9vbGVhbiJ9LCJkaXNhYmxlTG9hZEJhbGFuY2VyU2VydmljZSI6eyJkZXNjcmlwdGlvbiI6IkRpc2FibGVMb2FkQmFsYW5jZXJTZXJ2aWNlIChvcHRpb25hbCkgc2V0cyB0aGUgc2VydmljZSB0eXBlIHRvIENsdXN0ZXJJUCBpbnN0ZWFkIG9mIExvYWRCYWxhbmNlciIsIm51bGxhYmxlIjp0cnVlLCJ0eXBlIjoiYm9vbGVhbiJ9LCJlbmRwb2ludHMiOnsiZGVzY3JpcHRpb24iOiJFbmRwb2ludHMgKG9wdGlvbmFsKSBzZXRzIGNvbmZpZ3VyYXRpb24gaW5mbyBmb3IgdGhlIG5vb2JhYSBlbmRwb2ludCBkZXBsb3ltZW50LiIsInByb3BlcnRpZXMiOnsiYWRkaXRpb25hbFZpcnR1YWxIb3N0cyI6eyJkZXNjcmlwdGlvbiI6IkFkZGl0aW9uYWxWaXJ0dWFsSG9zdHMgKG9wdGlvbmFsKSBwcm92aWRlIGEgbGlzdCBvZiBhZGRpdGlvbmFsIGhvc3RuYW1lcyAob24gdG9wIG9mIHRoZSBidWlsdGluIG5hbWVzIGRlZmluZWQgYnkgdGhlIGNsdXN0ZXI6IHNlcnZpY2UgbmFtZSwgZWxiIG5hbWUsIHJvdXRlIG5hbWUpIHRvIGJlIHVzZWQgYXMgdmlydHVhbCBob3N0cyBieSB0aGUgdGhlIGVuZHBvaW50cyBpbiB0aGUgZW5kcG9pbnQgZGVwbG95bWVudCIsIml0ZW1zIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6ImFycmF5In0sIm1heENvdW50Ijp7ImRlc2NyaXB0aW9uIjoiTWF4Q291bnQsIHRoZSBudW1iZXIgb2YgZW5kcG9pbnQgaW5zdGFuY2VzIChwb2RzKSB0byBiZSB1c2VkIGFzIHRoZSB1cHBlciBib3VuZCB3aGVuIGF1dG9zY2FsaW5nIiwiZm9ybWF0IjoiaW50MzIiLCJ0eXBlIjoiaW50ZWdlciJ9LCJtaW5Db3VudCI6eyJkZXNjcmlwdGlvbiI6Ik1pbkNvdW50LCB0aGUgbnVtYmVyIG9mIGVuZHBvaW50IGluc3RhbmNlcyAocG9kcykgdG8gYmUgdXNlZCBhcyB0aGUgbG93ZXIgYm91bmQgd2hlbiBhdXRvc2NhbGluZyIsImZvcm1hdCI6ImludDMyIiwidHlwZSI6ImludGVnZXIifSwicmVzb3VyY2VzIjp7ImRlc2NyaXB0aW9uIjoiUmVzb3VyY2VzIChvcHRpb25hbCkgb3ZlcnJpZGVzIHRoZSBkZWZhdWx0IHJlc291cmNlIHJlcXVpcmVtZW50cyBmb3IgZXZlcnkgZW5kcG9pbnQgcG9kIiwicHJvcGVydGllcyI6eyJjbGFpbXMiOnsiZGVzY3JpcHRpb24iOiJDbGFpbXMgbGlzdHMgdGhlIG5hbWVzIG9mIHJlc291cmNlcywgZGVmaW5lZCBpbiBzcGVjLnJlc291cmNlQ2xhaW1zLCB0aGF0IGFyZSB1c2VkIGJ5IHRoaXMgY29udGFpbmVyLiBcbiBUaGlzIGlzIGFuIGFscGhhIGZpZWxkIGFuZCByZXF1aXJlcyBlbmFibGluZyB0aGUgRHluYW1pY1Jlc291cmNlQWxsb2NhdGlvbiBmZWF0dXJlIGdhdGUuIFxuIFRoaXMgZmllbGQgaXMgaW1tdXRhYmxlLiBJdCBjYW4gb25seSBiZSBzZXQgZm9yIGNvbnRhaW5lcnMuIiwiaXRlbXMiOnsiZGVzY3JpcHRpb24iOiJSZXNvdXJjZUNsYWltIHJlZmVyZW5jZXMgb25lIGVudHJ5IGluIFBvZFNwZWMuUmVzb3VyY2VDbGFpbXMuIiwicHJvcGVydGllcyI6eyJuYW1lIjp7ImRlc2NyaXB0aW9uIjoiTmFtZSBtdXN0IG1hdGNoIHRoZSBuYW1lIG9mIG9uZSBlbnRyeSBpbiBwb2Quc3BlYy5yZXNvdXJjZUNsYWltcyBvZiB0aGUgUG9kIHdoZXJlIHRoaXMgZmllbGQgaXMgdXNlZC4gSXQgbWFrZXMgdGhhdCByZXNvdXJjZSBhdmFpbGFibGUgaW5zaWRlIGEgY29udGFpbmVyLiIsInR5cGUiOiJzdHJpbmcifX0sInJlcXVpcmVkIjpbIm5hbWUiXSwidHlwZSI6Im9iamVjdCJ9LCJ0eXBlIjoiYXJyYXkiLCJ4LWt1YmVybmV0ZXMtbGlzdC1tYXAta2V5cyI6WyJuYW1lIl0sIngta3ViZXJuZXRlcy1saXN0LXR5cGUiOiJtYXAifSwibGltaXRzIjp7ImFkZGl0aW9uYWxQcm9wZXJ0aWVzIjp7ImFueU9mIjpbeyJ0eXBlIjoiaW50ZWdlciJ9LHsidHlwZSI6InN0cmluZyJ9XSwicGF0dGVybiI6Il4oXFwrfC0pPygoWzAtOV0rKFxcLlswLTldKik/KXwoXFwuWzAtOV0rKSkoKFtLTUdUUEVdaSl8W251bWtNR1RQRV18KFtlRV0oXFwrfC0pPygoWzAtOV0rKFxcLlswLTldKik/KXwoXFwuWzAtOV0rKSkpKT8kIiwieC1rdWJlcm5ldGVzLWludC1vci1zdHJpbmciOnRydWV9LCJkZXNjcmlwdGlvbiI6IkxpbWl0cyBkZXNjcmliZXMgdGhlIG1heGltdW0gYW1vdW50IG9mIGNvbXB1dGUgcmVzb3VyY2VzIGFsbG93ZWQuIE1vcmUgaW5mbzogaHR0cHM6Ly9rdWJlcm5ldGVzLmlvL2RvY3MvY29uY2VwdHMvY29uZmlndXJhdGlvbi9tYW5hZ2UtcmVzb3VyY2VzLWNvbnRhaW5lcnMvIiwidHlwZSI6Im9iamVjdCJ9LCJyZXF1ZXN0cyI6eyJhZGRpdGlvbmFsUHJvcGVydGllcyI6eyJhbnlPZiI6W3sidHlwZSI6ImludGVnZXIifSx7InR5cGUiOiJzdHJpbmcifV0sInBhdHRlcm4iOiJeKFxcK3wtKT8oKFswLTldKyhcXC5bMC05XSopPyl8KFxcLlswLTldKykpKChbS01HVFBFXWkpfFtudW1rTUdUUEVdfChbZUVdKFxcK3wtKT8oKFswLTldKyhcXC5bMC05XSopPyl8KFxcLlswLTldKykpKSk/JCIsIngta3ViZXJuZXRlcy1pbnQtb3Itc3RyaW5nIjp0cnVlfSwiZGVzY3JpcHRpb24iOiJSZXF1ZXN0cyBkZXNjcmliZXMgdGhlIG1pbmltdW0gYW1vdW50IG9mIGNvbXB1dGUgcmVzb3VyY2VzIHJlcXVpcmVkLiBJZiBSZXF1ZXN0cyBpcyBvbWl0dGVkIGZvciBhIGNvbnRhaW5lciwgaXQgZGVmYXVsdHMgdG8gTGltaXRzIGlmIHRoYXQgaXMgZXhwbGljaXRseSBzcGVjaWZpZWQsIG90aGVyd2lzZSB0byBhbiBpbXBsZW1lbnRhdGlvbi1kZWZpbmVkIHZhbHVlLiBSZXF1ZXN0cyBjYW5ub3QgZXhjZWVkIExpbWl0cy4gTW9yZSBpbmZvOiBodHRwczovL2t1YmVybmV0ZXMuaW8vZG9jcy9jb25jZXB0cy9jb25maWd1cmF0aW9uL21hbmFnZS1yZXNvdXJjZXMtY29udGFpbmVycy8iLCJ0eXBlIjoib2JqZWN0In19LCJ0eXBlIjoib2JqZWN0In19LCJ0eXBlIjoib2JqZWN0In0sImV4dGVybmFsUGdDb25maWciOnsiZGVzY3JpcHRpb24iOiJBbGxvd3MgTm9vYmFhIHRvIGNvbm5lY3QgdG8gYW4gZXh0ZXJuYWwgUG9zdGdyZXMgc2VydmVyIiwicHJvcGVydGllcyI6eyJhbGxvd1NlbGZTaWduZWRDZXJ0cyI6eyJkZXNjcmlwdGlvbiI6IkFsbG93U2VsZlNpZ25lZENlcnRzIHdpbGwgYWxsb3cgdGhlIFBvc3RncmVzIHNlcnZlciB0byB1c2Ugc2VsZiBzaWduZWQgY2VydGlmaWNhdGVzIHRvIGF1dGhlbnRpY2F0ZSIsInR5cGUiOiJib29sZWFuIn0sImVuYWJsZVRscyI6eyJkZXNjcmlwdGlvbiI6IkVuYWJsZVRMUyB3aWxsIGFsbG93IHRoZSBwb3N0Z3JlcyBzZXJ2ZXIgdG8gY29ubmVjdCB2aWEgVExTL1NTTCIsInR5cGUiOiJib29sZWFuIn0sInBnU2VjcmV0TmFtZSI6eyJkZXNjcmlwdGlvbiI6IlBHU2VjcmV0IHN0b3JlcyB0aGUgc2VjcmV0IG5hbWUgd2hpY2ggY29udGFpbnMgY29ubmVjdGlvbiBzdHJpbmcgb2YgdGhlIFBvc3RncmVzIHNlcnZlciIsInR5cGUiOiJzdHJpbmcifSwidGxzU2VjcmV0TmFtZSI6eyJkZXNjcmlwdGlvbiI6IlRMU1NlY3JldCBzdG9yZXMgdGhlIHNlY3JldCBuYW1lIHdoaWNoIGNvbnRhaW5zIHRoZSBjbGllbnQgc2lkZSBjZXJ0aWZpY2F0ZXMgaWYgZW5hYmxlZCIsInR5cGUiOiJzdHJpbmcifX0sInR5cGUiOiJvYmplY3QifSwicmVjb25jaWxlU3RyYXRlZ3kiOnsiZGVzY3JpcHRpb24iOiJSZWNvbmNpbGVTdHJhdGVneSBzcGVjaWZpZXMgd2hldGhlciB0byByZWNvbmNpbGUgTm9vQmFhIENScy4gVmFsaWQgdmFsdWVzIGFyZSBcIm1hbmFnZVwiLCBcInN0YW5kYWxvbmVcIiwgXCJpZ25vcmVcIiAoc2FtZSBhcyBcInN0YW5kYWxvbmVcIiksIGFuZCBcIlwiIChzYW1lIGFzIFwibWFuYWdlXCIpLiIsInR5cGUiOiJzdHJpbmcifX0sInR5cGUiOiJvYmplY3QifSwibmV0d29yayI6eyJkZXNjcmlwdGlvbiI6Ik5ldHdvcmsgcmVwcmVzZW50cyBjbHVzdGVyIG5ldHdvcmsgc2V0dGluZ3MiLCJwcm9wZXJ0aWVzIjp7ImFkZHJlc3NSYW5nZXMiOnsiZGVzY3JpcHRpb24iOiJBZGRyZXNzUmFuZ2VzIHNwZWNpZnkgYSBsaXN0IG9mIENJRFJzIHRoYXQgUm9vayB3aWxsIGFwcGx5IHRvIENlcGgncyAncHVibGljX25ldHdvcmsnIGFuZC9vciAnY2x1c3Rlcl9uZXR3b3JrJyBjb25maWd1cmF0aW9ucy4gVGhpcyBjb25maWcgc2VjdGlvbiBtYXkgYmUgdXNlZCBmb3IgdGhlIFwiaG9zdFwiIG9yIFwibXVsdHVzXCIgbmV0d29yayBwcm92aWRlcnMuIiwibnVsbGFibGUiOnRydWUsInByb3BlcnRpZXMiOnsiY2x1c3RlciI6eyJkZXNjcmlwdGlvbiI6IkNsdXN0ZXIgZGVmaW5lcyBhIGxpc3Qgb2YgQ0lEUnMgdG8gdXNlIGZvciBDZXBoIGNsdXN0ZXIgbmV0d29yayBjb21tdW5pY2F0aW9uLiIsIml0ZW1zIjp7ImRlc2NyaXB0aW9uIjoiQW4gSVB2NCBvciBJUHY2IG5ldHdvcmsgQ0lEUi4gXG4gVGhpcyBuYWl2ZSBrdWJlYnVpbGRlciByZWdleCBwcm92aWRlcyBpbW1lZGlhdGUgZmVlZGJhY2sgZm9yIHNvbWUgdHlwb3MgYW5kIGZvciBhIGNvbW1vbiBwcm9ibGVtIGNhc2Ugd2hlcmUgdGhlIHJhbmdlIHNwZWMgaXMgZm9yZ290dGVuIChlLmcuLCAvMjQpLiBSb29rIGRvZXMgaW4tZGVwdGggdmFsaWRhdGlvbiBpbiBjb2RlLiIsInBhdHRlcm4iOiJeWzAtOWEtZkEtRjouXXsyLH1cXC9bMC05XXsxLDN9JCIsInR5cGUiOiJzdHJpbmcifSwidHlwZSI6ImFycmF5In0sInB1YmxpYyI6eyJkZXNjcmlwdGlvbiI6IlB1YmxpYyBkZWZpbmVzIGEgbGlzdCBvZiBDSURScyB0byB1c2UgZm9yIENlcGggcHVibGljIG5ldHdvcmsgY29tbXVuaWNhdGlvbi4iLCJpdGVtcyI6eyJkZXNjcmlwdGlvbiI6IkFuIElQdjQgb3IgSVB2NiBuZXR3b3JrIENJRFIuIFxuIFRoaXMgbmFpdmUga3ViZWJ1aWxkZXIgcmVnZXggcHJvdmlkZXMgaW1tZWRpYXRlIGZlZWRiYWNrIGZvciBzb21lIHR5cG9zIGFuZCBmb3IgYSBjb21tb24gcHJvYmxlbSBjYXNlIHdoZXJlIHRoZSByYW5nZSBzcGVjIGlzIGZvcmdvdHRlbiAoZS5nLiwgLzI0KS4gUm9vayBkb2VzIGluLWRlcHRoIHZhbGlkYXRpb24gaW4gY29kZS4iLCJwYXR0ZXJuIjoiXlswLTlhLWZBLUY6Ll17Mix9XFwvWzAtOV17MSwzfSQiLCJ0eXBlIjoic3RyaW5nIn0sInR5cGUiOiJhcnJheSJ9fSwidHlwZSI6Im9iamVjdCJ9LCJjb25uZWN0aW9ucyI6eyJkZXNjcmlwdGlvbiI6IlNldHRpbmdzIGZvciBuZXR3b3JrIGNvbm5lY3Rpb25zIHN1Y2ggYXMgY29tcHJlc3Npb24gYW5kIGVuY3J5cHRpb24gYWNyb3NzIHRoZSB3aXJlLiIsIm51bGxhYmxlIjp0cnVlLCJwcm9wZXJ0aWVzIjp7ImNvbXByZXNzaW9uIjp7ImRlc2NyaXB0aW9uIjoiQ29tcHJlc3Npb24gc2V0dGluZ3MgZm9yIHRoZSBuZXR3b3JrIGNvbm5lY3Rpb25zLiIsIm51bGxhYmxlIjp0cnVlLCJwcm9wZXJ0aWVzIjp7ImVuYWJsZWQiOnsiZGVzY3JpcHRpb24iOiJXaGV0aGVyIHRvIGNvbXByZXNzIHRoZSBkYXRhIGluIHRyYW5zaXQgYWNyb3NzIHRoZSB3aXJlLiBUaGUgZGVmYXVsdCBpcyBub3Qgc2V0LiIsInR5cGUiOiJib29sZWFuIn19LCJ0eXBlIjoib2JqZWN0In0sImVuY3J5cHRpb24iOnsiZGVzY3JpcHRpb24iOiJFbmNyeXB0aW9uIHNldHRpbmdzIGZvciB0aGUgbmV0d29yayBjb25uZWN0aW9ucy4iLCJudWxsYWJsZSI6dHJ1ZSwicHJvcGVydGllcyI6eyJlbmFibGVkIjp7ImRlc2NyaXB0aW9uIjoiV2hldGhlciB0byBlbmNyeXB0IHRoZSBkYXRhIGluIHRyYW5zaXQgYWNyb3NzIHRoZSB3aXJlIHRvIHByZXZlbnQgZWF2ZXNkcm9wcGluZyB0aGUgZGF0YSBvbiB0aGUgbmV0d29yay4gVGhlIGRlZmF1bHQgaXMgbm90IHNldC4gRXZlbiBpZiBlbmNyeXB0aW9uIGlzIG5vdCBlbmFibGVkLCBjbGllbnRzIHN0aWxsIGVzdGFibGlzaCBhIHN0cm9uZyBpbml0aWFsIGF1dGhlbnRpY2F0aW9uIGZvciB0aGUgY29ubmVjdGlvbiBhbmQgZGF0YSBpbnRlZ3JpdHkgaXMgc3RpbGwgdmFsaWRhdGVkIHdpdGggYSBjcmMgY2hlY2suIFdoZW4gZW5jcnlwdGlvbiBpcyBlbmFibGVkLCBhbGwgY29tbXVuaWNhdGlvbiBiZXR3ZWVuIGNsaWVudHMgYW5kIENlcGggZGFlbW9ucywgb3IgYmV0d2VlbiBDZXBoIGRhZW1vbnMgd2lsbCBiZSBlbmNyeXB0ZWQuIiwidHlwZSI6ImJvb2xlYW4ifX0sInR5cGUiOiJvYmplY3QifSwicmVxdWlyZU1zZ3IyIjp7ImRlc2NyaXB0aW9uIjoiV2hldGhlciB0byByZXF1aXJlIG1zZ3IyIChwb3J0IDMzMDApIGV2ZW4gaWYgY29tcHJlc3Npb24gb3IgZW5jcnlwdGlvbiBhcmUgbm90IGVuYWJsZWQuIElmIHRydWUsIHRoZSBtc2dyMSBwb3J0ICg2Nzg5KSB3aWxsIGJlIGRpc2FibGVkLiBSZXF1aXJlcyBhIGtlcm5lbCB0aGF0IHN1cHBvcnRzIG1zZ3IyIChrZXJuZWwgNS4xMSBvciBDZW50T1MgOC40IG9yIG5ld2VyKS4iLCJ0eXBlIjoiYm9vbGVhbiJ9fSwidHlwZSI6Im9iamVjdCJ9LCJkdWFsU3RhY2siOnsiZGVzY3JpcHRpb24iOiJEdWFsU3RhY2sgZGV0ZXJtaW5lcyB3aGV0aGVyIENlcGggZGFlbW9ucyBzaG91bGQgbGlzdGVuIG9uIGJvdGggSVB2NCBhbmQgSVB2NiIsInR5cGUiOiJib29sZWFuIn0sImhvc3ROZXR3b3JrIjp7ImRlc2NyaXB0aW9uIjoiSG9zdE5ldHdvcmsgdG8gZW5hYmxlIGhvc3QgbmV0d29yay4gSWYgaG9zdCBuZXR3b3JraW5nIGlzIGVuYWJsZWQgb3IgZGlzYWJsZWQgb24gYSBydW5uaW5nIGNsdXN0ZXIsIHRoZW4gdGhlIG9wZXJhdG9yIHdpbGwgYXV0b21hdGljYWxseSBmYWlsIG92ZXIgYWxsIHRoZSBtb25zIHRvIGFwcGx5IHRoZSBuZXcgbmV0d29yayBzZXR0aW5ncy4iLCJ0eXBlIjoiYm9vbGVhbiJ9LCJpcEZhbWlseSI6eyJkZXNjcmlwdGlvbiI6IklQRmFtaWx5IGlzIHRoZSBzaW5nbGUgc3RhY2sgSVB2NiBvciBJUHY0IHByb3RvY29sIiwiZW51bSI6WyJJUHY0IiwiSVB2NiJdLCJudWxsYWJsZSI6dHJ1ZSwidHlwZSI6InN0cmluZyJ9LCJtdWx0aUNsdXN0ZXJTZXJ2aWNlIjp7ImRlc2NyaXB0aW9uIjoiRW5hYmxlIG11bHRpQ2x1c3RlclNlcnZpY2UgdG8gZXhwb3J0IHRoZSBTZXJ2aWNlcyBiZXR3ZWVuIHBlZXIgY2x1c3RlcnMiLCJwcm9wZXJ0aWVzIjp7ImNsdXN0ZXJJRCI6eyJkZXNjcmlwdGlvbiI6IkNsdXN0ZXJJRCB1bmlxdWVseSBpZGVudGlmaWVzIGEgY2x1c3Rlci4gSXQgaXMgdXNlZCBhcyBhIHByZWZpeCB0byBuc2xvb2t1cCBleHBvcnRlZCBzZXJ2aWNlcy4gRm9yIGV4YW1wbGU6IFx1MDAzY2NsdXN0ZXJpZFx1MDAzZS5cdTAwM2NzdmNcdTAwM2UuXHUwMDNjbnNcdTAwM2Uuc3ZjLmNsdXN0ZXJzZXQubG9jYWwiLCJ0eXBlIjoic3RyaW5nIn0sImVuYWJsZWQiOnsiZGVzY3JpcHRpb24iOiJFbmFibGUgbXVsdGlDbHVzdGVyU2VydmljZSB0byBleHBvcnQgdGhlIG1vbiBhbmQgT1NEIHNlcnZpY2VzIHRvIHBlZXIgY2x1c3Rlci4gRW5zdXJlIHRoYXQgcGVlciBjbHVzdGVycyBhcmUgY29ubmVjdGVkIHVzaW5nIGFuIE1DUyBBUEkgY29tcGF0aWJsZSBhcHBsaWNhdGlvbiwgbGlrZSBHbG9iYWxuZXQgU3VibWFyaW5lci4iLCJ0eXBlIjoiYm9vbGVhbiJ9fSwidHlwZSI6Im9iamVjdCJ9LCJwcm92aWRlciI6eyJkZXNjcmlwdGlvbiI6IlByb3ZpZGVyIGlzIHdoYXQgcHJvdmlkZXMgbmV0d29yayBjb25uZWN0aXZpdHkgdG8gdGhlIGNsdXN0ZXIgZS5nLiBcImhvc3RcIiBvciBcIm11bHR1c1wiLiBJZiB0aGUgUHJvdmlkZXIgaXMgdXBkYXRlZCBmcm9tIGJlaW5nIGVtcHR5IHRvIFwiaG9zdFwiIG9uIGEgcnVubmluZyBjbHVzdGVyLCB0aGVuIHRoZSBvcGVyYXRvciB3aWxsIGF1dG9tYXRpY2FsbHkgZmFpbCBvdmVyIGFsbCB0aGUgbW9ucyB0byBhcHBseSB0aGUgXCJob3N0XCIgbmV0d29yayBzZXR0aW5ncy4iLCJlbnVtIjpbIiIsImhvc3QiLCJtdWx0dXMiXSwibnVsbGFibGUiOnRydWUsInR5cGUiOiJzdHJpbmciLCJ4LWt1YmVybmV0ZXMtdmFsaWRhdGlvbnMiOlt7Im1lc3NhZ2UiOiJuZXR3b3JrIHByb3ZpZGVyIG11c3QgYmUgZGlzYWJsZWQgKHJldmVydGVkIHRvIGVtcHR5IHN0cmluZykgYmVmb3JlIGEgbmV3IHByb3ZpZGVyIGlzIGVuYWJsZWQiLCJydWxlIjoic2VsZiA9PSAnJyB8fCBzZWxmID09IG9sZFNlbGYifV19LCJzZWxlY3RvcnMiOnsiYWRkaXRpb25hbFByb3BlcnRpZXMiOnsidHlwZSI6InN0cmluZyJ9LCJkZXNjcmlwdGlvbiI6IlNlbGVjdG9ycyBkZWZpbmUgTmV0d29ya0F0dGFjaG1lbnREZWZpbml0aW9ucyB0byBiZSB1c2VkIGZvciBDZXBoIHB1YmxpYyBhbmQvb3IgY2x1c3RlciBuZXR3b3JrcyB3aGVuIHRoZSBcIm11bHR1c1wiIG5ldHdvcmsgcHJvdmlkZXIgaXMgdXNlZC4gVGhpcyBjb25maWcgc2VjdGlvbiBpcyBub3QgdXNlZCBmb3Igb3RoZXIgbmV0d29yayBwcm92aWRlcnMuIFxuIFZhbGlkIGtleXMgYXJlIFwicHVibGljXCIgYW5kIFwiY2x1c3RlclwiLiBSZWZlciB0byBDZXBoIG5ldHdvcmtpbmcgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZTogaHR0cHM6Ly9kb2NzLmNlcGguY29tL2VuL3JlZWYvcmFkb3MvY29uZmlndXJhdGlvbi9uZXR3b3JrLWNvbmZpZy1yZWYvIFxuIFJlZmVyIHRvIE11bHR1cyBuZXR3b3JrIGFubm90YXRpb24gZG9jdW1lbnRhdGlvbiBmb3IgaGVscCBzZWxlY3RpbmcgdmFsdWVzOiBodHRwczovL2dpdGh1Yi5jb20vazhzbmV0d29ya3BsdW1iaW5nd2cvbXVsdHVzLWNuaS9ibG9iL21hc3Rlci9kb2NzL2hvdy10by11c2UubWQjcnVuLXBvZC13aXRoLW5ldHdvcmstYW5ub3RhdGlvbiBcbiBSb29rIHdpbGwgbWFrZSBhIGJlc3QtZWZmb3J0IGF0dGVtcHQgdG8gYXV0b21hdGljYWxseSBkZXRlY3QgQ0lEUiBhZGRyZXNzIHJhbmdlcyBmb3IgZ2l2ZW4gbmV0d29yayBhdHRhY2htZW50IGRlZmluaXRpb25zLiBSb29rJ3MgbWV0aG9kcyBhcmUgcm9idXN0IGJ1dCBtYXkgYmUgaW1wcmVjaXNlIGZvciBzdWZmaWNpZW50bHkgY29tcGxpY2F0ZWQgbmV0d29ya3MuIFJvb2sncyBhdXRvLWRldGVjdGlvbiBwcm9jZXNzIG9idGFpbnMgYSBuZXcgSVAgYWRkcmVzcyBsZWFzZSBmb3IgZWFjaCBDZXBoQ2x1c3RlciByZWNvbmNpbGUuIElmIFJvb2sgZmFpbHMgdG8gZGV0ZWN0LCBpbmNvcnJlY3RseSBkZXRlY3RzLCBvbmx5IHBhcnRpYWxseSBkZXRlY3RzLCBvciBpZiB1bmRlcmx5aW5nIG5ldHdvcmtzIGRvIG5vdCBzdXBwb3J0IHJldXNpbmcgb2xkIElQIGFkZHJlc3NlcywgaXQgaXMgYmVzdCB0byB1c2UgdGhlICdhZGRyZXNzUmFuZ2VzJyBjb25maWcgc2VjdGlvbiB0byBzcGVjaWZ5IENJRFIgcmFuZ2VzIGZvciB0aGUgQ2VwaCBjbHVzdGVyLiBcbiBBcyBhIGNvbnRyaXZlZCBleGFtcGxlLCBvbmUgY2FuIHVzZSBhIHRoZW9yZXRpY2FsIEt1YmVybmV0ZXMtd2lkZSBuZXR3b3JrIGZvciBDZXBoIGNsaWVudCB0cmFmZmljIGFuZCBhIHRoZW9yZXRpY2FsIFJvb2stb25seSBuZXR3b3JrIGZvciBDZXBoIHJlcGxpY2F0aW9uIHRyYWZmaWMgYXMgc2hvd246IHNlbGVjdG9yczogcHVibGljOiBcImRlZmF1bHQvY2x1c3Rlci1mYXN0LW5ldFwiIGNsdXN0ZXI6IFwicm9vay1jZXBoL2NlcGgtYmFja2VuZC1uZXRcIiIsIm51bGxhYmxlIjp0cnVlLCJ0eXBlIjoib2JqZWN0In19LCJ0eXBlIjoib2JqZWN0IiwieC1rdWJlcm5ldGVzLXZhbGlkYXRpb25zIjpbeyJtZXNzYWdlIjoiYXQgbGVhc3Qgb25lIG5ldHdvcmsgc2VsZWN0b3IgbXVzdCBiZSBzcGVjaWZpZWQgd2hlbiB1c2luZyBtdWx0dXMiLCJydWxlIjoiIWhhcyhzZWxmLnByb3ZpZGVyKSB8fCAoc2VsZi5wcm92aWRlciAhPSAnbXVsdHVzJyB8fCAoc2VsZi5wcm92aWRlciA9PSAnbXVsdHVzJyBcdTAwMjZcdTAwMjYgc2l6ZShzZWxmLnNlbGVjdG9ycykgXHUwMDNlIDApKSJ9LHsibWVzc2FnZSI6InRoZSBsZWdhY3kgaG9zdE5ldHdvcmsgc2V0dGluZyBjYW4gb25seSBiZSBzZXQgaWYgdGhlIG5ldHdvcmsucHJvdmlkZXIgaXMgc2V0IHRvIHRoZSBlbXB0eSBzdHJpbmciLCJydWxlIjoiIWhhcyhzZWxmLmhvc3ROZXR3b3JrKSB8fCBzZWxmLmhvc3ROZXR3b3JrID09IGZhbHNlIHx8ICFoYXMoc2VsZi5wcm92aWRlcikgfHwgc2VsZi5wcm92aWRlciA9PSBcIlwiIn1dfSwibmZzIjp7ImRlc2NyaXB0aW9uIjoiTkZTU3BlYyBkZWZpbmVzIHNwZWNpZmljIG5mcyBjb25maWd1cmF0aW9uIG9wdGlvbnMiLCJwcm9wZXJ0aWVzIjp7ImVuYWJsZSI6eyJkZXNjcmlwdGlvbiI6IkVuYWJsZSBzcGVjaWZpZXMgd2hldGhlciB0byBlbmFibGUgTkZTLiIsInR5cGUiOiJib29sZWFuIn0sInN0b3JhZ2VDbGFzc05hbWUiOnsiZGVzY3JpcHRpb24iOiJTdG9yYWdlQ2xhc3NOYW1lIHNwZWNpZmllcyB0aGUgbmFtZSBvZiB0aGUgc3RvcmFnZSBjbGFzcyBjcmVhdGVkIGZvciBORlMiLCJtYXhMZW5ndGgiOjI1MywicGF0dGVybiI6Il5bYS16MC05XShbLWEtejAtOV0qW2EtejAtOV0pPyhcXFxcLlthLXowLTldKFstYS16MC05XSpbYS16MC05XSk/KSokIiwidHlwZSI6InN0cmluZyJ9fSwidHlwZSI6Im9iamVjdCJ9LCJub2RlVG9wb2xvZ2llcyI6eyJkZXNjcmlwdGlvbiI6Ik5vZGVUb3BvbG9naWVzIHNwZWNpZmllcyB0aGUgbm9kZXMgYXZhaWxhYmxlIGZvciB0aGUgc3RvcmFnZSBjbHVzdGVyLCBwcmVmZXJyZWQgZmFpbHVyZSBkb21haW4gYW5kIGxvY2F0aW9uIGZvciB0aGUgYXJiaXRlciByZXNvdXJjZXMuIFRoaXMgaXMgb3B0aW9uYWwgZm9yIG5vbi1hcmJpdGVyIGNsdXN0ZXJzLiBGb3IgYXJiaXRlciBjbHVzdGVycywgdGhlIGFyYml0ZXJMb2NhdGlvbiBpcyByZXF1aXJlZDsgZmFpbHVyZSBkb21haW4gYW5kIHRoZSBub2RlIGxhYmVscyBhcmUgb3B0aW9uYWwuIFdoZW4gdGhlIGZhaWx1cmUgZG9tYWluIGFuZCB0aGUgbm9kZSBsYWJlbHMgYXJlIG1pc3NpbmcsIHRoZSBvY3Mtb3BlcmF0b3IgbWFrZXMgYSBiZXN0IGVmZm9ydCB0byBkZXRlcm1pbmUgdGhlbSBhdXRvbWF0aWNhbGx5LiIsInByb3BlcnRpZXMiOnsiYXJiaXRlckxvY2F0aW9uIjp7ImRlc2NyaXB0aW9uIjoiQXJiaXRlckxvY2F0aW9uIGlzIHRoZSBjaG9zZW4gbG9jYXRpb24gaW4gdGhlIGZhaWx1cmUgZG9tYWluIGZvciBwbGFjaW5nIHRoZSBhcmJpdGVyIHJlc291cmNlcy4gV2hlbiB0aGUgZmFpbHVyZSBkb21haW4gaXMgbm90IHByb3ZpZGVkIGFzIGFuIGlucHV0LCBvY3Mtb3BlcmF0b3IgZGV0ZXJtaW5lcyB0aGUgZmFpbHVyZSBkb21haW4uIiwidHlwZSI6InN0cmluZyJ9LCJsYWJlbHMiOnsiYWRkaXRpb25hbFByb3BlcnRpZXMiOnsiZGVzY3JpcHRpb24iOiJUb3BvbG9neUxhYmVsVmFsdWVzIGlzIGEgbGlzdCBvZiB2YWx1ZXMgZm9yIGEgdG9wb2xvZ3kgbGFiZWwiLCJpdGVtcyI6eyJ0eXBlIjoic3RyaW5nIn0sInR5cGUiOiJhcnJheSJ9LCJkZXNjcmlwdGlvbiI6IkxhYmVscyBpcyBhIG1hcCBvZiB0b3BvbG9neSBsYWJlbCBrZXlzIChlLmcuIFwiZmFpbHVyZS1kb21haW4ua3ViZXJuZXRlcy5pb1wiKSB0byBhIHNldCBvZiB2YWx1ZXMgZm9yIHRob3NlIGtleXMuIiwibnVsbGFibGUiOnRydWUsInR5cGUiOiJvYmplY3QifX0sInR5cGUiOiJvYmplY3QifSwib3ZlcnByb3Zpc2lvbkNvbnRyb2wiOnsiZGVzY3JpcHRpb24iOiJPdmVycHJvdmlzaW9uQ29udHJvbCBzcGVjaWZpZXMgdGhlIGFsbG93ZWQgaGFyZC1saW1pdCBQVnMgb3ZlcnByb3Zpc2lvbmluZyByZWxhdGl2ZSB0byB0aGUgZWZmZWN0aXZlIHVzYWJsZSBzdG9yYWdlIGNhcGFjaXR5LiIsIml0ZW1zIjp7ImRlc2NyaXB0aW9uIjoiT3ZlcnByb3Zpc2lvbkNvbnRyb2xTcGVjIGRlZmluZXMgdGhlIGFsbG93ZWQgb3ZlcnByb3Zpc2lvbmluZyBQVkMgY29uc3VtcHRpb24gZnJvbSB0aGUgdW5kZXJseWluZyBjbHVzdGVyLiBUaGlzIG1heSBiZSBhbiBhYnNvbHV0ZSB2YWx1ZSBvciBhcyBhIHBlcmNlbnRhZ2Ugb2YgdGhlIG92ZXJhbGwgZWZmZWN0aXZlIGNhcGFjaXR5LiBPbmUsIGFuZCBvbmx5IG9uZSBvZiB0aG9zZSB0d28gKENhcGFjaXR5IGFuZCBQZXJjZW50YWdlKSBtYXkgYmUgZGVmaW5lZC4iLCJwcm9wZXJ0aWVzIjp7ImNhcGFjaXR5Ijp7ImFueU9mIjpbeyJ0eXBlIjoiaW50ZWdlciJ9LHsidHlwZSI6InN0cmluZyJ9XSwicGF0dGVybiI6Il4oXFwrfC0pPygoWzAtOV0rKFxcLlswLTldKik/KXwoXFwuWzAtOV0rKSkoKFtLTUdUUEVdaSl8W251bWtNR1RQRV18KFtlRV0oXFwrfC0pPygoWzAtOV0rKFxcLlswLTldKik/KXwoXFwuWzAtOV0rKSkpKT8kIiwieC1rdWJlcm5ldGVzLWludC1vci1zdHJpbmciOnRydWV9LCJxdW90YU5hbWUiOnsidHlwZSI6InN0cmluZyJ9LCJzZWxlY3RvciI6eyJkZXNjcmlwdGlvbiI6IkNsdXN0ZXJSZXNvdXJjZVF1b3RhU2VsZWN0b3IgaXMgdXNlZCB0byBzZWxlY3QgcHJvamVjdHMuICBBdCBsZWFzdCBvbmUgb2YgTGFiZWxTZWxlY3RvciBvciBBbm5vdGF0aW9uU2VsZWN0b3IgbXVzdCBwcmVzZW50LiAgSWYgb25seSBvbmUgaXMgcHJlc2VudCwgaXQgaXMgdGhlIG9ubHkgc2VsZWN0aW9uIGNyaXRlcmlhLiAgSWYgYm90aCBhcmUgc3BlY2lmaWVkLCB0aGUgcHJvamVjdCBtdXN0IG1hdGNoIGJvdGggcmVzdHJpY3Rpb25zLiIsInByb3BlcnRpZXMiOnsiYW5ub3RhdGlvbnMiOnsiYWRkaXRpb25hbFByb3BlcnRpZXMiOnsidHlwZSI6InN0cmluZyJ9LCJkZXNjcmlwdGlvbiI6IkFubm90YXRpb25TZWxlY3RvciBpcyB1c2VkIHRvIHNlbGVjdCBwcm9qZWN0cyBieSBhbm5vdGF0aW9uLiIsIm51bGxhYmxlIjp0cnVlLCJ0eXBlIjoib2JqZWN0In0sImxhYmVscyI6eyJkZXNjcmlwdGlvbiI6IkxhYmVsU2VsZWN0b3IgaXMgdXNlZCB0byBzZWxlY3QgcHJvamVjdHMgYnkgbGFiZWwuIiwibnVsbGFibGUiOnRydWUsInByb3BlcnRpZXMiOnsibWF0Y2hFeHByZXNzaW9ucyI6eyJkZXNjcmlwdGlvbiI6Im1hdGNoRXhwcmVzc2lvbnMgaXMgYSBsaXN0IG9mIGxhYmVsIHNlbGVjdG9yIHJlcXVpcmVtZW50cy4gVGhlIHJlcXVpcmVtZW50cyBhcmUgQU5EZWQuIiwiaXRlbXMiOnsiZGVzY3JpcHRpb24iOiJBIGxhYmVsIHNlbGVjdG9yIHJlcXVpcmVtZW50IGlzIGEgc2VsZWN0b3IgdGhhdCBjb250YWlucyB2YWx1ZXMsIGEga2V5LCBhbmQgYW4gb3BlcmF0b3IgdGhhdCByZWxhdGVzIHRoZSBrZXkgYW5kIHZhbHVlcy4iLCJwcm9wZXJ0aWVzIjp7ImtleSI6eyJkZXNjcmlwdGlvbiI6ImtleSBpcyB0aGUgbGFiZWwga2V5IHRoYXQgdGhlIHNlbGVjdG9yIGFwcGxpZXMgdG8uIiwidHlwZSI6InN0cmluZyJ9LCJvcGVyYXRvciI6eyJkZXNjcmlwdGlvbiI6Im9wZXJhdG9yIHJlcHJlc2VudHMgYSBrZXkncyByZWxhdGlvbnNoaXAgdG8gYSBzZXQgb2YgdmFsdWVzLiBWYWxpZCBvcGVyYXRvcnMgYXJlIEluLCBOb3RJbiwgRXhpc3RzIGFuZCBEb2VzTm90RXhpc3QuIiwidHlwZSI6InN0cmluZyJ9LCJ2YWx1ZXMiOnsiZGVzY3JpcHRpb24iOiJ2YWx1ZXMgaXMgYW4gYXJyYXkgb2Ygc3RyaW5nIHZhbHVlcy4gSWYgdGhlIG9wZXJhdG9yIGlzIEluIG9yIE5vdEluLCB0aGUgdmFsdWVzIGFycmF5IG11c3QgYmUgbm9uLWVtcHR5LiBJZiB0aGUgb3BlcmF0b3IgaXMgRXhpc3RzIG9yIERvZXNOb3RFeGlzdCwgdGhlIHZhbHVlcyBhcnJheSBtdXN0IGJlIGVtcHR5LiBUaGlzIGFycmF5IGlzIHJlcGxhY2VkIGR1cmluZyBhIHN0cmF0ZWdpYyBtZXJnZSBwYXRjaC4iLCJpdGVtcyI6eyJ0eXBlIjoic3RyaW5nIn0sInR5cGUiOiJhcnJheSJ9fSwicmVxdWlyZWQiOlsia2V5Iiwib3BlcmF0b3IiXSwidHlwZSI6Im9iamVjdCJ9LCJ0eXBlIjoiYXJyYXkifSwibWF0Y2hMYWJlbHMiOnsiYWRkaXRpb25hbFByb3BlcnRpZXMiOnsidHlwZSI6InN0cmluZyJ9LCJkZXNjcmlwdGlvbiI6Im1hdGNoTGFiZWxzIGlzIGEgbWFwIG9mIHtrZXksdmFsdWV9IHBhaXJzLiBBIHNpbmdsZSB7a2V5LHZhbHVlfSBpbiB0aGUgbWF0Y2hMYWJlbHMgbWFwIGlzIGVxdWl2YWxlbnQgdG8gYW4gZWxlbWVudCBvZiBtYXRjaEV4cHJlc3Npb25zLCB3aG9zZSBrZXkgZmllbGQgaXMgXCJrZXlcIiwgdGhlIG9wZXJhdG9yIGlzIFwiSW5cIiwgYW5kIHRoZSB2YWx1ZXMgYXJyYXkgY29udGFpbnMgb25seSBcInZhbHVlXCIuIFRoZSByZXF1aXJlbWVudHMgYXJlIEFORGVkLiIsInR5cGUiOiJvYmplY3QifX0sInR5cGUiOiJvYmplY3QiLCJ4LWt1YmVybmV0ZXMtbWFwLXR5cGUiOiJhdG9taWMifX0sInR5cGUiOiJvYmplY3QifSwic3RvcmFnZUNsYXNzTmFtZSI6eyJ0eXBlIjoic3RyaW5nIn19LCJ0eXBlIjoib2JqZWN0In0sInR5cGUiOiJhcnJheSJ9LCJwbGFjZW1lbnQiOnsiYWRkaXRpb25hbFByb3BlcnRpZXMiOnsiZGVzY3JpcHRpb24iOiJQbGFjZW1lbnQgaXMgdGhlIHBsYWNlbWVudCBmb3IgYW4gb2JqZWN0IiwicHJvcGVydGllcyI6eyJub2RlQWZmaW5pdHkiOnsiZGVzY3JpcHRpb24iOiJOb2RlQWZmaW5pdHkgaXMgYSBncm91cCBvZiBub2RlIGFmZmluaXR5IHNjaGVkdWxpbmcgcnVsZXMiLCJwcm9wZXJ0aWVzIjp7InByZWZlcnJlZER1cmluZ1NjaGVkdWxpbmdJZ25vcmVkRHVyaW5nRXhlY3V0aW9uIjp7ImRlc2NyaXB0aW9uIjoiVGhlIHNjaGVkdWxlciB3aWxsIHByZWZlciB0byBzY2hlZHVsZSBwb2RzIHRvIG5vZGVzIHRoYXQgc2F0aXNmeSB0aGUgYWZmaW5pdHkgZXhwcmVzc2lvbnMgc3BlY2lmaWVkIGJ5IHRoaXMgZmllbGQsIGJ1dCBpdCBtYXkgY2hvb3NlIGEgbm9kZSB0aGF0IHZpb2xhdGVzIG9uZSBvciBtb3JlIG9mIHRoZSBleHByZXNzaW9ucy4gVGhlIG5vZGUgdGhhdCBpcyBtb3N0IHByZWZlcnJlZCBpcyB0aGUgb25lIHdpdGggdGhlIGdyZWF0ZXN0IHN1bSBvZiB3ZWlnaHRzLCBpLmUuIGZvciBlYWNoIG5vZGUgdGhhdCBtZWV0cyBhbGwgb2YgdGhlIHNjaGVkdWxpbmcgcmVxdWlyZW1lbnRzIChyZXNvdXJjZSByZXF1ZXN0LCByZXF1aXJlZER1cmluZ1NjaGVkdWxpbmcgYWZmaW5pdHkgZXhwcmVzc2lvbnMsIGV0Yy4pLCBjb21wdXRlIGEgc3VtIGJ5IGl0ZXJhdGluZyB0aHJvdWdoIHRoZSBlbGVtZW50cyBvZiB0aGlzIGZpZWxkIGFuZCBhZGRpbmcgXCJ3ZWlnaHRcIiB0byB0aGUgc3VtIGlmIHRoZSBub2RlIG1hdGNoZXMgdGhlIGNvcnJlc3BvbmRpbmcgbWF0Y2hFeHByZXNzaW9uczsgdGhlIG5vZGUocykgd2l0aCB0aGUgaGlnaGVzdCBzdW0gYXJlIHRoZSBtb3N0IHByZWZlcnJlZC4iLCJpdGVtcyI6eyJkZXNjcmlwdGlvbiI6IkFuIGVtcHR5IHByZWZlcnJlZCBzY2hlZHVsaW5nIHRlcm0gbWF0Y2hlcyBhbGwgb2JqZWN0cyB3aXRoIGltcGxpY2l0IHdlaWdodCAwIChpLmUuIGl0J3MgYSBuby1vcCkuIEEgbnVsbCBwcmVmZXJyZWQgc2NoZWR1bGluZyB0ZXJtIG1hdGNoZXMgbm8gb2JqZWN0cyAoaS5lLiBpcyBhbHNvIGEgbm8tb3ApLiIsInByb3BlcnRpZXMiOnsicHJlZmVyZW5jZSI6eyJkZXNjcmlwdGlvbiI6IkEgbm9kZSBzZWxlY3RvciB0ZXJtLCBhc3NvY2lhdGVkIHdpdGggdGhlIGNvcnJlc3BvbmRpbmcgd2VpZ2h0LiIsInByb3BlcnRpZXMiOnsibWF0Y2hFeHByZXNzaW9ucyI6eyJkZXNjcmlwdGlvbiI6IkEgbGlzdCBvZiBub2RlIHNlbGVjdG9yIHJlcXVpcmVtZW50cyBieSBub2RlJ3MgbGFiZWxzLiIsIml0ZW1zIjp7ImRlc2NyaXB0aW9uIjoiQSBub2RlIHNlbGVjdG9yIHJlcXVpcmVtZW50IGlzIGEgc2VsZWN0b3IgdGhhdCBjb250YWlucyB2YWx1ZXMsIGEga2V5LCBhbmQgYW4gb3BlcmF0b3IgdGhhdCByZWxhdGVzIHRoZSBrZXkgYW5kIHZhbHVlcy4iLCJwcm9wZXJ0aWVzIjp7ImtleSI6eyJkZXNjcmlwdGlvbiI6IlRoZSBsYWJlbCBrZXkgdGhhdCB0aGUgc2VsZWN0b3IgYXBwbGllcyB0by4iLCJ0eXBlIjoic3RyaW5nIn0sIm9wZXJhdG9yIjp7ImRlc2NyaXB0aW9uIjoiUmVwcmVzZW50cyBhIGtleSdzIHJlbGF0aW9uc2hpcCB0byBhIHNldCBvZiB2YWx1ZXMuIFZhbGlkIG9wZXJhdG9ycyBhcmUgSW4sIE5vdEluLCBFeGlzdHMsIERvZXNOb3RFeGlzdC4gR3QsIGFuZCBMdC4iLCJ0eXBlIjoic3RyaW5nIn0sInZhbHVlcyI6eyJkZXNjcmlwdGlvbiI6IkFuIGFycmF5IG9mIHN0cmluZyB2YWx1ZXMuIElmIHRoZSBvcGVyYXRvciBpcyBJbiBvciBOb3RJbiwgdGhlIHZhbHVlcyBhcnJheSBtdXN0IGJlIG5vbi1lbXB0eS4gSWYgdGhlIG9wZXJhdG9yIGlzIEV4aXN0cyBvciBEb2VzTm90RXhpc3QsIHRoZSB2YWx1ZXMgYXJyYXkgbXVzdCBiZSBlbXB0eS4gSWYgdGhlIG9wZXJhdG9yIGlzIEd0IG9yIEx0LCB0aGUgdmFsdWVzIGFycmF5IG11c3QgaGF2ZSBhIHNpbmdsZSBlbGVtZW50LCB3aGljaCB3aWxsIGJlIGludGVycHJldGVkIGFzIGFuIGludGVnZXIuIFRoaXMgYXJyYXkgaXMgcmVwbGFjZWQgZHVyaW5nIGEgc3RyYXRlZ2ljIG1lcmdlIHBhdGNoLiIsIml0ZW1zIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6ImFycmF5In19LCJyZXF1aXJlZCI6WyJrZXkiLCJvcGVyYXRvciJdLCJ0eXBlIjoib2JqZWN0In0sInR5cGUiOiJhcnJheSJ9LCJtYXRjaEZpZWxkcyI6eyJkZXNjcmlwdGlvbiI6IkEgbGlzdCBvZiBub2RlIHNlbGVjdG9yIHJlcXVpcmVtZW50cyBieSBub2RlJ3MgZmllbGRzLiIsIml0ZW1zIjp7ImRlc2NyaXB0aW9uIjoiQSBub2RlIHNlbGVjdG9yIHJlcXVpcmVtZW50IGlzIGEgc2VsZWN0b3IgdGhhdCBjb250YWlucyB2YWx1ZXMsIGEga2V5LCBhbmQgYW4gb3BlcmF0b3IgdGhhdCByZWxhdGVzIHRoZSBrZXkgYW5kIHZhbHVlcy4iLCJwcm9wZXJ0aWVzIjp7ImtleSI6eyJkZXNjcmlwdGlvbiI6IlRoZSBsYWJlbCBrZXkgdGhhdCB0aGUgc2VsZWN0b3IgYXBwbGllcyB0by4iLCJ0eXBlIjoic3RyaW5nIn0sIm9wZXJhdG9yIjp7ImRlc2NyaXB0aW9uIjoiUmVwcmVzZW50cyBhIGtleSdzIHJlbGF0aW9uc2hpcCB0byBhIHNldCBvZiB2YWx1ZXMuIFZhbGlkIG9wZXJhdG9ycyBhcmUgSW4sIE5vdEluLCBFeGlzdHMsIERvZXNOb3RFeGlzdC4gR3QsIGFuZCBMdC4iLCJ0eXBlIjoic3RyaW5nIn0sInZhbHVlcyI6eyJkZXNjcmlwdGlvbiI6IkFuIGFycmF5IG9mIHN0cmluZyB2YWx1ZXMuIElmIHRoZSBvcGVyYXRvciBpcyBJbiBvciBOb3RJbiwgdGhlIHZhbHVlcyBhcnJheSBtdXN0IGJlIG5vbi1lbXB0eS4gSWYgdGhlIG9wZXJhdG9yIGlzIEV4aXN0cyBvciBEb2VzTm90RXhpc3QsIHRoZSB2YWx1ZXMgYXJyYXkgbXVzdCBiZSBlbXB0eS4gSWYgdGhlIG9wZXJhdG9yIGlzIEd0IG9yIEx0LCB0aGUgdmFsdWVzIGFycmF5IG11c3QgaGF2ZSBhIHNpbmdsZSBlbGVtZW50LCB3aGljaCB3aWxsIGJlIGludGVycHJldGVkIGFzIGFuIGludGVnZXIuIFRoaXMgYXJyYXkgaXMgcmVwbGFjZWQgZHVyaW5nIGEgc3RyYXRlZ2ljIG1lcmdlIHBhdGNoLiIsIml0ZW1zIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6ImFycmF5In19LCJyZXF1aXJlZCI6WyJrZXkiLCJvcGVyYXRvciJdLCJ0eXBlIjoib2JqZWN0In0sInR5cGUiOiJhcnJheSJ9fSwidHlwZSI6Im9iamVjdCIsIngta3ViZXJuZXRlcy1tYXAtdHlwZSI6ImF0b21pYyJ9LCJ3ZWlnaHQiOnsiZGVzY3JpcHRpb24iOiJXZWlnaHQgYXNzb2NpYXRlZCB3aXRoIG1hdGNoaW5nIHRoZSBjb3JyZXNwb25kaW5nIG5vZGVTZWxlY3RvclRlcm0sIGluIHRoZSByYW5nZSAxLTEwMC4iLCJmb3JtYXQiOiJpbnQzMiIsInR5cGUiOiJpbnRlZ2VyIn19LCJyZXF1aXJlZCI6WyJwcmVmZXJlbmNlIiwid2VpZ2h0Il0sInR5cGUiOiJvYmplY3QifSwidHlwZSI6ImFycmF5In0sInJlcXVpcmVkRHVyaW5nU2NoZWR1bGluZ0lnbm9yZWREdXJpbmdFeGVjdXRpb24iOnsiZGVzY3JpcHRpb24iOiJJZiB0aGUgYWZmaW5pdHkgcmVxdWlyZW1lbnRzIHNwZWNpZmllZCBieSB0aGlzIGZpZWxkIGFyZSBub3QgbWV0IGF0IHNjaGVkdWxpbmcgdGltZSwgdGhlIHBvZCB3aWxsIG5vdCBiZSBzY2hlZHVsZWQgb250byB0aGUgbm9kZS4gSWYgdGhlIGFmZmluaXR5IHJlcXVpcmVtZW50cyBzcGVjaWZpZWQgYnkgdGhpcyBmaWVsZCBjZWFzZSB0byBiZSBtZXQgYXQgc29tZSBwb2ludCBkdXJpbmcgcG9kIGV4ZWN1dGlvbiAoZS5nLiBkdWUgdG8gYW4gdXBkYXRlKSwgdGhlIHN5c3RlbSBtYXkgb3IgbWF5IG5vdCB0cnkgdG8gZXZlbnR1YWxseSBldmljdCB0aGUgcG9kIGZyb20gaXRzIG5vZGUuIiwicHJvcGVydGllcyI6eyJub2RlU2VsZWN0b3JUZXJtcyI6eyJkZXNjcmlwdGlvbiI6IlJlcXVpcmVkLiBBIGxpc3Qgb2Ygbm9kZSBzZWxlY3RvciB0ZXJtcy4gVGhlIHRlcm1zIGFyZSBPUmVkLiIsIml0ZW1zIjp7ImRlc2NyaXB0aW9uIjoiQSBudWxsIG9yIGVtcHR5IG5vZGUgc2VsZWN0b3IgdGVybSBtYXRjaGVzIG5vIG9iamVjdHMuIFRoZSByZXF1aXJlbWVudHMgb2YgdGhlbSBhcmUgQU5EZWQuIFRoZSBUb3BvbG9neVNlbGVjdG9yVGVybSB0eXBlIGltcGxlbWVudHMgYSBzdWJzZXQgb2YgdGhlIE5vZGVTZWxlY3RvclRlcm0uIiwicHJvcGVydGllcyI6eyJtYXRjaEV4cHJlc3Npb25zIjp7ImRlc2NyaXB0aW9uIjoiQSBsaXN0IG9mIG5vZGUgc2VsZWN0b3IgcmVxdWlyZW1lbnRzIGJ5IG5vZGUncyBsYWJlbHMuIiwiaXRlbXMiOnsiZGVzY3JpcHRpb24iOiJBIG5vZGUgc2VsZWN0b3IgcmVxdWlyZW1lbnQgaXMgYSBzZWxlY3RvciB0aGF0IGNvbnRhaW5zIHZhbHVlcywgYSBrZXksIGFuZCBhbiBvcGVyYXRvciB0aGF0IHJlbGF0ZXMgdGhlIGtleSBhbmQgdmFsdWVzLiIsInByb3BlcnRpZXMiOnsia2V5Ijp7ImRlc2NyaXB0aW9uIjoiVGhlIGxhYmVsIGtleSB0aGF0IHRoZSBzZWxlY3RvciBhcHBsaWVzIHRvLiIsInR5cGUiOiJzdHJpbmcifSwib3BlcmF0b3IiOnsiZGVzY3JpcHRpb24iOiJSZXByZXNlbnRzIGEga2V5J3MgcmVsYXRpb25zaGlwIHRvIGEgc2V0IG9mIHZhbHVlcy4gVmFsaWQgb3BlcmF0b3JzIGFyZSBJbiwgTm90SW4sIEV4aXN0cywgRG9lc05vdEV4aXN0LiBHdCwgYW5kIEx0LiIsInR5cGUiOiJzdHJpbmcifSwidmFsdWVzIjp7ImRlc2NyaXB0aW9uIjoiQW4gYXJyYXkgb2Ygc3RyaW5nIHZhbHVlcy4gSWYgdGhlIG9wZXJhdG9yIGlzIEluIG9yIE5vdEluLCB0aGUgdmFsdWVzIGFycmF5IG11c3QgYmUgbm9uLWVtcHR5LiBJZiB0aGUgb3BlcmF0b3IgaXMgRXhpc3RzIG9yIERvZXNOb3RFeGlzdCwgdGhlIHZhbHVlcyBhcnJheSBtdXN0IGJlIGVtcHR5LiBJZiB0aGUgb3BlcmF0b3IgaXMgR3Qgb3IgTHQsIHRoZSB2YWx1ZXMgYXJyYXkgbXVzdCBoYXZlIGEgc2luZ2xlIGVsZW1lbnQsIHdoaWNoIHdpbGwgYmUgaW50ZXJwcmV0ZWQgYXMgYW4gaW50ZWdlci4gVGhpcyBhcnJheSBpcyByZXBsYWNlZCBkdXJpbmcgYSBzdHJhdGVnaWMgbWVyZ2UgcGF0Y2guIiwiaXRlbXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjoiYXJyYXkifX0sInJlcXVpcmVkIjpbImtleSIsIm9wZXJhdG9yIl0sInR5cGUiOiJvYmplY3QifSwidHlwZSI6ImFycmF5In0sIm1hdGNoRmllbGRzIjp7ImRlc2NyaXB0aW9uIjoiQSBsaXN0IG9mIG5vZGUgc2VsZWN0b3IgcmVxdWlyZW1lbnRzIGJ5IG5vZGUncyBmaWVsZHMuIiwiaXRlbXMiOnsiZGVzY3JpcHRpb24iOiJBIG5vZGUgc2VsZWN0b3IgcmVxdWlyZW1lbnQgaXMgYSBzZWxlY3RvciB0aGF0IGNvbnRhaW5zIHZhbHVlcywgYSBrZXksIGFuZCBhbiBvcGVyYXRvciB0aGF0IHJlbGF0ZXMgdGhlIGtleSBhbmQgdmFsdWVzLiIsInByb3BlcnRpZXMiOnsia2V5Ijp7ImRlc2NyaXB0aW9uIjoiVGhlIGxhYmVsIGtleSB0aGF0IHRoZSBzZWxlY3RvciBhcHBsaWVzIHRvLiIsInR5cGUiOiJzdHJpbmcifSwib3BlcmF0b3IiOnsiZGVzY3JpcHRpb24iOiJSZXByZXNlbnRzIGEga2V5J3MgcmVsYXRpb25zaGlwIHRvIGEgc2V0IG9mIHZhbHVlcy4gVmFsaWQgb3BlcmF0b3JzIGFyZSBJbiwgTm90SW4sIEV4aXN0cywgRG9lc05vdEV4aXN0LiBHdCwgYW5kIEx0LiIsInR5cGUiOiJzdHJpbmcifSwidmFsdWVzIjp7ImRlc2NyaXB0aW9uIjoiQW4gYXJyYXkgb2Ygc3RyaW5nIHZhbHVlcy4gSWYgdGhlIG9wZXJhdG9yIGlzIEluIG9yIE5vdEluLCB0aGUgdmFsdWVzIGFycmF5IG11c3QgYmUgbm9uLWVtcHR5LiBJZiB0aGUgb3BlcmF0b3IgaXMgRXhpc3RzIG9yIERvZXNOb3RFeGlzdCwgdGhlIHZhbHVlcyBhcnJheSBtdXN0IGJlIGVtcHR5LiBJZiB0aGUgb3BlcmF0b3IgaXMgR3Qgb3IgTHQsIHRoZSB2YWx1ZXMgYXJyYXkgbXVzdCBoYXZlIGEgc2luZ2xlIGVsZW1lbnQsIHdoaWNoIHdpbGwgYmUgaW50ZXJwcmV0ZWQgYXMgYW4gaW50ZWdlci4gVGhpcyBhcnJheSBpcyByZXBsYWNlZCBkdXJpbmcgYSBzdHJhdGVnaWMgbWVyZ2UgcGF0Y2guIiwiaXRlbXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjoiYXJyYXkifX0sInJlcXVpcmVkIjpbImtleSIsIm9wZXJhdG9yIl0sInR5cGUiOiJvYmplY3QifSwidHlwZSI6ImFycmF5In19LCJ0eXBlIjoib2JqZWN0IiwieC1rdWJlcm5ldGVzLW1hcC10eXBlIjoiYXRvbWljIn0sInR5cGUiOiJhcnJheSJ9fSwicmVxdWlyZWQiOlsibm9kZVNlbGVjdG9yVGVybXMiXSwidHlwZSI6Im9iamVjdCIsIngta3ViZXJuZXRlcy1tYXAtdHlwZSI6ImF0b21pYyJ9fSwidHlwZSI6Im9iamVjdCJ9LCJwb2RBZmZpbml0eSI6eyJkZXNjcmlwdGlvbiI6IlBvZEFmZmluaXR5IGlzIGEgZ3JvdXAgb2YgaW50ZXIgcG9kIGFmZmluaXR5IHNjaGVkdWxpbmcgcnVsZXMiLCJwcm9wZXJ0aWVzIjp7InByZWZlcnJlZER1cmluZ1NjaGVkdWxpbmdJZ25vcmVkRHVyaW5nRXhlY3V0aW9uIjp7ImRlc2NyaXB0aW9uIjoiVGhlIHNjaGVkdWxlciB3aWxsIHByZWZlciB0byBzY2hlZHVsZSBwb2RzIHRvIG5vZGVzIHRoYXQgc2F0aXNmeSB0aGUgYWZmaW5pdHkgZXhwcmVzc2lvbnMgc3BlY2lmaWVkIGJ5IHRoaXMgZmllbGQsIGJ1dCBpdCBtYXkgY2hvb3NlIGEgbm9kZSB0aGF0IHZpb2xhdGVzIG9uZSBvciBtb3JlIG9mIHRoZSBleHByZXNzaW9ucy4gVGhlIG5vZGUgdGhhdCBpcyBtb3N0IHByZWZlcnJlZCBpcyB0aGUgb25lIHdpdGggdGhlIGdyZWF0ZXN0IHN1bSBvZiB3ZWlnaHRzLCBpLmUuIGZvciBlYWNoIG5vZGUgdGhhdCBtZWV0cyBhbGwgb2YgdGhlIHNjaGVkdWxpbmcgcmVxdWlyZW1lbnRzIChyZXNvdXJjZSByZXF1ZXN0LCByZXF1aXJlZER1cmluZ1NjaGVkdWxpbmcgYWZmaW5pdHkgZXhwcmVzc2lvbnMsIGV0Yy4pLCBjb21wdXRlIGEgc3VtIGJ5IGl0ZXJhdGluZyB0aHJvdWdoIHRoZSBlbGVtZW50cyBvZiB0aGlzIGZpZWxkIGFuZCBhZGRpbmcgXCJ3ZWlnaHRcIiB0byB0aGUgc3VtIGlmIHRoZSBub2RlIGhhcyBwb2RzIHdoaWNoIG1hdGNoZXMgdGhlIGNvcnJlc3BvbmRpbmcgcG9kQWZmaW5pdHlUZXJtOyB0aGUgbm9kZShzKSB3aXRoIHRoZSBoaWdoZXN0IHN1bSBhcmUgdGhlIG1vc3QgcHJlZmVycmVkLiIsIml0ZW1zIjp7ImRlc2NyaXB0aW9uIjoiVGhlIHdlaWdodHMgb2YgYWxsIG9mIHRoZSBtYXRjaGVkIFdlaWdodGVkUG9kQWZmaW5pdHlUZXJtIGZpZWxkcyBhcmUgYWRkZWQgcGVyLW5vZGUgdG8gZmluZCB0aGUgbW9zdCBwcmVmZXJyZWQgbm9kZShzKSIsInByb3BlcnRpZXMiOnsicG9kQWZmaW5pdHlUZXJtIjp7ImRlc2NyaXB0aW9uIjoiUmVxdWlyZWQuIEEgcG9kIGFmZmluaXR5IHRlcm0sIGFzc29jaWF0ZWQgd2l0aCB0aGUgY29ycmVzcG9uZGluZyB3ZWlnaHQuIiwicHJvcGVydGllcyI6eyJsYWJlbFNlbGVjdG9yIjp7ImRlc2NyaXB0aW9uIjoiQSBsYWJlbCBxdWVyeSBvdmVyIGEgc2V0IG9mIHJlc291cmNlcywgaW4gdGhpcyBjYXNlIHBvZHMuIElmIGl0J3MgbnVsbCwgdGhpcyBQb2RBZmZpbml0eVRlcm0gbWF0Y2hlcyB3aXRoIG5vIFBvZHMuIiwicHJvcGVydGllcyI6eyJtYXRjaEV4cHJlc3Npb25zIjp7ImRlc2NyaXB0aW9uIjoibWF0Y2hFeHByZXNzaW9ucyBpcyBhIGxpc3Qgb2YgbGFiZWwgc2VsZWN0b3IgcmVxdWlyZW1lbnRzLiBUaGUgcmVxdWlyZW1lbnRzIGFyZSBBTkRlZC4iLCJpdGVtcyI6eyJkZXNjcmlwdGlvbiI6IkEgbGFiZWwgc2VsZWN0b3IgcmVxdWlyZW1lbnQgaXMgYSBzZWxlY3RvciB0aGF0IGNvbnRhaW5zIHZhbHVlcywgYSBrZXksIGFuZCBhbiBvcGVyYXRvciB0aGF0IHJlbGF0ZXMgdGhlIGtleSBhbmQgdmFsdWVzLiIsInByb3BlcnRpZXMiOnsia2V5Ijp7ImRlc2NyaXB0aW9uIjoia2V5IGlzIHRoZSBsYWJlbCBrZXkgdGhhdCB0aGUgc2VsZWN0b3IgYXBwbGllcyB0by4iLCJ0eXBlIjoic3RyaW5nIn0sIm9wZXJhdG9yIjp7ImRlc2NyaXB0aW9uIjoib3BlcmF0b3IgcmVwcmVzZW50cyBhIGtleSdzIHJlbGF0aW9uc2hpcCB0byBhIHNldCBvZiB2YWx1ZXMuIFZhbGlkIG9wZXJhdG9ycyBhcmUgSW4sIE5vdEluLCBFeGlzdHMgYW5kIERvZXNOb3RFeGlzdC4iLCJ0eXBlIjoic3RyaW5nIn0sInZhbHVlcyI6eyJkZXNjcmlwdGlvbiI6InZhbHVlcyBpcyBhbiBhcnJheSBvZiBzdHJpbmcgdmFsdWVzLiBJZiB0aGUgb3BlcmF0b3IgaXMgSW4gb3IgTm90SW4sIHRoZSB2YWx1ZXMgYXJyYXkgbXVzdCBiZSBub24tZW1wdHkuIElmIHRoZSBvcGVyYXRvciBpcyBFeGlzdHMgb3IgRG9lc05vdEV4aXN0LCB0aGUgdmFsdWVzIGFycmF5IG11c3QgYmUgZW1wdHkuIFRoaXMgYXJyYXkgaXMgcmVwbGFjZWQgZHVyaW5nIGEgc3RyYXRlZ2ljIG1lcmdlIHBhdGNoLiIsIml0ZW1zIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6ImFycmF5In19LCJyZXF1aXJlZCI6WyJrZXkiLCJvcGVyYXRvciJdLCJ0eXBlIjoib2JqZWN0In0sInR5cGUiOiJhcnJheSJ9LCJtYXRjaExhYmVscyI6eyJhZGRpdGlvbmFsUHJvcGVydGllcyI6eyJ0eXBlIjoic3RyaW5nIn0sImRlc2NyaXB0aW9uIjoibWF0Y2hMYWJlbHMgaXMgYSBtYXAgb2Yge2tleSx2YWx1ZX0gcGFpcnMuIEEgc2luZ2xlIHtrZXksdmFsdWV9IGluIHRoZSBtYXRjaExhYmVscyBtYXAgaXMgZXF1aXZhbGVudCB0byBhbiBlbGVtZW50IG9mIG1hdGNoRXhwcmVzc2lvbnMsIHdob3NlIGtleSBmaWVsZCBpcyBcImtleVwiLCB0aGUgb3BlcmF0b3IgaXMgXCJJblwiLCBhbmQgdGhlIHZhbHVlcyBhcnJheSBjb250YWlucyBvbmx5IFwidmFsdWVcIi4gVGhlIHJlcXVpcmVtZW50cyBhcmUgQU5EZWQuIiwidHlwZSI6Im9iamVjdCJ9fSwidHlwZSI6Im9iamVjdCIsIngta3ViZXJuZXRlcy1tYXAtdHlwZSI6ImF0b21pYyJ9LCJtYXRjaExhYmVsS2V5cyI6eyJkZXNjcmlwdGlvbiI6Ik1hdGNoTGFiZWxLZXlzIGlzIGEgc2V0IG9mIHBvZCBsYWJlbCBrZXlzIHRvIHNlbGVjdCB3aGljaCBwb2RzIHdpbGwgYmUgdGFrZW4gaW50byBjb25zaWRlcmF0aW9uLiBUaGUga2V5cyBhcmUgdXNlZCB0byBsb29rdXAgdmFsdWVzIGZyb20gdGhlIGluY29taW5nIHBvZCBsYWJlbHMsIHRob3NlIGtleS12YWx1ZSBsYWJlbHMgYXJlIG1lcmdlZCB3aXRoIGBMYWJlbFNlbGVjdG9yYCBhcyBga2V5IGluICh2YWx1ZSlgIHRvIHNlbGVjdCB0aGUgZ3JvdXAgb2YgZXhpc3RpbmcgcG9kcyB3aGljaCBwb2RzIHdpbGwgYmUgdGFrZW4gaW50byBjb25zaWRlcmF0aW9uIGZvciB0aGUgaW5jb21pbmcgcG9kJ3MgcG9kIChhbnRpKSBhZmZpbml0eS4gS2V5cyB0aGF0IGRvbid0IGV4aXN0IGluIHRoZSBpbmNvbWluZyBwb2QgbGFiZWxzIHdpbGwgYmUgaWdub3JlZC4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgZW1wdHkuIFRoZSBzYW1lIGtleSBpcyBmb3JiaWRkZW4gdG8gZXhpc3QgaW4gYm90aCBNYXRjaExhYmVsS2V5cyBhbmQgTGFiZWxTZWxlY3Rvci4gQWxzbywgTWF0Y2hMYWJlbEtleXMgY2Fubm90IGJlIHNldCB3aGVuIExhYmVsU2VsZWN0b3IgaXNuJ3Qgc2V0LiBUaGlzIGlzIGFuIGFscGhhIGZpZWxkIGFuZCByZXF1aXJlcyBlbmFibGluZyBNYXRjaExhYmVsS2V5c0luUG9kQWZmaW5pdHkgZmVhdHVyZSBnYXRlLiIsIml0ZW1zIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6ImFycmF5IiwieC1rdWJlcm5ldGVzLWxpc3QtdHlwZSI6ImF0b21pYyJ9LCJtaXNtYXRjaExhYmVsS2V5cyI6eyJkZXNjcmlwdGlvbiI6Ik1pc21hdGNoTGFiZWxLZXlzIGlzIGEgc2V0IG9mIHBvZCBsYWJlbCBrZXlzIHRvIHNlbGVjdCB3aGljaCBwb2RzIHdpbGwgYmUgdGFrZW4gaW50byBjb25zaWRlcmF0aW9uLiBUaGUga2V5cyBhcmUgdXNlZCB0byBsb29rdXAgdmFsdWVzIGZyb20gdGhlIGluY29taW5nIHBvZCBsYWJlbHMsIHRob3NlIGtleS12YWx1ZSBsYWJlbHMgYXJlIG1lcmdlZCB3aXRoIGBMYWJlbFNlbGVjdG9yYCBhcyBga2V5IG5vdGluICh2YWx1ZSlgIHRvIHNlbGVjdCB0aGUgZ3JvdXAgb2YgZXhpc3RpbmcgcG9kcyB3aGljaCBwb2RzIHdpbGwgYmUgdGFrZW4gaW50byBjb25zaWRlcmF0aW9uIGZvciB0aGUgaW5jb21pbmcgcG9kJ3MgcG9kIChhbnRpKSBhZmZpbml0eS4gS2V5cyB0aGF0IGRvbid0IGV4aXN0IGluIHRoZSBpbmNvbWluZyBwb2QgbGFiZWxzIHdpbGwgYmUgaWdub3JlZC4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgZW1wdHkuIFRoZSBzYW1lIGtleSBpcyBmb3JiaWRkZW4gdG8gZXhpc3QgaW4gYm90aCBNaXNtYXRjaExhYmVsS2V5cyBhbmQgTGFiZWxTZWxlY3Rvci4gQWxzbywgTWlzbWF0Y2hMYWJlbEtleXMgY2Fubm90IGJlIHNldCB3aGVuIExhYmVsU2VsZWN0b3IgaXNuJ3Qgc2V0LiBUaGlzIGlzIGFuIGFscGhhIGZpZWxkIGFuZCByZXF1aXJlcyBlbmFibGluZyBNYXRjaExhYmVsS2V5c0luUG9kQWZmaW5pdHkgZmVhdHVyZSBnYXRlLiIsIml0ZW1zIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6ImFycmF5IiwieC1rdWJlcm5ldGVzLWxpc3QtdHlwZSI6ImF0b21pYyJ9LCJuYW1lc3BhY2VTZWxlY3RvciI6eyJkZXNjcmlwdGlvbiI6IkEgbGFiZWwgcXVlcnkgb3ZlciB0aGUgc2V0IG9mIG5hbWVzcGFjZXMgdGhhdCB0aGUgdGVybSBhcHBsaWVzIHRvLiBUaGUgdGVybSBpcyBhcHBsaWVkIHRvIHRoZSB1bmlvbiBvZiB0aGUgbmFtZXNwYWNlcyBzZWxlY3RlZCBieSB0aGlzIGZpZWxkIGFuZCB0aGUgb25lcyBsaXN0ZWQgaW4gdGhlIG5hbWVzcGFjZXMgZmllbGQuIG51bGwgc2VsZWN0b3IgYW5kIG51bGwgb3IgZW1wdHkgbmFtZXNwYWNlcyBsaXN0IG1lYW5zIFwidGhpcyBwb2QncyBuYW1lc3BhY2VcIi4gQW4gZW1wdHkgc2VsZWN0b3IgKHt9KSBtYXRjaGVzIGFsbCBuYW1lc3BhY2VzLiIsInByb3BlcnRpZXMiOnsibWF0Y2hFeHByZXNzaW9ucyI6eyJkZXNjcmlwdGlvbiI6Im1hdGNoRXhwcmVzc2lvbnMgaXMgYSBsaXN0IG9mIGxhYmVsIHNlbGVjdG9yIHJlcXVpcmVtZW50cy4gVGhlIHJlcXVpcmVtZW50cyBhcmUgQU5EZWQuIiwiaXRlbXMiOnsiZGVzY3JpcHRpb24iOiJBIGxhYmVsIHNlbGVjdG9yIHJlcXVpcmVtZW50IGlzIGEgc2VsZWN0b3IgdGhhdCBjb250YWlucyB2YWx1ZXMsIGEga2V5LCBhbmQgYW4gb3BlcmF0b3IgdGhhdCByZWxhdGVzIHRoZSBrZXkgYW5kIHZhbHVlcy4iLCJwcm9wZXJ0aWVzIjp7ImtleSI6eyJkZXNjcmlwdGlvbiI6ImtleSBpcyB0aGUgbGFiZWwga2V5IHRoYXQgdGhlIHNlbGVjdG9yIGFwcGxpZXMgdG8uIiwidHlwZSI6InN0cmluZyJ9LCJvcGVyYXRvciI6eyJkZXNjcmlwdGlvbiI6Im9wZXJhdG9yIHJlcHJlc2VudHMgYSBrZXkncyByZWxhdGlvbnNoaXAgdG8gYSBzZXQgb2YgdmFsdWVzLiBWYWxpZCBvcGVyYXRvcnMgYXJlIEluLCBOb3RJbiwgRXhpc3RzIGFuZCBEb2VzTm90RXhpc3QuIiwidHlwZSI6InN0cmluZyJ9LCJ2YWx1ZXMiOnsiZGVzY3JpcHRpb24iOiJ2YWx1ZXMgaXMgYW4gYXJyYXkgb2Ygc3RyaW5nIHZhbHVlcy4gSWYgdGhlIG9wZXJhdG9yIGlzIEluIG9yIE5vdEluLCB0aGUgdmFsdWVzIGFycmF5IG11c3QgYmUgbm9uLWVtcHR5LiBJZiB0aGUgb3BlcmF0b3IgaXMgRXhpc3RzIG9yIERvZXNOb3RFeGlzdCwgdGhlIHZhbHVlcyBhcnJheSBtdXN0IGJlIGVtcHR5LiBUaGlzIGFycmF5IGlzIHJlcGxhY2VkIGR1cmluZyBhIHN0cmF0ZWdpYyBtZXJnZSBwYXRjaC4iLCJpdGVtcyI6eyJ0eXBlIjoic3RyaW5nIn0sInR5cGUiOiJhcnJheSJ9fSwicmVxdWlyZWQiOlsia2V5Iiwib3BlcmF0b3IiXSwidHlwZSI6Im9iamVjdCJ9LCJ0eXBlIjoiYXJyYXkifSwibWF0Y2hMYWJlbHMiOnsiYWRkaXRpb25hbFByb3BlcnRpZXMiOnsidHlwZSI6InN0cmluZyJ9LCJkZXNjcmlwdGlvbiI6Im1hdGNoTGFiZWxzIGlzIGEgbWFwIG9mIHtrZXksdmFsdWV9IHBhaXJzLiBBIHNpbmdsZSB7a2V5LHZhbHVlfSBpbiB0aGUgbWF0Y2hMYWJlbHMgbWFwIGlzIGVxdWl2YWxlbnQgdG8gYW4gZWxlbWVudCBvZiBtYXRjaEV4cHJlc3Npb25zLCB3aG9zZSBrZXkgZmllbGQgaXMgXCJrZXlcIiwgdGhlIG9wZXJhdG9yIGlzIFwiSW5cIiwgYW5kIHRoZSB2YWx1ZXMgYXJyYXkgY29udGFpbnMgb25seSBcInZhbHVlXCIuIFRoZSByZXF1aXJlbWVudHMgYXJlIEFORGVkLiIsInR5cGUiOiJvYmplY3QifX0sInR5cGUiOiJvYmplY3QiLCJ4LWt1YmVybmV0ZXMtbWFwLXR5cGUiOiJhdG9taWMifSwibmFtZXNwYWNlcyI6eyJkZXNjcmlwdGlvbiI6Im5hbWVzcGFjZXMgc3BlY2lmaWVzIGEgc3RhdGljIGxpc3Qgb2YgbmFtZXNwYWNlIG5hbWVzIHRoYXQgdGhlIHRlcm0gYXBwbGllcyB0by4gVGhlIHRlcm0gaXMgYXBwbGllZCB0byB0aGUgdW5pb24gb2YgdGhlIG5hbWVzcGFjZXMgbGlzdGVkIGluIHRoaXMgZmllbGQgYW5kIHRoZSBvbmVzIHNlbGVjdGVkIGJ5IG5hbWVzcGFjZVNlbGVjdG9yLiBudWxsIG9yIGVtcHR5IG5hbWVzcGFjZXMgbGlzdCBhbmQgbnVsbCBuYW1lc3BhY2VTZWxlY3RvciBtZWFucyBcInRoaXMgcG9kJ3MgbmFtZXNwYWNlXCIuIiwiaXRlbXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjoiYXJyYXkifSwidG9wb2xvZ3lLZXkiOnsiZGVzY3JpcHRpb24iOiJUaGlzIHBvZCBzaG91bGQgYmUgY28tbG9jYXRlZCAoYWZmaW5pdHkpIG9yIG5vdCBjby1sb2NhdGVkIChhbnRpLWFmZmluaXR5KSB3aXRoIHRoZSBwb2RzIG1hdGNoaW5nIHRoZSBsYWJlbFNlbGVjdG9yIGluIHRoZSBzcGVjaWZpZWQgbmFtZXNwYWNlcywgd2hlcmUgY28tbG9jYXRlZCBpcyBkZWZpbmVkIGFzIHJ1bm5pbmcgb24gYSBub2RlIHdob3NlIHZhbHVlIG9mIHRoZSBsYWJlbCB3aXRoIGtleSB0b3BvbG9neUtleSBtYXRjaGVzIHRoYXQgb2YgYW55IG5vZGUgb24gd2hpY2ggYW55IG9mIHRoZSBzZWxlY3RlZCBwb2RzIGlzIHJ1bm5pbmcuIEVtcHR5IHRvcG9sb2d5S2V5IGlzIG5vdCBhbGxvd2VkLiIsInR5cGUiOiJzdHJpbmcifX0sInJlcXVpcmVkIjpbInRvcG9sb2d5S2V5Il0sInR5cGUiOiJvYmplY3QifSwid2VpZ2h0Ijp7ImRlc2NyaXB0aW9uIjoid2VpZ2h0IGFzc29jaWF0ZWQgd2l0aCBtYXRjaGluZyB0aGUgY29ycmVzcG9uZGluZyBwb2RBZmZpbml0eVRlcm0sIGluIHRoZSByYW5nZSAxLTEwMC4iLCJmb3JtYXQiOiJpbnQzMiIsInR5cGUiOiJpbnRlZ2VyIn19LCJyZXF1aXJlZCI6WyJwb2RBZmZpbml0eVRlcm0iLCJ3ZWlnaHQiXSwidHlwZSI6Im9iamVjdCJ9LCJ0eXBlIjoiYXJyYXkifSwicmVxdWlyZWREdXJpbmdTY2hlZHVsaW5nSWdub3JlZER1cmluZ0V4ZWN1dGlvbiI6eyJkZXNjcmlwdGlvbiI6IklmIHRoZSBhZmZpbml0eSByZXF1aXJlbWVudHMgc3BlY2lmaWVkIGJ5IHRoaXMgZmllbGQgYXJlIG5vdCBtZXQgYXQgc2NoZWR1bGluZyB0aW1lLCB0aGUgcG9kIHdpbGwgbm90IGJlIHNjaGVkdWxlZCBvbnRvIHRoZSBub2RlLiBJZiB0aGUgYWZmaW5pdHkgcmVxdWlyZW1lbnRzIHNwZWNpZmllZCBieSB0aGlzIGZpZWxkIGNlYXNlIHRvIGJlIG1ldCBhdCBzb21lIHBvaW50IGR1cmluZyBwb2QgZXhlY3V0aW9uIChlLmcuIGR1ZSB0byBhIHBvZCBsYWJlbCB1cGRhdGUpLCB0aGUgc3lzdGVtIG1heSBvciBtYXkgbm90IHRyeSB0byBldmVudHVhbGx5IGV2aWN0IHRoZSBwb2QgZnJvbSBpdHMgbm9kZS4gV2hlbiB0aGVyZSBhcmUgbXVsdGlwbGUgZWxlbWVudHMsIHRoZSBsaXN0cyBvZiBub2RlcyBjb3JyZXNwb25kaW5nIHRvIGVhY2ggcG9kQWZmaW5pdHlUZXJtIGFyZSBpbnRlcnNlY3RlZCwgaS5lLiBhbGwgdGVybXMgbXVzdCBiZSBzYXRpc2ZpZWQuIiwiaXRlbXMiOnsiZGVzY3JpcHRpb24iOiJEZWZpbmVzIGEgc2V0IG9mIHBvZHMgKG5hbWVseSB0aG9zZSBtYXRjaGluZyB0aGUgbGFiZWxTZWxlY3RvciByZWxhdGl2ZSB0byB0aGUgZ2l2ZW4gbmFtZXNwYWNlKHMpKSB0aGF0IHRoaXMgcG9kIHNob3VsZCBiZSBjby1sb2NhdGVkIChhZmZpbml0eSkgb3Igbm90IGNvLWxvY2F0ZWQgKGFudGktYWZmaW5pdHkpIHdpdGgsIHdoZXJlIGNvLWxvY2F0ZWQgaXMgZGVmaW5lZCBhcyBydW5uaW5nIG9uIGEgbm9kZSB3aG9zZSB2YWx1ZSBvZiB0aGUgbGFiZWwgd2l0aCBrZXkgXHUwMDNjdG9wb2xvZ3lLZXlcdTAwM2UgbWF0Y2hlcyB0aGF0IG9mIGFueSBub2RlIG9uIHdoaWNoIGEgcG9kIG9mIHRoZSBzZXQgb2YgcG9kcyBpcyBydW5uaW5nIiwicHJvcGVydGllcyI6eyJsYWJlbFNlbGVjdG9yIjp7ImRlc2NyaXB0aW9uIjoiQSBsYWJlbCBxdWVyeSBvdmVyIGEgc2V0IG9mIHJlc291cmNlcywgaW4gdGhpcyBjYXNlIHBvZHMuIElmIGl0J3MgbnVsbCwgdGhpcyBQb2RBZmZpbml0eVRlcm0gbWF0Y2hlcyB3aXRoIG5vIFBvZHMuIiwicHJvcGVydGllcyI6eyJtYXRjaEV4cHJlc3Npb25zIjp7ImRlc2NyaXB0aW9uIjoibWF0Y2hFeHByZXNzaW9ucyBpcyBhIGxpc3Qgb2YgbGFiZWwgc2VsZWN0b3IgcmVxdWlyZW1lbnRzLiBUaGUgcmVxdWlyZW1lbnRzIGFyZSBBTkRlZC4iLCJpdGVtcyI6eyJkZXNjcmlwdGlvbiI6IkEgbGFiZWwgc2VsZWN0b3IgcmVxdWlyZW1lbnQgaXMgYSBzZWxlY3RvciB0aGF0IGNvbnRhaW5zIHZhbHVlcywgYSBrZXksIGFuZCBhbiBvcGVyYXRvciB0aGF0IHJlbGF0ZXMgdGhlIGtleSBhbmQgdmFsdWVzLiIsInByb3BlcnRpZXMiOnsia2V5Ijp7ImRlc2NyaXB0aW9uIjoia2V5IGlzIHRoZSBsYWJlbCBrZXkgdGhhdCB0aGUgc2VsZWN0b3IgYXBwbGllcyB0by4iLCJ0eXBlIjoic3RyaW5nIn0sIm9wZXJhdG9yIjp7ImRlc2NyaXB0aW9uIjoib3BlcmF0b3IgcmVwcmVzZW50cyBhIGtleSdzIHJlbGF0aW9uc2hpcCB0byBhIHNldCBvZiB2YWx1ZXMuIFZhbGlkIG9wZXJhdG9ycyBhcmUgSW4sIE5vdEluLCBFeGlzdHMgYW5kIERvZXNOb3RFeGlzdC4iLCJ0eXBlIjoic3RyaW5nIn0sInZhbHVlcyI6eyJkZXNjcmlwdGlvbiI6InZhbHVlcyBpcyBhbiBhcnJheSBvZiBzdHJpbmcgdmFsdWVzLiBJZiB0aGUgb3BlcmF0b3IgaXMgSW4gb3IgTm90SW4sIHRoZSB2YWx1ZXMgYXJyYXkgbXVzdCBiZSBub24tZW1wdHkuIElmIHRoZSBvcGVyYXRvciBpcyBFeGlzdHMgb3IgRG9lc05vdEV4aXN0LCB0aGUgdmFsdWVzIGFycmF5IG11c3QgYmUgZW1wdHkuIFRoaXMgYXJyYXkgaXMgcmVwbGFjZWQgZHVyaW5nIGEgc3RyYXRlZ2ljIG1lcmdlIHBhdGNoLiIsIml0ZW1zIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6ImFycmF5In19LCJyZXF1aXJlZCI6WyJrZXkiLCJvcGVyYXRvciJdLCJ0eXBlIjoib2JqZWN0In0sInR5cGUiOiJhcnJheSJ9LCJtYXRjaExhYmVscyI6eyJhZGRpdGlvbmFsUHJvcGVydGllcyI6eyJ0eXBlIjoic3RyaW5nIn0sImRlc2NyaXB0aW9uIjoibWF0Y2hMYWJlbHMgaXMgYSBtYXAgb2Yge2tleSx2YWx1ZX0gcGFpcnMuIEEgc2luZ2xlIHtrZXksdmFsdWV9IGluIHRoZSBtYXRjaExhYmVscyBtYXAgaXMgZXF1aXZhbGVudCB0byBhbiBlbGVtZW50IG9mIG1hdGNoRXhwcmVzc2lvbnMsIHdob3NlIGtleSBmaWVsZCBpcyBcImtleVwiLCB0aGUgb3BlcmF0b3IgaXMgXCJJblwiLCBhbmQgdGhlIHZhbHVlcyBhcnJheSBjb250YWlucyBvbmx5IFwidmFsdWVcIi4gVGhlIHJlcXVpcmVtZW50cyBhcmUgQU5EZWQuIiwidHlwZSI6Im9iamVjdCJ9fSwidHlwZSI6Im9iamVjdCIsIngta3ViZXJuZXRlcy1tYXAtdHlwZSI6ImF0b21pYyJ9LCJtYXRjaExhYmVsS2V5cyI6eyJkZXNjcmlwdGlvbiI6Ik1hdGNoTGFiZWxLZXlzIGlzIGEgc2V0IG9mIHBvZCBsYWJlbCBrZXlzIHRvIHNlbGVjdCB3aGljaCBwb2RzIHdpbGwgYmUgdGFrZW4gaW50byBjb25zaWRlcmF0aW9uLiBUaGUga2V5cyBhcmUgdXNlZCB0byBsb29rdXAgdmFsdWVzIGZyb20gdGhlIGluY29taW5nIHBvZCBsYWJlbHMsIHRob3NlIGtleS12YWx1ZSBsYWJlbHMgYXJlIG1lcmdlZCB3aXRoIGBMYWJlbFNlbGVjdG9yYCBhcyBga2V5IGluICh2YWx1ZSlgIHRvIHNlbGVjdCB0aGUgZ3JvdXAgb2YgZXhpc3RpbmcgcG9kcyB3aGljaCBwb2RzIHdpbGwgYmUgdGFrZW4gaW50byBjb25zaWRlcmF0aW9uIGZvciB0aGUgaW5jb21pbmcgcG9kJ3MgcG9kIChhbnRpKSBhZmZpbml0eS4gS2V5cyB0aGF0IGRvbid0IGV4aXN0IGluIHRoZSBpbmNvbWluZyBwb2QgbGFiZWxzIHdpbGwgYmUgaWdub3JlZC4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgZW1wdHkuIFRoZSBzYW1lIGtleSBpcyBmb3JiaWRkZW4gdG8gZXhpc3QgaW4gYm90aCBNYXRjaExhYmVsS2V5cyBhbmQgTGFiZWxTZWxlY3Rvci4gQWxzbywgTWF0Y2hMYWJlbEtleXMgY2Fubm90IGJlIHNldCB3aGVuIExhYmVsU2VsZWN0b3IgaXNuJ3Qgc2V0LiBUaGlzIGlzIGFuIGFscGhhIGZpZWxkIGFuZCByZXF1aXJlcyBlbmFibGluZyBNYXRjaExhYmVsS2V5c0luUG9kQWZmaW5pdHkgZmVhdHVyZSBnYXRlLiIsIml0ZW1zIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6ImFycmF5IiwieC1rdWJlcm5ldGVzLWxpc3QtdHlwZSI6ImF0b21pYyJ9LCJtaXNtYXRjaExhYmVsS2V5cyI6eyJkZXNjcmlwdGlvbiI6Ik1pc21hdGNoTGFiZWxLZXlzIGlzIGEgc2V0IG9mIHBvZCBsYWJlbCBrZXlzIHRvIHNlbGVjdCB3aGljaCBwb2RzIHdpbGwgYmUgdGFrZW4gaW50byBjb25zaWRlcmF0aW9uLiBUaGUga2V5cyBhcmUgdXNlZCB0byBsb29rdXAgdmFsdWVzIGZyb20gdGhlIGluY29taW5nIHBvZCBsYWJlbHMsIHRob3NlIGtleS12YWx1ZSBsYWJlbHMgYXJlIG1lcmdlZCB3aXRoIGBMYWJlbFNlbGVjdG9yYCBhcyBga2V5IG5vdGluICh2YWx1ZSlgIHRvIHNlbGVjdCB0aGUgZ3JvdXAgb2YgZXhpc3RpbmcgcG9kcyB3aGljaCBwb2RzIHdpbGwgYmUgdGFrZW4gaW50byBjb25zaWRlcmF0aW9uIGZvciB0aGUgaW5jb21pbmcgcG9kJ3MgcG9kIChhbnRpKSBhZmZpbml0eS4gS2V5cyB0aGF0IGRvbid0IGV4aXN0IGluIHRoZSBpbmNvbWluZyBwb2QgbGFiZWxzIHdpbGwgYmUgaWdub3JlZC4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgZW1wdHkuIFRoZSBzYW1lIGtleSBpcyBmb3JiaWRkZW4gdG8gZXhpc3QgaW4gYm90aCBNaXNtYXRjaExhYmVsS2V5cyBhbmQgTGFiZWxTZWxlY3Rvci4gQWxzbywgTWlzbWF0Y2hMYWJlbEtleXMgY2Fubm90IGJlIHNldCB3aGVuIExhYmVsU2VsZWN0b3IgaXNuJ3Qgc2V0LiBUaGlzIGlzIGFuIGFscGhhIGZpZWxkIGFuZCByZXF1aXJlcyBlbmFibGluZyBNYXRjaExhYmVsS2V5c0luUG9kQWZmaW5pdHkgZmVhdHVyZSBnYXRlLiIsIml0ZW1zIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6ImFycmF5IiwieC1rdWJlcm5ldGVzLWxpc3QtdHlwZSI6ImF0b21pYyJ9LCJuYW1lc3BhY2VTZWxlY3RvciI6eyJkZXNjcmlwdGlvbiI6IkEgbGFiZWwgcXVlcnkgb3ZlciB0aGUgc2V0IG9mIG5hbWVzcGFjZXMgdGhhdCB0aGUgdGVybSBhcHBsaWVzIHRvLiBUaGUgdGVybSBpcyBhcHBsaWVkIHRvIHRoZSB1bmlvbiBvZiB0aGUgbmFtZXNwYWNlcyBzZWxlY3RlZCBieSB0aGlzIGZpZWxkIGFuZCB0aGUgb25lcyBsaXN0ZWQgaW4gdGhlIG5hbWVzcGFjZXMgZmllbGQuIG51bGwgc2VsZWN0b3IgYW5kIG51bGwgb3IgZW1wdHkgbmFtZXNwYWNlcyBsaXN0IG1lYW5zIFwidGhpcyBwb2QncyBuYW1lc3BhY2VcIi4gQW4gZW1wdHkgc2VsZWN0b3IgKHt9KSBtYXRjaGVzIGFsbCBuYW1lc3BhY2VzLiIsInByb3BlcnRpZXMiOnsibWF0Y2hFeHByZXNzaW9ucyI6eyJkZXNjcmlwdGlvbiI6Im1hdGNoRXhwcmVzc2lvbnMgaXMgYSBsaXN0IG9mIGxhYmVsIHNlbGVjdG9yIHJlcXVpcmVtZW50cy4gVGhlIHJlcXVpcmVtZW50cyBhcmUgQU5EZWQuIiwiaXRlbXMiOnsiZGVzY3JpcHRpb24iOiJBIGxhYmVsIHNlbGVjdG9yIHJlcXVpcmVtZW50IGlzIGEgc2VsZWN0b3IgdGhhdCBjb250YWlucyB2YWx1ZXMsIGEga2V5LCBhbmQgYW4gb3BlcmF0b3IgdGhhdCByZWxhdGVzIHRoZSBrZXkgYW5kIHZhbHVlcy4iLCJwcm9wZXJ0aWVzIjp7ImtleSI6eyJkZXNjcmlwdGlvbiI6ImtleSBpcyB0aGUgbGFiZWwga2V5IHRoYXQgdGhlIHNlbGVjdG9yIGFwcGxpZXMgdG8uIiwidHlwZSI6InN0cmluZyJ9LCJvcGVyYXRvciI6eyJkZXNjcmlwdGlvbiI6Im9wZXJhdG9yIHJlcHJlc2VudHMgYSBrZXkncyByZWxhdGlvbnNoaXAgdG8gYSBzZXQgb2YgdmFsdWVzLiBWYWxpZCBvcGVyYXRvcnMgYXJlIEluLCBOb3RJbiwgRXhpc3RzIGFuZCBEb2VzTm90RXhpc3QuIiwidHlwZSI6InN0cmluZyJ9LCJ2YWx1ZXMiOnsiZGVzY3JpcHRpb24iOiJ2YWx1ZXMgaXMgYW4gYXJyYXkgb2Ygc3RyaW5nIHZhbHVlcy4gSWYgdGhlIG9wZXJhdG9yIGlzIEluIG9yIE5vdEluLCB0aGUgdmFsdWVzIGFycmF5IG11c3QgYmUgbm9uLWVtcHR5LiBJZiB0aGUgb3BlcmF0b3IgaXMgRXhpc3RzIG9yIERvZXNOb3RFeGlzdCwgdGhlIHZhbHVlcyBhcnJheSBtdXN0IGJlIGVtcHR5LiBUaGlzIGFycmF5IGlzIHJlcGxhY2VkIGR1cmluZyBhIHN0cmF0ZWdpYyBtZXJnZSBwYXRjaC4iLCJpdGVtcyI6eyJ0eXBlIjoic3RyaW5nIn0sInR5cGUiOiJhcnJheSJ9fSwicmVxdWlyZWQiOlsia2V5Iiwib3BlcmF0b3IiXSwidHlwZSI6Im9iamVjdCJ9LCJ0eXBlIjoiYXJyYXkifSwibWF0Y2hMYWJlbHMiOnsiYWRkaXRpb25hbFByb3BlcnRpZXMiOnsidHlwZSI6InN0cmluZyJ9LCJkZXNjcmlwdGlvbiI6Im1hdGNoTGFiZWxzIGlzIGEgbWFwIG9mIHtrZXksdmFsdWV9IHBhaXJzLiBBIHNpbmdsZSB7a2V5LHZhbHVlfSBpbiB0aGUgbWF0Y2hMYWJlbHMgbWFwIGlzIGVxdWl2YWxlbnQgdG8gYW4gZWxlbWVudCBvZiBtYXRjaEV4cHJlc3Npb25zLCB3aG9zZSBrZXkgZmllbGQgaXMgXCJrZXlcIiwgdGhlIG9wZXJhdG9yIGlzIFwiSW5cIiwgYW5kIHRoZSB2YWx1ZXMgYXJyYXkgY29udGFpbnMgb25seSBcInZhbHVlXCIuIFRoZSByZXF1aXJlbWVudHMgYXJlIEFORGVkLiIsInR5cGUiOiJvYmplY3QifX0sInR5cGUiOiJvYmplY3QiLCJ4LWt1YmVybmV0ZXMtbWFwLXR5cGUiOiJhdG9taWMifSwibmFtZXNwYWNlcyI6eyJkZXNjcmlwdGlvbiI6Im5hbWVzcGFjZXMgc3BlY2lmaWVzIGEgc3RhdGljIGxpc3Qgb2YgbmFtZXNwYWNlIG5hbWVzIHRoYXQgdGhlIHRlcm0gYXBwbGllcyB0by4gVGhlIHRlcm0gaXMgYXBwbGllZCB0byB0aGUgdW5pb24gb2YgdGhlIG5hbWVzcGFjZXMgbGlzdGVkIGluIHRoaXMgZmllbGQgYW5kIHRoZSBvbmVzIHNlbGVjdGVkIGJ5IG5hbWVzcGFjZVNlbGVjdG9yLiBudWxsIG9yIGVtcHR5IG5hbWVzcGFjZXMgbGlzdCBhbmQgbnVsbCBuYW1lc3BhY2VTZWxlY3RvciBtZWFucyBcInRoaXMgcG9kJ3MgbmFtZXNwYWNlXCIuIiwiaXRlbXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjoiYXJyYXkifSwidG9wb2xvZ3lLZXkiOnsiZGVzY3JpcHRpb24iOiJUaGlzIHBvZCBzaG91bGQgYmUgY28tbG9jYXRlZCAoYWZmaW5pdHkpIG9yIG5vdCBjby1sb2NhdGVkIChhbnRpLWFmZmluaXR5KSB3aXRoIHRoZSBwb2RzIG1hdGNoaW5nIHRoZSBsYWJlbFNlbGVjdG9yIGluIHRoZSBzcGVjaWZpZWQgbmFtZXNwYWNlcywgd2hlcmUgY28tbG9jYXRlZCBpcyBkZWZpbmVkIGFzIHJ1bm5pbmcgb24gYSBub2RlIHdob3NlIHZhbHVlIG9mIHRoZSBsYWJlbCB3aXRoIGtleSB0b3BvbG9neUtleSBtYXRjaGVzIHRoYXQgb2YgYW55IG5vZGUgb24gd2hpY2ggYW55IG9mIHRoZSBzZWxlY3RlZCBwb2RzIGlzIHJ1bm5pbmcuIEVtcHR5IHRvcG9sb2d5S2V5IGlzIG5vdCBhbGxvd2VkLiIsInR5cGUiOiJzdHJpbmcifX0sInJlcXVpcmVkIjpbInRvcG9sb2d5S2V5Il0sInR5cGUiOiJvYmplY3QifSwidHlwZSI6ImFycmF5In19LCJ0eXBlIjoib2JqZWN0In0sInBvZEFudGlBZmZpbml0eSI6eyJkZXNjcmlwdGlvbiI6IlBvZEFudGlBZmZpbml0eSBpcyBhIGdyb3VwIG9mIGludGVyIHBvZCBhbnRpIGFmZmluaXR5IHNjaGVkdWxpbmcgcnVsZXMiLCJwcm9wZXJ0aWVzIjp7InByZWZlcnJlZER1cmluZ1NjaGVkdWxpbmdJZ25vcmVkRHVyaW5nRXhlY3V0aW9uIjp7ImRlc2NyaXB0aW9uIjoiVGhlIHNjaGVkdWxlciB3aWxsIHByZWZlciB0byBzY2hlZHVsZSBwb2RzIHRvIG5vZGVzIHRoYXQgc2F0aXNmeSB0aGUgYW50aS1hZmZpbml0eSBleHByZXNzaW9ucyBzcGVjaWZpZWQgYnkgdGhpcyBmaWVsZCwgYnV0IGl0IG1heSBjaG9vc2UgYSBub2RlIHRoYXQgdmlvbGF0ZXMgb25lIG9yIG1vcmUgb2YgdGhlIGV4cHJlc3Npb25zLiBUaGUgbm9kZSB0aGF0IGlzIG1vc3QgcHJlZmVycmVkIGlzIHRoZSBvbmUgd2l0aCB0aGUgZ3JlYXRlc3Qgc3VtIG9mIHdlaWdodHMsIGkuZS4gZm9yIGVhY2ggbm9kZSB0aGF0IG1lZXRzIGFsbCBvZiB0aGUgc2NoZWR1bGluZyByZXF1aXJlbWVudHMgKHJlc291cmNlIHJlcXVlc3QsIHJlcXVpcmVkRHVyaW5nU2NoZWR1bGluZyBhbnRpLWFmZmluaXR5IGV4cHJlc3Npb25zLCBldGMuKSwgY29tcHV0ZSBhIHN1bSBieSBpdGVyYXRpbmcgdGhyb3VnaCB0aGUgZWxlbWVudHMgb2YgdGhpcyBmaWVsZCBhbmQgYWRkaW5nIFwid2VpZ2h0XCIgdG8gdGhlIHN1bSBpZiB0aGUgbm9kZSBoYXMgcG9kcyB3aGljaCBtYXRjaGVzIHRoZSBjb3JyZXNwb25kaW5nIHBvZEFmZmluaXR5VGVybTsgdGhlIG5vZGUocykgd2l0aCB0aGUgaGlnaGVzdCBzdW0gYXJlIHRoZSBtb3N0IHByZWZlcnJlZC4iLCJpdGVtcyI6eyJkZXNjcmlwdGlvbiI6IlRoZSB3ZWlnaHRzIG9mIGFsbCBvZiB0aGUgbWF0Y2hlZCBXZWlnaHRlZFBvZEFmZmluaXR5VGVybSBmaWVsZHMgYXJlIGFkZGVkIHBlci1ub2RlIHRvIGZpbmQgdGhlIG1vc3QgcHJlZmVycmVkIG5vZGUocykiLCJwcm9wZXJ0aWVzIjp7InBvZEFmZmluaXR5VGVybSI6eyJkZXNjcmlwdGlvbiI6IlJlcXVpcmVkLiBBIHBvZCBhZmZpbml0eSB0ZXJtLCBhc3NvY2lhdGVkIHdpdGggdGhlIGNvcnJlc3BvbmRpbmcgd2VpZ2h0LiIsInByb3BlcnRpZXMiOnsibGFiZWxTZWxlY3RvciI6eyJkZXNjcmlwdGlvbiI6IkEgbGFiZWwgcXVlcnkgb3ZlciBhIHNldCBvZiByZXNvdXJjZXMsIGluIHRoaXMgY2FzZSBwb2RzLiBJZiBpdCdzIG51bGwsIHRoaXMgUG9kQWZmaW5pdHlUZXJtIG1hdGNoZXMgd2l0aCBubyBQb2RzLiIsInByb3BlcnRpZXMiOnsibWF0Y2hFeHByZXNzaW9ucyI6eyJkZXNjcmlwdGlvbiI6Im1hdGNoRXhwcmVzc2lvbnMgaXMgYSBsaXN0IG9mIGxhYmVsIHNlbGVjdG9yIHJlcXVpcmVtZW50cy4gVGhlIHJlcXVpcmVtZW50cyBhcmUgQU5EZWQuIiwiaXRlbXMiOnsiZGVzY3JpcHRpb24iOiJBIGxhYmVsIHNlbGVjdG9yIHJlcXVpcmVtZW50IGlzIGEgc2VsZWN0b3IgdGhhdCBjb250YWlucyB2YWx1ZXMsIGEga2V5LCBhbmQgYW4gb3BlcmF0b3IgdGhhdCByZWxhdGVzIHRoZSBrZXkgYW5kIHZhbHVlcy4iLCJwcm9wZXJ0aWVzIjp7ImtleSI6eyJkZXNjcmlwdGlvbiI6ImtleSBpcyB0aGUgbGFiZWwga2V5IHRoYXQgdGhlIHNlbGVjdG9yIGFwcGxpZXMgdG8uIiwidHlwZSI6InN0cmluZyJ9LCJvcGVyYXRvciI6eyJkZXNjcmlwdGlvbiI6Im9wZXJhdG9yIHJlcHJlc2VudHMgYSBrZXkncyByZWxhdGlvbnNoaXAgdG8gYSBzZXQgb2YgdmFsdWVzLiBWYWxpZCBvcGVyYXRvcnMgYXJlIEluLCBOb3RJbiwgRXhpc3RzIGFuZCBEb2VzTm90RXhpc3QuIiwidHlwZSI6InN0cmluZyJ9LCJ2YWx1ZXMiOnsiZGVzY3JpcHRpb24iOiJ2YWx1ZXMgaXMgYW4gYXJyYXkgb2Ygc3RyaW5nIHZhbHVlcy4gSWYgdGhlIG9wZXJhdG9yIGlzIEluIG9yIE5vdEluLCB0aGUgdmFsdWVzIGFycmF5IG11c3QgYmUgbm9uLWVtcHR5LiBJZiB0aGUgb3BlcmF0b3IgaXMgRXhpc3RzIG9yIERvZXNOb3RFeGlzdCwgdGhlIHZhbHVlcyBhcnJheSBtdXN0IGJlIGVtcHR5LiBUaGlzIGFycmF5IGlzIHJlcGxhY2VkIGR1cmluZyBhIHN0cmF0ZWdpYyBtZXJnZSBwYXRjaC4iLCJpdGVtcyI6eyJ0eXBlIjoic3RyaW5nIn0sInR5cGUiOiJhcnJheSJ9fSwicmVxdWlyZWQiOlsia2V5Iiwib3BlcmF0b3IiXSwidHlwZSI6Im9iamVjdCJ9LCJ0eXBlIjoiYXJyYXkifSwibWF0Y2hMYWJlbHMiOnsiYWRkaXRpb25hbFByb3BlcnRpZXMiOnsidHlwZSI6InN0cmluZyJ9LCJkZXNjcmlwdGlvbiI6Im1hdGNoTGFiZWxzIGlzIGEgbWFwIG9mIHtrZXksdmFsdWV9IHBhaXJzLiBBIHNpbmdsZSB7a2V5LHZhbHVlfSBpbiB0aGUgbWF0Y2hMYWJlbHMgbWFwIGlzIGVxdWl2YWxlbnQgdG8gYW4gZWxlbWVudCBvZiBtYXRjaEV4cHJlc3Npb25zLCB3aG9zZSBrZXkgZmllbGQgaXMgXCJrZXlcIiwgdGhlIG9wZXJhdG9yIGlzIFwiSW5cIiwgYW5kIHRoZSB2YWx1ZXMgYXJyYXkgY29udGFpbnMgb25seSBcInZhbHVlXCIuIFRoZSByZXF1aXJlbWVudHMgYXJlIEFORGVkLiIsInR5cGUiOiJvYmplY3QifX0sInR5cGUiOiJvYmplY3QiLCJ4LWt1YmVybmV0ZXMtbWFwLXR5cGUiOiJhdG9taWMifSwibWF0Y2hMYWJlbEtleXMiOnsiZGVzY3JpcHRpb24iOiJNYXRjaExhYmVsS2V5cyBpcyBhIHNldCBvZiBwb2QgbGFiZWwga2V5cyB0byBzZWxlY3Qgd2hpY2ggcG9kcyB3aWxsIGJlIHRha2VuIGludG8gY29uc2lkZXJhdGlvbi4gVGhlIGtleXMgYXJlIHVzZWQgdG8gbG9va3VwIHZhbHVlcyBmcm9tIHRoZSBpbmNvbWluZyBwb2QgbGFiZWxzLCB0aG9zZSBrZXktdmFsdWUgbGFiZWxzIGFyZSBtZXJnZWQgd2l0aCBgTGFiZWxTZWxlY3RvcmAgYXMgYGtleSBpbiAodmFsdWUpYCB0byBzZWxlY3QgdGhlIGdyb3VwIG9mIGV4aXN0aW5nIHBvZHMgd2hpY2ggcG9kcyB3aWxsIGJlIHRha2VuIGludG8gY29uc2lkZXJhdGlvbiBmb3IgdGhlIGluY29taW5nIHBvZCdzIHBvZCAoYW50aSkgYWZmaW5pdHkuIEtleXMgdGhhdCBkb24ndCBleGlzdCBpbiB0aGUgaW5jb21pbmcgcG9kIGxhYmVscyB3aWxsIGJlIGlnbm9yZWQuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGVtcHR5LiBUaGUgc2FtZSBrZXkgaXMgZm9yYmlkZGVuIHRvIGV4aXN0IGluIGJvdGggTWF0Y2hMYWJlbEtleXMgYW5kIExhYmVsU2VsZWN0b3IuIEFsc28sIE1hdGNoTGFiZWxLZXlzIGNhbm5vdCBiZSBzZXQgd2hlbiBMYWJlbFNlbGVjdG9yIGlzbid0IHNldC4gVGhpcyBpcyBhbiBhbHBoYSBmaWVsZCBhbmQgcmVxdWlyZXMgZW5hYmxpbmcgTWF0Y2hMYWJlbEtleXNJblBvZEFmZmluaXR5IGZlYXR1cmUgZ2F0ZS4iLCJpdGVtcyI6eyJ0eXBlIjoic3RyaW5nIn0sInR5cGUiOiJhcnJheSIsIngta3ViZXJuZXRlcy1saXN0LXR5cGUiOiJhdG9taWMifSwibWlzbWF0Y2hMYWJlbEtleXMiOnsiZGVzY3JpcHRpb24iOiJNaXNtYXRjaExhYmVsS2V5cyBpcyBhIHNldCBvZiBwb2QgbGFiZWwga2V5cyB0byBzZWxlY3Qgd2hpY2ggcG9kcyB3aWxsIGJlIHRha2VuIGludG8gY29uc2lkZXJhdGlvbi4gVGhlIGtleXMgYXJlIHVzZWQgdG8gbG9va3VwIHZhbHVlcyBmcm9tIHRoZSBpbmNvbWluZyBwb2QgbGFiZWxzLCB0aG9zZSBrZXktdmFsdWUgbGFiZWxzIGFyZSBtZXJnZWQgd2l0aCBgTGFiZWxTZWxlY3RvcmAgYXMgYGtleSBub3RpbiAodmFsdWUpYCB0byBzZWxlY3QgdGhlIGdyb3VwIG9mIGV4aXN0aW5nIHBvZHMgd2hpY2ggcG9kcyB3aWxsIGJlIHRha2VuIGludG8gY29uc2lkZXJhdGlvbiBmb3IgdGhlIGluY29taW5nIHBvZCdzIHBvZCAoYW50aSkgYWZmaW5pdHkuIEtleXMgdGhhdCBkb24ndCBleGlzdCBpbiB0aGUgaW5jb21pbmcgcG9kIGxhYmVscyB3aWxsIGJlIGlnbm9yZWQuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGVtcHR5LiBUaGUgc2FtZSBrZXkgaXMgZm9yYmlkZGVuIHRvIGV4aXN0IGluIGJvdGggTWlzbWF0Y2hMYWJlbEtleXMgYW5kIExhYmVsU2VsZWN0b3IuIEFsc28sIE1pc21hdGNoTGFiZWxLZXlzIGNhbm5vdCBiZSBzZXQgd2hlbiBMYWJlbFNlbGVjdG9yIGlzbid0IHNldC4gVGhpcyBpcyBhbiBhbHBoYSBmaWVsZCBhbmQgcmVxdWlyZXMgZW5hYmxpbmcgTWF0Y2hMYWJlbEtleXNJblBvZEFmZmluaXR5IGZlYXR1cmUgZ2F0ZS4iLCJpdGVtcyI6eyJ0eXBlIjoic3RyaW5nIn0sInR5cGUiOiJhcnJheSIsIngta3ViZXJuZXRlcy1saXN0LXR5cGUiOiJhdG9taWMifSwibmFtZXNwYWNlU2VsZWN0b3IiOnsiZGVzY3JpcHRpb24iOiJBIGxhYmVsIHF1ZXJ5IG92ZXIgdGhlIHNldCBvZiBuYW1lc3BhY2VzIHRoYXQgdGhlIHRlcm0gYXBwbGllcyB0by4gVGhlIHRlcm0gaXMgYXBwbGllZCB0byB0aGUgdW5pb24gb2YgdGhlIG5hbWVzcGFjZXMgc2VsZWN0ZWQgYnkgdGhpcyBmaWVsZCBhbmQgdGhlIG9uZXMgbGlzdGVkIGluIHRoZSBuYW1lc3BhY2VzIGZpZWxkLiBudWxsIHNlbGVjdG9yIGFuZCBudWxsIG9yIGVtcHR5IG5hbWVzcGFjZXMgbGlzdCBtZWFucyBcInRoaXMgcG9kJ3MgbmFtZXNwYWNlXCIuIEFuIGVtcHR5IHNlbGVjdG9yICh7fSkgbWF0Y2hlcyBhbGwgbmFtZXNwYWNlcy4iLCJwcm9wZXJ0aWVzIjp7Im1hdGNoRXhwcmVzc2lvbnMiOnsiZGVzY3JpcHRpb24iOiJtYXRjaEV4cHJlc3Npb25zIGlzIGEgbGlzdCBvZiBsYWJlbCBzZWxlY3RvciByZXF1aXJlbWVudHMuIFRoZSByZXF1aXJlbWVudHMgYXJlIEFORGVkLiIsIml0ZW1zIjp7ImRlc2NyaXB0aW9uIjoiQSBsYWJlbCBzZWxlY3RvciByZXF1aXJlbWVudCBpcyBhIHNlbGVjdG9yIHRoYXQgY29udGFpbnMgdmFsdWVzLCBhIGtleSwgYW5kIGFuIG9wZXJhdG9yIHRoYXQgcmVsYXRlcyB0aGUga2V5IGFuZCB2YWx1ZXMuIiwicHJvcGVydGllcyI6eyJrZXkiOnsiZGVzY3JpcHRpb24iOiJrZXkgaXMgdGhlIGxhYmVsIGtleSB0aGF0IHRoZSBzZWxlY3RvciBhcHBsaWVzIHRvLiIsInR5cGUiOiJzdHJpbmcifSwib3BlcmF0b3IiOnsiZGVzY3JpcHRpb24iOiJvcGVyYXRvciByZXByZXNlbnRzIGEga2V5J3MgcmVsYXRpb25zaGlwIHRvIGEgc2V0IG9mIHZhbHVlcy4gVmFsaWQgb3BlcmF0b3JzIGFyZSBJbiwgTm90SW4sIEV4aXN0cyBhbmQgRG9lc05vdEV4aXN0LiIsInR5cGUiOiJzdHJpbmcifSwidmFsdWVzIjp7ImRlc2NyaXB0aW9uIjoidmFsdWVzIGlzIGFuIGFycmF5IG9mIHN0cmluZyB2YWx1ZXMuIElmIHRoZSBvcGVyYXRvciBpcyBJbiBvciBOb3RJbiwgdGhlIHZhbHVlcyBhcnJheSBtdXN0IGJlIG5vbi1lbXB0eS4gSWYgdGhlIG9wZXJhdG9yIGlzIEV4aXN0cyBvciBEb2VzTm90RXhpc3QsIHRoZSB2YWx1ZXMgYXJyYXkgbXVzdCBiZSBlbXB0eS4gVGhpcyBhcnJheSBpcyByZXBsYWNlZCBkdXJpbmcgYSBzdHJhdGVnaWMgbWVyZ2UgcGF0Y2guIiwiaXRlbXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjoiYXJyYXkifX0sInJlcXVpcmVkIjpbImtleSIsIm9wZXJhdG9yIl0sInR5cGUiOiJvYmplY3QifSwidHlwZSI6ImFycmF5In0sIm1hdGNoTGFiZWxzIjp7ImFkZGl0aW9uYWxQcm9wZXJ0aWVzIjp7InR5cGUiOiJzdHJpbmcifSwiZGVzY3JpcHRpb24iOiJtYXRjaExhYmVscyBpcyBhIG1hcCBvZiB7a2V5LHZhbHVlfSBwYWlycy4gQSBzaW5nbGUge2tleSx2YWx1ZX0gaW4gdGhlIG1hdGNoTGFiZWxzIG1hcCBpcyBlcXVpdmFsZW50IHRvIGFuIGVsZW1lbnQgb2YgbWF0Y2hFeHByZXNzaW9ucywgd2hvc2Uga2V5IGZpZWxkIGlzIFwia2V5XCIsIHRoZSBvcGVyYXRvciBpcyBcIkluXCIsIGFuZCB0aGUgdmFsdWVzIGFycmF5IGNvbnRhaW5zIG9ubHkgXCJ2YWx1ZVwiLiBUaGUgcmVxdWlyZW1lbnRzIGFyZSBBTkRlZC4iLCJ0eXBlIjoib2JqZWN0In19LCJ0eXBlIjoib2JqZWN0IiwieC1rdWJlcm5ldGVzLW1hcC10eXBlIjoiYXRvbWljIn0sIm5hbWVzcGFjZXMiOnsiZGVzY3JpcHRpb24iOiJuYW1lc3BhY2VzIHNwZWNpZmllcyBhIHN0YXRpYyBsaXN0IG9mIG5hbWVzcGFjZSBuYW1lcyB0aGF0IHRoZSB0ZXJtIGFwcGxpZXMgdG8uIFRoZSB0ZXJtIGlzIGFwcGxpZWQgdG8gdGhlIHVuaW9uIG9mIHRoZSBuYW1lc3BhY2VzIGxpc3RlZCBpbiB0aGlzIGZpZWxkIGFuZCB0aGUgb25lcyBzZWxlY3RlZCBieSBuYW1lc3BhY2VTZWxlY3Rvci4gbnVsbCBvciBlbXB0eSBuYW1lc3BhY2VzIGxpc3QgYW5kIG51bGwgbmFtZXNwYWNlU2VsZWN0b3IgbWVhbnMgXCJ0aGlzIHBvZCdzIG5hbWVzcGFjZVwiLiIsIml0ZW1zIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6ImFycmF5In0sInRvcG9sb2d5S2V5Ijp7ImRlc2NyaXB0aW9uIjoiVGhpcyBwb2Qgc2hvdWxkIGJlIGNvLWxvY2F0ZWQgKGFmZmluaXR5KSBvciBub3QgY28tbG9jYXRlZCAoYW50aS1hZmZpbml0eSkgd2l0aCB0aGUgcG9kcyBtYXRjaGluZyB0aGUgbGFiZWxTZWxlY3RvciBpbiB0aGUgc3BlY2lmaWVkIG5hbWVzcGFjZXMsIHdoZXJlIGNvLWxvY2F0ZWQgaXMgZGVmaW5lZCBhcyBydW5uaW5nIG9uIGEgbm9kZSB3aG9zZSB2YWx1ZSBvZiB0aGUgbGFiZWwgd2l0aCBrZXkgdG9wb2xvZ3lLZXkgbWF0Y2hlcyB0aGF0IG9mIGFueSBub2RlIG9uIHdoaWNoIGFueSBvZiB0aGUgc2VsZWN0ZWQgcG9kcyBpcyBydW5uaW5nLiBFbXB0eSB0b3BvbG9neUtleSBpcyBub3QgYWxsb3dlZC4iLCJ0eXBlIjoic3RyaW5nIn19LCJyZXF1aXJlZCI6WyJ0b3BvbG9neUtleSJdLCJ0eXBlIjoib2JqZWN0In0sIndlaWdodCI6eyJkZXNjcmlwdGlvbiI6IndlaWdodCBhc3NvY2lhdGVkIHdpdGggbWF0Y2hpbmcgdGhlIGNvcnJlc3BvbmRpbmcgcG9kQWZmaW5pdHlUZXJtLCBpbiB0aGUgcmFuZ2UgMS0xMDAuIiwiZm9ybWF0IjoiaW50MzIiLCJ0eXBlIjoiaW50ZWdlciJ9fSwicmVxdWlyZWQiOlsicG9kQWZmaW5pdHlUZXJtIiwid2VpZ2h0Il0sInR5cGUiOiJvYmplY3QifSwidHlwZSI6ImFycmF5In0sInJlcXVpcmVkRHVyaW5nU2NoZWR1bGluZ0lnbm9yZWREdXJpbmdFeGVjdXRpb24iOnsiZGVzY3JpcHRpb24iOiJJZiB0aGUgYW50aS1hZmZpbml0eSByZXF1aXJlbWVudHMgc3BlY2lmaWVkIGJ5IHRoaXMgZmllbGQgYXJlIG5vdCBtZXQgYXQgc2NoZWR1bGluZyB0aW1lLCB0aGUgcG9kIHdpbGwgbm90IGJlIHNjaGVkdWxlZCBvbnRvIHRoZSBub2RlLiBJZiB0aGUgYW50aS1hZmZpbml0eSByZXF1aXJlbWVudHMgc3BlY2lmaWVkIGJ5IHRoaXMgZmllbGQgY2Vhc2UgdG8gYmUgbWV0IGF0IHNvbWUgcG9pbnQgZHVyaW5nIHBvZCBleGVjdXRpb24gKGUuZy4gZHVlIHRvIGEgcG9kIGxhYmVsIHVwZGF0ZSksIHRoZSBzeXN0ZW0gbWF5IG9yIG1heSBub3QgdHJ5IHRvIGV2ZW50dWFsbHkgZXZpY3QgdGhlIHBvZCBmcm9tIGl0cyBub2RlLiBXaGVuIHRoZXJlIGFyZSBtdWx0aXBsZSBlbGVtZW50cywgdGhlIGxpc3RzIG9mIG5vZGVzIGNvcnJlc3BvbmRpbmcgdG8gZWFjaCBwb2RBZmZpbml0eVRlcm0gYXJlIGludGVyc2VjdGVkLCBpLmUuIGFsbCB0ZXJtcyBtdXN0IGJlIHNhdGlzZmllZC4iLCJpdGVtcyI6eyJkZXNjcmlwdGlvbiI6IkRlZmluZXMgYSBzZXQgb2YgcG9kcyAobmFtZWx5IHRob3NlIG1hdGNoaW5nIHRoZSBsYWJlbFNlbGVjdG9yIHJlbGF0aXZlIHRvIHRoZSBnaXZlbiBuYW1lc3BhY2UocykpIHRoYXQgdGhpcyBwb2Qgc2hvdWxkIGJlIGNvLWxvY2F0ZWQgKGFmZmluaXR5KSBvciBub3QgY28tbG9jYXRlZCAoYW50aS1hZmZpbml0eSkgd2l0aCwgd2hlcmUgY28tbG9jYXRlZCBpcyBkZWZpbmVkIGFzIHJ1bm5pbmcgb24gYSBub2RlIHdob3NlIHZhbHVlIG9mIHRoZSBsYWJlbCB3aXRoIGtleSBcdTAwM2N0b3BvbG9neUtleVx1MDAzZSBtYXRjaGVzIHRoYXQgb2YgYW55IG5vZGUgb24gd2hpY2ggYSBwb2Qgb2YgdGhlIHNldCBvZiBwb2RzIGlzIHJ1bm5pbmciLCJwcm9wZXJ0aWVzIjp7ImxhYmVsU2VsZWN0b3IiOnsiZGVzY3JpcHRpb24iOiJBIGxhYmVsIHF1ZXJ5IG92ZXIgYSBzZXQgb2YgcmVzb3VyY2VzLCBpbiB0aGlzIGNhc2UgcG9kcy4gSWYgaXQncyBudWxsLCB0aGlzIFBvZEFmZmluaXR5VGVybSBtYXRjaGVzIHdpdGggbm8gUG9kcy4iLCJwcm9wZXJ0aWVzIjp7Im1hdGNoRXhwcmVzc2lvbnMiOnsiZGVzY3JpcHRpb24iOiJtYXRjaEV4cHJlc3Npb25zIGlzIGEgbGlzdCBvZiBsYWJlbCBzZWxlY3RvciByZXF1aXJlbWVudHMuIFRoZSByZXF1aXJlbWVudHMgYXJlIEFORGVkLiIsIml0ZW1zIjp7ImRlc2NyaXB0aW9uIjoiQSBsYWJlbCBzZWxlY3RvciByZXF1aXJlbWVudCBpcyBhIHNlbGVjdG9yIHRoYXQgY29udGFpbnMgdmFsdWVzLCBhIGtleSwgYW5kIGFuIG9wZXJhdG9yIHRoYXQgcmVsYXRlcyB0aGUga2V5IGFuZCB2YWx1ZXMuIiwicHJvcGVydGllcyI6eyJrZXkiOnsiZGVzY3JpcHRpb24iOiJrZXkgaXMgdGhlIGxhYmVsIGtleSB0aGF0IHRoZSBzZWxlY3RvciBhcHBsaWVzIHRvLiIsInR5cGUiOiJzdHJpbmcifSwib3BlcmF0b3IiOnsiZGVzY3JpcHRpb24iOiJvcGVyYXRvciByZXByZXNlbnRzIGEga2V5J3MgcmVsYXRpb25zaGlwIHRvIGEgc2V0IG9mIHZhbHVlcy4gVmFsaWQgb3BlcmF0b3JzIGFyZSBJbiwgTm90SW4sIEV4aXN0cyBhbmQgRG9lc05vdEV4aXN0LiIsInR5cGUiOiJzdHJpbmcifSwidmFsdWVzIjp7ImRlc2NyaXB0aW9uIjoidmFsdWVzIGlzIGFuIGFycmF5IG9mIHN0cmluZyB2YWx1ZXMuIElmIHRoZSBvcGVyYXRvciBpcyBJbiBvciBOb3RJbiwgdGhlIHZhbHVlcyBhcnJheSBtdXN0IGJlIG5vbi1lbXB0eS4gSWYgdGhlIG9wZXJhdG9yIGlzIEV4aXN0cyBvciBEb2VzTm90RXhpc3QsIHRoZSB2YWx1ZXMgYXJyYXkgbXVzdCBiZSBlbXB0eS4gVGhpcyBhcnJheSBpcyByZXBsYWNlZCBkdXJpbmcgYSBzdHJhdGVnaWMgbWVyZ2UgcGF0Y2guIiwiaXRlbXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjoiYXJyYXkifX0sInJlcXVpcmVkIjpbImtleSIsIm9wZXJhdG9yIl0sInR5cGUiOiJvYmplY3QifSwidHlwZSI6ImFycmF5In0sIm1hdGNoTGFiZWxzIjp7ImFkZGl0aW9uYWxQcm9wZXJ0aWVzIjp7InR5cGUiOiJzdHJpbmcifSwiZGVzY3JpcHRpb24iOiJtYXRjaExhYmVscyBpcyBhIG1hcCBvZiB7a2V5LHZhbHVlfSBwYWlycy4gQSBzaW5nbGUge2tleSx2YWx1ZX0gaW4gdGhlIG1hdGNoTGFiZWxzIG1hcCBpcyBlcXVpdmFsZW50IHRvIGFuIGVsZW1lbnQgb2YgbWF0Y2hFeHByZXNzaW9ucywgd2hvc2Uga2V5IGZpZWxkIGlzIFwia2V5XCIsIHRoZSBvcGVyYXRvciBpcyBcIkluXCIsIGFuZCB0aGUgdmFsdWVzIGFycmF5IGNvbnRhaW5zIG9ubHkgXCJ2YWx1ZVwiLiBUaGUgcmVxdWlyZW1lbnRzIGFyZSBBTkRlZC4iLCJ0eXBlIjoib2JqZWN0In19LCJ0eXBlIjoib2JqZWN0IiwieC1rdWJlcm5ldGVzLW1hcC10eXBlIjoiYXRvbWljIn0sIm1hdGNoTGFiZWxLZXlzIjp7ImRlc2NyaXB0aW9uIjoiTWF0Y2hMYWJlbEtleXMgaXMgYSBzZXQgb2YgcG9kIGxhYmVsIGtleXMgdG8gc2VsZWN0IHdoaWNoIHBvZHMgd2lsbCBiZSB0YWtlbiBpbnRvIGNvbnNpZGVyYXRpb24uIFRoZSBrZXlzIGFyZSB1c2VkIHRvIGxvb2t1cCB2YWx1ZXMgZnJvbSB0aGUgaW5jb21pbmcgcG9kIGxhYmVscywgdGhvc2Uga2V5LXZhbHVlIGxhYmVscyBhcmUgbWVyZ2VkIHdpdGggYExhYmVsU2VsZWN0b3JgIGFzIGBrZXkgaW4gKHZhbHVlKWAgdG8gc2VsZWN0IHRoZSBncm91cCBvZiBleGlzdGluZyBwb2RzIHdoaWNoIHBvZHMgd2lsbCBiZSB0YWtlbiBpbnRvIGNvbnNpZGVyYXRpb24gZm9yIHRoZSBpbmNvbWluZyBwb2QncyBwb2QgKGFudGkpIGFmZmluaXR5LiBLZXlzIHRoYXQgZG9uJ3QgZXhpc3QgaW4gdGhlIGluY29taW5nIHBvZCBsYWJlbHMgd2lsbCBiZSBpZ25vcmVkLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBlbXB0eS4gVGhlIHNhbWUga2V5IGlzIGZvcmJpZGRlbiB0byBleGlzdCBpbiBib3RoIE1hdGNoTGFiZWxLZXlzIGFuZCBMYWJlbFNlbGVjdG9yLiBBbHNvLCBNYXRjaExhYmVsS2V5cyBjYW5ub3QgYmUgc2V0IHdoZW4gTGFiZWxTZWxlY3RvciBpc24ndCBzZXQuIFRoaXMgaXMgYW4gYWxwaGEgZmllbGQgYW5kIHJlcXVpcmVzIGVuYWJsaW5nIE1hdGNoTGFiZWxLZXlzSW5Qb2RBZmZpbml0eSBmZWF0dXJlIGdhdGUuIiwiaXRlbXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjoiYXJyYXkiLCJ4LWt1YmVybmV0ZXMtbGlzdC10eXBlIjoiYXRvbWljIn0sIm1pc21hdGNoTGFiZWxLZXlzIjp7ImRlc2NyaXB0aW9uIjoiTWlzbWF0Y2hMYWJlbEtleXMgaXMgYSBzZXQgb2YgcG9kIGxhYmVsIGtleXMgdG8gc2VsZWN0IHdoaWNoIHBvZHMgd2lsbCBiZSB0YWtlbiBpbnRvIGNvbnNpZGVyYXRpb24uIFRoZSBrZXlzIGFyZSB1c2VkIHRvIGxvb2t1cCB2YWx1ZXMgZnJvbSB0aGUgaW5jb21pbmcgcG9kIGxhYmVscywgdGhvc2Uga2V5LXZhbHVlIGxhYmVscyBhcmUgbWVyZ2VkIHdpdGggYExhYmVsU2VsZWN0b3JgIGFzIGBrZXkgbm90aW4gKHZhbHVlKWAgdG8gc2VsZWN0IHRoZSBncm91cCBvZiBleGlzdGluZyBwb2RzIHdoaWNoIHBvZHMgd2lsbCBiZSB0YWtlbiBpbnRvIGNvbnNpZGVyYXRpb24gZm9yIHRoZSBpbmNvbWluZyBwb2QncyBwb2QgKGFudGkpIGFmZmluaXR5LiBLZXlzIHRoYXQgZG9uJ3QgZXhpc3QgaW4gdGhlIGluY29taW5nIHBvZCBsYWJlbHMgd2lsbCBiZSBpZ25vcmVkLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBlbXB0eS4gVGhlIHNhbWUga2V5IGlzIGZvcmJpZGRlbiB0byBleGlzdCBpbiBib3RoIE1pc21hdGNoTGFiZWxLZXlzIGFuZCBMYWJlbFNlbGVjdG9yLiBBbHNvLCBNaXNtYXRjaExhYmVsS2V5cyBjYW5ub3QgYmUgc2V0IHdoZW4gTGFiZWxTZWxlY3RvciBpc24ndCBzZXQuIFRoaXMgaXMgYW4gYWxwaGEgZmllbGQgYW5kIHJlcXVpcmVzIGVuYWJsaW5nIE1hdGNoTGFiZWxLZXlzSW5Qb2RBZmZpbml0eSBmZWF0dXJlIGdhdGUuIiwiaXRlbXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjoiYXJyYXkiLCJ4LWt1YmVybmV0ZXMtbGlzdC10eXBlIjoiYXRvbWljIn0sIm5hbWVzcGFjZVNlbGVjdG9yIjp7ImRlc2NyaXB0aW9uIjoiQSBsYWJlbCBxdWVyeSBvdmVyIHRoZSBzZXQgb2YgbmFtZXNwYWNlcyB0aGF0IHRoZSB0ZXJtIGFwcGxpZXMgdG8uIFRoZSB0ZXJtIGlzIGFwcGxpZWQgdG8gdGhlIHVuaW9uIG9mIHRoZSBuYW1lc3BhY2VzIHNlbGVjdGVkIGJ5IHRoaXMgZmllbGQgYW5kIHRoZSBvbmVzIGxpc3RlZCBpbiB0aGUgbmFtZXNwYWNlcyBmaWVsZC4gbnVsbCBzZWxlY3RvciBhbmQgbnVsbCBvciBlbXB0eSBuYW1lc3BhY2VzIGxpc3QgbWVhbnMgXCJ0aGlzIHBvZCdzIG5hbWVzcGFjZVwiLiBBbiBlbXB0eSBzZWxlY3RvciAoe30pIG1hdGNoZXMgYWxsIG5hbWVzcGFjZXMuIiwicHJvcGVydGllcyI6eyJtYXRjaEV4cHJlc3Npb25zIjp7ImRlc2NyaXB0aW9uIjoibWF0Y2hFeHByZXNzaW9ucyBpcyBhIGxpc3Qgb2YgbGFiZWwgc2VsZWN0b3IgcmVxdWlyZW1lbnRzLiBUaGUgcmVxdWlyZW1lbnRzIGFyZSBBTkRlZC4iLCJpdGVtcyI6eyJkZXNjcmlwdGlvbiI6IkEgbGFiZWwgc2VsZWN0b3IgcmVxdWlyZW1lbnQgaXMgYSBzZWxlY3RvciB0aGF0IGNvbnRhaW5zIHZhbHVlcywgYSBrZXksIGFuZCBhbiBvcGVyYXRvciB0aGF0IHJlbGF0ZXMgdGhlIGtleSBhbmQgdmFsdWVzLiIsInByb3BlcnRpZXMiOnsia2V5Ijp7ImRlc2NyaXB0aW9uIjoia2V5IGlzIHRoZSBsYWJlbCBrZXkgdGhhdCB0aGUgc2VsZWN0b3IgYXBwbGllcyB0by4iLCJ0eXBlIjoic3RyaW5nIn0sIm9wZXJhdG9yIjp7ImRlc2NyaXB0aW9uIjoib3BlcmF0b3IgcmVwcmVzZW50cyBhIGtleSdzIHJlbGF0aW9uc2hpcCB0byBhIHNldCBvZiB2YWx1ZXMuIFZhbGlkIG9wZXJhdG9ycyBhcmUgSW4sIE5vdEluLCBFeGlzdHMgYW5kIERvZXNOb3RFeGlzdC4iLCJ0eXBlIjoic3RyaW5nIn0sInZhbHVlcyI6eyJkZXNjcmlwdGlvbiI6InZhbHVlcyBpcyBhbiBhcnJheSBvZiBzdHJpbmcgdmFsdWVzLiBJZiB0aGUgb3BlcmF0b3IgaXMgSW4gb3IgTm90SW4sIHRoZSB2YWx1ZXMgYXJyYXkgbXVzdCBiZSBub24tZW1wdHkuIElmIHRoZSBvcGVyYXRvciBpcyBFeGlzdHMgb3IgRG9lc05vdEV4aXN0LCB0aGUgdmFsdWVzIGFycmF5IG11c3QgYmUgZW1wdHkuIFRoaXMgYXJyYXkgaXMgcmVwbGFjZWQgZHVyaW5nIGEgc3RyYXRlZ2ljIG1lcmdlIHBhdGNoLiIsIml0ZW1zIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6ImFycmF5In19LCJyZXF1aXJlZCI6WyJrZXkiLCJvcGVyYXRvciJdLCJ0eXBlIjoib2JqZWN0In0sInR5cGUiOiJhcnJheSJ9LCJtYXRjaExhYmVscyI6eyJhZGRpdGlvbmFsUHJvcGVydGllcyI6eyJ0eXBlIjoic3RyaW5nIn0sImRlc2NyaXB0aW9uIjoibWF0Y2hMYWJlbHMgaXMgYSBtYXAgb2Yge2tleSx2YWx1ZX0gcGFpcnMuIEEgc2luZ2xlIHtrZXksdmFsdWV9IGluIHRoZSBtYXRjaExhYmVscyBtYXAgaXMgZXF1aXZhbGVudCB0byBhbiBlbGVtZW50IG9mIG1hdGNoRXhwcmVzc2lvbnMsIHdob3NlIGtleSBmaWVsZCBpcyBcImtleVwiLCB0aGUgb3BlcmF0b3IgaXMgXCJJblwiLCBhbmQgdGhlIHZhbHVlcyBhcnJheSBjb250YWlucyBvbmx5IFwidmFsdWVcIi4gVGhlIHJlcXVpcmVtZW50cyBhcmUgQU5EZWQuIiwidHlwZSI6Im9iamVjdCJ9fSwidHlwZSI6Im9iamVjdCIsIngta3ViZXJuZXRlcy1tYXAtdHlwZSI6ImF0b21pYyJ9LCJuYW1lc3BhY2VzIjp7ImRlc2NyaXB0aW9uIjoibmFtZXNwYWNlcyBzcGVjaWZpZXMgYSBzdGF0aWMgbGlzdCBvZiBuYW1lc3BhY2UgbmFtZXMgdGhhdCB0aGUgdGVybSBhcHBsaWVzIHRvLiBUaGUgdGVybSBpcyBhcHBsaWVkIHRvIHRoZSB1bmlvbiBvZiB0aGUgbmFtZXNwYWNlcyBsaXN0ZWQgaW4gdGhpcyBmaWVsZCBhbmQgdGhlIG9uZXMgc2VsZWN0ZWQgYnkgbmFtZXNwYWNlU2VsZWN0b3IuIG51bGwgb3IgZW1wdHkgbmFtZXNwYWNlcyBsaXN0IGFuZCBudWxsIG5hbWVzcGFjZVNlbGVjdG9yIG1lYW5zIFwidGhpcyBwb2QncyBuYW1lc3BhY2VcIi4iLCJpdGVtcyI6eyJ0eXBlIjoic3RyaW5nIn0sInR5cGUiOiJhcnJheSJ9LCJ0b3BvbG9neUtleSI6eyJkZXNjcmlwdGlvbiI6IlRoaXMgcG9kIHNob3VsZCBiZSBjby1sb2NhdGVkIChhZmZpbml0eSkgb3Igbm90IGNvLWxvY2F0ZWQgKGFudGktYWZmaW5pdHkpIHdpdGggdGhlIHBvZHMgbWF0Y2hpbmcgdGhlIGxhYmVsU2VsZWN0b3IgaW4gdGhlIHNwZWNpZmllZCBuYW1lc3BhY2VzLCB3aGVyZSBjby1sb2NhdGVkIGlzIGRlZmluZWQgYXMgcnVubmluZyBvbiBhIG5vZGUgd2hvc2UgdmFsdWUgb2YgdGhlIGxhYmVsIHdpdGgga2V5IHRvcG9sb2d5S2V5IG1hdGNoZXMgdGhhdCBvZiBhbnkgbm9kZSBvbiB3aGljaCBhbnkgb2YgdGhlIHNlbGVjdGVkIHBvZHMgaXMgcnVubmluZy4gRW1wdHkgdG9wb2xvZ3lLZXkgaXMgbm90IGFsbG93ZWQuIiwidHlwZSI6InN0cmluZyJ9fSwicmVxdWlyZWQiOlsidG9wb2xvZ3lLZXkiXSwidHlwZSI6Im9iamVjdCJ9LCJ0eXBlIjoiYXJyYXkifX0sInR5cGUiOiJvYmplY3QifSwidG9sZXJhdGlvbnMiOnsiZGVzY3JpcHRpb24iOiJUaGUgcG9kIHRoaXMgVG9sZXJhdGlvbiBpcyBhdHRhY2hlZCB0byB0b2xlcmF0ZXMgYW55IHRhaW50IHRoYXQgbWF0Y2hlcyB0aGUgdHJpcGxlIFx1MDAzY2tleSx2YWx1ZSxlZmZlY3RcdTAwM2UgdXNpbmcgdGhlIG1hdGNoaW5nIG9wZXJhdG9yIFx1MDAzY29wZXJhdG9yXHUwMDNlIiwiaXRlbXMiOnsiZGVzY3JpcHRpb24iOiJUaGUgcG9kIHRoaXMgVG9sZXJhdGlvbiBpcyBhdHRhY2hlZCB0byB0b2xlcmF0ZXMgYW55IHRhaW50IHRoYXQgbWF0Y2hlcyB0aGUgdHJpcGxlIFx1MDAzY2tleSx2YWx1ZSxlZmZlY3RcdTAwM2UgdXNpbmcgdGhlIG1hdGNoaW5nIG9wZXJhdG9yIFx1MDAzY29wZXJhdG9yXHUwMDNlLiIsInByb3BlcnRpZXMiOnsiZWZmZWN0Ijp7ImRlc2NyaXB0aW9uIjoiRWZmZWN0IGluZGljYXRlcyB0aGUgdGFpbnQgZWZmZWN0IHRvIG1hdGNoLiBFbXB0eSBtZWFucyBtYXRjaCBhbGwgdGFpbnQgZWZmZWN0cy4gV2hlbiBzcGVjaWZpZWQsIGFsbG93ZWQgdmFsdWVzIGFyZSBOb1NjaGVkdWxlLCBQcmVmZXJOb1NjaGVkdWxlIGFuZCBOb0V4ZWN1dGUuIiwidHlwZSI6InN0cmluZyJ9LCJrZXkiOnsiZGVzY3JpcHRpb24iOiJLZXkgaXMgdGhlIHRhaW50IGtleSB0aGF0IHRoZSB0b2xlcmF0aW9uIGFwcGxpZXMgdG8uIEVtcHR5IG1lYW5zIG1hdGNoIGFsbCB0YWludCBrZXlzLiBJZiB0aGUga2V5IGlzIGVtcHR5LCBvcGVyYXRvciBtdXN0IGJlIEV4aXN0czsgdGhpcyBjb21iaW5hdGlvbiBtZWFucyB0byBtYXRjaCBhbGwgdmFsdWVzIGFuZCBhbGwga2V5cy4iLCJ0eXBlIjoic3RyaW5nIn0sIm9wZXJhdG9yIjp7ImRlc2NyaXB0aW9uIjoiT3BlcmF0b3IgcmVwcmVzZW50cyBhIGtleSdzIHJlbGF0aW9uc2hpcCB0byB0aGUgdmFsdWUuIFZhbGlkIG9wZXJhdG9ycyBhcmUgRXhpc3RzIGFuZCBFcXVhbC4gRGVmYXVsdHMgdG8gRXF1YWwuIEV4aXN0cyBpcyBlcXVpdmFsZW50IHRvIHdpbGRjYXJkIGZvciB2YWx1ZSwgc28gdGhhdCBhIHBvZCBjYW4gdG9sZXJhdGUgYWxsIHRhaW50cyBvZiBhIHBhcnRpY3VsYXIgY2F0ZWdvcnkuIiwidHlwZSI6InN0cmluZyJ9LCJ0b2xlcmF0aW9uU2Vjb25kcyI6eyJkZXNjcmlwdGlvbiI6IlRvbGVyYXRpb25TZWNvbmRzIHJlcHJlc2VudHMgdGhlIHBlcmlvZCBvZiB0aW1lIHRoZSB0b2xlcmF0aW9uICh3aGljaCBtdXN0IGJlIG9mIGVmZmVjdCBOb0V4ZWN1dGUsIG90aGVyd2lzZSB0aGlzIGZpZWxkIGlzIGlnbm9yZWQpIHRvbGVyYXRlcyB0aGUgdGFpbnQuIEJ5IGRlZmF1bHQsIGl0IGlzIG5vdCBzZXQsIHdoaWNoIG1lYW5zIHRvbGVyYXRlIHRoZSB0YWludCBmb3JldmVyIChkbyBub3QgZXZpY3QpLiBaZXJvIGFuZCBuZWdhdGl2ZSB2YWx1ZXMgd2lsbCBiZSB0cmVhdGVkIGFzIDAgKGV2aWN0IGltbWVkaWF0ZWx5KSBieSB0aGUgc3lzdGVtLiIsImZvcm1hdCI6ImludDY0IiwidHlwZSI6ImludGVnZXIifSwidmFsdWUiOnsiZGVzY3JpcHRpb24iOiJWYWx1ZSBpcyB0aGUgdGFpbnQgdmFsdWUgdGhlIHRvbGVyYXRpb24gbWF0Y2hlcyB0by4gSWYgdGhlIG9wZXJhdG9yIGlzIEV4aXN0cywgdGhlIHZhbHVlIHNob3VsZCBiZSBlbXB0eSwgb3RoZXJ3aXNlIGp1c3QgYSByZWd1bGFyIHN0cmluZy4iLCJ0eXBlIjoic3RyaW5nIn19LCJ0eXBlIjoib2JqZWN0In0sInR5cGUiOiJhcnJheSJ9LCJ0b3BvbG9neVNwcmVhZENvbnN0cmFpbnRzIjp7ImRlc2NyaXB0aW9uIjoiVG9wb2xvZ3lTcHJlYWRDb25zdHJhaW50IHNwZWNpZmllcyBob3cgdG8gc3ByZWFkIG1hdGNoaW5nIHBvZHMgYW1vbmcgdGhlIGdpdmVuIHRvcG9sb2d5IiwiaXRlbXMiOnsiZGVzY3JpcHRpb24iOiJUb3BvbG9neVNwcmVhZENvbnN0cmFpbnQgc3BlY2lmaWVzIGhvdyB0byBzcHJlYWQgbWF0Y2hpbmcgcG9kcyBhbW9uZyB0aGUgZ2l2ZW4gdG9wb2xvZ3kuIiwicHJvcGVydGllcyI6eyJsYWJlbFNlbGVjdG9yIjp7ImRlc2NyaXB0aW9uIjoiTGFiZWxTZWxlY3RvciBpcyB1c2VkIHRvIGZpbmQgbWF0Y2hpbmcgcG9kcy4gUG9kcyB0aGF0IG1hdGNoIHRoaXMgbGFiZWwgc2VsZWN0b3IgYXJlIGNvdW50ZWQgdG8gZGV0ZXJtaW5lIHRoZSBudW1iZXIgb2YgcG9kcyBpbiB0aGVpciBjb3JyZXNwb25kaW5nIHRvcG9sb2d5IGRvbWFpbi4iLCJwcm9wZXJ0aWVzIjp7Im1hdGNoRXhwcmVzc2lvbnMiOnsiZGVzY3JpcHRpb24iOiJtYXRjaEV4cHJlc3Npb25zIGlzIGEgbGlzdCBvZiBsYWJlbCBzZWxlY3RvciByZXF1aXJlbWVudHMuIFRoZSByZXF1aXJlbWVudHMgYXJlIEFORGVkLiIsIml0ZW1zIjp7ImRlc2NyaXB0aW9uIjoiQSBsYWJlbCBzZWxlY3RvciByZXF1aXJlbWVudCBpcyBhIHNlbGVjdG9yIHRoYXQgY29udGFpbnMgdmFsdWVzLCBhIGtleSwgYW5kIGFuIG9wZXJhdG9yIHRoYXQgcmVsYXRlcyB0aGUga2V5IGFuZCB2YWx1ZXMuIiwicHJvcGVydGllcyI6eyJrZXkiOnsiZGVzY3JpcHRpb24iOiJrZXkgaXMgdGhlIGxhYmVsIGtleSB0aGF0IHRoZSBzZWxlY3RvciBhcHBsaWVzIHRvLiIsInR5cGUiOiJzdHJpbmcifSwib3BlcmF0b3IiOnsiZGVzY3JpcHRpb24iOiJvcGVyYXRvciByZXByZXNlbnRzIGEga2V5J3MgcmVsYXRpb25zaGlwIHRvIGEgc2V0IG9mIHZhbHVlcy4gVmFsaWQgb3BlcmF0b3JzIGFyZSBJbiwgTm90SW4sIEV4aXN0cyBhbmQgRG9lc05vdEV4aXN0LiIsInR5cGUiOiJzdHJpbmcifSwidmFsdWVzIjp7ImRlc2NyaXB0aW9uIjoidmFsdWVzIGlzIGFuIGFycmF5IG9mIHN0cmluZyB2YWx1ZXMuIElmIHRoZSBvcGVyYXRvciBpcyBJbiBvciBOb3RJbiwgdGhlIHZhbHVlcyBhcnJheSBtdXN0IGJlIG5vbi1lbXB0eS4gSWYgdGhlIG9wZXJhdG9yIGlzIEV4aXN0cyBvciBEb2VzTm90RXhpc3QsIHRoZSB2YWx1ZXMgYXJyYXkgbXVzdCBiZSBlbXB0eS4gVGhpcyBhcnJheSBpcyByZXBsYWNlZCBkdXJpbmcgYSBzdHJhdGVnaWMgbWVyZ2UgcGF0Y2guIiwiaXRlbXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjoiYXJyYXkifX0sInJlcXVpcmVkIjpbImtleSIsIm9wZXJhdG9yIl0sInR5cGUiOiJvYmplY3QifSwidHlwZSI6ImFycmF5In0sIm1hdGNoTGFiZWxzIjp7ImFkZGl0aW9uYWxQcm9wZXJ0aWVzIjp7InR5cGUiOiJzdHJpbmcifSwiZGVzY3JpcHRpb24iOiJtYXRjaExhYmVscyBpcyBhIG1hcCBvZiB7a2V5LHZhbHVlfSBwYWlycy4gQSBzaW5nbGUge2tleSx2YWx1ZX0gaW4gdGhlIG1hdGNoTGFiZWxzIG1hcCBpcyBlcXVpdmFsZW50IHRvIGFuIGVsZW1lbnQgb2YgbWF0Y2hFeHByZXNzaW9ucywgd2hvc2Uga2V5IGZpZWxkIGlzIFwia2V5XCIsIHRoZSBvcGVyYXRvciBpcyBcIkluXCIsIGFuZCB0aGUgdmFsdWVzIGFycmF5IGNvbnRhaW5zIG9ubHkgXCJ2YWx1ZVwiLiBUaGUgcmVxdWlyZW1lbnRzIGFyZSBBTkRlZC4iLCJ0eXBlIjoib2JqZWN0In19LCJ0eXBlIjoib2JqZWN0IiwieC1rdWJlcm5ldGVzLW1hcC10eXBlIjoiYXRvbWljIn0sIm1hdGNoTGFiZWxLZXlzIjp7ImRlc2NyaXB0aW9uIjoiTWF0Y2hMYWJlbEtleXMgaXMgYSBzZXQgb2YgcG9kIGxhYmVsIGtleXMgdG8gc2VsZWN0IHRoZSBwb2RzIG92ZXIgd2hpY2ggc3ByZWFkaW5nIHdpbGwgYmUgY2FsY3VsYXRlZC4gVGhlIGtleXMgYXJlIHVzZWQgdG8gbG9va3VwIHZhbHVlcyBmcm9tIHRoZSBpbmNvbWluZyBwb2QgbGFiZWxzLCB0aG9zZSBrZXktdmFsdWUgbGFiZWxzIGFyZSBBTkRlZCB3aXRoIGxhYmVsU2VsZWN0b3IgdG8gc2VsZWN0IHRoZSBncm91cCBvZiBleGlzdGluZyBwb2RzIG92ZXIgd2hpY2ggc3ByZWFkaW5nIHdpbGwgYmUgY2FsY3VsYXRlZCBmb3IgdGhlIGluY29taW5nIHBvZC4gVGhlIHNhbWUga2V5IGlzIGZvcmJpZGRlbiB0byBleGlzdCBpbiBib3RoIE1hdGNoTGFiZWxLZXlzIGFuZCBMYWJlbFNlbGVjdG9yLiBNYXRjaExhYmVsS2V5cyBjYW5ub3QgYmUgc2V0IHdoZW4gTGFiZWxTZWxlY3RvciBpc24ndCBzZXQuIEtleXMgdGhhdCBkb24ndCBleGlzdCBpbiB0aGUgaW5jb21pbmcgcG9kIGxhYmVscyB3aWxsIGJlIGlnbm9yZWQuIEEgbnVsbCBvciBlbXB0eSBsaXN0IG1lYW5zIG9ubHkgbWF0Y2ggYWdhaW5zdCBsYWJlbFNlbGVjdG9yLiBcbiBUaGlzIGlzIGEgYmV0YSBmaWVsZCBhbmQgcmVxdWlyZXMgdGhlIE1hdGNoTGFiZWxLZXlzSW5Qb2RUb3BvbG9neVNwcmVhZCBmZWF0dXJlIGdhdGUgdG8gYmUgZW5hYmxlZCAoZW5hYmxlZCBieSBkZWZhdWx0KS4iLCJpdGVtcyI6eyJ0eXBlIjoic3RyaW5nIn0sInR5cGUiOiJhcnJheSIsIngta3ViZXJuZXRlcy1saXN0LXR5cGUiOiJhdG9taWMifSwibWF4U2tldyI6eyJkZXNjcmlwdGlvbiI6Ik1heFNrZXcgZGVzY3JpYmVzIHRoZSBkZWdyZWUgdG8gd2hpY2ggcG9kcyBtYXkgYmUgdW5ldmVubHkgZGlzdHJpYnV0ZWQuIFdoZW4gYHdoZW5VbnNhdGlzZmlhYmxlPURvTm90U2NoZWR1bGVgLCBpdCBpcyB0aGUgbWF4aW11bSBwZXJtaXR0ZWQgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBudW1iZXIgb2YgbWF0Y2hpbmcgcG9kcyBpbiB0aGUgdGFyZ2V0IHRvcG9sb2d5IGFuZCB0aGUgZ2xvYmFsIG1pbmltdW0uIFRoZSBnbG9iYWwgbWluaW11bSBpcyB0aGUgbWluaW11bSBudW1iZXIgb2YgbWF0Y2hpbmcgcG9kcyBpbiBhbiBlbGlnaWJsZSBkb21haW4gb3IgemVybyBpZiB0aGUgbnVtYmVyIG9mIGVsaWdpYmxlIGRvbWFpbnMgaXMgbGVzcyB0aGFuIE1pbkRvbWFpbnMuIEZvciBleGFtcGxlLCBpbiBhIDMtem9uZSBjbHVzdGVyLCBNYXhTa2V3IGlzIHNldCB0byAxLCBhbmQgcG9kcyB3aXRoIHRoZSBzYW1lIGxhYmVsU2VsZWN0b3Igc3ByZWFkIGFzIDIvMi8xOiBJbiB0aGlzIGNhc2UsIHRoZSBnbG9iYWwgbWluaW11bSBpcyAxLiB8IHpvbmUxIHwgem9uZTIgfCB6b25lMyB8IHwgIFAgUCAgfCAgUCBQICB8ICAgUCAgIHwgLSBpZiBNYXhTa2V3IGlzIDEsIGluY29taW5nIHBvZCBjYW4gb25seSBiZSBzY2hlZHVsZWQgdG8gem9uZTMgdG8gYmVjb21lIDIvMi8yOyBzY2hlZHVsaW5nIGl0IG9udG8gem9uZTEoem9uZTIpIHdvdWxkIG1ha2UgdGhlIEFjdHVhbFNrZXcoMy0xKSBvbiB6b25lMSh6b25lMikgdmlvbGF0ZSBNYXhTa2V3KDEpLiAtIGlmIE1heFNrZXcgaXMgMiwgaW5jb21pbmcgcG9kIGNhbiBiZSBzY2hlZHVsZWQgb250byBhbnkgem9uZS4gV2hlbiBgd2hlblVuc2F0aXNmaWFibGU9U2NoZWR1bGVBbnl3YXlgLCBpdCBpcyB1c2VkIHRvIGdpdmUgaGlnaGVyIHByZWNlZGVuY2UgdG8gdG9wb2xvZ2llcyB0aGF0IHNhdGlzZnkgaXQuIEl0J3MgYSByZXF1aXJlZCBmaWVsZC4gRGVmYXVsdCB2YWx1ZSBpcyAxIGFuZCAwIGlzIG5vdCBhbGxvd2VkLiIsImZvcm1hdCI6ImludDMyIiwidHlwZSI6ImludGVnZXIifSwibWluRG9tYWlucyI6eyJkZXNjcmlwdGlvbiI6Ik1pbkRvbWFpbnMgaW5kaWNhdGVzIGEgbWluaW11bSBudW1iZXIgb2YgZWxpZ2libGUgZG9tYWlucy4gV2hlbiB0aGUgbnVtYmVyIG9mIGVsaWdpYmxlIGRvbWFpbnMgd2l0aCBtYXRjaGluZyB0b3BvbG9neSBrZXlzIGlzIGxlc3MgdGhhbiBtaW5Eb21haW5zLCBQb2QgVG9wb2xvZ3kgU3ByZWFkIHRyZWF0cyBcImdsb2JhbCBtaW5pbXVtXCIgYXMgMCwgYW5kIHRoZW4gdGhlIGNhbGN1bGF0aW9uIG9mIFNrZXcgaXMgcGVyZm9ybWVkLiBBbmQgd2hlbiB0aGUgbnVtYmVyIG9mIGVsaWdpYmxlIGRvbWFpbnMgd2l0aCBtYXRjaGluZyB0b3BvbG9neSBrZXlzIGVxdWFscyBvciBncmVhdGVyIHRoYW4gbWluRG9tYWlucywgdGhpcyB2YWx1ZSBoYXMgbm8gZWZmZWN0IG9uIHNjaGVkdWxpbmcuIEFzIGEgcmVzdWx0LCB3aGVuIHRoZSBudW1iZXIgb2YgZWxpZ2libGUgZG9tYWlucyBpcyBsZXNzIHRoYW4gbWluRG9tYWlucywgc2NoZWR1bGVyIHdvbid0IHNjaGVkdWxlIG1vcmUgdGhhbiBtYXhTa2V3IFBvZHMgdG8gdGhvc2UgZG9tYWlucy4gSWYgdmFsdWUgaXMgbmlsLCB0aGUgY29uc3RyYWludCBiZWhhdmVzIGFzIGlmIE1pbkRvbWFpbnMgaXMgZXF1YWwgdG8gMS4gVmFsaWQgdmFsdWVzIGFyZSBpbnRlZ2VycyBncmVhdGVyIHRoYW4gMC4gV2hlbiB2YWx1ZSBpcyBub3QgbmlsLCBXaGVuVW5zYXRpc2ZpYWJsZSBtdXN0IGJlIERvTm90U2NoZWR1bGUuIFxuIEZvciBleGFtcGxlLCBpbiBhIDMtem9uZSBjbHVzdGVyLCBNYXhTa2V3IGlzIHNldCB0byAyLCBNaW5Eb21haW5zIGlzIHNldCB0byA1IGFuZCBwb2RzIHdpdGggdGhlIHNhbWUgbGFiZWxTZWxlY3RvciBzcHJlYWQgYXMgMi8yLzI6IHwgem9uZTEgfCB6b25lMiB8IHpvbmUzIHwgfCAgUCBQICB8ICBQIFAgIHwgIFAgUCAgfCBUaGUgbnVtYmVyIG9mIGRvbWFpbnMgaXMgbGVzcyB0aGFuIDUoTWluRG9tYWlucyksIHNvIFwiZ2xvYmFsIG1pbmltdW1cIiBpcyB0cmVhdGVkIGFzIDAuIEluIHRoaXMgc2l0dWF0aW9uLCBuZXcgcG9kIHdpdGggdGhlIHNhbWUgbGFiZWxTZWxlY3RvciBjYW5ub3QgYmUgc2NoZWR1bGVkLCBiZWNhdXNlIGNvbXB1dGVkIHNrZXcgd2lsbCBiZSAzKDMgLSAwKSBpZiBuZXcgUG9kIGlzIHNjaGVkdWxlZCB0byBhbnkgb2YgdGhlIHRocmVlIHpvbmVzLCBpdCB3aWxsIHZpb2xhdGUgTWF4U2tldy4gXG4gVGhpcyBpcyBhIGJldGEgZmllbGQgYW5kIHJlcXVpcmVzIHRoZSBNaW5Eb21haW5zSW5Qb2RUb3BvbG9neVNwcmVhZCBmZWF0dXJlIGdhdGUgdG8gYmUgZW5hYmxlZCAoZW5hYmxlZCBieSBkZWZhdWx0KS4iLCJmb3JtYXQiOiJpbnQzMiIsInR5cGUiOiJpbnRlZ2VyIn0sIm5vZGVBZmZpbml0eVBvbGljeSI6eyJkZXNjcmlwdGlvbiI6Ik5vZGVBZmZpbml0eVBvbGljeSBpbmRpY2F0ZXMgaG93IHdlIHdpbGwgdHJlYXQgUG9kJ3Mgbm9kZUFmZmluaXR5L25vZGVTZWxlY3RvciB3aGVuIGNhbGN1bGF0aW5nIHBvZCB0b3BvbG9neSBzcHJlYWQgc2tldy4gT3B0aW9ucyBhcmU6IC0gSG9ub3I6IG9ubHkgbm9kZXMgbWF0Y2hpbmcgbm9kZUFmZmluaXR5L25vZGVTZWxlY3RvciBhcmUgaW5jbHVkZWQgaW4gdGhlIGNhbGN1bGF0aW9ucy4gLSBJZ25vcmU6IG5vZGVBZmZpbml0eS9ub2RlU2VsZWN0b3IgYXJlIGlnbm9yZWQuIEFsbCBub2RlcyBhcmUgaW5jbHVkZWQgaW4gdGhlIGNhbGN1bGF0aW9ucy4gXG4gSWYgdGhpcyB2YWx1ZSBpcyBuaWwsIHRoZSBiZWhhdmlvciBpcyBlcXVpdmFsZW50IHRvIHRoZSBIb25vciBwb2xpY3kuIFRoaXMgaXMgYSBiZXRhLWxldmVsIGZlYXR1cmUgZGVmYXVsdCBlbmFibGVkIGJ5IHRoZSBOb2RlSW5jbHVzaW9uUG9saWN5SW5Qb2RUb3BvbG9neVNwcmVhZCBmZWF0dXJlIGZsYWcuIiwidHlwZSI6InN0cmluZyJ9LCJub2RlVGFpbnRzUG9saWN5Ijp7ImRlc2NyaXB0aW9uIjoiTm9kZVRhaW50c1BvbGljeSBpbmRpY2F0ZXMgaG93IHdlIHdpbGwgdHJlYXQgbm9kZSB0YWludHMgd2hlbiBjYWxjdWxhdGluZyBwb2QgdG9wb2xvZ3kgc3ByZWFkIHNrZXcuIE9wdGlvbnMgYXJlOiAtIEhvbm9yOiBub2RlcyB3aXRob3V0IHRhaW50cywgYWxvbmcgd2l0aCB0YWludGVkIG5vZGVzIGZvciB3aGljaCB0aGUgaW5jb21pbmcgcG9kIGhhcyBhIHRvbGVyYXRpb24sIGFyZSBpbmNsdWRlZC4gLSBJZ25vcmU6IG5vZGUgdGFpbnRzIGFyZSBpZ25vcmVkLiBBbGwgbm9kZXMgYXJlIGluY2x1ZGVkLiBcbiBJZiB0aGlzIHZhbHVlIGlzIG5pbCwgdGhlIGJlaGF2aW9yIGlzIGVxdWl2YWxlbnQgdG8gdGhlIElnbm9yZSBwb2xpY3kuIFRoaXMgaXMgYSBiZXRhLWxldmVsIGZlYXR1cmUgZGVmYXVsdCBlbmFibGVkIGJ5IHRoZSBOb2RlSW5jbHVzaW9uUG9saWN5SW5Qb2RUb3BvbG9neVNwcmVhZCBmZWF0dXJlIGZsYWcuIiwidHlwZSI6InN0cmluZyJ9LCJ0b3BvbG9neUtleSI6eyJkZXNjcmlwdGlvbiI6IlRvcG9sb2d5S2V5IGlzIHRoZSBrZXkgb2Ygbm9kZSBsYWJlbHMuIE5vZGVzIHRoYXQgaGF2ZSBhIGxhYmVsIHdpdGggdGhpcyBrZXkgYW5kIGlkZW50aWNhbCB2YWx1ZXMgYXJlIGNvbnNpZGVyZWQgdG8gYmUgaW4gdGhlIHNhbWUgdG9wb2xvZ3kuIFdlIGNvbnNpZGVyIGVhY2ggXHUwMDNja2V5LCB2YWx1ZVx1MDAzZSBhcyBhIFwiYnVja2V0XCIsIGFuZCB0cnkgdG8gcHV0IGJhbGFuY2VkIG51bWJlciBvZiBwb2RzIGludG8gZWFjaCBidWNrZXQuIFdlIGRlZmluZSBhIGRvbWFpbiBhcyBhIHBhcnRpY3VsYXIgaW5zdGFuY2Ugb2YgYSB0b3BvbG9neS4gQWxzbywgd2UgZGVmaW5lIGFuIGVsaWdpYmxlIGRvbWFpbiBhcyBhIGRvbWFpbiB3aG9zZSBub2RlcyBtZWV0IHRoZSByZXF1aXJlbWVudHMgb2Ygbm9kZUFmZmluaXR5UG9saWN5IGFuZCBub2RlVGFpbnRzUG9saWN5LiBlLmcuIElmIFRvcG9sb2d5S2V5IGlzIFwia3ViZXJuZXRlcy5pby9ob3N0bmFtZVwiLCBlYWNoIE5vZGUgaXMgYSBkb21haW4gb2YgdGhhdCB0b3BvbG9neS4gQW5kLCBpZiBUb3BvbG9neUtleSBpcyBcInRvcG9sb2d5Lmt1YmVybmV0ZXMuaW8vem9uZVwiLCBlYWNoIHpvbmUgaXMgYSBkb21haW4gb2YgdGhhdCB0b3BvbG9neS4gSXQncyBhIHJlcXVpcmVkIGZpZWxkLiIsInR5cGUiOiJzdHJpbmcifSwid2hlblVuc2F0aXNmaWFibGUiOnsiZGVzY3JpcHRpb24iOiJXaGVuVW5zYXRpc2ZpYWJsZSBpbmRpY2F0ZXMgaG93IHRvIGRlYWwgd2l0aCBhIHBvZCBpZiBpdCBkb2Vzbid0IHNhdGlzZnkgdGhlIHNwcmVhZCBjb25zdHJhaW50LiAtIERvTm90U2NoZWR1bGUgKGRlZmF1bHQpIHRlbGxzIHRoZSBzY2hlZHVsZXIgbm90IHRvIHNjaGVkdWxlIGl0LiAtIFNjaGVkdWxlQW55d2F5IHRlbGxzIHRoZSBzY2hlZHVsZXIgdG8gc2NoZWR1bGUgdGhlIHBvZCBpbiBhbnkgbG9jYXRpb24sIGJ1dCBnaXZpbmcgaGlnaGVyIHByZWNlZGVuY2UgdG8gdG9wb2xvZ2llcyB0aGF0IHdvdWxkIGhlbHAgcmVkdWNlIHRoZSBza2V3LiBBIGNvbnN0cmFpbnQgaXMgY29uc2lkZXJlZCBcIlVuc2F0aXNmaWFibGVcIiBmb3IgYW4gaW5jb21pbmcgcG9kIGlmIGFuZCBvbmx5IGlmIGV2ZXJ5IHBvc3NpYmxlIG5vZGUgYXNzaWdubWVudCBmb3IgdGhhdCBwb2Qgd291bGQgdmlvbGF0ZSBcIk1heFNrZXdcIiBvbiBzb21lIHRvcG9sb2d5LiBGb3IgZXhhbXBsZSwgaW4gYSAzLXpvbmUgY2x1c3RlciwgTWF4U2tldyBpcyBzZXQgdG8gMSwgYW5kIHBvZHMgd2l0aCB0aGUgc2FtZSBsYWJlbFNlbGVjdG9yIHNwcmVhZCBhcyAzLzEvMTogfCB6b25lMSB8IHpvbmUyIHwgem9uZTMgfCB8IFAgUCBQIHwgICBQICAgfCAgIFAgICB8IElmIFdoZW5VbnNhdGlzZmlhYmxlIGlzIHNldCB0byBEb05vdFNjaGVkdWxlLCBpbmNvbWluZyBwb2QgY2FuIG9ubHkgYmUgc2NoZWR1bGVkIHRvIHpvbmUyKHpvbmUzKSB0byBiZWNvbWUgMy8yLzEoMy8xLzIpIGFzIEFjdHVhbFNrZXcoMi0xKSBvbiB6b25lMih6b25lMykgc2F0aXNmaWVzIE1heFNrZXcoMSkuIEluIG90aGVyIHdvcmRzLCB0aGUgY2x1c3RlciBjYW4gc3RpbGwgYmUgaW1iYWxhbmNlZCwgYnV0IHNjaGVkdWxlciB3b24ndCBtYWtlIGl0ICptb3JlKiBpbWJhbGFuY2VkLiBJdCdzIGEgcmVxdWlyZWQgZmllbGQuIiwidHlwZSI6InN0cmluZyJ9fSwicmVxdWlyZWQiOlsibWF4U2tldyIsInRvcG9sb2d5S2V5Iiwid2hlblVuc2F0aXNmaWFibGUiXSwidHlwZSI6Im9iamVjdCJ9LCJ0eXBlIjoiYXJyYXkifX0sInR5cGUiOiJvYmplY3QifSwiZGVzY3JpcHRpb24iOiJQbGFjZW1lbnQgaXMgb3B0aW9uYWwgYW5kIHVzZWQgdG8gc3BlY2lmeSBwbGFjZW1lbnRzIG9mIE9DUyBjb21wb25lbnRzIGV4cGxpY2l0bHkiLCJ0eXBlIjoib2JqZWN0In0sInByb3ZpZGVyQVBJU2VydmVyU2VydmljZVR5cGUiOnsiZGVzY3JpcHRpb24iOiJQcm92aWRlckFQSVNlcnZlclNlcnZpY2VUeXBlIEluZGljYXRlcyB0aGUgU2VydmljZVR5cGUgZm9yIE9DUyBQcm92aWRlciBBUEkgU2VydmVyIFNlcnZpY2UuIFRoZSBzdXBwb3J0ZWQgdmFsdWVzIGFyZSBOb2RlUG9ydCBvciBMb2FkQmFsYW5jZXIuIFRoZSBkZWZhdWx0IFNlcnZpY2VUeXBlIGlzIE5vZGVQb3J0IGlmIHRoZSB2YWx1ZSBpcyBlbXB0eS4gVGhpcyB3aWxsIG9ubHkgYmUgdXNlZCB3aGVuIEFsbG93UmVtb3RlU3RvcmFnZUNvbnN1bWVycyBpcyBzZXQgdG8gdHJ1ZSIsInR5cGUiOiJzdHJpbmcifSwicmVzb3VyY2VQcm9maWxlIjp7ImRlc2NyaXB0aW9uIjoiUmVzb3VyY2UgUHJvZmlsZSBjYW4gYmUgdXNlZCB0byBjaG9vc2UgZnJvbSBhIHNldCBvZiBwcmVkZWZpbmVkIHJlc291cmNlIHByb2ZpbGVzIGZvciB0aGUgY2VwaCBkYWVtb25zLiBXZSBoYXZlIDMgcHJvZmlsZXMgbGVhbjogc3VpdGFibGUgZm9yIGNsdXN0ZXJzIHdpdGggbGltaXRlZCByZXNvdXJjZXMsIGJhbGFuY2VkOiBzdWl0YWJsZSBmb3IgbW9zdCB1c2UgY2FzZXMsIHBlcmZvcm1hbmNlOiBzdWl0YWJsZSBmb3IgY2x1c3RlcnMgd2l0aCBoaWdoIGFtb3VudCBvZiByZXNvdXJjZXMuIiwiZW51bSI6WyJsZWFuIiwiTGVhbiIsImJhbGFuY2VkIiwiQmFsYW5jZWQiLCJwZXJmb3JtYW5jZSIsIlBlcmZvcm1hbmNlIl0sInR5cGUiOiJzdHJpbmcifSwicmVzb3VyY2VzIjp7ImFkZGl0aW9uYWxQcm9wZXJ0aWVzIjp7ImRlc2NyaXB0aW9uIjoiUmVzb3VyY2VSZXF1aXJlbWVudHMgZGVzY3JpYmVzIHRoZSBjb21wdXRlIHJlc291cmNlIHJlcXVpcmVtZW50cy4iLCJwcm9wZXJ0aWVzIjp7ImNsYWltcyI6eyJkZXNjcmlwdGlvbiI6IkNsYWltcyBsaXN0cyB0aGUgbmFtZXMgb2YgcmVzb3VyY2VzLCBkZWZpbmVkIGluIHNwZWMucmVzb3VyY2VDbGFpbXMsIHRoYXQgYXJlIHVzZWQgYnkgdGhpcyBjb250YWluZXIuIFxuIFRoaXMgaXMgYW4gYWxwaGEgZmllbGQgYW5kIHJlcXVpcmVzIGVuYWJsaW5nIHRoZSBEeW5hbWljUmVzb3VyY2VBbGxvY2F0aW9uIGZlYXR1cmUgZ2F0ZS4gXG4gVGhpcyBmaWVsZCBpcyBpbW11dGFibGUuIEl0IGNhbiBvbmx5IGJlIHNldCBmb3IgY29udGFpbmVycy4iLCJpdGVtcyI6eyJkZXNjcmlwdGlvbiI6IlJlc291cmNlQ2xhaW0gcmVmZXJlbmNlcyBvbmUgZW50cnkgaW4gUG9kU3BlYy5SZXNvdXJjZUNsYWltcy4iLCJwcm9wZXJ0aWVzIjp7Im5hbWUiOnsiZGVzY3JpcHRpb24iOiJOYW1lIG11c3QgbWF0Y2ggdGhlIG5hbWUgb2Ygb25lIGVudHJ5IGluIHBvZC5zcGVjLnJlc291cmNlQ2xhaW1zIG9mIHRoZSBQb2Qgd2hlcmUgdGhpcyBmaWVsZCBpcyB1c2VkLiBJdCBtYWtlcyB0aGF0IHJlc291cmNlIGF2YWlsYWJsZSBpbnNpZGUgYSBjb250YWluZXIuIiwidHlwZSI6InN0cmluZyJ9fSwicmVxdWlyZWQiOlsibmFtZSJdLCJ0eXBlIjoib2JqZWN0In0sInR5cGUiOiJhcnJheSIsIngta3ViZXJuZXRlcy1saXN0LW1hcC1rZXlzIjpbIm5hbWUiXSwieC1rdWJlcm5ldGVzLWxpc3QtdHlwZSI6Im1hcCJ9LCJsaW1pdHMiOnsiYWRkaXRpb25hbFByb3BlcnRpZXMiOnsiYW55T2YiOlt7InR5cGUiOiJpbnRlZ2VyIn0seyJ0eXBlIjoic3RyaW5nIn1dLCJwYXR0ZXJuIjoiXihcXCt8LSk/KChbMC05XSsoXFwuWzAtOV0qKT8pfChcXC5bMC05XSspKSgoW0tNR1RQRV1pKXxbbnVta01HVFBFXXwoW2VFXShcXCt8LSk/KChbMC05XSsoXFwuWzAtOV0qKT8pfChcXC5bMC05XSspKSkpPyQiLCJ4LWt1YmVybmV0ZXMtaW50LW9yLXN0cmluZyI6dHJ1ZX0sImRlc2NyaXB0aW9uIjoiTGltaXRzIGRlc2NyaWJlcyB0aGUgbWF4aW11bSBhbW91bnQgb2YgY29tcHV0ZSByZXNvdXJjZXMgYWxsb3dlZC4gTW9yZSBpbmZvOiBodHRwczovL2t1YmVybmV0ZXMuaW8vZG9jcy9jb25jZXB0cy9jb25maWd1cmF0aW9uL21hbmFnZS1yZXNvdXJjZXMtY29udGFpbmVycy8iLCJ0eXBlIjoib2JqZWN0In0sInJlcXVlc3RzIjp7ImFkZGl0aW9uYWxQcm9wZXJ0aWVzIjp7ImFueU9mIjpbeyJ0eXBlIjoiaW50ZWdlciJ9LHsidHlwZSI6InN0cmluZyJ9XSwicGF0dGVybiI6Il4oXFwrfC0pPygoWzAtOV0rKFxcLlswLTldKik/KXwoXFwuWzAtOV0rKSkoKFtLTUdUUEVdaSl8W251bWtNR1RQRV18KFtlRV0oXFwrfC0pPygoWzAtOV0rKFxcLlswLTldKik/KXwoXFwuWzAtOV0rKSkpKT8kIiwieC1rdWJlcm5ldGVzLWludC1vci1zdHJpbmciOnRydWV9LCJkZXNjcmlwdGlvbiI6IlJlcXVlc3RzIGRlc2NyaWJlcyB0aGUgbWluaW11bSBhbW91bnQgb2YgY29tcHV0ZSByZXNvdXJjZXMgcmVxdWlyZWQuIElmIFJlcXVlc3RzIGlzIG9taXR0ZWQgZm9yIGEgY29udGFpbmVyLCBpdCBkZWZhdWx0cyB0byBMaW1pdHMgaWYgdGhhdCBpcyBleHBsaWNpdGx5IHNwZWNpZmllZCwgb3RoZXJ3aXNlIHRvIGFuIGltcGxlbWVudGF0aW9uLWRlZmluZWQgdmFsdWUuIFJlcXVlc3RzIGNhbm5vdCBleGNlZWQgTGltaXRzLiBNb3JlIGluZm86IGh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL2NvbmNlcHRzL2NvbmZpZ3VyYXRpb24vbWFuYWdlLXJlc291cmNlcy1jb250YWluZXJzLyIsInR5cGUiOiJvYmplY3QifX0sInR5cGUiOiJvYmplY3QifSwiZGVzY3JpcHRpb24iOiJSZXNvdXJjZXMgZm9sbG93cyB0aGUgY29udmVudGlvbnMgb2YgYW5kIGlzIG1hcHBlZCB0byBDZXBoQ2x1c3Rlci5TcGVjLlJlc291cmNlcyIsInR5cGUiOiJvYmplY3QifSwic3RvcmFnZURldmljZVNldHMiOnsiaXRlbXMiOnsiZGVzY3JpcHRpb24iOiJTdG9yYWdlRGV2aWNlU2V0IGRlZmluZXMgYSBzZXQgb2Ygc3RvcmFnZSBkZXZpY2VzLiBJdCBjb25maWd1cmVzIHRoZSBTdG9yYWdlQ2xhc3NEZXZpY2VTZXRzIGZpZWxkIGluIFJvb2stQ2VwaC4iLCJwcm9wZXJ0aWVzIjp7ImNvbmZpZyI6eyJkZXNjcmlwdGlvbiI6IlN0b3JhZ2VEZXZpY2VTZXRDb25maWcgZGVmaW5lcyBDZXBoIE9TRCBzcGVjaWZpYyBjb25maWcgb3B0aW9ucyBmb3IgdGhlIFN0b3JhZ2VEZXZpY2VTZXQiLCJwcm9wZXJ0aWVzIjp7InR1bmVGYXN0RGV2aWNlQ2xhc3MiOnsiZGVzY3JpcHRpb24iOiJUdW5lRmFzdERldmljZUNsYXNzIHR1bmVzIHRoZSBPU0Qgd2hlbiBydW5uaW5nIG9uIGEgZmFzdCBEZXZpY2UgQ2xhc3MiLCJ0eXBlIjoiYm9vbGVhbiJ9LCJ0dW5lU2xvd0RldmljZUNsYXNzIjp7ImRlc2NyaXB0aW9uIjoiVHVuZVNsb3dEZXZpY2VDbGFzcyB0dW5lcyB0aGUgT1NEIHdoZW4gcnVubmluZyBvbiBhIHNsb3cgRGV2aWNlIENsYXNzIiwidHlwZSI6ImJvb2xlYW4ifX0sInR5cGUiOiJvYmplY3QifSwiY291bnQiOnsiZGVzY3JpcHRpb24iOiJDb3VudCBpcyB0aGUgbnVtYmVyIG9mIGRldmljZXMgaW4gZWFjaCBTdG9yYWdlQ2xhc3NEZXZpY2VTZXQiLCJtaW5pbXVtIjoxLCJ0eXBlIjoiaW50ZWdlciJ9LCJkYXRhUFZDVGVtcGxhdGUiOnsiZGVzY3JpcHRpb24iOiJQZXJzaXN0ZW50Vm9sdW1lQ2xhaW0gaXMgYSB1c2VyJ3MgcmVxdWVzdCBmb3IgYW5kIGNsYWltIHRvIGEgcGVyc2lzdGVudCB2b2x1bWUiLCJwcm9wZXJ0aWVzIjp7ImFwaVZlcnNpb24iOnsiZGVzY3JpcHRpb24iOiJBUElWZXJzaW9uIGRlZmluZXMgdGhlIHZlcnNpb25lZCBzY2hlbWEgb2YgdGhpcyByZXByZXNlbnRhdGlvbiBvZiBhbiBvYmplY3QuIFNlcnZlcnMgc2hvdWxkIGNvbnZlcnQgcmVjb2duaXplZCBzY2hlbWFzIHRvIHRoZSBsYXRlc3QgaW50ZXJuYWwgdmFsdWUsIGFuZCBtYXkgcmVqZWN0IHVucmVjb2duaXplZCB2YWx1ZXMuIE1vcmUgaW5mbzogaHR0cHM6Ly9naXQuazhzLmlvL2NvbW11bml0eS9jb250cmlidXRvcnMvZGV2ZWwvc2lnLWFyY2hpdGVjdHVyZS9hcGktY29udmVudGlvbnMubWQjcmVzb3VyY2VzIiwidHlwZSI6InN0cmluZyJ9LCJraW5kIjp7ImRlc2NyaXB0aW9uIjoiS2luZCBpcyBhIHN0cmluZyB2YWx1ZSByZXByZXNlbnRpbmcgdGhlIFJFU1QgcmVzb3VyY2UgdGhpcyBvYmplY3QgcmVwcmVzZW50cy4gU2VydmVycyBtYXkgaW5mZXIgdGhpcyBmcm9tIHRoZSBlbmRwb2ludCB0aGUgY2xpZW50IHN1Ym1pdHMgcmVxdWVzdHMgdG8uIENhbm5vdCBiZSB1cGRhdGVkLiBJbiBDYW1lbENhc2UuIE1vcmUgaW5mbzogaHR0cHM6Ly9naXQuazhzLmlvL2NvbW11bml0eS9jb250cmlidXRvcnMvZGV2ZWwvc2lnLWFyY2hpdGVjdHVyZS9hcGktY29udmVudGlvbnMubWQjdHlwZXMta2luZHMiLCJ0eXBlIjoic3RyaW5nIn0sIm1ldGFkYXRhIjp7ImRlc2NyaXB0aW9uIjoiU3RhbmRhcmQgb2JqZWN0J3MgbWV0YWRhdGEuIE1vcmUgaW5mbzogaHR0cHM6Ly9naXQuazhzLmlvL2NvbW11bml0eS9jb250cmlidXRvcnMvZGV2ZWwvc2lnLWFyY2hpdGVjdHVyZS9hcGktY29udmVudGlvbnMubWQjbWV0YWRhdGEiLCJwcm9wZXJ0aWVzIjp7ImFubm90YXRpb25zIjp7ImFkZGl0aW9uYWxQcm9wZXJ0aWVzIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6Im9iamVjdCJ9LCJmaW5hbGl6ZXJzIjp7Iml0ZW1zIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6ImFycmF5In0sImxhYmVscyI6eyJhZGRpdGlvbmFsUHJvcGVydGllcyI6eyJ0eXBlIjoic3RyaW5nIn0sInR5cGUiOiJvYmplY3QifSwibmFtZSI6eyJ0eXBlIjoic3RyaW5nIn0sIm5hbWVzcGFjZSI6eyJ0eXBlIjoic3RyaW5nIn19LCJ0eXBlIjoib2JqZWN0In0sInNwZWMiOnsiZGVzY3JpcHRpb24iOiJzcGVjIGRlZmluZXMgdGhlIGRlc2lyZWQgY2hhcmFjdGVyaXN0aWNzIG9mIGEgdm9sdW1lIHJlcXVlc3RlZCBieSBhIHBvZCBhdXRob3IuIE1vcmUgaW5mbzogaHR0cHM6Ly9rdWJlcm5ldGVzLmlvL2RvY3MvY29uY2VwdHMvc3RvcmFnZS9wZXJzaXN0ZW50LXZvbHVtZXMjcGVyc2lzdGVudHZvbHVtZWNsYWltcyIsInByb3BlcnRpZXMiOnsiYWNjZXNzTW9kZXMiOnsiZGVzY3JpcHRpb24iOiJhY2Nlc3NNb2RlcyBjb250YWlucyB0aGUgZGVzaXJlZCBhY2Nlc3MgbW9kZXMgdGhlIHZvbHVtZSBzaG91bGQgaGF2ZS4gTW9yZSBpbmZvOiBodHRwczovL2t1YmVybmV0ZXMuaW8vZG9jcy9jb25jZXB0cy9zdG9yYWdlL3BlcnNpc3RlbnQtdm9sdW1lcyNhY2Nlc3MtbW9kZXMtMSIsIml0ZW1zIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6ImFycmF5In0sImRhdGFTb3VyY2UiOnsiZGVzY3JpcHRpb24iOiJkYXRhU291cmNlIGZpZWxkIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgZWl0aGVyOiAqIEFuIGV4aXN0aW5nIFZvbHVtZVNuYXBzaG90IG9iamVjdCAoc25hcHNob3Quc3RvcmFnZS5rOHMuaW8vVm9sdW1lU25hcHNob3QpICogQW4gZXhpc3RpbmcgUFZDIChQZXJzaXN0ZW50Vm9sdW1lQ2xhaW0pIElmIHRoZSBwcm92aXNpb25lciBvciBhbiBleHRlcm5hbCBjb250cm9sbGVyIGNhbiBzdXBwb3J0IHRoZSBzcGVjaWZpZWQgZGF0YSBzb3VyY2UsIGl0IHdpbGwgY3JlYXRlIGEgbmV3IHZvbHVtZSBiYXNlZCBvbiB0aGUgY29udGVudHMgb2YgdGhlIHNwZWNpZmllZCBkYXRhIHNvdXJjZS4gV2hlbiB0aGUgQW55Vm9sdW1lRGF0YVNvdXJjZSBmZWF0dXJlIGdhdGUgaXMgZW5hYmxlZCwgZGF0YVNvdXJjZSBjb250ZW50cyB3aWxsIGJlIGNvcGllZCB0byBkYXRhU291cmNlUmVmLCBhbmQgZGF0YVNvdXJjZVJlZiBjb250ZW50cyB3aWxsIGJlIGNvcGllZCB0byBkYXRhU291cmNlIHdoZW4gZGF0YVNvdXJjZVJlZi5uYW1lc3BhY2UgaXMgbm90IHNwZWNpZmllZC4gSWYgdGhlIG5hbWVzcGFjZSBpcyBzcGVjaWZpZWQsIHRoZW4gZGF0YVNvdXJjZVJlZiB3aWxsIG5vdCBiZSBjb3BpZWQgdG8gZGF0YVNvdXJjZS4iLCJwcm9wZXJ0aWVzIjp7ImFwaUdyb3VwIjp7ImRlc2NyaXB0aW9uIjoiQVBJR3JvdXAgaXMgdGhlIGdyb3VwIGZvciB0aGUgcmVzb3VyY2UgYmVpbmcgcmVmZXJlbmNlZC4gSWYgQVBJR3JvdXAgaXMgbm90IHNwZWNpZmllZCwgdGhlIHNwZWNpZmllZCBLaW5kIG11c3QgYmUgaW4gdGhlIGNvcmUgQVBJIGdyb3VwLiBGb3IgYW55IG90aGVyIHRoaXJkLXBhcnR5IHR5cGVzLCBBUElHcm91cCBpcyByZXF1aXJlZC4iLCJ0eXBlIjoic3RyaW5nIn0sImtpbmQiOnsiZGVzY3JpcHRpb24iOiJLaW5kIGlzIHRoZSB0eXBlIG9mIHJlc291cmNlIGJlaW5nIHJlZmVyZW5jZWQiLCJ0eXBlIjoic3RyaW5nIn0sIm5hbWUiOnsiZGVzY3JpcHRpb24iOiJOYW1lIGlzIHRoZSBuYW1lIG9mIHJlc291cmNlIGJlaW5nIHJlZmVyZW5jZWQiLCJ0eXBlIjoic3RyaW5nIn19LCJyZXF1aXJlZCI6WyJraW5kIiwibmFtZSJdLCJ0eXBlIjoib2JqZWN0IiwieC1rdWJlcm5ldGVzLW1hcC10eXBlIjoiYXRvbWljIn0sImRhdGFTb3VyY2VSZWYiOnsiZGVzY3JpcHRpb24iOiJkYXRhU291cmNlUmVmIHNwZWNpZmllcyB0aGUgb2JqZWN0IGZyb20gd2hpY2ggdG8gcG9wdWxhdGUgdGhlIHZvbHVtZSB3aXRoIGRhdGEsIGlmIGEgbm9uLWVtcHR5IHZvbHVtZSBpcyBkZXNpcmVkLiBUaGlzIG1heSBiZSBhbnkgb2JqZWN0IGZyb20gYSBub24tZW1wdHkgQVBJIGdyb3VwIChub24gY29yZSBvYmplY3QpIG9yIGEgUGVyc2lzdGVudFZvbHVtZUNsYWltIG9iamVjdC4gV2hlbiB0aGlzIGZpZWxkIGlzIHNwZWNpZmllZCwgdm9sdW1lIGJpbmRpbmcgd2lsbCBvbmx5IHN1Y2NlZWQgaWYgdGhlIHR5cGUgb2YgdGhlIHNwZWNpZmllZCBvYmplY3QgbWF0Y2hlcyBzb21lIGluc3RhbGxlZCB2b2x1bWUgcG9wdWxhdG9yIG9yIGR5bmFtaWMgcHJvdmlzaW9uZXIuIFRoaXMgZmllbGQgd2lsbCByZXBsYWNlIHRoZSBmdW5jdGlvbmFsaXR5IG9mIHRoZSBkYXRhU291cmNlIGZpZWxkIGFuZCBhcyBzdWNoIGlmIGJvdGggZmllbGRzIGFyZSBub24tZW1wdHksIHRoZXkgbXVzdCBoYXZlIHRoZSBzYW1lIHZhbHVlLiBGb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHksIHdoZW4gbmFtZXNwYWNlIGlzbid0IHNwZWNpZmllZCBpbiBkYXRhU291cmNlUmVmLCBib3RoIGZpZWxkcyAoZGF0YVNvdXJjZSBhbmQgZGF0YVNvdXJjZVJlZikgd2lsbCBiZSBzZXQgdG8gdGhlIHNhbWUgdmFsdWUgYXV0b21hdGljYWxseSBpZiBvbmUgb2YgdGhlbSBpcyBlbXB0eSBhbmQgdGhlIG90aGVyIGlzIG5vbi1lbXB0eS4gV2hlbiBuYW1lc3BhY2UgaXMgc3BlY2lmaWVkIGluIGRhdGFTb3VyY2VSZWYsIGRhdGFTb3VyY2UgaXNuJ3Qgc2V0IHRvIHRoZSBzYW1lIHZhbHVlIGFuZCBtdXN0IGJlIGVtcHR5LiBUaGVyZSBhcmUgdGhyZWUgaW1wb3J0YW50IGRpZmZlcmVuY2VzIGJldHdlZW4gZGF0YVNvdXJjZSBhbmQgZGF0YVNvdXJjZVJlZjogKiBXaGlsZSBkYXRhU291cmNlIG9ubHkgYWxsb3dzIHR3byBzcGVjaWZpYyB0eXBlcyBvZiBvYmplY3RzLCBkYXRhU291cmNlUmVmIGFsbG93cyBhbnkgbm9uLWNvcmUgb2JqZWN0LCBhcyB3ZWxsIGFzIFBlcnNpc3RlbnRWb2x1bWVDbGFpbSBvYmplY3RzLiAqIFdoaWxlIGRhdGFTb3VyY2UgaWdub3JlcyBkaXNhbGxvd2VkIHZhbHVlcyAoZHJvcHBpbmcgdGhlbSksIGRhdGFTb3VyY2VSZWYgcHJlc2VydmVzIGFsbCB2YWx1ZXMsIGFuZCBnZW5lcmF0ZXMgYW4gZXJyb3IgaWYgYSBkaXNhbGxvd2VkIHZhbHVlIGlzIHNwZWNpZmllZC4gKiBXaGlsZSBkYXRhU291cmNlIG9ubHkgYWxsb3dzIGxvY2FsIG9iamVjdHMsIGRhdGFTb3VyY2VSZWYgYWxsb3dzIG9iamVjdHMgaW4gYW55IG5hbWVzcGFjZXMuIChCZXRhKSBVc2luZyB0aGlzIGZpZWxkIHJlcXVpcmVzIHRoZSBBbnlWb2x1bWVEYXRhU291cmNlIGZlYXR1cmUgZ2F0ZSB0byBiZSBlbmFibGVkLiAoQWxwaGEpIFVzaW5nIHRoZSBuYW1lc3BhY2UgZmllbGQgb2YgZGF0YVNvdXJjZVJlZiByZXF1aXJlcyB0aGUgQ3Jvc3NOYW1lc3BhY2VWb2x1bWVEYXRhU291cmNlIGZlYXR1cmUgZ2F0ZSB0byBiZSBlbmFibGVkLiIsInByb3BlcnRpZXMiOnsiYXBpR3JvdXAiOnsiZGVzY3JpcHRpb24iOiJBUElHcm91cCBpcyB0aGUgZ3JvdXAgZm9yIHRoZSByZXNvdXJjZSBiZWluZyByZWZlcmVuY2VkLiBJZiBBUElHcm91cCBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgc3BlY2lmaWVkIEtpbmQgbXVzdCBiZSBpbiB0aGUgY29yZSBBUEkgZ3JvdXAuIEZvciBhbnkgb3RoZXIgdGhpcmQtcGFydHkgdHlwZXMsIEFQSUdyb3VwIGlzIHJlcXVpcmVkLiIsInR5cGUiOiJzdHJpbmcifSwia2luZCI6eyJkZXNjcmlwdGlvbiI6IktpbmQgaXMgdGhlIHR5cGUgb2YgcmVzb3VyY2UgYmVpbmcgcmVmZXJlbmNlZCIsInR5cGUiOiJzdHJpbmcifSwibmFtZSI6eyJkZXNjcmlwdGlvbiI6Ik5hbWUgaXMgdGhlIG5hbWUgb2YgcmVzb3VyY2UgYmVpbmcgcmVmZXJlbmNlZCIsInR5cGUiOiJzdHJpbmcifSwibmFtZXNwYWNlIjp7ImRlc2NyaXB0aW9uIjoiTmFtZXNwYWNlIGlzIHRoZSBuYW1lc3BhY2Ugb2YgcmVzb3VyY2UgYmVpbmcgcmVmZXJlbmNlZCBOb3RlIHRoYXQgd2hlbiBhIG5hbWVzcGFjZSBpcyBzcGVjaWZpZWQsIGEgZ2F0ZXdheS5uZXR3b3JraW5nLms4cy5pby9SZWZlcmVuY2VHcmFudCBvYmplY3QgaXMgcmVxdWlyZWQgaW4gdGhlIHJlZmVyZW50IG5hbWVzcGFjZSB0byBhbGxvdyB0aGF0IG5hbWVzcGFjZSdzIG93bmVyIHRvIGFjY2VwdCB0aGUgcmVmZXJlbmNlLiBTZWUgdGhlIFJlZmVyZW5jZUdyYW50IGRvY3VtZW50YXRpb24gZm9yIGRldGFpbHMuIChBbHBoYSkgVGhpcyBmaWVsZCByZXF1aXJlcyB0aGUgQ3Jvc3NOYW1lc3BhY2VWb2x1bWVEYXRhU291cmNlIGZlYXR1cmUgZ2F0ZSB0byBiZSBlbmFibGVkLiIsInR5cGUiOiJzdHJpbmcifX0sInJlcXVpcmVkIjpbImtpbmQiLCJuYW1lIl0sInR5cGUiOiJvYmplY3QifSwicmVzb3VyY2VzIjp7ImRlc2NyaXB0aW9uIjoicmVzb3VyY2VzIHJlcHJlc2VudHMgdGhlIG1pbmltdW0gcmVzb3VyY2VzIHRoZSB2b2x1bWUgc2hvdWxkIGhhdmUuIElmIFJlY292ZXJWb2x1bWVFeHBhbnNpb25GYWlsdXJlIGZlYXR1cmUgaXMgZW5hYmxlZCB1c2VycyBhcmUgYWxsb3dlZCB0byBzcGVjaWZ5IHJlc291cmNlIHJlcXVpcmVtZW50cyB0aGF0IGFyZSBsb3dlciB0aGFuIHByZXZpb3VzIHZhbHVlIGJ1dCBtdXN0IHN0aWxsIGJlIGhpZ2hlciB0aGFuIGNhcGFjaXR5IHJlY29yZGVkIGluIHRoZSBzdGF0dXMgZmllbGQgb2YgdGhlIGNsYWltLiBNb3JlIGluZm86IGh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL2NvbmNlcHRzL3N0b3JhZ2UvcGVyc2lzdGVudC12b2x1bWVzI3Jlc291cmNlcyIsInByb3BlcnRpZXMiOnsibGltaXRzIjp7ImFkZGl0aW9uYWxQcm9wZXJ0aWVzIjp7ImFueU9mIjpbeyJ0eXBlIjoiaW50ZWdlciJ9LHsidHlwZSI6InN0cmluZyJ9XSwicGF0dGVybiI6Il4oXFwrfC0pPygoWzAtOV0rKFxcLlswLTldKik/KXwoXFwuWzAtOV0rKSkoKFtLTUdUUEVdaSl8W251bWtNR1RQRV18KFtlRV0oXFwrfC0pPygoWzAtOV0rKFxcLlswLTldKik/KXwoXFwuWzAtOV0rKSkpKT8kIiwieC1rdWJlcm5ldGVzLWludC1vci1zdHJpbmciOnRydWV9LCJkZXNjcmlwdGlvbiI6IkxpbWl0cyBkZXNjcmliZXMgdGhlIG1heGltdW0gYW1vdW50IG9mIGNvbXB1dGUgcmVzb3VyY2VzIGFsbG93ZWQuIE1vcmUgaW5mbzogaHR0cHM6Ly9rdWJlcm5ldGVzLmlvL2RvY3MvY29uY2VwdHMvY29uZmlndXJhdGlvbi9tYW5hZ2UtcmVzb3VyY2VzLWNvbnRhaW5lcnMvIiwidHlwZSI6Im9iamVjdCJ9LCJyZXF1ZXN0cyI6eyJhZGRpdGlvbmFsUHJvcGVydGllcyI6eyJhbnlPZiI6W3sidHlwZSI6ImludGVnZXIifSx7InR5cGUiOiJzdHJpbmcifV0sInBhdHRlcm4iOiJeKFxcK3wtKT8oKFswLTldKyhcXC5bMC05XSopPyl8KFxcLlswLTldKykpKChbS01HVFBFXWkpfFtudW1rTUdUUEVdfChbZUVdKFxcK3wtKT8oKFswLTldKyhcXC5bMC05XSopPyl8KFxcLlswLTldKykpKSk/JCIsIngta3ViZXJuZXRlcy1pbnQtb3Itc3RyaW5nIjp0cnVlfSwiZGVzY3JpcHRpb24iOiJSZXF1ZXN0cyBkZXNjcmliZXMgdGhlIG1pbmltdW0gYW1vdW50IG9mIGNvbXB1dGUgcmVzb3VyY2VzIHJlcXVpcmVkLiBJZiBSZXF1ZXN0cyBpcyBvbWl0dGVkIGZvciBhIGNvbnRhaW5lciwgaXQgZGVmYXVsdHMgdG8gTGltaXRzIGlmIHRoYXQgaXMgZXhwbGljaXRseSBzcGVjaWZpZWQsIG90aGVyd2lzZSB0byBhbiBpbXBsZW1lbnRhdGlvbi1kZWZpbmVkIHZhbHVlLiBSZXF1ZXN0cyBjYW5ub3QgZXhjZWVkIExpbWl0cy4gTW9yZSBpbmZvOiBodHRwczovL2t1YmVybmV0ZXMuaW8vZG9jcy9jb25jZXB0cy9jb25maWd1cmF0aW9uL21hbmFnZS1yZXNvdXJjZXMtY29udGFpbmVycy8iLCJ0eXBlIjoib2JqZWN0In19LCJ0eXBlIjoib2JqZWN0In0sInNlbGVjdG9yIjp7ImRlc2NyaXB0aW9uIjoic2VsZWN0b3IgaXMgYSBsYWJlbCBxdWVyeSBvdmVyIHZvbHVtZXMgdG8gY29uc2lkZXIgZm9yIGJpbmRpbmcuIiwicHJvcGVydGllcyI6eyJtYXRjaEV4cHJlc3Npb25zIjp7ImRlc2NyaXB0aW9uIjoibWF0Y2hFeHByZXNzaW9ucyBpcyBhIGxpc3Qgb2YgbGFiZWwgc2VsZWN0b3IgcmVxdWlyZW1lbnRzLiBUaGUgcmVxdWlyZW1lbnRzIGFyZSBBTkRlZC4iLCJpdGVtcyI6eyJkZXNjcmlwdGlvbiI6IkEgbGFiZWwgc2VsZWN0b3IgcmVxdWlyZW1lbnQgaXMgYSBzZWxlY3RvciB0aGF0IGNvbnRhaW5zIHZhbHVlcywgYSBrZXksIGFuZCBhbiBvcGVyYXRvciB0aGF0IHJlbGF0ZXMgdGhlIGtleSBhbmQgdmFsdWVzLiIsInByb3BlcnRpZXMiOnsia2V5Ijp7ImRlc2NyaXB0aW9uIjoia2V5IGlzIHRoZSBsYWJlbCBrZXkgdGhhdCB0aGUgc2VsZWN0b3IgYXBwbGllcyB0by4iLCJ0eXBlIjoic3RyaW5nIn0sIm9wZXJhdG9yIjp7ImRlc2NyaXB0aW9uIjoib3BlcmF0b3IgcmVwcmVzZW50cyBhIGtleSdzIHJlbGF0aW9uc2hpcCB0byBhIHNldCBvZiB2YWx1ZXMuIFZhbGlkIG9wZXJhdG9ycyBhcmUgSW4sIE5vdEluLCBFeGlzdHMgYW5kIERvZXNOb3RFeGlzdC4iLCJ0eXBlIjoic3RyaW5nIn0sInZhbHVlcyI6eyJkZXNjcmlwdGlvbiI6InZhbHVlcyBpcyBhbiBhcnJheSBvZiBzdHJpbmcgdmFsdWVzLiBJZiB0aGUgb3BlcmF0b3IgaXMgSW4gb3IgTm90SW4sIHRoZSB2YWx1ZXMgYXJyYXkgbXVzdCBiZSBub24tZW1wdHkuIElmIHRoZSBvcGVyYXRvciBpcyBFeGlzdHMgb3IgRG9lc05vdEV4aXN0LCB0aGUgdmFsdWVzIGFycmF5IG11c3QgYmUgZW1wdHkuIFRoaXMgYXJyYXkgaXMgcmVwbGFjZWQgZHVyaW5nIGEgc3RyYXRlZ2ljIG1lcmdlIHBhdGNoLiIsIml0ZW1zIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6ImFycmF5In19LCJyZXF1aXJlZCI6WyJrZXkiLCJvcGVyYXRvciJdLCJ0eXBlIjoib2JqZWN0In0sInR5cGUiOiJhcnJheSJ9LCJtYXRjaExhYmVscyI6eyJhZGRpdGlvbmFsUHJvcGVydGllcyI6eyJ0eXBlIjoic3RyaW5nIn0sImRlc2NyaXB0aW9uIjoibWF0Y2hMYWJlbHMgaXMgYSBtYXAgb2Yge2tleSx2YWx1ZX0gcGFpcnMuIEEgc2luZ2xlIHtrZXksdmFsdWV9IGluIHRoZSBtYXRjaExhYmVscyBtYXAgaXMgZXF1aXZhbGVudCB0byBhbiBlbGVtZW50IG9mIG1hdGNoRXhwcmVzc2lvbnMsIHdob3NlIGtleSBmaWVsZCBpcyBcImtleVwiLCB0aGUgb3BlcmF0b3IgaXMgXCJJblwiLCBhbmQgdGhlIHZhbHVlcyBhcnJheSBjb250YWlucyBvbmx5IFwidmFsdWVcIi4gVGhlIHJlcXVpcmVtZW50cyBhcmUgQU5EZWQuIiwidHlwZSI6Im9iamVjdCJ9fSwidHlwZSI6Im9iamVjdCIsIngta3ViZXJuZXRlcy1tYXAtdHlwZSI6ImF0b21pYyJ9LCJzdG9yYWdlQ2xhc3NOYW1lIjp7ImRlc2NyaXB0aW9uIjoic3RvcmFnZUNsYXNzTmFtZSBpcyB0aGUgbmFtZSBvZiB0aGUgU3RvcmFnZUNsYXNzIHJlcXVpcmVkIGJ5IHRoZSBjbGFpbS4gTW9yZSBpbmZvOiBodHRwczovL2t1YmVybmV0ZXMuaW8vZG9jcy9jb25jZXB0cy9zdG9yYWdlL3BlcnNpc3RlbnQtdm9sdW1lcyNjbGFzcy0xIiwidHlwZSI6InN0cmluZyJ9LCJ2b2x1bWVBdHRyaWJ1dGVzQ2xhc3NOYW1lIjp7ImRlc2NyaXB0aW9uIjoidm9sdW1lQXR0cmlidXRlc0NsYXNzTmFtZSBtYXkgYmUgdXNlZCB0byBzZXQgdGhlIFZvbHVtZUF0dHJpYnV0ZXNDbGFzcyB1c2VkIGJ5IHRoaXMgY2xhaW0uIElmIHNwZWNpZmllZCwgdGhlIENTSSBkcml2ZXIgd2lsbCBjcmVhdGUgb3IgdXBkYXRlIHRoZSB2b2x1bWUgd2l0aCB0aGUgYXR0cmlidXRlcyBkZWZpbmVkIGluIHRoZSBjb3JyZXNwb25kaW5nIFZvbHVtZUF0dHJpYnV0ZXNDbGFzcy4gVGhpcyBoYXMgYSBkaWZmZXJlbnQgcHVycG9zZSB0aGFuIHN0b3JhZ2VDbGFzc05hbWUsIGl0IGNhbiBiZSBjaGFuZ2VkIGFmdGVyIHRoZSBjbGFpbSBpcyBjcmVhdGVkLiBBbiBlbXB0eSBzdHJpbmcgdmFsdWUgbWVhbnMgdGhhdCBubyBWb2x1bWVBdHRyaWJ1dGVzQ2xhc3Mgd2lsbCBiZSBhcHBsaWVkIHRvIHRoZSBjbGFpbSBidXQgaXQncyBub3QgYWxsb3dlZCB0byByZXNldCB0aGlzIGZpZWxkIHRvIGVtcHR5IHN0cmluZyBvbmNlIGl0IGlzIHNldC4gSWYgdW5zcGVjaWZpZWQgYW5kIHRoZSBQZXJzaXN0ZW50Vm9sdW1lQ2xhaW0gaXMgdW5ib3VuZCwgdGhlIGRlZmF1bHQgVm9sdW1lQXR0cmlidXRlc0NsYXNzIHdpbGwgYmUgc2V0IGJ5IHRoZSBwZXJzaXN0ZW50dm9sdW1lIGNvbnRyb2xsZXIgaWYgaXQgZXhpc3RzLiBJZiB0aGUgcmVzb3VyY2UgcmVmZXJyZWQgdG8gYnkgdm9sdW1lQXR0cmlidXRlc0NsYXNzIGRvZXMgbm90IGV4aXN0LCB0aGlzIFBlcnNpc3RlbnRWb2x1bWVDbGFpbSB3aWxsIGJlIHNldCB0byBhIFBlbmRpbmcgc3RhdGUsIGFzIHJlZmxlY3RlZCBieSB0aGUgbW9kaWZ5Vm9sdW1lU3RhdHVzIGZpZWxkLCB1bnRpbCBzdWNoIGFzIGEgcmVzb3VyY2UgZXhpc3RzLiBNb3JlIGluZm86IGh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL2NvbmNlcHRzL3N0b3JhZ2UvcGVyc2lzdGVudC12b2x1bWVzI3ZvbHVtZWF0dHJpYnV0ZXNjbGFzcyAoQWxwaGEpIFVzaW5nIHRoaXMgZmllbGQgcmVxdWlyZXMgdGhlIFZvbHVtZUF0dHJpYnV0ZXNDbGFzcyBmZWF0dXJlIGdhdGUgdG8gYmUgZW5hYmxlZC4iLCJ0eXBlIjoic3RyaW5nIn0sInZvbHVtZU1vZGUiOnsiZGVzY3JpcHRpb24iOiJ2b2x1bWVNb2RlIGRlZmluZXMgd2hhdCB0eXBlIG9mIHZvbHVtZSBpcyByZXF1aXJlZCBieSB0aGUgY2xhaW0uIFZhbHVlIG9mIEZpbGVzeXN0ZW0gaXMgaW1wbGllZCB3aGVuIG5vdCBpbmNsdWRlZCBpbiBjbGFpbSBzcGVjLiIsInR5cGUiOiJzdHJpbmcifSwidm9sdW1lTmFtZSI6eyJkZXNjcmlwdGlvbiI6InZvbHVtZU5hbWUgaXMgdGhlIGJpbmRpbmcgcmVmZXJlbmNlIHRvIHRoZSBQZXJzaXN0ZW50Vm9sdW1lIGJhY2tpbmcgdGhpcyBjbGFpbS4iLCJ0eXBlIjoic3RyaW5nIn19LCJ0eXBlIjoib2JqZWN0In0sInN0YXR1cyI6eyJkZXNjcmlwdGlvbiI6InN0YXR1cyByZXByZXNlbnRzIHRoZSBjdXJyZW50IGluZm9ybWF0aW9uL3N0YXR1cyBvZiBhIHBlcnNpc3RlbnQgdm9sdW1lIGNsYWltLiBSZWFkLW9ubHkuIE1vcmUgaW5mbzogaHR0cHM6Ly9rdWJlcm5ldGVzLmlvL2RvY3MvY29uY2VwdHMvc3RvcmFnZS9wZXJzaXN0ZW50LXZvbHVtZXMjcGVyc2lzdGVudHZvbHVtZWNsYWltcyIsInByb3BlcnRpZXMiOnsiYWNjZXNzTW9kZXMiOnsiZGVzY3JpcHRpb24iOiJhY2Nlc3NNb2RlcyBjb250YWlucyB0aGUgYWN0dWFsIGFjY2VzcyBtb2RlcyB0aGUgdm9sdW1lIGJhY2tpbmcgdGhlIFBWQyBoYXMuIE1vcmUgaW5mbzogaHR0cHM6Ly9rdWJlcm5ldGVzLmlvL2RvY3MvY29uY2VwdHMvc3RvcmFnZS9wZXJzaXN0ZW50LXZvbHVtZXMjYWNjZXNzLW1vZGVzLTEiLCJpdGVtcyI6eyJ0eXBlIjoic3RyaW5nIn0sInR5cGUiOiJhcnJheSJ9LCJhbGxvY2F0ZWRSZXNvdXJjZVN0YXR1c2VzIjp7ImFkZGl0aW9uYWxQcm9wZXJ0aWVzIjp7ImRlc2NyaXB0aW9uIjoiV2hlbiBhIGNvbnRyb2xsZXIgcmVjZWl2ZXMgcGVyc2lzdGVudHZvbHVtZSBjbGFpbSB1cGRhdGUgd2l0aCBDbGFpbVJlc291cmNlU3RhdHVzIGZvciBhIHJlc291cmNlIHRoYXQgaXQgZG9lcyBub3QgcmVjb2duaXplcywgdGhlbiBpdCBzaG91bGQgaWdub3JlIHRoYXQgdXBkYXRlIGFuZCBsZXQgb3RoZXIgY29udHJvbGxlcnMgaGFuZGxlIGl0LiIsInR5cGUiOiJzdHJpbmcifSwiZGVzY3JpcHRpb24iOiJhbGxvY2F0ZWRSZXNvdXJjZVN0YXR1c2VzIHN0b3JlcyBzdGF0dXMgb2YgcmVzb3VyY2UgYmVpbmcgcmVzaXplZCBmb3IgdGhlIGdpdmVuIFBWQy4gS2V5IG5hbWVzIGZvbGxvdyBzdGFuZGFyZCBLdWJlcm5ldGVzIGxhYmVsIHN5bnRheC4gVmFsaWQgdmFsdWVzIGFyZSBlaXRoZXI6ICogVW4tcHJlZml4ZWQga2V5czogLSBzdG9yYWdlIC0gdGhlIGNhcGFjaXR5IG9mIHRoZSB2b2x1bWUuICogQ3VzdG9tIHJlc291cmNlcyBtdXN0IHVzZSBpbXBsZW1lbnRhdGlvbi1kZWZpbmVkIHByZWZpeGVkIG5hbWVzIHN1Y2ggYXMgXCJleGFtcGxlLmNvbS9teS1jdXN0b20tcmVzb3VyY2VcIiBBcGFydCBmcm9tIGFib3ZlIHZhbHVlcyAtIGtleXMgdGhhdCBhcmUgdW5wcmVmaXhlZCBvciBoYXZlIGt1YmVybmV0ZXMuaW8gcHJlZml4IGFyZSBjb25zaWRlcmVkIHJlc2VydmVkIGFuZCBoZW5jZSBtYXkgbm90IGJlIHVzZWQuIFxuIENsYWltUmVzb3VyY2VTdGF0dXMgY2FuIGJlIGluIGFueSBvZiBmb2xsb3dpbmcgc3RhdGVzOiAtIENvbnRyb2xsZXJSZXNpemVJblByb2dyZXNzOiBTdGF0ZSBzZXQgd2hlbiByZXNpemUgY29udHJvbGxlciBzdGFydHMgcmVzaXppbmcgdGhlIHZvbHVtZSBpbiBjb250cm9sLXBsYW5lLiAtIENvbnRyb2xsZXJSZXNpemVGYWlsZWQ6IFN0YXRlIHNldCB3aGVuIHJlc2l6ZSBoYXMgZmFpbGVkIGluIHJlc2l6ZSBjb250cm9sbGVyIHdpdGggYSB0ZXJtaW5hbCBlcnJvci4gLSBOb2RlUmVzaXplUGVuZGluZzogU3RhdGUgc2V0IHdoZW4gcmVzaXplIGNvbnRyb2xsZXIgaGFzIGZpbmlzaGVkIHJlc2l6aW5nIHRoZSB2b2x1bWUgYnV0IGZ1cnRoZXIgcmVzaXppbmcgb2Ygdm9sdW1lIGlzIG5lZWRlZCBvbiB0aGUgbm9kZS4gLSBOb2RlUmVzaXplSW5Qcm9ncmVzczogU3RhdGUgc2V0IHdoZW4ga3ViZWxldCBzdGFydHMgcmVzaXppbmcgdGhlIHZvbHVtZS4gLSBOb2RlUmVzaXplRmFpbGVkOiBTdGF0ZSBzZXQgd2hlbiByZXNpemluZyBoYXMgZmFpbGVkIGluIGt1YmVsZXQgd2l0aCBhIHRlcm1pbmFsIGVycm9yLiBUcmFuc2llbnQgZXJyb3JzIGRvbid0IHNldCBOb2RlUmVzaXplRmFpbGVkLiBGb3IgZXhhbXBsZTogaWYgZXhwYW5kaW5nIGEgUFZDIGZvciBtb3JlIGNhcGFjaXR5IC0gdGhpcyBmaWVsZCBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgc3RhdGVzOiAtIHB2Yy5zdGF0dXMuYWxsb2NhdGVkUmVzb3VyY2VTdGF0dXNbJ3N0b3JhZ2UnXSA9IFwiQ29udHJvbGxlclJlc2l6ZUluUHJvZ3Jlc3NcIiAtIHB2Yy5zdGF0dXMuYWxsb2NhdGVkUmVzb3VyY2VTdGF0dXNbJ3N0b3JhZ2UnXSA9IFwiQ29udHJvbGxlclJlc2l6ZUZhaWxlZFwiIC0gcHZjLnN0YXR1cy5hbGxvY2F0ZWRSZXNvdXJjZVN0YXR1c1snc3RvcmFnZSddID0gXCJOb2RlUmVzaXplUGVuZGluZ1wiIC0gcHZjLnN0YXR1cy5hbGxvY2F0ZWRSZXNvdXJjZVN0YXR1c1snc3RvcmFnZSddID0gXCJOb2RlUmVzaXplSW5Qcm9ncmVzc1wiIC0gcHZjLnN0YXR1cy5hbGxvY2F0ZWRSZXNvdXJjZVN0YXR1c1snc3RvcmFnZSddID0gXCJOb2RlUmVzaXplRmFpbGVkXCIgV2hlbiB0aGlzIGZpZWxkIGlzIG5vdCBzZXQsIGl0IG1lYW5zIHRoYXQgbm8gcmVzaXplIG9wZXJhdGlvbiBpcyBpbiBwcm9ncmVzcyBmb3IgdGhlIGdpdmVuIFBWQy4gXG4gQSBjb250cm9sbGVyIHRoYXQgcmVjZWl2ZXMgUFZDIHVwZGF0ZSB3aXRoIHByZXZpb3VzbHkgdW5rbm93biByZXNvdXJjZU5hbWUgb3IgQ2xhaW1SZXNvdXJjZVN0YXR1cyBzaG91bGQgaWdub3JlIHRoZSB1cGRhdGUgZm9yIHRoZSBwdXJwb3NlIGl0IHdhcyBkZXNpZ25lZC4gRm9yIGV4YW1wbGUgLSBhIGNvbnRyb2xsZXIgdGhhdCBvbmx5IGlzIHJlc3BvbnNpYmxlIGZvciByZXNpemluZyBjYXBhY2l0eSBvZiB0aGUgdm9sdW1lLCBzaG91bGQgaWdub3JlIFBWQyB1cGRhdGVzIHRoYXQgY2hhbmdlIG90aGVyIHZhbGlkIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggUFZDLiBcbiBUaGlzIGlzIGFuIGFscGhhIGZpZWxkIGFuZCByZXF1aXJlcyBlbmFibGluZyBSZWNvdmVyVm9sdW1lRXhwYW5zaW9uRmFpbHVyZSBmZWF0dXJlLiIsInR5cGUiOiJvYmplY3QiLCJ4LWt1YmVybmV0ZXMtbWFwLXR5cGUiOiJncmFudWxhciJ9LCJhbGxvY2F0ZWRSZXNvdXJjZXMiOnsiYWRkaXRpb25hbFByb3BlcnRpZXMiOnsiYW55T2YiOlt7InR5cGUiOiJpbnRlZ2VyIn0seyJ0eXBlIjoic3RyaW5nIn1dLCJwYXR0ZXJuIjoiXihcXCt8LSk/KChbMC05XSsoXFwuWzAtOV0qKT8pfChcXC5bMC05XSspKSgoW0tNR1RQRV1pKXxbbnVta01HVFBFXXwoW2VFXShcXCt8LSk/KChbMC05XSsoXFwuWzAtOV0qKT8pfChcXC5bMC05XSspKSkpPyQiLCJ4LWt1YmVybmV0ZXMtaW50LW9yLXN0cmluZyI6dHJ1ZX0sImRlc2NyaXB0aW9uIjoiYWxsb2NhdGVkUmVzb3VyY2VzIHRyYWNrcyB0aGUgcmVzb3VyY2VzIGFsbG9jYXRlZCB0byBhIFBWQyBpbmNsdWRpbmcgaXRzIGNhcGFjaXR5LiBLZXkgbmFtZXMgZm9sbG93IHN0YW5kYXJkIEt1YmVybmV0ZXMgbGFiZWwgc3ludGF4LiBWYWxpZCB2YWx1ZXMgYXJlIGVpdGhlcjogKiBVbi1wcmVmaXhlZCBrZXlzOiAtIHN0b3JhZ2UgLSB0aGUgY2FwYWNpdHkgb2YgdGhlIHZvbHVtZS4gKiBDdXN0b20gcmVzb3VyY2VzIG11c3QgdXNlIGltcGxlbWVudGF0aW9uLWRlZmluZWQgcHJlZml4ZWQgbmFtZXMgc3VjaCBhcyBcImV4YW1wbGUuY29tL215LWN1c3RvbS1yZXNvdXJjZVwiIEFwYXJ0IGZyb20gYWJvdmUgdmFsdWVzIC0ga2V5cyB0aGF0IGFyZSB1bnByZWZpeGVkIG9yIGhhdmUga3ViZXJuZXRlcy5pbyBwcmVmaXggYXJlIGNvbnNpZGVyZWQgcmVzZXJ2ZWQgYW5kIGhlbmNlIG1heSBub3QgYmUgdXNlZC4gXG4gQ2FwYWNpdHkgcmVwb3J0ZWQgaGVyZSBtYXkgYmUgbGFyZ2VyIHRoYW4gdGhlIGFjdHVhbCBjYXBhY2l0eSB3aGVuIGEgdm9sdW1lIGV4cGFuc2lvbiBvcGVyYXRpb24gaXMgcmVxdWVzdGVkLiBGb3Igc3RvcmFnZSBxdW90YSwgdGhlIGxhcmdlciB2YWx1ZSBmcm9tIGFsbG9jYXRlZFJlc291cmNlcyBhbmQgUFZDLnNwZWMucmVzb3VyY2VzIGlzIHVzZWQuIElmIGFsbG9jYXRlZFJlc291cmNlcyBpcyBub3Qgc2V0LCBQVkMuc3BlYy5yZXNvdXJjZXMgYWxvbmUgaXMgdXNlZCBmb3IgcXVvdGEgY2FsY3VsYXRpb24uIElmIGEgdm9sdW1lIGV4cGFuc2lvbiBjYXBhY2l0eSByZXF1ZXN0IGlzIGxvd2VyZWQsIGFsbG9jYXRlZFJlc291cmNlcyBpcyBvbmx5IGxvd2VyZWQgaWYgdGhlcmUgYXJlIG5vIGV4cGFuc2lvbiBvcGVyYXRpb25zIGluIHByb2dyZXNzIGFuZCBpZiB0aGUgYWN0dWFsIHZvbHVtZSBjYXBhY2l0eSBpcyBlcXVhbCBvciBsb3dlciB0aGFuIHRoZSByZXF1ZXN0ZWQgY2FwYWNpdHkuIFxuIEEgY29udHJvbGxlciB0aGF0IHJlY2VpdmVzIFBWQyB1cGRhdGUgd2l0aCBwcmV2aW91c2x5IHVua25vd24gcmVzb3VyY2VOYW1lIHNob3VsZCBpZ25vcmUgdGhlIHVwZGF0ZSBmb3IgdGhlIHB1cnBvc2UgaXQgd2FzIGRlc2lnbmVkLiBGb3IgZXhhbXBsZSAtIGEgY29udHJvbGxlciB0aGF0IG9ubHkgaXMgcmVzcG9uc2libGUgZm9yIHJlc2l6aW5nIGNhcGFjaXR5IG9mIHRoZSB2b2x1bWUsIHNob3VsZCBpZ25vcmUgUFZDIHVwZGF0ZXMgdGhhdCBjaGFuZ2Ugb3RoZXIgdmFsaWQgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCBQVkMuIFxuIFRoaXMgaXMgYW4gYWxwaGEgZmllbGQgYW5kIHJlcXVpcmVzIGVuYWJsaW5nIFJlY292ZXJWb2x1bWVFeHBhbnNpb25GYWlsdXJlIGZlYXR1cmUuIiwidHlwZSI6Im9iamVjdCJ9LCJjYXBhY2l0eSI6eyJhZGRpdGlvbmFsUHJvcGVydGllcyI6eyJhbnlPZiI6W3sidHlwZSI6ImludGVnZXIifSx7InR5cGUiOiJzdHJpbmcifV0sInBhdHRlcm4iOiJeKFxcK3wtKT8oKFswLTldKyhcXC5bMC05XSopPyl8KFxcLlswLTldKykpKChbS01HVFBFXWkpfFtudW1rTUdUUEVdfChbZUVdKFxcK3wtKT8oKFswLTldKyhcXC5bMC05XSopPyl8KFxcLlswLTldKykpKSk/JCIsIngta3ViZXJuZXRlcy1pbnQtb3Itc3RyaW5nIjp0cnVlfSwiZGVzY3JpcHRpb24iOiJjYXBhY2l0eSByZXByZXNlbnRzIHRoZSBhY3R1YWwgcmVzb3VyY2VzIG9mIHRoZSB1bmRlcmx5aW5nIHZvbHVtZS4iLCJ0eXBlIjoib2JqZWN0In0sImNvbmRpdGlvbnMiOnsiZGVzY3JpcHRpb24iOiJjb25kaXRpb25zIGlzIHRoZSBjdXJyZW50IENvbmRpdGlvbiBvZiBwZXJzaXN0ZW50IHZvbHVtZSBjbGFpbS4gSWYgdW5kZXJseWluZyBwZXJzaXN0ZW50IHZvbHVtZSBpcyBiZWluZyByZXNpemVkIHRoZW4gdGhlIENvbmRpdGlvbiB3aWxsIGJlIHNldCB0byAnUmVzaXplU3RhcnRlZCcuIiwiaXRlbXMiOnsiZGVzY3JpcHRpb24iOiJQZXJzaXN0ZW50Vm9sdW1lQ2xhaW1Db25kaXRpb24gY29udGFpbnMgZGV0YWlscyBhYm91dCBzdGF0ZSBvZiBwdmMiLCJwcm9wZXJ0aWVzIjp7Imxhc3RQcm9iZVRpbWUiOnsiZGVzY3JpcHRpb24iOiJsYXN0UHJvYmVUaW1lIGlzIHRoZSB0aW1lIHdlIHByb2JlZCB0aGUgY29uZGl0aW9uLiIsImZvcm1hdCI6ImRhdGUtdGltZSIsInR5cGUiOiJzdHJpbmcifSwibGFzdFRyYW5zaXRpb25UaW1lIjp7ImRlc2NyaXB0aW9uIjoibGFzdFRyYW5zaXRpb25UaW1lIGlzIHRoZSB0aW1lIHRoZSBjb25kaXRpb24gdHJhbnNpdGlvbmVkIGZyb20gb25lIHN0YXR1cyB0byBhbm90aGVyLiIsImZvcm1hdCI6ImRhdGUtdGltZSIsInR5cGUiOiJzdHJpbmcifSwibWVzc2FnZSI6eyJkZXNjcmlwdGlvbiI6Im1lc3NhZ2UgaXMgdGhlIGh1bWFuLXJlYWRhYmxlIG1lc3NhZ2UgaW5kaWNhdGluZyBkZXRhaWxzIGFib3V0IGxhc3QgdHJhbnNpdGlvbi4iLCJ0eXBlIjoic3RyaW5nIn0sInJlYXNvbiI6eyJkZXNjcmlwdGlvbiI6InJlYXNvbiBpcyBhIHVuaXF1ZSwgdGhpcyBzaG91bGQgYmUgYSBzaG9ydCwgbWFjaGluZSB1bmRlcnN0YW5kYWJsZSBzdHJpbmcgdGhhdCBnaXZlcyB0aGUgcmVhc29uIGZvciBjb25kaXRpb24ncyBsYXN0IHRyYW5zaXRpb24uIElmIGl0IHJlcG9ydHMgXCJSZXNpemVTdGFydGVkXCIgdGhhdCBtZWFucyB0aGUgdW5kZXJseWluZyBwZXJzaXN0ZW50IHZvbHVtZSBpcyBiZWluZyByZXNpemVkLiIsInR5cGUiOiJzdHJpbmcifSwic3RhdHVzIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6eyJkZXNjcmlwdGlvbiI6IlBlcnNpc3RlbnRWb2x1bWVDbGFpbUNvbmRpdGlvblR5cGUgaXMgYSB2YWxpZCB2YWx1ZSBvZiBQZXJzaXN0ZW50Vm9sdW1lQ2xhaW1Db25kaXRpb24uVHlwZSIsInR5cGUiOiJzdHJpbmcifX0sInJlcXVpcmVkIjpbInN0YXR1cyIsInR5cGUiXSwidHlwZSI6Im9iamVjdCJ9LCJ0eXBlIjoiYXJyYXkifSwiY3VycmVudFZvbHVtZUF0dHJpYnV0ZXNDbGFzc05hbWUiOnsiZGVzY3JpcHRpb24iOiJjdXJyZW50Vm9sdW1lQXR0cmlidXRlc0NsYXNzTmFtZSBpcyB0aGUgY3VycmVudCBuYW1lIG9mIHRoZSBWb2x1bWVBdHRyaWJ1dGVzQ2xhc3MgdGhlIFBWQyBpcyB1c2luZy4gV2hlbiB1bnNldCwgdGhlcmUgaXMgbm8gVm9sdW1lQXR0cmlidXRlQ2xhc3MgYXBwbGllZCB0byB0aGlzIFBlcnNpc3RlbnRWb2x1bWVDbGFpbSBUaGlzIGlzIGFuIGFscGhhIGZpZWxkIGFuZCByZXF1aXJlcyBlbmFibGluZyBWb2x1bWVBdHRyaWJ1dGVzQ2xhc3MgZmVhdHVyZS4iLCJ0eXBlIjoic3RyaW5nIn0sIm1vZGlmeVZvbHVtZVN0YXR1cyI6eyJkZXNjcmlwdGlvbiI6Ik1vZGlmeVZvbHVtZVN0YXR1cyByZXByZXNlbnRzIHRoZSBzdGF0dXMgb2JqZWN0IG9mIENvbnRyb2xsZXJNb2RpZnlWb2x1bWUgb3BlcmF0aW9uLiBXaGVuIHRoaXMgaXMgdW5zZXQsIHRoZXJlIGlzIG5vIE1vZGlmeVZvbHVtZSBvcGVyYXRpb24gYmVpbmcgYXR0ZW1wdGVkLiBUaGlzIGlzIGFuIGFscGhhIGZpZWxkIGFuZCByZXF1aXJlcyBlbmFibGluZyBWb2x1bWVBdHRyaWJ1dGVzQ2xhc3MgZmVhdHVyZS4iLCJwcm9wZXJ0aWVzIjp7InN0YXR1cyI6eyJkZXNjcmlwdGlvbiI6InN0YXR1cyBpcyB0aGUgc3RhdHVzIG9mIHRoZSBDb250cm9sbGVyTW9kaWZ5Vm9sdW1lIG9wZXJhdGlvbi4gSXQgY2FuIGJlIGluIGFueSBvZiBmb2xsb3dpbmcgc3RhdGVzOiAtIFBlbmRpbmcgUGVuZGluZyBpbmRpY2F0ZXMgdGhhdCB0aGUgUGVyc2lzdGVudFZvbHVtZUNsYWltIGNhbm5vdCBiZSBtb2RpZmllZCBkdWUgdG8gdW5tZXQgcmVxdWlyZW1lbnRzLCBzdWNoIGFzIHRoZSBzcGVjaWZpZWQgVm9sdW1lQXR0cmlidXRlc0NsYXNzIG5vdCBleGlzdGluZy4gLSBJblByb2dyZXNzIEluUHJvZ3Jlc3MgaW5kaWNhdGVzIHRoYXQgdGhlIHZvbHVtZSBpcyBiZWluZyBtb2RpZmllZC4gLSBJbmZlYXNpYmxlIEluZmVhc2libGUgaW5kaWNhdGVzIHRoYXQgdGhlIHJlcXVlc3QgaGFzIGJlZW4gcmVqZWN0ZWQgYXMgaW52YWxpZCBieSB0aGUgQ1NJIGRyaXZlci4gVG8gcmVzb2x2ZSB0aGUgZXJyb3IsIGEgdmFsaWQgVm9sdW1lQXR0cmlidXRlc0NsYXNzIG5lZWRzIHRvIGJlIHNwZWNpZmllZC4gTm90ZTogTmV3IHN0YXR1c2VzIGNhbiBiZSBhZGRlZCBpbiB0aGUgZnV0dXJlLiBDb25zdW1lcnMgc2hvdWxkIGNoZWNrIGZvciB1bmtub3duIHN0YXR1c2VzIGFuZCBmYWlsIGFwcHJvcHJpYXRlbHkuIiwidHlwZSI6InN0cmluZyJ9LCJ0YXJnZXRWb2x1bWVBdHRyaWJ1dGVzQ2xhc3NOYW1lIjp7ImRlc2NyaXB0aW9uIjoidGFyZ2V0Vm9sdW1lQXR0cmlidXRlc0NsYXNzTmFtZSBpcyB0aGUgbmFtZSBvZiB0aGUgVm9sdW1lQXR0cmlidXRlc0NsYXNzIHRoZSBQVkMgY3VycmVudGx5IGJlaW5nIHJlY29uY2lsZWQiLCJ0eXBlIjoic3RyaW5nIn19LCJyZXF1aXJlZCI6WyJzdGF0dXMiXSwidHlwZSI6Im9iamVjdCJ9LCJwaGFzZSI6eyJkZXNjcmlwdGlvbiI6InBoYXNlIHJlcHJlc2VudHMgdGhlIGN1cnJlbnQgcGhhc2Ugb2YgUGVyc2lzdGVudFZvbHVtZUNsYWltLiIsInR5cGUiOiJzdHJpbmcifX0sInR5cGUiOiJvYmplY3QifX0sInR5cGUiOiJvYmplY3QifSwiZGV2aWNlQ2xhc3MiOnsiZGVzY3JpcHRpb24iOiJEZXZpY2VDbGFzcyBpcyBhbiBvcHRpb25hbCwgZmluZS1ncmFpbmVkIHByb3BlcnR5IG9mIERldmljZVR5cGUuIElmIG5vbiBlbXB0eSwgaXQgZGVmaW5lcyB0aGUgJ2NydXNoRGV2aWNlQ2xhc3MnIHZhbHVlIGFzIHVzZWQgYnkgY2VwaCdzIENSVVNIIG1hcC4gSWYgZW1wdHksIHRoZW4gb3BlcmF0b3Igd2lsbCBzZXQgJ2NydXNoRGV2aWNlQ2xhc3MnIHRvIFNTRCBhbmQgJ1R1bmVGYXN0RGV2aWNlQ2xhc3MnIHRvIHRydWUiLCJ0eXBlIjoic3RyaW5nIn0sImRldmljZVR5cGUiOnsiZGVzY3JpcHRpb24iOiJEZXZpY2VUeXBlIGlzIHRoZSB2YWx1ZSBvZiBkZXZpY2UgdHlwZSBpbiB0aGlzIFN0b3JhZ2VEZXZpY2VTZXQuIEl0IGNhbiBoYXZlIG9uZSBvZiB0aGUgdGhyZWUgdmFsdWVzIChTU0QsIEhERCwgTlZNZSkiLCJlbnVtIjpbIlNTRCIsInNzZCIsIkhERCIsImhkZCIsIk5WTWUiLCJOVk1FIiwibnZtZSJdLCJ0eXBlIjoic3RyaW5nIn0sImluaXRpYWxXZWlnaHQiOnsiZGVzY3JpcHRpb24iOiJJbml0aWFsV2VpZ2h0IGlzIGFuIG9wdGlvbmFsIGV4cGxpY2l0IE9TRCB3ZWlnaHQgdmFsdWUgaW4gVGlCIHVuaXRzLiBJZiBub24gZW1wdHksIGl0IGRlZmluZXMgdGhlICdDcnVzaEluaXRpYWxXZWlnaHQnIHZhbHVlIHdoaWNoIGlzIGFzc2lnbmVkIHRvIGNlcGggT1NEIHVwb24gaW5pdCIsInBhdHRlcm4iOiJeKFswLTldKlsuXSk/WzAtOV0rKFRpW0JdKSQiLCJ0eXBlIjoic3RyaW5nIn0sIm1ldGFkYXRhUFZDVGVtcGxhdGUiOnsiZGVzY3JpcHRpb24iOiJQZXJzaXN0ZW50Vm9sdW1lQ2xhaW0gaXMgYSB1c2VyJ3MgcmVxdWVzdCBmb3IgYW5kIGNsYWltIHRvIGEgcGVyc2lzdGVudCB2b2x1bWUiLCJwcm9wZXJ0aWVzIjp7ImFwaVZlcnNpb24iOnsiZGVzY3JpcHRpb24iOiJBUElWZXJzaW9uIGRlZmluZXMgdGhlIHZlcnNpb25lZCBzY2hlbWEgb2YgdGhpcyByZXByZXNlbnRhdGlvbiBvZiBhbiBvYmplY3QuIFNlcnZlcnMgc2hvdWxkIGNvbnZlcnQgcmVjb2duaXplZCBzY2hlbWFzIHRvIHRoZSBsYXRlc3QgaW50ZXJuYWwgdmFsdWUsIGFuZCBtYXkgcmVqZWN0IHVucmVjb2duaXplZCB2YWx1ZXMuIE1vcmUgaW5mbzogaHR0cHM6Ly9naXQuazhzLmlvL2NvbW11bml0eS9jb250cmlidXRvcnMvZGV2ZWwvc2lnLWFyY2hpdGVjdHVyZS9hcGktY29udmVudGlvbnMubWQjcmVzb3VyY2VzIiwidHlwZSI6InN0cmluZyJ9LCJraW5kIjp7ImRlc2NyaXB0aW9uIjoiS2luZCBpcyBhIHN0cmluZyB2YWx1ZSByZXByZXNlbnRpbmcgdGhlIFJFU1QgcmVzb3VyY2UgdGhpcyBvYmplY3QgcmVwcmVzZW50cy4gU2VydmVycyBtYXkgaW5mZXIgdGhpcyBmcm9tIHRoZSBlbmRwb2ludCB0aGUgY2xpZW50IHN1Ym1pdHMgcmVxdWVzdHMgdG8uIENhbm5vdCBiZSB1cGRhdGVkLiBJbiBDYW1lbENhc2UuIE1vcmUgaW5mbzogaHR0cHM6Ly9naXQuazhzLmlvL2NvbW11bml0eS9jb250cmlidXRvcnMvZGV2ZWwvc2lnLWFyY2hpdGVjdHVyZS9hcGktY29udmVudGlvbnMubWQjdHlwZXMta2luZHMiLCJ0eXBlIjoic3RyaW5nIn0sIm1ldGFkYXRhIjp7ImRlc2NyaXB0aW9uIjoiU3RhbmRhcmQgb2JqZWN0J3MgbWV0YWRhdGEuIE1vcmUgaW5mbzogaHR0cHM6Ly9naXQuazhzLmlvL2NvbW11bml0eS9jb250cmlidXRvcnMvZGV2ZWwvc2lnLWFyY2hpdGVjdHVyZS9hcGktY29udmVudGlvbnMubWQjbWV0YWRhdGEiLCJwcm9wZXJ0aWVzIjp7ImFubm90YXRpb25zIjp7ImFkZGl0aW9uYWxQcm9wZXJ0aWVzIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6Im9iamVjdCJ9LCJmaW5hbGl6ZXJzIjp7Iml0ZW1zIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6ImFycmF5In0sImxhYmVscyI6eyJhZGRpdGlvbmFsUHJvcGVydGllcyI6eyJ0eXBlIjoic3RyaW5nIn0sInR5cGUiOiJvYmplY3QifSwibmFtZSI6eyJ0eXBlIjoic3RyaW5nIn0sIm5hbWVzcGFjZSI6eyJ0eXBlIjoic3RyaW5nIn19LCJ0eXBlIjoib2JqZWN0In0sInNwZWMiOnsiZGVzY3JpcHRpb24iOiJzcGVjIGRlZmluZXMgdGhlIGRlc2lyZWQgY2hhcmFjdGVyaXN0aWNzIG9mIGEgdm9sdW1lIHJlcXVlc3RlZCBieSBhIHBvZCBhdXRob3IuIE1vcmUgaW5mbzogaHR0cHM6Ly9rdWJlcm5ldGVzLmlvL2RvY3MvY29uY2VwdHMvc3RvcmFnZS9wZXJzaXN0ZW50LXZvbHVtZXMjcGVyc2lzdGVudHZvbHVtZWNsYWltcyIsInByb3BlcnRpZXMiOnsiYWNjZXNzTW9kZXMiOnsiZGVzY3JpcHRpb24iOiJhY2Nlc3NNb2RlcyBjb250YWlucyB0aGUgZGVzaXJlZCBhY2Nlc3MgbW9kZXMgdGhlIHZvbHVtZSBzaG91bGQgaGF2ZS4gTW9yZSBpbmZvOiBodHRwczovL2t1YmVybmV0ZXMuaW8vZG9jcy9jb25jZXB0cy9zdG9yYWdlL3BlcnNpc3RlbnQtdm9sdW1lcyNhY2Nlc3MtbW9kZXMtMSIsIml0ZW1zIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6ImFycmF5In0sImRhdGFTb3VyY2UiOnsiZGVzY3JpcHRpb24iOiJkYXRhU291cmNlIGZpZWxkIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgZWl0aGVyOiAqIEFuIGV4aXN0aW5nIFZvbHVtZVNuYXBzaG90IG9iamVjdCAoc25hcHNob3Quc3RvcmFnZS5rOHMuaW8vVm9sdW1lU25hcHNob3QpICogQW4gZXhpc3RpbmcgUFZDIChQZXJzaXN0ZW50Vm9sdW1lQ2xhaW0pIElmIHRoZSBwcm92aXNpb25lciBvciBhbiBleHRlcm5hbCBjb250cm9sbGVyIGNhbiBzdXBwb3J0IHRoZSBzcGVjaWZpZWQgZGF0YSBzb3VyY2UsIGl0IHdpbGwgY3JlYXRlIGEgbmV3IHZvbHVtZSBiYXNlZCBvbiB0aGUgY29udGVudHMgb2YgdGhlIHNwZWNpZmllZCBkYXRhIHNvdXJjZS4gV2hlbiB0aGUgQW55Vm9sdW1lRGF0YVNvdXJjZSBmZWF0dXJlIGdhdGUgaXMgZW5hYmxlZCwgZGF0YVNvdXJjZSBjb250ZW50cyB3aWxsIGJlIGNvcGllZCB0byBkYXRhU291cmNlUmVmLCBhbmQgZGF0YVNvdXJjZVJlZiBjb250ZW50cyB3aWxsIGJlIGNvcGllZCB0byBkYXRhU291cmNlIHdoZW4gZGF0YVNvdXJjZVJlZi5uYW1lc3BhY2UgaXMgbm90IHNwZWNpZmllZC4gSWYgdGhlIG5hbWVzcGFjZSBpcyBzcGVjaWZpZWQsIHRoZW4gZGF0YVNvdXJjZVJlZiB3aWxsIG5vdCBiZSBjb3BpZWQgdG8gZGF0YVNvdXJjZS4iLCJwcm9wZXJ0aWVzIjp7ImFwaUdyb3VwIjp7ImRlc2NyaXB0aW9uIjoiQVBJR3JvdXAgaXMgdGhlIGdyb3VwIGZvciB0aGUgcmVzb3VyY2UgYmVpbmcgcmVmZXJlbmNlZC4gSWYgQVBJR3JvdXAgaXMgbm90IHNwZWNpZmllZCwgdGhlIHNwZWNpZmllZCBLaW5kIG11c3QgYmUgaW4gdGhlIGNvcmUgQVBJIGdyb3VwLiBGb3IgYW55IG90aGVyIHRoaXJkLXBhcnR5IHR5cGVzLCBBUElHcm91cCBpcyByZXF1aXJlZC4iLCJ0eXBlIjoic3RyaW5nIn0sImtpbmQiOnsiZGVzY3JpcHRpb24iOiJLaW5kIGlzIHRoZSB0eXBlIG9mIHJlc291cmNlIGJlaW5nIHJlZmVyZW5jZWQiLCJ0eXBlIjoic3RyaW5nIn0sIm5hbWUiOnsiZGVzY3JpcHRpb24iOiJOYW1lIGlzIHRoZSBuYW1lIG9mIHJlc291cmNlIGJlaW5nIHJlZmVyZW5jZWQiLCJ0eXBlIjoic3RyaW5nIn19LCJyZXF1aXJlZCI6WyJraW5kIiwibmFtZSJdLCJ0eXBlIjoib2JqZWN0IiwieC1rdWJlcm5ldGVzLW1hcC10eXBlIjoiYXRvbWljIn0sImRhdGFTb3VyY2VSZWYiOnsiZGVzY3JpcHRpb24iOiJkYXRhU291cmNlUmVmIHNwZWNpZmllcyB0aGUgb2JqZWN0IGZyb20gd2hpY2ggdG8gcG9wdWxhdGUgdGhlIHZvbHVtZSB3aXRoIGRhdGEsIGlmIGEgbm9uLWVtcHR5IHZvbHVtZSBpcyBkZXNpcmVkLiBUaGlzIG1heSBiZSBhbnkgb2JqZWN0IGZyb20gYSBub24tZW1wdHkgQVBJIGdyb3VwIChub24gY29yZSBvYmplY3QpIG9yIGEgUGVyc2lzdGVudFZvbHVtZUNsYWltIG9iamVjdC4gV2hlbiB0aGlzIGZpZWxkIGlzIHNwZWNpZmllZCwgdm9sdW1lIGJpbmRpbmcgd2lsbCBvbmx5IHN1Y2NlZWQgaWYgdGhlIHR5cGUgb2YgdGhlIHNwZWNpZmllZCBvYmplY3QgbWF0Y2hlcyBzb21lIGluc3RhbGxlZCB2b2x1bWUgcG9wdWxhdG9yIG9yIGR5bmFtaWMgcHJvdmlzaW9uZXIuIFRoaXMgZmllbGQgd2lsbCByZXBsYWNlIHRoZSBmdW5jdGlvbmFsaXR5IG9mIHRoZSBkYXRhU291cmNlIGZpZWxkIGFuZCBhcyBzdWNoIGlmIGJvdGggZmllbGRzIGFyZSBub24tZW1wdHksIHRoZXkgbXVzdCBoYXZlIHRoZSBzYW1lIHZhbHVlLiBGb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHksIHdoZW4gbmFtZXNwYWNlIGlzbid0IHNwZWNpZmllZCBpbiBkYXRhU291cmNlUmVmLCBib3RoIGZpZWxkcyAoZGF0YVNvdXJjZSBhbmQgZGF0YVNvdXJjZVJlZikgd2lsbCBiZSBzZXQgdG8gdGhlIHNhbWUgdmFsdWUgYXV0b21hdGljYWxseSBpZiBvbmUgb2YgdGhlbSBpcyBlbXB0eSBhbmQgdGhlIG90aGVyIGlzIG5vbi1lbXB0eS4gV2hlbiBuYW1lc3BhY2UgaXMgc3BlY2lmaWVkIGluIGRhdGFTb3VyY2VSZWYsIGRhdGFTb3VyY2UgaXNuJ3Qgc2V0IHRvIHRoZSBzYW1lIHZhbHVlIGFuZCBtdXN0IGJlIGVtcHR5LiBUaGVyZSBhcmUgdGhyZWUgaW1wb3J0YW50IGRpZmZlcmVuY2VzIGJldHdlZW4gZGF0YVNvdXJjZSBhbmQgZGF0YVNvdXJjZVJlZjogKiBXaGlsZSBkYXRhU291cmNlIG9ubHkgYWxsb3dzIHR3byBzcGVjaWZpYyB0eXBlcyBvZiBvYmplY3RzLCBkYXRhU291cmNlUmVmIGFsbG93cyBhbnkgbm9uLWNvcmUgb2JqZWN0LCBhcyB3ZWxsIGFzIFBlcnNpc3RlbnRWb2x1bWVDbGFpbSBvYmplY3RzLiAqIFdoaWxlIGRhdGFTb3VyY2UgaWdub3JlcyBkaXNhbGxvd2VkIHZhbHVlcyAoZHJvcHBpbmcgdGhlbSksIGRhdGFTb3VyY2VSZWYgcHJlc2VydmVzIGFsbCB2YWx1ZXMsIGFuZCBnZW5lcmF0ZXMgYW4gZXJyb3IgaWYgYSBkaXNhbGxvd2VkIHZhbHVlIGlzIHNwZWNpZmllZC4gKiBXaGlsZSBkYXRhU291cmNlIG9ubHkgYWxsb3dzIGxvY2FsIG9iamVjdHMsIGRhdGFTb3VyY2VSZWYgYWxsb3dzIG9iamVjdHMgaW4gYW55IG5hbWVzcGFjZXMuIChCZXRhKSBVc2luZyB0aGlzIGZpZWxkIHJlcXVpcmVzIHRoZSBBbnlWb2x1bWVEYXRhU291cmNlIGZlYXR1cmUgZ2F0ZSB0byBiZSBlbmFibGVkLiAoQWxwaGEpIFVzaW5nIHRoZSBuYW1lc3BhY2UgZmllbGQgb2YgZGF0YVNvdXJjZVJlZiByZXF1aXJlcyB0aGUgQ3Jvc3NOYW1lc3BhY2VWb2x1bWVEYXRhU291cmNlIGZlYXR1cmUgZ2F0ZSB0byBiZSBlbmFibGVkLiIsInByb3BlcnRpZXMiOnsiYXBpR3JvdXAiOnsiZGVzY3JpcHRpb24iOiJBUElHcm91cCBpcyB0aGUgZ3JvdXAgZm9yIHRoZSByZXNvdXJjZSBiZWluZyByZWZlcmVuY2VkLiBJZiBBUElHcm91cCBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgc3BlY2lmaWVkIEtpbmQgbXVzdCBiZSBpbiB0aGUgY29yZSBBUEkgZ3JvdXAuIEZvciBhbnkgb3RoZXIgdGhpcmQtcGFydHkgdHlwZXMsIEFQSUdyb3VwIGlzIHJlcXVpcmVkLiIsInR5cGUiOiJzdHJpbmcifSwia2luZCI6eyJkZXNjcmlwdGlvbiI6IktpbmQgaXMgdGhlIHR5cGUgb2YgcmVzb3VyY2UgYmVpbmcgcmVmZXJlbmNlZCIsInR5cGUiOiJzdHJpbmcifSwibmFtZSI6eyJkZXNjcmlwdGlvbiI6Ik5hbWUgaXMgdGhlIG5hbWUgb2YgcmVzb3VyY2UgYmVpbmcgcmVmZXJlbmNlZCIsInR5cGUiOiJzdHJpbmcifSwibmFtZXNwYWNlIjp7ImRlc2NyaXB0aW9uIjoiTmFtZXNwYWNlIGlzIHRoZSBuYW1lc3BhY2Ugb2YgcmVzb3VyY2UgYmVpbmcgcmVmZXJlbmNlZCBOb3RlIHRoYXQgd2hlbiBhIG5hbWVzcGFjZSBpcyBzcGVjaWZpZWQsIGEgZ2F0ZXdheS5uZXR3b3JraW5nLms4cy5pby9SZWZlcmVuY2VHcmFudCBvYmplY3QgaXMgcmVxdWlyZWQgaW4gdGhlIHJlZmVyZW50IG5hbWVzcGFjZSB0byBhbGxvdyB0aGF0IG5hbWVzcGFjZSdzIG93bmVyIHRvIGFjY2VwdCB0aGUgcmVmZXJlbmNlLiBTZWUgdGhlIFJlZmVyZW5jZUdyYW50IGRvY3VtZW50YXRpb24gZm9yIGRldGFpbHMuIChBbHBoYSkgVGhpcyBmaWVsZCByZXF1aXJlcyB0aGUgQ3Jvc3NOYW1lc3BhY2VWb2x1bWVEYXRhU291cmNlIGZlYXR1cmUgZ2F0ZSB0byBiZSBlbmFibGVkLiIsInR5cGUiOiJzdHJpbmcifX0sInJlcXVpcmVkIjpbImtpbmQiLCJuYW1lIl0sInR5cGUiOiJvYmplY3QifSwicmVzb3VyY2VzIjp7ImRlc2NyaXB0aW9uIjoicmVzb3VyY2VzIHJlcHJlc2VudHMgdGhlIG1pbmltdW0gcmVzb3VyY2VzIHRoZSB2b2x1bWUgc2hvdWxkIGhhdmUuIElmIFJlY292ZXJWb2x1bWVFeHBhbnNpb25GYWlsdXJlIGZlYXR1cmUgaXMgZW5hYmxlZCB1c2VycyBhcmUgYWxsb3dlZCB0byBzcGVjaWZ5IHJlc291cmNlIHJlcXVpcmVtZW50cyB0aGF0IGFyZSBsb3dlciB0aGFuIHByZXZpb3VzIHZhbHVlIGJ1dCBtdXN0IHN0aWxsIGJlIGhpZ2hlciB0aGFuIGNhcGFjaXR5IHJlY29yZGVkIGluIHRoZSBzdGF0dXMgZmllbGQgb2YgdGhlIGNsYWltLiBNb3JlIGluZm86IGh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL2NvbmNlcHRzL3N0b3JhZ2UvcGVyc2lzdGVudC12b2x1bWVzI3Jlc291cmNlcyIsInByb3BlcnRpZXMiOnsibGltaXRzIjp7ImFkZGl0aW9uYWxQcm9wZXJ0aWVzIjp7ImFueU9mIjpbeyJ0eXBlIjoiaW50ZWdlciJ9LHsidHlwZSI6InN0cmluZyJ9XSwicGF0dGVybiI6Il4oXFwrfC0pPygoWzAtOV0rKFxcLlswLTldKik/KXwoXFwuWzAtOV0rKSkoKFtLTUdUUEVdaSl8W251bWtNR1RQRV18KFtlRV0oXFwrfC0pPygoWzAtOV0rKFxcLlswLTldKik/KXwoXFwuWzAtOV0rKSkpKT8kIiwieC1rdWJlcm5ldGVzLWludC1vci1zdHJpbmciOnRydWV9LCJkZXNjcmlwdGlvbiI6IkxpbWl0cyBkZXNjcmliZXMgdGhlIG1heGltdW0gYW1vdW50IG9mIGNvbXB1dGUgcmVzb3VyY2VzIGFsbG93ZWQuIE1vcmUgaW5mbzogaHR0cHM6Ly9rdWJlcm5ldGVzLmlvL2RvY3MvY29uY2VwdHMvY29uZmlndXJhdGlvbi9tYW5hZ2UtcmVzb3VyY2VzLWNvbnRhaW5lcnMvIiwidHlwZSI6Im9iamVjdCJ9LCJyZXF1ZXN0cyI6eyJhZGRpdGlvbmFsUHJvcGVydGllcyI6eyJhbnlPZiI6W3sidHlwZSI6ImludGVnZXIifSx7InR5cGUiOiJzdHJpbmcifV0sInBhdHRlcm4iOiJeKFxcK3wtKT8oKFswLTldKyhcXC5bMC05XSopPyl8KFxcLlswLTldKykpKChbS01HVFBFXWkpfFtudW1rTUdUUEVdfChbZUVdKFxcK3wtKT8oKFswLTldKyhcXC5bMC05XSopPyl8KFxcLlswLTldKykpKSk/JCIsIngta3ViZXJuZXRlcy1pbnQtb3Itc3RyaW5nIjp0cnVlfSwiZGVzY3JpcHRpb24iOiJSZXF1ZXN0cyBkZXNjcmliZXMgdGhlIG1pbmltdW0gYW1vdW50IG9mIGNvbXB1dGUgcmVzb3VyY2VzIHJlcXVpcmVkLiBJZiBSZXF1ZXN0cyBpcyBvbWl0dGVkIGZvciBhIGNvbnRhaW5lciwgaXQgZGVmYXVsdHMgdG8gTGltaXRzIGlmIHRoYXQgaXMgZXhwbGljaXRseSBzcGVjaWZpZWQsIG90aGVyd2lzZSB0byBhbiBpbXBsZW1lbnRhdGlvbi1kZWZpbmVkIHZhbHVlLiBSZXF1ZXN0cyBjYW5ub3QgZXhjZWVkIExpbWl0cy4gTW9yZSBpbmZvOiBodHRwczovL2t1YmVybmV0ZXMuaW8vZG9jcy9jb25jZXB0cy9jb25maWd1cmF0aW9uL21hbmFnZS1yZXNvdXJjZXMtY29udGFpbmVycy8iLCJ0eXBlIjoib2JqZWN0In19LCJ0eXBlIjoib2JqZWN0In0sInNlbGVjdG9yIjp7ImRlc2NyaXB0aW9uIjoic2VsZWN0b3IgaXMgYSBsYWJlbCBxdWVyeSBvdmVyIHZvbHVtZXMgdG8gY29uc2lkZXIgZm9yIGJpbmRpbmcuIiwicHJvcGVydGllcyI6eyJtYXRjaEV4cHJlc3Npb25zIjp7ImRlc2NyaXB0aW9uIjoibWF0Y2hFeHByZXNzaW9ucyBpcyBhIGxpc3Qgb2YgbGFiZWwgc2VsZWN0b3IgcmVxdWlyZW1lbnRzLiBUaGUgcmVxdWlyZW1lbnRzIGFyZSBBTkRlZC4iLCJpdGVtcyI6eyJkZXNjcmlwdGlvbiI6IkEgbGFiZWwgc2VsZWN0b3IgcmVxdWlyZW1lbnQgaXMgYSBzZWxlY3RvciB0aGF0IGNvbnRhaW5zIHZhbHVlcywgYSBrZXksIGFuZCBhbiBvcGVyYXRvciB0aGF0IHJlbGF0ZXMgdGhlIGtleSBhbmQgdmFsdWVzLiIsInByb3BlcnRpZXMiOnsia2V5Ijp7ImRlc2NyaXB0aW9uIjoia2V5IGlzIHRoZSBsYWJlbCBrZXkgdGhhdCB0aGUgc2VsZWN0b3IgYXBwbGllcyB0by4iLCJ0eXBlIjoic3RyaW5nIn0sIm9wZXJhdG9yIjp7ImRlc2NyaXB0aW9uIjoib3BlcmF0b3IgcmVwcmVzZW50cyBhIGtleSdzIHJlbGF0aW9uc2hpcCB0byBhIHNldCBvZiB2YWx1ZXMuIFZhbGlkIG9wZXJhdG9ycyBhcmUgSW4sIE5vdEluLCBFeGlzdHMgYW5kIERvZXNOb3RFeGlzdC4iLCJ0eXBlIjoic3RyaW5nIn0sInZhbHVlcyI6eyJkZXNjcmlwdGlvbiI6InZhbHVlcyBpcyBhbiBhcnJheSBvZiBzdHJpbmcgdmFsdWVzLiBJZiB0aGUgb3BlcmF0b3IgaXMgSW4gb3IgTm90SW4sIHRoZSB2YWx1ZXMgYXJyYXkgbXVzdCBiZSBub24tZW1wdHkuIElmIHRoZSBvcGVyYXRvciBpcyBFeGlzdHMgb3IgRG9lc05vdEV4aXN0LCB0aGUgdmFsdWVzIGFycmF5IG11c3QgYmUgZW1wdHkuIFRoaXMgYXJyYXkgaXMgcmVwbGFjZWQgZHVyaW5nIGEgc3RyYXRlZ2ljIG1lcmdlIHBhdGNoLiIsIml0ZW1zIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6ImFycmF5In19LCJyZXF1aXJlZCI6WyJrZXkiLCJvcGVyYXRvciJdLCJ0eXBlIjoib2JqZWN0In0sInR5cGUiOiJhcnJheSJ9LCJtYXRjaExhYmVscyI6eyJhZGRpdGlvbmFsUHJvcGVydGllcyI6eyJ0eXBlIjoic3RyaW5nIn0sImRlc2NyaXB0aW9uIjoibWF0Y2hMYWJlbHMgaXMgYSBtYXAgb2Yge2tleSx2YWx1ZX0gcGFpcnMuIEEgc2luZ2xlIHtrZXksdmFsdWV9IGluIHRoZSBtYXRjaExhYmVscyBtYXAgaXMgZXF1aXZhbGVudCB0byBhbiBlbGVtZW50IG9mIG1hdGNoRXhwcmVzc2lvbnMsIHdob3NlIGtleSBmaWVsZCBpcyBcImtleVwiLCB0aGUgb3BlcmF0b3IgaXMgXCJJblwiLCBhbmQgdGhlIHZhbHVlcyBhcnJheSBjb250YWlucyBvbmx5IFwidmFsdWVcIi4gVGhlIHJlcXVpcmVtZW50cyBhcmUgQU5EZWQuIiwidHlwZSI6Im9iamVjdCJ9fSwidHlwZSI6Im9iamVjdCIsIngta3ViZXJuZXRlcy1tYXAtdHlwZSI6ImF0b21pYyJ9LCJzdG9yYWdlQ2xhc3NOYW1lIjp7ImRlc2NyaXB0aW9uIjoic3RvcmFnZUNsYXNzTmFtZSBpcyB0aGUgbmFtZSBvZiB0aGUgU3RvcmFnZUNsYXNzIHJlcXVpcmVkIGJ5IHRoZSBjbGFpbS4gTW9yZSBpbmZvOiBodHRwczovL2t1YmVybmV0ZXMuaW8vZG9jcy9jb25jZXB0cy9zdG9yYWdlL3BlcnNpc3RlbnQtdm9sdW1lcyNjbGFzcy0xIiwidHlwZSI6InN0cmluZyJ9LCJ2b2x1bWVBdHRyaWJ1dGVzQ2xhc3NOYW1lIjp7ImRlc2NyaXB0aW9uIjoidm9sdW1lQXR0cmlidXRlc0NsYXNzTmFtZSBtYXkgYmUgdXNlZCB0byBzZXQgdGhlIFZvbHVtZUF0dHJpYnV0ZXNDbGFzcyB1c2VkIGJ5IHRoaXMgY2xhaW0uIElmIHNwZWNpZmllZCwgdGhlIENTSSBkcml2ZXIgd2lsbCBjcmVhdGUgb3IgdXBkYXRlIHRoZSB2b2x1bWUgd2l0aCB0aGUgYXR0cmlidXRlcyBkZWZpbmVkIGluIHRoZSBjb3JyZXNwb25kaW5nIFZvbHVtZUF0dHJpYnV0ZXNDbGFzcy4gVGhpcyBoYXMgYSBkaWZmZXJlbnQgcHVycG9zZSB0aGFuIHN0b3JhZ2VDbGFzc05hbWUsIGl0IGNhbiBiZSBjaGFuZ2VkIGFmdGVyIHRoZSBjbGFpbSBpcyBjcmVhdGVkLiBBbiBlbXB0eSBzdHJpbmcgdmFsdWUgbWVhbnMgdGhhdCBubyBWb2x1bWVBdHRyaWJ1dGVzQ2xhc3Mgd2lsbCBiZSBhcHBsaWVkIHRvIHRoZSBjbGFpbSBidXQgaXQncyBub3QgYWxsb3dlZCB0byByZXNldCB0aGlzIGZpZWxkIHRvIGVtcHR5IHN0cmluZyBvbmNlIGl0IGlzIHNldC4gSWYgdW5zcGVjaWZpZWQgYW5kIHRoZSBQZXJzaXN0ZW50Vm9sdW1lQ2xhaW0gaXMgdW5ib3VuZCwgdGhlIGRlZmF1bHQgVm9sdW1lQXR0cmlidXRlc0NsYXNzIHdpbGwgYmUgc2V0IGJ5IHRoZSBwZXJzaXN0ZW50dm9sdW1lIGNvbnRyb2xsZXIgaWYgaXQgZXhpc3RzLiBJZiB0aGUgcmVzb3VyY2UgcmVmZXJyZWQgdG8gYnkgdm9sdW1lQXR0cmlidXRlc0NsYXNzIGRvZXMgbm90IGV4aXN0LCB0aGlzIFBlcnNpc3RlbnRWb2x1bWVDbGFpbSB3aWxsIGJlIHNldCB0byBhIFBlbmRpbmcgc3RhdGUsIGFzIHJlZmxlY3RlZCBieSB0aGUgbW9kaWZ5Vm9sdW1lU3RhdHVzIGZpZWxkLCB1bnRpbCBzdWNoIGFzIGEgcmVzb3VyY2UgZXhpc3RzLiBNb3JlIGluZm86IGh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL2NvbmNlcHRzL3N0b3JhZ2UvcGVyc2lzdGVudC12b2x1bWVzI3ZvbHVtZWF0dHJpYnV0ZXNjbGFzcyAoQWxwaGEpIFVzaW5nIHRoaXMgZmllbGQgcmVxdWlyZXMgdGhlIFZvbHVtZUF0dHJpYnV0ZXNDbGFzcyBmZWF0dXJlIGdhdGUgdG8gYmUgZW5hYmxlZC4iLCJ0eXBlIjoic3RyaW5nIn0sInZvbHVtZU1vZGUiOnsiZGVzY3JpcHRpb24iOiJ2b2x1bWVNb2RlIGRlZmluZXMgd2hhdCB0eXBlIG9mIHZvbHVtZSBpcyByZXF1aXJlZCBieSB0aGUgY2xhaW0uIFZhbHVlIG9mIEZpbGVzeXN0ZW0gaXMgaW1wbGllZCB3aGVuIG5vdCBpbmNsdWRlZCBpbiBjbGFpbSBzcGVjLiIsInR5cGUiOiJzdHJpbmcifSwidm9sdW1lTmFtZSI6eyJkZXNjcmlwdGlvbiI6InZvbHVtZU5hbWUgaXMgdGhlIGJpbmRpbmcgcmVmZXJlbmNlIHRvIHRoZSBQZXJzaXN0ZW50Vm9sdW1lIGJhY2tpbmcgdGhpcyBjbGFpbS4iLCJ0eXBlIjoic3RyaW5nIn19LCJ0eXBlIjoib2JqZWN0In0sInN0YXR1cyI6eyJkZXNjcmlwdGlvbiI6InN0YXR1cyByZXByZXNlbnRzIHRoZSBjdXJyZW50IGluZm9ybWF0aW9uL3N0YXR1cyBvZiBhIHBlcnNpc3RlbnQgdm9sdW1lIGNsYWltLiBSZWFkLW9ubHkuIE1vcmUgaW5mbzogaHR0cHM6Ly9rdWJlcm5ldGVzLmlvL2RvY3MvY29uY2VwdHMvc3RvcmFnZS9wZXJzaXN0ZW50LXZvbHVtZXMjcGVyc2lzdGVudHZvbHVtZWNsYWltcyIsInByb3BlcnRpZXMiOnsiYWNjZXNzTW9kZXMiOnsiZGVzY3JpcHRpb24iOiJhY2Nlc3NNb2RlcyBjb250YWlucyB0aGUgYWN0dWFsIGFjY2VzcyBtb2RlcyB0aGUgdm9sdW1lIGJhY2tpbmcgdGhlIFBWQyBoYXMuIE1vcmUgaW5mbzogaHR0cHM6Ly9rdWJlcm5ldGVzLmlvL2RvY3MvY29uY2VwdHMvc3RvcmFnZS9wZXJzaXN0ZW50LXZvbHVtZXMjYWNjZXNzLW1vZGVzLTEiLCJpdGVtcyI6eyJ0eXBlIjoic3RyaW5nIn0sInR5cGUiOiJhcnJheSJ9LCJhbGxvY2F0ZWRSZXNvdXJjZVN0YXR1c2VzIjp7ImFkZGl0aW9uYWxQcm9wZXJ0aWVzIjp7ImRlc2NyaXB0aW9uIjoiV2hlbiBhIGNvbnRyb2xsZXIgcmVjZWl2ZXMgcGVyc2lzdGVudHZvbHVtZSBjbGFpbSB1cGRhdGUgd2l0aCBDbGFpbVJlc291cmNlU3RhdHVzIGZvciBhIHJlc291cmNlIHRoYXQgaXQgZG9lcyBub3QgcmVjb2duaXplcywgdGhlbiBpdCBzaG91bGQgaWdub3JlIHRoYXQgdXBkYXRlIGFuZCBsZXQgb3RoZXIgY29udHJvbGxlcnMgaGFuZGxlIGl0LiIsInR5cGUiOiJzdHJpbmcifSwiZGVzY3JpcHRpb24iOiJhbGxvY2F0ZWRSZXNvdXJjZVN0YXR1c2VzIHN0b3JlcyBzdGF0dXMgb2YgcmVzb3VyY2UgYmVpbmcgcmVzaXplZCBmb3IgdGhlIGdpdmVuIFBWQy4gS2V5IG5hbWVzIGZvbGxvdyBzdGFuZGFyZCBLdWJlcm5ldGVzIGxhYmVsIHN5bnRheC4gVmFsaWQgdmFsdWVzIGFyZSBlaXRoZXI6ICogVW4tcHJlZml4ZWQga2V5czogLSBzdG9yYWdlIC0gdGhlIGNhcGFjaXR5IG9mIHRoZSB2b2x1bWUuICogQ3VzdG9tIHJlc291cmNlcyBtdXN0IHVzZSBpbXBsZW1lbnRhdGlvbi1kZWZpbmVkIHByZWZpeGVkIG5hbWVzIHN1Y2ggYXMgXCJleGFtcGxlLmNvbS9teS1jdXN0b20tcmVzb3VyY2VcIiBBcGFydCBmcm9tIGFib3ZlIHZhbHVlcyAtIGtleXMgdGhhdCBhcmUgdW5wcmVmaXhlZCBvciBoYXZlIGt1YmVybmV0ZXMuaW8gcHJlZml4IGFyZSBjb25zaWRlcmVkIHJlc2VydmVkIGFuZCBoZW5jZSBtYXkgbm90IGJlIHVzZWQuIFxuIENsYWltUmVzb3VyY2VTdGF0dXMgY2FuIGJlIGluIGFueSBvZiBmb2xsb3dpbmcgc3RhdGVzOiAtIENvbnRyb2xsZXJSZXNpemVJblByb2dyZXNzOiBTdGF0ZSBzZXQgd2hlbiByZXNpemUgY29udHJvbGxlciBzdGFydHMgcmVzaXppbmcgdGhlIHZvbHVtZSBpbiBjb250cm9sLXBsYW5lLiAtIENvbnRyb2xsZXJSZXNpemVGYWlsZWQ6IFN0YXRlIHNldCB3aGVuIHJlc2l6ZSBoYXMgZmFpbGVkIGluIHJlc2l6ZSBjb250cm9sbGVyIHdpdGggYSB0ZXJtaW5hbCBlcnJvci4gLSBOb2RlUmVzaXplUGVuZGluZzogU3RhdGUgc2V0IHdoZW4gcmVzaXplIGNvbnRyb2xsZXIgaGFzIGZpbmlzaGVkIHJlc2l6aW5nIHRoZSB2b2x1bWUgYnV0IGZ1cnRoZXIgcmVzaXppbmcgb2Ygdm9sdW1lIGlzIG5lZWRlZCBvbiB0aGUgbm9kZS4gLSBOb2RlUmVzaXplSW5Qcm9ncmVzczogU3RhdGUgc2V0IHdoZW4ga3ViZWxldCBzdGFydHMgcmVzaXppbmcgdGhlIHZvbHVtZS4gLSBOb2RlUmVzaXplRmFpbGVkOiBTdGF0ZSBzZXQgd2hlbiByZXNpemluZyBoYXMgZmFpbGVkIGluIGt1YmVsZXQgd2l0aCBhIHRlcm1pbmFsIGVycm9yLiBUcmFuc2llbnQgZXJyb3JzIGRvbid0IHNldCBOb2RlUmVzaXplRmFpbGVkLiBGb3IgZXhhbXBsZTogaWYgZXhwYW5kaW5nIGEgUFZDIGZvciBtb3JlIGNhcGFjaXR5IC0gdGhpcyBmaWVsZCBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgc3RhdGVzOiAtIHB2Yy5zdGF0dXMuYWxsb2NhdGVkUmVzb3VyY2VTdGF0dXNbJ3N0b3JhZ2UnXSA9IFwiQ29udHJvbGxlclJlc2l6ZUluUHJvZ3Jlc3NcIiAtIHB2Yy5zdGF0dXMuYWxsb2NhdGVkUmVzb3VyY2VTdGF0dXNbJ3N0b3JhZ2UnXSA9IFwiQ29udHJvbGxlclJlc2l6ZUZhaWxlZFwiIC0gcHZjLnN0YXR1cy5hbGxvY2F0ZWRSZXNvdXJjZVN0YXR1c1snc3RvcmFnZSddID0gXCJOb2RlUmVzaXplUGVuZGluZ1wiIC0gcHZjLnN0YXR1cy5hbGxvY2F0ZWRSZXNvdXJjZVN0YXR1c1snc3RvcmFnZSddID0gXCJOb2RlUmVzaXplSW5Qcm9ncmVzc1wiIC0gcHZjLnN0YXR1cy5hbGxvY2F0ZWRSZXNvdXJjZVN0YXR1c1snc3RvcmFnZSddID0gXCJOb2RlUmVzaXplRmFpbGVkXCIgV2hlbiB0aGlzIGZpZWxkIGlzIG5vdCBzZXQsIGl0IG1lYW5zIHRoYXQgbm8gcmVzaXplIG9wZXJhdGlvbiBpcyBpbiBwcm9ncmVzcyBmb3IgdGhlIGdpdmVuIFBWQy4gXG4gQSBjb250cm9sbGVyIHRoYXQgcmVjZWl2ZXMgUFZDIHVwZGF0ZSB3aXRoIHByZXZpb3VzbHkgdW5rbm93biByZXNvdXJjZU5hbWUgb3IgQ2xhaW1SZXNvdXJjZVN0YXR1cyBzaG91bGQgaWdub3JlIHRoZSB1cGRhdGUgZm9yIHRoZSBwdXJwb3NlIGl0IHdhcyBkZXNpZ25lZC4gRm9yIGV4YW1wbGUgLSBhIGNvbnRyb2xsZXIgdGhhdCBvbmx5IGlzIHJlc3BvbnNpYmxlIGZvciByZXNpemluZyBjYXBhY2l0eSBvZiB0aGUgdm9sdW1lLCBzaG91bGQgaWdub3JlIFBWQyB1cGRhdGVzIHRoYXQgY2hhbmdlIG90aGVyIHZhbGlkIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggUFZDLiBcbiBUaGlzIGlzIGFuIGFscGhhIGZpZWxkIGFuZCByZXF1aXJlcyBlbmFibGluZyBSZWNvdmVyVm9sdW1lRXhwYW5zaW9uRmFpbHVyZSBmZWF0dXJlLiIsInR5cGUiOiJvYmplY3QiLCJ4LWt1YmVybmV0ZXMtbWFwLXR5cGUiOiJncmFudWxhciJ9LCJhbGxvY2F0ZWRSZXNvdXJjZXMiOnsiYWRkaXRpb25hbFByb3BlcnRpZXMiOnsiYW55T2YiOlt7InR5cGUiOiJpbnRlZ2VyIn0seyJ0eXBlIjoic3RyaW5nIn1dLCJwYXR0ZXJuIjoiXihcXCt8LSk/KChbMC05XSsoXFwuWzAtOV0qKT8pfChcXC5bMC05XSspKSgoW0tNR1RQRV1pKXxbbnVta01HVFBFXXwoW2VFXShcXCt8LSk/KChbMC05XSsoXFwuWzAtOV0qKT8pfChcXC5bMC05XSspKSkpPyQiLCJ4LWt1YmVybmV0ZXMtaW50LW9yLXN0cmluZyI6dHJ1ZX0sImRlc2NyaXB0aW9uIjoiYWxsb2NhdGVkUmVzb3VyY2VzIHRyYWNrcyB0aGUgcmVzb3VyY2VzIGFsbG9jYXRlZCB0byBhIFBWQyBpbmNsdWRpbmcgaXRzIGNhcGFjaXR5LiBLZXkgbmFtZXMgZm9sbG93IHN0YW5kYXJkIEt1YmVybmV0ZXMgbGFiZWwgc3ludGF4LiBWYWxpZCB2YWx1ZXMgYXJlIGVpdGhlcjogKiBVbi1wcmVmaXhlZCBrZXlzOiAtIHN0b3JhZ2UgLSB0aGUgY2FwYWNpdHkgb2YgdGhlIHZvbHVtZS4gKiBDdXN0b20gcmVzb3VyY2VzIG11c3QgdXNlIGltcGxlbWVudGF0aW9uLWRlZmluZWQgcHJlZml4ZWQgbmFtZXMgc3VjaCBhcyBcImV4YW1wbGUuY29tL215LWN1c3RvbS1yZXNvdXJjZVwiIEFwYXJ0IGZyb20gYWJvdmUgdmFsdWVzIC0ga2V5cyB0aGF0IGFyZSB1bnByZWZpeGVkIG9yIGhhdmUga3ViZXJuZXRlcy5pbyBwcmVmaXggYXJlIGNvbnNpZGVyZWQgcmVzZXJ2ZWQgYW5kIGhlbmNlIG1heSBub3QgYmUgdXNlZC4gXG4gQ2FwYWNpdHkgcmVwb3J0ZWQgaGVyZSBtYXkgYmUgbGFyZ2VyIHRoYW4gdGhlIGFjdHVhbCBjYXBhY2l0eSB3aGVuIGEgdm9sdW1lIGV4cGFuc2lvbiBvcGVyYXRpb24gaXMgcmVxdWVzdGVkLiBGb3Igc3RvcmFnZSBxdW90YSwgdGhlIGxhcmdlciB2YWx1ZSBmcm9tIGFsbG9jYXRlZFJlc291cmNlcyBhbmQgUFZDLnNwZWMucmVzb3VyY2VzIGlzIHVzZWQuIElmIGFsbG9jYXRlZFJlc291cmNlcyBpcyBub3Qgc2V0LCBQVkMuc3BlYy5yZXNvdXJjZXMgYWxvbmUgaXMgdXNlZCBmb3IgcXVvdGEgY2FsY3VsYXRpb24uIElmIGEgdm9sdW1lIGV4cGFuc2lvbiBjYXBhY2l0eSByZXF1ZXN0IGlzIGxvd2VyZWQsIGFsbG9jYXRlZFJlc291cmNlcyBpcyBvbmx5IGxvd2VyZWQgaWYgdGhlcmUgYXJlIG5vIGV4cGFuc2lvbiBvcGVyYXRpb25zIGluIHByb2dyZXNzIGFuZCBpZiB0aGUgYWN0dWFsIHZvbHVtZSBjYXBhY2l0eSBpcyBlcXVhbCBvciBsb3dlciB0aGFuIHRoZSByZXF1ZXN0ZWQgY2FwYWNpdHkuIFxuIEEgY29udHJvbGxlciB0aGF0IHJlY2VpdmVzIFBWQyB1cGRhdGUgd2l0aCBwcmV2aW91c2x5IHVua25vd24gcmVzb3VyY2VOYW1lIHNob3VsZCBpZ25vcmUgdGhlIHVwZGF0ZSBmb3IgdGhlIHB1cnBvc2UgaXQgd2FzIGRlc2lnbmVkLiBGb3IgZXhhbXBsZSAtIGEgY29udHJvbGxlciB0aGF0IG9ubHkgaXMgcmVzcG9uc2libGUgZm9yIHJlc2l6aW5nIGNhcGFjaXR5IG9mIHRoZSB2b2x1bWUsIHNob3VsZCBpZ25vcmUgUFZDIHVwZGF0ZXMgdGhhdCBjaGFuZ2Ugb3RoZXIgdmFsaWQgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCBQVkMuIFxuIFRoaXMgaXMgYW4gYWxwaGEgZmllbGQgYW5kIHJlcXVpcmVzIGVuYWJsaW5nIFJlY292ZXJWb2x1bWVFeHBhbnNpb25GYWlsdXJlIGZlYXR1cmUuIiwidHlwZSI6Im9iamVjdCJ9LCJjYXBhY2l0eSI6eyJhZGRpdGlvbmFsUHJvcGVydGllcyI6eyJhbnlPZiI6W3sidHlwZSI6ImludGVnZXIifSx7InR5cGUiOiJzdHJpbmcifV0sInBhdHRlcm4iOiJeKFxcK3wtKT8oKFswLTldKyhcXC5bMC05XSopPyl8KFxcLlswLTldKykpKChbS01HVFBFXWkpfFtudW1rTUdUUEVdfChbZUVdKFxcK3wtKT8oKFswLTldKyhcXC5bMC05XSopPyl8KFxcLlswLTldKykpKSk/JCIsIngta3ViZXJuZXRlcy1pbnQtb3Itc3RyaW5nIjp0cnVlfSwiZGVzY3JpcHRpb24iOiJjYXBhY2l0eSByZXByZXNlbnRzIHRoZSBhY3R1YWwgcmVzb3VyY2VzIG9mIHRoZSB1bmRlcmx5aW5nIHZvbHVtZS4iLCJ0eXBlIjoib2JqZWN0In0sImNvbmRpdGlvbnMiOnsiZGVzY3JpcHRpb24iOiJjb25kaXRpb25zIGlzIHRoZSBjdXJyZW50IENvbmRpdGlvbiBvZiBwZXJzaXN0ZW50IHZvbHVtZSBjbGFpbS4gSWYgdW5kZXJseWluZyBwZXJzaXN0ZW50IHZvbHVtZSBpcyBiZWluZyByZXNpemVkIHRoZW4gdGhlIENvbmRpdGlvbiB3aWxsIGJlIHNldCB0byAnUmVzaXplU3RhcnRlZCcuIiwiaXRlbXMiOnsiZGVzY3JpcHRpb24iOiJQZXJzaXN0ZW50Vm9sdW1lQ2xhaW1Db25kaXRpb24gY29udGFpbnMgZGV0YWlscyBhYm91dCBzdGF0ZSBvZiBwdmMiLCJwcm9wZXJ0aWVzIjp7Imxhc3RQcm9iZVRpbWUiOnsiZGVzY3JpcHRpb24iOiJsYXN0UHJvYmVUaW1lIGlzIHRoZSB0aW1lIHdlIHByb2JlZCB0aGUgY29uZGl0aW9uLiIsImZvcm1hdCI6ImRhdGUtdGltZSIsInR5cGUiOiJzdHJpbmcifSwibGFzdFRyYW5zaXRpb25UaW1lIjp7ImRlc2NyaXB0aW9uIjoibGFzdFRyYW5zaXRpb25UaW1lIGlzIHRoZSB0aW1lIHRoZSBjb25kaXRpb24gdHJhbnNpdGlvbmVkIGZyb20gb25lIHN0YXR1cyB0byBhbm90aGVyLiIsImZvcm1hdCI6ImRhdGUtdGltZSIsInR5cGUiOiJzdHJpbmcifSwibWVzc2FnZSI6eyJkZXNjcmlwdGlvbiI6Im1lc3NhZ2UgaXMgdGhlIGh1bWFuLXJlYWRhYmxlIG1lc3NhZ2UgaW5kaWNhdGluZyBkZXRhaWxzIGFib3V0IGxhc3QgdHJhbnNpdGlvbi4iLCJ0eXBlIjoic3RyaW5nIn0sInJlYXNvbiI6eyJkZXNjcmlwdGlvbiI6InJlYXNvbiBpcyBhIHVuaXF1ZSwgdGhpcyBzaG91bGQgYmUgYSBzaG9ydCwgbWFjaGluZSB1bmRlcnN0YW5kYWJsZSBzdHJpbmcgdGhhdCBnaXZlcyB0aGUgcmVhc29uIGZvciBjb25kaXRpb24ncyBsYXN0IHRyYW5zaXRpb24uIElmIGl0IHJlcG9ydHMgXCJSZXNpemVTdGFydGVkXCIgdGhhdCBtZWFucyB0aGUgdW5kZXJseWluZyBwZXJzaXN0ZW50IHZvbHVtZSBpcyBiZWluZyByZXNpemVkLiIsInR5cGUiOiJzdHJpbmcifSwic3RhdHVzIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6eyJkZXNjcmlwdGlvbiI6IlBlcnNpc3RlbnRWb2x1bWVDbGFpbUNvbmRpdGlvblR5cGUgaXMgYSB2YWxpZCB2YWx1ZSBvZiBQZXJzaXN0ZW50Vm9sdW1lQ2xhaW1Db25kaXRpb24uVHlwZSIsInR5cGUiOiJzdHJpbmcifX0sInJlcXVpcmVkIjpbInN0YXR1cyIsInR5cGUiXSwidHlwZSI6Im9iamVjdCJ9LCJ0eXBlIjoiYXJyYXkifSwiY3VycmVudFZvbHVtZUF0dHJpYnV0ZXNDbGFzc05hbWUiOnsiZGVzY3JpcHRpb24iOiJjdXJyZW50Vm9sdW1lQXR0cmlidXRlc0NsYXNzTmFtZSBpcyB0aGUgY3VycmVudCBuYW1lIG9mIHRoZSBWb2x1bWVBdHRyaWJ1dGVzQ2xhc3MgdGhlIFBWQyBpcyB1c2luZy4gV2hlbiB1bnNldCwgdGhlcmUgaXMgbm8gVm9sdW1lQXR0cmlidXRlQ2xhc3MgYXBwbGllZCB0byB0aGlzIFBlcnNpc3RlbnRWb2x1bWVDbGFpbSBUaGlzIGlzIGFuIGFscGhhIGZpZWxkIGFuZCByZXF1aXJlcyBlbmFibGluZyBWb2x1bWVBdHRyaWJ1dGVzQ2xhc3MgZmVhdHVyZS4iLCJ0eXBlIjoic3RyaW5nIn0sIm1vZGlmeVZvbHVtZVN0YXR1cyI6eyJkZXNjcmlwdGlvbiI6Ik1vZGlmeVZvbHVtZVN0YXR1cyByZXByZXNlbnRzIHRoZSBzdGF0dXMgb2JqZWN0IG9mIENvbnRyb2xsZXJNb2RpZnlWb2x1bWUgb3BlcmF0aW9uLiBXaGVuIHRoaXMgaXMgdW5zZXQsIHRoZXJlIGlzIG5vIE1vZGlmeVZvbHVtZSBvcGVyYXRpb24gYmVpbmcgYXR0ZW1wdGVkLiBUaGlzIGlzIGFuIGFscGhhIGZpZWxkIGFuZCByZXF1aXJlcyBlbmFibGluZyBWb2x1bWVBdHRyaWJ1dGVzQ2xhc3MgZmVhdHVyZS4iLCJwcm9wZXJ0aWVzIjp7InN0YXR1cyI6eyJkZXNjcmlwdGlvbiI6InN0YXR1cyBpcyB0aGUgc3RhdHVzIG9mIHRoZSBDb250cm9sbGVyTW9kaWZ5Vm9sdW1lIG9wZXJhdGlvbi4gSXQgY2FuIGJlIGluIGFueSBvZiBmb2xsb3dpbmcgc3RhdGVzOiAtIFBlbmRpbmcgUGVuZGluZyBpbmRpY2F0ZXMgdGhhdCB0aGUgUGVyc2lzdGVudFZvbHVtZUNsYWltIGNhbm5vdCBiZSBtb2RpZmllZCBkdWUgdG8gdW5tZXQgcmVxdWlyZW1lbnRzLCBzdWNoIGFzIHRoZSBzcGVjaWZpZWQgVm9sdW1lQXR0cmlidXRlc0NsYXNzIG5vdCBleGlzdGluZy4gLSBJblByb2dyZXNzIEluUHJvZ3Jlc3MgaW5kaWNhdGVzIHRoYXQgdGhlIHZvbHVtZSBpcyBiZWluZyBtb2RpZmllZC4gLSBJbmZlYXNpYmxlIEluZmVhc2libGUgaW5kaWNhdGVzIHRoYXQgdGhlIHJlcXVlc3QgaGFzIGJlZW4gcmVqZWN0ZWQgYXMgaW52YWxpZCBieSB0aGUgQ1NJIGRyaXZlci4gVG8gcmVzb2x2ZSB0aGUgZXJyb3IsIGEgdmFsaWQgVm9sdW1lQXR0cmlidXRlc0NsYXNzIG5lZWRzIHRvIGJlIHNwZWNpZmllZC4gTm90ZTogTmV3IHN0YXR1c2VzIGNhbiBiZSBhZGRlZCBpbiB0aGUgZnV0dXJlLiBDb25zdW1lcnMgc2hvdWxkIGNoZWNrIGZvciB1bmtub3duIHN0YXR1c2VzIGFuZCBmYWlsIGFwcHJvcHJpYXRlbHkuIiwidHlwZSI6InN0cmluZyJ9LCJ0YXJnZXRWb2x1bWVBdHRyaWJ1dGVzQ2xhc3NOYW1lIjp7ImRlc2NyaXB0aW9uIjoidGFyZ2V0Vm9sdW1lQXR0cmlidXRlc0NsYXNzTmFtZSBpcyB0aGUgbmFtZSBvZiB0aGUgVm9sdW1lQXR0cmlidXRlc0NsYXNzIHRoZSBQVkMgY3VycmVudGx5IGJlaW5nIHJlY29uY2lsZWQiLCJ0eXBlIjoic3RyaW5nIn19LCJyZXF1aXJlZCI6WyJzdGF0dXMiXSwidHlwZSI6Im9iamVjdCJ9LCJwaGFzZSI6eyJkZXNjcmlwdGlvbiI6InBoYXNlIHJlcHJlc2VudHMgdGhlIGN1cnJlbnQgcGhhc2Ugb2YgUGVyc2lzdGVudFZvbHVtZUNsYWltLiIsInR5cGUiOiJzdHJpbmcifX0sInR5cGUiOiJvYmplY3QifX0sInR5cGUiOiJvYmplY3QifSwibmFtZSI6eyJ0eXBlIjoic3RyaW5nIn0sInBsYWNlbWVudCI6eyJkZXNjcmlwdGlvbiI6IlBsYWNlbWVudCBpcyB0aGUgcGxhY2VtZW50IGZvciBhbiBvYmplY3QiLCJwcm9wZXJ0aWVzIjp7Im5vZGVBZmZpbml0eSI6eyJkZXNjcmlwdGlvbiI6Ik5vZGVBZmZpbml0eSBpcyBhIGdyb3VwIG9mIG5vZGUgYWZmaW5pdHkgc2NoZWR1bGluZyBydWxlcyIsInByb3BlcnRpZXMiOnsicHJlZmVycmVkRHVyaW5nU2NoZWR1bGluZ0lnbm9yZWREdXJpbmdFeGVjdXRpb24iOnsiZGVzY3JpcHRpb24iOiJUaGUgc2NoZWR1bGVyIHdpbGwgcHJlZmVyIHRvIHNjaGVkdWxlIHBvZHMgdG8gbm9kZXMgdGhhdCBzYXRpc2Z5IHRoZSBhZmZpbml0eSBleHByZXNzaW9ucyBzcGVjaWZpZWQgYnkgdGhpcyBmaWVsZCwgYnV0IGl0IG1heSBjaG9vc2UgYSBub2RlIHRoYXQgdmlvbGF0ZXMgb25lIG9yIG1vcmUgb2YgdGhlIGV4cHJlc3Npb25zLiBUaGUgbm9kZSB0aGF0IGlzIG1vc3QgcHJlZmVycmVkIGlzIHRoZSBvbmUgd2l0aCB0aGUgZ3JlYXRlc3Qgc3VtIG9mIHdlaWdodHMsIGkuZS4gZm9yIGVhY2ggbm9kZSB0aGF0IG1lZXRzIGFsbCBvZiB0aGUgc2NoZWR1bGluZyByZXF1aXJlbWVudHMgKHJlc291cmNlIHJlcXVlc3QsIHJlcXVpcmVkRHVyaW5nU2NoZWR1bGluZyBhZmZpbml0eSBleHByZXNzaW9ucywgZXRjLiksIGNvbXB1dGUgYSBzdW0gYnkgaXRlcmF0aW5nIHRocm91Z2ggdGhlIGVsZW1lbnRzIG9mIHRoaXMgZmllbGQgYW5kIGFkZGluZyBcIndlaWdodFwiIHRvIHRoZSBzdW0gaWYgdGhlIG5vZGUgbWF0Y2hlcyB0aGUgY29ycmVzcG9uZGluZyBtYXRjaEV4cHJlc3Npb25zOyB0aGUgbm9kZShzKSB3aXRoIHRoZSBoaWdoZXN0IHN1bSBhcmUgdGhlIG1vc3QgcHJlZmVycmVkLiIsIml0ZW1zIjp7ImRlc2NyaXB0aW9uIjoiQW4gZW1wdHkgcHJlZmVycmVkIHNjaGVkdWxpbmcgdGVybSBtYXRjaGVzIGFsbCBvYmplY3RzIHdpdGggaW1wbGljaXQgd2VpZ2h0IDAgKGkuZS4gaXQncyBhIG5vLW9wKS4gQSBudWxsIHByZWZlcnJlZCBzY2hlZHVsaW5nIHRlcm0gbWF0Y2hlcyBubyBvYmplY3RzIChpLmUuIGlzIGFsc28gYSBuby1vcCkuIiwicHJvcGVydGllcyI6eyJwcmVmZXJlbmNlIjp7ImRlc2NyaXB0aW9uIjoiQSBub2RlIHNlbGVjdG9yIHRlcm0sIGFzc29jaWF0ZWQgd2l0aCB0aGUgY29ycmVzcG9uZGluZyB3ZWlnaHQuIiwicHJvcGVydGllcyI6eyJtYXRjaEV4cHJlc3Npb25zIjp7ImRlc2NyaXB0aW9uIjoiQSBsaXN0IG9mIG5vZGUgc2VsZWN0b3IgcmVxdWlyZW1lbnRzIGJ5IG5vZGUncyBsYWJlbHMuIiwiaXRlbXMiOnsiZGVzY3JpcHRpb24iOiJBIG5vZGUgc2VsZWN0b3IgcmVxdWlyZW1lbnQgaXMgYSBzZWxlY3RvciB0aGF0IGNvbnRhaW5zIHZhbHVlcywgYSBrZXksIGFuZCBhbiBvcGVyYXRvciB0aGF0IHJlbGF0ZXMgdGhlIGtleSBhbmQgdmFsdWVzLiIsInByb3BlcnRpZXMiOnsia2V5Ijp7ImRlc2NyaXB0aW9uIjoiVGhlIGxhYmVsIGtleSB0aGF0IHRoZSBzZWxlY3RvciBhcHBsaWVzIHRvLiIsInR5cGUiOiJzdHJpbmcifSwib3BlcmF0b3IiOnsiZGVzY3JpcHRpb24iOiJSZXByZXNlbnRzIGEga2V5J3MgcmVsYXRpb25zaGlwIHRvIGEgc2V0IG9mIHZhbHVlcy4gVmFsaWQgb3BlcmF0b3JzIGFyZSBJbiwgTm90SW4sIEV4aXN0cywgRG9lc05vdEV4aXN0LiBHdCwgYW5kIEx0LiIsInR5cGUiOiJzdHJpbmcifSwidmFsdWVzIjp7ImRlc2NyaXB0aW9uIjoiQW4gYXJyYXkgb2Ygc3RyaW5nIHZhbHVlcy4gSWYgdGhlIG9wZXJhdG9yIGlzIEluIG9yIE5vdEluLCB0aGUgdmFsdWVzIGFycmF5IG11c3QgYmUgbm9uLWVtcHR5LiBJZiB0aGUgb3BlcmF0b3IgaXMgRXhpc3RzIG9yIERvZXNOb3RFeGlzdCwgdGhlIHZhbHVlcyBhcnJheSBtdXN0IGJlIGVtcHR5LiBJZiB0aGUgb3BlcmF0b3IgaXMgR3Qgb3IgTHQsIHRoZSB2YWx1ZXMgYXJyYXkgbXVzdCBoYXZlIGEgc2luZ2xlIGVsZW1lbnQsIHdoaWNoIHdpbGwgYmUgaW50ZXJwcmV0ZWQgYXMgYW4gaW50ZWdlci4gVGhpcyBhcnJheSBpcyByZXBsYWNlZCBkdXJpbmcgYSBzdHJhdGVnaWMgbWVyZ2UgcGF0Y2guIiwiaXRlbXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjoiYXJyYXkifX0sInJlcXVpcmVkIjpbImtleSIsIm9wZXJhdG9yIl0sInR5cGUiOiJvYmplY3QifSwidHlwZSI6ImFycmF5In0sIm1hdGNoRmllbGRzIjp7ImRlc2NyaXB0aW9uIjoiQSBsaXN0IG9mIG5vZGUgc2VsZWN0b3IgcmVxdWlyZW1lbnRzIGJ5IG5vZGUncyBmaWVsZHMuIiwiaXRlbXMiOnsiZGVzY3JpcHRpb24iOiJBIG5vZGUgc2VsZWN0b3IgcmVxdWlyZW1lbnQgaXMgYSBzZWxlY3RvciB0aGF0IGNvbnRhaW5zIHZhbHVlcywgYSBrZXksIGFuZCBhbiBvcGVyYXRvciB0aGF0IHJlbGF0ZXMgdGhlIGtleSBhbmQgdmFsdWVzLiIsInByb3BlcnRpZXMiOnsia2V5Ijp7ImRlc2NyaXB0aW9uIjoiVGhlIGxhYmVsIGtleSB0aGF0IHRoZSBzZWxlY3RvciBhcHBsaWVzIHRvLiIsInR5cGUiOiJzdHJpbmcifSwib3BlcmF0b3IiOnsiZGVzY3JpcHRpb24iOiJSZXByZXNlbnRzIGEga2V5J3MgcmVsYXRpb25zaGlwIHRvIGEgc2V0IG9mIHZhbHVlcy4gVmFsaWQgb3BlcmF0b3JzIGFyZSBJbiwgTm90SW4sIEV4aXN0cywgRG9lc05vdEV4aXN0LiBHdCwgYW5kIEx0LiIsInR5cGUiOiJzdHJpbmcifSwidmFsdWVzIjp7ImRlc2NyaXB0aW9uIjoiQW4gYXJyYXkgb2Ygc3RyaW5nIHZhbHVlcy4gSWYgdGhlIG9wZXJhdG9yIGlzIEluIG9yIE5vdEluLCB0aGUgdmFsdWVzIGFycmF5IG11c3QgYmUgbm9uLWVtcHR5LiBJZiB0aGUgb3BlcmF0b3IgaXMgRXhpc3RzIG9yIERvZXNOb3RFeGlzdCwgdGhlIHZhbHVlcyBhcnJheSBtdXN0IGJlIGVtcHR5LiBJZiB0aGUgb3BlcmF0b3IgaXMgR3Qgb3IgTHQsIHRoZSB2YWx1ZXMgYXJyYXkgbXVzdCBoYXZlIGEgc2luZ2xlIGVsZW1lbnQsIHdoaWNoIHdpbGwgYmUgaW50ZXJwcmV0ZWQgYXMgYW4gaW50ZWdlci4gVGhpcyBhcnJheSBpcyByZXBsYWNlZCBkdXJpbmcgYSBzdHJhdGVnaWMgbWVyZ2UgcGF0Y2guIiwiaXRlbXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjoiYXJyYXkifX0sInJlcXVpcmVkIjpbImtleSIsIm9wZXJhdG9yIl0sInR5cGUiOiJvYmplY3QifSwidHlwZSI6ImFycmF5In19LCJ0eXBlIjoib2JqZWN0IiwieC1rdWJlcm5ldGVzLW1hcC10eXBlIjoiYXRvbWljIn0sIndlaWdodCI6eyJkZXNjcmlwdGlvbiI6IldlaWdodCBhc3NvY2lhdGVkIHdpdGggbWF0Y2hpbmcgdGhlIGNvcnJlc3BvbmRpbmcgbm9kZVNlbGVjdG9yVGVybSwgaW4gdGhlIHJhbmdlIDEtMTAwLiIsImZvcm1hdCI6ImludDMyIiwidHlwZSI6ImludGVnZXIifX0sInJlcXVpcmVkIjpbInByZWZlcmVuY2UiLCJ3ZWlnaHQiXSwidHlwZSI6Im9iamVjdCJ9LCJ0eXBlIjoiYXJyYXkifSwicmVxdWlyZWREdXJpbmdTY2hlZHVsaW5nSWdub3JlZER1cmluZ0V4ZWN1dGlvbiI6eyJkZXNjcmlwdGlvbiI6IklmIHRoZSBhZmZpbml0eSByZXF1aXJlbWVudHMgc3BlY2lmaWVkIGJ5IHRoaXMgZmllbGQgYXJlIG5vdCBtZXQgYXQgc2NoZWR1bGluZyB0aW1lLCB0aGUgcG9kIHdpbGwgbm90IGJlIHNjaGVkdWxlZCBvbnRvIHRoZSBub2RlLiBJZiB0aGUgYWZmaW5pdHkgcmVxdWlyZW1lbnRzIHNwZWNpZmllZCBieSB0aGlzIGZpZWxkIGNlYXNlIHRvIGJlIG1ldCBhdCBzb21lIHBvaW50IGR1cmluZyBwb2QgZXhlY3V0aW9uIChlLmcuIGR1ZSB0byBhbiB1cGRhdGUpLCB0aGUgc3lzdGVtIG1heSBvciBtYXkgbm90IHRyeSB0byBldmVudHVhbGx5IGV2aWN0IHRoZSBwb2QgZnJvbSBpdHMgbm9kZS4iLCJwcm9wZXJ0aWVzIjp7Im5vZGVTZWxlY3RvclRlcm1zIjp7ImRlc2NyaXB0aW9uIjoiUmVxdWlyZWQuIEEgbGlzdCBvZiBub2RlIHNlbGVjdG9yIHRlcm1zLiBUaGUgdGVybXMgYXJlIE9SZWQuIiwiaXRlbXMiOnsiZGVzY3JpcHRpb24iOiJBIG51bGwgb3IgZW1wdHkgbm9kZSBzZWxlY3RvciB0ZXJtIG1hdGNoZXMgbm8gb2JqZWN0cy4gVGhlIHJlcXVpcmVtZW50cyBvZiB0aGVtIGFyZSBBTkRlZC4gVGhlIFRvcG9sb2d5U2VsZWN0b3JUZXJtIHR5cGUgaW1wbGVtZW50cyBhIHN1YnNldCBvZiB0aGUgTm9kZVNlbGVjdG9yVGVybS4iLCJwcm9wZXJ0aWVzIjp7Im1hdGNoRXhwcmVzc2lvbnMiOnsiZGVzY3JpcHRpb24iOiJBIGxpc3Qgb2Ygbm9kZSBzZWxlY3RvciByZXF1aXJlbWVudHMgYnkgbm9kZSdzIGxhYmVscy4iLCJpdGVtcyI6eyJkZXNjcmlwdGlvbiI6IkEgbm9kZSBzZWxlY3RvciByZXF1aXJlbWVudCBpcyBhIHNlbGVjdG9yIHRoYXQgY29udGFpbnMgdmFsdWVzLCBhIGtleSwgYW5kIGFuIG9wZXJhdG9yIHRoYXQgcmVsYXRlcyB0aGUga2V5IGFuZCB2YWx1ZXMuIiwicHJvcGVydGllcyI6eyJrZXkiOnsiZGVzY3JpcHRpb24iOiJUaGUgbGFiZWwga2V5IHRoYXQgdGhlIHNlbGVjdG9yIGFwcGxpZXMgdG8uIiwidHlwZSI6InN0cmluZyJ9LCJvcGVyYXRvciI6eyJkZXNjcmlwdGlvbiI6IlJlcHJlc2VudHMgYSBrZXkncyByZWxhdGlvbnNoaXAgdG8gYSBzZXQgb2YgdmFsdWVzLiBWYWxpZCBvcGVyYXRvcnMgYXJlIEluLCBOb3RJbiwgRXhpc3RzLCBEb2VzTm90RXhpc3QuIEd0LCBhbmQgTHQuIiwidHlwZSI6InN0cmluZyJ9LCJ2YWx1ZXMiOnsiZGVzY3JpcHRpb24iOiJBbiBhcnJheSBvZiBzdHJpbmcgdmFsdWVzLiBJZiB0aGUgb3BlcmF0b3IgaXMgSW4gb3IgTm90SW4sIHRoZSB2YWx1ZXMgYXJyYXkgbXVzdCBiZSBub24tZW1wdHkuIElmIHRoZSBvcGVyYXRvciBpcyBFeGlzdHMgb3IgRG9lc05vdEV4aXN0LCB0aGUgdmFsdWVzIGFycmF5IG11c3QgYmUgZW1wdHkuIElmIHRoZSBvcGVyYXRvciBpcyBHdCBvciBMdCwgdGhlIHZhbHVlcyBhcnJheSBtdXN0IGhhdmUgYSBzaW5nbGUgZWxlbWVudCwgd2hpY2ggd2lsbCBiZSBpbnRlcnByZXRlZCBhcyBhbiBpbnRlZ2VyLiBUaGlzIGFycmF5IGlzIHJlcGxhY2VkIGR1cmluZyBhIHN0cmF0ZWdpYyBtZXJnZSBwYXRjaC4iLCJpdGVtcyI6eyJ0eXBlIjoic3RyaW5nIn0sInR5cGUiOiJhcnJheSJ9fSwicmVxdWlyZWQiOlsia2V5Iiwib3BlcmF0b3IiXSwidHlwZSI6Im9iamVjdCJ9LCJ0eXBlIjoiYXJyYXkifSwibWF0Y2hGaWVsZHMiOnsiZGVzY3JpcHRpb24iOiJBIGxpc3Qgb2Ygbm9kZSBzZWxlY3RvciByZXF1aXJlbWVudHMgYnkgbm9kZSdzIGZpZWxkcy4iLCJpdGVtcyI6eyJkZXNjcmlwdGlvbiI6IkEgbm9kZSBzZWxlY3RvciByZXF1aXJlbWVudCBpcyBhIHNlbGVjdG9yIHRoYXQgY29udGFpbnMgdmFsdWVzLCBhIGtleSwgYW5kIGFuIG9wZXJhdG9yIHRoYXQgcmVsYXRlcyB0aGUga2V5IGFuZCB2YWx1ZXMuIiwicHJvcGVydGllcyI6eyJrZXkiOnsiZGVzY3JpcHRpb24iOiJUaGUgbGFiZWwga2V5IHRoYXQgdGhlIHNlbGVjdG9yIGFwcGxpZXMgdG8uIiwidHlwZSI6InN0cmluZyJ9LCJvcGVyYXRvciI6eyJkZXNjcmlwdGlvbiI6IlJlcHJlc2VudHMgYSBrZXkncyByZWxhdGlvbnNoaXAgdG8gYSBzZXQgb2YgdmFsdWVzLiBWYWxpZCBvcGVyYXRvcnMgYXJlIEluLCBOb3RJbiwgRXhpc3RzLCBEb2VzTm90RXhpc3QuIEd0LCBhbmQgTHQuIiwidHlwZSI6InN0cmluZyJ9LCJ2YWx1ZXMiOnsiZGVzY3JpcHRpb24iOiJBbiBhcnJheSBvZiBzdHJpbmcgdmFsdWVzLiBJZiB0aGUgb3BlcmF0b3IgaXMgSW4gb3IgTm90SW4sIHRoZSB2YWx1ZXMgYXJyYXkgbXVzdCBiZSBub24tZW1wdHkuIElmIHRoZSBvcGVyYXRvciBpcyBFeGlzdHMgb3IgRG9lc05vdEV4aXN0LCB0aGUgdmFsdWVzIGFycmF5IG11c3QgYmUgZW1wdHkuIElmIHRoZSBvcGVyYXRvciBpcyBHdCBvciBMdCwgdGhlIHZhbHVlcyBhcnJheSBtdXN0IGhhdmUgYSBzaW5nbGUgZWxlbWVudCwgd2hpY2ggd2lsbCBiZSBpbnRlcnByZXRlZCBhcyBhbiBpbnRlZ2VyLiBUaGlzIGFycmF5IGlzIHJlcGxhY2VkIGR1cmluZyBhIHN0cmF0ZWdpYyBtZXJnZSBwYXRjaC4iLCJpdGVtcyI6eyJ0eXBlIjoic3RyaW5nIn0sInR5cGUiOiJhcnJheSJ9fSwicmVxdWlyZWQiOlsia2V5Iiwib3BlcmF0b3IiXSwidHlwZSI6Im9iamVjdCJ9LCJ0eXBlIjoiYXJyYXkifX0sInR5cGUiOiJvYmplY3QiLCJ4LWt1YmVybmV0ZXMtbWFwLXR5cGUiOiJhdG9taWMifSwidHlwZSI6ImFycmF5In19LCJyZXF1aXJlZCI6WyJub2RlU2VsZWN0b3JUZXJtcyJdLCJ0eXBlIjoib2JqZWN0IiwieC1rdWJlcm5ldGVzLW1hcC10eXBlIjoiYXRvbWljIn19LCJ0eXBlIjoib2JqZWN0In0sInBvZEFmZmluaXR5Ijp7ImRlc2NyaXB0aW9uIjoiUG9kQWZmaW5pdHkgaXMgYSBncm91cCBvZiBpbnRlciBwb2QgYWZmaW5pdHkgc2NoZWR1bGluZyBydWxlcyIsInByb3BlcnRpZXMiOnsicHJlZmVycmVkRHVyaW5nU2NoZWR1bGluZ0lnbm9yZWREdXJpbmdFeGVjdXRpb24iOnsiZGVzY3JpcHRpb24iOiJUaGUgc2NoZWR1bGVyIHdpbGwgcHJlZmVyIHRvIHNjaGVkdWxlIHBvZHMgdG8gbm9kZXMgdGhhdCBzYXRpc2Z5IHRoZSBhZmZpbml0eSBleHByZXNzaW9ucyBzcGVjaWZpZWQgYnkgdGhpcyBmaWVsZCwgYnV0IGl0IG1heSBjaG9vc2UgYSBub2RlIHRoYXQgdmlvbGF0ZXMgb25lIG9yIG1vcmUgb2YgdGhlIGV4cHJlc3Npb25zLiBUaGUgbm9kZSB0aGF0IGlzIG1vc3QgcHJlZmVycmVkIGlzIHRoZSBvbmUgd2l0aCB0aGUgZ3JlYXRlc3Qgc3VtIG9mIHdlaWdodHMsIGkuZS4gZm9yIGVhY2ggbm9kZSB0aGF0IG1lZXRzIGFsbCBvZiB0aGUgc2NoZWR1bGluZyByZXF1aXJlbWVudHMgKHJlc291cmNlIHJlcXVlc3QsIHJlcXVpcmVkRHVyaW5nU2NoZWR1bGluZyBhZmZpbml0eSBleHByZXNzaW9ucywgZXRjLiksIGNvbXB1dGUgYSBzdW0gYnkgaXRlcmF0aW5nIHRocm91Z2ggdGhlIGVsZW1lbnRzIG9mIHRoaXMgZmllbGQgYW5kIGFkZGluZyBcIndlaWdodFwiIHRvIHRoZSBzdW0gaWYgdGhlIG5vZGUgaGFzIHBvZHMgd2hpY2ggbWF0Y2hlcyB0aGUgY29ycmVzcG9uZGluZyBwb2RBZmZpbml0eVRlcm07IHRoZSBub2RlKHMpIHdpdGggdGhlIGhpZ2hlc3Qgc3VtIGFyZSB0aGUgbW9zdCBwcmVmZXJyZWQuIiwiaXRlbXMiOnsiZGVzY3JpcHRpb24iOiJUaGUgd2VpZ2h0cyBvZiBhbGwgb2YgdGhlIG1hdGNoZWQgV2VpZ2h0ZWRQb2RBZmZpbml0eVRlcm0gZmllbGRzIGFyZSBhZGRlZCBwZXItbm9kZSB0byBmaW5kIHRoZSBtb3N0IHByZWZlcnJlZCBub2RlKHMpIiwicHJvcGVydGllcyI6eyJwb2RBZmZpbml0eVRlcm0iOnsiZGVzY3JpcHRpb24iOiJSZXF1aXJlZC4gQSBwb2QgYWZmaW5pdHkgdGVybSwgYXNzb2NpYXRlZCB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIHdlaWdodC4iLCJwcm9wZXJ0aWVzIjp7ImxhYmVsU2VsZWN0b3IiOnsiZGVzY3JpcHRpb24iOiJBIGxhYmVsIHF1ZXJ5IG92ZXIgYSBzZXQgb2YgcmVzb3VyY2VzLCBpbiB0aGlzIGNhc2UgcG9kcy4gSWYgaXQncyBudWxsLCB0aGlzIFBvZEFmZmluaXR5VGVybSBtYXRjaGVzIHdpdGggbm8gUG9kcy4iLCJwcm9wZXJ0aWVzIjp7Im1hdGNoRXhwcmVzc2lvbnMiOnsiZGVzY3JpcHRpb24iOiJtYXRjaEV4cHJlc3Npb25zIGlzIGEgbGlzdCBvZiBsYWJlbCBzZWxlY3RvciByZXF1aXJlbWVudHMuIFRoZSByZXF1aXJlbWVudHMgYXJlIEFORGVkLiIsIml0ZW1zIjp7ImRlc2NyaXB0aW9uIjoiQSBsYWJlbCBzZWxlY3RvciByZXF1aXJlbWVudCBpcyBhIHNlbGVjdG9yIHRoYXQgY29udGFpbnMgdmFsdWVzLCBhIGtleSwgYW5kIGFuIG9wZXJhdG9yIHRoYXQgcmVsYXRlcyB0aGUga2V5IGFuZCB2YWx1ZXMuIiwicHJvcGVydGllcyI6eyJrZXkiOnsiZGVzY3JpcHRpb24iOiJrZXkgaXMgdGhlIGxhYmVsIGtleSB0aGF0IHRoZSBzZWxlY3RvciBhcHBsaWVzIHRvLiIsInR5cGUiOiJzdHJpbmcifSwib3BlcmF0b3IiOnsiZGVzY3JpcHRpb24iOiJvcGVyYXRvciByZXByZXNlbnRzIGEga2V5J3MgcmVsYXRpb25zaGlwIHRvIGEgc2V0IG9mIHZhbHVlcy4gVmFsaWQgb3BlcmF0b3JzIGFyZSBJbiwgTm90SW4sIEV4aXN0cyBhbmQgRG9lc05vdEV4aXN0LiIsInR5cGUiOiJzdHJpbmcifSwidmFsdWVzIjp7ImRlc2NyaXB0aW9uIjoidmFsdWVzIGlzIGFuIGFycmF5IG9mIHN0cmluZyB2YWx1ZXMuIElmIHRoZSBvcGVyYXRvciBpcyBJbiBvciBOb3RJbiwgdGhlIHZhbHVlcyBhcnJheSBtdXN0IGJlIG5vbi1lbXB0eS4gSWYgdGhlIG9wZXJhdG9yIGlzIEV4aXN0cyBvciBEb2VzTm90RXhpc3QsIHRoZSB2YWx1ZXMgYXJyYXkgbXVzdCBiZSBlbXB0eS4gVGhpcyBhcnJheSBpcyByZXBsYWNlZCBkdXJpbmcgYSBzdHJhdGVnaWMgbWVyZ2UgcGF0Y2guIiwiaXRlbXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjoiYXJyYXkifX0sInJlcXVpcmVkIjpbImtleSIsIm9wZXJhdG9yIl0sInR5cGUiOiJvYmplY3QifSwidHlwZSI6ImFycmF5In0sIm1hdGNoTGFiZWxzIjp7ImFkZGl0aW9uYWxQcm9wZXJ0aWVzIjp7InR5cGUiOiJzdHJpbmcifSwiZGVzY3JpcHRpb24iOiJtYXRjaExhYmVscyBpcyBhIG1hcCBvZiB7a2V5LHZhbHVlfSBwYWlycy4gQSBzaW5nbGUge2tleSx2YWx1ZX0gaW4gdGhlIG1hdGNoTGFiZWxzIG1hcCBpcyBlcXVpdmFsZW50IHRvIGFuIGVsZW1lbnQgb2YgbWF0Y2hFeHByZXNzaW9ucywgd2hvc2Uga2V5IGZpZWxkIGlzIFwia2V5XCIsIHRoZSBvcGVyYXRvciBpcyBcIkluXCIsIGFuZCB0aGUgdmFsdWVzIGFycmF5IGNvbnRhaW5zIG9ubHkgXCJ2YWx1ZVwiLiBUaGUgcmVxdWlyZW1lbnRzIGFyZSBBTkRlZC4iLCJ0eXBlIjoib2JqZWN0In19LCJ0eXBlIjoib2JqZWN0IiwieC1rdWJlcm5ldGVzLW1hcC10eXBlIjoiYXRvbWljIn0sIm1hdGNoTGFiZWxLZXlzIjp7ImRlc2NyaXB0aW9uIjoiTWF0Y2hMYWJlbEtleXMgaXMgYSBzZXQgb2YgcG9kIGxhYmVsIGtleXMgdG8gc2VsZWN0IHdoaWNoIHBvZHMgd2lsbCBiZSB0YWtlbiBpbnRvIGNvbnNpZGVyYXRpb24uIFRoZSBrZXlzIGFyZSB1c2VkIHRvIGxvb2t1cCB2YWx1ZXMgZnJvbSB0aGUgaW5jb21pbmcgcG9kIGxhYmVscywgdGhvc2Uga2V5LXZhbHVlIGxhYmVscyBhcmUgbWVyZ2VkIHdpdGggYExhYmVsU2VsZWN0b3JgIGFzIGBrZXkgaW4gKHZhbHVlKWAgdG8gc2VsZWN0IHRoZSBncm91cCBvZiBleGlzdGluZyBwb2RzIHdoaWNoIHBvZHMgd2lsbCBiZSB0YWtlbiBpbnRvIGNvbnNpZGVyYXRpb24gZm9yIHRoZSBpbmNvbWluZyBwb2QncyBwb2QgKGFudGkpIGFmZmluaXR5LiBLZXlzIHRoYXQgZG9uJ3QgZXhpc3QgaW4gdGhlIGluY29taW5nIHBvZCBsYWJlbHMgd2lsbCBiZSBpZ25vcmVkLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBlbXB0eS4gVGhlIHNhbWUga2V5IGlzIGZvcmJpZGRlbiB0byBleGlzdCBpbiBib3RoIE1hdGNoTGFiZWxLZXlzIGFuZCBMYWJlbFNlbGVjdG9yLiBBbHNvLCBNYXRjaExhYmVsS2V5cyBjYW5ub3QgYmUgc2V0IHdoZW4gTGFiZWxTZWxlY3RvciBpc24ndCBzZXQuIFRoaXMgaXMgYW4gYWxwaGEgZmllbGQgYW5kIHJlcXVpcmVzIGVuYWJsaW5nIE1hdGNoTGFiZWxLZXlzSW5Qb2RBZmZpbml0eSBmZWF0dXJlIGdhdGUuIiwiaXRlbXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjoiYXJyYXkiLCJ4LWt1YmVybmV0ZXMtbGlzdC10eXBlIjoiYXRvbWljIn0sIm1pc21hdGNoTGFiZWxLZXlzIjp7ImRlc2NyaXB0aW9uIjoiTWlzbWF0Y2hMYWJlbEtleXMgaXMgYSBzZXQgb2YgcG9kIGxhYmVsIGtleXMgdG8gc2VsZWN0IHdoaWNoIHBvZHMgd2lsbCBiZSB0YWtlbiBpbnRvIGNvbnNpZGVyYXRpb24uIFRoZSBrZXlzIGFyZSB1c2VkIHRvIGxvb2t1cCB2YWx1ZXMgZnJvbSB0aGUgaW5jb21pbmcgcG9kIGxhYmVscywgdGhvc2Uga2V5LXZhbHVlIGxhYmVscyBhcmUgbWVyZ2VkIHdpdGggYExhYmVsU2VsZWN0b3JgIGFzIGBrZXkgbm90aW4gKHZhbHVlKWAgdG8gc2VsZWN0IHRoZSBncm91cCBvZiBleGlzdGluZyBwb2RzIHdoaWNoIHBvZHMgd2lsbCBiZSB0YWtlbiBpbnRvIGNvbnNpZGVyYXRpb24gZm9yIHRoZSBpbmNvbWluZyBwb2QncyBwb2QgKGFudGkpIGFmZmluaXR5LiBLZXlzIHRoYXQgZG9uJ3QgZXhpc3QgaW4gdGhlIGluY29taW5nIHBvZCBsYWJlbHMgd2lsbCBiZSBpZ25vcmVkLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBlbXB0eS4gVGhlIHNhbWUga2V5IGlzIGZvcmJpZGRlbiB0byBleGlzdCBpbiBib3RoIE1pc21hdGNoTGFiZWxLZXlzIGFuZCBMYWJlbFNlbGVjdG9yLiBBbHNvLCBNaXNtYXRjaExhYmVsS2V5cyBjYW5ub3QgYmUgc2V0IHdoZW4gTGFiZWxTZWxlY3RvciBpc24ndCBzZXQuIFRoaXMgaXMgYW4gYWxwaGEgZmllbGQgYW5kIHJlcXVpcmVzIGVuYWJsaW5nIE1hdGNoTGFiZWxLZXlzSW5Qb2RBZmZpbml0eSBmZWF0dXJlIGdhdGUuIiwiaXRlbXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjoiYXJyYXkiLCJ4LWt1YmVybmV0ZXMtbGlzdC10eXBlIjoiYXRvbWljIn0sIm5hbWVzcGFjZVNlbGVjdG9yIjp7ImRlc2NyaXB0aW9uIjoiQSBsYWJlbCBxdWVyeSBvdmVyIHRoZSBzZXQgb2YgbmFtZXNwYWNlcyB0aGF0IHRoZSB0ZXJtIGFwcGxpZXMgdG8uIFRoZSB0ZXJtIGlzIGFwcGxpZWQgdG8gdGhlIHVuaW9uIG9mIHRoZSBuYW1lc3BhY2VzIHNlbGVjdGVkIGJ5IHRoaXMgZmllbGQgYW5kIHRoZSBvbmVzIGxpc3RlZCBpbiB0aGUgbmFtZXNwYWNlcyBmaWVsZC4gbnVsbCBzZWxlY3RvciBhbmQgbnVsbCBvciBlbXB0eSBuYW1lc3BhY2VzIGxpc3QgbWVhbnMgXCJ0aGlzIHBvZCdzIG5hbWVzcGFjZVwiLiBBbiBlbXB0eSBzZWxlY3RvciAoe30pIG1hdGNoZXMgYWxsIG5hbWVzcGFjZXMuIiwicHJvcGVydGllcyI6eyJtYXRjaEV4cHJlc3Npb25zIjp7ImRlc2NyaXB0aW9uIjoibWF0Y2hFeHByZXNzaW9ucyBpcyBhIGxpc3Qgb2YgbGFiZWwgc2VsZWN0b3IgcmVxdWlyZW1lbnRzLiBUaGUgcmVxdWlyZW1lbnRzIGFyZSBBTkRlZC4iLCJpdGVtcyI6eyJkZXNjcmlwdGlvbiI6IkEgbGFiZWwgc2VsZWN0b3IgcmVxdWlyZW1lbnQgaXMgYSBzZWxlY3RvciB0aGF0IGNvbnRhaW5zIHZhbHVlcywgYSBrZXksIGFuZCBhbiBvcGVyYXRvciB0aGF0IHJlbGF0ZXMgdGhlIGtleSBhbmQgdmFsdWVzLiIsInByb3BlcnRpZXMiOnsia2V5Ijp7ImRlc2NyaXB0aW9uIjoia2V5IGlzIHRoZSBsYWJlbCBrZXkgdGhhdCB0aGUgc2VsZWN0b3IgYXBwbGllcyB0by4iLCJ0eXBlIjoic3RyaW5nIn0sIm9wZXJhdG9yIjp7ImRlc2NyaXB0aW9uIjoib3BlcmF0b3IgcmVwcmVzZW50cyBhIGtleSdzIHJlbGF0aW9uc2hpcCB0byBhIHNldCBvZiB2YWx1ZXMuIFZhbGlkIG9wZXJhdG9ycyBhcmUgSW4sIE5vdEluLCBFeGlzdHMgYW5kIERvZXNOb3RFeGlzdC4iLCJ0eXBlIjoic3RyaW5nIn0sInZhbHVlcyI6eyJkZXNjcmlwdGlvbiI6InZhbHVlcyBpcyBhbiBhcnJheSBvZiBzdHJpbmcgdmFsdWVzLiBJZiB0aGUgb3BlcmF0b3IgaXMgSW4gb3IgTm90SW4sIHRoZSB2YWx1ZXMgYXJyYXkgbXVzdCBiZSBub24tZW1wdHkuIElmIHRoZSBvcGVyYXRvciBpcyBFeGlzdHMgb3IgRG9lc05vdEV4aXN0LCB0aGUgdmFsdWVzIGFycmF5IG11c3QgYmUgZW1wdHkuIFRoaXMgYXJyYXkgaXMgcmVwbGFjZWQgZHVyaW5nIGEgc3RyYXRlZ2ljIG1lcmdlIHBhdGNoLiIsIml0ZW1zIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6ImFycmF5In19LCJyZXF1aXJlZCI6WyJrZXkiLCJvcGVyYXRvciJdLCJ0eXBlIjoib2JqZWN0In0sInR5cGUiOiJhcnJheSJ9LCJtYXRjaExhYmVscyI6eyJhZGRpdGlvbmFsUHJvcGVydGllcyI6eyJ0eXBlIjoic3RyaW5nIn0sImRlc2NyaXB0aW9uIjoibWF0Y2hMYWJlbHMgaXMgYSBtYXAgb2Yge2tleSx2YWx1ZX0gcGFpcnMuIEEgc2luZ2xlIHtrZXksdmFsdWV9IGluIHRoZSBtYXRjaExhYmVscyBtYXAgaXMgZXF1aXZhbGVudCB0byBhbiBlbGVtZW50IG9mIG1hdGNoRXhwcmVzc2lvbnMsIHdob3NlIGtleSBmaWVsZCBpcyBcImtleVwiLCB0aGUgb3BlcmF0b3IgaXMgXCJJblwiLCBhbmQgdGhlIHZhbHVlcyBhcnJheSBjb250YWlucyBvbmx5IFwidmFsdWVcIi4gVGhlIHJlcXVpcmVtZW50cyBhcmUgQU5EZWQuIiwidHlwZSI6Im9iamVjdCJ9fSwidHlwZSI6Im9iamVjdCIsIngta3ViZXJuZXRlcy1tYXAtdHlwZSI6ImF0b21pYyJ9LCJuYW1lc3BhY2VzIjp7ImRlc2NyaXB0aW9uIjoibmFtZXNwYWNlcyBzcGVjaWZpZXMgYSBzdGF0aWMgbGlzdCBvZiBuYW1lc3BhY2UgbmFtZXMgdGhhdCB0aGUgdGVybSBhcHBsaWVzIHRvLiBUaGUgdGVybSBpcyBhcHBsaWVkIHRvIHRoZSB1bmlvbiBvZiB0aGUgbmFtZXNwYWNlcyBsaXN0ZWQgaW4gdGhpcyBmaWVsZCBhbmQgdGhlIG9uZXMgc2VsZWN0ZWQgYnkgbmFtZXNwYWNlU2VsZWN0b3IuIG51bGwgb3IgZW1wdHkgbmFtZXNwYWNlcyBsaXN0IGFuZCBudWxsIG5hbWVzcGFjZVNlbGVjdG9yIG1lYW5zIFwidGhpcyBwb2QncyBuYW1lc3BhY2VcIi4iLCJpdGVtcyI6eyJ0eXBlIjoic3RyaW5nIn0sInR5cGUiOiJhcnJheSJ9LCJ0b3BvbG9neUtleSI6eyJkZXNjcmlwdGlvbiI6IlRoaXMgcG9kIHNob3VsZCBiZSBjby1sb2NhdGVkIChhZmZpbml0eSkgb3Igbm90IGNvLWxvY2F0ZWQgKGFudGktYWZmaW5pdHkpIHdpdGggdGhlIHBvZHMgbWF0Y2hpbmcgdGhlIGxhYmVsU2VsZWN0b3IgaW4gdGhlIHNwZWNpZmllZCBuYW1lc3BhY2VzLCB3aGVyZSBjby1sb2NhdGVkIGlzIGRlZmluZWQgYXMgcnVubmluZyBvbiBhIG5vZGUgd2hvc2UgdmFsdWUgb2YgdGhlIGxhYmVsIHdpdGgga2V5IHRvcG9sb2d5S2V5IG1hdGNoZXMgdGhhdCBvZiBhbnkgbm9kZSBvbiB3aGljaCBhbnkgb2YgdGhlIHNlbGVjdGVkIHBvZHMgaXMgcnVubmluZy4gRW1wdHkgdG9wb2xvZ3lLZXkgaXMgbm90IGFsbG93ZWQuIiwidHlwZSI6InN0cmluZyJ9fSwicmVxdWlyZWQiOlsidG9wb2xvZ3lLZXkiXSwidHlwZSI6Im9iamVjdCJ9LCJ3ZWlnaHQiOnsiZGVzY3JpcHRpb24iOiJ3ZWlnaHQgYXNzb2NpYXRlZCB3aXRoIG1hdGNoaW5nIHRoZSBjb3JyZXNwb25kaW5nIHBvZEFmZmluaXR5VGVybSwgaW4gdGhlIHJhbmdlIDEtMTAwLiIsImZvcm1hdCI6ImludDMyIiwidHlwZSI6ImludGVnZXIifX0sInJlcXVpcmVkIjpbInBvZEFmZmluaXR5VGVybSIsIndlaWdodCJdLCJ0eXBlIjoib2JqZWN0In0sInR5cGUiOiJhcnJheSJ9LCJyZXF1aXJlZER1cmluZ1NjaGVkdWxpbmdJZ25vcmVkRHVyaW5nRXhlY3V0aW9uIjp7ImRlc2NyaXB0aW9uIjoiSWYgdGhlIGFmZmluaXR5IHJlcXVpcmVtZW50cyBzcGVjaWZpZWQgYnkgdGhpcyBmaWVsZCBhcmUgbm90IG1ldCBhdCBzY2hlZHVsaW5nIHRpbWUsIHRoZSBwb2Qgd2lsbCBub3QgYmUgc2NoZWR1bGVkIG9udG8gdGhlIG5vZGUuIElmIHRoZSBhZmZpbml0eSByZXF1aXJlbWVudHMgc3BlY2lmaWVkIGJ5IHRoaXMgZmllbGQgY2Vhc2UgdG8gYmUgbWV0IGF0IHNvbWUgcG9pbnQgZHVyaW5nIHBvZCBleGVjdXRpb24gKGUuZy4gZHVlIHRvIGEgcG9kIGxhYmVsIHVwZGF0ZSksIHRoZSBzeXN0ZW0gbWF5IG9yIG1heSBub3QgdHJ5IHRvIGV2ZW50dWFsbHkgZXZpY3QgdGhlIHBvZCBmcm9tIGl0cyBub2RlLiBXaGVuIHRoZXJlIGFyZSBtdWx0aXBsZSBlbGVtZW50cywgdGhlIGxpc3RzIG9mIG5vZGVzIGNvcnJlc3BvbmRpbmcgdG8gZWFjaCBwb2RBZmZpbml0eVRlcm0gYXJlIGludGVyc2VjdGVkLCBpLmUuIGFsbCB0ZXJtcyBtdXN0IGJlIHNhdGlzZmllZC4iLCJpdGVtcyI6eyJkZXNjcmlwdGlvbiI6IkRlZmluZXMgYSBzZXQgb2YgcG9kcyAobmFtZWx5IHRob3NlIG1hdGNoaW5nIHRoZSBsYWJlbFNlbGVjdG9yIHJlbGF0aXZlIHRvIHRoZSBnaXZlbiBuYW1lc3BhY2UocykpIHRoYXQgdGhpcyBwb2Qgc2hvdWxkIGJlIGNvLWxvY2F0ZWQgKGFmZmluaXR5KSBvciBub3QgY28tbG9jYXRlZCAoYW50aS1hZmZpbml0eSkgd2l0aCwgd2hlcmUgY28tbG9jYXRlZCBpcyBkZWZpbmVkIGFzIHJ1bm5pbmcgb24gYSBub2RlIHdob3NlIHZhbHVlIG9mIHRoZSBsYWJlbCB3aXRoIGtleSBcdTAwM2N0b3BvbG9neUtleVx1MDAzZSBtYXRjaGVzIHRoYXQgb2YgYW55IG5vZGUgb24gd2hpY2ggYSBwb2Qgb2YgdGhlIHNldCBvZiBwb2RzIGlzIHJ1bm5pbmciLCJwcm9wZXJ0aWVzIjp7ImxhYmVsU2VsZWN0b3IiOnsiZGVzY3JpcHRpb24iOiJBIGxhYmVsIHF1ZXJ5IG92ZXIgYSBzZXQgb2YgcmVzb3VyY2VzLCBpbiB0aGlzIGNhc2UgcG9kcy4gSWYgaXQncyBudWxsLCB0aGlzIFBvZEFmZmluaXR5VGVybSBtYXRjaGVzIHdpdGggbm8gUG9kcy4iLCJwcm9wZXJ0aWVzIjp7Im1hdGNoRXhwcmVzc2lvbnMiOnsiZGVzY3JpcHRpb24iOiJtYXRjaEV4cHJlc3Npb25zIGlzIGEgbGlzdCBvZiBsYWJlbCBzZWxlY3RvciByZXF1aXJlbWVudHMuIFRoZSByZXF1aXJlbWVudHMgYXJlIEFORGVkLiIsIml0ZW1zIjp7ImRlc2NyaXB0aW9uIjoiQSBsYWJlbCBzZWxlY3RvciByZXF1aXJlbWVudCBpcyBhIHNlbGVjdG9yIHRoYXQgY29udGFpbnMgdmFsdWVzLCBhIGtleSwgYW5kIGFuIG9wZXJhdG9yIHRoYXQgcmVsYXRlcyB0aGUga2V5IGFuZCB2YWx1ZXMuIiwicHJvcGVydGllcyI6eyJrZXkiOnsiZGVzY3JpcHRpb24iOiJrZXkgaXMgdGhlIGxhYmVsIGtleSB0aGF0IHRoZSBzZWxlY3RvciBhcHBsaWVzIHRvLiIsInR5cGUiOiJzdHJpbmcifSwib3BlcmF0b3IiOnsiZGVzY3JpcHRpb24iOiJvcGVyYXRvciByZXByZXNlbnRzIGEga2V5J3MgcmVsYXRpb25zaGlwIHRvIGEgc2V0IG9mIHZhbHVlcy4gVmFsaWQgb3BlcmF0b3JzIGFyZSBJbiwgTm90SW4sIEV4aXN0cyBhbmQgRG9lc05vdEV4aXN0LiIsInR5cGUiOiJzdHJpbmcifSwidmFsdWVzIjp7ImRlc2NyaXB0aW9uIjoidmFsdWVzIGlzIGFuIGFycmF5IG9mIHN0cmluZyB2YWx1ZXMuIElmIHRoZSBvcGVyYXRvciBpcyBJbiBvciBOb3RJbiwgdGhlIHZhbHVlcyBhcnJheSBtdXN0IGJlIG5vbi1lbXB0eS4gSWYgdGhlIG9wZXJhdG9yIGlzIEV4aXN0cyBvciBEb2VzTm90RXhpc3QsIHRoZSB2YWx1ZXMgYXJyYXkgbXVzdCBiZSBlbXB0eS4gVGhpcyBhcnJheSBpcyByZXBsYWNlZCBkdXJpbmcgYSBzdHJhdGVnaWMgbWVyZ2UgcGF0Y2guIiwiaXRlbXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjoiYXJyYXkifX0sInJlcXVpcmVkIjpbImtleSIsIm9wZXJhdG9yIl0sInR5cGUiOiJvYmplY3QifSwidHlwZSI6ImFycmF5In0sIm1hdGNoTGFiZWxzIjp7ImFkZGl0aW9uYWxQcm9wZXJ0aWVzIjp7InR5cGUiOiJzdHJpbmcifSwiZGVzY3JpcHRpb24iOiJtYXRjaExhYmVscyBpcyBhIG1hcCBvZiB7a2V5LHZhbHVlfSBwYWlycy4gQSBzaW5nbGUge2tleSx2YWx1ZX0gaW4gdGhlIG1hdGNoTGFiZWxzIG1hcCBpcyBlcXVpdmFsZW50IHRvIGFuIGVsZW1lbnQgb2YgbWF0Y2hFeHByZXNzaW9ucywgd2hvc2Uga2V5IGZpZWxkIGlzIFwia2V5XCIsIHRoZSBvcGVyYXRvciBpcyBcIkluXCIsIGFuZCB0aGUgdmFsdWVzIGFycmF5IGNvbnRhaW5zIG9ubHkgXCJ2YWx1ZVwiLiBUaGUgcmVxdWlyZW1lbnRzIGFyZSBBTkRlZC4iLCJ0eXBlIjoib2JqZWN0In19LCJ0eXBlIjoib2JqZWN0IiwieC1rdWJlcm5ldGVzLW1hcC10eXBlIjoiYXRvbWljIn0sIm1hdGNoTGFiZWxLZXlzIjp7ImRlc2NyaXB0aW9uIjoiTWF0Y2hMYWJlbEtleXMgaXMgYSBzZXQgb2YgcG9kIGxhYmVsIGtleXMgdG8gc2VsZWN0IHdoaWNoIHBvZHMgd2lsbCBiZSB0YWtlbiBpbnRvIGNvbnNpZGVyYXRpb24uIFRoZSBrZXlzIGFyZSB1c2VkIHRvIGxvb2t1cCB2YWx1ZXMgZnJvbSB0aGUgaW5jb21pbmcgcG9kIGxhYmVscywgdGhvc2Uga2V5LXZhbHVlIGxhYmVscyBhcmUgbWVyZ2VkIHdpdGggYExhYmVsU2VsZWN0b3JgIGFzIGBrZXkgaW4gKHZhbHVlKWAgdG8gc2VsZWN0IHRoZSBncm91cCBvZiBleGlzdGluZyBwb2RzIHdoaWNoIHBvZHMgd2lsbCBiZSB0YWtlbiBpbnRvIGNvbnNpZGVyYXRpb24gZm9yIHRoZSBpbmNvbWluZyBwb2QncyBwb2QgKGFudGkpIGFmZmluaXR5LiBLZXlzIHRoYXQgZG9uJ3QgZXhpc3QgaW4gdGhlIGluY29taW5nIHBvZCBsYWJlbHMgd2lsbCBiZSBpZ25vcmVkLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBlbXB0eS4gVGhlIHNhbWUga2V5IGlzIGZvcmJpZGRlbiB0byBleGlzdCBpbiBib3RoIE1hdGNoTGFiZWxLZXlzIGFuZCBMYWJlbFNlbGVjdG9yLiBBbHNvLCBNYXRjaExhYmVsS2V5cyBjYW5ub3QgYmUgc2V0IHdoZW4gTGFiZWxTZWxlY3RvciBpc24ndCBzZXQuIFRoaXMgaXMgYW4gYWxwaGEgZmllbGQgYW5kIHJlcXVpcmVzIGVuYWJsaW5nIE1hdGNoTGFiZWxLZXlzSW5Qb2RBZmZpbml0eSBmZWF0dXJlIGdhdGUuIiwiaXRlbXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjoiYXJyYXkiLCJ4LWt1YmVybmV0ZXMtbGlzdC10eXBlIjoiYXRvbWljIn0sIm1pc21hdGNoTGFiZWxLZXlzIjp7ImRlc2NyaXB0aW9uIjoiTWlzbWF0Y2hMYWJlbEtleXMgaXMgYSBzZXQgb2YgcG9kIGxhYmVsIGtleXMgdG8gc2VsZWN0IHdoaWNoIHBvZHMgd2lsbCBiZSB0YWtlbiBpbnRvIGNvbnNpZGVyYXRpb24uIFRoZSBrZXlzIGFyZSB1c2VkIHRvIGxvb2t1cCB2YWx1ZXMgZnJvbSB0aGUgaW5jb21pbmcgcG9kIGxhYmVscywgdGhvc2Uga2V5LXZhbHVlIGxhYmVscyBhcmUgbWVyZ2VkIHdpdGggYExhYmVsU2VsZWN0b3JgIGFzIGBrZXkgbm90aW4gKHZhbHVlKWAgdG8gc2VsZWN0IHRoZSBncm91cCBvZiBleGlzdGluZyBwb2RzIHdoaWNoIHBvZHMgd2lsbCBiZSB0YWtlbiBpbnRvIGNvbnNpZGVyYXRpb24gZm9yIHRoZSBpbmNvbWluZyBwb2QncyBwb2QgKGFudGkpIGFmZmluaXR5LiBLZXlzIHRoYXQgZG9uJ3QgZXhpc3QgaW4gdGhlIGluY29taW5nIHBvZCBsYWJlbHMgd2lsbCBiZSBpZ25vcmVkLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBlbXB0eS4gVGhlIHNhbWUga2V5IGlzIGZvcmJpZGRlbiB0byBleGlzdCBpbiBib3RoIE1pc21hdGNoTGFiZWxLZXlzIGFuZCBMYWJlbFNlbGVjdG9yLiBBbHNvLCBNaXNtYXRjaExhYmVsS2V5cyBjYW5ub3QgYmUgc2V0IHdoZW4gTGFiZWxTZWxlY3RvciBpc24ndCBzZXQuIFRoaXMgaXMgYW4gYWxwaGEgZmllbGQgYW5kIHJlcXVpcmVzIGVuYWJsaW5nIE1hdGNoTGFiZWxLZXlzSW5Qb2RBZmZpbml0eSBmZWF0dXJlIGdhdGUuIiwiaXRlbXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjoiYXJyYXkiLCJ4LWt1YmVybmV0ZXMtbGlzdC10eXBlIjoiYXRvbWljIn0sIm5hbWVzcGFjZVNlbGVjdG9yIjp7ImRlc2NyaXB0aW9uIjoiQSBsYWJlbCBxdWVyeSBvdmVyIHRoZSBzZXQgb2YgbmFtZXNwYWNlcyB0aGF0IHRoZSB0ZXJtIGFwcGxpZXMgdG8uIFRoZSB0ZXJtIGlzIGFwcGxpZWQgdG8gdGhlIHVuaW9uIG9mIHRoZSBuYW1lc3BhY2VzIHNlbGVjdGVkIGJ5IHRoaXMgZmllbGQgYW5kIHRoZSBvbmVzIGxpc3RlZCBpbiB0aGUgbmFtZXNwYWNlcyBmaWVsZC4gbnVsbCBzZWxlY3RvciBhbmQgbnVsbCBvciBlbXB0eSBuYW1lc3BhY2VzIGxpc3QgbWVhbnMgXCJ0aGlzIHBvZCdzIG5hbWVzcGFjZVwiLiBBbiBlbXB0eSBzZWxlY3RvciAoe30pIG1hdGNoZXMgYWxsIG5hbWVzcGFjZXMuIiwicHJvcGVydGllcyI6eyJtYXRjaEV4cHJlc3Npb25zIjp7ImRlc2NyaXB0aW9uIjoibWF0Y2hFeHByZXNzaW9ucyBpcyBhIGxpc3Qgb2YgbGFiZWwgc2VsZWN0b3IgcmVxdWlyZW1lbnRzLiBUaGUgcmVxdWlyZW1lbnRzIGFyZSBBTkRlZC4iLCJpdGVtcyI6eyJkZXNjcmlwdGlvbiI6IkEgbGFiZWwgc2VsZWN0b3IgcmVxdWlyZW1lbnQgaXMgYSBzZWxlY3RvciB0aGF0IGNvbnRhaW5zIHZhbHVlcywgYSBrZXksIGFuZCBhbiBvcGVyYXRvciB0aGF0IHJlbGF0ZXMgdGhlIGtleSBhbmQgdmFsdWVzLiIsInByb3BlcnRpZXMiOnsia2V5Ijp7ImRlc2NyaXB0aW9uIjoia2V5IGlzIHRoZSBsYWJlbCBrZXkgdGhhdCB0aGUgc2VsZWN0b3IgYXBwbGllcyB0by4iLCJ0eXBlIjoic3RyaW5nIn0sIm9wZXJhdG9yIjp7ImRlc2NyaXB0aW9uIjoib3BlcmF0b3IgcmVwcmVzZW50cyBhIGtleSdzIHJlbGF0aW9uc2hpcCB0byBhIHNldCBvZiB2YWx1ZXMuIFZhbGlkIG9wZXJhdG9ycyBhcmUgSW4sIE5vdEluLCBFeGlzdHMgYW5kIERvZXNOb3RFeGlzdC4iLCJ0eXBlIjoic3RyaW5nIn0sInZhbHVlcyI6eyJkZXNjcmlwdGlvbiI6InZhbHVlcyBpcyBhbiBhcnJheSBvZiBzdHJpbmcgdmFsdWVzLiBJZiB0aGUgb3BlcmF0b3IgaXMgSW4gb3IgTm90SW4sIHRoZSB2YWx1ZXMgYXJyYXkgbXVzdCBiZSBub24tZW1wdHkuIElmIHRoZSBvcGVyYXRvciBpcyBFeGlzdHMgb3IgRG9lc05vdEV4aXN0LCB0aGUgdmFsdWVzIGFycmF5IG11c3QgYmUgZW1wdHkuIFRoaXMgYXJyYXkgaXMgcmVwbGFjZWQgZHVyaW5nIGEgc3RyYXRlZ2ljIG1lcmdlIHBhdGNoLiIsIml0ZW1zIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6ImFycmF5In19LCJyZXF1aXJlZCI6WyJrZXkiLCJvcGVyYXRvciJdLCJ0eXBlIjoib2JqZWN0In0sInR5cGUiOiJhcnJheSJ9LCJtYXRjaExhYmVscyI6eyJhZGRpdGlvbmFsUHJvcGVydGllcyI6eyJ0eXBlIjoic3RyaW5nIn0sImRlc2NyaXB0aW9uIjoibWF0Y2hMYWJlbHMgaXMgYSBtYXAgb2Yge2tleSx2YWx1ZX0gcGFpcnMuIEEgc2luZ2xlIHtrZXksdmFsdWV9IGluIHRoZSBtYXRjaExhYmVscyBtYXAgaXMgZXF1aXZhbGVudCB0byBhbiBlbGVtZW50IG9mIG1hdGNoRXhwcmVzc2lvbnMsIHdob3NlIGtleSBmaWVsZCBpcyBcImtleVwiLCB0aGUgb3BlcmF0b3IgaXMgXCJJblwiLCBhbmQgdGhlIHZhbHVlcyBhcnJheSBjb250YWlucyBvbmx5IFwidmFsdWVcIi4gVGhlIHJlcXVpcmVtZW50cyBhcmUgQU5EZWQuIiwidHlwZSI6Im9iamVjdCJ9fSwidHlwZSI6Im9iamVjdCIsIngta3ViZXJuZXRlcy1tYXAtdHlwZSI6ImF0b21pYyJ9LCJuYW1lc3BhY2VzIjp7ImRlc2NyaXB0aW9uIjoibmFtZXNwYWNlcyBzcGVjaWZpZXMgYSBzdGF0aWMgbGlzdCBvZiBuYW1lc3BhY2UgbmFtZXMgdGhhdCB0aGUgdGVybSBhcHBsaWVzIHRvLiBUaGUgdGVybSBpcyBhcHBsaWVkIHRvIHRoZSB1bmlvbiBvZiB0aGUgbmFtZXNwYWNlcyBsaXN0ZWQgaW4gdGhpcyBmaWVsZCBhbmQgdGhlIG9uZXMgc2VsZWN0ZWQgYnkgbmFtZXNwYWNlU2VsZWN0b3IuIG51bGwgb3IgZW1wdHkgbmFtZXNwYWNlcyBsaXN0IGFuZCBudWxsIG5hbWVzcGFjZVNlbGVjdG9yIG1lYW5zIFwidGhpcyBwb2QncyBuYW1lc3BhY2VcIi4iLCJpdGVtcyI6eyJ0eXBlIjoic3RyaW5nIn0sInR5cGUiOiJhcnJheSJ9LCJ0b3BvbG9neUtleSI6eyJkZXNjcmlwdGlvbiI6IlRoaXMgcG9kIHNob3VsZCBiZSBjby1sb2NhdGVkIChhZmZpbml0eSkgb3Igbm90IGNvLWxvY2F0ZWQgKGFudGktYWZmaW5pdHkpIHdpdGggdGhlIHBvZHMgbWF0Y2hpbmcgdGhlIGxhYmVsU2VsZWN0b3IgaW4gdGhlIHNwZWNpZmllZCBuYW1lc3BhY2VzLCB3aGVyZSBjby1sb2NhdGVkIGlzIGRlZmluZWQgYXMgcnVubmluZyBvbiBhIG5vZGUgd2hvc2UgdmFsdWUgb2YgdGhlIGxhYmVsIHdpdGgga2V5IHRvcG9sb2d5S2V5IG1hdGNoZXMgdGhhdCBvZiBhbnkgbm9kZSBvbiB3aGljaCBhbnkgb2YgdGhlIHNlbGVjdGVkIHBvZHMgaXMgcnVubmluZy4gRW1wdHkgdG9wb2xvZ3lLZXkgaXMgbm90IGFsbG93ZWQuIiwidHlwZSI6InN0cmluZyJ9fSwicmVxdWlyZWQiOlsidG9wb2xvZ3lLZXkiXSwidHlwZSI6Im9iamVjdCJ9LCJ0eXBlIjoiYXJyYXkifX0sInR5cGUiOiJvYmplY3QifSwicG9kQW50aUFmZmluaXR5Ijp7ImRlc2NyaXB0aW9uIjoiUG9kQW50aUFmZmluaXR5IGlzIGEgZ3JvdXAgb2YgaW50ZXIgcG9kIGFudGkgYWZmaW5pdHkgc2NoZWR1bGluZyBydWxlcyIsInByb3BlcnRpZXMiOnsicHJlZmVycmVkRHVyaW5nU2NoZWR1bGluZ0lnbm9yZWREdXJpbmdFeGVjdXRpb24iOnsiZGVzY3JpcHRpb24iOiJUaGUgc2NoZWR1bGVyIHdpbGwgcHJlZmVyIHRvIHNjaGVkdWxlIHBvZHMgdG8gbm9kZXMgdGhhdCBzYXRpc2Z5IHRoZSBhbnRpLWFmZmluaXR5IGV4cHJlc3Npb25zIHNwZWNpZmllZCBieSB0aGlzIGZpZWxkLCBidXQgaXQgbWF5IGNob29zZSBhIG5vZGUgdGhhdCB2aW9sYXRlcyBvbmUgb3IgbW9yZSBvZiB0aGUgZXhwcmVzc2lvbnMuIFRoZSBub2RlIHRoYXQgaXMgbW9zdCBwcmVmZXJyZWQgaXMgdGhlIG9uZSB3aXRoIHRoZSBncmVhdGVzdCBzdW0gb2Ygd2VpZ2h0cywgaS5lLiBmb3IgZWFjaCBub2RlIHRoYXQgbWVldHMgYWxsIG9mIHRoZSBzY2hlZHVsaW5nIHJlcXVpcmVtZW50cyAocmVzb3VyY2UgcmVxdWVzdCwgcmVxdWlyZWREdXJpbmdTY2hlZHVsaW5nIGFudGktYWZmaW5pdHkgZXhwcmVzc2lvbnMsIGV0Yy4pLCBjb21wdXRlIGEgc3VtIGJ5IGl0ZXJhdGluZyB0aHJvdWdoIHRoZSBlbGVtZW50cyBvZiB0aGlzIGZpZWxkIGFuZCBhZGRpbmcgXCJ3ZWlnaHRcIiB0byB0aGUgc3VtIGlmIHRoZSBub2RlIGhhcyBwb2RzIHdoaWNoIG1hdGNoZXMgdGhlIGNvcnJlc3BvbmRpbmcgcG9kQWZmaW5pdHlUZXJtOyB0aGUgbm9kZShzKSB3aXRoIHRoZSBoaWdoZXN0IHN1bSBhcmUgdGhlIG1vc3QgcHJlZmVycmVkLiIsIml0ZW1zIjp7ImRlc2NyaXB0aW9uIjoiVGhlIHdlaWdodHMgb2YgYWxsIG9mIHRoZSBtYXRjaGVkIFdlaWdodGVkUG9kQWZmaW5pdHlUZXJtIGZpZWxkcyBhcmUgYWRkZWQgcGVyLW5vZGUgdG8gZmluZCB0aGUgbW9zdCBwcmVmZXJyZWQgbm9kZShzKSIsInByb3BlcnRpZXMiOnsicG9kQWZmaW5pdHlUZXJtIjp7ImRlc2NyaXB0aW9uIjoiUmVxdWlyZWQuIEEgcG9kIGFmZmluaXR5IHRlcm0sIGFzc29jaWF0ZWQgd2l0aCB0aGUgY29ycmVzcG9uZGluZyB3ZWlnaHQuIiwicHJvcGVydGllcyI6eyJsYWJlbFNlbGVjdG9yIjp7ImRlc2NyaXB0aW9uIjoiQSBsYWJlbCBxdWVyeSBvdmVyIGEgc2V0IG9mIHJlc291cmNlcywgaW4gdGhpcyBjYXNlIHBvZHMuIElmIGl0J3MgbnVsbCwgdGhpcyBQb2RBZmZpbml0eVRlcm0gbWF0Y2hlcyB3aXRoIG5vIFBvZHMuIiwicHJvcGVydGllcyI6eyJtYXRjaEV4cHJlc3Npb25zIjp7ImRlc2NyaXB0aW9uIjoibWF0Y2hFeHByZXNzaW9ucyBpcyBhIGxpc3Qgb2YgbGFiZWwgc2VsZWN0b3IgcmVxdWlyZW1lbnRzLiBUaGUgcmVxdWlyZW1lbnRzIGFyZSBBTkRlZC4iLCJpdGVtcyI6eyJkZXNjcmlwdGlvbiI6IkEgbGFiZWwgc2VsZWN0b3IgcmVxdWlyZW1lbnQgaXMgYSBzZWxlY3RvciB0aGF0IGNvbnRhaW5zIHZhbHVlcywgYSBrZXksIGFuZCBhbiBvcGVyYXRvciB0aGF0IHJlbGF0ZXMgdGhlIGtleSBhbmQgdmFsdWVzLiIsInByb3BlcnRpZXMiOnsia2V5Ijp7ImRlc2NyaXB0aW9uIjoia2V5IGlzIHRoZSBsYWJlbCBrZXkgdGhhdCB0aGUgc2VsZWN0b3IgYXBwbGllcyB0by4iLCJ0eXBlIjoic3RyaW5nIn0sIm9wZXJhdG9yIjp7ImRlc2NyaXB0aW9uIjoib3BlcmF0b3IgcmVwcmVzZW50cyBhIGtleSdzIHJlbGF0aW9uc2hpcCB0byBhIHNldCBvZiB2YWx1ZXMuIFZhbGlkIG9wZXJhdG9ycyBhcmUgSW4sIE5vdEluLCBFeGlzdHMgYW5kIERvZXNOb3RFeGlzdC4iLCJ0eXBlIjoic3RyaW5nIn0sInZhbHVlcyI6eyJkZXNjcmlwdGlvbiI6InZhbHVlcyBpcyBhbiBhcnJheSBvZiBzdHJpbmcgdmFsdWVzLiBJZiB0aGUgb3BlcmF0b3IgaXMgSW4gb3IgTm90SW4sIHRoZSB2YWx1ZXMgYXJyYXkgbXVzdCBiZSBub24tZW1wdHkuIElmIHRoZSBvcGVyYXRvciBpcyBFeGlzdHMgb3IgRG9lc05vdEV4aXN0LCB0aGUgdmFsdWVzIGFycmF5IG11c3QgYmUgZW1wdHkuIFRoaXMgYXJyYXkgaXMgcmVwbGFjZWQgZHVyaW5nIGEgc3RyYXRlZ2ljIG1lcmdlIHBhdGNoLiIsIml0ZW1zIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6ImFycmF5In19LCJyZXF1aXJlZCI6WyJrZXkiLCJvcGVyYXRvciJdLCJ0eXBlIjoib2JqZWN0In0sInR5cGUiOiJhcnJheSJ9LCJtYXRjaExhYmVscyI6eyJhZGRpdGlvbmFsUHJvcGVydGllcyI6eyJ0eXBlIjoic3RyaW5nIn0sImRlc2NyaXB0aW9uIjoibWF0Y2hMYWJlbHMgaXMgYSBtYXAgb2Yge2tleSx2YWx1ZX0gcGFpcnMuIEEgc2luZ2xlIHtrZXksdmFsdWV9IGluIHRoZSBtYXRjaExhYmVscyBtYXAgaXMgZXF1aXZhbGVudCB0byBhbiBlbGVtZW50IG9mIG1hdGNoRXhwcmVzc2lvbnMsIHdob3NlIGtleSBmaWVsZCBpcyBcImtleVwiLCB0aGUgb3BlcmF0b3IgaXMgXCJJblwiLCBhbmQgdGhlIHZhbHVlcyBhcnJheSBjb250YWlucyBvbmx5IFwidmFsdWVcIi4gVGhlIHJlcXVpcmVtZW50cyBhcmUgQU5EZWQuIiwidHlwZSI6Im9iamVjdCJ9fSwidHlwZSI6Im9iamVjdCIsIngta3ViZXJuZXRlcy1tYXAtdHlwZSI6ImF0b21pYyJ9LCJtYXRjaExhYmVsS2V5cyI6eyJkZXNjcmlwdGlvbiI6Ik1hdGNoTGFiZWxLZXlzIGlzIGEgc2V0IG9mIHBvZCBsYWJlbCBrZXlzIHRvIHNlbGVjdCB3aGljaCBwb2RzIHdpbGwgYmUgdGFrZW4gaW50byBjb25zaWRlcmF0aW9uLiBUaGUga2V5cyBhcmUgdXNlZCB0byBsb29rdXAgdmFsdWVzIGZyb20gdGhlIGluY29taW5nIHBvZCBsYWJlbHMsIHRob3NlIGtleS12YWx1ZSBsYWJlbHMgYXJlIG1lcmdlZCB3aXRoIGBMYWJlbFNlbGVjdG9yYCBhcyBga2V5IGluICh2YWx1ZSlgIHRvIHNlbGVjdCB0aGUgZ3JvdXAgb2YgZXhpc3RpbmcgcG9kcyB3aGljaCBwb2RzIHdpbGwgYmUgdGFrZW4gaW50byBjb25zaWRlcmF0aW9uIGZvciB0aGUgaW5jb21pbmcgcG9kJ3MgcG9kIChhbnRpKSBhZmZpbml0eS4gS2V5cyB0aGF0IGRvbid0IGV4aXN0IGluIHRoZSBpbmNvbWluZyBwb2QgbGFiZWxzIHdpbGwgYmUgaWdub3JlZC4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgZW1wdHkuIFRoZSBzYW1lIGtleSBpcyBmb3JiaWRkZW4gdG8gZXhpc3QgaW4gYm90aCBNYXRjaExhYmVsS2V5cyBhbmQgTGFiZWxTZWxlY3Rvci4gQWxzbywgTWF0Y2hMYWJlbEtleXMgY2Fubm90IGJlIHNldCB3aGVuIExhYmVsU2VsZWN0b3IgaXNuJ3Qgc2V0LiBUaGlzIGlzIGFuIGFscGhhIGZpZWxkIGFuZCByZXF1aXJlcyBlbmFibGluZyBNYXRjaExhYmVsS2V5c0luUG9kQWZmaW5pdHkgZmVhdHVyZSBnYXRlLiIsIml0ZW1zIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6ImFycmF5IiwieC1rdWJlcm5ldGVzLWxpc3QtdHlwZSI6ImF0b21pYyJ9LCJtaXNtYXRjaExhYmVsS2V5cyI6eyJkZXNjcmlwdGlvbiI6Ik1pc21hdGNoTGFiZWxLZXlzIGlzIGEgc2V0IG9mIHBvZCBsYWJlbCBrZXlzIHRvIHNlbGVjdCB3aGljaCBwb2RzIHdpbGwgYmUgdGFrZW4gaW50byBjb25zaWRlcmF0aW9uLiBUaGUga2V5cyBhcmUgdXNlZCB0byBsb29rdXAgdmFsdWVzIGZyb20gdGhlIGluY29taW5nIHBvZCBsYWJlbHMsIHRob3NlIGtleS12YWx1ZSBsYWJlbHMgYXJlIG1lcmdlZCB3aXRoIGBMYWJlbFNlbGVjdG9yYCBhcyBga2V5IG5vdGluICh2YWx1ZSlgIHRvIHNlbGVjdCB0aGUgZ3JvdXAgb2YgZXhpc3RpbmcgcG9kcyB3aGljaCBwb2RzIHdpbGwgYmUgdGFrZW4gaW50byBjb25zaWRlcmF0aW9uIGZvciB0aGUgaW5jb21pbmcgcG9kJ3MgcG9kIChhbnRpKSBhZmZpbml0eS4gS2V5cyB0aGF0IGRvbid0IGV4aXN0IGluIHRoZSBpbmNvbWluZyBwb2QgbGFiZWxzIHdpbGwgYmUgaWdub3JlZC4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgZW1wdHkuIFRoZSBzYW1lIGtleSBpcyBmb3JiaWRkZW4gdG8gZXhpc3QgaW4gYm90aCBNaXNtYXRjaExhYmVsS2V5cyBhbmQgTGFiZWxTZWxlY3Rvci4gQWxzbywgTWlzbWF0Y2hMYWJlbEtleXMgY2Fubm90IGJlIHNldCB3aGVuIExhYmVsU2VsZWN0b3IgaXNuJ3Qgc2V0LiBUaGlzIGlzIGFuIGFscGhhIGZpZWxkIGFuZCByZXF1aXJlcyBlbmFibGluZyBNYXRjaExhYmVsS2V5c0luUG9kQWZmaW5pdHkgZmVhdHVyZSBnYXRlLiIsIml0ZW1zIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6ImFycmF5IiwieC1rdWJlcm5ldGVzLWxpc3QtdHlwZSI6ImF0b21pYyJ9LCJuYW1lc3BhY2VTZWxlY3RvciI6eyJkZXNjcmlwdGlvbiI6IkEgbGFiZWwgcXVlcnkgb3ZlciB0aGUgc2V0IG9mIG5hbWVzcGFjZXMgdGhhdCB0aGUgdGVybSBhcHBsaWVzIHRvLiBUaGUgdGVybSBpcyBhcHBsaWVkIHRvIHRoZSB1bmlvbiBvZiB0aGUgbmFtZXNwYWNlcyBzZWxlY3RlZCBieSB0aGlzIGZpZWxkIGFuZCB0aGUgb25lcyBsaXN0ZWQgaW4gdGhlIG5hbWVzcGFjZXMgZmllbGQuIG51bGwgc2VsZWN0b3IgYW5kIG51bGwgb3IgZW1wdHkgbmFtZXNwYWNlcyBsaXN0IG1lYW5zIFwidGhpcyBwb2QncyBuYW1lc3BhY2VcIi4gQW4gZW1wdHkgc2VsZWN0b3IgKHt9KSBtYXRjaGVzIGFsbCBuYW1lc3BhY2VzLiIsInByb3BlcnRpZXMiOnsibWF0Y2hFeHByZXNzaW9ucyI6eyJkZXNjcmlwdGlvbiI6Im1hdGNoRXhwcmVzc2lvbnMgaXMgYSBsaXN0IG9mIGxhYmVsIHNlbGVjdG9yIHJlcXVpcmVtZW50cy4gVGhlIHJlcXVpcmVtZW50cyBhcmUgQU5EZWQuIiwiaXRlbXMiOnsiZGVzY3JpcHRpb24iOiJBIGxhYmVsIHNlbGVjdG9yIHJlcXVpcmVtZW50IGlzIGEgc2VsZWN0b3IgdGhhdCBjb250YWlucyB2YWx1ZXMsIGEga2V5LCBhbmQgYW4gb3BlcmF0b3IgdGhhdCByZWxhdGVzIHRoZSBrZXkgYW5kIHZhbHVlcy4iLCJwcm9wZXJ0aWVzIjp7ImtleSI6eyJkZXNjcmlwdGlvbiI6ImtleSBpcyB0aGUgbGFiZWwga2V5IHRoYXQgdGhlIHNlbGVjdG9yIGFwcGxpZXMgdG8uIiwidHlwZSI6InN0cmluZyJ9LCJvcGVyYXRvciI6eyJkZXNjcmlwdGlvbiI6Im9wZXJhdG9yIHJlcHJlc2VudHMgYSBrZXkncyByZWxhdGlvbnNoaXAgdG8gYSBzZXQgb2YgdmFsdWVzLiBWYWxpZCBvcGVyYXRvcnMgYXJlIEluLCBOb3RJbiwgRXhpc3RzIGFuZCBEb2VzTm90RXhpc3QuIiwidHlwZSI6InN0cmluZyJ9LCJ2YWx1ZXMiOnsiZGVzY3JpcHRpb24iOiJ2YWx1ZXMgaXMgYW4gYXJyYXkgb2Ygc3RyaW5nIHZhbHVlcy4gSWYgdGhlIG9wZXJhdG9yIGlzIEluIG9yIE5vdEluLCB0aGUgdmFsdWVzIGFycmF5IG11c3QgYmUgbm9uLWVtcHR5LiBJZiB0aGUgb3BlcmF0b3IgaXMgRXhpc3RzIG9yIERvZXNOb3RFeGlzdCwgdGhlIHZhbHVlcyBhcnJheSBtdXN0IGJlIGVtcHR5LiBUaGlzIGFycmF5IGlzIHJlcGxhY2VkIGR1cmluZyBhIHN0cmF0ZWdpYyBtZXJnZSBwYXRjaC4iLCJpdGVtcyI6eyJ0eXBlIjoic3RyaW5nIn0sInR5cGUiOiJhcnJheSJ9fSwicmVxdWlyZWQiOlsia2V5Iiwib3BlcmF0b3IiXSwidHlwZSI6Im9iamVjdCJ9LCJ0eXBlIjoiYXJyYXkifSwibWF0Y2hMYWJlbHMiOnsiYWRkaXRpb25hbFByb3BlcnRpZXMiOnsidHlwZSI6InN0cmluZyJ9LCJkZXNjcmlwdGlvbiI6Im1hdGNoTGFiZWxzIGlzIGEgbWFwIG9mIHtrZXksdmFsdWV9IHBhaXJzLiBBIHNpbmdsZSB7a2V5LHZhbHVlfSBpbiB0aGUgbWF0Y2hMYWJlbHMgbWFwIGlzIGVxdWl2YWxlbnQgdG8gYW4gZWxlbWVudCBvZiBtYXRjaEV4cHJlc3Npb25zLCB3aG9zZSBrZXkgZmllbGQgaXMgXCJrZXlcIiwgdGhlIG9wZXJhdG9yIGlzIFwiSW5cIiwgYW5kIHRoZSB2YWx1ZXMgYXJyYXkgY29udGFpbnMgb25seSBcInZhbHVlXCIuIFRoZSByZXF1aXJlbWVudHMgYXJlIEFORGVkLiIsInR5cGUiOiJvYmplY3QifX0sInR5cGUiOiJvYmplY3QiLCJ4LWt1YmVybmV0ZXMtbWFwLXR5cGUiOiJhdG9taWMifSwibmFtZXNwYWNlcyI6eyJkZXNjcmlwdGlvbiI6Im5hbWVzcGFjZXMgc3BlY2lmaWVzIGEgc3RhdGljIGxpc3Qgb2YgbmFtZXNwYWNlIG5hbWVzIHRoYXQgdGhlIHRlcm0gYXBwbGllcyB0by4gVGhlIHRlcm0gaXMgYXBwbGllZCB0byB0aGUgdW5pb24gb2YgdGhlIG5hbWVzcGFjZXMgbGlzdGVkIGluIHRoaXMgZmllbGQgYW5kIHRoZSBvbmVzIHNlbGVjdGVkIGJ5IG5hbWVzcGFjZVNlbGVjdG9yLiBudWxsIG9yIGVtcHR5IG5hbWVzcGFjZXMgbGlzdCBhbmQgbnVsbCBuYW1lc3BhY2VTZWxlY3RvciBtZWFucyBcInRoaXMgcG9kJ3MgbmFtZXNwYWNlXCIuIiwiaXRlbXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjoiYXJyYXkifSwidG9wb2xvZ3lLZXkiOnsiZGVzY3JpcHRpb24iOiJUaGlzIHBvZCBzaG91bGQgYmUgY28tbG9jYXRlZCAoYWZmaW5pdHkpIG9yIG5vdCBjby1sb2NhdGVkIChhbnRpLWFmZmluaXR5KSB3aXRoIHRoZSBwb2RzIG1hdGNoaW5nIHRoZSBsYWJlbFNlbGVjdG9yIGluIHRoZSBzcGVjaWZpZWQgbmFtZXNwYWNlcywgd2hlcmUgY28tbG9jYXRlZCBpcyBkZWZpbmVkIGFzIHJ1bm5pbmcgb24gYSBub2RlIHdob3NlIHZhbHVlIG9mIHRoZSBsYWJlbCB3aXRoIGtleSB0b3BvbG9neUtleSBtYXRjaGVzIHRoYXQgb2YgYW55IG5vZGUgb24gd2hpY2ggYW55IG9mIHRoZSBzZWxlY3RlZCBwb2RzIGlzIHJ1bm5pbmcuIEVtcHR5IHRvcG9sb2d5S2V5IGlzIG5vdCBhbGxvd2VkLiIsInR5cGUiOiJzdHJpbmcifX0sInJlcXVpcmVkIjpbInRvcG9sb2d5S2V5Il0sInR5cGUiOiJvYmplY3QifSwid2VpZ2h0Ijp7ImRlc2NyaXB0aW9uIjoid2VpZ2h0IGFzc29jaWF0ZWQgd2l0aCBtYXRjaGluZyB0aGUgY29ycmVzcG9uZGluZyBwb2RBZmZpbml0eVRlcm0sIGluIHRoZSByYW5nZSAxLTEwMC4iLCJmb3JtYXQiOiJpbnQzMiIsInR5cGUiOiJpbnRlZ2VyIn19LCJyZXF1aXJlZCI6WyJwb2RBZmZpbml0eVRlcm0iLCJ3ZWlnaHQiXSwidHlwZSI6Im9iamVjdCJ9LCJ0eXBlIjoiYXJyYXkifSwicmVxdWlyZWREdXJpbmdTY2hlZHVsaW5nSWdub3JlZER1cmluZ0V4ZWN1dGlvbiI6eyJkZXNjcmlwdGlvbiI6IklmIHRoZSBhbnRpLWFmZmluaXR5IHJlcXVpcmVtZW50cyBzcGVjaWZpZWQgYnkgdGhpcyBmaWVsZCBhcmUgbm90IG1ldCBhdCBzY2hlZHVsaW5nIHRpbWUsIHRoZSBwb2Qgd2lsbCBub3QgYmUgc2NoZWR1bGVkIG9udG8gdGhlIG5vZGUuIElmIHRoZSBhbnRpLWFmZmluaXR5IHJlcXVpcmVtZW50cyBzcGVjaWZpZWQgYnkgdGhpcyBmaWVsZCBjZWFzZSB0byBiZSBtZXQgYXQgc29tZSBwb2ludCBkdXJpbmcgcG9kIGV4ZWN1dGlvbiAoZS5nLiBkdWUgdG8gYSBwb2QgbGFiZWwgdXBkYXRlKSwgdGhlIHN5c3RlbSBtYXkgb3IgbWF5IG5vdCB0cnkgdG8gZXZlbnR1YWxseSBldmljdCB0aGUgcG9kIGZyb20gaXRzIG5vZGUuIFdoZW4gdGhlcmUgYXJlIG11bHRpcGxlIGVsZW1lbnRzLCB0aGUgbGlzdHMgb2Ygbm9kZXMgY29ycmVzcG9uZGluZyB0byBlYWNoIHBvZEFmZmluaXR5VGVybSBhcmUgaW50ZXJzZWN0ZWQsIGkuZS4gYWxsIHRlcm1zIG11c3QgYmUgc2F0aXNmaWVkLiIsIml0ZW1zIjp7ImRlc2NyaXB0aW9uIjoiRGVmaW5lcyBhIHNldCBvZiBwb2RzIChuYW1lbHkgdGhvc2UgbWF0Y2hpbmcgdGhlIGxhYmVsU2VsZWN0b3IgcmVsYXRpdmUgdG8gdGhlIGdpdmVuIG5hbWVzcGFjZShzKSkgdGhhdCB0aGlzIHBvZCBzaG91bGQgYmUgY28tbG9jYXRlZCAoYWZmaW5pdHkpIG9yIG5vdCBjby1sb2NhdGVkIChhbnRpLWFmZmluaXR5KSB3aXRoLCB3aGVyZSBjby1sb2NhdGVkIGlzIGRlZmluZWQgYXMgcnVubmluZyBvbiBhIG5vZGUgd2hvc2UgdmFsdWUgb2YgdGhlIGxhYmVsIHdpdGgga2V5IFx1MDAzY3RvcG9sb2d5S2V5XHUwMDNlIG1hdGNoZXMgdGhhdCBvZiBhbnkgbm9kZSBvbiB3aGljaCBhIHBvZCBvZiB0aGUgc2V0IG9mIHBvZHMgaXMgcnVubmluZyIsInByb3BlcnRpZXMiOnsibGFiZWxTZWxlY3RvciI6eyJkZXNjcmlwdGlvbiI6IkEgbGFiZWwgcXVlcnkgb3ZlciBhIHNldCBvZiByZXNvdXJjZXMsIGluIHRoaXMgY2FzZSBwb2RzLiBJZiBpdCdzIG51bGwsIHRoaXMgUG9kQWZmaW5pdHlUZXJtIG1hdGNoZXMgd2l0aCBubyBQb2RzLiIsInByb3BlcnRpZXMiOnsibWF0Y2hFeHByZXNzaW9ucyI6eyJkZXNjcmlwdGlvbiI6Im1hdGNoRXhwcmVzc2lvbnMgaXMgYSBsaXN0IG9mIGxhYmVsIHNlbGVjdG9yIHJlcXVpcmVtZW50cy4gVGhlIHJlcXVpcmVtZW50cyBhcmUgQU5EZWQuIiwiaXRlbXMiOnsiZGVzY3JpcHRpb24iOiJBIGxhYmVsIHNlbGVjdG9yIHJlcXVpcmVtZW50IGlzIGEgc2VsZWN0b3IgdGhhdCBjb250YWlucyB2YWx1ZXMsIGEga2V5LCBhbmQgYW4gb3BlcmF0b3IgdGhhdCByZWxhdGVzIHRoZSBrZXkgYW5kIHZhbHVlcy4iLCJwcm9wZXJ0aWVzIjp7ImtleSI6eyJkZXNjcmlwdGlvbiI6ImtleSBpcyB0aGUgbGFiZWwga2V5IHRoYXQgdGhlIHNlbGVjdG9yIGFwcGxpZXMgdG8uIiwidHlwZSI6InN0cmluZyJ9LCJvcGVyYXRvciI6eyJkZXNjcmlwdGlvbiI6Im9wZXJhdG9yIHJlcHJlc2VudHMgYSBrZXkncyByZWxhdGlvbnNoaXAgdG8gYSBzZXQgb2YgdmFsdWVzLiBWYWxpZCBvcGVyYXRvcnMgYXJlIEluLCBOb3RJbiwgRXhpc3RzIGFuZCBEb2VzTm90RXhpc3QuIiwidHlwZSI6InN0cmluZyJ9LCJ2YWx1ZXMiOnsiZGVzY3JpcHRpb24iOiJ2YWx1ZXMgaXMgYW4gYXJyYXkgb2Ygc3RyaW5nIHZhbHVlcy4gSWYgdGhlIG9wZXJhdG9yIGlzIEluIG9yIE5vdEluLCB0aGUgdmFsdWVzIGFycmF5IG11c3QgYmUgbm9uLWVtcHR5LiBJZiB0aGUgb3BlcmF0b3IgaXMgRXhpc3RzIG9yIERvZXNOb3RFeGlzdCwgdGhlIHZhbHVlcyBhcnJheSBtdXN0IGJlIGVtcHR5LiBUaGlzIGFycmF5IGlzIHJlcGxhY2VkIGR1cmluZyBhIHN0cmF0ZWdpYyBtZXJnZSBwYXRjaC4iLCJpdGVtcyI6eyJ0eXBlIjoic3RyaW5nIn0sInR5cGUiOiJhcnJheSJ9fSwicmVxdWlyZWQiOlsia2V5Iiwib3BlcmF0b3IiXSwidHlwZSI6Im9iamVjdCJ9LCJ0eXBlIjoiYXJyYXkifSwibWF0Y2hMYWJlbHMiOnsiYWRkaXRpb25hbFByb3BlcnRpZXMiOnsidHlwZSI6InN0cmluZyJ9LCJkZXNjcmlwdGlvbiI6Im1hdGNoTGFiZWxzIGlzIGEgbWFwIG9mIHtrZXksdmFsdWV9IHBhaXJzLiBBIHNpbmdsZSB7a2V5LHZhbHVlfSBpbiB0aGUgbWF0Y2hMYWJlbHMgbWFwIGlzIGVxdWl2YWxlbnQgdG8gYW4gZWxlbWVudCBvZiBtYXRjaEV4cHJlc3Npb25zLCB3aG9zZSBrZXkgZmllbGQgaXMgXCJrZXlcIiwgdGhlIG9wZXJhdG9yIGlzIFwiSW5cIiwgYW5kIHRoZSB2YWx1ZXMgYXJyYXkgY29udGFpbnMgb25seSBcInZhbHVlXCIuIFRoZSByZXF1aXJlbWVudHMgYXJlIEFORGVkLiIsInR5cGUiOiJvYmplY3QifX0sInR5cGUiOiJvYmplY3QiLCJ4LWt1YmVybmV0ZXMtbWFwLXR5cGUiOiJhdG9taWMifSwibWF0Y2hMYWJlbEtleXMiOnsiZGVzY3JpcHRpb24iOiJNYXRjaExhYmVsS2V5cyBpcyBhIHNldCBvZiBwb2QgbGFiZWwga2V5cyB0byBzZWxlY3Qgd2hpY2ggcG9kcyB3aWxsIGJlIHRha2VuIGludG8gY29uc2lkZXJhdGlvbi4gVGhlIGtleXMgYXJlIHVzZWQgdG8gbG9va3VwIHZhbHVlcyBmcm9tIHRoZSBpbmNvbWluZyBwb2QgbGFiZWxzLCB0aG9zZSBrZXktdmFsdWUgbGFiZWxzIGFyZSBtZXJnZWQgd2l0aCBgTGFiZWxTZWxlY3RvcmAgYXMgYGtleSBpbiAodmFsdWUpYCB0byBzZWxlY3QgdGhlIGdyb3VwIG9mIGV4aXN0aW5nIHBvZHMgd2hpY2ggcG9kcyB3aWxsIGJlIHRha2VuIGludG8gY29uc2lkZXJhdGlvbiBmb3IgdGhlIGluY29taW5nIHBvZCdzIHBvZCAoYW50aSkgYWZmaW5pdHkuIEtleXMgdGhhdCBkb24ndCBleGlzdCBpbiB0aGUgaW5jb21pbmcgcG9kIGxhYmVscyB3aWxsIGJlIGlnbm9yZWQuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGVtcHR5LiBUaGUgc2FtZSBrZXkgaXMgZm9yYmlkZGVuIHRvIGV4aXN0IGluIGJvdGggTWF0Y2hMYWJlbEtleXMgYW5kIExhYmVsU2VsZWN0b3IuIEFsc28sIE1hdGNoTGFiZWxLZXlzIGNhbm5vdCBiZSBzZXQgd2hlbiBMYWJlbFNlbGVjdG9yIGlzbid0IHNldC4gVGhpcyBpcyBhbiBhbHBoYSBmaWVsZCBhbmQgcmVxdWlyZXMgZW5hYmxpbmcgTWF0Y2hMYWJlbEtleXNJblBvZEFmZmluaXR5IGZlYXR1cmUgZ2F0ZS4iLCJpdGVtcyI6eyJ0eXBlIjoic3RyaW5nIn0sInR5cGUiOiJhcnJheSIsIngta3ViZXJuZXRlcy1saXN0LXR5cGUiOiJhdG9taWMifSwibWlzbWF0Y2hMYWJlbEtleXMiOnsiZGVzY3JpcHRpb24iOiJNaXNtYXRjaExhYmVsS2V5cyBpcyBhIHNldCBvZiBwb2QgbGFiZWwga2V5cyB0byBzZWxlY3Qgd2hpY2ggcG9kcyB3aWxsIGJlIHRha2VuIGludG8gY29uc2lkZXJhdGlvbi4gVGhlIGtleXMgYXJlIHVzZWQgdG8gbG9va3VwIHZhbHVlcyBmcm9tIHRoZSBpbmNvbWluZyBwb2QgbGFiZWxzLCB0aG9zZSBrZXktdmFsdWUgbGFiZWxzIGFyZSBtZXJnZWQgd2l0aCBgTGFiZWxTZWxlY3RvcmAgYXMgYGtleSBub3RpbiAodmFsdWUpYCB0byBzZWxlY3QgdGhlIGdyb3VwIG9mIGV4aXN0aW5nIHBvZHMgd2hpY2ggcG9kcyB3aWxsIGJlIHRha2VuIGludG8gY29uc2lkZXJhdGlvbiBmb3IgdGhlIGluY29taW5nIHBvZCdzIHBvZCAoYW50aSkgYWZmaW5pdHkuIEtleXMgdGhhdCBkb24ndCBleGlzdCBpbiB0aGUgaW5jb21pbmcgcG9kIGxhYmVscyB3aWxsIGJlIGlnbm9yZWQuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGVtcHR5LiBUaGUgc2FtZSBrZXkgaXMgZm9yYmlkZGVuIHRvIGV4aXN0IGluIGJvdGggTWlzbWF0Y2hMYWJlbEtleXMgYW5kIExhYmVsU2VsZWN0b3IuIEFsc28sIE1pc21hdGNoTGFiZWxLZXlzIGNhbm5vdCBiZSBzZXQgd2hlbiBMYWJlbFNlbGVjdG9yIGlzbid0IHNldC4gVGhpcyBpcyBhbiBhbHBoYSBmaWVsZCBhbmQgcmVxdWlyZXMgZW5hYmxpbmcgTWF0Y2hMYWJlbEtleXNJblBvZEFmZmluaXR5IGZlYXR1cmUgZ2F0ZS4iLCJpdGVtcyI6eyJ0eXBlIjoic3RyaW5nIn0sInR5cGUiOiJhcnJheSIsIngta3ViZXJuZXRlcy1saXN0LXR5cGUiOiJhdG9taWMifSwibmFtZXNwYWNlU2VsZWN0b3IiOnsiZGVzY3JpcHRpb24iOiJBIGxhYmVsIHF1ZXJ5IG92ZXIgdGhlIHNldCBvZiBuYW1lc3BhY2VzIHRoYXQgdGhlIHRlcm0gYXBwbGllcyB0by4gVGhlIHRlcm0gaXMgYXBwbGllZCB0byB0aGUgdW5pb24gb2YgdGhlIG5hbWVzcGFjZXMgc2VsZWN0ZWQgYnkgdGhpcyBmaWVsZCBhbmQgdGhlIG9uZXMgbGlzdGVkIGluIHRoZSBuYW1lc3BhY2VzIGZpZWxkLiBudWxsIHNlbGVjdG9yIGFuZCBudWxsIG9yIGVtcHR5IG5hbWVzcGFjZXMgbGlzdCBtZWFucyBcInRoaXMgcG9kJ3MgbmFtZXNwYWNlXCIuIEFuIGVtcHR5IHNlbGVjdG9yICh7fSkgbWF0Y2hlcyBhbGwgbmFtZXNwYWNlcy4iLCJwcm9wZXJ0aWVzIjp7Im1hdGNoRXhwcmVzc2lvbnMiOnsiZGVzY3JpcHRpb24iOiJtYXRjaEV4cHJlc3Npb25zIGlzIGEgbGlzdCBvZiBsYWJlbCBzZWxlY3RvciByZXF1aXJlbWVudHMuIFRoZSByZXF1aXJlbWVudHMgYXJlIEFORGVkLiIsIml0ZW1zIjp7ImRlc2NyaXB0aW9uIjoiQSBsYWJlbCBzZWxlY3RvciByZXF1aXJlbWVudCBpcyBhIHNlbGVjdG9yIHRoYXQgY29udGFpbnMgdmFsdWVzLCBhIGtleSwgYW5kIGFuIG9wZXJhdG9yIHRoYXQgcmVsYXRlcyB0aGUga2V5IGFuZCB2YWx1ZXMuIiwicHJvcGVydGllcyI6eyJrZXkiOnsiZGVzY3JpcHRpb24iOiJrZXkgaXMgdGhlIGxhYmVsIGtleSB0aGF0IHRoZSBzZWxlY3RvciBhcHBsaWVzIHRvLiIsInR5cGUiOiJzdHJpbmcifSwib3BlcmF0b3IiOnsiZGVzY3JpcHRpb24iOiJvcGVyYXRvciByZXByZXNlbnRzIGEga2V5J3MgcmVsYXRpb25zaGlwIHRvIGEgc2V0IG9mIHZhbHVlcy4gVmFsaWQgb3BlcmF0b3JzIGFyZSBJbiwgTm90SW4sIEV4aXN0cyBhbmQgRG9lc05vdEV4aXN0LiIsInR5cGUiOiJzdHJpbmcifSwidmFsdWVzIjp7ImRlc2NyaXB0aW9uIjoidmFsdWVzIGlzIGFuIGFycmF5IG9mIHN0cmluZyB2YWx1ZXMuIElmIHRoZSBvcGVyYXRvciBpcyBJbiBvciBOb3RJbiwgdGhlIHZhbHVlcyBhcnJheSBtdXN0IGJlIG5vbi1lbXB0eS4gSWYgdGhlIG9wZXJhdG9yIGlzIEV4aXN0cyBvciBEb2VzTm90RXhpc3QsIHRoZSB2YWx1ZXMgYXJyYXkgbXVzdCBiZSBlbXB0eS4gVGhpcyBhcnJheSBpcyByZXBsYWNlZCBkdXJpbmcgYSBzdHJhdGVnaWMgbWVyZ2UgcGF0Y2guIiwiaXRlbXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjoiYXJyYXkifX0sInJlcXVpcmVkIjpbImtleSIsIm9wZXJhdG9yIl0sInR5cGUiOiJvYmplY3QifSwidHlwZSI6ImFycmF5In0sIm1hdGNoTGFiZWxzIjp7ImFkZGl0aW9uYWxQcm9wZXJ0aWVzIjp7InR5cGUiOiJzdHJpbmcifSwiZGVzY3JpcHRpb24iOiJtYXRjaExhYmVscyBpcyBhIG1hcCBvZiB7a2V5LHZhbHVlfSBwYWlycy4gQSBzaW5nbGUge2tleSx2YWx1ZX0gaW4gdGhlIG1hdGNoTGFiZWxzIG1hcCBpcyBlcXVpdmFsZW50IHRvIGFuIGVsZW1lbnQgb2YgbWF0Y2hFeHByZXNzaW9ucywgd2hvc2Uga2V5IGZpZWxkIGlzIFwia2V5XCIsIHRoZSBvcGVyYXRvciBpcyBcIkluXCIsIGFuZCB0aGUgdmFsdWVzIGFycmF5IGNvbnRhaW5zIG9ubHkgXCJ2YWx1ZVwiLiBUaGUgcmVxdWlyZW1lbnRzIGFyZSBBTkRlZC4iLCJ0eXBlIjoib2JqZWN0In19LCJ0eXBlIjoib2JqZWN0IiwieC1rdWJlcm5ldGVzLW1hcC10eXBlIjoiYXRvbWljIn0sIm5hbWVzcGFjZXMiOnsiZGVzY3JpcHRpb24iOiJuYW1lc3BhY2VzIHNwZWNpZmllcyBhIHN0YXRpYyBsaXN0IG9mIG5hbWVzcGFjZSBuYW1lcyB0aGF0IHRoZSB0ZXJtIGFwcGxpZXMgdG8uIFRoZSB0ZXJtIGlzIGFwcGxpZWQgdG8gdGhlIHVuaW9uIG9mIHRoZSBuYW1lc3BhY2VzIGxpc3RlZCBpbiB0aGlzIGZpZWxkIGFuZCB0aGUgb25lcyBzZWxlY3RlZCBieSBuYW1lc3BhY2VTZWxlY3Rvci4gbnVsbCBvciBlbXB0eSBuYW1lc3BhY2VzIGxpc3QgYW5kIG51bGwgbmFtZXNwYWNlU2VsZWN0b3IgbWVhbnMgXCJ0aGlzIHBvZCdzIG5hbWVzcGFjZVwiLiIsIml0ZW1zIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6ImFycmF5In0sInRvcG9sb2d5S2V5Ijp7ImRlc2NyaXB0aW9uIjoiVGhpcyBwb2Qgc2hvdWxkIGJlIGNvLWxvY2F0ZWQgKGFmZmluaXR5KSBvciBub3QgY28tbG9jYXRlZCAoYW50aS1hZmZpbml0eSkgd2l0aCB0aGUgcG9kcyBtYXRjaGluZyB0aGUgbGFiZWxTZWxlY3RvciBpbiB0aGUgc3BlY2lmaWVkIG5hbWVzcGFjZXMsIHdoZXJlIGNvLWxvY2F0ZWQgaXMgZGVmaW5lZCBhcyBydW5uaW5nIG9uIGEgbm9kZSB3aG9zZSB2YWx1ZSBvZiB0aGUgbGFiZWwgd2l0aCBrZXkgdG9wb2xvZ3lLZXkgbWF0Y2hlcyB0aGF0IG9mIGFueSBub2RlIG9uIHdoaWNoIGFueSBvZiB0aGUgc2VsZWN0ZWQgcG9kcyBpcyBydW5uaW5nLiBFbXB0eSB0b3BvbG9neUtleSBpcyBub3QgYWxsb3dlZC4iLCJ0eXBlIjoic3RyaW5nIn19LCJyZXF1aXJlZCI6WyJ0b3BvbG9neUtleSJdLCJ0eXBlIjoib2JqZWN0In0sInR5cGUiOiJhcnJheSJ9fSwidHlwZSI6Im9iamVjdCJ9LCJ0b2xlcmF0aW9ucyI6eyJkZXNjcmlwdGlvbiI6IlRoZSBwb2QgdGhpcyBUb2xlcmF0aW9uIGlzIGF0dGFjaGVkIHRvIHRvbGVyYXRlcyBhbnkgdGFpbnQgdGhhdCBtYXRjaGVzIHRoZSB0cmlwbGUgXHUwMDNja2V5LHZhbHVlLGVmZmVjdFx1MDAzZSB1c2luZyB0aGUgbWF0Y2hpbmcgb3BlcmF0b3IgXHUwMDNjb3BlcmF0b3JcdTAwM2UiLCJpdGVtcyI6eyJkZXNjcmlwdGlvbiI6IlRoZSBwb2QgdGhpcyBUb2xlcmF0aW9uIGlzIGF0dGFjaGVkIHRvIHRvbGVyYXRlcyBhbnkgdGFpbnQgdGhhdCBtYXRjaGVzIHRoZSB0cmlwbGUgXHUwMDNja2V5LHZhbHVlLGVmZmVjdFx1MDAzZSB1c2luZyB0aGUgbWF0Y2hpbmcgb3BlcmF0b3IgXHUwMDNjb3BlcmF0b3JcdTAwM2UuIiwicHJvcGVydGllcyI6eyJlZmZlY3QiOnsiZGVzY3JpcHRpb24iOiJFZmZlY3QgaW5kaWNhdGVzIHRoZSB0YWludCBlZmZlY3QgdG8gbWF0Y2guIEVtcHR5IG1lYW5zIG1hdGNoIGFsbCB0YWludCBlZmZlY3RzLiBXaGVuIHNwZWNpZmllZCwgYWxsb3dlZCB2YWx1ZXMgYXJlIE5vU2NoZWR1bGUsIFByZWZlck5vU2NoZWR1bGUgYW5kIE5vRXhlY3V0ZS4iLCJ0eXBlIjoic3RyaW5nIn0sImtleSI6eyJkZXNjcmlwdGlvbiI6IktleSBpcyB0aGUgdGFpbnQga2V5IHRoYXQgdGhlIHRvbGVyYXRpb24gYXBwbGllcyB0by4gRW1wdHkgbWVhbnMgbWF0Y2ggYWxsIHRhaW50IGtleXMuIElmIHRoZSBrZXkgaXMgZW1wdHksIG9wZXJhdG9yIG11c3QgYmUgRXhpc3RzOyB0aGlzIGNvbWJpbmF0aW9uIG1lYW5zIHRvIG1hdGNoIGFsbCB2YWx1ZXMgYW5kIGFsbCBrZXlzLiIsInR5cGUiOiJzdHJpbmcifSwib3BlcmF0b3IiOnsiZGVzY3JpcHRpb24iOiJPcGVyYXRvciByZXByZXNlbnRzIGEga2V5J3MgcmVsYXRpb25zaGlwIHRvIHRoZSB2YWx1ZS4gVmFsaWQgb3BlcmF0b3JzIGFyZSBFeGlzdHMgYW5kIEVxdWFsLiBEZWZhdWx0cyB0byBFcXVhbC4gRXhpc3RzIGlzIGVxdWl2YWxlbnQgdG8gd2lsZGNhcmQgZm9yIHZhbHVlLCBzbyB0aGF0IGEgcG9kIGNhbiB0b2xlcmF0ZSBhbGwgdGFpbnRzIG9mIGEgcGFydGljdWxhciBjYXRlZ29yeS4iLCJ0eXBlIjoic3RyaW5nIn0sInRvbGVyYXRpb25TZWNvbmRzIjp7ImRlc2NyaXB0aW9uIjoiVG9sZXJhdGlvblNlY29uZHMgcmVwcmVzZW50cyB0aGUgcGVyaW9kIG9mIHRpbWUgdGhlIHRvbGVyYXRpb24gKHdoaWNoIG11c3QgYmUgb2YgZWZmZWN0IE5vRXhlY3V0ZSwgb3RoZXJ3aXNlIHRoaXMgZmllbGQgaXMgaWdub3JlZCkgdG9sZXJhdGVzIHRoZSB0YWludC4gQnkgZGVmYXVsdCwgaXQgaXMgbm90IHNldCwgd2hpY2ggbWVhbnMgdG9sZXJhdGUgdGhlIHRhaW50IGZvcmV2ZXIgKGRvIG5vdCBldmljdCkuIFplcm8gYW5kIG5lZ2F0aXZlIHZhbHVlcyB3aWxsIGJlIHRyZWF0ZWQgYXMgMCAoZXZpY3QgaW1tZWRpYXRlbHkpIGJ5IHRoZSBzeXN0ZW0uIiwiZm9ybWF0IjoiaW50NjQiLCJ0eXBlIjoiaW50ZWdlciJ9LCJ2YWx1ZSI6eyJkZXNjcmlwdGlvbiI6IlZhbHVlIGlzIHRoZSB0YWludCB2YWx1ZSB0aGUgdG9sZXJhdGlvbiBtYXRjaGVzIHRvLiBJZiB0aGUgb3BlcmF0b3IgaXMgRXhpc3RzLCB0aGUgdmFsdWUgc2hvdWxkIGJlIGVtcHR5LCBvdGhlcndpc2UganVzdCBhIHJlZ3VsYXIgc3RyaW5nLiIsInR5cGUiOiJzdHJpbmcifX0sInR5cGUiOiJvYmplY3QifSwidHlwZSI6ImFycmF5In0sInRvcG9sb2d5U3ByZWFkQ29uc3RyYWludHMiOnsiZGVzY3JpcHRpb24iOiJUb3BvbG9neVNwcmVhZENvbnN0cmFpbnQgc3BlY2lmaWVzIGhvdyB0byBzcHJlYWQgbWF0Y2hpbmcgcG9kcyBhbW9uZyB0aGUgZ2l2ZW4gdG9wb2xvZ3kiLCJpdGVtcyI6eyJkZXNjcmlwdGlvbiI6IlRvcG9sb2d5U3ByZWFkQ29uc3RyYWludCBzcGVjaWZpZXMgaG93IHRvIHNwcmVhZCBtYXRjaGluZyBwb2RzIGFtb25nIHRoZSBnaXZlbiB0b3BvbG9neS4iLCJwcm9wZXJ0aWVzIjp7ImxhYmVsU2VsZWN0b3IiOnsiZGVzY3JpcHRpb24iOiJMYWJlbFNlbGVjdG9yIGlzIHVzZWQgdG8gZmluZCBtYXRjaGluZyBwb2RzLiBQb2RzIHRoYXQgbWF0Y2ggdGhpcyBsYWJlbCBzZWxlY3RvciBhcmUgY291bnRlZCB0byBkZXRlcm1pbmUgdGhlIG51bWJlciBvZiBwb2RzIGluIHRoZWlyIGNvcnJlc3BvbmRpbmcgdG9wb2xvZ3kgZG9tYWluLiIsInByb3BlcnRpZXMiOnsibWF0Y2hFeHByZXNzaW9ucyI6eyJkZXNjcmlwdGlvbiI6Im1hdGNoRXhwcmVzc2lvbnMgaXMgYSBsaXN0IG9mIGxhYmVsIHNlbGVjdG9yIHJlcXVpcmVtZW50cy4gVGhlIHJlcXVpcmVtZW50cyBhcmUgQU5EZWQuIiwiaXRlbXMiOnsiZGVzY3JpcHRpb24iOiJBIGxhYmVsIHNlbGVjdG9yIHJlcXVpcmVtZW50IGlzIGEgc2VsZWN0b3IgdGhhdCBjb250YWlucyB2YWx1ZXMsIGEga2V5LCBhbmQgYW4gb3BlcmF0b3IgdGhhdCByZWxhdGVzIHRoZSBrZXkgYW5kIHZhbHVlcy4iLCJwcm9wZXJ0aWVzIjp7ImtleSI6eyJkZXNjcmlwdGlvbiI6ImtleSBpcyB0aGUgbGFiZWwga2V5IHRoYXQgdGhlIHNlbGVjdG9yIGFwcGxpZXMgdG8uIiwidHlwZSI6InN0cmluZyJ9LCJvcGVyYXRvciI6eyJkZXNjcmlwdGlvbiI6Im9wZXJhdG9yIHJlcHJlc2VudHMgYSBrZXkncyByZWxhdGlvbnNoaXAgdG8gYSBzZXQgb2YgdmFsdWVzLiBWYWxpZCBvcGVyYXRvcnMgYXJlIEluLCBOb3RJbiwgRXhpc3RzIGFuZCBEb2VzTm90RXhpc3QuIiwidHlwZSI6InN0cmluZyJ9LCJ2YWx1ZXMiOnsiZGVzY3JpcHRpb24iOiJ2YWx1ZXMgaXMgYW4gYXJyYXkgb2Ygc3RyaW5nIHZhbHVlcy4gSWYgdGhlIG9wZXJhdG9yIGlzIEluIG9yIE5vdEluLCB0aGUgdmFsdWVzIGFycmF5IG11c3QgYmUgbm9uLWVtcHR5LiBJZiB0aGUgb3BlcmF0b3IgaXMgRXhpc3RzIG9yIERvZXNOb3RFeGlzdCwgdGhlIHZhbHVlcyBhcnJheSBtdXN0IGJlIGVtcHR5LiBUaGlzIGFycmF5IGlzIHJlcGxhY2VkIGR1cmluZyBhIHN0cmF0ZWdpYyBtZXJnZSBwYXRjaC4iLCJpdGVtcyI6eyJ0eXBlIjoic3RyaW5nIn0sInR5cGUiOiJhcnJheSJ9fSwicmVxdWlyZWQiOlsia2V5Iiwib3BlcmF0b3IiXSwidHlwZSI6Im9iamVjdCJ9LCJ0eXBlIjoiYXJyYXkifSwibWF0Y2hMYWJlbHMiOnsiYWRkaXRpb25hbFByb3BlcnRpZXMiOnsidHlwZSI6InN0cmluZyJ9LCJkZXNjcmlwdGlvbiI6Im1hdGNoTGFiZWxzIGlzIGEgbWFwIG9mIHtrZXksdmFsdWV9IHBhaXJzLiBBIHNpbmdsZSB7a2V5LHZhbHVlfSBpbiB0aGUgbWF0Y2hMYWJlbHMgbWFwIGlzIGVxdWl2YWxlbnQgdG8gYW4gZWxlbWVudCBvZiBtYXRjaEV4cHJlc3Npb25zLCB3aG9zZSBrZXkgZmllbGQgaXMgXCJrZXlcIiwgdGhlIG9wZXJhdG9yIGlzIFwiSW5cIiwgYW5kIHRoZSB2YWx1ZXMgYXJyYXkgY29udGFpbnMgb25seSBcInZhbHVlXCIuIFRoZSByZXF1aXJlbWVudHMgYXJlIEFORGVkLiIsInR5cGUiOiJvYmplY3QifX0sInR5cGUiOiJvYmplY3QiLCJ4LWt1YmVybmV0ZXMtbWFwLXR5cGUiOiJhdG9taWMifSwibWF0Y2hMYWJlbEtleXMiOnsiZGVzY3JpcHRpb24iOiJNYXRjaExhYmVsS2V5cyBpcyBhIHNldCBvZiBwb2QgbGFiZWwga2V5cyB0byBzZWxlY3QgdGhlIHBvZHMgb3ZlciB3aGljaCBzcHJlYWRpbmcgd2lsbCBiZSBjYWxjdWxhdGVkLiBUaGUga2V5cyBhcmUgdXNlZCB0byBsb29rdXAgdmFsdWVzIGZyb20gdGhlIGluY29taW5nIHBvZCBsYWJlbHMsIHRob3NlIGtleS12YWx1ZSBsYWJlbHMgYXJlIEFORGVkIHdpdGggbGFiZWxTZWxlY3RvciB0byBzZWxlY3QgdGhlIGdyb3VwIG9mIGV4aXN0aW5nIHBvZHMgb3ZlciB3aGljaCBzcHJlYWRpbmcgd2lsbCBiZSBjYWxjdWxhdGVkIGZvciB0aGUgaW5jb21pbmcgcG9kLiBUaGUgc2FtZSBrZXkgaXMgZm9yYmlkZGVuIHRvIGV4aXN0IGluIGJvdGggTWF0Y2hMYWJlbEtleXMgYW5kIExhYmVsU2VsZWN0b3IuIE1hdGNoTGFiZWxLZXlzIGNhbm5vdCBiZSBzZXQgd2hlbiBMYWJlbFNlbGVjdG9yIGlzbid0IHNldC4gS2V5cyB0aGF0IGRvbid0IGV4aXN0IGluIHRoZSBpbmNvbWluZyBwb2QgbGFiZWxzIHdpbGwgYmUgaWdub3JlZC4gQSBudWxsIG9yIGVtcHR5IGxpc3QgbWVhbnMgb25seSBtYXRjaCBhZ2FpbnN0IGxhYmVsU2VsZWN0b3IuIFxuIFRoaXMgaXMgYSBiZXRhIGZpZWxkIGFuZCByZXF1aXJlcyB0aGUgTWF0Y2hMYWJlbEtleXNJblBvZFRvcG9sb2d5U3ByZWFkIGZlYXR1cmUgZ2F0ZSB0byBiZSBlbmFibGVkIChlbmFibGVkIGJ5IGRlZmF1bHQpLiIsIml0ZW1zIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6ImFycmF5IiwieC1rdWJlcm5ldGVzLWxpc3QtdHlwZSI6ImF0b21pYyJ9LCJtYXhTa2V3Ijp7ImRlc2NyaXB0aW9uIjoiTWF4U2tldyBkZXNjcmliZXMgdGhlIGRlZ3JlZSB0byB3aGljaCBwb2RzIG1heSBiZSB1bmV2ZW5seSBkaXN0cmlidXRlZC4gV2hlbiBgd2hlblVuc2F0aXNmaWFibGU9RG9Ob3RTY2hlZHVsZWAsIGl0IGlzIHRoZSBtYXhpbXVtIHBlcm1pdHRlZCBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIG51bWJlciBvZiBtYXRjaGluZyBwb2RzIGluIHRoZSB0YXJnZXQgdG9wb2xvZ3kgYW5kIHRoZSBnbG9iYWwgbWluaW11bS4gVGhlIGdsb2JhbCBtaW5pbXVtIGlzIHRoZSBtaW5pbXVtIG51bWJlciBvZiBtYXRjaGluZyBwb2RzIGluIGFuIGVsaWdpYmxlIGRvbWFpbiBvciB6ZXJvIGlmIHRoZSBudW1iZXIgb2YgZWxpZ2libGUgZG9tYWlucyBpcyBsZXNzIHRoYW4gTWluRG9tYWlucy4gRm9yIGV4YW1wbGUsIGluIGEgMy16b25lIGNsdXN0ZXIsIE1heFNrZXcgaXMgc2V0IHRvIDEsIGFuZCBwb2RzIHdpdGggdGhlIHNhbWUgbGFiZWxTZWxlY3RvciBzcHJlYWQgYXMgMi8yLzE6IEluIHRoaXMgY2FzZSwgdGhlIGdsb2JhbCBtaW5pbXVtIGlzIDEuIHwgem9uZTEgfCB6b25lMiB8IHpvbmUzIHwgfCAgUCBQICB8ICBQIFAgIHwgICBQICAgfCAtIGlmIE1heFNrZXcgaXMgMSwgaW5jb21pbmcgcG9kIGNhbiBvbmx5IGJlIHNjaGVkdWxlZCB0byB6b25lMyB0byBiZWNvbWUgMi8yLzI7IHNjaGVkdWxpbmcgaXQgb250byB6b25lMSh6b25lMikgd291bGQgbWFrZSB0aGUgQWN0dWFsU2tldygzLTEpIG9uIHpvbmUxKHpvbmUyKSB2aW9sYXRlIE1heFNrZXcoMSkuIC0gaWYgTWF4U2tldyBpcyAyLCBpbmNvbWluZyBwb2QgY2FuIGJlIHNjaGVkdWxlZCBvbnRvIGFueSB6b25lLiBXaGVuIGB3aGVuVW5zYXRpc2ZpYWJsZT1TY2hlZHVsZUFueXdheWAsIGl0IGlzIHVzZWQgdG8gZ2l2ZSBoaWdoZXIgcHJlY2VkZW5jZSB0byB0b3BvbG9naWVzIHRoYXQgc2F0aXNmeSBpdC4gSXQncyBhIHJlcXVpcmVkIGZpZWxkLiBEZWZhdWx0IHZhbHVlIGlzIDEgYW5kIDAgaXMgbm90IGFsbG93ZWQuIiwiZm9ybWF0IjoiaW50MzIiLCJ0eXBlIjoiaW50ZWdlciJ9LCJtaW5Eb21haW5zIjp7ImRlc2NyaXB0aW9uIjoiTWluRG9tYWlucyBpbmRpY2F0ZXMgYSBtaW5pbXVtIG51bWJlciBvZiBlbGlnaWJsZSBkb21haW5zLiBXaGVuIHRoZSBudW1iZXIgb2YgZWxpZ2libGUgZG9tYWlucyB3aXRoIG1hdGNoaW5nIHRvcG9sb2d5IGtleXMgaXMgbGVzcyB0aGFuIG1pbkRvbWFpbnMsIFBvZCBUb3BvbG9neSBTcHJlYWQgdHJlYXRzIFwiZ2xvYmFsIG1pbmltdW1cIiBhcyAwLCBhbmQgdGhlbiB0aGUgY2FsY3VsYXRpb24gb2YgU2tldyBpcyBwZXJmb3JtZWQuIEFuZCB3aGVuIHRoZSBudW1iZXIgb2YgZWxpZ2libGUgZG9tYWlucyB3aXRoIG1hdGNoaW5nIHRvcG9sb2d5IGtleXMgZXF1YWxzIG9yIGdyZWF0ZXIgdGhhbiBtaW5Eb21haW5zLCB0aGlzIHZhbHVlIGhhcyBubyBlZmZlY3Qgb24gc2NoZWR1bGluZy4gQXMgYSByZXN1bHQsIHdoZW4gdGhlIG51bWJlciBvZiBlbGlnaWJsZSBkb21haW5zIGlzIGxlc3MgdGhhbiBtaW5Eb21haW5zLCBzY2hlZHVsZXIgd29uJ3Qgc2NoZWR1bGUgbW9yZSB0aGFuIG1heFNrZXcgUG9kcyB0byB0aG9zZSBkb21haW5zLiBJZiB2YWx1ZSBpcyBuaWwsIHRoZSBjb25zdHJhaW50IGJlaGF2ZXMgYXMgaWYgTWluRG9tYWlucyBpcyBlcXVhbCB0byAxLiBWYWxpZCB2YWx1ZXMgYXJlIGludGVnZXJzIGdyZWF0ZXIgdGhhbiAwLiBXaGVuIHZhbHVlIGlzIG5vdCBuaWwsIFdoZW5VbnNhdGlzZmlhYmxlIG11c3QgYmUgRG9Ob3RTY2hlZHVsZS4gXG4gRm9yIGV4YW1wbGUsIGluIGEgMy16b25lIGNsdXN0ZXIsIE1heFNrZXcgaXMgc2V0IHRvIDIsIE1pbkRvbWFpbnMgaXMgc2V0IHRvIDUgYW5kIHBvZHMgd2l0aCB0aGUgc2FtZSBsYWJlbFNlbGVjdG9yIHNwcmVhZCBhcyAyLzIvMjogfCB6b25lMSB8IHpvbmUyIHwgem9uZTMgfCB8ICBQIFAgIHwgIFAgUCAgfCAgUCBQICB8IFRoZSBudW1iZXIgb2YgZG9tYWlucyBpcyBsZXNzIHRoYW4gNShNaW5Eb21haW5zKSwgc28gXCJnbG9iYWwgbWluaW11bVwiIGlzIHRyZWF0ZWQgYXMgMC4gSW4gdGhpcyBzaXR1YXRpb24sIG5ldyBwb2Qgd2l0aCB0aGUgc2FtZSBsYWJlbFNlbGVjdG9yIGNhbm5vdCBiZSBzY2hlZHVsZWQsIGJlY2F1c2UgY29tcHV0ZWQgc2tldyB3aWxsIGJlIDMoMyAtIDApIGlmIG5ldyBQb2QgaXMgc2NoZWR1bGVkIHRvIGFueSBvZiB0aGUgdGhyZWUgem9uZXMsIGl0IHdpbGwgdmlvbGF0ZSBNYXhTa2V3LiBcbiBUaGlzIGlzIGEgYmV0YSBmaWVsZCBhbmQgcmVxdWlyZXMgdGhlIE1pbkRvbWFpbnNJblBvZFRvcG9sb2d5U3ByZWFkIGZlYXR1cmUgZ2F0ZSB0byBiZSBlbmFibGVkIChlbmFibGVkIGJ5IGRlZmF1bHQpLiIsImZvcm1hdCI6ImludDMyIiwidHlwZSI6ImludGVnZXIifSwibm9kZUFmZmluaXR5UG9saWN5Ijp7ImRlc2NyaXB0aW9uIjoiTm9kZUFmZmluaXR5UG9saWN5IGluZGljYXRlcyBob3cgd2Ugd2lsbCB0cmVhdCBQb2QncyBub2RlQWZmaW5pdHkvbm9kZVNlbGVjdG9yIHdoZW4gY2FsY3VsYXRpbmcgcG9kIHRvcG9sb2d5IHNwcmVhZCBza2V3LiBPcHRpb25zIGFyZTogLSBIb25vcjogb25seSBub2RlcyBtYXRjaGluZyBub2RlQWZmaW5pdHkvbm9kZVNlbGVjdG9yIGFyZSBpbmNsdWRlZCBpbiB0aGUgY2FsY3VsYXRpb25zLiAtIElnbm9yZTogbm9kZUFmZmluaXR5L25vZGVTZWxlY3RvciBhcmUgaWdub3JlZC4gQWxsIG5vZGVzIGFyZSBpbmNsdWRlZCBpbiB0aGUgY2FsY3VsYXRpb25zLiBcbiBJZiB0aGlzIHZhbHVlIGlzIG5pbCwgdGhlIGJlaGF2aW9yIGlzIGVxdWl2YWxlbnQgdG8gdGhlIEhvbm9yIHBvbGljeS4gVGhpcyBpcyBhIGJldGEtbGV2ZWwgZmVhdHVyZSBkZWZhdWx0IGVuYWJsZWQgYnkgdGhlIE5vZGVJbmNsdXNpb25Qb2xpY3lJblBvZFRvcG9sb2d5U3ByZWFkIGZlYXR1cmUgZmxhZy4iLCJ0eXBlIjoic3RyaW5nIn0sIm5vZGVUYWludHNQb2xpY3kiOnsiZGVzY3JpcHRpb24iOiJOb2RlVGFpbnRzUG9saWN5IGluZGljYXRlcyBob3cgd2Ugd2lsbCB0cmVhdCBub2RlIHRhaW50cyB3aGVuIGNhbGN1bGF0aW5nIHBvZCB0b3BvbG9neSBzcHJlYWQgc2tldy4gT3B0aW9ucyBhcmU6IC0gSG9ub3I6IG5vZGVzIHdpdGhvdXQgdGFpbnRzLCBhbG9uZyB3aXRoIHRhaW50ZWQgbm9kZXMgZm9yIHdoaWNoIHRoZSBpbmNvbWluZyBwb2QgaGFzIGEgdG9sZXJhdGlvbiwgYXJlIGluY2x1ZGVkLiAtIElnbm9yZTogbm9kZSB0YWludHMgYXJlIGlnbm9yZWQuIEFsbCBub2RlcyBhcmUgaW5jbHVkZWQuIFxuIElmIHRoaXMgdmFsdWUgaXMgbmlsLCB0aGUgYmVoYXZpb3IgaXMgZXF1aXZhbGVudCB0byB0aGUgSWdub3JlIHBvbGljeS4gVGhpcyBpcyBhIGJldGEtbGV2ZWwgZmVhdHVyZSBkZWZhdWx0IGVuYWJsZWQgYnkgdGhlIE5vZGVJbmNsdXNpb25Qb2xpY3lJblBvZFRvcG9sb2d5U3ByZWFkIGZlYXR1cmUgZmxhZy4iLCJ0eXBlIjoic3RyaW5nIn0sInRvcG9sb2d5S2V5Ijp7ImRlc2NyaXB0aW9uIjoiVG9wb2xvZ3lLZXkgaXMgdGhlIGtleSBvZiBub2RlIGxhYmVscy4gTm9kZXMgdGhhdCBoYXZlIGEgbGFiZWwgd2l0aCB0aGlzIGtleSBhbmQgaWRlbnRpY2FsIHZhbHVlcyBhcmUgY29uc2lkZXJlZCB0byBiZSBpbiB0aGUgc2FtZSB0b3BvbG9neS4gV2UgY29uc2lkZXIgZWFjaCBcdTAwM2NrZXksIHZhbHVlXHUwMDNlIGFzIGEgXCJidWNrZXRcIiwgYW5kIHRyeSB0byBwdXQgYmFsYW5jZWQgbnVtYmVyIG9mIHBvZHMgaW50byBlYWNoIGJ1Y2tldC4gV2UgZGVmaW5lIGEgZG9tYWluIGFzIGEgcGFydGljdWxhciBpbnN0YW5jZSBvZiBhIHRvcG9sb2d5LiBBbHNvLCB3ZSBkZWZpbmUgYW4gZWxpZ2libGUgZG9tYWluIGFzIGEgZG9tYWluIHdob3NlIG5vZGVzIG1lZXQgdGhlIHJlcXVpcmVtZW50cyBvZiBub2RlQWZmaW5pdHlQb2xpY3kgYW5kIG5vZGVUYWludHNQb2xpY3kuIGUuZy4gSWYgVG9wb2xvZ3lLZXkgaXMgXCJrdWJlcm5ldGVzLmlvL2hvc3RuYW1lXCIsIGVhY2ggTm9kZSBpcyBhIGRvbWFpbiBvZiB0aGF0IHRvcG9sb2d5LiBBbmQsIGlmIFRvcG9sb2d5S2V5IGlzIFwidG9wb2xvZ3kua3ViZXJuZXRlcy5pby96b25lXCIsIGVhY2ggem9uZSBpcyBhIGRvbWFpbiBvZiB0aGF0IHRvcG9sb2d5LiBJdCdzIGEgcmVxdWlyZWQgZmllbGQuIiwidHlwZSI6InN0cmluZyJ9LCJ3aGVuVW5zYXRpc2ZpYWJsZSI6eyJkZXNjcmlwdGlvbiI6IldoZW5VbnNhdGlzZmlhYmxlIGluZGljYXRlcyBob3cgdG8gZGVhbCB3aXRoIGEgcG9kIGlmIGl0IGRvZXNuJ3Qgc2F0aXNmeSB0aGUgc3ByZWFkIGNvbnN0cmFpbnQuIC0gRG9Ob3RTY2hlZHVsZSAoZGVmYXVsdCkgdGVsbHMgdGhlIHNjaGVkdWxlciBub3QgdG8gc2NoZWR1bGUgaXQuIC0gU2NoZWR1bGVBbnl3YXkgdGVsbHMgdGhlIHNjaGVkdWxlciB0byBzY2hlZHVsZSB0aGUgcG9kIGluIGFueSBsb2NhdGlvbiwgYnV0IGdpdmluZyBoaWdoZXIgcHJlY2VkZW5jZSB0byB0b3BvbG9naWVzIHRoYXQgd291bGQgaGVscCByZWR1Y2UgdGhlIHNrZXcuIEEgY29uc3RyYWludCBpcyBjb25zaWRlcmVkIFwiVW5zYXRpc2ZpYWJsZVwiIGZvciBhbiBpbmNvbWluZyBwb2QgaWYgYW5kIG9ubHkgaWYgZXZlcnkgcG9zc2libGUgbm9kZSBhc3NpZ25tZW50IGZvciB0aGF0IHBvZCB3b3VsZCB2aW9sYXRlIFwiTWF4U2tld1wiIG9uIHNvbWUgdG9wb2xvZ3kuIEZvciBleGFtcGxlLCBpbiBhIDMtem9uZSBjbHVzdGVyLCBNYXhTa2V3IGlzIHNldCB0byAxLCBhbmQgcG9kcyB3aXRoIHRoZSBzYW1lIGxhYmVsU2VsZWN0b3Igc3ByZWFkIGFzIDMvMS8xOiB8IHpvbmUxIHwgem9uZTIgfCB6b25lMyB8IHwgUCBQIFAgfCAgIFAgICB8ICAgUCAgIHwgSWYgV2hlblVuc2F0aXNmaWFibGUgaXMgc2V0IHRvIERvTm90U2NoZWR1bGUsIGluY29taW5nIHBvZCBjYW4gb25seSBiZSBzY2hlZHVsZWQgdG8gem9uZTIoem9uZTMpIHRvIGJlY29tZSAzLzIvMSgzLzEvMikgYXMgQWN0dWFsU2tldygyLTEpIG9uIHpvbmUyKHpvbmUzKSBzYXRpc2ZpZXMgTWF4U2tldygxKS4gSW4gb3RoZXIgd29yZHMsIHRoZSBjbHVzdGVyIGNhbiBzdGlsbCBiZSBpbWJhbGFuY2VkLCBidXQgc2NoZWR1bGVyIHdvbid0IG1ha2UgaXQgKm1vcmUqIGltYmFsYW5jZWQuIEl0J3MgYSByZXF1aXJlZCBmaWVsZC4iLCJ0eXBlIjoic3RyaW5nIn19LCJyZXF1aXJlZCI6WyJtYXhTa2V3IiwidG9wb2xvZ3lLZXkiLCJ3aGVuVW5zYXRpc2ZpYWJsZSJdLCJ0eXBlIjoib2JqZWN0In0sInR5cGUiOiJhcnJheSJ9fSwidHlwZSI6Im9iamVjdCJ9LCJwb3J0YWJsZSI6eyJkZXNjcmlwdGlvbiI6IlBvcnRhYmxlIHNheXMgd2hldGhlciB0aGUgT1NEcyBpbiB0aGlzIGRldmljZSBzZXQgY2FuIG1vdmUgYmV0d2VlbiBub2Rlcy4gVGhpcyBpcyBpZ25vcmVkIGlmIFBsYWNlbWVudCBpcyBub3Qgc2V0IiwidHlwZSI6ImJvb2xlYW4ifSwicHJlcGFyZVBsYWNlbWVudCI6eyJkZXNjcmlwdGlvbiI6IlBsYWNlbWVudCBpcyB0aGUgcGxhY2VtZW50IGZvciBhbiBvYmplY3QiLCJwcm9wZXJ0aWVzIjp7Im5vZGVBZmZpbml0eSI6eyJkZXNjcmlwdGlvbiI6Ik5vZGVBZmZpbml0eSBpcyBhIGdyb3VwIG9mIG5vZGUgYWZmaW5pdHkgc2NoZWR1bGluZyBydWxlcyIsInByb3BlcnRpZXMiOnsicHJlZmVycmVkRHVyaW5nU2NoZWR1bGluZ0lnbm9yZWREdXJpbmdFeGVjdXRpb24iOnsiZGVzY3JpcHRpb24iOiJUaGUgc2NoZWR1bGVyIHdpbGwgcHJlZmVyIHRvIHNjaGVkdWxlIHBvZHMgdG8gbm9kZXMgdGhhdCBzYXRpc2Z5IHRoZSBhZmZpbml0eSBleHByZXNzaW9ucyBzcGVjaWZpZWQgYnkgdGhpcyBmaWVsZCwgYnV0IGl0IG1heSBjaG9vc2UgYSBub2RlIHRoYXQgdmlvbGF0ZXMgb25lIG9yIG1vcmUgb2YgdGhlIGV4cHJlc3Npb25zLiBUaGUgbm9kZSB0aGF0IGlzIG1vc3QgcHJlZmVycmVkIGlzIHRoZSBvbmUgd2l0aCB0aGUgZ3JlYXRlc3Qgc3VtIG9mIHdlaWdodHMsIGkuZS4gZm9yIGVhY2ggbm9kZSB0aGF0IG1lZXRzIGFsbCBvZiB0aGUgc2NoZWR1bGluZyByZXF1aXJlbWVudHMgKHJlc291cmNlIHJlcXVlc3QsIHJlcXVpcmVkRHVyaW5nU2NoZWR1bGluZyBhZmZpbml0eSBleHByZXNzaW9ucywgZXRjLiksIGNvbXB1dGUgYSBzdW0gYnkgaXRlcmF0aW5nIHRocm91Z2ggdGhlIGVsZW1lbnRzIG9mIHRoaXMgZmllbGQgYW5kIGFkZGluZyBcIndlaWdodFwiIHRvIHRoZSBzdW0gaWYgdGhlIG5vZGUgbWF0Y2hlcyB0aGUgY29ycmVzcG9uZGluZyBtYXRjaEV4cHJlc3Npb25zOyB0aGUgbm9kZShzKSB3aXRoIHRoZSBoaWdoZXN0IHN1bSBhcmUgdGhlIG1vc3QgcHJlZmVycmVkLiIsIml0ZW1zIjp7ImRlc2NyaXB0aW9uIjoiQW4gZW1wdHkgcHJlZmVycmVkIHNjaGVkdWxpbmcgdGVybSBtYXRjaGVzIGFsbCBvYmplY3RzIHdpdGggaW1wbGljaXQgd2VpZ2h0IDAgKGkuZS4gaXQncyBhIG5vLW9wKS4gQSBudWxsIHByZWZlcnJlZCBzY2hlZHVsaW5nIHRlcm0gbWF0Y2hlcyBubyBvYmplY3RzIChpLmUuIGlzIGFsc28gYSBuby1vcCkuIiwicHJvcGVydGllcyI6eyJwcmVmZXJlbmNlIjp7ImRlc2NyaXB0aW9uIjoiQSBub2RlIHNlbGVjdG9yIHRlcm0sIGFzc29jaWF0ZWQgd2l0aCB0aGUgY29ycmVzcG9uZGluZyB3ZWlnaHQuIiwicHJvcGVydGllcyI6eyJtYXRjaEV4cHJlc3Npb25zIjp7ImRlc2NyaXB0aW9uIjoiQSBsaXN0IG9mIG5vZGUgc2VsZWN0b3IgcmVxdWlyZW1lbnRzIGJ5IG5vZGUncyBsYWJlbHMuIiwiaXRlbXMiOnsiZGVzY3JpcHRpb24iOiJBIG5vZGUgc2VsZWN0b3IgcmVxdWlyZW1lbnQgaXMgYSBzZWxlY3RvciB0aGF0IGNvbnRhaW5zIHZhbHVlcywgYSBrZXksIGFuZCBhbiBvcGVyYXRvciB0aGF0IHJlbGF0ZXMgdGhlIGtleSBhbmQgdmFsdWVzLiIsInByb3BlcnRpZXMiOnsia2V5Ijp7ImRlc2NyaXB0aW9uIjoiVGhlIGxhYmVsIGtleSB0aGF0IHRoZSBzZWxlY3RvciBhcHBsaWVzIHRvLiIsInR5cGUiOiJzdHJpbmcifSwib3BlcmF0b3IiOnsiZGVzY3JpcHRpb24iOiJSZXByZXNlbnRzIGEga2V5J3MgcmVsYXRpb25zaGlwIHRvIGEgc2V0IG9mIHZhbHVlcy4gVmFsaWQgb3BlcmF0b3JzIGFyZSBJbiwgTm90SW4sIEV4aXN0cywgRG9lc05vdEV4aXN0LiBHdCwgYW5kIEx0LiIsInR5cGUiOiJzdHJpbmcifSwidmFsdWVzIjp7ImRlc2NyaXB0aW9uIjoiQW4gYXJyYXkgb2Ygc3RyaW5nIHZhbHVlcy4gSWYgdGhlIG9wZXJhdG9yIGlzIEluIG9yIE5vdEluLCB0aGUgdmFsdWVzIGFycmF5IG11c3QgYmUgbm9uLWVtcHR5LiBJZiB0aGUgb3BlcmF0b3IgaXMgRXhpc3RzIG9yIERvZXNOb3RFeGlzdCwgdGhlIHZhbHVlcyBhcnJheSBtdXN0IGJlIGVtcHR5LiBJZiB0aGUgb3BlcmF0b3IgaXMgR3Qgb3IgTHQsIHRoZSB2YWx1ZXMgYXJyYXkgbXVzdCBoYXZlIGEgc2luZ2xlIGVsZW1lbnQsIHdoaWNoIHdpbGwgYmUgaW50ZXJwcmV0ZWQgYXMgYW4gaW50ZWdlci4gVGhpcyBhcnJheSBpcyByZXBsYWNlZCBkdXJpbmcgYSBzdHJhdGVnaWMgbWVyZ2UgcGF0Y2guIiwiaXRlbXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjoiYXJyYXkifX0sInJlcXVpcmVkIjpbImtleSIsIm9wZXJhdG9yIl0sInR5cGUiOiJvYmplY3QifSwidHlwZSI6ImFycmF5In0sIm1hdGNoRmllbGRzIjp7ImRlc2NyaXB0aW9uIjoiQSBsaXN0IG9mIG5vZGUgc2VsZWN0b3IgcmVxdWlyZW1lbnRzIGJ5IG5vZGUncyBmaWVsZHMuIiwiaXRlbXMiOnsiZGVzY3JpcHRpb24iOiJBIG5vZGUgc2VsZWN0b3IgcmVxdWlyZW1lbnQgaXMgYSBzZWxlY3RvciB0aGF0IGNvbnRhaW5zIHZhbHVlcywgYSBrZXksIGFuZCBhbiBvcGVyYXRvciB0aGF0IHJlbGF0ZXMgdGhlIGtleSBhbmQgdmFsdWVzLiIsInByb3BlcnRpZXMiOnsia2V5Ijp7ImRlc2NyaXB0aW9uIjoiVGhlIGxhYmVsIGtleSB0aGF0IHRoZSBzZWxlY3RvciBhcHBsaWVzIHRvLiIsInR5cGUiOiJzdHJpbmcifSwib3BlcmF0b3IiOnsiZGVzY3JpcHRpb24iOiJSZXByZXNlbnRzIGEga2V5J3MgcmVsYXRpb25zaGlwIHRvIGEgc2V0IG9mIHZhbHVlcy4gVmFsaWQgb3BlcmF0b3JzIGFyZSBJbiwgTm90SW4sIEV4aXN0cywgRG9lc05vdEV4aXN0LiBHdCwgYW5kIEx0LiIsInR5cGUiOiJzdHJpbmcifSwidmFsdWVzIjp7ImRlc2NyaXB0aW9uIjoiQW4gYXJyYXkgb2Ygc3RyaW5nIHZhbHVlcy4gSWYgdGhlIG9wZXJhdG9yIGlzIEluIG9yIE5vdEluLCB0aGUgdmFsdWVzIGFycmF5IG11c3QgYmUgbm9uLWVtcHR5LiBJZiB0aGUgb3BlcmF0b3IgaXMgRXhpc3RzIG9yIERvZXNOb3RFeGlzdCwgdGhlIHZhbHVlcyBhcnJheSBtdXN0IGJlIGVtcHR5LiBJZiB0aGUgb3BlcmF0b3IgaXMgR3Qgb3IgTHQsIHRoZSB2YWx1ZXMgYXJyYXkgbXVzdCBoYXZlIGEgc2luZ2xlIGVsZW1lbnQsIHdoaWNoIHdpbGwgYmUgaW50ZXJwcmV0ZWQgYXMgYW4gaW50ZWdlci4gVGhpcyBhcnJheSBpcyByZXBsYWNlZCBkdXJpbmcgYSBzdHJhdGVnaWMgbWVyZ2UgcGF0Y2guIiwiaXRlbXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjoiYXJyYXkifX0sInJlcXVpcmVkIjpbImtleSIsIm9wZXJhdG9yIl0sInR5cGUiOiJvYmplY3QifSwidHlwZSI6ImFycmF5In19LCJ0eXBlIjoib2JqZWN0IiwieC1rdWJlcm5ldGVzLW1hcC10eXBlIjoiYXRvbWljIn0sIndlaWdodCI6eyJkZXNjcmlwdGlvbiI6IldlaWdodCBhc3NvY2lhdGVkIHdpdGggbWF0Y2hpbmcgdGhlIGNvcnJlc3BvbmRpbmcgbm9kZVNlbGVjdG9yVGVybSwgaW4gdGhlIHJhbmdlIDEtMTAwLiIsImZvcm1hdCI6ImludDMyIiwidHlwZSI6ImludGVnZXIifX0sInJlcXVpcmVkIjpbInByZWZlcmVuY2UiLCJ3ZWlnaHQiXSwidHlwZSI6Im9iamVjdCJ9LCJ0eXBlIjoiYXJyYXkifSwicmVxdWlyZWREdXJpbmdTY2hlZHVsaW5nSWdub3JlZER1cmluZ0V4ZWN1dGlvbiI6eyJkZXNjcmlwdGlvbiI6IklmIHRoZSBhZmZpbml0eSByZXF1aXJlbWVudHMgc3BlY2lmaWVkIGJ5IHRoaXMgZmllbGQgYXJlIG5vdCBtZXQgYXQgc2NoZWR1bGluZyB0aW1lLCB0aGUgcG9kIHdpbGwgbm90IGJlIHNjaGVkdWxlZCBvbnRvIHRoZSBub2RlLiBJZiB0aGUgYWZmaW5pdHkgcmVxdWlyZW1lbnRzIHNwZWNpZmllZCBieSB0aGlzIGZpZWxkIGNlYXNlIHRvIGJlIG1ldCBhdCBzb21lIHBvaW50IGR1cmluZyBwb2QgZXhlY3V0aW9uIChlLmcuIGR1ZSB0byBhbiB1cGRhdGUpLCB0aGUgc3lzdGVtIG1heSBvciBtYXkgbm90IHRyeSB0byBldmVudHVhbGx5IGV2aWN0IHRoZSBwb2QgZnJvbSBpdHMgbm9kZS4iLCJwcm9wZXJ0aWVzIjp7Im5vZGVTZWxlY3RvclRlcm1zIjp7ImRlc2NyaXB0aW9uIjoiUmVxdWlyZWQuIEEgbGlzdCBvZiBub2RlIHNlbGVjdG9yIHRlcm1zLiBUaGUgdGVybXMgYXJlIE9SZWQuIiwiaXRlbXMiOnsiZGVzY3JpcHRpb24iOiJBIG51bGwgb3IgZW1wdHkgbm9kZSBzZWxlY3RvciB0ZXJtIG1hdGNoZXMgbm8gb2JqZWN0cy4gVGhlIHJlcXVpcmVtZW50cyBvZiB0aGVtIGFyZSBBTkRlZC4gVGhlIFRvcG9sb2d5U2VsZWN0b3JUZXJtIHR5cGUgaW1wbGVtZW50cyBhIHN1YnNldCBvZiB0aGUgTm9kZVNlbGVjdG9yVGVybS4iLCJwcm9wZXJ0aWVzIjp7Im1hdGNoRXhwcmVzc2lvbnMiOnsiZGVzY3JpcHRpb24iOiJBIGxpc3Qgb2Ygbm9kZSBzZWxlY3RvciByZXF1aXJlbWVudHMgYnkgbm9kZSdzIGxhYmVscy4iLCJpdGVtcyI6eyJkZXNjcmlwdGlvbiI6IkEgbm9kZSBzZWxlY3RvciByZXF1aXJlbWVudCBpcyBhIHNlbGVjdG9yIHRoYXQgY29udGFpbnMgdmFsdWVzLCBhIGtleSwgYW5kIGFuIG9wZXJhdG9yIHRoYXQgcmVsYXRlcyB0aGUga2V5IGFuZCB2YWx1ZXMuIiwicHJvcGVydGllcyI6eyJrZXkiOnsiZGVzY3JpcHRpb24iOiJUaGUgbGFiZWwga2V5IHRoYXQgdGhlIHNlbGVjdG9yIGFwcGxpZXMgdG8uIiwidHlwZSI6InN0cmluZyJ9LCJvcGVyYXRvciI6eyJkZXNjcmlwdGlvbiI6IlJlcHJlc2VudHMgYSBrZXkncyByZWxhdGlvbnNoaXAgdG8gYSBzZXQgb2YgdmFsdWVzLiBWYWxpZCBvcGVyYXRvcnMgYXJlIEluLCBOb3RJbiwgRXhpc3RzLCBEb2VzTm90RXhpc3QuIEd0LCBhbmQgTHQuIiwidHlwZSI6InN0cmluZyJ9LCJ2YWx1ZXMiOnsiZGVzY3JpcHRpb24iOiJBbiBhcnJheSBvZiBzdHJpbmcgdmFsdWVzLiBJZiB0aGUgb3BlcmF0b3IgaXMgSW4gb3IgTm90SW4sIHRoZSB2YWx1ZXMgYXJyYXkgbXVzdCBiZSBub24tZW1wdHkuIElmIHRoZSBvcGVyYXRvciBpcyBFeGlzdHMgb3IgRG9lc05vdEV4aXN0LCB0aGUgdmFsdWVzIGFycmF5IG11c3QgYmUgZW1wdHkuIElmIHRoZSBvcGVyYXRvciBpcyBHdCBvciBMdCwgdGhlIHZhbHVlcyBhcnJheSBtdXN0IGhhdmUgYSBzaW5nbGUgZWxlbWVudCwgd2hpY2ggd2lsbCBiZSBpbnRlcnByZXRlZCBhcyBhbiBpbnRlZ2VyLiBUaGlzIGFycmF5IGlzIHJlcGxhY2VkIGR1cmluZyBhIHN0cmF0ZWdpYyBtZXJnZSBwYXRjaC4iLCJpdGVtcyI6eyJ0eXBlIjoic3RyaW5nIn0sInR5cGUiOiJhcnJheSJ9fSwicmVxdWlyZWQiOlsia2V5Iiwib3BlcmF0b3IiXSwidHlwZSI6Im9iamVjdCJ9LCJ0eXBlIjoiYXJyYXkifSwibWF0Y2hGaWVsZHMiOnsiZGVzY3JpcHRpb24iOiJBIGxpc3Qgb2Ygbm9kZSBzZWxlY3RvciByZXF1aXJlbWVudHMgYnkgbm9kZSdzIGZpZWxkcy4iLCJpdGVtcyI6eyJkZXNjcmlwdGlvbiI6IkEgbm9kZSBzZWxlY3RvciByZXF1aXJlbWVudCBpcyBhIHNlbGVjdG9yIHRoYXQgY29udGFpbnMgdmFsdWVzLCBhIGtleSwgYW5kIGFuIG9wZXJhdG9yIHRoYXQgcmVsYXRlcyB0aGUga2V5IGFuZCB2YWx1ZXMuIiwicHJvcGVydGllcyI6eyJrZXkiOnsiZGVzY3JpcHRpb24iOiJUaGUgbGFiZWwga2V5IHRoYXQgdGhlIHNlbGVjdG9yIGFwcGxpZXMgdG8uIiwidHlwZSI6InN0cmluZyJ9LCJvcGVyYXRvciI6eyJkZXNjcmlwdGlvbiI6IlJlcHJlc2VudHMgYSBrZXkncyByZWxhdGlvbnNoaXAgdG8gYSBzZXQgb2YgdmFsdWVzLiBWYWxpZCBvcGVyYXRvcnMgYXJlIEluLCBOb3RJbiwgRXhpc3RzLCBEb2VzTm90RXhpc3QuIEd0LCBhbmQgTHQuIiwidHlwZSI6InN0cmluZyJ9LCJ2YWx1ZXMiOnsiZGVzY3JpcHRpb24iOiJBbiBhcnJheSBvZiBzdHJpbmcgdmFsdWVzLiBJZiB0aGUgb3BlcmF0b3IgaXMgSW4gb3IgTm90SW4sIHRoZSB2YWx1ZXMgYXJyYXkgbXVzdCBiZSBub24tZW1wdHkuIElmIHRoZSBvcGVyYXRvciBpcyBFeGlzdHMgb3IgRG9lc05vdEV4aXN0LCB0aGUgdmFsdWVzIGFycmF5IG11c3QgYmUgZW1wdHkuIElmIHRoZSBvcGVyYXRvciBpcyBHdCBvciBMdCwgdGhlIHZhbHVlcyBhcnJheSBtdXN0IGhhdmUgYSBzaW5nbGUgZWxlbWVudCwgd2hpY2ggd2lsbCBiZSBpbnRlcnByZXRlZCBhcyBhbiBpbnRlZ2VyLiBUaGlzIGFycmF5IGlzIHJlcGxhY2VkIGR1cmluZyBhIHN0cmF0ZWdpYyBtZXJnZSBwYXRjaC4iLCJpdGVtcyI6eyJ0eXBlIjoic3RyaW5nIn0sInR5cGUiOiJhcnJheSJ9fSwicmVxdWlyZWQiOlsia2V5Iiwib3BlcmF0b3IiXSwidHlwZSI6Im9iamVjdCJ9LCJ0eXBlIjoiYXJyYXkifX0sInR5cGUiOiJvYmplY3QiLCJ4LWt1YmVybmV0ZXMtbWFwLXR5cGUiOiJhdG9taWMifSwidHlwZSI6ImFycmF5In19LCJyZXF1aXJlZCI6WyJub2RlU2VsZWN0b3JUZXJtcyJdLCJ0eXBlIjoib2JqZWN0IiwieC1rdWJlcm5ldGVzLW1hcC10eXBlIjoiYXRvbWljIn19LCJ0eXBlIjoib2JqZWN0In0sInBvZEFmZmluaXR5Ijp7ImRlc2NyaXB0aW9uIjoiUG9kQWZmaW5pdHkgaXMgYSBncm91cCBvZiBpbnRlciBwb2QgYWZmaW5pdHkgc2NoZWR1bGluZyBydWxlcyIsInByb3BlcnRpZXMiOnsicHJlZmVycmVkRHVyaW5nU2NoZWR1bGluZ0lnbm9yZWREdXJpbmdFeGVjdXRpb24iOnsiZGVzY3JpcHRpb24iOiJUaGUgc2NoZWR1bGVyIHdpbGwgcHJlZmVyIHRvIHNjaGVkdWxlIHBvZHMgdG8gbm9kZXMgdGhhdCBzYXRpc2Z5IHRoZSBhZmZpbml0eSBleHByZXNzaW9ucyBzcGVjaWZpZWQgYnkgdGhpcyBmaWVsZCwgYnV0IGl0IG1heSBjaG9vc2UgYSBub2RlIHRoYXQgdmlvbGF0ZXMgb25lIG9yIG1vcmUgb2YgdGhlIGV4cHJlc3Npb25zLiBUaGUgbm9kZSB0aGF0IGlzIG1vc3QgcHJlZmVycmVkIGlzIHRoZSBvbmUgd2l0aCB0aGUgZ3JlYXRlc3Qgc3VtIG9mIHdlaWdodHMsIGkuZS4gZm9yIGVhY2ggbm9kZSB0aGF0IG1lZXRzIGFsbCBvZiB0aGUgc2NoZWR1bGluZyByZXF1aXJlbWVudHMgKHJlc291cmNlIHJlcXVlc3QsIHJlcXVpcmVkRHVyaW5nU2NoZWR1bGluZyBhZmZpbml0eSBleHByZXNzaW9ucywgZXRjLiksIGNvbXB1dGUgYSBzdW0gYnkgaXRlcmF0aW5nIHRocm91Z2ggdGhlIGVsZW1lbnRzIG9mIHRoaXMgZmllbGQgYW5kIGFkZGluZyBcIndlaWdodFwiIHRvIHRoZSBzdW0gaWYgdGhlIG5vZGUgaGFzIHBvZHMgd2hpY2ggbWF0Y2hlcyB0aGUgY29ycmVzcG9uZGluZyBwb2RBZmZpbml0eVRlcm07IHRoZSBub2RlKHMpIHdpdGggdGhlIGhpZ2hlc3Qgc3VtIGFyZSB0aGUgbW9zdCBwcmVmZXJyZWQuIiwiaXRlbXMiOnsiZGVzY3JpcHRpb24iOiJUaGUgd2VpZ2h0cyBvZiBhbGwgb2YgdGhlIG1hdGNoZWQgV2VpZ2h0ZWRQb2RBZmZpbml0eVRlcm0gZmllbGRzIGFyZSBhZGRlZCBwZXItbm9kZSB0byBmaW5kIHRoZSBtb3N0IHByZWZlcnJlZCBub2RlKHMpIiwicHJvcGVydGllcyI6eyJwb2RBZmZpbml0eVRlcm0iOnsiZGVzY3JpcHRpb24iOiJSZXF1aXJlZC4gQSBwb2QgYWZmaW5pdHkgdGVybSwgYXNzb2NpYXRlZCB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIHdlaWdodC4iLCJwcm9wZXJ0aWVzIjp7ImxhYmVsU2VsZWN0b3IiOnsiZGVzY3JpcHRpb24iOiJBIGxhYmVsIHF1ZXJ5IG92ZXIgYSBzZXQgb2YgcmVzb3VyY2VzLCBpbiB0aGlzIGNhc2UgcG9kcy4gSWYgaXQncyBudWxsLCB0aGlzIFBvZEFmZmluaXR5VGVybSBtYXRjaGVzIHdpdGggbm8gUG9kcy4iLCJwcm9wZXJ0aWVzIjp7Im1hdGNoRXhwcmVzc2lvbnMiOnsiZGVzY3JpcHRpb24iOiJtYXRjaEV4cHJlc3Npb25zIGlzIGEgbGlzdCBvZiBsYWJlbCBzZWxlY3RvciByZXF1aXJlbWVudHMuIFRoZSByZXF1aXJlbWVudHMgYXJlIEFORGVkLiIsIml0ZW1zIjp7ImRlc2NyaXB0aW9uIjoiQSBsYWJlbCBzZWxlY3RvciByZXF1aXJlbWVudCBpcyBhIHNlbGVjdG9yIHRoYXQgY29udGFpbnMgdmFsdWVzLCBhIGtleSwgYW5kIGFuIG9wZXJhdG9yIHRoYXQgcmVsYXRlcyB0aGUga2V5IGFuZCB2YWx1ZXMuIiwicHJvcGVydGllcyI6eyJrZXkiOnsiZGVzY3JpcHRpb24iOiJrZXkgaXMgdGhlIGxhYmVsIGtleSB0aGF0IHRoZSBzZWxlY3RvciBhcHBsaWVzIHRvLiIsInR5cGUiOiJzdHJpbmcifSwib3BlcmF0b3IiOnsiZGVzY3JpcHRpb24iOiJvcGVyYXRvciByZXByZXNlbnRzIGEga2V5J3MgcmVsYXRpb25zaGlwIHRvIGEgc2V0IG9mIHZhbHVlcy4gVmFsaWQgb3BlcmF0b3JzIGFyZSBJbiwgTm90SW4sIEV4aXN0cyBhbmQgRG9lc05vdEV4aXN0LiIsInR5cGUiOiJzdHJpbmcifSwidmFsdWVzIjp7ImRlc2NyaXB0aW9uIjoidmFsdWVzIGlzIGFuIGFycmF5IG9mIHN0cmluZyB2YWx1ZXMuIElmIHRoZSBvcGVyYXRvciBpcyBJbiBvciBOb3RJbiwgdGhlIHZhbHVlcyBhcnJheSBtdXN0IGJlIG5vbi1lbXB0eS4gSWYgdGhlIG9wZXJhdG9yIGlzIEV4aXN0cyBvciBEb2VzTm90RXhpc3QsIHRoZSB2YWx1ZXMgYXJyYXkgbXVzdCBiZSBlbXB0eS4gVGhpcyBhcnJheSBpcyByZXBsYWNlZCBkdXJpbmcgYSBzdHJhdGVnaWMgbWVyZ2UgcGF0Y2guIiwiaXRlbXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjoiYXJyYXkifX0sInJlcXVpcmVkIjpbImtleSIsIm9wZXJhdG9yIl0sInR5cGUiOiJvYmplY3QifSwidHlwZSI6ImFycmF5In0sIm1hdGNoTGFiZWxzIjp7ImFkZGl0aW9uYWxQcm9wZXJ0aWVzIjp7InR5cGUiOiJzdHJpbmcifSwiZGVzY3JpcHRpb24iOiJtYXRjaExhYmVscyBpcyBhIG1hcCBvZiB7a2V5LHZhbHVlfSBwYWlycy4gQSBzaW5nbGUge2tleSx2YWx1ZX0gaW4gdGhlIG1hdGNoTGFiZWxzIG1hcCBpcyBlcXVpdmFsZW50IHRvIGFuIGVsZW1lbnQgb2YgbWF0Y2hFeHByZXNzaW9ucywgd2hvc2Uga2V5IGZpZWxkIGlzIFwia2V5XCIsIHRoZSBvcGVyYXRvciBpcyBcIkluXCIsIGFuZCB0aGUgdmFsdWVzIGFycmF5IGNvbnRhaW5zIG9ubHkgXCJ2YWx1ZVwiLiBUaGUgcmVxdWlyZW1lbnRzIGFyZSBBTkRlZC4iLCJ0eXBlIjoib2JqZWN0In19LCJ0eXBlIjoib2JqZWN0IiwieC1rdWJlcm5ldGVzLW1hcC10eXBlIjoiYXRvbWljIn0sIm1hdGNoTGFiZWxLZXlzIjp7ImRlc2NyaXB0aW9uIjoiTWF0Y2hMYWJlbEtleXMgaXMgYSBzZXQgb2YgcG9kIGxhYmVsIGtleXMgdG8gc2VsZWN0IHdoaWNoIHBvZHMgd2lsbCBiZSB0YWtlbiBpbnRvIGNvbnNpZGVyYXRpb24uIFRoZSBrZXlzIGFyZSB1c2VkIHRvIGxvb2t1cCB2YWx1ZXMgZnJvbSB0aGUgaW5jb21pbmcgcG9kIGxhYmVscywgdGhvc2Uga2V5LXZhbHVlIGxhYmVscyBhcmUgbWVyZ2VkIHdpdGggYExhYmVsU2VsZWN0b3JgIGFzIGBrZXkgaW4gKHZhbHVlKWAgdG8gc2VsZWN0IHRoZSBncm91cCBvZiBleGlzdGluZyBwb2RzIHdoaWNoIHBvZHMgd2lsbCBiZSB0YWtlbiBpbnRvIGNvbnNpZGVyYXRpb24gZm9yIHRoZSBpbmNvbWluZyBwb2QncyBwb2QgKGFudGkpIGFmZmluaXR5LiBLZXlzIHRoYXQgZG9uJ3QgZXhpc3QgaW4gdGhlIGluY29taW5nIHBvZCBsYWJlbHMgd2lsbCBiZSBpZ25vcmVkLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBlbXB0eS4gVGhlIHNhbWUga2V5IGlzIGZvcmJpZGRlbiB0byBleGlzdCBpbiBib3RoIE1hdGNoTGFiZWxLZXlzIGFuZCBMYWJlbFNlbGVjdG9yLiBBbHNvLCBNYXRjaExhYmVsS2V5cyBjYW5ub3QgYmUgc2V0IHdoZW4gTGFiZWxTZWxlY3RvciBpc24ndCBzZXQuIFRoaXMgaXMgYW4gYWxwaGEgZmllbGQgYW5kIHJlcXVpcmVzIGVuYWJsaW5nIE1hdGNoTGFiZWxLZXlzSW5Qb2RBZmZpbml0eSBmZWF0dXJlIGdhdGUuIiwiaXRlbXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjoiYXJyYXkiLCJ4LWt1YmVybmV0ZXMtbGlzdC10eXBlIjoiYXRvbWljIn0sIm1pc21hdGNoTGFiZWxLZXlzIjp7ImRlc2NyaXB0aW9uIjoiTWlzbWF0Y2hMYWJlbEtleXMgaXMgYSBzZXQgb2YgcG9kIGxhYmVsIGtleXMgdG8gc2VsZWN0IHdoaWNoIHBvZHMgd2lsbCBiZSB0YWtlbiBpbnRvIGNvbnNpZGVyYXRpb24uIFRoZSBrZXlzIGFyZSB1c2VkIHRvIGxvb2t1cCB2YWx1ZXMgZnJvbSB0aGUgaW5jb21pbmcgcG9kIGxhYmVscywgdGhvc2Uga2V5LXZhbHVlIGxhYmVscyBhcmUgbWVyZ2VkIHdpdGggYExhYmVsU2VsZWN0b3JgIGFzIGBrZXkgbm90aW4gKHZhbHVlKWAgdG8gc2VsZWN0IHRoZSBncm91cCBvZiBleGlzdGluZyBwb2RzIHdoaWNoIHBvZHMgd2lsbCBiZSB0YWtlbiBpbnRvIGNvbnNpZGVyYXRpb24gZm9yIHRoZSBpbmNvbWluZyBwb2QncyBwb2QgKGFudGkpIGFmZmluaXR5LiBLZXlzIHRoYXQgZG9uJ3QgZXhpc3QgaW4gdGhlIGluY29taW5nIHBvZCBsYWJlbHMgd2lsbCBiZSBpZ25vcmVkLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBlbXB0eS4gVGhlIHNhbWUga2V5IGlzIGZvcmJpZGRlbiB0byBleGlzdCBpbiBib3RoIE1pc21hdGNoTGFiZWxLZXlzIGFuZCBMYWJlbFNlbGVjdG9yLiBBbHNvLCBNaXNtYXRjaExhYmVsS2V5cyBjYW5ub3QgYmUgc2V0IHdoZW4gTGFiZWxTZWxlY3RvciBpc24ndCBzZXQuIFRoaXMgaXMgYW4gYWxwaGEgZmllbGQgYW5kIHJlcXVpcmVzIGVuYWJsaW5nIE1hdGNoTGFiZWxLZXlzSW5Qb2RBZmZpbml0eSBmZWF0dXJlIGdhdGUuIiwiaXRlbXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjoiYXJyYXkiLCJ4LWt1YmVybmV0ZXMtbGlzdC10eXBlIjoiYXRvbWljIn0sIm5hbWVzcGFjZVNlbGVjdG9yIjp7ImRlc2NyaXB0aW9uIjoiQSBsYWJlbCBxdWVyeSBvdmVyIHRoZSBzZXQgb2YgbmFtZXNwYWNlcyB0aGF0IHRoZSB0ZXJtIGFwcGxpZXMgdG8uIFRoZSB0ZXJtIGlzIGFwcGxpZWQgdG8gdGhlIHVuaW9uIG9mIHRoZSBuYW1lc3BhY2VzIHNlbGVjdGVkIGJ5IHRoaXMgZmllbGQgYW5kIHRoZSBvbmVzIGxpc3RlZCBpbiB0aGUgbmFtZXNwYWNlcyBmaWVsZC4gbnVsbCBzZWxlY3RvciBhbmQgbnVsbCBvciBlbXB0eSBuYW1lc3BhY2VzIGxpc3QgbWVhbnMgXCJ0aGlzIHBvZCdzIG5hbWVzcGFjZVwiLiBBbiBlbXB0eSBzZWxlY3RvciAoe30pIG1hdGNoZXMgYWxsIG5hbWVzcGFjZXMuIiwicHJvcGVydGllcyI6eyJtYXRjaEV4cHJlc3Npb25zIjp7ImRlc2NyaXB0aW9uIjoibWF0Y2hFeHByZXNzaW9ucyBpcyBhIGxpc3Qgb2YgbGFiZWwgc2VsZWN0b3IgcmVxdWlyZW1lbnRzLiBUaGUgcmVxdWlyZW1lbnRzIGFyZSBBTkRlZC4iLCJpdGVtcyI6eyJkZXNjcmlwdGlvbiI6IkEgbGFiZWwgc2VsZWN0b3IgcmVxdWlyZW1lbnQgaXMgYSBzZWxlY3RvciB0aGF0IGNvbnRhaW5zIHZhbHVlcywgYSBrZXksIGFuZCBhbiBvcGVyYXRvciB0aGF0IHJlbGF0ZXMgdGhlIGtleSBhbmQgdmFsdWVzLiIsInByb3BlcnRpZXMiOnsia2V5Ijp7ImRlc2NyaXB0aW9uIjoia2V5IGlzIHRoZSBsYWJlbCBrZXkgdGhhdCB0aGUgc2VsZWN0b3IgYXBwbGllcyB0by4iLCJ0eXBlIjoic3RyaW5nIn0sIm9wZXJhdG9yIjp7ImRlc2NyaXB0aW9uIjoib3BlcmF0b3IgcmVwcmVzZW50cyBhIGtleSdzIHJlbGF0aW9uc2hpcCB0byBhIHNldCBvZiB2YWx1ZXMuIFZhbGlkIG9wZXJhdG9ycyBhcmUgSW4sIE5vdEluLCBFeGlzdHMgYW5kIERvZXNOb3RFeGlzdC4iLCJ0eXBlIjoic3RyaW5nIn0sInZhbHVlcyI6eyJkZXNjcmlwdGlvbiI6InZhbHVlcyBpcyBhbiBhcnJheSBvZiBzdHJpbmcgdmFsdWVzLiBJZiB0aGUgb3BlcmF0b3IgaXMgSW4gb3IgTm90SW4sIHRoZSB2YWx1ZXMgYXJyYXkgbXVzdCBiZSBub24tZW1wdHkuIElmIHRoZSBvcGVyYXRvciBpcyBFeGlzdHMgb3IgRG9lc05vdEV4aXN0LCB0aGUgdmFsdWVzIGFycmF5IG11c3QgYmUgZW1wdHkuIFRoaXMgYXJyYXkgaXMgcmVwbGFjZWQgZHVyaW5nIGEgc3RyYXRlZ2ljIG1lcmdlIHBhdGNoLiIsIml0ZW1zIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6ImFycmF5In19LCJyZXF1aXJlZCI6WyJrZXkiLCJvcGVyYXRvciJdLCJ0eXBlIjoib2JqZWN0In0sInR5cGUiOiJhcnJheSJ9LCJtYXRjaExhYmVscyI6eyJhZGRpdGlvbmFsUHJvcGVydGllcyI6eyJ0eXBlIjoic3RyaW5nIn0sImRlc2NyaXB0aW9uIjoibWF0Y2hMYWJlbHMgaXMgYSBtYXAgb2Yge2tleSx2YWx1ZX0gcGFpcnMuIEEgc2luZ2xlIHtrZXksdmFsdWV9IGluIHRoZSBtYXRjaExhYmVscyBtYXAgaXMgZXF1aXZhbGVudCB0byBhbiBlbGVtZW50IG9mIG1hdGNoRXhwcmVzc2lvbnMsIHdob3NlIGtleSBmaWVsZCBpcyBcImtleVwiLCB0aGUgb3BlcmF0b3IgaXMgXCJJblwiLCBhbmQgdGhlIHZhbHVlcyBhcnJheSBjb250YWlucyBvbmx5IFwidmFsdWVcIi4gVGhlIHJlcXVpcmVtZW50cyBhcmUgQU5EZWQuIiwidHlwZSI6Im9iamVjdCJ9fSwidHlwZSI6Im9iamVjdCIsIngta3ViZXJuZXRlcy1tYXAtdHlwZSI6ImF0b21pYyJ9LCJuYW1lc3BhY2VzIjp7ImRlc2NyaXB0aW9uIjoibmFtZXNwYWNlcyBzcGVjaWZpZXMgYSBzdGF0aWMgbGlzdCBvZiBuYW1lc3BhY2UgbmFtZXMgdGhhdCB0aGUgdGVybSBhcHBsaWVzIHRvLiBUaGUgdGVybSBpcyBhcHBsaWVkIHRvIHRoZSB1bmlvbiBvZiB0aGUgbmFtZXNwYWNlcyBsaXN0ZWQgaW4gdGhpcyBmaWVsZCBhbmQgdGhlIG9uZXMgc2VsZWN0ZWQgYnkgbmFtZXNwYWNlU2VsZWN0b3IuIG51bGwgb3IgZW1wdHkgbmFtZXNwYWNlcyBsaXN0IGFuZCBudWxsIG5hbWVzcGFjZVNlbGVjdG9yIG1lYW5zIFwidGhpcyBwb2QncyBuYW1lc3BhY2VcIi4iLCJpdGVtcyI6eyJ0eXBlIjoic3RyaW5nIn0sInR5cGUiOiJhcnJheSJ9LCJ0b3BvbG9neUtleSI6eyJkZXNjcmlwdGlvbiI6IlRoaXMgcG9kIHNob3VsZCBiZSBjby1sb2NhdGVkIChhZmZpbml0eSkgb3Igbm90IGNvLWxvY2F0ZWQgKGFudGktYWZmaW5pdHkpIHdpdGggdGhlIHBvZHMgbWF0Y2hpbmcgdGhlIGxhYmVsU2VsZWN0b3IgaW4gdGhlIHNwZWNpZmllZCBuYW1lc3BhY2VzLCB3aGVyZSBjby1sb2NhdGVkIGlzIGRlZmluZWQgYXMgcnVubmluZyBvbiBhIG5vZGUgd2hvc2UgdmFsdWUgb2YgdGhlIGxhYmVsIHdpdGgga2V5IHRvcG9sb2d5S2V5IG1hdGNoZXMgdGhhdCBvZiBhbnkgbm9kZSBvbiB3aGljaCBhbnkgb2YgdGhlIHNlbGVjdGVkIHBvZHMgaXMgcnVubmluZy4gRW1wdHkgdG9wb2xvZ3lLZXkgaXMgbm90IGFsbG93ZWQuIiwidHlwZSI6InN0cmluZyJ9fSwicmVxdWlyZWQiOlsidG9wb2xvZ3lLZXkiXSwidHlwZSI6Im9iamVjdCJ9LCJ3ZWlnaHQiOnsiZGVzY3JpcHRpb24iOiJ3ZWlnaHQgYXNzb2NpYXRlZCB3aXRoIG1hdGNoaW5nIHRoZSBjb3JyZXNwb25kaW5nIHBvZEFmZmluaXR5VGVybSwgaW4gdGhlIHJhbmdlIDEtMTAwLiIsImZvcm1hdCI6ImludDMyIiwidHlwZSI6ImludGVnZXIifX0sInJlcXVpcmVkIjpbInBvZEFmZmluaXR5VGVybSIsIndlaWdodCJdLCJ0eXBlIjoib2JqZWN0In0sInR5cGUiOiJhcnJheSJ9LCJyZXF1aXJlZER1cmluZ1NjaGVkdWxpbmdJZ25vcmVkRHVyaW5nRXhlY3V0aW9uIjp7ImRlc2NyaXB0aW9uIjoiSWYgdGhlIGFmZmluaXR5IHJlcXVpcmVtZW50cyBzcGVjaWZpZWQgYnkgdGhpcyBmaWVsZCBhcmUgbm90IG1ldCBhdCBzY2hlZHVsaW5nIHRpbWUsIHRoZSBwb2Qgd2lsbCBub3QgYmUgc2NoZWR1bGVkIG9udG8gdGhlIG5vZGUuIElmIHRoZSBhZmZpbml0eSByZXF1aXJlbWVudHMgc3BlY2lmaWVkIGJ5IHRoaXMgZmllbGQgY2Vhc2UgdG8gYmUgbWV0IGF0IHNvbWUgcG9pbnQgZHVyaW5nIHBvZCBleGVjdXRpb24gKGUuZy4gZHVlIHRvIGEgcG9kIGxhYmVsIHVwZGF0ZSksIHRoZSBzeXN0ZW0gbWF5IG9yIG1heSBub3QgdHJ5IHRvIGV2ZW50dWFsbHkgZXZpY3QgdGhlIHBvZCBmcm9tIGl0cyBub2RlLiBXaGVuIHRoZXJlIGFyZSBtdWx0aXBsZSBlbGVtZW50cywgdGhlIGxpc3RzIG9mIG5vZGVzIGNvcnJlc3BvbmRpbmcgdG8gZWFjaCBwb2RBZmZpbml0eVRlcm0gYXJlIGludGVyc2VjdGVkLCBpLmUuIGFsbCB0ZXJtcyBtdXN0IGJlIHNhdGlzZmllZC4iLCJpdGVtcyI6eyJkZXNjcmlwdGlvbiI6IkRlZmluZXMgYSBzZXQgb2YgcG9kcyAobmFtZWx5IHRob3NlIG1hdGNoaW5nIHRoZSBsYWJlbFNlbGVjdG9yIHJlbGF0aXZlIHRvIHRoZSBnaXZlbiBuYW1lc3BhY2UocykpIHRoYXQgdGhpcyBwb2Qgc2hvdWxkIGJlIGNvLWxvY2F0ZWQgKGFmZmluaXR5KSBvciBub3QgY28tbG9jYXRlZCAoYW50aS1hZmZpbml0eSkgd2l0aCwgd2hlcmUgY28tbG9jYXRlZCBpcyBkZWZpbmVkIGFzIHJ1bm5pbmcgb24gYSBub2RlIHdob3NlIHZhbHVlIG9mIHRoZSBsYWJlbCB3aXRoIGtleSBcdTAwM2N0b3BvbG9neUtleVx1MDAzZSBtYXRjaGVzIHRoYXQgb2YgYW55IG5vZGUgb24gd2hpY2ggYSBwb2Qgb2YgdGhlIHNldCBvZiBwb2RzIGlzIHJ1bm5pbmciLCJwcm9wZXJ0aWVzIjp7ImxhYmVsU2VsZWN0b3IiOnsiZGVzY3JpcHRpb24iOiJBIGxhYmVsIHF1ZXJ5IG92ZXIgYSBzZXQgb2YgcmVzb3VyY2VzLCBpbiB0aGlzIGNhc2UgcG9kcy4gSWYgaXQncyBudWxsLCB0aGlzIFBvZEFmZmluaXR5VGVybSBtYXRjaGVzIHdpdGggbm8gUG9kcy4iLCJwcm9wZXJ0aWVzIjp7Im1hdGNoRXhwcmVzc2lvbnMiOnsiZGVzY3JpcHRpb24iOiJtYXRjaEV4cHJlc3Npb25zIGlzIGEgbGlzdCBvZiBsYWJlbCBzZWxlY3RvciByZXF1aXJlbWVudHMuIFRoZSByZXF1aXJlbWVudHMgYXJlIEFORGVkLiIsIml0ZW1zIjp7ImRlc2NyaXB0aW9uIjoiQSBsYWJlbCBzZWxlY3RvciByZXF1aXJlbWVudCBpcyBhIHNlbGVjdG9yIHRoYXQgY29udGFpbnMgdmFsdWVzLCBhIGtleSwgYW5kIGFuIG9wZXJhdG9yIHRoYXQgcmVsYXRlcyB0aGUga2V5IGFuZCB2YWx1ZXMuIiwicHJvcGVydGllcyI6eyJrZXkiOnsiZGVzY3JpcHRpb24iOiJrZXkgaXMgdGhlIGxhYmVsIGtleSB0aGF0IHRoZSBzZWxlY3RvciBhcHBsaWVzIHRvLiIsInR5cGUiOiJzdHJpbmcifSwib3BlcmF0b3IiOnsiZGVzY3JpcHRpb24iOiJvcGVyYXRvciByZXByZXNlbnRzIGEga2V5J3MgcmVsYXRpb25zaGlwIHRvIGEgc2V0IG9mIHZhbHVlcy4gVmFsaWQgb3BlcmF0b3JzIGFyZSBJbiwgTm90SW4sIEV4aXN0cyBhbmQgRG9lc05vdEV4aXN0LiIsInR5cGUiOiJzdHJpbmcifSwidmFsdWVzIjp7ImRlc2NyaXB0aW9uIjoidmFsdWVzIGlzIGFuIGFycmF5IG9mIHN0cmluZyB2YWx1ZXMuIElmIHRoZSBvcGVyYXRvciBpcyBJbiBvciBOb3RJbiwgdGhlIHZhbHVlcyBhcnJheSBtdXN0IGJlIG5vbi1lbXB0eS4gSWYgdGhlIG9wZXJhdG9yIGlzIEV4aXN0cyBvciBEb2VzTm90RXhpc3QsIHRoZSB2YWx1ZXMgYXJyYXkgbXVzdCBiZSBlbXB0eS4gVGhpcyBhcnJheSBpcyByZXBsYWNlZCBkdXJpbmcgYSBzdHJhdGVnaWMgbWVyZ2UgcGF0Y2guIiwiaXRlbXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjoiYXJyYXkifX0sInJlcXVpcmVkIjpbImtleSIsIm9wZXJhdG9yIl0sInR5cGUiOiJvYmplY3QifSwidHlwZSI6ImFycmF5In0sIm1hdGNoTGFiZWxzIjp7ImFkZGl0aW9uYWxQcm9wZXJ0aWVzIjp7InR5cGUiOiJzdHJpbmcifSwiZGVzY3JpcHRpb24iOiJtYXRjaExhYmVscyBpcyBhIG1hcCBvZiB7a2V5LHZhbHVlfSBwYWlycy4gQSBzaW5nbGUge2tleSx2YWx1ZX0gaW4gdGhlIG1hdGNoTGFiZWxzIG1hcCBpcyBlcXVpdmFsZW50IHRvIGFuIGVsZW1lbnQgb2YgbWF0Y2hFeHByZXNzaW9ucywgd2hvc2Uga2V5IGZpZWxkIGlzIFwia2V5XCIsIHRoZSBvcGVyYXRvciBpcyBcIkluXCIsIGFuZCB0aGUgdmFsdWVzIGFycmF5IGNvbnRhaW5zIG9ubHkgXCJ2YWx1ZVwiLiBUaGUgcmVxdWlyZW1lbnRzIGFyZSBBTkRlZC4iLCJ0eXBlIjoib2JqZWN0In19LCJ0eXBlIjoib2JqZWN0IiwieC1rdWJlcm5ldGVzLW1hcC10eXBlIjoiYXRvbWljIn0sIm1hdGNoTGFiZWxLZXlzIjp7ImRlc2NyaXB0aW9uIjoiTWF0Y2hMYWJlbEtleXMgaXMgYSBzZXQgb2YgcG9kIGxhYmVsIGtleXMgdG8gc2VsZWN0IHdoaWNoIHBvZHMgd2lsbCBiZSB0YWtlbiBpbnRvIGNvbnNpZGVyYXRpb24uIFRoZSBrZXlzIGFyZSB1c2VkIHRvIGxvb2t1cCB2YWx1ZXMgZnJvbSB0aGUgaW5jb21pbmcgcG9kIGxhYmVscywgdGhvc2Uga2V5LXZhbHVlIGxhYmVscyBhcmUgbWVyZ2VkIHdpdGggYExhYmVsU2VsZWN0b3JgIGFzIGBrZXkgaW4gKHZhbHVlKWAgdG8gc2VsZWN0IHRoZSBncm91cCBvZiBleGlzdGluZyBwb2RzIHdoaWNoIHBvZHMgd2lsbCBiZSB0YWtlbiBpbnRvIGNvbnNpZGVyYXRpb24gZm9yIHRoZSBpbmNvbWluZyBwb2QncyBwb2QgKGFudGkpIGFmZmluaXR5LiBLZXlzIHRoYXQgZG9uJ3QgZXhpc3QgaW4gdGhlIGluY29taW5nIHBvZCBsYWJlbHMgd2lsbCBiZSBpZ25vcmVkLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBlbXB0eS4gVGhlIHNhbWUga2V5IGlzIGZvcmJpZGRlbiB0byBleGlzdCBpbiBib3RoIE1hdGNoTGFiZWxLZXlzIGFuZCBMYWJlbFNlbGVjdG9yLiBBbHNvLCBNYXRjaExhYmVsS2V5cyBjYW5ub3QgYmUgc2V0IHdoZW4gTGFiZWxTZWxlY3RvciBpc24ndCBzZXQuIFRoaXMgaXMgYW4gYWxwaGEgZmllbGQgYW5kIHJlcXVpcmVzIGVuYWJsaW5nIE1hdGNoTGFiZWxLZXlzSW5Qb2RBZmZpbml0eSBmZWF0dXJlIGdhdGUuIiwiaXRlbXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjoiYXJyYXkiLCJ4LWt1YmVybmV0ZXMtbGlzdC10eXBlIjoiYXRvbWljIn0sIm1pc21hdGNoTGFiZWxLZXlzIjp7ImRlc2NyaXB0aW9uIjoiTWlzbWF0Y2hMYWJlbEtleXMgaXMgYSBzZXQgb2YgcG9kIGxhYmVsIGtleXMgdG8gc2VsZWN0IHdoaWNoIHBvZHMgd2lsbCBiZSB0YWtlbiBpbnRvIGNvbnNpZGVyYXRpb24uIFRoZSBrZXlzIGFyZSB1c2VkIHRvIGxvb2t1cCB2YWx1ZXMgZnJvbSB0aGUgaW5jb21pbmcgcG9kIGxhYmVscywgdGhvc2Uga2V5LXZhbHVlIGxhYmVscyBhcmUgbWVyZ2VkIHdpdGggYExhYmVsU2VsZWN0b3JgIGFzIGBrZXkgbm90aW4gKHZhbHVlKWAgdG8gc2VsZWN0IHRoZSBncm91cCBvZiBleGlzdGluZyBwb2RzIHdoaWNoIHBvZHMgd2lsbCBiZSB0YWtlbiBpbnRvIGNvbnNpZGVyYXRpb24gZm9yIHRoZSBpbmNvbWluZyBwb2QncyBwb2QgKGFudGkpIGFmZmluaXR5LiBLZXlzIHRoYXQgZG9uJ3QgZXhpc3QgaW4gdGhlIGluY29taW5nIHBvZCBsYWJlbHMgd2lsbCBiZSBpZ25vcmVkLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBlbXB0eS4gVGhlIHNhbWUga2V5IGlzIGZvcmJpZGRlbiB0byBleGlzdCBpbiBib3RoIE1pc21hdGNoTGFiZWxLZXlzIGFuZCBMYWJlbFNlbGVjdG9yLiBBbHNvLCBNaXNtYXRjaExhYmVsS2V5cyBjYW5ub3QgYmUgc2V0IHdoZW4gTGFiZWxTZWxlY3RvciBpc24ndCBzZXQuIFRoaXMgaXMgYW4gYWxwaGEgZmllbGQgYW5kIHJlcXVpcmVzIGVuYWJsaW5nIE1hdGNoTGFiZWxLZXlzSW5Qb2RBZmZpbml0eSBmZWF0dXJlIGdhdGUuIiwiaXRlbXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjoiYXJyYXkiLCJ4LWt1YmVybmV0ZXMtbGlzdC10eXBlIjoiYXRvbWljIn0sIm5hbWVzcGFjZVNlbGVjdG9yIjp7ImRlc2NyaXB0aW9uIjoiQSBsYWJlbCBxdWVyeSBvdmVyIHRoZSBzZXQgb2YgbmFtZXNwYWNlcyB0aGF0IHRoZSB0ZXJtIGFwcGxpZXMgdG8uIFRoZSB0ZXJtIGlzIGFwcGxpZWQgdG8gdGhlIHVuaW9uIG9mIHRoZSBuYW1lc3BhY2VzIHNlbGVjdGVkIGJ5IHRoaXMgZmllbGQgYW5kIHRoZSBvbmVzIGxpc3RlZCBpbiB0aGUgbmFtZXNwYWNlcyBmaWVsZC4gbnVsbCBzZWxlY3RvciBhbmQgbnVsbCBvciBlbXB0eSBuYW1lc3BhY2VzIGxpc3QgbWVhbnMgXCJ0aGlzIHBvZCdzIG5hbWVzcGFjZVwiLiBBbiBlbXB0eSBzZWxlY3RvciAoe30pIG1hdGNoZXMgYWxsIG5hbWVzcGFjZXMuIiwicHJvcGVydGllcyI6eyJtYXRjaEV4cHJlc3Npb25zIjp7ImRlc2NyaXB0aW9uIjoibWF0Y2hFeHByZXNzaW9ucyBpcyBhIGxpc3Qgb2YgbGFiZWwgc2VsZWN0b3IgcmVxdWlyZW1lbnRzLiBUaGUgcmVxdWlyZW1lbnRzIGFyZSBBTkRlZC4iLCJpdGVtcyI6eyJkZXNjcmlwdGlvbiI6IkEgbGFiZWwgc2VsZWN0b3IgcmVxdWlyZW1lbnQgaXMgYSBzZWxlY3RvciB0aGF0IGNvbnRhaW5zIHZhbHVlcywgYSBrZXksIGFuZCBhbiBvcGVyYXRvciB0aGF0IHJlbGF0ZXMgdGhlIGtleSBhbmQgdmFsdWVzLiIsInByb3BlcnRpZXMiOnsia2V5Ijp7ImRlc2NyaXB0aW9uIjoia2V5IGlzIHRoZSBsYWJlbCBrZXkgdGhhdCB0aGUgc2VsZWN0b3IgYXBwbGllcyB0by4iLCJ0eXBlIjoic3RyaW5nIn0sIm9wZXJhdG9yIjp7ImRlc2NyaXB0aW9uIjoib3BlcmF0b3IgcmVwcmVzZW50cyBhIGtleSdzIHJlbGF0aW9uc2hpcCB0byBhIHNldCBvZiB2YWx1ZXMuIFZhbGlkIG9wZXJhdG9ycyBhcmUgSW4sIE5vdEluLCBFeGlzdHMgYW5kIERvZXNOb3RFeGlzdC4iLCJ0eXBlIjoic3RyaW5nIn0sInZhbHVlcyI6eyJkZXNjcmlwdGlvbiI6InZhbHVlcyBpcyBhbiBhcnJheSBvZiBzdHJpbmcgdmFsdWVzLiBJZiB0aGUgb3BlcmF0b3IgaXMgSW4gb3IgTm90SW4sIHRoZSB2YWx1ZXMgYXJyYXkgbXVzdCBiZSBub24tZW1wdHkuIElmIHRoZSBvcGVyYXRvciBpcyBFeGlzdHMgb3IgRG9lc05vdEV4aXN0LCB0aGUgdmFsdWVzIGFycmF5IG11c3QgYmUgZW1wdHkuIFRoaXMgYXJyYXkgaXMgcmVwbGFjZWQgZHVyaW5nIGEgc3RyYXRlZ2ljIG1lcmdlIHBhdGNoLiIsIml0ZW1zIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6ImFycmF5In19LCJyZXF1aXJlZCI6WyJrZXkiLCJvcGVyYXRvciJdLCJ0eXBlIjoib2JqZWN0In0sInR5cGUiOiJhcnJheSJ9LCJtYXRjaExhYmVscyI6eyJhZGRpdGlvbmFsUHJvcGVydGllcyI6eyJ0eXBlIjoic3RyaW5nIn0sImRlc2NyaXB0aW9uIjoibWF0Y2hMYWJlbHMgaXMgYSBtYXAgb2Yge2tleSx2YWx1ZX0gcGFpcnMuIEEgc2luZ2xlIHtrZXksdmFsdWV9IGluIHRoZSBtYXRjaExhYmVscyBtYXAgaXMgZXF1aXZhbGVudCB0byBhbiBlbGVtZW50IG9mIG1hdGNoRXhwcmVzc2lvbnMsIHdob3NlIGtleSBmaWVsZCBpcyBcImtleVwiLCB0aGUgb3BlcmF0b3IgaXMgXCJJblwiLCBhbmQgdGhlIHZhbHVlcyBhcnJheSBjb250YWlucyBvbmx5IFwidmFsdWVcIi4gVGhlIHJlcXVpcmVtZW50cyBhcmUgQU5EZWQuIiwidHlwZSI6Im9iamVjdCJ9fSwidHlwZSI6Im9iamVjdCIsIngta3ViZXJuZXRlcy1tYXAtdHlwZSI6ImF0b21pYyJ9LCJuYW1lc3BhY2VzIjp7ImRlc2NyaXB0aW9uIjoibmFtZXNwYWNlcyBzcGVjaWZpZXMgYSBzdGF0aWMgbGlzdCBvZiBuYW1lc3BhY2UgbmFtZXMgdGhhdCB0aGUgdGVybSBhcHBsaWVzIHRvLiBUaGUgdGVybSBpcyBhcHBsaWVkIHRvIHRoZSB1bmlvbiBvZiB0aGUgbmFtZXNwYWNlcyBsaXN0ZWQgaW4gdGhpcyBmaWVsZCBhbmQgdGhlIG9uZXMgc2VsZWN0ZWQgYnkgbmFtZXNwYWNlU2VsZWN0b3IuIG51bGwgb3IgZW1wdHkgbmFtZXNwYWNlcyBsaXN0IGFuZCBudWxsIG5hbWVzcGFjZVNlbGVjdG9yIG1lYW5zIFwidGhpcyBwb2QncyBuYW1lc3BhY2VcIi4iLCJpdGVtcyI6eyJ0eXBlIjoic3RyaW5nIn0sInR5cGUiOiJhcnJheSJ9LCJ0b3BvbG9neUtleSI6eyJkZXNjcmlwdGlvbiI6IlRoaXMgcG9kIHNob3VsZCBiZSBjby1sb2NhdGVkIChhZmZpbml0eSkgb3Igbm90IGNvLWxvY2F0ZWQgKGFudGktYWZmaW5pdHkpIHdpdGggdGhlIHBvZHMgbWF0Y2hpbmcgdGhlIGxhYmVsU2VsZWN0b3IgaW4gdGhlIHNwZWNpZmllZCBuYW1lc3BhY2VzLCB3aGVyZSBjby1sb2NhdGVkIGlzIGRlZmluZWQgYXMgcnVubmluZyBvbiBhIG5vZGUgd2hvc2UgdmFsdWUgb2YgdGhlIGxhYmVsIHdpdGgga2V5IHRvcG9sb2d5S2V5IG1hdGNoZXMgdGhhdCBvZiBhbnkgbm9kZSBvbiB3aGljaCBhbnkgb2YgdGhlIHNlbGVjdGVkIHBvZHMgaXMgcnVubmluZy4gRW1wdHkgdG9wb2xvZ3lLZXkgaXMgbm90IGFsbG93ZWQuIiwidHlwZSI6InN0cmluZyJ9fSwicmVxdWlyZWQiOlsidG9wb2xvZ3lLZXkiXSwidHlwZSI6Im9iamVjdCJ9LCJ0eXBlIjoiYXJyYXkifX0sInR5cGUiOiJvYmplY3QifSwicG9kQW50aUFmZmluaXR5Ijp7ImRlc2NyaXB0aW9uIjoiUG9kQW50aUFmZmluaXR5IGlzIGEgZ3JvdXAgb2YgaW50ZXIgcG9kIGFudGkgYWZmaW5pdHkgc2NoZWR1bGluZyBydWxlcyIsInByb3BlcnRpZXMiOnsicHJlZmVycmVkRHVyaW5nU2NoZWR1bGluZ0lnbm9yZWREdXJpbmdFeGVjdXRpb24iOnsiZGVzY3JpcHRpb24iOiJUaGUgc2NoZWR1bGVyIHdpbGwgcHJlZmVyIHRvIHNjaGVkdWxlIHBvZHMgdG8gbm9kZXMgdGhhdCBzYXRpc2Z5IHRoZSBhbnRpLWFmZmluaXR5IGV4cHJlc3Npb25zIHNwZWNpZmllZCBieSB0aGlzIGZpZWxkLCBidXQgaXQgbWF5IGNob29zZSBhIG5vZGUgdGhhdCB2aW9sYXRlcyBvbmUgb3IgbW9yZSBvZiB0aGUgZXhwcmVzc2lvbnMuIFRoZSBub2RlIHRoYXQgaXMgbW9zdCBwcmVmZXJyZWQgaXMgdGhlIG9uZSB3aXRoIHRoZSBncmVhdGVzdCBzdW0gb2Ygd2VpZ2h0cywgaS5lLiBmb3IgZWFjaCBub2RlIHRoYXQgbWVldHMgYWxsIG9mIHRoZSBzY2hlZHVsaW5nIHJlcXVpcmVtZW50cyAocmVzb3VyY2UgcmVxdWVzdCwgcmVxdWlyZWREdXJpbmdTY2hlZHVsaW5nIGFudGktYWZmaW5pdHkgZXhwcmVzc2lvbnMsIGV0Yy4pLCBjb21wdXRlIGEgc3VtIGJ5IGl0ZXJhdGluZyB0aHJvdWdoIHRoZSBlbGVtZW50cyBvZiB0aGlzIGZpZWxkIGFuZCBhZGRpbmcgXCJ3ZWlnaHRcIiB0byB0aGUgc3VtIGlmIHRoZSBub2RlIGhhcyBwb2RzIHdoaWNoIG1hdGNoZXMgdGhlIGNvcnJlc3BvbmRpbmcgcG9kQWZmaW5pdHlUZXJtOyB0aGUgbm9kZShzKSB3aXRoIHRoZSBoaWdoZXN0IHN1bSBhcmUgdGhlIG1vc3QgcHJlZmVycmVkLiIsIml0ZW1zIjp7ImRlc2NyaXB0aW9uIjoiVGhlIHdlaWdodHMgb2YgYWxsIG9mIHRoZSBtYXRjaGVkIFdlaWdodGVkUG9kQWZmaW5pdHlUZXJtIGZpZWxkcyBhcmUgYWRkZWQgcGVyLW5vZGUgdG8gZmluZCB0aGUgbW9zdCBwcmVmZXJyZWQgbm9kZShzKSIsInByb3BlcnRpZXMiOnsicG9kQWZmaW5pdHlUZXJtIjp7ImRlc2NyaXB0aW9uIjoiUmVxdWlyZWQuIEEgcG9kIGFmZmluaXR5IHRlcm0sIGFzc29jaWF0ZWQgd2l0aCB0aGUgY29ycmVzcG9uZGluZyB3ZWlnaHQuIiwicHJvcGVydGllcyI6eyJsYWJlbFNlbGVjdG9yIjp7ImRlc2NyaXB0aW9uIjoiQSBsYWJlbCBxdWVyeSBvdmVyIGEgc2V0IG9mIHJlc291cmNlcywgaW4gdGhpcyBjYXNlIHBvZHMuIElmIGl0J3MgbnVsbCwgdGhpcyBQb2RBZmZpbml0eVRlcm0gbWF0Y2hlcyB3aXRoIG5vIFBvZHMuIiwicHJvcGVydGllcyI6eyJtYXRjaEV4cHJlc3Npb25zIjp7ImRlc2NyaXB0aW9uIjoibWF0Y2hFeHByZXNzaW9ucyBpcyBhIGxpc3Qgb2YgbGFiZWwgc2VsZWN0b3IgcmVxdWlyZW1lbnRzLiBUaGUgcmVxdWlyZW1lbnRzIGFyZSBBTkRlZC4iLCJpdGVtcyI6eyJkZXNjcmlwdGlvbiI6IkEgbGFiZWwgc2VsZWN0b3IgcmVxdWlyZW1lbnQgaXMgYSBzZWxlY3RvciB0aGF0IGNvbnRhaW5zIHZhbHVlcywgYSBrZXksIGFuZCBhbiBvcGVyYXRvciB0aGF0IHJlbGF0ZXMgdGhlIGtleSBhbmQgdmFsdWVzLiIsInByb3BlcnRpZXMiOnsia2V5Ijp7ImRlc2NyaXB0aW9uIjoia2V5IGlzIHRoZSBsYWJlbCBrZXkgdGhhdCB0aGUgc2VsZWN0b3IgYXBwbGllcyB0by4iLCJ0eXBlIjoic3RyaW5nIn0sIm9wZXJhdG9yIjp7ImRlc2NyaXB0aW9uIjoib3BlcmF0b3IgcmVwcmVzZW50cyBhIGtleSdzIHJlbGF0aW9uc2hpcCB0byBhIHNldCBvZiB2YWx1ZXMuIFZhbGlkIG9wZXJhdG9ycyBhcmUgSW4sIE5vdEluLCBFeGlzdHMgYW5kIERvZXNOb3RFeGlzdC4iLCJ0eXBlIjoic3RyaW5nIn0sInZhbHVlcyI6eyJkZXNjcmlwdGlvbiI6InZhbHVlcyBpcyBhbiBhcnJheSBvZiBzdHJpbmcgdmFsdWVzLiBJZiB0aGUgb3BlcmF0b3IgaXMgSW4gb3IgTm90SW4sIHRoZSB2YWx1ZXMgYXJyYXkgbXVzdCBiZSBub24tZW1wdHkuIElmIHRoZSBvcGVyYXRvciBpcyBFeGlzdHMgb3IgRG9lc05vdEV4aXN0LCB0aGUgdmFsdWVzIGFycmF5IG11c3QgYmUgZW1wdHkuIFRoaXMgYXJyYXkgaXMgcmVwbGFjZWQgZHVyaW5nIGEgc3RyYXRlZ2ljIG1lcmdlIHBhdGNoLiIsIml0ZW1zIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6ImFycmF5In19LCJyZXF1aXJlZCI6WyJrZXkiLCJvcGVyYXRvciJdLCJ0eXBlIjoib2JqZWN0In0sInR5cGUiOiJhcnJheSJ9LCJtYXRjaExhYmVscyI6eyJhZGRpdGlvbmFsUHJvcGVydGllcyI6eyJ0eXBlIjoic3RyaW5nIn0sImRlc2NyaXB0aW9uIjoibWF0Y2hMYWJlbHMgaXMgYSBtYXAgb2Yge2tleSx2YWx1ZX0gcGFpcnMuIEEgc2luZ2xlIHtrZXksdmFsdWV9IGluIHRoZSBtYXRjaExhYmVscyBtYXAgaXMgZXF1aXZhbGVudCB0byBhbiBlbGVtZW50IG9mIG1hdGNoRXhwcmVzc2lvbnMsIHdob3NlIGtleSBmaWVsZCBpcyBcImtleVwiLCB0aGUgb3BlcmF0b3IgaXMgXCJJblwiLCBhbmQgdGhlIHZhbHVlcyBhcnJheSBjb250YWlucyBvbmx5IFwidmFsdWVcIi4gVGhlIHJlcXVpcmVtZW50cyBhcmUgQU5EZWQuIiwidHlwZSI6Im9iamVjdCJ9fSwidHlwZSI6Im9iamVjdCIsIngta3ViZXJuZXRlcy1tYXAtdHlwZSI6ImF0b21pYyJ9LCJtYXRjaExhYmVsS2V5cyI6eyJkZXNjcmlwdGlvbiI6Ik1hdGNoTGFiZWxLZXlzIGlzIGEgc2V0IG9mIHBvZCBsYWJlbCBrZXlzIHRvIHNlbGVjdCB3aGljaCBwb2RzIHdpbGwgYmUgdGFrZW4gaW50byBjb25zaWRlcmF0aW9uLiBUaGUga2V5cyBhcmUgdXNlZCB0byBsb29rdXAgdmFsdWVzIGZyb20gdGhlIGluY29taW5nIHBvZCBsYWJlbHMsIHRob3NlIGtleS12YWx1ZSBsYWJlbHMgYXJlIG1lcmdlZCB3aXRoIGBMYWJlbFNlbGVjdG9yYCBhcyBga2V5IGluICh2YWx1ZSlgIHRvIHNlbGVjdCB0aGUgZ3JvdXAgb2YgZXhpc3RpbmcgcG9kcyB3aGljaCBwb2RzIHdpbGwgYmUgdGFrZW4gaW50byBjb25zaWRlcmF0aW9uIGZvciB0aGUgaW5jb21pbmcgcG9kJ3MgcG9kIChhbnRpKSBhZmZpbml0eS4gS2V5cyB0aGF0IGRvbid0IGV4aXN0IGluIHRoZSBpbmNvbWluZyBwb2QgbGFiZWxzIHdpbGwgYmUgaWdub3JlZC4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgZW1wdHkuIFRoZSBzYW1lIGtleSBpcyBmb3JiaWRkZW4gdG8gZXhpc3QgaW4gYm90aCBNYXRjaExhYmVsS2V5cyBhbmQgTGFiZWxTZWxlY3Rvci4gQWxzbywgTWF0Y2hMYWJlbEtleXMgY2Fubm90IGJlIHNldCB3aGVuIExhYmVsU2VsZWN0b3IgaXNuJ3Qgc2V0LiBUaGlzIGlzIGFuIGFscGhhIGZpZWxkIGFuZCByZXF1aXJlcyBlbmFibGluZyBNYXRjaExhYmVsS2V5c0luUG9kQWZmaW5pdHkgZmVhdHVyZSBnYXRlLiIsIml0ZW1zIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6ImFycmF5IiwieC1rdWJlcm5ldGVzLWxpc3QtdHlwZSI6ImF0b21pYyJ9LCJtaXNtYXRjaExhYmVsS2V5cyI6eyJkZXNjcmlwdGlvbiI6Ik1pc21hdGNoTGFiZWxLZXlzIGlzIGEgc2V0IG9mIHBvZCBsYWJlbCBrZXlzIHRvIHNlbGVjdCB3aGljaCBwb2RzIHdpbGwgYmUgdGFrZW4gaW50byBjb25zaWRlcmF0aW9uLiBUaGUga2V5cyBhcmUgdXNlZCB0byBsb29rdXAgdmFsdWVzIGZyb20gdGhlIGluY29taW5nIHBvZCBsYWJlbHMsIHRob3NlIGtleS12YWx1ZSBsYWJlbHMgYXJlIG1lcmdlZCB3aXRoIGBMYWJlbFNlbGVjdG9yYCBhcyBga2V5IG5vdGluICh2YWx1ZSlgIHRvIHNlbGVjdCB0aGUgZ3JvdXAgb2YgZXhpc3RpbmcgcG9kcyB3aGljaCBwb2RzIHdpbGwgYmUgdGFrZW4gaW50byBjb25zaWRlcmF0aW9uIGZvciB0aGUgaW5jb21pbmcgcG9kJ3MgcG9kIChhbnRpKSBhZmZpbml0eS4gS2V5cyB0aGF0IGRvbid0IGV4aXN0IGluIHRoZSBpbmNvbWluZyBwb2QgbGFiZWxzIHdpbGwgYmUgaWdub3JlZC4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgZW1wdHkuIFRoZSBzYW1lIGtleSBpcyBmb3JiaWRkZW4gdG8gZXhpc3QgaW4gYm90aCBNaXNtYXRjaExhYmVsS2V5cyBhbmQgTGFiZWxTZWxlY3Rvci4gQWxzbywgTWlzbWF0Y2hMYWJlbEtleXMgY2Fubm90IGJlIHNldCB3aGVuIExhYmVsU2VsZWN0b3IgaXNuJ3Qgc2V0LiBUaGlzIGlzIGFuIGFscGhhIGZpZWxkIGFuZCByZXF1aXJlcyBlbmFibGluZyBNYXRjaExhYmVsS2V5c0luUG9kQWZmaW5pdHkgZmVhdHVyZSBnYXRlLiIsIml0ZW1zIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6ImFycmF5IiwieC1rdWJlcm5ldGVzLWxpc3QtdHlwZSI6ImF0b21pYyJ9LCJuYW1lc3BhY2VTZWxlY3RvciI6eyJkZXNjcmlwdGlvbiI6IkEgbGFiZWwgcXVlcnkgb3ZlciB0aGUgc2V0IG9mIG5hbWVzcGFjZXMgdGhhdCB0aGUgdGVybSBhcHBsaWVzIHRvLiBUaGUgdGVybSBpcyBhcHBsaWVkIHRvIHRoZSB1bmlvbiBvZiB0aGUgbmFtZXNwYWNlcyBzZWxlY3RlZCBieSB0aGlzIGZpZWxkIGFuZCB0aGUgb25lcyBsaXN0ZWQgaW4gdGhlIG5hbWVzcGFjZXMgZmllbGQuIG51bGwgc2VsZWN0b3IgYW5kIG51bGwgb3IgZW1wdHkgbmFtZXNwYWNlcyBsaXN0IG1lYW5zIFwidGhpcyBwb2QncyBuYW1lc3BhY2VcIi4gQW4gZW1wdHkgc2VsZWN0b3IgKHt9KSBtYXRjaGVzIGFsbCBuYW1lc3BhY2VzLiIsInByb3BlcnRpZXMiOnsibWF0Y2hFeHByZXNzaW9ucyI6eyJkZXNjcmlwdGlvbiI6Im1hdGNoRXhwcmVzc2lvbnMgaXMgYSBsaXN0IG9mIGxhYmVsIHNlbGVjdG9yIHJlcXVpcmVtZW50cy4gVGhlIHJlcXVpcmVtZW50cyBhcmUgQU5EZWQuIiwiaXRlbXMiOnsiZGVzY3JpcHRpb24iOiJBIGxhYmVsIHNlbGVjdG9yIHJlcXVpcmVtZW50IGlzIGEgc2VsZWN0b3IgdGhhdCBjb250YWlucyB2YWx1ZXMsIGEga2V5LCBhbmQgYW4gb3BlcmF0b3IgdGhhdCByZWxhdGVzIHRoZSBrZXkgYW5kIHZhbHVlcy4iLCJwcm9wZXJ0aWVzIjp7ImtleSI6eyJkZXNjcmlwdGlvbiI6ImtleSBpcyB0aGUgbGFiZWwga2V5IHRoYXQgdGhlIHNlbGVjdG9yIGFwcGxpZXMgdG8uIiwidHlwZSI6InN0cmluZyJ9LCJvcGVyYXRvciI6eyJkZXNjcmlwdGlvbiI6Im9wZXJhdG9yIHJlcHJlc2VudHMgYSBrZXkncyByZWxhdGlvbnNoaXAgdG8gYSBzZXQgb2YgdmFsdWVzLiBWYWxpZCBvcGVyYXRvcnMgYXJlIEluLCBOb3RJbiwgRXhpc3RzIGFuZCBEb2VzTm90RXhpc3QuIiwidHlwZSI6InN0cmluZyJ9LCJ2YWx1ZXMiOnsiZGVzY3JpcHRpb24iOiJ2YWx1ZXMgaXMgYW4gYXJyYXkgb2Ygc3RyaW5nIHZhbHVlcy4gSWYgdGhlIG9wZXJhdG9yIGlzIEluIG9yIE5vdEluLCB0aGUgdmFsdWVzIGFycmF5IG11c3QgYmUgbm9uLWVtcHR5LiBJZiB0aGUgb3BlcmF0b3IgaXMgRXhpc3RzIG9yIERvZXNOb3RFeGlzdCwgdGhlIHZhbHVlcyBhcnJheSBtdXN0IGJlIGVtcHR5LiBUaGlzIGFycmF5IGlzIHJlcGxhY2VkIGR1cmluZyBhIHN0cmF0ZWdpYyBtZXJnZSBwYXRjaC4iLCJpdGVtcyI6eyJ0eXBlIjoic3RyaW5nIn0sInR5cGUiOiJhcnJheSJ9fSwicmVxdWlyZWQiOlsia2V5Iiwib3BlcmF0b3IiXSwidHlwZSI6Im9iamVjdCJ9LCJ0eXBlIjoiYXJyYXkifSwibWF0Y2hMYWJlbHMiOnsiYWRkaXRpb25hbFByb3BlcnRpZXMiOnsidHlwZSI6InN0cmluZyJ9LCJkZXNjcmlwdGlvbiI6Im1hdGNoTGFiZWxzIGlzIGEgbWFwIG9mIHtrZXksdmFsdWV9IHBhaXJzLiBBIHNpbmdsZSB7a2V5LHZhbHVlfSBpbiB0aGUgbWF0Y2hMYWJlbHMgbWFwIGlzIGVxdWl2YWxlbnQgdG8gYW4gZWxlbWVudCBvZiBtYXRjaEV4cHJlc3Npb25zLCB3aG9zZSBrZXkgZmllbGQgaXMgXCJrZXlcIiwgdGhlIG9wZXJhdG9yIGlzIFwiSW5cIiwgYW5kIHRoZSB2YWx1ZXMgYXJyYXkgY29udGFpbnMgb25seSBcInZhbHVlXCIuIFRoZSByZXF1aXJlbWVudHMgYXJlIEFORGVkLiIsInR5cGUiOiJvYmplY3QifX0sInR5cGUiOiJvYmplY3QiLCJ4LWt1YmVybmV0ZXMtbWFwLXR5cGUiOiJhdG9taWMifSwibmFtZXNwYWNlcyI6eyJkZXNjcmlwdGlvbiI6Im5hbWVzcGFjZXMgc3BlY2lmaWVzIGEgc3RhdGljIGxpc3Qgb2YgbmFtZXNwYWNlIG5hbWVzIHRoYXQgdGhlIHRlcm0gYXBwbGllcyB0by4gVGhlIHRlcm0gaXMgYXBwbGllZCB0byB0aGUgdW5pb24gb2YgdGhlIG5hbWVzcGFjZXMgbGlzdGVkIGluIHRoaXMgZmllbGQgYW5kIHRoZSBvbmVzIHNlbGVjdGVkIGJ5IG5hbWVzcGFjZVNlbGVjdG9yLiBudWxsIG9yIGVtcHR5IG5hbWVzcGFjZXMgbGlzdCBhbmQgbnVsbCBuYW1lc3BhY2VTZWxlY3RvciBtZWFucyBcInRoaXMgcG9kJ3MgbmFtZXNwYWNlXCIuIiwiaXRlbXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjoiYXJyYXkifSwidG9wb2xvZ3lLZXkiOnsiZGVzY3JpcHRpb24iOiJUaGlzIHBvZCBzaG91bGQgYmUgY28tbG9jYXRlZCAoYWZmaW5pdHkpIG9yIG5vdCBjby1sb2NhdGVkIChhbnRpLWFmZmluaXR5KSB3aXRoIHRoZSBwb2RzIG1hdGNoaW5nIHRoZSBsYWJlbFNlbGVjdG9yIGluIHRoZSBzcGVjaWZpZWQgbmFtZXNwYWNlcywgd2hlcmUgY28tbG9jYXRlZCBpcyBkZWZpbmVkIGFzIHJ1bm5pbmcgb24gYSBub2RlIHdob3NlIHZhbHVlIG9mIHRoZSBsYWJlbCB3aXRoIGtleSB0b3BvbG9neUtleSBtYXRjaGVzIHRoYXQgb2YgYW55IG5vZGUgb24gd2hpY2ggYW55IG9mIHRoZSBzZWxlY3RlZCBwb2RzIGlzIHJ1bm5pbmcuIEVtcHR5IHRvcG9sb2d5S2V5IGlzIG5vdCBhbGxvd2VkLiIsInR5cGUiOiJzdHJpbmcifX0sInJlcXVpcmVkIjpbInRvcG9sb2d5S2V5Il0sInR5cGUiOiJvYmplY3QifSwid2VpZ2h0Ijp7ImRlc2NyaXB0aW9uIjoid2VpZ2h0IGFzc29jaWF0ZWQgd2l0aCBtYXRjaGluZyB0aGUgY29ycmVzcG9uZGluZyBwb2RBZmZpbml0eVRlcm0sIGluIHRoZSByYW5nZSAxLTEwMC4iLCJmb3JtYXQiOiJpbnQzMiIsInR5cGUiOiJpbnRlZ2VyIn19LCJyZXF1aXJlZCI6WyJwb2RBZmZpbml0eVRlcm0iLCJ3ZWlnaHQiXSwidHlwZSI6Im9iamVjdCJ9LCJ0eXBlIjoiYXJyYXkifSwicmVxdWlyZWREdXJpbmdTY2hlZHVsaW5nSWdub3JlZER1cmluZ0V4ZWN1dGlvbiI6eyJkZXNjcmlwdGlvbiI6IklmIHRoZSBhbnRpLWFmZmluaXR5IHJlcXVpcmVtZW50cyBzcGVjaWZpZWQgYnkgdGhpcyBmaWVsZCBhcmUgbm90IG1ldCBhdCBzY2hlZHVsaW5nIHRpbWUsIHRoZSBwb2Qgd2lsbCBub3QgYmUgc2NoZWR1bGVkIG9udG8gdGhlIG5vZGUuIElmIHRoZSBhbnRpLWFmZmluaXR5IHJlcXVpcmVtZW50cyBzcGVjaWZpZWQgYnkgdGhpcyBmaWVsZCBjZWFzZSB0byBiZSBtZXQgYXQgc29tZSBwb2ludCBkdXJpbmcgcG9kIGV4ZWN1dGlvbiAoZS5nLiBkdWUgdG8gYSBwb2QgbGFiZWwgdXBkYXRlKSwgdGhlIHN5c3RlbSBtYXkgb3IgbWF5IG5vdCB0cnkgdG8gZXZlbnR1YWxseSBldmljdCB0aGUgcG9kIGZyb20gaXRzIG5vZGUuIFdoZW4gdGhlcmUgYXJlIG11bHRpcGxlIGVsZW1lbnRzLCB0aGUgbGlzdHMgb2Ygbm9kZXMgY29ycmVzcG9uZGluZyB0byBlYWNoIHBvZEFmZmluaXR5VGVybSBhcmUgaW50ZXJzZWN0ZWQsIGkuZS4gYWxsIHRlcm1zIG11c3QgYmUgc2F0aXNmaWVkLiIsIml0ZW1zIjp7ImRlc2NyaXB0aW9uIjoiRGVmaW5lcyBhIHNldCBvZiBwb2RzIChuYW1lbHkgdGhvc2UgbWF0Y2hpbmcgdGhlIGxhYmVsU2VsZWN0b3IgcmVsYXRpdmUgdG8gdGhlIGdpdmVuIG5hbWVzcGFjZShzKSkgdGhhdCB0aGlzIHBvZCBzaG91bGQgYmUgY28tbG9jYXRlZCAoYWZmaW5pdHkpIG9yIG5vdCBjby1sb2NhdGVkIChhbnRpLWFmZmluaXR5KSB3aXRoLCB3aGVyZSBjby1sb2NhdGVkIGlzIGRlZmluZWQgYXMgcnVubmluZyBvbiBhIG5vZGUgd2hvc2UgdmFsdWUgb2YgdGhlIGxhYmVsIHdpdGgga2V5IFx1MDAzY3RvcG9sb2d5S2V5XHUwMDNlIG1hdGNoZXMgdGhhdCBvZiBhbnkgbm9kZSBvbiB3aGljaCBhIHBvZCBvZiB0aGUgc2V0IG9mIHBvZHMgaXMgcnVubmluZyIsInByb3BlcnRpZXMiOnsibGFiZWxTZWxlY3RvciI6eyJkZXNjcmlwdGlvbiI6IkEgbGFiZWwgcXVlcnkgb3ZlciBhIHNldCBvZiByZXNvdXJjZXMsIGluIHRoaXMgY2FzZSBwb2RzLiBJZiBpdCdzIG51bGwsIHRoaXMgUG9kQWZmaW5pdHlUZXJtIG1hdGNoZXMgd2l0aCBubyBQb2RzLiIsInByb3BlcnRpZXMiOnsibWF0Y2hFeHByZXNzaW9ucyI6eyJkZXNjcmlwdGlvbiI6Im1hdGNoRXhwcmVzc2lvbnMgaXMgYSBsaXN0IG9mIGxhYmVsIHNlbGVjdG9yIHJlcXVpcmVtZW50cy4gVGhlIHJlcXVpcmVtZW50cyBhcmUgQU5EZWQuIiwiaXRlbXMiOnsiZGVzY3JpcHRpb24iOiJBIGxhYmVsIHNlbGVjdG9yIHJlcXVpcmVtZW50IGlzIGEgc2VsZWN0b3IgdGhhdCBjb250YWlucyB2YWx1ZXMsIGEga2V5LCBhbmQgYW4gb3BlcmF0b3IgdGhhdCByZWxhdGVzIHRoZSBrZXkgYW5kIHZhbHVlcy4iLCJwcm9wZXJ0aWVzIjp7ImtleSI6eyJkZXNjcmlwdGlvbiI6ImtleSBpcyB0aGUgbGFiZWwga2V5IHRoYXQgdGhlIHNlbGVjdG9yIGFwcGxpZXMgdG8uIiwidHlwZSI6InN0cmluZyJ9LCJvcGVyYXRvciI6eyJkZXNjcmlwdGlvbiI6Im9wZXJhdG9yIHJlcHJlc2VudHMgYSBrZXkncyByZWxhdGlvbnNoaXAgdG8gYSBzZXQgb2YgdmFsdWVzLiBWYWxpZCBvcGVyYXRvcnMgYXJlIEluLCBOb3RJbiwgRXhpc3RzIGFuZCBEb2VzTm90RXhpc3QuIiwidHlwZSI6InN0cmluZyJ9LCJ2YWx1ZXMiOnsiZGVzY3JpcHRpb24iOiJ2YWx1ZXMgaXMgYW4gYXJyYXkgb2Ygc3RyaW5nIHZhbHVlcy4gSWYgdGhlIG9wZXJhdG9yIGlzIEluIG9yIE5vdEluLCB0aGUgdmFsdWVzIGFycmF5IG11c3QgYmUgbm9uLWVtcHR5LiBJZiB0aGUgb3BlcmF0b3IgaXMgRXhpc3RzIG9yIERvZXNOb3RFeGlzdCwgdGhlIHZhbHVlcyBhcnJheSBtdXN0IGJlIGVtcHR5LiBUaGlzIGFycmF5IGlzIHJlcGxhY2VkIGR1cmluZyBhIHN0cmF0ZWdpYyBtZXJnZSBwYXRjaC4iLCJpdGVtcyI6eyJ0eXBlIjoic3RyaW5nIn0sInR5cGUiOiJhcnJheSJ9fSwicmVxdWlyZWQiOlsia2V5Iiwib3BlcmF0b3IiXSwidHlwZSI6Im9iamVjdCJ9LCJ0eXBlIjoiYXJyYXkifSwibWF0Y2hMYWJlbHMiOnsiYWRkaXRpb25hbFByb3BlcnRpZXMiOnsidHlwZSI6InN0cmluZyJ9LCJkZXNjcmlwdGlvbiI6Im1hdGNoTGFiZWxzIGlzIGEgbWFwIG9mIHtrZXksdmFsdWV9IHBhaXJzLiBBIHNpbmdsZSB7a2V5LHZhbHVlfSBpbiB0aGUgbWF0Y2hMYWJlbHMgbWFwIGlzIGVxdWl2YWxlbnQgdG8gYW4gZWxlbWVudCBvZiBtYXRjaEV4cHJlc3Npb25zLCB3aG9zZSBrZXkgZmllbGQgaXMgXCJrZXlcIiwgdGhlIG9wZXJhdG9yIGlzIFwiSW5cIiwgYW5kIHRoZSB2YWx1ZXMgYXJyYXkgY29udGFpbnMgb25seSBcInZhbHVlXCIuIFRoZSByZXF1aXJlbWVudHMgYXJlIEFORGVkLiIsInR5cGUiOiJvYmplY3QifX0sInR5cGUiOiJvYmplY3QiLCJ4LWt1YmVybmV0ZXMtbWFwLXR5cGUiOiJhdG9taWMifSwibWF0Y2hMYWJlbEtleXMiOnsiZGVzY3JpcHRpb24iOiJNYXRjaExhYmVsS2V5cyBpcyBhIHNldCBvZiBwb2QgbGFiZWwga2V5cyB0byBzZWxlY3Qgd2hpY2ggcG9kcyB3aWxsIGJlIHRha2VuIGludG8gY29uc2lkZXJhdGlvbi4gVGhlIGtleXMgYXJlIHVzZWQgdG8gbG9va3VwIHZhbHVlcyBmcm9tIHRoZSBpbmNvbWluZyBwb2QgbGFiZWxzLCB0aG9zZSBrZXktdmFsdWUgbGFiZWxzIGFyZSBtZXJnZWQgd2l0aCBgTGFiZWxTZWxlY3RvcmAgYXMgYGtleSBpbiAodmFsdWUpYCB0byBzZWxlY3QgdGhlIGdyb3VwIG9mIGV4aXN0aW5nIHBvZHMgd2hpY2ggcG9kcyB3aWxsIGJlIHRha2VuIGludG8gY29uc2lkZXJhdGlvbiBmb3IgdGhlIGluY29taW5nIHBvZCdzIHBvZCAoYW50aSkgYWZmaW5pdHkuIEtleXMgdGhhdCBkb24ndCBleGlzdCBpbiB0aGUgaW5jb21pbmcgcG9kIGxhYmVscyB3aWxsIGJlIGlnbm9yZWQuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGVtcHR5LiBUaGUgc2FtZSBrZXkgaXMgZm9yYmlkZGVuIHRvIGV4aXN0IGluIGJvdGggTWF0Y2hMYWJlbEtleXMgYW5kIExhYmVsU2VsZWN0b3IuIEFsc28sIE1hdGNoTGFiZWxLZXlzIGNhbm5vdCBiZSBzZXQgd2hlbiBMYWJlbFNlbGVjdG9yIGlzbid0IHNldC4gVGhpcyBpcyBhbiBhbHBoYSBmaWVsZCBhbmQgcmVxdWlyZXMgZW5hYmxpbmcgTWF0Y2hMYWJlbEtleXNJblBvZEFmZmluaXR5IGZlYXR1cmUgZ2F0ZS4iLCJpdGVtcyI6eyJ0eXBlIjoic3RyaW5nIn0sInR5cGUiOiJhcnJheSIsIngta3ViZXJuZXRlcy1saXN0LXR5cGUiOiJhdG9taWMifSwibWlzbWF0Y2hMYWJlbEtleXMiOnsiZGVzY3JpcHRpb24iOiJNaXNtYXRjaExhYmVsS2V5cyBpcyBhIHNldCBvZiBwb2QgbGFiZWwga2V5cyB0byBzZWxlY3Qgd2hpY2ggcG9kcyB3aWxsIGJlIHRha2VuIGludG8gY29uc2lkZXJhdGlvbi4gVGhlIGtleXMgYXJlIHVzZWQgdG8gbG9va3VwIHZhbHVlcyBmcm9tIHRoZSBpbmNvbWluZyBwb2QgbGFiZWxzLCB0aG9zZSBrZXktdmFsdWUgbGFiZWxzIGFyZSBtZXJnZWQgd2l0aCBgTGFiZWxTZWxlY3RvcmAgYXMgYGtleSBub3RpbiAodmFsdWUpYCB0byBzZWxlY3QgdGhlIGdyb3VwIG9mIGV4aXN0aW5nIHBvZHMgd2hpY2ggcG9kcyB3aWxsIGJlIHRha2VuIGludG8gY29uc2lkZXJhdGlvbiBmb3IgdGhlIGluY29taW5nIHBvZCdzIHBvZCAoYW50aSkgYWZmaW5pdHkuIEtleXMgdGhhdCBkb24ndCBleGlzdCBpbiB0aGUgaW5jb21pbmcgcG9kIGxhYmVscyB3aWxsIGJlIGlnbm9yZWQuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGVtcHR5LiBUaGUgc2FtZSBrZXkgaXMgZm9yYmlkZGVuIHRvIGV4aXN0IGluIGJvdGggTWlzbWF0Y2hMYWJlbEtleXMgYW5kIExhYmVsU2VsZWN0b3IuIEFsc28sIE1pc21hdGNoTGFiZWxLZXlzIGNhbm5vdCBiZSBzZXQgd2hlbiBMYWJlbFNlbGVjdG9yIGlzbid0IHNldC4gVGhpcyBpcyBhbiBhbHBoYSBmaWVsZCBhbmQgcmVxdWlyZXMgZW5hYmxpbmcgTWF0Y2hMYWJlbEtleXNJblBvZEFmZmluaXR5IGZlYXR1cmUgZ2F0ZS4iLCJpdGVtcyI6eyJ0eXBlIjoic3RyaW5nIn0sInR5cGUiOiJhcnJheSIsIngta3ViZXJuZXRlcy1saXN0LXR5cGUiOiJhdG9taWMifSwibmFtZXNwYWNlU2VsZWN0b3IiOnsiZGVzY3JpcHRpb24iOiJBIGxhYmVsIHF1ZXJ5IG92ZXIgdGhlIHNldCBvZiBuYW1lc3BhY2VzIHRoYXQgdGhlIHRlcm0gYXBwbGllcyB0by4gVGhlIHRlcm0gaXMgYXBwbGllZCB0byB0aGUgdW5pb24gb2YgdGhlIG5hbWVzcGFjZXMgc2VsZWN0ZWQgYnkgdGhpcyBmaWVsZCBhbmQgdGhlIG9uZXMgbGlzdGVkIGluIHRoZSBuYW1lc3BhY2VzIGZpZWxkLiBudWxsIHNlbGVjdG9yIGFuZCBudWxsIG9yIGVtcHR5IG5hbWVzcGFjZXMgbGlzdCBtZWFucyBcInRoaXMgcG9kJ3MgbmFtZXNwYWNlXCIuIEFuIGVtcHR5IHNlbGVjdG9yICh7fSkgbWF0Y2hlcyBhbGwgbmFtZXNwYWNlcy4iLCJwcm9wZXJ0aWVzIjp7Im1hdGNoRXhwcmVzc2lvbnMiOnsiZGVzY3JpcHRpb24iOiJtYXRjaEV4cHJlc3Npb25zIGlzIGEgbGlzdCBvZiBsYWJlbCBzZWxlY3RvciByZXF1aXJlbWVudHMuIFRoZSByZXF1aXJlbWVudHMgYXJlIEFORGVkLiIsIml0ZW1zIjp7ImRlc2NyaXB0aW9uIjoiQSBsYWJlbCBzZWxlY3RvciByZXF1aXJlbWVudCBpcyBhIHNlbGVjdG9yIHRoYXQgY29udGFpbnMgdmFsdWVzLCBhIGtleSwgYW5kIGFuIG9wZXJhdG9yIHRoYXQgcmVsYXRlcyB0aGUga2V5IGFuZCB2YWx1ZXMuIiwicHJvcGVydGllcyI6eyJrZXkiOnsiZGVzY3JpcHRpb24iOiJrZXkgaXMgdGhlIGxhYmVsIGtleSB0aGF0IHRoZSBzZWxlY3RvciBhcHBsaWVzIHRvLiIsInR5cGUiOiJzdHJpbmcifSwib3BlcmF0b3IiOnsiZGVzY3JpcHRpb24iOiJvcGVyYXRvciByZXByZXNlbnRzIGEga2V5J3MgcmVsYXRpb25zaGlwIHRvIGEgc2V0IG9mIHZhbHVlcy4gVmFsaWQgb3BlcmF0b3JzIGFyZSBJbiwgTm90SW4sIEV4aXN0cyBhbmQgRG9lc05vdEV4aXN0LiIsInR5cGUiOiJzdHJpbmcifSwidmFsdWVzIjp7ImRlc2NyaXB0aW9uIjoidmFsdWVzIGlzIGFuIGFycmF5IG9mIHN0cmluZyB2YWx1ZXMuIElmIHRoZSBvcGVyYXRvciBpcyBJbiBvciBOb3RJbiwgdGhlIHZhbHVlcyBhcnJheSBtdXN0IGJlIG5vbi1lbXB0eS4gSWYgdGhlIG9wZXJhdG9yIGlzIEV4aXN0cyBvciBEb2VzTm90RXhpc3QsIHRoZSB2YWx1ZXMgYXJyYXkgbXVzdCBiZSBlbXB0eS4gVGhpcyBhcnJheSBpcyByZXBsYWNlZCBkdXJpbmcgYSBzdHJhdGVnaWMgbWVyZ2UgcGF0Y2guIiwiaXRlbXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjoiYXJyYXkifX0sInJlcXVpcmVkIjpbImtleSIsIm9wZXJhdG9yIl0sInR5cGUiOiJvYmplY3QifSwidHlwZSI6ImFycmF5In0sIm1hdGNoTGFiZWxzIjp7ImFkZGl0aW9uYWxQcm9wZXJ0aWVzIjp7InR5cGUiOiJzdHJpbmcifSwiZGVzY3JpcHRpb24iOiJtYXRjaExhYmVscyBpcyBhIG1hcCBvZiB7a2V5LHZhbHVlfSBwYWlycy4gQSBzaW5nbGUge2tleSx2YWx1ZX0gaW4gdGhlIG1hdGNoTGFiZWxzIG1hcCBpcyBlcXVpdmFsZW50IHRvIGFuIGVsZW1lbnQgb2YgbWF0Y2hFeHByZXNzaW9ucywgd2hvc2Uga2V5IGZpZWxkIGlzIFwia2V5XCIsIHRoZSBvcGVyYXRvciBpcyBcIkluXCIsIGFuZCB0aGUgdmFsdWVzIGFycmF5IGNvbnRhaW5zIG9ubHkgXCJ2YWx1ZVwiLiBUaGUgcmVxdWlyZW1lbnRzIGFyZSBBTkRlZC4iLCJ0eXBlIjoib2JqZWN0In19LCJ0eXBlIjoib2JqZWN0IiwieC1rdWJlcm5ldGVzLW1hcC10eXBlIjoiYXRvbWljIn0sIm5hbWVzcGFjZXMiOnsiZGVzY3JpcHRpb24iOiJuYW1lc3BhY2VzIHNwZWNpZmllcyBhIHN0YXRpYyBsaXN0IG9mIG5hbWVzcGFjZSBuYW1lcyB0aGF0IHRoZSB0ZXJtIGFwcGxpZXMgdG8uIFRoZSB0ZXJtIGlzIGFwcGxpZWQgdG8gdGhlIHVuaW9uIG9mIHRoZSBuYW1lc3BhY2VzIGxpc3RlZCBpbiB0aGlzIGZpZWxkIGFuZCB0aGUgb25lcyBzZWxlY3RlZCBieSBuYW1lc3BhY2VTZWxlY3Rvci4gbnVsbCBvciBlbXB0eSBuYW1lc3BhY2VzIGxpc3QgYW5kIG51bGwgbmFtZXNwYWNlU2VsZWN0b3IgbWVhbnMgXCJ0aGlzIHBvZCdzIG5hbWVzcGFjZVwiLiIsIml0ZW1zIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6ImFycmF5In0sInRvcG9sb2d5S2V5Ijp7ImRlc2NyaXB0aW9uIjoiVGhpcyBwb2Qgc2hvdWxkIGJlIGNvLWxvY2F0ZWQgKGFmZmluaXR5KSBvciBub3QgY28tbG9jYXRlZCAoYW50aS1hZmZpbml0eSkgd2l0aCB0aGUgcG9kcyBtYXRjaGluZyB0aGUgbGFiZWxTZWxlY3RvciBpbiB0aGUgc3BlY2lmaWVkIG5hbWVzcGFjZXMsIHdoZXJlIGNvLWxvY2F0ZWQgaXMgZGVmaW5lZCBhcyBydW5uaW5nIG9uIGEgbm9kZSB3aG9zZSB2YWx1ZSBvZiB0aGUgbGFiZWwgd2l0aCBrZXkgdG9wb2xvZ3lLZXkgbWF0Y2hlcyB0aGF0IG9mIGFueSBub2RlIG9uIHdoaWNoIGFueSBvZiB0aGUgc2VsZWN0ZWQgcG9kcyBpcyBydW5uaW5nLiBFbXB0eSB0b3BvbG9neUtleSBpcyBub3QgYWxsb3dlZC4iLCJ0eXBlIjoic3RyaW5nIn19LCJyZXF1aXJlZCI6WyJ0b3BvbG9neUtleSJdLCJ0eXBlIjoib2JqZWN0In0sInR5cGUiOiJhcnJheSJ9fSwidHlwZSI6Im9iamVjdCJ9LCJ0b2xlcmF0aW9ucyI6eyJkZXNjcmlwdGlvbiI6IlRoZSBwb2QgdGhpcyBUb2xlcmF0aW9uIGlzIGF0dGFjaGVkIHRvIHRvbGVyYXRlcyBhbnkgdGFpbnQgdGhhdCBtYXRjaGVzIHRoZSB0cmlwbGUgXHUwMDNja2V5LHZhbHVlLGVmZmVjdFx1MDAzZSB1c2luZyB0aGUgbWF0Y2hpbmcgb3BlcmF0b3IgXHUwMDNjb3BlcmF0b3JcdTAwM2UiLCJpdGVtcyI6eyJkZXNjcmlwdGlvbiI6IlRoZSBwb2QgdGhpcyBUb2xlcmF0aW9uIGlzIGF0dGFjaGVkIHRvIHRvbGVyYXRlcyBhbnkgdGFpbnQgdGhhdCBtYXRjaGVzIHRoZSB0cmlwbGUgXHUwMDNja2V5LHZhbHVlLGVmZmVjdFx1MDAzZSB1c2luZyB0aGUgbWF0Y2hpbmcgb3BlcmF0b3IgXHUwMDNjb3BlcmF0b3JcdTAwM2UuIiwicHJvcGVydGllcyI6eyJlZmZlY3QiOnsiZGVzY3JpcHRpb24iOiJFZmZlY3QgaW5kaWNhdGVzIHRoZSB0YWludCBlZmZlY3QgdG8gbWF0Y2guIEVtcHR5IG1lYW5zIG1hdGNoIGFsbCB0YWludCBlZmZlY3RzLiBXaGVuIHNwZWNpZmllZCwgYWxsb3dlZCB2YWx1ZXMgYXJlIE5vU2NoZWR1bGUsIFByZWZlck5vU2NoZWR1bGUgYW5kIE5vRXhlY3V0ZS4iLCJ0eXBlIjoic3RyaW5nIn0sImtleSI6eyJkZXNjcmlwdGlvbiI6IktleSBpcyB0aGUgdGFpbnQga2V5IHRoYXQgdGhlIHRvbGVyYXRpb24gYXBwbGllcyB0by4gRW1wdHkgbWVhbnMgbWF0Y2ggYWxsIHRhaW50IGtleXMuIElmIHRoZSBrZXkgaXMgZW1wdHksIG9wZXJhdG9yIG11c3QgYmUgRXhpc3RzOyB0aGlzIGNvbWJpbmF0aW9uIG1lYW5zIHRvIG1hdGNoIGFsbCB2YWx1ZXMgYW5kIGFsbCBrZXlzLiIsInR5cGUiOiJzdHJpbmcifSwib3BlcmF0b3IiOnsiZGVzY3JpcHRpb24iOiJPcGVyYXRvciByZXByZXNlbnRzIGEga2V5J3MgcmVsYXRpb25zaGlwIHRvIHRoZSB2YWx1ZS4gVmFsaWQgb3BlcmF0b3JzIGFyZSBFeGlzdHMgYW5kIEVxdWFsLiBEZWZhdWx0cyB0byBFcXVhbC4gRXhpc3RzIGlzIGVxdWl2YWxlbnQgdG8gd2lsZGNhcmQgZm9yIHZhbHVlLCBzbyB0aGF0IGEgcG9kIGNhbiB0b2xlcmF0ZSBhbGwgdGFpbnRzIG9mIGEgcGFydGljdWxhciBjYXRlZ29yeS4iLCJ0eXBlIjoic3RyaW5nIn0sInRvbGVyYXRpb25TZWNvbmRzIjp7ImRlc2NyaXB0aW9uIjoiVG9sZXJhdGlvblNlY29uZHMgcmVwcmVzZW50cyB0aGUgcGVyaW9kIG9mIHRpbWUgdGhlIHRvbGVyYXRpb24gKHdoaWNoIG11c3QgYmUgb2YgZWZmZWN0IE5vRXhlY3V0ZSwgb3RoZXJ3aXNlIHRoaXMgZmllbGQgaXMgaWdub3JlZCkgdG9sZXJhdGVzIHRoZSB0YWludC4gQnkgZGVmYXVsdCwgaXQgaXMgbm90IHNldCwgd2hpY2ggbWVhbnMgdG9sZXJhdGUgdGhlIHRhaW50IGZvcmV2ZXIgKGRvIG5vdCBldmljdCkuIFplcm8gYW5kIG5lZ2F0aXZlIHZhbHVlcyB3aWxsIGJlIHRyZWF0ZWQgYXMgMCAoZXZpY3QgaW1tZWRpYXRlbHkpIGJ5IHRoZSBzeXN0ZW0uIiwiZm9ybWF0IjoiaW50NjQiLCJ0eXBlIjoiaW50ZWdlciJ9LCJ2YWx1ZSI6eyJkZXNjcmlwdGlvbiI6IlZhbHVlIGlzIHRoZSB0YWludCB2YWx1ZSB0aGUgdG9sZXJhdGlvbiBtYXRjaGVzIHRvLiBJZiB0aGUgb3BlcmF0b3IgaXMgRXhpc3RzLCB0aGUgdmFsdWUgc2hvdWxkIGJlIGVtcHR5LCBvdGhlcndpc2UganVzdCBhIHJlZ3VsYXIgc3RyaW5nLiIsInR5cGUiOiJzdHJpbmcifX0sInR5cGUiOiJvYmplY3QifSwidHlwZSI6ImFycmF5In0sInRvcG9sb2d5U3ByZWFkQ29uc3RyYWludHMiOnsiZGVzY3JpcHRpb24iOiJUb3BvbG9neVNwcmVhZENvbnN0cmFpbnQgc3BlY2lmaWVzIGhvdyB0byBzcHJlYWQgbWF0Y2hpbmcgcG9kcyBhbW9uZyB0aGUgZ2l2ZW4gdG9wb2xvZ3kiLCJpdGVtcyI6eyJkZXNjcmlwdGlvbiI6IlRvcG9sb2d5U3ByZWFkQ29uc3RyYWludCBzcGVjaWZpZXMgaG93IHRvIHNwcmVhZCBtYXRjaGluZyBwb2RzIGFtb25nIHRoZSBnaXZlbiB0b3BvbG9neS4iLCJwcm9wZXJ0aWVzIjp7ImxhYmVsU2VsZWN0b3IiOnsiZGVzY3JpcHRpb24iOiJMYWJlbFNlbGVjdG9yIGlzIHVzZWQgdG8gZmluZCBtYXRjaGluZyBwb2RzLiBQb2RzIHRoYXQgbWF0Y2ggdGhpcyBsYWJlbCBzZWxlY3RvciBhcmUgY291bnRlZCB0byBkZXRlcm1pbmUgdGhlIG51bWJlciBvZiBwb2RzIGluIHRoZWlyIGNvcnJlc3BvbmRpbmcgdG9wb2xvZ3kgZG9tYWluLiIsInByb3BlcnRpZXMiOnsibWF0Y2hFeHByZXNzaW9ucyI6eyJkZXNjcmlwdGlvbiI6Im1hdGNoRXhwcmVzc2lvbnMgaXMgYSBsaXN0IG9mIGxhYmVsIHNlbGVjdG9yIHJlcXVpcmVtZW50cy4gVGhlIHJlcXVpcmVtZW50cyBhcmUgQU5EZWQuIiwiaXRlbXMiOnsiZGVzY3JpcHRpb24iOiJBIGxhYmVsIHNlbGVjdG9yIHJlcXVpcmVtZW50IGlzIGEgc2VsZWN0b3IgdGhhdCBjb250YWlucyB2YWx1ZXMsIGEga2V5LCBhbmQgYW4gb3BlcmF0b3IgdGhhdCByZWxhdGVzIHRoZSBrZXkgYW5kIHZhbHVlcy4iLCJwcm9wZXJ0aWVzIjp7ImtleSI6eyJkZXNjcmlwdGlvbiI6ImtleSBpcyB0aGUgbGFiZWwga2V5IHRoYXQgdGhlIHNlbGVjdG9yIGFwcGxpZXMgdG8uIiwidHlwZSI6InN0cmluZyJ9LCJvcGVyYXRvciI6eyJkZXNjcmlwdGlvbiI6Im9wZXJhdG9yIHJlcHJlc2VudHMgYSBrZXkncyByZWxhdGlvbnNoaXAgdG8gYSBzZXQgb2YgdmFsdWVzLiBWYWxpZCBvcGVyYXRvcnMgYXJlIEluLCBOb3RJbiwgRXhpc3RzIGFuZCBEb2VzTm90RXhpc3QuIiwidHlwZSI6InN0cmluZyJ9LCJ2YWx1ZXMiOnsiZGVzY3JpcHRpb24iOiJ2YWx1ZXMgaXMgYW4gYXJyYXkgb2Ygc3RyaW5nIHZhbHVlcy4gSWYgdGhlIG9wZXJhdG9yIGlzIEluIG9yIE5vdEluLCB0aGUgdmFsdWVzIGFycmF5IG11c3QgYmUgbm9uLWVtcHR5LiBJZiB0aGUgb3BlcmF0b3IgaXMgRXhpc3RzIG9yIERvZXNOb3RFeGlzdCwgdGhlIHZhbHVlcyBhcnJheSBtdXN0IGJlIGVtcHR5LiBUaGlzIGFycmF5IGlzIHJlcGxhY2VkIGR1cmluZyBhIHN0cmF0ZWdpYyBtZXJnZSBwYXRjaC4iLCJpdGVtcyI6eyJ0eXBlIjoic3RyaW5nIn0sInR5cGUiOiJhcnJheSJ9fSwicmVxdWlyZWQiOlsia2V5Iiwib3BlcmF0b3IiXSwidHlwZSI6Im9iamVjdCJ9LCJ0eXBlIjoiYXJyYXkifSwibWF0Y2hMYWJlbHMiOnsiYWRkaXRpb25hbFByb3BlcnRpZXMiOnsidHlwZSI6InN0cmluZyJ9LCJkZXNjcmlwdGlvbiI6Im1hdGNoTGFiZWxzIGlzIGEgbWFwIG9mIHtrZXksdmFsdWV9IHBhaXJzLiBBIHNpbmdsZSB7a2V5LHZhbHVlfSBpbiB0aGUgbWF0Y2hMYWJlbHMgbWFwIGlzIGVxdWl2YWxlbnQgdG8gYW4gZWxlbWVudCBvZiBtYXRjaEV4cHJlc3Npb25zLCB3aG9zZSBrZXkgZmllbGQgaXMgXCJrZXlcIiwgdGhlIG9wZXJhdG9yIGlzIFwiSW5cIiwgYW5kIHRoZSB2YWx1ZXMgYXJyYXkgY29udGFpbnMgb25seSBcInZhbHVlXCIuIFRoZSByZXF1aXJlbWVudHMgYXJlIEFORGVkLiIsInR5cGUiOiJvYmplY3QifX0sInR5cGUiOiJvYmplY3QiLCJ4LWt1YmVybmV0ZXMtbWFwLXR5cGUiOiJhdG9taWMifSwibWF0Y2hMYWJlbEtleXMiOnsiZGVzY3JpcHRpb24iOiJNYXRjaExhYmVsS2V5cyBpcyBhIHNldCBvZiBwb2QgbGFiZWwga2V5cyB0byBzZWxlY3QgdGhlIHBvZHMgb3ZlciB3aGljaCBzcHJlYWRpbmcgd2lsbCBiZSBjYWxjdWxhdGVkLiBUaGUga2V5cyBhcmUgdXNlZCB0byBsb29rdXAgdmFsdWVzIGZyb20gdGhlIGluY29taW5nIHBvZCBsYWJlbHMsIHRob3NlIGtleS12YWx1ZSBsYWJlbHMgYXJlIEFORGVkIHdpdGggbGFiZWxTZWxlY3RvciB0byBzZWxlY3QgdGhlIGdyb3VwIG9mIGV4aXN0aW5nIHBvZHMgb3ZlciB3aGljaCBzcHJlYWRpbmcgd2lsbCBiZSBjYWxjdWxhdGVkIGZvciB0aGUgaW5jb21pbmcgcG9kLiBUaGUgc2FtZSBrZXkgaXMgZm9yYmlkZGVuIHRvIGV4aXN0IGluIGJvdGggTWF0Y2hMYWJlbEtleXMgYW5kIExhYmVsU2VsZWN0b3IuIE1hdGNoTGFiZWxLZXlzIGNhbm5vdCBiZSBzZXQgd2hlbiBMYWJlbFNlbGVjdG9yIGlzbid0IHNldC4gS2V5cyB0aGF0IGRvbid0IGV4aXN0IGluIHRoZSBpbmNvbWluZyBwb2QgbGFiZWxzIHdpbGwgYmUgaWdub3JlZC4gQSBudWxsIG9yIGVtcHR5IGxpc3QgbWVhbnMgb25seSBtYXRjaCBhZ2FpbnN0IGxhYmVsU2VsZWN0b3IuIFxuIFRoaXMgaXMgYSBiZXRhIGZpZWxkIGFuZCByZXF1aXJlcyB0aGUgTWF0Y2hMYWJlbEtleXNJblBvZFRvcG9sb2d5U3ByZWFkIGZlYXR1cmUgZ2F0ZSB0byBiZSBlbmFibGVkIChlbmFibGVkIGJ5IGRlZmF1bHQpLiIsIml0ZW1zIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6ImFycmF5IiwieC1rdWJlcm5ldGVzLWxpc3QtdHlwZSI6ImF0b21pYyJ9LCJtYXhTa2V3Ijp7ImRlc2NyaXB0aW9uIjoiTWF4U2tldyBkZXNjcmliZXMgdGhlIGRlZ3JlZSB0byB3aGljaCBwb2RzIG1heSBiZSB1bmV2ZW5seSBkaXN0cmlidXRlZC4gV2hlbiBgd2hlblVuc2F0aXNmaWFibGU9RG9Ob3RTY2hlZHVsZWAsIGl0IGlzIHRoZSBtYXhpbXVtIHBlcm1pdHRlZCBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIG51bWJlciBvZiBtYXRjaGluZyBwb2RzIGluIHRoZSB0YXJnZXQgdG9wb2xvZ3kgYW5kIHRoZSBnbG9iYWwgbWluaW11bS4gVGhlIGdsb2JhbCBtaW5pbXVtIGlzIHRoZSBtaW5pbXVtIG51bWJlciBvZiBtYXRjaGluZyBwb2RzIGluIGFuIGVsaWdpYmxlIGRvbWFpbiBvciB6ZXJvIGlmIHRoZSBudW1iZXIgb2YgZWxpZ2libGUgZG9tYWlucyBpcyBsZXNzIHRoYW4gTWluRG9tYWlucy4gRm9yIGV4YW1wbGUsIGluIGEgMy16b25lIGNsdXN0ZXIsIE1heFNrZXcgaXMgc2V0IHRvIDEsIGFuZCBwb2RzIHdpdGggdGhlIHNhbWUgbGFiZWxTZWxlY3RvciBzcHJlYWQgYXMgMi8yLzE6IEluIHRoaXMgY2FzZSwgdGhlIGdsb2JhbCBtaW5pbXVtIGlzIDEuIHwgem9uZTEgfCB6b25lMiB8IHpvbmUzIHwgfCAgUCBQICB8ICBQIFAgIHwgICBQICAgfCAtIGlmIE1heFNrZXcgaXMgMSwgaW5jb21pbmcgcG9kIGNhbiBvbmx5IGJlIHNjaGVkdWxlZCB0byB6b25lMyB0byBiZWNvbWUgMi8yLzI7IHNjaGVkdWxpbmcgaXQgb250byB6b25lMSh6b25lMikgd291bGQgbWFrZSB0aGUgQWN0dWFsU2tldygzLTEpIG9uIHpvbmUxKHpvbmUyKSB2aW9sYXRlIE1heFNrZXcoMSkuIC0gaWYgTWF4U2tldyBpcyAyLCBpbmNvbWluZyBwb2QgY2FuIGJlIHNjaGVkdWxlZCBvbnRvIGFueSB6b25lLiBXaGVuIGB3aGVuVW5zYXRpc2ZpYWJsZT1TY2hlZHVsZUFueXdheWAsIGl0IGlzIHVzZWQgdG8gZ2l2ZSBoaWdoZXIgcHJlY2VkZW5jZSB0byB0b3BvbG9naWVzIHRoYXQgc2F0aXNmeSBpdC4gSXQncyBhIHJlcXVpcmVkIGZpZWxkLiBEZWZhdWx0IHZhbHVlIGlzIDEgYW5kIDAgaXMgbm90IGFsbG93ZWQuIiwiZm9ybWF0IjoiaW50MzIiLCJ0eXBlIjoiaW50ZWdlciJ9LCJtaW5Eb21haW5zIjp7ImRlc2NyaXB0aW9uIjoiTWluRG9tYWlucyBpbmRpY2F0ZXMgYSBtaW5pbXVtIG51bWJlciBvZiBlbGlnaWJsZSBkb21haW5zLiBXaGVuIHRoZSBudW1iZXIgb2YgZWxpZ2libGUgZG9tYWlucyB3aXRoIG1hdGNoaW5nIHRvcG9sb2d5IGtleXMgaXMgbGVzcyB0aGFuIG1pbkRvbWFpbnMsIFBvZCBUb3BvbG9neSBTcHJlYWQgdHJlYXRzIFwiZ2xvYmFsIG1pbmltdW1cIiBhcyAwLCBhbmQgdGhlbiB0aGUgY2FsY3VsYXRpb24gb2YgU2tldyBpcyBwZXJmb3JtZWQuIEFuZCB3aGVuIHRoZSBudW1iZXIgb2YgZWxpZ2libGUgZG9tYWlucyB3aXRoIG1hdGNoaW5nIHRvcG9sb2d5IGtleXMgZXF1YWxzIG9yIGdyZWF0ZXIgdGhhbiBtaW5Eb21haW5zLCB0aGlzIHZhbHVlIGhhcyBubyBlZmZlY3Qgb24gc2NoZWR1bGluZy4gQXMgYSByZXN1bHQsIHdoZW4gdGhlIG51bWJlciBvZiBlbGlnaWJsZSBkb21haW5zIGlzIGxlc3MgdGhhbiBtaW5Eb21haW5zLCBzY2hlZHVsZXIgd29uJ3Qgc2NoZWR1bGUgbW9yZSB0aGFuIG1heFNrZXcgUG9kcyB0byB0aG9zZSBkb21haW5zLiBJZiB2YWx1ZSBpcyBuaWwsIHRoZSBjb25zdHJhaW50IGJlaGF2ZXMgYXMgaWYgTWluRG9tYWlucyBpcyBlcXVhbCB0byAxLiBWYWxpZCB2YWx1ZXMgYXJlIGludGVnZXJzIGdyZWF0ZXIgdGhhbiAwLiBXaGVuIHZhbHVlIGlzIG5vdCBuaWwsIFdoZW5VbnNhdGlzZmlhYmxlIG11c3QgYmUgRG9Ob3RTY2hlZHVsZS4gXG4gRm9yIGV4YW1wbGUsIGluIGEgMy16b25lIGNsdXN0ZXIsIE1heFNrZXcgaXMgc2V0IHRvIDIsIE1pbkRvbWFpbnMgaXMgc2V0IHRvIDUgYW5kIHBvZHMgd2l0aCB0aGUgc2FtZSBsYWJlbFNlbGVjdG9yIHNwcmVhZCBhcyAyLzIvMjogfCB6b25lMSB8IHpvbmUyIHwgem9uZTMgfCB8ICBQIFAgIHwgIFAgUCAgfCAgUCBQICB8IFRoZSBudW1iZXIgb2YgZG9tYWlucyBpcyBsZXNzIHRoYW4gNShNaW5Eb21haW5zKSwgc28gXCJnbG9iYWwgbWluaW11bVwiIGlzIHRyZWF0ZWQgYXMgMC4gSW4gdGhpcyBzaXR1YXRpb24sIG5ldyBwb2Qgd2l0aCB0aGUgc2FtZSBsYWJlbFNlbGVjdG9yIGNhbm5vdCBiZSBzY2hlZHVsZWQsIGJlY2F1c2UgY29tcHV0ZWQgc2tldyB3aWxsIGJlIDMoMyAtIDApIGlmIG5ldyBQb2QgaXMgc2NoZWR1bGVkIHRvIGFueSBvZiB0aGUgdGhyZWUgem9uZXMsIGl0IHdpbGwgdmlvbGF0ZSBNYXhTa2V3LiBcbiBUaGlzIGlzIGEgYmV0YSBmaWVsZCBhbmQgcmVxdWlyZXMgdGhlIE1pbkRvbWFpbnNJblBvZFRvcG9sb2d5U3ByZWFkIGZlYXR1cmUgZ2F0ZSB0byBiZSBlbmFibGVkIChlbmFibGVkIGJ5IGRlZmF1bHQpLiIsImZvcm1hdCI6ImludDMyIiwidHlwZSI6ImludGVnZXIifSwibm9kZUFmZmluaXR5UG9saWN5Ijp7ImRlc2NyaXB0aW9uIjoiTm9kZUFmZmluaXR5UG9saWN5IGluZGljYXRlcyBob3cgd2Ugd2lsbCB0cmVhdCBQb2QncyBub2RlQWZmaW5pdHkvbm9kZVNlbGVjdG9yIHdoZW4gY2FsY3VsYXRpbmcgcG9kIHRvcG9sb2d5IHNwcmVhZCBza2V3LiBPcHRpb25zIGFyZTogLSBIb25vcjogb25seSBub2RlcyBtYXRjaGluZyBub2RlQWZmaW5pdHkvbm9kZVNlbGVjdG9yIGFyZSBpbmNsdWRlZCBpbiB0aGUgY2FsY3VsYXRpb25zLiAtIElnbm9yZTogbm9kZUFmZmluaXR5L25vZGVTZWxlY3RvciBhcmUgaWdub3JlZC4gQWxsIG5vZGVzIGFyZSBpbmNsdWRlZCBpbiB0aGUgY2FsY3VsYXRpb25zLiBcbiBJZiB0aGlzIHZhbHVlIGlzIG5pbCwgdGhlIGJlaGF2aW9yIGlzIGVxdWl2YWxlbnQgdG8gdGhlIEhvbm9yIHBvbGljeS4gVGhpcyBpcyBhIGJldGEtbGV2ZWwgZmVhdHVyZSBkZWZhdWx0IGVuYWJsZWQgYnkgdGhlIE5vZGVJbmNsdXNpb25Qb2xpY3lJblBvZFRvcG9sb2d5U3ByZWFkIGZlYXR1cmUgZmxhZy4iLCJ0eXBlIjoic3RyaW5nIn0sIm5vZGVUYWludHNQb2xpY3kiOnsiZGVzY3JpcHRpb24iOiJOb2RlVGFpbnRzUG9saWN5IGluZGljYXRlcyBob3cgd2Ugd2lsbCB0cmVhdCBub2RlIHRhaW50cyB3aGVuIGNhbGN1bGF0aW5nIHBvZCB0b3BvbG9neSBzcHJlYWQgc2tldy4gT3B0aW9ucyBhcmU6IC0gSG9ub3I6IG5vZGVzIHdpdGhvdXQgdGFpbnRzLCBhbG9uZyB3aXRoIHRhaW50ZWQgbm9kZXMgZm9yIHdoaWNoIHRoZSBpbmNvbWluZyBwb2QgaGFzIGEgdG9sZXJhdGlvbiwgYXJlIGluY2x1ZGVkLiAtIElnbm9yZTogbm9kZSB0YWludHMgYXJlIGlnbm9yZWQuIEFsbCBub2RlcyBhcmUgaW5jbHVkZWQuIFxuIElmIHRoaXMgdmFsdWUgaXMgbmlsLCB0aGUgYmVoYXZpb3IgaXMgZXF1aXZhbGVudCB0byB0aGUgSWdub3JlIHBvbGljeS4gVGhpcyBpcyBhIGJldGEtbGV2ZWwgZmVhdHVyZSBkZWZhdWx0IGVuYWJsZWQgYnkgdGhlIE5vZGVJbmNsdXNpb25Qb2xpY3lJblBvZFRvcG9sb2d5U3ByZWFkIGZlYXR1cmUgZmxhZy4iLCJ0eXBlIjoic3RyaW5nIn0sInRvcG9sb2d5S2V5Ijp7ImRlc2NyaXB0aW9uIjoiVG9wb2xvZ3lLZXkgaXMgdGhlIGtleSBvZiBub2RlIGxhYmVscy4gTm9kZXMgdGhhdCBoYXZlIGEgbGFiZWwgd2l0aCB0aGlzIGtleSBhbmQgaWRlbnRpY2FsIHZhbHVlcyBhcmUgY29uc2lkZXJlZCB0byBiZSBpbiB0aGUgc2FtZSB0b3BvbG9neS4gV2UgY29uc2lkZXIgZWFjaCBcdTAwM2NrZXksIHZhbHVlXHUwMDNlIGFzIGEgXCJidWNrZXRcIiwgYW5kIHRyeSB0byBwdXQgYmFsYW5jZWQgbnVtYmVyIG9mIHBvZHMgaW50byBlYWNoIGJ1Y2tldC4gV2UgZGVmaW5lIGEgZG9tYWluIGFzIGEgcGFydGljdWxhciBpbnN0YW5jZSBvZiBhIHRvcG9sb2d5LiBBbHNvLCB3ZSBkZWZpbmUgYW4gZWxpZ2libGUgZG9tYWluIGFzIGEgZG9tYWluIHdob3NlIG5vZGVzIG1lZXQgdGhlIHJlcXVpcmVtZW50cyBvZiBub2RlQWZmaW5pdHlQb2xpY3kgYW5kIG5vZGVUYWludHNQb2xpY3kuIGUuZy4gSWYgVG9wb2xvZ3lLZXkgaXMgXCJrdWJlcm5ldGVzLmlvL2hvc3RuYW1lXCIsIGVhY2ggTm9kZSBpcyBhIGRvbWFpbiBvZiB0aGF0IHRvcG9sb2d5LiBBbmQsIGlmIFRvcG9sb2d5S2V5IGlzIFwidG9wb2xvZ3kua3ViZXJuZXRlcy5pby96b25lXCIsIGVhY2ggem9uZSBpcyBhIGRvbWFpbiBvZiB0aGF0IHRvcG9sb2d5LiBJdCdzIGEgcmVxdWlyZWQgZmllbGQuIiwidHlwZSI6InN0cmluZyJ9LCJ3aGVuVW5zYXRpc2ZpYWJsZSI6eyJkZXNjcmlwdGlvbiI6IldoZW5VbnNhdGlzZmlhYmxlIGluZGljYXRlcyBob3cgdG8gZGVhbCB3aXRoIGEgcG9kIGlmIGl0IGRvZXNuJ3Qgc2F0aXNmeSB0aGUgc3ByZWFkIGNvbnN0cmFpbnQuIC0gRG9Ob3RTY2hlZHVsZSAoZGVmYXVsdCkgdGVsbHMgdGhlIHNjaGVkdWxlciBub3QgdG8gc2NoZWR1bGUgaXQuIC0gU2NoZWR1bGVBbnl3YXkgdGVsbHMgdGhlIHNjaGVkdWxlciB0byBzY2hlZHVsZSB0aGUgcG9kIGluIGFueSBsb2NhdGlvbiwgYnV0IGdpdmluZyBoaWdoZXIgcHJlY2VkZW5jZSB0byB0b3BvbG9naWVzIHRoYXQgd291bGQgaGVscCByZWR1Y2UgdGhlIHNrZXcuIEEgY29uc3RyYWludCBpcyBjb25zaWRlcmVkIFwiVW5zYXRpc2ZpYWJsZVwiIGZvciBhbiBpbmNvbWluZyBwb2QgaWYgYW5kIG9ubHkgaWYgZXZlcnkgcG9zc2libGUgbm9kZSBhc3NpZ25tZW50IGZvciB0aGF0IHBvZCB3b3VsZCB2aW9sYXRlIFwiTWF4U2tld1wiIG9uIHNvbWUgdG9wb2xvZ3kuIEZvciBleGFtcGxlLCBpbiBhIDMtem9uZSBjbHVzdGVyLCBNYXhTa2V3IGlzIHNldCB0byAxLCBhbmQgcG9kcyB3aXRoIHRoZSBzYW1lIGxhYmVsU2VsZWN0b3Igc3ByZWFkIGFzIDMvMS8xOiB8IHpvbmUxIHwgem9uZTIgfCB6b25lMyB8IHwgUCBQIFAgfCAgIFAgICB8ICAgUCAgIHwgSWYgV2hlblVuc2F0aXNmaWFibGUgaXMgc2V0IHRvIERvTm90U2NoZWR1bGUsIGluY29taW5nIHBvZCBjYW4gb25seSBiZSBzY2hlZHVsZWQgdG8gem9uZTIoem9uZTMpIHRvIGJlY29tZSAzLzIvMSgzLzEvMikgYXMgQWN0dWFsU2tldygyLTEpIG9uIHpvbmUyKHpvbmUzKSBzYXRpc2ZpZXMgTWF4U2tldygxKS4gSW4gb3RoZXIgd29yZHMsIHRoZSBjbHVzdGVyIGNhbiBzdGlsbCBiZSBpbWJhbGFuY2VkLCBidXQgc2NoZWR1bGVyIHdvbid0IG1ha2UgaXQgKm1vcmUqIGltYmFsYW5jZWQuIEl0J3MgYSByZXF1aXJlZCBmaWVsZC4iLCJ0eXBlIjoic3RyaW5nIn19LCJyZXF1aXJlZCI6WyJtYXhTa2V3IiwidG9wb2xvZ3lLZXkiLCJ3aGVuVW5zYXRpc2ZpYWJsZSJdLCJ0eXBlIjoib2JqZWN0In0sInR5cGUiOiJhcnJheSJ9fSwidHlwZSI6Im9iamVjdCJ9LCJwcmltYXJ5QWZmaW5pdHkiOnsiZGVzY3JpcHRpb24iOiJQcmltYXJ5QWZmaW5pdHkgaXMgYW4gb3B0aW9uYWwgT1NEIHByaW1hcnktYWZmaW5pdHkgdmFsdWUgd2l0aGluIHRoZSByYW5nZSBbMCwxKS4gVGhpcyB2YWx1ZSBpbmZsdWVuY2UgdGhlIHdheSBDZXBoJ3MgQ1JVU0ggc2VsZWN0aW9uIG9mIHByaW1hcnkgT1NEcy4gTG93ZXIgdmFsdWUgcmVkdWNlIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIChlc3BlY2lhbGx5IG9uIHJlYWQgb3BlcmF0aW9ucykuIElmIG5vdCBzZXQsIGRlZmF1bHQgdmFsdWUgaXMgMS4gaHR0cHM6Ly9kb2NzLmNlcGguY29tL2VuL2xhdGVzdC9yYWRvcy9vcGVyYXRpb25zL2NydXNoLW1hcC8jcHJpbWFyeS1hZmZpbml0eSIsInBhdHRlcm4iOiJeMC5bMC05XSskIiwidHlwZSI6InN0cmluZyJ9LCJyZXBsaWNhIjp7ImRlc2NyaXB0aW9uIjoiUmVwbGljYSBpcyB0aGUgbnVtYmVyIG9mIFN0b3JhZ2VDbGFzc0RldmljZVNldHMgZm9yIHRoaXMgU3RvcmFnZURldmljZVNldCIsIm1pbmltdW0iOjEsInR5cGUiOiJpbnRlZ2VyIn0sInJlc291cmNlcyI6eyJkZXNjcmlwdGlvbiI6IlJlc291cmNlUmVxdWlyZW1lbnRzIGRlc2NyaWJlcyB0aGUgY29tcHV0ZSByZXNvdXJjZSByZXF1aXJlbWVudHMuIiwicHJvcGVydGllcyI6eyJjbGFpbXMiOnsiZGVzY3JpcHRpb24iOiJDbGFpbXMgbGlzdHMgdGhlIG5hbWVzIG9mIHJlc291cmNlcywgZGVmaW5lZCBpbiBzcGVjLnJlc291cmNlQ2xhaW1zLCB0aGF0IGFyZSB1c2VkIGJ5IHRoaXMgY29udGFpbmVyLiBcbiBUaGlzIGlzIGFuIGFscGhhIGZpZWxkIGFuZCByZXF1aXJlcyBlbmFibGluZyB0aGUgRHluYW1pY1Jlc291cmNlQWxsb2NhdGlvbiBmZWF0dXJlIGdhdGUuIFxuIFRoaXMgZmllbGQgaXMgaW1tdXRhYmxlLiBJdCBjYW4gb25seSBiZSBzZXQgZm9yIGNvbnRhaW5lcnMuIiwiaXRlbXMiOnsiZGVzY3JpcHRpb24iOiJSZXNvdXJjZUNsYWltIHJlZmVyZW5jZXMgb25lIGVudHJ5IGluIFBvZFNwZWMuUmVzb3VyY2VDbGFpbXMuIiwicHJvcGVydGllcyI6eyJuYW1lIjp7ImRlc2NyaXB0aW9uIjoiTmFtZSBtdXN0IG1hdGNoIHRoZSBuYW1lIG9mIG9uZSBlbnRyeSBpbiBwb2Quc3BlYy5yZXNvdXJjZUNsYWltcyBvZiB0aGUgUG9kIHdoZXJlIHRoaXMgZmllbGQgaXMgdXNlZC4gSXQgbWFrZXMgdGhhdCByZXNvdXJjZSBhdmFpbGFibGUgaW5zaWRlIGEgY29udGFpbmVyLiIsInR5cGUiOiJzdHJpbmcifX0sInJlcXVpcmVkIjpbIm5hbWUiXSwidHlwZSI6Im9iamVjdCJ9LCJ0eXBlIjoiYXJyYXkiLCJ4LWt1YmVybmV0ZXMtbGlzdC1tYXAta2V5cyI6WyJuYW1lIl0sIngta3ViZXJuZXRlcy1saXN0LXR5cGUiOiJtYXAifSwibGltaXRzIjp7ImFkZGl0aW9uYWxQcm9wZXJ0aWVzIjp7ImFueU9mIjpbeyJ0eXBlIjoiaW50ZWdlciJ9LHsidHlwZSI6InN0cmluZyJ9XSwicGF0dGVybiI6Il4oXFwrfC0pPygoWzAtOV0rKFxcLlswLTldKik/KXwoXFwuWzAtOV0rKSkoKFtLTUdUUEVdaSl8W251bWtNR1RQRV18KFtlRV0oXFwrfC0pPygoWzAtOV0rKFxcLlswLTldKik/KXwoXFwuWzAtOV0rKSkpKT8kIiwieC1rdWJlcm5ldGVzLWludC1vci1zdHJpbmciOnRydWV9LCJkZXNjcmlwdGlvbiI6IkxpbWl0cyBkZXNjcmliZXMgdGhlIG1heGltdW0gYW1vdW50IG9mIGNvbXB1dGUgcmVzb3VyY2VzIGFsbG93ZWQuIE1vcmUgaW5mbzogaHR0cHM6Ly9rdWJlcm5ldGVzLmlvL2RvY3MvY29uY2VwdHMvY29uZmlndXJhdGlvbi9tYW5hZ2UtcmVzb3VyY2VzLWNvbnRhaW5lcnMvIiwidHlwZSI6Im9iamVjdCJ9LCJyZXF1ZXN0cyI6eyJhZGRpdGlvbmFsUHJvcGVydGllcyI6eyJhbnlPZiI6W3sidHlwZSI6ImludGVnZXIifSx7InR5cGUiOiJzdHJpbmcifV0sInBhdHRlcm4iOiJeKFxcK3wtKT8oKFswLTldKyhcXC5bMC05XSopPyl8KFxcLlswLTldKykpKChbS01HVFBFXWkpfFtudW1rTUdUUEVdfChbZUVdKFxcK3wtKT8oKFswLTldKyhcXC5bMC05XSopPyl8KFxcLlswLTldKykpKSk/JCIsIngta3ViZXJuZXRlcy1pbnQtb3Itc3RyaW5nIjp0cnVlfSwiZGVzY3JpcHRpb24iOiJSZXF1ZXN0cyBkZXNjcmliZXMgdGhlIG1pbmltdW0gYW1vdW50IG9mIGNvbXB1dGUgcmVzb3VyY2VzIHJlcXVpcmVkLiBJZiBSZXF1ZXN0cyBpcyBvbWl0dGVkIGZvciBhIGNvbnRhaW5lciwgaXQgZGVmYXVsdHMgdG8gTGltaXRzIGlmIHRoYXQgaXMgZXhwbGljaXRseSBzcGVjaWZpZWQsIG90aGVyd2lzZSB0byBhbiBpbXBsZW1lbnRhdGlvbi1kZWZpbmVkIHZhbHVlLiBSZXF1ZXN0cyBjYW5ub3QgZXhjZWVkIExpbWl0cy4gTW9yZSBpbmZvOiBodHRwczovL2t1YmVybmV0ZXMuaW8vZG9jcy9jb25jZXB0cy9jb25maWd1cmF0aW9uL21hbmFnZS1yZXNvdXJjZXMtY29udGFpbmVycy8iLCJ0eXBlIjoib2JqZWN0In19LCJ0eXBlIjoib2JqZWN0In0sInRvcG9sb2d5S2V5Ijp7ImRlc2NyaXB0aW9uIjoiVG9wb2xvZ3lLZXkgaXMgdGhlIEt1YmVybmV0ZXMgdG9wb2xvZ3kgbGFiZWwgdGhhdCB0aGUgU3RvcmFnZUNsYXNzRGV2aWNlU2V0cyB3aWxsIGJlIGRpc3RyaWJ1dGVkIGFjcm9zcy4gSWdub3JlZCBpZiBQbGFjZW1lbnQgaXMgc2V0IiwidHlwZSI6InN0cmluZyJ9LCJ3YWxQVkNUZW1wbGF0ZSI6eyJkZXNjcmlwdGlvbiI6IlBlcnNpc3RlbnRWb2x1bWVDbGFpbSBpcyBhIHVzZXIncyByZXF1ZXN0IGZvciBhbmQgY2xhaW0gdG8gYSBwZXJzaXN0ZW50IHZvbHVtZSIsInByb3BlcnRpZXMiOnsiYXBpVmVyc2lvbiI6eyJkZXNjcmlwdGlvbiI6IkFQSVZlcnNpb24gZGVmaW5lcyB0aGUgdmVyc2lvbmVkIHNjaGVtYSBvZiB0aGlzIHJlcHJlc2VudGF0aW9uIG9mIGFuIG9iamVjdC4gU2VydmVycyBzaG91bGQgY29udmVydCByZWNvZ25pemVkIHNjaGVtYXMgdG8gdGhlIGxhdGVzdCBpbnRlcm5hbCB2YWx1ZSwgYW5kIG1heSByZWplY3QgdW5yZWNvZ25pemVkIHZhbHVlcy4gTW9yZSBpbmZvOiBodHRwczovL2dpdC5rOHMuaW8vY29tbXVuaXR5L2NvbnRyaWJ1dG9ycy9kZXZlbC9zaWctYXJjaGl0ZWN0dXJlL2FwaS1jb252ZW50aW9ucy5tZCNyZXNvdXJjZXMiLCJ0eXBlIjoic3RyaW5nIn0sImtpbmQiOnsiZGVzY3JpcHRpb24iOiJLaW5kIGlzIGEgc3RyaW5nIHZhbHVlIHJlcHJlc2VudGluZyB0aGUgUkVTVCByZXNvdXJjZSB0aGlzIG9iamVjdCByZXByZXNlbnRzLiBTZXJ2ZXJzIG1heSBpbmZlciB0aGlzIGZyb20gdGhlIGVuZHBvaW50IHRoZSBjbGllbnQgc3VibWl0cyByZXF1ZXN0cyB0by4gQ2Fubm90IGJlIHVwZGF0ZWQuIEluIENhbWVsQ2FzZS4gTW9yZSBpbmZvOiBodHRwczovL2dpdC5rOHMuaW8vY29tbXVuaXR5L2NvbnRyaWJ1dG9ycy9kZXZlbC9zaWctYXJjaGl0ZWN0dXJlL2FwaS1jb252ZW50aW9ucy5tZCN0eXBlcy1raW5kcyIsInR5cGUiOiJzdHJpbmcifSwibWV0YWRhdGEiOnsiZGVzY3JpcHRpb24iOiJTdGFuZGFyZCBvYmplY3QncyBtZXRhZGF0YS4gTW9yZSBpbmZvOiBodHRwczovL2dpdC5rOHMuaW8vY29tbXVuaXR5L2NvbnRyaWJ1dG9ycy9kZXZlbC9zaWctYXJjaGl0ZWN0dXJlL2FwaS1jb252ZW50aW9ucy5tZCNtZXRhZGF0YSIsInByb3BlcnRpZXMiOnsiYW5ub3RhdGlvbnMiOnsiYWRkaXRpb25hbFByb3BlcnRpZXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjoib2JqZWN0In0sImZpbmFsaXplcnMiOnsiaXRlbXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjoiYXJyYXkifSwibGFiZWxzIjp7ImFkZGl0aW9uYWxQcm9wZXJ0aWVzIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6Im9iamVjdCJ9LCJuYW1lIjp7InR5cGUiOiJzdHJpbmcifSwibmFtZXNwYWNlIjp7InR5cGUiOiJzdHJpbmcifX0sInR5cGUiOiJvYmplY3QifSwic3BlYyI6eyJkZXNjcmlwdGlvbiI6InNwZWMgZGVmaW5lcyB0aGUgZGVzaXJlZCBjaGFyYWN0ZXJpc3RpY3Mgb2YgYSB2b2x1bWUgcmVxdWVzdGVkIGJ5IGEgcG9kIGF1dGhvci4gTW9yZSBpbmZvOiBodHRwczovL2t1YmVybmV0ZXMuaW8vZG9jcy9jb25jZXB0cy9zdG9yYWdlL3BlcnNpc3RlbnQtdm9sdW1lcyNwZXJzaXN0ZW50dm9sdW1lY2xhaW1zIiwicHJvcGVydGllcyI6eyJhY2Nlc3NNb2RlcyI6eyJkZXNjcmlwdGlvbiI6ImFjY2Vzc01vZGVzIGNvbnRhaW5zIHRoZSBkZXNpcmVkIGFjY2VzcyBtb2RlcyB0aGUgdm9sdW1lIHNob3VsZCBoYXZlLiBNb3JlIGluZm86IGh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL2NvbmNlcHRzL3N0b3JhZ2UvcGVyc2lzdGVudC12b2x1bWVzI2FjY2Vzcy1tb2Rlcy0xIiwiaXRlbXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjoiYXJyYXkifSwiZGF0YVNvdXJjZSI6eyJkZXNjcmlwdGlvbiI6ImRhdGFTb3VyY2UgZmllbGQgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBlaXRoZXI6ICogQW4gZXhpc3RpbmcgVm9sdW1lU25hcHNob3Qgb2JqZWN0IChzbmFwc2hvdC5zdG9yYWdlLms4cy5pby9Wb2x1bWVTbmFwc2hvdCkgKiBBbiBleGlzdGluZyBQVkMgKFBlcnNpc3RlbnRWb2x1bWVDbGFpbSkgSWYgdGhlIHByb3Zpc2lvbmVyIG9yIGFuIGV4dGVybmFsIGNvbnRyb2xsZXIgY2FuIHN1cHBvcnQgdGhlIHNwZWNpZmllZCBkYXRhIHNvdXJjZSwgaXQgd2lsbCBjcmVhdGUgYSBuZXcgdm9sdW1lIGJhc2VkIG9uIHRoZSBjb250ZW50cyBvZiB0aGUgc3BlY2lmaWVkIGRhdGEgc291cmNlLiBXaGVuIHRoZSBBbnlWb2x1bWVEYXRhU291cmNlIGZlYXR1cmUgZ2F0ZSBpcyBlbmFibGVkLCBkYXRhU291cmNlIGNvbnRlbnRzIHdpbGwgYmUgY29waWVkIHRvIGRhdGFTb3VyY2VSZWYsIGFuZCBkYXRhU291cmNlUmVmIGNvbnRlbnRzIHdpbGwgYmUgY29waWVkIHRvIGRhdGFTb3VyY2Ugd2hlbiBkYXRhU291cmNlUmVmLm5hbWVzcGFjZSBpcyBub3Qgc3BlY2lmaWVkLiBJZiB0aGUgbmFtZXNwYWNlIGlzIHNwZWNpZmllZCwgdGhlbiBkYXRhU291cmNlUmVmIHdpbGwgbm90IGJlIGNvcGllZCB0byBkYXRhU291cmNlLiIsInByb3BlcnRpZXMiOnsiYXBpR3JvdXAiOnsiZGVzY3JpcHRpb24iOiJBUElHcm91cCBpcyB0aGUgZ3JvdXAgZm9yIHRoZSByZXNvdXJjZSBiZWluZyByZWZlcmVuY2VkLiBJZiBBUElHcm91cCBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgc3BlY2lmaWVkIEtpbmQgbXVzdCBiZSBpbiB0aGUgY29yZSBBUEkgZ3JvdXAuIEZvciBhbnkgb3RoZXIgdGhpcmQtcGFydHkgdHlwZXMsIEFQSUdyb3VwIGlzIHJlcXVpcmVkLiIsInR5cGUiOiJzdHJpbmcifSwia2luZCI6eyJkZXNjcmlwdGlvbiI6IktpbmQgaXMgdGhlIHR5cGUgb2YgcmVzb3VyY2UgYmVpbmcgcmVmZXJlbmNlZCIsInR5cGUiOiJzdHJpbmcifSwibmFtZSI6eyJkZXNjcmlwdGlvbiI6Ik5hbWUgaXMgdGhlIG5hbWUgb2YgcmVzb3VyY2UgYmVpbmcgcmVmZXJlbmNlZCIsInR5cGUiOiJzdHJpbmcifX0sInJlcXVpcmVkIjpbImtpbmQiLCJuYW1lIl0sInR5cGUiOiJvYmplY3QiLCJ4LWt1YmVybmV0ZXMtbWFwLXR5cGUiOiJhdG9taWMifSwiZGF0YVNvdXJjZVJlZiI6eyJkZXNjcmlwdGlvbiI6ImRhdGFTb3VyY2VSZWYgc3BlY2lmaWVzIHRoZSBvYmplY3QgZnJvbSB3aGljaCB0byBwb3B1bGF0ZSB0aGUgdm9sdW1lIHdpdGggZGF0YSwgaWYgYSBub24tZW1wdHkgdm9sdW1lIGlzIGRlc2lyZWQuIFRoaXMgbWF5IGJlIGFueSBvYmplY3QgZnJvbSBhIG5vbi1lbXB0eSBBUEkgZ3JvdXAgKG5vbiBjb3JlIG9iamVjdCkgb3IgYSBQZXJzaXN0ZW50Vm9sdW1lQ2xhaW0gb2JqZWN0LiBXaGVuIHRoaXMgZmllbGQgaXMgc3BlY2lmaWVkLCB2b2x1bWUgYmluZGluZyB3aWxsIG9ubHkgc3VjY2VlZCBpZiB0aGUgdHlwZSBvZiB0aGUgc3BlY2lmaWVkIG9iamVjdCBtYXRjaGVzIHNvbWUgaW5zdGFsbGVkIHZvbHVtZSBwb3B1bGF0b3Igb3IgZHluYW1pYyBwcm92aXNpb25lci4gVGhpcyBmaWVsZCB3aWxsIHJlcGxhY2UgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIGRhdGFTb3VyY2UgZmllbGQgYW5kIGFzIHN1Y2ggaWYgYm90aCBmaWVsZHMgYXJlIG5vbi1lbXB0eSwgdGhleSBtdXN0IGhhdmUgdGhlIHNhbWUgdmFsdWUuIEZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSwgd2hlbiBuYW1lc3BhY2UgaXNuJ3Qgc3BlY2lmaWVkIGluIGRhdGFTb3VyY2VSZWYsIGJvdGggZmllbGRzIChkYXRhU291cmNlIGFuZCBkYXRhU291cmNlUmVmKSB3aWxsIGJlIHNldCB0byB0aGUgc2FtZSB2YWx1ZSBhdXRvbWF0aWNhbGx5IGlmIG9uZSBvZiB0aGVtIGlzIGVtcHR5IGFuZCB0aGUgb3RoZXIgaXMgbm9uLWVtcHR5LiBXaGVuIG5hbWVzcGFjZSBpcyBzcGVjaWZpZWQgaW4gZGF0YVNvdXJjZVJlZiwgZGF0YVNvdXJjZSBpc24ndCBzZXQgdG8gdGhlIHNhbWUgdmFsdWUgYW5kIG11c3QgYmUgZW1wdHkuIFRoZXJlIGFyZSB0aHJlZSBpbXBvcnRhbnQgZGlmZmVyZW5jZXMgYmV0d2VlbiBkYXRhU291cmNlIGFuZCBkYXRhU291cmNlUmVmOiAqIFdoaWxlIGRhdGFTb3VyY2Ugb25seSBhbGxvd3MgdHdvIHNwZWNpZmljIHR5cGVzIG9mIG9iamVjdHMsIGRhdGFTb3VyY2VSZWYgYWxsb3dzIGFueSBub24tY29yZSBvYmplY3QsIGFzIHdlbGwgYXMgUGVyc2lzdGVudFZvbHVtZUNsYWltIG9iamVjdHMuICogV2hpbGUgZGF0YVNvdXJjZSBpZ25vcmVzIGRpc2FsbG93ZWQgdmFsdWVzIChkcm9wcGluZyB0aGVtKSwgZGF0YVNvdXJjZVJlZiBwcmVzZXJ2ZXMgYWxsIHZhbHVlcywgYW5kIGdlbmVyYXRlcyBhbiBlcnJvciBpZiBhIGRpc2FsbG93ZWQgdmFsdWUgaXMgc3BlY2lmaWVkLiAqIFdoaWxlIGRhdGFTb3VyY2Ugb25seSBhbGxvd3MgbG9jYWwgb2JqZWN0cywgZGF0YVNvdXJjZVJlZiBhbGxvd3Mgb2JqZWN0cyBpbiBhbnkgbmFtZXNwYWNlcy4gKEJldGEpIFVzaW5nIHRoaXMgZmllbGQgcmVxdWlyZXMgdGhlIEFueVZvbHVtZURhdGFTb3VyY2UgZmVhdHVyZSBnYXRlIHRvIGJlIGVuYWJsZWQuIChBbHBoYSkgVXNpbmcgdGhlIG5hbWVzcGFjZSBmaWVsZCBvZiBkYXRhU291cmNlUmVmIHJlcXVpcmVzIHRoZSBDcm9zc05hbWVzcGFjZVZvbHVtZURhdGFTb3VyY2UgZmVhdHVyZSBnYXRlIHRvIGJlIGVuYWJsZWQuIiwicHJvcGVydGllcyI6eyJhcGlHcm91cCI6eyJkZXNjcmlwdGlvbiI6IkFQSUdyb3VwIGlzIHRoZSBncm91cCBmb3IgdGhlIHJlc291cmNlIGJlaW5nIHJlZmVyZW5jZWQuIElmIEFQSUdyb3VwIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBzcGVjaWZpZWQgS2luZCBtdXN0IGJlIGluIHRoZSBjb3JlIEFQSSBncm91cC4gRm9yIGFueSBvdGhlciB0aGlyZC1wYXJ0eSB0eXBlcywgQVBJR3JvdXAgaXMgcmVxdWlyZWQuIiwidHlwZSI6InN0cmluZyJ9LCJraW5kIjp7ImRlc2NyaXB0aW9uIjoiS2luZCBpcyB0aGUgdHlwZSBvZiByZXNvdXJjZSBiZWluZyByZWZlcmVuY2VkIiwidHlwZSI6InN0cmluZyJ9LCJuYW1lIjp7ImRlc2NyaXB0aW9uIjoiTmFtZSBpcyB0aGUgbmFtZSBvZiByZXNvdXJjZSBiZWluZyByZWZlcmVuY2VkIiwidHlwZSI6InN0cmluZyJ9LCJuYW1lc3BhY2UiOnsiZGVzY3JpcHRpb24iOiJOYW1lc3BhY2UgaXMgdGhlIG5hbWVzcGFjZSBvZiByZXNvdXJjZSBiZWluZyByZWZlcmVuY2VkIE5vdGUgdGhhdCB3aGVuIGEgbmFtZXNwYWNlIGlzIHNwZWNpZmllZCwgYSBnYXRld2F5Lm5ldHdvcmtpbmcuazhzLmlvL1JlZmVyZW5jZUdyYW50IG9iamVjdCBpcyByZXF1aXJlZCBpbiB0aGUgcmVmZXJlbnQgbmFtZXNwYWNlIHRvIGFsbG93IHRoYXQgbmFtZXNwYWNlJ3Mgb3duZXIgdG8gYWNjZXB0IHRoZSByZWZlcmVuY2UuIFNlZSB0aGUgUmVmZXJlbmNlR3JhbnQgZG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy4gKEFscGhhKSBUaGlzIGZpZWxkIHJlcXVpcmVzIHRoZSBDcm9zc05hbWVzcGFjZVZvbHVtZURhdGFTb3VyY2UgZmVhdHVyZSBnYXRlIHRvIGJlIGVuYWJsZWQuIiwidHlwZSI6InN0cmluZyJ9fSwicmVxdWlyZWQiOlsia2luZCIsIm5hbWUiXSwidHlwZSI6Im9iamVjdCJ9LCJyZXNvdXJjZXMiOnsiZGVzY3JpcHRpb24iOiJyZXNvdXJjZXMgcmVwcmVzZW50cyB0aGUgbWluaW11bSByZXNvdXJjZXMgdGhlIHZvbHVtZSBzaG91bGQgaGF2ZS4gSWYgUmVjb3ZlclZvbHVtZUV4cGFuc2lvbkZhaWx1cmUgZmVhdHVyZSBpcyBlbmFibGVkIHVzZXJzIGFyZSBhbGxvd2VkIHRvIHNwZWNpZnkgcmVzb3VyY2UgcmVxdWlyZW1lbnRzIHRoYXQgYXJlIGxvd2VyIHRoYW4gcHJldmlvdXMgdmFsdWUgYnV0IG11c3Qgc3RpbGwgYmUgaGlnaGVyIHRoYW4gY2FwYWNpdHkgcmVjb3JkZWQgaW4gdGhlIHN0YXR1cyBmaWVsZCBvZiB0aGUgY2xhaW0uIE1vcmUgaW5mbzogaHR0cHM6Ly9rdWJlcm5ldGVzLmlvL2RvY3MvY29uY2VwdHMvc3RvcmFnZS9wZXJzaXN0ZW50LXZvbHVtZXMjcmVzb3VyY2VzIiwicHJvcGVydGllcyI6eyJsaW1pdHMiOnsiYWRkaXRpb25hbFByb3BlcnRpZXMiOnsiYW55T2YiOlt7InR5cGUiOiJpbnRlZ2VyIn0seyJ0eXBlIjoic3RyaW5nIn1dLCJwYXR0ZXJuIjoiXihcXCt8LSk/KChbMC05XSsoXFwuWzAtOV0qKT8pfChcXC5bMC05XSspKSgoW0tNR1RQRV1pKXxbbnVta01HVFBFXXwoW2VFXShcXCt8LSk/KChbMC05XSsoXFwuWzAtOV0qKT8pfChcXC5bMC05XSspKSkpPyQiLCJ4LWt1YmVybmV0ZXMtaW50LW9yLXN0cmluZyI6dHJ1ZX0sImRlc2NyaXB0aW9uIjoiTGltaXRzIGRlc2NyaWJlcyB0aGUgbWF4aW11bSBhbW91bnQgb2YgY29tcHV0ZSByZXNvdXJjZXMgYWxsb3dlZC4gTW9yZSBpbmZvOiBodHRwczovL2t1YmVybmV0ZXMuaW8vZG9jcy9jb25jZXB0cy9jb25maWd1cmF0aW9uL21hbmFnZS1yZXNvdXJjZXMtY29udGFpbmVycy8iLCJ0eXBlIjoib2JqZWN0In0sInJlcXVlc3RzIjp7ImFkZGl0aW9uYWxQcm9wZXJ0aWVzIjp7ImFueU9mIjpbeyJ0eXBlIjoiaW50ZWdlciJ9LHsidHlwZSI6InN0cmluZyJ9XSwicGF0dGVybiI6Il4oXFwrfC0pPygoWzAtOV0rKFxcLlswLTldKik/KXwoXFwuWzAtOV0rKSkoKFtLTUdUUEVdaSl8W251bWtNR1RQRV18KFtlRV0oXFwrfC0pPygoWzAtOV0rKFxcLlswLTldKik/KXwoXFwuWzAtOV0rKSkpKT8kIiwieC1rdWJlcm5ldGVzLWludC1vci1zdHJpbmciOnRydWV9LCJkZXNjcmlwdGlvbiI6IlJlcXVlc3RzIGRlc2NyaWJlcyB0aGUgbWluaW11bSBhbW91bnQgb2YgY29tcHV0ZSByZXNvdXJjZXMgcmVxdWlyZWQuIElmIFJlcXVlc3RzIGlzIG9taXR0ZWQgZm9yIGEgY29udGFpbmVyLCBpdCBkZWZhdWx0cyB0byBMaW1pdHMgaWYgdGhhdCBpcyBleHBsaWNpdGx5IHNwZWNpZmllZCwgb3RoZXJ3aXNlIHRvIGFuIGltcGxlbWVudGF0aW9uLWRlZmluZWQgdmFsdWUuIFJlcXVlc3RzIGNhbm5vdCBleGNlZWQgTGltaXRzLiBNb3JlIGluZm86IGh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL2NvbmNlcHRzL2NvbmZpZ3VyYXRpb24vbWFuYWdlLXJlc291cmNlcy1jb250YWluZXJzLyIsInR5cGUiOiJvYmplY3QifX0sInR5cGUiOiJvYmplY3QifSwic2VsZWN0b3IiOnsiZGVzY3JpcHRpb24iOiJzZWxlY3RvciBpcyBhIGxhYmVsIHF1ZXJ5IG92ZXIgdm9sdW1lcyB0byBjb25zaWRlciBmb3IgYmluZGluZy4iLCJwcm9wZXJ0aWVzIjp7Im1hdGNoRXhwcmVzc2lvbnMiOnsiZGVzY3JpcHRpb24iOiJtYXRjaEV4cHJlc3Npb25zIGlzIGEgbGlzdCBvZiBsYWJlbCBzZWxlY3RvciByZXF1aXJlbWVudHMuIFRoZSByZXF1aXJlbWVudHMgYXJlIEFORGVkLiIsIml0ZW1zIjp7ImRlc2NyaXB0aW9uIjoiQSBsYWJlbCBzZWxlY3RvciByZXF1aXJlbWVudCBpcyBhIHNlbGVjdG9yIHRoYXQgY29udGFpbnMgdmFsdWVzLCBhIGtleSwgYW5kIGFuIG9wZXJhdG9yIHRoYXQgcmVsYXRlcyB0aGUga2V5IGFuZCB2YWx1ZXMuIiwicHJvcGVydGllcyI6eyJrZXkiOnsiZGVzY3JpcHRpb24iOiJrZXkgaXMgdGhlIGxhYmVsIGtleSB0aGF0IHRoZSBzZWxlY3RvciBhcHBsaWVzIHRvLiIsInR5cGUiOiJzdHJpbmcifSwib3BlcmF0b3IiOnsiZGVzY3JpcHRpb24iOiJvcGVyYXRvciByZXByZXNlbnRzIGEga2V5J3MgcmVsYXRpb25zaGlwIHRvIGEgc2V0IG9mIHZhbHVlcy4gVmFsaWQgb3BlcmF0b3JzIGFyZSBJbiwgTm90SW4sIEV4aXN0cyBhbmQgRG9lc05vdEV4aXN0LiIsInR5cGUiOiJzdHJpbmcifSwidmFsdWVzIjp7ImRlc2NyaXB0aW9uIjoidmFsdWVzIGlzIGFuIGFycmF5IG9mIHN0cmluZyB2YWx1ZXMuIElmIHRoZSBvcGVyYXRvciBpcyBJbiBvciBOb3RJbiwgdGhlIHZhbHVlcyBhcnJheSBtdXN0IGJlIG5vbi1lbXB0eS4gSWYgdGhlIG9wZXJhdG9yIGlzIEV4aXN0cyBvciBEb2VzTm90RXhpc3QsIHRoZSB2YWx1ZXMgYXJyYXkgbXVzdCBiZSBlbXB0eS4gVGhpcyBhcnJheSBpcyByZXBsYWNlZCBkdXJpbmcgYSBzdHJhdGVnaWMgbWVyZ2UgcGF0Y2guIiwiaXRlbXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjoiYXJyYXkifX0sInJlcXVpcmVkIjpbImtleSIsIm9wZXJhdG9yIl0sInR5cGUiOiJvYmplY3QifSwidHlwZSI6ImFycmF5In0sIm1hdGNoTGFiZWxzIjp7ImFkZGl0aW9uYWxQcm9wZXJ0aWVzIjp7InR5cGUiOiJzdHJpbmcifSwiZGVzY3JpcHRpb24iOiJtYXRjaExhYmVscyBpcyBhIG1hcCBvZiB7a2V5LHZhbHVlfSBwYWlycy4gQSBzaW5nbGUge2tleSx2YWx1ZX0gaW4gdGhlIG1hdGNoTGFiZWxzIG1hcCBpcyBlcXVpdmFsZW50IHRvIGFuIGVsZW1lbnQgb2YgbWF0Y2hFeHByZXNzaW9ucywgd2hvc2Uga2V5IGZpZWxkIGlzIFwia2V5XCIsIHRoZSBvcGVyYXRvciBpcyBcIkluXCIsIGFuZCB0aGUgdmFsdWVzIGFycmF5IGNvbnRhaW5zIG9ubHkgXCJ2YWx1ZVwiLiBUaGUgcmVxdWlyZW1lbnRzIGFyZSBBTkRlZC4iLCJ0eXBlIjoib2JqZWN0In19LCJ0eXBlIjoib2JqZWN0IiwieC1rdWJlcm5ldGVzLW1hcC10eXBlIjoiYXRvbWljIn0sInN0b3JhZ2VDbGFzc05hbWUiOnsiZGVzY3JpcHRpb24iOiJzdG9yYWdlQ2xhc3NOYW1lIGlzIHRoZSBuYW1lIG9mIHRoZSBTdG9yYWdlQ2xhc3MgcmVxdWlyZWQgYnkgdGhlIGNsYWltLiBNb3JlIGluZm86IGh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL2NvbmNlcHRzL3N0b3JhZ2UvcGVyc2lzdGVudC12b2x1bWVzI2NsYXNzLTEiLCJ0eXBlIjoic3RyaW5nIn0sInZvbHVtZUF0dHJpYnV0ZXNDbGFzc05hbWUiOnsiZGVzY3JpcHRpb24iOiJ2b2x1bWVBdHRyaWJ1dGVzQ2xhc3NOYW1lIG1heSBiZSB1c2VkIHRvIHNldCB0aGUgVm9sdW1lQXR0cmlidXRlc0NsYXNzIHVzZWQgYnkgdGhpcyBjbGFpbS4gSWYgc3BlY2lmaWVkLCB0aGUgQ1NJIGRyaXZlciB3aWxsIGNyZWF0ZSBvciB1cGRhdGUgdGhlIHZvbHVtZSB3aXRoIHRoZSBhdHRyaWJ1dGVzIGRlZmluZWQgaW4gdGhlIGNvcnJlc3BvbmRpbmcgVm9sdW1lQXR0cmlidXRlc0NsYXNzLiBUaGlzIGhhcyBhIGRpZmZlcmVudCBwdXJwb3NlIHRoYW4gc3RvcmFnZUNsYXNzTmFtZSwgaXQgY2FuIGJlIGNoYW5nZWQgYWZ0ZXIgdGhlIGNsYWltIGlzIGNyZWF0ZWQuIEFuIGVtcHR5IHN0cmluZyB2YWx1ZSBtZWFucyB0aGF0IG5vIFZvbHVtZUF0dHJpYnV0ZXNDbGFzcyB3aWxsIGJlIGFwcGxpZWQgdG8gdGhlIGNsYWltIGJ1dCBpdCdzIG5vdCBhbGxvd2VkIHRvIHJlc2V0IHRoaXMgZmllbGQgdG8gZW1wdHkgc3RyaW5nIG9uY2UgaXQgaXMgc2V0LiBJZiB1bnNwZWNpZmllZCBhbmQgdGhlIFBlcnNpc3RlbnRWb2x1bWVDbGFpbSBpcyB1bmJvdW5kLCB0aGUgZGVmYXVsdCBWb2x1bWVBdHRyaWJ1dGVzQ2xhc3Mgd2lsbCBiZSBzZXQgYnkgdGhlIHBlcnNpc3RlbnR2b2x1bWUgY29udHJvbGxlciBpZiBpdCBleGlzdHMuIElmIHRoZSByZXNvdXJjZSByZWZlcnJlZCB0byBieSB2b2x1bWVBdHRyaWJ1dGVzQ2xhc3MgZG9lcyBub3QgZXhpc3QsIHRoaXMgUGVyc2lzdGVudFZvbHVtZUNsYWltIHdpbGwgYmUgc2V0IHRvIGEgUGVuZGluZyBzdGF0ZSwgYXMgcmVmbGVjdGVkIGJ5IHRoZSBtb2RpZnlWb2x1bWVTdGF0dXMgZmllbGQsIHVudGlsIHN1Y2ggYXMgYSByZXNvdXJjZSBleGlzdHMuIE1vcmUgaW5mbzogaHR0cHM6Ly9rdWJlcm5ldGVzLmlvL2RvY3MvY29uY2VwdHMvc3RvcmFnZS9wZXJzaXN0ZW50LXZvbHVtZXMjdm9sdW1lYXR0cmlidXRlc2NsYXNzIChBbHBoYSkgVXNpbmcgdGhpcyBmaWVsZCByZXF1aXJlcyB0aGUgVm9sdW1lQXR0cmlidXRlc0NsYXNzIGZlYXR1cmUgZ2F0ZSB0byBiZSBlbmFibGVkLiIsInR5cGUiOiJzdHJpbmcifSwidm9sdW1lTW9kZSI6eyJkZXNjcmlwdGlvbiI6InZvbHVtZU1vZGUgZGVmaW5lcyB3aGF0IHR5cGUgb2Ygdm9sdW1lIGlzIHJlcXVpcmVkIGJ5IHRoZSBjbGFpbS4gVmFsdWUgb2YgRmlsZXN5c3RlbSBpcyBpbXBsaWVkIHdoZW4gbm90IGluY2x1ZGVkIGluIGNsYWltIHNwZWMuIiwidHlwZSI6InN0cmluZyJ9LCJ2b2x1bWVOYW1lIjp7ImRlc2NyaXB0aW9uIjoidm9sdW1lTmFtZSBpcyB0aGUgYmluZGluZyByZWZlcmVuY2UgdG8gdGhlIFBlcnNpc3RlbnRWb2x1bWUgYmFja2luZyB0aGlzIGNsYWltLiIsInR5cGUiOiJzdHJpbmcifX0sInR5cGUiOiJvYmplY3QifSwic3RhdHVzIjp7ImRlc2NyaXB0aW9uIjoic3RhdHVzIHJlcHJlc2VudHMgdGhlIGN1cnJlbnQgaW5mb3JtYXRpb24vc3RhdHVzIG9mIGEgcGVyc2lzdGVudCB2b2x1bWUgY2xhaW0uIFJlYWQtb25seS4gTW9yZSBpbmZvOiBodHRwczovL2t1YmVybmV0ZXMuaW8vZG9jcy9jb25jZXB0cy9zdG9yYWdlL3BlcnNpc3RlbnQtdm9sdW1lcyNwZXJzaXN0ZW50dm9sdW1lY2xhaW1zIiwicHJvcGVydGllcyI6eyJhY2Nlc3NNb2RlcyI6eyJkZXNjcmlwdGlvbiI6ImFjY2Vzc01vZGVzIGNvbnRhaW5zIHRoZSBhY3R1YWwgYWNjZXNzIG1vZGVzIHRoZSB2b2x1bWUgYmFja2luZyB0aGUgUFZDIGhhcy4gTW9yZSBpbmZvOiBodHRwczovL2t1YmVybmV0ZXMuaW8vZG9jcy9jb25jZXB0cy9zdG9yYWdlL3BlcnNpc3RlbnQtdm9sdW1lcyNhY2Nlc3MtbW9kZXMtMSIsIml0ZW1zIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6ImFycmF5In0sImFsbG9jYXRlZFJlc291cmNlU3RhdHVzZXMiOnsiYWRkaXRpb25hbFByb3BlcnRpZXMiOnsiZGVzY3JpcHRpb24iOiJXaGVuIGEgY29udHJvbGxlciByZWNlaXZlcyBwZXJzaXN0ZW50dm9sdW1lIGNsYWltIHVwZGF0ZSB3aXRoIENsYWltUmVzb3VyY2VTdGF0dXMgZm9yIGEgcmVzb3VyY2UgdGhhdCBpdCBkb2VzIG5vdCByZWNvZ25pemVzLCB0aGVuIGl0IHNob3VsZCBpZ25vcmUgdGhhdCB1cGRhdGUgYW5kIGxldCBvdGhlciBjb250cm9sbGVycyBoYW5kbGUgaXQuIiwidHlwZSI6InN0cmluZyJ9LCJkZXNjcmlwdGlvbiI6ImFsbG9jYXRlZFJlc291cmNlU3RhdHVzZXMgc3RvcmVzIHN0YXR1cyBvZiByZXNvdXJjZSBiZWluZyByZXNpemVkIGZvciB0aGUgZ2l2ZW4gUFZDLiBLZXkgbmFtZXMgZm9sbG93IHN0YW5kYXJkIEt1YmVybmV0ZXMgbGFiZWwgc3ludGF4LiBWYWxpZCB2YWx1ZXMgYXJlIGVpdGhlcjogKiBVbi1wcmVmaXhlZCBrZXlzOiAtIHN0b3JhZ2UgLSB0aGUgY2FwYWNpdHkgb2YgdGhlIHZvbHVtZS4gKiBDdXN0b20gcmVzb3VyY2VzIG11c3QgdXNlIGltcGxlbWVudGF0aW9uLWRlZmluZWQgcHJlZml4ZWQgbmFtZXMgc3VjaCBhcyBcImV4YW1wbGUuY29tL215LWN1c3RvbS1yZXNvdXJjZVwiIEFwYXJ0IGZyb20gYWJvdmUgdmFsdWVzIC0ga2V5cyB0aGF0IGFyZSB1bnByZWZpeGVkIG9yIGhhdmUga3ViZXJuZXRlcy5pbyBwcmVmaXggYXJlIGNvbnNpZGVyZWQgcmVzZXJ2ZWQgYW5kIGhlbmNlIG1heSBub3QgYmUgdXNlZC4gXG4gQ2xhaW1SZXNvdXJjZVN0YXR1cyBjYW4gYmUgaW4gYW55IG9mIGZvbGxvd2luZyBzdGF0ZXM6IC0gQ29udHJvbGxlclJlc2l6ZUluUHJvZ3Jlc3M6IFN0YXRlIHNldCB3aGVuIHJlc2l6ZSBjb250cm9sbGVyIHN0YXJ0cyByZXNpemluZyB0aGUgdm9sdW1lIGluIGNvbnRyb2wtcGxhbmUuIC0gQ29udHJvbGxlclJlc2l6ZUZhaWxlZDogU3RhdGUgc2V0IHdoZW4gcmVzaXplIGhhcyBmYWlsZWQgaW4gcmVzaXplIGNvbnRyb2xsZXIgd2l0aCBhIHRlcm1pbmFsIGVycm9yLiAtIE5vZGVSZXNpemVQZW5kaW5nOiBTdGF0ZSBzZXQgd2hlbiByZXNpemUgY29udHJvbGxlciBoYXMgZmluaXNoZWQgcmVzaXppbmcgdGhlIHZvbHVtZSBidXQgZnVydGhlciByZXNpemluZyBvZiB2b2x1bWUgaXMgbmVlZGVkIG9uIHRoZSBub2RlLiAtIE5vZGVSZXNpemVJblByb2dyZXNzOiBTdGF0ZSBzZXQgd2hlbiBrdWJlbGV0IHN0YXJ0cyByZXNpemluZyB0aGUgdm9sdW1lLiAtIE5vZGVSZXNpemVGYWlsZWQ6IFN0YXRlIHNldCB3aGVuIHJlc2l6aW5nIGhhcyBmYWlsZWQgaW4ga3ViZWxldCB3aXRoIGEgdGVybWluYWwgZXJyb3IuIFRyYW5zaWVudCBlcnJvcnMgZG9uJ3Qgc2V0IE5vZGVSZXNpemVGYWlsZWQuIEZvciBleGFtcGxlOiBpZiBleHBhbmRpbmcgYSBQVkMgZm9yIG1vcmUgY2FwYWNpdHkgLSB0aGlzIGZpZWxkIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyBzdGF0ZXM6IC0gcHZjLnN0YXR1cy5hbGxvY2F0ZWRSZXNvdXJjZVN0YXR1c1snc3RvcmFnZSddID0gXCJDb250cm9sbGVyUmVzaXplSW5Qcm9ncmVzc1wiIC0gcHZjLnN0YXR1cy5hbGxvY2F0ZWRSZXNvdXJjZVN0YXR1c1snc3RvcmFnZSddID0gXCJDb250cm9sbGVyUmVzaXplRmFpbGVkXCIgLSBwdmMuc3RhdHVzLmFsbG9jYXRlZFJlc291cmNlU3RhdHVzWydzdG9yYWdlJ10gPSBcIk5vZGVSZXNpemVQZW5kaW5nXCIgLSBwdmMuc3RhdHVzLmFsbG9jYXRlZFJlc291cmNlU3RhdHVzWydzdG9yYWdlJ10gPSBcIk5vZGVSZXNpemVJblByb2dyZXNzXCIgLSBwdmMuc3RhdHVzLmFsbG9jYXRlZFJlc291cmNlU3RhdHVzWydzdG9yYWdlJ10gPSBcIk5vZGVSZXNpemVGYWlsZWRcIiBXaGVuIHRoaXMgZmllbGQgaXMgbm90IHNldCwgaXQgbWVhbnMgdGhhdCBubyByZXNpemUgb3BlcmF0aW9uIGlzIGluIHByb2dyZXNzIGZvciB0aGUgZ2l2ZW4gUFZDLiBcbiBBIGNvbnRyb2xsZXIgdGhhdCByZWNlaXZlcyBQVkMgdXBkYXRlIHdpdGggcHJldmlvdXNseSB1bmtub3duIHJlc291cmNlTmFtZSBvciBDbGFpbVJlc291cmNlU3RhdHVzIHNob3VsZCBpZ25vcmUgdGhlIHVwZGF0ZSBmb3IgdGhlIHB1cnBvc2UgaXQgd2FzIGRlc2lnbmVkLiBGb3IgZXhhbXBsZSAtIGEgY29udHJvbGxlciB0aGF0IG9ubHkgaXMgcmVzcG9uc2libGUgZm9yIHJlc2l6aW5nIGNhcGFjaXR5IG9mIHRoZSB2b2x1bWUsIHNob3VsZCBpZ25vcmUgUFZDIHVwZGF0ZXMgdGhhdCBjaGFuZ2Ugb3RoZXIgdmFsaWQgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCBQVkMuIFxuIFRoaXMgaXMgYW4gYWxwaGEgZmllbGQgYW5kIHJlcXVpcmVzIGVuYWJsaW5nIFJlY292ZXJWb2x1bWVFeHBhbnNpb25GYWlsdXJlIGZlYXR1cmUuIiwidHlwZSI6Im9iamVjdCIsIngta3ViZXJuZXRlcy1tYXAtdHlwZSI6ImdyYW51bGFyIn0sImFsbG9jYXRlZFJlc291cmNlcyI6eyJhZGRpdGlvbmFsUHJvcGVydGllcyI6eyJhbnlPZiI6W3sidHlwZSI6ImludGVnZXIifSx7InR5cGUiOiJzdHJpbmcifV0sInBhdHRlcm4iOiJeKFxcK3wtKT8oKFswLTldKyhcXC5bMC05XSopPyl8KFxcLlswLTldKykpKChbS01HVFBFXWkpfFtudW1rTUdUUEVdfChbZUVdKFxcK3wtKT8oKFswLTldKyhcXC5bMC05XSopPyl8KFxcLlswLTldKykpKSk/JCIsIngta3ViZXJuZXRlcy1pbnQtb3Itc3RyaW5nIjp0cnVlfSwiZGVzY3JpcHRpb24iOiJhbGxvY2F0ZWRSZXNvdXJjZXMgdHJhY2tzIHRoZSByZXNvdXJjZXMgYWxsb2NhdGVkIHRvIGEgUFZDIGluY2x1ZGluZyBpdHMgY2FwYWNpdHkuIEtleSBuYW1lcyBmb2xsb3cgc3RhbmRhcmQgS3ViZXJuZXRlcyBsYWJlbCBzeW50YXguIFZhbGlkIHZhbHVlcyBhcmUgZWl0aGVyOiAqIFVuLXByZWZpeGVkIGtleXM6IC0gc3RvcmFnZSAtIHRoZSBjYXBhY2l0eSBvZiB0aGUgdm9sdW1lLiAqIEN1c3RvbSByZXNvdXJjZXMgbXVzdCB1c2UgaW1wbGVtZW50YXRpb24tZGVmaW5lZCBwcmVmaXhlZCBuYW1lcyBzdWNoIGFzIFwiZXhhbXBsZS5jb20vbXktY3VzdG9tLXJlc291cmNlXCIgQXBhcnQgZnJvbSBhYm92ZSB2YWx1ZXMgLSBrZXlzIHRoYXQgYXJlIHVucHJlZml4ZWQgb3IgaGF2ZSBrdWJlcm5ldGVzLmlvIHByZWZpeCBhcmUgY29uc2lkZXJlZCByZXNlcnZlZCBhbmQgaGVuY2UgbWF5IG5vdCBiZSB1c2VkLiBcbiBDYXBhY2l0eSByZXBvcnRlZCBoZXJlIG1heSBiZSBsYXJnZXIgdGhhbiB0aGUgYWN0dWFsIGNhcGFjaXR5IHdoZW4gYSB2b2x1bWUgZXhwYW5zaW9uIG9wZXJhdGlvbiBpcyByZXF1ZXN0ZWQuIEZvciBzdG9yYWdlIHF1b3RhLCB0aGUgbGFyZ2VyIHZhbHVlIGZyb20gYWxsb2NhdGVkUmVzb3VyY2VzIGFuZCBQVkMuc3BlYy5yZXNvdXJjZXMgaXMgdXNlZC4gSWYgYWxsb2NhdGVkUmVzb3VyY2VzIGlzIG5vdCBzZXQsIFBWQy5zcGVjLnJlc291cmNlcyBhbG9uZSBpcyB1c2VkIGZvciBxdW90YSBjYWxjdWxhdGlvbi4gSWYgYSB2b2x1bWUgZXhwYW5zaW9uIGNhcGFjaXR5IHJlcXVlc3QgaXMgbG93ZXJlZCwgYWxsb2NhdGVkUmVzb3VyY2VzIGlzIG9ubHkgbG93ZXJlZCBpZiB0aGVyZSBhcmUgbm8gZXhwYW5zaW9uIG9wZXJhdGlvbnMgaW4gcHJvZ3Jlc3MgYW5kIGlmIHRoZSBhY3R1YWwgdm9sdW1lIGNhcGFjaXR5IGlzIGVxdWFsIG9yIGxvd2VyIHRoYW4gdGhlIHJlcXVlc3RlZCBjYXBhY2l0eS4gXG4gQSBjb250cm9sbGVyIHRoYXQgcmVjZWl2ZXMgUFZDIHVwZGF0ZSB3aXRoIHByZXZpb3VzbHkgdW5rbm93biByZXNvdXJjZU5hbWUgc2hvdWxkIGlnbm9yZSB0aGUgdXBkYXRlIGZvciB0aGUgcHVycG9zZSBpdCB3YXMgZGVzaWduZWQuIEZvciBleGFtcGxlIC0gYSBjb250cm9sbGVyIHRoYXQgb25seSBpcyByZXNwb25zaWJsZSBmb3IgcmVzaXppbmcgY2FwYWNpdHkgb2YgdGhlIHZvbHVtZSwgc2hvdWxkIGlnbm9yZSBQVkMgdXBkYXRlcyB0aGF0IGNoYW5nZSBvdGhlciB2YWxpZCByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIFBWQy4gXG4gVGhpcyBpcyBhbiBhbHBoYSBmaWVsZCBhbmQgcmVxdWlyZXMgZW5hYmxpbmcgUmVjb3ZlclZvbHVtZUV4cGFuc2lvbkZhaWx1cmUgZmVhdHVyZS4iLCJ0eXBlIjoib2JqZWN0In0sImNhcGFjaXR5Ijp7ImFkZGl0aW9uYWxQcm9wZXJ0aWVzIjp7ImFueU9mIjpbeyJ0eXBlIjoiaW50ZWdlciJ9LHsidHlwZSI6InN0cmluZyJ9XSwicGF0dGVybiI6Il4oXFwrfC0pPygoWzAtOV0rKFxcLlswLTldKik/KXwoXFwuWzAtOV0rKSkoKFtLTUdUUEVdaSl8W251bWtNR1RQRV18KFtlRV0oXFwrfC0pPygoWzAtOV0rKFxcLlswLTldKik/KXwoXFwuWzAtOV0rKSkpKT8kIiwieC1rdWJlcm5ldGVzLWludC1vci1zdHJpbmciOnRydWV9LCJkZXNjcmlwdGlvbiI6ImNhcGFjaXR5IHJlcHJlc2VudHMgdGhlIGFjdHVhbCByZXNvdXJjZXMgb2YgdGhlIHVuZGVybHlpbmcgdm9sdW1lLiIsInR5cGUiOiJvYmplY3QifSwiY29uZGl0aW9ucyI6eyJkZXNjcmlwdGlvbiI6ImNvbmRpdGlvbnMgaXMgdGhlIGN1cnJlbnQgQ29uZGl0aW9uIG9mIHBlcnNpc3RlbnQgdm9sdW1lIGNsYWltLiBJZiB1bmRlcmx5aW5nIHBlcnNpc3RlbnQgdm9sdW1lIGlzIGJlaW5nIHJlc2l6ZWQgdGhlbiB0aGUgQ29uZGl0aW9uIHdpbGwgYmUgc2V0IHRvICdSZXNpemVTdGFydGVkJy4iLCJpdGVtcyI6eyJkZXNjcmlwdGlvbiI6IlBlcnNpc3RlbnRWb2x1bWVDbGFpbUNvbmRpdGlvbiBjb250YWlucyBkZXRhaWxzIGFib3V0IHN0YXRlIG9mIHB2YyIsInByb3BlcnRpZXMiOnsibGFzdFByb2JlVGltZSI6eyJkZXNjcmlwdGlvbiI6Imxhc3RQcm9iZVRpbWUgaXMgdGhlIHRpbWUgd2UgcHJvYmVkIHRoZSBjb25kaXRpb24uIiwiZm9ybWF0IjoiZGF0ZS10aW1lIiwidHlwZSI6InN0cmluZyJ9LCJsYXN0VHJhbnNpdGlvblRpbWUiOnsiZGVzY3JpcHRpb24iOiJsYXN0VHJhbnNpdGlvblRpbWUgaXMgdGhlIHRpbWUgdGhlIGNvbmRpdGlvbiB0cmFuc2l0aW9uZWQgZnJvbSBvbmUgc3RhdHVzIHRvIGFub3RoZXIuIiwiZm9ybWF0IjoiZGF0ZS10aW1lIiwidHlwZSI6InN0cmluZyJ9LCJtZXNzYWdlIjp7ImRlc2NyaXB0aW9uIjoibWVzc2FnZSBpcyB0aGUgaHVtYW4tcmVhZGFibGUgbWVzc2FnZSBpbmRpY2F0aW5nIGRldGFpbHMgYWJvdXQgbGFzdCB0cmFuc2l0aW9uLiIsInR5cGUiOiJzdHJpbmcifSwicmVhc29uIjp7ImRlc2NyaXB0aW9uIjoicmVhc29uIGlzIGEgdW5pcXVlLCB0aGlzIHNob3VsZCBiZSBhIHNob3J0LCBtYWNoaW5lIHVuZGVyc3RhbmRhYmxlIHN0cmluZyB0aGF0IGdpdmVzIHRoZSByZWFzb24gZm9yIGNvbmRpdGlvbidzIGxhc3QgdHJhbnNpdGlvbi4gSWYgaXQgcmVwb3J0cyBcIlJlc2l6ZVN0YXJ0ZWRcIiB0aGF0IG1lYW5zIHRoZSB1bmRlcmx5aW5nIHBlcnNpc3RlbnQgdm9sdW1lIGlzIGJlaW5nIHJlc2l6ZWQuIiwidHlwZSI6InN0cmluZyJ9LCJzdGF0dXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjp7ImRlc2NyaXB0aW9uIjoiUGVyc2lzdGVudFZvbHVtZUNsYWltQ29uZGl0aW9uVHlwZSBpcyBhIHZhbGlkIHZhbHVlIG9mIFBlcnNpc3RlbnRWb2x1bWVDbGFpbUNvbmRpdGlvbi5UeXBlIiwidHlwZSI6InN0cmluZyJ9fSwicmVxdWlyZWQiOlsic3RhdHVzIiwidHlwZSJdLCJ0eXBlIjoib2JqZWN0In0sInR5cGUiOiJhcnJheSJ9LCJjdXJyZW50Vm9sdW1lQXR0cmlidXRlc0NsYXNzTmFtZSI6eyJkZXNjcmlwdGlvbiI6ImN1cnJlbnRWb2x1bWVBdHRyaWJ1dGVzQ2xhc3NOYW1lIGlzIHRoZSBjdXJyZW50IG5hbWUgb2YgdGhlIFZvbHVtZUF0dHJpYnV0ZXNDbGFzcyB0aGUgUFZDIGlzIHVzaW5nLiBXaGVuIHVuc2V0LCB0aGVyZSBpcyBubyBWb2x1bWVBdHRyaWJ1dGVDbGFzcyBhcHBsaWVkIHRvIHRoaXMgUGVyc2lzdGVudFZvbHVtZUNsYWltIFRoaXMgaXMgYW4gYWxwaGEgZmllbGQgYW5kIHJlcXVpcmVzIGVuYWJsaW5nIFZvbHVtZUF0dHJpYnV0ZXNDbGFzcyBmZWF0dXJlLiIsInR5cGUiOiJzdHJpbmcifSwibW9kaWZ5Vm9sdW1lU3RhdHVzIjp7ImRlc2NyaXB0aW9uIjoiTW9kaWZ5Vm9sdW1lU3RhdHVzIHJlcHJlc2VudHMgdGhlIHN0YXR1cyBvYmplY3Qgb2YgQ29udHJvbGxlck1vZGlmeVZvbHVtZSBvcGVyYXRpb24uIFdoZW4gdGhpcyBpcyB1bnNldCwgdGhlcmUgaXMgbm8gTW9kaWZ5Vm9sdW1lIG9wZXJhdGlvbiBiZWluZyBhdHRlbXB0ZWQuIFRoaXMgaXMgYW4gYWxwaGEgZmllbGQgYW5kIHJlcXVpcmVzIGVuYWJsaW5nIFZvbHVtZUF0dHJpYnV0ZXNDbGFzcyBmZWF0dXJlLiIsInByb3BlcnRpZXMiOnsic3RhdHVzIjp7ImRlc2NyaXB0aW9uIjoic3RhdHVzIGlzIHRoZSBzdGF0dXMgb2YgdGhlIENvbnRyb2xsZXJNb2RpZnlWb2x1bWUgb3BlcmF0aW9uLiBJdCBjYW4gYmUgaW4gYW55IG9mIGZvbGxvd2luZyBzdGF0ZXM6IC0gUGVuZGluZyBQZW5kaW5nIGluZGljYXRlcyB0aGF0IHRoZSBQZXJzaXN0ZW50Vm9sdW1lQ2xhaW0gY2Fubm90IGJlIG1vZGlmaWVkIGR1ZSB0byB1bm1ldCByZXF1aXJlbWVudHMsIHN1Y2ggYXMgdGhlIHNwZWNpZmllZCBWb2x1bWVBdHRyaWJ1dGVzQ2xhc3Mgbm90IGV4aXN0aW5nLiAtIEluUHJvZ3Jlc3MgSW5Qcm9ncmVzcyBpbmRpY2F0ZXMgdGhhdCB0aGUgdm9sdW1lIGlzIGJlaW5nIG1vZGlmaWVkLiAtIEluZmVhc2libGUgSW5mZWFzaWJsZSBpbmRpY2F0ZXMgdGhhdCB0aGUgcmVxdWVzdCBoYXMgYmVlbiByZWplY3RlZCBhcyBpbnZhbGlkIGJ5IHRoZSBDU0kgZHJpdmVyLiBUbyByZXNvbHZlIHRoZSBlcnJvciwgYSB2YWxpZCBWb2x1bWVBdHRyaWJ1dGVzQ2xhc3MgbmVlZHMgdG8gYmUgc3BlY2lmaWVkLiBOb3RlOiBOZXcgc3RhdHVzZXMgY2FuIGJlIGFkZGVkIGluIHRoZSBmdXR1cmUuIENvbnN1bWVycyBzaG91bGQgY2hlY2sgZm9yIHVua25vd24gc3RhdHVzZXMgYW5kIGZhaWwgYXBwcm9wcmlhdGVseS4iLCJ0eXBlIjoic3RyaW5nIn0sInRhcmdldFZvbHVtZUF0dHJpYnV0ZXNDbGFzc05hbWUiOnsiZGVzY3JpcHRpb24iOiJ0YXJnZXRWb2x1bWVBdHRyaWJ1dGVzQ2xhc3NOYW1lIGlzIHRoZSBuYW1lIG9mIHRoZSBWb2x1bWVBdHRyaWJ1dGVzQ2xhc3MgdGhlIFBWQyBjdXJyZW50bHkgYmVpbmcgcmVjb25jaWxlZCIsInR5cGUiOiJzdHJpbmcifX0sInJlcXVpcmVkIjpbInN0YXR1cyJdLCJ0eXBlIjoib2JqZWN0In0sInBoYXNlIjp7ImRlc2NyaXB0aW9uIjoicGhhc2UgcmVwcmVzZW50cyB0aGUgY3VycmVudCBwaGFzZSBvZiBQZXJzaXN0ZW50Vm9sdW1lQ2xhaW0uIiwidHlwZSI6InN0cmluZyJ9fSwidHlwZSI6Im9iamVjdCJ9fSwidHlwZSI6Im9iamVjdCJ9fSwicmVxdWlyZWQiOlsiY291bnQiLCJkYXRhUFZDVGVtcGxhdGUiLCJuYW1lIl0sInR5cGUiOiJvYmplY3QifSwidHlwZSI6ImFycmF5In0sInZlcnNpb24iOnsiZGVzY3JpcHRpb24iOiJWZXJzaW9uIHNwZWNpZmllcyB0aGUgdmVyc2lvbiBvZiBTdG9yYWdlQ2x1c3RlciIsInR5cGUiOiJzdHJpbmcifX0sInR5cGUiOiJvYmplY3QifSwic3RhdHVzIjp7ImRlc2NyaXB0aW9uIjoiU3RvcmFnZUNsdXN0ZXJTdGF0dXMgZGVmaW5lcyB0aGUgb2JzZXJ2ZWQgc3RhdGUgb2YgU3RvcmFnZUNsdXN0ZXIiLCJwcm9wZXJ0aWVzIjp7ImNvbmRpdGlvbnMiOnsiZGVzY3JpcHRpb24iOiJDb25kaXRpb25zIGRlc2NyaWJlcyB0aGUgc3RhdGUgb2YgdGhlIFN0b3JhZ2VDbHVzdGVyIHJlc291cmNlLiIsIml0ZW1zIjp7ImRlc2NyaXB0aW9uIjoiQ29uZGl0aW9uIHJlcHJlc2VudHMgdGhlIHN0YXRlIG9mIHRoZSBvcGVyYXRvcidzIHJlY29uY2lsaWF0aW9uIGZ1bmN0aW9uYWxpdHkuIiwicHJvcGVydGllcyI6eyJsYXN0SGVhcnRiZWF0VGltZSI6eyJmb3JtYXQiOiJkYXRlLXRpbWUiLCJ0eXBlIjoic3RyaW5nIn0sImxhc3RUcmFuc2l0aW9uVGltZSI6eyJmb3JtYXQiOiJkYXRlLXRpbWUiLCJ0eXBlIjoic3RyaW5nIn0sIm1lc3NhZ2UiOnsidHlwZSI6InN0cmluZyJ9LCJyZWFzb24iOnsidHlwZSI6InN0cmluZyJ9LCJzdGF0dXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjp7ImRlc2NyaXB0aW9uIjoiQ29uZGl0aW9uVHlwZSBpcyB0aGUgc3RhdGUgb2YgdGhlIG9wZXJhdG9yJ3MgcmVjb25jaWxpYXRpb24gZnVuY3Rpb25hbGl0eS4iLCJ0eXBlIjoic3RyaW5nIn19LCJyZXF1aXJlZCI6WyJzdGF0dXMiLCJ0eXBlIl0sInR5cGUiOiJvYmplY3QifSwidHlwZSI6ImFycmF5In0sImN1cnJlbnRNb25Db3VudCI6eyJkZXNjcmlwdGlvbiI6IkN1cnJlbnRNb25Db3VudCBob2xkcyB0aGUgdmFsdWUgb2YgY2VwaCBtb25zIGNvbmZpZ3VyZWQgaW4gY2VwaCBjbHVzdGVyLiIsInR5cGUiOiJpbnRlZ2VyIn0sImV4dGVybmFsU2VjcmV0SGFzaCI6eyJkZXNjcmlwdGlvbiI6IkV4dGVybmFsU2VjcmV0SGFzaCBob2xkcyB0aGUgY2hlY2tzdW0gdmFsdWUgb2YgZXh0ZXJuYWwgc2VjcmV0IGRhdGEuIiwidHlwZSI6InN0cmluZyJ9LCJmYWlsdXJlRG9tYWluIjp7ImRlc2NyaXB0aW9uIjoiRmFpbHVyZURvbWFpbiBpcyB0aGUgYmFzZSBDUlVTSCBlbGVtZW50IENlcGggd2lsbCB1c2UgdG8gZGlzdHJpYnV0ZSBpdHMgZGF0YSByZXBsaWNhcyBmb3IgdGhlIGRlZmF1bHQgQ2VwaEJsb2NrUG9vbCIsInR5cGUiOiJzdHJpbmcifSwiZmFpbHVyZURvbWFpbktleSI6eyJkZXNjcmlwdGlvbiI6IkZhaWx1cmVEb21haW5LZXkgaXMgdGhlIHNwZWNpZmljIGtleSB1c2VkIHRvIGZpbmQgdGhlIGxvY2F0aW9ucyBhdmFpbGFibGUgdW5kZXIgYSBmYWlsdXJlIGRvbWFpbi4gRm9yIGV4YW1wbGUgdG9wb2xvZ3kua3ViZXJuZXRlcy5pby96b25lIiwidHlwZSI6InN0cmluZyJ9LCJmYWlsdXJlRG9tYWluVmFsdWVzIjp7ImRlc2NyaXB0aW9uIjoiRmFpbHVyZURvbWFpblZhbHVlcyBpcyB0aGUgbGlzdCBvZiBsb2NhdGlvbnMgYXZhaWxhYmxlIGZvciBhIGZhaWx1cmUgZG9tYWluIHVuZGVyIHRoZSBmYWlsdXJlIGRvbWFpbiBrZXkuIiwiaXRlbXMiOnsidHlwZSI6InN0cmluZyJ9LCJ0eXBlIjoiYXJyYXkifSwiaW1hZ2VzIjp7ImRlc2NyaXB0aW9uIjoiSW1hZ2VzIGhvbGRzIHRoZSBpbWFnZSByZWNvbmNpbGUgc3RhdHVzIGZvciBhbGwgaW1hZ2VzIHJlY29uY2lsZWQgYnkgdGhlIG9wZXJhdG9yIiwicHJvcGVydGllcyI6eyJjZXBoIjp7ImRlc2NyaXB0aW9uIjoiQ29tcG9uZW50SW1hZ2VTdGF0dXMgaG9sZHMgaW1hZ2Ugc3RhdHVzIGluZm9ybWF0aW9uIGZvciBhIHNwZWNpZmljIGNvbXBvbmVudCBpbWFnZSIsInByb3BlcnRpZXMiOnsiYWN0dWFsSW1hZ2UiOnsidHlwZSI6InN0cmluZyJ9LCJkZXNpcmVkSW1hZ2UiOnsidHlwZSI6InN0cmluZyJ9fSwidHlwZSI6Im9iamVjdCJ9LCJub29iYWFDb3JlIjp7ImRlc2NyaXB0aW9uIjoiQ29tcG9uZW50SW1hZ2VTdGF0dXMgaG9sZHMgaW1hZ2Ugc3RhdHVzIGluZm9ybWF0aW9uIGZvciBhIHNwZWNpZmljIGNvbXBvbmVudCBpbWFnZSIsInByb3BlcnRpZXMiOnsiYWN0dWFsSW1hZ2UiOnsidHlwZSI6InN0cmluZyJ9LCJkZXNpcmVkSW1hZ2UiOnsidHlwZSI6InN0cmluZyJ9fSwidHlwZSI6Im9iamVjdCJ9LCJub29iYWFEQiI6eyJkZXNjcmlwdGlvbiI6IkNvbXBvbmVudEltYWdlU3RhdHVzIGhvbGRzIGltYWdlIHN0YXR1cyBpbmZvcm1hdGlvbiBmb3IgYSBzcGVjaWZpYyBjb21wb25lbnQgaW1hZ2UiLCJwcm9wZXJ0aWVzIjp7ImFjdHVhbEltYWdlIjp7InR5cGUiOiJzdHJpbmcifSwiZGVzaXJlZEltYWdlIjp7InR5cGUiOiJzdHJpbmcifX0sInR5cGUiOiJvYmplY3QifX0sInR5cGUiOiJvYmplY3QifSwia21zU2VydmVyQ29ubmVjdGlvbiI6eyJkZXNjcmlwdGlvbiI6IktNU1NlcnZlckNvbm5lY3Rpb24gaG9sZHMgdGhlIGNvbm5lY3Rpb24gc3RhdGUgdG8gdGhlIEtNUyBzZXJ2ZXIuIiwicHJvcGVydGllcyI6eyJrbXNTZXJ2ZXJBZGRyZXNzIjp7InR5cGUiOiJzdHJpbmcifSwia21zU2VydmVyQ29ubmVjdGlvbkVycm9yIjp7InR5cGUiOiJzdHJpbmcifX0sInR5cGUiOiJvYmplY3QifSwibGFzdEFwcGxpZWRSZXNvdXJjZVByb2ZpbGUiOnsiZGVzY3JpcHRpb24iOiJMYXN0QXBwbGllZFJlc291cmNlUHJvZmlsZSBpcyB0aGUgcmVzb3VyY2UgcHJvZmlsZSB0aGF0IHdhcyBsYXN0IGFwcGxpZWQgc3VjY2Vzc2Z1bGx5IFx1MDAyNiBpcyBjdXJyZW50bHkgaW4gdXNlLiIsInR5cGUiOiJzdHJpbmcifSwibm9kZVRvcG9sb2dpZXMiOnsiZGVzY3JpcHRpb24iOiJOb2RlVG9wb2xvZ2llcyBpcyBhIGxpc3Qgb2YgdG9wb2xvZ3kgbGFiZWxzIG9uIGFsbCBub2RlcyBtYXRjaGluZyB0aGUgU3RvcmFnZUNsdXN0ZXIncyBwbGFjZW1lbnQgc2VsZWN0b3IuIiwicHJvcGVydGllcyI6eyJhcmJpdGVyTG9jYXRpb24iOnsiZGVzY3JpcHRpb24iOiJBcmJpdGVyTG9jYXRpb24gaXMgdGhlIGNob3NlbiBsb2NhdGlvbiBpbiB0aGUgZmFpbHVyZSBkb21haW4gZm9yIHBsYWNpbmcgdGhlIGFyYml0ZXIgcmVzb3VyY2VzLiBXaGVuIHRoZSBmYWlsdXJlIGRvbWFpbiBpcyBub3QgcHJvdmlkZWQgYXMgYW4gaW5wdXQsIG9jcy1vcGVyYXRvciBkZXRlcm1pbmVzIHRoZSBmYWlsdXJlIGRvbWFpbi4iLCJ0eXBlIjoic3RyaW5nIn0sImxhYmVscyI6eyJhZGRpdGlvbmFsUHJvcGVydGllcyI6eyJkZXNjcmlwdGlvbiI6IlRvcG9sb2d5TGFiZWxWYWx1ZXMgaXMgYSBsaXN0IG9mIHZhbHVlcyBmb3IgYSB0b3BvbG9neSBsYWJlbCIsIml0ZW1zIjp7InR5cGUiOiJzdHJpbmcifSwidHlwZSI6ImFycmF5In0sImRlc2NyaXB0aW9uIjoiTGFiZWxzIGlzIGEgbWFwIG9mIHRvcG9sb2d5IGxhYmVsIGtleXMgKGUuZy4gXCJmYWlsdXJlLWRvbWFpbi5rdWJlcm5ldGVzLmlvXCIpIHRvIGEgc2V0IG9mIHZhbHVlcyBmb3IgdGhvc2Uga2V5cy4iLCJudWxsYWJsZSI6dHJ1ZSwidHlwZSI6Im9iamVjdCJ9fSwidHlwZSI6Im9iamVjdCJ9LCJwaGFzZSI6eyJkZXNjcmlwdGlvbiI6IlBoYXNlIGRlc2NyaWJlcyB0aGUgUGhhc2Ugb2YgU3RvcmFnZUNsdXN0ZXIgVGhpcyBpcyB1c2VkIGJ5IE9MTSBVSSB0byBwcm92aWRlIHN0YXR1cyBpbmZvcm1hdGlvbiB0byB0aGUgdXNlciIsInR5cGUiOiJzdHJpbmcifSwicmVsYXRlZE9iamVjdHMiOnsiZGVzY3JpcHRpb24iOiJSZWxhdGVkT2JqZWN0cyBpcyBhIGxpc3Qgb2Ygb2JqZWN0cyBjcmVhdGVkIGFuZCBtYWludGFpbmVkIGJ5IHRoaXMgb3BlcmF0b3IuIE9iamVjdCByZWZlcmVuY2VzIHdpbGwgYmUgYWRkZWQgdG8gdGhpcyBsaXN0IGFmdGVyIHRoZXkgaGF2ZSBiZWVuIGNyZWF0ZWQgQU5EIGZvdW5kIGluIHRoZSBjbHVzdGVyLiIsIml0ZW1zIjp7ImRlc2NyaXB0aW9uIjoiT2JqZWN0UmVmZXJlbmNlIGNvbnRhaW5zIGVub3VnaCBpbmZvcm1hdGlvbiB0byBsZXQgeW91IGluc3BlY3Qgb3IgbW9kaWZ5IHRoZSByZWZlcnJlZCBvYmplY3QuIE5ldyB1c2VzIG9mIHRoaXMgdHlwZSBhcmUgZGlzY291cmFnZWQgYmVjYXVzZSBvZiBkaWZmaWN1bHR5IGRlc2NyaWJpbmcgaXRzIHVzYWdlIHdoZW4gZW1iZWRkZWQgaW4gQVBJcy4gMS4gSWdub3JlZCBmaWVsZHMuICBJdCBpbmNsdWRlcyBtYW55IGZpZWxkcyB3aGljaCBhcmUgbm90IGdlbmVyYWxseSBob25vcmVkLiAgRm9yIGluc3RhbmNlLCBSZXNvdXJjZVZlcnNpb24gYW5kIEZpZWxkUGF0aCBhcmUgYm90aCB2ZXJ5IHJhcmVseSB2YWxpZCBpbiBhY3R1YWwgdXNhZ2UuIDIuIEludmFsaWQgdXNhZ2UgaGVscC4gIEl0IGlzIGltcG9zc2libGUgdG8gYWRkIHNwZWNpZmljIGhlbHAgZm9yIGluZGl2aWR1YWwgdXNhZ2UuICBJbiBtb3N0IGVtYmVkZGVkIHVzYWdlcywgdGhlcmUgYXJlIHBhcnRpY3VsYXIgcmVzdHJpY3Rpb25zIGxpa2UsIFwibXVzdCByZWZlciBvbmx5IHRvIHR5cGVzIEEgYW5kIEJcIiBvciBcIlVJRCBub3QgaG9ub3JlZFwiIG9yIFwibmFtZSBtdXN0IGJlIHJlc3RyaWN0ZWRcIi4gVGhvc2UgY2Fubm90IGJlIHdlbGwgZGVzY3JpYmVkIHdoZW4gZW1iZWRkZWQuIDMuIEluY29uc2lzdGVudCB2YWxpZGF0aW9uLiAgQmVjYXVzZSB0aGUgdXNhZ2VzIGFyZSBkaWZmZXJlbnQsIHRoZSB2YWxpZGF0aW9uIHJ1bGVzIGFyZSBkaWZmZXJlbnQgYnkgdXNhZ2UsIHdoaWNoIG1ha2VzIGl0IGhhcmQgZm9yIHVzZXJzIHRvIHByZWRpY3Qgd2hhdCB3aWxsIGhhcHBlbi4gNC4gVGhlIGZpZWxkcyBhcmUgYm90aCBpbXByZWNpc2UgYW5kIG92ZXJseSBwcmVjaXNlLiAgS2luZCBpcyBub3QgYSBwcmVjaXNlIG1hcHBpbmcgdG8gYSBVUkwuIFRoaXMgY2FuIHByb2R1Y2UgYW1iaWd1aXR5IGR1cmluZyBpbnRlcnByZXRhdGlvbiBhbmQgcmVxdWlyZSBhIFJFU1QgbWFwcGluZy4gIEluIG1vc3QgY2FzZXMsIHRoZSBkZXBlbmRlbmN5IGlzIG9uIHRoZSBncm91cCxyZXNvdXJjZSB0dXBsZSBhbmQgdGhlIHZlcnNpb24gb2YgdGhlIGFjdHVhbCBzdHJ1Y3QgaXMgaXJyZWxldmFudC4gNS4gV2UgY2Fubm90IGVhc2lseSBjaGFuZ2UgaXQuICBCZWNhdXNlIHRoaXMgdHlwZSBpcyBlbWJlZGRlZCBpbiBtYW55IGxvY2F0aW9ucywgdXBkYXRlcyB0byB0aGlzIHR5cGUgd2lsbCBhZmZlY3QgbnVtZXJvdXMgc2NoZW1hcy4gIERvbid0IG1ha2UgbmV3IEFQSXMgZW1iZWQgYW4gdW5kZXJzcGVjaWZpZWQgQVBJIHR5cGUgdGhleSBkbyBub3QgY29udHJvbC4gXG4gSW5zdGVhZCBvZiB1c2luZyB0aGlzIHR5cGUsIGNyZWF0ZSBhIGxvY2FsbHkgcHJvdmlkZWQgYW5kIHVzZWQgdHlwZSB0aGF0IGlzIHdlbGwtZm9jdXNlZCBvbiB5b3VyIHJlZmVyZW5jZS4gRm9yIGV4YW1wbGUsIFNlcnZpY2VSZWZlcmVuY2VzIGZvciBhZG1pc3Npb24gcmVnaXN0cmF0aW9uOiBodHRwczovL2dpdGh1Yi5jb20va3ViZXJuZXRlcy9hcGkvYmxvYi9yZWxlYXNlLTEuMTcvYWRtaXNzaW9ucmVnaXN0cmF0aW9uL3YxL3R5cGVzLmdvI0w1MzMgLiIsInByb3BlcnRpZXMiOnsiYXBpVmVyc2lvbiI6eyJkZXNjcmlwdGlvbiI6IkFQSSB2ZXJzaW9uIG9mIHRoZSByZWZlcmVudC4iLCJ0eXBlIjoic3RyaW5nIn0sImZpZWxkUGF0aCI6eyJkZXNjcmlwdGlvbiI6IklmIHJlZmVycmluZyB0byBhIHBpZWNlIG9mIGFuIG9iamVjdCBpbnN0ZWFkIG9mIGFuIGVudGlyZSBvYmplY3QsIHRoaXMgc3RyaW5nIHNob3VsZCBjb250YWluIGEgdmFsaWQgSlNPTi9HbyBmaWVsZCBhY2Nlc3Mgc3RhdGVtZW50LCBzdWNoIGFzIGRlc2lyZWRTdGF0ZS5tYW5pZmVzdC5jb250YWluZXJzWzJdLiBGb3IgZXhhbXBsZSwgaWYgdGhlIG9iamVjdCByZWZlcmVuY2UgaXMgdG8gYSBjb250YWluZXIgd2l0aGluIGEgcG9kLCB0aGlzIHdvdWxkIHRha2Ugb24gYSB2YWx1ZSBsaWtlOiBcInNwZWMuY29udGFpbmVyc3tuYW1lfVwiICh3aGVyZSBcIm5hbWVcIiByZWZlcnMgdG8gdGhlIG5hbWUgb2YgdGhlIGNvbnRhaW5lciB0aGF0IHRyaWdnZXJlZCB0aGUgZXZlbnQpIG9yIGlmIG5vIGNvbnRhaW5lciBuYW1lIGlzIHNwZWNpZmllZCBcInNwZWMuY29udGFpbmVyc1syXVwiIChjb250YWluZXIgd2l0aCBpbmRleCAyIGluIHRoaXMgcG9kKS4gVGhpcyBzeW50YXggaXMgY2hvc2VuIG9ubHkgdG8gaGF2ZSBzb21lIHdlbGwtZGVmaW5lZCB3YXkgb2YgcmVmZXJlbmNpbmcgYSBwYXJ0IG9mIGFuIG9iamVjdC4gVE9ETzogdGhpcyBkZXNpZ24gaXMgbm90IGZpbmFsIGFuZCB0aGlzIGZpZWxkIGlzIHN1YmplY3QgdG8gY2hhbmdlIGluIHRoZSBmdXR1cmUuIiwidHlwZSI6InN0cmluZyJ9LCJraW5kIjp7ImRlc2NyaXB0aW9uIjoiS2luZCBvZiB0aGUgcmVmZXJlbnQuIE1vcmUgaW5mbzogaHR0cHM6Ly9naXQuazhzLmlvL2NvbW11bml0eS9jb250cmlidXRvcnMvZGV2ZWwvc2lnLWFyY2hpdGVjdHVyZS9hcGktY29udmVudGlvbnMubWQjdHlwZXMta2luZHMiLCJ0eXBlIjoic3RyaW5nIn0sIm5hbWUiOnsiZGVzY3JpcHRpb24iOiJOYW1lIG9mIHRoZSByZWZlcmVudC4gTW9yZSBpbmZvOiBodHRwczovL2t1YmVybmV0ZXMuaW8vZG9jcy9jb25jZXB0cy9vdmVydmlldy93b3JraW5nLXdpdGgtb2JqZWN0cy9uYW1lcy8jbmFtZXMiLCJ0eXBlIjoic3RyaW5nIn0sIm5hbWVzcGFjZSI6eyJkZXNjcmlwdGlvbiI6Ik5hbWVzcGFjZSBvZiB0aGUgcmVmZXJlbnQuIE1vcmUgaW5mbzogaHR0cHM6Ly9rdWJlcm5ldGVzLmlvL2RvY3MvY29uY2VwdHMvb3ZlcnZpZXcvd29ya2luZy13aXRoLW9iamVjdHMvbmFtZXNwYWNlcy8iLCJ0eXBlIjoic3RyaW5nIn0sInJlc291cmNlVmVyc2lvbiI6eyJkZXNjcmlwdGlvbiI6IlNwZWNpZmljIHJlc291cmNlVmVyc2lvbiB0byB3aGljaCB0aGlzIHJlZmVyZW5jZSBpcyBtYWRlLCBpZiBhbnkuIE1vcmUgaW5mbzogaHR0cHM6Ly9naXQuazhzLmlvL2NvbW11bml0eS9jb250cmlidXRvcnMvZGV2ZWwvc2lnLWFyY2hpdGVjdHVyZS9hcGktY29udmVudGlvbnMubWQjY29uY3VycmVuY3ktY29udHJvbC1hbmQtY29uc2lzdGVuY3kiLCJ0eXBlIjoic3RyaW5nIn0sInVpZCI6eyJkZXNjcmlwdGlvbiI6IlVJRCBvZiB0aGUgcmVmZXJlbnQuIE1vcmUgaW5mbzogaHR0cHM6Ly9rdWJlcm5ldGVzLmlvL2RvY3MvY29uY2VwdHMvb3ZlcnZpZXcvd29ya2luZy13aXRoLW9iamVjdHMvbmFtZXMvI3VpZHMiLCJ0eXBlIjoic3RyaW5nIn19LCJ0eXBlIjoib2JqZWN0IiwieC1rdWJlcm5ldGVzLW1hcC10eXBlIjoiYXRvbWljIn0sInR5cGUiOiJhcnJheSJ9LCJzdG9yYWdlUHJvdmlkZXJFbmRwb2ludCI6eyJkZXNjcmlwdGlvbiI6IlN0b3JhZ2VQcm92aWRlckVuZHBvaW50IGhvbGRzIGVuZHBvaW50IGluZm8gb24gUHJvdmlkZXIgY2x1c3RlciB3aGljaCBpcyByZXF1aXJlZCBmb3IgY29uc3VtZXIgdG8gZXN0YWJsaXNoIGNvbm5lY3Rpb24gd2l0aCB0aGUgc3RvcmFnZSBwcm92aWRpbmcgY2x1c3Rlci4iLCJ0eXBlIjoic3RyaW5nIn0sInZlcnNpb24iOnsiZGVzY3JpcHRpb24iOiJWZXJzaW9uIHNwZWNpZmllcyB0aGUgdmVyc2lvbiBvZiBTdG9yYWdlQ2x1c3RlciIsInR5cGUiOiJzdHJpbmcifX0sInR5cGUiOiJvYmplY3QifX0sInR5cGUiOiJvYmplY3QifX0sInNlcnZlZCI6dHJ1ZSwic3RvcmFnZSI6dHJ1ZSwic3VicmVzb3VyY2VzIjp7InN0YXR1cyI6e319fV19fQ== - type: olm.bundle.object value: data: eyJhcGlWZXJzaW9uIjoiYXBpZXh0ZW5zaW9ucy5rOHMuaW8vdjEiLCJraW5kIjoiQ3VzdG9tUmVzb3VyY2VEZWZpbml0aW9uIiwibWV0YWRhdGEiOnsiYW5ub3RhdGlvbnMiOnsiY29udHJvbGxlci1nZW4ua3ViZWJ1aWxkZXIuaW8vdmVyc2lvbiI6InYwLjkuMiJ9LCJuYW1lIjoic3RvcmFnZWNvbnN1bWVycy5vY3Mub3BlbnNoaWZ0LmlvIn0sInNwZWMiOnsiZ3JvdXAiOiJvY3Mub3BlbnNoaWZ0LmlvIiwibmFtZXMiOnsia2luZCI6IlN0b3JhZ2VDb25zdW1lciIsImxpc3RLaW5kIjoiU3RvcmFnZUNvbnN1bWVyTGlzdCIsInBsdXJhbCI6InN0b3JhZ2Vjb25zdW1lcnMiLCJzaW5ndWxhciI6InN0b3JhZ2Vjb25zdW1lciJ9LCJzY29wZSI6Ik5hbWVzcGFjZWQiLCJ2ZXJzaW9ucyI6W3sibmFtZSI6InYxYWxwaGExIiwic2NoZW1hIjp7Im9wZW5BUElWM1NjaGVtYSI6eyJkZXNjcmlwdGlvbiI6IlN0b3JhZ2VDb25zdW1lciBpcyB0aGUgU2NoZW1hIGZvciB0aGUgc3RvcmFnZWNvbnN1bWVycyBBUEkiLCJwcm9wZXJ0aWVzIjp7ImFwaVZlcnNpb24iOnsiZGVzY3JpcHRpb24iOiJBUElWZXJzaW9uIGRlZmluZXMgdGhlIHZlcnNpb25lZCBzY2hlbWEgb2YgdGhpcyByZXByZXNlbnRhdGlvbiBvZiBhbiBvYmplY3QuIFNlcnZlcnMgc2hvdWxkIGNvbnZlcnQgcmVjb2duaXplZCBzY2hlbWFzIHRvIHRoZSBsYXRlc3QgaW50ZXJuYWwgdmFsdWUsIGFuZCBtYXkgcmVqZWN0IHVucmVjb2duaXplZCB2YWx1ZXMuIE1vcmUgaW5mbzogaHR0cHM6Ly9naXQuazhzLmlvL2NvbW11bml0eS9jb250cmlidXRvcnMvZGV2ZWwvc2lnLWFyY2hpdGVjdHVyZS9hcGktY29udmVudGlvbnMubWQjcmVzb3VyY2VzIiwidHlwZSI6InN0cmluZyJ9LCJraW5kIjp7ImRlc2NyaXB0aW9uIjoiS2luZCBpcyBhIHN0cmluZyB2YWx1ZSByZXByZXNlbnRpbmcgdGhlIFJFU1QgcmVzb3VyY2UgdGhpcyBvYmplY3QgcmVwcmVzZW50cy4gU2VydmVycyBtYXkgaW5mZXIgdGhpcyBmcm9tIHRoZSBlbmRwb2ludCB0aGUgY2xpZW50IHN1Ym1pdHMgcmVxdWVzdHMgdG8uIENhbm5vdCBiZSB1cGRhdGVkLiBJbiBDYW1lbENhc2UuIE1vcmUgaW5mbzogaHR0cHM6Ly9naXQuazhzLmlvL2NvbW11bml0eS9jb250cmlidXRvcnMvZGV2ZWwvc2lnLWFyY2hpdGVjdHVyZS9hcGktY29udmVudGlvbnMubWQjdHlwZXMta2luZHMiLCJ0eXBlIjoic3RyaW5nIn0sIm1ldGFkYXRhIjp7InR5cGUiOiJvYmplY3QifSwic3BlYyI6eyJkZXNjcmlwdGlvbiI6IlN0b3JhZ2VDb25zdW1lclNwZWMgZGVmaW5lcyB0aGUgZGVzaXJlZCBzdGF0ZSBvZiBTdG9yYWdlQ29uc3VtZXIiLCJwcm9wZXJ0aWVzIjp7ImVuYWJsZSI6eyJkZXNjcmlwdGlvbiI6IkVuYWJsZSBmbGFnIGlnbm9yZXMgYSByZWNvbmNpbGUgaWYgc2V0IHRvIGZhbHNlIiwidHlwZSI6ImJvb2xlYW4ifX0sInR5cGUiOiJvYmplY3QifSwic3RhdHVzIjp7ImRlc2NyaXB0aW9uIjoiU3RvcmFnZUNvbnN1bWVyU3RhdHVzIGRlZmluZXMgdGhlIG9ic2VydmVkIHN0YXRlIG9mIFN0b3JhZ2VDb25zdW1lciIsInByb3BlcnRpZXMiOnsiY2VwaFJlc291cmNlcyI6eyJkZXNjcmlwdGlvbiI6IkNlcGhSZXNvdXJjZXMgcHJvdmlkZSBkZXRhaWxzIG9mIGNyZWF0ZWQgY2VwaCByZXNvdXJjZXMgcmVxdWlyZWQgZm9yIGV4dGVybmFsIHN0b3JhZ2UiLCJpdGVtcyI6eyJkZXNjcmlwdGlvbiI6IkNlcGhSZXNvdXJjZXNTcGVjIGhvbGQgZGV0YWlscyBvZiBjcmVhdGVkIGNlcGggcmVzb3VyY2VzIHJlcXVpcmVkIGZvciBleHRlcm5hbCBzdG9yYWdlIiwicHJvcGVydGllcyI6eyJjZXBoQ2xpZW50cyI6eyJhZGRpdGlvbmFsUHJvcGVydGllcyI6eyJ0eXBlIjoic3RyaW5nIn0sImRlc2NyaXB0aW9uIjoiQ2VwaENsaWVudHMgaG9sZHMgdGhlIG5hbWUgb2YgQ2VwaENsaWVudHMgbWFwcGVkIHRvIHRoZSBjcmVhdGVkIGNlcGggcmVzb3VyY2UiLCJ0eXBlIjoib2JqZWN0In0sImtpbmQiOnsiZGVzY3JpcHRpb24iOiJLaW5kIGRlc2NyaWJlcyB0aGUga2luZCBvZiBjcmVhdGVkIGNlcGggcmVzb3VyY2UiLCJ0eXBlIjoic3RyaW5nIn0sIm5hbWUiOnsiZGVzY3JpcHRpb24iOiJOYW1lIGRlc2NyaWJlcyB0aGUgbmFtZSBvZiBjcmVhdGVkIGNlcGggcmVzb3VyY2UiLCJ0eXBlIjoic3RyaW5nIn0sInN0YXR1cyI6eyJkZXNjcmlwdGlvbiI6IlBoYXNlIGRlc2NyaWJlcyB0aGUgcGhhc2Ugb2YgY3JlYXRlZCBjZXBoIHJlc291cmNlIiwidHlwZSI6InN0cmluZyJ9fSwidHlwZSI6Im9iamVjdCJ9LCJ0eXBlIjoiYXJyYXkifSwiY2xpZW50Ijp7ImRlc2NyaXB0aW9uIjoiSW5mb3JtYXRpb24gb2Ygc3RvcmFnZSBjbGllbnQgcmVjZWl2ZWQgZnJvbSBjb25zdW1lciIsInByb3BlcnRpZXMiOnsiY2x1c3RlcklkIjp7ImRlc2NyaXB0aW9uIjoiQ2x1c3RlcklEIGlzIHRoZSBpZCBvZiB0aGUgb3BlbnNoaWZ0IGNsdXN0ZXIiLCJ0eXBlIjoic3RyaW5nIn0sImNsdXN0ZXJOYW1lIjp7ImRlc2NyaXB0aW9uIjoiQ2x1c3Rlck5hbWUgaXMgdGhlIG5hbWUgb2YgdGhlIG9wZW5zaGlmdCBjbHVzdGVyIiwidHlwZSI6InN0cmluZyJ9LCJuYW1lIjp7ImRlc2NyaXB0aW9uIjoiTmFtZSBpcyB0aGUgbmFtZSBvZiBjb25uZWN0ZWQgc3RvcmFnZWNsaWVudCIsInR5cGUiOiJzdHJpbmcifSwib3BlcmF0b3JWZXJzaW9uIjp7ImRlc2NyaXB0aW9uIjoiU3RvcmFnZUNsaWVudCBPcGVyYXRvciBWZXJzaW9uIiwidHlwZSI6InN0cmluZyJ9LCJwbGF0Zm9ybVZlcnNpb24iOnsiZGVzY3JpcHRpb24iOiJTdG9yYWdlQ2xpZW50IFBsYXRmb3JtIFZlcnNpb24iLCJ0eXBlIjoic3RyaW5nIn19LCJyZXF1aXJlZCI6WyJjbHVzdGVySWQiLCJjbHVzdGVyTmFtZSIsIm5hbWUiLCJvcGVyYXRvclZlcnNpb24iLCJwbGF0Zm9ybVZlcnNpb24iXSwidHlwZSI6Im9iamVjdCJ9LCJsYXN0SGVhcnRiZWF0Ijp7ImRlc2NyaXB0aW9uIjoiVGltZXN0YW1wIG9mIGxhc3QgaGVhcnRiZWF0IHJlY2VpdmVkIGZyb20gY29uc3VtZXIiLCJmb3JtYXQiOiJkYXRlLXRpbWUiLCJ0eXBlIjoic3RyaW5nIn0sInN0YXRlIjp7ImRlc2NyaXB0aW9uIjoiU3RhdGUgZGVzY3JpYmVzIHRoZSBzdGF0ZSBvZiBTdG9yYWdlQ29uc3VtZXIiLCJ0eXBlIjoic3RyaW5nIn19LCJ0eXBlIjoib2JqZWN0In19LCJ0eXBlIjoib2JqZWN0In19LCJzZXJ2ZWQiOnRydWUsInN0b3JhZ2UiOnRydWUsInN1YnJlc291cmNlcyI6eyJzdGF0dXMiOnt9fX1dfX0= @@ -131,15 +131,15 @@ properties: relatedImages: - image: quay.io/ceph/ceph:v18.2.0 name: ceph-container -- image: quay.io/ocs-dev/ocs-metrics-exporter:main-34fff28 +- image: quay.io/ocs-dev/ocs-metrics-exporter:main-b18b234 name: ocs-metrics-exporter - image: quay.io/ocs-dev/ocs-must-gather:latest name: ocs-must-gather -- image: quay.io/ocs-dev/ocs-operator-bundle:main-34fff28 +- image: quay.io/ocs-dev/ocs-operator-bundle:main-b18b234 name: "" -- image: quay.io/ocs-dev/ocs-operator:main-34fff28 +- image: quay.io/ocs-dev/ocs-operator:main-b18b234 name: "" -- image: quay.io/ocs-dev/rook-ceph:latest-downstream +- image: quay.io/ocs-dev/rook-ceph:vmaster-75180f4f3 name: rook-container - image: quay.io/openshift/origin-oauth-proxy:4.16.0 name: ux-backend-oauth-image diff --git a/go.mod b/go.mod index 771b283ca..663ad355a 100644 --- a/go.mod +++ b/go.mod @@ -12,7 +12,7 @@ require ( github.com/openshift/custom-resource-status v1.1.2 github.com/operator-framework/api v0.22.0 github.com/prometheus/client_golang v1.19.0 - github.com/red-hat-storage/ocs-operator/api/v4 v4.0.0-20240328064129-39415c481f57 + github.com/red-hat-storage/ocs-operator/api/v4 v4.0.0-20240605150046-b18b234e14f6 github.com/stretchr/testify v1.9.0 go.uber.org/multierr v1.11.0 k8s.io/api v0.29.3 @@ -23,21 +23,22 @@ require ( ) require ( + github.com/Masterminds/semver/v3 v3.2.1 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/blang/semver/v4 v4.0.0 // indirect github.com/cenkalti/backoff/v3 v3.2.2 // indirect github.com/cespare/xxhash/v2 v2.2.0 // indirect - github.com/containernetworking/cni v1.1.2 // indirect + github.com/containernetworking/cni v1.2.0-rc1 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect - github.com/emicklei/go-restful/v3 v3.11.3 // indirect + github.com/emicklei/go-restful/v3 v3.12.0 // indirect github.com/evanphx/json-patch v5.9.0+incompatible // indirect github.com/evanphx/json-patch/v5 v5.8.0 // indirect github.com/fsnotify/fsnotify v1.7.0 // indirect - github.com/go-jose/go-jose/v3 v3.0.3 // indirect + github.com/go-jose/go-jose/v4 v4.0.1 // indirect github.com/go-logr/zapr v1.3.0 // indirect - github.com/go-openapi/jsonpointer v0.20.3 // indirect - github.com/go-openapi/jsonreference v0.20.5 // indirect - github.com/go-openapi/swag v0.22.10 // indirect + github.com/go-openapi/jsonpointer v0.21.0 // indirect + github.com/go-openapi/jsonreference v0.21.0 // indirect + github.com/go-openapi/swag v0.23.0 // indirect github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 // indirect github.com/gogo/protobuf v1.3.2 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect @@ -56,13 +57,13 @@ require ( github.com/hashicorp/go-secure-stdlib/strutil v0.1.2 // indirect github.com/hashicorp/go-sockaddr v1.0.6 // indirect github.com/hashicorp/hcl v1.0.1-vault-5 // indirect - github.com/hashicorp/vault/api v1.12.2 // indirect + github.com/hashicorp/vault/api v1.13.0 // indirect github.com/hashicorp/vault/api/auth/approle v0.6.0 // indirect github.com/hashicorp/vault/api/auth/kubernetes v0.6.0 // indirect github.com/imdario/mergo v0.3.16 // indirect github.com/josharian/intern v1.0.0 // indirect github.com/json-iterator/go v1.1.12 // indirect - github.com/k8snetworkplumbingwg/network-attachment-definition-client v1.6.0 // indirect + github.com/k8snetworkplumbingwg/network-attachment-definition-client v1.7.0 // indirect github.com/kube-object-storage/lib-bucket-provisioner v0.0.0-20221122204822-d1a8c34382f1 // indirect github.com/libopenstorage/secrets v0.0.0-20231011182615-5f4b25ceede1 // indirect github.com/mailru/easyjson v0.7.7 // indirect @@ -78,14 +79,14 @@ require ( github.com/prometheus/client_model v0.5.0 // indirect github.com/prometheus/common v0.48.0 // indirect github.com/prometheus/procfs v0.12.0 // indirect - github.com/rook/rook/pkg/apis v0.0.0-20240327231646-b6b89a012a95 // indirect + github.com/rook/rook/pkg/apis v0.0.0-20240513003450-39f88521f0fd // indirect github.com/ryanuber/go-glob v1.0.0 // indirect github.com/sirupsen/logrus v1.9.3 // indirect github.com/spf13/pflag v1.0.5 // indirect go.uber.org/zap v1.26.0 // indirect golang.org/x/crypto v0.21.0 // indirect golang.org/x/exp v0.0.0-20231127185646-65229373498e // indirect - golang.org/x/net v0.22.0 // indirect + golang.org/x/net v0.23.0 // indirect golang.org/x/oauth2 v0.18.0 // indirect golang.org/x/sys v0.18.0 // indirect golang.org/x/term v0.18.0 // indirect @@ -100,8 +101,8 @@ require ( gopkg.in/yaml.v3 v3.0.1 // indirect k8s.io/component-base v0.29.0 // indirect k8s.io/klog/v2 v2.120.1 // indirect - k8s.io/kube-openapi v0.0.0-20240228011516-70dd3763d340 // indirect - k8s.io/utils v0.0.0-20240102154912-e7106e64919e // indirect + k8s.io/kube-openapi v0.0.0-20240322212309-b815d8309940 // indirect + k8s.io/utils v0.0.0-20240310230437-4693a0247e57 // indirect sigs.k8s.io/container-object-storage-interface-api v0.1.0 // indirect sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect sigs.k8s.io/structured-merge-diff/v4 v4.4.1 // indirect diff --git a/go.sum b/go.sum index a64ebb9d2..43b3d34c9 100644 --- a/go.sum +++ b/go.sum @@ -88,6 +88,8 @@ github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym github.com/IBM/ibm-storage-odf-operator v1.4.1 h1:OoWfV1FQ3byJz5mU9dNi3BZ1BnwNXF3hQMZObvwXiWs= github.com/IBM/ibm-storage-odf-operator v1.4.1/go.mod h1:TmOsuYoZIu70IMMZzdxfj1OH5EPPon3u1qzuQO9Xaxo= github.com/IBM/keyprotect-go-client v0.5.1/go.mod h1:5TwDM/4FRJq1ZOlwQL1xFahLWQ3TveR88VmL1u3njyI= +github.com/Masterminds/semver/v3 v3.2.1 h1:RN9w6+7QoMeJVGyfmbcgs28Br8cvmnucEXnY0rYXWg0= +github.com/Masterminds/semver/v3 v3.2.1/go.mod h1:qvl/7zhW3nngYb5+80sSMF+FG2BjYrf8m9wsX0PNOMQ= github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/PuerkitoBio/purell v1.0.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= @@ -143,8 +145,8 @@ github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWH github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= -github.com/containernetworking/cni v1.1.2 h1:wtRGZVv7olUHMOqouPpn3cXJWpJgM6+EUl31EQbXALQ= -github.com/containernetworking/cni v1.1.2/go.mod h1:sDpYKmGVENF3s6uvMvGgldDWeG8dMxakj/u+i9ht9vw= +github.com/containernetworking/cni v1.2.0-rc1 h1:AKI3+pXtgY4PDLN9+50o9IaywWVuey0Jkw3Lvzp0HCY= +github.com/containernetworking/cni v1.2.0-rc1/go.mod h1:Lt0TQcZQVDju64fYxUhDziTgXCDe3Olzi9I4zZJLWHg= github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/etcd v3.3.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= @@ -183,8 +185,8 @@ github.com/emicklei/go-restful v2.9.5+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT github.com/emicklei/go-restful v2.15.0+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= github.com/emicklei/go-restful/v3 v3.8.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= github.com/emicklei/go-restful/v3 v3.9.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= -github.com/emicklei/go-restful/v3 v3.11.3 h1:yagOQz/38xJmcNeZJtrUcKjkHRltIaIFXKWeG1SkWGE= -github.com/emicklei/go-restful/v3 v3.11.3/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= +github.com/emicklei/go-restful/v3 v3.12.0 h1:y2DdzBAURM29NFF94q6RaY4vjIH1rtwDapwQtU84iWk= +github.com/emicklei/go-restful/v3 v3.12.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= @@ -224,8 +226,8 @@ github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2 github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-jose/go-jose/v3 v3.0.0/go.mod h1:RNkWWRld676jZEYoV3+XK8L2ZnNSvIsxFMht0mSX+u8= github.com/go-jose/go-jose/v3 v3.0.1/go.mod h1:RNkWWRld676jZEYoV3+XK8L2ZnNSvIsxFMht0mSX+u8= -github.com/go-jose/go-jose/v3 v3.0.3 h1:fFKWeig/irsp7XD2zBxvnmA/XaRWp5V3CBsZXJF7G7k= -github.com/go-jose/go-jose/v3 v3.0.3/go.mod h1:5b+7YgP7ZICgJDBdfjZaIt+H/9L9T/YQrVfLAMboGkQ= +github.com/go-jose/go-jose/v4 v4.0.1 h1:QVEPDE3OluqXBQZDcnNvQrInro2h0e4eqNbnZSWqS6U= +github.com/go-jose/go-jose/v4 v4.0.1/go.mod h1:WVf9LFMHh/QVrmqrOfqun0C45tMe3RoiKJMPvgWwLfY= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= @@ -254,8 +256,8 @@ github.com/go-openapi/jsonpointer v0.18.0/go.mod h1:cOnomiV+CVVwFLk0A/MExoFMjwds github.com/go-openapi/jsonpointer v0.19.2/go.mod h1:3akKfEdA7DF1sugOqz1dVQHBcuDBPKZGEoHC/NkiQRg= github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= -github.com/go-openapi/jsonpointer v0.20.3 h1:jykzYWS/kyGtsHfRt6aV8JTB9pcQAXPIA7qlZ5aRlyk= -github.com/go-openapi/jsonpointer v0.20.3/go.mod h1:c7l0rjoouAuIxCm8v/JWKRgMjDG/+/7UBWsXMrv6PsM= +github.com/go-openapi/jsonpointer v0.21.0 h1:YgdVicSA9vH5RiHs9TZW5oyafXZFc6+2Vc1rr/O9oNQ= +github.com/go-openapi/jsonpointer v0.21.0/go.mod h1:IUyH9l/+uyhIYQ/PXVA41Rexl+kOkAPDdXEYns6fzUY= github.com/go-openapi/jsonreference v0.0.0-20160704190145-13c6e3589ad9/go.mod h1:W3Z9FmVs9qj+KR4zFKmDPGiLdk1D9Rlm7cyMvf57TTg= github.com/go-openapi/jsonreference v0.17.0/go.mod h1:g4xxGn04lDIRh0GJb5QlpE3HfopLOL6uZrK/VgnsK9I= github.com/go-openapi/jsonreference v0.18.0/go.mod h1:g4xxGn04lDIRh0GJb5QlpE3HfopLOL6uZrK/VgnsK9I= @@ -264,8 +266,8 @@ github.com/go-openapi/jsonreference v0.19.3/go.mod h1:rjx6GuL8TTa9VaixXglHmQmIL9 github.com/go-openapi/jsonreference v0.19.5/go.mod h1:RdybgQwPxbL4UEjuAruzK1x3nE69AqPYEJeo/TWfEeg= github.com/go-openapi/jsonreference v0.19.6/go.mod h1:diGHMEHg2IqXZGKxqyvWdfWU/aim5Dprw5bqpKkTvns= github.com/go-openapi/jsonreference v0.20.0/go.mod h1:Ag74Ico3lPc+zR+qjn4XBUmXymS4zJbYVCZmcgkasdo= -github.com/go-openapi/jsonreference v0.20.5 h1:hutI+cQI+HbSQaIGSfsBsYI0pHk+CATf8Fk5gCSj0yI= -github.com/go-openapi/jsonreference v0.20.5/go.mod h1:thAqAp31UABtI+FQGKAQfmv7DbFpKNUlva2UPCxKu2Y= +github.com/go-openapi/jsonreference v0.21.0 h1:Rs+Y7hSXT83Jacb7kFyjn4ijOuVGSvOdF2+tg1TRrwQ= +github.com/go-openapi/jsonreference v0.21.0/go.mod h1:LmZmgsrTkVg9LG4EaHeY8cBDslNPMo06cago5JNLkm4= github.com/go-openapi/loads v0.17.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU= github.com/go-openapi/loads v0.18.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU= github.com/go-openapi/loads v0.19.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU= @@ -290,8 +292,8 @@ github.com/go-openapi/swag v0.19.2/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= github.com/go-openapi/swag v0.19.14/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ= github.com/go-openapi/swag v0.21.1/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ= -github.com/go-openapi/swag v0.22.10 h1:4y86NVn7Z2yYd6pfS4Z+Nyh3aAUL3Nul+LMbhFKy0gA= -github.com/go-openapi/swag v0.22.10/go.mod h1:Cnn8BYtRlx6BNE3DPN86f/xkapGIcLWzh3CLEb4C1jI= +github.com/go-openapi/swag v0.23.0 h1:vsEVJDUo2hPJ2tu0/Xc+4noaxyEffXNIs3cOULZ+GrE= +github.com/go-openapi/swag v0.23.0/go.mod h1:esZ8ITTYEsH1V2trKHjAN8Ai7xHb8RV+YSZ577vPjgQ= github.com/go-openapi/validate v0.18.0/go.mod h1:Uh4HdOzKt19xGIGm1qHf/ofbX1YQ4Y+MYsct2VUrAJ4= github.com/go-openapi/validate v0.19.2/go.mod h1:1tRCw7m3jtI8eNWEEliiAqUIcBztB2KDnRCRMUi7GTA= github.com/go-openapi/validate v0.19.5/go.mod h1:8DJv2CVJQ6kGNpFW6eV9N3JviE1C85nY1c2z52x1Gk4= @@ -484,8 +486,8 @@ github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2p github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= github.com/hashicorp/vault/api v1.10.0/go.mod h1:jo5Y/ET+hNyz+JnKDt8XLAdKs+AM0G5W0Vp1IrFI8N8= github.com/hashicorp/vault/api v1.12.0/go.mod h1:si+lJCYO7oGkIoNPAN8j3azBLTn9SjMGS+jFaHd1Cck= -github.com/hashicorp/vault/api v1.12.2 h1:7YkCTE5Ni90TcmYHDBExdt4WGJxhpzaHqR6uGbQb/rE= -github.com/hashicorp/vault/api v1.12.2/go.mod h1:LSGf1NGT1BnvFFnKVtnvcaLBM2Lz+gJdpL6HUYed8KE= +github.com/hashicorp/vault/api v1.13.0 h1:RTCGpE2Rgkn9jyPcFlc7YmNocomda44k5ck8FKMH41Y= +github.com/hashicorp/vault/api v1.13.0/go.mod h1:0cb/uZUv1w2cVu9DIvuW1SMlXXC6qtATJt+LXJRx+kg= github.com/hashicorp/vault/api/auth/approle v0.5.0/go.mod h1:CHOQIA1AZACfjTzHggmyfiOZ+xCSKNRFqe48FTCzH0k= github.com/hashicorp/vault/api/auth/approle v0.6.0 h1:ELfFFQlTM/e97WJKu1HvNFa7lQ3tlTwwzrR1NJE1V7Y= github.com/hashicorp/vault/api/auth/approle v0.6.0/go.mod h1:CCoIl1xBC3lAWpd1HV+0ovk76Z8b8Mdepyk21h3pGk0= @@ -518,8 +520,8 @@ github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1 github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= -github.com/k8snetworkplumbingwg/network-attachment-definition-client v1.6.0 h1:BT3ghAY0q7lWib9rz+tVXDFkm27dJV6SLCn7TunZwo4= -github.com/k8snetworkplumbingwg/network-attachment-definition-client v1.6.0/go.mod h1:wxt2YWRVItDtaQmVSmaN5ubE2L1c9CiNoHQwSJnM8Ko= +github.com/k8snetworkplumbingwg/network-attachment-definition-client v1.7.0 h1:47q2PIbDYHmOaqLxgGnvpLq96v9UKDsJfNW6j/KbfpQ= +github.com/k8snetworkplumbingwg/network-attachment-definition-client v1.7.0/go.mod h1:KDX0bPKeuhMakcNzLf2sWXKPNZ30wH01bsY/KJZLxFY= github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= @@ -709,8 +711,8 @@ github.com/prometheus/procfs v0.2.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4O github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo= github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo= github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= -github.com/red-hat-storage/ocs-operator/api/v4 v4.0.0-20240328064129-39415c481f57 h1:uI4e/diyyJq3KjOz+qfbsxuFRu9/s7S9i4iv+tb09aY= -github.com/red-hat-storage/ocs-operator/api/v4 v4.0.0-20240328064129-39415c481f57/go.mod h1:2UgwQdNp6iB8QxwrDH0Dh5xKgEHWhqrbeL2zv7v70bI= +github.com/red-hat-storage/ocs-operator/api/v4 v4.0.0-20240605150046-b18b234e14f6 h1:8AMzmhvS4p4p/KXnb/mqxzNL3BDgdYjD+U8eB5ey02o= +github.com/red-hat-storage/ocs-operator/api/v4 v4.0.0-20240605150046-b18b234e14f6/go.mod h1:kbtILVV15bhm4UFehDYhezjZIvbeaZQ/4vQdv2gagdk= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-charset v0.0.0-20180617210344-2471d30d28b4/go.mod h1:qgYeAmZ5ZIpBWTGllZSQnw97Dj+woV0toclVaRGI8pc= @@ -719,8 +721,8 @@ github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTE github.com/rogpeppe/go-internal v1.8.1/go.mod h1:JeRgkft04UBgHMgCIwADu4Pn6Mtm5d4nPKWu0nJ5d+o= github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M= github.com/rogpeppe/go-internal v1.11.0/go.mod h1:ddIwULY96R17DhadqLgMfk9H9tvdUzkipdSkR5nkCZA= -github.com/rook/rook/pkg/apis v0.0.0-20240327231646-b6b89a012a95 h1:zxxHayNhfrk5bC4j9roNGR+03cLVlVnwiJrEJMF6BG8= -github.com/rook/rook/pkg/apis v0.0.0-20240327231646-b6b89a012a95/go.mod h1:fwJ5UdJkHs6D1Y64L8SuM7ZnMtfJJfu1/4K2hNp/pHo= +github.com/rook/rook/pkg/apis v0.0.0-20240513003450-39f88521f0fd h1:AvYCpfHnCy7qY6zXR9lophJ7o9E7AdJV49FXKP+OV6A= +github.com/rook/rook/pkg/apis v0.0.0-20240513003450-39f88521f0fd/go.mod h1:X/tPOJyDiIcJG75MLdPIYbZ4gKK3WMOyCb6ErPWSG0k= github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= @@ -779,6 +781,8 @@ github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1 github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= github.com/vektah/gqlparser v1.1.2/go.mod h1:1ycwN7Ij5njmMkPPAOaRFY4rET2Enx7IkVv3vaXspKw= +github.com/vishvananda/netns v0.0.4 h1:Oeaw1EM2JMxD51g9uhtC0D7erkIjgmj8+JZc26m1YX8= +github.com/vishvananda/netns v0.0.4/go.mod h1:SpkAiCQRtJ6TvvxPnOSyH3BMl6unz3xZlaprSwhNNJM= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= @@ -841,7 +845,6 @@ golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58= golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4= golang.org/x/crypto v0.17.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= -golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU= golang.org/x/crypto v0.21.0 h1:X31++rzVUdKhX5sWmSOFZxx8UW/ldWx55cbf08iNAMA= golang.org/x/crypto v0.21.0/go.mod h1:0BP7YvVV9gBbVKyeTG0Gyn+gZm94bibOW5BjDEYAOMs= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= @@ -955,8 +958,8 @@ golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= -golang.org/x/net v0.22.0 h1:9sGLhx7iRIHEiX0oAJ3MRZMUCElJgy7Br1nO+AMN3Tc= -golang.org/x/net v0.22.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg= +golang.org/x/net v0.23.0 h1:7EYJ93RZ9vYSZAIb2x3lnuvqO5zneoD6IvWjuhfxjTs= +golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -1091,7 +1094,6 @@ golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4= golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= @@ -1105,7 +1107,6 @@ golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= golang.org/x/term v0.13.0/go.mod h1:LTmsnFJwVN6bCy1rVCoS+qHT1HhALEFxKncY3WNNh4U= golang.org/x/term v0.15.0/go.mod h1:BDl952bC7+uMoWR75FIrCDx79TPU9oHkTZ9yRbYOrX0= -golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk= golang.org/x/term v0.18.0 h1:FcHjZXDMxI8mM3nwhX9HlKop4C0YQvCVCdwYl2wOtE8= golang.org/x/term v0.18.0/go.mod h1:ILwASektA3OnRv7amZ1xhE/KTR+u50pbXfZ03+6Nx58= golang.org/x/text v0.0.0-20160726164857-2910a502d2bf/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -1512,8 +1513,8 @@ k8s.io/kube-openapi v0.0.0-20201113171705-d219536bb9fd/go.mod h1:WOJ3KddDSol4tAG k8s.io/kube-openapi v0.0.0-20211115234752-e816edb12b65/go.mod h1:sX9MT8g7NVZM5lVL/j8QyCCJe8YSMW30QvGZWaCIDIk= k8s.io/kube-openapi v0.0.0-20220124234850-424119656bbf/go.mod h1:sX9MT8g7NVZM5lVL/j8QyCCJe8YSMW30QvGZWaCIDIk= k8s.io/kube-openapi v0.0.0-20221012153701-172d655c2280/go.mod h1:+Axhij7bCpeqhklhUTe3xmOn6bWxolyZEeyaFpjGtl4= -k8s.io/kube-openapi v0.0.0-20240228011516-70dd3763d340 h1:BZqlfIlq5YbRMFko6/PM7FjZpUb45WallggurYhKGag= -k8s.io/kube-openapi v0.0.0-20240228011516-70dd3763d340/go.mod h1:yD4MZYeKMBwQKVht279WycxKyM84kkAx2DPrTXaeb98= +k8s.io/kube-openapi v0.0.0-20240322212309-b815d8309940 h1:qVoMaQV5t62UUvHe16Q3eb2c5HPzLHYzsi0Tu/xLndo= +k8s.io/kube-openapi v0.0.0-20240322212309-b815d8309940/go.mod h1:yD4MZYeKMBwQKVht279WycxKyM84kkAx2DPrTXaeb98= k8s.io/utils v0.0.0-20190506122338-8fab8cb257d5/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew= k8s.io/utils v0.0.0-20200324210504-a9aa75ae1b89/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew= k8s.io/utils v0.0.0-20200729134348-d5654de09c73/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= @@ -1522,8 +1523,8 @@ k8s.io/utils v0.0.0-20210802155522-efc7438f0176/go.mod h1:jPW/WVKK9YHAvNhRxK0md/ k8s.io/utils v0.0.0-20211116205334-6203023598ed/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= k8s.io/utils v0.0.0-20221107191617-1a15be271d1d/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= k8s.io/utils v0.0.0-20221128185143-99ec85e7a448/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= -k8s.io/utils v0.0.0-20240102154912-e7106e64919e h1:eQ/4ljkx21sObifjzXwlPKpdGLrCfRziVtos3ofG/sQ= -k8s.io/utils v0.0.0-20240102154912-e7106e64919e/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= +k8s.io/utils v0.0.0-20240310230437-4693a0247e57 h1:gbqbevonBh57eILzModw6mrkbwM0gQBEuevE/AaBsHY= +k8s.io/utils v0.0.0-20240310230437-4693a0247e57/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= diff --git a/hack/make-bundle-vars.mk b/hack/make-bundle-vars.mk index 73aefc0fb..e243c9c8d 100644 --- a/hack/make-bundle-vars.mk +++ b/hack/make-bundle-vars.mk @@ -74,7 +74,7 @@ CRD_OPTIONS ?= "crd" OCS_BUNDLE_NAME ?= ocs-operator OCS_BUNDLE_IMG_NAME ?= $(OCS_BUNDLE_NAME)-bundle OCS_BUNDLE_VERSION ?= v4.17.0 -OCS_BUNDLE_IMG_TAG ?= main-34fff28 +OCS_BUNDLE_IMG_TAG ?= main-b18b234 OCS_BUNDLE_IMG_LOCATION ?= quay.io/ocs-dev OCS_BUNDLE_IMG ?= $(OCS_BUNDLE_IMG_LOCATION)/$(OCS_BUNDLE_IMG_NAME):$(OCS_BUNDLE_IMG_TAG) diff --git a/vendor/github.com/Masterminds/semver/v3/.gitignore b/vendor/github.com/Masterminds/semver/v3/.gitignore new file mode 100644 index 000000000..6b061e617 --- /dev/null +++ b/vendor/github.com/Masterminds/semver/v3/.gitignore @@ -0,0 +1 @@ +_fuzz/ \ No newline at end of file diff --git a/vendor/github.com/Masterminds/semver/v3/.golangci.yml b/vendor/github.com/Masterminds/semver/v3/.golangci.yml new file mode 100644 index 000000000..fbc633259 --- /dev/null +++ b/vendor/github.com/Masterminds/semver/v3/.golangci.yml @@ -0,0 +1,27 @@ +run: + deadline: 2m + +linters: + disable-all: true + enable: + - misspell + - govet + - staticcheck + - errcheck + - unparam + - ineffassign + - nakedret + - gocyclo + - dupl + - goimports + - revive + - gosec + - gosimple + - typecheck + - unused + +linters-settings: + gofmt: + simplify: true + dupl: + threshold: 600 diff --git a/vendor/github.com/Masterminds/semver/v3/CHANGELOG.md b/vendor/github.com/Masterminds/semver/v3/CHANGELOG.md new file mode 100644 index 000000000..f12626423 --- /dev/null +++ b/vendor/github.com/Masterminds/semver/v3/CHANGELOG.md @@ -0,0 +1,214 @@ +# Changelog + +## 3.2.0 (2022-11-28) + +### Added + +- #190: Added text marshaling and unmarshaling +- #167: Added JSON marshalling for constraints (thanks @SimonTheLeg) +- #173: Implement encoding.TextMarshaler and encoding.TextUnmarshaler on Version (thanks @MarkRosemaker) +- #179: Added New() version constructor (thanks @kazhuravlev) + +### Changed + +- #182/#183: Updated CI testing setup + +### Fixed + +- #186: Fixing issue where validation of constraint section gave false positives +- #176: Fix constraints check with *-0 (thanks @mtt0) +- #181: Fixed Caret operator (^) gives unexpected results when the minor version in constraint is 0 (thanks @arshchimni) +- #161: Fixed godoc (thanks @afirth) + +## 3.1.1 (2020-11-23) + +### Fixed + +- #158: Fixed issue with generated regex operation order that could cause problem + +## 3.1.0 (2020-04-15) + +### Added + +- #131: Add support for serializing/deserializing SQL (thanks @ryancurrah) + +### Changed + +- #148: More accurate validation messages on constraints + +## 3.0.3 (2019-12-13) + +### Fixed + +- #141: Fixed issue with <= comparison + +## 3.0.2 (2019-11-14) + +### Fixed + +- #134: Fixed broken constraint checking with ^0.0 (thanks @krmichelos) + +## 3.0.1 (2019-09-13) + +### Fixed + +- #125: Fixes issue with module path for v3 + +## 3.0.0 (2019-09-12) + +This is a major release of the semver package which includes API changes. The Go +API is compatible with ^1. The Go API was not changed because many people are using +`go get` without Go modules for their applications and API breaking changes cause +errors which we have or would need to support. + +The changes in this release are the handling based on the data passed into the +functions. These are described in the added and changed sections below. + +### Added + +- StrictNewVersion function. This is similar to NewVersion but will return an + error if the version passed in is not a strict semantic version. For example, + 1.2.3 would pass but v1.2.3 or 1.2 would fail because they are not strictly + speaking semantic versions. This function is faster, performs fewer operations, + and uses fewer allocations than NewVersion. +- Fuzzing has been performed on NewVersion, StrictNewVersion, and NewConstraint. + The Makefile contains the operations used. For more information on you can start + on Wikipedia at https://en.wikipedia.org/wiki/Fuzzing +- Now using Go modules + +### Changed + +- NewVersion has proper prerelease and metadata validation with error messages + to signal an issue with either of them +- ^ now operates using a similar set of rules to npm/js and Rust/Cargo. If the + version is >=1 the ^ ranges works the same as v1. For major versions of 0 the + rules have changed. The minor version is treated as the stable version unless + a patch is specified and then it is equivalent to =. One difference from npm/js + is that prereleases there are only to a specific version (e.g. 1.2.3). + Prereleases here look over multiple versions and follow semantic version + ordering rules. This pattern now follows along with the expected and requested + handling of this packaged by numerous users. + +## 1.5.0 (2019-09-11) + +### Added + +- #103: Add basic fuzzing for `NewVersion()` (thanks @jesse-c) + +### Changed + +- #82: Clarify wildcard meaning in range constraints and update tests for it (thanks @greysteil) +- #83: Clarify caret operator range for pre-1.0.0 dependencies (thanks @greysteil) +- #72: Adding docs comment pointing to vert for a cli +- #71: Update the docs on pre-release comparator handling +- #89: Test with new go versions (thanks @thedevsaddam) +- #87: Added $ to ValidPrerelease for better validation (thanks @jeremycarroll) + +### Fixed + +- #78: Fix unchecked error in example code (thanks @ravron) +- #70: Fix the handling of pre-releases and the 0.0.0 release edge case +- #97: Fixed copyright file for proper display on GitHub +- #107: Fix handling prerelease when sorting alphanum and num +- #109: Fixed where Validate sometimes returns wrong message on error + +## 1.4.2 (2018-04-10) + +### Changed + +- #72: Updated the docs to point to vert for a console appliaction +- #71: Update the docs on pre-release comparator handling + +### Fixed + +- #70: Fix the handling of pre-releases and the 0.0.0 release edge case + +## 1.4.1 (2018-04-02) + +### Fixed + +- Fixed #64: Fix pre-release precedence issue (thanks @uudashr) + +## 1.4.0 (2017-10-04) + +### Changed + +- #61: Update NewVersion to parse ints with a 64bit int size (thanks @zknill) + +## 1.3.1 (2017-07-10) + +### Fixed + +- Fixed #57: number comparisons in prerelease sometimes inaccurate + +## 1.3.0 (2017-05-02) + +### Added + +- #45: Added json (un)marshaling support (thanks @mh-cbon) +- Stability marker. See https://masterminds.github.io/stability/ + +### Fixed + +- #51: Fix handling of single digit tilde constraint (thanks @dgodd) + +### Changed + +- #55: The godoc icon moved from png to svg + +## 1.2.3 (2017-04-03) + +### Fixed + +- #46: Fixed 0.x.x and 0.0.x in constraints being treated as * + +## Release 1.2.2 (2016-12-13) + +### Fixed + +- #34: Fixed issue where hyphen range was not working with pre-release parsing. + +## Release 1.2.1 (2016-11-28) + +### Fixed + +- #24: Fixed edge case issue where constraint "> 0" does not handle "0.0.1-alpha" + properly. + +## Release 1.2.0 (2016-11-04) + +### Added + +- #20: Added MustParse function for versions (thanks @adamreese) +- #15: Added increment methods on versions (thanks @mh-cbon) + +### Fixed + +- Issue #21: Per the SemVer spec (section 9) a pre-release is unstable and + might not satisfy the intended compatibility. The change here ignores pre-releases + on constraint checks (e.g., ~ or ^) when a pre-release is not part of the + constraint. For example, `^1.2.3` will ignore pre-releases while + `^1.2.3-alpha` will include them. + +## Release 1.1.1 (2016-06-30) + +### Changed + +- Issue #9: Speed up version comparison performance (thanks @sdboyer) +- Issue #8: Added benchmarks (thanks @sdboyer) +- Updated Go Report Card URL to new location +- Updated Readme to add code snippet formatting (thanks @mh-cbon) +- Updating tagging to v[SemVer] structure for compatibility with other tools. + +## Release 1.1.0 (2016-03-11) + +- Issue #2: Implemented validation to provide reasons a versions failed a + constraint. + +## Release 1.0.1 (2015-12-31) + +- Fixed #1: * constraint failing on valid versions. + +## Release 1.0.0 (2015-10-20) + +- Initial release diff --git a/vendor/github.com/Masterminds/semver/v3/LICENSE.txt b/vendor/github.com/Masterminds/semver/v3/LICENSE.txt new file mode 100644 index 000000000..9ff7da9c4 --- /dev/null +++ b/vendor/github.com/Masterminds/semver/v3/LICENSE.txt @@ -0,0 +1,19 @@ +Copyright (C) 2014-2019, Matt Butcher and Matt Farina + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/vendor/github.com/Masterminds/semver/v3/Makefile b/vendor/github.com/Masterminds/semver/v3/Makefile new file mode 100644 index 000000000..0e7b5c713 --- /dev/null +++ b/vendor/github.com/Masterminds/semver/v3/Makefile @@ -0,0 +1,30 @@ +GOPATH=$(shell go env GOPATH) +GOLANGCI_LINT=$(GOPATH)/bin/golangci-lint + +.PHONY: lint +lint: $(GOLANGCI_LINT) + @echo "==> Linting codebase" + @$(GOLANGCI_LINT) run + +.PHONY: test +test: + @echo "==> Running tests" + GO111MODULE=on go test -v + +.PHONY: test-cover +test-cover: + @echo "==> Running Tests with coverage" + GO111MODULE=on go test -cover . + +.PHONY: fuzz +fuzz: + @echo "==> Running Fuzz Tests" + go test -fuzz=FuzzNewVersion -fuzztime=15s . + go test -fuzz=FuzzStrictNewVersion -fuzztime=15s . + go test -fuzz=FuzzNewConstraint -fuzztime=15s . + +$(GOLANGCI_LINT): + # Install golangci-lint. The configuration for it is in the .golangci.yml + # file in the root of the repository + echo ${GOPATH} + curl -sfL https://install.goreleaser.com/github.com/golangci/golangci-lint.sh | sh -s -- -b $(GOPATH)/bin v1.17.1 diff --git a/vendor/github.com/Masterminds/semver/v3/README.md b/vendor/github.com/Masterminds/semver/v3/README.md new file mode 100644 index 000000000..eab8cac3b --- /dev/null +++ b/vendor/github.com/Masterminds/semver/v3/README.md @@ -0,0 +1,258 @@ +# SemVer + +The `semver` package provides the ability to work with [Semantic Versions](http://semver.org) in Go. Specifically it provides the ability to: + +* Parse semantic versions +* Sort semantic versions +* Check if a semantic version fits within a set of constraints +* Optionally work with a `v` prefix + +[![Stability: +Active](https://masterminds.github.io/stability/active.svg)](https://masterminds.github.io/stability/active.html) +[![](https://github.com/Masterminds/semver/workflows/Tests/badge.svg)](https://github.com/Masterminds/semver/actions) +[![GoDoc](https://img.shields.io/static/v1?label=godoc&message=reference&color=blue)](https://pkg.go.dev/github.com/Masterminds/semver/v3) +[![Go Report Card](https://goreportcard.com/badge/github.com/Masterminds/semver)](https://goreportcard.com/report/github.com/Masterminds/semver) + +If you are looking for a command line tool for version comparisons please see +[vert](https://github.com/Masterminds/vert) which uses this library. + +## Package Versions + +Note, import `github.com/github.com/Masterminds/semver/v3` to use the latest version. + +There are three major versions fo the `semver` package. + +* 3.x.x is the stable and active version. This version is focused on constraint + compatibility for range handling in other tools from other languages. It has + a similar API to the v1 releases. The development of this version is on the master + branch. The documentation for this version is below. +* 2.x was developed primarily for [dep](https://github.com/golang/dep). There are + no tagged releases and the development was performed by [@sdboyer](https://github.com/sdboyer). + There are API breaking changes from v1. This version lives on the [2.x branch](https://github.com/Masterminds/semver/tree/2.x). +* 1.x.x is the original release. It is no longer maintained. You should use the + v3 release instead. You can read the documentation for the 1.x.x release + [here](https://github.com/Masterminds/semver/blob/release-1/README.md). + +## Parsing Semantic Versions + +There are two functions that can parse semantic versions. The `StrictNewVersion` +function only parses valid version 2 semantic versions as outlined in the +specification. The `NewVersion` function attempts to coerce a version into a +semantic version and parse it. For example, if there is a leading v or a version +listed without all 3 parts (e.g. `v1.2`) it will attempt to coerce it into a valid +semantic version (e.g., 1.2.0). In both cases a `Version` object is returned +that can be sorted, compared, and used in constraints. + +When parsing a version an error is returned if there is an issue parsing the +version. For example, + + v, err := semver.NewVersion("1.2.3-beta.1+build345") + +The version object has methods to get the parts of the version, compare it to +other versions, convert the version back into a string, and get the original +string. Getting the original string is useful if the semantic version was coerced +into a valid form. + +## Sorting Semantic Versions + +A set of versions can be sorted using the `sort` package from the standard library. +For example, + +```go +raw := []string{"1.2.3", "1.0", "1.3", "2", "0.4.2",} +vs := make([]*semver.Version, len(raw)) +for i, r := range raw { + v, err := semver.NewVersion(r) + if err != nil { + t.Errorf("Error parsing version: %s", err) + } + + vs[i] = v +} + +sort.Sort(semver.Collection(vs)) +``` + +## Checking Version Constraints + +There are two methods for comparing versions. One uses comparison methods on +`Version` instances and the other uses `Constraints`. There are some important +differences to notes between these two methods of comparison. + +1. When two versions are compared using functions such as `Compare`, `LessThan`, + and others it will follow the specification and always include prereleases + within the comparison. It will provide an answer that is valid with the + comparison section of the spec at https://semver.org/#spec-item-11 +2. When constraint checking is used for checks or validation it will follow a + different set of rules that are common for ranges with tools like npm/js + and Rust/Cargo. This includes considering prereleases to be invalid if the + ranges does not include one. If you want to have it include pre-releases a + simple solution is to include `-0` in your range. +3. Constraint ranges can have some complex rules including the shorthand use of + ~ and ^. For more details on those see the options below. + +There are differences between the two methods or checking versions because the +comparison methods on `Version` follow the specification while comparison ranges +are not part of the specification. Different packages and tools have taken it +upon themselves to come up with range rules. This has resulted in differences. +For example, npm/js and Cargo/Rust follow similar patterns while PHP has a +different pattern for ^. The comparison features in this package follow the +npm/js and Cargo/Rust lead because applications using it have followed similar +patters with their versions. + +Checking a version against version constraints is one of the most featureful +parts of the package. + +```go +c, err := semver.NewConstraint(">= 1.2.3") +if err != nil { + // Handle constraint not being parsable. +} + +v, err := semver.NewVersion("1.3") +if err != nil { + // Handle version not being parsable. +} +// Check if the version meets the constraints. The a variable will be true. +a := c.Check(v) +``` + +### Basic Comparisons + +There are two elements to the comparisons. First, a comparison string is a list +of space or comma separated AND comparisons. These are then separated by || (OR) +comparisons. For example, `">= 1.2 < 3.0.0 || >= 4.2.3"` is looking for a +comparison that's greater than or equal to 1.2 and less than 3.0.0 or is +greater than or equal to 4.2.3. + +The basic comparisons are: + +* `=`: equal (aliased to no operator) +* `!=`: not equal +* `>`: greater than +* `<`: less than +* `>=`: greater than or equal to +* `<=`: less than or equal to + +### Working With Prerelease Versions + +Pre-releases, for those not familiar with them, are used for software releases +prior to stable or generally available releases. Examples of prereleases include +development, alpha, beta, and release candidate releases. A prerelease may be +a version such as `1.2.3-beta.1` while the stable release would be `1.2.3`. In the +order of precedence, prereleases come before their associated releases. In this +example `1.2.3-beta.1 < 1.2.3`. + +According to the Semantic Version specification prereleases may not be +API compliant with their release counterpart. It says, + +> A pre-release version indicates that the version is unstable and might not satisfy the intended compatibility requirements as denoted by its associated normal version. + +SemVer comparisons using constraints without a prerelease comparator will skip +prerelease versions. For example, `>=1.2.3` will skip prereleases when looking +at a list of releases while `>=1.2.3-0` will evaluate and find prereleases. + +The reason for the `0` as a pre-release version in the example comparison is +because pre-releases can only contain ASCII alphanumerics and hyphens (along with +`.` separators), per the spec. Sorting happens in ASCII sort order, again per the +spec. The lowest character is a `0` in ASCII sort order +(see an [ASCII Table](http://www.asciitable.com/)) + +Understanding ASCII sort ordering is important because A-Z comes before a-z. That +means `>=1.2.3-BETA` will return `1.2.3-alpha`. What you might expect from case +sensitivity doesn't apply here. This is due to ASCII sort ordering which is what +the spec specifies. + +### Hyphen Range Comparisons + +There are multiple methods to handle ranges and the first is hyphens ranges. +These look like: + +* `1.2 - 1.4.5` which is equivalent to `>= 1.2 <= 1.4.5` +* `2.3.4 - 4.5` which is equivalent to `>= 2.3.4 <= 4.5` + +### Wildcards In Comparisons + +The `x`, `X`, and `*` characters can be used as a wildcard character. This works +for all comparison operators. When used on the `=` operator it falls +back to the patch level comparison (see tilde below). For example, + +* `1.2.x` is equivalent to `>= 1.2.0, < 1.3.0` +* `>= 1.2.x` is equivalent to `>= 1.2.0` +* `<= 2.x` is equivalent to `< 3` +* `*` is equivalent to `>= 0.0.0` + +### Tilde Range Comparisons (Patch) + +The tilde (`~`) comparison operator is for patch level ranges when a minor +version is specified and major level changes when the minor number is missing. +For example, + +* `~1.2.3` is equivalent to `>= 1.2.3, < 1.3.0` +* `~1` is equivalent to `>= 1, < 2` +* `~2.3` is equivalent to `>= 2.3, < 2.4` +* `~1.2.x` is equivalent to `>= 1.2.0, < 1.3.0` +* `~1.x` is equivalent to `>= 1, < 2` + +### Caret Range Comparisons (Major) + +The caret (`^`) comparison operator is for major level changes once a stable +(1.0.0) release has occurred. Prior to a 1.0.0 release the minor versions acts +as the API stability level. This is useful when comparisons of API versions as a +major change is API breaking. For example, + +* `^1.2.3` is equivalent to `>= 1.2.3, < 2.0.0` +* `^1.2.x` is equivalent to `>= 1.2.0, < 2.0.0` +* `^2.3` is equivalent to `>= 2.3, < 3` +* `^2.x` is equivalent to `>= 2.0.0, < 3` +* `^0.2.3` is equivalent to `>=0.2.3 <0.3.0` +* `^0.2` is equivalent to `>=0.2.0 <0.3.0` +* `^0.0.3` is equivalent to `>=0.0.3 <0.0.4` +* `^0.0` is equivalent to `>=0.0.0 <0.1.0` +* `^0` is equivalent to `>=0.0.0 <1.0.0` + +## Validation + +In addition to testing a version against a constraint, a version can be validated +against a constraint. When validation fails a slice of errors containing why a +version didn't meet the constraint is returned. For example, + +```go +c, err := semver.NewConstraint("<= 1.2.3, >= 1.4") +if err != nil { + // Handle constraint not being parseable. +} + +v, err := semver.NewVersion("1.3") +if err != nil { + // Handle version not being parseable. +} + +// Validate a version against a constraint. +a, msgs := c.Validate(v) +// a is false +for _, m := range msgs { + fmt.Println(m) + + // Loops over the errors which would read + // "1.3 is greater than 1.2.3" + // "1.3 is less than 1.4" +} +``` + +## Contribute + +If you find an issue or want to contribute please file an [issue](https://github.com/Masterminds/semver/issues) +or [create a pull request](https://github.com/Masterminds/semver/pulls). + +## Security + +Security is an important consideration for this project. The project currently +uses the following tools to help discover security issues: + +* [CodeQL](https://github.com/Masterminds/semver) +* [gosec](https://github.com/securego/gosec) +* Daily Fuzz testing + +If you believe you have found a security vulnerability you can privately disclose +it through the [GitHub security page](https://github.com/Masterminds/semver/security). diff --git a/vendor/github.com/Masterminds/semver/v3/SECURITY.md b/vendor/github.com/Masterminds/semver/v3/SECURITY.md new file mode 100644 index 000000000..a30a66b1f --- /dev/null +++ b/vendor/github.com/Masterminds/semver/v3/SECURITY.md @@ -0,0 +1,19 @@ +# Security Policy + +## Supported Versions + +The following versions of semver are currently supported: + +| Version | Supported | +| ------- | ------------------ | +| 3.x | :white_check_mark: | +| 2.x | :x: | +| 1.x | :x: | + +Fixes are only released for the latest minor version in the form of a patch release. + +## Reporting a Vulnerability + +You can privately disclose a vulnerability through GitHubs +[private vulnerability reporting](https://github.com/Masterminds/semver/security/advisories) +mechanism. diff --git a/vendor/github.com/Masterminds/semver/v3/collection.go b/vendor/github.com/Masterminds/semver/v3/collection.go new file mode 100644 index 000000000..a78235895 --- /dev/null +++ b/vendor/github.com/Masterminds/semver/v3/collection.go @@ -0,0 +1,24 @@ +package semver + +// Collection is a collection of Version instances and implements the sort +// interface. See the sort package for more details. +// https://golang.org/pkg/sort/ +type Collection []*Version + +// Len returns the length of a collection. The number of Version instances +// on the slice. +func (c Collection) Len() int { + return len(c) +} + +// Less is needed for the sort interface to compare two Version objects on the +// slice. If checks if one is less than the other. +func (c Collection) Less(i, j int) bool { + return c[i].LessThan(c[j]) +} + +// Swap is needed for the sort interface to replace the Version objects +// at two different positions in the slice. +func (c Collection) Swap(i, j int) { + c[i], c[j] = c[j], c[i] +} diff --git a/vendor/github.com/Masterminds/semver/v3/constraints.go b/vendor/github.com/Masterminds/semver/v3/constraints.go new file mode 100644 index 000000000..8461c7ed9 --- /dev/null +++ b/vendor/github.com/Masterminds/semver/v3/constraints.go @@ -0,0 +1,594 @@ +package semver + +import ( + "bytes" + "errors" + "fmt" + "regexp" + "strings" +) + +// Constraints is one or more constraint that a semantic version can be +// checked against. +type Constraints struct { + constraints [][]*constraint +} + +// NewConstraint returns a Constraints instance that a Version instance can +// be checked against. If there is a parse error it will be returned. +func NewConstraint(c string) (*Constraints, error) { + + // Rewrite - ranges into a comparison operation. + c = rewriteRange(c) + + ors := strings.Split(c, "||") + or := make([][]*constraint, len(ors)) + for k, v := range ors { + + // TODO: Find a way to validate and fetch all the constraints in a simpler form + + // Validate the segment + if !validConstraintRegex.MatchString(v) { + return nil, fmt.Errorf("improper constraint: %s", v) + } + + cs := findConstraintRegex.FindAllString(v, -1) + if cs == nil { + cs = append(cs, v) + } + result := make([]*constraint, len(cs)) + for i, s := range cs { + pc, err := parseConstraint(s) + if err != nil { + return nil, err + } + + result[i] = pc + } + or[k] = result + } + + o := &Constraints{constraints: or} + return o, nil +} + +// Check tests if a version satisfies the constraints. +func (cs Constraints) Check(v *Version) bool { + // TODO(mattfarina): For v4 of this library consolidate the Check and Validate + // functions as the underlying functions make that possible now. + // loop over the ORs and check the inner ANDs + for _, o := range cs.constraints { + joy := true + for _, c := range o { + if check, _ := c.check(v); !check { + joy = false + break + } + } + + if joy { + return true + } + } + + return false +} + +// Validate checks if a version satisfies a constraint. If not a slice of +// reasons for the failure are returned in addition to a bool. +func (cs Constraints) Validate(v *Version) (bool, []error) { + // loop over the ORs and check the inner ANDs + var e []error + + // Capture the prerelease message only once. When it happens the first time + // this var is marked + var prerelesase bool + for _, o := range cs.constraints { + joy := true + for _, c := range o { + // Before running the check handle the case there the version is + // a prerelease and the check is not searching for prereleases. + if c.con.pre == "" && v.pre != "" { + if !prerelesase { + em := fmt.Errorf("%s is a prerelease version and the constraint is only looking for release versions", v) + e = append(e, em) + prerelesase = true + } + joy = false + + } else { + + if _, err := c.check(v); err != nil { + e = append(e, err) + joy = false + } + } + } + + if joy { + return true, []error{} + } + } + + return false, e +} + +func (cs Constraints) String() string { + buf := make([]string, len(cs.constraints)) + var tmp bytes.Buffer + + for k, v := range cs.constraints { + tmp.Reset() + vlen := len(v) + for kk, c := range v { + tmp.WriteString(c.string()) + + // Space separate the AND conditions + if vlen > 1 && kk < vlen-1 { + tmp.WriteString(" ") + } + } + buf[k] = tmp.String() + } + + return strings.Join(buf, " || ") +} + +// UnmarshalText implements the encoding.TextUnmarshaler interface. +func (cs *Constraints) UnmarshalText(text []byte) error { + temp, err := NewConstraint(string(text)) + if err != nil { + return err + } + + *cs = *temp + + return nil +} + +// MarshalText implements the encoding.TextMarshaler interface. +func (cs Constraints) MarshalText() ([]byte, error) { + return []byte(cs.String()), nil +} + +var constraintOps map[string]cfunc +var constraintRegex *regexp.Regexp +var constraintRangeRegex *regexp.Regexp + +// Used to find individual constraints within a multi-constraint string +var findConstraintRegex *regexp.Regexp + +// Used to validate an segment of ANDs is valid +var validConstraintRegex *regexp.Regexp + +const cvRegex string = `v?([0-9|x|X|\*]+)(\.[0-9|x|X|\*]+)?(\.[0-9|x|X|\*]+)?` + + `(-([0-9A-Za-z\-]+(\.[0-9A-Za-z\-]+)*))?` + + `(\+([0-9A-Za-z\-]+(\.[0-9A-Za-z\-]+)*))?` + +func init() { + constraintOps = map[string]cfunc{ + "": constraintTildeOrEqual, + "=": constraintTildeOrEqual, + "!=": constraintNotEqual, + ">": constraintGreaterThan, + "<": constraintLessThan, + ">=": constraintGreaterThanEqual, + "=>": constraintGreaterThanEqual, + "<=": constraintLessThanEqual, + "=<": constraintLessThanEqual, + "~": constraintTilde, + "~>": constraintTilde, + "^": constraintCaret, + } + + ops := `=||!=|>|<|>=|=>|<=|=<|~|~>|\^` + + constraintRegex = regexp.MustCompile(fmt.Sprintf( + `^\s*(%s)\s*(%s)\s*$`, + ops, + cvRegex)) + + constraintRangeRegex = regexp.MustCompile(fmt.Sprintf( + `\s*(%s)\s+-\s+(%s)\s*`, + cvRegex, cvRegex)) + + findConstraintRegex = regexp.MustCompile(fmt.Sprintf( + `(%s)\s*(%s)`, + ops, + cvRegex)) + + // The first time a constraint shows up will look slightly different from + // future times it shows up due to a leading space or comma in a given + // string. + validConstraintRegex = regexp.MustCompile(fmt.Sprintf( + `^(\s*(%s)\s*(%s)\s*)((?:\s+|,\s*)(%s)\s*(%s)\s*)*$`, + ops, + cvRegex, + ops, + cvRegex)) +} + +// An individual constraint +type constraint struct { + // The version used in the constraint check. For example, if a constraint + // is '<= 2.0.0' the con a version instance representing 2.0.0. + con *Version + + // The original parsed version (e.g., 4.x from != 4.x) + orig string + + // The original operator for the constraint + origfunc string + + // When an x is used as part of the version (e.g., 1.x) + minorDirty bool + dirty bool + patchDirty bool +} + +// Check if a version meets the constraint +func (c *constraint) check(v *Version) (bool, error) { + return constraintOps[c.origfunc](v, c) +} + +// String prints an individual constraint into a string +func (c *constraint) string() string { + return c.origfunc + c.orig +} + +type cfunc func(v *Version, c *constraint) (bool, error) + +func parseConstraint(c string) (*constraint, error) { + if len(c) > 0 { + m := constraintRegex.FindStringSubmatch(c) + if m == nil { + return nil, fmt.Errorf("improper constraint: %s", c) + } + + cs := &constraint{ + orig: m[2], + origfunc: m[1], + } + + ver := m[2] + minorDirty := false + patchDirty := false + dirty := false + if isX(m[3]) || m[3] == "" { + ver = fmt.Sprintf("0.0.0%s", m[6]) + dirty = true + } else if isX(strings.TrimPrefix(m[4], ".")) || m[4] == "" { + minorDirty = true + dirty = true + ver = fmt.Sprintf("%s.0.0%s", m[3], m[6]) + } else if isX(strings.TrimPrefix(m[5], ".")) || m[5] == "" { + dirty = true + patchDirty = true + ver = fmt.Sprintf("%s%s.0%s", m[3], m[4], m[6]) + } + + con, err := NewVersion(ver) + if err != nil { + + // The constraintRegex should catch any regex parsing errors. So, + // we should never get here. + return nil, errors.New("constraint Parser Error") + } + + cs.con = con + cs.minorDirty = minorDirty + cs.patchDirty = patchDirty + cs.dirty = dirty + + return cs, nil + } + + // The rest is the special case where an empty string was passed in which + // is equivalent to * or >=0.0.0 + con, err := StrictNewVersion("0.0.0") + if err != nil { + + // The constraintRegex should catch any regex parsing errors. So, + // we should never get here. + return nil, errors.New("constraint Parser Error") + } + + cs := &constraint{ + con: con, + orig: c, + origfunc: "", + minorDirty: false, + patchDirty: false, + dirty: true, + } + return cs, nil +} + +// Constraint functions +func constraintNotEqual(v *Version, c *constraint) (bool, error) { + if c.dirty { + + // If there is a pre-release on the version but the constraint isn't looking + // for them assume that pre-releases are not compatible. See issue 21 for + // more details. + if v.Prerelease() != "" && c.con.Prerelease() == "" { + return false, fmt.Errorf("%s is a prerelease version and the constraint is only looking for release versions", v) + } + + if c.con.Major() != v.Major() { + return true, nil + } + if c.con.Minor() != v.Minor() && !c.minorDirty { + return true, nil + } else if c.minorDirty { + return false, fmt.Errorf("%s is equal to %s", v, c.orig) + } else if c.con.Patch() != v.Patch() && !c.patchDirty { + return true, nil + } else if c.patchDirty { + // Need to handle prereleases if present + if v.Prerelease() != "" || c.con.Prerelease() != "" { + eq := comparePrerelease(v.Prerelease(), c.con.Prerelease()) != 0 + if eq { + return true, nil + } + return false, fmt.Errorf("%s is equal to %s", v, c.orig) + } + return false, fmt.Errorf("%s is equal to %s", v, c.orig) + } + } + + eq := v.Equal(c.con) + if eq { + return false, fmt.Errorf("%s is equal to %s", v, c.orig) + } + + return true, nil +} + +func constraintGreaterThan(v *Version, c *constraint) (bool, error) { + + // If there is a pre-release on the version but the constraint isn't looking + // for them assume that pre-releases are not compatible. See issue 21 for + // more details. + if v.Prerelease() != "" && c.con.Prerelease() == "" { + return false, fmt.Errorf("%s is a prerelease version and the constraint is only looking for release versions", v) + } + + var eq bool + + if !c.dirty { + eq = v.Compare(c.con) == 1 + if eq { + return true, nil + } + return false, fmt.Errorf("%s is less than or equal to %s", v, c.orig) + } + + if v.Major() > c.con.Major() { + return true, nil + } else if v.Major() < c.con.Major() { + return false, fmt.Errorf("%s is less than or equal to %s", v, c.orig) + } else if c.minorDirty { + // This is a range case such as >11. When the version is something like + // 11.1.0 is it not > 11. For that we would need 12 or higher + return false, fmt.Errorf("%s is less than or equal to %s", v, c.orig) + } else if c.patchDirty { + // This is for ranges such as >11.1. A version of 11.1.1 is not greater + // which one of 11.2.1 is greater + eq = v.Minor() > c.con.Minor() + if eq { + return true, nil + } + return false, fmt.Errorf("%s is less than or equal to %s", v, c.orig) + } + + // If we have gotten here we are not comparing pre-preleases and can use the + // Compare function to accomplish that. + eq = v.Compare(c.con) == 1 + if eq { + return true, nil + } + return false, fmt.Errorf("%s is less than or equal to %s", v, c.orig) +} + +func constraintLessThan(v *Version, c *constraint) (bool, error) { + // If there is a pre-release on the version but the constraint isn't looking + // for them assume that pre-releases are not compatible. See issue 21 for + // more details. + if v.Prerelease() != "" && c.con.Prerelease() == "" { + return false, fmt.Errorf("%s is a prerelease version and the constraint is only looking for release versions", v) + } + + eq := v.Compare(c.con) < 0 + if eq { + return true, nil + } + return false, fmt.Errorf("%s is greater than or equal to %s", v, c.orig) +} + +func constraintGreaterThanEqual(v *Version, c *constraint) (bool, error) { + + // If there is a pre-release on the version but the constraint isn't looking + // for them assume that pre-releases are not compatible. See issue 21 for + // more details. + if v.Prerelease() != "" && c.con.Prerelease() == "" { + return false, fmt.Errorf("%s is a prerelease version and the constraint is only looking for release versions", v) + } + + eq := v.Compare(c.con) >= 0 + if eq { + return true, nil + } + return false, fmt.Errorf("%s is less than %s", v, c.orig) +} + +func constraintLessThanEqual(v *Version, c *constraint) (bool, error) { + // If there is a pre-release on the version but the constraint isn't looking + // for them assume that pre-releases are not compatible. See issue 21 for + // more details. + if v.Prerelease() != "" && c.con.Prerelease() == "" { + return false, fmt.Errorf("%s is a prerelease version and the constraint is only looking for release versions", v) + } + + var eq bool + + if !c.dirty { + eq = v.Compare(c.con) <= 0 + if eq { + return true, nil + } + return false, fmt.Errorf("%s is greater than %s", v, c.orig) + } + + if v.Major() > c.con.Major() { + return false, fmt.Errorf("%s is greater than %s", v, c.orig) + } else if v.Major() == c.con.Major() && v.Minor() > c.con.Minor() && !c.minorDirty { + return false, fmt.Errorf("%s is greater than %s", v, c.orig) + } + + return true, nil +} + +// ~*, ~>* --> >= 0.0.0 (any) +// ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0, <3.0.0 +// ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0, <2.1.0 +// ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0, <1.3.0 +// ~1.2.3, ~>1.2.3 --> >=1.2.3, <1.3.0 +// ~1.2.0, ~>1.2.0 --> >=1.2.0, <1.3.0 +func constraintTilde(v *Version, c *constraint) (bool, error) { + // If there is a pre-release on the version but the constraint isn't looking + // for them assume that pre-releases are not compatible. See issue 21 for + // more details. + if v.Prerelease() != "" && c.con.Prerelease() == "" { + return false, fmt.Errorf("%s is a prerelease version and the constraint is only looking for release versions", v) + } + + if v.LessThan(c.con) { + return false, fmt.Errorf("%s is less than %s", v, c.orig) + } + + // ~0.0.0 is a special case where all constraints are accepted. It's + // equivalent to >= 0.0.0. + if c.con.Major() == 0 && c.con.Minor() == 0 && c.con.Patch() == 0 && + !c.minorDirty && !c.patchDirty { + return true, nil + } + + if v.Major() != c.con.Major() { + return false, fmt.Errorf("%s does not have same major version as %s", v, c.orig) + } + + if v.Minor() != c.con.Minor() && !c.minorDirty { + return false, fmt.Errorf("%s does not have same major and minor version as %s", v, c.orig) + } + + return true, nil +} + +// When there is a .x (dirty) status it automatically opts in to ~. Otherwise +// it's a straight = +func constraintTildeOrEqual(v *Version, c *constraint) (bool, error) { + // If there is a pre-release on the version but the constraint isn't looking + // for them assume that pre-releases are not compatible. See issue 21 for + // more details. + if v.Prerelease() != "" && c.con.Prerelease() == "" { + return false, fmt.Errorf("%s is a prerelease version and the constraint is only looking for release versions", v) + } + + if c.dirty { + return constraintTilde(v, c) + } + + eq := v.Equal(c.con) + if eq { + return true, nil + } + + return false, fmt.Errorf("%s is not equal to %s", v, c.orig) +} + +// ^* --> (any) +// ^1.2.3 --> >=1.2.3 <2.0.0 +// ^1.2 --> >=1.2.0 <2.0.0 +// ^1 --> >=1.0.0 <2.0.0 +// ^0.2.3 --> >=0.2.3 <0.3.0 +// ^0.2 --> >=0.2.0 <0.3.0 +// ^0.0.3 --> >=0.0.3 <0.0.4 +// ^0.0 --> >=0.0.0 <0.1.0 +// ^0 --> >=0.0.0 <1.0.0 +func constraintCaret(v *Version, c *constraint) (bool, error) { + // If there is a pre-release on the version but the constraint isn't looking + // for them assume that pre-releases are not compatible. See issue 21 for + // more details. + if v.Prerelease() != "" && c.con.Prerelease() == "" { + return false, fmt.Errorf("%s is a prerelease version and the constraint is only looking for release versions", v) + } + + // This less than handles prereleases + if v.LessThan(c.con) { + return false, fmt.Errorf("%s is less than %s", v, c.orig) + } + + var eq bool + + // ^ when the major > 0 is >=x.y.z < x+1 + if c.con.Major() > 0 || c.minorDirty { + + // ^ has to be within a major range for > 0. Everything less than was + // filtered out with the LessThan call above. This filters out those + // that greater but not within the same major range. + eq = v.Major() == c.con.Major() + if eq { + return true, nil + } + return false, fmt.Errorf("%s does not have same major version as %s", v, c.orig) + } + + // ^ when the major is 0 and minor > 0 is >=0.y.z < 0.y+1 + if c.con.Major() == 0 && v.Major() > 0 { + return false, fmt.Errorf("%s does not have same major version as %s", v, c.orig) + } + // If the con Minor is > 0 it is not dirty + if c.con.Minor() > 0 || c.patchDirty { + eq = v.Minor() == c.con.Minor() + if eq { + return true, nil + } + return false, fmt.Errorf("%s does not have same minor version as %s. Expected minor versions to match when constraint major version is 0", v, c.orig) + } + // ^ when the minor is 0 and minor > 0 is =0.0.z + if c.con.Minor() == 0 && v.Minor() > 0 { + return false, fmt.Errorf("%s does not have same minor version as %s", v, c.orig) + } + + // At this point the major is 0 and the minor is 0 and not dirty. The patch + // is not dirty so we need to check if they are equal. If they are not equal + eq = c.con.Patch() == v.Patch() + if eq { + return true, nil + } + return false, fmt.Errorf("%s does not equal %s. Expect version and constraint to equal when major and minor versions are 0", v, c.orig) +} + +func isX(x string) bool { + switch x { + case "x", "*", "X": + return true + default: + return false + } +} + +func rewriteRange(i string) string { + m := constraintRangeRegex.FindAllStringSubmatch(i, -1) + if m == nil { + return i + } + o := i + for _, v := range m { + t := fmt.Sprintf(">= %s, <= %s ", v[1], v[11]) + o = strings.Replace(o, v[0], t, 1) + } + + return o +} diff --git a/vendor/github.com/Masterminds/semver/v3/doc.go b/vendor/github.com/Masterminds/semver/v3/doc.go new file mode 100644 index 000000000..74f97caa5 --- /dev/null +++ b/vendor/github.com/Masterminds/semver/v3/doc.go @@ -0,0 +1,184 @@ +/* +Package semver provides the ability to work with Semantic Versions (http://semver.org) in Go. + +Specifically it provides the ability to: + + - Parse semantic versions + - Sort semantic versions + - Check if a semantic version fits within a set of constraints + - Optionally work with a `v` prefix + +# Parsing Semantic Versions + +There are two functions that can parse semantic versions. The `StrictNewVersion` +function only parses valid version 2 semantic versions as outlined in the +specification. The `NewVersion` function attempts to coerce a version into a +semantic version and parse it. For example, if there is a leading v or a version +listed without all 3 parts (e.g. 1.2) it will attempt to coerce it into a valid +semantic version (e.g., 1.2.0). In both cases a `Version` object is returned +that can be sorted, compared, and used in constraints. + +When parsing a version an optional error can be returned if there is an issue +parsing the version. For example, + + v, err := semver.NewVersion("1.2.3-beta.1+b345") + +The version object has methods to get the parts of the version, compare it to +other versions, convert the version back into a string, and get the original +string. For more details please see the documentation +at https://godoc.org/github.com/Masterminds/semver. + +# Sorting Semantic Versions + +A set of versions can be sorted using the `sort` package from the standard library. +For example, + + raw := []string{"1.2.3", "1.0", "1.3", "2", "0.4.2",} + vs := make([]*semver.Version, len(raw)) + for i, r := range raw { + v, err := semver.NewVersion(r) + if err != nil { + t.Errorf("Error parsing version: %s", err) + } + + vs[i] = v + } + + sort.Sort(semver.Collection(vs)) + +# Checking Version Constraints and Comparing Versions + +There are two methods for comparing versions. One uses comparison methods on +`Version` instances and the other is using Constraints. There are some important +differences to notes between these two methods of comparison. + + 1. When two versions are compared using functions such as `Compare`, `LessThan`, + and others it will follow the specification and always include prereleases + within the comparison. It will provide an answer valid with the comparison + spec section at https://semver.org/#spec-item-11 + 2. When constraint checking is used for checks or validation it will follow a + different set of rules that are common for ranges with tools like npm/js + and Rust/Cargo. This includes considering prereleases to be invalid if the + ranges does not include on. If you want to have it include pre-releases a + simple solution is to include `-0` in your range. + 3. Constraint ranges can have some complex rules including the shorthard use of + ~ and ^. For more details on those see the options below. + +There are differences between the two methods or checking versions because the +comparison methods on `Version` follow the specification while comparison ranges +are not part of the specification. Different packages and tools have taken it +upon themselves to come up with range rules. This has resulted in differences. +For example, npm/js and Cargo/Rust follow similar patterns which PHP has a +different pattern for ^. The comparison features in this package follow the +npm/js and Cargo/Rust lead because applications using it have followed similar +patters with their versions. + +Checking a version against version constraints is one of the most featureful +parts of the package. + + c, err := semver.NewConstraint(">= 1.2.3") + if err != nil { + // Handle constraint not being parsable. + } + + v, err := semver.NewVersion("1.3") + if err != nil { + // Handle version not being parsable. + } + // Check if the version meets the constraints. The a variable will be true. + a := c.Check(v) + +# Basic Comparisons + +There are two elements to the comparisons. First, a comparison string is a list +of comma or space separated AND comparisons. These are then separated by || (OR) +comparisons. For example, `">= 1.2 < 3.0.0 || >= 4.2.3"` is looking for a +comparison that's greater than or equal to 1.2 and less than 3.0.0 or is +greater than or equal to 4.2.3. This can also be written as +`">= 1.2, < 3.0.0 || >= 4.2.3"` + +The basic comparisons are: + + - `=`: equal (aliased to no operator) + - `!=`: not equal + - `>`: greater than + - `<`: less than + - `>=`: greater than or equal to + - `<=`: less than or equal to + +# Hyphen Range Comparisons + +There are multiple methods to handle ranges and the first is hyphens ranges. +These look like: + + - `1.2 - 1.4.5` which is equivalent to `>= 1.2, <= 1.4.5` + - `2.3.4 - 4.5` which is equivalent to `>= 2.3.4 <= 4.5` + +# Wildcards In Comparisons + +The `x`, `X`, and `*` characters can be used as a wildcard character. This works +for all comparison operators. When used on the `=` operator it falls +back to the tilde operation. For example, + + - `1.2.x` is equivalent to `>= 1.2.0 < 1.3.0` + - `>= 1.2.x` is equivalent to `>= 1.2.0` + - `<= 2.x` is equivalent to `<= 3` + - `*` is equivalent to `>= 0.0.0` + +Tilde Range Comparisons (Patch) + +The tilde (`~`) comparison operator is for patch level ranges when a minor +version is specified and major level changes when the minor number is missing. +For example, + + - `~1.2.3` is equivalent to `>= 1.2.3 < 1.3.0` + - `~1` is equivalent to `>= 1, < 2` + - `~2.3` is equivalent to `>= 2.3 < 2.4` + - `~1.2.x` is equivalent to `>= 1.2.0 < 1.3.0` + - `~1.x` is equivalent to `>= 1 < 2` + +Caret Range Comparisons (Major) + +The caret (`^`) comparison operator is for major level changes once a stable +(1.0.0) release has occurred. Prior to a 1.0.0 release the minor versions acts +as the API stability level. This is useful when comparisons of API versions as a +major change is API breaking. For example, + + - `^1.2.3` is equivalent to `>= 1.2.3, < 2.0.0` + - `^1.2.x` is equivalent to `>= 1.2.0, < 2.0.0` + - `^2.3` is equivalent to `>= 2.3, < 3` + - `^2.x` is equivalent to `>= 2.0.0, < 3` + - `^0.2.3` is equivalent to `>=0.2.3 <0.3.0` + - `^0.2` is equivalent to `>=0.2.0 <0.3.0` + - `^0.0.3` is equivalent to `>=0.0.3 <0.0.4` + - `^0.0` is equivalent to `>=0.0.0 <0.1.0` + - `^0` is equivalent to `>=0.0.0 <1.0.0` + +# Validation + +In addition to testing a version against a constraint, a version can be validated +against a constraint. When validation fails a slice of errors containing why a +version didn't meet the constraint is returned. For example, + + c, err := semver.NewConstraint("<= 1.2.3, >= 1.4") + if err != nil { + // Handle constraint not being parseable. + } + + v, _ := semver.NewVersion("1.3") + if err != nil { + // Handle version not being parseable. + } + + // Validate a version against a constraint. + a, msgs := c.Validate(v) + // a is false + for _, m := range msgs { + fmt.Println(m) + + // Loops over the errors which would read + // "1.3 is greater than 1.2.3" + // "1.3 is less than 1.4" + } +*/ +package semver diff --git a/vendor/github.com/Masterminds/semver/v3/version.go b/vendor/github.com/Masterminds/semver/v3/version.go new file mode 100644 index 000000000..7c4bed334 --- /dev/null +++ b/vendor/github.com/Masterminds/semver/v3/version.go @@ -0,0 +1,639 @@ +package semver + +import ( + "bytes" + "database/sql/driver" + "encoding/json" + "errors" + "fmt" + "regexp" + "strconv" + "strings" +) + +// The compiled version of the regex created at init() is cached here so it +// only needs to be created once. +var versionRegex *regexp.Regexp + +var ( + // ErrInvalidSemVer is returned a version is found to be invalid when + // being parsed. + ErrInvalidSemVer = errors.New("Invalid Semantic Version") + + // ErrEmptyString is returned when an empty string is passed in for parsing. + ErrEmptyString = errors.New("Version string empty") + + // ErrInvalidCharacters is returned when invalid characters are found as + // part of a version + ErrInvalidCharacters = errors.New("Invalid characters in version") + + // ErrSegmentStartsZero is returned when a version segment starts with 0. + // This is invalid in SemVer. + ErrSegmentStartsZero = errors.New("Version segment starts with 0") + + // ErrInvalidMetadata is returned when the metadata is an invalid format + ErrInvalidMetadata = errors.New("Invalid Metadata string") + + // ErrInvalidPrerelease is returned when the pre-release is an invalid format + ErrInvalidPrerelease = errors.New("Invalid Prerelease string") +) + +// semVerRegex is the regular expression used to parse a semantic version. +const semVerRegex string = `v?([0-9]+)(\.[0-9]+)?(\.[0-9]+)?` + + `(-([0-9A-Za-z\-]+(\.[0-9A-Za-z\-]+)*))?` + + `(\+([0-9A-Za-z\-]+(\.[0-9A-Za-z\-]+)*))?` + +// Version represents a single semantic version. +type Version struct { + major, minor, patch uint64 + pre string + metadata string + original string +} + +func init() { + versionRegex = regexp.MustCompile("^" + semVerRegex + "$") +} + +const ( + num string = "0123456789" + allowed string = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-" + num +) + +// StrictNewVersion parses a given version and returns an instance of Version or +// an error if unable to parse the version. Only parses valid semantic versions. +// Performs checking that can find errors within the version. +// If you want to coerce a version such as 1 or 1.2 and parse it as the 1.x +// releases of semver did, use the NewVersion() function. +func StrictNewVersion(v string) (*Version, error) { + // Parsing here does not use RegEx in order to increase performance and reduce + // allocations. + + if len(v) == 0 { + return nil, ErrEmptyString + } + + // Split the parts into [0]major, [1]minor, and [2]patch,prerelease,build + parts := strings.SplitN(v, ".", 3) + if len(parts) != 3 { + return nil, ErrInvalidSemVer + } + + sv := &Version{ + original: v, + } + + // check for prerelease or build metadata + var extra []string + if strings.ContainsAny(parts[2], "-+") { + // Start with the build metadata first as it needs to be on the right + extra = strings.SplitN(parts[2], "+", 2) + if len(extra) > 1 { + // build metadata found + sv.metadata = extra[1] + parts[2] = extra[0] + } + + extra = strings.SplitN(parts[2], "-", 2) + if len(extra) > 1 { + // prerelease found + sv.pre = extra[1] + parts[2] = extra[0] + } + } + + // Validate the number segments are valid. This includes only having positive + // numbers and no leading 0's. + for _, p := range parts { + if !containsOnly(p, num) { + return nil, ErrInvalidCharacters + } + + if len(p) > 1 && p[0] == '0' { + return nil, ErrSegmentStartsZero + } + } + + // Extract the major, minor, and patch elements onto the returned Version + var err error + sv.major, err = strconv.ParseUint(parts[0], 10, 64) + if err != nil { + return nil, err + } + + sv.minor, err = strconv.ParseUint(parts[1], 10, 64) + if err != nil { + return nil, err + } + + sv.patch, err = strconv.ParseUint(parts[2], 10, 64) + if err != nil { + return nil, err + } + + // No prerelease or build metadata found so returning now as a fastpath. + if sv.pre == "" && sv.metadata == "" { + return sv, nil + } + + if sv.pre != "" { + if err = validatePrerelease(sv.pre); err != nil { + return nil, err + } + } + + if sv.metadata != "" { + if err = validateMetadata(sv.metadata); err != nil { + return nil, err + } + } + + return sv, nil +} + +// NewVersion parses a given version and returns an instance of Version or +// an error if unable to parse the version. If the version is SemVer-ish it +// attempts to convert it to SemVer. If you want to validate it was a strict +// semantic version at parse time see StrictNewVersion(). +func NewVersion(v string) (*Version, error) { + m := versionRegex.FindStringSubmatch(v) + if m == nil { + return nil, ErrInvalidSemVer + } + + sv := &Version{ + metadata: m[8], + pre: m[5], + original: v, + } + + var err error + sv.major, err = strconv.ParseUint(m[1], 10, 64) + if err != nil { + return nil, fmt.Errorf("Error parsing version segment: %s", err) + } + + if m[2] != "" { + sv.minor, err = strconv.ParseUint(strings.TrimPrefix(m[2], "."), 10, 64) + if err != nil { + return nil, fmt.Errorf("Error parsing version segment: %s", err) + } + } else { + sv.minor = 0 + } + + if m[3] != "" { + sv.patch, err = strconv.ParseUint(strings.TrimPrefix(m[3], "."), 10, 64) + if err != nil { + return nil, fmt.Errorf("Error parsing version segment: %s", err) + } + } else { + sv.patch = 0 + } + + // Perform some basic due diligence on the extra parts to ensure they are + // valid. + + if sv.pre != "" { + if err = validatePrerelease(sv.pre); err != nil { + return nil, err + } + } + + if sv.metadata != "" { + if err = validateMetadata(sv.metadata); err != nil { + return nil, err + } + } + + return sv, nil +} + +// New creates a new instance of Version with each of the parts passed in as +// arguments instead of parsing a version string. +func New(major, minor, patch uint64, pre, metadata string) *Version { + v := Version{ + major: major, + minor: minor, + patch: patch, + pre: pre, + metadata: metadata, + original: "", + } + + v.original = v.String() + + return &v +} + +// MustParse parses a given version and panics on error. +func MustParse(v string) *Version { + sv, err := NewVersion(v) + if err != nil { + panic(err) + } + return sv +} + +// String converts a Version object to a string. +// Note, if the original version contained a leading v this version will not. +// See the Original() method to retrieve the original value. Semantic Versions +// don't contain a leading v per the spec. Instead it's optional on +// implementation. +func (v Version) String() string { + var buf bytes.Buffer + + fmt.Fprintf(&buf, "%d.%d.%d", v.major, v.minor, v.patch) + if v.pre != "" { + fmt.Fprintf(&buf, "-%s", v.pre) + } + if v.metadata != "" { + fmt.Fprintf(&buf, "+%s", v.metadata) + } + + return buf.String() +} + +// Original returns the original value passed in to be parsed. +func (v *Version) Original() string { + return v.original +} + +// Major returns the major version. +func (v Version) Major() uint64 { + return v.major +} + +// Minor returns the minor version. +func (v Version) Minor() uint64 { + return v.minor +} + +// Patch returns the patch version. +func (v Version) Patch() uint64 { + return v.patch +} + +// Prerelease returns the pre-release version. +func (v Version) Prerelease() string { + return v.pre +} + +// Metadata returns the metadata on the version. +func (v Version) Metadata() string { + return v.metadata +} + +// originalVPrefix returns the original 'v' prefix if any. +func (v Version) originalVPrefix() string { + // Note, only lowercase v is supported as a prefix by the parser. + if v.original != "" && v.original[:1] == "v" { + return v.original[:1] + } + return "" +} + +// IncPatch produces the next patch version. +// If the current version does not have prerelease/metadata information, +// it unsets metadata and prerelease values, increments patch number. +// If the current version has any of prerelease or metadata information, +// it unsets both values and keeps current patch value +func (v Version) IncPatch() Version { + vNext := v + // according to http://semver.org/#spec-item-9 + // Pre-release versions have a lower precedence than the associated normal version. + // according to http://semver.org/#spec-item-10 + // Build metadata SHOULD be ignored when determining version precedence. + if v.pre != "" { + vNext.metadata = "" + vNext.pre = "" + } else { + vNext.metadata = "" + vNext.pre = "" + vNext.patch = v.patch + 1 + } + vNext.original = v.originalVPrefix() + "" + vNext.String() + return vNext +} + +// IncMinor produces the next minor version. +// Sets patch to 0. +// Increments minor number. +// Unsets metadata. +// Unsets prerelease status. +func (v Version) IncMinor() Version { + vNext := v + vNext.metadata = "" + vNext.pre = "" + vNext.patch = 0 + vNext.minor = v.minor + 1 + vNext.original = v.originalVPrefix() + "" + vNext.String() + return vNext +} + +// IncMajor produces the next major version. +// Sets patch to 0. +// Sets minor to 0. +// Increments major number. +// Unsets metadata. +// Unsets prerelease status. +func (v Version) IncMajor() Version { + vNext := v + vNext.metadata = "" + vNext.pre = "" + vNext.patch = 0 + vNext.minor = 0 + vNext.major = v.major + 1 + vNext.original = v.originalVPrefix() + "" + vNext.String() + return vNext +} + +// SetPrerelease defines the prerelease value. +// Value must not include the required 'hyphen' prefix. +func (v Version) SetPrerelease(prerelease string) (Version, error) { + vNext := v + if len(prerelease) > 0 { + if err := validatePrerelease(prerelease); err != nil { + return vNext, err + } + } + vNext.pre = prerelease + vNext.original = v.originalVPrefix() + "" + vNext.String() + return vNext, nil +} + +// SetMetadata defines metadata value. +// Value must not include the required 'plus' prefix. +func (v Version) SetMetadata(metadata string) (Version, error) { + vNext := v + if len(metadata) > 0 { + if err := validateMetadata(metadata); err != nil { + return vNext, err + } + } + vNext.metadata = metadata + vNext.original = v.originalVPrefix() + "" + vNext.String() + return vNext, nil +} + +// LessThan tests if one version is less than another one. +func (v *Version) LessThan(o *Version) bool { + return v.Compare(o) < 0 +} + +// GreaterThan tests if one version is greater than another one. +func (v *Version) GreaterThan(o *Version) bool { + return v.Compare(o) > 0 +} + +// Equal tests if two versions are equal to each other. +// Note, versions can be equal with different metadata since metadata +// is not considered part of the comparable version. +func (v *Version) Equal(o *Version) bool { + return v.Compare(o) == 0 +} + +// Compare compares this version to another one. It returns -1, 0, or 1 if +// the version smaller, equal, or larger than the other version. +// +// Versions are compared by X.Y.Z. Build metadata is ignored. Prerelease is +// lower than the version without a prerelease. Compare always takes into account +// prereleases. If you want to work with ranges using typical range syntaxes that +// skip prereleases if the range is not looking for them use constraints. +func (v *Version) Compare(o *Version) int { + // Compare the major, minor, and patch version for differences. If a + // difference is found return the comparison. + if d := compareSegment(v.Major(), o.Major()); d != 0 { + return d + } + if d := compareSegment(v.Minor(), o.Minor()); d != 0 { + return d + } + if d := compareSegment(v.Patch(), o.Patch()); d != 0 { + return d + } + + // At this point the major, minor, and patch versions are the same. + ps := v.pre + po := o.Prerelease() + + if ps == "" && po == "" { + return 0 + } + if ps == "" { + return 1 + } + if po == "" { + return -1 + } + + return comparePrerelease(ps, po) +} + +// UnmarshalJSON implements JSON.Unmarshaler interface. +func (v *Version) UnmarshalJSON(b []byte) error { + var s string + if err := json.Unmarshal(b, &s); err != nil { + return err + } + temp, err := NewVersion(s) + if err != nil { + return err + } + v.major = temp.major + v.minor = temp.minor + v.patch = temp.patch + v.pre = temp.pre + v.metadata = temp.metadata + v.original = temp.original + return nil +} + +// MarshalJSON implements JSON.Marshaler interface. +func (v Version) MarshalJSON() ([]byte, error) { + return json.Marshal(v.String()) +} + +// UnmarshalText implements the encoding.TextUnmarshaler interface. +func (v *Version) UnmarshalText(text []byte) error { + temp, err := NewVersion(string(text)) + if err != nil { + return err + } + + *v = *temp + + return nil +} + +// MarshalText implements the encoding.TextMarshaler interface. +func (v Version) MarshalText() ([]byte, error) { + return []byte(v.String()), nil +} + +// Scan implements the SQL.Scanner interface. +func (v *Version) Scan(value interface{}) error { + var s string + s, _ = value.(string) + temp, err := NewVersion(s) + if err != nil { + return err + } + v.major = temp.major + v.minor = temp.minor + v.patch = temp.patch + v.pre = temp.pre + v.metadata = temp.metadata + v.original = temp.original + return nil +} + +// Value implements the Driver.Valuer interface. +func (v Version) Value() (driver.Value, error) { + return v.String(), nil +} + +func compareSegment(v, o uint64) int { + if v < o { + return -1 + } + if v > o { + return 1 + } + + return 0 +} + +func comparePrerelease(v, o string) int { + // split the prelease versions by their part. The separator, per the spec, + // is a . + sparts := strings.Split(v, ".") + oparts := strings.Split(o, ".") + + // Find the longer length of the parts to know how many loop iterations to + // go through. + slen := len(sparts) + olen := len(oparts) + + l := slen + if olen > slen { + l = olen + } + + // Iterate over each part of the prereleases to compare the differences. + for i := 0; i < l; i++ { + // Since the lentgh of the parts can be different we need to create + // a placeholder. This is to avoid out of bounds issues. + stemp := "" + if i < slen { + stemp = sparts[i] + } + + otemp := "" + if i < olen { + otemp = oparts[i] + } + + d := comparePrePart(stemp, otemp) + if d != 0 { + return d + } + } + + // Reaching here means two versions are of equal value but have different + // metadata (the part following a +). They are not identical in string form + // but the version comparison finds them to be equal. + return 0 +} + +func comparePrePart(s, o string) int { + // Fastpath if they are equal + if s == o { + return 0 + } + + // When s or o are empty we can use the other in an attempt to determine + // the response. + if s == "" { + if o != "" { + return -1 + } + return 1 + } + + if o == "" { + if s != "" { + return 1 + } + return -1 + } + + // When comparing strings "99" is greater than "103". To handle + // cases like this we need to detect numbers and compare them. According + // to the semver spec, numbers are always positive. If there is a - at the + // start like -99 this is to be evaluated as an alphanum. numbers always + // have precedence over alphanum. Parsing as Uints because negative numbers + // are ignored. + + oi, n1 := strconv.ParseUint(o, 10, 64) + si, n2 := strconv.ParseUint(s, 10, 64) + + // The case where both are strings compare the strings + if n1 != nil && n2 != nil { + if s > o { + return 1 + } + return -1 + } else if n1 != nil { + // o is a string and s is a number + return -1 + } else if n2 != nil { + // s is a string and o is a number + return 1 + } + // Both are numbers + if si > oi { + return 1 + } + return -1 +} + +// Like strings.ContainsAny but does an only instead of any. +func containsOnly(s string, comp string) bool { + return strings.IndexFunc(s, func(r rune) bool { + return !strings.ContainsRune(comp, r) + }) == -1 +} + +// From the spec, "Identifiers MUST comprise only +// ASCII alphanumerics and hyphen [0-9A-Za-z-]. Identifiers MUST NOT be empty. +// Numeric identifiers MUST NOT include leading zeroes.". These segments can +// be dot separated. +func validatePrerelease(p string) error { + eparts := strings.Split(p, ".") + for _, p := range eparts { + if containsOnly(p, num) { + if len(p) > 1 && p[0] == '0' { + return ErrSegmentStartsZero + } + } else if !containsOnly(p, allowed) { + return ErrInvalidPrerelease + } + } + + return nil +} + +// From the spec, "Build metadata MAY be denoted by +// appending a plus sign and a series of dot separated identifiers immediately +// following the patch or pre-release version. Identifiers MUST comprise only +// ASCII alphanumerics and hyphen [0-9A-Za-z-]. Identifiers MUST NOT be empty." +func validateMetadata(m string) error { + eparts := strings.Split(m, ".") + for _, p := range eparts { + if !containsOnly(p, allowed) { + return ErrInvalidMetadata + } + } + return nil +} diff --git a/vendor/github.com/containernetworking/cni/libcni/api.go b/vendor/github.com/containernetworking/cni/libcni/api.go index 0d82a2dd3..5c7f3b028 100644 --- a/vendor/github.com/containernetworking/cni/libcni/api.go +++ b/vendor/github.com/containernetworking/cni/libcni/api.go @@ -15,7 +15,7 @@ package libcni // Note this is the actual implementation of the CNI specification, which -// is reflected in the https://github.com/containernetworking/cni/blob/master/SPEC.md file +// is reflected in the SPEC.md file. // it is typically bundled into runtime providers (i.e. containerd or cri-o would use this // before calling runc or hcsshim). It is also bundled into CNI providers as well, for example, // to add an IP to a container, to parse the configuration of the CNI and so on. @@ -24,9 +24,9 @@ import ( "context" "encoding/json" "fmt" - "io/ioutil" "os" "path/filepath" + "sort" "strings" "github.com/containernetworking/cni/pkg/invoke" @@ -38,6 +38,8 @@ import ( var ( CacheDir = "/var/lib/cni" + // slightly awkward wording to preserve anyone matching on error strings + ErrorCheckNotSupp = fmt.Errorf("does not support the CHECK command") ) const ( @@ -77,6 +79,20 @@ type NetworkConfigList struct { Bytes []byte } +type NetworkAttachment struct { + ContainerID string + Network string + IfName string + Config []byte + NetNS string + CniArgs [][2]string + CapabilityArgs map[string]interface{} +} + +type GCArgs struct { + ValidAttachments []types.GCAttachment +} + type CNI interface { AddNetworkList(ctx context.Context, net *NetworkConfigList, rt *RuntimeConf) (types.Result, error) CheckNetworkList(ctx context.Context, net *NetworkConfigList, rt *RuntimeConf) error @@ -92,6 +108,11 @@ type CNI interface { ValidateNetworkList(ctx context.Context, net *NetworkConfigList) ([]string, error) ValidateNetwork(ctx context.Context, net *NetworkConfig) ([]string, error) + + GCNetworkList(ctx context.Context, net *NetworkConfigList, args *GCArgs) error + GetStatusNetworkList(ctx context.Context, net *NetworkConfigList) error + + GetCachedAttachments(containerID string) ([]*NetworkAttachment, error) } type CNIConfig struct { @@ -139,8 +160,11 @@ func buildOneConfig(name, cniVersion string, orig *NetworkConfig, prevResult typ if err != nil { return nil, err } + if rt != nil { + return injectRuntimeConfig(orig, rt) + } - return injectRuntimeConfig(orig, rt) + return orig, nil } // This function takes a libcni RuntimeConf structure and injects values into @@ -195,6 +219,7 @@ type cachedInfo struct { Config []byte `json:"config"` IfName string `json:"ifName"` NetworkName string `json:"networkName"` + NetNS string `json:"netns,omitempty"` CniArgs [][2]string `json:"cniArgs,omitempty"` CapabilityArgs map[string]interface{} `json:"capabilityArgs,omitempty"` RawResult map[string]interface{} `json:"result,omitempty"` @@ -229,6 +254,7 @@ func (c *CNIConfig) cacheAdd(result types.Result, config []byte, netName string, Config: config, IfName: rt.IfName, NetworkName: netName, + NetNS: rt.NetNS, CniArgs: rt.Args, CapabilityArgs: rt.CapabilityArgs, } @@ -254,11 +280,11 @@ func (c *CNIConfig) cacheAdd(result types.Result, config []byte, netName string, if err != nil { return err } - if err := os.MkdirAll(filepath.Dir(fname), 0700); err != nil { + if err := os.MkdirAll(filepath.Dir(fname), 0o700); err != nil { return err } - return ioutil.WriteFile(fname, newBytes, 0600) + return os.WriteFile(fname, newBytes, 0o600) } func (c *CNIConfig) cacheDel(netName string, rt *RuntimeConf) error { @@ -277,7 +303,7 @@ func (c *CNIConfig) getCachedConfig(netName string, rt *RuntimeConf) ([]byte, *R if err != nil { return nil, nil, err } - bytes, err = ioutil.ReadFile(fname) + bytes, err = os.ReadFile(fname) if err != nil { // Ignore read errors; the cached result may not exist on-disk return nil, nil, nil @@ -305,7 +331,7 @@ func (c *CNIConfig) getLegacyCachedResult(netName, cniVersion string, rt *Runtim if err != nil { return nil, err } - data, err := ioutil.ReadFile(fname) + data, err := os.ReadFile(fname) if err != nil { // Ignore read errors; the cached result may not exist on-disk return nil, nil @@ -333,7 +359,7 @@ func (c *CNIConfig) getCachedResult(netName, cniVersion string, rt *RuntimeConf) if err != nil { return nil, err } - fdata, err := ioutil.ReadFile(fname) + fdata, err := os.ReadFile(fname) if err != nil { // Ignore read errors; the cached result may not exist on-disk return nil, nil @@ -390,6 +416,65 @@ func (c *CNIConfig) GetNetworkCachedConfig(net *NetworkConfig, rt *RuntimeConf) return c.getCachedConfig(net.Network.Name, rt) } +// GetCachedAttachments returns a list of network attachments from the cache. +// The returned list will be filtered by the containerID if the value is not empty. +func (c *CNIConfig) GetCachedAttachments(containerID string) ([]*NetworkAttachment, error) { + dirPath := filepath.Join(c.getCacheDir(&RuntimeConf{}), "results") + entries, err := os.ReadDir(dirPath) + if err != nil { + return nil, err + } + + fileNames := make([]string, 0, len(entries)) + for _, e := range entries { + fileNames = append(fileNames, e.Name()) + } + sort.Strings(fileNames) + + attachments := []*NetworkAttachment{} + for _, fname := range fileNames { + if len(containerID) > 0 { + part := fmt.Sprintf("-%s-", containerID) + pos := strings.Index(fname, part) + if pos <= 0 || pos+len(part) >= len(fname) { + continue + } + } + + cacheFile := filepath.Join(dirPath, fname) + bytes, err := os.ReadFile(cacheFile) + if err != nil { + continue + } + + cachedInfo := cachedInfo{} + + if err := json.Unmarshal(bytes, &cachedInfo); err != nil { + continue + } + if cachedInfo.Kind != CNICacheV1 { + continue + } + if len(containerID) > 0 && cachedInfo.ContainerID != containerID { + continue + } + if cachedInfo.IfName == "" || cachedInfo.NetworkName == "" { + continue + } + + attachments = append(attachments, &NetworkAttachment{ + ContainerID: cachedInfo.ContainerID, + Network: cachedInfo.NetworkName, + IfName: cachedInfo.IfName, + Config: cachedInfo.Config, + NetNS: cachedInfo.NetNS, + CniArgs: cachedInfo.CniArgs, + CapabilityArgs: cachedInfo.CapabilityArgs, + }) + } + return attachments, nil +} + func (c *CNIConfig) addNetwork(ctx context.Context, name, cniVersion string, net *NetworkConfig, prevResult types.Result, rt *RuntimeConf) (types.Result, error) { c.ensureExec() pluginPath, err := c.exec.FindInPath(net.Network.Type, c.Path) @@ -453,7 +538,7 @@ func (c *CNIConfig) CheckNetworkList(ctx context.Context, list *NetworkConfigLis if gtet, err := version.GreaterThanOrEqualTo(list.CNIVersion, "0.4.0"); err != nil { return err } else if !gtet { - return fmt.Errorf("configuration version %q does not support the CHECK command", list.CNIVersion) + return fmt.Errorf("configuration version %q %w", list.CNIVersion, ErrorCheckNotSupp) } if list.DisableCheck { @@ -497,9 +582,9 @@ func (c *CNIConfig) DelNetworkList(ctx context.Context, list *NetworkConfigList, if gtet, err := version.GreaterThanOrEqualTo(list.CNIVersion, "0.4.0"); err != nil { return err } else if gtet { - cachedResult, err = c.getCachedResult(list.Name, list.CNIVersion, rt) - if err != nil { - return fmt.Errorf("failed to get network %q cached result: %w", list.Name, err) + if cachedResult, err = c.getCachedResult(list.Name, list.CNIVersion, rt); err != nil { + _ = c.cacheDel(list.Name, rt) + cachedResult = nil } } @@ -509,7 +594,10 @@ func (c *CNIConfig) DelNetworkList(ctx context.Context, list *NetworkConfigList, return fmt.Errorf("plugin %s failed (delete): %w", pluginDescription(net.Network), err) } } - _ = c.cacheDel(list.Name, rt) + + if cachedResult != nil { + _ = c.cacheDel(list.Name, rt) + } return nil } @@ -547,7 +635,7 @@ func (c *CNIConfig) CheckNetwork(ctx context.Context, net *NetworkConfig, rt *Ru if gtet, err := version.GreaterThanOrEqualTo(net.Network.CNIVersion, "0.4.0"); err != nil { return err } else if !gtet { - return fmt.Errorf("configuration version %q does not support the CHECK command", net.Network.CNIVersion) + return fmt.Errorf("configuration version %q %w", net.Network.CNIVersion, ErrorCheckNotSupp) } cachedResult, err := c.getCachedResult(net.Network.Name, net.Network.CNIVersion, rt) @@ -666,6 +754,116 @@ func (c *CNIConfig) GetVersionInfo(ctx context.Context, pluginType string) (vers return invoke.GetVersionInfo(ctx, pluginPath, c.exec) } +// GCNetworkList will do two things +// - dump the list of cached attachments, and issue deletes as necessary +// - issue a GC to the underlying plugins (if the version is high enough) +func (c *CNIConfig) GCNetworkList(ctx context.Context, list *NetworkConfigList, args *GCArgs) error { + // First, get the list of cached attachments + cachedAttachments, err := c.GetCachedAttachments("") + if err != nil { + return nil + } + + validAttachments := make(map[types.GCAttachment]interface{}, len(args.ValidAttachments)) + for _, a := range args.ValidAttachments { + validAttachments[a] = nil + } + + var errs []error + + for _, cachedAttachment := range cachedAttachments { + if cachedAttachment.Network != list.Name { + continue + } + // we found this attachment + gca := types.GCAttachment{ + ContainerID: cachedAttachment.ContainerID, + IfName: cachedAttachment.IfName, + } + if _, ok := validAttachments[gca]; ok { + continue + } + // otherwise, this attachment wasn't valid and we should issue a CNI DEL + rt := RuntimeConf{ + ContainerID: cachedAttachment.ContainerID, + NetNS: cachedAttachment.NetNS, + IfName: cachedAttachment.IfName, + Args: cachedAttachment.CniArgs, + CapabilityArgs: cachedAttachment.CapabilityArgs, + } + if err := c.DelNetworkList(ctx, list, &rt); err != nil { + errs = append(errs, fmt.Errorf("failed to delete stale attachment %s %s: %w", rt.ContainerID, rt.IfName, err)) + } + } + + // now, if the version supports it, issue a GC + if gt, _ := version.GreaterThanOrEqualTo(list.CNIVersion, "1.1.0"); gt { + inject := map[string]interface{}{ + "name": list.Name, + "cniVersion": list.CNIVersion, + "cni.dev/valid-attachments": args.ValidAttachments, + } + for _, plugin := range list.Plugins { + // build config here + pluginConfig, err := InjectConf(plugin, inject) + if err != nil { + errs = append(errs, fmt.Errorf("failed to generate configuration to GC plugin %s: %w", plugin.Network.Type, err)) + } + if err := c.gcNetwork(ctx, pluginConfig); err != nil { + errs = append(errs, fmt.Errorf("failed to GC plugin %s: %w", plugin.Network.Type, err)) + } + } + } + + return joinErrors(errs...) +} + +func (c *CNIConfig) gcNetwork(ctx context.Context, net *NetworkConfig) error { + c.ensureExec() + pluginPath, err := c.exec.FindInPath(net.Network.Type, c.Path) + if err != nil { + return err + } + args := c.args("GC", &RuntimeConf{}) + + return invoke.ExecPluginWithoutResult(ctx, pluginPath, net.Bytes, args, c.exec) +} + +func (c *CNIConfig) GetStatusNetworkList(ctx context.Context, list *NetworkConfigList) error { + // If the version doesn't support status, abort. + if gt, _ := version.GreaterThanOrEqualTo(list.CNIVersion, "1.1.0"); !gt { + return nil + } + + inject := map[string]interface{}{ + "name": list.Name, + "cniVersion": list.CNIVersion, + } + + for _, plugin := range list.Plugins { + // build config here + pluginConfig, err := InjectConf(plugin, inject) + if err != nil { + return fmt.Errorf("failed to generate configuration to get plugin STATUS %s: %w", plugin.Network.Type, err) + } + if err := c.getStatusNetwork(ctx, pluginConfig); err != nil { + return err // Don't collect errors here, so we return a clean error code. + } + } + return nil +} + +func (c *CNIConfig) getStatusNetwork(ctx context.Context, net *NetworkConfig) error { + c.ensureExec() + pluginPath, err := c.exec.FindInPath(net.Network.Type, c.Path) + if err != nil { + return err + } + args := c.args("STATUS", &RuntimeConf{}) + + return invoke.ExecPluginWithoutResult(ctx, pluginPath, net.Bytes, args, c.exec) +} + // ===== func (c *CNIConfig) args(action string, rt *RuntimeConf) *invoke.Args { return &invoke.Args{ diff --git a/vendor/github.com/containernetworking/cni/libcni/conf.go b/vendor/github.com/containernetworking/cni/libcni/conf.go index 3cd6a59d1..6c5d99de9 100644 --- a/vendor/github.com/containernetworking/cni/libcni/conf.go +++ b/vendor/github.com/containernetworking/cni/libcni/conf.go @@ -16,13 +16,17 @@ package libcni import ( "encoding/json" + "errors" "fmt" - "io/ioutil" "os" "path/filepath" "sort" + "strings" + + "github.com/Masterminds/semver/v3" "github.com/containernetworking/cni/pkg/types" + "github.com/containernetworking/cni/pkg/version" ) type NotFoundError struct { @@ -54,7 +58,7 @@ func ConfFromBytes(bytes []byte) (*NetworkConfig, error) { } func ConfFromFile(filename string) (*NetworkConfig, error) { - bytes, err := ioutil.ReadFile(filename) + bytes, err := os.ReadFile(filename) if err != nil { return nil, fmt.Errorf("error reading %s: %w", filename, err) } @@ -85,11 +89,63 @@ func ConfListFromBytes(bytes []byte) (*NetworkConfigList, error) { } } + rawVersions, ok := rawList["cniVersions"] + if ok { + // Parse the current package CNI version + currentVersion, err := semver.NewVersion(version.Current()) + if err != nil { + panic("CNI version is invalid semver!") + } + + rvs, ok := rawVersions.([]interface{}) + if !ok { + return nil, fmt.Errorf("error parsing configuration list: invalid type for cniVersions: %T", rvs) + } + vs := make([]*semver.Version, 0, len(rvs)) + for i, rv := range rvs { + v, ok := rv.(string) + if !ok { + return nil, fmt.Errorf("error parsing configuration list: invalid type for cniVersions index %d: %T", i, rv) + } + if v, err := semver.NewVersion(v); err != nil { + return nil, fmt.Errorf("error parsing configuration list: invalid cniVersions entry %s at index %d: %w", v, i, err) + } else if !v.GreaterThan(currentVersion) { + // Skip versions "greater" than this implementation of the spec + vs = append(vs, v) + } + } + + // if cniVersion was already set, append it to the list for sorting. + if cniVersion != "" { + if v, err := semver.NewVersion(cniVersion); err != nil { + return nil, fmt.Errorf("error parsing configuration list: invalid cniVersion %s: %w", cniVersion, err) + } else if !v.GreaterThan(currentVersion) { + // ignore any versions higher than the current implemented spec version + vs = append(vs, v) + } + } + sort.Sort(semver.Collection(vs)) + if len(vs) > 0 { + cniVersion = vs[len(vs)-1].String() + } + } + disableCheck := false if rawDisableCheck, ok := rawList["disableCheck"]; ok { disableCheck, ok = rawDisableCheck.(bool) if !ok { - return nil, fmt.Errorf("error parsing configuration list: invalid disableCheck type %T", rawDisableCheck) + disableCheckStr, ok := rawDisableCheck.(string) + if !ok { + return nil, fmt.Errorf("error parsing configuration list: invalid disableCheck type %T", rawDisableCheck) + } + switch { + case strings.ToLower(disableCheckStr) == "false": + disableCheck = false + case strings.ToLower(disableCheckStr) == "true": + disableCheck = true + default: + return nil, fmt.Errorf("error parsing configuration list: invalid disableCheck value %q", disableCheckStr) + } } } @@ -129,7 +185,7 @@ func ConfListFromBytes(bytes []byte) (*NetworkConfigList, error) { } func ConfListFromFile(filename string) (*NetworkConfigList, error) { - bytes, err := ioutil.ReadFile(filename) + bytes, err := os.ReadFile(filename) if err != nil { return nil, fmt.Errorf("error reading %s: %w", filename, err) } @@ -138,7 +194,7 @@ func ConfListFromFile(filename string) (*NetworkConfigList, error) { func ConfFiles(dir string, extensions []string) ([]string, error) { // In part, adapted from rkt/networking/podenv.go#listFiles - files, err := ioutil.ReadDir(dir) + files, err := os.ReadDir(dir) switch { case err == nil: // break case os.IsNotExist(err): @@ -206,7 +262,8 @@ func LoadConfList(dir, name string) (*NetworkConfigList, error) { singleConf, err := LoadConf(dir, name) if err != nil { // A little extra logic so the error makes sense - if _, ok := err.(NoConfigsFoundError); len(files) != 0 && ok { + var ncfErr NoConfigsFoundError + if len(files) != 0 && errors.As(err, &ncfErr) { // Config lists found but no config files found return nil, NotFoundError{dir, name} } diff --git a/vendor/github.com/containernetworking/cni/libcni/multierror.go b/vendor/github.com/containernetworking/cni/libcni/multierror.go new file mode 100644 index 000000000..100fb8392 --- /dev/null +++ b/vendor/github.com/containernetworking/cni/libcni/multierror.go @@ -0,0 +1,58 @@ +// Copyright 2022 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Copyright the CNI authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// Adapted from errors/join.go from go 1.20 +// This package can be removed once the toolchain is updated to 1.20 + +package libcni + +func joinErrors(errs ...error) error { + n := 0 + for _, err := range errs { + if err != nil { + n++ + } + } + if n == 0 { + return nil + } + e := &multiError{ + errs: make([]error, 0, n), + } + for _, err := range errs { + if err != nil { + e.errs = append(e.errs, err) + } + } + return e +} + +type multiError struct { + errs []error +} + +func (e *multiError) Error() string { + var b []byte + for i, err := range e.errs { + if i > 0 { + b = append(b, '\n') + } + b = append(b, err.Error()...) + } + return string(b) +} diff --git a/vendor/github.com/containernetworking/cni/pkg/invoke/delegate.go b/vendor/github.com/containernetworking/cni/pkg/invoke/delegate.go index 8defe4dd3..c8b548e7c 100644 --- a/vendor/github.com/containernetworking/cni/pkg/invoke/delegate.go +++ b/vendor/github.com/containernetworking/cni/pkg/invoke/delegate.go @@ -51,25 +51,34 @@ func DelegateAdd(ctx context.Context, delegatePlugin string, netconf []byte, exe // DelegateCheck calls the given delegate plugin with the CNI CHECK action and // JSON configuration func DelegateCheck(ctx context.Context, delegatePlugin string, netconf []byte, exec Exec) error { + return delegateNoResult(ctx, delegatePlugin, netconf, exec, "CHECK") +} + +func delegateNoResult(ctx context.Context, delegatePlugin string, netconf []byte, exec Exec, verb string) error { pluginPath, realExec, err := delegateCommon(delegatePlugin, exec) if err != nil { return err } - // DelegateCheck will override the original CNI_COMMAND env from process with CHECK - return ExecPluginWithoutResult(ctx, pluginPath, netconf, delegateArgs("CHECK"), realExec) + return ExecPluginWithoutResult(ctx, pluginPath, netconf, delegateArgs(verb), realExec) } // DelegateDel calls the given delegate plugin with the CNI DEL action and // JSON configuration func DelegateDel(ctx context.Context, delegatePlugin string, netconf []byte, exec Exec) error { - pluginPath, realExec, err := delegateCommon(delegatePlugin, exec) - if err != nil { - return err - } + return delegateNoResult(ctx, delegatePlugin, netconf, exec, "DEL") +} - // DelegateDel will override the original CNI_COMMAND env from process with DEL - return ExecPluginWithoutResult(ctx, pluginPath, netconf, delegateArgs("DEL"), realExec) +// DelegateStatus calls the given delegate plugin with the CNI STATUS action and +// JSON configuration +func DelegateStatus(ctx context.Context, delegatePlugin string, netconf []byte, exec Exec) error { + return delegateNoResult(ctx, delegatePlugin, netconf, exec, "STATUS") +} + +// DelegateGC calls the given delegate plugin with the CNI GC action and +// JSON configuration +func DelegateGC(ctx context.Context, delegatePlugin string, netconf []byte, exec Exec) error { + return delegateNoResult(ctx, delegatePlugin, netconf, exec, "GC") } // return CNIArgs used by delegation diff --git a/vendor/github.com/containernetworking/cni/pkg/invoke/exec.go b/vendor/github.com/containernetworking/cni/pkg/invoke/exec.go index 3ad07aa8f..a5e015fc9 100644 --- a/vendor/github.com/containernetworking/cni/pkg/invoke/exec.go +++ b/vendor/github.com/containernetworking/cni/pkg/invoke/exec.go @@ -81,17 +81,17 @@ func fixupResultVersion(netconf, result []byte) (string, []byte, error) { // object to ExecPluginWithResult() to verify the incoming stdin and environment // and provide a tailored response: // -//import ( +// import ( // "encoding/json" // "path" // "strings" -//) +// ) // -//type fakeExec struct { +// type fakeExec struct { // version.PluginDecoder -//} +// } // -//func (f *fakeExec) ExecPlugin(pluginPath string, stdinData []byte, environ []string) ([]byte, error) { +// func (f *fakeExec) ExecPlugin(pluginPath string, stdinData []byte, environ []string) ([]byte, error) { // net := &types.NetConf{} // err := json.Unmarshal(stdinData, net) // if err != nil { @@ -109,14 +109,14 @@ func fixupResultVersion(netconf, result []byte) (string, []byte, error) { // } // } // return []byte("{\"CNIVersion\":\"0.4.0\"}"), nil -//} +// } // -//func (f *fakeExec) FindInPath(plugin string, paths []string) (string, error) { +// func (f *fakeExec) FindInPath(plugin string, paths []string) (string, error) { // if len(paths) > 0 { // return path.Join(paths[0], plugin), nil // } // return "", fmt.Errorf("failed to find plugin %s in paths %v", plugin, paths) -//} +// } func ExecPluginWithResult(ctx context.Context, pluginPath string, netconf []byte, args CNIArgs, exec Exec) (types.Result, error) { if exec == nil { diff --git a/vendor/github.com/containernetworking/cni/pkg/invoke/os_unix.go b/vendor/github.com/containernetworking/cni/pkg/invoke/os_unix.go index 9bcfb4553..ed0999bd0 100644 --- a/vendor/github.com/containernetworking/cni/pkg/invoke/os_unix.go +++ b/vendor/github.com/containernetworking/cni/pkg/invoke/os_unix.go @@ -12,6 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. +//go:build darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris // +build darwin dragonfly freebsd linux netbsd openbsd solaris package invoke diff --git a/vendor/github.com/containernetworking/cni/pkg/types/100/types.go b/vendor/github.com/containernetworking/cni/pkg/types/100/types.go index 0e1e8b857..f58b91206 100644 --- a/vendor/github.com/containernetworking/cni/pkg/types/100/types.go +++ b/vendor/github.com/containernetworking/cni/pkg/types/100/types.go @@ -26,9 +26,10 @@ import ( convert "github.com/containernetworking/cni/pkg/types/internal" ) -const ImplementedSpecVersion string = "1.0.0" +// The types did not change between v1.0 and v1.1 +const ImplementedSpecVersion string = "1.1.0" -var supportedVersions = []string{ImplementedSpecVersion} +var supportedVersions = []string{"1.0.0", "1.1.0"} // Register converters for all versions less than the implemented spec version func init() { @@ -38,10 +39,14 @@ func init() { convert.RegisterConverter("0.3.0", supportedVersions, convertFrom04x) convert.RegisterConverter("0.3.1", supportedVersions, convertFrom04x) convert.RegisterConverter("0.4.0", supportedVersions, convertFrom04x) + convert.RegisterConverter("1.0.0", []string{"1.1.0"}, convertFrom100) // Down-converters convert.RegisterConverter("1.0.0", []string{"0.3.0", "0.3.1", "0.4.0"}, convertTo04x) convert.RegisterConverter("1.0.0", []string{"0.1.0", "0.2.0"}, convertTo02x) + convert.RegisterConverter("1.1.0", []string{"0.3.0", "0.3.1", "0.4.0"}, convertTo04x) + convert.RegisterConverter("1.1.0", []string{"0.1.0", "0.2.0"}, convertTo02x) + convert.RegisterConverter("1.1.0", []string{"1.0.0"}, convertFrom100) // Creator convert.RegisterCreator(supportedVersions, NewResult) @@ -90,12 +95,49 @@ type Result struct { DNS types.DNS `json:"dns,omitempty"` } +// Note: DNS should be omit if DNS is empty but default Marshal function +// will output empty structure hence need to write a Marshal function +func (r *Result) MarshalJSON() ([]byte, error) { + // use type alias to escape recursion for json.Marshal() to MarshalJSON() + type fixObjType = Result + + bytes, err := json.Marshal(fixObjType(*r)) //nolint:all + if err != nil { + return nil, err + } + + fixupObj := make(map[string]interface{}) + if err := json.Unmarshal(bytes, &fixupObj); err != nil { + return nil, err + } + + if r.DNS.IsEmpty() { + delete(fixupObj, "dns") + } + + return json.Marshal(fixupObj) +} + +// convertFrom100 does nothing except set the version; the types are the same +func convertFrom100(from types.Result, toVersion string) (types.Result, error) { + fromResult := from.(*Result) + + result := &Result{ + CNIVersion: toVersion, + Interfaces: fromResult.Interfaces, + IPs: fromResult.IPs, + Routes: fromResult.Routes, + DNS: fromResult.DNS, + } + return result, nil +} + func convertFrom02x(from types.Result, toVersion string) (types.Result, error) { result040, err := convert.Convert(from, "0.4.0") if err != nil { return nil, err } - result100, err := convertFrom04x(result040, ImplementedSpecVersion) + result100, err := convertFrom04x(result040, toVersion) if err != nil { return nil, err } @@ -226,9 +268,12 @@ func (r *Result) PrintTo(writer io.Writer) error { // Interface contains values about the created interfaces type Interface struct { - Name string `json:"name"` - Mac string `json:"mac,omitempty"` - Sandbox string `json:"sandbox,omitempty"` + Name string `json:"name"` + Mac string `json:"mac,omitempty"` + Mtu int `json:"mtu,omitempty"` + Sandbox string `json:"sandbox,omitempty"` + SocketPath string `json:"socketPath,omitempty"` + PciID string `json:"pciID,omitempty"` } func (i *Interface) String() string { diff --git a/vendor/github.com/containernetworking/cni/pkg/types/args.go b/vendor/github.com/containernetworking/cni/pkg/types/args.go index 7516f03ef..68a602bfd 100644 --- a/vendor/github.com/containernetworking/cni/pkg/types/args.go +++ b/vendor/github.com/containernetworking/cni/pkg/types/args.go @@ -26,8 +26,8 @@ import ( type UnmarshallableBool bool // UnmarshalText implements the encoding.TextUnmarshaler interface. -// Returns boolean true if the string is "1" or "[Tt]rue" -// Returns boolean false if the string is "0" or "[Ff]alse" +// Returns boolean true if the string is "1" or "true" or "True" +// Returns boolean false if the string is "0" or "false" or "False” func (b *UnmarshallableBool) UnmarshalText(data []byte) error { s := strings.ToLower(string(data)) switch s { diff --git a/vendor/github.com/containernetworking/cni/pkg/types/create/create.go b/vendor/github.com/containernetworking/cni/pkg/types/create/create.go index ed28b33e8..452cb6220 100644 --- a/vendor/github.com/containernetworking/cni/pkg/types/create/create.go +++ b/vendor/github.com/containernetworking/cni/pkg/types/create/create.go @@ -19,6 +19,9 @@ import ( "fmt" "github.com/containernetworking/cni/pkg/types" + _ "github.com/containernetworking/cni/pkg/types/020" + _ "github.com/containernetworking/cni/pkg/types/040" + _ "github.com/containernetworking/cni/pkg/types/100" convert "github.com/containernetworking/cni/pkg/types/internal" ) diff --git a/vendor/github.com/containernetworking/cni/pkg/types/types.go b/vendor/github.com/containernetworking/cni/pkg/types/types.go index fba17dfc0..193ac46ef 100644 --- a/vendor/github.com/containernetworking/cni/pkg/types/types.go +++ b/vendor/github.com/containernetworking/cni/pkg/types/types.go @@ -64,16 +64,55 @@ type NetConf struct { Type string `json:"type,omitempty"` Capabilities map[string]bool `json:"capabilities,omitempty"` IPAM IPAM `json:"ipam,omitempty"` - DNS DNS `json:"dns"` + DNS DNS `json:"dns,omitempty"` RawPrevResult map[string]interface{} `json:"prevResult,omitempty"` PrevResult Result `json:"-"` + + // ValidAttachments is only supplied when executing a GC operation + ValidAttachments []GCAttachment `json:"cni.dev/valid-attachments,omitempty"` +} + +// GCAttachment is the parameters to a GC call -- namely, +// the container ID and ifname pair that represents a +// still-valid attachment. +type GCAttachment struct { + ContainerID string `json:"containerID"` + IfName string `json:"ifname"` +} + +// Note: DNS should be omit if DNS is empty but default Marshal function +// will output empty structure hence need to write a Marshal function +func (n *NetConf) MarshalJSON() ([]byte, error) { + // use type alias to escape recursion for json.Marshal() to MarshalJSON() + type fixObjType = NetConf + + bytes, err := json.Marshal(fixObjType(*n)) //nolint:all + if err != nil { + return nil, err + } + + fixupObj := make(map[string]interface{}) + if err := json.Unmarshal(bytes, &fixupObj); err != nil { + return nil, err + } + + if n.DNS.IsEmpty() { + delete(fixupObj, "dns") + } + + return json.Marshal(fixupObj) } type IPAM struct { Type string `json:"type,omitempty"` } +// IsEmpty returns true if IPAM structure has no value, otherwise return false +func (i *IPAM) IsEmpty() bool { + return i.Type == "" +} + // NetConfList describes an ordered list of networks. type NetConfList struct { CNIVersion string `json:"cniVersion,omitempty"` @@ -116,31 +155,48 @@ type DNS struct { Options []string `json:"options,omitempty"` } +// IsEmpty returns true if DNS structure has no value, otherwise return false +func (d *DNS) IsEmpty() bool { + if len(d.Nameservers) == 0 && d.Domain == "" && len(d.Search) == 0 && len(d.Options) == 0 { + return true + } + return false +} + func (d *DNS) Copy() *DNS { if d == nil { return nil } to := &DNS{Domain: d.Domain} - for _, ns := range d.Nameservers { - to.Nameservers = append(to.Nameservers, ns) - } - for _, s := range d.Search { - to.Search = append(to.Search, s) - } - for _, o := range d.Options { - to.Options = append(to.Options, o) - } + to.Nameservers = append(to.Nameservers, d.Nameservers...) + to.Search = append(to.Search, d.Search...) + to.Options = append(to.Options, d.Options...) return to } type Route struct { - Dst net.IPNet - GW net.IP + Dst net.IPNet + GW net.IP + MTU int + AdvMSS int + Priority int + Table *int + Scope *int } func (r *Route) String() string { - return fmt.Sprintf("%+v", *r) + table := "" + if r.Table != nil { + table = fmt.Sprintf("%d", *r.Table) + } + + scope := "" + if r.Scope != nil { + scope = fmt.Sprintf("%d", *r.Scope) + } + + return fmt.Sprintf("{Dst:%+v GW:%v MTU:%d AdvMSS:%d Priority:%d Table:%s Scope:%s}", r.Dst, r.GW, r.MTU, r.AdvMSS, r.Priority, table, scope) } func (r *Route) Copy() *Route { @@ -148,14 +204,30 @@ func (r *Route) Copy() *Route { return nil } - return &Route{ - Dst: r.Dst, - GW: r.GW, + route := &Route{ + Dst: r.Dst, + GW: r.GW, + MTU: r.MTU, + AdvMSS: r.AdvMSS, + Priority: r.Priority, + Scope: r.Scope, + } + + if r.Table != nil { + table := *r.Table + route.Table = &table } + + if r.Scope != nil { + scope := *r.Scope + route.Scope = &scope + } + + return route } // Well known error codes -// see https://github.com/containernetworking/cni/blob/master/SPEC.md#well-known-error-codes +// see https://github.com/containernetworking/cni/blob/main/SPEC.md#well-known-error-codes const ( ErrUnknown uint = iota // 0 ErrIncompatibleCNIVersion // 1 @@ -165,6 +237,7 @@ const ( ErrIOFailure // 5 ErrDecodingFailure // 6 ErrInvalidNetworkConfig // 7 + ErrInvalidNetNS // 8 ErrTryAgainLater uint = 11 ErrInternal uint = 999 ) @@ -200,8 +273,13 @@ func (e *Error) Print() error { // JSON (un)marshallable types type route struct { - Dst IPNet `json:"dst"` - GW net.IP `json:"gw,omitempty"` + Dst IPNet `json:"dst"` + GW net.IP `json:"gw,omitempty"` + MTU int `json:"mtu,omitempty"` + AdvMSS int `json:"advmss,omitempty"` + Priority int `json:"priority,omitempty"` + Table *int `json:"table,omitempty"` + Scope *int `json:"scope,omitempty"` } func (r *Route) UnmarshalJSON(data []byte) error { @@ -212,13 +290,24 @@ func (r *Route) UnmarshalJSON(data []byte) error { r.Dst = net.IPNet(rt.Dst) r.GW = rt.GW + r.MTU = rt.MTU + r.AdvMSS = rt.AdvMSS + r.Priority = rt.Priority + r.Table = rt.Table + r.Scope = rt.Scope + return nil } func (r Route) MarshalJSON() ([]byte, error) { rt := route{ - Dst: IPNet(r.Dst), - GW: r.GW, + Dst: IPNet(r.Dst), + GW: r.GW, + MTU: r.MTU, + AdvMSS: r.AdvMSS, + Priority: r.Priority, + Table: r.Table, + Scope: r.Scope, } return json.Marshal(rt) diff --git a/vendor/github.com/containernetworking/cni/pkg/utils/utils.go b/vendor/github.com/containernetworking/cni/pkg/utils/utils.go index b8ec38874..1981d2556 100644 --- a/vendor/github.com/containernetworking/cni/pkg/utils/utils.go +++ b/vendor/github.com/containernetworking/cni/pkg/utils/utils.go @@ -36,7 +36,6 @@ var cniReg = regexp.MustCompile(`^` + cniValidNameChars + `*$`) // ValidateContainerID will validate that the supplied containerID is not empty does not contain invalid characters func ValidateContainerID(containerID string) *types.Error { - if containerID == "" { return types.NewError(types.ErrUnknownContainer, "missing containerID", "") } @@ -48,7 +47,6 @@ func ValidateContainerID(containerID string) *types.Error { // ValidateNetworkName will validate that the supplied networkName does not contain invalid characters func ValidateNetworkName(networkName string) *types.Error { - if networkName == "" { return types.NewError(types.ErrInvalidNetworkConfig, "missing network name:", "") } @@ -58,11 +56,11 @@ func ValidateNetworkName(networkName string) *types.Error { return nil } -// ValidateInterfaceName will validate the interface name based on the three rules below +// ValidateInterfaceName will validate the interface name based on the four rules below // 1. The name must not be empty // 2. The name must be less than 16 characters // 3. The name must not be "." or ".." -// 3. The name must not contain / or : or any whitespace characters +// 4. The name must not contain / or : or any whitespace characters // ref to https://github.com/torvalds/linux/blob/master/net/core/dev.c#L1024 func ValidateInterfaceName(ifName string) *types.Error { if len(ifName) == 0 { diff --git a/vendor/github.com/containernetworking/cni/pkg/version/version.go b/vendor/github.com/containernetworking/cni/pkg/version/version.go index 1326f8038..a4d442c8e 100644 --- a/vendor/github.com/containernetworking/cni/pkg/version/version.go +++ b/vendor/github.com/containernetworking/cni/pkg/version/version.go @@ -19,13 +19,12 @@ import ( "fmt" "github.com/containernetworking/cni/pkg/types" - types100 "github.com/containernetworking/cni/pkg/types/100" "github.com/containernetworking/cni/pkg/types/create" ) // Current reports the version of the CNI spec implemented by this library func Current() string { - return types100.ImplementedSpecVersion + return "1.1.0" } // Legacy PluginInfo describes a plugin that is backwards compatible with the @@ -35,8 +34,10 @@ func Current() string { // // Any future CNI spec versions which meet this definition should be added to // this list. -var Legacy = PluginSupports("0.1.0", "0.2.0") -var All = PluginSupports("0.1.0", "0.2.0", "0.3.0", "0.3.1", "0.4.0", "1.0.0") +var ( + Legacy = PluginSupports("0.1.0", "0.2.0") + All = PluginSupports("0.1.0", "0.2.0", "0.3.0", "0.3.1", "0.4.0", "1.0.0", "1.1.0") +) // VersionsFrom returns a list of versions starting from min, inclusive func VersionsStartingFrom(min string) PluginInfo { diff --git a/vendor/github.com/emicklei/go-restful/v3/CHANGES.md b/vendor/github.com/emicklei/go-restful/v3/CHANGES.md index e8c65d0f6..9e790390b 100644 --- a/vendor/github.com/emicklei/go-restful/v3/CHANGES.md +++ b/vendor/github.com/emicklei/go-restful/v3/CHANGES.md @@ -1,5 +1,13 @@ # Change history of go-restful + +## [v3.12.0] - 2024-03-11 +- add Flush method #529 (#538) +- fix: Improper handling of empty POST requests (#543) + +## [v3.11.3] - 2024-01-09 +- better not have 2 tags on one commit + ## [v3.11.1, v3.11.2] - 2024-01-09 - fix by restoring custom JSON handler functions (Mike Beaumont #540) diff --git a/vendor/github.com/emicklei/go-restful/v3/README.md b/vendor/github.com/emicklei/go-restful/v3/README.md index 95a05a089..7234604e4 100644 --- a/vendor/github.com/emicklei/go-restful/v3/README.md +++ b/vendor/github.com/emicklei/go-restful/v3/README.md @@ -2,7 +2,6 @@ go-restful ========== package for building REST-style Web Services using Google Go -[![Build Status](https://travis-ci.org/emicklei/go-restful.png)](https://travis-ci.org/emicklei/go-restful) [![Go Report Card](https://goreportcard.com/badge/github.com/emicklei/go-restful)](https://goreportcard.com/report/github.com/emicklei/go-restful) [![GoDoc](https://godoc.org/github.com/emicklei/go-restful?status.svg)](https://pkg.go.dev/github.com/emicklei/go-restful) [![codecov](https://codecov.io/gh/emicklei/go-restful/branch/master/graph/badge.svg)](https://codecov.io/gh/emicklei/go-restful) diff --git a/vendor/github.com/emicklei/go-restful/v3/compress.go b/vendor/github.com/emicklei/go-restful/v3/compress.go index 1ff239f99..80adf55fd 100644 --- a/vendor/github.com/emicklei/go-restful/v3/compress.go +++ b/vendor/github.com/emicklei/go-restful/v3/compress.go @@ -49,6 +49,16 @@ func (c *CompressingResponseWriter) CloseNotify() <-chan bool { return c.writer.(http.CloseNotifier).CloseNotify() } +// Flush is part of http.Flusher interface. Noop if the underlying writer doesn't support it. +func (c *CompressingResponseWriter) Flush() { + flusher, ok := c.writer.(http.Flusher) + if !ok { + // writer doesn't support http.Flusher interface + return + } + flusher.Flush() +} + // Close the underlying compressor func (c *CompressingResponseWriter) Close() error { if c.isCompressorClosed() { diff --git a/vendor/github.com/emicklei/go-restful/v3/jsr311.go b/vendor/github.com/emicklei/go-restful/v3/jsr311.go index 07a0c91e9..a9b3faaa8 100644 --- a/vendor/github.com/emicklei/go-restful/v3/jsr311.go +++ b/vendor/github.com/emicklei/go-restful/v3/jsr311.go @@ -155,7 +155,7 @@ func (r RouterJSR311) detectRoute(routes []Route, httpRequest *http.Request) (*R method, length := httpRequest.Method, httpRequest.Header.Get("Content-Length") if (method == http.MethodPost || method == http.MethodPut || - method == http.MethodPatch) && length == "" { + method == http.MethodPatch) && (length == "" || length == "0") { return nil, NewError( http.StatusUnsupportedMediaType, fmt.Sprintf("415: Unsupported Media Type\n\nAvailable representations: %s", strings.Join(available, ", ")), diff --git a/vendor/github.com/go-jose/go-jose/v3/jwt/jwt.go b/vendor/github.com/go-jose/go-jose/v3/jwt/jwt.go deleted file mode 100644 index 8553fc50b..000000000 --- a/vendor/github.com/go-jose/go-jose/v3/jwt/jwt.go +++ /dev/null @@ -1,133 +0,0 @@ -/*- - * Copyright 2016 Zbigniew Mandziejewicz - * Copyright 2016 Square, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package jwt - -import ( - "fmt" - "strings" - - jose "github.com/go-jose/go-jose/v3" - "github.com/go-jose/go-jose/v3/json" -) - -// JSONWebToken represents a JSON Web Token (as specified in RFC7519). -type JSONWebToken struct { - payload func(k interface{}) ([]byte, error) - unverifiedPayload func() []byte - Headers []jose.Header -} - -type NestedJSONWebToken struct { - enc *jose.JSONWebEncryption - Headers []jose.Header -} - -// Claims deserializes a JSONWebToken into dest using the provided key. -func (t *JSONWebToken) Claims(key interface{}, dest ...interface{}) error { - b, err := t.payload(key) - if err != nil { - return err - } - - for _, d := range dest { - if err := json.Unmarshal(b, d); err != nil { - return err - } - } - - return nil -} - -// UnsafeClaimsWithoutVerification deserializes the claims of a -// JSONWebToken into the dests. For signed JWTs, the claims are not -// verified. This function won't work for encrypted JWTs. -func (t *JSONWebToken) UnsafeClaimsWithoutVerification(dest ...interface{}) error { - if t.unverifiedPayload == nil { - return fmt.Errorf("go-jose/go-jose: Cannot get unverified claims") - } - claims := t.unverifiedPayload() - for _, d := range dest { - if err := json.Unmarshal(claims, d); err != nil { - return err - } - } - return nil -} - -func (t *NestedJSONWebToken) Decrypt(decryptionKey interface{}) (*JSONWebToken, error) { - b, err := t.enc.Decrypt(decryptionKey) - if err != nil { - return nil, err - } - - sig, err := ParseSigned(string(b)) - if err != nil { - return nil, err - } - - return sig, nil -} - -// ParseSigned parses token from JWS form. -func ParseSigned(s string) (*JSONWebToken, error) { - sig, err := jose.ParseSigned(s) - if err != nil { - return nil, err - } - headers := make([]jose.Header, len(sig.Signatures)) - for i, signature := range sig.Signatures { - headers[i] = signature.Header - } - - return &JSONWebToken{ - payload: sig.Verify, - unverifiedPayload: sig.UnsafePayloadWithoutVerification, - Headers: headers, - }, nil -} - -// ParseEncrypted parses token from JWE form. -func ParseEncrypted(s string) (*JSONWebToken, error) { - enc, err := jose.ParseEncrypted(s) - if err != nil { - return nil, err - } - - return &JSONWebToken{ - payload: enc.Decrypt, - Headers: []jose.Header{enc.Header}, - }, nil -} - -// ParseSignedAndEncrypted parses signed-then-encrypted token from JWE form. -func ParseSignedAndEncrypted(s string) (*NestedJSONWebToken, error) { - enc, err := jose.ParseEncrypted(s) - if err != nil { - return nil, err - } - - contentType, _ := enc.Header.ExtraHeaders[jose.HeaderContentType].(string) - if strings.ToUpper(contentType) != "JWT" { - return nil, ErrInvalidContentType - } - - return &NestedJSONWebToken{ - enc: enc, - Headers: []jose.Header{enc.Header}, - }, nil -} diff --git a/vendor/github.com/go-jose/go-jose/v3/.gitignore b/vendor/github.com/go-jose/go-jose/v4/.gitignore similarity index 100% rename from vendor/github.com/go-jose/go-jose/v3/.gitignore rename to vendor/github.com/go-jose/go-jose/v4/.gitignore diff --git a/vendor/github.com/go-jose/go-jose/v3/.golangci.yml b/vendor/github.com/go-jose/go-jose/v4/.golangci.yml similarity index 100% rename from vendor/github.com/go-jose/go-jose/v3/.golangci.yml rename to vendor/github.com/go-jose/go-jose/v4/.golangci.yml diff --git a/vendor/github.com/go-jose/go-jose/v3/.travis.yml b/vendor/github.com/go-jose/go-jose/v4/.travis.yml similarity index 100% rename from vendor/github.com/go-jose/go-jose/v3/.travis.yml rename to vendor/github.com/go-jose/go-jose/v4/.travis.yml diff --git a/vendor/github.com/go-jose/go-jose/v3/CHANGELOG.md b/vendor/github.com/go-jose/go-jose/v4/CHANGELOG.md similarity index 96% rename from vendor/github.com/go-jose/go-jose/v3/CHANGELOG.md rename to vendor/github.com/go-jose/go-jose/v4/CHANGELOG.md index ce2a54ebf..28bdd2fc0 100644 --- a/vendor/github.com/go-jose/go-jose/v3/CHANGELOG.md +++ b/vendor/github.com/go-jose/go-jose/v4/CHANGELOG.md @@ -45,12 +45,6 @@ token". [1]: https://i.blackhat.com/BH-US-23/Presentations/US-23-Tervoort-Three-New-Attacks-Against-JSON-Web-Tokens.pdf -# v3.0.3 - -## Fixed - - - Limit decompression output size to prevent a DoS. Backport from v4.0.1. - # v3.0.2 ## Fixed diff --git a/vendor/github.com/go-jose/go-jose/v3/CONTRIBUTING.md b/vendor/github.com/go-jose/go-jose/v4/CONTRIBUTING.md similarity index 100% rename from vendor/github.com/go-jose/go-jose/v3/CONTRIBUTING.md rename to vendor/github.com/go-jose/go-jose/v4/CONTRIBUTING.md diff --git a/vendor/github.com/go-jose/go-jose/v3/LICENSE b/vendor/github.com/go-jose/go-jose/v4/LICENSE similarity index 100% rename from vendor/github.com/go-jose/go-jose/v3/LICENSE rename to vendor/github.com/go-jose/go-jose/v4/LICENSE diff --git a/vendor/github.com/go-jose/go-jose/v3/README.md b/vendor/github.com/go-jose/go-jose/v4/README.md similarity index 82% rename from vendor/github.com/go-jose/go-jose/v3/README.md rename to vendor/github.com/go-jose/go-jose/v4/README.md index 282cd9e13..79a7c5ecc 100644 --- a/vendor/github.com/go-jose/go-jose/v3/README.md +++ b/vendor/github.com/go-jose/go-jose/v4/README.md @@ -1,17 +1,9 @@ # Go JOSE -### Versions - -[Version 4](https://github.com/go-jose/go-jose) -([branch](https://github.com/go-jose/go-jose/), -[doc](https://pkg.go.dev/github.com/go-jose/go-jose/v4), [releases](https://github.com/go-jose/go-jose/releases)) is the current stable version: - - import "github.com/go-jose/go-jose/v4" - -The old [square/go-jose](https://github.com/square/go-jose) repo contains the prior v1 and v2 versions, which -are deprecated. - -### Summary +[![godoc](https://pkg.go.dev/badge/github.com/go-jose/go-jose/v4.svg)](https://pkg.go.dev/github.com/go-jose/go-jose/v4) +[![godoc](https://pkg.go.dev/badge/github.com/go-jose/go-jose/v4/jwt.svg)](https://pkg.go.dev/github.com/go-jose/go-jose/v4/jwt) +[![license](https://img.shields.io/badge/license-apache_2.0-blue.svg?style=flat)](https://raw.githubusercontent.com/go-jose/go-jose/master/LICENSE) +[![test](https://img.shields.io/github/checks-status/go-jose/go-jose/v4)](https://github.com/go-jose/go-jose/actions) Package jose aims to provide an implementation of the Javascript Object Signing and Encryption set of standards. This includes support for JSON Web Encryption, @@ -43,6 +35,20 @@ of [case-insensitive matching](https://www.ietf.org/mail-archive/web/json/curren This is to avoid differences in interpretation of messages between go-jose and libraries in other languages. +### Versions + +[Version 4](https://github.com/go-jose/go-jose) +([branch](https://github.com/go-jose/go-jose/tree/main), +[doc](https://pkg.go.dev/github.com/go-jose/go-jose/v4), [releases](https://github.com/go-jose/go-jose/releases)) is the current stable version: + + import "github.com/go-jose/go-jose/v4" + +The old [square/go-jose](https://github.com/square/go-jose) repo contains the prior v1 and v2 versions, which +are still useable but not actively developed anymore. + +Version 3, in this repo, is still receiving security fixes but not functionality +updates. + ### Supported algorithms See below for a table of supported algorithms. Algorithm identifiers match @@ -98,11 +104,11 @@ allows attaching a key id. ## Examples -[![godoc](https://pkg.go.dev/badge/github.com/go-jose/go-jose/v3.svg)](https://pkg.go.dev/github.com/go-jose/go-jose/v3) -[![godoc](https://pkg.go.dev/badge/github.com/go-jose/go-jose/v3/jwt.svg)](https://pkg.go.dev/github.com/go-jose/go-jose/v3/jwt) +[![godoc](https://pkg.go.dev/badge/github.com/go-jose/go-jose/v4.svg)](https://pkg.go.dev/github.com/go-jose/go-jose/v4) +[![godoc](https://pkg.go.dev/badge/github.com/go-jose/go-jose/v4/jwt.svg)](https://pkg.go.dev/github.com/go-jose/go-jose/v4/jwt) Examples can be found in the Godoc reference for this package. The -[`jose-util`](https://github.com/go-jose/go-jose/tree/v3/jose-util) +[`jose-util`](https://github.com/go-jose/go-jose/tree/v4/jose-util) subdirectory also contains a small command-line utility which might be useful as an example as well. diff --git a/vendor/github.com/go-jose/go-jose/v3/SECURITY.md b/vendor/github.com/go-jose/go-jose/v4/SECURITY.md similarity index 100% rename from vendor/github.com/go-jose/go-jose/v3/SECURITY.md rename to vendor/github.com/go-jose/go-jose/v4/SECURITY.md diff --git a/vendor/github.com/go-jose/go-jose/v3/asymmetric.go b/vendor/github.com/go-jose/go-jose/v4/asymmetric.go similarity index 99% rename from vendor/github.com/go-jose/go-jose/v3/asymmetric.go rename to vendor/github.com/go-jose/go-jose/v4/asymmetric.go index d4d4961b2..f8d5774ef 100644 --- a/vendor/github.com/go-jose/go-jose/v3/asymmetric.go +++ b/vendor/github.com/go-jose/go-jose/v4/asymmetric.go @@ -29,8 +29,8 @@ import ( "fmt" "math/big" - josecipher "github.com/go-jose/go-jose/v3/cipher" - "github.com/go-jose/go-jose/v3/json" + josecipher "github.com/go-jose/go-jose/v4/cipher" + "github.com/go-jose/go-jose/v4/json" ) // A generic RSA-based encrypter/verifier diff --git a/vendor/github.com/go-jose/go-jose/v3/cipher/cbc_hmac.go b/vendor/github.com/go-jose/go-jose/v4/cipher/cbc_hmac.go similarity index 100% rename from vendor/github.com/go-jose/go-jose/v3/cipher/cbc_hmac.go rename to vendor/github.com/go-jose/go-jose/v4/cipher/cbc_hmac.go diff --git a/vendor/github.com/go-jose/go-jose/v3/cipher/concat_kdf.go b/vendor/github.com/go-jose/go-jose/v4/cipher/concat_kdf.go similarity index 100% rename from vendor/github.com/go-jose/go-jose/v3/cipher/concat_kdf.go rename to vendor/github.com/go-jose/go-jose/v4/cipher/concat_kdf.go diff --git a/vendor/github.com/go-jose/go-jose/v3/cipher/ecdh_es.go b/vendor/github.com/go-jose/go-jose/v4/cipher/ecdh_es.go similarity index 100% rename from vendor/github.com/go-jose/go-jose/v3/cipher/ecdh_es.go rename to vendor/github.com/go-jose/go-jose/v4/cipher/ecdh_es.go diff --git a/vendor/github.com/go-jose/go-jose/v3/cipher/key_wrap.go b/vendor/github.com/go-jose/go-jose/v4/cipher/key_wrap.go similarity index 100% rename from vendor/github.com/go-jose/go-jose/v3/cipher/key_wrap.go rename to vendor/github.com/go-jose/go-jose/v4/cipher/key_wrap.go diff --git a/vendor/github.com/go-jose/go-jose/v3/crypter.go b/vendor/github.com/go-jose/go-jose/v4/crypter.go similarity index 99% rename from vendor/github.com/go-jose/go-jose/v3/crypter.go rename to vendor/github.com/go-jose/go-jose/v4/crypter.go index 8870e8905..aba08424c 100644 --- a/vendor/github.com/go-jose/go-jose/v3/crypter.go +++ b/vendor/github.com/go-jose/go-jose/v4/crypter.go @@ -22,7 +22,7 @@ import ( "errors" "fmt" - "github.com/go-jose/go-jose/v3/json" + "github.com/go-jose/go-jose/v4/json" ) // Encrypter represents an encrypter which produces an encrypted JWE object. diff --git a/vendor/github.com/go-jose/go-jose/v3/doc.go b/vendor/github.com/go-jose/go-jose/v4/doc.go similarity index 100% rename from vendor/github.com/go-jose/go-jose/v3/doc.go rename to vendor/github.com/go-jose/go-jose/v4/doc.go diff --git a/vendor/github.com/go-jose/go-jose/v3/encoding.go b/vendor/github.com/go-jose/go-jose/v4/encoding.go similarity index 92% rename from vendor/github.com/go-jose/go-jose/v3/encoding.go rename to vendor/github.com/go-jose/go-jose/v4/encoding.go index 9f07cfdcb..4f6e0d4a5 100644 --- a/vendor/github.com/go-jose/go-jose/v3/encoding.go +++ b/vendor/github.com/go-jose/go-jose/v4/encoding.go @@ -27,7 +27,7 @@ import ( "strings" "unicode" - "github.com/go-jose/go-jose/v3/json" + "github.com/go-jose/go-jose/v4/json" ) // Helper function to serialize known-good objects. @@ -106,10 +106,7 @@ func inflate(input []byte) ([]byte, error) { output := new(bytes.Buffer) reader := flate.NewReader(bytes.NewBuffer(input)) - maxCompressedSize := 10 * int64(len(input)) - if maxCompressedSize < 250000 { - maxCompressedSize = 250000 - } + maxCompressedSize := max(250_000, 10*int64(len(input))) limit := maxCompressedSize + 1 n, err := io.CopyN(output, reader, limit) @@ -167,7 +164,7 @@ func (b *byteBuffer) UnmarshalJSON(data []byte) error { return nil } - decoded, err := base64URLDecode(encoded) + decoded, err := base64.RawURLEncoding.DecodeString(encoded) if err != nil { return err } @@ -197,12 +194,6 @@ func (b byteBuffer) toInt() int { return int(b.bigInt().Int64()) } -// base64URLDecode is implemented as defined in https://www.rfc-editor.org/rfc/rfc7515.html#appendix-C -func base64URLDecode(value string) ([]byte, error) { - value = strings.TrimRight(value, "=") - return base64.RawURLEncoding.DecodeString(value) -} - func base64EncodeLen(sl []byte) int { return base64.RawURLEncoding.EncodedLen(len(sl)) } diff --git a/vendor/github.com/go-jose/go-jose/v3/json/LICENSE b/vendor/github.com/go-jose/go-jose/v4/json/LICENSE similarity index 100% rename from vendor/github.com/go-jose/go-jose/v3/json/LICENSE rename to vendor/github.com/go-jose/go-jose/v4/json/LICENSE diff --git a/vendor/github.com/go-jose/go-jose/v3/json/README.md b/vendor/github.com/go-jose/go-jose/v4/json/README.md similarity index 100% rename from vendor/github.com/go-jose/go-jose/v3/json/README.md rename to vendor/github.com/go-jose/go-jose/v4/json/README.md diff --git a/vendor/github.com/go-jose/go-jose/v3/json/decode.go b/vendor/github.com/go-jose/go-jose/v4/json/decode.go similarity index 100% rename from vendor/github.com/go-jose/go-jose/v3/json/decode.go rename to vendor/github.com/go-jose/go-jose/v4/json/decode.go diff --git a/vendor/github.com/go-jose/go-jose/v3/json/encode.go b/vendor/github.com/go-jose/go-jose/v4/json/encode.go similarity index 100% rename from vendor/github.com/go-jose/go-jose/v3/json/encode.go rename to vendor/github.com/go-jose/go-jose/v4/json/encode.go diff --git a/vendor/github.com/go-jose/go-jose/v3/json/indent.go b/vendor/github.com/go-jose/go-jose/v4/json/indent.go similarity index 100% rename from vendor/github.com/go-jose/go-jose/v3/json/indent.go rename to vendor/github.com/go-jose/go-jose/v4/json/indent.go diff --git a/vendor/github.com/go-jose/go-jose/v3/json/scanner.go b/vendor/github.com/go-jose/go-jose/v4/json/scanner.go similarity index 100% rename from vendor/github.com/go-jose/go-jose/v3/json/scanner.go rename to vendor/github.com/go-jose/go-jose/v4/json/scanner.go diff --git a/vendor/github.com/go-jose/go-jose/v3/json/stream.go b/vendor/github.com/go-jose/go-jose/v4/json/stream.go similarity index 100% rename from vendor/github.com/go-jose/go-jose/v3/json/stream.go rename to vendor/github.com/go-jose/go-jose/v4/json/stream.go diff --git a/vendor/github.com/go-jose/go-jose/v3/json/tags.go b/vendor/github.com/go-jose/go-jose/v4/json/tags.go similarity index 100% rename from vendor/github.com/go-jose/go-jose/v3/json/tags.go rename to vendor/github.com/go-jose/go-jose/v4/json/tags.go diff --git a/vendor/github.com/go-jose/go-jose/v3/jwe.go b/vendor/github.com/go-jose/go-jose/v4/jwe.go similarity index 63% rename from vendor/github.com/go-jose/go-jose/v3/jwe.go rename to vendor/github.com/go-jose/go-jose/v4/jwe.go index 4267ac750..89f03ee3e 100644 --- a/vendor/github.com/go-jose/go-jose/v3/jwe.go +++ b/vendor/github.com/go-jose/go-jose/v4/jwe.go @@ -18,10 +18,11 @@ package jose import ( "encoding/base64" + "errors" "fmt" "strings" - "github.com/go-jose/go-jose/v3/json" + "github.com/go-jose/go-jose/v4/json" ) // rawJSONWebEncryption represents a raw JWE JSON object. Used for parsing/serializing. @@ -104,29 +105,75 @@ func (obj JSONWebEncryption) computeAuthData() []byte { return output } -// ParseEncrypted parses an encrypted message in compact or JWE JSON Serialization format. -func ParseEncrypted(input string) (*JSONWebEncryption, error) { +func containsKeyAlgorithm(haystack []KeyAlgorithm, needle KeyAlgorithm) bool { + for _, algorithm := range haystack { + if algorithm == needle { + return true + } + } + return false +} + +func containsContentEncryption(haystack []ContentEncryption, needle ContentEncryption) bool { + for _, algorithm := range haystack { + if algorithm == needle { + return true + } + } + return false +} + +// ParseEncrypted parses an encrypted message in JWE Compact or JWE JSON Serialization. +// +// https://datatracker.ietf.org/doc/html/rfc7516#section-3.1 +// https://datatracker.ietf.org/doc/html/rfc7516#section-3.2 +// +// The keyAlgorithms and contentEncryption parameters are used to validate the "alg" and "enc" +// header parameters respectively. They must be nonempty, and each "alg" or "enc" header in +// parsed data must contain a value that is present in the corresponding parameter. That +// includes the protected and unprotected headers as well as all recipients. To accept +// multiple algorithms, pass a slice of all the algorithms you want to accept. +func ParseEncrypted(input string, + keyEncryptionAlgorithms []KeyAlgorithm, + contentEncryption []ContentEncryption, +) (*JSONWebEncryption, error) { input = stripWhitespace(input) if strings.HasPrefix(input, "{") { - return parseEncryptedFull(input) + return ParseEncryptedJSON(input, keyEncryptionAlgorithms, contentEncryption) } - return parseEncryptedCompact(input) + return ParseEncryptedCompact(input, keyEncryptionAlgorithms, contentEncryption) } -// parseEncryptedFull parses a message in compact format. -func parseEncryptedFull(input string) (*JSONWebEncryption, error) { +// ParseEncryptedJSON parses a message in JWE JSON Serialization. +// +// https://datatracker.ietf.org/doc/html/rfc7516#section-3.2 +func ParseEncryptedJSON( + input string, + keyEncryptionAlgorithms []KeyAlgorithm, + contentEncryption []ContentEncryption, +) (*JSONWebEncryption, error) { var parsed rawJSONWebEncryption err := json.Unmarshal([]byte(input), &parsed) if err != nil { return nil, err } - return parsed.sanitized() + return parsed.sanitized(keyEncryptionAlgorithms, contentEncryption) } // sanitized produces a cleaned-up JWE object from the raw JSON. -func (parsed *rawJSONWebEncryption) sanitized() (*JSONWebEncryption, error) { +func (parsed *rawJSONWebEncryption) sanitized( + keyEncryptionAlgorithms []KeyAlgorithm, + contentEncryption []ContentEncryption, +) (*JSONWebEncryption, error) { + if len(keyEncryptionAlgorithms) == 0 { + return nil, errors.New("go-jose/go-jose: no key algorithms provided") + } + if len(contentEncryption) == 0 { + return nil, errors.New("go-jose/go-jose: no content encryption algorithms provided") + } + obj := &JSONWebEncryption{ original: parsed, unprotected: parsed.Unprotected, @@ -170,7 +217,7 @@ func (parsed *rawJSONWebEncryption) sanitized() (*JSONWebEncryption, error) { } else { obj.recipients = make([]recipientInfo, len(parsed.Recipients)) for r := range parsed.Recipients { - encryptedKey, err := base64URLDecode(parsed.Recipients[r].EncryptedKey) + encryptedKey, err := base64.RawURLEncoding.DecodeString(parsed.Recipients[r].EncryptedKey) if err != nil { return nil, err } @@ -185,10 +232,31 @@ func (parsed *rawJSONWebEncryption) sanitized() (*JSONWebEncryption, error) { } } - for _, recipient := range obj.recipients { + for i, recipient := range obj.recipients { headers := obj.mergedHeaders(&recipient) - if headers.getAlgorithm() == "" || headers.getEncryption() == "" { - return nil, fmt.Errorf("go-jose/go-jose: message is missing alg/enc headers") + if headers.getAlgorithm() == "" { + return nil, fmt.Errorf(`go-jose/go-jose: recipient %d: missing header "alg"`, i) + } + if headers.getEncryption() == "" { + return nil, fmt.Errorf(`go-jose/go-jose: recipient %d: missing header "enc"`, i) + } + err := validateAlgEnc(headers, keyEncryptionAlgorithms, contentEncryption) + if err != nil { + return nil, fmt.Errorf("go-jose/go-jose: recipient %d: %s", i, err) + } + + } + + if obj.protected != nil { + err := validateAlgEnc(*obj.protected, keyEncryptionAlgorithms, contentEncryption) + if err != nil { + return nil, fmt.Errorf("go-jose/go-jose: protected header: %s", err) + } + } + if obj.unprotected != nil { + err := validateAlgEnc(*obj.unprotected, keyEncryptionAlgorithms, contentEncryption) + if err != nil { + return nil, fmt.Errorf("go-jose/go-jose: unprotected header: %s", err) } } @@ -200,34 +268,52 @@ func (parsed *rawJSONWebEncryption) sanitized() (*JSONWebEncryption, error) { return obj, nil } -// parseEncryptedCompact parses a message in compact format. -func parseEncryptedCompact(input string) (*JSONWebEncryption, error) { +func validateAlgEnc(headers rawHeader, keyAlgorithms []KeyAlgorithm, contentEncryption []ContentEncryption) error { + alg := headers.getAlgorithm() + enc := headers.getEncryption() + if alg != "" && !containsKeyAlgorithm(keyAlgorithms, alg) { + return fmt.Errorf("unexpected key algorithm %q; expected %q", alg, keyAlgorithms) + } + if alg != "" && !containsContentEncryption(contentEncryption, enc) { + return fmt.Errorf("unexpected content encryption algorithm %q; expected %q", enc, contentEncryption) + } + return nil +} + +// ParseEncryptedCompact parses a message in JWE Compact Serialization. +// +// https://datatracker.ietf.org/doc/html/rfc7516#section-3.1 +func ParseEncryptedCompact( + input string, + keyAlgorithms []KeyAlgorithm, + contentEncryption []ContentEncryption, +) (*JSONWebEncryption, error) { parts := strings.Split(input, ".") if len(parts) != 5 { return nil, fmt.Errorf("go-jose/go-jose: compact JWE format must have five parts") } - rawProtected, err := base64URLDecode(parts[0]) + rawProtected, err := base64.RawURLEncoding.DecodeString(parts[0]) if err != nil { return nil, err } - encryptedKey, err := base64URLDecode(parts[1]) + encryptedKey, err := base64.RawURLEncoding.DecodeString(parts[1]) if err != nil { return nil, err } - iv, err := base64URLDecode(parts[2]) + iv, err := base64.RawURLEncoding.DecodeString(parts[2]) if err != nil { return nil, err } - ciphertext, err := base64URLDecode(parts[3]) + ciphertext, err := base64.RawURLEncoding.DecodeString(parts[3]) if err != nil { return nil, err } - tag, err := base64URLDecode(parts[4]) + tag, err := base64.RawURLEncoding.DecodeString(parts[4]) if err != nil { return nil, err } @@ -240,7 +326,7 @@ func parseEncryptedCompact(input string) (*JSONWebEncryption, error) { Tag: newBuffer(tag), } - return raw.sanitized() + return raw.sanitized(keyAlgorithms, contentEncryption) } // CompactSerialize serializes an object using the compact serialization format. diff --git a/vendor/github.com/go-jose/go-jose/v3/jwk.go b/vendor/github.com/go-jose/go-jose/v4/jwk.go similarity index 99% rename from vendor/github.com/go-jose/go-jose/v3/jwk.go rename to vendor/github.com/go-jose/go-jose/v4/jwk.go index e4021959a..a565aaab2 100644 --- a/vendor/github.com/go-jose/go-jose/v3/jwk.go +++ b/vendor/github.com/go-jose/go-jose/v4/jwk.go @@ -35,7 +35,7 @@ import ( "reflect" "strings" - "github.com/go-jose/go-jose/v3/json" + "github.com/go-jose/go-jose/v4/json" ) // rawJSONWebKey represents a public or private key in JWK format, used for parsing/serializing. @@ -266,7 +266,7 @@ func (k *JSONWebKey) UnmarshalJSON(data []byte) (err error) { // x5t parameters are base64url-encoded SHA thumbprints // See RFC 7517, Section 4.8, https://tools.ietf.org/html/rfc7517#section-4.8 - x5tSHA1bytes, err := base64URLDecode(raw.X5tSHA1) + x5tSHA1bytes, err := base64.RawURLEncoding.DecodeString(raw.X5tSHA1) if err != nil { return errors.New("go-jose/go-jose: invalid JWK, x5t header has invalid encoding") } @@ -286,7 +286,7 @@ func (k *JSONWebKey) UnmarshalJSON(data []byte) (err error) { k.CertificateThumbprintSHA1 = x5tSHA1bytes - x5tSHA256bytes, err := base64URLDecode(raw.X5tSHA256) + x5tSHA256bytes, err := base64.RawURLEncoding.DecodeString(raw.X5tSHA256) if err != nil { return errors.New("go-jose/go-jose: invalid JWK, x5t#S256 header has invalid encoding") } diff --git a/vendor/github.com/go-jose/go-jose/v3/jws.go b/vendor/github.com/go-jose/go-jose/v4/jws.go similarity index 80% rename from vendor/github.com/go-jose/go-jose/v3/jws.go rename to vendor/github.com/go-jose/go-jose/v4/jws.go index e37007dbb..3a912301a 100644 --- a/vendor/github.com/go-jose/go-jose/v3/jws.go +++ b/vendor/github.com/go-jose/go-jose/v4/jws.go @@ -23,7 +23,7 @@ import ( "fmt" "strings" - "github.com/go-jose/go-jose/v3/json" + "github.com/go-jose/go-jose/v4/json" ) // rawJSONWebSignature represents a raw JWS JSON object. Used for parsing/serializing. @@ -75,22 +75,41 @@ type Signature struct { original *rawSignatureInfo } -// ParseSigned parses a signed message in compact or JWS JSON Serialization format. -func ParseSigned(signature string) (*JSONWebSignature, error) { +// ParseSigned parses a signed message in JWS Compact or JWS JSON Serialization. +// +// https://datatracker.ietf.org/doc/html/rfc7515#section-7 +func ParseSigned( + signature string, + signatureAlgorithms []SignatureAlgorithm, +) (*JSONWebSignature, error) { signature = stripWhitespace(signature) if strings.HasPrefix(signature, "{") { - return parseSignedFull(signature) + return ParseSignedJSON(signature, signatureAlgorithms) } - return parseSignedCompact(signature, nil) + return parseSignedCompact(signature, nil, signatureAlgorithms) +} + +// ParseSignedCompact parses a message in JWS Compact Serialization. +// +// https://datatracker.ietf.org/doc/html/rfc7515#section-7.1 +func ParseSignedCompact( + signature string, + signatureAlgorithms []SignatureAlgorithm, +) (*JSONWebSignature, error) { + return parseSignedCompact(signature, nil, signatureAlgorithms) } // ParseDetached parses a signed message in compact serialization format with detached payload. -func ParseDetached(signature string, payload []byte) (*JSONWebSignature, error) { +func ParseDetached( + signature string, + payload []byte, + signatureAlgorithms []SignatureAlgorithm, +) (*JSONWebSignature, error) { if payload == nil { return nil, errors.New("go-jose/go-jose: nil payload") } - return parseSignedCompact(stripWhitespace(signature), payload) + return parseSignedCompact(stripWhitespace(signature), payload, signatureAlgorithms) } // Get a header value @@ -137,19 +156,36 @@ func (obj JSONWebSignature) computeAuthData(payload []byte, signature *Signature return authData.Bytes(), nil } -// parseSignedFull parses a message in full format. -func parseSignedFull(input string) (*JSONWebSignature, error) { +// ParseSignedJSON parses a message in JWS JSON Serialization. +// +// https://datatracker.ietf.org/doc/html/rfc7515#section-7.2 +func ParseSignedJSON( + input string, + signatureAlgorithms []SignatureAlgorithm, +) (*JSONWebSignature, error) { var parsed rawJSONWebSignature err := json.Unmarshal([]byte(input), &parsed) if err != nil { return nil, err } - return parsed.sanitized() + return parsed.sanitized(signatureAlgorithms) +} + +func containsSignatureAlgorithm(haystack []SignatureAlgorithm, needle SignatureAlgorithm) bool { + for _, algorithm := range haystack { + if algorithm == needle { + return true + } + } + return false } // sanitized produces a cleaned-up JWS object from the raw JSON. -func (parsed *rawJSONWebSignature) sanitized() (*JSONWebSignature, error) { +func (parsed *rawJSONWebSignature) sanitized(signatureAlgorithms []SignatureAlgorithm) (*JSONWebSignature, error) { + if len(signatureAlgorithms) == 0 { + return nil, errors.New("go-jose/go-jose: no signature algorithms specified") + } if parsed.Payload == nil { return nil, fmt.Errorf("go-jose/go-jose: missing payload in JWS message") } @@ -198,6 +234,12 @@ func (parsed *rawJSONWebSignature) sanitized() (*JSONWebSignature, error) { return nil, err } + alg := SignatureAlgorithm(signature.Header.Algorithm) + if !containsSignatureAlgorithm(signatureAlgorithms, alg) { + return nil, fmt.Errorf("go-jose/go-jose: unexpected signature algorithm %q; expected %q", + alg, signatureAlgorithms) + } + if signature.header != nil { signature.Unprotected, err = signature.header.sanitized() if err != nil { @@ -241,6 +283,12 @@ func (parsed *rawJSONWebSignature) sanitized() (*JSONWebSignature, error) { return nil, err } + alg := SignatureAlgorithm(obj.Signatures[i].Header.Algorithm) + if !containsSignatureAlgorithm(signatureAlgorithms, alg) { + return nil, fmt.Errorf("go-jose/go-jose: unexpected signature algorithm %q; expected %q", + alg, signatureAlgorithms) + } + if obj.Signatures[i].header != nil { obj.Signatures[i].Unprotected, err = obj.Signatures[i].header.sanitized() if err != nil { @@ -274,7 +322,11 @@ func (parsed *rawJSONWebSignature) sanitized() (*JSONWebSignature, error) { } // parseSignedCompact parses a message in compact format. -func parseSignedCompact(input string, payload []byte) (*JSONWebSignature, error) { +func parseSignedCompact( + input string, + payload []byte, + signatureAlgorithms []SignatureAlgorithm, +) (*JSONWebSignature, error) { parts := strings.Split(input, ".") if len(parts) != 3 { return nil, fmt.Errorf("go-jose/go-jose: compact JWS format must have three parts") @@ -284,19 +336,19 @@ func parseSignedCompact(input string, payload []byte) (*JSONWebSignature, error) return nil, fmt.Errorf("go-jose/go-jose: payload is not detached") } - rawProtected, err := base64URLDecode(parts[0]) + rawProtected, err := base64.RawURLEncoding.DecodeString(parts[0]) if err != nil { return nil, err } if payload == nil { - payload, err = base64URLDecode(parts[1]) + payload, err = base64.RawURLEncoding.DecodeString(parts[1]) if err != nil { return nil, err } } - signature, err := base64URLDecode(parts[2]) + signature, err := base64.RawURLEncoding.DecodeString(parts[2]) if err != nil { return nil, err } @@ -306,7 +358,7 @@ func parseSignedCompact(input string, payload []byte) (*JSONWebSignature, error) Protected: newBuffer(rawProtected), Signature: newBuffer(signature), } - return raw.sanitized() + return raw.sanitized(signatureAlgorithms) } func (obj JSONWebSignature) compactSerialize(detached bool) (string, error) { diff --git a/vendor/github.com/go-jose/go-jose/v3/jwt/builder.go b/vendor/github.com/go-jose/go-jose/v4/jwt/builder.go similarity index 83% rename from vendor/github.com/go-jose/go-jose/v3/jwt/builder.go rename to vendor/github.com/go-jose/go-jose/v4/jwt/builder.go index 7df270cc3..d68bb3725 100644 --- a/vendor/github.com/go-jose/go-jose/v3/jwt/builder.go +++ b/vendor/github.com/go-jose/go-jose/v4/jwt/builder.go @@ -21,13 +21,13 @@ import ( "bytes" "reflect" - "github.com/go-jose/go-jose/v3/json" + "github.com/go-jose/go-jose/v4/json" - "github.com/go-jose/go-jose/v3" + "github.com/go-jose/go-jose/v4" ) // Builder is a utility for making JSON Web Tokens. Calls can be chained, and -// errors are accumulated until the final call to CompactSerialize/FullSerialize. +// errors are accumulated until the final call to Serialize. type Builder interface { // Claims encodes claims into JWE/JWS form. Multiple calls will merge claims // into single JSON object. If you are passing private claims, make sure to set @@ -36,15 +36,13 @@ type Builder interface { Claims(i interface{}) Builder // Token builds a JSONWebToken from provided data. Token() (*JSONWebToken, error) - // FullSerialize serializes a token using the JWS/JWE JSON Serialization format. - FullSerialize() (string, error) - // CompactSerialize serializes a token using the compact serialization format. - CompactSerialize() (string, error) + // Serialize serializes a token. + Serialize() (string, error) } // NestedBuilder is a utility for making Signed-Then-Encrypted JSON Web Tokens. // Calls can be chained, and errors are accumulated until final call to -// CompactSerialize/FullSerialize. +// Serialize. type NestedBuilder interface { // Claims encodes claims into JWE/JWS form. Multiple calls will merge claims // into single JSON object. If you are passing private claims, make sure to set @@ -53,10 +51,8 @@ type NestedBuilder interface { Claims(i interface{}) NestedBuilder // Token builds a NestedJSONWebToken from provided data. Token() (*NestedJSONWebToken, error) - // FullSerialize serializes a token using the JSON Serialization format. - FullSerialize() (string, error) - // CompactSerialize serializes a token using the compact serialization format. - CompactSerialize() (string, error) + // Serialize serializes a token. + Serialize() (string, error) } type builder struct { @@ -194,7 +190,7 @@ func (b *signedBuilder) Token() (*JSONWebToken, error) { return b.builder.token(sig.Verify, h) } -func (b *signedBuilder) CompactSerialize() (string, error) { +func (b *signedBuilder) Serialize() (string, error) { sig, err := b.sign() if err != nil { return "", err @@ -203,15 +199,6 @@ func (b *signedBuilder) CompactSerialize() (string, error) { return sig.CompactSerialize() } -func (b *signedBuilder) FullSerialize() (string, error) { - sig, err := b.sign() - if err != nil { - return "", err - } - - return sig.FullSerialize(), nil -} - func (b *signedBuilder) sign() (*jose.JSONWebSignature, error) { if b.err != nil { return nil, b.err @@ -232,7 +219,7 @@ func (b *encryptedBuilder) Claims(i interface{}) Builder { } } -func (b *encryptedBuilder) CompactSerialize() (string, error) { +func (b *encryptedBuilder) Serialize() (string, error) { enc, err := b.encrypt() if err != nil { return "", err @@ -241,15 +228,6 @@ func (b *encryptedBuilder) CompactSerialize() (string, error) { return enc.CompactSerialize() } -func (b *encryptedBuilder) FullSerialize() (string, error) { - enc, err := b.encrypt() - if err != nil { - return "", err - } - - return enc.FullSerialize(), nil -} - func (b *encryptedBuilder) Token() (*JSONWebToken, error) { enc, err := b.encrypt() if err != nil { @@ -280,6 +258,8 @@ func (b *nestedBuilder) Claims(i interface{}) NestedBuilder { } } +// Token produced a token suitable for serialization. It cannot be decrypted +// without serializing and then deserializing. func (b *nestedBuilder) Token() (*NestedJSONWebToken, error) { enc, err := b.signAndEncrypt() if err != nil { @@ -287,12 +267,13 @@ func (b *nestedBuilder) Token() (*NestedJSONWebToken, error) { } return &NestedJSONWebToken{ - enc: enc, - Headers: []jose.Header{enc.Header}, + allowedSignatureAlgorithms: nil, + enc: enc, + Headers: []jose.Header{enc.Header}, }, nil } -func (b *nestedBuilder) CompactSerialize() (string, error) { +func (b *nestedBuilder) Serialize() (string, error) { enc, err := b.signAndEncrypt() if err != nil { return "", err diff --git a/vendor/github.com/go-jose/go-jose/v3/jwt/claims.go b/vendor/github.com/go-jose/go-jose/v4/jwt/claims.go similarity index 98% rename from vendor/github.com/go-jose/go-jose/v3/jwt/claims.go rename to vendor/github.com/go-jose/go-jose/v4/jwt/claims.go index b2a8dc8d4..e73412a39 100644 --- a/vendor/github.com/go-jose/go-jose/v3/jwt/claims.go +++ b/vendor/github.com/go-jose/go-jose/v4/jwt/claims.go @@ -21,7 +21,7 @@ import ( "strconv" "time" - "github.com/go-jose/go-jose/v3/json" + "github.com/go-jose/go-jose/v4/json" ) // Claims represents public claim values (as specified in RFC 7519). diff --git a/vendor/github.com/go-jose/go-jose/v3/jwt/doc.go b/vendor/github.com/go-jose/go-jose/v4/jwt/doc.go similarity index 100% rename from vendor/github.com/go-jose/go-jose/v3/jwt/doc.go rename to vendor/github.com/go-jose/go-jose/v4/jwt/doc.go diff --git a/vendor/github.com/go-jose/go-jose/v3/jwt/errors.go b/vendor/github.com/go-jose/go-jose/v4/jwt/errors.go similarity index 100% rename from vendor/github.com/go-jose/go-jose/v3/jwt/errors.go rename to vendor/github.com/go-jose/go-jose/v4/jwt/errors.go diff --git a/vendor/github.com/go-jose/go-jose/v4/jwt/jwt.go b/vendor/github.com/go-jose/go-jose/v4/jwt/jwt.go new file mode 100644 index 000000000..c4998d787 --- /dev/null +++ b/vendor/github.com/go-jose/go-jose/v4/jwt/jwt.go @@ -0,0 +1,198 @@ +/*- + * Copyright 2016 Zbigniew Mandziejewicz + * Copyright 2016 Square, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package jwt + +import ( + "fmt" + "strings" + + jose "github.com/go-jose/go-jose/v4" + "github.com/go-jose/go-jose/v4/json" +) + +// JSONWebToken represents a JSON Web Token (as specified in RFC7519). +type JSONWebToken struct { + payload func(k interface{}) ([]byte, error) + unverifiedPayload func() []byte + Headers []jose.Header +} + +type NestedJSONWebToken struct { + enc *jose.JSONWebEncryption + Headers []jose.Header + // Used when parsing and decrypting an input + allowedSignatureAlgorithms []jose.SignatureAlgorithm +} + +// Claims deserializes a JSONWebToken into dest using the provided key. +func (t *JSONWebToken) Claims(key interface{}, dest ...interface{}) error { + b, err := t.payload(key) + if err != nil { + return err + } + + for _, d := range dest { + if err := json.Unmarshal(b, d); err != nil { + return err + } + } + + return nil +} + +// UnsafeClaimsWithoutVerification deserializes the claims of a +// JSONWebToken into the dests. For signed JWTs, the claims are not +// verified. This function won't work for encrypted JWTs. +func (t *JSONWebToken) UnsafeClaimsWithoutVerification(dest ...interface{}) error { + if t.unverifiedPayload == nil { + return fmt.Errorf("go-jose/go-jose: Cannot get unverified claims") + } + claims := t.unverifiedPayload() + for _, d := range dest { + if err := json.Unmarshal(claims, d); err != nil { + return err + } + } + return nil +} + +func (t *NestedJSONWebToken) Decrypt(decryptionKey interface{}) (*JSONWebToken, error) { + b, err := t.enc.Decrypt(decryptionKey) + if err != nil { + return nil, err + } + + sig, err := ParseSigned(string(b), t.allowedSignatureAlgorithms) + if err != nil { + return nil, err + } + + return sig, nil +} + +// ParseSigned parses token from JWS form. +func ParseSigned(s string, signatureAlgorithms []jose.SignatureAlgorithm) (*JSONWebToken, error) { + sig, err := jose.ParseSignedCompact(s, signatureAlgorithms) + if err != nil { + return nil, err + } + headers := make([]jose.Header, len(sig.Signatures)) + for i, signature := range sig.Signatures { + headers[i] = signature.Header + } + + return &JSONWebToken{ + payload: sig.Verify, + unverifiedPayload: sig.UnsafePayloadWithoutVerification, + Headers: headers, + }, nil +} + +func validateKeyEncryptionAlgorithm(algs []jose.KeyAlgorithm) error { + for _, alg := range algs { + switch alg { + case jose.ED25519, + jose.RSA1_5, + jose.RSA_OAEP, + jose.RSA_OAEP_256, + jose.ECDH_ES, + jose.ECDH_ES_A128KW, + jose.ECDH_ES_A192KW, + jose.ECDH_ES_A256KW: + return fmt.Errorf("asymmetric encryption algorithms not supported for JWT: "+ + "invalid key encryption algorithm: %s", alg) + case jose.PBES2_HS256_A128KW, + jose.PBES2_HS384_A192KW, + jose.PBES2_HS512_A256KW: + return fmt.Errorf("password-based encryption not supported for JWT: "+ + "invalid key encryption algorithm: %s", alg) + } + } + return nil +} + +func parseEncryptedCompact( + s string, + keyAlgorithms []jose.KeyAlgorithm, + contentEncryption []jose.ContentEncryption, +) (*jose.JSONWebEncryption, error) { + err := validateKeyEncryptionAlgorithm(keyAlgorithms) + if err != nil { + return nil, err + } + enc, err := jose.ParseEncryptedCompact(s, keyAlgorithms, contentEncryption) + if err != nil { + return nil, err + } + return enc, nil +} + +// ParseEncrypted parses token from JWE form. +// +// The keyAlgorithms and contentEncryption parameters are used to validate the "alg" and "enc" +// header parameters respectively. They must be nonempty, and each "alg" or "enc" header in +// parsed data must contain a value that is present in the corresponding parameter. That +// includes the protected and unprotected headers as well as all recipients. To accept +// multiple algorithms, pass a slice of all the algorithms you want to accept. +func ParseEncrypted(s string, + keyAlgorithms []jose.KeyAlgorithm, + contentEncryption []jose.ContentEncryption, +) (*JSONWebToken, error) { + enc, err := parseEncryptedCompact(s, keyAlgorithms, contentEncryption) + if err != nil { + return nil, err + } + + return &JSONWebToken{ + payload: enc.Decrypt, + Headers: []jose.Header{enc.Header}, + }, nil +} + +// ParseSignedAndEncrypted parses signed-then-encrypted token from JWE form. +// +// The encryptionKeyAlgorithms and contentEncryption parameters are used to validate the "alg" and "enc" +// header parameters, respectively, of the outer JWE. They must be nonempty, and each "alg" or "enc" +// header in parsed data must contain a value that is present in the corresponding parameter. That +// includes the protected and unprotected headers as well as all recipients. To accept +// multiple algorithms, pass a slice of all the algorithms you want to accept. +// +// The signatureAlgorithms parameter is used to validate the "alg" header parameter of the +// inner JWS. It must be nonempty, and the "alg" header in the inner JWS must contain a value +// that is present in the parameter. +func ParseSignedAndEncrypted(s string, + encryptionKeyAlgorithms []jose.KeyAlgorithm, + contentEncryption []jose.ContentEncryption, + signatureAlgorithms []jose.SignatureAlgorithm, +) (*NestedJSONWebToken, error) { + enc, err := parseEncryptedCompact(s, encryptionKeyAlgorithms, contentEncryption) + if err != nil { + return nil, err + } + + contentType, _ := enc.Header.ExtraHeaders[jose.HeaderContentType].(string) + if strings.ToUpper(contentType) != "JWT" { + return nil, ErrInvalidContentType + } + + return &NestedJSONWebToken{ + allowedSignatureAlgorithms: signatureAlgorithms, + enc: enc, + Headers: []jose.Header{enc.Header}, + }, nil +} diff --git a/vendor/github.com/go-jose/go-jose/v3/jwt/validation.go b/vendor/github.com/go-jose/go-jose/v4/jwt/validation.go similarity index 91% rename from vendor/github.com/go-jose/go-jose/v3/jwt/validation.go rename to vendor/github.com/go-jose/go-jose/v4/jwt/validation.go index 09d8541f4..841a93eef 100644 --- a/vendor/github.com/go-jose/go-jose/v3/jwt/validation.go +++ b/vendor/github.com/go-jose/go-jose/v4/jwt/validation.go @@ -33,8 +33,9 @@ type Expected struct { Issuer string // Subject matches the "sub" claim exactly. Subject string - // Audience matches the values in "aud" claim, regardless of their order. - Audience Audience + // AnyAudience matches if there is a non-empty intersection between + // its values and the values in the "aud" claim. + AnyAudience Audience // ID matches the "jti" claim exactly. ID string // Time matches the "exp", "nbf" and "iat" claims with leeway. @@ -88,12 +89,18 @@ func (c Claims) ValidateWithLeeway(e Expected, leeway time.Duration) error { return ErrInvalidID } - if len(e.Audience) != 0 { - for _, v := range e.Audience { - if !c.Audience.Contains(v) { - return ErrInvalidAudience + if len(e.AnyAudience) != 0 { + var intersection bool + for _, v := range e.AnyAudience { + if c.Audience.Contains(v) { + intersection = true + break } } + + if !intersection { + return ErrInvalidAudience + } } // validate using the e.Time, or time.Now if not provided diff --git a/vendor/github.com/go-jose/go-jose/v3/opaque.go b/vendor/github.com/go-jose/go-jose/v4/opaque.go similarity index 100% rename from vendor/github.com/go-jose/go-jose/v3/opaque.go rename to vendor/github.com/go-jose/go-jose/v4/opaque.go diff --git a/vendor/github.com/go-jose/go-jose/v3/shared.go b/vendor/github.com/go-jose/go-jose/v4/shared.go similarity index 99% rename from vendor/github.com/go-jose/go-jose/v3/shared.go rename to vendor/github.com/go-jose/go-jose/v4/shared.go index 489a04e32..b485e43bd 100644 --- a/vendor/github.com/go-jose/go-jose/v3/shared.go +++ b/vendor/github.com/go-jose/go-jose/v4/shared.go @@ -23,7 +23,7 @@ import ( "errors" "fmt" - "github.com/go-jose/go-jose/v3/json" + "github.com/go-jose/go-jose/v4/json" ) // KeyAlgorithm represents a key management algorithm. diff --git a/vendor/github.com/go-jose/go-jose/v3/signing.go b/vendor/github.com/go-jose/go-jose/v4/signing.go similarity index 97% rename from vendor/github.com/go-jose/go-jose/v3/signing.go rename to vendor/github.com/go-jose/go-jose/v4/signing.go index 52f3d8560..f0b0294f3 100644 --- a/vendor/github.com/go-jose/go-jose/v3/signing.go +++ b/vendor/github.com/go-jose/go-jose/v4/signing.go @@ -25,7 +25,7 @@ import ( "errors" "fmt" - "github.com/go-jose/go-jose/v3/json" + "github.com/go-jose/go-jose/v4/json" ) // NonceSource represents a source of random nonces to go into JWS objects @@ -49,6 +49,11 @@ type Signer interface { // - JSONWebKey // - []byte (an HMAC key) // - Any type that satisfies the OpaqueSigner interface +// +// If the key is an HMAC key, it must have at least as many bytes as the relevant hash output: +// - HS256: 32 bytes +// - HS384: 48 bytes +// - HS512: 64 bytes type SigningKey struct { Algorithm SignatureAlgorithm Key interface{} @@ -355,6 +360,11 @@ func (ctx *genericSigner) Options() SignerOptions { // - JSONWebKey // - []byte (an HMAC key) // - Any type that implements the OpaqueVerifier interface. +// +// If the key is an HMAC key, it must have at least as many bytes as the relevant hash output: +// - HS256: 32 bytes +// - HS384: 48 bytes +// - HS512: 64 bytes func (obj JSONWebSignature) Verify(verificationKey interface{}) ([]byte, error) { err := obj.DetachedVerify(obj.payload, verificationKey) if err != nil { diff --git a/vendor/github.com/go-jose/go-jose/v3/symmetric.go b/vendor/github.com/go-jose/go-jose/v4/symmetric.go similarity index 96% rename from vendor/github.com/go-jose/go-jose/v3/symmetric.go rename to vendor/github.com/go-jose/go-jose/v4/symmetric.go index 10d8e19fd..a69103b08 100644 --- a/vendor/github.com/go-jose/go-jose/v3/symmetric.go +++ b/vendor/github.com/go-jose/go-jose/v4/symmetric.go @@ -32,7 +32,7 @@ import ( "golang.org/x/crypto/pbkdf2" - josecipher "github.com/go-jose/go-jose/v3/cipher" + josecipher "github.com/go-jose/go-jose/v4/cipher" ) // RandReader is a cryptographically secure random number generator (stubbed out in tests). @@ -454,7 +454,7 @@ func (ctx *symmetricKeyCipher) decryptKey(headers rawHeader, recipient *recipien func (ctx symmetricMac) signPayload(payload []byte, alg SignatureAlgorithm) (Signature, error) { mac, err := ctx.hmac(payload, alg) if err != nil { - return Signature{}, errors.New("go-jose/go-jose: failed to compute hmac") + return Signature{}, err } return Signature{ @@ -486,12 +486,24 @@ func (ctx symmetricMac) verifyPayload(payload []byte, mac []byte, alg SignatureA func (ctx symmetricMac) hmac(payload []byte, alg SignatureAlgorithm) ([]byte, error) { var hash func() hash.Hash + // https://datatracker.ietf.org/doc/html/rfc7518#section-3.2 + // A key of the same size as the hash output (for instance, 256 bits for + // "HS256") or larger MUST be used switch alg { case HS256: + if len(ctx.key)*8 < 256 { + return nil, ErrInvalidKeySize + } hash = sha256.New case HS384: + if len(ctx.key)*8 < 384 { + return nil, ErrInvalidKeySize + } hash = sha512.New384 case HS512: + if len(ctx.key)*8 < 512 { + return nil, ErrInvalidKeySize + } hash = sha512.New default: return nil, ErrUnsupportedAlgorithm diff --git a/vendor/github.com/go-openapi/swag/string_bytes.go b/vendor/github.com/go-openapi/swag/string_bytes.go index c52d6bf71..90745d5ca 100644 --- a/vendor/github.com/go-openapi/swag/string_bytes.go +++ b/vendor/github.com/go-openapi/swag/string_bytes.go @@ -2,21 +2,7 @@ package swag import "unsafe" -type internalString struct { - Data unsafe.Pointer - Len int -} - // hackStringBytes returns the (unsafe) underlying bytes slice of a string. -func hackStringBytes(str string) []byte { - p := (*internalString)(unsafe.Pointer(&str)).Data - return unsafe.Slice((*byte)(p), len(str)) -} - -/* - * go1.20 version (for when go mod moves to a go1.20 requirement): - func hackStringBytes(str string) []byte { return unsafe.Slice(unsafe.StringData(str), len(str)) } -*/ diff --git a/vendor/github.com/hashicorp/vault/api/lifetime_watcher.go b/vendor/github.com/hashicorp/vault/api/lifetime_watcher.go index 5c060e5a1..7070445cc 100644 --- a/vendor/github.com/hashicorp/vault/api/lifetime_watcher.go +++ b/vendor/github.com/hashicorp/vault/api/lifetime_watcher.go @@ -31,6 +31,7 @@ var ( DefaultRenewerRenewBuffer = 5 ) +//go:generate enumer -type=RenewBehavior -trimprefix=RenewBehavior type RenewBehavior uint const ( @@ -349,8 +350,11 @@ func (r *LifetimeWatcher) doRenewWithOptions(tokenMode bool, nonRenewable bool, if errorBackoff == nil { sleepDuration = r.calculateSleepDuration(remainingLeaseDuration, priorDuration) - } else if errorBackoff.NextBackOff() == backoff.Stop { - return err + } else { + sleepDuration = errorBackoff.NextBackOff() + if sleepDuration == backoff.Stop { + return err + } } // remainingLeaseDuration becomes the priorDuration for the next loop diff --git a/vendor/github.com/hashicorp/vault/api/plugin_helpers.go b/vendor/github.com/hashicorp/vault/api/plugin_helpers.go index 5d2593668..d330478f5 100644 --- a/vendor/github.com/hashicorp/vault/api/plugin_helpers.go +++ b/vendor/github.com/hashicorp/vault/api/plugin_helpers.go @@ -13,7 +13,8 @@ import ( "net/url" "os" - "github.com/go-jose/go-jose/v3/jwt" + jose "github.com/go-jose/go-jose/v4" + "github.com/go-jose/go-jose/v4/jwt" "github.com/hashicorp/errwrap" ) @@ -40,6 +41,11 @@ const ( // PluginUnwrapTokenEnv is the ENV name used to pass unwrap tokens to the // plugin. PluginUnwrapTokenEnv = "VAULT_UNWRAP_TOKEN" + + // CubbyHoleJWTSignatureAlgorithm is the signature algorithm used for + // the unwrap token that Vault passes to a plugin when auto-mTLS is + // not enabled. + CubbyHoleJWTSignatureAlgorithm = jose.ES512 ) // PluginAPIClientMeta is a helper that plugins can use to configure TLS connections @@ -102,7 +108,7 @@ func VaultPluginTLSProviderContext(ctx context.Context, apiTLSConfig *TLSConfig) return func() (*tls.Config, error) { unwrapToken := os.Getenv(PluginUnwrapTokenEnv) - parsedJWT, err := jwt.ParseSigned(unwrapToken) + parsedJWT, err := jwt.ParseSigned(unwrapToken, []jose.SignatureAlgorithm{CubbyHoleJWTSignatureAlgorithm}) if err != nil { return nil, errwrap.Wrapf("error parsing wrapping token: {{err}}", err) } diff --git a/vendor/github.com/hashicorp/vault/api/plugin_runtime_types.go b/vendor/github.com/hashicorp/vault/api/plugin_runtime_types.go index d3acd0d00..2514f1279 100644 --- a/vendor/github.com/hashicorp/vault/api/plugin_runtime_types.go +++ b/vendor/github.com/hashicorp/vault/api/plugin_runtime_types.go @@ -9,11 +9,9 @@ package api import "fmt" -var PluginRuntimeTypes = []PluginRuntimeType{ - PluginRuntimeTypeUnsupported, - PluginRuntimeTypeContainer, -} +var PluginRuntimeTypes = _PluginRuntimeTypeValues +//go:generate enumer -type=PluginRuntimeType -trimprefix=PluginRuntimeType -transform=snake type PluginRuntimeType uint32 // This is a list of PluginRuntimeTypes used by Vault. @@ -22,20 +20,11 @@ const ( PluginRuntimeTypeContainer ) -func (r PluginRuntimeType) String() string { - switch r { - case PluginRuntimeTypeContainer: - return "container" - default: - return "unsupported" - } -} - +// ParsePluginRuntimeType is a wrapper around PluginRuntimeTypeString kept for backwards compatibility. func ParsePluginRuntimeType(PluginRuntimeType string) (PluginRuntimeType, error) { - switch PluginRuntimeType { - case "container": - return PluginRuntimeTypeContainer, nil - default: + t, err := PluginRuntimeTypeString(PluginRuntimeType) + if err != nil { return PluginRuntimeTypeUnsupported, fmt.Errorf("%q is not a supported plugin runtime type", PluginRuntimeType) } + return t, nil } diff --git a/vendor/github.com/hashicorp/vault/api/pluginruntimetype_enumer.go b/vendor/github.com/hashicorp/vault/api/pluginruntimetype_enumer.go new file mode 100644 index 000000000..663f440ff --- /dev/null +++ b/vendor/github.com/hashicorp/vault/api/pluginruntimetype_enumer.go @@ -0,0 +1,49 @@ +// Code generated by "enumer -type=PluginRuntimeType -trimprefix=PluginRuntimeType -transform=snake"; DO NOT EDIT. + +package api + +import ( + "fmt" +) + +const _PluginRuntimeTypeName = "unsupportedcontainer" + +var _PluginRuntimeTypeIndex = [...]uint8{0, 11, 20} + +func (i PluginRuntimeType) String() string { + if i >= PluginRuntimeType(len(_PluginRuntimeTypeIndex)-1) { + return fmt.Sprintf("PluginRuntimeType(%d)", i) + } + return _PluginRuntimeTypeName[_PluginRuntimeTypeIndex[i]:_PluginRuntimeTypeIndex[i+1]] +} + +var _PluginRuntimeTypeValues = []PluginRuntimeType{0, 1} + +var _PluginRuntimeTypeNameToValueMap = map[string]PluginRuntimeType{ + _PluginRuntimeTypeName[0:11]: 0, + _PluginRuntimeTypeName[11:20]: 1, +} + +// PluginRuntimeTypeString retrieves an enum value from the enum constants string name. +// Throws an error if the param is not part of the enum. +func PluginRuntimeTypeString(s string) (PluginRuntimeType, error) { + if val, ok := _PluginRuntimeTypeNameToValueMap[s]; ok { + return val, nil + } + return 0, fmt.Errorf("%s does not belong to PluginRuntimeType values", s) +} + +// PluginRuntimeTypeValues returns all values of the enum +func PluginRuntimeTypeValues() []PluginRuntimeType { + return _PluginRuntimeTypeValues +} + +// IsAPluginRuntimeType returns "true" if the value is listed in the enum definition. "false" otherwise +func (i PluginRuntimeType) IsAPluginRuntimeType() bool { + for _, v := range _PluginRuntimeTypeValues { + if i == v { + return true + } + } + return false +} diff --git a/vendor/github.com/hashicorp/vault/api/renewbehavior_enumer.go b/vendor/github.com/hashicorp/vault/api/renewbehavior_enumer.go new file mode 100644 index 000000000..9b272e3e0 --- /dev/null +++ b/vendor/github.com/hashicorp/vault/api/renewbehavior_enumer.go @@ -0,0 +1,50 @@ +// Code generated by "enumer -type=RenewBehavior -trimprefix=RenewBehavior"; DO NOT EDIT. + +package api + +import ( + "fmt" +) + +const _RenewBehaviorName = "IgnoreErrorsRenewDisabledErrorOnErrors" + +var _RenewBehaviorIndex = [...]uint8{0, 12, 25, 38} + +func (i RenewBehavior) String() string { + if i >= RenewBehavior(len(_RenewBehaviorIndex)-1) { + return fmt.Sprintf("RenewBehavior(%d)", i) + } + return _RenewBehaviorName[_RenewBehaviorIndex[i]:_RenewBehaviorIndex[i+1]] +} + +var _RenewBehaviorValues = []RenewBehavior{0, 1, 2} + +var _RenewBehaviorNameToValueMap = map[string]RenewBehavior{ + _RenewBehaviorName[0:12]: 0, + _RenewBehaviorName[12:25]: 1, + _RenewBehaviorName[25:38]: 2, +} + +// RenewBehaviorString retrieves an enum value from the enum constants string name. +// Throws an error if the param is not part of the enum. +func RenewBehaviorString(s string) (RenewBehavior, error) { + if val, ok := _RenewBehaviorNameToValueMap[s]; ok { + return val, nil + } + return 0, fmt.Errorf("%s does not belong to RenewBehavior values", s) +} + +// RenewBehaviorValues returns all values of the enum +func RenewBehaviorValues() []RenewBehavior { + return _RenewBehaviorValues +} + +// IsARenewBehavior returns "true" if the value is listed in the enum definition. "false" otherwise +func (i RenewBehavior) IsARenewBehavior() bool { + for _, v := range _RenewBehaviorValues { + if i == v { + return true + } + } + return false +} diff --git a/vendor/github.com/hashicorp/vault/api/replication_status.go b/vendor/github.com/hashicorp/vault/api/replication_status.go index 9bc02d539..d7224ff11 100644 --- a/vendor/github.com/hashicorp/vault/api/replication_status.go +++ b/vendor/github.com/hashicorp/vault/api/replication_status.go @@ -19,13 +19,14 @@ const ( ) type ClusterInfo struct { - APIAddr string `json:"api_address,omitempty" mapstructure:"api_address"` - ClusterAddress string `json:"cluster_address,omitempty" mapstructure:"cluster_address"` - ConnectionStatus string `json:"connection_status,omitempty" mapstructure:"connection_status"` - LastHeartBeat string `json:"last_heartbeat,omitempty" mapstructure:"last_heartbeat"` - LastHeartBeatDurationMillis string `json:"last_heartbeat_duration_ms,omitempty" mapstructure:"last_heartbeat_duration_ms"` - ClockSkewMillis string `json:"clock_skew_ms,omitempty" mapstructure:"clock_skew_ms"` - NodeID string `json:"node_id,omitempty" mapstructure:"node_id"` + APIAddr string `json:"api_address,omitempty" mapstructure:"api_address"` + ClusterAddress string `json:"cluster_address,omitempty" mapstructure:"cluster_address"` + ConnectionStatus string `json:"connection_status,omitempty" mapstructure:"connection_status"` + LastHeartBeat string `json:"last_heartbeat,omitempty" mapstructure:"last_heartbeat"` + LastHeartBeatDurationMillis string `json:"last_heartbeat_duration_ms,omitempty" mapstructure:"last_heartbeat_duration_ms"` + ClockSkewMillis string `json:"clock_skew_ms,omitempty" mapstructure:"clock_skew_ms"` + NodeID string `json:"node_id,omitempty" mapstructure:"node_id"` + ReplicationPrimaryCanaryAgeMillis string `json:"replication_primary_canary_age_ms,omitempty" mapstructure:"replication_primary_canary_age_ms"` } type ReplicationStatusGenericResponse struct { diff --git a/vendor/github.com/hashicorp/vault/api/sys_hastatus.go b/vendor/github.com/hashicorp/vault/api/sys_hastatus.go index 58a73b89c..2e54651e1 100644 --- a/vendor/github.com/hashicorp/vault/api/sys_hastatus.go +++ b/vendor/github.com/hashicorp/vault/api/sys_hastatus.go @@ -35,14 +35,15 @@ type HAStatusResponse struct { } type HANode struct { - Hostname string `json:"hostname"` - APIAddress string `json:"api_address"` - ClusterAddress string `json:"cluster_address"` - ActiveNode bool `json:"active_node"` - LastEcho *time.Time `json:"last_echo"` - EchoDurationMillis int64 `json:"echo_duration_ms"` - ClockSkewMillis int64 `json:"clock_skew_ms"` - Version string `json:"version"` - UpgradeVersion string `json:"upgrade_version,omitempty"` - RedundancyZone string `json:"redundancy_zone,omitempty"` + Hostname string `json:"hostname"` + APIAddress string `json:"api_address"` + ClusterAddress string `json:"cluster_address"` + ActiveNode bool `json:"active_node"` + LastEcho *time.Time `json:"last_echo"` + EchoDurationMillis int64 `json:"echo_duration_ms"` + ClockSkewMillis int64 `json:"clock_skew_ms"` + Version string `json:"version"` + UpgradeVersion string `json:"upgrade_version,omitempty"` + RedundancyZone string `json:"redundancy_zone,omitempty"` + ReplicationPrimaryCanaryAgeMillis int64 `json:"replication_primary_canary_age_ms"` } diff --git a/vendor/github.com/hashicorp/vault/api/sys_health.go b/vendor/github.com/hashicorp/vault/api/sys_health.go index 0dc849885..6868b96d7 100644 --- a/vendor/github.com/hashicorp/vault/api/sys_health.go +++ b/vendor/github.com/hashicorp/vault/api/sys_health.go @@ -38,18 +38,19 @@ func (c *Sys) HealthWithContext(ctx context.Context) (*HealthResponse, error) { } type HealthResponse struct { - Initialized bool `json:"initialized"` - Sealed bool `json:"sealed"` - Standby bool `json:"standby"` - PerformanceStandby bool `json:"performance_standby"` - ReplicationPerformanceMode string `json:"replication_performance_mode"` - ReplicationDRMode string `json:"replication_dr_mode"` - ServerTimeUTC int64 `json:"server_time_utc"` - Version string `json:"version"` - ClusterName string `json:"cluster_name,omitempty"` - ClusterID string `json:"cluster_id,omitempty"` - LastWAL uint64 `json:"last_wal,omitempty"` - Enterprise bool `json:"enterprise"` - EchoDurationMillis int64 `json:"echo_duration_ms"` - ClockSkewMillis int64 `json:"clock_skew_ms"` + Initialized bool `json:"initialized"` + Sealed bool `json:"sealed"` + Standby bool `json:"standby"` + PerformanceStandby bool `json:"performance_standby"` + ReplicationPerformanceMode string `json:"replication_performance_mode"` + ReplicationDRMode string `json:"replication_dr_mode"` + ServerTimeUTC int64 `json:"server_time_utc"` + Version string `json:"version"` + ClusterName string `json:"cluster_name,omitempty"` + ClusterID string `json:"cluster_id,omitempty"` + LastWAL uint64 `json:"last_wal,omitempty"` + Enterprise bool `json:"enterprise"` + EchoDurationMillis int64 `json:"echo_duration_ms"` + ClockSkewMillis int64 `json:"clock_skew_ms"` + ReplicationPrimaryCanaryAgeMillis int64 `json:"replication_primary_canary_age_ms"` } diff --git a/vendor/github.com/hashicorp/vault/api/sys_raft.go b/vendor/github.com/hashicorp/vault/api/sys_raft.go index 4b9487c61..699f6e9fd 100644 --- a/vendor/github.com/hashicorp/vault/api/sys_raft.go +++ b/vendor/github.com/hashicorp/vault/api/sys_raft.go @@ -9,6 +9,7 @@ import ( "context" "encoding/json" "errors" + "fmt" "io" "io/ioutil" "net/http" @@ -100,6 +101,23 @@ type AutopilotState struct { OptimisticFailureTolerance int `mapstructure:"optimistic_failure_tolerance,omitempty"` } +func (a *AutopilotState) String() string { + var result string + result += fmt.Sprintf("Healthy: %t. FailureTolerance: %d. Leader: %s. OptimisticFailureTolerance: %d\n", a.Healthy, a.FailureTolerance, a.Leader, a.OptimisticFailureTolerance) + for _, s := range a.Servers { + result += fmt.Sprintf("Server: %s\n", s) + } + result += fmt.Sprintf("Voters: %v\n", a.Voters) + result += fmt.Sprintf("NonVoters: %v\n", a.NonVoters) + + for name, zone := range a.RedundancyZones { + result += fmt.Sprintf("RedundancyZone %s: %s\n", name, &zone) + } + + result += fmt.Sprintf("Upgrade: %s", a.Upgrade) + return result +} + // AutopilotServer represents the server blocks in the response of the raft // autopilot state API. type AutopilotServer struct { @@ -119,12 +137,21 @@ type AutopilotServer struct { NodeType string `mapstructure:"node_type,omitempty"` } +func (a *AutopilotServer) String() string { + return fmt.Sprintf("ID: %s. Name: %s. Address: %s. NodeStatus: %s. LastContact: %s. LastTerm: %d. LastIndex: %d. Healthy: %t. StableSince: %s. Status: %s. Version: %s. UpgradeVersion: %s. RedundancyZone: %s. NodeType: %s", + a.ID, a.Name, a.Address, a.NodeStatus, a.LastContact, a.LastTerm, a.LastIndex, a.Healthy, a.StableSince, a.Status, a.Version, a.UpgradeVersion, a.RedundancyZone, a.NodeType) +} + type AutopilotZone struct { Servers []string `mapstructure:"servers,omitempty"` Voters []string `mapstructure:"voters,omitempty"` FailureTolerance int `mapstructure:"failure_tolerance,omitempty"` } +func (a *AutopilotZone) String() string { + return fmt.Sprintf("Servers: %v. Voters: %v. FailureTolerance: %d", a.Servers, a.Voters, a.FailureTolerance) +} + type AutopilotUpgrade struct { Status string `mapstructure:"status"` TargetVersion string `mapstructure:"target_version,omitempty"` @@ -137,6 +164,17 @@ type AutopilotUpgrade struct { RedundancyZones map[string]AutopilotZoneUpgradeVersions `mapstructure:"redundancy_zones,omitempty"` } +func (a *AutopilotUpgrade) String() string { + result := fmt.Sprintf("Status: %s. TargetVersion: %s. TargetVersionVoters: %v. TargetVersionNonVoters: %v. TargetVersionReadReplicas: %v. OtherVersionVoters: %v. OtherVersionNonVoters: %v. OtherVersionReadReplicas: %v", + a.Status, a.TargetVersion, a.TargetVersionVoters, a.TargetVersionNonVoters, a.TargetVersionReadReplicas, a.OtherVersionVoters, a.OtherVersionNonVoters, a.OtherVersionReadReplicas) + + for name, zone := range a.RedundancyZones { + result += fmt.Sprintf("Redundancy Zone %s: %s", name, zone) + } + + return result +} + type AutopilotZoneUpgradeVersions struct { TargetVersionVoters []string `mapstructure:"target_version_voters,omitempty"` TargetVersionNonVoters []string `mapstructure:"target_version_non_voters,omitempty"` @@ -144,6 +182,11 @@ type AutopilotZoneUpgradeVersions struct { OtherVersionNonVoters []string `mapstructure:"other_version_non_voters,omitempty"` } +func (a *AutopilotZoneUpgradeVersions) String() string { + return fmt.Sprintf("TargetVersionVoters: %v. TargetVersionNonVoters: %v. OtherVersionVoters: %v. OtherVersionNonVoters: %v", + a.TargetVersionVoters, a.TargetVersionNonVoters, a.OtherVersionVoters, a.OtherVersionNonVoters) +} + // RaftJoin wraps RaftJoinWithContext using context.Background. func (c *Sys) RaftJoin(opts *RaftJoinRequest) (*RaftJoinResponse, error) { return c.RaftJoinWithContext(context.Background(), opts) diff --git a/vendor/github.com/k8snetworkplumbingwg/network-attachment-definition-client/pkg/apis/k8s.cni.cncf.io/v1/types.go b/vendor/github.com/k8snetworkplumbingwg/network-attachment-definition-client/pkg/apis/k8s.cni.cncf.io/v1/types.go index 7e202ed8d..f96016baf 100644 --- a/vendor/github.com/k8snetworkplumbingwg/network-attachment-definition-client/pkg/apis/k8s.cni.cncf.io/v1/types.go +++ b/vendor/github.com/k8snetworkplumbingwg/network-attachment-definition-client/pkg/apis/k8s.cni.cncf.io/v1/types.go @@ -107,6 +107,7 @@ type NetworkStatus struct { Interface string `json:"interface,omitempty"` IPs []string `json:"ips,omitempty"` Mac string `json:"mac,omitempty"` + Mtu int `json:"mtu,omitempty"` Default bool `json:"default,omitempty"` DNS DNS `json:"dns,omitempty"` DeviceInfo *DeviceInfo `json:"device-info,omitempty"` diff --git a/vendor/github.com/k8snetworkplumbingwg/network-attachment-definition-client/pkg/utils/net-attach-def.go b/vendor/github.com/k8snetworkplumbingwg/network-attachment-definition-client/pkg/utils/net-attach-def.go index 4bca1645f..e865f396b 100644 --- a/vendor/github.com/k8snetworkplumbingwg/network-attachment-definition-client/pkg/utils/net-attach-def.go +++ b/vendor/github.com/k8snetworkplumbingwg/network-attachment-definition-client/pkg/utils/net-attach-def.go @@ -139,6 +139,7 @@ func CreateNetworkStatus(r cnitypes.Result, networkName string, defaultNetwork b if ifs.Sandbox != "" { netStatus.Interface = ifs.Name netStatus.Mac = ifs.Mac + netStatus.Mtu = ifs.Mtu } } diff --git a/vendor/github.com/red-hat-storage/ocs-operator/api/v4/v1/storagecluster_types.go b/vendor/github.com/red-hat-storage/ocs-operator/api/v4/v1/storagecluster_types.go index bb5e473b8..828a3641b 100644 --- a/vendor/github.com/red-hat-storage/ocs-operator/api/v4/v1/storagecluster_types.go +++ b/vendor/github.com/red-hat-storage/ocs-operator/api/v4/v1/storagecluster_types.go @@ -18,6 +18,7 @@ package v1 import ( "os" + "time" nbv1 "github.com/noobaa/noobaa-operator/v5/pkg/apis/noobaa/v1alpha1" quotav1 "github.com/openshift/api/quota/v1" @@ -115,7 +116,7 @@ type StorageClusterSpec struct { // storageDeviceSets section of the CR. BackingStorageClasses []BackingStorageClass `json:"backingStorageClasses,omitempty"` // DefaultStorageProfile is the default storage profile to use for - // the storageclassrequest as StorageProfile is optional. + // the storagerequest as StorageProfile is optional. DefaultStorageProfile string `json:"defaultStorageProfile,omitempty"` } @@ -176,6 +177,27 @@ type ManageCephCluster struct { MgrCount int `json:"mgrCount,omitempty"` // +kubebuilder:validation:Enum=3;5 MonCount int `json:"monCount,omitempty"` + // WaitTimeoutForHealthyOSDInMinutes defines the time the operator would wait before an OSD can be stopped for upgrade or restart. + // If `continueUpgradeAfterChecksEvenIfNotHealthy` is `false` and the timeout exceeds and OSD is not ok to stop, then the operator + // would skip upgrade for the current OSD and proceed with the next one. + // If `continueUpgradeAfterChecksEvenIfNotHealthy` is `true`, then operator would continue with the upgrade of an OSD even if its + // not ok to stop after the timeout. + // This timeout won't be applied if `skipUpgradeChecks` is `true`. + // The default wait timeout is 10 minutes. + WaitTimeoutForHealthyOSDInMinutes time.Duration `json:"waitTimeoutForHealthyOSDInMinutes,omitempty"` + // Whether or not upgrade should continue even if a check fails + // This means Ceph's status could be degraded and we don't recommend upgrading but you might decide otherwise + // Use at your OWN risk + SkipUpgradeChecks bool `json:"skipUpgradeChecks,omitempty"` + // Whether or not continue if PGs are not clean during an upgrade + ContinueUpgradeAfterChecksEvenIfNotHealthy *bool `json:"continueUpgradeAfterChecksEvenIfNotHealthy,omitempty"` + // Whether or not requires PGs are clean before an OSD upgrade. If set to `true` OSD upgrade process won't start until PGs are healthy. + // This configuration will be ignored if `skipUpgradeChecks` is `true`. + UpgradeOSDRequiresHealthyPGs bool `json:"upgradeOSDRequiresHealthyPGs,omitempty"` + // A duration in minutes that determines how long an entire failureDomain like `region/zone/host` will be held in `noout` (in addition to the + // default DOWN/OUT interval) when it is draining. This is only relevant when `managePodBudgets` is `true` in cephCluster CR. + // The default value is `30` minutes. + OsdMaintenanceTimeout time.Duration `json:"osdMaintenanceTimeout,omitempty"` } // ManageCephConfig defines how to reconcile the Ceph configuration @@ -271,8 +293,7 @@ type ManageCephToolbox struct { type ManageCephRBDMirror struct { ReconcileStrategy string `json:"reconcileStrategy,omitempty"` // +kubebuilder:default=1 - // +kubebuilder:validation:Minimum=0 - // +kubebuilder:validation:Maximum=1 + // +kubebuilder:validation:Minimum=1 DaemonCount int `json:"daemonCount,omitempty"` } @@ -403,6 +424,10 @@ type MultiCloudGatewaySpec struct { // Allows Noobaa to connect to an external Postgres server // +optional ExternalPgConfig *ExternalPGSpec `json:"externalPgConfig,omitempty"` + + // DenyHTTP (optional) if given will deny access to the NooBaa S3 service using HTTP (only HTTPS) + // +optional + DenyHTTP bool `json:"denyHTTP,omitempty"` } type ExternalPGSpec struct { @@ -660,7 +685,7 @@ type OverprovisionControlSpec struct { Selector quotav1.ClusterResourceQuotaSelector `json:"selector,omitempty"` } -func (r *StorageCluster) NewToolsDeployment(tolerations []corev1.Toleration) *appsv1.Deployment { +func (r *StorageCluster) NewToolsDeployment(tolerations []corev1.Toleration, nodeAffinity *corev1.NodeAffinity) *appsv1.Deployment { var replicaOne int32 = 1 @@ -733,6 +758,9 @@ func (r *StorageCluster) NewToolsDeployment(tolerations []corev1.Toleration) *ap }, }, Tolerations: tolerations, + Affinity: &corev1.Affinity{ + NodeAffinity: nodeAffinity, + }, Volumes: []corev1.Volume{ {Name: "ceph-config", VolumeSource: corev1.VolumeSource{EmptyDir: &corev1.EmptyDirVolumeSource{}}}, {Name: "mon-endpoint-volume", VolumeSource: corev1.VolumeSource{ diff --git a/vendor/github.com/red-hat-storage/ocs-operator/api/v4/v1/zz_generated.deepcopy.go b/vendor/github.com/red-hat-storage/ocs-operator/api/v4/v1/zz_generated.deepcopy.go index 14a373a70..795a5ce2a 100644 --- a/vendor/github.com/red-hat-storage/ocs-operator/api/v4/v1/zz_generated.deepcopy.go +++ b/vendor/github.com/red-hat-storage/ocs-operator/api/v4/v1/zz_generated.deepcopy.go @@ -275,6 +275,11 @@ func (in *ManageCephBlockPools) DeepCopy() *ManageCephBlockPools { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ManageCephCluster) DeepCopyInto(out *ManageCephCluster) { *out = *in + if in.ContinueUpgradeAfterChecksEvenIfNotHealthy != nil { + in, out := &in.ContinueUpgradeAfterChecksEvenIfNotHealthy, &out.ContinueUpgradeAfterChecksEvenIfNotHealthy + *out = new(bool) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ManageCephCluster. @@ -430,7 +435,7 @@ func (in *ManageCephToolbox) DeepCopy() *ManageCephToolbox { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ManagedResourcesSpec) DeepCopyInto(out *ManagedResourcesSpec) { *out = *in - out.CephCluster = in.CephCluster + in.CephCluster.DeepCopyInto(&out.CephCluster) out.CephConfig = in.CephConfig out.CephDashboard = in.CephDashboard out.CephBlockPools = in.CephBlockPools diff --git a/vendor/github.com/rook/rook/pkg/apis/ceph.rook.io/v1/annotations.go b/vendor/github.com/rook/rook/pkg/apis/ceph.rook.io/v1/annotations.go index 10b8f407c..b2d77dc2d 100644 --- a/vendor/github.com/rook/rook/pkg/apis/ceph.rook.io/v1/annotations.go +++ b/vendor/github.com/rook/rook/pkg/apis/ceph.rook.io/v1/annotations.go @@ -37,6 +37,11 @@ func GetMgrAnnotations(a AnnotationsSpec) Annotations { return mergeAllAnnotationsWithKey(a, KeyMgr) } +// GetDashboardAnnotations returns the Annotations for the Dashboard service +func GetDashboardAnnotations(a AnnotationsSpec) Annotations { + return mergeAllAnnotationsWithKey(a, KeyDashboard) +} + // GetMonAnnotations returns the Annotations for the MON service func GetMonAnnotations(a AnnotationsSpec) Annotations { return mergeAllAnnotationsWithKey(a, KeyMon) diff --git a/vendor/github.com/rook/rook/pkg/apis/ceph.rook.io/v1/keys.go b/vendor/github.com/rook/rook/pkg/apis/ceph.rook.io/v1/keys.go index 72e18b30f..05395f1e3 100644 --- a/vendor/github.com/rook/rook/pkg/apis/ceph.rook.io/v1/keys.go +++ b/vendor/github.com/rook/rook/pkg/apis/ceph.rook.io/v1/keys.go @@ -23,6 +23,7 @@ const ( KeyMon KeyType = "mon" KeyMonArbiter KeyType = "arbiter" KeyMgr KeyType = "mgr" + KeyDashboard KeyType = "dashboard" KeyOSDPrepare KeyType = "prepareosd" KeyRotation KeyType = "keyrotation" KeyOSD KeyType = "osd" diff --git a/vendor/github.com/rook/rook/pkg/apis/ceph.rook.io/v1/labels.go b/vendor/github.com/rook/rook/pkg/apis/ceph.rook.io/v1/labels.go index 43a3018b2..ad4bb1466 100644 --- a/vendor/github.com/rook/rook/pkg/apis/ceph.rook.io/v1/labels.go +++ b/vendor/github.com/rook/rook/pkg/apis/ceph.rook.io/v1/labels.go @@ -43,6 +43,11 @@ func GetMgrLabels(a LabelsSpec) Labels { return mergeAllLabelsWithKey(a, KeyMgr) } +// GetDashboardLabels returns the Labels for the Dashboard service +func GetDashboardLabels(a LabelsSpec) Labels { + return mergeAllLabelsWithKey(a, KeyDashboard) +} + // GetMonLabels returns the Labels for the MON service func GetMonLabels(a LabelsSpec) Labels { return mergeAllLabelsWithKey(a, KeyMon) diff --git a/vendor/github.com/rook/rook/pkg/apis/ceph.rook.io/v1/resources.go b/vendor/github.com/rook/rook/pkg/apis/ceph.rook.io/v1/resources.go index 1f621333e..b87089fde 100644 --- a/vendor/github.com/rook/rook/pkg/apis/ceph.rook.io/v1/resources.go +++ b/vendor/github.com/rook/rook/pkg/apis/ceph.rook.io/v1/resources.go @@ -100,7 +100,7 @@ func GetCleanupResources(p ResourceSpec) v1.ResourceRequirements { return p[ResourcesKeyCleanup] } -// GetCleanupResources returns the placement for the cleanup job +// GetCephExporterResources returns the placement for the cleanup job func GetCephExporterResources(p ResourceSpec) v1.ResourceRequirements { return p[ResourcesKeyCephExporter] } diff --git a/vendor/github.com/rook/rook/pkg/apis/ceph.rook.io/v1/types.go b/vendor/github.com/rook/rook/pkg/apis/ceph.rook.io/v1/types.go index 6a954e41f..9189e915d 100644 --- a/vendor/github.com/rook/rook/pkg/apis/ceph.rook.io/v1/types.go +++ b/vendor/github.com/rook/rook/pkg/apis/ceph.rook.io/v1/types.go @@ -162,6 +162,12 @@ type ClusterSpec struct { // +optional WaitTimeoutForHealthyOSDInMinutes time.Duration `json:"waitTimeoutForHealthyOSDInMinutes,omitempty"` + // UpgradeOSDRequiresHealthyPGs defines if OSD upgrade requires PGs are clean. If set to `true` OSD upgrade process won't start until PGs are healthy. + // This configuration will be ignored if `skipUpgradeChecks` is `true`. + // Default is false. + // +optional + UpgradeOSDRequiresHealthyPGs bool `json:"upgradeOSDRequiresHealthyPGs,omitempty"` + // A spec for configuring disruption management. // +nullable // +optional @@ -467,8 +473,9 @@ type Capacity struct { // CephStorage represents flavors of Ceph Cluster Storage type CephStorage struct { - DeviceClasses []DeviceClasses `json:"deviceClasses,omitempty"` - OSD OSDStatus `json:"osd,omitempty"` + DeviceClasses []DeviceClasses `json:"deviceClasses,omitempty"` + OSD OSDStatus `json:"osd,omitempty"` + DeprecatedOSDs map[string][]int `json:"deprecatedOSDs,omitempty"` } // DeviceClasses represents device classes of a Ceph Cluster @@ -694,6 +701,12 @@ type CrashCollectorSpec struct { // CephBlockPool represents a Ceph Storage Pool // +kubebuilder:printcolumn:name="Phase",type=string,JSONPath=`.status.phase` +// +kubebuilder:printcolumn:name="Type",type=string,JSONPath=`.status.info.type` +// +kubebuilder:printcolumn:name="FailureDomain",type=string,JSONPath=`.status.info.failureDomain` +// +kubebuilder:printcolumn:name="Replication",type=integer,JSONPath=`.spec.replicated.size`,priority=1 +// +kubebuilder:printcolumn:name="EC-CodingChunks",type=integer,JSONPath=`.spec.erasureCoded.codingChunks`,priority=1 +// +kubebuilder:printcolumn:name="EC-DataChunks",type=integer,JSONPath=`.spec.erasureCoded.dataChunks`,priority=1 +// +kubebuilder:printcolumn:name="Age",type=date,JSONPath=`.metadata.creationTimestamp` // +kubebuilder:subresource:status type CephBlockPool struct { metav1.TypeMeta `json:",inline"` @@ -1401,6 +1414,9 @@ type PeerStatSpec struct { // CephObjectStore represents a Ceph Object Store Gateway // +kubebuilder:printcolumn:name="Phase",type=string,JSONPath=`.status.phase` +// +kubebuilder:printcolumn:name="Endpoint",type=string,JSONPath=`.status.info.endpoint` +// +kubebuilder:printcolumn:name="SecureEndpoint",type=string,JSONPath=`.status.info.secureEndpoint` +// +kubebuilder:printcolumn:name="Age",type=date,JSONPath=`.metadata.creationTimestamp` // +kubebuilder:subresource:status type CephObjectStore struct { metav1.TypeMeta `json:",inline"` @@ -1604,7 +1620,7 @@ type GatewaySpec struct { // Kubernetes's v1.EndpointAddress. // +structType=atomic type EndpointAddress struct { - // The IP of this endpoint. As a legacy behavior, this supports being given a DNS-adressable hostname as well. + // The IP of this endpoint. As a legacy behavior, this supports being given a DNS-addressable hostname as well. // +optional IP string `json:"ip" protobuf:"bytes,1,opt,name=ip"` @@ -1664,6 +1680,7 @@ type ObjectStoreHostingSpec struct { // CephObjectStoreUser represents a Ceph Object Store Gateway User // +kubebuilder:resource:shortName=rcou;objectuser // +kubebuilder:printcolumn:name="Phase",type=string,JSONPath=`.status.phase` +// +kubebuilder:printcolumn:name="Age",type=date,JSONPath=`.metadata.creationTimestamp` // +kubebuilder:subresource:status type CephObjectStoreUser struct { metav1.TypeMeta `json:",inline"` @@ -1841,6 +1858,7 @@ type PullSpec struct { // CephObjectZoneGroup represents a Ceph Object Store Gateway Zone Group // +kubebuilder:printcolumn:name="Phase",type=string,JSONPath=`.status.phase` +// +kubebuilder:printcolumn:name="Age",type=date,JSONPath=`.metadata.creationTimestamp` // +kubebuilder:subresource:status type CephObjectZoneGroup struct { metav1.TypeMeta `json:",inline"` @@ -1871,6 +1889,7 @@ type ObjectZoneGroupSpec struct { // CephObjectZone represents a Ceph Object Store Gateway Zone // +kubebuilder:printcolumn:name="Phase",type=string,JSONPath=`.status.phase` +// +kubebuilder:printcolumn:name="Age",type=date,JSONPath=`.metadata.creationTimestamp` // +kubebuilder:subresource:status type CephObjectZone struct { metav1.TypeMeta `json:",inline"` @@ -1933,6 +1952,7 @@ type ObjectZoneSpec struct { // CephBucketTopic represents a Ceph Object Topic for Bucket Notifications // +kubebuilder:printcolumn:name="Phase",type=string,JSONPath=`.status.phase` +// +kubebuilder:printcolumn:name="Age",type=date,JSONPath=`.metadata.creationTimestamp` // +kubebuilder:subresource:status type CephBucketTopic struct { metav1.TypeMeta `json:",inline"` @@ -2569,6 +2589,7 @@ type DisruptionManagementSpec struct { // CephClient represents a Ceph Client // +kubebuilder:printcolumn:name="Phase",type=string,JSONPath=`.status.phase` +// +kubebuilder:printcolumn:name="Age",type=date,JSONPath=`.metadata.creationTimestamp` // +kubebuilder:subresource:status type CephClient struct { metav1.TypeMeta `json:",inline"` @@ -2656,6 +2677,7 @@ type SanitizeDisksSpec struct { // CephRBDMirror represents a Ceph RBD Mirror // +kubebuilder:printcolumn:name="Phase",type=string,JSONPath=`.status.phase` +// +kubebuilder:printcolumn:name="Age",type=date,JSONPath=`.metadata.creationTimestamp` // +kubebuilder:subresource:status type CephRBDMirror struct { metav1.TypeMeta `json:",inline"` @@ -2727,6 +2749,7 @@ type MirroringPeerSpec struct { // CephFilesystemMirror is the Ceph Filesystem Mirror object definition // +kubebuilder:printcolumn:name="Phase",type=string,JSONPath=`.status.phase` +// +kubebuilder:printcolumn:name="Age",type=date,JSONPath=`.metadata.creationTimestamp` // +kubebuilder:subresource:status type CephFilesystemMirror struct { metav1.TypeMeta `json:",inline"` @@ -2915,6 +2938,7 @@ type PriorityClassNamesSpec map[KeyType]string // +nullable type StorageClassDeviceSet struct { // Name is a unique identifier for the set + // +kubebuilder:validation:MaxLength=40 Name string `json:"name"` // Count is the number of devices in this set // +kubebuilder:validation:Minimum=1 @@ -2961,6 +2985,10 @@ type StorageClassDeviceSet struct { // CephFilesystemSubVolumeGroup represents a Ceph Filesystem SubVolumeGroup // +kubebuilder:printcolumn:name="Phase",type=string,JSONPath=`.status.phase` +// +kubebuilder:printcolumn:name="Filesystem",type=string,JSONPath=`.spec.filesystemName`,description="Name of the CephFileSystem" +// +kubebuilder:printcolumn:name="Quota",type=string,JSONPath=`.spec.quota` +// +kubebuilder:printcolumn:name="Pinning",type=string,JSONPath=`.status.info.pinning`,priority=1 +// +kubebuilder:printcolumn:name="Age",type=date,JSONPath=`.metadata.creationTimestamp` // +kubebuilder:subresource:status type CephFilesystemSubVolumeGroup struct { metav1.TypeMeta `json:",inline"` @@ -2999,6 +3027,12 @@ type CephFilesystemSubVolumeGroupSpec struct { // only one out of (export, distributed, random) can be set at a time // +optional Pinning CephFilesystemSubVolumeGroupSpecPinning `json:"pinning,omitempty"` + // Quota size of the Ceph Filesystem subvolume group. + // +optional + Quota *resource.Quantity `json:"quota,omitempty"` + // The data pool name for the Ceph Filesystem subvolume group layout, if the default CephFS pool is not desired. + // +optional + DataPoolName string `json:"dataPoolName"` } // CephFilesystemSubVolumeGroupSpecPinning represents the pinning configuration of SubVolumeGroup @@ -3036,8 +3070,10 @@ type CephFilesystemSubVolumeGroupStatus struct { // +genclient // +genclient:noStatus // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object - // CephBlockPoolRadosNamespace represents a Ceph BlockPool Rados Namespace +// +kubebuilder:printcolumn:name="Phase",type=string,JSONPath=`.status.phase` +// +kubebuilder:printcolumn:name="BlockPool",type=string,JSONPath=`.spec.blockPoolName`,description="Name of the Ceph BlockPool" +// +kubebuilder:printcolumn:name="Age",type=date,JSONPath=`.metadata.creationTimestamp` // +kubebuilder:subresource:status type CephBlockPoolRadosNamespace struct { metav1.TypeMeta `json:",inline"` diff --git a/vendor/golang.org/x/net/http2/frame.go b/vendor/golang.org/x/net/http2/frame.go index e2b298d85..43557ab7e 100644 --- a/vendor/golang.org/x/net/http2/frame.go +++ b/vendor/golang.org/x/net/http2/frame.go @@ -1564,6 +1564,7 @@ func (fr *Framer) readMetaFrame(hf *HeadersFrame) (*MetaHeadersFrame, error) { if size > remainSize { hdec.SetEmitEnabled(false) mh.Truncated = true + remainSize = 0 return } remainSize -= size @@ -1576,6 +1577,36 @@ func (fr *Framer) readMetaFrame(hf *HeadersFrame) (*MetaHeadersFrame, error) { var hc headersOrContinuation = hf for { frag := hc.HeaderBlockFragment() + + // Avoid parsing large amounts of headers that we will then discard. + // If the sender exceeds the max header list size by too much, + // skip parsing the fragment and close the connection. + // + // "Too much" is either any CONTINUATION frame after we've already + // exceeded the max header list size (in which case remainSize is 0), + // or a frame whose encoded size is more than twice the remaining + // header list bytes we're willing to accept. + if int64(len(frag)) > int64(2*remainSize) { + if VerboseLogs { + log.Printf("http2: header list too large") + } + // It would be nice to send a RST_STREAM before sending the GOAWAY, + // but the structure of the server's frame writer makes this difficult. + return nil, ConnectionError(ErrCodeProtocol) + } + + // Also close the connection after any CONTINUATION frame following an + // invalid header, since we stop tracking the size of the headers after + // an invalid one. + if invalid != nil { + if VerboseLogs { + log.Printf("http2: invalid header: %v", invalid) + } + // It would be nice to send a RST_STREAM before sending the GOAWAY, + // but the structure of the server's frame writer makes this difficult. + return nil, ConnectionError(ErrCodeProtocol) + } + if _, err := hdec.Write(frag); err != nil { return nil, ConnectionError(ErrCodeCompression) } diff --git a/vendor/golang.org/x/net/http2/pipe.go b/vendor/golang.org/x/net/http2/pipe.go index 684d984fd..3b9f06b96 100644 --- a/vendor/golang.org/x/net/http2/pipe.go +++ b/vendor/golang.org/x/net/http2/pipe.go @@ -77,7 +77,10 @@ func (p *pipe) Read(d []byte) (n int, err error) { } } -var errClosedPipeWrite = errors.New("write on closed buffer") +var ( + errClosedPipeWrite = errors.New("write on closed buffer") + errUninitializedPipeWrite = errors.New("write on uninitialized buffer") +) // Write copies bytes from p into the buffer and wakes a reader. // It is an error to write more data than the buffer can hold. @@ -91,6 +94,12 @@ func (p *pipe) Write(d []byte) (n int, err error) { if p.err != nil || p.breakErr != nil { return 0, errClosedPipeWrite } + // pipe.setBuffer is never invoked, leaving the buffer uninitialized. + // We shouldn't try to write to an uninitialized pipe, + // but returning an error is better than panicking. + if p.b == nil { + return 0, errUninitializedPipeWrite + } return p.b.Write(d) } diff --git a/vendor/golang.org/x/net/http2/server.go b/vendor/golang.org/x/net/http2/server.go index ae94c6408..ce2e8b40e 100644 --- a/vendor/golang.org/x/net/http2/server.go +++ b/vendor/golang.org/x/net/http2/server.go @@ -124,6 +124,7 @@ type Server struct { // IdleTimeout specifies how long until idle clients should be // closed with a GOAWAY frame. PING frames are not considered // activity for the purposes of IdleTimeout. + // If zero or negative, there is no timeout. IdleTimeout time.Duration // MaxUploadBufferPerConnection is the size of the initial flow @@ -434,7 +435,7 @@ func (s *Server) ServeConn(c net.Conn, opts *ServeConnOpts) { // passes the connection off to us with the deadline already set. // Write deadlines are set per stream in serverConn.newStream. // Disarm the net.Conn write deadline here. - if sc.hs.WriteTimeout != 0 { + if sc.hs.WriteTimeout > 0 { sc.conn.SetWriteDeadline(time.Time{}) } @@ -924,7 +925,7 @@ func (sc *serverConn) serve() { sc.setConnState(http.StateActive) sc.setConnState(http.StateIdle) - if sc.srv.IdleTimeout != 0 { + if sc.srv.IdleTimeout > 0 { sc.idleTimer = time.AfterFunc(sc.srv.IdleTimeout, sc.onIdleTimer) defer sc.idleTimer.Stop() } @@ -1637,7 +1638,7 @@ func (sc *serverConn) closeStream(st *stream, err error) { delete(sc.streams, st.id) if len(sc.streams) == 0 { sc.setConnState(http.StateIdle) - if sc.srv.IdleTimeout != 0 { + if sc.srv.IdleTimeout > 0 { sc.idleTimer.Reset(sc.srv.IdleTimeout) } if h1ServerKeepAlivesDisabled(sc.hs) { @@ -2017,7 +2018,7 @@ func (sc *serverConn) processHeaders(f *MetaHeadersFrame) error { // similar to how the http1 server works. Here it's // technically more like the http1 Server's ReadHeaderTimeout // (in Go 1.8), though. That's a more sane option anyway. - if sc.hs.ReadTimeout != 0 { + if sc.hs.ReadTimeout > 0 { sc.conn.SetReadDeadline(time.Time{}) st.readDeadline = time.AfterFunc(sc.hs.ReadTimeout, st.onReadTimeout) } @@ -2038,7 +2039,7 @@ func (sc *serverConn) upgradeRequest(req *http.Request) { // Disable any read deadline set by the net/http package // prior to the upgrade. - if sc.hs.ReadTimeout != 0 { + if sc.hs.ReadTimeout > 0 { sc.conn.SetReadDeadline(time.Time{}) } @@ -2116,7 +2117,7 @@ func (sc *serverConn) newStream(id, pusherID uint32, state streamState) *stream st.flow.conn = &sc.flow // link to conn-level counter st.flow.add(sc.initialStreamSendWindowSize) st.inflow.init(sc.srv.initialStreamRecvWindowSize()) - if sc.hs.WriteTimeout != 0 { + if sc.hs.WriteTimeout > 0 { st.writeDeadline = time.AfterFunc(sc.hs.WriteTimeout, st.onWriteTimeout) } diff --git a/vendor/golang.org/x/net/http2/testsync.go b/vendor/golang.org/x/net/http2/testsync.go new file mode 100644 index 000000000..61075bd16 --- /dev/null +++ b/vendor/golang.org/x/net/http2/testsync.go @@ -0,0 +1,331 @@ +// Copyright 2024 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. +package http2 + +import ( + "context" + "sync" + "time" +) + +// testSyncHooks coordinates goroutines in tests. +// +// For example, a call to ClientConn.RoundTrip involves several goroutines, including: +// - the goroutine running RoundTrip; +// - the clientStream.doRequest goroutine, which writes the request; and +// - the clientStream.readLoop goroutine, which reads the response. +// +// Using testSyncHooks, a test can start a RoundTrip and identify when all these goroutines +// are blocked waiting for some condition such as reading the Request.Body or waiting for +// flow control to become available. +// +// The testSyncHooks also manage timers and synthetic time in tests. +// This permits us to, for example, start a request and cause it to time out waiting for +// response headers without resorting to time.Sleep calls. +type testSyncHooks struct { + // active/inactive act as a mutex and condition variable. + // + // - neither chan contains a value: testSyncHooks is locked. + // - active contains a value: unlocked, and at least one goroutine is not blocked + // - inactive contains a value: unlocked, and all goroutines are blocked + active chan struct{} + inactive chan struct{} + + // goroutine counts + total int // total goroutines + condwait map[*sync.Cond]int // blocked in sync.Cond.Wait + blocked []*testBlockedGoroutine // otherwise blocked + + // fake time + now time.Time + timers []*fakeTimer + + // Transport testing: Report various events. + newclientconn func(*ClientConn) + newstream func(*clientStream) +} + +// testBlockedGoroutine is a blocked goroutine. +type testBlockedGoroutine struct { + f func() bool // blocked until f returns true + ch chan struct{} // closed when unblocked +} + +func newTestSyncHooks() *testSyncHooks { + h := &testSyncHooks{ + active: make(chan struct{}, 1), + inactive: make(chan struct{}, 1), + condwait: map[*sync.Cond]int{}, + } + h.inactive <- struct{}{} + h.now = time.Date(2000, 1, 1, 0, 0, 0, 0, time.UTC) + return h +} + +// lock acquires the testSyncHooks mutex. +func (h *testSyncHooks) lock() { + select { + case <-h.active: + case <-h.inactive: + } +} + +// waitInactive waits for all goroutines to become inactive. +func (h *testSyncHooks) waitInactive() { + for { + <-h.inactive + if !h.unlock() { + break + } + } +} + +// unlock releases the testSyncHooks mutex. +// It reports whether any goroutines are active. +func (h *testSyncHooks) unlock() (active bool) { + // Look for a blocked goroutine which can be unblocked. + blocked := h.blocked[:0] + unblocked := false + for _, b := range h.blocked { + if !unblocked && b.f() { + unblocked = true + close(b.ch) + } else { + blocked = append(blocked, b) + } + } + h.blocked = blocked + + // Count goroutines blocked on condition variables. + condwait := 0 + for _, count := range h.condwait { + condwait += count + } + + if h.total > condwait+len(blocked) { + h.active <- struct{}{} + return true + } else { + h.inactive <- struct{}{} + return false + } +} + +// goRun starts a new goroutine. +func (h *testSyncHooks) goRun(f func()) { + h.lock() + h.total++ + h.unlock() + go func() { + defer func() { + h.lock() + h.total-- + h.unlock() + }() + f() + }() +} + +// blockUntil indicates that a goroutine is blocked waiting for some condition to become true. +// It waits until f returns true before proceeding. +// +// Example usage: +// +// h.blockUntil(func() bool { +// // Is the context done yet? +// select { +// case <-ctx.Done(): +// default: +// return false +// } +// return true +// }) +// // Wait for the context to become done. +// <-ctx.Done() +// +// The function f passed to blockUntil must be non-blocking and idempotent. +func (h *testSyncHooks) blockUntil(f func() bool) { + if f() { + return + } + ch := make(chan struct{}) + h.lock() + h.blocked = append(h.blocked, &testBlockedGoroutine{ + f: f, + ch: ch, + }) + h.unlock() + <-ch +} + +// broadcast is sync.Cond.Broadcast. +func (h *testSyncHooks) condBroadcast(cond *sync.Cond) { + h.lock() + delete(h.condwait, cond) + h.unlock() + cond.Broadcast() +} + +// broadcast is sync.Cond.Wait. +func (h *testSyncHooks) condWait(cond *sync.Cond) { + h.lock() + h.condwait[cond]++ + h.unlock() +} + +// newTimer creates a new fake timer. +func (h *testSyncHooks) newTimer(d time.Duration) timer { + h.lock() + defer h.unlock() + t := &fakeTimer{ + hooks: h, + when: h.now.Add(d), + c: make(chan time.Time), + } + h.timers = append(h.timers, t) + return t +} + +// afterFunc creates a new fake AfterFunc timer. +func (h *testSyncHooks) afterFunc(d time.Duration, f func()) timer { + h.lock() + defer h.unlock() + t := &fakeTimer{ + hooks: h, + when: h.now.Add(d), + f: f, + } + h.timers = append(h.timers, t) + return t +} + +func (h *testSyncHooks) contextWithTimeout(ctx context.Context, d time.Duration) (context.Context, context.CancelFunc) { + ctx, cancel := context.WithCancel(ctx) + t := h.afterFunc(d, cancel) + return ctx, func() { + t.Stop() + cancel() + } +} + +func (h *testSyncHooks) timeUntilEvent() time.Duration { + h.lock() + defer h.unlock() + var next time.Time + for _, t := range h.timers { + if next.IsZero() || t.when.Before(next) { + next = t.when + } + } + if d := next.Sub(h.now); d > 0 { + return d + } + return 0 +} + +// advance advances time and causes synthetic timers to fire. +func (h *testSyncHooks) advance(d time.Duration) { + h.lock() + defer h.unlock() + h.now = h.now.Add(d) + timers := h.timers[:0] + for _, t := range h.timers { + t := t // remove after go.mod depends on go1.22 + t.mu.Lock() + switch { + case t.when.After(h.now): + timers = append(timers, t) + case t.when.IsZero(): + // stopped timer + default: + t.when = time.Time{} + if t.c != nil { + close(t.c) + } + if t.f != nil { + h.total++ + go func() { + defer func() { + h.lock() + h.total-- + h.unlock() + }() + t.f() + }() + } + } + t.mu.Unlock() + } + h.timers = timers +} + +// A timer wraps a time.Timer, or a synthetic equivalent in tests. +// Unlike time.Timer, timer is single-use: The timer channel is closed when the timer expires. +type timer interface { + C() <-chan time.Time + Stop() bool + Reset(d time.Duration) bool +} + +// timeTimer implements timer using real time. +type timeTimer struct { + t *time.Timer + c chan time.Time +} + +// newTimeTimer creates a new timer using real time. +func newTimeTimer(d time.Duration) timer { + ch := make(chan time.Time) + t := time.AfterFunc(d, func() { + close(ch) + }) + return &timeTimer{t, ch} +} + +// newTimeAfterFunc creates an AfterFunc timer using real time. +func newTimeAfterFunc(d time.Duration, f func()) timer { + return &timeTimer{ + t: time.AfterFunc(d, f), + } +} + +func (t timeTimer) C() <-chan time.Time { return t.c } +func (t timeTimer) Stop() bool { return t.t.Stop() } +func (t timeTimer) Reset(d time.Duration) bool { return t.t.Reset(d) } + +// fakeTimer implements timer using fake time. +type fakeTimer struct { + hooks *testSyncHooks + + mu sync.Mutex + when time.Time // when the timer will fire + c chan time.Time // closed when the timer fires; mutually exclusive with f + f func() // called when the timer fires; mutually exclusive with c +} + +func (t *fakeTimer) C() <-chan time.Time { return t.c } + +func (t *fakeTimer) Stop() bool { + t.mu.Lock() + defer t.mu.Unlock() + stopped := t.when.IsZero() + t.when = time.Time{} + return stopped +} + +func (t *fakeTimer) Reset(d time.Duration) bool { + if t.c != nil || t.f == nil { + panic("fakeTimer only supports Reset on AfterFunc timers") + } + t.mu.Lock() + defer t.mu.Unlock() + t.hooks.lock() + defer t.hooks.unlock() + active := !t.when.IsZero() + t.when = t.hooks.now.Add(d) + if !active { + t.hooks.timers = append(t.hooks.timers, t) + } + return active +} diff --git a/vendor/golang.org/x/net/http2/transport.go b/vendor/golang.org/x/net/http2/transport.go index c2a5b44b3..ce375c8c7 100644 --- a/vendor/golang.org/x/net/http2/transport.go +++ b/vendor/golang.org/x/net/http2/transport.go @@ -147,6 +147,12 @@ type Transport struct { // waiting for their turn. StrictMaxConcurrentStreams bool + // IdleConnTimeout is the maximum amount of time an idle + // (keep-alive) connection will remain idle before closing + // itself. + // Zero means no limit. + IdleConnTimeout time.Duration + // ReadIdleTimeout is the timeout after which a health check using ping // frame will be carried out if no frame is received on the connection. // Note that a ping response will is considered a received frame, so if @@ -178,6 +184,8 @@ type Transport struct { connPoolOnce sync.Once connPoolOrDef ClientConnPool // non-nil version of ConnPool + + syncHooks *testSyncHooks } func (t *Transport) maxHeaderListSize() uint32 { @@ -302,7 +310,7 @@ type ClientConn struct { readerErr error // set before readerDone is closed idleTimeout time.Duration // or 0 for never - idleTimer *time.Timer + idleTimer timer mu sync.Mutex // guards following cond *sync.Cond // hold mu; broadcast on flow/closed changes @@ -344,6 +352,60 @@ type ClientConn struct { werr error // first write error that has occurred hbuf bytes.Buffer // HPACK encoder writes into this henc *hpack.Encoder + + syncHooks *testSyncHooks // can be nil +} + +// Hook points used for testing. +// Outside of tests, cc.syncHooks is nil and these all have minimal implementations. +// Inside tests, see the testSyncHooks function docs. + +// goRun starts a new goroutine. +func (cc *ClientConn) goRun(f func()) { + if cc.syncHooks != nil { + cc.syncHooks.goRun(f) + return + } + go f() +} + +// condBroadcast is cc.cond.Broadcast. +func (cc *ClientConn) condBroadcast() { + if cc.syncHooks != nil { + cc.syncHooks.condBroadcast(cc.cond) + } + cc.cond.Broadcast() +} + +// condWait is cc.cond.Wait. +func (cc *ClientConn) condWait() { + if cc.syncHooks != nil { + cc.syncHooks.condWait(cc.cond) + } + cc.cond.Wait() +} + +// newTimer creates a new time.Timer, or a synthetic timer in tests. +func (cc *ClientConn) newTimer(d time.Duration) timer { + if cc.syncHooks != nil { + return cc.syncHooks.newTimer(d) + } + return newTimeTimer(d) +} + +// afterFunc creates a new time.AfterFunc timer, or a synthetic timer in tests. +func (cc *ClientConn) afterFunc(d time.Duration, f func()) timer { + if cc.syncHooks != nil { + return cc.syncHooks.afterFunc(d, f) + } + return newTimeAfterFunc(d, f) +} + +func (cc *ClientConn) contextWithTimeout(ctx context.Context, d time.Duration) (context.Context, context.CancelFunc) { + if cc.syncHooks != nil { + return cc.syncHooks.contextWithTimeout(ctx, d) + } + return context.WithTimeout(ctx, d) } // clientStream is the state for a single HTTP/2 stream. One of these @@ -425,7 +487,7 @@ func (cs *clientStream) abortStreamLocked(err error) { // TODO(dneil): Clean up tests where cs.cc.cond is nil. if cs.cc.cond != nil { // Wake up writeRequestBody if it is waiting on flow control. - cs.cc.cond.Broadcast() + cs.cc.condBroadcast() } } @@ -435,7 +497,7 @@ func (cs *clientStream) abortRequestBodyWrite() { defer cc.mu.Unlock() if cs.reqBody != nil && cs.reqBodyClosed == nil { cs.closeReqBodyLocked() - cc.cond.Broadcast() + cc.condBroadcast() } } @@ -445,10 +507,10 @@ func (cs *clientStream) closeReqBodyLocked() { } cs.reqBodyClosed = make(chan struct{}) reqBodyClosed := cs.reqBodyClosed - go func() { + cs.cc.goRun(func() { cs.reqBody.Close() close(reqBodyClosed) - }() + }) } type stickyErrWriter struct { @@ -537,15 +599,6 @@ func authorityAddr(scheme string, authority string) (addr string) { return net.JoinHostPort(host, port) } -var retryBackoffHook func(time.Duration) *time.Timer - -func backoffNewTimer(d time.Duration) *time.Timer { - if retryBackoffHook != nil { - return retryBackoffHook(d) - } - return time.NewTimer(d) -} - // RoundTripOpt is like RoundTrip, but takes options. func (t *Transport) RoundTripOpt(req *http.Request, opt RoundTripOpt) (*http.Response, error) { if !(req.URL.Scheme == "https" || (req.URL.Scheme == "http" && t.AllowHTTP)) { @@ -573,13 +626,27 @@ func (t *Transport) RoundTripOpt(req *http.Request, opt RoundTripOpt) (*http.Res backoff := float64(uint(1) << (uint(retry) - 1)) backoff += backoff * (0.1 * mathrand.Float64()) d := time.Second * time.Duration(backoff) - timer := backoffNewTimer(d) + var tm timer + if t.syncHooks != nil { + tm = t.syncHooks.newTimer(d) + t.syncHooks.blockUntil(func() bool { + select { + case <-tm.C(): + case <-req.Context().Done(): + default: + return false + } + return true + }) + } else { + tm = newTimeTimer(d) + } select { - case <-timer.C: + case <-tm.C(): t.vlogf("RoundTrip retrying after failure: %v", roundTripErr) continue case <-req.Context().Done(): - timer.Stop() + tm.Stop() err = req.Context().Err() } } @@ -658,6 +725,9 @@ func canRetryError(err error) bool { } func (t *Transport) dialClientConn(ctx context.Context, addr string, singleUse bool) (*ClientConn, error) { + if t.syncHooks != nil { + return t.newClientConn(nil, singleUse, t.syncHooks) + } host, _, err := net.SplitHostPort(addr) if err != nil { return nil, err @@ -666,7 +736,7 @@ func (t *Transport) dialClientConn(ctx context.Context, addr string, singleUse b if err != nil { return nil, err } - return t.newClientConn(tconn, singleUse) + return t.newClientConn(tconn, singleUse, nil) } func (t *Transport) newTLSConfig(host string) *tls.Config { @@ -732,10 +802,10 @@ func (t *Transport) maxEncoderHeaderTableSize() uint32 { } func (t *Transport) NewClientConn(c net.Conn) (*ClientConn, error) { - return t.newClientConn(c, t.disableKeepAlives()) + return t.newClientConn(c, t.disableKeepAlives(), nil) } -func (t *Transport) newClientConn(c net.Conn, singleUse bool) (*ClientConn, error) { +func (t *Transport) newClientConn(c net.Conn, singleUse bool, hooks *testSyncHooks) (*ClientConn, error) { cc := &ClientConn{ t: t, tconn: c, @@ -750,10 +820,15 @@ func (t *Transport) newClientConn(c net.Conn, singleUse bool) (*ClientConn, erro wantSettingsAck: true, pings: make(map[[8]byte]chan struct{}), reqHeaderMu: make(chan struct{}, 1), + syncHooks: hooks, + } + if hooks != nil { + hooks.newclientconn(cc) + c = cc.tconn } if d := t.idleConnTimeout(); d != 0 { cc.idleTimeout = d - cc.idleTimer = time.AfterFunc(d, cc.onIdleTimeout) + cc.idleTimer = cc.afterFunc(d, cc.onIdleTimeout) } if VerboseLogs { t.vlogf("http2: Transport creating client conn %p to %v", cc, c.RemoteAddr()) @@ -818,7 +893,7 @@ func (t *Transport) newClientConn(c net.Conn, singleUse bool) (*ClientConn, erro return nil, cc.werr } - go cc.readLoop() + cc.goRun(cc.readLoop) return cc, nil } @@ -826,7 +901,7 @@ func (cc *ClientConn) healthCheck() { pingTimeout := cc.t.pingTimeout() // We don't need to periodically ping in the health check, because the readLoop of ClientConn will // trigger the healthCheck again if there is no frame received. - ctx, cancel := context.WithTimeout(context.Background(), pingTimeout) + ctx, cancel := cc.contextWithTimeout(context.Background(), pingTimeout) defer cancel() cc.vlogf("http2: Transport sending health check") err := cc.Ping(ctx) @@ -1056,7 +1131,7 @@ func (cc *ClientConn) Shutdown(ctx context.Context) error { // Wait for all in-flight streams to complete or connection to close done := make(chan struct{}) cancelled := false // guarded by cc.mu - go func() { + cc.goRun(func() { cc.mu.Lock() defer cc.mu.Unlock() for { @@ -1068,9 +1143,9 @@ func (cc *ClientConn) Shutdown(ctx context.Context) error { if cancelled { break } - cc.cond.Wait() + cc.condWait() } - }() + }) shutdownEnterWaitStateHook() select { case <-done: @@ -1080,7 +1155,7 @@ func (cc *ClientConn) Shutdown(ctx context.Context) error { cc.mu.Lock() // Free the goroutine above cancelled = true - cc.cond.Broadcast() + cc.condBroadcast() cc.mu.Unlock() return ctx.Err() } @@ -1118,7 +1193,7 @@ func (cc *ClientConn) closeForError(err error) { for _, cs := range cc.streams { cs.abortStreamLocked(err) } - cc.cond.Broadcast() + cc.condBroadcast() cc.mu.Unlock() cc.closeConn() } @@ -1215,6 +1290,10 @@ func (cc *ClientConn) decrStreamReservationsLocked() { } func (cc *ClientConn) RoundTrip(req *http.Request) (*http.Response, error) { + return cc.roundTrip(req, nil) +} + +func (cc *ClientConn) roundTrip(req *http.Request, streamf func(*clientStream)) (*http.Response, error) { ctx := req.Context() cs := &clientStream{ cc: cc, @@ -1229,9 +1308,23 @@ func (cc *ClientConn) RoundTrip(req *http.Request) (*http.Response, error) { respHeaderRecv: make(chan struct{}), donec: make(chan struct{}), } - go cs.doRequest(req) + cc.goRun(func() { + cs.doRequest(req) + }) waitDone := func() error { + if cc.syncHooks != nil { + cc.syncHooks.blockUntil(func() bool { + select { + case <-cs.donec: + case <-ctx.Done(): + case <-cs.reqCancel: + default: + return false + } + return true + }) + } select { case <-cs.donec: return nil @@ -1292,7 +1385,24 @@ func (cc *ClientConn) RoundTrip(req *http.Request) (*http.Response, error) { return err } + if streamf != nil { + streamf(cs) + } + for { + if cc.syncHooks != nil { + cc.syncHooks.blockUntil(func() bool { + select { + case <-cs.respHeaderRecv: + case <-cs.abort: + case <-ctx.Done(): + case <-cs.reqCancel: + default: + return false + } + return true + }) + } select { case <-cs.respHeaderRecv: return handleResponseHeaders() @@ -1348,6 +1458,21 @@ func (cs *clientStream) writeRequest(req *http.Request) (err error) { if cc.reqHeaderMu == nil { panic("RoundTrip on uninitialized ClientConn") // for tests } + var newStreamHook func(*clientStream) + if cc.syncHooks != nil { + newStreamHook = cc.syncHooks.newstream + cc.syncHooks.blockUntil(func() bool { + select { + case cc.reqHeaderMu <- struct{}{}: + <-cc.reqHeaderMu + case <-cs.reqCancel: + case <-ctx.Done(): + default: + return false + } + return true + }) + } select { case cc.reqHeaderMu <- struct{}{}: case <-cs.reqCancel: @@ -1372,6 +1497,10 @@ func (cs *clientStream) writeRequest(req *http.Request) (err error) { } cc.mu.Unlock() + if newStreamHook != nil { + newStreamHook(cs) + } + // TODO(bradfitz): this is a copy of the logic in net/http. Unify somewhere? if !cc.t.disableCompression() && req.Header.Get("Accept-Encoding") == "" && @@ -1452,15 +1581,30 @@ func (cs *clientStream) writeRequest(req *http.Request) (err error) { var respHeaderTimer <-chan time.Time var respHeaderRecv chan struct{} if d := cc.responseHeaderTimeout(); d != 0 { - timer := time.NewTimer(d) + timer := cc.newTimer(d) defer timer.Stop() - respHeaderTimer = timer.C + respHeaderTimer = timer.C() respHeaderRecv = cs.respHeaderRecv } // Wait until the peer half-closes its end of the stream, // or until the request is aborted (via context, error, or otherwise), // whichever comes first. for { + if cc.syncHooks != nil { + cc.syncHooks.blockUntil(func() bool { + select { + case <-cs.peerClosed: + case <-respHeaderTimer: + case <-respHeaderRecv: + case <-cs.abort: + case <-ctx.Done(): + case <-cs.reqCancel: + default: + return false + } + return true + }) + } select { case <-cs.peerClosed: return nil @@ -1609,7 +1753,7 @@ func (cc *ClientConn) awaitOpenSlotForStreamLocked(cs *clientStream) error { return nil } cc.pendingRequests++ - cc.cond.Wait() + cc.condWait() cc.pendingRequests-- select { case <-cs.abort: @@ -1871,8 +2015,24 @@ func (cs *clientStream) awaitFlowControl(maxBytes int) (taken int32, err error) cs.flow.take(take) return take, nil } - cc.cond.Wait() + cc.condWait() + } +} + +func validateHeaders(hdrs http.Header) string { + for k, vv := range hdrs { + if !httpguts.ValidHeaderFieldName(k) { + return fmt.Sprintf("name %q", k) + } + for _, v := range vv { + if !httpguts.ValidHeaderFieldValue(v) { + // Don't include the value in the error, + // because it may be sensitive. + return fmt.Sprintf("value for header %q", k) + } + } } + return "" } var errNilRequestURL = errors.New("http2: Request.URI is nil") @@ -1912,19 +2072,14 @@ func (cc *ClientConn) encodeHeaders(req *http.Request, addGzipHeader bool, trail } } - // Check for any invalid headers and return an error before we + // Check for any invalid headers+trailers and return an error before we // potentially pollute our hpack state. (We want to be able to // continue to reuse the hpack encoder for future requests) - for k, vv := range req.Header { - if !httpguts.ValidHeaderFieldName(k) { - return nil, fmt.Errorf("invalid HTTP header name %q", k) - } - for _, v := range vv { - if !httpguts.ValidHeaderFieldValue(v) { - // Don't include the value in the error, because it may be sensitive. - return nil, fmt.Errorf("invalid HTTP header value for header %q", k) - } - } + if err := validateHeaders(req.Header); err != "" { + return nil, fmt.Errorf("invalid HTTP header %s", err) + } + if err := validateHeaders(req.Trailer); err != "" { + return nil, fmt.Errorf("invalid HTTP trailer %s", err) } enumerateHeaders := func(f func(name, value string)) { @@ -2143,7 +2298,7 @@ func (cc *ClientConn) forgetStreamID(id uint32) { } // Wake up writeRequestBody via clientStream.awaitFlowControl and // wake up RoundTrip if there is a pending request. - cc.cond.Broadcast() + cc.condBroadcast() closeOnIdle := cc.singleUse || cc.doNotReuse || cc.t.disableKeepAlives() || cc.goAway != nil if closeOnIdle && cc.streamsReserved == 0 && len(cc.streams) == 0 { @@ -2231,7 +2386,7 @@ func (rl *clientConnReadLoop) cleanup() { cs.abortStreamLocked(err) } } - cc.cond.Broadcast() + cc.condBroadcast() cc.mu.Unlock() } @@ -2266,10 +2421,9 @@ func (rl *clientConnReadLoop) run() error { cc := rl.cc gotSettings := false readIdleTimeout := cc.t.ReadIdleTimeout - var t *time.Timer + var t timer if readIdleTimeout != 0 { - t = time.AfterFunc(readIdleTimeout, cc.healthCheck) - defer t.Stop() + t = cc.afterFunc(readIdleTimeout, cc.healthCheck) } for { f, err := cc.fr.ReadFrame() @@ -2684,7 +2838,7 @@ func (rl *clientConnReadLoop) processData(f *DataFrame) error { }) return nil } - if !cs.firstByte { + if !cs.pastHeaders { cc.logf("protocol error: received DATA before a HEADERS frame") rl.endStreamError(cs, StreamError{ StreamID: f.StreamID, @@ -2867,7 +3021,7 @@ func (rl *clientConnReadLoop) processSettingsNoWrite(f *SettingsFrame) error { for _, cs := range cc.streams { cs.flow.add(delta) } - cc.cond.Broadcast() + cc.condBroadcast() cc.initialWindowSize = s.Val case SettingHeaderTableSize: @@ -2922,7 +3076,7 @@ func (rl *clientConnReadLoop) processWindowUpdate(f *WindowUpdateFrame) error { return ConnectionError(ErrCodeFlowControl) } - cc.cond.Broadcast() + cc.condBroadcast() return nil } @@ -2964,24 +3118,38 @@ func (cc *ClientConn) Ping(ctx context.Context) error { } cc.mu.Unlock() } - errc := make(chan error, 1) - go func() { + var pingError error + errc := make(chan struct{}) + cc.goRun(func() { cc.wmu.Lock() defer cc.wmu.Unlock() - if err := cc.fr.WritePing(false, p); err != nil { - errc <- err + if pingError = cc.fr.WritePing(false, p); pingError != nil { + close(errc) return } - if err := cc.bw.Flush(); err != nil { - errc <- err + if pingError = cc.bw.Flush(); pingError != nil { + close(errc) return } - }() + }) + if cc.syncHooks != nil { + cc.syncHooks.blockUntil(func() bool { + select { + case <-c: + case <-errc: + case <-ctx.Done(): + case <-cc.readerDone: + default: + return false + } + return true + }) + } select { case <-c: return nil - case err := <-errc: - return err + case <-errc: + return pingError case <-ctx.Done(): return ctx.Err() case <-cc.readerDone: @@ -3150,9 +3318,17 @@ func (rt noDialH2RoundTripper) RoundTrip(req *http.Request) (*http.Response, err } func (t *Transport) idleConnTimeout() time.Duration { + // to keep things backwards compatible, we use non-zero values of + // IdleConnTimeout, followed by using the IdleConnTimeout on the underlying + // http1 transport, followed by 0 + if t.IdleConnTimeout != 0 { + return t.IdleConnTimeout + } + if t.t1 != nil { return t.t1.IdleConnTimeout } + return 0 } diff --git a/vendor/modules.txt b/vendor/modules.txt index 800625764..bba815b0f 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -1,6 +1,9 @@ # github.com/IBM/ibm-storage-odf-operator v1.4.1 ## explicit; go 1.18 github.com/IBM/ibm-storage-odf-operator/api/v1alpha1 +# github.com/Masterminds/semver/v3 v3.2.1 +## explicit; go 1.18 +github.com/Masterminds/semver/v3 # github.com/beorn7/perks v1.0.1 ## explicit; go 1.11 github.com/beorn7/perks/quantile @@ -13,8 +16,8 @@ github.com/cenkalti/backoff/v3 # github.com/cespare/xxhash/v2 v2.2.0 ## explicit; go 1.11 github.com/cespare/xxhash/v2 -# github.com/containernetworking/cni v1.1.2 -## explicit; go 1.14 +# github.com/containernetworking/cni v1.2.0-rc1 +## explicit; go 1.18 github.com/containernetworking/cni/libcni github.com/containernetworking/cni/pkg/invoke github.com/containernetworking/cni/pkg/types @@ -28,7 +31,7 @@ github.com/containernetworking/cni/pkg/version # github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc ## explicit github.com/davecgh/go-spew/spew -# github.com/emicklei/go-restful/v3 v3.11.3 +# github.com/emicklei/go-restful/v3 v3.12.0 ## explicit; go 1.13 github.com/emicklei/go-restful/v3 github.com/emicklei/go-restful/v3/log @@ -45,12 +48,12 @@ github.com/fsnotify/fsnotify # github.com/ghodss/yaml v1.0.1-0.20220118164431-d8423dcdf344 ## explicit github.com/ghodss/yaml -# github.com/go-jose/go-jose/v3 v3.0.3 -## explicit; go 1.12 -github.com/go-jose/go-jose/v3 -github.com/go-jose/go-jose/v3/cipher -github.com/go-jose/go-jose/v3/json -github.com/go-jose/go-jose/v3/jwt +# github.com/go-jose/go-jose/v4 v4.0.1 +## explicit; go 1.21 +github.com/go-jose/go-jose/v4 +github.com/go-jose/go-jose/v4/cipher +github.com/go-jose/go-jose/v4/json +github.com/go-jose/go-jose/v4/jwt # github.com/go-logr/logr v1.4.1 ## explicit; go 1.18 github.com/go-logr/logr @@ -59,15 +62,15 @@ github.com/go-logr/logr/slogr # github.com/go-logr/zapr v1.3.0 ## explicit; go 1.18 github.com/go-logr/zapr -# github.com/go-openapi/jsonpointer v0.20.3 -## explicit; go 1.19 +# github.com/go-openapi/jsonpointer v0.21.0 +## explicit; go 1.20 github.com/go-openapi/jsonpointer -# github.com/go-openapi/jsonreference v0.20.5 -## explicit; go 1.19 +# github.com/go-openapi/jsonreference v0.21.0 +## explicit; go 1.20 github.com/go-openapi/jsonreference github.com/go-openapi/jsonreference/internal -# github.com/go-openapi/swag v0.22.10 -## explicit; go 1.19 +# github.com/go-openapi/swag v0.23.0 +## explicit; go 1.20 github.com/go-openapi/swag # github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 ## explicit; go 1.13 @@ -145,8 +148,8 @@ github.com/hashicorp/hcl/hcl/token github.com/hashicorp/hcl/json/parser github.com/hashicorp/hcl/json/scanner github.com/hashicorp/hcl/json/token -# github.com/hashicorp/vault/api v1.12.2 -## explicit; go 1.19 +# github.com/hashicorp/vault/api v1.13.0 +## explicit; go 1.21 github.com/hashicorp/vault/api # github.com/hashicorp/vault/api/auth/approle v0.6.0 ## explicit; go 1.16 @@ -163,7 +166,7 @@ github.com/josharian/intern # github.com/json-iterator/go v1.1.12 ## explicit; go 1.12 github.com/json-iterator/go -# github.com/k8snetworkplumbingwg/network-attachment-definition-client v1.6.0 +# github.com/k8snetworkplumbingwg/network-attachment-definition-client v1.7.0 ## explicit; go 1.21 github.com/k8snetworkplumbingwg/network-attachment-definition-client/pkg/apis/k8s.cni.cncf.io github.com/k8snetworkplumbingwg/network-attachment-definition-client/pkg/apis/k8s.cni.cncf.io/v1 @@ -284,10 +287,10 @@ github.com/prometheus/common/model github.com/prometheus/procfs github.com/prometheus/procfs/internal/fs github.com/prometheus/procfs/internal/util -# github.com/red-hat-storage/ocs-operator/api/v4 v4.0.0-20240328064129-39415c481f57 +# github.com/red-hat-storage/ocs-operator/api/v4 v4.0.0-20240605150046-b18b234e14f6 ## explicit; go 1.21 github.com/red-hat-storage/ocs-operator/api/v4/v1 -# github.com/rook/rook/pkg/apis v0.0.0-20240327231646-b6b89a012a95 +# github.com/rook/rook/pkg/apis v0.0.0-20240513003450-39f88521f0fd ## explicit; go 1.21 github.com/rook/rook/pkg/apis/ceph.rook.io github.com/rook/rook/pkg/apis/ceph.rook.io/v1 @@ -323,7 +326,7 @@ golang.org/x/crypto/pbkdf2 # golang.org/x/exp v0.0.0-20231127185646-65229373498e ## explicit; go 1.20 golang.org/x/exp/maps -# golang.org/x/net v0.22.0 +# golang.org/x/net v0.23.0 ## explicit; go 1.18 golang.org/x/net/context golang.org/x/net/html @@ -705,7 +708,7 @@ k8s.io/klog/v2/internal/dbg k8s.io/klog/v2/internal/serialize k8s.io/klog/v2/internal/severity k8s.io/klog/v2/internal/sloghandler -# k8s.io/kube-openapi v0.0.0-20240228011516-70dd3763d340 +# k8s.io/kube-openapi v0.0.0-20240322212309-b815d8309940 ## explicit; go 1.20 k8s.io/kube-openapi/pkg/cached k8s.io/kube-openapi/pkg/common @@ -716,7 +719,7 @@ k8s.io/kube-openapi/pkg/schemaconv k8s.io/kube-openapi/pkg/spec3 k8s.io/kube-openapi/pkg/util/proto k8s.io/kube-openapi/pkg/validation/spec -# k8s.io/utils v0.0.0-20240102154912-e7106e64919e +# k8s.io/utils v0.0.0-20240310230437-4693a0247e57 ## explicit; go 1.18 k8s.io/utils/buffer k8s.io/utils/clock