terraconstructs 0.0.9 → 0.0.10

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 (136) hide show
  1. package/.jsii +1391 -145
  2. package/lib/aws/arn.js +1 -1
  3. package/lib/aws/aws-construct.js +1 -1
  4. package/lib/aws/aws-stack.js +1 -1
  5. package/lib/aws/cloudwatch/actions/ec2.js +1 -1
  6. package/lib/aws/cloudwatch/actions/lambda.js +1 -1
  7. package/lib/aws/cloudwatch/alarm-base.js +1 -1
  8. package/lib/aws/cloudwatch/alarm-rule.js +1 -1
  9. package/lib/aws/cloudwatch/alarm-status-widget.js +1 -1
  10. package/lib/aws/cloudwatch/alarm.js +1 -1
  11. package/lib/aws/cloudwatch/composite-alarm.js +1 -1
  12. package/lib/aws/cloudwatch/dashboard.js +1 -1
  13. package/lib/aws/cloudwatch/data-protection-policy.js +3 -3
  14. package/lib/aws/cloudwatch/graph.js +8 -8
  15. package/lib/aws/cloudwatch/layout.js +3 -3
  16. package/lib/aws/cloudwatch/log-destinations/kinesis.js +1 -1
  17. package/lib/aws/cloudwatch/log-destinations/lambda.js +1 -1
  18. package/lib/aws/cloudwatch/log-group.js +1 -1
  19. package/lib/aws/cloudwatch/log-query.js +1 -1
  20. package/lib/aws/cloudwatch/log-stream.js +1 -1
  21. package/lib/aws/cloudwatch/metric-filter.js +1 -1
  22. package/lib/aws/cloudwatch/metric.js +2 -2
  23. package/lib/aws/cloudwatch/pattern.js +3 -3
  24. package/lib/aws/cloudwatch/policy.js +1 -1
  25. package/lib/aws/cloudwatch/query-definition.js +2 -2
  26. package/lib/aws/cloudwatch/stats.js +1 -1
  27. package/lib/aws/cloudwatch/subscription-filter.js +1 -1
  28. package/lib/aws/cloudwatch/text.js +1 -1
  29. package/lib/aws/cloudwatch/variable.js +3 -3
  30. package/lib/aws/cloudwatch/widget.js +1 -1
  31. package/lib/aws/compute/activity.js +1 -1
  32. package/lib/aws/compute/architecture.js +1 -1
  33. package/lib/aws/compute/chain.js +1 -1
  34. package/lib/aws/compute/condition.js +1 -1
  35. package/lib/aws/compute/event-invoke-config.js +1 -1
  36. package/lib/aws/compute/event-source-filter.js +2 -2
  37. package/lib/aws/compute/event-source-mapping.js +1 -1
  38. package/lib/aws/compute/event-sources/s3-onfailure-destination.js +1 -1
  39. package/lib/aws/compute/event-sources/s3.js +1 -1
  40. package/lib/aws/compute/event-sources/sqs-dlq.js +1 -1
  41. package/lib/aws/compute/event-sources/sqs.js +1 -1
  42. package/lib/aws/compute/fields.js +4 -4
  43. package/lib/aws/compute/function-alias.js +1 -1
  44. package/lib/aws/compute/function-base.js +2 -2
  45. package/lib/aws/compute/function-destinations/event-bridge.js +1 -1
  46. package/lib/aws/compute/function-destinations/function.js +1 -1
  47. package/lib/aws/compute/function-destinations/sqs.js +1 -1
  48. package/lib/aws/compute/function-nodejs.js +1 -1
  49. package/lib/aws/compute/function-url.js +1 -1
  50. package/lib/aws/compute/function.js +1 -1
  51. package/lib/aws/compute/state-graph.js +1 -1
  52. package/lib/aws/compute/state-machine-fragment.js +1 -1
  53. package/lib/aws/compute/state-machine.js +4 -4
  54. package/lib/aws/compute/states/choice.js +1 -1
  55. package/lib/aws/compute/states/custom-state.js +1 -1
  56. package/lib/aws/compute/states/distributed-map/item-batcher.js +1 -1
  57. package/lib/aws/compute/states/distributed-map/item-reader.js +5 -5
  58. package/lib/aws/compute/states/distributed-map/result-writer.js +1 -1
  59. package/lib/aws/compute/states/distributed-map.js +1 -1
  60. package/lib/aws/compute/states/fail.js +1 -1
  61. package/lib/aws/compute/states/map-base.js +1 -1
  62. package/lib/aws/compute/states/map.js +1 -1
  63. package/lib/aws/compute/states/parallel.js +1 -1
  64. package/lib/aws/compute/states/pass.js +2 -2
  65. package/lib/aws/compute/states/state.js +1 -1
  66. package/lib/aws/compute/states/succeed.js +1 -1
  67. package/lib/aws/compute/states/task-base.js +2 -2
  68. package/lib/aws/compute/states/task.js +1 -1
  69. package/lib/aws/compute/states/wait.js +2 -2
  70. package/lib/aws/compute/task-credentials.js +1 -1
  71. package/lib/aws/compute/task-input.js +1 -1
  72. package/lib/aws/compute/tasks/aws-sdk/call-aws-service.js +1 -1
  73. package/lib/aws/compute/tasks/eventbridge/put-events.js +1 -1
  74. package/lib/aws/compute/tasks/http/invoke.js +1 -1
  75. package/lib/aws/compute/tasks/lambda/invoke.js +1 -1
  76. package/lib/aws/compute/tasks/sqs/send-message.js +1 -1
  77. package/lib/aws/compute/tasks/stepfunctions/invoke-activity.js +1 -1
  78. package/lib/aws/compute/tasks/stepfunctions/start-execution.js +1 -1
  79. package/lib/aws/compute/types.js +1 -1
  80. package/lib/aws/edge/certificate.js +1 -1
  81. package/lib/aws/edge/distribution.d.ts +5 -19
  82. package/lib/aws/edge/distribution.js +16 -26
  83. package/lib/aws/edge/dns-alias-record-targets.js +2 -2
  84. package/lib/aws/edge/dns-record.js +13 -13
  85. package/lib/aws/edge/dns-zone.js +1 -1
  86. package/lib/aws/edge/function.js +2 -2
  87. package/lib/aws/edge/index.d.ts +1 -0
  88. package/lib/aws/edge/index.js +2 -1
  89. package/lib/aws/edge/key-value-store.js +4 -4
  90. package/lib/aws/edge/origin.js +3 -3
  91. package/lib/aws/edge/response-headers-policy.d.ts +374 -0
  92. package/lib/aws/edge/response-headers-policy.js +220 -0
  93. package/lib/aws/encryption/alias.js +1 -1
  94. package/lib/aws/encryption/key.js +1 -1
  95. package/lib/aws/encryption/via-service-principal.js +1 -1
  96. package/lib/aws/iam/grant.js +2 -2
  97. package/lib/aws/iam/managed-policy.js +1 -1
  98. package/lib/aws/iam/oidc-provider.js +1 -1
  99. package/lib/aws/iam/policy-document.js +1 -1
  100. package/lib/aws/iam/policy-statement.js +1 -1
  101. package/lib/aws/iam/policy.js +1 -1
  102. package/lib/aws/iam/principals.js +20 -20
  103. package/lib/aws/iam/role.js +1 -1
  104. package/lib/aws/iam/saml-provider.js +2 -2
  105. package/lib/aws/iam/unknown-principal.js +1 -1
  106. package/lib/aws/network/simple-ipv4-vpc.js +1 -1
  107. package/lib/aws/network/subnet-group.js +3 -3
  108. package/lib/aws/network/subnet.js +4 -4
  109. package/lib/aws/notify/archive.js +1 -1
  110. package/lib/aws/notify/connection.js +3 -3
  111. package/lib/aws/notify/event-bus.js +3 -3
  112. package/lib/aws/notify/event-pattern.js +1 -1
  113. package/lib/aws/notify/input.js +2 -2
  114. package/lib/aws/notify/kinesis-stream.js +1 -1
  115. package/lib/aws/notify/queue-policy.js +1 -1
  116. package/lib/aws/notify/queue.js +1 -1
  117. package/lib/aws/notify/resource-policy.js +1 -1
  118. package/lib/aws/notify/rule.js +1 -1
  119. package/lib/aws/notify/schedule.js +1 -1
  120. package/lib/aws/notify/targets/event-bus.js +1 -1
  121. package/lib/aws/notify/targets/function.js +1 -1
  122. package/lib/aws/notify/targets/log-group.js +2 -2
  123. package/lib/aws/notify/targets/sqs.js +1 -1
  124. package/lib/aws/notify/targets/state-machine.js +1 -1
  125. package/lib/aws/storage/bucket-notifications.js +1 -1
  126. package/lib/aws/storage/bucket-policy.js +1 -1
  127. package/lib/aws/storage/bucket-source.js +1 -1
  128. package/lib/aws/storage/bucket.js +1 -1
  129. package/lib/aws/storage/notification-targets/function.js +1 -1
  130. package/lib/aws/storage/notification-targets/queue.js +1 -1
  131. package/lib/aws/storage/origin-access-identity.js +1 -1
  132. package/lib/construct-base.js +2 -2
  133. package/lib/duration.js +1 -1
  134. package/lib/size.js +1 -1
  135. package/lib/stack-base.js +1 -1
  136. package/package.json +1 -1
@@ -1,8 +1,9 @@
1
1
  "use strict";
2
2
  var _a, _b, _c;
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.ManagedResponseHeadersPolicy = exports.ManagedOriginRequestPolicy = exports.ManagedCachePolicy = exports.ViewerProtocolPolicy = exports.CachedMethods = exports.AllowedMethods = exports.SecurityPolicyProtocol = exports.SSLMethod = exports.PriceClass = exports.HttpVersion = exports.GeoRestrictionType = exports.Distribution = void 0;
4
+ exports.ManagedOriginRequestPolicy = exports.ManagedCachePolicy = exports.ViewerProtocolPolicy = exports.CachedMethods = exports.AllowedMethods = exports.SecurityPolicyProtocol = exports.SSLMethod = exports.PriceClass = exports.HttpVersion = exports.GeoRestrictionType = exports.Distribution = void 0;
5
5
  const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
6
+ // https://github.com/aws/aws-cdk/blob/64a0e2cf5bb07f6debfc4b169bb3e1852ce668aa/packages/aws-cdk-lib/aws-cloudfront/lib/distribution.ts
6
7
  const provider_aws_1 = require("@cdktf/provider-aws");
7
8
  const cdktf_1 = require("cdktf");
8
9
  const arn_1 = require("../arn");
