terraconstructs 0.1.9 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.jsii +1693 -955
- package/lib/asset-staging.js +1 -1
- package/lib/aws/arn.js +4 -3
- package/lib/aws/aws-asset-manager.js +1 -1
- package/lib/aws/aws-construct.js +1 -1
- package/lib/aws/aws-stack.d.ts +28 -4
- package/lib/aws/aws-stack.js +80 -22
- 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.d.ts +10 -0
- package/lib/aws/compute/event-source-mapping.js +20 -23
- 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.d.ts +10 -0
- package/lib/aws/compute/event-sources/sqs.js +3 -3
- 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 +3 -3
- 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 +5 -7
- 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 +8 -8
- package/lib/aws/compute/runtime.d.ts +0 -1
- package/lib/aws/compute/runtime.js +5 -36
- package/lib/aws/compute/scalable-target.js +1 -1
- package/lib/aws/compute/schedule.js +1 -1
- package/lib/aws/compute/security-group.js +1 -1
- 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 +10 -13
- 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.js +4 -4
- package/lib/aws/compute/vpn.js +3 -3
- package/lib/aws/cx-api.d.ts +1 -0
- package/lib/aws/cx-api.js +6 -0
- 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/environment-aware.d.ts +41 -0
- package/lib/aws/environment-aware.js +3 -0
- package/lib/aws/iam/grant.d.ts +34 -0
- package/lib/aws/iam/grant.js +27 -6
- 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/index.d.ts +1 -0
- package/lib/aws/index.js +2 -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.d.ts +1 -1
- package/lib/aws/notify/event-bus.js +4 -4
- package/lib/aws/notify/event-pattern.js +1 -1
- package/lib/aws/notify/index.d.ts +3 -1
- package/lib/aws/notify/index.js +5 -5
- 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.d.ts +241 -0
- package/lib/aws/notify/queue-base.js +161 -0
- package/lib/aws/notify/queue-policy.js +1 -1
- package/lib/aws/notify/queue.d.ts +157 -190
- package/lib/aws/notify/queue.js +239 -186
- 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/sqs-augmentations.generated.d.ts +3 -3
- package/lib/aws/notify/sqs-augmentations.generated.js +23 -26
- package/lib/aws/notify/sqs-grants.generated.d.ts +72 -0
- package/lib/aws/notify/sqs-grants.generated.js +139 -0
- package/lib/aws/notify/subscription-filter.js +1 -1
- package/lib/aws/notify/subscription.js +4 -4
- 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 +30 -27
- package/lib/aws/notify/subscriptions/subscription.d.ts +1 -1
- package/lib/aws/notify/subscriptions/subscription.js +1 -1
- package/lib/aws/notify/subscriptions/url.js +1 -1
- package/lib/aws/notify/targets/event-bus.d.ts +1 -1
- package/lib/aws/notify/targets/event-bus.js +2 -2
- 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 +12 -14
- package/lib/aws/notify/targets/state-machine.js +1 -1
- package/lib/aws/notify/topic-base.js +1 -1
- package/lib/aws/notify/topic.js +1 -1
- package/lib/aws/region-lookup.d.ts +8 -0
- package/lib/aws/region-lookup.js +104 -0
- 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 +27 -24
- 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 +17 -21
- package/lib/aws/storage/origin-access-identity.js +1 -1
- package/lib/aws/storage/parameter.js +2 -2
- package/lib/aws/storage/table.js +3 -3
- package/lib/aws/storage/util.d.ts +0 -10
- package/lib/aws/storage/util.js +4 -91
- 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/helpers-internal/index.d.ts +1 -0
- package/lib/helpers-internal/index.js +16 -1
- package/lib/helpers-internal/validate-all-props.d.ts +29 -0
- package/lib/helpers-internal/validate-all-props.js +23 -0
- package/lib/size.js +1 -1
- package/lib/stack-base.d.ts +21 -5
- package/lib/stack-base.js +68 -5
- package/lib/terra-func.js +1 -1
- package/lib/time-zone.js +1 -1
- package/package.json +3 -1
- package/lib/aws/compute/lb-shared/access-logs-accounts.d.ts +0 -7
- package/lib/aws/compute/lb-shared/access-logs-accounts.js +0 -46
- package/lib/aws/notify/queue-config.generated.d.ts +0 -98
- package/lib/aws/notify/queue-config.generated.js +0 -3
- package/lib/aws/partition.d.ts +0 -21
- package/lib/aws/partition.js +0 -42
package/lib/aws/notify/queue.js
CHANGED
|
@@ -1,64 +1,71 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
var _a;
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
-
exports.
|
|
4
|
+
exports.RedrivePermission = exports.FifoThroughputLimit = exports.DeduplicationScope = exports.Queue = void 0;
|
|
5
|
+
exports.validateQueueProps = validateQueueProps;
|
|
6
|
+
exports.validateRedriveAllowPolicy = validateRedriveAllowPolicy;
|
|
5
7
|
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
8
|
+
// https://github.com/aws/aws-cdk/blob/v2.232.2/packages/aws-cdk-lib/aws-sqs/lib/queue.ts
|
|
6
9
|
const provider_aws_1 = require("@cdktf/provider-aws");
|
|
7
10
|
const cdktf_1 = require("cdktf");
|
|
8
|
-
const
|
|
9
|
-
const
|
|
11
|
+
const errors_1 = require("../../errors");
|
|
12
|
+
const helpers_internal_1 = require("../../helpers-internal");
|
|
13
|
+
const arn_1 = require("../arn");
|
|
14
|
+
const queue_base_1 = require("./queue-base");
|
|
15
|
+
const aws_stack_1 = require("../aws-stack");
|
|
16
|
+
const kms = require("../encryption");
|
|
10
17
|
const iam = require("../iam");
|
|
11
18
|
/**
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
* ```ts
|
|
15
|
-
* new notify.Queue(stack, "Queue", {
|
|
16
|
-
* namePrefix: "queue.fifo",
|
|
17
|
-
* messageRetentionSeconds: Duration.days(14).toSeconds(),
|
|
18
|
-
* visibilityTimeoutSeconds: Duration.minutes(15).toSeconds(),
|
|
19
|
-
* });
|
|
20
|
-
* ```
|
|
21
|
-
*
|
|
22
|
-
* @resource aws_sqs_queue
|
|
23
|
-
* @beacon-class notify.IQueue
|
|
19
|
+
* A new Amazon SQS queue
|
|
24
20
|
*/
|
|
25
|
-
class Queue extends
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
21
|
+
class Queue extends queue_base_1.QueueBase {
|
|
22
|
+
/**
|
|
23
|
+
* Import an existing SQS queue provided an ARN
|
|
24
|
+
*
|
|
25
|
+
* @param scope The parent creating construct
|
|
26
|
+
* @param id The construct's name
|
|
27
|
+
* @param queueArn queue ARN (i.e. arn:aws:sqs:us-east-2:444455556666:queue1)
|
|
28
|
+
*/
|
|
29
|
+
static fromQueueArn(scope, id, queueArn) {
|
|
30
|
+
const stack = aws_stack_1.AwsStack.ofAwsConstruct(scope);
|
|
31
|
+
const parsedArn = stack.splitArn(queueArn, arn_1.ArnFormat.NO_RESOURCE_NAME);
|
|
32
|
+
const queueName = parsedArn.resource;
|
|
33
|
+
const queueUrl = `https://sqs.${parsedArn.region}.${stack.urlSuffix}/${parsedArn.account}/${queueName}`;
|
|
34
|
+
class Import extends queue_base_1.QueueBase {
|
|
35
|
+
constructor() {
|
|
36
|
+
super(...arguments);
|
|
37
|
+
this.queueArn = queueArn; // arn:aws:sqs:us-east-1:123456789012:queue1
|
|
38
|
+
this.queueUrl = queueUrl;
|
|
39
|
+
this.queueName = queueName;
|
|
40
|
+
this.encryptionMasterKey = undefined;
|
|
41
|
+
this.fifo = this.determineFifo();
|
|
42
|
+
this.encryptionType = undefined;
|
|
43
|
+
this.autoCreatePolicy = false;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Determine fifo flag based on queueName and fifo attribute
|
|
47
|
+
*/
|
|
48
|
+
determineFifo() {
|
|
49
|
+
if (cdktf_1.Token.isUnresolved(this.queueArn)) {
|
|
50
|
+
return false;
|
|
50
51
|
}
|
|
51
|
-
|
|
52
|
-
|
|
52
|
+
else {
|
|
53
|
+
return queueName.endsWith(".fifo");
|
|
53
54
|
}
|
|
54
55
|
}
|
|
55
|
-
else if (redrivePermission && sourceQueues) {
|
|
56
|
-
throw new Error("sourceQueues cannot be configured when RedrivePermission is set to 'allowAll' or 'denyAll'");
|
|
57
|
-
}
|
|
58
56
|
}
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
57
|
+
return new Import(scope, id, {
|
|
58
|
+
environmentFromArn: queueArn,
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
constructor(scope, id, props = {}) {
|
|
62
|
+
super(scope, id, props);
|
|
63
|
+
this.autoCreatePolicy = true;
|
|
64
|
+
validateQueueProps(this, props);
|
|
65
|
+
if (props.redriveAllowPolicy) {
|
|
66
|
+
validateRedriveAllowPolicy(this, props.redriveAllowPolicy);
|
|
67
|
+
}
|
|
68
|
+
let namePrefix = props.queueName;
|
|
62
69
|
if (namePrefix && !cdktf_1.Token.isUnresolved(namePrefix)) {
|
|
63
70
|
if (namePrefix.endsWith(".fifo")) {
|
|
64
71
|
namePrefix = namePrefix.slice(0, -5);
|
|
@@ -70,9 +77,10 @@ class Queue extends aws_construct_1.AwsConstructBase {
|
|
|
70
77
|
allowedSpecialCharacters: "_-",
|
|
71
78
|
maxLength: 80,
|
|
72
79
|
});
|
|
80
|
+
this.physicalName = namePrefix;
|
|
73
81
|
const redrivePolicy = props.deadLetterQueue
|
|
74
82
|
? {
|
|
75
|
-
deadLetterTargetArn: props.deadLetterQueue.queue.
|
|
83
|
+
deadLetterTargetArn: props.deadLetterQueue.queue.queueArn,
|
|
76
84
|
maxReceiveCount: props.deadLetterQueue.maxReceiveCount,
|
|
77
85
|
}
|
|
78
86
|
: undefined;
|
|
@@ -85,125 +93,90 @@ class Queue extends aws_construct_1.AwsConstructBase {
|
|
|
85
93
|
(props.redriveAllowPolicy.sourceQueues
|
|
86
94
|
? RedrivePermission.BY_QUEUE
|
|
87
95
|
: RedrivePermission.ALLOW_ALL),
|
|
88
|
-
sourceQueueArns: props.redriveAllowPolicy.sourceQueues?.map((q) => q.
|
|
96
|
+
sourceQueueArns: props.redriveAllowPolicy.sourceQueues?.map((q) => q.queueArn),
|
|
89
97
|
}
|
|
90
98
|
: undefined;
|
|
99
|
+
const { encryptionMasterKey, encryptionProps, encryptionType } = _determineEncryptionProps.call(this);
|
|
100
|
+
const fifoProps = this.determineFifoProps(props);
|
|
101
|
+
this.fifo = fifoProps.fifoQueue || false;
|
|
91
102
|
this.resource = new provider_aws_1.sqsQueue.SqsQueue(this, "Resource", {
|
|
92
|
-
|
|
103
|
+
namePrefix: this.physicalName,
|
|
93
104
|
...fifoProps,
|
|
105
|
+
...encryptionProps,
|
|
94
106
|
redrivePolicy: redrivePolicy ? JSON.stringify(redrivePolicy) : undefined,
|
|
95
107
|
redriveAllowPolicy: redriveAllowPolicy
|
|
96
108
|
? JSON.stringify(redriveAllowPolicy)
|
|
97
109
|
: undefined,
|
|
98
|
-
|
|
110
|
+
delaySeconds: props.deliveryDelay?.toSeconds(),
|
|
111
|
+
maxMessageSize: props.maxMessageSizeBytes,
|
|
112
|
+
messageRetentionSeconds: props.retentionPeriod?.toSeconds(),
|
|
113
|
+
receiveWaitTimeSeconds: props.receiveMessageWaitTime?.toSeconds(),
|
|
114
|
+
visibilityTimeoutSeconds: props.visibilityTimeout?.toSeconds(),
|
|
99
115
|
});
|
|
116
|
+
// queue.applyRemovalPolicy(props.removalPolicy ?? RemovalPolicy.DESTROY);
|
|
117
|
+
this.queueArn = this.resource.arn;
|
|
118
|
+
this.queueName = this.resource.name;
|
|
119
|
+
this.encryptionMasterKey = encryptionMasterKey;
|
|
120
|
+
this.queueUrl = this.resource.url;
|
|
100
121
|
this.deadLetterQueue = props.deadLetterQueue;
|
|
101
|
-
this.
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
122
|
+
this.encryptionType = encryptionType;
|
|
123
|
+
function _determineEncryptionProps() {
|
|
124
|
+
let encryption = props.encryption;
|
|
125
|
+
if (encryption === queue_base_1.QueueEncryption.SQS_MANAGED &&
|
|
126
|
+
props.encryptionMasterKey) {
|
|
127
|
+
throw new errors_1.ValidationError("'encryptionMasterKey' is not supported if encryption type 'SQS_MANAGED' is used", this);
|
|
128
|
+
}
|
|
129
|
+
if (encryption !== queue_base_1.QueueEncryption.KMS && props.encryptionMasterKey) {
|
|
130
|
+
encryption = queue_base_1.QueueEncryption.KMS; // KMS is implied by specifying an encryption key
|
|
131
|
+
}
|
|
132
|
+
if (!encryption) {
|
|
133
|
+
return { encryptionProps: {}, encryptionType: encryption };
|
|
134
|
+
}
|
|
135
|
+
if (encryption === queue_base_1.QueueEncryption.UNENCRYPTED) {
|
|
136
|
+
return {
|
|
137
|
+
encryptionType: encryption,
|
|
138
|
+
encryptionProps: {
|
|
139
|
+
sqsManagedSseEnabled: false,
|
|
140
|
+
},
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
if (encryption === queue_base_1.QueueEncryption.KMS_MANAGED) {
|
|
144
|
+
return {
|
|
145
|
+
encryptionType: encryption,
|
|
146
|
+
encryptionProps: {
|
|
147
|
+
kmsMasterKeyId: "alias/aws/sqs",
|
|
148
|
+
kmsDataKeyReusePeriodSeconds: props.dataKeyReuse?.toSeconds(),
|
|
149
|
+
},
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
if (encryption === queue_base_1.QueueEncryption.KMS) {
|
|
153
|
+
const masterKey = props.encryptionMasterKey ||
|
|
154
|
+
new kms.Key(this, "Key", {
|
|
155
|
+
description: `Created by ${this.node.path}`,
|
|
156
|
+
});
|
|
157
|
+
return {
|
|
158
|
+
encryptionType: encryption,
|
|
159
|
+
encryptionMasterKey: masterKey,
|
|
160
|
+
encryptionProps: {
|
|
161
|
+
kmsMasterKeyId: masterKey.keyArn,
|
|
162
|
+
kmsDataKeyReusePeriodSeconds: props.dataKeyReuse?.toSeconds(),
|
|
163
|
+
},
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
if (encryption === queue_base_1.QueueEncryption.SQS_MANAGED) {
|
|
167
|
+
return {
|
|
168
|
+
encryptionType: encryption,
|
|
169
|
+
encryptionProps: {
|
|
170
|
+
sqsManagedSseEnabled: true,
|
|
171
|
+
},
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
throw new errors_1.ValidationError(`Unexpected 'encryptionType': ${encryption}`, this);
|
|
116
175
|
}
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
176
|
+
// Enforce encryption of data in transit
|
|
177
|
+
if (props.enforceSSL) {
|
|
178
|
+
this.enforceSSLStatement();
|
|
120
179
|
}
|
|
121
|
-
return { statementAdded: false };
|
|
122
|
-
}
|
|
123
|
-
/**
|
|
124
|
-
* Grant permissions to consume messages from a queue
|
|
125
|
-
*
|
|
126
|
-
* This will grant the following permissions:
|
|
127
|
-
*
|
|
128
|
-
* - sqs:ChangeMessageVisibility
|
|
129
|
-
* - sqs:DeleteMessage
|
|
130
|
-
* - sqs:ReceiveMessage
|
|
131
|
-
* - sqs:GetQueueAttributes
|
|
132
|
-
* - sqs:GetQueueUrl
|
|
133
|
-
*
|
|
134
|
-
* If encryption is used, permission to use the key to decrypt the contents of the queue will also be granted to the same principal.
|
|
135
|
-
*
|
|
136
|
-
* This will grant the following KMS permissions:
|
|
137
|
-
*
|
|
138
|
-
* - kms:Decrypt
|
|
139
|
-
*
|
|
140
|
-
* @param grantee Principal to grant consume rights to
|
|
141
|
-
*/
|
|
142
|
-
grantConsumeMessages(grantee) {
|
|
143
|
-
const ret = this.grant(grantee, "sqs:ReceiveMessage", "sqs:ChangeMessageVisibility", "sqs:GetQueueUrl", "sqs:DeleteMessage", "sqs:GetQueueAttributes");
|
|
144
|
-
// // TODO: Re-Add KMS support
|
|
145
|
-
// if (this.encryptionMasterKey) {
|
|
146
|
-
// this.encryptionMasterKey.grantDecrypt(grantee);
|
|
147
|
-
// }
|
|
148
|
-
return ret;
|
|
149
|
-
}
|
|
150
|
-
/**
|
|
151
|
-
* Grant access to send messages to a queue to the given identity.
|
|
152
|
-
*
|
|
153
|
-
* This will grant the following permissions:
|
|
154
|
-
*
|
|
155
|
-
* - sqs:SendMessage
|
|
156
|
-
* - sqs:GetQueueAttributes
|
|
157
|
-
* - sqs:GetQueueUrl
|
|
158
|
-
*
|
|
159
|
-
* If encryption is used, permission to use the key to encrypt/decrypt the contents of the queue will also be granted to the same principal.
|
|
160
|
-
*
|
|
161
|
-
* This will grant the following KMS permissions:
|
|
162
|
-
*
|
|
163
|
-
* - kms:Decrypt
|
|
164
|
-
* - kms:Encrypt
|
|
165
|
-
* - kms:ReEncrypt*
|
|
166
|
-
* - kms:GenerateDataKey*
|
|
167
|
-
*
|
|
168
|
-
* @param grantee Principal to grant send rights to
|
|
169
|
-
*/
|
|
170
|
-
grantSendMessages(grantee) {
|
|
171
|
-
const ret = this.grant(grantee, "sqs:SendMessage", "sqs:GetQueueAttributes", "sqs:GetQueueUrl");
|
|
172
|
-
// // TODO: Re-Add KMS support
|
|
173
|
-
// if (this.encryptionMasterKey) {
|
|
174
|
-
// // kms:Decrypt necessary to execute grantsendMessages to an SSE enabled SQS queue
|
|
175
|
-
// this.encryptionMasterKey.grantEncryptDecrypt(grantee);
|
|
176
|
-
// }
|
|
177
|
-
return ret;
|
|
178
|
-
}
|
|
179
|
-
/**
|
|
180
|
-
* Grant an IAM principal permissions to purge all messages from the queue.
|
|
181
|
-
*
|
|
182
|
-
* This will grant the following permissions:
|
|
183
|
-
*
|
|
184
|
-
* - sqs:PurgeQueue
|
|
185
|
-
* - sqs:GetQueueAttributes
|
|
186
|
-
* - sqs:GetQueueUrl
|
|
187
|
-
*
|
|
188
|
-
* @param grantee Principal to grant send rights to
|
|
189
|
-
*/
|
|
190
|
-
grantPurge(grantee) {
|
|
191
|
-
return this.grant(grantee, "sqs:PurgeQueue", "sqs:GetQueueAttributes", "sqs:GetQueueUrl");
|
|
192
|
-
}
|
|
193
|
-
/**
|
|
194
|
-
* Grant the actions defined in queueActions to the identity Principal given
|
|
195
|
-
* on this SQS queue resource.
|
|
196
|
-
*
|
|
197
|
-
* @param grantee Principal to grant right to
|
|
198
|
-
* @param actions The actions to grant
|
|
199
|
-
*/
|
|
200
|
-
grant(grantee, ...actions) {
|
|
201
|
-
return iam.Grant.addToPrincipalOrResource({
|
|
202
|
-
grantee,
|
|
203
|
-
actions,
|
|
204
|
-
resourceArns: [this.queueArn],
|
|
205
|
-
resource: this,
|
|
206
|
-
});
|
|
207
180
|
}
|
|
208
181
|
/**
|
|
209
182
|
* Look at the props, see if the FIFO props agree, and return the correct subset of props
|
|
@@ -211,11 +184,11 @@ class Queue extends aws_construct_1.AwsConstructBase {
|
|
|
211
184
|
determineFifoProps(props) {
|
|
212
185
|
// Check if any of the signals that we have say that this is a FIFO queue.
|
|
213
186
|
let fifoQueue = props.fifo;
|
|
214
|
-
const
|
|
187
|
+
const queueName = props.queueName;
|
|
215
188
|
if (typeof fifoQueue === "undefined" &&
|
|
216
|
-
|
|
217
|
-
!cdktf_1.Token.isUnresolved(
|
|
218
|
-
|
|
189
|
+
queueName &&
|
|
190
|
+
!cdktf_1.Token.isUnresolved(queueName) &&
|
|
191
|
+
queueName.endsWith(".fifo")) {
|
|
219
192
|
fifoQueue = true;
|
|
220
193
|
}
|
|
221
194
|
if (typeof fifoQueue === "undefined" && props.contentBasedDeduplication) {
|
|
@@ -228,22 +201,22 @@ class Queue extends aws_construct_1.AwsConstructBase {
|
|
|
228
201
|
fifoQueue = true;
|
|
229
202
|
}
|
|
230
203
|
// If we have a name, see that it agrees with the FIFO setting
|
|
231
|
-
if (typeof
|
|
232
|
-
if (fifoQueue && !
|
|
233
|
-
throw new
|
|
204
|
+
if (typeof queueName === "string") {
|
|
205
|
+
if (fifoQueue && !queueName.endsWith(".fifo")) {
|
|
206
|
+
throw new errors_1.ValidationError("FIFO queue names must end in '.fifo'", this);
|
|
234
207
|
}
|
|
235
|
-
if (!fifoQueue &&
|
|
236
|
-
throw new
|
|
208
|
+
if (!fifoQueue && queueName.endsWith(".fifo")) {
|
|
209
|
+
throw new errors_1.ValidationError("Non-FIFO queue name may not end in '.fifo'", this);
|
|
237
210
|
}
|
|
238
211
|
}
|
|
239
212
|
if (props.contentBasedDeduplication && !fifoQueue) {
|
|
240
|
-
throw new
|
|
213
|
+
throw new errors_1.ValidationError("Content-based deduplication can only be defined for FIFO queues", this);
|
|
241
214
|
}
|
|
242
215
|
if (props.deduplicationScope && !fifoQueue) {
|
|
243
|
-
throw new
|
|
216
|
+
throw new errors_1.ValidationError("Deduplication scope can only be defined for FIFO queues", this);
|
|
244
217
|
}
|
|
245
218
|
if (props.fifoThroughputLimit && !fifoQueue) {
|
|
246
|
-
throw new
|
|
219
|
+
throw new errors_1.ValidationError("FIFO throughput limit can only be defined for FIFO queues", this);
|
|
247
220
|
}
|
|
248
221
|
return {
|
|
249
222
|
contentBasedDeduplication: props.contentBasedDeduplication,
|
|
@@ -252,28 +225,33 @@ class Queue extends aws_construct_1.AwsConstructBase {
|
|
|
252
225
|
fifoQueue,
|
|
253
226
|
};
|
|
254
227
|
}
|
|
228
|
+
/**
|
|
229
|
+
* Adds an iam statement to enforce encryption of data in transit.
|
|
230
|
+
*/
|
|
231
|
+
enforceSSLStatement() {
|
|
232
|
+
const statement = new iam.PolicyStatement({
|
|
233
|
+
actions: ["sqs:*"],
|
|
234
|
+
condition: [
|
|
235
|
+
{
|
|
236
|
+
test: "Bool",
|
|
237
|
+
variable: "aws:SecureTransport",
|
|
238
|
+
values: ["false"],
|
|
239
|
+
},
|
|
240
|
+
],
|
|
241
|
+
effect: iam.Effect.DENY,
|
|
242
|
+
resources: [this.queueArn],
|
|
243
|
+
principals: [new iam.AnyPrincipal()],
|
|
244
|
+
});
|
|
245
|
+
this.addToResourcePolicy(statement);
|
|
246
|
+
}
|
|
255
247
|
}
|
|
256
248
|
exports.Queue = Queue;
|
|
257
249
|
_a = JSII_RTTI_SYMBOL_1;
|
|
258
|
-
Queue[_a] = { fqn: "terraconstructs.aws.notify.Queue", version: "0.
|
|
250
|
+
Queue[_a] = { fqn: "terraconstructs.aws.notify.Queue", version: "0.2.0" };
|
|
259
251
|
/**
|
|
260
|
-
*
|
|
252
|
+
* Uniquely identifies this class.
|
|
261
253
|
*/
|
|
262
|
-
|
|
263
|
-
(function (RedrivePermission) {
|
|
264
|
-
/**
|
|
265
|
-
* Any source queues in this AWS account in the same Region can specify this queue as the dead-letter queue
|
|
266
|
-
*/
|
|
267
|
-
RedrivePermission["ALLOW_ALL"] = "allowAll";
|
|
268
|
-
/**
|
|
269
|
-
* No source queues can specify this queue as the dead-letter queue
|
|
270
|
-
*/
|
|
271
|
-
RedrivePermission["DENY_ALL"] = "denyAll";
|
|
272
|
-
/**
|
|
273
|
-
* Only queues specified by the `sourceQueueArns` parameter can specify this queue as the dead-letter queue
|
|
274
|
-
*/
|
|
275
|
-
RedrivePermission["BY_QUEUE"] = "byQueue";
|
|
276
|
-
})(RedrivePermission || (exports.RedrivePermission = RedrivePermission = {}));
|
|
254
|
+
Queue.PROPERTY_INJECTION_ID = "terraconstructs.aws.sqs.Queue";
|
|
277
255
|
/**
|
|
278
256
|
* What kind of deduplication scope to apply
|
|
279
257
|
*/
|
|
@@ -302,4 +280,79 @@ var FifoThroughputLimit;
|
|
|
302
280
|
*/
|
|
303
281
|
FifoThroughputLimit["PER_MESSAGE_GROUP_ID"] = "perMessageGroupId";
|
|
304
282
|
})(FifoThroughputLimit || (exports.FifoThroughputLimit = FifoThroughputLimit = {}));
|
|
305
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVldWUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXdzL25vdGlmeS9xdWV1ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLHNEQUErQztBQUMvQyxpQ0FBOEI7QUFFOUIsd0JBQWdEO0FBQ2hELG9EQUF1RTtBQUN2RSw4QkFBOEI7QUF5TDlCOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFDSCxNQUFhLEtBQU0sU0FBUSxnQ0FBZ0I7SUFLekMsSUFBVyxZQUFZO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN2QixDQUFDO0lBQ0QsSUFBVyxPQUFPO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztJQUMzQixDQUFDO0lBR0QsSUFBVyxRQUFRO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUM7SUFDM0IsQ0FBQztJQUNELElBQVcsUUFBUTtRQUNqQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDO0lBQzNCLENBQUM7SUFDRCxJQUFXLFNBQVM7UUFDbEIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztJQUM1QixDQUFDO0lBUUQsWUFBWSxLQUFnQixFQUFFLElBQVksRUFBRSxRQUFvQixFQUFFO1FBQ2hFLEtBQUssQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRTFCLGlFQUFpRTtRQUNqRSxrSEFBa0g7UUFDbEgsSUFBSSxLQUFLLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUM3QixNQUFNLEVBQUUsaUJBQWlCLEVBQUUsWUFBWSxFQUFFLEdBQUcsS0FBSyxDQUFDLGtCQUFrQixDQUFDO1lBQ3JFLElBQUksaUJBQWlCLEtBQUssaUJBQWlCLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ3JELElBQUksQ0FBQyxZQUFZLElBQUksWUFBWSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztvQkFDL0MsTUFBTSxJ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O1NBQ1YsQ0FBQztJQUNKLENBQUM7O0FBM1NILHNCQTRTQzs7O0FBb0REOztHQUVHO0FBQ0gsSUFBWSxpQkFhWDtBQWJELFdBQVksaUJBQWlCO0lBQzNCOztPQUVHO0lBQ0gsMkNBQXNCLENBQUE7SUFDdEI7O09BRUc7SUFDSCx5Q0FBb0IsQ0FBQTtJQUNwQjs7T0FFRztJQUNILHlDQUFvQixDQUFBO0FBQ3RCLENBQUMsRUFiVyxpQkFBaUIsaUNBQWpCLGlCQUFpQixRQWE1QjtBQUVEOztHQUVHO0FBQ0gsSUFBWSxrQkFTWDtBQVRELFdBQVksa0JBQWtCO0lBQzVCOztPQUVHO0lBQ0gsb0RBQThCLENBQUE7SUFDOUI7O09BRUc7SUFDSCxxQ0FBZSxDQUFBO0FBQ2pCLENBQUMsRUFUVyxrQkFBa0Isa0NBQWxCLGtCQUFrQixRQVM3QjtBQUVEOztHQUVHO0FBQ0gsSUFBWSxtQkFTWDtBQVRELFdBQVksbUJBQW1CO0lBQzdCOztPQUVHO0lBQ0gsNkNBQXNCLENBQUE7SUFDdEI7O09BRUc7SUFDSCxpRUFBMEMsQ0FBQTtBQUM1QyxDQUFDLEVBVFcsbUJBQW1CLG1DQUFuQixtQkFBbUIsUUFTOUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBzcXNRdWV1ZSB9IGZyb20gXCJAY2RrdGYvcHJvdmlkZXItYXdzXCI7XG5pbXBvcnQgeyBUb2tlbiB9IGZyb20gXCJjZGt0ZlwiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IFNxc1F1ZXVlQ29uZmlnLCBRdWV1ZVBvbGljeSB9IGZyb20gXCIuXCI7XG5pbXBvcnQgeyBBd3NDb25zdHJ1Y3RCYXNlLCBBd3NDb25zdHJ1Y3RQcm9wcyB9IGZyb20gXCIuLi9hd3MtY29uc3RydWN0XCI7XG5pbXBvcnQgKiBhcyBpYW0gZnJvbSBcIi4uL2lhbVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFF1ZXVlUHJvcHMgZXh0ZW5kcyBBd3NDb25zdHJ1Y3RQcm9wcywgU3FzUXVldWVDb25maWcge1xuICAvKipcbiAgICogUXVldWUgTmFtZSBwcmVmaXhcbiAgICpcbiAgICogUXVldWUgbmFtZXMgbXVzdCBiZSBtYWRlIHVwIG9mIG9ubHkgdXBwZXJjYXNlIGFuZCBsb3dlcmNhc2UgQVNDSUkgbGV0dGVycyxcbiAgICogbnVtYmVycywgdW5kZXJzY29yZXMsIGFuZCBoeXBoZW5zLCBhbmQgbXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDgwIGNoYXJhY3RlcnNcbiAgICogbG9uZy5cbiAgICpcbiAgICogVGVycmFmb3JtIFByZWZpeGVzIG11c3QgcmVzZXJ2ZSAyNiBjaGFyYWN0ZXJzIGZvciB0aGUgdGVycmFmb3JtIGdlbmVyYXRlZCBzdWZmaXguXG4gICAqXG4gICAqIEZvciBhIEZJRk8gKGZpcnN0LWluLWZpcnN0LW91dCkgcXVldWUsIHRoZSBuYW1lIG11c3QgZW5kIHdpdGggdGhlIC5maWZvXG4gICAqIEBkZWZhdWx0IC0gR3JpZFVVSUQgKyBTdGFjayBVbmlxdWUgTmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZVByZWZpeD86IHN0cmluZztcblxuICAvKipcbiAgICogU2VuZCBtZXNzYWdlcyB0byB0aGlzIHF1ZXVlIGlmIHRoZXkgd2VyZSB1bnN1Y2Nlc3NmdWxseSBkZXF1ZXVlZCBhIG51bWJlciBvZiB0aW1lcy5cbiAgICpcbiAgICogU2VlIFtBV1MgRG9jc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU1NpbXBsZVF1ZXVlU2VydmljZS9sYXRlc3QvU1FTRGV2ZWxvcGVyR3VpZGUvc3FzLWRlYWQtbGV0dGVyLXF1ZXVlcy5odG1sKVxuICAgKlxuICAgKiBAZGVmYXVsdCBubyBkZWFkLWxldHRlciBxdWV1ZVxuICAgKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL2hhc2hpY29ycC9hd3MvNS42OC4wL2RvY3MvcmVzb3VyY2VzL3Nxc19xdWV1ZSNyZWRyaXZlX3BvbGljeSBTcXNRdWV1ZSNyZWRyaXZlX3BvbGljeX1cbiAgICovXG4gIHJlYWRvbmx5IGRlYWRMZXR0ZXJRdWV1ZT86IERlYWRMZXR0ZXJRdWV1ZTtcbiAgLyoqXG4gICAqIFRoZSBzdHJpbmcgdGhhdCBpbmNsdWRlcyB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIHBlcm1pc3Npb25zIGZvciB0aGUgZGVhZC1sZXR0ZXIgcXVldWVcbiAgICogcmVkcml2ZSBwZXJtaXNzaW9uIGFuZCB3aGljaCBzb3VyY2UgcXVldWVzIGNhbiBzcGVjaWZ5IGRlYWQtbGV0dGVyIHF1ZXVlcy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBBbGwgc291cmNlIHF1ZXVlcyBjYW4gZGVzaWduYXRlIHRoaXMgcXVldWUgYXMgdGhlaXIgZGVhZC1sZXR0ZXIgcXVldWUuXG4gICAqXG4gICAqIHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvaGFzaGljb3JwL2F3cy81LjY4LjAvZG9jcy9yZXNvdXJjZXMvc3FzX3F1ZXVlI3JlZHJpdmVfYWxsb3dfcG9saWN5IFNxc1F1ZXVlI3JlZHJpdmVfYWxsb3dfcG9saWN5fVxuICAgKi9cbiAgcmVhZG9ubHkgcmVkcml2ZUFsbG93UG9saWN5PzogUmVkcml2ZUFsbG93UG9saWN5O1xuICAvKipcbiAgICogV2hldGhlciB0aGlzIGEgZmlyc3QtaW4tZmlyc3Qtb3V0IChGSUZPKSBxdWV1ZS5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2UsIHVubGVzcyBuYW1lU3VmZml4IGVuZHMgaW4gJy5maWZvJyBvciAnY29udGVudEJhc2VkRGVkdXBsaWNhdGlvbicgaXMgdHJ1ZS5cbiAgICovXG4gIHJlYWRvbmx5IGZpZm8/OiBib29sZWFuO1xuICAvKipcbiAgICogU3BlY2lmaWVzIHdoZXRoZXIgdG8gZW5hYmxlIGNvbnRlbnQtYmFzZWQgZGVkdXBsaWNhdGlvbi5cbiAgICpcbiAgICogRHVyaW5nIHRoZSBkZWR1cGxpY2F0aW9uIGludGVydmFsICg1IG1pbnV0ZXMpLCBBbWF6b24gU1FTIHRyZWF0c1xuICAgKiBtZXNzYWdlcyB0aGF0IGFyZSBzZW50IHdpdGggaWRlbnRpY2FsIGNvbnRlbnQgKGV4Y2x1ZGluZyBhdHRyaWJ1dGVzKSBhc1xuICAgKiBkdXBsaWNhdGVzIGFuZCBkZWxpdmVycyBvbmx5IG9uZSBjb3B5IG9mIHRoZSBtZXNzYWdlLlxuICAgKlxuICAgKiBJZiB5b3UgZG9uJ3QgZW5hYmxlIGNvbnRlbnQtYmFzZWQgZGVkdXBsaWNhdGlvbiBhbmQgeW91IHdhbnQgdG8gZGVkdXBsaWNhdGVcbiAgICogbWVzc2FnZXMsIHByb3ZpZGUgYW4gZXhwbGljaXQgZGVkdXBsaWNhdGlvbiBJRCBpbiB5b3VyIFNlbmRNZXNzYWdlKCkgY2FsbC5cbiAgICpcbiAgICogKE9ubHkgYXBwbGllcyB0byBGSUZPIHF1ZXVlcy4pXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBjb250ZW50QmFzZWREZWR1cGxpY2F0aW9uPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEZvciBoaWdoIHRocm91Z2hwdXQgZm9yIEZJRk8gcXVldWVzLCBzcGVjaWZpZXMgd2hldGhlciBtZXNzYWdlIGRlZHVwbGljYXRpb25cbiAgICogb2NjdXJzIGF0IHRoZSBtZXNzYWdlIGdyb3VwIG9yIHF1ZXVlIGxldmVsLlxuICAgKlxuICAgKiAoT25seSBhcHBsaWVzIHRvIEZJRk8gcXVldWVzLilcbiAgICpcbiAgICogQGRlZmF1bHQgRGVkdXBsaWNhdGlvblNjb3BlLlFVRVVFXG4gICAqL1xuICByZWFkb25seSBkZWR1cGxpY2F0aW9uU2NvcGU/OiBEZWR1cGxpY2F0aW9uU2NvcGU7XG4gIC8qKlxuICAgKiBGb3IgaGlnaCB0aHJvdWdocHV0IGZvciBGSUZPIHF1ZXVlcywgc3BlY2lmaWVzIHdoZXRoZXIgdGhlIEZJRk8gcXVldWVcbiAgICogdGhyb3VnaHB1dCBxdW90YSBhcHBsaWVzIHRvIHRoZSBlbnRpcmUgcXVldWUgb3IgcGVyIG1lc3NhZ2UgZ3JvdXAuXG4gICAqXG4gICAqIChPbmx5IGFwcGxpZXMgdG8gRklGTyBxdWV1ZXMuKVxuICAgKlxuICAgKiBAZGVmYXVsdCBGaWZvVGhyb3VnaHB1dExpbWl0LlBFUl9RVUVVRVxuICAgKi9cbiAgcmVhZG9ubHkgZmlmb1Rocm91Z2hwdXRMaW1pdD86IEZpZm9UaHJvdWdocHV0TGltaXQ7XG59XG5cbi8qKlxuICogT3V0cHV0cyB3aGljaCBtYXkgYmUgcmVnaXN0ZXJlZCBmb3Igb3V0cHV0IHZpYSB0aGUgR3JpZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBRdWV1ZU91dHB1dHMge1xuICAvKipcbiAgICogUXVldWUgbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBRdWV1ZSBhcm5cbiAgICovXG4gIHJlYWRvbmx5IGFybjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBRdWV1ZSB1cmxcbiAgICovXG4gIHJlYWRvbmx5IHVybDogc3RyaW5nO1xufVxuXG4vKipcbiAqIEltcG9ydGVkIG9yIGNyZWF0ZWQgUXVldWUgYXR0cmlidXRlc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIElRdWV1ZSBleHRlbmRzIGlhbS5JQXdzQ29uc3RydWN0V2l0aFBvbGljeSB7XG4gIC8qKiBTdHJvbmdseSB0eXBlZCBvdXRwdXRzICovXG4gIHJlYWRvbmx5IHF1ZXVlT3V0cHV0czogUXVldWVPdXRwdXRzO1xuICAvKipcbiAgICogVGhlIEFSTiBvZiB0aGlzIHF1ZXVlXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IHF1ZXVlQXJuOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgVVJMIG9mIHRoaXMgcXVldWVcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgcXVldWVVcmw6IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoaXMgcXVldWVcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgcXVldWVOYW1lOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBJZiB0aGlzIHF1ZXVlIGlzIGNvbmZpZ3VyZWQgd2l0aCBhIGRlYWQtbGV0dGVyIHF1ZXVlLCB0aGlzIGlzIHRoZSBkZWFkLWxldHRlciBxdWV1ZSBzZXR0aW5ncy5cbiAgICovXG4gIHJlYWRvbmx5IGRlYWRMZXR0ZXJRdWV1ZT86IERlYWRMZXR0ZXJRdWV1ZTtcblxuICAvLyAvLyBUT0RPOiBSZS1BZGQgS01TIHN1cHBvcnRcbiAgLy8gLyoqXG4gIC8vICAqIFdoZXRoZXIgdGhlIGNvbnRlbnRzIG9mIHRoZSBxdWV1ZSBhcmUgZW5jcnlwdGVkLCBhbmQgYnkgd2hhdCB0eXBlIG9mIGtleS5cbiAgLy8gICovXG4gIC8vIHJlYWRvbmx5IGVuY3J5cHRpb25UeXBlPzogUXVldWVFbmNyeXB0aW9uO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoaXMgcXVldWUgaXMgYW4gQW1hem9uIFNRUyBGSUZPIHF1ZXVlLiBJZiBmYWxzZSwgdGhpcyBpcyBhIHN0YW5kYXJkIHF1ZXVlLlxuICAgKi9cbiAgcmVhZG9ubHkgZmlmbzogYm9vbGVhbjtcblxuICAvKipcbiAgICogR3JhbnQgcGVybWlzc2lvbnMgdG8gY29uc3VtZSBtZXNzYWdlcyBmcm9tIGEgcXVldWVcbiAgICpcbiAgICogVGhpcyB3aWxsIGdyYW50IHRoZSBmb2xsb3dpbmcgcGVybWlzc2lvbnM6XG4gICAqXG4gICAqICAgLSBzcXM6Q2hhbmdlTWVzc2FnZVZpc2liaWxpdHlcbiAgICogICAtIHNxczpEZWxldGVNZXNzYWdlXG4gICAqICAgLSBzcXM6UmVjZWl2ZU1lc3NhZ2VcbiAgICogICAtIHNxczpHZXRRdWV1ZUF0dHJpYnV0ZXNcbiAgICogICAtIHNxczpHZXRRdWV1ZVVybFxuICAgKlxuICAgKiBAcGFyYW0gZ3JhbnRlZSBQcmluY2lwYWwgdG8gZ3JhbnQgY29uc3VtZSByaWdodHMgdG9cbiAgICovXG4gIGdyYW50Q29uc3VtZU1lc3NhZ2VzKGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlKTogaWFtLkdyYW50O1xuXG4gIC8qKlxuICAgKiBHcmFudCBhY2Nlc3MgdG8gc2VuZCBtZXNzYWdlcyB0byBhIHF1ZXVlIHRvIHRoZSBnaXZlbiBpZGVudGl0eS5cbiAgICpcbiAgICogVGhpcyB3aWxsIGdyYW50IHRoZSBmb2xsb3dpbmcgcGVybWlzc2lvbnM6XG4gICAqXG4gICAqICAtIHNxczpTZW5kTWVzc2FnZVxuICAgKiAgLSBzcXM6R2V0UXVldWVBdHRyaWJ1dGVzXG4gICAqICAtIHNxczpHZXRRdWV1ZVVybFxuICAgKlxuICAgKiBAcGFyYW0gZ3JhbnRlZSBQcmluY2lwYWwgdG8gZ3JhbnQgc2VuZCByaWdodHMgdG9cbiAgICovXG4gIGdyYW50U2VuZE1lc3NhZ2VzKGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlKTogaWFtLkdyYW50O1xuXG4gIC8qKlxuICAgKiBHcmFudCBhbiBJQU0gcHJpbmNpcGFsIHBlcm1pc3Npb25zIHRvIHB1cmdlIGFsbCBtZXNzYWdlcyBmcm9tIHRoZSBxdWV1ZS5cbiAgICpcbiAgICogVGhpcyB3aWxsIGdyYW50IHRoZSBmb2xsb3dpbmcgcGVybWlzc2lvbnM6XG4gICAqXG4gICAqICAtIHNxczpQdXJnZVF1ZXVlXG4gICAqICAtIHNxczpHZXRRdWV1ZUF0dHJpYnV0ZXNcbiAgICogIC0gc3FzOkdldFF1ZXVlVXJsXG4gICAqXG4gICAqIEBwYXJhbSBncmFudGVlIFByaW5jaXBhbCB0byBncmFudCBzZW5kIHJpZ2h0cyB0b1xuICAgKi9cbiAgZ3JhbnRQdXJnZShncmFudGVlOiBpYW0uSUdyYW50YWJsZSk6IGlhbS5HcmFudDtcblxuICAvKipcbiAgICogR3JhbnQgdGhlIGFjdGlvbnMgZGVmaW5lZCBpbiBxdWV1ZUFjdGlvbnMgdG8gdGhlIGlkZW50aXR5IFByaW5jaXBhbCBnaXZlblxuICAgKiBvbiB0aGlzIFNRUyBxdWV1ZSByZXNvdXJjZS5cbiAgICpcbiAgICogQHBhcmFtIGdyYW50ZWUgUHJpbmNpcGFsIHRvIGdyYW50IHJpZ2h0IHRvXG4gICAqIEBwYXJhbSBxdWV1ZUFjdGlvbnMgVGhlIGFjdGlvbnMgdG8gZ3JhbnRcbiAgICovXG4gIGdyYW50KGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlLCAuLi5xdWV1ZUFjdGlvbnM6IHN0cmluZ1tdKTogaWFtLkdyYW50O1xufVxuXG4vKipcbiAqIFRoZSBgUXVldWVgIGJlYWNvbiBwcm92aWRlcyBhbiBbQVdTIFNRUyBRdWV1ZV0oaHR0cHM6Ly9hd3MuYW1hem9uLmNvbS9zcXMvKS5cbiAqXG4gKiBgYGB0c1xuICogbmV3IG5vdGlmeS5RdWV1ZShzdGFjaywgXCJRdWV1ZVwiLCB7XG4gKiAgIG5hbWVQcmVmaXg6IFwicXVldWUuZmlmb1wiLFxuICogICBtZXNzYWdlUmV0ZW50aW9uU2Vjb25kczogRHVyYXRpb24uZGF5cygxNCkudG9TZWNvbmRzKCksXG4gKiAgIHZpc2liaWxpdHlUaW1lb3V0U2Vjb25kczogRHVyYXRpb24ubWludXRlcygxNSkudG9TZWNvbmRzKCksXG4gKiB9KTtcbiAqIGBgYFxuICpcbiAqIEByZXNvdXJjZSBhd3Nfc3FzX3F1ZXVlXG4gKiBAYmVhY29uLWNsYXNzIG5vdGlmeS5JUXVldWVcbiAqL1xuZXhwb3J0IGNsYXNzIFF1ZXVlIGV4dGVuZHMgQXdzQ29uc3RydWN0QmFzZSBpbXBsZW1lbnRzIElRdWV1ZSB7XG4gIC8vIFRPRE86IEFkZCBzdGF0aWMgZnJvbUxvb2t1cD9cbiAgcHVibGljIHJlYWRvbmx5IHJlc291cmNlOiBzcXNRdWV1ZS5TcXNRdWV1ZTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9vdXRwdXRzOiBRdWV1ZU91dHB1dHM7XG4gIHB1YmxpYyBnZXQgcXVldWVPdXRwdXRzKCk6IFF1ZXVlT3V0cHV0cyB7XG4gICAgcmV0dXJuIHRoaXMuX291dHB1dHM7XG4gIH1cbiAgcHVibGljIGdldCBvdXRwdXRzKCk6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xuICAgIHJldHVybiB0aGlzLnF1ZXVlT3V0cHV0cztcbiAgfVxuICBwcml2YXRlIHBvbGljeT86IFF1ZXVlUG9saWN5O1xuXG4gIHB1YmxpYyBnZXQgcXVldWVBcm4oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5yZXNvdXJjZS5hcm47XG4gIH1cbiAgcHVibGljIGdldCBxdWV1ZVVybCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnJlc291cmNlLnVybDtcbiAgfVxuICBwdWJsaWMgZ2V0IHF1ZXVlTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnJlc291cmNlLm5hbWU7XG4gIH1cbiAgcHVibGljIHJlYWRvbmx5IGRlYWRMZXR0ZXJRdWV1ZT86IERlYWRMZXR0ZXJRdWV1ZTtcblxuICAvKipcbiAgICogV2hldGhlciB0aGlzIHF1ZXVlIGlzIGFuIEFtYXpvbiBTUVMgRklGTyBxdWV1ZS4gSWYgZmFsc2UsIHRoaXMgaXMgYSBzdGFuZGFyZCBxdWV1ZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBmaWZvOiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIG5hbWU6IHN0cmluZywgcHJvcHM6IFF1ZXVlUHJvcHMgPSB7fSkge1xuICAgIHN1cGVyKHNjb3BlLCBuYW1lLCBwcm9wcyk7XG5cbiAgICAvLyBUT0RPOiBzdXBwb3J0IGFiaWxpdHkgdG8gc3BlY2lmeSByZWRyaXZlQWxsb3dQb2xpY3kgc2VwYXJhdGVseVxuICAgIC8vIHJlZjogaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL2hhc2hpY29ycC9hd3MvNS42OC4wL2RvY3MvcmVzb3VyY2VzL3Nxc19xdWV1ZV9yZWRyaXZlX2FsbG93X3BvbGljeVxuICAgIGlmIChwcm9wcy5yZWRyaXZlQWxsb3dQb2xpY3kpIHtcbiAgICAgIGNvbnN0IHsgcmVkcml2ZVBlcm1pc3Npb24sIHNvdXJjZVF1ZXVlcyB9ID0gcHJvcHMucmVkcml2ZUFsbG93UG9saWN5O1xuICAgICAgaWYgKHJlZHJpdmVQZXJtaXNzaW9uID09PSBSZWRyaXZlUGVybWlzc2lvbi5CWV9RVUVVRSkge1xuICAgICAgICBpZiAoIXNvdXJjZVF1ZXVlcyB8fCBzb3VyY2VRdWV1ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgXCJBdCBsZWFzdCBvbmUgc291cmNlIHF1ZXVlIG11c3QgYmUgc3BlY2lmaWVkIHdoZW4gUmVkcml2ZVBlcm1pc3Npb24gaXMgc2V0IHRvICdieVF1ZXVlJ1wiLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNvdXJjZVF1ZXVlcyAmJiBzb3VyY2VRdWV1ZXMubGVuZ3RoID4gMTApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBcIlVwIHRvIDEwIHNvdXJjZVF1ZXVlcyBjYW4gYmUgc3BlY2lmaWVkLiBTZXQgUmVkcml2ZVBlcm1pc3Npb24gdG8gJ2FsbG93QWxsJyB0byBzcGVjaWZ5IG1vcmVcIixcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHJlZHJpdmVQZXJtaXNzaW9uICYmIHNvdXJjZVF1ZXVlcykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgXCJzb3VyY2VRdWV1ZXMgY2Fubm90IGJlIGNvbmZpZ3VyZWQgd2hlbiBSZWRyaXZlUGVybWlzc2lvbiBpcyBzZXQgdG8gJ2FsbG93QWxsJyBvciAnZGVueUFsbCdcIixcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBmaWZvUHJvcHMgPSB0aGlzLmRldGVybWluZUZpZm9Qcm9wcyhwcm9wcyk7XG4gICAgdGhpcy5maWZvID0gZmlmb1Byb3BzLmZpZm9RdWV1ZSB8fCBmYWxzZTtcblxuICAgIGxldCBuYW1lUHJlZml4ID0gcHJvcHMubmFtZVByZWZpeDtcbiAgICBpZiAobmFtZVByZWZpeCAmJiAhVG9rZW4uaXNVbnJlc29sdmVkKG5hbWVQcmVmaXgpKSB7XG4gICAgICBpZiAobmFtZVByZWZpeC5lbmRzV2l0aChcIi5maWZvXCIpKSB7XG4gICAgICAgIG5hbWVQcmVmaXggPSBuYW1lUHJlZml4LnNsaWNlKDAsIC01KTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gVE9ETzogU2hvdWxkIHdlIGFsd2F5cyBoYXZlIHRoZSBncmlkVVVJRCBhcyB0aGUgcHJlZml4P1xuICAgIG5hbWVQcmVmaXggPSB0aGlzLnN0YWNrLnVuaXF1ZVJlc291cmNlTmFtZVByZWZpeCh0aGlzLCB7XG4gICAgICBwcmVmaXg6IG5hbWVQcmVmaXggPz8gdGhpcy5ncmlkVVVJRCArIFwiLVwiLFxuICAgICAgYWxsb3dlZFNwZWNpYWxDaGFyYWN0ZXJzOiBcIl8tXCIsXG4gICAgICBtYXhMZW5ndGg6IDgwLFxuICAgIH0pO1xuXG4gICAgY29uc3QgcmVkcml2ZVBvbGljeSA9IHByb3BzLmRlYWRMZXR0ZXJRdWV1ZVxuICAgICAgPyB7XG4gICAgICAgICAgZGVhZExldHRlclRhcmdldEFybjogcHJvcHMuZGVhZExldHRlclF1ZXVlLnF1ZXVlLnF1ZXVlT3V0cHV0cy5hcm4sXG4gICAgICAgICAgbWF4UmVjZWl2ZUNvdW50OiBwcm9wcy5kZWFkTGV0dGVyUXVldWUubWF4UmVjZWl2ZUNvdW50LFxuICAgICAgICB9XG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIC8vIFdoZW4gYHJlZHJpdmVBbGxvd1BvbGljeWAgaXMgcHJvdmlkZWQsIGByZWRyaXZlUGVybWlzc2lvbmAgZGVmYXVsdHMgdG8gYWxsb3cgYWxsIHF1ZXVlcyAoYEFMTE9XX0FMTGApO1xuICAgIGNvbnN0IHJlZHJpdmVBbGxvd1BvbGljeSA9IHByb3BzLnJlZHJpdmVBbGxvd1BvbGljeVxuICAgICAgPyB7XG4gICAgICAgICAgcmVkcml2ZVBlcm1pc3Npb246XG4gICAgICAgICAgICBwcm9wcy5yZWRyaXZlQWxsb3dQb2xpY3kucmVkcml2ZVBlcm1pc3Npb24gPz9cbiAgICAgICAgICAgIC8vIFdoZW4gYHNvdXJjZVF1ZXVlc2AgaXMgcHJvdmlkZWQgaW4gYHJlZHJpdmVBbGxvd1BvbGljeWAsIGByZWRyaXZlUGVybWlzc2lvbmAgZGVmYXVsdHMgdG9cbiAgICAgICAgICAgIC8vIGFsbG93IHNwZWNpZmllZCBxdWV1ZXMgKGBCWV9RVUVVRWApOyBvdGhlcndpc2UsIGl0IGRlZmF1bHRzIHRvIGFsbG93IGFsbCBxdWV1ZXMgKGBBTExPV19BTExgKS5cbiAgICAgICAgICAgIChwcm9wcy5yZWRyaXZlQWxsb3dQb2xpY3kuc291cmNlUXVldWVzXG4gICAgICAgICAgICAgID8gUmVkcml2ZVBlcm1pc3Npb24uQllfUVVFVUVcbiAgICAgICAgICAgICAgOiBSZWRyaXZlUGVybWlzc2lvbi5BTExPV19BTEwpLFxuICAgICAgICAgIHNvdXJjZVF1ZXVlQXJuczogcHJvcHMucmVkcml2ZUFsbG93UG9saWN5LnNvdXJjZVF1ZXVlcz8ubWFwKFxuICAgICAgICAgICAgKHEpID0+IHEucXVldWVPdXRwdXRzLmFybixcbiAgICAgICAgICApLFxuICAgICAgICB9XG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIHRoaXMucmVzb3VyY2UgPSBuZXcgc3FzUXVldWUuU3FzUXVldWUodGhpcywgXCJSZXNvdXJjZVwiLCB7XG4gICAgICAuLi5wcm9wcyxcbiAgICAgIC4uLmZpZm9Qcm9wcyxcbiAgICAgIHJlZHJpdmVQb2xpY3k6IHJlZHJpdmVQb2xpY3kgPyBKU09OLnN0cmluZ2lmeShyZWRyaXZlUG9saWN5KSA6IHVuZGVmaW5lZCxcbiAgICAgIHJlZHJpdmVBbGxvd1BvbGljeTogcmVkcml2ZUFsbG93UG9saWN5XG4gICAgICAgID8gSlNPTi5zdHJpbmdpZnkocmVkcml2ZUFsbG93UG9saWN5KVxuICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIG5hbWVQcmVmaXgsXG4gICAgfSk7XG4gICAgdGhpcy5kZWFkTGV0dGVyUXVldWUgPSBwcm9wcy5kZWFkTGV0dGVyUXVldWU7XG4gICAgdGhpcy5fb3V0cHV0cyA9IHtcbiAgICAgIG5hbWU6IHRoaXMucmVzb3VyY2UubmFtZSxcbiAgICAgIGFybjogdGhpcy5yZXNvdXJjZS5hcm4sXG4gICAgICB1cmw6IHRoaXMucmVzb3VyY2UudXJsLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIHN0YXRlbWVudCB0byB0aGUgSUFNIHJlc291cmNlIHBvbGljeSBhc3NvY2lhdGVkIHdpdGggdGhpcyBxdWV1ZS5cbiAgICpcbiAgICogSWYgdGhpcyBxdWV1ZSB3YXMgY3JlYXRlZCBpbiB0aGlzIHN0YWNrIChgbmV3IFF1ZXVlYCksIGEgcXVldWUgcG9saWN5XG4gICAqIHdpbGwgYmUgYXV0b21hdGljYWxseSBjcmVhdGVkIHVwb24gdGhlIGZpcnN0IGNhbGwgdG8gYGFkZFRvUG9saWN5YC5cbiAgICovXG4gIHB1YmxpYyBhZGRUb1Jlc291cmNlUG9saWN5KFxuICAgIHN0YXRlbWVudDogaWFtLlBvbGljeVN0YXRlbWVudCxcbiAgKTogaWFtLkFkZFRvUmVzb3VyY2VQb2xpY3lSZXN1bHQge1xuICAgIGlmICghdGhpcy5wb2xpY3kpIHtcbiAgICAgIHRoaXMucG9saWN5ID0gbmV3IFF1ZXVlUG9saWN5KHRoaXMsIFwiUG9saWN5XCIsIHsgcXVldWU6IHRoaXMgfSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucG9saWN5KSB7XG4gICAgICB0aGlzLnBvbGljeS5kb2N1bWVudC5hZGRTdGF0ZW1lbnRzKHN0YXRlbWVudCk7XG4gICAgICByZXR1cm4geyBzdGF0ZW1lbnRBZGRlZDogdHJ1ZSwgcG9saWN5RGVwZW5kYWJsZTogdGhpcy5wb2xpY3kgfTtcbiAgICB9XG5cbiAgICByZXR1cm4geyBzdGF0ZW1lbnRBZGRlZDogZmFsc2UgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudCBwZXJtaXNzaW9ucyB0byBjb25zdW1lIG1lc3NhZ2VzIGZyb20gYSBxdWV1ZVxuICAgKlxuICAgKiBUaGlzIHdpbGwgZ3JhbnQgdGhlIGZvbGxvd2luZyBwZXJtaXNzaW9uczpcbiAgICpcbiAgICogICAtIHNxczpDaGFuZ2VNZXNzYWdlVmlzaWJpbGl0eVxuICAgKiAgIC0gc3FzOkRlbGV0ZU1lc3NhZ2VcbiAgICogICAtIHNxczpSZWNlaXZlTWVzc2FnZVxuICAgKiAgIC0gc3FzOkdldFF1ZXVlQXR0cmlidXRlc1xuICAgKiAgIC0gc3FzOkdldFF1ZXVlVXJsXG4gICAqXG4gICAqIElmIGVuY3J5cHRpb24gaXMgdXNlZCwgcGVybWlzc2lvbiB0byB1c2UgdGhlIGtleSB0byBkZWNyeXB0IHRoZSBjb250ZW50cyBvZiB0aGUgcXVldWUgd2lsbCBhbHNvIGJlIGdyYW50ZWQgdG8gdGhlIHNhbWUgcHJpbmNpcGFsLlxuICAgKlxuICAgKiBUaGlzIHdpbGwgZ3JhbnQgdGhlIGZvbGxvd2luZyBLTVMgcGVybWlzc2lvbnM6XG4gICAqXG4gICAqICAgLSBrbXM6RGVjcnlwdFxuICAgKlxuICAgKiBAcGFyYW0gZ3JhbnRlZSBQcmluY2lwYWwgdG8gZ3JhbnQgY29uc3VtZSByaWdodHMgdG9cbiAgICovXG4gIHB1YmxpYyBncmFudENvbnN1bWVNZXNzYWdlcyhncmFudGVlOiBpYW0uSUdyYW50YWJsZSkge1xuICAgIGNvbnN0IHJldCA9IHRoaXMuZ3JhbnQoXG4gICAgICBncmFudGVlLFxuICAgICAgXCJzcXM6UmVjZWl2ZU1lc3NhZ2VcIixcbiAgICAgIFwic3FzOkNoYW5nZU1lc3NhZ2VWaXNpYmlsaXR5XCIsXG4gICAgICBcInNxczpHZXRRdWV1ZVVybFwiLFxuICAgICAgXCJzcXM6RGVsZXRlTWVzc2FnZVwiLFxuICAgICAgXCJzcXM6R2V0UXVldWVBdHRyaWJ1dGVzXCIsXG4gICAgKTtcblxuICAgIC8vIC8vIFRPRE86IFJlLUFkZCBLTVMgc3VwcG9ydFxuICAgIC8vIGlmICh0aGlzLmVuY3J5cHRpb25NYXN0ZXJLZXkpIHtcbiAgICAvLyAgIHRoaXMuZW5jcnlwdGlvbk1hc3RlcktleS5ncmFudERlY3J5cHQoZ3JhbnRlZSk7XG4gICAgLy8gfVxuXG4gICAgcmV0dXJuIHJldDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudCBhY2Nlc3MgdG8gc2VuZCBtZXNzYWdlcyB0byBhIHF1ZXVlIHRvIHRoZSBnaXZlbiBpZGVudGl0eS5cbiAgICpcbiAgICogVGhpcyB3aWxsIGdyYW50IHRoZSBmb2xsb3dpbmcgcGVybWlzc2lvbnM6XG4gICAqXG4gICAqICAtIHNxczpTZW5kTWVzc2FnZVxuICAgKiAgLSBzcXM6R2V0UXVldWVBdHRyaWJ1dGVzXG4gICAqICAtIHNxczpHZXRRdWV1ZVVybFxuICAgKlxuICAgKiBJZiBlbmNyeXB0aW9uIGlzIHVzZWQsIHBlcm1pc3Npb24gdG8gdXNlIHRoZSBrZXkgdG8gZW5jcnlwdC9kZWNyeXB0IHRoZSBjb250ZW50cyBvZiB0aGUgcXVldWUgd2lsbCBhbHNvIGJlIGdyYW50ZWQgdG8gdGhlIHNhbWUgcHJpbmNpcGFsLlxuICAgKlxuICAgKiBUaGlzIHdpbGwgZ3JhbnQgdGhlIGZvbGxvd2luZyBLTVMgcGVybWlzc2lvbnM6XG4gICAqXG4gICAqICAtIGttczpEZWNyeXB0XG4gICAqICAtIGttczpFbmNyeXB0XG4gICAqICAtIGttczpSZUVuY3J5cHQqXG4gICAqICAtIGttczpHZW5lcmF0ZURhdGFLZXkqXG4gICAqXG4gICAqIEBwYXJhbSBncmFudGVlIFByaW5jaXBhbCB0byBncmFudCBzZW5kIHJpZ2h0cyB0b1xuICAgKi9cbiAgcHVibGljIGdyYW50U2VuZE1lc3NhZ2VzKGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlKSB7XG4gICAgY29uc3QgcmV0ID0gdGhpcy5ncmFudChcbiAgICAgIGdyYW50ZWUsXG4gICAgICBcInNxczpTZW5kTWVzc2FnZVwiLFxuICAgICAgXCJzcXM6R2V0UXVldWVBdHRyaWJ1dGVzXCIsXG4gICAgICBcInNxczpHZXRRdWV1ZVVybFwiLFxuICAgICk7XG5cbiAgICAvLyAvLyBUT0RPOiBSZS1BZGQgS01TIHN1cHBvcnRcbiAgICAvLyBpZiAodGhpcy5lbmNyeXB0aW9uTWFzdGVyS2V5KSB7XG4gICAgLy8gICAvLyBrbXM6RGVjcnlwdCBuZWNlc3NhcnkgdG8gZXhlY3V0ZSBncmFudHNlbmRNZXNzYWdlcyB0byBhbiBTU0UgZW5hYmxlZCBTUVMgcXVldWVcbiAgICAvLyAgIHRoaXMuZW5jcnlwdGlvbk1hc3RlcktleS5ncmFudEVuY3J5cHREZWNyeXB0KGdyYW50ZWUpO1xuICAgIC8vIH1cbiAgICByZXR1cm4gcmV0O1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50IGFuIElBTSBwcmluY2lwYWwgcGVybWlzc2lvbnMgdG8gcHVyZ2UgYWxsIG1lc3NhZ2VzIGZyb20gdGhlIHF1ZXVlLlxuICAgKlxuICAgKiBUaGlzIHdpbGwgZ3JhbnQgdGhlIGZvbGxvd2luZyBwZXJtaXNzaW9uczpcbiAgICpcbiAgICogIC0gc3FzOlB1cmdlUXVldWVcbiAgICogIC0gc3FzOkdldFF1ZXVlQXR0cmlidXRlc1xuICAgKiAgLSBzcXM6R2V0UXVldWVVcmxcbiAgICpcbiAgICogQHBhcmFtIGdyYW50ZWUgUHJpbmNpcGFsIHRvIGdyYW50IHNlbmQgcmlnaHRzIHRvXG4gICAqL1xuICBwdWJsaWMgZ3JhbnRQdXJnZShncmFudGVlOiBpYW0uSUdyYW50YWJsZSkge1xuICAgIHJldHVybiB0aGlzLmdyYW50KFxuICAgICAgZ3JhbnRlZSxcbiAgICAgIFwic3FzOlB1cmdlUXVldWVcIixcbiAgICAgIFwic3FzOkdldFF1ZXVlQXR0cmlidXRlc1wiLFxuICAgICAgXCJzcXM6R2V0UXVldWVVcmxcIixcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50IHRoZSBhY3Rpb25zIGRlZmluZWQgaW4gcXVldWVBY3Rpb25zIHRvIHRoZSBpZGVudGl0eSBQcmluY2lwYWwgZ2l2ZW5cbiAgICogb24gdGhpcyBTUVMgcXVldWUgcmVzb3VyY2UuXG4gICAqXG4gICAqIEBwYXJhbSBncmFudGVlIFByaW5jaXBhbCB0byBncmFudCByaWdodCB0b1xuICAgKiBAcGFyYW0gYWN0aW9ucyBUaGUgYWN0aW9ucyB0byBncmFudFxuICAgKi9cbiAgcHVibGljIGdyYW50KGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlLCAuLi5hY3Rpb25zOiBzdHJpbmdbXSkge1xuICAgIHJldHVybiBpYW0uR3JhbnQuYWRkVG9QcmluY2lwYWxPclJlc291cmNlKHtcbiAgICAgIGdyYW50ZWUsXG4gICAgICBhY3Rpb25zLFxuICAgICAgcmVzb3VyY2VBcm5zOiBbdGhpcy5xdWV1ZUFybl0sXG4gICAgICByZXNvdXJjZTogdGhpcyxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb29rIGF0IHRoZSBwcm9wcywgc2VlIGlmIHRoZSBGSUZPIHByb3BzIGFncmVlLCBhbmQgcmV0dXJuIHRoZSBjb3JyZWN0IHN1YnNldCBvZiBwcm9wc1xuICAgKi9cbiAgcHJpdmF0ZSBkZXRlcm1pbmVGaWZvUHJvcHMocHJvcHM6IFF1ZXVlUHJvcHMpOiBGaWZvUHJvcHMge1xuICAgIC8vIENoZWNrIGlmIGFueSBvZiB0aGUgc2lnbmFscyB0aGF0IHdlIGhhdmUgc2F5IHRoYXQgdGhpcyBpcyBhIEZJRk8gcXVldWUuXG4gICAgbGV0IGZpZm9RdWV1ZSA9IHByb3BzLmZpZm87XG4gICAgY29uc3QgcHJlZml4ID0gcHJvcHMubmFtZVByZWZpeDtcbiAgICBpZiAoXG4gICAgICB0eXBlb2YgZmlmb1F1ZXVlID09PSBcInVuZGVmaW5lZFwiICYmXG4gICAgICBwcmVmaXggJiZcbiAgICAgICFUb2tlbi5pc1VucmVzb2x2ZWQocHJlZml4KSAmJlxuICAgICAgcHJlZml4LmVuZHNXaXRoKFwiLmZpZm9cIilcbiAgICApIHtcbiAgICAgIGZpZm9RdWV1ZSA9IHRydWU7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgZmlmb1F1ZXVlID09PSBcInVuZGVmaW5lZFwiICYmIHByb3BzLmNvbnRlbnRCYXNlZERlZHVwbGljYXRpb24pIHtcbiAgICAgIGZpZm9RdWV1ZSA9IHRydWU7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgZmlmb1F1ZXVlID09PSBcInVuZGVmaW5lZFwiICYmIHByb3BzLmRlZHVwbGljYXRpb25TY29wZSkge1xuICAgICAgZmlmb1F1ZXVlID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBmaWZvUXVldWUgPT09IFwidW5kZWZpbmVkXCIgJiYgcHJvcHMuZmlmb1Rocm91Z2hwdXRMaW1pdCkge1xuICAgICAgZmlmb1F1ZXVlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBJZiB3ZSBoYXZlIGEgbmFtZSwgc2VlIHRoYXQgaXQgYWdyZWVzIHdpdGggdGhlIEZJRk8gc2V0dGluZ1xuICAgIGlmICh0eXBlb2YgcHJlZml4ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICBpZiAoZmlmb1F1ZXVlICYmICFwcmVmaXguZW5kc1dpdGgoXCIuZmlmb1wiKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJGSUZPIHF1ZXVlIG5hbWVzIG11c3QgZW5kIGluICcuZmlmbydcIik7XG4gICAgICB9XG4gICAgICBpZiAoIWZpZm9RdWV1ZSAmJiBwcmVmaXguZW5kc1dpdGgoXCIuZmlmb1wiKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJOb24tRklGTyBxdWV1ZSBuYW1lIG1heSBub3QgZW5kIGluICcuZmlmbydcIik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHByb3BzLmNvbnRlbnRCYXNlZERlZHVwbGljYXRpb24gJiYgIWZpZm9RdWV1ZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIkNvbnRlbnQtYmFzZWQgZGVkdXBsaWNhdGlvbiBjYW4gb25seSBiZSBkZWZpbmVkIGZvciBGSUZPIHF1ZXVlc1wiLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAocHJvcHMuZGVkdXBsaWNhdGlvblNjb3BlICYmICFmaWZvUXVldWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJEZWR1cGxpY2F0aW9uIHNjb3BlIGNhbiBvbmx5IGJlIGRlZmluZWQgZm9yIEZJRk8gcXVldWVzXCIsXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChwcm9wcy5maWZvVGhyb3VnaHB1dExpbWl0ICYmICFmaWZvUXVldWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJGSUZPIHRocm91Z2hwdXQgbGltaXQgY2FuIG9ubHkgYmUgZGVmaW5lZCBmb3IgRklGTyBxdWV1ZXNcIixcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbnRlbnRCYXNlZERlZHVwbGljYXRpb246IHByb3BzLmNvbnRlbnRCYXNlZERlZHVwbGljYXRpb24sXG4gICAgICBkZWR1cGxpY2F0aW9uU2NvcGU6IHByb3BzLmRlZHVwbGljYXRpb25TY29wZSxcbiAgICAgIGZpZm9UaHJvdWdocHV0TGltaXQ6IHByb3BzLmZpZm9UaHJvdWdocHV0TGltaXQsXG4gICAgICBmaWZvUXVldWUsXG4gICAgfTtcbiAgfVxufVxuXG5pbnRlcmZhY2UgRmlmb1Byb3BzIHtcbiAgcmVhZG9ubHkgZmlmb1F1ZXVlPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgY29udGVudEJhc2VkRGVkdXBsaWNhdGlvbj86IGJvb2xlYW47XG4gIHJlYWRvbmx5IGRlZHVwbGljYXRpb25TY29wZT86IERlZHVwbGljYXRpb25TY29wZTtcbiAgcmVhZG9ubHkgZmlmb1Rocm91Z2hwdXRMaW1pdD86IEZpZm9UaHJvdWdocHV0TGltaXQ7XG59XG5cbi8qKlxuICogRGVhZCBsZXR0ZXIgcXVldWUgc2V0dGluZ3NcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZWFkTGV0dGVyUXVldWUge1xuICAvKipcbiAgICogVGhlIGRlYWQtbGV0dGVyIHF1ZXVlIHRvIHdoaWNoIEFtYXpvbiBTUVMgbW92ZXMgbWVzc2FnZXMgYWZ0ZXIgdGhlIHZhbHVlIG9mIG1heFJlY2VpdmVDb3VudCBpcyBleGNlZWRlZC5cbiAgICovXG4gIHJlYWRvbmx5IHF1ZXVlOiBJUXVldWU7XG5cbiAgLyoqXG4gICAqIFRoZSBudW1iZXIgb2YgdGltZXMgYSBtZXNzYWdlIGNhbiBiZSB1bnN1Y2Nlc3NmdWxseSBkZXF1ZXVlZCBiZWZvcmUgYmVpbmcgbW92ZWQgdG8gdGhlIGRlYWQtbGV0dGVyIHF1ZXVlLlxuICAgKi9cbiAgcmVhZG9ubHkgbWF4UmVjZWl2ZUNvdW50OiBudW1iZXI7XG59XG5cbi8qKlxuICogUGVybWlzc2lvbiBzZXR0aW5ncyBmb3IgdGhlIGRlYWQgbGV0dGVyIHNvdXJjZSBxdWV1ZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlZHJpdmVBbGxvd1BvbGljeSB7XG4gIC8qKlxuICAgKiBQZXJtaXNzaW9uIHNldHRpbmdzIGZvciBzb3VyY2UgcXVldWVzIHRoYXQgY2FuIGRlc2lnbmF0ZSB0aGlzIHF1ZXVlIGFzIHRoZWlyIGRlYWQtbGV0dGVyIHF1ZXVlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGBSZWRyaXZlUGVybWlzc2lvbi5CWV9RVUVVRWAgaWYgYHNvdXJjZVF1ZXVlc2AgaXMgc3BlY2lmaWVkLGBSZWRyaXZlUGVybWlzc2lvbi5BTExPV19BTExgIG90aGVyd2lzZS5cbiAgICovXG4gIHJlYWRvbmx5IHJlZHJpdmVQZXJtaXNzaW9uPzogUmVkcml2ZVBlcm1pc3Npb247XG5cbiAgLyoqXG4gICAqIFNvdXJjZSBxdWV1ZXMgdGhhdCBjYW4gZGVzaWduYXRlIHRoaXMgcXVldWUgYXMgdGhlaXIgZGVhZC1sZXR0ZXIgcXVldWUuXG4gICAqXG4gICAqIFdoZW4gYHJlZHJpdmVQZXJtaXNzaW9uYCBpcyBzZXQgdG8gYFJlZHJpdmVQZXJtaXNzaW9uLkJZX1FVRVVFYCwgdGhpcyBwYXJhbWV0ZXIgaXMgcmVxdWlyZWQuXG4gICAqXG4gICAqIFlvdSBjYW4gc3BlY2lmeSB1cCB0byAxMCBzb3VyY2UgcXVldWVzLlxuICAgKiBUbyBhbGxvdyBtb3JlIHRoYW4gMTAgc291cmNlIHF1ZXVlcyB0byBzcGVjaWZ5IGRlYWQtbGV0dGVyIHF1ZXVlcywgc2V0IHRoZSBgcmVkcml2ZVBlcm1pc3Npb25gIHRvXG4gICAqIGBSZWRyaXZlUGVybWlzc2lvbi5BTExPV19BTExgLlxuICAgKlxuICAgKiBXaGVuIGByZWRyaXZlUGVybWlzc2lvbmAgaXMgZWl0aGVyIGBSZWRyaXZlUGVybWlzc2lvbi5BTExPV19BTExgIG9yIGBSZWRyaXZlUGVybWlzc2lvbi5ERU5ZX0FMTGAsXG4gICAqIHRoaXMgcGFyYW1ldGVyIGNhbm5vdCBiZSBzZXQuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gUmVxdWlyZWQgd2hlbiBgcmVkcml2ZVBlcm1pc3Npb25gwqBpcyBgUmVkcml2ZVBlcm1pc3Npb24uQllfUVVFVUVgLCBjYW5ub3QgYmUgZGVmaW5lZCBvdGhlcndpc2UuXG4gICAqL1xuICByZWFkb25seSBzb3VyY2VRdWV1ZXM/OiBJUXVldWVbXTtcbn1cblxuLyoqXG4gKiBUaGUgcGVybWlzc2lvbiB0eXBlIHRoYXQgZGVmaW5lcyB3aGljaCBzb3VyY2UgcXVldWVzIGNhbiBzcGVjaWZ5IHRoZSBjdXJyZW50IHF1ZXVlIGFzIHRoZSBkZWFkLWxldHRlciBxdWV1ZVxuICovXG5leHBvcnQgZW51bSBSZWRyaXZlUGVybWlzc2lvbiB7XG4gIC8qKlxuICAgKiBBbnkgc291cmNlIHF1ZXVlcyBpbiB0aGlzIEFXUyBhY2NvdW50IGluIHRoZSBzYW1lIFJlZ2lvbiBjYW4gc3BlY2lmeSB0aGlzIHF1ZXVlIGFzIHRoZSBkZWFkLWxldHRlciBxdWV1ZVxuICAgKi9cbiAgQUxMT1dfQUxMID0gXCJhbGxvd0FsbFwiLFxuICAvKipcbiAgICogTm8gc291cmNlIHF1ZXVlcyBjYW4gc3BlY2lmeSB0aGlzIHF1ZXVlIGFzIHRoZSBkZWFkLWxldHRlciBxdWV1ZVxuICAgKi9cbiAgREVOWV9BTEwgPSBcImRlbnlBbGxcIixcbiAgLyoqXG4gICAqIE9ubHkgcXVldWVzIHNwZWNpZmllZCBieSB0aGUgYHNvdXJjZVF1ZXVlQXJuc2AgcGFyYW1ldGVyIGNhbiBzcGVjaWZ5IHRoaXMgcXVldWUgYXMgdGhlIGRlYWQtbGV0dGVyIHF1ZXVlXG4gICAqL1xuICBCWV9RVUVVRSA9IFwiYnlRdWV1ZVwiLFxufVxuXG4vKipcbiAqIFdoYXQga2luZCBvZiBkZWR1cGxpY2F0aW9uIHNjb3BlIHRvIGFwcGx5XG4gKi9cbmV4cG9ydCBlbnVtIERlZHVwbGljYXRpb25TY29wZSB7XG4gIC8qKlxuICAgKiBEZWR1cGxpY2F0aW9uIG9jY3VycyBhdCB0aGUgbWVzc2FnZSBncm91cCBsZXZlbFxuICAgKi9cbiAgTUVTU0FHRV9HUk9VUCA9IFwibWVzc2FnZUdyb3VwXCIsXG4gIC8qKlxuICAgKiBEZWR1cGxpY2F0aW9uIG9jY3VycyBhdCB0aGUgbWVzc2FnZSBxdWV1ZSBsZXZlbFxuICAgKi9cbiAgUVVFVUUgPSBcInF1ZXVlXCIsXG59XG5cbi8qKlxuICogV2hldGhlciB0aGUgRklGTyBxdWV1ZSB0aHJvdWdocHV0IHF1b3RhIGFwcGxpZXMgdG8gdGhlIGVudGlyZSBxdWV1ZSBvciBwZXIgbWVzc2FnZSBncm91cFxuICovXG5leHBvcnQgZW51bSBGaWZvVGhyb3VnaHB1dExpbWl0IHtcbiAgLyoqXG4gICAqIFRocm91Z2hwdXQgcXVvdGEgYXBwbGllcyBwZXIgcXVldWVcbiAgICovXG4gIFBFUl9RVUVVRSA9IFwicGVyUXVldWVcIixcbiAgLyoqXG4gICAqIFRocm91Z2hwdXQgcXVvdGEgYXBwbGllcyBwZXIgbWVzc2FnZSBncm91cCBpZFxuICAgKi9cbiAgUEVSX01FU1NBR0VfR1JPVVBfSUQgPSBcInBlck1lc3NhZ2VHcm91cElkXCIsXG59XG4iXX0=
|
|
283
|
+
/**
|
|
284
|
+
* The permission type that defines which source queues can specify the current queue as the dead-letter queue
|
|
285
|
+
*/
|
|
286
|
+
var RedrivePermission;
|
|
287
|
+
(function (RedrivePermission) {
|
|
288
|
+
/**
|
|
289
|
+
* Any source queues in this AWS account in the same Region can specify this queue as the dead-letter queue
|
|
290
|
+
*/
|
|
291
|
+
RedrivePermission["ALLOW_ALL"] = "allowAll";
|
|
292
|
+
/**
|
|
293
|
+
* No source queues can specify this queue as the dead-letter queue
|
|
294
|
+
*/
|
|
295
|
+
RedrivePermission["DENY_ALL"] = "denyAll";
|
|
296
|
+
/**
|
|
297
|
+
* Only queues specified by the `sourceQueueArns` parameter can specify this queue as the dead-letter queue
|
|
298
|
+
*/
|
|
299
|
+
RedrivePermission["BY_QUEUE"] = "byQueue";
|
|
300
|
+
})(RedrivePermission || (exports.RedrivePermission = RedrivePermission = {}));
|
|
301
|
+
// ref: https://github.com/aws/aws-cdk/blob/v2.232.2/packages/aws-cdk-lib/aws-sqs/lib/validate-queue-props.ts
|
|
302
|
+
function validateRange(value, minValue, maxValue) {
|
|
303
|
+
return (value !== undefined &&
|
|
304
|
+
!cdktf_1.Token.isUnresolved(value) &&
|
|
305
|
+
(value < minValue || value > maxValue));
|
|
306
|
+
}
|
|
307
|
+
const queueValidationRules = [
|
|
308
|
+
{
|
|
309
|
+
condition: (props) => validateRange(props.deliveryDelay?.toSeconds(), 0, 900),
|
|
310
|
+
message: (props) => `delivery delay must be between 0 and 900 seconds, but ${props.deliveryDelay?.toSeconds()} was provided`,
|
|
311
|
+
},
|
|
312
|
+
{
|
|
313
|
+
condition: (props) => validateRange(props.maxMessageSizeBytes, 1024, 1048576),
|
|
314
|
+
message: (props) => `maximum message size must be between 1,024 and 1,048,576 bytes, but ${props.maxMessageSizeBytes} was provided`,
|
|
315
|
+
},
|
|
316
|
+
{
|
|
317
|
+
condition: (props) => validateRange(props.retentionPeriod?.toSeconds(), 60, 1209600),
|
|
318
|
+
message: (props) => `message retention period must be between 60 and 1,209,600 seconds, but ${props.retentionPeriod?.toSeconds()} was provided`,
|
|
319
|
+
},
|
|
320
|
+
{
|
|
321
|
+
condition: (props) => validateRange(props.receiveMessageWaitTime?.toSeconds(), 0, 20),
|
|
322
|
+
message: (props) => `receive wait time must be between 0 and 20 seconds, but ${props.receiveMessageWaitTime?.toSeconds()} was provided`,
|
|
323
|
+
},
|
|
324
|
+
{
|
|
325
|
+
condition: (props) => validateRange(props.visibilityTimeout?.toSeconds(), 0, 43200),
|
|
326
|
+
message: (props) => `visibility timeout must be between 0 and 43,200 seconds, but ${props.visibilityTimeout?.toSeconds()} was provided`,
|
|
327
|
+
},
|
|
328
|
+
{
|
|
329
|
+
condition: (props) => validateRange(props.deadLetterQueue?.maxReceiveCount, 1, Number.MAX_SAFE_INTEGER),
|
|
330
|
+
message: (props) => `dead letter target maximum receive count must be 1 or more, but ${props.deadLetterQueue?.maxReceiveCount} was provided`,
|
|
331
|
+
},
|
|
332
|
+
];
|
|
333
|
+
const redriveValidationRules = [
|
|
334
|
+
{
|
|
335
|
+
condition: ({ redrivePermission, sourceQueues }) => redrivePermission === RedrivePermission.BY_QUEUE &&
|
|
336
|
+
(!sourceQueues || sourceQueues.length === 0),
|
|
337
|
+
message: () => "At least one source queue must be specified when RedrivePermission is set to 'byQueue'",
|
|
338
|
+
},
|
|
339
|
+
{
|
|
340
|
+
condition: ({ redrivePermission, sourceQueues }) => !!(redrivePermission === RedrivePermission.BY_QUEUE &&
|
|
341
|
+
sourceQueues &&
|
|
342
|
+
sourceQueues.length > 10),
|
|
343
|
+
message: () => "Up to 10 sourceQueues can be specified. Set RedrivePermission to 'allowAll' to specify more",
|
|
344
|
+
},
|
|
345
|
+
{
|
|
346
|
+
condition: ({ redrivePermission, sourceQueues }) => !!((redrivePermission === RedrivePermission.ALLOW_ALL ||
|
|
347
|
+
redrivePermission === RedrivePermission.DENY_ALL) &&
|
|
348
|
+
sourceQueues),
|
|
349
|
+
message: () => "sourceQueues cannot be configured when RedrivePermission is set to 'allowAll' or 'denyAll'",
|
|
350
|
+
},
|
|
351
|
+
];
|
|
352
|
+
function validateQueueProps(scope, props) {
|
|
353
|
+
(0, helpers_internal_1.validateAllProps)(scope, Queue.name, props, queueValidationRules);
|
|
354
|
+
}
|
|
355
|
+
function validateRedriveAllowPolicy(scope, policy) {
|
|
356
|
+
(0, helpers_internal_1.validateAllProps)(scope, Queue.name, policy, redriveValidationRules);
|
|
357
|
+
}
|
|
358
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVldWUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXdzL25vdGlmeS9xdWV1ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBaXVCQSxnREFFQztBQUVELGdFQUtDOztBQTF1QkQseUZBQXlGO0FBRXpGLHNEQUErQztBQUMvQyxpQ0FBOEI7QUFHOUIseUNBQStDO0FBQy9DLDZEQUEwRTtBQUMxRSxnQ0FBbUM7QUFDbkMsNkNBQWtFO0FBRWxFLDRDQUF3QztBQUN4QyxxQ0FBcUM7QUFDckMsOEJBQThCO0FBbU05Qjs7R0FFRztBQUNILE1BQWEsS0FBTSxTQUFRLHNCQUFTO0lBT2xDOzs7Ozs7T0FNRztJQUNJLE1BQU0sQ0FBQyxZQUFZLENBQ3hCLEtBQWdCLEVBQ2hCLEVBQVUsRUFDVixRQUFnQjtRQUVoQixNQUFNLEtBQUssR0FBRyxvQkFBUSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM3QyxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxlQUFTLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUN2RSxNQUFNLFNBQVMsR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFDO1FBQ3JDLE1BQU0sUUFBUSxHQUFHLGVBQWUsU0FBUyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMsU0FBUyxJQUFJLFNBQVMsQ0FBQyxPQUFPLElBQUksU0FBUyxFQUFFLENBQUM7UUFFeEcsTUFBTSxNQUFPLFNBQVEsc0JBQVM7WUFBOUI7O2dCQUNrQixhQUFRLEdBQUcsUUFBUSxDQUFDLENBQUMsNENBQTRDO2dCQUNqRSxhQUFRLEdBQUcsUUFBUSxDQUFDO2dCQUNwQixjQUFTLEdBQUcsU0FBUyxDQUFDO2dCQUN0Qix3QkFBbUIsR0FBRyxTQUFTLENBQUM7Z0JBQ2hDLFNBQUksR0FBWSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQ3JDLG1CQUFjLEdBQUcsU0FBUyxDQUFDO2dCQUV4QixxQkFB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SSxZQUFZLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQztRQUM5QyxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQ1osd0ZBQXdGO0tBQzNGO0lBQ0Q7UUFDRSxTQUFTLEVBQUUsQ0FBQyxFQUFFLGlCQUFpQixFQUFFLFlBQVksRUFBRSxFQUFFLEVBQUUsQ0FDakQsQ0FBQyxDQUFDLENBQ0EsaUJBQWlCLEtBQUssaUJBQWlCLENBQUMsUUFBUTtZQUNoRCxZQUFZO1lBQ1osWUFBWSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQ3pCO1FBQ0gsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUNaLDZGQUE2RjtLQUNoRztJQUNEO1FBQ0UsU0FBUyxFQUFFLENBQUMsRUFBRSxpQkFBaUIsRUFBRSxZQUFZLEVBQUUsRUFBRSxFQUFFLENBQ2pELENBQUMsQ0FBQyxDQUNBLENBQUMsaUJBQWlCLEtBQUssaUJBQWlCLENBQUMsU0FBUztZQUNoRCxpQkFBaUIsS0FBSyxpQkFBaUIsQ0FBQyxRQUFRLENBQUM7WUFDbkQsWUFBWSxDQUNiO1FBQ0gsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUNaLDRGQUE0RjtLQUMvRjtDQUNGLENBQUM7QUFFRixTQUFnQixrQkFBa0IsQ0FBQyxLQUFnQixFQUFFLEtBQWlCO0lBQ3BFLElBQUEsbUNBQWdCLEVBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLG9CQUFvQixDQUFDLENBQUM7QUFDbkUsQ0FBQztBQUVELFNBQWdCLDBCQUEwQixDQUN4QyxLQUFnQixFQUNoQixNQUEwQjtJQUUxQixJQUFBLG1DQUFnQixFQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxzQkFBc0IsQ0FBQyxDQUFDO0FBQ3RFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvYmxvYi92Mi4yMzIuMi9wYWNrYWdlcy9hd3MtY2RrLWxpYi9hd3Mtc3FzL2xpYi9xdWV1ZS50c1xuXG5pbXBvcnQgeyBzcXNRdWV1ZSB9IGZyb20gXCJAY2RrdGYvcHJvdmlkZXItYXdzXCI7XG5pbXBvcnQgeyBUb2tlbiB9IGZyb20gXCJjZGt0ZlwiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IER1cmF0aW9uIH0gZnJvbSBcIi4uLy4uL2R1cmF0aW9uXCI7XG5pbXBvcnQgeyBWYWxpZGF0aW9uRXJyb3IgfSBmcm9tIFwiLi4vLi4vZXJyb3JzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZUFsbFByb3BzLCBWYWxpZGF0aW9uUnVsZSB9IGZyb20gXCIuLi8uLi9oZWxwZXJzLWludGVybmFsXCI7XG5pbXBvcnQgeyBBcm5Gb3JtYXQgfSBmcm9tIFwiLi4vYXJuXCI7XG5pbXBvcnQgeyBJUXVldWUsIFF1ZXVlQmFzZSwgUXVldWVFbmNyeXB0aW9uIH0gZnJvbSBcIi4vcXVldWUtYmFzZVwiO1xuaW1wb3J0IHsgQXdzQ29uc3RydWN0UHJvcHMgfSBmcm9tIFwiLi4vYXdzLWNvbnN0cnVjdFwiO1xuaW1wb3J0IHsgQXdzU3RhY2sgfSBmcm9tIFwiLi4vYXdzLXN0YWNrXCI7XG5pbXBvcnQgKiBhcyBrbXMgZnJvbSBcIi4uL2VuY3J5cHRpb25cIjtcbmltcG9ydCAqIGFzIGlhbSBmcm9tIFwiLi4vaWFtXCI7XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgY3JlYXRpbmcgYSBuZXcgUXVldWVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBRdWV1ZVByb3BzIGV4dGVuZHMgQXdzQ29uc3RydWN0UHJvcHMge1xuICAvKipcbiAgICogUXVldWUgTmFtZSBwcmVmaXhcbiAgICpcbiAgICogUXVldWUgbmFtZXMgbXVzdCBiZSBtYWRlIHVwIG9mIG9ubHkgdXBwZXJjYXNlIGFuZCBsb3dlcmNhc2UgQVNDSUkgbGV0dGVycyxcbiAgICogbnVtYmVycywgdW5kZXJzY29yZXMsIGFuZCBoeXBoZW5zLCBhbmQgbXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDgwIGNoYXJhY3RlcnNcbiAgICogbG9uZy5cbiAgICpcbiAgICogVGVycmFmb3JtIFByZWZpeGVzIG11c3QgcmVzZXJ2ZSAyNiBjaGFyYWN0ZXJzIGZvciB0aGUgdGVycmFmb3JtIGdlbmVyYXRlZCBzdWZmaXguXG4gICAqXG4gICAqIEZvciBhIEZJRk8gKGZpcnN0LWluLWZpcnN0LW91dCkgcXVldWUsIHRoZSBuYW1lIG11c3QgZW5kIHdpdGggdGhlIC5maWZvXG4gICAqIEBkZWZhdWx0IC0gR3JpZFVVSUQgKyBTdGFjayBVbmlxdWUgTmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgcXVldWVOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbnVtYmVyIG9mIHNlY29uZHMgdGhhdCBBbWF6b24gU1FTIHJldGFpbnMgYSBtZXNzYWdlLlxuICAgKlxuICAgKiBZb3UgY2FuIHNwZWNpZnkgYW4gaW50ZWdlciB2YWx1ZSBmcm9tIDYwIHNlY29uZHMgKDEgbWludXRlKSB0byAxMjA5NjAwXG4gICAqIHNlY29uZHMgKDE0IGRheXMpLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAzNDU2MDAgc2Vjb25kcyAoNCBkYXlzKS5cbiAgICpcbiAgICogQGRlZmF1bHQgRHVyYXRpb24uZGF5cyg0KVxuICAgKi9cbiAgcmVhZG9ubHkgcmV0ZW50aW9uUGVyaW9kPzogRHVyYXRpb247XG5cbiAgLyoqXG4gICAqIFRoZSB0aW1lIGluIHNlY29uZHMgdGhhdCB0aGUgZGVsaXZlcnkgb2YgYWxsIG1lc3NhZ2VzIGluIHRoZSBxdWV1ZSBpcyBkZWxheWVkLlxuICAgKlxuICAgKiBZb3UgY2FuIHNwZWNpZnkgYW4gaW50ZWdlciB2YWx1ZSBvZiAwIHRvIDkwMCAoMTUgbWludXRlcykuIFRoZSBkZWZhdWx0XG4gICAqIHZhbHVlIGlzIDAuXG4gICAqXG4gICAqIEBkZWZhdWx0IDBcbiAgICovXG4gIHJlYWRvbmx5IGRlbGl2ZXJ5RGVsYXk/OiBEdXJhdGlvbjtcblxuICAvKipcbiAgICogVGhlIGxpbWl0IG9mIGhvdyBtYW55IGJ5dGVzIHRoYXQgYSBtZXNzYWdlIGNhbiBjb250YWluIGJlZm9yZSBBbWF6b24gU1FTIHJlamVjdHMgaXQuXG4gICAqXG4gICAqIFlvdSBjYW4gc3BlY2lmeSBhbiBpbnRlZ2VyIHZhbHVlIGZyb20gMTAyNCBieXRlcyAoMSBLaUIpIHRvIDEwNDg1NzYgYnl0ZXNcbiAgICogKDEgTWlCKS4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgMTA0ODU3NiAoMSBNaUIpLlxuICAgKlxuICAgKiBAZGVmYXVsdCAxTWlCXG4gICAqL1xuICByZWFkb25seSBtYXhNZXNzYWdlU2l6ZUJ5dGVzPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBEZWZhdWx0IHdhaXQgdGltZSBmb3IgUmVjZWl2ZU1lc3NhZ2UgY2FsbHMuXG4gICAqXG4gICAqIERvZXMgbm90IHdhaXQgaWYgc2V0IHRvIDAsIG90aGVyd2lzZSB3YWl0cyB0aGlzIGFtb3VudCBvZiBzZWNvbmRzXG4gICAqIGJ5IGRlZmF1bHQgZm9yIG1lc3NhZ2VzIHRvIGFycml2ZS5cbiAgICpcbiAgICogRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBBbWF6b24gU1FTIExvbmcgUG9sbC5cbiAgICpcbiAgICogIEBkZWZhdWx0IDBcbiAgICovXG4gIHJlYWRvbmx5IHJlY2VpdmVNZXNzYWdlV2FpdFRpbWU/OiBEdXJhdGlvbjtcblxuICAvKipcbiAgICogVGltZW91dCBvZiBwcm9jZXNzaW5nIGEgc2luZ2xlIG1lc3NhZ2UuXG4gICAqXG4gICAqIEFmdGVyIGRlcXVldWluZywgdGhlIHByb2Nlc3NvciBoYXMgdGhpcyBtdWNoIHRpbWUgdG8gaGFuZGxlIHRoZSBtZXNzYWdlXG4gICAqIGFuZCBkZWxldGUgaXQgZnJvbSB0aGUgcXVldWUgYmVmb3JlIGl0IGJlY29tZXMgdmlzaWJsZSBhZ2FpbiBmb3IgZGVxdWV1ZWluZ1xuICAgKiBieSBhbm90aGVyIHByb2Nlc3Nvci5cbiAgICpcbiAgICogVmFsdWVzIG11c3QgYmUgZnJvbSAwIHRvIDQzMjAwIHNlY29uZHMgKDEyIGhvdXJzKS4gSWYgeW91IGRvbid0IHNwZWNpZnlcbiAgICogYSB2YWx1ZSwgQVdTIENsb3VkRm9ybWF0aW9uIHVzZXMgdGhlIGRlZmF1bHQgdmFsdWUgb2YgMzAgc2Vjb25kcy5cbiAgICpcbiAgICogQGRlZmF1bHQgRHVyYXRpb24uc2Vjb25kcygzMClcbiAgICovXG4gIHJlYWRvbmx5IHZpc2liaWxpdHlUaW1lb3V0PzogRHVyYXRpb247XG5cbiAgLyoqXG4gICAqIFNlbmQgbWVzc2FnZXMgdG8gdGhpcyBxdWV1ZSBpZiB0aGV5IHdlcmUgdW5zdWNjZXNzZnVsbHkgZGVxdWV1ZWQgYSBudW1iZXIgb2YgdGltZXMuXG4gICAqXG4gICAqIFNlZSBbQVdTIERvY3NdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NTaW1wbGVRdWV1ZVNlcnZpY2UvbGF0ZXN0L1NRU0RldmVsb3Blckd1aWRlL3Nxcy1kZWFkLWxldHRlci1xdWV1ZXMuaHRtbClcbiAgICpcbiAgICogQGRlZmF1bHQgbm8gZGVhZC1sZXR0ZXIgcXVldWVcbiAgICpcbiAgICoge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9oYXNoaWNvcnAvYXdzLzUuNjguMC9kb2NzL3Jlc291cmNlcy9zcXNfcXVldWUjcmVkcml2ZV9wb2xpY3kgU3FzUXVldWUjcmVkcml2ZV9wb2xpY3l9XG4gICAqL1xuICByZWFkb25seSBkZWFkTGV0dGVyUXVldWU/OiBEZWFkTGV0dGVyUXVldWU7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGNvbnRlbnRzIG9mIHRoZSBxdWV1ZSBhcmUgZW5jcnlwdGVkLCBhbmQgYnkgd2hhdCB0eXBlIG9mIGtleS5cbiAgICpcbiAgICogQmUgYXdhcmUgdGhhdCBlbmNyeXB0aW9uIGlzIG5vdCBhdmFpbGFibGUgaW4gYWxsIHJlZ2lvbnMsIHBsZWFzZSBzZWUgdGhlIGRvY3NcbiAgICogZm9yIGN1cnJlbnQgYXZhaWxhYmlsaXR5IGRldGFpbHMuXG4gICAqXG4gICAqIEBkZWZhdWx0IFNRU19NQU5BR0VEIChTU0UtU1FTKSBmb3IgbmV3bHkgY3JlYXRlZCBxdWV1ZXNcbiAgICovXG4gIHJlYWRvbmx5IGVuY3J5cHRpb24/OiBRdWV1ZUVuY3J5cHRpb247XG5cbiAgLyoqXG4gICAqIEV4dGVybmFsIEtNUyBrZXkgdG8gdXNlIGZvciBxdWV1ZSBlbmNyeXB0aW9uLlxuICAgKlxuICAgKiBJbmRpdmlkdWFsIG1lc3NhZ2VzIHdpbGwgYmUgZW5jcnlwdGVkIHVzaW5nIGRhdGEga2V5cy4gVGhlIGRhdGEga2V5cyBpblxuICAgKiB0dXJuIHdpbGwgYmUgZW5jcnlwdGVkIHVzaW5nIHRoaXMga2V5LCBhbmQgcmV1c2VkIGZvciBhIG1heGltdW0gb2ZcbiAgICogYGRhdGFLZXlSZXVzZVNlY3NgIHNlY29uZHMuXG4gICAqXG4gICAqIElmIHRoZSAnZW5jcnlwdGlvbk1hc3RlcktleScgcHJvcGVydHkgaXMgc2V0LCAnZW5jcnlwdGlvbicgdHlwZSB3aWxsIGJlXG4gICAqIGltcGxpY2l0bHkgc2V0IHRvIFwiS01TXCIuXG4gICAqXG4gICAqIEBkZWZhdWx0IElmIGVuY3J5cHRpb24gaXMgc2V0IHRvIEtNUyBhbmQgbm90IHNwZWNpZmllZCwgYSBrZXkgd2lsbCBiZSBjcmVhdGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgZW5jcnlwdGlvbk1hc3RlcktleT86IGttcy5JS2V5O1xuXG4gIC8qKlxuICAgKiBUaGUgbGVuZ3RoIG9mIHRpbWUgdGhhdCBBbWF6b24gU1FTIHJldXNlcyBhIGRhdGEga2V5IGJlZm9yZSBjYWxsaW5nIEtNUyBhZ2Fpbi5cbiAgICpcbiAgICogVGhlIHZhbHVlIG11c3QgYmUgYW4gaW50ZWdlciBiZXR3ZWVuIDYwICgxIG1pbnV0ZSkgYW5kIDg2LDQwMCAoMjRcbiAgICogaG91cnMpLiBUaGUgZGVmYXVsdCBpcyAzMDAgKDUgbWludXRlcykuXG4gICAqXG4gICAqIEBkZWZhdWx0IER1cmF0aW9uLm1pbnV0ZXMoNSlcbiAgICovXG4gIHJlYWRvbmx5IGRhdGFLZXlSZXVzZT86IER1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoaXMgYSBmaXJzdC1pbi1maXJzdC1vdXQgKEZJRk8pIHF1ZXVlLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZSwgdW5sZXNzIHF1ZXVlTmFtZSBlbmRzIGluICcuZmlmbycgb3IgJ2NvbnRlbnRCYXNlZERlZHVwbGljYXRpb24nIGlzIHRydWUuXG4gICAqL1xuICByZWFkb25seSBmaWZvPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogU3BlY2lmaWVzIHdoZXRoZXIgdG8gZW5hYmxlIGNvbnRlbnQtYmFzZWQgZGVkdXBsaWNhdGlvbi5cbiAgICpcbiAgICogRHVyaW5nIHRoZSBkZWR1cGxpY2F0aW9uIGludGVydmFsICg1IG1pbnV0ZXMpLCBBbWF6b24gU1FTIHRyZWF0c1xuICAgKiBtZXNzYWdlcyB0aGF0IGFyZSBzZW50IHdpdGggaWRlbnRpY2FsIGNvbnRlbnQgKGV4Y2x1ZGluZyBhdHRyaWJ1dGVzKSBhc1xuICAgKiBkdXBsaWNhdGVzIGFuZCBkZWxpdmVycyBvbmx5IG9uZSBjb3B5IG9mIHRoZSBtZXNzYWdlLlxuICAgKlxuICAgKiBJZiB5b3UgZG9uJ3QgZW5hYmxlIGNvbnRlbnQtYmFzZWQgZGVkdXBsaWNhdGlvbiBhbmQgeW91IHdhbnQgdG8gZGVkdXBsaWNhdGVcbiAgICogbWVzc2FnZXMsIHByb3ZpZGUgYW4gZXhwbGljaXQgZGVkdXBsaWNhdGlvbiBJRCBpbiB5b3VyIFNlbmRNZXNzYWdlKCkgY2FsbC5cbiAgICpcbiAgICogKE9ubHkgYXBwbGllcyB0byBGSUZPIHF1ZXVlcy4pXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBjb250ZW50QmFzZWREZWR1cGxpY2F0aW9uPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogRm9yIGhpZ2ggdGhyb3VnaHB1dCBmb3IgRklGTyBxdWV1ZXMsIHNwZWNpZmllcyB3aGV0aGVyIG1lc3NhZ2UgZGVkdXBsaWNhdGlvblxuICAgKiBvY2N1cnMgYXQgdGhlIG1lc3NhZ2UgZ3JvdXAgb3IgcXVldWUgbGV2ZWwuXG4gICAqXG4gICAqIChPbmx5IGFwcGxpZXMgdG8gRklGTyBxdWV1ZXMuKVxuICAgKlxuICAgKiBAZGVmYXVsdCBEZWR1cGxpY2F0aW9uU2NvcGUuUVVFVUVcbiAgICovXG4gIHJlYWRvbmx5IGRlZHVwbGljYXRpb25TY29wZT86IERlZHVwbGljYXRpb25TY29wZTtcblxuICAvKipcbiAgICogRm9yIGhpZ2ggdGhyb3VnaHB1dCBmb3IgRklGTyBxdWV1ZXMsIHNwZWNpZmllcyB3aGV0aGVyIHRoZSBGSUZPIHF1ZXVlXG4gICAqIHRocm91Z2hwdXQgcXVvdGEgYXBwbGllcyB0byB0aGUgZW50aXJlIHF1ZXVlIG9yIHBlciBtZXNzYWdlIGdyb3VwLlxuICAgKlxuICAgKiAoT25seSBhcHBsaWVzIHRvIEZJRk8gcXVldWVzLilcbiAgICpcbiAgICogQGRlZmF1bHQgRmlmb1Rocm91Z2hwdXRMaW1pdC5QRVJfUVVFVUVcbiAgICovXG4gIHJlYWRvbmx5IGZpZm9UaHJvdWdocHV0TGltaXQ/OiBGaWZvVGhyb3VnaHB1dExpbWl0O1xuXG4gIC8qKlxuICAgKiBQb2xpY3kgdG8gYXBwbHkgd2hlbiB0aGUgcXVldWUgaXMgcmVtb3ZlZCBmcm9tIHRoZSBzdGFja1xuICAgKlxuICAgKiBFdmVuIHRob3VnaCBxdWV1ZXMgYXJlIHRlY2huaWNhbGx5IHN0YXRlZnVsLCB0aGVpciBjb250ZW50cyBhcmUgdHJhbnNpZW50IGFuZCBpdFxuICAgKiBpcyBjb21tb24gdG8gYWRkIGFuZCByZW1vdmUgUXVldWVzIHdoaWxlIHJlYXJjaGl0ZWN0aW5nIHlvdXIgYXBwbGljYXRpb24uIFRoZVxuICAgKiBkZWZhdWx0IGlzIHRoZXJlZm9yZSBgREVTVFJPWWAuIENoYW5nZSBpdCB0byBgUkVUQUlOYCBpZiB0aGUgbWVzc2FnZXMgYXJlIHNvXG4gICAqIHZhbHVhYmxlIHRoYXQgYWNjaWRlbnRhbGx5IGxvc2luZyB0aGVtIHdvdWxkIGJlIHVuYWNjZXB0YWJsZS5cbiAgICpcbiAgICogQGRlZmF1bHQgUmVtb3ZhbFBvbGljeS5ERVNUUk9ZXG4gICAqL1xuICAvLyByZWFkb25seSByZW1vdmFsUG9saWN5PzogUmVtb3ZhbFBvbGljeTtcblxuICAvKipcbiAgICogRW5mb3JjZSBlbmNyeXB0aW9uIG9mIGRhdGEgaW4gdHJhbnNpdC5cbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTU2ltcGxlUXVldWVTZXJ2aWNlL2xhdGVzdC9TUVNEZXZlbG9wZXJHdWlkZS9zcXMtc2VjdXJpdHktYmVzdC1wcmFjdGljZXMuaHRtbCNlbmZvcmNlLWVuY3J5cHRpb24tZGF0YS1pbi10cmFuc2l0XG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBlbmZvcmNlU1NMPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIHN0cmluZyB0aGF0IGluY2x1ZGVzIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgcGVybWlzc2lvbnMgZm9yIHRoZSBkZWFkLWxldHRlciBxdWV1ZVxuICAgKiByZWRyaXZlIHBlcm1pc3Npb24gYW5kIHdoaWNoIHNvdXJjZSBxdWV1ZXMgY2FuIHNwZWNpZnkgZGVhZC1sZXR0ZXIgcXVldWVzLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIEFsbCBzb3VyY2UgcXVldWVzIGNhbiBkZXNpZ25hdGUgdGhpcyBxdWV1ZSBhcyB0aGVpciBkZWFkLWxldHRlciBxdWV1ZS5cbiAgICpcbiAgICoge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9oYXNoaWNvcnAvYXdzLzUuNjguMC9kb2NzL3Jlc291cmNlcy9zcXNfcXVldWUjcmVkcml2ZV9hbGxvd19wb2xpY3kgU3FzUXVldWUjcmVkcml2ZV9hbGxvd19wb2xpY3l9XG4gICAqL1xuICByZWFkb25seSByZWRyaXZlQWxsb3dQb2xpY3k/OiBSZWRyaXZlQWxsb3dQb2xpY3k7XG59XG5cbi8qKlxuICogQSBuZXcgQW1hem9uIFNRUyBxdWV1ZVxuICovXG5leHBvcnQgY2xhc3MgUXVldWUgZXh0ZW5kcyBRdWV1ZUJhc2Uge1xuICAvKipcbiAgICogVW5pcXVlbHkgaWRlbnRpZmllcyB0aGlzIGNsYXNzLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBQUk9QRVJUWV9JTkpFQ1RJT05fSUQ6IHN0cmluZyA9XG4gICAgXCJ0ZXJyYWNvbnN0cnVjdHMuYXdzLnNxcy5RdWV1ZVwiO1xuXG4gIC8qKlxuICAgKiBJbXBvcnQgYW4gZXhpc3RpbmcgU1FTIHF1ZXVlIHByb3ZpZGVkIGFuIEFSTlxuICAgKlxuICAgKiBAcGFyYW0gc2NvcGUgVGhlIHBhcmVudCBjcmVhdGluZyBjb25zdHJ1Y3RcbiAgICogQHBhcmFtIGlkIFRoZSBjb25zdHJ1Y3QncyBuYW1lXG4gICAqIEBwYXJhbSBxdWV1ZUFybiBxdWV1ZSBBUk4gKGkuZS4gYXJuOmF3czpzcXM6dXMtZWFzdC0yOjQ0NDQ1NTU1NjY2NjpxdWV1ZTEpXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21RdWV1ZUFybihcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIGlkOiBzdHJpbmcsXG4gICAgcXVldWVBcm46IHN0cmluZyxcbiAgKTogSVF1ZXVlIHtcbiAgICBjb25zdCBzdGFjayA9IEF3c1N0YWNrLm9mQXdzQ29uc3RydWN0KHNjb3BlKTtcbiAgICBjb25zdCBwYXJzZWRBcm4gPSBzdGFjay5zcGxpdEFybihxdWV1ZUFybiwgQXJuRm9ybWF0Lk5PX1JFU09VUkNFX05BTUUpO1xuICAgIGNvbnN0IHF1ZXVlTmFtZSA9IHBhcnNlZEFybi5yZXNvdXJjZTtcbiAgICBjb25zdCBxdWV1ZVVybCA9IGBodHRwczovL3Nxcy4ke3BhcnNlZEFybi5yZWdpb259LiR7c3RhY2sudXJsU3VmZml4fS8ke3BhcnNlZEFybi5hY2NvdW50fS8ke3F1ZXVlTmFtZX1gO1xuXG4gICAgY2xhc3MgSW1wb3J0IGV4dGVuZHMgUXVldWVCYXNlIGltcGxlbWVudHMgSVF1ZXVlIHtcbiAgICAgIHB1YmxpYyByZWFkb25seSBxdWV1ZUFybiA9IHF1ZXVlQXJuOyAvLyBhcm46YXdzOnNxczp1cy1lYXN0LTE6MTIzNDU2Nzg5MDEyOnF1ZXVlMVxuICAgICAgcHVibGljIHJlYWRvbmx5IHF1ZXVlVXJsID0gcXVldWVVcmw7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgcXVldWVOYW1lID0gcXVldWVOYW1lO1xuICAgICAgcHVibGljIHJlYWRvbmx5IGVuY3J5cHRpb25NYXN0ZXJLZXkgPSB1bmRlZmluZWQ7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgZmlmbzogYm9vbGVhbiA9IHRoaXMuZGV0ZXJtaW5lRmlmbygpO1xuICAgICAgcHVibGljIHJlYWRvbmx5IGVuY3J5cHRpb25UeXBlID0gdW5kZWZpbmVkO1xuXG4gICAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgYXV0b0NyZWF0ZVBvbGljeSA9IGZhbHNlO1xuXG4gICAgICAvKipcbiAgICAgICAqIERldGVybWluZSBmaWZvIGZsYWcgYmFzZWQgb24gcXVldWVOYW1lIGFuZCBmaWZvIGF0dHJpYnV0ZVxuICAgICAgICovXG4gICAgICBwcml2YXRlIGRldGVybWluZUZpZm8oKTogYm9vbGVhbiB7XG4gICAgICAgIGlmIChUb2tlbi5pc1VucmVzb2x2ZWQodGhpcy5xdWV1ZUFybikpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHF1ZXVlTmFtZS5lbmRzV2l0aChcIi5maWZvXCIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBJbXBvcnQoc2NvcGUsIGlkLCB7XG4gICAgICBlbnZpcm9ubWVudEZyb21Bcm46IHF1ZXVlQXJuLFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHJlYWRvbmx5IHJlc291cmNlOiBzcXNRdWV1ZS5TcXNRdWV1ZTtcblxuICAvKipcbiAgICogVGhlIEFSTiBvZiB0aGlzIHF1ZXVlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcXVldWVBcm46IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhpcyBxdWV1ZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHF1ZXVlTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgVVJMIG9mIHRoaXMgcXVldWVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBxdWV1ZVVybDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJZiB0aGlzIHF1ZXVlIGlzIGVuY3J5cHRlZCwgdGhpcyBpcyB0aGUgS01TIGtleS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBlbmNyeXB0aW9uTWFzdGVyS2V5Pzoga21zLklLZXk7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhpcyBxdWV1ZSBpcyBhbiBBbWF6b24gU1FTIEZJRk8gcXVldWUuIElmIGZhbHNlLCB0aGlzIGlzIGEgc3RhbmRhcmQgcXVldWUuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZmlmbzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgY29udGVudHMgb2YgdGhlIHF1ZXVlIGFyZSBlbmNyeXB0ZWQsIGFuZCBieSB3aGF0IHR5cGUgb2Yga2V5LlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGVuY3J5cHRpb25UeXBlPzogUXVldWVFbmNyeXB0aW9uO1xuXG4gIC8qKlxuICAgKiBJZiB0aGlzIHF1ZXVlIGlzIGNvbmZpZ3VyZWQgd2l0aCBhIGRlYWQtbGV0dGVyIHF1ZXVlLCB0aGlzIGlzIHRoZSBkZWFkLWxldHRlciBxdWV1ZSBzZXR0aW5ncy5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBkZWFkTGV0dGVyUXVldWU/OiBEZWFkTGV0dGVyUXVldWU7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGF1dG9DcmVhdGVQb2xpY3kgPSB0cnVlO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgcGh5c2ljYWxOYW1lOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFF1ZXVlUHJvcHMgPSB7fSkge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgcHJvcHMpO1xuXG4gICAgdmFsaWRhdGVRdWV1ZVByb3BzKHRoaXMsIHByb3BzKTtcblxuICAgIGlmIChwcm9wcy5yZWRyaXZlQWxsb3dQb2xpY3kpIHtcbiAgICAgIHZhbGlkYXRlUmVkcml2ZUFsbG93UG9saWN5KHRoaXMsIHByb3BzLnJlZHJpdmVBbGxvd1BvbGljeSk7XG4gICAgfVxuXG4gICAgbGV0IG5hbWVQcmVmaXggPSBwcm9wcy5xdWV1ZU5hbWU7XG4gICAgaWYgKG5hbWVQcmVmaXggJiYgIVRva2VuLmlzVW5yZXNvbHZlZChuYW1lUHJlZml4KSkge1xuICAgICAgaWYgKG5hbWVQcmVmaXguZW5kc1dpdGgoXCIuZmlmb1wiKSkge1xuICAgICAgICBuYW1lUHJlZml4ID0gbmFtZVByZWZpeC5zbGljZSgwLCAtNSk7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIFRPRE86IFNob3VsZCB3ZSBhbHdheXMgaGF2ZSB0aGUgZ3JpZFVVSUQgYXMgdGhlIHByZWZpeD9cbiAgICBuYW1lUHJlZml4ID0gdGhpcy5zdGFjay51bmlxdWVSZXNvdXJjZU5hbWVQcmVmaXgodGhpcywge1xuICAgICAgcHJlZml4OiBuYW1lUHJlZml4ID8/IHRoaXMuZ3JpZFVVSUQgKyBcIi1cIixcbiAgICAgIGFsbG93ZWRTcGVjaWFsQ2hhcmFjdGVyczogXCJfLVwiLFxuICAgICAgbWF4TGVuZ3RoOiA4MCxcbiAgICB9KTtcblxuICAgIHRoaXMucGh5c2ljYWxOYW1lID0gbmFtZVByZWZpeDtcbiAgICBjb25zdCByZWRyaXZlUG9saWN5ID0gcHJvcHMuZGVhZExldHRlclF1ZXVlXG4gICAgICA/IHtcbiAgICAgICAgICBkZWFkTGV0dGVyVGFyZ2V0QXJuOiBwcm9wcy5kZWFkTGV0dGVyUXVldWUucXVldWUucXVldWVBcm4sXG4gICAgICAgICAgbWF4UmVjZWl2ZUNvdW50OiBwcm9wcy5kZWFkTGV0dGVyUXVldWUubWF4UmVjZWl2ZUNvdW50LFxuICAgICAgICB9XG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIC8vIFdoZW4gYHJlZHJpdmVBbGxvd1BvbGljeWAgaXMgcHJvdmlkZWQsIGByZWRyaXZlUGVybWlzc2lvbmAgZGVmYXVsdHMgdG8gYWxsb3cgYWxsIHF1ZXVlcyAoYEFMTE9XX0FMTGApO1xuICAgIGNvbnN0IHJlZHJpdmVBbGxvd1BvbGljeSA9IHByb3BzLnJlZHJpdmVBbGxvd1BvbGljeVxuICAgICAgPyB7XG4gICAgICAgICAgcmVkcml2ZVBlcm1pc3Npb246XG4gICAgICAgICAgICBwcm9wcy5yZWRyaXZlQWxsb3dQb2xpY3kucmVkcml2ZVBlcm1pc3Npb24gPz9cbiAgICAgICAgICAgIC8vIFdoZW4gYHNvdXJjZVF1ZXVlc2AgaXMgcHJvdmlkZWQgaW4gYHJlZHJpdmVBbGxvd1BvbGljeWAsIGByZWRyaXZlUGVybWlzc2lvbmAgZGVmYXVsdHMgdG9cbiAgICAgICAgICAgIC8vIGFsbG93IHNwZWNpZmllZCBxdWV1ZXMgKGBCWV9RVUVVRWApOyBvdGhlcndpc2UsIGl0IGRlZmF1bHRzIHRvIGFsbG93IGFsbCBxdWV1ZXMgKGBBTExPV19BTExgKS5cbiAgICAgICAgICAgIChwcm9wcy5yZWRyaXZlQWxsb3dQb2xpY3kuc291cmNlUXVldWVzXG4gICAgICAgICAgICAgID8gUmVkcml2ZVBlcm1pc3Npb24uQllfUVVFVUVcbiAgICAgICAgICAgICAgOiBSZWRyaXZlUGVybWlzc2lvbi5BTExPV19BTEwpLFxuICAgICAgICAgIHNvdXJjZVF1ZXVlQXJuczogcHJvcHMucmVkcml2ZUFsbG93UG9saWN5LnNvdXJjZVF1ZXVlcz8ubWFwKFxuICAgICAgICAgICAgKHEpID0+IHEucXVldWVBcm4sXG4gICAgICAgICAgKSxcbiAgICAgICAgfVxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCB7IGVuY3J5cHRpb25NYXN0ZXJLZXksIGVuY3J5cHRpb25Qcm9wcywgZW5jcnlwdGlvblR5cGUgfSA9XG4gICAgICBfZGV0ZXJtaW5lRW5jcnlwdGlvblByb3BzLmNhbGwodGhpcyk7XG5cbiAgICBjb25zdCBmaWZvUHJvcHMgPSB0aGlzLmRldGVybWluZUZpZm9Qcm9wcyhwcm9wcyk7XG4gICAgdGhpcy5maWZvID0gZmlmb1Byb3BzLmZpZm9RdWV1ZSB8fCBmYWxzZTtcblxuICAgIHRoaXMucmVzb3VyY2UgPSBuZXcgc3FzUXVldWUuU3FzUXVldWUodGhpcywgXCJSZXNvdXJjZVwiLCB7XG4gICAgICBuYW1lUHJlZml4OiB0aGlzLnBoeXNpY2FsTmFtZSxcbiAgICAgIC4uLmZpZm9Qcm9wcyxcbiAgICAgIC4uLmVuY3J5cHRpb25Qcm9wcyxcbiAgICAgIHJlZHJpdmVQb2xpY3k6IHJlZHJpdmVQb2xpY3kgPyBKU09OLnN0cmluZ2lmeShyZWRyaXZlUG9saWN5KSA6IHVuZGVmaW5lZCxcbiAgICAgIHJlZHJpdmVBbGxvd1BvbGljeTogcmVkcml2ZUFsbG93UG9saWN5XG4gICAgICAgID8gSlNPTi5zdHJpbmdpZnkocmVkcml2ZUFsbG93UG9saWN5KVxuICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIGRlbGF5U2Vjb25kczogcHJvcHMuZGVsaXZlcnlEZWxheT8udG9TZWNvbmRzKCksXG4gICAgICBtYXhNZXNzYWdlU2l6ZTogcHJvcHMubWF4TWVzc2FnZVNpemVCeXRlcyxcbiAgICAgIG1lc3NhZ2VSZXRlbnRpb25TZWNvbmRzOiBwcm9wcy5yZXRlbnRpb25QZXJpb2Q/LnRvU2Vjb25kcygpLFxuICAgICAgcmVjZWl2ZVdhaXRUaW1lU2Vjb25kczogcHJvcHMucmVjZWl2ZU1lc3NhZ2VXYWl0VGltZT8udG9TZWNvbmRzKCksXG4gICAgICB2aXNpYmlsaXR5VGltZW91dFNlY29uZHM6IHByb3BzLnZpc2liaWxpdHlUaW1lb3V0Py50b1NlY29uZHMoKSxcbiAgICB9KTtcbiAgICAvLyBxdWV1ZS5hcHBseVJlbW92YWxQb2xpY3kocHJvcHMucmVtb3ZhbFBvbGljeSA/PyBSZW1vdmFsUG9saWN5LkRFU1RST1kpO1xuXG4gICAgdGhpcy5xdWV1ZUFybiA9IHRoaXMucmVzb3VyY2UuYXJuO1xuICAgIHRoaXMucXVldWVOYW1lID0gdGhpcy5yZXNvdXJjZS5uYW1lO1xuICAgIHRoaXMuZW5jcnlwdGlvbk1hc3RlcktleSA9IGVuY3J5cHRpb25NYXN0ZXJLZXk7XG4gICAgdGhpcy5xdWV1ZVVybCA9IHRoaXMucmVzb3VyY2UudXJsO1xuICAgIHRoaXMuZGVhZExldHRlclF1ZXVlID0gcHJvcHMuZGVhZExldHRlclF1ZXVlO1xuICAgIHRoaXMuZW5jcnlwdGlvblR5cGUgPSBlbmNyeXB0aW9uVHlwZTtcblxuICAgIGZ1bmN0aW9uIF9kZXRlcm1pbmVFbmNyeXB0aW9uUHJvcHModGhpczogUXVldWUpOiB7XG4gICAgICBlbmNyeXB0aW9uUHJvcHM6IEVuY3J5cHRpb25Qcm9wcztcbiAgICAgIGVuY3J5cHRpb25NYXN0ZXJLZXk/OiBrbXMuSUtleTtcbiAgICAgIGVuY3J5cHRpb25UeXBlOiBRdWV1ZUVuY3J5cHRpb24gfCB1bmRlZmluZWQ7XG4gICAgfSB7XG4gICAgICBsZXQgZW5jcnlwdGlvbiA9IHByb3BzLmVuY3J5cHRpb247XG5cbiAgICAgIGlmIChcbiAgICAgICAgZW5jcnlwdGlvbiA9PT0gUXVldWVFbmNyeXB0aW9uLlNRU19NQU5BR0VEICYmXG4gICAgICAgIHByb3BzLmVuY3J5cHRpb25NYXN0ZXJLZXlcbiAgICAgICkge1xuICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICAgIFwiJ2VuY3J5cHRpb25NYXN0ZXJLZXknIGlzIG5vdCBzdXBwb3J0ZWQgaWYgZW5jcnlwdGlvbiB0eXBlICdTUVNfTUFOQUdFRCcgaXMgdXNlZFwiLFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGlmIChlbmNyeXB0aW9uICE9PSBRdWV1ZUVuY3J5cHRpb24uS01TICYmIHByb3BzLmVuY3J5cHRpb25NYXN0ZXJLZXkpIHtcbiAgICAgICAgZW5jcnlwdGlvbiA9IFF1ZXVlRW5jcnlwdGlvbi5LTVM7IC8vIEtNUyBpcyBpbXBsaWVkIGJ5IHNwZWNpZnlpbmcgYW4gZW5jcnlwdGlvbiBrZXlcbiAgICAgIH1cblxuICAgICAgaWYgKCFlbmNyeXB0aW9uKSB7XG4gICAgICAgIHJldHVybiB7IGVuY3J5cHRpb25Qcm9wczoge30sIGVuY3J5cHRpb25UeXBlOiBlbmNyeXB0aW9uIH07XG4gICAgICB9XG5cbiAgICAgIGlmIChlbmNyeXB0aW9uID09PSBRdWV1ZUVuY3J5cHRpb24uVU5FTkNSWVBURUQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBlbmNyeXB0aW9uVHlwZTogZW5jcnlwdGlvbixcbiAgICAgICAgICBlbmNyeXB0aW9uUHJvcHM6IHtcbiAgICAgICAgICAgIHNxc01hbmFnZWRTc2VFbmFibGVkOiBmYWxzZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBpZiAoZW5jcnlwdGlvbiA9PT0gUXVldWVFbmNyeXB0aW9uLktNU19NQU5BR0VEKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZW5jcnlwdGlvblR5cGU6IGVuY3J5cHRpb24sXG4gICAgICAgICAgZW5jcnlwdGlvblByb3BzOiB7XG4gICAgICAgICAgICBrbXNNYXN0ZXJLZXlJZDogXCJhbGlhcy9hd3Mvc3FzXCIsXG4gICAgICAgICAgICBrbXNEYXRhS2V5UmV1c2VQZXJpb2RTZWNvbmRzOiBwcm9wcy5kYXRhS2V5UmV1c2U/LnRvU2Vjb25kcygpLFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGlmIChlbmNyeXB0aW9uID09PSBRdWV1ZUVuY3J5cHRpb24uS01TKSB7XG4gICAgICAgIGNvbnN0IG1hc3RlcktleSA9XG4gICAgICAgICAgcHJvcHMuZW5jcnlwdGlvbk1hc3RlcktleSB8fFxuICAgICAgICAgIG5ldyBrbXMuS2V5KHRoaXMsIFwiS2V5XCIsIHtcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBgQ3JlYXRlZCBieSAke3RoaXMubm9kZS5wYXRofWAsXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBlbmNyeXB0aW9uVHlwZTogZW5jcnlwdGlvbixcbiAgICAgICAgICBlbmNyeXB0aW9uTWFzdGVyS2V5OiBtYXN0ZXJLZXksXG4gICAgICAgICAgZW5jcnlwdGlvblByb3BzOiB7XG4gICAgICAgICAgICBrbXNNYXN0ZXJLZXlJZDogbWFzdGVyS2V5LmtleUFybixcbiAgICAgICAgICAgIGttc0RhdGFLZXlSZXVzZVBlcmlvZFNlY29uZHM6IHByb3BzLmRhdGFLZXlSZXVzZT8udG9TZWNvbmRzKCksXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgaWYgKGVuY3J5cHRpb24gPT09IFF1ZXVlRW5jcnlwdGlvbi5TUVNfTUFOQUdFRCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGVuY3J5cHRpb25UeXBlOiBlbmNyeXB0aW9uLFxuICAgICAgICAgIGVuY3J5cHRpb25Qcm9wczoge1xuICAgICAgICAgICAgc3FzTWFuYWdlZFNzZUVuYWJsZWQ6IHRydWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgYFVuZXhwZWN0ZWQgJ2VuY3J5cHRpb25UeXBlJzogJHtlbmNyeXB0aW9ufWAsXG4gICAgICAgIHRoaXMsXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIEVuZm9yY2UgZW5jcnlwdGlvbiBvZiBkYXRhIGluIHRyYW5zaXRcbiAgICBpZiAocHJvcHMuZW5mb3JjZVNTTCkge1xuICAgICAgdGhpcy5lbmZvcmNlU1NMU3RhdGVtZW50KCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIExvb2sgYXQgdGhlIHByb3BzLCBzZWUgaWYgdGhlIEZJRk8gcHJvcHMgYWdyZWUsIGFuZCByZXR1cm4gdGhlIGNvcnJlY3Qgc3Vic2V0IG9mIHByb3BzXG4gICAqL1xuICBwcml2YXRlIGRldGVybWluZUZpZm9Qcm9wcyhwcm9wczogUXVldWVQcm9wcyk6IEZpZm9Qcm9wcyB7XG4gICAgLy8gQ2hlY2sgaWYgYW55IG9mIHRoZSBzaWduYWxzIHRoYXQgd2UgaGF2ZSBzYXkgdGhhdCB0aGlzIGlzIGEgRklGTyBxdWV1ZS5cbiAgICBsZXQgZmlmb1F1ZXVlID0gcHJvcHMuZmlmbztcbiAgICBjb25zdCBxdWV1ZU5hbWUgPSBwcm9wcy5xdWV1ZU5hbWU7XG4gICAgaWYgKFxuICAgICAgdHlwZW9mIGZpZm9RdWV1ZSA9PT0gXCJ1bmRlZmluZWRcIiAmJlxuICAgICAgcXVldWVOYW1lICYmXG4gICAgICAhVG9rZW4uaXNVbnJlc29sdmVkKHF1ZXVlTmFtZSkgJiZcbiAgICAgIHF1ZXVlTmFtZS5lbmRzV2l0aChcIi5maWZvXCIpXG4gICAgKSB7XG4gICAgICBmaWZvUXVldWUgPSB0cnVlO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGZpZm9RdWV1ZSA9PT0gXCJ1bmRlZmluZWRcIiAmJiBwcm9wcy5jb250ZW50QmFzZWREZWR1cGxpY2F0aW9uKSB7XG4gICAgICBmaWZvUXVldWUgPSB0cnVlO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGZpZm9RdWV1ZSA9PT0gXCJ1bmRlZmluZWRcIiAmJiBwcm9wcy5kZWR1cGxpY2F0aW9uU2NvcGUpIHtcbiAgICAgIGZpZm9RdWV1ZSA9IHRydWU7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgZmlmb1F1ZXVlID09PSBcInVuZGVmaW5lZFwiICYmIHByb3BzLmZpZm9UaHJvdWdocHV0TGltaXQpIHtcbiAgICAgIGZpZm9RdWV1ZSA9IHRydWU7XG4gICAgfVxuXG4gICAgLy8gSWYgd2UgaGF2ZSBhIG5hbWUsIHNlZSB0aGF0IGl0IGFncmVlcyB3aXRoIHRoZSBGSUZPIHNldHRpbmdcbiAgICBpZiAodHlwZW9mIHF1ZXVlTmFtZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgaWYgKGZpZm9RdWV1ZSAmJiAhcXVldWVOYW1lLmVuZHNXaXRoKFwiLmZpZm9cIikpIHtcbiAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihcIkZJRk8gcXVldWUgbmFtZXMgbXVzdCBlbmQgaW4gJy5maWZvJ1wiLCB0aGlzKTtcbiAgICAgIH1cbiAgICAgIGlmICghZmlmb1F1ZXVlICYmIHF1ZXVlTmFtZS5lbmRzV2l0aChcIi5maWZvXCIpKSB7XG4gICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgICAgXCJOb24tRklGTyBxdWV1ZSBuYW1lIG1heSBub3QgZW5kIGluICcuZmlmbydcIixcbiAgICAgICAgICB0aGlzLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChwcm9wcy5jb250ZW50QmFzZWREZWR1cGxpY2F0aW9uICYmICFmaWZvUXVldWUpIHtcbiAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgIFwiQ29udGVudC1iYXNlZCBkZWR1cGxpY2F0aW9uIGNhbiBvbmx5IGJlIGRlZmluZWQgZm9yIEZJRk8gcXVldWVzXCIsXG4gICAgICAgIHRoaXMsXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChwcm9wcy5kZWR1cGxpY2F0aW9uU2NvcGUgJiYgIWZpZm9RdWV1ZSkge1xuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgXCJEZWR1cGxpY2F0aW9uIHNjb3BlIGNhbiBvbmx5IGJlIGRlZmluZWQgZm9yIEZJRk8gcXVldWVzXCIsXG4gICAgICAgIHRoaXMsXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChwcm9wcy5maWZvVGhyb3VnaHB1dExpbWl0ICYmICFmaWZvUXVldWUpIHtcbiAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgIFwiRklGTyB0aHJvdWdocHV0IGxpbWl0IGNhbiBvbmx5IGJlIGRlZmluZWQgZm9yIEZJRk8gcXVldWVzXCIsXG4gICAgICAgIHRoaXMsXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBjb250ZW50QmFzZWREZWR1cGxpY2F0aW9uOiBwcm9wcy5jb250ZW50QmFzZWREZWR1cGxpY2F0aW9uLFxuICAgICAgZGVkdXBsaWNhdGlvblNjb3BlOiBwcm9wcy5kZWR1cGxpY2F0aW9uU2NvcGUsXG4gICAgICBmaWZvVGhyb3VnaHB1dExpbWl0OiBwcm9wcy5maWZvVGhyb3VnaHB1dExpbWl0LFxuICAgICAgZmlmb1F1ZXVlLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhbiBpYW0gc3RhdGVtZW50IHRvIGVuZm9yY2UgZW5jcnlwdGlvbiBvZiBkYXRhIGluIHRyYW5zaXQuXG4gICAqL1xuICBwcml2YXRlIGVuZm9yY2VTU0xTdGF0ZW1lbnQoKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50ID0gbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgYWN0aW9uczogW1wic3FzOipcIl0sXG4gICAgICBjb25kaXRpb246IFtcbiAgICAgICAge1xuICAgICAgICAgIHRlc3Q6IFwiQm9vbFwiLFxuICAgICAgICAgIHZhcmlhYmxlOiBcImF3czpTZWN1cmVUcmFuc3BvcnRcIixcbiAgICAgICAgICB2YWx1ZXM6IFtcImZhbHNlXCJdLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5ERU5ZLFxuICAgICAgcmVzb3VyY2VzOiBbdGhpcy5xdWV1ZUFybl0sXG4gICAgICBwcmluY2lwYWxzOiBbbmV3IGlhbS5BbnlQcmluY2lwYWwoKV0sXG4gICAgfSk7XG4gICAgdGhpcy5hZGRUb1Jlc291cmNlUG9saWN5KHN0YXRlbWVudCk7XG4gIH1cbn1cblxuaW50ZXJmYWNlIEZpZm9Qcm9wcyB7XG4gIHJlYWRvbmx5IGZpZm9RdWV1ZT86IGJvb2xlYW47XG4gIHJlYWRvbmx5IGNvbnRlbnRCYXNlZERlZHVwbGljYXRpb24/OiBib29sZWFuO1xuICByZWFkb25seSBkZWR1cGxpY2F0aW9uU2NvcGU/OiBEZWR1cGxpY2F0aW9uU2NvcGU7XG4gIHJlYWRvbmx5IGZpZm9UaHJvdWdocHV0TGltaXQ/OiBGaWZvVGhyb3VnaHB1dExpbWl0O1xufVxuXG5pbnRlcmZhY2UgRW5jcnlwdGlvblByb3BzIHtcbiAgcmVhZG9ubHkga21zTWFzdGVyS2V5SWQ/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGttc0RhdGFLZXlSZXVzZVBlcmlvZFNlY29uZHM/OiBudW1iZXI7XG4gIHJlYWRvbmx5IHNxc01hbmFnZWRTc2VFbmFibGVkPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBEZWFkIGxldHRlciBxdWV1ZSBzZXR0aW5nc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIERlYWRMZXR0ZXJRdWV1ZSB7XG4gIC8qKlxuICAgKiBUaGUgZGVhZC1sZXR0ZXIgcXVldWUgdG8gd2hpY2ggQW1hem9uIFNRUyBtb3ZlcyBtZXNzYWdlcyBhZnRlciB0aGUgdmFsdWUgb2YgbWF4UmVjZWl2ZUNvdW50IGlzIGV4Y2VlZGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgcXVldWU6IElRdWV1ZTtcblxuICAvKipcbiAgICogVGhlIG51bWJlciBvZiB0aW1lcyBhIG1lc3NhZ2UgY2FuIGJlIHVuc3VjY2Vzc2Z1bGx5IGRlcXVldWVkIGJlZm9yZSBiZWluZyBtb3ZlZCB0byB0aGUgZGVhZC1sZXR0ZXIgcXVldWUuXG4gICAqL1xuICByZWFkb25seSBtYXhSZWNlaXZlQ291bnQ6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBQZXJtaXNzaW9uIHNldHRpbmdzIGZvciB0aGUgZGVhZCBsZXR0ZXIgc291cmNlIHF1ZXVlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVkcml2ZUFsbG93UG9saWN5IHtcbiAgLyoqXG4gICAqIFBlcm1pc3Npb24gc2V0dGluZ3MgZm9yIHNvdXJjZSBxdWV1ZXMgdGhhdCBjYW4gZGVzaWduYXRlIHRoaXMgcXVldWUgYXMgdGhlaXIgZGVhZC1sZXR0ZXIgcXVldWUuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gYFJlZHJpdmVQZXJtaXNzaW9uLkJZX1FVRVVFYCBpZiBgc291cmNlUXVldWVzYCBpcyBzcGVjaWZpZWQsYFJlZHJpdmVQZXJtaXNzaW9uLkFMTE9XX0FMTGAgb3RoZXJ3aXNlLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVkcml2ZVBlcm1pc3Npb24/OiBSZWRyaXZlUGVybWlzc2lvbjtcblxuICAvKipcbiAgICogU291cmNlIHF1ZXVlcyB0aGF0IGNhbiBkZXNpZ25hdGUgdGhpcyBxdWV1ZSBhcyB0aGVpciBkZWFkLWxldHRlciBxdWV1ZS5cbiAgICpcbiAgICogV2hlbiBgcmVkcml2ZVBlcm1pc3Npb25gIGlzIHNldCB0byBgUmVkcml2ZVBlcm1pc3Npb24uQllfUVVFVUVgLCB0aGlzIHBhcmFtZXRlciBpcyByZXF1aXJlZC5cbiAgICpcbiAgICogWW91IGNhbiBzcGVjaWZ5IHVwIHRvIDEwIHNvdXJjZSBxdWV1ZXMuXG4gICAqIFRvIGFsbG93IG1vcmUgdGhhbiAxMCBzb3VyY2UgcXVldWVzIHRvIHNwZWNpZnkgZGVhZC1sZXR0ZXIgcXVldWVzLCBzZXQgdGhlIGByZWRyaXZlUGVybWlzc2lvbmAgdG9cbiAgICogYFJlZHJpdmVQZXJtaXNzaW9uLkFMTE9XX0FMTGAuXG4gICAqXG4gICAqIFdoZW4gYHJlZHJpdmVQZXJtaXNzaW9uYCBpcyBlaXRoZXIgYFJlZHJpdmVQZXJtaXNzaW9uLkFMTE9XX0FMTGAgb3IgYFJlZHJpdmVQZXJtaXNzaW9uLkRFTllfQUxMYCxcbiAgICogdGhpcyBwYXJhbWV0ZXIgY2Fubm90IGJlIHNldC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBSZXF1aXJlZCB3aGVuIGByZWRyaXZlUGVybWlzc2lvbmDCoGlzIGBSZWRyaXZlUGVybWlzc2lvbi5CWV9RVUVVRWAsIGNhbm5vdCBiZSBkZWZpbmVkIG90aGVyd2lzZS5cbiAgICovXG4gIHJlYWRvbmx5IHNvdXJjZVF1ZXVlcz86IElRdWV1ZVtdO1xufVxuXG4vKipcbiAqIFdoYXQga2luZCBvZiBkZWR1cGxpY2F0aW9uIHNjb3BlIHRvIGFwcGx5XG4gKi9cbmV4cG9ydCBlbnVtIERlZHVwbGljYXRpb25TY29wZSB7XG4gIC8qKlxuICAgKiBEZWR1cGxpY2F0aW9uIG9jY3VycyBhdCB0aGUgbWVzc2FnZSBncm91cCBsZXZlbFxuICAgKi9cbiAgTUVTU0FHRV9HUk9VUCA9IFwibWVzc2FnZUdyb3VwXCIsXG4gIC8qKlxuICAgKiBEZWR1cGxpY2F0aW9uIG9jY3VycyBhdCB0aGUgbWVzc2FnZSBxdWV1ZSBsZXZlbFxuICAgKi9cbiAgUVVFVUUgPSBcInF1ZXVlXCIsXG59XG5cbi8qKlxuICogV2hldGhlciB0aGUgRklGTyBxdWV1ZSB0aHJvdWdocHV0IHF1b3RhIGFwcGxpZXMgdG8gdGhlIGVudGlyZSBxdWV1ZSBvciBwZXIgbWVzc2FnZSBncm91cFxuICovXG5leHBvcnQgZW51bSBGaWZvVGhyb3VnaHB1dExpbWl0IHtcbiAgLyoqXG4gICAqIFRocm91Z2hwdXQgcXVvdGEgYXBwbGllcyBwZXIgcXVldWVcbiAgICovXG4gIFBFUl9RVUVVRSA9IFwicGVyUXVldWVcIixcbiAgLyoqXG4gICAqIFRocm91Z2hwdXQgcXVvdGEgYXBwbGllcyBwZXIgbWVzc2FnZSBncm91cCBpZFxuICAgKi9cbiAgUEVSX01FU1NBR0VfR1JPVVBfSUQgPSBcInBlck1lc3NhZ2VHcm91cElkXCIsXG59XG5cbi8qKlxuICogVGhlIHBlcm1pc3Npb24gdHlwZSB0aGF0IGRlZmluZXMgd2hpY2ggc291cmNlIHF1ZXVlcyBjYW4gc3BlY2lmeSB0aGUgY3VycmVudCBxdWV1ZSBhcyB0aGUgZGVhZC1sZXR0ZXIgcXVldWVcbiAqL1xuZXhwb3J0IGVudW0gUmVkcml2ZVBlcm1pc3Npb24ge1xuICAvKipcbiAgICogQW55IHNvdXJjZSBxdWV1ZXMgaW4gdGhpcyBBV1MgYWNjb3VudCBpbiB0aGUgc2FtZSBSZWdpb24gY2FuIHNwZWNpZnkgdGhpcyBxdWV1ZSBhcyB0aGUgZGVhZC1sZXR0ZXIgcXVldWVcbiAgICovXG4gIEFMTE9XX0FMTCA9IFwiYWxsb3dBbGxcIixcbiAgLyoqXG4gICAqIE5vIHNvdXJjZSBxdWV1ZXMgY2FuIHNwZWNpZnkgdGhpcyBxdWV1ZSBhcyB0aGUgZGVhZC1sZXR0ZXIgcXVldWVcbiAgICovXG4gIERFTllfQUxMID0gXCJkZW55QWxsXCIsXG4gIC8qKlxuICAgKiBPbmx5IHF1ZXVlcyBzcGVjaWZpZWQgYnkgdGhlIGBzb3VyY2VRdWV1ZUFybnNgIHBhcmFtZXRlciBjYW4gc3BlY2lmeSB0aGlzIHF1ZXVlIGFzIHRoZSBkZWFkLWxldHRlciBxdWV1ZVxuICAgKi9cbiAgQllfUVVFVUUgPSBcImJ5UXVldWVcIixcbn1cblxuLy8gcmVmOiBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvYmxvYi92Mi4yMzIuMi9wYWNrYWdlcy9hd3MtY2RrLWxpYi9hd3Mtc3FzL2xpYi92YWxpZGF0ZS1xdWV1ZS1wcm9wcy50c1xuXG5mdW5jdGlvbiB2YWxpZGF0ZVJhbmdlKFxuICB2YWx1ZTogbnVtYmVyIHwgdW5kZWZpbmVkLFxuICBtaW5WYWx1ZTogbnVtYmVyLFxuICBtYXhWYWx1ZTogbnVtYmVyLFxuKTogYm9vbGVhbiB7XG4gIHJldHVybiAoXG4gICAgdmFsdWUgIT09IHVuZGVmaW5lZCAmJlxuICAgICFUb2tlbi5pc1VucmVzb2x2ZWQodmFsdWUpICYmXG4gICAgKHZhbHVlIDwgbWluVmFsdWUgfHwgdmFsdWUgPiBtYXhWYWx1ZSlcbiAgKTtcbn1cblxuY29uc3QgcXVldWVWYWxpZGF0aW9uUnVsZXM6IFZhbGlkYXRpb25SdWxlPFF1ZXVlUHJvcHM+W10gPSBbXG4gIHtcbiAgICBjb25kaXRpb246IChwcm9wcykgPT5cbiAgICAgIHZhbGlkYXRlUmFuZ2UocHJvcHMuZGVsaXZlcnlEZWxheT8udG9TZWNvbmRzKCksIDAsIDkwMCksXG4gICAgbWVzc2FnZTogKHByb3BzKSA9PlxuICAgICAgYGRlbGl2ZXJ5IGRlbGF5IG11c3QgYmUgYmV0d2VlbiAwIGFuZCA5MDAgc2Vjb25kcywgYnV0ICR7cHJvcHMuZGVsaXZlcnlEZWxheT8udG9TZWNvbmRzKCl9IHdhcyBwcm92aWRlZGAsXG4gIH0sXG4gIHtcbiAgICBjb25kaXRpb246IChwcm9wcykgPT5cbiAgICAgIHZhbGlkYXRlUmFuZ2UocHJvcHMubWF4TWVzc2FnZVNpemVCeXRlcywgMV8wMjQsIDFfMDQ4XzU3NiksXG4gICAgbWVzc2FnZTogKHByb3BzKSA9PlxuICAgICAgYG1heGltdW0gbWVzc2FnZSBzaXplIG11c3QgYmUgYmV0d2VlbiAxLDAyNCBhbmQgMSwwNDgsNTc2IGJ5dGVzLCBidXQgJHtwcm9wcy5tYXhNZXNzYWdlU2l6ZUJ5dGVzfSB3YXMgcHJvdmlkZWRgLFxuICB9LFxuICB7XG4gICAgY29uZGl0aW9uOiAocHJvcHMpID0+XG4gICAgICB2YWxpZGF0ZVJhbmdlKHByb3BzLnJldGVudGlvblBlcmlvZD8udG9TZWNvbmRzKCksIDYwLCAxXzIwOV82MDApLFxuICAgIG1lc3NhZ2U6IChwcm9wcykgPT5cbiAgICAgIGBtZXNzYWdlIHJldGVudGlvbiBwZXJpb2QgbXVzdCBiZSBiZXR3ZWVuIDYwIGFuZCAxLDIwOSw2MDAgc2Vjb25kcywgYnV0ICR7cHJvcHMucmV0ZW50aW9uUGVyaW9kPy50b1NlY29uZHMoKX0gd2FzIHByb3ZpZGVkYCxcbiAgfSxcbiAge1xuICAgIGNvbmRpdGlvbjogKHByb3BzKSA9PlxuICAgICAgdmFsaWRhdGVSYW5nZShwcm9wcy5yZWNlaXZlTWVzc2FnZVdhaXRUaW1lPy50b1NlY29uZHMoKSwgMCwgMjApLFxuICAgIG1lc3NhZ2U6IChwcm9wcykgPT5cbiAgICAgIGByZWNlaXZlIHdhaXQgdGltZSBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMjAgc2Vjb25kcywgYnV0ICR7cHJvcHMucmVjZWl2ZU1lc3NhZ2VXYWl0VGltZT8udG9TZWNvbmRzKCl9IHdhcyBwcm92aWRlZGAsXG4gIH0sXG4gIHtcbiAgICBjb25kaXRpb246IChwcm9wcykgPT5cbiAgICAgIHZhbGlkYXRlUmFuZ2UocHJvcHMudmlzaWJpbGl0eVRpbWVvdXQ/LnRvU2Vjb25kcygpLCAwLCA0M18yMDApLFxuICAgIG1lc3NhZ2U6IChwcm9wcykgPT5cbiAgICAgIGB2aXNpYmlsaXR5IHRpbWVvdXQgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDQzLDIwMCBzZWNvbmRzLCBidXQgJHtwcm9wcy52aXNpYmlsaXR5VGltZW91dD8udG9TZWNvbmRzKCl9IHdhcyBwcm92aWRlZGAsXG4gIH0sXG4gIHtcbiAgICBjb25kaXRpb246IChwcm9wcykgPT5cbiAgICAgIHZhbGlkYXRlUmFuZ2UoXG4gICAgICAgIHByb3BzLmRlYWRMZXR0ZXJRdWV1ZT8ubWF4UmVjZWl2ZUNvdW50LFxuICAgICAgICAxLFxuICAgICAgICBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUixcbiAgICAgICksXG4gICAgbWVzc2FnZTogKHByb3BzKSA9PlxuICAgICAgYGRlYWQgbGV0dGVyIHRhcmdldCBtYXhpbXVtIHJlY2VpdmUgY291bnQgbXVzdCBiZSAxIG9yIG1vcmUsIGJ1dCAke3Byb3BzLmRlYWRMZXR0ZXJRdWV1ZT8ubWF4UmVjZWl2ZUNvdW50fSB3YXMgcHJvdmlkZWRgLFxuICB9LFxuXTtcblxuY29uc3QgcmVkcml2ZVZhbGlkYXRpb25SdWxlczogVmFsaWRhdGlvblJ1bGU8UmVkcml2ZUFsbG93UG9saWN5PltdID0gW1xuICB7XG4gICAgY29uZGl0aW9uOiAoeyByZWRyaXZlUGVybWlzc2lvbiwgc291cmNlUXVldWVzIH0pID0+XG4gICAgICByZWRyaXZlUGVybWlzc2lvbiA9PT0gUmVkcml2ZVBlcm1pc3Npb24uQllfUVVFVUUgJiZcbiAgICAgICghc291cmNlUXVldWVzIHx8IHNvdXJjZVF1ZXVlcy5sZW5ndGggPT09IDApLFxuICAgIG1lc3NhZ2U6ICgpID0+XG4gICAgICBcIkF0IGxlYXN0IG9uZSBzb3VyY2UgcXVldWUgbXVzdCBiZSBzcGVjaWZpZWQgd2hlbiBSZWRyaXZlUGVybWlzc2lvbiBpcyBzZXQgdG8gJ2J5UXVldWUnXCIsXG4gIH0sXG4gIHtcbiAgICBjb25kaXRpb246ICh7IHJlZHJpdmVQZXJtaXNzaW9uLCBzb3VyY2VRdWV1ZXMgfSkgPT5cbiAgICAgICEhKFxuICAgICAgICByZWRyaXZlUGVybWlzc2lvbiA9PT0gUmVkcml2ZVBlcm1pc3Npb24uQllfUVVFVUUgJiZcbiAgICAgICAgc291cmNlUXVldWVzICYmXG4gICAgICAgIHNvdXJjZVF1ZXVlcy5sZW5ndGggPiAxMFxuICAgICAgKSxcbiAgICBtZXNzYWdlOiAoKSA9PlxuICAgICAgXCJVcCB0byAxMCBzb3VyY2VRdWV1ZXMgY2FuIGJlIHNwZWNpZmllZC4gU2V0IFJlZHJpdmVQZXJtaXNzaW9uIHRvICdhbGxvd0FsbCcgdG8gc3BlY2lmeSBtb3JlXCIsXG4gIH0sXG4gIHtcbiAgICBjb25kaXRpb246ICh7IHJlZHJpdmVQZXJtaXNzaW9uLCBzb3VyY2VRdWV1ZXMgfSkgPT5cbiAgICAgICEhKFxuICAgICAgICAocmVkcml2ZVBlcm1pc3Npb24gPT09IFJlZHJpdmVQZXJtaXNzaW9uLkFMTE9XX0FMTCB8fFxuICAgICAgICAgIHJlZHJpdmVQZXJtaXNzaW9uID09PSBSZWRyaXZlUGVybWlzc2lvbi5ERU5ZX0FMTCkgJiZcbiAgICAgICAgc291cmNlUXVldWVzXG4gICAgICApLFxuICAgIG1lc3NhZ2U6ICgpID0+XG4gICAgICBcInNvdXJjZVF1ZXVlcyBjYW5ub3QgYmUgY29uZmlndXJlZCB3aGVuIFJlZHJpdmVQZXJtaXNzaW9uIGlzIHNldCB0byAnYWxsb3dBbGwnIG9yICdkZW55QWxsJ1wiLFxuICB9LFxuXTtcblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlUXVldWVQcm9wcyhzY29wZTogQ29uc3RydWN0LCBwcm9wczogUXVldWVQcm9wcykge1xuICB2YWxpZGF0ZUFsbFByb3BzKHNjb3BlLCBRdWV1ZS5uYW1lLCBwcm9wcywgcXVldWVWYWxpZGF0aW9uUnVsZXMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVSZWRyaXZlQWxsb3dQb2xpY3koXG4gIHNjb3BlOiBDb25zdHJ1Y3QsXG4gIHBvbGljeTogUmVkcml2ZUFsbG93UG9saWN5LFxuKSB7XG4gIHZhbGlkYXRlQWxsUHJvcHMoc2NvcGUsIFF1ZXVlLm5hbWUsIHBvbGljeSwgcmVkcml2ZVZhbGlkYXRpb25SdWxlcyk7XG59XG4iXX0=
|