@aws-solutions-constructs/core 2.53.0 → 2.54.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/.jsii CHANGED
@@ -13,8 +13,8 @@
13
13
  "npmlog": "^7.0.0"
14
14
  },
15
15
  "dependencies": {
16
- "@aws-cdk/integ-tests-alpha": "2.127.0-alpha.0",
17
- "aws-cdk-lib": "^2.127.0",
16
+ "@aws-cdk/integ-tests-alpha": "2.135.0-alpha.0",
17
+ "aws-cdk-lib": "^2.135.0",
18
18
  "constructs": "^10.0.0"
19
19
  },
20
20
  "dependencyClosure": {
@@ -3070,6 +3070,19 @@
3070
3070
  }
3071
3071
  }
3072
3072
  },
3073
+ "aws-cdk-lib.aws_securitylake": {
3074
+ "targets": {
3075
+ "dotnet": {
3076
+ "package": "Amazon.CDK.AWS.SecurityLake"
3077
+ },
3078
+ "java": {
3079
+ "package": "software.amazon.awscdk.services.securitylake"
3080
+ },
3081
+ "python": {
3082
+ "module": "aws_cdk.aws_securitylake"
3083
+ }
3084
+ }
3085
+ },
3073
3086
  "aws-cdk-lib.aws_servicecatalog": {
3074
3087
  "targets": {
3075
3088
  "dotnet": {
@@ -3684,7 +3697,7 @@
3684
3697
  },
3685
3698
  "description": "Core CDK Construct for patterns library",
3686
3699
  "homepage": "https://github.com/awslabs/aws-solutions-constructs.git",
3687
- "jsiiVersion": "1.94.0 (build b380f01)",
3700
+ "jsiiVersion": "1.96.0 (build 921e240)",
3688
3701
  "license": "Apache-2.0",
3689
3702
  "metadata": {
3690
3703
  "jsii": {
@@ -8018,6 +8031,6 @@
8018
8031
  "symbolId": "lib/waf-helper:WafWebAclProps"
8019
8032
  }
8020
8033
  },
8021
- "version": "2.53.0",
8022
- "fingerprint": "ATGY+RQij3D7ylDPV/FYah2HMplHw/FEXFl1joln37Y="
8034
+ "version": "2.54.1",
8035
+ "fingerprint": "zsnprWE3Q7u3O+q2kZ7TNh/2w+y9sbJpkM+XtL5UXls="
8023
8036
  }
@@ -17,7 +17,6 @@ const cdk = require("aws-cdk-lib");
17
17
  const smDefaults = require("./step-function-defaults");
18
18
  const sfn = require("aws-cdk-lib/aws-stepfunctions");
19
19
  const utils_1 = require("./utils");
20
- const iam = require("aws-cdk-lib/aws-iam");
21
20
  const cloudwatch = require("aws-cdk-lib/aws-cloudwatch");
22
21
  const cloudwatch_log_group_helper_1 = require("./cloudwatch-log-group-helper");
23
22
  /**
@@ -67,35 +66,11 @@ function buildStateMachine(scope, stateMachineProps, logGroupProps) {
67
66
  if (!stateMachineProps.role) {
68
67
  const role = newStateMachine.node.findChild('Role');
69
68
  const cfnDefaultPolicy = role.node.findChild('DefaultPolicy').node.defaultChild;
70
- const jsonPolicyDocument = cfnDefaultPolicy.policyDocument.toJSON();
71
- jsonPolicyDocument.Statement =
72
- jsonPolicyDocument.Statement.filter((statement) => !Array.isArray(statement.Action) || !statement.Action[0].startsWith("logs:"));
73
- jsonPolicyDocument.Statement.push({
74
- Action: [
75
- 'logs:PutResourcePolicy',
76
- 'logs:DescribeResourcePolicies',
77
- 'logs:DescribeLogGroups'
78
- ],
79
- Effect: "Allow",
80
- Resource: [`arn:${cdk.Aws.PARTITION}:logs:${cdk.Aws.REGION}:${cdk.Aws.ACCOUNT_ID}:*`]
81
- });
82
- jsonPolicyDocument.Statement.push({
83
- Action: [
84
- "logs:CreateLogDelivery",
85
- 'logs:GetLogDelivery',
86
- 'logs:UpdateLogDelivery',
87
- 'logs:DeleteLogDelivery',
88
- 'logs:ListLogDeliveries'
89
- ],
90
- Effect: "Allow",
91
- Resource: "*"
92
- });
93
- cfnDefaultPolicy.policyDocument = iam.PolicyDocument.fromJson(jsonPolicyDocument);
94
69
  // Override Cfn Nag warning W12: IAM policy should not allow * resource
95
70
  utils_1.addCfnSuppressRules(cfnDefaultPolicy, [
96
71
  {
97
72
  id: 'W12',
98
- reason: `The 'LogDelivery' actions do not support resource-level authorizations`
73
+ reason: `These are CDK defaults. The 'LogDelivery' actions do not support resource-level authorizations. Any logging is done by State Machine code`
99
74
  }
100
75
  ]);
101
76
  }
@@ -144,4 +119,4 @@ function buildStepFunctionCWAlarms(scope, sm) {
144
119
  return alarms;
145
120
  }
146
121
  exports.buildStepFunctionCWAlarms = buildStepFunctionCWAlarms;
147
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcC1mdW5jdGlvbi1oZWxwZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzdGVwLWZ1bmN0aW9uLWhlbHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7O0dBV0c7OztBQVNILG1DQUFtQztBQUNuQyx1REFBdUQ7QUFDdkQscURBQXFEO0FBQ3JELG1DQUFtRjtBQUNuRiwyQ0FBMkM7QUFDM0MseURBQXlEO0FBQ3pELCtFQUE4RDtBQVE5RDs7Ozs7O0dBTUc7QUFDSCxTQUFnQixpQkFBaUIsQ0FBQyxLQUFnQixFQUFFLGlCQUF3QyxFQUMxRixhQUFrQztJQUVsQyxJQUFJLFFBQXdCLENBQUM7SUFDN0IsSUFBSSw2QkFBNkIsQ0FBQztJQUVsQywrQ0FBK0M7SUFDL0MsSUFBSSxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsV0FBVyxFQUFFO1FBQ3ZDLFFBQVEsR0FBRyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDO1FBQy9DLDZCQUE2QixHQUFHLGlCQUFpQixDQUFDO0tBQ25EO1NBQU07UUFDTCxzQkFBc0I7UUFDdEIsOEVBQThFO1FBQzlFLHVGQUF1RjtRQUN2Riw2RUFBNkU7UUFDN0UsSUFBSSx5QkFBeUIsR0FBRyxhQUFhLENBQUM7UUFFOUMsSUFBSSxDQUFDLHlCQUF5QixFQUFFO1lBQzlCLHlCQUF5QixHQUFHLEVBQUUsQ0FBQztTQUNoQztRQUVELE1BQU0scUJBQXFCLEdBQUcsR0FBRyxDQUFDO1FBQ2xDLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxZQUFZLEVBQUU7WUFDNUMsTUFBTSxjQUFjLEdBQUcsb0NBQW9DLENBQUM7WUFDNUQsTUFBTSxzQkFBc0IsR0FBRyxxQkFBcUIsR0FBRyxjQUFjLENBQUMsTUFBTSxDQUFDO1lBQzdFLE1BQU0sU0FBUyxHQUFhO2dCQUMxQixHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxTQUFTO2dCQUM3QixLQUFLLENBQUMsSUFBSSxD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QUFFLFVBQVUsQ0FBQyxrQkFBa0IsQ0FBQyxrQ0FBa0M7UUFDcEYsZ0JBQWdCLEVBQUUsK0VBQStFO0tBQ2xHLENBQUMsQ0FBQyxDQUFDO0lBRUosT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQXpDRCw4REF5Q0MiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqICBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKS4gWW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZVxuICogIHdpdGggdGhlIExpY2Vuc2UuIEEgY29weSBvZiB0aGUgTGljZW5zZSBpcyBsb2NhdGVkIGF0XG4gKlxuICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiAgb3IgaW4gdGhlICdsaWNlbnNlJyBmaWxlIGFjY29tcGFueWluZyB0aGlzIGZpbGUuIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAnQVMgSVMnIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVNcbiAqICBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9uc1xuICogIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG4vKlxuICogIFRoZSBmdW5jdGlvbnMgZm91bmQgaGVyZSBpbiB0aGUgY29yZSBsaWJyYXJ5IGFyZSBmb3IgaW50ZXJuYWwgdXNlIGFuZCBjYW4gYmUgY2hhbmdlZFxuICogIG9yIHJlbW92ZWQgb3V0c2lkZSBvZiBhIG1ham9yIHJlbGVhc2UuIFdlIHJlY29tbWVuZCBhZ2FpbnN0IGNhbGxpbmcgdGhlbSBkaXJlY3RseSBmcm9tIGNsaWVudCBjb2RlLlxuICovXG5cbi8vIEltcG9ydHNcbmltcG9ydCAqIGFzIGxvZ3MgZnJvbSAnYXdzLWNkay1saWIvYXdzLWxvZ3MnO1xuaW1wb3J0ICogYXMgY2RrIGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCAqIGFzIHNtRGVmYXVsdHMgZnJvbSAnLi9zdGVwLWZ1bmN0aW9uLWRlZmF1bHRzJztcbmltcG9ydCAqIGFzIHNmbiBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtc3RlcGZ1bmN0aW9ucyc7XG5pbXBvcnQgeyBvdmVycmlkZVByb3BzLCBhZGRDZm5TdXBwcmVzc1J1bGVzLCBnZW5lcmF0ZVBoeXNpY2FsTmFtZSB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0ICogYXMgaWFtIGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nO1xuaW1wb3J0ICogYXMgY2xvdWR3YXRjaCBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY2xvdWR3YXRjaCc7XG5pbXBvcnQgeyBidWlsZExvZ0dyb3VwIH0gZnJvbSAnLi9jbG91ZHdhdGNoLWxvZy1ncm91cC1oZWxwZXInO1xuLy8gTm90ZTogVG8gZW5zdXJlIENES3YyIGNvbXBhdGliaWxpdHksIGtlZXAgdGhlIGltcG9ydCBzdGF0ZW1lbnQgZm9yIENvbnN0cnVjdCBzZXBhcmF0ZVxuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQnVpbGRTdGF0ZU1hY2hpbmVSZXNwb25zZSB7XG4gIHJlYWRvbmx5IHN0YXRlTWFjaGluZTogc2ZuLlN0YXRlTWFjaGluZSxcbiAgcmVhZG9ubHkgbG9nR3JvdXA6IGxvZ3MuSUxvZ0dyb3VwXG59XG4vKipcbiAqIEBpbnRlcm5hbCBUaGlzIGlzIGFuIGludGVybmFsIGNvcmUgZnVuY3Rpb24gYW5kIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5IGJ5IFNvbHV0aW9ucyBDb25zdHJ1Y3RzIGNsaWVudHMuXG4gKlxuICogQnVpbGRzIGFuZCByZXR1cm5zIGEgU3RhdGVNYWNoaW5lLlxuICogQHBhcmFtIHNjb3BlIC0gdGhlIGNvbnN0cnVjdCB0byB3aGljaCB0aGUgU3RhdGVNYWNoaW5lIHNob3VsZCBiZSBhdHRhY2hlZCB0by5cbiAqIEBwYXJhbSBzdGF0ZU1hY2hpbmVQcm9wcyAtIHVzZXItc3BlY2lmaWVkIHByb3BlcnRpZXMgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgcHJvcGVydGllcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkU3RhdGVNYWNoaW5lKHNjb3BlOiBDb25zdHJ1Y3QsIHN0YXRlTWFjaGluZVByb3BzOiBzZm4uU3RhdGVNYWNoaW5lUHJvcHMsXG4gIGxvZ0dyb3VwUHJvcHM/OiBsb2dzLkxvZ0dyb3VwUHJvcHMpOiBCdWlsZFN0YXRlTWFjaGluZVJlc3BvbnNlIHtcblxuICBsZXQgbG9nR3JvdXA6IGxvZ3MuSUxvZ0dyb3VwO1xuICBsZXQgY29uc29saWRhdGVkU3RhdGVNYWNoaW5lUHJvcHM7XG5cbiAgLy8gSWYgdGhleSBzZW50IGEgbG9nR3JvdXAgaW4gc3RhdGVNYWNoaW5lUHJvcHNcbiAgaWYgKHN0YXRlTWFjaGluZVByb3BzLmxvZ3M/LmRlc3RpbmF0aW9uKSB7XG4gICAgbG9nR3JvdXAgPSBzdGF0ZU1hY2hpbmVQcm9wcy5sb2dzPy5kZXN0aW5hdGlvbjtcbiAgICBjb25zb2xpZGF0ZWRTdGF0ZU1hY2hpbmVQcm9wcyA9IHN0YXRlTWFjaGluZVByb3BzO1xuICB9IGVsc2Uge1xuICAgIC8vIFRocmVlIHBvc3NpYmlsaXRpZXNcbiAgICAvLyAxKSBsb2dHcm91cFByb3BzIG5vdCBwcm92aWRlZCAtIGNyZWF0ZSBsb2dHcm91cFByb3BzIHdpdGgganVzdCBsb2dHcm91cE5hbWVcbiAgICAvLyAyKSBsb2dHcm91cFByb3BzIHByb3ZpZGVkIHdpdGggbm8gbG9nR3JvdXBOYW1lIC0gb3ZlcnJpZGUgbG9nR3JvdXBQcm9wcy5sb2dHcm91cE5hbWVcbiAgICAvLyAzKSBsb2dHcm91cFByb3BzIHByb3ZpZGVkIHdpdGggbG9nR3JvdXBOYW1lIC0gcGFzcyB1bmFsdGVyZWQgbG9nR3JvdXBQcm9wc1xuICAgIGxldCBjb25zb2xpZGF0ZWRMb2dHcm91cFByb3BzID0gbG9nR3JvdXBQcm9wcztcblxuICAgIGlmICghY29uc29saWRhdGVkTG9nR3JvdXBQcm9wcykge1xuICAgICAgY29uc29saWRhdGVkTG9nR3JvdXBQcm9wcyA9IHt9O1xuICAgIH1cblxuICAgIGNvbnN0IG1heExvZ0dyb3VwTmFtZUxlbmd0aCA9IDI1NTtcbiAgICBpZiAoIWNvbnNvbGlkYXRlZExvZ0dyb3VwUHJvcHM/LmxvZ0dyb3VwTmFtZSkge1xuICAgICAgY29uc3QgbG9nR3JvdXBQcmVmaXggPSAnL2F3cy92ZW5kZWRsb2dzL3N0YXRlcy9jb25zdHJ1Y3RzLyc7XG4gICAgICBjb25zdCBtYXhHZW5lcmF0ZWROYW1lTGVuZ3RoID0gbWF4TG9nR3JvdXBOYW1lTGVuZ3RoIC0gbG9nR3JvdXBQcmVmaXgubGVuZ3RoO1xuICAgICAgY29uc3QgbmFtZVBhcnRzOiBzdHJpbmdbXSA9IFtcbiAgICAgICAgY2RrLlN0YWNrLm9mKHNjb3BlKS5zdGFja05hbWUsIC8vIE5hbWUgb2YgdGhlIHN0YWNrXG4gICAgICAgIHNjb3BlLm5vZGUuaWQsICAgICAgICAgICAgICAgICAvLyBDb25zdHJ1Y3QgSURcbiAgICAgICAgJ1N0YXRlTWFjaGluZUxvZycgICAgICAgICAgICAgIC8vIExpdGVyYWwgc3RyaW5nIGZvciBsb2cgZ3JvdXAgbmFtZSBwb3J0aW9uXG4gICAgICBdO1xuXG4gICAgICBjb25zdCBsb2dHcm91cE5hbWUgPSBnZW5lcmF0ZVBoeXNpY2FsTmFtZShsb2dHcm91cFByZWZpeCwgbmFtZVBhcnRzLCBtYXhHZW5lcmF0ZWROYW1lTGVuZ3RoKTtcbiAgICAgIGNvbnNvbGlkYXRlZExvZ0dyb3VwUHJvcHMgPSBvdmVycmlkZVByb3BzKGNvbnNvbGlkYXRlZExvZ0dyb3VwUHJvcHMsIHsgbG9nR3JvdXBOYW1lIH0pO1xuICAgIH1cblxuICAgIC8vIENyZWF0ZSBuZXcgQ2xvdWR3YXRjaCBsb2cgZ3JvdXAgZm9yIFN0ZXAgZnVuY3Rpb24gU3RhdGUgTWFjaGluZVxuICAgIGxvZ0dyb3VwID0gYnVpbGRMb2dHcm91cChzY29wZSwgJ1N0YXRlTWFjaGluZUxvZ0dyb3VwJywgY29uc29saWRhdGVkTG9nR3JvdXBQcm9wcyk7XG5cbiAgICAvLyBPdmVycmlkZSB0aGUgZGVmYXVsdHMgd2l0aCB0aGUgdXNlciBwcm92aWRlZCBwcm9wc1xuICAgIGNvbnNvbGlkYXRlZFN0YXRlTWFjaGluZVByb3BzID0gb3ZlcnJpZGVQcm9wcyhzbURlZmF1bHRzLkRlZmF1bHRTdGF0ZU1hY2hpbmVQcm9wcyhsb2dHcm91cCksIHN0YXRlTWFjaGluZVByb3BzKTtcbiAgfVxuXG4gIC8vIE92ZXJyaWRlIHRoZSBDbG91ZHdhdGNoIHBlcm1pc3Npb25zIHRvIG1ha2UgaXQgbW9yZSBmaW5lIGdyYWluZWRcbiAgY29uc3QgbmV3U3RhdGVNYWNoaW5lID0gbmV3IHNmbi5TdGF0ZU1hY2hpbmUoc2NvcGUsICdTdGF0ZU1hY2hpbmUnLCBjb25zb2xpZGF0ZWRTdGF0ZU1hY2hpbmVQcm9wcyk7XG5cbiAgLy8gSWYgdGhlIGNsaWVudCBkaWQgbm90IHBhc3MgYSByb2xlIHdlIGdvdCB0aGUgZGVmYXVsdCByb2xlIGFuZCB3aWxsIHRyaW0gdGhlIHByaXZpbGVnZXNcbiAgaWYgKCFzdGF0ZU1hY2hpbmVQcm9wcy5yb2xlKSB7XG4gICAgY29uc3Qgcm9sZSA9IG5ld1N0YXRlTWFjaGluZS5ub2RlLmZpbmRDaGlsZCgnUm9sZScpIGFzIGlhbS5Sb2xlO1xuICAgIGNvbnN0IGNmbkRlZmF1bHRQb2xpY3kgPSByb2xlLm5vZGUuZmluZENoaWxkKCdEZWZhdWx0UG9saWN5Jykubm9kZS5kZWZhdWx0Q2hpbGQgYXMgYW55O1xuICAgIGNvbnN0IGpzb25Qb2xpY3lEb2N1bWVudCA9IGNmbkRlZmF1bHRQb2xpY3kucG9saWN5RG9jdW1lbnQudG9KU09OKCk7XG5cbiAgICBqc29uUG9saWN5RG9jdW1lbnQuU3RhdGVtZW50ID1cbiAgICAgIGpzb25Qb2xpY3lEb2N1bWVudC5TdGF0ZW1lbnQuZmlsdGVyKChzdGF0ZW1lbnQ6IGFueSkgPT4gIUFycmF5LmlzQXJyYXkoc3RhdGVtZW50LkFjdGlvbikgfHwgIXN0YXRlbWVudC5BY3Rpb25bMF0uc3RhcnRzV2l0aChcImxvZ3M6XCIpICk7XG5cbiAgICBqc29uUG9saWN5RG9jdW1lbnQuU3RhdGVtZW50LnB1c2goe1xuICAgICAgQWN0aW9uOiBbXG4gICAgICAgICdsb2dzOlB1dFJlc291cmNlUG9saWN5JyxcbiAgICAgICAgJ2xvZ3M6RGVzY3JpYmVSZXNvdXJjZVBvbGljaWVzJyxcbiAgICAgICAgJ2xvZ3M6RGVzY3JpYmVMb2dHcm91cHMnXG4gICAgICBdLFxuICAgICAgRWZmZWN0OiBcIkFsbG93XCIsXG4gICAgICBSZXNvdXJjZTogW2Bhcm46JHtjZGsuQXdzLlBBUlRJVElPTn06bG9nczoke2Nkay5Bd3MuUkVHSU9OfToke2Nkay5Bd3MuQUNDT1VOVF9JRH06KmBdXG4gICAgfSk7XG5cbiAgICBqc29uUG9saWN5RG9jdW1lbnQuU3RhdGVtZW50LnB1c2goe1xuICAgICAgQWN0aW9uOiBbXG4gICAgICAgIFwibG9nczpDcmVhdGVMb2dEZWxpdmVyeVwiLFxuICAgICAgICAnbG9nczpHZXRMb2dEZWxpdmVyeScsXG4gICAgICAgICdsb2dzOlVwZGF0ZUxvZ0RlbGl2ZXJ5JyxcbiAgICAgICAgJ2xvZ3M6RGVsZXRlTG9nRGVsaXZlcnknLFxuICAgICAgICAnbG9nczpMaXN0TG9nRGVsaXZlcmllcydcbiAgICAgIF0sXG4gICAgICBFZmZlY3Q6IFwiQWxsb3dcIixcbiAgICAgIFJlc291cmNlOiBcIipcIlxuICAgIH0pO1xuXG4gICAgY2ZuRGVmYXVsdFBvbGljeS5wb2xpY3lEb2N1bWVudCA9IGlhbS5Qb2xpY3lEb2N1bWVudC5mcm9tSnNvbihqc29uUG9saWN5RG9jdW1lbnQpO1xuXG4gICAgLy8gT3ZlcnJpZGUgQ2ZuIE5hZyB3YXJuaW5nIFcxMjogSUFNIHBvbGljeSBzaG91bGQgbm90IGFsbG93ICogcmVzb3VyY2VcbiAgICBhZGRDZm5TdXBwcmVzc1J1bGVzKGNmbkRlZmF1bHRQb2xpY3ksIFtcbiAgICAgIHtcbiAgICAgICAgaWQ6ICdXMTInLFxuICAgICAgICByZWFzb246IGBUaGUgJ0xvZ0RlbGl2ZXJ5JyBhY3Rpb25zIGRvIG5vdCBzdXBwb3J0IHJlc291cmNlLWxldmVsIGF1dGhvcml6YXRpb25zYFxuICAgICAgfVxuICAgIF0pO1xuICB9XG4gIHJldHVybiB7IHN0YXRlTWFjaGluZTogbmV3U3RhdGVNYWNoaW5lLCBsb2dHcm91cCB9O1xufVxuXG4vKipcbiAqIEBpbnRlcm5hbCBUaGlzIGlzIGFuIGludGVybmFsIGNvcmUgZnVuY3Rpb24gYW5kIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5IGJ5IFNvbHV0aW9ucyBDb25zdHJ1Y3RzIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFN0ZXBGdW5jdGlvbkNXQWxhcm1zKHNjb3BlOiBDb25zdHJ1Y3QsIHNtOiBzZm4uU3RhdGVNYWNoaW5lKTogY2xvdWR3YXRjaC5BbGFybVtdIHtcbiAgLy8gU2V0dXAgQ1cgQWxhcm1zIGZvciBTdGF0ZSBNYWNoaW5lXG4gIGNvbnN0IGFsYXJtczogY2xvdWR3YXRjaC5BbGFybVtdID0gbmV3IEFycmF5KCk7XG5cbiAgLy8gU3VtIG9mIG51bWJlciBvZiBleGVjdXRpb25zIHRoYXQgZmFpbGVkIGlzID49IDEgZm9yIDUgbWludXRlcywgMSBjb25zZWN1dGl2ZSB0aW1lXG4gIGFsYXJtcy5wdXNoKG5ldyBjbG91ZHdhdGNoLkFsYXJtKHNjb3BlLCAnRXhlY3V0aW9uRmFpbGVkQWxhcm0nLCB7XG4gICAgbWV0cmljOiBzbS5tZXRyaWNGYWlsZWQoe1xuICAgICAgc3RhdGlzdGljOiAnU3VtJyxcbiAgICAgIHBlcmlvZDogY2RrLkR1cmF0aW9uLnNlY29uZHMoMzAwKSxcbiAgICB9KSxcbiAgICB0aHJlc2hvbGQ6IDEsXG4gICAgZXZhbHVhdGlvblBlcmlvZHM6IDEsXG4gICAgY29tcGFyaXNvbk9wZXJhdG9yOiBjbG91ZHdhdGNoLkNvbXBhcmlzb25PcGVyYXRvci5HUkVBVEVSX1RIQU5fT1JfRVFVQUxfVE9fVEhSRVNIT0xELFxuICAgIGFsYXJtRGVzY3JpcHRpb246ICdBbGFybSBmb3IgdGhlIG51bWJlciBvZiBleGVjdXRpb25zIHRoYXQgZmFpbGVkIGV4Y2VlZGVkIHRoZSB0aHJlc2hvbGQgb2YgMS4gJ1xuICB9KSk7XG5cbiAgLy8gU3VtIG9mIG51bWJlciBvZiBleGVjdXRpb25zIHRoYXQgZmFpbGVkIG1heGltdW0gaXMgPj0gMSBmb3IgNSBtaW51dGUsIDEgY29uc2VjdXRpdmUgdGltZVxuICBhbGFybXMucHVzaChuZXcgY2xvdWR3YXRjaC5BbGFybShzY29wZSwgJ0V4ZWN1dGlvblRocm90dGxlZEFsYXJtJywge1xuICAgIG1ldHJpYzogc20ubWV0cmljVGhyb3R0bGVkKHtcbiAgICAgIHN0YXRpc3RpYzogJ1N1bScsXG4gICAgICBwZXJpb2Q6IGNkay5EdXJhdGlvbi5zZWNvbmRzKDMwMCksXG4gICAgfSksXG4gICAgdGhyZXNob2xkOiAxLFxuICAgIGV2YWx1YXRpb25QZXJpb2RzOiAxLFxuICAgIGNvbXBhcmlzb25PcGVyYXRvcjogY2xvdWR3YXRjaC5Db21wYXJpc29uT3BlcmF0b3IuR1JFQVRFUl9USEFOX09SX0VRVUFMX1RPX1RIUkVTSE9MRCxcbiAgICBhbGFybURlc2NyaXB0aW9uOiAnQWxhcm0gZm9yIHRoZSBudW1iZXIgb2YgZXhlY3V0aW9ucyB0aGF0IHRocm90dGxlZCBleGNlZWRlZCB0aGUgdGhyZXNob2xkIG9mIDEuICdcbiAgfSkpO1xuXG4gIC8vIE51bWJlciBvZiBleGVjdXRpb25zIHRoYXQgYWJvcnRlZCBtYXhpbXVtIGlzID49IDEgZm9yIDUgbWludXRlLCAxIGNvbnNlY3V0aXZlIHRpbWVcbiAgYWxhcm1zLnB1c2gobmV3IGNsb3Vkd2F0Y2guQWxhcm0oc2NvcGUsICdFeGVjdXRpb25BYm9ydGVkQWxhcm0nLCB7XG4gICAgbWV0cmljOiBzbS5tZXRyaWNBYm9ydGVkKHtcbiAgICAgIHN0YXRpc3RpYzogJ01heGltdW0nLFxuICAgICAgcGVyaW9kOiBjZGsuRHVyYXRpb24uc2Vjb25kcygzMDApLFxuICAgIH0pLFxuICAgIHRocmVzaG9sZDogMSxcbiAgICBldmFsdWF0aW9uUGVyaW9kczogMSxcbiAgICBjb21wYXJpc29uT3BlcmF0b3I6IGNsb3Vkd2F0Y2guQ29tcGFyaXNvbk9wZXJhdG9yLkdSRUFURVJfVEhBTl9PUl9FUVVBTF9UT19USFJFU0hPTEQsXG4gICAgYWxhcm1EZXNjcmlwdGlvbjogJ0FsYXJtIGZvciB0aGUgbnVtYmVyIG9mIGV4ZWN1dGlvbnMgdGhhdCBhYm9ydGVkIGV4Y2VlZGVkIHRoZSB0aHJlc2hvbGQgb2YgMS4gJ1xuICB9KSk7XG5cbiAgcmV0dXJuIGFsYXJtcztcbn0iXX0=
122
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcC1mdW5jdGlvbi1oZWxwZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzdGVwLWZ1bmN0aW9uLWhlbHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7O0dBV0c7OztBQVNILG1DQUFtQztBQUNuQyx1REFBdUQ7QUFDdkQscURBQXFEO0FBQ3JELG1DQUFtRjtBQUVuRix5REFBeUQ7QUFDekQsK0VBQThEO0FBUTlEOzs7Ozs7R0FNRztBQUNILFNBQWdCLGlCQUFpQixDQUFDLEtBQWdCLEVBQUUsaUJBQXdDLEVBQzFGLGFBQWtDO0lBRWxDLElBQUksUUFBd0IsQ0FBQztJQUM3QixJQUFJLDZCQUE2QixDQUFDO0lBRWxDLCtDQUErQztJQUMvQyxJQUFJLGlCQUFpQixDQUFDLElBQUksRUFBRSxXQUFXLEVBQUU7UUFDdkMsUUFBUSxHQUFHLGlCQUFpQixDQUFDLElBQUksRUFBRSxXQUFXLENBQUM7UUFDL0MsNkJBQTZCLEdBQUcsaUJBQWlCLENBQUM7S0FDbkQ7U0FBTTtRQUNMLHNCQUFzQjtRQUN0Qiw4RUFBOEU7UUFDOUUsdUZBQXVGO1FBQ3ZGLDZFQUE2RTtRQUM3RSxJQUFJLHlCQUF5QixHQUFHLGFBQWEsQ0FBQztRQUU5QyxJQUFJLENBQUMseUJBQXlCLEVBQUU7WUFDOUIseUJBQXlCLEdBQUcsRUFBRSxDQUFDO1NBQ2hDO1FBRUQsTUFBTSxxQkFBcUIsR0FBRyxHQUFHLENBQUM7UUFDbEMsSUFBSSxDQUFDLHlCQUF5QixFQUFFLFlBQVksRUFBRTtZQUM1QyxNQUFNLGNBQWMsR0FBRyxvQ0FBb0MsQ0FBQztZQUM1RCxNQUFNLHNCQUFzQixHQUFHLHFCQUFxQixHQUFHLGNBQWMsQ0FBQyxNQUFNLENBQUM7WUFDN0UsTUFBTSxTQUFTLEdBQWE7Z0JBQzFCLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLFNBQVM7Z0JBQzdCLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFD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R0FBRyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDO1NBQ2xDLENBQUM7UUFDRixTQUFTLEVBQUUsQ0FBQztRQUNaLGlCQUFpQixFQUFFLENBQUM7UUFDcEIsa0JBQWtCLEVBQUUsVUFBVSxDQUFDLGtCQUFrQixDQUFDLGtDQUFrQztRQUNwRixnQkFBZ0IsRUFBRSwrRUFBK0U7S0FDbEcsQ0FBQyxDQUFDLENBQUM7SUFFSixPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBekNELDhEQXlDQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpLiBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4gKiAgd2l0aCB0aGUgTGljZW5zZS4gQSBjb3B5IG9mIHRoZSBMaWNlbnNlIGlzIGxvY2F0ZWQgYXRcbiAqXG4gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqICBvciBpbiB0aGUgJ2xpY2Vuc2UnIGZpbGUgYWNjb21wYW55aW5nIHRoaXMgZmlsZS4gVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICdBUyBJUycgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFU1xuICogIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zXG4gKiAgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbi8qXG4gKiAgVGhlIGZ1bmN0aW9ucyBmb3VuZCBoZXJlIGluIHRoZSBjb3JlIGxpYnJhcnkgYXJlIGZvciBpbnRlcm5hbCB1c2UgYW5kIGNhbiBiZSBjaGFuZ2VkXG4gKiAgb3IgcmVtb3ZlZCBvdXRzaWRlIG9mIGEgbWFqb3IgcmVsZWFzZS4gV2UgcmVjb21tZW5kIGFnYWluc3QgY2FsbGluZyB0aGVtIGRpcmVjdGx5IGZyb20gY2xpZW50IGNvZGUuXG4gKi9cblxuLy8gSW1wb3J0c1xuaW1wb3J0ICogYXMgbG9ncyBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbG9ncyc7XG5pbXBvcnQgKiBhcyBjZGsgZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0ICogYXMgc21EZWZhdWx0cyBmcm9tICcuL3N0ZXAtZnVuY3Rpb24tZGVmYXVsdHMnO1xuaW1wb3J0ICogYXMgc2ZuIGZyb20gJ2F3cy1jZGstbGliL2F3cy1zdGVwZnVuY3Rpb25zJztcbmltcG9ydCB7IG92ZXJyaWRlUHJvcHMsIGFkZENmblN1cHByZXNzUnVsZXMsIGdlbmVyYXRlUGh5c2ljYWxOYW1lIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgKiBhcyBpYW0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5pbXBvcnQgKiBhcyBjbG91ZHdhdGNoIGZyb20gJ2F3cy1jZGstbGliL2F3cy1jbG91ZHdhdGNoJztcbmltcG9ydCB7IGJ1aWxkTG9nR3JvdXAgfSBmcm9tICcuL2Nsb3Vkd2F0Y2gtbG9nLWdyb3VwLWhlbHBlcic7XG4vLyBOb3RlOiBUbyBlbnN1cmUgQ0RLdjIgY29tcGF0aWJpbGl0eSwga2VlcCB0aGUgaW1wb3J0IHN0YXRlbWVudCBmb3IgQ29uc3RydWN0IHNlcGFyYXRlXG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcblxuZXhwb3J0IGludGVyZmFjZSBCdWlsZFN0YXRlTWFjaGluZVJlc3BvbnNlIHtcbiAgcmVhZG9ubHkgc3RhdGVNYWNoaW5lOiBzZm4uU3RhdGVNYWNoaW5lLFxuICByZWFkb25seSBsb2dHcm91cDogbG9ncy5JTG9nR3JvdXBcbn1cbi8qKlxuICogQGludGVybmFsIFRoaXMgaXMgYW4gaW50ZXJuYWwgY29yZSBmdW5jdGlvbiBhbmQgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkgYnkgU29sdXRpb25zIENvbnN0cnVjdHMgY2xpZW50cy5cbiAqXG4gKiBCdWlsZHMgYW5kIHJldHVybnMgYSBTdGF0ZU1hY2hpbmUuXG4gKiBAcGFyYW0gc2NvcGUgLSB0aGUgY29uc3RydWN0IHRvIHdoaWNoIHRoZSBTdGF0ZU1hY2hpbmUgc2hvdWxkIGJlIGF0dGFjaGVkIHRvLlxuICogQHBhcmFtIHN0YXRlTWFjaGluZVByb3BzIC0gdXNlci1zcGVjaWZpZWQgcHJvcGVydGllcyB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBwcm9wZXJ0aWVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRTdGF0ZU1hY2hpbmUoc2NvcGU6IENvbnN0cnVjdCwgc3RhdGVNYWNoaW5lUHJvcHM6IHNmbi5TdGF0ZU1hY2hpbmVQcm9wcyxcbiAgbG9nR3JvdXBQcm9wcz86IGxvZ3MuTG9nR3JvdXBQcm9wcyk6IEJ1aWxkU3RhdGVNYWNoaW5lUmVzcG9uc2Uge1xuXG4gIGxldCBsb2dHcm91cDogbG9ncy5JTG9nR3JvdXA7XG4gIGxldCBjb25zb2xpZGF0ZWRTdGF0ZU1hY2hpbmVQcm9wcztcblxuICAvLyBJZiB0aGV5IHNlbnQgYSBsb2dHcm91cCBpbiBzdGF0ZU1hY2hpbmVQcm9wc1xuICBpZiAoc3RhdGVNYWNoaW5lUHJvcHMubG9ncz8uZGVzdGluYXRpb24pIHtcbiAgICBsb2dHcm91cCA9IHN0YXRlTWFjaGluZVByb3BzLmxvZ3M/LmRlc3RpbmF0aW9uO1xuICAgIGNvbnNvbGlkYXRlZFN0YXRlTWFjaGluZVByb3BzID0gc3RhdGVNYWNoaW5lUHJvcHM7XG4gIH0gZWxzZSB7XG4gICAgLy8gVGhyZWUgcG9zc2liaWxpdGllc1xuICAgIC8vIDEpIGxvZ0dyb3VwUHJvcHMgbm90IHByb3ZpZGVkIC0gY3JlYXRlIGxvZ0dyb3VwUHJvcHMgd2l0aCBqdXN0IGxvZ0dyb3VwTmFtZVxuICAgIC8vIDIpIGxvZ0dyb3VwUHJvcHMgcHJvdmlkZWQgd2l0aCBubyBsb2dHcm91cE5hbWUgLSBvdmVycmlkZSBsb2dHcm91cFByb3BzLmxvZ0dyb3VwTmFtZVxuICAgIC8vIDMpIGxvZ0dyb3VwUHJvcHMgcHJvdmlkZWQgd2l0aCBsb2dHcm91cE5hbWUgLSBwYXNzIHVuYWx0ZXJlZCBsb2dHcm91cFByb3BzXG4gICAgbGV0IGNvbnNvbGlkYXRlZExvZ0dyb3VwUHJvcHMgPSBsb2dHcm91cFByb3BzO1xuXG4gICAgaWYgKCFjb25zb2xpZGF0ZWRMb2dHcm91cFByb3BzKSB7XG4gICAgICBjb25zb2xpZGF0ZWRMb2dHcm91cFByb3BzID0ge307XG4gICAgfVxuXG4gICAgY29uc3QgbWF4TG9nR3JvdXBOYW1lTGVuZ3RoID0gMjU1O1xuICAgIGlmICghY29uc29saWRhdGVkTG9nR3JvdXBQcm9wcz8ubG9nR3JvdXBOYW1lKSB7XG4gICAgICBjb25zdCBsb2dHcm91cFByZWZpeCA9ICcvYXdzL3ZlbmRlZGxvZ3Mvc3RhdGVzL2NvbnN0cnVjdHMvJztcbiAgICAgIGNvbnN0IG1heEdlbmVyYXRlZE5hbWVMZW5ndGggPSBtYXhMb2dHcm91cE5hbWVMZW5ndGggLSBsb2dHcm91cFByZWZpeC5sZW5ndGg7XG4gICAgICBjb25zdCBuYW1lUGFydHM6IHN0cmluZ1tdID0gW1xuICAgICAgICBjZGsuU3RhY2sub2Yoc2NvcGUpLnN0YWNrTmFtZSwgLy8gTmFtZSBvZiB0aGUgc3RhY2tcbiAgICAgICAgc2NvcGUubm9kZS5pZCwgICAgICAgICAgICAgICAgIC8vIENvbnN0cnVjdCBJRFxuICAgICAgICAnU3RhdGVNYWNoaW5lTG9nJyAgICAgICAgICAgICAgLy8gTGl0ZXJhbCBzdHJpbmcgZm9yIGxvZyBncm91cCBuYW1lIHBvcnRpb25cbiAgICAgIF07XG5cbiAgICAgIGNvbnN0IGxvZ0dyb3VwTmFtZSA9IGdlbmVyYXRlUGh5c2ljYWxOYW1lKGxvZ0dyb3VwUHJlZml4LCBuYW1lUGFydHMsIG1heEdlbmVyYXRlZE5hbWVMZW5ndGgpO1xuICAgICAgY29uc29saWRhdGVkTG9nR3JvdXBQcm9wcyA9IG92ZXJyaWRlUHJvcHMoY29uc29saWRhdGVkTG9nR3JvdXBQcm9wcywgeyBsb2dHcm91cE5hbWUgfSk7XG4gICAgfVxuXG4gICAgLy8gQ3JlYXRlIG5ldyBDbG91ZHdhdGNoIGxvZyBncm91cCBmb3IgU3RlcCBmdW5jdGlvbiBTdGF0ZSBNYWNoaW5lXG4gICAgbG9nR3JvdXAgPSBidWlsZExvZ0dyb3VwKHNjb3BlLCAnU3RhdGVNYWNoaW5lTG9nR3JvdXAnLCBjb25zb2xpZGF0ZWRMb2dHcm91cFByb3BzKTtcblxuICAgIC8vIE92ZXJyaWRlIHRoZSBkZWZhdWx0cyB3aXRoIHRoZSB1c2VyIHByb3ZpZGVkIHByb3BzXG4gICAgY29uc29saWRhdGVkU3RhdGVNYWNoaW5lUHJvcHMgPSBvdmVycmlkZVByb3BzKHNtRGVmYXVsdHMuRGVmYXVsdFN0YXRlTWFjaGluZVByb3BzKGxvZ0dyb3VwKSwgc3RhdGVNYWNoaW5lUHJvcHMpO1xuICB9XG5cbiAgLy8gT3ZlcnJpZGUgdGhlIENsb3Vkd2F0Y2ggcGVybWlzc2lvbnMgdG8gbWFrZSBpdCBtb3JlIGZpbmUgZ3JhaW5lZFxuICBjb25zdCBuZXdTdGF0ZU1hY2hpbmUgPSBuZXcgc2ZuLlN0YXRlTWFjaGluZShzY29wZSwgJ1N0YXRlTWFjaGluZScsIGNvbnNvbGlkYXRlZFN0YXRlTWFjaGluZVByb3BzKTtcblxuICAvLyBJZiB0aGUgY2xpZW50IGRpZCBub3QgcGFzcyBhIHJvbGUgd2UgZ290IHRoZSBkZWZhdWx0IHJvbGUgYW5kIHdpbGwgdHJpbSB0aGUgcHJpdmlsZWdlc1xuICBpZiAoIXN0YXRlTWFjaGluZVByb3BzLnJvbGUpIHtcbiAgICBjb25zdCByb2xlID0gbmV3U3RhdGVNYWNoaW5lLm5vZGUuZmluZENoaWxkKCdSb2xlJykgYXMgaWFtLlJvbGU7XG4gICAgY29uc3QgY2ZuRGVmYXVsdFBvbGljeSA9IHJvbGUubm9kZS5maW5kQ2hpbGQoJ0RlZmF1bHRQb2xpY3knKS5ub2RlLmRlZmF1bHRDaGlsZCBhcyBhbnk7XG4gICAgLy8gT3ZlcnJpZGUgQ2ZuIE5hZyB3YXJuaW5nIFcxMjogSUFNIHBvbGljeSBzaG91bGQgbm90IGFsbG93ICogcmVzb3VyY2VcbiAgICBhZGRDZm5TdXBwcmVzc1J1bGVzKGNmbkRlZmF1bHRQb2xpY3ksIFtcbiAgICAgIHtcbiAgICAgICAgaWQ6ICdXMTInLFxuICAgICAgICByZWFzb246IGBUaGVzZSBhcmUgQ0RLIGRlZmF1bHRzLiBUaGUgJ0xvZ0RlbGl2ZXJ5JyBhY3Rpb25zIGRvIG5vdCBzdXBwb3J0IHJlc291cmNlLWxldmVsIGF1dGhvcml6YXRpb25zLiBBbnkgbG9nZ2luZyBpcyBkb25lIGJ5IFN0YXRlIE1hY2hpbmUgY29kZWBcbiAgICAgIH1cbiAgICBdKTtcbiAgfVxuICByZXR1cm4geyBzdGF0ZU1hY2hpbmU6IG5ld1N0YXRlTWFjaGluZSwgbG9nR3JvdXAgfTtcbn1cblxuLyoqXG4gKiBAaW50ZXJuYWwgVGhpcyBpcyBhbiBpbnRlcm5hbCBjb3JlIGZ1bmN0aW9uIGFuZCBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseSBieSBTb2x1dGlvbnMgQ29uc3RydWN0cyBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRTdGVwRnVuY3Rpb25DV0FsYXJtcyhzY29wZTogQ29uc3RydWN0LCBzbTogc2ZuLlN0YXRlTWFjaGluZSk6IGNsb3Vkd2F0Y2guQWxhcm1bXSB7XG4gIC8vIFNldHVwIENXIEFsYXJtcyBmb3IgU3RhdGUgTWFjaGluZVxuICBjb25zdCBhbGFybXM6IGNsb3Vkd2F0Y2guQWxhcm1bXSA9IG5ldyBBcnJheSgpO1xuXG4gIC8vIFN1bSBvZiBudW1iZXIgb2YgZXhlY3V0aW9ucyB0aGF0IGZhaWxlZCBpcyA+PSAxIGZvciA1IG1pbnV0ZXMsIDEgY29uc2VjdXRpdmUgdGltZVxuICBhbGFybXMucHVzaChuZXcgY2xvdWR3YXRjaC5BbGFybShzY29wZSwgJ0V4ZWN1dGlvbkZhaWxlZEFsYXJtJywge1xuICAgIG1ldHJpYzogc20ubWV0cmljRmFpbGVkKHtcbiAgICAgIHN0YXRpc3RpYzogJ1N1bScsXG4gICAgICBwZXJpb2Q6IGNkay5EdXJhdGlvbi5zZWNvbmRzKDMwMCksXG4gICAgfSksXG4gICAgdGhyZXNob2xkOiAxLFxuICAgIGV2YWx1YXRpb25QZXJpb2RzOiAxLFxuICAgIGNvbXBhcmlzb25PcGVyYXRvcjogY2xvdWR3YXRjaC5Db21wYXJpc29uT3BlcmF0b3IuR1JFQVRFUl9USEFOX09SX0VRVUFMX1RPX1RIUkVTSE9MRCxcbiAgICBhbGFybURlc2NyaXB0aW9uOiAnQWxhcm0gZm9yIHRoZSBudW1iZXIgb2YgZXhlY3V0aW9ucyB0aGF0IGZhaWxlZCBleGNlZWRlZCB0aGUgdGhyZXNob2xkIG9mIDEuICdcbiAgfSkpO1xuXG4gIC8vIFN1bSBvZiBudW1iZXIgb2YgZXhlY3V0aW9ucyB0aGF0IGZhaWxlZCBtYXhpbXVtIGlzID49IDEgZm9yIDUgbWludXRlLCAxIGNvbnNlY3V0aXZlIHRpbWVcbiAgYWxhcm1zLnB1c2gobmV3IGNsb3Vkd2F0Y2guQWxhcm0oc2NvcGUsICdFeGVjdXRpb25UaHJvdHRsZWRBbGFybScsIHtcbiAgICBtZXRyaWM6IHNtLm1ldHJpY1Rocm90dGxlZCh7XG4gICAgICBzdGF0aXN0aWM6ICdTdW0nLFxuICAgICAgcGVyaW9kOiBjZGsuRHVyYXRpb24uc2Vjb25kcygzMDApLFxuICAgIH0pLFxuICAgIHRocmVzaG9sZDogMSxcbiAgICBldmFsdWF0aW9uUGVyaW9kczogMSxcbiAgICBjb21wYXJpc29uT3BlcmF0b3I6IGNsb3Vkd2F0Y2guQ29tcGFyaXNvbk9wZXJhdG9yLkdSRUFURVJfVEhBTl9PUl9FUVVBTF9UT19USFJFU0hPTEQsXG4gICAgYWxhcm1EZXNjcmlwdGlvbjogJ0FsYXJtIGZvciB0aGUgbnVtYmVyIG9mIGV4ZWN1dGlvbnMgdGhhdCB0aHJvdHRsZWQgZXhjZWVkZWQgdGhlIHRocmVzaG9sZCBvZiAxLiAnXG4gIH0pKTtcblxuICAvLyBOdW1iZXIgb2YgZXhlY3V0aW9ucyB0aGF0IGFib3J0ZWQgbWF4aW11bSBpcyA+PSAxIGZvciA1IG1pbnV0ZSwgMSBjb25zZWN1dGl2ZSB0aW1lXG4gIGFsYXJtcy5wdXNoKG5ldyBjbG91ZHdhdGNoLkFsYXJtKHNjb3BlLCAnRXhlY3V0aW9uQWJvcnRlZEFsYXJtJywge1xuICAgIG1ldHJpYzogc20ubWV0cmljQWJvcnRlZCh7XG4gICAgICBzdGF0aXN0aWM6ICdNYXhpbXVtJyxcbiAgICAgIHBlcmlvZDogY2RrLkR1cmF0aW9uLnNlY29uZHMoMzAwKSxcbiAgICB9KSxcbiAgICB0aHJlc2hvbGQ6IDEsXG4gICAgZXZhbHVhdGlvblBlcmlvZHM6IDEsXG4gICAgY29tcGFyaXNvbk9wZXJhdG9yOiBjbG91ZHdhdGNoLkNvbXBhcmlzb25PcGVyYXRvci5HUkVBVEVSX1RIQU5fT1JfRVFVQUxfVE9fVEhSRVNIT0xELFxuICAgIGFsYXJtRGVzY3JpcHRpb246ICdBbGFybSBmb3IgdGhlIG51bWJlciBvZiBleGVjdXRpb25zIHRoYXQgYWJvcnRlZCBleGNlZWRlZCB0aGUgdGhyZXNob2xkIG9mIDEuICdcbiAgfSkpO1xuXG4gIHJldHVybiBhbGFybXM7XG59Il19
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aws-solutions-constructs/core",
3
- "version": "2.53.0",
3
+ "version": "2.54.1",
4
4
  "description": "Core CDK Construct for patterns library",
5
5
  "main": "index.js",
6
6
  "types": "index.ts",
@@ -52,7 +52,7 @@
52
52
  }
53
53
  },
54
54
  "dependencies": {
55
- "@aws-cdk/integ-tests-alpha": "2.127.0-alpha.0",
55
+ "@aws-cdk/integ-tests-alpha": "2.135.0-alpha.0",
56
56
  "deep-diff": "^1.0.2",
57
57
  "deepmerge": "^4.0.0",
58
58
  "npmlog": "^7.0.0",
@@ -65,7 +65,7 @@
65
65
  "@types/jest": "^27.4.0",
66
66
  "@types/node": "^10.3.0",
67
67
  "constructs": "^10.0.0",
68
- "aws-cdk-lib": "2.127.0"
68
+ "aws-cdk-lib": "2.135.0"
69
69
  },
70
70
  "jest": {
71
71
  "moduleFileExtensions": [
@@ -88,6 +88,6 @@
88
88
  ],
89
89
  "peerDependencies": {
90
90
  "constructs": "^10.0.0",
91
- "aws-cdk-lib": "^2.127.0"
91
+ "aws-cdk-lib": "^2.135.0"
92
92
  }
93
93
  }
@@ -16,13 +16,16 @@ Object.defineProperty(exports, "__esModule", { value: true });
16
16
  const aws_cdk_lib_1 = require("aws-cdk-lib");
17
17
  const defaults = require("../");
18
18
  const sfn = require("aws-cdk-lib/aws-stepfunctions");
19
+ const sfnTasks = require("aws-cdk-lib/aws-stepfunctions-tasks");
19
20
  const cloudwatch_log_group_helper_1 = require("../lib/cloudwatch-log-group-helper");
20
21
  const iam = require("aws-cdk-lib/aws-iam");
22
+ const s3 = require("aws-cdk-lib/aws-s3");
23
+ const lambda = require("aws-cdk-lib/aws-lambda");
21
24
  const assertions_1 = require("aws-cdk-lib/assertions");
22
25
  test('Test deployment w/ custom properties', () => {
23
26
  // Stack
24
27
  const stack = new aws_cdk_lib_1.Stack();
25
- // Step function definition
28
+ // State Machine definition
26
29
  const startState = new sfn.Pass(stack, 'StartState');
27
30
  // Build state machine
28
31
  const buildStateMachineResponse = defaults.buildStateMachine(stack, {
@@ -40,7 +43,7 @@ test('Test deployment w/ custom properties', () => {
40
43
  test('Test deployment w/ logging enabled', () => {
41
44
  // Stack
42
45
  const stack = new aws_cdk_lib_1.Stack();
43
- // Step function definition
46
+ // State Machine definition
44
47
  const startState = new sfn.Pass(stack, 'StartState');
45
48
  // Log group
46
49
  // const logGroup = new LogGroup(stack, 'myLogGroup', defaults.buildLogGroup(stack));
@@ -77,7 +80,7 @@ test('Test deployment w/ logging enabled', () => {
77
80
  test('Check default Cloudwatch permissions', () => {
78
81
  // Stack
79
82
  const stack = new aws_cdk_lib_1.Stack();
80
- // Step function definition
83
+ // State Machine definition
81
84
  const startState = new sfn.Pass(stack, 'StartState');
82
85
  // Build state machine
83
86
  const buildStateMachineResponse = defaults.buildStateMachine(stack, {
@@ -85,36 +88,74 @@ test('Check default Cloudwatch permissions', () => {
85
88
  });
86
89
  // Assertion
87
90
  expect(buildStateMachineResponse.stateMachine).toBeDefined();
88
- assertions_1.Template.fromStack(stack).hasResourceProperties("AWS::IAM::Policy", {
91
+ const template = assertions_1.Template.fromStack(stack);
92
+ template.hasResourceProperties("AWS::IAM::Policy", {
89
93
  PolicyDocument: {
90
94
  Statement: [
91
95
  {
92
96
  Action: [
97
+ "logs:CreateLogDelivery",
98
+ "logs:GetLogDelivery",
99
+ "logs:UpdateLogDelivery",
100
+ "logs:DeleteLogDelivery",
101
+ "logs:ListLogDeliveries",
93
102
  "logs:PutResourcePolicy",
94
103
  "logs:DescribeResourcePolicies",
95
104
  "logs:DescribeLogGroups"
96
105
  ],
97
106
  Effect: "Allow",
98
- Resource: {
99
- "Fn::Join": [
100
- "",
101
- [
102
- "arn:",
103
- {
104
- Ref: "AWS::Partition"
105
- },
106
- ":logs:",
107
- {
108
- Ref: "AWS::Region"
109
- },
110
- ":",
111
- {
112
- Ref: "AWS::AccountId"
113
- },
114
- ":*"
115
- ]
116
- ]
117
- }
107
+ Resource: "*"
108
+ }
109
+ ],
110
+ Version: "2012-10-17"
111
+ }
112
+ });
113
+ });
114
+ test('Check State Machine IAM Policy with 2 Lambda fuctions in State Machine Definition', () => {
115
+ // Stack
116
+ const stack = new aws_cdk_lib_1.Stack();
117
+ // State Machine definition
118
+ const taskOne = new sfnTasks.LambdaInvoke(stack, 'task-one', {
119
+ lambdaFunction: new lambda.Function(stack, 'first-function', {
120
+ runtime: lambda.Runtime.NODEJS_20_X,
121
+ handler: 'index.handler',
122
+ code: lambda.Code.fromInline(`exports.handler = async (event) => {return;}`)
123
+ }),
124
+ });
125
+ const taskTwo = new sfnTasks.LambdaInvoke(stack, 'task-two', {
126
+ lambdaFunction: new lambda.Function(stack, 'second-function', {
127
+ runtime: lambda.Runtime.NODEJS_20_X,
128
+ handler: 'index.handler',
129
+ code: lambda.Code.fromInline(`exports.handler = async (event) => {return;}`)
130
+ }),
131
+ });
132
+ // // Launch the construct
133
+ const startState = sfn.DefinitionBody.fromChainable(taskOne.next(taskTwo));
134
+ // Build state machine
135
+ const buildStateMachineResponse = defaults.buildStateMachine(stack, {
136
+ definitionBody: startState
137
+ });
138
+ // Assertion
139
+ expect(buildStateMachineResponse.stateMachine).toBeDefined();
140
+ const template = assertions_1.Template.fromStack(stack);
141
+ template.hasResourceProperties("AWS::IAM::Policy", {
142
+ PolicyDocument: {
143
+ Statement: [
144
+ {
145
+ Action: "lambda:InvokeFunction",
146
+ Effect: "Allow",
147
+ Resource: [
148
+ {},
149
+ {}
150
+ ]
151
+ },
152
+ {
153
+ Action: "lambda:InvokeFunction",
154
+ Effect: "Allow",
155
+ Resource: [
156
+ {},
157
+ {}
158
+ ]
118
159
  },
119
160
  {
120
161
  Action: [
@@ -122,7 +163,10 @@ test('Check default Cloudwatch permissions', () => {
122
163
  "logs:GetLogDelivery",
123
164
  "logs:UpdateLogDelivery",
124
165
  "logs:DeleteLogDelivery",
125
- "logs:ListLogDeliveries"
166
+ "logs:ListLogDeliveries",
167
+ "logs:PutResourcePolicy",
168
+ "logs:DescribeResourcePolicies",
169
+ "logs:DescribeLogGroups"
126
170
  ],
127
171
  Effect: "Allow",
128
172
  Resource: "*"
@@ -132,10 +176,69 @@ test('Check default Cloudwatch permissions', () => {
132
176
  }
133
177
  });
134
178
  });
179
+ test('Check State Machine IAM Policy with S3 API call in State Machine Definition', () => {
180
+ // Stack
181
+ const stack = new aws_cdk_lib_1.Stack();
182
+ const sourceBucket = new s3.Bucket(stack, 'SourceBucket', {
183
+ eventBridgeEnabled: true,
184
+ });
185
+ const destinationBucket = new s3.Bucket(stack, 'DestinationBucket', {});
186
+ // State Machine definition
187
+ const stateMachineDefinition = new sfnTasks.CallAwsService(stack, 'Copy S3 object', {
188
+ service: 's3',
189
+ action: 'copyObject',
190
+ iamResources: [
191
+ sourceBucket.bucketArn,
192
+ destinationBucket.bucketArn,
193
+ ],
194
+ parameters: {
195
+ CopySource: sfn.JsonPath.format('{}/{}', sfn.JsonPath.stringAt('$.sourceBucketName'), sfn.JsonPath.stringAt('$.sourceObjectKey')),
196
+ Bucket: destinationBucket.bucketName,
197
+ Key: sfn.JsonPath.format('{}/{}', sfn.JsonPath.stringAt('$.destinationFolder'), sfn.JsonPath.stringAt('$.sourceObjectKey')),
198
+ },
199
+ resultPath: sfn.JsonPath.DISCARD,
200
+ });
201
+ // Build state machine
202
+ const buildStateMachineResponse = defaults.buildStateMachine(stack, {
203
+ definitionBody: sfn.DefinitionBody.fromChainable(stateMachineDefinition)
204
+ });
205
+ // Assertion
206
+ expect(buildStateMachineResponse.stateMachine).toBeDefined();
207
+ const template = assertions_1.Template.fromStack(stack);
208
+ template.hasResourceProperties("AWS::IAM::Policy", {
209
+ PolicyDocument: {
210
+ Statement: [
211
+ {
212
+ Action: "s3:copyObject",
213
+ Effect: "Allow",
214
+ Resource: [
215
+ {},
216
+ {}
217
+ ],
218
+ },
219
+ {
220
+ Action: [
221
+ "logs:CreateLogDelivery",
222
+ "logs:GetLogDelivery",
223
+ "logs:UpdateLogDelivery",
224
+ "logs:DeleteLogDelivery",
225
+ "logs:ListLogDeliveries",
226
+ "logs:PutResourcePolicy",
227
+ "logs:DescribeResourcePolicies",
228
+ "logs:DescribeLogGroups"
229
+ ],
230
+ Effect: "Allow",
231
+ Resource: "*"
232
+ },
233
+ ],
234
+ Version: "2012-10-17"
235
+ }
236
+ });
237
+ });
135
238
  test('Count State Machine CW Alarms', () => {
136
239
  // Stack
137
240
  const stack = new aws_cdk_lib_1.Stack();
138
- // Step function definition
241
+ // State Machine definition
139
242
  const startState = new sfn.Pass(stack, 'StartState');
140
243
  // Build state machine
141
244
  const buildStateMachineResponse = defaults.buildStateMachine(stack, {
@@ -149,7 +252,7 @@ test('Test deployment with custom role', () => {
149
252
  const descriptionText = 'Custom role for State Machine';
150
253
  // Stack
151
254
  const stack = new aws_cdk_lib_1.Stack();
152
- // Step function definition
255
+ // State Machine definition
153
256
  const startState = new sfn.Pass(stack, 'StartState');
154
257
  const customRole = new iam.Role(stack, 'custom-role', {
155
258
  assumedBy: new iam.ServicePrincipal('states.amazonaws.com'),
@@ -179,7 +282,7 @@ test('Test deployment with custom role', () => {
179
282
  test('Confirm format of name', () => {
180
283
  // Stack
181
284
  const stack = new aws_cdk_lib_1.Stack(undefined, 'teststack');
182
- // Step function definition
285
+ // State Machine definition
183
286
  const startState = new sfn.Pass(stack, 'StartState');
184
287
  // Build state machine
185
288
  const buildStateMachineResponse = defaults.buildStateMachine(stack, {
@@ -199,4 +302,4 @@ test('Confirm format of name', () => {
199
302
  expect(logName['Fn::Join'].length).toEqual(2);
200
303
  expect(logName['Fn::Join'][1][1]['Fn::Select'][1]['Fn::Split'][1].Ref).toEqual("AWS::StackId");
201
304
  });
202
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcC1mdW5jdGlvbi1oZWxwZXIudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInN0ZXAtZnVuY3Rpb24taGVscGVyLnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7OztHQVdHOztBQUVILFVBQVU7QUFDViw2Q0FBeUM7QUFDekMsZ0NBQWdDO0FBQ2hDLHFEQUFxRDtBQUNyRCxvRkFBbUU7QUFDbkUsMkNBQTJDO0FBQzNDLHVEQUFrRDtBQUVsRCxJQUFJLENBQUMsc0NBQXNDLEVBQUUsR0FBRyxFQUFFO0lBQ2hELFFBQVE7SUFDUixNQUFNLEtBQUssR0FBRyxJQUFJLG1CQUFLLEVBQUUsQ0FBQztJQUMxQiwyQkFBMkI7SUFDM0IsTUFBTSxVQUFVLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxZQUFZLENBQUMsQ0FBQztJQUNyRCxzQkFBc0I7SUFDdEIsTUFBTSx5QkFBeUIsR0FBRyxRQUFRLENBQUMsaUJBQWlCLENBQUMsS0FBSyxFQUFFO1FBQ2xFLFVBQVUsRUFBRSxVQUFVO1FBQ3RCLGdCQUFnQixFQUFFLGdCQUFnQjtLQUNuQyxDQUFDLENBQUM7SUFDSCxZQUFZO0lBQ1osTUFBTSxDQUFDLHlCQUF5QixDQUFDLFlBQVksQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQzdELE1BQU0sUUFBUSxHQUFHLHFCQUFRLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzNDLFFBQVEsQ0FBQyxlQUFlLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFFbkQsUUFBUSxDQUFDLHFCQUFxQixDQUFDLGtDQUFrQyxFQUFFO1FBQ2pFLGdCQUFnQixFQUFFLGdCQUFnQjtLQUNuQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQztBQUVILElBQUksQ0FBQyxvQ0FBb0MsRUFBRSxHQUFHLEVBQUU7SUFDOUMsUUFBUTtJQUNSLE1BQU0sS0FBSyxHQUFHLElBQUksbUJB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UUFDbEUsZ0JBQWdCLEVBQUUsZ0JBQWdCO1FBQ2xDLFVBQVUsRUFBRSxVQUFVO0tBQ3ZCLENBQUMsQ0FBQztJQUNILFlBQVk7SUFDWixNQUFNLENBQUMseUJBQXlCLENBQUMsWUFBWSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7SUFFN0QsTUFBTSxRQUFRLEdBQUcscUJBQVEsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDM0MsUUFBUSxDQUFDLHFCQUFxQixDQUFDLGtDQUFrQyxFQUFFO1FBQ2pFLGdCQUFnQixFQUFFLGdCQUFnQjtLQUNuQyxDQUFDLENBQUM7SUFFSCx3RUFBd0U7SUFDeEUsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0lBQy9ELE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyw0QkFBNEIsQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDO0lBRTlFLE1BQU0sQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUMxQyxNQUFNLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5QyxNQUFNLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQztBQUNqRyxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpLiBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4gKiAgd2l0aCB0aGUgTGljZW5zZS4gQSBjb3B5IG9mIHRoZSBMaWNlbnNlIGlzIGxvY2F0ZWQgYXRcbiAqXG4gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqICBvciBpbiB0aGUgJ2xpY2Vuc2UnIGZpbGUgYWNjb21wYW55aW5nIHRoaXMgZmlsZS4gVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICdBUyBJUycgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFU1xuICogIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zXG4gKiAgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbi8vIEltcG9ydHNcbmltcG9ydCB7IFN0YWNrLCBBd3MgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCAqIGFzIGRlZmF1bHRzIGZyb20gJy4uLyc7XG5pbXBvcnQgKiBhcyBzZm4gZnJvbSAnYXdzLWNkay1saWIvYXdzLXN0ZXBmdW5jdGlvbnMnO1xuaW1wb3J0IHsgYnVpbGRMb2dHcm91cCB9IGZyb20gJy4uL2xpYi9jbG91ZHdhdGNoLWxvZy1ncm91cC1oZWxwZXInO1xuaW1wb3J0ICogYXMgaWFtIGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nO1xuaW1wb3J0IHsgVGVtcGxhdGUgfSBmcm9tICdhd3MtY2RrLWxpYi9hc3NlcnRpb25zJztcblxudGVzdCgnVGVzdCBkZXBsb3ltZW50IHcvIGN1c3RvbSBwcm9wZXJ0aWVzJywgKCkgPT4ge1xuICAvLyBTdGFja1xuICBjb25zdCBzdGFjayA9IG5ldyBTdGFjaygpO1xuICAvLyBTdGVwIGZ1bmN0aW9uIGRlZmluaXRpb25cbiAgY29uc3Qgc3RhcnRTdGF0ZSA9IG5ldyBzZm4uUGFzcyhzdGFjaywgJ1N0YXJ0U3RhdGUnKTtcbiAgLy8gQnVpbGQgc3RhdGUgbWFjaGluZVxuICBjb25zdCBidWlsZFN0YXRlTWFjaGluZVJlc3BvbnNlID0gZGVmYXVsdHMuYnVpbGRTdGF0ZU1hY2hpbmUoc3RhY2ssIHtcbiAgICBkZWZpbml0aW9uOiBzdGFydFN0YXRlLFxuICAgIHN0YXRlTWFjaGluZU5hbWU6ICdteVN0YXRlTWFjaGluZSdcbiAgfSk7XG4gIC8vIEFzc2VydGlvblxuICBleHBlY3QoYnVpbGRTdGF0ZU1hY2hpbmVSZXNwb25zZS5zdGF0ZU1hY2hpbmUpLnRvQmVEZWZpbmVkKCk7XG4gIGNvbnN0IHRlbXBsYXRlID0gVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrKTtcbiAgdGVtcGxhdGUucmVzb3VyY2VDb3VudElzKFwiQVdTOjpMb2dzOjpMb2dHcm91cFwiLCAxKTtcblxuICB0ZW1wbGF0ZS5oYXNSZXNvdXJjZVByb3BlcnRpZXMoXCJBV1M6OlN0ZXBGdW5jdGlvbnM6OlN0YXRlTWFjaGluZVwiLCB7XG4gICAgU3RhdGVNYWNoaW5lTmFtZTogXCJteVN0YXRlTWFjaGluZVwiXG4gIH0pO1xufSk7XG5cbnRlc3QoJ1Rlc3QgZGVwbG95bWVudCB3LyBsb2dnaW5nIGVuYWJsZWQnLCAoKSA9PiB7XG4gIC8vIFN0YWNrXG4gIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKCk7XG4gIC8vIFN0ZXAgZnVuY3Rpb24gZGVmaW5pdGlvblxuICBjb25zdCBzdGFydFN0YXRlID0gbmV3IHNmbi5QYXNzKHN0YWNrLCAnU3RhcnRTdGF0ZScpO1xuICAvLyBMb2cgZ3JvdXBcbiAgLy8gY29uc3QgbG9nR3JvdXAgPSBuZXcgTG9nR3JvdXAoc3RhY2ssICdteUxvZ0dyb3VwJywgZGVmYXVsdHMuYnVpbGRMb2dHcm91cChzdGFjaykpO1xuICBjb25zdCBsb2dHcm91cCA9IGJ1aWxkTG9nR3JvdXAoc3RhY2ssICdTdGF0ZU1hY2hpbmVMb2dHcm91cCcpO1xuXG4gIC8vIEJ1aWxkIHN0YXRlIG1hY2hpbmVcbiAgY29uc3QgYnVpbGRTdGF0ZU1hY2hpbmVSZXNwb25zZSA9IGRlZmF1bHRzLmJ1aWxkU3RhdGVNYWNoaW5lKHN0YWNrLCB7XG4gICAgZGVmaW5pdGlvbjogc3RhcnRTdGF0ZSxcbiAgICBsb2dzOiB7XG4gICAgICBkZXN0aW5hdGlvbjogbG9nR3JvdXAsXG4gICAgICBsZXZlbDogc2ZuLkxvZ0xldmVsLkZBVEFMXG4gICAgfVxuICB9KTtcbiAgLy8gQXNzZXJ0aW9uXG4gIGNvbnN0IHRlbXBsYXRlID0gVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrKTtcbiAgdGVtcGxhdGUucmVzb3VyY2VDb3VudElzKFwiQVdTOjpMb2dzOjpMb2dHcm91cFwiLCAxKTtcbiAgZXhwZWN0KGJ1aWxkU3RhdGVNYWNoaW5lUmVzcG9uc2Uuc3RhdGVNYWNoaW5lKS50b0JlRGVmaW5lZCgpO1xuICBleHBlY3QoYnVpbGRTdGF0ZU1hY2hpbmVSZXNwb25zZS5zdGF0ZU1hY2hpbmUpLnRvQmVEZWZpbmVkKCk7XG5cbiAgdGVtcGxhdGUuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKFwiQVdTOjpTdGVwRnVuY3Rpb25zOjpTdGF0ZU1hY2hpbmVcIiwge1xuICAgIExvZ2dpbmdDb25maWd1cmF0aW9uOiB7XG4gICAgICBEZXN0aW5hdGlvbnM6IFt7XG4gICAgICAgIENsb3VkV2F0Y2hMb2dzTG9nR3JvdXA6IHtcbiAgICAgICAgICBMb2dHcm91cEFybjoge1xuICAgICAgICAgICAgXCJGbjo6R2V0QXR0XCI6IFtcbiAgICAgICAgICAgICAgXCJTdGF0ZU1hY2hpbmVMb2dHcm91cDE1QjkxQkNCXCIsXG4gICAgICAgICAgICAgIFwiQXJuXCJcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1dLFxuICAgICAgTGV2ZWw6ICdGQVRBTCdcbiAgICB9XG4gIH0pO1xufSk7XG5cbnRlc3QoJ0NoZWNrIGRlZmF1bHQgQ2xvdWR3YXRjaCBwZXJtaXNzaW9ucycsICgpID0+IHtcbiAgLy8gU3RhY2tcbiAgY29uc3Qgc3RhY2sgPSBuZXcgU3RhY2soKTtcbiAgLy8gU3RlcCBmdW5jdGlvbiBkZWZpbml0aW9uXG4gIGNvbnN0IHN0YXJ0U3RhdGUgPSBuZXcgc2ZuLlBhc3Moc3RhY2ssICdTdGFydFN0YXRlJyk7XG4gIC8vIEJ1aWxkIHN0YXRlIG1hY2hpbmVcbiAgY29uc3QgYnVpbGRTdGF0ZU1hY2hpbmVSZXNwb25zZSA9IGRlZmF1bHRzLmJ1aWxkU3RhdGVNYWNoaW5lKHN0YWNrLCB7XG4gICAgZGVmaW5pdGlvbjogc3RhcnRTdGF0ZVxuICB9KTtcbiAgLy8gQXNzZXJ0aW9uXG4gIGV4cGVjdChidWlsZFN0YXRlTWFjaGluZVJlc3BvbnNlLnN0YXRlTWFjaGluZSkudG9CZURlZmluZWQoKTtcbiAgVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrKS5oYXNSZXNvdXJjZVByb3BlcnRpZXMoXCJBV1M6OklBTTo6UG9saWN5XCIsIHtcbiAgICBQb2xpY3lEb2N1bWVudDoge1xuICAgICAgU3RhdGVtZW50OiBbXG4gICAgICAgIHtcbiAgICAgICAgICBBY3Rpb246IFtcbiAgICAgICAgICAgIFwibG9nczpQdXRSZXNvdXJjZVBvbGljeVwiLFxuICAgICAgICAgICAgXCJsb2dzOkRlc2NyaWJlUmVzb3VyY2VQb2xpY2llc1wiLFxuICAgICAgICAgICAgXCJsb2dzOkRlc2NyaWJlTG9nR3JvdXBzXCJcbiAgICAgICAgICBdLFxuICAgICAgICAgIEVmZmVjdDogXCJBbGxvd1wiLFxuICAgICAgICAgIFJlc291cmNlOiB7XG4gICAgICAgICAgICBcIkZuOjpKb2luXCI6IFtcbiAgICAgICAgICAgICAgXCJcIixcbiAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFwiYXJuOlwiLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIFJlZjogXCJBV1M6OlBhcnRpdGlvblwiXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBcIjpsb2dzOlwiLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIFJlZjogXCJBV1M6OlJlZ2lvblwiXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBcIjpcIixcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBSZWY6IFwiQVdTOjpBY2NvdW50SWRcIlxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgXCI6KlwiXG4gICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBBY3Rpb246IFtcbiAgICAgICAgICAgIFwibG9nczpDcmVhdGVMb2dEZWxpdmVyeVwiLFxuICAgICAgICAgICAgXCJsb2dzOkdldExvZ0RlbGl2ZXJ5XCIsXG4gICAgICAgICAgICBcImxvZ3M6VXBkYXRlTG9nRGVsaXZlcnlcIixcbiAgICAgICAgICAgIFwibG9nczpEZWxldGVMb2dEZWxpdmVyeVwiLFxuICAgICAgICAgICAgXCJsb2dzOkxpc3RMb2dEZWxpdmVyaWVzXCJcbiAgICAgICAgICBdLFxuICAgICAgICAgIEVmZmVjdDogXCJBbGxvd1wiLFxuICAgICAgICAgIFJlc291cmNlOiBcIipcIlxuICAgICAgICB9XG4gICAgICBdLFxuICAgICAgVmVyc2lvbjogXCIyMDEyLTEwLTE3XCJcbiAgICB9XG4gIH0pO1xufSk7XG5cbnRlc3QoJ0NvdW50IFN0YXRlIE1hY2hpbmUgQ1cgQWxhcm1zJywgKCkgPT4ge1xuICAvLyBTdGFja1xuICBjb25zdCBzdGFjayA9IG5ldyBTdGFjaygpO1xuICAvLyBTdGVwIGZ1bmN0aW9uIGRlZmluaXRpb25cbiAgY29uc3Qgc3RhcnRTdGF0ZSA9IG5ldyBzZm4uUGFzcyhzdGFjaywgJ1N0YXJ0U3RhdGUnKTtcbiAgLy8gQnVpbGQgc3RhdGUgbWFjaGluZVxuICBjb25zdCBidWlsZFN0YXRlTWFjaGluZVJlc3BvbnNlID0gZGVmYXVsdHMuYnVpbGRTdGF0ZU1hY2hpbmUoc3RhY2ssIHtcbiAgICBkZWZpbml0aW9uOiBzdGFydFN0YXRlXG4gIH0pO1xuICBjb25zdCBjd0xpc3QgPSBkZWZhdWx0cy5idWlsZFN0ZXBGdW5jdGlvbkNXQWxhcm1zKHN0YWNrLCBidWlsZFN0YXRlTWFjaGluZVJlc3BvbnNlLnN0YXRlTWFjaGluZSk7XG4gIGV4cGVjdChidWlsZFN0YXRlTWFjaGluZVJlc3BvbnNlLnN0YXRlTWFjaGluZSkudG9CZURlZmluZWQoKTtcblxuICBleHBlY3QoY3dMaXN0Lmxlbmd0aCkudG9FcXVhbCgzKTtcbn0pO1xuXG50ZXN0KCdUZXN0IGRlcGxveW1lbnQgd2l0aCBjdXN0b20gcm9sZScsICgpID0+IHtcbiAgY29uc3QgZGVzY3JpcHRpb25UZXh0ID0gJ0N1c3RvbSByb2xlIGZvciBTdGF0ZSBNYWNoaW5lJztcblxuICAvLyBTdGFja1xuICBjb25zdCBzdGFjayA9IG5ldyBTdGFjaygpO1xuICAvLyBTdGVwIGZ1bmN0aW9uIGRlZmluaXRpb25cbiAgY29uc3Qgc3RhcnRTdGF0ZSA9IG5ldyBzZm4uUGFzcyhzdGFjaywgJ1N0YXJ0U3RhdGUnKTtcblxuICBjb25zdCBjdXN0b21Sb2xlID0gbmV3IGlhbS5Sb2xlKHN0YWNrLCAnY3VzdG9tLXJvbGUnLCB7XG4gICAgYXNzdW1lZEJ5OiBuZXcgaWFtLlNlcnZpY2VQcmluY2lwYWwoJ3N0YXRlcy5hbWF6b25hd3MuY29tJyksXG4gICAgZGVzY3JpcHRpb246IGRlc2NyaXB0aW9uVGV4dCxcbiAgICBpbmxpbmVQb2xpY2llczoge1xuICAgICAgSW52b2tlUG9saWN5OiBuZXcgaWFtLlBvbGljeURvY3VtZW50KHtcbiAgICAgICAgc3RhdGVtZW50czogW25ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICByZXNvdXJjZXM6IFtgYXJuOiR7QXdzLlBBUlRJVElPTn06czM6JHtBd3MuUkVHSU9OfToke0F3cy5BQ0NPVU5UX0lEfToqYF0sXG4gICAgICAgICAgYWN0aW9uczogWydzMzpMaXN0QnVja2V0J11cbiAgICAgICAgfSldXG4gICAgICB9KVxuICAgIH1cbiAgfSk7XG5cbiAgLy8gQnVpbGQgc3RhdGUgbWFjaGluZVxuICBjb25zdCBidWlsZFN0YXRlTWFjaGluZVJlc3BvbnNlID0gZGVmYXVsdHMuYnVpbGRTdGF0ZU1hY2hpbmUoc3RhY2ssIHtcbiAgICBkZWZpbml0aW9uOiBzdGFydFN0YXRlLFxuICAgIHJvbGU6IGN1c3RvbVJvbGVcbiAgfSk7XG5cbiAgLy8gQXNzZXJ0aW9uXG4gIGNvbnN0IHRlbXBsYXRlID0gVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrKTtcbiAgdGVtcGxhdGUucmVzb3VyY2VDb3VudElzKFwiQVdTOjpJQU06OlJvbGVcIiwgMSk7XG4gIGV4cGVjdChidWlsZFN0YXRlTWFjaGluZVJlc3BvbnNlLnN0YXRlTWFjaGluZSkudG9CZURlZmluZWQoKTtcblxuICB0ZW1wbGF0ZS5oYXNSZXNvdXJjZVByb3BlcnRpZXMoXCJBV1M6OklBTTo6Um9sZVwiLCB7XG4gICAgRGVzY3JpcHRpb246IGRlc2NyaXB0aW9uVGV4dFxuICB9KTtcbn0pO1xuXG50ZXN0KCdDb25maXJtIGZvcm1hdCBvZiBuYW1lJywgKCkgPT4ge1xuICAvLyBTdGFja1xuICBjb25zdCBzdGFjayA9IG5ldyBTdGFjayh1bmRlZmluZWQsICd0ZXN0c3RhY2snKTtcbiAgLy8gU3RlcCBmdW5jdGlvbiBkZWZpbml0aW9uXG4gIGNvbnN0IHN0YXJ0U3RhdGUgPSBuZXcgc2ZuLlBhc3Moc3RhY2ssICdTdGFydFN0YXRlJyk7XG4gIC8vIEJ1aWxkIHN0YXRlIG1hY2hpbmVcbiAgY29uc3QgYnVpbGRTdGF0ZU1hY2hpbmVSZXNwb25zZSA9IGRlZmF1bHRzLmJ1aWxkU3RhdGVNYWNoaW5lKHN0YWNrLCB7XG4gICAgc3RhdGVNYWNoaW5lTmFtZTogJ215U3RhdGVNYWNoaW5lJyxcbiAgICBkZWZpbml0aW9uOiBzdGFydFN0YXRlLFxuICB9KTtcbiAgLy8gQXNzZXJ0aW9uXG4gIGV4cGVjdChidWlsZFN0YXRlTWFjaGluZVJlc3BvbnNlLnN0YXRlTWFjaGluZSkudG9CZURlZmluZWQoKTtcblxuICBjb25zdCB0ZW1wbGF0ZSA9IFRlbXBsYXRlLmZyb21TdGFjayhzdGFjayk7XG4gIHRlbXBsYXRlLmhhc1Jlc291cmNlUHJvcGVydGllcyhcIkFXUzo6U3RlcEZ1bmN0aW9uczo6U3RhdGVNYWNoaW5lXCIsIHtcbiAgICBTdGF0ZU1hY2hpbmVOYW1lOiBcIm15U3RhdGVNYWNoaW5lXCJcbiAgfSk7XG5cbiAgLy8gUGVyZm9ybSBzb21lIGZhbmN5IHN0dWZmIHRvIGV4YW1pbmUgdGhlIHNwZWNpZmljcyBvZiB0aGUgTG9nR3JvdXBOYW1lXG4gIGNvbnN0IExvZ0dyb3VwID0gdGVtcGxhdGUuZmluZFJlc291cmNlcyhcIkFXUzo6TG9nczo6TG9nR3JvdXBcIik7XG4gIGNvbnN0IGxvZ05hbWUgPSBMb2dHcm91cC5TdGF0ZU1hY2hpbmVMb2dHcm91cDE1QjkxQkNCLlByb3BlcnRpZXMuTG9nR3JvdXBOYW1lO1xuXG4gIGV4cGVjdChsb2dOYW1lWydGbjo6Sm9pbiddKS50b0JlRGVmaW5lZCgpO1xuICBleHBlY3QobG9nTmFtZVsnRm46OkpvaW4nXS5sZW5ndGgpLnRvRXF1YWwoMik7XG4gIGV4cGVjdChsb2dOYW1lWydGbjo6Sm9pbiddWzFdWzFdWydGbjo6U2VsZWN0J11bMV1bJ0ZuOjpTcGxpdCddWzFdLlJlZikudG9FcXVhbChcIkFXUzo6U3RhY2tJZFwiKTtcbn0pO1xuIl19
305
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcC1mdW5jdGlvbi1oZWxwZXIudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInN0ZXAtZnVuY3Rpb24taGVscGVyLnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7OztHQVdHOztBQUVILFVBQVU7QUFDViw2Q0FBeUM7QUFDekMsZ0NBQWdDO0FBQ2hDLHFEQUFxRDtBQUNyRCxnRUFBZ0U7QUFDaEUsb0ZBQW1FO0FBQ25FLDJDQUEyQztBQUMzQyx5Q0FBeUM7QUFDekMsaURBQWlEO0FBQ2pELHVEQUFrRDtBQUVsRCxJQUFJLENBQUMsc0NBQXNDLEVBQUUsR0FBRyxFQUFFO0lBQ2hELFFBQVE7SUFDUixNQUFNLEtBQUssR0FBRyxJQUFJLG1CQUFLLEVBQUUsQ0FBQztJQUMxQiwyQkFBMkI7SUFDM0IsTUFBTSxVQUFVLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxZQUFZLENBQUMsQ0FBQztJQUNyRCxzQkFBc0I7SUFDdEIsTUFBTSx5QkFBeUIsR0FBRyxRQUFRLENBQUMsaUJBQWlCLENBQUMsS0FBSyxFQUFFO1FBQ2xFLFVBQVUsRUFBRSxVQUFVO1FBQ3RCLGdCQUFnQixFQUFFLGdCQUFnQjtLQUNuQyxDQUFDLENBQUM7SUFDSCxZQUFZO0lBQ1osTUFBTSxDQUFDLHlCQUF5QixDQUFDLFlBQVksQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQzdELE1BQU0sUUFBUSxHQUFHLHFCQUFRLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzNDLFFBQVEsQ0FBQyxlQUFlLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFFbkQsUUFBUSxDQUFDLHFCQUFxQixDQUFDLGtDQUFrQyxFQUFFO1FBQ2pFLGdCQUFnQixFQUFFLGdCQUFnQjtLQUNuQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQztBQUVILElBQUksQ0FBQyxvQ0FBb0MsRUFBRSxHQUFHLEVBQUU7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LENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpLiBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4gKiAgd2l0aCB0aGUgTGljZW5zZS4gQSBjb3B5IG9mIHRoZSBMaWNlbnNlIGlzIGxvY2F0ZWQgYXRcbiAqXG4gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqICBvciBpbiB0aGUgJ2xpY2Vuc2UnIGZpbGUgYWNjb21wYW55aW5nIHRoaXMgZmlsZS4gVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICdBUyBJUycgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFU1xuICogIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zXG4gKiAgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbi8vIEltcG9ydHNcbmltcG9ydCB7IFN0YWNrLCBBd3MgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCAqIGFzIGRlZmF1bHRzIGZyb20gJy4uLyc7XG5pbXBvcnQgKiBhcyBzZm4gZnJvbSAnYXdzLWNkay1saWIvYXdzLXN0ZXBmdW5jdGlvbnMnO1xuaW1wb3J0ICogYXMgc2ZuVGFza3MgZnJvbSAnYXdzLWNkay1saWIvYXdzLXN0ZXBmdW5jdGlvbnMtdGFza3MnO1xuaW1wb3J0IHsgYnVpbGRMb2dHcm91cCB9IGZyb20gJy4uL2xpYi9jbG91ZHdhdGNoLWxvZy1ncm91cC1oZWxwZXInO1xuaW1wb3J0ICogYXMgaWFtIGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nO1xuaW1wb3J0ICogYXMgczMgZnJvbSAnYXdzLWNkay1saWIvYXdzLXMzJztcbmltcG9ydCAqIGFzIGxhbWJkYSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbGFtYmRhJztcbmltcG9ydCB7IFRlbXBsYXRlIH0gZnJvbSAnYXdzLWNkay1saWIvYXNzZXJ0aW9ucyc7XG5cbnRlc3QoJ1Rlc3QgZGVwbG95bWVudCB3LyBjdXN0b20gcHJvcGVydGllcycsICgpID0+IHtcbiAgLy8gU3RhY2tcbiAgY29uc3Qgc3RhY2sgPSBuZXcgU3RhY2soKTtcbiAgLy8gU3RhdGUgTWFjaGluZSBkZWZpbml0aW9uXG4gIGNvbnN0IHN0YXJ0U3RhdGUgPSBuZXcgc2ZuLlBhc3Moc3RhY2ssICdTdGFydFN0YXRlJyk7XG4gIC8vIEJ1aWxkIHN0YXRlIG1hY2hpbmVcbiAgY29uc3QgYnVpbGRTdGF0ZU1hY2hpbmVSZXNwb25zZSA9IGRlZmF1bHRzLmJ1aWxkU3RhdGVNYWNoaW5lKHN0YWNrLCB7XG4gICAgZGVmaW5pdGlvbjogc3RhcnRTdGF0ZSxcbiAgICBzdGF0ZU1hY2hpbmVOYW1lOiAnbXlTdGF0ZU1hY2hpbmUnXG4gIH0pO1xuICAvLyBBc3NlcnRpb25cbiAgZXhwZWN0KGJ1aWxkU3RhdGVNYWNoaW5lUmVzcG9uc2Uuc3RhdGVNYWNoaW5lKS50b0JlRGVmaW5lZCgpO1xuICBjb25zdCB0ZW1wbGF0ZSA9IFRlbXBsYXRlLmZyb21TdGFjayhzdGFjayk7XG4gIHRlbXBsYXRlLnJlc291cmNlQ291bnRJcyhcIkFXUzo6TG9nczo6TG9nR3JvdXBcIiwgMSk7XG5cbiAgdGVtcGxhdGUuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKFwiQVdTOjpTdGVwRnVuY3Rpb25zOjpTdGF0ZU1hY2hpbmVcIiwge1xuICAgIFN0YXRlTWFjaGluZU5hbWU6IFwibXlTdGF0ZU1hY2hpbmVcIlxuICB9KTtcbn0pO1xuXG50ZXN0KCdUZXN0IGRlcGxveW1lbnQgdy8gbG9nZ2luZyBlbmFibGVkJywgKCkgPT4ge1xuICAvLyBTdGFja1xuICBjb25zdCBzdGFjayA9IG5ldyBTdGFjaygpO1xuICAvLyBTdGF0ZSBNYWNoaW5lIGRlZmluaXRpb25cbiAgY29uc3Qgc3RhcnRTdGF0ZSA9IG5ldyBzZm4uUGFzcyhzdGFjaywgJ1N0YXJ0U3RhdGUnKTtcbiAgLy8gTG9nIGdyb3VwXG4gIC8vIGNvbnN0IGxvZ0dyb3VwID0gbmV3IExvZ0dyb3VwKHN0YWNrLCAnbXlMb2dHcm91cCcsIGRlZmF1bHRzLmJ1aWxkTG9nR3JvdXAoc3RhY2spKTtcbiAgY29uc3QgbG9nR3JvdXAgPSBidWlsZExvZ0dyb3VwKHN0YWNrLCAnU3RhdGVNYWNoaW5lTG9nR3JvdXAnKTtcblxuICAvLyBCdWlsZCBzdGF0ZSBtYWNoaW5lXG4gIGNvbnN0IGJ1aWxkU3RhdGVNYWNoaW5lUmVzcG9uc2UgPSBkZWZhdWx0cy5idWlsZFN0YXRlTWFjaGluZShzdGFjaywge1xuICAgIGRlZmluaXRpb246IHN0YXJ0U3RhdGUsXG4gICAgbG9nczoge1xuICAgICAgZGVzdGluYXRpb246IGxvZ0dyb3VwLFxuICAgICAgbGV2ZWw6IHNmbi5Mb2dMZXZlbC5GQVRBTFxuICAgIH1cbiAgfSk7XG4gIC8vIEFzc2VydGlvblxuICBjb25zdCB0ZW1wbGF0ZSA9IFRlbXBsYXRlLmZyb21TdGFjayhzdGFjayk7XG4gIHRlbXBsYXRlLnJlc291cmNlQ291bnRJcyhcIkFXUzo6TG9nczo6TG9nR3JvdXBcIiwgMSk7XG4gIGV4cGVjdChidWlsZFN0YXRlTWFjaGluZVJlc3BvbnNlLnN0YXRlTWFjaGluZSkudG9CZURlZmluZWQoKTtcbiAgZXhwZWN0KGJ1aWxkU3RhdGVNYWNoaW5lUmVzcG9uc2Uuc3RhdGVNYWNoaW5lKS50b0JlRGVmaW5lZCgpO1xuXG4gIHRlbXBsYXRlLmhhc1Jlc291cmNlUHJvcGVydGllcyhcIkFXUzo6U3RlcEZ1bmN0aW9uczo6U3RhdGVNYWNoaW5lXCIsIHtcbiAgICBMb2dnaW5nQ29uZmlndXJhdGlvbjoge1xuICAgICAgRGVzdGluYXRpb25zOiBbe1xuICAgICAgICBDbG91ZFdhdGNoTG9nc0xvZ0dyb3VwOiB7XG4gICAgICAgICAgTG9nR3JvdXBBcm46IHtcbiAgICAgICAgICAgIFwiRm46OkdldEF0dFwiOiBbXG4gICAgICAgICAgICAgIFwiU3RhdGVNYWNoaW5lTG9nR3JvdXAxNUI5MUJDQlwiLFxuICAgICAgICAgICAgICBcIkFyblwiXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XSxcbiAgICAgIExldmVsOiAnRkFUQUwnXG4gICAgfVxuICB9KTtcbn0pO1xuXG50ZXN0KCdDaGVjayBkZWZhdWx0IENsb3Vkd2F0Y2ggcGVybWlzc2lvbnMnLCAoKSA9PiB7XG4gIC8vIFN0YWNrXG4gIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKCk7XG4gIC8vIFN0YXRlIE1hY2hpbmUgZGVmaW5pdGlvblxuICBjb25zdCBzdGFydFN0YXRlID0gbmV3IHNmbi5QYXNzKHN0YWNrLCAnU3RhcnRTdGF0ZScpO1xuICAvLyBCdWlsZCBzdGF0ZSBtYWNoaW5lXG4gIGNvbnN0IGJ1aWxkU3RhdGVNYWNoaW5lUmVzcG9uc2UgPSBkZWZhdWx0cy5idWlsZFN0YXRlTWFjaGluZShzdGFjaywge1xuICAgIGRlZmluaXRpb246IHN0YXJ0U3RhdGVcbiAgfSk7XG4gIC8vIEFzc2VydGlvblxuICBleHBlY3QoYnVpbGRTdGF0ZU1hY2hpbmVSZXNwb25zZS5zdGF0ZU1hY2hpbmUpLnRvQmVEZWZpbmVkKCk7XG4gIGNvbnN0IHRlbXBsYXRlID0gVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrKTtcbiAgdGVtcGxhdGUuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKFwiQVdTOjpJQU06OlBvbGljeVwiLCB7XG4gICAgUG9saWN5RG9jdW1lbnQ6IHtcbiAgICAgIFN0YXRlbWVudDogW1xuICAgICAgICB7XG4gICAgICAgICAgQWN0aW9uOiBbXG4gICAgICAgICAgICBcImxvZ3M6Q3JlYXRlTG9nRGVsaXZlcnlcIixcbiAgICAgICAgICAgIFwibG9nczpHZXRMb2dEZWxpdmVyeVwiLFxuICAgICAgICAgICAgXCJsb2dzOlVwZGF0ZUxvZ0RlbGl2ZXJ5XCIsXG4gICAgICAgICAgICBcImxvZ3M6RGVsZXRlTG9nRGVsaXZlcnlcIixcbiAgICAgICAgICAgIFwibG9nczpMaXN0TG9nRGVsaXZlcmllc1wiLFxuICAgICAgICAgICAgXCJsb2dzOlB1dFJlc291cmNlUG9saWN5XCIsXG4gICAgICAgICAgICBcImxvZ3M6RGVzY3JpYmVSZXNvdXJjZVBvbGljaWVzXCIsXG4gICAgICAgICAgICBcImxvZ3M6RGVzY3JpYmVMb2dHcm91cHNcIlxuICAgICAgICAgIF0sXG4gICAgICAgICAgRWZmZWN0OiBcIkFsbG93XCIsXG4gICAgICAgICAgUmVzb3VyY2U6IFwiKlwiXG4gICAgICAgIH1cbiAgICAgIF0sXG4gICAgICBWZXJzaW9uOiBcIjIwMTItMTAtMTdcIlxuICAgIH1cbiAgfSk7XG59KTtcblxudGVzdCgnQ2hlY2sgU3RhdGUgTWFjaGluZSBJQU0gUG9saWN5IHdpdGggMiBMYW1iZGEgZnVjdGlvbnMgaW4gU3RhdGUgTWFjaGluZSBEZWZpbml0aW9uJywgKCkgPT4ge1xuICAvLyBTdGFja1xuICBjb25zdCBzdGFjayA9IG5ldyBTdGFjaygpO1xuICAvLyBTdGF0ZSBNYWNoaW5lIGRlZmluaXRpb25cbiAgY29uc3QgdGFza09uZSA9IG5ldyBzZm5UYXNrcy5MYW1iZGFJbnZva2Uoc3RhY2ssICd0YXNrLW9uZScsIHtcbiAgICBsYW1iZGFGdW5jdGlvbjogbmV3IGxhbWJkYS5GdW5jdGlvbihzdGFjaywgJ2ZpcnN0LWZ1bmN0aW9uJywge1xuICAgICAgcnVudGltZTogbGFtYmRhLlJ1bnRpbWUuTk9ERUpTXzIwX1gsXG4gICAgICBoYW5kbGVyOiAnaW5kZXguaGFuZGxlcicsXG4gICAgICBjb2RlOiBsYW1iZGEuQ29kZS5mcm9tSW5saW5lKGBleHBvcnRzLmhhbmRsZXIgPSBhc3luYyAoZXZlbnQpID0+IHtyZXR1cm47fWApXG4gICAgfSksXG4gIH0pO1xuXG4gIGNvbnN0IHRhc2tUd28gPSBuZXcgc2ZuVGFza3MuTGFtYmRhSW52b2tlKHN0YWNrLCAndGFzay10d28nLCB7XG4gICAgbGFtYmRhRnVuY3Rpb246IG5ldyBsYW1iZGEuRnVuY3Rpb24oc3RhY2ssICdzZWNvbmQtZnVuY3Rpb24nLCB7XG4gICAgICBydW50aW1lOiBsYW1iZGEuUnVudGltZS5OT0RFSlNfMjBfWCxcbiAgICAgIGhhbmRsZXI6ICdpbmRleC5oYW5kbGVyJyxcbiAgICAgIGNvZGU6IGxhbWJkYS5Db2RlLmZyb21JbmxpbmUoYGV4cG9ydHMuaGFuZGxlciA9IGFzeW5jIChldmVudCkgPT4ge3JldHVybjt9YClcbiAgICB9KSxcbiAgfSk7XG5cbiAgLy8gLy8gTGF1bmNoIHRoZSBjb25zdHJ1Y3RcbiAgY29uc3Qgc3RhcnRTdGF0ZSA9IHNmbi5EZWZpbml0aW9uQm9keS5mcm9tQ2hhaW5hYmxlKHRhc2tPbmUubmV4dCh0YXNrVHdvKSk7XG4gIC8vIEJ1aWxkIHN0YXRlIG1hY2hpbmVcbiAgY29uc3QgYnVpbGRTdGF0ZU1hY2hpbmVSZXNwb25zZSA9IGRlZmF1bHRzLmJ1aWxkU3RhdGVNYWNoaW5lKHN0YWNrLCB7XG4gICAgZGVmaW5pdGlvbkJvZHk6IHN0YXJ0U3RhdGVcbiAgfSk7XG4gIC8vIEFzc2VydGlvblxuICBleHBlY3QoYnVpbGRTdGF0ZU1hY2hpbmVSZXNwb25zZS5zdGF0ZU1hY2hpbmUpLnRvQmVEZWZpbmVkKCk7XG4gIGNvbnN0IHRlbXBsYXRlID0gVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrKTtcbiAgdGVtcGxhdGUuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKFwiQVdTOjpJQU06OlBvbGljeVwiLCB7XG4gICAgUG9saWN5RG9jdW1lbnQ6IHtcbiAgICAgIFN0YXRlbWVudDogW1xuICAgICAgICB7XG4gICAgICAgICAgQWN0aW9uOiBcImxhbWJkYTpJbnZva2VGdW5jdGlvblwiLFxuICAgICAgICAgIEVmZmVjdDogXCJBbGxvd1wiLFxuICAgICAgICAgIFJlc291cmNlOiBbXG4gICAgICAgICAgICB7fSxcbiAgICAgICAgICAgIHt9XG4gICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgQWN0aW9uOiBcImxhbWJkYTpJbnZva2VGdW5jdGlvblwiLFxuICAgICAgICAgIEVmZmVjdDogXCJBbGxvd1wiLFxuICAgICAgICAgIFJlc291cmNlOiBbXG4gICAgICAgICAgICB7fSxcbiAgICAgICAgICAgIHt9XG4gICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgQWN0aW9uOiBbXG4gICAgICAgICAgICBcImxvZ3M6Q3JlYXRlTG9nRGVsaXZlcnlcIixcbiAgICAgICAgICAgIFwibG9nczpHZXRMb2dEZWxpdmVyeVwiLFxuICAgICAgICAgICAgXCJsb2dzOlVwZGF0ZUxvZ0RlbGl2ZXJ5XCIsXG4gICAgICAgICAgICBcImxvZ3M6RGVsZXRlTG9nRGVsaXZlcnlcIixcbiAgICAgICAgICAgIFwibG9nczpMaXN0TG9nRGVsaXZlcmllc1wiLFxuICAgICAgICAgICAgXCJsb2dzOlB1dFJlc291cmNlUG9saWN5XCIsXG4gICAgICAgICAgICBcImxvZ3M6RGVzY3JpYmVSZXNvdXJjZVBvbGljaWVzXCIsXG4gICAgICAgICAgICBcImxvZ3M6RGVzY3JpYmVMb2dHcm91cHNcIlxuICAgICAgICAgIF0sXG4gICAgICAgICAgRWZmZWN0OiBcIkFsbG93XCIsXG4gICAgICAgICAgUmVzb3VyY2U6IFwiKlwiXG4gICAgICAgIH1cbiAgICAgIF0sXG4gICAgICBWZXJzaW9uOiBcIjIwMTItMTAtMTdcIlxuICAgIH1cbiAgfSk7XG59KTtcblxudGVzdCgnQ2hlY2sgU3RhdGUgTWFjaGluZSBJQU0gUG9saWN5IHdpdGggUzMgQVBJIGNhbGwgaW4gU3RhdGUgTWFjaGluZSBEZWZpbml0aW9uJywgKCkgPT4ge1xuICAvLyBTdGFja1xuICBjb25zdCBzdGFjayA9IG5ldyBTdGFjaygpO1xuICBjb25zdCBzb3VyY2VCdWNrZXQgPSBuZXcgczMuQnVja2V0KHN0YWNrLCAnU291cmNlQnVja2V0Jywge1xuICAgIGV2ZW50QnJpZGdlRW5hYmxlZDogdHJ1ZSxcbiAgfSk7XG4gIGNvbnN0IGRlc3RpbmF0aW9uQnVja2V0ID0gbmV3IHMzLkJ1Y2tldChzdGFjaywgJ0Rlc3RpbmF0aW9uQnVja2V0Jywge30pO1xuXG4gIC8vIFN0YXRlIE1hY2hpbmUgZGVmaW5pdGlvblxuICBjb25zdCBzdGF0ZU1hY2hpbmVEZWZpbml0aW9uID0gbmV3IHNmblRhc2tzLkNhbGxBd3NTZXJ2aWNlKHN0YWNrLCAnQ29weSBTMyBvYmplY3QnLCB7XG4gICAgc2VydmljZTogJ3MzJyxcbiAgICBhY3Rpb246ICdjb3B5T2JqZWN0JyxcbiAgICBpYW1SZXNvdXJjZXM6IFtcbiAgICAgIHNvdXJjZUJ1Y2tldC5idWNrZXRBcm4sXG4gICAgICBkZXN0aW5hdGlvbkJ1Y2tldC5idWNrZXRBcm4sXG4gICAgXSxcbiAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICBDb3B5U291cmNlOiBzZm4uSnNvblBhdGguZm9ybWF0KFxuICAgICAgICAne30ve30nLFxuICAgICAgICBzZm4uSnNvblBhdGguc3RyaW5nQXQoJyQuc291cmNlQnVja2V0TmFtZScpLFxuICAgICAgICBzZm4uSnNvblBhdGguc3RyaW5nQXQoJyQuc291cmNlT2JqZWN0S2V5JylcbiAgICAgICksXG4gICAgICBCdWNrZXQ6IGRlc3RpbmF0aW9uQnVja2V0LmJ1Y2tldE5hbWUsXG4gICAgICBLZXk6IHNmbi5Kc29uUGF0aC5mb3JtYXQoXG4gICAgICAgICd7fS97fScsXG4gICAgICAgIHNmbi5Kc29uUGF0aC5zdHJpbmdBdCgnJC5kZXN0aW5hdGlvbkZvbGRlcicpLFxuICAgICAgICBzZm4uSnNvblBhdGguc3RyaW5nQXQoJyQuc291cmNlT2JqZWN0S2V5JylcbiAgICAgICksXG4gICAgfSxcbiAgICByZXN1bHRQYXRoOiBzZm4uSnNvblBhdGguRElTQ0FSRCxcbiAgfSk7XG5cbiAgLy8gQnVpbGQgc3RhdGUgbWFjaGluZVxuICBjb25zdCBidWlsZFN0YXRlTWFjaGluZVJlc3BvbnNlID0gZGVmYXVsdHMuYnVpbGRTdGF0ZU1hY2hpbmUoc3RhY2ssIHtcbiAgICBkZWZpbml0aW9uQm9keTogc2ZuLkRlZmluaXRpb25Cb2R5LmZyb21DaGFpbmFibGUoc3RhdGVNYWNoaW5lRGVmaW5pdGlvbilcbiAgfSk7XG4gIC8vIEFzc2VydGlvblxuICBleHBlY3QoYnVpbGRTdGF0ZU1hY2hpbmVSZXNwb25zZS5zdGF0ZU1hY2hpbmUpLnRvQmVEZWZpbmVkKCk7XG4gIGNvbnN0IHRlbXBsYXRlID0gVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrKTtcbiAgdGVtcGxhdGUuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKFwiQVdTOjpJQU06OlBvbGljeVwiLCB7XG4gICAgUG9saWN5RG9jdW1lbnQ6IHtcbiAgICAgIFN0YXRlbWVudDogW1xuICAgICAgICB7XG4gICAgICAgICAgQWN0aW9uOiBcInMzOmNvcHlPYmplY3RcIixcbiAgICAgICAgICBFZmZlY3Q6IFwiQWxsb3dcIixcbiAgICAgICAgICBSZXNvdXJjZTogW1xuICAgICAgICAgICAge30sICAvLyBQbGFjZWhvbGRlcnMgZm9yIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gYnVja2V0cyB3aXRoIHN0YWNrIElEIHNwZWNpZmljIG5hbWVzXG4gICAgICAgICAgICB7fVxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBBY3Rpb246IFtcbiAgICAgICAgICAgIFwibG9nczpDcmVhdGVMb2dEZWxpdmVyeVwiLFxuICAgICAgICAgICAgXCJsb2dzOkdldExvZ0RlbGl2ZXJ5XCIsXG4gICAgICAgICAgICBcImxvZ3M6VXBkYXRlTG9nRGVsaXZlcnlcIixcbiAgICAgICAgICAgIFwibG9nczpEZWxldGVMb2dEZWxpdmVyeVwiLFxuICAgICAgICAgICAgXCJsb2dzOkxpc3RMb2dEZWxpdmVyaWVzXCIsXG4gICAgICAgICAgICBcImxvZ3M6UHV0UmVzb3VyY2VQb2xpY3lcIixcbiAgICAgICAgICAgIFwibG9nczpEZXNjcmliZVJlc291cmNlUG9saWNpZXNcIixcbiAgICAgICAgICAgIFwibG9nczpEZXNjcmliZUxvZ0dyb3Vwc1wiXG4gICAgICAgICAgXSxcbiAgICAgICAgICBFZmZlY3Q6IFwiQWxsb3dcIixcbiAgICAgICAgICBSZXNvdXJjZTogXCIqXCJcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBWZXJzaW9uOiBcIjIwMTItMTAtMTdcIlxuICAgIH1cbiAgfSk7XG59KTtcblxudGVzdCgnQ291bnQgU3RhdGUgTWFjaGluZSBDVyBBbGFybXMnLCAoKSA9PiB7XG4gIC8vIFN0YWNrXG4gIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKCk7XG4gIC8vIFN0YXRlIE1hY2hpbmUgZGVmaW5pdGlvblxuICBjb25zdCBzdGFydFN0YXRlID0gbmV3IHNmbi5QYXNzKHN0YWNrLCAnU3RhcnRTdGF0ZScpO1xuICAvLyBCdWlsZCBzdGF0ZSBtYWNoaW5lXG4gIGNvbnN0IGJ1aWxkU3RhdGVNYWNoaW5lUmVzcG9uc2UgPSBkZWZhdWx0cy5idWlsZFN0YXRlTWFjaGluZShzdGFjaywge1xuICAgIGRlZmluaXRpb246IHN0YXJ0U3RhdGVcbiAgfSk7XG4gIGNvbnN0IGN3TGlzdCA9IGRlZmF1bHRzLmJ1aWxkU3RlcEZ1bmN0aW9uQ1dBbGFybXMoc3RhY2ssIGJ1aWxkU3RhdGVNYWNoaW5lUmVzcG9uc2Uuc3RhdGVNYWNoaW5lKTtcbiAgZXhwZWN0KGJ1aWxkU3RhdGVNYWNoaW5lUmVzcG9uc2Uuc3RhdGVNYWNoaW5lKS50b0JlRGVmaW5lZCgpO1xuXG4gIGV4cGVjdChjd0xpc3QubGVuZ3RoKS50b0VxdWFsKDMpO1xufSk7XG5cbnRlc3QoJ1Rlc3QgZGVwbG95bWVudCB3aXRoIGN1c3RvbSByb2xlJywgKCkgPT4ge1xuICBjb25zdCBkZXNjcmlwdGlvblRleHQgPSAnQ3VzdG9tIHJvbGUgZm9yIFN0YXRlIE1hY2hpbmUnO1xuXG4gIC8vIFN0YWNrXG4gIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKCk7XG4gIC8vIFN0YXRlIE1hY2hpbmUgZGVmaW5pdGlvblxuICBjb25zdCBzdGFydFN0YXRlID0gbmV3IHNmbi5QYXNzKHN0YWNrLCAnU3RhcnRTdGF0ZScpO1xuXG4gIGNvbnN0IGN1c3RvbVJvbGUgPSBuZXcgaWFtLlJvbGUoc3RhY2ssICdjdXN0b20tcm9sZScsIHtcbiAgICBhc3N1bWVkQnk6IG5ldyBpYW0uU2VydmljZVByaW5jaXBhbCgnc3RhdGVzLmFtYXpvbmF3cy5jb20nKSxcbiAgICBkZXNjcmlwdGlvbjogZGVzY3JpcHRpb25UZXh0LFxuICAgIGlubGluZVBvbGljaWVzOiB7XG4gICAgICBJbnZva2VQb2xpY3k6IG5ldyBpYW0uUG9saWN5RG9jdW1lbnQoe1xuICAgICAgICBzdGF0ZW1lbnRzOiBbbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgIHJlc291cmNlczogW2Bhcm46JHtBd3MuUEFSVElUSU9OfTpzMzoke0F3cy5SRUdJT059OiR7QXdzLkFDQ09VTlRfSUR9OipgXSxcbiAgICAgICAgICBhY3Rpb25zOiBbJ3MzOkxpc3RCdWNrZXQnXVxuICAgICAgICB9KV1cbiAgICAgIH0pXG4gICAgfVxuICB9KTtcblxuICAvLyBCdWlsZCBzdGF0ZSBtYWNoaW5lXG4gIGNvbnN0IGJ1aWxkU3RhdGVNYWNoaW5lUmVzcG9uc2UgPSBkZWZhdWx0cy5idWlsZFN0YXRlTWFjaGluZShzdGFjaywge1xuICAgIGRlZmluaXRpb246IHN0YXJ0U3RhdGUsXG4gICAgcm9sZTogY3VzdG9tUm9sZVxuICB9KTtcblxuICAvLyBBc3NlcnRpb25cbiAgY29uc3QgdGVtcGxhdGUgPSBUZW1wbGF0ZS5mcm9tU3RhY2soc3RhY2spO1xuICB0ZW1wbGF0ZS5yZXNvdXJjZUNvdW50SXMoXCJBV1M6OklBTTo6Um9sZVwiLCAxKTtcbiAgZXhwZWN0KGJ1aWxkU3RhdGVNYWNoaW5lUmVzcG9uc2Uuc3RhdGVNYWNoaW5lKS50b0JlRGVmaW5lZCgpO1xuXG4gIHRlbXBsYXRlLmhhc1Jlc291cmNlUHJvcGVydGllcyhcIkFXUzo6SUFNOjpSb2xlXCIsIHtcbiAgICBEZXNjcmlwdGlvbjogZGVzY3JpcHRpb25UZXh0XG4gIH0pO1xufSk7XG5cbnRlc3QoJ0NvbmZpcm0gZm9ybWF0IG9mIG5hbWUnLCAoKSA9PiB7XG4gIC8vIFN0YWNrXG4gIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKHVuZGVmaW5lZCwgJ3Rlc3RzdGFjaycpO1xuICAvLyBTdGF0ZSBNYWNoaW5lIGRlZmluaXRpb25cbiAgY29uc3Qgc3RhcnRTdGF0ZSA9IG5ldyBzZm4uUGFzcyhzdGFjaywgJ1N0YXJ0U3RhdGUnKTtcbiAgLy8gQnVpbGQgc3RhdGUgbWFjaGluZVxuICBjb25zdCBidWlsZFN0YXRlTWFjaGluZVJlc3BvbnNlID0gZGVmYXVsdHMuYnVpbGRTdGF0ZU1hY2hpbmUoc3RhY2ssIHtcbiAgICBzdGF0ZU1hY2hpbmVOYW1lOiAnbXlTdGF0ZU1hY2hpbmUnLFxuICAgIGRlZmluaXRpb246IHN0YXJ0U3RhdGUsXG4gIH0pO1xuICAvLyBBc3NlcnRpb25cbiAgZXhwZWN0KGJ1aWxkU3RhdGVNYWNoaW5lUmVzcG9uc2Uuc3RhdGVNYWNoaW5lKS50b0JlRGVmaW5lZCgpO1xuXG4gIGNvbnN0IHRlbXBsYXRlID0gVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrKTtcbiAgdGVtcGxhdGUuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKFwiQVdTOjpTdGVwRnVuY3Rpb25zOjpTdGF0ZU1hY2hpbmVcIiwge1xuICAgIFN0YXRlTWFjaGluZU5hbWU6IFwibXlTdGF0ZU1hY2hpbmVcIlxuICB9KTtcblxuICAvLyBQZXJmb3JtIHNvbWUgZmFuY3kgc3R1ZmYgdG8gZXhhbWluZSB0aGUgc3BlY2lmaWNzIG9mIHRoZSBMb2dHcm91cE5hbWVcbiAgY29uc3QgTG9nR3JvdXAgPSB0ZW1wbGF0ZS5maW5kUmVzb3VyY2VzKFwiQVdTOjpMb2dzOjpMb2dHcm91cFwiKTtcbiAgY29uc3QgbG9nTmFtZSA9IExvZ0dyb3VwLlN0YXRlTWFjaGluZUxvZ0dyb3VwMTVCOTFCQ0IuUHJvcGVydGllcy5Mb2dHcm91cE5hbWU7XG5cbiAgZXhwZWN0KGxvZ05hbWVbJ0ZuOjpKb2luJ10pLnRvQmVEZWZpbmVkKCk7XG4gIGV4cGVjdChsb2dOYW1lWydGbjo6Sm9pbiddLmxlbmd0aCkudG9FcXVhbCgyKTtcbiAgZXhwZWN0KGxvZ05hbWVbJ0ZuOjpKb2luJ11bMV1bMV1bJ0ZuOjpTZWxlY3QnXVsxXVsnRm46OlNwbGl0J11bMV0uUmVmKS50b0VxdWFsKFwiQVdTOjpTdGFja0lkXCIpO1xufSk7XG4iXX0=