@@ -160,7 +161,15 @@ class Distribution extends aws_construct_1.AwsConstructBase {
160
161
  const managedCachePolicyName = props.cachePolicy ?? ManagedCachePolicy.CACHING_OPTIMIZED;
161
162
  const cachePolicy = this.dataLookup(managedCachePolicyName, provider_aws_1.dataAwsCloudfrontCachePolicy.DataAwsCloudfrontCachePolicy, { name: managedCachePolicyName });
162
163
  const originRequestPolicy = this.dataLookup(props.originRequestPolicy, provider_aws_1.dataAwsCloudfrontOriginRequestPolicy.DataAwsCloudfrontOriginRequestPolicy, { name: props.originRequestPolicy });
163
- const responseHeadersPolicy = this.dataLookup(props.responseHeadersPolicy, provider_aws_1.dataAwsCloudfrontResponseHeadersPolicy.DataAwsCloudfrontResponseHeadersPolicy, { name: props.responseHeadersPolicy });
164
+ let responseHeadersPolicyId;
165
+ if (typeof props.responseHeadersPolicy == "string") {
166
+ const managedPolicy = this.dataLookup(props.responseHeadersPolicy, provider_aws_1.dataAwsCloudfrontResponseHeadersPolicy.DataAwsCloudfrontResponseHeadersPolicy, { name: props.responseHeadersPolicy });
167
+ responseHeadersPolicyId = managedPolicy?.id;
168
+ }
169
+ else {
170
+ responseHeadersPolicyId =
171
+ props.responseHeadersPolicy?.responseHeadersPolicyId;
172
+ }
164
173
  return {
165
174
  targetOriginId: props.targetOriginId,
166
175
  allowedMethods: props.allowedMethods?.methods ?? AllowedMethods.ALLOW_GET_HEAD.methods,
@@ -168,7 +177,7 @@ class Distribution extends aws_construct_1.AwsConstructBase {
168
177
  cachePolicyId: cachePolicy?.id,
169
178
  compress: props.compress ?? true,
170
179
  originRequestPolicyId: originRequestPolicy?.id,
171
- responseHeadersPolicyId: responseHeadersPolicy?.id,
180
+ responseHeadersPolicyId,
172
181
  smoothStreaming: props.smoothStreaming,
173
182
  viewerProtocolPolicy: props.viewerProtocolPolicy ?? ViewerProtocolPolicy.ALLOW_ALL,
174
183
  };
@@ -234,7 +243,7 @@ class Distribution extends aws_construct_1.AwsConstructBase {
234
243
  }
235
244
  exports.Distribution = Distribution;
236
245
  _a = JSII_RTTI_SYMBOL_1;
237
- Distribution[_a] = { fqn: "terraconstructs.aws.edge.Distribution", version: "0.0.9" };
246
+ Distribution[_a] = { fqn: "terraconstructs.aws.edge.Distribution", version: "0.0.10" };
238
247
  var GeoRestrictionType;
239
248
  (function (GeoRestrictionType) {
240
249
  GeoRestrictionType["NONE"] = "none";
@@ -312,7 +321,7 @@ class AllowedMethods {
312
321
  }
313
322
  exports.AllowedMethods = AllowedMethods;
314
323
  _b = JSII_RTTI_SYMBOL_1;
315
- AllowedMethods[_b] = { fqn: "terraconstructs.aws.edge.AllowedMethods", version: "0.0.9" };
324
+ AllowedMethods[_b] = { fqn: "terraconstructs.aws.edge.AllowedMethods", version: "0.0.10" };
316
325
  /** HEAD and GET */
317
326
  AllowedMethods.ALLOW_GET_HEAD = new AllowedMethods(["GET", "HEAD"]);
318
327
  /** HEAD, GET, and OPTIONS */
@@ -341,7 +350,7 @@ class CachedMethods {
341
350
  }
342
351
  exports.CachedMethods = CachedMethods;
343
352
  _c = JSII_RTTI_SYMBOL_1;
344
- CachedMethods[_c] = { fqn: "terraconstructs.aws.edge.CachedMethods", version: "0.0.9" };
353
+ CachedMethods[_c] = { fqn: "terraconstructs.aws.edge.CachedMethods", version: "0.0.10" };
345
354
  /** HEAD and GET */
346
355
  CachedMethods.CACHE_GET_HEAD = new CachedMethods(["GET", "HEAD"]);
347
356
  /** HEAD, GET, and OPTIONS */
@@ -422,23 +431,4 @@ var ManagedOriginRequestPolicy;
422
431
  /** This policy includes all values (query strings, and cookies) except the header in the viewer request. */
423
432
  ManagedOriginRequestPolicy["ALL_VIEWER_EXCEPT_HOST_HEADER"] = "Managed-AllViewerExceptHostHeader";
424
433
  })(ManagedOriginRequestPolicy || (exports.ManagedOriginRequestPolicy = ManagedOriginRequestPolicy = {}));
425
- /**
426
- * A Response Headers Policy configuration
427
- *
428
- * @link https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/using-managed-response-headers-policies.html
429
- * @link https://registry.terraform.io/providers/hashicorp/aws/5.60.0/docs/data-sources/cloudfront_response_headers_policy#aws-managed-policies
430
- */
431
- var ManagedResponseHeadersPolicy;
432
- (function (ManagedResponseHeadersPolicy) {
433
- /** Use this managed policy to allow simple CORS requests from any origin. */
434
- ManagedResponseHeadersPolicy["CORS_ALLOW_ALL_ORIGINS"] = "Managed-SimpleCORS";
435
- /** Use this managed policy to allow CORS requests from any origin, including preflight requests. */
436
- ManagedResponseHeadersPolicy["CORS_ALLOW_ALL_ORIGINS_WITH_PREFLIGHT"] = "Managed-CORS-With-Preflight";
437
- /** Use this managed policy to add a set of security headers to all responses that CloudFront sends to viewers. */
438
- ManagedResponseHeadersPolicy["SECURITY_HEADERS"] = "Managed-SecurityHeadersPolicy";
439
- /** Use this managed policy to allow simple CORS requests from any origin and add a set of security headers to all responses that CloudFront sends to viewers. */
440
- ManagedResponseHeadersPolicy["CORS_ALLOW_ALL_ORIGINS_AND_SECURITY_HEADERS"] = "Managed-CORS-and-SecurityHeadersPolicy";
441
- /** Use this managed policy to allow CORS requests from any origin, including preflight requests, and add a set of security headers to all responses that CloudFront sends to viewers. */
442
- ManagedResponseHeadersPolicy["CORS_ALLOW_ALL_ORIGINS_WITH_PREFLIGHT_AND_SECURITY_HEADERS"] = "Managed-CORS-with-preflight-and-SecurityHeadersPolicy";
443
- })(ManagedResponseHeadersPolicy || (exports.ManagedResponseHeadersPolicy = ManagedResponseHeadersPolicy = {}));
444
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlzdHJpYnV0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2F3cy9lZGdlL2Rpc3RyaWJ1dGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLHNEQUs2QjtBQUM3QixpQ0FBaUQ7QUFJakQsZ0NBQW1DO0FBQ25DLG9EQUkwQjtBQUMxQiw0Q0FBd0M7QUFtTXhDOztHQUVHO0FBQ0gsTUFBYSxZQUFhLFNBQVEsZ0NBQWdCO0lBS2hELElBQVcsbUJBQW1CO1FBQzVCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN2QixDQUFDO0lBQ0QsSUFBVyxPQUFPO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDO0lBQ2xDLENBQUM7SUFFRCxJQUFXLFVBQVU7UUFDbkIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzFCLENBQUM7SUFVRCxZQUFZLEtBQWdCLEVBQUUsSUFBWSxFQUFFLEtBQXdCO1FBQ2xFLEtBQUssQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBUlgsYUFBUSxHQUFHLElBQUksS0FBSyxFQUFlLENBQUM7UUFFcEMsd0JBQW1CLEdBQW9CLEVBQUUsQ0FBQztRQVF6RCxJQUFJLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUN0QixNQUFNLGlCQUFpQixHQUFHLG9CQUFRLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FDOUQsS0FBSyxDQUFDLFdBQVcsQ0FBQyxjQUFjLEVBQ2hDLGVBQVMsQ0FBQyxtQkFBbUIsQ0FDOUIsQ0FBQyxNQUFNLENBQUM7WUFDVCxJQUNFLENBQUMsYUFBSyxDQUFDLFlBQVksQ0FBQyxpQkFBaUIsQ0FBQztnQkFDdEMsaUJBQWlCLEtBQUssV0FBVyxFQUNqQyxDQUFDO2dCQUNELE1BQU0sSUFBSSxLQUFLLENBQ2Isb0dBQW9HLGlCQUFpQixHQUFHLENBQ3pILENBQUM7WUFDSixDQUFDO1FBQ0gsQ0FBQztR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O09BSUc7SUFDSCxtSEFBNkYsQ0FBQTtJQUM3RiwyR0FBMkc7SUFDM0csa0VBQTRDLENBQUE7SUFDNUMsc0ZBQXNGO0lBQ3RGLGdGQUEwRCxDQUFBO0lBQzFEOztPQUVHO0lBQ0gsK0ZBQXlFLENBQUE7SUFDekU7O09BRUc7SUFDSCwwSEFBb0csQ0FBQTtBQUN0RyxDQUFDLEVBNUJXLGtCQUFrQixrQ0FBbEIsa0JBQWtCLFFBNEI3QjtBQUVEOzs7OztHQUtHO0FBQ0gsSUFBWSwwQkFlWDtBQWZELFdBQVksMEJBQTBCO0lBQ3BDLHFIQUFxSDtJQUNySCw0RkFBOEQsQ0FBQTtJQUM5RCxxSUFBcUk7SUFDckksOEVBQWdELENBQUE7SUFDaEQseUlBQXlJO0lBQ3pJLHNFQUF3QyxDQUFBO0lBQ3hDLG1HQUFtRztJQUNuRyw4REFBZ0MsQ0FBQTtJQUNoQyxvR0FBb0c7SUFDcEcsNEdBQThFLENBQUE7SUFDOUUsbU9BQW1PO0lBQ25PLDhHQUFnRixDQUFBO0lBQ2hGLDRHQUE0RztJQUM1RyxpR0FBbUUsQ0FBQTtBQUNyRSxDQUFDLEVBZlcsMEJBQTBCLDBDQUExQiwwQkFBMEIsUUFlckM7QUFFRDs7Ozs7R0FLRztBQUNILElBQVksNEJBV1g7QUFYRCxXQUFZLDRCQUE0QjtJQUN0Qyw2RUFBNkU7SUFDN0UsNkVBQTZDLENBQUE7SUFDN0Msb0dBQW9HO0lBQ3BHLHFHQUFxRSxDQUFBO0lBQ3JFLGtIQUFrSDtJQUNsSCxrRkFBa0QsQ0FBQTtJQUNsRCxpS0FBaUs7SUFDakssc0hBQXNGLENBQUE7SUFDdEYseUxBQXlMO0lBQ3pMLG9KQUFvSCxDQUFBO0FBQ3RILENBQUMsRUFYVyw0QkFBNEIsNENBQTVCLDRCQUE0QixRQVd2QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGNsb3VkZnJvbnREaXN0cmlidXRpb24sXG4gIGRhdGFBd3NDbG91ZGZyb250Q2FjaGVQb2xpY3ksXG4gIGRhdGFBd3NDbG91ZGZyb250T3JpZ2luUmVxdWVzdFBvbGljeSxcbiAgZGF0YUF3c0Nsb3VkZnJvbnRSZXNwb25zZUhlYWRlcnNQb2xpY3ksXG59IGZyb20gXCJAY2RrdGYvcHJvdmlkZXItYXdzXCI7XG5pbXBvcnQgeyBJUmVzb2x2YWJsZSwgVG9rZW4sIExhenkgfSBmcm9tIFwiY2RrdGZcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyBJQ2VydGlmaWNhdGUsIElPcmlnaW4sIEZ1bmN0aW9uQXNzb2NpYXRpb24gfSBmcm9tIFwiLlwiO1xuaW1wb3J0IHsgRHVyYXRpb24gfSBmcm9tIFwiLi4vLi4vZHVyYXRpb25cIjtcbmltcG9ydCB7IEFybkZvcm1hdCB9IGZyb20gXCIuLi9hcm5cIjtcbmltcG9ydCB7XG4gIEF3c0NvbnN0cnVjdEJhc2UsXG4gIElBd3NDb25zdHJ1Y3QsXG4gIEF3c0NvbnN0cnVjdFByb3BzLFxufSBmcm9tIFwiLi4vYXdzLWNvbnN0cnVjdFwiO1xuaW1wb3J0IHsgQXdzU3RhY2sgfSBmcm9tIFwiLi4vYXdzLXN0YWNrXCI7XG5cbi8vIFRPRE86IFJlLWFkZCBpbnZhbGlkYXRpb24gc3VwcG9ydFxuLy8gVE9ETzogUmUtYWRkIG9yaWdpbiBncm91cCAoZmFpbG92ZXIpIHN1cHBvcnRcbi8vIFRPRE86IFJlLWFkZCBrZXkgZ3JvdXAgc3VwcG9ydFxuLy8gVE9ETzogUmUtYWRkIFdBRiBzdXBwb3J0XG4vLyBUT0RPOiBSZS1hZGQgbG9nZ2luZyBzdXBwb3J0XG4vLyBUT0RPOiBSZS1hZGQgY3VzdG9tIGNhY2hlLCBvcmlnaW5SZXF1ZXN0LCBSZXNwb25zZUhlYWRlciBwb2xpY3kgc3VwcG9ydD9cblxuLyoqXG4gKiBPdXRwdXRzIHdoaWNoIG1heSBiZSByZWdpc3RlcmVkIGZvciBvdXRwdXQgdmlhIHRoZSBHcmlkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERpc3RyaWJ1dGlvbk91dHB1dHMge1xuICAvKipcbiAgICogSWRlbnRpZmllciBmb3IgdGhlIGRpc3RyaWJ1dGlvbi4gRm9yIGV4YW1wbGU6IGBFREZEVkJENjMyQkhEUzVgLlxuICAgKi9cbiAgcmVhZG9ubHkgaWQ6IHN0cmluZztcblxuICAvKipcbiAgICogQ2xvdWRGcm9udCBSb3V0ZSA1MyB6b25lIElEIHRoYXQgY2FuIGJlIHVzZWQgdG9cbiAgICogcm91dGUgYW4gQWxpYXMgUmVzb3VyY2UgUmVjb3JkIFNldCB0by5cbiAgICpcbiAgICogVGhpcyBhdHRyaWJ1dGUgaXMgc2ltcGx5IGFuIGFsaWFzIGZvciB0aGUgem9uZSBJRFxuICAgKi9cbiAgcmVhZG9ubHkgaG9zdGVkWm9uZUlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEN1cnJlbnQgc3RhdHVzIG9mIHRoZSBkaXN0cmlidXRpb24uXG4gICAqXG4gICAqIGBEZXBsb3llZGAgaWYgdGhlIGRpc3RyaWJ1dGlvbidzIGluZm9ybWF0aW9uIGlzIGZ1bGx5IHByb3BhZ2F0ZWRcbiAgICogdGhyb3VnaG91dCB0aGUgQW1hem9uIENsb3VkRnJvbnQgc3lzdGVtLlxuICAgKi9cbiAgcmVhZG9ubHkgc3RhdHVzOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEFSTiBmb3IgdGhlIGRpc3RyaWJ1dGlvblxuICAgKi9cbiAgcmVhZG9ubHkgYXJuOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIERvbWFpbiBuYW1lIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGRpc3RyaWJ1dGlvbi5cbiAgICpcbiAgICogRm9yIGV4YW1wbGU6IGBkNjA0NzIxZnhhYXF5OS5jbG91ZGZyb250Lm5ldGBcbiAgICovXG4gIHJlYWRvbmx5IGRvbWFpbk5hbWU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBJbXBvcnRlZCBvciBjcmVhdGVkIEROUyB6b25lIGF0dHJpYnV0ZXNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJRGlzdHJpYnV0aW9uIGV4dGVuZHMgSUF3c0NvbnN0cnVjdCB7XG4gIC8qKiBTdHJvbmdseSB0eXBlZCBvdXRwdXRzXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IGRpc3RyaWJ1dGlvbk91dHB1dHM6IERpc3RyaWJ1dGlvbk91dHB1dHM7XG5cbiAgLyoqXG4gICAqIERvbWFpbiBuYW1lIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGRpc3RyaWJ1dGlvbi5cbiAgICpcbiAgICogQGF0dHJpYnV0ZVxuICAgKiBGb3IgZXhhbXBsZTogYGQ2MDQ3MjFmeGFhcXk5LmNsb3VkZnJvbnQubmV0YFxuICAgKi9cbiAgcmVhZG9ubHkgZG9tYWluTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDbG91ZEZyb250IFJvdXRlIDUzIHpvbmUgSUQgdGhhdCBjYW4gYmUgdXNlZCB0b1xuICAgKiByb3V0ZSBhbiBBbGlhcyBSZXNvdXJjZSBSZWNvcmQgU2V0IHRvLlxuICAgKlxuICAgKiBUaGlzIGF0dHJpYnV0ZSBpcyBzaW1wbHkgYW4gYWxpYXMgZm9yIHRoZSB6b25lIElEXG4gICAqL1xuICByZWFkb25seSBob3N0ZWRab25lSWQ6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEaXN0cmlidXRpb25Qcm9wcyBleHRlbmRzIEF3c0NvbnN0cnVjdFByb3BzIHtcbiAgLyoqXG4gICAqIEV4dHJhIENOQU1FcyAoYWx0ZXJuYXRlIGRvbWFpbiBuYW1lcyksIGlmIGFueSwgZm9yIHRoaXMgZGlzdHJpYnV0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgYWxpYXNlcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBkaXN0cmlidXRpb24gaXMgZW5hYmxlZCB0byBhY2NlcHQgZW5kIHVzZXIgcmVxdWVzdHMgZm9yIGNvbnRlbnQuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IGVuYWJsZWQ/OiBib29sZWFuIHwgSVJlc29sdmFibGU7XG5cbiAgLyoqXG4gICAqIElmIGVuYWJsZWQsIHRoZSByZXNvdXJjZSB3aWxsIHdhaXQgZm9yIHRoZSBkaXN0cmlidXRpb24gc3RhdHVzIHRvIGNoYW5nZVxuICAgKiBmcm9tIEluUHJvZ3Jlc3MgdG8gRGVwbG95ZWQuXG4gICAqXG4gICAqIFNldHRpbmcgdGhpcyB0b2ZhbHNlIHdpbGwgc2tpcCB0aGUgcHJvY2Vzcy5cbiAgICpcbiAgICogQGRlZmF1bHQ6IHRydWUuXG4gICAqL1xuICByZWFkb25seSB3YWl0Rm9yRGVwbG95bWVudD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBkZWZhdWx0IGJlaGF2aW9yIGZvciB0aGUgZGlzdHJpYnV0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgZGVmYXVsdEJlaGF2aW9yOiBCZWhhdmlvck9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIEFkZGl0aW9uYWwgYmVoYXZpb3JzIGZvciB0aGUgZGlzdHJpYnV0aW9uLCBtYXBwZWQgYnkgdGhlIHBhdGhQYXR0ZXJuIHRoYXQgc3BlY2lmaWVzIHdoaWNoIHJlcXVlc3RzIHRvIGFwcGx5IHRoZSBiZWhhdmlvciB0by5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBhZGRpdGlvbmFsIGJlaGF2aW9ycyBhcmUgYWRkZWQuXG4gICAqL1xuICByZWFkb25seSBhZGRpdGlvbmFsQmVoYXZpb3JzPzogUmVjb3JkPHN0cmluZywgQmVoYXZpb3JPcHRpb25zPjtcblxuICAvKipcbiAgICogQSBjZXJ0aWZpY2F0ZSB0byBhc3NvY2lhdGUgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiBUaGUgY2VydGlmaWNhdGUgbXVzdCBiZSBsb2NhdGVkIGluIE4uIFZpcmdpbmlhICh1cy1lYXN0LTEpLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHRoZSBDbG91ZEZyb250IHdpbGRjYXJkIGNlcnRpZmljYXRlICgqLmNsb3VkZnJvbnQubmV0KSB3aWxsIGJlIHVzZWQuXG4gICAqL1xuICByZWFkb25seSBjZXJ0aWZpY2F0ZT86IElDZXJ0aWZpY2F0ZTtcblxuICAvKipcbiAgICogQW55IGNvbW1lbnRzIHlvdSB3YW50IHRvIGluY2x1ZGUgYWJvdXQgdGhlIGRpc3RyaWJ1dGlvbi5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBjb21tZW50XG4gICAqL1xuICByZWFkb25seSBjb21tZW50Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgb2JqZWN0IHRoYXQgeW91IHdhbnQgQ2xvdWRGcm9udCB0byByZXF1ZXN0IGZyb20geW91ciBvcmlnaW4gKGZvciBleGFtcGxlLCBpbmRleC5odG1sKVxuICAgKiB3aGVuIGEgdmlld2VyIHJlcXVlc3RzIHRoZSByb290IFVSTCBmb3IgeW91ciBkaXN0cmlidXRpb24uIElmIG5vIGRlZmF1bHQgb2JqZWN0IGlzIHNldCwgdGhlXG4gICAqIHJlcXVlc3QgZ29lcyB0byB0aGUgb3JpZ2luJ3Mgcm9vdCAoZS5nLiwgZXhhbXBsZS5jb20vKS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBkZWZhdWx0IHJvb3Qgb2JqZWN0XG4gICAqL1xuICByZWFkb25seSBkZWZhdWx0Um9vdE9iamVjdD86IHN0cmluZztcblxuICAvKipcbiAgICogQ29udHJvbHMgdGhlIGNvdW50cmllcyBpbiB3aGljaCB5b3VyIGNvbnRlbnQgaXMgZGlzdHJpYnV0ZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm8gZ2VvZ3JhcGhpYyByZXN0cmljdGlvbnNcbiAgICovXG4gIHJlYWRvbmx5IGdlb1Jlc3RyaWN0aW9uPzogR2VvUmVzdHJpY3Rpb247XG5cbiAgLyoqXG4gICAqIFNwZWNpZnkgdGhlIG1heGltdW0gSFRUUCB2ZXJzaW9uIHRoYXQgeW91IHdhbnQgdmlld2VycyB0byB1c2UgdG8gY29tbXVuaWNhdGUgd2l0aCBDbG91ZEZyb250LlxuICAgKlxuICAgKiBGb3Igdmlld2VycyBhbmQgQ2xvdWRGcm9udCB0byB1c2UgSFRUUC8yLCB2aWV3ZXJzIG11c3Qgc3VwcG9ydCBUTFMgMS4yIG9yIGxhdGVyLCBhbmQgbXVzdCBzdXBwb3J0IHNlcnZlciBuYW1lIGlkZW50aWZpY2F0aW9uIChTTkkpLlxuICAgKlxuICAgKiBAZGVmYXVsdCBIdHRwVmVyc2lvbi5IVFRQMlxuICAgKi9cbiAgcmVhZG9ubHkgaHR0cFZlcnNpb24/OiBIdHRwVmVyc2lvbjtcblxuICAvKipcbiAgICogVGhlIHByaWNlIGNsYXNzIHRoYXQgY29ycmVzcG9uZHMgd2l0aCB0aGUgbWF4aW11bSBwcmljZSB0aGF0IHlvdSB3YW50IHRvIHBheSBmb3IgQ2xvdWRGcm9udCBzZXJ2aWNlLlxuICAgKiBJZiB5b3Ugc3BlY2lmeSBQcmljZUNsYXNzX0FsbCwgQ2xvdWRGcm9udCByZXNwb25kcyB0byByZXF1ZXN0cyBmb3IgeW91ciBvYmplY3RzIGZyb20gYWxsIENsb3VkRnJvbnQgZWRnZSBsb2NhdGlvbnMuXG4gICAqIElmIHlvdSBzcGVjaWZ5IGEgcHJpY2UgY2xhc3Mgb3RoZXIgdGhhbiBQcmljZUNsYXNzX0FsbCwgQ2xvdWRGcm9udCBzZXJ2ZXMgeW91ciBvYmplY3RzIGZyb20gdGhlIENsb3VkRnJvbnQgZWRnZSBsb2NhdGlvblxuICAgKiB0aGF0IGhhcyB0aGUgbG93ZXN0IGxhdGVuY3kgYW1vbmcgdGhlIGVkZ2UgbG9jYXRpb25zIGluIHlvdXIgcHJpY2UgY2xhc3MuXG4gICAqXG4gICAqIEBkZWZhdWx0IFByaWNlQ2xhc3MuUFJJQ0VfQ0xBU1NfQUxMXG4gICAqL1xuICByZWFkb25seSBwcmljZUNsYXNzPzogUHJpY2VDbGFzcztcblxuICAvKipcbiAgICogSG93IENsb3VkRnJvbnQgc2hvdWxkIGhhbmRsZSByZXF1ZXN0cyB0aGF0IGFyZSBub3Qgc3VjY2Vzc2Z1bCAoZS5nLiwgUGFnZU5vdEZvdW5kKS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBjdXN0b20gZXJyb3IgcmVzcG9uc2VzLlxuICAgKi9cbiAgcmVhZG9ubHkgZXJyb3JSZXNwb25zZXM/OiBFcnJvclJlc3BvbnNlW107XG5cbiAgLyoqXG4gICAqIFRoZSBtaW5pbXVtIHZlcnNpb24gb2YgdGhlIFNTTCBwcm90b2NvbCB0aGF0IHlvdSB3YW50IENsb3VkRnJvbnQgdG8gdXNlIGZvciBIVFRQUyBjb25uZWN0aW9ucy5cbiAgICpcbiAgICogQ2xvdWRGcm9udCBzZXJ2ZXMgeW91ciBvYmplY3RzIG9ubHkgdG8gYnJvd3NlcnMgb3IgZGV2aWNlcyB0aGF0IHN1cHBvcnQgYXRcbiAgICogbGVhc3QgdGhlIFNTTCB2ZXJzaW9uIHRoYXQgeW91IHNwZWNpZnkuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gU2VjdXJpdHlQb2xpY3lQcm90b2NvbC5UTFNfVjFfMl8yMDIxLlxuICAgKi9cbiAgcmVhZG9ubHkgbWluaW11bVByb3RvY29sVmVyc2lvbj86IFNlY3VyaXR5UG9saWN5UHJvdG9jb2w7XG5cbiAgLyoqXG4gICAqIFRoZSBTU0wgbWV0aG9kIENsb3VkRnJvbnQgd2lsbCB1c2UgZm9yIHlvdXIgZGlzdHJpYnV0aW9uLlxuICAgKlxuICAgKiBTZXJ2ZXIgTmFtZSBJbmRpY2F0aW9uIChTTkkpIC0gaXMgYW4gZXh0ZW5zaW9uIHRvIHRoZSBUTFMgY29tcHV0ZXIgbmV0d29ya2luZyBwcm90b2NvbCBieSB3aGljaCBhIGNsaWVudCBpbmRpY2F0ZXNcbiAgICogd2hpY2ggaG9zdG5hbWUgaXQgaXMgYXR0ZW1wdGluZyB0byBjb25uZWN0IHRvIGF0IHRoZSBzdGFydCBvZiB0aGUgaGFuZHNoYWtpbmcgcHJvY2Vzcy4gVGhpcyBhbGxvd3MgYSBzZXJ2ZXIgdG8gcHJlc2VudFxuICAgKiBtdWx0aXBsZSBjZXJ0aWZpY2F0ZXMgb24gdGhlIHNhbWUgSVAgYWRkcmVzcyBhbmQgVENQIHBvcnQgbnVtYmVyIGFuZCBoZW5jZSBhbGxvd3MgbXVsdGlwbGUgc2VjdXJlIChIVFRQUykgd2Vic2l0ZXNcbiAgICogKG9yIGFueSBvdGhlciBzZXJ2aWNlIG92ZXIgVExTKSB0byBiZSBzZXJ2ZWQgYnkgdGhlIHNhbWUgSVAgYWRkcmVzcyB3aXRob3V0IHJlcXVpcmluZyBhbGwgdGhvc2Ugc2l0ZXMgdG8gdXNlIHRoZSBzYW1lIGNlcnRpZmljYXRlLlxuICAgKlxuICAgKiBDbG91ZEZyb250IGNhbiB1c2UgU05JIHRvIGhvc3QgbXVsdGlwbGUgZGlzdHJpYnV0aW9ucyBvbiB0aGUgc2FtZSBJUCAtIHdoaWNoIGEgbGFyZ2UgbWFqb3JpdHkgb2YgY2xpZW50cyB3aWxsIHN1cHBvcnQuXG4gICAqXG4gICAqIElmIHlvdXIgY2xpZW50cyBjYW5ub3Qgc3VwcG9ydCBTTkkgaG93ZXZlciAtIENsb3VkRnJvbnQgY2FuIHVzZSBkZWRpY2F0ZWQgSVBzIGZvciB5b3VyIGRpc3RyaWJ1dGlvbiAtIGJ1dCB0aGVyZSBpcyBhIHByb3JhdGVkIG1vbnRobHkgY2hhcmdlIGZvclxuICAgKiB1c2luZyB0aGlzIGZlYXR1cmUuIEJ5IGRlZmF1bHQsIHdlIHVzZSBTTkkgLSBidXQgeW91IGNhbiBvcHRpb25hbGx5IGVuYWJsZSBkZWRpY2F0ZWQgSVBzIChWSVApLlxuICAgKlxuICAgKiBTZWUgdGhlIENsb3VkRnJvbnQgU1NMIGZvciBtb3JlIGRldGFpbHMgYWJvdXQgcHJpY2luZyA6IGh0dHBzOi8vYXdzLmFtYXpvbi5jb20vY2xvdWRmcm9udC9jdXN0b20tc3NsLWRvbWFpbnMvXG4gICAqXG4gICAqIEBkZWZhdWx0IFNTTE1ldGhvZC5TTklcbiAgICovXG4gIHJlYWRvbmx5IHNzbFN1cHBvcnRNZXRob2Q/OiBTU0xNZXRob2Q7XG59XG5cbi8qKlxuICogQW1hem9uIENsb3VkZnJvbnQgRGlzdHJpYnV0aW9uXG4gKi9cbmV4cG9ydCBjbGFzcyBEaXN0cmlidXRpb24gZXh0ZW5kcyBBd3NDb25zdHJ1Y3RCYXNlIGltcGxlbWVudHMgSURpc3RyaWJ1dGlvbiB7XG4gIC8vIFRPRE86IEFkZCBzdGF0aWMgZnJvbUxvb2t1cD9cbiAgcHJpdmF0ZSByZWFkb25seSByZXNvdXJjZTogY2xvdWRmcm9udERpc3RyaWJ1dGlvbi5DbG91ZGZyb250RGlzdHJpYnV0aW9uO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX291dHB1dHM6IERpc3RyaWJ1dGlvbk91dHB1dHM7XG4gIHB1YmxpYyBnZXQgZGlzdHJpYnV0aW9uT3V0cHV0cygpOiBEaXN0cmlidXRpb25PdXRwdXRzIHtcbiAgICByZXR1cm4gdGhpcy5fb3V0cHV0cztcbiAgfVxuICBwdWJsaWMgZ2V0IG91dHB1dHMoKTogUmVjb3JkPHN0cmluZywgYW55PiB7XG4gICAgcmV0dXJuIHRoaXMuZGlzdHJpYnV0aW9uT3V0cHV0cztcbiAgfVxuICBwcml2YXRlIHJlYWRvbmx5IF9kb21haW5OYW1lOiBzdHJpbmc7XG4gIHB1YmxpYyBnZXQgZG9tYWluTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9kb21haW5OYW1lO1xuICB9XG4gIHB1YmxpYyByZWFkb25seSBob3N0ZWRab25lSWQ6IHN0cmluZztcblxuICBwcml2YXRlIHJlYWRvbmx5IF9vcmlnaW5zID0gbmV3IEFycmF5PE9yaWdpbkluZGV4PigpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgYWRkaXRpb25hbEJlaGF2aW9yczogQ2FjaGVCZWhhdmlvcltdID0gW107XG5cbiAgcHJpdmF0ZSByZWFkb25seSBlcnJvclJlc3BvbnNlczogRXJyb3JSZXNwb25zZVtdO1xuICBwcml2YXRlIHJlYWRvbmx5IGNlcnRpZmljYXRlPzogSUNlcnRpZmljYXRlO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIG5hbWU6IHN0cmluZywgcHJvcHM6IERpc3RyaWJ1dGlvblByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIG5hbWUsIHByb3BzKTtcblxuICAgIGlmIChwcm9wcy5jZXJ0aWZpY2F0ZSkge1xuICAgICAgY29uc3QgY2VydGlmaWNhdGVSZWdpb24gPSBBd3NTdGFjay5vZkF3c0NvbnN0cnVjdCh0aGlzKS5zcGxpdEFybihcbiAgICAgICAgcHJvcHMuY2VydGlmaWNhdGUuY2VydGlmaWNhdGVBcm4sXG4gICAgICAgIEFybkZvcm1hdC5TTEFTSF9SRVNPVVJDRV9OQU1FLFxuICAgICAgKS5yZWdpb247XG4gICAgICBpZiAoXG4gICAgICAgICFUb2tlbi5pc1VucmVzb2x2ZWQoY2VydGlmaWNhdGVSZWdpb24pICYmXG4gICAgICAgIGNlcnRpZmljYXRlUmVnaW9uICE9PSBcInVzLWVhc3QtMVwiXG4gICAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBEaXN0cmlidXRpb24gY2VydGlmaWNhdGVzIG11c3QgYmUgaW4gdGhlIHVzLWVhc3QtMSByZWdpb24gYW5kIHRoZSBjZXJ0aWZpY2F0ZSB5b3UgcHJvdmlkZWQgaXMgaW4gJHtjZXJ0aWZpY2F0ZVJlZ2lvbn0uYCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5jZXJ0aWZpY2F0ZSA9IHByb3BzLmNlcnRpZmljYXRlO1xuICAgIHRoaXMuZXJyb3JSZXNwb25zZXMgPSBwcm9wcy5lcnJvclJlc3BvbnNlcyA/PyBbXTtcblxuICAgIGNvbnN0IGRlZmF1bHRPcmlnaW5JZCA9IHRoaXMuYWRkT3JpZ2luKHByb3BzLmRlZmF1bHRCZWhhdmlvci5vcmlnaW4pO1xuICAgIGlmIChwcm9wcy5hZGRpdGlvbmFsQmVoYXZpb3JzKSB7XG4gICAgICBPYmplY3QuZW50cmllcyhwcm9wcy5hZGRpdGlvbmFsQmVoYXZpb3JzKS5mb3JFYWNoKFxuICAgICAgICAoW3BhdGhQYXR0ZXJuLCBiZWhhdmlvck9wdGlvbnNdKSA9PiB7XG4gICAgICAgICAgdGhpcy5hZGRCZWhhdmlvcihcbiAgICAgICAgICAgIHBhdGhQYXR0ZXJuLFxuICAgICAgICAgICAgYmVoYXZpb3JPcHRpb25zLm9yaWdpbixcbiAgICAgICAgICAgIGJlaGF2aW9yT3B0aW9ucyxcbiAgICAgICAgICApO1xuICAgICAgICB9LFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBDb21tZW50cyBoYXZlIGFuIHVuZG9jdW1lbnRlZCBsaW1pdCBvZiAxMjggY2hhcmFjdGVyc1xuICAgIGNvbnN0IHRyaW1tZWRDb21tZW50ID1cbiAgICAgIHByb3BzLmNvbW1lbnQgJiYgcHJvcHMuY29tbWVudC5sZW5ndGggPiAxMjhcbiAgICAgICAgPyBgJHtwcm9wcy5jb21tZW50LnNsaWNlKDAsIDEyOCAtIDMpfS4uLmBcbiAgICAgICAgOiBwcm9wcy5jb21tZW50O1xuXG4gICAgdGhpcy5yZXNvdXJjZSA9IG5ldyBjbG91ZGZyb250RGlzdHJpYnV0aW9uLkNsb3VkZnJvbnREaXN0cmlidXRpb24oXG4gICAgICB0aGlzLFxuICAgICAgXCJSZXNvdXJjZVwiLFxuICAgICAge1xuICAgICAgICBlbmFibGVkOiBwcm9wcy5lbmFibGVkID8/IHRydWUsXG4gICAgICAgIG9yaWdpbjogTGF6eS5hbnlWYWx1ZSh7XG4gICAgICAgICAgcHJvZHVjZTogKCkgPT5cbiAgICAgICAgICAgIHRoaXMuX29yaWdpbnMubWFwKChvKSA9PlxuICAgICAgICAgICAgICAvLyBMYXp5IHByb2R1Y2VycyBuZWVkIGFkZGl0aW9uYWwgeHh4VG9UZXJyYWZvcm0gd3JhcFxuICAgICAgICAgICAgICBjbG91ZGZyb250RGlzdHJpYnV0aW9uLmNsb3VkZnJvbnREaXN0cmlidXRpb25PcmlnaW5Ub1RlcnJhZm9ybShcbiAgICAgICAgICAgICAgICBvLm9yaWdpbi5yZW5kZXIoby5pZCksXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICApLFxuICAgICAgICB9KSxcbiAgICAgICAgZGVmYXVsdENhY2hlQmVoYXZpb3I6IHRoaXMuX3JlbmRlckRlZmF1bHRDYWNoZUJlaGF2aW9yKHtcbiAgICAgICAgICBwYXRoUGF0dGVybjogXCIqXCIsIC8vIGlnbm9yZWQgZm9yIERlZmF1bHQgQ2FjaGUgQmVoYXZpb3JcbiAgICAgICAgICB0YXJnZXRPcmlnaW5JZDogZGVmYXVsdE9yaWdpbklkLFxuICAgICAgICAgIC4uLnByb3BzLmRlZmF1bHRCZWhhdmlvcixcbiAgICAgICAgfSksXG4gICAgICAgIG9yZGVyZWRDYWNoZUJlaGF2aW9yOiBMYXp5LmFueVZhbHVlKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHByb2R1Y2U6ICgpID0+XG4gICAgICAgICAgICAgIHRoaXMuYWRkaXRpb25hbEJlaGF2aW9ycy5tYXAoKGIpID0+XG4gICAgICAgICAgICAgICAgLy8gTGF6eSBwcm9kdWNlcnMgbmVlZCBhZGRpdGlvbmFsIHh4eFRvVGVycmFmb3JtIHdyYXBcbiAgICAgICAgICAgICAgICBjbG91ZGZyb250RGlzdHJpYnV0aW9uLmNsb3VkZnJvbnREaXN0cmlidXRpb25PcmRlcmVkQ2FjaGVCZWhhdmlvclRvVGVycmFmb3JtKFxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBwYXRoUGF0dGVybjogYi5wYXRoUGF0dGVybixcbiAgICAgICAgICAgICAgICAgICAgLi4udGhpcy5fcmVuZGVyRGVmYXVsdENhY2hlQmVoYXZpb3IoYiksXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7IG9taXRFbXB0eUFycmF5OiB0cnVlIH0sXG4gICAgICAgICksXG4gICAgICAgIGFsaWFzZXM6IHByb3BzLmFsaWFzZXMsXG4gICAgICAgIGNvbW1lbnQ6IHRyaW1tZWRDb21tZW50LFxuICAgICAgICBjdXN0b21FcnJvclJlc3BvbnNlOiB0aGlzLnJlbmRlckVycm9yUmVzcG9uc2VzKCksXG4gICAgICAgIGRlZmF1bHRSb290T2JqZWN0OiBwcm9wcy5kZWZhdWx0Um9vdE9iamVjdCxcbiAgICAgICAgaHR0cFZlcnNpb246IHByb3BzLmh0dHBWZXJzaW9uID8/IEh0dHBWZXJzaW9uLkhUVFAyLFxuICAgICAgICBwcmljZUNsYXNzOiBwcm9wcy5wcmljZUNsYXNzID8/IHVuZGVmaW5lZCxcbiAgICAgICAgcmVzdHJpY3Rpb25zOiB0aGlzLnJlbmRlclJlc3RyaWN0aW9ucyhwcm9wcy5nZW9SZXN0cmljdGlvbiksXG4gICAgICAgIHZpZXdlckNlcnRpZmljYXRlOiB0aGlzLnJlbmRlclZpZXdlckNlcnRpZmljYXRlKFxuICAgICAgICAgIHRoaXMuY2VydGlmaWNhdGUsXG4gICAgICAgICAgcHJvcHMubWluaW11bVByb3RvY29sVmVyc2lvbixcbiAgICAgICAgICBwcm9wcy5zc2xTdXBwb3J0TWV0aG9kLFxuICAgICAgICApLFxuICAgICAgICB3YWl0Rm9yRGVwbG95bWVudDogcHJvcHMud2FpdEZvckRlcGxveW1lbnQsXG4gICAgICB9LFxuICAgICk7XG5cbiAgICB0aGlzLl9kb21haW5OYW1lID0gdGhpcy5yZXNvdXJjZS5kb21haW5OYW1lO1xuICAgIHRoaXMuaG9zdGVkWm9uZUlkID0gdGhpcy5yZXNvdXJjZS5ob3N0ZWRab25lSWQ7XG4gICAgdGhpcy5fb3V0cHV0cyA9IHtcbiAgICAgIGlkOiB0aGlzLnJlc291cmNlLmlkLFxuICAgICAgaG9zdGVkWm9uZUlkOiB0aGlzLnJlc291cmNlLmhvc3RlZFpvbmVJZCxcbiAgICAgIHN0YXR1czogdGhpcy5yZXNvdXJjZS5zdGF0dXMsXG4gICAgICBhcm46IHRoaXMucmVzb3VyY2UuYXJuLFxuICAgICAgZG9tYWluTmFtZTogdGhpcy5fZG9tYWluTmFtZSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhbiBPcmlnaW4gdG8gdGhpcyBEaXN0cmlidXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSBvcmlnaW4gVGhlIE9yaWdpbiB0byBhZGQuXG4gICAqIEBwYXJhbSBvcmlnaW5JZCBBbiBvcHRpb25hbCBpZCB0byB1c2UgZm9yIHRoZSBPcmlnaW4gb3Igb25lIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKi9cbiAgcHVibGljIGFkZE9yaWdpbihvcmlnaW46IElPcmlnaW4sIG9yaWdpbklkPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBpbmRleGVkT3JpZ2luID0gdGhpcy5fb3JpZ2lucy5maW5kKFxuICAgICAgKG9yaWdpbkluZGV4KSA9PiBvcmlnaW5JbmRleC5vcmlnaW4gPT09IG9yaWdpbixcbiAgICApO1xuICAgIGlmIChpbmRleGVkT3JpZ2luKSB7XG4gICAgICBpZiAob3JpZ2luSWQgJiYgb3JpZ2luSWQgIT09IGluZGV4ZWRPcmlnaW4uaWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBEdXBsaWNhdGUgb3JpZ2luIGZvciAke2luZGV4ZWRPcmlnaW4uaWR9IGFuZCAke29yaWdpbklkfS5gLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGluZGV4ZWRPcmlnaW4uaWQ7XG4gICAgfVxuICAgIGNvbnN0IG5leHRJbmRleCA9IHRoaXMuX29yaWdpbnMubGVuZ3RoO1xuICAgIGNvbnN0IGlkID0gb3JpZ2luSWQgPz8gYG9yaWdpbi0ke25leHRJbmRleH1gO1xuICAgIC8vIGVuc3VyZSBpZCAoaWYgcHJvdmlkZWQpIGlzIHVuaXF1ZSB3aXRoaW4gRGlzdHJpYnV0aW9uXG4gICAgaWYgKHRoaXMuX29yaWdpbnMuc29tZSgob3JpZ2luSW5kZXgpID0+IG9yaWdpbkluZGV4LmlkID09PSBpZCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYER1cGxpY2F0ZSBvcmlnaW4gaWQgJHtpZH0uIE9yaWdpbklkcyBtdXN0IGJlIHVuaXF1ZSB3aXRoaW4gYSBkaXN0cmlidXRpb25gLFxuICAgICAgKTtcbiAgICB9XG4gICAgdGhpcy5fb3JpZ2lucy5wdXNoKHsgb3JpZ2luLCBpZCB9KTtcbiAgICByZXR1cm4gaWQ7XG4gIH1cblxuICBwcml2YXRlIHJlbmRlckVycm9yUmVzcG9uc2VzKCk6XG4gICAgfCBjbG91ZGZyb250RGlzdHJpYnV0aW9uLkNsb3VkZnJvbnREaXN0cmlidXRpb25DdXN0b21FcnJvclJlc3BvbnNlW11cbiAgICB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHRoaXMuZXJyb3JSZXNwb25zZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmVycm9yUmVzcG9uc2VzLm1hcCgoZXJyb3JDb25maWcpID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgIWVycm9yQ29uZmlnLnJlc3BvbnNlSHR0cFN0YXR1cyAmJlxuICAgICAgICAhZXJyb3JDb25maWcudHRsICYmXG4gICAgICAgICFlcnJvckNvbmZpZy5yZXNwb25zZVBhZ2VQYXRoXG4gICAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIFwiQSBjdXN0b20gZXJyb3IgcmVzcG9uc2Ugd2l0aG91dCBlaXRoZXIgYSAncmVzcG9uc2VIdHRwU3RhdHVzJywgJ3R0bCcgb3IgJ3Jlc3BvbnNlUGFnZVBhdGgnIGlzIG5vdCB2YWxpZC5cIixcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZXJyb3JDYWNoaW5nTWluVHRsOiBlcnJvckNvbmZpZy50dGw/LnRvU2Vjb25kcygpLFxuICAgICAgICBlcnJvckNvZGU6IGVycm9yQ29uZmlnLmh0dHBTdGF0dXMsXG4gICAgICAgIHJlc3BvbnNlQ29kZTogZXJyb3JDb25maWcucmVzcG9uc2VQYWdlUGF0aFxuICAgICAgICAgID8gKGVycm9yQ29uZmlnLnJlc3BvbnNlSHR0cFN0YXR1cyA/PyBlcnJvckNvbmZpZy5odHRwU3RhdHVzKVxuICAgICAgICAgIDogZXJyb3JDb25maWcucmVzcG9uc2VIdHRwU3RhdHVzLFxuICAgICAgICByZXNwb25zZVBhZ2VQYXRoOiBlcnJvckNvbmZpZy5yZXNwb25zZVBhZ2VQYXRoLFxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgbmV3IGJlaGF2aW9yIHRvIHRoaXMgZGlzdHJpYnV0aW9uIGZvciB0aGUgZ2l2ZW4gcGF0aFBhdHRlcm4uXG4gICAqXG4gICAqIEBwYXJhbSBwYXRoUGF0dGVybiB0aGUgcGF0aCBwYXR0ZXJuIChlLmcuLCAnaW1hZ2VzLyonKSB0aGF0IHNwZWNpZmllcyB3aGljaCByZXF1ZXN0cyB0byBhcHBseSB0aGUgYmVoYXZpb3IgdG8uXG4gICAqIEBwYXJhbSBvcmlnaW4gdGhlIG9yaWdpbiB0byB1c2UgZm9yIHRoaXMgYmVoYXZpb3JcbiAgICogQHBhcmFtIGJlaGF2aW9yT3B0aW9ucyB0aGUgb3B0aW9ucyBmb3IgdGhlIGJlaGF2aW9yIGF0IHRoaXMgcGF0aC5cbiAgICovXG4gIHB1YmxpYyBhZGRCZWhhdmlvcihcbiAgICBwYXRoUGF0dGVybjogc3RyaW5nLFxuICAgIG9yaWdpbjogSU9yaWdpbixcbiAgICBiZWhhdmlvck9wdGlvbnM6IEFkZEJlaGF2aW9yT3B0aW9ucyA9IHt9LFxuICApIHtcbiAgICBpZiAocGF0aFBhdHRlcm4gPT09IFwiKlwiKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiT25seSB0aGUgZGVmYXVsdCBiZWhhdmlvciBjYW4gaGF2ZSBhIHBhdGggcGF0dGVybiBvZiAnKidcIixcbiAgICAgICk7XG4gICAgfVxuICAgIGNvbnN0IHRhcmdldE9yaWdpbklkID0gdGhpcy5hZGRPcmlnaW4ob3JpZ2luKTtcbiAgICB0aGlzLmFkZGl0aW9uYWxCZWhhdmlvcnMucHVzaCh7XG4gICAgICBwYXRoUGF0dGVybixcbiAgICAgIG9yaWdpbixcbiAgICAgIHRhcmdldE9yaWdpbklkLFxuICAgICAgLi4uYmVoYXZpb3JPcHRpb25zLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW5kIHJldHVybnMgdGhlIFRlcnJhZm9ybSByZXByZXNlbnRhdGlvbiBvZiB0aGlzIGJlaGF2aW9yLlxuICAgKiBUaGlzIHJlbmRlcnMgYXMgYSBcIkNsb3VkZnJvbnREaXN0cmlidXRpb25EZWZhdWx0Q2FjaGVCZWhhdmlvclwiXG4gICAqIHJlZ2FyZGxlc3MgaWYgdGhpcyBpcyBhIGRlZmF1bHQgY2FjaGUgYmVoYXZpb3Igb3Igbm90LCBhcyB0aGUgdHdvXG4gICAqIGFyZSBpZGVudGljYWwgZXhjZXB0IHRoZSBgcGF0aFBhdHRlcm5gIGlzIG9taXR0ZWQgZm9yIHRoZSBkZWZhdWx0XG4gICAqIGNhY2hlIGJlaGF2aW9yLlxuICAgKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHByaXZhdGUgX3JlbmRlckRlZmF1bHRDYWNoZUJlaGF2aW9yKFxuICAgIHByb3BzOiBDYWNoZUJlaGF2aW9yLFxuICApOiBjbG91ZGZyb250RGlzdHJpYnV0aW9uLkNsb3VkZnJvbnREaXN0cmlidXRpb25EZWZhdWx0Q2FjaGVCZWhhdmlvciB7XG4gICAgLy8gVE9ETzogc2hvdWxkIGl0IGJlIHBvc3NpYmxlIHRvIGxlYXZlIGNhY2hlUG9saWN5IGJlIHVuZGVmaW5lZD9cbiAgICBjb25zdCBtYW5hZ2VkQ2FjaGVQb2xpY3lOYW1lID1cbiAgICAgIHByb3BzLmNhY2hlUG9saWN5ID8/IE1hbmFnZWRDYWNoZVBvbGljeS5DQUNISU5HX09QVElNSVpFRDtcbiAgICBjb25zdCBjYWNoZVBvbGljeSA9IHRoaXMuZGF0YUxvb2t1cChcbiAgICAgIG1hbmFnZWRDYWNoZVBvbGljeU5hbWUsXG4gICAgICBkYXRhQXdzQ2xvdWRmcm9udENhY2hlUG9saWN5LkRhdGFBd3NDbG91ZGZyb250Q2FjaGVQb2xpY3ksXG4gICAgICB7IG5hbWU6IG1hbmFnZWRDYWNoZVBvbGljeU5hbWUgfSxcbiAgICApO1xuICAgIGNvbnN0IG9yaWdpblJlcXVlc3RQb2xpY3kgPSB0aGlzLmRhdGFMb29rdXAoXG4gICAgICBwcm9wcy5vcmlnaW5SZXF1ZXN0UG9saWN5LFxuICAgICAgZGF0YUF3c0Nsb3VkZnJvbnRPcmlnaW5SZXF1ZXN0UG9saWN5LkRhdGFBd3NDbG91ZGZyb250T3JpZ2luUmVxdWVzdFBvbGljeSxcbiAgICAgIHsgbmFtZTogcHJvcHMub3JpZ2luUmVxdWVzdFBvbGljeSB9LFxuICAgICk7XG4gICAgY29uc3QgcmVzcG9uc2VIZWFkZXJzUG9saWN5ID0gdGhpcy5kYXRhTG9va3VwKFxuICAgICAgcHJvcHMucmVzcG9uc2VIZWFkZXJzUG9saWN5LFxuICAgICAgZGF0YUF3c0Nsb3VkZnJvbnRSZXNwb25zZUhlYWRlcnNQb2xpY3kuRGF0YUF3c0Nsb3VkZnJvbnRSZXNwb25zZUhlYWRlcnNQb2xpY3ksXG4gICAgICB7IG5hbWU6IHByb3BzLnJlc3BvbnNlSGVhZGVyc1BvbGljeSB9LFxuICAgICk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRhcmdldE9yaWdpbklkOiBwcm9wcy50YXJnZXRPcmlnaW5JZCxcbiAgICAgIGFsbG93ZWRNZXRob2RzOlxuICAgICAgICBwcm9wcy5hbGxvd2VkTWV0aG9kcz8ubWV0aG9kcyA/PyBBbGxvd2VkTWV0aG9kcy5BTExPV19HRVRfSEVBRC5tZXRob2RzLFxuICAgICAgY2FjaGVkTWV0aG9kczpcbiAgICAgICAgcHJvcHMuY2FjaGVkTWV0aG9kcz8ubWV0aG9kcyA/PyBDYWNoZWRNZXRob2RzLkNBQ0hFX0dFVF9IRUFELm1ldGhvZHMsXG4gICAgICBjYWNoZVBvbGljeUlkOiBjYWNoZVBvbGljeT8uaWQsXG4gICAgICBjb21wcmVzczogcHJvcHMuY29tcHJlc3MgPz8gdHJ1ZSxcbiAgICAgIG9yaWdpblJlcXVlc3RQb2xpY3lJZDogb3JpZ2luUmVxdWVzdFBvbGljeT8uaWQsXG4gICAgICByZXNwb25zZUhlYWRlcnNQb2xpY3lJZDogcmVzcG9uc2VIZWFkZXJzUG9saWN5Py5pZCxcbiAgICAgIHNtb290aFN0cmVhbWluZzogcHJvcHMuc21vb3RoU3RyZWFtaW5nLFxuICAgICAgdmlld2VyUHJvdG9jb2xQb2xpY3k6XG4gICAgICAgIHByb3BzLnZpZXdlclByb3RvY29sUG9saWN5ID8/IFZpZXdlclByb3RvY29sUG9saWN5LkFMTE9XX0FMTCxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSByZW5kZXJSZXN0cmljdGlvbnMoZ2VvUmVzdHJpY3Rpb24/OiBHZW9SZXN0cmljdGlvbikge1xuICAgIHJldHVybiBnZW9SZXN0cmljdGlvblxuICAgICAgPyB7XG4gICAgICAgICAgZ2VvUmVzdHJpY3Rpb246IHtcbiAgICAgICAgICAgIHJlc3RyaWN0aW9uVHlwZTogZ2VvUmVzdHJpY3Rpb24ucmVzdHJpY3Rpb25UeXBlLFxuICAgICAgICAgICAgbG9jYXRpb25zOlxuICAgICAgICAgICAgICBnZW9SZXN0cmljdGlvbi5yZXN0cmljdGlvblR5cGUgIT09IEdlb1Jlc3RyaWN0aW9uVHlwZS5OT05FXG4gICAgICAgICAgICAgICAgPyB0aGlzLnZhbGlkYXRlTG9jYXRpb25zKGdlb1Jlc3RyaWN0aW9uLmxvY2F0aW9ucylcbiAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgICB9LFxuICAgICAgICB9XG4gICAgICA6IHtcbiAgICAgICAgICBnZW9SZXN0cmljdGlvbjoge1xuICAgICAgICAgICAgcmVzdHJpY3Rpb25UeXBlOiBHZW9SZXN0cmljdGlvblR5cGUuTk9ORSxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSB2YWxpZGF0ZUxvY2F0aW9ucyhsb2NhdGlvbnM6IHN0cmluZ1tdKSB7XG4gICAgY29uc3QgTE9DQVRJT05fUkVHRVggPSAvXltBLVpdezJ9JC87XG4gICAgaWYgKGxvY2F0aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlNob3VsZCBwcm92aWRlIGF0IGxlYXN0IDEgbG9jYXRpb25cIik7XG4gICAgfVxuICAgIGxvY2F0aW9ucy5mb3JFYWNoKChsb2NhdGlvbikgPT4ge1xuICAgICAgaWYgKCFMT0NBVElPTl9SRUdFWC50ZXN0KGxvY2F0aW9uKSkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LWxlblxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYEludmFsaWQgbG9jYXRpb24gZm9ybWF0IGZvciBsb2NhdGlvbjogJHtsb2NhdGlvbn0sIGxvY2F0aW9uIHNob3VsZCBiZSB0d28tbGV0dGVyIGFuZCB1cHBlcmNhc2UgY291bnRyeSBJU08gMzE2Ni0xLWFscGhhLTIgY29kZWAsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGxvY2F0aW9ucztcbiAgfVxuXG4gIHByaXZhdGUgcmVuZGVyVmlld2VyQ2VydGlmaWNhdGUoXG4gICAgY2VydGlmaWNhdGU/OiBJQ2VydGlmaWNhdGUsXG4gICAgbWluaW11bVByb3RvY29sVmVyc2lvblByb3A/OiBTZWN1cml0eVBvbGljeVByb3RvY29sLFxuICAgIHNzbFN1cHBvcnRNZXRob2RQcm9wPzogU1NMTWV0aG9kLFxuICApOiBjbG91ZGZyb250RGlzdHJpYnV0aW9uLkNsb3VkZnJvbnREaXN0cmlidXRpb25WaWV3ZXJDZXJ0aWZpY2F0ZSB7XG4gICAgY29uc3QgbWluaW11bVByb3RvY29sVmVyc2lvbiA9XG4gICAgICBtaW5pbXVtUHJvdG9jb2xWZXJzaW9uUHJvcCA/PyBTZWN1cml0eVBvbGljeVByb3RvY29sLlRMU19WMV8yXzIwMjE7XG4gICAgY29uc3Qgc3NsU3VwcG9ydE1ldGhvZCA9IHNzbFN1cHBvcnRNZXRob2RQcm9wID8/IFNTTE1ldGhvZC5TTkk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uKGNlcnRpZmljYXRlXG4gICAgICAgID8geyBhY21DZXJ0aWZpY2F0ZUFybjogY2VydGlmaWNhdGUuY2VydGlmaWNhdGVBcm4gfVxuICAgICAgICA6IHsgY2xvdWRmcm9udERlZmF1bHRDZXJ0aWZpY2F0ZTogdHJ1ZSB9KSxcbiAgICAgIG1pbmltdW1Qcm90b2NvbFZlcnNpb246IG1pbmltdW1Qcm90b2NvbFZlcnNpb24sXG4gICAgICBzc2xTdXBwb3J0TWV0aG9kOiBzc2xTdXBwb3J0TWV0aG9kLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQ29uZGl0aW9uYWxseSBsb29rdXAgb3IgY3JlYXRlIGEgY2hpbGQgYmFzZWQgb24gdGhlIGlkIHByb3ZpZGVkLlxuICAgKiBJZiB0aGUgaWQgaXMgdW5kZWZpbmVkLCBpdCB3aWxsIHJldHVybiB1bmRlZmluZWQuXG4gICAqXG4gICAqIEBwYXJhbSBpZCB0aGUgaWQgb2YgdGhlIGNoaWxkIHRvIGxvb2t1cCBvciBjcmVhdGVcbiAgICogQHBhcmFtIGNvbnN0cnVjdFR5cGUgdGhlIHR5cGUgb2YgdGhlIGNoaWxkIHRvIGNyZWF0ZVxuICAgKiBAcGFyYW0gY29uZmlnIHRoZSBjb25maWd1cmF0aW9uIHRvIHBhc3MgdG8gdGhlIGNoaWxkXG4gICAqL1xuICBwcml2YXRlIGRhdGFMb29rdXA8VENvbnN0cnVjdCBleHRlbmRzIENvbnN0cnVjdD4oXG4gICAgaWQ6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICBjb25zdHJ1Y3RUeXBlOiBuZXcgKFxuICAgICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICAgIGlkSW5wdXQ6IHN0cmluZyxcbiAgICAgIGNvbmZpZzogYW55LFxuICAgICkgPT4gVENvbnN0cnVjdCxcbiAgICBjb25maWc/OiBhbnksXG4gICk6IFRDb25zdHJ1Y3QgfCB1bmRlZmluZWQge1xuICAgIGlmICghaWQpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGxldCBjaGlsZCA9IHRoaXMubm9kZS50cnlGaW5kQ2hpbGQoaWQpIGFzIFRDb25zdHJ1Y3QgfCB1bmRlZmluZWQ7XG4gICAgaWYgKCFjaGlsZCkge1xuICAgICAgY2hpbGQgPSBuZXcgY29uc3RydWN0VHlwZSh0aGlzLCBpZCwgY29uZmlnKTtcbiAgICB9XG4gICAgcmV0dXJuIGNoaWxkO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2VvUmVzdHJpY3Rpb24ge1xuICByZWFkb25seSBsb2NhdGlvbnM6IHN0cmluZ1tdO1xuICByZWFkb25seSByZXN0cmljdGlvblR5cGU6IEdlb1Jlc3RyaWN0aW9uVHlwZTtcbn1cblxuZXhwb3J0IGVudW0gR2VvUmVzdHJpY3Rpb25UeXBlIHtcbiAgTk9ORSA9IFwibm9uZVwiLFxuICBXSElURUxJU1QgPSBcIndoaXRlbGlzdFwiLFxuICBCTEFDS0xJU1QgPSBcImJsYWNrbGlzdFwiLFxufVxuXG4vLyByZWY6IGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9ibG9iL3YyLjE1Ni4wL3BhY2thZ2VzL2F3cy1jZGstbGliL2F3cy1jbG91ZGZyb250L2xpYi9kaXN0cmlidXRpb24udHNcblxuLyoqIE1heGltdW0gSFRUUCB2ZXJzaW9uIHRvIHN1cHBvcnQgKi9cbmV4cG9ydCBlbnVtIEh0dHBWZXJzaW9uIHtcbiAgLyoqIEhUVFAgMS4xICovXG4gIEhUVFAxXzEgPSBcImh0dHAxLjFcIixcbiAgLyoqIEhUVFAgMiAqL1xuICBIVFRQMiA9IFwiaHR0cDJcIixcbiAgLyoqIEhUVFAgMiBhbmQgSFRUUCAzICovXG4gIEhUVFAyX0FORF8zID0gXCJodHRwMmFuZDNcIixcbiAgLyoqIEhUVFAgMyAqL1xuICBIVFRQMyA9IFwiaHR0cDNcIixcbn1cblxuLyoqXG4gKiBUaGUgcHJpY2UgY2xhc3MgZGV0ZXJtaW5lcyBob3cgbWFueSBlZGdlIGxvY2F0aW9ucyBDbG91ZEZyb250IHdpbGwgdXNlIGZvciB5b3VyIGRpc3RyaWJ1dGlvbi5cbiAqIFNlZSBodHRwczovL2F3cy5hbWF6b24uY29tL2Nsb3VkZnJvbnQvcHJpY2luZy8gZm9yIGZ1bGwgbGlzdCBvZiBzdXBwb3J0ZWQgcmVnaW9ucy5cbiAqL1xuZXhwb3J0IGVudW0gUHJpY2VDbGFzcyB7XG4gIC8qKiBVU0EsIENhbmFkYSwgRXVyb3BlLCAmIElzcmFlbCAqL1xuICBQUklDRV9DTEFTU18xMDAgPSBcIlByaWNlQ2xhc3NfMTAwXCIsXG4gIC8qKiBQUklDRV9DTEFTU18xMDAgKyBTb3V0aCBBZnJpY2EsIEtlbnlhLCBNaWRkbGUgRWFzdCwgSmFwYW4sIFNpbmdhcG9yZSwgU291dGggS29yZWEsIFRhaXdhbiwgSG9uZyBLb25nLCAmIFBoaWxpcHBpbmVzICovXG4gIFBSSUNFX0NMQVNTXzIwMCA9IFwiUHJpY2VDbGFzc18yMDBcIixcbiAgLyoqIEFsbCBsb2NhdGlvbnMgKi9cbiAgUFJJQ0VfQ0xBU1NfQUxMID0gXCJQcmljZUNsYXNzX0FsbFwiLFxufVxuXG4vKipcbiAqIFRoZSBTU0wgbWV0aG9kIENsb3VkRnJvbnQgd2lsbCB1c2UgZm9yIHlvdXIgZGlzdHJpYnV0aW9uLlxuICpcbiAqIFNlcnZlciBOYW1lIEluZGljYXRpb24gKFNOSSkgLSBpcyBhbiBleHRlbnNpb24gdG8gdGhlIFRMUyBjb21wdXRlciBuZXR3b3JraW5nIHByb3RvY29sIGJ5IHdoaWNoIGEgY2xpZW50IGluZGljYXRlc1xuICogIHdoaWNoIGhvc3RuYW1lIGl0IGlzIGF0dGVtcHRpbmcgdG8gY29ubmVjdCB0byBhdCB0aGUgc3RhcnQgb2YgdGhlIGhhbmRzaGFraW5nIHByb2Nlc3MuIFRoaXMgYWxsb3dzIGEgc2VydmVyIHRvIHByZXNlbnRcbiAqICBtdWx0aXBsZSBjZXJ0aWZpY2F0ZXMgb24gdGhlIHNhbWUgSVAgYWRkcmVzcyBhbmQgVENQIHBvcnQgbnVtYmVyIGFuZCBoZW5jZSBhbGxvd3MgbXVsdGlwbGUgc2VjdXJlIChIVFRQUykgd2Vic2l0ZXNcbiAqIChvciBhbnkgb3RoZXIgc2VydmljZSBvdmVyIFRMUykgdG8gYmUgc2VydmVkIGJ5IHRoZSBzYW1lIElQIGFkZHJlc3Mgd2l0aG91dCByZXF1aXJpbmcgYWxsIHRob3NlIHNpdGVzIHRvIHVzZSB0aGUgc2FtZSBjZXJ0aWZpY2F0ZS5cbiAqXG4gKiBDbG91ZEZyb250IGNhbiB1c2UgU05JIHRvIGhvc3QgbXVsdGlwbGUgZGlzdHJpYnV0aW9ucyBvbiB0aGUgc2FtZSBJUCAtIHdoaWNoIGEgbGFyZ2UgbWFqb3JpdHkgb2YgY2xpZW50cyB3aWxsIHN1cHBvcnQuXG4gKlxuICogSWYgeW91ciBjbGllbnRzIGNhbm5vdCBzdXBwb3J0IFNOSSBob3dldmVyIC0gQ2xvdWRGcm9udCBjYW4gdXNlIGRlZGljYXRlZCBJUHMgZm9yIHlvdXIgZGlzdHJpYnV0aW9uIC0gYnV0IHRoZXJlIGlzIGEgcHJvcmF0ZWQgbW9udGhseSBjaGFyZ2UgZm9yXG4gKiB1c2luZyB0aGlzIGZlYXR1cmUuIEJ5IGRlZmF1bHQsIHdlIHVzZSBTTkkgLSBidXQgeW91IGNhbiBvcHRpb25hbGx5IGVuYWJsZSBkZWRpY2F0ZWQgSVBzIChWSVApLlxuICpcbiAqIFNlZSB0aGUgQ2xvdWRGcm9udCBTU0wgZm9yIG1vcmUgZGV0YWlscyBhYm91dCBwcmljaW5nIDogaHR0cHM6Ly9hd3MuYW1hem9uLmNvbS9jbG91ZGZyb250L2N1c3RvbS1zc2wtZG9tYWlucy9cbiAqXG4gKi9cbmV4cG9ydCBlbnVtIFNTTE1ldGhvZCB7XG4gIFNOSSA9IFwic25pLW9ubHlcIixcbiAgVklQID0gXCJ2aXBcIixcbn1cblxuLyoqXG4gKiBUaGUgbWluaW11bSB2ZXJzaW9uIG9mIHRoZSBTU0wgcHJvdG9jb2wgdGhhdCB5b3Ugd2FudCBDbG91ZEZyb250IHRvIHVzZSBmb3IgSFRUUFMgY29ubmVjdGlvbnMuXG4gKiBDbG91ZEZyb250IHNlcnZlcyB5b3VyIG9iamVjdHMgb25seSB0byBicm93c2VycyBvciBkZXZpY2VzIHRoYXQgc3VwcG9ydCBhdCBsZWFzdCB0aGUgU1NMIHZlcnNpb24gdGhhdCB5b3Ugc3BlY2lmeS5cbiAqL1xuZXhwb3J0IGVudW0gU2VjdXJpdHlQb2xpY3lQcm90b2NvbCB7XG4gIFNTTF9WMyA9IFwiU1NMdjNcIixcbiAgVExTX1YxID0gXCJUTFN2MVwiLFxuICBUTFNfVjFfMjAxNiA9IFwiVExTdjFfMjAxNlwiLFxuICBUTFNfVjFfMV8yMDE2ID0gXCJUTFN2MS4xXzIwMTZcIixcbiAgVExTX1YxXzJfMjAxOCA9IFwiVExTdjEuMl8yMDE4XCIsXG4gIFRMU19WMV8yXzIwMTkgPSBcIlRMU3YxLjJfMjAxOVwiLFxuICBUTFNfVjFfMl8yMDIxID0gXCJUTFN2MS4yXzIwMjFcIixcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBjb25maWd1cmluZyBjdXN0b20gZXJyb3IgcmVzcG9uc2VzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVycm9yUmVzcG9uc2Uge1xuICAvKipcbiAgICogVGhlIG1pbmltdW0gYW1vdW50IG9mIHRpbWUsIGluIHNlY29uZHMsIHRoYXQgeW91IHdhbnQgQ2xvdWRGcm9udCB0byBjYWNoZSB0aGUgSFRUUCBzdGF0dXMgY29kZSBzcGVjaWZpZWQgaW4gRXJyb3JDb2RlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHRoZSBkZWZhdWx0IGNhY2hpbmcgVFRMIGJlaGF2aW9yIGFwcGxpZXNcbiAgICovXG4gIHJlYWRvbmx5IHR0bD86IER1cmF0aW9uO1xuICAvKipcbiAgICogVGhlIEhUVFAgc3RhdHVzIGNvZGUgZm9yIHdoaWNoIHlvdSB3YW50IHRvIHNwZWNpZnkgYSBjdXN0b20gZXJyb3IgcGFnZSBhbmQvb3IgYSBjYWNoaW5nIGR1cmF0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgaHR0cFN0YXR1czogbnVtYmVyO1xuICAvKipcbiAgICogVGhlIEhUVFAgc3RhdHVzIGNvZGUgdGhhdCB5b3Ugd2FudCBDbG91ZEZyb250IHRvIHJldHVybiB0byB0aGUgdmlld2VyIGFsb25nIHdpdGggdGhlIGN1c3RvbSBlcnJvciBwYWdlLlxuICAgKlxuICAgKiBJZiB5b3Ugc3BlY2lmeSBhIHZhbHVlIGZvciBgcmVzcG9uc2VIdHRwU3RhdHVzYCwgeW91IG11c3QgYWxzbyBzcGVjaWZ5IGEgdmFsdWUgZm9yIGByZXNwb25zZVBhZ2VQYXRoYC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSB0aGUgZXJyb3IgY29kZSB3aWxsIGJlIHJldHVybmVkIGFzIHRoZSByZXNwb25zZSBjb2RlLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVzcG9uc2VIdHRwU3RhdHVzPzogbnVtYmVyO1xuICAvKipcbiAgICogVGhlIHBhdGggdG8gdGhlIGN1c3RvbSBlcnJvciBwYWdlIHRoYXQgeW91IHdhbnQgQ2xvdWRGcm9udCB0byByZXR1cm4gdG8gYSB2aWV3ZXIgd2hlbiB5b3VyIG9yaWdpbiByZXR1cm5zIHRoZVxuICAgKiBgaHR0cFN0YXR1c2AsIGZvciBleGFtcGxlLCAvNHh4LWVycm9ycy80MDMtZm9yYmlkZGVuLmh0bWxcbiAgICpcbiAgICogQGRlZmF1bHQgLSB0aGUgZGVmYXVsdCBDbG91ZEZyb250IHJlc3BvbnNlIGlzIHNob3duLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVzcG9uc2VQYWdlUGF0aD86IHN0cmluZztcbn1cblxuLy8gcHJpdmF0ZSBpbnRlcmZhY2UgdG8ga2VlcCB0cmFjayBvZiBDYWNoZUJlaGF2aW9yc1xuaW50ZXJmYWNlIENhY2hlQmVoYXZpb3IgZXh0ZW5kcyBCZWhhdmlvck9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIHBhdHRlcm4gKGUuZy4sIGBpbWFnZXMvKi5qcGdgKSB0aGF0IHNwZWNpZmllcyB3aGljaCByZXF1ZXN0cyB0byBhcHBseSB0aGUgYmVoYXZpb3IgdG8uXG4gICAqIFRoZXJlIG11c3QgYmUgZXhhY3RseSBvbmUgYmVoYXZpb3IgYXNzb2NpYXRlZCB3aXRoIGVhY2ggYERpc3RyaWJ1dGlvbmAgdGhhdCBoYXMgYSBwYXRoIHBhdHRlcm5cbiAgICogb2YgJyonLCB3aGljaCBhY3RzIGFzIHRoZSBjYXRjaC1hbGwgZGVmYXVsdCBiZWhhdmlvci5cbiAgICovXG4gIHJlYWRvbmx5IHBhdGhQYXR0ZXJuOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFZhbHVlIG9mIElEIGZvciB0aGUgb3JpZ2luIHRoYXQgeW91IHdhbnQgQ2xvdWRGcm9udCB0byByb3V0ZSByZXF1ZXN0cyB0byB3aGVuIGEgcmVxdWVzdCBtYXRjaGVzXG4gICAqIHRoZSBwYXRoIHBhdHRlcm4gZWl0aGVyIGZvciBhIGNhY2hlIGJlaGF2aW9yIG9yIGZvciB0aGUgZGVmYXVsdCBjYWNoZSBiZWhhdmlvci5cbiAgICovXG4gIHJlYWRvbmx5IHRhcmdldE9yaWdpbklkOiBzdHJpbmc7XG59XG5cbi8vIHByaXZhdGUgaW50ZXJmYWNlIHRvIGluZGV4IG9yaWdpbnMgYnkgaWRcbmludGVyZmFjZSBPcmlnaW5JbmRleCB7XG4gIG9yaWdpbjogSU9yaWdpbjtcbiAgaWQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBjcmVhdGluZyBhIG5ldyBiZWhhdmlvci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCZWhhdmlvck9wdGlvbnMgZXh0ZW5kcyBBZGRCZWhhdmlvck9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIG9yaWdpbiB0aGF0IHlvdSB3YW50IENsb3VkRnJvbnQgdG8gcm91dGUgcmVxdWVzdHMgdG8gd2hlbiB0aGV5IG1hdGNoIHRoaXMgYmVoYXZpb3IuXG4gICAqL1xuICByZWFkb25seSBvcmlnaW46IElPcmlnaW47XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgYWRkaW5nIGEgbmV3IGJlaGF2aW9yIHRvIGEgRGlzdHJpYnV0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFkZEJlaGF2aW9yT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBIVFRQIG1ldGhvZHMgdG8gYWxsb3cgZm9yIHRoaXMgYmVoYXZpb3IuXG4gICAqXG4gICAqIEBkZWZhdWx0IEFsbG93ZWRNZXRob2RzLkFMTE9XX0dFVF9IRUFEXG4gICAqL1xuICByZWFkb25seSBhbGxvd2VkTWV0aG9kcz86IEFsbG93ZWRNZXRob2RzO1xuXG4gIC8qKlxuICAgKiBIVFRQIG1ldGhvZHMgdG8gY2FjaGUgZm9yIHRoaXMgYmVoYXZpb3IuXG4gICAqXG4gICAqIEBkZWZhdWx0IENhY2hlZE1ldGhvZHMuQ0FDSEVfR0VUX0hFQURcbiAgICovXG4gIHJlYWRvbmx5IGNhY2hlZE1ldGhvZHM/OiBDYWNoZWRNZXRob2RzO1xuXG4gIC8qKlxuICAgKiBUaGUgY2FjaGUgcG9saWN5IGZvciB0aGlzIGJlaGF2aW9yLiBUaGUgY2FjaGUgcG9saWN5IGRldGVybWluZXMgd2hhdCB2YWx1ZXMgYXJlIGluY2x1ZGVkIGluIHRoZSBjYWNoZSBrZXksXG4gICAqIGFuZCB0aGUgdGltZS10by1saXZlIChUVEwpIHZhbHVlcyBmb3IgdGhlIGNhY2hlLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9jb250cm9sbGluZy10aGUtY2FjaGUta2V5Lmh0bWwuXG4gICAqIEBkZWZhdWx0IE1hbmFnZWRDYWNoZVBvbGljeS5DQUNISU5HX09QVElNSVpFRFxuICAgKi9cbiAgcmVhZG9ubHkgY2FjaGVQb2xpY3k/OiBNYW5hZ2VkQ2FjaGVQb2xpY3k7IC8vVE9ETzogc3VwcG9ydCBjdXN0b20gY2FjaGUgcG9saWNpZXNcblxuICAvKipcbiAgICogV2hldGhlciB5b3Ugd2FudCBDbG91ZEZyb250IHRvIGF1dG9tYXRpY2FsbHkgY29tcHJlc3MgY2VydGFpbiBmaWxlcyBmb3IgdGhpcyBjYWNoZSBiZWhhdmlvci5cbiAgICogU2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9TZXJ2aW5nQ29tcHJlc3NlZEZpbGVzLmh0bWwjY29tcHJlc3NlZC1jb250ZW50LWNsb3VkZnJvbnQtZmlsZS10eXBlc1xuICAgKiBmb3IgZmlsZSB0eXBlcyBDbG91ZEZyb250IHdpbGwgY29tcHJlc3MuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IGNvbXByZXNzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIG9yaWdpbiByZXF1ZXN0IHBvbGljeSBmb3IgdGhpcyBiZWhhdmlvci4gVGhlIG9yaWdpbiByZXF1ZXN0IHBvbGljeSBkZXRlcm1pbmVzIHdoaWNoIHZhbHVlcyAoZS5nLiwgaGVhZGVycywgY29va2llcylcbiAgICogYXJlIGluY2x1ZGVkIGluIHJlcXVlc3RzIHRoYXQgQ2xvdWRGcm9udCBzZW5kcyB0byB0aGUgb3JpZ2luLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vbmVcbiAgICovXG4gIHJlYWRvbmx5IG9yaWdpblJlcXVlc3RQb2xpY3k/OiBNYW5hZ2VkT3JpZ2luUmVxdWVzdFBvbGljeTsgLy9UT0RPOiBzdXBwb3J0IGN1c3RvbSBvcmlnaW4gcmVxdWVzdCBwb2xpY2llc1xuXG4gIC8qKlxuICAgKiBUaGUgcmVzcG9uc2UgaGVhZGVycyBwb2xpY3kgZm9yIHRoaXMgYmVoYXZpb3IuIFRoZSByZXNwb25zZSBoZWFkZXJzIHBvbGljeSBkZXRlcm1pbmVzIHdoaWNoIGhlYWRlcnMgYXJlIGluY2x1ZGVkIGluIHJlc3BvbnNlc1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vbmVcbiAgICovXG4gIHJlYWRvbmx5IHJlc3BvbnNlSGVhZGVyc1BvbGljeT86IE1hbmFnZWRSZXNwb25zZUhlYWRlcnNQb2xpY3k7XG5cbiAgLyoqXG4gICAqIFNldCB0aGlzIHRvIHRydWUgdG8gaW5kaWNhdGUgeW91IHdhbnQgdG8gZGlzdHJpYnV0ZSBtZWRpYSBmaWxlcyBpbiB0aGUgTWljcm9zb2Z0IFNtb290aCBTdHJlYW1pbmcgZm9ybWF0IHVzaW5nIHRoaXMgYmVoYXZpb3IuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBzbW9vdGhTdHJlYW1pbmc/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgcHJvdG9jb2wgdGhhdCB2aWV3ZXJzIGNhbiB1c2UgdG8gYWNjZXNzIHRoZSBmaWxlcyBjb250cm9sbGVkIGJ5IHRoaXMgYmVoYXZpb3IuXG4gICAqXG4gICAqIEBkZWZhdWx0IFZpZXdlclByb3RvY29sUG9saWN5LkFMTE9XX0FMTFxuICAgKi9cbiAgcmVhZG9ubHkgdmlld2VyUHJvdG9jb2xQb2xpY3k/OiBWaWV3ZXJQcm90b2NvbFBvbGljeTtcblxuICAvKipcbiAgICogVGhlIENsb3VkRnJvbnQgZnVuY3Rpb25zIHRvIGludm9rZSBiZWZvcmUgc2VydmluZyB0aGUgY29udGVudHMuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gZnVuY3Rpb25zIHdpbGwgYmUgaW52b2tlZFxuICAgKi9cbiAgcmVhZG9ubHkgZnVuY3Rpb25Bc3NvY2lhdGlvbnM/OiBGdW5jdGlvbkFzc29jaWF0aW9uW107XG59XG5cbi8qKlxuICogVGhlIEhUVFAgbWV0aG9kcyB0aGF0IHRoZSBCZWhhdmlvciB3aWxsIGFjY2VwdCByZXF1ZXN0cyBvbi5cbiAqL1xuZXhwb3J0IGNsYXNzIEFsbG93ZWRNZXRob2RzIHtcbiAgLyoqIEhFQUQgYW5kIEdFVCAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEFMTE9XX0dFVF9IRUFEID0gbmV3IEFsbG93ZWRNZXRob2RzKFtcIkdFVFwiLCBcIkhFQURcIl0pO1xuICAvKiogSEVBRCwgR0VULCBhbmQgT1BUSU9OUyAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEFMTE9XX0dFVF9IRUFEX09QVElPTlMgPSBuZXcgQWxsb3dlZE1ldGhvZHMoW1xuICAgIFwiR0VUXCIsXG4gICAgXCJIRUFEXCIsXG4gICAgXCJPUFRJT05TXCIsXG4gIF0pO1xuICAvKiogQWxsIHN1cHBvcnRlZCBIVFRQIG1ldGhvZHMgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBBTExPV19BTEwgPSBuZXcgQWxsb3dlZE1ldGhvZHMoW1xuICAgIFwiR0VUXCIsXG4gICAgXCJIRUFEXCIsXG4gICAgXCJPUFRJT05TXCIsXG4gICAgXCJQVVRcIixcbiAgICBcIlBBVENIXCIsXG4gICAgXCJQT1NUXCIsXG4gICAgXCJERUxFVEVcIixcbiAgXSk7XG5cbiAgLyoqIEhUVFAgbWV0aG9kcyBzdXBwb3J0ZWQgKi9cbiAgcHVibGljIHJlYWRvbmx5IG1ldGhvZHM6IHN0cmluZ1tdO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IobWV0aG9kczogc3RyaW5nW10pIHtcbiAgICB0aGlzLm1ldGhvZHMgPSBtZXRob2RzO1xuICB9XG59XG5cbi8qKlxuICogVGhlIEhUVFAgbWV0aG9kcyB0aGF0IHRoZSBCZWhhdmlvciB3aWxsIGNhY2hlIHJlcXVlc3RzIG9uLlxuICovXG5leHBvcnQgY2xhc3MgQ2FjaGVkTWV0aG9kcyB7XG4gIC8qKiBIRUFEIGFuZCBHRVQgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBDQUNIRV9HRVRfSEVBRCA9IG5ldyBDYWNoZWRNZXRob2RzKFtcIkdFVFwiLCBcIkhFQURcIl0pO1xuICAvKiogSEVBRCwgR0VULCBhbmQgT1BUSU9OUyAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IENBQ0hFX0dFVF9IRUFEX09QVElPTlMgPSBuZXcgQ2FjaGVkTWV0aG9kcyhbXG4gICAgXCJHRVRcIixcbiAgICBcIkhFQURcIixcbiAgICBcIk9QVElPTlNcIixcbiAgXSk7XG5cbiAgLyoqIEhUVFAgbWV0aG9kcyBzdXBwb3J0ZWQgKi9cbiAgcHVibGljIHJlYWRvbmx5IG1ldGhvZHM6IHN0cmluZ1tdO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IobWV0aG9kczogc3RyaW5nW10pIHtcbiAgICB0aGlzLm1ldGhvZHMgPSBtZXRob2RzO1xuICB9XG59XG5cbi8qKlxuICogSG93IEhUVFBzIHNob3VsZCBiZSBoYW5kbGVkIHdpdGggeW91ciBkaXN0cmlidXRpb24uXG4gKi9cbmV4cG9ydCBlbnVtIFZpZXdlclByb3RvY29sUG9saWN5IHtcbiAgLyoqIEhUVFBTIG9ubHkgKi9cbiAgSFRUUFNfT05MWSA9IFwiaHR0cHMtb25seVwiLFxuICAvKiogV2lsbCByZWRpcmVjdCBIVFRQIHJlcXVlc3RzIHRvIEhUVFBTICovXG4gIFJFRElSRUNUX1RPX0hUVFBTID0gXCJyZWRpcmVjdC10by1odHRwc1wiLFxuICAvKiogQm90aCBIVFRQIGFuZCBIVFRQUyBzdXBwb3J0ZWQgKi9cbiAgQUxMT1dfQUxMID0gXCJhbGxvdy1hbGxcIixcbn1cblxuLyoqXG4gKiBDbG91ZEZyb250IHByb3ZpZGVzIGEgc2V0IG9mIG1hbmFnZWQgY2FjaGUgcG9saWNpZXMgdGhhdCB5b3UgY2FuIGF0dGFjaCB0byBhbnkgb2YgeW91ciBkaXN0cmlidXRpb24ncyBjYWNoZSBiZWhhdmlvcnMuXG4gKiBXaXRoIGEgbWFuYWdlZCBjYWNoZSBwb2xpY3ksIHlvdSBkb24ndCBuZWVkIHRvIHdyaXRlIG9yIG1haW50YWluIHlvdXIgb3duIGNhY2hlIHBvbGljeS4gVGhlIG1hbmFnZWQgcG9saWNpZXMgdXNlIHNldHRpbmdzIHRoYXQgYXJlIG9wdGltaXplZCBmb3Igc3BlY2lmaWMgdXNlIGNhc2VzLlxuICpcbiAqIEBsaW5rIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS91c2luZy1tYW5hZ2VkLWNhY2hlLXBvbGljaWVzLmh0bWxcbiAqIEBsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9oYXNoaWNvcnAvYXdzLzUuNjAuMC9kb2NzL2RhdGEtc291cmNlcy9jbG91ZGZyb250X2NhY2hlX3BvbGljeSNhd3MtbWFuYWdlZC1wb2xpY2llc1xuICovXG5leHBvcnQgZW51bSBNYW5hZ2VkQ2FjaGVQb2xpY3kge1xuICAvKipcbiAgICogVGhpcyBwb2xpY3kgaXMgZGVzaWduZWQgZm9yIHVzZSB3aXRoIGFuIG9yaWdpbiB0aGF0IGlzIGFuIEFXUyBBbXBsaWZ5IHdlYiBhcHAuXG4gICAqL1xuICBBTVBMSUZZID0gXCJNYW5hZ2VkLUFtcGxpZnlcIixcbiAgLyoqXG4gICAqIE9wdGltaXplIGNhY2hlIGVmZmljaWVuY3kgYnkgbWluaW1pemluZyB0aGUgdmFsdWVzIHRoYXQgQ2xvdWRGcm9udCBpbmNsdWRlcyBpbiB0aGUgY2FjaGUga2V5LlxuICAgKiBRdWVyeSBzdHJpbmdzIGFuZCBjb29raWVzIGFyZSBub3QgaW5jbHVkZWQgaW4gdGhlIGNhY2hlIGtleSwgYW5kIG9ubHkgdGhlIG5vcm1hbGl6ZWQgJ0FjY2VwdC1FbmNvZGluZycgaGVhZGVyIGlzIGluY2x1ZGVkLlxuICAgKi9cbiAgQ0FDSElOR19PUFRJTUlaRUQgPSBcIk1hbmFnZWQtQ2FjaGluZ09wdGltaXplZFwiLFxuICAvKipcbiAgICogT3B0aW1pemUgY2FjaGUgZWZmaWNpZW5jeSBieSBtaW5pbWl6aW5nIHRoZSB2YWx1ZXMgdGhhdCBDbG91ZEZyb250IGluY2x1ZGVzIGluIHRoZSBjYWNoZSBrZXkuXG4gICAqIFF1ZXJ5IHN0cmluZ3MgYW5kIGNvb2tpZXMgYXJlIG5vdCBpbmNsdWRlZCBpbiB0aGUgY2FjaGUga2V5LCBhbmQgb25seSB0aGUgbm9ybWFsaXplZCAnQWNjZXB0LUVuY29kaW5nJyBoZWFkZXIgaXMgaW5jbHVkZWQuXG4gICAqIERpc2FibGVzIGNhY2hlIGNvbXByZXNzaW9uLlxuICAgKi9cbiAgQ0FDSElOR19PUFRJTUlaRURfRk9SX1VOQ09NUFJFU1NFRF9PQkpFQ1RTID0gXCJNYW5hZ2VkLUNhY2hpbmdPcHRpbWl6ZWRGb3JVbmNvbXByZXNzZWRPYmplY3RzXCIsXG4gIC8qKiBEaXNhYmxlcyBjYWNoaW5nLiBUaGlzIHBvbGljeSBpcyB1c2VmdWwgZm9yIGR5bmFtaWMgY29udGVudCBhbmQgZm9yIHJlcXVlc3RzIHRoYXQgYXJlIG5vdCBjYWNoZWFibGUuICovXG4gIENBQ0hJTkdfRElTQUJMRUQgPSBcIk1hbmFnZWQtQ2FjaGluZ0Rpc2FibGVkXCIsXG4gIC8qKiBEZXNpZ25lZCBmb3IgdXNlIHdpdGggYW4gb3JpZ2luIHRoYXQgaXMgYW4gQVdTIEVsZW1lbnRhbCBNZWRpYVBhY2thZ2UgZW5kcG9pbnQuICovXG4gIEVMRU1FTlRBTF9NRURJQV9QQUNLQUdFID0gXCJNYW5hZ2VkLUVsZW1lbnRhbC1NZWRpYVBhY2thZ2VcIixcbiAgLyoqXG4gICAqIERlc2lnbmVkIGZvciB1c2Ugd2l0aCBhbiBvcmlnaW4gdGhhdCByZXR1cm5zIENhY2hlLUNvbnRyb2wgSFRUUCByZXNwb25zZSBoZWFkZXJzIGFuZCBkb2VzIG5vdCBzZXJ2ZSBkaWZmZXJlbnQgY29udGVudCBiYXNlZCBvbiB2YWx1ZXMgcHJlc2VudCBpbiB0aGUgcXVlcnkgc3RyaW5nLlxuICAgKi9cbiAgVVNFX09SSUdJTl9DQUNIRV9DT05UUk9MX0hFQURFUlMgPSBcIk1hbmFnZWQtVXNlT3JpZ2luQ2FjaGVDb250cm9sSGVhZGVyc1wiLFxuICAvKipcbiAgICogRGVzaWduZWQgZm9yIHVzZSB3aXRoIGFuIG9yaWdpbiB0aGF0IHJldHVybnMgQ2FjaGUtQ29udHJvbCBIVFRQIHJlc3BvbnNlIGhlYWRlcnMgYW5kIHNlcnZlcyBkaWZmZXJlbnQgY29udGVudCBiYXNlZCBvbiB2YWx1ZXMgcHJlc2VudCBpbiB0aGUgcXVlcnkgc3RyaW5nLlxuICAgKi9cbiAgVVNFX09SSUdJTl9DQUNIRV9DT05UUk9MX0hFQURFUlNfUVVFUllfU1RSSU5HUyA9IFwiTWFuYWdlZC1Vc2VPcmlnaW5DYWNoZUNvbnRyb2xIZWFkZXJzLVF1ZXJ5U3RyaW5nc1wiLFxufVxuXG4vKipcbiAqIE9yaWdpbiBSZXF1ZXN0IFBvbGljeSBjb25maWd1cmF0aW9uLlxuICpcbiAqIEBsaW5rIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS91c2luZy1tYW5hZ2VkLW9yaWdpbi1yZXF1ZXN0LXBvbGljaWVzLmh0bWxcbiAqIEBsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9oYXNoaWNvcnAvYXdzLzUuNjAuMC9kb2NzL2RhdGEtc291cmNlcy9jbG91ZGZyb250X29yaWdpbl9yZXF1ZXN0X3BvbGljeSNhd3MtbWFuYWdlZC1wb2xpY2llc1xuICovXG5leHBvcnQgZW51bSBNYW5hZ2VkT3JpZ2luUmVxdWVzdFBvbGljeSB7XG4gIC8qKiBUaGlzIHBvbGljeSBpbmNsdWRlcyBvbmx5IHRoZSBVc2VyLUFnZW50IGFuZCBSZWZlcmVyIGhlYWRlcnMuIEl0IGRvZXNu4oCZdCBpbmNsdWRlIGFueSBxdWVyeSBzdHJpbmdzIG9yIGNvb2tpZXMuICovXG4gIFVTRVJfQUdFTlRfUkVGRVJFUl9IRUFERVJTID0gXCJNYW5hZ2VkLVVzZXJBZ2VudFJlZmVyZXJIZWFkZXJzXCIsXG4gIC8qKiBUaGlzIHBvbGljeSBpbmNsdWRlcyB0aGUgaGVhZGVyIHRoYXQgZW5hYmxlcyBjcm9zcy1vcmlnaW4gcmVzb3VyY2Ugc2hhcmluZyAoQ09SUykgcmVxdWVzdHMgd2hlbiB0aGUgb3JpZ2luIGlzIGEgY3VzdG9tIG9yaWdpbi4gKi9cbiAgQ09SU19DVVNUT01fT1JJR0lOID0gXCJNYW5hZ2VkLUNPUlMtQ3VzdG9tT3JpZ2luXCIsXG4gIC8qKiBUaGlzIHBvbGljeSBpbmNsdWRlcyB0aGUgaGVhZGVycyB0aGF0IGVuYWJsZSBjcm9zcy1vcmlnaW4gcmVzb3VyY2Ugc2hhcmluZyAoQ09SUykgcmVxdWVzdHMgd2hlbiB0aGUgb3JpZ2luIGlzIGFuIEFtYXpvbiBTMyBidWNrZXQuICovXG4gIENPUlNfUzNfT1JJR0lOID0gXCJNYW5hZ2VkLUNPUlMtUzNPcmlnaW5cIixcbiAgLyoqIFRoaXMgcG9saWN5IGluY2x1ZGVzIGFsbCB2YWx1ZXMgKHF1ZXJ5IHN0cmluZ3MsIGhlYWRlcnMsIGFuZCBjb29raWVzKSBpbiB0aGUgdmlld2VyIHJlcXVlc3QuICovXG4gIEFMTF9WSUVXRVIgPSBcIk1hbmFnZWQtQWxsVmlld2VyXCIsXG4gIC8qKiBUaGlzIHBvbGljeSBpcyBkZXNpZ25lZCBmb3IgdXNlIHdpdGggYW4gb3JpZ2luIHRoYXQgaXMgYW4gQVdTIEVsZW1lbnRhbCBNZWRpYVRhaWxvciBlbmRwb2ludC4gKi9cbiAgRUxFTUVOVEFMX01FRElBX1RBSUxPUiA9IFwiTWFuYWdlZC1FbGVtZW50YWwtTWVkaWFUYWlsb3ItUGVyc29uYWxpemVkTWFuaWZlc3RzXCIsXG4gIC8qKiBUaGlzIHBvbGljeSBpbmNsdWRlcyBhbGwgdmFsdWVzIChoZWFkZXJzLCBjb29raWVzLCBhbmQgcXVlcnkgc3RyaW5ncykgaW4gdGhlIHZpZXdlciByZXF1ZXN0LCBhbmQgYWxsIENsb3VkRnJvbnQgaGVhZGVycyB0aGF0IHdlcmUgcmVsZWFzZWQgdGhyb3VnaCBKdW5lIDIwMjIgKENsb3VkRnJvbnQgaGVhZGVycyByZWxlYXNlZCBhZnRlciBKdW5lIDIwMjIgYXJlIG5vdCBpbmNsdWRlZCkuICovXG4gIEFMTF9WSUVXRVJfQU5EX0NMT1VERlJPTlRfMjAyMiA9IFwiTWFuYWdlZC1BbGxWaWV3ZXJBbmRDbG91ZEZyb250SGVhZGVycy0yMDIyLTA2XCIsXG4gIC8qKiBUaGlzIHBvbGljeSBpbmNsdWRlcyBhbGwgdmFsdWVzIChxdWVyeSBzdHJpbmdzLCBhbmQgY29va2llcykgZXhjZXB0IHRoZSBoZWFkZXIgaW4gdGhlIHZpZXdlciByZXF1ZXN0LiAqL1xuICBBTExfVklFV0VSX0VYQ0VQVF9IT1NUX0hFQURFUiA9IFwiTWFuYWdlZC1BbGxWaWV3ZXJFeGNlcHRIb3N0SGVhZGVyXCIsXG59XG5cbi8qKlxuICogQSBSZXNwb25zZSBIZWFkZXJzIFBvbGljeSBjb25maWd1cmF0aW9uXG4gKlxuICogQGxpbmsgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL3VzaW5nLW1hbmFnZWQtcmVzcG9uc2UtaGVhZGVycy1wb2xpY2llcy5odG1sXG4gKiBAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvaGFzaGljb3JwL2F3cy81LjYwLjAvZG9jcy9kYXRhLXNvdXJjZXMvY2xvdWRmcm9udF9yZXNwb25zZV9oZWFkZXJzX3BvbGljeSNhd3MtbWFuYWdlZC1wb2xpY2llc1xuICovXG5leHBvcnQgZW51bSBNYW5hZ2VkUmVzcG9uc2VIZWFkZXJzUG9saWN5IHtcbiAgLyoqIFVzZSB0aGlzIG1hbmFnZWQgcG9saWN5IHRvIGFsbG93IHNpbXBsZSBDT1JTIHJlcXVlc3RzIGZyb20gYW55IG9yaWdpbi4gKi9cbiAgQ09SU19BTExPV19BTExfT1JJR0lOUyA9IFwiTWFuYWdlZC1TaW1wbGVDT1JTXCIsIC8vNjA2Njk2NTItNDU1Yi00YWU5LTg1YTQtYzRjMDIzOTNmODZjXG4gIC8qKiBVc2UgdGhpcyBtYW5hZ2VkIHBvbGljeSB0byBhbGxvdyBDT1JTIHJlcXVlc3RzIGZyb20gYW55IG9yaWdpbiwgaW5jbHVkaW5nIHByZWZsaWdodCByZXF1ZXN0cy4gKi9cbiAgQ09SU19BTExPV19BTExfT1JJR0lOU19XSVRIX1BSRUZMSUdIVCA9IFwiTWFuYWdlZC1DT1JTLVdpdGgtUHJlZmxpZ2h0XCIsIC8vNWNjM2I5MDgtZTYxOS00Yjk5LTg4ZTUtMmNmN2Y0NTk2NWJkXG4gIC8qKiBVc2UgdGhpcyBtYW5hZ2VkIHBvbGljeSB0byBhZGQgYSBzZXQgb2Ygc2VjdXJpdHkgaGVhZGVycyB0byBhbGwgcmVzcG9uc2VzIHRoYXQgQ2xvdWRGcm9udCBzZW5kcyB0byB2aWV3ZXJzLiAqL1xuICBTRUNVUklUWV9IRUFERVJTID0gXCJNYW5hZ2VkLVNlY3VyaXR5SGVhZGVyc1BvbGljeVwiLCAvLzY3Zjc3MjVjLTZmOTctNDIxMC04MmQ3LTU1MTJiMzFlOWQwM1xuICAvKiogVXNlIHRoaXMgbWFuYWdlZCBwb2xpY3kgdG8gYWxsb3cgc2ltcGxlIENPUlMgcmVxdWVzdHMgZnJvbSBhbnkgb3JpZ2luIGFuZCBhZGQgYSBzZXQgb2Ygc2VjdXJpdHkgaGVhZGVycyB0byBhbGwgcmVzcG9uc2VzIHRoYXQgQ2xvdWRGcm9udCBzZW5kcyB0byB2aWV3ZXJzLiAqL1xuICBDT1JTX0FMTE9XX0FMTF9PUklHSU5TX0FORF9TRUNVUklUWV9IRUFERVJTID0gXCJNYW5hZ2VkLUNPUlMtYW5kLVNlY3VyaXR5SGVhZGVyc1BvbGljeVwiLCAvL2U2MWViNjBjLTljMzUtNGQyMC1hOTI4LTJiODRlMDJhZjg5Y1xuICAvKiogVXNlIHRoaXMgbWFuYWdlZCBwb2xpY3kgdG8gYWxsb3cgQ09SUyByZXF1ZXN0cyBmcm9tIGFueSBvcmlnaW4sIGluY2x1ZGluZyBwcmVmbGlnaHQgcmVxdWVzdHMsIGFuZCBhZGQgYSBzZXQgb2Ygc2VjdXJpdHkgaGVhZGVycyB0byBhbGwgcmVzcG9uc2VzIHRoYXQgQ2xvdWRGcm9udCBzZW5kcyB0byB2aWV3ZXJzLiAqL1xuICBDT1JTX0FMTE9XX0FMTF9PUklHSU5TX1dJVEhfUFJFRkxJR0hUX0FORF9TRUNVUklUWV9IRUFERVJTID0gXCJNYW5hZ2VkLUNPUlMtd2l0aC1wcmVmbGlnaHQtYW5kLVNlY3VyaXR5SGVhZGVyc1BvbGljeVwiLCAvL2VhYWI0MzgxLWVkMzMtNGE4Ni04OGNhLWQ5NTU4ZGM2Y2Q2M1xufVxuIl19
434
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlzdHJpYnV0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2F3cy9lZGdlL2Rpc3RyaWJ1dGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLHVJQUF1STtBQUN2SSxzREFLNkI7QUFDN0IsaUNBQWlEO0FBSWpELGdDQUFtQztBQUNuQyxvREFJMEI7QUFDMUIsNENBQXdDO0FBME14Qzs7R0FFRztBQUNILE1BQWEsWUFBYSxTQUFRLGdDQUFnQjtJQUtoRCxJQUFXLG1CQUFtQjtRQUM1QixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDdkIsQ0FBQztJQUNELElBQVcsT0FBTztRQUNoQixPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztJQUNsQyxDQUFDO0lBRUQsSUFBVyxVQUFVO1FBQ25CLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUMxQixDQUFDO0lBVUQsWUFBWSxLQUFnQixFQUFFLElBQVksRUFBRSxLQUF3QjtRQUNsRSxLQUFLLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztRQVJYLGFBQVEsR0FBRyxJQUFJLEtBQUssRUFBZSxDQUFDO1FBRXBDLHdCQUFtQixHQUFvQixFQUFFLENBQUM7UUFRekQsSUFBSSxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDdEIsTUFBTSxpQkFBaUIsR0FBRyxvQkFBUSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQzlELEtBQUssQ0FBQyxXQUFXLENBQUMsY0FBYyxFQUNoQyxlQUFTLENBQUMsbUJBQW1CLENBQzlCLENBQUMsTUFBTSxDQUFDO1lBQ1QsSUFDRSxDQUFDLGFBQUssQ0FBQyxZQUFZLENBQUMsaUJBQWlCLENBQUM7Z0JBQ3RDLGlCQUFpQixLQUFLLFdBQVcsRUFDakMsQ0FBQztnQkFDRCxNQUFNLElBQUksS0FBSyxDQUNiLG9HQUFvRyxpQkFBaUIsR0FBRyxDQUN6SCxDQUFDO1lBQ0osQ0FB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QyxvQ0FBb0M7SUFDcEMsK0NBQXVCLENBQUE7QUFDekIsQ0FBQyxFQVBXLG9CQUFvQixvQ0FBcEIsb0JBQW9CLFFBTy9CO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsSUFBWSxrQkE0Qlg7QUE1QkQsV0FBWSxrQkFBa0I7SUFDNUI7O09BRUc7SUFDSCxpREFBMkIsQ0FBQTtJQUMzQjs7O09BR0c7SUFDSCxvRUFBOEMsQ0FBQTtJQUM5Qzs7OztPQUlHO0lBQ0gsbUhBQTZGLENBQUE7SUFDN0YsMkdBQTJHO0lBQzNHLGtFQUE0QyxDQUFBO0lBQzVDLHNGQUFzRjtJQUN0RixnRkFBMEQsQ0FBQTtJQUMxRDs7T0FFRztJQUNILCtGQUF5RSxDQUFBO0lBQ3pFOztPQUVHO0lBQ0gsMEhBQW9HLENBQUE7QUFDdEcsQ0FBQyxFQTVCVyxrQkFBa0Isa0NBQWxCLGtCQUFrQixRQTRCN0I7QUFFRDs7Ozs7R0FLRztBQUNILElBQVksMEJBZVg7QUFmRCxXQUFZLDBCQUEwQjtJQUNwQyxxSEFBcUg7SUFDckgsNEZBQThELENBQUE7SUFDOUQscUlBQXFJO0lBQ3JJLDhFQUFnRCxDQUFBO0lBQ2hELHlJQUF5STtJQUN6SSxzRUFBd0MsQ0FBQTtJQUN4QyxtR0FBbUc7SUFDbkcsOERBQWdDLENBQUE7SUFDaEMsb0dBQW9HO0lBQ3BHLDRHQUE4RSxDQUFBO0lBQzlFLG1PQUFtTztJQUNuTyw4R0FBZ0YsQ0FBQTtJQUNoRiw0R0FBNEc7SUFDNUcsaUdBQW1FLENBQUE7QUFDckUsQ0FBQyxFQWZXLDBCQUEwQiwwQ0FBMUIsMEJBQTBCLFFBZXJDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2Jsb2IvNjRhMGUyY2Y1YmIwN2Y2ZGViZmM0YjE2OWJiM2UxODUyY2U2NjhhYS9wYWNrYWdlcy9hd3MtY2RrLWxpYi9hd3MtY2xvdWRmcm9udC9saWIvZGlzdHJpYnV0aW9uLnRzXG5pbXBvcnQge1xuICBjbG91ZGZyb250RGlzdHJpYnV0aW9uLFxuICBkYXRhQXdzQ2xvdWRmcm9udENhY2hlUG9saWN5LFxuICBkYXRhQXdzQ2xvdWRmcm9udE9yaWdpblJlcXVlc3RQb2xpY3ksXG4gIGRhdGFBd3NDbG91ZGZyb250UmVzcG9uc2VIZWFkZXJzUG9saWN5LFxufSBmcm9tIFwiQGNka3RmL3Byb3ZpZGVyLWF3c1wiO1xuaW1wb3J0IHsgSVJlc29sdmFibGUsIFRva2VuLCBMYXp5IH0gZnJvbSBcImNka3RmXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgSUNlcnRpZmljYXRlLCBJT3JpZ2luLCBGdW5jdGlvbkFzc29jaWF0aW9uIH0gZnJvbSBcIi5cIjtcbmltcG9ydCB7IER1cmF0aW9uIH0gZnJvbSBcIi4uLy4uL2R1cmF0aW9uXCI7XG5pbXBvcnQgeyBBcm5Gb3JtYXQgfSBmcm9tIFwiLi4vYXJuXCI7XG5pbXBvcnQge1xuICBBd3NDb25zdHJ1Y3RCYXNlLFxuICBJQXdzQ29uc3RydWN0LFxuICBBd3NDb25zdHJ1Y3RQcm9wcyxcbn0gZnJvbSBcIi4uL2F3cy1jb25zdHJ1Y3RcIjtcbmltcG9ydCB7IEF3c1N0YWNrIH0gZnJvbSBcIi4uL2F3cy1zdGFja1wiO1xuaW1wb3J0IHtcbiAgSVJlc3BvbnNlSGVhZGVyc1BvbGljeSxcbiAgTWFuYWdlZFJlc3BvbnNlSGVhZGVyc1BvbGljeSxcbn0gZnJvbSBcIi4vcmVzcG9uc2UtaGVhZGVycy1wb2xpY3lcIjtcblxuLy8gVE9ETzogUmUtYWRkIGludmFsaWRhdGlvbiBzdXBwb3J0XG4vLyBUT0RPOiBSZS1hZGQgb3JpZ2luIGdyb3VwIChmYWlsb3Zlcikgc3VwcG9ydFxuLy8gVE9ETzogUmUtYWRkIGtleSBncm91cCBzdXBwb3J0XG4vLyBUT0RPOiBSZS1hZGQgV0FGIHN1cHBvcnRcbi8vIFRPRE86IFJlLWFkZCBsb2dnaW5nIHN1cHBvcnRcbi8vIFRPRE86IFJlLWFkZCBjdXN0b20gY2FjaGUsIG9yaWdpblJlcXVlc3QgcG9saWN5IHN1cHBvcnQ/XG5cbi8qKlxuICogT3V0cHV0cyB3aGljaCBtYXkgYmUgcmVnaXN0ZXJlZCBmb3Igb3V0cHV0IHZpYSB0aGUgR3JpZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEaXN0cmlidXRpb25PdXRwdXRzIHtcbiAgLyoqXG4gICAqIElkZW50aWZpZXIgZm9yIHRoZSBkaXN0cmlidXRpb24uIEZvciBleGFtcGxlOiBgRURGRFZCRDYzMkJIRFM1YC5cbiAgICovXG4gIHJlYWRvbmx5IGlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIENsb3VkRnJvbnQgUm91dGUgNTMgem9uZSBJRCB0aGF0IGNhbiBiZSB1c2VkIHRvXG4gICAqIHJvdXRlIGFuIEFsaWFzIFJlc291cmNlIFJlY29yZCBTZXQgdG8uXG4gICAqXG4gICAqIFRoaXMgYXR0cmlidXRlIGlzIHNpbXBseSBhbiBhbGlhcyBmb3IgdGhlIHpvbmUgSURcbiAgICovXG4gIHJlYWRvbmx5IGhvc3RlZFpvbmVJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDdXJyZW50IHN0YXR1cyBvZiB0aGUgZGlzdHJpYnV0aW9uLlxuICAgKlxuICAgKiBgRGVwbG95ZWRgIGlmIHRoZSBkaXN0cmlidXRpb24ncyBpbmZvcm1hdGlvbiBpcyBmdWxseSBwcm9wYWdhdGVkXG4gICAqIHRocm91Z2hvdXQgdGhlIEFtYXpvbiBDbG91ZEZyb250IHN5c3RlbS5cbiAgICovXG4gIHJlYWRvbmx5IHN0YXR1czogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBUk4gZm9yIHRoZSBkaXN0cmlidXRpb25cbiAgICovXG4gIHJlYWRvbmx5IGFybjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBEb21haW4gbmFtZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBkaXN0cmlidXRpb24uXG4gICAqXG4gICAqIEZvciBleGFtcGxlOiBgZDYwNDcyMWZ4YWFxeTkuY2xvdWRmcm9udC5uZXRgXG4gICAqL1xuICByZWFkb25seSBkb21haW5OYW1lOiBzdHJpbmc7XG59XG5cbi8qKlxuICogSW1wb3J0ZWQgb3IgY3JlYXRlZCBETlMgem9uZSBhdHRyaWJ1dGVzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSURpc3RyaWJ1dGlvbiBleHRlbmRzIElBd3NDb25zdHJ1Y3Qge1xuICAvKiogU3Ryb25nbHkgdHlwZWQgb3V0cHV0c1xuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBkaXN0cmlidXRpb25PdXRwdXRzOiBEaXN0cmlidXRpb25PdXRwdXRzO1xuXG4gIC8qKlxuICAgKiBEb21haW4gbmFtZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBkaXN0cmlidXRpb24uXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICogRm9yIGV4YW1wbGU6IGBkNjA0NzIxZnhhYXF5OS5jbG91ZGZyb250Lm5ldGBcbiAgICovXG4gIHJlYWRvbmx5IGRvbWFpbk5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogQ2xvdWRGcm9udCBSb3V0ZSA1MyB6b25lIElEIHRoYXQgY2FuIGJlIHVzZWQgdG9cbiAgICogcm91dGUgYW4gQWxpYXMgUmVzb3VyY2UgUmVjb3JkIFNldCB0by5cbiAgICpcbiAgICogVGhpcyBhdHRyaWJ1dGUgaXMgc2ltcGx5IGFuIGFsaWFzIGZvciB0aGUgem9uZSBJRFxuICAgKi9cbiAgcmVhZG9ubHkgaG9zdGVkWm9uZUlkOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgYSBEaXN0cmlidXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEaXN0cmlidXRpb25Qcm9wcyBleHRlbmRzIEF3c0NvbnN0cnVjdFByb3BzIHtcbiAgLyoqXG4gICAqIEV4dHJhIENOQU1FcyAoYWx0ZXJuYXRlIGRvbWFpbiBuYW1lcyksIGlmIGFueSwgZm9yIHRoaXMgZGlzdHJpYnV0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgYWxpYXNlcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBkaXN0cmlidXRpb24gaXMgZW5hYmxlZCB0byBhY2NlcHQgZW5kIHVzZXIgcmVxdWVzdHMgZm9yIGNvbnRlbnQuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IGVuYWJsZWQ/OiBib29sZWFuIHwgSVJlc29sdmFibGU7XG5cbiAgLyoqXG4gICAqIElmIGVuYWJsZWQsIHRoZSByZXNvdXJjZSB3aWxsIHdhaXQgZm9yIHRoZSBkaXN0cmlidXRpb24gc3RhdHVzIHRvIGNoYW5nZVxuICAgKiBmcm9tIEluUHJvZ3Jlc3MgdG8gRGVwbG95ZWQuXG4gICAqXG4gICAqIFNldHRpbmcgdGhpcyB0b2ZhbHNlIHdpbGwgc2tpcCB0aGUgcHJvY2Vzcy5cbiAgICpcbiAgICogQGRlZmF1bHQ6IHRydWUuXG4gICAqL1xuICByZWFkb25seSB3YWl0Rm9yRGVwbG95bWVudD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBkZWZhdWx0IGJlaGF2aW9yIGZvciB0aGUgZGlzdHJpYnV0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgZGVmYXVsdEJlaGF2aW9yOiBCZWhhdmlvck9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIEFkZGl0aW9uYWwgYmVoYXZpb3JzIGZvciB0aGUgZGlzdHJpYnV0aW9uLCBtYXBwZWQgYnkgdGhlIHBhdGhQYXR0ZXJuIHRoYXQgc3BlY2lmaWVzIHdoaWNoIHJlcXVlc3RzIHRvIGFwcGx5IHRoZSBiZWhhdmlvciB0by5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBhZGRpdGlvbmFsIGJlaGF2aW9ycyBhcmUgYWRkZWQuXG4gICAqL1xuICByZWFkb25seSBhZGRpdGlvbmFsQmVoYXZpb3JzPzogUmVjb3JkPHN0cmluZywgQmVoYXZpb3JPcHRpb25zPjtcblxuICAvKipcbiAgICogQSBjZXJ0aWZpY2F0ZSB0byBhc3NvY2lhdGUgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiBUaGUgY2VydGlmaWNhdGUgbXVzdCBiZSBsb2NhdGVkIGluIE4uIFZpcmdpbmlhICh1cy1lYXN0LTEpLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHRoZSBDbG91ZEZyb250IHdpbGRjYXJkIGNlcnRpZmljYXRlICgqLmNsb3VkZnJvbnQubmV0KSB3aWxsIGJlIHVzZWQuXG4gICAqL1xuICByZWFkb25seSBjZXJ0aWZpY2F0ZT86IElDZXJ0aWZpY2F0ZTtcblxuICAvKipcbiAgICogQW55IGNvbW1lbnRzIHlvdSB3YW50IHRvIGluY2x1ZGUgYWJvdXQgdGhlIGRpc3RyaWJ1dGlvbi5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBjb21tZW50XG4gICAqL1xuICByZWFkb25seSBjb21tZW50Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgb2JqZWN0IHRoYXQgeW91IHdhbnQgQ2xvdWRGcm9udCB0byByZXF1ZXN0IGZyb20geW91ciBvcmlnaW4gKGZvciBleGFtcGxlLCBpbmRleC5odG1sKVxuICAgKiB3aGVuIGEgdmlld2VyIHJlcXVlc3RzIHRoZSByb290IFVSTCBmb3IgeW91ciBkaXN0cmlidXRpb24uIElmIG5vIGRlZmF1bHQgb2JqZWN0IGlzIHNldCwgdGhlXG4gICAqIHJlcXVlc3QgZ29lcyB0byB0aGUgb3JpZ2luJ3Mgcm9vdCAoZS5nLiwgZXhhbXBsZS5jb20vKS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBkZWZhdWx0IHJvb3Qgb2JqZWN0XG4gICAqL1xuICByZWFkb25seSBkZWZhdWx0Um9vdE9iamVjdD86IHN0cmluZztcblxuICAvKipcbiAgICogQ29udHJvbHMgdGhlIGNvdW50cmllcyBpbiB3aGljaCB5b3VyIGNvbnRlbnQgaXMgZGlzdHJpYnV0ZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm8gZ2VvZ3JhcGhpYyByZXN0cmljdGlvbnNcbiAgICovXG4gIHJlYWRvbmx5IGdlb1Jlc3RyaWN0aW9uPzogR2VvUmVzdHJpY3Rpb247XG5cbiAgLyoqXG4gICAqIFNwZWNpZnkgdGhlIG1heGltdW0gSFRUUCB2ZXJzaW9uIHRoYXQgeW91IHdhbnQgdmlld2VycyB0byB1c2UgdG8gY29tbXVuaWNhdGUgd2l0aCBDbG91ZEZyb250LlxuICAgKlxuICAgKiBGb3Igdmlld2VycyBhbmQgQ2xvdWRGcm9udCB0byB1c2UgSFRUUC8yLCB2aWV3ZXJzIG11c3Qgc3VwcG9ydCBUTFMgMS4yIG9yIGxhdGVyLCBhbmQgbXVzdCBzdXBwb3J0IHNlcnZlciBuYW1lIGlkZW50aWZpY2F0aW9uIChTTkkpLlxuICAgKlxuICAgKiBAZGVmYXVsdCBIdHRwVmVyc2lvbi5IVFRQMlxuICAgKi9cbiAgcmVhZG9ubHkgaHR0cFZlcnNpb24/OiBIdHRwVmVyc2lvbjtcblxuICAvKipcbiAgICogVGhlIHByaWNlIGNsYXNzIHRoYXQgY29ycmVzcG9uZHMgd2l0aCB0aGUgbWF4aW11bSBwcmljZSB0aGF0IHlvdSB3YW50IHRvIHBheSBmb3IgQ2xvdWRGcm9udCBzZXJ2aWNlLlxuICAgKiBJZiB5b3Ugc3BlY2lmeSBQcmljZUNsYXNzX0FsbCwgQ2xvdWRGcm9udCByZXNwb25kcyB0byByZXF1ZXN0cyBmb3IgeW91ciBvYmplY3RzIGZyb20gYWxsIENsb3VkRnJvbnQgZWRnZSBsb2NhdGlvbnMuXG4gICAqIElmIHlvdSBzcGVjaWZ5IGEgcHJpY2UgY2xhc3Mgb3RoZXIgdGhhbiBQcmljZUNsYXNzX0FsbCwgQ2xvdWRGcm9udCBzZXJ2ZXMgeW91ciBvYmplY3RzIGZyb20gdGhlIENsb3VkRnJvbnQgZWRnZSBsb2NhdGlvblxuICAgKiB0aGF0IGhhcyB0aGUgbG93ZXN0IGxhdGVuY3kgYW1vbmcgdGhlIGVkZ2UgbG9jYXRpb25zIGluIHlvdXIgcHJpY2UgY2xhc3MuXG4gICAqXG4gICAqIEBkZWZhdWx0IFByaWNlQ2xhc3MuUFJJQ0VfQ0xBU1NfQUxMXG4gICAqL1xuICByZWFkb25seSBwcmljZUNsYXNzPzogUHJpY2VDbGFzcztcblxuICAvKipcbiAgICogSG93IENsb3VkRnJvbnQgc2hvdWxkIGhhbmRsZSByZXF1ZXN0cyB0aGF0IGFyZSBub3Qgc3VjY2Vzc2Z1bCAoZS5nLiwgUGFnZU5vdEZvdW5kKS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBjdXN0b20gZXJyb3IgcmVzcG9uc2VzLlxuICAgKi9cbiAgcmVhZG9ubHkgZXJyb3JSZXNwb25zZXM/OiBFcnJvclJlc3BvbnNlW107XG5cbiAgLyoqXG4gICAqIFRoZSBtaW5pbXVtIHZlcnNpb24gb2YgdGhlIFNTTCBwcm90b2NvbCB0aGF0IHlvdSB3YW50IENsb3VkRnJvbnQgdG8gdXNlIGZvciBIVFRQUyBjb25uZWN0aW9ucy5cbiAgICpcbiAgICogQ2xvdWRGcm9udCBzZXJ2ZXMgeW91ciBvYmplY3RzIG9ubHkgdG8gYnJvd3NlcnMgb3IgZGV2aWNlcyB0aGF0IHN1cHBvcnQgYXRcbiAgICogbGVhc3QgdGhlIFNTTCB2ZXJzaW9uIHRoYXQgeW91IHNwZWNpZnkuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gU2VjdXJpdHlQb2xpY3lQcm90b2NvbC5UTFNfVjFfMl8yMDIxLlxuICAgKi9cbiAgcmVhZG9ubHkgbWluaW11bVByb3RvY29sVmVyc2lvbj86IFNlY3VyaXR5UG9saWN5UHJvdG9jb2w7XG5cbiAgLyoqXG4gICAqIFRoZSBTU0wgbWV0aG9kIENsb3VkRnJvbnQgd2lsbCB1c2UgZm9yIHlvdXIgZGlzdHJpYnV0aW9uLlxuICAgKlxuICAgKiBTZXJ2ZXIgTmFtZSBJbmRpY2F0aW9uIChTTkkpIC0gaXMgYW4gZXh0ZW5zaW9uIHRvIHRoZSBUTFMgY29tcHV0ZXIgbmV0d29ya2luZyBwcm90b2NvbCBieSB3aGljaCBhIGNsaWVudCBpbmRpY2F0ZXNcbiAgICogd2hpY2ggaG9zdG5hbWUgaXQgaXMgYXR0ZW1wdGluZyB0byBjb25uZWN0IHRvIGF0IHRoZSBzdGFydCBvZiB0aGUgaGFuZHNoYWtpbmcgcHJvY2Vzcy4gVGhpcyBhbGxvd3MgYSBzZXJ2ZXIgdG8gcHJlc2VudFxuICAgKiBtdWx0aXBsZSBjZXJ0aWZpY2F0ZXMgb24gdGhlIHNhbWUgSVAgYWRkcmVzcyBhbmQgVENQIHBvcnQgbnVtYmVyIGFuZCBoZW5jZSBhbGxvd3MgbXVsdGlwbGUgc2VjdXJlIChIVFRQUykgd2Vic2l0ZXNcbiAgICogKG9yIGFueSBvdGhlciBzZXJ2aWNlIG92ZXIgVExTKSB0byBiZSBzZXJ2ZWQgYnkgdGhlIHNhbWUgSVAgYWRkcmVzcyB3aXRob3V0IHJlcXVpcmluZyBhbGwgdGhvc2Ugc2l0ZXMgdG8gdXNlIHRoZSBzYW1lIGNlcnRpZmljYXRlLlxuICAgKlxuICAgKiBDbG91ZEZyb250IGNhbiB1c2UgU05JIHRvIGhvc3QgbXVsdGlwbGUgZGlzdHJpYnV0aW9ucyBvbiB0aGUgc2FtZSBJUCAtIHdoaWNoIGEgbGFyZ2UgbWFqb3JpdHkgb2YgY2xpZW50cyB3aWxsIHN1cHBvcnQuXG4gICAqXG4gICAqIElmIHlvdXIgY2xpZW50cyBjYW5ub3Qgc3VwcG9ydCBTTkkgaG93ZXZlciAtIENsb3VkRnJvbnQgY2FuIHVzZSBkZWRpY2F0ZWQgSVBzIGZvciB5b3VyIGRpc3RyaWJ1dGlvbiAtIGJ1dCB0aGVyZSBpcyBhIHByb3JhdGVkIG1vbnRobHkgY2hhcmdlIGZvclxuICAgKiB1c2luZyB0aGlzIGZlYXR1cmUuIEJ5IGRlZmF1bHQsIHdlIHVzZSBTTkkgLSBidXQgeW91IGNhbiBvcHRpb25hbGx5IGVuYWJsZSBkZWRpY2F0ZWQgSVBzIChWSVApLlxuICAgKlxuICAgKiBTZWUgdGhlIENsb3VkRnJvbnQgU1NMIGZvciBtb3JlIGRldGFpbHMgYWJvdXQgcHJpY2luZyA6IGh0dHBzOi8vYXdzLmFtYXpvbi5jb20vY2xvdWRmcm9udC9jdXN0b20tc3NsLWRvbWFpbnMvXG4gICAqXG4gICAqIEBkZWZhdWx0IFNTTE1ldGhvZC5TTklcbiAgICovXG4gIHJlYWRvbmx5IHNzbFN1cHBvcnRNZXRob2Q/OiBTU0xNZXRob2Q7XG59XG5cbi8qKlxuICogQW1hem9uIENsb3VkZnJvbnQgRGlzdHJpYnV0aW9uXG4gKi9cbmV4cG9ydCBjbGFzcyBEaXN0cmlidXRpb24gZXh0ZW5kcyBBd3NDb25zdHJ1Y3RCYXNlIGltcGxlbWVudHMgSURpc3RyaWJ1dGlvbiB7XG4gIC8vIFRPRE86IEFkZCBzdGF0aWMgZnJvbUxvb2t1cD9cbiAgcHJpdmF0ZSByZWFkb25seSByZXNvdXJjZTogY2xvdWRmcm9udERpc3RyaWJ1dGlvbi5DbG91ZGZyb250RGlzdHJpYnV0aW9uO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX291dHB1dHM6IERpc3RyaWJ1dGlvbk91dHB1dHM7XG4gIHB1YmxpYyBnZXQgZGlzdHJpYnV0aW9uT3V0cHV0cygpOiBEaXN0cmlidXRpb25PdXRwdXRzIHtcbiAgICByZXR1cm4gdGhpcy5fb3V0cHV0cztcbiAgfVxuICBwdWJsaWMgZ2V0IG91dHB1dHMoKTogUmVjb3JkPHN0cmluZywgYW55PiB7XG4gICAgcmV0dXJuIHRoaXMuZGlzdHJpYnV0aW9uT3V0cHV0cztcbiAgfVxuICBwcml2YXRlIHJlYWRvbmx5IF9kb21haW5OYW1lOiBzdHJpbmc7XG4gIHB1YmxpYyBnZXQgZG9tYWluTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9kb21haW5OYW1lO1xuICB9XG4gIHB1YmxpYyByZWFkb25seSBob3N0ZWRab25lSWQ6IHN0cmluZztcblxuICBwcml2YXRlIHJlYWRvbmx5IF9vcmlnaW5zID0gbmV3IEFycmF5PE9yaWdpbkluZGV4PigpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgYWRkaXRpb25hbEJlaGF2aW9yczogQ2FjaGVCZWhhdmlvcltdID0gW107XG5cbiAgcHJpdmF0ZSByZWFkb25seSBlcnJvclJlc3BvbnNlczogRXJyb3JSZXNwb25zZVtdO1xuICBwcml2YXRlIHJlYWRvbmx5IGNlcnRpZmljYXRlPzogSUNlcnRpZmljYXRlO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIG5hbWU6IHN0cmluZywgcHJvcHM6IERpc3RyaWJ1dGlvblByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIG5hbWUsIHByb3BzKTtcblxuICAgIGlmIChwcm9wcy5jZXJ0aWZpY2F0ZSkge1xuICAgICAgY29uc3QgY2VydGlmaWNhdGVSZWdpb24gPSBBd3NTdGFjay5vZkF3c0NvbnN0cnVjdCh0aGlzKS5zcGxpdEFybihcbiAgICAgICAgcHJvcHMuY2VydGlmaWNhdGUuY2VydGlmaWNhdGVBcm4sXG4gICAgICAgIEFybkZvcm1hdC5TTEFTSF9SRVNPVVJDRV9OQU1FLFxuICAgICAgKS5yZWdpb247XG4gICAgICBpZiAoXG4gICAgICAgICFUb2tlbi5pc1VucmVzb2x2ZWQoY2VydGlmaWNhdGVSZWdpb24pICYmXG4gICAgICAgIGNlcnRpZmljYXRlUmVnaW9uICE9PSBcInVzLWVhc3QtMVwiXG4gICAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBEaXN0cmlidXRpb24gY2VydGlmaWNhdGVzIG11c3QgYmUgaW4gdGhlIHVzLWVhc3QtMSByZWdpb24gYW5kIHRoZSBjZXJ0aWZpY2F0ZSB5b3UgcHJvdmlkZWQgaXMgaW4gJHtjZXJ0aWZpY2F0ZVJlZ2lvbn0uYCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5jZXJ0aWZpY2F0ZSA9IHByb3BzLmNlcnRpZmljYXRlO1xuICAgIHRoaXMuZXJyb3JSZXNwb25zZXMgPSBwcm9wcy5lcnJvclJlc3BvbnNlcyA/PyBbXTtcblxuICAgIGNvbnN0IGRlZmF1bHRPcmlnaW5JZCA9IHRoaXMuYWRkT3JpZ2luKHByb3BzLmRlZmF1bHRCZWhhdmlvci5vcmlnaW4pO1xuICAgIGlmIChwcm9wcy5hZGRpdGlvbmFsQmVoYXZpb3JzKSB7XG4gICAgICBPYmplY3QuZW50cmllcyhwcm9wcy5hZGRpdGlvbmFsQmVoYXZpb3JzKS5mb3JFYWNoKFxuICAgICAgICAoW3BhdGhQYXR0ZXJuLCBiZWhhdmlvck9wdGlvbnNdKSA9PiB7XG4gICAgICAgICAgdGhpcy5hZGRCZWhhdmlvcihcbiAgICAgICAgICAgIHBhdGhQYXR0ZXJuLFxuICAgICAgICAgICAgYmVoYXZpb3JPcHRpb25zLm9yaWdpbixcbiAgICAgICAgICAgIGJlaGF2aW9yT3B0aW9ucyxcbiAgICAgICAgICApO1xuICAgICAgICB9LFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBDb21tZW50cyBoYXZlIGFuIHVuZG9jdW1lbnRlZCBsaW1pdCBvZiAxMjggY2hhcmFjdGVyc1xuICAgIGNvbnN0IHRyaW1tZWRDb21tZW50ID1cbiAgICAgIHByb3BzLmNvbW1lbnQgJiYgcHJvcHMuY29tbWVudC5sZW5ndGggPiAxMjhcbiAgICAgICAgPyBgJHtwcm9wcy5jb21tZW50LnNsaWNlKDAsIDEyOCAtIDMpfS4uLmBcbiAgICAgICAgOiBwcm9wcy5jb21tZW50O1xuXG4gICAgdGhpcy5yZXNvdXJjZSA9IG5ldyBjbG91ZGZyb250RGlzdHJpYnV0aW9uLkNsb3VkZnJvbnREaXN0cmlidXRpb24oXG4gICAgICB0aGlzLFxuICAgICAgXCJSZXNvdXJjZVwiLFxuICAgICAge1xuICAgICAgICBlbmFibGVkOiBwcm9wcy5lbmFibGVkID8/IHRydWUsXG4gICAgICAgIG9yaWdpbjogTGF6eS5hbnlWYWx1ZSh7XG4gICAgICAgICAgcHJvZHVjZTogKCkgPT5cbiAgICAgICAgICAgIHRoaXMuX29yaWdpbnMubWFwKChvKSA9PlxuICAgICAgICAgICAgICAvLyBMYXp5IHByb2R1Y2VycyBuZWVkIGFkZGl0aW9uYWwgeHh4VG9UZXJyYWZvcm0gd3JhcFxuICAgICAgICAgICAgICBjbG91ZGZyb250RGlzdHJpYnV0aW9uLmNsb3VkZnJvbnREaXN0cmlidXRpb25PcmlnaW5Ub1RlcnJhZm9ybShcbiAgICAgICAgICAgICAgICBvLm9yaWdpbi5yZW5kZXIoby5pZCksXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICApLFxuICAgICAgICB9KSxcbiAgICAgICAgZGVmYXVsdENhY2hlQmVoYXZpb3I6IHRoaXMuX3JlbmRlckRlZmF1bHRDYWNoZUJlaGF2aW9yKHtcbiAgICAgICAgICBwYXRoUGF0dGVybjogXCIqXCIsIC8vIGlnbm9yZWQgZm9yIERlZmF1bHQgQ2FjaGUgQmVoYXZpb3JcbiAgICAgICAgICB0YXJnZXRPcmlnaW5JZDogZGVmYXVsdE9yaWdpbklkLFxuICAgICAgICAgIC4uLnByb3BzLmRlZmF1bHRCZWhhdmlvcixcbiAgICAgICAgfSksXG4gICAgICAgIG9yZGVyZWRDYWNoZUJlaGF2aW9yOiBMYXp5LmFueVZhbHVlKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHByb2R1Y2U6ICgpID0+XG4gICAgICAgICAgICAgIHRoaXMuYWRkaXRpb25hbEJlaGF2aW9ycy5tYXAoKGIpID0+XG4gICAgICAgICAgICAgICAgLy8gTGF6eSBwcm9kdWNlcnMgbmVlZCBhZGRpdGlvbmFsIHh4eFRvVGVycmFmb3JtIHdyYXBcbiAgICAgICAgICAgICAgICBjbG91ZGZyb250RGlzdHJpYnV0aW9uLmNsb3VkZnJvbnREaXN0cmlidXRpb25PcmRlcmVkQ2FjaGVCZWhhdmlvclRvVGVycmFmb3JtKFxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBwYXRoUGF0dGVybjogYi5wYXRoUGF0dGVybixcbiAgICAgICAgICAgICAgICAgICAgLi4udGhpcy5fcmVuZGVyRGVmYXVsdENhY2hlQmVoYXZpb3IoYiksXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7IG9taXRFbXB0eUFycmF5OiB0cnVlIH0sXG4gICAgICAgICksXG4gICAgICAgIGFsaWFzZXM6IHByb3BzLmFsaWFzZXMsXG4gICAgICAgIGNvbW1lbnQ6IHRyaW1tZWRDb21tZW50LFxuICAgICAgICBjdXN0b21FcnJvclJlc3BvbnNlOiB0aGlzLnJlbmRlckVycm9yUmVzcG9uc2VzKCksXG4gICAgICAgIGRlZmF1bHRSb290T2JqZWN0OiBwcm9wcy5kZWZhdWx0Um9vdE9iamVjdCxcbiAgICAgICAgaHR0cFZlcnNpb246IHByb3BzLmh0dHBWZXJzaW9uID8/IEh0dHBWZXJzaW9uLkhUVFAyLFxuICAgICAgICBwcmljZUNsYXNzOiBwcm9wcy5wcmljZUNsYXNzID8/IHVuZGVmaW5lZCxcbiAgICAgICAgcmVzdHJpY3Rpb25zOiB0aGlzLnJlbmRlclJlc3RyaWN0aW9ucyhwcm9wcy5nZW9SZXN0cmljdGlvbiksXG4gICAgICAgIHZpZXdlckNlcnRpZmljYXRlOiB0aGlzLnJlbmRlclZpZXdlckNlcnRpZmljYXRlKFxuICAgICAgICAgIHRoaXMuY2VydGlmaWNhdGUsXG4gICAgICAgICAgcHJvcHMubWluaW11bVByb3RvY29sVmVyc2lvbixcbiAgICAgICAgICBwcm9wcy5zc2xTdXBwb3J0TWV0aG9kLFxuICAgICAgICApLFxuICAgICAgICB3YWl0Rm9yRGVwbG95bWVudDogcHJvcHMud2FpdEZvckRlcGxveW1lbnQsXG4gICAgICB9LFxuICAgICk7XG5cbiAgICB0aGlzLl9kb21haW5OYW1lID0gdGhpcy5yZXNvdXJjZS5kb21haW5OYW1lO1xuICAgIHRoaXMuaG9zdGVkWm9uZUlkID0gdGhpcy5yZXNvdXJjZS5ob3N0ZWRab25lSWQ7XG4gICAgdGhpcy5fb3V0cHV0cyA9IHtcbiAgICAgIGlkOiB0aGlzLnJlc291cmNlLmlkLFxuICAgICAgaG9zdGVkWm9uZUlkOiB0aGlzLnJlc291cmNlLmhvc3RlZFpvbmVJZCxcbiAgICAgIHN0YXR1czogdGhpcy5yZXNvdXJjZS5zdGF0dXMsXG4gICAgICBhcm46IHRoaXMucmVzb3VyY2UuYXJuLFxuICAgICAgZG9tYWluTmFtZTogdGhpcy5fZG9tYWluTmFtZSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhbiBPcmlnaW4gdG8gdGhpcyBEaXN0cmlidXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSBvcmlnaW4gVGhlIE9yaWdpbiB0byBhZGQuXG4gICAqIEBwYXJhbSBvcmlnaW5JZCBBbiBvcHRpb25hbCBpZCB0byB1c2UgZm9yIHRoZSBPcmlnaW4gb3Igb25lIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKi9cbiAgcHVibGljIGFkZE9yaWdpbihvcmlnaW46IElPcmlnaW4sIG9yaWdpbklkPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBpbmRleGVkT3JpZ2luID0gdGhpcy5fb3JpZ2lucy5maW5kKFxuICAgICAgKG9yaWdpbkluZGV4KSA9PiBvcmlnaW5JbmRleC5vcmlnaW4gPT09IG9yaWdpbixcbiAgICApO1xuICAgIGlmIChpbmRleGVkT3JpZ2luKSB7XG4gICAgICBpZiAob3JpZ2luSWQgJiYgb3JpZ2luSWQgIT09IGluZGV4ZWRPcmlnaW4uaWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBEdXBsaWNhdGUgb3JpZ2luIGZvciAke2luZGV4ZWRPcmlnaW4uaWR9IGFuZCAke29yaWdpbklkfS5gLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGluZGV4ZWRPcmlnaW4uaWQ7XG4gICAgfVxuICAgIGNvbnN0IG5leHRJbmRleCA9IHRoaXMuX29yaWdpbnMubGVuZ3RoO1xuICAgIGNvbnN0IGlkID0gb3JpZ2luSWQgPz8gYG9yaWdpbi0ke25leHRJbmRleH1gO1xuICAgIC8vIGVuc3VyZSBpZCAoaWYgcHJvdmlkZWQpIGlzIHVuaXF1ZSB3aXRoaW4gRGlzdHJpYnV0aW9uXG4gICAgaWYgKHRoaXMuX29yaWdpbnMuc29tZSgob3JpZ2luSW5kZXgpID0+IG9yaWdpbkluZGV4LmlkID09PSBpZCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYER1cGxpY2F0ZSBvcmlnaW4gaWQgJHtpZH0uIE9yaWdpbklkcyBtdXN0IGJlIHVuaXF1ZSB3aXRoaW4gYSBkaXN0cmlidXRpb25gLFxuICAgICAgKTtcbiAgICB9XG4gICAgdGhpcy5fb3JpZ2lucy5wdXNoKHsgb3JpZ2luLCBpZCB9KTtcbiAgICByZXR1cm4gaWQ7XG4gIH1cblxuICBwcml2YXRlIHJlbmRlckVycm9yUmVzcG9uc2VzKCk6XG4gICAgfCBjbG91ZGZyb250RGlzdHJpYnV0aW9uLkNsb3VkZnJvbnREaXN0cmlidXRpb25DdXN0b21FcnJvclJlc3BvbnNlW11cbiAgICB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHRoaXMuZXJyb3JSZXNwb25zZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmVycm9yUmVzcG9uc2VzLm1hcCgoZXJyb3JDb25maWcpID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgIWVycm9yQ29uZmlnLnJlc3BvbnNlSHR0cFN0YXR1cyAmJlxuICAgICAgICAhZXJyb3JDb25maWcudHRsICYmXG4gICAgICAgICFlcnJvckNvbmZpZy5yZXNwb25zZVBhZ2VQYXRoXG4gICAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIFwiQSBjdXN0b20gZXJyb3IgcmVzcG9uc2Ugd2l0aG91dCBlaXRoZXIgYSAncmVzcG9uc2VIdHRwU3RhdHVzJywgJ3R0bCcgb3IgJ3Jlc3BvbnNlUGFnZVBhdGgnIGlzIG5vdCB2YWxpZC5cIixcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZXJyb3JDYWNoaW5nTWluVHRsOiBlcnJvckNvbmZpZy50dGw/LnRvU2Vjb25kcygpLFxuICAgICAgICBlcnJvckNvZGU6IGVycm9yQ29uZmlnLmh0dHBTdGF0dXMsXG4gICAgICAgIHJlc3BvbnNlQ29kZTogZXJyb3JDb25maWcucmVzcG9uc2VQYWdlUGF0aFxuICAgICAgICAgID8gKGVycm9yQ29uZmlnLnJlc3BvbnNlSHR0cFN0YXR1cyA/PyBlcnJvckNvbmZpZy5odHRwU3RhdHVzKVxuICAgICAgICAgIDogZXJyb3JDb25maWcucmVzcG9uc2VIdHRwU3RhdHVzLFxuICAgICAgICByZXNwb25zZVBhZ2VQYXRoOiBlcnJvckNvbmZpZy5yZXNwb25zZVBhZ2VQYXRoLFxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgbmV3IGJlaGF2aW9yIHRvIHRoaXMgZGlzdHJpYnV0aW9uIGZvciB0aGUgZ2l2ZW4gcGF0aFBhdHRlcm4uXG4gICAqXG4gICAqIEBwYXJhbSBwYXRoUGF0dGVybiB0aGUgcGF0aCBwYXR0ZXJuIChlLmcuLCAnaW1hZ2VzLyonKSB0aGF0IHNwZWNpZmllcyB3aGljaCByZXF1ZXN0cyB0byBhcHBseSB0aGUgYmVoYXZpb3IgdG8uXG4gICAqIEBwYXJhbSBvcmlnaW4gdGhlIG9yaWdpbiB0byB1c2UgZm9yIHRoaXMgYmVoYXZpb3JcbiAgICogQHBhcmFtIGJlaGF2aW9yT3B0aW9ucyB0aGUgb3B0aW9ucyBmb3IgdGhlIGJlaGF2aW9yIGF0IHRoaXMgcGF0aC5cbiAgICovXG4gIHB1YmxpYyBhZGRCZWhhdmlvcihcbiAgICBwYXRoUGF0dGVybjogc3RyaW5nLFxuICAgIG9yaWdpbjogSU9yaWdpbixcbiAgICBiZWhhdmlvck9wdGlvbnM6IEFkZEJlaGF2aW9yT3B0aW9ucyA9IHt9LFxuICApIHtcbiAgICBpZiAocGF0aFBhdHRlcm4gPT09IFwiKlwiKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiT25seSB0aGUgZGVmYXVsdCBiZWhhdmlvciBjYW4gaGF2ZSBhIHBhdGggcGF0dGVybiBvZiAnKidcIixcbiAgICAgICk7XG4gICAgfVxuICAgIGNvbnN0IHRhcmdldE9yaWdpbklkID0gdGhpcy5hZGRPcmlnaW4ob3JpZ2luKTtcbiAgICB0aGlzLmFkZGl0aW9uYWxCZWhhdmlvcnMucHVzaCh7XG4gICAgICBwYXRoUGF0dGVybixcbiAgICAgIG9yaWdpbixcbiAgICAgIHRhcmdldE9yaWdpbklkLFxuICAgICAgLi4uYmVoYXZpb3JPcHRpb25zLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW5kIHJldHVybnMgdGhlIFRlcnJhZm9ybSByZXByZXNlbnRhdGlvbiBvZiB0aGlzIGJlaGF2aW9yLlxuICAgKiBUaGlzIHJlbmRlcnMgYXMgYSBcIkNsb3VkZnJvbnREaXN0cmlidXRpb25EZWZhdWx0Q2FjaGVCZWhhdmlvclwiXG4gICAqIHJlZ2FyZGxlc3MgaWYgdGhpcyBpcyBhIGRlZmF1bHQgY2FjaGUgYmVoYXZpb3Igb3Igbm90LCBhcyB0aGUgdHdvXG4gICAqIGFyZSBpZGVudGljYWwgZXhjZXB0IHRoZSBgcGF0aFBhdHRlcm5gIGlzIG9taXR0ZWQgZm9yIHRoZSBkZWZhdWx0XG4gICAqIGNhY2hlIGJlaGF2aW9yLlxuICAgKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHByaXZhdGUgX3JlbmRlckRlZmF1bHRDYWNoZUJlaGF2aW9yKFxuICAgIHByb3BzOiBDYWNoZUJlaGF2aW9yLFxuICApOiBjbG91ZGZyb250RGlzdHJpYnV0aW9uLkNsb3VkZnJvbnREaXN0cmlidXRpb25EZWZhdWx0Q2FjaGVCZWhhdmlvciB7XG4gICAgLy8gVE9ETzogc2hvdWxkIGl0IGJlIHBvc3NpYmxlIHRvIGxlYXZlIGNhY2hlUG9saWN5IGJlIHVuZGVmaW5lZD9cbiAgICBjb25zdCBtYW5hZ2VkQ2FjaGVQb2xpY3lOYW1lID1cbiAgICAgIHByb3BzLmNhY2hlUG9saWN5ID8/IE1hbmFnZWRDYWNoZVBvbGljeS5DQUNISU5HX09QVElNSVpFRDtcbiAgICBjb25zdCBjYWNoZVBvbGljeSA9IHRoaXMuZGF0YUxvb2t1cChcbiAgICAgIG1hbmFnZWRDYWNoZVBvbGljeU5hbWUsXG4gICAgICBkYXRhQXdzQ2xvdWRmcm9udENhY2hlUG9saWN5LkRhdGFBd3NDbG91ZGZyb250Q2FjaGVQb2xpY3ksXG4gICAgICB7IG5hbWU6IG1hbmFnZWRDYWNoZVBvbGljeU5hbWUgfSxcbiAgICApO1xuICAgIGNvbnN0IG9yaWdpblJlcXVlc3RQb2xpY3kgPSB0aGlzLmRhdGFMb29rdXAoXG4gICAgICBwcm9wcy5vcmlnaW5SZXF1ZXN0UG9saWN5LFxuICAgICAgZGF0YUF3c0Nsb3VkZnJvbnRPcmlnaW5SZXF1ZXN0UG9saWN5LkRhdGFBd3NDbG91ZGZyb250T3JpZ2luUmVxdWVzdFBvbGljeSxcbiAgICAgIHsgbmFtZTogcHJvcHMub3JpZ2luUmVxdWVzdFBvbGljeSB9LFxuICAgICk7XG4gICAgbGV0IHJlc3BvbnNlSGVhZGVyc1BvbGljeUlkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgaWYgKHR5cGVvZiBwcm9wcy5yZXNwb25zZUhlYWRlcnNQb2xpY3kgPT0gXCJzdHJpbmdcIikge1xuICAgICAgY29uc3QgbWFuYWdlZFBvbGljeSA9IHRoaXMuZGF0YUxvb2t1cChcbiAgICAgICAgcHJvcHMucmVzcG9uc2VIZWFkZXJzUG9saWN5LFxuICAgICAgICBkYXRhQXdzQ2xvdWRmcm9udFJlc3BvbnNlSGVhZGVyc1BvbGljeS5EYXRhQXdzQ2xvdWRmcm9udFJlc3BvbnNlSGVhZGVyc1BvbGljeSxcbiAgICAgICAgeyBuYW1lOiBwcm9wcy5yZXNwb25zZUhlYWRlcnNQb2xpY3kgfSxcbiAgICAgICk7XG4gICAgICByZXNwb25zZUhlYWRlcnNQb2xpY3lJZCA9IG1hbmFnZWRQb2xpY3k/LmlkO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXNwb25zZUhlYWRlcnNQb2xpY3lJZCA9XG4gICAgICAgIHByb3BzLnJlc3BvbnNlSGVhZGVyc1BvbGljeT8ucmVzcG9uc2VIZWFkZXJzUG9saWN5SWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHRhcmdldE9yaWdpbklkOiBwcm9wcy50YXJnZXRPcmlnaW5JZCxcbiAgICAgIGFsbG93ZWRNZXRob2RzOlxuICAgICAgICBwcm9wcy5hbGxvd2VkTWV0aG9kcz8ubWV0aG9kcyA/PyBBbGxvd2VkTWV0aG9kcy5BTExPV19HRVRfSEVBRC5tZXRob2RzLFxuICAgICAgY2FjaGVkTWV0aG9kczpcbiAgICAgICAgcHJvcHMuY2FjaGVkTWV0aG9kcz8ubWV0aG9kcyA/PyBDYWNoZWRNZXRob2RzLkNBQ0hFX0dFVF9IRUFELm1ldGhvZHMsXG4gICAgICBjYWNoZVBvbGljeUlkOiBjYWNoZVBvbGljeT8uaWQsXG4gICAgICBjb21wcmVzczogcHJvcHMuY29tcHJlc3MgPz8gdHJ1ZSxcbiAgICAgIG9yaWdpblJlcXVlc3RQb2xpY3lJZDogb3JpZ2luUmVxdWVzdFBvbGljeT8uaWQsXG4gICAgICByZXNwb25zZUhlYWRlcnNQb2xpY3lJZCxcbiAgICAgIHNtb290aFN0cmVhbWluZzogcHJvcHMuc21vb3RoU3RyZWFtaW5nLFxuICAgICAgdmlld2VyUHJvdG9jb2xQb2xpY3k6XG4gICAgICAgIHByb3BzLnZpZXdlclByb3RvY29sUG9saWN5ID8/IFZpZXdlclByb3RvY29sUG9saWN5LkFMTE9XX0FMTCxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSByZW5kZXJSZXN0cmljdGlvbnMoZ2VvUmVzdHJpY3Rpb24/OiBHZW9SZXN0cmljdGlvbikge1xuICAgIHJldHVybiBnZW9SZXN0cmljdGlvblxuICAgICAgPyB7XG4gICAgICAgICAgZ2VvUmVzdHJpY3Rpb246IHtcbiAgICAgICAgICAgIHJlc3RyaWN0aW9uVHlwZTogZ2VvUmVzdHJpY3Rpb24ucmVzdHJpY3Rpb25UeXBlLFxuICAgICAgICAgICAgbG9jYXRpb25zOlxuICAgICAgICAgICAgICBnZW9SZXN0cmljdGlvbi5yZXN0cmljdGlvblR5cGUgIT09IEdlb1Jlc3RyaWN0aW9uVHlwZS5OT05FXG4gICAgICAgICAgICAgICAgPyB0aGlzLnZhbGlkYXRlTG9jYXRpb25zKGdlb1Jlc3RyaWN0aW9uLmxvY2F0aW9ucylcbiAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgICB9LFxuICAgICAgICB9XG4gICAgICA6IHtcbiAgICAgICAgICBnZW9SZXN0cmljdGlvbjoge1xuICAgICAgICAgICAgcmVzdHJpY3Rpb25UeXBlOiBHZW9SZXN0cmljdGlvblR5cGUuTk9ORSxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSB2YWxpZGF0ZUxvY2F0aW9ucyhsb2NhdGlvbnM6IHN0cmluZ1tdKSB7XG4gICAgY29uc3QgTE9DQVRJT05fUkVHRVggPSAvXltBLVpdezJ9JC87XG4gICAgaWYgKGxvY2F0aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlNob3VsZCBwcm92aWRlIGF0IGxlYXN0IDEgbG9jYXRpb25cIik7XG4gICAgfVxuICAgIGxvY2F0aW9ucy5mb3JFYWNoKChsb2NhdGlvbikgPT4ge1xuICAgICAgaWYgKCFMT0NBVElPTl9SRUdFWC50ZXN0KGxvY2F0aW9uKSkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LWxlblxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYEludmFsaWQgbG9jYXRpb24gZm9ybWF0IGZvciBsb2NhdGlvbjogJHtsb2NhdGlvbn0sIGxvY2F0aW9uIHNob3VsZCBiZSB0d28tbGV0dGVyIGFuZCB1cHBlcmNhc2UgY291bnRyeSBJU08gMzE2Ni0xLWFscGhhLTIgY29kZWAsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGxvY2F0aW9ucztcbiAgfVxuXG4gIHByaXZhdGUgcmVuZGVyVmlld2VyQ2VydGlmaWNhdGUoXG4gICAgY2VydGlmaWNhdGU/OiBJQ2VydGlmaWNhdGUsXG4gICAgbWluaW11bVByb3RvY29sVmVyc2lvblByb3A/OiBTZWN1cml0eVBvbGljeVByb3RvY29sLFxuICAgIHNzbFN1cHBvcnRNZXRob2RQcm9wPzogU1NMTWV0aG9kLFxuICApOiBjbG91ZGZyb250RGlzdHJpYnV0aW9uLkNsb3VkZnJvbnREaXN0cmlidXRpb25WaWV3ZXJDZXJ0aWZpY2F0ZSB7XG4gICAgY29uc3QgbWluaW11bVByb3RvY29sVmVyc2lvbiA9XG4gICAgICBtaW5pbXVtUHJvdG9jb2xWZXJzaW9uUHJvcCA/PyBTZWN1cml0eVBvbGljeVByb3RvY29sLlRMU19WMV8yXzIwMjE7XG4gICAgY29uc3Qgc3NsU3VwcG9ydE1ldGhvZCA9IHNzbFN1cHBvcnRNZXRob2RQcm9wID8/IFNTTE1ldGhvZC5TTkk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uKGNlcnRpZmljYXRlXG4gICAgICAgID8geyBhY21DZXJ0aWZpY2F0ZUFybjogY2VydGlmaWNhdGUuY2VydGlmaWNhdGVBcm4gfVxuICAgICAgICA6IHsgY2xvdWRmcm9udERlZmF1bHRDZXJ0aWZpY2F0ZTogdHJ1ZSB9KSxcbiAgICAgIG1pbmltdW1Qcm90b2NvbFZlcnNpb246IG1pbmltdW1Qcm90b2NvbFZlcnNpb24sXG4gICAgICBzc2xTdXBwb3J0TWV0aG9kOiBzc2xTdXBwb3J0TWV0aG9kLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQ29uZGl0aW9uYWxseSBsb29rdXAgb3IgY3JlYXRlIGEgY2hpbGQgYmFzZWQgb24gdGhlIGlkIHByb3ZpZGVkLlxuICAgKiBJZiB0aGUgaWQgaXMgdW5kZWZpbmVkLCBpdCB3aWxsIHJldHVybiB1bmRlZmluZWQuXG4gICAqXG4gICAqIEBwYXJhbSBpZCB0aGUgaWQgb2YgdGhlIGNoaWxkIHRvIGxvb2t1cCBvciBjcmVhdGVcbiAgICogQHBhcmFtIGNvbnN0cnVjdFR5cGUgdGhlIHR5cGUgb2YgdGhlIGNoaWxkIHRvIGNyZWF0ZVxuICAgKiBAcGFyYW0gY29uZmlnIHRoZSBjb25maWd1cmF0aW9uIHRvIHBhc3MgdG8gdGhlIGNoaWxkXG4gICAqL1xuICBwcml2YXRlIGRhdGFMb29rdXA8VENvbnN0cnVjdCBleHRlbmRzIENvbnN0cnVjdD4oXG4gICAgaWQ6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICBjb25zdHJ1Y3RUeXBlOiBuZXcgKFxuICAgICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICAgIGlkSW5wdXQ6IHN0cmluZyxcbiAgICAgIGNvbmZpZzogYW55LFxuICAgICkgPT4gVENvbnN0cnVjdCxcbiAgICBjb25maWc/OiBhbnksXG4gICk6IFRDb25zdHJ1Y3QgfCB1bmRlZmluZWQge1xuICAgIGlmICghaWQpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGxldCBjaGlsZCA9IHRoaXMubm9kZS50cnlGaW5kQ2hpbGQoaWQpIGFzIFRDb25zdHJ1Y3QgfCB1bmRlZmluZWQ7XG4gICAgaWYgKCFjaGlsZCkge1xuICAgICAgY2hpbGQgPSBuZXcgY29uc3RydWN0VHlwZSh0aGlzLCBpZCwgY29uZmlnKTtcbiAgICB9XG4gICAgcmV0dXJuIGNoaWxkO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2VvUmVzdHJpY3Rpb24ge1xuICByZWFkb25seSBsb2NhdGlvbnM6IHN0cmluZ1tdO1xuICByZWFkb25seSByZXN0cmljdGlvblR5cGU6IEdlb1Jlc3RyaWN0aW9uVHlwZTtcbn1cblxuZXhwb3J0IGVudW0gR2VvUmVzdHJpY3Rpb25UeXBlIHtcbiAgTk9ORSA9IFwibm9uZVwiLFxuICBXSElURUxJU1QgPSBcIndoaXRlbGlzdFwiLFxuICBCTEFDS0xJU1QgPSBcImJsYWNrbGlzdFwiLFxufVxuXG4vLyByZWY6IGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9ibG9iL3YyLjE1Ni4wL3BhY2thZ2VzL2F3cy1jZGstbGliL2F3cy1jbG91ZGZyb250L2xpYi9kaXN0cmlidXRpb24udHNcblxuLyoqIE1heGltdW0gSFRUUCB2ZXJzaW9uIHRvIHN1cHBvcnQgKi9cbmV4cG9ydCBlbnVtIEh0dHBWZXJzaW9uIHtcbiAgLyoqIEhUVFAgMS4xICovXG4gIEhUVFAxXzEgPSBcImh0dHAxLjFcIixcbiAgLyoqIEhUVFAgMiAqL1xuICBIVFRQMiA9IFwiaHR0cDJcIixcbiAgLyoqIEhUVFAgMiBhbmQgSFRUUCAzICovXG4gIEhUVFAyX0FORF8zID0gXCJodHRwMmFuZDNcIixcbiAgLyoqIEhUVFAgMyAqL1xuICBIVFRQMyA9IFwiaHR0cDNcIixcbn1cblxuLyoqXG4gKiBUaGUgcHJpY2UgY2xhc3MgZGV0ZXJtaW5lcyBob3cgbWFueSBlZGdlIGxvY2F0aW9ucyBDbG91ZEZyb250IHdpbGwgdXNlIGZvciB5b3VyIGRpc3RyaWJ1dGlvbi5cbiAqIFNlZSBodHRwczovL2F3cy5hbWF6b24uY29tL2Nsb3VkZnJvbnQvcHJpY2luZy8gZm9yIGZ1bGwgbGlzdCBvZiBzdXBwb3J0ZWQgcmVnaW9ucy5cbiAqL1xuZXhwb3J0IGVudW0gUHJpY2VDbGFzcyB7XG4gIC8qKiBVU0EsIENhbmFkYSwgRXVyb3BlLCAmIElzcmFlbCAqL1xuICBQUklDRV9DTEFTU18xMDAgPSBcIlByaWNlQ2xhc3NfMTAwXCIsXG4gIC8qKiBQUklDRV9DTEFTU18xMDAgKyBTb3V0aCBBZnJpY2EsIEtlbnlhLCBNaWRkbGUgRWFzdCwgSmFwYW4sIFNpbmdhcG9yZSwgU291dGggS29yZWEsIFRhaXdhbiwgSG9uZyBLb25nLCAmIFBoaWxpcHBpbmVzICovXG4gIFBSSUNFX0NMQVNTXzIwMCA9IFwiUHJpY2VDbGFzc18yMDBcIixcbiAgLyoqIEFsbCBsb2NhdGlvbnMgKi9cbiAgUFJJQ0VfQ0xBU1NfQUxMID0gXCJQcmljZUNsYXNzX0FsbFwiLFxufVxuXG4vKipcbiAqIFRoZSBTU0wgbWV0aG9kIENsb3VkRnJvbnQgd2lsbCB1c2UgZm9yIHlvdXIgZGlzdHJpYnV0aW9uLlxuICpcbiAqIFNlcnZlciBOYW1lIEluZGljYXRpb24gKFNOSSkgLSBpcyBhbiBleHRlbnNpb24gdG8gdGhlIFRMUyBjb21wdXRlciBuZXR3b3JraW5nIHByb3RvY29sIGJ5IHdoaWNoIGEgY2xpZW50IGluZGljYXRlc1xuICogIHdoaWNoIGhvc3RuYW1lIGl0IGlzIGF0dGVtcHRpbmcgdG8gY29ubmVjdCB0byBhdCB0aGUgc3RhcnQgb2YgdGhlIGhhbmRzaGFraW5nIHByb2Nlc3MuIFRoaXMgYWxsb3dzIGEgc2VydmVyIHRvIHByZXNlbnRcbiAqICBtdWx0aXBsZSBjZXJ0aWZpY2F0ZXMgb24gdGhlIHNhbWUgSVAgYWRkcmVzcyBhbmQgVENQIHBvcnQgbnVtYmVyIGFuZCBoZW5jZSBhbGxvd3MgbXVsdGlwbGUgc2VjdXJlIChIVFRQUykgd2Vic2l0ZXNcbiAqIChvciBhbnkgb3RoZXIgc2VydmljZSBvdmVyIFRMUykgdG8gYmUgc2VydmVkIGJ5IHRoZSBzYW1lIElQIGFkZHJlc3Mgd2l0aG91dCByZXF1aXJpbmcgYWxsIHRob3NlIHNpdGVzIHRvIHVzZSB0aGUgc2FtZSBjZXJ0aWZpY2F0ZS5cbiAqXG4gKiBDbG91ZEZyb250IGNhbiB1c2UgU05JIHRvIGhvc3QgbXVsdGlwbGUgZGlzdHJpYnV0aW9ucyBvbiB0aGUgc2FtZSBJUCAtIHdoaWNoIGEgbGFyZ2UgbWFqb3JpdHkgb2YgY2xpZW50cyB3aWxsIHN1cHBvcnQuXG4gKlxuICogSWYgeW91ciBjbGllbnRzIGNhbm5vdCBzdXBwb3J0IFNOSSBob3dldmVyIC0gQ2xvdWRGcm9udCBjYW4gdXNlIGRlZGljYXRlZCBJUHMgZm9yIHlvdXIgZGlzdHJpYnV0aW9uIC0gYnV0IHRoZXJlIGlzIGEgcHJvcmF0ZWQgbW9udGhseSBjaGFyZ2UgZm9yXG4gKiB1c2luZyB0aGlzIGZlYXR1cmUuIEJ5IGRlZmF1bHQsIHdlIHVzZSBTTkkgLSBidXQgeW91IGNhbiBvcHRpb25hbGx5IGVuYWJsZSBkZWRpY2F0ZWQgSVBzIChWSVApLlxuICpcbiAqIFNlZSB0aGUgQ2xvdWRGcm9udCBTU0wgZm9yIG1vcmUgZGV0YWlscyBhYm91dCBwcmljaW5nIDogaHR0cHM6Ly9hd3MuYW1hem9uLmNvbS9jbG91ZGZyb250L2N1c3RvbS1zc2wtZG9tYWlucy9cbiAqXG4gKi9cbmV4cG9ydCBlbnVtIFNTTE1ldGhvZCB7XG4gIFNOSSA9IFwic25pLW9ubHlcIixcbiAgVklQID0gXCJ2aXBcIixcbn1cblxuLyoqXG4gKiBUaGUgbWluaW11bSB2ZXJzaW9uIG9mIHRoZSBTU0wgcHJvdG9jb2wgdGhhdCB5b3Ugd2FudCBDbG91ZEZyb250IHRvIHVzZSBmb3IgSFRUUFMgY29ubmVjdGlvbnMuXG4gKiBDbG91ZEZyb250IHNlcnZlcyB5b3VyIG9iamVjdHMgb25seSB0byBicm93c2VycyBvciBkZXZpY2VzIHRoYXQgc3VwcG9ydCBhdCBsZWFzdCB0aGUgU1NMIHZlcnNpb24gdGhhdCB5b3Ugc3BlY2lmeS5cbiAqL1xuZXhwb3J0IGVudW0gU2VjdXJpdHlQb2xpY3lQcm90b2NvbCB7XG4gIFNTTF9WMyA9IFwiU1NMdjNcIixcbiAgVExTX1YxID0gXCJUTFN2MVwiLFxuICBUTFNfVjFfMjAxNiA9IFwiVExTdjFfMjAxNlwiLFxuICBUTFNfVjFfMV8yMDE2ID0gXCJUTFN2MS4xXzIwMTZcIixcbiAgVExTX1YxXzJfMjAxOCA9IFwiVExTdjEuMl8yMDE4XCIsXG4gIFRMU19WMV8yXzIwMTkgPSBcIlRMU3YxLjJfMjAxOVwiLFxuICBUTFNfVjFfMl8yMDIxID0gXCJUTFN2MS4yXzIwMjFcIixcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBjb25maWd1cmluZyBjdXN0b20gZXJyb3IgcmVzcG9uc2VzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVycm9yUmVzcG9uc2Uge1xuICAvKipcbiAgICogVGhlIG1pbmltdW0gYW1vdW50IG9mIHRpbWUsIGluIHNlY29uZHMsIHRoYXQgeW91IHdhbnQgQ2xvdWRGcm9udCB0byBjYWNoZSB0aGUgSFRUUCBzdGF0dXMgY29kZSBzcGVjaWZpZWQgaW4gRXJyb3JDb2RlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHRoZSBkZWZhdWx0IGNhY2hpbmcgVFRMIGJlaGF2aW9yIGFwcGxpZXNcbiAgICovXG4gIHJlYWRvbmx5IHR0bD86IER1cmF0aW9uO1xuICAvKipcbiAgICogVGhlIEhUVFAgc3RhdHVzIGNvZGUgZm9yIHdoaWNoIHlvdSB3YW50IHRvIHNwZWNpZnkgYSBjdXN0b20gZXJyb3IgcGFnZSBhbmQvb3IgYSBjYWNoaW5nIGR1cmF0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgaHR0cFN0YXR1czogbnVtYmVyO1xuICAvKipcbiAgICogVGhlIEhUVFAgc3RhdHVzIGNvZGUgdGhhdCB5b3Ugd2FudCBDbG91ZEZyb250IHRvIHJldHVybiB0byB0aGUgdmlld2VyIGFsb25nIHdpdGggdGhlIGN1c3RvbSBlcnJvciBwYWdlLlxuICAgKlxuICAgKiBJZiB5b3Ugc3BlY2lmeSBhIHZhbHVlIGZvciBgcmVzcG9uc2VIdHRwU3RhdHVzYCwgeW91IG11c3QgYWxzbyBzcGVjaWZ5IGEgdmFsdWUgZm9yIGByZXNwb25zZVBhZ2VQYXRoYC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSB0aGUgZXJyb3IgY29kZSB3aWxsIGJlIHJldHVybmVkIGFzIHRoZSByZXNwb25zZSBjb2RlLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVzcG9uc2VIdHRwU3RhdHVzPzogbnVtYmVyO1xuICAvKipcbiAgICogVGhlIHBhdGggdG8gdGhlIGN1c3RvbSBlcnJvciBwYWdlIHRoYXQgeW91IHdhbnQgQ2xvdWRGcm9udCB0byByZXR1cm4gdG8gYSB2aWV3ZXIgd2hlbiB5b3VyIG9yaWdpbiByZXR1cm5zIHRoZVxuICAgKiBgaHR0cFN0YXR1c2AsIGZvciBleGFtcGxlLCAvNHh4LWVycm9ycy80MDMtZm9yYmlkZGVuLmh0bWxcbiAgICpcbiAgICogQGRlZmF1bHQgLSB0aGUgZGVmYXVsdCBDbG91ZEZyb250IHJlc3BvbnNlIGlzIHNob3duLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVzcG9uc2VQYWdlUGF0aD86IHN0cmluZztcbn1cblxuLy8gcHJpdmF0ZSBpbnRlcmZhY2UgdG8ga2VlcCB0cmFjayBvZiBDYWNoZUJlaGF2aW9yc1xuaW50ZXJmYWNlIENhY2hlQmVoYXZpb3IgZXh0ZW5kcyBCZWhhdmlvck9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIHBhdHRlcm4gKGUuZy4sIGBpbWFnZXMvKi5qcGdgKSB0aGF0IHNwZWNpZmllcyB3aGljaCByZXF1ZXN0cyB0byBhcHBseSB0aGUgYmVoYXZpb3IgdG8uXG4gICAqIFRoZXJlIG11c3QgYmUgZXhhY3RseSBvbmUgYmVoYXZpb3IgYXNzb2NpYXRlZCB3aXRoIGVhY2ggYERpc3RyaWJ1dGlvbmAgdGhhdCBoYXMgYSBwYXRoIHBhdHRlcm5cbiAgICogb2YgJyonLCB3aGljaCBhY3RzIGFzIHRoZSBjYXRjaC1hbGwgZGVmYXVsdCBiZWhhdmlvci5cbiAgICovXG4gIHJlYWRvbmx5IHBhdGhQYXR0ZXJuOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFZhbHVlIG9mIElEIGZvciB0aGUgb3JpZ2luIHRoYXQgeW91IHdhbnQgQ2xvdWRGcm9udCB0byByb3V0ZSByZXF1ZXN0cyB0byB3aGVuIGEgcmVxdWVzdCBtYXRjaGVzXG4gICAqIHRoZSBwYXRoIHBhdHRlcm4gZWl0aGVyIGZvciBhIGNhY2hlIGJlaGF2aW9yIG9yIGZvciB0aGUgZGVmYXVsdCBjYWNoZSBiZWhhdmlvci5cbiAgICovXG4gIHJlYWRvbmx5IHRhcmdldE9yaWdpbklkOiBzdHJpbmc7XG59XG5cbi8vIHByaXZhdGUgaW50ZXJmYWNlIHRvIGluZGV4IG9yaWdpbnMgYnkgaWRcbmludGVyZmFjZSBPcmlnaW5JbmRleCB7XG4gIG9yaWdpbjogSU9yaWdpbjtcbiAgaWQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBjcmVhdGluZyBhIG5ldyBiZWhhdmlvci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCZWhhdmlvck9wdGlvbnMgZXh0ZW5kcyBBZGRCZWhhdmlvck9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIG9yaWdpbiB0aGF0IHlvdSB3YW50IENsb3VkRnJvbnQgdG8gcm91dGUgcmVxdWVzdHMgdG8gd2hlbiB0aGV5IG1hdGNoIHRoaXMgYmVoYXZpb3IuXG4gICAqL1xuICByZWFkb25seSBvcmlnaW46IElPcmlnaW47XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgYWRkaW5nIGEgbmV3IGJlaGF2aW9yIHRvIGEgRGlzdHJpYnV0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFkZEJlaGF2aW9yT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBIVFRQIG1ldGhvZHMgdG8gYWxsb3cgZm9yIHRoaXMgYmVoYXZpb3IuXG4gICAqXG4gICAqIEBkZWZhdWx0IEFsbG93ZWRNZXRob2RzLkFMTE9XX0dFVF9IRUFEXG4gICAqL1xuICByZWFkb25seSBhbGxvd2VkTWV0aG9kcz86IEFsbG93ZWRNZXRob2RzO1xuXG4gIC8qKlxuICAgKiBIVFRQIG1ldGhvZHMgdG8gY2FjaGUgZm9yIHRoaXMgYmVoYXZpb3IuXG4gICAqXG4gICAqIEBkZWZhdWx0IENhY2hlZE1ldGhvZHMuQ0FDSEVfR0VUX0hFQURcbiAgICovXG4gIHJlYWRvbmx5IGNhY2hlZE1ldGhvZHM/OiBDYWNoZWRNZXRob2RzO1xuXG4gIC8qKlxuICAgKiBUaGUgY2FjaGUgcG9saWN5IGZvciB0aGlzIGJlaGF2aW9yLiBUaGUgY2FjaGUgcG9saWN5IGRldGVybWluZXMgd2hhdCB2YWx1ZXMgYXJlIGluY2x1ZGVkIGluIHRoZSBjYWNoZSBrZXksXG4gICAqIGFuZCB0aGUgdGltZS10by1saXZlIChUVEwpIHZhbHVlcyBmb3IgdGhlIGNhY2hlLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9jb250cm9sbGluZy10aGUtY2FjaGUta2V5Lmh0bWwuXG4gICAqIEBkZWZhdWx0IE1hbmFnZWRDYWNoZVBvbGljeS5DQUNISU5HX09QVElNSVpFRFxuICAgKi9cbiAgcmVhZG9ubHkgY2FjaGVQb2xpY3k/OiBNYW5hZ2VkQ2FjaGVQb2xpY3k7IC8vVE9ETzogc3VwcG9ydCBjdXN0b20gY2FjaGUgcG9saWNpZXNcblxuICAvKipcbiAgICogV2hldGhlciB5b3Ugd2FudCBDbG91ZEZyb250IHRvIGF1dG9tYXRpY2FsbHkgY29tcHJlc3MgY2VydGFpbiBmaWxlcyBmb3IgdGhpcyBjYWNoZSBiZWhhdmlvci5cbiAgICogU2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9TZXJ2aW5nQ29tcHJlc3NlZEZpbGVzLmh0bWwjY29tcHJlc3NlZC1jb250ZW50LWNsb3VkZnJvbnQtZmlsZS10eXBlc1xuICAgKiBmb3IgZmlsZSB0eXBlcyBDbG91ZEZyb250IHdpbGwgY29tcHJlc3MuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IGNvbXByZXNzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIG9yaWdpbiByZXF1ZXN0IHBvbGljeSBmb3IgdGhpcyBiZWhhdmlvci4gVGhlIG9yaWdpbiByZXF1ZXN0IHBvbGljeSBkZXRlcm1pbmVzIHdoaWNoIHZhbHVlcyAoZS5nLiwgaGVhZGVycywgY29va2llcylcbiAgICogYXJlIGluY2x1ZGVkIGluIHJlcXVlc3RzIHRoYXQgQ2xvdWRGcm9udCBzZW5kcyB0byB0aGUgb3JpZ2luLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vbmVcbiAgICovXG4gIHJlYWRvbmx5IG9yaWdpblJlcXVlc3RQb2xpY3k/OiBNYW5hZ2VkT3JpZ2luUmVxdWVzdFBvbGljeTsgLy9UT0RPOiBzdXBwb3J0IGN1c3RvbSBvcmlnaW4gcmVxdWVzdCBwb2xpY2llc1xuXG4gIC8qKlxuICAgKiBUaGUgcmVzcG9uc2UgaGVhZGVycyBwb2xpY3kgZm9yIHRoaXMgYmVoYXZpb3IuIFRoZSByZXNwb25zZSBoZWFkZXJzIHBvbGljeSBkZXRlcm1pbmVzIHdoaWNoIGhlYWRlcnMgYXJlIGluY2x1ZGVkIGluIHJlc3BvbnNlc1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vbmVcbiAgICovXG4gIHJlYWRvbmx5IHJlc3BvbnNlSGVhZGVyc1BvbGljeT86XG4gICAgfCBNYW5hZ2VkUmVzcG9uc2VIZWFkZXJzUG9saWN5XG4gICAgfCBJUmVzcG9uc2VIZWFkZXJzUG9saWN5O1xuXG4gIC8qKlxuICAgKiBTZXQgdGhpcyB0byB0cnVlIHRvIGluZGljYXRlIHlvdSB3YW50IHRvIGRpc3RyaWJ1dGUgbWVkaWEgZmlsZXMgaW4gdGhlIE1pY3Jvc29mdCBTbW9vdGggU3RyZWFtaW5nIGZvcm1hdCB1c2luZyB0aGlzIGJlaGF2aW9yLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgc21vb3RoU3RyZWFtaW5nPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIHByb3RvY29sIHRoYXQgdmlld2VycyBjYW4gdXNlIHRvIGFjY2VzcyB0aGUgZmlsZXMgY29udHJvbGxlZCBieSB0aGlzIGJlaGF2aW9yLlxuICAgKlxuICAgKiBAZGVmYXVsdCBWaWV3ZXJQcm90b2NvbFBvbGljeS5BTExPV19BTExcbiAgICovXG4gIHJlYWRvbmx5IHZpZXdlclByb3RvY29sUG9saWN5PzogVmlld2VyUHJvdG9jb2xQb2xpY3k7XG5cbiAgLyoqXG4gICAqIFRoZSBDbG91ZEZyb250IGZ1bmN0aW9ucyB0byBpbnZva2UgYmVmb3JlIHNlcnZpbmcgdGhlIGNvbnRlbnRzLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIGZ1bmN0aW9ucyB3aWxsIGJlIGludm9rZWRcbiAgICovXG4gIHJlYWRvbmx5IGZ1bmN0aW9uQXNzb2NpYXRpb25zPzogRnVuY3Rpb25Bc3NvY2lhdGlvbltdO1xufVxuXG4vKipcbiAqIFRoZSBIVFRQIG1ldGhvZHMgdGhhdCB0aGUgQmVoYXZpb3Igd2lsbCBhY2NlcHQgcmVxdWVzdHMgb24uXG4gKi9cbmV4cG9ydCBjbGFzcyBBbGxvd2VkTWV0aG9kcyB7XG4gIC8qKiBIRUFEIGFuZCBHRVQgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBBTExPV19HRVRfSEVBRCA9IG5ldyBBbGxvd2VkTWV0aG9kcyhbXCJHRVRcIiwgXCJIRUFEXCJdKTtcbiAgLyoqIEhFQUQsIEdFVCwgYW5kIE9QVElPTlMgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBBTExPV19HRVRfSEVBRF9PUFRJT05TID0gbmV3IEFsbG93ZWRNZXRob2RzKFtcbiAgICBcIkdFVFwiLFxuICAgIFwiSEVBRFwiLFxuICAgIFwiT1BUSU9OU1wiLFxuICBdKTtcbiAgLyoqIEFsbCBzdXBwb3J0ZWQgSFRUUCBtZXRob2RzICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgQUxMT1dfQUxMID0gbmV3IEFsbG93ZWRNZXRob2RzKFtcbiAgICBcIkdFVFwiLFxuICAgIFwiSEVBRFwiLFxuICAgIFwiT1BUSU9OU1wiLFxuICAgIFwiUFVUXCIsXG4gICAgXCJQQVRDSFwiLFxuICAgIFwiUE9TVFwiLFxuICAgIFwiREVMRVRFXCIsXG4gIF0pO1xuXG4gIC8qKiBIVFRQIG1ldGhvZHMgc3VwcG9ydGVkICovXG4gIHB1YmxpYyByZWFkb25seSBtZXRob2RzOiBzdHJpbmdbXTtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKG1ldGhvZHM6IHN0cmluZ1tdKSB7XG4gICAgdGhpcy5tZXRob2RzID0gbWV0aG9kcztcbiAgfVxufVxuXG4vKipcbiAqIFRoZSBIVFRQIG1ldGhvZHMgdGhhdCB0aGUgQmVoYXZpb3Igd2lsbCBjYWNoZSByZXF1ZXN0cyBvbi5cbiAqL1xuZXhwb3J0IGNsYXNzIENhY2hlZE1ldGhvZHMge1xuICAvKiogSEVBRCBhbmQgR0VUICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgQ0FDSEVfR0VUX0hFQUQgPSBuZXcgQ2FjaGVkTWV0aG9kcyhbXCJHRVRcIiwgXCJIRUFEXCJdKTtcbiAgLyoqIEhFQUQsIEdFVCwgYW5kIE9QVElPTlMgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBDQUNIRV9HRVRfSEVBRF9PUFRJT05TID0gbmV3IENhY2hlZE1ldGhvZHMoW1xuICAgIFwiR0VUXCIsXG4gICAgXCJIRUFEXCIsXG4gICAgXCJPUFRJT05TXCIsXG4gIF0pO1xuXG4gIC8qKiBIVFRQIG1ldGhvZHMgc3VwcG9ydGVkICovXG4gIHB1YmxpYyByZWFkb25seSBtZXRob2RzOiBzdHJpbmdbXTtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKG1ldGhvZHM6IHN0cmluZ1tdKSB7XG4gICAgdGhpcy5tZXRob2RzID0gbWV0aG9kcztcbiAgfVxufVxuXG4vKipcbiAqIEhvdyBIVFRQcyBzaG91bGQgYmUgaGFuZGxlZCB3aXRoIHlvdXIgZGlzdHJpYnV0aW9uLlxuICovXG5leHBvcnQgZW51bSBWaWV3ZXJQcm90b2NvbFBvbGljeSB7XG4gIC8qKiBIVFRQUyBvbmx5ICovXG4gIEhUVFBTX09OTFkgPSBcImh0dHBzLW9ubHlcIixcbiAgLyoqIFdpbGwgcmVkaXJlY3QgSFRUUCByZXF1ZXN0cyB0byBIVFRQUyAqL1xuICBSRURJUkVDVF9UT19IVFRQUyA9IFwicmVkaXJlY3QtdG8taHR0cHNcIixcbiAgLyoqIEJvdGggSFRUUCBhbmQgSFRUUFMgc3VwcG9ydGVkICovXG4gIEFMTE9XX0FMTCA9IFwiYWxsb3ctYWxsXCIsXG59XG5cbi8qKlxuICogQ2xvdWRGcm9udCBwcm92aWRlcyBhIHNldCBvZiBtYW5hZ2VkIGNhY2hlIHBvbGljaWVzIHRoYXQgeW91IGNhbiBhdHRhY2ggdG8gYW55IG9mIHlvdXIgZGlzdHJpYnV0aW9uJ3MgY2FjaGUgYmVoYXZpb3JzLlxuICogV2l0aCBhIG1hbmFnZWQgY2FjaGUgcG9saWN5LCB5b3UgZG9uJ3QgbmVlZCB0byB3cml0ZSBvciBtYWludGFpbiB5b3VyIG93biBjYWNoZSBwb2xpY3kuIFRoZSBtYW5hZ2VkIHBvbGljaWVzIHVzZSBzZXR0aW5ncyB0aGF0IGFyZSBvcHRpbWl6ZWQgZm9yIHNwZWNpZmljIHVzZSBjYXNlcy5cbiAqXG4gKiBAbGluayBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvdXNpbmctbWFuYWdlZC1jYWNoZS1wb2xpY2llcy5odG1sXG4gKiBAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvaGFzaGljb3JwL2F3cy81LjYwLjAvZG9jcy9kYXRhLXNvdXJjZXMvY2xvdWRmcm9udF9jYWNoZV9wb2xpY3kjYXdzLW1hbmFnZWQtcG9saWNpZXNcbiAqL1xuZXhwb3J0IGVudW0gTWFuYWdlZENhY2hlUG9saWN5IHtcbiAgLyoqXG4gICAqIFRoaXMgcG9saWN5IGlzIGRlc2lnbmVkIGZvciB1c2Ugd2l0aCBhbiBvcmlnaW4gdGhhdCBpcyBhbiBBV1MgQW1wbGlmeSB3ZWIgYXBwLlxuICAgKi9cbiAgQU1QTElGWSA9IFwiTWFuYWdlZC1BbXBsaWZ5XCIsXG4gIC8qKlxuICAgKiBPcHRpbWl6ZSBjYWNoZSBlZmZpY2llbmN5IGJ5IG1pbmltaXppbmcgdGhlIHZhbHVlcyB0aGF0IENsb3VkRnJvbnQgaW5jbHVkZXMgaW4gdGhlIGNhY2hlIGtleS5cbiAgICogUXVlcnkgc3RyaW5ncyBhbmQgY29va2llcyBhcmUgbm90IGluY2x1ZGVkIGluIHRoZSBjYWNoZSBrZXksIGFuZCBvbmx5IHRoZSBub3JtYWxpemVkICdBY2NlcHQtRW5jb2RpbmcnIGhlYWRlciBpcyBpbmNsdWRlZC5cbiAgICovXG4gIENBQ0hJTkdfT1BUSU1JWkVEID0gXCJNYW5hZ2VkLUNhY2hpbmdPcHRpbWl6ZWRcIixcbiAgLyoqXG4gICAqIE9wdGltaXplIGNhY2hlIGVmZmljaWVuY3kgYnkgbWluaW1pemluZyB0aGUgdmFsdWVzIHRoYXQgQ2xvdWRGcm9udCBpbmNsdWRlcyBpbiB0aGUgY2FjaGUga2V5LlxuICAgKiBRdWVyeSBzdHJpbmdzIGFuZCBjb29raWVzIGFyZSBub3QgaW5jbHVkZWQgaW4gdGhlIGNhY2hlIGtleSwgYW5kIG9ubHkgdGhlIG5vcm1hbGl6ZWQgJ0FjY2VwdC1FbmNvZGluZycgaGVhZGVyIGlzIGluY2x1ZGVkLlxuICAgKiBEaXNhYmxlcyBjYWNoZSBjb21wcmVzc2lvbi5cbiAgICovXG4gIENBQ0hJTkdfT1BUSU1JWkVEX0ZPUl9VTkNPTVBSRVNTRURfT0JKRUNUUyA9IFwiTWFuYWdlZC1DYWNoaW5nT3B0aW1pemVkRm9yVW5jb21wcmVzc2VkT2JqZWN0c1wiLFxuICAvKiogRGlzYWJsZXMgY2FjaGluZy4gVGhpcyBwb2xpY3kgaXMgdXNlZnVsIGZvciBkeW5hbWljIGNvbnRlbnQgYW5kIGZvciByZXF1ZXN0cyB0aGF0IGFyZSBub3QgY2FjaGVhYmxlLiAqL1xuICBDQUNISU5HX0RJU0FCTEVEID0gXCJNYW5hZ2VkLUNhY2hpbmdEaXNhYmxlZFwiLFxuICAvKiogRGVzaWduZWQgZm9yIHVzZSB3aXRoIGFuIG9yaWdpbiB0aGF0IGlzIGFuIEFXUyBFbGVtZW50YWwgTWVkaWFQYWNrYWdlIGVuZHBvaW50LiAqL1xuICBFTEVNRU5UQUxfTUVESUFfUEFDS0FHRSA9IFwiTWFuYWdlZC1FbGVtZW50YWwtTWVkaWFQYWNrYWdlXCIsXG4gIC8qKlxuICAgKiBEZXNpZ25lZCBmb3IgdXNlIHdpdGggYW4gb3JpZ2luIHRoYXQgcmV0dXJucyBDYWNoZS1Db250cm9sIEhUVFAgcmVzcG9uc2UgaGVhZGVycyBhbmQgZG9lcyBub3Qgc2VydmUgZGlmZmVyZW50IGNvbnRlbnQgYmFzZWQgb24gdmFsdWVzIHByZXNlbnQgaW4gdGhlIHF1ZXJ5IHN0cmluZy5cbiAgICovXG4gIFVTRV9PUklHSU5fQ0FDSEVfQ09OVFJPTF9IRUFERVJTID0gXCJNYW5hZ2VkLVVzZU9yaWdpbkNhY2hlQ29udHJvbEhlYWRlcnNcIixcbiAgLyoqXG4gICAqIERlc2lnbmVkIGZvciB1c2Ugd2l0aCBhbiBvcmlnaW4gdGhhdCByZXR1cm5zIENhY2hlLUNvbnRyb2wgSFRUUCByZXNwb25zZSBoZWFkZXJzIGFuZCBzZXJ2ZXMgZGlmZmVyZW50IGNvbnRlbnQgYmFzZWQgb24gdmFsdWVzIHByZXNlbnQgaW4gdGhlIHF1ZXJ5IHN0cmluZy5cbiAgICovXG4gIFVTRV9PUklHSU5fQ0FDSEVfQ09OVFJPTF9IRUFERVJTX1FVRVJZX1NUUklOR1MgPSBcIk1hbmFnZWQtVXNlT3JpZ2luQ2FjaGVDb250cm9sSGVhZGVycy1RdWVyeVN0cmluZ3NcIixcbn1cblxuLyoqXG4gKiBPcmlnaW4gUmVxdWVzdCBQb2xpY3kgY29uZmlndXJhdGlvbi5cbiAqXG4gKiBAbGluayBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvdXNpbmctbWFuYWdlZC1vcmlnaW4tcmVxdWVzdC1wb2xpY2llcy5odG1sXG4gKiBAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvaGFzaGljb3JwL2F3cy81LjYwLjAvZG9jcy9kYXRhLXNvdXJjZXMvY2xvdWRmcm9udF9vcmlnaW5fcmVxdWVzdF9wb2xpY3kjYXdzLW1hbmFnZWQtcG9saWNpZXNcbiAqL1xuZXhwb3J0IGVudW0gTWFuYWdlZE9yaWdpblJlcXVlc3RQb2xpY3kge1xuICAvKiogVGhpcyBwb2xpY3kgaW5jbHVkZXMgb25seSB0aGUgVXNlci1BZ2VudCBhbmQgUmVmZXJlciBoZWFkZXJzLiBJdCBkb2VzbuKAmXQgaW5jbHVkZSBhbnkgcXVlcnkgc3RyaW5ncyBvciBjb29raWVzLiAqL1xuICBVU0VSX0FHRU5UX1JFRkVSRVJfSEVBREVSUyA9IFwiTWFuYWdlZC1Vc2VyQWdlbnRSZWZlcmVySGVhZGVyc1wiLFxuICAvKiogVGhpcyBwb2xpY3kgaW5jbHVkZXMgdGhlIGhlYWRlciB0aGF0IGVuYWJsZXMgY3Jvc3Mtb3JpZ2luIHJlc291cmNlIHNoYXJpbmcgKENPUlMpIHJlcXVlc3RzIHdoZW4gdGhlIG9yaWdpbiBpcyBhIGN1c3RvbSBvcmlnaW4uICovXG4gIENPUlNfQ1VTVE9NX09SSUdJTiA9IFwiTWFuYWdlZC1DT1JTLUN1c3RvbU9yaWdpblwiLFxuICAvKiogVGhpcyBwb2xpY3kgaW5jbHVkZXMgdGhlIGhlYWRlcnMgdGhhdCBlbmFibGUgY3Jvc3Mtb3JpZ2luIHJlc291cmNlIHNoYXJpbmcgKENPUlMpIHJlcXVlc3RzIHdoZW4gdGhlIG9yaWdpbiBpcyBhbiBBbWF6b24gUzMgYnVja2V0LiAqL1xuICBDT1JTX1MzX09SSUdJTiA9IFwiTWFuYWdlZC1DT1JTLVMzT3JpZ2luXCIsXG4gIC8qKiBUaGlzIHBvbGljeSBpbmNsdWRlcyBhbGwgdmFsdWVzIChxdWVyeSBzdHJpbmdzLCBoZWFkZXJzLCBhbmQgY29va2llcykgaW4gdGhlIHZpZXdlciByZXF1ZXN0LiAqL1xuICBBTExfVklFV0VSID0gXCJNYW5hZ2VkLUFsbFZpZXdlclwiLFxuICAvKiogVGhpcyBwb2xpY3kgaXMgZGVzaWduZWQgZm9yIHVzZSB3aXRoIGFuIG9yaWdpbiB0aGF0IGlzIGFuIEFXUyBFbGVtZW50YWwgTWVkaWFUYWlsb3IgZW5kcG9pbnQuICovXG4gIEVMRU1FTlRBTF9NRURJQV9UQUlMT1IgPSBcIk1hbmFnZWQtRWxlbWVudGFsLU1lZGlhVGFpbG9yLVBlcnNvbmFsaXplZE1hbmlmZXN0c1wiLFxuICAvKiogVGhpcyBwb2xpY3kgaW5jbHVkZXMgYWxsIHZhbHVlcyAoaGVhZGVycywgY29va2llcywgYW5kIHF1ZXJ5IHN0cmluZ3MpIGluIHRoZSB2aWV3ZXIgcmVxdWVzdCwgYW5kIGFsbCBDbG91ZEZyb250IGhlYWRlcnMgdGhhdCB3ZXJlIHJlbGVhc2VkIHRocm91Z2ggSnVuZSAyMDIyIChDbG91ZEZyb250IGhlYWRlcnMgcmVsZWFzZWQgYWZ0ZXIgSnVuZSAyMDIyIGFyZSBub3QgaW5jbHVkZWQpLiAqL1xuICBBTExfVklFV0VSX0FORF9DTE9VREZST05UXzIwMjIgPSBcIk1hbmFnZWQtQWxsVmlld2VyQW5kQ2xvdWRGcm9udEhlYWRlcnMtMjAyMi0wNlwiLFxuICAvKiogVGhpcyBwb2xpY3kgaW5jbHVkZXMgYWxsIHZhbHVlcyAocXVlcnkgc3RyaW5ncywgYW5kIGNvb2tpZXMpIGV4Y2VwdCB0aGUgaGVhZGVyIGluIHRoZSB2aWV3ZXIgcmVxdWVzdC4gKi9cbiAgQUxMX1ZJRVdFUl9FWENFUFRfSE9TVF9IRUFERVIgPSBcIk1hbmFnZWQtQWxsVmlld2VyRXhjZXB0SG9zdEhlYWRlclwiLFxufVxuIl19
@@ -20,7 +20,7 @@ class DistributionTarget {
20
20
  }
21
21
  exports.DistributionTarget = DistributionTarget;
22
22
  _a = JSII_RTTI_SYMBOL_1;
23
- DistributionTarget[_a] = { fqn: "terraconstructs.aws.edge.DistributionTarget", version: "0.0.9" };
23
+ DistributionTarget[_a] = { fqn: "terraconstructs.aws.edge.DistributionTarget", version: "0.0.10" };
24
24
  /**
25
25
  * Use Bucket as an alias record target
26
26
  */
@@ -42,5 +42,5 @@ class BucketWebsiteTarget {
42
42
  }
43
43
  exports.BucketWebsiteTarget = BucketWebsiteTarget;
44
44
  _b = JSII_RTTI_SYMBOL_1;
45
- BucketWebsiteTarget[_b] = { fqn: "terraconstructs.aws.edge.BucketWebsiteTarget", version: "0.0.9" };
45
+ BucketWebsiteTarget[_b] = { fqn: "terraconstructs.aws.edge.BucketWebsiteTarget", version: "0.0.10" };
46
46
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG5zLWFsaWFzLXJlY29yZC10YXJnZXRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2F3cy9lZGdlL2Rucy1hbGlhcy1yZWNvcmQtdGFyZ2V0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQWVBOztHQUVHO0FBQ0gsTUFBYSxrQkFBa0I7SUFDN0IsWUFBNkIsWUFBMkI7UUFBM0IsaUJBQVksR0FBWixZQUFZLENBQWU7SUFBRyxDQUFDO0lBRXJELElBQUksQ0FDVCxPQUFtQixFQUNuQixLQUFnQjtRQUVoQixPQUFPO1lBQ0wsTUFBTSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWTtZQUN0QyxJQUFJLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVO1lBQ2xDLG9CQUFvQixFQUFFLEtBQUs7U0FDNUIsQ0FBQztJQUNKLENBQUM7O0FBWkgsZ0RBYUM7OztBQUVEOztHQUVHO0FBQ0gsTUFBYSxtQkFBbUI7SUFDOUIsWUFBNkIsTUFBZTtRQUFmLFdBQU0sR0FBTixNQUFNLENBQVM7SUFBRyxDQUFDO0lBRXpDLElBQUksQ0FDVCxPQUFtQixFQUNuQixLQUFnQjtRQUVoQixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDO1lBQzdCLE1BQU0sSUFBSSxLQUFLLENBQ2IsMkRBQTJELENBQzVELENBQUM7UUFDSixDQUFDO1FBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsaUJBQWlCLENBQUM7UUFFNUMsT0FBTztZQUNMLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVk7WUFDaEMsSUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsaUJBQWlCO1lBQ25DLG9CQUFvQixFQUFFLElBQUk7U0FDM0IsQ0FBQztJQUNKLENBQUM7O0FBbkJILGtEQW9CQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJvdXRlNTNSZWNvcmQgfSBmcm9tIFwiQGNka3RmL3Byb3ZpZGVyLWF3c1wiO1xuaW1wb3J0IHsgSVJlY29yZFNldCwgSURuc1pvbmUsIElEaXN0cmlidXRpb24gfSBmcm9tIFwiLlwiO1xuaW1wb3J0IHsgSUJ1Y2tldCB9IGZyb20gXCIuLi9zdG9yYWdlXCI7XG5cbi8qKlxuICogQ2xhc3NlcyB0aGF0IGFyZSB2YWxpZCBhbGlhcyByZWNvcmQgdGFyZ2V0cywgbGlrZSBDbG91ZEZyb250IGRpc3RyaWJ1dGlvbnMgYW5kIGxvYWRcbiAqIGJhbGFuY2Vycywgc2hvdWxkIGltcGxlbWVudCB0aGlzIGludGVyZmFjZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJQWxpYXNSZWNvcmRUYXJnZXQge1xuICAvKipcbiAgICogUmV0dXJuIGhvc3RlZCB6b25lIElEIGFuZCBETlMgbmFtZSwgdXNhYmxlIGZvciBSb3V0ZTUzIGFsaWFzIHRhcmdldHNcbiAgICovXG4gIGJpbmQocmVjb3JkOiBJUmVjb3JkU2V0LCB6b25lPzogSURuc1pvbmUpOiByb3V0ZTUzUmVjb3JkLlJvdXRlNTNSZWNvcmRBbGlhcztcbn1cblxuLyoqXG4gKiBVc2UgYSBDbG91ZEZyb250IERpc3RyaWJ1dGlvbiBhcyBhbiBhbGlhcyByZWNvcmQgdGFyZ2V0XG4gKi9cbmV4cG9ydCBjbGFzcyBEaXN0cmlidXRpb25UYXJnZXQgaW1wbGVtZW50cyBJQWxpYXNSZWNvcmRUYXJnZXQge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGRpc3RyaWJ1dGlvbjogSURpc3RyaWJ1dGlvbikge31cblxuICBwdWJsaWMgYmluZChcbiAgICBfcmVjb3JkOiBJUmVjb3JkU2V0LFxuICAgIF96b25lPzogSURuc1pvbmUsXG4gICk6IHJvdXRlNTNSZWNvcmQuUm91dGU1M1JlY29yZEFsaWFzIHtcbiAgICByZXR1cm4ge1xuICAgICAgem9uZUlkOiB0aGlzLmRpc3RyaWJ1dGlvbi5ob3N0ZWRab25lSWQsXG4gICAgICBuYW1lOiB0aGlzLmRpc3RyaWJ1dGlvbi5kb21haW5OYW1lLFxuICAgICAgZXZhbHVhdGVUYXJnZXRIZWFsdGg6IGZhbHNlLFxuICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBVc2UgQnVja2V0IGFzIGFuIGFsaWFzIHJlY29yZCB0YXJnZXRcbiAqL1xuZXhwb3J0IGNsYXNzIEJ1Y2tldFdlYnNpdGVUYXJnZXQgaW1wbGVtZW50cyBJQWxpYXNSZWNvcmRUYXJnZXQge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGJ1Y2tldDogSUJ1Y2tldCkge31cblxuICBwdWJsaWMgYmluZChcbiAgICBfcmVjb3JkOiBJUmVjb3JkU2V0LFxuICAgIF96b25lPzogSURuc1pvbmUsXG4gICk6IHJvdXRlNTNSZWNvcmQuUm91dGU1M1JlY29yZEFsaWFzIHtcbiAgICBpZiAoIXRoaXMuYnVja2V0LmlzV2Vic2l0ZSgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiQ2Fubm90IHVzZSBhIG5vbi13ZWJzaXRlIGJ1Y2tldCBhcyBhbiBhbGlhcyByZWNvcmQgdGFyZ2V0XCIsXG4gICAgICApO1xuICAgIH1cbiAgICB0aGlzLmJ1Y2tldC5idWNrZXRPdXRwdXRzLndlYnNpdGVEb21haW5OYW1lO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHpvbmVJZDogdGhpcy5idWNrZXQuaG9zdGVkWm9uZUlkLFxuICAgICAgbmFtZTogdGhpcy5idWNrZXQud2Vic2l0ZURvbWFpbk5hbWUsXG4gICAgICBldmFsdWF0ZVRhcmdldEhlYWx0aDogdHJ1ZSxcbiAgICB9O1xuICB9XG59XG4iXX0=
@@ -133,7 +133,7 @@ class RecordSet extends __1.AwsConstructBase {
133
133
  }
134
134
  exports.RecordSet = RecordSet;
135
135
  _a = JSII_RTTI_SYMBOL_1;
136
- RecordSet[_a] = { fqn: "terraconstructs.aws.edge.RecordSet", version: "0.0.9" };
136
+ RecordSet[_a] = { fqn: "terraconstructs.aws.edge.RecordSet", version: "0.0.10" };
137
137
  /**
138
138
  * The record type.
139
139
  */
@@ -258,7 +258,7 @@ class RecordTarget {
258
258
  }
259
259
  exports.RecordTarget = RecordTarget;
260
260
  _b = JSII_RTTI_SYMBOL_1;
261
- RecordTarget[_b] = { fqn: "terraconstructs.aws.edge.RecordTarget", version: "0.0.9" };
261
+ RecordTarget[_b] = { fqn: "terraconstructs.aws.edge.RecordTarget", version: "0.0.10" };
262
262
  /**
263
263
  * A DNS A record
264
264
  *
@@ -275,7 +275,7 @@ class ARecord extends RecordSet {
275
275
  }
276
276
  exports.ARecord = ARecord;
277
277
  _c = JSII_RTTI_SYMBOL_1;
278
- ARecord[_c] = { fqn: "terraconstructs.aws.edge.ARecord", version: "0.0.9" };
278
+ ARecord[_c] = { fqn: "terraconstructs.aws.edge.ARecord", version: "0.0.10" };
279
279
  /**
280
280
  * A DNS AAAA record
281
281
  *
@@ -292,7 +292,7 @@ class AaaaRecord extends RecordSet {
292
292
  }
293
293
  exports.AaaaRecord = AaaaRecord;
294
294
  _d = JSII_RTTI_SYMBOL_1;
295
- AaaaRecord[_d] = { fqn: "terraconstructs.aws.edge.AaaaRecord", version: "0.0.9" };
295
+ AaaaRecord[_d] = { fqn: "terraconstructs.aws.edge.AaaaRecord", version: "0.0.10" };
296
296
  /**
297
297
  * A DNS CNAME record
298
298
  *
@@ -309,7 +309,7 @@ class CnameRecord extends RecordSet {
309
309
  }
310
310
  exports.CnameRecord = CnameRecord;
311
311
  _e = JSII_RTTI_SYMBOL_1;
312
- CnameRecord[_e] = { fqn: "terraconstructs.aws.edge.CnameRecord", version: "0.0.9" };
312
+ CnameRecord[_e] = { fqn: "terraconstructs.aws.edge.CnameRecord", version: "0.0.10" };
313
313
  /**
314
314
  * A DNS TXT record
315
315
  *
@@ -326,7 +326,7 @@ class TxtRecord extends RecordSet {
326
326
  }
327
327
  exports.TxtRecord = TxtRecord;
328
328
  _f = JSII_RTTI_SYMBOL_1;
329
- TxtRecord[_f] = { fqn: "terraconstructs.aws.edge.TxtRecord", version: "0.0.9" };
329
+ TxtRecord[_f] = { fqn: "terraconstructs.aws.edge.TxtRecord", version: "0.0.10" };
330
330
  /**
331
331
  * Formats a text value for use in a TXT record
332
332
  *
@@ -362,7 +362,7 @@ class SrvRecord extends RecordSet {
362
362
  }
363
363
  exports.SrvRecord = SrvRecord;
364
364
  _g = JSII_RTTI_SYMBOL_1;
365
- SrvRecord[_g] = { fqn: "terraconstructs.aws.edge.SrvRecord", version: "0.0.9" };
365
+ SrvRecord[_g] = { fqn: "terraconstructs.aws.edge.SrvRecord", version: "0.0.10" };
366
366
  /**
367
367
  * The CAA tag.
368
368
  */
@@ -400,7 +400,7 @@ class CaaRecord extends RecordSet {
400
400
  }
401
401
  exports.CaaRecord = CaaRecord;
402
402
  _h = JSII_RTTI_SYMBOL_1;
403
- CaaRecord[_h] = { fqn: "terraconstructs.aws.edge.CaaRecord", version: "0.0.9" };
403
+ CaaRecord[_h] = { fqn: "terraconstructs.aws.edge.CaaRecord", version: "0.0.10" };
404
404
  /**
405
405
  * A DNS Amazon CAA record.
406
406
  *
@@ -425,7 +425,7 @@ class CaaAmazonRecord extends CaaRecord {
425
425
  }
426
426
  exports.CaaAmazonRecord = CaaAmazonRecord;
427
427
  _j = JSII_RTTI_SYMBOL_1;
428
- CaaAmazonRecord[_j] = { fqn: "terraconstructs.aws.edge.CaaAmazonRecord", version: "0.0.9" };
428
+ CaaAmazonRecord[_j] = { fqn: "terraconstructs.aws.edge.CaaAmazonRecord", version: "0.0.10" };
429
429
  /**
430
430
  * A DNS MX record
431
431
  *
@@ -442,7 +442,7 @@ class MxRecord extends RecordSet {
442
442
  }
443
443
  exports.MxRecord = MxRecord;
444
444
  _k = JSII_RTTI_SYMBOL_1;
445
- MxRecord[_k] = { fqn: "terraconstructs.aws.edge.MxRecord", version: "0.0.9" };
445
+ MxRecord[_k] = { fqn: "terraconstructs.aws.edge.MxRecord", version: "0.0.10" };
446
446
  /**
447
447
  * A DNS NS record
448
448
  *
@@ -459,7 +459,7 @@ class NsRecord extends RecordSet {
459
459
  }
460
460
  exports.NsRecord = NsRecord;
461
461
  _l = JSII_RTTI_SYMBOL_1;
462
- NsRecord[_l] = { fqn: "terraconstructs.aws.edge.NsRecord", version: "0.0.9" };
462
+ NsRecord[_l] = { fqn: "terraconstructs.aws.edge.NsRecord", version: "0.0.10" };
463
463
  /**
464
464
  * A DNS DS record
465
465
  *
@@ -476,7 +476,7 @@ class DsRecord extends RecordSet {
476
476
  }
477
477
  exports.DsRecord = DsRecord;
478
478
  _m = JSII_RTTI_SYMBOL_1;
479
- DsRecord[_m] = { fqn: "terraconstructs.aws.edge.DsRecord", version: "0.0.9" };
479
+ DsRecord[_m] = { fqn: "terraconstructs.aws.edge.DsRecord", version: "0.0.10" };
480
480
  /**
481
481
  * A record to delegate further lookups to a different set of name servers.
482
482
  */
@@ -494,7 +494,7 @@ class ZoneDelegationRecord extends RecordSet {
494
494
  }
495
495
  exports.ZoneDelegationRecord = ZoneDelegationRecord;
496
496
  _o = JSII_RTTI_SYMBOL_1;
497
- ZoneDelegationRecord[_o] = { fqn: "terraconstructs.aws.edge.ZoneDelegationRecord", version: "0.0.9" };
497
+ ZoneDelegationRecord[_o] = { fqn: "terraconstructs.aws.edge.ZoneDelegationRecord", version: "0.0.10" };
498
498
  // ref https://github.com/aws/aws-cdk/blob/v2.156.0/packages/aws-cdk-lib/aws-route53/lib/util.ts
499
499
  /**
500
500
  * Route53 requires the record names are specified as fully qualified names, but this
@@ -115,7 +115,7 @@ class DnsZone extends __1.AwsConstructBase {
115
115
  }
116
116
  exports.DnsZone = DnsZone;
117
117
  _a = JSII_RTTI_SYMBOL_1;
118
- DnsZone[_a] = { fqn: "terraconstructs.aws.edge.DnsZone", version: "0.0.9" };
118
+ DnsZone[_a] = { fqn: "terraconstructs.aws.edge.DnsZone", version: "0.0.10" };
119
119
  function makeHostedZoneArn(construct, hostedZoneId) {
120
120
  return __1.AwsStack.ofAwsConstruct(construct).formatArn({
121
121
  account: "",
@@ -30,7 +30,7 @@ class FunctionCode {
30
30
  }
31
31
  exports.FunctionCode = FunctionCode;
32
32
  _a = JSII_RTTI_SYMBOL_1;
33
- FunctionCode[_a] = { fqn: "terraconstructs.aws.edge.FunctionCode", version: "0.0.9" };
33
+ FunctionCode[_a] = { fqn: "terraconstructs.aws.edge.FunctionCode", version: "0.0.10" };
34
34
  /**
35
35
  * Represents the function's source code as inline code
36
36
  */
@@ -108,7 +108,7 @@ class Function extends aws_construct_1.AwsConstructBase {
108
108
  }
109
109
  exports.Function = Function;
110
110
  _b = JSII_RTTI_SYMBOL_1;
111
- Function[_b] = { fqn: "terraconstructs.aws.edge.Function", version: "0.0.9" };
111
+ Function[_b] = { fqn: "terraconstructs.aws.edge.Function", version: "0.0.10" };
112
112
  /**
113
113
  * The type of events that a CloudFront function can be invoked in response to.
114
114
  */
@@ -6,3 +6,4 @@ export * from "./dns-zone";
6
6
  export * from "./function";
7
7
  export * from "./key-value-store";
8
8
  export * from "./origin";
9
+ export * from "./response-headers-policy";
@@ -22,4 +22,5 @@ __exportStar(require("./dns-zone"), exports);
22
22
  __exportStar(require("./function"), exports);
23
23
  __exportStar(require("./key-value-store"), exports);
24
24
  __exportStar(require("./origin"), exports);
25
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXdzL2VkZ2UvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGdEQUE4QjtBQUM5QixpREFBK0I7QUFDL0IsNkRBQTJDO0FBQzNDLCtDQUE2QjtBQUM3Qiw2Q0FBMkI7QUFDM0IsNkNBQTJCO0FBQzNCLG9EQUFrQztBQUNsQywyQ0FBeUIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tIFwiLi9jZXJ0aWZpY2F0ZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vZGlzdHJpYnV0aW9uXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9kbnMtYWxpYXMtcmVjb3JkLXRhcmdldHNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2Rucy1yZWNvcmRcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2Rucy16b25lXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9mdW5jdGlvblwiO1xuZXhwb3J0ICogZnJvbSBcIi4va2V5LXZhbHVlLXN0b3JlXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9vcmlnaW5cIjtcbiJdfQ==
25
+ __exportStar(require("./response-headers-policy"), exports);
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXdzL2VkZ2UvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGdEQUE4QjtBQUM5QixpREFBK0I7QUFDL0IsNkRBQTJDO0FBQzNDLCtDQUE2QjtBQUM3Qiw2Q0FBMkI7QUFDM0IsNkNBQTJCO0FBQzNCLG9EQUFrQztBQUNsQywyQ0FBeUI7QUFDekIsNERBQTBDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSBcIi4vY2VydGlmaWNhdGVcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2Rpc3RyaWJ1dGlvblwiO1xuZXhwb3J0ICogZnJvbSBcIi4vZG5zLWFsaWFzLXJlY29yZC10YXJnZXRzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9kbnMtcmVjb3JkXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9kbnMtem9uZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vZnVuY3Rpb25cIjtcbmV4cG9ydCAqIGZyb20gXCIuL2tleS12YWx1ZS1zdG9yZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vb3JpZ2luXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9yZXNwb25zZS1oZWFkZXJzLXBvbGljeVwiO1xuIl19
@@ -57,7 +57,7 @@ class KeyValuePairs {
57
57
  }
58
58
  exports.KeyValuePairs = KeyValuePairs;
59
59
  _a = JSII_RTTI_SYMBOL_1;
60
- KeyValuePairs[_a] = { fqn: "terraconstructs.aws.edge.KeyValuePairs", version: "0.0.9" };
60
+ KeyValuePairs[_a] = { fqn: "terraconstructs.aws.edge.KeyValuePairs", version: "0.0.10" };
61
61
  /**
62
62
  * inline Key Value pairs.
63
63
  */
@@ -72,7 +72,7 @@ class InlineKeyValuePairs extends KeyValuePairs {
72
72
  }
73
73
  exports.InlineKeyValuePairs = InlineKeyValuePairs;
74
74
  _b = JSII_RTTI_SYMBOL_1;
75
- InlineKeyValuePairs[_b] = { fqn: "terraconstructs.aws.edge.InlineKeyValuePairs", version: "0.0.9" };
75
+ InlineKeyValuePairs[_b] = { fqn: "terraconstructs.aws.edge.InlineKeyValuePairs", version: "0.0.10" };
76
76
  /**
77
77
  * Key Value pairs stored in a local file.
78
78
  */
@@ -105,7 +105,7 @@ class FileKeyValuePairs extends KeyValuePairs {
105
105
  }
106
106
  exports.FileKeyValuePairs = FileKeyValuePairs;
107
107
  _c = JSII_RTTI_SYMBOL_1;
108
- FileKeyValuePairs[_c] = { fqn: "terraconstructs.aws.edge.FileKeyValuePairs", version: "0.0.9" };
108
+ FileKeyValuePairs[_c] = { fqn: "terraconstructs.aws.edge.FileKeyValuePairs", version: "0.0.10" };
109
109
  /**
110
110
  * A CloudFront Key Value Store.
111
111
  *
@@ -159,5 +159,5 @@ class KeyValueStore extends aws_construct_1.AwsConstructBase {
159
159
  }
160
160
  exports.KeyValueStore = KeyValueStore;
161
161
  _d = JSII_RTTI_SYMBOL_1;
162
- KeyValueStore[_d] = { fqn: "terraconstructs.aws.edge.KeyValueStore", version: "0.0.9" };
162
+ KeyValueStore[_d] = { fqn: "terraconstructs.aws.edge.KeyValueStore", version: "0.0.10" };
163
163
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5LXZhbHVlLXN0b3JlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2F3cy9lZGdlL2tleS12YWx1ZS1zdG9yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLHlCQUF5QjtBQUN6QixzREFHNkI7QUFFN0Isb0RBSTBCO0FBWTFCOzs7OztHQUtHO0FBQ0gsTUFBc0IsYUFBYTtJQUFuQztRQTJCRSxxRUFBcUU7UUFDM0QsU0FBSSxHQUF3QixFQUFFLENBQUM7S0FpQjFDO0lBNUNDOzs7Ozs7Ozs7Ozs7T0FZRztJQUNJLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBZ0I7UUFDckMsT0FBTyxJQUFJLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUF5QjtRQUNoRCxPQUFPLElBQUksbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUlEOztPQUVHO0lBQ0ksTUFBTSxDQUNYLGdCQUF3QjtRQUV4QixPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxFQUFFLEVBQUU7WUFDdkQsTUFBTSxLQUFLLEdBQ1QsT0FBTyxRQUFRLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDckUsT0FBTztnQkFDTCxHQUFHLEVBQUUsbURBQW1EO2dCQUN4RCxLQUFLLEVBQUUsc0RBQXNEO2dCQUM3RCxnQkFBZ0I7YUFDakIsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7QUE1Q0gsc0NBNkNDOzs7QUFFRDs7R0FFRztBQUNILE1BQWEsbUJBQW9CLFNBQVEsYUFBYTtJQUNwRDs7T0FFRztJQUNI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QUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztnQkFDckMsSUFBSSx5Q0FBMEIsQ0FBQywwQkFBMEIsQ0FDdkQsSUFBSSxFQUNKLE9BQU8sQ0FBQyxFQUFFLEVBQ1YsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUNSLENBQUM7WUFDSixDQUFDO1FBQ0gsQ0FBQztRQUVELElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUM7UUFDN0IsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztRQUMzQixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxRQUFRLEdBQUc7WUFDZCxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUc7WUFDYixFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUU7U0FDWixDQUFDO0lBQ0osQ0FBQzs7QUExREgsc0NBMkRDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgZnMgZnJvbSBcImZzXCI7XG5pbXBvcnQge1xuICBjbG91ZGZyb250S2V5VmFsdWVTdG9yZSxcbiAgY2xvdWRmcm9udGtleXZhbHVlc3RvcmVLZXksXG59IGZyb20gXCJAY2RrdGYvcHJvdmlkZXItYXdzXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHtcbiAgQXdzQ29uc3RydWN0QmFzZSxcbiAgSUF3c0NvbnN0cnVjdCxcbiAgQXdzQ29uc3RydWN0UHJvcHMsXG59IGZyb20gXCIuLi9hd3MtY29uc3RydWN0XCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVN0b3JlRGF0YSB7XG4gIC8qKlxuICAgKiBUaGUgbWV0aG9kIGNhbGxlZCB3aGVuIGdpdmVuIFN0b3JlRGF0YSBpcyBhZGRlZFxuICAgKiAoZm9yIHRoZSBmaXJzdCB0aW1lKSB0byBhIEtleVZhbHVlU3RvcmUuXG4gICAqL1xuICByZW5kZXIoXG4gICAga2V5VmFsdWVTdG9yZUFybjogc3RyaW5nLFxuICApOiBjbG91ZGZyb250a2V5dmFsdWVzdG9yZUtleS5DbG91ZGZyb250a2V5dmFsdWVzdG9yZUtleUNvbmZpZ1tdO1xufVxuXG4vKipcbiAqIFRoZSBpbml0aWFsIGRhdGEgdG8gc2V0IGZvciB0aGUga2V5IHZhbHVlIHN0b3JlLlxuICpcbiAqIFRoaXMgaXMgd29yayBhcm91bmQgZm9yIGxhY2sgb2Ygc3VwcG9ydCBmb3IgaW1wb3J0X3NvdXJjZVxuICogQGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2hhc2hpY29ycC90ZXJyYWZvcm0tcHJvdmlkZXItYXdzL2lzc3Vlcy8zNjUyNFxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgS2V5VmFsdWVQYWlycyBpbXBsZW1lbnRzIElTdG9yZURhdGEge1xuICAvKipcbiAgICogS2V5IFZhbHVlIHBhaXJzIHN0b3JlZCBpbiBhIGxvY2FsIGZpbGUuXG4gICAqXG4gICAqIFRoZSBrZXktdmFsdWUgcGFpcnMgaGF2ZSB0aGUgZm9sbG93aW5nIGxpbWl0czpcbiAgICpcbiAgICogLSBGaWxlIHNpemUg4oCTIDUgTUJcbiAgICogLSBLZXkgc2l6ZSDigJMgNTEyIGNoYXJhY3RlcnNcbiAgICogLSBWYWx1ZSBzaXplIOKAkyAxMDI0IGNoYXJhY3RlcnNcbiAgICpcbiAgICogQGxpbmsgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL2t2cy13aXRoLWZ1bmN0aW9ucy1jcmVhdGUtczMta3ZwLmh0bWxcbiAgICpcbiAgICogQHBhcmFtIGZpbGVQYXRoIHRoZSBwYXRoIHRvIHRoZSBsb2NhbCBmaWxlXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21QYXRoKGZpbGVQYXRoOiBzdHJpbmcpOiBLZXlWYWx1ZVBhaXJzIHtcbiAgICByZXR1cm4gbmV3IEZpbGVLZXlWYWx1ZVBhaXJzKGZpbGVQYXRoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBLZXkgVmFsdWUgcGFpcnMgaW5saW5lIHdpdGggQ29uc3RydWN0IHByb3BzLlxuICAgKlxuICAgKiBAcGFyYW0gZGF0YSB0aGUgY29udGVudHMgb2YgdGhlIEtleVZhbHVlU3RvcmVcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbUlubGluZShkYXRhOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KTogS2V5VmFsdWVQYWlycyB7XG4gICAgcmV0dXJuIG5ldyBJbmxpbmVLZXlWYWx1ZVBhaXJzKGRhdGEpO1xuICB9XG5cbiAgLy8gVE9ETzogc3VwcG9ydCBUZXJyYWZvcm1SZXNvdXJjZUxpZmVjeWNsZSBvbiB0aGUga2V5IHZhbHVlIGVudHJpZXM/XG4gIHByb3RlY3RlZCBkYXRhOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG4gIC8qKlxuICAgKiBDYWxsZWQgaW50ZXJuYWxseSBieSB0aGUgS2V5VmFsdWVTdG9yZSB0byByZW5kZXIgdGhlIHN0b3JlIGRhdGEuXG4gICAqL1xuICBwdWJsaWMgcmVuZGVyKFxuICAgIGtleVZhbHVlU3RvcmVBcm46IHN0cmluZyxcbiAgKTogY2xvdWRmcm9udGtleXZhbHVlc3RvcmVLZXkuQ2xvdWRmcm9udGtleXZhbHVlc3RvcmVLZXlDb25maWdbXSB7XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMuZGF0YSkubWFwKChba2V5LCB2YWx1ZUFueV0pID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID1cbiAgICAgICAgdHlwZW9mIHZhbHVlQW55ID09PSBcInN0cmluZ1wiID8gdmFsdWVBbnkgOiBKU09OLnN0cmluZ2lmeSh2YWx1ZUFueSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBrZXksIC8vVE9ETzogdmFsaWRhdGUga2V5IHN0cmluZyBsaW1pdCAoNTEyIGNoYXJhY3RlcnMpP1xuICAgICAgICB2YWx1ZSwgLy9UT0RPOiB2YWxpZGF0ZSB2YWx1ZSBzdHJpbmcgbGltaXQgKDEwMjQgY2hhcmFjdGVycyk/XG4gICAgICAgIGtleVZhbHVlU3RvcmVBcm4sXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogaW5saW5lIEtleSBWYWx1ZSBwYWlycy5cbiAqL1xuZXhwb3J0IGNsYXNzIElubGluZUtleVZhbHVlUGFpcnMgZXh0ZW5kcyBLZXlWYWx1ZVBhaXJzIHtcbiAgLyoqXG4gICAqIEBwYXJhbSBkYXRhIHRoZSBjb250ZW50cyBvZiB0aGUgS2V5VmFsdWVTdG9yZVxuICAgKi9cbiAgY29uc3RydWN0b3IoZGF0YTogUmVjb3JkPHN0cmluZywgYW55Pikge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5kYXRhID0gZGF0YTtcbiAgfVxufVxuXG4vKipcbiAqIEtleSBWYWx1ZSBwYWlycyBzdG9yZWQgaW4gYSBsb2NhbCBmaWxlLlxuICovXG5leHBvcnQgY2xhc3MgRmlsZUtleVZhbHVlUGFpcnMgZXh0ZW5kcyBLZXlWYWx1ZVBhaXJzIHtcbiAgLyoqXG4gICAqIEBwYXJhbSBmaWxlUGF0aCB0aGUgcGF0aCB0byB0aGUgbG9jYWwgZmlsZVxuICAgKi9cbiAgY29uc3RydWN0b3IoZmlsZVBhdGg6IHN0cmluZykge1xuICAgIHN1cGVyKCk7XG4gICAgY29uc3Qgc3RhdHMgPSBmcy5zdGF0U3luYyhmaWxlUGF0aCk7XG4gICAgaWYgKHN0YXRzLnNpemUgPiA1ICogMTAyNCAqIDEwMjQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFRoZSBmaWxlIHNpemUgb2YgJHtmaWxlUGF0aH0gc2hvdWxkIG5vdCBleGNlZWQgNU1CLiBSZWNlaXZlZDogJHtzdGF0cy5zaXplfWAsXG4gICAgICApO1xuICAgIH1cbiAgICBjb25zdCBjb250ZW50ID0gZnMucmVhZEZpbGVTeW5jKGZpbGVQYXRoLCBcInV0ZjhcIik7XG4gICAgbGV0IHBhcnNlZERhdGE6IGFueTtcbiAgICB0cnkge1xuICAgICAgcGFyc2VkRGF0YSA9IEpTT04ucGFyc2UoY29udGVudCk7XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIEpTT04gZm9ybWF0OiAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmlzUmVjb3JkT2ZTdHJpbmdBbnkocGFyc2VkRGF0YSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFRoZSAke2ZpbGVQYXRofSBjb250ZW50cyBkb2VzIG5vdCBtYXRjaCB0aGUgcmVxdWlyZWQgdHlwZSBSZWNvcmQ8c3RyaW5nLCBhbnk+YCxcbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMuZGF0YSA9IHBhcnNlZERhdGE7XG4gIH1cbiAgcHJpdmF0ZSBpc1JlY29yZE9mU3RyaW5nQW55KG9iajogYW55KTogb2JqIGlzIFJlY29yZDxzdHJpbmcsIGFueT4ge1xuICAgIHJldHVybiB0eXBlb2Ygb2JqID09PSBcIm9iamVjdFwiICYmIG9iaiAhPT0gbnVsbCAmJiAhQXJyYXkuaXNBcnJheShvYmopO1xuICB9XG59XG5cbi8qKlxuICogVGhlIHByb3BlcnRpZXMgdG8gY3JlYXRlIGEgS2V5IFZhbHVlIFN0b3JlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEtleVZhbHVlU3RvcmVQcm9wcyBleHRlbmRzIEF3c0NvbnN0cnVjdFByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSB1bmlxdWUgbmFtZSBvZiB0aGUgS2V5IFZhbHVlIFN0b3JlLlxuICAgKlxuICAgKiBAZGVmYXVsdCBBIGdlbmVyYXRlZCBuYW1lXG4gICAqL1xuICByZWFkb25seSBuYW1lU3VmZml4OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgY29tbWVudCBmb3IgdGhlIEtleSBWYWx1ZSBTdG9yZVxuICAgKlxuICAgKiBAZGVmYXVsdCBObyBjb21tZW50IHdpbGwgYmUgc3BlY2lmaWVkXG4gICAqL1xuICByZWFkb25seSBjb21tZW50Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgS2V5IFZhbHVlIHN0b3JlIGRhdGEuXG4gICAqXG4gICAqIFRoaXMgd2lsbCBwb3B1bGF0ZSB0aGUgaW5pdGlhbCBpdGVtcyBpbiB0aGUgS2V5IFZhbHVlIFN0b3JlLiBUaGVcbiAgICogc291cmNlIGRhdGEgbXVzdCBiZSBpbiBhIHZhbGlkIEpTT04gZm9ybWF0LlxuICAgKlxuICAgKiBUaGUga2V5LXZhbHVlIHBhaXJzIGhhdmUgdGhlIGZvbGxvd2luZyBsaW1pdHM6XG4gICAqXG4gICAqIC0gRmlsZSBzaXplIOKAkyA1IE1CXG4gICAqIC0gS2V5IHNpemUg4oCTIDUxMiBjaGFyYWN0ZXJzXG4gICAqIC0gVmFsdWUgc2l6ZSDigJMgMTAyNCBjaGFyYWN0ZXJzXG4gICAqXG4gICAqIEBkZWZhdWx0IE5vIGRhdGEgd2lsbCBiZSBpbXBvcnRlZCB0byB0aGUgc3RvcmVcbiAgICovXG4gIHJlYWRvbmx5IGRhdGE/OiBJU3RvcmVEYXRhO1xufVxuXG4vKipcbiAqIENsb3VkRnJvbnQgS2V5IFZhbHVlIFN0b3JlIG91dHB1dHMgZm9yIGEgc3RhY2suXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgS2V5VmFsdWVTdG9yZU91dHB1dHMge1xuICAvKipcbiAgICogVGhlIEFSTiBvZiB0aGUgS2V5IFZhbHVlIFN0b3JlLlxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBhcm46IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIFVuaXF1ZSBJRCBvZiB0aGUgS2V5IFZhbHVlIFN0b3JlLlxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBpZDogc3RyaW5nO1xufVxuXG4vKipcbiAqIEEgQ2xvdWRGcm9udCBLZXkgVmFsdWUgU3RvcmUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUtleVZhbHVlU3RvcmUgZXh0ZW5kcyBJQXdzQ29uc3RydWN0IHtcbiAgLyoqIFN0cm9uZ2x5IHR5cGVkIG91dHB1dHNcbiAgICpcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkga2V5VmFsdWVTdG9yZU91dHB1dHM6IEtleVZhbHVlU3RvcmVPdXRwdXRzO1xuXG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSBLZXkgVmFsdWUgU3RvcmUuXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IGFybjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgVW5pcXVlIElEIG9mIHRoZSBLZXkgVmFsdWUgU3RvcmUuXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IGlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBzdGF0dXMgb2YgdGhlIEtleSBWYWx1ZSBTdG9yZS5cbiAgICpcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgc3RhdHVzOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBDbG91ZEZyb250IEtleSBWYWx1ZSBTdG9yZS5cbiAqXG4gKiBZb3UgY2FuIHN0b3JlIGFueSBvZiB0aGUgZm9sbG93aW5nIGZvcm1hdHM6XG4gKlxuICogLSBTdHJpbmdcbiAqIC0gQnl0ZS1lbmNvZGVkIHN0cmluZ1xuICogLSBKU09OXG4gKlxuICogQGxpbmsgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL2t2cy13aXRoLWZ1bmN0aW9ucy5odG1sXG4gKlxuICogQHJlc291cmNlIGF3c19jbG91ZGZyb250X2tleV92YWx1ZV9zdG9yZVxuICovXG5leHBvcnQgY2xhc3MgS2V5VmFsdWVTdG9yZSBleHRlbmRzIEF3c0NvbnN0cnVjdEJhc2UgaW1wbGVtZW50cyBJS2V5VmFsdWVTdG9yZSB7XG4gIC8vIFRPRE86IEFkZCBzdGF0aWMgZnJvbUxvb2t1cD9cbiAgcHVibGljIHJlYWRvbmx5IHJlc291cmNlOiBjbG91ZGZyb250S2V5VmFsdWVTdG9yZS5DbG91ZGZyb250S2V5VmFsdWVTdG9yZTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9vdXRwdXRzOiBLZXlWYWx1ZVN0b3JlT3V0cHV0cztcbiAgcHVibGljIGdldCBrZXlWYWx1ZVN0b3JlT3V0cHV0cygpOiBLZXlWYWx1ZVN0b3JlT3V0cHV0cyB7XG4gICAgcmV0dXJuIHRoaXMuX291dHB1dHM7XG4gIH1cbiAgcHVibGljIGdldCBvdXRwdXRzKCk6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xuICAgIHJldHVybiB0aGlzLmtleVZhbHVlU3RvcmVPdXRwdXRzO1xuICB9XG4gIHJlYWRvbmx5IGFybjogc3RyaW5nO1xuICByZWFkb25seSBpZDogc3RyaW5nO1xuICByZWFkb25seSBzdGF0dXM6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogS2V5VmFsdWVTdG9yZVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBwcm9wcyk7XG5cbiAgICBjb25zdCB7IG5hbWVTdWZmaXggfSA9IHByb3BzO1xuICAgIC8vIFRPRE86IGNvbnNpZGVyIHVzaW5nIHRoZSBgdGhpcy5zdGFjay5tYWtlVW5pcXVlUmVzb3VyY2VOYW1lYCBmdW5jdGlvbj9cbiAgICBsZXQgbmFtZSA9IHRoaXMuZ3JpZFVVSUQ7XG4gICAgaWYgKG5hbWVTdWZmaXgpIHtcbiAgICAgIG5hbWUgPSBgJHtuYW1lfS0ke25hbWVTdWZmaXh9YDtcbiAgICB9XG4gICAgaWYgKG5hbWUubGVuZ3RoID4gNjQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFRoZSBuYW1lIG9mIHRoZSBLZXkgVmFsdWUgU3RvcmUgbXVzdCBiZSBsZXNzIHRoYW4gNjQgY2hhcmFjdGVycy4gUmVjZWl2ZWQ6ICR7bmFtZX1gLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLnJlc291cmNlID0gbmV3IGNsb3VkZnJvbnRLZXlWYWx1ZVN0b3JlLkNsb3VkZnJvbnRLZXlWYWx1ZVN0b3JlKFxuICAgICAgdGhpcyxcbiAgICAgIFwiUmVzb3VyY2VcIixcbiAgICAgIHtcbiAgICAgICAgbmFtZSxcbiAgICAgICAgY29tbWVudDogcHJvcHM/LmNvbW1lbnQsXG4gICAgICB9LFxuICAgICk7XG5cbiAgICBpZiAocHJvcHMuZGF0YSkge1xuICAgICAgLy8gVE9ETzogc3VwcG9ydCBUZXJyYWZvcm1SZXNvdXJjZUxpZmVjeWNsZSBvbiB0aGUga2V5IHZhbHVlIGVudHJpZXM/XG4gICAgICBjb25zdCBkYXRhID0gcHJvcHMuZGF0YS5yZW5kZXIodGhpcy5yZXNvdXJjZS5hcm4pO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIG5ldyBjbG91ZGZyb250a2V5dmFsdWVzdG9yZUtleS5DbG91ZGZyb250a2V5dmFsdWVzdG9yZUtleShcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIGBLZXktJHtpfWAsXG4gICAgICAgICAgZGF0YVtpXSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmFybiA9IHRoaXMucmVzb3VyY2UuYXJuO1xuICAgIHRoaXMuaWQgPSB0aGlzLnJlc291cmNlLmlkO1xuICAgIHRoaXMuc3RhdHVzID0gdGhpcy5yZXNvdXJjZS5ldGFnO1xuICAgIHRoaXMuX291dHB1dHMgPSB7XG4gICAgICBhcm46IHRoaXMuYXJuLFxuICAgICAgaWQ6IHRoaXMuaWQsXG4gICAgfTtcbiAgfVxufVxuIl19
@@ -98,7 +98,7 @@ class OriginBase {
98
98
  }
99
99
  exports.OriginBase = OriginBase;
100
100
  _a = JSII_RTTI_SYMBOL_1;
101
- OriginBase[_a] = { fqn: "terraconstructs.aws.edge.OriginBase", version: "0.0.9" };
101
+ OriginBase[_a] = { fqn: "terraconstructs.aws.edge.OriginBase", version: "0.0.10" };
102
102
  /**
103
103
  * Throws an error if a value is defined and not an integer or not in a range.
104
104
  */
@@ -183,7 +183,7 @@ class S3Origin {
183
183
  }
184
184
  exports.S3Origin = S3Origin;
185
185
  _b = JSII_RTTI_SYMBOL_1;
186
- S3Origin[_b] = { fqn: "terraconstructs.aws.edge.S3Origin", version: "0.0.9" };
186
+ S3Origin[_b] = { fqn: "terraconstructs.aws.edge.S3Origin", version: "0.0.10" };
187
187
  /**
188
188
  * An Origin specific to a S3 bucket (not configured for website hosting).
189
189
  *
@@ -229,7 +229,7 @@ class HttpOrigin extends OriginBase {
229
229
  }
230
230
  exports.HttpOrigin = HttpOrigin;
231
231
  _c = JSII_RTTI_SYMBOL_1;
232
- HttpOrigin[_c] = { fqn: "terraconstructs.aws.edge.HttpOrigin", version: "0.0.9" };
232
+ HttpOrigin[_c] = { fqn: "terraconstructs.aws.edge.HttpOrigin", version: "0.0.10" };
233
233
  /**
234
234
  * Throws an error if a duration is defined and not an integer number of seconds within a range.
235
235
  */