projen-modules 4.4.1 → 4.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -26,6 +26,33 @@ Types of testing:
26
26
  * Unit tests - these assert on specific functionality of the project and should be written for any new functionality added.
27
27
 
28
28
 
29
+ ## Creating a New Project
30
+
31
+
32
+ ```
33
+ npx projen new {project} --from projen-modules
34
+ ```
35
+
36
+ Some projects may have required fields that need to be specified as part of this command, review any errors for details what needs to be specified.
37
+
38
+ ### Project Types
39
+
40
+ | Project type | Description |
41
+ | ---------------------------------------------- | -------------------------- |
42
+ | [cdk-typescript-app](API.md#cdktypescriptapp-) | A typescript CDK app |
43
+ | [npm-package](API.md#npmpackage-) | A typescript npm package |
44
+ | [python-package](API.md#pythonpackage-) | A python package |
45
+ | [jsii-package](API.md#jsiiproject-) | A typescript JSII package |
46
+
47
+ ## Project Structure
48
+
49
+ All source is located in `src` and is grouped by:
50
+ * `components` - these are common building blocks that can be used by projects to implement specific project functionality.
51
+ * `projects` - these are projects that can be built from this project (see #something)
52
+ * `utils` - these are helper functions that are often reused
53
+
54
+ `test` contains tests, and mirrors the `src` directory structure. Within here there are `__snapshots__` which contain snapshots of project tests (see #section).
55
+
29
56
  ## GitHub Configuration
30
57
 
31
58
  All pull requests are merged by the [Mergify](https://mergify.com) merge queue, configured in `.mergify.yml`. Once a pull request is approved, or is opened by `daveshepherd`, and its checks pass, Mergify queues it, brings it up to date with the default branch, waits for the checks again and squash merges it. Draft pull requests and those labelled `do-not-merge` are not merged.
@@ -65,33 +92,6 @@ Do not enable GitHub's own **Require merge queue** rule, as it competes with Mer
65
92
 
66
93
  If the queue is unavailable and a change has to be merged, add yourself to the bypass list temporarily and remove yourself afterwards.
67
94
 
68
- ## Creating a New Project
69
-
70
-
71
- ```
72
- npx projen new {project} --from projen-modules
73
- ```
74
-
75
- Some projects may have required fields that need to be specified as part of this command, review any errors for details what needs to be specified.
76
-
77
- ### Project Types
78
-
79
- | Project type | Description |
80
- | ---------------------------------------------- | -------------------------- |
81
- | [cdk-typescript-app](API.md#cdktypescriptapp-) | A typescript CDK app |
82
- | [npm-package](API.md#npmpackage-) | A typescript npm package |
83
- | [python-package](API.md#pythonpackage-) | A python package |
84
- | [jsii-package](API.md#jsiiproject-) | A typescript JSII package |
85
-
86
- ## Project Structure
87
-
88
- All source is located in `src` and is grouped by:
89
- * `components` - these are common building blocks that can be used by projects to implement specific project functionality.
90
- * `projects` - these are projects that can be built from this project (see #something)
91
- * `utils` - these are helper functions that are often reused
92
-
93
- `test` contains tests, and mirrors the `src` directory structure. Within here there are `__snapshots__` which contain snapshots of project tests (see #section).
94
-
95
95
  ## Known Issues
96
96
 
97
97
  `cdk-typescript-app` defaults to Jest 30, which hoists `@sinonjs/fake-timers` 15 whose bundled types conflict with the `@types/sinon` used by `aws-sdk-client-mock`. Projects using `aws-sdk-client-mock` can set `compilerOptions.skipLibCheck` on the test tsconfig:
@@ -1,6 +1,5 @@
1
1
  import { NodeProject } from 'projen/lib/javascript';
2
2
  import { DeploymentEnvironment } from '../../projects/cdk-ts/deployment-environment';
3
- import { Readme } from '../readme';
4
3
  /** actions/setup-node at v7.0.0 */
5
4
  export declare const ACTIONS_SETUP_NODE = "actions/setup-node@820762786026740c76f36085b0efc47a31fe5020";
6
5
  /** aws-actions/configure-aws-credentials at v6.3.0 */
@@ -19,7 +18,6 @@ export interface DeploymentsOptions {
19
18
  * @default - the runner's version
20
19
  */
21
20
  readonly nodeVersion?: string;
22
- readonly readme?: Readme;
23
21
  }
24
22
  /**
25
23
  * Adds a job per deployment environment to the default branch's release
@@ -7,6 +7,7 @@ const constants_1 = require("projen/lib/github/constants");
7
7
  const workflows_model_1 = require("projen/lib/github/workflows-model");
8
8
  const javascript_1 = require("projen/lib/javascript");
9
9
  const util_1 = require("projen/lib/javascript/util");
10
+ const readme_1 = require("../readme");
10
11
  // projen only pins these by tag, so they are pinned by SHA here. Steps reference
11
12
  // them by `name@sha`, which project.github.actions resolves when the workflow is
12
13
  // rendered, so `project.github.actions.set('actions/setup-node', ...)` overrides them.
@@ -99,7 +100,7 @@ function addDeployments(project, options) {
99
100
  });
100
101
  previousJobId = jobId;
101
102
  }
102
- options.readme?.addSection('Deployment', [
103
+ readme_1.Readme.of(project)?.addSection('Deployment', [
103
104
  'After each release, the release workflow deploys to these GitHub environments in order, each after the previous one succeeds:',
104
105
  '',
105
106
  '| Environment | Region | Role ARN secret |',
@@ -107,7 +108,7 @@ function addDeployments(project, options) {
107
108
  ...deployments.map((d) => `| ${d.environment} | ${d.region} | \`${d.roleSecret ?? DEFAULT_ROLE_SECRET}\` |`),
108
109
  '',
109
110
  'Each environment needs its role ARN secret, for a role that trusts GitHub\'s OIDC provider.',
110
- ].join('\n'));
111
+ ].join('\n'), { order: readme_1.ReadmeOrder.USAGE });
111
112
  }
112
113
  /**
113
114
  * Steps that install the project's dependencies, mirroring projen's own
@@ -166,4 +167,4 @@ function deployCommand(pm) {
166
167
  return 'bun run deploy';
167
168
  }
168
169
  }
169
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwbG95bWVudHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tcG9uZW50cy9naXRodWIvZGVwbG95bWVudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBOENBLHdDQTRHQztBQTFKRCxtQ0FBZ0M7QUFDaEMsMkRBQWtFO0FBQ2xFLHVFQUEyRTtBQUMzRSxzREFBd0U7QUFDeEUscURBQXdFO0FBSXhFLGlGQUFpRjtBQUNqRixpRkFBaUY7QUFDakYsdUZBQXVGO0FBQ3ZGLG1DQUFtQztBQUN0QixRQUFBLGtCQUFrQixHQUM3Qiw2REFBNkQsQ0FBQztBQUNoRSxzREFBc0Q7QUFDekMsUUFBQSxxQ0FBcUMsR0FDaEQsZ0ZBQWdGLENBQUM7QUFFbkYsTUFBTSxtQkFBbUIsR0FBRyx5QkFBeUIsQ0FBQztBQUN0RCxNQUFNLGNBQWMsR0FBRyxTQUFTLENBQUM7QUFtQmpDLE1BQU0sVUFBVSxHQUFHLENBQUMsS0FBYSxFQUFFLEVBQUUsQ0FDbkMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBRWpEOzs7O0dBSUc7QUFDSCxTQUFnQixjQUFjLENBQzVCLE9BQW9CLEVBQ3BCLE9BQTJCO0lBRTNCLE1BQU0sRUFBRSxXQUFXLEVBQUUsR0FBRyxPQUFPLENBQUM7SUFDaEMsSUFBSSxXQUFXLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQzdCLE9BQU87SUFDVCxDQUFDO0lBRUQsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLG1CQUFtQixJQUFJLFNBQVMsQ0FBQztJQUM5RCxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLGVBQWUsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUMvRCxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2xDLE1BQU0s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QUFhLEVBQUMsRUFBRSxDQUFDLElBQUksSUFBQSxrQkFBVyxFQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7UUFDekMsT0FBTyxhQUFhLENBQUM7SUFDdkIsQ0FBQztJQUNELFFBQVEsRUFBRSxFQUFFLENBQUM7UUFDWCxLQUFLLCtCQUFrQixDQUFDLEdBQUc7WUFDekIsT0FBTyxtQkFBbUIsQ0FBQztRQUM3QixLQUFLLCtCQUFrQixDQUFDLElBQUk7WUFDMUIsa0RBQWtEO1lBQ2xELE9BQU8saUJBQWlCLENBQUM7UUFDM0I7WUFDRSxPQUFPLGdCQUFnQixDQUFDO0lBQzVCLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZ2l0aHViIH0gZnJvbSAncHJvamVuJztcbmltcG9ydCB7IEJVSUxEX0FSVElGQUNUX05BTUUgfSBmcm9tICdwcm9qZW4vbGliL2dpdGh1Yi9jb25zdGFudHMnO1xuaW1wb3J0IHsgSm9iUGVybWlzc2lvbiwgSm9iU3RlcCB9IGZyb20gJ3Byb2plbi9saWIvZ2l0aHViL3dvcmtmbG93cy1tb2RlbCc7XG5pbXBvcnQgeyBOb2RlUGFja2FnZU1hbmFnZXIsIE5vZGVQcm9qZWN0IH0gZnJvbSAncHJvamVuL2xpYi9qYXZhc2NyaXB0JztcbmltcG9ydCB7IGlzWWFybkJlcnJ5LCBpc1lhcm5DbGFzc2ljIH0gZnJvbSAncHJvamVuL2xpYi9qYXZhc2NyaXB0L3V0aWwnO1xuaW1wb3J0IHsgRGVwbG95bWVudEVudmlyb25tZW50IH0gZnJvbSAnLi4vLi4vcHJvamVjdHMvY2RrLXRzL2RlcGxveW1lbnQtZW52aXJvbm1lbnQnO1xuaW1wb3J0IHsgUmVhZG1lIH0gZnJvbSAnLi4vcmVhZG1lJztcblxuLy8gcHJvamVuIG9ubHkgcGlucyB0aGVzZSBieSB0YWcsIHNvIHRoZXkgYXJlIHBpbm5lZCBieSBTSEEgaGVyZS4gU3RlcHMgcmVmZXJlbmNlXG4vLyB0aGVtIGJ5IGBuYW1lQHNoYWAsIHdoaWNoIHByb2plY3QuZ2l0aHViLmFjdGlvbnMgcmVzb2x2ZXMgd2hlbiB0aGUgd29ya2Zsb3cgaXNcbi8vIHJlbmRlcmVkLCBzbyBgcHJvamVjdC5naXRodWIuYWN0aW9ucy5zZXQoJ2FjdGlvbnMvc2V0dXAtbm9kZScsIC4uLilgIG92ZXJyaWRlcyB0aGVtLlxuLyoqIGFjdGlvbnMvc2V0dXAtbm9kZSBhdCB2Ny4wLjAgKi9cbmV4cG9ydCBjb25zdCBBQ1RJT05TX1NFVFVQX05PREUgPVxuICAnYWN0aW9ucy9zZXR1cC1ub2RlQDgyMDc2Mjc4NjAyNjc0MGM3NmYzNjA4NWIwZWZjNDdhMzFmZTUwMjAnO1xuLyoqIGF3cy1hY3Rpb25zL2NvbmZpZ3VyZS1hd3MtY3JlZGVudGlhbHMgYXQgdjYuMy4wICovXG5leHBvcnQgY29uc3QgQVdTX0FDVElPTlNfQ09ORklHVVJFX0FXU19DUkVERU5USUFMUyA9XG4gICdhd3MtYWN0aW9ucy9jb25maWd1cmUtYXdzLWNyZWRlbnRpYWxzQGUxMjUzODI0ZTVjMTBmZjlkZjQ2ODc0ZjgxZWQzZWM5MjllMTljZmQnO1xuXG5jb25zdCBERUZBVUxUX1JPTEVfU0VDUkVUID0gJ0FXU19ERVBMT1lNRU5UX1JPTEVfQVJOJztcbmNvbnN0IFJFTEVBU0VfSk9CX0lEID0gJ3JlbGVhc2UnO1xuXG5leHBvcnQgaW50ZXJmYWNlIERlcGxveW1lbnRzT3B0aW9ucyB7XG4gIHJlYWRvbmx5IGRlcGxveW1lbnRzOiBBcnJheTxEZXBsb3ltZW50RW52aXJvbm1lbnQ+O1xuICAvKipcbiAgICogTmFtZSBvZiB0aGUgcmVsZWFzZSB3b3JrZmxvdyBmb3IgdGhlIGRlZmF1bHQgYnJhbmNoXG4gICAqXG4gICAqIEBkZWZhdWx0ICdyZWxlYXNlJ1xuICAgKi9cbiAgcmVhZG9ubHkgcmVsZWFzZVdvcmtmbG93TmFtZT86IHN0cmluZztcbiAgLyoqXG4gICAqIE5vZGUuanMgdmVyc2lvbiB0aGF0IHRoZSByZWxlYXNlIHdvcmtmbG93IHNldHMgdXBcbiAgICpcbiAgICogQGRlZmF1bHQgLSB0aGUgcnVubmVyJ3MgdmVyc2lvblxuICAgKi9cbiAgcmVhZG9ubHkgbm9kZVZlcnNpb24/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHJlYWRtZT86IFJlYWRtZTtcbn1cblxuY29uc3QgY2FwaXRhbGlzZSA9ICh2YWx1ZTogc3RyaW5nKSA9PlxuICB2YWx1ZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHZhbHVlLnNsaWNlKDEpO1xuXG4vKipcbiAqIEFkZHMgYSBqb2IgcGVyIGRlcGxveW1lbnQgZW52aXJvbm1lbnQgdG8gdGhlIGRlZmF1bHQgYnJhbmNoJ3MgcmVsZWFzZVxuICogd29ya2Zsb3csIGVhY2ggb25lIGRlcGxveWluZyBhZnRlciB0aGUgcmVsZWFzZSBqb2IgYW5kIHRoZSBwcmV2aW91c1xuICogZW52aXJvbm1lbnQncyBqb2JcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZERlcGxveW1lbnRzKFxuICBwcm9qZWN0OiBOb2RlUHJvamVjdCxcbiAgb3B0aW9uczogRGVwbG95bWVudHNPcHRpb25zLFxuKSB7XG4gIGNvbnN0IHsgZGVwbG95bWVudHMgfSA9IG9wdGlvbnM7XG4gIGlmIChkZXBsb3ltZW50cy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCB3b3JrZmxvd05hbWUgPSBvcHRpb25zLnJlbGVhc2VXb3JrZmxvd05hbWUgPz8gJ3JlbGVhc2UnO1xuICBjb25zdCB3b3JrZmxvdyA9IHByb2plY3QuZ2l0aHViPy50cnlGaW5kV29ya2Zsb3cod29ya2Zsb3dOYW1lKTtcbiAgaWYgKCFwcm9qZWN0LnJlbGVhc2UgfHwgIXdvcmtmbG93KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYGRlcGxveW1lbnRzIG5lZWQgYSBcIiR7d29ya2Zsb3dOYW1lfVwiIEdpdEh1YiB3b3JrZmxvdywgc28gdGhlIHByb2plY3QgbXVzdCBoYXZlIHJlbGVhc2UgZW5hYmxlZCBhbmQgR2l0SHViIHdvcmtmbG93cyBlbmFibGVkYCxcbiAgICApO1xuICB9XG5cbiAgY29uc3Qgc2VlbiA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBmb3IgKGNvbnN0IHsgZW52aXJvbm1lbnQgfSBvZiBkZXBsb3ltZW50cykge1xuICAgIGlmICghL15bQS1aYS16MC05Xy1dKyQvLnRlc3QoZW52aXJvbm1lbnQpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBEZXBsb3ltZW50IGVudmlyb25tZW50IFwiJHtlbnZpcm9ubWVudH1cIiBtdXN0IGJlIG5vbi1lbXB0eSBhbmQgb25seSBjb250YWluIGxldHRlcnMsIGRpZ2l0cywgXCJfXCIgYW5kIFwiLVwiLCBhcyBpdCBpcyB1c2VkIGluIHRoZSBqb2IgaWRgLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHNlZW4uaGFzKGVudmlyb25tZW50KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBEZXBsb3ltZW50IGVudmlyb25tZW50IFwiJHtlbnZpcm9ubWVudH1cIiBpcyBkdXBsaWNhdGVkYCk7XG4gICAgfVxuICAgIHNlZW4uYWRkKGVudmlyb25tZW50KTtcbiAgfVxuXG4gIC8vIGRlcGxveSBqb2JzIHJ1biBvbiB0aGUgc2FtZSBydW5uZXJzIGFzIHRoZSByZWxlYXNlIGpvYlxuICBjb25zdCByZWxlYXNlSm9iID0gd29ya2Zsb3cuZ2V0Sm9iKFJFTEVBU0VfSk9CX0lEKSBhcyBnaXRodWIud29ya2Zsb3dzLkpvYjtcbiAgY29uc3Qgc2V0dXBTdGVwcyA9IHBhY2thZ2VNYW5hZ2VyU2V0dXBTdGVwcyhwcm9qZWN0LCBvcHRpb25zLm5vZGVWZXJzaW9uKTtcbiAgLy8gcm9sZSBzZXNzaW9uIG5hbWVzIG9ubHkgYWxsb3cgW1xcdys9LC5ALV1cbiAgY29uc3Qgcm9sZVNlc3Npb25OYW1lID0gYCR7cHJvamVjdC5uYW1lfS1kZXBsb3lgLnJlcGxhY2UoXG4gICAgL1teXFx3Kz0sLkAtXS9nLFxuICAgICctJyxcbiAgKTtcblxuICBsZXQgcHJldmlvdXNKb2JJZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBmb3IgKGNvbnN0IGRlcGxveW1lbnQgb2YgZGVwbG95bWVudHMpIHtcbiAgICBjb25zdCBqb2JJZCA9IGBkZXBsb3lfJHtkZXBsb3ltZW50LmVudmlyb25tZW50fWA7XG4gICAgY29uc3Qgcm9sZVNlY3JldCA9IGRlcGxveW1lbnQucm9sZVNlY3JldCA/PyBERUZBVUxUX1JPTEVfU0VDUkVUO1xuICAgIGNvbnN0IGVudiA9IGRlcGxveW1lbnQuZW52ID8/IHt9O1xuICAgIHdvcmtmbG93LmFkZEpvYihqb2JJZCwge1xuICAgICAgbmFtZTpcbiAgICAgICAgZGVwbG95bWVudC5uYW1lID8/IGBEZXBsb3kgdG8gJHtjYXBpdGFsaXNlKGRlcGxveW1lbnQuZW52aXJvbm1lbnQpfWAsXG4gICAgICBlbnZpcm9ubWVudDogZGVwbG95bWVudC5lbnZpcm9ubWVudCxcbiAgICAgIC8vIHJlbGVhc2UgaXMgbGlzdGVkIGV4cGxpY2l0bHksIGFzIHRoZSBjb25kaXRpb24gcmVhZHMgaXRzIG91dHB1dHNcbiAgICAgIG5lZWRzOiBwcmV2aW91c0pvYklkID8gW1JFTEVBU0VfSk9CX0lELCBwcmV2aW91c0pvYklkXSA6IFtSRUxFQVNFX0pPQl9JRF0sXG4gICAgICBydW5zT246IHJlbGVhc2VKb2IucnVuc09uLFxuICAgICAgcnVuc09uR3JvdXA6IHJlbGVhc2VKb2IucnVuc09uR3JvdXAsXG4gICAgICBwZXJtaXNzaW9uczoge1xuICAgICAgICBpZFRva2VuOiBKb2JQZXJtaXNzaW9uLldSSVRFLFxuICAgICAgfSxcbiAgICAgIGlmOiBgbmVlZHMuJHtSRUxFQVNFX0pPQl9JRH0ub3V0cHV0cy50YWdfZXhpc3RzICE9ICd0cnVlJ2AsXG4gICAgICAvLyBUaGUgY29tbWl0IGlzIG5vdCByZWJ1aWx0OiB0aGUgcmVsZWFzZSBqb2IgYWxyZWFkeSBidWlsdCBhbmQgdGVzdGVkIGl0LFxuICAgICAgLy8gYW5kIGNkayBkZXBsb3kgYnVuZGxlcyB0aGUgTGFtYmRhcyBpdHNlbGYgdGhyb3VnaCB0aGUgYnVpbGQgaG9vayBpblxuICAgICAgLy8gY2RrLmpzb24uIFRoZSByZWxlYXNlJ3MgYXJ0aWZhY3QgKHdpdGggcmVsZWFzZXRhZy50eHQpIGlzIHN0aWxsXG4gICAgICAvLyBkb3dubG9hZGVkLCBzbyB0aGUgYXBwIGNhbiByZWFkIHRoZSByZWxlYXNlZCB2ZXJzaW9uLlxuICAgICAgc3RlcHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdDaGVja291dCcsXG4gICAgICAgICAgdXNlczogZ2l0aHViLkFjdGlvblJlZnMuQUNUSU9OU19DSEVDS09VVCxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdEb3dubG9hZCBidWlsZCBhcnRpZmFjdHMnLFxuICAgICAgICAgIHVzZXM6IGdpdGh1Yi5BY3Rpb25SZWZzLkFDVElPTlNfRE9XTkxPQURfQVJUSUZBQ1QsXG4gICAgICAgICAgd2l0aDoge1xuICAgICAgICAgICAgbmFtZTogQlVJTERfQVJUSUZBQ1RfTkFNRSxcbiAgICAgICAgICAgIHBhdGg6IHByb2plY3QucmVsZWFzZS5hcnRpZmFjdHNEaXJlY3RvcnksXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgLi4uc2V0dXBTdGVwcyxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdjb25maWd1cmUgYXdzIGNyZWRlbnRpYWxzJyxcbiAgICAgICAgICB1c2VzOiBBV1NfQUNUSU9OU19DT05GSUdVUkVfQVdTX0NSRURFTlRJQUxTLFxuICAgICAgICAgIHdpdGg6IHtcbiAgICAgICAgICAgICdyb2xlLXRvLWFzc3VtZSc6IGBcXCR7eyBzZWNyZXRzLiR7cm9sZVNlY3JldH0gfX1gLFxuICAgICAgICAgICAgJ3JvbGUtc2Vzc2lvbi1uYW1lJzogcm9sZVNlc3Npb25OYW1lLFxuICAgICAgICAgICAgJ2F3cy1yZWdpb24nOiBkZXBsb3ltZW50LnJlZ2lvbixcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ2RlcGxveScsXG4gICAgICAgICAgcnVuOiBgJHtkZXBsb3lDb21tYW5kKHByb2plY3QucGFja2FnZS5wYWNrYWdlTWFuYWdlcil9IC0tcmVxdWlyZS1hcHByb3ZhbCAke2RlcGxveW1lbnQucmVxdWlyZUFwcHJvdmFsID8/ICduZXZlcid9YCxcbiAgICAgICAgICAuLi4oT2JqZWN0LmtleXMoZW52KS5sZW5ndGggPiAwICYmIHsgZW52IH0pLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9KTtcbiAgICBwcmV2aW91c0pvYklkID0gam9iSWQ7XG4gIH1cblxuICBvcHRpb25zLnJlYWRtZT8uYWRkU2VjdGlvbihcbiAgICAnRGVwbG95bWVudCcsXG4gICAgW1xuICAgICAgJ0FmdGVyIGVhY2ggcmVsZWFzZSwgdGhlIHJlbGVhc2Ugd29ya2Zsb3cgZGVwbG95cyB0byB0aGVzZSBHaXRIdWIgZW52aXJvbm1lbnRzIGluIG9yZGVyLCBlYWNoIGFmdGVyIHRoZSBwcmV2aW91cyBvbmUgc3VjY2VlZHM6JyxcbiAgICAgICcnLFxuICAgICAgJ3wgRW52aXJvbm1lbnQgfCBSZWdpb24gfCBSb2xlIEFSTiBzZWNyZXQgfCcsXG4gICAgICAnfCAtLS0tLS0tLS0tLSB8IC0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLSB8JyxcbiAgICAgIC4uLmRlcGxveW1lbnRzLm1hcChcbiAgICAgICAgKGQpID0+XG4gICAgICAgICAgYHwgJHtkLmVudmlyb25tZW50fSB8ICR7ZC5yZWdpb259IHwgXFxgJHtkLnJvbGVTZWNyZXQgPz8gREVGQVVMVF9ST0xFX1NFQ1JFVH1cXGAgfGAsXG4gICAgICApLFxuICAgICAgJycsXG4gICAgICAnRWFjaCBlbnZpcm9ubWVudCBuZWVkcyBpdHMgcm9sZSBBUk4gc2VjcmV0LCBmb3IgYSByb2xlIHRoYXQgdHJ1c3RzIEdpdEh1YlxcJ3MgT0lEQyBwcm92aWRlci4nLFxuICAgIF0uam9pbignXFxuJyksXG4gICk7XG59XG5cbi8qKlxuICogU3RlcHMgdGhhdCBpbnN0YWxsIHRoZSBwcm9qZWN0J3MgZGVwZW5kZW5jaWVzLCBtaXJyb3JpbmcgcHJvamVuJ3Mgb3duXG4gKiB3b3JrZmxvdyBzZXR1cCBidXQgd2l0aCBzZXR1cC1ub2RlIHBpbm5lZCBieSBTSEFcbiAqL1xuZnVuY3Rpb24gcGFja2FnZU1hbmFnZXJTZXR1cFN0ZXBzKFxuICBwcm9qZWN0OiBOb2RlUHJvamVjdCxcbiAgbm9kZVZlcnNpb24/OiBzdHJpbmcsXG4pOiBBcnJheTxKb2JTdGVwPiB7XG4gIGNvbnN0IHBtID0gcHJvamVjdC5wYWNrYWdlLnBhY2thZ2VNYW5hZ2VyO1xuICBjb25zdCBzdGVwcyA9IG5ldyBBcnJheTxKb2JTdGVwPigpO1xuICBpZiAocG0gPT09IE5vZGVQYWNrYWdlTWFuYWdlci5CVU4pIHtcbiAgICBzdGVwcy5wdXNoKHtcbiAgICAgIG5hbWU6ICdTZXR1cCBidW4nLFxuICAgICAgdXNlczogZ2l0aHViLkFjdGlvblJlZnMuT1ZFTl9TSF9TRVRVUF9CVU4sXG4gICAgICB3aXRoOiB7ICdidW4tdmVyc2lvbic6IHByb2plY3QucGFja2FnZS5idW5WZXJzaW9uIH0sXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgaWYgKGlzWWFybkJlcnJ5KHBtKSkge1xuICAgICAgc3RlcHMucHVzaCh7IG5hbWU6ICdFbmFibGUgY29yZXBhY2snLCBydW46ICdjb3JlcGFjayBlbmFibGUnIH0pO1xuICAgIH0gZWxzZSBpZiAocG0gPT09IE5vZGVQYWNrYWdlTWFuYWdlci5QTlBNKSB7XG4gICAgICBzdGVwcy5wdXNoKHtcbiAgICAgICAgbmFtZTogJ1NldHVwIHBucG0nLFxuICAgICAgICB1c2VzOiBnaXRodWIuQWN0aW9uUmVmcy5QTlBNX0FDVElPTl9TRVRVUCxcbiAgICAgICAgd2l0aDogeyB2ZXJzaW9uOiBwcm9qZWN0LnBhY2thZ2UucG5wbVZlcnNpb24gfSxcbiAgICAgIH0pO1xuICAgIH1cbiAgICBzdGVwcy5wdXNoKHtcbiAgICAgIG5hbWU6ICdTZXR1cCBOb2RlLmpzJyxcbiAgICAgIHVzZXM6IEFDVElPTlNfU0VUVVBfTk9ERSxcbiAgICAgIHdpdGg6IHtcbiAgICAgICAgLi4uKG5vZGVWZXJzaW9uICYmIHsgJ25vZGUtdmVyc2lvbic6IG5vZGVWZXJzaW9uIH0pLFxuICAgICAgICBjYWNoZTogaXNZYXJuQ2xhc3NpYyhwbSkgfHwgaXNZYXJuQmVycnkocG0pID8gJ3lhcm4nIDogcG0sXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG4gIHN0ZXBzLnB1c2goe1xuICAgIG5hbWU6ICdJbnN0YWxsIGRlcGVuZGVuY2llcycsXG4gICAgcnVuOiBwcm9qZWN0LnBhY2thZ2UuaW5zdGFsbENvbW1hbmQsXG4gIH0pO1xuICByZXR1cm4gc3RlcHM7XG59XG5cbi8qKlxuICogUnVucyB0aGUgcHJvamVjdCdzIGRlcGxveSB0YXNrLCBwYXNzaW5nIG9uIHRoZSBhcmd1bWVudHMgdGhhdCBmb2xsb3dcbiAqL1xuZnVuY3Rpb24gZGVwbG95Q29tbWFuZChwbTogTm9kZVBhY2thZ2VNYW5hZ2VyKSB7XG4gIGlmIChpc1lhcm5DbGFzc2ljKHBtKSB8fCBpc1lhcm5CZXJyeShwbSkpIHtcbiAgICByZXR1cm4gJ3lhcm4gZGVwbG95JztcbiAgfVxuICBzd2l0Y2ggKHBtKSB7XG4gICAgY2FzZSBOb2RlUGFja2FnZU1hbmFnZXIuTlBNOlxuICAgICAgcmV0dXJuICducG0gcnVuIGRlcGxveSAtLSc7XG4gICAgY2FzZSBOb2RlUGFja2FnZU1hbmFnZXIuUE5QTTpcbiAgICAgIC8vIGBwbnBtIGRlcGxveWAgaXMgYSBwbnBtIGNvbW1hbmQsIG5vdCB0aGUgc2NyaXB0XG4gICAgICByZXR1cm4gJ3BucG0gcnVuIGRlcGxveSc7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiAnYnVuIHJ1biBkZXBsb3knO1xuICB9XG59XG4iXX0=
170
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwbG95bWVudHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tcG9uZW50cy9naXRodWIvZGVwbG95bWVudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBNkNBLHdDQTZHQztBQTFKRCxtQ0FBZ0M7QUFDaEMsMkRBQWtFO0FBQ2xFLHVFQUEyRTtBQUMzRSxzREFBd0U7QUFDeEUscURBQXdFO0FBRXhFLHNDQUFnRDtBQUVoRCxpRkFBaUY7QUFDakYsaUZBQWlGO0FBQ2pGLHVGQUF1RjtBQUN2RixtQ0FBbUM7QUFDdEIsUUFBQSxrQkFBa0IsR0FDN0IsNkRBQTZELENBQUM7QUFDaEUsc0RBQXNEO0FBQ3pDLFFBQUEscUNBQXFDLEdBQ2hELGdGQUFnRixDQUFDO0FBRW5GLE1BQU0sbUJBQW1CLEdBQUcseUJBQXlCLENBQUM7QUFDdEQsTUFBTSxjQUFjLEdBQUcsU0FBUyxDQUFDO0FBa0JqQyxNQUFNLFVBQVUsR0FBRyxDQUFDLEtBQWEsRUFBRSxFQUFFLENBQ25DLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUVqRDs7OztHQUlHO0FBQ0gsU0FBZ0IsY0FBYyxDQUM1QixPQUFvQixFQUNwQixPQUEyQjtJQUUzQixNQUFNLEVBQUUsV0FBVyxFQUFFLEdBQUcsT0FBTyxDQUFDO0lBQ2hDLElBQUksV0FBVyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUM3QixPQUFPO0lBQ1QsQ0FBQztJQUVELE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQyxtQkFBbUIsSUFBSSxTQUFTLENBQUM7SUFDOUQsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxlQUFlLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDL0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FB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Q0FBQztBQUNmLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQVMsYUFBYSxDQUFDLEVBQXNCO0lBQzNDLElBQUksSUFBQSxvQkFBYSxFQUFDLEVBQUUsQ0FBQyxJQUFJLElBQUEsa0JBQVcsRUFBQyxFQUFFLENBQUMsRUFBRSxDQUFDO1FBQ3pDLE9BQU8sYUFBYSxDQUFDO0lBQ3ZCLENBQUM7SUFDRCxRQUFRLEVBQUUsRUFBRSxDQUFDO1FBQ1gsS0FBSywrQkFBa0IsQ0FBQyxHQUFHO1lBQ3pCLE9BQU8sbUJBQW1CLENBQUM7UUFDN0IsS0FBSywrQkFBa0IsQ0FBQyxJQUFJO1lBQzFCLGtEQUFrRDtZQUNsRCxPQUFPLGlCQUFpQixDQUFDO1FBQzNCO1lBQ0UsT0FBTyxnQkFBZ0IsQ0FBQztJQUM1QixDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGdpdGh1YiB9IGZyb20gJ3Byb2plbic7XG5pbXBvcnQgeyBCVUlMRF9BUlRJRkFDVF9OQU1FIH0gZnJvbSAncHJvamVuL2xpYi9naXRodWIvY29uc3RhbnRzJztcbmltcG9ydCB7IEpvYlBlcm1pc3Npb24sIEpvYlN0ZXAgfSBmcm9tICdwcm9qZW4vbGliL2dpdGh1Yi93b3JrZmxvd3MtbW9kZWwnO1xuaW1wb3J0IHsgTm9kZVBhY2thZ2VNYW5hZ2VyLCBOb2RlUHJvamVjdCB9IGZyb20gJ3Byb2plbi9saWIvamF2YXNjcmlwdCc7XG5pbXBvcnQgeyBpc1lhcm5CZXJyeSwgaXNZYXJuQ2xhc3NpYyB9IGZyb20gJ3Byb2plbi9saWIvamF2YXNjcmlwdC91dGlsJztcbmltcG9ydCB7IERlcGxveW1lbnRFbnZpcm9ubWVudCB9IGZyb20gJy4uLy4uL3Byb2plY3RzL2Nkay10cy9kZXBsb3ltZW50LWVudmlyb25tZW50JztcbmltcG9ydCB7IFJlYWRtZSwgUmVhZG1lT3JkZXIgfSBmcm9tICcuLi9yZWFkbWUnO1xuXG4vLyBwcm9qZW4gb25seSBwaW5zIHRoZXNlIGJ5IHRhZywgc28gdGhleSBhcmUgcGlubmVkIGJ5IFNIQSBoZXJlLiBTdGVwcyByZWZlcmVuY2Vcbi8vIHRoZW0gYnkgYG5hbWVAc2hhYCwgd2hpY2ggcHJvamVjdC5naXRodWIuYWN0aW9ucyByZXNvbHZlcyB3aGVuIHRoZSB3b3JrZmxvdyBpc1xuLy8gcmVuZGVyZWQsIHNvIGBwcm9qZWN0LmdpdGh1Yi5hY3Rpb25zLnNldCgnYWN0aW9ucy9zZXR1cC1ub2RlJywgLi4uKWAgb3ZlcnJpZGVzIHRoZW0uXG4vKiogYWN0aW9ucy9zZXR1cC1ub2RlIGF0IHY3LjAuMCAqL1xuZXhwb3J0IGNvbnN0IEFDVElPTlNfU0VUVVBfTk9ERSA9XG4gICdhY3Rpb25zL3NldHVwLW5vZGVAODIwNzYyNzg2MDI2NzQwYzc2ZjM2MDg1YjBlZmM0N2EzMWZlNTAyMCc7XG4vKiogYXdzLWFjdGlvbnMvY29uZmlndXJlLWF3cy1jcmVkZW50aWFscyBhdCB2Ni4zLjAgKi9cbmV4cG9ydCBjb25zdCBBV1NfQUNUSU9OU19DT05GSUdVUkVfQVdTX0NSRURFTlRJQUxTID1cbiAgJ2F3cy1hY3Rpb25zL2NvbmZpZ3VyZS1hd3MtY3JlZGVudGlhbHNAZTEyNTM4MjRlNWMxMGZmOWRmNDY4NzRmODFlZDNlYzkyOWUxOWNmZCc7XG5cbmNvbnN0IERFRkFVTFRfUk9MRV9TRUNSRVQgPSAnQVdTX0RFUExPWU1FTlRfUk9MRV9BUk4nO1xuY29uc3QgUkVMRUFTRV9KT0JfSUQgPSAncmVsZWFzZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGVwbG95bWVudHNPcHRpb25zIHtcbiAgcmVhZG9ubHkgZGVwbG95bWVudHM6IEFycmF5PERlcGxveW1lbnRFbnZpcm9ubWVudD47XG4gIC8qKlxuICAgKiBOYW1lIG9mIHRoZSByZWxlYXNlIHdvcmtmbG93IGZvciB0aGUgZGVmYXVsdCBicmFuY2hcbiAgICpcbiAgICogQGRlZmF1bHQgJ3JlbGVhc2UnXG4gICAqL1xuICByZWFkb25seSByZWxlYXNlV29ya2Zsb3dOYW1lPzogc3RyaW5nO1xuICAvKipcbiAgICogTm9kZS5qcyB2ZXJzaW9uIHRoYXQgdGhlIHJlbGVhc2Ugd29ya2Zsb3cgc2V0cyB1cFxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHRoZSBydW5uZXIncyB2ZXJzaW9uXG4gICAqL1xuICByZWFkb25seSBub2RlVmVyc2lvbj86IHN0cmluZztcbn1cblxuY29uc3QgY2FwaXRhbGlzZSA9ICh2YWx1ZTogc3RyaW5nKSA9PlxuICB2YWx1ZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHZhbHVlLnNsaWNlKDEpO1xuXG4vKipcbiAqIEFkZHMgYSBqb2IgcGVyIGRlcGxveW1lbnQgZW52aXJvbm1lbnQgdG8gdGhlIGRlZmF1bHQgYnJhbmNoJ3MgcmVsZWFzZVxuICogd29ya2Zsb3csIGVhY2ggb25lIGRlcGxveWluZyBhZnRlciB0aGUgcmVsZWFzZSBqb2IgYW5kIHRoZSBwcmV2aW91c1xuICogZW52aXJvbm1lbnQncyBqb2JcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZERlcGxveW1lbnRzKFxuICBwcm9qZWN0OiBOb2RlUHJvamVjdCxcbiAgb3B0aW9uczogRGVwbG95bWVudHNPcHRpb25zLFxuKSB7XG4gIGNvbnN0IHsgZGVwbG95bWVudHMgfSA9IG9wdGlvbnM7XG4gIGlmIChkZXBsb3ltZW50cy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCB3b3JrZmxvd05hbWUgPSBvcHRpb25zLnJlbGVhc2VXb3JrZmxvd05hbWUgPz8gJ3JlbGVhc2UnO1xuICBjb25zdCB3b3JrZmxvdyA9IHByb2plY3QuZ2l0aHViPy50cnlGaW5kV29ya2Zsb3cod29ya2Zsb3dOYW1lKTtcbiAgaWYgKCFwcm9qZWN0LnJlbGVhc2UgfHwgIXdvcmtmbG93KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYGRlcGxveW1lbnRzIG5lZWQgYSBcIiR7d29ya2Zsb3dOYW1lfVwiIEdpdEh1YiB3b3JrZmxvdywgc28gdGhlIHByb2plY3QgbXVzdCBoYXZlIHJlbGVhc2UgZW5hYmxlZCBhbmQgR2l0SHViIHdvcmtmbG93cyBlbmFibGVkYCxcbiAgICApO1xuICB9XG5cbiAgY29uc3Qgc2VlbiA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBmb3IgKGNvbnN0IHsgZW52aXJvbm1lbnQgfSBvZiBkZXBsb3ltZW50cykge1xuICAgIGlmICghL15bQS1aYS16MC05Xy1dKyQvLnRlc3QoZW52aXJvbm1lbnQpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBEZXBsb3ltZW50IGVudmlyb25tZW50IFwiJHtlbnZpcm9ubWVudH1cIiBtdXN0IGJlIG5vbi1lbXB0eSBhbmQgb25seSBjb250YWluIGxldHRlcnMsIGRpZ2l0cywgXCJfXCIgYW5kIFwiLVwiLCBhcyBpdCBpcyB1c2VkIGluIHRoZSBqb2IgaWRgLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHNlZW4uaGFzKGVudmlyb25tZW50KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBEZXBsb3ltZW50IGVudmlyb25tZW50IFwiJHtlbnZpcm9ubWVudH1cIiBpcyBkdXBsaWNhdGVkYCk7XG4gICAgfVxuICAgIHNlZW4uYWRkKGVudmlyb25tZW50KTtcbiAgfVxuXG4gIC8vIGRlcGxveSBqb2JzIHJ1biBvbiB0aGUgc2FtZSBydW5uZXJzIGFzIHRoZSByZWxlYXNlIGpvYlxuICBjb25zdCByZWxlYXNlSm9iID0gd29ya2Zsb3cuZ2V0Sm9iKFJFTEVBU0VfSk9CX0lEKSBhcyBnaXRodWIud29ya2Zsb3dzLkpvYjtcbiAgY29uc3Qgc2V0dXBTdGVwcyA9IHBhY2thZ2VNYW5hZ2VyU2V0dXBTdGVwcyhwcm9qZWN0LCBvcHRpb25zLm5vZGVWZXJzaW9uKTtcbiAgLy8gcm9sZSBzZXNzaW9uIG5hbWVzIG9ubHkgYWxsb3cgW1xcdys9LC5ALV1cbiAgY29uc3Qgcm9sZVNlc3Npb25OYW1lID0gYCR7cHJvamVjdC5uYW1lfS1kZXBsb3lgLnJlcGxhY2UoXG4gICAgL1teXFx3Kz0sLkAtXS9nLFxuICAgICctJyxcbiAgKTtcblxuICBsZXQgcHJldmlvdXNKb2JJZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBmb3IgKGNvbnN0IGRlcGxveW1lbnQgb2YgZGVwbG95bWVudHMpIHtcbiAgICBjb25zdCBqb2JJZCA9IGBkZXBsb3lfJHtkZXBsb3ltZW50LmVudmlyb25tZW50fWA7XG4gICAgY29uc3Qgcm9sZVNlY3JldCA9IGRlcGxveW1lbnQucm9sZVNlY3JldCA/PyBERUZBVUxUX1JPTEVfU0VDUkVUO1xuICAgIGNvbnN0IGVudiA9IGRlcGxveW1lbnQuZW52ID8/IHt9O1xuICAgIHdvcmtmbG93LmFkZEpvYihqb2JJZCwge1xuICAgICAgbmFtZTpcbiAgICAgICAgZGVwbG95bWVudC5uYW1lID8/IGBEZXBsb3kgdG8gJHtjYXBpdGFsaXNlKGRlcGxveW1lbnQuZW52aXJvbm1lbnQpfWAsXG4gICAgICBlbnZpcm9ubWVudDogZGVwbG95bWVudC5lbnZpcm9ubWVudCxcbiAgICAgIC8vIHJlbGVhc2UgaXMgbGlzdGVkIGV4cGxpY2l0bHksIGFzIHRoZSBjb25kaXRpb24gcmVhZHMgaXRzIG91dHB1dHNcbiAgICAgIG5lZWRzOiBwcmV2aW91c0pvYklkID8gW1JFTEVBU0VfSk9CX0lELCBwcmV2aW91c0pvYklkXSA6IFtSRUxFQVNFX0pPQl9JRF0sXG4gICAgICBydW5zT246IHJlbGVhc2VKb2IucnVuc09uLFxuICAgICAgcnVuc09uR3JvdXA6IHJlbGVhc2VKb2IucnVuc09uR3JvdXAsXG4gICAgICBwZXJtaXNzaW9uczoge1xuICAgICAgICBpZFRva2VuOiBKb2JQZXJtaXNzaW9uLldSSVRFLFxuICAgICAgfSxcbiAgICAgIGlmOiBgbmVlZHMuJHtSRUxFQVNFX0pPQl9JRH0ub3V0cHV0cy50YWdfZXhpc3RzICE9ICd0cnVlJ2AsXG4gICAgICAvLyBUaGUgY29tbWl0IGlzIG5vdCByZWJ1aWx0OiB0aGUgcmVsZWFzZSBqb2IgYWxyZWFkeSBidWlsdCBhbmQgdGVzdGVkIGl0LFxuICAgICAgLy8gYW5kIGNkayBkZXBsb3kgYnVuZGxlcyB0aGUgTGFtYmRhcyBpdHNlbGYgdGhyb3VnaCB0aGUgYnVpbGQgaG9vayBpblxuICAgICAgLy8gY2RrLmpzb24uIFRoZSByZWxlYXNlJ3MgYXJ0aWZhY3QgKHdpdGggcmVsZWFzZXRhZy50eHQpIGlzIHN0aWxsXG4gICAgICAvLyBkb3dubG9hZGVkLCBzbyB0aGUgYXBwIGNhbiByZWFkIHRoZSByZWxlYXNlZCB2ZXJzaW9uLlxuICAgICAgc3RlcHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdDaGVja291dCcsXG4gICAgICAgICAgdXNlczogZ2l0aHViLkFjdGlvblJlZnMuQUNUSU9OU19DSEVDS09VVCxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdEb3dubG9hZCBidWlsZCBhcnRpZmFjdHMnLFxuICAgICAgICAgIHVzZXM6IGdpdGh1Yi5BY3Rpb25SZWZzLkFDVElPTlNfRE9XTkxPQURfQVJUSUZBQ1QsXG4gICAgICAgICAgd2l0aDoge1xuICAgICAgICAgICAgbmFtZTogQlVJTERfQVJUSUZBQ1RfTkFNRSxcbiAgICAgICAgICAgIHBhdGg6IHByb2plY3QucmVsZWFzZS5hcnRpZmFjdHNEaXJlY3RvcnksXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgLi4uc2V0dXBTdGVwcyxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdjb25maWd1cmUgYXdzIGNyZWRlbnRpYWxzJyxcbiAgICAgICAgICB1c2VzOiBBV1NfQUNUSU9OU19DT05GSUdVUkVfQVdTX0NSRURFTlRJQUxTLFxuICAgICAgICAgIHdpdGg6IHtcbiAgICAgICAgICAgICdyb2xlLXRvLWFzc3VtZSc6IGBcXCR7eyBzZWNyZXRzLiR7cm9sZVNlY3JldH0gfX1gLFxuICAgICAgICAgICAgJ3JvbGUtc2Vzc2lvbi1uYW1lJzogcm9sZVNlc3Npb25OYW1lLFxuICAgICAgICAgICAgJ2F3cy1yZWdpb24nOiBkZXBsb3ltZW50LnJlZ2lvbixcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ2RlcGxveScsXG4gICAgICAgICAgcnVuOiBgJHtkZXBsb3lDb21tYW5kKHByb2plY3QucGFja2FnZS5wYWNrYWdlTWFuYWdlcil9IC0tcmVxdWlyZS1hcHByb3ZhbCAke2RlcGxveW1lbnQucmVxdWlyZUFwcHJvdmFsID8/ICduZXZlcid9YCxcbiAgICAgICAgICAuLi4oT2JqZWN0LmtleXMoZW52KS5sZW5ndGggPiAwICYmIHsgZW52IH0pLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9KTtcbiAgICBwcmV2aW91c0pvYklkID0gam9iSWQ7XG4gIH1cblxuICBSZWFkbWUub2YocHJvamVjdCk/LmFkZFNlY3Rpb24oXG4gICAgJ0RlcGxveW1lbnQnLFxuICAgIFtcbiAgICAgICdBZnRlciBlYWNoIHJlbGVhc2UsIHRoZSByZWxlYXNlIHdvcmtmbG93IGRlcGxveXMgdG8gdGhlc2UgR2l0SHViIGVudmlyb25tZW50cyBpbiBvcmRlciwgZWFjaCBhZnRlciB0aGUgcHJldmlvdXMgb25lIHN1Y2NlZWRzOicsXG4gICAgICAnJyxcbiAgICAgICd8IEVudmlyb25tZW50IHwgUmVnaW9uIHwgUm9sZSBBUk4gc2VjcmV0IHwnLFxuICAgICAgJ3wgLS0tLS0tLS0tLS0gfCAtLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfCcsXG4gICAgICAuLi5kZXBsb3ltZW50cy5tYXAoXG4gICAgICAgIChkKSA9PlxuICAgICAgICAgIGB8ICR7ZC5lbnZpcm9ubWVudH0gfCAke2QucmVnaW9ufSB8IFxcYCR7ZC5yb2xlU2VjcmV0ID8/IERFRkFVTFRfUk9MRV9TRUNSRVR9XFxgIHxgLFxuICAgICAgKSxcbiAgICAgICcnLFxuICAgICAgJ0VhY2ggZW52aXJvbm1lbnQgbmVlZHMgaXRzIHJvbGUgQVJOIHNlY3JldCwgZm9yIGEgcm9sZSB0aGF0IHRydXN0cyBHaXRIdWJcXCdzIE9JREMgcHJvdmlkZXIuJyxcbiAgICBdLmpvaW4oJ1xcbicpLFxuICAgIHsgb3JkZXI6IFJlYWRtZU9yZGVyLlVTQUdFIH0sXG4gICk7XG59XG5cbi8qKlxuICogU3RlcHMgdGhhdCBpbnN0YWxsIHRoZSBwcm9qZWN0J3MgZGVwZW5kZW5jaWVzLCBtaXJyb3JpbmcgcHJvamVuJ3Mgb3duXG4gKiB3b3JrZmxvdyBzZXR1cCBidXQgd2l0aCBzZXR1cC1ub2RlIHBpbm5lZCBieSBTSEFcbiAqL1xuZnVuY3Rpb24gcGFja2FnZU1hbmFnZXJTZXR1cFN0ZXBzKFxuICBwcm9qZWN0OiBOb2RlUHJvamVjdCxcbiAgbm9kZVZlcnNpb24/OiBzdHJpbmcsXG4pOiBBcnJheTxKb2JTdGVwPiB7XG4gIGNvbnN0IHBtID0gcHJvamVjdC5wYWNrYWdlLnBhY2thZ2VNYW5hZ2VyO1xuICBjb25zdCBzdGVwcyA9IG5ldyBBcnJheTxKb2JTdGVwPigpO1xuICBpZiAocG0gPT09IE5vZGVQYWNrYWdlTWFuYWdlci5CVU4pIHtcbiAgICBzdGVwcy5wdXNoKHtcbiAgICAgIG5hbWU6ICdTZXR1cCBidW4nLFxuICAgICAgdXNlczogZ2l0aHViLkFjdGlvblJlZnMuT1ZFTl9TSF9TRVRVUF9CVU4sXG4gICAgICB3aXRoOiB7ICdidW4tdmVyc2lvbic6IHByb2plY3QucGFja2FnZS5idW5WZXJzaW9uIH0sXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgaWYgKGlzWWFybkJlcnJ5KHBtKSkge1xuICAgICAgc3RlcHMucHVzaCh7IG5hbWU6ICdFbmFibGUgY29yZXBhY2snLCBydW46ICdjb3JlcGFjayBlbmFibGUnIH0pO1xuICAgIH0gZWxzZSBpZiAocG0gPT09IE5vZGVQYWNrYWdlTWFuYWdlci5QTlBNKSB7XG4gICAgICBzdGVwcy5wdXNoKHtcbiAgICAgICAgbmFtZTogJ1NldHVwIHBucG0nLFxuICAgICAgICB1c2VzOiBnaXRodWIuQWN0aW9uUmVmcy5QTlBNX0FDVElPTl9TRVRVUCxcbiAgICAgICAgd2l0aDogeyB2ZXJzaW9uOiBwcm9qZWN0LnBhY2thZ2UucG5wbVZlcnNpb24gfSxcbiAgICAgIH0pO1xuICAgIH1cbiAgICBzdGVwcy5wdXNoKHtcbiAgICAgIG5hbWU6ICdTZXR1cCBOb2RlLmpzJyxcbiAgICAgIHVzZXM6IEFDVElPTlNfU0VUVVBfTk9ERSxcbiAgICAgIHdpdGg6IHtcbiAgICAgICAgLi4uKG5vZGVWZXJzaW9uICYmIHsgJ25vZGUtdmVyc2lvbic6IG5vZGVWZXJzaW9uIH0pLFxuICAgICAgICBjYWNoZTogaXNZYXJuQ2xhc3NpYyhwbSkgfHwgaXNZYXJuQmVycnkocG0pID8gJ3lhcm4nIDogcG0sXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG4gIHN0ZXBzLnB1c2goe1xuICAgIG5hbWU6ICdJbnN0YWxsIGRlcGVuZGVuY2llcycsXG4gICAgcnVuOiBwcm9qZWN0LnBhY2thZ2UuaW5zdGFsbENvbW1hbmQsXG4gIH0pO1xuICByZXR1cm4gc3RlcHM7XG59XG5cbi8qKlxuICogUnVucyB0aGUgcHJvamVjdCdzIGRlcGxveSB0YXNrLCBwYXNzaW5nIG9uIHRoZSBhcmd1bWVudHMgdGhhdCBmb2xsb3dcbiAqL1xuZnVuY3Rpb24gZGVwbG95Q29tbWFuZChwbTogTm9kZVBhY2thZ2VNYW5hZ2VyKSB7XG4gIGlmIChpc1lhcm5DbGFzc2ljKHBtKSB8fCBpc1lhcm5CZXJyeShwbSkpIHtcbiAgICByZXR1cm4gJ3lhcm4gZGVwbG95JztcbiAgfVxuICBzd2l0Y2ggKHBtKSB7XG4gICAgY2FzZSBOb2RlUGFja2FnZU1hbmFnZXIuTlBNOlxuICAgICAgcmV0dXJuICducG0gcnVuIGRlcGxveSAtLSc7XG4gICAgY2FzZSBOb2RlUGFja2FnZU1hbmFnZXIuUE5QTTpcbiAgICAgIC8vIGBwbnBtIGRlcGxveWAgaXMgYSBwbnBtIGNvbW1hbmQsIG5vdCB0aGUgc2NyaXB0XG4gICAgICByZXR1cm4gJ3BucG0gcnVuIGRlcGxveSc7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiAnYnVuIHJ1biBkZXBsb3knO1xuICB9XG59XG4iXX0=
@@ -1,5 +1,4 @@
1
1
  import { github, Project } from 'projen';
2
- import { Readme } from '../readme';
3
2
  export interface MergifyOptions {
4
3
  /**
5
4
  * Number of approving reviews the merge queue waits for, which should match
@@ -31,7 +30,6 @@ type MergifyProject = Project & {
31
30
  readonly buildWorkflow?: {
32
31
  readonly buildJobIds?: Array<string>;
33
32
  };
34
- readonly readme?: Readme;
35
33
  };
36
34
  /**
37
35
  * Options for projen's auto merge, which requires its approvals from every
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.autoMergeOptions = autoMergeOptions;
4
4
  exports.configureMergify = configureMergify;
5
5
  const codeql_1 = require("./codeql");
6
+ const readme_1 = require("../readme");
6
7
  /**
7
8
  * Options for projen's auto merge, which requires its approvals from every
8
9
  * author, so with trusted authors `configureMergify` requires them instead
@@ -144,11 +145,11 @@ function configureMergify(project, options = {}) {
144
145
  },
145
146
  });
146
147
  project.tryFindObjectFile('.mergify.yml')?.addOverride('merge_protections_settings.reporting_method', options.reportingMethod ?? 'deployments');
147
- project.readme?.addSection('GitHub Configuration', githubConfigurationSection({
148
+ readme_1.Readme.of(project)?.addSection('GitHub Configuration', githubConfigurationSection({
148
149
  approvedReviews,
149
150
  codeScanning,
150
151
  requiredChecks: buildJobIds,
151
152
  trustedAuthors,
152
- }));
153
+ }), { order: readme_1.ReadmeOrder.REFERENCE });
153
154
  }
154
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVyZ2lmeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL2dpdGh1Yi9tZXJnaWZ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBMkNBLDRDQVFDO0FBaUdELDRDQXNFQztBQXpORCxxQ0FBa0M7QUFzQ2xDOzs7R0FHRztBQUNILFNBQWdCLGdCQUFnQixDQUFDLE9BR2hDO0lBQ0MsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLEVBQUUsTUFBTSxFQUFFLENBQUM7UUFDcEMsT0FBTyxPQUFPLENBQUMsZ0JBQWdCLENBQUM7SUFDbEMsQ0FBQztJQUNELE9BQU8sRUFBRSxHQUFHLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxlQUFlLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDN0QsQ0FBQztBQUVELFNBQVMsVUFBVSxDQUFDLE1BQXFCO0lBQ3ZDLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxLQUFLLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDeEQsT0FBTyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUM7UUFDdEIsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEVBQUU7UUFDckUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEIsQ0FBQztBQVNELFNBQVMsZ0JBQWdCLENBQUMsTUFBMkI7SUFDbkQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUM1QixPQUFPLG1DQUFtQyxDQUFDO0lBQzdDLENBQUM7SUFDRCxJQUFJLE1BQU0sQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLENBQUM7UUFD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QUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZ2l0aHViLCBQcm9qZWN0IH0gZnJvbSAncHJvamVuJztcbmltcG9ydCB7IENvZGVRbCB9IGZyb20gJy4vY29kZXFsJztcbmltcG9ydCB7IFJlYWRtZSB9IGZyb20gJy4uL3JlYWRtZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWVyZ2lmeU9wdGlvbnMge1xuICAvKipcbiAgICogTnVtYmVyIG9mIGFwcHJvdmluZyByZXZpZXdzIHRoZSBtZXJnZSBxdWV1ZSB3YWl0cyBmb3IsIHdoaWNoIHNob3VsZCBtYXRjaFxuICAgKiBgYXV0b01lcmdlT3B0aW9ucy5hcHByb3ZlZFJldmlld3NgXG4gICAqXG4gICAqIEBkZWZhdWx0IDFcbiAgICovXG4gIHJlYWRvbmx5IGFwcHJvdmVkUmV2aWV3cz86IG51bWJlcjtcbiAgcmVhZG9ubHkgYXNzaWduVXNlcnM/OiBBcnJheTxzdHJpbmc+O1xuICByZWFkb25seSByZXBvcnRpbmdNZXRob2Q/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBBdXRob3JzIHdob3NlIHB1bGwgcmVxdWVzdHMgdGhlIG1lcmdlIHF1ZXVlIG1lcmdlcyB3aXRob3V0IGFuIGFwcHJvdmFsLCBzdWNoXG4gICAqIGFzIHRoZSBzaW5nbGUgbWFpbnRhaW5lciBvZiBhIHJlcG9zaXRvcnksIHdobyBjYW5ub3QgYXBwcm92ZSB0aGVpciBvd24gcHVsbFxuICAgKiByZXF1ZXN0cy4gUHVsbCByZXF1ZXN0cyBmcm9tIGFueW9uZSBlbHNlIHN0aWxsIG5lZWQgYGFwcHJvdmVkUmV2aWV3c2AuXG4gICAqXG4gICAqIEBkZWZhdWx0IFtdXG4gICAqL1xuICByZWFkb25seSB0cnVzdGVkQXV0aG9ycz86IEFycmF5PHN0cmluZz47XG4gIC8qKlxuICAgKiBBdXRob3Igb2YgdGhlIHByb2plbiB1cGdyYWRlIHB1bGwgcmVxdWVzdHMgdGhhdCBhcmUgYXV0b21hdGljYWxseSBhcHByb3ZlZFxuICAgKlxuICAgKiBAZGVmYXVsdCAnZW5kb3ItcHJvamVuW2JvdF0nXG4gICAqL1xuICByZWFkb25seSB1cGdyYWRlQXV0aG9yPzogc3RyaW5nO1xufVxuXG50eXBlIE1lcmdpZnlQcm9qZWN0ID0gUHJvamVjdCAmIHtcbiAgcmVhZG9ubHkgYXV0b01lcmdlPzogZ2l0aHViLkF1dG9NZXJnZTtcbiAgcmVhZG9ubHkgZ2l0aHViPzogZ2l0aHViLkdpdEh1YjtcbiAgcmVhZG9ubHkgYnVpbGRXb3JrZmxvdz86IHtcbiAgICByZWFkb25seSBidWlsZEpvYklkcz86IEFycmF5PHN0cmluZz47XG4gIH07XG4gIHJlYWRvbmx5IHJlYWRtZT86IFJlYWRtZTtcbn07XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgcHJvamVuJ3MgYXV0byBtZXJnZSwgd2hpY2ggcmVxdWlyZXMgaXRzIGFwcHJvdmFscyBmcm9tIGV2ZXJ5XG4gKiBhdXRob3IsIHNvIHdpdGggdHJ1c3RlZCBhdXRob3JzIGBjb25maWd1cmVNZXJnaWZ5YCByZXF1aXJlcyB0aGVtIGluc3RlYWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGF1dG9NZXJnZU9wdGlvbnMob3B0aW9uczoge1xuICByZWFkb25seSBhdXRvTWVyZ2VPcHRpb25zPzogZ2l0aHViLkF1dG9NZXJnZU9wdGlvbnM7XG4gIHJlYWRvbmx5IHRydXN0ZWRBdXRob3JzPzogQXJyYXk8c3RyaW5nPjtcbn0pOiBnaXRodWIuQXV0b01lcmdlT3B0aW9ucyB8IHVuZGVmaW5lZCB7XG4gIGlmICghb3B0aW9ucy50cnVzdGVkQXV0aG9ycz8ubGVuZ3RoKSB7XG4gICAgcmV0dXJuIG9wdGlvbnMuYXV0b01lcmdlT3B0aW9ucztcbiAgfVxuICByZXR1cm4geyAuLi5vcHRpb25zLmF1dG9NZXJnZU9wdGlvbnMsIGFwcHJvdmVkUmV2aWV3czogMCB9O1xufVxuXG5mdW5jdGlvbiBmb3JtYXRMaXN0KHZhbHVlczogQXJyYXk8c3RyaW5nPik6IHN0cmluZyB7XG4gIGNvbnN0IHF1b3RlZCA9IHZhbHVlcy5tYXAoKHZhbHVlKSA9PiAnYCcgKyB2YWx1ZSArICdgJyk7XG4gIHJldHVybiBxdW90ZWQubGVuZ3RoID4gMVxuICAgID8gYCR7cXVvdGVkLnNsaWNlKDAsIC0xKS5qb2luKCcsICcpfSBvciAke3F1b3RlZFtxdW90ZWQubGVuZ3RoIC0gMV19YFxuICAgIDogcXVvdGVkLmpvaW4oJycpO1xufVxuXG5pbnRlcmZhY2UgR2l0aHViQ29uZmlndXJhdGlvbiB7XG4gIHJlYWRvbmx5IGFwcHJvdmVkUmV2aWV3czogbnVtYmVyO1xuICByZWFkb25seSBjb2RlU2Nhbm5pbmc6IGJvb2xlYW47XG4gIHJlYWRvbmx5IHJlcXVpcmVkQ2hlY2tzOiBBcnJheTxzdHJpbmc+O1xuICByZWFkb25seSB0cnVzdGVkQXV0aG9yczogQXJyYXk8c3RyaW5nPjtcbn1cblxuZnVuY3Rpb24gcXVldWVEZXNjcmlwdGlvbihjb25maWc6IEdpdGh1YkNvbmZpZ3VyYXRpb24pOiBzdHJpbmcge1xuICBpZiAoIWNvbmZpZy5hcHByb3ZlZFJldmlld3MpIHtcbiAgICByZXR1cm4gXCJPbmNlIGEgcHVsbCByZXF1ZXN0J3MgY2hlY2tzIHBhc3NcIjtcbiAgfVxuICBpZiAoY29uZmlnLnRydXN0ZWRBdXRob3JzLmxlbmd0aCkge1xuICAgIHJldHVybiBgT25jZSBhIHB1bGwgcmVxdWVzdCBpcyBhcHByb3ZlZCwgb3IgaXMgb3BlbmVkIGJ5ICR7Zm9ybWF0TGlzdChjb25maWcudHJ1c3RlZEF1dGhvcnMpfSwgYW5kIGl0cyBjaGVja3MgcGFzc2A7XG4gIH1cbiAgcmV0dXJuICdPbmNlIGEgcHVsbCByZXF1ZXN0IGlzIGFwcHJvdmVkIGFuZCBpdHMgY2hlY2tzIHBhc3MnO1xufVxuXG5mdW5jdGlvbiBhcHByb3ZhbEd1aWRhbmNlKGNvbmZpZzogR2l0aHViQ29uZmlndXJhdGlvbik6IHN0cmluZyB7XG4gIGlmICghY29uZmlnLmFwcHJvdmVkUmV2aWV3cykge1xuICAgIHJldHVybiBgXG5cbioqV2FybmluZzoqKiBubyBhcHByb3ZhbHMgYXJlIHJlcXVpcmVkLCBzbyB0aGUgcXVldWUgbWVyZ2VzIGFueSBwdWxsIHJlcXVlc3Qgd2hvc2UgY2hlY2tzIHBhc3MsIGluY2x1ZGluZyBvbmUgZnJvbSBhIGZvcmsgdGhhdCBjaGFuZ2VzIHRoZSB3b3JrZmxvd3MgcHJvZHVjaW5nIHRob3NlIGNoZWNrcy4gU2V0IFxcYGF1dG9NZXJnZU9wdGlvbnMuYXBwcm92ZWRSZXZpZXdzXFxgIHRvIGF0IGxlYXN0IDEsIGFuZCB1c2UgXFxgdHJ1c3RlZEF1dGhvcnNcXGAgZm9yIG1haW50YWluZXJzIHdobyBjYW5ub3QgYXBwcm92ZSB0aGVpciBvd24gcHVsbCByZXF1ZXN0cy5gO1xuICB9XG4gIGlmICghY29uZmlnLnRydXN0ZWRBdXRob3JzLmxlbmd0aCkge1xuICAgIHJldHVybiBgXG5cbkEgcmVwb3NpdG9yeSB3aXRoIGEgc2luZ2xlIG1haW50YWluZXIsIHdobyBjYW5ub3QgYXBwcm92ZSB0aGVpciBvd24gcHVsbCByZXF1ZXN0cywgc2hvdWxkIGxpc3QgdGhlbSBpbiBcXGB0cnVzdGVkQXV0aG9yc1xcYCBpbiBcXGAucHJvamVucmMudHNcXGAuIFRoZWlyIHB1bGwgcmVxdWVzdHMgYXJlIHRoZW4gbWVyZ2VkIHdpdGhvdXQgYW4gYXBwcm92YWwsIHdoaWxlIGV2ZXJ5b25lIGVsc2UncyBzdGlsbCBuZWVkIG9uZS5gO1xuICB9XG4gIHJldHVybiAnJztcbn1cblxuZnVuY3Rpb24gZ2l0aHViQ29uZmlndXJhdGlvblNlY3Rpb24oY29uZmlnOiBHaXRodWJDb25maWd1cmF0aW9uKTogc3RyaW5nIHtcbiAgY29uc3Qgc3RhdHVzQ2hlY2tzID0gY29uZmlnLnJlcXVpcmVkQ2hlY2tzLmxlbmd0aFxuICAgID8gJ3RoZSBjaGVja3MgdGhhdCBgLm1lcmdpZnkueW1sYCB3YWl0cyBmb3I6IGAnICtcbiAgICAgIGNvbmZpZy5yZXF1aXJlZENoZWNrcy5qb2luKCdgLCBgJykgK1xuICAgICAgJ2AnXG4gICAgOiAnYW55IENJIGNoZWNrcyBhZGRlZCB0byB0aGUgcHJvamVjdCAobm9uZSBhcmUgY29uZmlndXJlZCB5ZXQpLCBrZWVwaW5nIHRoZW0gaW4gc3luYyB3aXRoIGAubWVyZ2lmeS55bWxgJztcbiAgY29uc3QgYXBwcm92YWxzID0gY29uZmlnLnRydXN0ZWRBdXRob3JzLmxlbmd0aFxuICAgID8gJzAgcmVxdWlyZWQgYXBwcm92YWxzLCBiZWNhdXNlIE1lcmdpZnkgcmVxdWlyZXMgYXBwcm92YWxzIGl0c2VsZiBmb3IgYXV0aG9ycyBvdGhlciB0aGFuICcgK1xuICAgICAgZm9ybWF0TGlzdChjb25maWcudHJ1c3RlZEF1dGhvcnMpICtcbiAgICAgICcgYW5kIGlzIGV4ZW1wdCBmcm9tIHRoaXMgcnVsZSdcbiAgICA6IGNvbmZpZy5hcHByb3ZlZFJldmlld3MgPT09IDFcbiAgICAgID8gJzEgcmVxdWlyZWQgYXBwcm92YWwnXG4gICAgICA6IGAke2NvbmZpZy5hcHByb3ZlZFJldmlld3N9IHJlcXVpcmVkIGFwcHJvdmFsc2A7XG4gIGNvbnN0IGNvZGVTY2FubmluZ1NldHRpbmdzID0gY29uZmlnLmNvZGVTY2FubmluZ1xuICAgID8gYFxuXG4jIyMgQ29kZSBzY2FubmluZ1xuXG5Db2RlUUwgcnVucyBmcm9tIFxcYC5naXRodWIvd29ya2Zsb3dzL2NvZGVxbC55bWxcXGAsIHdoaWNoIGlzIG1hbmFnZWQgYnkgcHJvamVuLiBJbiAqKlNldHRpbmdzIOKGkiBBZHZhbmNlZCBTZWN1cml0eSoqLCBsZWF2ZSBDb2RlUUwgKipEZWZhdWx0IHNldHVwKiogb2ZmLCBiZWNhdXNlIGl0IGNhbm5vdCBydW4gYWxvbmdzaWRlIHRoaXMgd29ya2Zsb3cuIFVuZGVyICoqUHJvdGVjdGlvbiBydWxlcyoqLCBrZWVwIHRoZSAqKkNoZWNrIHJ1biBmYWlsdXJlIHRocmVzaG9sZCoqIGF0ICoqSGlnaCBvciBoaWdoZXIqKiBmb3Igc2VjdXJpdHkgYWxlcnRzIGFuZCAqKkVycm9ycyoqIGZvciBvdGhlciBhbGVydHMsIGFzIHRoaXMgZGVjaWRlcyB3aGV0aGVyIHRoZSBcXGAke0NvZGVRbC5DSEVDS19OQU1FfVxcYCBjaGVjayBmYWlscy4gUHJpdmF0ZSByZXBvc2l0b3JpZXMgYWxzbyBuZWVkIEdpdEh1YiBDb2RlIFNlY3VyaXR5IGVuYWJsZWQgdGhlcmUgZm9yIGNvZGUgc2Nhbm5pbmcgcmVzdWx0cyB0byBiZSB1cGxvYWRlZC5gXG4gICAgOiAnJztcbiAgY29uc3QgY29kZVNjYW5uaW5nUnVsZSA9IGNvbmZpZy5jb2RlU2Nhbm5pbmdcbiAgICA/IGBcbiogKipSZXF1aXJlIGNvZGUgc2Nhbm5pbmcgcmVzdWx0cyoqLCB3aXRoIHRoZSB0b29sICoqQ29kZVFMKiosIHNlY3VyaXR5IGFsZXJ0cyBzZXQgdG8gKipIaWdoIG9yIGhpZ2hlcioqIGFuZCBhbGVydHMgc2V0IHRvICoqRXJyb3JzKiouIE1lcmdpZnkgaXMgZXhlbXB0IGZyb20gdGhpcyBydWxlLCBzbyBcXGAubWVyZ2lmeS55bWxcXGAgYWxzbyB3YWl0cyBmb3IgdGhlIFxcYCR7Q29kZVFsLkNIRUNLX05BTUV9XFxgIGNoZWNrIGluc3RlYWQuYFxuICAgIDogJyc7XG4gIHJldHVybiBgQWxsIHB1bGwgcmVxdWVzdHMgYXJlIG1lcmdlZCBieSB0aGUgW01lcmdpZnldKGh0dHBzOi8vbWVyZ2lmeS5jb20pIG1lcmdlIHF1ZXVlLCBjb25maWd1cmVkIGluIFxcYC5tZXJnaWZ5LnltbFxcYC4gJHtxdWV1ZURlc2NyaXB0aW9uKGNvbmZpZyl9LCBNZXJnaWZ5IHF1ZXVlcyBpdCwgYnJpbmdzIGl0IHVwIHRvIGRhdGUgd2l0aCB0aGUgZGVmYXVsdCBicmFuY2gsIHdhaXRzIGZvciB0aGUgY2hlY2tzIGFnYWluIGFuZCBzcXVhc2ggbWVyZ2VzIGl0LiBEcmFmdCBwdWxsIHJlcXVlc3RzIGFuZCB0aG9zZSBsYWJlbGxlZCBcXGBkby1ub3QtbWVyZ2VcXGAgYXJlIG5vdCBtZXJnZWQuXG5cblRoZSByZXBvc2l0b3J5IG11c3QgYmUgY29uZmlndXJlZCBhcyBiZWxvdyBzbyB0aGF0IG5vdGhpbmcgY2FuIGJlIG1lcmdlZCB3aXRob3V0IGdvaW5nIHRocm91Z2ggdGhlIHF1ZXVlLlxuXG4jIyMgTWVyZ2lmeVxuXG5JbnN0YWxsIHRoZSBbTWVyZ2lmeSBHaXRIdWIgQXBwXShodHRwczovL2dpdGh1Yi5jb20vYXBwcy9tZXJnaWZ5KSBhbmQgZ2l2ZSBpdCBhY2Nlc3MgdG8gdGhpcyByZXBvc2l0b3J5LlxuXG4jIyMgUHVsbCByZXF1ZXN0IHNldHRpbmdzXG5cbkluICoqU2V0dGluZ3Mg4oaSIEdlbmVyYWwg4oaSIFB1bGwgUmVxdWVzdHMqKjpcbiogQWxsb3cgc3F1YXNoIG1lcmdpbmcgb25seSAodW50aWNrIG1lcmdlIGNvbW1pdHMgYW5kIHJlYmFzZSBtZXJnaW5nKSwgbWF0Y2hpbmcgdGhlIHF1ZXVlJ3MgbWVyZ2UgbWV0aG9kLlxuKiBVbnRpY2sgKipBbGxvdyBhdXRvLW1lcmdlKiosIGJlY2F1c2UgR2l0SHViJ3Mgb3duIGF1dG8tbWVyZ2UgbWVyZ2VzIG91dHNpZGUgdGhlIHF1ZXVlLlxuKiBUaWNrICoqQXV0b21hdGljYWxseSBkZWxldGUgaGVhZCBicmFuY2hlcyoqLlxuXG4jIyMgQWN0aW9ucyBzZXR0aW5nc1xuXG5JbiAqKlNldHRpbmdzIOKGkiBBY3Rpb25zIOKGkiBHZW5lcmFsKiosIHNldCAqKkFwcHJvdmFsIGZvciBydW5uaW5nIGZvcmsgcHVsbCByZXF1ZXN0IHdvcmtmbG93cyBmcm9tIGNvbnRyaWJ1dG9ycyoqIHRvICoqUmVxdWlyZSBhcHByb3ZhbCBmb3IgYWxsIGV4dGVybmFsIGNvbnRyaWJ1dG9ycyoqLiBBIHB1bGwgcmVxdWVzdCBmcm9tIGEgZm9yayBydW5zIGl0cyBvd24gY29weSBvZiB0aGUgd29ya2Zsb3dzLCBzbyBpdCBjYW4gY2hhbmdlIGhvdyB0aGUgcmVxdWlyZWQgY2hlY2tzIHBhc3MuJHtjb2RlU2Nhbm5pbmdTZXR0aW5nc31cblxuIyMjIEJyYW5jaCBydWxlc2V0XG5cbkluICoqU2V0dGluZ3Mg4oaSIFJ1bGVzIOKGkiBSdWxlc2V0cyoqLCBjcmVhdGUgYSBicmFuY2ggcnVsZXNldCB3aXRoIGVuZm9yY2VtZW50ICoqQWN0aXZlKiogdGhhdCB0YXJnZXRzIHRoZSBkZWZhdWx0IGJyYW5jaCwgYW5kIHNldDpcbiogKipCeXBhc3MgbGlzdCoqOiB0aGUgKipNZXJnaWZ5KiogYXBwIG9ubHksIGluICoqRXhlbXB0KiogbW9kZS4gRG8gbm90IGFkZCBhZG1pbnMgb3Igb3RoZXIgcm9sZXMsIGFzIGFueW9uZSBvbiB0aGlzIGxpc3QgY2FuIG1lcmdlIHdpdGhvdXQgdGhlIHF1ZXVlLlxuKiAqKlJlc3RyaWN0IHVwZGF0ZXMqKjogb25seSBieXBhc3MgYWN0b3JzIGNhbiB1cGRhdGUgdGhlIGJyYW5jaCwgc28gcHVsbCByZXF1ZXN0cyBjYW5ub3QgYmUgbWVyZ2VkIGZyb20gdGhlIEdpdEh1YiBVSSBvciBDTEkgYW5kIGNvbW1pdHMgY2Fubm90IGJlIHB1c2hlZCBkaXJlY3RseS5cbiogKipSZXN0cmljdCBkZWxldGlvbnMqKiBhbmQgKipCbG9jayBmb3JjZSBwdXNoZXMqKi5cbiogKipSZXF1aXJlIGEgcHVsbCByZXF1ZXN0IGJlZm9yZSBtZXJnaW5nKiosIHdpdGggJHthcHByb3ZhbHN9LiBUaWNrICoqRGlzbWlzcyBzdGFsZSBwdWxsIHJlcXVlc3QgYXBwcm92YWxzIHdoZW4gbmV3IGNvbW1pdHMgYXJlIHB1c2hlZCoqLCBzbyB0aGF0IGNvbW1pdHMgcHVzaGVkIGFmdGVyIGFuIGFwcHJvdmFsIG5lZWQgYXBwcm92aW5nIGFnYWluIGJlZm9yZSB0aGUgcXVldWUgbWVyZ2VzIHRoZW0uXG4qICoqUmVxdWlyZSBzdGF0dXMgY2hlY2tzIHRvIHBhc3MqKiwgbGlzdGluZyAke3N0YXR1c0NoZWNrc30uIExlYXZlICoqUmVxdWlyZSBicmFuY2hlcyB0byBiZSB1cCB0byBkYXRlIGJlZm9yZSBtZXJnaW5nKiogdW50aWNrZWQsIGFzIHRoZSBxdWV1ZSBhbHJlYWR5IHVwZGF0ZXMgYW5kIHJldGVzdHMgZWFjaCBwdWxsIHJlcXVlc3QuJHtjb2RlU2Nhbm5pbmdSdWxlfVxuXG5EbyBub3QgZW5hYmxlIEdpdEh1YidzIG93biAqKlJlcXVpcmUgbWVyZ2UgcXVldWUqKiBydWxlLCBhcyBpdCBjb21wZXRlcyB3aXRoIE1lcmdpZnkuXG5cbklmIHRoZSBxdWV1ZSBpcyB1bmF2YWlsYWJsZSBhbmQgYSBjaGFuZ2UgaGFzIHRvIGJlIG1lcmdlZCwgYWRkIHlvdXJzZWxmIHRvIHRoZSBieXBhc3MgbGlzdCB0ZW1wb3JhcmlseSBhbmQgcmVtb3ZlIHlvdXJzZWxmIGFmdGVyd2FyZHMuJHthcHByb3ZhbEd1aWRhbmNlKGNvbmZpZyl9YDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbmZpZ3VyZU1lcmdpZnkoXG4gIHByb2plY3Q6IE1lcmdpZnlQcm9qZWN0LFxuICBvcHRpb25zOiBNZXJnaWZ5T3B0aW9ucyA9IHt9LFxuKSB7XG4gIGNvbnN0IG1lcmdpZnkgPSBwcm9qZWN0LmdpdGh1Yj8ubWVyZ2lmeTtcbiAgaWYgKCFtZXJnaWZ5KSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgYnVpbGRKb2JJZHMgPSBwcm9qZWN0LmJ1aWxkV29ya2Zsb3c/LmJ1aWxkSm9iSWRzID8/IFtdO1xuXG4gIHByb2plY3QuYXV0b01lcmdlPy5hZGRDb25kaXRpb25zKCctZHJhZnQnKTtcblxuICBjb25zdCBhcHByb3ZlZFJldmlld3MgPSBvcHRpb25zLmFwcHJvdmVkUmV2aWV3cyA/PyAxO1xuICBjb25zdCB0cnVzdGVkQXV0aG9ycyA9IG9wdGlvbnMudHJ1c3RlZEF1dGhvcnMgPz8gW107XG4gIGlmICh0cnVzdGVkQXV0aG9ycy5sZW5ndGggJiYgYXBwcm92ZWRSZXZpZXdzKSB7XG4gICAgY29uc3QgYXBwcm92ZWRPclRydXN0ZWQ6IGdpdGh1Yi5NZXJnaWZ5Q29uZGl0aW9uID0ge1xuICAgICAgb3I6IFtcbiAgICAgICAgYCNhcHByb3ZlZC1yZXZpZXdzLWJ5Pj0ke2FwcHJvdmVkUmV2aWV3c31gLFxuICAgICAgICAuLi50cnVzdGVkQXV0aG9ycy5tYXAoKGF1dGhvcikgPT4gYGF1dGhvcj0ke2F1dGhvcn1gKSxcbiAgICAgIF0sXG4gICAgfTtcbiAgICAvLyBwcm9qZW4gdHlwZXMgYXV0byBtZXJnZSBjb25kaXRpb25zIGFzIHN0cmluZ3MsIGJ1dCBtZXJnaWZ5IGFjY2VwdHMgb3BlcmF0b3JzIHRvb1xuICAgIHByb2plY3QuYXV0b01lcmdlPy5hZGRDb25kaXRpb25zKGFwcHJvdmVkT3JUcnVzdGVkIGFzIHVua25vd24gYXMgc3RyaW5nKTtcbiAgfVxuXG4gIC8vIE1lcmdpZnkgaXMgZXhlbXB0IGZyb20gdGhlIHJ1bGVzZXQncyBjb2RlIHNjYW5uaW5nIHJ1bGUsIHNvIHRoZSBxdWV1ZSBlbmZvcmNlcyBpdCBpbnN0ZWFkXG4gIGNvbnN0IGNvZGVTY2FubmluZyA9IHByb2plY3QuY29tcG9uZW50cy5zb21lKChjKSA9PiBjIGluc3RhbmNlb2YgQ29kZVFsKTtcbiAgaWYgKGNvZGVTY2FubmluZykge1xuICAgIHByb2plY3QuYXV0b01lcmdlPy5hZGRDb25kaXRpb25zKGBzdGF0dXMtc3VjY2Vzcz0ke0NvZGVRbC5DSEVDS19OQU1FfWApO1xuICB9XG5cbiAgbWVyZ2lmeS5hZGRSdWxlKHtcbiAgICBuYW1lOiAnQXV0b21hdGljIGFwcHJvdmFsIGZvciBwcm9qZW4gdXBncmFkZSBwdWxsIHJlcXVlc3RzJyxcbiAgICBjb25kaXRpb25zOiBbXG4gICAgICBgYXV0aG9yPSR7b3B0aW9ucy51cGdyYWRlQXV0aG9yID8/ICdlbmRvci1wcm9qZW5bYm90XSd9YCxcbiAgICAgIC4uLmJ1aWxkSm9iSWRzLm1hcCgoaWQpID0+IGBzdGF0dXMtc3VjY2Vzcz0ke2lkfWApLFxuICAgIF0sXG4gICAgYWN0aW9uczoge1xuICAgICAgcmV2aWV3OiB7XG4gICAgICAgIHR5cGU6ICdBUFBST1ZFJyxcbiAgICAgICAgbWVzc2FnZTogJ0F1dG9tYXRpY2FsbHkgYXBwcm92aW5nIHByb2plbiB1cGdyYWRlJyxcbiAgICAgIH0sXG4gICAgfSxcbiAgfSk7XG5cbiAgbWVyZ2lmeS5hZGRSdWxlKHtcbiAgICBuYW1lOiAnQXNzaWduIFBSIHdoZW4gY2hlY2sgZmFpbHMnLFxuICAgIGNvbmRpdGlvbnM6IFsnI2NoZWNrLWZhaWx1cmUgPiAwJ10sXG4gICAgYWN0aW9uczoge1xuICAgICAgYXNzaWduOiB7XG4gICAgICAgIGFkZF91c2Vyczogb3B0aW9ucy5hc3NpZ25Vc2VycyA/PyBbJ2RhdmVzaGVwaGVyZCddLFxuICAgICAgfSxcbiAgICB9LFxuICB9KTtcblxuICBwcm9qZWN0LnRyeUZpbmRPYmplY3RGaWxlKCcubWVyZ2lmeS55bWwnKT8uYWRkT3ZlcnJpZGUoXG4gICAgJ21lcmdlX3Byb3RlY3Rpb25zX3NldHRpbmdzLnJlcG9ydGluZ19tZXRob2QnLFxuICAgIG9wdGlvbnMucmVwb3J0aW5nTWV0aG9kID8/ICdkZXBsb3ltZW50cycsXG4gICk7XG5cbiAgcHJvamVjdC5yZWFkbWU/LmFkZFNlY3Rpb24oXG4gICAgJ0dpdEh1YiBDb25maWd1cmF0aW9uJyxcbiAgICBnaXRodWJDb25maWd1cmF0aW9uU2VjdGlvbih7XG4gICAgICBhcHByb3ZlZFJldmlld3MsXG4gICAgICBjb2RlU2Nhbm5pbmcsXG4gICAgICByZXF1aXJlZENoZWNrczogYnVpbGRKb2JJZHMsXG4gICAgICB0cnVzdGVkQXV0aG9ycyxcbiAgICB9KSxcbiAgKTtcbn1cbiJdfQ==
155
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVyZ2lmeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL2dpdGh1Yi9tZXJnaWZ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBMENBLDRDQVFDO0FBaUdELDRDQXVFQztBQXpORCxxQ0FBa0M7QUFDbEMsc0NBQWdEO0FBb0NoRDs7O0dBR0c7QUFDSCxTQUFnQixnQkFBZ0IsQ0FBQyxPQUdoQztJQUNDLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxFQUFFLE1BQU0sRUFBRSxDQUFDO1FBQ3BDLE9BQU8sT0FBTyxDQUFDLGdCQUFnQixDQUFDO0lBQ2xDLENBQUM7SUFDRCxPQUFPLEVBQUUsR0FBRyxPQUFPLENBQUMsZ0JBQWdCLEVBQUUsZUFBZSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzdELENBQUM7QUFFRCxTQUFTLFVBQVUsQ0FBQyxNQUFxQjtJQUN2QyxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEdBQUcsS0FBSyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQ3hELE9BQU8sTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDO1FBQ3RCLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxFQUFFO1FBQ3JFLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RCLENBQUM7QUFTRCxTQUFTLGdCQUFnQixDQUFDLE1BQTJCO0lBQ25ELElBQUksQ0FBQyxNQUFNLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDNUIsT0FBTyxtQ0FBbUMsQ0FBQztJQUM3QyxDQUFDO0lBQ0QsSUFBSSxNQUFNLENBQUMsY0FBYyxDQUFDLE1BQU0s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YztLQUNmLENBQUMsRUFDRixFQUFFLEtBQUssRUFBRSxvQkFBVyxDQUFDLFNBQVMsRUFBRSxDQUNqQyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGdpdGh1YiwgUHJvamVjdCB9IGZyb20gJ3Byb2plbic7XG5pbXBvcnQgeyBDb2RlUWwgfSBmcm9tICcuL2NvZGVxbCc7XG5pbXBvcnQgeyBSZWFkbWUsIFJlYWRtZU9yZGVyIH0gZnJvbSAnLi4vcmVhZG1lJztcblxuZXhwb3J0IGludGVyZmFjZSBNZXJnaWZ5T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBOdW1iZXIgb2YgYXBwcm92aW5nIHJldmlld3MgdGhlIG1lcmdlIHF1ZXVlIHdhaXRzIGZvciwgd2hpY2ggc2hvdWxkIG1hdGNoXG4gICAqIGBhdXRvTWVyZ2VPcHRpb25zLmFwcHJvdmVkUmV2aWV3c2BcbiAgICpcbiAgICogQGRlZmF1bHQgMVxuICAgKi9cbiAgcmVhZG9ubHkgYXBwcm92ZWRSZXZpZXdzPzogbnVtYmVyO1xuICByZWFkb25seSBhc3NpZ25Vc2Vycz86IEFycmF5PHN0cmluZz47XG4gIHJlYWRvbmx5IHJlcG9ydGluZ01ldGhvZD86IHN0cmluZztcbiAgLyoqXG4gICAqIEF1dGhvcnMgd2hvc2UgcHVsbCByZXF1ZXN0cyB0aGUgbWVyZ2UgcXVldWUgbWVyZ2VzIHdpdGhvdXQgYW4gYXBwcm92YWwsIHN1Y2hcbiAgICogYXMgdGhlIHNpbmdsZSBtYWludGFpbmVyIG9mIGEgcmVwb3NpdG9yeSwgd2hvIGNhbm5vdCBhcHByb3ZlIHRoZWlyIG93biBwdWxsXG4gICAqIHJlcXVlc3RzLiBQdWxsIHJlcXVlc3RzIGZyb20gYW55b25lIGVsc2Ugc3RpbGwgbmVlZCBgYXBwcm92ZWRSZXZpZXdzYC5cbiAgICpcbiAgICogQGRlZmF1bHQgW11cbiAgICovXG4gIHJlYWRvbmx5IHRydXN0ZWRBdXRob3JzPzogQXJyYXk8c3RyaW5nPjtcbiAgLyoqXG4gICAqIEF1dGhvciBvZiB0aGUgcHJvamVuIHVwZ3JhZGUgcHVsbCByZXF1ZXN0cyB0aGF0IGFyZSBhdXRvbWF0aWNhbGx5IGFwcHJvdmVkXG4gICAqXG4gICAqIEBkZWZhdWx0ICdlbmRvci1wcm9qZW5bYm90XSdcbiAgICovXG4gIHJlYWRvbmx5IHVwZ3JhZGVBdXRob3I/OiBzdHJpbmc7XG59XG5cbnR5cGUgTWVyZ2lmeVByb2plY3QgPSBQcm9qZWN0ICYge1xuICByZWFkb25seSBhdXRvTWVyZ2U/OiBnaXRodWIuQXV0b01lcmdlO1xuICByZWFkb25seSBnaXRodWI/OiBnaXRodWIuR2l0SHViO1xuICByZWFkb25seSBidWlsZFdvcmtmbG93Pzoge1xuICAgIHJlYWRvbmx5IGJ1aWxkSm9iSWRzPzogQXJyYXk8c3RyaW5nPjtcbiAgfTtcbn07XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgcHJvamVuJ3MgYXV0byBtZXJnZSwgd2hpY2ggcmVxdWlyZXMgaXRzIGFwcHJvdmFscyBmcm9tIGV2ZXJ5XG4gKiBhdXRob3IsIHNvIHdpdGggdHJ1c3RlZCBhdXRob3JzIGBjb25maWd1cmVNZXJnaWZ5YCByZXF1aXJlcyB0aGVtIGluc3RlYWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGF1dG9NZXJnZU9wdGlvbnMob3B0aW9uczoge1xuICByZWFkb25seSBhdXRvTWVyZ2VPcHRpb25zPzogZ2l0aHViLkF1dG9NZXJnZU9wdGlvbnM7XG4gIHJlYWRvbmx5IHRydXN0ZWRBdXRob3JzPzogQXJyYXk8c3RyaW5nPjtcbn0pOiBnaXRodWIuQXV0b01lcmdlT3B0aW9ucyB8IHVuZGVmaW5lZCB7XG4gIGlmICghb3B0aW9ucy50cnVzdGVkQXV0aG9ycz8ubGVuZ3RoKSB7XG4gICAgcmV0dXJuIG9wdGlvbnMuYXV0b01lcmdlT3B0aW9ucztcbiAgfVxuICByZXR1cm4geyAuLi5vcHRpb25zLmF1dG9NZXJnZU9wdGlvbnMsIGFwcHJvdmVkUmV2aWV3czogMCB9O1xufVxuXG5mdW5jdGlvbiBmb3JtYXRMaXN0KHZhbHVlczogQXJyYXk8c3RyaW5nPik6IHN0cmluZyB7XG4gIGNvbnN0IHF1b3RlZCA9IHZhbHVlcy5tYXAoKHZhbHVlKSA9PiAnYCcgKyB2YWx1ZSArICdgJyk7XG4gIHJldHVybiBxdW90ZWQubGVuZ3RoID4gMVxuICAgID8gYCR7cXVvdGVkLnNsaWNlKDAsIC0xKS5qb2luKCcsICcpfSBvciAke3F1b3RlZFtxdW90ZWQubGVuZ3RoIC0gMV19YFxuICAgIDogcXVvdGVkLmpvaW4oJycpO1xufVxuXG5pbnRlcmZhY2UgR2l0aHViQ29uZmlndXJhdGlvbiB7XG4gIHJlYWRvbmx5IGFwcHJvdmVkUmV2aWV3czogbnVtYmVyO1xuICByZWFkb25seSBjb2RlU2Nhbm5pbmc6IGJvb2xlYW47XG4gIHJlYWRvbmx5IHJlcXVpcmVkQ2hlY2tzOiBBcnJheTxzdHJpbmc+O1xuICByZWFkb25seSB0cnVzdGVkQXV0aG9yczogQXJyYXk8c3RyaW5nPjtcbn1cblxuZnVuY3Rpb24gcXVldWVEZXNjcmlwdGlvbihjb25maWc6IEdpdGh1YkNvbmZpZ3VyYXRpb24pOiBzdHJpbmcge1xuICBpZiAoIWNvbmZpZy5hcHByb3ZlZFJldmlld3MpIHtcbiAgICByZXR1cm4gXCJPbmNlIGEgcHVsbCByZXF1ZXN0J3MgY2hlY2tzIHBhc3NcIjtcbiAgfVxuICBpZiAoY29uZmlnLnRydXN0ZWRBdXRob3JzLmxlbmd0aCkge1xuICAgIHJldHVybiBgT25jZSBhIHB1bGwgcmVxdWVzdCBpcyBhcHByb3ZlZCwgb3IgaXMgb3BlbmVkIGJ5ICR7Zm9ybWF0TGlzdChjb25maWcudHJ1c3RlZEF1dGhvcnMpfSwgYW5kIGl0cyBjaGVja3MgcGFzc2A7XG4gIH1cbiAgcmV0dXJuICdPbmNlIGEgcHVsbCByZXF1ZXN0IGlzIGFwcHJvdmVkIGFuZCBpdHMgY2hlY2tzIHBhc3MnO1xufVxuXG5mdW5jdGlvbiBhcHByb3ZhbEd1aWRhbmNlKGNvbmZpZzogR2l0aHViQ29uZmlndXJhdGlvbik6IHN0cmluZyB7XG4gIGlmICghY29uZmlnLmFwcHJvdmVkUmV2aWV3cykge1xuICAgIHJldHVybiBgXG5cbioqV2FybmluZzoqKiBubyBhcHByb3ZhbHMgYXJlIHJlcXVpcmVkLCBzbyB0aGUgcXVldWUgbWVyZ2VzIGFueSBwdWxsIHJlcXVlc3Qgd2hvc2UgY2hlY2tzIHBhc3MsIGluY2x1ZGluZyBvbmUgZnJvbSBhIGZvcmsgdGhhdCBjaGFuZ2VzIHRoZSB3b3JrZmxvd3MgcHJvZHVjaW5nIHRob3NlIGNoZWNrcy4gU2V0IFxcYGF1dG9NZXJnZU9wdGlvbnMuYXBwcm92ZWRSZXZpZXdzXFxgIHRvIGF0IGxlYXN0IDEsIGFuZCB1c2UgXFxgdHJ1c3RlZEF1dGhvcnNcXGAgZm9yIG1haW50YWluZXJzIHdobyBjYW5ub3QgYXBwcm92ZSB0aGVpciBvd24gcHVsbCByZXF1ZXN0cy5gO1xuICB9XG4gIGlmICghY29uZmlnLnRydXN0ZWRBdXRob3JzLmxlbmd0aCkge1xuICAgIHJldHVybiBgXG5cbkEgcmVwb3NpdG9yeSB3aXRoIGEgc2luZ2xlIG1haW50YWluZXIsIHdobyBjYW5ub3QgYXBwcm92ZSB0aGVpciBvd24gcHVsbCByZXF1ZXN0cywgc2hvdWxkIGxpc3QgdGhlbSBpbiBcXGB0cnVzdGVkQXV0aG9yc1xcYCBpbiBcXGAucHJvamVucmMudHNcXGAuIFRoZWlyIHB1bGwgcmVxdWVzdHMgYXJlIHRoZW4gbWVyZ2VkIHdpdGhvdXQgYW4gYXBwcm92YWwsIHdoaWxlIGV2ZXJ5b25lIGVsc2UncyBzdGlsbCBuZWVkIG9uZS5gO1xuICB9XG4gIHJldHVybiAnJztcbn1cblxuZnVuY3Rpb24gZ2l0aHViQ29uZmlndXJhdGlvblNlY3Rpb24oY29uZmlnOiBHaXRodWJDb25maWd1cmF0aW9uKTogc3RyaW5nIHtcbiAgY29uc3Qgc3RhdHVzQ2hlY2tzID0gY29uZmlnLnJlcXVpcmVkQ2hlY2tzLmxlbmd0aFxuICAgID8gJ3RoZSBjaGVja3MgdGhhdCBgLm1lcmdpZnkueW1sYCB3YWl0cyBmb3I6IGAnICtcbiAgICAgIGNvbmZpZy5yZXF1aXJlZENoZWNrcy5qb2luKCdgLCBgJykgK1xuICAgICAgJ2AnXG4gICAgOiAnYW55IENJIGNoZWNrcyBhZGRlZCB0byB0aGUgcHJvamVjdCAobm9uZSBhcmUgY29uZmlndXJlZCB5ZXQpLCBrZWVwaW5nIHRoZW0gaW4gc3luYyB3aXRoIGAubWVyZ2lmeS55bWxgJztcbiAgY29uc3QgYXBwcm92YWxzID0gY29uZmlnLnRydXN0ZWRBdXRob3JzLmxlbmd0aFxuICAgID8gJzAgcmVxdWlyZWQgYXBwcm92YWxzLCBiZWNhdXNlIE1lcmdpZnkgcmVxdWlyZXMgYXBwcm92YWxzIGl0c2VsZiBmb3IgYXV0aG9ycyBvdGhlciB0aGFuICcgK1xuICAgICAgZm9ybWF0TGlzdChjb25maWcudHJ1c3RlZEF1dGhvcnMpICtcbiAgICAgICcgYW5kIGlzIGV4ZW1wdCBmcm9tIHRoaXMgcnVsZSdcbiAgICA6IGNvbmZpZy5hcHByb3ZlZFJldmlld3MgPT09IDFcbiAgICAgID8gJzEgcmVxdWlyZWQgYXBwcm92YWwnXG4gICAgICA6IGAke2NvbmZpZy5hcHByb3ZlZFJldmlld3N9IHJlcXVpcmVkIGFwcHJvdmFsc2A7XG4gIGNvbnN0IGNvZGVTY2FubmluZ1NldHRpbmdzID0gY29uZmlnLmNvZGVTY2FubmluZ1xuICAgID8gYFxuXG4jIyMgQ29kZSBzY2FubmluZ1xuXG5Db2RlUUwgcnVucyBmcm9tIFxcYC5naXRodWIvd29ya2Zsb3dzL2NvZGVxbC55bWxcXGAsIHdoaWNoIGlzIG1hbmFnZWQgYnkgcHJvamVuLiBJbiAqKlNldHRpbmdzIOKGkiBBZHZhbmNlZCBTZWN1cml0eSoqLCBsZWF2ZSBDb2RlUUwgKipEZWZhdWx0IHNldHVwKiogb2ZmLCBiZWNhdXNlIGl0IGNhbm5vdCBydW4gYWxvbmdzaWRlIHRoaXMgd29ya2Zsb3cuIFVuZGVyICoqUHJvdGVjdGlvbiBydWxlcyoqLCBrZWVwIHRoZSAqKkNoZWNrIHJ1biBmYWlsdXJlIHRocmVzaG9sZCoqIGF0ICoqSGlnaCBvciBoaWdoZXIqKiBmb3Igc2VjdXJpdHkgYWxlcnRzIGFuZCAqKkVycm9ycyoqIGZvciBvdGhlciBhbGVydHMsIGFzIHRoaXMgZGVjaWRlcyB3aGV0aGVyIHRoZSBcXGAke0NvZGVRbC5DSEVDS19OQU1FfVxcYCBjaGVjayBmYWlscy4gUHJpdmF0ZSByZXBvc2l0b3JpZXMgYWxzbyBuZWVkIEdpdEh1YiBDb2RlIFNlY3VyaXR5IGVuYWJsZWQgdGhlcmUgZm9yIGNvZGUgc2Nhbm5pbmcgcmVzdWx0cyB0byBiZSB1cGxvYWRlZC5gXG4gICAgOiAnJztcbiAgY29uc3QgY29kZVNjYW5uaW5nUnVsZSA9IGNvbmZpZy5jb2RlU2Nhbm5pbmdcbiAgICA/IGBcbiogKipSZXF1aXJlIGNvZGUgc2Nhbm5pbmcgcmVzdWx0cyoqLCB3aXRoIHRoZSB0b29sICoqQ29kZVFMKiosIHNlY3VyaXR5IGFsZXJ0cyBzZXQgdG8gKipIaWdoIG9yIGhpZ2hlcioqIGFuZCBhbGVydHMgc2V0IHRvICoqRXJyb3JzKiouIE1lcmdpZnkgaXMgZXhlbXB0IGZyb20gdGhpcyBydWxlLCBzbyBcXGAubWVyZ2lmeS55bWxcXGAgYWxzbyB3YWl0cyBmb3IgdGhlIFxcYCR7Q29kZVFsLkNIRUNLX05BTUV9XFxgIGNoZWNrIGluc3RlYWQuYFxuICAgIDogJyc7XG4gIHJldHVybiBgQWxsIHB1bGwgcmVxdWVzdHMgYXJlIG1lcmdlZCBieSB0aGUgW01lcmdpZnldKGh0dHBzOi8vbWVyZ2lmeS5jb20pIG1lcmdlIHF1ZXVlLCBjb25maWd1cmVkIGluIFxcYC5tZXJnaWZ5LnltbFxcYC4gJHtxdWV1ZURlc2NyaXB0aW9uKGNvbmZpZyl9LCBNZXJnaWZ5IHF1ZXVlcyBpdCwgYnJpbmdzIGl0IHVwIHRvIGRhdGUgd2l0aCB0aGUgZGVmYXVsdCBicmFuY2gsIHdhaXRzIGZvciB0aGUgY2hlY2tzIGFnYWluIGFuZCBzcXVhc2ggbWVyZ2VzIGl0LiBEcmFmdCBwdWxsIHJlcXVlc3RzIGFuZCB0aG9zZSBsYWJlbGxlZCBcXGBkby1ub3QtbWVyZ2VcXGAgYXJlIG5vdCBtZXJnZWQuXG5cblRoZSByZXBvc2l0b3J5IG11c3QgYmUgY29uZmlndXJlZCBhcyBiZWxvdyBzbyB0aGF0IG5vdGhpbmcgY2FuIGJlIG1lcmdlZCB3aXRob3V0IGdvaW5nIHRocm91Z2ggdGhlIHF1ZXVlLlxuXG4jIyMgTWVyZ2lmeVxuXG5JbnN0YWxsIHRoZSBbTWVyZ2lmeSBHaXRIdWIgQXBwXShodHRwczovL2dpdGh1Yi5jb20vYXBwcy9tZXJnaWZ5KSBhbmQgZ2l2ZSBpdCBhY2Nlc3MgdG8gdGhpcyByZXBvc2l0b3J5LlxuXG4jIyMgUHVsbCByZXF1ZXN0IHNldHRpbmdzXG5cbkluICoqU2V0dGluZ3Mg4oaSIEdlbmVyYWwg4oaSIFB1bGwgUmVxdWVzdHMqKjpcbiogQWxsb3cgc3F1YXNoIG1lcmdpbmcgb25seSAodW50aWNrIG1lcmdlIGNvbW1pdHMgYW5kIHJlYmFzZSBtZXJnaW5nKSwgbWF0Y2hpbmcgdGhlIHF1ZXVlJ3MgbWVyZ2UgbWV0aG9kLlxuKiBVbnRpY2sgKipBbGxvdyBhdXRvLW1lcmdlKiosIGJlY2F1c2UgR2l0SHViJ3Mgb3duIGF1dG8tbWVyZ2UgbWVyZ2VzIG91dHNpZGUgdGhlIHF1ZXVlLlxuKiBUaWNrICoqQXV0b21hdGljYWxseSBkZWxldGUgaGVhZCBicmFuY2hlcyoqLlxuXG4jIyMgQWN0aW9ucyBzZXR0aW5nc1xuXG5JbiAqKlNldHRpbmdzIOKGkiBBY3Rpb25zIOKGkiBHZW5lcmFsKiosIHNldCAqKkFwcHJvdmFsIGZvciBydW5uaW5nIGZvcmsgcHVsbCByZXF1ZXN0IHdvcmtmbG93cyBmcm9tIGNvbnRyaWJ1dG9ycyoqIHRvICoqUmVxdWlyZSBhcHByb3ZhbCBmb3IgYWxsIGV4dGVybmFsIGNvbnRyaWJ1dG9ycyoqLiBBIHB1bGwgcmVxdWVzdCBmcm9tIGEgZm9yayBydW5zIGl0cyBvd24gY29weSBvZiB0aGUgd29ya2Zsb3dzLCBzbyBpdCBjYW4gY2hhbmdlIGhvdyB0aGUgcmVxdWlyZWQgY2hlY2tzIHBhc3MuJHtjb2RlU2Nhbm5pbmdTZXR0aW5nc31cblxuIyMjIEJyYW5jaCBydWxlc2V0XG5cbkluICoqU2V0dGluZ3Mg4oaSIFJ1bGVzIOKGkiBSdWxlc2V0cyoqLCBjcmVhdGUgYSBicmFuY2ggcnVsZXNldCB3aXRoIGVuZm9yY2VtZW50ICoqQWN0aXZlKiogdGhhdCB0YXJnZXRzIHRoZSBkZWZhdWx0IGJyYW5jaCwgYW5kIHNldDpcbiogKipCeXBhc3MgbGlzdCoqOiB0aGUgKipNZXJnaWZ5KiogYXBwIG9ubHksIGluICoqRXhlbXB0KiogbW9kZS4gRG8gbm90IGFkZCBhZG1pbnMgb3Igb3RoZXIgcm9sZXMsIGFzIGFueW9uZSBvbiB0aGlzIGxpc3QgY2FuIG1lcmdlIHdpdGhvdXQgdGhlIHF1ZXVlLlxuKiAqKlJlc3RyaWN0IHVwZGF0ZXMqKjogb25seSBieXBhc3MgYWN0b3JzIGNhbiB1cGRhdGUgdGhlIGJyYW5jaCwgc28gcHVsbCByZXF1ZXN0cyBjYW5ub3QgYmUgbWVyZ2VkIGZyb20gdGhlIEdpdEh1YiBVSSBvciBDTEkgYW5kIGNvbW1pdHMgY2Fubm90IGJlIHB1c2hlZCBkaXJlY3RseS5cbiogKipSZXN0cmljdCBkZWxldGlvbnMqKiBhbmQgKipCbG9jayBmb3JjZSBwdXNoZXMqKi5cbiogKipSZXF1aXJlIGEgcHVsbCByZXF1ZXN0IGJlZm9yZSBtZXJnaW5nKiosIHdpdGggJHthcHByb3ZhbHN9LiBUaWNrICoqRGlzbWlzcyBzdGFsZSBwdWxsIHJlcXVlc3QgYXBwcm92YWxzIHdoZW4gbmV3IGNvbW1pdHMgYXJlIHB1c2hlZCoqLCBzbyB0aGF0IGNvbW1pdHMgcHVzaGVkIGFmdGVyIGFuIGFwcHJvdmFsIG5lZWQgYXBwcm92aW5nIGFnYWluIGJlZm9yZSB0aGUgcXVldWUgbWVyZ2VzIHRoZW0uXG4qICoqUmVxdWlyZSBzdGF0dXMgY2hlY2tzIHRvIHBhc3MqKiwgbGlzdGluZyAke3N0YXR1c0NoZWNrc30uIExlYXZlICoqUmVxdWlyZSBicmFuY2hlcyB0byBiZSB1cCB0byBkYXRlIGJlZm9yZSBtZXJnaW5nKiogdW50aWNrZWQsIGFzIHRoZSBxdWV1ZSBhbHJlYWR5IHVwZGF0ZXMgYW5kIHJldGVzdHMgZWFjaCBwdWxsIHJlcXVlc3QuJHtjb2RlU2Nhbm5pbmdSdWxlfVxuXG5EbyBub3QgZW5hYmxlIEdpdEh1YidzIG93biAqKlJlcXVpcmUgbWVyZ2UgcXVldWUqKiBydWxlLCBhcyBpdCBjb21wZXRlcyB3aXRoIE1lcmdpZnkuXG5cbklmIHRoZSBxdWV1ZSBpcyB1bmF2YWlsYWJsZSBhbmQgYSBjaGFuZ2UgaGFzIHRvIGJlIG1lcmdlZCwgYWRkIHlvdXJzZWxmIHRvIHRoZSBieXBhc3MgbGlzdCB0ZW1wb3JhcmlseSBhbmQgcmVtb3ZlIHlvdXJzZWxmIGFmdGVyd2FyZHMuJHthcHByb3ZhbEd1aWRhbmNlKGNvbmZpZyl9YDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbmZpZ3VyZU1lcmdpZnkoXG4gIHByb2plY3Q6IE1lcmdpZnlQcm9qZWN0LFxuICBvcHRpb25zOiBNZXJnaWZ5T3B0aW9ucyA9IHt9LFxuKSB7XG4gIGNvbnN0IG1lcmdpZnkgPSBwcm9qZWN0LmdpdGh1Yj8ubWVyZ2lmeTtcbiAgaWYgKCFtZXJnaWZ5KSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgYnVpbGRKb2JJZHMgPSBwcm9qZWN0LmJ1aWxkV29ya2Zsb3c/LmJ1aWxkSm9iSWRzID8/IFtdO1xuXG4gIHByb2plY3QuYXV0b01lcmdlPy5hZGRDb25kaXRpb25zKCctZHJhZnQnKTtcblxuICBjb25zdCBhcHByb3ZlZFJldmlld3MgPSBvcHRpb25zLmFwcHJvdmVkUmV2aWV3cyA/PyAxO1xuICBjb25zdCB0cnVzdGVkQXV0aG9ycyA9IG9wdGlvbnMudHJ1c3RlZEF1dGhvcnMgPz8gW107XG4gIGlmICh0cnVzdGVkQXV0aG9ycy5sZW5ndGggJiYgYXBwcm92ZWRSZXZpZXdzKSB7XG4gICAgY29uc3QgYXBwcm92ZWRPclRydXN0ZWQ6IGdpdGh1Yi5NZXJnaWZ5Q29uZGl0aW9uID0ge1xuICAgICAgb3I6IFtcbiAgICAgICAgYCNhcHByb3ZlZC1yZXZpZXdzLWJ5Pj0ke2FwcHJvdmVkUmV2aWV3c31gLFxuICAgICAgICAuLi50cnVzdGVkQXV0aG9ycy5tYXAoKGF1dGhvcikgPT4gYGF1dGhvcj0ke2F1dGhvcn1gKSxcbiAgICAgIF0sXG4gICAgfTtcbiAgICAvLyBwcm9qZW4gdHlwZXMgYXV0byBtZXJnZSBjb25kaXRpb25zIGFzIHN0cmluZ3MsIGJ1dCBtZXJnaWZ5IGFjY2VwdHMgb3BlcmF0b3JzIHRvb1xuICAgIHByb2plY3QuYXV0b01lcmdlPy5hZGRDb25kaXRpb25zKGFwcHJvdmVkT3JUcnVzdGVkIGFzIHVua25vd24gYXMgc3RyaW5nKTtcbiAgfVxuXG4gIC8vIE1lcmdpZnkgaXMgZXhlbXB0IGZyb20gdGhlIHJ1bGVzZXQncyBjb2RlIHNjYW5uaW5nIHJ1bGUsIHNvIHRoZSBxdWV1ZSBlbmZvcmNlcyBpdCBpbnN0ZWFkXG4gIGNvbnN0IGNvZGVTY2FubmluZyA9IHByb2plY3QuY29tcG9uZW50cy5zb21lKChjKSA9PiBjIGluc3RhbmNlb2YgQ29kZVFsKTtcbiAgaWYgKGNvZGVTY2FubmluZykge1xuICAgIHByb2plY3QuYXV0b01lcmdlPy5hZGRDb25kaXRpb25zKGBzdGF0dXMtc3VjY2Vzcz0ke0NvZGVRbC5DSEVDS19OQU1FfWApO1xuICB9XG5cbiAgbWVyZ2lmeS5hZGRSdWxlKHtcbiAgICBuYW1lOiAnQXV0b21hdGljIGFwcHJvdmFsIGZvciBwcm9qZW4gdXBncmFkZSBwdWxsIHJlcXVlc3RzJyxcbiAgICBjb25kaXRpb25zOiBbXG4gICAgICBgYXV0aG9yPSR7b3B0aW9ucy51cGdyYWRlQXV0aG9yID8/ICdlbmRvci1wcm9qZW5bYm90XSd9YCxcbiAgICAgIC4uLmJ1aWxkSm9iSWRzLm1hcCgoaWQpID0+IGBzdGF0dXMtc3VjY2Vzcz0ke2lkfWApLFxuICAgIF0sXG4gICAgYWN0aW9uczoge1xuICAgICAgcmV2aWV3OiB7XG4gICAgICAgIHR5cGU6ICdBUFBST1ZFJyxcbiAgICAgICAgbWVzc2FnZTogJ0F1dG9tYXRpY2FsbHkgYXBwcm92aW5nIHByb2plbiB1cGdyYWRlJyxcbiAgICAgIH0sXG4gICAgfSxcbiAgfSk7XG5cbiAgbWVyZ2lmeS5hZGRSdWxlKHtcbiAgICBuYW1lOiAnQXNzaWduIFBSIHdoZW4gY2hlY2sgZmFpbHMnLFxuICAgIGNvbmRpdGlvbnM6IFsnI2NoZWNrLWZhaWx1cmUgPiAwJ10sXG4gICAgYWN0aW9uczoge1xuICAgICAgYXNzaWduOiB7XG4gICAgICAgIGFkZF91c2Vyczogb3B0aW9ucy5hc3NpZ25Vc2VycyA/PyBbJ2RhdmVzaGVwaGVyZCddLFxuICAgICAgfSxcbiAgICB9LFxuICB9KTtcblxuICBwcm9qZWN0LnRyeUZpbmRPYmplY3RGaWxlKCcubWVyZ2lmeS55bWwnKT8uYWRkT3ZlcnJpZGUoXG4gICAgJ21lcmdlX3Byb3RlY3Rpb25zX3NldHRpbmdzLnJlcG9ydGluZ19tZXRob2QnLFxuICAgIG9wdGlvbnMucmVwb3J0aW5nTWV0aG9kID8/ICdkZXBsb3ltZW50cycsXG4gICk7XG5cbiAgUmVhZG1lLm9mKHByb2plY3QpPy5hZGRTZWN0aW9uKFxuICAgICdHaXRIdWIgQ29uZmlndXJhdGlvbicsXG4gICAgZ2l0aHViQ29uZmlndXJhdGlvblNlY3Rpb24oe1xuICAgICAgYXBwcm92ZWRSZXZpZXdzLFxuICAgICAgY29kZVNjYW5uaW5nLFxuICAgICAgcmVxdWlyZWRDaGVja3M6IGJ1aWxkSm9iSWRzLFxuICAgICAgdHJ1c3RlZEF1dGhvcnMsXG4gICAgfSksXG4gICAgeyBvcmRlcjogUmVhZG1lT3JkZXIuUkVGRVJFTkNFIH0sXG4gICk7XG59XG4iXX0=
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Section = void 0;
4
4
  const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
5
5
  class Section {
6
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-modules.Section", version: "4.4.1" };
6
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-modules.Section", version: "4.5.0" };
7
7
  options;
8
8
  constructor(options) {
9
9
  this.options = options;
@@ -0,0 +1,5 @@
1
+ import { Project } from 'projen';
2
+ /**
3
+ * Commands that install a fresh checkout's dependencies and build it
4
+ */
5
+ export declare function gettingStartedCommands(project: Project): string;
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.gettingStartedCommands = gettingStartedCommands;
4
+ const javascript_1 = require("projen/lib/javascript");
5
+ const YARN_PACKAGE_MANAGERS = [
6
+ javascript_1.NodePackageManager.YARN,
7
+ javascript_1.NodePackageManager.YARN_CLASSIC,
8
+ javascript_1.NodePackageManager.YARN2,
9
+ javascript_1.NodePackageManager.YARN_BERRY,
10
+ ];
11
+ function installCommand(project) {
12
+ if (!(project instanceof javascript_1.NodeProject)) {
13
+ // projen's install task installs the dependencies of non-node projects, such as python
14
+ return 'npx projen install';
15
+ }
16
+ const packageManager = project.package.packageManager;
17
+ return YARN_PACKAGE_MANAGERS.includes(packageManager)
18
+ ? 'yarn install'
19
+ : `${packageManager} install`;
20
+ }
21
+ /**
22
+ * Commands that install a fresh checkout's dependencies and build it
23
+ */
24
+ function gettingStartedCommands(project) {
25
+ return ['```sh', installCommand(project), 'npx projen build', '```'].join('\n');
26
+ }
27
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0dGluZy1zdGFydGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvcmVhZG1lL2dldHRpbmctc3RhcnRlZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQXdCQSx3REFJQztBQTNCRCxzREFBd0U7QUFFeEUsTUFBTSxxQkFBcUIsR0FBRztJQUM1QiwrQkFBa0IsQ0FBQyxJQUFJO0lBQ3ZCLCtCQUFrQixDQUFDLFlBQVk7SUFDL0IsK0JBQWtCLENBQUMsS0FBSztJQUN4QiwrQkFBa0IsQ0FBQyxVQUFVO0NBQzlCLENBQUM7QUFFRixTQUFTLGNBQWMsQ0FBQyxPQUFnQjtJQUN0QyxJQUFJLENBQUMsQ0FBQyxPQUFPLFlBQVksd0JBQVcsQ0FBQyxFQUFFLENBQUM7UUFDdEMsdUZBQXVGO1FBQ3ZGLE9BQU8sb0JBQW9CLENBQUM7SUFDOUIsQ0FBQztJQUNELE1BQU0sY0FBYyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDO0lBQ3RELE9BQU8scUJBQXFCLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQztRQUNuRCxDQUFDLENBQUMsY0FBYztRQUNoQixDQUFDLENBQUMsR0FBRyxjQUFjLFVBQVUsQ0FBQztBQUNsQyxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFnQixzQkFBc0IsQ0FBQyxPQUFnQjtJQUNyRCxPQUFPLENBQUMsT0FBTyxFQUFFLGNBQWMsQ0FBQyxPQUFPLENBQUMsRUFBRSxrQkFBa0IsRUFBRSxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQ3ZFLElBQUksQ0FDTCxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFByb2plY3QgfSBmcm9tICdwcm9qZW4nO1xuaW1wb3J0IHsgTm9kZVBhY2thZ2VNYW5hZ2VyLCBOb2RlUHJvamVjdCB9IGZyb20gJ3Byb2plbi9saWIvamF2YXNjcmlwdCc7XG5cbmNvbnN0IFlBUk5fUEFDS0FHRV9NQU5BR0VSUyA9IFtcbiAgTm9kZVBhY2thZ2VNYW5hZ2VyLllBUk4sXG4gIE5vZGVQYWNrYWdlTWFuYWdlci5ZQVJOX0NMQVNTSUMsXG4gIE5vZGVQYWNrYWdlTWFuYWdlci5ZQVJOMixcbiAgTm9kZVBhY2thZ2VNYW5hZ2VyLllBUk5fQkVSUlksXG5dO1xuXG5mdW5jdGlvbiBpbnN0YWxsQ29tbWFuZChwcm9qZWN0OiBQcm9qZWN0KTogc3RyaW5nIHtcbiAgaWYgKCEocHJvamVjdCBpbnN0YW5jZW9mIE5vZGVQcm9qZWN0KSkge1xuICAgIC8vIHByb2plbidzIGluc3RhbGwgdGFzayBpbnN0YWxscyB0aGUgZGVwZW5kZW5jaWVzIG9mIG5vbi1ub2RlIHByb2plY3RzLCBzdWNoIGFzIHB5dGhvblxuICAgIHJldHVybiAnbnB4IHByb2plbiBpbnN0YWxsJztcbiAgfVxuICBjb25zdCBwYWNrYWdlTWFuYWdlciA9IHByb2plY3QucGFja2FnZS5wYWNrYWdlTWFuYWdlcjtcbiAgcmV0dXJuIFlBUk5fUEFDS0FHRV9NQU5BR0VSUy5pbmNsdWRlcyhwYWNrYWdlTWFuYWdlcilcbiAgICA/ICd5YXJuIGluc3RhbGwnXG4gICAgOiBgJHtwYWNrYWdlTWFuYWdlcn0gaW5zdGFsbGA7XG59XG5cbi8qKlxuICogQ29tbWFuZHMgdGhhdCBpbnN0YWxsIGEgZnJlc2ggY2hlY2tvdXQncyBkZXBlbmRlbmNpZXMgYW5kIGJ1aWxkIGl0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXR0aW5nU3RhcnRlZENvbW1hbmRzKHByb2plY3Q6IFByb2plY3QpOiBzdHJpbmcge1xuICByZXR1cm4gWydgYGBzaCcsIGluc3RhbGxDb21tYW5kKHByb2plY3QpLCAnbnB4IHByb2plbiBidWlsZCcsICdgYGAnXS5qb2luKFxuICAgICdcXG4nLFxuICApO1xufVxuIl19
@@ -6,10 +6,65 @@ export interface ReadmeOptions {
6
6
  */
7
7
  readonly description?: string;
8
8
  }
9
+ export interface AddSectionOptions {
10
+ /**
11
+ * Position of the section in the README, lowest first. Sections with the
12
+ * same order keep the order they were added in.
13
+ *
14
+ * @default - `ReadmeOrder.DEFAULT`, or the existing order when replacing a section
15
+ */
16
+ readonly order?: number;
17
+ }
18
+ /**
19
+ * Orders of the bands of sections in the README, leaving room for sections
20
+ * in between
21
+ */
22
+ export declare class ReadmeOrder {
23
+ /**
24
+ * Sections a reader needs first, such as getting started
25
+ */
26
+ static readonly INTRODUCTION = 10;
27
+ /**
28
+ * How to use and operate the project
29
+ */
30
+ static readonly USAGE = 20;
31
+ /**
32
+ * Sections added without an order
33
+ */
34
+ static readonly DEFAULT = 50;
35
+ /**
36
+ * Reference material, such as repository configuration and known issues
37
+ */
38
+ static readonly REFERENCE = 90;
39
+ private constructor();
40
+ }
9
41
  export declare class Readme extends FileBase {
42
+ /**
43
+ * The README of a project, if it has one
44
+ */
45
+ static of(project: Project): Readme | undefined;
10
46
  description: string | undefined;
11
- sections: Array<Section>;
47
+ private readonly entries;
12
48
  constructor(project: Project, options?: ReadmeOptions);
13
- addSection(title: string, body: string): void;
49
+ /**
50
+ * The sections, in the order they appear in the README
51
+ */
52
+ get sections(): Array<Section>;
53
+ /**
54
+ * Adds a section, or replaces the section with the same title
55
+ */
56
+ addSection(title: string, body: string, options?: AddSectionOptions): void;
57
+ /**
58
+ * Removes the section with the given title
59
+ *
60
+ * @returns whether a section was removed
61
+ */
62
+ removeSection(title: string): boolean;
63
+ /**
64
+ * The section with the given title, if there is one
65
+ */
66
+ tryFindSection(title: string): Section | undefined;
14
67
  protected synthesizeContent(_: IResolver): string | undefined;
68
+ private findIndex;
69
+ private orderedEntries;
15
70
  }
@@ -1,25 +1,101 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Readme = void 0;
3
+ exports.Readme = exports.ReadmeOrder = void 0;
4
4
  const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
5
5
  const projen_1 = require("projen");
6
6
  const section_1 = require("./elements/section");
7
+ /**
8
+ * Orders of the bands of sections in the README, leaving room for sections
9
+ * in between
10
+ */
11
+ class ReadmeOrder {
12
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-modules.ReadmeOrder", version: "4.5.0" };
13
+ /**
14
+ * Sections a reader needs first, such as getting started
15
+ */
16
+ static INTRODUCTION = 10;
17
+ /**
18
+ * How to use and operate the project
19
+ */
20
+ static USAGE = 20;
21
+ /**
22
+ * Sections added without an order
23
+ */
24
+ static DEFAULT = 50;
25
+ /**
26
+ * Reference material, such as repository configuration and known issues
27
+ */
28
+ static REFERENCE = 90;
29
+ constructor() { }
30
+ }
31
+ exports.ReadmeOrder = ReadmeOrder;
7
32
  class Readme extends projen_1.FileBase {
8
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-modules.Readme", version: "4.4.1" };
33
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-modules.Readme", version: "4.5.0" };
34
+ /**
35
+ * The README of a project, if it has one
36
+ */
37
+ static of(project) {
38
+ return project.components.find((c) => c instanceof Readme);
39
+ }
9
40
  description;
10
- sections = [];
41
+ entries = [];
11
42
  constructor(project, options = {}) {
12
43
  super(project, 'README.md', {});
13
44
  this.description = options.description;
14
45
  }
15
- addSection(title, body) {
16
- this.sections.push(new section_1.Section({ title, body }));
46
+ /**
47
+ * The sections, in the order they appear in the README
48
+ */
49
+ get sections() {
50
+ return this.orderedEntries().map((e) => e.section);
51
+ }
52
+ /**
53
+ * Adds a section, or replaces the section with the same title
54
+ */
55
+ addSection(title, body, options = {}) {
56
+ const index = this.findIndex(title);
57
+ const order = options.order ??
58
+ (index >= 0 ? this.entries[index].order : ReadmeOrder.DEFAULT);
59
+ const entry = { section: new section_1.Section({ title, body }), order };
60
+ if (index >= 0) {
61
+ this.entries[index] = entry;
62
+ }
63
+ else {
64
+ this.entries.push(entry);
65
+ }
66
+ }
67
+ /**
68
+ * Removes the section with the given title
69
+ *
70
+ * @returns whether a section was removed
71
+ */
72
+ removeSection(title) {
73
+ const index = this.findIndex(title);
74
+ if (index < 0) {
75
+ return false;
76
+ }
77
+ this.entries.splice(index, 1);
78
+ return true;
79
+ }
80
+ /**
81
+ * The section with the given title, if there is one
82
+ */
83
+ tryFindSection(title) {
84
+ const index = this.findIndex(title);
85
+ return index >= 0 ? this.entries[index].section : undefined;
17
86
  }
18
87
  synthesizeContent(_) {
19
88
  let content = `# ${this.project.name}\n\n`;
20
89
  content = content.concat(this.description ? `${this.description}\n\n` : '');
21
90
  return content.concat(this.sections.map((s) => s.synth()).join('\n\n'));
22
91
  }
92
+ findIndex(title) {
93
+ return this.entries.findIndex((e) => e.section.options.title === title);
94
+ }
95
+ // Array.prototype.sort is stable, so sections with the same order keep the order they were added in
96
+ orderedEntries() {
97
+ return [...this.entries].sort((a, b) => a.order - b.order);
98
+ }
23
99
  }
24
100
  exports.Readme = Readme;
25
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tcG9uZW50cy9yZWFkbWUvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLG1DQUFzRDtBQUN0RCxnREFBNkM7QUFTN0MsTUFBYSxNQUFPLFNBQVEsaUJBQVE7O0lBQ2xDLFdBQVcsQ0FBcUI7SUFDaEMsUUFBUSxHQUFtQixFQUFFLENBQUM7SUFDOUIsWUFBWSxPQUFnQixFQUFFLFVBQXlCLEVBQUU7UUFDdkQsS0FBSyxDQUFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDaEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDO0lBQ3pDLENBQUM7SUFFRCxVQUFVLENBQUMsS0FBYSxFQUFFLElBQVk7UUFDcEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxpQkFBTyxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRVMsaUJBQWlCLENBQUMsQ0FBWTtRQUN0QyxJQUFJLE9BQU8sR0FBRyxLQUFLLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxNQUFNLENBQUM7UUFDM0MsT0FBTyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzVFLE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDMUUsQ0FBQzs7QUFoQkgsd0JBaUJDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRmlsZUJhc2UsIElSZXNvbHZlciwgUHJvamVjdCB9IGZyb20gJ3Byb2plbic7XG5pbXBvcnQgeyBTZWN0aW9uIH0gZnJvbSAnLi9lbGVtZW50cy9zZWN0aW9uJztcblxuZXhwb3J0IGludGVyZmFjZSBSZWFkbWVPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgcHJvamVjdC5cbiAgICovXG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xufVxuXG5leHBvcnQgY2xhc3MgUmVhZG1lIGV4dGVuZHMgRmlsZUJhc2Uge1xuICBkZXNjcmlwdGlvbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBzZWN0aW9uczogQXJyYXk8U2VjdGlvbj4gPSBbXTtcbiAgY29uc3RydWN0b3IocHJvamVjdDogUHJvamVjdCwgb3B0aW9uczogUmVhZG1lT3B0aW9ucyA9IHt9KSB7XG4gICAgc3VwZXIocHJvamVjdCwgJ1JFQURNRS5tZCcsIHt9KTtcbiAgICB0aGlzLmRlc2NyaXB0aW9uID0gb3B0aW9ucy5kZXNjcmlwdGlvbjtcbiAgfVxuXG4gIGFkZFNlY3Rpb24odGl0bGU6IHN0cmluZywgYm9keTogc3RyaW5nKSB7XG4gICAgdGhpcy5zZWN0aW9ucy5wdXNoKG5ldyBTZWN0aW9uKHsgdGl0bGUsIGJvZHkgfSkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHN5bnRoZXNpemVDb250ZW50KF86IElSZXNvbHZlcik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgbGV0IGNvbnRlbnQgPSBgIyAke3RoaXMucHJvamVjdC5uYW1lfVxcblxcbmA7XG4gICAgY29udGVudCA9IGNvbnRlbnQuY29uY2F0KHRoaXMuZGVzY3JpcHRpb24gPyBgJHt0aGlzLmRlc2NyaXB0aW9ufVxcblxcbmAgOiAnJyk7XG4gICAgcmV0dXJuIGNvbnRlbnQuY29uY2F0KHRoaXMuc2VjdGlvbnMubWFwKChzKSA9PiBzLnN5bnRoKCkpLmpvaW4oJ1xcblxcbicpKTtcbiAgfVxufVxuIl19
101
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tcG9uZW50cy9yZWFkbWUvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLG1DQUFzRDtBQUN0RCxnREFBNkM7QUFtQjdDOzs7R0FHRztBQUNILE1BQWEsV0FBVzs7SUFDdEI7O09BRUc7SUFDSSxNQUFNLENBQVUsWUFBWSxHQUFHLEVBQUUsQ0FBQztJQUN6Qzs7T0FFRztJQUNJLE1BQU0sQ0FBVSxLQUFLLEdBQUcsRUFBRSxDQUFDO0lBQ2xDOztPQUVHO0lBQ0ksTUFBTSxDQUFVLE9BQU8sR0FBRyxFQUFFLENBQUM7SUFDcEM7O09BRUc7SUFDSSxNQUFNLENBQVUsU0FBUyxHQUFHLEVBQUUsQ0FBQztJQUV0QyxnQkFBdUIsQ0FBQzs7QUFsQjFCLGtDQW1CQztBQU9ELE1BQWEsTUFBTyxTQUFRLGlCQUFROztJQUNsQzs7T0FFRztJQUNJLE1BQU0sQ0FBQyxFQUFFLENBQUMsT0FBZ0I7UUFDL0IsT0FBTyxPQUFPLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBZSxFQUFFLENBQUMsQ0FBQyxZQUFZLE1BQU0sQ0FBQyxDQUFDO0lBQzFFLENBQUM7SUFFRCxXQUFXLENBQXFCO0lBQ2YsT0FBTyxHQUF3QixFQUFFLENBQUM7SUFFbkQsWUFBWSxPQUFnQixFQUFFLFVBQXlCLEVBQUU7UUFDdkQsS0FBSyxDQUFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDaEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDO0lBQ3pDLENBQUM7SUFFRDs7T0FFRztJQUNILElBQUksUUFBUTtRQUNWLE9BQU8sSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFFRDs7T0FFRztJQUNILFVBQVUsQ0FBQyxLQUFhLEVBQUUsSUFBWSxFQUFFLFVBQTZCLEVBQUU7UUFDckUsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNwQyxNQUFNLEtBQUssR0FDVCxPQUFPLENBQUMsS0FBSztZQUNiLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNqRSxNQUFNLEtBQUssR0FBRyxFQUFFLE9BQU8sRUFBRSxJQUFJLGlCQUFPLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQztRQUMvRCxJQUFJLEtBQUssSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNmLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDO1FBQzlCLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDM0IsQ0FBQztJQUNILENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsYUFBYSxDQUFDLEtBQWE7UUFDekIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNwQyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNkLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUNELElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztRQUM5QixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7T0FFRztJQUNILGNBQWMsQ0FBQyxLQUFhO1FBQzFCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDcEMsT0FBTyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQzlELENBQUM7SUFFUyxpQkFBaUIsQ0FBQyxDQUFZO1FBQ3RDLElBQUksT0FBTyxHQUFHLEtBQUssSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLE1BQU0sQ0FBQztRQUMzQyxPQUFPLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDNUUsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUMxRSxDQUFDO0lBRU8sU0FBUyxDQUFDLEtBQWE7UUFDN0IsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxLQUFLLEtBQUssQ0FBQyxDQUFDO0lBQzFFLENBQUM7SUFFRCxvR0FBb0c7SUFDNUYsY0FBYztRQUNwQixPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDN0QsQ0FBQzs7QUExRUgsd0JBMkVDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRmlsZUJhc2UsIElSZXNvbHZlciwgUHJvamVjdCB9IGZyb20gJ3Byb2plbic7XG5pbXBvcnQgeyBTZWN0aW9uIH0gZnJvbSAnLi9lbGVtZW50cy9zZWN0aW9uJztcblxuZXhwb3J0IGludGVyZmFjZSBSZWFkbWVPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgcHJvamVjdC5cbiAgICovXG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFkZFNlY3Rpb25PcHRpb25zIHtcbiAgLyoqXG4gICAqIFBvc2l0aW9uIG9mIHRoZSBzZWN0aW9uIGluIHRoZSBSRUFETUUsIGxvd2VzdCBmaXJzdC4gU2VjdGlvbnMgd2l0aCB0aGVcbiAgICogc2FtZSBvcmRlciBrZWVwIHRoZSBvcmRlciB0aGV5IHdlcmUgYWRkZWQgaW4uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gYFJlYWRtZU9yZGVyLkRFRkFVTFRgLCBvciB0aGUgZXhpc3Rpbmcgb3JkZXIgd2hlbiByZXBsYWNpbmcgYSBzZWN0aW9uXG4gICAqL1xuICByZWFkb25seSBvcmRlcj86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBPcmRlcnMgb2YgdGhlIGJhbmRzIG9mIHNlY3Rpb25zIGluIHRoZSBSRUFETUUsIGxlYXZpbmcgcm9vbSBmb3Igc2VjdGlvbnNcbiAqIGluIGJldHdlZW5cbiAqL1xuZXhwb3J0IGNsYXNzIFJlYWRtZU9yZGVyIHtcbiAgLyoqXG4gICAqIFNlY3Rpb25zIGEgcmVhZGVyIG5lZWRzIGZpcnN0LCBzdWNoIGFzIGdldHRpbmcgc3RhcnRlZFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBJTlRST0RVQ1RJT04gPSAxMDtcbiAgLyoqXG4gICAqIEhvdyB0byB1c2UgYW5kIG9wZXJhdGUgdGhlIHByb2plY3RcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgVVNBR0UgPSAyMDtcbiAgLyoqXG4gICAqIFNlY3Rpb25zIGFkZGVkIHdpdGhvdXQgYW4gb3JkZXJcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgREVGQVVMVCA9IDUwO1xuICAvKipcbiAgICogUmVmZXJlbmNlIG1hdGVyaWFsLCBzdWNoIGFzIHJlcG9zaXRvcnkgY29uZmlndXJhdGlvbiBhbmQga25vd24gaXNzdWVzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFJFRkVSRU5DRSA9IDkwO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7fVxufVxuXG5pbnRlcmZhY2UgU2VjdGlvbkVudHJ5IHtcbiAgcmVhZG9ubHkgc2VjdGlvbjogU2VjdGlvbjtcbiAgcmVhZG9ubHkgb3JkZXI6IG51bWJlcjtcbn1cblxuZXhwb3J0IGNsYXNzIFJlYWRtZSBleHRlbmRzIEZpbGVCYXNlIHtcbiAgLyoqXG4gICAqIFRoZSBSRUFETUUgb2YgYSBwcm9qZWN0LCBpZiBpdCBoYXMgb25lXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG9mKHByb2plY3Q6IFByb2plY3QpOiBSZWFkbWUgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiBwcm9qZWN0LmNvbXBvbmVudHMuZmluZCgoYyk6IGMgaXMgUmVhZG1lID0+IGMgaW5zdGFuY2VvZiBSZWFkbWUpO1xuICB9XG5cbiAgZGVzY3JpcHRpb246IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSByZWFkb25seSBlbnRyaWVzOiBBcnJheTxTZWN0aW9uRW50cnk+ID0gW107XG5cbiAgY29uc3RydWN0b3IocHJvamVjdDogUHJvamVjdCwgb3B0aW9uczogUmVhZG1lT3B0aW9ucyA9IHt9KSB7XG4gICAgc3VwZXIocHJvamVjdCwgJ1JFQURNRS5tZCcsIHt9KTtcbiAgICB0aGlzLmRlc2NyaXB0aW9uID0gb3B0aW9ucy5kZXNjcmlwdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgc2VjdGlvbnMsIGluIHRoZSBvcmRlciB0aGV5IGFwcGVhciBpbiB0aGUgUkVBRE1FXG4gICAqL1xuICBnZXQgc2VjdGlvbnMoKTogQXJyYXk8U2VjdGlvbj4ge1xuICAgIHJldHVybiB0aGlzLm9yZGVyZWRFbnRyaWVzKCkubWFwKChlKSA9PiBlLnNlY3Rpb24pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBzZWN0aW9uLCBvciByZXBsYWNlcyB0aGUgc2VjdGlvbiB3aXRoIHRoZSBzYW1lIHRpdGxlXG4gICAqL1xuICBhZGRTZWN0aW9uKHRpdGxlOiBzdHJpbmcsIGJvZHk6IHN0cmluZywgb3B0aW9uczogQWRkU2VjdGlvbk9wdGlvbnMgPSB7fSkge1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5maW5kSW5kZXgodGl0bGUpO1xuICAgIGNvbnN0IG9yZGVyID1cbiAgICAgIG9wdGlvbnMub3JkZXIgPz9cbiAgICAgIChpbmRleCA+PSAwID8gdGhpcy5lbnRyaWVzW2luZGV4XS5vcmRlciA6IFJlYWRtZU9yZGVyLkRFRkFVTFQpO1xuICAgIGNvbnN0IGVudHJ5ID0geyBzZWN0aW9uOiBuZXcgU2VjdGlvbih7IHRpdGxlLCBib2R5IH0pLCBvcmRlciB9O1xuICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICB0aGlzLmVudHJpZXNbaW5kZXhdID0gZW50cnk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZW50cmllcy5wdXNoKGVudHJ5KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyB0aGUgc2VjdGlvbiB3aXRoIHRoZSBnaXZlbiB0aXRsZVxuICAgKlxuICAgKiBAcmV0dXJucyB3aGV0aGVyIGEgc2VjdGlvbiB3YXMgcmVtb3ZlZFxuICAgKi9cbiAgcmVtb3ZlU2VjdGlvbih0aXRsZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLmZpbmRJbmRleCh0aXRsZSk7XG4gICAgaWYgKGluZGV4IDwgMCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0aGlzLmVudHJpZXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgc2VjdGlvbiB3aXRoIHRoZSBnaXZlbiB0aXRsZSwgaWYgdGhlcmUgaXMgb25lXG4gICAqL1xuICB0cnlGaW5kU2VjdGlvbih0aXRsZTogc3RyaW5nKTogU2VjdGlvbiB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLmZpbmRJbmRleCh0aXRsZSk7XG4gICAgcmV0dXJuIGluZGV4ID49IDAgPyB0aGlzLmVudHJpZXNbaW5kZXhdLnNlY3Rpb24gOiB1bmRlZmluZWQ7XG4gIH1cblxuICBwcm90ZWN0ZWQgc3ludGhlc2l6ZUNvbnRlbnQoXzogSVJlc29sdmVyKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBsZXQgY29udGVudCA9IGAjICR7dGhpcy5wcm9qZWN0Lm5hbWV9XFxuXFxuYDtcbiAgICBjb250ZW50ID0gY29udGVudC5jb25jYXQodGhpcy5kZXNjcmlwdGlvbiA/IGAke3RoaXMuZGVzY3JpcHRpb259XFxuXFxuYCA6ICcnKTtcbiAgICByZXR1cm4gY29udGVudC5jb25jYXQodGhpcy5zZWN0aW9ucy5tYXAoKHMpID0+IHMuc3ludGgoKSkuam9pbignXFxuXFxuJykpO1xuICB9XG5cbiAgcHJpdmF0ZSBmaW5kSW5kZXgodGl0bGU6IHN0cmluZyk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZW50cmllcy5maW5kSW5kZXgoKGUpID0+IGUuc2VjdGlvbi5vcHRpb25zLnRpdGxlID09PSB0aXRsZSk7XG4gIH1cblxuICAvLyBBcnJheS5wcm90b3R5cGUuc29ydCBpcyBzdGFibGUsIHNvIHNlY3Rpb25zIHdpdGggdGhlIHNhbWUgb3JkZXIga2VlcCB0aGUgb3JkZXIgdGhleSB3ZXJlIGFkZGVkIGluXG4gIHByaXZhdGUgb3JkZXJlZEVudHJpZXMoKTogQXJyYXk8U2VjdGlvbkVudHJ5PiB7XG4gICAgcmV0dXJuIFsuLi50aGlzLmVudHJpZXNdLnNvcnQoKGEsIGIpID0+IGEub3JkZXIgLSBiLm9yZGVyKTtcbiAgfVxufVxuIl19