@pipeline-builder/pipeline-manager 4.1.14 → 4.1.16
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/config.yml +16 -37
- package/dist/boilerplate.js +10 -2
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +97 -79
- package/dist/commands/audit-stacks.js +3 -3
- package/dist/commands/create-pat.d.ts +2 -3
- package/dist/commands/create-pat.d.ts.map +1 -1
- package/dist/commands/create-pat.js +3 -4
- package/dist/commands/create-pipeline.d.ts.map +1 -1
- package/dist/commands/create-pipeline.js +198 -190
- package/dist/commands/list-pipelines.js +2 -2
- package/dist/commands/list-plugins.js +2 -2
- package/dist/commands/login.d.ts +2 -2
- package/dist/commands/login.js +3 -3
- package/dist/commands/new-plugin.d.ts +48 -5
- package/dist/commands/new-plugin.d.ts.map +1 -1
- package/dist/commands/new-plugin.js +261 -95
- package/dist/commands/plugin-lifecycle.d.ts +29 -0
- package/dist/commands/plugin-lifecycle.d.ts.map +1 -0
- package/dist/commands/plugin-lifecycle.js +147 -0
- package/dist/commands/provision.d.ts +42 -2
- package/dist/commands/provision.d.ts.map +1 -1
- package/dist/commands/provision.js +184 -147
- package/dist/commands/publish-plugin.d.ts +62 -0
- package/dist/commands/publish-plugin.d.ts.map +1 -0
- package/dist/commands/publish-plugin.js +224 -0
- package/dist/commands/redrive-events.d.ts +1 -1
- package/dist/commands/redrive-events.js +2 -2
- package/dist/commands/store-token.d.ts +46 -1
- package/dist/commands/store-token.d.ts.map +1 -1
- package/dist/commands/store-token.js +127 -102
- package/dist/commands/test-plugin.d.ts +72 -0
- package/dist/commands/test-plugin.d.ts.map +1 -0
- package/dist/commands/test-plugin.js +285 -0
- package/dist/commands/upload-plugin.d.ts +6 -7
- package/dist/commands/upload-plugin.d.ts.map +1 -1
- package/dist/commands/upload-plugin.js +127 -189
- package/dist/commands/validate-plugin.d.ts +37 -4
- package/dist/commands/validate-plugin.d.ts.map +1 -1
- package/dist/commands/validate-plugin.js +129 -144
- package/dist/commands/validate-templates.d.ts.map +1 -1
- package/dist/commands/validate-templates.js +8 -9
- package/dist/config/plugin-catalog-assets.d.ts +13 -0
- package/dist/config/plugin-catalog-assets.d.ts.map +1 -0
- package/dist/config/plugin-catalog-assets.js +21 -0
- package/dist/config.yml +16 -37
- package/dist/lambda/token-renew-handler.d.ts.map +1 -1
- package/dist/lambda/token-renew-handler.js +109 -154
- package/dist/types/config.d.ts +2 -6
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/config.js +1 -1
- package/dist/types/plugin.d.ts +21 -0
- package/dist/types/plugin.d.ts.map +1 -1
- package/dist/types/plugin.js +1 -1
- package/dist/utils/aws-env.d.ts +1 -2
- package/dist/utils/aws-env.d.ts.map +1 -1
- package/dist/utils/aws-env.js +2 -3
- package/dist/utils/catalog-prompt.d.ts +26 -0
- package/dist/utils/catalog-prompt.d.ts.map +1 -0
- package/dist/utils/catalog-prompt.js +113 -0
- package/dist/utils/command-utils.d.ts.map +1 -1
- package/dist/utils/command-utils.js +14 -3
- package/dist/utils/config-loader.d.ts.map +1 -1
- package/dist/utils/config-loader.js +4 -6
- package/dist/utils/credential-store.d.ts +16 -0
- package/dist/utils/credential-store.d.ts.map +1 -1
- package/dist/utils/credential-store.js +57 -2
- package/dist/utils/deploy-runner.d.ts.map +1 -1
- package/dist/utils/deploy-runner.js +7 -2
- package/dist/utils/pipeline-config.d.ts +1 -2
- package/dist/utils/pipeline-config.d.ts.map +1 -1
- package/dist/utils/pipeline-config.js +1 -1
- package/dist/utils/plugin-docker.d.ts +44 -0
- package/dist/utils/plugin-docker.d.ts.map +1 -0
- package/dist/utils/plugin-docker.js +71 -0
- package/dist/utils/plugin-package.d.ts +40 -0
- package/dist/utils/plugin-package.d.ts.map +1 -0
- package/dist/utils/plugin-package.js +159 -0
- package/dist/utils/plugin-resolver.d.ts.map +1 -1
- package/dist/utils/plugin-resolver.js +43 -29
- package/dist/utils/plugin-scan.d.ts +22 -0
- package/dist/utils/plugin-scan.d.ts.map +1 -0
- package/dist/utils/plugin-scan.js +52 -0
- package/dist/utils/plugin-zip.d.ts +15 -0
- package/dist/utils/plugin-zip.d.ts.map +1 -0
- package/dist/utils/plugin-zip.js +96 -0
- package/dist/utils/registry.d.ts +15 -0
- package/dist/utils/registry.d.ts.map +1 -1
- package/dist/utils/registry.js +17 -2
- package/dist/utils/service-account.d.ts.map +1 -1
- package/dist/utils/service-account.js +9 -10
- package/package.json +45 -8
|
@@ -16,6 +16,198 @@ import { fetchPipelineProps } from '../utils/pipeline-config.js';
|
|
|
16
16
|
import { extractSingleResponse } from '../utils/response-utils.js';
|
|
17
17
|
import { relaxTlsForCli } from '../utils/tls.js';
|
|
18
18
|
const { bold, cyan, dim, green } = pico;
|
|
19
|
+
/** Validate the props file (exists, size cap) and parse it as a JSON object. */
|
|
20
|
+
function readPropsFile(file) {
|
|
21
|
+
console.log('');
|
|
22
|
+
printSection('File Validation');
|
|
23
|
+
if (!fs.existsSync(file)) {
|
|
24
|
+
printError('Properties file not found', { path: file });
|
|
25
|
+
throw new ValidationError(`File not found: ${file}`, 'file');
|
|
26
|
+
}
|
|
27
|
+
const fileExt = path.extname(file).toLowerCase();
|
|
28
|
+
if (fileExt !== '.json') {
|
|
29
|
+
printWarning('File extension is not .json', { extension: fileExt });
|
|
30
|
+
}
|
|
31
|
+
const fileStats = fs.statSync(file);
|
|
32
|
+
if (fileStats.size > FILE_SIZE_LIMITS.PIPELINE_PROPS) {
|
|
33
|
+
printError('Properties file is too large', {
|
|
34
|
+
size: formatFileSize(fileStats.size),
|
|
35
|
+
limit: formatFileSize(FILE_SIZE_LIMITS.PIPELINE_PROPS),
|
|
36
|
+
});
|
|
37
|
+
throw new ValidationError('Properties file exceeds size limit', 'file');
|
|
38
|
+
}
|
|
39
|
+
printSuccess('File validation passed');
|
|
40
|
+
printKeyValue({
|
|
41
|
+
'File Path': file,
|
|
42
|
+
'File Size': formatFileSize(fileStats.size),
|
|
43
|
+
'Extension': fileExt,
|
|
44
|
+
});
|
|
45
|
+
console.log('');
|
|
46
|
+
printInfo('Reading pipeline properties...');
|
|
47
|
+
let props;
|
|
48
|
+
try {
|
|
49
|
+
props = JSON.parse(fs.readFileSync(file, 'utf-8'));
|
|
50
|
+
}
|
|
51
|
+
catch (error) {
|
|
52
|
+
printError('Invalid JSON in properties file', {
|
|
53
|
+
error: errorMessage(error),
|
|
54
|
+
hint: 'Ensure the file contains valid JSON syntax',
|
|
55
|
+
});
|
|
56
|
+
throw new ValidationError('Properties file must contain valid JSON', 'file');
|
|
57
|
+
}
|
|
58
|
+
if (typeof props !== 'object' || props === null) {
|
|
59
|
+
printError('Invalid properties format', {
|
|
60
|
+
type: typeof props,
|
|
61
|
+
hint: 'Properties must be a JSON object',
|
|
62
|
+
});
|
|
63
|
+
throw new ValidationError('Properties must be a valid object', 'file');
|
|
64
|
+
}
|
|
65
|
+
const propCount = Object.keys(props).length;
|
|
66
|
+
printSuccess('Properties parsed successfully');
|
|
67
|
+
printKeyValue({
|
|
68
|
+
'Total Keys': propCount.toString(),
|
|
69
|
+
'Sample Keys': Object.keys(props).slice(0, 5).join(', ') + (propCount > 5 ? '...' : ''),
|
|
70
|
+
});
|
|
71
|
+
if (propCount === 0) {
|
|
72
|
+
printWarning('Properties object is empty - pipeline will have no configuration');
|
|
73
|
+
}
|
|
74
|
+
return props;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Build the create request. Project & organization prefer the CLI flags and
|
|
78
|
+
* fall back to values embedded in the props file (builderProps).
|
|
79
|
+
*/
|
|
80
|
+
function buildCreatePayload(options, props) {
|
|
81
|
+
const resolvedProject = options.project ?? props.project;
|
|
82
|
+
const resolvedOrganization = options.organization ?? props.organization;
|
|
83
|
+
if (!resolvedProject) {
|
|
84
|
+
printError('Project is required', {
|
|
85
|
+
hint: 'Provide -p/--project flag or include "project" in the props file',
|
|
86
|
+
});
|
|
87
|
+
throw new ValidationError('Project is required', 'project');
|
|
88
|
+
}
|
|
89
|
+
if (!resolvedOrganization) {
|
|
90
|
+
printError('Organization is required', {
|
|
91
|
+
hint: 'Provide -o/--organization flag or include "organization" in the props file',
|
|
92
|
+
});
|
|
93
|
+
throw new ValidationError('Organization is required', 'organization');
|
|
94
|
+
}
|
|
95
|
+
// Resolve pipelineName with the shared default (mirrors pipeline-core's
|
|
96
|
+
// pipeline-configuration.ts) so create + registry + CDK all agree.
|
|
97
|
+
const resolvedPipelineName = options.name
|
|
98
|
+
?? props.pipelineName
|
|
99
|
+
?? defaultPipelineName(resolvedOrganization, resolvedProject);
|
|
100
|
+
const payload = {
|
|
101
|
+
project: resolvedProject,
|
|
102
|
+
organization: resolvedOrganization,
|
|
103
|
+
pipelineName: resolvedPipelineName,
|
|
104
|
+
props,
|
|
105
|
+
};
|
|
106
|
+
if (options.visibility)
|
|
107
|
+
payload.visibility = options.visibility;
|
|
108
|
+
if (options.default !== undefined)
|
|
109
|
+
payload.isDefault = options.default;
|
|
110
|
+
if (options.active !== undefined)
|
|
111
|
+
payload.isActive = options.active;
|
|
112
|
+
return payload;
|
|
113
|
+
}
|
|
114
|
+
/** Print the request that would be sent, for `--dry-run`. */
|
|
115
|
+
function printDryRun(options, payload) {
|
|
116
|
+
console.log('');
|
|
117
|
+
printSection('Dry Run - Request Preview');
|
|
118
|
+
console.log(JSON.stringify(payload, null, 2));
|
|
119
|
+
console.log('');
|
|
120
|
+
printSuccess('✓ Validation complete - no pipeline created (dry run mode)');
|
|
121
|
+
console.log('');
|
|
122
|
+
if (options.deploy) {
|
|
123
|
+
printInfo('With --deploy, the pipeline would be deployed via CDK after creation', {
|
|
124
|
+
profile: options.profile || '(default)',
|
|
125
|
+
region: options.region || '(default)',
|
|
126
|
+
requireApproval: options.requireApproval,
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
printInfo('To create the pipeline, run the command without --dry-run');
|
|
130
|
+
}
|
|
131
|
+
/** Print the created pipeline and save it to `./output/pipeline-<id>.json`. */
|
|
132
|
+
function reportCreatedPipeline(pipeline, executionId, requestDuration, startTime) {
|
|
133
|
+
console.log('');
|
|
134
|
+
printSection('✓ Pipeline Created Successfully');
|
|
135
|
+
printKeyValue({
|
|
136
|
+
'Pipeline ID': green(bold(pipeline.id)),
|
|
137
|
+
'Project': pipeline.project,
|
|
138
|
+
'Organization': pipeline.organization,
|
|
139
|
+
'Name': pipeline.pipelineName || '(not set)',
|
|
140
|
+
'Visibility': pipeline.visibility || 'org',
|
|
141
|
+
'Default': pipeline.isDefault ? 'Yes' : 'No',
|
|
142
|
+
'Active': pipeline.isActive ? 'Yes' : 'No',
|
|
143
|
+
'Properties': pipeline.props ? `${Object.keys(pipeline.props).length} keys` : '(not returned)',
|
|
144
|
+
});
|
|
145
|
+
if (pipeline.createdAt) {
|
|
146
|
+
console.log('');
|
|
147
|
+
printKeyValue({ 'Created At': pipeline.createdAt });
|
|
148
|
+
}
|
|
149
|
+
console.log('');
|
|
150
|
+
printKeyValue({
|
|
151
|
+
'Execution ID': executionId,
|
|
152
|
+
'Request Duration': formatDuration(requestDuration),
|
|
153
|
+
'Total Duration': formatDuration(Date.now() - startTime),
|
|
154
|
+
});
|
|
155
|
+
const outputDir = './output';
|
|
156
|
+
ensureOutputDirectory(outputDir);
|
|
157
|
+
const outputFile = path.join(outputDir, `pipeline-${pipeline.id}.json`);
|
|
158
|
+
fs.writeFileSync(outputFile, JSON.stringify(pipeline, null, 2));
|
|
159
|
+
console.log('');
|
|
160
|
+
printSuccess('Pipeline details saved to file');
|
|
161
|
+
printKeyValue({
|
|
162
|
+
'Output File': outputFile,
|
|
163
|
+
'File Size': formatFileSize(fs.statSync(outputFile).size),
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* `--deploy`: run the same CDK deploy + ARN registration as `pipeline deploy
|
|
168
|
+
* --id`. The record already exists and is authoritative: if the deploy fails it
|
|
169
|
+
* is KEPT and the exact retry is surfaced rather than rolled back (never
|
|
170
|
+
* false-green).
|
|
171
|
+
*/
|
|
172
|
+
async function deployCreatedPipeline(options, pipelineId, executionId, debug) {
|
|
173
|
+
console.log('');
|
|
174
|
+
printSection('Deploying Pipeline');
|
|
175
|
+
try {
|
|
176
|
+
// Deploy touches the AWS SDK + the CDK synth subprocess; relax TLS the
|
|
177
|
+
// same way `deploy` does (refused in production by relaxTlsForCli).
|
|
178
|
+
relaxTlsForCli(options.verifySsl, printWarning);
|
|
179
|
+
// The async client adds --store-tokens (Secrets Manager) support and
|
|
180
|
+
// backs BOTH the props fetch and the registry callback.
|
|
181
|
+
const deployClient = await createAuthenticatedClientAsync(options);
|
|
182
|
+
const deployConfig = deployClient.getConfig();
|
|
183
|
+
// Re-fetch the just-created pipeline so plugins are resolved and the
|
|
184
|
+
// registry host is baked EXACTLY as `deploy --id` does — no drift.
|
|
185
|
+
const fetched = await fetchPipelineProps(deployClient, pipelineId);
|
|
186
|
+
await runDeploy({
|
|
187
|
+
pipeline: fetched.pipeline,
|
|
188
|
+
propsWithIds: fetched.propsWithIds,
|
|
189
|
+
profile: options.profile,
|
|
190
|
+
region: options.region,
|
|
191
|
+
requireApproval: options.requireApproval,
|
|
192
|
+
output: options.output,
|
|
193
|
+
debug,
|
|
194
|
+
executionId,
|
|
195
|
+
platformClient: deployClient,
|
|
196
|
+
platformPipelineUrl: deployConfig.api.pipelineUrl,
|
|
197
|
+
platformBaseUrl: deployConfig.api.baseUrl,
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
catch (deployError) {
|
|
201
|
+
printError('Pipeline was created but the deploy failed', {
|
|
202
|
+
pipelineId,
|
|
203
|
+
error: errorMessage(deployError),
|
|
204
|
+
retry: `pipeline-manager pipeline deploy --id ${pipelineId}`,
|
|
205
|
+
});
|
|
206
|
+
// Re-throw so the process exits non-zero. The record is intentionally
|
|
207
|
+
// retained — re-run the deploy with the command above.
|
|
208
|
+
throw deployError;
|
|
209
|
+
}
|
|
210
|
+
}
|
|
19
211
|
/**
|
|
20
212
|
* Registers the `create-pipeline` command with the CLI program.
|
|
21
213
|
*
|
|
@@ -65,119 +257,10 @@ export function createPipeline(program) {
|
|
|
65
257
|
});
|
|
66
258
|
// Security warning for SSL verification disabled
|
|
67
259
|
printSslWarning(options.verifySsl);
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
// Validate file exists
|
|
71
|
-
if (!fs.existsSync(options.file)) {
|
|
72
|
-
printError('Properties file not found', { path: options.file });
|
|
73
|
-
throw new ValidationError(`File not found: ${options.file}`, 'file');
|
|
74
|
-
}
|
|
75
|
-
// Check file extension
|
|
76
|
-
const fileExt = path.extname(options.file).toLowerCase();
|
|
77
|
-
if (fileExt !== '.json') {
|
|
78
|
-
printWarning('File extension is not .json', { extension: fileExt });
|
|
79
|
-
}
|
|
80
|
-
const fileStats = fs.statSync(options.file);
|
|
81
|
-
// Check file size
|
|
82
|
-
if (fileStats.size > FILE_SIZE_LIMITS.PIPELINE_PROPS) {
|
|
83
|
-
printError('Properties file is too large', {
|
|
84
|
-
size: formatFileSize(fileStats.size),
|
|
85
|
-
limit: formatFileSize(FILE_SIZE_LIMITS.PIPELINE_PROPS),
|
|
86
|
-
});
|
|
87
|
-
throw new ValidationError('Properties file exceeds size limit', 'file');
|
|
88
|
-
}
|
|
89
|
-
printSuccess('File validation passed');
|
|
90
|
-
printKeyValue({
|
|
91
|
-
'File Path': options.file,
|
|
92
|
-
'File Size': formatFileSize(fileStats.size),
|
|
93
|
-
'Extension': fileExt,
|
|
94
|
-
});
|
|
95
|
-
// Read and parse properties file
|
|
96
|
-
console.log('');
|
|
97
|
-
printInfo('Reading pipeline properties...');
|
|
98
|
-
const fileContent = fs.readFileSync(options.file, 'utf-8');
|
|
99
|
-
let props;
|
|
100
|
-
try {
|
|
101
|
-
props = JSON.parse(fileContent);
|
|
102
|
-
}
|
|
103
|
-
catch (error) {
|
|
104
|
-
printError('Invalid JSON in properties file', {
|
|
105
|
-
error: errorMessage(error),
|
|
106
|
-
hint: 'Ensure the file contains valid JSON syntax',
|
|
107
|
-
});
|
|
108
|
-
throw new ValidationError('Properties file must contain valid JSON', 'file');
|
|
109
|
-
}
|
|
110
|
-
// Validate properties structure
|
|
111
|
-
if (typeof props !== 'object' || props === null) {
|
|
112
|
-
printError('Invalid properties format', {
|
|
113
|
-
type: typeof props,
|
|
114
|
-
hint: 'Properties must be a JSON object',
|
|
115
|
-
});
|
|
116
|
-
throw new ValidationError('Properties must be a valid object', 'file');
|
|
117
|
-
}
|
|
118
|
-
const propCount = Object.keys(props).length;
|
|
119
|
-
printSuccess('Properties parsed successfully');
|
|
120
|
-
printKeyValue({
|
|
121
|
-
'Total Keys': propCount.toString(),
|
|
122
|
-
'Sample Keys': Object.keys(props).slice(0, 5).join(', ') + (propCount > 5 ? '...' : ''),
|
|
123
|
-
});
|
|
124
|
-
// Validate properties content
|
|
125
|
-
if (propCount === 0) {
|
|
126
|
-
printWarning('Properties object is empty - pipeline will have no configuration');
|
|
127
|
-
}
|
|
128
|
-
// Resolve project & organization: prefer CLI flags, fall back to
|
|
129
|
-
// values embedded inside the props file (builderProps).
|
|
130
|
-
const resolvedProject = options.project ?? props.project;
|
|
131
|
-
const resolvedOrganization = options.organization ?? props.organization;
|
|
132
|
-
if (!resolvedProject) {
|
|
133
|
-
printError('Project is required', {
|
|
134
|
-
hint: 'Provide -p/--project flag or include "project" in the props file',
|
|
135
|
-
});
|
|
136
|
-
throw new ValidationError('Project is required', 'project');
|
|
137
|
-
}
|
|
138
|
-
if (!resolvedOrganization) {
|
|
139
|
-
printError('Organization is required', {
|
|
140
|
-
hint: 'Provide -o/--organization flag or include "organization" in the props file',
|
|
141
|
-
});
|
|
142
|
-
throw new ValidationError('Organization is required', 'organization');
|
|
143
|
-
}
|
|
144
|
-
// Resolve pipelineName with the shared default (mirrors pipeline-core's
|
|
145
|
-
// pipeline-configuration.ts) so create + registry + CDK all agree.
|
|
146
|
-
const resolvedPipelineName = options.name
|
|
147
|
-
?? props.pipelineName
|
|
148
|
-
?? defaultPipelineName(resolvedOrganization, resolvedProject);
|
|
149
|
-
const payload = {
|
|
150
|
-
project: resolvedProject,
|
|
151
|
-
organization: resolvedOrganization,
|
|
152
|
-
pipelineName: resolvedPipelineName,
|
|
153
|
-
props,
|
|
154
|
-
};
|
|
155
|
-
// Add optional fields only if provided
|
|
156
|
-
if (options.visibility) {
|
|
157
|
-
payload.visibility = options.visibility;
|
|
158
|
-
}
|
|
159
|
-
if (options.default !== undefined) {
|
|
160
|
-
payload.isDefault = options.default;
|
|
161
|
-
}
|
|
162
|
-
if (options.active !== undefined) {
|
|
163
|
-
payload.isActive = options.active;
|
|
164
|
-
}
|
|
165
|
-
// Dry run mode
|
|
260
|
+
const props = readPropsFile(options.file);
|
|
261
|
+
const payload = buildCreatePayload(options, props);
|
|
166
262
|
if (options.dryRun) {
|
|
167
|
-
|
|
168
|
-
printSection('Dry Run - Request Preview');
|
|
169
|
-
console.log(JSON.stringify(payload, null, 2));
|
|
170
|
-
console.log('');
|
|
171
|
-
printSuccess('✓ Validation complete - no pipeline created (dry run mode)');
|
|
172
|
-
console.log('');
|
|
173
|
-
if (options.deploy) {
|
|
174
|
-
printInfo('With --deploy, the pipeline would be deployed via CDK after creation', {
|
|
175
|
-
profile: options.profile || '(default)',
|
|
176
|
-
region: options.region || '(default)',
|
|
177
|
-
requireApproval: options.requireApproval,
|
|
178
|
-
});
|
|
179
|
-
}
|
|
180
|
-
printInfo('To create the pipeline, run the command without --dry-run');
|
|
263
|
+
printDryRun(options, payload);
|
|
181
264
|
return;
|
|
182
265
|
}
|
|
183
266
|
// Create authenticated API client
|
|
@@ -206,84 +289,9 @@ export function createPipeline(program) {
|
|
|
206
289
|
});
|
|
207
290
|
throw new Error('Pipeline creation failed - no valid pipeline data received');
|
|
208
291
|
}
|
|
209
|
-
|
|
210
|
-
printSection('✓ Pipeline Created Successfully');
|
|
211
|
-
// Display created pipeline info
|
|
212
|
-
printKeyValue({
|
|
213
|
-
'Pipeline ID': green(bold(pipeline.id)),
|
|
214
|
-
'Project': pipeline.project,
|
|
215
|
-
'Organization': pipeline.organization,
|
|
216
|
-
'Name': pipeline.pipelineName || '(not set)',
|
|
217
|
-
'Visibility': pipeline.visibility || 'org',
|
|
218
|
-
'Default': pipeline.isDefault ? 'Yes' : 'No',
|
|
219
|
-
'Active': pipeline.isActive ? 'Yes' : 'No',
|
|
220
|
-
'Properties': pipeline.props ? `${Object.keys(pipeline.props).length} keys` : '(not returned)',
|
|
221
|
-
});
|
|
222
|
-
if (pipeline.createdAt) {
|
|
223
|
-
console.log('');
|
|
224
|
-
printKeyValue({
|
|
225
|
-
'Created At': pipeline.createdAt,
|
|
226
|
-
});
|
|
227
|
-
}
|
|
228
|
-
// Performance metrics
|
|
229
|
-
console.log('');
|
|
230
|
-
printKeyValue({
|
|
231
|
-
'Execution ID': executionId,
|
|
232
|
-
'Request Duration': formatDuration(requestDuration),
|
|
233
|
-
'Total Duration': formatDuration(Date.now() - startTime),
|
|
234
|
-
});
|
|
235
|
-
// Save pipeline info to file
|
|
236
|
-
const outputDir = './output';
|
|
237
|
-
ensureOutputDirectory(outputDir);
|
|
238
|
-
const outputFile = path.join(outputDir, `pipeline-${pipeline.id}.json`);
|
|
239
|
-
fs.writeFileSync(outputFile, JSON.stringify(pipeline, null, 2));
|
|
240
|
-
console.log('');
|
|
241
|
-
printSuccess('Pipeline details saved to file');
|
|
242
|
-
printKeyValue({
|
|
243
|
-
'Output File': outputFile,
|
|
244
|
-
'File Size': formatFileSize(fs.statSync(outputFile).size),
|
|
245
|
-
});
|
|
246
|
-
// ── Optional deploy (--deploy) ──
|
|
247
|
-
// The record now exists and is authoritative. If the deploy fails we KEEP
|
|
248
|
-
// it and surface the exact retry rather than rolling back (never false-green).
|
|
292
|
+
reportCreatedPipeline(pipeline, executionId, requestDuration, startTime);
|
|
249
293
|
if (options.deploy) {
|
|
250
|
-
|
|
251
|
-
printSection('Deploying Pipeline');
|
|
252
|
-
try {
|
|
253
|
-
// Deploy touches the AWS SDK + the CDK synth subprocess; relax TLS the
|
|
254
|
-
// same way `deploy` does (refused in production by relaxTlsForCli).
|
|
255
|
-
relaxTlsForCli(options.verifySsl, printWarning);
|
|
256
|
-
// The async client adds --store-tokens (Secrets Manager) support and
|
|
257
|
-
// backs BOTH the props fetch and the registry callback.
|
|
258
|
-
const deployClient = await createAuthenticatedClientAsync(options);
|
|
259
|
-
const deployConfig = deployClient.getConfig();
|
|
260
|
-
// Re-fetch the just-created pipeline so plugins are resolved and the
|
|
261
|
-
// registry host is baked EXACTLY as `deploy --id` does — no drift.
|
|
262
|
-
const fetched = await fetchPipelineProps(deployClient, pipeline.id);
|
|
263
|
-
await runDeploy({
|
|
264
|
-
pipeline: fetched.pipeline,
|
|
265
|
-
propsWithIds: fetched.propsWithIds,
|
|
266
|
-
profile: options.profile,
|
|
267
|
-
region: options.region,
|
|
268
|
-
requireApproval: options.requireApproval,
|
|
269
|
-
output: options.output,
|
|
270
|
-
debug: program.opts().debug,
|
|
271
|
-
executionId,
|
|
272
|
-
platformClient: deployClient,
|
|
273
|
-
platformPipelineUrl: deployConfig.api.pipelineUrl,
|
|
274
|
-
platformBaseUrl: deployConfig.api.baseUrl,
|
|
275
|
-
});
|
|
276
|
-
}
|
|
277
|
-
catch (deployError) {
|
|
278
|
-
printError('Pipeline was created but the deploy failed', {
|
|
279
|
-
pipelineId: pipeline.id,
|
|
280
|
-
error: errorMessage(deployError),
|
|
281
|
-
retry: `pipeline-manager pipeline deploy --id ${pipeline.id}`,
|
|
282
|
-
});
|
|
283
|
-
// Re-throw so the process exits non-zero. The record is intentionally
|
|
284
|
-
// retained — re-run the deploy with the command above.
|
|
285
|
-
throw deployError;
|
|
286
|
-
}
|
|
294
|
+
await deployCreatedPipeline(options, pipeline.id, executionId, program.opts().debug);
|
|
287
295
|
}
|
|
288
296
|
// Next steps
|
|
289
297
|
console.log('');
|
|
@@ -313,4 +321,4 @@ export function createPipeline(program) {
|
|
|
313
321
|
}
|
|
314
322
|
});
|
|
315
323
|
}
|
|
316
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLXBpcGVsaW5lLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1hbmRzL2NyZWF0ZS1waXBlbGluZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLE9BQU8sS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBQ3pCLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBQzdCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3BDLE9BQU8sR0FBRyxNQUFNLEtBQUssQ0FBQztBQUN0QixPQUFPLElBQUksTUFBTSxZQUFZLENBQUM7QUFDOUIsT0FBTyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsZ0JBQWdCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNuSCxPQUFPLEVBQStGLE1BQU0sbUJBQW1CLENBQUM7QUFDaEksT0FBTyxFQUFFLGtCQUFrQixFQUFFLGVBQWUsRUFBRSx5QkFBeUIsRUFBRSw4QkFBOEIsRUFBRSxjQUFjLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNoTSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDdEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsZUFBZSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDdEYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDakosT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDakUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7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QU8sRUFBRSxPQUFPLENBQUMsT0FBTztvQkFDeEIsWUFBWSxFQUFFLE9BQU8sQ0FBQyxZQUFZO29CQUNsQyxJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUk7b0JBQ2xCLFNBQVMsRUFBRSxPQUFPLENBQUMsU0FBUztvQkFDNUIsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNO2lCQUN2QjthQUNGLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDLENBQUMsQ0FBQztBQUNQLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IGVycm9yTWVzc2FnZSB9IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL2FwaS1jb3JlJztcbmltcG9ydCB7IENvbW1hbmQgfSBmcm9tICdjb21tYW5kZXInO1xuaW1wb3J0IG9yYSBmcm9tICdvcmEnO1xuaW1wb3J0IHBpY28gZnJvbSAncGljb2NvbG9ycyc7XG5pbXBvcnQgeyBmb3JtYXREdXJhdGlvbiwgZm9ybWF0RmlsZVNpemUsIEZJTEVfU0laRV9MSU1JVFMsIGRlZmF1bHRQaXBlbGluZU5hbWUgfSBmcm9tICcuLi9jb25maWcvY2xpLmNvbnN0YW50cy5qcyc7XG5pbXBvcnQgeyB0eXBlIFBpcGVsaW5lLCB0eXBlIFBpcGVsaW5lUmVzcG9uc2UsIHR5cGUgQ3JlYXRlUGlwZWxpbmVSZXF1ZXN0LCB0eXBlIFBsYXRmb3JtRGVwbG95Q29uZmlnIH0gZnJvbSAnLi4vdHlwZXMvaW5kZXguanMnO1xuaW1wb3J0IHsgcHJpbnRDb21tYW5kSGVhZGVyLCBwcmludFNzbFdhcm5pbmcsIGNyZWF0ZUF1dGhlbnRpY2F0ZWRDbGllbnQsIGNyZWF0ZUF1dGhlbnRpY2F0ZWRDbGllbnRBc3luYywgd2l0aFNzbE9wdGlvbnMsIHdpdGhQcm9maWxlT3B0aW9uLCB3aXRoUmVnaW9uT3B0aW9uIH0gZnJvbSAnLi4vdXRpbHMvY29tbWFuZC11dGlscy5qcyc7XG5pbXBvcnQgeyBydW5EZXBsb3kgfSBmcm9tICcuLi91dGlscy9kZXBsb3ktcnVubmVyLmpzJztcbmltcG9ydCB7IEVSUk9SX0NPREVTLCBoYW5kbGVFcnJvciwgVmFsaWRhdGlvbkVycm9yIH0gZnJvbSAnLi4vdXRpbHMvZXJyb3ItaGFuZGxlci5qcyc7XG5pbXBvcnQgeyBlbnN1cmVPdXRwdXREaXJlY3RvcnksIHByaW50RXJyb3IsIHByaW50SW5mbywgcHJpbnRLZXlWYWx1ZSwgcHJpbnRTZWN0aW9uLCBwcmludFN1Y2Nlc3MsIHByaW50V2FybmluZyB9IGZyb20gJy4uL3V0aWxzL291dHB1dC11dGlscy5qcyc7XG5pbXBvcnQgeyBmZXRjaFBpcGVsaW5lUHJvcHMgfSBmcm9tICcuLi91dGlscy9waXBlbGluZS1jb25maWcuanMnO1xuaW1wb3J0IHsgZXh0cmFjdFNpbmdsZVJlc3BvbnNlIH0gZnJvbSAnLi4vdXRpbHMvcmVzcG9uc2UtdXRpbHMuanMnO1xuaW1wb3J0IHsgcmVsYXhUbHNGb3JDbGkgfSBmcm9tICcuLi91dGlscy90bHMuanMnO1xuXG5jb25zdCB7IGJvbGQsIGN5YW4sIGRpbSwgZ3JlZW4gfSA9IHBpY287XG5cbi8qKlxuICogUmVnaXN0ZXJzIHRoZSBgY3JlYXRlLXBpcGVsaW5lYCBjb21tYW5kIHdpdGggdGhlIENMSSBwcm9ncmFtLlxuICpcbiAqIEFjY2VwdHMgYSBwaXBlbGluZSBwcm9wZXJ0aWVzIEpTT04gZmlsZSwgdmFsaWRhdGVzIGl0LCByZXNvbHZlc1xuICogcHJvamVjdC9vcmdhbml6YXRpb24gZnJvbSBDTEkgZmxhZ3Mgb3IgdGhlIHByb3BzIGZpbGUsIGFuZFxuICogY3JlYXRlcyB0aGUgcGlwZWxpbmUgdmlhIHRoZSBwbGF0Zm9ybSBBUEkuXG4gKlxuICogQHBhcmFtIHByb2dyYW0gLSBUaGUgcm9vdCBDb21tYW5kZXIgcHJvZ3JhbSBpbnN0YW5jZSB0byBhdHRhY2ggdGhlIGNvbW1hbmQgdG8uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVQaXBlbGluZShwcm9ncmFtOiBDb21tYW5kKTogdm9pZCB7XG4gIHdpdGhTc2xPcHRpb25zKFxuICAgIHdpdGhSZWdpb25PcHRpb24oXG4gICAgICB3aXRoUHJvZmlsZU9wdGlvbihwcm9ncmFtXG4gICAgICAgIC5jb21tYW5kKCdjcmVhdGUnKVxuICAgICAgICAuZGVzY3JpcHRpb24oJ0NyZWF0ZSBhIG5ldyBwaXBlbGluZSDigJQgYW5kIG9wdGlvbmFsbHkgZGVwbG95IGl0IHdpdGggLS1kZXBsb3knKVxuICAgICAgICAucmVxdWlyZWRPcHRpb24oJy1mLCAtLWZpbGUgPGZpbGU+JywgJ1BhdGggdG8gcGlwZWxpbmUgcHJvcGVydGllcyBKU09OIGZpbGUnKVxuICAgICAgICAub3B0aW9uKCctcCwgLS1wcm9qZWN0IDxwcm9qZWN0PicsICdQcm9qZWN0IG5hbWUgKGZhbGxzIGJhY2sgdG8gdmFsdWUgaW4gcHJvcHMgZmlsZSknKVxuICAgICAgICAub3B0aW9uKCctbywgLS1vcmdhbml6YXRpb24gPG9yZ2FuaXphdGlvbj4nLCAnT3JnYW5pemF0aW9uIG5hbWUgKGZhbGxzIGJhY2sgdG8gdmFsdWUgaW4gcHJvcHMgZmlsZSknKVxuICAgICAgICAub3B0aW9uKCctbiwgLS1uYW1lIDxuYW1lPicsICdQaXBlbGluZSBuYW1lJylcbiAgICAgICAgLm9wdGlvbignLWEsIC0tdmlzaWJpbGl0eSA8cnVuZz4nLCAnU2hhcmluZyBydW5nIChwcml2YXRlfG9yZ3xwdWJsaWMpLiBQaXBlbGluZXMgZGVmYXVsdCB0byBvcmcg4oCUIGEgdGVhbSBhc3NldCBpcyB2aXNpYmxlIHRvIHRoZSB0ZWFtLicsICdvcmcnKVxuICAgICAgICAub3B0aW9uKCctLWRlZmF1bHQnLCAnU2V0IGFzIGRlZmF1bHQgcGlwZWxpbmUnLCBmYWxzZSlcbiAgICAgICAgLm9wdGlvbignLS1hY3RpdmUnLCAnU2V0IHBpcGVsaW5lIGFzIGFjdGl2ZScsIHRydWUpXG4gICAgICAgIC5vcHRpb24oJy0tbm8tYWN0aXZlJywgJ0NyZWF0ZSB0aGUgcGlwZWxpbmUgYXMgaW5hY3RpdmUnKVxuICAgICAgICAvLyAtLWRlcGxveTogYWZ0ZXIgY3JlYXRpbmcgdGhlIHJlY29yZCwgcnVuIHRoZSBzYW1lIENESyBkZXBsb3kgKyBBUk5cbiAgICAgICAgLy8gcmVnaXN0cmF0aW9uIGFzIGBwaXBlbGluZSBkZXBsb3kgLS1pZGAgKHNoYXJlZCBydW5EZXBsb3kpLiBUaGUgZmxhZ3NcbiAgICAgICAgLy8gYmVsb3cgYXBwbHkgb25seSB3aXRoIC0tZGVwbG95LlxuICAgICAgICAub3B0aW9uKCctLWRlcGxveScsICdEZXBsb3kgdGhlIHBpcGVsaW5lIHdpdGggQVdTIENESyBpbW1lZGlhdGVseSBhZnRlciBjcmVhdGluZyBpdCcsIGZhbHNlKVxuICAgICAgICAub3B0aW9uKCctLXJlcXVpcmUtYXBwcm92YWwgPGFwcHJvdmFsPicsICdEZXBsb3kgYXBwcm92YWwgbGV2ZWw6IG5ldmVyfGFueS1jaGFuZ2V8YnJvYWRlbmluZyAod2l0aCAtLWRlcGxveSknLCAnbmV2ZXInKVxuICAgICAgICAub3B0aW9uKCctLW91dHB1dCA8ZGlyPicsICdDREsgb3V0cHV0IGRpcmVjdG9yeSAod2l0aCAtLWRlcGxveSknLCAnY2RrLm91dCcpXG4gICAgICAgIC5vcHRpb24oJy0tc3RvcmUtdG9rZW5zJywgJ0RlcGxveSBhdXRoIHZpYSBBV1MgU2VjcmV0cyBNYW5hZ2VyIHRva2VuICh3aXRoIC0tZGVwbG95OyByZXF1aXJlcyBQTEFURk9STV9TRUNSRVRfTkFNRSknLCBmYWxzZSkpLFxuICAgICksXG4gIClcbiAgICAub3B0aW9uKCctLWRyeS1ydW4nLCAnVmFsaWRhdGUgaW5wdXRzIHdpdGhvdXQgY3JlYXRpbmcgcGlwZWxpbmUnLCBmYWxzZSlcbiAgICAuYWN0aW9uKGFzeW5jIChvcHRpb25zKSA9PiB7XG4gICAgICBjb25zdCBleGVjdXRpb25JZCA9IHByaW50Q29tbWFuZEhlYWRlcignQ3JlYXRlIFBpcGVsaW5lJywgJ0NyZWF0aW5nIFBpcGVsaW5lJyk7XG4gICAgICBjb25zdCBzdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuXG4gICAgICB0cnkge1xuXG4gICAgICAgIC8vIERpc3BsYXkgcGFyYW1ldGVyc1xuICAgICAgICBwcmludEluZm8oJ0NvbmZpZ3VyYXRpb24nKTtcbiAgICAgICAgcHJpbnRLZXlWYWx1ZSh7XG4gICAgICAgICAgJ1Byb2plY3QnOiBvcHRpb25zLnByb2plY3QgfHwgJyhmcm9tIHByb3BzIGZpbGUpJyxcbiAgICAgICAgICAnT3JnYW5pemF0aW9uJzogb3B0aW9ucy5vcmdhbml6YXRpb24gfHwgJyhmcm9tIHByb3BzIGZpbGUpJyxcbiAgICAgICAgICAnTmFtZSc6IG9wdGlvbnMubmFtZSB8fCAnKG5vdCBzZXQpJyxcbiAgICAgICAgICAnVmlzaWJpbGl0eSc6IG9wdGlvbnMudmlzaWJpbGl0eSxcbiAgICAgICAgICAnRGVmYXVsdCBQaXBlbGluZSc6IG9wdGlvbnMuZGVmYXVsdCA/ICdZZXMnIDogJ05vJyxcbiAgICAgICAgICAnQWN0aXZlJzogb3B0aW9ucy5hY3RpdmUgPyAnWWVzJyA6ICdObycsXG4gICAgICAgICAgJ0RlcGxveSBBZnRlciBDcmVhdGUnOiBvcHRpb25zLmRlcGxveSA/IGBZZXMgKHByb2ZpbGU6ICR7b3B0aW9ucy5wcm9maWxlIHx8ICdkZWZhdWx0J30pYCA6ICdObycsXG4gICAgICAgICAgJ1Byb3BlcnRpZXMgRmlsZSc6IG9wdGlvbnMuZmlsZSxcbiAgICAgICAgICAnU1NMIFZlcmlmaWNhdGlvbic6IG9wdGlvbnMudmVyaWZ5U3NsID09PSBmYWxzZSA/ICdEaXNhYmxlZCcgOiAnRW5hYmxlZCcsXG4gICAgICAgICAgJ0RyeSBSdW4nOiBvcHRpb25zLmRyeVJ1biA/ICdZZXMnIDogJ05vJyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gU2VjdXJpdHkgd2FybmluZyBmb3IgU1NMIHZlcmlmaWNhdGlvbiBkaXNhYmxlZFxuICAgICAgICBwcmludFNzbFdhcm5pbmcob3B0aW9ucy52ZXJpZnlTc2wpO1xuXG4gICAgICAgIGNvbnNvbGUubG9nKCcnKTtcbiAgICAgICAgcHJpbnRTZWN0aW9uKCdGaWxlIFZhbGlkYXRpb24nKTtcblxuICAgICAgICAvLyBWYWxpZGF0ZSBmaWxlIGV4aXN0c1xuICAgICAgICBpZiAoIWZzLmV4aXN0c1N5bmMob3B0aW9ucy5maWxlKSkge1xuICAgICAgICAgIHByaW50RXJyb3IoJ1Byb3BlcnRpZXMgZmlsZSBub3QgZm91bmQnLCB7IHBhdGg6IG9wdGlvbnMuZmlsZSB9KTtcbiAgICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGBGaWxlIG5vdCBmb3VuZDogJHtvcHRpb25zLmZpbGV9YCwgJ2ZpbGUnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENoZWNrIGZpbGUgZXh0ZW5zaW9uXG4gICAgICAgIGNvbnN0IGZpbGVFeHQgPSBwYXRoLmV4dG5hbWUob3B0aW9ucy5maWxlKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBpZiAoZmlsZUV4dCAhPT0gJy5qc29uJykge1xuICAgICAgICAgIHByaW50V2FybmluZygnRmlsZSBleHRlbnNpb24gaXMgbm90IC5qc29uJywgeyBleHRlbnNpb246IGZpbGVFeHQgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBmaWxlU3RhdHMgPSBmcy5zdGF0U3luYyhvcHRpb25zLmZpbGUpO1xuXG4gICAgICAgIC8vIENoZWNrIGZpbGUgc2l6ZVxuICAgICAgICBpZiAoZmlsZVN0YXRzLnNpemUgPiBGSUxFX1NJWkVfTElNSVRTLlBJUEVMSU5FX1BST1BTKSB7XG4gICAgICAgICAgcHJpbnRFcnJvcignUHJvcGVydGllcyBmaWxlIGlzIHRvbyBsYXJnZScsIHtcbiAgICAgICAgICAgIHNpemU6IGZvcm1hdEZpbGVTaXplKGZpbGVTdGF0cy5zaXplKSxcbiAgICAgICAgICAgIGxpbWl0OiBmb3JtYXRGaWxlU2l6ZShGSUxFX1NJWkVfTElNSVRTLlBJUEVMSU5FX1BST1BTKSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKCdQcm9wZXJ0aWVzIGZpbGUgZXhjZWVkcyBzaXplIGxpbWl0JywgJ2ZpbGUnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHByaW50U3VjY2VzcygnRmlsZSB2YWxpZGF0aW9uIHBhc3NlZCcpO1xuICAgICAgICBwcmludEtleVZhbHVlKHtcbiAgICAgICAgICAnRmlsZSBQYXRoJzogb3B0aW9ucy5maWxlLFxuICAgICAgICAgICdGaWxlIFNpemUnOiBmb3JtYXRGaWxlU2l6ZShmaWxlU3RhdHMuc2l6ZSksXG4gICAgICAgICAgJ0V4dGVuc2lvbic6IGZpbGVFeHQsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIFJlYWQgYW5kIHBhcnNlIHByb3BlcnRpZXMgZmlsZVxuICAgICAgICBjb25zb2xlLmxvZygnJyk7XG4gICAgICAgIHByaW50SW5mbygnUmVhZGluZyBwaXBlbGluZSBwcm9wZXJ0aWVzLi4uJyk7XG5cbiAgICAgICAgY29uc3QgZmlsZUNvbnRlbnQgPSBmcy5yZWFkRmlsZVN5bmMob3B0aW9ucy5maWxlLCAndXRmLTgnKTtcblxuICAgICAgICBsZXQgcHJvcHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHByb3BzID0gSlNPTi5wYXJzZShmaWxlQ29udGVudCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgcHJpbnRFcnJvcignSW52YWxpZCBKU09OIGluIHByb3BlcnRpZXMgZmlsZScsIHtcbiAgICAgICAgICAgIGVycm9yOiBlcnJvck1lc3NhZ2UoZXJyb3IpLFxuICAgICAgICAgICAgaGludDogJ0Vuc3VyZSB0aGUgZmlsZSBjb250YWlucyB2YWxpZCBKU09OIHN5bnRheCcsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcignUHJvcGVydGllcyBmaWxlIG11c3QgY29udGFpbiB2YWxpZCBKU09OJywgJ2ZpbGUnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFZhbGlkYXRlIHByb3BlcnRpZXMgc3RydWN0dXJlXG4gICAgICAgIGlmICh0eXBlb2YgcHJvcHMgIT09ICdvYmplY3QnIHx8IHByb3BzID09PSBudWxsKSB7XG4gICAgICAgICAgcHJpbnRFcnJvcignSW52YWxpZCBwcm9wZXJ0aWVzIGZvcm1hdCcsIHtcbiAgICAgICAgICAgIHR5cGU6IHR5cGVvZiBwcm9wcyxcbiAgICAgICAgICAgIGhpbnQ6ICdQcm9wZXJ0aWVzIG11c3QgYmUgYSBKU09OIG9iamVjdCcsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcignUHJvcGVydGllcyBtdXN0IGJlIGEgdmFsaWQgb2JqZWN0JywgJ2ZpbGUnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHByb3BDb3VudCA9IE9iamVjdC5rZXlzKHByb3BzKS5sZW5ndGg7XG5cbiAgICAgICAgcHJpbnRTdWNjZXNzKCdQcm9wZXJ0aWVzIHBhcnNlZCBzdWNjZXNzZnVsbHknKTtcbiAgICAgICAgcHJpbnRLZXlWYWx1ZSh7XG4gICAgICAgICAgJ1RvdGFsIEtleXMnOiBwcm9wQ291bnQudG9TdHJpbmcoKSxcbiAgICAgICAgICAnU2FtcGxlIEtleXMnOiBPYmplY3Qua2V5cyhwcm9wcykuc2xpY2UoMCwgNSkuam9pbignLCAnKSArIChwcm9wQ291bnQgPiA1ID8gJy4uLicgOiAnJyksXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIFZhbGlkYXRlIHByb3BlcnRpZXMgY29udGVudFxuICAgICAgICBpZiAocHJvcENvdW50ID09PSAwKSB7XG4gICAgICAgICAgcHJpbnRXYXJuaW5nKCdQcm9wZXJ0aWVzIG9iamVjdCBpcyBlbXB0eSAtIHBpcGVsaW5lIHdpbGwgaGF2ZSBubyBjb25maWd1cmF0aW9uJyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBSZXNvbHZlIHByb2plY3QgJiBvcmdhbml6YXRpb246IHByZWZlciBDTEkgZmxhZ3MsIGZhbGwgYmFjayB0b1xuICAgICAgICAvLyB2YWx1ZXMgZW1iZWRkZWQgaW5zaWRlIHRoZSBwcm9wcyBmaWxlIChidWlsZGVyUHJvcHMpLlxuICAgICAgICBjb25zdCByZXNvbHZlZFByb2plY3QgPSBvcHRpb25zLnByb2plY3QgPz8gKHByb3BzLnByb2plY3QgYXMgc3RyaW5nIHwgdW5kZWZpbmVkKTtcbiAgICAgICAgY29uc3QgcmVzb2x2ZWRPcmdhbml6YXRpb24gPSBvcHRpb25zLm9yZ2FuaXphdGlvbiA/PyAocHJvcHMub3JnYW5pemF0aW9uIGFzIHN0cmluZyB8IHVuZGVmaW5lZCk7XG5cbiAgICAgICAgaWYgKCFyZXNvbHZlZFByb2plY3QpIHtcbiAgICAgICAgICBwcmludEVycm9yKCdQcm9qZWN0IGlzIHJlcXVpcmVkJywge1xuICAgICAgICAgICAgaGludDogJ1Byb3ZpZGUgLXAvLS1wcm9qZWN0IGZsYWcgb3IgaW5jbHVkZSBcInByb2plY3RcIiBpbiB0aGUgcHJvcHMgZmlsZScsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcignUHJvamVjdCBpcyByZXF1aXJlZCcsICdwcm9qZWN0Jyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFyZXNvbHZlZE9yZ2FuaXphdGlvbikge1xuICAgICAgICAgIHByaW50RXJyb3IoJ09yZ2FuaXphdGlvbiBpcyByZXF1aXJlZCcsIHtcbiAgICAgICAgICAgIGhpbnQ6ICdQcm92aWRlIC1vLy0tb3JnYW5pemF0aW9uIGZsYWcgb3IgaW5jbHVkZSBcIm9yZ2FuaXphdGlvblwiIGluIHRoZSBwcm9wcyBmaWxlJyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKCdPcmdhbml6YXRpb24gaXMgcmVxdWlyZWQnLCAnb3JnYW5pemF0aW9uJyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBSZXNvbHZlIHBpcGVsaW5lTmFtZSB3aXRoIHRoZSBzaGFyZWQgZGVmYXVsdCAobWlycm9ycyBwaXBlbGluZS1jb3JlJ3NcbiAgICAgICAgLy8gcGlwZWxpbmUtY29uZmlndXJhdGlvbi50cykgc28gY3JlYXRlICsgcmVnaXN0cnkgKyBDREsgYWxsIGFncmVlLlxuICAgICAgICBjb25zdCByZXNvbHZlZFBpcGVsaW5lTmFtZSA9IG9wdGlvbnMubmFtZVxuICAgICAgICAgID8/IChwcm9wcy5waXBlbGluZU5hbWUgYXMgc3RyaW5nIHwgdW5kZWZpbmVkKVxuICAgICAgICAgID8/IGRlZmF1bHRQaXBlbGluZU5hbWUocmVzb2x2ZWRPcmdhbml6YXRpb24sIHJlc29sdmVkUHJvamVjdCk7XG5cbiAgICAgICAgY29uc3QgcGF5bG9hZDogQ3JlYXRlUGlwZWxpbmVSZXF1ZXN0ID0ge1xuICAgICAgICAgIHByb2plY3Q6IHJlc29sdmVkUHJvamVjdCxcbiAgICAgICAgICBvcmdhbml6YXRpb246IHJlc29sdmVkT3JnYW5pemF0aW9uLFxuICAgICAgICAgIHBpcGVsaW5lTmFtZTogcmVzb2x2ZWRQaXBlbGluZU5hbWUsXG4gICAgICAgICAgcHJvcHMsXG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gQWRkIG9wdGlvbmFsIGZpZWxkcyBvbmx5IGlmIHByb3ZpZGVkXG4gICAgICAgIGlmIChvcHRpb25zLnZpc2liaWxpdHkpIHtcbiAgICAgICAgICBwYXlsb2FkLnZpc2liaWxpdHkgPSBvcHRpb25zLnZpc2liaWxpdHk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuZGVmYXVsdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcGF5bG9hZC5pc0RlZmF1bHQgPSBvcHRpb25zLmRlZmF1bHQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuYWN0aXZlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBwYXlsb2FkLmlzQWN0aXZlID0gb3B0aW9ucy5hY3RpdmU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBEcnkgcnVuIG1vZGVcbiAgICAgICAgaWYgKG9wdGlvbnMuZHJ5UnVuKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coJycpO1xuICAgICAgICAgIHByaW50U2VjdGlvbignRHJ5IFJ1biAtIFJlcXVlc3QgUHJldmlldycpO1xuICAgICAgICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KHBheWxvYWQsIG51bGwsIDIpKTtcbiAgICAgICAgICBjb25zb2xlLmxvZygnJyk7XG4gICAgICAgICAgcHJpbnRTdWNjZXNzKCfinJMgVmFsaWRhdGlvbiBjb21wbGV0ZSAtIG5vIHBpcGVsaW5lIGNyZWF0ZWQgKGRyeSBydW4gbW9kZSknKTtcbiAgICAgICAgICBjb25zb2xlLmxvZygnJyk7XG4gICAgICAgICAgaWYgKG9wdGlvbnMuZGVwbG95KSB7XG4gICAgICAgICAgICBwcmludEluZm8oJ1dpdGggLS1kZXBsb3ksIHRoZSBwaXBlbGluZSB3b3VsZCBiZSBkZXBsb3llZCB2aWEgQ0RLIGFmdGVyIGNyZWF0aW9uJywge1xuICAgICAgICAgICAgICBwcm9maWxlOiBvcHRpb25zLnByb2ZpbGUgfHwgJyhkZWZhdWx0KScsXG4gICAgICAgICAgICAgIHJlZ2lvbjogb3B0aW9ucy5yZWdpb24gfHwgJyhkZWZhdWx0KScsXG4gICAgICAgICAgICAgIHJlcXVpcmVBcHByb3ZhbDogb3B0aW9ucy5yZXF1aXJlQXBwcm92YWwsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcHJpbnRJbmZvKCdUbyBjcmVhdGUgdGhlIHBpcGVsaW5lLCBydW4gdGhlIGNvbW1hbmQgd2l0aG91dCAtLWRyeS1ydW4nKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDcmVhdGUgYXV0aGVudGljYXRlZCBBUEkgY2xpZW50XG4gICAgICAgIGNvbnN0IGNsaWVudCA9IGNyZWF0ZUF1dGhlbnRpY2F0ZWRDbGllbnQob3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IGNsaWVudC5nZXRDb25maWcoKTtcblxuICAgICAgICAvLyBDcmVhdGUgcGlwZWxpbmVcbiAgICAgICAgY29uc29sZS5sb2coJycpO1xuICAgICAgICBwcmludFNlY3Rpb24oJ0NyZWF0aW5nIFBpcGVsaW5lJyk7XG5cbiAgICAgICAgY29uc3Qgc3Bpbm5lciA9IG9yYSgnQ3JlYXRpbmcgcGlwZWxpbmUuLi4nKS5zdGFydCgpO1xuICAgICAgICBsZXQgcmF3UmVzcG9uc2U6IFBpcGVsaW5lUmVzcG9uc2U7XG4gICAgICAgIGxldCByZXF1ZXN0RHVyYXRpb246IG51bWJlcjtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCByZXF1ZXN0U3RhcnQgPSBEYXRlLm5vdygpO1xuICAgICAgICAgIHJhd1Jlc3BvbnNlID0gYXdhaXQgY2xpZW50LnBvc3Q8UGlwZWxpbmVSZXNwb25zZT4oXG4gICAgICAgICAgICBjb25maWcuYXBpLnBpcGVsaW5lVXJsLFxuICAgICAgICAgICAgcGF5bG9hZCxcbiAgICAgICAgICApO1xuICAgICAgICAgIHJlcXVlc3REdXJhdGlvbiA9IERhdGUubm93KCkgLSByZXF1ZXN0U3RhcnQ7XG4gICAgICAgICAgc3Bpbm5lci5zdWNjZWVkKCdQaXBlbGluZSBjcmVhdGVkJyk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgc3Bpbm5lci5mYWlsKCdQaXBlbGluZSBjcmVhdGlvbiBmYWlsZWQnKTtcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHBpcGVsaW5lID0gZXh0cmFjdFNpbmdsZVJlc3BvbnNlPFBpcGVsaW5lPihyYXdSZXNwb25zZSwgJ3BpcGVsaW5lJywgJ2lkJyk7XG5cbiAgICAgICAgaWYgKCFwaXBlbGluZT8uaWQpIHtcbiAgICAgICAgICBwcmludEVycm9yKCdJbnZhbGlkIHBpcGVsaW5lIHJlc3BvbnNlJywge1xuICAgICAgICAgICAgcmVzcG9uc2VLZXlzOiByYXdSZXNwb25zZSA/IE9iamVjdC5rZXlzKHJhd1Jlc3BvbnNlKSA6ICcobnVsbCknLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUGlwZWxpbmUgY3JlYXRpb24gZmFpbGVkIC0gbm8gdmFsaWQgcGlwZWxpbmUgZGF0YSByZWNlaXZlZCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc29sZS5sb2coJycpO1xuICAgICAgICBwcmludFNlY3Rpb24oJ+KckyBQaXBlbGluZSBDcmVhdGVkIFN1Y2Nlc3NmdWxseScpO1xuXG4gICAgICAgIC8vIERpc3BsYXkgY3JlYXRlZCBwaXBlbGluZSBpbmZvXG4gICAgICAgIHByaW50S2V5VmFsdWUoe1xuICAgICAgICAgICdQaXBlbGluZSBJRCc6IGdyZWVuKGJvbGQocGlwZWxpbmUuaWQpKSxcbiAgICAgICAgICAnUHJvamVjdCc6IHBpcGVsaW5lLnByb2plY3QsXG4gICAgICAgICAgJ09yZ2FuaXphdGlvbic6IHBpcGVsaW5lLm9yZ2FuaXphdGlvbixcbiAgICAgICAgICAnTmFtZSc6IHBpcGVsaW5lLnBpcGVsaW5lTmFtZSB8fCAnKG5vdCBzZXQpJyxcbiAgICAgICAgICAnVmlzaWJpbGl0eSc6IHBpcGVsaW5lLnZpc2liaWxpdHkgfHwgJ29yZycsXG4gICAgICAgICAgJ0RlZmF1bHQnOiBwaXBlbGluZS5pc0RlZmF1bHQgPyAnWWVzJyA6ICdObycsXG4gICAgICAgICAgJ0FjdGl2ZSc6IHBpcGVsaW5lLmlzQWN0aXZlID8gJ1llcycgOiAnTm8nLFxuICAgICAgICAgICdQcm9wZXJ0aWVzJzogcGlwZWxpbmUucHJvcHMgPyBgJHtPYmplY3Qua2V5cyhwaXBlbGluZS5wcm9wcykubGVuZ3RofSBrZXlzYCA6ICcobm90IHJldHVybmVkKScsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChwaXBlbGluZS5jcmVhdGVkQXQpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZygnJyk7XG4gICAgICAgICAgcHJpbnRLZXlWYWx1ZSh7XG4gICAgICAgICAgICAnQ3JlYXRlZCBBdCc6IHBpcGVsaW5lLmNyZWF0ZWRBdCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFBlcmZvcm1hbmNlIG1ldHJpY3NcbiAgICAgICAgY29uc29sZS5sb2coJycpO1xuICAgICAgICBwcmludEtleVZhbHVlKHtcbiAgICAgICAgICAnRXhlY3V0aW9uIElEJzogZXhlY3V0aW9uSWQsXG4gICAgICAgICAgJ1JlcXVlc3QgRHVyYXRpb24nOiBmb3JtYXREdXJhdGlvbihyZXF1ZXN0RHVyYXRpb24pLFxuICAgICAgICAgICdUb3RhbCBEdXJhdGlvbic6IGZvcm1hdER1cmF0aW9uKERhdGUubm93KCkgLSBzdGFydFRpbWUpLFxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBTYXZlIHBpcGVsaW5lIGluZm8gdG8gZmlsZVxuICAgICAgICBjb25zdCBvdXRwdXREaXIgPSAnLi9vdXRwdXQnO1xuICAgICAgICBlbnN1cmVPdXRwdXREaXJlY3Rvcnkob3V0cHV0RGlyKTtcblxuICAgICAgICBjb25zdCBvdXRwdXRGaWxlID0gcGF0aC5qb2luKG91dHB1dERpciwgYHBpcGVsaW5lLSR7cGlwZWxpbmUuaWR9Lmpzb25gKTtcbiAgICAgICAgZnMud3JpdGVGaWxlU3luYyhvdXRwdXRGaWxlLCBKU09OLnN0cmluZ2lmeShwaXBlbGluZSwgbnVsbCwgMikpO1xuXG4gICAgICAgIGNvbnNvbGUubG9nKCcnKTtcbiAgICAgICAgcHJpbnRTdWNjZXNzKCdQaXBlbGluZSBkZXRhaWxzIHNhdmVkIHRvIGZpbGUnKTtcbiAgICAgICAgcHJpbnRLZXlWYWx1ZSh7XG4gICAgICAgICAgJ091dHB1dCBGaWxlJzogb3V0cHV0RmlsZSxcbiAgICAgICAgICAnRmlsZSBTaXplJzogZm9ybWF0RmlsZVNpemUoZnMuc3RhdFN5bmMob3V0cHV0RmlsZSkuc2l6ZSksXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIOKUgOKUgCBPcHRpb25hbCBkZXBsb3kgKC0tZGVwbG95KSDilIDilIBcbiAgICAgICAgLy8gVGhlIHJlY29yZCBub3cgZXhpc3RzIGFuZCBpcyBhdXRob3JpdGF0aXZlLiBJZiB0aGUgZGVwbG95IGZhaWxzIHdlIEtFRVBcbiAgICAgICAgLy8gaXQgYW5kIHN1cmZhY2UgdGhlIGV4YWN0IHJldHJ5IHJhdGhlciB0aGFuIHJvbGxpbmcgYmFjayAobmV2ZXIgZmFsc2UtZ3JlZW4pLlxuICAgICAgICBpZiAob3B0aW9ucy5kZXBsb3kpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZygnJyk7XG4gICAgICAgICAgcHJpbnRTZWN0aW9uKCdEZXBsb3lpbmcgUGlwZWxpbmUnKTtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gRGVwbG95IHRvdWNoZXMgdGhlIEFXUyBTREsgKyB0aGUgQ0RLIHN5bnRoIHN1YnByb2Nlc3M7IHJlbGF4IFRMUyB0aGVcbiAgICAgICAgICAgIC8vIHNhbWUgd2F5IGBkZXBsb3lgIGRvZXMgKHJlZnVzZWQgaW4gcHJvZHVjdGlvbiBieSByZWxheFRsc0ZvckNsaSkuXG4gICAgICAgICAgICByZWxheFRsc0ZvckNsaShvcHRpb25zLnZlcmlmeVNzbCwgcHJpbnRXYXJuaW5nKTtcbiAgICAgICAgICAgIC8vIFRoZSBhc3luYyBjbGllbnQgYWRkcyAtLXN0b3JlLXRva2VucyAoU2VjcmV0cyBNYW5hZ2VyKSBzdXBwb3J0IGFuZFxuICAgICAgICAgICAgLy8gYmFja3MgQk9USCB0aGUgcHJvcHMgZmV0Y2ggYW5kIHRoZSByZWdpc3RyeSBjYWxsYmFjay5cbiAgICAgICAgICAgIGNvbnN0IGRlcGxveUNsaWVudCA9IGF3YWl0IGNyZWF0ZUF1dGhlbnRpY2F0ZWRDbGllbnRBc3luYyhvcHRpb25zKTtcbiAgICAgICAgICAgIGNvbnN0IGRlcGxveUNvbmZpZyA9IGRlcGxveUNsaWVudC5nZXRDb25maWcoKSBhcyBQbGF0Zm9ybURlcGxveUNvbmZpZztcbiAgICAgICAgICAgIC8vIFJlLWZldGNoIHRoZSBqdXN0LWNyZWF0ZWQgcGlwZWxpbmUgc28gcGx1Z2lucyBhcmUgcmVzb2x2ZWQgYW5kIHRoZVxuICAgICAgICAgICAgLy8gcmVnaXN0cnkgaG9zdCBpcyBiYWtlZCBFWEFDVExZIGFzIGBkZXBsb3kgLS1pZGAgZG9lcyDigJQgbm8gZHJpZnQuXG4gICAgICAgICAgICBjb25zdCBmZXRjaGVkID0gYXdhaXQgZmV0Y2hQaXBlbGluZVByb3BzKGRlcGxveUNsaWVudCwgcGlwZWxpbmUuaWQpO1xuICAgICAgICAgICAgYXdhaXQgcnVuRGVwbG95KHtcbiAgICAgICAgICAgICAgcGlwZWxpbmU6IGZldGNoZWQucGlwZWxpbmUsXG4gICAgICAgICAgICAgIHByb3BzV2l0aElkczogZmV0Y2hlZC5wcm9wc1dpdGhJZHMsXG4gICAgICAgICAgICAgIHByb2ZpbGU6IG9wdGlvbnMucHJvZmlsZSxcbiAgICAgICAgICAgICAgcmVnaW9uOiBvcHRpb25zLnJlZ2lvbixcbiAgICAgICAgICAgICAgcmVxdWlyZUFwcHJvdmFsOiBvcHRpb25zLnJlcXVpcmVBcHByb3ZhbCxcbiAgICAgICAgICAgICAgb3V0cHV0OiBvcHRpb25zLm91dHB1dCxcbiAgICAgICAgICAgICAgZGVidWc6IHByb2dyYW0ub3B0cygpLmRlYnVnLFxuICAgICAgICAgICAgICBleGVjdXRpb25JZCxcbiAgICAgICAgICAgICAgcGxhdGZvcm1DbGllbnQ6IGRlcGxveUNsaWVudCxcbiAgICAgICAgICAgICAgcGxhdGZvcm1QaXBlbGluZVVybDogZGVwbG95Q29uZmlnLmFwaS5waXBlbGluZVVybCxcbiAgICAgICAgICAgICAgcGxhdGZvcm1CYXNlVXJsOiBkZXBsb3lDb25maWcuYXBpLmJhc2VVcmwsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGNhdGNoIChkZXBsb3lFcnJvcikge1xuICAgICAgICAgICAgcHJpbnRFcnJvcignUGlwZWxpbmUgd2FzIGNyZWF0ZWQgYnV0IHRoZSBkZXBsb3kgZmFpbGVkJywge1xuICAgICAgICAgICAgICBwaXBlbGluZUlkOiBwaXBlbGluZS5pZCxcbiAgICAgICAgICAgICAgZXJyb3I6IGVycm9yTWVzc2FnZShkZXBsb3lFcnJvciksXG4gICAgICAgICAgICAgIHJldHJ5OiBgcGlwZWxpbmUtbWFuYWdlciBwaXBlbGluZSBkZXBsb3kgLS1pZCAke3BpcGVsaW5lLmlkfWAsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vIFJlLXRocm93IHNvIHRoZSBwcm9jZXNzIGV4aXRzIG5vbi16ZXJvLiBUaGUgcmVjb3JkIGlzIGludGVudGlvbmFsbHlcbiAgICAgICAgICAgIC8vIHJldGFpbmVkIOKAlCByZS1ydW4gdGhlIGRlcGxveSB3aXRoIHRoZSBjb21tYW5kIGFib3ZlLlxuICAgICAgICAgICAgdGhyb3cgZGVwbG95RXJyb3I7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gTmV4dCBzdGVwc1xuICAgICAgICBjb25zb2xlLmxvZygnJyk7XG4gICAgICAgIHByaW50U2VjdGlvbignTmV4dCBTdGVwcycpO1xuICAgICAgICBjb25zb2xlLmxvZyhkaW0oJ1lvdSBjYW4gbm93OicpKTtcbiAgICAgICAgaWYgKCFvcHRpb25zLmRlcGxveSkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGAgICR7Y3lhbign4oCiJyl9IERlcGxveTogJHtib2xkKGBkZXBsb3kgLS1pZCAke3BpcGVsaW5lLmlkfWApfWApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnNvbGUubG9nKGAgICR7Y3lhbign4oCiJyl9IFZpZXc6ICR7Ym9sZChgZ2V0LXBpcGVsaW5lIC0taWQgJHtwaXBlbGluZS5pZH1gKX1gKTtcbiAgICAgICAgY29uc29sZS5sb2coYCAgJHtjeWFuKCfigKInKX0gQVBJOiAke2NvbmZpZy5hcGkuYmFzZVVybH0ke2NvbmZpZy5hcGkucGlwZWxpbmVVcmx9LyR7cGlwZWxpbmUuaWR9YCk7XG4gICAgICAgIGNvbnNvbGUubG9nKCcnKTtcblxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaGFuZGxlRXJyb3IoZXJyb3IsIEVSUk9SX0NPREVTLkFQSV9SRVFVRVNULCB7XG4gICAgICAgICAgZGVidWc6IHByb2dyYW0ub3B0cygpLmRlYnVnLFxuICAgICAgICAgIGV4aXQ6IHRydWUsXG4gICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgY29tbWFuZDogJ2NyZWF0ZS1waXBlbGluZScsXG4gICAgICAgICAgICBleGVjdXRpb25JZCxcbiAgICAgICAgICAgIHByb2plY3Q6IG9wdGlvbnMucHJvamVjdCxcbiAgICAgICAgICAgIG9yZ2FuaXphdGlvbjogb3B0aW9ucy5vcmdhbml6YXRpb24sXG4gICAgICAgICAgICBmaWxlOiBvcHRpb25zLmZpbGUsXG4gICAgICAgICAgICB2ZXJpZnlTc2w6IG9wdGlvbnMudmVyaWZ5U3NsLFxuICAgICAgICAgICAgZHJ5UnVuOiBvcHRpb25zLmRyeVJ1bixcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbn0iXX0=
|
|
324
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLXBpcGVsaW5lLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1hbmRzL2NyZWF0ZS1waXBlbGluZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLE9BQU8sS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBQ3pCLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBQzdCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3BDLE9BQU8sR0FBRyxNQUFNLEtBQUssQ0FBQztBQUN0QixPQUFPLElBQUksTUFBTSxZQUFZLENBQUM7QUFDOUIsT0FBTyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsZ0JBQWdCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNuSCxPQUFPLEVBQStGLE1BQU0sbUJBQW1CLENBQUM7QUFDaEksT0FBTyxFQUFFLGtCQUFrQixFQUFFLGVBQWUsRUFBRSx5QkFBeUIsRUFBRSw4QkFBOEIsRUFBRSxjQUFjLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNoTSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDdEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsZUFBZSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDdEYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDakosT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDakUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7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QUFDLEtBQUssRUFBRSxXQUFXLENBQUMsV0FBVyxFQUFFO2dCQUMxQyxLQUFLLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLEtBQUs7Z0JBQzNCLElBQUksRUFBRSxJQUFJO2dCQUNWLE9BQU8sRUFBRTtvQkFDUCxPQUFPLEVBQUUsaUJBQWlCO29CQUMxQixXQUFXO29CQUNYLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTztvQkFDeEIsWUFBWSxFQUFFLE9BQU8sQ0FBQyxZQUFZO29CQUNsQyxJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUk7b0JBQ2xCLFNBQVMsRUFBRSxPQUFPLENBQUMsU0FBUztvQkFDNUIsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNO2lCQUN2QjthQUNGLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDLENBQUMsQ0FBQztBQUNQLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IGVycm9yTWVzc2FnZSB9IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL2FwaS1jb3JlJztcbmltcG9ydCB7IENvbW1hbmQgfSBmcm9tICdjb21tYW5kZXInO1xuaW1wb3J0IG9yYSBmcm9tICdvcmEnO1xuaW1wb3J0IHBpY28gZnJvbSAncGljb2NvbG9ycyc7XG5pbXBvcnQgeyBmb3JtYXREdXJhdGlvbiwgZm9ybWF0RmlsZVNpemUsIEZJTEVfU0laRV9MSU1JVFMsIGRlZmF1bHRQaXBlbGluZU5hbWUgfSBmcm9tICcuLi9jb25maWcvY2xpLmNvbnN0YW50cy5qcyc7XG5pbXBvcnQgeyB0eXBlIFBpcGVsaW5lLCB0eXBlIFBpcGVsaW5lUmVzcG9uc2UsIHR5cGUgQ3JlYXRlUGlwZWxpbmVSZXF1ZXN0LCB0eXBlIFBsYXRmb3JtRGVwbG95Q29uZmlnIH0gZnJvbSAnLi4vdHlwZXMvaW5kZXguanMnO1xuaW1wb3J0IHsgcHJpbnRDb21tYW5kSGVhZGVyLCBwcmludFNzbFdhcm5pbmcsIGNyZWF0ZUF1dGhlbnRpY2F0ZWRDbGllbnQsIGNyZWF0ZUF1dGhlbnRpY2F0ZWRDbGllbnRBc3luYywgd2l0aFNzbE9wdGlvbnMsIHdpdGhQcm9maWxlT3B0aW9uLCB3aXRoUmVnaW9uT3B0aW9uIH0gZnJvbSAnLi4vdXRpbHMvY29tbWFuZC11dGlscy5qcyc7XG5pbXBvcnQgeyBydW5EZXBsb3kgfSBmcm9tICcuLi91dGlscy9kZXBsb3ktcnVubmVyLmpzJztcbmltcG9ydCB7IEVSUk9SX0NPREVTLCBoYW5kbGVFcnJvciwgVmFsaWRhdGlvbkVycm9yIH0gZnJvbSAnLi4vdXRpbHMvZXJyb3ItaGFuZGxlci5qcyc7XG5pbXBvcnQgeyBlbnN1cmVPdXRwdXREaXJlY3RvcnksIHByaW50RXJyb3IsIHByaW50SW5mbywgcHJpbnRLZXlWYWx1ZSwgcHJpbnRTZWN0aW9uLCBwcmludFN1Y2Nlc3MsIHByaW50V2FybmluZyB9IGZyb20gJy4uL3V0aWxzL291dHB1dC11dGlscy5qcyc7XG5pbXBvcnQgeyBmZXRjaFBpcGVsaW5lUHJvcHMgfSBmcm9tICcuLi91dGlscy9waXBlbGluZS1jb25maWcuanMnO1xuaW1wb3J0IHsgZXh0cmFjdFNpbmdsZVJlc3BvbnNlIH0gZnJvbSAnLi4vdXRpbHMvcmVzcG9uc2UtdXRpbHMuanMnO1xuaW1wb3J0IHsgcmVsYXhUbHNGb3JDbGkgfSBmcm9tICcuLi91dGlscy90bHMuanMnO1xuXG5jb25zdCB7IGJvbGQsIGN5YW4sIGRpbSwgZ3JlZW4gfSA9IHBpY287XG5cbi8qKiBQYXJzZWQgYHBpcGVsaW5lIGNyZWF0ZWAgZmxhZ3MuICovXG5pbnRlcmZhY2UgQ3JlYXRlUGlwZWxpbmVPcHRpb25zIHtcbiAgZmlsZTogc3RyaW5nO1xuICBwcm9qZWN0Pzogc3RyaW5nO1xuICBvcmdhbml6YXRpb24/OiBzdHJpbmc7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHZpc2liaWxpdHk/OiBDcmVhdGVQaXBlbGluZVJlcXVlc3RbJ3Zpc2liaWxpdHknXTtcbiAgZGVmYXVsdD86IGJvb2xlYW47XG4gIGFjdGl2ZT86IGJvb2xlYW47XG4gIGRlcGxveT86IGJvb2xlYW47XG4gIHJlcXVpcmVBcHByb3ZhbDogc3RyaW5nO1xuICBvdXRwdXQ6IHN0cmluZztcbiAgcHJvZmlsZT86IHN0cmluZztcbiAgcmVnaW9uPzogc3RyaW5nO1xuICB2ZXJpZnlTc2w/OiBib29sZWFuO1xuICBkcnlSdW4/OiBib29sZWFuO1xuICBzdG9yZVRva2Vucz86IGJvb2xlYW47XG59XG5cbi8qKiBWYWxpZGF0ZSB0aGUgcHJvcHMgZmlsZSAoZXhpc3RzLCBzaXplIGNhcCkgYW5kIHBhcnNlIGl0IGFzIGEgSlNPTiBvYmplY3QuICovXG5mdW5jdGlvbiByZWFkUHJvcHNGaWxlKGZpbGU6IHN0cmluZyk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgY29uc29sZS5sb2coJycpO1xuICBwcmludFNlY3Rpb24oJ0ZpbGUgVmFsaWRhdGlvbicpO1xuXG4gIGlmICghZnMuZXhpc3RzU3luYyhmaWxlKSkge1xuICAgIHByaW50RXJyb3IoJ1Byb3BlcnRpZXMgZmlsZSBub3QgZm91bmQnLCB7IHBhdGg6IGZpbGUgfSk7XG4gICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihgRmlsZSBub3QgZm91bmQ6ICR7ZmlsZX1gLCAnZmlsZScpO1xuICB9XG5cbiAgY29uc3QgZmlsZUV4dCA9IHBhdGguZXh0bmFtZShmaWxlKS50b0xvd2VyQ2FzZSgpO1xuICBpZiAoZmlsZUV4dCAhPT0gJy5qc29uJykge1xuICAgIHByaW50V2FybmluZygnRmlsZSBleHRlbnNpb24gaXMgbm90IC5qc29uJywgeyBleHRlbnNpb246IGZpbGVFeHQgfSk7XG4gIH1cblxuICBjb25zdCBmaWxlU3RhdHMgPSBmcy5zdGF0U3luYyhmaWxlKTtcbiAgaWYgKGZpbGVTdGF0cy5zaXplID4gRklMRV9TSVpFX0xJTUlUUy5QSVBFTElORV9QUk9QUykge1xuICAgIHByaW50RXJyb3IoJ1Byb3BlcnRpZXMgZmlsZSBpcyB0b28gbGFyZ2UnLCB7XG4gICAgICBzaXplOiBmb3JtYXRGaWxlU2l6ZShmaWxlU3RhdHMuc2l6ZSksXG4gICAgICBsaW1pdDogZm9ybWF0RmlsZVNpemUoRklMRV9TSVpFX0xJTUlUUy5QSVBFTElORV9QUk9QUyksXG4gICAgfSk7XG4gICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcignUHJvcGVydGllcyBmaWxlIGV4Y2VlZHMgc2l6ZSBsaW1pdCcsICdmaWxlJyk7XG4gIH1cblxuICBwcmludFN1Y2Nlc3MoJ0ZpbGUgdmFsaWRhdGlvbiBwYXNzZWQnKTtcbiAgcHJpbnRLZXlWYWx1ZSh7XG4gICAgJ0ZpbGUgUGF0aCc6IGZpbGUsXG4gICAgJ0ZpbGUgU2l6ZSc6IGZvcm1hdEZpbGVTaXplKGZpbGVTdGF0cy5zaXplKSxcbiAgICAnRXh0ZW5zaW9uJzogZmlsZUV4dCxcbiAgfSk7XG5cbiAgY29uc29sZS5sb2coJycpO1xuICBwcmludEluZm8oJ1JlYWRpbmcgcGlwZWxpbmUgcHJvcGVydGllcy4uLicpO1xuXG4gIGxldCBwcm9wczogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIHRyeSB7XG4gICAgcHJvcHMgPSBKU09OLnBhcnNlKGZzLnJlYWRGaWxlU3luYyhmaWxlLCAndXRmLTgnKSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcHJpbnRFcnJvcignSW52YWxpZCBKU09OIGluIHByb3BlcnRpZXMgZmlsZScsIHtcbiAgICAgIGVycm9yOiBlcnJvck1lc3NhZ2UoZXJyb3IpLFxuICAgICAgaGludDogJ0Vuc3VyZSB0aGUgZmlsZSBjb250YWlucyB2YWxpZCBKU09OIHN5bnRheCcsXG4gICAgfSk7XG4gICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcignUHJvcGVydGllcyBmaWxlIG11c3QgY29udGFpbiB2YWxpZCBKU09OJywgJ2ZpbGUnKTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgcHJvcHMgIT09ICdvYmplY3QnIHx8IHByb3BzID09PSBudWxsKSB7XG4gICAgcHJpbnRFcnJvcignSW52YWxpZCBwcm9wZXJ0aWVzIGZvcm1hdCcsIHtcbiAgICAgIHR5cGU6IHR5cGVvZiBwcm9wcyxcbiAgICAgIGhpbnQ6ICdQcm9wZXJ0aWVzIG11c3QgYmUgYSBKU09OIG9iamVjdCcsXG4gICAgfSk7XG4gICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcignUHJvcGVydGllcyBtdXN0IGJlIGEgdmFsaWQgb2JqZWN0JywgJ2ZpbGUnKTtcbiAgfVxuXG4gIGNvbnN0IHByb3BDb3VudCA9IE9iamVjdC5rZXlzKHByb3BzKS5sZW5ndGg7XG4gIHByaW50U3VjY2VzcygnUHJvcGVydGllcyBwYXJzZWQgc3VjY2Vzc2Z1bGx5Jyk7XG4gIHByaW50S2V5VmFsdWUoe1xuICAgICdUb3RhbCBLZXlzJzogcHJvcENvdW50LnRvU3RyaW5nKCksXG4gICAgJ1NhbXBsZSBLZXlzJzogT2JqZWN0LmtleXMocHJvcHMpLnNsaWNlKDAsIDUpLmpvaW4oJywgJykgKyAocHJvcENvdW50ID4gNSA/ICcuLi4nIDogJycpLFxuICB9KTtcbiAgaWYgKHByb3BDb3VudCA9PT0gMCkge1xuICAgIHByaW50V2FybmluZygnUHJvcGVydGllcyBvYmplY3QgaXMgZW1wdHkgLSBwaXBlbGluZSB3aWxsIGhhdmUgbm8gY29uZmlndXJhdGlvbicpO1xuICB9XG4gIHJldHVybiBwcm9wcztcbn1cblxuLyoqXG4gKiBCdWlsZCB0aGUgY3JlYXRlIHJlcXVlc3QuIFByb2plY3QgJiBvcmdhbml6YXRpb24gcHJlZmVyIHRoZSBDTEkgZmxhZ3MgYW5kXG4gKiBmYWxsIGJhY2sgdG8gdmFsdWVzIGVtYmVkZGVkIGluIHRoZSBwcm9wcyBmaWxlIChidWlsZGVyUHJvcHMpLlxuICovXG5mdW5jdGlvbiBidWlsZENyZWF0ZVBheWxvYWQob3B0aW9uczogQ3JlYXRlUGlwZWxpbmVPcHRpb25zLCBwcm9wczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBDcmVhdGVQaXBlbGluZVJlcXVlc3Qge1xuICBjb25zdCByZXNvbHZlZFByb2plY3QgPSBvcHRpb25zLnByb2plY3QgPz8gKHByb3BzLnByb2plY3QgYXMgc3RyaW5nIHwgdW5kZWZpbmVkKTtcbiAgY29uc3QgcmVzb2x2ZWRPcmdhbml6YXRpb24gPSBvcHRpb25zLm9yZ2FuaXphdGlvbiA/PyAocHJvcHMub3JnYW5pemF0aW9uIGFzIHN0cmluZyB8IHVuZGVmaW5lZCk7XG5cbiAgaWYgKCFyZXNvbHZlZFByb2plY3QpIHtcbiAgICBwcmludEVycm9yKCdQcm9qZWN0IGlzIHJlcXVpcmVkJywge1xuICAgICAgaGludDogJ1Byb3ZpZGUgLXAvLS1wcm9qZWN0IGZsYWcgb3IgaW5jbHVkZSBcInByb2plY3RcIiBpbiB0aGUgcHJvcHMgZmlsZScsXG4gICAgfSk7XG4gICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcignUHJvamVjdCBpcyByZXF1aXJlZCcsICdwcm9qZWN0Jyk7XG4gIH1cbiAgaWYgKCFyZXNvbHZlZE9yZ2FuaXphdGlvbikge1xuICAgIHByaW50RXJyb3IoJ09yZ2FuaXphdGlvbiBpcyByZXF1aXJlZCcsIHtcbiAgICAgIGhpbnQ6ICdQcm92aWRlIC1vLy0tb3JnYW5pemF0aW9uIGZsYWcgb3IgaW5jbHVkZSBcIm9yZ2FuaXphdGlvblwiIGluIHRoZSBwcm9wcyBmaWxlJyxcbiAgICB9KTtcbiAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKCdPcmdhbml6YXRpb24gaXMgcmVxdWlyZWQnLCAnb3JnYW5pemF0aW9uJyk7XG4gIH1cblxuICAvLyBSZXNvbHZlIHBpcGVsaW5lTmFtZSB3aXRoIHRoZSBzaGFyZWQgZGVmYXVsdCAobWlycm9ycyBwaXBlbGluZS1jb3JlJ3NcbiAgLy8gcGlwZWxpbmUtY29uZmlndXJhdGlvbi50cykgc28gY3JlYXRlICsgcmVnaXN0cnkgKyBDREsgYWxsIGFncmVlLlxuICBjb25zdCByZXNvbHZlZFBpcGVsaW5lTmFtZSA9IG9wdGlvbnMubmFtZVxuICAgID8/IChwcm9wcy5waXBlbGluZU5hbWUgYXMgc3RyaW5nIHwgdW5kZWZpbmVkKVxuICAgID8/IGRlZmF1bHRQaXBlbGluZU5hbWUocmVzb2x2ZWRPcmdhbml6YXRpb24sIHJlc29sdmVkUHJvamVjdCk7XG5cbiAgY29uc3QgcGF5bG9hZDogQ3JlYXRlUGlwZWxpbmVSZXF1ZXN0ID0ge1xuICAgIHByb2plY3Q6IHJlc29sdmVkUHJvamVjdCxcbiAgICBvcmdhbml6YXRpb246IHJlc29sdmVkT3JnYW5pemF0aW9uLFxuICAgIHBpcGVsaW5lTmFtZTogcmVzb2x2ZWRQaXBlbGluZU5hbWUsXG4gICAgcHJvcHMsXG4gIH07XG4gIGlmIChvcHRpb25zLnZpc2liaWxpdHkpIHBheWxvYWQudmlzaWJpbGl0eSA9IG9wdGlvbnMudmlzaWJpbGl0eTtcbiAgaWYgKG9wdGlvbnMuZGVmYXVsdCAhPT0gdW5kZWZpbmVkKSBwYXlsb2FkLmlzRGVmYXVsdCA9IG9wdGlvbnMuZGVmYXVsdDtcbiAgaWYgKG9wdGlvbnMuYWN0aXZlICE9PSB1bmRlZmluZWQpIHBheWxvYWQuaXNBY3RpdmUgPSBvcHRpb25zLmFjdGl2ZTtcbiAgcmV0dXJuIHBheWxvYWQ7XG59XG5cbi8qKiBQcmludCB0aGUgcmVxdWVzdCB0aGF0IHdvdWxkIGJlIHNlbnQsIGZvciBgLS1kcnktcnVuYC4gKi9cbmZ1bmN0aW9uIHByaW50RHJ5UnVuKG9wdGlvbnM6IENyZWF0ZVBpcGVsaW5lT3B0aW9ucywgcGF5bG9hZDogQ3JlYXRlUGlwZWxpbmVSZXF1ZXN0KTogdm9pZCB7XG4gIGNvbnNvbGUubG9nKCcnKTtcbiAgcHJpbnRTZWN0aW9uKCdEcnkgUnVuIC0gUmVxdWVzdCBQcmV2aWV3Jyk7XG4gIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KHBheWxvYWQsIG51bGwsIDIpKTtcbiAgY29uc29sZS5sb2coJycpO1xuICBwcmludFN1Y2Nlc3MoJ+KckyBWYWxpZGF0aW9uIGNvbXBsZXRlIC0gbm8gcGlwZWxpbmUgY3JlYXRlZCAoZHJ5IHJ1biBtb2RlKScpO1xuICBjb25zb2xlLmxvZygnJyk7XG4gIGlmIChvcHRpb25zLmRlcGxveSkge1xuICAgIHByaW50SW5mbygnV2l0aCAtLWRlcGxveSwgdGhlIHBpcGVsaW5lIHdvdWxkIGJlIGRlcGxveWVkIHZpYSBDREsgYWZ0ZXIgY3JlYXRpb24nLCB7XG4gICAgICBwcm9maWxlOiBvcHRpb25zLnByb2ZpbGUgfHwgJyhkZWZhdWx0KScsXG4gICAgICByZWdpb246IG9wdGlvbnMucmVnaW9uIHx8ICcoZGVmYXVsdCknLFxuICAgICAgcmVxdWlyZUFwcHJvdmFsOiBvcHRpb25zLnJlcXVpcmVBcHByb3ZhbCxcbiAgICB9KTtcbiAgfVxuICBwcmludEluZm8oJ1RvIGNyZWF0ZSB0aGUgcGlwZWxpbmUsIHJ1biB0aGUgY29tbWFuZCB3aXRob3V0IC0tZHJ5LXJ1bicpO1xufVxuXG4vKiogUHJpbnQgdGhlIGNyZWF0ZWQgcGlwZWxpbmUgYW5kIHNhdmUgaXQgdG8gYC4vb3V0cHV0L3BpcGVsaW5lLTxpZD4uanNvbmAuICovXG5mdW5jdGlvbiByZXBvcnRDcmVhdGVkUGlwZWxpbmUocGlwZWxpbmU6IFBpcGVsaW5lLCBleGVjdXRpb25JZDogc3RyaW5nLCByZXF1ZXN0RHVyYXRpb246IG51bWJlciwgc3RhcnRUaW1lOiBudW1iZXIpOiB2b2lkIHtcbiAgY29uc29sZS5sb2coJycpO1xuICBwcmludFNlY3Rpb24oJ+KckyBQaXBlbGluZSBDcmVhdGVkIFN1Y2Nlc3NmdWxseScpO1xuICBwcmludEtleVZhbHVlKHtcbiAgICAnUGlwZWxpbmUgSUQnOiBncmVlbihib2xkKHBpcGVsaW5lLmlkKSksXG4gICAgJ1Byb2plY3QnOiBwaXBlbGluZS5wcm9qZWN0LFxuICAgICdPcmdhbml6YXRpb24nOiBwaXBlbGluZS5vcmdhbml6YXRpb24sXG4gICAgJ05hbWUnOiBwaXBlbGluZS5waXBlbGluZU5hbWUgfHwgJyhub3Qgc2V0KScsXG4gICAgJ1Zpc2liaWxpdHknOiBwaXBlbGluZS52aXNpYmlsaXR5IHx8ICdvcmcnLFxuICAgICdEZWZhdWx0JzogcGlwZWxpbmUuaXNEZWZhdWx0ID8gJ1llcycgOiAnTm8nLFxuICAgICdBY3RpdmUnOiBwaXBlbGluZS5pc0FjdGl2ZSA/ICdZZXMnIDogJ05vJyxcbiAgICAnUHJvcGVydGllcyc6IHBpcGVsaW5lLnByb3BzID8gYCR7T2JqZWN0LmtleXMocGlwZWxpbmUucHJvcHMpLmxlbmd0aH0ga2V5c2AgOiAnKG5vdCByZXR1cm5lZCknLFxuICB9KTtcblxuICBpZiAocGlwZWxpbmUuY3JlYXRlZEF0KSB7XG4gICAgY29uc29sZS5sb2coJycpO1xuICAgIHByaW50S2V5VmFsdWUoeyAnQ3JlYXRlZCBBdCc6IHBpcGVsaW5lLmNyZWF0ZWRBdCB9KTtcbiAgfVxuXG4gIGNvbnNvbGUubG9nKCcnKTtcbiAgcHJpbnRLZXlWYWx1ZSh7XG4gICAgJ0V4ZWN1dGlvbiBJRCc6IGV4ZWN1dGlvbklkLFxuICAgICdSZXF1ZXN0IER1cmF0aW9uJzogZm9ybWF0RHVyYXRpb24ocmVxdWVzdER1cmF0aW9uKSxcbiAgICAnVG90YWwgRHVyYXRpb24nOiBmb3JtYXREdXJhdGlvbihEYXRlLm5vdygpIC0gc3RhcnRUaW1lKSxcbiAgfSk7XG5cbiAgY29uc3Qgb3V0cHV0RGlyID0gJy4vb3V0cHV0JztcbiAgZW5zdXJlT3V0cHV0RGlyZWN0b3J5KG91dHB1dERpcik7XG4gIGNvbnN0IG91dHB1dEZpbGUgPSBwYXRoLmpvaW4ob3V0cHV0RGlyLCBgcGlwZWxpbmUtJHtwaXBlbGluZS5pZH0uanNvbmApO1xuICBmcy53cml0ZUZpbGVTeW5jKG91dHB1dEZpbGUsIEpTT04uc3RyaW5naWZ5KHBpcGVsaW5lLCBudWxsLCAyKSk7XG5cbiAgY29uc29sZS5sb2coJycpO1xuICBwcmludFN1Y2Nlc3MoJ1BpcGVsaW5lIGRldGFpbHMgc2F2ZWQgdG8gZmlsZScpO1xuICBwcmludEtleVZhbHVlKHtcbiAgICAnT3V0cHV0IEZpbGUnOiBvdXRwdXRGaWxlLFxuICAgICdGaWxlIFNpemUnOiBmb3JtYXRGaWxlU2l6ZShmcy5zdGF0U3luYyhvdXRwdXRGaWxlKS5zaXplKSxcbiAgfSk7XG59XG5cbi8qKlxuICogYC0tZGVwbG95YDogcnVuIHRoZSBzYW1lIENESyBkZXBsb3kgKyBBUk4gcmVnaXN0cmF0aW9uIGFzIGBwaXBlbGluZSBkZXBsb3lcbiAqIC0taWRgLiBUaGUgcmVjb3JkIGFscmVhZHkgZXhpc3RzIGFuZCBpcyBhdXRob3JpdGF0aXZlOiBpZiB0aGUgZGVwbG95IGZhaWxzIGl0XG4gKiBpcyBLRVBUIGFuZCB0aGUgZXhhY3QgcmV0cnkgaXMgc3VyZmFjZWQgcmF0aGVyIHRoYW4gcm9sbGVkIGJhY2sgKG5ldmVyXG4gKiBmYWxzZS1ncmVlbikuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGRlcGxveUNyZWF0ZWRQaXBlbGluZShcbiAgb3B0aW9uczogQ3JlYXRlUGlwZWxpbmVPcHRpb25zLFxuICBwaXBlbGluZUlkOiBzdHJpbmcsXG4gIGV4ZWN1dGlvbklkOiBzdHJpbmcsXG4gIGRlYnVnOiBib29sZWFuIHwgdW5kZWZpbmVkLFxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnNvbGUubG9nKCcnKTtcbiAgcHJpbnRTZWN0aW9uKCdEZXBsb3lpbmcgUGlwZWxpbmUnKTtcbiAgdHJ5IHtcbiAgICAvLyBEZXBsb3kgdG91Y2hlcyB0aGUgQVdTIFNESyArIHRoZSBDREsgc3ludGggc3VicHJvY2VzczsgcmVsYXggVExTIHRoZVxuICAgIC8vIHNhbWUgd2F5IGBkZXBsb3lgIGRvZXMgKHJlZnVzZWQgaW4gcHJvZHVjdGlvbiBieSByZWxheFRsc0ZvckNsaSkuXG4gICAgcmVsYXhUbHNGb3JDbGkob3B0aW9ucy52ZXJpZnlTc2wsIHByaW50V2FybmluZyk7XG4gICAgLy8gVGhlIGFzeW5jIGNsaWVudCBhZGRzIC0tc3RvcmUtdG9rZW5zIChTZWNyZXRzIE1hbmFnZXIpIHN1cHBvcnQgYW5kXG4gICAgLy8gYmFja3MgQk9USCB0aGUgcHJvcHMgZmV0Y2ggYW5kIHRoZSByZWdpc3RyeSBjYWxsYmFjay5cbiAgICBjb25zdCBkZXBsb3lDbGllbnQgPSBhd2FpdCBjcmVhdGVBdXRoZW50aWNhdGVkQ2xpZW50QXN5bmMob3B0aW9ucyk7XG4gICAgY29uc3QgZGVwbG95Q29uZmlnID0gZGVwbG95Q2xpZW50LmdldENvbmZpZygpIGFzIFBsYXRmb3JtRGVwbG95Q29uZmlnO1xuICAgIC8vIFJlLWZldGNoIHRoZSBqdXN0LWNyZWF0ZWQgcGlwZWxpbmUgc28gcGx1Z2lucyBhcmUgcmVzb2x2ZWQgYW5kIHRoZVxuICAgIC8vIHJlZ2lzdHJ5IGhvc3QgaXMgYmFrZWQgRVhBQ1RMWSBhcyBgZGVwbG95IC0taWRgIGRvZXMg4oCUIG5vIGRyaWZ0LlxuICAgIGNvbnN0IGZldGNoZWQgPSBhd2FpdCBmZXRjaFBpcGVsaW5lUHJvcHMoZGVwbG95Q2xpZW50LCBwaXBlbGluZUlkKTtcbiAgICBhd2FpdCBydW5EZXBsb3koe1xuICAgICAgcGlwZWxpbmU6IGZldGNoZWQucGlwZWxpbmUsXG4gICAgICBwcm9wc1dpdGhJZHM6IGZldGNoZWQucHJvcHNXaXRoSWRzLFxuICAgICAgcHJvZmlsZTogb3B0aW9ucy5wcm9maWxlLFxuICAgICAgcmVnaW9uOiBvcHRpb25zLnJlZ2lvbixcbiAgICAgIHJlcXVpcmVBcHByb3ZhbDogb3B0aW9ucy5yZXF1aXJlQXBwcm92YWwsXG4gICAgICBvdXRwdXQ6IG9wdGlvbnMub3V0cHV0LFxuICAgICAgZGVidWcsXG4gICAgICBleGVjdXRpb25JZCxcbiAgICAgIHBsYXRmb3JtQ2xpZW50OiBkZXBsb3lDbGllbnQsXG4gICAgICBwbGF0Zm9ybVBpcGVsaW5lVXJsOiBkZXBsb3lDb25maWcuYXBpLnBpcGVsaW5lVXJsLFxuICAgICAgcGxhdGZvcm1CYXNlVXJsOiBkZXBsb3lDb25maWcuYXBpLmJhc2VVcmwsXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGRlcGxveUVycm9yKSB7XG4gICAgcHJpbnRFcnJvcignUGlwZWxpbmUgd2FzIGNyZWF0ZWQgYnV0IHRoZSBkZXBsb3kgZmFpbGVkJywge1xuICAgICAgcGlwZWxpbmVJZCxcbiAgICAgIGVycm9yOiBlcnJvck1lc3NhZ2UoZGVwbG95RXJyb3IpLFxuICAgICAgcmV0cnk6IGBwaXBlbGluZS1tYW5hZ2VyIHBpcGVsaW5lIGRlcGxveSAtLWlkICR7cGlwZWxpbmVJZH1gLFxuICAgIH0pO1xuICAgIC8vIFJlLXRocm93IHNvIHRoZSBwcm9jZXNzIGV4aXRzIG5vbi16ZXJvLiBUaGUgcmVjb3JkIGlzIGludGVudGlvbmFsbHlcbiAgICAvLyByZXRhaW5lZCDigJQgcmUtcnVuIHRoZSBkZXBsb3kgd2l0aCB0aGUgY29tbWFuZCBhYm92ZS5cbiAgICB0aHJvdyBkZXBsb3lFcnJvcjtcbiAgfVxufVxuXG4vKipcbiAqIFJlZ2lzdGVycyB0aGUgYGNyZWF0ZS1waXBlbGluZWAgY29tbWFuZCB3aXRoIHRoZSBDTEkgcHJvZ3JhbS5cbiAqXG4gKiBBY2NlcHRzIGEgcGlwZWxpbmUgcHJvcGVydGllcyBKU09OIGZpbGUsIHZhbGlkYXRlcyBpdCwgcmVzb2x2ZXNcbiAqIHByb2plY3Qvb3JnYW5pemF0aW9uIGZyb20gQ0xJIGZsYWdzIG9yIHRoZSBwcm9wcyBmaWxlLCBhbmRcbiAqIGNyZWF0ZXMgdGhlIHBpcGVsaW5lIHZpYSB0aGUgcGxhdGZvcm0gQVBJLlxuICpcbiAqIEBwYXJhbSBwcm9ncmFtIC0gVGhlIHJvb3QgQ29tbWFuZGVyIHByb2dyYW0gaW5zdGFuY2UgdG8gYXR0YWNoIHRoZSBjb21tYW5kIHRvLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUGlwZWxpbmUocHJvZ3JhbTogQ29tbWFuZCk6IHZvaWQge1xuICB3aXRoU3NsT3B0aW9ucyhcbiAgICB3aXRoUmVnaW9uT3B0aW9uKFxuICAgICAgd2l0aFByb2ZpbGVPcHRpb24ocHJvZ3JhbVxuICAgICAgICAuY29tbWFuZCgnY3JlYXRlJylcbiAgICAgICAgLmRlc2NyaXB0aW9uKCdDcmVhdGUgYSBuZXcgcGlwZWxpbmUg4oCUIGFuZCBvcHRpb25hbGx5IGRlcGxveSBpdCB3aXRoIC0tZGVwbG95JylcbiAgICAgICAgLnJlcXVpcmVkT3B0aW9uKCctZiwgLS1maWxlIDxmaWxlPicsICdQYXRoIHRvIHBpcGVsaW5lIHByb3BlcnRpZXMgSlNPTiBmaWxlJylcbiAgICAgICAgLm9wdGlvbignLXAsIC0tcHJvamVjdCA8cHJvamVjdD4nLCAnUHJvamVjdCBuYW1lIChmYWxscyBiYWNrIHRvIHZhbHVlIGluIHByb3BzIGZpbGUpJylcbiAgICAgICAgLm9wdGlvbignLW8sIC0tb3JnYW5pemF0aW9uIDxvcmdhbml6YXRpb24+JywgJ09yZ2FuaXphdGlvbiBuYW1lIChmYWxscyBiYWNrIHRvIHZhbHVlIGluIHByb3BzIGZpbGUpJylcbiAgICAgICAgLm9wdGlvbignLW4sIC0tbmFtZSA8bmFtZT4nLCAnUGlwZWxpbmUgbmFtZScpXG4gICAgICAgIC5vcHRpb24oJy1hLCAtLXZpc2liaWxpdHkgPHJ1bmc+JywgJ1NoYXJpbmcgcnVuZyAocHJpdmF0ZXxvcmd8cHVibGljKS4gUGlwZWxpbmVzIGRlZmF1bHQgdG8gb3JnIOKAlCBhIHRlYW0gYXNzZXQgaXMgdmlzaWJsZSB0byB0aGUgdGVhbS4nLCAnb3JnJylcbiAgICAgICAgLm9wdGlvbignLS1kZWZhdWx0JywgJ1NldCBhcyBkZWZhdWx0IHBpcGVsaW5lJywgZmFsc2UpXG4gICAgICAgIC5vcHRpb24oJy0tYWN0aXZlJywgJ1NldCBwaXBlbGluZSBhcyBhY3RpdmUnLCB0cnVlKVxuICAgICAgICAub3B0aW9uKCctLW5vLWFjdGl2ZScsICdDcmVhdGUgdGhlIHBpcGVsaW5lIGFzIGluYWN0aXZlJylcbiAgICAgICAgLy8gLS1kZXBsb3k6IGFmdGVyIGNyZWF0aW5nIHRoZSByZWNvcmQsIHJ1biB0aGUgc2FtZSBDREsgZGVwbG95ICsgQVJOXG4gICAgICAgIC8vIHJlZ2lzdHJhdGlvbiBhcyBgcGlwZWxpbmUgZGVwbG95IC0taWRgIChzaGFyZWQgcnVuRGVwbG95KS4gVGhlIGZsYWdzXG4gICAgICAgIC8vIGJlbG93IGFwcGx5IG9ubHkgd2l0aCAtLWRlcGxveS5cbiAgICAgICAgLm9wdGlvbignLS1kZXBsb3knLCAnRGVwbG95IHRoZSBwaXBlbGluZSB3aXRoIEFXUyBDREsgaW1tZWRpYXRlbHkgYWZ0ZXIgY3JlYXRpbmcgaXQnLCBmYWxzZSlcbiAgICAgICAgLm9wdGlvbignLS1yZXF1aXJlLWFwcHJvdmFsIDxhcHByb3ZhbD4nLCAnRGVwbG95IGFwcHJvdmFsIGxldmVsOiBuZXZlcnxhbnktY2hhbmdlfGJyb2FkZW5pbmcgKHdpdGggLS1kZXBsb3kpJywgJ25ldmVyJylcbiAgICAgICAgLm9wdGlvbignLS1vdXRwdXQgPGRpcj4nLCAnQ0RLIG91dHB1dCBkaXJlY3RvcnkgKHdpdGggLS1kZXBsb3kpJywgJ2Nkay5vdXQnKVxuICAgICAgICAub3B0aW9uKCctLXN0b3JlLXRva2VucycsICdEZXBsb3kgYXV0aCB2aWEgQVdTIFNlY3JldHMgTWFuYWdlciB0b2tlbiAod2l0aCAtLWRlcGxveTsgcmVxdWlyZXMgUExBVEZPUk1fU0VDUkVUX05BTUUpJywgZmFsc2UpKSxcbiAgICApLFxuICApXG4gICAgLm9wdGlvbignLS1kcnktcnVuJywgJ1ZhbGlkYXRlIGlucHV0cyB3aXRob3V0IGNyZWF0aW5nIHBpcGVsaW5lJywgZmFsc2UpXG4gICAgLmFjdGlvbihhc3luYyAob3B0aW9uczogQ3JlYXRlUGlwZWxpbmVPcHRpb25zKSA9PiB7XG4gICAgICBjb25zdCBleGVjdXRpb25JZCA9IHByaW50Q29tbWFuZEhlYWRlcignQ3JlYXRlIFBpcGVsaW5lJywgJ0NyZWF0aW5nIFBpcGVsaW5lJyk7XG4gICAgICBjb25zdCBzdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuXG4gICAgICB0cnkge1xuXG4gICAgICAgIC8vIERpc3BsYXkgcGFyYW1ldGVyc1xuICAgICAgICBwcmludEluZm8oJ0NvbmZpZ3VyYXRpb24nKTtcbiAgICAgICAgcHJpbnRLZXlWYWx1ZSh7XG4gICAgICAgICAgJ1Byb2plY3QnOiBvcHRpb25zLnByb2plY3QgfHwgJyhmcm9tIHByb3BzIGZpbGUpJyxcbiAgICAgICAgICAnT3JnYW5pemF0aW9uJzogb3B0aW9ucy5vcmdhbml6YXRpb24gfHwgJyhmcm9tIHByb3BzIGZpbGUpJyxcbiAgICAgICAgICAnTmFtZSc6IG9wdGlvbnMubmFtZSB8fCAnKG5vdCBzZXQpJyxcbiAgICAgICAgICAnVmlzaWJpbGl0eSc6IG9wdGlvbnMudmlzaWJpbGl0eSxcbiAgICAgICAgICAnRGVmYXVsdCBQaXBlbGluZSc6IG9wdGlvbnMuZGVmYXVsdCA/ICdZZXMnIDogJ05vJyxcbiAgICAgICAgICAnQWN0aXZlJzogb3B0aW9ucy5hY3RpdmUgPyAnWWVzJyA6ICdObycsXG4gICAgICAgICAgJ0RlcGxveSBBZnRlciBDcmVhdGUnOiBvcHRpb25zLmRlcGxveSA/IGBZZXMgKHByb2ZpbGU6ICR7b3B0aW9ucy5wcm9maWxlIHx8ICdkZWZhdWx0J30pYCA6ICdObycsXG4gICAgICAgICAgJ1Byb3BlcnRpZXMgRmlsZSc6IG9wdGlvbnMuZmlsZSxcbiAgICAgICAgICAnU1NMIFZlcmlmaWNhdGlvbic6IG9wdGlvbnMudmVyaWZ5U3NsID09PSBmYWxzZSA/ICdEaXNhYmxlZCcgOiAnRW5hYmxlZCcsXG4gICAgICAgICAgJ0RyeSBSdW4nOiBvcHRpb25zLmRyeVJ1biA/ICdZZXMnIDogJ05vJyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gU2VjdXJpdHkgd2FybmluZyBmb3IgU1NMIHZlcmlmaWNhdGlvbiBkaXNhYmxlZFxuICAgICAgICBwcmludFNzbFdhcm5pbmcob3B0aW9ucy52ZXJpZnlTc2wpO1xuXG4gICAgICAgIGNvbnN0IHByb3BzID0gcmVhZFByb3BzRmlsZShvcHRpb25zLmZpbGUpO1xuICAgICAgICBjb25zdCBwYXlsb2FkID0gYnVpbGRDcmVhdGVQYXlsb2FkKG9wdGlvbnMsIHByb3BzKTtcblxuICAgICAgICBpZiAob3B0aW9ucy5kcnlSdW4pIHtcbiAgICAgICAgICBwcmludERyeVJ1bihvcHRpb25zLCBwYXlsb2FkKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDcmVhdGUgYXV0aGVudGljYXRlZCBBUEkgY2xpZW50XG4gICAgICAgIGNvbnN0IGNsaWVudCA9IGNyZWF0ZUF1dGhlbnRpY2F0ZWRDbGllbnQob3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IGNsaWVudC5nZXRDb25maWcoKTtcblxuICAgICAgICAvLyBDcmVhdGUgcGlwZWxpbmVcbiAgICAgICAgY29uc29sZS5sb2coJycpO1xuICAgICAgICBwcmludFNlY3Rpb24oJ0NyZWF0aW5nIFBpcGVsaW5lJyk7XG5cbiAgICAgICAgY29uc3Qgc3Bpbm5lciA9IG9yYSgnQ3JlYXRpbmcgcGlwZWxpbmUuLi4nKS5zdGFydCgpO1xuICAgICAgICBsZXQgcmF3UmVzcG9uc2U6IFBpcGVsaW5lUmVzcG9uc2U7XG4gICAgICAgIGxldCByZXF1ZXN0RHVyYXRpb246IG51bWJlcjtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCByZXF1ZXN0U3RhcnQgPSBEYXRlLm5vdygpO1xuICAgICAgICAgIHJhd1Jlc3BvbnNlID0gYXdhaXQgY2xpZW50LnBvc3Q8UGlwZWxpbmVSZXNwb25zZT4oXG4gICAgICAgICAgICBjb25maWcuYXBpLnBpcGVsaW5lVXJsLFxuICAgICAgICAgICAgcGF5bG9hZCxcbiAgICAgICAgICApO1xuICAgICAgICAgIHJlcXVlc3REdXJhdGlvbiA9IERhdGUubm93KCkgLSByZXF1ZXN0U3RhcnQ7XG4gICAgICAgICAgc3Bpbm5lci5zdWNjZWVkKCdQaXBlbGluZSBjcmVhdGVkJyk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgc3Bpbm5lci5mYWlsKCdQaXBlbGluZSBjcmVhdGlvbiBmYWlsZWQnKTtcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHBpcGVsaW5lID0gZXh0cmFjdFNpbmdsZVJlc3BvbnNlPFBpcGVsaW5lPihyYXdSZXNwb25zZSwgJ3BpcGVsaW5lJywgJ2lkJyk7XG5cbiAgICAgICAgaWYgKCFwaXBlbGluZT8uaWQpIHtcbiAgICAgICAgICBwcmludEVycm9yKCdJbnZhbGlkIHBpcGVsaW5lIHJlc3BvbnNlJywge1xuICAgICAgICAgICAgcmVzcG9uc2VLZXlzOiByYXdSZXNwb25zZSA/IE9iamVjdC5rZXlzKHJhd1Jlc3BvbnNlKSA6ICcobnVsbCknLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUGlwZWxpbmUgY3JlYXRpb24gZmFpbGVkIC0gbm8gdmFsaWQgcGlwZWxpbmUgZGF0YSByZWNlaXZlZCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVwb3J0Q3JlYXRlZFBpcGVsaW5lKHBpcGVsaW5lLCBleGVjdXRpb25JZCwgcmVxdWVzdER1cmF0aW9uLCBzdGFydFRpbWUpO1xuXG4gICAgICAgIGlmIChvcHRpb25zLmRlcGxveSkge1xuICAgICAgICAgIGF3YWl0IGRlcGxveUNyZWF0ZWRQaXBlbGluZShvcHRpb25zLCBwaXBlbGluZS5pZCwgZXhlY3V0aW9uSWQsIHByb2dyYW0ub3B0cygpLmRlYnVnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE5leHQgc3RlcHNcbiAgICAgICAgY29uc29sZS5sb2coJycpO1xuICAgICAgICBwcmludFNlY3Rpb24oJ05leHQgU3RlcHMnKTtcbiAgICAgICAgY29uc29sZS5sb2coZGltKCdZb3UgY2FuIG5vdzonKSk7XG4gICAgICAgIGlmICghb3B0aW9ucy5kZXBsb3kpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgICAke2N5YW4oJ+KAoicpfSBEZXBsb3k6ICR7Ym9sZChgZGVwbG95IC0taWQgJHtwaXBlbGluZS5pZH1gKX1gKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zb2xlLmxvZyhgICAke2N5YW4oJ+KAoicpfSBWaWV3OiAke2JvbGQoYGdldC1waXBlbGluZSAtLWlkICR7cGlwZWxpbmUuaWR9YCl9YCk7XG4gICAgICAgIGNvbnNvbGUubG9nKGAgICR7Y3lhbign4oCiJyl9IEFQSTogJHtjb25maWcuYXBpLmJhc2VVcmx9JHtjb25maWcuYXBpLnBpcGVsaW5lVXJsfS8ke3BpcGVsaW5lLmlkfWApO1xuICAgICAgICBjb25zb2xlLmxvZygnJyk7XG5cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGhhbmRsZUVycm9yKGVycm9yLCBFUlJPUl9DT0RFUy5BUElfUkVRVUVTVCwge1xuICAgICAgICAgIGRlYnVnOiBwcm9ncmFtLm9wdHMoKS5kZWJ1ZyxcbiAgICAgICAgICBleGl0OiB0cnVlLFxuICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgIGNvbW1hbmQ6ICdjcmVhdGUtcGlwZWxpbmUnLFxuICAgICAgICAgICAgZXhlY3V0aW9uSWQsXG4gICAgICAgICAgICBwcm9qZWN0OiBvcHRpb25zLnByb2plY3QsXG4gICAgICAgICAgICBvcmdhbml6YXRpb246IG9wdGlvbnMub3JnYW5pemF0aW9uLFxuICAgICAgICAgICAgZmlsZTogb3B0aW9ucy5maWxlLFxuICAgICAgICAgICAgdmVyaWZ5U3NsOiBvcHRpb25zLnZlcmlmeVNzbCxcbiAgICAgICAgICAgIGRyeVJ1bjogb3B0aW9ucy5kcnlSdW4sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG59Il19
|
|
@@ -46,7 +46,7 @@ export function listPipelines(program) {
|
|
|
46
46
|
.action((options) => runListEntity(program, options, {
|
|
47
47
|
labelPlural: 'Pipelines',
|
|
48
48
|
responseKey: 'pipelines',
|
|
49
|
-
listUrl: (config) => config.api.
|
|
49
|
+
listUrl: (config) => config.api.pipelineUrl,
|
|
50
50
|
commandName: 'list-pipelines',
|
|
51
51
|
buildFilters: (options, base) => {
|
|
52
52
|
const filters = { ...base };
|
|
@@ -96,4 +96,4 @@ export function listPipelines(program) {
|
|
|
96
96
|
})),
|
|
97
97
|
}));
|
|
98
98
|
}
|
|
99
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC1waXBlbGluZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tbWFuZHMvbGlzdC1waXBlbGluZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0QyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDN0QsT0FBTyxFQUFpQixNQUFNLG1CQUFtQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMzRCxPQUFPLEVBQTJCLE1BQU0sZ0NBQWdDLENBQUM7QUFnQnpFOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JHO0FBQ0gsTUFBTSxVQUFVLGFBQWEsQ0FBQyxPQUFnQjtJQUM1QyxjQUFjLENBQUMsT0FBTztTQUNuQixPQUFPLENBQUMsTUFBTSxDQUFDO1NBQ2YsV0FBVyxDQUFDLDRDQUE0QyxDQUFDO1FBRTFELHdCQUF3QjtTQUN2QixNQUFNLENBQUMsV0FBVyxFQUFFLDBEQUEwRCxDQUFDO1NBQy9FLE1BQU0sQ0FBQyxxQkFBcUIsRUFBRSw2Q0FBNkMsQ0FBQztTQUM1RSxNQUFNLENBQUMsd0JBQXdCLEVBQUUsdUNBQXVDLENBQUM7U0FDekUsTUFBTSxDQUFDLHVCQUF1QixFQUFFLHNDQUFzQyxDQUFDO1NBQ3ZFLE1BQU0sQ0FBQyxrQkFBa0IsRUFBRSxvQ0FBb0MsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7U0FDNUYsTUFBTSxDQUFDLG1CQUFtQixFQUFFLDJCQUEyQixFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FB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QUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sSUFBSSxTQUFTLENBQUMsTUFBTSxFQUFFO1lBQ3JGLG1CQUFtQixFQUFFLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLElBQUksU0FBUyxDQUFDLE1BQU0sRUFBRTtTQUN4RixDQUFDO1FBQ0YsSUFBSSxFQUFFLENBQUMsU0FBUyxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNoRixJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQUU7WUFDVixTQUFTLEVBQUUsQ0FBQyxDQUFDLE9BQU87WUFDcEIsY0FBYyxFQUFFLENBQUMsQ0FBQyxZQUFZO1lBQzlCLE1BQU0sRUFBRSxDQUFDLENBQUMsWUFBWSxJQUFJLEtBQUs7WUFDL0IsWUFBWSxFQUFFLENBQUMsQ0FBQyxVQUFVLElBQUksU0FBUztZQUN2QyxTQUFTLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJO1lBQ3JDLFFBQVEsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUk7WUFDbkMsWUFBWSxFQUFFLENBQUMsQ0FBQyxTQUFTLElBQUksS0FBSztTQUNuQyxDQUFDLENBQUM7S0FDSixDQUFDLENBQUMsQ0FBQztBQUNSLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gJ2NvbW1hbmRlcic7XG5pbXBvcnQgeyBydW5MaXN0RW50aXR5IH0gZnJvbSAnLi9lbnRpdHktbGlzdC5qcyc7XG5pbXBvcnQgeyB2YWxpZGF0ZUJvb2xlYW4gfSBmcm9tICcuLi9jb25maWcvY2xpLmNvbnN0YW50cy5qcyc7XG5pbXBvcnQgeyB0eXBlIFBpcGVsaW5lIH0gZnJvbSAnLi4vdHlwZXMvaW5kZXguanMnO1xuaW1wb3J0IHsgd2l0aFNzbE9wdGlvbnMgfSBmcm9tICcuLi91dGlscy9jb21tYW5kLXV0aWxzLmpzJztcbmltcG9ydCB7IHR5cGUgQ29tbW9uRmlsdGVyUGFyYW1zIH0gZnJvbSAnLi4vdXRpbHMvbGlzdC1jb21tYW5kLXV0aWxzLmpzJztcblxuLyoqXG4gKiBRdWVyeSBwYXJhbWV0ZXJzIGZvciB0aGUgcGlwZWxpbmUgbGlzdCBBUEkgZW5kcG9pbnQuXG4gKiBDb21iaW5lcyBjb21tb24gZmlsdGVycyAocGFnaW5hdGlvbiwgc29ydCwgYWNjZXNzKSB3aXRoIHBpcGVsaW5lLXNwZWNpZmljIGZpbHRlcnMuXG4gKi9cbmludGVyZmFjZSBQaXBlbGluZUZpbHRlclBhcmFtcyBleHRlbmRzIENvbW1vbkZpbHRlclBhcmFtcyB7XG4gIHZpc2liaWxpdHk/OiBzdHJpbmc7XG4gIGlzRGVmYXVsdD86IGJvb2xlYW47XG5cbiAgLy8gUGlwZWxpbmUtc3BlY2lmaWMgZmlsdGVyc1xuICBwcm9qZWN0Pzogc3RyaW5nO1xuICBvcmdhbml6YXRpb24/OiBzdHJpbmc7XG4gIHBpcGVsaW5lTmFtZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZWdpc3RlcnMgdGhlIGBsaXN0LXBpcGVsaW5lc2AgY29tbWFuZCB3aXRoIHRoZSBDTEkgcHJvZ3JhbS5cbiAqXG4gKiBRdWVyaWVzIHBpcGVsaW5lcyB3aXRoIGZpbHRlcnMgZm9yIHByb2plY3QsIG9yZ2FuaXphdGlvbiwgbmFtZSxcbiAqIGFjY2VzcyBtb2RpZmllciwgYWN0aXZlL2RlZmF1bHQgc3RhdHVzLCBwbHVzIHBhZ2luYXRpb24gYW5kIHNvcnRpbmcuXG4gKlxuICogQHBhcmFtIHByb2dyYW0gLSBUaGUgcm9vdCBDb21tYW5kZXIgcHJvZ3JhbSBpbnN0YW5jZSB0byBhdHRhY2ggdGhlIGNvbW1hbmQgdG8uXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYGJhc2hcbiAqIGNsaSBwaXBlbGluZSBsaXN0XG4gKiBjbGkgcGlwZWxpbmUgbGlzdCAtLXByb2plY3QgbXktYXBwIC0taXMtYWN0aXZlIHRydWVcbiAqIGNsaSBwaXBlbGluZSBsaXN0IC0tb3JnYW5pemF0aW9uIG15LW9yZ1xuICogY2xpIHBpcGVsaW5lIGxpc3QgLS1saW1pdCA1MCAtLW9mZnNldCAxMDAgLS1zb3J0IFwicGlwZWxpbmVOYW1lOmFzY1wiXG4gKiBjbGkgcGlwZWxpbmUgbGlzdCAtLWZvcm1hdCBqc29uIC0tb3V0cHV0IHBpcGVsaW5lcy5qc29uXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxpc3RQaXBlbGluZXMocHJvZ3JhbTogQ29tbWFuZCk6IHZvaWQge1xuICB3aXRoU3NsT3B0aW9ucyhwcm9ncmFtXG4gICAgLmNvbW1hbmQoJ2xpc3QnKVxuICAgIC5kZXNjcmlwdGlvbignUXVlcnkgcGlwZWxpbmVzIHdpdGggY29tcHJlaGVuc2l2ZSBmaWx0ZXJzJylcblxuICAgIC8vIENvbW1vbiBmaWx0ZXIgb3B0aW9uc1xuICAgIC5vcHRpb24oJy0taWQgPGlkPicsICdGaWx0ZXIgYnkgcGlwZWxpbmUgSUQgKGNhbiBzcGVjaWZ5IG11bHRpcGxlIHdpdGggY29tbWFzKScpXG4gICAgLm9wdGlvbignLS12aXNpYmlsaXR5IDxydW5nPicsICdGaWx0ZXIgYnkgc2hhcmluZyBydW5nIChwcml2YXRlL29yZy9wdWJsaWMpJylcbiAgICAub3B0aW9uKCctLWlzLWRlZmF1bHQgPGJvb2xlYW4+JywgJ0ZpbHRlciBieSBkZWZhdWx0IHN0YXR1cyAodHJ1ZS9mYWxzZSknKVxuICAgIC5vcHRpb24oJy0taXMtYWN0aXZlIDxib29sZWFuPicsICdGaWx0ZXIgYnkgYWN0aXZlIHN0YXR1cyAodHJ1ZS9mYWxzZSknKVxuICAgIC5vcHRpb24oJy0tbGltaXQgPG51bWJlcj4nLCAnTWF4aW11bSBudW1iZXIgb2YgcmVzdWx0cyAoMS0xMDAwKScsICh2KSA9PiBwYXJzZUludCh2LCAxMCksIDUwKVxuICAgIC5vcHRpb24oJy0tb2Zmc2V0IDxudW1iZXI+JywgJ051bWJlciBvZiByZXN1bHRzIHRvIHNraXAnLCAodikgPT4gcGFyc2VJbnQodiwgMTApLCAwKVxuICAgIC5vcHRpb24oJy0tc29ydCA8c29ydD4nLCAnU29ydCBmb3JtYXQ6IGZpZWxkOmRpcmVjdGlvbiAoZS5nLiwgcGlwZWxpbmVOYW1lOmFzYywgY3JlYXRlZEF0OmRlc2MpJylcblxuICAgIC8vIFBpcGVsaW5lLXNwZWNpZmljIGZpbHRlciBvcHRpb25zXG4gICAgLm9wdGlvbignLS1wcm9qZWN0IDxwcm9qZWN0PicsICdGaWx0ZXIgYnkgZXhhY3QgcHJvamVjdCBuYW1lJylcbiAgICAub3B0aW9uKCctLW9yZ2FuaXphdGlvbiA8b3JnYW5pemF0aW9uPicsICdGaWx0ZXIgYnkgZXhhY3Qgb3JnYW5pemF0aW9uIG5hbWUnKVxuICAgIC5vcHRpb24oJy0tcGlwZWxpbmUtbmFtZSA8bmFtZT4nLCAnRmlsdGVyIGJ5IGV4YWN0IHBpcGVsaW5lIG5hbWUnKVxuXG4gICAgLy8gT3V0cHV0IG9wdGlvbnNcbiAgICAub3B0aW9uKCctZiwgLS1mb3JtYXQgPGZvcm1hdD4nLCAnT3V0cHV0IGZvcm1hdCAoanNvbiwgeWFtbCwgdGFibGUsIGNzdiknLCAndGFibGUnKVxuICAgIC5vcHRpb24oJy1vLCAtLW91dHB1dCA8ZmlsZT4nLCAnU2F2ZSBvdXRwdXQgdG8gZmlsZScpXG4gICAgLm9wdGlvbignLS1zaG93LXByb3BzJywgJ0luY2x1ZGUgcGlwZWxpbmUgcHJvcGVydGllcyBpbiBvdXRwdXQgKGpzb24veWFtbCBvbmx5KScsIGZhbHNlKSlcblxuICAgIC5hY3Rpb24oKG9wdGlvbnMpID0+IHJ1bkxpc3RFbnRpdHk8UGlwZWxpbmUsIFBpcGVsaW5lRmlsdGVyUGFyYW1zPihwcm9ncmFtLCBvcHRpb25zLCB7XG4gICAgICBsYWJlbFBsdXJhbDogJ1BpcGVsaW5lcycsXG4gICAgICByZXNwb25zZUtleTogJ3BpcGVsaW5lcycsXG4gICAgICBsaXN0VXJsOiAoY29uZmlnKSA9PiBjb25maWcuYXBpLnBpcGVsaW5lTGlzdFVybCxcbiAgICAgIGNvbW1hbmROYW1lOiAnbGlzdC1waXBlbGluZXMnLFxuICAgICAgYnVpbGRGaWx0ZXJzOiAob3B0aW9ucywgYmFzZSkgPT4ge1xuICAgICAgICBjb25zdCBmaWx0ZXJzOiBQaXBlbGluZUZpbHRlclBhcmFtcyA9IHsgLi4uYmFzZSB9O1xuICAgICAgICBpZiAob3B0aW9ucy52aXNpYmlsaXR5KSBmaWx0ZXJzLnZpc2liaWxpdHkgPSBvcHRpb25zLnZpc2liaWxpdHkgYXMgc3RyaW5nO1xuICAgICAgICBpZiAob3B0aW9ucy5pc0RlZmF1bHQgIT09IHVuZGVmaW5lZCkgZmlsdGVycy5pc0RlZmF1bHQgPSB2YWxpZGF0ZUJvb2xlYW4ob3B0aW9ucy5pc0RlZmF1bHQgYXMgc3RyaW5nLCAnaXMtZGVmYXVsdCcpO1xuICAgICAgICBpZiAob3B0aW9ucy5wcm9qZWN0KSBmaWx0ZXJzLnByb2plY3QgPSBvcHRpb25zLnByb2plY3QgYXMgc3RyaW5nO1xuICAgICAgICBpZiAob3B0aW9ucy5vcmdhbml6YXRpb24pIGZpbHRlcnMub3JnYW5pemF0aW9uID0gb3B0aW9ucy5vcmdhbml6YXRpb24gYXMgc3RyaW5nO1xuICAgICAgICBpZiAob3B0aW9ucy5waXBlbGluZU5hbWUpIGZpbHRlcnMucGlwZWxpbmVOYW1lID0gb3B0aW9ucy5waXBlbGluZU5hbWUgYXMgc3RyaW5nO1xuICAgICAgICByZXR1cm4gZmlsdGVycztcbiAgICAgIH0sXG4gICAgICBhY3RpdmVGaWx0ZXJzOiAoZmlsdGVycykgPT4ge1xuICAgICAgICBjb25zdCBhY3RpdmU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG4gICAgICAgIGlmIChmaWx0ZXJzLmlkKSBhY3RpdmUuSUQgPSBmaWx0ZXJzLmlkO1xuICAgICAgICBpZiAoZmlsdGVycy52aXNpYmlsaXR5KSBhY3RpdmUuVmlzaWJpbGl0eSA9IGZpbHRlcnMudmlzaWJpbGl0eTtcbiAgICAgICAgaWYgKGZpbHRlcnMuaXNEZWZhdWx0ICE9PSB1bmRlZmluZWQpIGFjdGl2ZVsnSXMgRGVmYXVsdCddID0gZmlsdGVycy5pc0RlZmF1bHQ7XG4gICAgICAgIGlmIChmaWx0ZXJzLmlzQWN0aXZlICE9PSB1bmRlZmluZWQpIGFjdGl2ZVsnSXMgQWN0aXZlJ10gPSBmaWx0ZXJzLmlzQWN0aXZlO1xuICAgICAgICBpZiAoZmlsdGVycy5wcm9qZWN0KSBhY3RpdmUuUHJvamVjdCA9IGZpbHRlcnMucHJvamVjdDtcbiAgICAgICAgaWYgKGZpbHRlcnMub3JnYW5pemF0aW9uKSBhY3RpdmUuT3JnYW5pemF0aW9uID0gZmlsdGVycy5vcmdhbml6YXRpb247XG4gICAgICAgIGlmIChmaWx0ZXJzLnBpcGVsaW5lTmFtZSkgYWN0aXZlWydQaXBlbGluZSBOYW1lJ10gPSBmaWx0ZXJzLnBpcGVsaW5lTmFtZTtcbiAgICAgICAgcmV0dXJuIGFjdGl2ZTtcbiAgICAgIH0sXG4gICAgICBzdGF0aXN0aWNzOiAocGlwZWxpbmVzKSA9PiAoe1xuICAgICAgICAnQWN0aXZlIFBpcGVsaW5lcyc6IGAke3BpcGVsaW5lcy5maWx0ZXIocCA9PiBwLmlzQWN0aXZlKS5sZW5ndGh9LyR7cGlwZWxpbmVzLmxlbmd0aH1gLFxuICAgICAgICAnRGVmYXVsdCBQaXBlbGluZXMnOiBgJHtwaXBlbGluZXMuZmlsdGVyKHAgPT4gcC5pc0RlZmF1bHQpLmxlbmd0aH0vJHtwaXBlbGluZXMubGVuZ3RofWAsXG4gICAgICB9KSxcbiAgICAgIHJvd3M6IChwaXBlbGluZXMsIG9wdGlvbnMpID0+IG9wdGlvbnMuc2hvd1Byb3BzID8gcGlwZWxpbmVzIDogcGlwZWxpbmVzLm1hcChwID0+ICh7XG4gICAgICAgICdJRCc6IHAuaWQsXG4gICAgICAgICdQcm9qZWN0JzogcC5wcm9qZWN0LFxuICAgICAgICAnT3JnYW5pemF0aW9uJzogcC5vcmdhbml6YXRpb24sXG4gICAgICAgICdOYW1lJzogcC5waXBlbGluZU5hbWUgfHwgJ04vQScsXG4gICAgICAgICdWaXNpYmlsaXR5JzogcC52aXNpYmlsaXR5IHx8ICdwcml2YXRlJyxcbiAgICAgICAgJ0RlZmF1bHQnOiBwLmlzRGVmYXVsdCA/ICdZZXMnIDogJ05vJyxcbiAgICAgICAgJ0FjdGl2ZSc6IHAuaXNBY3RpdmUgPyAnWWVzJyA6ICdObycsXG4gICAgICAgICdDcmVhdGVkIEF0JzogcC5jcmVhdGVkQXQgfHwgJ04vQScsXG4gICAgICB9KSksXG4gICAgfSkpO1xufVxuIl19
|
|
99
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC1waXBlbGluZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tbWFuZHMvbGlzdC1waXBlbGluZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0QyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDN0QsT0FBTyxFQUFpQixNQUFNLG1CQUFtQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMzRCxPQUFPLEVBQTJCLE1BQU0sZ0NBQWdDLENBQUM7QUFnQnpFOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JHO0FBQ0gsTUFBTSxVQUFVLGFBQWEsQ0FBQyxPQUFnQjtJQUM1QyxjQUFjLENBQUMsT0FBTztTQUNuQixPQUFPLENBQUMsTUFBTSxDQUFDO1NBQ2YsV0FBVyxDQUFDLDRDQUE0QyxDQUFDO1FBRTFELHdCQUF3QjtTQUN2QixNQUFNLENBQUMsV0FBVyxFQUFFLDBEQUEwRCxDQUFDO1NBQy9FLE1BQU0sQ0FBQyxxQkFBcUIsRUFBRSw2Q0FBNkMsQ0FBQztTQUM1RSxNQUFNLENBQUMsd0JBQXdCLEVBQUUsdUNBQXVDLENBQUM7U0FDekUsTUFBTSxDQUFDLHVCQUF1QixFQUFFLHNDQUFzQyxDQUFDO1NBQ3ZFLE1BQU0sQ0FBQyxrQkFBa0IsRUFBRSxvQ0FBb0MsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7U0FDNUYsTUFBTSxDQUFDLG1CQUFtQixFQUFFLDJCQUEyQixFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FB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QUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sSUFBSSxTQUFTLENBQUMsTUFBTSxFQUFFO1lBQ3JGLG1CQUFtQixFQUFFLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLElBQUksU0FBUyxDQUFDLE1BQU0sRUFBRTtTQUN4RixDQUFDO1FBQ0YsSUFBSSxFQUFFLENBQUMsU0FBUyxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNoRixJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQUU7WUFDVixTQUFTLEVBQUUsQ0FBQyxDQUFDLE9BQU87WUFDcEIsY0FBYyxFQUFFLENBQUMsQ0FBQyxZQUFZO1lBQzlCLE1BQU0sRUFBRSxDQUFDLENBQUMsWUFBWSxJQUFJLEtBQUs7WUFDL0IsWUFBWSxFQUFFLENBQUMsQ0FBQyxVQUFVLElBQUksU0FBUztZQUN2QyxTQUFTLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJO1lBQ3JDLFFBQVEsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUk7WUFDbkMsWUFBWSxFQUFFLENBQUMsQ0FBQyxTQUFTLElBQUksS0FBSztTQUNuQyxDQUFDLENBQUM7S0FDSixDQUFDLENBQUMsQ0FBQztBQUNSLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gJ2NvbW1hbmRlcic7XG5pbXBvcnQgeyBydW5MaXN0RW50aXR5IH0gZnJvbSAnLi9lbnRpdHktbGlzdC5qcyc7XG5pbXBvcnQgeyB2YWxpZGF0ZUJvb2xlYW4gfSBmcm9tICcuLi9jb25maWcvY2xpLmNvbnN0YW50cy5qcyc7XG5pbXBvcnQgeyB0eXBlIFBpcGVsaW5lIH0gZnJvbSAnLi4vdHlwZXMvaW5kZXguanMnO1xuaW1wb3J0IHsgd2l0aFNzbE9wdGlvbnMgfSBmcm9tICcuLi91dGlscy9jb21tYW5kLXV0aWxzLmpzJztcbmltcG9ydCB7IHR5cGUgQ29tbW9uRmlsdGVyUGFyYW1zIH0gZnJvbSAnLi4vdXRpbHMvbGlzdC1jb21tYW5kLXV0aWxzLmpzJztcblxuLyoqXG4gKiBRdWVyeSBwYXJhbWV0ZXJzIGZvciB0aGUgcGlwZWxpbmUgbGlzdCBBUEkgZW5kcG9pbnQuXG4gKiBDb21iaW5lcyBjb21tb24gZmlsdGVycyAocGFnaW5hdGlvbiwgc29ydCwgYWNjZXNzKSB3aXRoIHBpcGVsaW5lLXNwZWNpZmljIGZpbHRlcnMuXG4gKi9cbmludGVyZmFjZSBQaXBlbGluZUZpbHRlclBhcmFtcyBleHRlbmRzIENvbW1vbkZpbHRlclBhcmFtcyB7XG4gIHZpc2liaWxpdHk/OiBzdHJpbmc7XG4gIGlzRGVmYXVsdD86IGJvb2xlYW47XG5cbiAgLy8gUGlwZWxpbmUtc3BlY2lmaWMgZmlsdGVyc1xuICBwcm9qZWN0Pzogc3RyaW5nO1xuICBvcmdhbml6YXRpb24/OiBzdHJpbmc7XG4gIHBpcGVsaW5lTmFtZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZWdpc3RlcnMgdGhlIGBsaXN0LXBpcGVsaW5lc2AgY29tbWFuZCB3aXRoIHRoZSBDTEkgcHJvZ3JhbS5cbiAqXG4gKiBRdWVyaWVzIHBpcGVsaW5lcyB3aXRoIGZpbHRlcnMgZm9yIHByb2plY3QsIG9yZ2FuaXphdGlvbiwgbmFtZSxcbiAqIGFjY2VzcyBtb2RpZmllciwgYWN0aXZlL2RlZmF1bHQgc3RhdHVzLCBwbHVzIHBhZ2luYXRpb24gYW5kIHNvcnRpbmcuXG4gKlxuICogQHBhcmFtIHByb2dyYW0gLSBUaGUgcm9vdCBDb21tYW5kZXIgcHJvZ3JhbSBpbnN0YW5jZSB0byBhdHRhY2ggdGhlIGNvbW1hbmQgdG8uXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYGJhc2hcbiAqIGNsaSBwaXBlbGluZSBsaXN0XG4gKiBjbGkgcGlwZWxpbmUgbGlzdCAtLXByb2plY3QgbXktYXBwIC0taXMtYWN0aXZlIHRydWVcbiAqIGNsaSBwaXBlbGluZSBsaXN0IC0tb3JnYW5pemF0aW9uIG15LW9yZ1xuICogY2xpIHBpcGVsaW5lIGxpc3QgLS1saW1pdCA1MCAtLW9mZnNldCAxMDAgLS1zb3J0IFwicGlwZWxpbmVOYW1lOmFzY1wiXG4gKiBjbGkgcGlwZWxpbmUgbGlzdCAtLWZvcm1hdCBqc29uIC0tb3V0cHV0IHBpcGVsaW5lcy5qc29uXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxpc3RQaXBlbGluZXMocHJvZ3JhbTogQ29tbWFuZCk6IHZvaWQge1xuICB3aXRoU3NsT3B0aW9ucyhwcm9ncmFtXG4gICAgLmNvbW1hbmQoJ2xpc3QnKVxuICAgIC5kZXNjcmlwdGlvbignUXVlcnkgcGlwZWxpbmVzIHdpdGggY29tcHJlaGVuc2l2ZSBmaWx0ZXJzJylcblxuICAgIC8vIENvbW1vbiBmaWx0ZXIgb3B0aW9uc1xuICAgIC5vcHRpb24oJy0taWQgPGlkPicsICdGaWx0ZXIgYnkgcGlwZWxpbmUgSUQgKGNhbiBzcGVjaWZ5IG11bHRpcGxlIHdpdGggY29tbWFzKScpXG4gICAgLm9wdGlvbignLS12aXNpYmlsaXR5IDxydW5nPicsICdGaWx0ZXIgYnkgc2hhcmluZyBydW5nIChwcml2YXRlL29yZy9wdWJsaWMpJylcbiAgICAub3B0aW9uKCctLWlzLWRlZmF1bHQgPGJvb2xlYW4+JywgJ0ZpbHRlciBieSBkZWZhdWx0IHN0YXR1cyAodHJ1ZS9mYWxzZSknKVxuICAgIC5vcHRpb24oJy0taXMtYWN0aXZlIDxib29sZWFuPicsICdGaWx0ZXIgYnkgYWN0aXZlIHN0YXR1cyAodHJ1ZS9mYWxzZSknKVxuICAgIC5vcHRpb24oJy0tbGltaXQgPG51bWJlcj4nLCAnTWF4aW11bSBudW1iZXIgb2YgcmVzdWx0cyAoMS0xMDAwKScsICh2KSA9PiBwYXJzZUludCh2LCAxMCksIDUwKVxuICAgIC5vcHRpb24oJy0tb2Zmc2V0IDxudW1iZXI+JywgJ051bWJlciBvZiByZXN1bHRzIHRvIHNraXAnLCAodikgPT4gcGFyc2VJbnQodiwgMTApLCAwKVxuICAgIC5vcHRpb24oJy0tc29ydCA8c29ydD4nLCAnU29ydCBmb3JtYXQ6IGZpZWxkOmRpcmVjdGlvbiAoZS5nLiwgcGlwZWxpbmVOYW1lOmFzYywgY3JlYXRlZEF0OmRlc2MpJylcblxuICAgIC8vIFBpcGVsaW5lLXNwZWNpZmljIGZpbHRlciBvcHRpb25zXG4gICAgLm9wdGlvbignLS1wcm9qZWN0IDxwcm9qZWN0PicsICdGaWx0ZXIgYnkgZXhhY3QgcHJvamVjdCBuYW1lJylcbiAgICAub3B0aW9uKCctLW9yZ2FuaXphdGlvbiA8b3JnYW5pemF0aW9uPicsICdGaWx0ZXIgYnkgZXhhY3Qgb3JnYW5pemF0aW9uIG5hbWUnKVxuICAgIC5vcHRpb24oJy0tcGlwZWxpbmUtbmFtZSA8bmFtZT4nLCAnRmlsdGVyIGJ5IGV4YWN0IHBpcGVsaW5lIG5hbWUnKVxuXG4gICAgLy8gT3V0cHV0IG9wdGlvbnNcbiAgICAub3B0aW9uKCctZiwgLS1mb3JtYXQgPGZvcm1hdD4nLCAnT3V0cHV0IGZvcm1hdCAoanNvbiwgeWFtbCwgdGFibGUsIGNzdiknLCAndGFibGUnKVxuICAgIC5vcHRpb24oJy1vLCAtLW91dHB1dCA8ZmlsZT4nLCAnU2F2ZSBvdXRwdXQgdG8gZmlsZScpXG4gICAgLm9wdGlvbignLS1zaG93LXByb3BzJywgJ0luY2x1ZGUgcGlwZWxpbmUgcHJvcGVydGllcyBpbiBvdXRwdXQgKGpzb24veWFtbCBvbmx5KScsIGZhbHNlKSlcblxuICAgIC5hY3Rpb24oKG9wdGlvbnMpID0+IHJ1bkxpc3RFbnRpdHk8UGlwZWxpbmUsIFBpcGVsaW5lRmlsdGVyUGFyYW1zPihwcm9ncmFtLCBvcHRpb25zLCB7XG4gICAgICBsYWJlbFBsdXJhbDogJ1BpcGVsaW5lcycsXG4gICAgICByZXNwb25zZUtleTogJ3BpcGVsaW5lcycsXG4gICAgICBsaXN0VXJsOiAoY29uZmlnKSA9PiBjb25maWcuYXBpLnBpcGVsaW5lVXJsLFxuICAgICAgY29tbWFuZE5hbWU6ICdsaXN0LXBpcGVsaW5lcycsXG4gICAgICBidWlsZEZpbHRlcnM6IChvcHRpb25zLCBiYXNlKSA9PiB7XG4gICAgICAgIGNvbnN0IGZpbHRlcnM6IFBpcGVsaW5lRmlsdGVyUGFyYW1zID0geyAuLi5iYXNlIH07XG4gICAgICAgIGlmIChvcHRpb25zLnZpc2liaWxpdHkpIGZpbHRlcnMudmlzaWJpbGl0eSA9IG9wdGlvbnMudmlzaWJpbGl0eSBhcyBzdHJpbmc7XG4gICAgICAgIGlmIChvcHRpb25zLmlzRGVmYXVsdCAhPT0gdW5kZWZpbmVkKSBmaWx0ZXJzLmlzRGVmYXVsdCA9IHZhbGlkYXRlQm9vbGVhbihvcHRpb25zLmlzRGVmYXVsdCBhcyBzdHJpbmcsICdpcy1kZWZhdWx0Jyk7XG4gICAgICAgIGlmIChvcHRpb25zLnByb2plY3QpIGZpbHRlcnMucHJvamVjdCA9IG9wdGlvbnMucHJvamVjdCBhcyBzdHJpbmc7XG4gICAgICAgIGlmIChvcHRpb25zLm9yZ2FuaXphdGlvbikgZmlsdGVycy5vcmdhbml6YXRpb24gPSBvcHRpb25zLm9yZ2FuaXphdGlvbiBhcyBzdHJpbmc7XG4gICAgICAgIGlmIChvcHRpb25zLnBpcGVsaW5lTmFtZSkgZmlsdGVycy5waXBlbGluZU5hbWUgPSBvcHRpb25zLnBpcGVsaW5lTmFtZSBhcyBzdHJpbmc7XG4gICAgICAgIHJldHVybiBmaWx0ZXJzO1xuICAgICAgfSxcbiAgICAgIGFjdGl2ZUZpbHRlcnM6IChmaWx0ZXJzKSA9PiB7XG4gICAgICAgIGNvbnN0IGFjdGl2ZTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcbiAgICAgICAgaWYgKGZpbHRlcnMuaWQpIGFjdGl2ZS5JRCA9IGZpbHRlcnMuaWQ7XG4gICAgICAgIGlmIChmaWx0ZXJzLnZpc2liaWxpdHkpIGFjdGl2ZS5WaXNpYmlsaXR5ID0gZmlsdGVycy52aXNpYmlsaXR5O1xuICAgICAgICBpZiAoZmlsdGVycy5pc0RlZmF1bHQgIT09IHVuZGVmaW5lZCkgYWN0aXZlWydJcyBEZWZhdWx0J10gPSBmaWx0ZXJzLmlzRGVmYXVsdDtcbiAgICAgICAgaWYgKGZpbHRlcnMuaXNBY3RpdmUgIT09IHVuZGVmaW5lZCkgYWN0aXZlWydJcyBBY3RpdmUnXSA9IGZpbHRlcnMuaXNBY3RpdmU7XG4gICAgICAgIGlmIChmaWx0ZXJzLnByb2plY3QpIGFjdGl2ZS5Qcm9qZWN0ID0gZmlsdGVycy5wcm9qZWN0O1xuICAgICAgICBpZiAoZmlsdGVycy5vcmdhbml6YXRpb24pIGFjdGl2ZS5Pcmdhbml6YXRpb24gPSBmaWx0ZXJzLm9yZ2FuaXphdGlvbjtcbiAgICAgICAgaWYgKGZpbHRlcnMucGlwZWxpbmVOYW1lKSBhY3RpdmVbJ1BpcGVsaW5lIE5hbWUnXSA9IGZpbHRlcnMucGlwZWxpbmVOYW1lO1xuICAgICAgICByZXR1cm4gYWN0aXZlO1xuICAgICAgfSxcbiAgICAgIHN0YXRpc3RpY3M6IChwaXBlbGluZXMpID0+ICh7XG4gICAgICAgICdBY3RpdmUgUGlwZWxpbmVzJzogYCR7cGlwZWxpbmVzLmZpbHRlcihwID0+IHAuaXNBY3RpdmUpLmxlbmd0aH0vJHtwaXBlbGluZXMubGVuZ3RofWAsXG4gICAgICAgICdEZWZhdWx0IFBpcGVsaW5lcyc6IGAke3BpcGVsaW5lcy5maWx0ZXIocCA9PiBwLmlzRGVmYXVsdCkubGVuZ3RofS8ke3BpcGVsaW5lcy5sZW5ndGh9YCxcbiAgICAgIH0pLFxuICAgICAgcm93czogKHBpcGVsaW5lcywgb3B0aW9ucykgPT4gb3B0aW9ucy5zaG93UHJvcHMgPyBwaXBlbGluZXMgOiBwaXBlbGluZXMubWFwKHAgPT4gKHtcbiAgICAgICAgJ0lEJzogcC5pZCxcbiAgICAgICAgJ1Byb2plY3QnOiBwLnByb2plY3QsXG4gICAgICAgICdPcmdhbml6YXRpb24nOiBwLm9yZ2FuaXphdGlvbixcbiAgICAgICAgJ05hbWUnOiBwLnBpcGVsaW5lTmFtZSB8fCAnTi9BJyxcbiAgICAgICAgJ1Zpc2liaWxpdHknOiBwLnZpc2liaWxpdHkgfHwgJ3ByaXZhdGUnLFxuICAgICAgICAnRGVmYXVsdCc6IHAuaXNEZWZhdWx0ID8gJ1llcycgOiAnTm8nLFxuICAgICAgICAnQWN0aXZlJzogcC5pc0FjdGl2ZSA/ICdZZXMnIDogJ05vJyxcbiAgICAgICAgJ0NyZWF0ZWQgQXQnOiBwLmNyZWF0ZWRBdCB8fCAnTi9BJyxcbiAgICAgIH0pKSxcbiAgICB9KSk7XG59XG4iXX0=
|