terraconstructs 0.2.2 → 0.2.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.jsii +899 -409
- package/lib/asset-staging.js +1 -1
- package/lib/aws/arn.js +1 -1
- package/lib/aws/aws-asset-manager.js +1 -1
- package/lib/aws/aws-construct.js +1 -1
- package/lib/aws/aws-stack.d.ts +16 -0
- package/lib/aws/aws-stack.js +14 -2
- package/lib/aws/aws-tags.js +2 -2
- package/lib/aws/cloudwatch/actions/appscaling.js +1 -1
- package/lib/aws/cloudwatch/actions/ec2.js +1 -1
- package/lib/aws/cloudwatch/actions/lambda.js +1 -1
- package/lib/aws/cloudwatch/actions/sns.js +1 -1
- package/lib/aws/cloudwatch/actions/ssm.js +2 -2
- package/lib/aws/cloudwatch/alarm-base.js +1 -1
- package/lib/aws/cloudwatch/alarm-rule.js +1 -1
- package/lib/aws/cloudwatch/alarm-status-widget.js +1 -1
- package/lib/aws/cloudwatch/alarm.js +1 -1
- package/lib/aws/cloudwatch/composite-alarm.js +1 -1
- package/lib/aws/cloudwatch/dashboard.js +1 -1
- package/lib/aws/cloudwatch/data-protection-policy.js +3 -3
- package/lib/aws/cloudwatch/graph.js +8 -8
- package/lib/aws/cloudwatch/layout.js +3 -3
- package/lib/aws/cloudwatch/log-destinations/kinesis.js +1 -1
- package/lib/aws/cloudwatch/log-destinations/lambda.js +1 -1
- package/lib/aws/cloudwatch/log-group.js +1 -1
- package/lib/aws/cloudwatch/log-query.js +1 -1
- package/lib/aws/cloudwatch/log-stream.js +1 -1
- package/lib/aws/cloudwatch/metric-filter.js +1 -1
- package/lib/aws/cloudwatch/metric.js +2 -2
- package/lib/aws/cloudwatch/pattern.js +3 -3
- package/lib/aws/cloudwatch/policy.js +1 -1
- package/lib/aws/cloudwatch/query-definition.js +2 -2
- package/lib/aws/cloudwatch/stats.js +1 -1
- package/lib/aws/cloudwatch/subscription-filter.js +1 -1
- package/lib/aws/cloudwatch/text.js +1 -1
- package/lib/aws/cloudwatch/variable.js +3 -3
- package/lib/aws/cloudwatch/widget.js +1 -1
- package/lib/aws/compute/access-log.js +4 -4
- package/lib/aws/compute/activity.js +1 -1
- package/lib/aws/compute/alb/application-listener-action.js +1 -1
- package/lib/aws/compute/alb/application-listener-certificate.js +1 -1
- package/lib/aws/compute/alb/application-listener-rule.js +1 -1
- package/lib/aws/compute/alb/application-listener.js +1 -1
- package/lib/aws/compute/alb/application-load-balancer.js +1 -1
- package/lib/aws/compute/alb/application-target-group.js +1 -1
- package/lib/aws/compute/alb/conditions.js +1 -1
- package/lib/aws/compute/alb/trust-store-revocation.js +1 -1
- package/lib/aws/compute/alb/trust-store.js +1 -1
- package/lib/aws/compute/api-definition.js +3 -3
- package/lib/aws/compute/api-key.js +2 -2
- package/lib/aws/compute/architecture.js +1 -1
- package/lib/aws/compute/aspects/require-imdsv2-aspect.js +2 -2
- package/lib/aws/compute/authorizer.js +1 -1
- package/lib/aws/compute/authorizers/identity-source.js +1 -1
- package/lib/aws/compute/authorizers/lambda.js +2 -2
- package/lib/aws/compute/base-path-mapping.js +1 -1
- package/lib/aws/compute/base-scalable-attribute.js +1 -1
- package/lib/aws/compute/bastion-host.js +1 -1
- package/lib/aws/compute/chain.js +1 -1
- package/lib/aws/compute/client-vpn-authorization-rule.js +1 -1
- package/lib/aws/compute/client-vpn-endpoint.js +2 -2
- package/lib/aws/compute/client-vpn-route.js +2 -2
- package/lib/aws/compute/code.js +8 -8
- package/lib/aws/compute/condition.js +1 -1
- package/lib/aws/compute/connections.js +1 -1
- package/lib/aws/compute/cors.js +1 -1
- package/lib/aws/compute/deployment.js +1 -1
- package/lib/aws/compute/domain-name.js +1 -1
- package/lib/aws/compute/event-invoke-config.js +1 -1
- package/lib/aws/compute/event-source-filter.js +2 -2
- package/lib/aws/compute/event-source-mapping.js +1 -1
- package/lib/aws/compute/event-sources/s3-onfailure-destination.js +1 -1
- package/lib/aws/compute/event-sources/s3.js +1 -1
- package/lib/aws/compute/event-sources/sqs-dlq.js +1 -1
- package/lib/aws/compute/event-sources/sqs.js +1 -1
- package/lib/aws/compute/fields.js +4 -4
- package/lib/aws/compute/function-alias.js +1 -1
- package/lib/aws/compute/function-base.js +2 -2
- package/lib/aws/compute/function-destinations/event-bridge.js +1 -1
- package/lib/aws/compute/function-destinations/function.js +1 -1
- package/lib/aws/compute/function-destinations/sqs.js +1 -1
- package/lib/aws/compute/function-nodejs/function.js +1 -1
- package/lib/aws/compute/function-url.js +1 -1
- package/lib/aws/compute/function.js +1 -1
- package/lib/aws/compute/gateway-response.js +2 -2
- package/lib/aws/compute/handler.js +1 -1
- package/lib/aws/compute/instance-types.js +1 -1
- package/lib/aws/compute/instance.js +1 -1
- package/lib/aws/compute/integration.js +1 -1
- package/lib/aws/compute/integrations/aws.js +1 -1
- package/lib/aws/compute/integrations/http.js +1 -1
- package/lib/aws/compute/integrations/lambda.js +1 -1
- package/lib/aws/compute/integrations/mock.js +1 -1
- package/lib/aws/compute/integrations/stepfunctions.js +1 -1
- package/lib/aws/compute/ip-addresses.js +2 -2
- package/lib/aws/compute/ipam.js +1 -1
- package/lib/aws/compute/key-pair.js +1 -1
- package/lib/aws/compute/lambda-api.js +1 -1
- package/lib/aws/compute/launch-template.js +2 -2
- package/lib/aws/compute/lb-shared/base-listener.js +1 -1
- package/lib/aws/compute/lb-shared/base-load-balancer.js +2 -2
- package/lib/aws/compute/lb-shared/base-target-group.js +1 -1
- package/lib/aws/compute/lb-shared/listener-certificate.js +1 -1
- package/lib/aws/compute/lb-shared/load-balancer-targets.js +2 -2
- package/lib/aws/compute/lb-targets/alb-target.js +3 -3
- package/lib/aws/compute/lb-targets/instance-target.js +2 -2
- package/lib/aws/compute/lb-targets/ip-target.js +1 -1
- package/lib/aws/compute/lb-targets/lambda-target.js +1 -1
- package/lib/aws/compute/load-balancer.js +3 -3
- package/lib/aws/compute/machine-image/amazon-linux-2022.js +2 -2
- package/lib/aws/compute/machine-image/amazon-linux-2023.js +2 -2
- package/lib/aws/compute/machine-image/amazon-linux2.js +2 -2
- package/lib/aws/compute/machine-image/common.js +1 -1
- package/lib/aws/compute/machine-image/machine-image.js +8 -8
- package/lib/aws/compute/method.js +1 -1
- package/lib/aws/compute/model.js +3 -3
- package/lib/aws/compute/nat.js +5 -5
- package/lib/aws/compute/network-acl-types.js +2 -2
- package/lib/aws/compute/network-acl.js +3 -3
- package/lib/aws/compute/nlb/network-listener-action.js +1 -1
- package/lib/aws/compute/nlb/network-listener.js +1 -1
- package/lib/aws/compute/nlb/network-load-balancer.js +1 -1
- package/lib/aws/compute/nlb/network-target-group.js +1 -1
- package/lib/aws/compute/peer.js +1 -1
- package/lib/aws/compute/placement-group.js +1 -1
- package/lib/aws/compute/port.js +1 -1
- package/lib/aws/compute/prefix-list.js +1 -1
- package/lib/aws/compute/requestvalidator.js +1 -1
- package/lib/aws/compute/resource.js +3 -3
- package/lib/aws/compute/restapi.js +3 -3
- package/lib/aws/compute/route.js +10 -9
- package/lib/aws/compute/runtime.js +1 -1
- package/lib/aws/compute/scalable-target.js +1 -1
- package/lib/aws/compute/schedule.js +1 -1
- package/lib/aws/compute/security-group.js +39 -13
- package/lib/aws/compute/stage.js +2 -2
- package/lib/aws/compute/state-graph.js +1 -1
- package/lib/aws/compute/state-machine-fragment.js +1 -1
- package/lib/aws/compute/state-machine.js +4 -4
- package/lib/aws/compute/states/choice.js +1 -1
- package/lib/aws/compute/states/custom-state.js +1 -1
- package/lib/aws/compute/states/distributed-map/item-batcher.js +1 -1
- package/lib/aws/compute/states/distributed-map/item-reader.js +5 -5
- package/lib/aws/compute/states/distributed-map/result-writer.js +1 -1
- package/lib/aws/compute/states/distributed-map.js +1 -1
- package/lib/aws/compute/states/fail.js +1 -1
- package/lib/aws/compute/states/map-base.js +1 -1
- package/lib/aws/compute/states/map.js +1 -1
- package/lib/aws/compute/states/parallel.js +1 -1
- package/lib/aws/compute/states/pass.js +2 -2
- package/lib/aws/compute/states/state.js +1 -1
- package/lib/aws/compute/states/succeed.js +1 -1
- package/lib/aws/compute/states/task-base.js +2 -2
- package/lib/aws/compute/states/task.js +1 -1
- package/lib/aws/compute/states/wait.js +2 -2
- package/lib/aws/compute/step-scaling-action.js +1 -1
- package/lib/aws/compute/step-scaling-policy.js +1 -1
- package/lib/aws/compute/stepfunctions-api.js +1 -1
- package/lib/aws/compute/subnet-v2.js +2 -2
- package/lib/aws/compute/subnet.js +1 -1
- package/lib/aws/compute/target-tracking-scaling-policy.js +1 -1
- package/lib/aws/compute/task-credentials.js +1 -1
- package/lib/aws/compute/task-input.js +1 -1
- package/lib/aws/compute/tasks/aws-sdk/call-aws-service.js +1 -1
- package/lib/aws/compute/tasks/eventbridge/put-events.js +1 -1
- package/lib/aws/compute/tasks/http/invoke.js +1 -1
- package/lib/aws/compute/tasks/lambda/invoke.js +1 -1
- package/lib/aws/compute/tasks/sqs/send-message.js +1 -1
- package/lib/aws/compute/tasks/stepfunctions/invoke-activity.js +1 -1
- package/lib/aws/compute/tasks/stepfunctions/start-execution.js +1 -1
- package/lib/aws/compute/types.js +1 -1
- package/lib/aws/compute/usage-plan.js +1 -1
- package/lib/aws/compute/user-data.js +3 -3
- package/lib/aws/compute/volume.js +2 -2
- package/lib/aws/compute/vpc-endpoint-service.js +1 -1
- package/lib/aws/compute/vpc-endpoint.js +6 -6
- package/lib/aws/compute/vpc-flow-logs.js +4 -4
- package/lib/aws/compute/vpc-link.js +1 -1
- package/lib/aws/compute/vpc-v2-base.js +1 -1
- package/lib/aws/compute/vpc-v2.js +2 -2
- package/lib/aws/compute/vpc.d.ts +47 -4
- package/lib/aws/compute/vpc.js +304 -148
- package/lib/aws/compute/vpn.js +3 -3
- package/lib/aws/context-provider.d.ts +117 -0
- package/lib/aws/context-provider.js +141 -0
- package/lib/aws/cx-api.d.ts +171 -0
- package/lib/aws/cx-api.js +23 -3
- package/lib/aws/edge/certificate.js +1 -1
- package/lib/aws/edge/distribution.js +3 -3
- package/lib/aws/edge/dns-alias-record-targets.js +6 -6
- package/lib/aws/edge/dns-record.js +13 -13
- package/lib/aws/edge/dns-zone.js +1 -1
- package/lib/aws/edge/function.js +2 -2
- package/lib/aws/edge/key-value-store.js +4 -4
- package/lib/aws/edge/origin.js +3 -3
- package/lib/aws/edge/response-headers-policy.js +1 -1
- package/lib/aws/encryption/alias.js +1 -1
- package/lib/aws/encryption/key.js +1 -1
- package/lib/aws/encryption/via-service-principal.js +1 -1
- package/lib/aws/iam/grant.js +3 -3
- package/lib/aws/iam/group.js +1 -1
- package/lib/aws/iam/instance-profile.js +1 -1
- package/lib/aws/iam/managed-policy.js +1 -1
- package/lib/aws/iam/oidc-provider.js +1 -1
- package/lib/aws/iam/policy-document.js +1 -1
- package/lib/aws/iam/policy-statement.js +1 -1
- package/lib/aws/iam/policy.js +1 -1
- package/lib/aws/iam/principals.js +20 -20
- package/lib/aws/iam/role.js +1 -1
- package/lib/aws/iam/saml-provider.js +2 -2
- package/lib/aws/iam/unknown-principal.js +1 -1
- package/lib/aws/iam/user.js +1 -1
- package/lib/aws/network/simple-ipv4-vpc.js +1 -1
- package/lib/aws/network/subnet-group.js +3 -3
- package/lib/aws/network/subnet.js +4 -4
- package/lib/aws/notify/archive.js +1 -1
- package/lib/aws/notify/connection.js +3 -3
- package/lib/aws/notify/event-bus.js +3 -3
- package/lib/aws/notify/event-pattern.js +1 -1
- package/lib/aws/notify/index.d.ts +1 -0
- package/lib/aws/notify/index.js +3 -1
- package/lib/aws/notify/input.js +2 -2
- package/lib/aws/notify/kinesis-stream.js +1 -1
- package/lib/aws/notify/notification-rule.js +1 -1
- package/lib/aws/notify/policy.js +1 -1
- package/lib/aws/notify/queue-base.js +1 -1
- package/lib/aws/notify/queue-policy.js +1 -1
- package/lib/aws/notify/queue.js +1 -1
- package/lib/aws/notify/resource-policy.js +1 -1
- package/lib/aws/notify/rule.js +1 -1
- package/lib/aws/notify/schedule.js +1 -1
- package/lib/aws/notify/sns-grants.generated.d.ts +39 -0
- package/lib/aws/notify/sns-grants.generated.js +77 -0
- package/lib/aws/notify/sqs-grants.generated.js +1 -1
- package/lib/aws/notify/subscription-filter.js +1 -1
- package/lib/aws/notify/subscription.d.ts +8 -2
- package/lib/aws/notify/subscription.js +6 -7
- package/lib/aws/notify/subscriptions/email.js +1 -1
- package/lib/aws/notify/subscriptions/lambda.js +1 -1
- package/lib/aws/notify/subscriptions/sms.js +1 -1
- package/lib/aws/notify/subscriptions/sqs.js +1 -1
- package/lib/aws/notify/subscriptions/url.js +1 -1
- package/lib/aws/notify/targets/event-bus.js +1 -1
- package/lib/aws/notify/targets/function.js +1 -1
- package/lib/aws/notify/targets/log-group.js +2 -2
- package/lib/aws/notify/targets/sqs.js +1 -1
- package/lib/aws/notify/targets/state-machine.js +1 -1
- package/lib/aws/notify/topic-base.d.ts +6 -0
- package/lib/aws/notify/topic-base.js +16 -19
- package/lib/aws/notify/topic.d.ts +29 -6
- package/lib/aws/notify/topic.js +50 -47
- package/lib/aws/storage/assets/image-asset.js +3 -3
- package/lib/aws/storage/assets/s3.js +1 -1
- package/lib/aws/storage/auth-token.js +2 -2
- package/lib/aws/storage/billing.js +1 -1
- package/lib/aws/storage/bucket-notifications.js +1 -1
- package/lib/aws/storage/bucket-policy.js +1 -1
- package/lib/aws/storage/bucket-source.js +1 -1
- package/lib/aws/storage/bucket.js +2 -2
- package/lib/aws/storage/capacity.js +1 -1
- package/lib/aws/storage/ecr-repository.js +3 -3
- package/lib/aws/storage/encryption.js +1 -1
- package/lib/aws/storage/notification-targets/function.js +1 -1
- package/lib/aws/storage/notification-targets/queue.js +1 -1
- package/lib/aws/storage/origin-access-identity.js +1 -1
- package/lib/aws/storage/parameter.js +2 -2
- package/lib/aws/storage/stream-grants.js +1 -1
- package/lib/aws/storage/table-grants.js +1 -1
- package/lib/aws/storage/table.js +3 -3
- package/lib/bundling.js +3 -3
- package/lib/construct-base.js +2 -2
- package/lib/duration.js +1 -1
- package/lib/errors.js +1 -1
- package/lib/expiration.js +1 -1
- package/lib/fs/ignore.js +4 -4
- package/lib/fs/index.js +1 -1
- package/lib/size.js +1 -1
- package/lib/stack-base.js +1 -1
- package/lib/terra-func.js +1 -1
- package/lib/time-zone.js +1 -1
- package/package.json +3 -1
package/lib/aws/storage/table.js
CHANGED
|
@@ -102,7 +102,7 @@ class InputFormat {
|
|
|
102
102
|
}
|
|
103
103
|
exports.InputFormat = InputFormat;
|
|
104
104
|
_a = JSII_RTTI_SYMBOL_1;
|
|
105
|
-
InputFormat[_a] = { fqn: "terraconstructs.aws.storage.InputFormat", version: "0.2.
|
|
105
|
+
InputFormat[_a] = { fqn: "terraconstructs.aws.storage.InputFormat", version: "0.2.4" };
|
|
106
106
|
/**
|
|
107
107
|
* Valid CSV delimiters.
|
|
108
108
|
*
|
|
@@ -478,7 +478,7 @@ class TableBase extends __1.AwsConstructBase {
|
|
|
478
478
|
}
|
|
479
479
|
exports.TableBase = TableBase;
|
|
480
480
|
_b = JSII_RTTI_SYMBOL_1;
|
|
481
|
-
TableBase[_b] = { fqn: "terraconstructs.aws.storage.TableBase", version: "0.2.
|
|
481
|
+
TableBase[_b] = { fqn: "terraconstructs.aws.storage.TableBase", version: "0.2.4" };
|
|
482
482
|
/**
|
|
483
483
|
* Provides a DynamoDB table.
|
|
484
484
|
*/
|
|
@@ -1201,5 +1201,5 @@ class Table extends TableBase {
|
|
|
1201
1201
|
}
|
|
1202
1202
|
exports.Table = Table;
|
|
1203
1203
|
_c = JSII_RTTI_SYMBOL_1;
|
|
1204
|
-
Table[_c] = { fqn: "terraconstructs.aws.storage.Table", version: "0.2.
|
|
1204
|
+
Table[_c] = { fqn: "terraconstructs.aws.storage.Table", version: "0.2.4" };
|
|
1205
1205
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXdzL3N0b3JhZ2UvdGFibGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw4RkFBOEY7QUFFOUYsc0RBSzZCO0FBQzdCLGlDQUFvQztBQUdwQywwQkFBOEU7QUFDOUUsMkZBQXNFO0FBS3RFLHlFQUFvRTtBQUNwRSxxQ0FpQmtCO0FBQ2xCLG1EQUErQztBQUMvQyxpREFBNkM7QUFDN0MseUNBQXdFO0FBQ3hFLDRDQUE0QztBQUM1Qyx5Q0FBeUM7QUFDekMscUNBQXFDO0FBQ3JDLDhCQUE4QjtBQUc5QixNQUFNLGFBQWEsR0FBRyxNQUFNLENBQUM7QUFDN0IsTUFBTSxjQUFjLEdBQUcsT0FBTyxDQUFDO0FBRS9CLHdHQUF3RztBQUN4RyxNQUFNLCtCQUErQixHQUFHLENBQUMsQ0FBQztBQW1CMUM7O0dBRUc7QUFDSCxJQUFZLG9CQWVYO0FBZkQsV0FBWSxvQkFBb0I7SUFDOUI7O09BRUc7SUFDSCxxQ0FBYSxDQUFBO0lBRWI7O09BRUc7SUFDSCxxQ0FBYSxDQUFBO0lBRWI7O09BRUc7SUFDSCxxQ0FBYSxDQUFBO0FBQ2YsQ0FBQyxFQWZXLG9CQUFvQixvQ0FBcEIsb0JBQW9CLFFBZS9CO0FBZ0NEOztHQUVHO0FBQ0gsTUFBc0IsV0FBVztJQUMvQjs7T0FFRztJQUNJLE1BQU0sQ0FBQyxZQUFZO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLEtBQU0sU0FBUSxXQUFXO1lBQzVCLE9BQU87Z0JBSVosT0FBTztvQkFDTCxXQUFXLEVBQUUsZUFBZTtpQkFDN0IsQ0FBQztZQUNKLENBQUM7U0FDRixDQUFDLEVBQUUsQ0FBQztJQUNQLENBQUM7SUFFRDs7T0FFRztJQUNJLE1BQU0sQ0FBQyxHQUFHO1FBQ2YsT0FBTyxJQUFJLENBQUMsS0FBTSxTQUFRLFdBQVc7WUFDNUIsT0FBTztnQkFJWixPQUFPO29CQUNMLFdBQVcsRUFBRSxLQUFLO2lCQUNuQixDQUFDO1lBQ0os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LHFCQUFxQixFQUNyQjtvQkFDRSxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVM7b0JBQ3pCLFNBQVMsRUFBRSxHQUFHLENBQUMsSUFBSTtvQkFDbkIsSUFBSSxFQUFFLEdBQUcsQ0FBQyxnQ0FBZ0MsRUFBRSxJQUFJO2lCQUNqRCxDQUNGLENBQUM7Z0JBQ0YsT0FBTyxHQUFHLENBQUMsZ0NBQWdDLENBQUM7WUFDOUMsQ0FBQztRQUNILENBQUM7UUFDRCxPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7O0FBaG1DSCxzQkFpbUNDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2Jsb2IvdjIuMTg2LjAvcGFja2FnZXMvYXdzLWNkay1saWIvYXdzLWR5bmFtb2RiL2xpYi90YWJsZS50c1xuXG5pbXBvcnQge1xuICBkeW5hbW9kYkNvbnRyaWJ1dG9ySW5zaWdodHMsXG4gIGR5bmFtb2RiS2luZXNpc1N0cmVhbWluZ0Rlc3RpbmF0aW9uLFxuICBkeW5hbW9kYlJlc291cmNlUG9saWN5LFxuICBkeW5hbW9kYlRhYmxlLFxufSBmcm9tIFwiQGNka3RmL3Byb3ZpZGVyLWF3c1wiO1xuaW1wb3J0IHsgVG9rZW4sIExhenkgfSBmcm9tIFwiY2RrdGZcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgKiBhcyBzdG9yYWdlIGZyb20gXCIuXCI7XG5pbXBvcnQgeyBBcm5Gb3JtYXQsIEF3c0NvbnN0cnVjdEJhc2UsIEF3c0NvbnN0cnVjdFByb3BzLCBBd3NTdGFjayB9IGZyb20gXCIuLlwiO1xuaW1wb3J0IHsgRHluYW1vREJNZXRyaWNzIH0gZnJvbSBcIi4vZHluYW1vZGItY2FubmVkLW1ldHJpY3MuZ2VuZXJhdGVkXCI7XG5pbXBvcnQge1xuICBFbmFibGVTY2FsaW5nUHJvcHMsXG4gIElTY2FsYWJsZVRhYmxlQXR0cmlidXRlLFxufSBmcm9tIFwiLi9zY2FsYWJsZS1hdHRyaWJ1dGUtYXBpXCI7XG5pbXBvcnQgeyBTY2FsYWJsZVRhYmxlQXR0cmlidXRlIH0gZnJvbSBcIi4vc2NhbGFibGUtdGFibGUtYXR0cmlidXRlXCI7XG5pbXBvcnQge1xuICBPcGVyYXRpb24sXG4gIE9wZXJhdGlvbnNNZXRyaWNPcHRpb25zLFxuICBTeXN0ZW1FcnJvcnNGb3JPcGVyYXRpb25zTWV0cmljT3B0aW9ucyxcbiAgQXR0cmlidXRlLFxuICBCaWxsaW5nTW9kZSxcbiAgUHJvamVjdGlvblR5cGUsXG4gIElUYWJsZSxcbiAgU2Vjb25kYXJ5SW5kZXhQcm9wcyxcbiAgVGFibGVDbGFzcyxcbiAgTG9jYWxTZWNvbmRhcnlJbmRleFByb3BzLFxuICBUYWJsZUVuY3J5cHRpb24sXG4gIFN0cmVhbVZpZXdUeXBlLFxuICBQb2ludEluVGltZVJlY292ZXJ5U3BlY2lmaWNhdGlvbixcbiAgV2FybVRocm91Z2hwdXQsXG4gIENvbnRyaWJ1dG9ySW5zaWdodHNTcGVjaWZpY2F0aW9uLFxuICB2YWxpZGF0ZUNvbnRyaWJ1dG9ySW5zaWdodHMsXG59IGZyb20gXCIuL3NoYXJlZFwiO1xuaW1wb3J0IHsgU3RyZWFtR3JhbnRzIH0gZnJvbSBcIi4vc3RyZWFtLWdyYW50c1wiO1xuaW1wb3J0IHsgVGFibGVHcmFudHMgfSBmcm9tIFwiLi90YWJsZS1ncmFudHNcIjtcbmltcG9ydCB7IFVuc2NvcGVkVmFsaWRhdGlvbkVycm9yLCBWYWxpZGF0aW9uRXJyb3IgfSBmcm9tIFwiLi4vLi4vZXJyb3JzXCI7XG5pbXBvcnQgKiBhcyBjbG91ZHdhdGNoIGZyb20gXCIuLi9jbG91ZHdhdGNoXCI7XG5pbXBvcnQgKiBhcyBhcHBzY2FsaW5nIGZyb20gXCIuLi9jb21wdXRlXCI7XG5pbXBvcnQgKiBhcyBrbXMgZnJvbSBcIi4uL2VuY3J5cHRpb25cIjtcbmltcG9ydCAqIGFzIGlhbSBmcm9tIFwiLi4vaWFtXCI7XG5pbXBvcnQgKiBhcyBraW5lc2lzIGZyb20gXCIuLi9ub3RpZnlcIjtcblxuY29uc3QgSEFTSF9LRVlfVFlQRSA9IFwiSEFTSFwiO1xuY29uc3QgUkFOR0VfS0VZX1RZUEUgPSBcIlJBTkdFXCI7XG5cbi8vIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hbWF6b25keW5hbW9kYi9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvTGltaXRzLmh0bWwjbGltaXRzLXNlY29uZGFyeS1pbmRleGVzXG5jb25zdCBNQVhfTE9DQUxfU0VDT05EQVJZX0lOREVYX0NPVU5UID0gNTtcblxuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSB0YWJsZSBzY2hlbWEgYXR0cmlidXRlcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTY2hlbWFPcHRpb25zIHtcbiAgLyoqXG4gICAqIFBhcnRpdGlvbiBrZXkgYXR0cmlidXRlIGRlZmluaXRpb24uXG4gICAqL1xuICByZWFkb25seSBwYXJ0aXRpb25LZXk6IEF0dHJpYnV0ZTtcblxuICAvKipcbiAgICogU29ydCBrZXkgYXR0cmlidXRlIGRlZmluaXRpb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IG5vIHNvcnQga2V5XG4gICAqL1xuICByZWFkb25seSBzb3J0S2V5PzogQXR0cmlidXRlO1xufVxuXG4vKipcbiAqIFR5cGUgb2YgY29tcHJlc3Npb24gdG8gdXNlIGZvciBpbXBvcnRlZCBkYXRhLlxuICovXG5leHBvcnQgZW51bSBJbnB1dENvbXByZXNzaW9uVHlwZSB7XG4gIC8qKlxuICAgKiBHWklQIGNvbXByZXNzaW9uLlxuICAgKi9cbiAgR1pJUCA9IFwiR1pJUFwiLFxuXG4gIC8qKlxuICAgKiBaU1REIGNvbXByZXNzaW9uLlxuICAgKi9cbiAgWlNURCA9IFwiWlNURFwiLFxuXG4gIC8qKlxuICAgKiBObyBjb21wcmVzc2lvbi5cbiAgICovXG4gIE5PTkUgPSBcIk5PTkVcIixcbn1cblxuLyoqXG4gKiBUaGUgb3B0aW9ucyBmb3IgaW1wb3J0ZWQgc291cmNlIGZpbGVzIGluIENTViBmb3JtYXQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ3N2T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgZGVsaW1pdGVyIHVzZWQgZm9yIHNlcGFyYXRpbmcgaXRlbXMgaW4gdGhlIENTViBmaWxlIGJlaW5nIGltcG9ydGVkLlxuICAgKlxuICAgKiBWYWxpZCBkZWxpbWl0ZXJzIGFyZSBhcyBmb2xsb3dzOlxuICAgKiAtIGNvbW1hIChgLGApXG4gICAqIC0gdGFiIChgXFx0YClcbiAgICogLSBjb2xvbiAoYDpgKVxuICAgKiAtIHNlbWljb2xvbiAoYDtgKVxuICAgKiAtIHBpcGUgKGB8YClcbiAgICogLSBzcGFjZSAoYCBgKVxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHVzZSBjb21tYSBhcyBhIGRlbGltaXRlci5cbiAgICovXG4gIHJlYWRvbmx5IGRlbGltaXRlcj86IHN0cmluZztcblxuICAvKipcbiAgICogTGlzdCBvZiB0aGUgaGVhZGVycyB1c2VkIHRvIHNwZWNpZnkgYSBjb21tb24gaGVhZGVyIGZvciBhbGwgc291cmNlIENTViBmaWxlcyBiZWluZyBpbXBvcnRlZC5cbiAgICpcbiAgICogKipOT1RFKio6IElmIHRoaXMgZmllbGQgaXMgc3BlY2lmaWVkIHRoZW4gdGhlIGZpcnN0IGxpbmUgb2YgZWFjaCBDU1YgZmlsZSBpcyB0cmVhdGVkIGFzIGRhdGEgaW5zdGVhZCBvZiB0aGUgaGVhZGVyLlxuICAgKiBJZiB0aGlzIGZpZWxkIGlzIG5vdCBzcGVjaWZpZWQgdGhlIHRoZSBmaXJzdCBsaW5lIG9mIGVhY2ggQ1NWIGZpbGUgaXMgdHJlYXRlZCBhcyB0aGUgaGVhZGVyLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHRoZSBmaXJzdCBsaW5lIG9mIHRoZSBDU1YgZmlsZSBpcyB0cmVhdGVkIGFzIHRoZSBoZWFkZXJcbiAgICovXG4gIHJlYWRvbmx5IGhlYWRlckxpc3Q/OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBUaGUgZm9ybWF0IG9mIHRoZSBzb3VyY2UgZGF0YS5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIElucHV0Rm9ybWF0IHtcbiAgLyoqXG4gICAqIER5bmFtb0RCIEpTT04gZm9ybWF0LlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBkeW5hbW9EQkpzb24oKTogSW5wdXRGb3JtYXQge1xuICAgIHJldHVybiBuZXcgKGNsYXNzIGV4dGVuZHMgSW5wdXRGb3JtYXQge1xuICAgICAgcHVibGljIF9yZW5kZXIoKTogUGljazxcbiAgICAgICAgZHluYW1vZGJUYWJsZS5EeW5hbW9kYlRhYmxlSW1wb3J0VGFibGUsXG4gICAgICAgIFwiaW5wdXRGb3JtYXRcIiB8IFwiaW5wdXRGb3JtYXRPcHRpb25zXCJcbiAgICAgID4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGlucHV0Rm9ybWF0OiBcIkRZTkFNT0RCX0pTT05cIixcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9KSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFtYXpvbiBJb24gZm9ybWF0LlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBpb24oKTogSW5wdXRGb3JtYXQge1xuICAgIHJldHVybiBuZXcgKGNsYXNzIGV4dGVuZHMgSW5wdXRGb3JtYXQge1xuICAgICAgcHVibGljIF9yZW5kZXIoKTogUGljazxcbiAgICAgICAgZHluYW1vZGJUYWJsZS5EeW5hbW9kYlRhYmxlSW1wb3J0VGFibGUsXG4gICAgICAgIFwiaW5wdXRGb3JtYXRcIiB8IFwiaW5wdXRGb3JtYXRPcHRpb25zXCJcbiAgICAgID4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGlucHV0Rm9ybWF0OiBcIklPTlwiLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0pKCk7XG4gIH1cblxuICAvKipcbiAgICogQ1NWIGZvcm1hdC5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgY3N2KG9wdGlvbnM/OiBDc3ZPcHRpb25zKTogSW5wdXRGb3JtYXQge1xuICAgIC8vIFdlIGFyZSB1c2luZyB0aGUgLmxlbmd0aCBwcm9wZXJ0eSB0byBjaGVjayB0aGUgbGVuZ3RoIG9mIHRoZSBkZWxpbWl0ZXIuXG4gICAgLy8gTm90ZSB0aGF0IC5sZW5ndGggbWF5IG5vdCByZXR1cm4gdGhlIGV4cGVjdGVkIHJlc3VsdCBmb3IgbXVsdGktY29kZXBvaW50IGNoYXJhY3RlcnMgbGlrZSBmdWxsLXdpZHRoIGNoYXJhY3RlcnMgb3IgZW1vamlzLFxuICAgIC8vIGJ1dCBzdWNoIGNoYXJhY3RlcnMgYXJlIG5vdCBleHBlY3RlZCB0byBiZSB1c2VkIGFzIGRlbGltaXRlcnMgaW4gdGhpcyBjb250ZXh0LlxuICAgIGlmIChcbiAgICAgIG9wdGlvbnM/LmRlbGltaXRlciAmJlxuICAgICAgKCF0aGlzLnZhbGlkQ3N2RGVsaW1pdGVycy5pbmNsdWRlcyhvcHRpb25zLmRlbGltaXRlcikgfHxcbiAgICAgICAgb3B0aW9ucy5kZWxpbWl0ZXIubGVuZ3RoICE9PSAxKVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IFVuc2NvcGVkVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICBbXG4gICAgICAgICAgXCJEZWxpbWl0ZXIgbXVzdCBiZSBhIHNpbmdsZSBjaGFyYWN0ZXIgYW5kIG9uZSBvZiB0aGUgZm9sbG93aW5nOlwiLFxuICAgICAgICAgIGAke3RoaXMucmVhZGFibGVWYWxpZENzdkRlbGltaXRlcnMuam9pbihcIiwgXCIpfSxgLFxuICAgICAgICAgIGBnb3QgJyR7b3B0aW9ucy5kZWxpbWl0ZXJ9J2AsXG4gICAgICAgIF0uam9pbihcIiBcIiksXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgKGNsYXNzIGV4dGVuZHMgSW5wdXRGb3JtYXQge1xuICAgICAgcHVibGljIF9yZW5kZXIoKTogUGljazxcbiAgICAgICAgZHluYW1vZGJUYWJsZS5EeW5hbW9kYlRhYmxlSW1wb3J0VGFibGUsXG4gICAgICAgIFwiaW5wdXRGb3JtYXRcIiB8IFwiaW5wdXRGb3JtYXRPcHRpb25zXCJcbiAgICAgID4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGlucHV0Rm9ybWF0OiBcIkNTVlwiLFxuICAgICAgICAgIGlucHV0Rm9ybWF0T3B0aW9uczogb3B0aW9uc1xuICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgY3N2OiB7XG4gICAgICAgICAgICAgICAgICBkZWxpbWl0ZXI6IG9wdGlvbnM/LmRlbGltaXRlcixcbiAgICAgICAgICAgICAgICAgIGhlYWRlckxpc3Q6IG9wdGlvbnM/LmhlYWRlckxpc3QsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSkoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZCBDU1YgZGVsaW1pdGVycy5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcHJvcGVydGllcy1keW5hbW9kYi10YWJsZS1jc3YuaHRtbCNjZm4tZHluYW1vZGItdGFibGUtY3N2LWRlbGltaXRlclxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgdmFsaWRDc3ZEZWxpbWl0ZXJzID0gW1wiLFwiLCBcIlxcdFwiLCBcIjpcIiwgXCI7XCIsIFwifFwiLCBcIiBcIl07XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZGFibGVWYWxpZENzdkRlbGltaXRlcnMgPSBbXG4gICAgXCJjb21tYSAoLClcIixcbiAgICBcInRhYiAoXFxcXHQpXCIsXG4gICAgXCJjb2xvbiAoOilcIixcbiAgICBcInNlbWljb2xvbiAoOylcIixcbiAgICBcInBpcGUgKHwpXCIsXG4gICAgXCJzcGFjZSAoIClcIixcbiAgXTtcblxuICAvKipcbiAgICogUmVuZGVyIHRoZSBpbnB1dCBmb3JtYXQgYW5kIG9wdGlvbnMuXG4gICAqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHVibGljIGFic3RyYWN0IF9yZW5kZXIoKTogUGljazxcbiAgICBkeW5hbW9kYlRhYmxlLkR5bmFtb2RiVGFibGVJbXBvcnRUYWJsZSxcbiAgICBcImlucHV0Rm9ybWF0XCIgfCBcImlucHV0Rm9ybWF0T3B0aW9uc1wiXG4gID47XG59XG5cbi8qKlxuICogIFByb3BlcnRpZXMgZm9yIGltcG9ydGluZyBkYXRhIGZyb20gdGhlIFMzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEltcG9ydFNvdXJjZVNwZWNpZmljYXRpb24ge1xuICAvKipcbiAgICogVGhlIGNvbXByZXNzaW9uIHR5cGUgb2YgdGhlIGltcG9ydGVkIGRhdGEuXG4gICAqXG4gICAqIEBkZWZhdWx0IElucHV0Q29tcHJlc3Npb25UeXBlLk5PTkVcbiAgICovXG4gIHJlYWRvbmx5IGNvbXByZXNzaW9uVHlwZT86IElucHV0Q29tcHJlc3Npb25UeXBlO1xuXG4gIC8qKlxuICAgKiBUaGUgZm9ybWF0IG9mIHRoZSBpbXBvcnRlZCBkYXRhLlxuICAgKi9cbiAgcmVhZG9ubHkgaW5wdXRGb3JtYXQ6IElucHV0Rm9ybWF0O1xuXG4gIC8qKlxuICAgKiBUaGUgUzMgYnVja2V0IHRoYXQgaXMgYmVpbmcgaW1wb3J0ZWQgZnJvbS5cbiAgICovXG4gIHJlYWRvbmx5IGJ1Y2tldDogc3RvcmFnZS5JQnVja2V0O1xuXG4gIC8qKlxuICAgKiBUaGUgYWNjb3VudCBudW1iZXIgb2YgdGhlIFMzIGJ1Y2tldCB0aGF0IGlzIGJlaW5nIGltcG9ydGVkIGZyb20uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gdmFsdWVcbiAgICovXG4gIHJlYWRvbmx5IGJ1Y2tldE93bmVyPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUga2V5IHByZWZpeCBzaGFyZWQgYnkgYWxsIFMzIE9iamVjdHMgdGhhdCBhcmUgYmVpbmcgaW1wb3J0ZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gdmFsdWVcbiAgICovXG4gIHJlYWRvbmx5IGtleVByZWZpeD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGUgcHJlY2lzaW9uIGFzc29jaWF0ZWQgd2l0aCB0aGUgRHluYW1vREIgd3JpdGUgdGltZXN0YW1wcyB0aGF0IHdpbGwgYmUgcmVwbGljYXRlZCB0byBLaW5lc2lzLlxuICogVGhlIGRlZmF1bHQgc2V0dGluZyBmb3IgcmVjb3JkIHRpbWVzdGFtcCBwcmVjaXNpb24gaXMgbWljcm9zZWNvbmRzLiBZb3UgY2FuIGNoYW5nZSB0aGlzIHNldHRpbmcgYXQgYW55IHRpbWUuXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1wcm9wZXJ0aWVzLWR5bmFtb2RiLXRhYmxlLWtpbmVzaXNzdHJlYW1zcGVjaWZpY2F0aW9uLmh0bWwjYXdzLXByb3BlcnRpZXMtZHluYW1vZGItdGFibGUta2luZXNpc3N0cmVhbXNwZWNpZmljYXRpb24tcHJvcGVydGllc1xuICovXG5leHBvcnQgZW51bSBBcHByb3hpbWF0ZUNyZWF0aW9uRGF0ZVRpbWVQcmVjaXNpb24ge1xuICAvKipcbiAgICogTWlsbGlzZWNvbmQgcHJlY2lzaW9uXG4gICAqL1xuICBNSUxMSVNFQ09ORCA9IFwiTUlMTElTRUNPTkRcIixcblxuICAvKipcbiAgICogTWljcm9zZWNvbmQgcHJlY2lzaW9uXG4gICAqL1xuICBNSUNST1NFQ09ORCA9IFwiTUlDUk9TRUNPTkRcIixcbn1cblxuLyoqXG4gKiBDb21tb24gaW50ZXJmYWNlIGZvciB0eXBlcyB0aGF0IGNhbiBjb25maWd1cmUgY29udHJpYnV0b3IgaW5zaWdodHNcbiAqIEBpbnRlcm5hbFxuICovXG5pbnRlcmZhY2UgSUNvbnRyaWJ1dG9ySW5zaWdodHNDb25maWd1cmFibGUge1xuICAvKipcbiAgICogV2hldGhlciBDbG91ZFdhdGNoIGNvbnRyaWJ1dG9yIGluc2lnaHRzIGlzIGVuYWJsZWQuXG4gICAqIEBkZXByZWNhdGVkIHVzZSBgY29udHJpYnV0b3JJbnNpZ2h0c1NwZWNpZmljYXRpb25gIGluc3RlYWRcbiAgICovXG4gIHJlYWRvbmx5IGNvbnRyaWJ1dG9ySW5zaWdodHNFbmFibGVkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciBDbG91ZFdhdGNoIGNvbnRyaWJ1dG9yIGluc2lnaHRzIGlzIGVuYWJsZWQgYW5kIHdoYXQgbW9kZSBpcyBzZWxlY3RlZFxuICAgKi9cbiAgcmVhZG9ubHkgY29udHJpYnV0b3JJbnNpZ2h0c1NwZWNpZmljYXRpb24/OiBDb250cmlidXRvckluc2lnaHRzU3BlY2lmaWNhdGlvbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEeW5hbW9kYlRhYmxlUmVwbGljYSB7XG4gIC8qKiAoT3B0aW9uYWwpIEFSTiBvZiB0aGUgQ01LIHRoYXQgc2hvdWxkIGJlIHVzZWQgZm9yIHRoZSBBV1MgS01TIGVuY3J5cHRpb24uIFRoaXMgYXJndW1lbnQgc2hvdWxkIG9ubHkgYmUgdXNlZCBpZiB0aGUga2V5IGlzIGRpZmZlcmVudCBmcm9tIHRoZSBkZWZhdWx0IEtNUy1tYW5hZ2VkIER5bmFtb0RCIGtleSwgYGFsaWFzL2F3cy9keW5hbW9kYmAuICoqTm90ZToqKiBUaGlzIGF0dHJpYnV0ZSB3aWxsIF9ub3RfIGJlIHBvcHVsYXRlZCB3aXRoIHRoZSBBUk4gb2YgX2RlZmF1bHRfIGtleXMuICovXG4gIHJlYWRvbmx5IGVuY3J5cHRpb25LZXk/OiBrbXMuSUtleTtcbiAgLyoqIChPcHRpb25hbCkgV2hldGhlciB0byBlbmFibGUgUG9pbnQgSW4gVGltZSBSZWNvdmVyeSBmb3IgdGhlIHJlcGxpY2EuIERlZmF1bHQgaXMgYGZhbHNlYC4gKi9cbiAgcmVhZG9ubHkgcG9pbnRJblRpbWVSZWNvdmVyeT86IGJvb2xlYW47XG4gIC8qKiAoT3B0aW9uYWwpIFdoZXRoZXIgdG8gcHJvcGFnYXRlIHRoZSBnbG9iYWwgdGFibGUncyB0YWdzIHRvIGEgcmVwbGljYS4gRGVmYXVsdCBpcyBgZmFsc2VgLiBDaGFuZ2VzIHRvIHRhZ3Mgb25seSBtb3ZlIGluIG9uZSBkaXJlY3Rpb246IGZyb20gZ2xvYmFsIChzb3VyY2UpIHRvIHJlcGxpY2EuIEluIG90aGVyIHdvcmRzLCB0YWcgZHJpZnQgb24gYSByZXBsaWNhIHdpbGwgbm90IHRyaWdnZXIgYW4gdXBkYXRlLiBUYWcgb3IgcmVwbGljYSBjaGFuZ2VzIG9uIHRoZSBnbG9iYWwgdGFibGUsIHdoZXRoZXIgZnJvbSBkcmlmdCBvciBjb25maWd1cmF0aW9uIGNoYW5nZXMsIGFyZSBwcm9wYWdhdGVkIHRvIHJlcGxpY2FzLiBDaGFuZ2luZyBmcm9tIGB0cnVlYCB0byBgZmFsc2VgIG9uIGEgc3Vic2VxdWVudCBgYXBwbHlgIG1lYW5zIHJlcGxpY2EgdGFncyBhcmUgbGVmdCBhcyB0aGV5IHdlcmUsIHVubWFuYWdlZCwgbm90IGRlbGV0ZWQuICovXG4gIHJlYWRvbmx5IHByb3BhZ2F0ZVRhZ3M/OiBib29sZWFuO1xuICAvKiogKFJlcXVpcmVkKSBSZWdpb24gbmFtZSBvZiB0aGUgcmVwbGljYS4gKi9cbiAgcmVhZG9ubHkgcmVnaW9uTmFtZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgb2YgYSBEeW5hbW9EQiBUYWJsZVxuICpcbiAqIFVzZSBgVGFibGVQcm9wc2AgZm9yIGFsbCB0YWJsZSBwcm9wZXJ0aWVzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGFibGVPcHRpb25zIGV4dGVuZHMgU2NoZW1hT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgcmVhZCBjYXBhY2l0eSBmb3IgdGhlIHRhYmxlLiBDYXJlZnVsIGlmIHlvdSBhZGQgR2xvYmFsIFNlY29uZGFyeSBJbmRleGVzLCBhc1xuICAgKiB0aG9zZSB3aWxsIHNoYXJlIHRoZSB0YWJsZSdzIHByb3Zpc2lvbmVkIHRocm91Z2hwdXQuXG4gICAqXG4gICAqIENhbiBvbmx5IGJlIHByb3ZpZGVkIGlmIGJpbGxpbmdNb2RlIGlzIFByb3Zpc2lvbmVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCA1XG4gICAqL1xuICByZWFkb25seSByZWFkQ2FwYWNpdHk/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBUaGUgd3JpdGUgY2FwYWNpdHkgZm9yIHRoZSB0YWJsZS4gQ2FyZWZ1bCBpZiB5b3UgYWRkIEdsb2JhbCBTZWNvbmRhcnkgSW5kZXhlcywgYXNcbiAgICogdGhvc2Ugd2lsbCBzaGFyZSB0aGUgdGFibGUncyBwcm92aXNpb25lZCB0aHJvdWdocHV0LlxuICAgKlxuICAgKiBDYW4gb25seSBiZSBwcm92aWRlZCBpZiBiaWxsaW5nTW9kZSBpcyBQcm92aXNpb25lZC5cbiAgICpcbiAgICogQGRlZmF1bHQgNVxuICAgKi9cbiAgcmVhZG9ubHkgd3JpdGVDYXBhY2l0eT86IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIG1heGltdW0gcmVhZCByZXF1ZXN0IHVuaXRzIGZvciB0aGUgdGFibGUuIENhcmVmdWwgaWYgeW91IGFkZCBHbG9iYWwgU2Vjb25kYXJ5IEluZGV4ZXMsIGFzXG4gICAqIHRob3NlIHdpbGwgc2hhcmUgdGhlIHRhYmxlJ3MgbWF4aW11bSBvbi1kZW1hbmQgdGhyb3VnaHB1dC5cbiAgICpcbiAgICogQ2FuIG9ubHkgYmUgcHJvdmlkZWQgaWYgYmlsbGluZ01vZGUgaXMgUEFZX1BFUl9SRVFVRVNULlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG9uLWRlbWFuZCB0aHJvdWdocHV0IGlzIGRpc2FibGVkXG4gICAqL1xuICByZWFkb25seSBtYXhSZWFkUmVxdWVzdFVuaXRzPzogbnVtYmVyO1xuICAvKipcbiAgICogVGhlIHdyaXRlIHJlcXVlc3QgdW5pdHMgZm9yIHRoZSB0YWJsZS4gQ2FyZWZ1bCBpZiB5b3UgYWRkIEdsb2JhbCBTZWNvbmRhcnkgSW5kZXhlcywgYXNcbiAgICogdGhvc2Ugd2lsbCBzaGFyZSB0aGUgdGFibGUncyBtYXhpbXVtIG9uLWRlbWFuZCB0aHJvdWdocHV0LlxuICAgKlxuICAgKiBDYW4gb25seSBiZSBwcm92aWRlZCBpZiBiaWxsaW5nTW9kZSBpcyBQQVlfUEVSX1JFUVVFU1QuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gb24tZGVtYW5kIHRocm91Z2hwdXQgaXMgZGlzYWJsZWRcbiAgICovXG4gIHJlYWRvbmx5IG1heFdyaXRlUmVxdWVzdFVuaXRzPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZ5IGhvdyB5b3UgYXJlIGNoYXJnZWQgZm9yIHJlYWQgYW5kIHdyaXRlIHRocm91Z2hwdXQgYW5kIGhvdyB5b3UgbWFuYWdlIGNhcGFjaXR5LlxuICAgKlxuICAgKiBAZGVmYXVsdCBQUk9WSVNJT05FRCBpZiBgcmVwbGljYXRpb25SZWdpb25zYCBpcyBub3Qgc3BlY2lmaWVkLCBQQVlfUEVSX1JFUVVFU1Qgb3RoZXJ3aXNlXG4gICAqL1xuICByZWFkb25seSBiaWxsaW5nTW9kZT86IEJpbGxpbmdNb2RlO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZ5IHZhbHVlcyB0byBwcmUtd2FybSB5b3UgRHluYW1vREIgVGFibGVcbiAgICogV2FybSBUaHJvdWdocHV0IGZlYXR1cmUgaXMgbm90IGF2YWlsYWJsZSBmb3IgR2xvYmFsIFRhYmxlIHJlcGxpY2FzIHVzaW5nIHRoZSBgVGFibGVgIGNvbnN0cnVjdC4gVG8gZW5hYmxlIFdhcm0gVGhyb3VnaHB1dCwgdXNlIHRoZSBgVGFibGVWMmAgY29uc3RydWN0IGluc3RlYWQuXG4gICAqIEBzZWUgaHR0cDovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcmVzb3VyY2UtZHluYW1vZGItdGFibGUuaHRtbCNjZm4tZHluYW1vZGItdGFibGUtd2FybXRocm91Z2hwdXRcbiAgICogQGRlZmF1bHQgLSB3YXJtIHRocm91Z2hwdXQgaXMgbm90IGNvbmZpZ3VyZWRcbiAgICovXG4gIHJlYWRvbmx5IHdhcm1UaHJvdWdocHV0PzogV2FybVRocm91Z2hwdXQ7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgcG9pbnQtaW4tdGltZSByZWNvdmVyeSBpcyBlbmFibGVkLlxuICAgKiBAZGVwcmVjYXRlZCB1c2UgYHBvaW50SW5UaW1lUmVjb3ZlcnlTcGVjaWZpY2F0aW9uYCBpbnN0ZWFkXG4gICAqIEBkZWZhdWx0IGZhbHNlIC0gcG9pbnQgaW4gdGltZSByZWNvdmVyeSBpcyBub3QgZW5hYmxlZC5cbiAgICovXG4gIHJlYWRvbmx5IHBvaW50SW5UaW1lUmVjb3Zlcnk/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHBvaW50LWluLXRpbWUgcmVjb3ZlcnkgaXMgZW5hYmxlZFxuICAgKiBhbmQgcmVjb3ZlcnlQZXJpb2RJbkRheXMgaXMgc2V0LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHBvaW50IGluIHRpbWUgcmVjb3ZlcnkgaXMgbm90IGVuYWJsZWQuXG4gICAqL1xuICByZWFkb25seSBwb2ludEluVGltZVJlY292ZXJ5U3BlY2lmaWNhdGlvbj86IFBvaW50SW5UaW1lUmVjb3ZlcnlTcGVjaWZpY2F0aW9uO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHNlcnZlci1zaWRlIGVuY3J5cHRpb24gd2l0aCBhbiBBV1MgbWFuYWdlZCBjdXN0b21lciBtYXN0ZXIga2V5IGlzIGVuYWJsZWQuXG4gICAqXG4gICAqIFRoaXMgcHJvcGVydHkgY2Fubm90IGJlIHNldCBpZiBgZW5jcnlwdGlvbmAgYW5kL29yIGBlbmNyeXB0aW9uS2V5YCBpcyBzZXQuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gVGhlIHRhYmxlIGlzIGVuY3J5cHRlZCB3aXRoIGFuIGVuY3J5cHRpb24ga2V5IG1hbmFnZWQgYnkgRHluYW1vREIsIGFuZCB5b3UgYXJlIG5vdCBjaGFyZ2VkIGFueSBmZWUgZm9yIHVzaW5nIGl0LlxuICAgKlxuICAgKiBAZGVwcmVjYXRlZCBUaGlzIHByb3BlcnR5IGlzIGRlcHJlY2F0ZWQuIEluIG9yZGVyIHRvIG9idGFpbiB0aGUgc2FtZSBiZWhhdmlvciBhc1xuICAgKiBlbmFibGluZyB0aGlzLCBzZXQgdGhlIGBlbmNyeXB0aW9uYCBwcm9wZXJ0eSB0byBgVGFibGVFbmNyeXB0aW9uLkFXU19NQU5BR0VEYCBpbnN0ZWFkLlxuICAgKi9cbiAgcmVhZG9ubHkgc2VydmVyU2lkZUVuY3J5cHRpb24/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZ5IHRoZSB0YWJsZSBjbGFzcy5cbiAgICogQGRlZmF1bHQgU1RBTkRBUkRcbiAgICovXG4gIHJlYWRvbmx5IHRhYmxlQ2xhc3M/OiBUYWJsZUNsYXNzO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHNlcnZlci1zaWRlIGVuY3J5cHRpb24gd2l0aCBhbiBBV1MgbWFuYWdlZCBjdXN0b21lciBtYXN0ZXIga2V5IGlzIGVuYWJsZWQuXG4gICAqXG4gICAqIFRoaXMgcHJvcGVydHkgY2Fubm90IGJlIHNldCBpZiBgc2VydmVyU2lkZUVuY3J5cHRpb25gIGlzIHNldC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBUaGUgdGFibGUgaXMgZW5jcnlwdGVkIHdpdGggYW4gZW5jcnlwdGlvbiBrZXkgbWFuYWdlZCBieSBEeW5hbW9EQiwgYW5kIHlvdSBhcmUgbm90IGNoYXJnZWQgYW55IGZlZSBmb3IgdXNpbmcgaXQuXG4gICAqL1xuICByZWFkb25seSBlbmNyeXB0aW9uPzogVGFibGVFbmNyeXB0aW9uO1xuXG4gIC8qKlxuICAgKiBFeHRlcm5hbCBLTVMga2V5IHRvIHVzZSBmb3IgdGFibGUgZW5jcnlwdGlvbi5cbiAgICpcbiAgICogVGhpcyBwcm9wZXJ0eSBjYW4gb25seSBiZSBzZXQgaWYgYGVuY3J5cHRpb25gIGlzIHNldCB0byBgVGFibGVFbmNyeXB0aW9uLkNVU1RPTUVSX01BTkFHRURgLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIElmIGBlbmNyeXB0aW9uYCBpcyBzZXQgdG8gYFRhYmxlRW5jcnlwdGlvbi5DVVNUT01FUl9NQU5BR0VEYCBhbmQgdGhpc1xuICAgKiBwcm9wZXJ0eSBpcyB1bmRlZmluZWQsIGEgbmV3IEtNUyBrZXkgd2lsbCBiZSBjcmVhdGVkIGFuZCBhc3NvY2lhdGVkIHdpdGggdGhpcyB0YWJsZS5cbiAgICogSWYgYGVuY3J5cHRpb25gIGFuZCB0aGlzIHByb3BlcnR5IGFyZSBib3RoIHVuZGVmaW5lZCwgdGhlbiB0aGUgdGFibGUgaXMgZW5jcnlwdGVkIHdpdGhcbiAgICogYW4gZW5jcnlwdGlvbiBrZXkgbWFuYWdlZCBieSBEeW5hbW9EQiwgYW5kIHlvdSBhcmUgbm90IGNoYXJnZWQgYW55IGZlZSBmb3IgdXNpbmcgaXQuXG4gICAqL1xuICByZWFkb25seSBlbmNyeXB0aW9uS2V5Pzoga21zLklLZXk7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIFRUTCBhdHRyaWJ1dGUuXG4gICAqIEBkZWZhdWx0IC0gVFRMIGlzIGRpc2FibGVkXG4gICAqL1xuICByZWFkb25seSB0aW1lVG9MaXZlQXR0cmlidXRlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGVuIGFuIGl0ZW0gaW4gdGhlIHRhYmxlIGlzIG1vZGlmaWVkLCBTdHJlYW1WaWV3VHlwZSBkZXRlcm1pbmVzIHdoYXQgaW5mb3JtYXRpb25cbiAgICogaXMgd3JpdHRlbiB0byB0aGUgc3RyZWFtIGZvciB0aGlzIHRhYmxlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHN0cmVhbXMgYXJlIGRpc2FibGVkIHVubGVzcyBgcmVwbGljYXRpb25SZWdpb25zYCBpcyBzcGVjaWZpZWRcbiAgICovXG4gIHJlYWRvbmx5IHN0cmVhbT86IFN0cmVhbVZpZXdUeXBlO1xuXG4gIC8qKlxuICAgKiBSZWdpb25zIHdoZXJlIHJlcGxpY2EgdGFibGVzIHdpbGwgYmUgY3JlYXRlZFxuICAgKlxuICAgKiBAZGVwcmVjYXRlZCB1c2UgcmVwbGljYVNwZWNpZmljYXRpb24gaW5zdGVhZFxuICAgKiBAZGVmYXVsdCAtIG5vIHJlcGxpY2EgdGFibGVzIGFyZSBjcmVhdGVkXG4gICAqL1xuICByZWFkb25seSByZXBsaWNhdGlvblJlZ2lvbnM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIHNwZWNpZmljYXRpb24gZm9yIHJlcGxpY2EgdGFibGVzLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVwbGljYVNwZWNpZmljYXRpb24/OiBEeW5hbW9kYlRhYmxlUmVwbGljYVtdO1xuXG4gIC8vIHJlYWRvbmx5IHJlcGxpY2F0aW9uVGltZW91dD86IER1cmF0aW9uOyAvLyBOb3QgZGlyZWN0bHkgYXBwbGljYWJsZSB0byBURidzIHJlcGxpY2EgYmxvY2sgY29uZmlndXJhdGlvblxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIENsb3VkV2F0Y2ggY29udHJpYnV0b3IgaW5zaWdodHMgaXMgZW5hYmxlZC5cbiAgICogQGRlcHJlY2F0ZWQgdXNlIGBjb250cmlidXRvckluc2lnaHRzU3BlY2lmaWNhdGlvbiBpbnN0ZWFkXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBjb250cmlidXRvckluc2lnaHRzRW5hYmxlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgQ2xvdWRXYXRjaCBjb250cmlidXRvciBpbnNpZ2h0cyBpcyBlbmFibGVkIGFuZCB3aGF0IG1vZGUgaXMgc2VsZWN0ZWRcbiAgICogQGRlZmF1bHQgLSBjb250cmlidXRvciBpbnNpZ2h0cyBpcyBub3QgZW5hYmxlZFxuICAgKi9cbiAgcmVhZG9ubHkgY29udHJpYnV0b3JJbnNpZ2h0c1NwZWNpZmljYXRpb24/OiBDb250cmlidXRvckluc2lnaHRzU3BlY2lmaWNhdGlvbjtcblxuICAvKipcbiAgICogRW5hYmxlcyBkZWxldGlvbiBwcm90ZWN0aW9uIGZvciB0aGUgdGFibGUuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBkZWxldGlvblByb3RlY3Rpb24/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgcHJvcGVydGllcyBvZiBkYXRhIGJlaW5nIGltcG9ydGVkIGZyb20gdGhlIFMzIGJ1Y2tldCBzb3VyY2UgdG8gdGhlIHRhYmxlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIGRhdGEgaW1wb3J0IGZyb20gdGhlIFMzIGJ1Y2tldFxuICAgKi9cbiAgcmVhZG9ubHkgaW1wb3J0U291cmNlPzogSW1wb3J0U291cmNlU3BlY2lmaWNhdGlvbjtcblxuICAvKipcbiAgICogUmVzb3VyY2UgcG9saWN5IHRvIGFzc2lnbiB0byB0YWJsZS5cbiAgICogTm90ZTogYGF3c19keW5hbW9kYl90YWJsZWAgZG9lcyBub3QgZGlyZWN0bHkgc3VwcG9ydCBhIHJlc291cmNlIHBvbGljeSBwcm9wZXJ0eS5cbiAgICogVGhpcyBwb2xpY3kgd291bGQgbmVlZCB0byBiZSBtYW5hZ2VkIGFuZCBhcHBsaWVkIHNlcGFyYXRlbHksIGUuZy4sIHZpYSBgYXdzX2lhbV9wb2xpY3lgIGF0dGFjaGVkIHRvIHByaW5jaXBhbHMuXG4gICAqIEBkZWZhdWx0IC0gTm8gcmVzb3VyY2UgcG9saWN5IHN0YXRlbWVudFxuICAgKi9cbiAgcmVhZG9ubHkgcmVzb3VyY2VQb2xpY3k/OiBpYW0uUG9saWN5RG9jdW1lbnQ7XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgYSBEeW5hbW9EQiBUYWJsZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRhYmxlUHJvcHMgZXh0ZW5kcyBUYWJsZU9wdGlvbnMsIEF3c0NvbnN0cnVjdFByb3BzIHtcbiAgLyoqXG4gICAqIEVuZm9yY2VzIGEgcGFydGljdWxhciBwaHlzaWNhbCB0YWJsZSBuYW1lLlxuICAgKiBAZGVmYXVsdCA8Z2VuZXJhdGVkPlxuICAgKi9cbiAgcmVhZG9ubHkgdGFibGVOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBLaW5lc2lzIERhdGEgU3RyZWFtIHRvIGNhcHR1cmUgaXRlbS1sZXZlbCBjaGFuZ2VzIGZvciB0aGUgdGFibGUuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gS2luZXNpcyBEYXRhIFN0cmVhbVxuICAgKi9cbiAgcmVhZG9ubHkga2luZXNpc1N0cmVhbT86IGtpbmVzaXMuSVN0cmVhbTtcblxuICAvKipcbiAgICogS2luZXNpcyBEYXRhIFN0cmVhbSBhcHByb3hpbWF0ZSBjcmVhdGlvbiB0aW1lc3RhbXAgcHJlY2lzaW9uXG4gICAqXG4gICAqIEBkZWZhdWx0IEFwcHJveGltYXRlQ3JlYXRpb25EYXRlVGltZVByZWNpc2lvbi5NSUNST1NFQ09ORFxuICAgKi9cbiAgcmVhZG9ubHkga2luZXNpc1ByZWNpc2lvblRpbWVzdGFtcD86IEFwcHJveGltYXRlQ3JlYXRpb25EYXRlVGltZVByZWNpc2lvbjtcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBhIGdsb2JhbCBzZWNvbmRhcnkgaW5kZXhcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHbG9iYWxTZWNvbmRhcnlJbmRleFByb3BzXG4gIGV4dGVuZHMgU2Vjb25kYXJ5SW5kZXhQcm9wcyxcbiAgICBTY2hlbWFPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSByZWFkIGNhcGFjaXR5IGZvciB0aGUgZ2xvYmFsIHNlY29uZGFyeSBpbmRleC5cbiAgICpcbiAgICogQ2FuIG9ubHkgYmUgcHJvdmlkZWQgaWYgdGFibGUgYmlsbGluZ01vZGUgaXMgUHJvdmlzaW9uZWQgb3IgdW5kZWZpbmVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCA1XG4gICAqL1xuICByZWFkb25seSByZWFkQ2FwYWNpdHk/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSB3cml0ZSBjYXBhY2l0eSBmb3IgdGhlIGdsb2JhbCBzZWNvbmRhcnkgaW5kZXguXG4gICAqXG4gICAqIENhbiBvbmx5IGJlIHByb3ZpZGVkIGlmIHRhYmxlIGJpbGxpbmdNb2RlIGlzIFByb3Zpc2lvbmVkIG9yIHVuZGVmaW5lZC5cbiAgICpcbiAgICogQGRlZmF1bHQgNVxuICAgKi9cbiAgcmVhZG9ubHkgd3JpdGVDYXBhY2l0eT86IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIG1heGltdW0gcmVhZCByZXF1ZXN0IHVuaXRzIGZvciB0aGUgZ2xvYmFsIHNlY29uZGFyeSBpbmRleC5cbiAgICpcbiAgICogQ2FuIG9ubHkgYmUgcHJvdmlkZWQgaWYgdGFibGUgYmlsbGluZ01vZGUgaXMgUEFZX1BFUl9SRVFVRVNULlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG9uLWRlbWFuZCB0aHJvdWdocHV0IGlzIGRpc2FibGVkXG4gICAqL1xuICByZWFkb25seSBtYXhSZWFkUmVxdWVzdFVuaXRzPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgbWF4aW11bSB3cml0ZSByZXF1ZXN0IHVuaXRzIGZvciB0aGUgZ2xvYmFsIHNlY29uZGFyeSBpbmRleC5cbiAgICpcbiAgICogQ2FuIG9ubHkgYmUgcHJvdmlkZWQgaWYgdGFibGUgYmlsbGluZ01vZGUgaXMgUEFZX1BFUl9SRVFVRVNULlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG9uLWRlbWFuZCB0aHJvdWdocHV0IGlzIGRpc2FibGVkXG4gICAqL1xuICByZWFkb25seSBtYXhXcml0ZVJlcXVlc3RVbml0cz86IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIHdhcm0gdGhyb3VnaHB1dCBjb25maWd1cmF0aW9uIGZvciB0aGUgZ2xvYmFsIHNlY29uZGFyeSBpbmRleC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyB3YXJtIHRocm91Z2hwdXQgaXMgY29uZmlndXJlZFxuICAgKi9cbiAgcmVhZG9ubHkgd2FybVRocm91Z2hwdXQ/OiBXYXJtVGhyb3VnaHB1dDtcblxuICAvKipcbiAgICogV2hldGhlciBDbG91ZFdhdGNoIGNvbnRyaWJ1dG9yIGluc2lnaHRzIGlzIGVuYWJsZWQgYW5kIHdoYXQgbW9kZSBpcyBzZWxlY3RlZFxuICAgKiBAZGVmYXVsdCAtIGNvbnRyaWJ1dG9yIGluc2lnaHRzIGlzIG5vdCBlbmFibGVkXG4gICAqL1xuICByZWFkb25seSBjb250cmlidXRvckluc2lnaHRzU3BlY2lmaWNhdGlvbj86IENvbnRyaWJ1dG9ySW5zaWdodHNTcGVjaWZpY2F0aW9uO1xufVxuXG4vKipcbiAqIFJlZmVyZW5jZSB0byBhIGR5bmFtb2RiIHRhYmxlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRhYmxlQXR0cmlidXRlcyB7XG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSBkeW5hbW9kYiB0YWJsZS5cbiAgICogT25lIG9mIHRoaXMsIG9yIGB0YWJsZU5hbWVgLCBpcyByZXF1aXJlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyB0YWJsZSBhcm5cbiAgICovXG4gIHJlYWRvbmx5IHRhYmxlQXJuPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdGFibGUgbmFtZSBvZiB0aGUgZHluYW1vZGIgdGFibGUuXG4gICAqIE9uZSBvZiB0aGlzLCBvciBgdGFibGVBcm5gLCBpcyByZXF1aXJlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyB0YWJsZSBuYW1lXG4gICAqL1xuICByZWFkb25seSB0YWJsZU5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBBUk4gb2YgdGhlIHRhYmxlJ3Mgc3RyZWFtLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIHRhYmxlIHN0cmVhbVxuICAgKi9cbiAgcmVhZG9ubHkgdGFibGVTdHJlYW1Bcm4/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEtNUyBlbmNyeXB0aW9uIGtleSwgaWYgdGhpcyB0YWJsZSB1c2VzIGEgY3VzdG9tZXItbWFuYWdlZCBlbmNyeXB0aW9uIGtleS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBrZXlcbiAgICovXG4gIHJlYWRvbmx5IGVuY3J5cHRpb25LZXk/OiBrbXMuSUtleTtcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGdsb2JhbCBpbmRleGVzIHNldCBmb3IgdGhpcyBUYWJsZS5cbiAgICogTm90ZSB0aGF0IHlvdSBuZWVkIHRvIHNldCBlaXRoZXIgdGhpcyBwcm9wZXJ0eSxcbiAgICogb3IgYGxvY2FsSW5kZXhlc2AsXG4gICAqIGlmIHlvdSB3YW50IG1ldGhvZHMgbGlrZSBncmFudFJlYWREYXRhKClcbiAgICogdG8gZ3JhbnQgcGVybWlzc2lvbnMgZm9yIGluZGV4ZXMgYXMgd2VsbCBhcyB0aGUgdGFibGUgaXRzZWxmLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIGdsb2JhbCBpbmRleGVzXG4gICAqL1xuICByZWFkb25seSBnbG9iYWxJbmRleGVzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBsb2NhbCBpbmRleGVzIHNldCBmb3IgdGhpcyBUYWJsZS5cbiAgICogTm90ZSB0aGF0IHlvdSBuZWVkIHRvIHNldCBlaXRoZXIgdGhpcyBwcm9wZXJ0eSxcbiAgICogb3IgYGdsb2JhbEluZGV4ZXNgLFxuICAgKiBpZiB5b3Ugd2FudCBtZXRob2RzIGxpa2UgZ3JhbnRSZWFkRGF0YSgpXG4gICAqIHRvIGdyYW50IHBlcm1pc3Npb25zIGZvciBpbmRleGVzIGFzIHdlbGwgYXMgdGhlIHRhYmxlIGl0c2VsZi5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBsb2NhbCBpbmRleGVzXG4gICAqL1xuICByZWFkb25seSBsb2NhbEluZGV4ZXM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogSWYgc2V0IHRvIHRydWUsIGdyYW50IG1ldGhvZHMgYWx3YXlzIGdyYW50IHBlcm1pc3Npb25zIGZvciBhbGwgaW5kZXhlcy5cbiAgICogSWYgZmFsc2UgaXMgcHJvdmlkZWQsIGdyYW50IG1ldGhvZHMgZ3JhbnQgdGhlIHBlcm1pc3Npb25zXG4gICAqIG9ubHkgd2hlbiBgZ2xvYmFsSW5kZXhlc2Agb3IgYGxvY2FsSW5kZXhlc2AgaXMgc3BlY2lmaWVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGZhbHNlXG4gICAqL1xuICByZWFkb25seSBncmFudEluZGV4UGVybWlzc2lvbnM/OiBib29sZWFuO1xufVxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgVGFibGVCYXNlXG4gIGV4dGVuZHMgQXdzQ29uc3RydWN0QmFzZVxuICBpbXBsZW1lbnRzIElUYWJsZSwgaWFtLklBd3NDb25zdHJ1Y3RXaXRoUG9saWN5XG57XG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSB0YWJsZUFybjogc3RyaW5nO1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgdGFibGVOYW1lOiBzdHJpbmc7XG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSB0YWJsZVN0cmVhbUFybj86IHN0cmluZztcblxuICAvKipcbiAgICogS01TIGVuY3J5cHRpb24ga2V5LCBpZiB0aGlzIHRhYmxlIHVzZXMgYSBjdXN0b21lci1tYW5hZ2VkIGVuY3J5cHRpb24ga2V5LlxuICAgKi9cbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IGVuY3J5cHRpb25LZXk/OiBrbXMuSUtleTtcblxuICAvKipcbiAgICogUmVzb3VyY2UgcG9saWN5IHRvIGFzc2lnbiB0byB0YWJsZS5cbiAgICovXG4gIHB1YmxpYyBhYnN0cmFjdCByZXNvdXJjZVBvbGljeT86IGlhbS5Qb2xpY3lEb2N1bWVudDtcblxuICAvKipcbiAgICogQWRkaXRpb25hbCByZWdpb25zIG90aGVyIHRoYW4gdGhlIG1haW4gb25lIHRoYXQgdGhpcyB0YWJsZSBpcyByZXBsaWNhdGVkIHRvXG4gICAqXG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgcmVnaW9ucz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBUaGlzIG1lbWJlciBpcyBzdGlsbCBmaWxsZWQgYnV0IGl0IGlzIG5vdCByZWFkXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgcmVnaW9uYWxBcm5zID0gbmV3IEFycmF5PHN0cmluZz4oKTtcblxuICBwdWJsaWMgZ3JhbnRPbktleShcbiAgICBncmFudGVlOiBpYW0uSUdyYW50YWJsZSxcbiAgICAuLi5hY3Rpb25zOiBzdHJpbmdbXVxuICApOiBpYW0uR3JhbnRPbktleVJlc3VsdCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGdyYW50OiB0aGlzLmVuY3J5cHRpb25LZXk/LmdyYW50KGdyYW50ZWUsIC4uLmFjdGlvbnMpLFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgZ2V0IG91dHB1dHMoKTogUmVjb3JkPHN0cmluZywgYW55PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRhYmxlQXJuOiB0aGlzLnRhYmxlQXJuLFxuICAgICAgdGFibGVOYW1lOiB0aGlzLnRhYmxlTmFtZSxcbiAgICAgIHRhYmxlU3RyZWFtQXJuOiB0aGlzLnRhYmxlU3RyZWFtQXJuLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogR3JhbnQgYSBwcmVkZWZpbmVkIHNldCBvZiBwZXJtaXNzaW9ucyBvbiB0aGlzIFRhYmxlLlxuICAgKi9cbiAgcHVibGljIGdldCBncmFudHMoKTogVGFibGVHcmFudHMge1xuICAgIHJldHVybiBuZXcgVGFibGVHcmFudHMoe1xuICAgICAgdGFibGU6IHRoaXMsXG4gICAgICBlbmNyeXB0ZWRSZXNvdXJjZTogdGhpcyxcbiAgICAgIHBvbGljeVJlc291cmNlOiB0aGlzLFxuICAgICAgcmVnaW9uczogdGhpcy5yZWdpb25zLFxuICAgICAgaGFzSW5kZXg6IHRoaXMuaGFzSW5kZXgsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnQgYSBwcmVkZWZpbmVkIHNldCBvZiBwZXJtaXNzaW9ucyBvbiB0aGlzIFRhYmxlJ3MgU3RyZWFtLCBpZiBwcmVzZW50LlxuICAgKlxuICAgKiBXaWxsIHRocm93IGlmIHRoZSBUYWJsZSBoYXMgbm90IGJlZW4gY29uZmlndXJlZCBmb3Igc3RyZWFtaW5nLlxuICAgKi9cbiAgcHVibGljIGdldCBzdHJlYW1HcmFudHMoKTogU3RyZWFtR3JhbnRzIHtcbiAgICBpZiAoIXRoaXMudGFibGVTdHJlYW1Bcm4pIHtcbiAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgIGBEeW5hbW9EQiBTdHJlYW1zIG11c3QgYmUgZW5hYmxlZCBvbiB0aGUgdGFibGUgJHt0aGlzLm5vZGUucGF0aH1gLFxuICAgICAgICB0aGlzLFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBTdHJlYW1HcmFudHMoe1xuICAgICAgdGFibGU6IHRoaXMsXG4gICAgICB0YWJsZVN0cmVhbUFybjogdGhpcy50YWJsZVN0cmVhbUFybixcbiAgICAgIGVuY3J5cHRpb25LZXk6IHRoaXMuZW5jcnlwdGlvbktleSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgc3RhdGVtZW50IHRvIHRoZSByZXNvdXJjZSBwb2xpY3kgYXNzb2NpYXRlZCB3aXRoIHRoaXMgdGFibGUuXG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgYWRkVG9SZXNvdXJjZVBvbGljeShcbiAgICBzdGF0ZW1lbnQ6IGlhbS5Qb2xpY3lTdGF0ZW1lbnQsXG4gICk6IGlhbS5BZGRUb1Jlc291cmNlUG9saWN5UmVzdWx0O1xuXG4gIC8qKlxuICAgKiBBZGRzIGFuIElBTSBwb2xpY3kgc3RhdGVtZW50IGFzc29jaWF0ZWQgd2l0aCB0aGlzIHRhYmxlIHRvIGFuIElBTVxuICAgKiBwcmluY2lwYWwncyBwb2xpY3kuXG4gICAqXG4gICAqIElmIGBlbmNyeXB0aW9uS2V5YCBpcyBwcmVzZW50LCBhcHByb3ByaWF0ZSBncmFudHMgdG8gdGhlIGtleSBuZWVkcyB0byBiZSBhZGRlZFxuICAgKiBzZXBhcmF0ZWx5IHVzaW5nIHRoZSBgdGFibGUuZW5jcnlwdGlvbktleS5ncmFudCpgIG1ldGhvZHMuXG4gICAqXG4gICAqIEBwYXJhbSBncmFudGVlIFRoZSBwcmluY2lwYWwgKG5vLW9wIGlmIHVuZGVmaW5lZClcbiAgICogQHBhcmFtIGFjdGlvbnMgVGhlIHNldCBvZiBhY3Rpb25zIHRvIGFsbG93IChpLmUuIFwiZHluYW1vZGI6UHV0SXRlbVwiLCBcImR5bmFtb2RiOkdldEl0ZW1cIiwgLi4uKVxuICAgKi9cbiAgcHVibGljIGdyYW50KGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlLCAuLi5hY3Rpb25zOiBzdHJpbmdbXSk6IGlhbS5HcmFudCB7XG4gICAgcmV0dXJuIHRoaXMuZ3JhbnRzLmFjdGlvbnMoZ3JhbnRlZSwgLi4uYWN0aW9ucyk7XG4gIH1cbiAgLyoqXG4gICAqIEFkZHMgYW4gSUFNIHBvbGljeSBzdGF0ZW1lbnQgYXNzb2NpYXRlZCB3aXRoIHRoaXMgdGFibGUncyBzdHJlYW0gdG8gYW5cbiAgICogSUFNIHByaW5jaXBhbCdzIHBvbGljeS5cbiAgICpcbiAgICogSWYgYGVuY3J5cHRpb25LZXlgIGlzIHByZXNlbnQsIGFwcHJvcHJpYXRlIGdyYW50cyB0byB0aGUga2V5IG5lZWRzIHRvIGJlIGFkZGVkXG4gICAqIHNlcGFyYXRlbHkgdXNpbmcgdGhlIGB0YWJsZS5lbmNyeXB0aW9uS2V5LmdyYW50KmAgbWV0aG9kcy5cbiAgICpcbiAgICogQHBhcmFtIGdyYW50ZWUgVGhlIHByaW5jaXBhbCAobm8tb3AgaWYgdW5kZWZpbmVkKVxuICAgKiBAcGFyYW0gYWN0aW9ucyBUaGUgc2V0IG9mIGFjdGlvbnMgdG8gYWxsb3cgKGkuZS4gXCJkeW5hbW9kYjpEZXNjcmliZVN0cmVhbVwiLCBcImR5bmFtb2RiOkdldFJlY29yZHNcIiwgLi4uKVxuICAgKi9cbiAgcHVibGljIGdyYW50U3RyZWFtKGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlLCAuLi5hY3Rpb25zOiBzdHJpbmdbXSk6IGlhbS5HcmFudCB7XG4gICAgcmV0dXJuIHRoaXMuc3RyZWFtR3JhbnRzLmFjdGlvbnMoZ3JhbnRlZSwgLi4uYWN0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogUGVybWl0cyBhbiBJQU0gcHJpbmNpcGFsIGFsbCBkYXRhIHJlYWQgb3BlcmF0aW9ucyBmcm9tIHRoaXMgdGFibGU6XG4gICAqIEJhdGNoR2V0SXRlbSwgR2V0UmVjb3JkcywgR2V0U2hhcmRJdGVyYXRvciwgUXVlcnksIEdldEl0ZW0sIFNjYW4sIERlc2NyaWJlVGFibGUuXG4gICAqXG4gICAqIEFwcHJvcHJpYXRlIGdyYW50cyB3aWxsIGFsc28gYmUgYWRkZWQgdG8gdGhlIGN1c3RvbWVyLW1hbmFnZWQgS01TIGtleVxuICAgKiBpZiBvbmUgd2FzIGNvbmZpZ3VyZWQuXG4gICAqXG4gICAqIEBwYXJhbSBncmFudGVlIFRoZSBwcmluY2lwYWwgdG8gZ3JhbnQgYWNjZXNzIHRvXG4gICAqL1xuICBwdWJsaWMgZ3JhbnRSZWFkRGF0YShncmFudGVlOiBpYW0uSUdyYW50YWJsZSk6IGlhbS5HcmFudCB7XG4gICAgcmV0dXJuIHRoaXMuZ3JhbnRzLnJlYWREYXRhKGdyYW50ZWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFBlcm1pdHMgYW4gSUFNIFByaW5jaXBhbCB0byBsaXN0IHN0cmVhbXMgYXR0YWNoZWQgdG8gY3VycmVudCBkeW5hbW9kYiB0YWJsZS5cbiAgICpcbiAgICogQHBhcmFtIGdyYW50ZWUgVGhlIHByaW5jaXBhbCAobm8tb3AgaWYgdW5kZWZpbmVkKVxuICAgKi9cbiAgcHVibGljIGdyYW50VGFibGVMaXN0U3RyZWFtcyhncmFudGVlOiBpYW0uSUdyYW50YWJsZSk6IGlhbS5HcmFudCB7XG4gICAgcmV0dXJuIHRoaXMuc3RyZWFtR3JhbnRzLmxpc3QoZ3JhbnRlZSk7XG4gIH1cblxuICAvKipcbiAgICogUGVybWl0cyBhbiBJQU0gcHJpbmNpcGFsIGFsbCBzdHJlYW0gZGF0YSByZWFkIG9wZXJhdGlvbnMgZm9yIHRoaXNcbiAgICogdGFibGUncyBzdHJlYW06XG4gICAqIERlc2NyaWJlU3RyZWFtLCBHZXRSZWNvcmRzLCBHZXRTaGFyZEl0ZXJhdG9yLCBMaXN0U3RyZWFtcy5cbiAgICpcbiAgICogQXBwcm9wcmlhdGUgZ3JhbnRzIHdpbGwgYWxzbyBiZSBhZGRlZCB0byB0aGUgY3VzdG9tZXItbWFuYWdlZCBLTVMga2V5XG4gICAqIGlmIG9uZSB3YXMgY29uZmlndXJlZC5cbiAgICpcbiAgICogQHBhcmFtIGdyYW50ZWUgVGhlIHByaW5jaXBhbCB0byBncmFudCBhY2Nlc3MgdG9cbiAgICovXG4gIHB1YmxpYyBncmFudFN0cmVhbVJlYWQoZ3JhbnRlZTogaWFtLklHcmFudGFibGUpOiBpYW0uR3JhbnQge1xuICAgIHJldHVybiB0aGlzLnN0cmVhbUdyYW50cy5yZWFkKGdyYW50ZWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFBlcm1pdHMgYW4gSUFNIHByaW5jaXBhbCBhbGwgZGF0YSB3cml0ZSBvcGVyYXRpb25zIHRvIHRoaXMgdGFibGU6XG4gICAqIEJhdGNoV3JpdGVJdGVtLCBQdXRJdGVtLCBVcGRhdGVJdGVtLCBEZWxldGVJdGVtLCBEZXNjcmliZVRhYmxlLlxuICAgKlxuICAgKiBBcHByb3ByaWF0ZSBncmFudHMgd2lsbCBhbHNvIGJlIGFkZGVkIHRvIHRoZSBjdXN0b21lci1tYW5hZ2VkIEtNUyBrZXlcbiAgICogaWYgb25lIHdhcyBjb25maWd1cmVkLlxuICAgKlxuICAgKiBAcGFyYW0gZ3JhbnRlZSBUaGUgcHJpbmNpcGFsIHRvIGdyYW50IGFjY2VzcyB0b1xuICAgKi9cbiAgcHVibGljIGdyYW50V3JpdGVEYXRhKGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlKTogaWFtLkdyYW50IHtcbiAgICByZXR1cm4gdGhpcy5ncmFudHMud3JpdGVEYXRhKGdyYW50ZWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFBlcm1pdHMgYW4gSUFNIHByaW5jaXBhbCB0byBhbGwgZGF0YSByZWFkL3dyaXRlIG9wZXJhdGlvbnMgdG8gdGhpcyB0YWJsZS5cbiAgICogQmF0Y2hHZXRJdGVtLCBHZXRSZWNvcmRzLCBHZXRTaGFyZEl0ZXJhdG9yLCBRdWVyeSwgR2V0SXRlbSwgU2NhbixcbiAgICogQmF0Y2hXcml0ZUl0ZW0sIFB1dEl0ZW0sIFVwZGF0ZUl0ZW0sIERlbGV0ZUl0ZW0sIERlc2NyaWJlVGFibGVcbiAgICpcbiAgICogQXBwcm9wcmlhdGUgZ3JhbnRzIHdpbGwgYWxzbyBiZSBhZGRlZCB0byB0aGUgY3VzdG9tZXItbWFuYWdlZCBLTVMga2V5XG4gICAqIGlmIG9uZSB3YXMgY29uZmlndXJlZC5cbiAgICpcbiAgICogQHBhcmFtIGdyYW50ZWUgVGhlIHByaW5jaXBhbCB0byBncmFudCBhY2Nlc3MgdG9cbiAgICovXG4gIHB1YmxpYyBncmFudFJlYWRXcml0ZURhdGEoZ3JhbnRlZTogaWFtLklHcmFudGFibGUpOiBpYW0uR3JhbnQge1xuICAgIHJldHVybiB0aGlzLmdyYW50cy5yZWFkV3JpdGVEYXRhKGdyYW50ZWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFBlcm1pdHMgYWxsIER5bmFtb0RCIG9wZXJhdGlvbnMgKFwiZHluYW1vZGI6KlwiKSB0byBhbiBJQU0gcHJpbmNpcGFsLlxuICAgKlxuICAgKiBBcHByb3ByaWF0ZSBncmFudHMgd2lsbCBhbHNvIGJlIGFkZGVkIHRvIHRoZSBjdXN0b21lci1tYW5hZ2VkIEtNUyBrZXlcbiAgICogaWYgb25lIHdhcyBjb25maWd1cmVkLlxuICAgKlxuICAgKiBAcGFyYW0gZ3JhbnRlZSBUaGUgcHJpbmNpcGFsIHRvIGdyYW50IGFjY2VzcyB0b1xuICAgKi9cbiAgcHVibGljIGdyYW50RnVsbEFjY2VzcyhncmFudGVlOiBpYW0uSUdyYW50YWJsZSkge1xuICAgIHJldHVybiB0aGlzLmdyYW50cy5mdWxsQWNjZXNzKGdyYW50ZWUpO1xuICB9XG5cbiAgcHVibGljIG1ldHJpYyhcbiAgICBtZXRyaWNOYW1lOiBzdHJpbmcsXG4gICAgcHJvcHM/OiBjbG91ZHdhdGNoLk1ldHJpY09wdGlvbnMsXG4gICk6IGNsb3Vkd2F0Y2guTWV0cmljIHtcbiAgICByZXR1cm4gbmV3IGNsb3Vkd2F0Y2guTWV0cmljKHtcbiAgICAgIG5hbWVzcGFjZTogXCJBV1MvRHluYW1vREJcIixcbiAgICAgIG1ldHJpY05hbWUsXG4gICAgICBkaW1lbnNpb25zTWFwOiB7XG4gICAgICAgIFRhYmxlTmFtZTogdGhpcy50YWJsZU5hbWUsXG4gICAgICB9LFxuICAgICAgLi4ucHJvcHMsXG4gICAgfSkuYXR0YWNoVG8odGhpcyk7XG4gIH1cblxuICAvKipcbiAgICogTWV0cmljIGZvciB0aGUgY29uc3VtZWQgcmVhZCBjYXBhY2l0eSB1bml0cyB0aGlzIHRhYmxlXG4gICAqXG4gICAqIEJ5IGRlZmF1bHQsIHRoZSBtZXRyaWMgd2lsbCBiZSBjYWxjdWxhdGVkIGFzIGEgc3VtIG92ZXIgYSBwZXJpb2Qgb2YgNSBtaW51dGVzLlxuICAgKiBZb3UgY2FuIGN1c3RvbWl6ZSB0aGlzIGJ5IHVzaW5nIHRoZSBgc3RhdGlzdGljYCBhbmQgYHBlcmlvZGAgcHJvcGVydGllcy5cbiAgICovXG4gIHB1YmxpYyBtZXRyaWNDb25zdW1lZFJlYWRDYXBhY2l0eVVuaXRzKFxuICAgIHByb3BzPzogY2xvdWR3YXRjaC5NZXRyaWNPcHRpb25zLFxuICApOiBjbG91ZHdhdGNoLk1ldHJpYyB7XG4gICAgcmV0dXJuIHRoaXMuY2FubmVkTWV0cmljKFxuICAgICAgRHluYW1vREJNZXRyaWNzLmNvbnN1bWVkUmVhZENhcGFjaXR5VW5pdHNTdW0sXG4gICAgICBwcm9wcyxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ldHJpYyBmb3IgdGhlIGNvbnN1bWVkIHdyaXRlIGNhcGFjaXR5IHVuaXRzIHRoaXMgdGFibGVcbiAgICpcbiAgICogQnkgZGVmYXVsdCwgdGhlIG1ldHJpYyB3aWxsIGJlIGNhbGN1bGF0ZWQgYXMgYSBzdW0gb3ZlciBhIHBlcmlvZCBvZiA1IG1pbnV0ZXMuXG4gICAqIFlvdSBjYW4gY3VzdG9taXplIHRoaXMgYnkgdXNpbmcgdGhlIGBzdGF0aXN0aWNgIGFuZCBgcGVyaW9kYCBwcm9wZXJ0aWVzLlxuICAgKi9cbiAgcHVibGljIG1ldHJpY0NvbnN1bWVkV3JpdGVDYXBhY2l0eVVuaXRzKFxuICAgIHByb3BzPzogY2xvdWR3YXRjaC5NZXRyaWNPcHRpb25zLFxuICApOiBjbG91ZHdhdGNoLk1ldHJpYyB7XG4gICAgcmV0dXJuIHRoaXMuY2FubmVkTWV0cmljKFxuICAgICAgRHluYW1vREJNZXRyaWNzLmNvbnN1bWVkV3JpdGVDYXBhY2l0eVVuaXRzU3VtLFxuICAgICAgcHJvcHMsXG4gICAgKTtcbiAgfVxuXG4gIC8qKiBAZGVwcmVjYXRlZCB1c2UgYG1ldHJpY1N5c3RlbUVycm9yc0Zvck9wZXJhdGlvbnNgLiAqL1xuICBwdWJsaWMgbWV0cmljU3lzdGVtRXJyb3JzKFxuICAgIHByb3BzPzogY2xvdWR3YXRjaC5NZXRyaWNPcHRpb25zLFxuICApOiBjbG91ZHdhdGNoLk1ldHJpYyB7XG4gICAgaWYgKCFwcm9wcz8uZGltZW5zaW9uc01hcD8uT3BlcmF0aW9uKSB7XG4gICAgICAvLyAnT3BlcmF0aW9uJyBtdXN0IGJlIHBhc3NlZCBiZWNhdXNlIGl0cyBhbiBvcGVyYXRpb25hbCBtZXRyaWMuXG4gICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICBcIidPcGVyYXRpb24nIGRpbWVuc2lvbiBtdXN0IGJlIHBhc3NlZCBmb3IgdGhlICdTeXN0ZW1FcnJvcnMnIG1ldHJpYy5cIixcbiAgICAgICAgdGhpcyxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgZGltZW5zaW9uc01hcCA9IHtcbiAgICAgIFRhYmxlTmFtZTogdGhpcy50YWJsZU5hbWUsXG4gICAgICAuLi5wcm9wcz8uZGltZW5zaW9uc01hcCxcbiAgICB9O1xuXG4gICAgcmV0dXJuIHRoaXMubWV0cmljKFwiU3lzdGVtRXJyb3JzXCIsIHtcbiAgICAgIHN0YXRpc3RpYzogXCJzdW1cIixcbiAgICAgIC4uLnByb3BzLFxuICAgICAgZGltZW5zaW9uc01hcCxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNZXRyaWMgZm9yIHRoZSB1c2VyIGVycm9ycy4gTm90ZSB0aGF0IHRoaXMgbWV0cmljIHJlcG9ydHMgdXNlciBlcnJvcnMgYWNyb3NzIGFsbFxuICAgKiB0aGUgdGFibGVzIGluIHRoZSBhY2NvdW50IGFuZCByZWdpb24gdGhlIHRhYmxlIHJlc2lkZXMgaW4uXG4gICAqXG4gICAqIEJ5IGRlZmF1bHQsIHRoZSBtZXRyaWMgd2lsbCBiZSBjYWxjdWxhdGVkIGFzIGEgc3VtIG92ZXIgYSBwZXJpb2Qgb2YgNSBtaW51dGVzLlxuICAgKiBZb3UgY2FuIGN1c3RvbWl6ZSB0aGlzIGJ5IHVzaW5nIHRoZSBgc3RhdGlzdGljYCBhbmQgYHBlcmlvZGAgcHJvcGVydGllcy5cbiAgICovXG4gIHB1YmxpYyBtZXRyaWNVc2VyRXJyb3JzKHByb3BzPzogY2xvdWR3YXRjaC5NZXRyaWNPcHRpb25zKTogY2xvdWR3YXRjaC5NZXRyaWMge1xuICAgIGlmIChwcm9wcz8uZGltZW5zaW9uc01hcCkge1xuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgXCInZGltZW5zaW9uc01hcCcgaXMgbm90IHN1cHBvcnRlZCBmb3IgdGhlICdVc2VyRXJyb3JzJyBtZXRyaWNcIixcbiAgICAgICAgdGhpcyxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gb3ZlcnJpZGluZyAnZGltZW5zaW9ucycgaGVyZSBiZWNhdXNlIHRoaXMgbWV0cmljIGlzIGFuIGFjY291bnQgbWV0cmljLlxuICAgIC8vIHNlZSAnVXNlckVycm9ycycgaW4gaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2FtYXpvbmR5bmFtb2RiL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9tZXRyaWNzLWRpbWVuc2lvbnMuaHRtbFxuICAgIHJldHVybiB0aGlzLm1ldHJpYyhcIlVzZXJFcnJvcnNcIiwge1xuICAgICAgc3RhdGlzdGljOiBcInN1bVwiLFxuICAgICAgLi4ucHJvcHMsXG4gICAgICBkaW1lbnNpb25zTWFwOiB7fSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNZXRyaWMgZm9yIHRoZSBjb25kaXRpb25hbCBjaGVjayBmYWlsZWQgcmVxdWVzdHMgdGhpcyB0YWJsZVxuICAgKlxuICAgKiBCeSBkZWZhdWx0LCB0aGUgbWV0cmljIHdpbGwgYmUgY2FsY3VsYXRlZCBhcyBhIHN1bSBvdmVyIGEgcGVyaW9kIG9mIDUgbWludXRlcy5cbiAgICogWW91IGNhbiBjdXN0b21pemUgdGhpcyBieSB1c2luZyB0aGUgYHN0YXRpc3RpY2AgYW5kIGBwZXJpb2RgIHByb3BlcnRpZXMuXG4gICAqL1xuICBwdWJsaWMgbWV0cmljQ29uZGl0aW9uYWxDaGVja0ZhaWxlZFJlcXVlc3RzKFxuICAgIHByb3BzPzogY2xvdWR3YXRjaC5NZXRyaWNPcHRpb25zLFxuICApOiBjbG91ZHdhdGNoLk1ldHJpYyB7XG4gICAgcmV0dXJuIHRoaXMubWV0cmljKFwiQ29uZGl0aW9uYWxDaGVja0ZhaWxlZFJlcXVlc3RzXCIsIHtcbiAgICAgIHN0YXRpc3RpYzogXCJzdW1cIixcbiAgICAgIC4uLnByb3BzLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqIEBkZXByZWNhdGVkIERvIG5vdCB1c2UgdGhpcyBmdW5jdGlvbi4gSXQgcmV0dXJucyBhbiBpbnZhbGlkIG1ldHJpYy4gVXNlIGBtZXRyaWNUaHJvdHRsZWRSZXF1ZXN0c0Zvck9wZXJhdGlvbmAgaW5zdGVhZC4gKi9cbiAgcHVibGljIG1ldHJpY1Rocm90dGxlZFJlcXVlc3RzKFxuICAgIHByb3BzPzogY2xvdWR3YXRjaC5NZXRyaWNPcHRpb25zLFxuICApOiBjbG91ZHdhdGNoLk1ldHJpYyB7XG4gICAgcmV0dXJuIHRoaXMubWV0cmljKFwiVGhyb3R0bGVkUmVxdWVzdHNcIiwgeyBzdGF0aXN0aWM6IFwic3VtXCIsIC4uLnByb3BzIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ldHJpYyBmb3IgdGhlIHN1Y2Nlc3NmdWwgcmVxdWVzdCBsYXRlbmN5IHRoaXMgdGFibGUuXG4gICAqXG4gICAqIEJ5IGRlZmF1bHQsIHRoZSBtZXRyaWMgd2lsbCBiZSBjYWxjdWxhdGVkIGFzIGFuIGF2ZXJhZ2Ugb3ZlciBhIHBlcmlvZCBvZiA1IG1pbnV0ZXMuXG4gICAqIFlvdSBjYW4gY3VzdG9taXplIHRoaXMgYnkgdXNpbmcgdGhlIGBzdGF0aXN0aWNgIGFuZCBgcGVyaW9kYCBwcm9wZXJ0aWVzLlxuICAgKi9cbiAgcHVibGljIG1ldHJpY1N1Y2Nlc3NmdWxSZXF1ZXN0TGF0ZW5jeShcbiAgICBwcm9wcz86IGNsb3Vkd2F0Y2guTWV0cmljT3B0aW9ucyxcbiAgKTogY2xvdWR3YXRjaC5NZXRyaWMge1xuICAgIGlmICghcHJvcHM/LmRpbWVuc2lvbnNNYXA/Lk9wZXJhdGlvbikge1xuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgXCInT3BlcmF0aW9uJyBkaW1lbnNpb24gbXVzdCBiZSBwYXNzZWQgZm9yIHRoZSAnU3VjY2Vzc2Z1bFJlcXVlc3RMYXRlbmN5JyBtZXRyaWMuXCIsXG4gICAgICAgIHRoaXMsXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IGRpbWVuc2lvbnNNYXAgPSB7XG4gICAgICBUYWJsZU5hbWU6IHRoaXMudGFibGVOYW1lLFxuICAgICAgT3BlcmF0aW9uOiBwcm9wcy5kaW1lbnNpb25zTWFwLk9wZXJhdGlvbixcbiAgICB9O1xuXG4gICAgcmV0dXJuIG5ldyBjbG91ZHdhdGNoLk1ldHJpYyh7XG4gICAgICAuLi5EeW5hbW9EQk1ldHJpY3Muc3VjY2Vzc2Z1bFJlcXVlc3RMYXRlbmN5QXZlcmFnZShkaW1lbnNpb25zTWFwKSxcbiAgICAgIC4uLnByb3BzLFxuICAgICAgZGltZW5zaW9uc01hcCxcbiAgICB9KS5hdHRhY2hUbyh0aGlzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIb3cgbWFueSByZXF1ZXN0cyBhcmUgdGhyb3R0bGVkIG9uIHRoaXMgdGFibGUsIGZvciB0aGUgZ2l2ZW4gb3BlcmF0aW9uXG4gICAqXG4gICAqIERlZmF1bHQ6IHN1bSBvdmVyIDUgbWludXRlc1xuICAgKi9cbiAgcHVibGljIG1ldHJpY1Rocm90dGxlZFJlcXVlc3RzRm9yT3BlcmF0aW9uKFxuICAgIG9wZXJhdGlvbjogc3RyaW5nLFxuICAgIHByb3BzPzogY2xvdWR3YXRjaC5NZXRyaWNPcHRpb25zLFxuICApOiBjbG91ZHdhdGNoLk1ldHJpYyB7XG4gICAgcmV0dXJuIG5ldyBjbG91ZHdhdGNoLk1ldHJpYyh7XG4gICAgICAuLi5EeW5hbW9EQk1ldHJpY3MudGhyb3R0bGVkUmVxdWVzdHNTdW0oe1xuICAgICAgICBPcGVyYXRpb246IG9wZXJhdGlvbixcbiAgICAgICAgVGFibGVOYW1lOiB0aGlzLnRhYmxlTmFtZSxcbiAgICAgIH0pLFxuICAgICAgLi4ucHJvcHMsXG4gICAgfSkuYXR0YWNoVG8odGhpcyk7XG4gIH1cblxuICAvKipcbiAgICogSG93IG1hbnkgcmVxdWVzdHMgYXJlIHRocm90dGxlZCBvbiB0aGlzIHRhYmxlLlxuICAgKlxuICAgKiBUaGlzIHdpbGwgc3VtIGVycm9ycyBhY3Jvc3MgYWxsIHBvc3NpYmxlIG9wZXJhdGlvbnMuXG4gICAqIE5vdGUgdGhhdCBieSBkZWZhdWx0LCBlYWNoIGluZGl2aWR1YWwgbWV0cmljIHdpbGwgYmUgY2FsY3VsYXRlZCBhcyBhIHN1bSBvdmVyIGEgcGVyaW9kIG9mIDUgbWludXRlcy5cbiAgICogWW91IGNhbiBjdXN0b21pemUgdGhpcyBieSB1c2luZyB0aGUgYHN0YXRpc3RpY2AgYW5kIGBwZXJpb2RgIHByb3BlcnRpZXMuXG4gICAqL1xuICBwdWJsaWMgbWV0cmljVGhyb3R0bGVkUmVxdWVzdHNGb3JPcGVyYXRpb25zKFxuICAgIHByb3BzPzogT3BlcmF0aW9uc01ldHJpY09wdGlvbnMsXG4gICk6IGNsb3Vkd2F0Y2guSU1ldHJpYyB7XG4gICAgcmV0dXJuIHRoaXMuc3VtTWV0cmljc0Zvck9wZXJhdGlvbnMoXG4gICAgICBcIlRocm90dGxlZFJlcXVlc3RzXCIsXG4gICAgICBcIlN1bSBvZiB0aHJvdHRsZWQgcmVxdWVzdHMgYWNyb3NzIGFsbCBvcGVyYXRpb25zXCIsXG4gICAgICBwcm9wcyxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ldHJpYyBmb3IgdGhlIHN5c3RlbSBlcnJvcnMgdGhpcyB0YWJsZS5cbiAgICpcbiAgICogVGhpcyB3aWxsIHN1bSBlcnJvcnMgYWNyb3NzIGFsbCBwb3NzaWJsZSBvcGVyYXRpb25zLlxuICAgKiBOb3RlIHRoYXQgYnkgZGVmYXVsdCwgZWFjaCBpbmRpdmlkdWFsIG1ldHJpYyB3aWxsIGJlIGNhbGN1bGF0ZWQgYXMgYSBzdW0gb3ZlciBhIHBlcmlvZCBvZiA1IG1pbnV0ZXMuXG4gICAqIFlvdSBjYW4gY3VzdG9taXplIHRoaXMgYnkgdXNpbmcgdGhlIGBzdGF0aXN0aWNgIGFuZCBgcGVyaW9kYCBwcm9wZXJ0aWVzLlxuICAgKi9cbiAgcHVibGljIG1ldHJpY1N5c3RlbUVycm9yc0Zvck9wZXJhdGlvbnMoXG4gICAgcHJvcHM/OiBTeXN0ZW1FcnJvcnNGb3JPcGVyYXRpb25zTWV0cmljT3B0aW9ucyxcbiAgKTogY2xvdWR3YXRjaC5JTWV0cmljIHtcbiAgICByZXR1cm4gdGhpcy5zdW1NZXRyaWNzRm9yT3BlcmF0aW9ucyhcbiAgICAgIFwiU3lzdGVtRXJyb3JzXCIsXG4gICAgICBcIlN1bSBvZiBlcnJvcnMgYWNyb3NzIGFsbCBvcGVyYXRpb25zXCIsXG4gICAgICBwcm9wcyxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG1hdGggZXhwcmVzc2lvbiBmb3Igb3BlcmF0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIG1ldHJpY05hbWUgVGhlIG1ldHJpYyBuYW1lLlxuICAgKiBAcGFyYW0gZXhwcmVzc2lvbkxhYmVsIExhYmVsIGZvciBleHByZXNzaW9uXG4gICAqIEBwYXJhbSBwcm9wcyBvcGVyYXRpb24gbGlzdFxuICAgKi9cbiAgcHJpdmF0ZSBzdW1NZXRyaWNzRm9yT3BlcmF0aW9ucyhcbiAgICBtZXRyaWNOYW1lOiBzdHJpbmcsXG4gICAgZXhwcmVzc2lvbkxhYmVsOiBzdHJpbmcsXG4gICAgcHJvcHM/OiBPcGVyYXRpb25zTWV0cmljT3B0aW9ucyxcbiAgKTogY2xvdWR3YXRjaC5JTWV0cmljIHtcbiAgICBpZiAocHJvcHM/LmRpbWVuc2lvbnNNYXA/Lk9wZXJhdGlvbikge1xuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgXCJUaGUgT3BlcmF0aW9uIGRpbWVuc2lvbiBpcyBub3Qgc3VwcG9ydGVkLiBVc2UgdGhlICdvcGVyYXRpb25zJyBwcm9wZXJ0eS5cIixcbiAgICAgICAgdGhpcyxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3Qgb3BlcmF0aW9ucyA9IHByb3BzPy5vcGVyYXRpb25zID8/IE9iamVjdC52YWx1ZXMoT3BlcmF0aW9uKTtcblxuICAgIGNvbnN0IHZhbHVlcyA9IHRoaXMuY3JlYXRlTWV0cmljc0Zvck9wZXJhdGlvbnMobWV0cmljTmFtZSwgb3BlcmF0aW9ucywge1xuICAgICAgc3RhdGlzdGljOiBcInN1bVwiLFxuICAgICAgLi4ucHJvcHMsXG4gICAgfSk7XG5cbiAgICBjb25zdCBzdW0gPSBuZXcgY2xvdWR3YXRjaC5NYXRoRXhwcmVzc2lvbih7XG4gICAgICBleHByZXNzaW9uOiBgJHtPYmplY3Qua2V5cyh2YWx1ZXMpLmpvaW4oXCIgKyBcIil9YCxcbiAgICAgIHVzaW5nTWV0cmljczogeyAuLi52YWx1ZXMgfSxcbiAgICAgIGNvbG9yOiBwcm9wcz8uY29sb3IsXG4gICAgICBsYWJlbDogZXhwcmVzc2lvbkxhYmVsLFxuICAgICAgcGVyaW9kOiBwcm9wcz8ucGVyaW9kLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHN1bTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBtYXAgb2YgbWV0cmljcyB0aGF0IGNhbiBiZSB1c2VkIGluIGEgbWF0aCBleHByZXNzaW9uLlxuICAgKlxuICAgKiBVc2luZyB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoaXMgZnVuY3Rpb24gYXMgdGhlIGB1c2luZ01ldHJpY3NgIHByb3BlcnR5IGluIGBjbG91ZHdhdGNoLk1hdGhFeHByZXNzaW9uYCBhbGxvd3MgeW91IHRvXG4gICAqIHVzZSB0aGUga2V5cyBvZiB0aGlzIG1hcCBhcyBtZXRyaWMgbmFtZXMgaW5zaWRlIHlvdSBleHByZXNzaW9uLlxuICAgKlxuICAgKiBAcGFyYW0gbWV0cmljTmFtZSBUaGUgbWV0cmljIG5hbWUuXG4gICAqIEBwYXJhbSBvcGVyYXRpb25zIFRoZSBsaXN0IG9mIG9wZXJhdGlvbnMgdG8gY3JlYXRlIG1ldHJpY3MgZm9yLlxuICAgKiBAcGFyYW0gcHJvcHMgUHJvcGVydGllcyBmb3IgdGhlIGluZGl2aWR1YWwgbWV0cmljcy5cbiAgICogQHBhcmFtIG1ldHJpY05hbWVNYXBwZXIgTWFwcGVyIGZ1bmN0aW9uIHRvIGFsbG93IGNvbnRyb2xsaW5nIHRoZSBpbmRpdmlkdWFsIG1ldHJpYyBuYW1lIHBlciBvcGVyYXRpb24uXG4gICAqL1xuICBwcml2YXRlIGNyZWF0ZU1ldHJpY3NGb3JPcGVyYXRpb25zKFxuICAgIG1ldHJpY05hbWU6IHN0cmluZyxcbiAgICBvcGVyYXRpb25zOiBPcGVyYXRpb25bXSxcbiAgICBwcm9wcz86IGNsb3Vkd2F0Y2guTWV0cmljT3B0aW9ucyxcbiAgICBtZXRyaWNOYW1lTWFwcGVyPzogKG9wOiBPcGVyYXRpb24pID0+IHN0cmluZyxcbiAgKTogUmVjb3JkPHN0cmluZywgY2xvdWR3YXRjaC5JTWV0cmljPiB7XG4gICAgY29uc3QgbWV0cmljczogUmVjb3JkPHN0cmluZywgY2xvdWR3YXRjaC5JTWV0cmljPiA9IHt9O1xuXG4gICAgY29uc3QgbWFwcGVyID0gbWV0cmljTmFtZU1hcHBlciA/PyAoKG9wKSA9PiBvcC50b0xvd2VyQ2FzZSgpKTtcblxuICAgIGlmIChwcm9wcz8uZGltZW5zaW9uc01hcD8uT3BlcmF0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICBcIkludmFsaWQgcHJvcGVydGllcy4gT3BlcmF0aW9uIGRpbWVuc2lvbiBpcyBub3Qgc3VwcG9ydGVkIHdoZW4gY2FsY3VsYXRpbmcgb3BlcmF0aW9uYWwgbWV0cmljc1wiLFxuICAgICAgICB0aGlzLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IG9wZXJhdGlvbiBvZiBvcGVyYXRpb25zKSB7XG4gICAgICBjb25zdCBtZXRyaWMgPSB0aGlzLm1ldHJpYyhtZXRyaWNOYW1lLCB7XG4gICAgICAgIC4uLnByb3BzLFxuICAgICAgICBkaW1lbnNpb25zTWFwOiB7XG4gICAgICAgICAgVGFibGVOYW1lOiB0aGlzLnRhYmxlTmFtZSxcbiAgICAgICAgICBPcGVyYXRpb246IG9wZXJhdGlvbixcbiAgICAgICAgICAuLi5wcm9wcz8uZGltZW5zaW9uc01hcCxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBvcGVyYXRpb25NZXRyaWNOYW1lID0gbWFwcGVyKG9wZXJhdGlvbik7XG4gICAgICBjb25zdCBmaXJzdENoYXIgPSBvcGVyYXRpb25NZXRyaWNOYW1lLmNoYXJBdCgwKTtcblxuICAgICAgaWYgKGZpcnN0Q2hhciA9PT0gZmlyc3RDaGFyLnRvVXBwZXJDYXNlKCkpIHtcbiAgICAgICAgLy8gaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkV2F0Y2gvbGF0ZXN0L21vbml0b3JpbmcvdXNpbmctbWV0cmljLW1hdGguaHRtbCNtZXRyaWMtbWF0aC1zeW50YXhcbiAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgICBgTWFwcGVyIGdlbmVyYXRlZCBhbiBpbGxlZ2FsIG9wZXJhdGlvbiBtZXRyaWMgbmFtZTogJHtvcGVyYXRpb25NZXRyaWNOYW1lfS4gTXVzdCBzdGFydCB3aXRoIGEgbG93ZXJjYXNlIGxldHRlcmAsXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgbWV0cmljc1tvcGVyYXRpb25NZXRyaWNOYW1lXSA9IG1ldHJpYztcbiAgICB9XG5cbiAgICByZXR1cm4gbWV0cmljcztcbiAgfVxuXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBnZXQgaGFzSW5kZXgoKTogYm9vbGVhbjtcblxuICBwcml2YXRlIGNhbm5lZE1ldHJpYyhcbiAgICBmbjogKGRpbXM6IHsgVGFibGVOYW1lOiBzdHJpbmcgfSkgPT4gY2xvdWR3YXRjaC5NZXRyaWNQcm9wcyxcbiAgICBwcm9wcz86IGNsb3Vkd2F0Y2guTWV0cmljT3B0aW9ucyxcbiAgKTogY2xvdWR3YXRjaC5NZXRyaWMge1xuICAgIHJldHVybiBuZXcgY2xvdWR3YXRjaC5NZXRyaWMoe1xuICAgICAgLi4uZm4oeyBUYWJsZU5hbWU6IHRoaXMudGFibGVOYW1lIH0pLFxuICAgICAgLi4ucHJvcHMsXG4gICAgfSkuYXR0YWNoVG8odGhpcyk7XG4gIH1cbn1cblxuLyoqXG4gKiBQcm92aWRlcyBhIER5bmFtb0RCIHRhYmxlLlxuICovXG5leHBvcnQgY2xhc3MgVGFibGUgZXh0ZW5kcyBUYWJsZUJhc2Uge1xuICAvKipcbiAgICogUGVybWl0cyBhbiBJQU0gUHJpbmNpcGFsIHRvIGxpc3QgYWxsIER5bmFtb0RCIFN0cmVhbXMuXG4gICAqIEBkZXByZWNhdGVkIFVzZSBgI2dyYW50VGFibGVMaXN0U3RyZWFtc2AgZm9yIG1vcmUgZ3JhbnVsYXIgcGVybWlzc2lvblxuICAgKiBAcGFyYW0gZ3JhbnRlZSBUaGUgcHJpbmNpcGFsIChuby1vcCBpZiB1bmRlZmluZWQpXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGdyYW50TGlzdFN0cmVhbXMoZ3JhbnRlZTogaWFtLklHcmFudGFibGUpOiBpYW0uR3JhbnQge1xuICAgIHJldHVybiBpYW0uR3JhbnQuYWRkVG9QcmluY2lwYWwoe1xuICAgICAgZ3JhbnRlZSxcbiAgICAgIGFjdGlvbnM6IFtcImR5bmFtb2RiOkxpc3RTdHJlYW1zXCJdLFxuICAgICAgcmVzb3VyY2VBcm5zOiBbXCIqXCJdLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBUYWJsZSBjb25zdHJ1Y3QgdGhhdCByZXByZXNlbnRzIGFuIGV4dGVybmFsIHRhYmxlIHZpYSB0YWJsZSBuYW1lLlxuICAgKlxuICAgKiBAcGFyYW0gc2NvcGUgVGhlIHBhcmVudCBjcmVhdGluZyBjb25zdHJ1Y3QgKHVzdWFsbHkgYHRoaXNgKS5cbiAgICogQHBhcmFtIGlkIFRoZSBjb25zdHJ1Y3QncyBuYW1lLlxuICAgKiBAcGFyYW0gdGFibGVOYW1lIFRoZSB0YWJsZSdzIG5hbWUuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21UYWJsZU5hbWUoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIHRhYmxlTmFtZTogc3RyaW5nLFxuICApOiBJVGFibGUge1xuICAgIHJldHVybiBUYWJsZS5mcm9tVGFibGVBdHRyaWJ1dGVzKHNjb3BlLCBpZCwgeyB0YWJsZU5hbWUgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIFRhYmxlIGNvbnN0cnVjdCB0aGF0IHJlcHJlc2VudHMgYW4gZXh0ZXJuYWwgdGFibGUgdmlhIHRhYmxlIGFybi5cbiAgICpcbiAgICogQHBhcmFtIHNjb3BlIFRoZSBwYXJlbnQgY3JlYXRpbmcgY29uc3RydWN0ICh1c3VhbGx5IGB0aGlzYCkuXG4gICAqIEBwYXJhbSBpZCBUaGUgY29uc3RydWN0J3MgbmFtZS5cbiAgICogQHBhcmFtIHRhYmxlQXJuIFRoZSB0YWJsZSdzIEFSTi5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbVRhYmxlQXJuKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICB0YWJsZUFybjogc3RyaW5nLFxuICApOiBJVGFibGUge1xuICAgIHJldHVybiBUYWJsZS5mcm9tVGFibGVBdHRyaWJ1dGVzKHNjb3BlLCBpZCwgeyB0YWJsZUFybiB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgVGFibGUgY29uc3RydWN0IHRoYXQgcmVwcmVzZW50cyBhbiBleHRlcm5hbCB0YWJsZS5cbiAgICpcbiAgICogQHBhcmFtIHNjb3BlIFRoZSBwYXJlbnQgY3JlYXRpbmcgY29uc3RydWN0ICh1c3VhbGx5IGB0aGlzYCkuXG4gICAqIEBwYXJhbSBpZCBUaGUgY29uc3RydWN0J3MgbmFtZS5cbiAgICogQHBhcmFtIGF0dHJzIEEgYFRhYmxlQXR0cmlidXRlc2Agb2JqZWN0LlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tVGFibGVBdHRyaWJ1dGVzKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBhdHRyczogVGFibGVBdHRyaWJ1dGVzLFxuICApOiBJVGFibGUge1xuICAgIGNsYXNzIEltcG9ydCBleHRlbmRzIFRhYmxlQmFzZSB7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgdGFibGVOYW1lOiBzdHJpbmc7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgdGFibGVBcm46IHN0cmluZztcbiAgICAgIHB1YmxpYyByZWFkb25seSB0YWJsZVN0cmVhbUFybj86IHN0cmluZztcbiAgICAgIHB1YmxpYyByZWFkb25seSBlbmNyeXB0aW9uS2V5Pzoga21zLklLZXk7XG4gICAgICBwdWJsaWMgcmVzb3VyY2VQb2xpY3k/OiBpYW0uUG9saWN5RG9jdW1lbnQ7XG4gICAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgaGFzSW5kZXggPVxuICAgICAgICAoYXR0cnMuZ3JhbnRJbmRleFBlcm1pc3Npb25zID8/IGZhbHNlKSB8fFxuICAgICAgICAoYXR0cnMuZ2xvYmFsSW5kZXhlcyA/PyBbXSkubGVuZ3RoID4gMCB8fFxuICAgICAgICAoYXR0cnMubG9jYWxJbmRleGVzID8/IFtdKS5sZW5ndGggPiAwO1xuICAgICAgcHVibGljIHJlYWRvbmx5IHJlZ2lvbnMgPSBbXTtcblxuICAgICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByb3BzOiBBd3NDb25zdHJ1Y3RQcm9wcyxcbiAgICAgICAgX3RhYmxlQXJuOiBzdHJpbmcsXG4gICAgICAgIHRhYmxlTmFtZTogc3RyaW5nLFxuICAgICAgICB0YWJsZVN0cmVhbUFybj86IHN0cmluZyxcbiAgICAgICkge1xuICAgICAgICBzdXBlcihzY29wZSwgaWQsIHByb3BzKTtcbiAgICAgICAgdGhpcy50YWJsZUFybiA9IF90YWJsZUFybjtcbiAgICAgICAgdGhpcy50YWJsZU5hbWUgPSB0YWJsZU5hbWU7XG4gICAgICAgIHRoaXMudGFibGVTdHJlYW1Bcm4gPSB0YWJsZVN0cmVhbUFybjtcbiAgICAgICAgdGhpcy5lbmNyeXB0aW9uS2V5ID0gYXR0cnMuZW5jcnlwdGlvbktleTtcbiAgICAgIH1cblxuICAgICAgcHVibGljIGFkZFRvUmVzb3VyY2VQb2xpY3koXG4gICAgICAgIF9zdGF0ZW1lbnQ6IGlhbS5Qb2xpY3lTdGF0ZW1lbnQsXG4gICAgICApOiBpYW0uQWRkVG9SZXNvdXJjZVBvbGljeVJlc3VsdCB7XG4gICAgICAgIC8vIEltcG9ydGVkIHRhYmxlcyBjYW5ub3QgaGF2ZSByZXNvdXJjZSBwb2xpY2llcyBtb2RpZmllZFxuICAgICAgICByZXR1cm4geyBzdGF0ZW1lbnRBZGRlZDogZmFsc2UgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgbmFtZTogc3RyaW5nO1xuICAgIGxldCBhcm46IHN0cmluZztcbiAgICBjb25zdCBzdGFjayA9IEF3c1N0YWNrLm9mQXdzQ29uc3RydWN0KHNjb3BlKTtcbiAgICBpZiAoIWF0dHJzLnRhYmxlTmFtZSkge1xuICAgICAgaWYgKCFhdHRycy50YWJsZUFybikge1xuICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICAgIFwiT25lIG9mIHRhYmxlTmFtZSBvciB0YWJsZUFybiBpcyByZXF1aXJlZCFcIixcbiAgICAgICAgICBzY29wZSxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgYXJuID0gYXR0cnMudGFibGVBcm47XG4gICAgICBjb25zdCBtYXliZVRhYmxlTmFtZSA9IHN0YWNrLnNwbGl0QXJuKFxuICAgICAgICBhdHRycy50YWJsZUFybixcbiAgICAgICAgQXJuRm9ybWF0LlNMQVNIX1JFU09VUkNFX05BTUUsXG4gICAgICApLnJlc291cmNlTmFtZTtcbiAgICAgIGlmICghbWF5YmVUYWJsZU5hbWUpIHtcbiAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgICBcIkFSTiBmb3IgRHluYW1vREIgdGFibGUgbXVzdCBiZSBpbiB0aGUgZm9ybTogYXJuOjxwYXJ0aXRpb24+OmR5bmFtb2RiOjxyZWdpb24+OjxhY2NvdW50Pjp0YWJsZS88dGFibGUtbmFtZT5cIixcbiAgICAgICAgICBzY29wZSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIG5hbWUgPSBtYXliZVRhYmxlTmFtZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGF0dHJzLnRhYmxlQXJuKSB7XG4gICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgICAgXCJPbmx5IG9uZSBvZiB0YWJsZUFybiBvciB0YWJsZU5hbWUgY2FuIGJlIHByb3ZpZGVkXCIsXG4gICAgICAgICAgc2NvcGUsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBuYW1lID0gYXR0cnMudGFibGVOYW1lO1xuICAgICAgYXJuID0gc3RhY2suZm9ybWF0QXJuKHtcbiAgICAgICAgc2VydmljZTogXCJkeW5hbW9kYlwiLFxuICAgICAgICByZXNvdXJjZTogXCJ0YWJsZVwiLFxuICAgICAgICByZXNvdXJjZU5hbWU6IGF0dHJzLnRhYmxlTmFtZSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgSW1wb3J0KFxuICAgICAgeyBlbnZpcm9ubWVudEZyb21Bcm46IGFybiB9LFxuICAgICAgYXJuLFxuICAgICAgbmFtZSxcbiAgICAgIGF0dHJzLnRhYmxlU3RyZWFtQXJuLFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgcmVhZG9ubHkgZW5jcnlwdGlvbktleT86IGttcy5JS2V5O1xuXG4gIC8qKlxuICAgKiBSZXNvdXJjZSBwb2xpY3kgdG8gYXNzaWduIHRvIER5bmFtb0RCIFRhYmxlLlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1wcm9wZXJ0aWVzLWR5bmFtb2RiLXRhYmxlLXJlc291cmNlcG9saWN5Lmh0bWxcbiAgICogQGRlZmF1bHQgLSBObyByZXNvdXJjZSBwb2xpY3kgc3RhdGVtZW50cyBhcmUgYWRkZWQgdG8gdGhlIGNyZWF0ZWQgdGFibGUuXG4gICAqL1xuICBwdWJsaWMgcmVzb3VyY2VQb2xpY3k/OiBpYW0uUG9saWN5RG9jdW1lbnQ7XG4gIHB1YmxpYyByZWFkb25seSB0YWJsZUFybjogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgdGFibGVOYW1lOiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSB0YWJsZVN0cmVhbUFybjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgYXR0cmlidXRlRGVmaW5pdGlvbnNJbnRlcm5hbCA9XG4gICAgbmV3IEFycmF5PGR5bmFtb2RiVGFibGUuRHluYW1vZGJUYWJsZUF0dHJpYnV0ZT4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBnbG9iYWxTZWNvbmRhcnlJbmRleGVzSW50ZXJuYWwgPSBuZXcgQXJyYXk8XG4gICAgZHluYW1vZGJUYWJsZS5EeW5hbW9kYlRhYmxlR2xvYmFsU2Vjb25kYXJ5SW5kZXggJiB7XG4gICAgICBjb250cmlidXRvckluc2lnaHRzU3BlY2lmaWNhdGlvbj86IENvbnRyaWJ1dG9ySW5zaWdodHNTcGVjaWZpY2F0aW9uO1xuICAgIH1cbiAgPigpO1xuICBwcml2YXRlIHJlYWRvbmx5IGxvY2FsU2Vjb25kYXJ5SW5kZXhlc0ludGVybmFsID1cbiAgICBuZXcgQXJyYXk8ZHluYW1vZGJUYWJsZS5EeW5hbW9kYlRhYmxlTG9jYWxTZWNvbmRhcnlJbmRleD4oKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IHNlY29uZGFyeUluZGV4U2NoZW1hcyA9IG5ldyBNYXA8c3RyaW5nLCBTY2hlbWFPcHRpb25zPigpO1xuICBwcml2YXRlIHJlYWRvbmx5IG5vbktleUF0dHJpYnV0ZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IHRhYmxlUGFydGl0aW9uS2V5OiBBdHRyaWJ1dGU7XG4gIHByaXZhdGUgcmVhZG9ubHkgdGFibGVTb3J0S2V5PzogQXR0cmlidXRlO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgYmlsbGluZ01vZGU6IEJpbGxpbmdNb2RlO1xuICBwcml2YXRlIHJlYWRvbmx5IHRhYmxlU2NhbGluZzogU2NhbGFibGVBdHRyaWJ1dGVQYWlyID0ge307XG4gIHByaXZhdGUgcmVhZG9ubHkgaW5kZXhTY2FsaW5nID0gbmV3IE1hcDxzdHJpbmcsIFNjYWxhYmxlQXR0cmlidXRlUGFpcj4oKTtcbiAgLy8gQ29tbWVudGluZyBvdXQgc2NhbGluZ1JvbGUgYXMgVGVycmFmb3JtIGF1dG8tY3JlYXRlcyBzZXJ2aWNlLWxpbmtlZCByb2xlc1xuICAvLyBVbmxpa2UgQVdTIENESyBDbG91ZEZvcm1hdGlvbiwgVGVycmFmb3JtIEFXUyBwcm92aWRlcidzIHJvbGVBcm4gaXMgb3B0aW9uYWxcbiAgLy8gYW5kIGRlZmF1bHRzIHRvIGFwcHJvcHJpYXRlIHNlcnZpY2UtbGlua2VkIHJvbGVzIHdoZW4gb21pdHRlZFxuICAvLyBwcml2YXRlIHJlYWRvbmx5IHNjYWxpbmdSb2xlOiBpYW0uSVJvbGU7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfcmVzb3VyY2U6IGR5bmFtb2RiVGFibGUuRHluYW1vZGJUYWJsZTtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVwbGljYXM6IGR5bmFtb2RiVGFibGUuRHluYW1vZGJUYWJsZVJlcGxpY2FbXSB8IHVuZGVmaW5lZDtcblxuICBwdWJsaWMgcmVhZG9ubHkgcmVnaW9ucz8gPSBuZXcgQXJyYXk8c3RyaW5nPigpO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBUYWJsZVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBwcm9wcyk7XG5cbiAgICBjb25zdCBwaHlzaWNhbFRhYmxlTmFtZSA9XG4gICAgICBwcm9wcy50YWJsZU5hbWUgPz8gdGhpcy5zdGFjay51bmlxdWVSZXNvdXJjZU5hbWUodGhpcyk7XG5cbiAgICBjb25zdCB7IHNzZVNwZWNpZmljYXRpb24sIGVuY3J5cHRpb25LZXkgfSA9IHRoaXMucGFyc2VFbmNyeXB0aW9uKHByb3BzKTtcbiAgICB0aGlzLmVuY3J5cHRpb25LZXkgPSBlbmNyeXB0aW9uS2V5O1xuXG4gICAgY29uc3QgcG9pbnRJblRpbWVSZWNvdmVyeSA9IHRoaXMucmVuZGVyUG9pbnRJblRpbWVSZWNvdmVyeShwcm9wcyk7XG5cbiAgICAvLyBlcnJvciBpZiBib3RoIHJlcGxpY2F0aW9uUmVnaW9ucyBhbmQgcmVwbGljYVNwZWNpZmljYXRpb24gYXJlIHNwZWNpZmllZFxuICAgIGlmIChwcm9wcy5yZXBsaWNhdGlvblJlZ2lvbnMgJiYgcHJvcHMucmVwbGljYVNwZWNpZmljYXRpb24pIHtcbiAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgIFwiWW91IGNhbm5vdCBzcGVjaWZ5IGJvdGggYHJlcGxpY2F0aW9uUmVnaW9uc2AgYW5kIGByZXBsaWNhU3BlY2lmaWNhdGlvbmBcIixcbiAgICAgICAgdGhpcyxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgbGV0IHN0cmVhbVNwZWNpZmljYXRpb246XG4gICAgICB8IHtcbiAgICAgICAgICBzdHJlYW1FbmFibGVkOiBib29sZWFuO1xuICAgICAgICAgIHN0cmVhbVZpZXdUeXBlPzogU3RyZWFtVmlld1R5cGU7XG4gICAgICAgIH1cbiAgICAgIHwgdW5kZWZpbmVkO1xuICAgIGlmIChcbiAgICAgIChwcm9wcy5yZXBsaWNhdGlvblJlZ2lvbnMgJiYgcHJvcHMucmVwbGljYXRpb25SZWdpb25zLmxlbmd0aCA+IDApIHx8XG4gICAgICAocHJvcHMucmVwbGljYVNwZWNpZmljYXRpb24gJiYgcHJvcHMucmVwbGljYVNwZWNpZmljYXRpb24ubGVuZ3RoID4gMClcbiAgICApIHtcbiAgICAgIGlmIChwcm9wcy5zdHJlYW0gJiYgcHJvcHMuc3RyZWFtICE9PSBTdHJlYW1WaWV3VHlwZS5ORVdfQU5EX09MRF9JTUFHRVMpIHtcbiAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgICBcImBzdHJlYW1gIG11c3QgYmUgc2V0IHRvIGBORVdfQU5EX09MRF9JTUFHRVNgIHdoZW4gc3BlY2lmeWluZyBgcmVwbGljYXRpb25SZWdpb25zYFwiLFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBzdHJlYW1TcGVjaWZpY2F0aW9uID0ge1xuICAgICAgICBzdHJlYW1FbmFibGVkOiB0cnVlLFxuICAgICAgICBzdHJlYW1WaWV3VHlwZTogU3RyZWFtVmlld1R5cGUuTkVXX0FORF9PTERfSU1BR0VTLFxuICAgICAgfTtcblxuICAgICAgdGhpcy5iaWxsaW5nTW9kZSA9IHByb3BzLmJpbGxpbmdNb2RlID8/IEJpbGxpbmdNb2RlLlBBWV9QRVJfUkVRVUVTVDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5iaWxsaW5nTW9kZSA9IHByb3BzLmJpbGxpbmdNb2RlID8/IEJpbGxpbmdNb2RlLlBST1ZJU0lPTkVEO1xuICAgICAgaWYgKHByb3BzLnN0cmVhbSkge1xuICAgICAgICBzdHJlYW1TcGVjaWZpY2F0aW9uID0ge1xuICAgICAgICAgIHN0cmVhbUVuYWJsZWQ6IHRydWUsXG4gICAgICAgICAgc3RyZWFtVmlld1R5cGU6IHByb3BzLnN0cmVhbSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy52YWxpZGF0ZVByb3Zpc2lvbmluZyhwcm9wcyk7XG4gICAgdGhpcy5hZGRLZXkocHJvcHMucGFydGl0aW9uS2V5LCBIQVNIX0tFWV9UWVBFKTtcbiAgICB0aGlzLnRhYmxlUGFydGl0aW9uS2V5ID0gcHJvcHMucGFydGl0aW9uS2V5O1xuICAgIGlmIChwcm9wcy5zb3J0S2V5KSB7XG4gICAgICB0aGlzLmFkZEtleShwcm9wcy5zb3J0S2V5LCBSQU5HRV9LRVlfVFlQRSk7XG4gICAgICB0aGlzLnRhYmxlU29ydEtleSA9IHByb3BzLnNvcnRLZXk7XG4gICAgfVxuXG4gICAgdGhpcy5fcmVwbGljYXMgPSB0aGlzLnJlbmRlclJlcGxpY2FzKFxuICAgICAgcHJvcHMucmVwbGljYXRpb25SZWdpb25zLFxuICAgICAgcHJvcHMucmVwbGljYVNwZWNpZmljYXRpb24sXG4gICAgKTtcbiAgICBpZiAodGhpcy5fcmVwbGljYXMgJiYgdGhpcy5fcmVwbGljYXMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5fcmVwbGljYXMuZm9yRWFjaCgocikgPT4ge1xuICAgICAgICAvLyBTYXZlIHJlZ2lvbmFsIGFybnMgZm9yIGdyYW50WHh4KCkgbWV0aG9kc1xuICAgICAgICB0aGlzLnJlZ2lvbnM/LnB1c2goci5yZWdpb25OYW1lKTtcbiAgICAgICAgdGhpcy5yZWdpb25hbEFybnMucHVzaChcbiAgICAgICAgICB0aGlzLnN0YWNrLmZvcm1hdEFybih7XG4gICAgICAgICAgICByZWdpb246IHIucmVnaW9uTmFtZSxcbiAgICAgICAgICAgIHNlcnZpY2U6IFwiZHluYW1vZGJcIixcbiAgICAgICAgICAgIHJlc291cmNlOiBcInRhYmxlXCIsXG4gICAgICAgICAgICByZXNvdXJjZU5hbWU6IHBoeXNpY2FsVGFibGVOYW1lLFxuICAgICAgICAgIH0pLFxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5fcmVzb3VyY2UgPSBuZXcgZHluYW1vZGJUYWJsZS5EeW5hbW9kYlRhYmxlKHRoaXMsIFwiUmVzb3VyY2VcIiwge1xuICAgICAgbmFtZTogcGh5c2ljYWxUYWJsZU5hbWUsXG4gICAgICBoYXNoS2V5OiB0aGlzLnRhYmxlUGFydGl0aW9uS2V5Lm5hbWUsXG4gICAgICByYW5nZUtleTogdGhpcy50YWJsZVNvcnRLZXk/Lm5hbWUsXG4gICAgICBhdHRyaWJ1dGU6IHRoaXMuYXR0cmlidXRlRGVmaW5pdGlvbnNJbnRlcm5hbCxcbiAgICAgIGdsb2JhbFNlY29uZGFyeUluZGV4OiBMYXp5LmFueVZhbHVlKFxuICAgICAgICB7XG4gICAgICAgICAgcHJvZHVjZTogKCkgPT5cbiAgICAgICAgICAgIHRoaXMuZ2xvYmFsU2Vjb25kYXJ5SW5kZXhlc0ludGVybmFsLm1hcChcbiAgICAgICAgICAgICAgZHluYW1vZGJUYWJsZS5keW5hbW9kYlRhYmxlR2xvYmFsU2Vjb25kYXJ5SW5kZXhUb1RlcnJhZm9ybSxcbiAgICAgICAgICAgICksXG4gICAgICAgIH0sXG4gICAgICAgIHsgb21pdEVtcHR5QXJyYXk6IHRydWUgfSxcbiAgICAgICksXG4gICAgICBsb2NhbFNlY29uZGFyeUluZGV4OiBMYXp5LmFueVZhbHVlKFxuICAgICAgICB7XG4gICAgICAgICAgcHJvZHVjZTogKCkgPT5cbiAgICAgICAgICAgIHRoaXMubG9jYWxTZWNvbmRhcnlJbmRleGVzSW50ZXJuYWwubWFwKFxuICAgICAgICAgICAgICBkeW5hbW9kYlRhYmxlLmR5bmFtb2RiVGFibGVMb2NhbFNlY29uZGFyeUluZGV4VG9UZXJyYWZvcm0sXG4gICAgICAgICAgICApLFxuICAgICAgICB9LFxuICAgICAgICB7IG9taXRFbXB0eUFycmF5OiB0cnVlIH0sXG4gICAgICApLFxuICAgICAgcG9pbnRJblRpbWVSZWNvdmVyeSxcbiAgICAgIGJpbGxpbmdNb2RlOiB0aGlzLmJpbGxpbmdNb2RlLFxuICAgICAgcmVhZENhcGFjaXR5OlxuICAgICAgICB0aGlzLmJpbGxpbmdNb2RlID09PSBCaWxsaW5nTW9kZS5QUk9WSVNJT05FRFxuICAgICAgICAgID8gKHByb3BzLnJlYWRDYXBhY2l0eSA/PyA1KVxuICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgd3JpdGVDYXBhY2l0eTpcbiAgICAgICAgdGhpcy5iaWxsaW5nTW9kZSA9PT0gQmlsbGluZ01vZGUuUFJPVklTSU9ORURcbiAgICAgICAgICA/IChwcm9wcy53cml0ZUNhcGFjaXR5ID8/IDUpXG4gICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICBvbkRlbWFuZFRocm91Z2hwdXQ6XG4gICAgICAgIHRoaXMuYmlsbGluZ01vZGUgPT09IEJpbGxpbmdNb2RlLlBBWV9QRVJfUkVRVUVTVCAmJlxuICAgICAgICAocHJvcHMubWF4UmVhZFJlcXVlc3RVbml0cyB8fCBwcm9wcy5tYXhXcml0ZVJlcXVlc3RVbml0cylcbiAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgbWF4UmVhZFJlcXVlc3RVbml0czogcHJvcHMubWF4UmVhZFJlcXVlc3RVbml0cyxcbiAgICAgICAgICAgICAgbWF4V3JpdGVSZXF1ZXN0VW5pdHM6IHByb3BzLm1heFdyaXRlUmVxdWVzdFVuaXRzLFxuICAgICAgICAgICAgfVxuICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgc2VydmVyU2lkZUVuY3J5cHRpb246IHNzZVNwZWNpZmljYXRpb24sXG4gICAgICBzdHJlYW1FbmFibGVkOiBzdHJlYW1TcGVjaWZpY2F0aW9uPy5zdHJlYW1FbmFibGVkLFxuICAgICAgc3RyZWFtVmlld1R5cGU6IHN0cmVhbVNwZWNpZmljYXRpb24/LnN0cmVhbVZpZXdUeXBlLFxuICAgICAgdGFibGVDbGFzczogcHJvcHMudGFibGVDbGFzcyxcbiAgICAgIHR0bDogcHJvcHMudGltZVRvTGl2ZUF0dHJpYnV0ZVxuICAgICAgICA/IHsgYXR0cmlidXRlTmFtZTogcHJvcHMudGltZVRvTGl2ZUF0dHJpYnV0ZSwgZW5hYmxlZDogdHJ1ZSB9XG4gICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgZGVsZXRpb25Qcm90ZWN0aW9uRW5hYmxlZDogcHJvcHMuZGVsZXRpb25Qcm90ZWN0aW9uLFxuICAgICAgaW1wb3J0VGFibGU6IHRoaXMucmVuZGVySW1wb3J0U291cmNlU3BlY2lmaWNhdGlvbihwcm9wcy5pbXBvcnRTb3VyY2UpLFxuICAgICAgcmVwbGljYTogdGhpcy5fcmVwbGljYXMsXG4gICAgICAvLyByZXNvdXJjZVBvbGljeTogcHJvcHMucmVzb3VyY2VQb2xpY3kgPyB7IHBvbGljeURvY3VtZW50OiB0aGlzLnN0YWNrLnRvSnNvblN0cmluZyhwcm9wcy5yZXNvdXJjZVBvbGljeS50b0pTT04oKSkgfSA6IHVuZGVmaW5lZCwgLy8gTm90IGluIFRGIHJlc291cmNlXG4gICAgICB3YXJtVGhyb3VnaHB1dDogcHJvcHMud2FybVRocm91Z2hwdXQsXG4gICAgfSk7XG5cbiAgICB0aGlzLnRhYmxlQXJuID0gdGhpcy5fcmVzb3VyY2UuYXJuO1xuICAgIHRoaXMudGFibGVOYW1lID0gdGhpcy5fcmVzb3VyY2UubmFtZTtcbiAgICB0aGlzLnRhYmxlU3RyZWFtQXJuID0gc3RyZWFtU3BlY2lmaWNhdGlvbj8uc3RyZWFtRW5hYmxlZFxuICAgICAgPyB0aGlzLl9yZXNvdXJjZS5zdHJlYW1Bcm5cbiAgICAgIDogdW5kZWZpbmVkO1xuICAgIHRoaXMucmVzb3VyY2VQb2xpY3kgPSBwcm9wcy5yZXNvdXJjZVBvbGljeTtcbiAgICBpZiAodGhpcy5yZXNvdXJjZVBvbGljeSkge1xuICAgICAgbmV3IGR5bmFtb2RiUmVzb3VyY2VQb2xpY3kuRHluYW1vZGJSZXNvdXJjZVBvbGljeShcbiAgICAgICAgdGhpcyxcbiAgICAgICAgXCJSZXNvdXJjZVBvbGljeVwiLFxuICAgICAgICB7XG4gICAgICAgICAgcG9saWN5OiB0aGlzLnJlc291cmNlUG9saWN5Lmpzb24sXG4gICAgICAgICAgcmVzb3VyY2VBcm46IHRoaXMudGFibGVBcm4sXG4gICAgICAgIH0sXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChwcm9wcy5raW5lc2lzU3RyZWFtKSB7XG4gICAgICBuZXcgZHluYW1vZGJLaW5lc2lzU3RyZWFtaW5nRGVzdGluYXRpb24uRHluYW1vZGJLaW5lc2lzU3RyZWFtaW5nRGVzdGluYXRpb24oXG4gICAgICAgIHRoaXMsXG4gICAgICAgIFwiS2luZXNpc1N0cmVhbWluZ0Rlc3RpbmF0aW9uXCIsXG4gICAgICAgIHtcbiAgICAgICAgICB0YWJsZU5hbWU6IHRoaXMudGFibGVOYW1lLFxuICAgICAgICAgIHN0cmVhbUFybjogcHJvcHMua2luZXNpc1N0cmVhbS5zdHJlYW1Bcm4sXG4gICAgICAgICAgLi4uKHByb3BzLmtpbmVzaXNQcmVjaXNpb25UaW1lc3RhbXAgJiYge1xuICAgICAgICAgICAgYXBwcm94aW1hdGVDcmVhdGlvbkRhdGVUaW1lUHJlY2lzaW9uOlxuICAgICAgICAgICAgICBwcm9wcy5raW5lc2lzUHJlY2lzaW9uVGltZXN0YW1wLFxuICAgICAgICAgIH0pLFxuICAgICAgICB9LFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBjb250cmlidXRvckluc2lnaHRzU3BlY2lmaWNhdGlvbiA9XG4gICAgICB0aGlzLnJlbmRlckNvbnRyaWJ1dG9ySW5zaWdodHMocHJvcHMpO1xuICAgIGlmIChjb250cmlidXRvckluc2lnaHRzU3BlY2lmaWNhdGlvbj8uZW5hYmxlZCkge1xuICAgICAgbmV3IGR5bmFtb2RiQ29udHJpYnV0b3JJbnNpZ2h0cy5EeW5hbW9kYkNvbnRyaWJ1dG9ySW5zaWdodHMoXG4gICAgICAgIHRoaXMsXG4gICAgICAgIFwiQ29udHJpYnV0b3JJbnNpZ2h0c1wiLFxuICAgICAgICB7XG4gICAgICAgICAgdGFibGVOYW1lOiB0aGlzLnRhYmxlTmFtZSxcbiAgICAgICAgICBtb2RlOiBjb250cmlidXRvckluc2lnaHRzU3BlY2lmaWNhdGlvbi5tb2RlLFxuICAgICAgICB9LFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBDb21tZW50aW5nIG91dCBzY2FsaW5nUm9sZSBpbml0aWFsaXphdGlvbiAtIGxldCBUZXJyYWZvcm0gYXV0by1jcmVhdGUgc2VydmljZS1saW5rZWQgcm9sZVxuICAgIC8vIHRoaXMuc2NhbGluZ1JvbGUgPSB0aGlzLm1ha2VTY2FsaW5nUm9sZSgpO1xuXG4gICAgdGhpcy5ub2RlLmFkZFZhbGlkYXRpb24oeyB2YWxpZGF0ZTogKCkgPT4gdGhpcy52YWxpZGF0ZVRhYmxlKCkgfSk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIHN0YXRlbWVudCB0byB0aGUgcmVzb3VyY2UgcG9saWN5IGFzc29jaWF0ZWQgd2l0aCB0aGlzIHRhYmxlLlxuICAgKiBBIHJlc291cmNlIHBvbGljeSB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgY3JlYXRlZCB1cG9uIHRoZSBmaXJzdCBjYWxsIHRvIGBhZGRUb1Jlc291cmNlUG9saWN5YC5cbiAgICpcbiAgICogTm90ZSB0aGF0IHRoaXMgZG9lcyBub3Qgd29yayB3aXRoIGltcG9ydGVkIHRhYmxlcy5cbiAgICpcbiAgICogQHBhcmFtIHN0YXRlbWVudCBUaGUgcG9saWN5IHN0YXRlbWVudCB0byBhZGRcbiAgICovXG4gIHB1YmxpYyBhZGRUb1Jlc291cmNlUG9saWN5KFxuICAgIHN0YXRlbWVudDogaWFtLlBvbGljeVN0YXRlbWVudCxcbiAgKTogaWFtLkFkZFRvUmVzb3VyY2VQb2xpY3lSZXN1bHQge1xuICAgIGlmICghdGhpcy5yZXNvdXJjZVBvbGljeSkge1xuICAgICAgLy8gZW5zdXJlIGEgcG9saWN5IGV4aXN0cyBhbmQgaXMgYXNzb2NpYXRlZCB3aXRoIHRoZSB0YWJsZVxuICAgICAgdGhpcy5yZXNvdXJjZVBvbGljeSA9IG5ldyBpYW0uUG9saWN5RG9jdW1lbnQodGhpcywgXCJQb2xpY3lcIiwge1xuICAgICAgICBzdGF0ZW1lbnQ6IFtdLFxuICAgICAgfSk7XG4gICAgICBuZXcgZHluYW1vZGJSZXNvdXJjZVBvbGljeS5EeW5hbW9kYlJlc291cmNlUG9saWN5KFxuICAgICAgICB0aGlzLFxuICAgICAgICBcIlBvbGljeUF0dGFjaG1lbnRcIixcbiAgICAgICAge1xuICAgICAgICAgIHBvbGljeTogdGhpcy5yZXNvdXJjZVBvbGljeS5qc29uLFxuICAgICAgICAgIHJlc291cmNlQXJuOiB0aGlzLnRhYmxlQXJuLFxuICAgICAgICB9LFxuICAgICAgKTtcbiAgICB9XG4gICAgdGhpcy5yZXNvdXJjZVBvbGljeS5hZGRTdGF0ZW1lbnRzKHN0YXRlbWVudCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXRlbWVudEFkZGVkOiB0cnVlLFxuICAgICAgcG9saWN5RGVwZW5kYWJsZTogdGhpcyxcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIGFkZEdsb2JhbFNlY29uZGFyeUluZGV4KHByb3BzOiBHbG9iYWxTZWNvbmRhcnlJbmRleFByb3BzKSB7XG4gICAgdGhpcy52YWxpZGF0ZVByb3Zpc2lvbmluZ0dTSShwcm9wcyk7XG4gICAgdGhpcy52YWxpZGF0ZUluZGV4TmFtZShwcm9wcy5pbmRleE5hbWUpO1xuXG4gICAgY29uc3QgZ3NpUHJvamVjdGlvbiA9IHRoaXMuYnVpbGRJbmRleFByb2plY3Rpb24ocHJvcHMpO1xuICAgIHRoaXMucmVnaXN0ZXJBdHRyaWJ1dGUocHJvcHMucGFydGl0aW9uS2V5KTtcbiAgICBpZiAocHJvcHMuc29ydEtleSkge1xuICAgICAgdGhpcy5yZWdpc3RlckF0dHJpYnV0ZShwcm9wcy5zb3J0S2V5KTtcbiAgICB9XG5cbiAgICB0aGlzLmdsb2JhbFNlY29uZGFyeUluZGV4ZXNJbnRlcm5hbC5wdXNoKHtcbiAgICAgIG5hbWU6IHByb3BzLmluZGV4TmFtZSxcbiAgICAgIGhhc2hLZXk6IHByb3BzLnBhcnRpdGlvbktleS5uYW1lLFxuICAgICAgcmFuZ2VLZXk6IHByb3BzLnNvcnRLZXk/Lm5hbWUsXG4gICAgICBwcm9qZWN0aW9uVHlwZTogZ3NpUHJvamVjdGlvbi5wcm9qZWN0aW9uVHlwZSxcbiAgICAgIG5vbktleUF0dHJpYnV0ZXM6IGdzaVByb2plY3Rpb24ubm9uS2V5QXR0cmlidXRlcyxcbiAgICAgIHJlYWRDYXBhY2l0eTpcbiAgICAgICAgdGhpcy5iaWxsaW5nTW9kZSA9PT0gQmlsbGluZ01vZGUuUFJPVklTSU9ORURcbiAgICAgICAgICA/IChwcm9wcy5yZWFkQ2FwYWNpdHkgPz8gNSlcbiAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIHdyaXRlQ2FwYWNpdHk6XG4gICAgICAgIHRoaXMuYmlsbGluZ01vZGUgPT09IEJpbGxpbmdNb2RlLlBST1ZJU0lPTkVEXG4gICAgICAgICAgPyAocHJvcHMud3JpdGVDYXBhY2l0eSA/PyA1KVxuICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgb25EZW1hbmRUaHJvdWdocHV0OlxuICAgICAgICB0aGlzLmJpbGxpbmdNb2RlID09PSBCaWxsaW5nTW9kZS5QQVlfUEVSX1JFUVVFU1QgJiZcbiAgICAgICAgKHByb3BzLm1heFJlYWRSZXF1ZXN0VW5pdHMgfHwgcHJvcHMubWF4V3JpdGVSZXF1ZXN0VW5pdHMpXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIG1heFJlYWRSZXF1ZXN0VW5pdHM6IHByb3BzLm1heFJlYWRSZXF1ZXN0VW5pdHMsXG4gICAgICAgICAgICAgIG1heFdyaXRlUmVxdWVzdFVuaXRzOiBwcm9wcy5tYXhXcml0ZVJlcXVlc3RVbml0cyxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIGNvbnRyaWJ1dG9ySW5zaWdodHNTcGVjaWZpY2F0aW9uOiBwcm9wcy5jb250cmlidXRvckluc2lnaHRzU3BlY2lmaWNhdGlvbiwgLy8gTm90IGluIFRGIEdTSSBibG9ja1xuICAgICAgd2FybVRocm91Z2hwdXQ6IHByb3BzLndhcm1UaHJvdWdocHV0LFxuICAgIH0pO1xuXG4gICAgdGhpcy5zZWNvbmRhcnlJbmRleFNjaGVtYXMuc2V0KHByb3BzLmluZGV4TmFtZSwge1xuICAgICAgcGFydGl0aW9uS2V5OiBwcm9wcy5wYXJ0aXRpb25LZXksXG4gICAgICBzb3J0S2V5OiBwcm9wcy5zb3J0S2V5LFxuICAgIH0pO1xuICAgIHRoaXMuaW5kZXhTY2FsaW5nLnNldChwcm9wcy5pbmRleE5hbWUsIHt9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBsb2NhbCBzZWNvbmRhcnkgaW5kZXggb2YgdGFibGUuXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyB0aGUgcHJvcGVydHkgb2YgbG9jYWwgc2Vjb25kYXJ5IGluZGV4XG4gICAqL1xuICBwdWJsaWMgYWRkTG9jYWxTZWNvbmRhcnlJbmRleChwcm9wczogTG9jYWxTZWNvbmRhcnlJbmRleFByb3BzKSB7XG4gICAgLy8gaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2FtYXpvbmR5bmFtb2RiL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9MaW1pdHMuaHRtbCNsaW1pdHMtc2Vjb25kYXJ5LWluZGV4ZXNcbiAgICBpZiAoXG4gICAgICB0aGlzLmxvY2FsU2Vjb25kYXJ5SW5kZXhlc0ludGVybmFsLmxlbmd0aCA+PVxuICAgICAgTUFYX0xPQ0FMX1NFQ09OREFSWV9JTkRFWF9DT1VOVFxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXG4gICAgICAgIGBBIG1heGltdW0gbnVtYmVyIG9mIGxvY2FsIHNlY29uZGFyeSBpbmRleCBwZXIgdGFibGUgaXMgJHtNQVhfTE9DQUxfU0VDT05EQVJZX0lOREVYX0NPVU5UfWAsXG4gICAgICApO1xuICAgIH1cbiAgICB0aGlzLnZhbGlkYXRlSW5kZXhOYW1lKHByb3BzLmluZGV4TmFtZSk7XG5cbiAgICBpZiAoIXRoaXMudGFibGVQYXJ0aXRpb25LZXkpIHtcbiAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgIFwiVGFibGUgcGFydGl0aW9uIGtleSBtdXN0IGJlIGRlZmluZWQgYmVmb3JlIGFkZGluZyBsb2NhbCBzZWNvbmRhcnkgaW5kZXhcIixcbiAgICAgICAgdGhpcyxcbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMucmVnaXN0ZXJBdHRyaWJ1dGUodGhpcy50YWJsZVBhcnRpdGlvbktleSk7XG4gICAgdGhpcy5yZWdpc3RlckF0dHJpYnV0ZShwcm9wcy5zb3J0S2V5KTtcblxuICAgIGNvbnN0IGxzaVByb2plY3Rpb24gPSB0aGlzLmJ1aWxkSW5kZXhQcm9qZWN0aW9uKHByb3BzKTtcblxuICAgIHRoaXMubG9jYWxTZWNvbmRhcnlJbmRleGVzSW50ZXJuYWwucHVzaCh7XG4gICAgICBuYW1lOiBwcm9wcy5pbmRleE5hbWUsXG4gICAgICByYW5nZUtleTogcHJvcHMuc29ydEtleS5uYW1lLFxuICAgICAgcHJvamVjdGlvblR5cGU6IGxzaVByb2plY3Rpb24ucHJvamVjdGlvblR5cGUsXG4gICAgICBub25LZXlBdHRyaWJ1dGVzOiBsc2lQcm9qZWN0aW9uLm5vbktleUF0dHJpYnV0ZXMsXG4gICAgfSk7XG5cbiAgICB0aGlzLnNlY29uZGFyeUluZGV4U2NoZW1hcy5zZXQocHJvcHMuaW5kZXhOYW1lLCB7XG4gICAgICBwYXJ0aXRpb25LZXk6IHRoaXMudGFibGVQYXJ0aXRpb25LZXksXG4gICAgICBzb3J0S2V5OiBwcm9wcy5zb3J0S2V5LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEVuYWJsZSByZWFkIGNhcGFjaXR5IHNjYWxpbmcgZm9yIHRoaXMgdGFibGVcbiAgICpcbiAgICogQHJldHVybnMgQW4gb2JqZWN0IHRvIGNvbmZpZ3VyZSBhZGRpdGlvbmFsIEF1dG9TY2FsaW5nIHNldHRpbmdzXG4gICAqL1xuICBwdWJsaWMgYXV0b1NjYWxlUmVhZENhcGFjaXR5KFxuICAgIHByb3BzOiBFbmFibGVTY2FsaW5nUHJvcHMsXG4gICk6IElTY2FsYWJsZVRhYmxlQXR0cmlidXRlIHtcbiAgICBpZiAodGhpcy50YWJsZVNjYWxpbmcuc2NhbGFibGVSZWFkQXR0cmlidXRlKSB7XG4gICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICBcIlJlYWQgQXV0b1NjYWxpbmcgYWxyZWFkeSBlbmFibGVkIGZvciB0aGlzIHRhYmxlXCIsXG4gICAgICAgIHRoaXMsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAodGhpcy5iaWxsaW5nTW9kZSA9PT0gQmlsbGluZ01vZGUuUEFZX1BFUl9SRVFVRVNUKSB7XG4gICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICBcIkF1dG9TY2FsaW5nIGlzIG5vdCBhdmFpbGFibGUgZm9yIHRhYmxlcyB3aXRoIFBBWV9QRVJfUkVRVUVTVCBiaWxsaW5nIG1vZGVcIixcbiAgICAgICAgdGhpcyxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuICh0aGlzLnRhYmxlU2NhbGluZy5zY2FsYWJsZVJlYWRBdHRyaWJ1dGUgPVxuICAgICAgbmV3IFNjYWxhYmxlVGFibGVBdHRyaWJ1dGUodGhpcywgXCJSZWFkU2NhbGluZ1wiLCB7XG4gICAgICAgIHNlcnZpY2VOYW1lc3BhY2U6IGFwcHNjYWxpbmcuU2VydmljZU5hbWVzcGFjZS5EWU5BTU9EQixcbiAgICAgICAgcmVzb3VyY2VJZDogYHRhYmxlLyR7dGhpcy50YWJsZU5hbWV9YCxcbiAgICAgICAgZGltZW5zaW9uOiBcImR5bmFtb2RiOnRhYmxlOlJlYWRDYXBhY2l0eVVuaXRzXCIsXG4gICAgICAgIC8vIHJvbGU6IHRoaXMuc2NhbGluZ1JvbGUsIC8vIENvbW1lbnRpbmcgb3V0IC0gbGV0IFRlcnJhZm9ybSB1c2Ugc2VydmljZS1saW5rZWQgcm9sZVxuICAgICAgICAuLi5wcm9wcyxcbiAgICAgIH0pKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbmFibGUgd3JpdGUgY2FwYWNpdHkgc2NhbGluZyBmb3IgdGhpcyB0YWJsZVxuICAgKlxuICAgKiBAcmV0dXJucyBBbiBvYmplY3QgdG8gY29uZmlndXJlIGFkZGl0aW9uYWwgQXV0b1NjYWxpbmcgc2V0dGluZ3MgZm9yIHRoaXMgYXR0cmlidXRlXG4gICAqL1xuICBwdWJsaWMgYXV0b1NjYWxlV3JpdGVDYXBhY2l0eShcbiAgICBwcm9wczogRW5hYmxlU2NhbGluZ1Byb3BzLFxuICApOiBJU2NhbGFibGVUYWJsZUF0dHJpYnV0ZSB7XG4gICAgaWYgKHRoaXMudGFibGVTY2FsaW5nLnNjYWxhYmxlV3JpdGVBdHRyaWJ1dGUpIHtcbiAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgIFwiV3JpdGUgQXV0b1NjYWxpbmcgYWxyZWFkeSBlbmFibGVkIGZvciB0aGlzIHRhYmxlXCIsXG4gICAgICAgIHRoaXMsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAodGhpcy5iaWxsaW5nTW9kZSA9PT0gQmlsbGluZ01vZGUuUEFZX1BFUl9SRVFVRVNUKSB7XG4gICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICBcIkF1dG9TY2FsaW5nIGlzIG5vdCBhdmFpbGFibGUgZm9yIHRhYmxlcyB3aXRoIFBBWV9QRVJfUkVRVUVTVCBiaWxsaW5nIG1vZGVcIixcbiAgICAgICAgdGhpcyxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy50YWJsZVNjYWxpbmcuc2NhbGFibGVXcml0ZUF0dHJpYnV0ZSA9IG5ldyBTY2FsYWJsZVRhYmxlQXR0cmlidXRlKFxuICAgICAgdGhpcyxcbiAgICAgIFwiV3JpdGVTY2FsaW5nXCIsXG4gICAgICB7XG4gICAgICAgIHNlcnZpY2VOYW1lc3BhY2U6IGFwcHNjYWxpbmcuU2VydmljZU5hbWVzcGFjZS5EWU5BTU9EQixcbiAgICAgICAgcmVzb3VyY2VJZDogYHRhYmxlLyR7dGhpcy50YWJsZU5hbWV9YCxcbiAgICAgICAgZGltZW5zaW9uOiBcImR5bmFtb2RiOnRhYmxlOldyaXRlQ2FwYWNpdHlVbml0c1wiLFxuICAgICAgICAvLyByb2xlOiB0aGlzLnNjYWxpbmdSb2xlLCAvLyBDb21tZW50aW5nIG91dCAtIGxldCBUZXJyYWZvcm0gdXNlIHNlcnZpY2UtbGlua2VkIHJvbGVcbiAgICAgICAgLi4ucHJvcHMsXG4gICAgICB9LFxuICAgICk7XG4gICAgLy8gSWYgdGhlcmUgYXJlIHJlcGxpY2FzLCB0aGV5IGRlcGVuZCBvbiB0aGUgd3JpdGUgc2NhbGluZyBwb2xpY3kgb2YgdGhlIG1haW4gdGFibGUuXG4gICAgLy8gVGhpcyBpcyBub3QgZXhwbGljaXRseSBtb2RlbGVkIGluIFRGIGJ1dCB3YXMgaGFuZGxlZCBieSBDdXN0b21SZXNvdXJjZSBkZXBlbmRlbmNpZXMgaW4gQ0RLLlxuICAgIC8vIEZvciBURiwgdGhpcyBkZXBlbmRlbmN5IGlzIGltcGxpY2l0IGlmIHRoZSBwcm92aWRlciBoYW5kbGVzIGl0LCBvciBtaWdodCBuZWVkIGV4cGxpY2l0IGRlcGVuZHNPbiBpZiBpc3N1ZXMgYXJpc2UuXG4gICAgcmV0dXJuIHRoaXMudGFibGVTY2FsaW5nLnNjYWxhYmxlV3JpdGVBdHRyaWJ1dGU7XG4gIH1cblxuICAvKipcbiAgICogRW5hYmxlIHJlYWQgY2FwYWNpdHkgc2NhbGluZyBmb3IgdGhlIGdpdmVuIEdTSVxuICAgKlxuICAgKiBAcmV0dXJucyBBbiBvYmplY3QgdG8gY29uZmlndXJlIGFkZGl0aW9uYWwgQXV0b1NjYWxpbmcgc2V0dGluZ3MgZm9yIHRoaXMgYXR0cmlidXRlXG4gICAqL1xuICBwdWJsaWMgYXV0b1NjYWxlR2xvYmFsU2Vjb25kYXJ5SW5kZXhSZWFkQ2FwYWNpdHkoXG4gICAgaW5kZXhOYW1lOiBzdHJpbmcsXG4gICAgcHJvcHM6IEVuYWJsZVNjYWxpbmdQcm9wcyxcbiAgKTogSVNjYWxhYmxlVGFibGVBdHRyaWJ1dGUge1xuICAgIGlmICh0aGlzLmJpbGxpbmdNb2RlID09PSBCaWxsaW5nTW9kZS5QQVlfUEVSX1JFUVVFU1QpIHtcbiAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgIFwiQXV0b1NjYWxpbmcgaXMgbm90IGF2YWlsYWJsZSBmb3IgdGFibGVzIHdpdGggUEFZX1BFUl9SRVFVRVNUIGJpbGxpbmcgbW9kZVwiLFxuICAgICAgICB0aGlzLFxuICAgICAgKTtcbiAgICB9XG4gICAgY29uc3QgYXR0cmlidXRlUGFpciA9IHRoaXMuaW5kZXhTY2FsaW5nLmdldChpbmRleE5hbWUpO1xuICAgIGlmICghYXR0cmlidXRlUGFpcikge1xuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgYE5vIGdsb2JhbCBzZWNvbmRhcnkgaW5kZXggd2l0aCBuYW1lICR7aW5kZXhOYW1lfWAsXG4gICAgICAgIHRoaXMsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoYXR0cmlidXRlUGFpci5zY2FsYWJsZVJlYWRBdHRyaWJ1dGUpIHtcbiAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgIFwiUmVhZCBBdXRvU2NhbGluZyBhbHJlYWR5IGVuYWJsZWQgZm9yIHRoaXMgaW5kZXhcIixcbiAgICAgICAgdGhpcyxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIChhdHRyaWJ1dGVQYWlyLnNjYWxhYmxlUmVhZEF0dHJpYnV0ZSA9IG5ldyBTY2FsYWJsZVRhYmxlQXR0cmlidXRlKFxuICAgICAgdGhpcyxcbiAgICAgIGAke2luZGV4TmFtZX1SZWFkU2NhbGluZ2AsXG4gICAgICB7XG4gICAgICAgIHNlcnZpY2VOYW1lc3BhY2U6IGFwcHNjYWxpbmcuU2VydmljZU5hbWVzcGFjZS5EWU5BTU9EQixcbiAgICAgICAgcmVzb3VyY2VJZDogYHRhYmxlLyR7dGhpcy50YWJsZU5hbWV9L2luZGV4LyR7aW5kZXhOYW1lfWAsXG4gICAgICAgIGRpbWVuc2lvbjogXCJkeW5hbW9kYjppbmRleDpSZWFkQ2FwYWNpdHlVbml0c1wiLFxuICAgICAgICAvLyByb2xlOiB0aGlzLnNjYWxpbmdSb2xlLCAvLyBDb21tZW50aW5nIG91dCAtIGxldCBUZXJyYWZvcm0gdXNlIHNlcnZpY2UtbGlua2VkIHJvbGVcbiAgICAgICAgLi4ucHJvcHMsXG4gICAgICB9LFxuICAgICkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEVuYWJsZSB3cml0ZSBjYXBhY2l0eSBzY2FsaW5nIGZvciB0aGUgZ2l2ZW4gR1NJXG4gICAqXG4gICAqIEByZXR1cm5zIEFuIG9iamVjdCB0byBjb25maWd1cmUgYWRkaXRpb25hbCBBdXRvU2NhbGluZyBzZXR0aW5ncyBmb3IgdGhpcyBhdHRyaWJ1dGVcbiAgICovXG4gIHB1YmxpYyBhdXRvU2NhbGVHbG9iYWxTZWNvbmRhcnlJbmRleFdyaXRlQ2FwYWNpdHkoXG4gICAgaW5kZXhOYW1lOiBzdHJpbmcsXG4gICAgcHJvcHM6IEVuYWJsZVNjYWxpbmdQcm9wcyxcbiAgKTogSVNjYWxhYmxlVGFibGVBdHRyaWJ1dGUge1xuICAgIGlmICh0aGlzLmJpbGxpbmdNb2RlID09PSBCaWxsaW5nTW9kZS5QQVlfUEVSX1JFUVVFU1QpIHtcbiAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgIFwiQXV0b1NjYWxpbmcgaXMgbm90IGF2YWlsYWJsZSBmb3IgdGFibGVzIHdpdGggUEFZX1BFUl9SRVFVRVNUIGJpbGxpbmcgbW9kZVwiLFxuICAgICAgICB0aGlzLFxuICAgICAgKTtcbiAgICB9XG4gICAgY29uc3QgYXR0cmlidXRlUGFpciA9IHRoaXMuaW5kZXhTY2FsaW5nLmdldChpbmRleE5hbWUpO1xuICAgIGlmICghYXR0cmlidXRlUGFpcikge1xuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgYE5vIGdsb2JhbCBzZWNvbmRhcnkgaW5kZXggd2l0aCBuYW1lICR7aW5kZXhOYW1lfWAsXG4gICAgICAgIHRoaXMsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoYXR0cmlidXRlUGFpci5zY2FsYWJsZVdyaXRlQXR0cmlidXRlKSB7XG4gICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICBcIldyaXRlIEF1dG9TY2FsaW5nIGFscmVhZHkgZW5hYmxlZCBmb3IgdGhpcyBpbmRleFwiLFxuICAgICAgICB0aGlzLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gKGF0dHJpYnV0ZVBhaXIuc2NhbGFibGVXcml0ZUF0dHJpYnV0ZSA9IG5ldyBTY2FsYWJsZVRhYmxlQXR0cmlidXRlKFxuICAgICAgdGhpcyxcbiAgICAgIGAke2luZGV4TmFtZX1Xcml0ZVNjYWxpbmdgLFxuICAgICAge1xuICAgICAgICBzZXJ2aWNlTmFtZXNwYWNlOiBhcHBzY2FsaW5nLlNlcnZpY2VOYW1lc3BhY2UuRFlOQU1PREIsXG4gICAgICAgIHJlc291cmNlSWQ6IGB0YWJsZS8ke3RoaXMudGFibGVOYW1lfS9pbmRleC8ke2luZGV4TmFtZX1gLFxuICAgICAgICBkaW1lbnNpb246IFwiZHluYW1vZGI6aW5kZXg6V3JpdGVDYXBhY2l0eVVuaXRzXCIsXG4gICAgICAgIC8vIHJvbGU6IHRoaXMuc2NhbGluZ1JvbGUsIC8vIENvbW1lbnRpbmcgb3V0IC0gbGV0IFRlcnJhZm9ybSB1c2Ugc2VydmljZS1saW5rZWQgcm9sZVxuICAgICAgICAuLi5wcm9wcyxcbiAgICAgIH0sXG4gICAgKSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHNjaGVtYSBhdHRyaWJ1dGVzIG9mIHRhYmxlIG9yIGluZGV4LlxuICAgKlxuICAgKiBAcmV0dXJucyBTY2hlbWEgb2YgdGFibGUgb3IgaW5kZXguXG4gICAqL1xuICBwdWJsaWMgc2NoZW1hKGluZGV4TmFtZT86IHN0cmluZyk6IFNjaGVtYU9wdGlvbnMge1xuICAgIGlmICghaW5kZXhOYW1lKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBwYXJ0aXRpb25LZXk6IHRoaXMudGFibGVQYXJ0aXRpb25LZXksXG4gICAgICAgIHNvcnRLZXk6IHRoaXMudGFibGVTb3J0S2V5LFxuICAgICAgfTtcbiAgICB9XG4gICAgY29uc3Qgc2NoZW1hID0gdGhpcy5zZWNvbmRhcnlJbmRleFNjaGVtYXMuZ2V0KGluZGV4TmFtZSk7XG4gICAgaWYgKCFzY2hlbWEpIHtcbiAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgIGBDYW5ub3QgZmluZCBzY2hlbWEgZm9yIGluZGV4OiAke2luZGV4TmFtZX0uIFVzZSAnYWRkR2xvYmFsU2Vjb25kYXJ5SW5kZXgnIG9yICdhZGRMb2NhbFNlY29uZGFyeUluZGV4JyB0byBhZGQgaW5kZXhgLFxuICAgICAgICB0aGlzLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc2NoZW1hO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIHRoZSB0YWJsZSBjb25zdHJ1Y3QuXG4gICAqXG4gICAqIEByZXR1cm5zIGFuIGFycmF5IG9mIHZhbGlkYXRpb24gZXJyb3IgbWVzc2FnZVxuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZVRhYmxlKCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBlcnJvcnMgPSBuZXcgQXJyYXk8c3RyaW5nPigpO1xuXG4gICAgaWYgKCF0aGlzLnRhYmxlUGFydGl0aW9uS2V5KSB7XG4gICAgICBlcnJvcnMucHVzaChcIkEgcGFydGl0aW9uIGtleSBtdXN0IGJlIHNwZWNpZmllZFwiKTtcbiAgICB9XG4gICAgaWYgKHRoaXMubG9jYWxTZWNvbmRhcnlJbmRleGVzSW50ZXJuYWwubGVuZ3RoID4gMCAmJiAhdGhpcy50YWJsZVNvcnRLZXkpIHtcbiAgICAgIGVycm9ycy5wdXNoKFxuICAgICAgICBcIkEgc29ydCBrZXkgb2YgdGhlIHRhYmxlIG11c3QgYmUgc3BlY2lmaWVkIHRvIGFkZCBsb2NhbCBzZWNvbmRhcnkgaW5kZXhlc1wiLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICB0aGlzLl9yZXBsaWNhcyAmJlxuICAgICAgdGhpcy5fcmVwbGljYXMubGVuZ3RoID4gMCAmJlxuICAgICAgdGhpcy5iaWxsaW5nTW9kZSA9PT0gQmlsbGluZ01vZGUuUFJPVklTSU9ORURcbiAgICApIHtcbiAgICAgIGNvbnN0IHdyaXRlQXV0b1NjYWxlQXR0cmlidXRlID0gdGhpcy50YWJsZVNjYWxpbmcuc2NhbGFibGVXcml0ZUF0dHJpYnV0ZTtcbiAgICAgIGlmICghd3JpdGVBdXRvU2NhbGVBdHRyaWJ1dGUpIHtcbiAgICAgICAgZXJyb3JzLnB1c2goXG4gICAgICAgICAgXCJBIGdsb2JhbCBUYWJsZSB0aGF0IHVzZXMgUFJPVklTSU9ORUQgYXMgdGhlIGJpbGxpbmcgbW9kZSBuZWVkcyBhdXRvLXNjYWxlZCB3cml0ZSBjYXBhY2l0eS4gXCIgK1xuICAgICAgICAgICAgXCJVc2UgdGhlIGF1dG9TY2FsZVdyaXRlQ2FwYWNpdHkoKSBtZXRob2QgdG8gZW5hYmxlIGl0LlwiLFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIGlmICghd3JpdGVBdXRvU2NhbGVBdHRyaWJ1dGUuX3NjYWxpbmdQb2xpY3lDcmVhdGVkKSB7XG4gICAgICAgIGVycm9ycy5wdXNoKFxuICAgICAgICAgIFwiQSBnbG9iYWwgVGFibGUgdGhhdCB1c2VzIFBST1ZJU0lPTkVEIGFzIHRoZSBiaWxsaW5nIG1vZGUgbmVlZHMgYXV0by1zY2FsZWQgd3JpdGUgY2FwYWNpdHkgd2l0aCBhIHBvbGljeS4gXCIgK1xuICAgICAgICAgICAgXCJDYWxsIG9uZSBvZiB0aGUgc2NhbGVPbiooKSBtZXRob2RzIG9mIHRoZSBvYmplY3QgcmV0dXJuZWQgZnJvbSBhdXRvU2NhbGVXcml0ZUNhcGFjaXR5KClcIixcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZXJyb3JzO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIHJlYWQgYW5kIHdyaXRlIGNhcGFjaXR5IGFyZSBub3Qgc3BlY2lmaWVkIGZvciBvbi1kZW1hbmQgdGFibGVzIChiaWxsaW5nIG1vZGUgUEFZX1BFUl9SRVFVRVNUKS5cbiAgICpcbiAgICogQHBhcmFtIHByb3BzIHJlYWQgYW5kIHdyaXRlIGNhcGFjaXR5IHByb3BlcnRpZXNcbiAgICovXG4gIHByaXZhdGUgdmFsaWRhdGVQcm92aXNpb25pbmcocHJvcHM6IHtcbiAgICByZWFkQ2FwYWNpdHk/OiBudW1iZXI7XG4gICAgd3JpdGVDYXBhY2l0eT86IG51bWJlcjtcbiAgfSkge1xuICAgIGlmICh0aGlzLmJpbGxpbmdNb2RlID09PSBCaWxsaW5nTW9kZS5QQVlfUEVSX1JFUVVFU1QpIHtcbiAgICAgIGlmIChcbiAgICAgICAgcHJvcHMucmVhZENhcGFjaXR5ICE9PSB1bmRlZmluZWQgfHxcbiAgICAgICAgcHJvcHMud3JpdGVDYXBhY2l0eSAhPT0gdW5kZWZpbmVkXG4gICAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgICBcIllvdSBjYW5ub3QgcHJvdmlzaW9uIHJlYWQgYW5kIHdyaXRlIGNhcGFjaXR5IGZvciBhIHRhYmxlIHdpdGggUEFZX1BFUl9SRVFVRVNUIGJpbGxpbmcgbW9kZVwiLFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB2YWxpZGF0ZVByb3Zpc2lvbmluZ0dTSShwcm9wczogR2xvYmFsU2Vjb25kYXJ5SW5kZXhQcm9wcykge1xuICAgIGlmICh0aGlzLmJpbGxpbmdNb2RlID09PSBCaWxsaW5nTW9kZS5QQVlfUEVSX1JFUVVFU1QpIHtcbiAgICAgIGlmIChcbiAgICAgICAgcHJvcHMucmVhZENhcGFjaXR5ICE9PSB1bmRlZmluZWQgfHxcbiAgICAgICAgcHJvcHMud3JpdGVDYXBhY2l0eSAhPT0gdW5kZWZpbmVkXG4gICAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgICBcIllvdSBjYW5ub3QgcHJvdmlzaW9uIHJlYWQgYW5kIHdyaXRlIGNhcGFjaXR5IGZvciBhIEdTSSB3aXRoIFBBWV9QRVJfUkVRVUVTVCBiaWxsaW5nIG1vZGUgb24gdGhlIHRhYmxlXCIsXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgaW5kZXggbmFtZSB0byBjaGVjayBpZiBhIGR1cGxpY2F0ZSBuYW1lIGFscmVhZHkgZXhpc3RzLlxuICAgKlxuICAgKiBAcGFyYW0gaW5kZXhOYW1lIGEgbmFtZSBvZiBnbG9iYWwgb3IgbG9jYWwgc2Vjb25kYXJ5IGluZGV4XG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlSW5kZXhOYW1lKGluZGV4TmFtZTogc3RyaW5nKSB7XG4gICAgaWYgKHRoaXMuc2Vjb25kYXJ5SW5kZXhTY2hlbWFzLmhhcyhpbmRleE5hbWUpKSB7XG4gICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICBgQSBkdXBsaWNhdGUgaW5kZXggbmFtZSwgJHtpbmRleE5hbWV9LCBpcyBub3QgYWxsb3dlZGAsXG4gICAgICAgIHRoaXMsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSBub24ta2V5IGF0dHJpYnV0ZXMgYnkgY2hlY2tpbmcgbGltaXRzIHdpdGhpbiBzZWNvbmRhcnkgaW5kZXgsIHdoaWNoIG1heSB2YXJ5IGluIGZ1dHVyZS5cbiAgICpcbiAgICogQHBhcmFtIG5vbktleUF0dHJpYnV0ZXMgYSBsaXN0IG9mIG5vbi1rZXkgYXR0cmlidXRlIG5hbWVzXG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlTm9uS2V5QXR0cmlidXRlcyhub25LZXlBdHRyaWJ1dGVzOiBzdHJpbmdbXSkge1xuICAgIGlmICh0aGlzLm5vbktleUF0dHJpYnV0ZXMuc2l6ZSArIG5vbktleUF0dHJpYnV0ZXMubGVuZ3RoID4gMTAwKSB7XG4gICAgICAvLyBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYW1hem9uZHluYW1vZGIvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL0xpbWl0cy5odG1sI2xpbWl0cy1zZWNvbmRhcnktaW5kZXhlc1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXG4gICAgICAgIFwiQSBtYXhpbXVtIG51bWJlciBvZiBub25LZXlBdHRyaWJ1dGVzIGFjcm9zcyBhbGwgb2Ygc2Vjb25kYXJ5IGluZGV4ZXMgaXMgMTAwXCIsXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIHN0b3JlIGFsbCBub24ta2V5IGF0dHJpYnV0ZXNcbiAgICBub25LZXlBdHRyaWJ1dGVzLmZvckVhY2goKGF0dCkgPT4gdGhpcy5ub25LZXlBdHRyaWJ1dGVzLmFkZChhdHQpKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVuZGVyUG9pbnRJblRpbWVSZWNvdmVyeShcbiAgICBwcm9wczogVGFibGVQcm9wcyxcbiAgKTogZHluYW1vZGJUYWJsZS5EeW5hbW9kYlRhYmxlUG9pbnRJblRpbWVSZWNvdmVyeSB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKFxuICAgICAgcHJvcHMucG9pbnRJblRpbWVSZWNvdmVyeVNwZWNpZmljYXRpb24gIT09IHVuZGVmaW5lZCAmJlxuICAgICAgcHJvcHMucG9pbnRJblRpbWVSZWNvdmVyeSAhPT0gdW5kZWZpbmVkXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICBcImBwb2ludEluVGltZVJlY292ZXJ5U3BlY2lmaWNhdGlvbmAgYW5kIGBwb2ludEluVGltZVJlY292ZXJ5YCBhcmUgc2V0LiBVc2UgYHBvaW50SW5UaW1lUmVjb3ZlcnlTcGVjaWZpY2F0aW9uYCBvbmx5LlwiLFxuICAgICAgICB0aGlzLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBzcGVjID0gcHJvcHMucG9pbnRJblRpbWVSZWNvdmVyeVNwZWNpZmljYXRpb247XG4gICAgY29uc3QgcmVjb3ZlcnlQZXJpb2RJbkRheXMgPSBzcGVjPy5yZWNvdmVyeVBlcmlvZEluRGF5cztcbiAgICBpZiAoIXNwZWM/LnBvaW50SW5UaW1lUmVjb3ZlcnlFbmFibGVkICYmIHJlY292ZXJ5UGVyaW9kSW5EYXlzKSB7XG4gICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICBcIkNhbm5vdCBzZXQgYHJlY292ZXJ5UGVyaW9kSW5EYXlzYCB3aGlsZSBgcG9pbnRJblRpbWVSZWNvdmVyeUVuYWJsZWRgIGlzIHNldCB0byBmYWxzZS5cIixcbiAgICAgICAgdGhpcyxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgcmVjb3ZlcnlQZXJpb2RJbkRheXMgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgKHJlY292ZXJ5UGVyaW9kSW5EYXlzIDwgMSB8fCByZWNvdmVyeVBlcmlvZEluRGF5cyA+IDM1KVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgXCJgcmVjb3ZlcnlQZXJpb2RJbkRheXNgIG11c3QgYmUgYSB2YWx1ZSBiZXR3ZWVuIGAxYCBhbmQgYDM1YC5cIixcbiAgICAgICAgdGhpcyxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgZW5hYmxlZCA9XG4gICAgICBzcGVjPy5wb2ludEluVGltZVJlY292ZXJ5RW5hYmxlZCA/PyBwcm9wcy5wb2ludEluVGltZVJlY292ZXJ5O1xuICAgIGlmIChlbmFibGVkID09PSB1bmRlZmluZWQpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHsgZW5hYmxlZCwgcmVjb3ZlcnlQZXJpb2RJbkRheXMgfTtcbiAgfVxuXG4gIHByaXZhdGUgcmVuZGVyQ29udHJpYnV0b3JJbnNpZ2h0cyhcbiAgICBwcm9wczogSUNvbnRyaWJ1dG9ySW5zaWdodHNDb25maWd1cmFibGUsXG4gICk6IENvbnRyaWJ1dG9ySW5zaWdodHNTcGVjaWZpY2F0aW9uIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdmFsaWRhdGVDb250cmlidXRvckluc2lnaHRzKFxuICAgICAgcHJvcHMuY29udHJpYnV0b3JJbnNpZ2h0c0VuYWJsZWQsXG4gICAgICBwcm9wcy5jb250cmlidXRvckluc2lnaHRzU3BlY2lmaWNhdGlvbixcbiAgICAgIFwiY29udHJpYnV0b3JJbnNpZ2h0c0VuYWJsZWRcIixcbiAgICAgIHRoaXMsXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRJbmRleFByb2plY3Rpb24oXG4gICAgcHJvcHM6IFNlY29uZGFyeUluZGV4UHJvcHMsXG4gICk6IFBpY2s8XG4gICAgZHluYW1vZGJUYWJsZS5EeW5hbW9kYlRhYmxlR2xvYmFsU2Vjb25kYXJ5SW5kZXgsXG4gICAgXCJwcm9qZWN0aW9uVHlwZVwiIHwgXCJub25LZXlBdHRyaWJ1dGVzXCJcbiAgPiB7XG4gICAgaWYgKFxuICAgICAgcHJvcHMucHJvamVjdGlvblR5cGUgPT09IFByb2plY3Rpb25UeXBlLklOQ0xVREUgJiZcbiAgICAgICFwcm9wcy5ub25LZXlBdHRyaWJ1dGVzXG4gICAgKSB7XG4gICAgICAvLyBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcHJvcGVydGllcy1keW5hbW9kYi1wcm9qZWN0aW9ub2JqZWN0Lmh0bWxcbiAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgIGBOb24ta2V5IGF0dHJpYnV0ZXMgc2hvdWxkIGJlIHNwZWNpZmllZCB3aGVuIHVzaW5nICR7UHJvamVjdGlvblR5cGUuSU5DTFVERX0gcHJvamVjdGlvbiB0eXBlYCxcbiAgICAgICAgdGhpcyxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgcHJvcHMucHJvamVjdGlvblR5cGUgIT09IFByb2plY3Rpb25UeXBlLklOQ0xVREUgJiZcbiAgICAgIHByb3BzLm5vbktleUF0dHJpYnV0ZXNcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgIGBOb24ta2V5IGF0dHJpYnV0ZXMgc2hvdWxkIG5vdCBiZSBzcGVjaWZpZWQgd2hlbiBub3QgdXNpbmcgJHtQcm9qZWN0aW9uVHlwZS5JTkNMVURFfSBwcm9qZWN0aW9uIHR5cGVgLFxuICAgICAgICB0aGlzLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAocHJvcHMubm9uS2V5QXR0cmlidXRlcykge1xuICAgICAgdGhpcy52YWxpZGF0ZU5vbktleUF0dHJpYnV0ZXMocHJvcHMubm9uS2V5QXR0cmlidXRlcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHByb2plY3Rpb25UeXBlOiBwcm9wcy5wcm9qZWN0aW9uVHlwZSA/PyBQcm9qZWN0aW9uVHlwZS5BTEwsXG4gICAgICBub25LZXlBdHRyaWJ1dGVzOiBwcm9wcy5ub25LZXlBdHRyaWJ1dGVzLFxuICAgIH07XG4gIH1cblxuICAvLyBUT0RPOiBrZXlUeXBlIGlzIHVudXNlZFxuICBwcml2YXRlIGFkZEtleShhdHRyaWJ1dGU6IEF0dHJpYnV0ZSwgX2tleVR5cGU6IHN0cmluZykge1xuICAgIGNvbnN0IGV4aXN0aW5nQXR0ciA9IHRoaXMuYXR0cmlidXRlRGVmaW5pdGlvbnNJbnRlcm5hbC5maW5kKFxuICAgICAgKGRlZikgPT4gZGVmLm5hbWUgPT09IGF0dHJpYnV0ZS5uYW1lLFxuICAgICk7XG4gICAgaWYgKGV4aXN0aW5nQXR0ciAmJiBleGlzdGluZ0F0dHIudHlwZSAhPT0gYXR0cmlidXRlLnR5cGUpIHtcbiAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgIGBVbmFibGUgdG8gc3BlY2lmeSAke2F0dHJpYnV0ZS5uYW1lfSBhcyAke2F0dHJpYnV0ZS50eXBlfSBiZWNhdXNlIGl0IHdhcyBhbHJlYWR5IGRlZmluZWQgYXMgJHtleGlzdGluZ0F0dHIudHlwZX1gLFxuICAgICAgICB0aGlzLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKCFleGlzdGluZ0F0dHIpIHtcbiAgICAgIHRoaXMuYXR0cmlidXRlRGVmaW5pdGlvbnNJbnRlcm5hbC5wdXNoKHtcbiAgICAgICAgbmFtZTogYXR0cmlidXRlLm5hbWUsXG4gICAgICAgIHR5cGU6IGF0dHJpYnV0ZS50eXBlLFxuICAgICAgfSk7XG4gICAgfVxuICAgIC8vIEZvciB0aGUgbWFpbiB0YWJsZSwgaGFzaEtleSBhbmQgcmFuZ2VLZXkgYXJlIHNldCBkaXJlY3RseSBvbiB0aGUgcmVzb3VyY2UuXG4gICAgLy8gRm9yIEdTSXMvTFNJcywgdGhleSBhcmUgcGFydCBvZiB0aGVpciByZXNwZWN0aXZlIGJsb2Nrcy5cbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlciB0aGUga2V5IGF0dHJpYnV0ZSBvZiB0YWJsZSBvciBzZWNvbmRhcnkgaW5kZXggdG8gYXNzZW1ibGUgYXR0cmlidXRlIGRlZmluaXRpb25zIG9mIFRhYmxlUmVzb3VyY2VQcm9wcy5cbiAgICpcbiAgICogQHBhcmFtIGF0dHJpYnV0ZSB0aGUga2V5IGF0dHJpYnV0ZSBvZiB0YWJsZSBvciBzZWNvbmRhcnkgaW5kZXhcbiAgICovXG4gIHByaXZhdGUgcmVnaXN0ZXJBdHRyaWJ1dGUoYXR0cmlidXRlOiBBdHRyaWJ1dGUpIHtcbiAgICBjb25zdCBleGlzdGluZ0RlZiA9IHRoaXMuYXR0cmlidXRlRGVmaW5pdGlvbnNJbnRlcm5hbC5maW5kKFxuICAgICAgKGRlZikgPT4gZGVmLm5hbWUgPT09IGF0dHJpYnV0ZS5uYW1lLFxuICAgICk7XG4gICAgaWYgKGV4aXN0aW5nRGVmICYmIGV4aXN0aW5nRGVmLnR5cGUgIT09IGF0dHJpYnV0ZS50eXBlKSB7XG4gICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICBgVW5hYmxlIHRvIHNwZWNpZnkgJHthdHRyaWJ1dGUubmFtZX0gYXMgJHthdHRyaWJ1dGUudHlwZX0gYmVjYXVzZSBpdCB3YXMgYWxyZWFkeSBkZWZpbmVkIGFzICR7ZXhpc3RpbmdEZWYudHlwZX1gLFxuICAgICAgICB0aGlzLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKCFleGlzdGluZ0RlZikge1xuICAgICAgdGhpcy5hdHRyaWJ1dGVEZWZpbml0aW9uc0ludGVybmFsLnB1c2goe1xuICAgICAgICBuYW1lOiBhdHRyaWJ1dGUubmFtZSxcbiAgICAgICAgdHlwZTogYXR0cmlidXRlLnR5cGUsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvLyBDb21tZW50aW5nIG91dCBtYWtlU2NhbGluZ1JvbGUgbWV0aG9kIC0gVGVycmFmb3JtIGhhbmRsZXMgc2VydmljZS1saW5rZWQgcm9sZXMgYXV0b21hdGljYWxseVxuICAvLyBVbmxpa2UgQVdTIENESyBDbG91ZEZvcm1hdGlvbiBpbXBsZW1lbnRhdGlvbiwgVGVycmFmb3JtIEFXUyBwcm92aWRlciBjcmVhdGVzIGFwcHJvcHJpYXRlXG4gIC8vIHNlcnZpY2UtbGlua2VkIHJvbGVzIHdoZW4gcm9sZUFybiBpcyBvbWl0dGVkIGZyb20gYXdzX2FwcGF1dG9zY2FsaW5nX3RhcmdldCByZXNvdXJjZVxuICAvLyBwcml2YXRlIG1ha2VTY2FsaW5nUm9sZSgpOiBpYW0uSVJvbGUge1xuICAvLyAgIC8vIFVzZSBhIFNlcnZpY2UgTGlua2VkIFJvbGUuXG4gIC8vICAgLy8gaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2F1dG9zY2FsaW5nL2FwcGxpY2F0aW9uL3VzZXJndWlkZS9hcHBsaWNhdGlvbi1hdXRvLXNjYWxpbmctc2VydmljZS1saW5rZWQtcm9sZXMuaHRtbFxuICAvLyAgIHJldHVybiBpYW0uUm9sZS5mcm9tUm9sZUFybihcbiAgLy8gICAgIHRoaXMsXG4gIC8vICAgICBcIlNjYWxpbmdSb2xlXCIsXG4gIC8vICAgICB0aGlzLnN0YWNrLmZvcm1hdEFybih7XG4gIC8vICAgICAgIHNlcnZpY2U6IFwiaWFtXCIsXG4gIC8vICAgICAgIHJlZ2lvbjogXCJcIiwgLy8gU0xScyBhcmUgZ2xvYmFsXG4gIC8vICAgICAgIHJlc291cmNlOlxuICAvLyAgICAgICAgIFwicm9sZS9hd3Mtc2VydmljZS1yb2xlL2R5bmFtb2RiLmFwcGxpY2F0aW9uLWF1dG9zY2FsaW5nLmFtYXpvbmF3cy5jb21cIixcbiAgLy8gICAgICAgcmVzb3VyY2VOYW1lOiBcIkFXU1NlcnZpY2VSb2xlRm9yQXBwbGljYXRpb25BdXRvU2NhbGluZ19EeW5hbW9EQlRhYmxlXCIsXG4gIC8vICAgICAgIC8vIFRPRE86IElzIHRoaXMgbmVlZGVkP1xuICAvLyAgICAgICAvLyBhcm5Gb3JtYXQ6IEFybkZvcm1hdC5TTEFTSF9SRVNPVVJDRV9TTEFTSF9SRVNPVVJDRV9OQU1FLCAvLyBTcGVjaWFsIGZvcm1hdCBmb3IgU0xSc1xuICAvLyAgICAgfSksXG4gIC8vICAgKTtcbiAgLy8gfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIHJlcGxpY2EgdGFibGVzXG4gICAqXG4gICAqIEBwYXJhbSByZWdpb25zIHJlZ2lvbnMgd2hlcmUgdG8gY3JlYXRlIHRhYmxlc1xuICAgKi9cbiAgcHJpdmF0ZSByZW5kZXJSZXBsaWNhcyhcbiAgICByZWdpb25zPzogc3RyaW5nW10sXG4gICAgcmVwbGljYVNwZWNpZmljYXRpb24/OiBEeW5hbW9kYlRhYmxlUmVwbGljYVtdLFxuICApOiBkeW5hbW9kYlRhYmxlLkR5bmFtb2RiVGFibGVSZXBsaWNhW10gfCB1bmRlZmluZWQge1xuICAgIGlmIChyZXBsaWNhU3BlY2lmaWNhdGlvbiAmJiByZXBsaWNhU3BlY2lmaWNhdGlvbi5sZW5ndGggPiAwKSB7XG4gICAgICBpZiAoXG4gICAgICAgICFUb2tlbi5pc1VucmVzb2x2ZWQodGhpcy5zdGFjay5yZWdpb24pICYmXG4gICAgICAgIHJlcGxpY2FTcGVjaWZpY2F0aW9uLnNvbWUoXG4gICAgICAgICAgKHJlcGxpY2EpID0+IHJlcGxpY2EucmVnaW9uTmFtZSA9PT0gdGhpcy5zdGFjay5yZWdpb24sXG4gICAgICAgIClcbiAgICAgICkge1xuICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICAgIFwiYHJlcGxpY2FTcGVjaWZpY2F0aW9uYCBjYW5ub3QgaW5jbHVkZSB0aGUgcmVnaW9uIHdoZXJlIHRoaXMgc3RhY2sgaXMgZGVwbG95ZWQuXCIsXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXBsaWNhU3BlY2lmaWNhdGlvbi5tYXAoKHJlcGxpY2EpID0+ICh7XG4gICAgICAgIHJlZ2lvbk5hbWU6IHJlcGxpY2EucmVnaW9uTmFtZSxcbiAgICAgICAga21zS2V5QXJuOiByZXBsaWNhLmVuY3J5cHRpb25LZXk/LmtleUFybixcbiAgICAgICAgcG9pbnRJblRpbWVSZWNvdmVyeTogcmVwbGljYS5wb2ludEluVGltZVJlY292ZXJ5LFxuICAgICAgICBwcm9wYWdhdGVUYWdzOiByZXBsaWNhLnByb3BhZ2F0ZVRhZ3MsXG4gICAgICB9KSk7XG4gICAgfVxuICAgIGlmICghcmVnaW9ucyB8fCByZWdpb25zLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAgIGlmIChcbiAgICAgICFUb2tlbi5pc1VucmVzb2x2ZWQodGhpcy5zdGFjay5yZWdpb24pICYmXG4gICAgICByZWdpb25zLmluY2x1ZGVzKHRoaXMuc3RhY2sucmVnaW9uKVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgXCJgcmVwbGljYXRpb25SZWdpb25zYCBjYW5ub3QgaW5jbHVkZSB0aGUgcmVnaW9uIHdoZXJlIHRoaXMgc3RhY2sgaXMgZGVwbG95ZWQuXCIsXG4gICAgICAgIHRoaXMsXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBbLi4ubmV3IFNldChyZWdpb25zKV0ubWFwKChyZWdpb24pID0+ICh7XG4gICAgICByZWdpb25OYW1lOiByZWdpb24sXG4gICAgfSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhpcyB0YWJsZSBoYXMgaW5kZXhlc1xuICAgKi9cbiAgcHJvdGVjdGVkIGdldCBoYXNJbmRleCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5nbG9iYWxTZWNvbmRhcnlJbmRleGVzSW50ZXJuYWwubGVuZ3RoICtcbiAgICAgICAgdGhpcy5sb2NhbFNlY29uZGFyeUluZGV4ZXNJbnRlcm5hbC5sZW5ndGggPlxuICAgICAgMFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHVwIGtleSBwcm9wZXJ0aWVzIGFuZCByZXR1cm4gdGhlIFRhYmxlIGVuY3J5cHRpb24gcHJvcGVydHkgZnJvbSB0aGVcbiAgICogdXNlcidzIGNvbmZpZ3VyYXRpb24uXG4gICAqL1xuICBwcml2YXRlIHBhcnNlRW5jcnlwdGlvbihwcm9wczogVGFibGVQcm9wcyk6IHtcbiAgICBzc2VTcGVjaWZpY2F0aW9uPzogZHluYW1vZGJUYWJsZS5EeW5hbW9kYlRhYmxlU2VydmVyU2lkZUVuY3J5cHRpb247XG4gICAgZW5jcnlwdGlvbktleT86IGttcy5JS2V5O1xuICB9IHtcbiAgICBsZXQgZW5jcnlwdGlvblR5cGUgPSBwcm9wcy5lbmNyeXB0aW9uO1xuXG4gICAgaWYgKGVuY3J5cHRpb25UeXBlICE9IG51bGwgJiYgcHJvcHMuc2VydmVyU2lkZUVuY3J5cHRpb24gIT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgXCJPbmx5IG9uZSBvZiBlbmNyeXB0aW9uIGFuZCBzZXJ2ZXJTaWRlRW5jcnlwdGlvbiBjYW4gYmUgc3BlY2lmaWVkLCBidXQgYm90aCB3ZXJlIHByb3ZpZGVkXCIsXG4gICAgICAgIHRoaXMsXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChwcm9wcy5zZXJ2ZXJTaWRlRW5jcnlwdGlvbiAmJiBwcm9wcy5lbmNyeXB0aW9uS2V5KSB7XG4gICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICBcImVuY3J5cHRpb25LZXkgY2Fubm90IGJlIHNwZWNpZmllZCB3aGVuIHNlcnZlclNpZGVFbmNyeXB0aW9uIGlzIHNwZWNpZmllZC4gVXNlIGVuY3J5cHRpb24gaW5zdGVhZFwiLFxuICAgICAgICB0aGlzLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoZW5jcnlwdGlvblR5cGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgZW5jcnlwdGlvblR5cGUgPVxuICAgICAgICBwcm9wcy5lbmNyeXB0aW9uS2V5ICE9IG51bGxcbiAgICAgICAgICA/IC8vIElmIHRoZXJlIGlzIGEgY29uZmlndXJlZCBlbmNyeXB0aW9uS2V5LCB0aGUgZW5jcnlwdGlvbiBpcyBpbXBsaWNpdGx5IENVU1RPTUVSX01BTkFHRURcbiAgICAgICAgICAgIFRhYmxlRW5jcnlwdGlvbi5DVVNUT01FUl9NQU5BR0VEXG4gICAgICAgICAgOiAvLyBPdGhlcndpc2UsIGlmIHNldmVyU2lkZUVuY3J5cHRpb24gaXMgZW5hYmxlZCwgaXQncyBBV1NfTUFOQUdFRDsgZWxzZSB1bmRlZmluZWQgKGRvIG5vdCBzZXQgYW55dGhpbmcpXG4gICAgICAgICAgICBwcm9wcy5zZXJ2ZXJTaWRlRW5jcnlwdGlvblxuICAgICAgICAgICAgPyBUYWJsZUVuY3J5cHRpb24uQVdTX01BTkFHRURcbiAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIGVuY3J5cHRpb25UeXBlICE9PSBUYWJsZUVuY3J5cHRpb24uQ1VTVE9NRVJfTUFOQUdFRCAmJlxuICAgICAgcHJvcHMuZW5jcnlwdGlvbktleVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgYGVuY3J5cHRpb25LZXkgY2Fubm90IGJlIHNwZWNpZmllZCB1bmxlc3MgZW5jcnlwdGlvbiBpcyBzZXQgdG8gVGFibGVFbmNyeXB0aW9uLkNVU1RPTUVSX01BTkFHRUQgKGl0IHdhcyBzZXQgdG8gJHtlbmNyeXB0aW9uVHlwZX0pYCxcbiAgICAgICAgdGhpcyxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gaW4gdGhpcyBjYXNlLCBlYWNoIHJlcGxpY2Egc2hvdWxkIHNwZWNpZnkgYSBDdXN0b21lciBLTVMga2V5LlxuICAgIGlmIChcbiAgICAgIGVuY3J5cHRpb25UeXBlID09PSBUYWJsZUVuY3J5cHRpb24uQ1VTVE9NRVJfTUFOQUdFRCAmJlxuICAgICAgcHJvcHMucmVwbGljYXRpb25SZWdpb25zXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICBcIlRhYmxlRW5jcnlwdGlvbi5DVVNUT01FUl9NQU5BR0VEIGlzIG5vdCBzdXBwb3J0ZWQgYnkgRHluYW1vREIgR2xvYmFsIFRhYmxlcyAod2hlcmUgcmVwbGljYXRpb25SZWdpb25zIHdhcyBzZXQpXCIsXG4gICAgICAgIHRoaXMsXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIHByb3BzLnJlcGxpY2FTcGVjaWZpY2F0aW9uICYmXG4gICAgICBwcm9wcy5yZXBsaWNhU3BlY2lmaWNhdGlvbi5sZW5ndGggPiAwICYmXG4gICAgICBlbmNyeXB0aW9uVHlwZSA9PT0gVGFibGVFbmNyeXB0aW9uLkNVU1RPTUVSX01BTkFHRURcbiAgICApIHtcbiAgICAgIGlmIChcbiAgICAgICAgcHJvcHMucmVwbGljYVNwZWNpZmljYXRpb24uc29tZShcbiAgICAgICAgICAocmVwbGljYSkgPT4gIXJlcGxpY2EuZW5jcnlwdGlvbktleSwgLy8gQ2hlY2sgaWYgYW55IHJlcGxpY2EgaXMgbWlzc2luZyBhbiBlbmNyeXB0aW9uIGtleVxuICAgICAgICApXG4gICAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgICBcIldoZW4gdXNpbmcgcmVwbGljYVNwZWNpZmljYXRpb24sIGVhY2ggcmVwbGljYSBtdXN0IHNwZWNpZnkgYW4gZW5jcnlwdGlvbktleSBpZiBUYWJsZUVuY3J5cHRpb24uQ1VTVE9NRVJfTUFOQUdFRCBpcyB1c2VkXCIsXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgLy9WYWxpZGF0ZSB0aGF0IHRoZSBrZXlzIGJlbG9uZyB0byB0aGUgY29ycmVjdCByZWdpb25zXG4gICAgICBpZiAoXG4gICAgICAgIHByb3BzLnJlcGxpY2FTcGVjaWZpY2F0aW9uLnNvbWUoXG4gICAgICAgICAgKHJlcGxpY2EpID0+XG4gICAgICAgICAgICByZXBsaWNhLmVuY3J5cHRpb25LZXkgJiZcbiAgICAgICAgICAgIHJlcGxpY2EuZW5jcnlwdGlvbktleS5lbnYucmVnaW9uICE9PSByZXBsaWNhLnJlZ2lvbk5hbWUsXG4gICAgICAgIClcbiAgICAgICkge1xuICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICAgIFwiV2hlbiB1c2luZyByZXBsaWNhU3BlY2lmaWNhdGlvbiwgZWFjaCByZXBsaWNhJ3MgZW5jcnlwdGlvbktleSBtdXN0IGJlIGluIHRoZSBzYW1lIHJlZ2lvbiBhcyBpdHMgcmVwbGljYVwiLFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc3dpdGNoIChlbmNyeXB0aW9uVHlwZSkge1xuICAgICAgY2FzZSBUYWJsZUVuY3J5cHRpb24uQ1VTVE9NRVJfTUFOQUdFRDpcbiAgICAgICAgY29uc3Qga2V5ID1cbiAgICAgICAgICBwcm9wcy5lbmNyeXB0aW9uS2V5ID8/XG4gICAgICAgICAgbmV3IGttcy5LZXkodGhpcywgXCJLZXlcIiwge1xuICAgICAgICAgICAgZGVzY3JpcHRpb246IGBDdXN0b21lci1tYW5hZ2VkIGtleSBhdXRvLWNyZWF0ZWQgZm9yIGVuY3J5cHRpbmcgRHluYW1vREIgdGFibGUgYXQgJHt0aGlzLm5vZGUucGF0aH1gLFxuICAgICAgICAgICAgZW5hYmxlS2V5Um90YXRpb246IHRydWUsXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzc2VTcGVjaWZpY2F0aW9uOiB7IGVuYWJsZWQ6IHRydWUsIGttc0tleUFybjoga2V5LmtleUFybiB9LFxuICAgICAgICAgIGVuY3J5cHRpb25LZXk6IGtleSxcbiAgICAgICAgfTtcblxuICAgICAgY2FzZSBUYWJsZUVuY3J5cHRpb24uQVdTX01BTkFHRUQ6XG4gICAgICAgIHJldHVybiB7IHNzZVNwZWNpZmljYXRpb246IHsgZW5hYmxlZDogdHJ1ZSB9IH07IC8vIFVzZXMgYWxpYXMvYXdzL2R5bmFtb2RiIGJ5IGRlZmF1bHRcbiAgICAgIGNhc2UgVGFibGVFbmNyeXB0aW9uLkRFRkFVTFQ6XG4gICAgICAgIHJldHVybiB7IHNzZVNwZWNpZmljYXRpb246IHsgZW5hYmxlZDogZmFsc2UgfSB9OyAvLyBBV1Mtb3duZWQga2V5XG4gICAgICBjYXNlIHVuZGVmaW5lZDpcbiAgICAgICAgcmV0dXJuIHsgc3NlU3BlY2lmaWNhdGlvbjogdW5kZWZpbmVkIH07IC8vIERlZmF1bHRzIHRvIEFXUy1vd25lZCBrZXlcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgICAgYFVuZXhwZWN0ZWQgJ2VuY3J5cHRpb25UeXBlJzogJHtlbmNyeXB0aW9uVHlwZX1gLFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZW5kZXJJbXBvcnRTb3VyY2VTcGVjaWZpY2F0aW9uKFxuICAgIGltcG9ydFNvdXJjZT86IEltcG9ydFNvdXJjZVNwZWNpZmljYXRpb24sXG4gICk6IGR5bmFtb2RiVGFibGUuRHluYW1vZGJUYWJsZUltcG9ydFRhYmxlIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoIWltcG9ydFNvdXJjZSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBjb25zdCByZW5kZXJlZElucHV0Rm9ybWF0ID0gaW1wb3J0U291cmNlLmlucHV0Rm9ybWF0Ll9yZW5kZXIoKTtcbiAgICByZXR1cm4ge1xuICAgICAgaW5wdXRGb3JtYXQ6IHJlbmRlcmVkSW5wdXRGb3JtYXQuaW5wdXRGb3JtYXQsXG4gICAgICBpbnB1dEZvcm1hdE9wdGlvbnM6IHJlbmRlcmVkSW5wdXRGb3JtYXQuaW5wdXRGb3JtYXRPcHRpb25zLFxuICAgICAgaW5wdXRDb21wcmVzc2lvblR5cGU6IGltcG9ydFNvdXJjZS5jb21wcmVzc2lvblR5cGUsXG4gICAgICBzM0J1Y2tldFNvdXJjZToge1xuICAgICAgICBidWNrZXQ6IGltcG9ydFNvdXJjZS5idWNrZXQuYnVja2V0TmFtZSxcbiAgICAgICAgYnVja2V0T3duZXI6IGltcG9ydFNvdXJjZS5idWNrZXRPd25lcixcbiAgICAgICAga2V5UHJlZml4OiBpbXBvcnRTb3VyY2Uua2V5UHJlZml4LFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgcmVzb3VyY2UgdG8gdGhlIFRlcnJhZm9ybSBKU09OIG91dHB1dCBhdCBTeW50aCB0aW1lLlxuICAgKlxuICAgKiBjYWxsZWQgYnkgVGVycmFmb3JtU3RhY2sucHJlcGFyZVN0YWNrKClcbiAgICovXG4gIHB1YmxpYyB0b1RlcnJhZm9ybSgpOiBhbnkge1xuICAgIC8qKlxuICAgICAqIEEgcHJlcGFyaW5nIHJlc29sdmUgbWlnaHQgYWRkIG5ldyByZXNvdXJjZXMgdG8gdGhlIHN0YWNrXG4gICAgICovXG4gICAgZm9yIChjb25zdCBnc2kgb2YgdGhpcy5nbG9iYWxTZWNvbmRhcnlJbmRleGVzSW50ZXJuYWwpIHtcbiAgICAgIGlmIChnc2kuY29udHJpYnV0b3JJbnNpZ2h0c1NwZWNpZmljYXRpb24/LmVuYWJsZWQpIHtcbiAgICAgICAgbmV3IGR5bmFtb2RiQ29udHJpYnV0b3JJbnNpZ2h0cy5EeW5hbW9kYkNvbnRyaWJ1dG9ySW5zaWdodHMoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICBcIkNvbnRyaWJ1dG9ySW5zaWdodHNcIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0YWJsZU5hbWU6IHRoaXMudGFibGVOYW1lLFxuICAgICAgICAgICAgaW5kZXhOYW1lOiBnc2kubmFtZSxcbiAgICAgICAgICAgIG1vZGU6IGdzaS5jb250cmlidXRvckluc2lnaHRzU3BlY2lmaWNhdGlvbj8ubW9kZSxcbiAgICAgICAgICB9LFxuICAgICAgICApO1xuICAgICAgICBkZWxldGUgZ3NpLmNvbnRyaWJ1dG9ySW5zaWdodHNTcGVjaWZpY2F0aW9uO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge307XG4gIH1cbn1cblxuLyoqXG4gKiBKdXN0IGEgY29udmVuaWVudCB3YXkgdG8ga2VlcCB0cmFjayBvZiBib3RoIGF0dHJpYnV0ZXNcbiAqL1xuaW50ZXJmYWNlIFNjYWxhYmxlQXR0cmlidXRlUGFpciB7XG4gIHNjYWxhYmxlUmVhZEF0dHJpYnV0ZT86IFNjYWxhYmxlVGFibGVBdHRyaWJ1dGU7XG4gIHNjYWxhYmxlV3JpdGVBdHRyaWJ1dGU/OiBTY2FsYWJsZVRhYmxlQXR0cmlidXRlO1xufVxuIl19
|
package/lib/bundling.js
CHANGED
|
@@ -31,7 +31,7 @@ class DockerBuildSecret {
|
|
|
31
31
|
}
|
|
32
32
|
exports.DockerBuildSecret = DockerBuildSecret;
|
|
33
33
|
_a = JSII_RTTI_SYMBOL_1;
|
|
34
|
-
DockerBuildSecret[_a] = { fqn: "terraconstructs.DockerBuildSecret", version: "0.2.
|
|
34
|
+
DockerBuildSecret[_a] = { fqn: "terraconstructs.DockerBuildSecret", version: "0.2.4" };
|
|
35
35
|
/**
|
|
36
36
|
* The type of output that a bundling operation is producing.
|
|
37
37
|
*
|
|
@@ -182,7 +182,7 @@ class BundlingDockerImage {
|
|
|
182
182
|
}
|
|
183
183
|
exports.BundlingDockerImage = BundlingDockerImage;
|
|
184
184
|
_b = JSII_RTTI_SYMBOL_1;
|
|
185
|
-
BundlingDockerImage[_b] = { fqn: "terraconstructs.BundlingDockerImage", version: "0.2.
|
|
185
|
+
BundlingDockerImage[_b] = { fqn: "terraconstructs.BundlingDockerImage", version: "0.2.4" };
|
|
186
186
|
/**
|
|
187
187
|
* A Docker image
|
|
188
188
|
*/
|
|
@@ -312,7 +312,7 @@ class DockerImage extends BundlingDockerImage {
|
|
|
312
312
|
}
|
|
313
313
|
exports.DockerImage = DockerImage;
|
|
314
314
|
_c = JSII_RTTI_SYMBOL_1;
|
|
315
|
-
DockerImage[_c] = { fqn: "terraconstructs.DockerImage", version: "0.2.
|
|
315
|
+
DockerImage[_c] = { fqn: "terraconstructs.DockerImage", version: "0.2.4" };
|
|
316
316
|
/**
|
|
317
317
|
* Supported Docker volume consistency types. Only valid on macOS due to the way file storage works on Mac
|
|
318
318
|
*/
|
package/lib/construct-base.js
CHANGED
|
@@ -27,7 +27,7 @@ class GridTags {
|
|
|
27
27
|
}
|
|
28
28
|
exports.GridTags = GridTags;
|
|
29
29
|
_a = JSII_RTTI_SYMBOL_1;
|
|
30
|
-
GridTags[_a] = { fqn: "terraconstructs.GridTags", version: "0.2.
|
|
30
|
+
GridTags[_a] = { fqn: "terraconstructs.GridTags", version: "0.2.4" };
|
|
31
31
|
/**
|
|
32
32
|
* Base class for all TerraConstructs
|
|
33
33
|
*
|
|
@@ -88,5 +88,5 @@ class TerraConstructBase extends cdktf_1.TerraformElement {
|
|
|
88
88
|
}
|
|
89
89
|
exports.TerraConstructBase = TerraConstructBase;
|
|
90
90
|
_b = JSII_RTTI_SYMBOL_1;
|
|
91
|
-
TerraConstructBase[_b] = { fqn: "terraconstructs.TerraConstructBase", version: "0.2.
|
|
91
|
+
TerraConstructBase[_b] = { fqn: "terraconstructs.TerraConstructBase", version: "0.2.4" };
|
|
92
92
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RydWN0LWJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvY29uc3RydWN0LWJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQW1EQSxrRUFNQzs7QUF6REQsaUNBUWU7QUFFZiw2Q0FBeUM7QUF3Q3pDLDREQUE0RDtBQUM1RCxTQUFnQiwyQkFBMkIsQ0FDekMsQ0FBYTtJQUViLE9BQU8sQ0FDTCx5QkFBaUIsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsSUFBSSxNQUFNLElBQUksQ0FBQyxJQUFJLFdBQVcsSUFBSSxDQUFDLENBQzVFLENBQUM7QUFDSixDQUFDO0FBRUQsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDO0FBRS9CLGdEQUFnRDtBQUNoRCxNQUFhLFFBQVE7SUFDbkIsWUFBb0IsU0FBaUM7UUFBakMsY0FBUyxHQUFULFNBQVMsQ0FBd0I7SUFBRyxDQUFDO0lBQ3pELEtBQUssQ0FBQyxJQUFnQjtRQUNwQixJQUFJLDJCQUEyQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDdEMsbUVBQW1FO1lBQ25FLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxTQUFTLElBQUksRUFBRSxDQUFDO1lBQ3pDLHNEQUFzRDtZQUN0RCxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsV0FBVyxFQUFFLENBQUM7UUFDcEQsQ0FBQztJQUNILENBQUM7O0FBVEgsNEJBVUM7OztBQUVEOzs7O0dBSUc7QUFDSCxNQUFzQixrQkFDcEIsU0FBUSx3QkFBZ0I7SUFHeEI7O09BRUc7SUFDSSxNQUFNLENBQUMsZUFBZSxDQUFDLFNBQXFCO1FBQ2pELE9BQU8sU0FBUyxDQUFDLElBQUksQ0FBQyxZQUFZO1lBQ2hDLENBQUMsQ0FBQyx5QkFBaUIsQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQztZQUNwRSxDQUFDLENBQUMsS0FBSyxDQUFDO0lBQ1osQ0FBQztJQVlEOztPQUVHO0lBQ0gsSUFBVyxRQUFRO1FBQ2pCLE9BQU8sc0JBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUM7SUFDbkQsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBVyxlQUFlO1FBQ3hCLE9BQU8sc0JBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxlQUFlLENBQUM7SUFDMUQsQ0FBQztJQU9ELFlBQ0UsS0FBZ0IsRUFDQyxXQUFtQixFQUNwQyxRQUE2QixFQUFFO1FBRS9CLEtBQUssQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFIVCxnQkFBVyxHQUFYLFdBQVcsQ0FBUTtRQUlwQyxJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQyxVQUFVLElBQUksR0FBRyxXQUFXLFNBQVMsQ0FBQztRQUM5RCxJQUFJLENBQUMsWUFBWTtZQUNmLEtBQUssQ0FBQyxZQUFZLElBQUksR0FBRyxJQUFJLENBQUMsZUFBZSxJQUFJLFdBQVcsRUFBRSxDQUFDO1FBRWpFLGVBQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsa0RBQWtEO2FBQ2hFLEdBQUcsQ0FDRixJQUFJLFFBQVEsQ0FBQztZQUNYLENBQUMsR0FBRyxlQUFlLGtCQUFrQixDQUFDLEVBQUUsSUFBSSxDQUFDLGVBQWU7WUFDNUQsQ0FBQyxHQUFHLGVBQWUsT0FBTyxDQUFDLEVBQUUsSUFBSSxDQUFDLFFBQVE7WUFDMUMsSUFBSSxFQUFFLElBQUksQ0FBQyxZQUFZO1NBQ3hCLENBQUMsQ0FDSCxDQUFDO1FBQ0osTUFBTSxlQUFlLEdBQUcsS0FBSyxDQUFDLGVBQWUsSUFBSSxLQUFLLENBQUM7UUFDdkQsSUFBSSxlQUFlLEVBQUUsQ0FBQztZQUNwQixJQUFJLHVCQUFlLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUU7Z0JBQzFDLFFBQVEsRUFBRSxJQUFJO2dCQUNkLFdBQVcsRUFBRSxlQUFlLElBQUksQ0FBQyxZQUFZLEVBQUU7Z0JBQy9DLEtBQUssRUFBRSxZQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxFQUFFLENBQUM7YUFDOUQsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7SUFFRCxxRkFBcUY7SUFDckYsOERBQThEO0lBQzlELElBQVcsR0FBRztRQUNaLFFBQVE7UUFDUixzQkFBc0I7UUFDdEIsZ0JBQWdCO1FBQ2hCLHlFQUF5RTtRQUN6RSxNQUFNLElBQUksS0FBSyxDQUNiLDBFQUEwRSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQ3RILENBQUM7UUFDRixJQUFJO0lBQ04sQ0FBQzs7QUFqRkgsZ0RBa0ZDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgTGF6eSxcbiAgVGVycmFmb3JtUmVzb3VyY2UsXG4gIFRlcnJhZm9ybUVsZW1lbnQsXG4gIFRlcnJhZm9ybU91dHB1dCxcbiAgVGVycmFmb3JtTWV0YUFyZ3VtZW50cyxcbiAgQXNwZWN0cyxcbiAgSUFzcGVjdCxcbn0gZnJvbSBcImNka3RmXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QsIElDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgU3RhY2tCYXNlIH0gZnJvbSBcIi4vc3RhY2stYmFzZVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRlcnJhQ29uc3RydWN0UHJvcHMgZXh0ZW5kcyBUZXJyYWZvcm1NZXRhQXJndW1lbnRzIHtcbiAgLyoqXG4gICAqIFRoZSBmcmllbmRseSBuYW1lIGZvciBUZXJyYUNvbnN0cnVjdCByZXNvdXJjZXNcbiAgICpcbiAgICogQGRlZmF1bHQgLSBgZW52aXJvbm1lbnROYW1lLWlkYFxuICAgKi9cbiAgcmVhZG9ubHkgZnJpZW5kbHlOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHJlZ2lzdGVyIFRlcnJhZm9ybSBvdXRwdXRzIGZvciB0aGlzIFRlcnJhQ29uc3RydWN0XG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSByZWdpc3Rlck91dHB1dHM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBvdmVycmlkZSBmb3IgdGhlIG91dHB1dHMgbmFtZVxuICAgKlxuICAgKiBAZGVmYXVsdCBpZFxuICAgKi9cbiAgcmVhZG9ubHkgb3V0cHV0TmFtZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJVGVycmFDb25zdHJ1Y3QgZXh0ZW5kcyBJQ29uc3RydWN0IHtcbiAgLyoqXG4gICAqIEVudmlyb25tZW50IE5hbWUgcGFzc2VkIGluIGZyb20gdGhlIENMSVxuICAgKi9cbiAgcmVhZG9ubHkgZW52aXJvbm1lbnROYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGdyaWRVVUlEOiBzdHJpbmc7XG4gIHJlYWRvbmx5IG91dHB1dHM6IFJlY29yZDxzdHJpbmcsIGFueT47XG59XG5cbi8vIFRPRE86IHRoaXMgaXMgYXdzIHNwZWNpZmljLCBzaG91bGQgYmUgbW92ZWQgdG8gYXdzIG1vZHVsZVxuZXhwb3J0IHR5cGUgVGFnZ2FibGVDb25zdHJ1Y3QgPSBUZXJyYWZvcm1SZXNvdXJjZSAmIHtcbiAgdGFncz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG4gIHRhZ3NJbnB1dD86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG59O1xuXG4vLyBUT0RPOiB0aGlzIGlzIGF3cyBzcGVjaWZpYywgc2hvdWxkIGJlIG1vdmVkIHRvIGF3cyBtb2R1bGVcbmV4cG9ydCBmdW5jdGlvbiBpc1RhZ2dhYmxlVGVycmFmb3JtUmVzb3VyY2UoXG4gIHg6IElDb25zdHJ1Y3QsXG4pOiB4IGlzIFRhZ2dhYmxlQ29uc3RydWN0IHtcbiAgcmV0dXJuIChcbiAgICBUZXJyYWZvcm1SZXNvdXJjZS5pc1RlcnJhZm9ybVJlc291cmNlKHgpICYmIFwidGFnc1wiIGluIHggJiYgXCJ0YWdzSW5wdXRcIiBpbiB4XG4gICk7XG59XG5cbmNvbnN0IEdSSURfVEFHX1BSRUZJWCA9IFwiZ3JpZFwiO1xuXG4vLyBBZGQgR3JpZCBUYWdzIHRvIGFsbCBUZXJyYUNvbnN0cnVjdCByZXNvdXJjZXNcbmV4cG9ydCBjbGFzcyBHcmlkVGFncyBpbXBsZW1lbnRzIElBc3BlY3Qge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHRhZ3NUb0FkZDogUmVjb3JkPHN0cmluZywgc3RyaW5nPikge31cbiAgdmlzaXQobm9kZTogSUNvbnN0cnVjdCkge1xuICAgIGlmIChpc1RhZ2dhYmxlVGVycmFmb3JtUmVzb3VyY2Uobm9kZSkpIHtcbiAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2Nka3RmL2NvbmNlcHRzL2FzcGVjdHNcbiAgICAgIGNvbnN0IGN1cnJlbnRUYWdzID0gbm9kZS50YWdzSW5wdXQgfHwge307XG4gICAgICAvLyBUT0RPOiBCdWcgLSB0YWdzVG9BZGQgYXJlIG92ZXJ3cml0dGVuIGJ5IGN1cnJlblRhZ3NcbiAgICAgIG5vZGUudGFncyA9IHsgLi4udGhpcy50YWdzVG9BZGQsIC4uLmN1cnJlbnRUYWdzIH07XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQmFzZSBjbGFzcyBmb3IgYWxsIFRlcnJhQ29uc3RydWN0c1xuICpcbiAqIEFsbG93cyBhIFRlcnJhQ29uc3RydWN0IHRvIGxhemlseSByZWdpc3RlciBpdHMgb3V0cHV0cyB3aXRoIGl0cyBwYXJlbnQgU3RhY2tcbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFRlcnJhQ29uc3RydWN0QmFzZVxuICBleHRlbmRzIFRlcnJhZm9ybUVsZW1lbnRcbiAgaW1wbGVtZW50cyBJVGVycmFDb25zdHJ1Y3RcbntcbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgY29uc3RydWN0IHdhcyBjcmVhdGVkIGJ5IENES1RGLCBhbmQgZmFsc2Ugb3RoZXJ3aXNlXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGlzT3duZWRSZXNvdXJjZShjb25zdHJ1Y3Q6IElDb25zdHJ1Y3QpOiBib29sZWFuIHtcbiAgICByZXR1cm4gY29uc3RydWN0Lm5vZGUuZGVmYXVsdENoaWxkXG4gICAgICA/IFRlcnJhZm9ybVJlc291cmNlLmlzVGVycmFmb3JtUmVzb3VyY2UoY29uc3RydWN0Lm5vZGUuZGVmYXVsdENoaWxkKVxuICAgICAgOiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSB1bmRlciB3aGljaCB0aGUgb3V0cHV0cyBhcmUgcmVnaXN0ZXJlZCBpbiB0aGUgcGFyZW50IFNjb3BlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgb3V0cHV0TmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUZXJyYUNvbnN0cnVjdCBmcmllbmRseSBuYW1lXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZnJpZW5kbHlOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRlcnJhQ29uc3RydWN0IHVuaXF1ZSBncmlkIGlkZW50aWZpZXJcbiAgICovXG4gIHB1YmxpYyBnZXQgZ3JpZFVVSUQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gU3RhY2tCYXNlLm9mVGVycmFDb25zdHJ1Y3QodGhpcykuZ3JpZFVVSUQ7XG4gIH1cblxuICAvKipcbiAgICogRW52aXJvbm1lbnQgTmFtZSBwYXNzZWQgaW4gZnJvbSB0aGUgQ0xJXG4gICAqL1xuICBwdWJsaWMgZ2V0IGVudmlyb25tZW50TmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBTdGFja0Jhc2Uub2ZUZXJyYUNvbnN0cnVjdCh0aGlzKS5lbnZpcm9ubWVudE5hbWU7XG4gIH1cblxuICAvKipcbiAgICogT3V0cHV0cyB0byByZWdpc3RlciB3aXRoIHRoZSBwYXJlbnQgU2NvcGUgb3IgdW5kZWZpbmVkIGlmIHRoZXJlIGFyZSBubyBvdXRwdXRzXG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgZ2V0IG91dHB1dHMoKTogUmVjb3JkPHN0cmluZywgYW55PjsgLy8gVE9ETzogc2hvdWxkIGJlIGFsbG93ZWQgdG8gYmUgdW5kZWZpbmVkP1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgcHJpdmF0ZSByZWFkb25seSBjb25zdHJ1Y3RJZDogc3RyaW5nLFxuICAgIHByb3BzOiBUZXJyYUNvbnN0cnVjdFByb3BzID0ge30sXG4gICkge1xuICAgIHN1cGVyKHNjb3BlLCBjb25zdHJ1Y3RJZCk7XG4gICAgdGhpcy5vdXRwdXROYW1lID0gcHJvcHMub3V0cHV0TmFtZSB8fCBgJHtjb25zdHJ1Y3RJZH1PdXRwdXRzYDtcbiAgICB0aGlzLmZyaWVuZGx5TmFtZSA9XG4gICAgICBwcm9wcy5mcmllbmRseU5hbWUgfHwgYCR7dGhpcy5lbnZpcm9ubWVudE5hbWV9LSR7Y29uc3RydWN0SWR9YDtcblxuICAgIEFzcGVjdHMub2YodGhpcykgLy8gQWRkIEdyaWQgdGFncyB0byBldmVyeSByZXNvdXJjZSBkZWZpbmVkIHdpdGhpbi5cbiAgICAgIC5hZGQoXG4gICAgICAgIG5ldyBHcmlkVGFncyh7XG4gICAgICAgICAgW2Ake0dSSURfVEFHX1BSRUZJWH06RW52aXJvbm1lbnROYW1lYF06IHRoaXMuZW52aXJvbm1lbnROYW1lLFxuICAgICAgICAgIFtgJHtHUklEX1RBR19QUkVGSVh9OlVVSURgXTogdGhpcy5ncmlkVVVJRCxcbiAgICAgICAgICBOYW1lOiB0aGlzLmZyaWVuZGx5TmFtZSxcbiAgICAgICAgfSksXG4gICAgICApO1xuICAgIGNvbnN0IHJlZ2lzdGVyT3V0cHV0cyA9IHByb3BzLnJlZ2lzdGVyT3V0cHV0cyB8fCBmYWxzZTtcbiAgICBpZiAocmVnaXN0ZXJPdXRwdXRzKSB7XG4gICAgICBuZXcgVGVycmFmb3JtT3V0cHV0KHNjb3BlLCB0aGlzLm91dHB1dE5hbWUsIHtcbiAgICAgICAgc3RhdGljSWQ6IHRydWUsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBgT3V0cHV0cyBmb3IgJHt0aGlzLmZyaWVuZGx5TmFtZX1gLFxuICAgICAgICB2YWx1ZTogTGF6eS5hbnlWYWx1ZSh7IHByb2R1Y2U6ICgpID0+IHRoaXMub3V0cHV0cyB8fCBudWxsIH0pLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLy8gZm9yY2UgdXNhZ2Ugb2Ygbm9kZS5hZGREZXBlbmRlbmN5IGluc3RlYWQgb2YgcGFzc2luZyBUZXJyYUNvbnN0cnVjdHMgdmlhIGRlcGVuZHNPblxuICAvLyBSZWZlcnJpbmcgYSBUZXJyYUNvbnN0cnVjdCBieSBmcW4gYWx3YXlzIHRyaWdnZXJzIGFuIGVycm9yP1xuICBwdWJsaWMgZ2V0IGZxbigpOiBzdHJpbmcge1xuICAgIC8vIHRyeSB7XG4gICAgLy8gICByZXR1cm4gc3VwZXIuZnFuO1xuICAgIC8vIH0gY2F0Y2ggKGUpIHtcbiAgICAvLyByZWY6IGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvY29uc3RydWN0cy9ibG9iLzEwLngvc3JjL2NvbnN0cnVjdC50cyNMMzQ1XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYFVzZSBDb25zdHJ1Y3Qgbm9kZS5hZGREZXBlbmRlbmN5IGluc3RlYWQgb2YgcGFzc2luZyBUZXJyYUNvbnN0cnVjdCBmcW4gJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9ICR7dGhpcy5jb25zdHJ1Y3RJZH1gLFxuICAgICk7XG4gICAgLy8gfVxuICB9XG59XG4iXX0=
|
package/lib/duration.js
CHANGED
|
@@ -283,7 +283,7 @@ class Duration {
|
|
|
283
283
|
}
|
|
284
284
|
exports.Duration = Duration;
|
|
285
285
|
_a = JSII_RTTI_SYMBOL_1;
|
|
286
|
-
Duration[_a] = { fqn: "terraconstructs.Duration", version: "0.2.
|
|
286
|
+
Duration[_a] = { fqn: "terraconstructs.Duration", version: "0.2.4" };
|
|
287
287
|
class TimeUnit {
|
|
288
288
|
constructor(label, isoLabel, inMillis) {
|
|
289
289
|
this.label = label;
|
package/lib/errors.js
CHANGED
|
@@ -61,7 +61,7 @@ class Errors {
|
|
|
61
61
|
}
|
|
62
62
|
exports.Errors = Errors;
|
|
63
63
|
_a = JSII_RTTI_SYMBOL_1;
|
|
64
|
-
Errors[_a] = { fqn: "terraconstructs.Errors", version: "0.2.
|
|
64
|
+
Errors[_a] = { fqn: "terraconstructs.Errors", version: "0.2.4" };
|
|
65
65
|
/**
|
|
66
66
|
* Generic, abstract error class used for errors thrown from the users app during construction or synth.
|
|
67
67
|
*/
|
package/lib/expiration.js
CHANGED
|
@@ -64,5 +64,5 @@ class Expiration {
|
|
|
64
64
|
}
|
|
65
65
|
exports.Expiration = Expiration;
|
|
66
66
|
_a = JSII_RTTI_SYMBOL_1;
|
|
67
|
-
Expiration[_a] = { fqn: "terraconstructs.Expiration", version: "0.2.
|
|
67
|
+
Expiration[_a] = { fqn: "terraconstructs.Expiration", version: "0.2.4" };
|
|
68
68
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwaXJhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9leHBpcmF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBR0E7Ozs7R0FJRztBQUNILE1BQWEsVUFBVTtJQUNyQjs7O09BR0c7SUFDSSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQU87UUFDMUIsT0FBTyxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFTO1FBQ2pDLE9BQU8sVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFRDs7O09BR0c7SUFDSSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQVc7UUFDN0IsT0FBTyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFTO1FBQ2hDLE9BQU8sSUFBSSxVQUFVLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBT0QsWUFBb0IsSUFBVTtRQUM1QixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztJQUNuQixDQUFDO0lBRUQ7O09BRUc7SUFDSSxPQUFPO1FBQ1osT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUNEOzs7T0FHRztJQUNJLFFBQVEsQ0FBQyxDQUFXO1FBQ3pCLE9BQU8sSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUM7SUFDL0QsQ0FBQztJQUVEOzs7T0FHRztJQUNJLE9BQU8sQ0FBQyxDQUFXO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUM7SUFDL0QsQ0FBQzs7QUEvREgsZ0NBZ0VDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2Jsb2IvdjIuMTc1LjEvcGFja2FnZXMvYXdzLWNkay1saWIvY29yZS9saWIvZXhwaXJhdGlvbi50c1xuXG5pbXBvcnQgeyBEdXJhdGlvbiB9IGZyb20gXCIuL2R1cmF0aW9uXCI7XG4vKipcbiAqIFJlcHJlc2VudHMgYSBkYXRlIG9mIGV4cGlyYXRpb24uXG4gKlxuICogVGhlIGFtb3VudCBjYW4gYmUgc3BlY2lmaWVkIGVpdGhlciBhcyBhIERhdGUgb2JqZWN0LCB0aW1lc3RhbXAsIER1cmF0aW9uIG9yIHN0cmluZy5cbiAqL1xuZXhwb3J0IGNsYXNzIEV4cGlyYXRpb24ge1xuICAvKipcbiAgICogRXhwaXJlIGF0IHRoZSBzcGVjaWZpZWQgZGF0ZVxuICAgKiBAcGFyYW0gZCBkYXRlIHRvIGV4cGlyZSBhdFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBhdERhdGUoZDogRGF0ZSkge1xuICAgIHJldHVybiBuZXcgRXhwaXJhdGlvbihkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHBpcmUgYXQgdGhlIHNwZWNpZmllZCB0aW1lc3RhbXBcbiAgICogQHBhcmFtIHQgdGltZXN0YW1wIGluIHVuaXggbWlsbGlzZWNvbmRzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGF0VGltZXN0YW1wKHQ6IG51bWJlcikge1xuICAgIHJldHVybiBFeHBpcmF0aW9uLmF0RGF0ZShuZXcgRGF0ZSh0KSk7XG4gIH1cblxuICAvKipcbiAgICogRXhwaXJlIG9uY2UgdGhlIHNwZWNpZmllZCBkdXJhdGlvbiBoYXMgcGFzc2VkIHNpbmNlIGRlcGxveW1lbnQgdGltZVxuICAgKiBAcGFyYW0gdCB0aGUgZHVyYXRpb24gdG8gd2FpdCBiZWZvcmUgZXhwaXJpbmdcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgYWZ0ZXIodDogRHVyYXRpb24pIHtcbiAgICByZXR1cm4gRXhwaXJhdGlvbi5hdERhdGUobmV3IERhdGUoRGF0ZS5ub3coKSArIHQudG9NaWxsaXNlY29uZHMoKSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4cGlyZSBhdCBzcGVjaWZpZWQgZGF0ZSwgcmVwcmVzZW50ZWQgYXMgYSBzdHJpbmdcbiAgICpcbiAgICogQHBhcmFtIHMgdGhlIHN0cmluZyB0aGF0IHJlcHJlc2VudHMgZGF0ZSB0byBleHBpcmUgYXRcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbVN0cmluZyhzOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gbmV3IEV4cGlyYXRpb24obmV3IERhdGUocykpO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4cGlyYXRpb24gdmFsdWUgYXMgYSBEYXRlIG9iamVjdFxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGRhdGU6IERhdGU7XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihkYXRlOiBEYXRlKSB7XG4gICAgdGhpcy5kYXRlID0gZGF0ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHBpcmF0aW9uIFZhbHVlIGluIGEgZm9ybWF0dGVkIFVuaXggRXBvY2ggVGltZSBpbiBzZWNvbmRzXG4gICAqL1xuICBwdWJsaWMgdG9FcG9jaCgpOiBudW1iZXIge1xuICAgIHJldHVybiBNYXRoLnJvdW5kKHRoaXMuZGF0ZS5nZXRUaW1lKCkgLyAxMDAwKTtcbiAgfVxuICAvKipcbiAgICogQ2hlY2sgaWYgRXhwaXJhdGlvbiBleHBpcmVzIGJlZm9yZSBpbnB1dFxuICAgKiBAcGFyYW0gdCB0aGUgZHVyYXRpb24gdG8gY2hlY2sgYWdhaW5zdFxuICAgKi9cbiAgcHVibGljIGlzQmVmb3JlKHQ6IER1cmF0aW9uKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZGF0ZSA8IG5ldyBEYXRlKERhdGUubm93KCkgKyB0LnRvTWlsbGlzZWNvbmRzKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIEV4cGlyYXRpb24gZXhwaXJlcyBhZnRlciBpbnB1dFxuICAgKiBAcGFyYW0gdCB0aGUgZHVyYXRpb24gdG8gY2hlY2sgYWdhaW5zdFxuICAgKi9cbiAgcHVibGljIGlzQWZ0ZXIodDogRHVyYXRpb24pOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5kYXRlID4gbmV3IERhdGUoRGF0ZS5ub3coKSArIHQudG9NaWxsaXNlY29uZHMoKSk7XG4gIH1cbn1cbiJdfQ==
|
package/lib/fs/ignore.js
CHANGED
|
@@ -64,7 +64,7 @@ class IgnoreStrategy {
|
|
|
64
64
|
}
|
|
65
65
|
exports.IgnoreStrategy = IgnoreStrategy;
|
|
66
66
|
_a = JSII_RTTI_SYMBOL_1;
|
|
67
|
-
IgnoreStrategy[_a] = { fqn: "terraconstructs.IgnoreStrategy", version: "0.2.
|
|
67
|
+
IgnoreStrategy[_a] = { fqn: "terraconstructs.IgnoreStrategy", version: "0.2.4" };
|
|
68
68
|
/**
|
|
69
69
|
* Ignores file paths based on simple glob patterns.
|
|
70
70
|
*/
|
|
@@ -114,7 +114,7 @@ class GlobIgnoreStrategy extends IgnoreStrategy {
|
|
|
114
114
|
}
|
|
115
115
|
exports.GlobIgnoreStrategy = GlobIgnoreStrategy;
|
|
116
116
|
_b = JSII_RTTI_SYMBOL_1;
|
|
117
|
-
GlobIgnoreStrategy[_b] = { fqn: "terraconstructs.GlobIgnoreStrategy", version: "0.2.
|
|
117
|
+
GlobIgnoreStrategy[_b] = { fqn: "terraconstructs.GlobIgnoreStrategy", version: "0.2.4" };
|
|
118
118
|
/**
|
|
119
119
|
* Ignores file paths based on the [`.gitignore specification`](https://git-scm.com/docs/gitignore).
|
|
120
120
|
*/
|
|
@@ -150,7 +150,7 @@ class GitIgnoreStrategy extends IgnoreStrategy {
|
|
|
150
150
|
}
|
|
151
151
|
exports.GitIgnoreStrategy = GitIgnoreStrategy;
|
|
152
152
|
_c = JSII_RTTI_SYMBOL_1;
|
|
153
|
-
GitIgnoreStrategy[_c] = { fqn: "terraconstructs.GitIgnoreStrategy", version: "0.2.
|
|
153
|
+
GitIgnoreStrategy[_c] = { fqn: "terraconstructs.GitIgnoreStrategy", version: "0.2.4" };
|
|
154
154
|
/**
|
|
155
155
|
* Ignores file paths based on the [`.dockerignore specification`](https://docs.docker.com/engine/reference/builder/#dockerignore-file).
|
|
156
156
|
*/
|
|
@@ -186,5 +186,5 @@ class DockerIgnoreStrategy extends IgnoreStrategy {
|
|
|
186
186
|
}
|
|
187
187
|
exports.DockerIgnoreStrategy = DockerIgnoreStrategy;
|
|
188
188
|
_d = JSII_RTTI_SYMBOL_1;
|
|
189
|
-
DockerIgnoreStrategy[_d] = { fqn: "terraconstructs.DockerIgnoreStrategy", version: "0.2.
|
|
189
|
+
DockerIgnoreStrategy[_d] = { fqn: "terraconstructs.DockerIgnoreStrategy", version: "0.2.4" };
|
|
190
190
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWdub3JlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2ZzL2lnbm9yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDBGQUEwRjtBQUUxRiw2QkFBNkI7QUFDN0IsdURBQW1FO0FBQ25FLG1DQUErQztBQUMvQyx1Q0FBb0Q7QUFFcEQsa0VBQWtFO0FBQ2xFLGlFQUFpRTtBQUNqRSxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7QUFFdkM7O0dBRUc7QUFDSCxNQUFzQixjQUFjO0lBQ2xDOzs7OztPQUtHO0lBQ0ksTUFBTSxDQUFDLElBQUksQ0FDaEIsZ0JBQXdCLEVBQ3hCLFFBQWtCO1FBRWxCLE9BQU8sSUFBSSxrQkFBa0IsQ0FBQyxnQkFBZ0IsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxNQUFNLENBQUMsR0FBRyxDQUNmLGdCQUF3QixFQUN4QixRQUFrQjtRQUVsQixPQUFPLElBQUksaUJBQWlCLENBQUMsZ0JBQWdCLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksTUFBTSxDQUFDLE1BQU0sQ0FDbEIsZ0JBQXdCLEVBQ3hCLFFBQWtCO1FBRWxCLE9BQU8sSUFBSSxvQkFBb0IsQ0FBQyxnQkFBZ0IsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksTUFBTSxDQUFDLGVBQWUsQ0FDM0IsT0FBb0IsRUFDcEIsZ0JBQXdCO1FBRXhCLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxVQUFVLElBQUksb0JBQVUsQ0FBQyxJQUFJLENBQUM7UUFDekQsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUM7UUFFdEMsUUFBUSxVQUFVLEVBQUUsQ0FBQztZQUNuQixLQUFLLG9CQUFVLENBQUMsSUFBSTtnQkFDbEIsT0FBTyxJQUFJLENBQUMs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LENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQzNDLENBQUM7O0FBdkNILG9EQXdDQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9ibG9iL3YyLjE4Ni4wL3BhY2thZ2VzL2F3cy1jZGstbGliL2NvcmUvbGliL2ZzL2lnbm9yZS50c1xuXG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgZG9ja2VySWdub3JlLCAqIGFzIERvY2tlcklnbm9yZSBmcm9tIFwiQGJhbGVuYS9kb2NrZXJpZ25vcmVcIjtcbmltcG9ydCBnaXRJZ25vcmUsICogYXMgR2l0SWdub3JlIGZyb20gXCJpZ25vcmVcIjtcbmltcG9ydCB7IENvcHlPcHRpb25zLCBJZ25vcmVNb2RlIH0gZnJvbSBcIi4vb3B0aW9uc1wiO1xuXG4vLyBNdXN0IGJlIGEgJ3JlcXVpcmUnIHRvIG5vdCBydW4gYWZvdWwgb2YgRVNNIG1vZHVsZSBpbXBvcnQgcnVsZXNcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVxdWlyZS1pbXBvcnRzXG5jb25zdCBtaW5pbWF0Y2ggPSByZXF1aXJlKFwibWluaW1hdGNoXCIpO1xuXG4vKipcbiAqIFJlcHJlc2VudHMgZmlsZSBwYXRoIGlnbm9yaW5nIGJlaGF2aW9yLlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgSWdub3JlU3RyYXRlZ3kge1xuICAvKipcbiAgICogSWdub3JlcyBmaWxlIHBhdGhzIGJhc2VkIG9uIHNpbXBsZSBnbG9iIHBhdHRlcm5zLlxuICAgKlxuICAgKiBAcmV0dXJucyBgR2xvYklnbm9yZVBhdHRlcm5gIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gcGF0dGVybnMuXG4gICAqIEBwYXJhbSBhYnNvbHV0ZVJvb3RQYXRoIHRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGUgcGF0aHMgdG8gYmUgY29uc2lkZXJlZFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBnbG9iKFxuICAgIGFic29sdXRlUm9vdFBhdGg6IHN0cmluZyxcbiAgICBwYXR0ZXJuczogc3RyaW5nW10sXG4gICk6IEdsb2JJZ25vcmVTdHJhdGVneSB7XG4gICAgcmV0dXJuIG5ldyBHbG9iSWdub3JlU3RyYXRlZ3koYWJzb2x1dGVSb290UGF0aCwgcGF0dGVybnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIElnbm9yZXMgZmlsZSBwYXRocyBiYXNlZCBvbiB0aGUgW2AuZ2l0aWdub3JlIHNwZWNpZmljYXRpb25gXShodHRwczovL2dpdC1zY20uY29tL2RvY3MvZ2l0aWdub3JlKS5cbiAgICpcbiAgICogQHJldHVybnMgYEdpdElnbm9yZVBhdHRlcm5gIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gcGF0dGVybnMuXG4gICAqIEBwYXJhbSBhYnNvbHV0ZVJvb3RQYXRoIHRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGUgcGF0aHMgdG8gYmUgY29uc2lkZXJlZFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBnaXQoXG4gICAgYWJzb2x1dGVSb290UGF0aDogc3RyaW5nLFxuICAgIHBhdHRlcm5zOiBzdHJpbmdbXSxcbiAgKTogR2l0SWdub3JlU3RyYXRlZ3kge1xuICAgIHJldHVybiBuZXcgR2l0SWdub3JlU3RyYXRlZ3koYWJzb2x1dGVSb290UGF0aCwgcGF0dGVybnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIElnbm9yZXMgZmlsZSBwYXRocyBiYXNlZCBvbiB0aGUgW2AuZG9ja2VyaWdub3JlIHNwZWNpZmljYXRpb25gXShodHRwczovL2RvY3MuZG9ja2VyLmNvbS9lbmdpbmUvcmVmZXJlbmNlL2J1aWxkZXIvI2RvY2tlcmlnbm9yZS1maWxlKS5cbiAgICpcbiAgICogQHJldHVybnMgYERvY2tlcklnbm9yZVBhdHRlcm5gIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gcGF0dGVybnMuXG4gICAqIEBwYXJhbSBhYnNvbHV0ZVJvb3RQYXRoIHRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGUgcGF0aHMgdG8gYmUgY29uc2lkZXJlZFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBkb2NrZXIoXG4gICAgYWJzb2x1dGVSb290UGF0aDogc3RyaW5nLFxuICAgIHBhdHRlcm5zOiBzdHJpbmdbXSxcbiAgKTogRG9ja2VySWdub3JlU3RyYXRlZ3kge1xuICAgIHJldHVybiBuZXcgRG9ja2VySWdub3JlU3RyYXRlZ3koYWJzb2x1dGVSb290UGF0aCwgcGF0dGVybnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gSWdub3JlU3RyYXRlZ3kgYmFzZWQgb24gdGhlIGBpZ25vcmVNb2RlYCBhbmQgYGV4Y2x1ZGVgIGluIGEgYENvcHlPcHRpb25zYC5cbiAgICpcbiAgICogQHJldHVybnMgYElnbm9yZVN0cmF0ZWd5YCBiYXNlZCBvbiB0aGUgYENvcHlPcHRpb25zYFxuICAgKiBAcGFyYW0gYWJzb2x1dGVSb290UGF0aCB0aGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhlIHBhdGhzIHRvIGJlIGNvbnNpZGVyZWRcbiAgICogQHBhcmFtIG9wdGlvbnMgdGhlIGBDb3B5T3B0aW9uc2AgdG8gY3JlYXRlIHRoZSBgSWdub3JlU3RyYXRlZ3lgIGZyb21cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbUNvcHlPcHRpb25zKFxuICAgIG9wdGlvbnM6IENvcHlPcHRpb25zLFxuICAgIGFic29sdXRlUm9vdFBhdGg6IHN0cmluZyxcbiAgKTogSWdub3JlU3RyYXRlZ3kge1xuICAgIGNvbnN0IGlnbm9yZU1vZGUgPSBvcHRpb25zLmlnbm9yZU1vZGUgfHwgSWdub3JlTW9kZS5HTE9CO1xuICAgIGNvbnN0IGV4Y2x1ZGUgPSBvcHRpb25zLmV4Y2x1ZGUgfHwgW107XG5cbiAgICBzd2l0Y2ggKGlnbm9yZU1vZGUpIHtcbiAgICAgIGNhc2UgSWdub3JlTW9kZS5HTE9COlxuICAgICAgICByZXR1cm4gdGhpcy5nbG9iKGFic29sdXRlUm9vdFBhdGgsIGV4Y2x1ZGUpO1xuXG4gICAgICBjYXNlIElnbm9yZU1vZGUuR0lUOlxuICAgICAgICByZXR1cm4gdGhpcy5naXQoYWJzb2x1dGVSb290UGF0aCwgZXhjbHVkZSk7XG5cbiAgICAgIGNhc2UgSWdub3JlTW9kZS5ET0NLRVI6XG4gICAgICAgIHJldHVybiB0aGlzLmRvY2tlcihhYnNvbHV0ZVJvb3RQYXRoLCBleGNsdWRlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhbm90aGVyIHBhdHRlcm4uXG4gICAqIEBwYXJhbXMgcGF0dGVybiB0aGUgcGF0dGVybiB0byBhZGRcbiAgICovXG4gIHB1YmxpYyBhYnN0cmFjdCBhZGQocGF0dGVybjogc3RyaW5nKTogdm9pZDtcblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIGEgZ2l2ZW4gZmlsZSBwYXRoIHNob3VsZCBiZSBpZ25vcmVkIG9yIG5vdC5cbiAgICpcbiAgICogQHBhcmFtIGFic29sdXRlRmlsZVBhdGggYWJzb2x1dGUgZmlsZSBwYXRoIHRvIGJlIGFzc2Vzc2VkIGFnYWluc3QgdGhlIHBhdHRlcm5cbiAgICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBmaWxlIHNob3VsZCBiZSBpZ25vcmVkXG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgaWdub3JlcyhhYnNvbHV0ZUZpbGVQYXRoOiBzdHJpbmcpOiBib29sZWFuO1xufVxuXG4vKipcbiAqIElnbm9yZXMgZmlsZSBwYXRocyBiYXNlZCBvbiBzaW1wbGUgZ2xvYiBwYXR0ZXJucy5cbiAqL1xuZXhwb3J0IGNsYXNzIEdsb2JJZ25vcmVTdHJhdGVneSBleHRlbmRzIElnbm9yZVN0cmF0ZWd5IHtcbiAgcHJpdmF0ZSByZWFkb25seSBhYnNvbHV0ZVJvb3RQYXRoOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgcGF0dGVybnM6IHN0cmluZ1tdO1xuXG4gIGNvbnN0cnVjdG9yKGFic29sdXRlUm9vdFBhdGg6IHN0cmluZywgcGF0dGVybnM6IHN0cmluZ1tdKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIGlmICghcGF0aC5pc0Fic29sdXRlKGFic29sdXRlUm9vdFBhdGgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJHbG9iSWdub3JlU3RyYXRlZ3kgZXhwZWN0cyBhbiBhYnNvbHV0ZSBmaWxlIHBhdGhcIik7XG4gICAgfVxuXG4gICAgdGhpcy5hYnNvbHV0ZVJvb3RQYXRoID0gYWJzb2x1dGVSb290UGF0aDtcbiAgICB0aGlzLnBhdHRlcm5zID0gcGF0dGVybnM7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhbm90aGVyIHBhdHRlcm4uXG4gICAqIEBwYXJhbXMgcGF0dGVybiB0aGUgcGF0dGVybiB0byBhZGRcbiAgICovXG4gIHB1YmxpYyBhZGQocGF0dGVybjogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5wYXR0ZXJucy5wdXNoKHBhdHRlcm4pO1xuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgd2hldGhlciBhIGdpdmVuIGZpbGUgcGF0aCBzaG91bGQgYmUgaWdub3JlZCBvciBub3QuXG4gICAqXG4gICAqIEBwYXJhbSBhYnNvbHV0ZUZpbGVQYXRoIGFic29sdXRlIGZpbGUgcGF0aCB0byBiZSBhc3Nlc3NlZCBhZ2FpbnN0IHRoZSBwYXR0ZXJuXG4gICAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgZmlsZSBzaG91bGQgYmUgaWdub3JlZFxuICAgKi9cbiAgcHVibGljIGlnbm9yZXMoYWJzb2x1dGVGaWxlUGF0aDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgaWYgKCFwYXRoLmlzQWJzb2x1dGUoYWJzb2x1dGVGaWxlUGF0aCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkdsb2JJZ25vcmVTdHJhdGVneS5pZ25vcmVzKCkgZXhwZWN0cyBhbiBhYnNvbHV0ZSBwYXRoXCIpO1xuICAgIH1cblxuICAgIGxldCByZWxhdGl2ZVBhdGggPSBwYXRoLnJlbGF0aXZlKHRoaXMuYWJzb2x1dGVSb290UGF0aCwgYWJzb2x1dGVGaWxlUGF0aCk7XG4gICAgbGV0IGV4Y2x1ZGVPdXRwdXQgPSBmYWxzZTtcblxuICAgIGZvciAoY29uc3QgcGF0dGVybiBvZiB0aGlzLnBhdHRlcm5zKSB7XG4gICAgICBjb25zdCBuZWdhdGUgPSBwYXR0ZXJuLnN0YXJ0c1dpdGgoXCIhXCIpO1xuICAgICAgY29uc3QgbWF0Y2ggPSBtaW5pbWF0Y2gocmVsYXRpdmVQYXRoLCBwYXR0ZXJuLCB7XG4gICAgICAgIG1hdGNoQmFzZTogdHJ1ZSxcbiAgICAgICAgZmxpcE5lZ2F0ZTogdHJ1ZSxcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoIW5lZ2F0ZSAmJiBtYXRjaCkge1xuICAgICAgICBleGNsdWRlT3V0cHV0ID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKG5lZ2F0ZSAmJiBtYXRjaCkge1xuICAgICAgICBleGNsdWRlT3V0cHV0ID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGV4Y2x1ZGVPdXRwdXQ7XG4gIH1cbn1cblxuLyoqXG4gKiBJZ25vcmVzIGZpbGUgcGF0aHMgYmFzZWQgb24gdGhlIFtgLmdpdGlnbm9yZSBzcGVjaWZpY2F0aW9uYF0oaHR0cHM6Ly9naXQtc2NtLmNvbS9kb2NzL2dpdGlnbm9yZSkuXG4gKi9cbmV4cG9ydCBjbGFzcyBHaXRJZ25vcmVTdHJhdGVneSBleHRlbmRzIElnbm9yZVN0cmF0ZWd5IHtcbiAgcHJpdmF0ZSByZWFkb25seSBhYnNvbHV0ZVJvb3RQYXRoOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgaWdub3JlOiBHaXRJZ25vcmUuSWdub3JlO1xuXG4gIGNvbnN0cnVjdG9yKGFic29sdXRlUm9vdFBhdGg6IHN0cmluZywgcGF0dGVybnM6IHN0cmluZ1tdKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIGlmICghcGF0aC5pc0Fic29sdXRlKGFic29sdXRlUm9vdFBhdGgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJHaXRJZ25vcmVTdHJhdGVneSBleHBlY3RzIGFuIGFic29sdXRlIGZpbGUgcGF0aFwiKTtcbiAgICB9XG5cbiAgICB0aGlzLmFic29sdXRlUm9vdFBhdGggPSBhYnNvbHV0ZVJvb3RQYXRoO1xuICAgIHRoaXMuaWdub3JlID0gZ2l0SWdub3JlKCkuYWRkKHBhdHRlcm5zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGFub3RoZXIgcGF0dGVybi5cbiAgICogQHBhcmFtcyBwYXR0ZXJuIHRoZSBwYXR0ZXJuIHRvIGFkZFxuICAgKi9cbiAgcHVibGljIGFkZChwYXR0ZXJuOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmlnbm9yZS5hZGQocGF0dGVybik7XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIGEgZ2l2ZW4gZmlsZSBwYXRoIHNob3VsZCBiZSBpZ25vcmVkIG9yIG5vdC5cbiAgICpcbiAgICogQHBhcmFtIGFic29sdXRlRmlsZVBhdGggYWJzb2x1dGUgZmlsZSBwYXRoIHRvIGJlIGFzc2Vzc2VkIGFnYWluc3QgdGhlIHBhdHRlcm5cbiAgICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBmaWxlIHNob3VsZCBiZSBpZ25vcmVkXG4gICAqL1xuICBwdWJsaWMgaWdub3JlcyhhYnNvbHV0ZUZpbGVQYXRoOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAoIXBhdGguaXNBYnNvbHV0ZShhYnNvbHV0ZUZpbGVQYXRoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiR2l0SWdub3JlU3RyYXRlZ3kuaWdub3JlcygpIGV4cGVjdHMgYW4gYWJzb2x1dGUgcGF0aFwiKTtcbiAgICB9XG5cbiAgICBsZXQgcmVsYXRpdmVQYXRoID0gcGF0aC5yZWxhdGl2ZSh0aGlzLmFic29sdXRlUm9vdFBhdGgsIGFic29sdXRlRmlsZVBhdGgpO1xuXG4gICAgcmV0dXJuIHRoaXMuaWdub3JlLmlnbm9yZXMocmVsYXRpdmVQYXRoKTtcbiAgfVxufVxuXG4vKipcbiAqIElnbm9yZXMgZmlsZSBwYXRocyBiYXNlZCBvbiB0aGUgW2AuZG9ja2VyaWdub3JlIHNwZWNpZmljYXRpb25gXShodHRwczovL2RvY3MuZG9ja2VyLmNvbS9lbmdpbmUvcmVmZXJlbmNlL2J1aWxkZXIvI2RvY2tlcmlnbm9yZS1maWxlKS5cbiAqL1xuZXhwb3J0IGNsYXNzIERvY2tlcklnbm9yZVN0cmF0ZWd5IGV4dGVuZHMgSWdub3JlU3RyYXRlZ3kge1xuICBwcml2YXRlIHJlYWRvbmx5IGFic29sdXRlUm9vdFBhdGg6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBpZ25vcmU6IERvY2tlcklnbm9yZS5JZ25vcmU7XG5cbiAgY29uc3RydWN0b3IoYWJzb2x1dGVSb290UGF0aDogc3RyaW5nLCBwYXR0ZXJuczogc3RyaW5nW10pIHtcbiAgICBzdXBlcigpO1xuXG4gICAgaWYgKCFwYXRoLmlzQWJzb2x1dGUoYWJzb2x1dGVSb290UGF0aCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkRvY2tlcklnbm9yZVN0cmF0ZWd5IGV4cGVjdHMgYW4gYWJzb2x1dGUgZmlsZSBwYXRoXCIpO1xuICAgIH1cblxuICAgIHRoaXMuYWJzb2x1dGVSb290UGF0aCA9IGFic29sdXRlUm9vdFBhdGg7XG4gICAgdGhpcy5pZ25vcmUgPSBkb2NrZXJJZ25vcmUoKS5hZGQocGF0dGVybnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYW5vdGhlciBwYXR0ZXJuLlxuICAgKiBAcGFyYW1zIHBhdHRlcm4gdGhlIHBhdHRlcm4gdG8gYWRkXG4gICAqL1xuICBwdWJsaWMgYWRkKHBhdHRlcm46IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuaWdub3JlLmFkZChwYXR0ZXJuKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgYSBnaXZlbiBmaWxlIHBhdGggc2hvdWxkIGJlIGlnbm9yZWQgb3Igbm90LlxuICAgKlxuICAgKiBAcGFyYW0gYWJzb2x1dGVGaWxlUGF0aCBhYnNvbHV0ZSBmaWxlIHBhdGggdG8gYmUgYXNzZXNzZWQgYWdhaW5zdCB0aGUgcGF0dGVyblxuICAgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGZpbGUgc2hvdWxkIGJlIGlnbm9yZWRcbiAgICovXG4gIHB1YmxpYyBpZ25vcmVzKGFic29sdXRlRmlsZVBhdGg6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGlmICghcGF0aC5pc0Fic29sdXRlKGFic29sdXRlRmlsZVBhdGgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiRG9ja2VySWdub3JlU3RyYXRlZ3kuaWdub3JlcygpIGV4cGVjdHMgYW4gYWJzb2x1dGUgcGF0aFwiLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBsZXQgcmVsYXRpdmVQYXRoID0gcGF0aC5yZWxhdGl2ZSh0aGlzLmFic29sdXRlUm9vdFBhdGgsIGFic29sdXRlRmlsZVBhdGgpO1xuXG4gICAgcmV0dXJuIHRoaXMuaWdub3JlLmlnbm9yZXMocmVsYXRpdmVQYXRoKTtcbiAgfVxufVxuIl19
|
package/lib/fs/index.js
CHANGED
|
@@ -84,5 +84,5 @@ class FileSystem {
|
|
|
84
84
|
}
|
|
85
85
|
exports.FileSystem = FileSystem;
|
|
86
86
|
_a = JSII_RTTI_SYMBOL_1;
|
|
87
|
-
FileSystem[_a] = { fqn: "terraconstructs.FileSystem", version: "0.2.
|
|
87
|
+
FileSystem[_a] = { fqn: "terraconstructs.FileSystem", version: "0.2.4" };
|
|
88
88
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZnMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHlGQUF5RjtBQUV6Rix5QkFBeUI7QUFDekIseUJBQXlCO0FBQ3pCLDZCQUE2QjtBQUM3QixpQ0FBdUM7QUFDdkMsK0NBQTRDO0FBRzVDLDJDQUF5QjtBQUN6Qiw0Q0FBMEI7QUFFMUI7O0dBRUc7QUFDSCxNQUFhLFVBQVU7SUFDckI7Ozs7OztPQU1HO0lBQ0ksTUFBTSxDQUFDLGFBQWEsQ0FDekIsTUFBYyxFQUNkLE9BQWUsRUFDZixVQUF1QixFQUFFLEVBQ3pCLE9BQWdCO1FBRWhCLE9BQU8sSUFBQSxvQkFBYSxFQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFFRDs7Ozs7Ozs7Ozs7T0FXRztJQUNJLE1BQU0sQ0FBQyxXQUFXLENBQ3ZCLGVBQXVCLEVBQ3ZCLFVBQThCLEVBQUU7UUFFaEMsT0FBTyxJQUFBLHlCQUFXLEVBQUMsZUFBZSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFXO1FBQy9CLE9BQU8sRUFBRSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFRDs7T0FFRztJQUNJLE1BQU0sS0FBSyxNQUFNO1FBQ3RCLElBQUksVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3ZCLE9BQU8sVUFBVSxDQUFDLE9BQU8sQ0FBQztRQUM1QixDQUFDO1FBQ0QsVUFBVSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQ2xELE9BQU8sVUFBVSxDQUFDLE9BQU8sQ0FBQztJQUM1QixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQWM7UUFDbEMsT0FBTyxFQUFFLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQzlELENBQUM7O0FBaEVILGdDQW1FQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9ibG9iL3YyLjE4Ni4wL3BhY2thZ2VzL2F3cy1jZGstbGliL2NvcmUvbGliL2ZzL2luZGV4LnRzXG5cbmltcG9ydCAqIGFzIGZzIGZyb20gXCJmc1wiO1xuaW1wb3J0ICogYXMgb3MgZnJvbSBcIm9zXCI7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyBjb3B5RGlyZWN0b3J5IH0gZnJvbSBcIi4vY29weVwiO1xuaW1wb3J0IHsgZmluZ2VycHJpbnQgfSBmcm9tIFwiLi9maW5nZXJwcmludFwiO1xuaW1wb3J0IHsgQ29weU9wdGlvbnMsIEZpbmdlcnByaW50T3B0aW9ucyB9IGZyb20gXCIuL29wdGlvbnNcIjtcblxuZXhwb3J0ICogZnJvbSBcIi4vaWdub3JlXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9vcHRpb25zXCI7XG5cbi8qKlxuICogRmlsZSBzeXN0ZW0gdXRpbGl0aWVzLlxuICovXG5leHBvcnQgY2xhc3MgRmlsZVN5c3RlbSB7XG4gIC8qKlxuICAgKiBDb3BpZXMgYW4gZW50aXJlIGRpcmVjdG9yeSBzdHJ1Y3R1cmUuXG4gICAqIEBwYXJhbSBzcmNEaXIgU291cmNlIGRpcmVjdG9yeVxuICAgKiBAcGFyYW0gZGVzdERpciBEZXN0aW5hdGlvbiBkaXJlY3RvcnlcbiAgICogQHBhcmFtIG9wdGlvbnMgb3B0aW9uc1xuICAgKiBAcGFyYW0gcm9vdERpciBSb290IGRpcmVjdG9yeSB0byBjYWxjdWxhdGUgZXhjbHVzaW9ucyBmcm9tXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGNvcHlEaXJlY3RvcnkoXG4gICAgc3JjRGlyOiBzdHJpbmcsXG4gICAgZGVzdERpcjogc3RyaW5nLFxuICAgIG9wdGlvbnM6IENvcHlPcHRpb25zID0ge30sXG4gICAgcm9vdERpcj86IHN0cmluZyxcbiAgKSB7XG4gICAgcmV0dXJuIGNvcHlEaXJlY3Rvcnkoc3JjRGlyLCBkZXN0RGlyLCBvcHRpb25zLCByb290RGlyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm9kdWNlcyBmaW5nZXJwcmludCBiYXNlZCBvbiB0aGUgY29udGVudHMgb2YgYSBzaW5nbGUgZmlsZSBvciBhbiBlbnRpcmUgZGlyZWN0b3J5IHRyZWUuXG4gICAqXG4gICAqIExpbmUgZW5kaW5ncyBhcmUgY29udmVydGVkIGZyb20gQ1JMRiB0byBMRi5cbiAgICpcbiAgICogVGhlIGZpbmdlcnByaW50IHdpbGwgYWxzbyBpbmNsdWRlOlxuICAgKiAxLiBBbiBleHRyYSBzdHJpbmcgaWYgZGVmaW5lZCBpbiBgb3B0aW9ucy5leHRyYWAuXG4gICAqIDIuIFRoZSBzeW1saW5rIGZvbGxvdyBtb2RlIHZhbHVlLlxuICAgKlxuICAgKiBAcGFyYW0gZmlsZU9yRGlyZWN0b3J5IFRoZSBkaXJlY3Rvcnkgb3IgZmlsZSB0byBmaW5nZXJwcmludFxuICAgKiBAcGFyYW0gb3B0aW9ucyBGaW5nZXJwcmludGluZyBvcHRpb25zXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZpbmdlcnByaW50KFxuICAgIGZpbGVPckRpcmVjdG9yeTogc3RyaW5nLFxuICAgIG9wdGlvbnM6IEZpbmdlcnByaW50T3B0aW9ucyA9IHt9LFxuICApIHtcbiAgICByZXR1cm4gZmluZ2VycHJpbnQoZmlsZU9yRGlyZWN0b3J5LCBvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3Mgd2hldGhlciBhIGRpcmVjdG9yeSBpcyBlbXB0eVxuICAgKlxuICAgKiBAcGFyYW0gZGlyIFRoZSBkaXJlY3RvcnkgdG8gY2hlY2tcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgaXNFbXB0eShkaXI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmcy5yZWFkZGlyU3luYyhkaXIpLmxlbmd0aCA9PT0gMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgcmVhbCBwYXRoIG9mIHRoZSBzeXN0ZW0gdGVtcCBkaXJlY3RvcnlcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZ2V0IHRtcGRpcigpOiBzdHJpbmcge1xuICAgIGlmIChGaWxlU3lzdGVtLl90bXBkaXIpIHtcbiAgICAgIHJldHVybiBGaWxlU3lzdGVtLl90bXBkaXI7XG4gICAgfVxuICAgIEZpbGVTeXN0ZW0uX3RtcGRpciA9IGZzLnJlYWxwYXRoU3luYyhvcy50bXBkaXIoKSk7XG4gICAgcmV0dXJuIEZpbGVTeXN0ZW0uX3RtcGRpcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgdW5pcXVlIHRlbXBvcmFyeSBkaXJlY3RvcnkgaW4gdGhlICoqc3lzdGVtIHRlbXAgZGlyZWN0b3J5KiouXG4gICAqXG4gICAqIEBwYXJhbSBwcmVmaXggQSBwcmVmaXggZm9yIHRoZSBkaXJlY3RvcnkgbmFtZS4gU2l4IHJhbmRvbSBjaGFyYWN0ZXJzXG4gICAqIHdpbGwgYmUgZ2VuZXJhdGVkIGFuZCBhcHBlbmRlZCBiZWhpbmQgdGhpcyBwcmVmaXguXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG1rZHRlbXAocHJlZml4OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBmcy5ta2R0ZW1wU3luYyhwYXRoLmpvaW4oRmlsZVN5c3RlbS50bXBkaXIsIHByZWZpeCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgX3RtcGRpcj86IHN0cmluZztcbn1cbiJdfQ==
|
package/lib/size.js
CHANGED
|
@@ -164,7 +164,7 @@ class Size {
|
|
|
164
164
|
}
|
|
165
165
|
exports.Size = Size;
|
|
166
166
|
_a = JSII_RTTI_SYMBOL_1;
|
|
167
|
-
Size[_a] = { fqn: "terraconstructs.Size", version: "0.2.
|
|
167
|
+
Size[_a] = { fqn: "terraconstructs.Size", version: "0.2.4" };
|
|
168
168
|
/**
|
|
169
169
|
* Rounding behaviour when converting between units of `Size`.
|
|
170
170
|
*/
|
package/lib/stack-base.js
CHANGED
|
@@ -198,7 +198,7 @@ class StackBase extends cdktf_1.TerraformStack {
|
|
|
198
198
|
}
|
|
199
199
|
exports.StackBase = StackBase;
|
|
200
200
|
_a = JSII_RTTI_SYMBOL_1;
|
|
201
|
-
StackBase[_a] = { fqn: "terraconstructs.StackBase", version: "0.2.
|
|
201
|
+
StackBase[_a] = { fqn: "terraconstructs.StackBase", version: "0.2.4" };
|
|
202
202
|
/**
|
|
203
203
|
* Return the construct root path of the given construct relative to the given ancestor
|
|
204
204
|
*
|
package/lib/terra-func.js
CHANGED
|
@@ -159,7 +159,7 @@ class Fn extends cdktf_1.Fn {
|
|
|
159
159
|
}
|
|
160
160
|
exports.Fn = Fn;
|
|
161
161
|
_a = JSII_RTTI_SYMBOL_1;
|
|
162
|
-
Fn[_a] = { fqn: "terraconstructs.Fn", version: "0.2.
|
|
162
|
+
Fn[_a] = { fqn: "terraconstructs.Fn", version: "0.2.4" };
|
|
163
163
|
function range(n) {
|
|
164
164
|
const ret = [];
|
|
165
165
|
for (let i = 0; i < n; i++) {
|
package/lib/time-zone.js
CHANGED
|
@@ -29,7 +29,7 @@ class TimeZone {
|
|
|
29
29
|
}
|
|
30
30
|
exports.TimeZone = TimeZone;
|
|
31
31
|
_a = JSII_RTTI_SYMBOL_1;
|
|
32
|
-
TimeZone[_a] = { fqn: "terraconstructs.TimeZone", version: "0.2.
|
|
32
|
+
TimeZone[_a] = { fqn: "terraconstructs.TimeZone", version: "0.2.4" };
|
|
33
33
|
/** IANA Time Zone database entry for Africa/Abidjan. UTC offset +00:00/+00:00. */
|
|
34
34
|
TimeZone.AFRICA_ABIDJAN = new TimeZone("Africa/Abidjan");
|
|
35
35
|
/** IANA Time Zone database entry for Africa/Algiers. UTC offset +01:00/+01:00. */
|
package/package.json
CHANGED
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
"organization": false
|
|
11
11
|
},
|
|
12
12
|
"devDependencies": {
|
|
13
|
+
"@aws-cdk/cloud-assembly-schema": "49.4.0",
|
|
13
14
|
"@aws-cdk/region-info": "2.233.0",
|
|
14
15
|
"@cdktf/provider-archive": "11.0.0",
|
|
15
16
|
"@cdktf/provider-aws": "21.22.0",
|
|
@@ -47,6 +48,7 @@
|
|
|
47
48
|
"typescript": "~5.9"
|
|
48
49
|
},
|
|
49
50
|
"peerDependencies": {
|
|
51
|
+
"@aws-cdk/cloud-assembly-schema": "^49.4.0",
|
|
50
52
|
"@aws-cdk/region-info": "^2.233.0",
|
|
51
53
|
"@cdktf/provider-archive": "^11.0.0",
|
|
52
54
|
"@cdktf/provider-aws": "^21.22.0",
|
|
@@ -84,7 +86,7 @@
|
|
|
84
86
|
"publishConfig": {
|
|
85
87
|
"access": "public"
|
|
86
88
|
},
|
|
87
|
-
"version": "0.2.
|
|
89
|
+
"version": "0.2.4",
|
|
88
90
|
"jest": {
|
|
89
91
|
"coverageProvider": "v8",
|
|
90
92
|
"setupFilesAfterEnv": [
|