@aws-solutions-constructs/core 2.62.0 → 2.63.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (84) hide show
  1. package/.jsii +331 -30
  2. package/index.d.ts +2 -0
  3. package/index.js +9 -3
  4. package/lib/alb-helper.js +11 -11
  5. package/lib/apigateway-defaults.js +2 -2
  6. package/lib/apigateway-helper.js +12 -12
  7. package/lib/cloudfront-distribution-defaults.js +1 -1
  8. package/lib/cloudfront-distribution-helper.js +12 -12
  9. package/lib/cloudwatch-log-group-helper.js +4 -4
  10. package/lib/cognito-helper.d.ts +6 -1
  11. package/lib/cognito-helper.js +6 -6
  12. package/lib/dynamodb-table-helper.js +3 -3
  13. package/lib/elasticache-helper.js +4 -4
  14. package/lib/elasticsearch-defaults.js +1 -1
  15. package/lib/elasticsearch-helper.js +5 -5
  16. package/lib/eventbridge-helper.js +1 -1
  17. package/lib/fargate-helper.js +2 -2
  18. package/lib/glue-job-defaults.js +3 -3
  19. package/lib/glue-job-helper.js +4 -4
  20. package/lib/glue-table-defaults.js +1 -1
  21. package/lib/glue-table-helper.js +1 -1
  22. package/lib/kendra-defaults.js +2 -2
  23. package/lib/kendra-helper.js +8 -8
  24. package/lib/kinesis-analytics-helper.js +2 -2
  25. package/lib/kinesis-streams-helper.js +3 -3
  26. package/lib/kms-helper.js +2 -2
  27. package/lib/lambda-event-source-mapping-defaults.js +6 -6
  28. package/lib/lambda-helper.js +6 -6
  29. package/lib/mediastore-helper.js +3 -3
  30. package/lib/opensearch-defaults.js +1 -1
  31. package/lib/opensearch-helper.js +5 -5
  32. package/lib/override-warning-service.js +3 -3
  33. package/lib/s3-bucket-helper.js +17 -17
  34. package/lib/s3-oac-origin.js +3 -3
  35. package/lib/sagemaker-helper.js +17 -17
  36. package/lib/secretsmanager-helper.js +3 -3
  37. package/lib/security-group-helper.js +3 -3
  38. package/lib/sns-helper.js +3 -3
  39. package/lib/sqs-helper.d.ts +18 -0
  40. package/lib/sqs-helper.js +12 -8
  41. package/lib/step-function-helper.js +8 -8
  42. package/lib/utils.js +3 -3
  43. package/lib/vpc-helper.js +6 -6
  44. package/lib/waf-helper.js +2 -2
  45. package/lib/websocket-api-defaults.d.ts +22 -0
  46. package/lib/websocket-api-defaults.js +36 -0
  47. package/lib/websocket-api-helper.d.ts +66 -0
  48. package/lib/websocket-api-helper.js +144 -0
  49. package/package.json +4 -4
  50. package/test/apigateway-helper.test.js +1 -1
  51. package/test/cloudfront-distribution-api-gateway-helper.test.js +5 -5
  52. package/test/cloudfront-distribution-mediastore-helper.test.js +8 -8
  53. package/test/cloudfront-distribution-s3-helper.test.js +21 -21
  54. package/test/cloudwatch-log-group-helper.test.js +3 -3
  55. package/test/dynamo-table.test.js +6 -6
  56. package/test/elasticache-defaults.test.js +3 -3
  57. package/test/elasticache-helper.test.js +15 -15
  58. package/test/elasticsearch-helper.test.js +1 -1
  59. package/test/events-rule.test.js +3 -3
  60. package/test/fargate-helper.test.js +10 -10
  61. package/test/glue-job-helper.test.js +1 -1
  62. package/test/glue-table-helper.test.js +1 -1
  63. package/test/iot-rule.test.js +3 -3
  64. package/test/kendra-helper.test.js +24 -24
  65. package/test/kinesis-analytics.test.js +2 -2
  66. package/test/kinesis-firehose-s3-defaults.test.js +2 -2
  67. package/test/kinesis-streams-defaults.test.js +2 -2
  68. package/test/lambda-helper.test.js +1 -1
  69. package/test/mediastore-helper.test.js +4 -4
  70. package/test/override-warning-service.test.js +13 -13
  71. package/test/s3-bucket-helper.test.js +2 -2
  72. package/test/s3-bucket.test.js +7 -7
  73. package/test/sagemaker-helper.test.js +2 -2
  74. package/test/sns-helper.test.js +2 -2
  75. package/test/sqs-helper.test.js +41 -9
  76. package/test/step-function-helper.test.js +4 -4
  77. package/test/test-helper.js +27 -27
  78. package/test/utils.test.js +1 -1
  79. package/test/vpc-helper.test.js +23 -23
  80. package/test/waf-helper.test.js +2 -2
  81. package/test/websocket-api-defaults.test.d.ts +13 -0
  82. package/test/websocket-api-defaults.test.js +29 -0
  83. package/test/websocket-api-helper.test.d.ts +13 -0
  84. package/test/websocket-api-helper.test.js +395 -0
