@aws-cdk/aws-ec2-alpha 2.176.0-alpha.0 → 2.178.0-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.jsii +4266 -1645
- package/.jsii.tabl.json.gz +0 -0
- package/.warnings.jsii.js +167 -1
- package/README.md +274 -33
- package/awslint.json +5 -1
- package/lib/index.d.ts +8 -0
- package/lib/index.js +9 -1
- package/lib/ipam.d.ts +16 -16
- package/lib/ipam.js +24 -5
- package/lib/route.js +40 -18
- package/lib/subnet-v2.d.ts +3 -3
- package/lib/subnet-v2.js +40 -29
- package/lib/transit-gateway-association.d.ts +18 -0
- package/lib/transit-gateway-association.js +12 -0
- package/lib/transit-gateway-attachment.d.ts +18 -0
- package/lib/transit-gateway-attachment.js +12 -0
- package/lib/transit-gateway-route-table-association.d.ts +40 -0
- package/lib/transit-gateway-route-table-association.js +40 -0
- package/lib/transit-gateway-route-table-propagation.d.ts +45 -0
- package/lib/transit-gateway-route-table-propagation.js +40 -0
- package/lib/transit-gateway-route-table.d.ts +78 -0
- package/lib/transit-gateway-route-table.js +74 -0
- package/lib/transit-gateway-route.d.ts +90 -0
- package/lib/transit-gateway-route.js +81 -0
- package/lib/transit-gateway-vpc-attachment.d.ts +122 -0
- package/lib/transit-gateway-vpc-attachment.js +96 -0
- package/lib/transit-gateway.d.ts +166 -0
- package/lib/transit-gateway.js +113 -0
- package/lib/util.d.ts +16 -8
- package/lib/util.js +77 -23
- package/lib/vpc-v2-base.d.ts +71 -56
- package/lib/vpc-v2-base.js +82 -65
- package/lib/vpc-v2.d.ts +60 -4
- package/lib/vpc-v2.js +58 -14
- package/package.json +8 -8
- package/rosetta/default.ts-fixture +1 -1
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { IResource, Resource } from 'aws-cdk-lib/core';
|
|
2
|
+
import { ITransitGateway } from './transit-gateway';
|
|
3
|
+
import { Construct } from 'constructs';
|
|
4
|
+
import { IRouteTable } from 'aws-cdk-lib/aws-ec2';
|
|
5
|
+
import { ITransitGatewayAttachment } from './transit-gateway-attachment';
|
|
6
|
+
import { ITransitGatewayRoute } from './transit-gateway-route';
|
|
7
|
+
import { ITransitGatewayRouteTableAssociation } from './transit-gateway-route-table-association';
|
|
8
|
+
import { ITransitGatewayRouteTablePropagation } from './transit-gateway-route-table-propagation';
|
|
9
|
+
/**
|
|
10
|
+
* Represents a Transit Gateway Route Table.
|
|
11
|
+
*/
|
|
12
|
+
export interface ITransitGatewayRouteTable extends IResource, IRouteTable {
|
|
13
|
+
/**
|
|
14
|
+
* Add an active route to this route table.
|
|
15
|
+
*
|
|
16
|
+
* @returns ITransitGatewayRoute
|
|
17
|
+
*/
|
|
18
|
+
addRoute(id: string, transitGatewayAttachment: ITransitGatewayAttachment, destinationCidr: string): ITransitGatewayRoute;
|
|
19
|
+
/**
|
|
20
|
+
* Add a blackhole route to this route table.
|
|
21
|
+
*
|
|
22
|
+
* @returns ITransitGatewayRoute
|
|
23
|
+
*/
|
|
24
|
+
addBlackholeRoute(id: string, destinationCidr: string): ITransitGatewayRoute;
|
|
25
|
+
/**
|
|
26
|
+
* Associate the provided Attachments with this route table.
|
|
27
|
+
*
|
|
28
|
+
* @returns ITransitGatewayRouteTableAssociation
|
|
29
|
+
*/
|
|
30
|
+
addAssociation(id: string, transitGatewayAttachment: ITransitGatewayAttachment): ITransitGatewayRouteTableAssociation;
|
|
31
|
+
/**
|
|
32
|
+
* Enable propagation from the provided Attachments to this route table.
|
|
33
|
+
*
|
|
34
|
+
* @returns ITransitGatewayRouteTablePropagation
|
|
35
|
+
*/
|
|
36
|
+
enablePropagation(id: string, transitGatewayAttachment: ITransitGatewayAttachment): ITransitGatewayRouteTablePropagation;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Common properties for creating a Transit Gateway Route Table resource.
|
|
40
|
+
*/
|
|
41
|
+
export interface TransitGatewayRouteTableProps {
|
|
42
|
+
/**
|
|
43
|
+
* The Transit Gateway that this route table belongs to.
|
|
44
|
+
*/
|
|
45
|
+
readonly transitGateway: ITransitGateway;
|
|
46
|
+
/**
|
|
47
|
+
* Physical name of this Transit Gateway Route Table.
|
|
48
|
+
*
|
|
49
|
+
* @default - Assigned by CloudFormation.
|
|
50
|
+
*/
|
|
51
|
+
readonly transitGatewayRouteTableName?: string;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* A Transit Gateway Route Table.
|
|
55
|
+
* @internal
|
|
56
|
+
*/
|
|
57
|
+
declare abstract class TransitGatewayRouteTableBase extends Resource implements ITransitGatewayRouteTable {
|
|
58
|
+
abstract readonly routeTableId: string;
|
|
59
|
+
abstract readonly transitGateway: ITransitGateway;
|
|
60
|
+
addRoute(id: string, transitGatewayAttachment: ITransitGatewayAttachment, destinationCidr: string): ITransitGatewayRoute;
|
|
61
|
+
addBlackholeRoute(id: string, destinationCidr: string): ITransitGatewayRoute;
|
|
62
|
+
addAssociation(id: string, transitGatewayAttachment: ITransitGatewayAttachment): ITransitGatewayRouteTableAssociation;
|
|
63
|
+
enablePropagation(id: string, transitGatewayAttachment: ITransitGatewayAttachment): ITransitGatewayRouteTablePropagation;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Creates a Transit Gateway route table.
|
|
67
|
+
*
|
|
68
|
+
* @resource AWS::EC2::TransitGatewayRouteTable
|
|
69
|
+
*/
|
|
70
|
+
export declare class TransitGatewayRouteTable extends TransitGatewayRouteTableBase {
|
|
71
|
+
readonly routeTableId: string;
|
|
72
|
+
/**
|
|
73
|
+
* The Transit Gateway.
|
|
74
|
+
*/
|
|
75
|
+
readonly transitGateway: ITransitGateway;
|
|
76
|
+
constructor(scope: Construct, id: string, props: TransitGatewayRouteTableProps);
|
|
77
|
+
}
|
|
78
|
+
export {};
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var _a;
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.TransitGatewayRouteTable = void 0;
|
|
5
|
+
const jsiiDeprecationWarnings = require("../.warnings.jsii.js");
|
|
6
|
+
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
7
|
+
const core_1 = require("aws-cdk-lib/core");
|
|
8
|
+
const aws_ec2_1 = require("aws-cdk-lib/aws-ec2");
|
|
9
|
+
const transit_gateway_route_1 = require("./transit-gateway-route");
|
|
10
|
+
const transit_gateway_route_table_association_1 = require("./transit-gateway-route-table-association");
|
|
11
|
+
const transit_gateway_route_table_propagation_1 = require("./transit-gateway-route-table-propagation");
|
|
12
|
+
const metadata_resource_1 = require("aws-cdk-lib/core/lib/metadata-resource");
|
|
13
|
+
/**
|
|
14
|
+
* A Transit Gateway Route Table.
|
|
15
|
+
* @internal
|
|
16
|
+
*/
|
|
17
|
+
class TransitGatewayRouteTableBase extends core_1.Resource {
|
|
18
|
+
addRoute(id, transitGatewayAttachment, destinationCidr) {
|
|
19
|
+
return new transit_gateway_route_1.TransitGatewayRoute(this, id, {
|
|
20
|
+
transitGatewayRouteTable: this,
|
|
21
|
+
transitGatewayAttachment,
|
|
22
|
+
destinationCidrBlock: destinationCidr,
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
addBlackholeRoute(id, destinationCidr) {
|
|
26
|
+
return new transit_gateway_route_1.TransitGatewayBlackholeRoute(this, id, {
|
|
27
|
+
transitGatewayRouteTable: this,
|
|
28
|
+
destinationCidrBlock: destinationCidr,
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
addAssociation(id, transitGatewayAttachment) {
|
|
32
|
+
return new transit_gateway_route_table_association_1.TransitGatewayRouteTableAssociation(this, id, {
|
|
33
|
+
transitGatewayVpcAttachment: transitGatewayAttachment,
|
|
34
|
+
transitGatewayRouteTable: this,
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
enablePropagation(id, transitGatewayAttachment) {
|
|
38
|
+
return new transit_gateway_route_table_propagation_1.TransitGatewayRouteTablePropagation(this, id, {
|
|
39
|
+
transitGatewayVpcAttachment: transitGatewayAttachment,
|
|
40
|
+
transitGatewayRouteTable: this,
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Creates a Transit Gateway route table.
|
|
46
|
+
*
|
|
47
|
+
* @resource AWS::EC2::TransitGatewayRouteTable
|
|
48
|
+
*/
|
|
49
|
+
class TransitGatewayRouteTable extends TransitGatewayRouteTableBase {
|
|
50
|
+
constructor(scope, id, props) {
|
|
51
|
+
super(scope, id);
|
|
52
|
+
try {
|
|
53
|
+
jsiiDeprecationWarnings._aws_cdk_aws_ec2_alpha_TransitGatewayRouteTableProps(props);
|
|
54
|
+
}
|
|
55
|
+
catch (error) {
|
|
56
|
+
if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
|
|
57
|
+
Error.captureStackTrace(error, TransitGatewayRouteTable);
|
|
58
|
+
}
|
|
59
|
+
throw error;
|
|
60
|
+
}
|
|
61
|
+
// Enhanced CDK Analytics Telemetry
|
|
62
|
+
(0, metadata_resource_1.addConstructMetadata)(this, props);
|
|
63
|
+
const resource = new aws_ec2_1.CfnTransitGatewayRouteTable(this, id, {
|
|
64
|
+
transitGatewayId: props.transitGateway.transitGatewayId,
|
|
65
|
+
});
|
|
66
|
+
this.node.defaultChild = resource;
|
|
67
|
+
this.routeTableId = resource.attrTransitGatewayRouteTableId;
|
|
68
|
+
this.transitGateway = props.transitGateway;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
exports.TransitGatewayRouteTable = TransitGatewayRouteTable;
|
|
72
|
+
_a = JSII_RTTI_SYMBOL_1;
|
|
73
|
+
TransitGatewayRouteTable[_a] = { fqn: "@aws-cdk/aws-ec2-alpha.TransitGatewayRouteTable", version: "2.178.0-alpha.0" };
|
|
74
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNpdC1nYXRld2F5LXJvdXRlLXRhYmxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsidHJhbnNpdC1nYXRld2F5LXJvdXRlLXRhYmxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLDJDQUF1RDtBQUd2RCxpREFBK0U7QUFFL0UsbUVBQWtIO0FBQ2xILHVHQUFzSTtBQUN0SSx1R0FBc0k7QUFDdEksOEVBQThFO0FBb0Q5RTs7O0dBR0c7QUFDSCxNQUFlLDRCQUE2QixTQUFRLGVBQVE7SUFJbkQsUUFBUSxDQUFDLEVBQVUsRUFBRSx3QkFBbUQsRUFBRSxlQUF1QjtRQUN0RyxPQUFPLElBQUksMkNBQW1CLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRTtZQUN2Qyx3QkFBd0IsRUFBRSxJQUFJO1lBQzlCLHdCQUF3QjtZQUN4QixvQkFBb0IsRUFBRSxlQUFlO1NBQ3RDLENBQUMsQ0FBQztLQUNKO0lBRU0saUJBQWlCLENBQUMsRUFBVSxFQUFFLGVBQXVCO1FBQzFELE9BQU8sSUFBSSxvREFBNEIsQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFO1lBQ2hELHdCQUF3QixFQUFFLElBQUk7WUFDOUIsb0JBQW9CLEVBQUUsZUFBZTtTQUN0QyxDQUFDLENBQUM7S0FDSjtJQUVNLGNBQWMsQ0FBQyxFQUFVLEVBQUUsd0JBQW1EO1FBQ25GLE9BQU8sSUFBSSw2RUFBbUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFO1lBQ3ZELDJCQUEyQixFQUFFLHdCQUF3QjtZQUNyRCx3QkFBd0IsRUFBRSxJQUFJO1NBQy9CLENBQUMsQ0FBQztLQUNKO0lBRU0saUJBQWlCLENBQUMsRUFBVSxFQUFFLHdCQUFtRDtRQUN0RixPQUFPLElBQUksNkVBQW1DLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRTtZQUN2RCwyQkFBMkIsRUFBRSx3QkFBd0I7WUFDckQsd0JBQXdCLEVBQUUsSUFBSTtTQUMvQixDQUFDLENBQUM7S0FDSjtDQUNGO0FBRUQ7Ozs7R0FJRztBQUNILE1BQWEsd0JBQXlCLFNBQVEsNEJBQTRCO0lBT3hFLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBb0M7UUFDNUUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQzs7Ozs7OytDQVJSLHdCQUF3Qjs7OztRQVNqQyxtQ0FBbUM7UUFDbkMsSUFBQSx3Q0FBb0IsRUFBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFbEMsTUFBTSxRQUFRLEdBQUcsSUFBSSxxQ0FBMkIsQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFO1lBQ3pELGdCQUFnQixFQUFFLEtBQUssQ0FBQyxjQUFjLENBQUMsZ0JBQWdCO1NBQ3hELENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxHQUFHLFFBQVEsQ0FBQztRQUVsQyxJQUFJLENBQUMsWUFBWSxHQUFHLFFBQVEsQ0FBQyw4QkFBOEIsQ0FBQztRQUM1RCxJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQyxjQUFjLENBQUM7S0FDNUM7O0FBcEJILDREQXFCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElSZXNvdXJjZSwgUmVzb3VyY2UgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlJztcbmltcG9ydCB7IElUcmFuc2l0R2F0ZXdheSB9IGZyb20gJy4vdHJhbnNpdC1nYXRld2F5JztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgQ2ZuVHJhbnNpdEdhdGV3YXlSb3V0ZVRhYmxlLCBJUm91dGVUYWJsZSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1lYzInO1xuaW1wb3J0IHsgSVRyYW5zaXRHYXRld2F5QXR0YWNobWVudCB9IGZyb20gJy4vdHJhbnNpdC1nYXRld2F5LWF0dGFjaG1lbnQnO1xuaW1wb3J0IHsgVHJhbnNpdEdhdGV3YXlSb3V0ZSwgVHJhbnNpdEdhdGV3YXlCbGFja2hvbGVSb3V0ZSwgSVRyYW5zaXRHYXRld2F5Um91dGUgfSBmcm9tICcuL3RyYW5zaXQtZ2F0ZXdheS1yb3V0ZSc7XG5pbXBvcnQgeyBJVHJhbnNpdEdhdGV3YXlSb3V0ZVRhYmxlQXNzb2NpYXRpb24sIFRyYW5zaXRHYXRld2F5Um91dGVUYWJsZUFzc29jaWF0aW9uIH0gZnJvbSAnLi90cmFuc2l0LWdhdGV3YXktcm91dGUtdGFibGUtYXNzb2NpYXRpb24nO1xuaW1wb3J0IHsgSVRyYW5zaXRHYXRld2F5Um91dGVUYWJsZVByb3BhZ2F0aW9uLCBUcmFuc2l0R2F0ZXdheVJvdXRlVGFibGVQcm9wYWdhdGlvbiB9IGZyb20gJy4vdHJhbnNpdC1nYXRld2F5LXJvdXRlLXRhYmxlLXByb3BhZ2F0aW9uJztcbmltcG9ydCB7IGFkZENvbnN0cnVjdE1ldGFkYXRhIH0gZnJvbSAnYXdzLWNkay1saWIvY29yZS9saWIvbWV0YWRhdGEtcmVzb3VyY2UnO1xuXG4vKipcbiAqIFJlcHJlc2VudHMgYSBUcmFuc2l0IEdhdGV3YXkgUm91dGUgVGFibGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVRyYW5zaXRHYXRld2F5Um91dGVUYWJsZSBleHRlbmRzIElSZXNvdXJjZSwgSVJvdXRlVGFibGUge1xuICAvKipcbiAgICogQWRkIGFuIGFjdGl2ZSByb3V0ZSB0byB0aGlzIHJvdXRlIHRhYmxlLlxuICAgKlxuICAgKiBAcmV0dXJucyBJVHJhbnNpdEdhdGV3YXlSb3V0ZVxuICAgKi9cbiAgYWRkUm91dGUoaWQ6IHN0cmluZywgdHJhbnNpdEdhdGV3YXlBdHRhY2htZW50OiBJVHJhbnNpdEdhdGV3YXlBdHRhY2htZW50LCBkZXN0aW5hdGlvbkNpZHI6IHN0cmluZyk6IElUcmFuc2l0R2F0ZXdheVJvdXRlO1xuXG4gIC8qKlxuICAgKiBBZGQgYSBibGFja2hvbGUgcm91dGUgdG8gdGhpcyByb3V0ZSB0YWJsZS5cbiAgICpcbiAgICogQHJldHVybnMgSVRyYW5zaXRHYXRld2F5Um91dGVcbiAgICovXG4gIGFkZEJsYWNraG9sZVJvdXRlKGlkOiBzdHJpbmcsIGRlc3RpbmF0aW9uQ2lkcjogc3RyaW5nKTogSVRyYW5zaXRHYXRld2F5Um91dGU7XG5cbiAgLyoqXG4gICAqIEFzc29jaWF0ZSB0aGUgcHJvdmlkZWQgQXR0YWNobWVudHMgd2l0aCB0aGlzIHJvdXRlIHRhYmxlLlxuICAgKlxuICAgKiBAcmV0dXJucyBJVHJhbnNpdEdhdGV3YXlSb3V0ZVRhYmxlQXNzb2NpYXRpb25cbiAgICovXG4gIGFkZEFzc29jaWF0aW9uKGlkOiBzdHJpbmcsIHRyYW5zaXRHYXRld2F5QXR0YWNobWVudDogSVRyYW5zaXRHYXRld2F5QXR0YWNobWVudCk6IElUcmFuc2l0R2F0ZXdheVJvdXRlVGFibGVBc3NvY2lhdGlvbjtcblxuICAvKipcbiAgICogRW5hYmxlIHByb3BhZ2F0aW9uIGZyb20gdGhlIHByb3ZpZGVkIEF0dGFjaG1lbnRzIHRvIHRoaXMgcm91dGUgdGFibGUuXG4gICAqXG4gICAqIEByZXR1cm5zIElUcmFuc2l0R2F0ZXdheVJvdXRlVGFibGVQcm9wYWdhdGlvblxuICAgKi9cbiAgZW5hYmxlUHJvcGFnYXRpb24oaWQ6IHN0cmluZywgdHJhbnNpdEdhdGV3YXlBdHRhY2htZW50OiBJVHJhbnNpdEdhdGV3YXlBdHRhY2htZW50KTogSVRyYW5zaXRHYXRld2F5Um91dGVUYWJsZVByb3BhZ2F0aW9uO1xufVxuXG4vKipcbiAqIENvbW1vbiBwcm9wZXJ0aWVzIGZvciBjcmVhdGluZyBhIFRyYW5zaXQgR2F0ZXdheSBSb3V0ZSBUYWJsZSByZXNvdXJjZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUcmFuc2l0R2F0ZXdheVJvdXRlVGFibGVQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgVHJhbnNpdCBHYXRld2F5IHRoYXQgdGhpcyByb3V0ZSB0YWJsZSBiZWxvbmdzIHRvLlxuICAgKi9cbiAgcmVhZG9ubHkgdHJhbnNpdEdhdGV3YXk6IElUcmFuc2l0R2F0ZXdheTtcblxuICAvKipcbiAgICogUGh5c2ljYWwgbmFtZSBvZiB0aGlzIFRyYW5zaXQgR2F0ZXdheSBSb3V0ZSBUYWJsZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBBc3NpZ25lZCBieSBDbG91ZEZvcm1hdGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IHRyYW5zaXRHYXRld2F5Um91dGVUYWJsZU5hbWU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBUcmFuc2l0IEdhdGV3YXkgUm91dGUgVGFibGUuXG4gKiBAaW50ZXJuYWxcbiAqL1xuYWJzdHJhY3QgY2xhc3MgVHJhbnNpdEdhdGV3YXlSb3V0ZVRhYmxlQmFzZSBleHRlbmRzIFJlc291cmNlIGltcGxlbWVudHMgSVRyYW5zaXRHYXRld2F5Um91dGVUYWJsZSB7XG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSByb3V0ZVRhYmxlSWQ6IHN0cmluZztcbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IHRyYW5zaXRHYXRld2F5OiBJVHJhbnNpdEdhdGV3YXk7XG5cbiAgcHVibGljIGFkZFJvdXRlKGlkOiBzdHJpbmcsIHRyYW5zaXRHYXRld2F5QXR0YWNobWVudDogSVRyYW5zaXRHYXRld2F5QXR0YWNobWVudCwgZGVzdGluYXRpb25DaWRyOiBzdHJpbmcpOiBJVHJhbnNpdEdhdGV3YXlSb3V0ZSB7XG4gICAgcmV0dXJuIG5ldyBUcmFuc2l0R2F0ZXdheVJvdXRlKHRoaXMsIGlkLCB7XG4gICAgICB0cmFuc2l0R2F0ZXdheVJvdXRlVGFibGU6IHRoaXMsXG4gICAgICB0cmFuc2l0R2F0ZXdheUF0dGFjaG1lbnQsXG4gICAgICBkZXN0aW5hdGlvbkNpZHJCbG9jazogZGVzdGluYXRpb25DaWRyLFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGFkZEJsYWNraG9sZVJvdXRlKGlkOiBzdHJpbmcsIGRlc3RpbmF0aW9uQ2lkcjogc3RyaW5nKTogSVRyYW5zaXRHYXRld2F5Um91dGUge1xuICAgIHJldHVybiBuZXcgVHJhbnNpdEdhdGV3YXlCbGFja2hvbGVSb3V0ZSh0aGlzLCBpZCwge1xuICAgICAgdHJhbnNpdEdhdGV3YXlSb3V0ZVRhYmxlOiB0aGlzLFxuICAgICAgZGVzdGluYXRpb25DaWRyQmxvY2s6IGRlc3RpbmF0aW9uQ2lkcixcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhZGRBc3NvY2lhdGlvbihpZDogc3RyaW5nLCB0cmFuc2l0R2F0ZXdheUF0dGFjaG1lbnQ6IElUcmFuc2l0R2F0ZXdheUF0dGFjaG1lbnQpOiBJVHJhbnNpdEdhdGV3YXlSb3V0ZVRhYmxlQXNzb2NpYXRpb24ge1xuICAgIHJldHVybiBuZXcgVHJhbnNpdEdhdGV3YXlSb3V0ZVRhYmxlQXNzb2NpYXRpb24odGhpcywgaWQsIHtcbiAgICAgIHRyYW5zaXRHYXRld2F5VnBjQXR0YWNobWVudDogdHJhbnNpdEdhdGV3YXlBdHRhY2htZW50LFxuICAgICAgdHJhbnNpdEdhdGV3YXlSb3V0ZVRhYmxlOiB0aGlzLFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGVuYWJsZVByb3BhZ2F0aW9uKGlkOiBzdHJpbmcsIHRyYW5zaXRHYXRld2F5QXR0YWNobWVudDogSVRyYW5zaXRHYXRld2F5QXR0YWNobWVudCk6IElUcmFuc2l0R2F0ZXdheVJvdXRlVGFibGVQcm9wYWdhdGlvbiB7XG4gICAgcmV0dXJuIG5ldyBUcmFuc2l0R2F0ZXdheVJvdXRlVGFibGVQcm9wYWdhdGlvbih0aGlzLCBpZCwge1xuICAgICAgdHJhbnNpdEdhdGV3YXlWcGNBdHRhY2htZW50OiB0cmFuc2l0R2F0ZXdheUF0dGFjaG1lbnQsXG4gICAgICB0cmFuc2l0R2F0ZXdheVJvdXRlVGFibGU6IHRoaXMsXG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgVHJhbnNpdCBHYXRld2F5IHJvdXRlIHRhYmxlLlxuICpcbiAqIEByZXNvdXJjZSBBV1M6OkVDMjo6VHJhbnNpdEdhdGV3YXlSb3V0ZVRhYmxlXG4gKi9cbmV4cG9ydCBjbGFzcyBUcmFuc2l0R2F0ZXdheVJvdXRlVGFibGUgZXh0ZW5kcyBUcmFuc2l0R2F0ZXdheVJvdXRlVGFibGVCYXNlIHtcbiAgcHVibGljIHJlYWRvbmx5IHJvdXRlVGFibGVJZDogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIFRyYW5zaXQgR2F0ZXdheS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB0cmFuc2l0R2F0ZXdheTogSVRyYW5zaXRHYXRld2F5O1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBUcmFuc2l0R2F0ZXdheVJvdXRlVGFibGVQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG4gICAgLy8gRW5oYW5jZWQgQ0RLIEFuYWx5dGljcyBUZWxlbWV0cnlcbiAgICBhZGRDb25zdHJ1Y3RNZXRhZGF0YSh0aGlzLCBwcm9wcyk7XG5cbiAgICBjb25zdCByZXNvdXJjZSA9IG5ldyBDZm5UcmFuc2l0R2F0ZXdheVJvdXRlVGFibGUodGhpcywgaWQsIHtcbiAgICAgIHRyYW5zaXRHYXRld2F5SWQ6IHByb3BzLnRyYW5zaXRHYXRld2F5LnRyYW5zaXRHYXRld2F5SWQsXG4gICAgfSk7XG5cbiAgICB0aGlzLm5vZGUuZGVmYXVsdENoaWxkID0gcmVzb3VyY2U7XG5cbiAgICB0aGlzLnJvdXRlVGFibGVJZCA9IHJlc291cmNlLmF0dHJUcmFuc2l0R2F0ZXdheVJvdXRlVGFibGVJZDtcbiAgICB0aGlzLnRyYW5zaXRHYXRld2F5ID0gcHJvcHMudHJhbnNpdEdhdGV3YXk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { IResource, Resource } from 'aws-cdk-lib/core';
|
|
2
|
+
import { Construct } from 'constructs';
|
|
3
|
+
import { CfnTransitGatewayRoute } from 'aws-cdk-lib/aws-ec2';
|
|
4
|
+
import { ITransitGatewayRouteTable } from './transit-gateway-route-table';
|
|
5
|
+
import { ITransitGatewayAttachment } from './transit-gateway-attachment';
|
|
6
|
+
/**
|
|
7
|
+
* Represents a Transit Gateway Route.
|
|
8
|
+
*/
|
|
9
|
+
export interface ITransitGatewayRoute extends IResource {
|
|
10
|
+
/**
|
|
11
|
+
* The destination CIDR block for this route.
|
|
12
|
+
*
|
|
13
|
+
* Destination Cidr cannot overlap for static routes but is allowed for propagated routes.
|
|
14
|
+
* When overlapping occurs, static routes take precedence over propagated routes.
|
|
15
|
+
*/
|
|
16
|
+
readonly destinationCidrBlock: string;
|
|
17
|
+
/**
|
|
18
|
+
* The transit gateway route table this route belongs to.
|
|
19
|
+
*/
|
|
20
|
+
readonly routeTable: ITransitGatewayRouteTable;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Common properties for a Transit Gateway Route.
|
|
24
|
+
*/
|
|
25
|
+
export interface BaseTransitGatewayRouteProps {
|
|
26
|
+
/**
|
|
27
|
+
* The destination CIDR block for this route.
|
|
28
|
+
*
|
|
29
|
+
* Destination Cidr cannot overlap for static routes but is allowed for propagated routes.
|
|
30
|
+
* When overlapping occurs, static routes take precedence over propagated routes.
|
|
31
|
+
*/
|
|
32
|
+
readonly destinationCidrBlock: string;
|
|
33
|
+
/**
|
|
34
|
+
* The transit gateway route table you want to install this route into.
|
|
35
|
+
*/
|
|
36
|
+
readonly transitGatewayRouteTable: ITransitGatewayRouteTable;
|
|
37
|
+
/**
|
|
38
|
+
* Physical name of this Transit Gateway Route.
|
|
39
|
+
*
|
|
40
|
+
* @default - Assigned by CloudFormation.
|
|
41
|
+
*/
|
|
42
|
+
readonly transitGatewayRouteName?: string;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Common properties for a Transit Gateway Route.
|
|
46
|
+
*/
|
|
47
|
+
export interface TransitGatewayRouteProps extends BaseTransitGatewayRouteProps {
|
|
48
|
+
/**
|
|
49
|
+
* The transit gateway attachment to route the traffic to.
|
|
50
|
+
*/
|
|
51
|
+
readonly transitGatewayAttachment: ITransitGatewayAttachment;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Properties for a Transit Gateway Blackhole Route.
|
|
55
|
+
*/
|
|
56
|
+
export interface TransitGatewayBlackholeRouteProps extends BaseTransitGatewayRouteProps {
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* A Transit Gateway Route.
|
|
60
|
+
* @internal
|
|
61
|
+
*/
|
|
62
|
+
declare abstract class TransitGatewayRouteBase extends Resource implements ITransitGatewayRoute {
|
|
63
|
+
abstract routeTable: ITransitGatewayRouteTable;
|
|
64
|
+
abstract destinationCidrBlock: string;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Create a Transit Gateway Active Route.
|
|
68
|
+
*
|
|
69
|
+
* @resource AWS::EC2::TransitGatewayRoute
|
|
70
|
+
*/
|
|
71
|
+
export declare class TransitGatewayRoute extends TransitGatewayRouteBase {
|
|
72
|
+
readonly routeTable: ITransitGatewayRouteTable;
|
|
73
|
+
readonly destinationCidrBlock: string;
|
|
74
|
+
/**
|
|
75
|
+
* The AWS CloudFormation resource representing the Transit Gateway Route.
|
|
76
|
+
*/
|
|
77
|
+
readonly resource: CfnTransitGatewayRoute;
|
|
78
|
+
constructor(scope: Construct, id: string, props: TransitGatewayRouteProps);
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Create a Transit Gateway Blackhole Route.
|
|
82
|
+
*
|
|
83
|
+
* @resource AWS::EC2::TransitGatewayRoute
|
|
84
|
+
*/
|
|
85
|
+
export declare class TransitGatewayBlackholeRoute extends TransitGatewayRouteBase {
|
|
86
|
+
readonly routeTable: ITransitGatewayRouteTable;
|
|
87
|
+
readonly destinationCidrBlock: string;
|
|
88
|
+
constructor(scope: Construct, id: string, props: TransitGatewayBlackholeRouteProps);
|
|
89
|
+
}
|
|
90
|
+
export {};
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var _a, _b;
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.TransitGatewayBlackholeRoute = exports.TransitGatewayRoute = void 0;
|
|
5
|
+
const jsiiDeprecationWarnings = require("../.warnings.jsii.js");
|
|
6
|
+
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
7
|
+
const core_1 = require("aws-cdk-lib/core");
|
|
8
|
+
const aws_ec2_1 = require("aws-cdk-lib/aws-ec2");
|
|
9
|
+
const metadata_resource_1 = require("aws-cdk-lib/core/lib/metadata-resource");
|
|
10
|
+
/**
|
|
11
|
+
* A Transit Gateway Route.
|
|
12
|
+
* @internal
|
|
13
|
+
*/
|
|
14
|
+
class TransitGatewayRouteBase extends core_1.Resource {
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Create a Transit Gateway Active Route.
|
|
18
|
+
*
|
|
19
|
+
* @resource AWS::EC2::TransitGatewayRoute
|
|
20
|
+
*/
|
|
21
|
+
class TransitGatewayRoute extends TransitGatewayRouteBase {
|
|
22
|
+
constructor(scope, id, props) {
|
|
23
|
+
super(scope, id);
|
|
24
|
+
try {
|
|
25
|
+
jsiiDeprecationWarnings._aws_cdk_aws_ec2_alpha_TransitGatewayRouteProps(props);
|
|
26
|
+
}
|
|
27
|
+
catch (error) {
|
|
28
|
+
if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
|
|
29
|
+
Error.captureStackTrace(error, TransitGatewayRoute);
|
|
30
|
+
}
|
|
31
|
+
throw error;
|
|
32
|
+
}
|
|
33
|
+
// Enhanced CDK Analytics Telemetry
|
|
34
|
+
(0, metadata_resource_1.addConstructMetadata)(this, props);
|
|
35
|
+
this.resource = new aws_ec2_1.CfnTransitGatewayRoute(this, 'TransitGatewayRoute', {
|
|
36
|
+
blackhole: false,
|
|
37
|
+
destinationCidrBlock: props.destinationCidrBlock,
|
|
38
|
+
transitGatewayRouteTableId: props.transitGatewayRouteTable.routeTableId,
|
|
39
|
+
transitGatewayAttachmentId: props.transitGatewayAttachment?.transitGatewayAttachmentId,
|
|
40
|
+
});
|
|
41
|
+
this.node.defaultChild = this.resource;
|
|
42
|
+
this.destinationCidrBlock = this.resource.destinationCidrBlock;
|
|
43
|
+
this.routeTable = props.transitGatewayRouteTable;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
exports.TransitGatewayRoute = TransitGatewayRoute;
|
|
47
|
+
_a = JSII_RTTI_SYMBOL_1;
|
|
48
|
+
TransitGatewayRoute[_a] = { fqn: "@aws-cdk/aws-ec2-alpha.TransitGatewayRoute", version: "2.178.0-alpha.0" };
|
|
49
|
+
/**
|
|
50
|
+
* Create a Transit Gateway Blackhole Route.
|
|
51
|
+
*
|
|
52
|
+
* @resource AWS::EC2::TransitGatewayRoute
|
|
53
|
+
*/
|
|
54
|
+
class TransitGatewayBlackholeRoute extends TransitGatewayRouteBase {
|
|
55
|
+
constructor(scope, id, props) {
|
|
56
|
+
super(scope, id);
|
|
57
|
+
try {
|
|
58
|
+
jsiiDeprecationWarnings._aws_cdk_aws_ec2_alpha_TransitGatewayBlackholeRouteProps(props);
|
|
59
|
+
}
|
|
60
|
+
catch (error) {
|
|
61
|
+
if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
|
|
62
|
+
Error.captureStackTrace(error, TransitGatewayBlackholeRoute);
|
|
63
|
+
}
|
|
64
|
+
throw error;
|
|
65
|
+
}
|
|
66
|
+
// Enhanced CDK Analytics Telemetry
|
|
67
|
+
(0, metadata_resource_1.addConstructMetadata)(this, props);
|
|
68
|
+
const resource = new aws_ec2_1.CfnTransitGatewayRoute(this, id, {
|
|
69
|
+
blackhole: true,
|
|
70
|
+
destinationCidrBlock: props.destinationCidrBlock,
|
|
71
|
+
transitGatewayRouteTableId: props.transitGatewayRouteTable.routeTableId,
|
|
72
|
+
});
|
|
73
|
+
this.node.defaultChild = resource;
|
|
74
|
+
this.destinationCidrBlock = resource.destinationCidrBlock;
|
|
75
|
+
this.routeTable = props.transitGatewayRouteTable;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
exports.TransitGatewayBlackholeRoute = TransitGatewayBlackholeRoute;
|
|
79
|
+
_b = JSII_RTTI_SYMBOL_1;
|
|
80
|
+
TransitGatewayBlackholeRoute[_b] = { fqn: "@aws-cdk/aws-ec2-alpha.TransitGatewayBlackholeRoute", version: "2.178.0-alpha.0" };
|
|
81
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNpdC1nYXRld2F5LXJvdXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsidHJhbnNpdC1nYXRld2F5LXJvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLDJDQUF1RDtBQUV2RCxpREFBNkQ7QUFHN0QsOEVBQThFO0FBNEQ5RTs7O0dBR0c7QUFDSCxNQUFlLHVCQUF3QixTQUFRLGVBQVE7Q0FHdEQ7QUFFRDs7OztHQUlHO0FBQ0gsTUFBYSxtQkFBb0IsU0FBUSx1QkFBdUI7SUFTOUQsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUErQjtRQUN2RSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDOzs7Ozs7K0NBVlIsbUJBQW1COzs7O1FBVzVCLG1DQUFtQztRQUNuQyxJQUFBLHdDQUFvQixFQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztRQUVsQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksZ0NBQXNCLENBQUMsSUFBSSxFQUFFLHFCQUFxQixFQUFFO1lBQ3RFLFNBQVMsRUFBRSxLQUFLO1lBQ2hCLG9CQUFvQixFQUFFLEtBQUssQ0FBQyxvQkFBb0I7WUFDaEQsMEJBQTBCLEVBQUUsS0FBSyxDQUFDLHdCQUF3QixDQUFDLFlBQVk7WUFDdkUsMEJBQTBCLEVBQUUsS0FBSyxDQUFDLHdCQUF3QixFQUFFLDBCQUEwQjtTQUN2RixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLG9CQUFvQixDQUFDO1FBQy9ELElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDLHdCQUF3QixDQUFDO0tBQ2xEOztBQXhCSCxrREF5QkM7OztBQUVEOzs7O0dBSUc7QUFDSCxNQUFhLDRCQUE2QixTQUFRLHVCQUF1QjtJQUl2RSxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQXdDO1FBQ2hGLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7Ozs7OzsrQ0FMUiw0QkFBNEI7Ozs7UUFNckMsbUNBQW1DO1FBQ25DLElBQUEsd0NBQW9CLEVBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRWxDLE1BQU0sUUFBUSxHQUFHLElBQUksZ0NBQXNCLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRTtZQUNwRCxTQUFTLEVBQUUsSUFBSTtZQUNmLG9CQUFvQixFQUFFLEtBQUssQ0FBQyxvQkFBb0I7WUFDaEQsMEJBQTBCLEVBQUUsS0FBSyxDQUFDLHdCQUF3QixDQUFDLFlBQVk7U0FDeEUsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEdBQUcsUUFBUSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxRQUFRLENBQUMsb0JBQW9CLENBQUM7UUFDMUQsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUMsd0JBQXdCLENBQUM7S0FDbEQ7O0FBbEJILG9FQW1CQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElSZXNvdXJjZSwgUmVzb3VyY2UgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgQ2ZuVHJhbnNpdEdhdGV3YXlSb3V0ZSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1lYzInO1xuaW1wb3J0IHsgSVRyYW5zaXRHYXRld2F5Um91dGVUYWJsZSB9IGZyb20gJy4vdHJhbnNpdC1nYXRld2F5LXJvdXRlLXRhYmxlJztcbmltcG9ydCB7IElUcmFuc2l0R2F0ZXdheUF0dGFjaG1lbnQgfSBmcm9tICcuL3RyYW5zaXQtZ2F0ZXdheS1hdHRhY2htZW50JztcbmltcG9ydCB7IGFkZENvbnN0cnVjdE1ldGFkYXRhIH0gZnJvbSAnYXdzLWNkay1saWIvY29yZS9saWIvbWV0YWRhdGEtcmVzb3VyY2UnO1xuXG4vKipcbiAqIFJlcHJlc2VudHMgYSBUcmFuc2l0IEdhdGV3YXkgUm91dGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVRyYW5zaXRHYXRld2F5Um91dGUgZXh0ZW5kcyBJUmVzb3VyY2Uge1xuICAvKipcbiAgICogVGhlIGRlc3RpbmF0aW9uIENJRFIgYmxvY2sgZm9yIHRoaXMgcm91dGUuXG4gICAqXG4gICAqIERlc3RpbmF0aW9uIENpZHIgY2Fubm90IG92ZXJsYXAgZm9yIHN0YXRpYyByb3V0ZXMgYnV0IGlzIGFsbG93ZWQgZm9yIHByb3BhZ2F0ZWQgcm91dGVzLlxuICAgKiBXaGVuIG92ZXJsYXBwaW5nIG9jY3Vycywgc3RhdGljIHJvdXRlcyB0YWtlIHByZWNlZGVuY2Ugb3ZlciBwcm9wYWdhdGVkIHJvdXRlcy5cbiAgICovXG4gIHJlYWRvbmx5IGRlc3RpbmF0aW9uQ2lkckJsb2NrOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB0cmFuc2l0IGdhdGV3YXkgcm91dGUgdGFibGUgdGhpcyByb3V0ZSBiZWxvbmdzIHRvLlxuICAgKi9cbiAgcmVhZG9ubHkgcm91dGVUYWJsZTogSVRyYW5zaXRHYXRld2F5Um91dGVUYWJsZTtcbn1cblxuLyoqXG4gKiBDb21tb24gcHJvcGVydGllcyBmb3IgYSBUcmFuc2l0IEdhdGV3YXkgUm91dGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQmFzZVRyYW5zaXRHYXRld2F5Um91dGVQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgZGVzdGluYXRpb24gQ0lEUiBibG9jayBmb3IgdGhpcyByb3V0ZS5cbiAgICpcbiAgICogRGVzdGluYXRpb24gQ2lkciBjYW5ub3Qgb3ZlcmxhcCBmb3Igc3RhdGljIHJvdXRlcyBidXQgaXMgYWxsb3dlZCBmb3IgcHJvcGFnYXRlZCByb3V0ZXMuXG4gICAqIFdoZW4gb3ZlcmxhcHBpbmcgb2NjdXJzLCBzdGF0aWMgcm91dGVzIHRha2UgcHJlY2VkZW5jZSBvdmVyIHByb3BhZ2F0ZWQgcm91dGVzLlxuICAgKi9cbiAgcmVhZG9ubHkgZGVzdGluYXRpb25DaWRyQmxvY2s6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHRyYW5zaXQgZ2F0ZXdheSByb3V0ZSB0YWJsZSB5b3Ugd2FudCB0byBpbnN0YWxsIHRoaXMgcm91dGUgaW50by5cbiAgICovXG4gIHJlYWRvbmx5IHRyYW5zaXRHYXRld2F5Um91dGVUYWJsZTogSVRyYW5zaXRHYXRld2F5Um91dGVUYWJsZTtcblxuICAvKipcbiAgICogUGh5c2ljYWwgbmFtZSBvZiB0aGlzIFRyYW5zaXQgR2F0ZXdheSBSb3V0ZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBBc3NpZ25lZCBieSBDbG91ZEZvcm1hdGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IHRyYW5zaXRHYXRld2F5Um91dGVOYW1lPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIENvbW1vbiBwcm9wZXJ0aWVzIGZvciBhIFRyYW5zaXQgR2F0ZXdheSBSb3V0ZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUcmFuc2l0R2F0ZXdheVJvdXRlUHJvcHMgZXh0ZW5kcyBCYXNlVHJhbnNpdEdhdGV3YXlSb3V0ZVByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSB0cmFuc2l0IGdhdGV3YXkgYXR0YWNobWVudCB0byByb3V0ZSB0aGUgdHJhZmZpYyB0by5cbiAgICovXG4gIHJlYWRvbmx5IHRyYW5zaXRHYXRld2F5QXR0YWNobWVudDogSVRyYW5zaXRHYXRld2F5QXR0YWNobWVudDtcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBhIFRyYW5zaXQgR2F0ZXdheSBCbGFja2hvbGUgUm91dGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHJhbnNpdEdhdGV3YXlCbGFja2hvbGVSb3V0ZVByb3BzIGV4dGVuZHMgQmFzZVRyYW5zaXRHYXRld2F5Um91dGVQcm9wcyB7fVxuXG4vKipcbiAqIEEgVHJhbnNpdCBHYXRld2F5IFJvdXRlLlxuICogQGludGVybmFsXG4gKi9cbmFic3RyYWN0IGNsYXNzIFRyYW5zaXRHYXRld2F5Um91dGVCYXNlIGV4dGVuZHMgUmVzb3VyY2UgaW1wbGVtZW50cyBJVHJhbnNpdEdhdGV3YXlSb3V0ZSB7XG4gIHB1YmxpYyBhYnN0cmFjdCByb3V0ZVRhYmxlOiBJVHJhbnNpdEdhdGV3YXlSb3V0ZVRhYmxlO1xuICBwdWJsaWMgYWJzdHJhY3QgZGVzdGluYXRpb25DaWRyQmxvY2s6IHN0cmluZztcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBUcmFuc2l0IEdhdGV3YXkgQWN0aXZlIFJvdXRlLlxuICpcbiAqIEByZXNvdXJjZSBBV1M6OkVDMjo6VHJhbnNpdEdhdGV3YXlSb3V0ZVxuICovXG5leHBvcnQgY2xhc3MgVHJhbnNpdEdhdGV3YXlSb3V0ZSBleHRlbmRzIFRyYW5zaXRHYXRld2F5Um91dGVCYXNlIHtcbiAgcHVibGljIHJlYWRvbmx5IHJvdXRlVGFibGU6IElUcmFuc2l0R2F0ZXdheVJvdXRlVGFibGU7XG4gIHB1YmxpYyByZWFkb25seSBkZXN0aW5hdGlvbkNpZHJCbG9jazogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgQVdTIENsb3VkRm9ybWF0aW9uIHJlc291cmNlIHJlcHJlc2VudGluZyB0aGUgVHJhbnNpdCBHYXRld2F5IFJvdXRlLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHJlc291cmNlOiBDZm5UcmFuc2l0R2F0ZXdheVJvdXRlO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBUcmFuc2l0R2F0ZXdheVJvdXRlUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuICAgIC8vIEVuaGFuY2VkIENESyBBbmFseXRpY3MgVGVsZW1ldHJ5XG4gICAgYWRkQ29uc3RydWN0TWV0YWRhdGEodGhpcywgcHJvcHMpO1xuXG4gICAgdGhpcy5yZXNvdXJjZSA9IG5ldyBDZm5UcmFuc2l0R2F0ZXdheVJvdXRlKHRoaXMsICdUcmFuc2l0R2F0ZXdheVJvdXRlJywge1xuICAgICAgYmxhY2tob2xlOiBmYWxzZSxcbiAgICAgIGRlc3RpbmF0aW9uQ2lkckJsb2NrOiBwcm9wcy5kZXN0aW5hdGlvbkNpZHJCbG9jayxcbiAgICAgIHRyYW5zaXRHYXRld2F5Um91dGVUYWJsZUlkOiBwcm9wcy50cmFuc2l0R2F0ZXdheVJvdXRlVGFibGUucm91dGVUYWJsZUlkLFxuICAgICAgdHJhbnNpdEdhdGV3YXlBdHRhY2htZW50SWQ6IHByb3BzLnRyYW5zaXRHYXRld2F5QXR0YWNobWVudD8udHJhbnNpdEdhdGV3YXlBdHRhY2htZW50SWQsXG4gICAgfSk7XG5cbiAgICB0aGlzLm5vZGUuZGVmYXVsdENoaWxkID0gdGhpcy5yZXNvdXJjZTtcbiAgICB0aGlzLmRlc3RpbmF0aW9uQ2lkckJsb2NrID0gdGhpcy5yZXNvdXJjZS5kZXN0aW5hdGlvbkNpZHJCbG9jaztcbiAgICB0aGlzLnJvdXRlVGFibGUgPSBwcm9wcy50cmFuc2l0R2F0ZXdheVJvdXRlVGFibGU7XG4gIH1cbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBUcmFuc2l0IEdhdGV3YXkgQmxhY2tob2xlIFJvdXRlLlxuICpcbiAqIEByZXNvdXJjZSBBV1M6OkVDMjo6VHJhbnNpdEdhdGV3YXlSb3V0ZVxuICovXG5leHBvcnQgY2xhc3MgVHJhbnNpdEdhdGV3YXlCbGFja2hvbGVSb3V0ZSBleHRlbmRzIFRyYW5zaXRHYXRld2F5Um91dGVCYXNlIHtcbiAgcHVibGljIHJlYWRvbmx5IHJvdXRlVGFibGU6IElUcmFuc2l0R2F0ZXdheVJvdXRlVGFibGU7XG4gIHB1YmxpYyByZWFkb25seSBkZXN0aW5hdGlvbkNpZHJCbG9jazogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBUcmFuc2l0R2F0ZXdheUJsYWNraG9sZVJvdXRlUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuICAgIC8vIEVuaGFuY2VkIENESyBBbmFseXRpY3MgVGVsZW1ldHJ5XG4gICAgYWRkQ29uc3RydWN0TWV0YWRhdGEodGhpcywgcHJvcHMpO1xuXG4gICAgY29uc3QgcmVzb3VyY2UgPSBuZXcgQ2ZuVHJhbnNpdEdhdGV3YXlSb3V0ZSh0aGlzLCBpZCwge1xuICAgICAgYmxhY2tob2xlOiB0cnVlLFxuICAgICAgZGVzdGluYXRpb25DaWRyQmxvY2s6IHByb3BzLmRlc3RpbmF0aW9uQ2lkckJsb2NrLFxuICAgICAgdHJhbnNpdEdhdGV3YXlSb3V0ZVRhYmxlSWQ6IHByb3BzLnRyYW5zaXRHYXRld2F5Um91dGVUYWJsZS5yb3V0ZVRhYmxlSWQsXG4gICAgfSk7XG5cbiAgICB0aGlzLm5vZGUuZGVmYXVsdENoaWxkID0gcmVzb3VyY2U7XG4gICAgdGhpcy5kZXN0aW5hdGlvbkNpZHJCbG9jayA9IHJlc291cmNlLmRlc3RpbmF0aW9uQ2lkckJsb2NrO1xuICAgIHRoaXMucm91dGVUYWJsZSA9IHByb3BzLnRyYW5zaXRHYXRld2F5Um91dGVUYWJsZTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import { ITransitGateway } from './transit-gateway';
|
|
2
|
+
import { ISubnet, IVpc } from 'aws-cdk-lib/aws-ec2';
|
|
3
|
+
import { Construct } from 'constructs';
|
|
4
|
+
import { ITransitGatewayAttachment, TransitGatewayAttachmentBase } from './transit-gateway-attachment';
|
|
5
|
+
import { ITransitGatewayRouteTable } from './transit-gateway-route-table';
|
|
6
|
+
/**
|
|
7
|
+
* Options for Transit Gateway VPC Attachment.
|
|
8
|
+
*/
|
|
9
|
+
export interface ITransitGatewayVpcAttachmentOptions {
|
|
10
|
+
/**
|
|
11
|
+
* Enable or disable appliance mode support.
|
|
12
|
+
*
|
|
13
|
+
* @default - disable (false)
|
|
14
|
+
*/
|
|
15
|
+
readonly applianceModeSupport?: boolean;
|
|
16
|
+
/**
|
|
17
|
+
* Enable or disable DNS support.
|
|
18
|
+
*
|
|
19
|
+
* @default - disable (false)
|
|
20
|
+
*/
|
|
21
|
+
readonly dnsSupport?: boolean;
|
|
22
|
+
/**
|
|
23
|
+
* Enable or disable IPv6 support.
|
|
24
|
+
*
|
|
25
|
+
* @default - disable (false)
|
|
26
|
+
*/
|
|
27
|
+
readonly ipv6Support?: boolean;
|
|
28
|
+
/**
|
|
29
|
+
* Enables you to reference a security group across VPCs attached to a transit gateway.
|
|
30
|
+
*
|
|
31
|
+
* @default - disable (false)
|
|
32
|
+
*/
|
|
33
|
+
readonly securityGroupReferencingSupport?: boolean;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Represents a Transit Gateway VPC Attachment.
|
|
37
|
+
*/
|
|
38
|
+
export interface ITransitGatewayVpcAttachment extends ITransitGatewayAttachment {
|
|
39
|
+
/**
|
|
40
|
+
* Add additional subnets to this attachment.
|
|
41
|
+
*/
|
|
42
|
+
addSubnets(subnets: ISubnet[]): void;
|
|
43
|
+
/**
|
|
44
|
+
* Remove subnets from this attachment.
|
|
45
|
+
*/
|
|
46
|
+
removeSubnets(subnets: ISubnet[]): void;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Base class for Transit Gateway VPC Attachment.
|
|
50
|
+
*/
|
|
51
|
+
interface BaseTransitGatewayVpcAttachmentProps {
|
|
52
|
+
/**
|
|
53
|
+
* A list of one or more subnets to place the attachment in.
|
|
54
|
+
* It is recommended to specify more subnets for better availability.
|
|
55
|
+
*/
|
|
56
|
+
readonly subnets: ISubnet[];
|
|
57
|
+
/**
|
|
58
|
+
* A VPC attachment(s) will get assigned to.
|
|
59
|
+
*/
|
|
60
|
+
readonly vpc: IVpc;
|
|
61
|
+
/**
|
|
62
|
+
* The VPC attachment options.
|
|
63
|
+
*
|
|
64
|
+
* @default - All options are disabled.
|
|
65
|
+
*/
|
|
66
|
+
readonly vpcAttachmentOptions?: ITransitGatewayVpcAttachmentOptions;
|
|
67
|
+
/**
|
|
68
|
+
* Physical name of this Transit Gateway VPC Attachment.
|
|
69
|
+
*
|
|
70
|
+
* @default - Assigned by CloudFormation.
|
|
71
|
+
*/
|
|
72
|
+
readonly transitGatewayAttachmentName?: string;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Common properties for creating a Transit Gateway VPC Attachment resource.
|
|
76
|
+
*/
|
|
77
|
+
export interface TransitGatewayVpcAttachmentProps extends BaseTransitGatewayVpcAttachmentProps {
|
|
78
|
+
/**
|
|
79
|
+
* The transit gateway this attachment gets assigned to.
|
|
80
|
+
*/
|
|
81
|
+
readonly transitGateway: ITransitGateway;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Options for creating an Attachment via the attachVpc() method.
|
|
85
|
+
*/
|
|
86
|
+
export interface AttachVpcOptions extends BaseTransitGatewayVpcAttachmentProps {
|
|
87
|
+
/**
|
|
88
|
+
* An optional route table to associate with this VPC attachment.
|
|
89
|
+
*
|
|
90
|
+
* @default - No associations will be created unless it is for the default route table and automatic association is enabled.
|
|
91
|
+
*/
|
|
92
|
+
readonly associationRouteTable?: ITransitGatewayRouteTable;
|
|
93
|
+
/**
|
|
94
|
+
* A list of optional route tables to propagate routes to.
|
|
95
|
+
*
|
|
96
|
+
* @default - No propagations will be created unless it is for the default route table and automatic propagation is enabled.
|
|
97
|
+
*/
|
|
98
|
+
readonly propagationRouteTables?: ITransitGatewayRouteTable[];
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Creates a Transit Gateway VPC Attachment.
|
|
102
|
+
*
|
|
103
|
+
* @resource AWS::EC2::TransitGatewayAttachment
|
|
104
|
+
*/
|
|
105
|
+
export declare class TransitGatewayVpcAttachment extends TransitGatewayAttachmentBase implements ITransitGatewayVpcAttachment {
|
|
106
|
+
readonly transitGatewayAttachmentId: string;
|
|
107
|
+
private readonly subnets;
|
|
108
|
+
/**
|
|
109
|
+
* The AWS CloudFormation resource representing the Transit Gateway Attachment.
|
|
110
|
+
*/
|
|
111
|
+
private readonly _resource;
|
|
112
|
+
constructor(scope: Construct, id: string, props: TransitGatewayVpcAttachmentProps);
|
|
113
|
+
/**
|
|
114
|
+
* Add additional subnets to this attachment.
|
|
115
|
+
*/
|
|
116
|
+
addSubnets(subnets: ISubnet[]): void;
|
|
117
|
+
/**
|
|
118
|
+
* Remove additional subnets to this attachment.
|
|
119
|
+
*/
|
|
120
|
+
removeSubnets(subnets: ISubnet[]): void;
|
|
121
|
+
}
|
|
122
|
+
export {};
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var _a;
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.TransitGatewayVpcAttachment = void 0;
|
|
5
|
+
const jsiiDeprecationWarnings = require("../.warnings.jsii.js");
|
|
6
|
+
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
7
|
+
const aws_ec2_1 = require("aws-cdk-lib/aws-ec2");
|
|
8
|
+
const transit_gateway_route_table_association_1 = require("./transit-gateway-route-table-association");
|
|
9
|
+
const transit_gateway_route_table_propagation_1 = require("./transit-gateway-route-table-propagation");
|
|
10
|
+
const transit_gateway_attachment_1 = require("./transit-gateway-attachment");
|
|
11
|
+
const util_1 = require("./util");
|
|
12
|
+
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
13
|
+
const metadata_resource_1 = require("aws-cdk-lib/core/lib/metadata-resource");
|
|
14
|
+
/**
|
|
15
|
+
* Creates a Transit Gateway VPC Attachment.
|
|
16
|
+
*
|
|
17
|
+
* @resource AWS::EC2::TransitGatewayAttachment
|
|
18
|
+
*/
|
|
19
|
+
class TransitGatewayVpcAttachment extends transit_gateway_attachment_1.TransitGatewayAttachmentBase {
|
|
20
|
+
constructor(scope, id, props) {
|
|
21
|
+
super(scope, id);
|
|
22
|
+
this.subnets = [];
|
|
23
|
+
try {
|
|
24
|
+
jsiiDeprecationWarnings._aws_cdk_aws_ec2_alpha_TransitGatewayVpcAttachmentProps(props);
|
|
25
|
+
}
|
|
26
|
+
catch (error) {
|
|
27
|
+
if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
|
|
28
|
+
Error.captureStackTrace(error, TransitGatewayVpcAttachment);
|
|
29
|
+
}
|
|
30
|
+
throw error;
|
|
31
|
+
}
|
|
32
|
+
// Enhanced CDK Analytics Telemetry
|
|
33
|
+
(0, metadata_resource_1.addConstructMetadata)(this, props);
|
|
34
|
+
this._resource = new aws_ec2_1.CfnTransitGatewayAttachment(this, id, {
|
|
35
|
+
subnetIds: props.subnets.map((subnet) => subnet.subnetId),
|
|
36
|
+
transitGatewayId: props.transitGateway.transitGatewayId,
|
|
37
|
+
vpcId: props.vpc.vpcId,
|
|
38
|
+
options: props.vpcAttachmentOptions ? {
|
|
39
|
+
ApplianceModeSupport: (0, util_1.getFeatureStatus)(props.vpcAttachmentOptions?.applianceModeSupport),
|
|
40
|
+
DnsSupport: (0, util_1.getFeatureStatus)(props.vpcAttachmentOptions?.dnsSupport),
|
|
41
|
+
Ipv6Support: (0, util_1.getFeatureStatus)(props.vpcAttachmentOptions?.ipv6Support),
|
|
42
|
+
SecurityGroupReferencingSupport: (0, util_1.getFeatureStatus)(props.vpcAttachmentOptions?.securityGroupReferencingSupport),
|
|
43
|
+
} : undefined,
|
|
44
|
+
});
|
|
45
|
+
this.node.defaultChild = this._resource;
|
|
46
|
+
this.transitGatewayAttachmentId = this._resource.attrId;
|
|
47
|
+
this.subnets = props.subnets;
|
|
48
|
+
if (props.vpcAttachmentOptions?.dnsSupport && !props.transitGateway.dnsSupport) {
|
|
49
|
+
aws_cdk_lib_1.Annotations.of(this).addWarningV2('@aws-cdk/aws-ec2:transitGatewayDnsSupportMismatch', '\'DnsSupport\' is enabled for the VPC Attachment but disabled on the TransitGateway. The feature will not work unless \'DnsSupport\' is enabled on both.');
|
|
50
|
+
}
|
|
51
|
+
if (props.vpcAttachmentOptions?.securityGroupReferencingSupport && !props.transitGateway.securityGroupReferencingSupport) {
|
|
52
|
+
aws_cdk_lib_1.Annotations.of(this).addWarningV2('@aws-cdk/aws-ec2:transitGatewaySecurityGroupReferencingSupportMismatch', '\'SecurityGroupReferencingSupport\' is enabled for the VPC Attachment but disabled on the TransitGateway. The feature will not work unless \'SecurityGroupReferencingSupport\' is enabled on both.');
|
|
53
|
+
}
|
|
54
|
+
if (props.transitGateway.defaultRouteTableAssociation) {
|
|
55
|
+
new transit_gateway_route_table_association_1.TransitGatewayRouteTableAssociation(this, id + 'Association', {
|
|
56
|
+
transitGatewayVpcAttachment: this,
|
|
57
|
+
transitGatewayRouteTable: props.transitGateway.defaultRouteTable,
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
if (props.transitGateway.defaultRouteTablePropagation) {
|
|
61
|
+
new transit_gateway_route_table_propagation_1.TransitGatewayRouteTablePropagation(this, id + 'Propagation', {
|
|
62
|
+
transitGatewayVpcAttachment: this,
|
|
63
|
+
transitGatewayRouteTable: props.transitGateway.defaultRouteTable,
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Add additional subnets to this attachment.
|
|
69
|
+
*/
|
|
70
|
+
addSubnets(subnets) {
|
|
71
|
+
for (const subnet of subnets) {
|
|
72
|
+
if (this.subnets.some(existing => existing.subnetId === subnet.subnetId)) {
|
|
73
|
+
throw new Error(`Subnet with ID ${subnet.subnetId} is already added to the Attachment ${this.transitGatewayAttachmentId}.`);
|
|
74
|
+
}
|
|
75
|
+
this.subnets.push(subnet);
|
|
76
|
+
}
|
|
77
|
+
this._resource.subnetIds = this.subnets.map(subnet => subnet.subnetId);
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Remove additional subnets to this attachment.
|
|
81
|
+
*/
|
|
82
|
+
removeSubnets(subnets) {
|
|
83
|
+
for (const subnet of subnets) {
|
|
84
|
+
const index = this.subnets.findIndex(existing => existing.subnetId === subnet.subnetId);
|
|
85
|
+
if (index === -1) {
|
|
86
|
+
throw new Error(`Subnet with ID ${subnet.subnetId} does not exist in the Attachment ${this.transitGatewayAttachmentId}.`);
|
|
87
|
+
}
|
|
88
|
+
this.subnets.splice(index, 1);
|
|
89
|
+
}
|
|
90
|
+
this._resource.subnetIds = this.subnets.map(subnet => subnet.subnetId);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
exports.TransitGatewayVpcAttachment = TransitGatewayVpcAttachment;
|
|
94
|
+
_a = JSII_RTTI_SYMBOL_1;
|
|
95
|
+
TransitGatewayVpcAttachment[_a] = { fqn: "@aws-cdk/aws-ec2-alpha.TransitGatewayVpcAttachment", version: "2.178.0-alpha.0" };
|
|
96
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNpdC1nYXRld2F5LXZwYy1hdHRhY2htZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsidHJhbnNpdC1nYXRld2F5LXZwYy1hdHRhY2htZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUNBLGlEQUFpRjtBQUVqRix1R0FBZ0c7QUFDaEcsdUdBQWdHO0FBQ2hHLDZFQUF1RztBQUN2RyxpQ0FBMEM7QUFFMUMsNkNBQTBDO0FBQzFDLDhFQUE4RTtBQTZHOUU7Ozs7R0FJRztBQUNILE1BQWEsMkJBQTRCLFNBQVEseURBQTRCO0lBUzNFLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBdUM7UUFDL0UsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQVJGLFlBQU8sR0FBYyxFQUFFLENBQUM7Ozs7OzsrQ0FGOUIsMkJBQTJCOzs7O1FBV3BDLG1DQUFtQztRQUNuQyxJQUFBLHdDQUFvQixFQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztRQUVsQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUkscUNBQTJCLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRTtZQUN6RCxTQUFTLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUM7WUFDekQsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0I7WUFDdkQsS0FBSyxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSztZQUN0QixPQUFPLEVBQUUsS0FBSyxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQztnQkFDcEMsb0JBQW9CLEVBQUUsSUFBQSx1QkFBZ0IsRUFBQyxLQUFLLENBQUMsb0JBQW9CLEVBQUUsb0JBQW9CLENBQUM7Z0JBQ3hGLFVBQVUsRUFBRSxJQUFBLHVCQUFnQixFQUFDLEtBQUssQ0FBQyxvQkFBb0IsRUFBRSxVQUFVLENBQUM7Z0JBQ3BF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QWtCLE1BQU0sQ0FBQyxRQUFRLHFDQUFxQyxJQUFJLENBQUMsMEJBQTBCLEdBQUcsQ0FBQyxDQUFDO1lBQzVILENBQUM7WUFDRCxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDaEMsQ0FBQztRQUNELElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0tBQ3hFOztBQTlFSCxrRUErRUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJVHJhbnNpdEdhdGV3YXkgfSBmcm9tICcuL3RyYW5zaXQtZ2F0ZXdheSc7XG5pbXBvcnQgeyBDZm5UcmFuc2l0R2F0ZXdheUF0dGFjaG1lbnQsIElTdWJuZXQsIElWcGMgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZWMyJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgVHJhbnNpdEdhdGV3YXlSb3V0ZVRhYmxlQXNzb2NpYXRpb24gfSBmcm9tICcuL3RyYW5zaXQtZ2F0ZXdheS1yb3V0ZS10YWJsZS1hc3NvY2lhdGlvbic7XG5pbXBvcnQgeyBUcmFuc2l0R2F0ZXdheVJvdXRlVGFibGVQcm9wYWdhdGlvbiB9IGZyb20gJy4vdHJhbnNpdC1nYXRld2F5LXJvdXRlLXRhYmxlLXByb3BhZ2F0aW9uJztcbmltcG9ydCB7IElUcmFuc2l0R2F0ZXdheUF0dGFjaG1lbnQsIFRyYW5zaXRHYXRld2F5QXR0YWNobWVudEJhc2UgfSBmcm9tICcuL3RyYW5zaXQtZ2F0ZXdheS1hdHRhY2htZW50JztcbmltcG9ydCB7IGdldEZlYXR1cmVTdGF0dXMgfSBmcm9tICcuL3V0aWwnO1xuaW1wb3J0IHsgSVRyYW5zaXRHYXRld2F5Um91dGVUYWJsZSB9IGZyb20gJy4vdHJhbnNpdC1nYXRld2F5LXJvdXRlLXRhYmxlJztcbmltcG9ydCB7IEFubm90YXRpb25zIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgYWRkQ29uc3RydWN0TWV0YWRhdGEgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9tZXRhZGF0YS1yZXNvdXJjZSc7XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgVHJhbnNpdCBHYXRld2F5IFZQQyBBdHRhY2htZW50LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElUcmFuc2l0R2F0ZXdheVZwY0F0dGFjaG1lbnRPcHRpb25zIHtcbiAgLyoqXG4gICAqIEVuYWJsZSBvciBkaXNhYmxlIGFwcGxpYW5jZSBtb2RlIHN1cHBvcnQuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZGlzYWJsZSAoZmFsc2UpXG4gICAqL1xuICByZWFkb25seSBhcHBsaWFuY2VNb2RlU3VwcG9ydD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEVuYWJsZSBvciBkaXNhYmxlIEROUyBzdXBwb3J0LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGRpc2FibGUgKGZhbHNlKVxuICAgKi9cbiAgcmVhZG9ubHkgZG5zU3VwcG9ydD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEVuYWJsZSBvciBkaXNhYmxlIElQdjYgc3VwcG9ydC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBkaXNhYmxlIChmYWxzZSlcbiAgICovXG4gIHJlYWRvbmx5IGlwdjZTdXBwb3J0PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogRW5hYmxlcyB5b3UgdG8gcmVmZXJlbmNlIGEgc2VjdXJpdHkgZ3JvdXAgYWNyb3NzIFZQQ3MgYXR0YWNoZWQgdG8gYSB0cmFuc2l0IGdhdGV3YXkuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZGlzYWJsZSAoZmFsc2UpXG4gICAqL1xuICByZWFkb25seSBzZWN1cml0eUdyb3VwUmVmZXJlbmNpbmdTdXBwb3J0PzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgVHJhbnNpdCBHYXRld2F5IFZQQyBBdHRhY2htZW50LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElUcmFuc2l0R2F0ZXdheVZwY0F0dGFjaG1lbnQgZXh0ZW5kcyBJVHJhbnNpdEdhdGV3YXlBdHRhY2htZW50IHtcbiAgLyoqXG4gICAqIEFkZCBhZGRpdGlvbmFsIHN1Ym5ldHMgdG8gdGhpcyBhdHRhY2htZW50LlxuICAgKi9cbiAgYWRkU3VibmV0cyhzdWJuZXRzOiBJU3VibmV0W10pOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBSZW1vdmUgc3VibmV0cyBmcm9tIHRoaXMgYXR0YWNobWVudC5cbiAgICovXG4gIHJlbW92ZVN1Ym5ldHMoc3VibmV0czogSVN1Ym5ldFtdKTogdm9pZDtcbn1cblxuLyoqXG4gKiBCYXNlIGNsYXNzIGZvciBUcmFuc2l0IEdhdGV3YXkgVlBDIEF0dGFjaG1lbnQuXG4gKi9cbmludGVyZmFjZSBCYXNlVHJhbnNpdEdhdGV3YXlWcGNBdHRhY2htZW50UHJvcHMge1xuICAvKipcbiAgICogQSBsaXN0IG9mIG9uZSBvciBtb3JlIHN1Ym5ldHMgdG8gcGxhY2UgdGhlIGF0dGFjaG1lbnQgaW4uXG4gICAqIEl0IGlzIHJlY29tbWVuZGVkIHRvIHNwZWNpZnkgbW9yZSBzdWJuZXRzIGZvciBiZXR0ZXIgYXZhaWxhYmlsaXR5LlxuICAgKi9cbiAgcmVhZG9ubHkgc3VibmV0czogSVN1Ym5ldFtdO1xuXG4gIC8qKlxuICAgKiBBIFZQQyBhdHRhY2htZW50KHMpIHdpbGwgZ2V0IGFzc2lnbmVkIHRvLlxuICAgKi9cbiAgcmVhZG9ubHkgdnBjOiBJVnBjO1xuXG4gIC8qKlxuICAgKiBUaGUgVlBDIGF0dGFjaG1lbnQgb3B0aW9ucy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBBbGwgb3B0aW9ucyBhcmUgZGlzYWJsZWQuXG4gICAqL1xuICByZWFkb25seSB2cGNBdHRhY2htZW50T3B0aW9ucz86IElUcmFuc2l0R2F0ZXdheVZwY0F0dGFjaG1lbnRPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBQaHlzaWNhbCBuYW1lIG9mIHRoaXMgVHJhbnNpdCBHYXRld2F5IFZQQyBBdHRhY2htZW50LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIEFzc2lnbmVkIGJ5IENsb3VkRm9ybWF0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgdHJhbnNpdEdhdGV3YXlBdHRhY2htZW50TmFtZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBDb21tb24gcHJvcGVydGllcyBmb3IgY3JlYXRpbmcgYSBUcmFuc2l0IEdhdGV3YXkgVlBDIEF0dGFjaG1lbnQgcmVzb3VyY2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHJhbnNpdEdhdGV3YXlWcGNBdHRhY2htZW50UHJvcHMgZXh0ZW5kcyBCYXNlVHJhbnNpdEdhdGV3YXlWcGNBdHRhY2htZW50UHJvcHMge1xuICAvKipcbiAgICogVGhlIHRyYW5zaXQgZ2F0ZXdheSB0aGlzIGF0dGFjaG1lbnQgZ2V0cyBhc3NpZ25lZCB0by5cbiAgICovXG4gIHJlYWRvbmx5IHRyYW5zaXRHYXRld2F5OiBJVHJhbnNpdEdhdGV3YXk7XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgY3JlYXRpbmcgYW4gQXR0YWNobWVudCB2aWEgdGhlIGF0dGFjaFZwYygpIG1ldGhvZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBdHRhY2hWcGNPcHRpb25zIGV4dGVuZHMgQmFzZVRyYW5zaXRHYXRld2F5VnBjQXR0YWNobWVudFByb3BzIHtcbiAgLyoqXG4gICAqIEFuIG9wdGlvbmFsIHJvdXRlIHRhYmxlIHRvIGFzc29jaWF0ZSB3aXRoIHRoaXMgVlBDIGF0dGFjaG1lbnQuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm8gYXNzb2NpYXRpb25zIHdpbGwgYmUgY3JlYXRlZCB1bmxlc3MgaXQgaXMgZm9yIHRoZSBkZWZhdWx0IHJvdXRlIHRhYmxlIGFuZCBhdXRvbWF0aWMgYXNzb2NpYXRpb24gaXMgZW5hYmxlZC5cbiAgICovXG4gIHJlYWRvbmx5IGFzc29jaWF0aW9uUm91dGVUYWJsZT86IElUcmFuc2l0R2F0ZXdheVJvdXRlVGFibGU7XG5cbiAgLyoqXG4gICAqIEEgbGlzdCBvZiBvcHRpb25hbCByb3V0ZSB0YWJsZXMgdG8gcHJvcGFnYXRlIHJvdXRlcyB0by5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBwcm9wYWdhdGlvbnMgd2lsbCBiZSBjcmVhdGVkIHVubGVzcyBpdCBpcyBmb3IgdGhlIGRlZmF1bHQgcm91dGUgdGFibGUgYW5kIGF1dG9tYXRpYyBwcm9wYWdhdGlvbiBpcyBlbmFibGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgcHJvcGFnYXRpb25Sb3V0ZVRhYmxlcz86IElUcmFuc2l0R2F0ZXdheVJvdXRlVGFibGVbXTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgVHJhbnNpdCBHYXRld2F5IFZQQyBBdHRhY2htZW50LlxuICpcbiAqIEByZXNvdXJjZSBBV1M6OkVDMjo6VHJhbnNpdEdhdGV3YXlBdHRhY2htZW50XG4gKi9cbmV4cG9ydCBjbGFzcyBUcmFuc2l0R2F0ZXdheVZwY0F0dGFjaG1lbnQgZXh0ZW5kcyBUcmFuc2l0R2F0ZXdheUF0dGFjaG1lbnRCYXNlIGltcGxlbWVudHMgSVRyYW5zaXRHYXRld2F5VnBjQXR0YWNobWVudCB7XG4gIHB1YmxpYyByZWFkb25seSB0cmFuc2l0R2F0ZXdheUF0dGFjaG1lbnRJZDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IHN1Ym5ldHM6IElTdWJuZXRbXSA9IFtdO1xuXG4gIC8qKlxuICAgKiBUaGUgQVdTIENsb3VkRm9ybWF0aW9uIHJlc291cmNlIHJlcHJlc2VudGluZyB0aGUgVHJhbnNpdCBHYXRld2F5IEF0dGFjaG1lbnQuXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZXNvdXJjZTogQ2ZuVHJhbnNpdEdhdGV3YXlBdHRhY2htZW50O1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBUcmFuc2l0R2F0ZXdheVZwY0F0dGFjaG1lbnRQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG4gICAgLy8gRW5oYW5jZWQgQ0RLIEFuYWx5dGljcyBUZWxlbWV0cnlcbiAgICBhZGRDb25zdHJ1Y3RNZXRhZGF0YSh0aGlzLCBwcm9wcyk7XG5cbiAgICB0aGlzLl9yZXNvdXJjZSA9IG5ldyBDZm5UcmFuc2l0R2F0ZXdheUF0dGFjaG1lbnQodGhpcywgaWQsIHtcbiAgICAgIHN1Ym5ldElkczogcHJvcHMuc3VibmV0cy5tYXAoKHN1Ym5ldCkgPT4gc3VibmV0LnN1Ym5ldElkKSxcbiAgICAgIHRyYW5zaXRHYXRld2F5SWQ6IHByb3BzLnRyYW5zaXRHYXRld2F5LnRyYW5zaXRHYXRld2F5SWQsXG4gICAgICB2cGNJZDogcHJvcHMudnBjLnZwY0lkLFxuICAgICAgb3B0aW9uczogcHJvcHMudnBjQXR0YWNobWVudE9wdGlvbnMgPyB7XG4gICAgICAgIEFwcGxpYW5jZU1vZGVTdXBwb3J0OiBnZXRGZWF0dXJlU3RhdHVzKHByb3BzLnZwY0F0dGFjaG1lbnRPcHRpb25zPy5hcHBsaWFuY2VNb2RlU3VwcG9ydCksXG4gICAgICAgIERuc1N1cHBvcnQ6IGdldEZlYXR1cmVTdGF0dXMocHJvcHMudnBjQXR0YWNobWVudE9wdGlvbnM/LmRuc1N1cHBvcnQpLFxuICAgICAgICBJcHY2U3VwcG9ydDogZ2V0RmVhdHVyZVN0YXR1cyhwcm9wcy52cGNBdHRhY2htZW50T3B0aW9ucz8uaXB2NlN1cHBvcnQpLFxuICAgICAgICBTZWN1cml0eUdyb3VwUmVmZXJlbmNpbmdTdXBwb3J0OiBnZXRGZWF0dXJlU3RhdHVzKHByb3BzLnZwY0F0dGFjaG1lbnRPcHRpb25zPy5zZWN1cml0eUdyb3VwUmVmZXJlbmNpbmdTdXBwb3J0KSxcbiAgICAgIH0gOiB1bmRlZmluZWQsXG4gICAgfSk7XG4gICAgdGhpcy5ub2RlLmRlZmF1bHRDaGlsZCA9IHRoaXMuX3Jlc291cmNlO1xuXG4gICAgdGhpcy50cmFuc2l0R2F0ZXdheUF0dGFjaG1lbnRJZCA9IHRoaXMuX3Jlc291cmNlLmF0dHJJZDtcbiAgICB0aGlzLnN1Ym5ldHMgPSBwcm9wcy5zdWJuZXRzO1xuXG4gICAgaWYgKHByb3BzLnZwY0F0dGFjaG1lbnRPcHRpb25zPy5kbnNTdXBwb3J0ICYmICFwcm9wcy50cmFuc2l0R2F0ZXdheS5kbnNTdXBwb3J0KSB7XG4gICAgICBBbm5vdGF0aW9ucy5vZih0aGlzKS5hZGRXYXJuaW5nVjIoJ0Bhd3MtY2RrL2F3cy1lYzI6dHJhbnNpdEdhdGV3YXlEbnNTdXBwb3J0TWlzbWF0Y2gnLCAnXFwnRG5zU3VwcG9ydFxcJyBpcyBlbmFibGVkIGZvciB0aGUgVlBDIEF0dGFjaG1lbnQgYnV0IGRpc2FibGVkIG9uIHRoZSBUcmFuc2l0R2F0ZXdheS4gVGhlIGZlYXR1cmUgd2lsbCBub3Qgd29yayB1bmxlc3MgXFwnRG5zU3VwcG9ydFxcJyBpcyBlbmFibGVkIG9uIGJvdGguJyk7XG4gICAgfVxuXG4gICAgaWYgKHByb3BzLnZwY0F0dGFjaG1lbnRPcHRpb25zPy5zZWN1cml0eUdyb3VwUmVmZXJlbmNpbmdTdXBwb3J0ICYmICFwcm9wcy50cmFuc2l0R2F0ZXdheS5zZWN1cml0eUdyb3VwUmVmZXJlbmNpbmdTdXBwb3J0KSB7XG4gICAgICBBbm5vdGF0aW9ucy5vZih0aGlzKS5hZGRXYXJuaW5nVjIoJ0Bhd3MtY2RrL2F3cy1lYzI6dHJhbnNpdEdhdGV3YXlTZWN1cml0eUdyb3VwUmVmZXJlbmNpbmdTdXBwb3J0TWlzbWF0Y2gnLCAnXFwnU2VjdXJpdHlHcm91cFJlZmVyZW5jaW5nU3VwcG9ydFxcJyBpcyBlbmFibGVkIGZvciB0aGUgVlBDIEF0dGFjaG1lbnQgYnV0IGRpc2FibGVkIG9uIHRoZSBUcmFuc2l0R2F0ZXdheS4gVGhlIGZlYXR1cmUgd2lsbCBub3Qgd29yayB1bmxlc3MgXFwnU2VjdXJpdHlHcm91cFJlZmVyZW5jaW5nU3VwcG9ydFxcJyBpcyBlbmFibGVkIG9uIGJvdGguJyk7XG4gICAgfVxuXG4gICAgaWYgKHByb3BzLnRyYW5zaXRHYXRld2F5LmRlZmF1bHRSb3V0ZVRhYmxlQXNzb2NpYXRpb24pIHtcbiAgICAgIG5ldyBUcmFuc2l0R2F0ZXdheVJvdXRlVGFibGVBc3NvY2lhdGlvbih0aGlzLCBpZCArICdBc3NvY2lhdGlvbicsIHtcbiAgICAgICAgdHJhbnNpdEdhdGV3YXlWcGNBdHRhY2htZW50OiB0aGlzLFxuICAgICAgICB0cmFuc2l0R2F0ZXdheVJvdXRlVGFibGU6IHByb3BzLnRyYW5zaXRHYXRld2F5LmRlZmF1bHRSb3V0ZVRhYmxlLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHByb3BzLnRyYW5zaXRHYXRld2F5LmRlZmF1bHRSb3V0ZVRhYmxlUHJvcGFnYXRpb24pIHtcbiAgICAgIG5ldyBUcmFuc2l0R2F0ZXdheVJvdXRlVGFibGVQcm9wYWdhdGlvbih0aGlzLCBpZCArICdQcm9wYWdhdGlvbicsIHtcbiAgICAgICAgdHJhbnNpdEdhdGV3YXlWcGNBdHRhY2htZW50OiB0aGlzLFxuICAgICAgICB0cmFuc2l0R2F0ZXdheVJvdXRlVGFibGU6IHByb3BzLnRyYW5zaXRHYXRld2F5LmRlZmF1bHRSb3V0ZVRhYmxlLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhZGRpdGlvbmFsIHN1Ym5ldHMgdG8gdGhpcyBhdHRhY2htZW50LlxuICAgKi9cbiAgYWRkU3VibmV0cyhzdWJuZXRzOiBJU3VibmV0W10pOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IHN1Ym5ldCBvZiBzdWJuZXRzKSB7XG4gICAgICBpZiAodGhpcy5zdWJuZXRzLnNvbWUoZXhpc3RpbmcgPT4gZXhpc3Rpbmcuc3VibmV0SWQgPT09IHN1Ym5ldC5zdWJuZXRJZCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBTdWJuZXQgd2l0aCBJRCAke3N1Ym5ldC5zdWJuZXRJZH0gaXMgYWxyZWFkeSBhZGRlZCB0byB0aGUgQXR0YWNobWVudCAke3RoaXMudHJhbnNpdEdhdGV3YXlBdHRhY2htZW50SWR9LmApO1xuICAgICAgfVxuICAgICAgdGhpcy5zdWJuZXRzLnB1c2goc3VibmV0KTtcbiAgICB9XG4gICAgdGhpcy5fcmVzb3VyY2Uuc3VibmV0SWRzID0gdGhpcy5zdWJuZXRzLm1hcChzdWJuZXQgPT4gc3VibmV0LnN1Ym5ldElkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgYWRkaXRpb25hbCBzdWJuZXRzIHRvIHRoaXMgYXR0YWNobWVudC5cbiAgICovXG4gIHJlbW92ZVN1Ym5ldHMoc3VibmV0czogSVN1Ym5ldFtdKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBzdWJuZXQgb2Ygc3VibmV0cykge1xuICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnN1Ym5ldHMuZmluZEluZGV4KGV4aXN0aW5nID0+IGV4aXN0aW5nLnN1Ym5ldElkID09PSBzdWJuZXQuc3VibmV0SWQpO1xuICAgICAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFN1Ym5ldCB3aXRoIElEICR7c3VibmV0LnN1Ym5ldElkfSBkb2VzIG5vdCBleGlzdCBpbiB0aGUgQXR0YWNobWVudCAke3RoaXMudHJhbnNpdEdhdGV3YXlBdHRhY2htZW50SWR9LmApO1xuICAgICAgfVxuICAgICAgdGhpcy5zdWJuZXRzLnNwbGljZShpbmRleCwgMSk7XG4gICAgfVxuICAgIHRoaXMuX3Jlc291cmNlLnN1Ym5ldElkcyA9IHRoaXMuc3VibmV0cy5tYXAoc3VibmV0ID0+IHN1Ym5ldC5zdWJuZXRJZCk7XG4gIH1cbn1cbiJdfQ==
|