terraconstructs 0.0.11 → 0.0.12
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 +104486 -34582
- 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.js +3 -3
- 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,408 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var _a, _b;
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.VpcV2 = exports.IpAddresses = 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/aws-ec2-alpha/lib/vpc-v2.ts
|
|
7
|
+
const provider_aws_1 = require("@cdktf/provider-aws");
|
|
8
|
+
const constructs_1 = require("constructs");
|
|
9
|
+
const aws_construct_1 = require("../aws-construct");
|
|
10
|
+
const aws_stack_1 = require("../aws-stack");
|
|
11
|
+
// TODO: Use TagManager and tag-aspect instead
|
|
12
|
+
const aws_tags_1 = require("../aws-tags");
|
|
13
|
+
const vpc_1 = require("./vpc");
|
|
14
|
+
const arn_1 = require("../arn");
|
|
15
|
+
const subnet_v2_1 = require("./subnet-v2");
|
|
16
|
+
const vpc_v2_base_1 = require("./vpc-v2-base");
|
|
17
|
+
/**
|
|
18
|
+
* IpAddress options to define VPC V2
|
|
19
|
+
*/
|
|
20
|
+
class IpAddresses {
|
|
21
|
+
/**
|
|
22
|
+
* An IPv4 CIDR Range
|
|
23
|
+
*/
|
|
24
|
+
static ipv4(ipv4Cidr, props) {
|
|
25
|
+
return new ipv4CidrAllocation(ipv4Cidr, props);
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* An Ipv4 Ipam Pool
|
|
29
|
+
*/
|
|
30
|
+
static ipv4Ipam(ipv4IpamOptions) {
|
|
31
|
+
return new IpamIpv4(ipv4IpamOptions);
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* An Ipv6 Ipam Pool
|
|
35
|
+
*/
|
|
36
|
+
static ipv6Ipam(ipv6IpamOptions) {
|
|
37
|
+
return new IpamIpv6(ipv6IpamOptions);
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Amazon Provided Ipv6 range
|
|
41
|
+
*/
|
|
42
|
+
static amazonProvidedIpv6(props) {
|
|
43
|
+
return new AmazonProvided(props);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
exports.IpAddresses = IpAddresses;
|
|
47
|
+
_a = JSII_RTTI_SYMBOL_1;
|
|
48
|
+
IpAddresses[_a] = { fqn: "terraconstructs.aws.compute.alpha.IpAddresses", version: "0.0.12" };
|
|
49
|
+
/**
|
|
50
|
+
* Name tag constant
|
|
51
|
+
*/
|
|
52
|
+
const NAME_TAG = "Name";
|
|
53
|
+
/**
|
|
54
|
+
* This class provides a foundation for creating and configuring a VPC with advanced features such as IPAM (IP Address Management) and IPv6 support.
|
|
55
|
+
*
|
|
56
|
+
* For more information, see the {@link https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_ec2.Vpc.html|AWS CDK Documentation on VPCs}.
|
|
57
|
+
*
|
|
58
|
+
* @resource aws_vpc
|
|
59
|
+
*/
|
|
60
|
+
class VpcV2 extends vpc_v2_base_1.VpcV2Base {
|
|
61
|
+
/**
|
|
62
|
+
* Create a VPC from existing attributes
|
|
63
|
+
*/
|
|
64
|
+
static fromVpcV2Attributes(scope, id, attrs) {
|
|
65
|
+
/**
|
|
66
|
+
* Internal class to allow users to import VPC
|
|
67
|
+
* @internal
|
|
68
|
+
*/
|
|
69
|
+
class ImportedVpcV2 extends vpc_v2_base_1.VpcV2Base {
|
|
70
|
+
constructor(construct, constructId, props) {
|
|
71
|
+
super(construct, constructId);
|
|
72
|
+
this.publicSubnets = [];
|
|
73
|
+
this.privateSubnets = [];
|
|
74
|
+
this.isolatedSubnets = [];
|
|
75
|
+
this.internetConnectivityEstablished = new constructs_1.DependencyGroup();
|
|
76
|
+
// Required to do CIDR range test on imported VPCs to create new subnets
|
|
77
|
+
this.ipv4IpamProvisionedCidrs = [];
|
|
78
|
+
(this.vpcId = props.vpcId),
|
|
79
|
+
(this.region = props.region ?? this.stack.region),
|
|
80
|
+
(this.ownerAccountId = props.ownerAccountId ?? this.stack.account),
|
|
81
|
+
(this._partition = aws_stack_1.AwsStack.ofAwsConstruct(this).partition),
|
|
82
|
+
(this.vpcArn = arn_1.Arn.format({
|
|
83
|
+
service: "ec2",
|
|
84
|
+
resource: "vpc",
|
|
85
|
+
resourceName: this.vpcId,
|
|
86
|
+
region: this.region,
|
|
87
|
+
account: this.ownerAccountId,
|
|
88
|
+
partition: this._partition,
|
|
89
|
+
}, this.stack));
|
|
90
|
+
// Populate region and account fields that can be used to set up peering connection
|
|
91
|
+
// sample vpc Arn - arn:aws:ec2:us-west-2:123456789012:vpc/vpc-0123456789abcdef0
|
|
92
|
+
this.region = this.vpcArn.split(":")[3];
|
|
93
|
+
this.ownerAccountId = this.vpcArn.split(":")[4];
|
|
94
|
+
// Refers to actual VPC Resource attribute in non-imported VPC
|
|
95
|
+
this.vpcCidrBlock = props.vpcCidrBlock;
|
|
96
|
+
// Required for subnet range related checks
|
|
97
|
+
this.ipv4CidrBlock = props.vpcCidrBlock;
|
|
98
|
+
this._vpnGatewayId = props.vpnGatewayId;
|
|
99
|
+
if (props.subnets) {
|
|
100
|
+
for (const subnet of props.subnets) {
|
|
101
|
+
if (subnet.subnetType === vpc_1.SubnetType.PRIVATE_WITH_EGRESS ||
|
|
102
|
+
subnet.subnetType === vpc_1.SubnetType.PRIVATE_WITH_NAT ||
|
|
103
|
+
subnet.subnetType === vpc_1.SubnetType.PRIVATE) {
|
|
104
|
+
this.privateSubnets.push(subnet_v2_1.SubnetV2.fromSubnetV2Attributes(scope, subnet.subnetName ?? "ImportedPrivateSubnet", subnet));
|
|
105
|
+
}
|
|
106
|
+
else if (subnet.subnetType === vpc_1.SubnetType.PUBLIC) {
|
|
107
|
+
this.publicSubnets.push(subnet_v2_1.SubnetV2.fromSubnetV2Attributes(scope, subnet.subnetName ?? "ImportedPublicSubnet", subnet));
|
|
108
|
+
}
|
|
109
|
+
else if (subnet.subnetType === vpc_1.SubnetType.ISOLATED ||
|
|
110
|
+
subnet.subnetType === vpc_1.SubnetType.PRIVATE_ISOLATED) {
|
|
111
|
+
this.isolatedSubnets.push(subnet_v2_1.SubnetV2.fromSubnetV2Attributes(scope, subnet.subnetName ?? "ImportedIsolatedSubnet", subnet));
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
this.secondaryCidrBlock = props.secondaryCidrBlocks?.map((cidrBlock) => VPCCidrBlock.fromVPCCidrBlockattributes(scope, cidrBlock.cidrBlockName ?? "ImportedSecondaryCidrBlock", { ...cidrBlock }));
|
|
116
|
+
if (props.secondaryCidrBlocks) {
|
|
117
|
+
for (const cidrBlock of props.secondaryCidrBlocks) {
|
|
118
|
+
if (cidrBlock.ipv4IpamProvisionedCidrs) {
|
|
119
|
+
this.ipv4IpamProvisionedCidrs.push(...cidrBlock.ipv4IpamProvisionedCidrs);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
return new ImportedVpcV2(scope, id, attrs);
|
|
126
|
+
}
|
|
127
|
+
constructor(scope, id, props = {}) {
|
|
128
|
+
super(scope, id, props);
|
|
129
|
+
/**
|
|
130
|
+
* reference to all secondary blocks attached
|
|
131
|
+
*/
|
|
132
|
+
this.secondaryCidrBlock = new Array();
|
|
133
|
+
/**
|
|
134
|
+
* For validation to define IPv6 subnets, set to true in case of
|
|
135
|
+
* Amazon Provided IPv6 cidr range
|
|
136
|
+
* if true, IPv6 addresses can be attached to the subnets.
|
|
137
|
+
*
|
|
138
|
+
* @default false
|
|
139
|
+
*/
|
|
140
|
+
this.useIpv6 = false;
|
|
141
|
+
this.ipv4CidrBlock = "";
|
|
142
|
+
// // No Lazy.stringValue ?
|
|
143
|
+
// const physicalName =
|
|
144
|
+
// props.vpcName ??
|
|
145
|
+
// AwsStack.uniqueResourceName(this, {
|
|
146
|
+
// maxLength: 128,
|
|
147
|
+
// allowedSpecialCharacters: "_",
|
|
148
|
+
// });
|
|
149
|
+
this.vpcName = props.vpcName;
|
|
150
|
+
this.ipAddresses =
|
|
151
|
+
props.primaryAddressBlock ?? IpAddresses.ipv4("10.0.0.0/16");
|
|
152
|
+
const vpcOptions = this.ipAddresses.allocateVpcCidr();
|
|
153
|
+
this.dnsHostnamesEnabled =
|
|
154
|
+
props.enableDnsHostnames == null ? true : props.enableDnsHostnames;
|
|
155
|
+
this.dnsSupportEnabled =
|
|
156
|
+
props.enableDnsSupport == null ? true : props.enableDnsSupport;
|
|
157
|
+
const instanceTenancy = props.defaultInstanceTenancy || "default";
|
|
158
|
+
this.resource = new provider_aws_1.vpc.Vpc(this, "Resource", {
|
|
159
|
+
cidrBlock: vpcOptions.ipv4CidrBlock, //for Ipv4 addresses CIDR block
|
|
160
|
+
enableDnsHostnames: this.dnsHostnamesEnabled,
|
|
161
|
+
enableDnsSupport: this.dnsSupportEnabled,
|
|
162
|
+
ipv4IpamPoolId: vpcOptions.ipv4IpamPool?.ipamPoolId, // for Ipv4 ipam option
|
|
163
|
+
ipv4NetmaskLength: vpcOptions.ipv4NetmaskLength, // for Ipv4 ipam option
|
|
164
|
+
instanceTenancy: instanceTenancy,
|
|
165
|
+
});
|
|
166
|
+
this.node.defaultChild = this.resource;
|
|
167
|
+
this.vpcCidrBlock = this.resource.cidrBlock;
|
|
168
|
+
if (vpcOptions.ipv4CidrBlock) {
|
|
169
|
+
this.ipv4CidrBlock = vpcOptions.ipv4CidrBlock;
|
|
170
|
+
}
|
|
171
|
+
// TODO: Additional cidr blocks?
|
|
172
|
+
this.ipv6CidrBlocks = [this.resource.ipv6CidrBlock];
|
|
173
|
+
this.vpcId = this.resource.id;
|
|
174
|
+
this.vpcArn = arn_1.Arn.format({
|
|
175
|
+
service: "ec2",
|
|
176
|
+
resource: "vpc",
|
|
177
|
+
resourceName: this.vpcId,
|
|
178
|
+
}, this.stack);
|
|
179
|
+
this.region = this.stack.region;
|
|
180
|
+
this.ownerAccountId = this.stack.account;
|
|
181
|
+
// Add tag to the VPC with the name provided in properties
|
|
182
|
+
aws_tags_1.Tags.of(this).add(NAME_TAG, props.vpcName || this.node.path);
|
|
183
|
+
if (props.secondaryAddressBlocks) {
|
|
184
|
+
const secondaryAddressBlocks = props.secondaryAddressBlocks;
|
|
185
|
+
for (const secondaryAddressBlock of secondaryAddressBlocks) {
|
|
186
|
+
const secondaryVpcOptions = secondaryAddressBlock.allocateVpcCidr();
|
|
187
|
+
if (!secondaryVpcOptions.cidrBlockName) {
|
|
188
|
+
throw new Error("Cidr Block Name is required to create secondary IP address");
|
|
189
|
+
}
|
|
190
|
+
if (secondaryVpcOptions.amazonProvided ||
|
|
191
|
+
secondaryVpcOptions.ipv6IpamPool) {
|
|
192
|
+
this.useIpv6 = true;
|
|
193
|
+
}
|
|
194
|
+
//validate CIDR ranges per RFC 1918
|
|
195
|
+
if (secondaryVpcOptions.ipv4CidrBlock) {
|
|
196
|
+
const ret = validateIpv4address(secondaryVpcOptions.ipv4CidrBlock, this.resource.cidrBlockInput);
|
|
197
|
+
if (ret === false) {
|
|
198
|
+
throw new Error("CIDR block should be in the same RFC 1918 range in the VPC");
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
if (secondaryVpcOptions.ipv4IpamProvisionedCidrs) {
|
|
202
|
+
this.ipv4IpamProvisionedCidrs?.push(...secondaryVpcOptions.ipv4IpamProvisionedCidrs);
|
|
203
|
+
}
|
|
204
|
+
const vpcCidrBlock = new VPCCidrBlock(this, secondaryVpcOptions.cidrBlockName, {
|
|
205
|
+
vpcId: this.vpcId,
|
|
206
|
+
cidrBlock: secondaryVpcOptions.ipv4CidrBlock,
|
|
207
|
+
ipv4IpamPoolId: secondaryVpcOptions.ipv4IpamPool?.ipamPoolId,
|
|
208
|
+
ipv4NetmaskLength: secondaryVpcOptions.ipv4NetmaskLength,
|
|
209
|
+
ipv6NetmaskLength: secondaryVpcOptions.ipv6NetmaskLength,
|
|
210
|
+
ipv6IpamPoolId: secondaryVpcOptions.ipv6IpamPool?.ipamPoolId,
|
|
211
|
+
amazonProvidedIpv6CidrBlock: secondaryVpcOptions.amazonProvided,
|
|
212
|
+
});
|
|
213
|
+
if (secondaryVpcOptions.dependencies) {
|
|
214
|
+
for (const dep of secondaryVpcOptions.dependencies) {
|
|
215
|
+
vpcCidrBlock.node.addDependency(dep);
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
//Create secondary blocks for Ipv4 and Ipv6
|
|
219
|
+
this.secondaryCidrBlock?.push(vpcCidrBlock);
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* Empty array for isolated subnets
|
|
224
|
+
*/
|
|
225
|
+
this.isolatedSubnets = new Array();
|
|
226
|
+
/**
|
|
227
|
+
* Empty array for public subnets
|
|
228
|
+
*/
|
|
229
|
+
this.publicSubnets = new Array();
|
|
230
|
+
/**
|
|
231
|
+
* Empty array for private subnets
|
|
232
|
+
*/
|
|
233
|
+
this.privateSubnets = new Array();
|
|
234
|
+
/**
|
|
235
|
+
* Dependable that can be depended upon to force internet connectivity established on the VPC
|
|
236
|
+
* Add igw to this if its a public subnet
|
|
237
|
+
*/
|
|
238
|
+
this.internetConnectivityEstablished =
|
|
239
|
+
this._internetConnectivityEstablished;
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
exports.VpcV2 = VpcV2;
|
|
243
|
+
_b = JSII_RTTI_SYMBOL_1;
|
|
244
|
+
VpcV2[_b] = { fqn: "terraconstructs.aws.compute.alpha.VpcV2", version: "0.0.12" };
|
|
245
|
+
/**
|
|
246
|
+
* Supports assigning IPv4 address to VPC
|
|
247
|
+
*/
|
|
248
|
+
class ipv4CidrAllocation {
|
|
249
|
+
constructor(cidrBlock, props) {
|
|
250
|
+
this.cidrBlock = cidrBlock;
|
|
251
|
+
this.props = props;
|
|
252
|
+
}
|
|
253
|
+
/**
|
|
254
|
+
* @returns CIDR block provided by the user to set IPv4
|
|
255
|
+
*/
|
|
256
|
+
allocateVpcCidr() {
|
|
257
|
+
return {
|
|
258
|
+
ipv4CidrBlock: this.cidrBlock,
|
|
259
|
+
cidrBlockName: this.props?.cidrBlockName,
|
|
260
|
+
};
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
/**
|
|
264
|
+
* Supports Amazon Provided Ipv6 ranges
|
|
265
|
+
*/
|
|
266
|
+
class AmazonProvided {
|
|
267
|
+
/**
|
|
268
|
+
* Represents an Amazon-provided IPv6 CIDR range for a VPC.
|
|
269
|
+
*
|
|
270
|
+
* This class implements the IIpAddresses interface and is used to allocate an Amazon-provided
|
|
271
|
+
* IPv6 CIDR range for a VPC. When an instance of this class is used to allocate the VPC CIDR,
|
|
272
|
+
* Amazon will automatically assign an IPv6 CIDR range from its pool of available addresses.
|
|
273
|
+
*/
|
|
274
|
+
constructor(props) {
|
|
275
|
+
this.props = props;
|
|
276
|
+
}
|
|
277
|
+
allocateVpcCidr() {
|
|
278
|
+
return {
|
|
279
|
+
amazonProvided: true,
|
|
280
|
+
cidrBlockName: this.props.cidrBlockName,
|
|
281
|
+
};
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
/**
|
|
285
|
+
* Represents an IPv4 address range managed by AWS IP Address Manager (IPAM).
|
|
286
|
+
* @see https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-ipam.html
|
|
287
|
+
*/
|
|
288
|
+
class IpamIpv6 {
|
|
289
|
+
constructor(props) {
|
|
290
|
+
this.props = props;
|
|
291
|
+
}
|
|
292
|
+
allocateVpcCidr() {
|
|
293
|
+
return {
|
|
294
|
+
ipv6NetmaskLength: this.props.netmaskLength,
|
|
295
|
+
ipv6IpamPool: this.props.ipamPool,
|
|
296
|
+
dependencies: this.props.ipamPool?.ipamCidrs.map((c) => c),
|
|
297
|
+
cidrBlockName: this.props.cidrBlockName,
|
|
298
|
+
};
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
/**
|
|
302
|
+
* Represents an IPv4 address range managed by AWS IP Address Manager (IPAM).
|
|
303
|
+
* @see https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-ipam.html
|
|
304
|
+
*/
|
|
305
|
+
class IpamIpv4 {
|
|
306
|
+
constructor(props) {
|
|
307
|
+
this.props = props;
|
|
308
|
+
}
|
|
309
|
+
allocateVpcCidr() {
|
|
310
|
+
return {
|
|
311
|
+
ipv4NetmaskLength: this.props.netmaskLength,
|
|
312
|
+
ipv4IpamPool: this.props.ipamPool,
|
|
313
|
+
cidrBlockName: this.props?.cidrBlockName,
|
|
314
|
+
ipv4IpamProvisionedCidrs: this.props.ipamPool?.ipamIpv4Cidrs,
|
|
315
|
+
};
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
/**
|
|
319
|
+
* Internal L2 to define a new VPC CIDR Block
|
|
320
|
+
*
|
|
321
|
+
* See [VPC CIDR blocks](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-cidr-blocks.html)
|
|
322
|
+
* @internal
|
|
323
|
+
*/
|
|
324
|
+
class VPCCidrBlock extends aws_construct_1.AwsConstructBase {
|
|
325
|
+
/**
|
|
326
|
+
* Import an existing VPC CIDR Block
|
|
327
|
+
*/
|
|
328
|
+
static fromVPCCidrBlockattributes(scope, id, props) {
|
|
329
|
+
class Import extends aws_construct_1.AwsConstructBase {
|
|
330
|
+
constructor() {
|
|
331
|
+
super(...arguments);
|
|
332
|
+
this.outputs = {};
|
|
333
|
+
this.cidrBlock = props.cidrBlock;
|
|
334
|
+
this.amazonProvidedIpv6CidrBlock = props.amazonProvidedIpv6CidrBlock;
|
|
335
|
+
this.ipv6IpamPoolId = props.ipv6IpamPoolId;
|
|
336
|
+
this.ipv4IpamPoolId = props.ipv4IpamPoolId;
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
return new Import(scope, id);
|
|
340
|
+
}
|
|
341
|
+
constructor(scope, id, props) {
|
|
342
|
+
super(scope, id);
|
|
343
|
+
this.outputs = {};
|
|
344
|
+
const isIpv6 = props.amazonProvidedIpv6CidrBlock === true ||
|
|
345
|
+
props.ipv6IpamPoolId != undefined;
|
|
346
|
+
this.resource = isIpv6
|
|
347
|
+
? new provider_aws_1.vpcIpv6CidrBlockAssociation.VpcIpv6CidrBlockAssociation(this, id, {
|
|
348
|
+
vpcId: props.vpcId,
|
|
349
|
+
assignGeneratedIpv6CidrBlock: props.amazonProvidedIpv6CidrBlock,
|
|
350
|
+
ipv6IpamPoolId: props.ipv6IpamPoolId,
|
|
351
|
+
ipv6NetmaskLength: props.ipv6NetmaskLength,
|
|
352
|
+
// ipv6Pool: ??,
|
|
353
|
+
// ipv6CidrBlock: ???,
|
|
354
|
+
})
|
|
355
|
+
: new provider_aws_1.vpcIpv4CidrBlockAssociation.VpcIpv4CidrBlockAssociation(this, id, {
|
|
356
|
+
vpcId: props.vpcId,
|
|
357
|
+
cidrBlock: props.cidrBlock,
|
|
358
|
+
ipv4IpamPoolId: props.ipv4IpamPoolId,
|
|
359
|
+
ipv4NetmaskLength: props.ipv4NetmaskLength,
|
|
360
|
+
});
|
|
361
|
+
this.node.defaultChild = this.resource;
|
|
362
|
+
this.cidrBlock = props.cidrBlock;
|
|
363
|
+
this.ipv6IpamPoolId = props.ipv6IpamPoolId;
|
|
364
|
+
this.ipv4IpamPoolId = props.ipv4IpamPoolId;
|
|
365
|
+
this.amazonProvidedIpv6CidrBlock = props.amazonProvidedIpv6CidrBlock;
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
/**
|
|
369
|
+
* Validates whether a secondary IPv4 address is within the same private IP address range as the primary IPv4 address.
|
|
370
|
+
*
|
|
371
|
+
* @param cidr1 The secondary IPv4 CIDR block to be validated.
|
|
372
|
+
* @param cidr2 The primary IPv4 CIDR block to validate against.
|
|
373
|
+
* @returns True if the secondary IPv4 CIDR block is within the same private IP address range as the primary IPv4 CIDR block, false otherwise.
|
|
374
|
+
* @internal
|
|
375
|
+
* The private IP address ranges are defined by RFC 1918 as 10.0.0.0/8, 172.16.0.0/12, and 192.168.0.0/16.
|
|
376
|
+
*/
|
|
377
|
+
function validateIpv4address(cidr1, cidr2) {
|
|
378
|
+
if (!cidr1 || !cidr2) {
|
|
379
|
+
return false; // Handle cases where CIDR ranges are not provided
|
|
380
|
+
}
|
|
381
|
+
const octetsCidr1 = cidr1
|
|
382
|
+
.split(".")
|
|
383
|
+
.map((octet) => parseInt(octet, 10));
|
|
384
|
+
const octetsCidr2 = cidr2
|
|
385
|
+
.split(".")
|
|
386
|
+
.map((octet) => parseInt(octet, 10));
|
|
387
|
+
if (octetsCidr1.length !== 4 || octetsCidr2.length !== 4) {
|
|
388
|
+
return false; // Handle invalid CIDR ranges
|
|
389
|
+
}
|
|
390
|
+
const ip1 = {
|
|
391
|
+
octet1: octetsCidr1[0],
|
|
392
|
+
octet2: octetsCidr1[1],
|
|
393
|
+
};
|
|
394
|
+
const ip2 = {
|
|
395
|
+
octet1: octetsCidr2[0],
|
|
396
|
+
octet2: octetsCidr2[1],
|
|
397
|
+
};
|
|
398
|
+
return ((ip1.octet1 === 10 && ip2.octet1 === 10) ||
|
|
399
|
+
(ip1.octet1 === 192 &&
|
|
400
|
+
ip1.octet2 === 168 &&
|
|
401
|
+
ip2.octet1 === 192 &&
|
|
402
|
+
ip2.octet2 === 168) ||
|
|
403
|
+
(ip1.octet1 === 172 &&
|
|
404
|
+
ip1.octet2 === 16 &&
|
|
405
|
+
ip2.octet1 === 172 &&
|
|
406
|
+
ip2.octet2 === 16)); // CIDR ranges belong to same private IP address ranges
|
|
407
|
+
}
|
|
408
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidnBjLXYyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2F3cy9jb21wdXRlL3ZwYy12Mi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDZGQUE2RjtBQUU3RixzREFJNkI7QUFFN0IsMkNBQXFFO0FBQ3JFLG9EQUF1RTtBQUN2RSw0Q0FBd0M7QUFDeEMsOENBQThDO0FBQzlDLDBDQUFtQztBQUduQywrQkFBb0U7QUFDcEUsZ0NBQTZCO0FBQzdCLDJDQUFzRTtBQUN0RSwrQ0FBa0Q7QUFhbEQ7O0dBRUc7QUFDSCxNQUFhLFdBQVc7SUFDdEI7O09BRUc7SUFDSSxNQUFNLENBQUMsSUFBSSxDQUNoQixRQUFnQixFQUNoQixLQUE2QjtRQUU3QixPQUFPLElBQUksa0JBQWtCLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFFRDs7T0FFRztJQUNJLE1BQU0sQ0FBQyxRQUFRLENBQUMsZUFBNEI7UUFDakQsT0FBTyxJQUFJLFFBQVEsQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxNQUFNLENBQUMsUUFBUSxDQUFDLGVBQTRCO1FBQ2pELE9BQU8sSUFBSSxRQUFRLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVEOztPQUVHO0lBQ0ksTUFBTSxDQUFDLGtCQUFrQixDQUFDLEtBQTRCO1FBQzNELE9BQU8sSUFBSSxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbkMsQ0FBQzs7QUE5Qkgsa0NBK0JDOzs7QUFvRkQ7O0dBRUc7QUFDSCxNQUFNLFFBQVEsR0FBVyxNQUFNLENBQUM7QUFtSGhDOzs7Ozs7R0FNRztBQUNILE1BQWEsS0FBTSxTQUFRLHVCQUFTO0lBQ2xDOztPQUVHO0lBQ0ksTUFBTSxDQUFDLG1CQUFtQixDQUMvQixLQUFnQixFQUNoQixFQUFVLEVBQ1YsS0FBc0I7UUFFdEI7OztXQUdHO1FBQ0gsTUFBTSxhQUFjLFNBQVEs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QUMsQ0FBQyxDQUFDO1FBQ3RCLE1BQU0sRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDO0tBQ3ZCLENBQUM7SUFFRixNQUFNLEdBQUcsR0FBb0I7UUFDM0IsTUFBTSxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUM7UUFDdEIsTUFBTSxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUM7S0FDdkIsQ0FBQztJQUVGLE9BQU8sQ0FDTCxDQUFDLEdBQUcsQ0FBQyxNQUFNLEtBQUssRUFBRSxJQUFJLEdBQUcsQ0FBQyxNQUFNLEtBQUssRUFBRSxDQUFDO1FBQ3hDLENBQUMsR0FBRyxDQUFDLE1BQU0sS0FBSyxHQUFHO1lBQ2pCLEdBQUcsQ0FBQyxNQUFNLEtBQUssR0FBRztZQUNsQixHQUFHLENBQUMsTUFBTSxLQUFLLEdBQUc7WUFDbEIsR0FBRyxDQUFDLE1BQU0sS0FBSyxHQUFHLENBQUM7UUFDckIsQ0FBQyxHQUFHLENBQUMsTUFBTSxLQUFLLEdBQUc7WUFDakIsR0FBRyxDQUFDLE1BQU0sS0FBSyxFQUFFO1lBQ2pCLEdBQUcsQ0FBQyxNQUFNLEtBQUssR0FBRztZQUNsQixHQUFHLENBQUMsTUFBTSxLQUFLLEVBQUUsQ0FBQyxDQUNyQixDQUFDLENBQUMsdURBQXVEO0FBQzVELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvYmxvYi92Mi4xNzUuMS9wYWNrYWdlcy9AYXdzLWNkay9hd3MtZWMyLWFscGhhL2xpYi92cGMtdjIudHNcblxuaW1wb3J0IHtcbiAgdnBjLFxuICB2cGNJcHY0Q2lkckJsb2NrQXNzb2NpYXRpb24sXG4gIHZwY0lwdjZDaWRyQmxvY2tBc3NvY2lhdGlvbixcbn0gZnJvbSBcIkBjZGt0Zi9wcm92aWRlci1hd3NcIjtcbmltcG9ydCB7IFRlcnJhZm9ybVJlc291cmNlIH0gZnJvbSBcImNka3RmXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QsIERlcGVuZGVuY3lHcm91cCwgSURlcGVuZGFibGUgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgQXdzQ29uc3RydWN0QmFzZSwgQXdzQ29uc3RydWN0UHJvcHMgfSBmcm9tIFwiLi4vYXdzLWNvbnN0cnVjdFwiO1xuaW1wb3J0IHsgQXdzU3RhY2sgfSBmcm9tIFwiLi4vYXdzLXN0YWNrXCI7XG4vLyBUT0RPOiBVc2UgVGFnTWFuYWdlciBhbmQgdGFnLWFzcGVjdCBpbnN0ZWFkXG5pbXBvcnQgeyBUYWdzIH0gZnJvbSBcIi4uL2F3cy10YWdzXCI7XG4vLyBpbXBvcnQgeyBUYWdzIH0gZnJvbSBcIi4uL3RhZy1hc3BlY3RcIjtcbmltcG9ydCB7IElwYW1PcHRpb25zLCBJSXBhbVBvb2wgfSBmcm9tIFwiLi9pcGFtXCI7XG5pbXBvcnQgeyBEZWZhdWx0SW5zdGFuY2VUZW5hbmN5LCBJU3VibmV0LCBTdWJuZXRUeXBlIH0gZnJvbSBcIi4vdnBjXCI7XG5pbXBvcnQgeyBBcm4gfSBmcm9tIFwiLi4vYXJuXCI7XG5pbXBvcnQgeyBJU3VibmV0VjIsIFN1Ym5ldFYyLCBTdWJuZXRWMkF0dHJpYnV0ZXMgfSBmcm9tIFwiLi9zdWJuZXQtdjJcIjtcbmltcG9ydCB7IElWcGNWMiwgVnBjVjJCYXNlIH0gZnJvbSBcIi4vdnBjLXYyLWJhc2VcIjtcblxuLyoqXG4gKiBBZGRpdGlvbmFsIHByb3BzIG5lZWRlZCBmb3Igc2Vjb25kYXJ5IEFkZHJlc3NcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZWNvbmRhcnlBZGRyZXNzUHJvcHMge1xuICAvKipcbiAgICogUmVxdWlyZWQgdG8gc2V0IFNlY29uZGFyeSBjaWRyIGJsb2NrIHJlc291cmNlIG5hbWVcbiAgICogaW4gb3JkZXIgdG8gZ2VuZXJhdGUgdW5pcXVlIGxvZ2ljYWwgaWQgZm9yIHRoZSByZXNvdXJjZS5cbiAgICovXG4gIHJlYWRvbmx5IGNpZHJCbG9ja05hbWU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBJcEFkZHJlc3Mgb3B0aW9ucyB0byBkZWZpbmUgVlBDIFYyXG4gKi9cbmV4cG9ydCBjbGFzcyBJcEFkZHJlc3NlcyB7XG4gIC8qKlxuICAgKiBBbiBJUHY0IENJRFIgUmFuZ2VcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgaXB2NChcbiAgICBpcHY0Q2lkcjogc3RyaW5nLFxuICAgIHByb3BzPzogU2Vjb25kYXJ5QWRkcmVzc1Byb3BzLFxuICApOiBJSXBBZGRyZXNzZXMge1xuICAgIHJldHVybiBuZXcgaXB2NENpZHJBbGxvY2F0aW9uKGlwdjRDaWRyLCBwcm9wcyk7XG4gIH1cblxuICAvKipcbiAgICogQW4gSXB2NCBJcGFtIFBvb2xcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgaXB2NElwYW0oaXB2NElwYW1PcHRpb25zOiBJcGFtT3B0aW9ucyk6IElJcEFkZHJlc3NlcyB7XG4gICAgcmV0dXJuIG5ldyBJcGFtSXB2NChpcHY0SXBhbU9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFuIElwdjYgSXBhbSBQb29sXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGlwdjZJcGFtKGlwdjZJcGFtT3B0aW9uczogSXBhbU9wdGlvbnMpOiBJSXBBZGRyZXNzZXMge1xuICAgIHJldHVybiBuZXcgSXBhbUlwdjYoaXB2NklwYW1PcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbWF6b24gUHJvdmlkZWQgSXB2NiByYW5nZVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBhbWF6b25Qcm92aWRlZElwdjYocHJvcHM6IFNlY29uZGFyeUFkZHJlc3NQcm9wcyk6IElJcEFkZHJlc3NlcyB7XG4gICAgcmV0dXJuIG5ldyBBbWF6b25Qcm92aWRlZChwcm9wcyk7XG4gIH1cbn1cblxuLyoqXG4gKiBDb25zb2xpZGF0ZWQgcmV0dXJuIHBhcmFtZXRlcnMgdG8gcGFzcyB0byBWUEMgY29uc3RydWN0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVnBjQ2lkck9wdGlvbnMge1xuICAvKipcbiAgICogSVB2NCBDSURSIEJsb2NrXG4gICAqXG4gICAqIEBkZWZhdWx0ICcxMC4wLjAuMC8xNidcbiAgICovXG4gIHJlYWRvbmx5IGlwdjRDaWRyQmxvY2s/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIENJRFIgTWFzayBmb3IgVnBjXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gT25seSByZXF1aXJlZCB3aGVuIHVzaW5nIElQQU0gSXB2NFxuICAgKi9cbiAgcmVhZG9ubHkgaXB2NE5ldG1hc2tMZW5ndGg/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIElwdjQgSVBBTSBQb29sXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gT25seSByZXF1aXJlZCB3aGVuIHVzaW5nIElQQU0gSXB2NFxuICAgKi9cbiAgcmVhZG9ubHkgaXB2NElwYW1Qb29sPzogSUlwYW1Qb29sO1xuXG4gIC8qKlxuICAgKiBDSURSIE1hc2sgZm9yIFZwY1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIE9ubHkgcmVxdWlyZWQgd2hlbiB1c2luZyBBV1MgSXBhbVxuICAgKi9cbiAgcmVhZG9ubHkgaXB2Nk5ldG1hc2tMZW5ndGg/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIElwdjYgSVBBTSBwb29sIGlkIGZvciBWUEMgcmFuZ2UsIGNhbiBvbmx5IGJlIGRlZmluZWRcbiAgICogdW5kZXIgcHVibGljIHNjb3BlXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gcG9vbCBpZFxuICAgKi9cbiAgcmVhZG9ubHkgaXB2NklwYW1Qb29sPzogSUlwYW1Qb29sO1xuXG4gIC8qKlxuICAgKiBVc2UgYW1hem9uIHByb3ZpZGVkIElQIHJhbmdlXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBhbWF6b25Qcm92aWRlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIERlcGVuZGVuY3kgdG8gYXNzb2NpYXRlIElwdjYgQ0lEUiBibG9ja1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIGRlcGVuZGVuY3lcbiAgICovXG4gIHJlYWRvbmx5IGRlcGVuZGVuY2llcz86IFRlcnJhZm9ybVJlc291cmNlW107XG5cbiAgLyoqXG4gICAqIFJlcXVpcmVkIHRvIHNldCBTZWNvbmRhcnkgY2lkciBibG9jayByZXNvdXJjZSBuYW1lXG4gICAqIGluIG9yZGVyIHRvIGdlbmVyYXRlIHVuaXF1ZSBsb2dpY2FsIGlkIGZvciB0aGUgcmVzb3VyY2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gbmFtZSBmb3IgcHJpbWFyeSBhZGRyZXNzZXNcbiAgICovXG4gIHJlYWRvbmx5IGNpZHJCbG9ja05hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIElQdjQgQ0lEUiBwcm92aXNpb25lZCB1bmRlciBwb29sXG4gICAqIFJlcXVpcmVkIHRvIGNoZWNrIGZvciBvdmVybGFwcGluZyBDSURScyBhZnRlciBwcm92aXNpb25pbmdcbiAgICogaXMgY29tcGxldGUgdW5kZXIgSVBBTSBwb29sXG4gICAqIEBkZWZhdWx0IC0gbm8gSVBBTSBJUHY0IENJRFIgcmFuZ2UgaXMgcHJvdmlzaW9uZWQgdXNpbmcgSVBBTVxuICAgKi9cbiAgcmVhZG9ubHkgaXB2NElwYW1Qcm92aXNpb25lZENpZHJzPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogSW1wbGVtZW50cyBpcCBhZGRyZXNzIGFsbG9jYXRpb24gYWNjb3JkaW5nIHRvIHRoZSBJUEFkcmVzcyB0eXBlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUlwQWRkcmVzc2VzIHtcbiAgLyoqXG4gICAqIE1ldGhvZCB0byBkZWZpbmUgdGhlIGltcGxlbWVudGF0aW9uIGxvZ2ljIG9mXG4gICAqIElQIGFkZHJlc3MgYWxsb2NhdGlvblxuICAgKi9cbiAgYWxsb2NhdGVWcGNDaWRyKCk6IFZwY0NpZHJPcHRpb25zO1xufVxuXG4vKipcbiAqIE5hbWUgdGFnIGNvbnN0YW50XG4gKi9cbmNvbnN0IE5BTUVfVEFHOiBzdHJpbmcgPSBcIk5hbWVcIjtcblxuLyoqXG4gKiBQcm9wZXJ0aWVzIHRvIGRlZmluZSBWUENcbiAqIFtkaXNhYmxlLWF3c2xpbnQ6ZnJvbS1tZXRob2RdXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVnBjVjJQcm9wcyBleHRlbmRzIEF3c0NvbnN0cnVjdFByb3BzIHtcbiAgLyoqIEEgbXVzdCBJUHY0IENJRFIgYmxvY2sgZm9yIHRoZSBWUENcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vdnBjL2xhdGVzdC91c2VyZ3VpZGUvdnBjLWNpZHItYmxvY2tzLmh0bWxcbiAgICpcbiAgICogQGRlZmF1bHQgLSBJcHY0IENJRFIgQmxvY2sgKCcxMC4wLjAuMC8xNicpXG4gICAqL1xuICByZWFkb25seSBwcmltYXJ5QWRkcmVzc0Jsb2NrPzogSUlwQWRkcmVzc2VzO1xuXG4gIC8qKlxuICAgKiBUaGUgc2Vjb25kYXJ5IENJRFIgYmxvY2tzIGFzc29jaWF0ZWQgd2l0aCB0aGUgVlBDLlxuICAgKiBDYW4gYmUgIElQdjQgb3IgSVB2NiwgdHdvIElQdjQgcmFuZ2VzIG11c3QgZm9sbG93IFJGQyMxOTE4IGNvbnZlbnRpb25cbiAgICogRm9yIG1vcmUgaW5mb3JtYXRpb24sIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3ZwYy9sYXRlc3QvdXNlcmd1aWRlL3ZwYy1jaWRyLWJsb2Nrcy5odG1sI3ZwYy1yZXNpemV9LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIHNlY29uZGFyeSBJUCBhZGRyZXNzXG4gICAqL1xuICByZWFkb25seSBzZWNvbmRhcnlBZGRyZXNzQmxvY2tzPzogSUlwQWRkcmVzc2VzW107XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBpbnN0YW5jZXMgbGF1bmNoZWQgaW4gdGhlIFZQQyBnZXQgRE5TIGhvc3RuYW1lcy5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgZW5hYmxlRG5zSG9zdG5hbWVzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIEROUyByZXNvbHV0aW9uIGlzIHN1cHBvcnRlZCBmb3IgdGhlIFZQQy5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgZW5hYmxlRG5zU3VwcG9ydD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBkZWZhdWx0IHRlbmFuY3kgb2YgaW5zdGFuY2VzIGxhdW5jaGVkIGludG8gdGhlIFZQQy5cbiAgICpcbiAgICogQnkgc2V0dGluZyB0aGlzIHRvIGRlZGljYXRlZCB0ZW5hbmN5LCBpbnN0YW5jZXMgd2lsbCBiZSBsYXVuY2hlZCBvblxuICAgKiBoYXJkd2FyZSBkZWRpY2F0ZWQgdG8gYSBzaW5nbGUgQVdTIGN1c3RvbWVyLCB1bmxlc3Mgc3BlY2lmaWNhbGx5IHNwZWNpZmllZFxuICAgKiBhdCBpbnN0YW5jZSBsYXVuY2ggdGltZS4gUGxlYXNlIG5vdGUsIG5vdCBhbGwgaW5zdGFuY2UgdHlwZXMgYXJlIHVzYWJsZVxuICAgKiB3aXRoIERlZGljYXRlZCB0ZW5hbmN5LlxuICAgKlxuICAgKiBAZGVmYXVsdCBEZWZhdWx0SW5zdGFuY2VUZW5hbmN5LkRlZmF1bHQgKHNoYXJlZCkgdGVuYW5jeVxuICAgKi9cbiAgcmVhZG9ubHkgZGVmYXVsdEluc3RhbmNlVGVuYW5jeT86IERlZmF1bHRJbnN0YW5jZVRlbmFuY3k7XG5cbiAgLyoqXG4gICAqIFBoeXNpY2FsIG5hbWUgZm9yIHRoZSBWUENcbiAgICpcbiAgICogQGRlZmF1bHQgLSBhdXRvZ2VuZXJhdGVkIGJ5IENES1xuICAgKi9cbiAgcmVhZG9ubHkgdnBjTmFtZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBPcHRpb25zIHRvIGltcG9ydCBhIFZQQyBjcmVhdGVkIG91dHNpZGUgb2YgQ0RLIHN0YWNrXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVnBjVjJBdHRyaWJ1dGVzIHtcbiAgLyoqXG4gICAqIFRoZSBWUEMgSURcbiAgICogUmVmZXJzIHRvIHBoeXNpY2FsIElkIG9mIHRoZSByZXNvdXJjZVxuICAgKi9cbiAgcmVhZG9ubHkgdnBjSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogUmVnaW9uIGluIHdoaWNoIGltcG9ydGVkIFZQQyBpcyBob3N0ZWRcbiAgICogcmVxdWlyZWQgaW4gY2FzZSBvZiBjcm9zcyByZWdpb24gVlBDXG4gICAqIGFzIGdpdmVuIHZhbHVlIHdpbGwgYmUgdXNlZCB0byBzZXQgZmllbGQgcmVnaW9uIGZvciBpbXBvcnRlZCBWUEMsXG4gICAqIHdoaWNoIHRoZW4gbGF0ZXIgY2FuIGJlIHVzZWQgZm9yIGVzdGFibGlzaGluZyBWUEMgcGVlcmluZyBjb25uZWN0aW9uLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGNvbnN0cnVjdGVkIHdpdGggc3RhY2sgcmVnaW9uIHZhbHVlXG4gICAqL1xuICByZWFkb25seSByZWdpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgQVdTIGFjY291bnQgdGhhdCBvd25zIHRoZSBpbXBvcnRlZCBWUENcbiAgICogcmVxdWlyZWQgaW4gY2FzZSBvZiBjcm9zcyBhY2NvdW50IFZQQ1xuICAgKiBhcyBnaXZlbiB2YWx1ZSB3aWxsIGJlIHVzZWQgdG8gc2V0IGZpZWxkIGFjY291bnQgZm9yIGltcG9ydGVkIFZQQyxcbiAgICogd2hpY2ggdGhlbiBsYXRlciBjYW4gYmUgdXNlZCBmb3IgZXN0YWJsaXNoaW5nIFZQQyBwZWVyaW5nIGNvbm5lY3Rpb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gY29uc3RydWN0ZWQgd2l0aCBzdGFjayBhY2NvdW50IHZhbHVlXG4gICAqL1xuICByZWFkb25seSBvd25lckFjY291bnRJZD86IHN0cmluZztcblxuICAvKipcbiAgICogUHJpbWFyeSBWUEMgQ0lEUiBCbG9jayBvZiB0aGUgaW1wb3J0ZWQgVlBDXG4gICAqIENhbiBvbmx5IGJlIElQdjRcbiAgICovXG4gIHJlYWRvbmx5IHZwY0NpZHJCbG9jazogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBIFZQTiBHYXRld2F5IGlzIGF0dGFjaGVkIHRvIHRoZSBWUENcbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBWUE4gR2F0ZXdheVxuICAgKi9cbiAgcmVhZG9ubHkgdnBuR2F0ZXdheUlkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTdWJuZXRzIGFzc29jaWF0ZWQgd2l0aCBpbXBvcnRlZCBWUENcbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBzdWJuZXRzIHByb3ZpZGVkIHRvIGJlIGltcG9ydGVkXG4gICAqL1xuICByZWFkb25seSBzdWJuZXRzPzogU3VibmV0VjJBdHRyaWJ1dGVzW107XG5cbiAgLyoqXG4gICAqIEltcG9ydCBTZWNvbmRhcnkgQ0lEUiBibG9ja3MgYXNzb2NpYXRlZCB3aXRoIFZQQ1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIHNlY29uZGFyeSBJUCBhZGRyZXNzXG4gICAqL1xuICByZWFkb25seSBzZWNvbmRhcnlDaWRyQmxvY2tzPzogVlBDQ2lkckJsb2NrYXR0cmlidXRlc1tdO1xufVxuXG4vKipcbiAqIFRoaXMgY2xhc3MgcHJvdmlkZXMgYSBmb3VuZGF0aW9uIGZvciBjcmVhdGluZyBhbmQgY29uZmlndXJpbmcgYSBWUEMgd2l0aCBhZHZhbmNlZCBmZWF0dXJlcyBzdWNoIGFzIElQQU0gKElQIEFkZHJlc3MgTWFuYWdlbWVudCkgYW5kIElQdjYgc3VwcG9ydC5cbiAqXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIHRoZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Nkay9hcGkvdjIvZG9jcy9hd3MtY2RrLWxpYi5hd3NfZWMyLlZwYy5odG1sfEFXUyBDREsgRG9jdW1lbnRhdGlvbiBvbiBWUENzfS5cbiAqXG4gKiBAcmVzb3VyY2UgYXdzX3ZwY1xuICovXG5leHBvcnQgY2xhc3MgVnBjVjIgZXh0ZW5kcyBWcGNWMkJhc2Uge1xuICAvKipcbiAgICogQ3JlYXRlIGEgVlBDIGZyb20gZXhpc3RpbmcgYXR0cmlidXRlc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tVnBjVjJBdHRyaWJ1dGVzKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBhdHRyczogVnBjVjJBdHRyaWJ1dGVzLFxuICApOiBJVnBjVjIge1xuICAgIC8qKlxuICAgICAqIEludGVybmFsIGNsYXNzIHRvIGFsbG93IHVzZXJzIHRvIGltcG9ydCBWUENcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBjbGFzcyBJbXBvcnRlZFZwY1YyIGV4dGVuZHMgVnBjVjJCYXNlIHtcbiAgICAgIHB1YmxpYyByZWFkb25seSB2cGNJZDogc3RyaW5nO1xuICAgICAgcHVibGljIHJlYWRvbmx5IHZwY0Fybjogc3RyaW5nO1xuICAgICAgcHVibGljIHJlYWRvbmx5IHB1YmxpY1N1Ym5ldHM6IElTdWJuZXRWMltdID0gW107XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgcHJpdmF0ZVN1Ym5ldHM6IElTdWJuZXRWMltdID0gW107XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgaXNvbGF0ZWRTdWJuZXRzOiBJU3VibmV0VjJbXSA9IFtdO1xuICAgICAgcHVibGljIHJlYWRvbmx5IGludGVybmV0Q29ubmVjdGl2aXR5RXN0YWJsaXNoZWQ6IElEZXBlbmRhYmxlID1cbiAgICAgICAgbmV3IERlcGVuZGVuY3lHcm91cCgpO1xuICAgICAgcHVibGljIHJlYWRvbmx5IGlwdjRDaWRyQmxvY2s6IHN0cmluZztcbiAgICAgIHB1YmxpYyByZWFkb25seSByZWdpb246IHN0cmluZztcbiAgICAgIHB1YmxpYyByZWFkb25seSBvd25lckFjY291bnRJZDogc3RyaW5nO1xuICAgICAgcHVibGljIHJlYWRvbmx5IHZwY05hbWU/OiBzdHJpbmc7XG4gICAgICBwcml2YXRlIHJlYWRvbmx5IF9wYXJ0aXRpb24/OiBzdHJpbmc7XG5cbiAgICAgIC8qXG4gICAgICAgKiBSZWZlcmVuY2UgdG8gYWxsIHNlY29uZGFyeSBibG9ja3MgYXR0YWNoZWRcbiAgICAgICAqL1xuICAgICAgcHVibGljIHJlYWRvbmx5IHNlY29uZGFyeUNpZHJCbG9jaz86IElWUENDaWRyQmxvY2tbXTtcblxuICAgICAgLyoqXG4gICAgICAgKiBSZWZlcnMgdG8gYWN0dWFsIFZQQyBSZXNvdXJjZSBhdHRyaWJ1dGUgaW4gbm9uLWltcG9ydGVkIFZQQ1xuICAgICAgICogUmVxdWlyZWQgdG8gaW1wbGVtZW50IGhlcmUgZHVlIHRvIGV4dGVuc2lvbiBmcm9tIEJhc2UgY2xhc3NcbiAgICAgICAqL1xuICAgICAgcHVibGljIHJlYWRvbmx5IHZwY0NpZHJCbG9jazogc3RyaW5nO1xuXG4gICAgICAvLyBSZXF1aXJlZCB0byBkbyBDSURSIHJhbmdlIHRlc3Qgb24gaW1wb3J0ZWQgVlBDcyB0byBjcmVhdGUgbmV3IHN1Ym5ldHNcbiAgICAgIHB1YmxpYyByZWFkb25seSBpcHY0SXBhbVByb3Zpc2lvbmVkQ2lkcnM6IHN0cmluZ1tdID0gW107XG5cbiAgICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBjb25zdHJ1Y3Q6IENvbnN0cnVjdCxcbiAgICAgICAgY29uc3RydWN0SWQ6IHN0cmluZyxcbiAgICAgICAgcHJvcHM6IFZwY1YyQXR0cmlidXRlcyxcbiAgICAgICkge1xuICAgICAgICBzdXBlcihjb25zdHJ1Y3QsIGNvbnN0cnVjdElkKTtcbiAgICAgICAgKHRoaXMudnBjSWQgPSBwcm9wcy52cGNJZCksXG4gICAgICAgICAgKHRoaXMucmVnaW9uID0gcHJvcHMucmVnaW9uID8/IHRoaXMuc3RhY2sucmVnaW9uKSxcbiAgICAgICAgICAodGhpcy5vd25lckFjY291bnRJZCA9IHByb3BzLm93bmVyQWNjb3VudElkID8/IHRoaXMuc3RhY2suYWNjb3VudCksXG4gICAgICAgICAgKHRoaXMuX3BhcnRpdGlvbiA9IEF3c1N0YWNrLm9mQXdzQ29uc3RydWN0KHRoaXMpLnBhcnRpdGlvbiksXG4gICAgICAgICAgKHRoaXMudnBjQXJuID0gQXJuLmZvcm1hdChcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgc2VydmljZTogXCJlYzJcIixcbiAgICAgICAgICAgICAgcmVzb3VyY2U6IFwidnBjXCIsXG4gICAgICAgICAgICAgIHJlc291cmNlTmFtZTogdGhpcy52cGNJZCxcbiAgICAgICAgICAgICAgcmVnaW9uOiB0aGlzLnJlZ2lvbixcbiAgICAgICAgICAgICAgYWNjb3VudDogdGhpcy5vd25lckFjY291bnRJZCxcbiAgICAgICAgICAgICAgcGFydGl0aW9uOiB0aGlzLl9wYXJ0aXRpb24sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdGhpcy5zdGFjayxcbiAgICAgICAgICApKTtcblxuICAgICAgICAvLyBQb3B1bGF0ZSByZWdpb24gYW5kIGFjY291bnQgZmllbGRzIHRoYXQgY2FuIGJlIHVzZWQgdG8gc2V0IHVwIHBlZXJpbmcgY29ubmVjdGlvblxuICAgICAgICAvLyBzYW1wbGUgdnBjIEFybiAtIGFybjphd3M6ZWMyOnVzLXdlc3QtMjoxMjM0NTY3ODkwMTI6dnBjL3ZwYy0wMTIzNDU2Nzg5YWJjZGVmMFxuICAgICAgICB0aGlzLnJlZ2lvbiA9IHRoaXMudnBjQXJuLnNwbGl0KFwiOlwiKVszXTtcbiAgICAgICAgdGhpcy5vd25lckFjY291bnRJZCA9IHRoaXMudnBjQXJuLnNwbGl0KFwiOlwiKVs0XTtcbiAgICAgICAgLy8gUmVmZXJzIHRvIGFjdHVhbCBWUEMgUmVzb3VyY2UgYXR0cmlidXRlIGluIG5vbi1pbXBvcnRlZCBWUENcbiAgICAgICAgdGhpcy52cGNDaWRyQmxvY2sgPSBwcm9wcy52cGNDaWRyQmxvY2s7XG4gICAgICAgIC8vIFJlcXVpcmVkIGZvciBzdWJuZXQgcmFuZ2UgcmVsYXRlZCBjaGVja3NcbiAgICAgICAgdGhpcy5pcHY0Q2lkckJsb2NrID0gcHJvcHMudnBjQ2lkckJsb2NrO1xuICAgICAgICB0aGlzLl92cG5HYXRld2F5SWQgPSBwcm9wcy52cG5HYXRld2F5SWQ7XG5cbiAgICAgICAgaWYgKHByb3BzLnN1Ym5ldHMpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IHN1Ym5ldCBvZiBwcm9wcy5zdWJuZXRzKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIHN1Ym5ldC5zdWJuZXRUeXBlID09PSBTdWJuZXRUeXBlLlBSSVZBVEVfV0lUSF9FR1JFU1MgfHxcbiAgICAgICAgICAgICAgc3VibmV0LnN1Ym5ldFR5cGUgPT09IFN1Ym5ldFR5cGUuUFJJVkFURV9XSVRIX05BVCB8fFxuICAgICAgICAgICAgICBzdWJuZXQuc3VibmV0VHlwZSA9PT0gU3VibmV0VHlwZS5QUklWQVRFXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgdGhpcy5wcml2YXRlU3VibmV0cy5wdXNoKFxuICAgICAgICAgICAgICAgIFN1Ym5ldFYyLmZyb21TdWJuZXRWMkF0dHJpYnV0ZXMoXG4gICAgICAgICAgICAgICAgICBzY29wZSxcbiAgICAgICAgICAgICAgICAgIHN1Ym5ldC5zdWJuZXROYW1lID8/IFwiSW1wb3J0ZWRQcml2YXRlU3VibmV0XCIsXG4gICAgICAgICAgICAgICAgICBzdWJuZXQsXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc3VibmV0LnN1Ym5ldFR5cGUgPT09IFN1Ym5ldFR5cGUuUFVCTElDKSB7XG4gICAgICAgICAgICAgIHRoaXMucHVibGljU3VibmV0cy5wdXNoKFxuICAgICAgICAgICAgICAgIFN1Ym5ldFYyLmZyb21TdWJuZXRWMkF0dHJpYnV0ZXMoXG4gICAgICAgICAgICAgICAgICBzY29wZSxcbiAgICAgICAgICAgICAgICAgIHN1Ym5ldC5zdWJuZXROYW1lID8/IFwiSW1wb3J0ZWRQdWJsaWNTdWJuZXRcIixcbiAgICAgICAgICAgICAgICAgIHN1Ym5ldCxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgc3VibmV0LnN1Ym5ldFR5cGUgPT09IFN1Ym5ldFR5cGUuSVNPTEFURUQgfHxcbiAgICAgICAgICAgICAgc3VibmV0LnN1Ym5ldFR5cGUgPT09IFN1Ym5ldFR5cGUuUFJJVkFURV9JU09MQVRFRFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHRoaXMuaXNvbGF0ZWRTdWJuZXRzLnB1c2goXG4gICAgICAgICAgICAgICAgU3VibmV0VjIuZnJvbVN1Ym5ldFYyQXR0cmlidXRlcyhcbiAgICAgICAgICAgICAgICAgIHNjb3BlLFxuICAgICAgICAgICAgICAgICAgc3VibmV0LnN1Ym5ldE5hbWUgPz8gXCJJbXBvcnRlZElzb2xhdGVkU3VibmV0XCIsXG4gICAgICAgICAgICAgICAgICBzdWJuZXQsXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZWNvbmRhcnlDaWRyQmxvY2sgPSBwcm9wcy5zZWNvbmRhcnlDaWRyQmxvY2tzPy5tYXAoKGNpZHJCbG9jaykgPT5cbiAgICAgICAgICBWUENDaWRyQmxvY2suZnJvbVZQQ0NpZHJCbG9ja2F0dHJpYnV0ZXMoXG4gICAgICAgICAgICBzY29wZSxcbiAgICAgICAgICAgIGNpZHJCbG9jay5jaWRyQmxvY2tOYW1lID8/IFwiSW1wb3J0ZWRTZWNvbmRhcnlDaWRyQmxvY2tcIixcbiAgICAgICAgICAgIHsgLi4uY2lkckJsb2NrIH0sXG4gICAgICAgICAgKSxcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKHByb3BzLnNlY29uZGFyeUNpZHJCbG9ja3MpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IGNpZHJCbG9jayBvZiBwcm9wcy5zZWNvbmRhcnlDaWRyQmxvY2tzKSB7XG4gICAgICAgICAgICBpZiAoY2lkckJsb2NrLmlwdjRJcGFtUHJvdmlzaW9uZWRDaWRycykge1xuICAgICAgICAgICAgICB0aGlzLmlwdjRJcGFtUHJvdmlzaW9uZWRDaWRycy5wdXNoKFxuICAgICAgICAgICAgICAgIC4uLmNpZHJCbG9jay5pcHY0SXBhbVByb3Zpc2lvbmVkQ2lkcnMsXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuZXcgSW1wb3J0ZWRWcGNWMihzY29wZSwgaWQsIGF0dHJzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJZGVudGlmaWVyIGZvciB0aGlzIFZQQ1xuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHZwY0lkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB2cGNBcm46IHN0cmluZztcblxuICAvKipcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHZwY0NpZHJCbG9jazogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIElQdjYgQ0lEUiBibG9ja3MgZm9yIHRoZSBWUEMuXG4gICAqXG4gICAqIFNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcmVzb3VyY2UtZWMyLXZwYy5odG1sI2F3cy1yZXNvdXJjZS1lYzItdnBjLXJldHVybi12YWx1ZXNcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBpcHY2Q2lkckJsb2Nrczogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBwcm92aWRlciBvZiBpcHY0IGFkZHJlc3Nlc1xuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGlwQWRkcmVzc2VzOiBJSXBBZGRyZXNzZXM7XG5cbiAgLyoqXG4gICAqIFRoZSBBV1MgQ2xvdWRGb3JtYXRpb24gcmVzb3VyY2UgcmVwcmVzZW50aW5nIHRoZSBWUEMuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcmVzb3VyY2U6IHZwYy5WcGM7XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyBpZiBpbnN0YW5jZXMgbGF1bmNoZWQgaW4gdGhpcyBWUEMgd2lsbCBoYXZlIHB1YmxpYyBETlMgaG9zdG5hbWVzLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGRuc0hvc3RuYW1lc0VuYWJsZWQ6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyBpZiBETlMgc3VwcG9ydCBpcyBlbmFibGVkIGZvciB0aGlzIFZQQy5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBkbnNTdXBwb3J0RW5hYmxlZDogYm9vbGVhbjtcblxuICAvKipcbiAgICogSXNvbGF0ZWQgU3VibmV0cyB0aGF0IGFyZSBwYXJ0IG9mIHRoaXMgVlBDLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGlzb2xhdGVkU3VibmV0czogSVN1Ym5ldFtdO1xuXG4gIC8qKlxuICAgKiBQdWJsaWMgU3VibmV0cyB0aGF0IGFyZSBwYXJ0IG9mIHRoaXMgVlBDLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHB1YmxpY1N1Ym5ldHM6IElTdWJuZXRbXTtcblxuICAvKipcbiAgICogUHVibGljIFN1Ym5ldHMgdGhhdCBhcmUgcGFydCBvZiB0aGlzIFZQQy5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBwcml2YXRlU3VibmV0czogSVN1Ym5ldFtdO1xuXG4gIC8qKlxuICAgKiBUbyBkZWZpbmUgZGVwZW5kZW5jeSBvbiBpbnRlcm5ldCBjb25uZWN0aXZpdHlcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBpbnRlcm5ldENvbm5lY3Rpdml0eUVzdGFibGlzaGVkOiBJRGVwZW5kYWJsZTtcblxuICAvKipcbiAgICogcmVmZXJlbmNlIHRvIGFsbCBzZWNvbmRhcnkgYmxvY2tzIGF0dGFjaGVkXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgc2Vjb25kYXJ5Q2lkckJsb2NrPzogSVZQQ0NpZHJCbG9ja1tdID1cbiAgICBuZXcgQXJyYXk8SVZQQ0NpZHJCbG9jaz4oKTtcblxuICAvKipcbiAgICogSVB2NCBDSURSIHByb3Zpc2lvbmVkIHVzaW5nIElQQU0gcG9vbFxuICAgKiBSZXF1aXJlZCB0byBjaGVjayBmb3Igb3ZlcmxhcHBpbmcgQ0lEUnMgYWZ0ZXIgcHJvdmlzaW9uaW5nXG4gICAqIGlzIGNvbXBsZXRlIHVuZGVyIElQQU1cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBpcHY0SXBhbVByb3Zpc2lvbmVkQ2lkcnM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogUmVnaW9uIGZvciB0aGlzIFZQQ1xuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHJlZ2lvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJZGVudGlmaWVyIG9mIHRoZSBvd25lciBmb3IgdGhpcyBWUENcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBvd25lckFjY291bnRJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBGb3IgdmFsaWRhdGlvbiB0byBkZWZpbmUgSVB2NiBzdWJuZXRzLCBzZXQgdG8gdHJ1ZSBpbiBjYXNlIG9mXG4gICAqIEFtYXpvbiBQcm92aWRlZCBJUHY2IGNpZHIgcmFuZ2VcbiAgICogaWYgdHJ1ZSwgSVB2NiBhZGRyZXNzZXMgY2FuIGJlIGF0dGFjaGVkIHRvIHRoZSBzdWJuZXRzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHVzZUlwdjY6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogVnBjTmFtZSB0byBiZSB1c2VkIGZvciB0YWdnaW5nIGl0cyBjb21wb25lbnRzXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB2cGNOYW1lPzogc3RyaW5nO1xuXG4gIHB1YmxpYyByZWFkb25seSBpcHY0Q2lkckJsb2NrOiBzdHJpbmcgPSBcIlwiO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBWcGNWMlByb3BzID0ge30pIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHByb3BzKTtcbiAgICAvLyAvLyBObyBMYXp5LnN0cmluZ1ZhbHVlID9cbiAgICAvLyBjb25zdCBwaHlzaWNhbE5hbWUgPVxuICAgIC8vICAgcHJvcHMudnBjTmFtZSA/P1xuICAgIC8vICAgQXdzU3RhY2sudW5pcXVlUmVzb3VyY2VOYW1lKHRoaXMsIHtcbiAgICAvLyAgICAgbWF4TGVuZ3RoOiAxMjgsXG4gICAgLy8gICAgIGFsbG93ZWRTcGVjaWFsQ2hhcmFjdGVyczogXCJfXCIsXG4gICAgLy8gICB9KTtcbiAgICB0aGlzLnZwY05hbWUgPSBwcm9wcy52cGNOYW1lO1xuICAgIHRoaXMuaXBBZGRyZXNzZXMgPVxuICAgICAgcHJvcHMucHJpbWFyeUFkZHJlc3NCbG9jayA/PyBJcEFkZHJlc3Nlcy5pcHY0KFwiMTAuMC4wLjAvMTZcIik7XG4gICAgY29uc3QgdnBjT3B0aW9ucyA9IHRoaXMuaXBBZGRyZXNzZXMuYWxsb2NhdGVWcGNDaWRyKCk7XG5cbiAgICB0aGlzLmRuc0hvc3RuYW1lc0VuYWJsZWQgPVxuICAgICAgcHJvcHMuZW5hYmxlRG5zSG9zdG5hbWVzID09IG51bGwgPyB0cnVlIDogcHJvcHMuZW5hYmxlRG5zSG9zdG5hbWVzO1xuICAgIHRoaXMuZG5zU3VwcG9ydEVuYWJsZWQgPVxuICAgICAgcHJvcHMuZW5hYmxlRG5zU3VwcG9ydCA9PSBudWxsID8gdHJ1ZSA6IHByb3BzLmVuYWJsZURuc1N1cHBvcnQ7XG4gICAgY29uc3QgaW5zdGFuY2VUZW5hbmN5ID0gcHJvcHMuZGVmYXVsdEluc3RhbmNlVGVuYW5jeSB8fCBcImRlZmF1bHRcIjtcbiAgICB0aGlzLnJlc291cmNlID0gbmV3IHZwYy5WcGModGhpcywgXCJSZXNvdXJjZVwiLCB7XG4gICAgICBjaWRyQmxvY2s6IHZwY09wdGlvbnMuaXB2NENpZHJCbG9jaywgLy9mb3IgSXB2NCBhZGRyZXNzZXMgQ0lEUiBibG9ja1xuICAgICAgZW5hYmxlRG5zSG9zdG5hbWVzOiB0aGlzLmRuc0hvc3RuYW1lc0VuYWJsZWQsXG4gICAgICBlbmFibGVEbnNTdXBwb3J0OiB0aGlzLmRuc1N1cHBvcnRFbmFibGVkLFxuICAgICAgaXB2NElwYW1Qb29sSWQ6IHZwY09wdGlvbnMuaXB2NElwYW1Qb29sPy5pcGFtUG9vbElkLCAvLyBmb3IgSXB2NCBpcGFtIG9wdGlvblxuICAgICAgaXB2NE5ldG1hc2tMZW5ndGg6IHZwY09wdGlvbnMuaXB2NE5ldG1hc2tMZW5ndGgsIC8vIGZvciBJcHY0IGlwYW0gb3B0aW9uXG4gICAgICBpbnN0YW5jZVRlbmFuY3k6IGluc3RhbmNlVGVuYW5jeSxcbiAgICB9KTtcblxuICAgIHRoaXMubm9kZS5kZWZhdWx0Q2hpbGQgPSB0aGlzLnJlc291cmNlO1xuICAgIHRoaXMudnBjQ2lkckJsb2NrID0gdGhpcy5yZXNvdXJjZS5jaWRyQmxvY2s7XG4gICAgaWYgKHZwY09wdGlvbnMuaXB2NENpZHJCbG9jaykge1xuICAgICAgdGhpcy5pcHY0Q2lkckJsb2NrID0gdnBjT3B0aW9ucy5pcHY0Q2lkckJsb2NrO1xuICAgIH1cbiAgICAvLyBUT0RPOiBBZGRpdGlvbmFsIGNpZHIgYmxvY2tzP1xuICAgIHRoaXMuaXB2NkNpZHJCbG9ja3MgPSBbdGhpcy5yZXNvdXJjZS5pcHY2Q2lkckJsb2NrXTtcbiAgICB0aGlzLnZwY0lkID0gdGhpcy5yZXNvdXJjZS5pZDtcbiAgICB0aGlzLnZwY0FybiA9IEFybi5mb3JtYXQoXG4gICAgICB7XG4gICAgICAgIHNlcnZpY2U6IFwiZWMyXCIsXG4gICAgICAgIHJlc291cmNlOiBcInZwY1wiLFxuICAgICAgICByZXNvdXJjZU5hbWU6IHRoaXMudnBjSWQsXG4gICAgICB9LFxuICAgICAgdGhpcy5zdGFjayxcbiAgICApO1xuICAgIHRoaXMucmVnaW9uID0gdGhpcy5zdGFjay5yZWdpb247XG4gICAgdGhpcy5vd25lckFjY291bnRJZCA9IHRoaXMuc3RhY2suYWNjb3VudDtcbiAgICAvLyBBZGQgdGFnIHRvIHRoZSBWUEMgd2l0aCB0aGUgbmFtZSBwcm92aWRlZCBpbiBwcm9wZXJ0aWVzXG4gICAgVGFncy5vZih0aGlzKS5hZGQoTkFNRV9UQUcsIHByb3BzLnZwY05hbWUgfHwgdGhpcy5ub2RlLnBhdGgpO1xuICAgIGlmIChwcm9wcy5zZWNvbmRhcnlBZGRyZXNzQmxvY2tzKSB7XG4gICAgICBjb25zdCBzZWNvbmRhcnlBZGRyZXNzQmxvY2tzOiBJSXBBZGRyZXNzZXNbXSA9XG4gICAgICAgIHByb3BzLnNlY29uZGFyeUFkZHJlc3NCbG9ja3M7XG5cbiAgICAgIGZvciAoY29uc3Qgc2Vjb25kYXJ5QWRkcmVzc0Jsb2NrIG9mIHNlY29uZGFyeUFkZHJlc3NCbG9ja3MpIHtcbiAgICAgICAgY29uc3Qgc2Vjb25kYXJ5VnBjT3B0aW9uczogVnBjQ2lkck9wdGlvbnMgPVxuICAgICAgICAgIHNlY29uZGFyeUFkZHJlc3NCbG9jay5hbGxvY2F0ZVZwY0NpZHIoKTtcbiAgICAgICAgaWYgKCFzZWNvbmRhcnlWcGNPcHRpb25zLmNpZHJCbG9ja05hbWUpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBcIkNpZHIgQmxvY2sgTmFtZSBpcyByZXF1aXJlZCB0byBjcmVhdGUgc2Vjb25kYXJ5IElQIGFkZHJlc3NcIixcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIHNlY29uZGFyeVZwY09wdGlvbnMuYW1hem9uUHJvdmlkZWQgfHxcbiAgICAgICAgICBzZWNvbmRhcnlWcGNPcHRpb25zLmlwdjZJcGFtUG9vbFxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLnVzZUlwdjYgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIC8vdmFsaWRhdGUgQ0lEUiByYW5nZXMgcGVyIFJGQyAxOTE4XG4gICAgICAgIGlmIChzZWNvbmRhcnlWcGNPcHRpb25zLmlwdjRDaWRyQmxvY2shKSB7XG4gICAgICAgICAgY29uc3QgcmV0ID0gdmFsaWRhdGVJcHY0YWRkcmVzcyhcbiAgICAgICAgICAgIHNlY29uZGFyeVZwY09wdGlvbnMuaXB2NENpZHJCbG9jayxcbiAgICAgICAgICAgIHRoaXMucmVzb3VyY2UuY2lkckJsb2NrSW5wdXQsXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAocmV0ID09PSBmYWxzZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICBcIkNJRFIgYmxvY2sgc2hvdWxkIGJlIGluIHRoZSBzYW1lIFJGQyAxOTE4IHJhbmdlIGluIHRoZSBWUENcIixcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChzZWNvbmRhcnlWcGNPcHRpb25zLmlwdjRJcGFtUHJvdmlzaW9uZWRDaWRycyEpIHtcbiAgICAgICAgICB0aGlzLmlwdjRJcGFtUHJvdmlzaW9uZWRDaWRycz8ucHVzaChcbiAgICAgICAgICAgIC4uLnNlY29uZGFyeVZwY09wdGlvbnMuaXB2NElwYW1Qcm92aXNpb25lZENpZHJzLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdnBjQ2lkckJsb2NrID0gbmV3IFZQQ0NpZHJCbG9jayhcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIHNlY29uZGFyeVZwY09wdGlvbnMuY2lkckJsb2NrTmFtZSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB2cGNJZDogdGhpcy52cGNJZCxcbiAgICAgICAgICAgIGNpZHJCbG9jazogc2Vjb25kYXJ5VnBjT3B0aW9ucy5pcHY0Q2lkckJsb2NrLFxuICAgICAgICAgICAgaXB2NElwYW1Qb29sSWQ6IHNlY29uZGFyeVZwY09wdGlvbnMuaXB2NElwYW1Qb29sPy5pcGFtUG9vbElkLFxuICAgICAgICAgICAgaXB2NE5ldG1hc2tMZW5ndGg6IHNlY29uZGFyeVZwY09wdGlvbnMuaXB2NE5ldG1hc2tMZW5ndGgsXG4gICAgICAgICAgICBpcHY2TmV0bWFza0xlbmd0aDogc2Vjb25kYXJ5VnBjT3B0aW9ucy5pcHY2TmV0bWFza0xlbmd0aCxcbiAgICAgICAgICAgIGlwdjZJcGFtUG9vbElkOiBzZWNvbmRhcnlWcGNPcHRpb25zLmlwdjZJcGFtUG9vbD8uaXBhbVBvb2xJZCxcbiAgICAgICAgICAgIGFtYXpvblByb3ZpZGVkSXB2NkNpZHJCbG9jazogc2Vjb25kYXJ5VnBjT3B0aW9ucy5hbWF6b25Qcm92aWRlZCxcbiAgICAgICAgICB9LFxuICAgICAgICApO1xuICAgICAgICBpZiAoc2Vjb25kYXJ5VnBjT3B0aW9ucy5kZXBlbmRlbmNpZXMpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IGRlcCBvZiBzZWNvbmRhcnlWcGNPcHRpb25zLmRlcGVuZGVuY2llcykge1xuICAgICAgICAgICAgdnBjQ2lkckJsb2NrLm5vZGUuYWRkRGVwZW5kZW5jeShkZXApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvL0NyZWF0ZSBzZWNvbmRhcnkgYmxvY2tzIGZvciBJcHY0IGFuZCBJcHY2XG4gICAgICAgIHRoaXMuc2Vjb25kYXJ5Q2lkckJsb2NrPy5wdXNoKHZwY0NpZHJCbG9jayk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRW1wdHkgYXJyYXkgZm9yIGlzb2xhdGVkIHN1Ym5ldHNcbiAgICAgKi9cbiAgICB0aGlzLmlzb2xhdGVkU3VibmV0cyA9IG5ldyBBcnJheTxJU3VibmV0PigpO1xuXG4gICAgLyoqXG4gICAgICogRW1wdHkgYXJyYXkgZm9yIHB1YmxpYyBzdWJuZXRzXG4gICAgICovXG4gICAgdGhpcy5wdWJsaWNTdWJuZXRzID0gbmV3IEFycmF5PElTdWJuZXQ+KCk7XG5cbiAgICAvKipcbiAgICAgKiBFbXB0eSBhcnJheSBmb3IgcHJpdmF0ZSBzdWJuZXRzXG4gICAgICovXG4gICAgdGhpcy5wcml2YXRlU3VibmV0cyA9IG5ldyBBcnJheTxJU3VibmV0PigpO1xuXG4gICAgLyoqXG4gICAgICogRGVwZW5kYWJsZSB0aGF0IGNhbiBiZSBkZXBlbmRlZCB1cG9uIHRvIGZvcmNlIGludGVybmV0IGNvbm5lY3Rpdml0eSBlc3RhYmxpc2hlZCBvbiB0aGUgVlBDXG4gICAgICogQWRkIGlndyB0byB0aGlzIGlmIGl0cyBhIHB1YmxpYyBzdWJuZXRcbiAgICAgKi9cbiAgICB0aGlzLmludGVybmV0Q29ubmVjdGl2aXR5RXN0YWJsaXNoZWQgPVxuICAgICAgdGhpcy5faW50ZXJuZXRDb25uZWN0aXZpdHlFc3RhYmxpc2hlZDtcbiAgfVxufVxuLyoqXG4gKiBTdXBwb3J0cyBhc3NpZ25pbmcgSVB2NCBhZGRyZXNzIHRvIFZQQ1xuICovXG5jbGFzcyBpcHY0Q2lkckFsbG9jYXRpb24gaW1wbGVtZW50cyBJSXBBZGRyZXNzZXMge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNpZHJCbG9jazogc3RyaW5nLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcHJvcHM/OiB7IGNpZHJCbG9ja05hbWU6IHN0cmluZyB9LFxuICApIHt9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIENJRFIgYmxvY2sgcHJvdmlkZWQgYnkgdGhlIHVzZXIgdG8gc2V0IElQdjRcbiAgICovXG4gIGFsbG9jYXRlVnBjQ2lkcigpOiBWcGNDaWRyT3B0aW9ucyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlwdjRDaWRyQmxvY2s6IHRoaXMuY2lkckJsb2NrLFxuICAgICAgY2lkckJsb2NrTmFtZTogdGhpcy5wcm9wcz8uY2lkckJsb2NrTmFtZSxcbiAgICB9O1xuICB9XG59XG5cbi8qKlxuICogU3VwcG9ydHMgQW1hem9uIFByb3ZpZGVkIElwdjYgcmFuZ2VzXG4gKi9cbmNsYXNzIEFtYXpvblByb3ZpZGVkIGltcGxlbWVudHMgSUlwQWRkcmVzc2VzIHtcbiAgLyoqXG4gICAqIFJlcHJlc2VudHMgYW4gQW1hem9uLXByb3ZpZGVkIElQdjYgQ0lEUiByYW5nZSBmb3IgYSBWUEMuXG4gICAqXG4gICAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyB0aGUgSUlwQWRkcmVzc2VzIGludGVyZmFjZSBhbmQgaXMgdXNlZCB0byBhbGxvY2F0ZSBhbiBBbWF6b24tcHJvdmlkZWRcbiAgICogSVB2NiBDSURSIHJhbmdlIGZvciBhIFZQQy4gV2hlbiBhbiBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzIGlzIHVzZWQgdG8gYWxsb2NhdGUgdGhlIFZQQyBDSURSLFxuICAgKiBBbWF6b24gd2lsbCBhdXRvbWF0aWNhbGx5IGFzc2lnbiBhbiBJUHY2IENJRFIgcmFuZ2UgZnJvbSBpdHMgcG9vbCBvZiBhdmFpbGFibGUgYWRkcmVzc2VzLlxuICAgKi9cblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IHByb3BzOiB7IGNpZHJCbG9ja05hbWU6IHN0cmluZyB9KSB7fVxuXG4gIGFsbG9jYXRlVnBjQ2lkcigpOiBWcGNDaWRyT3B0aW9ucyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGFtYXpvblByb3ZpZGVkOiB0cnVlLFxuICAgICAgY2lkckJsb2NrTmFtZTogdGhpcy5wcm9wcy5jaWRyQmxvY2tOYW1lLFxuICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGFuIElQdjQgYWRkcmVzcyByYW5nZSBtYW5hZ2VkIGJ5IEFXUyBJUCBBZGRyZXNzIE1hbmFnZXIgKElQQU0pLlxuICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcmVzb3VyY2UtZWMyLWlwYW0uaHRtbFxuICovXG5jbGFzcyBJcGFtSXB2NiBpbXBsZW1lbnRzIElJcEFkZHJlc3NlcyB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgcHJvcHM6IElwYW1PcHRpb25zKSB7fVxuXG4gIGFsbG9jYXRlVnBjQ2lkcigpOiBWcGNDaWRyT3B0aW9ucyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlwdjZOZXRtYXNrTGVuZ3RoOiB0aGlzLnByb3BzLm5ldG1hc2tMZW5ndGgsXG4gICAgICBpcHY2SXBhbVBvb2w6IHRoaXMucHJvcHMuaXBhbVBvb2wsXG4gICAgICBkZXBlbmRlbmNpZXM6IHRoaXMucHJvcHMuaXBhbVBvb2w/LmlwYW1DaWRycy5tYXAoXG4gICAgICAgIChjKSA9PiBjIGFzIFRlcnJhZm9ybVJlc291cmNlLFxuICAgICAgKSxcbiAgICAgIGNpZHJCbG9ja05hbWU6IHRoaXMucHJvcHMuY2lkckJsb2NrTmFtZSxcbiAgICB9O1xuICB9XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBhbiBJUHY0IGFkZHJlc3MgcmFuZ2UgbWFuYWdlZCBieSBBV1MgSVAgQWRkcmVzcyBNYW5hZ2VyIChJUEFNKS5cbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXJlc291cmNlLWVjMi1pcGFtLmh0bWxcbiAqL1xuY2xhc3MgSXBhbUlwdjQgaW1wbGVtZW50cyBJSXBBZGRyZXNzZXMge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IHByb3BzOiBJcGFtT3B0aW9ucykge31cbiAgYWxsb2NhdGVWcGNDaWRyKCk6IFZwY0NpZHJPcHRpb25zIHtcbiAgICByZXR1cm4ge1xuICAgICAgaXB2NE5ldG1hc2tMZW5ndGg6IHRoaXMucHJvcHMubmV0bWFza0xlbmd0aCxcbiAgICAgIGlwdjRJcGFtUG9vbDogdGhpcy5wcm9wcy5pcGFtUG9vbCxcbiAgICAgIGNpZHJCbG9ja05hbWU6IHRoaXMucHJvcHM/LmNpZHJCbG9ja05hbWUsXG4gICAgICBpcHY0SXBhbVByb3Zpc2lvbmVkQ2lkcnM6IHRoaXMucHJvcHMuaXBhbVBvb2w/LmlwYW1JcHY0Q2lkcnMsXG4gICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIEludGVyZmFjZSB0byBjcmVhdGUgTDIgZm9yIFZQQyBDaWRyIEJsb2NrXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVZQQ0NpZHJCbG9jayB7XG4gIC8qKlxuICAgKiBBbWF6b24gUHJvdmlkZWQgSXB2NlxuICAgKi9cbiAgcmVhZG9ubHkgYW1hem9uUHJvdmlkZWRJcHY2Q2lkckJsb2NrPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIHNlY29uZGFyeSBJUHY0IENJRFIgQmxvY2tcbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBDSURSIGJsb2NrIHByb3ZpZGVkXG4gICAqL1xuICByZWFkb25seSBjaWRyQmxvY2s/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIElQQU0gcG9vbCBmb3IgSVB2NiBhZGRyZXNzIHR5cGVcbiAgICovXG4gIHJlYWRvbmx5IGlwdjZJcGFtUG9vbElkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJUEFNIHBvb2wgZm9yIElQdjQgYWRkcmVzcyB0eXBlXG4gICAqL1xuICByZWFkb25seSBpcHY0SXBhbVBvb2xJZD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBBdHRyaWJ1dGVzIGZvciBWUENDaWRyQmxvY2sgdXNlZCBmb3IgZGVmaW5pbmcgYSBuZXcgQ0lEUiBCbG9ja1xuICogYW5kIGFsc28gZm9yIGltcG9ydGluZyBhbiBleGlzdGluZyBDSURSXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVlBDQ2lkckJsb2NrYXR0cmlidXRlcyB7XG4gIC8qKlxuICAgKiBBbWF6b24gUHJvdmlkZWQgSXB2NlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgYW1hem9uUHJvdmlkZWRJcHY2Q2lkckJsb2NrPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIHNlY29uZGFyeSBJUHY0IENJRFIgQmxvY2tcbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBDSURSIGJsb2NrIHByb3ZpZGVkXG4gICAqL1xuICByZWFkb25seSBjaWRyQmxvY2s/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBzZWNvbmRhcnkgSVB2NCBDSURSIEJsb2NrXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gQ0lEUiBibG9jayBwcm92aWRlZFxuICAgKi9cbiAgcmVhZG9ubHkgY2lkckJsb2NrTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogTmV0IG1hc2sgbGVuZ3RoIGZvciBJUHY2IGFkZHJlc3MgdHlwZVxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIE5ldCBtYXNrIGxlbmd0aCBjb25maWd1cmVkIGZvciBJUHY2XG4gICAqL1xuICByZWFkb25seSBpcHY2TmV0bWFza0xlbmd0aD86IG51bWJlcjtcblxuICAvKipcbiAgICogTmV0IG1hc2sgbGVuZ3RoIGZvciBJUHY0IGFkZHJlc3MgdHlwZVxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIE5ldCBtYXNrIGxlbmd0aCBjb25maWd1cmVkIGZvciBJUHY0XG4gICAqL1xuICByZWFkb25seSBpcHY0TmV0bWFza0xlbmd0aD86IG51bWJlcjtcblxuICAvKipcbiAgICogSVBBTSBwb29sIGZvciBJUHY2IGFkZHJlc3MgdHlwZVxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIElQQU0gcG9vbCBJZCBwcm92aWRlZCBmb3IgSVB2NlxuICAgKi9cbiAgcmVhZG9ubHkgaXB2NklwYW1Qb29sSWQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIElQQU0gcG9vbCBmb3IgSVB2NCBhZGRyZXNzIHR5cGVcbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBJUEFNIHBvb2wgSWQgcHJvdmlkZWQgZm9yIElQdjRcbiAgICovXG4gIHJlYWRvbmx5IGlwdjRJcGFtUG9vbElkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJUHY0IENJRFIgcHJvdmlzaW9uZWQgdW5kZXIgcG9vbFxuICAgKiBSZXF1aXJlZCB0byBjaGVjayBmb3Igb3ZlcmxhcHBpbmcgQ0lEUnMgYWZ0ZXIgcHJvdmlzaW9uaW5nXG4gICAqIGlzIGNvbXBsZXRlIHVuZGVyIElQQU0gcG9vbFxuICAgKiBAZGVmYXVsdCAtIG5vIElQQU0gSVB2NCBDSURSIHJhbmdlIGlzIHByb3Zpc2lvbmVkIHVzaW5nIElQQU1cbiAgICovXG4gIHJlYWRvbmx5IGlwdjRJcGFtUHJvdmlzaW9uZWRDaWRycz86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIEludGVyZmFjZSBWUENDaWRyQmxvY2tcbiAqL1xuaW50ZXJmYWNlIFZQQ0NpZHJCbG9ja1Byb3BzIGV4dGVuZHMgVlBDQ2lkckJsb2NrYXR0cmlidXRlcyB7XG4gIC8qKlxuICAgKiBUaGUgVlBDIElkIGZvciBhc3NvY2lhdGluZyBDSURSIEJsb2NrIGFzIGEgc2Vjb25kYXJ5IGFkZHJlc3NcbiAgICovXG4gIHJlYWRvbmx5IHZwY0lkOiBzdHJpbmc7XG59XG5cbi8qKlxuICogSW50ZXJuYWwgTDIgdG8gZGVmaW5lIGEgbmV3IFZQQyBDSURSIEJsb2NrXG4gKlxuICogU2VlIFtWUEMgQ0lEUiBibG9ja3NdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS92cGMvbGF0ZXN0L3VzZXJndWlkZS92cGMtY2lkci1ibG9ja3MuaHRtbClcbiAqIEBpbnRlcm5hbFxuICovXG5jbGFzcyBWUENDaWRyQmxvY2sgZXh0ZW5kcyBBd3NDb25zdHJ1Y3RCYXNlIGltcGxlbWVudHMgSVZQQ0NpZHJCbG9jayB7XG4gIC8qKlxuICAgKiBJbXBvcnQgYW4gZXhpc3RpbmcgVlBDIENJRFIgQmxvY2tcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbVZQQ0NpZHJCbG9ja2F0dHJpYnV0ZXMoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIHByb3BzOiBWUENDaWRyQmxvY2thdHRyaWJ1dGVzLFxuICApOiBJVlBDQ2lkckJsb2NrIHtcbiAgICBjbGFzcyBJbXBvcnQgZXh0ZW5kcyBBd3NDb25zdHJ1Y3RCYXNlIGltcGxlbWVudHMgSVZQQ0NpZHJCbG9jayB7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgb3V0cHV0czogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuICAgICAgcHVibGljIHJlYWRvbmx5IGNpZHJCbG9jayA9IHByb3BzLmNpZHJCbG9jaztcbiAgICAgIHB1YmxpYyByZWFkb25seSBhbWF6b25Qcm92aWRlZElwdjZDaWRyQmxvY2s/OiBib29sZWFuID1cbiAgICAgICAgcHJvcHMuYW1hem9uUHJvdmlkZWRJcHY2Q2lkckJsb2NrO1xuICAgICAgcHVibGljIHJlYWRvbmx5IGlwdjZJcGFtUG9vbElkPzogc3RyaW5nID0gcHJvcHMuaXB2NklwYW1Qb29sSWQ7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgaXB2NElwYW1Qb29sSWQ/OiBzdHJpbmcgPSBwcm9wcy5pcHY0SXBhbVBvb2xJZDtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBJbXBvcnQoc2NvcGUsIGlkKTtcbiAgfVxuICBwdWJsaWMgcmVhZG9ubHkgb3V0cHV0czogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuICBwdWJsaWMgcmVhZG9ubHkgcmVzb3VyY2U6XG4gICAgfCB2cGNJcHY0Q2lkckJsb2NrQXNzb2NpYXRpb24uVnBjSXB2NENpZHJCbG9ja0Fzc29jaWF0aW9uXG4gICAgfCB2cGNJcHY2Q2lkckJsb2NrQXNzb2NpYXRpb24uVnBjSXB2NkNpZHJCbG9ja0Fzc29jaWF0aW9uO1xuXG4gIHB1YmxpYyByZWFkb25seSBjaWRyQmxvY2s/OiBzdHJpbmc7XG5cbiAgcHVibGljIHJlYWRvbmx5IGFtYXpvblByb3ZpZGVkSXB2NkNpZHJCbG9jaz86IGJvb2xlYW47XG5cbiAgcHVibGljIHJlYWRvbmx5IGlwdjZJcGFtUG9vbElkPzogc3RyaW5nO1xuXG4gIHB1YmxpYyByZWFkb25seSBpcHY0SXBhbVBvb2xJZD86IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogVlBDQ2lkckJsb2NrUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuICAgIGNvbnN0IGlzSXB2NiA9XG4gICAgICBwcm9wcy5hbWF6b25Qcm92aWRlZElwdjZDaWRyQmxvY2sgPT09IHRydWUgfHxcbiAgICAgIHByb3BzLmlwdjZJcGFtUG9vbElkICE9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnJlc291cmNlID0gaXNJcHY2XG4gICAgICA/IG5ldyB2cGNJcHY2Q2lkckJsb2NrQXNzb2NpYXRpb24uVnBjSXB2NkNpZHJCbG9ja0Fzc29jaWF0aW9uKHRoaXMsIGlkLCB7XG4gICAgICAgICAgdnBjSWQ6IHByb3BzLnZwY0lkLFxuICAgICAgICAgIGFzc2lnbkdlbmVyYXRlZElwdjZDaWRyQmxvY2s6IHByb3BzLmFtYXpvblByb3ZpZGVkSXB2NkNpZHJCbG9jayxcbiAgICAgICAgICBpcHY2SXBhbVBvb2xJZDogcHJvcHMuaXB2NklwYW1Qb29sSWQsXG4gICAgICAgICAgaXB2Nk5ldG1hc2tMZW5ndGg6IHByb3BzLmlwdjZOZXRtYXNrTGVuZ3RoLFxuICAgICAgICAgIC8vIGlwdjZQb29sOiA/PyxcbiAgICAgICAgICAvLyBpcHY2Q2lkckJsb2NrOiA/Pz8sXG4gICAgICAgIH0pXG4gICAgICA6IG5ldyB2cGNJcHY0Q2lkckJsb2NrQXNzb2NpYXRpb24uVnBjSXB2NENpZHJCbG9ja0Fzc29jaWF0aW9uKHRoaXMsIGlkLCB7XG4gICAgICAgICAgdnBjSWQ6IHByb3BzLnZwY0lkLFxuICAgICAgICAgIGNpZHJCbG9jazogcHJvcHMuY2lkckJsb2NrLFxuICAgICAgICAgIGlwdjRJcGFtUG9vbElkOiBwcm9wcy5pcHY0SXBhbVBvb2xJZCxcbiAgICAgICAgICBpcHY0TmV0bWFza0xlbmd0aDogcHJvcHMuaXB2NE5ldG1hc2tMZW5ndGgsXG4gICAgICAgIH0pO1xuICAgIHRoaXMubm9kZS5kZWZhdWx0Q2hpbGQgPSB0aGlzLnJlc291cmNlO1xuICAgIHRoaXMuY2lkckJsb2NrID0gcHJvcHMuY2lkckJsb2NrO1xuICAgIHRoaXMuaXB2NklwYW1Qb29sSWQgPSBwcm9wcy5pcHY2SXBhbVBvb2xJZDtcbiAgICB0aGlzLmlwdjRJcGFtUG9vbElkID0gcHJvcHMuaXB2NElwYW1Qb29sSWQ7XG4gICAgdGhpcy5hbWF6b25Qcm92aWRlZElwdjZDaWRyQmxvY2sgPSBwcm9wcy5hbWF6b25Qcm92aWRlZElwdjZDaWRyQmxvY2s7XG4gIH1cbn1cblxuLy9AaW50ZXJuYWwgRmlyc3QgdHdvIE9jdGV0IHRvIHZlcmlmeSBSRkMgMTkxOFxuaW50ZXJmYWNlIElQYWRkcmVzc0NvbmZpZyB7XG4gIG9jdGV0MTogbnVtYmVyO1xuICBvY3RldDI6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgd2hldGhlciBhIHNlY29uZGFyeSBJUHY0IGFkZHJlc3MgaXMgd2l0aGluIHRoZSBzYW1lIHByaXZhdGUgSVAgYWRkcmVzcyByYW5nZSBhcyB0aGUgcHJpbWFyeSBJUHY0IGFkZHJlc3MuXG4gKlxuICogQHBhcmFtIGNpZHIxIFRoZSBzZWNvbmRhcnkgSVB2NCBDSURSIGJsb2NrIHRvIGJlIHZhbGlkYXRlZC5cbiAqIEBwYXJhbSBjaWRyMiBUaGUgcHJpbWFyeSBJUHY0IENJRFIgYmxvY2sgdG8gdmFsaWRhdGUgYWdhaW5zdC5cbiAqIEByZXR1cm5zIFRydWUgaWYgdGhlIHNlY29uZGFyeSBJUHY0IENJRFIgYmxvY2sgaXMgd2l0aGluIHRoZSBzYW1lIHByaXZhdGUgSVAgYWRkcmVzcyByYW5nZSBhcyB0aGUgcHJpbWFyeSBJUHY0IENJRFIgYmxvY2ssIGZhbHNlIG90aGVyd2lzZS5cbiAqIEBpbnRlcm5hbFxuICogVGhlIHByaXZhdGUgSVAgYWRkcmVzcyByYW5nZXMgYXJlIGRlZmluZWQgYnkgUkZDIDE5MTggYXMgMTAuMC4wLjAvOCwgMTcyLjE2LjAuMC8xMiwgYW5kIDE5Mi4xNjguMC4wLzE2LlxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUlwdjRhZGRyZXNzKGNpZHIxPzogc3RyaW5nLCBjaWRyMj86IHN0cmluZyk6IGJvb2xlYW4ge1xuICBpZiAoIWNpZHIxIHx8ICFjaWRyMikge1xuICAgIHJldHVybiBmYWxzZTsgLy8gSGFuZGxlIGNhc2VzIHdoZXJlIENJRFIgcmFuZ2VzIGFyZSBub3QgcHJvdmlkZWRcbiAgfVxuXG4gIGNvbnN0IG9jdGV0c0NpZHIxOiBudW1iZXJbXSA9IGNpZHIxXG4gICAgLnNwbGl0KFwiLlwiKVxuICAgIC5tYXAoKG9jdGV0KSA9PiBwYXJzZUludChvY3RldCwgMTApKTtcbiAgY29uc3Qgb2N0ZXRzQ2lkcjI6IG51bWJlcltdID0gY2lkcjJcbiAgICAuc3BsaXQoXCIuXCIpXG4gICAgLm1hcCgob2N0ZXQpID0+IHBhcnNlSW50KG9jdGV0LCAxMCkpO1xuXG4gIGlmIChvY3RldHNDaWRyMS5sZW5ndGggIT09IDQgfHwgb2N0ZXRzQ2lkcjIubGVuZ3RoICE9PSA0KSB7XG4gICAgcmV0dXJuIGZhbHNlOyAvLyBIYW5kbGUgaW52YWxpZCBDSURSIHJhbmdlc1xuICB9XG5cbiAgY29uc3QgaXAxOiBJUGFkZHJlc3NDb25maWcgPSB7XG4gICAgb2N0ZXQxOiBvY3RldHNDaWRyMVswXSxcbiAgICBvY3RldDI6IG9jdGV0c0NpZHIxWzFdLFxuICB9O1xuXG4gIGNvbnN0IGlwMjogSVBhZGRyZXNzQ29uZmlnID0ge1xuICAgIG9jdGV0MTogb2N0ZXRzQ2lkcjJbMF0sXG4gICAgb2N0ZXQyOiBvY3RldHNDaWRyMlsxXSxcbiAgfTtcblxuICByZXR1cm4gKFxuICAgIChpcDEub2N0ZXQxID09PSAxMCAmJiBpcDIub2N0ZXQxID09PSAxMCkgfHxcbiAgICAoaXAxLm9jdGV0MSA9PT0gMTkyICYmXG4gICAgICBpcDEub2N0ZXQyID09PSAxNjggJiZcbiAgICAgIGlwMi5vY3RldDEgPT09IDE5MiAmJlxuICAgICAgaXAyLm9jdGV0MiA9PT0gMTY4KSB8fFxuICAgIChpcDEub2N0ZXQxID09PSAxNzIgJiZcbiAgICAgIGlwMS5vY3RldDIgPT09IDE2ICYmXG4gICAgICBpcDIub2N0ZXQxID09PSAxNzIgJiZcbiAgICAgIGlwMi5vY3RldDIgPT09IDE2KVxuICApOyAvLyBDSURSIHJhbmdlcyBiZWxvbmcgdG8gc2FtZSBwcml2YXRlIElQIGFkZHJlc3MgcmFuZ2VzXG59XG4iXX0=
|