UNPKG

projen

Version:

CDK for software projects

97 lines 13.3 kB
"use strict"; var _a; Object.defineProperty(exports, "__esModule", { value: true }); exports.GithubCredentials = void 0; const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti"); const Case = require("case"); /** * Represents a method of providing GitHub API access for projen workflows. */ class GithubCredentials { /** * Provide API access through a GitHub personal access token. * * The token must be added as a secret to the GitHub repo, and the name of the * secret can be specified here. * * @see https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token * @default - a secret named "PROJEN_GITHUB_TOKEN" */ static fromPersonalAccessToken(options = {}) { return new GithubCredentials({ setupSteps: [], tokenRef: `\${{ secrets.${options.secret ?? "PROJEN_GITHUB_TOKEN"} }}`, environment: options.environment, }); } /** * Provide API access through a GitHub App. * * The GitHub App must be installed on the GitHub repo, its App ID and a * private key must be added as secrets to the repo. The name of the secrets * can be specified here. * * @see https://docs.github.com/en/developers/apps/building-github-apps/creating-a-github-app * @see https://projen.io/docs/integrations/github/#github-app * @default - app id stored in "PROJEN_APP_ID" and private key stored in "PROJEN_APP_PRIVATE_KEY" with all permissions attached to the app */ static fromApp(options = {}) { const appIdSecret = options.appIdSecret ?? "PROJEN_APP_ID"; const privateKeySecret = options.privateKeySecret ?? "PROJEN_APP_PRIVATE_KEY"; const actionConfig = { "app-id": `\${{ secrets.${appIdSecret} }}`, "private-key": `\${{ secrets.${privateKeySecret} }}`, }; if (options.owner) { actionConfig.owner = options.owner; } if (options.repositories) { actionConfig.repositories = options.repositories.join(","); } const permissions = Object.entries(options.permissions ?? {}).reduce((map, [name, val]) => { map[`permission-${Case.kebab(name)}`] = val; return map; }, {}); return new GithubCredentials({ setupSteps: [ { name: "Generate token", id: "generate_token", uses: "actions/create-github-app-token@f8d387b68d61c58ab83c6c016672934102569859", with: { ...actionConfig, ...permissions, }, }, ], tokenRef: "${{ steps.generate_token.outputs.token }}", environment: options.environment, }); } constructor(options) { this.options = options; } /** * Setup steps to obtain GitHub credentials. */ get setupSteps() { return [...this.options.setupSteps]; } /** * The value to use in a workflow when a GitHub token is expected. This * typically looks like "${{ some.path.to.a.value }}". */ get tokenRef() { return this.options.tokenRef; } /** * The GitHub Actions environment the credentials have been added to. */ get environment() { return this.options.environment; } } exports.GithubCredentials = GithubCredentials; _a = JSII_RTTI_SYMBOL_1; GithubCredentials[_a] = { fqn: "projen.github.GithubCredentials", version: "0.99.51" }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2l0aHViLWNyZWRlbnRpYWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2dpdGh1Yi9naXRodWItY3JlZGVudGlhbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw2QkFBNkI7QUE0RTdCOztHQUVHO0FBQ0gsTUFBYSxpQkFBaUI7SUFDNUI7Ozs7Ozs7O09BUUc7SUFDSSxNQUFNLENBQUMsdUJBQXVCLENBQ25DLFVBQXVELEVBQUU7UUFFekQsT0FBTyxJQUFJLGlCQUFpQixDQUFDO1lBQzNCLFVBQVUsRUFBRSxFQUFFO1lBQ2QsUUFBUSxFQUFFLGdCQUFnQixPQUFPLENBQUMsTUFBTSxJQUFJLHFCQUFxQixLQUFLO1lBQ3RFLFdBQVcsRUFBRSxPQUFPLENBQUMsV0FBVztTQUNqQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7T0FVRztJQUNJLE1BQU0sQ0FBQyxPQUFPLENBQUMsVUFBdUMsRUFBRTtRQUM3RCxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsV0FBVyxJQUFJLGVBQWUsQ0FBQztRQUMzRCxNQUFNLGdCQUFnQixHQUNwQixPQUFPLENBQUMsZ0JBQWdCLElBQUksd0JBQXdCLENBQUM7UUFFdkQsTUFBTSxZQUFZLEdBQTJCO1lBQzNDLFFBQVEsRUFBRSxnQkFBZ0IsV0FBVyxLQUFLO1lBQzFDLGFBQWEsRUFBRSxnQkFBZ0IsZ0JBQWdCLEtBQUs7U0FDckQsQ0FBQztRQUVGLElBQUksT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2xCLFlBQVksQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQztRQUNyQyxDQUFDO1FBQ0QsSUFBSSxPQUFPLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDekIsWUFBWSxDQUFDLFlBQVksR0FBRyxPQUFPLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM3RCxDQUFDO1FBRUQsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsV0FBVyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FFbEUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRTtZQUNyQixHQUFHLENBQUMsY0FBYyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7WUFDNUMsT0FBTyxHQUFHLENBQUM7UUFDYixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFUCxPQUFPLElBQUksaUJBQWlCLENBQUM7WUFDM0IsVUFBVSxFQUFFO2dCQUNWO29CQUNFLElBQUksRUFBRSxnQkFBZ0I7b0JBQ3RCLEVBQUUsRUFBRSxnQkFBZ0I7b0JBQ3BCLElBQUksRUFBRSwwRUFBMEU7b0JBQ2hGLElBQUksRUFBRTt3QkFDSixHQUFHLFlBQVk7d0JBQ2YsR0FBRyxXQUFXO3FCQUNmO2lCQUNGO2FBQ0Y7WUFDRCxRQUFRLEVBQUUsMkNBQTJDO1lBQ3JELFdBQVcsRUFBRSxPQUFPLENBQUMsV0FBVztTQUNqQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsWUFBcUMsT0FBaUM7UUFBakMsWUFBTyxHQUFQLE9BQU8sQ0FBMEI7SUFBRyxDQUFDO0lBRTFFOztPQUVHO0lBQ0gsSUFBVyxVQUFVO1FBQ25CLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVEOzs7T0FHRztJQUNILElBQVcsUUFBUTtRQUNqQixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDO0lBQy9CLENBQUM7SUFFRDs7T0FFRztJQUNILElBQVcsV0FBVztRQUNwQixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDO0lBQ2xDLENBQUM7O0FBOUZILDhDQStGQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIENhc2UgZnJvbSBcImNhc2VcIjtcbmltcG9ydCB0eXBlIHsgSm9iU3RlcCwgQXBwUGVybWlzc2lvbnMgfSBmcm9tIFwiLi93b3JrZmxvd3MtbW9kZWxcIjtcblxuLyoqXG4gKiBPcHRpb25zIGZvciBgR2l0aHViQ3JlZGVudGlhbHMuZnJvbVBlcnNvbmFsQWNjZXNzVG9rZW5gXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2l0aHViQ3JlZGVudGlhbHNQZXJzb25hbEFjY2Vzc1Rva2VuT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgc2VjcmV0IHRoYXQgaG9sZHMgdGhlIEdpdEh1YiBwZXJzb25hbCBhY2Nlc3MgdG9rZW4uXG4gICAqXG4gICAqIEBkZWZhdWx0IFwiUFJPSkVOX0dJVEhVQl9UT0tFTlwiXG4gICAqL1xuICByZWFkb25seSBzZWNyZXQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBHaXRIdWIgQWN0aW9ucyBlbnZpcm9ubWVudCB0aGUgc2VjcmV0cyBpcyBhZGRlZCB0by5cbiAgICpcbiAgICogVGhpcyBjYW4gYmUgdXNlZCB0byBhZGQgZXhwbGljaXQgYXBwcm92YWwgc3RlcHMgdG8gYWNjZXNzIHRoZSBzZWNyZXQuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gZW52aXJvbm1lbnQgdXNlZFxuICAgKi9cbiAgcmVhZG9ubHkgZW52aXJvbm1lbnQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgYEdpdGh1YkNyZWRlbnRpYWxzLmZyb21BcHBgXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2l0aHViQ3JlZGVudGlhbHNBcHBPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBzZWNyZXQgY29udGFpbmluZyB0aGUgR2l0SHViIEFwcCBJRFxuICAgKlxuICAgKiBAZGVmYXVsdCBcIlBST0pFTl9BUFBfSURcIlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwSWRTZWNyZXQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBzZWNyZXQgY29udGFpbmluZyB0aGUgR2l0SHViIEFwcCBwcml2YXRlIGtleVxuICAgKlxuICAgKiBFc2NhcGVkIG5ld2xpbmVzIChcXFxcbikgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHJlcGxhY2VkIHdpdGggYWN0dWFsIG5ld2xpbmVzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBcIlBST0pFTl9BUFBfUFJJVkFURV9LRVlcIlxuICAgKi9cbiAgcmVhZG9ubHkgcHJpdmF0ZUtleVNlY3JldD86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG93bmVyIG9mIHRoZSBHaXRIdWIgQXBwIGluc3RhbGxhdGlvblxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGlmIGVtcHR5LCBkZWZhdWx0cyB0byB0aGUgY3VycmVudCByZXBvc2l0b3J5IG93bmVyXG4gICAqL1xuICByZWFkb25seSBvd25lcj86IHN0cmluZztcblxuICAvKipcbiAgICogTGlzdCBvZiByZXBvc2l0b3JpZXMgdG8gZ3JhbnQgYWNjZXNzIHRvXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gaWYgb3duZXIgaXMgc2V0IGFuZCByZXBvc2l0b3JpZXMgaXMgZW1wdHksIGFjY2VzcyB3aWxsIGJlIHNjb3BlZCB0byBhbGwgcmVwb3NpdG9yaWVzIGluIHRoZSBwcm92aWRlZCByZXBvc2l0b3J5IG93bmVyJ3MgaW5zdGFsbGF0aW9uLlxuICAgKiBJZiBvd25lciBhbmQgcmVwb3NpdG9yaWVzIGFyZSBlbXB0eSwgYWNjZXNzIHdpbGwgYmUgc2NvcGVkIHRvIG9ubHkgdGhlIGN1cnJlbnQgcmVwb3NpdG9yeS5cbiAgICovXG4gIHJlYWRvbmx5IHJlcG9zaXRvcmllcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgcGVybWlzc2lvbnMgZ3JhbnRlZCB0byB0aGUgdG9rZW4uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gYWxsIHBlcm1pc3Npb25zIGdyYW50ZWQgdG8gdGhlIGFwcFxuICAgKi9cbiAgcmVhZG9ubHkgcGVybWlzc2lvbnM/OiBBcHBQZXJtaXNzaW9ucztcblxuICAvKipcbiAgICogVGhlIEdpdEh1YiBBY3Rpb25zIGVudmlyb25tZW50IHRoZSBzZWNyZXRzIGFyZSBhZGRlZCB0by5cbiAgICpcbiAgICogVGhpcyBjYW4gYmUgdXNlZCB0byBhZGQgZXhwbGljaXQgYXBwcm92YWwgc3RlcHMgdG8gYWNjZXNzIHRoZSBzZWNyZXRzLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIGVudmlyb25tZW50IHVzZWRcbiAgICovXG4gIHJlYWRvbmx5IGVudmlyb25tZW50Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgYSBtZXRob2Qgb2YgcHJvdmlkaW5nIEdpdEh1YiBBUEkgYWNjZXNzIGZvciBwcm9qZW4gd29ya2Zsb3dzLlxuICovXG5leHBvcnQgY2xhc3MgR2l0aHViQ3JlZGVudGlhbHMge1xuICAvKipcbiAgICogUHJvdmlkZSBBUEkgYWNjZXNzIHRocm91Z2ggYSBHaXRIdWIgcGVyc29uYWwgYWNjZXNzIHRva2VuLlxuICAgKlxuICAgKiBUaGUgdG9rZW4gbXVzdCBiZSBhZGRlZCBhcyBhIHNlY3JldCB0byB0aGUgR2l0SHViIHJlcG8sIGFuZCB0aGUgbmFtZSBvZiB0aGVcbiAgICogc2VjcmV0IGNhbiBiZSBzcGVjaWZpZWQgaGVyZS5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9lbi9hdXRoZW50aWNhdGlvbi9rZWVwaW5nLXlvdXItYWNjb3VudC1hbmQtZGF0YS1zZWN1cmUvY3JlYXRpbmctYS1wZXJzb25hbC1hY2Nlc3MtdG9rZW5cbiAgICogQGRlZmF1bHQgLSBhIHNlY3JldCBuYW1lZCBcIlBST0pFTl9HSVRIVUJfVE9LRU5cIlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tUGVyc29uYWxBY2Nlc3NUb2tlbihcbiAgICBvcHRpb25zOiBHaXRodWJDcmVkZW50aWFsc1BlcnNvbmFsQWNjZXNzVG9rZW5PcHRpb25zID0ge30sXG4gICkge1xuICAgIHJldHVybiBuZXcgR2l0aHViQ3JlZGVudGlhbHMoe1xuICAgICAgc2V0dXBTdGVwczogW10sXG4gICAgICB0b2tlblJlZjogYFxcJHt7IHNlY3JldHMuJHtvcHRpb25zLnNlY3JldCA/PyBcIlBST0pFTl9HSVRIVUJfVE9LRU5cIn0gfX1gLFxuICAgICAgZW52aXJvbm1lbnQ6IG9wdGlvbnMuZW52aXJvbm1lbnQsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUHJvdmlkZSBBUEkgYWNjZXNzIHRocm91Z2ggYSBHaXRIdWIgQXBwLlxuICAgKlxuICAgKiBUaGUgR2l0SHViIEFwcCBtdXN0IGJlIGluc3RhbGxlZCBvbiB0aGUgR2l0SHViIHJlcG8sIGl0cyBBcHAgSUQgYW5kIGFcbiAgICogcHJpdmF0ZSBrZXkgbXVzdCBiZSBhZGRlZCBhcyBzZWNyZXRzIHRvIHRoZSByZXBvLiBUaGUgbmFtZSBvZiB0aGUgc2VjcmV0c1xuICAgKiBjYW4gYmUgc3BlY2lmaWVkIGhlcmUuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vZW4vZGV2ZWxvcGVycy9hcHBzL2J1aWxkaW5nLWdpdGh1Yi1hcHBzL2NyZWF0aW5nLWEtZ2l0aHViLWFwcFxuICAgKiBAc2VlIGh0dHBzOi8vcHJvamVuLmlvL2RvY3MvaW50ZWdyYXRpb25zL2dpdGh1Yi8jZ2l0aHViLWFwcFxuICAgKiBAZGVmYXVsdCAtIGFwcCBpZCBzdG9yZWQgaW4gXCJQUk9KRU5fQVBQX0lEXCIgYW5kIHByaXZhdGUga2V5IHN0b3JlZCBpbiBcIlBST0pFTl9BUFBfUFJJVkFURV9LRVlcIiB3aXRoIGFsbCBwZXJtaXNzaW9ucyBhdHRhY2hlZCB0byB0aGUgYXBwXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21BcHAob3B0aW9uczogR2l0aHViQ3JlZGVudGlhbHNBcHBPcHRpb25zID0ge30pIHtcbiAgICBjb25zdCBhcHBJZFNlY3JldCA9IG9wdGlvbnMuYXBwSWRTZWNyZXQgPz8gXCJQUk9KRU5fQVBQX0lEXCI7XG4gICAgY29uc3QgcHJpdmF0ZUtleVNlY3JldCA9XG4gICAgICBvcHRpb25zLnByaXZhdGVLZXlTZWNyZXQgPz8gXCJQUk9KRU5fQVBQX1BSSVZBVEVfS0VZXCI7XG5cbiAgICBjb25zdCBhY3Rpb25Db25maWc6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgICBcImFwcC1pZFwiOiBgXFwke3sgc2VjcmV0cy4ke2FwcElkU2VjcmV0fSB9fWAsXG4gICAgICBcInByaXZhdGUta2V5XCI6IGBcXCR7eyBzZWNyZXRzLiR7cHJpdmF0ZUtleVNlY3JldH0gfX1gLFxuICAgIH07XG5cbiAgICBpZiAob3B0aW9ucy5vd25lcikge1xuICAgICAgYWN0aW9uQ29uZmlnLm93bmVyID0gb3B0aW9ucy5vd25lcjtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMucmVwb3NpdG9yaWVzKSB7XG4gICAgICBhY3Rpb25Db25maWcucmVwb3NpdG9yaWVzID0gb3B0aW9ucy5yZXBvc2l0b3JpZXMuam9pbihcIixcIik7XG4gICAgfVxuXG4gICAgY29uc3QgcGVybWlzc2lvbnMgPSBPYmplY3QuZW50cmllcyhvcHRpb25zLnBlcm1pc3Npb25zID8/IHt9KS5yZWR1Y2U8XG4gICAgICBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+XG4gICAgPigobWFwLCBbbmFtZSwgdmFsXSkgPT4ge1xuICAgICAgbWFwW2BwZXJtaXNzaW9uLSR7Q2FzZS5rZWJhYihuYW1lKX1gXSA9IHZhbDtcbiAgICAgIHJldHVybiBtYXA7XG4gICAgfSwge30pO1xuXG4gICAgcmV0dXJuIG5ldyBHaXRodWJDcmVkZW50aWFscyh7XG4gICAgICBzZXR1cFN0ZXBzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcIkdlbmVyYXRlIHRva2VuXCIsXG4gICAgICAgICAgaWQ6IFwiZ2VuZXJhdGVfdG9rZW5cIixcbiAgICAgICAgICB1c2VzOiBcImFjdGlvbnMvY3JlYXRlLWdpdGh1Yi1hcHAtdG9rZW5AZjhkMzg3YjY4ZDYxYzU4YWI4M2M2YzAxNjY3MjkzNDEwMjU2OTg1OVwiLFxuICAgICAgICAgIHdpdGg6IHtcbiAgICAgICAgICAgIC4uLmFjdGlvbkNvbmZpZyxcbiAgICAgICAgICAgIC4uLnBlcm1pc3Npb25zLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgdG9rZW5SZWY6IFwiJHt7IHN0ZXBzLmdlbmVyYXRlX3Rva2VuLm91dHB1dHMudG9rZW4gfX1cIixcbiAgICAgIGVudmlyb25tZW50OiBvcHRpb25zLmVudmlyb25tZW50LFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IG9wdGlvbnM6IEdpdGh1YkNyZWRlbnRpYWxzT3B0aW9ucykge31cblxuICAvKipcbiAgICogU2V0dXAgc3RlcHMgdG8gb2J0YWluIEdpdEh1YiBjcmVkZW50aWFscy5cbiAgICovXG4gIHB1YmxpYyBnZXQgc2V0dXBTdGVwcygpOiBKb2JTdGVwW10ge1xuICAgIHJldHVybiBbLi4udGhpcy5vcHRpb25zLnNldHVwU3RlcHNdO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSB2YWx1ZSB0byB1c2UgaW4gYSB3b3JrZmxvdyB3aGVuIGEgR2l0SHViIHRva2VuIGlzIGV4cGVjdGVkLiBUaGlzXG4gICAqIHR5cGljYWxseSBsb29rcyBsaWtlIFwiJHt7IHNvbWUucGF0aC50by5hLnZhbHVlIH19XCIuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHRva2VuUmVmKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy50b2tlblJlZjtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgR2l0SHViIEFjdGlvbnMgZW52aXJvbm1lbnQgdGhlIGNyZWRlbnRpYWxzIGhhdmUgYmVlbiBhZGRlZCB0by5cbiAgICovXG4gIHB1YmxpYyBnZXQgZW52aXJvbm1lbnQoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmVudmlyb25tZW50O1xuICB9XG59XG5cbmludGVyZmFjZSBHaXRodWJDcmVkZW50aWFsc09wdGlvbnMge1xuICByZWFkb25seSBzZXR1cFN0ZXBzOiBKb2JTdGVwW107XG4gIHJlYWRvbmx5IHRva2VuUmVmOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGVudmlyb25tZW50Pzogc3RyaW5nO1xufVxuIl19