cdk-serverless 2.21.0 → 2.22.1
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/docs/constructs/assets/hierarchy.js +1 -1
- package/docs/constructs/assets/icons.js +1 -1
- package/docs/constructs/assets/icons.svg +1 -1
- package/docs/constructs/assets/main.js +5 -5
- package/docs/constructs/assets/search.js +1 -1
- package/docs/constructs/assets/style.css +251 -228
- package/docs/constructs/classes/AssetCdn.html +19 -19
- package/docs/constructs/classes/BaseApi.html +14 -14
- package/docs/constructs/classes/CognitoAuthentication.html +24 -24
- package/docs/constructs/classes/GraphQlApi.html +35 -34
- package/docs/constructs/classes/LambdaFunction.html +182 -171
- package/docs/constructs/classes/RestApi.html +41 -39
- package/docs/constructs/classes/SingleTableDatastore.html +17 -17
- package/docs/constructs/classes/Workflow.html +20 -20
- package/docs/constructs/hierarchy.html +1 -1
- package/docs/constructs/index.html +35 -17
- package/docs/constructs/interfaces/AssetCdnProps.html +6 -6
- package/docs/constructs/interfaces/BaseApiProps.html +31 -31
- package/docs/constructs/interfaces/CognitoAuthenticationProps.html +22 -22
- package/docs/constructs/interfaces/GraphQlApiProps.html +53 -36
- package/docs/constructs/interfaces/ICognitoAuthentication.html +3 -3
- package/docs/constructs/interfaces/IJwtAuthentication.html +7 -7
- package/docs/constructs/interfaces/ISingleTableDatastore.html +3 -3
- package/docs/constructs/interfaces/JsResolverOptions.html +7 -7
- package/docs/constructs/interfaces/LambdaFunctionProps.html +31 -31
- package/docs/constructs/interfaces/LambdaTracingOptions.html +4 -4
- package/docs/constructs/interfaces/RestApiProps.html +42 -42
- package/docs/constructs/interfaces/SingleTableDatastoreProps.html +11 -11
- package/docs/constructs/interfaces/SingleTableDesign.html +10 -10
- package/docs/constructs/interfaces/VtlResolverOptions.html +6 -6
- package/docs/constructs/interfaces/WorkflowProps.html +6 -6
- package/docs/constructs/modules.html +1 -1
- package/docs/constructs/types/LambdaOptions.html +1 -1
- package/docs/lambda/assets/hierarchy.js +1 -1
- package/docs/lambda/assets/highlight.css +7 -0
- package/docs/lambda/assets/icons.js +1 -1
- package/docs/lambda/assets/icons.svg +1 -1
- package/docs/lambda/assets/main.js +5 -5
- package/docs/lambda/assets/search.js +1 -1
- package/docs/lambda/assets/style.css +251 -228
- package/docs/lambda/classes/auth.ApiGatewayv1CognitoAuthorizer.html +34 -34
- package/docs/lambda/classes/auth.ApiGatewayv1JwtAuthorizer.html +33 -33
- package/docs/lambda/classes/auth.ApiGatewayv2CognitoAuthorizer.html +34 -34
- package/docs/lambda/classes/auth.ApiGatewayv2JwtAuthorizer.html +33 -33
- package/docs/lambda/classes/auth.AppSyncCognitoAuthorizer.html +33 -33
- package/docs/lambda/classes/auth.CognitoAuthorizer.html +31 -31
- package/docs/lambda/classes/auth.JwtAuthorizer.html +31 -31
- package/docs/lambda/classes/errors.BadRequestError.html +36 -15
- package/docs/lambda/classes/errors.ForbiddenError.html +36 -15
- package/docs/lambda/classes/errors.HttpError.html +37 -16
- package/docs/lambda/classes/errors.NotFoundError.html +36 -15
- package/docs/lambda/classes/errors.UnauthenticatedError.html +36 -15
- package/docs/lambda/functions/api.createAppSyncHandler.html +3 -3
- package/docs/lambda/functions/api.createHttpHandler.html +2 -2
- package/docs/lambda/functions/api.createOpenApiHandler.html +2 -2
- package/docs/lambda/functions/api.createOpenApiHandlerWithRequestBody.html +2 -2
- package/docs/lambda/functions/api.createOpenApiHandlerWithRequestBodyNoResponse.html +2 -2
- package/docs/lambda/hierarchy.html +1 -1
- package/docs/lambda/index.html +35 -17
- package/docs/lambda/interfaces/api.AppSyncHandlerContext.html +6 -6
- package/docs/lambda/interfaces/api.HttpHandlerContext.html +7 -7
- package/docs/lambda/interfaces/api.HttpResponseContext.html +5 -5
- package/docs/lambda/interfaces/api.Operation.html +3 -3
- package/docs/lambda/interfaces/api.OperationWithRequestBody.html +4 -4
- package/docs/lambda/modules/api.html +1 -1
- package/docs/lambda/modules/auth.html +1 -1
- package/docs/lambda/modules/errors.html +1 -1
- package/docs/lambda/modules.html +1 -1
- package/docs/lambda/types/api.APIGatewayv1Handler.html +2 -2
- package/docs/lambda/types/api.AppSyncHandler.html +2 -2
- package/docs/lambda/types/api.HttpHandler.html +2 -2
- package/docs/projen/assets/icons.js +1 -1
- package/docs/projen/assets/icons.svg +1 -1
- package/docs/projen/assets/main.js +5 -5
- package/docs/projen/assets/search.js +1 -1
- package/docs/projen/assets/style.css +251 -228
- package/docs/projen/classes/Datastore.html +23 -23
- package/docs/projen/classes/GraphQlApi.html +23 -23
- package/docs/projen/classes/RestApi.html +42 -42
- package/docs/projen/classes/ServerlessProject.html +217 -217
- package/docs/projen/classes/Workflow.html +33 -33
- package/docs/projen/hierarchy.html +1 -0
- package/docs/projen/index.html +35 -17
- package/docs/projen/interfaces/DatastoreOptions.html +3 -3
- package/docs/projen/interfaces/GraphQlApiOptions.html +3 -3
- package/docs/projen/interfaces/RestApiOptions.html +3 -3
- package/docs/projen/interfaces/ServerlessProjectOptions.html +542 -534
- package/docs/projen/interfaces/WorkflowOptions.html +3 -3
- package/docs/projen/modules.html +1 -1
- package/docs/projen/variables/PACKAGE_NAME.html +1 -1
- package/lib/constructs/graphql.d.ts +37 -2
- package/lib/constructs/graphql.js +39 -7
- package/lib/lambda/auth.js +1 -1
- package/package.json +27 -27
|
@@ -79,6 +79,11 @@ class GraphQlApi extends base_api_1.BaseApi {
|
|
|
79
79
|
* A collection of Lambda functions used as resolvers for the GraphQL API.
|
|
80
80
|
*/
|
|
81
81
|
this._functions = {};
|
|
82
|
+
/**
|
|
83
|
+
* Nested stacks for resolvers, grouped by type name.
|
|
84
|
+
* Only used when useNestedStacks is true.
|
|
85
|
+
*/
|
|
86
|
+
this.nestedStacks = {};
|
|
82
87
|
this.cognitoAuth = props.authentication;
|
|
83
88
|
let customDomainName;
|
|
84
89
|
if (this.apiFQDN) {
|
|
@@ -221,7 +226,8 @@ class GraphQlApi extends base_api_1.BaseApi {
|
|
|
221
226
|
fs.mkdirSync('./src/lambda/', { recursive: true });
|
|
222
227
|
this.createEntryFile(entryFile, typeName, fieldName);
|
|
223
228
|
}
|
|
224
|
-
const
|
|
229
|
+
const scope = this.getScopeForTypeName(typeName);
|
|
230
|
+
const fn = new func_1.LambdaFunction(scope, `Fn${operationId}`, {
|
|
225
231
|
stageName: this.props.stageName,
|
|
226
232
|
additionalEnv: this.props.additionalEnv,
|
|
227
233
|
entry: entryFile,
|
|
@@ -248,12 +254,12 @@ class GraphQlApi extends base_api_1.BaseApi {
|
|
|
248
254
|
// this.monitoring.lambdaErrorsWidget.addLeftMetric(fn.metricErrors());
|
|
249
255
|
// this.monitoring.lambdaErrorsWidget.addLeftMetric(fn.metricThrottles());
|
|
250
256
|
// }
|
|
251
|
-
const dataSource = new aws_cdk_lib_1.aws_appsync.LambdaDataSource(
|
|
257
|
+
const dataSource = new aws_cdk_lib_1.aws_appsync.LambdaDataSource(scope, `LambdaDS${operationId}`, {
|
|
252
258
|
api: this.api,
|
|
253
259
|
name: `Lambda_${typeName}_${fieldName}`,
|
|
254
260
|
lambdaFunction: fn,
|
|
255
261
|
});
|
|
256
|
-
new aws_cdk_lib_1.aws_appsync.Resolver(
|
|
262
|
+
new aws_cdk_lib_1.aws_appsync.Resolver(scope, `Resolver${operationId}`, {
|
|
257
263
|
api: this.api,
|
|
258
264
|
typeName: typeName,
|
|
259
265
|
fieldName: fieldName,
|
|
@@ -285,6 +291,7 @@ class GraphQlApi extends base_api_1.BaseApi {
|
|
|
285
291
|
addJSResolver(typeName, fieldName, dataSource, options) {
|
|
286
292
|
const operationId = `${typeName}.${fieldName}`;
|
|
287
293
|
const description = `Type ${typeName} Field ${fieldName} Resolver`;
|
|
294
|
+
const scope = this.getScopeForTypeName(typeName);
|
|
288
295
|
const resolverDir = './src/js-resolver/';
|
|
289
296
|
const functions = [];
|
|
290
297
|
if (!options || !options.pipelineStepNames || options.pipelineStepNames.length == 0) {
|
|
@@ -311,7 +318,7 @@ class GraphQlApi extends base_api_1.BaseApi {
|
|
|
311
318
|
fs.mkdirSync(resolverDir, { recursive: true });
|
|
312
319
|
this.createJSResolverFile(fn, typeName, fieldName);
|
|
313
320
|
}
|
|
314
|
-
const jsFunction = new aws_cdk_lib_1.aws_appsync.AppsyncFunction(
|
|
321
|
+
const jsFunction = new aws_cdk_lib_1.aws_appsync.AppsyncFunction(scope, fn.functionId, {
|
|
315
322
|
api: this.api,
|
|
316
323
|
name: operationId.replace(/\./g, ''),
|
|
317
324
|
description,
|
|
@@ -347,7 +354,7 @@ class GraphQlApi extends base_api_1.BaseApi {
|
|
|
347
354
|
});
|
|
348
355
|
pipelineConfig.push(jsFunction);
|
|
349
356
|
}
|
|
350
|
-
new aws_cdk_lib_1.aws_appsync.Resolver(
|
|
357
|
+
new aws_cdk_lib_1.aws_appsync.Resolver(scope, `Resolver${operationId}`, {
|
|
351
358
|
api: this.api,
|
|
352
359
|
typeName: typeName,
|
|
353
360
|
fieldName: fieldName,
|
|
@@ -380,7 +387,8 @@ ${Object.entries(options?.stashValues ?? []).map(val => ` ctx.stash.${val[0
|
|
|
380
387
|
fs.mkdirSync('./src/vtl/', { recursive: true });
|
|
381
388
|
fs.writeFileSync(mappingResFile, '$util.toJson($ctx.result)', { encoding: 'utf-8' });
|
|
382
389
|
}
|
|
383
|
-
|
|
390
|
+
const scope = this.getScopeForTypeName(typeName);
|
|
391
|
+
new aws_cdk_lib_1.aws_appsync.Resolver(scope, `Resolver${operationId}`, {
|
|
384
392
|
api: this.api,
|
|
385
393
|
typeName: typeName,
|
|
386
394
|
fieldName: fieldName,
|
|
@@ -389,6 +397,30 @@ ${Object.entries(options?.stashValues ?? []).map(val => ` ctx.stash.${val[0
|
|
|
389
397
|
responseMappingTemplate: aws_cdk_lib_1.aws_appsync.MappingTemplate.fromString(this.substVariables(fs.readFileSync(mappingResFile).toString('utf-8'), options.variables)),
|
|
390
398
|
});
|
|
391
399
|
}
|
|
400
|
+
/**
|
|
401
|
+
* Returns the appropriate scope for creating resources for the given type name.
|
|
402
|
+
* If useNestedStacks is enabled, returns a nested stack for the type name,
|
|
403
|
+
* creating it if it doesn't exist. Otherwise, returns this construct.
|
|
404
|
+
*
|
|
405
|
+
* Query, Mutation, and Subscription each get their own nested stack.
|
|
406
|
+
* All other types (field resolvers) share a single "Field" nested stack.
|
|
407
|
+
*
|
|
408
|
+
* @param typeName - The GraphQL type name (e.g., 'Query', 'Mutation', 'Subscription', or a custom type)
|
|
409
|
+
* @returns The construct to use as scope for creating resources
|
|
410
|
+
*/
|
|
411
|
+
getScopeForTypeName(typeName) {
|
|
412
|
+
if (!this.props.useNestedStacks) {
|
|
413
|
+
return this;
|
|
414
|
+
}
|
|
415
|
+
const rootTypes = ['Query', 'Mutation', 'Subscription'];
|
|
416
|
+
const stackKey = rootTypes.includes(typeName) ? typeName : 'Field';
|
|
417
|
+
if (!this.nestedStacks[stackKey]) {
|
|
418
|
+
this.nestedStacks[stackKey] = new aws_cdk_lib_1.NestedStack(this, `${stackKey}Resolvers`, {
|
|
419
|
+
description: `Nested stack for ${stackKey} resolvers`,
|
|
420
|
+
});
|
|
421
|
+
}
|
|
422
|
+
return this.nestedStacks[stackKey];
|
|
423
|
+
}
|
|
392
424
|
substVariables(data, vars = {}) {
|
|
393
425
|
let res = data;
|
|
394
426
|
for (const name in vars) {
|
|
@@ -457,4 +489,4 @@ function exec(cmd, args, options) {
|
|
|
457
489
|
}
|
|
458
490
|
return proc;
|
|
459
491
|
}
|
|
460
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JhcGhxbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb25zdHJ1Y3RzL2dyYXBocWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsNEJBQTRCO0FBQzVCLGlEQUE0RDtBQUM1RCx1Q0FBeUI7QUFDekIsdUNBQXlCO0FBQ3pCLDZDQUFnTDtBQUdoTCx5Q0FBbUQ7QUFDbkQsaUNBQXdDO0FBQ3hDLCtDQUF5RTtBQTRDekU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXFCRztBQUNILE1BQWEsVUFBc0IsU0FBUSxrQkFBTztJQXNCaEQ7Ozs7OztPQU1HO0lBQ0gsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBVSxLQUFzQjtRQUN0RSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUR3QixVQUFLLEdBQUwsS0FBSyxDQUFpQjtRQWpCeEU7O1dBRUc7UUFDSyxlQUFVLEdBQThDLEVBQUUsQ0FBQztRQWlCakUsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUMsY0FBdUMsQ0FBQztRQUVqRSxJQUFJLGdCQUF1RCxDQUFDO1FBQzVELElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2pCLGdCQUFnQixHQUFHO2dCQUNqQixVQUFVLEVBQUUsSUFBSSxDQUFDLE9BQU87Z0JBQ3hCLFdBQVcsRUFBRSxJQUFJLG9DQUFzQixDQUFDLHVCQUF1QixDQUFDLElBQUksRUFBRSxNQUFNLEVBQUU7b0JBQzVFLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVztvQkFDNUIsTUFBTSxFQUFFLFdBQVc7b0JBQ25CLFVBQVUsRUFBRSxJQUFJLENBQUMsT0FBTztvQkFDeEIsVUFBVSxFQUFFLG9DQUFzQixDQUFDLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO2lCQUNsRixDQUFDO2FBQ0gsQ0FBQztZQUNGLElBQUks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SSxFQUFFLGlCQUFpQixJQUFJLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztRQUN0SSxDQUFDO1FBQ0QsTUFBTSxJQUFJLEtBQUssQ0FBQyxHQUFHLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLG9CQUFvQixPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsdUJBQXVCLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ3pJLENBQUM7SUFFRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuICovXG5pbXBvcnQgeyBTcGF3blN5bmNPcHRpb25zLCBzcGF3blN5bmMgfSBmcm9tICdjaGlsZF9wcm9jZXNzJztcbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJztcbmltcG9ydCAqIGFzIG9zIGZyb20gJ29zJztcbmltcG9ydCB7IEFzc2V0SGFzaFR5cGUsIEJ1bmRsaW5nT3B0aW9ucywgQnVuZGxpbmdPdXRwdXQsIENmbk91dHB1dCwgRG9ja2VySW1hZ2UsIFRhZ3MsIGF3c19hcHBzeW5jLCBhd3NfY2VydGlmaWNhdGVtYW5hZ2VyLCBhd3NfaWFtLCBhd3NfbG9ncywgYXdzX3JvdXRlNTMgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IENvZ25pdG9BdXRoZW50aWNhdGlvbiB9IGZyb20gJy4vYXV0aGVudGljYXRpb24nO1xuaW1wb3J0IHsgQmFzZUFwaSwgQmFzZUFwaVByb3BzIH0gZnJvbSAnLi9iYXNlLWFwaSc7XG5pbXBvcnQgeyBMYW1iZGFGdW5jdGlvbiB9IGZyb20gJy4vZnVuYyc7XG5pbXBvcnQgeyBDRk5fT1VUUFVUX1NVRkZJWF9HUkFQSFFMX0RPTUFJTk5BTUUgfSBmcm9tICcuLi9zaGFyZWQvb3V0cHV0cyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgR3JhcGhRbEFwaVByb3BzIGV4dGVuZHMgQmFzZUFwaVByb3BzIHtcbiAgZGVmaW5pdGlvbkZpbGVOYW1lOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVnRsUmVzb2x2ZXJPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBkYXRhc291cmNlIHRoZSBWVEwgcmVzb2x2ZXIgdGFyZ2V0c1xuICAgKi9cbiAgZGF0YVNvdXJjZTogYXdzX2FwcHN5bmMuQmFzZURhdGFTb3VyY2U7XG5cbiAgLyoqXG4gICAqIHN0cmluZyByZXBsYWNlbWVudHMgdG8gcHJvY2VzcyBvbiB0aGUgVlRMXG4gICAqXG4gICAqIEBkZWZhdWx0IG5vIHZhcmlhYmxlIGV4cGFuc2lvbnNcbiAgICovXG4gIHZhcmlhYmxlcz86IHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEpzUmVzb2x2ZXJPcHRpb25zIHtcbiAgLyoqXG4gICAqIFZhcmlhYmxlcyB0aGF0IHdpbGwgYmUgcHV0IGludG8gdGhlIFwic3Rhc2hcIiBvZiB0aGUgcmVzb2x2ZXIgcGlwZWxpbmVcbiAgICpcbiAgICogQGRlZmF1bHQgbm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgc3Rhc2hWYWx1ZXM/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuXG4gIC8qKlxuICAgKiBuYW1lIG9mIHRoZSBwaXBlbGluZSBzdGVwcyB0byBjcmVhdGVcbiAgICpcbiAgICogQGRlZmF1bHQgLSBvbmx5IGEgZGVmYXVsdCBzdGVwIHdpbGwgYmUgY3JlYXRlZFxuICAgKi9cbiAgcmVhZG9ubHkgcGlwZWxpbmVTdGVwTmFtZXM/OiBzdHJpbmdbXTtcbn1cblxuaW50ZXJmYWNlIEpzUmVzb2x2ZXJDb25maWcge1xuICBuYW1lOiBzdHJpbmc7XG4gIGluZGV4OiBudW1iZXI7XG4gIHN0ZXBDb3VudDogbnVtYmVyO1xuICBlbnRyeUZpbGU6IHN0cmluZztcbiAgZnVuY3Rpb25JZDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRoZSBHcmFwaFFsQXBpIGNvbnN0cnVjdCBzZXRzIHVwIGFuIEFXUyBBcHBTeW5jIEdyYXBoUUwgQVBJIGludGVncmF0ZWQgd2l0aCBDb2duaXRvIGZvciBhdXRoZW50aWNhdGlvbiBhbmQgRHluYW1vREIgZm9yIGRhdGEgc3RvcmFnZS5cbiAqIFRoaXMgY29uc3RydWN0IGZhY2lsaXRhdGVzIHRoZSBjcmVhdGlvbiBvZiBhIEdyYXBoUUwgQVBJIHdpdGggdmFyaW91cyBjb25maWd1cmF0aW9ucywgaW5jbHVkaW5nIGN1c3RvbSBkb21haW4sIGxvZ2dpbmcsIHNjaGVtYSBkZWZpbml0aW9uLFxuICogYW5kIGF1dGhvcml6YXRpb24gdXNpbmcgQ29nbml0byBVc2VyIFBvb2wgYW5kIElkZW50aXR5IFBvb2wuIEl0IGFsc28gcHJvdmlkZXMgbWV0aG9kcyB0byBkeW5hbWljYWxseSBhZGQgcmVzb2x2ZXJzIGFuZCBncmFudCBhY2Nlc3MgdG8gc3BlY2lmaWMgZmllbGRzLlxuICpcbiAqIEB0ZW1wbGF0ZSBSRVNPTFZFUlMgLSBUaGUgdHlwZSBkZWZpbml0aW9uIGZvciB0aGUgR3JhcGhRTCByZXNvbHZlcnMuXG4gKlxuICogQGV4YW1wbGVcbiAqIGNvbnN0IGFwaSA9IG5ldyBHcmFwaFFsQXBpKHRoaXMsICdNeUdyYXBoUWxBcGknLCB7XG4gKiAgIGFwaU5hbWU6ICdNeUFQSScsXG4gKiAgIHN0YWdlTmFtZTogJ2RldicsXG4gKiAgIGRlZmluaXRpb25GaWxlTmFtZTogJ3NjaGVtYS5ncmFwaHFsJyxcbiAqICAgYXV0aGVudGljYXRpb246IG15Q29nbml0b0F1dGgsXG4gKiAgIHNpbmdsZVRhYmxlRGF0YXN0b3JlOiBteUR5bmFtb0RCVGFibGUsXG4gKiB9KTtcbiAqXG4gKiAvLyBBZGQgYSBMYW1iZGEgcmVzb2x2ZXJcbiAqIGFwaS5hZGRMYW1iZGFSZXNvbHZlcignUXVlcnknLCAnZ2V0SXRlbScpO1xuICpcbiAqIC8vIEdyYW50IGFjY2VzcyB0byB1bmF1dGhlbnRpY2F0ZWQgdXNlcnMgZm9yIGEgc3BlY2lmaWMgcXVlcnlcbiAqIGFwaS5ncmFudEFjY2Vzc1VuQXV0aCgnUXVlcnknLCAnZ2V0SXRlbScpO1xuICovXG5leHBvcnQgY2xhc3MgR3JhcGhRbEFwaTxSRVNPTFZFUlM+IGV4dGVuZHMgQmFzZUFwaSB7XG5cbiAgLyoqXG4gICAqIFRoZSBBV1MgQXBwU3luYyBHcmFwaFFMIEFQSSBpbnN0YW5jZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBhcGk6IGF3c19hcHBzeW5jLkdyYXBocWxBcGk7XG5cbiAgLyoqXG4gICAqIFRoZSBvcHRpb25hbCBEeW5hbW9EQiBkYXRhIHNvdXJjZSBmb3IgdGhlIEdyYXBoUUwgQVBJLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHRhYmxlRGF0YVNvdXJjZT86IGF3c19hcHBzeW5jLkR5bmFtb0RiRGF0YVNvdXJjZTtcblxuICAvKipcbiAgICogQSBjb2xsZWN0aW9uIG9mIExhbWJkYSBmdW5jdGlvbnMgdXNlZCBhcyByZXNvbHZlcnMgZm9yIHRoZSBHcmFwaFFMIEFQSS5cbiAgICovXG4gIHByaXZhdGUgX2Z1bmN0aW9uczogeyBbb3BlcmF0aW9uSWQ6IHN0cmluZ106IExhbWJkYUZ1bmN0aW9uIH0gPSB7fTtcblxuICAvKipcbiAgICogVGhlIENvZ25pdG8gYXV0aGVudGljYXRpb24gY29uZmlndXJhdGlvbi5cbiAgICovXG4gIHByaXZhdGUgY29nbml0b0F1dGg6IENvZ25pdG9BdXRoZW50aWNhdGlvbjtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBHcmFwaFFsQXBpLlxuICAgKlxuICAgKiBAcGFyYW0gc2NvcGUgLSBUaGUgc2NvcGUgaW4gd2hpY2ggdGhpcyBjb25zdHJ1Y3QgaXMgZGVmaW5lZC5cbiAgICogQHBhcmFtIGlkIC0gVGhlIHNjb3BlZCBjb25zdHJ1Y3QgSUQuXG4gICAqIEBwYXJhbSBwcm9wcyAtIFRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBHcmFwaFFsQXBpIGNvbnN0cnVjdC5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByaXZhdGUgcHJvcHM6IEdyYXBoUWxBcGlQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgcHJvcHMpO1xuXG4gICAgdGhpcy5jb2duaXRvQXV0aCA9IHByb3BzLmF1dGhlbnRpY2F0aW9uIGFzIENvZ25pdG9BdXRoZW50aWNhdGlvbjtcblxuICAgIGxldCBjdXN0b21Eb21haW5OYW1lOiBhd3NfYXBwc3luYy5Eb21haW5PcHRpb25zIHwgdW5kZWZpbmVkO1xuICAgIGlmICh0aGlzLmFwaUZRRE4pIHtcbiAgICAgIGN1c3RvbURvbWFpbk5hbWUgPSB7XG4gICAgICAgIGRvbWFpbk5hbWU6IHRoaXMuYXBpRlFETixcbiAgICAgICAgY2VydGlmaWNhdGU6IG5ldyBhd3NfY2VydGlmaWNhdGVtYW5hZ2VyLkRuc1ZhbGlkYXRlZENlcnRpZmljYXRlKHRoaXMsICdDZXJ0Jywge1xuICAgICAgICAgIGhvc3RlZFpvbmU6IHRoaXMuaG9zdGVkWm9uZSEsXG4gICAgICAgICAgcmVnaW9uOiAndXMtZWFzdC0xJyxcbiAgICAgICAgICBkb21haW5OYW1lOiB0aGlzLmFwaUZRRE4sXG4gICAgICAgICAgdmFsaWRhdGlvbjogYXdzX2NlcnRpZmljYXRlbWFuYWdlci5DZXJ0aWZpY2F0ZVZhbGlkYXRpb24uZnJvbURucyh0aGlzLmhvc3RlZFpvbmUpLFxuICAgICAgICB9KSxcbiAgICAgIH07XG4gICAgICBuZXcgQ2ZuT3V0cHV0KHRoaXMsICdHcmFwaFFsQXBpRG9tYWluTmFtZScsIHtcbiAgICAgICAga2V5OiBgJHt0aGlzLnByb3BzLmFwaU5hbWV9JHtDRk5fT1VUUFVUX1NVRkZJWF9HUkFQSFFMX0RPTUFJTk5BTUV9YCxcbiAgICAgICAgdmFsdWU6IHRoaXMuYXBpRlFETixcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMuYXBpID0gbmV3IGF3c19hcHBzeW5jLkdyYXBocWxBcGkodGhpcywgJ1Jlc291cmNlJywge1xuICAgICAgbmFtZTogYCR7cHJvcHMuYXBpTmFtZX0gWyR7cHJvcHMuc3RhZ2VOYW1lfV1gLFxuICAgICAgbG9nQ29uZmlnOiB7XG4gICAgICAgIGZpZWxkTG9nTGV2ZWw6IGF3c19hcHBzeW5jLkZpZWxkTG9nTGV2ZWwuQUxMLFxuICAgICAgICByZXRlbnRpb246IGF3c19sb2dzLlJldGVudGlvbkRheXMuVFdPX01PTlRIUyxcbiAgICAgIH0sXG4gICAgICBzY2hlbWE6IGF3c19hcHBzeW5jLlNjaGVtYUZpbGUuZnJvbUFzc2V0KHByb3BzLmRlZmluaXRpb25GaWxlTmFtZSksXG4gICAgICBkb21haW5OYW1lOiBjdXN0b21Eb21haW5OYW1lLFxuICAgICAgLi4udGhpcy5jb2duaXRvQXV0aCAmJiB7XG4gICAgICAgIGF1dGhvcml6YXRpb25Db25maWc6IHtcbiAgICAgICAgICBhZGRpdGlvbmFsQXV0aG9yaXphdGlvbk1vZGVzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGF1dGhvcml6YXRpb25UeXBlOiBhd3NfYXBwc3luYy5BdXRob3JpemF0aW9uVHlwZS5VU0VSX1BPT0wsXG4gICAgICAgICAgICAgIHVzZXJQb29sQ29uZmlnOiB7XG4gICAgICAgICAgICAgICAgdXNlclBvb2w6IHRoaXMuY29nbml0b0F1dGgudXNlcnBvb2wsXG4gICAgICAgICAgICAgICAgZGVmYXVsdEFjdGlvbjogYXdzX2FwcHN5bmMuVXNlclBvb2xEZWZhdWx0QWN0aW9uLkRFTlksXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLi4udGhpcy5jb2duaXRvQXV0aC5pZGVudGl0eVBvb2wgPyBbeyBhdXRob3JpemF0aW9uVHlwZTogYXdzX2FwcHN5bmMuQXV0aG9yaXphdGlvblR5cGUuSUFNIH1dIDogW10sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgaWYgKGN1c3RvbURvbWFpbk5hbWUgJiYgdGhpcy5hcGkuYXBwU3luY0RvbWFpbk5hbWUpIHtcbiAgICAgIG5ldyBhd3Nfcm91dGU1My5DbmFtZVJlY29yZCh0aGlzLCAnRG5zUmVjb3JkJywge1xuICAgICAgICB6b25lOiB0aGlzLmhvc3RlZFpvbmUhLFxuICAgICAgICByZWNvcmROYW1lOiBjdXN0b21Eb21haW5OYW1lLmRvbWFpbk5hbWUsXG4gICAgICAgIGRvbWFpbk5hbWU6IHRoaXMuYXBpLmFwcFN5bmNEb21haW5OYW1lLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gaWYgKChwcm9wcy5tb25pdG9yaW5nID8/IHRydWUpICYmIHRoaXMubW9uaXRvcmluZykge1xuICAgIC8vICAgdGhpcy5tb25pdG9yaW5nLmFwaUVycm9yc1dpZGdldC5hZGRMZWZ0TWV0cmljKG5ldyBjbG91ZHdhdGNoLk1ldHJpYyh7XG4gICAgLy8gICAgIG5hbWVzcGFjZTogJ0FXUy9BcHBTeW5jJyxcbiAgICAvLyAgICAgbWV0cmljTmFtZTogJzVYWEVycm9yJyxcbiAgICAvLyAgICAgZGltZW5zaW9uc01hcDoge1xuICAgIC8vICAgICAgIEdyYXBoUUxBUElJZDogdGhpcy5hcGkuYXBpSWQsXG4gICAgLy8gICAgIH0sXG4gICAgLy8gICAgIHN0YXRpc3RpYzogJ3N1bScsXG4gICAgLy8gICB9KSk7XG4gICAgLy8gICB0aGlzLm1vbml0b3JpbmcuYXBpRXJyb3JzV2lkZ2V0LmFkZExlZnRNZXRyaWMobmV3IGNsb3Vkd2F0Y2guTWV0cmljKHtcbiAgICAvLyAgICAgbmFtZXNwYWNlOiAnQVdTL0FwcFN5bmMnLFxuICAgIC8vICAgICBtZXRyaWNOYW1lOiAnNFhYRXJyb3InLFxuICAgIC8vICAgICBkaW1lbnNpb25zTWFwOiB7XG4gICAgLy8gICAgICAgR3JhcGhRTEFQSUlkOiB0aGlzLmFwaS5hcGlJZCxcbiAgICAvLyAgICAgfSxcbiAgICAvLyAgICAgc3RhdGlzdGljOiAnc3VtJyxcbiAgICAvLyAgIH0pKTtcbiAgICAvLyAgIHRoaXMubW9uaXRvcmluZy5hcGlMYXRlbmN5V2lkZ2V0LmFkZExlZnRNZXRyaWMobmV3IGNsb3Vkd2F0Y2guTWV0cmljKHtcbiAgICAvLyAgICAgbmFtZXNwYWNlOiAnQVdTL0FwcFN5bmMnLFxuICAgIC8vICAgICBtZXRyaWNOYW1lOiAnTGF0ZW5jeScsXG4gICAgLy8gICAgIGRpbWVuc2lvbnNNYXA6IHtcbiAgICAvLyAgICAgICBHcmFwaFFMQVBJSWQ6IHRoaXMuYXBpLmFwaUlkLFxuICAgIC8vICAgICB9LFxuICAgIC8vICAgICBzdGF0aXN0aWM6ICdBdmVyYWdlJyxcbiAgICAvLyAgIH0pKTtcbiAgICAvLyAgIHRoaXMubW9uaXRvcmluZy5hcGlMYXRlbmN5V2lkZ2V0LmFkZExlZnRNZXRyaWMobmV3IGNsb3Vkd2F0Y2guTWV0cmljKHtcbiAgICAvLyAgICAgbmFtZXNwYWNlOiAnQVdTL0FwcFN5bmMnLFxuICAgIC8vICAgICBtZXRyaWNOYW1lOiAnTGF0ZW5jeScsXG4gICAgLy8gICAgIGRpbWVuc2lvbnNNYXA6IHtcbiAgICAvLyAgICAgICBHcmFwaFFMQVBJSWQ6IHRoaXMuYXBpLmFwaUlkLFxuICAgIC8vICAgICB9LFxuICAgIC8vICAgICBzdGF0aXN0aWM6ICdwOTAnLFxuICAgIC8vICAgfSkpO1xuICAgIC8vICAgdGhpcy5tb25pdG9yaW5nLmFwaUxhdGVuY3lUYWlsV2lkZ2V0LmFkZExlZnRNZXRyaWMobmV3IGNsb3Vkd2F0Y2guTWV0cmljKHtcbiAgICAvLyAgICAgbmFtZXNwYWNlOiAnQVdTL0FwcFN5bmMnLFxuICAgIC8vICAgICBtZXRyaWNOYW1lOiAnTGF0ZW5jeScsXG4gICAgLy8gICAgIGRpbWVuc2lvbnNNYXA6IHtcbiAgICAvLyAgICAgICBHcmFwaFFMQVBJSWQ6IHRoaXMuYXBpLmFwaUlkLFxuICAgIC8vICAgICB9LFxuICAgIC8vICAgICBzdGF0aXN0aWM6ICdwOTUnLFxuICAgIC8vICAgfSkpO1xuICAgIC8vICAgdGhpcy5tb25pdG9yaW5nLmFwaUxhdGVuY3lUYWlsV2lkZ2V0LmFkZExlZnRNZXRyaWMobmV3IGNsb3Vkd2F0Y2guTWV0cmljKHtcbiAgICAvLyAgICAgbmFtZXNwYWNlOiAnQVdTL0FwcFN5bmMnLFxuICAgIC8vICAgICBtZXRyaWNOYW1lOiAnTGF0ZW5jeScsXG4gICAgLy8gICAgIGRpbWVuc2lvbnNNYXA6IHtcbiAgICAvLyAgICAgICBHcmFwaFFMQVBJSWQ6IHRoaXMuYXBpLmFwaUlkLFxuICAgIC8vICAgICB9LFxuICAgIC8vICAgICBzdGF0aXN0aWM6ICdwOTknLFxuICAgIC8vICAgfSkpO1xuICAgIC8vIH1cblxuICAgIGlmIChwcm9wcy5zaW5nbGVUYWJsZURhdGFzdG9yZSkge1xuICAgICAgdGhpcy50YWJsZURhdGFTb3VyY2UgPSBuZXcgYXdzX2FwcHN5bmMuRHluYW1vRGJEYXRhU291cmNlKHRoaXMsICdTaW5nbGVUYWJsZVNvdXJjZScsIHtcbiAgICAgICAgYXBpOiB0aGlzLmFwaSxcbiAgICAgICAgdGFibGU6IHByb3BzLnNpbmdsZVRhYmxlRGF0YXN0b3JlPy50YWJsZSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKi9cbiAgcHVibGljIGdyYW50QWNjZXNzPFRZUEUgZXh0ZW5kcyBrZXlvZiBSRVNPTFZFUlMsIEZJRUxEVFlQRSBleHRlbmRzIE5vbk51bGxhYmxlPFJFU09MVkVSU1tUWVBFXT4+KFxuICAgIGdyYW50ZWU6IGF3c19pYW0uSUdyYW50YWJsZSxcbiAgICB0eXBlTmFtZTogVFlQRSxcbiAgICAuLi5maWVsZE5hbWVzOiAoa2V5b2YgRklFTERUWVBFKVtdKTogdm9pZCB7XG4gICAgdGhpcy5hcGkuZ3JhbnQoZ3JhbnRlZSwgYXdzX2FwcHN5bmMuSWFtUmVzb3VyY2Uub2ZUeXBlKHR5cGVOYW1lIGFzIHN0cmluZywgLi4uZmllbGROYW1lcyBhcyBzdHJpbmdbXSksICdhcHBzeW5jOkdyYXBoUUwnKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKi9cbiAgcHVibGljIGdyYW50QWNjZXNzVW5BdXRoPFRZUEUgZXh0ZW5kcyBrZXlvZiBSRVNPTFZFUlMsIEZJRUxEVFlQRSBleHRlbmRzIE5vbk51bGxhYmxlPFJFU09MVkVSU1tUWVBFXT4+KFxuICAgIHR5cGVOYW1lOiBUWVBFLFxuICAgIC4uLmZpZWxkTmFtZXM6IChrZXlvZiBGSUVMRFRZUEUpW11cbiAgKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmNvZ25pdG9BdXRoLmlkZW50aXR5UG9vbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgZ3JhbnQgdG8gQ29nbml0byBpZGVudGl0eSBwb29sIGFzIG5vbmUgaXMgcHJvdmlkZWQnKTtcbiAgICB9XG4gICAgdGhpcy5ncmFudEFjY2Vzcyh0aGlzLmNvZ25pdG9BdXRoLmlkZW50aXR5UG9vbC51bmF1dGhlbnRpY2F0ZWRSb2xlLCB0eXBlTmFtZSwgLi4uZmllbGROYW1lcyk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICovXG4gIHB1YmxpYyBncmFudEFjY2Vzc0F1dGg8VFlQRSBleHRlbmRzIGtleW9mIFJFU09MVkVSUywgRklFTERUWVBFIGV4dGVuZHMgTm9uTnVsbGFibGU8UkVTT0xWRVJTW1RZUEVdPj4oXG4gICAgdHlwZU5hbWU6IFRZUEUsXG4gICAgLi4uZmllbGROYW1lczogKGtleW9mIEZJRUxEVFlQRSlbXVxuICApOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuY29nbml0b0F1dGguaWRlbnRpdHlQb29sKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBncmFudCB0byBDb2duaXRvIGlkZW50aXR5IHBvb2wgYXMgbm9uZSBpcyBwcm92aWRlZCcpO1xuICAgIH1cbiAgICB0aGlzLmdyYW50QWNjZXNzKHRoaXMuY29nbml0b0F1dGguaWRlbnRpdHlQb29sLmF1dGhlbnRpY2F0ZWRSb2xlLCB0eXBlTmFtZSwgLi4uZmllbGROYW1lcyk7XG4gIH1cblxuXG4gIC8qKlxuICAgKiBnZXRGdW5jdGlvbkZvck9wZXJhdGlvblxuICAgKi9cbiAgcHVibGljIGdldEZ1bmN0aW9uRm9yT3BlcmF0aW9uPFRZUEUgZXh0ZW5kcyBrZXlvZiBSRVNPTFZFUlMsIEZJRUxEVFlQRSBleHRlbmRzIE5vbk51bGxhYmxlPFJFU09MVkVSU1tUWVBFXT4+KFxuICAgIHR5cGVOYW1lOiBUWVBFLFxuICAgIGZpZWxkTmFtZToga2V5b2YgRklFTERUWVBFLFxuICApOiBMYW1iZGFGdW5jdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuX2Z1bmN0aW9uc1tgJHt0eXBlTmFtZSBhcyBzdHJpbmd9LiR7ZmllbGROYW1lIGFzIFN0cmluZ31gXTtcbiAgfVxuXG4gIHB1YmxpYyBhZGRMYW1iZGFSZXNvbHZlcjxUWVBFIGV4dGVuZHMga2V5b2YgUkVTT0xWRVJTLCBGSUVMRFRZUEUgZXh0ZW5kcyBOb25OdWxsYWJsZTxSRVNPTFZFUlNbVFlQRV0+PihcbiAgICB0eXBlTmFtZTogVFlQRSxcbiAgICBmaWVsZE5hbWU6IGtleW9mIEZJRUxEVFlQRSxcbiAgKTogTGFtYmRhRnVuY3Rpb24ge1xuICAgIGNvbnN0IG9wZXJhdGlvbklkID0gYCR7dHlwZU5hbWUgYXMgc3RyaW5nfS4ke2ZpZWxkTmFtZSBhcyBTdHJpbmd9YDtcbiAgICBjb25zdCBkZXNjcmlwdGlvbiA9IGBUeXBlICR7dHlwZU5hbWUgYXMgc3RyaW5nfSBGaWVsZCAke2ZpZWxkTmFtZSBhcyBTdHJpbmd9IFJlc29sdmVyYDtcblxuICAgIGNvbnN0IGVudHJ5RmlsZSA9IGAuL3NyYy9sYW1iZGEvJHtvcGVyYXRpb25JZH0udHNgO1xuICAgIGlmICghZnMuZXhpc3RzU3luYyhlbnRyeUZpbGUpKSB7XG4gICAgICBmcy5ta2RpclN5bmMoJy4vc3JjL2xhbWJkYS8nLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgIHRoaXMuY3JlYXRlRW50cnlGaWxlKGVudHJ5RmlsZSwgdHlwZU5hbWUgYXMgc3RyaW5nLCBmaWVsZE5hbWUgYXMgc3RyaW5nKTtcbiAgICB9XG5cbiAgICBjb25zdCBmbiA9IG5ldyBMYW1iZGFGdW5jdGlvbih0aGlzLCBgRm4ke29wZXJhdGlvbklkfWAsIHtcbiAgICAgIHN0YWdlTmFtZTogdGhpcy5wcm9wcy5zdGFnZU5hbWUsXG4gICAgICBhZGRpdGlvbmFsRW52OiB0aGlzLnByb3BzLmFkZGl0aW9uYWxFbnYsXG4gICAgICBlbnRyeTogZW50cnlGaWxlLFxuICAgICAgZGVzY3JpcHRpb246IGBbJHt0aGlzLnByb3BzLnN0YWdlTmFtZX1dICR7ZGVzY3JpcHRpb259YCxcbiAgICAgIC4uLnRoaXMucHJvcHMuYXV0aGVudGljYXRpb24gJiYge1xuICAgICAgICB1c2VyUG9vbDogKHRoaXMucHJvcHMuYXV0aGVudGljYXRpb24gYXMgQ29nbml0b0F1dGhlbnRpY2F0aW9uKS51c2VycG9vbCxcbiAgICAgIH0sXG4gICAgICAuLi50aGlzLnByb3BzLnNpbmdsZVRhYmxlRGF0YXN0b3JlICYmIHtcbiAgICAgICAgdGFibGU6IHRoaXMucHJvcHMuc2luZ2xlVGFibGVEYXRhc3RvcmUudGFibGUsXG4gICAgICAgIHRhYmxlV3JpdGVzOiB0eXBlTmFtZSA9PT0gJ011dGF0aW9uJyxcbiAgICAgIH0sXG4gICAgICAuLi50aGlzLnByb3BzLmFzc2V0Q2RuICYmIHtcbiAgICAgICAgYXNzZXREb21haW5OYW1lOiB0aGlzLnByb3BzLmFzc2V0Q2RuLmFzc2V0RG9tYWluTmFtZSxcbiAgICAgICAgYXNzZXRCdWNrZXQ6IHRoaXMucHJvcHMuYXNzZXRDZG4uYXNzZXRCdWNrZXQsXG4gICAgICB9LFxuICAgICAgbGFtYmRhT3B0aW9uczogdGhpcy5wcm9wcy5sYW1iZGFPcHRpb25zLFxuICAgICAgbGFtYmRhVHJhY2luZzogdGhpcy5wcm9wcy5sYW1iZGFUcmFjaW5nLFxuICAgIH0pO1xuICAgIHRoaXMuX2Z1bmN0aW9uc1tvcGVyYXRpb25JZF0gPSBmbjtcbiAgICBUYWdzLm9mKGZuKS5hZGQoJ0dyYXBoUUwnLCBkZXNjcmlwdGlvbik7XG5cbiAgICAvLyBpZiAodGhpcy5tb25pdG9yaW5nKSB7XG4gICAgLy8gICB0aGlzLm1vbml0b3JpbmcubGFtYmRhRHVyYXRpb25zV2lkZ2V0LmFkZExlZnRNZXRyaWMoZm4ubWV0cmljRHVyYXRpb24oKSk7XG4gICAgLy8gICB0aGlzLm1vbml0b3JpbmcubGFtYmRhSW52b2tlc1dpZGdldC5hZGRMZWZ0TWV0cmljKGZuLm1ldHJpY0ludm9jYXRpb25zKCkpO1xuICAgIC8vICAgdGhpcy5tb25pdG9yaW5nLmxhbWJkYUVycm9yc1dpZGdldC5hZGRMZWZ0TWV0cmljKGZuLm1ldHJpY0Vycm9ycygpKTtcbiAgICAvLyAgIHRoaXMubW9uaXRvcmluZy5sYW1iZGFFcnJvcnNXaWRnZXQuYWRkTGVmdE1ldHJpYyhmbi5tZXRyaWNUaHJvdHRsZXMoKSk7XG4gICAgLy8gfVxuXG4gICAgY29uc3QgZGF0YVNvdXJjZSA9IG5ldyBhd3NfYXBwc3luYy5MYW1iZGFEYXRhU291cmNlKHRoaXMsIGBMYW1iZGFEUyR7b3BlcmF0aW9uSWR9YCwge1xuICAgICAgYXBpOiB0aGlzLmFwaSxcbiAgICAgIG5hbWU6IGBMYW1iZGFfJHt0eXBlTmFtZSBhcyBzdHJpbmd9XyR7ZmllbGROYW1lIGFzIFN0cmluZ31gLFxuICAgICAgbGFtYmRhRnVuY3Rpb246IGZuLFxuICAgIH0pO1xuXG4gICAgbmV3IGF3c19hcHBzeW5jLlJlc29sdmVyKHRoaXMsIGBSZXNvbHZlciR7b3BlcmF0aW9uSWR9YCwge1xuICAgICAgYXBpOiB0aGlzLmFwaSxcbiAgICAgIHR5cGVOYW1lOiB0eXBlTmFtZSBhcyBzdHJpbmcsXG4gICAgICBmaWVsZE5hbWU6IGZpZWxkTmFtZSBhcyBzdHJpbmcsXG4gICAgICBkYXRhU291cmNlLFxuICAgIH0pO1xuICAgIHJldHVybiBmbjtcbiAgfVxuXG4gIHB1YmxpYyBhZGREeW5hbW9EYlZ0bFJlc29sdmVyPFRZUEUgZXh0ZW5kcyBrZXlvZiBSRVNPTFZFUlMsIEZJRUxEVFlQRSBleHRlbmRzIE5vbk51bGxhYmxlPFJFU09MVkVSU1tUWVBFXT4+KFxuICAgIHR5cGVOYW1lOiBUWVBFLFxuICAgIGZpZWxkTmFtZToga2V5b2YgRklFTERUWVBFLFxuICAgIG9wdGlvbnM/OiBPbWl0PFZ0bFJlc29sdmVyT3B0aW9ucywgJ2RhdGFTb3VyY2UnPik6IHZvaWQge1xuICAgIGlmICghdGhpcy50YWJsZURhdGFTb3VyY2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRHluYW1vREIgaXMgbm90IGluaXRpYWxpemVkJyk7XG4gICAgfVxuICAgIHRoaXMuYWRkVnRsUmVzb2x2ZXIodHlwZU5hbWUsIGZpZWxkTmFtZSwge1xuICAgICAgZGF0YVNvdXJjZTogdGhpcy50YWJsZURhdGFTb3VyY2UsXG4gICAgICAuLi5vcHRpb25zLFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGFkZER5bmFtb0RiSlNSZXNvbHZlcjxUWVBFIGV4dGVuZHMga2V5b2YgUkVTT0xWRVJTLCBGSUVMRFRZUEUgZXh0ZW5kcyBOb25OdWxsYWJsZTxSRVNPTFZFUlNbVFlQRV0+PihcbiAgICB0eXBlTmFtZTogVFlQRSxcbiAgICBmaWVsZE5hbWU6IGtleW9mIEZJRUxEVFlQRSxcbiAgICBvcHRpb25zPzogSnNSZXNvbHZlck9wdGlvbnMpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMudGFibGVEYXRhU291cmNlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0R5bmFtb0RCIGlzIG5vdCBpbml0aWFsaXplZCcpO1xuICAgIH1cbiAgICB0aGlzLmFkZEpTUmVzb2x2ZXIodHlwZU5hbWUsIGZpZWxkTmFtZSwgdGhpcy50YWJsZURhdGFTb3VyY2UsIHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBzdGFzaFZhbHVlczoge1xuICAgICAgICAuLi5vcHRpb25zPy5zdGFzaFZhbHVlcyA/PyB7fSxcbiAgICAgICAgdGFibGU6IHRoaXMucHJvcHMuc2luZ2xlVGFibGVEYXRhc3RvcmUhLnRhYmxlLnRhYmxlTmFtZSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYWRkSlNSZXNvbHZlcjxUWVBFIGV4dGVuZHMga2V5b2YgUkVTT0xWRVJTLCBGSUVMRFRZUEUgZXh0ZW5kcyBOb25OdWxsYWJsZTxSRVNPTFZFUlNbVFlQRV0+PihcbiAgICB0eXBlTmFtZTogVFlQRSxcbiAgICBmaWVsZE5hbWU6IGtleW9mIEZJRUxEVFlQRSxcbiAgICBkYXRhU291cmNlOiBhd3NfYXBwc3luYy5CYXNlRGF0YVNvdXJjZSwgb3B0aW9ucz86IEpzUmVzb2x2ZXJPcHRpb25zKTogdm9pZCB7XG4gICAgY29uc3Qgb3BlcmF0aW9uSWQgPSBgJHt0eXBlTmFtZSBhcyBzdHJpbmd9LiR7ZmllbGROYW1lIGFzIFN0cmluZ31gO1xuICAgIGNvbnN0IGRlc2NyaXB0aW9uID0gYFR5cGUgJHt0eXBlTmFtZSBhcyBzdHJpbmd9IEZpZWxkICR7ZmllbGROYW1lIGFzIFN0cmluZ30gUmVzb2x2ZXJgO1xuXG4gICAgY29uc3QgcmVzb2x2ZXJEaXIgPSAnLi9zcmMvanMtcmVzb2x2ZXIvJztcbiAgICBjb25zdCBmdW5jdGlvbnM6IEpzUmVzb2x2ZXJDb25maWdbXSA9IFtdO1xuXG4gICAgaWYgKCFvcHRpb25zIHx8ICFvcHRpb25zLnBpcGVsaW5lU3RlcE5hbWVzIHx8IG9wdGlvbnMucGlwZWxpbmVTdGVwTmFtZXMubGVuZ3RoID09IDApIHtcbiAgICAgIGZ1bmN0aW9ucy5wdXNoKHtcbiAgICAgICAgbmFtZTogJ2RlZmF1bHQnLFxuICAgICAgICBpbmRleDogMCxcbiAgICAgICAgc3RlcENvdW50OiAxLFxuICAgICAgICBlbnRyeUZpbGU6IGAke3Jlc29sdmVyRGlyfS8ke29wZXJhdGlvbklkfS50c2AsXG4gICAgICAgIGZ1bmN0aW9uSWQ6IGBKU0Z1bmN0aW9uJHtvcGVyYXRpb25JZH1gLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZ1bmN0aW9ucy5wdXNoKC4uLm9wdGlvbnMucGlwZWxpbmVTdGVwTmFtZXMubWFwKChuYW1lLCBpbmRleCkgPT4gKHtcbiAgICAgICAgbmFtZSxcbiAgICAgICAgaW5kZXgsXG4gICAgICAgIHN0ZXBDb3VudDogb3B0aW9ucy5waXBlbGluZVN0ZXBOYW1lcyEubGVuZ3RoLFxuICAgICAgICBlbnRyeUZpbGU6IGAke3Jlc29sdmVyRGlyfS8ke29wZXJhdGlvbklkfS4ke25hbWV9LnRzYCxcbiAgICAgICAgZnVuY3Rpb25JZDogYEpTRnVuY3Rpb24ke29wZXJhdGlvbklkfSR7bmFtZX1gLFxuICAgICAgfSkpKTtcbiAgICB9XG5cbiAgICBjb25zdCBwaXBlbGluZUNvbmZpZyA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBmbiBvZiBmdW5jdGlvbnMpIHtcbiAgICAgIGlmICghZnMuZXhpc3RzU3luYyhmbi5lbnRyeUZpbGUpKSB7XG4gICAgICAgIGZzLm1rZGlyU3luYyhyZXNvbHZlckRpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICAgIHRoaXMuY3JlYXRlSlNSZXNvbHZlckZpbGUoZm4sIHR5cGVOYW1lIGFzIHN0cmluZywgZmllbGROYW1lIGFzIHN0cmluZyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGpzRnVuY3Rpb24gPSBuZXcgYXdzX2FwcHN5bmMuQXBwc3luY0Z1bmN0aW9uKHRoaXMsIGZuLmZ1bmN0aW9uSWQsIHtcbiAgICAgICAgYXBpOiB0aGlzLmFwaSxcbiAgICAgICAgbmFtZTogb3BlcmF0aW9uSWQucmVwbGFjZSgvXFwuL2csICcnKSxcbiAgICAgICAgZGVzY3JpcHRpb24sXG4gICAgICAgIGRhdGFTb3VyY2UsXG4gICAgICAgIGNvZGU6IGF3c19hcHBzeW5jLkNvZGUuZnJvbUFzc2V0KCcuJywge1xuICAgICAgICAgIGFzc2V0SGFzaFR5cGU6IEFzc2V0SGFzaFR5cGUuT1VUUFVULFxuICAgICAgICAgIGRlcGxveVRpbWU6IHRydWUsXG4gICAgICAgICAgYnVuZGxpbmc6IHtcbiAgICAgICAgICAgIGltYWdlOiBEb2NrZXJJbWFnZS5mcm9tUmVnaXN0cnkoJ2R1bW15JyksIC8vIFdpbGwgbmV2ZXIgYmUgdXNlZCBkdWUgdG8gbG9jYWwgYnVuZGxpbmdcbiAgICAgICAgICAgIG91dHB1dFR5cGU6IEJ1bmRsaW5nT3V0cHV0LlNJTkdMRV9GSUxFLFxuICAgICAgICAgICAgZnVuY3Rpb25JZDogZm4uZnVuY3Rpb25JZCxcbiAgICAgICAgICAgIGxvY2FsOiB7XG4gICAgICAgICAgICAgIHRyeUJ1bmRsZShvdXRwdXREaXIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBvc1BsYXRmb3JtID0gb3MucGxhdGZvcm0oKTtcbiAgICAgICAgICAgICAgICBleGVjKFxuICAgICAgICAgICAgICAgICAgb3NQbGF0Zm9ybSA9PT0gJ3dpbjMyJyA/ICdjbWQnIDogJ2Jhc2gnLFxuICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICBvc1BsYXRmb3JtID09PSAnd2luMzInID8gJy9jJyA6ICctYycsXG4gICAgICAgICAgICAgICAgICAgIGBlc2J1aWxkIC0tYnVuZGxlIC0tc291cmNlbWFwPWlubGluZSAtLXNvdXJjZXMtY29udGVudD1mYWxzZSAtLXRhcmdldD1lc25leHQgLS1wbGF0Zm9ybT1ub2RlIC0tZm9ybWF0PWVzbSAtLWV4dGVybmFsOkBhd3MtYXBwc3luYy91dGlscyAtLW91dGRpcj0ke291dHB1dERpcn0gJHtmbi5lbnRyeUZpbGV9YCxcbiAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGVudjogeyAuLi5wcm9jZXNzLmVudiB9LFxuICAgICAgICAgICAgICAgICAgICBzdGRpbzogWyAvLyBzaG93IG91dHB1dFxuICAgICAgICAgICAgICAgICAgICAgICdpZ25vcmUnLCAvLyBpZ25vcmUgc3RkaW9cbiAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzLnN0ZGVyciwgLy8gcmVkaXJlY3Qgc3Rkb3V0IHRvIHN0ZGVyclxuICAgICAgICAgICAgICAgICAgICAgICdpbmhlcml0JywgLy8gaW5oZXJpdCBzdGRlcnJcbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgd2luZG93c1ZlcmJhdGltQXJndW1lbnRzOiBvc1BsYXRmb3JtID09PSAnd2luMzInLFxuICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSBhcyBCdW5kbGluZ09wdGlvbnMsXG4gICAgICAgIH0pLFxuICAgICAgICBydW50aW1lOiBhd3NfYXBwc3luYy5GdW5jdGlvblJ1bnRpbWUuSlNfMV8wXzAsXG4gICAgICB9KTtcbiAgICAgIHBpcGVsaW5lQ29uZmlnLnB1c2goanNGdW5jdGlvbik7XG4gICAgfVxuXG4gICAgbmV3IGF3c19hcHBzeW5jLlJlc29sdmVyKHRoaXMsIGBSZXNvbHZlciR7b3BlcmF0aW9uSWR9YCwge1xuICAgICAgYXBpOiB0aGlzLmFwaSxcbiAgICAgIHR5cGVOYW1lOiB0eXBlTmFtZSBhcyBzdHJpbmcsXG4gICAgICBmaWVsZE5hbWU6IGZpZWxkTmFtZSBhcyBzdHJpbmcsXG4gICAgICBydW50aW1lOiBhd3NfYXBwc3luYy5GdW5jdGlvblJ1bnRpbWUuSlNfMV8wXzAsXG4gICAgICBwaXBlbGluZUNvbmZpZyxcbiAgICAgIGNvZGU6IGF3c19hcHBzeW5jLkNvZGUuZnJvbUlubGluZShgXG4gICAgLy8gVGhlIGJlZm9yZSBzdGVwXG4gICAgZXhwb3J0IGZ1bmN0aW9uIHJlcXVlc3QoY3R4KSB7XG4gICAgICBjb25zb2xlLmxvZyhjdHgpO1xuJHtPYmplY3QuZW50cmllcyhvcHRpb25zPy5zdGFzaFZhbHVlcyA/PyBbXSkubWFwKHZhbCA9PiBgICAgICAgY3R4LnN0YXNoLiR7dmFsWzBdfSA9ICcke3ZhbFsxXX0nYCkuam9pbignXFxuJyl9XG4gICAgICByZXR1cm4ge31cbiAgICB9XG5cbiAgICAvLyBUaGUgYWZ0ZXIgc3RlcFxuICAgIGV4cG9ydCBmdW5jdGlvbiByZXNwb25zZShjdHgpIHtcbiAgICAgIHJldHVybiBjdHgucHJldi5yZXN1bHRcbiAgICB9XG4gIGApLFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGFkZFZ0bFJlc29sdmVyPFRZUEUgZXh0ZW5kcyBrZXlvZiBSRVNPTFZFUlMsIEZJRUxEVFlQRSBleHRlbmRzIE5vbk51bGxhYmxlPFJFU09MVkVSU1tUWVBFXT4+KFxuICAgIHR5cGVOYW1lOiBUWVBFLFxuICAgIGZpZWxkTmFtZToga2V5b2YgRklFTERUWVBFLFxuICAgIG9wdGlvbnM6IFZ0bFJlc29sdmVyT3B0aW9ucyk6IHZvaWQge1xuICAgIGNvbnN0IG9wZXJhdGlvbklkID0gYCR7dHlwZU5hbWUgYXMgc3RyaW5nfS4ke2ZpZWxkTmFtZSBhcyBTdHJpbmd9YDtcblxuICAgIGNvbnN0IG1hcHBpbmdSZXFGaWxlID0gYC4vc3JjL3Z0bC8ke29wZXJhdGlvbklkfS5yZXEudnRsYDtcbiAgICBpZiAoIWZzLmV4aXN0c1N5bmMobWFwcGluZ1JlcUZpbGUpKSB7XG4gICAgICBmcy5ta2RpclN5bmMoJy4vc3JjL3Z0bC8nLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgIGZzLndyaXRlRmlsZVN5bmMobWFwcGluZ1JlcUZpbGUsICcjIyBSZXF1ZXN0IG1hcHBpbmcnLCB7IGVuY29kaW5nOiAndXRmLTgnIH0pO1xuICAgIH1cbiAgICBjb25zdCBtYXBwaW5nUmVzRmlsZSA9IGAuL3NyYy92dGwvJHtvcGVyYXRpb25JZH0ucmVzLnZ0bGA7XG4gICAgaWYgKCFmcy5leGlzdHNTeW5jKG1hcHBpbmdSZXNGaWxlKSkge1xuICAgICAgZnMubWtkaXJTeW5jKCcuL3NyYy92dGwvJywgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICBmcy53cml0ZUZpbGVTeW5jKG1hcHBpbmdSZXNGaWxlLCAnJHV0aWwudG9Kc29uKCRjdHgucmVzdWx0KScsIHsgZW5jb2Rpbmc6ICd1dGYtOCcgfSk7XG4gICAgfVxuXG4gICAgbmV3IGF3c19hcHBzeW5jLlJlc29sdmVyKHRoaXMsIGBSZXNvbHZlciR7b3BlcmF0aW9uSWR9YCwge1xuICAgICAgYXBpOiB0aGlzLmFwaSxcbiAgICAgIHR5cGVOYW1lOiB0eXBlTmFtZSBhcyBzdHJpbmcsXG4gICAgICBmaWVsZE5hbWU6IGZpZWxkTmFtZSBhcyBzdHJpbmcsXG4gICAgICBkYXRhU291cmNlOiBvcHRpb25zLmRhdGFTb3VyY2UsXG4gICAgICByZXF1ZXN0TWFwcGluZ1RlbXBsYXRlOiBhd3NfYXBwc3luYy5NYXBwaW5nVGVtcGxhdGUuZnJvbVN0cmluZyh0aGlzLnN1YnN0VmFyaWFibGVzKGZzLnJlYWRGaWxlU3luYyhtYXBwaW5nUmVxRmlsZSkudG9TdHJpbmcoJ3V0Zi04JyksIG9wdGlvbnMudmFyaWFibGVzKSksXG4gICAgICByZXNwb25zZU1hcHBpbmdUZW1wbGF0ZTogYXdzX2FwcHN5bmMuTWFwcGluZ1RlbXBsYXRlLmZyb21TdHJpbmcodGhpcy5zdWJzdFZhcmlhYmxlcyhmcy5yZWFkRmlsZVN5bmMobWFwcGluZ1Jlc0ZpbGUpLnRvU3RyaW5nKCd1dGYtOCcpLCBvcHRpb25zLnZhcmlhYmxlcykpLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzdWJzdFZhcmlhYmxlcyhkYXRhOiBzdHJpbmcsIHZhcnM6IHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB9ID0ge30pOiBzdHJpbmcge1xuICAgIGxldCByZXMgPSBkYXRhO1xuICAgIGZvciAoY29uc3QgbmFtZSBpbiB2YXJzKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHZhcnMsIG5hbWUpKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdmFyc1tuYW1lXTtcbiAgICAgICAgcmVzID0gcmVzLnJlcGxhY2UobmV3IFJlZ0V4cChgXFxcXCRcXHske25hbWV9XFx9YCwgJ2cnKSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVFbnRyeUZpbGUoZW50cnlGaWxlOiBzdHJpbmcsIHR5cGVOYW1lOiBzdHJpbmcsIGZpZWxkTmFtZTogc3RyaW5nKSB7XG4gICAgY29uc3QgYXJnVHlwZSA9IGAke3R5cGVOYW1lfSR7dXBwZXJjYXNlRmlyc3QoZmllbGROYW1lKX1BcmdzYDtcbiAgICBmcy53cml0ZUZpbGVTeW5jKGVudHJ5RmlsZSwgYGltcG9ydCB7IGFwaSB9IGZyb20gJ2Nkay1zZXJ2ZXJsZXNzL2xpYi9sYW1iZGEnO1xuaW1wb3J0IHsgJHt0eXBlTmFtZX0sICR7YXJnVHlwZX0gfSBmcm9tICcuLi9nZW5lcmF0ZWQvZ3JhcGhxbC4ke3RoaXMucHJvcHMuYXBpTmFtZS50b0xvd2VyQ2FzZSgpfS1tb2RlbC5nZW5lcmF0ZWQnO1xuXG5leHBvcnQgY29uc3QgaGFuZGxlciA9IGFwaS5jcmVhdGVBcHBTeW5jSGFuZGxlcjwke2FyZ1R5cGV9LCAke3R5cGVOYW1lfVsnJHtmaWVsZE5hbWV9J10+KGFzeW5jIChjdHgpID0+IHtcbiAgY3R4LmxvZ2dlci5pbmZvKEpTT04uc3RyaW5naWZ5KGN0eC5ldmVudCkpO1xuICB0aHJvdyBuZXcgRXJyb3IoJ05vdCB5ZXQgaW1wbGVtZW50ZWQnKTtcbn0pO2AsIHtcbiAgICAgIGVuY29kaW5nOiAndXRmLTgnLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVKU1Jlc29sdmVyRmlsZShmbjogSnNSZXNvbHZlckNvbmZpZywgdHlwZU5hbWU6IHN0cmluZywgZmllbGROYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCBhcmdUeXBlID0gYCR7dHlwZU5hbWV9JHt1cHBlcmNhc2VGaXJzdChmaWVsZE5hbWUpfUFyZ3NgO1xuICAgIGNvbnN0IHJldHVyblR5cGUgPSAoZm4uaW5kZXggPT0gKGZuLnN0ZXBDb3VudCAtIDEpKSA/IGAke3R5cGVOYW1lfVsnJHtmaWVsZE5hbWV9J11gIDogJ2FueSc7XG5cbiAgICBmcy53cml0ZUZpbGVTeW5jKGZuLmVudHJ5RmlsZSwgYGltcG9ydCB7IENvbnRleHQsIHV0aWwgfSBmcm9tICdAYXdzLWFwcHN5bmMvdXRpbHMnO1xuaW1wb3J0IHsgJHt0eXBlTmFtZX0sICR7YXJnVHlwZX0gfSBmcm9tICcuLi9nZW5lcmF0ZWQvZ3JhcGhxbC4ke3RoaXMucHJvcHMuYXBpTmFtZS50b0xvd2VyQ2FzZSgpfS1tb2RlbC5nZW5lcmF0ZWQnO1xuXG4vKipcbiAqIFJlcXVlc3QgZm9yICR7dHlwZU5hbWV9LiR7ZmllbGROYW1lfSAoU3RlcDogJHtmbi5uYW1lfSAke2ZuLmluZGV4ICsgMX0vJHtmbi5zdGVwQ291bnR9KVxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVxdWVzdChjdHg6IENvbnRleHQ8JHthcmdUeXBlfT4pOiBhbnkge1xuICBjb25zb2xlLmxvZyhjdHgpO1xuICByZXR1cm4ge307XG59XG5cbi8qKlxuICogUmVzcG9uc2UgZm9yICR7dHlwZU5hbWV9LiR7ZmllbGROYW1lfSAoU3RlcDogJHtmbi5uYW1lfSAke2ZuLmluZGV4ICsgMX0vJHtmbi5zdGVwQ291bnR9KVxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzcG9uc2UoY3R4OiBDb250ZXh0PCR7YXJnVHlwZX0+KTogJHtyZXR1cm5UeXBlfSB7XG4gIGNvbnNvbGUubG9nKGN0eCk7XG4gIHJldHVybiBjdHgucmVzdWx0Lml0ZW1zO1xufWAsIHtcbiAgICAgIGVuY29kaW5nOiAndXRmLTgnLFxuICAgIH0pO1xuICB9XG5cbn1cblxuZnVuY3Rpb24gdXBwZXJjYXNlRmlyc3QodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB2YWx1ZS5zdWJzdHJpbmcoMCwgMSkudG9VcHBlckNhc2UoKSArIHZhbHVlLnN1YnN0cmluZygxKTtcbn1cblxuLyoqXG4gKiBDb3BpZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvYmxvYi9tYWluL3BhY2thZ2VzL2F3cy1jZGstbGliL2F3cy1sYW1iZGEtbm9kZWpzL2xpYi91dGlsLnRzXG4gKiBhcyBpdCBpcyBub3QgZXhwb3J0ZWQgYnkgYXdzLWNkay1saWJcbiAqL1xuZnVuY3Rpb24gZXhlYyhjbWQ6IHN0cmluZywgYXJnczogc3RyaW5nW10sIG9wdGlvbnM/OiBTcGF3blN5bmNPcHRpb25zKSB7XG4gIGNvbnN0IHByb2MgPSBzcGF3blN5bmMoY21kLCBhcmdzLCBvcHRpb25zKTtcblxuICBpZiAocHJvYy5lcnJvcikge1xuICAgIHRocm93IHByb2MuZXJyb3I7XG4gIH1cblxuICBpZiAocHJvYy5zdGF0dXMgIT09IDApIHtcbiAgICBpZiAocHJvYy5zdGRvdXQgfHwgcHJvYy5zdGRlcnIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgW1N0YXR1cyAke3Byb2Muc3RhdHVzfV0gc3Rkb3V0OiAke3Byb2Muc3Rkb3V0Py50b1N0cmluZygpLnRyaW0oKX1cXG5cXG5cXG5zdGRlcnI6ICR7cHJvYy5zdGRlcnI/LnRvU3RyaW5nKCkudHJpbSgpfWApO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoYCR7Y21kfSAke2FyZ3Muam9pbignICcpfSAke29wdGlvbnM/LmN3ZCA/IGBydW4gaW4gZGlyZWN0b3J5ICR7b3B0aW9ucy5jd2R9YCA6ICcnfSBleGl0ZWQgd2l0aCBzdGF0dXMgJHtwcm9jLnN0YXR1c31gKTtcbiAgfVxuXG4gIHJldHVybiBwcm9jO1xufVxuXG4iXX0=
|
|
492
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JhcGhxbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb25zdHJ1Y3RzL2dyYXBocWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsNEJBQTRCO0FBQzVCLGlEQUE0RDtBQUM1RCx1Q0FBeUI7QUFDekIsdUNBQXlCO0FBQ3pCLDZDQUE2TDtBQUc3TCx5Q0FBbUQ7QUFDbkQsaUNBQXdDO0FBQ3hDLCtDQUF5RTtBQStEekU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXFCRztBQUNILE1BQWEsVUFBc0IsU0FBUSxrQkFBTztJQTRCaEQ7Ozs7OztPQU1HO0lBQ0gsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBbUIsS0FBc0I7UUFDL0UsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFEaUMsVUFBSyxHQUFMLEtBQUssQ0FBaUI7UUF2QmpGOztXQUVHO1FBQ0ssZUFBVSxHQUE4QyxFQUFFLENBQUM7UUFFbkU7OztXQUdHO1FBQ2MsaUJBQVksR0FBd0MsRUFBRSxDQUFDO1FBaUJ0RSxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQyxjQUF1QyxDQUFDO1FBRWpFLElBQUksZ0JBQXVELENBQUM7UUFDNUQsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDakIsZ0JBQWdCLEdBQUc7Z0JBQ2pCLFVBQVUsRUFBRSxJQUFJLENBQUMsT0FBTztnQkFDeEIsV0FBVyxFQUFFLElBQUksb0NBQXNCLENBQUMsdUJBQXVCLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRTtvQkFDNUUsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFXO29CQUM1QixNQUFNLEVBQUUsV0FBVztvQkFDbkIsVUFBVSxFQUFFLElBQUksQ0FBQyxPQUFPO29CQUN4QixVQUFVLEVBQUUsb0NBQXNCLENBQUMscUJBQXFCLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxV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QyxHQUFHLENBQUMsSUFBSSxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxvQkFBb0IsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLHVCQUF1QixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUN6SSxDQUFDO0lBRUQsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiAqL1xuaW1wb3J0IHsgU3Bhd25TeW5jT3B0aW9ucywgc3Bhd25TeW5jIH0gZnJvbSAnY2hpbGRfcHJvY2Vzcyc7XG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcyc7XG5pbXBvcnQgKiBhcyBvcyBmcm9tICdvcyc7XG5pbXBvcnQgeyBBc3NldEhhc2hUeXBlLCBCdW5kbGluZ09wdGlvbnMsIEJ1bmRsaW5nT3V0cHV0LCBDZm5PdXRwdXQsIERvY2tlckltYWdlLCBOZXN0ZWRTdGFjaywgVGFncywgYXdzX2FwcHN5bmMsIGF3c19jZXJ0aWZpY2F0ZW1hbmFnZXIsIGF3c19pYW0sIGF3c19sb2dzLCBhd3Nfcm91dGU1MyB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgQ29nbml0b0F1dGhlbnRpY2F0aW9uIH0gZnJvbSAnLi9hdXRoZW50aWNhdGlvbic7XG5pbXBvcnQgeyBCYXNlQXBpLCBCYXNlQXBpUHJvcHMgfSBmcm9tICcuL2Jhc2UtYXBpJztcbmltcG9ydCB7IExhbWJkYUZ1bmN0aW9uIH0gZnJvbSAnLi9mdW5jJztcbmltcG9ydCB7IENGTl9PVVRQVVRfU1VGRklYX0dSQVBIUUxfRE9NQUlOTkFNRSB9IGZyb20gJy4uL3NoYXJlZC9vdXRwdXRzJztcblxuZXhwb3J0IGludGVyZmFjZSBHcmFwaFFsQXBpUHJvcHMgZXh0ZW5kcyBCYXNlQXBpUHJvcHMge1xuICBkZWZpbml0aW9uRmlsZU5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogSWYgdHJ1ZSwgcmVzb2x2ZXJzIGFuZCBMYW1iZGEgZnVuY3Rpb25zIHdpbGwgYmUgY3JlYXRlZCBpbiBuZXN0ZWQgc3RhY2tzXG4gICAqIGdyb3VwZWQgYnkgdHlwZSAoUXVlcnksIE11dGF0aW9uLCBTdWJzY3JpcHRpb24sIEZpZWxkKS5cbiAgICpcbiAgICogV0FSTklORzogT25seSBlbmFibGUgdGhpcyBpZiB5b3UgYXJlIGFwcHJvYWNoaW5nIG9yIGhpdHRpbmcgQ2xvdWRGb3JtYXRpb24nc1xuICAgKiA1MDAgcmVzb3VyY2UgbGltaXQuIE5lc3RlZCBzdGFja3MgaGF2ZSBzaWduaWZpY2FudCBkb3duc2lkZXM6XG4gICAqIC0gU2xvd2VyIGRlcGxveW1lbnRzIGR1ZSB0byBhZGRpdGlvbmFsIHN0YWNrIG9wZXJhdGlvbnNcbiAgICogLSBNb3JlIGNvbXBsZXggZGVidWdnaW5nIGFuZCBlcnJvciB0cmFjaW5nXG4gICAqIC0gSGFyZGVyIHRvIG5hdmlnYXRlIGluIHRoZSBDbG91ZEZvcm1hdGlvbiBjb25zb2xlXG4gICAqIC0gQ3Jvc3Mtc3RhY2sgcmVmZXJlbmNlcyBhZGQgY29tcGxleGl0eVxuICAgKlxuICAgKiBXQVJOSU5HOiBDaGFuZ2luZyB0aGlzIHNldHRpbmcgb24gYW4gZXhpc3Rpbmcgc3RhY2sgcmVxdWlyZXMgbWFudWFsIGludGVydmVudGlvbi5cbiAgICogQ2xvdWRGb3JtYXRpb24gY2Fubm90IGF1dG9tYXRpY2FsbHkgbW92ZSByZXNvdXJjZXMgYmV0d2VlbiBzdGFja3MuIFlvdSBtYXkgbmVlZFxuICAgKiB0byBkZWxldGUgYW5kIHJlY3JlYXRlIHJlc29sdmVycywgb3IgcGVyZm9ybSBhIHR3by1zdGVwIGRlcGxveW1lbnQuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICB1c2VOZXN0ZWRTdGFja3M/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFZ0bFJlc29sdmVyT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgZGF0YXNvdXJjZSB0aGUgVlRMIHJlc29sdmVyIHRhcmdldHNcbiAgICovXG4gIGRhdGFTb3VyY2U6IGF3c19hcHBzeW5jLkJhc2VEYXRhU291cmNlO1xuXG4gIC8qKlxuICAgKiBzdHJpbmcgcmVwbGFjZW1lbnRzIHRvIHByb2Nlc3Mgb24gdGhlIFZUTFxuICAgKlxuICAgKiBAZGVmYXVsdCBubyB2YXJpYWJsZSBleHBhbnNpb25zXG4gICAqL1xuICB2YXJpYWJsZXM/OiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmcgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBKc1Jlc29sdmVyT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBWYXJpYWJsZXMgdGhhdCB3aWxsIGJlIHB1dCBpbnRvIHRoZSBcInN0YXNoXCIgb2YgdGhlIHJlc29sdmVyIHBpcGVsaW5lXG4gICAqXG4gICAqIEBkZWZhdWx0IG5vbmVcbiAgICovXG4gIHJlYWRvbmx5IHN0YXNoVmFsdWVzPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcblxuICAvKipcbiAgICogbmFtZSBvZiB0aGUgcGlwZWxpbmUgc3RlcHMgdG8gY3JlYXRlXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gb25seSBhIGRlZmF1bHQgc3RlcCB3aWxsIGJlIGNyZWF0ZWRcbiAgICovXG4gIHJlYWRvbmx5IHBpcGVsaW5lU3RlcE5hbWVzPzogc3RyaW5nW107XG59XG5cbmludGVyZmFjZSBKc1Jlc29sdmVyQ29uZmlnIHtcbiAgbmFtZTogc3RyaW5nO1xuICBpbmRleDogbnVtYmVyO1xuICBzdGVwQ291bnQ6IG51bWJlcjtcbiAgZW50cnlGaWxlOiBzdHJpbmc7XG4gIGZ1bmN0aW9uSWQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGUgR3JhcGhRbEFwaSBjb25zdHJ1Y3Qgc2V0cyB1cCBhbiBBV1MgQXBwU3luYyBHcmFwaFFMIEFQSSBpbnRlZ3JhdGVkIHdpdGggQ29nbml0byBmb3IgYXV0aGVudGljYXRpb24gYW5kIER5bmFtb0RCIGZvciBkYXRhIHN0b3JhZ2UuXG4gKiBUaGlzIGNvbnN0cnVjdCBmYWNpbGl0YXRlcyB0aGUgY3JlYXRpb24gb2YgYSBHcmFwaFFMIEFQSSB3aXRoIHZhcmlvdXMgY29uZmlndXJhdGlvbnMsIGluY2x1ZGluZyBjdXN0b20gZG9tYWluLCBsb2dnaW5nLCBzY2hlbWEgZGVmaW5pdGlvbixcbiAqIGFuZCBhdXRob3JpemF0aW9uIHVzaW5nIENvZ25pdG8gVXNlciBQb29sIGFuZCBJZGVudGl0eSBQb29sLiBJdCBhbHNvIHByb3ZpZGVzIG1ldGhvZHMgdG8gZHluYW1pY2FsbHkgYWRkIHJlc29sdmVycyBhbmQgZ3JhbnQgYWNjZXNzIHRvIHNwZWNpZmljIGZpZWxkcy5cbiAqXG4gKiBAdGVtcGxhdGUgUkVTT0xWRVJTIC0gVGhlIHR5cGUgZGVmaW5pdGlvbiBmb3IgdGhlIEdyYXBoUUwgcmVzb2x2ZXJzLlxuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBhcGkgPSBuZXcgR3JhcGhRbEFwaSh0aGlzLCAnTXlHcmFwaFFsQXBpJywge1xuICogICBhcGlOYW1lOiAnTXlBUEknLFxuICogICBzdGFnZU5hbWU6ICdkZXYnLFxuICogICBkZWZpbml0aW9uRmlsZU5hbWU6ICdzY2hlbWEuZ3JhcGhxbCcsXG4gKiAgIGF1dGhlbnRpY2F0aW9uOiBteUNvZ25pdG9BdXRoLFxuICogICBzaW5nbGVUYWJsZURhdGFzdG9yZTogbXlEeW5hbW9EQlRhYmxlLFxuICogfSk7XG4gKlxuICogLy8gQWRkIGEgTGFtYmRhIHJlc29sdmVyXG4gKiBhcGkuYWRkTGFtYmRhUmVzb2x2ZXIoJ1F1ZXJ5JywgJ2dldEl0ZW0nKTtcbiAqXG4gKiAvLyBHcmFudCBhY2Nlc3MgdG8gdW5hdXRoZW50aWNhdGVkIHVzZXJzIGZvciBhIHNwZWNpZmljIHF1ZXJ5XG4gKiBhcGkuZ3JhbnRBY2Nlc3NVbkF1dGgoJ1F1ZXJ5JywgJ2dldEl0ZW0nKTtcbiAqL1xuZXhwb3J0IGNsYXNzIEdyYXBoUWxBcGk8UkVTT0xWRVJTPiBleHRlbmRzIEJhc2VBcGkge1xuXG4gIC8qKlxuICAgKiBUaGUgQVdTIEFwcFN5bmMgR3JhcGhRTCBBUEkgaW5zdGFuY2UuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYXBpOiBhd3NfYXBwc3luYy5HcmFwaHFsQXBpO1xuXG4gIC8qKlxuICAgKiBUaGUgb3B0aW9uYWwgRHluYW1vREIgZGF0YSBzb3VyY2UgZm9yIHRoZSBHcmFwaFFMIEFQSS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB0YWJsZURhdGFTb3VyY2U/OiBhd3NfYXBwc3luYy5EeW5hbW9EYkRhdGFTb3VyY2U7XG5cbiAgLyoqXG4gICAqIEEgY29sbGVjdGlvbiBvZiBMYW1iZGEgZnVuY3Rpb25zIHVzZWQgYXMgcmVzb2x2ZXJzIGZvciB0aGUgR3JhcGhRTCBBUEkuXG4gICAqL1xuICBwcml2YXRlIF9mdW5jdGlvbnM6IHsgW29wZXJhdGlvbklkOiBzdHJpbmddOiBMYW1iZGFGdW5jdGlvbiB9ID0ge307XG5cbiAgLyoqXG4gICAqIE5lc3RlZCBzdGFja3MgZm9yIHJlc29sdmVycywgZ3JvdXBlZCBieSB0eXBlIG5hbWUuXG4gICAqIE9ubHkgdXNlZCB3aGVuIHVzZU5lc3RlZFN0YWNrcyBpcyB0cnVlLlxuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBuZXN0ZWRTdGFja3M6IHsgW3R5cGVOYW1lOiBzdHJpbmddOiBOZXN0ZWRTdGFjayB9ID0ge307XG5cbiAgLyoqXG4gICAqIFRoZSBDb2duaXRvIGF1dGhlbnRpY2F0aW9uIGNvbmZpZ3VyYXRpb24uXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGNvZ25pdG9BdXRoOiBDb2duaXRvQXV0aGVudGljYXRpb247XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgR3JhcGhRbEFwaS5cbiAgICpcbiAgICogQHBhcmFtIHNjb3BlIC0gVGhlIHNjb3BlIGluIHdoaWNoIHRoaXMgY29uc3RydWN0IGlzIGRlZmluZWQuXG4gICAqIEBwYXJhbSBpZCAtIFRoZSBzY29wZWQgY29uc3RydWN0IElELlxuICAgKiBAcGFyYW0gcHJvcHMgLSBUaGUgcHJvcGVydGllcyBvZiB0aGUgR3JhcGhRbEFwaSBjb25zdHJ1Y3QuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcml2YXRlIHJlYWRvbmx5IHByb3BzOiBHcmFwaFFsQXBpUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHByb3BzKTtcblxuICAgIHRoaXMuY29nbml0b0F1dGggPSBwcm9wcy5hdXRoZW50aWNhdGlvbiBhcyBDb2duaXRvQXV0aGVudGljYXRpb247XG5cbiAgICBsZXQgY3VzdG9tRG9tYWluTmFtZTogYXdzX2FwcHN5bmMuRG9tYWluT3B0aW9ucyB8IHVuZGVmaW5lZDtcbiAgICBpZiAodGhpcy5hcGlGUUROKSB7XG4gICAgICBjdXN0b21Eb21haW5OYW1lID0ge1xuICAgICAgICBkb21haW5OYW1lOiB0aGlzLmFwaUZRRE4sXG4gICAgICAgIGNlcnRpZmljYXRlOiBuZXcgYXdzX2NlcnRpZmljYXRlbWFuYWdlci5EbnNWYWxpZGF0ZWRDZXJ0aWZpY2F0ZSh0aGlzLCAnQ2VydCcsIHtcbiAgICAgICAgICBob3N0ZWRab25lOiB0aGlzLmhvc3RlZFpvbmUhLFxuICAgICAgICAgIHJlZ2lvbjogJ3VzLWVhc3QtMScsXG4gICAgICAgICAgZG9tYWluTmFtZTogdGhpcy5hcGlGUUROLFxuICAgICAgICAgIHZhbGlkYXRpb246IGF3c19jZXJ0aWZpY2F0ZW1hbmFnZXIuQ2VydGlmaWNhdGVWYWxpZGF0aW9uLmZyb21EbnModGhpcy5ob3N0ZWRab25lKSxcbiAgICAgICAgfSksXG4gICAgICB9O1xuICAgICAgbmV3IENmbk91dHB1dCh0aGlzLCAnR3JhcGhRbEFwaURvbWFpbk5hbWUnLCB7XG4gICAgICAgIGtleTogYCR7dGhpcy5wcm9wcy5hcGlOYW1lfSR7Q0ZOX09VVFBVVF9TVUZGSVhfR1JBUEhRTF9ET01BSU5OQU1FfWAsXG4gICAgICAgIHZhbHVlOiB0aGlzLmFwaUZRRE4sXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLmFwaSA9IG5ldyBhd3NfYXBwc3luYy5HcmFwaHFsQXBpKHRoaXMsICdSZXNvdXJjZScsIHtcbiAgICAgIG5hbWU6IGAke3Byb3BzLmFwaU5hbWV9IFske3Byb3BzLnN0YWdlTmFtZX1dYCxcbiAgICAgIGxvZ0NvbmZpZzoge1xuICAgICAgICBmaWVsZExvZ0xldmVsOiBhd3NfYXBwc3luYy5GaWVsZExvZ0xldmVsLkFMTCxcbiAgICAgICAgcmV0ZW50aW9uOiBhd3NfbG9ncy5SZXRlbnRpb25EYXlzLlRXT19NT05USFMsXG4gICAgICB9LFxuICAgICAgc2NoZW1hOiBhd3NfYXBwc3luYy5TY2hlbWFGaWxlLmZyb21Bc3NldChwcm9wcy5kZWZpbml0aW9uRmlsZU5hbWUpLFxuICAgICAgZG9tYWluTmFtZTogY3VzdG9tRG9tYWluTmFtZSxcbiAgICAgIC4uLnRoaXMuY29nbml0b0F1dGggJiYge1xuICAgICAgICBhdXRob3JpemF0aW9uQ29uZmlnOiB7XG4gICAgICAgICAgYWRkaXRpb25hbEF1dGhvcml6YXRpb25Nb2RlczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBhdXRob3JpemF0aW9uVHlwZTogYXdzX2FwcHN5bmMuQXV0aG9yaXphdGlvblR5cGUuVVNFUl9QT09MLFxuICAgICAgICAgICAgICB1c2VyUG9vbENvbmZpZzoge1xuICAgICAgICAgICAgICAgIHVzZXJQb29sOiB0aGlzLmNvZ25pdG9BdXRoLnVzZXJwb29sLFxuICAgICAgICAgICAgICAgIGRlZmF1bHRBY3Rpb246IGF3c19hcHBzeW5jLlVzZXJQb29sRGVmYXVsdEFjdGlvbi5ERU5ZLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC4uLnRoaXMuY29nbml0b0F1dGguaWRlbnRpdHlQb29sID8gW3sgYXV0aG9yaXphdGlvblR5cGU6IGF3c19hcHBzeW5jLkF1dGhvcml6YXRpb25UeXBlLklBTSB9XSA6IFtdLFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pO1xuICAgIGlmIChjdXN0b21Eb21haW5OYW1lICYmIHRoaXMuYXBpLmFwcFN5bmNEb21haW5OYW1lKSB7XG4gICAgICBuZXcgYXdzX3JvdXRlNTMuQ25hbWVSZWNvcmQodGhpcywgJ0Ruc1JlY29yZCcsIHtcbiAgICAgICAgem9uZTogdGhpcy5ob3N0ZWRab25lISxcbiAgICAgICAgcmVjb3JkTmFtZTogY3VzdG9tRG9tYWluTmFtZS5kb21haW5OYW1lLFxuICAgICAgICBkb21haW5OYW1lOiB0aGlzLmFwaS5hcHBTeW5jRG9tYWluTmFtZSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIGlmICgocHJvcHMubW9uaXRvcmluZyA/PyB0cnVlKSAmJiB0aGlzLm1vbml0b3JpbmcpIHtcbiAgICAvLyAgIHRoaXMubW9uaXRvcmluZy5hcGlFcnJvcnNXaWRnZXQuYWRkTGVmdE1ldHJpYyhuZXcgY2xvdWR3YXRjaC5NZXRyaWMoe1xuICAgIC8vICAgICBuYW1lc3BhY2U6ICdBV1MvQXBwU3luYycsXG4gICAgLy8gICAgIG1ldHJpY05hbWU6ICc1WFhFcnJvcicsXG4gICAgLy8gICAgIGRpbWVuc2lvbnNNYXA6IHtcbiAgICAvLyAgICAgICBHcmFwaFFMQVBJSWQ6IHRoaXMuYXBpLmFwaUlkLFxuICAgIC8vICAgICB9LFxuICAgIC8vICAgICBzdGF0aXN0aWM6ICdzdW0nLFxuICAgIC8vICAgfSkpO1xuICAgIC8vICAgdGhpcy5tb25pdG9yaW5nLmFwaUVycm9yc1dpZGdldC5hZGRMZWZ0TWV0cmljKG5ldyBjbG91ZHdhdGNoLk1ldHJpYyh7XG4gICAgLy8gICAgIG5hbWVzcGFjZTogJ0FXUy9BcHBTeW5jJyxcbiAgICAvLyAgICAgbWV0cmljTmFtZTogJzRYWEVycm9yJyxcbiAgICAvLyAgICAgZGltZW5zaW9uc01hcDoge1xuICAgIC8vICAgICAgIEdyYXBoUUxBUElJZDogdGhpcy5hcGkuYXBpSWQsXG4gICAgLy8gICAgIH0sXG4gICAgLy8gICAgIHN0YXRpc3RpYzogJ3N1bScsXG4gICAgLy8gICB9KSk7XG4gICAgLy8gICB0aGlzLm1vbml0b3JpbmcuYXBpTGF0ZW5jeVdpZGdldC5hZGRMZWZ0TWV0cmljKG5ldyBjbG91ZHdhdGNoLk1ldHJpYyh7XG4gICAgLy8gICAgIG5hbWVzcGFjZTogJ0FXUy9BcHBTeW5jJyxcbiAgICAvLyAgICAgbWV0cmljTmFtZTogJ0xhdGVuY3knLFxuICAgIC8vICAgICBkaW1lbnNpb25zTWFwOiB7XG4gICAgLy8gICAgICAgR3JhcGhRTEFQSUlkOiB0aGlzLmFwaS5hcGlJZCxcbiAgICAvLyAgICAgfSxcbiAgICAvLyAgICAgc3RhdGlzdGljOiAnQXZlcmFnZScsXG4gICAgLy8gICB9KSk7XG4gICAgLy8gICB0aGlzLm1vbml0b3JpbmcuYXBpTGF0ZW5jeVdpZGdldC5hZGRMZWZ0TWV0cmljKG5ldyBjbG91ZHdhdGNoLk1ldHJpYyh7XG4gICAgLy8gICAgIG5hbWVzcGFjZTogJ0FXUy9BcHBTeW5jJyxcbiAgICAvLyAgICAgbWV0cmljTmFtZTogJ0xhdGVuY3knLFxuICAgIC8vICAgICBkaW1lbnNpb25zTWFwOiB7XG4gICAgLy8gICAgICAgR3JhcGhRTEFQSUlkOiB0aGlzLmFwaS5hcGlJZCxcbiAgICAvLyAgICAgfSxcbiAgICAvLyAgICAgc3RhdGlzdGljOiAncDkwJyxcbiAgICAvLyAgIH0pKTtcbiAgICAvLyAgIHRoaXMubW9uaXRvcmluZy5hcGlMYXRlbmN5VGFpbFdpZGdldC5hZGRMZWZ0TWV0cmljKG5ldyBjbG91ZHdhdGNoLk1ldHJpYyh7XG4gICAgLy8gICAgIG5hbWVzcGFjZTogJ0FXUy9BcHBTeW5jJyxcbiAgICAvLyAgICAgbWV0cmljTmFtZTogJ0xhdGVuY3knLFxuICAgIC8vICAgICBkaW1lbnNpb25zTWFwOiB7XG4gICAgLy8gICAgICAgR3JhcGhRTEFQSUlkOiB0aGlzLmFwaS5hcGlJZCxcbiAgICAvLyAgICAgfSxcbiAgICAvLyAgICAgc3RhdGlzdGljOiAncDk1JyxcbiAgICAvLyAgIH0pKTtcbiAgICAvLyAgIHRoaXMubW9uaXRvcmluZy5hcGlMYXRlbmN5VGFpbFdpZGdldC5hZGRMZWZ0TWV0cmljKG5ldyBjbG91ZHdhdGNoLk1ldHJpYyh7XG4gICAgLy8gICAgIG5hbWVzcGFjZTogJ0FXUy9BcHBTeW5jJyxcbiAgICAvLyAgICAgbWV0cmljTmFtZTogJ0xhdGVuY3knLFxuICAgIC8vICAgICBkaW1lbnNpb25zTWFwOiB7XG4gICAgLy8gICAgICAgR3JhcGhRTEFQSUlkOiB0aGlzLmFwaS5hcGlJZCxcbiAgICAvLyAgICAgfSxcbiAgICAvLyAgICAgc3RhdGlzdGljOiAncDk5JyxcbiAgICAvLyAgIH0pKTtcbiAgICAvLyB9XG5cbiAgICBpZiAocHJvcHMuc2luZ2xlVGFibGVEYXRhc3RvcmUpIHtcbiAgICAgIHRoaXMudGFibGVEYXRhU291cmNlID0gbmV3IGF3c19hcHBzeW5jLkR5bmFtb0RiRGF0YVNvdXJjZSh0aGlzLCAnU2luZ2xlVGFibGVTb3VyY2UnLCB7XG4gICAgICAgIGFwaTogdGhpcy5hcGksXG4gICAgICAgIHRhYmxlOiBwcm9wcy5zaW5nbGVUYWJsZURhdGFzdG9yZT8udGFibGUsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICovXG4gIHB1YmxpYyBncmFudEFjY2VzczxUWVBFIGV4dGVuZHMga2V5b2YgUkVTT0xWRVJTLCBGSUVMRFRZUEUgZXh0ZW5kcyBOb25OdWxsYWJsZTxSRVNPTFZFUlNbVFlQRV0+PihcbiAgICBncmFudGVlOiBhd3NfaWFtLklHcmFudGFibGUsXG4gICAgdHlwZU5hbWU6IFRZUEUsXG4gICAgLi4uZmllbGROYW1lczogKGtleW9mIEZJRUxEVFlQRSlbXSk6IHZvaWQge1xuICAgIHRoaXMuYXBpLmdyYW50KGdyYW50ZWUsIGF3c19hcHBzeW5jLklhbVJlc291cmNlLm9mVHlwZSh0eXBlTmFtZSBhcyBzdHJpbmcsIC4uLmZpZWxkTmFtZXMgYXMgc3RyaW5nW10pLCAnYXBwc3luYzpHcmFwaFFMJyk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICovXG4gIHB1YmxpYyBncmFudEFjY2Vzc1VuQXV0aDxUWVBFIGV4dGVuZHMga2V5b2YgUkVTT0xWRVJTLCBGSUVMRFRZUEUgZXh0ZW5kcyBOb25OdWxsYWJsZTxSRVNPTFZFUlNbVFlQRV0+PihcbiAgICB0eXBlTmFtZTogVFlQRSxcbiAgICAuLi5maWVsZE5hbWVzOiAoa2V5b2YgRklFTERUWVBFKVtdXG4gICk6IHZvaWQge1xuICAgIGlmICghdGhpcy5jb2duaXRvQXV0aC5pZGVudGl0eVBvb2wpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGdyYW50IHRvIENvZ25pdG8gaWRlbnRpdHkgcG9vbCBhcyBub25lIGlzIHByb3ZpZGVkJyk7XG4gICAgfVxuICAgIHRoaXMuZ3JhbnRBY2Nlc3ModGhpcy5jb2duaXRvQXV0aC5pZGVudGl0eVBvb2wudW5hdXRoZW50aWNhdGVkUm9sZSwgdHlwZU5hbWUsIC4uLmZpZWxkTmFtZXMpO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqL1xuICBwdWJsaWMgZ3JhbnRBY2Nlc3NBdXRoPFRZUEUgZXh0ZW5kcyBrZXlvZiBSRVNPTFZFUlMsIEZJRUxEVFlQRSBleHRlbmRzIE5vbk51bGxhYmxlPFJFU09MVkVSU1tUWVBFXT4+KFxuICAgIHR5cGVOYW1lOiBUWVBFLFxuICAgIC4uLmZpZWxkTmFtZXM6IChrZXlvZiBGSUVMRFRZUEUpW11cbiAgKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmNvZ25pdG9BdXRoLmlkZW50aXR5UG9vbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgZ3JhbnQgdG8gQ29nbml0byBpZGVudGl0eSBwb29sIGFzIG5vbmUgaXMgcHJvdmlkZWQnKTtcbiAgICB9XG4gICAgdGhpcy5ncmFudEFjY2Vzcyh0aGlzLmNvZ25pdG9BdXRoLmlkZW50aXR5UG9vbC5hdXRoZW50aWNhdGVkUm9sZSwgdHlwZU5hbWUsIC4uLmZpZWxkTmFtZXMpO1xuICB9XG5cblxuICAvKipcbiAgICogZ2V0RnVuY3Rpb25Gb3JPcGVyYXRpb25cbiAgICovXG4gIHB1YmxpYyBnZXRGdW5jdGlvbkZvck9wZXJhdGlvbjxUWVBFIGV4dGVuZHMga2V5b2YgUkVTT0xWRVJTLCBGSUVMRFRZUEUgZXh0ZW5kcyBOb25OdWxsYWJsZTxSRVNPTFZFUlNbVFlQRV0+PihcbiAgICB0eXBlTmFtZTogVFlQRSxcbiAgICBmaWVsZE5hbWU6IGtleW9mIEZJRUxEVFlQRSxcbiAgKTogTGFtYmRhRnVuY3Rpb24ge1xuICAgIHJldHVybiB0aGlzLl9mdW5jdGlvbnNbYCR7dHlwZU5hbWUgYXMgc3RyaW5nfS4ke2ZpZWxkTmFtZSBhcyBTdHJpbmd9YF07XG4gIH1cblxuICBwdWJsaWMgYWRkTGFtYmRhUmVzb2x2ZXI8VFlQRSBleHRlbmRzIGtleW9mIFJFU09MVkVSUywgRklFTERUWVBFIGV4dGVuZHMgTm9uTnVsbGFibGU8UkVTT0xWRVJTW1RZUEVdPj4oXG4gICAgdHlwZU5hbWU6IFRZUEUsXG4gICAgZmllbGROYW1lOiBrZXlvZiBGSUVMRFRZUEUsXG4gICk6IExhbWJkYUZ1bmN0aW9uIHtcbiAgICBjb25zdCBvcGVyYXRpb25JZCA9IGAke3R5cGVOYW1lIGFzIHN0cmluZ30uJHtmaWVsZE5hbWUgYXMgU3RyaW5nfWA7XG4gICAgY29uc3QgZGVzY3JpcHRpb24gPSBgVHlwZSAke3R5cGVOYW1lIGFzIHN0cmluZ30gRmllbGQgJHtmaWVsZE5hbWUgYXMgU3RyaW5nfSBSZXNvbHZlcmA7XG5cbiAgICBjb25zdCBlbnRyeUZpbGUgPSBgLi9zcmMvbGFtYmRhLyR7b3BlcmF0aW9uSWR9LnRzYDtcbiAgICBpZiAoIWZzLmV4aXN0c1N5bmMoZW50cnlGaWxlKSkge1xuICAgICAgZnMubWtkaXJTeW5jKCcuL3NyYy9sYW1iZGEvJywgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICB0aGlzLmNyZWF0ZUVudHJ5RmlsZShlbnRyeUZpbGUsIHR5cGVOYW1lIGFzIHN0cmluZywgZmllbGROYW1lIGFzIHN0cmluZyk7XG4gICAgfVxuXG4gICAgY29uc3Qgc2NvcGUgPSB0aGlzLmdldFNjb3BlRm9yVHlwZU5hbWUodHlwZU5hbWUgYXMgc3RyaW5nKTtcblxuICAgIGNvbnN0IGZuID0gbmV3IExhbWJkYUZ1bmN0aW9uKHNjb3BlLCBgRm4ke29wZXJhdGlvbklkfWAsIHtcbiAgICAgIHN0YWdlTmFtZTogdGhpcy5wcm9wcy5zdGFnZU5hbWUsXG4gICAgICBhZGRpdGlvbmFsRW52OiB0aGlzLnByb3BzLmFkZGl0aW9uYWxFbnYsXG4gICAgICBlbnRyeTogZW50cnlGaWxlLFxuICAgICAgZGVzY3JpcHRpb246IGBbJHt0aGlzLnByb3BzLnN0YWdlTmFtZX1dICR7ZGVzY3JpcHRpb259YCxcbiAgICAgIC4uLnRoaXMucHJvcHMuYXV0aGVudGljYXRpb24gJiYge1xuICAgICAgICB1c2VyUG9vbDogKHRoaXMucHJvcHMuYXV0aGVudGljYXRpb24gYXMgQ29nbml0b0F1dGhlbnRpY2F0aW9uKS51c2VycG9vbCxcbiAgICAgIH0sXG4gICAgICAuLi50aGlzLnByb3BzLnNpbmdsZVRhYmxlRGF0YXN0b3JlICYmIHtcbiAgICAgICAgdGFibGU6IHRoaXMucHJvcHMuc2luZ2xlVGFibGVEYXRhc3RvcmUudGFibGUsXG4gICAgICAgIHRhYmxlV3JpdGVzOiB0eXBlTmFtZSA9PT0gJ011dGF0aW9uJyxcbiAgICAgIH0sXG4gICAgICAuLi50aGlzLnByb3BzLmFzc2V0Q2RuICYmIHtcbiAgICAgICAgYXNzZXREb21haW5OYW1lOiB0aGlzLnByb3BzLmFzc2V0Q2RuLmFzc2V0RG9tYWluTmFtZSxcbiAgICAgICAgYXNzZXRCdWNrZXQ6IHRoaXMucHJvcHMuYXNzZXRDZG4uYXNzZXRCdWNrZXQsXG4gICAgICB9LFxuICAgICAgbGFtYmRhT3B0aW9uczogdGhpcy5wcm9wcy5sYW1iZGFPcHRpb25zLFxuICAgICAgbGFtYmRhVHJhY2luZzogdGhpcy5wcm9wcy5sYW1iZGFUcmFjaW5nLFxuICAgIH0pO1xuICAgIHRoaXMuX2Z1bmN0aW9uc1tvcGVyYXRpb25JZF0gPSBmbjtcbiAgICBUYWdzLm9mKGZuKS5hZGQoJ0dyYXBoUUwnLCBkZXNjcmlwdGlvbik7XG5cbiAgICAvLyBpZiAodGhpcy5tb25pdG9yaW5nKSB7XG4gICAgLy8gICB0aGlzLm1vbml0b3JpbmcubGFtYmRhRHVyYXRpb25zV2lkZ2V0LmFkZExlZnRNZXRyaWMoZm4ubWV0cmljRHVyYXRpb24oKSk7XG4gICAgLy8gICB0aGlzLm1vbml0b3JpbmcubGFtYmRhSW52b2tlc1dpZGdldC5hZGRMZWZ0TWV0cmljKGZuLm1ldHJpY0ludm9jYXRpb25zKCkpO1xuICAgIC8vICAgdGhpcy5tb25pdG9yaW5nLmxhbWJkYUVycm9yc1dpZGdldC5hZGRMZWZ0TWV0cmljKGZuLm1ldHJpY0Vycm9ycygpKTtcbiAgICAvLyAgIHRoaXMubW9uaXRvcmluZy5sYW1iZGFFcnJvcnNXaWRnZXQuYWRkTGVmdE1ldHJpYyhmbi5tZXRyaWNUaHJvdHRsZXMoKSk7XG4gICAgLy8gfVxuXG4gICAgY29uc3QgZGF0YVNvdXJjZSA9IG5ldyBhd3NfYXBwc3luYy5MYW1iZGFEYXRhU291cmNlKHNjb3BlLCBgTGFtYmRhRFMke29wZXJhdGlvbklkfWAsIHtcbiAgICAgIGFwaTogdGhpcy5hcGksXG4gICAgICBuYW1lOiBgTGFtYmRhXyR7dHlwZU5hbWUgYXMgc3RyaW5nfV8ke2ZpZWxkTmFtZSBhcyBTdHJpbmd9YCxcbiAgICAgIGxhbWJkYUZ1bmN0aW9uOiBmbixcbiAgICB9KTtcblxuICAgIG5ldyBhd3NfYXBwc3luYy5SZXNvbHZlcihzY29wZSwgYFJlc29sdmVyJHtvcGVyYXRpb25JZH1gLCB7XG4gICAgICBhcGk6IHRoaXMuYXBpLFxuICAgICAgdHlwZU5hbWU6IHR5cGVOYW1lIGFzIHN0cmluZyxcbiAgICAgIGZpZWxkTmFtZTogZmllbGROYW1lIGFzIHN0cmluZyxcbiAgICAgIGRhdGFTb3VyY2UsXG4gICAgfSk7XG4gICAgcmV0dXJuIGZuO1xuICB9XG5cbiAgcHVibGljIGFkZER5bmFtb0RiVnRsUmVzb2x2ZXI8VFlQRSBleHRlbmRzIGtleW9mIFJFU09MVkVSUywgRklFTERUWVBFIGV4dGVuZHMgTm9uTnVsbGFibGU8UkVTT0xWRVJTW1RZUEVdPj4oXG4gICAgdHlwZU5hbWU6IFRZUEUsXG4gICAgZmllbGROYW1lOiBrZXlvZiBGSUVMRFRZUEUsXG4gICAgb3B0aW9ucz86IE9taXQ8VnRsUmVzb2x2ZXJPcHRpb25zLCAnZGF0YVNvdXJjZSc+KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnRhYmxlRGF0YVNvdXJjZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdEeW5hbW9EQiBpcyBub3QgaW5pdGlhbGl6ZWQnKTtcbiAgICB9XG4gICAgdGhpcy5hZGRWdGxSZXNvbHZlcih0eXBlTmFtZSwgZmllbGROYW1lLCB7XG4gICAgICBkYXRhU291cmNlOiB0aGlzLnRhYmxlRGF0YVNvdXJjZSxcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYWRkRHluYW1vRGJKU1Jlc29sdmVyPFRZUEUgZXh0ZW5kcyBrZXlvZiBSRVNPTFZFUlMsIEZJRUxEVFlQRSBleHRlbmRzIE5vbk51bGxhYmxlPFJFU09MVkVSU1tUWVBFXT4+KFxuICAgIHR5cGVOYW1lOiBUWVBFLFxuICAgIGZpZWxkTmFtZToga2V5b2YgRklFTERUWVBFLFxuICAgIG9wdGlvbnM/OiBKc1Jlc29sdmVyT3B0aW9ucyk6IHZvaWQge1xuICAgIGlmICghdGhpcy50YWJsZURhdGFTb3VyY2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRHluYW1vREIgaXMgbm90IGluaXRpYWxpemVkJyk7XG4gICAgfVxuICAgIHRoaXMuYWRkSlNSZXNvbHZlcih0eXBlTmFtZSwgZmllbGROYW1lLCB0aGlzLnRhYmxlRGF0YVNvdXJjZSwge1xuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIHN0YXNoVmFsdWVzOiB7XG4gICAgICAgIC4uLm9wdGlvbnM/LnN0YXNoVmFsdWVzID8/IHt9LFxuICAgICAgICB0YWJsZTogdGhpcy5wcm9wcy5zaW5nbGVUYWJsZURhdGFzdG9yZSEudGFibGUudGFibGVOYW1lLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhZGRKU1Jlc29sdmVyPFRZUEUgZXh0ZW5kcyBrZXlvZiBSRVNPTFZFUlMsIEZJRUxEVFlQRSBleHRlbmRzIE5vbk51bGxhYmxlPFJFU09MVkVSU1tUWVBFXT4+KFxuICAgIHR5cGVOYW1lOiBUWVBFLFxuICAgIGZpZWxkTmFtZToga2V5b2YgRklFTERUWVBFLFxuICAgIGRhdGFTb3VyY2U6IGF3c19hcHBzeW5jLkJhc2VEYXRhU291cmNlLCBvcHRpb25zPzogSnNSZXNvbHZlck9wdGlvbnMpOiB2b2lkIHtcbiAgICBjb25zdCBvcGVyYXRpb25JZCA9IGAke3R5cGVOYW1lIGFzIHN0cmluZ30uJHtmaWVsZE5hbWUgYXMgU3RyaW5nfWA7XG4gICAgY29uc3QgZGVzY3JpcHRpb24gPSBgVHlwZSAke3R5cGVOYW1lIGFzIHN0cmluZ30gRmllbGQgJHtmaWVsZE5hbWUgYXMgU3RyaW5nfSBSZXNvbHZlcmA7XG5cbiAgICBjb25zdCBzY29wZSA9IHRoaXMuZ2V0U2NvcGVGb3JUeXBlTmFtZSh0eXBlTmFtZSBhcyBzdHJpbmcpO1xuXG4gICAgY29uc3QgcmVzb2x2ZXJEaXIgPSAnLi9zcmMvanMtcmVzb2x2ZXIvJztcbiAgICBjb25zdCBmdW5jdGlvbnM6IEpzUmVzb2x2ZXJDb25maWdbXSA9IFtdO1xuXG4gICAgaWYgKCFvcHRpb25zIHx8ICFvcHRpb25zLnBpcGVsaW5lU3RlcE5hbWVzIHx8IG9wdGlvbnMucGlwZWxpbmVTdGVwTmFtZXMubGVuZ3RoID09IDApIHtcbiAgICAgIGZ1bmN0aW9ucy5wdXNoKHtcbiAgICAgICAgbmFtZTogJ2RlZmF1bHQnLFxuICAgICAgICBpbmRleDogMCxcbiAgICAgICAgc3RlcENvdW50OiAxLFxuICAgICAgICBlbnRyeUZpbGU6IGAke3Jlc29sdmVyRGlyfS8ke29wZXJhdGlvbklkfS50c2AsXG4gICAgICAgIGZ1bmN0aW9uSWQ6IGBKU0Z1bmN0aW9uJHtvcGVyYXRpb25JZH1gLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZ1bmN0aW9ucy5wdXNoKC4uLm9wdGlvbnMucGlwZWxpbmVTdGVwTmFtZXMubWFwKChuYW1lLCBpbmRleCkgPT4gKHtcbiAgICAgICAgbmFtZSxcbiAgICAgICAgaW5kZXgsXG4gICAgICAgIHN0ZXBDb3VudDogb3B0aW9ucy5waXBlbGluZVN0ZXBOYW1lcyEubGVuZ3RoLFxuICAgICAgICBlbnRyeUZpbGU6IGAke3Jlc29sdmVyRGlyfS8ke29wZXJhdGlvbklkfS4ke25hbWV9LnRzYCxcbiAgICAgICAgZnVuY3Rpb25JZDogYEpTRnVuY3Rpb24ke29wZXJhdGlvbklkfSR7bmFtZX1gLFxuICAgICAgfSkpKTtcbiAgICB9XG5cbiAgICBjb25zdCBwaXBlbGluZUNvbmZpZyA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBmbiBvZiBmdW5jdGlvbnMpIHtcbiAgICAgIGlmICghZnMuZXhpc3RzU3luYyhmbi5lbnRyeUZpbGUpKSB7XG4gICAgICAgIGZzLm1rZGlyU3luYyhyZXNvbHZlckRpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICAgIHRoaXMuY3JlYXRlSlNSZXNvbHZlckZpbGUoZm4sIHR5cGVOYW1lIGFzIHN0cmluZywgZmllbGROYW1lIGFzIHN0cmluZyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGpzRnVuY3Rpb24gPSBuZXcgYXdzX2FwcHN5bmMuQXBwc3luY0Z1bmN0aW9uKHNjb3BlLCBmbi5mdW5jdGlvbklkLCB7XG4gICAgICAgIGFwaTogdGhpcy5hcGksXG4gICAgICAgIG5hbWU6IG9wZXJhdGlvbklkLnJlcGxhY2UoL1xcLi9nLCAnJyksXG4gICAgICAgIGRlc2NyaXB0aW9uLFxuICAgICAgICBkYXRhU291cmNlLFxuICAgICAgICBjb2RlOiBhd3NfYXBwc3luYy5Db2RlLmZyb21Bc3NldCgnLicsIHtcbiAgICAgICAgICBhc3NldEhhc2hUeXBlOiBBc3NldEhhc2hUeXBlLk9VVFBVVCxcbiAgICAgICAgICBkZXBsb3lUaW1lOiB0cnVlLFxuICAgICAgICAgIGJ1bmRsaW5nOiB7XG4gICAgICAgICAgICBpbWFnZTogRG9ja2VySW1hZ2UuZnJvbVJlZ2lzdHJ5KCdkdW1teScpLCAvLyBXaWxsIG5ldmVyIGJlIHVzZWQgZHVlIHRvIGxvY2FsIGJ1bmRsaW5nXG4gICAgICAgICAgICBvdXRwdXRUeXBlOiBCdW5kbGluZ091dHB1dC5TSU5HTEVfRklMRSxcbiAgICAgICAgICAgIGZ1bmN0aW9uSWQ6IGZuLmZ1bmN0aW9uSWQsXG4gICAgICAgICAgICBsb2NhbDoge1xuICAgICAgICAgICAgICB0cnlCdW5kbGUob3V0cHV0RGlyKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgb3NQbGF0Zm9ybSA9IG9zLnBsYXRmb3JtKCk7XG4gICAgICAgICAgICAgICAgZXhlYyhcbiAgICAgICAgICAgICAgICAgIG9zUGxhdGZvcm0gPT09ICd3aW4zMicgPyAnY21kJyA6ICdiYXNoJyxcbiAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgb3NQbGF0Zm9ybSA9PT0gJ3dpbjMyJyA/ICcvYycgOiAnLWMnLFxuICAgICAgICAgICAgICAgICAgICBgZXNidWlsZCAtLWJ1bmRsZSAtLXNvdXJjZW1hcD1pbmxpbmUgLS1zb3VyY2VzLWNvbnRlbnQ9ZmFsc2UgLS10YXJnZXQ9ZXNuZXh0IC0tcGxhdGZvcm09bm9kZSAtLWZvcm1hdD1lc20gLS1leHRlcm5hbDpAYXdzLWFwcHN5bmMvdXRpbHMgLS1vdXRkaXI9JHtvdXRwdXREaXJ9ICR7Zm4uZW50cnlGaWxlfWAsXG4gICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBlbnY6IHsgLi4ucHJvY2Vzcy5lbnYgfSxcbiAgICAgICAgICAgICAgICAgICAgc3RkaW86IFsgLy8gc2hvdyBvdXRwdXRcbiAgICAgICAgICAgICAgICAgICAgICAnaWdub3JlJywgLy8gaWdub3JlIHN0ZGlvXG4gICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzcy5zdGRlcnIsIC8vIHJlZGlyZWN0IHN0ZG91dCB0byBzdGRlcnJcbiAgICAgICAgICAgICAgICAgICAgICAnaW5oZXJpdCcsIC8vIGluaGVyaXQgc3RkZXJyXG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgIHdpbmRvd3NWZXJiYXRpbUFyZ3VtZW50czogb3NQbGF0Zm9ybSA9PT0gJ3dpbjMyJyxcbiAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0gYXMgQnVuZGxpbmdPcHRpb25zLFxuICAgICAgICB9KSxcbiAgICAgICAgcnVudGltZTogYXdzX2FwcHN5bmMuRnVuY3Rpb25SdW50aW1lLkpTXzFfMF8wLFxuICAgICAgfSk7XG4gICAgICBwaXBlbGluZUNvbmZpZy5wdXNoKGpzRnVuY3Rpb24pO1xuICAgIH1cblxuICAgIG5ldyBhd3NfYXBwc3luYy5SZXNvbHZlcihzY29wZSwgYFJlc29sdmVyJHtvcGVyYXRpb25JZH1gLCB7XG4gICAgICBhcGk6IHRoaXMuYXBpLFxuICAgICAgdHlwZU5hbWU6IHR5cGVOYW1lIGFzIHN0cmluZyxcbiAgICAgIGZpZWxkTmFtZTogZmllbGROYW1lIGFzIHN0cmluZyxcbiAgICAgIHJ1bnRpbWU6IGF3c19hcHBzeW5jLkZ1bmN0aW9uUnVudGltZS5KU18xXzBfMCxcbiAgICAgIHBpcGVsaW5lQ29uZmlnLFxuICAgICAgY29kZTogYXdzX2FwcHN5bmMuQ29kZS5mcm9tSW5saW5lKGBcbiAgICAvLyBUaGUgYmVmb3JlIHN0ZXBcbiAgICBleHBvcnQgZnVuY3Rpb24gcmVxdWVzdChjdHgpIHtcbiAgICAgIGNvbnNvbGUubG9nKGN0eCk7XG4ke09iamVjdC5lbnRyaWVzKG9wdGlvbnM/LnN0YXNoVmFsdWVzID8/IFtdKS5tYXAodmFsID0+IGAgICAgICBjdHguc3Rhc2guJHt2YWxbMF19ID0gJyR7dmFsWzFdfSdgKS5qb2luKCdcXG4nKX1cbiAgICAgIHJldHVybiB7fVxuICAgIH1cblxuICAgIC8vIFRoZSBhZnRlciBzdGVwXG4gICAgZXhwb3J0IGZ1bmN0aW9uIHJlc3BvbnNlKGN0eCkge1xuICAgICAgcmV0dXJuIGN0eC5wcmV2LnJlc3VsdFxuICAgIH1cbiAgYCksXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYWRkVnRsUmVzb2x2ZXI8VFlQRSBleHRlbmRzIGtleW9mIFJFU09MVkVSUywgRklFTERUWVBFIGV4dGVuZHMgTm9uTnVsbGFibGU8UkVTT0xWRVJTW1RZUEVdPj4oXG4gICAgdHlwZU5hbWU6IFRZUEUsXG4gICAgZmllbGROYW1lOiBrZXlvZiBGSUVMRFRZUEUsXG4gICAgb3B0aW9uczogVnRsUmVzb2x2ZXJPcHRpb25zKTogdm9pZCB7XG4gICAgY29uc3Qgb3BlcmF0aW9uSWQgPSBgJHt0eXBlTmFtZSBhcyBzdHJpbmd9LiR7ZmllbGROYW1lIGFzIFN0cmluZ31gO1xuXG4gICAgY29uc3QgbWFwcGluZ1JlcUZpbGUgPSBgLi9zcmMvdnRsLyR7b3BlcmF0aW9uSWR9LnJlcS52dGxgO1xuICAgIGlmICghZnMuZXhpc3RzU3luYyhtYXBwaW5nUmVxRmlsZSkpIHtcbiAgICAgIGZzLm1rZGlyU3luYygnLi9zcmMvdnRsLycsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgZnMud3JpdGVGaWxlU3luYyhtYXBwaW5nUmVxRmlsZSwgJyMjIFJlcXVlc3QgbWFwcGluZycsIHsgZW5jb2Rpbmc6ICd1dGYtOCcgfSk7XG4gICAgfVxuICAgIGNvbnN0IG1hcHBpbmdSZXNGaWxlID0gYC4vc3JjL3Z0bC8ke29wZXJhdGlvbklkfS5yZXMudnRsYDtcbiAgICBpZiAoIWZzLmV4aXN0c1N5bmMobWFwcGluZ1Jlc0ZpbGUpKSB7XG4gICAgICBmcy5ta2RpclN5bmMoJy4vc3JjL3Z0bC8nLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgIGZzLndyaXRlRmlsZVN5bmMobWFwcGluZ1Jlc0ZpbGUsICckdXRpbC50b0pzb24oJGN0eC5yZXN1bHQpJywgeyBlbmNvZGluZzogJ3V0Zi04JyB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBzY29wZSA9IHRoaXMuZ2V0U2NvcGVGb3JUeXBlTmFtZSh0eXBlTmFtZSBhcyBzdHJpbmcpO1xuXG4gICAgbmV3IGF3c19hcHBzeW5jLlJlc29sdmVyKHNjb3BlLCBgUmVzb2x2ZXIke29wZXJhdGlvbklkfWAsIHtcbiAgICAgIGFwaTogdGhpcy5hcGksXG4gICAgICB0eXBlTmFtZTogdHlwZU5hbWUgYXMgc3RyaW5nLFxuICAgICAgZmllbGROYW1lOiBmaWVsZE5hbWUgYXMgc3RyaW5nLFxuICAgICAgZGF0YVNvdXJjZTogb3B0aW9ucy5kYXRhU291cmNlLFxuICAgICAgcmVxdWVzdE1hcHBpbmdUZW1wbGF0ZTogYXdzX2FwcHN5bmMuTWFwcGluZ1RlbXBsYXRlLmZyb21TdHJpbmcodGhpcy5zdWJzdFZhcmlhYmxlcyhmcy5yZWFkRmlsZVN5bmMobWFwcGluZ1JlcUZpbGUpLnRvU3RyaW5nKCd1dGYtOCcpLCBvcHRpb25zLnZhcmlhYmxlcykpLFxuICAgICAgcmVzcG9uc2VNYXBwaW5nVGVtcGxhdGU6IGF3c19hcHBzeW5jLk1hcHBpbmdUZW1wbGF0ZS5mcm9tU3RyaW5nKHRoaXMuc3Vic3RWYXJpYWJsZXMoZnMucmVhZEZpbGVTeW5jKG1hcHBpbmdSZXNGaWxlKS50b1N0cmluZygndXRmLTgnKSwgb3B0aW9ucy52YXJpYWJsZXMpKSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBhcHByb3ByaWF0ZSBzY29wZSBmb3IgY3JlYXRpbmcgcmVzb3VyY2VzIGZvciB0aGUgZ2l2ZW4gdHlwZSBuYW1lLlxuICAgKiBJZiB1c2VOZXN0ZWRTdGFja3MgaXMgZW5hYmxlZCwgcmV0dXJucyBhIG5lc3RlZCBzdGFjayBmb3IgdGhlIHR5cGUgbmFtZSxcbiAgICogY3JlYXRpbmcgaXQgaWYgaXQgZG9lc24ndCBleGlzdC4gT3RoZXJ3aXNlLCByZXR1cm5zIHRoaXMgY29uc3RydWN0LlxuICAgKlxuICAgKiBRdWVyeSwgTXV0YXRpb24sIGFuZCBTdWJzY3JpcHRpb24gZWFjaCBnZXQgdGhlaXIgb3duIG5lc3RlZCBzdGFjay5cbiAgICogQWxsIG90aGVyIHR5cGVzIChmaWVsZCByZXNvbHZlcnMpIHNoYXJlIGEgc2luZ2xlIFwiRmllbGRcIiBuZXN0ZWQgc3RhY2suXG4gICAqXG4gICAqIEBwYXJhbSB0eXBlTmFtZSAtIFRoZSBHcmFwaFFMIHR5cGUgbmFtZSAoZS5nLiwgJ1F1ZXJ5JywgJ011dGF0aW9uJywgJ1N1YnNjcmlwdGlvbicsIG9yIGEgY3VzdG9tIHR5cGUpXG4gICAqIEByZXR1cm5zIFRoZSBjb25zdHJ1Y3QgdG8gdXNlIGFzIHNjb3BlIGZvciBjcmVhdGluZyByZXNvdXJjZXNcbiAgICovXG4gIHByaXZhdGUgZ2V0U2NvcGVGb3JUeXBlTmFtZSh0eXBlTmFtZTogc3RyaW5nKTogQ29uc3RydWN0IHtcbiAgICBpZiAoIXRoaXMucHJvcHMudXNlTmVzdGVkU3RhY2tzKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBjb25zdCByb290VHlwZXMgPSBbJ1F1ZXJ5JywgJ011dGF0aW9uJywgJ1N1YnNjcmlwdGlvbiddO1xuICAgIGNvbnN0IHN0YWNrS2V5ID0gcm9vdFR5cGVzLmluY2x1ZGVzKHR5cGVOYW1lKSA/IHR5cGVOYW1lIDogJ0ZpZWxkJztcblxuICAgIGlmICghdGhpcy5uZXN0ZWRTdGFja3Nbc3RhY2tLZXldKSB7XG4gICAgICB0aGlzLm5lc3RlZFN0YWNrc1tzdGFja0tleV0gPSBuZXcgTmVzdGVkU3RhY2sodGhpcywgYCR7c3RhY2tLZXl9UmVzb2x2ZXJzYCwge1xuICAgICAgICBkZXNjcmlwdGlvbjogYE5lc3RlZCBzdGFjayBmb3IgJHtzdGFja0tleX0gcmVzb2x2ZXJzYCxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLm5lc3RlZFN0YWNrc1tzdGFja0tleV07XG4gIH1cblxuICBwcml2YXRlIHN1YnN0VmFyaWFibGVzKGRhdGE6IHN0cmluZywgdmFyczogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nIH0gPSB7fSk6IHN0cmluZyB7XG4gICAgbGV0IHJlcyA9IGRhdGE7XG4gICAgZm9yIChjb25zdCBuYW1lIGluIHZhcnMpIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodmFycywgbmFtZSkpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSB2YXJzW25hbWVdO1xuICAgICAgICByZXMgPSByZXMucmVwbGFjZShuZXcgUmVnRXhwKGBcXFxcJFxceyR7bmFtZX1cXH1gLCAnZycpLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUVudHJ5RmlsZShlbnRyeUZpbGU6IHN0cmluZywgdHlwZU5hbWU6IHN0cmluZywgZmllbGROYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCBhcmdUeXBlID0gYCR7dHlwZU5hbWV9JHt1cHBlcmNhc2VGaXJzdChmaWVsZE5hbWUpfUFyZ3NgO1xuICAgIGZzLndyaXRlRmlsZVN5bmMoZW50cnlGaWxlLCBgaW1wb3J0IHsgYXBpIH0gZnJvbSAnY2RrLXNlcnZlcmxlc3MvbGliL2xhbWJkYSc7XG5pbXBvcnQgeyAke3R5cGVOYW1lfSwgJHthcmdUeXBlfSB9IGZyb20gJy4uL2dlbmVyYXRlZC9ncmFwaHFsLiR7dGhpcy5wcm9wcy5hcGlOYW1lLnRvTG93ZXJDYXNlKCl9LW1vZGVsLmdlbmVyYXRlZCc7XG5cbmV4cG9ydCBjb25zdCBoYW5kbGVyID0gYXBpLmNyZWF0ZUFwcFN5bmNIYW5kbGVyPCR7YXJnVHlwZX0sICR7dHlwZU5hbWV9Wycke2ZpZWxkTmFtZX0nXT4oYXN5bmMgKGN0eCkgPT4ge1xuICBjdHgubG9nZ2VyLmluZm8oSlNPTi5zdHJpbmdpZnkoY3R4LmV2ZW50KSk7XG4gIHRocm93IG5ldyBFcnJvcignTm90IHlldCBpbXBsZW1lbnRlZCcpO1xufSk7YCwge1xuICAgICAgZW5jb2Rpbmc6ICd1dGYtOCcsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUpTUmVzb2x2ZXJGaWxlKGZuOiBKc1Jlc29sdmVyQ29uZmlnLCB0eXBlTmFtZTogc3RyaW5nLCBmaWVsZE5hbWU6IHN0cmluZykge1xuICAgIGNvbnN0IGFyZ1R5cGUgPSBgJHt0eXBlTmFtZX0ke3VwcGVyY2FzZUZpcnN0KGZpZWxkTmFtZSl9QXJnc2A7XG4gICAgY29uc3QgcmV0dXJuVHlwZSA9IChmbi5pbmRleCA9PSAoZm4uc3RlcENvdW50IC0gMSkpID8gYCR7dHlwZU5hbWV9Wycke2ZpZWxkTmFtZX0nXWAgOiAnYW55JztcblxuICAgIGZzLndyaXRlRmlsZVN5bmMoZm4uZW50cnlGaWxlLCBgaW1wb3J0IHsgQ29udGV4dCwgdXRpbCB9IGZyb20gJ0Bhd3MtYXBwc3luYy91dGlscyc7XG5pbXBvcnQgeyAke3R5cGVOYW1lfSwgJHthcmdUeXBlfSB9IGZyb20gJy4uL2dlbmVyYXRlZC9ncmFwaHFsLiR7dGhpcy5wcm9wcy5hcGlOYW1lLnRvTG93ZXJDYXNlKCl9LW1vZGVsLmdlbmVyYXRlZCc7XG5cbi8qKlxuICogUmVxdWVzdCBmb3IgJHt0eXBlTmFtZX0uJHtmaWVsZE5hbWV9IChTdGVwOiAke2ZuLm5hbWV9ICR7Zm4uaW5kZXggKyAxfS8ke2ZuLnN0ZXBDb3VudH0pXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXF1ZXN0KGN0eDogQ29udGV4dDwke2FyZ1R5cGV9Pik6IGFueSB7XG4gIGNvbnNvbGUubG9nKGN0eCk7XG4gIHJldHVybiB7fTtcbn1cblxuLyoqXG4gKiBSZXNwb25zZSBmb3IgJHt0eXBlTmFtZX0uJHtmaWVsZE5hbWV9IChTdGVwOiAke2ZuLm5hbWV9ICR7Zm4uaW5kZXggKyAxfS8ke2ZuLnN0ZXBDb3VudH0pXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNwb25zZShjdHg6IENvbnRleHQ8JHthcmdUeXBlfT4pOiAke3JldHVyblR5cGV9IHtcbiAgY29uc29sZS5sb2coY3R4KTtcbiAgcmV0dXJuIGN0eC5yZXN1bHQuaXRlbXM7XG59YCwge1xuICAgICAgZW5jb2Rpbmc6ICd1dGYtOCcsXG4gICAgfSk7XG4gIH1cblxufVxuXG5mdW5jdGlvbiB1cHBlcmNhc2VGaXJzdCh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHZhbHVlLnN1YnN0cmluZygwLCAxKS50b1VwcGVyQ2FzZSgpICsgdmFsdWUuc3Vic3RyaW5nKDEpO1xufVxuXG4vKipcbiAqIENvcGllZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9ibG9iL21haW4vcGFja2FnZXMvYXdzLWNkay1saWIvYXdzLWxhbWJkYS1ub2RlanMvbGliL3V0aWwudHNcbiAqIGFzIGl0IGlzIG5vdCBleHBvcnRlZCBieSBhd3MtY2RrLWxpYlxuICovXG5mdW5jdGlvbiBleGVjKGNtZDogc3RyaW5nLCBhcmdzOiBzdHJpbmdbXSwgb3B0aW9ucz86IFNwYXduU3luY09wdGlvbnMpIHtcbiAgY29uc3QgcHJvYyA9IHNwYXduU3luYyhjbWQsIGFyZ3MsIG9wdGlvbnMpO1xuXG4gIGlmIChwcm9jLmVycm9yKSB7XG4gICAgdGhyb3cgcHJvYy5lcnJvcjtcbiAgfVxuXG4gIGlmIChwcm9jLnN0YXR1cyAhPT0gMCkge1xuICAgIGlmIChwcm9jLnN0ZG91dCB8fCBwcm9jLnN0ZGVycikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBbU3RhdHVzICR7cHJvYy5zdGF0dXN9XSBzdGRvdXQ6ICR7cHJvYy5zdGRvdXQ/LnRvU3RyaW5nKCkudHJpbSgpfVxcblxcblxcbnN0ZGVycjogJHtwcm9jLnN0ZGVycj8udG9TdHJpbmcoKS50cmltKCl9YCk7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihgJHtjbWR9ICR7YXJncy5qb2luKCcgJyl9ICR7b3B0aW9ucz8uY3dkID8gYHJ1biBpbiBkaXJlY3RvcnkgJHtvcHRpb25zLmN3ZH1gIDogJyd9IGV4aXRlZCB3aXRoIHN0YXR1cyAke3Byb2Muc3RhdHVzfWApO1xuICB9XG5cbiAgcmV0dXJuIHByb2M7XG59XG5cbiJdfQ==
|
package/lib/lambda/auth.js
CHANGED
|
@@ -304,4 +304,4 @@ class AppSyncCognitoAuthorizer extends CognitoAuthorizer {
|
|
|
304
304
|
}
|
|
305
305
|
}
|
|
306
306
|
exports.AppSyncCognitoAuthorizer = AppSyncCognitoAuthorizer;
|
|
307
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9sYW1iZGEvYXV0aC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxxQ0FBOEI7QUFDOUIsa0RBQTBCO0FBQzFCLCtDQUFxRTtBQUNyRSw0REFBa0M7QUFFbEMscUNBQWdFO0FBRWhFLE1BQU0sYUFBYSxHQUFHLGFBQUcsQ0FBQyxZQUFZLElBQUksRUFBRSxDQUFDO0FBQzdDLE1BQU0saUJBQWlCLEdBQUcsYUFBRyxDQUFDLGdCQUFnQixJQUFJLGFBQUcsQ0FBQyxVQUFVLElBQUksY0FBYyxDQUFDO0FBRW5GLE1BQU0sWUFBWSxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUMsdUJBQXVCLGlCQUFpQixrQkFBa0IsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBRyxDQUFDLGNBQWMsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUM1SSxNQUFNLFVBQVUsR0FBRyxhQUFhLENBQUMsQ0FBQyxDQUFDLEdBQUcsWUFBWSx3QkFBd0IsQ0FBQyxDQUFDLENBQUMsYUFBRyxDQUFDLFlBQVksQ0FBQztBQUM5RixNQUFNLGFBQWEsR0FBRyxhQUFhLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQUcsQ0FBQyxlQUFlLElBQUksRUFBRSxDQUFDLENBQUM7QUFDckYsTUFBTSxXQUFXLEdBQUcsQ0FBQyxhQUFHLENBQUMsZ0JBQWdCLElBQUksYUFBRyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBRyxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0FBNkI3SCxJQUFJLFNBQTBDLENBQUM7QUFFL0MsTUFBTSxhQUFhLEdBQUcsS0FBSyxFQUFFLE9BQWUsRUFBZ0MsRUFBRTtJQUM1RSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7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S0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzFCLENBQUM7SUFDSCxDQUFDO0NBQ0Y7QUEzQ0QsOERBMkNDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBYSw2QkFBOEIsU0FBUSx5QkFBeUI7SUFFMUU7O09BRUc7SUFDSCxZQUFzQixLQUEwRCxFQUFZLE9BQXlCO1FBQ25ILEtBQUssQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBRFgsVUFBSyxHQUFMLEtBQUssQ0FBcUQ7UUFBWSxZQUFPLEdBQVAsT0FBTyxDQUFrQjtJQUVySCxDQUFDO0NBQ0Y7QUFSRCxzRUFRQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFhLDZCQUE4QixTQUFRLHlCQUF5QjtJQUUxRTs7T0FFRztJQUNILFlBQXNCLEtBQXdELEVBQVksT0FBeUI7UUFDakgsS0FBSyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztRQURGLFVBQUssR0FBTCxLQUFLLENBQW1EO1FBQVksWUFBTyxHQUFQLE9BQU8sQ0FBa0I7SUFFbkgsQ0FBQztDQUNGO0FBUkQsc0VBUUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBYSx3QkFBeUIsU0FBUSxpQkFBaUI7SUFFN0Q7O09BRUc7SUFDSCxZQUFzQixLQUEwQztRQUM5RCxLQUFLLEVBQUUsQ0FBQztRQURZLFVBQUssR0FBTCxLQUFLLENBQXFDO0lBRWhFLENBQUM7SUFFRDs7T0FFRztJQUNJLEtBQUssQ0FBQyxZQUFZO1FBQ3ZCLHVDQUF1QztRQUN2QyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDeEIsSUFBSSxDQUFDLE1BQU0sR0FBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQTZDLENBQUMsTUFBTSxDQUFDO1FBQ2pGLENBQUM7SUFDSCxDQUFDO0NBRUY7QUFuQkQsNERBbUJDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZW52IH0gZnJvbSAncHJvY2Vzcyc7XG5pbXBvcnQgQXhpb3MgZnJvbSAnYXhpb3MnO1xuaW1wb3J0IHsgdmVyaWZ5LCBKd3RIZWFkZXIsIFNpZ25pbmdLZXlDYWxsYmFjayB9IGZyb20gJ2pzb253ZWJ0b2tlbic7XG5pbXBvcnQgandrVG9QZW0gZnJvbSAnandrLXRvLXBlbSc7XG5pbXBvcnQgbG9nZ2VyIGZyb20gJ2xhbWJkYS1sb2cnO1xuaW1wb3J0IHsgRm9yYmlkZGVuRXJyb3IsIFVuYXV0aGVudGljYXRlZEVycm9yIH0gZnJvbSAnLi9lcnJvcnMnO1xuXG5jb25zdCBjb2duaXRvUG9vbElkID0gZW52LlVTRVJfUE9PTF9JRCA/PyAnJztcbmNvbnN0IGNvZ25pdG9Qb29sUmVnaW9uID0gZW52LlVTRVJfUE9PTF9SRUdJT04gPz8gZW52LkFXU19SRUdJT04gPz8gJ2V1LWNlbnRyYWwtMSc7XG5cbmNvbnN0IGp3dElzc3VlclVybCA9IGNvZ25pdG9Qb29sSWQgPyBgaHR0cHM6Ly9jb2duaXRvLWlkcC4ke2NvZ25pdG9Qb29sUmVnaW9ufS5hbWF6b25hd3MuY29tLyR7Y29nbml0b1Bvb2xJZH1gIDogKGVudi5KV1RfSVNTVUVSX1VSTCA/PyAnJyk7XG5jb25zdCBqd3RKd2tzVXJsID0gY29nbml0b1Bvb2xJZCA/IGAke2p3dElzc3VlclVybH0vLndlbGwta25vd24vandrcy5qc29uYCA6IGVudi5KV1RfSldLU19VUkw7XG5jb25zdCBqd3RHcm91cENsYWltID0gY29nbml0b1Bvb2xJZCA/ICdjb2duaXRvOmdyb3VwcycgOiAoZW52LkpXVF9HUk9VUF9DTEFJTSA/PyAnJyk7XG5jb25zdCBqd3RBdWRpZW5jZSA9IChlbnYuSldUX0FVRElFTkNFX1VSTCAmJiBlbnYuSldUX0FVRElFTkNFX1VSTC5sZW5ndGggPiAwKSA/IGVudi5KV1RfQVVESUVOQ0VfVVJMLnNwbGl0KCd8fCcpIDogdW5kZWZpbmVkO1xuXG5pbnRlcmZhY2UgUHVibGljS2V5IHtcbiAgYWxnOiBzdHJpbmc7XG4gIGU6IHN0cmluZztcbiAga2lkOiBzdHJpbmc7XG4gIGt0eTogc3RyaW5nO1xuICBuOiBzdHJpbmc7XG4gIHVzZTogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgUHVibGljS2V5TWV0YSB7XG4gIGluc3RhbmNlOiBQdWJsaWNLZXk7XG4gIHBlbTogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgUHVibGljS2V5cyB7XG4gIGtleXM6IFB1YmxpY0tleVtdO1xufVxuXG5pbnRlcmZhY2UgSXNzdWVyTWV0YWRhdGEge1xuICBqd2tzX3VyaT86IHN0cmluZztcbiAgW2tleTogc3RyaW5nXTogdW5rbm93bjtcbn1cblxuaW50ZXJmYWNlIE1hcE9mS2lkVG9QdWJsaWNLZXkge1xuICBba2V5OiBzdHJpbmddOiBQdWJsaWNLZXlNZXRhO1xufVxuXG5sZXQgY2FjaGVLZXlzOiBNYXBPZktpZFRvUHVibGljS2V5IHwgdW5kZWZpbmVkO1xuXG5jb25zdCBnZXRQdWJsaWNLZXlzID0gYXN5bmMgKGp3a3NVcmw6IHN0cmluZyk6IFByb21pc2U8TWFwT2ZLaWRUb1B1YmxpY0tleT4gPT4ge1xuICBpZiAoIWNhY2hlS2V5cykge1xuICAgIGNvbnN0IHB1YmxpY0tleXM6IFB1YmxpY0tleXMgPSAoYXdhaXQgQXhpb3MuZ2V0PFB1YmxpY0tleXM+KGp3a3NVcmwpKS5kYXRhO1xuICAgIGNhY2hlS2V5cyA9IHB1YmxpY0tleXMua2V5cy5yZWR1Y2UoKGFnZywgY3VycmVudCkgPT4ge1xuICAgICAgY29uc3QgcGVtID0gandrVG9QZW0oY3VycmVudCBhcyBqd2tUb1BlbS5KV0spO1xuICAgICAgYWdnW2N1cnJlbnQua2lkXSA9IHsgaW5zdGFuY2U6IGN1cnJlbnQsIHBlbSB9O1xuICAgICAgcmV0dXJuIGFnZztcbiAgICB9LCB7fSBhcyBNYXBPZktpZFRvUHVibGljS2V5KTtcbiAgICByZXR1cm4gY2FjaGVLZXlzO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBjYWNoZUtleXM7XG4gIH1cbn07XG5cbi8vIEdyYWIgdGhlIEpXS1MgVVJJIGZyb20gdGhlIEpXVCBpc3N1ZXIncyBtZXRhZGF0YVxuY29uc3QgZ2V0Sndrc1VyaSA9IGFzeW5jIChkaXNjb3ZlcnlVcmk6IHN0cmluZywgandrc1VyaT86IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiA9PiB7XG4gIGlmIChqd2tzVXJpKSB7XG4gICAgcmV0dXJuIGp3a3NVcmk7XG4gIH1cbiAgY29uc3Qgd2VsbEtub3duVXJpID0gYCR7ZGlzY292ZXJ5VXJpfS8ud2VsbC1rbm93bmA7XG4gIGNvbnN0IGlzc3Vlck1ldGFkYXRhID0gKGF3YWl0IEF4aW9zLmdldDxJc3N1ZXJNZXRhZGF0YT4od2VsbEtub3duVXJpKSkuZGF0YTtcbiAgaWYgKCFpc3N1ZXJNZXRhZGF0YS5qd2tzX3VyaSkge1xuICAgIHRocm93IG5ldyBFcnJvcignSXNzdWVyIGRvZXMgbm90IG9mZmVyIEpXS1MgZW5kcG9pbnQnKTtcbiAgfVxuICByZXR1cm4gaXNzdWVyTWV0YWRhdGEuandrc191cmk7XG59O1xuXG5jb25zdCBwcm9taXNlZFZlcmlmeSA9ICh0b2tlbjogc3RyaW5nLCBpc3N1ZXJVcmk6IHN0cmluZywgandrc1VyaT86IHN0cmluZyk6IFByb21pc2U8eyBbbmFtZTogc3RyaW5nXTogc3RyaW5nIH0+ID0+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICB2ZXJpZnkodG9rZW4sIChoZWFkZXI6IEp3dEhlYWRlciwgY2I6IFNpZ25pbmdLZXlDYWxsYmFjaykgPT4ge1xuICAgICAgaWYgKCFoZWFkZXIua2lkKSB7XG4gICAgICAgIGNiKG5ldyBFcnJvcignbm8ga2V5IGlkIGZvdW5kJykpO1xuICAgICAgfVxuICAgICAgZ2V0Sndrc1VyaShpc3N1ZXJVcmksIGp3a3NVcmkpLnRoZW4oZ2V0UHVibGljS2V5cykudGhlbigoa2V5cykgPT4ge1xuICAgICAgICBjYihudWxsLCBrZXlzW2hlYWRlci5raWQhXS5wZW0pO1xuICAgICAgfSwgY2IpO1xuICAgIH0sIHsgaXNzdWVyOiBpc3N1ZXJVcmksIGF1ZGllbmNlOiBqd3RBdWRpZW5jZSB9LCAoZXJyLCBkZWNvZGVkKSA9PiB7XG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzb2x2ZShkZWNvZGVkIGFzIHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59O1xuXG4vKipcbiAqIEEgZ2VuZXJpYyBKV1QgYXV0aG9yaXplciBiYXNlIGNsYXNzLCBwcmVzdXBwb3NpbmcgdGhlIHByZXNlbmNlIG9mIGFuIGlzc3VlciwgYSBudW1iZXIgb2YgYXV0aG9yaXphdGlvbiBjbGFpbXMsIGFuXG4gKiBhZG1pbiBwZXJtaXNzaW9uIGNsYWltIGFuZCBvcHRpb25hbGx5IGEgc2VwYXJhdGUgVVJMIHRvIGEgSldLUyB0byB1c2UgaWYgdGhlIGlzc3VlcnMgd2VsbC1rbm93biBVUkwgZG9lcyBub3RcbiAqIHBvaW50IHRvIGl0IGluIGl0cyBtZXRhZGF0YS5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEp3dEF1dGhvcml6ZXIge1xuXG4gIC8qKlxuICAgKiBUaGUgY2xhaW1zIG9mIHRoZSBhdXRoZW50aWNhdGVkIHVzZXIuXG4gICAqL1xuICBwcm90ZWN0ZWQgY2xhaW1zPzogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IHN0cmluZ1tdIH07XG5cbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBpc3N1ZXJVcmw6IHN0cmluZyxcbiAgICBwcm90ZWN0ZWQgZ3JvdXBDbGFpbTogc3RyaW5nLFxuICAgIHByb3RlY3RlZCBhZG1pbkNsYWltOiBzdHJpbmcsXG4gICAgcHJvdGVjdGVkIGp3a3NVcmw/OiBzdHJpbmcsXG4gICkge1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gYXJyYXkgb2YgZ3JvdXBzIHRoZSB1c2VyIGJlbG9uZ3MgdG8sIG9yIGFuIGVtcHR5IGFycmF5IGlmIHRoZSB1c2VyXG4gICAqIGlzIG5vdCBhdXRoZW50aWNhdGVkIG9yIGhhcyBubyBncm91cHMuXG4gICAqL1xuICBwdWJsaWMgZ2V0R3JvdXBzKCk6IHN0cmluZ1tdIHtcbiAgICBpZiAoIXRoaXMuaXNBdXRoZW50aWNhdGVkKCkgfHwgIXRoaXMuY2xhaW1zIS5oYXNPd25Qcm9wZXJ0eSh0aGlzLmdyb3VwQ2xhaW0pKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmNsYWltcyFbdGhpcy5ncm91cENsYWltXSBhcyB1bmtub3duIGFzIHN0cmluZ1tdO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgdXNlciBiZWxvbmdzIHRvIHRoZSBzcGVjaWZpZWQgZ3JvdXAsIGZhbHNlIG90aGVyd2lzZS5cbiAgICogQHBhcmFtIGdyb3VwIFRoZSBuYW1lIG9mIHRoZSBncm91cCB0byBjaGVjay5cbiAgICovXG4gIHB1YmxpYyBoYXNHcm91cChncm91cDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgLy8gJ2NvZ25pdG86Z3JvdXBzJzogWyAnYWRtaW4nIF0sXG4gICAgcmV0dXJuIHRoaXMuZ2V0R3JvdXBzKCkuaW5jbHVkZXMoZ3JvdXApO1xuICB9XG5cbiAgLyoqXG4gICAqIEF1dGhlbnRpY2F0ZXMgdGhlIHVzZXIgYW5kIHNldHMgdGhlIGNsYWltcy5cbiAgICovXG4gIHB1YmxpYyBhYnN0cmFjdCBhdXRoZW50aWNhdGUoKTogUHJvbWlzZTx2b2lkPjtcblxuICAvKipcbiAgICogUmV0dXJucyB0cnVlIGlmIHRoZSB1c2VyIGlzIGF1dGhlbnRpY2F0ZWQsIGZhbHNlIG90aGVyd2lzZS5cbiAgICovXG4gIHB1YmxpYyBpc0F1dGhlbnRpY2F0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY2xhaW1zICE9PSB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogVGhyb3dzIGFuIFVuYXV0aGVudGljYXRlZEVycm9yIGlmIHRoZSB1c2VyIGlzIG5vdCBhdXRoZW50aWNhdGVkLlxuICAgKi9cbiAgcHVibGljIGFzc2VydEF1dGhlbnRpY2F0ZWQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmlzQXV0aGVudGljYXRlZCgpKSB7XG4gICAgICB0aHJvdyBuZXcgVW5hdXRoZW50aWNhdGVkRXJyb3IoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVGhyb3dzIGEgRm9yYmlkZGVuRXJyb3IgaWYgdGhlIHVzZXIgaXMgbm90IGF1dGhlbnRpY2F0ZWQgb3IgZG9lcyBub3QgYmVsb25nXG4gICAqIHRvIHRoZSBzcGVjaWZpZWQgZ3JvdXAuXG4gICAqIEBwYXJhbSBncm91cCBUaGUgbmFtZSBvZiB0aGUgZ3JvdXAgdG8gY2hlY2suXG4gICAqL1xuICBwdWJsaWMgYXNzZXJ0R3JvdXAoZ3JvdXA6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuYXNzZXJ0QXV0aGVudGljYXRlZCgpO1xuICAgIGlmICghdGhpcy5oYXNHcm91cChncm91cCkpIHtcbiAgICAgIHRocm93IG5ldyBGb3JiaWRkZW5FcnJvcigpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHVzZXIgYmVsb25ncyB0byB0aGUgJ2FkbWluJyBncm91cCwgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgKi9cbiAgcHVibGljIGlzQWRtaW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaGFzR3JvdXAodGhpcy5hZG1pbkNsYWltKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaHJvd3MgYSBGb3JiaWRkZW5FcnJvciBpZiB0aGUgdXNlciBpcyBub3QgYXV0aGVudGljYXRlZCBvciBpcyBub3QgYW4gYWRtaW4uXG4gICAqL1xuICBwdWJsaWMgYXNzZXJ0QWRtaW4oKTogdm9pZCB7XG4gICAgdGhpcy5hc3NlcnRHcm91cCh0aGlzLmFkbWluQ2xhaW0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGVtYWlsIG9mIHRoZSBhdXRoZW50aWNhdGVkIHVzZXIuXG4gICAqL1xuICBwdWJsaWMgZ2V0RU1haWwoKTogc3RyaW5nIHtcbiAgICB0aGlzLmFzc2VydEF1dGhlbnRpY2F0ZWQoKTtcbiAgICByZXR1cm4gdGhpcy5jbGFpbXMhLmVtYWlsIGFzIHN0cmluZztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBzdWJqZWN0IG9mIHRoZSBhdXRoZW50aWNhdGVkIHVzZXIuXG4gICAqL1xuICBwdWJsaWMgZ2V0U3ViamVjdCgpOiBzdHJpbmcge1xuICAgIHRoaXMuYXNzZXJ0QXV0aGVudGljYXRlZCgpO1xuICAgIHJldHVybiB0aGlzLmNsYWltcyEuc3ViIGFzIHN0cmluZztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgY2xhaW0gd2l0aCB0aGUgc3BlY2lmaWVkIG5hbWUsIG9yIHVuZGVmaW5lZCBpZiB0aGVcbiAgICogY2xhaW0gZG9lcyBub3QgZXhpc3QuXG4gICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBjbGFpbSB0byByZXRyaWV2ZS5cbiAgICovXG4gIHB1YmxpYyBnZXRDbGFpbShuYW1lOiBzdHJpbmcpOiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgc3RyaW5nW10gfCB1bmRlZmluZWQge1xuICAgIHRoaXMuYXNzZXJ0QXV0aGVudGljYXRlZCgpO1xuICAgIHJldHVybiB0aGlzLmNsYWltcyFbbmFtZV07XG4gIH1cbn1cblxuLyoqXG4gKiBDb2duaXRvQXV0aG9yaXplciBpcyBhbiBhYnN0cmFjdCBjbGFzcyByZXByZXNlbnRpbmcgYW4gYXV0aG9yaXplclxuICogdGhhdCBjYW4gYmUgdXNlZCB0byBhdXRoZW50aWNhdGUgYW5kIGF1dGhvcml6ZSBhIHVzZXIgdGhyb3VnaCBDb2duaXRvLlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQ29nbml0b0F1dGhvcml6ZXIgZXh0ZW5kcyBKd3RBdXRob3JpemVyIHtcblxuICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoand0SXNzdWVyVXJsLCBqd3RHcm91cENsYWltLCAnYWRtaW4nKTtcbiAgfVxufVxuXG4vKipcbiAqIEltcGxlbWVudHMgYXV0aG9yaXphdGlvbiBvbiBBUEkgR2F0ZXdheSB2MSAoUmVzdCBBUEkpIHVzaW5nIEpXVC5cbiAqL1xuZXhwb3J0IGNsYXNzIEFwaUdhdGV3YXl2MUp3dEF1dGhvcml6ZXIgZXh0ZW5kcyBKd3RBdXRob3JpemVyIHtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgZXZlbnQ6IEFXU0xhbWJkYS5BUElHYXRld2F5UHJveHlXaXRoQ29nbml0b0F1dGhvcml6ZXJFdmVudCwgLy9GSVhNRTogTGVhcm4gYWJvdXQgcG9zc2libGUgcmVxdWVzdENvbnRleHQuYXV0aG9yaXplciBzb3VyY2VzIGluIEFQSSBnYXRld2F5XG4gICAgYWRtaW5DbGFpbTogc3RyaW5nLFxuICAgIHByb3RlY3RlZCBfbG9nZ2VyOiBsb2dnZXIuTGFtYmRhTG9nLFxuICApIHtcbiAgICBzdXBlcihqd3RJc3N1ZXJVcmwsIGp3dEdyb3VwQ2xhaW0sIGFkbWluQ2xhaW0sIGp3dEp3a3NVcmwpO1xuICB9XG5cbiAgLyoqXG4gICAqIEF1dGhlbnRpY2F0ZXMgdGhlIHVzZXIgdXNpbmcgdGhlIGNsYWltcyBwcm92aWRlZCBieSB0aGUgQVBJIEdhdGV3YXkgZXZlbnQgb3JcbiAgICogYnkgZGVjb2RpbmcgYSBKV1QgdG9rZW4gZnJvbSB0aGUgJ0F1dGhvcml6YXRpb24nIGhlYWRlci5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBhdXRoZW50aWNhdGUoKTogUHJvbWlzZTx2b2lkPiB7XG5cbiAgICAvLyBDb3VsZCBiZSBhbG1vc3QgdGhlIGV4YWN0IHNhbWUgY29kZSBhcyBDb2duaXRvIGlmIHdlIGNhbiBzcGVjaWZ5IG91ciBvd24gQXV0aG9yaXplciBpbiB0aGUgZXZlbnQncyByZXF1ZXN0IGNvbnRleHRcbiAgICBpZiAodGhpcy5ldmVudC5yZXF1ZXN0Q29udGV4dC5hdXRob3JpemVyICYmIHRoaXMuZXZlbnQucmVxdWVzdENvbnRleHQuYXV0aG9yaXplci5jbGFpbXMpIHtcbiAgICAgIHRoaXMuY2xhaW1zID0gdGhpcy5ldmVudC5yZXF1ZXN0Q29udGV4dC5hdXRob3JpemVyLmNsYWltcztcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jbGFpbXMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBhdXRoSGVhZGVyID0gdGhpcy5ldmVudC5oZWFkZXJzLmF1dGhvcml6YXRpb247XG4gICAgaWYgKCFhdXRoSGVhZGVyIHx8ICFhdXRoSGVhZGVyLnN0YXJ0c1dpdGgoJ0JlYXJlciAnKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB0b2tlbiA9IGF1dGhIZWFkZXIuc3Vic3RyaW5nKCdCZWFyZXIgJy5sZW5ndGgpO1xuXG4gICAgLy8gVmVyaWZ5IHRoZSB0b2tlbiBhbmQgc2V0IHRoZSBjbGFpbXMgb24gdGhlIGV2ZW50IGFuZCB0aGlzIG9iamVjdFxuICAgIHRyeSB7XG4gICAgICBjb25zdCBjbGFpbXM6IHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB9ID0gYXdhaXQgcHJvbWlzZWRWZXJpZnkodG9rZW4sIHRoaXMuaXNzdWVyVXJsLCB0aGlzLmp3a3NVcmwpO1xuICAgICAgdGhpcy5fbG9nZ2VyLmRlYnVnKEpTT04uc3RyaW5naWZ5KGNsYWltcykpO1xuXG4gICAgICB0aGlzLmV2ZW50LnJlcXVlc3RDb250ZXh0LmF1dGhvcml6ZXIgPSB7IGNsYWltcyB9O1xuICAgICAgdGhpcy5jbGFpbXMgPSBjbGFpbXM7XG4gICAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcihlcnIpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEltcGxlbWVudHMgSldUIEF1dGhvcml6YXRpb24gb24gQVBJIEdhdGV3YXkgdjIgKEhUVFAgQVBJKS5cbiAqL1xuZXhwb3J0IGNsYXNzIEFwaUdhdGV3YXl2Mkp3dEF1dGhvcml6ZXIgZXh0ZW5kcyBKd3RBdXRob3JpemVyIHtcbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIGV2ZW50OiBBV1NMYW1iZGEuQVBJR2F0ZXdheVByb3h5RXZlbnRWMldpdGhKV1RBdXRob3JpemVyLCBwcm90ZWN0ZWQgX2xvZ2dlcjogbG9nZ2VyLkxhbWJkYUxvZykge1xuICAgIHN1cGVyKGp3dElzc3VlclVybCwgJ2NvZ25pdG86Z3JvdXBzJywgJ2FkbWluJywgand0Sndrc1VybCk7XG4gIH1cblxuICAvKipcbiAgICogQXV0aGVudGljYXRlcyB0aGUgdXNlciB1c2luZyB0aGUgY2xhaW1zIHByb3ZpZGVkIGJ5IHRoZSBBUEkgR2F0ZXdheSBldmVudCBvclxuICAgKiBieSBkZWNvZGluZyBhIEpXVCB0b2tlbiBmcm9tIHRoZSAnQXV0aG9yaXphdGlvbicgaGVhZGVyLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGF1dGhlbnRpY2F0ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBUcnkgdG8gZ2V0IHRoZSBjbGFpbXMgZnJvbSB0aGUgZXZlbnRcbiAgICB0aGlzLmNsYWltcyA9IHRoaXMuZXZlbnQucmVxdWVzdENvbnRleHQuYXV0aG9yaXplcj8uand0Py5jbGFpbXM7XG5cbiAgICAvLyBJZiBubyBwb29sIElEIGlzIGRlZmluZWQgb3IgY2xhaW1zIGV4aXN0LCByZXR1cm4gZWFybHlcbiAgICBpZiAoIWNvZ25pdG9Qb29sSWQgfHwgdGhpcy5jbGFpbXMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBFeHRyYWN0IHRoZSB0b2tlbiBmcm9tIHRoZSBBdXRob3JpemF0aW9uIGhlYWRlclxuICAgIGNvbnN0IGF1dGhIZWFkZXIgPSB0aGlzLmV2ZW50LmhlYWRlcnMuYXV0aG9yaXphdGlvbjtcbiAgICBpZiAoIWF1dGhIZWFkZXIgfHwgIWF1dGhIZWFkZXIuc3RhcnRzV2l0aCgnQmVhcmVyICcpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHRva2VuID0gYXV0aEhlYWRlci5zdWJzdHJpbmcoJ0JlYXJlciAnLmxlbmd0aCk7XG5cbiAgICAvLyBWZXJpZnkgdGhlIHRva2VuIGFuZCBzZXQgdGhlIGNsYWltcyBvbiB0aGUgZXZlbnQgYW5kIHRoaXMgb2JqZWN0XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNsYWltczogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nIH0gPSBhd2FpdCBwcm9taXNlZFZlcmlmeSh0b2tlbiwgdGhpcy5pc3N1ZXJVcmwsIHRoaXMuandrc1VybCk7XG4gICAgICB0aGlzLl9sb2dnZXIuZGVidWcoSlNPTi5zdHJpbmdpZnkoY2xhaW1zKSk7XG5cbiAgICAgIHRoaXMuZXZlbnQucmVxdWVzdENvbnRleHQuYXV0aG9yaXplciA9IHtcbiAgICAgICAgand0OiB7XG4gICAgICAgICAgY2xhaW1zLFxuICAgICAgICAgIHNjb3BlczogWydvcGVuaWQnLCAnZW1haWwnXSxcbiAgICAgICAgfSxcbiAgICAgICAgaW50ZWdyYXRpb25MYXRlbmN5OiAwLFxuICAgICAgICBwcmluY2lwYWxJZDogJ3Rvb2xib3gnLFxuICAgICAgfTtcbiAgICAgIHRoaXMuY2xhaW1zID0gY2xhaW1zO1xuICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoZXJyKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBBcGlHYXRld2F5djFDb2duaXRvQXV0aG9yaXplciBpcyBhIHNwZWNpYWxpemF0aW9uIG9mIGFuIEFwaUdhdGV3YXl2MUp3dEF1dGhvcml6ZXJcbiAqIGFuZCBpbXBsZW1lbnRzIGF1dGhlbnRpY2F0aW9uIGxvZ2ljIGZvciBBUEkgR2F0ZXdheSB2MSByZXF1ZXN0cyB3aGVuIHVzaW5nIENvZ25pdG8uLlxuICovXG5leHBvcnQgY2xhc3MgQXBpR2F0ZXdheXYxQ29nbml0b0F1dGhvcml6ZXIgZXh0ZW5kcyBBcGlHYXRld2F5djFKd3RBdXRob3JpemVyIHtcblxuICAvKipcbiAgICogVGhlIGV2ZW50IHRoYXQgdHJpZ2dlcmVkIHRoZSBhdXRob3JpemF0aW9uIGNoZWNrLlxuICAgKi9cbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIGV2ZW50OiBBV1NMYW1iZGEuQVBJR2F0ZXdheVByb3h5V2l0aENvZ25pdG9BdXRob3JpemVyRXZlbnQsIHByb3RlY3RlZCBfbG9nZ2VyOiBsb2dnZXIuTGFtYmRhTG9nKSB7XG4gICAgc3VwZXIoZXZlbnQsICdhZG1pbicsIF9sb2dnZXIpO1xuICB9XG59XG5cbi8qKlxuICogQXBpR2F0ZXdheXYyQ29nbml0b0F1dGhvcml6ZXIgaXMgYSBjbGFzcyB0aGF0IGV4dGVuZHMgQ29nbml0b0F1dGhvcml6ZXJcbiAqIGFuZCBpbXBsZW1lbnRzIGF1dGhlbnRpY2F0aW9uIGxvZ2ljIGZvciBBUEkgR2F0ZXdheSB2MiByZXF1ZXN0cyB3aXRoIGFcbiAqIEpXVCBhdXRob3JpemVyLlxuICovXG5leHBvcnQgY2xhc3MgQXBpR2F0ZXdheXYyQ29nbml0b0F1dGhvcml6ZXIgZXh0ZW5kcyBBcGlHYXRld2F5djJKd3RBdXRob3JpemVyIHtcblxuICAvKipcbiAgICogVGhlIGV2ZW50IHRoYXQgdHJpZ2dlcmVkIHRoZSBhdXRob3JpemF0aW9uIGNoZWNrLlxuICAgKi9cbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIGV2ZW50OiBBV1NMYW1iZGEuQVBJR2F0ZXdheVByb3h5RXZlbnRWMldpdGhKV1RBdXRob3JpemVyLCBwcm90ZWN0ZWQgX2xvZ2dlcjogbG9nZ2VyLkxhbWJkYUxvZykge1xuICAgIHN1cGVyKGV2ZW50LCBfbG9nZ2VyKTtcbiAgfVxufVxuXG4vKipcbiAqIEFwcFN5bmNDb2duaXRvQXV0aG9yaXplciBpcyBhIGNsYXNzIHRoYXQgZXh0ZW5kcyBDb2duaXRvQXV0aG9yaXplclxuICogYW5kIGltcGxlbWVudHMgYXV0aGVudGljYXRpb24gbG9naWMgZm9yIEFwcFN5bmMgcmVzb2x2ZXIgZXZlbnRzIHdpdGggYVxuICogQ29nbml0byBhdXRob3JpemVyLlxuICovXG5leHBvcnQgY2xhc3MgQXBwU3luY0NvZ25pdG9BdXRob3JpemVyIGV4dGVuZHMgQ29nbml0b0F1dGhvcml6ZXIge1xuXG4gIC8qKlxuICAgKiBUaGUgZXZlbnQgdGhhdCB0cmlnZ2VyZWQgdGhlIGF1dGhvcml6YXRpb24gY2hlY2suXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgZXZlbnQ6IEFXU0xhbWJkYS5BcHBTeW5jUmVzb2x2ZXJFdmVudDxhbnk+KSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBdXRoZW50aWNhdGVzIHRoZSB1c2VyIHVzaW5nIHRoZSBjbGFpbXMgcHJvdmlkZWQgYnkgdGhlIEFwcFN5bmMgZXZlbnQuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgYXV0aGVudGljYXRlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIFRyeSB0byBnZXQgdGhlIGNsYWltcyBmcm9tIHRoZSBldmVudFxuICAgIGlmICh0aGlzLmV2ZW50LmlkZW50aXR5KSB7XG4gICAgICB0aGlzLmNsYWltcyA9ICh0aGlzLmV2ZW50LmlkZW50aXR5IGFzIEFXU0xhbWJkYS5BcHBTeW5jSWRlbnRpdHlDb2duaXRvKS5jbGFpbXM7XG4gICAgfVxuICB9XG5cbn1cbiJdfQ==
|
|
307
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9sYW1iZGEvYXV0aC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxxQ0FBOEI7QUFDOUIsa0RBQTBCO0FBQzFCLCtDQUFxRTtBQUNyRSw0REFBa0M7QUFFbEMscUNBQWdFO0FBRWhFLE1BQU0sYUFBYSxHQUFHLGFBQUcsQ0FBQyxZQUFZLElBQUksRUFBRSxDQUFDO0FBQzdDLE1BQU0saUJBQWlCLEdBQUcsYUFBRyxDQUFDLGdCQUFnQixJQUFJLGFBQUcsQ0FBQyxVQUFVLElBQUksY0FBYyxDQUFDO0FBRW5GLE1BQU0sWUFBWSxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUMsdUJBQXVCLGlCQUFpQixrQkFBa0IsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBRyxDQUFDLGNBQWMsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUM1SSxNQUFNLFVBQVUsR0FBRyxhQUFhLENBQUMsQ0FBQyxDQUFDLEdBQUcsWUFBWSx3QkFBd0IsQ0FBQyxDQUFDLENBQUMsYUFBRyxDQUFDLFlBQVksQ0FBQztBQUM5RixNQUFNLGFBQWEsR0FBRyxhQUFhLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQUcsQ0FBQyxlQUFlLElBQUksRUFBRSxDQUFDLENBQUM7QUFDckYsTUFBTSxXQUFXLEdBQUcsQ0FBQyxhQUFHLENBQUMsZ0JBQWdCLElBQUksYUFBRyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBRyxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0FBNkI3SCxJQUFJLFNBQTBDLENBQUM7QUFFL0MsTUFBTSxhQUFhLEdBQUcsS0FBSyxFQUFFLE9BQWUsRUFBZ0MsRUFBRTtJQUM1RSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7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LEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMxQixDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBM0NELDhEQTJDQztBQUVEOzs7R0FHRztBQUNILE1BQWEsNkJBQThCLFNBQVEseUJBQXlCO0lBRTFFOztPQUVHO0lBQ0gsWUFBc0IsS0FBMEQsRUFBWSxPQUF5QjtRQUNuSCxLQUFLLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztRQURYLFVBQUssR0FBTCxLQUFLLENBQXFEO1FBQVksWUFBTyxHQUFQLE9BQU8sQ0FBa0I7SUFFckgsQ0FBQztDQUNGO0FBUkQsc0VBUUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBYSw2QkFBOEIsU0FBUSx5QkFBeUI7SUFFMUU7O09BRUc7SUFDSCxZQUFzQixLQUF3RCxFQUFZLE9BQXlCO1FBQ2pILEtBQUssQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFERixVQUFLLEdBQUwsS0FBSyxDQUFtRDtRQUFZLFlBQU8sR0FBUCxPQUFPLENBQWtCO0lBRW5ILENBQUM7Q0FDRjtBQVJELHNFQVFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQWEsd0JBQXlCLFNBQVEsaUJBQWlCO0lBRTdEOztPQUVHO0lBQ0gsWUFBc0IsS0FBMEM7UUFDOUQsS0FBSyxFQUFFLENBQUM7UUFEWSxVQUFLLEdBQUwsS0FBSyxDQUFxQztJQUVoRSxDQUFDO0lBRUQ7O09BRUc7SUFDSSxLQUFLLENBQUMsWUFBWTtRQUN2Qix1Q0FBdUM7UUFDdkMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxNQUFNLEdBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUE2QyxDQUFDLE1BQU0sQ0FBQztRQUNqRixDQUFDO0lBQ0gsQ0FBQztDQUVGO0FBbkJELDREQW1CQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGVudiB9IGZyb20gJ3Byb2Nlc3MnO1xuaW1wb3J0IEF4aW9zIGZyb20gJ2F4aW9zJztcbmltcG9ydCB7IHZlcmlmeSwgSnd0SGVhZGVyLCBTaWduaW5nS2V5Q2FsbGJhY2sgfSBmcm9tICdqc29ud2VidG9rZW4nO1xuaW1wb3J0IGp3a1RvUGVtIGZyb20gJ2p3ay10by1wZW0nO1xuaW1wb3J0IGxvZ2dlciBmcm9tICdsYW1iZGEtbG9nJztcbmltcG9ydCB7IEZvcmJpZGRlbkVycm9yLCBVbmF1dGhlbnRpY2F0ZWRFcnJvciB9IGZyb20gJy4vZXJyb3JzJztcblxuY29uc3QgY29nbml0b1Bvb2xJZCA9IGVudi5VU0VSX1BPT0xfSUQgPz8gJyc7XG5jb25zdCBjb2duaXRvUG9vbFJlZ2lvbiA9IGVudi5VU0VSX1BPT0xfUkVHSU9OID8/IGVudi5BV1NfUkVHSU9OID8/ICdldS1jZW50cmFsLTEnO1xuXG5jb25zdCBqd3RJc3N1ZXJVcmwgPSBjb2duaXRvUG9vbElkID8gYGh0dHBzOi8vY29nbml0by1pZHAuJHtjb2duaXRvUG9vbFJlZ2lvbn0uYW1hem9uYXdzLmNvbS8ke2NvZ25pdG9Qb29sSWR9YCA6IChlbnYuSldUX0lTU1VFUl9VUkwgPz8gJycpO1xuY29uc3Qgand0Sndrc1VybCA9IGNvZ25pdG9Qb29sSWQgPyBgJHtqd3RJc3N1ZXJVcmx9Ly53ZWxsLWtub3duL2p3a3MuanNvbmAgOiBlbnYuSldUX0pXS1NfVVJMO1xuY29uc3Qgand0R3JvdXBDbGFpbSA9IGNvZ25pdG9Qb29sSWQgPyAnY29nbml0bzpncm91cHMnIDogKGVudi5KV1RfR1JPVVBfQ0xBSU0gPz8gJycpO1xuY29uc3Qgand0QXVkaWVuY2UgPSAoZW52LkpXVF9BVURJRU5DRV9VUkwgJiYgZW52LkpXVF9BVURJRU5DRV9VUkwubGVuZ3RoID4gMCkgPyBlbnYuSldUX0FVRElFTkNFX1VSTC5zcGxpdCgnfHwnKSA6IHVuZGVmaW5lZDtcblxuaW50ZXJmYWNlIFB1YmxpY0tleSB7XG4gIGFsZzogc3RyaW5nO1xuICBlOiBzdHJpbmc7XG4gIGtpZDogc3RyaW5nO1xuICBrdHk6IHN0cmluZztcbiAgbjogc3RyaW5nO1xuICB1c2U6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIFB1YmxpY0tleU1ldGEge1xuICBpbnN0YW5jZTogUHVibGljS2V5O1xuICBwZW06IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIFB1YmxpY0tleXMge1xuICBrZXlzOiBQdWJsaWNLZXlbXTtcbn1cblxuaW50ZXJmYWNlIElzc3Vlck1ldGFkYXRhIHtcbiAgandrc191cmk/OiBzdHJpbmc7XG4gIFtrZXk6IHN0cmluZ106IHVua25vd247XG59XG5cbmludGVyZmFjZSBNYXBPZktpZFRvUHVibGljS2V5IHtcbiAgW2tleTogc3RyaW5nXTogUHVibGljS2V5TWV0YTtcbn1cblxubGV0IGNhY2hlS2V5czogTWFwT2ZLaWRUb1B1YmxpY0tleSB8IHVuZGVmaW5lZDtcblxuY29uc3QgZ2V0UHVibGljS2V5cyA9IGFzeW5jIChqd2tzVXJsOiBzdHJpbmcpOiBQcm9taXNlPE1hcE9mS2lkVG9QdWJsaWNLZXk+ID0+IHtcbiAgaWYgKCFjYWNoZUtleXMpIHtcbiAgICBjb25zdCBwdWJsaWNLZXlzOiBQdWJsaWNLZXlzID0gKGF3YWl0IEF4aW9zLmdldDxQdWJsaWNLZXlzPihqd2tzVXJsKSkuZGF0YTtcbiAgICBjYWNoZUtleXMgPSBwdWJsaWNLZXlzLmtleXMucmVkdWNlKChhZ2csIGN1cnJlbnQpID0+IHtcbiAgICAgIGNvbnN0IHBlbSA9IGp3a1RvUGVtKGN1cnJlbnQgYXMgandrVG9QZW0uSldLKTtcbiAgICAgIGFnZ1tjdXJyZW50LmtpZF0gPSB7IGluc3RhbmNlOiBjdXJyZW50LCBwZW0gfTtcbiAgICAgIHJldHVybiBhZ2c7XG4gICAgfSwge30gYXMgTWFwT2ZLaWRUb1B1YmxpY0tleSk7XG4gICAgcmV0dXJuIGNhY2hlS2V5cztcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gY2FjaGVLZXlzO1xuICB9XG59O1xuXG4vLyBHcmFiIHRoZSBKV0tTIFVSSSBmcm9tIHRoZSBKV1QgaXNzdWVyJ3MgbWV0YWRhdGFcbmNvbnN0IGdldEp3a3NVcmkgPSBhc3luYyAoZGlzY292ZXJ5VXJpOiBzdHJpbmcsIGp3a3NVcmk/OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4gPT4ge1xuICBpZiAoandrc1VyaSkge1xuICAgIHJldHVybiBqd2tzVXJpO1xuICB9XG4gIGNvbnN0IHdlbGxLbm93blVyaSA9IGAke2Rpc2NvdmVyeVVyaX0vLndlbGwta25vd25gO1xuICBjb25zdCBpc3N1ZXJNZXRhZGF0YSA9IChhd2FpdCBBeGlvcy5nZXQ8SXNzdWVyTWV0YWRhdGE+KHdlbGxLbm93blVyaSkpLmRhdGE7XG4gIGlmICghaXNzdWVyTWV0YWRhdGEuandrc191cmkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0lzc3VlciBkb2VzIG5vdCBvZmZlciBKV0tTIGVuZHBvaW50Jyk7XG4gIH1cbiAgcmV0dXJuIGlzc3Vlck1ldGFkYXRhLmp3a3NfdXJpO1xufTtcblxuY29uc3QgcHJvbWlzZWRWZXJpZnkgPSAodG9rZW46IHN0cmluZywgaXNzdWVyVXJpOiBzdHJpbmcsIGp3a3NVcmk/OiBzdHJpbmcpOiBQcm9taXNlPHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB9PiA9PiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgdmVyaWZ5KHRva2VuLCAoaGVhZGVyOiBKd3RIZWFkZXIsIGNiOiBTaWduaW5nS2V5Q2FsbGJhY2spID0+IHtcbiAgICAgIGlmICghaGVhZGVyLmtpZCkge1xuICAgICAgICBjYihuZXcgRXJyb3IoJ25vIGtleSBpZCBmb3VuZCcpKTtcbiAgICAgIH1cbiAgICAgIGdldEp3a3NVcmkoaXNzdWVyVXJpLCBqd2tzVXJpKS50aGVuKGdldFB1YmxpY0tleXMpLnRoZW4oKGtleXMpID0+IHtcbiAgICAgICAgY2IobnVsbCwga2V5c1toZWFkZXIua2lkIV0ucGVtKTtcbiAgICAgIH0sIGNiKTtcbiAgICB9LCB7IGlzc3VlcjogaXNzdWVyVXJpLCBhdWRpZW5jZTogand0QXVkaWVuY2UgYXMgW3N0cmluZywgLi4uc3RyaW5nW11dIH0sIChlcnI6IGFueSwgZGVjb2RlZDogYW55KSA9PiB7XG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzb2x2ZShkZWNvZGVkIGFzIHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59O1xuXG4vKipcbiAqIEEgZ2VuZXJpYyBKV1QgYXV0aG9yaXplciBiYXNlIGNsYXNzLCBwcmVzdXBwb3NpbmcgdGhlIHByZXNlbmNlIG9mIGFuIGlzc3VlciwgYSBudW1iZXIgb2YgYXV0aG9yaXphdGlvbiBjbGFpbXMsIGFuXG4gKiBhZG1pbiBwZXJtaXNzaW9uIGNsYWltIGFuZCBvcHRpb25hbGx5IGEgc2VwYXJhdGUgVVJMIHRvIGEgSldLUyB0byB1c2UgaWYgdGhlIGlzc3VlcnMgd2VsbC1rbm93biBVUkwgZG9lcyBub3RcbiAqIHBvaW50IHRvIGl0IGluIGl0cyBtZXRhZGF0YS5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEp3dEF1dGhvcml6ZXIge1xuXG4gIC8qKlxuICAgKiBUaGUgY2xhaW1zIG9mIHRoZSBhdXRoZW50aWNhdGVkIHVzZXIuXG4gICAqL1xuICBwcm90ZWN0ZWQgY2xhaW1zPzogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IHN0cmluZ1tdIH07XG5cbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBpc3N1ZXJVcmw6IHN0cmluZyxcbiAgICBwcm90ZWN0ZWQgZ3JvdXBDbGFpbTogc3RyaW5nLFxuICAgIHByb3RlY3RlZCBhZG1pbkNsYWltOiBzdHJpbmcsXG4gICAgcHJvdGVjdGVkIGp3a3NVcmw/OiBzdHJpbmcsXG4gICkge1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gYXJyYXkgb2YgZ3JvdXBzIHRoZSB1c2VyIGJlbG9uZ3MgdG8sIG9yIGFuIGVtcHR5IGFycmF5IGlmIHRoZSB1c2VyXG4gICAqIGlzIG5vdCBhdXRoZW50aWNhdGVkIG9yIGhhcyBubyBncm91cHMuXG4gICAqL1xuICBwdWJsaWMgZ2V0R3JvdXBzKCk6IHN0cmluZ1tdIHtcbiAgICBpZiAoIXRoaXMuaXNBdXRoZW50aWNhdGVkKCkgfHwgIXRoaXMuY2xhaW1zIS5oYXNPd25Qcm9wZXJ0eSh0aGlzLmdyb3VwQ2xhaW0pKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmNsYWltcyFbdGhpcy5ncm91cENsYWltXSBhcyB1bmtub3duIGFzIHN0cmluZ1tdO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgdXNlciBiZWxvbmdzIHRvIHRoZSBzcGVjaWZpZWQgZ3JvdXAsIGZhbHNlIG90aGVyd2lzZS5cbiAgICogQHBhcmFtIGdyb3VwIFRoZSBuYW1lIG9mIHRoZSBncm91cCB0byBjaGVjay5cbiAgICovXG4gIHB1YmxpYyBoYXNHcm91cChncm91cDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgLy8gJ2NvZ25pdG86Z3JvdXBzJzogWyAnYWRtaW4nIF0sXG4gICAgcmV0dXJuIHRoaXMuZ2V0R3JvdXBzKCkuaW5jbHVkZXMoZ3JvdXApO1xuICB9XG5cbiAgLyoqXG4gICAqIEF1dGhlbnRpY2F0ZXMgdGhlIHVzZXIgYW5kIHNldHMgdGhlIGNsYWltcy5cbiAgICovXG4gIHB1YmxpYyBhYnN0cmFjdCBhdXRoZW50aWNhdGUoKTogUHJvbWlzZTx2b2lkPjtcblxuICAvKipcbiAgICogUmV0dXJucyB0cnVlIGlmIHRoZSB1c2VyIGlzIGF1dGhlbnRpY2F0ZWQsIGZhbHNlIG90aGVyd2lzZS5cbiAgICovXG4gIHB1YmxpYyBpc0F1dGhlbnRpY2F0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY2xhaW1zICE9PSB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogVGhyb3dzIGFuIFVuYXV0aGVudGljYXRlZEVycm9yIGlmIHRoZSB1c2VyIGlzIG5vdCBhdXRoZW50aWNhdGVkLlxuICAgKi9cbiAgcHVibGljIGFzc2VydEF1dGhlbnRpY2F0ZWQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmlzQXV0aGVudGljYXRlZCgpKSB7XG4gICAgICB0aHJvdyBuZXcgVW5hdXRoZW50aWNhdGVkRXJyb3IoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVGhyb3dzIGEgRm9yYmlkZGVuRXJyb3IgaWYgdGhlIHVzZXIgaXMgbm90IGF1dGhlbnRpY2F0ZWQgb3IgZG9lcyBub3QgYmVsb25nXG4gICAqIHRvIHRoZSBzcGVjaWZpZWQgZ3JvdXAuXG4gICAqIEBwYXJhbSBncm91cCBUaGUgbmFtZSBvZiB0aGUgZ3JvdXAgdG8gY2hlY2suXG4gICAqL1xuICBwdWJsaWMgYXNzZXJ0R3JvdXAoZ3JvdXA6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuYXNzZXJ0QXV0aGVudGljYXRlZCgpO1xuICAgIGlmICghdGhpcy5oYXNHcm91cChncm91cCkpIHtcbiAgICAgIHRocm93IG5ldyBGb3JiaWRkZW5FcnJvcigpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHVzZXIgYmVsb25ncyB0byB0aGUgJ2FkbWluJyBncm91cCwgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgKi9cbiAgcHVibGljIGlzQWRtaW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaGFzR3JvdXAodGhpcy5hZG1pbkNsYWltKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaHJvd3MgYSBGb3JiaWRkZW5FcnJvciBpZiB0aGUgdXNlciBpcyBub3QgYXV0aGVudGljYXRlZCBvciBpcyBub3QgYW4gYWRtaW4uXG4gICAqL1xuICBwdWJsaWMgYXNzZXJ0QWRtaW4oKTogdm9pZCB7XG4gICAgdGhpcy5hc3NlcnRHcm91cCh0aGlzLmFkbWluQ2xhaW0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGVtYWlsIG9mIHRoZSBhdXRoZW50aWNhdGVkIHVzZXIuXG4gICAqL1xuICBwdWJsaWMgZ2V0RU1haWwoKTogc3RyaW5nIHtcbiAgICB0aGlzLmFzc2VydEF1dGhlbnRpY2F0ZWQoKTtcbiAgICByZXR1cm4gdGhpcy5jbGFpbXMhLmVtYWlsIGFzIHN0cmluZztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBzdWJqZWN0IG9mIHRoZSBhdXRoZW50aWNhdGVkIHVzZXIuXG4gICAqL1xuICBwdWJsaWMgZ2V0U3ViamVjdCgpOiBzdHJpbmcge1xuICAgIHRoaXMuYXNzZXJ0QXV0aGVudGljYXRlZCgpO1xuICAgIHJldHVybiB0aGlzLmNsYWltcyEuc3ViIGFzIHN0cmluZztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgY2xhaW0gd2l0aCB0aGUgc3BlY2lmaWVkIG5hbWUsIG9yIHVuZGVmaW5lZCBpZiB0aGVcbiAgICogY2xhaW0gZG9lcyBub3QgZXhpc3QuXG4gICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBjbGFpbSB0byByZXRyaWV2ZS5cbiAgICovXG4gIHB1YmxpYyBnZXRDbGFpbShuYW1lOiBzdHJpbmcpOiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgc3RyaW5nW10gfCB1bmRlZmluZWQge1xuICAgIHRoaXMuYXNzZXJ0QXV0aGVudGljYXRlZCgpO1xuICAgIHJldHVybiB0aGlzLmNsYWltcyFbbmFtZV07XG4gIH1cbn1cblxuLyoqXG4gKiBDb2duaXRvQXV0aG9yaXplciBpcyBhbiBhYnN0cmFjdCBjbGFzcyByZXByZXNlbnRpbmcgYW4gYXV0aG9yaXplclxuICogdGhhdCBjYW4gYmUgdXNlZCB0byBhdXRoZW50aWNhdGUgYW5kIGF1dGhvcml6ZSBhIHVzZXIgdGhyb3VnaCBDb2duaXRvLlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQ29nbml0b0F1dGhvcml6ZXIgZXh0ZW5kcyBKd3RBdXRob3JpemVyIHtcblxuICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoand0SXNzdWVyVXJsLCBqd3RHcm91cENsYWltLCAnYWRtaW4nKTtcbiAgfVxufVxuXG4vKipcbiAqIEltcGxlbWVudHMgYXV0aG9yaXphdGlvbiBvbiBBUEkgR2F0ZXdheSB2MSAoUmVzdCBBUEkpIHVzaW5nIEpXVC5cbiAqL1xuZXhwb3J0IGNsYXNzIEFwaUdhdGV3YXl2MUp3dEF1dGhvcml6ZXIgZXh0ZW5kcyBKd3RBdXRob3JpemVyIHtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgZXZlbnQ6IEFXU0xhbWJkYS5BUElHYXRld2F5UHJveHlXaXRoQ29nbml0b0F1dGhvcml6ZXJFdmVudCwgLy9GSVhNRTogTGVhcm4gYWJvdXQgcG9zc2libGUgcmVxdWVzdENvbnRleHQuYXV0aG9yaXplciBzb3VyY2VzIGluIEFQSSBnYXRld2F5XG4gICAgYWRtaW5DbGFpbTogc3RyaW5nLFxuICAgIHByb3RlY3RlZCBfbG9nZ2VyOiBsb2dnZXIuTGFtYmRhTG9nLFxuICApIHtcbiAgICBzdXBlcihqd3RJc3N1ZXJVcmwsIGp3dEdyb3VwQ2xhaW0sIGFkbWluQ2xhaW0sIGp3dEp3a3NVcmwpO1xuICB9XG5cbiAgLyoqXG4gICAqIEF1dGhlbnRpY2F0ZXMgdGhlIHVzZXIgdXNpbmcgdGhlIGNsYWltcyBwcm92aWRlZCBieSB0aGUgQVBJIEdhdGV3YXkgZXZlbnQgb3JcbiAgICogYnkgZGVjb2RpbmcgYSBKV1QgdG9rZW4gZnJvbSB0aGUgJ0F1dGhvcml6YXRpb24nIGhlYWRlci5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBhdXRoZW50aWNhdGUoKTogUHJvbWlzZTx2b2lkPiB7XG5cbiAgICAvLyBDb3VsZCBiZSBhbG1vc3QgdGhlIGV4YWN0IHNhbWUgY29kZSBhcyBDb2duaXRvIGlmIHdlIGNhbiBzcGVjaWZ5IG91ciBvd24gQXV0aG9yaXplciBpbiB0aGUgZXZlbnQncyByZXF1ZXN0IGNvbnRleHRcbiAgICBpZiAodGhpcy5ldmVudC5yZXF1ZXN0Q29udGV4dC5hdXRob3JpemVyICYmIHRoaXMuZXZlbnQucmVxdWVzdENvbnRleHQuYXV0aG9yaXplci5jbGFpbXMpIHtcbiAgICAgIHRoaXMuY2xhaW1zID0gdGhpcy5ldmVudC5yZXF1ZXN0Q29udGV4dC5hdXRob3JpemVyLmNsYWltcztcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jbGFpbXMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBhdXRoSGVhZGVyID0gdGhpcy5ldmVudC5oZWFkZXJzLmF1dGhvcml6YXRpb247XG4gICAgaWYgKCFhdXRoSGVhZGVyIHx8ICFhdXRoSGVhZGVyLnN0YXJ0c1dpdGgoJ0JlYXJlciAnKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB0b2tlbiA9IGF1dGhIZWFkZXIuc3Vic3RyaW5nKCdCZWFyZXIgJy5sZW5ndGgpO1xuXG4gICAgLy8gVmVyaWZ5IHRoZSB0b2tlbiBhbmQgc2V0IHRoZSBjbGFpbXMgb24gdGhlIGV2ZW50IGFuZCB0aGlzIG9iamVjdFxuICAgIHRyeSB7XG4gICAgICBjb25zdCBjbGFpbXM6IHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB9ID0gYXdhaXQgcHJvbWlzZWRWZXJpZnkodG9rZW4sIHRoaXMuaXNzdWVyVXJsLCB0aGlzLmp3a3NVcmwpO1xuICAgICAgdGhpcy5fbG9nZ2VyLmRlYnVnKEpTT04uc3RyaW5naWZ5KGNsYWltcykpO1xuXG4gICAgICB0aGlzLmV2ZW50LnJlcXVlc3RDb250ZXh0LmF1dGhvcml6ZXIgPSB7IGNsYWltcyB9O1xuICAgICAgdGhpcy5jbGFpbXMgPSBjbGFpbXM7XG4gICAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcihlcnIpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEltcGxlbWVudHMgSldUIEF1dGhvcml6YXRpb24gb24gQVBJIEdhdGV3YXkgdjIgKEhUVFAgQVBJKS5cbiAqL1xuZXhwb3J0IGNsYXNzIEFwaUdhdGV3YXl2Mkp3dEF1dGhvcml6ZXIgZXh0ZW5kcyBKd3RBdXRob3JpemVyIHtcbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIGV2ZW50OiBBV1NMYW1iZGEuQVBJR2F0ZXdheVByb3h5RXZlbnRWMldpdGhKV1RBdXRob3JpemVyLCBwcm90ZWN0ZWQgX2xvZ2dlcjogbG9nZ2VyLkxhbWJkYUxvZykge1xuICAgIHN1cGVyKGp3dElzc3VlclVybCwgJ2NvZ25pdG86Z3JvdXBzJywgJ2FkbWluJywgand0Sndrc1VybCk7XG4gIH1cblxuICAvKipcbiAgICogQXV0aGVudGljYXRlcyB0aGUgdXNlciB1c2luZyB0aGUgY2xhaW1zIHByb3ZpZGVkIGJ5IHRoZSBBUEkgR2F0ZXdheSBldmVudCBvclxuICAgKiBieSBkZWNvZGluZyBhIEpXVCB0b2tlbiBmcm9tIHRoZSAnQXV0aG9yaXphdGlvbicgaGVhZGVyLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGF1dGhlbnRpY2F0ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBUcnkgdG8gZ2V0IHRoZSBjbGFpbXMgZnJvbSB0aGUgZXZlbnRcbiAgICB0aGlzLmNsYWltcyA9IHRoaXMuZXZlbnQucmVxdWVzdENvbnRleHQuYXV0aG9yaXplcj8uand0Py5jbGFpbXM7XG5cbiAgICAvLyBJZiBubyBwb29sIElEIGlzIGRlZmluZWQgb3IgY2xhaW1zIGV4aXN0LCByZXR1cm4gZWFybHlcbiAgICBpZiAoIWNvZ25pdG9Qb29sSWQgfHwgdGhpcy5jbGFpbXMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBFeHRyYWN0IHRoZSB0b2tlbiBmcm9tIHRoZSBBdXRob3JpemF0aW9uIGhlYWRlclxuICAgIGNvbnN0IGF1dGhIZWFkZXIgPSB0aGlzLmV2ZW50LmhlYWRlcnMuYXV0aG9yaXphdGlvbjtcbiAgICBpZiAoIWF1dGhIZWFkZXIgfHwgIWF1dGhIZWFkZXIuc3RhcnRzV2l0aCgnQmVhcmVyICcpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHRva2VuID0gYXV0aEhlYWRlci5zdWJzdHJpbmcoJ0JlYXJlciAnLmxlbmd0aCk7XG5cbiAgICAvLyBWZXJpZnkgdGhlIHRva2VuIGFuZCBzZXQgdGhlIGNsYWltcyBvbiB0aGUgZXZlbnQgYW5kIHRoaXMgb2JqZWN0XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNsYWltczogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nIH0gPSBhd2FpdCBwcm9taXNlZFZlcmlmeSh0b2tlbiwgdGhpcy5pc3N1ZXJVcmwsIHRoaXMuandrc1VybCk7XG4gICAgICB0aGlzLl9sb2dnZXIuZGVidWcoSlNPTi5zdHJpbmdpZnkoY2xhaW1zKSk7XG5cbiAgICAgIHRoaXMuZXZlbnQucmVxdWVzdENvbnRleHQuYXV0aG9yaXplciA9IHtcbiAgICAgICAgand0OiB7XG4gICAgICAgICAgY2xhaW1zLFxuICAgICAgICAgIHNjb3BlczogWydvcGVuaWQnLCAnZW1haWwnXSxcbiAgICAgICAgfSxcbiAgICAgICAgaW50ZWdyYXRpb25MYXRlbmN5OiAwLFxuICAgICAgICBwcmluY2lwYWxJZDogJ3Rvb2xib3gnLFxuICAgICAgfTtcbiAgICAgIHRoaXMuY2xhaW1zID0gY2xhaW1zO1xuICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoZXJyKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBBcGlHYXRld2F5djFDb2duaXRvQXV0aG9yaXplciBpcyBhIHNwZWNpYWxpemF0aW9uIG9mIGFuIEFwaUdhdGV3YXl2MUp3dEF1dGhvcml6ZXJcbiAqIGFuZCBpbXBsZW1lbnRzIGF1dGhlbnRpY2F0aW9uIGxvZ2ljIGZvciBBUEkgR2F0ZXdheSB2MSByZXF1ZXN0cyB3aGVuIHVzaW5nIENvZ25pdG8uLlxuICovXG5leHBvcnQgY2xhc3MgQXBpR2F0ZXdheXYxQ29nbml0b0F1dGhvcml6ZXIgZXh0ZW5kcyBBcGlHYXRld2F5djFKd3RBdXRob3JpemVyIHtcblxuICAvKipcbiAgICogVGhlIGV2ZW50IHRoYXQgdHJpZ2dlcmVkIHRoZSBhdXRob3JpemF0aW9uIGNoZWNrLlxuICAgKi9cbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIGV2ZW50OiBBV1NMYW1iZGEuQVBJR2F0ZXdheVByb3h5V2l0aENvZ25pdG9BdXRob3JpemVyRXZlbnQsIHByb3RlY3RlZCBfbG9nZ2VyOiBsb2dnZXIuTGFtYmRhTG9nKSB7XG4gICAgc3VwZXIoZXZlbnQsICdhZG1pbicsIF9sb2dnZXIpO1xuICB9XG59XG5cbi8qKlxuICogQXBpR2F0ZXdheXYyQ29nbml0b0F1dGhvcml6ZXIgaXMgYSBjbGFzcyB0aGF0IGV4dGVuZHMgQ29nbml0b0F1dGhvcml6ZXJcbiAqIGFuZCBpbXBsZW1lbnRzIGF1dGhlbnRpY2F0aW9uIGxvZ2ljIGZvciBBUEkgR2F0ZXdheSB2MiByZXF1ZXN0cyB3aXRoIGFcbiAqIEpXVCBhdXRob3JpemVyLlxuICovXG5leHBvcnQgY2xhc3MgQXBpR2F0ZXdheXYyQ29nbml0b0F1dGhvcml6ZXIgZXh0ZW5kcyBBcGlHYXRld2F5djJKd3RBdXRob3JpemVyIHtcblxuICAvKipcbiAgICogVGhlIGV2ZW50IHRoYXQgdHJpZ2dlcmVkIHRoZSBhdXRob3JpemF0aW9uIGNoZWNrLlxuICAgKi9cbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIGV2ZW50OiBBV1NMYW1iZGEuQVBJR2F0ZXdheVByb3h5RXZlbnRWMldpdGhKV1RBdXRob3JpemVyLCBwcm90ZWN0ZWQgX2xvZ2dlcjogbG9nZ2VyLkxhbWJkYUxvZykge1xuICAgIHN1cGVyKGV2ZW50LCBfbG9nZ2VyKTtcbiAgfVxufVxuXG4vKipcbiAqIEFwcFN5bmNDb2duaXRvQXV0aG9yaXplciBpcyBhIGNsYXNzIHRoYXQgZXh0ZW5kcyBDb2duaXRvQXV0aG9yaXplclxuICogYW5kIGltcGxlbWVudHMgYXV0aGVudGljYXRpb24gbG9naWMgZm9yIEFwcFN5bmMgcmVzb2x2ZXIgZXZlbnRzIHdpdGggYVxuICogQ29nbml0byBhdXRob3JpemVyLlxuICovXG5leHBvcnQgY2xhc3MgQXBwU3luY0NvZ25pdG9BdXRob3JpemVyIGV4dGVuZHMgQ29nbml0b0F1dGhvcml6ZXIge1xuXG4gIC8qKlxuICAgKiBUaGUgZXZlbnQgdGhhdCB0cmlnZ2VyZWQgdGhlIGF1dGhvcml6YXRpb24gY2hlY2suXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgZXZlbnQ6IEFXU0xhbWJkYS5BcHBTeW5jUmVzb2x2ZXJFdmVudDxhbnk+KSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBdXRoZW50aWNhdGVzIHRoZSB1c2VyIHVzaW5nIHRoZSBjbGFpbXMgcHJvdmlkZWQgYnkgdGhlIEFwcFN5bmMgZXZlbnQuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgYXV0aGVudGljYXRlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIFRyeSB0byBnZXQgdGhlIGNsYWltcyBmcm9tIHRoZSBldmVudFxuICAgIGlmICh0aGlzLmV2ZW50LmlkZW50aXR5KSB7XG4gICAgICB0aGlzLmNsYWltcyA9ICh0aGlzLmV2ZW50LmlkZW50aXR5IGFzIEFXU0xhbWJkYS5BcHBTeW5jSWRlbnRpdHlDb2duaXRvKS5jbGFpbXM7XG4gICAgfVxuICB9XG5cbn1cbiJdfQ==
|
package/package.json
CHANGED
|
@@ -32,57 +32,57 @@
|
|
|
32
32
|
"organization": true
|
|
33
33
|
},
|
|
34
34
|
"devDependencies": {
|
|
35
|
-
"@aws-sdk/client-cognito-identity-provider": "3.
|
|
36
|
-
"@aws-sdk/client-dynamodb": "3.
|
|
37
|
-
"@aws-sdk/client-s3": "3.
|
|
38
|
-
"@aws-sdk/lib-dynamodb": "3.
|
|
35
|
+
"@aws-sdk/client-cognito-identity-provider": "3.980.0",
|
|
36
|
+
"@aws-sdk/client-dynamodb": "3.980.0",
|
|
37
|
+
"@aws-sdk/client-s3": "3.980.0",
|
|
38
|
+
"@aws-sdk/lib-dynamodb": "3.980.0",
|
|
39
39
|
"@hapi/boom": "^10.0.1",
|
|
40
40
|
"@stylistic/eslint-plugin": "^2",
|
|
41
41
|
"@types/jest": "^29.5.14",
|
|
42
42
|
"@types/js-yaml": "^4.0.9",
|
|
43
|
-
"@types/jsonwebtoken": "^9.0.
|
|
43
|
+
"@types/jsonwebtoken": "^9.0.10",
|
|
44
44
|
"@types/jwk-to-pem": "^2.0.3",
|
|
45
45
|
"@types/lambda-log": "^2.2.1",
|
|
46
46
|
"@types/node": "^18",
|
|
47
47
|
"@types/uuid": "^9.0.8",
|
|
48
48
|
"@typescript-eslint/eslint-plugin": "^8",
|
|
49
49
|
"@typescript-eslint/parser": "^8",
|
|
50
|
-
"aws-cdk-lib": "2.
|
|
50
|
+
"aws-cdk-lib": "2.236.0",
|
|
51
51
|
"commit-and-tag-version": "^12",
|
|
52
52
|
"constructs": "^10.0.0",
|
|
53
53
|
"dynamodb-onetable": "2.7.5",
|
|
54
54
|
"eslint": "^9",
|
|
55
|
-
"eslint-import-resolver-typescript": "^
|
|
56
|
-
"eslint-plugin-import": "^2.
|
|
55
|
+
"eslint-import-resolver-typescript": "^4.4.4",
|
|
56
|
+
"eslint-plugin-import": "^2.32.0",
|
|
57
57
|
"jest": "^29.7.0",
|
|
58
58
|
"jest-junit": "^16",
|
|
59
|
-
"openapi-typescript": "7.
|
|
60
|
-
"projen": "0.
|
|
61
|
-
"ts-jest": "^29.
|
|
59
|
+
"openapi-typescript": "7.10.1",
|
|
60
|
+
"projen": "0.99.9",
|
|
61
|
+
"ts-jest": "^29.4.6",
|
|
62
62
|
"ts-node": "^10.9.2",
|
|
63
|
-
"typedoc": "0.
|
|
64
|
-
"typescript": "^5.
|
|
63
|
+
"typedoc": "0.28.16",
|
|
64
|
+
"typescript": "^5.9.3"
|
|
65
65
|
},
|
|
66
66
|
"peerDependencies": {
|
|
67
|
-
"@aws-sdk/client-cognito-identity-provider": "^3.
|
|
68
|
-
"@aws-sdk/client-dynamodb": "^3.
|
|
69
|
-
"@aws-sdk/client-s3": "^3.
|
|
70
|
-
"@aws-sdk/lib-dynamodb": "^3.
|
|
71
|
-
"aws-cdk-lib": ">=2.
|
|
67
|
+
"@aws-sdk/client-cognito-identity-provider": "^3.975.0",
|
|
68
|
+
"@aws-sdk/client-dynamodb": "^3.975.0",
|
|
69
|
+
"@aws-sdk/client-s3": "^3.975.0",
|
|
70
|
+
"@aws-sdk/lib-dynamodb": "^3.975.0",
|
|
71
|
+
"aws-cdk-lib": ">=2.236.0 <3.0.0",
|
|
72
72
|
"dynamodb-onetable": "2.7.5",
|
|
73
|
-
"openapi-typescript": "^7.
|
|
74
|
-
"projen": ">=0.
|
|
73
|
+
"openapi-typescript": "^7.10.1",
|
|
74
|
+
"projen": ">=0.99.9 <1.0.0"
|
|
75
75
|
},
|
|
76
76
|
"dependencies": {
|
|
77
|
-
"@types/aws-lambda": "^8.10.
|
|
78
|
-
"axios": "^1.
|
|
79
|
-
"constructs": "^10.
|
|
77
|
+
"@types/aws-lambda": "^8.10.160",
|
|
78
|
+
"axios": "^1.13.4",
|
|
79
|
+
"constructs": "^10.4.5",
|
|
80
80
|
"date-fns": "^4.1.0",
|
|
81
|
-
"js-yaml": "^4.1.
|
|
82
|
-
"jsonwebtoken": "^9.0.
|
|
81
|
+
"js-yaml": "^4.1.1",
|
|
82
|
+
"jsonwebtoken": "^9.0.3",
|
|
83
83
|
"jwk-to-pem": "^2.0.7",
|
|
84
84
|
"lambda-log": "^3.1.0",
|
|
85
|
-
"uuid": "^
|
|
85
|
+
"uuid": "^13.0.0"
|
|
86
86
|
},
|
|
87
87
|
"keywords": [
|
|
88
88
|
"aws",
|
|
@@ -96,7 +96,7 @@
|
|
|
96
96
|
"publishConfig": {
|
|
97
97
|
"access": "public"
|
|
98
98
|
},
|
|
99
|
-
"version": "2.
|
|
99
|
+
"version": "2.22.1",
|
|
100
100
|
"jest": {
|
|
101
101
|
"coverageProvider": "v8",
|
|
102
102
|
"testMatch": [
|