terraconstructs 0.0.11 → 0.0.13
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 +105205 -35113
- package/lib/aws/arn.js +1 -1
- package/lib/aws/aws-construct.d.ts +1 -1
- package/lib/aws/aws-construct.js +28 -2
- package/lib/aws/aws-stack.d.ts +2 -4
- package/lib/aws/aws-stack.js +21 -8
- package/lib/aws/aws-tags.d.ts +58 -0
- package/lib/aws/aws-tags.js +77 -0
- package/lib/aws/cloudwatch/actions/ec2.js +1 -1
- package/lib/aws/cloudwatch/actions/lambda.js +1 -1
- 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.d.ts +1 -1
- package/lib/aws/cloudwatch/metric-filter.js +4 -4
- 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/private/env-tokens.js +5 -6
- package/lib/aws/cloudwatch/private/metric-util.js +4 -5
- package/lib/aws/cloudwatch/private/object.js +2 -3
- package/lib/aws/cloudwatch/private/rendering.js +3 -3
- package/lib/aws/cloudwatch/private/statistic.js +6 -7
- package/lib/aws/cloudwatch/query-definition.js +2 -2
- package/lib/aws/cloudwatch/stats.js +1 -1
- package/lib/aws/cloudwatch/subscription-filter.d.ts +1 -1
- package/lib/aws/cloudwatch/subscription-filter.js +4 -4
- package/lib/aws/cloudwatch/text.js +1 -1
- package/lib/aws/cloudwatch/variable.js +3 -3
- package/lib/aws/cloudwatch/widget.d.ts +1 -1
- package/lib/aws/cloudwatch/widget.js +4 -4
- package/lib/aws/compute/activity.js +3 -2
- package/lib/aws/compute/alb/application-listener-action.d.ts +334 -0
- package/lib/aws/compute/alb/application-listener-action.js +281 -0
- package/lib/aws/compute/alb/application-listener-certificate.d.ts +35 -0
- package/lib/aws/compute/alb/application-listener-certificate.js +35 -0
- package/lib/aws/compute/alb/application-listener-rule.d.ts +233 -0
- package/lib/aws/compute/alb/application-listener-rule.js +220 -0
- package/lib/aws/compute/alb/application-listener.d.ts +574 -0
- package/lib/aws/compute/alb/application-listener.js +538 -0
- package/lib/aws/compute/alb/application-load-balancer.d.ts +715 -0
- package/lib/aws/compute/alb/application-load-balancer.js +780 -0
- package/lib/aws/compute/alb/application-target-group.d.ts +339 -0
- package/lib/aws/compute/alb/application-target-group.js +427 -0
- package/lib/aws/compute/alb/conditions.d.ts +61 -0
- package/lib/aws/compute/alb/conditions.js +164 -0
- package/lib/aws/compute/alb/trust-store-revocation.d.ts +59 -0
- package/lib/aws/compute/alb/trust-store-revocation.js +46 -0
- package/lib/aws/compute/alb/trust-store.d.ts +86 -0
- package/lib/aws/compute/alb/trust-store.js +79 -0
- package/lib/aws/compute/architecture.js +1 -1
- package/lib/aws/compute/aspects/require-imdsv2-aspect.d.ts +75 -0
- package/lib/aws/compute/aspects/require-imdsv2-aspect.js +106 -0
- package/lib/aws/compute/bastion-host.d.ts +172 -0
- package/lib/aws/compute/bastion-host.js +114 -0
- package/lib/aws/compute/chain.js +1 -1
- package/lib/aws/compute/cidr-splits.d.ts +49 -0
- package/lib/aws/compute/cidr-splits.js +59 -0
- package/lib/aws/compute/client-vpn-authorization-rule.d.ts +43 -0
- package/lib/aws/compute/client-vpn-authorization-rule.js +30 -0
- package/lib/aws/compute/client-vpn-endpoint-types.d.ts +62 -0
- package/lib/aws/compute/client-vpn-endpoint-types.js +25 -0
- package/lib/aws/compute/client-vpn-endpoint.d.ts +239 -0
- package/lib/aws/compute/client-vpn-endpoint.js +259 -0
- package/lib/aws/compute/client-vpn-route.d.ts +67 -0
- package/lib/aws/compute/client-vpn-route.js +57 -0
- package/lib/aws/compute/condition.js +1 -1
- package/lib/aws/compute/connections.d.ts +137 -0
- package/lib/aws/compute/connections.js +208 -0
- package/lib/aws/compute/ec2-augmentations.generated.d.ts +53 -0
- package/lib/aws/compute/ec2-augmentations.generated.js +35 -0
- package/lib/aws/compute/ec2-canned-metrics.generated.d.ts +555 -0
- package/lib/aws/compute/ec2-canned-metrics.generated.js +681 -0
- package/lib/aws/compute/ec2-util-v2.d.ts +141 -0
- package/lib/aws/compute/ec2-util-v2.js +286 -0
- package/lib/aws/compute/ec2-util.d.ts +52 -0
- package/lib/aws/compute/ec2-util.js +138 -0
- package/lib/aws/compute/elasticloadbalancing-canned-metrics.generated.d.ts +176 -0
- package/lib/aws/compute/elasticloadbalancing-canned-metrics.generated.js +119 -0
- package/lib/aws/compute/elasticloadbalancingv2-canned-metrics.generated.d.ts +860 -0
- package/lib/aws/compute/elasticloadbalancingv2-canned-metrics.generated.js +597 -0
- package/lib/aws/compute/event-invoke-config.js +1 -1
- package/lib/aws/compute/event-source-filter.js +2 -2
- package/lib/aws/compute/event-source-mapping.js +1 -1
- package/lib/aws/compute/event-sources/s3-onfailure-destination.js +1 -1
- package/lib/aws/compute/event-sources/s3.js +1 -1
- package/lib/aws/compute/event-sources/sqs-dlq.js +1 -1
- package/lib/aws/compute/event-sources/sqs.js +1 -1
- package/lib/aws/compute/fields.js +4 -4
- package/lib/aws/compute/function-alias.js +1 -1
- package/lib/aws/compute/function-base.js +2 -2
- package/lib/aws/compute/function-destinations/event-bridge.js +1 -1
- package/lib/aws/compute/function-destinations/function.js +1 -1
- package/lib/aws/compute/function-destinations/sqs.js +1 -1
- package/lib/aws/compute/function-nodejs.js +1 -1
- package/lib/aws/compute/function-url.js +1 -1
- package/lib/aws/compute/function-vpc-config.generated.d.ts +3 -3
- package/lib/aws/compute/function-vpc-config.generated.js +1 -1
- package/lib/aws/compute/function.d.ts +1 -1
- package/lib/aws/compute/function.js +5 -5
- package/lib/aws/compute/index-alpha.d.ts +5 -0
- package/lib/aws/compute/index-alpha.js +22 -0
- package/lib/aws/compute/index.d.ts +60 -0
- package/lib/aws/compute/index.js +70 -2
- package/lib/aws/compute/instance-types.d.ts +1354 -0
- package/lib/aws/compute/instance-types.js +1683 -0
- package/lib/aws/compute/instance.d.ts +436 -0
- package/lib/aws/compute/instance.js +262 -0
- package/lib/aws/compute/ip-addresses.d.ts +249 -0
- package/lib/aws/compute/ip-addresses.js +248 -0
- package/lib/aws/compute/ipam.d.ts +309 -0
- package/lib/aws/compute/ipam.js +306 -0
- package/lib/aws/compute/key-pair.d.ts +178 -0
- package/lib/aws/compute/key-pair.js +194 -0
- package/lib/aws/compute/lambda-augmentations.generated.d.ts +65 -0
- package/lib/aws/compute/lambda-augmentations.generated.js +41 -0
- package/lib/aws/compute/lambda-canned-metrics.generated.d.ts +316 -0
- package/lib/aws/compute/lambda-canned-metrics.generated.js +119 -0
- package/lib/aws/compute/launch-template.d.ts +540 -0
- package/lib/aws/compute/launch-template.js +468 -0
- package/lib/aws/compute/lb-shared/access-logs-accounts.d.ts +7 -0
- package/lib/aws/compute/lb-shared/access-logs-accounts.js +46 -0
- package/lib/aws/compute/lb-shared/base-listener.d.ts +113 -0
- package/lib/aws/compute/lb-shared/base-listener.js +181 -0
- package/lib/aws/compute/lb-shared/base-load-balancer.d.ts +212 -0
- package/lib/aws/compute/lb-shared/base-load-balancer.js +290 -0
- package/lib/aws/compute/lb-shared/base-target-group.d.ts +382 -0
- package/lib/aws/compute/lb-shared/base-target-group.js +364 -0
- package/lib/aws/compute/lb-shared/enums.d.ts +282 -0
- package/lib/aws/compute/lb-shared/enums.js +301 -0
- package/lib/aws/compute/lb-shared/grid-lookup-types.d.ts +42 -0
- package/lib/aws/compute/lb-shared/grid-lookup-types.js +53 -0
- package/lib/aws/compute/lb-shared/imported.d.ts +24 -0
- package/lib/aws/compute/lb-shared/imported.js +27 -0
- package/lib/aws/compute/lb-shared/lb-listener-config.generated.d.ts +194 -0
- package/lib/aws/compute/lb-shared/lb-listener-config.generated.js +3 -0
- package/lib/aws/compute/lb-shared/lb-target-group-attachment-config.generated.d.ts +56 -0
- package/lib/aws/compute/lb-shared/lb-target-group-attachment-config.generated.js +3 -0
- package/lib/aws/compute/lb-shared/listener-action.d.ts +14 -0
- package/lib/aws/compute/lb-shared/listener-action.js +4 -0
- package/lib/aws/compute/lb-shared/listener-certificate.d.ts +28 -0
- package/lib/aws/compute/lb-shared/listener-certificate.js +29 -0
- package/lib/aws/compute/lb-shared/load-balancer-targets.d.ts +93 -0
- package/lib/aws/compute/lb-shared/load-balancer-targets.js +127 -0
- package/lib/aws/compute/lb-shared/util.d.ts +113 -0
- package/lib/aws/compute/lb-shared/util.js +264 -0
- package/lib/aws/compute/lb-targets/alb-target.d.ts +67 -0
- package/lib/aws/compute/lb-targets/alb-target.js +100 -0
- package/lib/aws/compute/lb-targets/index.d.ts +4 -0
- package/lib/aws/compute/lb-targets/index.js +22 -0
- package/lib/aws/compute/lb-targets/instance-target.d.ts +42 -0
- package/lib/aws/compute/lb-targets/instance-target.js +67 -0
- package/lib/aws/compute/lb-targets/ip-target.d.ts +55 -0
- package/lib/aws/compute/lb-targets/ip-target.js +79 -0
- package/lib/aws/compute/lb-targets/lambda-target.d.ts +25 -0
- package/lib/aws/compute/lb-targets/lambda-target.js +50 -0
- package/lib/aws/compute/load-balancer.d.ts +336 -0
- package/lib/aws/compute/load-balancer.js +287 -0
- package/lib/aws/compute/machine-image/amazon-linux-2022.d.ts +63 -0
- package/lib/aws/compute/machine-image/amazon-linux-2022.js +84 -0
- package/lib/aws/compute/machine-image/amazon-linux-2023.d.ts +63 -0
- package/lib/aws/compute/machine-image/amazon-linux-2023.js +84 -0
- package/lib/aws/compute/machine-image/amazon-linux2.d.ts +76 -0
- package/lib/aws/compute/machine-image/amazon-linux2.js +87 -0
- package/lib/aws/compute/machine-image/common.d.ts +181 -0
- package/lib/aws/compute/machine-image/common.js +122 -0
- package/lib/aws/compute/machine-image/index.d.ts +5 -0
- package/lib/aws/compute/machine-image/index.js +22 -0
- package/lib/aws/compute/machine-image/machine-image.d.ts +463 -0
- package/lib/aws/compute/machine-image/machine-image.js +566 -0
- package/lib/aws/compute/machine-image/utils.d.ts +2 -0
- package/lib/aws/compute/machine-image/utils.js +17 -0
- package/lib/aws/compute/nat.d.ts +325 -0
- package/lib/aws/compute/nat.js +455 -0
- package/lib/aws/compute/network-acl-types.d.ts +152 -0
- package/lib/aws/compute/network-acl-types.js +156 -0
- package/lib/aws/compute/network-acl.d.ts +285 -0
- package/lib/aws/compute/network-acl.js +207 -0
- package/lib/aws/compute/network-util.d.ts +116 -0
- package/lib/aws/compute/network-util.js +241 -0
- package/lib/aws/compute/nlb/network-listener-action.d.ts +92 -0
- package/lib/aws/compute/nlb/network-listener-action.js +146 -0
- package/lib/aws/compute/nlb/network-listener-certificate.d.ts +24 -0
- package/lib/aws/compute/nlb/network-listener-certificate.js +25 -0
- package/lib/aws/compute/nlb/network-listener.d.ts +248 -0
- package/lib/aws/compute/nlb/network-listener.js +217 -0
- package/lib/aws/compute/nlb/network-load-balancer.d.ts +315 -0
- package/lib/aws/compute/nlb/network-load-balancer.js +360 -0
- package/lib/aws/compute/nlb/network-target-group.d.ts +153 -0
- package/lib/aws/compute/nlb/network-target-group.js +223 -0
- package/lib/aws/compute/peer.d.ts +64 -0
- package/lib/aws/compute/peer.js +235 -0
- package/lib/aws/compute/placement-group.d.ts +161 -0
- package/lib/aws/compute/placement-group.js +133 -0
- package/lib/aws/compute/port.d.ts +287 -0
- package/lib/aws/compute/port.js +390 -0
- package/lib/aws/compute/prefix-list.d.ts +131 -0
- package/lib/aws/compute/prefix-list.js +114 -0
- package/lib/aws/compute/private/context-stub.d.ts +7 -0
- package/lib/aws/compute/private/context-stub.js +43 -0
- package/lib/aws/compute/private/ebs-util.d.ts +14 -0
- package/lib/aws/compute/private/ebs-util.js +145 -0
- package/lib/aws/compute/private/intrinstics.js +2 -1
- package/lib/aws/compute/private/json-path.js +8 -8
- package/lib/aws/compute/private/util.js +2 -3
- package/lib/aws/compute/route.d.ts +547 -0
- package/lib/aws/compute/route.js +469 -0
- package/lib/aws/compute/security-group.d.ts +414 -0
- package/lib/aws/compute/security-group.js +538 -0
- 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.d.ts +2 -2
- package/lib/aws/compute/state-machine.js +14 -12
- 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 +5 -5
- 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/stepfunctions-canned-metrics.generated.d.ts +83 -0
- package/lib/aws/compute/stepfunctions-canned-metrics.generated.js +127 -0
- package/lib/aws/compute/subnet-v2.d.ts +213 -0
- package/lib/aws/compute/subnet-v2.js +405 -0
- package/lib/aws/compute/subnet.d.ts +37 -0
- package/lib/aws/compute/subnet.js +181 -0
- 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/private/task-utils.js +3 -4
- package/lib/aws/compute/tasks/resource-arn-suffix.js +2 -3
- package/lib/aws/compute/tasks/sqs/send-message.js +1 -1
- package/lib/aws/compute/tasks/stepfunctions/invoke-activity.js +1 -1
- package/lib/aws/compute/tasks/stepfunctions/start-execution.js +1 -1
- package/lib/aws/compute/types.js +2 -2
- package/lib/aws/compute/user-data.d.ts +270 -0
- package/lib/aws/compute/user-data.js +487 -0
- package/lib/aws/compute/util.d.ts +1 -1
- package/lib/aws/compute/util.js +4 -5
- package/lib/aws/compute/volume.d.ts +480 -0
- package/lib/aws/compute/volume.js +426 -0
- package/lib/aws/compute/vpc-endpoint-service.d.ts +149 -0
- package/lib/aws/compute/vpc-endpoint-service.js +90 -0
- package/lib/aws/compute/vpc-endpoint.d.ts +742 -0
- package/lib/aws/compute/vpc-endpoint.js +811 -0
- package/lib/aws/compute/vpc-flow-logs.d.ts +551 -0
- package/lib/aws/compute/vpc-flow-logs.js +693 -0
- package/lib/aws/compute/vpc-lookup.d.ts +73 -0
- package/lib/aws/compute/vpc-lookup.js +3 -0
- package/lib/aws/compute/vpc-v2-base.d.ts +353 -0
- package/lib/aws/compute/vpc-v2-base.js +493 -0
- package/lib/aws/compute/vpc-v2.d.ts +385 -0
- package/lib/aws/compute/vpc-v2.js +408 -0
- package/lib/aws/compute/vpc.d.ts +1448 -0
- package/lib/aws/compute/vpc.js +1495 -0
- package/lib/aws/compute/vpn.d.ts +443 -0
- package/lib/aws/compute/vpn.js +397 -0
- package/lib/aws/compute/windows-versions.d.ts +418 -0
- package/lib/aws/compute/windows-versions.js +426 -0
- package/lib/aws/edge/certificate-base.d.ts +20 -0
- package/lib/aws/edge/certificate-base.js +28 -0
- package/lib/aws/edge/certificate.d.ts +23 -2
- package/lib/aws/edge/certificate.js +54 -4
- package/lib/aws/edge/distribution.js +3 -3
- package/lib/aws/edge/dns-alias-record-targets.js +2 -2
- package/lib/aws/edge/dns-record.js +16 -16
- package/lib/aws/edge/dns-zone.d.ts +20 -2
- package/lib/aws/edge/dns-zone.js +25 -10
- package/lib/aws/edge/function.js +2 -2
- package/lib/aws/edge/index.d.ts +1 -0
- package/lib/aws/edge/index.js +2 -1
- package/lib/aws/edge/key-value-store.js +4 -4
- package/lib/aws/edge/origin.js +7 -5
- package/lib/aws/edge/response-headers-policy.js +1 -1
- package/lib/aws/encryption/alias.js +1 -1
- package/lib/aws/encryption/key.js +1 -1
- package/lib/aws/encryption/via-service-principal.js +1 -1
- package/lib/aws/iam/grant.js +2 -2
- package/lib/aws/iam/index.d.ts +1 -0
- package/lib/aws/iam/index.js +2 -1
- package/lib/aws/iam/instance-profile.d.ts +155 -0
- package/lib/aws/iam/instance-profile.js +124 -0
- package/lib/aws/iam/managed-policy.js +1 -1
- package/lib/aws/iam/oidc-provider.js +1 -1
- package/lib/aws/iam/policy-document-config.generated.d.ts +8 -8
- package/lib/aws/iam/policy-document-config.generated.js +1 -1
- package/lib/aws/iam/policy-document.js +1 -1
- package/lib/aws/iam/policy-statement-props.generated.d.ts +8 -8
- package/lib/aws/iam/policy-statement-props.generated.js +1 -1
- package/lib/aws/iam/policy-statement.js +9 -9
- package/lib/aws/iam/policy.js +1 -1
- package/lib/aws/iam/principals.js +26 -26
- package/lib/aws/iam/private/assume-role-policy.js +2 -3
- package/lib/aws/iam/private/comparable-principal.js +2 -3
- package/lib/aws/iam/private/immutable-role.d.ts +2 -1
- package/lib/aws/iam/private/immutable-role.js +3 -3
- package/lib/aws/iam/private/imported-role.d.ts +1 -1
- package/lib/aws/iam/private/imported-role.js +3 -3
- package/lib/aws/iam/private/merge-statements.js +2 -3
- package/lib/aws/iam/private/util.js +4 -4
- package/lib/aws/iam/role.js +1 -1
- package/lib/aws/iam/saml-provider.d.ts +1 -1
- package/lib/aws/iam/saml-provider.js +6 -6
- package/lib/aws/iam/unknown-principal.js +1 -1
- package/lib/aws/iam/utils.js +2 -3
- package/lib/aws/index.d.ts +1 -0
- package/lib/aws/index.js +4 -1
- package/lib/aws/network/simple-ipv4-vpc.js +5 -5
- package/lib/aws/network/subnet-group.js +3 -3
- package/lib/aws/network/subnet.d.ts +1 -1
- package/lib/aws/network/subnet.js +7 -7
- package/lib/aws/notify/archive.js +3 -2
- package/lib/aws/notify/connection.js +5 -4
- package/lib/aws/notify/event-bus.js +5 -4
- package/lib/aws/notify/event-pattern.d.ts +26 -1
- package/lib/aws/notify/event-pattern.js +49 -5
- package/lib/aws/notify/index.js +3 -1
- package/lib/aws/notify/input.js +4 -3
- package/lib/aws/notify/kinesis-stream.js +3 -2
- package/lib/aws/notify/on-event-options.js +2 -1
- package/lib/aws/notify/queue-config.generated.d.ts +18 -11
- package/lib/aws/notify/queue-config.generated.js +1 -1
- package/lib/aws/notify/queue-policy.js +1 -1
- package/lib/aws/notify/queue.js +1 -1
- package/lib/aws/notify/resource-policy.js +1 -1
- package/lib/aws/notify/rule.js +3 -2
- package/lib/aws/notify/schedule.js +2 -2
- package/lib/aws/notify/sqs-augmentations.generated.d.ts +125 -0
- package/lib/aws/notify/sqs-augmentations.generated.js +74 -0
- package/lib/aws/notify/target.js +2 -1
- package/lib/aws/notify/targets/event-bus.js +1 -1
- package/lib/aws/notify/targets/function.js +1 -1
- package/lib/aws/notify/targets/log-group.js +2 -2
- package/lib/aws/notify/targets/sqs.js +1 -1
- package/lib/aws/notify/targets/state-machine.js +1 -1
- package/lib/aws/notify/targets/util.d.ts +1 -1
- package/lib/aws/notify/targets/util.js +10 -11
- package/lib/aws/notify/util.js +4 -4
- package/lib/aws/provider-config.generated.d.ts +33 -33
- package/lib/aws/provider-config.generated.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.d.ts +298 -65
- package/lib/aws/storage/bucket.js +548 -225
- package/lib/aws/storage/cors-config.generated.d.ts +3 -3
- package/lib/aws/storage/cors-config.generated.js +1 -1
- package/lib/aws/storage/cors-rule-config.generated.d.ts +5 -5
- package/lib/aws/storage/cors-rule-config.generated.js +1 -1
- package/lib/aws/storage/index.d.ts +1 -0
- package/lib/aws/storage/index.js +2 -1
- package/lib/aws/storage/lifecycle-config.generated.d.ts +11 -11
- package/lib/aws/storage/lifecycle-config.generated.js +1 -1
- package/lib/aws/storage/notification-targets/function.js +6 -6
- package/lib/aws/storage/notification-targets/queue.js +1 -1
- package/lib/aws/storage/origin-access-identity.d.ts +1 -1
- package/lib/aws/storage/origin-access-identity.js +5 -4
- package/lib/aws/storage/parameter-util.d.ts +12 -0
- package/lib/aws/storage/parameter-util.js +65 -0
- package/lib/aws/storage/parameter.d.ts +526 -0
- package/lib/aws/storage/parameter.js +606 -0
- package/lib/aws/storage/s3-canned-metrics.generated.d.ts +22 -0
- package/lib/aws/storage/s3-canned-metrics.generated.js +23 -0
- package/lib/aws/storage/util.d.ts +25 -3
- package/lib/aws/storage/util.js +84 -17
- package/lib/aws/storage/website-config.generated.d.ts +5 -5
- package/lib/aws/storage/website-config.generated.js +1 -1
- package/lib/aws/util.js +2 -3
- package/lib/construct-base.d.ts +10 -1
- package/lib/construct-base.js +9 -6
- package/lib/duration.js +1 -1
- package/lib/expiration.d.ts +48 -0
- package/lib/expiration.js +68 -0
- package/lib/helpers-internal/index.d.ts +1 -0
- package/lib/helpers-internal/index.js +7 -0
- package/lib/index.d.ts +2 -0
- package/lib/index.js +3 -1
- package/lib/private/md5.d.ts +4 -0
- package/lib/private/md5.js +14 -0
- package/lib/private/unique-resource-name.js +3 -4
- package/lib/size.js +2 -2
- package/lib/stack-base.d.ts +4 -23
- package/lib/stack-base.js +9 -30
- package/lib/terra-func.d.ts +103 -0
- package/lib/terra-func.js +170 -0
- package/lib/token.js +5 -5
- package/package.json +15 -8
- package/bun.lockb +0 -0
|
@@ -0,0 +1,290 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var _a;
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.BaseLoadBalancer = void 0;
|
|
5
|
+
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
6
|
+
// https://github.com/aws/aws-cdk/blob/v2.175.1/packages/aws-cdk-lib/aws-elasticloadbalancingv2/lib/shared/base-load-balancer.ts
|
|
7
|
+
const provider_aws_1 = require("@cdktf/provider-aws");
|
|
8
|
+
const cdktf_1 = require("cdktf");
|
|
9
|
+
const enums_1 = require("./enums");
|
|
10
|
+
// import { RegionInfo } from "../../../region-info";
|
|
11
|
+
const util_1 = require("./util");
|
|
12
|
+
const ec2 = require("../");
|
|
13
|
+
const access_logs_accounts_1 = require("./access-logs-accounts");
|
|
14
|
+
const grid_lookup_types_1 = require("./grid-lookup-types");
|
|
15
|
+
const arn_1 = require("../../arn");
|
|
16
|
+
const aws_construct_1 = require("../../aws-construct");
|
|
17
|
+
const aws_stack_1 = require("../../aws-stack");
|
|
18
|
+
const iam = require("../../iam");
|
|
19
|
+
const iam_1 = require("../../iam");
|
|
20
|
+
/**
|
|
21
|
+
* Base class for both Application and Network Load Balancers
|
|
22
|
+
*/
|
|
23
|
+
class BaseLoadBalancer extends aws_construct_1.AwsConstructBase {
|
|
24
|
+
// /**
|
|
25
|
+
// * Queries the load balancer context provider for load balancer info.
|
|
26
|
+
// * @internal
|
|
27
|
+
// */
|
|
28
|
+
// protected static _queryContextProvider(
|
|
29
|
+
// scope: Construct,
|
|
30
|
+
// options: LoadBalancerQueryContextProviderOptions,
|
|
31
|
+
// ) {
|
|
32
|
+
// if (
|
|
33
|
+
// Token.isUnresolved(options.userOptions.loadBalancerArn) ||
|
|
34
|
+
// Object.values(options.userOptions.loadBalancerTags ?? {}).some(
|
|
35
|
+
// Token.isUnresolved,
|
|
36
|
+
// )
|
|
37
|
+
// ) {
|
|
38
|
+
// throw new Error(
|
|
39
|
+
// "All arguments to look up a load balancer must be concrete (no Tokens)",
|
|
40
|
+
// );
|
|
41
|
+
// }
|
|
42
|
+
// let cxschemaTags: cxschema.Tag[] | undefined;
|
|
43
|
+
// if (options.userOptions.loadBalancerTags) {
|
|
44
|
+
// cxschemaTags = mapTagMapToCxschema(options.userOptions.loadBalancerTags);
|
|
45
|
+
// }
|
|
46
|
+
// const props: cxapi.LoadBalancerContextResponse = ContextProvider.getValue(
|
|
47
|
+
// scope,
|
|
48
|
+
// {
|
|
49
|
+
// provider: cxschema.ContextProvider.LOAD_BALANCER_PROVIDER,
|
|
50
|
+
// props: {
|
|
51
|
+
// loadBalancerArn: options.userOptions.loadBalancerArn,
|
|
52
|
+
// loadBalancerTags: cxschemaTags,
|
|
53
|
+
// loadBalancerType: options.loadBalancerType,
|
|
54
|
+
// } as cxschema.LoadBalancerContextQuery,
|
|
55
|
+
// dummyValue: {
|
|
56
|
+
// ipAddressType: cxapi.LoadBalancerIpAddressType.DUAL_STACK,
|
|
57
|
+
// // eslint-disable-next-line @cdklabs/no-literal-partition
|
|
58
|
+
// loadBalancerArn: `arn:aws:elasticloadbalancing:us-west-2:123456789012:loadbalancer/${options.loadBalancerType}/my-load-balancer/50dc6c495c0c9188`,
|
|
59
|
+
// loadBalancerCanonicalHostedZoneId: "Z3DZXE0EXAMPLE",
|
|
60
|
+
// loadBalancerDnsName:
|
|
61
|
+
// "my-load-balancer-1234567890.us-west-2.elb.amazonaws.com",
|
|
62
|
+
// securityGroupIds: ["sg-1234"],
|
|
63
|
+
// vpcId: "vpc-12345",
|
|
64
|
+
// } as cxapi.LoadBalancerContextResponse,
|
|
65
|
+
// },
|
|
66
|
+
// ).value;
|
|
67
|
+
// return props;
|
|
68
|
+
// }
|
|
69
|
+
get loadBalancerV2Outputs() {
|
|
70
|
+
return {
|
|
71
|
+
loadBalancerCanonicalHostedZoneId: this.loadBalancerCanonicalHostedZoneId,
|
|
72
|
+
loadBalancerDnsName: this.loadBalancerDnsName,
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
get outputs() {
|
|
76
|
+
return this.loadBalancerV2Outputs;
|
|
77
|
+
}
|
|
78
|
+
constructor(scope, id, baseProps, additionalProps) {
|
|
79
|
+
super(scope, id, baseProps);
|
|
80
|
+
/**
|
|
81
|
+
* Attributes set on this load balancer
|
|
82
|
+
*/
|
|
83
|
+
this.attributes = {};
|
|
84
|
+
this.physicalName =
|
|
85
|
+
baseProps.loadBalancerName ||
|
|
86
|
+
this.stack.uniqueResourceName(this, {
|
|
87
|
+
prefix: this.gridUUID,
|
|
88
|
+
});
|
|
89
|
+
const internetFacing = (0, util_1.ifUndefined)(baseProps.internetFacing, false);
|
|
90
|
+
const vpcSubnets = (0, util_1.ifUndefined)(baseProps.vpcSubnets, internetFacing ? { subnetType: ec2.SubnetType.PUBLIC } : {});
|
|
91
|
+
const { subnetIds, internetConnectivityEstablished } = baseProps.vpc.selectSubnets(vpcSubnets);
|
|
92
|
+
this.vpc = baseProps.vpc;
|
|
93
|
+
if (additionalProps.ipAddressType ===
|
|
94
|
+
enums_1.IpAddressType.DUAL_STACK_WITHOUT_PUBLIC_IPV4 &&
|
|
95
|
+
additionalProps.loadBalancerType !== grid_lookup_types_1.LoadBalancerType.APPLICATION) {
|
|
96
|
+
throw new Error(`'ipAddressType' DUAL_STACK_WITHOUT_PUBLIC_IPV4 can only be used with Application Load Balancer, got ${additionalProps.loadBalancerType}`);
|
|
97
|
+
}
|
|
98
|
+
const resource = new provider_aws_1.lb.Lb(this, "Resource", {
|
|
99
|
+
name: this.physicalName,
|
|
100
|
+
subnets: subnetIds,
|
|
101
|
+
internal: !internetFacing, // AWS CDK "Scheme"
|
|
102
|
+
// Reverse CFN LoadBalancerAttributes to Terraform Resource properties
|
|
103
|
+
// https://github.com/hashicorp/terraform-provider-aws/blob/v5.88.0/internal/service/elbv2/load_balancer.go#L718
|
|
104
|
+
// https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-elasticloadbalancingv2-loadbalancer-loadbalancerattribute.html
|
|
105
|
+
clientKeepAlive: this.lazyNumberAttr(util_1.LoadBalancerAttribute.clientKeepAliveSeconds),
|
|
106
|
+
// customerOwnedIpv4Pool [Application Load Balancers on Outposts]
|
|
107
|
+
desyncMitigationMode: this.lazyStringAttr(util_1.LoadBalancerAttribute.routingHTTPDesyncMitigationMode),
|
|
108
|
+
dnsRecordClientRoutingPolicy: this.lazyStringAttr(util_1.LoadBalancerAttribute.dNSRecordClientRoutingPolicy),
|
|
109
|
+
dropInvalidHeaderFields: this.lazyBoolAttr(util_1.LoadBalancerAttribute.routingHTTPDropInvalidHeaderFieldsEnabled),
|
|
110
|
+
enableCrossZoneLoadBalancing: this.lazyBoolAttr(util_1.LoadBalancerAttribute.loadBalancingCrossZoneEnabled),
|
|
111
|
+
enableDeletionProtection: this.lazyBoolAttr(util_1.LoadBalancerAttribute.deletionProtectionEnabled),
|
|
112
|
+
enableHttp2: this.lazyBoolAttr(util_1.LoadBalancerAttribute.routingHTTP2Enabled),
|
|
113
|
+
enableTlsVersionAndCipherSuiteHeaders: this.lazyBoolAttr(util_1.LoadBalancerAttribute.routingHTTPXAmznTLSVersionAndCipherSuiteEnabled),
|
|
114
|
+
enableWafFailOpen: this.lazyBoolAttr(util_1.LoadBalancerAttribute.wAFFailOpenEnabled),
|
|
115
|
+
enableXffClientPort: this.lazyBoolAttr(util_1.LoadBalancerAttribute.routingHTTPXFFClientPortEnabled),
|
|
116
|
+
enableZonalShift: this.lazyBoolAttr(util_1.LoadBalancerAttribute.zonalShiftConfigEnabled),
|
|
117
|
+
// enforceSecurityGroupInboundRulesOnPrivateLinkTraffic,
|
|
118
|
+
// https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html#cfn-elasticloadbalancingv2-loadbalancer-enforcesecuritygroupinboundrulesonprivatelinktraffic
|
|
119
|
+
idleTimeout: this.lazyNumberAttr(util_1.LoadBalancerAttribute.idleTimeoutTimeoutSeconds),
|
|
120
|
+
// ipAddressType
|
|
121
|
+
// https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html#cfn-elasticloadbalancingv2-loadbalancer-ipaddresstype
|
|
122
|
+
preserveHostHeader: this.lazyBoolAttr(util_1.LoadBalancerAttribute.routingHTTPPreserveHostHeaderEnabled),
|
|
123
|
+
xffHeaderProcessingMode: this.lazyStringAttr(util_1.LoadBalancerAttribute.routingHTTPXFFHeaderProcessingMode),
|
|
124
|
+
// // this results in empty `access_logs: {}` which is not valid (bucket is required)
|
|
125
|
+
// accessLogs: {
|
|
126
|
+
// enabled: this.lazyBoolAttr(Attribute.accessLogsS3Enabled),
|
|
127
|
+
// bucket: this.lazyStringAttr(Attribute.accessLogsS3Bucket),
|
|
128
|
+
// prefix: this.lazyStringAttr(Attribute.accessLogsS3Prefix),
|
|
129
|
+
// },
|
|
130
|
+
// // this results in empty `connection_logs: {}` which is not valid (bucket is required)
|
|
131
|
+
// connectionLogs: {
|
|
132
|
+
// enabled: this.lazyBoolAttr(Attribute.connectionLogsS3Enabled),
|
|
133
|
+
// bucket: this.lazyStringAttr(Attribute.connectionLogsS3Bucket),
|
|
134
|
+
// prefix: this.lazyStringAttr(Attribute.connectionLogsS3Prefix),
|
|
135
|
+
// },
|
|
136
|
+
//subnetMappings
|
|
137
|
+
// https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html#cfn-elasticloadbalancingv2-loadbalancer-subnetmappings
|
|
138
|
+
...additionalProps,
|
|
139
|
+
});
|
|
140
|
+
if (internetFacing) {
|
|
141
|
+
resource.node.addDependency(internetConnectivityEstablished);
|
|
142
|
+
}
|
|
143
|
+
this.setAttribute(util_1.LoadBalancerAttribute.deletionProtectionEnabled, baseProps.deletionProtection ? "true" : "false");
|
|
144
|
+
if (baseProps.crossZoneEnabled !== undefined) {
|
|
145
|
+
this.setAttribute(util_1.LoadBalancerAttribute.loadBalancingCrossZoneEnabled, baseProps.crossZoneEnabled === true ? "true" : "false");
|
|
146
|
+
}
|
|
147
|
+
if (baseProps.denyAllIgwTraffic !== undefined) {
|
|
148
|
+
if (additionalProps.ipAddressType === enums_1.IpAddressType.DUAL_STACK) {
|
|
149
|
+
this.setAttribute(util_1.LoadBalancerAttribute.iPv6DenyAllIGWTraffic, baseProps.denyAllIgwTraffic.toString());
|
|
150
|
+
}
|
|
151
|
+
else {
|
|
152
|
+
throw new Error(`'denyAllIgwTraffic' may only be set on load balancers with ${enums_1.IpAddressType.DUAL_STACK} addressing.`);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
this.loadBalancerCanonicalHostedZoneId = resource.zoneId;
|
|
156
|
+
this.loadBalancerDnsName = resource.dnsName;
|
|
157
|
+
this.loadBalancerFullName = this.stack.splitArn(resource.arn, arn_1.ArnFormat.SLASH_RESOURCE_NAME).resource;
|
|
158
|
+
this.loadBalancerName = resource.name;
|
|
159
|
+
this.loadBalancerArn = resource.arn;
|
|
160
|
+
this.loadBalancerSecurityGroups = resource.securityGroups;
|
|
161
|
+
this.node.addValidation({ validate: this.validateLoadBalancer.bind(this) });
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Enable access logging for this load balancer.
|
|
165
|
+
*
|
|
166
|
+
* A region must be specified on the stack containing the load balancer; you cannot enable logging on
|
|
167
|
+
* environment-agnostic stacks. See https://docs.aws.amazon.com/cdk/latest/guide/environments.html
|
|
168
|
+
*/
|
|
169
|
+
logAccessLogs(bucket, prefix) {
|
|
170
|
+
// prefix = prefix; // optional in TF... || "";
|
|
171
|
+
this.setAttribute("access_logs.s3.enabled", "true");
|
|
172
|
+
this.setAttribute("access_logs.s3.bucket", bucket.bucketName.toString());
|
|
173
|
+
this.setAttribute("access_logs.s3.prefix", prefix);
|
|
174
|
+
const logsDeliveryServicePrincipal = new iam_1.ServicePrincipal("delivery.logs.amazonaws.com");
|
|
175
|
+
bucket.addToResourcePolicy(new iam_1.PolicyStatement({
|
|
176
|
+
actions: ["s3:PutObject"],
|
|
177
|
+
principals: [this.resourcePolicyPrincipal()],
|
|
178
|
+
resources: [
|
|
179
|
+
bucket.arnForObjects(`${prefix ? prefix + "/" : ""}AWSLogs/${aws_stack_1.AwsStack.ofAwsConstruct(this).account}/*`),
|
|
180
|
+
],
|
|
181
|
+
}));
|
|
182
|
+
bucket.addToResourcePolicy(new iam_1.PolicyStatement({
|
|
183
|
+
actions: ["s3:PutObject"],
|
|
184
|
+
principals: [logsDeliveryServicePrincipal],
|
|
185
|
+
resources: [
|
|
186
|
+
bucket.arnForObjects(`${prefix ? prefix + "/" : ""}AWSLogs/${this.env.account}/*`),
|
|
187
|
+
],
|
|
188
|
+
condition: [
|
|
189
|
+
{
|
|
190
|
+
test: "StringEquals",
|
|
191
|
+
variable: "s3:x-amz-acl",
|
|
192
|
+
values: ["bucket-owner-full-control"],
|
|
193
|
+
},
|
|
194
|
+
],
|
|
195
|
+
}));
|
|
196
|
+
bucket.addToResourcePolicy(new iam_1.PolicyStatement({
|
|
197
|
+
actions: ["s3:GetBucketAcl"],
|
|
198
|
+
principals: [logsDeliveryServicePrincipal],
|
|
199
|
+
resources: [bucket.bucketArn],
|
|
200
|
+
}));
|
|
201
|
+
// make sure the bucket's policy is created before the ALB (see https://github.com/aws/aws-cdk/issues/1633)
|
|
202
|
+
// at the L1 level to avoid creating a circular dependency (see https://github.com/aws/aws-cdk/issues/27528
|
|
203
|
+
// and https://github.com/aws/aws-cdk/issues/27928)
|
|
204
|
+
const lb = this.node.defaultChild;
|
|
205
|
+
const bucketPolicy = bucket.policy?.node.defaultChild;
|
|
206
|
+
if (lb &&
|
|
207
|
+
bucketPolicy &&
|
|
208
|
+
cdktf_1.TerraformResource.isTerraformResource(lb) &&
|
|
209
|
+
cdktf_1.TerraformResource.isTerraformResource(bucketPolicy)) {
|
|
210
|
+
lb.node.addDependency(bucketPolicy);
|
|
211
|
+
}
|
|
212
|
+
// TODO: Should putAccessLogs be handled as part of prepareStack (in toTerraform() instead)?
|
|
213
|
+
// only if lb.accessLogs.internalValue !== undefined? (or based on this.attributes?)
|
|
214
|
+
lb.putAccessLogs({
|
|
215
|
+
enabled: this.lazyBoolAttr(util_1.LoadBalancerAttribute.accessLogsS3Enabled),
|
|
216
|
+
bucket: this.lazyStringAttr(util_1.LoadBalancerAttribute.accessLogsS3Bucket),
|
|
217
|
+
prefix: this.lazyStringAttr(util_1.LoadBalancerAttribute.accessLogsS3Prefix),
|
|
218
|
+
});
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Set a non-standard attribute on the load balancer
|
|
222
|
+
*
|
|
223
|
+
* Use the dedicated logAccessLogs() method intead of setAttribute if you want to setup access logging.
|
|
224
|
+
*
|
|
225
|
+
* @see https://docs.aws.amazon.com/elasticloadbalancing/latest/application/application-load-balancers.html#load-balancer-attributes
|
|
226
|
+
*/
|
|
227
|
+
setAttribute(key, value) {
|
|
228
|
+
this.attributes[key] = value;
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* Remove an attribute from the load balancer
|
|
232
|
+
*/
|
|
233
|
+
removeAttribute(key) {
|
|
234
|
+
this.setAttribute(key, undefined);
|
|
235
|
+
}
|
|
236
|
+
lazyStringAttr(key) {
|
|
237
|
+
return cdktf_1.Lazy.stringValue({
|
|
238
|
+
produce: () => (0, util_1.lookupStringAttribute)(this.attributes, key),
|
|
239
|
+
});
|
|
240
|
+
}
|
|
241
|
+
lazyBoolAttr(key) {
|
|
242
|
+
return cdktf_1.Lazy.anyValue({
|
|
243
|
+
produce: () => (0, util_1.lookupBoolAttribute)(this.attributes, key),
|
|
244
|
+
});
|
|
245
|
+
}
|
|
246
|
+
lazyNumberAttr(key) {
|
|
247
|
+
return cdktf_1.Lazy.numberValue({
|
|
248
|
+
produce: () => (0, util_1.lookupNumberAttribute)(this.attributes, key),
|
|
249
|
+
});
|
|
250
|
+
}
|
|
251
|
+
resourcePolicyPrincipal() {
|
|
252
|
+
const region = this.stack.region;
|
|
253
|
+
if (cdktf_1.Token.isUnresolved(region)) {
|
|
254
|
+
throw new Error("Region is required to enable ELBv2 access logging");
|
|
255
|
+
}
|
|
256
|
+
// const account = RegionInfo.get(region).elbv2Account;
|
|
257
|
+
const account = (0, access_logs_accounts_1.getElbv2Account)(region);
|
|
258
|
+
if (!account) {
|
|
259
|
+
// New Regions use a service principal
|
|
260
|
+
// https://docs.aws.amazon.com/elasticloadbalancing/latest/classic/enable-access-logs.html#attach-bucket-policy
|
|
261
|
+
return new iam.ServicePrincipal("logdelivery.elasticloadbalancing.amazonaws.com");
|
|
262
|
+
}
|
|
263
|
+
return new iam.AccountPrincipal(account);
|
|
264
|
+
}
|
|
265
|
+
validateLoadBalancer() {
|
|
266
|
+
const ret = new Array();
|
|
267
|
+
// https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-elasticloadbalancingv2-loadbalancer.html#cfn-elasticloadbalancingv2-loadbalancer-name
|
|
268
|
+
const loadBalancerName = this.physicalName;
|
|
269
|
+
if (!cdktf_1.Token.isUnresolved(loadBalancerName) &&
|
|
270
|
+
loadBalancerName !== undefined) {
|
|
271
|
+
if (loadBalancerName.length > 32) {
|
|
272
|
+
ret.push(`Load balancer name: "${loadBalancerName}" can have a maximum of 32 characters.`);
|
|
273
|
+
}
|
|
274
|
+
if (loadBalancerName.startsWith("internal-")) {
|
|
275
|
+
ret.push(`Load balancer name: "${loadBalancerName}" must not begin with "internal-".`);
|
|
276
|
+
}
|
|
277
|
+
if (loadBalancerName.startsWith("-") || loadBalancerName.endsWith("-")) {
|
|
278
|
+
ret.push(`Load balancer name: "${loadBalancerName}" must not begin or end with a hyphen.`);
|
|
279
|
+
}
|
|
280
|
+
if (!/^[0-9a-z-]+$/i.test(loadBalancerName)) {
|
|
281
|
+
ret.push(`Load balancer name: "${loadBalancerName}" must contain only alphanumeric characters or hyphens.`);
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
return ret;
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
exports.BaseLoadBalancer = BaseLoadBalancer;
|
|
288
|
+
_a = JSII_RTTI_SYMBOL_1;
|
|
289
|
+
BaseLoadBalancer[_a] = { fqn: "terraconstructs.aws.compute.BaseLoadBalancer", version: "0.0.13" };
|
|
290
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1sb2FkLWJhbGFuY2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2F3cy9jb21wdXRlL2xiLXNoYXJlZC9iYXNlLWxvYWQtYmFsYW5jZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxnSUFBZ0k7QUFFaEksc0RBQTJEO0FBQzNELGlDQUtlO0FBRWYsbUNBQXdDO0FBQ3hDLHFEQUFxRDtBQUNyRCxpQ0FTZ0I7QUFDaEIsMkJBQTJCO0FBQzNCLGlFQUF5RDtBQUN6RCwyREFBdUQ7QUFDdkQsbUNBQXNDO0FBQ3RDLHVEQUk2QjtBQUM3QiwrQ0FBMkM7QUFDM0MsaUNBQWlDO0FBQ2pDLG1DQUE4RDtBQXVJOUQ7O0dBRUc7QUFDSCxNQUFzQixnQkFBaUIsU0FBUSxnQ0FBZ0I7SUFDN0QsTUFBTTtJQUNOLHdFQUF3RTtJQUN4RSxlQUFlO0lBQ2YsTUFBTTtJQUNOLDBDQUEwQztJQUMxQyxzQkFBc0I7SUFDdEIsc0RBQXNEO0lBQ3RELE1BQU07SUFDTixTQUFTO0lBQ1QsaUVBQWlFO0lBQ2pFLHNFQUFzRTtJQUN0RSw0QkFBNEI7SUFDNUIsUUFBUTtJQUNSLFFBQVE7SUFDUix1QkFBdUI7SUFDdkIsaUZBQWlGO0lBQ2pGLFNBQVM7SUFDVCxNQUFNO0lBRU4sa0RBQWtEO0lBQ2xELGdEQUFnRDtJQUNoRCxnRkFBZ0Y7SUFDaEYsTUFBTTtJQUVOLCtFQUErRTtJQUMvRSxhQUFhO0lBQ2IsUUFBUTtJQUNSLG1FQUFtRTtJQUNuRSxpQkFBaUI7SUFDakIsZ0VBQWdFO0lBQ2hFLDBDQUEwQztJQUMxQyxzREFBc0Q7SUFDdEQsZ0RBQWdEO0lBQ2hELHNCQUFzQjtJQUN0QixxRUFBcUU7SUFDckUsb0VBQW9FO0lBQ3BFLDZKQUE2SjtJQUM3SiwrREFBK0Q7SUFDL0QsK0JBQStCO0lBQy9CLHVFQUF1RTtJQUN2RSx5Q0FBeUM7SUFDekMsOEJBQThCO0lBQzlCLGdEQUFnRDtJQUNoRCxTQUFTO0lBQ1QsYUFB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R0FBRyxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFUyxvQkFBb0I7UUFDNUIsTUFBTSxHQUFHLEdBQUcsSUFBSSxLQUFLLEVBQVUsQ0FBQztRQUVoQyxvS0FBb0s7UUFDcEssTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO1FBQzNDLElBQ0UsQ0FBQyxhQUFLLENBQUMsWUFBWSxDQUFDLGdCQUFnQixDQUFDO1lBQ3JDLGdCQUFnQixLQUFLLFNBQVMsRUFDOUIsQ0FBQztZQUNELElBQUksZ0JBQWdCLENBQUMsTUFBTSxHQUFHLEVBQUUsRUFBRSxDQUFDO2dCQUNqQyxHQUFHLENBQUMsSUFBSSxDQUNOLHdCQUF3QixnQkFBZ0Isd0NBQXdDLENBQ2pGLENBQUM7WUFDSixDQUFDO1lBQ0QsSUFBSSxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztnQkFDN0MsR0FBRyxDQUFDLElBQUksQ0FDTix3QkFBd0IsZ0JBQWdCLG9DQUFvQyxDQUM3RSxDQUFDO1lBQ0osQ0FBQztZQUNELElBQUksZ0JBQWdCLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUN2RSxHQUFHLENBQUMsSUFBSSxDQUNOLHdCQUF3QixnQkFBZ0Isd0NBQXdDLENBQ2pGLENBQUM7WUFDSixDQUFDO1lBQ0QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDO2dCQUM1QyxHQUFHLENBQUMsSUFBSSxDQUNOLHdCQUF3QixnQkFBZ0IseURBQXlELENBQ2xHLENBQUM7WUFDSixDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQzs7QUFsYUgsNENBbWFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2Jsb2IvdjIuMTc1LjEvcGFja2FnZXMvYXdzLWNkay1saWIvYXdzLWVsYXN0aWNsb2FkYmFsYW5jaW5ndjIvbGliL3NoYXJlZC9iYXNlLWxvYWQtYmFsYW5jZXIudHNcblxuaW1wb3J0IHsgbGIgYXMgdGZMb2FkQmFsYW5jZXIgfSBmcm9tIFwiQGNka3RmL3Byb3ZpZGVyLWF3c1wiO1xuaW1wb3J0IHtcbiAgVGVycmFmb3JtUmVzb3VyY2UsXG4gIC8vIENvbnRleHRQcm92aWRlcixcbiAgTGF6eSxcbiAgVG9rZW4sXG59IGZyb20gXCJjZGt0ZlwiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IElwQWRkcmVzc1R5cGUgfSBmcm9tIFwiLi9lbnVtc1wiO1xuLy8gaW1wb3J0IHsgUmVnaW9uSW5mbyB9IGZyb20gXCIuLi8uLi8uLi9yZWdpb24taW5mb1wiO1xuaW1wb3J0IHtcbiAgQXR0cmlidXRlcyxcbiAgaWZVbmRlZmluZWQsXG4gIExvYWRCYWxhbmNlckF0dHJpYnV0ZSBhcyBBdHRyaWJ1dGUsXG4gIGxvb2t1cEJvb2xBdHRyaWJ1dGUsXG4gIGxvb2t1cE51bWJlckF0dHJpYnV0ZSxcbiAgbG9va3VwU3RyaW5nQXR0cmlidXRlLFxuICAvLyBtYXBUYWdNYXBUb0N4c2NoZW1hLFxuICAvLyByZW5kZXJBdHRyaWJ1dGVzLFxufSBmcm9tIFwiLi91dGlsXCI7XG5pbXBvcnQgKiBhcyBlYzIgZnJvbSBcIi4uL1wiO1xuaW1wb3J0IHsgZ2V0RWxidjJBY2NvdW50IH0gZnJvbSBcIi4vYWNjZXNzLWxvZ3MtYWNjb3VudHNcIjtcbmltcG9ydCB7IExvYWRCYWxhbmNlclR5cGUgfSBmcm9tIFwiLi9ncmlkLWxvb2t1cC10eXBlc1wiO1xuaW1wb3J0IHsgQXJuRm9ybWF0IH0gZnJvbSBcIi4uLy4uL2FyblwiO1xuaW1wb3J0IHtcbiAgSUF3c0NvbnN0cnVjdCxcbiAgQXdzQ29uc3RydWN0QmFzZSxcbiAgQXdzQ29uc3RydWN0UHJvcHMsXG59IGZyb20gXCIuLi8uLi9hd3MtY29uc3RydWN0XCI7XG5pbXBvcnQgeyBBd3NTdGFjayB9IGZyb20gXCIuLi8uLi9hd3Mtc3RhY2tcIjtcbmltcG9ydCAqIGFzIGlhbSBmcm9tIFwiLi4vLi4vaWFtXCI7XG5pbXBvcnQgeyBQb2xpY3lTdGF0ZW1lbnQsIFNlcnZpY2VQcmluY2lwYWwgfSBmcm9tIFwiLi4vLi4vaWFtXCI7XG5pbXBvcnQgKiBhcyBzMyBmcm9tIFwiLi4vLi4vc3RvcmFnZVwiO1xuXG4vKipcbiAqIFNoYXJlZCBwcm9wZXJ0aWVzIG9mIGJvdGggQXBwbGljYXRpb24gYW5kIE5ldHdvcmsgTG9hZCBCYWxhbmNlcnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCYXNlTG9hZEJhbGFuY2VyUHJvcHMgZXh0ZW5kcyBBd3NDb25zdHJ1Y3RQcm9wcyB7XG4gIC8qKlxuICAgKiBOYW1lIG9mIHRoZSBsb2FkIGJhbGFuY2VyXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbmFtZS5cbiAgICovXG4gIHJlYWRvbmx5IGxvYWRCYWxhbmNlck5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBWUEMgbmV0d29yayB0byBwbGFjZSB0aGUgbG9hZCBiYWxhbmNlciBpblxuICAgKi9cbiAgcmVhZG9ubHkgdnBjOiBlYzIuSVZwYztcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgbG9hZCBiYWxhbmNlciBoYXMgYW4gaW50ZXJuZXQtcm91dGFibGUgYWRkcmVzc1xuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgaW50ZXJuZXRGYWNpbmc/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGljaCBzdWJuZXRzIHBsYWNlIHRoZSBsb2FkIGJhbGFuY2VyIGluXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdGhlIFZwYyBkZWZhdWx0IHN0cmF0ZWd5LlxuICAgKlxuICAgKi9cbiAgcmVhZG9ubHkgdnBjU3VibmV0cz86IGVjMi5TdWJuZXRTZWxlY3Rpb247XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIGRlbGV0aW9uIHByb3RlY3Rpb24gaXMgZW5hYmxlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGRlbGV0aW9uUHJvdGVjdGlvbj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIGNyb3NzLXpvbmUgbG9hZCBiYWxhbmNpbmcgaXMgZW5hYmxlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBmYWxzZSBmb3IgTmV0d29yayBMb2FkIEJhbGFuY2VycyBhbmQgdHJ1ZSBmb3IgQXBwbGljYXRpb24gTG9hZCBCYWxhbmNlcnMuXG4gICAqIFRoaXMgY2FuIG5vdCBiZSBgZmFsc2VgIGZvciBBcHBsaWNhdGlvbiBMb2FkIEJhbGFuY2Vycy5cbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcHJvcGVydGllcy1lbGFzdGljbG9hZGJhbGFuY2luZ3YyLWxvYWRiYWxhbmNlci1sb2FkYmFsYW5jZXJhdHRyaWJ1dGUuaHRtbFxuICAgKi9cbiAgcmVhZG9ubHkgY3Jvc3Nab25lRW5hYmxlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBsb2FkIGJhbGFuY2VyIGJsb2NrcyB0cmFmZmljIHRocm91Z2ggdGhlIEludGVybmV0IEdhdGV3YXkgKElHVykuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZmFsc2UgZm9yIGludGVybmV0LWZhY2luZyBsb2FkIGJhbGFuY2VycyBhbmQgdHJ1ZSBmb3IgaW50ZXJuYWwgbG9hZCBiYWxhbmNlcnNcbiAgICovXG4gIHJlYWRvbmx5IGRlbnlBbGxJZ3dUcmFmZmljPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBPdXRwdXRzIHdoaWNoIG1heSBiZSByZWdpc3RlcmVkIGZvciBvdXRwdXQgdmlhIHRoZSBHcmlkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExvYWRCYWxhbmNlclYyT3V0cHV0cyB7XG4gIC8qKlxuICAgKiBUaGUgY2Fub25pY2FsIGhvc3RlZCB6b25lIElEIG9mIHRoaXMgbG9hZCBiYWxhbmNlclxuICAgKlxuICAgKiBFeGFtcGxlIHZhbHVlOiBgWjJQNzBKN0VYQU1QTEVgXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IGxvYWRCYWxhbmNlckNhbm9uaWNhbEhvc3RlZFpvbmVJZDogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIEROUyBuYW1lIG9mIHRoaXMgbG9hZCBiYWxhbmNlclxuICAgKlxuICAgKiBFeGFtcGxlIHZhbHVlOiBgbXktbG9hZC1iYWxhbmNlci00MjQ4MzU3MDYudXMtd2VzdC0yLmVsYi5hbWF6b25hd3MuY29tYFxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBsb2FkQmFsYW5jZXJEbnNOYW1lOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUxvYWRCYWxhbmNlclYyIGV4dGVuZHMgSUF3c0NvbnN0cnVjdCB7XG4gIC8qKiBTdHJvbmdseSB0eXBlZCBvdXRwdXRzICovXG4gIHJlYWRvbmx5IGxvYWRCYWxhbmNlclYyT3V0cHV0czogTG9hZEJhbGFuY2VyVjJPdXRwdXRzO1xuICAvKipcbiAgICogVGhlIGNhbm9uaWNhbCBob3N0ZWQgem9uZSBJRCBvZiB0aGlzIGxvYWQgYmFsYW5jZXJcbiAgICpcbiAgICogRXhhbXBsZSB2YWx1ZTogYFoyUDcwSjdFWEFNUExFYFxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBsb2FkQmFsYW5jZXJDYW5vbmljYWxIb3N0ZWRab25lSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIEROUyBuYW1lIG9mIHRoaXMgbG9hZCBiYWxhbmNlclxuICAgKlxuICAgKiBFeGFtcGxlIHZhbHVlOiBgbXktbG9hZC1iYWxhbmNlci00MjQ4MzU3MDYudXMtd2VzdC0yLmVsYi5hbWF6b25hd3MuY29tYFxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBsb2FkQmFsYW5jZXJEbnNOYW1lOiBzdHJpbmc7XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgbG9va2luZyB1cCBsb2FkIGJhbGFuY2Vyc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEJhc2VMb2FkQmFsYW5jZXJMb29rdXBPcHRpb25zIHtcbiAgLyoqXG4gICAqIEZpbmQgYnkgbG9hZCBiYWxhbmNlcidzIEFSTlxuICAgKiBAZGVmYXVsdCAtIGRvZXMgbm90IHNlYXJjaCBieSBsb2FkIGJhbGFuY2VyIGFyblxuICAgKi9cbiAgcmVhZG9ubHkgbG9hZEJhbGFuY2VyQXJuPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBNYXRjaCBsb2FkIGJhbGFuY2VyIHRhZ3MuXG4gICAqIEBkZWZhdWx0IC0gZG9lcyBub3QgbWF0Y2ggbG9hZCBiYWxhbmNlcnMgYnkgdGFnc1xuICAgKi9cbiAgcmVhZG9ubHkgbG9hZEJhbGFuY2VyVGFncz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgcXVlcnkgY29udGV4dCBwcm92aWRlclxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTG9hZEJhbGFuY2VyUXVlcnlDb250ZXh0UHJvdmlkZXJPcHRpb25zIHtcbiAgLyoqXG4gICAqIFVzZXIncyBsb29rdXAgb3B0aW9uc1xuICAgKi9cbiAgcmVhZG9ubHkgdXNlck9wdGlvbnM6IEJhc2VMb2FkQmFsYW5jZXJMb29rdXBPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBUeXBlIG9mIGxvYWQgYmFsYW5jZXJcbiAgICovXG4gIHJlYWRvbmx5IGxvYWRCYWxhbmNlclR5cGU6IExvYWRCYWxhbmNlclR5cGU7XG59XG5cbi8qKlxuICogQmFzZSBjbGFzcyBmb3IgYm90aCBBcHBsaWNhdGlvbiBhbmQgTmV0d29yayBMb2FkIEJhbGFuY2Vyc1xuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQmFzZUxvYWRCYWxhbmNlciBleHRlbmRzIEF3c0NvbnN0cnVjdEJhc2Uge1xuICAvLyAvKipcbiAgLy8gICogUXVlcmllcyB0aGUgbG9hZCBiYWxhbmNlciBjb250ZXh0IHByb3ZpZGVyIGZvciBsb2FkIGJhbGFuY2VyIGluZm8uXG4gIC8vICAqIEBpbnRlcm5hbFxuICAvLyAgKi9cbiAgLy8gcHJvdGVjdGVkIHN0YXRpYyBfcXVlcnlDb250ZXh0UHJvdmlkZXIoXG4gIC8vICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgLy8gICBvcHRpb25zOiBMb2FkQmFsYW5jZXJRdWVyeUNvbnRleHRQcm92aWRlck9wdGlvbnMsXG4gIC8vICkge1xuICAvLyAgIGlmIChcbiAgLy8gICAgIFRva2VuLmlzVW5yZXNvbHZlZChvcHRpb25zLnVzZXJPcHRpb25zLmxvYWRCYWxhbmNlckFybikgfHxcbiAgLy8gICAgIE9iamVjdC52YWx1ZXMob3B0aW9ucy51c2VyT3B0aW9ucy5sb2FkQmFsYW5jZXJUYWdzID8/IHt9KS5zb21lKFxuICAvLyAgICAgICBUb2tlbi5pc1VucmVzb2x2ZWQsXG4gIC8vICAgICApXG4gIC8vICAgKSB7XG4gIC8vICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gIC8vICAgICAgIFwiQWxsIGFyZ3VtZW50cyB0byBsb29rIHVwIGEgbG9hZCBiYWxhbmNlciBtdXN0IGJlIGNvbmNyZXRlIChubyBUb2tlbnMpXCIsXG4gIC8vICAgICApO1xuICAvLyAgIH1cblxuICAvLyAgIGxldCBjeHNjaGVtYVRhZ3M6IGN4c2NoZW1hLlRhZ1tdIHwgdW5kZWZpbmVkO1xuICAvLyAgIGlmIChvcHRpb25zLnVzZXJPcHRpb25zLmxvYWRCYWxhbmNlclRhZ3MpIHtcbiAgLy8gICAgIGN4c2NoZW1hVGFncyA9IG1hcFRhZ01hcFRvQ3hzY2hlbWEob3B0aW9ucy51c2VyT3B0aW9ucy5sb2FkQmFsYW5jZXJUYWdzKTtcbiAgLy8gICB9XG5cbiAgLy8gICBjb25zdCBwcm9wczogY3hhcGkuTG9hZEJhbGFuY2VyQ29udGV4dFJlc3BvbnNlID0gQ29udGV4dFByb3ZpZGVyLmdldFZhbHVlKFxuICAvLyAgICAgc2NvcGUsXG4gIC8vICAgICB7XG4gIC8vICAgICAgIHByb3ZpZGVyOiBjeHNjaGVtYS5Db250ZXh0UHJvdmlkZXIuTE9BRF9CQUxBTkNFUl9QUk9WSURFUixcbiAgLy8gICAgICAgcHJvcHM6IHtcbiAgLy8gICAgICAgICBsb2FkQmFsYW5jZXJBcm46IG9wdGlvbnMudXNlck9wdGlvbnMubG9hZEJhbGFuY2VyQXJuLFxuICAvLyAgICAgICAgIGxvYWRCYWxhbmNlclRhZ3M6IGN4c2NoZW1hVGFncyxcbiAgLy8gICAgICAgICBsb2FkQmFsYW5jZXJUeXBlOiBvcHRpb25zLmxvYWRCYWxhbmNlclR5cGUsXG4gIC8vICAgICAgIH0gYXMgY3hzY2hlbWEuTG9hZEJhbGFuY2VyQ29udGV4dFF1ZXJ5LFxuICAvLyAgICAgICBkdW1teVZhbHVlOiB7XG4gIC8vICAgICAgICAgaXBBZGRyZXNzVHlwZTogY3hhcGkuTG9hZEJhbGFuY2VySXBBZGRyZXNzVHlwZS5EVUFMX1NUQUNLLFxuICAvLyAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAY2RrbGFicy9uby1saXRlcmFsLXBhcnRpdGlvblxuICAvLyAgICAgICAgIGxvYWRCYWxhbmNlckFybjogYGFybjphd3M6ZWxhc3RpY2xvYWRiYWxhbmNpbmc6dXMtd2VzdC0yOjEyMzQ1Njc4OTAxMjpsb2FkYmFsYW5jZXIvJHtvcHRpb25zLmxvYWRCYWxhbmNlclR5cGV9L215LWxvYWQtYmFsYW5jZXIvNTBkYzZjNDk1YzBjOTE4OGAsXG4gIC8vICAgICAgICAgbG9hZEJhbGFuY2VyQ2Fub25pY2FsSG9zdGVkWm9uZUlkOiBcIlozRFpYRTBFWEFNUExFXCIsXG4gIC8vICAgICAgICAgbG9hZEJhbGFuY2VyRG5zTmFtZTpcbiAgLy8gICAgICAgICAgIFwibXktbG9hZC1iYWxhbmNlci0xMjM0NTY3ODkwLnVzLXdlc3QtMi5lbGIuYW1hem9uYXdzLmNvbVwiLFxuICAvLyAgICAgICAgIHNlY3VyaXR5R3JvdXBJZHM6IFtcInNnLTEyMzRcIl0sXG4gIC8vICAgICAgICAgdnBjSWQ6IFwidnBjLTEyMzQ1XCIsXG4gIC8vICAgICAgIH0gYXMgY3hhcGkuTG9hZEJhbGFuY2VyQ29udGV4dFJlc3BvbnNlLFxuICAvLyAgICAgfSxcbiAgLy8gICApLnZhbHVlO1xuXG4gIC8vICAgcmV0dXJuIHByb3BzO1xuICAvLyB9XG5cbiAgcHVibGljIGdldCBsb2FkQmFsYW5jZXJWMk91dHB1dHMoKTogTG9hZEJhbGFuY2VyVjJPdXRwdXRzIHtcbiAgICByZXR1cm4ge1xuICAgICAgbG9hZEJhbGFuY2VyQ2Fub25pY2FsSG9zdGVkWm9uZUlkOiB0aGlzLmxvYWRCYWxhbmNlckNhbm9uaWNhbEhvc3RlZFpvbmVJZCxcbiAgICAgIGxvYWRCYWxhbmNlckRuc05hbWU6IHRoaXMubG9hZEJhbGFuY2VyRG5zTmFtZSxcbiAgICB9O1xuICB9XG4gIHB1YmxpYyBnZXQgb3V0cHV0cygpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5sb2FkQmFsYW5jZXJWMk91dHB1dHM7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGNhbm9uaWNhbCBob3N0ZWQgem9uZSBJRCBvZiB0aGlzIGxvYWQgYmFsYW5jZXJcbiAgICpcbiAgICogRXhhbXBsZSB2YWx1ZTogYFoyUDcwSjdFWEFNUExFYFxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgbG9hZEJhbGFuY2VyQ2Fub25pY2FsSG9zdGVkWm9uZUlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBETlMgbmFtZSBvZiB0aGlzIGxvYWQgYmFsYW5jZXJcbiAgICpcbiAgICogRXhhbXBsZSB2YWx1ZTogYG15LWxvYWQtYmFsYW5jZXItNDI0ODM1NzA2LnVzLXdlc3QtMi5lbGIuYW1hem9uYXdzLmNvbWBcbiAgICpcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGxvYWRCYWxhbmNlckRuc05hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGZ1bGwgbmFtZSBvZiB0aGlzIGxvYWQgYmFsYW5jZXJcbiAgICpcbiAgICogRXhhbXBsZSB2YWx1ZTogYGFwcC9teS1sb2FkLWJhbGFuY2VyLzUwZGM2YzQ5NWMwYzkxODhgXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBsb2FkQmFsYW5jZXJGdWxsTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGlzIGxvYWQgYmFsYW5jZXJcbiAgICpcbiAgICogRXhhbXBsZSB2YWx1ZTogYG15LWxvYWQtYmFsYW5jZXJgXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBsb2FkQmFsYW5jZXJOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBBUk4gb2YgdGhpcyBsb2FkIGJhbGFuY2VyXG4gICAqXG4gICAqIEV4YW1wbGUgdmFsdWU6IGBhcm46YXdzOmVsYXN0aWNsb2FkYmFsYW5jaW5nOnVzLXdlc3QtMjoxMjM0NTY3ODkwMTI6bG9hZGJhbGFuY2VyL2FwcC9teS1pbnRlcm5hbC1sb2FkLWJhbGFuY2VyLzUwZGM2YzQ5NWMwYzkxODhgXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBsb2FkQmFsYW5jZXJBcm46IHN0cmluZztcblxuICAvKipcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGxvYWRCYWxhbmNlclNlY3VyaXR5R3JvdXBzOiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIFZQQyB0aGlzIGxvYWQgYmFsYW5jZXIgaGFzIGJlZW4gY3JlYXRlZCBpbi5cbiAgICpcbiAgICogVGhpcyBwcm9wZXJ0eSBpcyBhbHdheXMgZGVmaW5lZCAobm90IGBudWxsYCBvciBgdW5kZWZpbmVkYCkgZm9yIHN1Yi1jbGFzc2VzIG9mIGBCYXNlTG9hZEJhbGFuY2VyYC5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB2cGM/OiBlYzIuSVZwYztcblxuICAvKipcbiAgICogQXR0cmlidXRlcyBzZXQgb24gdGhpcyBsb2FkIGJhbGFuY2VyXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGF0dHJpYnV0ZXM6IEF0dHJpYnV0ZXMgPSB7fTtcbiAgcHJpdmF0ZSByZWFkb25seSBwaHlzaWNhbE5hbWU6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIGlkOiBzdHJpbmcsXG4gICAgYmFzZVByb3BzOiBCYXNlTG9hZEJhbGFuY2VyUHJvcHMsXG4gICAgYWRkaXRpb25hbFByb3BzOiB0ZkxvYWRCYWxhbmNlci5MYkNvbmZpZyxcbiAgKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBiYXNlUHJvcHMpO1xuICAgIHRoaXMucGh5c2ljYWxOYW1lID1cbiAgICAgIGJhc2VQcm9wcy5sb2FkQmFsYW5jZXJOYW1lIHx8XG4gICAgICB0aGlzLnN0YWNrLnVuaXF1ZVJlc291cmNlTmFtZSh0aGlzLCB7XG4gICAgICAgIHByZWZpeDogdGhpcy5ncmlkVVVJRCxcbiAgICAgIH0pO1xuXG4gICAgY29uc3QgaW50ZXJuZXRGYWNpbmcgPSBpZlVuZGVmaW5lZChiYXNlUHJvcHMuaW50ZXJuZXRGYWNpbmcsIGZhbHNlKTtcblxuICAgIGNvbnN0IHZwY1N1Ym5ldHMgPSBpZlVuZGVmaW5lZChcbiAgICAgIGJhc2VQcm9wcy52cGNTdWJuZXRzLFxuICAgICAgaW50ZXJuZXRGYWNpbmcgPyB7IHN1Ym5ldFR5cGU6IGVjMi5TdWJuZXRUeXBlLlBVQkxJQyB9IDoge30sXG4gICAgKTtcbiAgICBjb25zdCB7IHN1Ym5ldElkcywgaW50ZXJuZXRDb25uZWN0aXZpdHlFc3RhYmxpc2hlZCB9ID1cbiAgICAgIGJhc2VQcm9wcy52cGMuc2VsZWN0U3VibmV0cyh2cGNTdWJuZXRzKTtcblxuICAgIHRoaXMudnBjID0gYmFzZVByb3BzLnZwYztcblxuICAgIGlmIChcbiAgICAgIGFkZGl0aW9uYWxQcm9wcy5pcEFkZHJlc3NUeXBlID09PVxuICAgICAgICBJcEFkZHJlc3NUeXBlLkRVQUxfU1RBQ0tfV0lUSE9VVF9QVUJMSUNfSVBWNCAmJlxuICAgICAgYWRkaXRpb25hbFByb3BzLmxvYWRCYWxhbmNlclR5cGUgIT09IExvYWRCYWxhbmNlclR5cGUuQVBQTElDQVRJT05cbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYCdpcEFkZHJlc3NUeXBlJyBEVUFMX1NUQUNLX1dJVEhPVVRfUFVCTElDX0lQVjQgY2FuIG9ubHkgYmUgdXNlZCB3aXRoIEFwcGxpY2F0aW9uIExvYWQgQmFsYW5jZXIsIGdvdCAke2FkZGl0aW9uYWxQcm9wcy5sb2FkQmFsYW5jZXJUeXBlfWAsXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc291cmNlID0gbmV3IHRmTG9hZEJhbGFuY2VyLkxiKHRoaXMsIFwiUmVzb3VyY2VcIiwge1xuICAgICAgbmFtZTogdGhpcy5waHlzaWNhbE5hbWUsXG4gICAgICBzdWJuZXRzOiBzdWJuZXRJZHMsXG4gICAgICBpbnRlcm5hbDogIWludGVybmV0RmFjaW5nLCAvLyBBV1MgQ0RLIFwiU2NoZW1lXCJcbiAgICAgIC8vIFJldmVyc2UgQ0ZOIExvYWRCYWxhbmNlckF0dHJpYnV0ZXMgdG8gVGVycmFmb3JtIFJlc291cmNlIHByb3BlcnRpZXNcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9oYXNoaWNvcnAvdGVycmFmb3JtLXByb3ZpZGVyLWF3cy9ibG9iL3Y1Ljg4LjAvaW50ZXJuYWwvc2VydmljZS9lbGJ2Mi9sb2FkX2JhbGFuY2VyLmdvI0w3MThcbiAgICAgIC8vIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1wcm9wZXJ0aWVzLWVsYXN0aWNsb2FkYmFsYW5jaW5ndjItbG9hZGJhbGFuY2VyLWxvYWRiYWxhbmNlcmF0dHJpYnV0ZS5odG1sXG4gICAgICBjbGllbnRLZWVwQWxpdmU6IHRoaXMubGF6eU51bWJlckF0dHIoQXR0cmlidXRlLmNsaWVudEtlZXBBbGl2ZVNlY29uZHMpLFxuICAgICAgLy8gY3VzdG9tZXJPd25lZElwdjRQb29sIFtBcHBsaWNhdGlvbiBMb2FkIEJhbGFuY2VycyBvbiBPdXRwb3N0c11cbiAgICAgIGRlc3luY01pdGlnYXRpb25Nb2RlOiB0aGlzLmxhenlTdHJpbmdBdHRyKFxuICAgICAgICBBdHRyaWJ1dGUucm91dGluZ0hUVFBEZXN5bmNNaXRpZ2F0aW9uTW9kZSxcbiAgICAgICksXG4gICAgICBkbnNSZWNvcmRDbGllbnRSb3V0aW5nUG9saWN5OiB0aGlzLmxhenlTdHJpbmdBdHRyKFxuICAgICAgICBBdHRyaWJ1dGUuZE5TUmVjb3JkQ2xpZW50Um91dGluZ1BvbGljeSxcbiAgICAgICksXG4gICAgICBkcm9wSW52YWxpZEhlYWRlckZpZWxkczogdGhpcy5sYXp5Qm9vbEF0dHIoXG4gICAgICAgIEF0dHJpYnV0ZS5yb3V0aW5nSFRUUERyb3BJbnZhbGlkSGVhZGVyRmllbGRzRW5hYmxlZCxcbiAgICAgICksXG4gICAgICBlbmFibGVDcm9zc1pvbmVMb2FkQmFsYW5jaW5nOiB0aGlzLmxhenlCb29sQXR0cihcbiAgICAgICAgQXR0cmlidXRlLmxvYWRCYWxhbmNpbmdDcm9zc1pvbmVFbmFibGVkLFxuICAgICAgKSxcbiAgICAgIGVuYWJsZURlbGV0aW9uUHJvdGVjdGlvbjogdGhpcy5sYXp5Qm9vbEF0dHIoXG4gICAgICAgIEF0dHJpYnV0ZS5kZWxldGlvblByb3RlY3Rpb25FbmFibGVkLFxuICAgICAgKSxcbiAgICAgIGVuYWJsZUh0dHAyOiB0aGlzLmxhenlCb29sQXR0cihBdHRyaWJ1dGUucm91dGluZ0hUVFAyRW5hYmxlZCksXG4gICAgICBlbmFibGVUbHNWZXJzaW9uQW5kQ2lwaGVyU3VpdGVIZWFkZXJzOiB0aGlzLmxhenlCb29sQXR0cihcbiAgICAgICAgQXR0cmlidXRlLnJvdXRpbmdIVFRQWEFtem5UTFNWZXJzaW9uQW5kQ2lwaGVyU3VpdGVFbmFibGVkLFxuICAgICAgKSxcbiAgICAgIGVuYWJsZVdhZkZhaWxPcGVuOiB0aGlzLmxhenlCb29sQXR0cihBdHRyaWJ1dGUud0FGRmFpbE9wZW5FbmFibGVkKSxcbiAgICAgIGVuYWJsZVhmZkNsaWVudFBvcnQ6IHRoaXMubGF6eUJvb2xBdHRyKFxuICAgICAgICBBdHRyaWJ1dGUucm91dGluZ0hUVFBYRkZDbGllbnRQb3J0RW5hYmxlZCxcbiAgICAgICksXG4gICAgICBlbmFibGVab25hbFNoaWZ0OiB0aGlzLmxhenlCb29sQXR0cihBdHRyaWJ1dGUuem9uYWxTaGlmdENvbmZpZ0VuYWJsZWQpLFxuICAgICAgLy8gZW5mb3JjZVNlY3VyaXR5R3JvdXBJbmJvdW5kUnVsZXNPblByaXZhdGVMaW5rVHJhZmZpYyxcbiAgICAgIC8vIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1yZXNvdXJjZS1lbGFzdGljbG9hZGJhbGFuY2luZ3YyLWxvYWRiYWxhbmNlci5odG1sI2Nmbi1lbGFzdGljbG9hZGJhbGFuY2luZ3YyLWxvYWRiYWxhbmNlci1lbmZvcmNlc2VjdXJpdHlncm91cGluYm91bmRydWxlc29ucHJpdmF0ZWxpbmt0cmFmZmljXG4gICAgICBpZGxlVGltZW91dDogdGhpcy5sYXp5TnVtYmVyQXR0cihBdHRyaWJ1dGUuaWRsZVRpbWVvdXRUaW1lb3V0U2Vjb25kcyksXG4gICAgICAvLyBpcEFkZHJlc3NUeXBlXG4gICAgICAvLyBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcmVzb3VyY2UtZWxhc3RpY2xvYWRiYWxhbmNpbmd2Mi1sb2FkYmFsYW5jZXIuaHRtbCNjZm4tZWxhc3RpY2xvYWRiYWxhbmNpbmd2Mi1sb2FkYmFsYW5jZXItaXBhZGRyZXNzdHlwZVxuICAgICAgcHJlc2VydmVIb3N0SGVhZGVyOiB0aGlzLmxhenlCb29sQXR0cihcbiAgICAgICAgQXR0cmlidXRlLnJvdXRpbmdIVFRQUHJlc2VydmVIb3N0SGVhZGVyRW5hYmxlZCxcbiAgICAgICksXG4gICAgICB4ZmZIZWFkZXJQcm9jZXNzaW5nTW9kZTogdGhpcy5sYXp5U3RyaW5nQXR0cihcbiAgICAgICAgQXR0cmlidXRlLnJvdXRpbmdIVFRQWEZGSGVhZGVyUHJvY2Vzc2luZ01vZGUsXG4gICAgICApLFxuICAgICAgLy8gLy8gdGhpcyByZXN1bHRzIGluIGVtcHR5IGBhY2Nlc3NfbG9nczoge31gIHdoaWNoIGlzIG5vdCB2YWxpZCAoYnVja2V0IGlzIHJlcXVpcmVkKVxuICAgICAgLy8gYWNjZXNzTG9nczoge1xuICAgICAgLy8gICBlbmFibGVkOiB0aGlzLmxhenlCb29sQXR0cihBdHRyaWJ1dGUuYWNjZXNzTG9nc1MzRW5hYmxlZCksXG4gICAgICAvLyAgIGJ1Y2tldDogdGhpcy5sYXp5U3RyaW5nQXR0cihBdHRyaWJ1dGUuYWNjZXNzTG9nc1MzQnVja2V0KSxcbiAgICAgIC8vICAgcHJlZml4OiB0aGlzLmxhenlTdHJpbmdBdHRyKEF0dHJpYnV0ZS5hY2Nlc3NMb2dzUzNQcmVmaXgpLFxuICAgICAgLy8gfSxcbiAgICAgIC8vIC8vIHRoaXMgcmVzdWx0cyBpbiBlbXB0eSBgY29ubmVjdGlvbl9sb2dzOiB7fWAgd2hpY2ggaXMgbm90IHZhbGlkIChidWNrZXQgaXMgcmVxdWlyZWQpXG4gICAgICAvLyBjb25uZWN0aW9uTG9nczoge1xuICAgICAgLy8gICBlbmFibGVkOiB0aGlzLmxhenlCb29sQXR0cihBdHRyaWJ1dGUuY29ubmVjdGlvbkxvZ3NTM0VuYWJsZWQpLFxuICAgICAgLy8gICBidWNrZXQ6IHRoaXMubGF6eVN0cmluZ0F0dHIoQXR0cmlidXRlLmNvbm5lY3Rpb25Mb2dzUzNCdWNrZXQpLFxuICAgICAgLy8gICBwcmVmaXg6IHRoaXMubGF6eVN0cmluZ0F0dHIoQXR0cmlidXRlLmNvbm5lY3Rpb25Mb2dzUzNQcmVmaXgpLFxuICAgICAgLy8gfSxcbiAgICAgIC8vc3VibmV0TWFwcGluZ3NcbiAgICAgIC8vIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1yZXNvdXJjZS1lbGFzdGljbG9hZGJhbGFuY2luZ3YyLWxvYWRiYWxhbmNlci5odG1sI2Nmbi1lbGFzdGljbG9hZGJhbGFuY2luZ3YyLWxvYWRiYWxhbmNlci1zdWJuZXRtYXBwaW5nc1xuICAgICAgLi4uYWRkaXRpb25hbFByb3BzLFxuICAgIH0pO1xuICAgIGlmIChpbnRlcm5ldEZhY2luZykge1xuICAgICAgcmVzb3VyY2Uubm9kZS5hZGREZXBlbmRlbmN5KGludGVybmV0Q29ubmVjdGl2aXR5RXN0YWJsaXNoZWQpO1xuICAgIH1cblxuICAgIHRoaXMuc2V0QXR0cmlidXRlKFxuICAgICAgQXR0cmlidXRlLmRlbGV0aW9uUHJvdGVjdGlvbkVuYWJsZWQsXG4gICAgICBiYXNlUHJvcHMuZGVsZXRpb25Qcm90ZWN0aW9uID8gXCJ0cnVlXCIgOiBcImZhbHNlXCIsXG4gICAgKTtcblxuICAgIGlmIChiYXNlUHJvcHMuY3Jvc3Nab25lRW5hYmxlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnNldEF0dHJpYnV0ZShcbiAgICAgICAgQXR0cmlidXRlLmxvYWRCYWxhbmNpbmdDcm9zc1pvbmVFbmFibGVkLFxuICAgICAgICBiYXNlUHJvcHMuY3Jvc3Nab25lRW5hYmxlZCA9PT0gdHJ1ZSA/IFwidHJ1ZVwiIDogXCJmYWxzZVwiLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoYmFzZVByb3BzLmRlbnlBbGxJZ3dUcmFmZmljICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChhZGRpdGlvbmFsUHJvcHMuaXBBZGRyZXNzVHlwZSA9PT0gSXBBZGRyZXNzVHlwZS5EVUFMX1NUQUNLKSB7XG4gICAgICAgIHRoaXMuc2V0QXR0cmlidXRlKFxuICAgICAgICAgIEF0dHJpYnV0ZS5pUHY2RGVueUFsbElHV1RyYWZmaWMsXG4gICAgICAgICAgYmFzZVByb3BzLmRlbnlBbGxJZ3dUcmFmZmljLnRvU3RyaW5nKCksXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYCdkZW55QWxsSWd3VHJhZmZpYycgbWF5IG9ubHkgYmUgc2V0IG9uIGxvYWQgYmFsYW5jZXJzIHdpdGggJHtJcEFkZHJlc3NUeXBlLkRVQUxfU1RBQ0t9IGFkZHJlc3NpbmcuYCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmxvYWRCYWxhbmNlckNhbm9uaWNhbEhvc3RlZFpvbmVJZCA9IHJlc291cmNlLnpvbmVJZDtcbiAgICB0aGlzLmxvYWRCYWxhbmNlckRuc05hbWUgPSByZXNvdXJjZS5kbnNOYW1lO1xuICAgIHRoaXMubG9hZEJhbGFuY2VyRnVsbE5hbWUgPSB0aGlzLnN0YWNrLnNwbGl0QXJuKFxuICAgICAgcmVzb3VyY2UuYXJuLFxuICAgICAgQXJuRm9ybWF0LlNMQVNIX1JFU09VUkNFX05BTUUsXG4gICAgKS5yZXNvdXJjZTtcbiAgICB0aGlzLmxvYWRCYWxhbmNlck5hbWUgPSByZXNvdXJjZS5uYW1lO1xuICAgIHRoaXMubG9hZEJhbGFuY2VyQXJuID0gcmVzb3VyY2UuYXJuO1xuICAgIHRoaXMubG9hZEJhbGFuY2VyU2VjdXJpdHlHcm91cHMgPSByZXNvdXJjZS5zZWN1cml0eUdyb3VwcztcblxuICAgIHRoaXMubm9kZS5hZGRWYWxpZGF0aW9uKHsgdmFsaWRhdGU6IHRoaXMudmFsaWRhdGVMb2FkQmFsYW5jZXIuYmluZCh0aGlzKSB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbmFibGUgYWNjZXNzIGxvZ2dpbmcgZm9yIHRoaXMgbG9hZCBiYWxhbmNlci5cbiAgICpcbiAgICogQSByZWdpb24gbXVzdCBiZSBzcGVjaWZpZWQgb24gdGhlIHN0YWNrIGNvbnRhaW5pbmcgdGhlIGxvYWQgYmFsYW5jZXI7IHlvdSBjYW5ub3QgZW5hYmxlIGxvZ2dpbmcgb25cbiAgICogZW52aXJvbm1lbnQtYWdub3N0aWMgc3RhY2tzLiBTZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Nkay9sYXRlc3QvZ3VpZGUvZW52aXJvbm1lbnRzLmh0bWxcbiAgICovXG4gIHB1YmxpYyBsb2dBY2Nlc3NMb2dzKGJ1Y2tldDogczMuSUJ1Y2tldCwgcHJlZml4Pzogc3RyaW5nKSB7XG4gICAgLy8gcHJlZml4ID0gcHJlZml4OyAvLyBvcHRpb25hbCBpbiBURi4uLiB8fCBcIlwiO1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKFwiYWNjZXNzX2xvZ3MuczMuZW5hYmxlZFwiLCBcInRydWVcIik7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJhY2Nlc3NfbG9ncy5zMy5idWNrZXRcIiwgYnVja2V0LmJ1Y2tldE5hbWUudG9TdHJpbmcoKSk7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoXCJhY2Nlc3NfbG9ncy5zMy5wcmVmaXhcIiwgcHJlZml4KTtcblxuICAgIGNvbnN0IGxvZ3NEZWxpdmVyeVNlcnZpY2VQcmluY2lwYWwgPSBuZXcgU2VydmljZVByaW5jaXBhbChcbiAgICAgIFwiZGVsaXZlcnkubG9ncy5hbWF6b25hd3MuY29tXCIsXG4gICAgKTtcbiAgICBidWNrZXQuYWRkVG9SZXNvdXJjZVBvbGljeShcbiAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBhY3Rpb25zOiBbXCJzMzpQdXRPYmplY3RcIl0sXG4gICAgICAgIHByaW5jaXBhbHM6IFt0aGlzLnJlc291cmNlUG9saWN5UHJpbmNpcGFsKCldLFxuICAgICAgICByZXNvdXJjZXM6IFtcbiAgICAgICAgICBidWNrZXQuYXJuRm9yT2JqZWN0cyhcbiAgICAgICAgICAgIGAke3ByZWZpeCA/IHByZWZpeCArIFwiL1wiIDogXCJcIn1BV1NMb2dzLyR7QXdzU3RhY2sub2ZBd3NDb25zdHJ1Y3QodGhpcykuYWNjb3VudH0vKmAsXG4gICAgICAgICAgKSxcbiAgICAgICAgXSxcbiAgICAgIH0pLFxuICAgICk7XG4gICAgYnVja2V0LmFkZFRvUmVzb3VyY2VQb2xpY3koXG4gICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgYWN0aW9uczogW1wiczM6UHV0T2JqZWN0XCJdLFxuICAgICAgICBwcmluY2lwYWxzOiBbbG9nc0RlbGl2ZXJ5U2VydmljZVByaW5jaXBhbF0sXG4gICAgICAgIHJlc291cmNlczogW1xuICAgICAgICAgIGJ1Y2tldC5hcm5Gb3JPYmplY3RzKFxuICAgICAgICAgICAgYCR7cHJlZml4ID8gcHJlZml4ICsgXCIvXCIgOiBcIlwifUFXU0xvZ3MvJHt0aGlzLmVudi5hY2NvdW50fS8qYCxcbiAgICAgICAgICApLFxuICAgICAgICBdLFxuICAgICAgICBjb25kaXRpb246IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0ZXN0OiBcIlN0cmluZ0VxdWFsc1wiLFxuICAgICAgICAgICAgdmFyaWFibGU6IFwiczM6eC1hbXotYWNsXCIsXG4gICAgICAgICAgICB2YWx1ZXM6IFtcImJ1Y2tldC1vd25lci1mdWxsLWNvbnRyb2xcIl0sXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0pLFxuICAgICk7XG4gICAgYnVja2V0LmFkZFRvUmVzb3VyY2VQb2xpY3koXG4gICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgYWN0aW9uczogW1wiczM6R2V0QnVja2V0QWNsXCJdLFxuICAgICAgICBwcmluY2lwYWxzOiBbbG9nc0RlbGl2ZXJ5U2VydmljZVByaW5jaXBhbF0sXG4gICAgICAgIHJlc291cmNlczogW2J1Y2tldC5idWNrZXRBcm5dLFxuICAgICAgfSksXG4gICAgKTtcblxuICAgIC8vIG1ha2Ugc3VyZSB0aGUgYnVja2V0J3MgcG9saWN5IGlzIGNyZWF0ZWQgYmVmb3JlIHRoZSBBTEIgKHNlZSBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvaXNzdWVzLzE2MzMpXG4gICAgLy8gYXQgdGhlIEwxIGxldmVsIHRvIGF2b2lkIGNyZWF0aW5nIGEgY2lyY3VsYXIgZGVwZW5kZW5jeSAoc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9pc3N1ZXMvMjc1MjhcbiAgICAvLyBhbmQgaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2lzc3Vlcy8yNzkyOClcbiAgICBjb25zdCBsYiA9IHRoaXMubm9kZS5kZWZhdWx0Q2hpbGQgYXMgdGZMb2FkQmFsYW5jZXIuTGI7XG4gICAgY29uc3QgYnVja2V0UG9saWN5ID0gYnVja2V0LnBvbGljeT8ubm9kZS5kZWZhdWx0Q2hpbGQ7XG4gICAgaWYgKFxuICAgICAgbGIgJiZcbiAgICAgIGJ1Y2tldFBvbGljeSAmJlxuICAgICAgVGVycmFmb3JtUmVzb3VyY2UuaXNUZXJyYWZvcm1SZXNvdXJjZShsYikgJiZcbiAgICAgIFRlcnJhZm9ybVJlc291cmNlLmlzVGVycmFmb3JtUmVzb3VyY2UoYnVja2V0UG9saWN5KVxuICAgICkge1xuICAgICAgbGIubm9kZS5hZGREZXBlbmRlbmN5KGJ1Y2tldFBvbGljeSk7XG4gICAgfVxuICAgIC8vIFRPRE86IFNob3VsZCBwdXRBY2Nlc3NMb2dzIGJlIGhhbmRsZWQgYXMgcGFydCBvZiBwcmVwYXJlU3RhY2sgKGluIHRvVGVycmFmb3JtKCkgaW5zdGVhZCk/XG4gICAgLy8gb25seSBpZiBsYi5hY2Nlc3NMb2dzLmludGVybmFsVmFsdWUgIT09IHVuZGVmaW5lZD8gKG9yIGJhc2VkIG9uIHRoaXMuYXR0cmlidXRlcz8pXG4gICAgbGIucHV0QWNjZXNzTG9ncyh7XG4gICAgICBlbmFibGVkOiB0aGlzLmxhenlCb29sQXR0cihBdHRyaWJ1dGUuYWNjZXNzTG9nc1MzRW5hYmxlZCksXG4gICAgICBidWNrZXQ6IHRoaXMubGF6eVN0cmluZ0F0dHIoQXR0cmlidXRlLmFjY2Vzc0xvZ3NTM0J1Y2tldCksXG4gICAgICBwcmVmaXg6IHRoaXMubGF6eVN0cmluZ0F0dHIoQXR0cmlidXRlLmFjY2Vzc0xvZ3NTM1ByZWZpeCksXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogU2V0IGEgbm9uLXN0YW5kYXJkIGF0dHJpYnV0ZSBvbiB0aGUgbG9hZCBiYWxhbmNlclxuICAgKlxuICAgKiBVc2UgdGhlIGRlZGljYXRlZCBsb2dBY2Nlc3NMb2dzKCkgbWV0aG9kIGludGVhZCBvZiBzZXRBdHRyaWJ1dGUgaWYgeW91IHdhbnQgdG8gc2V0dXAgYWNjZXNzIGxvZ2dpbmcuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2VsYXN0aWNsb2FkYmFsYW5jaW5nL2xhdGVzdC9hcHBsaWNhdGlvbi9hcHBsaWNhdGlvbi1sb2FkLWJhbGFuY2Vycy5odG1sI2xvYWQtYmFsYW5jZXItYXR0cmlidXRlc1xuICAgKi9cbiAgcHVibGljIHNldEF0dHJpYnV0ZShrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuYXR0cmlidXRlc1trZXldID0gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGFuIGF0dHJpYnV0ZSBmcm9tIHRoZSBsb2FkIGJhbGFuY2VyXG4gICAqL1xuICBwdWJsaWMgcmVtb3ZlQXR0cmlidXRlKGtleTogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUoa2V5LCB1bmRlZmluZWQpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGxhenlTdHJpbmdBdHRyKGtleTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIExhenkuc3RyaW5nVmFsdWUoe1xuICAgICAgcHJvZHVjZTogKCkgPT4gbG9va3VwU3RyaW5nQXR0cmlidXRlKHRoaXMuYXR0cmlidXRlcywga2V5KSxcbiAgICB9KTtcbiAgfVxuICBwcm90ZWN0ZWQgbGF6eUJvb2xBdHRyKGtleTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIExhenkuYW55VmFsdWUoe1xuICAgICAgcHJvZHVjZTogKCkgPT4gbG9va3VwQm9vbEF0dHJpYnV0ZSh0aGlzLmF0dHJpYnV0ZXMsIGtleSksXG4gICAgfSk7XG4gIH1cbiAgcHJvdGVjdGVkIGxhenlOdW1iZXJBdHRyKGtleTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIExhenkubnVtYmVyVmFsdWUoe1xuICAgICAgcHJvZHVjZTogKCkgPT4gbG9va3VwTnVtYmVyQXR0cmlidXRlKHRoaXMuYXR0cmlidXRlcywga2V5KSxcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCByZXNvdXJjZVBvbGljeVByaW5jaXBhbCgpOiBpYW0uSVByaW5jaXBhbCB7XG4gICAgY29uc3QgcmVnaW9uID0gdGhpcy5zdGFjay5yZWdpb247XG4gICAgaWYgKFRva2VuLmlzVW5yZXNvbHZlZChyZWdpb24pKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJSZWdpb24gaXMgcmVxdWlyZWQgdG8gZW5hYmxlIEVMQnYyIGFjY2VzcyBsb2dnaW5nXCIpO1xuICAgIH1cblxuICAgIC8vIGNvbnN0IGFjY291bnQgPSBSZWdpb25JbmZvLmdldChyZWdpb24pLmVsYnYyQWNjb3VudDtcbiAgICBjb25zdCBhY2NvdW50ID0gZ2V0RWxidjJBY2NvdW50KHJlZ2lvbik7XG4gICAgaWYgKCFhY2NvdW50KSB7XG4gICAgICAvLyBOZXcgUmVnaW9ucyB1c2UgYSBzZXJ2aWNlIHByaW5jaXBhbFxuICAgICAgLy8gaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2VsYXN0aWNsb2FkYmFsYW5jaW5nL2xhdGVzdC9jbGFzc2ljL2VuYWJsZS1hY2Nlc3MtbG9ncy5odG1sI2F0dGFjaC1idWNrZXQtcG9saWN5XG4gICAgICByZXR1cm4gbmV3IGlhbS5TZXJ2aWNlUHJpbmNpcGFsKFxuICAgICAgICBcImxvZ2RlbGl2ZXJ5LmVsYXN0aWNsb2FkYmFsYW5jaW5nLmFtYXpvbmF3cy5jb21cIixcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBpYW0uQWNjb3VudFByaW5jaXBhbChhY2NvdW50KTtcbiAgfVxuXG4gIHByb3RlY3RlZCB2YWxpZGF0ZUxvYWRCYWxhbmNlcigpOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgcmV0ID0gbmV3IEFycmF5PHN0cmluZz4oKTtcblxuICAgIC8vIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1yZXNvdXJjZS1lbGFzdGljbG9hZGJhbGFuY2luZ3YyLWxvYWRiYWxhbmNlci5odG1sI2Nmbi1lbGFzdGljbG9hZGJhbGFuY2luZ3YyLWxvYWRiYWxhbmNlci1uYW1lXG4gICAgY29uc3QgbG9hZEJhbGFuY2VyTmFtZSA9IHRoaXMucGh5c2ljYWxOYW1lO1xuICAgIGlmIChcbiAgICAgICFUb2tlbi5pc1VucmVzb2x2ZWQobG9hZEJhbGFuY2VyTmFtZSkgJiZcbiAgICAgIGxvYWRCYWxhbmNlck5hbWUgIT09IHVuZGVmaW5lZFxuICAgICkge1xuICAgICAgaWYgKGxvYWRCYWxhbmNlck5hbWUubGVuZ3RoID4gMzIpIHtcbiAgICAgICAgcmV0LnB1c2goXG4gICAgICAgICAgYExvYWQgYmFsYW5jZXIgbmFtZTogXCIke2xvYWRCYWxhbmNlck5hbWV9XCIgY2FuIGhhdmUgYSBtYXhpbXVtIG9mIDMyIGNoYXJhY3RlcnMuYCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmIChsb2FkQmFsYW5jZXJOYW1lLnN0YXJ0c1dpdGgoXCJpbnRlcm5hbC1cIikpIHtcbiAgICAgICAgcmV0LnB1c2goXG4gICAgICAgICAgYExvYWQgYmFsYW5jZXIgbmFtZTogXCIke2xvYWRCYWxhbmNlck5hbWV9XCIgbXVzdCBub3QgYmVnaW4gd2l0aCBcImludGVybmFsLVwiLmAsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAobG9hZEJhbGFuY2VyTmFtZS5zdGFydHNXaXRoKFwiLVwiKSB8fCBsb2FkQmFsYW5jZXJOYW1lLmVuZHNXaXRoKFwiLVwiKSkge1xuICAgICAgICByZXQucHVzaChcbiAgICAgICAgICBgTG9hZCBiYWxhbmNlciBuYW1lOiBcIiR7bG9hZEJhbGFuY2VyTmFtZX1cIiBtdXN0IG5vdCBiZWdpbiBvciBlbmQgd2l0aCBhIGh5cGhlbi5gLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKCEvXlswLTlhLXotXSskL2kudGVzdChsb2FkQmFsYW5jZXJOYW1lKSkge1xuICAgICAgICByZXQucHVzaChcbiAgICAgICAgICBgTG9hZCBiYWxhbmNlciBuYW1lOiBcIiR7bG9hZEJhbGFuY2VyTmFtZX1cIiBtdXN0IGNvbnRhaW4gb25seSBhbHBoYW51bWVyaWMgY2hhcmFjdGVycyBvciBoeXBoZW5zLmAsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJldDtcbiAgfVxufVxuIl19
|