@macedon-technologies/batman 1.14.1 → 1.14.3
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/.jsii +170 -28
- package/API.md +133 -0
- package/lib/Application.d.ts +5 -0
- package/lib/Application.js +5 -1
- package/lib/BatmanProject.d.ts +5 -0
- package/lib/BatmanProject.js +4 -3
- package/lib/BootcampApplication.d.ts +5 -0
- package/lib/BootcampApplication.js +5 -1
- package/lib/BootcampProject.js +4 -3
- package/lib/CodeOwnersFile.js +1 -1
- package/lib/PrCleanupWorkflow.d.ts +5 -0
- package/lib/PrCleanupWorkflow.js +5 -3
- package/lib/PrDeployWorkflow.d.ts +5 -0
- package/lib/PrDeployWorkflow.js +16 -6
- package/lib/ProductionDeployWorkflow.d.ts +5 -0
- package/lib/ProductionDeployWorkflow.js +17 -7
- package/lib/StagingDeployWorkflow.d.ts +5 -0
- package/lib/StagingDeployWorkflow.js +17 -7
- package/lib/ViteReactProject.js +3 -16
- package/lib/WorkflowActionVersions.d.ts +37 -0
- package/lib/WorkflowActionVersions.js +17 -0
- package/lib/WorkflowAutoDiscover.js +1 -1
- package/lib/index.d.ts +1 -0
- package/lib/index.js +2 -1
- package/lib/utils.d.ts +10 -0
- package/lib/utils.js +36 -1
- package/package.json +1 -1
|
@@ -3,9 +3,14 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.StagingDeployWorkflow = void 0;
|
|
4
4
|
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
5
5
|
const projen_1 = require("projen");
|
|
6
|
+
const javascript_1 = require("projen/lib/javascript");
|
|
7
|
+
const utils_1 = require("./utils");
|
|
8
|
+
const WorkflowActionVersions_1 = require("./WorkflowActionVersions");
|
|
6
9
|
class StagingDeployWorkflow extends projen_1.YamlFile {
|
|
7
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@macedon-technologies/batman.StagingDeployWorkflow", version: "1.14.
|
|
10
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@macedon-technologies/batman.StagingDeployWorkflow", version: "1.14.3" };
|
|
8
11
|
constructor(project, options) {
|
|
12
|
+
const packageManager = project.package.packageManager;
|
|
13
|
+
const actionVersions = (0, WorkflowActionVersions_1.resolveActionVersions)(options.actionVersions);
|
|
9
14
|
super(project, '.github/workflows/staging-deploy.yml', {
|
|
10
15
|
marker: true,
|
|
11
16
|
readonly: true,
|
|
@@ -26,18 +31,23 @@ class StagingDeployWorkflow extends projen_1.YamlFile {
|
|
|
26
31
|
'steps': [
|
|
27
32
|
{
|
|
28
33
|
name: 'Checkout',
|
|
29
|
-
uses:
|
|
34
|
+
uses: actionVersions.checkout,
|
|
30
35
|
},
|
|
36
|
+
...(packageManager === javascript_1.NodePackageManager.PNPM ? [{
|
|
37
|
+
name: 'Setup pnpm',
|
|
38
|
+
uses: actionVersions.pnpmActionSetup,
|
|
39
|
+
}] : []),
|
|
31
40
|
{
|
|
32
41
|
name: 'Setup Node.js',
|
|
33
|
-
uses:
|
|
42
|
+
uses: actionVersions.setupNode,
|
|
34
43
|
with: {
|
|
35
44
|
'node-version': '24',
|
|
45
|
+
'package-manager-cache': false,
|
|
36
46
|
},
|
|
37
47
|
},
|
|
38
48
|
{
|
|
39
49
|
name: 'Configure AWS credentials',
|
|
40
|
-
uses:
|
|
50
|
+
uses: actionVersions.configureAwsCredentials,
|
|
41
51
|
with: {
|
|
42
52
|
'role-to-assume': options.roleArn,
|
|
43
53
|
'aws-region': options.awsRegion,
|
|
@@ -45,7 +55,7 @@ class StagingDeployWorkflow extends projen_1.YamlFile {
|
|
|
45
55
|
},
|
|
46
56
|
{
|
|
47
57
|
name: 'Install dependencies',
|
|
48
|
-
run:
|
|
58
|
+
run: (0, utils_1.installCommand)(packageManager),
|
|
49
59
|
},
|
|
50
60
|
{
|
|
51
61
|
name: 'Update config.json',
|
|
@@ -57,7 +67,7 @@ class StagingDeployWorkflow extends projen_1.YamlFile {
|
|
|
57
67
|
env: {
|
|
58
68
|
DB_OVERRIDE: 'staging',
|
|
59
69
|
},
|
|
60
|
-
run:
|
|
70
|
+
run: `${(0, utils_1.runScriptCommand)(packageManager, 'cdk')} deploy -e ${options.projectName}-staging --require-approval never --outputs-file cdk-outputs.json`,
|
|
61
71
|
},
|
|
62
72
|
{
|
|
63
73
|
name: 'Extract outputs',
|
|
@@ -96,4 +106,4 @@ class StagingDeployWorkflow extends projen_1.YamlFile {
|
|
|
96
106
|
}
|
|
97
107
|
}
|
|
98
108
|
exports.StagingDeployWorkflow = StagingDeployWorkflow;
|
|
99
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
109
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3RhZ2luZ0RlcGxveVdvcmtmbG93LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL1N0YWdpbmdEZXBsb3lXb3JrZmxvdy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsbUNBQWtDO0FBRWxDLHNEQUEyRDtBQUMzRCxtQ0FBMkQ7QUFDM0QscUVBQXlGO0FBY3pGLE1BQWEscUJBQXNCLFNBQVEsaUJBQVE7O0lBQ2pELFlBQVksT0FBNEIsRUFBRSxPQUFxQztRQUM3RSxNQUFNLGNBQWMsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQztRQUN0RCxNQUFNLGNBQWMsR0FBRyxJQUFBLDhDQUFxQixFQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNyRSxLQUFLLENBQUMsT0FBTyxFQUFFLHNDQUFzQyxFQUFFO1lBQ3JELE1BQU0sRUFBRSxJQUFJO1lBQ1osUUFBUSxFQUFFLElBQUk7WUFDZCxHQUFHLEVBQUU7Z0JBQ0gsSUFBSSxFQUFFLGdCQUFnQjtnQkFDdEIsRUFBRSxFQUFFO29CQUNGLElBQUksRUFBRTt3QkFDSixRQUFRLEVBQUUsQ0FBQyxNQUFNLENBQUM7cUJBQ25CO2lCQUNGO2dCQUNELFdBQVcsRUFBRTtvQkFDWCxVQUFVLEVBQUUsT0FBTztvQkFDbkIsVUFBVSxFQUFFLE1BQU07aUJBQ25CO2dCQUNELElBQUksRUFBRTtvQkFDSixNQUFNLEVBQUU7d0JBQ04sU0FBUyxFQUFFLGVBQWU7d0JBQzFCLE9BQU8sRUFBRTs0QkFDUDtnQ0FDRSxJQUFJLEVBQUUsVUFBVTtnQ0FDaEIsSUFBSSxFQUFFLGNBQWMsQ0FBQyxRQUFROzZCQUM5Qjs0QkFDRCxHQUFHLENBQUMsY0FBYyxLQUFLLCtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztvQ0FDaEQsSUFBSSxFQUFFLFlBQVk7b0NBQ2xCLElBQUksRUFBRSxjQUFjLENBQUMsZUFBZTtpQ0FDckMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7NEJBQ1I7Z0NBQ0UsSUFBSSxFQUFFLGVBQWU7Z0NBQ3JCLElBQUksRUFBRSxjQUFjLENBQUMsU0FBUztnQ0FDOUIsSUFBSSxFQUFFO29DQUNKLGNBQWMsRUFBRSxJQUFJO29DQUNwQix1QkFBdUIsRUFBRSxLQUFLO2lDQUMvQjs2QkFDRjs0QkFDRDtnQ0FDRSxJQUFJLEVBQUUsMkJBQTJCO2dDQUNqQyxJQUFJLEVBQUUsY0FBYyxDQUFDLHVCQUF1QjtnQ0FDNUMsSUFBSSxFQUFFO29DQUNKLGdCQUFnQixFQUFFLE9BQU8sQ0FBQyxPQUFPO29DQUNqQyxZQUFZLEVBQUUsT0FBTyxDQUFDLFNBQVM7aUNBQ2hDOzZCQUNGOzRCQUNEO2dDQUNFLElBQUksRUFBRSxzQkFBc0I7Z0NBQzVCLEdBQUcsRUFBRSxJQUFBLHNCQUFjLEVBQUMsY0FBYyxDQUFDOzZCQUNwQzs0QkFDRDtnQ0FDRSxJQUFJLEVBQUUsb0JBQW9CO2dDQUMxQixHQUFHLEVBQUUsK0JBQStCLE9BQU8sQ0FBQyxtQkFBbUIsNEVBQTRFOzZCQUM1STs0QkFDRDtnQ0FDRSxJQUFJLEVBQUUsbUJBQW1CO2dDQUN6QixFQUFFLEVBQUUsUUFBUTtnQ0FDWixHQUFHLEVBQUU7b0NBQ0gsV0FBVyxFQUFFLFNBQVM7aUNBQ3ZCO2dDQUNELEdBQUcsRUFBRSxHQUFHLElBQUEsd0JBQWdCLEVBQUMsY0FBYyxFQUFFLEtBQUssQ0FBQyxjQUFjLE9BQU8sQ0FBQyxXQUFXLG1FQUFtRTs2QkFDcEo7NEJBQ0Q7Z0NBQ0UsSUFBSSxFQUFFLGlCQUFpQjtnQ0FDdkIsRUFBRSxFQUFFLFNBQVM7Z0NBQ2IsR0FBRyxFQUFFO29DQUNILHNFQUFzRTtvQ0FDdEUsbURBQW1EO29DQUNuRCxrQ0FBa0M7aUNBQ25DLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQzs2QkFDYjs0QkFDRDtnQ0FDRSxJQUFJLEVBQUUsY0FBYztnQ0FDcEIsRUFBRSxFQUFFLFVBQVU7Z0NBQ2QsR0FBRyxFQUFFO29DQUNILDRCQUE0QjtvQ0FDNUIsY0FBYztvQ0FDZCxxQ0FBcUM7b0NBQ3JDLGtCQUFrQjtvQ0FDbEIsSUFBSTtvQ0FDSix3REFBd0Q7b0NBQ3hELGlJQUFpSTtvQ0FDakksZ0NBQWdDO29DQUNoQyw2REFBNkQ7b0NBQzdELElBQUk7b0NBQ0osd0RBQXdEO29DQUN4RCxnRUFBZ0U7b0NBQ2hFLDRDQUE0QztvQ0FDNUMsMklBQTJJO2lDQUM1SSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7NkJBQ2I7eUJBQ0Y7cUJBQ0Y7aUJBQ0Y7YUFDRjtTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7O0FBaEdILHNEQWlHQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFlhbWxGaWxlIH0gZnJvbSAncHJvamVuJztcbmltcG9ydCB7IEF3c0Nka1R5cGVTY3JpcHRBcHAgfSBmcm9tICdwcm9qZW4vbGliL2F3c2Nkayc7XG5pbXBvcnQgeyBOb2RlUGFja2FnZU1hbmFnZXIgfSBmcm9tICdwcm9qZW4vbGliL2phdmFzY3JpcHQnO1xuaW1wb3J0IHsgaW5zdGFsbENvbW1hbmQsIHJ1blNjcmlwdENvbW1hbmQgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IHJlc29sdmVBY3Rpb25WZXJzaW9ucywgV29ya2Zsb3dBY3Rpb25WZXJzaW9ucyB9IGZyb20gJy4vV29ya2Zsb3dBY3Rpb25WZXJzaW9ucyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RhZ2luZ0RlcGxveVdvcmtmbG93T3B0aW9ucyB7XG4gIHJlYWRvbmx5IHJvbGVBcm46IHN0cmluZztcbiAgcmVhZG9ubHkgYXdzUmVnaW9uOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHByb2plY3ROYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGNsZXJrUHVibGlzaGFibGVLZXk6IHN0cmluZztcblxuICAvKipcbiAgICogT3ZlcnJpZGVzIGZvciB0aGUgcGlubmVkIGFjdGlvbiB2ZXJzaW9ucyB1c2VkIGJ5IHRoaXMgd29ya2Zsb3cuXG4gICAqL1xuICByZWFkb25seSBhY3Rpb25WZXJzaW9ucz86IFdvcmtmbG93QWN0aW9uVmVyc2lvbnM7XG59XG5cbmV4cG9ydCBjbGFzcyBTdGFnaW5nRGVwbG95V29ya2Zsb3cgZXh0ZW5kcyBZYW1sRmlsZSB7XG4gIGNvbnN0cnVjdG9yKHByb2plY3Q6IEF3c0Nka1R5cGVTY3JpcHRBcHAsIG9wdGlvbnM6IFN0YWdpbmdEZXBsb3lXb3JrZmxvd09wdGlvbnMpIHtcbiAgICBjb25zdCBwYWNrYWdlTWFuYWdlciA9IHByb2plY3QucGFja2FnZS5wYWNrYWdlTWFuYWdlcjtcbiAgICBjb25zdCBhY3Rpb25WZXJzaW9ucyA9IHJlc29sdmVBY3Rpb25WZXJzaW9ucyhvcHRpb25zLmFjdGlvblZlcnNpb25zKTtcbiAgICBzdXBlcihwcm9qZWN0LCAnLmdpdGh1Yi93b3JrZmxvd3Mvc3RhZ2luZy1kZXBsb3kueW1sJywge1xuICAgICAgbWFya2VyOiB0cnVlLFxuICAgICAgcmVhZG9ubHk6IHRydWUsXG4gICAgICBvYmo6IHtcbiAgICAgICAgbmFtZTogJ1N0YWdpbmcgRGVwbG95JyxcbiAgICAgICAgb246IHtcbiAgICAgICAgICBwdXNoOiB7XG4gICAgICAgICAgICBicmFuY2hlczogWydtYWluJ10sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgcGVybWlzc2lvbnM6IHtcbiAgICAgICAgICAnaWQtdG9rZW4nOiAnd3JpdGUnLFxuICAgICAgICAgICdjb250ZW50cyc6ICdyZWFkJyxcbiAgICAgICAgfSxcbiAgICAgICAgam9iczoge1xuICAgICAgICAgIGRlcGxveToge1xuICAgICAgICAgICAgJ3J1bnMtb24nOiAndWJ1bnR1LWxhdGVzdCcsXG4gICAgICAgICAgICAnc3RlcHMnOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnQ2hlY2tvdXQnLFxuICAgICAgICAgICAgICAgIHVzZXM6IGFjdGlvblZlcnNpb25zLmNoZWNrb3V0LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAuLi4ocGFja2FnZU1hbmFnZXIgPT09IE5vZGVQYWNrYWdlTWFuYWdlci5QTlBNID8gW3tcbiAgICAgICAgICAgICAgICBuYW1lOiAnU2V0dXAgcG5wbScsXG4gICAgICAgICAgICAgICAgdXNlczogYWN0aW9uVmVyc2lvbnMucG5wbUFjdGlvblNldHVwLFxuICAgICAgICAgICAgICB9XSA6IFtdKSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdTZXR1cCBOb2RlLmpzJyxcbiAgICAgICAgICAgICAgICB1c2VzOiBhY3Rpb25WZXJzaW9ucy5zZXR1cE5vZGUsXG4gICAgICAgICAgICAgICAgd2l0aDoge1xuICAgICAgICAgICAgICAgICAgJ25vZGUtdmVyc2lvbic6ICcyNCcsXG4gICAgICAgICAgICAgICAgICAncGFja2FnZS1tYW5hZ2VyLWNhY2hlJzogZmFsc2UsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdDb25maWd1cmUgQVdTIGNyZWRlbnRpYWxzJyxcbiAgICAgICAgICAgICAgICB1c2VzOiBhY3Rpb25WZXJzaW9ucy5jb25maWd1cmVBd3NDcmVkZW50aWFscyxcbiAgICAgICAgICAgICAgICB3aXRoOiB7XG4gICAgICAgICAgICAgICAgICAncm9sZS10by1hc3N1bWUnOiBvcHRpb25zLnJvbGVBcm4sXG4gICAgICAgICAgICAgICAgICAnYXdzLXJlZ2lvbic6IG9wdGlvbnMuYXdzUmVnaW9uLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnSW5zdGFsbCBkZXBlbmRlbmNpZXMnLFxuICAgICAgICAgICAgICAgIHJ1bjogaW5zdGFsbENvbW1hbmQocGFja2FnZU1hbmFnZXIpLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ1VwZGF0ZSBjb25maWcuanNvbicsXG4gICAgICAgICAgICAgICAgcnVuOiBganEgJy5jbGVya1B1Ymxpc2hhYmxlS2V5ID0gXCIke29wdGlvbnMuY2xlcmtQdWJsaXNoYWJsZUtleX1cIicgd2ViL3B1YmxpYy9jb25maWcuanNvbiA+IHRtcC5qc29uICYmIG12IHRtcC5qc29uIHdlYi9wdWJsaWMvY29uZmlnLmpzb25gLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ0RlcGxveSB0byBzdGFnaW5nJyxcbiAgICAgICAgICAgICAgICBpZDogJ2RlcGxveScsXG4gICAgICAgICAgICAgICAgZW52OiB7XG4gICAgICAgICAgICAgICAgICBEQl9PVkVSUklERTogJ3N0YWdpbmcnLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgcnVuOiBgJHtydW5TY3JpcHRDb21tYW5kKHBhY2thZ2VNYW5hZ2VyLCAnY2RrJyl9IGRlcGxveSAtZSAke29wdGlvbnMucHJvamVjdE5hbWV9LXN0YWdpbmcgLS1yZXF1aXJlLWFwcHJvdmFsIG5ldmVyIC0tb3V0cHV0cy1maWxlIGNkay1vdXRwdXRzLmpzb25gLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ0V4dHJhY3Qgb3V0cHV0cycsXG4gICAgICAgICAgICAgICAgaWQ6ICdvdXRwdXRzJyxcbiAgICAgICAgICAgICAgICBydW46IFtcbiAgICAgICAgICAgICAgICAgICdXRUJTSVRFX1VSTD0kKGpxIC1yIFxcJy5bXSB8IC5XZWJzaXRlVXJsIC8vIGVtcHR5XFwnIGNkay1vdXRwdXRzLmpzb24pJyxcbiAgICAgICAgICAgICAgICAgICdlY2hvIFwid2Vic2l0ZV91cmw9JFdFQlNJVEVfVVJMXCIgPj4gJEdJVEhVQl9PVVRQVVQnLFxuICAgICAgICAgICAgICAgICAgJ2VjaG8gXCJXZWJzaXRlIFVSTDogJFdFQlNJVEVfVVJMXCInLFxuICAgICAgICAgICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnTm90aWZ5IFNsYWNrJyxcbiAgICAgICAgICAgICAgICBpZjogJ2Fsd2F5cygpJyxcbiAgICAgICAgICAgICAgICBydW46IFtcbiAgICAgICAgICAgICAgICAgICdTVEFUVVM9XCIke3sgam9iLnN0YXR1cyB9fVwiJyxcbiAgICAgICAgICAgICAgICAgICdDT0xPUj1cImdvb2RcIicsXG4gICAgICAgICAgICAgICAgICAnaWYgWyBcIiRTVEFUVVNcIiAhPSBcInN1Y2Nlc3NcIiBdOyB0aGVuJyxcbiAgICAgICAgICAgICAgICAgICcgIENPTE9SPVwiZGFuZ2VyXCInLFxuICAgICAgICAgICAgICAgICAgJ2ZpJyxcbiAgICAgICAgICAgICAgICAgICdXRUJTSVRFX1VSTD1cIiR7eyBzdGVwcy5vdXRwdXRzLm91dHB1dHMud2Vic2l0ZV91cmwgfX1cIicsXG4gICAgICAgICAgICAgICAgICAnTUVTU0FHRT1cIlN0YWdpbmcgRGVwbG95OiAkU1RBVFVTXFxcXG5SZXBvOiAke3sgZ2l0aHViLnJlcG9zaXRvcnkgfX1cXFxcbkJyYW5jaDogJHt7IGdpdGh1Yi5yZWZfbmFtZSB9fVxcXFxuQ29tbWl0OiAke3sgZ2l0aHViLnNoYSB9fVwiJyxcbiAgICAgICAgICAgICAgICAgICdpZiBbIC1uIFwiJFdFQlNJVEVfVVJMXCIgXTsgdGhlbicsXG4gICAgICAgICAgICAgICAgICAnICBNRVNTQUdFPVwiJE1FU1NBR0VcXFxcbvCfjJAgV2Vic2l0ZTogPCRXRUJTSVRFX1VSTHxWaWV3IFNpdGU+XCInLFxuICAgICAgICAgICAgICAgICAgJ2ZpJyxcbiAgICAgICAgICAgICAgICAgICdjdXJsIC1YIFBPU1QgaHR0cHM6Ly9zbGFjay5jb20vYXBpL2NoYXQucG9zdE1lc3NhZ2UgXFxcXCcsXG4gICAgICAgICAgICAgICAgICAnICAtSCBcIkF1dGhvcml6YXRpb246IEJlYXJlciAke3sgc2VjcmV0cy5TTEFDS19CT1RfVE9LRU4gfX1cIiBcXFxcJyxcbiAgICAgICAgICAgICAgICAgICcgIC1IIFxcJ0NvbnRlbnQtdHlwZTogYXBwbGljYXRpb24vanNvblxcJyBcXFxcJyxcbiAgICAgICAgICAgICAgICAgICcgIC0tZGF0YSBcIntcXFxcXCJjaGFubmVsXFxcXFwiOlxcXFxcIiR7eyBzZWNyZXRzLlNMQUNLX0NIQU5ORUxfSUQgfX1cXFxcXCIsXFxcXFwiYXR0YWNobWVudHNcXFxcXCI6W3tcXFxcXCJjb2xvclxcXFxcIjpcXFxcXCIkQ09MT1JcXFxcXCIsXFxcXFwidGV4dFxcXFxcIjpcXFxcXCIkTUVTU0FHRVxcXFxcIn1dfVwiJyxcbiAgICAgICAgICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxufVxuIl19
|
package/lib/ViteReactProject.js
CHANGED
|
@@ -3,21 +3,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.ViteReactProject = void 0;
|
|
4
4
|
const path_1 = require("path");
|
|
5
5
|
const projen_1 = require("projen");
|
|
6
|
-
const javascript_1 = require("projen/lib/javascript");
|
|
7
6
|
const typescript_1 = require("projen/lib/typescript");
|
|
8
|
-
|
|
9
|
-
switch (packageManager) {
|
|
10
|
-
case javascript_1.NodePackageManager.NPM:
|
|
11
|
-
return `npm run ${script}`;
|
|
12
|
-
case javascript_1.NodePackageManager.BUN:
|
|
13
|
-
return `bun run ${script}`;
|
|
14
|
-
case javascript_1.NodePackageManager.PNPM:
|
|
15
|
-
return `pnpm ${script}`;
|
|
16
|
-
default:
|
|
17
|
-
// all yarn variants (yarn, yarn2, yarn_classic, yarn_berry) share the `yarn` binary
|
|
18
|
-
return `yarn ${script}`;
|
|
19
|
-
}
|
|
20
|
-
}
|
|
7
|
+
const utils_1 = require("./utils");
|
|
21
8
|
/**
|
|
22
9
|
* Vite + React TypeScript project
|
|
23
10
|
*/
|
|
@@ -104,7 +91,7 @@ class ViteReactProject extends typescript_1.TypeScriptAppProject {
|
|
|
104
91
|
const relativeOutdir = this.parent
|
|
105
92
|
? (0, path_1.relative)(this.parent.outdir, this.outdir)
|
|
106
93
|
: (0, path_1.basename)(this.outdir);
|
|
107
|
-
this.devCommand = `cd ${relativeOutdir} && ${runScriptCommand(this.package.packageManager, 'dev')}`;
|
|
94
|
+
this.devCommand = `cd ${relativeOutdir} && ${(0, utils_1.runScriptCommand)(this.package.packageManager, 'dev')}`;
|
|
108
95
|
}
|
|
109
96
|
/**
|
|
110
97
|
* Add a custom field to the Config type
|
|
@@ -680,4 +667,4 @@ html, body, #root {
|
|
|
680
667
|
});
|
|
681
668
|
}
|
|
682
669
|
}
|
|
683
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVml0ZVJlYWN0UHJvamVjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9WaXRlUmVhY3RQcm9qZWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLCtCQUEwQztBQUMxQyxtQ0FBc0Y7QUFDdEYsc0RBQTJEO0FBQzNELHNEQUF1RjtBQUd2RixTQUFTLGdCQUFnQixDQUFDLGNBQWtDLEVBQUUsTUFBYztJQUMxRSxRQUFRLGNBQWMsRUFBRSxDQUFDO1FBQ3ZCLEtBQUssK0JBQWtCLENBQUMsR0FBRztZQUN6QixPQUFPLFdBQVcsTUFBTSxFQUFFLENBQUM7UUFDN0IsS0FBSywrQkFBa0IsQ0FBQyxHQUFHO1lBQ3pCLE9BQU8sV0FBVyxNQUFNLEVBQUUsQ0FBQztRQUM3QixLQUFLLCtCQUFrQixDQUFDLElBQUk7WUFDMUIsT0FBTyxRQUFRLE1BQU0sRUFBRSxDQUFDO1FBQzFCO1lBQ0Usb0ZBQW9GO1lBQ3BGLE9BQU8sUUFBUSxNQUFNLEVBQUUsQ0FBQztJQUM1QixDQUFDO0FBQ0gsQ0FBQztBQTRCRDs7R0FFRztBQUNILE1BQWEsZ0JBQWlCLFNBQVEsaUNBQW9CO0lBQ3hDLE1BQU0sQ0FBUztJQUNmLFNBQVMsQ0FBUztJQUNsQixVQUFVLENBQVM7SUFDbEIsWUFBWSxDQUFzQjtJQUVuRCxZQUFZLE9BQWdDO1FBQzFDLE1BQU0sRUFDSixVQUFVLEdBQUcsSUFBSSxFQUNqQixNQUFNLEdBQUcsS0FBSyxFQUNkLFNBQVMsR0FBRyxRQUFRLEVBQ3BCLEtBQUssRUFDTCxHQUFHLFdBQVcsRUFDZixHQUFHLE9BQU8sQ0FBQztRQUNaLEtBQUssQ0FBQztZQUNKLEdBQUcsV0FBVztZQUNkLFVBQVUsRUFBRSxLQUFLLEVBQUUscUNBQXFDO1lBQ3hELE1BQU0sRUFBRSxLQUFLLEVBQUUsbUNBQW1DO1lBQ2xELElBQUksRUFBRSxLQUFLLEVBQUUsNkJBQTZCO1lBQzFDLE9BQU8sRUFBRSxJQUFJO1lBQ2IsZUFBZSxFQUFFLElBQUksRUFB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QUcsT0FBTyxDQUFDLE1BQU0sWUFBWSxFQUFFO1lBQ3JELFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0F3RGY7U0FDSSxDQUFDLENBQUM7SUFFTCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByZWxhdGl2ZSwgYmFzZW5hbWUgfSBmcm9tICdwYXRoJztcbmltcG9ydCB7IENvbXBvbmVudCwgRmlsZUJhc2UsIEpzb25GaWxlLCBQcm9qZWN0LCBTYW1wbGVGaWxlLCBUZXh0RmlsZSB9IGZyb20gJ3Byb2plbic7XG5pbXBvcnQgeyBOb2RlUGFja2FnZU1hbmFnZXIgfSBmcm9tICdwcm9qZW4vbGliL2phdmFzY3JpcHQnO1xuaW1wb3J0IHsgVHlwZVNjcmlwdEFwcFByb2plY3QsIFR5cGVTY3JpcHRQcm9qZWN0T3B0aW9ucyB9IGZyb20gJ3Byb2plbi9saWIvdHlwZXNjcmlwdCc7XG5pbXBvcnQgeyBCYXRtYW5Qcm9qZWN0IH0gZnJvbSAnLi9CYXRtYW5Qcm9qZWN0JztcblxuZnVuY3Rpb24gcnVuU2NyaXB0Q29tbWFuZChwYWNrYWdlTWFuYWdlcjogTm9kZVBhY2thZ2VNYW5hZ2VyLCBzY3JpcHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHN3aXRjaCAocGFja2FnZU1hbmFnZXIpIHtcbiAgICBjYXNlIE5vZGVQYWNrYWdlTWFuYWdlci5OUE06XG4gICAgICByZXR1cm4gYG5wbSBydW4gJHtzY3JpcHR9YDtcbiAgICBjYXNlIE5vZGVQYWNrYWdlTWFuYWdlci5CVU46XG4gICAgICByZXR1cm4gYGJ1biBydW4gJHtzY3JpcHR9YDtcbiAgICBjYXNlIE5vZGVQYWNrYWdlTWFuYWdlci5QTlBNOlxuICAgICAgcmV0dXJuIGBwbnBtICR7c2NyaXB0fWA7XG4gICAgZGVmYXVsdDpcbiAgICAgIC8vIGFsbCB5YXJuIHZhcmlhbnRzICh5YXJuLCB5YXJuMiwgeWFybl9jbGFzc2ljLCB5YXJuX2JlcnJ5KSBzaGFyZSB0aGUgYHlhcm5gIGJpbmFyeVxuICAgICAgcmV0dXJuIGB5YXJuICR7c2NyaXB0fWA7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBWaXRlUmVhY3RQcm9qZWN0T3B0aW9ucyBleHRlbmRzIFR5cGVTY3JpcHRQcm9qZWN0T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGdlbmVyYXRlIHNhbXBsZSBjb2RlXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IHNhbXBsZUNvZGU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBTb3VyY2UgZGlyZWN0b3J5XG4gICAqIEBkZWZhdWx0IFwic3JjXCJcbiAgICovXG4gIHJlYWRvbmx5IHNyY2Rpcj86IHN0cmluZztcblxuICAvKipcbiAgICogUHVibGljIGRpcmVjdG9yeSBmb3Igc3RhdGljIGFzc2V0c1xuICAgKiBAZGVmYXVsdCBcInB1YmxpY1wiXG4gICAqL1xuICByZWFkb25seSBwdWJsaWNEaXI/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRpdGxlIGZvciB0aGUgSFRNTCBwYWdlXG4gICAqIEBkZWZhdWx0IHByb2plY3QgbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgdGl0bGU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogVml0ZSArIFJlYWN0IFR5cGVTY3JpcHQgcHJvamVjdFxuICovXG5leHBvcnQgY2xhc3MgVml0ZVJlYWN0UHJvamVjdCBleHRlbmRzIFR5cGVTY3JpcHRBcHBQcm9qZWN0IHtcbiAgcHVibGljIHJlYWRvbmx5IHNyY2Rpcjogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgcHVibGljRGlyOiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBkZXZDb21tYW5kOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgY29uZmlnRmllbGRzOiBNYXA8c3RyaW5nLCBzdHJpbmc+O1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IFZpdGVSZWFjdFByb2plY3RPcHRpb25zKSB7XG4gICAgY29uc3Qge1xuICAgICAgc2FtcGxlQ29kZSA9IHRydWUsXG4gICAgICBzcmNkaXIgPSAnc3JjJyxcbiAgICAgIHB1YmxpY0RpciA9ICdwdWJsaWMnLFxuICAgICAgdGl0bGUsXG4gICAgICAuLi5yZXN0T3B0aW9uc1xuICAgIH0gPSBvcHRpb25zO1xuICAgIHN1cGVyKHtcbiAgICAgIC4uLnJlc3RPcHRpb25zLFxuICAgICAgc2FtcGxlQ29kZTogZmFsc2UsIC8vIFdlJ2xsIGhhbmRsZSBzYW1wbGUgY29kZSBvdXJzZWx2ZXNcbiAgICAgIGVzbGludDogZmFsc2UsIC8vIFdlJ2xsIGNvbmZpZ3VyZSBlc2xpbnQgb3Vyc2VsdmVzXG4gICAgICBqZXN0OiBmYWxzZSwgLy8gVml0ZSB1c2VzIHZpdGVzdCB0eXBpY2FsbHlcbiAgICAgIHBhY2thZ2U6IHRydWUsXG4gICAgICBkaXNhYmxlVHNjb25maWc6IHRydWUsIC8vIFdlJ2xsIG1hbmFnZSB0c2NvbmZpZyBvdXJzZWx2ZXNcbiAgICAgIHBhY2thZ2VNYW5hZ2VyOiAocmVzdE9wdGlvbnMucGFyZW50IGFzIEJhdG1hblByb2plY3QpLnBhY2thZ2UucGFja2FnZU1hbmFnZXIsXG4gICAgICBwbnBtT3B0aW9uczoge1xuICAgICAgICB3b3Jrc3BhY2VZYW1sT3B0aW9uczoge1xuICAgICAgICAgIC8vIFRoaXMgc3VicHJvamVjdCBoYXMgaXRzIG93biBzZXBhcmF0ZSBsb2NrZmlsZS9zdG9yZSBmcm9tIGl0cyBwYXJlbnQsXG4gICAgICAgICAgLy8gc28gaXQgbmVlZHMgaXRzIG93biBhcHByb3ZhbCBmb3IgdGhlIG5hdGl2ZSBwb3N0aW5zdGFsbCBzY3JpcHRzIGl0c1xuICAgICAgICAgIC8vIGZpeGVkIGRlcGVuZGVuY3kgc2V0IGFsd2F5cyBuZWVkcyAoZXNidWlsZCdzIGJpbmFyeSBkb3dubG9hZCwgYW5kXG4gICAgICAgICAgLy8gQGNsZXJrL2NsZXJrLXJlYWN0J3MgdHJhbnNpdGl2ZSBAY2xlcmsvc2hhcmVkIHNldHVwIHNjcmlwdCkuXG4gICAgICAgICAgYWxsb3dCdWlsZHM6IHtcbiAgICAgICAgICAgICdlc2J1aWxkJzogdHJ1ZSxcbiAgICAgICAgICAgICdAY2xlcmsvc2hhcmVkJzogdHJ1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIC4uLnJlc3RPcHRpb25zLnBucG1PcHRpb25zPy53b3Jrc3BhY2VZYW1sT3B0aW9ucyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBkZXBzOiBbXG4gICAgICAgICdAY2xlcmsvY2xlcmstcmVhY3QnLFxuICAgICAgICAnQHRhbnN0YWNrL3JlYWN0LXF1ZXJ5JyxcbiAgICAgICAgJ0B0YWlsd2luZGNzcy9wb3N0Y3NzJyxcbiAgICAgICAgJ2F1dG9wcmVmaXhlcicsXG4gICAgICAgICdwb3N0Y3NzJyxcbiAgICAgICAgJ3RhaWx3aW5kY3NzJyxcbiAgICAgICAgJ3JvbGx1cCcsXG4gICAgICAgIC4uLihvcHRpb25zLmRlcHMgPyBvcHRpb25zLmRlcHMgOiBbXSksXG4gICAgICBdLFxuICAgIH0pO1xuXG4gICAgLy8gSW5pdGlhbGl6ZSBjb25maWcgZmllbGRzIHN0b3JhZ2VcbiAgICB0aGlzLmNvbmZpZ0ZpZWxkcyA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG5cbiAgICB0aGlzLnNyY2RpciA9IHNyY2RpcjtcbiAgICB0aGlzLnB1YmxpY0RpciA9IHB1YmxpY0RpcjtcblxuICAgIC8vIEFkZCBWaXRlIGNvbXBvbmVudFxuICAgIG5ldyBWaXRlQ29tcG9uZW50KHRoaXMsIHtcbiAgICAgIHNyY2RpcjogdGhpcy5zcmNkaXIsXG4gICAgfSk7XG5cbiAgICAvLyBBZGQgRVNMaW50IGNvbmZpZ3VyYXRpb25cbiAgICBuZXcgVml0ZUVzbGludENvbmZpZyh0aGlzKTtcblxuICAgIC8vIEFkZCBpbmRleC5odG1sXG4gICAgbmV3IEluZGV4SHRtbCh0aGlzLCB7XG4gICAgICB0aXRsZTogdGl0bGUgPz8gdGhpcy5uYW1lLFxuICAgICAgc3JjZGlyOiB0aGlzLnNyY2RpcixcbiAgICB9KTtcblxuICAgIC8vIEFkZCBUeXBlU2NyaXB0IGNvbmZpZ3NcbiAgICBuZXcgVml0ZVRzQ29uZmlncyh0aGlzLCB7XG4gICAgICBzcmNkaXI6IHRoaXMuc3JjZGlyLFxuICAgIH0pO1xuXG4gICAgLy8gQWRkIC5naXRpZ25vcmUgZW50cmllc1xuICAgIHRoaXMuZ2l0aWdub3JlPy5hZGRQYXR0ZXJucygnZGlzdCcsICdkaXN0LXNzcicsICcqLmxvY2FsJyk7XG5cbiAgICAvLyBBZGQgdml0ZS1lbnYuZC50cyBmb3IgdHlwZSBkZWNsYXJhdGlvbnNcbiAgICBuZXcgVml0ZUVudkR0cyh0aGlzLCB7XG4gICAgICBzcmNkaXI6IHRoaXMuc3JjZGlyLFxuICAgIH0pO1xuXG4gICAgLy8gQWRkIFBvc3RDU1MgY29uZmlnIGZvciBUYWlsd2luZFxuICAgIG5ldyBQb3N0Q1NTQ29uZmlnRmlsZSh0aGlzKTtcblxuICAgIC8vIEFkZCBjb25maWcudHMgZm9yIHJ1bnRpbWUgY29uZmlndXJhdGlvblxuICAgIG5ldyBDb25maWdGaWxlKHRoaXMsIHtcbiAgICAgIHNyY2RpcjogdGhpcy5zcmNkaXIsXG4gICAgfSk7XG5cbiAgICAvLyBBZGQgc2FtcGxlIGNvbmZpZy5qc29uXG4gICAgbmV3IENvbmZpZ0pzb25GaWxlKHRoaXMsIHsgfSk7XG5cblxuICAgIC8vIEFkZCBzYW1wbGUgY29kZSBpZiByZXF1ZXN0ZWRcbiAgICBpZiAoc2FtcGxlQ29kZSkge1xuICAgICAgbmV3IFZpdGVTYW1wbGVDb2RlKHRoaXMsIHtcbiAgICAgICAgc3JjZGlyOiB0aGlzLnNyY2RpcixcbiAgICAgICAgcHVibGljRGlyOiB0aGlzLnB1YmxpY0RpcixcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIFVzZSByZWxhdGl2ZSBwYXRoIGZvciBkZXZDb21tYW5kXG4gICAgY29uc3QgcmVsYXRpdmVPdXRkaXIgPSB0aGlzLnBhcmVudFxuICAgICAgPyByZWxhdGl2ZSh0aGlzLnBhcmVudC5vdXRkaXIsIHRoaXMub3V0ZGlyKVxuICAgICAgOiBiYXNlbmFtZSh0aGlzLm91dGRpcik7XG4gICAgdGhpcy5kZXZDb21tYW5kID0gYGNkICR7cmVsYXRpdmVPdXRkaXJ9ICYmICR7cnVuU2NyaXB0Q29tbWFuZCh0aGlzLnBhY2thZ2UucGFja2FnZU1hbmFnZXIsICdkZXYnKX1gO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIGN1c3RvbSBmaWVsZCB0byB0aGUgQ29uZmlnIHR5cGVcbiAgICogQHBhcmFtIGZpZWxkTmFtZSBUaGUgbmFtZSBvZiB0aGUgZmllbGRcbiAgICogQHBhcmFtIGZpZWxkVHlwZSBUaGUgVHlwZVNjcmlwdCB0eXBlIG9mIHRoZSBmaWVsZCAoZS5nLiwgJ3N0cmluZycsICdudW1iZXInLCAnYm9vbGVhbicsICdzdHJpbmdbXScpXG4gICAqIEByZXR1cm5zIHRoaXMgcHJvamVjdCBpbnN0YW5jZSBmb3IgY2hhaW5pbmdcbiAgICovXG4gIGFkZENvbmZpZ0ZpZWxkKGZpZWxkTmFtZTogc3RyaW5nLCBmaWVsZFR5cGU6IHN0cmluZyk6IHRoaXMge1xuICAgIHRoaXMuY29uZmlnRmllbGRzLnNldChmaWVsZE5hbWUsIGZpZWxkVHlwZSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBjb25maWcgZmllbGRzIG1hcCAoZm9yIGludGVybmFsIHVzZSBieSBDb25maWdGaWxlKVxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGdldENvbmZpZ0ZpZWxkcygpOiBNYXA8c3RyaW5nLCBzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5jb25maWdGaWVsZHM7XG4gIH1cbn1cblxuaW50ZXJmYWNlIFZpdGVDb21wb25lbnRPcHRpb25zIHtcbiAgcmVhZG9ubHkgc3JjZGlyOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ29uZmlndXJlcyBWaXRlIGRlcGVuZGVuY2llcyBhbmQgc2NyaXB0c1xuICovXG5jbGFzcyBWaXRlQ29tcG9uZW50IGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IocHJvamVjdDogVHlwZVNjcmlwdEFwcFByb2plY3QsIF9vcHRpb25zOiBWaXRlQ29tcG9uZW50T3B0aW9ucykge1xuICAgIHN1cGVyKHByb2plY3QpO1xuXG4gICAgY29uc3QgdHNQcm9qZWN0ID0gcHJvamVjdCBhcyBUeXBlU2NyaXB0QXBwUHJvamVjdDtcblxuICAgIC8vIFNldCBwYWNrYWdlIHR5cGUgdG8gbW9kdWxlIGZvciBFU00gc3VwcG9ydFxuICAgIHRzUHJvamVjdC5wYWNrYWdlLmFkZEZpZWxkKCd0eXBlJywgJ21vZHVsZScpO1xuXG4gICAgLy8gQWRkIFJlYWN0IGRlcGVuZGVuY2llc1xuICAgIHRzUHJvamVjdC5hZGREZXBzKCdyZWFjdEBeMTkuMi4wJywgJ3JlYWN0LWRvbUBeMTkuMi4wJyk7XG5cbiAgICAvLyBBZGQgZGV2IGRlcGVuZGVuY2llc1xuICAgIHRzUHJvamVjdC5hZGREZXZEZXBzKFxuICAgICAgJ0B0eXBlcy9yZWFjdEBeMTkuMi4yJyxcbiAgICAgICdAdHlwZXMvcmVhY3QtZG9tQF4xOS4yLjInLFxuICAgICAgJ0B2aXRlanMvcGx1Z2luLXJlYWN0QF41LjEuMCcsXG4gICAgICAndml0ZUBeNS40LjAnLFxuICAgICAgJ3R5cGVzY3JpcHRAfjUuOS4zJyxcbiAgICAgICdAZXNsaW50L2pzQF45LjM5LjEnLFxuICAgICAgJ2VzbGludEBeOS4zOS4xJyxcbiAgICAgICdlc2xpbnQtcGx1Z2luLXJlYWN0LWhvb2tzQF41LjIuMCcsXG4gICAgICAnZXNsaW50LXBsdWdpbi1yZWFjdC1yZWZyZXNoQF4wLjQuMjQnLFxuICAgICAgJ2dsb2JhbHNAXjE2LjUuMCcsXG4gICAgICAndHlwZXNjcmlwdC1lc2xpbnRAXjguNDYuMycsXG4gICAgKTtcblxuICAgIC8vIENyZWF0ZSB2aXRlLmNvbmZpZy50cyBhcyBhIG1hbmFnZWQgZmlsZVxuICAgIG5ldyBWaXRlQ29uZmlnRmlsZShwcm9qZWN0KTtcblxuICAgIC8vIEFkZCBzY3JpcHRzXG4gICAgdHNQcm9qZWN0LmFkZFRhc2soJ2RldicsIHtcbiAgICAgIGRlc2NyaXB0aW9uOiAnU3RhcnQgZGV2ZWxvcG1lbnQgc2VydmVyJyxcbiAgICAgIGV4ZWM6ICd2aXRlJyxcbiAgICB9KTtcblxuICAgIC8vIFJlbW92ZSBhbmQgcmVjcmVhdGUgYnVpbGQgdGFzayB0byBjdXN0b21pemUgaXQgZm9yIFZpdGVcbiAgICB0c1Byb2plY3QucmVtb3ZlVGFzaygnYnVpbGQnKTtcbiAgICB0c1Byb2plY3QuYWRkVGFzaygnYnVpbGQnLCB7XG4gICAgICBkZXNjcmlwdGlvbjogJ0J1aWxkIGZvciBwcm9kdWN0aW9uJyxcbiAgICAgIGV4ZWM6ICd0c2MgLWIgJiYgdml0ZSBidWlsZCcsXG4gICAgfSk7XG5cbiAgICB0c1Byb2plY3QuYWRkVGFzaygncHJldmlldycsIHtcbiAgICAgIGRlc2NyaXB0aW9uOiAnUHJldmlldyBwcm9kdWN0aW9uIGJ1aWxkJyxcbiAgICAgIGV4ZWM6ICd2aXRlIHByZXZpZXcnLFxuICAgIH0pO1xuXG4gICAgdHNQcm9qZWN0LmFkZFRhc2soJ2xpbnQnLCB7XG4gICAgICBkZXNjcmlwdGlvbjogJ0xpbnQgY29kZScsXG4gICAgICBleGVjOiAnZXNsaW50IC4nLFxuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogQ3JlYXRlcyB0aGUgRVNMaW50IGNvbmZpZ3VyYXRpb24gZm9yIFZpdGUgKyBSZWFjdFxuICovXG5jbGFzcyBWaXRlRXNsaW50Q29uZmlnIGV4dGVuZHMgRmlsZUJhc2Uge1xuICBjb25zdHJ1Y3Rvcihwcm9qZWN0OiBQcm9qZWN0KSB7XG4gICAgc3VwZXIocHJvamVjdCwgJ2VzbGludC5jb25maWcuanMnLCB7XG4gICAgICBtYXJrZXI6IHRydWUsXG4gICAgICByZWFkb25seTogdHJ1ZSxcbiAgICB9KTtcbiAgfVxuXG4gIHN5bnRoZXNpemVDb250ZW50KCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIGBpbXBvcnQganMgZnJvbSAnQGVzbGludC9qcydcbmltcG9ydCBnbG9iYWxzIGZyb20gJ2dsb2JhbHMnXG5pbXBvcnQgcmVhY3RIb29rcyBmcm9tICdlc2xpbnQtcGx1Z2luLXJlYWN0LWhvb2tzJ1xuaW1wb3J0IHJlYWN0UmVmcmVzaCBmcm9tICdlc2xpbnQtcGx1Z2luLXJlYWN0LXJlZnJlc2gnXG5pbXBvcnQgdHNlc2xpbnQgZnJvbSAndHlwZXNjcmlwdC1lc2xpbnQnXG5cbmV4cG9ydCBkZWZhdWx0IFtcbiAgeyBpZ25vcmVzOiBbJ2Rpc3QnXSB9LFxuICB7XG4gICAgZmlsZXM6IFsnKiovKi57dHMsdHN4fSddLFxuICAgIGxhbmd1YWdlT3B0aW9uczoge1xuICAgICAgZWNtYVZlcnNpb246IDIwMjAsXG4gICAgICBnbG9iYWxzOiBnbG9iYWxzLmJyb3dzZXIsXG4gICAgfSxcbiAgICBwbHVnaW5zOiB7XG4gICAgICAncmVhY3QtaG9va3MnOiByZWFjdEhvb2tzLFxuICAgICAgJ3JlYWN0LXJlZnJlc2gnOiByZWFjdFJlZnJlc2gsXG4gICAgfSxcbiAgICBydWxlczoge1xuICAgICAgLi4ucmVhY3RIb29rcy5jb25maWdzLnJlY29tbWVuZGVkLnJ1bGVzLFxuICAgICAgJ3JlYWN0LXJlZnJlc2gvb25seS1leHBvcnQtY29tcG9uZW50cyc6IFtcbiAgICAgICAgJ3dhcm4nLFxuICAgICAgICB7IGFsbG93Q29uc3RhbnRFeHBvcnQ6IHRydWUgfSxcbiAgICAgIF0sXG4gICAgfSxcbiAgfSxcbiAganMuY29uZmlncy5yZWNvbW1lbmRlZCxcbiAgLi4udHNlc2xpbnQuY29uZmlncy5yZWNvbW1lbmRlZCxcbl1cbmA7XG4gIH1cbn1cblxuLyoqXG4gKiBDcmVhdGVzIHRoZSB2aXRlLmNvbmZpZy50cyBmaWxlXG4gKi9cbmNsYXNzIFZpdGVDb25maWdGaWxlIGV4dGVuZHMgRmlsZUJhc2Uge1xuICBjb25zdHJ1Y3Rvcihwcm9qZWN0OiBQcm9qZWN0KSB7XG4gICAgc3VwZXIocHJvamVjdCwgJ3ZpdGUuY29uZmlnLnRzJywge1xuICAgICAgbWFya2VyOiB0cnVlLFxuICAgICAgcmVhZG9ubHk6IHRydWUsXG4gICAgfSk7XG4gIH1cblxuICBzeW50aGVzaXplQ29udGVudCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiBgaW1wb3J0IHsgZGVmaW5lQ29uZmlnIH0gZnJvbSAndml0ZSdcbmltcG9ydCByZWFjdCBmcm9tICdAdml0ZWpzL3BsdWdpbi1yZWFjdCdcblxuLy8gaHR0cHM6Ly92aXRlLmRldi9jb25maWcvXG5leHBvcnQgZGVmYXVsdCBkZWZpbmVDb25maWcoe1xuICBwbHVnaW5zOiBbcmVhY3QoKV0sXG59KVxuYDtcbiAgfVxufVxuXG4vKipcbiAqIENyZWF0ZXMgdGhlIHBvc3Rjc3MuY29uZmlnLmpzIGZpbGUgZm9yIFRhaWx3aW5kIENTUyB2NFxuICovXG5jbGFzcyBQb3N0Q1NTQ29uZmlnRmlsZSBleHRlbmRzIEZpbGVCYXNlIHtcbiAgY29uc3RydWN0b3IocHJvamVjdDogUHJvamVjdCkge1xuICAgIHN1cGVyKHByb2plY3QsICdwb3N0Y3NzLmNvbmZpZy5qcycsIHtcbiAgICAgIG1hcmtlcjogdHJ1ZSxcbiAgICAgIHJlYWRvbmx5OiB0cnVlLFxuICAgIH0pO1xuICB9XG5cbiAgc3ludGhlc2l6ZUNvbnRlbnQoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gYGV4cG9ydCBkZWZhdWx0IHtcbiAgcGx1Z2luczoge1xuICAgIFwiQHRhaWx3aW5kY3NzL3Bvc3Rjc3NcIjoge30sXG4gICAgYXV0b3ByZWZpeGVyOiB7fSxcbiAgfSxcbn1cbmA7XG4gIH1cbn1cblxuaW50ZXJmYWNlIFZpdGVFbnZEdHNPcHRpb25zIHtcbiAgcmVhZG9ubHkgc3JjZGlyOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ3JlYXRlcyB0aGUgdml0ZS1lbnYuZC50cyBmaWxlIGZvciB0eXBlIGRlY2xhcmF0aW9uc1xuICovXG5jbGFzcyBWaXRlRW52RHRzIGV4dGVuZHMgRmlsZUJhc2Uge1xuICBjb25zdHJ1Y3Rvcihwcm9qZWN0OiBQcm9qZWN0LCBvcHRpb25zOiBWaXRlRW52RHRzT3B0aW9ucykge1xuICAgIHN1cGVyKHByb2plY3QsIGAke29wdGlvbnMuc3JjZGlyfS92aXRlLWVudi5kLnRzYCwge1xuICAgICAgbWFya2VyOiB0cnVlLFxuICAgICAgcmVhZG9ubHk6IHRydWUsXG4gICAgfSk7XG4gIH1cblxuICBzeW50aGVzaXplQ29udGVudCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiBgLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCJ2aXRlL2NsaWVudFwiIC8+XG5gO1xuICB9XG59XG5cbmludGVyZmFjZSBDb25maWdGaWxlT3B0aW9ucyB7XG4gIHJlYWRvbmx5IHNyY2Rpcjogc3RyaW5nO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgdGhlIGNvbmZpZy50cyBmaWxlIGZvciBydW50aW1lIGNvbmZpZ3VyYXRpb25cbiAqL1xuY2xhc3MgQ29uZmlnRmlsZSBleHRlbmRzIEZpbGVCYXNlIHtcbiAgY29uc3RydWN0b3IocHJvamVjdDogUHJvamVjdCwgb3B0aW9uczogQ29uZmlnRmlsZU9wdGlvbnMpIHtcbiAgICBzdXBlcihwcm9qZWN0LCBgJHtvcHRpb25zLnNyY2Rpcn0vY29uZmlnLnRzYCwge1xuICAgICAgbWFya2VyOiB0cnVlLFxuICAgICAgcmVhZG9ubHk6IHRydWUsXG4gICAgfSk7XG4gIH1cblxuICBzeW50aGVzaXplQ29udGVudCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIC8vIEdldCBjdXN0b20gY29uZmlnIGZpZWxkcyBmcm9tIHBhcmVudCBwcm9qZWN0XG4gICAgY29uc3Qgdml0ZVByb2plY3QgPSB0aGlzLnByb2plY3QgYXMgVml0ZVJlYWN0UHJvamVjdDtcbiAgICBjb25zdCBjdXN0b21GaWVsZHMgPSB2aXRlUHJvamVjdC5nZXRDb25maWdGaWVsZHMoKTtcblxuICAgIC8vIEdlbmVyYXRlIGJhc2UgY29uZmlnIHR5cGVcbiAgICBjb25zdCBiYXNlQ29uZmlnVHlwZSA9IGB0eXBlIEJhc2VDb25maWcgPSB7XG4gIGNsZXJrUHVibGlzaGFibGVLZXk6IHN0cmluZztcbiAgYXBpQmFzZVVybDogc3RyaW5nO1xuICB0aW1lb3V0OiBudW1iZXI7XG59YDtcblxuICAgIC8vIEdlbmVyYXRlIGN1c3RvbSBmaWVsZHMgdHlwZSBpZiBhbnkgZXhpc3RcbiAgICBsZXQgY29uZmlnVHlwZURlZmluaXRpb246IHN0cmluZztcbiAgICBpZiAoY3VzdG9tRmllbGRzLnNpemUgPiAwKSB7XG4gICAgICBjb25zdCBmaWVsZERlZmluaXRpb25zID0gQXJyYXkuZnJvbShjdXN0b21GaWVsZHMuZW50cmllcygpKVxuICAgICAgICAubWFwKChbbmFtZSwgdHlwZV0pID0+IGAgICR7bmFtZX06ICR7dHlwZX07YClcbiAgICAgICAgLmpvaW4oJ1xcbicpO1xuXG4gICAgICBjb25zdCBjdXN0b21GaWVsZHNUeXBlID0gYHR5cGUgQ3VzdG9tQ29uZmlnID0ge1xuJHtmaWVsZERlZmluaXRpb25zfVxufWA7XG5cbiAgICAgIGNvbmZpZ1R5cGVEZWZpbml0aW9uID0gYCR7Y3VzdG9tRmllbGRzVHlwZX1cblxuZXhwb3J0IHR5cGUgQ29uZmlnID0gQmFzZUNvbmZpZyAmIEN1c3RvbUNvbmZpZztgO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25maWdUeXBlRGVmaW5pdGlvbiA9ICdleHBvcnQgdHlwZSBDb25maWcgPSBCYXNlQ29uZmlnOyc7XG4gICAgfVxuXG4gICAgcmV0dXJuIGBpbXBvcnQgeyB1c2VFZmZlY3QsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuXG4ke2Jhc2VDb25maWdUeXBlfVxuXG4ke2NvbmZpZ1R5cGVEZWZpbml0aW9ufVxuXG5leHBvcnQgZnVuY3Rpb24gdXNlQ29uZmlnKCkge1xuICBjb25zdCBbbG9hZGVkQ29uZmlnLCBzZXRMb2FkZWRDb25maWddID0gdXNlU3RhdGU8Q29uZmlnfHVuZGVmaW5lZD4oKTtcbiAgY29uc3QgW2lzTG9hZGluZywgc2V0SXNMb2FkaW5nXSA9IHVzZVN0YXRlKGZhbHNlKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghbG9hZGVkQ29uZmlnKSB7XG4gICAgICBmZXRjaCgnL2NvbmZpZy5qc29uJywgeyBjYWNoZTogJ25vLXN0b3JlJyB9KS50aGVuKHJlc3BvbnNlPT57XG4gICAgICAgIHJlc3BvbnNlLmpzb24oKS50aGVuKChjb25maWcpID0+IHtcbiAgICAgICAgICBzZXRJc0xvYWRpbmcoZmFsc2UpXG4gICAgICAgICAgc2V0TG9hZGVkQ29uZmlnKGNvbmZpZylcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgIH1cbiAgfSwgW2xvYWRlZENvbmZpZ10pO1xuXG4gIHJldHVybiB7IGNvbmZpZzogbG9hZGVkQ29uZmlnLCBpc0xvYWRpbmcgfTtcbn1cbmA7XG4gIH1cbn1cblxuaW50ZXJmYWNlIENvbmZpZ0pzb25GaWxlT3B0aW9ucyB7fVxuXG4vKipcbiAqIENyZWF0ZXMgdGhlIGNvbmZpZy5qc29uIHNhbXBsZSBmaWxlIGZvciBydW50aW1lIGNvbmZpZ3VyYXRpb25cbiAqL1xuY2xhc3MgQ29uZmlnSnNvbkZpbGUgZXh0ZW5kcyBTYW1wbGVGaWxlIHtcbiAgcGF0aDogc3RyaW5nO1xuICBjb25zdHJ1Y3Rvcihwcm9qZWN0OiBWaXRlUmVhY3RQcm9qZWN0LCBfb3B0aW9uczogQ29uZmlnSnNvbkZpbGVPcHRpb25zKSB7XG4gICAgc3VwZXIocHJvamVjdCwgYCR7cHJvamVjdC5wdWJsaWNEaXJ9L2NvbmZpZy5qc29uYCwge1xuICAgICAgY29udGVudHM6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgYXBpQmFzZVVybDogJ2h0dHA6Ly9sb2NhbGhvc3Q6MzAwMC9hcGknLFxuICAgICAgICBjbGVya1B1Ymxpc2hhYmxlS2V5OiAndGJkJyxcbiAgICAgIH0sIG51bGwsIDIpLFxuICAgIH0pO1xuICAgIHRoaXMucGF0aCA9IGAke3Byb2plY3QucHVibGljRGlyfS9jb25maWcuanNvbmA7XG4gIH1cbn1cblxuaW50ZXJmYWNlIEluZGV4SHRtbE9wdGlvbnMge1xuICByZWFkb25seSB0aXRsZTogc3RyaW5nO1xuICByZWFkb25seSBzcmNkaXI6IHN0cmluZztcbn1cblxuLyoqXG4gKiBDcmVhdGVzIHRoZSBpbmRleC5odG1sIGZpbGVcbiAqL1xuY2xhc3MgSW5kZXhIdG1sIGV4dGVuZHMgU2FtcGxlRmlsZSB7XG4gIGNvbnN0cnVjdG9yKHByb2plY3Q6IFByb2plY3QsIG9wdGlvbnM6IEluZGV4SHRtbE9wdGlvbnMpIHtcbiAgICBzdXBlcihwcm9qZWN0LCAnaW5kZXguaHRtbCcsIHtcbiAgICAgIGNvbnRlbnRzOiBgPCFkb2N0eXBlIGh0bWw+XG48aHRtbCBsYW5nPVwiZW5cIj5cbiAgPGhlYWQ+XG4gICAgPG1ldGEgY2hhcnNldD1cIlVURi04XCIgLz5cbiAgICA8bGluayByZWw9XCJpY29uXCIgdHlwZT1cImltYWdlL3N2Zyt4bWxcIiBocmVmPVwiL3ZpdGUuc3ZnXCIgLz5cbiAgICA8bWV0YSBuYW1lPVwidmlld3BvcnRcIiBjb250ZW50PVwid2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMFwiIC8+XG4gICAgPHRpdGxlPiR7b3B0aW9ucy50aXRsZX08L3RpdGxlPlxuICA8L2hlYWQ+XG4gIDxib2R5PlxuICAgIDxkaXYgaWQ9XCJyb290XCI+PC9kaXY+XG4gICAgPHNjcmlwdCB0eXBlPVwibW9kdWxlXCIgc3JjPVwiLyR7b3B0aW9ucy5zcmNkaXJ9L21haW4udHN4XCI+PC9zY3JpcHQ+XG4gIDwvYm9keT5cbjwvaHRtbD5cbmAsXG4gICAgfSk7XG4gIH1cbn1cblxuaW50ZXJmYWNlIFZpdGVUc0NvbmZpZ3NPcHRpb25zIHtcbiAgcmVhZG9ubHkgc3JjZGlyOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ3JlYXRlcyB0aGUgVHlwZVNjcmlwdCBjb25maWd1cmF0aW9uIGZpbGVzIGZvciBWaXRlXG4gKi9cbmNsYXNzIFZpdGVUc0NvbmZpZ3MgZXh0ZW5kcyBDb21wb25lbnQge1xuICBjb25zdHJ1Y3Rvcihwcm9qZWN0OiBQcm9qZWN0LCBvcHRpb25zOiBWaXRlVHNDb25maWdzT3B0aW9ucykge1xuICAgIHN1cGVyKHByb2plY3QpO1xuXG4gICAgLy8gTWFpbiB0c2NvbmZpZy5qc29uIChwcm9qZWN0IHJlZmVyZW5jZXMpXG4gICAgbmV3IEpzb25GaWxlKHByb2plY3QsICd0c2NvbmZpZy5qc29uJywge1xuICAgICAgbWFya2VyOiB0cnVlLFxuICAgICAgcmVhZG9ubHk6IHRydWUsXG4gICAgICBvYmo6IHtcbiAgICAgICAgZmlsZXM6IFtdLFxuICAgICAgICByZWZlcmVuY2VzOiBbXG4gICAgICAgICAgeyBwYXRoOiAnLi90c2NvbmZpZy5hcHAuanNvbicgfSxcbiAgICAgICAgICB7IHBhdGg6ICcuL3RzY29uZmlnLm5vZGUuanNvbicgfSxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICAvLyB0c2NvbmZpZy5hcHAuanNvbiAoZm9yIGFwcGxpY2F0aW9uIGNvZGUpXG4gICAgbmV3IEpzb25GaWxlKHByb2plY3QsICd0c2NvbmZpZy5hcHAuanNvbicsIHtcbiAgICAgIG1hcmtlcjogdHJ1ZSxcbiAgICAgIHJlYWRvbmx5OiB0cnVlLFxuICAgICAgb2JqOiB7XG4gICAgICAgIGNvbXBpbGVyT3B0aW9uczoge1xuICAgICAgICAgIHRhcmdldDogJ0VTMjAyMCcsXG4gICAgICAgICAgdXNlRGVmaW5lRm9yQ2xhc3NGaWVsZHM6IHRydWUsXG4gICAgICAgICAgbGliOiBbJ0VTMjAyMCcsICdET00nLCAnRE9NLkl0ZXJhYmxlJ10sXG4gICAgICAgICAgbW9kdWxlOiAnRVNOZXh0JyxcbiAgICAgICAgICBza2lwTGliQ2hlY2s6IHRydWUsXG5cbiAgICAgICAgICAvLyBCdW5kbGVyIG1vZGVcbiAgICAgICAgICBtb2R1bGVSZXNvbHV0aW9uOiAnYnVuZGxlcicsXG4gICAgICAgICAgYWxsb3dJbXBvcnRpbmdUc0V4dGVuc2lvbnM6IHRydWUsXG4gICAgICAgICAgaXNvbGF0ZWRNb2R1bGVzOiB0cnVlLFxuICAgICAgICAgIG1vZHVsZURldGVjdGlvbjogJ2ZvcmNlJyxcbiAgICAgICAgICBub0VtaXQ6IHRydWUsXG4gICAgICAgICAganN4OiAncmVhY3QtanN4JyxcblxuICAgICAgICAgIC8vIExpbnRpbmdcbiAgICAgICAgICBzdHJpY3Q6IHRydWUsXG4gICAgICAgICAgbm9VbnVzZWRMb2NhbHM6IHRydWUsXG4gICAgICAgICAgbm9VbnVzZWRQYXJhbWV0ZXJzOiB0cnVlLFxuICAgICAgICAgIG5vRmFsbHRocm91Z2hDYXNlc0luU3dpdGNoOiB0cnVlLFxuICAgICAgICAgIG5vVW5jaGVja2VkU2lkZUVmZmVjdEltcG9ydHM6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIGluY2x1ZGU6IFtvcHRpb25zLnNyY2Rpcl0sXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgLy8gdHNjb25maWcubm9kZS5qc29uIChmb3IgVml0ZSBjb25maWcpXG4gICAgbmV3IEpzb25GaWxlKHByb2plY3QsICd0c2NvbmZpZy5ub2RlLmpzb24nLCB7XG4gICAgICBtYXJrZXI6IHRydWUsXG4gICAgICByZWFkb25seTogdHJ1ZSxcbiAgICAgIG9iajoge1xuICAgICAgICBjb21waWxlck9wdGlvbnM6IHtcbiAgICAgICAgICB0YXJnZXQ6ICdFUzIwMjInLFxuICAgICAgICAgIGxpYjogWydFUzIwMjMnXSxcbiAgICAgICAgICBtb2R1bGU6ICdFU05leHQnLFxuICAgICAgICAgIHNraXBMaWJDaGVjazogdHJ1ZSxcblxuICAgICAgICAgIC8vIEJ1bmRsZXIgbW9kZVxuICAgICAgICAgIG1vZHVsZVJlc29sdXRpb246ICdidW5kbGVyJyxcbiAgICAgICAgICBhbGxvd0ltcG9ydGluZ1RzRXh0ZW5zaW9uczogdHJ1ZSxcbiAgICAgICAgICBpc29sYXRlZE1vZHVsZXM6IHRydWUsXG4gICAgICAgICAgbW9kdWxlRGV0ZWN0aW9uOiAnZm9yY2UnLFxuICAgICAgICAgIG5vRW1pdDogdHJ1ZSxcblxuICAgICAgICAgIC8vIExpbnRpbmdcbiAgICAgICAgICBzdHJpY3Q6IHRydWUsXG4gICAgICAgICAgbm9VbnVzZWRMb2NhbHM6IHRydWUsXG4gICAgICAgICAgbm9VbnVzZWRQYXJhbWV0ZXJzOiB0cnVlLFxuICAgICAgICAgIG5vRmFsbHRocm91Z2hDYXNlc0luU3dpdGNoOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICBpbmNsdWRlOiBbJ3ZpdGUuY29uZmlnLnRzJ10sXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG59XG5cbmludGVyZmFjZSBWaXRlU2FtcGxlQ29kZU9wdGlvbnMge1xuICByZWFkb25seSBzcmNkaXI6IHN0cmluZztcbiAgcmVhZG9ubHkgcHVibGljRGlyOiBzdHJpbmc7XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHNhbXBsZSBjb2RlIGZvciBhIFZpdGUgKyBSZWFjdCBwcm9qZWN0XG4gKi9cbmNsYXNzIFZpdGVTYW1wbGVDb2RlIGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IocHJvamVjdDogUHJvamVjdCwgb3B0aW9uczogVml0ZVNhbXBsZUNvZGVPcHRpb25zKSB7XG4gICAgc3VwZXIocHJvamVjdCk7XG5cbiAgICAvLyBDcmVhdGUgQXBwLnRzeFxuICAgIG5ldyBTYW1wbGVGaWxlKHByb2plY3QsIGAke29wdGlvbnMuc3JjZGlyfS9BcHAudHN4YCwge1xuICAgICAgY29udGVudHM6IGBpbXBvcnQgJy4vQXBwLmNzcydcbmltcG9ydCB7IFNpZ25lZEluLCBVc2VyQnV0dG9uIH0gZnJvbSAnQGNsZXJrL2NsZXJrLXJlYWN0JztcbmltcG9ydCB7IHVzZUJhc2VRdWVyeSB9IGZyb20gXCIuL3NlcnZpY2VzL0Jhc2VTZXJ2aWNlLnRzXCI7XG5cblxuZnVuY3Rpb24gQXBwKCkge1xuICBjb25zdCB7ZGF0YSwgaXNMb2FkaW5nfSA9IHVzZUJhc2VRdWVyeSgnLycsIHtyZXRyeU9uTW91bnQ6IHRydWV9KTtcblxuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgICAgPGhlYWRlcj5cblxuICAgICAgICAgIDxTaWduZWRJbj5cbiAgICAgICAgICAgIDxVc2VyQnV0dG9uLz5cbiAgICAgICAgICA8L1NpZ25lZEluPlxuICAgICAgICA8L2hlYWRlcj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjYXJkXCI+XG4gICAgICAgICAgeyBpc0xvYWRpbmcgPyAnTG9hZGluZy4uLicgOiBKU09OLnN0cmluZ2lmeShkYXRhLCBudWxsICwpfVxuICAgICAgICA8L2Rpdj5cbiAgICA8Lz5cbiAgKVxufVxuXG5leHBvcnQgZGVmYXVsdCBBcHBcbmAsXG4gICAgfSk7XG5cbiAgICAvLyBDcmVhdGUgQmFzZVNlcnZpY2UudHNcbiAgICBuZXcgVGV4dEZpbGUocHJvamVjdCwgYCR7b3B0aW9ucy5zcmNkaXJ9L3NlcnZpY2VzL0Jhc2VTZXJ2aWNlLnRzYCwge1xuICAgICAgbWFya2VyOiB0cnVlLFxuICAgICAgcmVhZG9ubHk6IHRydWUsXG4gICAgICBsaW5lczogW1xuICAgICAgICAnaW1wb3J0IHsgdXNlUXVlcnksIFVzZVF1ZXJ5T3B0aW9ucyB9IGZyb20gXFwnQHRhbnN0YWNrL3JlYWN0LXF1ZXJ5XFwnOycsXG4gICAgICAgICdpbXBvcnQgeyB1c2VBdXRoIH0gZnJvbSBcXCdAY2xlcmsvY2xlcmstcmVhY3RcXCc7JyxcbiAgICAgICAgJ2ltcG9ydCB7IHVzZUNvbmZpZyB9IGZyb20gXFwnLi4vY29uZmlnXFwnOycsXG4gICAgICAgICcnLFxuICAgICAgICAnZXhwb3J0IGZ1bmN0aW9uIHVzZUJhc2VRdWVyeTxURGF0YSA9IHVua25vd24+KCcsXG4gICAgICAgICcgIHBhdGg6IHN0cmluZywnLFxuICAgICAgICAnICBvcHRpb25zPzogT21pdDxVc2VRdWVyeU9wdGlvbnM8VERhdGE+LCBcXCdxdWVyeUtleVxcJyB8IFxcJ3F1ZXJ5Rm5cXCc+JyxcbiAgICAgICAgJykgeycsXG4gICAgICAgICcgIGNvbnN0IHsgY29uZmlnIH0gPSB1c2VDb25maWcoKTsnLFxuICAgICAgICAnICBjb25zdCB7IGdldFRva2VuIH0gPSB1c2VBdXRoKCk7JyxcbiAgICAgICAgJycsXG4gICAgICAgICcgIHJldHVybiB1c2VRdWVyeTxURGF0YT4oeycsXG4gICAgICAgICcgICAgcXVlcnlLZXk6IFtcXCdiYXNlXFwnXSwnLFxuICAgICAgICAnICAgIHF1ZXJ5Rm46IGFzeW5jICgpID0+IHsnLFxuICAgICAgICAnICAgICAgaWYgKCFjb25maWc/LmFwaUJhc2VVcmwpIHsnLFxuICAgICAgICAnICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXFwnQVBJIGJhc2UgVVJMIG5vdCBjb25maWd1cmVkXFwnKTsnLFxuICAgICAgICAnICAgICAgfScsXG4gICAgICAgICcnLFxuICAgICAgICAnICAgICAgY29uc3QgdG9rZW4gPSBhd2FpdCBnZXRUb2tlbigpOycsXG4gICAgICAgICcnLFxuICAgICAgICAnICAgICAgLy8gTm9ybWFsaXplIFVSTCBieSByZW1vdmluZyB0cmFpbGluZyBzbGFzaCBmcm9tIGJhc2VVcmwgYW5kIGVuc3VyaW5nIHBhdGggc3RhcnRzIHdpdGggc2xhc2gnLFxuICAgICAgICAnICAgICAgY29uc3QgYmFzZVVybCA9IGNvbmZpZy5hcGlCYXNlVXJsLnJlcGxhY2UoL1xcXFwvKyQvLCBcXCdcXCcpOycsXG4gICAgICAgICcgICAgICBjb25zdCBub3JtYWxpemVkUGF0aCA9IHBhdGguc3RhcnRzV2l0aChcXCcvXFwnKSA/IHBhdGggOiBgLyR7cGF0aH1gOycsXG4gICAgICAgICcgICAgICAnLFxuICAgICAgICAnICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChgJHtiYXNlVXJsfSR7bm9ybWFsaXplZFBhdGh9YCwgeycsXG4gICAgICAgICcgICAgICAgIGhlYWRlcnM6IHsnLFxuICAgICAgICAnICAgICAgICAgIFxcJ0F1dGhvcml6YXRpb25cXCc6IGBCZWFyZXIgJHt0b2tlbn1gLCcsXG4gICAgICAgICcgICAgICAgIH0sJyxcbiAgICAgICAgJyAgICAgIH0pOycsXG4gICAgICAgICcnLFxuICAgICAgICAnICAgICAgaWYgKCFyZXNwb25zZS5vaykgeycsXG4gICAgICAgICcgICAgICAgIHRocm93IG5ldyBFcnJvcihgSFRUUCBlcnJvciEgc3RhdHVzOiAke3Jlc3BvbnNlLnN0YXR1c31gKTsnLFxuICAgICAgICAnICAgICAgfScsXG4gICAgICAgICcnLFxuICAgICAgICAnICAgICAgcmV0dXJuIHJlc3BvbnNlLmpzb24oKTsnLFxuICAgICAgICAnICAgIH0sJyxcbiAgICAgICAgJyAgICBlbmFibGVkOiAhIWNvbmZpZz8uYXBpQmFzZVVybCwnLFxuICAgICAgICAnICAgIC4uLm9wdGlvbnMsJyxcbiAgICAgICAgJyAgfSk7JyxcbiAgICAgICAgJ30nLFxuICAgICAgXSxcbiAgICB9KTtcblxuICAgIC8vIENyZWF0ZSBSb290U2VydmljZS50c1xuICAgIG5ldyBTYW1wbGVGaWxlKHByb2plY3QsIGAke29wdGlvbnMuc3JjZGlyfS9zZXJ2aWNlcy9Sb290U2VydmljZS50c2AsIHtcbiAgICAgIGNvbnRlbnRzOiBgaW1wb3J0IHsgVXNlUXVlcnlPcHRpb25zIH0gZnJvbSAnQHRhbnN0YWNrL3JlYWN0LXF1ZXJ5JztcbmltcG9ydCB7IHVzZUJhc2VRdWVyeSB9IGZyb20gJy4vQmFzZVNlcnZpY2UnO1xuXG5leHBvcnQgZnVuY3Rpb24gdXNlUm9vdFF1ZXJ5PFREYXRhID0gdW5rbm93bj4oXG4gIG9wdGlvbnM/OiBPbWl0PFVzZVF1ZXJ5T3B0aW9uczxURGF0YT4sICdxdWVyeUtleScgfCAncXVlcnlGbic+XG4pIHtcbiAgcmV0dXJuIHVzZUJhc2VRdWVyeTxURGF0YT4oJy8nLCBvcHRpb25zKTtcbn1cbmAsXG4gICAgfSk7XG5cbiAgICAvLyBDcmVhdGUgQXBwLmNzc1xuICAgIG5ldyBTYW1wbGVGaWxlKHByb2plY3QsIGAke29wdGlvbnMuc3JjZGlyfS9BcHAuY3NzYCwge1xuICAgICAgY29udGVudHM6IGAjcm9vdCB7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG59XG5cbi5sb2dvIHtcbiAgaGVpZ2h0OiA2ZW07XG4gIHBhZGRpbmc6IDEuNWVtO1xuICB3aWxsLWNoYW5nZTogZmlsdGVyO1xuICB0cmFuc2l0aW9uOiBmaWx0ZXIgMzAwbXM7XG59XG4ubG9nbzpob3ZlciB7XG4gIGZpbHRlcjogZHJvcC1zaGFkb3coMCAwIDJlbSAjNjQ2Y2ZmYWEpO1xufVxuLmxvZ28ucmVhY3Q6aG92ZXIge1xuICBmaWx0ZXI6IGRyb3Atc2hhZG93KDAgMCAyZW0gIzYxZGFmYmFhKTtcbn1cblxuQGtleWZyYW1lcyBsb2dvLXNwaW4ge1xuICBmcm9tIHtcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTtcbiAgfVxuICB0byB7XG4gICAgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTtcbiAgfVxufVxuXG5AbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IG5vLXByZWZlcmVuY2UpIHtcbiAgYTpudGgtb2YtdHlwZSgyKSAubG9nbyB7XG4gICAgYW5pbWF0aW9uOiBsb2dvLXNwaW4gaW5maW5pdGUgMjBzIGxpbmVhcjtcbiAgfVxufVxuXG4uY2FyZCB7XG4gIHBhZGRpbmc6IDJlbTtcbn1cblxuLnJlYWQtdGhlLWRvY3Mge1xuICBjb2xvcjogIzg4ODtcbn1cbmAsXG4gICAgfSk7XG5cbiAgICAvLyBDcmVhdGUgbWFpbi50c3hcbiAgICBuZXcgU2FtcGxlRmlsZShwcm9qZWN0LCBgJHtvcHRpb25zLnNyY2Rpcn0vbWFpbi50c3hgLCB7XG4gICAgICBjb250ZW50czogYGltcG9ydCB7IFN0cmljdE1vZGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IGNyZWF0ZVJvb3QgfSBmcm9tICdyZWFjdC1kb20vY2xpZW50J1xuaW1wb3J0ICcuL2luZGV4LmNzcydcbmltcG9ydCBBcHAgZnJvbSAnLi9BcHAudHN4J1xuaW1wb3J0IHsgQ2xlcmtQcm92aWRlciwgU2lnbmVkSW4sIFNpZ25lZE91dCwgU2lnbkluQnV0dG9uIH0gZnJvbSAnQGNsZXJrL2NsZXJrLXJlYWN0J1xuaW1wb3J0IHsgdXNlQ29uZmlnIH0gZnJvbSAnLi9jb25maWcnXG5pbXBvcnQgeyBRdWVyeUNsaWVudCwgUXVlcnlDbGllbnRQcm92aWRlciB9IGZyb20gXCJAdGFuc3RhY2svcmVhY3QtcXVlcnlcIlxuXG5mdW5jdGlvbiBBcHBXcmFwcGVyKCkge1xuICBjb25zdCB7IGNvbmZpZywgaXNMb2FkaW5nIH0gPSB1c2VDb25maWcoKTtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSBuZXcgUXVlcnlDbGllbnQoKVxuICBpZiAoaXNMb2FkaW5nIHx8ICFjb25maWcpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJsb2FkaW5nLXNjcmVlblwiPlxuICAgICAgICBMb2FkaW5nLi4uXG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8Q2xlcmtQcm92aWRlciBwdWJsaXNoYWJsZUtleT17Y29uZmlnLmNsZXJrUHVibGlzaGFibGVLZXl9PlxuICAgICAgPFF1ZXJ5Q2xpZW50UHJvdmlkZXIgY2xpZW50PXtxdWVyeUNsaWVudH0+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidy1mdWxsIGgtZnVsbFwiPlxuICAgICAgICAgIDxTaWduZWRPdXQ+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIG1pbi1oLXNjcmVlblwiPlxuICAgICAgICAgICAgICA8U2lnbkluQnV0dG9uLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvU2lnbmVkT3V0PlxuICAgICAgICAgIDxTaWduZWRJbj5cbiAgICAgICAgICAgIDxBcHAvPlxuICAgICAgICAgIDwvU2lnbmVkSW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9RdWVyeUNsaWVudFByb3ZpZGVyPlxuICAgIDwvQ2xlcmtQcm92aWRlcj5cbiAgKTtcbn1cblxuY3JlYXRlUm9vdChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncm9vdCcpISkucmVuZGVyKFxuICA8U3RyaWN0TW9kZT5cbiAgICA8QXBwV3JhcHBlci8+XG4gIDwvU3RyaWN0TW9kZT5cbilcbmAsXG4gICAgfSk7XG5cbiAgICAvLyBDcmVhdGUgaW5kZXguY3NzXG4gICAgbmV3IFNhbXBsZUZpbGUocHJvamVjdCwgYCR7b3B0aW9ucy5zcmNkaXJ9L2luZGV4LmNzc2AsIHtcbiAgICAgIGNvbnRlbnRzOiBgQGltcG9ydCBcInRhaWx3aW5kY3NzXCI7XG5cbkB0aGVtZSB7XG4gIC0tY29sb3Itc2NoZW1lOiBsaWdodCBkYXJrO1xufVxuXG46cm9vdCB7XG4gIGZvbnQtZmFtaWx5OiBJbnRlciwgc3lzdGVtLXVpLCBBdmVuaXIsIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gIGxpbmUtaGVpZ2h0OiAxLjU7XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG5cbiAgY29sb3Itc2NoZW1lOiBsaWdodCBkYXJrO1xuXG4gIGZvbnQtc3ludGhlc2lzOiBub25lO1xuICB0ZXh0LXJlbmRlcmluZzogb3B0aW1pemVMZWdpYmlsaXR5O1xuICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDtcbiAgLW1vei1vc3gtZm9udC1zbW9vdGhpbmc6IGdyYXlzY2FsZTtcbn1cblxuYSB7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG4gIGNvbG9yOiAjNjQ2Y2ZmO1xuICB0ZXh0LWRlY29yYXRpb246IGluaGVyaXQ7XG59XG5hOmhvdmVyIHtcbiAgY29sb3I6ICM1MzViZjI7XG59XG5cbmJvZHkge1xuICBtYXJnaW46IDA7XG4gIG1pbi13aWR0aDogMzIwcHg7XG4gIG1pbi1oZWlnaHQ6IDEwMHZoO1xufVxuXG5oMSB7XG4gIGZvbnQtc2l6ZTogMy4yZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjE7XG59XG5cbmJ1dHRvbiB7XG4gIGZvbnQtZmFtaWx5OiBpbmhlcml0O1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG5cbi5sb2FkaW5nLXNjcmVlbiB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBoZWlnaHQ6IDEwMHZoO1xuICBmb250LXNpemU6IDEuNXJlbTtcbn1cblxuaHRtbCwgYm9keSwgI3Jvb3Qge1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xufVxuYCxcbiAgICB9KTtcblxuICB9XG59XG4iXX0=
|
|
670
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVml0ZVJlYWN0UHJvamVjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9WaXRlUmVhY3RQcm9qZWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLCtCQUEwQztBQUMxQyxtQ0FBc0Y7QUFDdEYsc0RBQXVGO0FBRXZGLG1DQUEyQztBQTRCM0M7O0dBRUc7QUFDSCxNQUFhLGdCQUFpQixTQUFRLGlDQUFvQjtJQUN4QyxNQUFNLENBQVM7SUFDZixTQUFTLENBQVM7SUFDbEIsVUFBVSxDQUFTO0lBQ2xCLFlBQVksQ0FBc0I7SUFFbkQsWUFBWSxPQUFnQztRQUMxQyxNQUFNLEVBQ0osVUFBVSxHQUFHLElBQUksRUFDakIsTUFBTSxHQUFHLEtBQUssRUFDZCxTQUFTLEdBQUcsUUFBUSxFQUNwQixLQUFLLEVBQ0wsR0FBRyxXQUFXLEVBQ2YsR0FBRyxPQUFPLENBQUM7UUFDWixLQUFLLENBQUM7WUFDSixHQUFHLFdBQVc7WUFDZCxVQUFVLEVBQUUsS0FBSyxFQUFFLHFDQUFxQztZQUN4RCxNQUFNLEVBQUUsS0FBSyxFQUFFLG1DQUFtQztZQUNsRCxJQUFJLEVBQUUsS0FBSyxFQUFFLDZCQUE2QjtZQUMxQyxPQUFPLEVBQUUsSUFBSTtZQUNiLGVBQWUsRUFBRSxJQUFJLEVBQUUsa0NBQWtDO1lBQ3pELGNBQWMsRUFBRyxXQUFXLENBQUMsTUFBd0IsQ0FBQyxPQUFPLENBQUMsY0FBYztZQUM1RSxXQUFXLEVBQUU7Z0JBQ1gsb0JBQW9CLEVBQUU7b0JBQ3BCLHVFQUF1RTtvQkFDdkUsc0VBQXNFO29CQUN0RSxvRUFBb0U7b0JBQ3BFLCtEQUErRDtvQkFDL0QsV0FBVyxFQUFFO3dCQUNYLFNBQVMsRUFBRSxJQUFJO3dCQUNmLGVBQWUsRUFBRSxJQUFJO3FCQUN0QjtvQkFDRCxHQUFHLFdBQVcsQ0FBQyxXQUFXLEVBQUUsb0JBQW9CO2lCQUNqRDthQUNGO1lBQ0QsSUFBSSxFQUFFO2dCQUNKLG9CQUFvQjtnQkFDcEIsdUJBQXVCO2dC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QixvRUFBb0U7Z0JBQ3BFLFNBQVM7Z0JBQ1QsRUFBRTtnQkFDRiwrQkFBK0I7Z0JBQy9CLFFBQVE7Z0JBQ1Isb0NBQW9DO2dCQUNwQyxpQkFBaUI7Z0JBQ2pCLE9BQU87Z0JBQ1AsR0FBRzthQUNKO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsd0JBQXdCO1FBQ3hCLElBQUksbUJBQVUsQ0FBQyxPQUFPLEVBQUUsR0FBRyxPQUFPLENBQUMsTUFBTSwwQkFBMEIsRUFBRTtZQUNuRSxRQUFRLEVBQUU7Ozs7Ozs7O0NBUWY7U0FDSSxDQUFDLENBQUM7UUFFSCxpQkFBaUI7UUFDakIsSUFBSSxtQkFBVSxDQUFDLE9BQU8sRUFBRSxHQUFHLE9BQU8sQ0FBQyxNQUFNLFVBQVUsRUFBRTtZQUNuRCxRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0F3Q2Y7U0FDSSxDQUFDLENBQUM7UUFFSCxrQkFBa0I7UUFDbEIsSUFBSSxtQkFBVSxDQUFDLE9BQU8sRUFBRSxHQUFHLE9BQU8sQ0FBQyxNQUFNLFdBQVcsRUFBRTtZQUNwRCxRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQTBDZjtTQUNJLENBQUMsQ0FBQztRQUVILG1CQUFtQjtRQUNuQixJQUFJLG1CQUFVLENBQUMsT0FBTyxFQUFFLEdBQUcsT0FBTyxDQUFDLE1BQU0sWUFBWSxFQUFFO1lBQ3JELFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0F3RGY7U0FDSSxDQUFDLENBQUM7SUFFTCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByZWxhdGl2ZSwgYmFzZW5hbWUgfSBmcm9tICdwYXRoJztcbmltcG9ydCB7IENvbXBvbmVudCwgRmlsZUJhc2UsIEpzb25GaWxlLCBQcm9qZWN0LCBTYW1wbGVGaWxlLCBUZXh0RmlsZSB9IGZyb20gJ3Byb2plbic7XG5pbXBvcnQgeyBUeXBlU2NyaXB0QXBwUHJvamVjdCwgVHlwZVNjcmlwdFByb2plY3RPcHRpb25zIH0gZnJvbSAncHJvamVuL2xpYi90eXBlc2NyaXB0JztcbmltcG9ydCB7IEJhdG1hblByb2plY3QgfSBmcm9tICcuL0JhdG1hblByb2plY3QnO1xuaW1wb3J0IHsgcnVuU2NyaXB0Q29tbWFuZCB9IGZyb20gJy4vdXRpbHMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFZpdGVSZWFjdFByb2plY3RPcHRpb25zIGV4dGVuZHMgVHlwZVNjcmlwdFByb2plY3RPcHRpb25zIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZ2VuZXJhdGUgc2FtcGxlIGNvZGVcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgc2FtcGxlQ29kZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFNvdXJjZSBkaXJlY3RvcnlcbiAgICogQGRlZmF1bHQgXCJzcmNcIlxuICAgKi9cbiAgcmVhZG9ubHkgc3JjZGlyPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQdWJsaWMgZGlyZWN0b3J5IGZvciBzdGF0aWMgYXNzZXRzXG4gICAqIEBkZWZhdWx0IFwicHVibGljXCJcbiAgICovXG4gIHJlYWRvbmx5IHB1YmxpY0Rpcj86IHN0cmluZztcblxuICAvKipcbiAgICogVGl0bGUgZm9yIHRoZSBIVE1MIHBhZ2VcbiAgICogQGRlZmF1bHQgcHJvamVjdCBuYW1lXG4gICAqL1xuICByZWFkb25seSB0aXRsZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBWaXRlICsgUmVhY3QgVHlwZVNjcmlwdCBwcm9qZWN0XG4gKi9cbmV4cG9ydCBjbGFzcyBWaXRlUmVhY3RQcm9qZWN0IGV4dGVuZHMgVHlwZVNjcmlwdEFwcFByb2plY3Qge1xuICBwdWJsaWMgcmVhZG9ubHkgc3JjZGlyOiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBwdWJsaWNEaXI6IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IGRldkNvbW1hbmQ6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBjb25maWdGaWVsZHM6IE1hcDxzdHJpbmcsIHN0cmluZz47XG5cbiAgY29uc3RydWN0b3Iob3B0aW9uczogVml0ZVJlYWN0UHJvamVjdE9wdGlvbnMpIHtcbiAgICBjb25zdCB7XG4gICAgICBzYW1wbGVDb2RlID0gdHJ1ZSxcbiAgICAgIHNyY2RpciA9ICdzcmMnLFxuICAgICAgcHVibGljRGlyID0gJ3B1YmxpYycsXG4gICAgICB0aXRsZSxcbiAgICAgIC4uLnJlc3RPcHRpb25zXG4gICAgfSA9IG9wdGlvbnM7XG4gICAgc3VwZXIoe1xuICAgICAgLi4ucmVzdE9wdGlvbnMsXG4gICAgICBzYW1wbGVDb2RlOiBmYWxzZSwgLy8gV2UnbGwgaGFuZGxlIHNhbXBsZSBjb2RlIG91cnNlbHZlc1xuICAgICAgZXNsaW50OiBmYWxzZSwgLy8gV2UnbGwgY29uZmlndXJlIGVzbGludCBvdXJzZWx2ZXNcbiAgICAgIGplc3Q6IGZhbHNlLCAvLyBWaXRlIHVzZXMgdml0ZXN0IHR5cGljYWxseVxuICAgICAgcGFja2FnZTogdHJ1ZSxcbiAgICAgIGRpc2FibGVUc2NvbmZpZzogdHJ1ZSwgLy8gV2UnbGwgbWFuYWdlIHRzY29uZmlnIG91cnNlbHZlc1xuICAgICAgcGFja2FnZU1hbmFnZXI6IChyZXN0T3B0aW9ucy5wYXJlbnQgYXMgQmF0bWFuUHJvamVjdCkucGFja2FnZS5wYWNrYWdlTWFuYWdlcixcbiAgICAgIHBucG1PcHRpb25zOiB7XG4gICAgICAgIHdvcmtzcGFjZVlhbWxPcHRpb25zOiB7XG4gICAgICAgICAgLy8gVGhpcyBzdWJwcm9qZWN0IGhhcyBpdHMgb3duIHNlcGFyYXRlIGxvY2tmaWxlL3N0b3JlIGZyb20gaXRzIHBhcmVudCxcbiAgICAgICAgICAvLyBzbyBpdCBuZWVkcyBpdHMgb3duIGFwcHJvdmFsIGZvciB0aGUgbmF0aXZlIHBvc3RpbnN0YWxsIHNjcmlwdHMgaXRzXG4gICAgICAgICAgLy8gZml4ZWQgZGVwZW5kZW5jeSBzZXQgYWx3YXlzIG5lZWRzIChlc2J1aWxkJ3MgYmluYXJ5IGRvd25sb2FkLCBhbmRcbiAgICAgICAgICAvLyBAY2xlcmsvY2xlcmstcmVhY3QncyB0cmFuc2l0aXZlIEBjbGVyay9zaGFyZWQgc2V0dXAgc2NyaXB0KS5cbiAgICAgICAgICBhbGxvd0J1aWxkczoge1xuICAgICAgICAgICAgJ2VzYnVpbGQnOiB0cnVlLFxuICAgICAgICAgICAgJ0BjbGVyay9zaGFyZWQnOiB0cnVlLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgLi4ucmVzdE9wdGlvbnMucG5wbU9wdGlvbnM/LndvcmtzcGFjZVlhbWxPcHRpb25zLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIGRlcHM6IFtcbiAgICAgICAgJ0BjbGVyay9jbGVyay1yZWFjdCcsXG4gICAgICAgICdAdGFuc3RhY2svcmVhY3QtcXVlcnknLFxuICAgICAgICAnQHRhaWx3aW5kY3NzL3Bvc3Rjc3MnLFxuICAgICAgICAnYXV0b3ByZWZpeGVyJyxcbiAgICAgICAgJ3Bvc3Rjc3MnLFxuICAgICAgICAndGFpbHdpbmRjc3MnLFxuICAgICAgICAncm9sbHVwJyxcbiAgICAgICAgLi4uKG9wdGlvbnMuZGVwcyA/IG9wdGlvbnMuZGVwcyA6IFtdKSxcbiAgICAgIF0sXG4gICAgfSk7XG5cbiAgICAvLyBJbml0aWFsaXplIGNvbmZpZyBmaWVsZHMgc3RvcmFnZVxuICAgIHRoaXMuY29uZmlnRmllbGRzID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcblxuICAgIHRoaXMuc3JjZGlyID0gc3JjZGlyO1xuICAgIHRoaXMucHVibGljRGlyID0gcHVibGljRGlyO1xuXG4gICAgLy8gQWRkIFZpdGUgY29tcG9uZW50XG4gICAgbmV3IFZpdGVDb21wb25lbnQodGhpcywge1xuICAgICAgc3JjZGlyOiB0aGlzLnNyY2RpcixcbiAgICB9KTtcblxuICAgIC8vIEFkZCBFU0xpbnQgY29uZmlndXJhdGlvblxuICAgIG5ldyBWaXRlRXNsaW50Q29uZmlnKHRoaXMpO1xuXG4gICAgLy8gQWRkIGluZGV4Lmh0bWxcbiAgICBuZXcgSW5kZXhIdG1sKHRoaXMsIHtcbiAgICAgIHRpdGxlOiB0aXRsZSA/PyB0aGlzLm5hbWUsXG4gICAgICBzcmNkaXI6IHRoaXMuc3JjZGlyLFxuICAgIH0pO1xuXG4gICAgLy8gQWRkIFR5cGVTY3JpcHQgY29uZmlnc1xuICAgIG5ldyBWaXRlVHNDb25maWdzKHRoaXMsIHtcbiAgICAgIHNyY2RpcjogdGhpcy5zcmNkaXIsXG4gICAgfSk7XG5cbiAgICAvLyBBZGQgLmdpdGlnbm9yZSBlbnRyaWVzXG4gICAgdGhpcy5naXRpZ25vcmU/LmFkZFBhdHRlcm5zKCdkaXN0JywgJ2Rpc3Qtc3NyJywgJyoubG9jYWwnKTtcblxuICAgIC8vIEFkZCB2aXRlLWVudi5kLnRzIGZvciB0eXBlIGRlY2xhcmF0aW9uc1xuICAgIG5ldyBWaXRlRW52RHRzKHRoaXMsIHtcbiAgICAgIHNyY2RpcjogdGhpcy5zcmNkaXIsXG4gICAgfSk7XG5cbiAgICAvLyBBZGQgUG9zdENTUyBjb25maWcgZm9yIFRhaWx3aW5kXG4gICAgbmV3IFBvc3RDU1NDb25maWdGaWxlKHRoaXMpO1xuXG4gICAgLy8gQWRkIGNvbmZpZy50cyBmb3IgcnVudGltZSBjb25maWd1cmF0aW9uXG4gICAgbmV3IENvbmZpZ0ZpbGUodGhpcywge1xuICAgICAgc3JjZGlyOiB0aGlzLnNyY2RpcixcbiAgICB9KTtcblxuICAgIC8vIEFkZCBzYW1wbGUgY29uZmlnLmpzb25cbiAgICBuZXcgQ29uZmlnSnNvbkZpbGUodGhpcywgeyB9KTtcblxuXG4gICAgLy8gQWRkIHNhbXBsZSBjb2RlIGlmIHJlcXVlc3RlZFxuICAgIGlmIChzYW1wbGVDb2RlKSB7XG4gICAgICBuZXcgVml0ZVNhbXBsZUNvZGUodGhpcywge1xuICAgICAgICBzcmNkaXI6IHRoaXMuc3JjZGlyLFxuICAgICAgICBwdWJsaWNEaXI6IHRoaXMucHVibGljRGlyLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gVXNlIHJlbGF0aXZlIHBhdGggZm9yIGRldkNvbW1hbmRcbiAgICBjb25zdCByZWxhdGl2ZU91dGRpciA9IHRoaXMucGFyZW50XG4gICAgICA/IHJlbGF0aXZlKHRoaXMucGFyZW50Lm91dGRpciwgdGhpcy5vdXRkaXIpXG4gICAgICA6IGJhc2VuYW1lKHRoaXMub3V0ZGlyKTtcbiAgICB0aGlzLmRldkNvbW1hbmQgPSBgY2QgJHtyZWxhdGl2ZU91dGRpcn0gJiYgJHtydW5TY3JpcHRDb21tYW5kKHRoaXMucGFja2FnZS5wYWNrYWdlTWFuYWdlciwgJ2RldicpfWA7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgY3VzdG9tIGZpZWxkIHRvIHRoZSBDb25maWcgdHlwZVxuICAgKiBAcGFyYW0gZmllbGROYW1lIFRoZSBuYW1lIG9mIHRoZSBmaWVsZFxuICAgKiBAcGFyYW0gZmllbGRUeXBlIFRoZSBUeXBlU2NyaXB0IHR5cGUgb2YgdGhlIGZpZWxkIChlLmcuLCAnc3RyaW5nJywgJ251bWJlcicsICdib29sZWFuJywgJ3N0cmluZ1tdJylcbiAgICogQHJldHVybnMgdGhpcyBwcm9qZWN0IGluc3RhbmNlIGZvciBjaGFpbmluZ1xuICAgKi9cbiAgYWRkQ29uZmlnRmllbGQoZmllbGROYW1lOiBzdHJpbmcsIGZpZWxkVHlwZTogc3RyaW5nKTogdGhpcyB7XG4gICAgdGhpcy5jb25maWdGaWVsZHMuc2V0KGZpZWxkTmFtZSwgZmllbGRUeXBlKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGNvbmZpZyBmaWVsZHMgbWFwIChmb3IgaW50ZXJuYWwgdXNlIGJ5IENvbmZpZ0ZpbGUpXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZ2V0Q29uZmlnRmllbGRzKCk6IE1hcDxzdHJpbmcsIHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZ0ZpZWxkcztcbiAgfVxufVxuXG5pbnRlcmZhY2UgVml0ZUNvbXBvbmVudE9wdGlvbnMge1xuICByZWFkb25seSBzcmNkaXI6IHN0cmluZztcbn1cblxuLyoqXG4gKiBDb25maWd1cmVzIFZpdGUgZGVwZW5kZW5jaWVzIGFuZCBzY3JpcHRzXG4gKi9cbmNsYXNzIFZpdGVDb21wb25lbnQgZXh0ZW5kcyBDb21wb25lbnQge1xuICBjb25zdHJ1Y3Rvcihwcm9qZWN0OiBUeXBlU2NyaXB0QXBwUHJvamVjdCwgX29wdGlvbnM6IFZpdGVDb21wb25lbnRPcHRpb25zKSB7XG4gICAgc3VwZXIocHJvamVjdCk7XG5cbiAgICBjb25zdCB0c1Byb2plY3QgPSBwcm9qZWN0IGFzIFR5cGVTY3JpcHRBcHBQcm9qZWN0O1xuXG4gICAgLy8gU2V0IHBhY2thZ2UgdHlwZSB0byBtb2R1bGUgZm9yIEVTTSBzdXBwb3J0XG4gICAgdHNQcm9qZWN0LnBhY2thZ2UuYWRkRmllbGQoJ3R5cGUnLCAnbW9kdWxlJyk7XG5cbiAgICAvLyBBZGQgUmVhY3QgZGVwZW5kZW5jaWVzXG4gICAgdHNQcm9qZWN0LmFkZERlcHMoJ3JlYWN0QF4xOS4yLjAnLCAncmVhY3QtZG9tQF4xOS4yLjAnKTtcblxuICAgIC8vIEFkZCBkZXYgZGVwZW5kZW5jaWVzXG4gICAgdHNQcm9qZWN0LmFkZERldkRlcHMoXG4gICAgICAnQHR5cGVzL3JlYWN0QF4xOS4yLjInLFxuICAgICAgJ0B0eXBlcy9yZWFjdC1kb21AXjE5LjIuMicsXG4gICAgICAnQHZpdGVqcy9wbHVnaW4tcmVhY3RAXjUuMS4wJyxcbiAgICAgICd2aXRlQF41LjQuMCcsXG4gICAgICAndHlwZXNjcmlwdEB+NS45LjMnLFxuICAgICAgJ0Blc2xpbnQvanNAXjkuMzkuMScsXG4gICAgICAnZXNsaW50QF45LjM5LjEnLFxuICAgICAgJ2VzbGludC1wbHVnaW4tcmVhY3QtaG9va3NAXjUuMi4wJyxcbiAgICAgICdlc2xpbnQtcGx1Z2luLXJlYWN0LXJlZnJlc2hAXjAuNC4yNCcsXG4gICAgICAnZ2xvYmFsc0BeMTYuNS4wJyxcbiAgICAgICd0eXBlc2NyaXB0LWVzbGludEBeOC40Ni4zJyxcbiAgICApO1xuXG4gICAgLy8gQ3JlYXRlIHZpdGUuY29uZmlnLnRzIGFzIGEgbWFuYWdlZCBmaWxlXG4gICAgbmV3IFZpdGVDb25maWdGaWxlKHByb2plY3QpO1xuXG4gICAgLy8gQWRkIHNjcmlwdHNcbiAgICB0c1Byb2plY3QuYWRkVGFzaygnZGV2Jywge1xuICAgICAgZGVzY3JpcHRpb246ICdTdGFydCBkZXZlbG9wbWVudCBzZXJ2ZXInLFxuICAgICAgZXhlYzogJ3ZpdGUnLFxuICAgIH0pO1xuXG4gICAgLy8gUmVtb3ZlIGFuZCByZWNyZWF0ZSBidWlsZCB0YXNrIHRvIGN1c3RvbWl6ZSBpdCBmb3IgVml0ZVxuICAgIHRzUHJvamVjdC5yZW1vdmVUYXNrKCdidWlsZCcpO1xuICAgIHRzUHJvamVjdC5hZGRUYXNrKCdidWlsZCcsIHtcbiAgICAgIGRlc2NyaXB0aW9uOiAnQnVpbGQgZm9yIHByb2R1Y3Rpb24nLFxuICAgICAgZXhlYzogJ3RzYyAtYiAmJiB2aXRlIGJ1aWxkJyxcbiAgICB9KTtcblxuICAgIHRzUHJvamVjdC5hZGRUYXNrKCdwcmV2aWV3Jywge1xuICAgICAgZGVzY3JpcHRpb246ICdQcmV2aWV3IHByb2R1Y3Rpb24gYnVpbGQnLFxuICAgICAgZXhlYzogJ3ZpdGUgcHJldmlldycsXG4gICAgfSk7XG5cbiAgICB0c1Byb2plY3QuYWRkVGFzaygnbGludCcsIHtcbiAgICAgIGRlc2NyaXB0aW9uOiAnTGludCBjb2RlJyxcbiAgICAgIGV4ZWM6ICdlc2xpbnQgLicsXG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBDcmVhdGVzIHRoZSBFU0xpbnQgY29uZmlndXJhdGlvbiBmb3IgVml0ZSArIFJlYWN0XG4gKi9cbmNsYXNzIFZpdGVFc2xpbnRDb25maWcgZXh0ZW5kcyBGaWxlQmFzZSB7XG4gIGNvbnN0cnVjdG9yKHByb2plY3Q6IFByb2plY3QpIHtcbiAgICBzdXBlcihwcm9qZWN0LCAnZXNsaW50LmNvbmZpZy5qcycsIHtcbiAgICAgIG1hcmtlcjogdHJ1ZSxcbiAgICAgIHJlYWRvbmx5OiB0cnVlLFxuICAgIH0pO1xuICB9XG5cbiAgc3ludGhlc2l6ZUNvbnRlbnQoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gYGltcG9ydCBqcyBmcm9tICdAZXNsaW50L2pzJ1xuaW1wb3J0IGdsb2JhbHMgZnJvbSAnZ2xvYmFscydcbmltcG9ydCByZWFjdEhvb2tzIGZyb20gJ2VzbGludC1wbHVnaW4tcmVhY3QtaG9va3MnXG5pbXBvcnQgcmVhY3RSZWZyZXNoIGZyb20gJ2VzbGludC1wbHVnaW4tcmVhY3QtcmVmcmVzaCdcbmltcG9ydCB0c2VzbGludCBmcm9tICd0eXBlc2NyaXB0LWVzbGludCdcblxuZXhwb3J0IGRlZmF1bHQgW1xuICB7IGlnbm9yZXM6IFsnZGlzdCddIH0sXG4gIHtcbiAgICBmaWxlczogWycqKi8qLnt0cyx0c3h9J10sXG4gICAgbGFuZ3VhZ2VPcHRpb25zOiB7XG4gICAgICBlY21hVmVyc2lvbjogMjAyMCxcbiAgICAgIGdsb2JhbHM6IGdsb2JhbHMuYnJvd3NlcixcbiAgICB9LFxuICAgIHBsdWdpbnM6IHtcbiAgICAgICdyZWFjdC1ob29rcyc6IHJlYWN0SG9va3MsXG4gICAgICAncmVhY3QtcmVmcmVzaCc6IHJlYWN0UmVmcmVzaCxcbiAgICB9LFxuICAgIHJ1bGVzOiB7XG4gICAgICAuLi5yZWFjdEhvb2tzLmNvbmZpZ3MucmVjb21tZW5kZWQucnVsZXMsXG4gICAgICAncmVhY3QtcmVmcmVzaC9vbmx5LWV4cG9ydC1jb21wb25lbnRzJzogW1xuICAgICAgICAnd2FybicsXG4gICAgICAgIHsgYWxsb3dDb25zdGFudEV4cG9ydDogdHJ1ZSB9LFxuICAgICAgXSxcbiAgICB9LFxuICB9LFxuICBqcy5jb25maWdzLnJlY29tbWVuZGVkLFxuICAuLi50c2VzbGludC5jb25maWdzLnJlY29tbWVuZGVkLFxuXVxuYDtcbiAgfVxufVxuXG4vKipcbiAqIENyZWF0ZXMgdGhlIHZpdGUuY29uZmlnLnRzIGZpbGVcbiAqL1xuY2xhc3MgVml0ZUNvbmZpZ0ZpbGUgZXh0ZW5kcyBGaWxlQmFzZSB7XG4gIGNvbnN0cnVjdG9yKHByb2plY3Q6IFByb2plY3QpIHtcbiAgICBzdXBlcihwcm9qZWN0LCAndml0ZS5jb25maWcudHMnLCB7XG4gICAgICBtYXJrZXI6IHRydWUsXG4gICAgICByZWFkb25seTogdHJ1ZSxcbiAgICB9KTtcbiAgfVxuXG4gIHN5bnRoZXNpemVDb250ZW50KCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIGBpbXBvcnQgeyBkZWZpbmVDb25maWcgfSBmcm9tICd2aXRlJ1xuaW1wb3J0IHJlYWN0IGZyb20gJ0B2aXRlanMvcGx1Z2luLXJlYWN0J1xuXG4vLyBodHRwczovL3ZpdGUuZGV2L2NvbmZpZy9cbmV4cG9ydCBkZWZhdWx0IGRlZmluZUNvbmZpZyh7XG4gIHBsdWdpbnM6IFtyZWFjdCgpXSxcbn0pXG5gO1xuICB9XG59XG5cbi8qKlxuICogQ3JlYXRlcyB0aGUgcG9zdGNzcy5jb25maWcuanMgZmlsZSBmb3IgVGFpbHdpbmQgQ1NTIHY0XG4gKi9cbmNsYXNzIFBvc3RDU1NDb25maWdGaWxlIGV4dGVuZHMgRmlsZUJhc2Uge1xuICBjb25zdHJ1Y3Rvcihwcm9qZWN0OiBQcm9qZWN0KSB7XG4gICAgc3VwZXIocHJvamVjdCwgJ3Bvc3Rjc3MuY29uZmlnLmpzJywge1xuICAgICAgbWFya2VyOiB0cnVlLFxuICAgICAgcmVhZG9ubHk6IHRydWUsXG4gICAgfSk7XG4gIH1cblxuICBzeW50aGVzaXplQ29udGVudCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiBgZXhwb3J0IGRlZmF1bHQge1xuICBwbHVnaW5zOiB7XG4gICAgXCJAdGFpbHdpbmRjc3MvcG9zdGNzc1wiOiB7fSxcbiAgICBhdXRvcHJlZml4ZXI6IHt9LFxuICB9LFxufVxuYDtcbiAgfVxufVxuXG5pbnRlcmZhY2UgVml0ZUVudkR0c09wdGlvbnMge1xuICByZWFkb25seSBzcmNkaXI6IHN0cmluZztcbn1cblxuLyoqXG4gKiBDcmVhdGVzIHRoZSB2aXRlLWVudi5kLnRzIGZpbGUgZm9yIHR5cGUgZGVjbGFyYXRpb25zXG4gKi9cbmNsYXNzIFZpdGVFbnZEdHMgZXh0ZW5kcyBGaWxlQmFzZSB7XG4gIGNvbnN0cnVjdG9yKHByb2plY3Q6IFByb2plY3QsIG9wdGlvbnM6IFZpdGVFbnZEdHNPcHRpb25zKSB7XG4gICAgc3VwZXIocHJvamVjdCwgYCR7b3B0aW9ucy5zcmNkaXJ9L3ZpdGUtZW52LmQudHNgLCB7XG4gICAgICBtYXJrZXI6IHRydWUsXG4gICAgICByZWFkb25seTogdHJ1ZSxcbiAgICB9KTtcbiAgfVxuXG4gIHN5bnRoZXNpemVDb250ZW50KCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIGAvLy8gPHJlZmVyZW5jZSB0eXBlcz1cInZpdGUvY2xpZW50XCIgLz5cbmA7XG4gIH1cbn1cblxuaW50ZXJmYWNlIENvbmZpZ0ZpbGVPcHRpb25zIHtcbiAgcmVhZG9ubHkgc3JjZGlyOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ3JlYXRlcyB0aGUgY29uZmlnLnRzIGZpbGUgZm9yIHJ1bnRpbWUgY29uZmlndXJhdGlvblxuICovXG5jbGFzcyBDb25maWdGaWxlIGV4dGVuZHMgRmlsZUJhc2Uge1xuICBjb25zdHJ1Y3Rvcihwcm9qZWN0OiBQcm9qZWN0LCBvcHRpb25zOiBDb25maWdGaWxlT3B0aW9ucykge1xuICAgIHN1cGVyKHByb2plY3QsIGAke29wdGlvbnMuc3JjZGlyfS9jb25maWcudHNgLCB7XG4gICAgICBtYXJrZXI6IHRydWUsXG4gICAgICByZWFkb25seTogdHJ1ZSxcbiAgICB9KTtcbiAgfVxuXG4gIHN5bnRoZXNpemVDb250ZW50KCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgLy8gR2V0IGN1c3RvbSBjb25maWcgZmllbGRzIGZyb20gcGFyZW50IHByb2plY3RcbiAgICBjb25zdCB2aXRlUHJvamVjdCA9IHRoaXMucHJvamVjdCBhcyBWaXRlUmVhY3RQcm9qZWN0O1xuICAgIGNvbnN0IGN1c3RvbUZpZWxkcyA9IHZpdGVQcm9qZWN0LmdldENvbmZpZ0ZpZWxkcygpO1xuXG4gICAgLy8gR2VuZXJhdGUgYmFzZSBjb25maWcgdHlwZVxuICAgIGNvbnN0IGJhc2VDb25maWdUeXBlID0gYHR5cGUgQmFzZUNvbmZpZyA9IHtcbiAgY2xlcmtQdWJsaXNoYWJsZUtleTogc3RyaW5nO1xuICBhcGlCYXNlVXJsOiBzdHJpbmc7XG4gIHRpbWVvdXQ6IG51bWJlcjtcbn1gO1xuXG4gICAgLy8gR2VuZXJhdGUgY3VzdG9tIGZpZWxkcyB0eXBlIGlmIGFueSBleGlzdFxuICAgIGxldCBjb25maWdUeXBlRGVmaW5pdGlvbjogc3RyaW5nO1xuICAgIGlmIChjdXN0b21GaWVsZHMuc2l6ZSA+IDApIHtcbiAgICAgIGNvbnN0IGZpZWxkRGVmaW5pdGlvbnMgPSBBcnJheS5mcm9tKGN1c3RvbUZpZWxkcy5lbnRyaWVzKCkpXG4gICAgICAgIC5tYXAoKFtuYW1lLCB0eXBlXSkgPT4gYCAgJHtuYW1lfTogJHt0eXBlfTtgKVxuICAgICAgICAuam9pbignXFxuJyk7XG5cbiAgICAgIGNvbnN0IGN1c3RvbUZpZWxkc1R5cGUgPSBgdHlwZSBDdXN0b21Db25maWcgPSB7XG4ke2ZpZWxkRGVmaW5pdGlvbnN9XG59YDtcblxuICAgICAgY29uZmlnVHlwZURlZmluaXRpb24gPSBgJHtjdXN0b21GaWVsZHNUeXBlfVxuXG5leHBvcnQgdHlwZSBDb25maWcgPSBCYXNlQ29uZmlnICYgQ3VzdG9tQ29uZmlnO2A7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbmZpZ1R5cGVEZWZpbml0aW9uID0gJ2V4cG9ydCB0eXBlIENvbmZpZyA9IEJhc2VDb25maWc7JztcbiAgICB9XG5cbiAgICByZXR1cm4gYGltcG9ydCB7IHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5cbiR7YmFzZUNvbmZpZ1R5cGV9XG5cbiR7Y29uZmlnVHlwZURlZmluaXRpb259XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VDb25maWcoKSB7XG4gIGNvbnN0IFtsb2FkZWRDb25maWcsIHNldExvYWRlZENvbmZpZ10gPSB1c2VTdGF0ZTxDb25maWd8dW5kZWZpbmVkPigpO1xuICBjb25zdCBbaXNMb2FkaW5nLCBzZXRJc0xvYWRpbmddID0gdXNlU3RhdGUoZmFsc2UpO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFsb2FkZWRDb25maWcpIHtcbiAgICAgIGZldGNoKCcvY29uZmlnLmpzb24nLCB7IGNhY2hlOiAnbm8tc3RvcmUnIH0pLnRoZW4ocmVzcG9uc2U9PntcbiAgICAgICAgcmVzcG9uc2UuanNvbigpLnRoZW4oKGNvbmZpZykgPT4ge1xuICAgICAgICAgIHNldElzTG9hZGluZyhmYWxzZSlcbiAgICAgICAgICBzZXRMb2FkZWRDb25maWcoY29uZmlnKVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgfVxuICB9LCBbbG9hZGVkQ29uZmlnXSk7XG5cbiAgcmV0dXJuIHsgY29uZmlnOiBsb2FkZWRDb25maWcsIGlzTG9hZGluZyB9O1xufVxuYDtcbiAgfVxufVxuXG5pbnRlcmZhY2UgQ29uZmlnSnNvbkZpbGVPcHRpb25zIHt9XG5cbi8qKlxuICogQ3JlYXRlcyB0aGUgY29uZmlnLmpzb24gc2FtcGxlIGZpbGUgZm9yIHJ1bnRpbWUgY29uZmlndXJhdGlvblxuICovXG5jbGFzcyBDb25maWdKc29uRmlsZSBleHRlbmRzIFNhbXBsZUZpbGUge1xuICBwYXRoOiBzdHJpbmc7XG4gIGNvbnN0cnVjdG9yKHByb2plY3Q6IFZpdGVSZWFjdFByb2plY3QsIF9vcHRpb25zOiBDb25maWdKc29uRmlsZU9wdGlvbnMpIHtcbiAgICBzdXBlcihwcm9qZWN0LCBgJHtwcm9qZWN0LnB1YmxpY0Rpcn0vY29uZmlnLmpzb25gLCB7XG4gICAgICBjb250ZW50czogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICBhcGlCYXNlVXJsOiAnaHR0cDovL2xvY2FsaG9zdDozMDAwL2FwaScsXG4gICAgICAgIGNsZXJrUHVibGlzaGFibGVLZXk6ICd0YmQnLFxuICAgICAgfSwgbnVsbCwgMiksXG4gICAgfSk7XG4gICAgdGhpcy5wYXRoID0gYCR7cHJvamVjdC5wdWJsaWNEaXJ9L2NvbmZpZy5qc29uYDtcbiAgfVxufVxuXG5pbnRlcmZhY2UgSW5kZXhIdG1sT3B0aW9ucyB7XG4gIHJlYWRvbmx5IHRpdGxlOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHNyY2Rpcjogc3RyaW5nO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgdGhlIGluZGV4Lmh0bWwgZmlsZVxuICovXG5jbGFzcyBJbmRleEh0bWwgZXh0ZW5kcyBTYW1wbGVGaWxlIHtcbiAgY29uc3RydWN0b3IocHJvamVjdDogUHJvamVjdCwgb3B0aW9uczogSW5kZXhIdG1sT3B0aW9ucykge1xuICAgIHN1cGVyKHByb2plY3QsICdpbmRleC5odG1sJywge1xuICAgICAgY29udGVudHM6IGA8IWRvY3R5cGUgaHRtbD5cbjxodG1sIGxhbmc9XCJlblwiPlxuICA8aGVhZD5cbiAgICA8bWV0YSBjaGFyc2V0PVwiVVRGLThcIiAvPlxuICAgIDxsaW5rIHJlbD1cImljb25cIiB0eXBlPVwiaW1hZ2Uvc3ZnK3htbFwiIGhyZWY9XCIvdml0ZS5zdmdcIiAvPlxuICAgIDxtZXRhIG5hbWU9XCJ2aWV3cG9ydFwiIGNvbnRlbnQ9XCJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MS4wXCIgLz5cbiAgICA8dGl0bGU+JHtvcHRpb25zLnRpdGxlfTwvdGl0bGU+XG4gIDwvaGVhZD5cbiAgPGJvZHk+XG4gICAgPGRpdiBpZD1cInJvb3RcIj48L2Rpdj5cbiAgICA8c2NyaXB0IHR5cGU9XCJtb2R1bGVcIiBzcmM9XCIvJHtvcHRpb25zLnNyY2Rpcn0vbWFpbi50c3hcIj48L3NjcmlwdD5cbiAgPC9ib2R5PlxuPC9odG1sPlxuYCxcbiAgICB9KTtcbiAgfVxufVxuXG5pbnRlcmZhY2UgVml0ZVRzQ29uZmlnc09wdGlvbnMge1xuICByZWFkb25seSBzcmNkaXI6IHN0cmluZztcbn1cblxuLyoqXG4gKiBDcmVhdGVzIHRoZSBUeXBlU2NyaXB0IGNvbmZpZ3VyYXRpb24gZmlsZXMgZm9yIFZpdGVcbiAqL1xuY2xhc3MgVml0ZVRzQ29uZmlncyBleHRlbmRzIENvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKHByb2plY3Q6IFByb2plY3QsIG9wdGlvbnM6IFZpdGVUc0NvbmZpZ3NPcHRpb25zKSB7XG4gICAgc3VwZXIocHJvamVjdCk7XG5cbiAgICAvLyBNYWluIHRzY29uZmlnLmpzb24gKHByb2plY3QgcmVmZXJlbmNlcylcbiAgICBuZXcgSnNvbkZpbGUocHJvamVjdCwgJ3RzY29uZmlnLmpzb24nLCB7XG4gICAgICBtYXJrZXI6IHRydWUsXG4gICAgICByZWFkb25seTogdHJ1ZSxcbiAgICAgIG9iajoge1xuICAgICAgICBmaWxlczogW10sXG4gICAgICAgIHJlZmVyZW5jZXM6IFtcbiAgICAgICAgICB7IHBhdGg6ICcuL3RzY29uZmlnLmFwcC5qc29uJyB9LFxuICAgICAgICAgIHsgcGF0aDogJy4vdHNjb25maWcubm9kZS5qc29uJyB9LFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIC8vIHRzY29uZmlnLmFwcC5qc29uIChmb3IgYXBwbGljYXRpb24gY29kZSlcbiAgICBuZXcgSnNvbkZpbGUocHJvamVjdCwgJ3RzY29uZmlnLmFwcC5qc29uJywge1xuICAgICAgbWFya2VyOiB0cnVlLFxuICAgICAgcmVhZG9ubHk6IHRydWUsXG4gICAgICBvYmo6IHtcbiAgICAgICAgY29tcGlsZXJPcHRpb25zOiB7XG4gICAgICAgICAgdGFyZ2V0OiAnRVMyMDIwJyxcbiAgICAgICAgICB1c2VEZWZpbmVGb3JDbGFzc0ZpZWxkczogdHJ1ZSxcbiAgICAgICAgICBsaWI6IFsnRVMyMDIwJywgJ0RPTScsICdET00uSXRlcmFibGUnXSxcbiAgICAgICAgICBtb2R1bGU6ICdFU05leHQnLFxuICAgICAgICAgIHNraXBMaWJDaGVjazogdHJ1ZSxcblxuICAgICAgICAgIC8vIEJ1bmRsZXIgbW9kZVxuICAgICAgICAgIG1vZHVsZVJlc29sdXRpb246ICdidW5kbGVyJyxcbiAgICAgICAgICBhbGxvd0ltcG9ydGluZ1RzRXh0ZW5zaW9uczogdHJ1ZSxcbiAgICAgICAgICBpc29sYXRlZE1vZHVsZXM6IHRydWUsXG4gICAgICAgICAgbW9kdWxlRGV0ZWN0aW9uOiAnZm9yY2UnLFxuICAgICAgICAgIG5vRW1pdDogdHJ1ZSxcbiAgICAgICAgICBqc3g6ICdyZWFjdC1qc3gnLFxuXG4gICAgICAgICAgLy8gTGludGluZ1xuICAgICAgICAgIHN0cmljdDogdHJ1ZSxcbiAgICAgICAgICBub1VudXNlZExvY2FsczogdHJ1ZSxcbiAgICAgICAgICBub1VudXNlZFBhcmFtZXRlcnM6IHRydWUsXG4gICAgICAgICAgbm9GYWxsdGhyb3VnaENhc2VzSW5Td2l0Y2g6IHRydWUsXG4gICAgICAgICAgbm9VbmNoZWNrZWRTaWRlRWZmZWN0SW1wb3J0czogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgaW5jbHVkZTogW29wdGlvbnMuc3JjZGlyXSxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICAvLyB0c2NvbmZpZy5ub2RlLmpzb24gKGZvciBWaXRlIGNvbmZpZylcbiAgICBuZXcgSnNvbkZpbGUocHJvamVjdCwgJ3RzY29uZmlnLm5vZGUuanNvbicsIHtcbiAgICAgIG1hcmtlcjogdHJ1ZSxcbiAgICAgIHJlYWRvbmx5OiB0cnVlLFxuICAgICAgb2JqOiB7XG4gICAgICAgIGNvbXBpbGVyT3B0aW9uczoge1xuICAgICAgICAgIHRhcmdldDogJ0VTMjAyMicsXG4gICAgICAgICAgbGliOiBbJ0VTMjAyMyddLFxuICAgICAgICAgIG1vZHVsZTogJ0VTTmV4dCcsXG4gICAgICAgICAgc2tpcExpYkNoZWNrOiB0cnVlLFxuXG4gICAgICAgICAgLy8gQnVuZGxlciBtb2RlXG4gICAgICAgICAgbW9kdWxlUmVzb2x1dGlvbjogJ2J1bmRsZXInLFxuICAgICAgICAgIGFsbG93SW1wb3J0aW5nVHNFeHRlbnNpb25zOiB0cnVlLFxuICAgICAgICAgIGlzb2xhdGVkTW9kdWxlczogdHJ1ZSxcbiAgICAgICAgICBtb2R1bGVEZXRlY3Rpb246ICdmb3JjZScsXG4gICAgICAgICAgbm9FbWl0OiB0cnVlLFxuXG4gICAgICAgICAgLy8gTGludGluZ1xuICAgICAgICAgIHN0cmljdDogdHJ1ZSxcbiAgICAgICAgICBub1VudXNlZExvY2FsczogdHJ1ZSxcbiAgICAgICAgICBub1VudXNlZFBhcmFtZXRlcnM6IHRydWUsXG4gICAgICAgICAgbm9GYWxsdGhyb3VnaENhc2VzSW5Td2l0Y2g6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIGluY2x1ZGU6IFsndml0ZS5jb25maWcudHMnXSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cbn1cblxuaW50ZXJmYWNlIFZpdGVTYW1wbGVDb2RlT3B0aW9ucyB7XG4gIHJlYWRvbmx5IHNyY2Rpcjogc3RyaW5nO1xuICByZWFkb25seSBwdWJsaWNEaXI6IHN0cmluZztcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgc2FtcGxlIGNvZGUgZm9yIGEgVml0ZSArIFJlYWN0IHByb2plY3RcbiAqL1xuY2xhc3MgVml0ZVNhbXBsZUNvZGUgZXh0ZW5kcyBDb21wb25lbnQge1xuICBjb25zdHJ1Y3Rvcihwcm9qZWN0OiBQcm9qZWN0LCBvcHRpb25zOiBWaXRlU2FtcGxlQ29kZU9wdGlvbnMpIHtcbiAgICBzdXBlcihwcm9qZWN0KTtcblxuICAgIC8vIENyZWF0ZSBBcHAudHN4XG4gICAgbmV3IFNhbXBsZUZpbGUocHJvamVjdCwgYCR7b3B0aW9ucy5zcmNkaXJ9L0FwcC50c3hgLCB7XG4gICAgICBjb250ZW50czogYGltcG9ydCAnLi9BcHAuY3NzJ1xuaW1wb3J0IHsgU2lnbmVkSW4sIFVzZXJCdXR0b24gfSBmcm9tICdAY2xlcmsvY2xlcmstcmVhY3QnO1xuaW1wb3J0IHsgdXNlQmFzZVF1ZXJ5IH0gZnJvbSBcIi4vc2VydmljZXMvQmFzZVNlcnZpY2UudHNcIjtcblxuXG5mdW5jdGlvbiBBcHAoKSB7XG4gIGNvbnN0IHtkYXRhLCBpc0xvYWRpbmd9ID0gdXNlQmFzZVF1ZXJ5KCcvJywge3JldHJ5T25Nb3VudDogdHJ1ZX0pO1xuXG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgICA8aGVhZGVyPlxuXG4gICAgICAgICAgPFNpZ25lZEluPlxuICAgICAgICAgICAgPFVzZXJCdXR0b24vPlxuICAgICAgICAgIDwvU2lnbmVkSW4+XG4gICAgICAgIDwvaGVhZGVyPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNhcmRcIj5cbiAgICAgICAgICB7IGlzTG9hZGluZyA/ICdMb2FkaW5nLi4uJyA6IEpTT04uc3RyaW5naWZ5KGRhdGEsIG51bGwgLCl9XG4gICAgICAgIDwvZGl2PlxuICAgIDwvPlxuICApXG59XG5cbmV4cG9ydCBkZWZhdWx0IEFwcFxuYCxcbiAgICB9KTtcblxuICAgIC8vIENyZWF0ZSBCYXNlU2VydmljZS50c1xuICAgIG5ldyBUZXh0RmlsZShwcm9qZWN0LCBgJHtvcHRpb25zLnNyY2Rpcn0vc2VydmljZXMvQmFzZVNlcnZpY2UudHNgLCB7XG4gICAgICBtYXJrZXI6IHRydWUsXG4gICAgICByZWFkb25seTogdHJ1ZSxcbiAgICAgIGxpbmVzOiBbXG4gICAgICAgICdpbXBvcnQgeyB1c2VRdWVyeSwgVXNlUXVlcnlPcHRpb25zIH0gZnJvbSBcXCdAdGFuc3RhY2svcmVhY3QtcXVlcnlcXCc7JyxcbiAgICAgICAgJ2ltcG9ydCB7IHVzZUF1dGggfSBmcm9tIFxcJ0BjbGVyay9jbGVyay1yZWFjdFxcJzsnLFxuICAgICAgICAnaW1wb3J0IHsgdXNlQ29uZmlnIH0gZnJvbSBcXCcuLi9jb25maWdcXCc7JyxcbiAgICAgICAgJycsXG4gICAgICAgICdleHBvcnQgZnVuY3Rpb24gdXNlQmFzZVF1ZXJ5PFREYXRhID0gdW5rbm93bj4oJyxcbiAgICAgICAgJyAgcGF0aDogc3RyaW5nLCcsXG4gICAgICAgICcgIG9wdGlvbnM/OiBPbWl0PFVzZVF1ZXJ5T3B0aW9uczxURGF0YT4sIFxcJ3F1ZXJ5S2V5XFwnIHwgXFwncXVlcnlGblxcJz4nLFxuICAgICAgICAnKSB7JyxcbiAgICAgICAgJyAgY29uc3QgeyBjb25maWcgfSA9IHVzZUNvbmZpZygpOycsXG4gICAgICAgICcgIGNvbnN0IHsgZ2V0VG9rZW4gfSA9IHVzZUF1dGgoKTsnLFxuICAgICAgICAnJyxcbiAgICAgICAgJyAgcmV0dXJuIHVzZVF1ZXJ5PFREYXRhPih7JyxcbiAgICAgICAgJyAgICBxdWVyeUtleTogW1xcJ2Jhc2VcXCddLCcsXG4gICAgICAgICcgICAgcXVlcnlGbjogYXN5bmMgKCkgPT4geycsXG4gICAgICAgICcgICAgICBpZiAoIWNvbmZpZz8uYXBpQmFzZVVybCkgeycsXG4gICAgICAgICcgICAgICAgIHRocm93IG5ldyBFcnJvcihcXCdBUEkgYmFzZSBVUkwgbm90IGNvbmZpZ3VyZWRcXCcpOycsXG4gICAgICAgICcgICAgICB9JyxcbiAgICAgICAgJycsXG4gICAgICAgICcgICAgICBjb25zdCB0b2tlbiA9IGF3YWl0IGdldFRva2VuKCk7JyxcbiAgICAgICAgJycsXG4gICAgICAgICcgICAgICAvLyBOb3JtYWxpemUgVVJMIGJ5IHJlbW92aW5nIHRyYWlsaW5nIHNsYXNoIGZyb20gYmFzZVVybCBhbmQgZW5zdXJpbmcgcGF0aCBzdGFydHMgd2l0aCBzbGFzaCcsXG4gICAgICAgICcgICAgICBjb25zdCBiYXNlVXJsID0gY29uZmlnLmFwaUJhc2VVcmwucmVwbGFjZSgvXFxcXC8rJC8sIFxcJ1xcJyk7JyxcbiAgICAgICAgJyAgICAgIGNvbnN0IG5vcm1hbGl6ZWRQYXRoID0gcGF0aC5zdGFydHNXaXRoKFxcJy9cXCcpID8gcGF0aCA6IGAvJHtwYXRofWA7JyxcbiAgICAgICAgJyAgICAgICcsXG4gICAgICAgICcgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGAke2Jhc2VVcmx9JHtub3JtYWxpemVkUGF0aH1gLCB7JyxcbiAgICAgICAgJyAgICAgICAgaGVhZGVyczogeycsXG4gICAgICAgICcgICAgICAgICAgXFwnQXV0aG9yaXphdGlvblxcJzogYEJlYXJlciAke3Rva2VufWAsJyxcbiAgICAgICAgJyAgICAgICAgfSwnLFxuICAgICAgICAnICAgICAgfSk7JyxcbiAgICAgICAgJycsXG4gICAgICAgICcgICAgICBpZiAoIXJlc3BvbnNlLm9rKSB7JyxcbiAgICAgICAgJyAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBIVFRQIGVycm9yISBzdGF0dXM6ICR7cmVzcG9uc2Uuc3RhdHVzfWApOycsXG4gICAgICAgICcgICAgICB9JyxcbiAgICAgICAgJycsXG4gICAgICAgICcgICAgICByZXR1cm4gcmVzcG9uc2UuanNvbigpOycsXG4gICAgICAgICcgICAgfSwnLFxuICAgICAgICAnICAgIGVuYWJsZWQ6ICEhY29uZmlnPy5hcGlCYXNlVXJsLCcsXG4gICAgICAgICcgICAgLi4ub3B0aW9ucywnLFxuICAgICAgICAnICB9KTsnLFxuICAgICAgICAnfScsXG4gICAgICBdLFxuICAgIH0pO1xuXG4gICAgLy8gQ3JlYXRlIFJvb3RTZXJ2aWNlLnRzXG4gICAgbmV3IFNhbXBsZUZpbGUocHJvamVjdCwgYCR7b3B0aW9ucy5zcmNkaXJ9L3NlcnZpY2VzL1Jvb3RTZXJ2aWNlLnRzYCwge1xuICAgICAgY29udGVudHM6IGBpbXBvcnQgeyBVc2VRdWVyeU9wdGlvbnMgfSBmcm9tICdAdGFuc3RhY2svcmVhY3QtcXVlcnknO1xuaW1wb3J0IHsgdXNlQmFzZVF1ZXJ5IH0gZnJvbSAnLi9CYXNlU2VydmljZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VSb290UXVlcnk8VERhdGEgPSB1bmtub3duPihcbiAgb3B0aW9ucz86IE9taXQ8VXNlUXVlcnlPcHRpb25zPFREYXRhPiwgJ3F1ZXJ5S2V5JyB8ICdxdWVyeUZuJz5cbikge1xuICByZXR1cm4gdXNlQmFzZVF1ZXJ5PFREYXRhPignLycsIG9wdGlvbnMpO1xufVxuYCxcbiAgICB9KTtcblxuICAgIC8vIENyZWF0ZSBBcHAuY3NzXG4gICAgbmV3IFNhbXBsZUZpbGUocHJvamVjdCwgYCR7b3B0aW9ucy5zcmNkaXJ9L0FwcC5jc3NgLCB7XG4gICAgICBjb250ZW50czogYCNyb290IHtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbn1cblxuLmxvZ28ge1xuICBoZWlnaHQ6IDZlbTtcbiAgcGFkZGluZzogMS41ZW07XG4gIHdpbGwtY2hhbmdlOiBmaWx0ZXI7XG4gIHRyYW5zaXRpb246IGZpbHRlciAzMDBtcztcbn1cbi5sb2dvOmhvdmVyIHtcbiAgZmlsdGVyOiBkcm9wLXNoYWRvdygwIDAgMmVtICM2NDZjZmZhYSk7XG59XG4ubG9nby5yZWFjdDpob3ZlciB7XG4gIGZpbHRlcjogZHJvcC1zaGFkb3coMCAwIDJlbSAjNjFkYWZiYWEpO1xufVxuXG5Aa2V5ZnJhbWVzIGxvZ28tc3BpbiB7XG4gIGZyb20ge1xuICAgIHRyYW5zZm9ybTogcm90YXRlKDBkZWcpO1xuICB9XG4gIHRvIHtcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpO1xuICB9XG59XG5cbkBtZWRpYSAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogbm8tcHJlZmVyZW5jZSkge1xuICBhOm50aC1vZi10eXBlKDIpIC5sb2dvIHtcbiAgICBhbmltYXRpb246IGxvZ28tc3BpbiBpbmZpbml0ZSAyMHMgbGluZWFyO1xuICB9XG59XG5cbi5jYXJkIHtcbiAgcGFkZGluZzogMmVtO1xufVxuXG4ucmVhZC10aGUtZG9jcyB7XG4gIGNvbG9yOiAjODg4O1xufVxuYCxcbiAgICB9KTtcblxuICAgIC8vIENyZWF0ZSBtYWluLnRzeFxuICAgIG5ldyBTYW1wbGVGaWxlKHByb2plY3QsIGAke29wdGlvbnMuc3JjZGlyfS9tYWluLnRzeGAsIHtcbiAgICAgIGNvbnRlbnRzOiBgaW1wb3J0IHsgU3RyaWN0TW9kZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgY3JlYXRlUm9vdCB9IGZyb20gJ3JlYWN0LWRvbS9jbGllbnQnXG5pbXBvcnQgJy4vaW5kZXguY3NzJ1xuaW1wb3J0IEFwcCBmcm9tICcuL0FwcC50c3gnXG5pbXBvcnQgeyBDbGVya1Byb3ZpZGVyLCBTaWduZWRJbiwgU2lnbmVkT3V0LCBTaWduSW5CdXR0b24gfSBmcm9tICdAY2xlcmsvY2xlcmstcmVhY3QnXG5pbXBvcnQgeyB1c2VDb25maWcgfSBmcm9tICcuL2NvbmZpZydcbmltcG9ydCB7IFF1ZXJ5Q2xpZW50LCBRdWVyeUNsaWVudFByb3ZpZGVyIH0gZnJvbSBcIkB0YW5zdGFjay9yZWFjdC1xdWVyeVwiXG5cbmZ1bmN0aW9uIEFwcFdyYXBwZXIoKSB7XG4gIGNvbnN0IHsgY29uZmlnLCBpc0xvYWRpbmcgfSA9IHVzZUNvbmZpZygpO1xuICBjb25zdCBxdWVyeUNsaWVudCA9IG5ldyBRdWVyeUNsaWVudCgpXG4gIGlmIChpc0xvYWRpbmcgfHwgIWNvbmZpZykge1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImxvYWRpbmctc2NyZWVuXCI+XG4gICAgICAgIExvYWRpbmcuLi5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxDbGVya1Byb3ZpZGVyIHB1Ymxpc2hhYmxlS2V5PXtjb25maWcuY2xlcmtQdWJsaXNoYWJsZUtleX0+XG4gICAgICA8UXVlcnlDbGllbnRQcm92aWRlciBjbGllbnQ9e3F1ZXJ5Q2xpZW50fT5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ3LWZ1bGwgaC1mdWxsXCI+XG4gICAgICAgICAgPFNpZ25lZE91dD5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgbWluLWgtc2NyZWVuXCI+XG4gICAgICAgICAgICAgIDxTaWduSW5CdXR0b24vPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9TaWduZWRPdXQ+XG4gICAgICAgICAgPFNpZ25lZEluPlxuICAgICAgICAgICAgPEFwcC8+XG4gICAgICAgICAgPC9TaWduZWRJbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L1F1ZXJ5Q2xpZW50UHJvdmlkZXI+XG4gICAgPC9DbGVya1Byb3ZpZGVyPlxuICApO1xufVxuXG5jcmVhdGVSb290KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyb290JykhKS5yZW5kZXIoXG4gIDxTdHJpY3RNb2RlPlxuICAgIDxBcHBXcmFwcGVyLz5cbiAgPC9TdHJpY3RNb2RlPlxuKVxuYCxcbiAgICB9KTtcblxuICAgIC8vIENyZWF0ZSBpbmRleC5jc3NcbiAgICBuZXcgU2FtcGxlRmlsZShwcm9qZWN0LCBgJHtvcHRpb25zLnNyY2Rpcn0vaW5kZXguY3NzYCwge1xuICAgICAgY29udGVudHM6IGBAaW1wb3J0IFwidGFpbHdpbmRjc3NcIjtcblxuQHRoZW1lIHtcbiAgLS1jb2xvci1zY2hlbWU6IGxpZ2h0IGRhcms7XG59XG5cbjpyb290IHtcbiAgZm9udC1mYW1pbHk6IEludGVyLCBzeXN0ZW0tdWksIEF2ZW5pciwgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgbGluZS1oZWlnaHQ6IDEuNTtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcblxuICBjb2xvci1zY2hlbWU6IGxpZ2h0IGRhcms7XG5cbiAgZm9udC1zeW50aGVzaXM6IG5vbmU7XG4gIHRleHQtcmVuZGVyaW5nOiBvcHRpbWl6ZUxlZ2liaWxpdHk7XG4gIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkO1xuICAtbW96LW9zeC1mb250LXNtb290aGluZzogZ3JheXNjYWxlO1xufVxuXG5hIHtcbiAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgY29sb3I6ICM2NDZjZmY7XG4gIHRleHQtZGVjb3JhdGlvbjogaW5oZXJpdDtcbn1cbmE6aG92ZXIge1xuICBjb2xvcjogIzUzNWJmMjtcbn1cblxuYm9keSB7XG4gIG1hcmdpbjogMDtcbiAgbWluLXdpZHRoOiAzMjBweDtcbiAgbWluLWhlaWdodDogMTAwdmg7XG59XG5cbmgxIHtcbiAgZm9udC1zaXplOiAzLjJlbTtcbiAgbGluZS1oZWlnaHQ6IDEuMTtcbn1cblxuYnV0dG9uIHtcbiAgZm9udC1mYW1pbHk6IGluaGVyaXQ7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cblxuLmxvYWRpbmctc2NyZWVuIHtcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGhlaWdodDogMTAwdmg7XG4gIGZvbnQtc2l6ZTogMS41cmVtO1xufVxuXG5odG1sLCBib2R5LCAjcm9vdCB7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG59XG5gLFxuICAgIH0pO1xuXG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SHA-pinned action references used by the generated deploy/cleanup workflows.
|
|
3
|
+
*
|
|
4
|
+
* zizmor flags unpinned `uses:` references as a high-severity finding
|
|
5
|
+
* (https://docs.zizmor.sh/audits/#unpinned-uses) because a mutable tag can be
|
|
6
|
+
* repointed to different code after review. Every field here can be
|
|
7
|
+
* overridden by consumers who need a different pinned SHA (e.g. to pick up a
|
|
8
|
+
* newer release before this package does).
|
|
9
|
+
*/
|
|
10
|
+
export interface WorkflowActionVersions {
|
|
11
|
+
/**
|
|
12
|
+
* The `actions/checkout` action reference.
|
|
13
|
+
*
|
|
14
|
+
* @default 'actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09' // v5.1.0
|
|
15
|
+
*/
|
|
16
|
+
readonly checkout?: string;
|
|
17
|
+
/**
|
|
18
|
+
* The `actions/setup-node` action reference.
|
|
19
|
+
*
|
|
20
|
+
* @default 'actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444' // v5.0.0
|
|
21
|
+
*/
|
|
22
|
+
readonly setupNode?: string;
|
|
23
|
+
/**
|
|
24
|
+
* The `aws-actions/configure-aws-credentials` action reference.
|
|
25
|
+
*
|
|
26
|
+
* @default 'aws-actions/configure-aws-credentials@7474bc4690e29a8392af63c5b98e7449536d5c3a' // v4.3.1
|
|
27
|
+
*/
|
|
28
|
+
readonly configureAwsCredentials?: string;
|
|
29
|
+
/**
|
|
30
|
+
* The `pnpm/action-setup` action reference, used when the project's package manager is pnpm.
|
|
31
|
+
*
|
|
32
|
+
* @default 'pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86' // v6.0.10
|
|
33
|
+
*/
|
|
34
|
+
readonly pnpmActionSetup?: string;
|
|
35
|
+
}
|
|
36
|
+
export declare const DEFAULT_WORKFLOW_ACTION_VERSIONS: Required<WorkflowActionVersions>;
|
|
37
|
+
export declare function resolveActionVersions(overrides?: WorkflowActionVersions): Required<WorkflowActionVersions>;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DEFAULT_WORKFLOW_ACTION_VERSIONS = void 0;
|
|
4
|
+
exports.resolveActionVersions = resolveActionVersions;
|
|
5
|
+
exports.DEFAULT_WORKFLOW_ACTION_VERSIONS = {
|
|
6
|
+
checkout: 'actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09', // v5.1.0
|
|
7
|
+
setupNode: 'actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444', // v5.0.0
|
|
8
|
+
configureAwsCredentials: 'aws-actions/configure-aws-credentials@7474bc4690e29a8392af63c5b98e7449536d5c3a', // v4.3.1
|
|
9
|
+
pnpmActionSetup: 'pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86', // v6.0.10
|
|
10
|
+
};
|
|
11
|
+
function resolveActionVersions(overrides) {
|
|
12
|
+
return {
|
|
13
|
+
...exports.DEFAULT_WORKFLOW_ACTION_VERSIONS,
|
|
14
|
+
...overrides,
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiV29ya2Zsb3dBY3Rpb25WZXJzaW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9Xb3JrZmxvd0FjdGlvblZlcnNpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQThDQSxzREFLQztBQVpZLFFBQUEsZ0NBQWdDLEdBQXFDO0lBQ2hGLFFBQVEsRUFBRSwyREFBMkQsRUFBRSxTQUFTO0lBQ2hGLFNBQVMsRUFBRSw2REFBNkQsRUFBRSxTQUFTO0lBQ25GLHVCQUF1QixFQUFFLGdGQUFnRixFQUFFLFNBQVM7SUFDcEgsZUFBZSxFQUFFLDREQUE0RCxFQUFFLFVBQVU7Q0FDMUYsQ0FBQztBQUVGLFNBQWdCLHFCQUFxQixDQUFDLFNBQWtDO0lBQ3RFLE9BQU87UUFDTCxHQUFHLHdDQUFnQztRQUNuQyxHQUFHLFNBQVM7S0FDYixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogU0hBLXBpbm5lZCBhY3Rpb24gcmVmZXJlbmNlcyB1c2VkIGJ5IHRoZSBnZW5lcmF0ZWQgZGVwbG95L2NsZWFudXAgd29ya2Zsb3dzLlxuICpcbiAqIHppem1vciBmbGFncyB1bnBpbm5lZCBgdXNlczpgIHJlZmVyZW5jZXMgYXMgYSBoaWdoLXNldmVyaXR5IGZpbmRpbmdcbiAqIChodHRwczovL2RvY3Mueml6bW9yLnNoL2F1ZGl0cy8jdW5waW5uZWQtdXNlcykgYmVjYXVzZSBhIG11dGFibGUgdGFnIGNhbiBiZVxuICogcmVwb2ludGVkIHRvIGRpZmZlcmVudCBjb2RlIGFmdGVyIHJldmlldy4gRXZlcnkgZmllbGQgaGVyZSBjYW4gYmVcbiAqIG92ZXJyaWRkZW4gYnkgY29uc3VtZXJzIHdobyBuZWVkIGEgZGlmZmVyZW50IHBpbm5lZCBTSEEgKGUuZy4gdG8gcGljayB1cCBhXG4gKiBuZXdlciByZWxlYXNlIGJlZm9yZSB0aGlzIHBhY2thZ2UgZG9lcykuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV29ya2Zsb3dBY3Rpb25WZXJzaW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgYGFjdGlvbnMvY2hlY2tvdXRgIGFjdGlvbiByZWZlcmVuY2UuXG4gICAqXG4gICAqIEBkZWZhdWx0ICdhY3Rpb25zL2NoZWNrb3V0QGZiYzZmMzk5MmQyNGI3OTZkNWEwNDhmZjI3M2Y3ZmNjNGE3YjZjMDknIC8vIHY1LjEuMFxuICAgKi9cbiAgcmVhZG9ubHkgY2hlY2tvdXQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBgYWN0aW9ucy9zZXR1cC1ub2RlYCBhY3Rpb24gcmVmZXJlbmNlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAnYWN0aW9ucy9zZXR1cC1ub2RlQGEwODUzYzI0NTQ0NjI3ZjY1ZGRmMjU5YWJlNzNiMWQxOGE1OTE0NDQnIC8vIHY1LjAuMFxuICAgKi9cbiAgcmVhZG9ubHkgc2V0dXBOb2RlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgYGF3cy1hY3Rpb25zL2NvbmZpZ3VyZS1hd3MtY3JlZGVudGlhbHNgIGFjdGlvbiByZWZlcmVuY2UuXG4gICAqXG4gICAqIEBkZWZhdWx0ICdhd3MtYWN0aW9ucy9jb25maWd1cmUtYXdzLWNyZWRlbnRpYWxzQDc0NzRiYzQ2OTBlMjlhODM5MmFmNjNjNWI5OGU3NDQ5NTM2ZDVjM2EnIC8vIHY0LjMuMVxuICAgKi9cbiAgcmVhZG9ubHkgY29uZmlndXJlQXdzQ3JlZGVudGlhbHM/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBgcG5wbS9hY3Rpb24tc2V0dXBgIGFjdGlvbiByZWZlcmVuY2UsIHVzZWQgd2hlbiB0aGUgcHJvamVjdCdzIHBhY2thZ2UgbWFuYWdlciBpcyBwbnBtLlxuICAgKlxuICAgKiBAZGVmYXVsdCAncG5wbS9hY3Rpb24tc2V0dXBAMDk3N2ZkOTk3MjVmMWRiNDAwN2NjYjI5MjhkYmI0ZTkwZDA2Y2M4NicgLy8gdjYuMC4xMFxuICAgKi9cbiAgcmVhZG9ubHkgcG5wbUFjdGlvblNldHVwPzogc3RyaW5nO1xufVxuXG5leHBvcnQgY29uc3QgREVGQVVMVF9XT1JLRkxPV19BQ1RJT05fVkVSU0lPTlM6IFJlcXVpcmVkPFdvcmtmbG93QWN0aW9uVmVyc2lvbnM+ID0ge1xuICBjaGVja291dDogJ2FjdGlvbnMvY2hlY2tvdXRAZmJjNmYzOTkyZDI0Yjc5NmQ1YTA0OGZmMjczZjdmY2M0YTdiNmMwOScsIC8vIHY1LjEuMFxuICBzZXR1cE5vZGU6ICdhY3Rpb25zL3NldHVwLW5vZGVAYTA4NTNjMjQ1NDQ2MjdmNjVkZGYyNTlhYmU3M2IxZDE4YTU5MTQ0NCcsIC8vIHY1LjAuMFxuICBjb25maWd1cmVBd3NDcmVkZW50aWFsczogJ2F3cy1hY3Rpb25zL2NvbmZpZ3VyZS1hd3MtY3JlZGVudGlhbHNANzQ3NGJjNDY5MGUyOWE4MzkyYWY2M2M1Yjk4ZTc0NDk1MzZkNWMzYScsIC8vIHY0LjMuMVxuICBwbnBtQWN0aW9uU2V0dXA6ICdwbnBtL2FjdGlvbi1zZXR1cEAwOTc3ZmQ5OTcyNWYxZGI0MDA3Y2NiMjkyOGRiYjRlOTBkMDZjYzg2JywgLy8gdjYuMC4xMFxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVBY3Rpb25WZXJzaW9ucyhvdmVycmlkZXM/OiBXb3JrZmxvd0FjdGlvblZlcnNpb25zKTogUmVxdWlyZWQ8V29ya2Zsb3dBY3Rpb25WZXJzaW9ucz4ge1xuICByZXR1cm4ge1xuICAgIC4uLkRFRkFVTFRfV09SS0ZMT1dfQUNUSU9OX1ZFUlNJT05TLFxuICAgIC4uLm92ZXJyaWRlcyxcbiAgfTtcbn1cbiJdfQ==
|
|
@@ -39,7 +39,7 @@ const fs = __importStar(require("fs"));
|
|
|
39
39
|
const path = __importStar(require("path"));
|
|
40
40
|
const projen_1 = require("projen");
|
|
41
41
|
class WorkflowAutoDiscover extends projen_1.Component {
|
|
42
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@macedon-technologies/batman.WorkflowAutoDiscover", version: "1.14.
|
|
42
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@macedon-technologies/batman.WorkflowAutoDiscover", version: "1.14.3" };
|
|
43
43
|
constructor(project) {
|
|
44
44
|
super(project);
|
|
45
45
|
}
|
package/lib/index.d.ts
CHANGED
|
@@ -5,4 +5,5 @@ export { EnvironmentConfig } from './MainFile';
|
|
|
5
5
|
export { ApplicationEnvironmentConfig } from './Application';
|
|
6
6
|
export * from './StagingDeployWorkflow';
|
|
7
7
|
export * from './ProductionDeployWorkflow';
|
|
8
|
+
export * from './WorkflowActionVersions';
|
|
8
9
|
export * from './WorkflowAutoDiscover';
|
package/lib/index.js
CHANGED
|
@@ -21,5 +21,6 @@ Object.defineProperty(exports, "BootcampProject", { enumerable: true, get: funct
|
|
|
21
21
|
__exportStar(require("./CodeOwnersFile"), exports);
|
|
22
22
|
__exportStar(require("./StagingDeployWorkflow"), exports);
|
|
23
23
|
__exportStar(require("./ProductionDeployWorkflow"), exports);
|
|
24
|
+
__exportStar(require("./WorkflowActionVersions"), exports);
|
|
24
25
|
__exportStar(require("./WorkflowAutoDiscover"), exports);
|
|
25
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
26
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxrREFBZ0M7QUFDaEMscURBQTRFO0FBQW5FLGtIQUFBLGVBQWUsT0FBQTtBQUN4QixtREFBaUM7QUFHakMsMERBQXdDO0FBQ3hDLDZEQUEyQztBQUMzQywyREFBeUM7QUFDekMseURBQXVDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9CYXRtYW5Qcm9qZWN0JztcbmV4cG9ydCB7IEJvb3RjYW1wUHJvamVjdCwgQm9vdGNhbXBQcm9qZWN0T3B0aW9ucyB9IGZyb20gJy4vQm9vdGNhbXBQcm9qZWN0JztcbmV4cG9ydCAqIGZyb20gJy4vQ29kZU93bmVyc0ZpbGUnO1xuZXhwb3J0IHsgRW52aXJvbm1lbnRDb25maWcgfSBmcm9tICcuL01haW5GaWxlJztcbmV4cG9ydCB7IEFwcGxpY2F0aW9uRW52aXJvbm1lbnRDb25maWcgfSBmcm9tICcuL0FwcGxpY2F0aW9uJztcbmV4cG9ydCAqIGZyb20gJy4vU3RhZ2luZ0RlcGxveVdvcmtmbG93JztcbmV4cG9ydCAqIGZyb20gJy4vUHJvZHVjdGlvbkRlcGxveVdvcmtmbG93JztcbmV4cG9ydCAqIGZyb20gJy4vV29ya2Zsb3dBY3Rpb25WZXJzaW9ucyc7XG5leHBvcnQgKiBmcm9tICcuL1dvcmtmbG93QXV0b0Rpc2NvdmVyJztcbiJdfQ==
|
package/lib/utils.d.ts
CHANGED
|
@@ -1,2 +1,12 @@
|
|
|
1
|
+
import { NodePackageManager } from 'projen/lib/javascript';
|
|
2
|
+
/**
|
|
3
|
+
* Renders the command used to run a package.json script for the given package manager.
|
|
4
|
+
*/
|
|
5
|
+
export declare function runScriptCommand(packageManager: NodePackageManager, script: string): string;
|
|
6
|
+
/**
|
|
7
|
+
* Renders the command used to do a clean, reproducible dependency install (e.g. for CI)
|
|
8
|
+
* for the given package manager.
|
|
9
|
+
*/
|
|
10
|
+
export declare function installCommand(packageManager: NodePackageManager): string;
|
|
1
11
|
export declare function serializeTs(value: any, depth?: number): string;
|
|
2
12
|
export declare function readmeContents(projectName: string): string;
|
package/lib/utils.js
CHANGED
|
@@ -1,7 +1,42 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.runScriptCommand = runScriptCommand;
|
|
4
|
+
exports.installCommand = installCommand;
|
|
3
5
|
exports.serializeTs = serializeTs;
|
|
4
6
|
exports.readmeContents = readmeContents;
|
|
7
|
+
const javascript_1 = require("projen/lib/javascript");
|
|
8
|
+
/**
|
|
9
|
+
* Renders the command used to run a package.json script for the given package manager.
|
|
10
|
+
*/
|
|
11
|
+
function runScriptCommand(packageManager, script) {
|
|
12
|
+
switch (packageManager) {
|
|
13
|
+
case javascript_1.NodePackageManager.NPM:
|
|
14
|
+
return `npm run ${script}`;
|
|
15
|
+
case javascript_1.NodePackageManager.BUN:
|
|
16
|
+
return `bun run ${script}`;
|
|
17
|
+
case javascript_1.NodePackageManager.PNPM:
|
|
18
|
+
return `pnpm ${script}`;
|
|
19
|
+
default:
|
|
20
|
+
// all yarn variants (yarn, yarn2, yarn_classic, yarn_berry) share the `yarn` binary
|
|
21
|
+
return `yarn ${script}`;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Renders the command used to do a clean, reproducible dependency install (e.g. for CI)
|
|
26
|
+
* for the given package manager.
|
|
27
|
+
*/
|
|
28
|
+
function installCommand(packageManager) {
|
|
29
|
+
switch (packageManager) {
|
|
30
|
+
case javascript_1.NodePackageManager.NPM:
|
|
31
|
+
return 'npm ci';
|
|
32
|
+
case javascript_1.NodePackageManager.BUN:
|
|
33
|
+
return 'bun install --frozen-lockfile';
|
|
34
|
+
case javascript_1.NodePackageManager.PNPM:
|
|
35
|
+
return 'pnpm install --frozen-lockfile';
|
|
36
|
+
default:
|
|
37
|
+
return 'yarn install --frozen-lockfile';
|
|
38
|
+
}
|
|
39
|
+
}
|
|
5
40
|
function serializeTs(value, depth = 1) {
|
|
6
41
|
const pad = ' '.repeat(depth);
|
|
7
42
|
const innerPad = ' '.repeat(depth + 1);
|
|
@@ -151,4 +186,4 @@ function readmeContents(projectName) {
|
|
|
151
186
|
'This updates all managed files to the latest Batman standards. Your editable sample files are never touched.',
|
|
152
187
|
].join('\n');
|
|
153
188
|
}
|
|
154
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxrQ0FnQkM7QUFFRCx3Q0FpSUM7QUFuSkQsU0FBZ0IsV0FBVyxDQUFDLEtBQVUsRUFBRSxLQUFLLEdBQUcsQ0FBQztJQUMvQyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQy9CLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3hDLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUTtRQUFFLE9BQU8sSUFBSSxLQUFLLEdBQUcsQ0FBQztJQUNuRCxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxPQUFPLEtBQUssS0FBSyxTQUFTO1FBQUUsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbEYsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDekIsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxHQUFHLFdBQVcsQ0FBQyxDQUFDLEVBQUUsS0FBSyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDcEYsT0FBTyxNQUFNLEtBQUssTUFBTSxHQUFHLEdBQUcsQ0FBQztJQUNqQyxDQUFDO0lBQ0QsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxLQUFLLElBQUksRUFBRSxDQUFDO1FBQ2hELE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO2FBQ2xDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLFFBQVEsR0FBRyxDQUFDLEtB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eHBvcnQgZnVuY3Rpb24gc2VyaWFsaXplVHModmFsdWU6IGFueSwgZGVwdGggPSAxKTogc3RyaW5nIHtcbiAgY29uc3QgcGFkID0gJyAgJy5yZXBlYXQoZGVwdGgpO1xuICBjb25zdCBpbm5lclBhZCA9ICcgICcucmVwZWF0KGRlcHRoICsgMSk7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSByZXR1cm4gYCcke3ZhbHVlfSdgO1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyB8fCB0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJykgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIGNvbnN0IGl0ZW1zID0gdmFsdWUubWFwKHYgPT4gYCR7aW5uZXJQYWR9JHtzZXJpYWxpemVUcyh2LCBkZXB0aCArIDEpfWApLmpvaW4oJyxcXG4nKTtcbiAgICByZXR1cm4gYFtcXG4ke2l0ZW1zfSxcXG4ke3BhZH1dYDtcbiAgfVxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IGVudHJpZXMgPSBPYmplY3QuZW50cmllcyh2YWx1ZSlcbiAgICAgIC5tYXAoKFtrLCB2XSkgPT4gYCR7aW5uZXJQYWR9JHtrfTogJHtzZXJpYWxpemVUcyh2LCBkZXB0aCArIDEpfWApXG4gICAgICAuam9pbignLFxcbicpO1xuICAgIHJldHVybiBge1xcbiR7ZW50cmllc30sXFxuJHtwYWR9fWA7XG4gIH1cbiAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRtZUNvbnRlbnRzKHByb2plY3ROYW1lOiBzdHJpbmcpIHtcbiAgcmV0dXJuIFtcbiAgICBgIyAke3Byb2plY3ROYW1lfWAsXG4gICAgJycsXG4gICAgJ1RoaXMgcHJvamVjdCB3YXMgYm9vdHN0cmFwcGVkIHdpdGggW0JhdG1hbl0oaHR0cHM6Ly9naXRodWIuY29tL21hY2Vkb24tdGVjaG5vbG9naWVzL3BsYXRmb3JtLWNvbW1vbikuJyxcbiAgICAnJyxcbiAgICAnIyMgV2hhdCBCYXRtYW4gQ3JlYXRlZCcsXG4gICAgJycsXG4gICAgJyMjIyBDREsgSW5mcmFzdHJ1Y3R1cmUgKGBzcmMvYCknLFxuICAgICcnLFxuICAgICd8IEZpbGUgfCBEZXNjcmlwdGlvbiB8JyxcbiAgICAnfC0tLS0tLXwtLS0tLS0tLS0tLS0tfCcsXG4gICAgJ3wgYHNyYy9tYWluLnRzYCB8IENESyBhcHAgZW50cnkgcG9pbnQg4oCUIGluc3RhbnRpYXRlcyBkZXYsIHN0YWdpbmcsIGFuZCBwcm9kIGBBcHBsaWNhdGlvblN0YWNrYHMgfCcsXG4gICAgJ3wgYHNyYy9Mb2NhbERldkFwcC50c2AgfCBMb2NhbCBkZXZlbG9wbWVudCBDREsgYXBwIOKAlCB1c2VkIGJ5IGB5YXJuIGNkazpkZXZgIC0gZGVwbG95cyB0byBBV1MgZm9yIHNsb3dlciBidXQgbW9yZSB0aG9yb3VnaCB0ZXN0aW5nIHwnLFxuICAgICd8IGBzcmMvR2l0SHViUm9sZXMudHNgIHwgQ0RLIGFwcCBmb3IgZGVwbG95aW5nIHRoZSBHaXRIdWIgT0lEQyBJQU0gcm9sZSAob25lLXRpbWUgYm9vdHN0cmFwKSB8JyxcbiAgICAnfCBgc3JjL3N0YWNrcy9BcHBsaWNhdGlvblN0YWNrLnRzYCB8IFlvdXIgcHJpbWFyeSBzdGFjayDigJQgZXh0ZW5kIGl0IHRvIGFkZCByZXNvdXJjZXMgfCcsXG4gICAgJ3wgYHNyYy9zdGFja3MvQmFzZUFwcGxpY2F0aW9uU3RhY2sudHNgIHwgQmFzZSBzdGFjayB3aXRoIFZQQywgQVBJLCBzdGF0aWMgd2Vic2l0ZSwgRGF0YWRvZywgYW5kIFJvdXRlIDUzIHdpcmVkIHVwIHwnLFxuICAgICd8IGBzcmMvc3RhY2tzL0dpdEh1YlJvbGVzU3RhY2sudHNgIHwgSUFNIHJvbGUgc3RhY2sgZm9yIEdpdEh1YiBBY3Rpb25zIE9JREMgYXV0aGVudGljYXRpb24gfCcsXG4gICAgJ3wgYHNyYy9jb25zdHJ1Y3RzL0FwaS50c2AgfCBBUEkgR2F0ZXdheSArIExhbWJkYSBjb25zdHJ1Y3Qgd2l0aCBDbGVyayBKV1QgYXV0aG9yaXplciB8JyxcbiAgICAnfCBgc3JjL2NvbnN0cnVjdHMvU3RhdGljV2Vic2l0ZS50c2AgfCBDbG91ZEZyb250ICsgUzMgKyBBQ00gKyBSb3V0ZSA1MyBjb25zdHJ1Y3QgfCcsXG4gICAgJ3wgYHNyYy9jb25zdHJ1Y3RzL2hhbmRsZXIvQXBpLkZ1bmN0aW9uLnRzYCB8IExhbWJkYSBoYW5kbGVyIGVudHJ5IHBvaW50LCBiYXNpYyB3cmFwcGVyIGFyb3VuZCBFeHByZXNzLWNvbXBhdGlibGUgYXBwIGNvZGUgfCcsXG4gICAgJ3wgYHNyYy9hc3BlY3RzL0RhdGFEb2dBc3BlY3QudHNgIHwgQ0RLIGFzcGVjdCB0aGF0IHdpcmVzIGFsbCBMYW1iZGEgZnVuY3Rpb25zIHRvIERhdGFkb2cgfCcsXG4gICAgJycsXG4gICAgJyMjIyBGcm9udGVuZCAoYHdlYi9gKScsXG4gICAgJycsXG4gICAgJ3wgRmlsZSB8IERlc2NyaXB0aW9uIHwnLFxuICAgICd8LS0tLS0tfC0tLS0tLS0tLS0tLS18JyxcbiAgICAnfCBgd2ViL3NyYy9tYWluLnRzeGAgfCBSZWFjdCBhcHAgZW50cnkgcG9pbnQgd2l0aCBDbGVyayBhbmQgUmVhY3QgUXVlcnkgcHJvdmlkZXJzIHwnLFxuICAgICd8IGB3ZWIvc3JjL0FwcC50c3hgIHwgUm9vdCBhcHBsaWNhdGlvbiBjb21wb25lbnQgfCcsXG4gICAgJ3wgYHdlYi9zcmMvQXBwLmNzc2AgLyBgd2ViL3NyYy9pbmRleC5jc3NgIHwgQmFzZSBzdHlsZXNoZWV0cyAoVGFpbHdpbmQgQ1NTIHY0KSB8JyxcbiAgICAnfCBgd2ViL3NyYy9jb25maWcudHNgIHwgYHVzZUNvbmZpZygpYCBob29rIOKAlCBsb2FkcyBydW50aW1lIGNvbmZpZyBmcm9tIGBjb25maWcuanNvbmAgfCcsXG4gICAgJ3wgYHdlYi9zcmMvc2VydmljZXMvQmFzZVNlcnZpY2UudHNgIHwgYHVzZUJhc2VRdWVyeSgpYCDigJQgYXV0aGVudGljYXRlZCBBUEkgZmV0Y2ggaG9vayB8JyxcbiAgICAnfCBgd2ViL3NyYy9zZXJ2aWNlcy9Sb290U2VydmljZS50c2AgfCBFeGFtcGxlIHNlcnZpY2UgdXNpbmcgYHVzZUJhc2VRdWVyeWAgfCcsXG4gICAgJ3wgYHdlYi9wdWJsaWMvY29uZmlnLmpzb25gIHwgUnVudGltZSBjb25maWcgKEFQSSBiYXNlIFVSTCwgQ2xlcmsgcHVibGlzaGFibGUga2V5KSB8JyxcbiAgICAnJyxcbiAgICAnIyMjIEdpdEh1YiBBY3Rpb25zIFdvcmtmbG93cyAoYC5naXRodWIvd29ya2Zsb3dzL2ApJyxcbiAgICAnJyxcbiAgICAnfCBGaWxlIHwgVHJpZ2dlciB8JyxcbiAgICAnfC0tLS0tLXwtLS0tLS0tLS18JyxcbiAgICAnfCBgcHItZGVwbG95LnltbGAgfCBPbiBwdWxsIHJlcXVlc3Qgb3Blbi91cGRhdGUg4oCUIGRlcGxveXMgYSBwZXItUFIgZGV2IHN0YWNrIHwnLFxuICAgICd8IGBwci1jbGVhbnVwLnltbGAgfCBPbiBwdWxsIHJlcXVlc3QgY2xvc2Ug4oCUIHRlYXJzIGRvd24gdGhlIHBlci1QUiBkZXYgc3RhY2sgfCcsXG4gICAgJ3wgYHN0YWdpbmctZGVwbG95LnltbGAgfCBPbiBwdXNoIHRvIGBtYWluYCDigJQgZGVwbG95cyB0byBzdGFnaW5nIHwnLFxuICAgICd8IGBwcm9kdWN0aW9uLWRlcGxveS55bWxgIHwgTWFudWFsbHkgdHJpZ2dlcmVkIOKAlCBkZXBsb3lzIHRvIHByb2R1Y3Rpb24gfCcsXG4gICAgJycsXG4gICAgJy0tLScsXG4gICAgJycsXG4gICAgJyMjIEZpbGVzIFlvdSBDYW4gRWRpdCcsXG4gICAgJycsXG4gICAgJ1RoZXNlIGZpbGVzIGFyZSBnZW5lcmF0ZWQgb25jZSBhbmQgbmV2ZXIgb3ZlcndyaXR0ZW4gYnkgQmF0bWFuLiBNb2RpZnkgdGhlbSBmcmVlbHkuJyxcbiAgICAnJyxcbiAgICAnfCBGaWxlIHwgV2hhdCB0byBkbyB3aXRoIGl0IHwnLFxuICAgICd8LS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tfCcsXG4gICAgJ3wgYC5wcm9qZW5yYy50cyB8IFRoZSBtYWluIFByb2plbiBjb25maWd1cmF0aW9uIGZpbGUuIEFkZGl0aW9uYWwgZGVwZW5kZW5jaWVzIGZvciBlaXRoZXIgdGhlIEFQSSBvciB0aGUgV2ViIGZyb250ZW5kIG5lZWQgdG8gYmUgYWRkZWQgaGVyZSB8JyxcbiAgICAnfCBgc3JjL3N0YWNrcy9BcHBsaWNhdGlvblN0YWNrLnRzYCB8ICoqU3RhcnQgaGVyZS4qKiBBZGQgQ0RLIGNvbnN0cnVjdHMgdG8gYnVpbGQgeW91ciBpbmZyYXN0cnVjdHVyZSB8JyxcbiAgICAnfCBgc3JjL2NvbnN0cnVjdHMvaGFuZGxlci9hcHAudHMgfCBUaGUgbWFpbiBtb25vbGl0aGljIEFQSSBSRVNUIHNlcnZlciBmaWxlLiBNYWluIGZpbGUgeW91IHNob3VsZCBiZSBtb2RpZnlpbmcgfCcsXG4gICAgJ3wgYHdlYi9zcmMvQXBwLnRzeGAgfCBCdWlsZCB5b3VyIFVJIGhlcmUgfCcsXG4gICAgJ3wgYHdlYi9zcmMvQXBwLmNzc2AgLyBgd2ViL3NyYy9pbmRleC5jc3NgIHwgU3R5bGUgeW91ciBhcHBsaWNhdGlvbiB8JyxcbiAgICAnfCBgd2ViL3NyYy9tYWluLnRzeGAgfCBBZGp1c3QgdG9wLWxldmVsIHByb3ZpZGVycyBvciByb3V0aW5nIHwnLFxuICAgICd8IGB3ZWIvc3JjL3NlcnZpY2VzL1Jvb3RTZXJ2aWNlLnRzYCB8IEFkZCBvciByZXBsYWNlIEFQSSBzZXJ2aWNlIGhvb2tzIHwnLFxuICAgICd8IGB3ZWIvcHVibGljL2NvbmZpZy5qc29uYCB8IFVwZGF0ZSBmb3IgbG9jYWwgZGV2ZWxvcG1lbnQgKEFQSSBVUkwsIENsZXJrIGtleSkgfCcsXG4gICAgJycsXG4gICAgJyMjIEZpbGVzIFlvdSBDYW5ub3QgRWRpdCcsXG4gICAgJycsXG4gICAgJ1RoZXNlIGZpbGVzIGFyZSAqKm1hbmFnZWQgYnkgQmF0bWFuKiogYW5kIHdpbGwgYmUgb3ZlcndyaXR0ZW4gZXZlcnkgdGltZSBgbnB4IHByb2plbmAgcnVucy4gRG8gbm90IGVkaXQgdGhlbSBkaXJlY3RseSDigJQgbWFrZSBjaGFuZ2VzIGluIGAucHJvamVucmMudHNgIGluc3RlYWQuJyxcbiAgICAnJyxcbiAgICAnPiBbIUlNUE9SVEFOVF0nLFxuICAgICc+IElmIHlvdSBoYXZlIEFOWSBjaGFuZ2VzIHlvdSB3YW50IHRvIG1ha2UgdG8gdGhlc2UgZmlsZXMsIG5vdGlmeSAjdGVhbS1iYXRtYW4gb24gU2xhY2suICcsXG4gICAgJz4gV2UgbWFpbnRhaW4gdGhlc2UgZmlsZXMgYXMgcGFydCBvZiB0aGUgY29yZSBCYXRtYW4gZXhwZXJpZW5jZSwgYW5kIHlvdXIgZmVlZGJhY2sgaXMgY3J1Y2lhbCB0byBlbnN1cmUgdGhleSBtZWV0IHlvdXIgbmVlZHMuJyxcbiAgICAnJyxcbiAgICAnfCBGaWxlIHwgV2h5IGl0XFwncyBtYW5hZ2VkIHwnLFxuICAgICd8LS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tfCcsXG4gICAgJ3wgYHNyYy9zdGFja3MvQmFzZUFwcGxpY2F0aW9uU3RhY2sudHNgIHwgQ29yZSBzdGFjayB3aXJpbmcg4oCUIHVwZGF0ZWQgd2l0aCBCYXRtYW4gcmVsZWFzZXMgfCcsXG4gICAgJ3wgYHNyYy9hc3BlY3RzL0RhdGFEb2dBc3BlY3QudHNgIHwgRGF0YWRvZyBDREsgYXNwZWN0IHwnLFxuICAgICd8IGB3ZWIvdml0ZS5jb25maWcudHNgIHwgVml0ZSBjb25maWd1cmF0aW9uIHwnLFxuICAgICd8IGB3ZWIvZXNsaW50LmNvbmZpZy5qc2AgfCBFU0xpbnQgY29uZmlndXJhdGlvbiB8JyxcbiAgICAnfCBgd2ViL3Bvc3Rjc3MuY29uZmlnLmpzYCB8IFBvc3RDU1MgLyBUYWlsd2luZCBjb25maWd1cmF0aW9uIHwnLFxuICAgICd8IGB3ZWIvaW5kZXguaHRtbGAgfCBIVE1MIGVudHJ5IHBvaW50IHwnLFxuICAgICd8IGB3ZWIvdHNjb25maWcuanNvbmAgLyBgd2ViL3RzY29uZmlnLmFwcC5qc29uYCAvIGB3ZWIvdHNjb25maWcubm9kZS5qc29uYCB8IFR5cGVTY3JpcHQgY29uZmlndXJhdGlvbiB8JyxcbiAgICAnfCBgd2ViL3NyYy92aXRlLWVudi5kLnRzYCB8IFZpdGUgdHlwZSBkZWNsYXJhdGlvbnMgfCcsXG4gICAgJ3wgYHdlYi9zcmMvY29uZmlnLnRzYCB8IFJ1bnRpbWUgY29uZmlnIGhvb2sg4oCUIHNoYXBlIGRyaXZlbiBieSBgLnByb2plbnJjLnRzYCB8JyxcbiAgICAnfCBgd2ViL3NyYy9zZXJ2aWNlcy9CYXNlU2VydmljZS50c2AgfCBCYXNlIGF1dGhlbnRpY2F0ZWQgZmV0Y2ggaG9vayB8JyxcbiAgICAnfCBgLmdpdGh1Yi9DT0RFT1dORVJTYCB8IENvZGUgb3duZXJzaGlwIHBvbGljeSB8JyxcbiAgICAnfCBgLmdpdGh1Yi93b3JrZmxvd3MvKi55bWxgIHwgQWxsIENJL0NEIHdvcmtmbG93cyB8JyxcbiAgICAnJyxcbiAgICAnPiAqKlRpcDoqKiBGaWxlcyB3aXRoIGEgYH5+IEdlbmVyYXRlZCBieSBwcm9qZW4uIFRvIG1vZGlmeSwgZWRpdCAucHJvamVucmMudHMgYW5kIHJ1biBcIm5weCBwcm9qZW5cIi4gfn5gIGhlYWRlciBhcmUgbWFuYWdlZCBmaWxlcy4nLFxuICAgICcnLFxuICAgICctLS0nLFxuICAgICcnLFxuICAgICcjIyBXaGVyZSB0byBTdGFydCcsXG4gICAgJycsXG4gICAgJzEuICoqYHNyYy9zdGFja3MvQXBwbGljYXRpb25TdGFjay50c2AqKiDigJQgQWRkIHlvdXIgQ0RLIGNvbnN0cnVjdHMgaGVyZS4gVGhlIGJhc2Ugc3RhY2sgYWxyZWFkeSBwcm92aWRlcyBgdGhpcy5hcGlgLCBgdGhpcy52cGNgLCBgdGhpcy5ob3N0ZWRab25lYCwgYW5kIGB0aGlzLmRhdGFkb2dgIGFzIHByb3RlY3RlZCBwcm9wZXJ0aWVzLicsXG4gICAgJycsXG4gICAgJzIuICoqYHdlYi9gKiog4oCUIEJ1aWxkIHlvdXIgZnJvbnRlbmQuIFN0YXJ0IHdpdGggYHdlYi9zcmMvQXBwLnRzeGAgYW5kIGFkZCBzZXJ2aWNlcyBhbG9uZ3NpZGUgYHdlYi9zcmMvc2VydmljZXMvUm9vdFNlcnZpY2UudHNgLicsXG4gICAgJycsXG4gICAgJzMuICoqYHNyYy9jb25zdHJ1Y3RzL2hhbmRsZXIvYXBwLnRzYCoqIOKAlCBJbXBsZW1lbnQgeW91ciBiYWNrZW5kIExhbWJkYSBoYW5kbGVyIGxvZ2ljIGhlcmUuJyxcbiAgICAnJyxcbiAgICAnNC4gKipgLnByb2plbnJjLnRzYCoqIC0gTWFuYWdlcyBwcm9qZWN0IGRlcGVuZGVuY2llcyBhbmQgY29uZmlndXJhdGlvbi4gUnVuIGBucHggcHJvamVuYCBhZnRlciBtYWtpbmcgYW55IGNoYW5nZXMgdG8gdGhpcyBmaWxlLicsXG4gICAgJy0tLScsXG4gICAgJycsXG4gICAgJyMjIERldmVsb3BtZW50IFdvcmtmbG93JyxcbiAgICAnJyxcbiAgICAnYGBgYmFzaCcsXG4gICAgJyMgSW5zdGFsbCBkZXBlbmRlbmNpZXMnLFxuICAgICd5YXJuIGluc3RhbGwnLFxuICAgICcnLFxuICAgICcjIFN0YXJ0IGxvY2FsIGRldiBzZXJ2ZXIgKGJhY2tlbmQgTGFtYmRhICsgVml0ZSBmcm9udGVuZCBpbiBwYXJhbGxlbCknLFxuICAgICd5YXJuIGRldicsXG4gICAgJycsXG4gICAgJyMgRGVwbG95IGEgcGVyc29uYWwgZGV2IHN0YWNrIHRvIEFXUyBhcyBhbiBhbHRlcm5hdGl2ZSB0byBsb2NhbCBkZXZlbG9wbWVudCwgcHJvdmlkZXMgbW9yZSB0aG9yb3VnaCBlbmQtdG8tZW5kIHRlc3RpbmcnLFxuICAgICd5YXJuIGNkazpkZXYgLS1jb250ZXh0IGxvY2FsLWRldi1wcmVmaXg9eW91ci1oYW5kbGUgZGVwbG95JyxcbiAgICAnJyxcbiAgICAnIyBSdW4gdGVzdHMnLFxuICAgICd5YXJuIHRlc3QnLFxuICAgICcnLFxuICAgICcjIFJlLXN5bnRoZXNpemUgcHJvamVjdCBmaWxlcyBhZnRlciBlZGl0aW5nIC5wcm9qZW5yYy50cycsXG4gICAgJ25weCBwcm9qZW4nLFxuICAgICdgYGAnLFxuICAgICcnLFxuICAgICctLS0nLFxuICAgICcnLFxuICAgICcjIyBVcGdyYWRpbmcgQmF0bWFuJyxcbiAgICAnJyxcbiAgICAnYGBgYmFzaCcsXG4gICAgJ3lhcm4gYWRkIEBtYWNlZG9uLXRlY2hub2xvZ2llcy9iYXRtYW5AbGF0ZXN0JyxcbiAgICAnbnB4IHByb2plbicsXG4gICAgJ2BgYCcsXG4gICAgJycsXG4gICAgJ1RoaXMgdXBkYXRlcyBhbGwgbWFuYWdlZCBmaWxlcyB0byB0aGUgbGF0ZXN0IEJhdG1hbiBzdGFuZGFyZHMuIFlvdXIgZWRpdGFibGUgc2FtcGxlIGZpbGVzIGFyZSBuZXZlciB0b3VjaGVkLicsXG4gIF0uam9pbignXFxuJyk7XG59XG4iXX0=
|
|
189
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFLQSw0Q0FZQztBQU1ELHdDQVdDO0FBRUQsa0NBZ0JDO0FBRUQsd0NBaUlDO0FBdkxELHNEQUEyRDtBQUUzRDs7R0FFRztBQUNILFNBQWdCLGdCQUFnQixDQUFDLGNBQWtDLEVBQUUsTUFBYztJQUNqRixRQUFRLGNBQWMsRUFBRSxDQUFDO1FBQ3ZCLEtBQUssK0JBQWtCLENBQUMsR0FBRztZQUN6QixPQUFPLFdBQVcsTUFBTSxFQUFFLENBQUM7UUFDN0IsS0FBSywrQkFBa0IsQ0FBQyxHQUFHO1lBQ3pCLE9BQU8sV0FBVyxNQUFNLEVBQUUsQ0FBQztRQUM3QixLQUFLLCtCQUFrQixDQUFDLElBQUk7WUFDMUIsT0FBTyxRQUFRLE1BQU0sRUFBRSxDQUFDO1FBQzFCO1lBQ0Usb0ZBQW9GO1lBQ3BGLE9BQU8sUUFBUSxNQUFNLEVBQUUsQ0FBQztJQUM1QixDQUFDO0FBQ0gsQ0FBQztBQUVEOzs7R0FHRztBQUNILFNBQWdCLGNBQWMsQ0FBQyxjQUFrQztJQUMvRCxRQUFRLGNBQWMsRUFBRSxDQUFDO1FBQ3ZCLEtBQUssK0JBQWtCLENBQUMsR0FBRztZQUN6QixPQUFPLFFBQVEsQ0FBQztRQUNsQixLQUFLLCtCQUFrQixDQUFDLEdBQUc7WUFDekIsT0FBTywrQkFBK0IsQ0FBQztRQUN6QyxLQUFLLCtCQUFrQixDQUFDLElBQUk7WUFDMUIsT0FBTyxnQ0FBZ0MsQ0FBQztRQUMxQztZQUNFLE9BQU8sZ0NBQWdDLENBQUM7SUFDNUMsQ0FBQztBQUNILENBQUM7QUFFRCxTQUFnQixXQUFXLENBQUMsS0FBVSxFQUFFLEtBQUssR0FBRyxDQUFDO0lBQy9DLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDL0IsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDeEMsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRO1FBQUUsT0FBTyxJQUFJLEtBQUssR0FBRyxDQUFDO0lBQ25ELElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLE9BQU8sS0FBSyxLQUFLLFNBQVM7UUFBRSxPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNsRixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUN6QixNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRLEdBQUcsV0FBVyxDQUFDLENBQUMsRUFBRSxLQUFLLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNwRixPQUFPLE1BQU0sS0FBSyxNQUFNLEdBQUcsR0FBRyxDQUFDO0lBQ2pDLENBQUM7SUFDRCxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxLQUFLLEtBQUssSUFBSSxFQUFFLENBQUM7UUFDaEQsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7YUFDbEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsUUFBUSxHQUFHLENBQUMsS0FBSyxXQUFXLENBQUMsQ0FBQyxFQUFFLEtBQUssR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO2FBQ2hFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNmLE9BQU8sTUFBTSxPQUFPLE1BQU0sR0FBRyxHQUFHLENBQUM7SUFDbkMsQ0FBQztJQUNELE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMvQixDQUFDO0FBRUQsU0FBZ0IsY0FBYyxDQUFDLFdBQW1CO0lBQ2hELE9BQU87UUFDTCxLQUFLLFdBQVcsRUFBRTtRQUNsQixFQUFFO1FBQ0YsdUdBQXVHO1FBQ3ZHLEVBQUU7UUFDRix3QkFBd0I7UUFDeEIsRUFBRTtRQUNGLGlDQUFpQztRQUNqQyxFQUFFO1FBQ0Ysd0JBQXdCO1FBQ3hCLHdCQUF3QjtRQUN4QixtR0FBbUc7UUFDbkcscUlBQXFJO1FBQ3JJLGdHQUFnRztRQUNoRyx3RkFBd0Y7UUFDeEYscUhBQXFIO1FBQ3JILDhGQUE4RjtRQUM5Rix3RkFBd0Y7UUFDeEYsb0ZBQW9GO1FBQ3BGLDZIQUE2SDtRQUM3SCw0RkFBNEY7UUFDNUYsRUFBRTtRQUNGLHVCQUF1QjtRQUN2QixFQUFFO1FBQ0Ysd0JBQXdCO1FBQ3hCLHdCQUF3QjtRQUN4QixxRkFBcUY7UUFDckYsb0RBQW9EO1FBQ3BELGtGQUFrRjtRQUNsRix3RkFBd0Y7UUFDeEYseUZBQXlGO1FBQ3pGLDhFQUE4RTtRQUM5RSxxRkFBcUY7UUFDckYsRUFBRTtRQUNGLHFEQUFxRDtRQUNyRCxFQUFFO1FBQ0Ysb0JBQW9CO1FBQ3BCLG9CQUFvQjtRQUNwQixnRkFBZ0Y7UUFDaEYsZ0ZBQWdGO1FBQ2hGLG1FQUFtRTtRQUNuRSwwRUFBMEU7UUFDMUUsRUFBRTtRQUNGLEtBQUs7UUFDTCxFQUFFO1FBQ0YsdUJBQXVCO1FBQ3ZCLEVBQUU7UUFDRixxRkFBcUY7UUFDckYsRUFBRTtRQUNGLCtCQUErQjtRQUMvQiwrQkFBK0I7UUFDL0IsOElBQThJO1FBQzlJLHdHQUF3RztRQUN4RyxrSEFBa0g7UUFDbEgsNENBQTRDO1FBQzVDLHNFQUFzRTtRQUN0RSxnRUFBZ0U7UUFDaEUsMEVBQTBFO1FBQzFFLGtGQUFrRjtRQUNsRixFQUFFO1FBQ0YsMEJBQTBCO1FBQzFCLEVBQUU7UUFDRixpS0FBaUs7UUFDakssRUFBRTtRQUNGLGdCQUFnQjtRQUNoQiwyRkFBMkY7UUFDM0YsK0hBQStIO1FBQy9ILEVBQUU7UUFDRiw4QkFBOEI7UUFDOUIsNEJBQTRCO1FBQzVCLDZGQUE2RjtRQUM3Rix5REFBeUQ7UUFDekQsK0NBQStDO1FBQy9DLG1EQUFtRDtRQUNuRCxnRUFBZ0U7UUFDaEUseUNBQXlDO1FBQ3pDLHlHQUF5RztRQUN6RyxzREFBc0Q7UUFDdEQsZ0ZBQWdGO1FBQ2hGLHVFQUF1RTtRQUN2RSxrREFBa0Q7UUFDbEQscURBQXFEO1FBQ3JELEVBQUU7UUFDRixtSUFBbUk7UUFDbkksRUFBRTtRQUNGLEtBQUs7UUFDTCxFQUFFO1FBQ0YsbUJBQW1CO1FBQ25CLEVBQUU7UUFDRixnTUFBZ007UUFDaE0sRUFBRTtRQUNGLGlJQUFpSTtRQUNqSSxFQUFFO1FBQ0YsNEZBQTRGO1FBQzVGLEVBQUU7UUFDRixpSUFBaUk7UUFDakksS0FBSztRQUNMLEVBQUU7UUFDRix5QkFBeUI7UUFDekIsRUFBRTtRQUNGLFNBQVM7UUFDVCx3QkFBd0I7UUFDeEIsY0FBYztRQUNkLEVBQUU7UUFDRix1RUFBdUU7UUFDdkUsVUFBVTtRQUNWLEVBQUU7UUFDRix3SEFBd0g7UUFDeEgsNERBQTREO1FBQzVELEVBQUU7UUFDRixhQUFhO1FBQ2IsV0FBVztRQUNYLEVBQUU7UUFDRiwwREFBMEQ7UUFDMUQsWUFBWTtRQUNaLEtBQUs7UUFDTCxFQUFFO1FBQ0YsS0FBSztRQUNMLEVBQUU7UUFDRixxQkFBcUI7UUFDckIsRUFBRTtRQUNGLFNBQVM7UUFDVCw4Q0FBOEM7UUFDOUMsWUFBWTtRQUNaLEtBQUs7UUFDTCxFQUFFO1FBQ0YsOEdBQThHO0tBQy9HLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5vZGVQYWNrYWdlTWFuYWdlciB9IGZyb20gJ3Byb2plbi9saWIvamF2YXNjcmlwdCc7XG5cbi8qKlxuICogUmVuZGVycyB0aGUgY29tbWFuZCB1c2VkIHRvIHJ1biBhIHBhY2thZ2UuanNvbiBzY3JpcHQgZm9yIHRoZSBnaXZlbiBwYWNrYWdlIG1hbmFnZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBydW5TY3JpcHRDb21tYW5kKHBhY2thZ2VNYW5hZ2VyOiBOb2RlUGFja2FnZU1hbmFnZXIsIHNjcmlwdDogc3RyaW5nKTogc3RyaW5nIHtcbiAgc3dpdGNoIChwYWNrYWdlTWFuYWdlcikge1xuICAgIGNhc2UgTm9kZVBhY2thZ2VNYW5hZ2VyLk5QTTpcbiAgICAgIHJldHVybiBgbnBtIHJ1biAke3NjcmlwdH1gO1xuICAgIGNhc2UgTm9kZVBhY2thZ2VNYW5hZ2VyLkJVTjpcbiAgICAgIHJldHVybiBgYnVuIHJ1biAke3NjcmlwdH1gO1xuICAgIGNhc2UgTm9kZVBhY2thZ2VNYW5hZ2VyLlBOUE06XG4gICAgICByZXR1cm4gYHBucG0gJHtzY3JpcHR9YDtcbiAgICBkZWZhdWx0OlxuICAgICAgLy8gYWxsIHlhcm4gdmFyaWFudHMgKHlhcm4sIHlhcm4yLCB5YXJuX2NsYXNzaWMsIHlhcm5fYmVycnkpIHNoYXJlIHRoZSBgeWFybmAgYmluYXJ5XG4gICAgICByZXR1cm4gYHlhcm4gJHtzY3JpcHR9YDtcbiAgfVxufVxuXG4vKipcbiAqIFJlbmRlcnMgdGhlIGNvbW1hbmQgdXNlZCB0byBkbyBhIGNsZWFuLCByZXByb2R1Y2libGUgZGVwZW5kZW5jeSBpbnN0YWxsIChlLmcuIGZvciBDSSlcbiAqIGZvciB0aGUgZ2l2ZW4gcGFja2FnZSBtYW5hZ2VyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5zdGFsbENvbW1hbmQocGFja2FnZU1hbmFnZXI6IE5vZGVQYWNrYWdlTWFuYWdlcik6IHN0cmluZyB7XG4gIHN3aXRjaCAocGFja2FnZU1hbmFnZXIpIHtcbiAgICBjYXNlIE5vZGVQYWNrYWdlTWFuYWdlci5OUE06XG4gICAgICByZXR1cm4gJ25wbSBjaSc7XG4gICAgY2FzZSBOb2RlUGFja2FnZU1hbmFnZXIuQlVOOlxuICAgICAgcmV0dXJuICdidW4gaW5zdGFsbCAtLWZyb3plbi1sb2NrZmlsZSc7XG4gICAgY2FzZSBOb2RlUGFja2FnZU1hbmFnZXIuUE5QTTpcbiAgICAgIHJldHVybiAncG5wbSBpbnN0YWxsIC0tZnJvemVuLWxvY2tmaWxlJztcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuICd5YXJuIGluc3RhbGwgLS1mcm96ZW4tbG9ja2ZpbGUnO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemVUcyh2YWx1ZTogYW55LCBkZXB0aCA9IDEpOiBzdHJpbmcge1xuICBjb25zdCBwYWQgPSAnICAnLnJlcGVhdChkZXB0aCk7XG4gIGNvbnN0IGlubmVyUGFkID0gJyAgJy5yZXBlYXQoZGVwdGggKyAxKTtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHJldHVybiBgJyR7dmFsdWV9J2A7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nKSByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgY29uc3QgaXRlbXMgPSB2YWx1ZS5tYXAodiA9PiBgJHtpbm5lclBhZH0ke3NlcmlhbGl6ZVRzKHYsIGRlcHRoICsgMSl9YCkuam9pbignLFxcbicpO1xuICAgIHJldHVybiBgW1xcbiR7aXRlbXN9LFxcbiR7cGFkfV1gO1xuICB9XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICE9PSBudWxsKSB7XG4gICAgY29uc3QgZW50cmllcyA9IE9iamVjdC5lbnRyaWVzKHZhbHVlKVxuICAgICAgLm1hcCgoW2ssIHZdKSA9PiBgJHtpbm5lclBhZH0ke2t9OiAke3NlcmlhbGl6ZVRzKHYsIGRlcHRoICsgMSl9YClcbiAgICAgIC5qb2luKCcsXFxuJyk7XG4gICAgcmV0dXJuIGB7XFxuJHtlbnRyaWVzfSxcXG4ke3BhZH19YDtcbiAgfVxuICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVhZG1lQ29udGVudHMocHJvamVjdE5hbWU6IHN0cmluZykge1xuICByZXR1cm4gW1xuICAgIGAjICR7cHJvamVjdE5hbWV9YCxcbiAgICAnJyxcbiAgICAnVGhpcyBwcm9qZWN0IHdhcyBib290c3RyYXBwZWQgd2l0aCBbQmF0bWFuXShodHRwczovL2dpdGh1Yi5jb20vbWFjZWRvbi10ZWNobm9sb2dpZXMvcGxhdGZvcm0tY29tbW9uKS4nLFxuICAgICcnLFxuICAgICcjIyBXaGF0IEJhdG1hbiBDcmVhdGVkJyxcbiAgICAnJyxcbiAgICAnIyMjIENESyBJbmZyYXN0cnVjdHVyZSAoYHNyYy9gKScsXG4gICAgJycsXG4gICAgJ3wgRmlsZSB8IERlc2NyaXB0aW9uIHwnLFxuICAgICd8LS0tLS0tfC0tLS0tLS0tLS0tLS18JyxcbiAgICAnfCBgc3JjL21haW4udHNgIHwgQ0RLIGFwcCBlbnRyeSBwb2ludCDigJQgaW5zdGFudGlhdGVzIGRldiwgc3RhZ2luZywgYW5kIHByb2QgYEFwcGxpY2F0aW9uU3RhY2tgcyB8JyxcbiAgICAnfCBgc3JjL0xvY2FsRGV2QXBwLnRzYCB8IExvY2FsIGRldmVsb3BtZW50IENESyBhcHAg4oCUIHVzZWQgYnkgYHlhcm4gY2RrOmRldmAgLSBkZXBsb3lzIHRvIEFXUyBmb3Igc2xvd2VyIGJ1dCBtb3JlIHRob3JvdWdoIHRlc3RpbmcgfCcsXG4gICAgJ3wgYHNyYy9HaXRIdWJSb2xlcy50c2AgfCBDREsgYXBwIGZvciBkZXBsb3lpbmcgdGhlIEdpdEh1YiBPSURDIElBTSByb2xlIChvbmUtdGltZSBib290c3RyYXApIHwnLFxuICAgICd8IGBzcmMvc3RhY2tzL0FwcGxpY2F0aW9uU3RhY2sudHNgIHwgWW91ciBwcmltYXJ5IHN0YWNrIOKAlCBleHRlbmQgaXQgdG8gYWRkIHJlc291cmNlcyB8JyxcbiAgICAnfCBgc3JjL3N0YWNrcy9CYXNlQXBwbGljYXRpb25TdGFjay50c2AgfCBCYXNlIHN0YWNrIHdpdGggVlBDLCBBUEksIHN0YXRpYyB3ZWJzaXRlLCBEYXRhZG9nLCBhbmQgUm91dGUgNTMgd2lyZWQgdXAgfCcsXG4gICAgJ3wgYHNyYy9zdGFja3MvR2l0SHViUm9sZXNTdGFjay50c2AgfCBJQU0gcm9sZSBzdGFjayBmb3IgR2l0SHViIEFjdGlvbnMgT0lEQyBhdXRoZW50aWNhdGlvbiB8JyxcbiAgICAnfCBgc3JjL2NvbnN0cnVjdHMvQXBpLnRzYCB8IEFQSSBHYXRld2F5ICsgTGFtYmRhIGNvbnN0cnVjdCB3aXRoIENsZXJrIEpXVCBhdXRob3JpemVyIHwnLFxuICAgICd8IGBzcmMvY29uc3RydWN0cy9TdGF0aWNXZWJzaXRlLnRzYCB8IENsb3VkRnJvbnQgKyBTMyArIEFDTSArIFJvdXRlIDUzIGNvbnN0cnVjdCB8JyxcbiAgICAnfCBgc3JjL2NvbnN0cnVjdHMvaGFuZGxlci9BcGkuRnVuY3Rpb24udHNgIHwgTGFtYmRhIGhhbmRsZXIgZW50cnkgcG9pbnQsIGJhc2ljIHdyYXBwZXIgYXJvdW5kIEV4cHJlc3MtY29tcGF0aWJsZSBhcHAgY29kZSB8JyxcbiAgICAnfCBgc3JjL2FzcGVjdHMvRGF0YURvZ0FzcGVjdC50c2AgfCBDREsgYXNwZWN0IHRoYXQgd2lyZXMgYWxsIExhbWJkYSBmdW5jdGlvbnMgdG8gRGF0YWRvZyB8JyxcbiAgICAnJyxcbiAgICAnIyMjIEZyb250ZW5kIChgd2ViL2ApJyxcbiAgICAnJyxcbiAgICAnfCBGaWxlIHwgRGVzY3JpcHRpb24gfCcsXG4gICAgJ3wtLS0tLS18LS0tLS0tLS0tLS0tLXwnLFxuICAgICd8IGB3ZWIvc3JjL21haW4udHN4YCB8IFJlYWN0IGFwcCBlbnRyeSBwb2ludCB3aXRoIENsZXJrIGFuZCBSZWFjdCBRdWVyeSBwcm92aWRlcnMgfCcsXG4gICAgJ3wgYHdlYi9zcmMvQXBwLnRzeGAgfCBSb290IGFwcGxpY2F0aW9uIGNvbXBvbmVudCB8JyxcbiAgICAnfCBgd2ViL3NyYy9BcHAuY3NzYCAvIGB3ZWIvc3JjL2luZGV4LmNzc2AgfCBCYXNlIHN0eWxlc2hlZXRzIChUYWlsd2luZCBDU1MgdjQpIHwnLFxuICAgICd8IGB3ZWIvc3JjL2NvbmZpZy50c2AgfCBgdXNlQ29uZmlnKClgIGhvb2sg4oCUIGxvYWRzIHJ1bnRpbWUgY29uZmlnIGZyb20gYGNvbmZpZy5qc29uYCB8JyxcbiAgICAnfCBgd2ViL3NyYy9zZXJ2aWNlcy9CYXNlU2VydmljZS50c2AgfCBgdXNlQmFzZVF1ZXJ5KClgIOKAlCBhdXRoZW50aWNhdGVkIEFQSSBmZXRjaCBob29rIHwnLFxuICAgICd8IGB3ZWIvc3JjL3NlcnZpY2VzL1Jvb3RTZXJ2aWNlLnRzYCB8IEV4YW1wbGUgc2VydmljZSB1c2luZyBgdXNlQmFzZVF1ZXJ5YCB8JyxcbiAgICAnfCBgd2ViL3B1YmxpYy9jb25maWcuanNvbmAgfCBSdW50aW1lIGNvbmZpZyAoQVBJIGJhc2UgVVJMLCBDbGVyayBwdWJsaXNoYWJsZSBrZXkpIHwnLFxuICAgICcnLFxuICAgICcjIyMgR2l0SHViIEFjdGlvbnMgV29ya2Zsb3dzIChgLmdpdGh1Yi93b3JrZmxvd3MvYCknLFxuICAgICcnLFxuICAgICd8IEZpbGUgfCBUcmlnZ2VyIHwnLFxuICAgICd8LS0tLS0tfC0tLS0tLS0tLXwnLFxuICAgICd8IGBwci1kZXBsb3kueW1sYCB8IE9uIHB1bGwgcmVxdWVzdCBvcGVuL3VwZGF0ZSDigJQgZGVwbG95cyBhIHBlci1QUiBkZXYgc3RhY2sgfCcsXG4gICAgJ3wgYHByLWNsZWFudXAueW1sYCB8IE9uIHB1bGwgcmVxdWVzdCBjbG9zZSDigJQgdGVhcnMgZG93biB0aGUgcGVyLVBSIGRldiBzdGFjayB8JyxcbiAgICAnfCBgc3RhZ2luZy1kZXBsb3kueW1sYCB8IE9uIHB1c2ggdG8gYG1haW5gIOKAlCBkZXBsb3lzIHRvIHN0YWdpbmcgfCcsXG4gICAgJ3wgYHByb2R1Y3Rpb24tZGVwbG95LnltbGAgfCBNYW51YWxseSB0cmlnZ2VyZWQg4oCUIGRlcGxveXMgdG8gcHJvZHVjdGlvbiB8JyxcbiAgICAnJyxcbiAgICAnLS0tJyxcbiAgICAnJyxcbiAgICAnIyMgRmlsZXMgWW91IENhbiBFZGl0JyxcbiAgICAnJyxcbiAgICAnVGhlc2UgZmlsZXMgYXJlIGdlbmVyYXRlZCBvbmNlIGFuZCBuZXZlciBvdmVyd3JpdHRlbiBieSBCYXRtYW4uIE1vZGlmeSB0aGVtIGZyZWVseS4nLFxuICAgICcnLFxuICAgICd8IEZpbGUgfCBXaGF0IHRvIGRvIHdpdGggaXQgfCcsXG4gICAgJ3wtLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS18JyxcbiAgICAnfCBgLnByb2plbnJjLnRzIHwgVGhlIG1haW4gUHJvamVuIGNvbmZpZ3VyYXRpb24gZmlsZS4gQWRkaXRpb25hbCBkZXBlbmRlbmNpZXMgZm9yIGVpdGhlciB0aGUgQVBJIG9yIHRoZSBXZWIgZnJvbnRlbmQgbmVlZCB0byBiZSBhZGRlZCBoZXJlIHwnLFxuICAgICd8IGBzcmMvc3RhY2tzL0FwcGxpY2F0aW9uU3RhY2sudHNgIHwgKipTdGFydCBoZXJlLioqIEFkZCBDREsgY29uc3RydWN0cyB0byBidWlsZCB5b3VyIGluZnJhc3RydWN0dXJlIHwnLFxuICAgICd8IGBzcmMvY29uc3RydWN0cy9oYW5kbGVyL2FwcC50cyB8IFRoZSBtYWluIG1vbm9saXRoaWMgQVBJIFJFU1Qgc2VydmVyIGZpbGUuIE1haW4gZmlsZSB5b3Ugc2hvdWxkIGJlIG1vZGlmeWluZyB8JyxcbiAgICAnfCBgd2ViL3NyYy9BcHAudHN4YCB8IEJ1aWxkIHlvdXIgVUkgaGVyZSB8JyxcbiAgICAnfCBgd2ViL3NyYy9BcHAuY3NzYCAvIGB3ZWIvc3JjL2luZGV4LmNzc2AgfCBTdHlsZSB5b3VyIGFwcGxpY2F0aW9uIHwnLFxuICAgICd8IGB3ZWIvc3JjL21haW4udHN4YCB8IEFkanVzdCB0b3AtbGV2ZWwgcHJvdmlkZXJzIG9yIHJvdXRpbmcgfCcsXG4gICAgJ3wgYHdlYi9zcmMvc2VydmljZXMvUm9vdFNlcnZpY2UudHNgIHwgQWRkIG9yIHJlcGxhY2UgQVBJIHNlcnZpY2UgaG9va3MgfCcsXG4gICAgJ3wgYHdlYi9wdWJsaWMvY29uZmlnLmpzb25gIHwgVXBkYXRlIGZvciBsb2NhbCBkZXZlbG9wbWVudCAoQVBJIFVSTCwgQ2xlcmsga2V5KSB8JyxcbiAgICAnJyxcbiAgICAnIyMgRmlsZXMgWW91IENhbm5vdCBFZGl0JyxcbiAgICAnJyxcbiAgICAnVGhlc2UgZmlsZXMgYXJlICoqbWFuYWdlZCBieSBCYXRtYW4qKiBhbmQgd2lsbCBiZSBvdmVyd3JpdHRlbiBldmVyeSB0aW1lIGBucHggcHJvamVuYCBydW5zLiBEbyBub3QgZWRpdCB0aGVtIGRpcmVjdGx5IOKAlCBtYWtlIGNoYW5nZXMgaW4gYC5wcm9qZW5yYy50c2AgaW5zdGVhZC4nLFxuICAgICcnLFxuICAgICc+IFshSU1QT1JUQU5UXScsXG4gICAgJz4gSWYgeW91IGhhdmUgQU5ZIGNoYW5nZXMgeW91IHdhbnQgdG8gbWFrZSB0byB0aGVzZSBmaWxlcywgbm90aWZ5ICN0ZWFtLWJhdG1hbiBvbiBTbGFjay4gJyxcbiAgICAnPiBXZSBtYWludGFpbiB0aGVzZSBmaWxlcyBhcyBwYXJ0IG9mIHRoZSBjb3JlIEJhdG1hbiBleHBlcmllbmNlLCBhbmQgeW91ciBmZWVkYmFjayBpcyBjcnVjaWFsIHRvIGVuc3VyZSB0aGV5IG1lZXQgeW91ciBuZWVkcy4nLFxuICAgICcnLFxuICAgICd8IEZpbGUgfCBXaHkgaXRcXCdzIG1hbmFnZWQgfCcsXG4gICAgJ3wtLS0tLS18LS0tLS0tLS0tLS0tLS0tLS18JyxcbiAgICAnfCBgc3JjL3N0YWNrcy9CYXNlQXBwbGljYXRpb25TdGFjay50c2AgfCBDb3JlIHN0YWNrIHdpcmluZyDigJQgdXBkYXRlZCB3aXRoIEJhdG1hbiByZWxlYXNlcyB8JyxcbiAgICAnfCBgc3JjL2FzcGVjdHMvRGF0YURvZ0FzcGVjdC50c2AgfCBEYXRhZG9nIENESyBhc3BlY3QgfCcsXG4gICAgJ3wgYHdlYi92aXRlLmNvbmZpZy50c2AgfCBWaXRlIGNvbmZpZ3VyYXRpb24gfCcsXG4gICAgJ3wgYHdlYi9lc2xpbnQuY29uZmlnLmpzYCB8IEVTTGludCBjb25maWd1cmF0aW9uIHwnLFxuICAgICd8IGB3ZWIvcG9zdGNzcy5jb25maWcuanNgIHwgUG9zdENTUyAvIFRhaWx3aW5kIGNvbmZpZ3VyYXRpb24gfCcsXG4gICAgJ3wgYHdlYi9pbmRleC5odG1sYCB8IEhUTUwgZW50cnkgcG9pbnQgfCcsXG4gICAgJ3wgYHdlYi90c2NvbmZpZy5qc29uYCAvIGB3ZWIvdHNjb25maWcuYXBwLmpzb25gIC8gYHdlYi90c2NvbmZpZy5ub2RlLmpzb25gIHwgVHlwZVNjcmlwdCBjb25maWd1cmF0aW9uIHwnLFxuICAgICd8IGB3ZWIvc3JjL3ZpdGUtZW52LmQudHNgIHwgVml0ZSB0eXBlIGRlY2xhcmF0aW9ucyB8JyxcbiAgICAnfCBgd2ViL3NyYy9jb25maWcudHNgIHwgUnVudGltZSBjb25maWcgaG9vayDigJQgc2hhcGUgZHJpdmVuIGJ5IGAucHJvamVucmMudHNgIHwnLFxuICAgICd8IGB3ZWIvc3JjL3NlcnZpY2VzL0Jhc2VTZXJ2aWNlLnRzYCB8IEJhc2UgYXV0aGVudGljYXRlZCBmZXRjaCBob29rIHwnLFxuICAgICd8IGAuZ2l0aHViL0NPREVPV05FUlNgIHwgQ29kZSBvd25lcnNoaXAgcG9saWN5IHwnLFxuICAgICd8IGAuZ2l0aHViL3dvcmtmbG93cy8qLnltbGAgfCBBbGwgQ0kvQ0Qgd29ya2Zsb3dzIHwnLFxuICAgICcnLFxuICAgICc+ICoqVGlwOioqIEZpbGVzIHdpdGggYSBgfn4gR2VuZXJhdGVkIGJ5IHByb2plbi4gVG8gbW9kaWZ5LCBlZGl0IC5wcm9qZW5yYy50cyBhbmQgcnVuIFwibnB4IHByb2plblwiLiB+fmAgaGVhZGVyIGFyZSBtYW5hZ2VkIGZpbGVzLicsXG4gICAgJycsXG4gICAgJy0tLScsXG4gICAgJycsXG4gICAgJyMjIFdoZXJlIHRvIFN0YXJ0JyxcbiAgICAnJyxcbiAgICAnMS4gKipgc3JjL3N0YWNrcy9BcHBsaWNhdGlvblN0YWNrLnRzYCoqIOKAlCBBZGQgeW91ciBDREsgY29uc3RydWN0cyBoZXJlLiBUaGUgYmFzZSBzdGFjayBhbHJlYWR5IHByb3ZpZGVzIGB0aGlzLmFwaWAsIGB0aGlzLnZwY2AsIGB0aGlzLmhvc3RlZFpvbmVgLCBhbmQgYHRoaXMuZGF0YWRvZ2AgYXMgcHJvdGVjdGVkIHByb3BlcnRpZXMuJyxcbiAgICAnJyxcbiAgICAnMi4gKipgd2ViL2AqKiDigJQgQnVpbGQgeW91ciBmcm9udGVuZC4gU3RhcnQgd2l0aCBgd2ViL3NyYy9BcHAudHN4YCBhbmQgYWRkIHNlcnZpY2VzIGFsb25nc2lkZSBgd2ViL3NyYy9zZXJ2aWNlcy9Sb290U2VydmljZS50c2AuJyxcbiAgICAnJyxcbiAgICAnMy4gKipgc3JjL2NvbnN0cnVjdHMvaGFuZGxlci9hcHAudHNgKiog4oCUIEltcGxlbWVudCB5b3VyIGJhY2tlbmQgTGFtYmRhIGhhbmRsZXIgbG9naWMgaGVyZS4nLFxuICAgICcnLFxuICAgICc0LiAqKmAucHJvamVucmMudHNgKiogLSBNYW5hZ2VzIHByb2plY3QgZGVwZW5kZW5jaWVzIGFuZCBjb25maWd1cmF0aW9uLiBSdW4gYG5weCBwcm9qZW5gIGFmdGVyIG1ha2luZyBhbnkgY2hhbmdlcyB0byB0aGlzIGZpbGUuJyxcbiAgICAnLS0tJyxcbiAgICAnJyxcbiAgICAnIyMgRGV2ZWxvcG1lbnQgV29ya2Zsb3cnLFxuICAgICcnLFxuICAgICdgYGBiYXNoJyxcbiAgICAnIyBJbnN0YWxsIGRlcGVuZGVuY2llcycsXG4gICAgJ3lhcm4gaW5zdGFsbCcsXG4gICAgJycsXG4gICAgJyMgU3RhcnQgbG9jYWwgZGV2IHNlcnZlciAoYmFja2VuZCBMYW1iZGEgKyBWaXRlIGZyb250ZW5kIGluIHBhcmFsbGVsKScsXG4gICAgJ3lhcm4gZGV2JyxcbiAgICAnJyxcbiAgICAnIyBEZXBsb3kgYSBwZXJzb25hbCBkZXYgc3RhY2sgdG8gQVdTIGFzIGFuIGFsdGVybmF0aXZlIHRvIGxvY2FsIGRldmVsb3BtZW50LCBwcm92aWRlcyBtb3JlIHRob3JvdWdoIGVuZC10by1lbmQgdGVzdGluZycsXG4gICAgJ3lhcm4gY2RrOmRldiAtLWNvbnRleHQgbG9jYWwtZGV2LXByZWZpeD15b3VyLWhhbmRsZSBkZXBsb3knLFxuICAgICcnLFxuICAgICcjIFJ1biB0ZXN0cycsXG4gICAgJ3lhcm4gdGVzdCcsXG4gICAgJycsXG4gICAgJyMgUmUtc3ludGhlc2l6ZSBwcm9qZWN0IGZpbGVzIGFmdGVyIGVkaXRpbmcgLnByb2plbnJjLnRzJyxcbiAgICAnbnB4IHByb2plbicsXG4gICAgJ2BgYCcsXG4gICAgJycsXG4gICAgJy0tLScsXG4gICAgJycsXG4gICAgJyMjIFVwZ3JhZGluZyBCYXRtYW4nLFxuICAgICcnLFxuICAgICdgYGBiYXNoJyxcbiAgICAneWFybiBhZGQgQG1hY2Vkb24tdGVjaG5vbG9naWVzL2JhdG1hbkBsYXRlc3QnLFxuICAgICducHggcHJvamVuJyxcbiAgICAnYGBgJyxcbiAgICAnJyxcbiAgICAnVGhpcyB1cGRhdGVzIGFsbCBtYW5hZ2VkIGZpbGVzIHRvIHRoZSBsYXRlc3QgQmF0bWFuIHN0YW5kYXJkcy4gWW91ciBlZGl0YWJsZSBzYW1wbGUgZmlsZXMgYXJlIG5ldmVyIHRvdWNoZWQuJyxcbiAgXS5qb2luKCdcXG4nKTtcbn1cbiJdfQ==
|