@@ -49,15 +49,15 @@ function CreateScrapBucket(scope, id, props) {
49
49
  // Combine basic props with special props from test client
50
50
  let synthesizedProps;
51
51
  if (props) {
52
- synthesizedProps = utils_1.overrideProps(defaultProps, props);
52
+ synthesizedProps = (0, utils_1.overrideProps)(defaultProps, props);
53
53
  }
54
54
  else {
55
55
  synthesizedProps = defaultProps;
56
56
  }
57
57
  // Finally - set up logging for the scrap bucket
58
- const finalProps = utils_1.overrideProps(synthesizedProps, { serverAccessLogsBucket: logBucket });
58
+ const finalProps = (0, utils_1.overrideProps)(synthesizedProps, { serverAccessLogsBucket: logBucket });
59
59
  const scriptBucket = new aws_s3_1.Bucket(scope, id, finalProps);
60
- utils_1.addCfnSuppressRules(logBucket, [
60
+ (0, utils_1.addCfnSuppressRules)(logBucket, [
61
61
  {
62
62
  id: "W35",
63
63
  reason: "This is a log bucket",
@@ -80,10 +80,10 @@ function generateIntegStackName(filename) {
80
80
  exports.generateIntegStackName = generateIntegStackName;
81
81
  // Helper Functions
82
82
  function getTestVpc(stack, publicFacing = true, userVpcProps) {
83
- return vpc_helper_1.buildVpc(stack, {
83
+ return (0, vpc_helper_1.buildVpc)(stack, {
84
84
  defaultVpcProps: publicFacing ?
85
- vpc_defaults_1.DefaultPublicPrivateVpcProps() :
86
- vpc_defaults_1.DefaultIsolatedVpcProps(),
85
+ (0, vpc_defaults_1.DefaultPublicPrivateVpcProps)() :
86
+ (0, vpc_defaults_1.DefaultIsolatedVpcProps)(),
87
87
  constructVpcProps: {
88
88
  enableDnsHostnames: true,
89
89
  enableDnsSupport: true,
@@ -115,24 +115,24 @@ function suppressCustomHandlerCfnNagWarnings(stack, handlerId) {
115
115
  stack.node.children.forEach(child => {
116
116
  if (child.node.id === handlerId) {
117
117
  const handlerFunction = child.node.findChild('Handler');
118
- utils_1.addCfnSuppressRules(handlerFunction, [{ id: "W58", reason: "CDK generated custom resource" }]);
119
- utils_1.addCfnSuppressRules(handlerFunction, [{ id: "W89", reason: "CDK generated custom resource" }]);
120
- utils_1.addCfnSuppressRules(handlerFunction, [{ id: "W92", reason: "CDK generated custom resource" }]);
118
+ (0, utils_1.addCfnSuppressRules)(handlerFunction, [{ id: "W58", reason: "CDK generated custom resource" }]);
119
+ (0, utils_1.addCfnSuppressRules)(handlerFunction, [{ id: "W89", reason: "CDK generated custom resource" }]);
120
+ (0, utils_1.addCfnSuppressRules)(handlerFunction, [{ id: "W92", reason: "CDK generated custom resource" }]);
121
121
  }
122
122
  });
123
123
  }
124
124
  exports.suppressCustomHandlerCfnNagWarnings = suppressCustomHandlerCfnNagWarnings;
125
125
  function CreateTestCache(scope, id, vpc, port) {
126
- const cachePort = port ?? elasticache_defaults_1.GetDefaultCachePort();
126
+ const cachePort = port ?? (0, elasticache_defaults_1.GetDefaultCachePort)();
127
127
  // Create the subnet group from all the isolated subnets in the VPC
128
- const subnetGroup = elasticache_helper_1.createCacheSubnetGroup(scope, vpc, id);
128
+ const subnetGroup = (0, elasticache_helper_1.createCacheSubnetGroup)(scope, vpc, id);
129
129
  const emptySG = new ec2.SecurityGroup(scope, `${id}-cachesg`, {
130
130
  vpc,
131
131
  allowAllOutbound: true,
132
132
  });
133
- utils_1.addCfnSuppressRules(emptySG, [{ id: "W40", reason: "Test Resource" }]);
134
- utils_1.addCfnSuppressRules(emptySG, [{ id: "W5", reason: "Test Resource" }]);
135
- utils_1.addCfnSuppressRules(emptySG, [{ id: "W36", reason: "Test Resource" }]);
133
+ (0, utils_1.addCfnSuppressRules)(emptySG, [{ id: "W40", reason: "Test Resource" }]);
134
+ (0, utils_1.addCfnSuppressRules)(emptySG, [{ id: "W5", reason: "Test Resource" }]);
135
+ (0, utils_1.addCfnSuppressRules)(emptySG, [{ id: "W36", reason: "Test Resource" }]);
136
136
  const cacheProps = {
137
137
  clusterName: `${id}-cdk-cluster`,
138
138
  cacheNodeType: "cache.t3.medium",
@@ -183,7 +183,7 @@ class CfnNagLambdaAspect {
183
183
  visit(node) {
184
184
  const resource = node;
185
185
  if (resource.cfnResourceType === 'AWS::Lambda::Function') {
186
- utils_1.addCfnSuppressRules(resource, [
186
+ (0, utils_1.addCfnSuppressRules)(resource, [
187
187
  { id: 'W58', reason: 'This Lambda Function is created for integration testing purposes only and is not part of an actual construct' },
188
188
  { id: 'W89', reason: 'This Lambda Function is created for integration testing purposes only and is not part of an actual construct' },
189
189
  { id: 'W92', reason: 'This Lambda Function is created for integration testing purposes only and is not part of an actual construct' }
@@ -197,9 +197,9 @@ function CreateTestApi(stack, id) {
197
197
  runtime: defaults.COMMERCIAL_REGION_LAMBDA_NODE_RUNTIME,
198
198
  handler: ".handler",
199
199
  });
200
- utils_1.addCfnSuppressRules(lambdaFunction, [{ id: "W58", reason: "Test Resource" }]);
201
- utils_1.addCfnSuppressRules(lambdaFunction, [{ id: "W89", reason: "Test Resource" }]);
202
- utils_1.addCfnSuppressRules(lambdaFunction, [{ id: "W92", reason: "Test Resource" }]);
200
+ (0, utils_1.addCfnSuppressRules)(lambdaFunction, [{ id: "W58", reason: "Test Resource" }]);
201
+ (0, utils_1.addCfnSuppressRules)(lambdaFunction, [{ id: "W89", reason: "Test Resource" }]);
202
+ (0, utils_1.addCfnSuppressRules)(lambdaFunction, [{ id: "W92", reason: "Test Resource" }]);
203
203
  const restApi = new api.LambdaRestApi(stack, `${id}Api`, {
204
204
  handler: lambdaFunction,
205
205
  defaultMethodOptions: {
@@ -209,17 +209,17 @@ function CreateTestApi(stack, id) {
209
209
  });
210
210
  const newDeployment = restApi.latestDeployment;
211
211
  if (newDeployment) {
212
- utils_1.addCfnSuppressRules(newDeployment, [
212
+ (0, utils_1.addCfnSuppressRules)(newDeployment, [
213
213
  { id: "W68", reason: "Test Resource" },
214
214
  ]);
215
215
  }
216
216
  const newMethod = restApi.methods[0];
217
- utils_1.addCfnSuppressRules(newMethod, [{ id: "W59", reason: "Test Resource" }]);
217
+ (0, utils_1.addCfnSuppressRules)(newMethod, [{ id: "W59", reason: "Test Resource" }]);
218
218
  const newMethodTwo = restApi.methods[1];
219
- utils_1.addCfnSuppressRules(newMethodTwo, [{ id: "W59", reason: "Test Resource" }]);
219
+ (0, utils_1.addCfnSuppressRules)(newMethodTwo, [{ id: "W59", reason: "Test Resource" }]);
220
220
  const newStage = restApi.deploymentStage;
221
- utils_1.addCfnSuppressRules(newStage, [{ id: "W64", reason: "Test Resource" }]);
222
- utils_1.addCfnSuppressRules(newStage, [{ id: "W69", reason: "Test Resource" }]);
221
+ (0, utils_1.addCfnSuppressRules)(newStage, [{ id: "W64", reason: "Test Resource" }]);
222
+ (0, utils_1.addCfnSuppressRules)(newStage, [{ id: "W69", reason: "Test Resource" }]);
223
223
  return restApi;
224
224
  }
225
225
  exports.CreateTestApi = CreateTestApi;
@@ -229,9 +229,9 @@ function CreateApiAuthorizer(stack, id) {
229
229
  runtime: defaults.COMMERCIAL_REGION_LAMBDA_NODE_RUNTIME,
230
230
  handler: ".handler",
231
231
  });
232
- utils_1.addCfnSuppressRules(authFn, [{ id: "W58", reason: "Test Resource" }]);
233
- utils_1.addCfnSuppressRules(authFn, [{ id: "W89", reason: "Test Resource" }]);
234
- utils_1.addCfnSuppressRules(authFn, [{ id: "W92", reason: "Test Resource" }]);
232
+ (0, utils_1.addCfnSuppressRules)(authFn, [{ id: "W58", reason: "Test Resource" }]);
233
+ (0, utils_1.addCfnSuppressRules)(authFn, [{ id: "W89", reason: "Test Resource" }]);
234
+ (0, utils_1.addCfnSuppressRules)(authFn, [{ id: "W92", reason: "Test Resource" }]);
235
235
  const authorizer = new api.RequestAuthorizer(stack, id, {
236
236
  handler: authFn,
237
237
  identitySources: [api.IdentitySource.header('Authorization')]
@@ -258,4 +258,4 @@ function SuppressCfnNagLambdaWarnings(stack) {
258
258
  aws_cdk_lib_1.Aspects.of(stack).add(new CfnNagLambdaAspect());
259
259
  }
260
260
  exports.SuppressCfnNagLambdaWarnings = SuppressCfnNagLambdaWarnings;
261
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC1oZWxwZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ0ZXN0LWhlbHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7O0dBV0c7OztBQUlILCtDQUEyRTtBQUMzRSw2Q0FBMkY7QUFDM0Ysa0RBQTZDO0FBQzdDLHNEQUE0RjtBQUM1Rix3Q0FBa0U7QUFDbEUscUNBQXFDO0FBQ3JDLGtFQUFtRTtBQUNuRSw2QkFBNkI7QUFDN0IscURBQXFEO0FBQ3JELDJDQUEyQztBQUMzQywwREFBMEQ7QUFFMUQsc0VBQWtFO0FBQ2xFLHVEQUF5RDtBQUN6RCxpREFBaUQ7QUFDakQscURBQXFEO0FBQ3JELCtEQUErRDtBQUMvRCxrREFBa0Q7QUFFckMsUUFBQSxjQUFjLEdBQUcseURBQXlELENBQUM7QUFFeEYsK0VBQStFO0FBQy9FLFNBQWdCLGlCQUFpQixDQUFDLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQXlCO0lBRXZGLElBQUksS0FBSyxFQUFFLHNCQUFzQixFQUFFO1FBQ2pDLE1BQU0sSUFBSSxLQUFLLENBQUMscURBQXFELENBQUMsQ0FBQztLQUN4RTtJQUVELHdDQUF3QztJQUN4QyxNQUFNLFlBQVksR0FBZ0I7UUFDaEMsU0FBUyxFQUFFLElBQUk7UUFDZixhQUFhLEVBQUUsMkJBQWEsQ0FBQyxPQUFPO1FBQ3BDLGlCQUFpQixFQUFFLElBQUk7UUFDdkIsVUFBVSxFQUFFLHlCQUFnQixDQUFDLFVBQVU7UUFDdkMsVUFBVSxFQUFFLElBQUk7S0FDakIsQ0FBQztJQUVGLDBCQUEwQjtJQUMxQixNQUFNLFNBQVMsR0FBRyxJQUFJLGVBQU0sQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxZQUFZLENBQUMsQ0FBQztJQUU5RCwwREFBMEQ7SUFDMUQsSUFBSSxnQkFBNkIsQ0FBQztJQUNsQyxJQUFJLEtBQUssRUFBRTtRQUNULGdCQUFnQixHQUFHLHFCQUFhLENBQUMsWUFBWSxFQUFFLEtBQUssQ0FBQyxD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SyxFQUFFLE1BQU0sRUFBRSxlQUFlLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFFdEUsTUFBTSxVQUFVLEdBQUcsSUFBSSxHQUFHLENBQUMsaUJBQWlCLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRTtRQUN0RCxPQUFPLEVBQUUsTUFBTTtRQUNmLGVBQWUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0tBQzlELENBQUMsQ0FBQztJQUVILE9BQU8sVUFBVSxDQUFDO0FBQ3BCLENBQUM7QUFoQkQsa0RBZ0JDO0FBRUQsNENBQTRDO0FBQzVDLG9FQUFvRTtBQUNwRSwrRkFBK0Y7QUFDL0YsOERBQThEO0FBQzlELFNBQWdCLHlCQUF5QixDQUFDLElBQVk7SUFDcEQsTUFBTSxTQUFTLEdBQUcsZ0JBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLGdCQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFHLGlCQUFHLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2pFLE1BQU0sV0FBVyxHQUFHLGdCQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxnQkFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUMzRCxPQUFPLGdCQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDO0FBQzNDLENBQUM7QUFKRCw4REFJQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFnQiw0QkFBNEIsQ0FBQyxLQUFZO0lBQ3ZELHFCQUFPLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLGtCQUFrQixFQUFFLENBQUMsQ0FBQztBQUNsRCxDQUFDO0FBRkQsb0VBRUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqICBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKS4gWW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZVxuICogIHdpdGggdGhlIExpY2Vuc2UuIEEgY29weSBvZiB0aGUgTGljZW5zZSBpcyBsb2NhdGVkIGF0XG4gKlxuICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiAgb3IgaW4gdGhlICdsaWNlbnNlJyBmaWxlIGFjY29tcGFueWluZyB0aGlzIGZpbGUuIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAnQVMgSVMnIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVNcbiAqICBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9uc1xuICogIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG4vLyBJbXBvcnRzXG5pbXBvcnQgeyBDb25zdHJ1Y3QsIElDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IEJ1Y2tldCwgQnVja2V0UHJvcHMsIEJ1Y2tldEVuY3J5cHRpb24gfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXMzXCI7XG5pbXBvcnQgeyBDZm5SZXNvdXJjZSwgUmVtb3ZhbFBvbGljeSwgU3RhY2ssIEFzcGVjdHMsIElBc3BlY3QsIEF3cywgRm4gfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7IGJ1aWxkVnBjIH0gZnJvbSAnLi4vbGliL3ZwYy1oZWxwZXInO1xuaW1wb3J0IHsgRGVmYXVsdFB1YmxpY1ByaXZhdGVWcGNQcm9wcywgRGVmYXVsdElzb2xhdGVkVnBjUHJvcHMgfSBmcm9tICcuLi9saWIvdnBjLWRlZmF1bHRzJztcbmltcG9ydCB7IG92ZXJyaWRlUHJvcHMsIGFkZENmblN1cHByZXNzUnVsZXMgfSBmcm9tIFwiLi4vbGliL3V0aWxzXCI7XG5pbXBvcnQgKiBhcyBkZWZhdWx0cyBmcm9tICcuLi9pbmRleCc7XG5pbXBvcnQgeyBjcmVhdGVDYWNoZVN1Ym5ldEdyb3VwIH0gZnJvbSBcIi4uL2xpYi9lbGFzdGljYWNoZS1oZWxwZXJcIjtcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgKiBhcyBjYWNoZSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZWxhc3RpY2FjaGUnO1xuaW1wb3J0ICogYXMgZWMyIGZyb20gJ2F3cy1jZGstbGliL2F3cy1lYzInO1xuaW1wb3J0ICogYXMgYWNtIGZyb20gJ2F3cy1jZGstbGliL2F3cy1jZXJ0aWZpY2F0ZW1hbmFnZXInO1xuaW1wb3J0IHsgQ2ZuRnVuY3Rpb24gfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWxhbWJkYVwiO1xuaW1wb3J0IHsgR2V0RGVmYXVsdENhY2hlUG9ydCB9IGZyb20gXCIuLi9saWIvZWxhc3RpY2FjaGUtZGVmYXVsdHNcIjtcbmltcG9ydCB7IE1hdGNoLCBUZW1wbGF0ZSB9IGZyb20gJ2F3cy1jZGstbGliL2Fzc2VydGlvbnMnO1xuaW1wb3J0ICogYXMgbGFtYmRhIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtbGFtYmRhXCI7XG5pbXBvcnQgKiBhcyBzZm4gZnJvbSBcImF3cy1jZGstbGliL2F3cy1zdGVwZnVuY3Rpb25zXCI7XG5pbXBvcnQgKiBhcyBzZnRhc2tzIGZyb20gXCJhd3MtY2RrLWxpYi9hd3Mtc3RlcGZ1bmN0aW9ucy10YXNrc1wiO1xuaW1wb3J0ICogYXMgYXBpIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtYXBpZ2F0ZXdheVwiO1xuXG5leHBvcnQgY29uc3QgZmFrZUVjclJlcG9Bcm4gPSAnYXJuOmF3czplY3I6dXMtZWFzdC0xOjEyMzQ1Njc4OTAxMjpyZXBvc2l0b3J5L2Zha2UtcmVwbyc7XG5cbi8vIENyZWF0ZXMgYSBidWNrZXQgdXNlZCBmb3IgdGVzdGluZyAtIG1pbmltYWwgcHJvcGVydGllcywgZGVzdHJveWVkIGFmdGVyIHRlc3RcbmV4cG9ydCBmdW5jdGlvbiBDcmVhdGVTY3JhcEJ1Y2tldChzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wcz86IEJ1Y2tldFByb3BzIHwgYW55KSB7XG5cbiAgaWYgKHByb3BzPy5zZXJ2ZXJBY2Nlc3NMb2dzQnVja2V0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiRG9uJ3QgdHJ5IHRvIHNlbmQgYSBsb2cgYnVja2V0IHRvIENyZWF0ZVNjcmFwQnVja2V0XCIpO1xuICB9XG5cbiAgLy8gQmFzaWMgcHJvcHMgZm9yIHNjcmFwIGFuZCBsb2cgYnVja2V0c1xuICBjb25zdCBkZWZhdWx0UHJvcHM6IEJ1Y2tldFByb3BzID0ge1xuICAgIHZlcnNpb25lZDogdHJ1ZSxcbiAgICByZW1vdmFsUG9saWN5OiBSZW1vdmFsUG9saWN5LkRFU1RST1ksXG4gICAgYXV0b0RlbGV0ZU9iamVjdHM6IHRydWUsXG4gICAgZW5jcnlwdGlvbjogQnVja2V0RW5jcnlwdGlvbi5TM19NQU5BR0VELFxuICAgIGVuZm9yY2VTU0w6IHRydWVcbiAgfTtcblxuICAvLyBDcmVhdGUgYmFzaWMgbG9nIGJ1Y2tldFxuICBjb25zdCBsb2dCdWNrZXQgPSBuZXcgQnVja2V0KHNjb3BlLCBgJHtpZH1Mb2dgLCBkZWZhdWx0UHJvcHMpO1xuXG4gIC8vIENvbWJpbmUgYmFzaWMgcHJvcHMgd2l0aCBzcGVjaWFsIHByb3BzIGZyb20gdGVzdCBjbGllbnRcbiAgbGV0IHN5bnRoZXNpemVkUHJvcHM6IEJ1Y2tldFByb3BzO1xuICBpZiAocHJvcHMpIHtcbiAgICBzeW50aGVzaXplZFByb3BzID0gb3ZlcnJpZGVQcm9wcyhkZWZhdWx0UHJvcHMsIHByb3BzKTtcbiAgfSBlbHNlIHtcbiAgICBzeW50aGVzaXplZFByb3BzID0gZGVmYXVsdFByb3BzO1xuICB9XG5cbiAgLy8gRmluYWxseSAtIHNldCB1cCBsb2dnaW5nIGZvciB0aGUgc2NyYXAgYnVja2V0XG4gIGNvbnN0IGZpbmFsUHJvcHMgPSBvdmVycmlkZVByb3BzKHN5bnRoZXNpemVkUHJvcHMsIHsgc2VydmVyQWNjZXNzTG9nc0J1Y2tldDogbG9nQnVja2V0IH0pO1xuXG4gIGNvbnN0IHNjcmlwdEJ1Y2tldCA9IG5ldyBCdWNrZXQoXG4gICAgc2NvcGUsXG4gICAgaWQsXG4gICAgZmluYWxQcm9wc1xuICApO1xuXG4gIGFkZENmblN1cHByZXNzUnVsZXMobG9nQnVja2V0LCBbXG4gICAge1xuICAgICAgaWQ6IFwiVzM1XCIsXG4gICAgICByZWFzb246IFwiVGhpcyBpcyBhIGxvZyBidWNrZXRcIixcbiAgICB9XG4gIF0pO1xuXG4gIHJldHVybiBzY3JpcHRCdWNrZXQ7XG59XG5cbi8qKlxuICogQHN1bW1hcnkgQ3JlYXRlcyBhIHN0YWNrIG5hbWUgZm9yIEludGVncmF0aW9uIHRlc3RzXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZW5hbWUgLSB0aGUgZmlsZW5hbWUgb2YgdGhlIGludGVnIHRlc3RcbiAqIEByZXR1cm5zIHtzdHJpbmd9IC0gYSBzdHJpbmcgd2l0aCBjdXJyZW50IGZpbGVuYW1lIGFmdGVyIHJlbW92aW5nIGFueXRoaW5nIGJlZm9yZSB0aGUgcHJlZml4ICcuJyBhbmQgc3VmZml4ICcuanMnXG4gKiBlLmcuICdpbnRlZy5hcGlnYXRld2F5LWR5bmFtb2RiLUNSVUQuanMnIHdpbGwgcmV0dXJuICdhcGlnYXRld2F5LWR5bmFtb2RiLUNSVUQnXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZUludGVnU3RhY2tOYW1lKGZpbGVuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBmaWxlID0gcGF0aC5iYXNlbmFtZShmaWxlbmFtZSwgcGF0aC5leHRuYW1lKGZpbGVuYW1lKSk7XG4gIGNvbnN0IHN0YWNrbmFtZSA9IGZpbGUuc2xpY2UoZmlsZS5sYXN0SW5kZXhPZignLicpICsgMSkucmVwbGFjZSgvXy9nLCAnLScpO1xuICByZXR1cm4gc3RhY2tuYW1lO1xufVxuXG4vLyBIZWxwZXIgRnVuY3Rpb25zXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGVzdFZwYyhzdGFjazogU3RhY2ssIHB1YmxpY0ZhY2luZzogYm9vbGVhbiA9IHRydWUsIHVzZXJWcGNQcm9wcz86IGVjMi5WcGNQcm9wcykge1xuICByZXR1cm4gYnVpbGRWcGMoc3RhY2ssIHtcbiAgICBkZWZhdWx0VnBjUHJvcHM6IHB1YmxpY0ZhY2luZyA/XG4gICAgICBEZWZhdWx0UHVibGljUHJpdmF0ZVZwY1Byb3BzKCkgOlxuICAgICAgRGVmYXVsdElzb2xhdGVkVnBjUHJvcHMoKSxcbiAgICBjb25zdHJ1Y3RWcGNQcm9wczoge1xuICAgICAgZW5hYmxlRG5zSG9zdG5hbWVzOiB0cnVlLFxuICAgICAgZW5hYmxlRG5zU3VwcG9ydDogdHJ1ZSxcbiAgICAgIGlwQWRkcmVzc2VzOiBlYzIuSXBBZGRyZXNzZXMuY2lkcignMTcyLjE2OC4wLjAvMTYnKSxcbiAgICB9LFxuICAgIHVzZXJWcGNQcm9wc1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEZha2VDZXJ0aWZpY2F0ZShzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nKTogYWNtLklDZXJ0aWZpY2F0ZSB7XG4gIHJldHVybiBhY20uQ2VydGlmaWNhdGUuZnJvbUNlcnRpZmljYXRlQXJuKFxuICAgIHNjb3BlLFxuICAgIGlkLFxuICAgIFwiYXJuOmF3czphY206dXMtZWFzdC0xOjEyMzQ1Njc4OTAxMjpjZXJ0aWZpY2F0ZS8xMTExMjIyMi0zMzMzLTEyMzQtMTIzNC0xMjM0NTY3ODkwMTJcIlxuICApO1xufVxuXG4vLyBDcmVhdGVzIGEgYnVja2V0IHVzZWQgZm9yIHRlc3RpbmcgLSBtaW5pbWFsIHByb3BlcnRpZXMsIGRlc3Ryb3llZCBhZnRlciB0ZXN0XG5leHBvcnQgZnVuY3Rpb24gQ3JlYXRlVGVzdFN0YXRlTWFjaGluZURlZmluaXRpb25Cb2R5KHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcpOiBzZm4uRGVmaW5pdGlvbkJvZHkge1xuXG4gIGNvbnN0IHNtU3RlcCA9IG5ldyBsYW1iZGEuRnVuY3Rpb24oc2NvcGUsIGBsYW1iZGEke2lkfWAsIHtcbiAgICBjb2RlOiBuZXcgbGFtYmRhLklubGluZUNvZGUoXG4gICAgICBcImV4cG9ydHMuaGFuZGxlciA9IGFzeW5jIChldmVudCkgPT4gY29uc29sZS5sb2coZXZlbnQpXCJcbiAgICApLFxuICAgIHJ1bnRpbWU6IGxhbWJkYS5SdW50aW1lLk5PREVKU18yMF9YLFxuICAgIGhhbmRsZXI6IFwiaW5kZXguaGFuZGxlclwiLFxuICB9KTtcblxuICBjb25zdCB0YXNrID0gbmV3IHNmdGFza3MuTGFtYmRhSW52b2tlKHNjb3BlLCBgdGFzayR7aWR9YCwge1xuICAgIGxhbWJkYUZ1bmN0aW9uOiBzbVN0ZXAsXG4gIH0pO1xuXG4gIFN1cHByZXNzQ2ZuTmFnTGFtYmRhV2FybmluZ3MoU3RhY2sub2Yoc2NvcGUpKTtcblxuICByZXR1cm4gc2ZuLkRlZmluaXRpb25Cb2R5LmZyb21DaGFpbmFibGUodGFzayk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdXBwcmVzc0N1c3RvbUhhbmRsZXJDZm5OYWdXYXJuaW5ncyhzdGFjazogU3RhY2ssIGhhbmRsZXJJZDogc3RyaW5nKSB7XG4gIHN0YWNrLm5vZGUuY2hpbGRyZW4uZm9yRWFjaChjaGlsZCA9PiB7XG4gICAgaWYgKGNoaWxkLm5vZGUuaWQgPT09IGhhbmRsZXJJZCkge1xuICAgICAgY29uc3QgaGFuZGxlckZ1bmN0aW9uID0gY2hpbGQubm9kZS5maW5kQ2hpbGQoJ0hhbmRsZXInKSBhcyBDZm5GdW5jdGlvbjtcbiAgICAgIGFkZENmblN1cHByZXNzUnVsZXMoaGFuZGxlckZ1bmN0aW9uLCBbeyBpZDogXCJXNThcIiwgcmVhc29uOiBcIkNESyBnZW5lcmF0ZWQgY3VzdG9tIHJlc291cmNlXCIgfV0pO1xuICAgICAgYWRkQ2ZuU3VwcHJlc3NSdWxlcyhoYW5kbGVyRnVuY3Rpb24sIFt7IGlkOiBcIlc4OVwiLCByZWFzb246IFwiQ0RLIGdlbmVyYXRlZCBjdXN0b20gcmVzb3VyY2VcIiB9XSk7XG4gICAgICBhZGRDZm5TdXBwcmVzc1J1bGVzKGhhbmRsZXJGdW5jdGlvbiwgW3sgaWQ6IFwiVzkyXCIsIHJlYXNvbjogXCJDREsgZ2VuZXJhdGVkIGN1c3RvbSByZXNvdXJjZVwiIH1dKTtcbiAgICB9XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gQ3JlYXRlVGVzdENhY2hlKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHZwYzogZWMyLklWcGMsIHBvcnQ/OiBudW1iZXIpIHtcbiAgY29uc3QgY2FjaGVQb3J0ID0gcG9ydCA/PyBHZXREZWZhdWx0Q2FjaGVQb3J0KCk7XG5cbiAgLy8gQ3JlYXRlIHRoZSBzdWJuZXQgZ3JvdXAgZnJvbSBhbGwgdGhlIGlzb2xhdGVkIHN1Ym5ldHMgaW4gdGhlIFZQQ1xuICBjb25zdCBzdWJuZXRHcm91cCA9IGNyZWF0ZUNhY2hlU3VibmV0R3JvdXAoc2NvcGUsIHZwYywgaWQpO1xuICBjb25zdCBlbXB0eVNHID0gbmV3IGVjMi5TZWN1cml0eUdyb3VwKHNjb3BlLCBgJHtpZH0tY2FjaGVzZ2AsIHtcbiAgICB2cGMsXG4gICAgYWxsb3dBbGxPdXRib3VuZDogdHJ1ZSxcbiAgfSk7XG4gIGFkZENmblN1cHByZXNzUnVsZXMoZW1wdHlTRywgW3sgaWQ6IFwiVzQwXCIsIHJlYXNvbjogXCJUZXN0IFJlc291cmNlXCIgfV0pO1xuICBhZGRDZm5TdXBwcmVzc1J1bGVzKGVtcHR5U0csIFt7IGlkOiBcIlc1XCIsIHJlYXNvbjogXCJUZXN0IFJlc291cmNlXCIgfV0pO1xuICBhZGRDZm5TdXBwcmVzc1J1bGVzKGVtcHR5U0csIFt7IGlkOiBcIlczNlwiLCByZWFzb246IFwiVGVzdCBSZXNvdXJjZVwiIH1dKTtcblxuICBjb25zdCBjYWNoZVByb3BzID0ge1xuICAgIGNsdXN0ZXJOYW1lOiBgJHtpZH0tY2RrLWNsdXN0ZXJgLFxuICAgIGNhY2hlTm9kZVR5cGU6IFwiY2FjaGUudDMubWVkaXVtXCIsXG4gICAgZW5naW5lOiBcIm1lbWNhY2hlZFwiLFxuICAgIG51bUNhY2hlTm9kZXM6IDIsXG4gICAgcG9ydDogY2FjaGVQb3J0LFxuICAgIGF6TW9kZTogXCJjcm9zcy1helwiLFxuICAgIHZwY1NlY3VyaXR5R3JvdXBJZHM6IFtlbXB0eVNHLnNlY3VyaXR5R3JvdXBJZF0sXG4gICAgY2FjaGVTdWJuZXRHcm91cE5hbWU6IHN1Ym5ldEdyb3VwLmNhY2hlU3VibmV0R3JvdXBOYW1lLFxuICB9O1xuXG4gIGNvbnN0IG5ld0NhY2hlID0gbmV3IGNhY2hlLkNmbkNhY2hlQ2x1c3RlcihcbiAgICBzY29wZSxcbiAgICBgJHtpZH0tY2x1c3RlcmAsXG4gICAgY2FjaGVQcm9wc1xuICApO1xuICBuZXdDYWNoZS5hZGREZXBlbmRlbmN5KHN1Ym5ldEdyb3VwKTtcbiAgcmV0dXJuIG5ld0NhY2hlO1xufVxuXG4vKipcbiAqIEFzc2VydHMgdGhhdCBhIEtNUyBrZXkgd2l0aCBhIHNwZWNpZmljIGRlc2NyaXB0aW9uIGV4aXN0cyBvbiBhIHJlc291cmNlXG4gKlxuICogQHBhcmFtIHN0YWNrIFRoZSBDbG91ZEZvcm1hdGlvbiBTdGFjayB0aGF0IGNvbnRhaW5zIHRoZSB0byB2YWxpZGF0ZS5cbiAqIEBwYXJhbSBwYXJlbnRSZXNvdXJjZVR5cGUgVGhlIHR5cGUgb2YgQ2xvdWRGb3JtYXRpb24gUmVzb3VyY2UgdGhhdCBzaG91bGQgaGF2ZSB0aGUga2V5IHNldCBvbiBpdCwgZS5nLiwgYEFXUzo6U05TOjpUb3BpY2AsIGV0Yy4uLlxuICogQHBhcmFtIGRlc2NyaXB0aW9uIFRoZSB2YWx1ZSBvZiB0aGUgRGVzY3JpcHRpb24gcHJvcGVydHkgb24gdGhlIEtNUyBLZXlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4cGVjdEttc0tleUF0dGFjaGVkVG9Db3JyZWN0UmVzb3VyY2Uoc3RhY2s6IFN0YWNrLCBwYXJlbnRSZXNvdXJjZVR5cGU6IHN0cmluZywga2V5RGVzY3JpcHRpb246IHN0cmluZykge1xuICBjb25zdCB0ZW1wbGF0ZSA9IFRlbXBsYXRlLmZyb21TdGFjayhzdGFjayk7XG4gIGNvbnN0IHJlc291cmNlID0gdGVtcGxhdGUuZmluZFJlc291cmNlcygnQVdTOjpLTVM6OktleScsIHtcbiAgICBQcm9wZXJ0aWVzOiB7XG4gICAgICBEZXNjcmlwdGlvbjogTWF0Y2guZXhhY3Qoa2V5RGVzY3JpcHRpb24pXG4gICAgfVxuICB9KTtcblxuICBjb25zdCBbbG9naWNhbElkXSA9IE9iamVjdC5rZXlzKHJlc291cmNlKTtcbiAgVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrKS5oYXNSZXNvdXJjZVByb3BlcnRpZXMocGFyZW50UmVzb3VyY2VUeXBlLCB7XG4gICAgS21zTWFzdGVyS2V5SWQ6IHtcbiAgICAgIFwiRm46OkdldEF0dFwiOiBbXG4gICAgICAgIGxvZ2ljYWxJZCxcbiAgICAgICAgXCJBcm5cIlxuICAgICAgXVxuICAgIH1cbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHBlY3ROb25leGlzdGVuY2Uoc3RhY2s6IFN0YWNrLCB0eXBlOiBzdHJpbmcsIHByb3BzOiBvYmplY3QpIHtcbiAgY29uc3Qgc2hvdWxkRmluZE5vdGhpbmcgPSBUZW1wbGF0ZS5mcm9tU3RhY2soc3RhY2spLmZpbmRSZXNvdXJjZXModHlwZSwgcHJvcHMpO1xuICBleHBlY3QoT2JqZWN0LmtleXMoc2hvdWxkRmluZE5vdGhpbmcpLmxlbmd0aCkudG9FcXVhbCgwKTtcbn1cblxuLy8gcHJpdmF0ZSBoZWxwZXIgY2xhc3MgdG8gc3VwcHJlc3MgdGhlIHN0YW5kYXJkIGNmbiBuYWcgd2FybmluZ3MgZm9yIGxhbWJkYSBmdW5jdGlvbnMgdXNlZCBpbiBpbnRlZyB0ZXN0c1xuY2xhc3MgQ2ZuTmFnTGFtYmRhQXNwZWN0IGltcGxlbWVudHMgSUFzcGVjdCB7XG4gIHB1YmxpYyB2aXNpdChub2RlOiBJQ29uc3RydWN0KTogdm9pZCB7XG4gICAgY29uc3QgcmVzb3VyY2UgPSBub2RlIGFzIENmblJlc291cmNlO1xuICAgIGlmIChyZXNvdXJjZS5jZm5SZXNvdXJjZVR5cGUgPT09ICdBV1M6OkxhbWJkYTo6RnVuY3Rpb24nKSB7XG4gICAgICBhZGRDZm5TdXBwcmVzc1J1bGVzKHJlc291cmNlLCBbXG4gICAgICAgIHsgaWQ6ICdXNTgnLCByZWFzb246ICdUaGlzIExhbWJkYSBGdW5jdGlvbiBpcyBjcmVhdGVkIGZvciBpbnRlZ3JhdGlvbiB0ZXN0aW5nIHB1cnBvc2VzIG9ubHkgYW5kIGlzIG5vdCBwYXJ0IG9mIGFuIGFjdHVhbCBjb25zdHJ1Y3QnIH0sXG4gICAgICAgIHsgaWQ6ICdXODknLCByZWFzb246ICdUaGlzIExhbWJkYSBGdW5jdGlvbiBpcyBjcmVhdGVkIGZvciBpbnRlZ3JhdGlvbiB0ZXN0aW5nIHB1cnBvc2VzIG9ubHkgYW5kIGlzIG5vdCBwYXJ0IG9mIGFuIGFjdHVhbCBjb25zdHJ1Y3QnIH0sXG4gICAgICAgIHsgaWQ6ICdXOTInLCByZWFzb246ICdUaGlzIExhbWJkYSBGdW5jdGlvbiBpcyBjcmVhdGVkIGZvciBpbnRlZ3JhdGlvbiB0ZXN0aW5nIHB1cnBvc2VzIG9ubHkgYW5kIGlzIG5vdCBwYXJ0IG9mIGFuIGFjdHVhbCBjb25zdHJ1Y3QnIH1cbiAgICAgIF0pO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gQ3JlYXRlVGVzdEFwaShzdGFjazogU3RhY2ssIGlkOiBzdHJpbmcpOiBhcGkuTGFtYmRhUmVzdEFwaSB7XG4gIGNvbnN0IGxhbWJkYUZ1bmN0aW9uID0gbmV3IGxhbWJkYS5GdW5jdGlvbihzdGFjaywgYCR7aWR9RnVuY3Rpb25gLCB7XG4gICAgY29kZTogbGFtYmRhLkNvZGUuZnJvbUFzc2V0KGAke19fZGlybmFtZX0vbGFtYmRhYCksXG4gICAgcnVudGltZTogZGVmYXVsdHMuQ09NTUVSQ0lBTF9SRUdJT05fTEFNQkRBX05PREVfUlVOVElNRSxcbiAgICBoYW5kbGVyOiBcIi5oYW5kbGVyXCIsXG4gIH0pO1xuICBhZGRDZm5TdXBwcmVzc1J1bGVzKGxhbWJkYUZ1bmN0aW9uLCBbeyBpZDogXCJXNThcIiwgcmVhc29uOiBcIlRlc3QgUmVzb3VyY2VcIiB9XSk7XG4gIGFkZENmblN1cHByZXNzUnVsZXMobGFtYmRhRnVuY3Rpb24sIFt7IGlkOiBcIlc4OVwiLCByZWFzb246IFwiVGVzdCBSZXNvdXJjZVwiIH1dKTtcbiAgYWRkQ2ZuU3VwcHJlc3NSdWxlcyhsYW1iZGFGdW5jdGlvbiwgW3sgaWQ6IFwiVzkyXCIsIHJlYXNvbjogXCJUZXN0IFJlc291cmNlXCIgfV0pO1xuXG4gIGNvbnN0IHJlc3RBcGkgPSBuZXcgYXBpLkxhbWJkYVJlc3RBcGkoc3RhY2ssIGAke2lkfUFwaWAsIHtcbiAgICBoYW5kbGVyOiBsYW1iZGFGdW5jdGlvbixcbiAgICBkZWZhdWx0TWV0aG9kT3B0aW9uczoge1xuICAgICAgYXV0aG9yaXphdGlvblR5cGU6IGFwaS5BdXRob3JpemF0aW9uVHlwZS5DVVNUT00sXG4gICAgICBhdXRob3JpemVyOiBDcmVhdGVBcGlBdXRob3JpemVyKHN0YWNrLCBgJHtpZH0tYXV0aG9yaXplcmApXG4gICAgfVxuICB9KTtcblxuICBjb25zdCBuZXdEZXBsb3ltZW50ID0gcmVzdEFwaS5sYXRlc3REZXBsb3ltZW50O1xuICBpZiAobmV3RGVwbG95bWVudCkge1xuICAgIGFkZENmblN1cHByZXNzUnVsZXMobmV3RGVwbG95bWVudCwgW1xuICAgICAgeyBpZDogXCJXNjhcIiwgcmVhc29uOiBcIlRlc3QgUmVzb3VyY2VcIiB9LFxuICAgIF0pO1xuICB9XG5cbiAgY29uc3QgbmV3TWV0aG9kID0gcmVzdEFwaS5tZXRob2RzWzBdO1xuICBhZGRDZm5TdXBwcmVzc1J1bGVzKG5ld01ldGhvZCwgW3sgaWQ6IFwiVzU5XCIsIHJlYXNvbjogXCJUZXN0IFJlc291cmNlXCIgfV0pO1xuICBjb25zdCBuZXdNZXRob2RUd28gPSByZXN0QXBpLm1ldGhvZHNbMV07XG4gIGFkZENmblN1cHByZXNzUnVsZXMobmV3TWV0aG9kVHdvLCBbeyBpZDogXCJXNTlcIiwgcmVhc29uOiBcIlRlc3QgUmVzb3VyY2VcIiB9XSk7XG5cbiAgY29uc3QgbmV3U3RhZ2UgPSByZXN0QXBpLmRlcGxveW1lbnRTdGFnZTtcbiAgYWRkQ2ZuU3VwcHJlc3NSdWxlcyhuZXdTdGFnZSwgW3sgaWQ6IFwiVzY0XCIsIHJlYXNvbjogXCJUZXN0IFJlc291cmNlXCIgfV0pO1xuICBhZGRDZm5TdXBwcmVzc1J1bGVzKG5ld1N0YWdlLCBbeyBpZDogXCJXNjlcIiwgcmVhc29uOiBcIlRlc3QgUmVzb3VyY2VcIiB9XSk7XG5cbiAgcmV0dXJuIHJlc3RBcGk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBDcmVhdGVBcGlBdXRob3JpemVyKHN0YWNrOiBTdGFjaywgaWQ6IHN0cmluZyk6IGFwaS5JQXV0aG9yaXplciB7XG4gIGNvbnN0IGF1dGhGbiA9IG5ldyBsYW1iZGEuRnVuY3Rpb24oc3RhY2ssIGAke2lkfUF1dGhGdW5jdGlvbmAsIHtcbiAgICBjb2RlOiBsYW1iZGEuQ29kZS5mcm9tQXNzZXQoYCR7X19kaXJuYW1lfS9sYW1iZGFgKSxcbiAgICBydW50aW1lOiBkZWZhdWx0cy5DT01NRVJDSUFMX1JFR0lPTl9MQU1CREFfTk9ERV9SVU5USU1FLFxuICAgIGhhbmRsZXI6IFwiLmhhbmRsZXJcIixcbiAgfSk7XG4gIGFkZENmblN1cHByZXNzUnVsZXMoYXV0aEZuLCBbeyBpZDogXCJXNThcIiwgcmVhc29uOiBcIlRlc3QgUmVzb3VyY2VcIiB9XSk7XG4gIGFkZENmblN1cHByZXNzUnVsZXMoYXV0aEZuLCBbeyBpZDogXCJXODlcIiwgcmVhc29uOiBcIlRlc3QgUmVzb3VyY2VcIiB9XSk7XG4gIGFkZENmblN1cHByZXNzUnVsZXMoYXV0aEZuLCBbeyBpZDogXCJXOTJcIiwgcmVhc29uOiBcIlRlc3QgUmVzb3VyY2VcIiB9XSk7XG5cbiAgY29uc3QgYXV0aG9yaXplciA9IG5ldyBhcGkuUmVxdWVzdEF1dGhvcml6ZXIoc3RhY2ssIGlkLCB7XG4gICAgaGFuZGxlcjogYXV0aEZuLFxuICAgIGlkZW50aXR5U291cmNlczogW2FwaS5JZGVudGl0eVNvdXJjZS5oZWFkZXIoJ0F1dGhvcml6YXRpb24nKV1cbiAgfSk7XG5cbiAgcmV0dXJuIGF1dGhvcml6ZXI7XG59XG5cbi8vIENyZWF0ZSBhIHNob3J0LCB1bmlxdWUgdG8gdGhpcyBzdGFjayBuYW1lXG4vLyB0ZWNobmljYWxseSB0aGlzIGlzIG5vdCAxMDAlIE9LLCBhcyBpdCBvbmx5IHVzZXMgYSBwb3J0aW9uIG9mIHRoZVxuLy8gc3RhY2sgZ3VpZCAtIGJ1dCBpdCdzIGZvciB0ZXN0cyBvbmx5IHNvIGlmIHRoZSBsYXN0IHNlZ21lbnQgb2YgMiBzdGFjayBndWlkcyBjb2xsaWRlIHNvbWVkYXlcbi8vIChWRVJZIHVubGlrZWx5KSwganVzdCBydW5uaW5nIGFnYWluIHNob3VsZCB0YWtlIGNhcmUgb2YgaXQuXG5leHBvcnQgZnVuY3Rpb24gQ3JlYXRlU2hvcnRVbmlxdWVUZXN0TmFtZShzdHViOiBzdHJpbmcpIHtcbiAgY29uc3Qgc3RhY2tHdWlkID0gRm4uc2VsZWN0KDIsIEZuLnNwbGl0KCcvJywgYCR7QXdzLlNUQUNLX0lEfWApKTtcbiAgY29uc3QgZ3VpZFBvcnRpb24gPSBGbi5zZWxlY3QoNCwgRm4uc3BsaXQoJy0nLCBzdGFja0d1aWQpKTtcbiAgcmV0dXJuIEZuLmpvaW4oXCItXCIsIFtzdHViLCBndWlkUG9ydGlvbl0pO1xufVxuXG4vKipcbiAqIFVzZWQgdG8gc3VwcHJlc3MgY2ZuIG5hZyBXNTgsIFc4OSwgYW5kIFc5MiBydWxlcyBvbiBsYW1iZGEgaW50ZWdyYXRpb24gdGVzdCByZXNvdXJjZXMuXG4gKlxuICogQHBhcmFtIHN0YWNrIC0gVGhlIHN0YWNrIHRvIHN1cHByZXNzIGNmbiBuYWcgbGFtYmRhIHJ1bGVzIG9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBTdXBwcmVzc0Nmbk5hZ0xhbWJkYVdhcm5pbmdzKHN0YWNrOiBTdGFjaykge1xuICBBc3BlY3RzLm9mKHN0YWNrKS5hZGQobmV3IENmbk5hZ0xhbWJkYUFzcGVjdCgpKTtcbn1cbiJdfQ==
261
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC1oZWxwZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ0ZXN0LWhlbHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7O0dBV0c7OztBQUlILCtDQUEyRTtBQUMzRSw2Q0FBMkY7QUFDM0Ysa0RBQTZDO0FBQzdDLHNEQUE0RjtBQUM1Rix3Q0FBa0U7QUFDbEUscUNBQXFDO0FBQ3JDLGtFQUFtRTtBQUNuRSw2QkFBNkI7QUFDN0IscURBQXFEO0FBQ3JELDJDQUEyQztBQUMzQywwREFBMEQ7QUFFMUQsc0VBQWtFO0FBQ2xFLHVEQUF5RDtBQUN6RCxpREFBaUQ7QUFDakQscURBQXFEO0FBQ3JELCtEQUErRDtBQUMvRCxrREFBa0Q7QUFFckMsUUFBQSxjQUFjLEdBQUcseURBQXlELENBQUM7QUFFeEYsK0VBQStFO0FBQy9FLFNBQWdCLGlCQUFpQixDQUFDLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQXlCO0lBRXZGLElBQUksS0FBSyxFQUFFLHNCQUFzQixFQUFFLENBQUM7UUFDbEMsTUFBTSxJQUFJLEtBQUssQ0FBQyxxREFBcUQsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFFRCx3Q0FBd0M7SUFDeEMsTUFBTSxZQUFZLEdBQWdCO1FBQ2hDLFNBQVMsRUFBRSxJQUFJO1FBQ2YsYUFBYSxFQUFFLDJCQUFhLENBQUMsT0FBTztRQUNwQyxpQkFBaUIsRUFBRSxJQUFJO1FBQ3ZCLFVBQVUsRUFBRSx5QkFBZ0IsQ0FBQyxVQUFVO1FBQ3ZDLFVBQVUsRUFBRSxJQUFJO0tBQ2pCLENBQUM7SUFFRiwwQkFBMEI7SUFDMUIsTUFBTSxTQUFTLEdBQUcsSUFBSSxlQUFNLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFFOUQsMERBQTBEO0lBQzFELElBQUksZ0JBQTZCLENBQUM7SUFDbEMsSUFBSSxLQUFLLEVBQUUsQ0FBQztRQUNWLGdCQUFnQixHQUFHLElBQUEscUJBQWEsRUFBQyxZ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QkFBTyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxrQkFBa0IsRUFBRSxDQUFDLENBQUM7QUFDbEQsQ0FBQztBQUZELG9FQUVDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiAgQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIikuIFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2VcbiAqICB3aXRoIHRoZSBMaWNlbnNlLiBBIGNvcHkgb2YgdGhlIExpY2Vuc2UgaXMgbG9jYXRlZCBhdFxuICpcbiAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogIG9yIGluIHRoZSAnbGljZW5zZScgZmlsZSBhY2NvbXBhbnlpbmcgdGhpcyBmaWxlLiBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gJ0FTIElTJyBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTXG4gKiAgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnNcbiAqICBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuLy8gSW1wb3J0c1xuaW1wb3J0IHsgQ29uc3RydWN0LCBJQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBCdWNrZXQsIEJ1Y2tldFByb3BzLCBCdWNrZXRFbmNyeXB0aW9uIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1zM1wiO1xuaW1wb3J0IHsgQ2ZuUmVzb3VyY2UsIFJlbW92YWxQb2xpY3ksIFN0YWNrLCBBc3BlY3RzLCBJQXNwZWN0LCBBd3MsIEZuIH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQgeyBidWlsZFZwYyB9IGZyb20gJy4uL2xpYi92cGMtaGVscGVyJztcbmltcG9ydCB7IERlZmF1bHRQdWJsaWNQcml2YXRlVnBjUHJvcHMsIERlZmF1bHRJc29sYXRlZFZwY1Byb3BzIH0gZnJvbSAnLi4vbGliL3ZwYy1kZWZhdWx0cyc7XG5pbXBvcnQgeyBvdmVycmlkZVByb3BzLCBhZGRDZm5TdXBwcmVzc1J1bGVzIH0gZnJvbSBcIi4uL2xpYi91dGlsc1wiO1xuaW1wb3J0ICogYXMgZGVmYXVsdHMgZnJvbSAnLi4vaW5kZXgnO1xuaW1wb3J0IHsgY3JlYXRlQ2FjaGVTdWJuZXRHcm91cCB9IGZyb20gXCIuLi9saWIvZWxhc3RpY2FjaGUtaGVscGVyXCI7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0ICogYXMgY2FjaGUgZnJvbSAnYXdzLWNkay1saWIvYXdzLWVsYXN0aWNhY2hlJztcbmltcG9ydCAqIGFzIGVjMiBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZWMyJztcbmltcG9ydCAqIGFzIGFjbSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY2VydGlmaWNhdGVtYW5hZ2VyJztcbmltcG9ydCB7IENmbkZ1bmN0aW9uIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1sYW1iZGFcIjtcbmltcG9ydCB7IEdldERlZmF1bHRDYWNoZVBvcnQgfSBmcm9tIFwiLi4vbGliL2VsYXN0aWNhY2hlLWRlZmF1bHRzXCI7XG5pbXBvcnQgeyBNYXRjaCwgVGVtcGxhdGUgfSBmcm9tICdhd3MtY2RrLWxpYi9hc3NlcnRpb25zJztcbmltcG9ydCAqIGFzIGxhbWJkYSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWxhbWJkYVwiO1xuaW1wb3J0ICogYXMgc2ZuIGZyb20gXCJhd3MtY2RrLWxpYi9hd3Mtc3RlcGZ1bmN0aW9uc1wiO1xuaW1wb3J0ICogYXMgc2Z0YXNrcyBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXN0ZXBmdW5jdGlvbnMtdGFza3NcIjtcbmltcG9ydCAqIGFzIGFwaSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWFwaWdhdGV3YXlcIjtcblxuZXhwb3J0IGNvbnN0IGZha2VFY3JSZXBvQXJuID0gJ2Fybjphd3M6ZWNyOnVzLWVhc3QtMToxMjM0NTY3ODkwMTI6cmVwb3NpdG9yeS9mYWtlLXJlcG8nO1xuXG4vLyBDcmVhdGVzIGEgYnVja2V0IHVzZWQgZm9yIHRlc3RpbmcgLSBtaW5pbWFsIHByb3BlcnRpZXMsIGRlc3Ryb3llZCBhZnRlciB0ZXN0XG5leHBvcnQgZnVuY3Rpb24gQ3JlYXRlU2NyYXBCdWNrZXQoc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM/OiBCdWNrZXRQcm9wcyB8IGFueSkge1xuXG4gIGlmIChwcm9wcz8uc2VydmVyQWNjZXNzTG9nc0J1Y2tldCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkRvbid0IHRyeSB0byBzZW5kIGEgbG9nIGJ1Y2tldCB0byBDcmVhdGVTY3JhcEJ1Y2tldFwiKTtcbiAgfVxuXG4gIC8vIEJhc2ljIHByb3BzIGZvciBzY3JhcCBhbmQgbG9nIGJ1Y2tldHNcbiAgY29uc3QgZGVmYXVsdFByb3BzOiBCdWNrZXRQcm9wcyA9IHtcbiAgICB2ZXJzaW9uZWQ6IHRydWUsXG4gICAgcmVtb3ZhbFBvbGljeTogUmVtb3ZhbFBvbGljeS5ERVNUUk9ZLFxuICAgIGF1dG9EZWxldGVPYmplY3RzOiB0cnVlLFxuICAgIGVuY3J5cHRpb246IEJ1Y2tldEVuY3J5cHRpb24uUzNfTUFOQUdFRCxcbiAgICBlbmZvcmNlU1NMOiB0cnVlXG4gIH07XG5cbiAgLy8gQ3JlYXRlIGJhc2ljIGxvZyBidWNrZXRcbiAgY29uc3QgbG9nQnVja2V0ID0gbmV3IEJ1Y2tldChzY29wZSwgYCR7aWR9TG9nYCwgZGVmYXVsdFByb3BzKTtcblxuICAvLyBDb21iaW5lIGJhc2ljIHByb3BzIHdpdGggc3BlY2lhbCBwcm9wcyBmcm9tIHRlc3QgY2xpZW50XG4gIGxldCBzeW50aGVzaXplZFByb3BzOiBCdWNrZXRQcm9wcztcbiAgaWYgKHByb3BzKSB7XG4gICAgc3ludGhlc2l6ZWRQcm9wcyA9IG92ZXJyaWRlUHJvcHMoZGVmYXVsdFByb3BzLCBwcm9wcyk7XG4gIH0gZWxzZSB7XG4gICAgc3ludGhlc2l6ZWRQcm9wcyA9IGRlZmF1bHRQcm9wcztcbiAgfVxuXG4gIC8vIEZpbmFsbHkgLSBzZXQgdXAgbG9nZ2luZyBmb3IgdGhlIHNjcmFwIGJ1Y2tldFxuICBjb25zdCBmaW5hbFByb3BzID0gb3ZlcnJpZGVQcm9wcyhzeW50aGVzaXplZFByb3BzLCB7IHNlcnZlckFjY2Vzc0xvZ3NCdWNrZXQ6IGxvZ0J1Y2tldCB9KTtcblxuICBjb25zdCBzY3JpcHRCdWNrZXQgPSBuZXcgQnVja2V0KFxuICAgIHNjb3BlLFxuICAgIGlkLFxuICAgIGZpbmFsUHJvcHNcbiAgKTtcblxuICBhZGRDZm5TdXBwcmVzc1J1bGVzKGxvZ0J1Y2tldCwgW1xuICAgIHtcbiAgICAgIGlkOiBcIlczNVwiLFxuICAgICAgcmVhc29uOiBcIlRoaXMgaXMgYSBsb2cgYnVja2V0XCIsXG4gICAgfVxuICBdKTtcblxuICByZXR1cm4gc2NyaXB0QnVja2V0O1xufVxuXG4vKipcbiAqIEBzdW1tYXJ5IENyZWF0ZXMgYSBzdGFjayBuYW1lIGZvciBJbnRlZ3JhdGlvbiB0ZXN0c1xuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gdGhlIGZpbGVuYW1lIG9mIHRoZSBpbnRlZyB0ZXN0XG4gKiBAcmV0dXJucyB7c3RyaW5nfSAtIGEgc3RyaW5nIHdpdGggY3VycmVudCBmaWxlbmFtZSBhZnRlciByZW1vdmluZyBhbnl0aGluZyBiZWZvcmUgdGhlIHByZWZpeCAnLicgYW5kIHN1ZmZpeCAnLmpzJ1xuICogZS5nLiAnaW50ZWcuYXBpZ2F0ZXdheS1keW5hbW9kYi1DUlVELmpzJyB3aWxsIHJldHVybiAnYXBpZ2F0ZXdheS1keW5hbW9kYi1DUlVEJ1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVJbnRlZ1N0YWNrTmFtZShmaWxlbmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgZmlsZSA9IHBhdGguYmFzZW5hbWUoZmlsZW5hbWUsIHBhdGguZXh0bmFtZShmaWxlbmFtZSkpO1xuICBjb25zdCBzdGFja25hbWUgPSBmaWxlLnNsaWNlKGZpbGUubGFzdEluZGV4T2YoJy4nKSArIDEpLnJlcGxhY2UoL18vZywgJy0nKTtcbiAgcmV0dXJuIHN0YWNrbmFtZTtcbn1cblxuLy8gSGVscGVyIEZ1bmN0aW9uc1xuZXhwb3J0IGZ1bmN0aW9uIGdldFRlc3RWcGMoc3RhY2s6IFN0YWNrLCBwdWJsaWNGYWNpbmc6IGJvb2xlYW4gPSB0cnVlLCB1c2VyVnBjUHJvcHM/OiBlYzIuVnBjUHJvcHMpIHtcbiAgcmV0dXJuIGJ1aWxkVnBjKHN0YWNrLCB7XG4gICAgZGVmYXVsdFZwY1Byb3BzOiBwdWJsaWNGYWNpbmcgP1xuICAgICAgRGVmYXVsdFB1YmxpY1ByaXZhdGVWcGNQcm9wcygpIDpcbiAgICAgIERlZmF1bHRJc29sYXRlZFZwY1Byb3BzKCksXG4gICAgY29uc3RydWN0VnBjUHJvcHM6IHtcbiAgICAgIGVuYWJsZURuc0hvc3RuYW1lczogdHJ1ZSxcbiAgICAgIGVuYWJsZURuc1N1cHBvcnQ6IHRydWUsXG4gICAgICBpcEFkZHJlc3NlczogZWMyLklwQWRkcmVzc2VzLmNpZHIoJzE3Mi4xNjguMC4wLzE2JyksXG4gICAgfSxcbiAgICB1c2VyVnBjUHJvcHNcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGYWtlQ2VydGlmaWNhdGUoc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZyk6IGFjbS5JQ2VydGlmaWNhdGUge1xuICByZXR1cm4gYWNtLkNlcnRpZmljYXRlLmZyb21DZXJ0aWZpY2F0ZUFybihcbiAgICBzY29wZSxcbiAgICBpZCxcbiAgICBcImFybjphd3M6YWNtOnVzLWVhc3QtMToxMjM0NTY3ODkwMTI6Y2VydGlmaWNhdGUvMTExMTIyMjItMzMzMy0xMjM0LTEyMzQtMTIzNDU2Nzg5MDEyXCJcbiAgKTtcbn1cblxuLy8gQ3JlYXRlcyBhIGJ1Y2tldCB1c2VkIGZvciB0ZXN0aW5nIC0gbWluaW1hbCBwcm9wZXJ0aWVzLCBkZXN0cm95ZWQgYWZ0ZXIgdGVzdFxuZXhwb3J0IGZ1bmN0aW9uIENyZWF0ZVRlc3RTdGF0ZU1hY2hpbmVEZWZpbml0aW9uQm9keShzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nKTogc2ZuLkRlZmluaXRpb25Cb2R5IHtcblxuICBjb25zdCBzbVN0ZXAgPSBuZXcgbGFtYmRhLkZ1bmN0aW9uKHNjb3BlLCBgbGFtYmRhJHtpZH1gLCB7XG4gICAgY29kZTogbmV3IGxhbWJkYS5JbmxpbmVDb2RlKFxuICAgICAgXCJleHBvcnRzLmhhbmRsZXIgPSBhc3luYyAoZXZlbnQpID0+IGNvbnNvbGUubG9nKGV2ZW50KVwiXG4gICAgKSxcbiAgICBydW50aW1lOiBsYW1iZGEuUnVudGltZS5OT0RFSlNfMjBfWCxcbiAgICBoYW5kbGVyOiBcImluZGV4LmhhbmRsZXJcIixcbiAgfSk7XG5cbiAgY29uc3QgdGFzayA9IG5ldyBzZnRhc2tzLkxhbWJkYUludm9rZShzY29wZSwgYHRhc2ske2lkfWAsIHtcbiAgICBsYW1iZGFGdW5jdGlvbjogc21TdGVwLFxuICB9KTtcblxuICBTdXBwcmVzc0Nmbk5hZ0xhbWJkYVdhcm5pbmdzKFN0YWNrLm9mKHNjb3BlKSk7XG5cbiAgcmV0dXJuIHNmbi5EZWZpbml0aW9uQm9keS5mcm9tQ2hhaW5hYmxlKHRhc2spO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VwcHJlc3NDdXN0b21IYW5kbGVyQ2ZuTmFnV2FybmluZ3Moc3RhY2s6IFN0YWNrLCBoYW5kbGVySWQ6IHN0cmluZykge1xuICBzdGFjay5ub2RlLmNoaWxkcmVuLmZvckVhY2goY2hpbGQgPT4ge1xuICAgIGlmIChjaGlsZC5ub2RlLmlkID09PSBoYW5kbGVySWQpIHtcbiAgICAgIGNvbnN0IGhhbmRsZXJGdW5jdGlvbiA9IGNoaWxkLm5vZGUuZmluZENoaWxkKCdIYW5kbGVyJykgYXMgQ2ZuRnVuY3Rpb247XG4gICAgICBhZGRDZm5TdXBwcmVzc1J1bGVzKGhhbmRsZXJGdW5jdGlvbiwgW3sgaWQ6IFwiVzU4XCIsIHJlYXNvbjogXCJDREsgZ2VuZXJhdGVkIGN1c3RvbSByZXNvdXJjZVwiIH1dKTtcbiAgICAgIGFkZENmblN1cHByZXNzUnVsZXMoaGFuZGxlckZ1bmN0aW9uLCBbeyBpZDogXCJXODlcIiwgcmVhc29uOiBcIkNESyBnZW5lcmF0ZWQgY3VzdG9tIHJlc291cmNlXCIgfV0pO1xuICAgICAgYWRkQ2ZuU3VwcHJlc3NSdWxlcyhoYW5kbGVyRnVuY3Rpb24sIFt7IGlkOiBcIlc5MlwiLCByZWFzb246IFwiQ0RLIGdlbmVyYXRlZCBjdXN0b20gcmVzb3VyY2VcIiB9XSk7XG4gICAgfVxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIENyZWF0ZVRlc3RDYWNoZShzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCB2cGM6IGVjMi5JVnBjLCBwb3J0PzogbnVtYmVyKSB7XG4gIGNvbnN0IGNhY2hlUG9ydCA9IHBvcnQgPz8gR2V0RGVmYXVsdENhY2hlUG9ydCgpO1xuXG4gIC8vIENyZWF0ZSB0aGUgc3VibmV0IGdyb3VwIGZyb20gYWxsIHRoZSBpc29sYXRlZCBzdWJuZXRzIGluIHRoZSBWUENcbiAgY29uc3Qgc3VibmV0R3JvdXAgPSBjcmVhdGVDYWNoZVN1Ym5ldEdyb3VwKHNjb3BlLCB2cGMsIGlkKTtcbiAgY29uc3QgZW1wdHlTRyA9IG5ldyBlYzIuU2VjdXJpdHlHcm91cChzY29wZSwgYCR7aWR9LWNhY2hlc2dgLCB7XG4gICAgdnBjLFxuICAgIGFsbG93QWxsT3V0Ym91bmQ6IHRydWUsXG4gIH0pO1xuICBhZGRDZm5TdXBwcmVzc1J1bGVzKGVtcHR5U0csIFt7IGlkOiBcIlc0MFwiLCByZWFzb246IFwiVGVzdCBSZXNvdXJjZVwiIH1dKTtcbiAgYWRkQ2ZuU3VwcHJlc3NSdWxlcyhlbXB0eVNHLCBbeyBpZDogXCJXNVwiLCByZWFzb246IFwiVGVzdCBSZXNvdXJjZVwiIH1dKTtcbiAgYWRkQ2ZuU3VwcHJlc3NSdWxlcyhlbXB0eVNHLCBbeyBpZDogXCJXMzZcIiwgcmVhc29uOiBcIlRlc3QgUmVzb3VyY2VcIiB9XSk7XG5cbiAgY29uc3QgY2FjaGVQcm9wcyA9IHtcbiAgICBjbHVzdGVyTmFtZTogYCR7aWR9LWNkay1jbHVzdGVyYCxcbiAgICBjYWNoZU5vZGVUeXBlOiBcImNhY2hlLnQzLm1lZGl1bVwiLFxuICAgIGVuZ2luZTogXCJtZW1jYWNoZWRcIixcbiAgICBudW1DYWNoZU5vZGVzOiAyLFxuICAgIHBvcnQ6IGNhY2hlUG9ydCxcbiAgICBhek1vZGU6IFwiY3Jvc3MtYXpcIixcbiAgICB2cGNTZWN1cml0eUdyb3VwSWRzOiBbZW1wdHlTRy5zZWN1cml0eUdyb3VwSWRdLFxuICAgIGNhY2hlU3VibmV0R3JvdXBOYW1lOiBzdWJuZXRHcm91cC5jYWNoZVN1Ym5ldEdyb3VwTmFtZSxcbiAgfTtcblxuICBjb25zdCBuZXdDYWNoZSA9IG5ldyBjYWNoZS5DZm5DYWNoZUNsdXN0ZXIoXG4gICAgc2NvcGUsXG4gICAgYCR7aWR9LWNsdXN0ZXJgLFxuICAgIGNhY2hlUHJvcHNcbiAgKTtcbiAgbmV3Q2FjaGUuYWRkRGVwZW5kZW5jeShzdWJuZXRHcm91cCk7XG4gIHJldHVybiBuZXdDYWNoZTtcbn1cblxuLyoqXG4gKiBBc3NlcnRzIHRoYXQgYSBLTVMga2V5IHdpdGggYSBzcGVjaWZpYyBkZXNjcmlwdGlvbiBleGlzdHMgb24gYSByZXNvdXJjZVxuICpcbiAqIEBwYXJhbSBzdGFjayBUaGUgQ2xvdWRGb3JtYXRpb24gU3RhY2sgdGhhdCBjb250YWlucyB0aGUgdG8gdmFsaWRhdGUuXG4gKiBAcGFyYW0gcGFyZW50UmVzb3VyY2VUeXBlIFRoZSB0eXBlIG9mIENsb3VkRm9ybWF0aW9uIFJlc291cmNlIHRoYXQgc2hvdWxkIGhhdmUgdGhlIGtleSBzZXQgb24gaXQsIGUuZy4sIGBBV1M6OlNOUzo6VG9waWNgLCBldGMuLi5cbiAqIEBwYXJhbSBkZXNjcmlwdGlvbiBUaGUgdmFsdWUgb2YgdGhlIERlc2NyaXB0aW9uIHByb3BlcnR5IG9uIHRoZSBLTVMgS2V5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHBlY3RLbXNLZXlBdHRhY2hlZFRvQ29ycmVjdFJlc291cmNlKHN0YWNrOiBTdGFjaywgcGFyZW50UmVzb3VyY2VUeXBlOiBzdHJpbmcsIGtleURlc2NyaXB0aW9uOiBzdHJpbmcpIHtcbiAgY29uc3QgdGVtcGxhdGUgPSBUZW1wbGF0ZS5mcm9tU3RhY2soc3RhY2spO1xuICBjb25zdCByZXNvdXJjZSA9IHRlbXBsYXRlLmZpbmRSZXNvdXJjZXMoJ0FXUzo6S01TOjpLZXknLCB7XG4gICAgUHJvcGVydGllczoge1xuICAgICAgRGVzY3JpcHRpb246IE1hdGNoLmV4YWN0KGtleURlc2NyaXB0aW9uKVxuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgW2xvZ2ljYWxJZF0gPSBPYmplY3Qua2V5cyhyZXNvdXJjZSk7XG4gIFRlbXBsYXRlLmZyb21TdGFjayhzdGFjaykuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKHBhcmVudFJlc291cmNlVHlwZSwge1xuICAgIEttc01hc3RlcktleUlkOiB7XG4gICAgICBcIkZuOjpHZXRBdHRcIjogW1xuICAgICAgICBsb2dpY2FsSWQsXG4gICAgICAgIFwiQXJuXCJcbiAgICAgIF1cbiAgICB9XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXhwZWN0Tm9uZXhpc3RlbmNlKHN0YWNrOiBTdGFjaywgdHlwZTogc3RyaW5nLCBwcm9wczogb2JqZWN0KSB7XG4gIGNvbnN0IHNob3VsZEZpbmROb3RoaW5nID0gVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrKS5maW5kUmVzb3VyY2VzKHR5cGUsIHByb3BzKTtcbiAgZXhwZWN0KE9iamVjdC5rZXlzKHNob3VsZEZpbmROb3RoaW5nKS5sZW5ndGgpLnRvRXF1YWwoMCk7XG59XG5cbi8vIHByaXZhdGUgaGVscGVyIGNsYXNzIHRvIHN1cHByZXNzIHRoZSBzdGFuZGFyZCBjZm4gbmFnIHdhcm5pbmdzIGZvciBsYW1iZGEgZnVuY3Rpb25zIHVzZWQgaW4gaW50ZWcgdGVzdHNcbmNsYXNzIENmbk5hZ0xhbWJkYUFzcGVjdCBpbXBsZW1lbnRzIElBc3BlY3Qge1xuICBwdWJsaWMgdmlzaXQobm9kZTogSUNvbnN0cnVjdCk6IHZvaWQge1xuICAgIGNvbnN0IHJlc291cmNlID0gbm9kZSBhcyBDZm5SZXNvdXJjZTtcbiAgICBpZiAocmVzb3VyY2UuY2ZuUmVzb3VyY2VUeXBlID09PSAnQVdTOjpMYW1iZGE6OkZ1bmN0aW9uJykge1xuICAgICAgYWRkQ2ZuU3VwcHJlc3NSdWxlcyhyZXNvdXJjZSwgW1xuICAgICAgICB7IGlkOiAnVzU4JywgcmVhc29uOiAnVGhpcyBMYW1iZGEgRnVuY3Rpb24gaXMgY3JlYXRlZCBmb3IgaW50ZWdyYXRpb24gdGVzdGluZyBwdXJwb3NlcyBvbmx5IGFuZCBpcyBub3QgcGFydCBvZiBhbiBhY3R1YWwgY29uc3RydWN0JyB9LFxuICAgICAgICB7IGlkOiAnVzg5JywgcmVhc29uOiAnVGhpcyBMYW1iZGEgRnVuY3Rpb24gaXMgY3JlYXRlZCBmb3IgaW50ZWdyYXRpb24gdGVzdGluZyBwdXJwb3NlcyBvbmx5IGFuZCBpcyBub3QgcGFydCBvZiBhbiBhY3R1YWwgY29uc3RydWN0JyB9LFxuICAgICAgICB7IGlkOiAnVzkyJywgcmVhc29uOiAnVGhpcyBMYW1iZGEgRnVuY3Rpb24gaXMgY3JlYXRlZCBmb3IgaW50ZWdyYXRpb24gdGVzdGluZyBwdXJwb3NlcyBvbmx5IGFuZCBpcyBub3QgcGFydCBvZiBhbiBhY3R1YWwgY29uc3RydWN0JyB9XG4gICAgICBdKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIENyZWF0ZVRlc3RBcGkoc3RhY2s6IFN0YWNrLCBpZDogc3RyaW5nKTogYXBpLkxhbWJkYVJlc3RBcGkge1xuICBjb25zdCBsYW1iZGFGdW5jdGlvbiA9IG5ldyBsYW1iZGEuRnVuY3Rpb24oc3RhY2ssIGAke2lkfUZ1bmN0aW9uYCwge1xuICAgIGNvZGU6IGxhbWJkYS5Db2RlLmZyb21Bc3NldChgJHtfX2Rpcm5hbWV9L2xhbWJkYWApLFxuICAgIHJ1bnRpbWU6IGRlZmF1bHRzLkNPTU1FUkNJQUxfUkVHSU9OX0xBTUJEQV9OT0RFX1JVTlRJTUUsXG4gICAgaGFuZGxlcjogXCIuaGFuZGxlclwiLFxuICB9KTtcbiAgYWRkQ2ZuU3VwcHJlc3NSdWxlcyhsYW1iZGFGdW5jdGlvbiwgW3sgaWQ6IFwiVzU4XCIsIHJlYXNvbjogXCJUZXN0IFJlc291cmNlXCIgfV0pO1xuICBhZGRDZm5TdXBwcmVzc1J1bGVzKGxhbWJkYUZ1bmN0aW9uLCBbeyBpZDogXCJXODlcIiwgcmVhc29uOiBcIlRlc3QgUmVzb3VyY2VcIiB9XSk7XG4gIGFkZENmblN1cHByZXNzUnVsZXMobGFtYmRhRnVuY3Rpb24sIFt7IGlkOiBcIlc5MlwiLCByZWFzb246IFwiVGVzdCBSZXNvdXJjZVwiIH1dKTtcblxuICBjb25zdCByZXN0QXBpID0gbmV3IGFwaS5MYW1iZGFSZXN0QXBpKHN0YWNrLCBgJHtpZH1BcGlgLCB7XG4gICAgaGFuZGxlcjogbGFtYmRhRnVuY3Rpb24sXG4gICAgZGVmYXVsdE1ldGhvZE9wdGlvbnM6IHtcbiAgICAgIGF1dGhvcml6YXRpb25UeXBlOiBhcGkuQXV0aG9yaXphdGlvblR5cGUuQ1VTVE9NLFxuICAgICAgYXV0aG9yaXplcjogQ3JlYXRlQXBpQXV0aG9yaXplcihzdGFjaywgYCR7aWR9LWF1dGhvcml6ZXJgKVxuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgbmV3RGVwbG95bWVudCA9IHJlc3RBcGkubGF0ZXN0RGVwbG95bWVudDtcbiAgaWYgKG5ld0RlcGxveW1lbnQpIHtcbiAgICBhZGRDZm5TdXBwcmVzc1J1bGVzKG5ld0RlcGxveW1lbnQsIFtcbiAgICAgIHsgaWQ6IFwiVzY4XCIsIHJlYXNvbjogXCJUZXN0IFJlc291cmNlXCIgfSxcbiAgICBdKTtcbiAgfVxuXG4gIGNvbnN0IG5ld01ldGhvZCA9IHJlc3RBcGkubWV0aG9kc1swXTtcbiAgYWRkQ2ZuU3VwcHJlc3NSdWxlcyhuZXdNZXRob2QsIFt7IGlkOiBcIlc1OVwiLCByZWFzb246IFwiVGVzdCBSZXNvdXJjZVwiIH1dKTtcbiAgY29uc3QgbmV3TWV0aG9kVHdvID0gcmVzdEFwaS5tZXRob2RzWzFdO1xuICBhZGRDZm5TdXBwcmVzc1J1bGVzKG5ld01ldGhvZFR3bywgW3sgaWQ6IFwiVzU5XCIsIHJlYXNvbjogXCJUZXN0IFJlc291cmNlXCIgfV0pO1xuXG4gIGNvbnN0IG5ld1N0YWdlID0gcmVzdEFwaS5kZXBsb3ltZW50U3RhZ2U7XG4gIGFkZENmblN1cHByZXNzUnVsZXMobmV3U3RhZ2UsIFt7IGlkOiBcIlc2NFwiLCByZWFzb246IFwiVGVzdCBSZXNvdXJjZVwiIH1dKTtcbiAgYWRkQ2ZuU3VwcHJlc3NSdWxlcyhuZXdTdGFnZSwgW3sgaWQ6IFwiVzY5XCIsIHJlYXNvbjogXCJUZXN0IFJlc291cmNlXCIgfV0pO1xuXG4gIHJldHVybiByZXN0QXBpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gQ3JlYXRlQXBpQXV0aG9yaXplcihzdGFjazogU3RhY2ssIGlkOiBzdHJpbmcpOiBhcGkuSUF1dGhvcml6ZXIge1xuICBjb25zdCBhdXRoRm4gPSBuZXcgbGFtYmRhLkZ1bmN0aW9uKHN0YWNrLCBgJHtpZH1BdXRoRnVuY3Rpb25gLCB7XG4gICAgY29kZTogbGFtYmRhLkNvZGUuZnJvbUFzc2V0KGAke19fZGlybmFtZX0vbGFtYmRhYCksXG4gICAgcnVudGltZTogZGVmYXVsdHMuQ09NTUVSQ0lBTF9SRUdJT05fTEFNQkRBX05PREVfUlVOVElNRSxcbiAgICBoYW5kbGVyOiBcIi5oYW5kbGVyXCIsXG4gIH0pO1xuICBhZGRDZm5TdXBwcmVzc1J1bGVzKGF1dGhGbiwgW3sgaWQ6IFwiVzU4XCIsIHJlYXNvbjogXCJUZXN0IFJlc291cmNlXCIgfV0pO1xuICBhZGRDZm5TdXBwcmVzc1J1bGVzKGF1dGhGbiwgW3sgaWQ6IFwiVzg5XCIsIHJlYXNvbjogXCJUZXN0IFJlc291cmNlXCIgfV0pO1xuICBhZGRDZm5TdXBwcmVzc1J1bGVzKGF1dGhGbiwgW3sgaWQ6IFwiVzkyXCIsIHJlYXNvbjogXCJUZXN0IFJlc291cmNlXCIgfV0pO1xuXG4gIGNvbnN0IGF1dGhvcml6ZXIgPSBuZXcgYXBpLlJlcXVlc3RBdXRob3JpemVyKHN0YWNrLCBpZCwge1xuICAgIGhhbmRsZXI6IGF1dGhGbixcbiAgICBpZGVudGl0eVNvdXJjZXM6IFthcGkuSWRlbnRpdHlTb3VyY2UuaGVhZGVyKCdBdXRob3JpemF0aW9uJyldXG4gIH0pO1xuXG4gIHJldHVybiBhdXRob3JpemVyO1xufVxuXG4vLyBDcmVhdGUgYSBzaG9ydCwgdW5pcXVlIHRvIHRoaXMgc3RhY2sgbmFtZVxuLy8gdGVjaG5pY2FsbHkgdGhpcyBpcyBub3QgMTAwJSBPSywgYXMgaXQgb25seSB1c2VzIGEgcG9ydGlvbiBvZiB0aGVcbi8vIHN0YWNrIGd1aWQgLSBidXQgaXQncyBmb3IgdGVzdHMgb25seSBzbyBpZiB0aGUgbGFzdCBzZWdtZW50IG9mIDIgc3RhY2sgZ3VpZHMgY29sbGlkZSBzb21lZGF5XG4vLyAoVkVSWSB1bmxpa2VseSksIGp1c3QgcnVubmluZyBhZ2FpbiBzaG91bGQgdGFrZSBjYXJlIG9mIGl0LlxuZXhwb3J0IGZ1bmN0aW9uIENyZWF0ZVNob3J0VW5pcXVlVGVzdE5hbWUoc3R1Yjogc3RyaW5nKSB7XG4gIGNvbnN0IHN0YWNrR3VpZCA9IEZuLnNlbGVjdCgyLCBGbi5zcGxpdCgnLycsIGAke0F3cy5TVEFDS19JRH1gKSk7XG4gIGNvbnN0IGd1aWRQb3J0aW9uID0gRm4uc2VsZWN0KDQsIEZuLnNwbGl0KCctJywgc3RhY2tHdWlkKSk7XG4gIHJldHVybiBGbi5qb2luKFwiLVwiLCBbc3R1YiwgZ3VpZFBvcnRpb25dKTtcbn1cblxuLyoqXG4gKiBVc2VkIHRvIHN1cHByZXNzIGNmbiBuYWcgVzU4LCBXODksIGFuZCBXOTIgcnVsZXMgb24gbGFtYmRhIGludGVncmF0aW9uIHRlc3QgcmVzb3VyY2VzLlxuICpcbiAqIEBwYXJhbSBzdGFjayAtIFRoZSBzdGFjayB0byBzdXBwcmVzcyBjZm4gbmFnIGxhbWJkYSBydWxlcyBvblxuICovXG5leHBvcnQgZnVuY3Rpb24gU3VwcHJlc3NDZm5OYWdMYW1iZGFXYXJuaW5ncyhzdGFjazogU3RhY2spIHtcbiAgQXNwZWN0cy5vZihzdGFjaykuYWRkKG5ldyBDZm5OYWdMYW1iZGFBc3BlY3QoKSk7XG59XG4iXX0=
@@ -245,4 +245,4 @@ test('CheckBooleanWithDefault', () => {
245
245
  response = defaults.CheckBooleanWithDefault(false, false);
246
246
  expect(response).toBe(false);
247
247
  });
248
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInV0aWxzLnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7OztHQVdHOztBQUVILFVBQVU7QUFDVixnQ0FBZ0M7QUFDaEMsbUNBQW1DO0FBQ25DLDhCQUE4QjtBQUU5Qix1Q0FBdUM7QUFDdkMsaURBQWlEO0FBQ2pELE1BQU0sS0FBSyxHQUFHLENBQUUsb0JBQW9CLEVBQUUsZUFBZSxDQUFDLENBQUM7QUFDdkQsTUFBTSxhQUFhLEdBQUcsQ0FBRSxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFFaEQsSUFBSSxDQUFDLGlEQUFpRCxFQUFFLEdBQUcsRUFBRTtJQUMzRCxNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsb0JBQW9CLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBRXhELE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbkMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBRWxELENBQUMsQ0FBQyxDQUFDO0FBRUgsSUFBSSxDQUFDLG1EQUFtRCxFQUFFLEdBQUcsRUFBRTtJQUM3RCxNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsb0JBQW9CLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBRXpELE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbkMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFNBQVMs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LENBQUMsQ0FBQztJQUU1QixRQUFRLEdBQUcsUUFBUSxDQUFDLHVCQUF1QixDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN6RCxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBRTVCLFFBQVEsR0FBRyxRQUFRLENBQUMsdUJBQXVCLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3pELE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFN0IsUUFBUSxHQUFHLFFBQVEsQ0FBQyx1QkFBdUIsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDMUQsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMvQixDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpLiBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4gKiAgd2l0aCB0aGUgTGljZW5zZS4gQSBjb3B5IG9mIHRoZSBMaWNlbnNlIGlzIGxvY2F0ZWQgYXRcbiAqXG4gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqICBvciBpbiB0aGUgJ2xpY2Vuc2UnIGZpbGUgYWNjb21wYW55aW5nIHRoaXMgZmlsZS4gVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICdBUyBJUycgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFU1xuICogIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zXG4gKiAgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbi8vIEltcG9ydHNcbmltcG9ydCAqIGFzIGRlZmF1bHRzIGZyb20gJy4uLyc7XG5pbXBvcnQgKiBhcyBjZGsgZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0ICogYXMgbG9nIGZyb20gJ25wbWxvZyc7XG5cbi8vIE5lZWQgMiBwYXJ0cywgYnV0IHRoZXkgY2FuJ3Qgb3ZlcmxhcFxuLy8gc28gd2UgY2FuIGV4cGxpY2l0bHkgZmluZCB0aGVtIGluIHRoZSByZXN1bHRzLlxuY29uc3QgcGFydHMgPSBbICdmaXJzdHBvcnRpb25pc2xvbmcnLCAnc2Vjb25kc2VjdGlvbiddO1xuY29uc3Qgbm9uQWxwaGFQYXJ0cyA9IFsgJ3BhcnQtb25lJywgJ3BhcnQtdHdvJ107XG5cbnRlc3QoJ1Rlc3QgZ2VuZXJhdGVSZXNvdXJjZU5hbWUgd2l0aCBhIHRydW5jYXRlZCBwYXJ0JywgKCkgPT4ge1xuICBjb25zdCByZXN1bHQgPSBkZWZhdWx0cy5nZW5lcmF0ZVJlc291cmNlTmFtZShwYXJ0cywgMzgpO1xuXG4gIGV4cGVjdChyZXN1bHQpLnRvQ29udGFpbihwYXJ0c1sxXSk7XG4gIGV4cGVjdChyZXN1bHQpLm5vdC50b0NvbnRhaW4ocGFydHNbMF0pO1xuICBleHBlY3QocmVzdWx0KS50b0NvbnRhaW4ocGFydHNbMF0uc2xpY2UoMCwgMTMpKTtcblxufSk7XG5cbnRlc3QoJ1Rlc3QgZ2VuZXJhdGVSZXNvdXJjZU5hbWUgd2l0aCBubyB0cnVuY2F0ZWQgcGFydHMnLCAoKSA9PiB7XG4gIGNvbnN0IHJlc3VsdCA9IGRlZmF1bHRzLmdlbmVyYXRlUmVzb3VyY2VOYW1lKHBhcnRzLCAxMDApO1xuXG4gIGV4cGVjdChyZXN1bHQpLnRvQ29udGFpbihwYXJ0c1sxXSk7XG4gIGV4cGVjdChyZXN1bHQpLnRvQ29udGFpbihwYXJ0c1swXSk7XG4gIGV4cGVjdChyZXN1bHQubGVuZ3RoKS50b0VxdWFsKHBhcnRzWzBdLmxlbmd0aCArIHBhcnRzWzFdLmxlbmd0aCArIDEyKTtcbn0pO1xuXG50ZXN0KCdUZXN0IGdlbmVyYXRlUmVzb3VyY2VOYW1lIHdpdGggbm9uIEFwaGFudW1lcmljJywgKCkgPT4ge1xuICBjb25zdCByZXN1bHQgPSBkZWZhdWx0cy5nZW5lcmF0ZVJlc291cmNlTmFtZShub25BbHBoYVBhcnRzLCAxMDApO1xuXG4gIGV4cGVjdChyZXN1bHQpLnRvQ29udGFpbigncGFydG9uZXBhcnR0d28nKTtcbn0pO1xuXG50ZXN0KCdUZXN0IGdlbmVyYXRlUmVzb3VyY2VOYW1lIHdpdGggcmFuZG9taXplZCBleHRlbnNpb24nLCAoKSA9PiB7XG4gIGNvbnN0IHJlc3VsdE9uZSA9IGRlZmF1bHRzLmdlbmVyYXRlUmVzb3VyY2VOYW1lKHBhcnRzLCA1MTIsIHRydWUpO1xuICBjb25zdCBzdGFydFRpbWUgPSAobmV3IERhdGUoKSkuZ2V0VGltZSgpO1xuXG4gIC8vIFdlIG5lZWQgdG8gZW5zdXJlIHRoZSB0aW1lIHZhbHVlIGFwcGVuZGVkIGNoYW5nZXMgYmV0d2VlbiBjYWxsbHNcbiAgbGV0IGN1cnJUaW1lID0gc3RhcnRUaW1lO1xuICB3aGlsZSAoY3VyclRpbWUgID09PSBzdGFydFRpbWUpIHtcbiAgICBjdXJyVGltZSA9IChuZXcgRGF0ZSgpKS5nZXRUaW1lKCk7XG4gIH1cblxuICBjb25zdCByZXN1bHRUd28gPSBkZWZhdWx0cy5nZW5lcmF0ZVJlc291cmNlTmFtZShwYXJ0cywgNTEyLCB0cnVlKTtcblxuICBleHBlY3QocmVzdWx0T25lKS50b0NvbnRhaW4ocGFydHNbMV0pO1xuICBleHBlY3QocmVzdWx0T25lKS50b0NvbnRhaW4ocGFydHNbMF0pO1xuICBleHBlY3QocmVzdWx0VHdvKS50b0NvbnRhaW4ocGFydHNbMV0pO1xuICBleHBlY3QocmVzdWx0VHdvKS50b0NvbnRhaW4ocGFydHNbMF0pO1xuICBleHBlY3QocmVzdWx0T25lKS5ub3QudG9FcXVhbChyZXN1bHRUd28pO1xuICBleHBlY3QocmVzdWx0T25lLnNsaWNlKDAsIC0xMykpLnRvRXF1YWwocmVzdWx0VHdvLnNsaWNlKDAsIC0xMykpO1xuXG59KTtcblxudGVzdCgnVGVzdCBnZW5lcmF0ZVBoeXNpY2FsTmFtZScsICgpID0+IHtcbiAgY29uc3QgcmVzdWx0ID0gZGVmYXVsdHMuZ2VuZXJhdGVQaHlzaWNhbE5hbWUoJy9hd3MvdmVuZGVkbG9ncy9zdGF0ZXMvY29uc3RydWN0cy8nLCBwYXJ0cywgMjU1KTtcblxuICAvLyBUaGUgdG9rZW4gbnVtYmVyIGlzIG5vdCBjb25zdGFudCwgc28gbmVlZCB0byBiZSBmbGV4aWJsZSBjaGVja2luZyB0aGlzIHZhbHVlXG4gIGNvbnN0IHJlZ2V4ID0gL1xcL2F3c1xcL3ZlbmRlZGxvZ3NcXC9zdGF0ZXNcXC9jb25zdHJ1Y3RzXFwvZmlyc3Rwb3J0aW9uaXNsb25nc2Vjb25kc2VjdGlvbi1cXCR7VG9rZW5cXFtUT0tFTlxcLlswLTldK1xcXX0vO1xuICBleHBlY3QocmVzdWx0KS50b01hdGNoKHJlZ2V4KTtcbn0pO1xuXG50ZXN0KCdUZXN0IHRydW5jYXRpb24gb2YgZ2VuZXJhdGVQaHlzaWNhbE5hbWUnLCAoKSA9PiB7XG4gIGNvbnN0IGxvbmdQYXJ0cyA9IFsgLi4ucGFydHMsIC4uLnBhcnRzLCAuLi5wYXJ0cywgLi4ucGFydHMsIC4uLnBhcnRzIF07XG4gIGNvbnN0IHByZWZpeCA9ICcvYXdzL3ZlbmRlZGxvZ3Mvc3RhdGVzL2NvbnN0cnVjdHMvJztcbiAgY29uc3QgbGVuZ3RoT2ZHdWlkID0gMzY7XG4gIGNvbnN0IG1heE5hbWVMZW5ndGggPSAxMjU7XG5cbiAgY29uc3QgcmVzdWx0ID0gZGVmYXVsdHMuZ2VuZXJhdGVQaHlzaWNhbE5hbWUocHJlZml4LCBsb25nUGFydHMsIG1heE5hbWVMZW5ndGgpO1xuXG4gIGNvbnN0IGZpeGVkUG9ydGlvbiA9IHJlc3VsdC5zcGxpdCgnJCcpWzBdO1xuICBleHBlY3QoZml4ZWRQb3J0aW9uLmxlbmd0aCkudG9FcXVhbChtYXhOYW1lTGVuZ3RoIC0gbGVuZ3RoT2ZHdWlkKTtcbn0pO1xuXG50ZXN0KCdUZXN0IGdlbmVyYXRlSW50ZWdTdGFja05hbWUnLCAoKSA9PiB7XG4gIGNvbnN0IHJlc3VsdCA9IGRlZmF1bHRzLmdlbmVyYXRlSW50ZWdTdGFja05hbWUoJ2ludGVnLmFwaWdhdGV3YXktZHluYW1vZGItQ1JVRC5qcycpO1xuICBleHBlY3QocmVzdWx0KS50b0NvbnRhaW4oJ2FwaWdhdGV3YXktZHluYW1vZGItQ1JVRCcpO1xuXG4gIGNvbnN0IHJlc3VsdDEgPSBkZWZhdWx0cy5nZW5lcmF0ZUludGVnU3RhY2tOYW1lKCdpbnRlZy5vdmVycmlkZV9hdXRoX2FwaV9rZXlzLnRzJyk7XG4gIGV4cGVjdChyZXN1bHQxKS50b0NvbnRhaW4oJ292ZXJyaWRlLWF1dGgtYXBpLWtleXMnKTtcbn0pO1xuXG50ZXN0KCdUZXN0IGNvbnNvbGlkYXRlIHByb3BzIHdpdGggYWxsIGFyZ3MnLCAoKSA9PiB7XG4gIGplc3QucmVzZXRNb2R1bGVzKCk7XG4gIGplc3QuY2xlYXJBbGxNb2NrcygpO1xuICBwcm9jZXNzLmVudi5vdmVycmlkZVdhcm5pbmdzRW5hYmxlZCA9ICd0cnVlJztcblxuICBjb25zdCBhcmcxID0ge1xuICAgIHZhbDE6IDExLFxuICAgIHZhbDI6IDEyLFxuICAgIHZhbDM6IDEzLFxuICB9O1xuXG4gIGNvbnN0IGFyZzIgPSB7XG4gICAgdmFsMTogMjEsXG4gICAgdmFsMjogMjIsXG4gIH07XG5cbiAgY29uc3QgYXJnMyA9IHtcbiAgICB2YWwxOiAzMSxcbiAgfTtcblxuICBjb25zdCB3YXJuID0gamVzdC5zcHlPbihsb2csICd3YXJuJyk7XG4gIGNvbnN0IHJlc3VsdCA9IGRlZmF1bHRzLmNvbnNvbGlkYXRlUHJvcHMoYXJnMSwgYXJnMiwgYXJnMyk7XG5cbiAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbCh7XG4gICAgdmFsMTogMzEsXG4gICAgdmFsMjogMjIsXG4gICAgdmFsMzogMTMsXG4gIH0pO1xuXG4gIGV4cGVjdCh3YXJuKS50b0JlQ2FsbGVkVGltZXMoMik7XG5cbn0pO1xuXG50ZXN0KCdUZXN0IGNvbnNvbGlkYXRlIHByb3BzIHdpdGggZmlyc3QgYW5kIHRoaXJkIGFyZ3MnLCAoKSA9PiB7XG4gIGplc3QucmVzZXRNb2R1bGVzKCk7XG4gIGplc3QuY2xlYXJBbGxNb2NrcygpO1xuICBwcm9jZXNzLmVudi5vdmVycmlkZVdhcm5pbmdzRW5hYmxlZCA9ICd0cnVlJztcblxuICBjb25zdCBhcmcxID0ge1xuICAgIHZhbDE6IDExLFxuICAgIHZhbDI6IDEyLFxuICAgIHZhbDM6IDEzLFxuICB9O1xuXG4gIGNvbnN0IGFyZzMgPSB7XG4gICAgdmFsMTogMzEsXG4gIH07XG5cbiAgY29uc3Qgd2FybiA9IGplc3Quc3B5T24obG9nLCAnd2FybicpO1xuICBjb25zdCByZXN1bHQgPSBkZWZhdWx0cy5jb25zb2xpZGF0ZVByb3BzKGFyZzEsIHVuZGVmaW5lZCwgYXJnMyk7XG5cbiAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbCh7XG4gICAgdmFsMTogMzEsXG4gICAgdmFsMjogMTIsXG4gICAgdmFsMzogMTMsXG4gIH0pO1xuXG4gIGV4cGVjdCh3YXJuKS50b0JlQ2FsbGVkVGltZXMoMCk7XG5cbn0pO1xuXG50ZXN0KCdUZXN0IGNvbnNvbGlkYXRlIHByb3BzIHdpdGggZmlyc3QgYW5kIHNlY29uZCBhcmdzJywgKCkgPT4ge1xuICBqZXN0LnJlc2V0TW9kdWxlcygpO1xuICBqZXN0LmNsZWFyQWxsTW9ja3MoKTtcbiAgcHJvY2Vzcy5lbnYub3ZlcnJpZGVXYXJuaW5nc0VuYWJsZWQgPSAndHJ1ZSc7XG5cbiAgY29uc3QgYXJnMSA9IHtcbiAgICB2YWwxOiAxMSxcbiAgICB2YWwyOiAxMixcbiAgICB2YWwzOiAxMyxcbiAgfTtcblxuICBjb25zdCBhcmcyID0ge1xuICAgIHZhbDE6IDIxLFxuICAgIHZhbDI6IDIyLFxuICB9O1xuXG4gIGNvbnN0IHdhcm4gPSBqZXN0LnNweU9uKGxvZywgJ3dhcm4nKTtcbiAgY29uc3QgcmVzdWx0ID0gZGVmYXVsdHMuY29uc29saWRhdGVQcm9wcyhhcmcxLCBhcmcyKTtcblxuICBleHBlY3QocmVzdWx0KS50b0VxdWFsKHtcbiAgICB2YWwxOiAyMSxcbiAgICB2YWwyOiAyMixcbiAgICB2YWwzOiAxMyxcbiAgfSk7XG5cbiAgZXhwZWN0KHdhcm4pLnRvQmVDYWxsZWRUaW1lcygyKTtcblxufSk7XG5cbnRlc3QoJ1Rlc3QgY29uc29saWRhdGUgcHJvcHMgd2l0aCBvbmUgYXJnJywgKCkgPT4ge1xuICBqZXN0LnJlc2V0TW9kdWxlcygpO1xuICBqZXN0LmNsZWFyQWxsTW9ja3MoKTtcbiAgcHJvY2Vzcy5lbnYub3ZlcnJpZGVXYXJuaW5nc0VuYWJsZWQgPSAndHJ1ZSc7XG5cbiAgY29uc3QgYXJnMSA9IHtcbiAgICB2YWwxOiAxMSxcbiAgICB2YWwyOiAxMixcbiAgICB2YWwzOiAxMyxcbiAgfTtcblxuICBjb25zdCB3YXJuID0gamVzdC5zcHlPbihsb2csICd3YXJuJyk7XG4gIGNvbnN0IHJlc3VsdCA9IGRlZmF1bHRzLmNvbnNvbGlkYXRlUHJvcHMoYXJnMSk7XG5cbiAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChhcmcxKTtcblxuICBleHBlY3Qod2FybikudG9CZUNhbGxlZFRpbWVzKDApO1xuXG59KTtcblxudGVzdCgnVGVzdCBnZW5lcmF0ZU5hbWUgc3VubnkgZGF5IGZvciBjdXJyZW50IGNvbnN0cnVjdCB3aXRoIHVuZGVmaW5lZCBuYW1lIGFyZ3VtZW50JywgKCkgPT4ge1xuICBjb25zdCBzdGFjayA9IG5ldyBjZGsuU3RhY2sodW5kZWZpbmVkLCBcInNvbWUtbmV3LWlkXCIpO1xuXG4gIGNvbnN0IG5ld05hbWUgPSBkZWZhdWx0cy5nZW5lcmF0ZU5hbWUoc3RhY2spO1xuICAvLyA1IGlzIG5vdCBzcGVjaWZpYywganVzdCBjaGVja2luZyB0aGUgbmFtZSBpcyBzZXZlcmFsIGNoYXJhY3RlcnMgbG9uZ2VyIHRoYW4ganVzdCBhIENSL0xGXG4gIGV4cGVjdChuZXdOYW1lLmxlbmd0aCkudG9CZUdyZWF0ZXJUaGFuKDUpO1xufSk7XG5cbnRlc3QoJ1Rlc3QgZ2VuZXJhdGVOYW1lIHN1bm55IGRheSBmb3IgY3VycmVudCBjb25zdHJ1Y3QnLCAoKSA9PiB7XG4gIGNvbnN0IHN0YWNrID0gbmV3IGNkay5TdGFjayh1bmRlZmluZWQsIFwic29tZS1uZXctaWRcIik7XG5cbiAgY29uc3QgbmV3TmFtZSA9IGRlZmF1bHRzLmdlbmVyYXRlTmFtZShzdGFjaywgXCJcIik7XG4gIGV4cGVjdChuZXdOYW1lLmxlbmd0aCkudG9CZUdyZWF0ZXJUaGFuKDUpO1xufSk7XG5cbnRlc3QoJ1Rlc3QgZ2VuZXJhdGVOYW1lIHN1bm55IGRheSBmb3IgY2hpbGQgY29uc3RydWN0JywgKCkgPT4ge1xuICBjb25zdCBzdGFjayA9IG5ldyBjZGsuU3RhY2sodW5kZWZpbmVkLCBcInNvbWUtbmV3LWlkXCIpO1xuXG4gIGNvbnN0IG5ld05hbWUgPSBkZWZhdWx0cy5nZW5lcmF0ZU5hbWUoc3RhY2ssIFwiY2hpbGRcIik7XG4gIGV4cGVjdChuZXdOYW1lLmxlbmd0aCkudG9CZUdyZWF0ZXJUaGFuKDUpO1xuICBleHBlY3QobmV3TmFtZS5pbmNsdWRlcyhuZXdOYW1lKSkudG9CZSh0cnVlKTtcbn0pO1xuXG50ZXN0KCdUZXN0IGdlbmVyYXRlTmFtZSBsb25nZXIgdGhhbiA2NCBjaGFyYWN0ZXJzJywgKCkgPT4ge1xuICBjb25zdCBzdGFjayA9IG5ldyBjZGsuU3RhY2sodW5kZWZpbmVkLCBcInNvbWUtbmV3LWlkXCIpO1xuICBjb25zdCBzZXZlbnR5Q2hhcmFjdGVyTmFtZSA9ICcxMjM0NTY3ODktMTIzNDU2Nzg5LTEyMzQ1Njc4OS0xMjM0NTY3ODktMTIzNDU2Nzg5LTEyMzQ1Njc4OS0xMjM0NTY3ODktJztcbiAgY29uc3QgbmV3TmFtZSA9IGRlZmF1bHRzLmdlbmVyYXRlTmFtZShzdGFjaywgc2V2ZW50eUNoYXJhY3Rlck5hbWUpO1xuICBleHBlY3QobmV3TmFtZS5sZW5ndGgpLnRvRXF1YWwoNjQpO1xufSk7XG5cbnRlc3QoJ1Rlc3QgZ2VuZXJhdGVOYW1lIHVuaXF1ZW5lc3MnLCAoKSA9PiB7XG4gIGNvbnN0IHN0YWNrT25lID0gbmV3IGNkay5TdGFjayh1bmRlZmluZWQsIFwic29tZS1uZXctaWRcIik7XG4gIGNvbnN0IHN0YWNrVHdvID0gbmV3IGNkay5TdGFjayh1bmRlZmluZWQsIFwib3RoZXItaWRcIik7XG5cbiAgY29uc3QgbmFtZU9uZSA9IGRlZmF1bHRzLmdlbmVyYXRlTmFtZShzdGFja09uZSwgXCJcIik7XG4gIGNvbnN0IG5hbWVUd28gPSBkZWZhdWx0cy5nZW5lcmF0ZU5hbWUoc3RhY2tUd28sIFwiXCIpO1xuICBleHBlY3QobmFtZU9uZSA9PT0gbmFtZVR3bykudG9CZShmYWxzZSk7XG59KTtcblxudGVzdCgnVGVzdCBzdWNjZXNzZnVsIENoZWNrTGlzdFZhbHVlcycsICgpID0+IHtcblxuICBjb25zdCBhcHAgPSAoKSA9PiB7XG4gICAgZGVmYXVsdHMuQ2hlY2tMaXN0VmFsdWVzKFsnb25lJywgJ3R3bycsICdmb3VyJ10sIFsnZm91cicsICdvbmUnXSwgJ3Rlc3QgdmFsdWUnKTtcbiAgfTtcblxuICAvLyBBc3NlcnRpb25cbiAgZXhwZWN0KGFwcCkubm90LnRvVGhyb3dFcnJvcigpO1xufSk7XG5cbnRlc3QoJ1Rlc3QgZmFpbCBPcGVuU2VhcmNoIGltcHJvcGVyIHZwYyBzcGVjaWZpY2F0aW9uJywgKCkgPT4ge1xuXG4gIGNvbnN0IHByb3BzOiBkZWZhdWx0cy5PcGVuU2VhcmNoUHJvcHMgPSB7XG4gICAgb3BlblNlYXJjaERvbWFpblByb3BzOiB7XG4gICAgICB2cGNPcHRpb25zOiB7fVxuICAgIH0sXG4gIH07XG5cbiAgY29uc3QgYXBwID0gKCkgPT4ge1xuICAgIGRlZmF1bHRzLkNoZWNrT3BlblNlYXJjaFByb3BzKHByb3BzKTtcbiAgfTtcblxuICAvLyBBc3NlcnRpb25cbiAgZXhwZWN0KGFwcCkudG9UaHJvd0Vycm9yKCdFcnJvciAtIERlZmluZSBWUEMgdXNpbmcgY29uc3RydWN0IHBhcmFtZXRlcnMgbm90IHRoZSBPcGVuU2VhcmNoIFNlcnZpY2UgcHJvcHNcXG4nKTtcbn0pO1xuXG50ZXN0KCdUZXN0IHVuc3VjY2Vzc2Z1bCBDaGVja0xpc3RWYWx1ZXMnLCAoKSA9PiB7XG5cbiAgY29uc3QgYXBwID0gKCkgPT4ge1xuICAgIGRlZmF1bHRzLkNoZWNrTGlzdFZhbHVlcyhbJ29uZScsICd0d28nLCAnZm91ciddLCBbJ2ZvdXInLCAndGhyZWUnXSwgJ3Rlc3QgdmFsdWUnKTtcbiAgfTtcblxuICAvLyBBc3NlcnRpb25cbiAgZXhwZWN0KGFwcCkudG9UaHJvd0Vycm9yKCdJbnZhbGlkIHRlc3QgdmFsdWUgc3VibWl0dGVkIC0gdGhyZWUnKTtcbn0pO1xuXG50ZXN0KCdDb25zb2xpZGF0ZVByb3BzIGRvZXMgbm90IGdlbmVyYXRlIHdhcm5pbmdzIGZvciBjb25zdHJ1Y3QgcHJvcHMgb3ZlcnJpZGVzJywgKCkgPT4ge1xuICBqZXN0LnJlc2V0TW9kdWxlcygpO1xuICBqZXN0LmNsZWFyQWxsTW9ja3MoKTtcbiAgcHJvY2Vzcy5lbnYub3ZlcnJpZGVXYXJuaW5nc0VuYWJsZWQgPSAndHJ1ZSc7XG5cbiAgY29uc3QgZGVmYXVsdFByb3BzID0ge1xuICAgIHZhbDE6ICdvbmUnXG4gIH07XG5cbiAgY29uc3QgY2xpZW50UHJvcHMgPSB7XG4gICAgdmFsMTogJ3R3bycsXG4gICAgdmFsMjogJ3RocmVlJ1xuICB9O1xuXG4gIGNvbnN0IGNvbnN0cnVjdFByb3BzID0ge1xuICAgIHZhbDI6ICdmb3VyJ1xuICB9O1xuXG4gIGNvbnN0IHdhcm4gPSBqZXN0LnNweU9uKGxvZywgJ3dhcm4nKTtcbiAgZGVmYXVsdHMuY29uc29saWRhdGVQcm9wcyhkZWZhdWx0UHJvcHMsIGNsaWVudFByb3BzLCAgY29uc3RydWN0UHJvcHMpO1xuXG4gIC8vIEFzc2VydFxuICBleHBlY3Qod2FybikudG9CZUNhbGxlZFRpbWVzKDEpO1xuXG59KTtcblxudGVzdCgnQ2hlY2tCb29sZWFuV2l0aERlZmF1bHQnLCAoKSA9PiB7XG4gIGxldCByZXNwb25zZTtcblxuICByZXNwb25zZSA9IGRlZmF1bHRzLkNoZWNrQm9vbGVhbldpdGhEZWZhdWx0KHVuZGVmaW5lZCwgdHJ1ZSk7XG4gIGV4cGVjdChyZXNwb25zZSkudG9CZSh0cnVlKTtcblxuICByZXNwb25zZSA9IGRlZmF1bHRzLkNoZWNrQm9vbGVhbldpdGhEZWZhdWx0KHVuZGVmaW5lZCwgZmFsc2UpO1xuICBleHBlY3QocmVzcG9uc2UpLnRvQmUoZmFsc2UpO1xuXG4gIHJlc3BvbnNlID0gZGVmYXVsdHMuQ2hlY2tCb29sZWFuV2l0aERlZmF1bHQodHJ1ZSwgdHJ1ZSk7XG4gIGV4cGVjdChyZXNwb25zZSkudG9CZSh0cnVlKTtcblxuICByZXNwb25zZSA9IGRlZmF1bHRzLkNoZWNrQm9vbGVhbldpdGhEZWZhdWx0KHRydWUsIGZhbHNlKTtcbiAgZXhwZWN0KHJlc3BvbnNlKS50b0JlKHRydWUpO1xuXG4gIHJlc3BvbnNlID0gZGVmYXVsdHMuQ2hlY2tCb29sZWFuV2l0aERlZmF1bHQoZmFsc2UsIHRydWUpO1xuICBleHBlY3QocmVzcG9uc2UpLnRvQmUoZmFsc2UpO1xuXG4gIHJlc3BvbnNlID0gZGVmYXVsdHMuQ2hlY2tCb29sZWFuV2l0aERlZmF1bHQoZmFsc2UsIGZhbHNlKTtcbiAgZXhwZWN0KHJlc3BvbnNlKS50b0JlKGZhbHNlKTtcbn0pOyJdfQ==
248
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInV0aWxzLnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7OztHQVdHOztBQUVILFVBQVU7QUFDVixnQ0FBZ0M7QUFDaEMsbUNBQW1DO0FBQ25DLDhCQUE4QjtBQUU5Qix1Q0FBdUM7QUFDdkMsaURBQWlEO0FBQ2pELE1BQU0sS0FBSyxHQUFHLENBQUUsb0JBQW9CLEVBQUUsZUFBZSxDQUFDLENBQUM7QUFDdkQsTUFBTSxhQUFhLEdBQUcsQ0FBRSxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFFaEQsSUFBSSxDQUFDLGlEQUFpRCxFQUFFLEdBQUcsRUFBRTtJQUMzRCxNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsb0JBQW9CLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBRXhELE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbkMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBRWxELENBQUMsQ0FBQyxDQUFDO0FBRUgsSUFBSSxDQUFDLG1EQUFtRCxFQUFFLEdBQUcsRUFBRTtJQUM3RCxNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsb0JBQW9CLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBRXpELE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbkMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFNBQVMs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LENBQUMsSUFBSSxDQUFDLENBQUM7SUFFNUIsUUFBUSxHQUFHLFFBQVEsQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDekQsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUU1QixRQUFRLEdBQUcsUUFBUSxDQUFDLHVCQUF1QixDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN6RCxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRTdCLFFBQVEsR0FBRyxRQUFRLENBQUMsdUJBQXVCLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzFELE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDL0IsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqICBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKS4gWW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZVxuICogIHdpdGggdGhlIExpY2Vuc2UuIEEgY29weSBvZiB0aGUgTGljZW5zZSBpcyBsb2NhdGVkIGF0XG4gKlxuICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiAgb3IgaW4gdGhlICdsaWNlbnNlJyBmaWxlIGFjY29tcGFueWluZyB0aGlzIGZpbGUuIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAnQVMgSVMnIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVNcbiAqICBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9uc1xuICogIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG4vLyBJbXBvcnRzXG5pbXBvcnQgKiBhcyBkZWZhdWx0cyBmcm9tICcuLi8nO1xuaW1wb3J0ICogYXMgY2RrIGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCAqIGFzIGxvZyBmcm9tICducG1sb2cnO1xuXG4vLyBOZWVkIDIgcGFydHMsIGJ1dCB0aGV5IGNhbid0IG92ZXJsYXBcbi8vIHNvIHdlIGNhbiBleHBsaWNpdGx5IGZpbmQgdGhlbSBpbiB0aGUgcmVzdWx0cy5cbmNvbnN0IHBhcnRzID0gWyAnZmlyc3Rwb3J0aW9uaXNsb25nJywgJ3NlY29uZHNlY3Rpb24nXTtcbmNvbnN0IG5vbkFscGhhUGFydHMgPSBbICdwYXJ0LW9uZScsICdwYXJ0LXR3byddO1xuXG50ZXN0KCdUZXN0IGdlbmVyYXRlUmVzb3VyY2VOYW1lIHdpdGggYSB0cnVuY2F0ZWQgcGFydCcsICgpID0+IHtcbiAgY29uc3QgcmVzdWx0ID0gZGVmYXVsdHMuZ2VuZXJhdGVSZXNvdXJjZU5hbWUocGFydHMsIDM4KTtcblxuICBleHBlY3QocmVzdWx0KS50b0NvbnRhaW4ocGFydHNbMV0pO1xuICBleHBlY3QocmVzdWx0KS5ub3QudG9Db250YWluKHBhcnRzWzBdKTtcbiAgZXhwZWN0KHJlc3VsdCkudG9Db250YWluKHBhcnRzWzBdLnNsaWNlKDAsIDEzKSk7XG5cbn0pO1xuXG50ZXN0KCdUZXN0IGdlbmVyYXRlUmVzb3VyY2VOYW1lIHdpdGggbm8gdHJ1bmNhdGVkIHBhcnRzJywgKCkgPT4ge1xuICBjb25zdCByZXN1bHQgPSBkZWZhdWx0cy5nZW5lcmF0ZVJlc291cmNlTmFtZShwYXJ0cywgMTAwKTtcblxuICBleHBlY3QocmVzdWx0KS50b0NvbnRhaW4ocGFydHNbMV0pO1xuICBleHBlY3QocmVzdWx0KS50b0NvbnRhaW4ocGFydHNbMF0pO1xuICBleHBlY3QocmVzdWx0Lmxlbmd0aCkudG9FcXVhbChwYXJ0c1swXS5sZW5ndGggKyBwYXJ0c1sxXS5sZW5ndGggKyAxMik7XG59KTtcblxudGVzdCgnVGVzdCBnZW5lcmF0ZVJlc291cmNlTmFtZSB3aXRoIG5vbiBBcGhhbnVtZXJpYycsICgpID0+IHtcbiAgY29uc3QgcmVzdWx0ID0gZGVmYXVsdHMuZ2VuZXJhdGVSZXNvdXJjZU5hbWUobm9uQWxwaGFQYXJ0cywgMTAwKTtcblxuICBleHBlY3QocmVzdWx0KS50b0NvbnRhaW4oJ3BhcnRvbmVwYXJ0dHdvJyk7XG59KTtcblxudGVzdCgnVGVzdCBnZW5lcmF0ZVJlc291cmNlTmFtZSB3aXRoIHJhbmRvbWl6ZWQgZXh0ZW5zaW9uJywgKCkgPT4ge1xuICBjb25zdCByZXN1bHRPbmUgPSBkZWZhdWx0cy5nZW5lcmF0ZVJlc291cmNlTmFtZShwYXJ0cywgNTEyLCB0cnVlKTtcbiAgY29uc3Qgc3RhcnRUaW1lID0gKG5ldyBEYXRlKCkpLmdldFRpbWUoKTtcblxuICAvLyBXZSBuZWVkIHRvIGVuc3VyZSB0aGUgdGltZSB2YWx1ZSBhcHBlbmRlZCBjaGFuZ2VzIGJldHdlZW4gY2FsbGxzXG4gIGxldCBjdXJyVGltZSA9IHN0YXJ0VGltZTtcbiAgd2hpbGUgKGN1cnJUaW1lICA9PT0gc3RhcnRUaW1lKSB7XG4gICAgY3VyclRpbWUgPSAobmV3IERhdGUoKSkuZ2V0VGltZSgpO1xuICB9XG5cbiAgY29uc3QgcmVzdWx0VHdvID0gZGVmYXVsdHMuZ2VuZXJhdGVSZXNvdXJjZU5hbWUocGFydHMsIDUxMiwgdHJ1ZSk7XG5cbiAgZXhwZWN0KHJlc3VsdE9uZSkudG9Db250YWluKHBhcnRzWzFdKTtcbiAgZXhwZWN0KHJlc3VsdE9uZSkudG9Db250YWluKHBhcnRzWzBdKTtcbiAgZXhwZWN0KHJlc3VsdFR3bykudG9Db250YWluKHBhcnRzWzFdKTtcbiAgZXhwZWN0KHJlc3VsdFR3bykudG9Db250YWluKHBhcnRzWzBdKTtcbiAgZXhwZWN0KHJlc3VsdE9uZSkubm90LnRvRXF1YWwocmVzdWx0VHdvKTtcbiAgZXhwZWN0KHJlc3VsdE9uZS5zbGljZSgwLCAtMTMpKS50b0VxdWFsKHJlc3VsdFR3by5zbGljZSgwLCAtMTMpKTtcblxufSk7XG5cbnRlc3QoJ1Rlc3QgZ2VuZXJhdGVQaHlzaWNhbE5hbWUnLCAoKSA9PiB7XG4gIGNvbnN0IHJlc3VsdCA9IGRlZmF1bHRzLmdlbmVyYXRlUGh5c2ljYWxOYW1lKCcvYXdzL3ZlbmRlZGxvZ3Mvc3RhdGVzL2NvbnN0cnVjdHMvJywgcGFydHMsIDI1NSk7XG5cbiAgLy8gVGhlIHRva2VuIG51bWJlciBpcyBub3QgY29uc3RhbnQsIHNvIG5lZWQgdG8gYmUgZmxleGlibGUgY2hlY2tpbmcgdGhpcyB2YWx1ZVxuICBjb25zdCByZWdleCA9IC9cXC9hd3NcXC92ZW5kZWRsb2dzXFwvc3RhdGVzXFwvY29uc3RydWN0c1xcL2ZpcnN0cG9ydGlvbmlzbG9uZ3NlY29uZHNlY3Rpb24tXFwke1Rva2VuXFxbVE9LRU5cXC5bMC05XStcXF19LztcbiAgZXhwZWN0KHJlc3VsdCkudG9NYXRjaChyZWdleCk7XG59KTtcblxudGVzdCgnVGVzdCB0cnVuY2F0aW9uIG9mIGdlbmVyYXRlUGh5c2ljYWxOYW1lJywgKCkgPT4ge1xuICBjb25zdCBsb25nUGFydHMgPSBbIC4uLnBhcnRzLCAuLi5wYXJ0cywgLi4ucGFydHMsIC4uLnBhcnRzLCAuLi5wYXJ0cyBdO1xuICBjb25zdCBwcmVmaXggPSAnL2F3cy92ZW5kZWRsb2dzL3N0YXRlcy9jb25zdHJ1Y3RzLyc7XG4gIGNvbnN0IGxlbmd0aE9mR3VpZCA9IDM2O1xuICBjb25zdCBtYXhOYW1lTGVuZ3RoID0gMTI1O1xuXG4gIGNvbnN0IHJlc3VsdCA9IGRlZmF1bHRzLmdlbmVyYXRlUGh5c2ljYWxOYW1lKHByZWZpeCwgbG9uZ1BhcnRzLCBtYXhOYW1lTGVuZ3RoKTtcblxuICBjb25zdCBmaXhlZFBvcnRpb24gPSByZXN1bHQuc3BsaXQoJyQnKVswXTtcbiAgZXhwZWN0KGZpeGVkUG9ydGlvbi5sZW5ndGgpLnRvRXF1YWwobWF4TmFtZUxlbmd0aCAtIGxlbmd0aE9mR3VpZCk7XG59KTtcblxudGVzdCgnVGVzdCBnZW5lcmF0ZUludGVnU3RhY2tOYW1lJywgKCkgPT4ge1xuICBjb25zdCByZXN1bHQgPSBkZWZhdWx0cy5nZW5lcmF0ZUludGVnU3RhY2tOYW1lKCdpbnRlZy5hcGlnYXRld2F5LWR5bmFtb2RiLUNSVUQuanMnKTtcbiAgZXhwZWN0KHJlc3VsdCkudG9Db250YWluKCdhcGlnYXRld2F5LWR5bmFtb2RiLUNSVUQnKTtcblxuICBjb25zdCByZXN1bHQxID0gZGVmYXVsdHMuZ2VuZXJhdGVJbnRlZ1N0YWNrTmFtZSgnaW50ZWcub3ZlcnJpZGVfYXV0aF9hcGlfa2V5cy50cycpO1xuICBleHBlY3QocmVzdWx0MSkudG9Db250YWluKCdvdmVycmlkZS1hdXRoLWFwaS1rZXlzJyk7XG59KTtcblxudGVzdCgnVGVzdCBjb25zb2xpZGF0ZSBwcm9wcyB3aXRoIGFsbCBhcmdzJywgKCkgPT4ge1xuICBqZXN0LnJlc2V0TW9kdWxlcygpO1xuICBqZXN0LmNsZWFyQWxsTW9ja3MoKTtcbiAgcHJvY2Vzcy5lbnYub3ZlcnJpZGVXYXJuaW5nc0VuYWJsZWQgPSAndHJ1ZSc7XG5cbiAgY29uc3QgYXJnMSA9IHtcbiAgICB2YWwxOiAxMSxcbiAgICB2YWwyOiAxMixcbiAgICB2YWwzOiAxMyxcbiAgfTtcblxuICBjb25zdCBhcmcyID0ge1xuICAgIHZhbDE6IDIxLFxuICAgIHZhbDI6IDIyLFxuICB9O1xuXG4gIGNvbnN0IGFyZzMgPSB7XG4gICAgdmFsMTogMzEsXG4gIH07XG5cbiAgY29uc3Qgd2FybiA9IGplc3Quc3B5T24obG9nLCAnd2FybicpO1xuICBjb25zdCByZXN1bHQgPSBkZWZhdWx0cy5jb25zb2xpZGF0ZVByb3BzKGFyZzEsIGFyZzIsIGFyZzMpO1xuXG4gIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoe1xuICAgIHZhbDE6IDMxLFxuICAgIHZhbDI6IDIyLFxuICAgIHZhbDM6IDEzLFxuICB9KTtcblxuICBleHBlY3Qod2FybikudG9CZUNhbGxlZFRpbWVzKDIpO1xuXG59KTtcblxudGVzdCgnVGVzdCBjb25zb2xpZGF0ZSBwcm9wcyB3aXRoIGZpcnN0IGFuZCB0aGlyZCBhcmdzJywgKCkgPT4ge1xuICBqZXN0LnJlc2V0TW9kdWxlcygpO1xuICBqZXN0LmNsZWFyQWxsTW9ja3MoKTtcbiAgcHJvY2Vzcy5lbnYub3ZlcnJpZGVXYXJuaW5nc0VuYWJsZWQgPSAndHJ1ZSc7XG5cbiAgY29uc3QgYXJnMSA9IHtcbiAgICB2YWwxOiAxMSxcbiAgICB2YWwyOiAxMixcbiAgICB2YWwzOiAxMyxcbiAgfTtcblxuICBjb25zdCBhcmczID0ge1xuICAgIHZhbDE6IDMxLFxuICB9O1xuXG4gIGNvbnN0IHdhcm4gPSBqZXN0LnNweU9uKGxvZywgJ3dhcm4nKTtcbiAgY29uc3QgcmVzdWx0ID0gZGVmYXVsdHMuY29uc29saWRhdGVQcm9wcyhhcmcxLCB1bmRlZmluZWQsIGFyZzMpO1xuXG4gIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoe1xuICAgIHZhbDE6IDMxLFxuICAgIHZhbDI6IDEyLFxuICAgIHZhbDM6IDEzLFxuICB9KTtcblxuICBleHBlY3Qod2FybikudG9CZUNhbGxlZFRpbWVzKDApO1xuXG59KTtcblxudGVzdCgnVGVzdCBjb25zb2xpZGF0ZSBwcm9wcyB3aXRoIGZpcnN0IGFuZCBzZWNvbmQgYXJncycsICgpID0+IHtcbiAgamVzdC5yZXNldE1vZHVsZXMoKTtcbiAgamVzdC5jbGVhckFsbE1vY2tzKCk7XG4gIHByb2Nlc3MuZW52Lm92ZXJyaWRlV2FybmluZ3NFbmFibGVkID0gJ3RydWUnO1xuXG4gIGNvbnN0IGFyZzEgPSB7XG4gICAgdmFsMTogMTEsXG4gICAgdmFsMjogMTIsXG4gICAgdmFsMzogMTMsXG4gIH07XG5cbiAgY29uc3QgYXJnMiA9IHtcbiAgICB2YWwxOiAyMSxcbiAgICB2YWwyOiAyMixcbiAgfTtcblxuICBjb25zdCB3YXJuID0gamVzdC5zcHlPbihsb2csICd3YXJuJyk7XG4gIGNvbnN0IHJlc3VsdCA9IGRlZmF1bHRzLmNvbnNvbGlkYXRlUHJvcHMoYXJnMSwgYXJnMik7XG5cbiAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbCh7XG4gICAgdmFsMTogMjEsXG4gICAgdmFsMjogMjIsXG4gICAgdmFsMzogMTMsXG4gIH0pO1xuXG4gIGV4cGVjdCh3YXJuKS50b0JlQ2FsbGVkVGltZXMoMik7XG5cbn0pO1xuXG50ZXN0KCdUZXN0IGNvbnNvbGlkYXRlIHByb3BzIHdpdGggb25lIGFyZycsICgpID0+IHtcbiAgamVzdC5yZXNldE1vZHVsZXMoKTtcbiAgamVzdC5jbGVhckFsbE1vY2tzKCk7XG4gIHByb2Nlc3MuZW52Lm92ZXJyaWRlV2FybmluZ3NFbmFibGVkID0gJ3RydWUnO1xuXG4gIGNvbnN0IGFyZzEgPSB7XG4gICAgdmFsMTogMTEsXG4gICAgdmFsMjogMTIsXG4gICAgdmFsMzogMTMsXG4gIH07XG5cbiAgY29uc3Qgd2FybiA9IGplc3Quc3B5T24obG9nLCAnd2FybicpO1xuICBjb25zdCByZXN1bHQgPSBkZWZhdWx0cy5jb25zb2xpZGF0ZVByb3BzKGFyZzEpO1xuXG4gIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoYXJnMSk7XG5cbiAgZXhwZWN0KHdhcm4pLnRvQmVDYWxsZWRUaW1lcygwKTtcblxufSk7XG5cbnRlc3QoJ1Rlc3QgZ2VuZXJhdGVOYW1lIHN1bm55IGRheSBmb3IgY3VycmVudCBjb25zdHJ1Y3Qgd2l0aCB1bmRlZmluZWQgbmFtZSBhcmd1bWVudCcsICgpID0+IHtcbiAgY29uc3Qgc3RhY2sgPSBuZXcgY2RrLlN0YWNrKHVuZGVmaW5lZCwgXCJzb21lLW5ldy1pZFwiKTtcblxuICBjb25zdCBuZXdOYW1lID0gZGVmYXVsdHMuZ2VuZXJhdGVOYW1lKHN0YWNrKTtcbiAgLy8gNSBpcyBub3Qgc3BlY2lmaWMsIGp1c3QgY2hlY2tpbmcgdGhlIG5hbWUgaXMgc2V2ZXJhbCBjaGFyYWN0ZXJzIGxvbmdlciB0aGFuIGp1c3QgYSBDUi9MRlxuICBleHBlY3QobmV3TmFtZS5sZW5ndGgpLnRvQmVHcmVhdGVyVGhhbig1KTtcbn0pO1xuXG50ZXN0KCdUZXN0IGdlbmVyYXRlTmFtZSBzdW5ueSBkYXkgZm9yIGN1cnJlbnQgY29uc3RydWN0JywgKCkgPT4ge1xuICBjb25zdCBzdGFjayA9IG5ldyBjZGsuU3RhY2sodW5kZWZpbmVkLCBcInNvbWUtbmV3LWlkXCIpO1xuXG4gIGNvbnN0IG5ld05hbWUgPSBkZWZhdWx0cy5nZW5lcmF0ZU5hbWUoc3RhY2ssIFwiXCIpO1xuICBleHBlY3QobmV3TmFtZS5sZW5ndGgpLnRvQmVHcmVhdGVyVGhhbig1KTtcbn0pO1xuXG50ZXN0KCdUZXN0IGdlbmVyYXRlTmFtZSBzdW5ueSBkYXkgZm9yIGNoaWxkIGNvbnN0cnVjdCcsICgpID0+IHtcbiAgY29uc3Qgc3RhY2sgPSBuZXcgY2RrLlN0YWNrKHVuZGVmaW5lZCwgXCJzb21lLW5ldy1pZFwiKTtcblxuICBjb25zdCBuZXdOYW1lID0gZGVmYXVsdHMuZ2VuZXJhdGVOYW1lKHN0YWNrLCBcImNoaWxkXCIpO1xuICBleHBlY3QobmV3TmFtZS5sZW5ndGgpLnRvQmVHcmVhdGVyVGhhbig1KTtcbiAgZXhwZWN0KG5ld05hbWUuaW5jbHVkZXMobmV3TmFtZSkpLnRvQmUodHJ1ZSk7XG59KTtcblxudGVzdCgnVGVzdCBnZW5lcmF0ZU5hbWUgbG9uZ2VyIHRoYW4gNjQgY2hhcmFjdGVycycsICgpID0+IHtcbiAgY29uc3Qgc3RhY2sgPSBuZXcgY2RrLlN0YWNrKHVuZGVmaW5lZCwgXCJzb21lLW5ldy1pZFwiKTtcbiAgY29uc3Qgc2V2ZW50eUNoYXJhY3Rlck5hbWUgPSAnMTIzNDU2Nzg5LTEyMzQ1Njc4OS0xMjM0NTY3ODktMTIzNDU2Nzg5LTEyMzQ1Njc4OS0xMjM0NTY3ODktMTIzNDU2Nzg5LSc7XG4gIGNvbnN0IG5ld05hbWUgPSBkZWZhdWx0cy5nZW5lcmF0ZU5hbWUoc3RhY2ssIHNldmVudHlDaGFyYWN0ZXJOYW1lKTtcbiAgZXhwZWN0KG5ld05hbWUubGVuZ3RoKS50b0VxdWFsKDY0KTtcbn0pO1xuXG50ZXN0KCdUZXN0IGdlbmVyYXRlTmFtZSB1bmlxdWVuZXNzJywgKCkgPT4ge1xuICBjb25zdCBzdGFja09uZSA9IG5ldyBjZGsuU3RhY2sodW5kZWZpbmVkLCBcInNvbWUtbmV3LWlkXCIpO1xuICBjb25zdCBzdGFja1R3byA9IG5ldyBjZGsuU3RhY2sodW5kZWZpbmVkLCBcIm90aGVyLWlkXCIpO1xuXG4gIGNvbnN0IG5hbWVPbmUgPSBkZWZhdWx0cy5nZW5lcmF0ZU5hbWUoc3RhY2tPbmUsIFwiXCIpO1xuICBjb25zdCBuYW1lVHdvID0gZGVmYXVsdHMuZ2VuZXJhdGVOYW1lKHN0YWNrVHdvLCBcIlwiKTtcbiAgZXhwZWN0KG5hbWVPbmUgPT09IG5hbWVUd28pLnRvQmUoZmFsc2UpO1xufSk7XG5cbnRlc3QoJ1Rlc3Qgc3VjY2Vzc2Z1bCBDaGVja0xpc3RWYWx1ZXMnLCAoKSA9PiB7XG5cbiAgY29uc3QgYXBwID0gKCkgPT4ge1xuICAgIGRlZmF1bHRzLkNoZWNrTGlzdFZhbHVlcyhbJ29uZScsICd0d28nLCAnZm91ciddLCBbJ2ZvdXInLCAnb25lJ10sICd0ZXN0IHZhbHVlJyk7XG4gIH07XG5cbiAgLy8gQXNzZXJ0aW9uXG4gIGV4cGVjdChhcHApLm5vdC50b1Rocm93RXJyb3IoKTtcbn0pO1xuXG50ZXN0KCdUZXN0IGZhaWwgT3BlblNlYXJjaCBpbXByb3BlciB2cGMgc3BlY2lmaWNhdGlvbicsICgpID0+IHtcblxuICBjb25zdCBwcm9wczogZGVmYXVsdHMuT3BlblNlYXJjaFByb3BzID0ge1xuICAgIG9wZW5TZWFyY2hEb21haW5Qcm9wczoge1xuICAgICAgdnBjT3B0aW9uczoge31cbiAgICB9LFxuICB9O1xuXG4gIGNvbnN0IGFwcCA9ICgpID0+IHtcbiAgICBkZWZhdWx0cy5DaGVja09wZW5TZWFyY2hQcm9wcyhwcm9wcyk7XG4gIH07XG5cbiAgLy8gQXNzZXJ0aW9uXG4gIGV4cGVjdChhcHApLnRvVGhyb3dFcnJvcignRXJyb3IgLSBEZWZpbmUgVlBDIHVzaW5nIGNvbnN0cnVjdCBwYXJhbWV0ZXJzIG5vdCB0aGUgT3BlblNlYXJjaCBTZXJ2aWNlIHByb3BzXFxuJyk7XG59KTtcblxudGVzdCgnVGVzdCB1bnN1Y2Nlc3NmdWwgQ2hlY2tMaXN0VmFsdWVzJywgKCkgPT4ge1xuXG4gIGNvbnN0IGFwcCA9ICgpID0+IHtcbiAgICBkZWZhdWx0cy5DaGVja0xpc3RWYWx1ZXMoWydvbmUnLCAndHdvJywgJ2ZvdXInXSwgWydmb3VyJywgJ3RocmVlJ10sICd0ZXN0IHZhbHVlJyk7XG4gIH07XG5cbiAgLy8gQXNzZXJ0aW9uXG4gIGV4cGVjdChhcHApLnRvVGhyb3dFcnJvcignSW52YWxpZCB0ZXN0IHZhbHVlIHN1Ym1pdHRlZCAtIHRocmVlJyk7XG59KTtcblxudGVzdCgnQ29uc29saWRhdGVQcm9wcyBkb2VzIG5vdCBnZW5lcmF0ZSB3YXJuaW5ncyBmb3IgY29uc3RydWN0IHByb3BzIG92ZXJyaWRlcycsICgpID0+IHtcbiAgamVzdC5yZXNldE1vZHVsZXMoKTtcbiAgamVzdC5jbGVhckFsbE1vY2tzKCk7XG4gIHByb2Nlc3MuZW52Lm92ZXJyaWRlV2FybmluZ3NFbmFibGVkID0gJ3RydWUnO1xuXG4gIGNvbnN0IGRlZmF1bHRQcm9wcyA9IHtcbiAgICB2YWwxOiAnb25lJ1xuICB9O1xuXG4gIGNvbnN0IGNsaWVudFByb3BzID0ge1xuICAgIHZhbDE6ICd0d28nLFxuICAgIHZhbDI6ICd0aHJlZSdcbiAgfTtcblxuICBjb25zdCBjb25zdHJ1Y3RQcm9wcyA9IHtcbiAgICB2YWwyOiAnZm91cidcbiAgfTtcblxuICBjb25zdCB3YXJuID0gamVzdC5zcHlPbihsb2csICd3YXJuJyk7XG4gIGRlZmF1bHRzLmNvbnNvbGlkYXRlUHJvcHMoZGVmYXVsdFByb3BzLCBjbGllbnRQcm9wcywgIGNvbnN0cnVjdFByb3BzKTtcblxuICAvLyBBc3NlcnRcbiAgZXhwZWN0KHdhcm4pLnRvQmVDYWxsZWRUaW1lcygxKTtcblxufSk7XG5cbnRlc3QoJ0NoZWNrQm9vbGVhbldpdGhEZWZhdWx0JywgKCkgPT4ge1xuICBsZXQgcmVzcG9uc2U7XG5cbiAgcmVzcG9uc2UgPSBkZWZhdWx0cy5DaGVja0Jvb2xlYW5XaXRoRGVmYXVsdCh1bmRlZmluZWQsIHRydWUpO1xuICBleHBlY3QocmVzcG9uc2UpLnRvQmUodHJ1ZSk7XG5cbiAgcmVzcG9uc2UgPSBkZWZhdWx0cy5DaGVja0Jvb2xlYW5XaXRoRGVmYXVsdCh1bmRlZmluZWQsIGZhbHNlKTtcbiAgZXhwZWN0KHJlc3BvbnNlKS50b0JlKGZhbHNlKTtcblxuICByZXNwb25zZSA9IGRlZmF1bHRzLkNoZWNrQm9vbGVhbldpdGhEZWZhdWx0KHRydWUsIHRydWUpO1xuICBleHBlY3QocmVzcG9uc2UpLnRvQmUodHJ1ZSk7XG5cbiAgcmVzcG9uc2UgPSBkZWZhdWx0cy5DaGVja0Jvb2xlYW5XaXRoRGVmYXVsdCh0cnVlLCBmYWxzZSk7XG4gIGV4cGVjdChyZXNwb25zZSkudG9CZSh0cnVlKTtcblxuICByZXNwb25zZSA9IGRlZmF1bHRzLkNoZWNrQm9vbGVhbldpdGhEZWZhdWx0KGZhbHNlLCB0cnVlKTtcbiAgZXhwZWN0KHJlc3BvbnNlKS50b0JlKGZhbHNlKTtcblxuICByZXNwb25zZSA9IGRlZmF1bHRzLkNoZWNrQm9vbGVhbldpdGhEZWZhdWx0KGZhbHNlLCBmYWxzZSk7XG4gIGV4cGVjdChyZXNwb25zZSkudG9CZShmYWxzZSk7XG59KTsiXX0=
@@ -23,7 +23,7 @@ test("Test minimal deployment with no properties", () => {
23
23
  const stack = new aws_cdk_lib_1.Stack();
24
24
  // Build VPC
25
25
  defaults.buildVpc(stack, {
26
- defaultVpcProps: vpc_defaults_1.DefaultIsolatedVpcProps(),
26
+ defaultVpcProps: (0, vpc_defaults_1.DefaultIsolatedVpcProps)(),
27
27
  });
28
28
  const template = assertions_1.Template.fromStack(stack);
29
29
  template.hasResourceProperties('AWS::EC2::VPC', {
@@ -38,7 +38,7 @@ test('Test deployment w/ user provided custom properties', () => {
38
38
  const stack = new aws_cdk_lib_1.Stack();
39
39
  // Build VPC
40
40
  defaults.buildVpc(stack, {
41
- defaultVpcProps: vpc_defaults_1.DefaultPublicPrivateVpcProps(),
41
+ defaultVpcProps: (0, vpc_defaults_1.DefaultPublicPrivateVpcProps)(),
42
42
  userVpcProps: {
43
43
  enableDnsHostnames: false,
44
44
  enableDnsSupport: false,
@@ -56,7 +56,7 @@ test('Test deployment w/ construct provided custom properties', () => {
56
56
  const stack = new aws_cdk_lib_1.Stack();
57
57
  // Build VPC
58
58
  defaults.buildVpc(stack, {
59
- defaultVpcProps: vpc_defaults_1.DefaultPublicPrivateVpcProps(),
59
+ defaultVpcProps: (0, vpc_defaults_1.DefaultPublicPrivateVpcProps)(),
60
60
  constructVpcProps: {
61
61
  enableDnsHostnames: true,
62
62
  enableDnsSupport: true,
@@ -74,7 +74,7 @@ test('Test deployment w/ construct and user provided custom properties', () => {
74
74
  const stack = new aws_cdk_lib_1.Stack();
75
75
  // Build VPC
76
76
  defaults.buildVpc(stack, {
77
- defaultVpcProps: vpc_defaults_1.DefaultPublicPrivateVpcProps(),
77
+ defaultVpcProps: (0, vpc_defaults_1.DefaultPublicPrivateVpcProps)(),
78
78
  userVpcProps: {
79
79
  enableDnsHostnames: false,
80
80
  enableDnsSupport: false,
@@ -97,7 +97,7 @@ test('Test deployment w/ construct and user provided custom properties', () => {
97
97
  const stack = new aws_cdk_lib_1.Stack();
98
98
  // Build VPC
99
99
  const v = defaults.buildVpc(stack, {
100
- defaultVpcProps: vpc_defaults_1.DefaultPublicPrivateVpcProps(),
100
+ defaultVpcProps: (0, vpc_defaults_1.DefaultPublicPrivateVpcProps)(),
101
101
  userVpcProps: {
102
102
  enableDnsHostnames: false,
103
103
  enableDnsSupport: false,
@@ -116,7 +116,7 @@ test('Test deployment w/ construct and user provided custom properties', () => {
116
116
  ],
117
117
  },
118
118
  });
119
- vpc_helper_1.AddAwsServiceEndpoint(stack, v, defaults.ServiceEndpointTypes.SQS);
119
+ (0, vpc_helper_1.AddAwsServiceEndpoint)(stack, v, defaults.ServiceEndpointTypes.SQS);
120
120
  // Expect 2 isolated subnets (usual error condition is 2 public/2 private)
121
121
  const template = assertions_1.Template.fromStack(stack);
122
122
  template.resourceCountIs('AWS::EC2::Subnet', 2);
@@ -128,7 +128,7 @@ test('Test deployment w/ existing VPC provided', () => {
128
128
  // Build VPC
129
129
  const testExistingVpc = defaults.getTestVpc(stack);
130
130
  const newVpc = defaults.buildVpc(stack, {
131
- defaultVpcProps: vpc_defaults_1.DefaultPublicPrivateVpcProps(),
131
+ defaultVpcProps: (0, vpc_defaults_1.DefaultPublicPrivateVpcProps)(),
132
132
  existingVpc: testExistingVpc,
133
133
  });
134
134
  expect(newVpc).toBe(testExistingVpc);
@@ -138,11 +138,11 @@ test('Test adding Gateway Endpoint', () => {
138
138
  const stack = new aws_cdk_lib_1.Stack();
139
139
  // Build VPC
140
140
  const testVpc = defaults.buildVpc(stack, {
141
- defaultVpcProps: vpc_defaults_1.DefaultPublicPrivateVpcProps(),
141
+ defaultVpcProps: (0, vpc_defaults_1.DefaultPublicPrivateVpcProps)(),
142
142
  });
143
- vpc_helper_1.AddAwsServiceEndpoint(stack, testVpc, vpc_helper_1.ServiceEndpointTypes.DYNAMODB);
144
- vpc_helper_1.AddAwsServiceEndpoint(stack, testVpc, vpc_helper_1.ServiceEndpointTypes.SQS);
145
- vpc_helper_1.AddAwsServiceEndpoint(stack, testVpc, vpc_helper_1.ServiceEndpointTypes.SNS);
143
+ (0, vpc_helper_1.AddAwsServiceEndpoint)(stack, testVpc, vpc_helper_1.ServiceEndpointTypes.DYNAMODB);
144
+ (0, vpc_helper_1.AddAwsServiceEndpoint)(stack, testVpc, vpc_helper_1.ServiceEndpointTypes.SQS);
145
+ (0, vpc_helper_1.AddAwsServiceEndpoint)(stack, testVpc, vpc_helper_1.ServiceEndpointTypes.SNS);
146
146
  // Assertion
147
147
  const template = assertions_1.Template.fromStack(stack);
148
148
  template.hasResourceProperties('AWS::EC2::VPCEndpoint', {
@@ -158,9 +158,9 @@ test('Test adding Interface Endpoint', () => {
158
158
  const stack = new aws_cdk_lib_1.Stack();
159
159
  // Build VPC
160
160
  const testVpc = defaults.buildVpc(stack, {
161
- defaultVpcProps: vpc_defaults_1.DefaultPublicPrivateVpcProps(),
161
+ defaultVpcProps: (0, vpc_defaults_1.DefaultPublicPrivateVpcProps)(),
162
162
  });
163
- vpc_helper_1.AddAwsServiceEndpoint(stack, testVpc, vpc_helper_1.ServiceEndpointTypes.SNS);
163
+ (0, vpc_helper_1.AddAwsServiceEndpoint)(stack, testVpc, vpc_helper_1.ServiceEndpointTypes.SNS);
164
164
  // Assertion
165
165
  assertions_1.Template.fromStack(stack).hasResourceProperties('AWS::EC2::VPCEndpoint', {
166
166
  VpcEndpointType: 'Interface',
@@ -171,9 +171,9 @@ test('Test adding SAGEMAKER_RUNTIME Interface Endpoint', () => {
171
171
  const stack = new aws_cdk_lib_1.Stack();
172
172
  // Build VPC
173
173
  const testVpc = defaults.buildVpc(stack, {
174
- defaultVpcProps: vpc_defaults_1.DefaultPublicPrivateVpcProps(),
174
+ defaultVpcProps: (0, vpc_defaults_1.DefaultPublicPrivateVpcProps)(),
175
175
  });
176
- vpc_helper_1.AddAwsServiceEndpoint(stack, testVpc, vpc_helper_1.ServiceEndpointTypes.SAGEMAKER_RUNTIME);
176
+ (0, vpc_helper_1.AddAwsServiceEndpoint)(stack, testVpc, vpc_helper_1.ServiceEndpointTypes.SAGEMAKER_RUNTIME);
177
177
  // Assertion
178
178
  assertions_1.Template.fromStack(stack).hasResourceProperties('AWS::EC2::VPCEndpoint', {
179
179
  VpcEndpointType: 'Interface',
@@ -184,10 +184,10 @@ test('Test adding a second Endpoint of same service', () => {
184
184
  const stack = new aws_cdk_lib_1.Stack();
185
185
  // Build VPC
186
186
  const testVpc = defaults.buildVpc(stack, {
187
- defaultVpcProps: vpc_defaults_1.DefaultPublicPrivateVpcProps(),
187
+ defaultVpcProps: (0, vpc_defaults_1.DefaultPublicPrivateVpcProps)(),
188
188
  });
189
- vpc_helper_1.AddAwsServiceEndpoint(stack, testVpc, vpc_helper_1.ServiceEndpointTypes.SNS);
190
- vpc_helper_1.AddAwsServiceEndpoint(stack, testVpc, vpc_helper_1.ServiceEndpointTypes.SNS);
189
+ (0, vpc_helper_1.AddAwsServiceEndpoint)(stack, testVpc, vpc_helper_1.ServiceEndpointTypes.SNS);
190
+ (0, vpc_helper_1.AddAwsServiceEndpoint)(stack, testVpc, vpc_helper_1.ServiceEndpointTypes.SNS);
191
191
  // Assertion
192
192
  assertions_1.Template.fromStack(stack).resourceCountIs('AWS::EC2::VPCEndpoint', 1);
193
193
  });
@@ -196,10 +196,10 @@ test('Test adding bad Endpoint', () => {
196
196
  const stack = new aws_cdk_lib_1.Stack();
197
197
  // Build VPC
198
198
  const testVpc = defaults.buildVpc(stack, {
199
- defaultVpcProps: vpc_defaults_1.DefaultPublicPrivateVpcProps(),
199
+ defaultVpcProps: (0, vpc_defaults_1.DefaultPublicPrivateVpcProps)(),
200
200
  });
201
201
  const app = () => {
202
- vpc_helper_1.AddAwsServiceEndpoint(stack, testVpc, 'string');
202
+ (0, vpc_helper_1.AddAwsServiceEndpoint)(stack, testVpc, 'string');
203
203
  };
204
204
  // Assertion
205
205
  expect(app).toThrowError();
@@ -209,9 +209,9 @@ test('Test adding Events Interface Endpoint', () => {
209
209
  const stack = new aws_cdk_lib_1.Stack();
210
210
  // Build VPC
211
211
  const testVpc = defaults.buildVpc(stack, {
212
- defaultVpcProps: vpc_defaults_1.DefaultPublicPrivateVpcProps(),
212
+ defaultVpcProps: (0, vpc_defaults_1.DefaultPublicPrivateVpcProps)(),
213
213
  });
214
- vpc_helper_1.AddAwsServiceEndpoint(stack, testVpc, vpc_helper_1.ServiceEndpointTypes.EVENTS);
214
+ (0, vpc_helper_1.AddAwsServiceEndpoint)(stack, testVpc, vpc_helper_1.ServiceEndpointTypes.EVENTS);
215
215
  // Assertion
216
216
  assertions_1.Template.fromStack(stack).hasResourceProperties('AWS::EC2::VPCEndpoint', {
217
217
  VpcEndpointType: 'Interface',
@@ -248,4 +248,4 @@ test('Test fail Vpc check with vpcProps', () => {
248
248
  // Assertion
249
249
  expect(app).toThrowError('Error - Either provide an existingVpc or some combination of deployVpc and vpcProps, but not both.\n');
250
250
  });
251
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidnBjLWhlbHBlci50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsidnBjLWhlbHBlci50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7R0FXRzs7QUFFSCw2Q0FBb0M7QUFDcEMsZ0NBQWdDO0FBQ2hDLDJDQUEyQztBQUMzQyx1REFBa0Q7QUFDbEQsa0RBQWdGO0FBQ2hGLHNEQUE0RjtBQUU1RixJQUFJLENBQUMsNENBQTRDLEVBQUUsR0FBRyxFQUFFO0lBQ3RELFFBQVE7SUFDUixNQUFNLEtBQUssR0FBRyxJQUFJLG1CQUFLLEVBQUUsQ0FBQztJQUMxQixZQUFZO0lBQ1osUUFBUSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUU7UUFDdkIsZUFBZSxFQUFFLHNDQUF1QixFQUFFO0tBQzNDLENBQUMsQ0FBQztJQUVILE1BQU0sUUFBUSxHQUFHLHFCQUFRLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzNDLFFBQVEsQ0FBQyxxQkFBcUIsQ0FBQyxlQUFlLEVBQUU7UUFDOUMsa0JBQWtCLEVBQUUsSUFBSTtRQUN4QixnQkFBZ0IsRUFBRSxJQUFJO0tBQ3ZCLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxlQUFlLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDaEQsUUFBUSxDQUFDLGVBQWUsQ0FBQywyQkFBMkIsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMzRCxDQUFDLENBQUMsQ0FBQztBQUVILElBQUksQ0FBQyxvREFBb0QsRUFBRSxHQUFHLEVBQUU7SUFDOUQsUUFBUTtJQUNSLE1BQU0sS0FBSyxHQUFHLElBQUksbUJBQUssRUFBRSxDQUFDO0lBQzFCLFlBQVk7SUFDWixRQUFRLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRTtRQUN2QixlQUFlLEVBQUUsMkNBQTRCLEVBQUU7UUFDL0MsWUFBWSxFQUFFO1lBQ1osa0JBQWtCLEVBQUUsS0FBSztZQUN6QixnQkFBZ0IsRUFBRSxLQUFLO1lBQ3ZCLFdBQVcsRUFBRSxHQUFHLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztTQUNwRDtLQUNGLENBQUMsQ0FBQztJQUNILHFCQUFRLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLHFCQUFxQixDQUFDLGVBQWUsRUFBRTtRQUMvRCxTQUFTLEVBQUUsZ0JBQWdCO1FBQzNCLGtCQUFrQixFQUFFLEtBQUs7UUFDekIsZ0JBQWdCLEVBQUUsS0FBSztLQUN4QixDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQztBQUVILElBQUksQ0FBQyx5REFBeUQsRUFBRSxHQUFHLEVBQUU7SUFDbkUsUUFBUTtJQUNSLE1BQU0sS0FBSyxHQUFHLElBQUksbUJBQUssRUFBRSxDQUFDO0lBQzFCLFlBQVk7SUFDWixRQUFRLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRTtRQUN2QixlQUFlLEVBQUUsMkNBQTRCLEVBQUU7UUFDL0MsaUJBQWlCLEVBQUU7WUFDakIsa0JBQWtCLEVBQUUsSUFBSTtZQUN4QixnQkFBZ0IsRUFBRSxJQUFJO1lBQ3RCLFdBQVcsRUFBRSxHQUFHLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztTQUNwRDtLQUNGLENBQUMsQ0FBQztJQUNILHFCQUFRLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLHFCQUFxQixDQUFDLGVBQWUsRUFBRTtRQUMvRCxTQUFTLEVBQUUsZ0JBQWdCO1FBQzNCLGtCQUFrQixFQUFFLElBQUk7UUFDeEIsZ0JBQWdCLEVBQUUsSUFBSTtLQUN2QixDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQztBQUVILElBQUksQ0FBQyxrRUFBa0UsRUFBRSxHQUFHLEVBQUU7SUFDNUUsUUFBUTtJQUNSLE1BQU0sS0FBSyxHQUFHLElBQUksbUJBQUssRUFBRSxDQUFDO0lBQzFCLFlBQVk7SUFDWixRQUFRLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRTtRQUN2QixlQUFlLEVBQUUsMkNBQTRCLEVBQUU7UUFDL0MsWUFBWSxFQUFFO1lBQ1osa0JBQWtCLEVBQUUsS0FBSztZQUN6QixnQkFBZ0IsRUFBRSxLQUFLO1lBQ3ZCLFdBQVcsRUFBRSxHQUFHLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUM7U0FDakQ7UUFDRCxpQkFBaUIsRUFBRTtZQUNqQixrQkFBa0IsRUFBRSxLQUFLO1lBQ3pCLGdCQUFnQixFQUFFLEtBQUs7WUFDdkIsV0FBVyxFQUFFLEdBQUcsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDO1NBQ3BEO0tBQ0YsQ0FBQyxDQUFDO0lBQ0gscUJBQVEsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMscUJBQXFCLENBQUMsZUFBZSxFQUFFO1FBQy9ELFNBQVMsRUFBRSxnQkFBZ0I7UUFDM0Isa0JBQWtCLEVBQUUsS0FBSztRQUN6QixnQkFBZ0IsRUFBRSxLQUFLO0tBQ3hCLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDO0FBRUgsSUFBSSxDQUFDLGtFQUFrRSxFQUFFLEdBQUcsRUFBRTtJQUM1RSxRQUFRO0lBQ1IsTUFBTSxLQUFLLEdBQUcsSUFBSSxtQkFBSyxFQUFFLENBQUM7SUFDMUIsWUFBWTtJQUNaLE1BQU0sQ0FBQyxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFO1FBQ2pDLGVBQWUsRUFBRSwyQ0FBNEIsRUFBRTtRQUMvQyxZQUFZLEVBQUU7WUFDWixrQkFBa0IsRUFBRSxLQUFLO1lBQ3pCLGdCQUFnQixFQUFFLEtBQUs7WUFDdkIsV0FBVyxFQUFFLEdBQUcsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQztTQUNqRDtRQUNELGlCQUFpQixFQUFFO1lBQ2pCLGtCQUFrQixFQUFFLElBQUk7WUFDeEIsZ0JBQWdCLEVBQUUsSUFBSTtZQUN0QixXQUFXLEVBQUUsQ0FBQztZQUNkLG1CQUFtQixFQUFFO2dCQUNuQjtvQkFDRSxRQUFRLEVBQUUsRUFBRTtvQkFDWixJQUFJLEVBQUUsVUFBVTtvQkFDaEIsVUFBVSxFQUFFLEdBQUcsQ0FBQyxVQUFVLENBQUMsZ0JBQWdCO2lCQUM1QzthQUNGO1NBQ0Y7S0FDRixDQUFDLENBQUM7SUFDSCxrQ0FBcUIsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUVuRSwwRUFBMEU7SUFDMUUsTUFBTSxRQUFRLEdBQUcscUJBQVEsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDM0MsUUFBUSxDQUFDLGVBQWUsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNoRCxRQUFRLENBQUMsZUFBZSxDQUFDLDJCQUEyQixFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzNELENBQUMsQ0FBQyxDQUFDO0FBRUgsSUFBSSxDQUFDLDBDQUEwQyxFQUFFLEdBQUcsRUFBRTtJQUNwRCxRQUFRO0lBQ1IsTUFBTSxLQUFLLEdBQUcsSUFBSSxtQkFBSyxFQUFFLENBQUM7SUFDMUIsWUFBWTtJQUNaLE1BQU0sZUFBZSxHQUFHLFFBQVEsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFbkQsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUU7UUFDdEMsZUFBZSxFQUFFLDJDQUE0QixFQUFFO1FBQy9DLFdBQVcsRUFBRSxlQUFlO0tBQzdCLENBQUMsQ0FBQztJQUVILE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7QUFDdkMsQ0FBQyxDQUFDLENBQUM7QUFFSCxJQUFJLENBQUMsOEJBQThCLEVBQUUsR0FBRyxFQUFFO0lBQ3hDLFFBQVE7SUFDUixNQUFNLEtBQUssR0FBRyxJQUFJLG1CQUFLLEVBQUUsQ0FBQztJQUMxQixZQUFZO0lBQ1osTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUU7UUFDdkMsZUFBZSxFQUFFLDJDQUE0QixFQUFFO0tBQ2hELENBQUMsQ0FBQztJQUVILGtDQUFxQixDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsaUNBQW9CLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDckUsa0NBQXFCLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxpQ0FBb0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNoRSxrQ0FBcUIsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLGlDQUFvQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRWhFLFlBQVk7SUFDWixNQUFNLFFBQVEsR0FBRyxxQkFBUSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMzQyxRQUFRLENBQUMscUJBQXFCLENBQUMsdUJBQXVCLEVBQUU7UUFDdEQsZUFBZSxFQUFFLFNBQVM7S0FDM0IsQ0FBQyxDQUFDO0lBQ0gsUUFBUSxDQUFDLHFCQUFxQixDQUFDLHVCQUF1QixFQUFFO1FBQ3RELGVBQWUsRUFBRSxXQUFXO0tBQzdCLENBQUMsQ0FBQztJQUNILFFBQVEsQ0FBQyxlQUFlLENBQUMsdUJBQXVCLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDdkQsQ0FBQyxDQUFDLENBQUM7QUFFSCxJQUFJLENBQUMsZ0NBQWdDLEVBQUUsR0FBRyxFQUFFO0lBQzFDLFFBQVE7SUFDUixNQUFNLEtBQUssR0FBRyxJQUFJLG1CQUFLLEVBQUUsQ0FBQztJQUMxQixZQUFZO0lBQ1osTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUU7UUFDdkMsZUFBZSxFQUFFLDJDQUE0QixFQUFFO0tBQ2hELENBQUMsQ0FBQztJQUVILGtDQUFxQixDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsaUNBQW9CLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFaEUsWUFBWTtJQUNaLHFCQUFRLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLHFCQUFxQixDQUFDLHVCQUF1QixFQUFFO1FBQ3ZFLGVBQWUsRUFBRSxXQUFXO0tBQzdCLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDO0FBRUgsSUFBSSxDQUFDLGtEQUFrRCxFQUFFLEdBQUcsRUFBRTtJQUM1RCxRQUFRO0lBQ1IsTUFBTSxLQUFLLEdBQUcsSUFBSSxtQkFBSyxFQUFFLENBQUM7SUFDMUIsWUFBWTtJQUNaLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFO1FBQ3ZDLGVBQWUsRUFBRSwyQ0FBNEIsRUFBRTtLQUNoRCxDQUFDLENBQUM7SUFFSCxrQ0FBcUIsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLGlDQUFvQixDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFFOUUsWUFBWTtJQUNaLHFCQUFRLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLHFCQUFxQixDQUFDLHVCQUF1QixFQUFFO1FBQ3ZFLGVBQWUsRUFBRSxXQUFXO0tBQzdCLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDO0FBRUgsSUFBSSxDQUFDLCtDQUErQyxFQUFFLEdBQUcsRUFBRTtJQUN6RCxRQUFRO0lBQ1IsTUFBTSxLQUFLLEdBQUcsSUFBSSxtQkFBSyxFQUFFLENBQUM7SUFDMUIsWUFBWTtJQUNaLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFO1FBQ3ZDLGVBQWUsRUFBRSwyQ0FBNEIsRUFBRTtLQUNoRCxDQUFDLENBQUM7SUFFSCxrQ0FBcUIsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLGlDQUFvQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2hFLGtDQUFxQixDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsaUNBQW9CLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFaEUsWUFBWTtJQUNaLHFCQUFRLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLGVBQWUsQ0FBQyx1QkFBdUIsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN4RSxDQUFDLENBQUMsQ0FBQztBQUVILElBQUksQ0FBQywwQkFBMEIsRUFBRSxHQUFHLEVBQUU7SUFDcEMsUUFBUTtJQUNSLE1BQU0sS0FBSyxHQUFHLElBQUksbUJBQUssRUFBRSxDQUFDO0lBQzFCLFlBQVk7SUFDWixNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRTtRQUN2QyxlQUFlLEVBQUUsMkNBQTRCLEVBQUU7S0FDaEQsQ0FBQyxDQUFDO0lBRUgsTUFBTSxHQUFHLEdBQUcsR0FBRyxFQUFFO1FBQ2Ysa0NBQXFCLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxRQUFnQyxDQUFDLENBQUM7SUFDMUUsQ0FBQyxDQUFDO0lBQ0YsWUFBWTtJQUNaLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztBQUM3QixDQUFDLENBQUMsQ0FBQztBQUVILElBQUksQ0FBQyx1Q0FBdUMsRUFBRSxHQUFHLEVBQUU7SUFDakQsUUFBUTtJQUNSLE1BQU0sS0FBSyxHQUFHLElBQUksbUJBQUssRUFBRSxDQUFDO0lBQzFCLFlBQVk7SUFDWixNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRTtRQUN2QyxlQUFlLEVBQUUsMkNBQTRCLEVBQUU7S0FDaEQsQ0FBQyxDQUFDO0lBRUgsa0NBQXFCLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxpQ0FBb0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUVuRSxZQUFZO0lBQ1oscUJBQVEsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMscUJBQXFCLENBQUMsdUJBQXVCLEVBQUU7UUFDdkUsZUFBZSxFQUFFLFdBQVc7S0FDN0IsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUM7QUFFSCw4QkFBOEI7QUFDOUIsYUFBYTtBQUNiLDhCQUE4QjtBQUM5QixJQUFJLENBQUMsb0NBQW9DLEVBQUUsR0FBRyxFQUFFO0lBQzlDLE1BQU0sS0FBSyxHQUFHLElBQUksbUJBQUssRUFBRSxDQUFDO0lBRTFCLE1BQU0sS0FBSyxHQUF5QjtRQUNsQyxTQUFTLEVBQUUsSUFBSTtRQUNmLFdBQVcsRUFBRSxRQUFRLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRTtZQUNwQyxlQUFlLEVBQUUsUUFBUSxDQUFDLDRCQUE0QixFQUFFO1NBQ3pELENBQUM7S0FDSCxDQUFDO0lBRUYsTUFBTSxHQUFHLEdBQUcsR0FBRyxFQUFFO1FBQ2YsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNoQyxDQUFDLENBQUM7SUFFRixZQUFZO0lBQ1osTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFlBQVksQ0FBQyxzR0FBc0csQ0FBQyxDQUFDO0FBQ25JLENBQUMsQ0FBQyxDQUFDO0FBRUgsSUFBSSxDQUFDLG1DQUFtQyxFQUFFLEdBQUcsRUFBRTtJQUM3QyxNQUFNLEtBQUssR0FBRyxJQUFJLG1CQUFLLEVBQUUsQ0FBQztJQUUxQixNQUFNLEtBQUssR0FBeUI7UUFDbEMsUUFBUSxFQUFFLFFBQVEsQ0FBQyw0QkFBNEIsRUFBRTtRQUNqRCxXQUFXLEVBQUUsUUFBUSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUU7WUFDcEMsZUFBZSxFQUFFLFFBQVEsQ0FBQyw0QkFBNEIsRUFBRTtTQUN6RCxDQUFDO0tBQ0gsQ0FBQztJQUVGLE1BQU0sR0FBRyxHQUFHLEdBQUcsRUFBRTtRQUNmLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDaEMsQ0FBQyxDQUFDO0lBRUYsWUFBWTtJQUNaLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxZQUFZLENBQUMsc0dBQXNHLENBQUMsQ0FBQztBQUNuSSxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpLiBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4gKiAgd2l0aCB0aGUgTGljZW5zZS4gQSBjb3B5IG9mIHRoZSBMaWNlbnNlIGlzIGxvY2F0ZWQgYXRcbiAqXG4gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqICBvciBpbiB0aGUgJ2xpY2Vuc2UnIGZpbGUgYWNjb21wYW55aW5nIHRoaXMgZmlsZS4gVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICdBUyBJUycgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFU1xuICogIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zXG4gKiAgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7IFN0YWNrIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0ICogYXMgZGVmYXVsdHMgZnJvbSAnLi4vJztcbmltcG9ydCAqIGFzIGVjMiBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZWMyJztcbmltcG9ydCB7IFRlbXBsYXRlIH0gZnJvbSAnYXdzLWNkay1saWIvYXNzZXJ0aW9ucyc7XG5pbXBvcnQgeyBBZGRBd3NTZXJ2aWNlRW5kcG9pbnQsIFNlcnZpY2VFbmRwb2ludFR5cGVzIH0gZnJvbSAnLi4vbGliL3ZwYy1oZWxwZXInO1xuaW1wb3J0IHsgRGVmYXVsdFB1YmxpY1ByaXZhdGVWcGNQcm9wcywgRGVmYXVsdElzb2xhdGVkVnBjUHJvcHMgfSBmcm9tICcuLi9saWIvdnBjLWRlZmF1bHRzJztcblxudGVzdChcIlRlc3QgbWluaW1hbCBkZXBsb3ltZW50IHdpdGggbm8gcHJvcGVydGllc1wiLCAoKSA9PiB7XG4gIC8vIFN0YWNrXG4gIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKCk7XG4gIC8vIEJ1aWxkIFZQQ1xuICBkZWZhdWx0cy5idWlsZFZwYyhzdGFjaywge1xuICAgIGRlZmF1bHRWcGNQcm9wczogRGVmYXVsdElzb2xhdGVkVnBjUHJvcHMoKSxcbiAgfSk7XG5cbiAgY29uc3QgdGVtcGxhdGUgPSBUZW1wbGF0ZS5mcm9tU3RhY2soc3RhY2spO1xuICB0ZW1wbGF0ZS5oYXNSZXNvdXJjZVByb3BlcnRpZXMoJ0FXUzo6RUMyOjpWUEMnLCB7XG4gICAgRW5hYmxlRG5zSG9zdG5hbWVzOiB0cnVlLFxuICAgIEVuYWJsZURuc1N1cHBvcnQ6IHRydWUsXG4gIH0pO1xuXG4gIHRlbXBsYXRlLnJlc291cmNlQ291bnRJcygnQVdTOjpFQzI6OlN1Ym5ldCcsIDIpO1xuICB0ZW1wbGF0ZS5yZXNvdXJjZUNvdW50SXMoJ0FXUzo6RUMyOjpJbnRlcm5ldEdhdGV3YXknLCAwKTtcbn0pO1xuXG50ZXN0KCdUZXN0IGRlcGxveW1lbnQgdy8gdXNlciBwcm92aWRlZCBjdXN0b20gcHJvcGVydGllcycsICgpID0+IHtcbiAgLy8gU3RhY2tcbiAgY29uc3Qgc3RhY2sgPSBuZXcgU3RhY2soKTtcbiAgLy8gQnVpbGQgVlBDXG4gIGRlZmF1bHRzLmJ1aWxkVnBjKHN0YWNrLCB7XG4gICAgZGVmYXVsdFZwY1Byb3BzOiBEZWZhdWx0UHVibGljUHJpdmF0ZVZwY1Byb3BzKCksXG4gICAgdXNlclZwY1Byb3BzOiB7XG4gICAgICBlbmFibGVEbnNIb3N0bmFtZXM6IGZhbHNlLFxuICAgICAgZW5hYmxlRG5zU3VwcG9ydDogZmFsc2UsXG4gICAgICBpcEFkZHJlc3NlczogZWMyLklwQWRkcmVzc2VzLmNpZHIoJzE3Mi4xNjguMC4wLzE5JyksXG4gICAgfSxcbiAgfSk7XG4gIFRlbXBsYXRlLmZyb21TdGFjayhzdGFjaykuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKCdBV1M6OkVDMjo6VlBDJywge1xuICAgIENpZHJCbG9jazogJzE3Mi4xNjguMC4wLzE5JyxcbiAgICBFbmFibGVEbnNIb3N0bmFtZXM6IGZhbHNlLFxuICAgIEVuYWJsZURuc1N1cHBvcnQ6IGZhbHNlLFxuICB9KTtcbn0pO1xuXG50ZXN0KCdUZXN0IGRlcGxveW1lbnQgdy8gY29uc3RydWN0IHByb3ZpZGVkIGN1c3RvbSBwcm9wZXJ0aWVzJywgKCkgPT4ge1xuICAvLyBTdGFja1xuICBjb25zdCBzdGFjayA9IG5ldyBTdGFjaygpO1xuICAvLyBCdWlsZCBWUENcbiAgZGVmYXVsdHMuYnVpbGRWcGMoc3RhY2ssIHtcbiAgICBkZWZhdWx0VnBjUHJvcHM6IERlZmF1bHRQdWJsaWNQcml2YXRlVnBjUHJvcHMoKSxcbiAgICBjb25zdHJ1Y3RWcGNQcm9wczoge1xuICAgICAgZW5hYmxlRG5zSG9zdG5hbWVzOiB0cnVlLFxuICAgICAgZW5hYmxlRG5zU3VwcG9ydDogdHJ1ZSxcbiAgICAgIGlwQWRkcmVzc2VzOiBlYzIuSXBBZGRyZXNzZXMuY2lkcignMTcyLjE2OC4wLjAvMTknKSxcbiAgICB9LFxuICB9KTtcbiAgVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrKS5oYXNSZXNvdXJjZVByb3BlcnRpZXMoJ0FXUzo6RUMyOjpWUEMnLCB7XG4gICAgQ2lkckJsb2NrOiAnMTcyLjE2OC4wLjAvMTknLFxuICAgIEVuYWJsZURuc0hvc3RuYW1lczogdHJ1ZSxcbiAgICBFbmFibGVEbnNTdXBwb3J0OiB0cnVlLFxuICB9KTtcbn0pO1xuXG50ZXN0KCdUZXN0IGRlcGxveW1lbnQgdy8gY29uc3RydWN0IGFuZCB1c2VyIHByb3ZpZGVkIGN1c3RvbSBwcm9wZXJ0aWVzJywgKCkgPT4ge1xuICAvLyBTdGFja1xuICBjb25zdCBzdGFjayA9IG5ldyBTdGFjaygpO1xuICAvLyBCdWlsZCBWUENcbiAgZGVmYXVsdHMuYnVpbGRWcGMoc3RhY2ssIHtcbiAgICBkZWZhdWx0VnBjUHJvcHM6IERlZmF1bHRQdWJsaWNQcml2YXRlVnBjUHJvcHMoKSxcbiAgICB1c2VyVnBjUHJvcHM6IHtcbiAgICAgIGVuYWJsZURuc0hvc3RuYW1lczogZmFsc2UsXG4gICAgICBlbmFibGVEbnNTdXBwb3J0OiBmYWxzZSxcbiAgICAgIGlwQWRkcmVzc2VzOiBlYzIuSXBBZGRyZXNzZXMuY2lkcignMTAuMC4wLjAvMTYnKSxcbiAgICB9LFxuICAgIGNvbnN0cnVjdFZwY1Byb3BzOiB7XG4gICAgICBlbmFibGVEbnNIb3N0bmFtZXM6IGZhbHNlLFxuICAgICAgZW5hYmxlRG5zU3VwcG9ydDogZmFsc2UsXG4gICAgICBpcEFkZHJlc3NlczogZWMyLklwQWRkcmVzc2VzLmNpZHIoJzE3Mi4xNjguMC4wLzE5JyksXG4gICAgfSxcbiAgfSk7XG4gIFRlbXBsYXRlLmZyb21TdGFjayhzdGFjaykuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKCdBV1M6OkVDMjo6VlBDJywge1xuICAgIENpZHJCbG9jazogJzE3Mi4xNjguMC4wLzE5JyxcbiAgICBFbmFibGVEbnNIb3N0bmFtZXM6IGZhbHNlLFxuICAgIEVuYWJsZURuc1N1cHBvcnQ6IGZhbHNlLFxuICB9KTtcbn0pO1xuXG50ZXN0KCdUZXN0IGRlcGxveW1lbnQgdy8gY29uc3RydWN0IGFuZCB1c2VyIHByb3ZpZGVkIGN1c3RvbSBwcm9wZXJ0aWVzJywgKCkgPT4ge1xuICAvLyBTdGFja1xuICBjb25zdCBzdGFjayA9IG5ldyBTdGFjaygpO1xuICAvLyBCdWlsZCBWUENcbiAgY29uc3QgdiA9IGRlZmF1bHRzLmJ1aWxkVnBjKHN0YWNrLCB7XG4gICAgZGVmYXVsdFZwY1Byb3BzOiBEZWZhdWx0UHVibGljUHJpdmF0ZVZwY1Byb3BzKCksXG4gICAgdXNlclZwY1Byb3BzOiB7XG4gICAgICBlbmFibGVEbnNIb3N0bmFtZXM6IGZhbHNlLFxuICAgICAgZW5hYmxlRG5zU3VwcG9ydDogZmFsc2UsXG4gICAgICBpcEFkZHJlc3NlczogZWMyLklwQWRkcmVzc2VzLmNpZHIoJzEwLjAuMC4wLzE2JyksXG4gICAgfSxcbiAgICBjb25zdHJ1Y3RWcGNQcm9wczoge1xuICAgICAgZW5hYmxlRG5zSG9zdG5hbWVzOiB0cnVlLFxuICAgICAgZW5hYmxlRG5zU3VwcG9ydDogdHJ1ZSxcbiAgICAgIG5hdEdhdGV3YXlzOiAwLFxuICAgICAgc3VibmV0Q29uZmlndXJhdGlvbjogW1xuICAgICAgICB7XG4gICAgICAgICAgY2lkck1hc2s6IDE4LFxuICAgICAgICAgIG5hbWU6ICdpc29sYXRlZCcsXG4gICAgICAgICAgc3VibmV0VHlwZTogZWMyLlN1Ym5ldFR5cGUuUFJJVkFURV9JU09MQVRFRCxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSxcbiAgfSk7XG4gIEFkZEF3c1NlcnZpY2VFbmRwb2ludChzdGFjaywgdiwgZGVmYXVsdHMuU2VydmljZUVuZHBvaW50VHlwZXMuU1FTKTtcblxuICAvLyBFeHBlY3QgMiBpc29sYXRlZCBzdWJuZXRzICh1c3VhbCBlcnJvciBjb25kaXRpb24gaXMgMiBwdWJsaWMvMiBwcml2YXRlKVxuICBjb25zdCB0ZW1wbGF0ZSA9IFRlbXBsYXRlLmZyb21TdGFjayhzdGFjayk7XG4gIHRlbXBsYXRlLnJlc291cmNlQ291bnRJcygnQVdTOjpFQzI6OlN1Ym5ldCcsIDIpO1xuICB0ZW1wbGF0ZS5yZXNvdXJjZUNvdW50SXMoJ0FXUzo6RUMyOjpJbnRlcm5ldEdhdGV3YXknLCAwKTtcbn0pO1xuXG50ZXN0KCdUZXN0IGRlcGxveW1lbnQgdy8gZXhpc3RpbmcgVlBDIHByb3ZpZGVkJywgKCkgPT4ge1xuICAvLyBTdGFja1xuICBjb25zdCBzdGFjayA9IG5ldyBTdGFjaygpO1xuICAvLyBCdWlsZCBWUENcbiAgY29uc3QgdGVzdEV4aXN0aW5nVnBjID0gZGVmYXVsdHMuZ2V0VGVzdFZwYyhzdGFjayk7XG5cbiAgY29uc3QgbmV3VnBjID0gZGVmYXVsdHMuYnVpbGRWcGMoc3RhY2ssIHtcbiAgICBkZWZhdWx0VnBjUHJvcHM6IERlZmF1bHRQdWJsaWNQcml2YXRlVnBjUHJvcHMoKSxcbiAgICBleGlzdGluZ1ZwYzogdGVzdEV4aXN0aW5nVnBjLFxuICB9KTtcblxuICBleHBlY3QobmV3VnBjKS50b0JlKHRlc3RFeGlzdGluZ1ZwYyk7XG59KTtcblxudGVzdCgnVGVzdCBhZGRpbmcgR2F0ZXdheSBFbmRwb2ludCcsICgpID0+IHtcbiAgLy8gU3RhY2tcbiAgY29uc3Qgc3RhY2sgPSBuZXcgU3RhY2soKTtcbiAgLy8gQnVpbGQgVlBDXG4gIGNvbnN0IHRlc3RWcGMgPSBkZWZhdWx0cy5idWlsZFZwYyhzdGFjaywge1xuICAgIGRlZmF1bHRWcGNQcm9wczogRGVmYXVsdFB1YmxpY1ByaXZhdGVWcGNQcm9wcygpLFxuICB9KTtcblxuICBBZGRBd3NTZXJ2aWNlRW5kcG9pbnQoc3RhY2ssIHRlc3RWcGMsIFNlcnZpY2VFbmRwb2ludFR5cGVzLkRZTkFNT0RCKTtcbiAgQWRkQXdzU2VydmljZUVuZHBvaW50KHN0YWNrLCB0ZXN0VnBjLCBTZXJ2aWNlRW5kcG9pbnRUeXBlcy5TUVMpO1xuICBBZGRBd3NTZXJ2aWNlRW5kcG9pbnQoc3RhY2ssIHRlc3RWcGMsIFNlcnZpY2VFbmRwb2ludFR5cGVzLlNOUyk7XG5cbiAgLy8gQXNzZXJ0aW9uXG4gIGNvbnN0IHRlbXBsYXRlID0gVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrKTtcbiAgdGVtcGxhdGUuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKCdBV1M6OkVDMjo6VlBDRW5kcG9pbnQnLCB7XG4gICAgVnBjRW5kcG9pbnRUeXBlOiAnR2F0ZXdheScsXG4gIH0pO1xuICB0ZW1wbGF0ZS5oYXNSZXNvdXJjZVByb3BlcnRpZXMoJ0FXUzo6RUMyOjpWUENFbmRwb2ludCcsIHtcbiAgICBWcGNFbmRwb2ludFR5cGU6ICdJbnRlcmZhY2UnLFxuICB9KTtcbiAgdGVtcGxhdGUucmVzb3VyY2VDb3VudElzKCdBV1M6OkVDMjo6VlBDRW5kcG9pbnQnLCAzKTtcbn0pO1xuXG50ZXN0KCdUZXN0IGFkZGluZyBJbnRlcmZhY2UgRW5kcG9pbnQnLCAoKSA9PiB7XG4gIC8vIFN0YWNrXG4gIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKCk7XG4gIC8vIEJ1aWxkIFZQQ1xuICBjb25zdCB0ZXN0VnBjID0gZGVmYXVsdHMuYnVpbGRWcGMoc3RhY2ssIHtcbiAgICBkZWZhdWx0VnBjUHJvcHM6IERlZmF1bHRQdWJsaWNQcml2YXRlVnBjUHJvcHMoKSxcbiAgfSk7XG5cbiAgQWRkQXdzU2VydmljZUVuZHBvaW50KHN0YWNrLCB0ZXN0VnBjLCBTZXJ2aWNlRW5kcG9pbnRUeXBlcy5TTlMpO1xuXG4gIC8vIEFzc2VydGlvblxuICBUZW1wbGF0ZS5mcm9tU3RhY2soc3RhY2spLmhhc1Jlc291cmNlUHJvcGVydGllcygnQVdTOjpFQzI6OlZQQ0VuZHBvaW50Jywge1xuICAgIFZwY0VuZHBvaW50VHlwZTogJ0ludGVyZmFjZScsXG4gIH0pO1xufSk7XG5cbnRlc3QoJ1Rlc3QgYWRkaW5nIFNBR0VNQUtFUl9SVU5USU1FIEludGVyZmFjZSBFbmRwb2ludCcsICgpID0+IHtcbiAgLy8gU3RhY2tcbiAgY29uc3Qgc3RhY2sgPSBuZXcgU3RhY2soKTtcbiAgLy8gQnVpbGQgVlBDXG4gIGNvbnN0IHRlc3RWcGMgPSBkZWZhdWx0cy5idWlsZFZwYyhzdGFjaywge1xuICAgIGRlZmF1bHRWcGNQcm9wczogRGVmYXVsdFB1YmxpY1ByaXZhdGVWcGNQcm9wcygpLFxuICB9KTtcblxuICBBZGRBd3NTZXJ2aWNlRW5kcG9pbnQoc3RhY2ssIHRlc3RWcGMsIFNlcnZpY2VFbmRwb2ludFR5cGVzLlNBR0VNQUtFUl9SVU5USU1FKTtcblxuICAvLyBBc3NlcnRpb25cbiAgVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrKS5oYXNSZXNvdXJjZVByb3BlcnRpZXMoJ0FXUzo6RUMyOjpWUENFbmRwb2ludCcsIHtcbiAgICBWcGNFbmRwb2ludFR5cGU6ICdJbnRlcmZhY2UnLFxuICB9KTtcbn0pO1xuXG50ZXN0KCdUZXN0IGFkZGluZyBhIHNlY29uZCBFbmRwb2ludCBvZiBzYW1lIHNlcnZpY2UnLCAoKSA9PiB7XG4gIC8vIFN0YWNrXG4gIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKCk7XG4gIC8vIEJ1aWxkIFZQQ1xuICBjb25zdCB0ZXN0VnBjID0gZGVmYXVsdHMuYnVpbGRWcGMoc3RhY2ssIHtcbiAgICBkZWZhdWx0VnBjUHJvcHM6IERlZmF1bHRQdWJsaWNQcml2YXRlVnBjUHJvcHMoKSxcbiAgfSk7XG5cbiAgQWRkQXdzU2VydmljZUVuZHBvaW50KHN0YWNrLCB0ZXN0VnBjLCBTZXJ2aWNlRW5kcG9pbnRUeXBlcy5TTlMpO1xuICBBZGRBd3NTZXJ2aWNlRW5kcG9pbnQoc3RhY2ssIHRlc3RWcGMsIFNlcnZpY2VFbmRwb2ludFR5cGVzLlNOUyk7XG5cbiAgLy8gQXNzZXJ0aW9uXG4gIFRlbXBsYXRlLmZyb21TdGFjayhzdGFjaykucmVzb3VyY2VDb3VudElzKCdBV1M6OkVDMjo6VlBDRW5kcG9pbnQnLCAxKTtcbn0pO1xuXG50ZXN0KCdUZXN0IGFkZGluZyBiYWQgRW5kcG9pbnQnLCAoKSA9PiB7XG4gIC8vIFN0YWNrXG4gIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKCk7XG4gIC8vIEJ1aWxkIFZQQ1xuICBjb25zdCB0ZXN0VnBjID0gZGVmYXVsdHMuYnVpbGRWcGMoc3RhY2ssIHtcbiAgICBkZWZhdWx0VnBjUHJvcHM6IERlZmF1bHRQdWJsaWNQcml2YXRlVnBjUHJvcHMoKSxcbiAgfSk7XG5cbiAgY29uc3QgYXBwID0gKCkgPT4ge1xuICAgIEFkZEF3c1NlcnZpY2VFbmRwb2ludChzdGFjaywgdGVzdFZwYywgJ3N0cmluZycgYXMgU2VydmljZUVuZHBvaW50VHlwZXMpO1xuICB9O1xuICAvLyBBc3NlcnRpb25cbiAgZXhwZWN0KGFwcCkudG9UaHJvd0Vycm9yKCk7XG59KTtcblxudGVzdCgnVGVzdCBhZGRpbmcgRXZlbnRzIEludGVyZmFjZSBFbmRwb2ludCcsICgpID0+IHtcbiAgLy8gU3RhY2tcbiAgY29uc3Qgc3RhY2sgPSBuZXcgU3RhY2soKTtcbiAgLy8gQnVpbGQgVlBDXG4gIGNvbnN0IHRlc3RWcGMgPSBkZWZhdWx0cy5idWlsZFZwYyhzdGFjaywge1xuICAgIGRlZmF1bHRWcGNQcm9wczogRGVmYXVsdFB1YmxpY1ByaXZhdGVWcGNQcm9wcygpLFxuICB9KTtcblxuICBBZGRBd3NTZXJ2aWNlRW5kcG9pbnQoc3RhY2ssIHRlc3RWcGMsIFNlcnZpY2VFbmRwb2ludFR5cGVzLkVWRU5UUyk7XG5cbiAgLy8gQXNzZXJ0aW9uXG4gIFRlbXBsYXRlLmZyb21TdGFjayhzdGFjaykuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKCdBV1M6OkVDMjo6VlBDRW5kcG9pbnQnLCB7XG4gICAgVnBjRW5kcG9pbnRUeXBlOiAnSW50ZXJmYWNlJyxcbiAgfSk7XG59KTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBQcm9wIFRlc3RzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbnRlc3QoJ1Rlc3QgZmFpbCBWcGMgY2hlY2sgd2l0aCBkZXBsb3lWcGMnLCAoKSA9PiB7XG4gIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKCk7XG5cbiAgY29uc3QgcHJvcHM6IGRlZmF1bHRzLlZwY1Byb3BzU2V0ID0ge1xuICAgIGRlcGxveVZwYzogdHJ1ZSxcbiAgICBleGlzdGluZ1ZwYzogZGVmYXVsdHMuYnVpbGRWcGMoc3RhY2ssIHtcbiAgICAgIGRlZmF1bHRWcGNQcm9wczogZGVmYXVsdHMuRGVmYXVsdFB1YmxpY1ByaXZhdGVWcGNQcm9wcygpLFxuICAgIH0pLFxuICB9O1xuXG4gIGNvbnN0IGFwcCA9ICgpID0+IHtcbiAgICBkZWZhdWx0cy5DaGVja1ZwY1Byb3BzKHByb3BzKTtcbiAgfTtcblxuICAvLyBBc3NlcnRpb25cbiAgZXhwZWN0KGFwcCkudG9UaHJvd0Vycm9yKCdFcnJvciAtIEVpdGhlciBwcm92aWRlIGFuIGV4aXN0aW5nVnBjIG9yIHNvbWUgY29tYmluYXRpb24gb2YgZGVwbG95VnBjIGFuZCB2cGNQcm9wcywgYnV0IG5vdCBib3RoLlxcbicpO1xufSk7XG5cbnRlc3QoJ1Rlc3QgZmFpbCBWcGMgY2hlY2sgd2l0aCB2cGNQcm9wcycsICgpID0+IHtcbiAgY29uc3Qgc3RhY2sgPSBuZXcgU3RhY2soKTtcblxuICBjb25zdCBwcm9wczogZGVmYXVsdHMuVnBjUHJvcHNTZXQgPSB7XG4gICAgdnBjUHJvcHM6IGRlZmF1bHRzLkRlZmF1bHRQdWJsaWNQcml2YXRlVnBjUHJvcHMoKSxcbiAgICBleGlzdGluZ1ZwYzogZGVmYXVsdHMuYnVpbGRWcGMoc3RhY2ssIHtcbiAgICAgIGRlZmF1bHRWcGNQcm9wczogZGVmYXVsdHMuRGVmYXVsdFB1YmxpY1ByaXZhdGVWcGNQcm9wcygpLFxuICAgIH0pLFxuICB9O1xuXG4gIGNvbnN0IGFwcCA9ICgpID0+IHtcbiAgICBkZWZhdWx0cy5DaGVja1ZwY1Byb3BzKHByb3BzKTtcbiAgfTtcblxuICAvLyBBc3NlcnRpb25cbiAgZXhwZWN0KGFwcCkudG9UaHJvd0Vycm9yKCdFcnJvciAtIEVpdGhlciBwcm92aWRlIGFuIGV4aXN0aW5nVnBjIG9yIHNvbWUgY29tYmluYXRpb24gb2YgZGVwbG95VnBjIGFuZCB2cGNQcm9wcywgYnV0IG5vdCBib3RoLlxcbicpO1xufSk7XG4iXX0=
251
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidnBjLWhlbHBlci50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsidnBjLWhlbHBlci50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7R0FXRzs7QUFFSCw2Q0FBb0M7QUFDcEMsZ0NBQWdDO0FBQ2hDLDJDQUEyQztBQUMzQyx1REFBa0Q7QUFDbEQsa0RBQWdGO0FBQ2hGLHNEQUE0RjtBQUU1RixJQUFJLENBQUMsNENBQTRDLEVBQUUsR0FBRyxFQUFFO0lBQ3RELFFBQVE7SUFDUixNQUFNLEtBQUssR0FBRyxJQUFJLG1CQUFLLEVBQUUsQ0FBQztJQUMxQixZQUFZO0lBQ1osUUFBUSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUU7UUFDdkIsZUFBZSxFQUFFLElBQUEsc0NBQXVCLEdBQUU7S0FDM0MsQ0FBQyxDQUFDO0lBRUgsTUFBTSxRQUFRLEdBQUcscUJBQVEsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDM0MsUUFBUSxDQUFDLHFCQUFxQixDQUFDLGVBQWUsRUFBRTtRQUM5QyxrQkFBa0IsRUFBRSxJQUFJO1FBQ3hCLGdCQUFnQixFQUFFLElBQUk7S0FDdkIsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLGVBQWUsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNoRCxRQUFRLENBQUMsZUFBZSxDQUFDLDJCQUEyQixFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzNELENBQUMsQ0FBQyxDQUFDO0FBRUgsSUFBSSxDQUFDLG9EQUFvRCxFQUFFLEdBQUcsRUFBRTtJQUM5RCxRQUFRO0lBQ1IsTUFBTSxLQUFLLEdBQUcsSUFBSSxtQkFBSyxFQUFFLENBQUM7SUFDMUIsWUFBWTtJQUNaLFFBQVEsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFO1FBQ3ZCLGVBQWUsRUFBRSxJQUFBLDJDQUE0QixHQUFFO1FBQy9DLFlBQVksRUFBRTtZQUNaLGtCQUFrQixFQUFFLEtBQUs7WUFDekIsZ0JBQWdCLEVB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LFFBQVEsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFO1lBQ3BDLGVBQWUsRUFBRSxRQUFRLENBQUMsNEJBQTRCLEVBQUU7U0FDekQsQ0FBQztLQUNILENBQUM7SUFFRixNQUFNLEdBQUcsR0FBRyxHQUFHLEVBQUU7UUFDZixRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2hDLENBQUMsQ0FBQztJQUVGLFlBQVk7SUFDWixNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsWUFBWSxDQUFDLHNHQUFzRyxDQUFDLENBQUM7QUFDbkksQ0FBQyxDQUFDLENBQUM7QUFFSCxJQUFJLENBQUMsbUNBQW1DLEVBQUUsR0FBRyxFQUFFO0lBQzdDLE1BQU0sS0FBSyxHQUFHLElBQUksbUJBQUssRUFBRSxDQUFDO0lBRTFCLE1BQU0sS0FBSyxHQUF5QjtRQUNsQyxRQUFRLEVBQUUsUUFBUSxDQUFDLDRCQUE0QixFQUFFO1FBQ2pELFdBQVcsRUFBRSxRQUFRLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRTtZQUNwQyxlQUFlLEVBQUUsUUFBUSxDQUFDLDRCQUE0QixFQUFFO1NBQ3pELENBQUM7S0FDSCxDQUFDO0lBRUYsTUFBTSxHQUFHLEdBQUcsR0FBRyxFQUFFO1FBQ2YsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNoQyxDQUFDLENBQUM7SUFFRixZQUFZO0lBQ1osTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFlBQVksQ0FBQyxzR0FBc0csQ0FBQyxDQUFDO0FBQ25JLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiAgQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIikuIFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2VcbiAqICB3aXRoIHRoZSBMaWNlbnNlLiBBIGNvcHkgb2YgdGhlIExpY2Vuc2UgaXMgbG9jYXRlZCBhdFxuICpcbiAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogIG9yIGluIHRoZSAnbGljZW5zZScgZmlsZSBhY2NvbXBhbnlpbmcgdGhpcyBmaWxlLiBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gJ0FTIElTJyBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTXG4gKiAgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnNcbiAqICBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IHsgU3RhY2sgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgKiBhcyBkZWZhdWx0cyBmcm9tICcuLi8nO1xuaW1wb3J0ICogYXMgZWMyIGZyb20gJ2F3cy1jZGstbGliL2F3cy1lYzInO1xuaW1wb3J0IHsgVGVtcGxhdGUgfSBmcm9tICdhd3MtY2RrLWxpYi9hc3NlcnRpb25zJztcbmltcG9ydCB7IEFkZEF3c1NlcnZpY2VFbmRwb2ludCwgU2VydmljZUVuZHBvaW50VHlwZXMgfSBmcm9tICcuLi9saWIvdnBjLWhlbHBlcic7XG5pbXBvcnQgeyBEZWZhdWx0UHVibGljUHJpdmF0ZVZwY1Byb3BzLCBEZWZhdWx0SXNvbGF0ZWRWcGNQcm9wcyB9IGZyb20gJy4uL2xpYi92cGMtZGVmYXVsdHMnO1xuXG50ZXN0KFwiVGVzdCBtaW5pbWFsIGRlcGxveW1lbnQgd2l0aCBubyBwcm9wZXJ0aWVzXCIsICgpID0+IHtcbiAgLy8gU3RhY2tcbiAgY29uc3Qgc3RhY2sgPSBuZXcgU3RhY2soKTtcbiAgLy8gQnVpbGQgVlBDXG4gIGRlZmF1bHRzLmJ1aWxkVnBjKHN0YWNrLCB7XG4gICAgZGVmYXVsdFZwY1Byb3BzOiBEZWZhdWx0SXNvbGF0ZWRWcGNQcm9wcygpLFxuICB9KTtcblxuICBjb25zdCB0ZW1wbGF0ZSA9IFRlbXBsYXRlLmZyb21TdGFjayhzdGFjayk7XG4gIHRlbXBsYXRlLmhhc1Jlc291cmNlUHJvcGVydGllcygnQVdTOjpFQzI6OlZQQycsIHtcbiAgICBFbmFibGVEbnNIb3N0bmFtZXM6IHRydWUsXG4gICAgRW5hYmxlRG5zU3VwcG9ydDogdHJ1ZSxcbiAgfSk7XG5cbiAgdGVtcGxhdGUucmVzb3VyY2VDb3VudElzKCdBV1M6OkVDMjo6U3VibmV0JywgMik7XG4gIHRlbXBsYXRlLnJlc291cmNlQ291bnRJcygnQVdTOjpFQzI6OkludGVybmV0R2F0ZXdheScsIDApO1xufSk7XG5cbnRlc3QoJ1Rlc3QgZGVwbG95bWVudCB3LyB1c2VyIHByb3ZpZGVkIGN1c3RvbSBwcm9wZXJ0aWVzJywgKCkgPT4ge1xuICAvLyBTdGFja1xuICBjb25zdCBzdGFjayA9IG5ldyBTdGFjaygpO1xuICAvLyBCdWlsZCBWUENcbiAgZGVmYXVsdHMuYnVpbGRWcGMoc3RhY2ssIHtcbiAgICBkZWZhdWx0VnBjUHJvcHM6IERlZmF1bHRQdWJsaWNQcml2YXRlVnBjUHJvcHMoKSxcbiAgICB1c2VyVnBjUHJvcHM6IHtcbiAgICAgIGVuYWJsZURuc0hvc3RuYW1lczogZmFsc2UsXG4gICAgICBlbmFibGVEbnNTdXBwb3J0OiBmYWxzZSxcbiAgICAgIGlwQWRkcmVzc2VzOiBlYzIuSXBBZGRyZXNzZXMuY2lkcignMTcyLjE2OC4wLjAvMTknKSxcbiAgICB9LFxuICB9KTtcbiAgVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrKS5oYXNSZXNvdXJjZVByb3BlcnRpZXMoJ0FXUzo6RUMyOjpWUEMnLCB7XG4gICAgQ2lkckJsb2NrOiAnMTcyLjE2OC4wLjAvMTknLFxuICAgIEVuYWJsZURuc0hvc3RuYW1lczogZmFsc2UsXG4gICAgRW5hYmxlRG5zU3VwcG9ydDogZmFsc2UsXG4gIH0pO1xufSk7XG5cbnRlc3QoJ1Rlc3QgZGVwbG95bWVudCB3LyBjb25zdHJ1Y3QgcHJvdmlkZWQgY3VzdG9tIHByb3BlcnRpZXMnLCAoKSA9PiB7XG4gIC8vIFN0YWNrXG4gIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKCk7XG4gIC8vIEJ1aWxkIFZQQ1xuICBkZWZhdWx0cy5idWlsZFZwYyhzdGFjaywge1xuICAgIGRlZmF1bHRWcGNQcm9wczogRGVmYXVsdFB1YmxpY1ByaXZhdGVWcGNQcm9wcygpLFxuICAgIGNvbnN0cnVjdFZwY1Byb3BzOiB7XG4gICAgICBlbmFibGVEbnNIb3N0bmFtZXM6IHRydWUsXG4gICAgICBlbmFibGVEbnNTdXBwb3J0OiB0cnVlLFxuICAgICAgaXBBZGRyZXNzZXM6IGVjMi5JcEFkZHJlc3Nlcy5jaWRyKCcxNzIuMTY4LjAuMC8xOScpLFxuICAgIH0sXG4gIH0pO1xuICBUZW1wbGF0ZS5mcm9tU3RhY2soc3RhY2spLmhhc1Jlc291cmNlUHJvcGVydGllcygnQVdTOjpFQzI6OlZQQycsIHtcbiAgICBDaWRyQmxvY2s6ICcxNzIuMTY4LjAuMC8xOScsXG4gICAgRW5hYmxlRG5zSG9zdG5hbWVzOiB0cnVlLFxuICAgIEVuYWJsZURuc1N1cHBvcnQ6IHRydWUsXG4gIH0pO1xufSk7XG5cbnRlc3QoJ1Rlc3QgZGVwbG95bWVudCB3LyBjb25zdHJ1Y3QgYW5kIHVzZXIgcHJvdmlkZWQgY3VzdG9tIHByb3BlcnRpZXMnLCAoKSA9PiB7XG4gIC8vIFN0YWNrXG4gIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKCk7XG4gIC8vIEJ1aWxkIFZQQ1xuICBkZWZhdWx0cy5idWlsZFZwYyhzdGFjaywge1xuICAgIGRlZmF1bHRWcGNQcm9wczogRGVmYXVsdFB1YmxpY1ByaXZhdGVWcGNQcm9wcygpLFxuICAgIHVzZXJWcGNQcm9wczoge1xuICAgICAgZW5hYmxlRG5zSG9zdG5hbWVzOiBmYWxzZSxcbiAgICAgIGVuYWJsZURuc1N1cHBvcnQ6IGZhbHNlLFxuICAgICAgaXBBZGRyZXNzZXM6IGVjMi5JcEFkZHJlc3Nlcy5jaWRyKCcxMC4wLjAuMC8xNicpLFxuICAgIH0sXG4gICAgY29uc3RydWN0VnBjUHJvcHM6IHtcbiAgICAgIGVuYWJsZURuc0hvc3RuYW1lczogZmFsc2UsXG4gICAgICBlbmFibGVEbnNTdXBwb3J0OiBmYWxzZSxcbiAgICAgIGlwQWRkcmVzc2VzOiBlYzIuSXBBZGRyZXNzZXMuY2lkcignMTcyLjE2OC4wLjAvMTknKSxcbiAgICB9LFxuICB9KTtcbiAgVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrKS5oYXNSZXNvdXJjZVByb3BlcnRpZXMoJ0FXUzo6RUMyOjpWUEMnLCB7XG4gICAgQ2lkckJsb2NrOiAnMTcyLjE2OC4wLjAvMTknLFxuICAgIEVuYWJsZURuc0hvc3RuYW1lczogZmFsc2UsXG4gICAgRW5hYmxlRG5zU3VwcG9ydDogZmFsc2UsXG4gIH0pO1xufSk7XG5cbnRlc3QoJ1Rlc3QgZGVwbG95bWVudCB3LyBjb25zdHJ1Y3QgYW5kIHVzZXIgcHJvdmlkZWQgY3VzdG9tIHByb3BlcnRpZXMnLCAoKSA9PiB7XG4gIC8vIFN0YWNrXG4gIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKCk7XG4gIC8vIEJ1aWxkIFZQQ1xuICBjb25zdCB2ID0gZGVmYXVsdHMuYnVpbGRWcGMoc3RhY2ssIHtcbiAgICBkZWZhdWx0VnBjUHJvcHM6IERlZmF1bHRQdWJsaWNQcml2YXRlVnBjUHJvcHMoKSxcbiAgICB1c2VyVnBjUHJvcHM6IHtcbiAgICAgIGVuYWJsZURuc0hvc3RuYW1lczogZmFsc2UsXG4gICAgICBlbmFibGVEbnNTdXBwb3J0OiBmYWxzZSxcbiAgICAgIGlwQWRkcmVzc2VzOiBlYzIuSXBBZGRyZXNzZXMuY2lkcignMTAuMC4wLjAvMTYnKSxcbiAgICB9LFxuICAgIGNvbnN0cnVjdFZwY1Byb3BzOiB7XG4gICAgICBlbmFibGVEbnNIb3N0bmFtZXM6IHRydWUsXG4gICAgICBlbmFibGVEbnNTdXBwb3J0OiB0cnVlLFxuICAgICAgbmF0R2F0ZXdheXM6IDAsXG4gICAgICBzdWJuZXRDb25maWd1cmF0aW9uOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBjaWRyTWFzazogMTgsXG4gICAgICAgICAgbmFtZTogJ2lzb2xhdGVkJyxcbiAgICAgICAgICBzdWJuZXRUeXBlOiBlYzIuU3VibmV0VHlwZS5QUklWQVRFX0lTT0xBVEVELFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9LFxuICB9KTtcbiAgQWRkQXdzU2VydmljZUVuZHBvaW50KHN0YWNrLCB2LCBkZWZhdWx0cy5TZXJ2aWNlRW5kcG9pbnRUeXBlcy5TUVMpO1xuXG4gIC8vIEV4cGVjdCAyIGlzb2xhdGVkIHN1Ym5ldHMgKHVzdWFsIGVycm9yIGNvbmRpdGlvbiBpcyAyIHB1YmxpYy8yIHByaXZhdGUpXG4gIGNvbnN0IHRlbXBsYXRlID0gVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrKTtcbiAgdGVtcGxhdGUucmVzb3VyY2VDb3VudElzKCdBV1M6OkVDMjo6U3VibmV0JywgMik7XG4gIHRlbXBsYXRlLnJlc291cmNlQ291bnRJcygnQVdTOjpFQzI6OkludGVybmV0R2F0ZXdheScsIDApO1xufSk7XG5cbnRlc3QoJ1Rlc3QgZGVwbG95bWVudCB3LyBleGlzdGluZyBWUEMgcHJvdmlkZWQnLCAoKSA9PiB7XG4gIC8vIFN0YWNrXG4gIGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKCk7XG4gIC8vIEJ1aWxkIFZQQ1xuICBjb25zdCB0ZXN0RXhpc3RpbmdWcGMgPSBkZWZhdWx0cy5nZXRUZXN0VnBjKHN0YWNrKTtcblxuICBjb25zdCBuZXdWcGMgPSBkZWZhdWx0cy5idWlsZFZwYyhzdGFjaywge1xuICAgIGRlZmF1bHRWcGNQcm9wczogRGVmYXVsdFB1YmxpY1ByaXZhdGVWcGNQcm9wcygpLFxuICAgIGV4aXN0aW5nVnBjOiB0ZXN0RXhpc3RpbmdWcGMsXG4gIH0pO1xuXG4gIGV4cGVjdChuZXdWcGMpLnRvQmUodGVzdEV4aXN0aW5nVnBjKTtcbn0pO1xuXG50ZXN0KCdUZXN0IGFkZGluZyBHYXRld2F5IEVuZHBvaW50JywgKCkgPT4ge1xuICAvLyBTdGFja1xuICBjb25zdCBzdGFjayA9IG5ldyBTdGFjaygpO1xuICAvLyBCdWlsZCBWUENcbiAgY29uc3QgdGVzdFZwYyA9IGRlZmF1bHRzLmJ1aWxkVnBjKHN0YWNrLCB7XG4gICAgZGVmYXVsdFZwY1Byb3BzOiBEZWZhdWx0UHVibGljUHJpdmF0ZVZwY1Byb3BzKCksXG4gIH0pO1xuXG4gIEFkZEF3c1NlcnZpY2VFbmRwb2ludChzdGFjaywgdGVzdFZwYywgU2VydmljZUVuZHBvaW50VHlwZXMuRFlOQU1PREIpO1xuICBBZGRBd3NTZXJ2aWNlRW5kcG9pbnQoc3RhY2ssIHRlc3RWcGMsIFNlcnZpY2VFbmRwb2ludFR5cGVzLlNRUyk7XG4gIEFkZEF3c1NlcnZpY2VFbmRwb2ludChzdGFjaywgdGVzdFZwYywgU2VydmljZUVuZHBvaW50VHlwZXMuU05TKTtcblxuICAvLyBBc3NlcnRpb25cbiAgY29uc3QgdGVtcGxhdGUgPSBUZW1wbGF0ZS5mcm9tU3RhY2soc3RhY2spO1xuICB0ZW1wbGF0ZS5oYXNSZXNvdXJjZVByb3BlcnRpZXMoJ0FXUzo6RUMyOjpWUENFbmRwb2ludCcsIHtcbiAgICBWcGNFbmRwb2ludFR5cGU6ICdHYXRld2F5JyxcbiAgfSk7XG4gIHRlbXBsYXRlLmhhc1Jlc291cmNlUHJvcGVydGllcygnQVdTOjpFQzI6OlZQQ0VuZHBvaW50Jywge1xuICAgIFZwY0VuZHBvaW50VHlwZTogJ0ludGVyZmFjZScsXG4gIH0pO1xuICB0ZW1wbGF0ZS5yZXNvdXJjZUNvdW50SXMoJ0FXUzo6RUMyOjpWUENFbmRwb2ludCcsIDMpO1xufSk7XG5cbnRlc3QoJ1Rlc3QgYWRkaW5nIEludGVyZmFjZSBFbmRwb2ludCcsICgpID0+IHtcbiAgLy8gU3RhY2tcbiAgY29uc3Qgc3RhY2sgPSBuZXcgU3RhY2soKTtcbiAgLy8gQnVpbGQgVlBDXG4gIGNvbnN0IHRlc3RWcGMgPSBkZWZhdWx0cy5idWlsZFZwYyhzdGFjaywge1xuICAgIGRlZmF1bHRWcGNQcm9wczogRGVmYXVsdFB1YmxpY1ByaXZhdGVWcGNQcm9wcygpLFxuICB9KTtcblxuICBBZGRBd3NTZXJ2aWNlRW5kcG9pbnQoc3RhY2ssIHRlc3RWcGMsIFNlcnZpY2VFbmRwb2ludFR5cGVzLlNOUyk7XG5cbiAgLy8gQXNzZXJ0aW9uXG4gIFRlbXBsYXRlLmZyb21TdGFjayhzdGFjaykuaGFzUmVzb3VyY2VQcm9wZXJ0aWVzKCdBV1M6OkVDMjo6VlBDRW5kcG9pbnQnLCB7XG4gICAgVnBjRW5kcG9pbnRUeXBlOiAnSW50ZXJmYWNlJyxcbiAgfSk7XG59KTtcblxudGVzdCgnVGVzdCBhZGRpbmcgU0FHRU1BS0VSX1JVTlRJTUUgSW50ZXJmYWNlIEVuZHBvaW50JywgKCkgPT4ge1xuICAvLyBTdGFja1xuICBjb25zdCBzdGFjayA9IG5ldyBTdGFjaygpO1xuICAvLyBCdWlsZCBWUENcbiAgY29uc3QgdGVzdFZwYyA9IGRlZmF1bHRzLmJ1aWxkVnBjKHN0YWNrLCB7XG4gICAgZGVmYXVsdFZwY1Byb3BzOiBEZWZhdWx0UHVibGljUHJpdmF0ZVZwY1Byb3BzKCksXG4gIH0pO1xuXG4gIEFkZEF3c1NlcnZpY2VFbmRwb2ludChzdGFjaywgdGVzdFZwYywgU2VydmljZUVuZHBvaW50VHlwZXMuU0FHRU1BS0VSX1JVTlRJTUUpO1xuXG4gIC8vIEFzc2VydGlvblxuICBUZW1wbGF0ZS5mcm9tU3RhY2soc3RhY2spLmhhc1Jlc291cmNlUHJvcGVydGllcygnQVdTOjpFQzI6OlZQQ0VuZHBvaW50Jywge1xuICAgIFZwY0VuZHBvaW50VHlwZTogJ0ludGVyZmFjZScsXG4gIH0pO1xufSk7XG5cbnRlc3QoJ1Rlc3QgYWRkaW5nIGEgc2Vjb25kIEVuZHBvaW50IG9mIHNhbWUgc2VydmljZScsICgpID0+IHtcbiAgLy8gU3RhY2tcbiAgY29uc3Qgc3RhY2sgPSBuZXcgU3RhY2soKTtcbiAgLy8gQnVpbGQgVlBDXG4gIGNvbnN0IHRlc3RWcGMgPSBkZWZhdWx0cy5idWlsZFZwYyhzdGFjaywge1xuICAgIGRlZmF1bHRWcGNQcm9wczogRGVmYXVsdFB1YmxpY1ByaXZhdGVWcGNQcm9wcygpLFxuICB9KTtcblxuICBBZGRBd3NTZXJ2aWNlRW5kcG9pbnQoc3RhY2ssIHRlc3RWcGMsIFNlcnZpY2VFbmRwb2ludFR5cGVzLlNOUyk7XG4gIEFkZEF3c1NlcnZpY2VFbmRwb2ludChzdGFjaywgdGVzdFZwYywgU2VydmljZUVuZHBvaW50VHlwZXMuU05TKTtcblxuICAvLyBBc3NlcnRpb25cbiAgVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrKS5yZXNvdXJjZUNvdW50SXMoJ0FXUzo6RUMyOjpWUENFbmRwb2ludCcsIDEpO1xufSk7XG5cbnRlc3QoJ1Rlc3QgYWRkaW5nIGJhZCBFbmRwb2ludCcsICgpID0+IHtcbiAgLy8gU3RhY2tcbiAgY29uc3Qgc3RhY2sgPSBuZXcgU3RhY2soKTtcbiAgLy8gQnVpbGQgVlBDXG4gIGNvbnN0IHRlc3RWcGMgPSBkZWZhdWx0cy5idWlsZFZwYyhzdGFjaywge1xuICAgIGRlZmF1bHRWcGNQcm9wczogRGVmYXVsdFB1YmxpY1ByaXZhdGVWcGNQcm9wcygpLFxuICB9KTtcblxuICBjb25zdCBhcHAgPSAoKSA9PiB7XG4gICAgQWRkQXdzU2VydmljZUVuZHBvaW50KHN0YWNrLCB0ZXN0VnBjLCAnc3RyaW5nJyBhcyBTZXJ2aWNlRW5kcG9pbnRUeXBlcyk7XG4gIH07XG4gIC8vIEFzc2VydGlvblxuICBleHBlY3QoYXBwKS50b1Rocm93RXJyb3IoKTtcbn0pO1xuXG50ZXN0KCdUZXN0IGFkZGluZyBFdmVudHMgSW50ZXJmYWNlIEVuZHBvaW50JywgKCkgPT4ge1xuICAvLyBTdGFja1xuICBjb25zdCBzdGFjayA9IG5ldyBTdGFjaygpO1xuICAvLyBCdWlsZCBWUENcbiAgY29uc3QgdGVzdFZwYyA9IGRlZmF1bHRzLmJ1aWxkVnBjKHN0YWNrLCB7XG4gICAgZGVmYXVsdFZwY1Byb3BzOiBEZWZhdWx0UHVibGljUHJpdmF0ZVZwY1Byb3BzKCksXG4gIH0pO1xuXG4gIEFkZEF3c1NlcnZpY2VFbmRwb2ludChzdGFjaywgdGVzdFZwYywgU2VydmljZUVuZHBvaW50VHlwZXMuRVZFTlRTKTtcblxuICAvLyBBc3NlcnRpb25cbiAgVGVtcGxhdGUuZnJvbVN0YWNrKHN0YWNrKS5oYXNSZXNvdXJjZVByb3BlcnRpZXMoJ0FXUzo6RUMyOjpWUENFbmRwb2ludCcsIHtcbiAgICBWcGNFbmRwb2ludFR5cGU6ICdJbnRlcmZhY2UnLFxuICB9KTtcbn0pO1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFByb3AgVGVzdHNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxudGVzdCgnVGVzdCBmYWlsIFZwYyBjaGVjayB3aXRoIGRlcGxveVZwYycsICgpID0+IHtcbiAgY29uc3Qgc3RhY2sgPSBuZXcgU3RhY2soKTtcblxuICBjb25zdCBwcm9wczogZGVmYXVsdHMuVnBjUHJvcHNTZXQgPSB7XG4gICAgZGVwbG95VnBjOiB0cnVlLFxuICAgIGV4aXN0aW5nVnBjOiBkZWZhdWx0cy5idWlsZFZwYyhzdGFjaywge1xuICAgICAgZGVmYXVsdFZwY1Byb3BzOiBkZWZhdWx0cy5EZWZhdWx0UHVibGljUHJpdmF0ZVZwY1Byb3BzKCksXG4gICAgfSksXG4gIH07XG5cbiAgY29uc3QgYXBwID0gKCkgPT4ge1xuICAgIGRlZmF1bHRzLkNoZWNrVnBjUHJvcHMocHJvcHMpO1xuICB9O1xuXG4gIC8vIEFzc2VydGlvblxuICBleHBlY3QoYXBwKS50b1Rocm93RXJyb3IoJ0Vycm9yIC0gRWl0aGVyIHByb3ZpZGUgYW4gZXhpc3RpbmdWcGMgb3Igc29tZSBjb21iaW5hdGlvbiBvZiBkZXBsb3lWcGMgYW5kIHZwY1Byb3BzLCBidXQgbm90IGJvdGguXFxuJyk7XG59KTtcblxudGVzdCgnVGVzdCBmYWlsIFZwYyBjaGVjayB3aXRoIHZwY1Byb3BzJywgKCkgPT4ge1xuICBjb25zdCBzdGFjayA9IG5ldyBTdGFjaygpO1xuXG4gIGNvbnN0IHByb3BzOiBkZWZhdWx0cy5WcGNQcm9wc1NldCA9IHtcbiAgICB2cGNQcm9wczogZGVmYXVsdHMuRGVmYXVsdFB1YmxpY1ByaXZhdGVWcGNQcm9wcygpLFxuICAgIGV4aXN0aW5nVnBjOiBkZWZhdWx0cy5idWlsZFZwYyhzdGFjaywge1xuICAgICAgZGVmYXVsdFZwY1Byb3BzOiBkZWZhdWx0cy5EZWZhdWx0UHVibGljUHJpdmF0ZVZwY1Byb3BzKCksXG4gICAgfSksXG4gIH07XG5cbiAgY29uc3QgYXBwID0gKCkgPT4ge1xuICAgIGRlZmF1bHRzLkNoZWNrVnBjUHJvcHMocHJvcHMpO1xuICB9O1xuXG4gIC8vIEFzc2VydGlvblxuICBleHBlY3QoYXBwKS50b1Rocm93RXJyb3IoJ0Vycm9yIC0gRWl0aGVyIHByb3ZpZGUgYW4gZXhpc3RpbmdWcGMgb3Igc29tZSBjb21iaW5hdGlvbiBvZiBkZXBsb3lWcGMgYW5kIHZwY1Byb3BzLCBidXQgbm90IGJvdGguXFxuJyk7XG59KTtcbiJdfQ==