@aws-cdk/aws-ec2-alpha 2.164.1-alpha.0 → 2.166.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 +1106 -262
- package/.jsii.tabl.json.gz +0 -0
- package/.warnings.jsii.js +25 -1
- package/README.md +132 -4
- package/awslint.json +0 -2
- package/lib/ipam.d.ts +5 -0
- package/lib/ipam.js +9 -2
- package/lib/route.js +7 -7
- package/lib/subnet-v2.d.ts +47 -0
- package/lib/subnet-v2.js +101 -15
- package/lib/util.js +6 -6
- package/lib/vpc-v2-base.d.ts +36 -3
- package/lib/vpc-v2-base.js +7 -4
- package/lib/vpc-v2.d.ts +165 -10
- package/lib/vpc-v2.js +121 -8
- package/package.json +8 -8
package/lib/vpc-v2-base.js
CHANGED
|
@@ -183,8 +183,11 @@ class VpcV2Base extends aws_cdk_lib_1.Resource {
|
|
|
183
183
|
const egw = new route_1.EgressOnlyInternetGateway(this, 'EgressOnlyGW', {
|
|
184
184
|
vpc: this,
|
|
185
185
|
});
|
|
186
|
-
|
|
187
|
-
|
|
186
|
+
let useIpv6;
|
|
187
|
+
if (this.secondaryCidrBlock) {
|
|
188
|
+
useIpv6 = (this.secondaryCidrBlock.some((secondaryAddress) => secondaryAddress.amazonProvidedIpv6CidrBlock === true ||
|
|
189
|
+
secondaryAddress.ipv6IpamPoolId != undefined));
|
|
190
|
+
}
|
|
188
191
|
if (!useIpv6) {
|
|
189
192
|
throw new Error('Egress only IGW can only be added to Ipv6 enabled VPC');
|
|
190
193
|
}
|
|
@@ -402,7 +405,7 @@ class VpcV2Base extends aws_cdk_lib_1.Resource {
|
|
|
402
405
|
}
|
|
403
406
|
exports.VpcV2Base = VpcV2Base;
|
|
404
407
|
_a = JSII_RTTI_SYMBOL_1;
|
|
405
|
-
VpcV2Base[_a] = { fqn: "@aws-cdk/aws-ec2-alpha.VpcV2Base", version: "2.
|
|
408
|
+
VpcV2Base[_a] = { fqn: "@aws-cdk/aws-ec2-alpha.VpcV2Base", version: "2.166.0-alpha.0" };
|
|
406
409
|
class CompositeDependable {
|
|
407
410
|
constructor() {
|
|
408
411
|
this.dependables = new Array();
|
|
@@ -431,4 +434,4 @@ function tap(x, fn) {
|
|
|
431
434
|
fn(x);
|
|
432
435
|
return x;
|
|
433
436
|
}
|
|
434
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidnBjLXYyLWJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ2cGMtdjItYmFzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSw2Q0FBb0Q7QUFDcEQsaURBQW1kO0FBQ25kLGlDQUFtRjtBQUNuRiwyQ0FBa0Y7QUFDbEYsbUNBQThJO0FBZ0k5STs7OztHQUlHO0FBQ0gsTUFBc0IsU0FBVSxTQUFRLHNCQUFRO0lBQWhEOztRQWlCRTs7VUFFRTtRQUNjLGtCQUFhLEdBQWMsRUFBRSxDQUFDO1FBRTlDOztVQUVFO1FBQ2MsbUJBQWMsR0FBYyxFQUFFLENBQUM7UUFPL0M7O1VBRUU7UUFDYyxzQkFBaUIsR0FBYSxFQUFFLENBQUM7UUFPakQ7Ozs7V0FJRztRQUNnQixxQ0FBZ0MsR0FBRyxJQUFJLDRCQUFlLEVBQUUsQ0FBQztRQWdCNUU7O1VBRUU7UUFDUSwrQkFBMEIsR0FBWSxLQUFLLENBQUM7UUFRdEQ7OztXQUdHO1FBQ08sdUJBQWtCLEdBQUcsRUFBRSxDQUFDO0tBNlduQztJQTNXQzs7Ozs7TUFLRTtJQUNLLGFBQWEsQ0FBQyxZQUE2QixFQUFFO1FBQ2xELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNwRCxNQUFNLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFFekMsT0FBTztZQUNMLFNBQVMsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztZQUN2QyxJQUFJLGlCQUFpQixLQUFlLE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNsRiwrQkFBK0IsRUFBRSxHQUFHLENBQUMsSUFBSSxtQkFBbUIsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMs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QUFjLENBQUM7Z0JBQ3BDLEtBQUssTUFBTSxHQUFHLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO29CQUNuQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsdUJBQVUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUM7Z0JBQ2xELENBQUM7Z0JBQ0QsT0FBTyxHQUFHLENBQUM7WUFDYixDQUFDO1NBQ0YsQ0FBQyxDQUFDO0tBQ0o7SUFFRDs7TUFFRTtJQUNLLEdBQUcsQ0FBQyxHQUFnQjtRQUN6QixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUM1QjtDQUNGO0FBRUQ7O0VBRUU7QUFDRixTQUFTLEdBQUcsQ0FBSSxDQUFJLEVBQUUsRUFBa0I7SUFDdEMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ04sT0FBTyxDQUFDLENBQUM7QUFFWCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUmVzb3VyY2UsIEFubm90YXRpb25zIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgSVZwYywgSVN1Ym5ldCwgU3VibmV0U2VsZWN0aW9uLCBTZWxlY3RlZFN1Ym5ldHMsIEVuYWJsZVZwbkdhdGV3YXlPcHRpb25zLCBWcG5HYXRld2F5LCBWcG5Db25uZWN0aW9uVHlwZSwgQ2ZuVlBDR2F0ZXdheUF0dGFjaG1lbnQsIENmblZQTkdhdGV3YXlSb3V0ZVByb3BhZ2F0aW9uLCBWcG5Db25uZWN0aW9uT3B0aW9ucywgVnBuQ29ubmVjdGlvbiwgQ2xpZW50VnBuRW5kcG9pbnRPcHRpb25zLCBDbGllbnRWcG5FbmRwb2ludCwgSW50ZXJmYWNlVnBjRW5kcG9pbnRPcHRpb25zLCBJbnRlcmZhY2VWcGNFbmRwb2ludCwgR2F0ZXdheVZwY0VuZHBvaW50T3B0aW9ucywgR2F0ZXdheVZwY0VuZHBvaW50LCBGbG93TG9nT3B0aW9ucywgRmxvd0xvZywgRmxvd0xvZ1Jlc291cmNlVHlwZSwgU3VibmV0VHlwZSwgU3VibmV0RmlsdGVyLCBDZm5WUENDaWRyQmxvY2sgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZWMyJztcbmltcG9ydCB7IGFsbFJvdXRlVGFibGVJZHMsIGZsYXR0ZW4sIHN1Ym5ldEdyb3VwTmFtZUZyb21Db25zdHJ1Y3RJZCB9IGZyb20gJy4vdXRpbCc7XG5pbXBvcnQgeyBJRGVwZW5kYWJsZSwgRGVwZW5kYWJsZSwgSUNvbnN0cnVjdCwgRGVwZW5kZW5jeUdyb3VwIH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBFZ3Jlc3NPbmx5SW50ZXJuZXRHYXRld2F5LCBJbnRlcm5ldEdhdGV3YXksIE5hdENvbm5lY3Rpdml0eVR5cGUsIE5hdEdhdGV3YXksIE5hdEdhdGV3YXlPcHRpb25zLCBSb3V0ZSwgVlBOR2F0ZXdheVYyIH0gZnJvbSAnLi9yb3V0ZSc7XG5pbXBvcnQgeyBJU3VibmV0VjIgfSBmcm9tICcuL3N1Ym5ldC12Mic7XG5cbi8qKlxuICogT3B0aW9ucyB0byBkZWZpbmUgRWdyZXNzT25seUludGVybmV0R2F0ZXdheSBmb3IgVlBDXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRWdyZXNzT25seUludGVybmV0R2F0ZXdheU9wdGlvbnMge1xuICAvKipcbiAgICogTGlzdCBvZiBzdWJuZXRzIHdoZXJlIHJvdXRlIHRvIEVHVyB3aWxsIGJlIGFkZGVkXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gcm91dGUgY3JlYXRlZFxuICAgKi9cbiAgcmVhZG9ubHkgc3VibmV0cz86IFN1Ym5ldFNlbGVjdGlvbltdO1xuXG4gIC8qKlxuICAgKiBEZXN0aW5hdGlvbiBJcHY2IGFkZHJlc3MgZm9yIEVHVyByb3V0ZVxuICAgKlxuICAgKiBAZGVmYXVsdCAtICc6Oi8wJyBhbGwgSXB2NiB0cmFmZmljXG4gICAqL1xuICByZWFkb25seSBkZXN0aW5hdGlvbj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBPcHRpb25zIHRvIGRlZmluZSBJbnRlcm5ldEdhdGV3YXkgZm9yIFZQQ1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEludGVybmV0R2F0ZXdheU9wdGlvbnN7XG5cbiAgLyoqXG4gICAqIERlc3RpbmF0aW9uIElwdjYgYWRkcmVzcyBmb3IgRUdXIHJvdXRlXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gJzAuMC4wLjAnIGFsbCBJcHY0IHRyYWZmaWNcbiAgICovXG4gIHJlYWRvbmx5IGlwdjREZXN0aW5hdGlvbj86IHN0cmluZztcblxuICAvKipcbiAgICogRGVzdGluYXRpb24gSXB2NiBhZGRyZXNzIGZvciBFR1cgcm91dGVcbiAgICpcbiAgICogQGRlZmF1bHQgLSAnOjovMCcgYWxsIElwdjYgdHJhZmZpY1xuICAgKi9cbiAgcmVhZG9ubHkgaXB2NkRlc3RpbmF0aW9uPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgdG8gZGVmaW5lIFZQTkdhdGV3YXlWMiBmb3IgVlBDXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVlBOR2F0ZXdheVYyT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiBWUE4gY29ubmVjdGlvbiB0aGUgdmlydHVhbCBwcml2YXRlIGdhdGV3YXkgc3VwcG9ydHMuXG4gICAqIEBzZWUgaHR0cDovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcmVzb3VyY2UtZWMyLXZwbmdhdGV3YXkuaHRtbCNjZm4tZWMyLXZwbmdhdGV3YXktdHlwZVxuICAgKi9cbiAgcmVhZG9ubHkgdHlwZTogVnBuQ29ubmVjdGlvblR5cGU7XG5cbiAgLyoqXG4gICAqIFRoZSBwcml2YXRlIEF1dG9ub21vdXMgU3lzdGVtIE51bWJlciAoQVNOKSBmb3IgdGhlIEFtYXpvbiBzaWRlIG9mIGEgQkdQIHNlc3Npb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gQVNOIHNldCBmb3IgQkdQIHNlc3Npb25cbiAgICovXG4gIHJlYWRvbmx5IGFtYXpvblNpZGVBc24/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSByZXNvdXJjZSBuYW1lIG9mIHRoZSBWUE4gZ2F0ZXdheS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSByZXNvdXJjZSBwcm92aXNpb25lZCB3aXRob3V0IGFueSBuYW1lXG4gICAqL1xuICByZWFkb25seSB2cG5HYXRld2F5TmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogU3VibmV0cyB3aGVyZSB0aGUgcm91dGUgcHJvcGFnYXRpb24gc2hvdWxkIGJlIGFkZGVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIHByb3BvZ2F0aW9uIGZvciByb3V0ZXNcbiAgICovXG4gIHJlYWRvbmx5IHZwblJvdXRlUHJvcGFnYXRpb24/OiBTdWJuZXRTZWxlY3Rpb25bXTtcbn1cblxuLyoqXG4gKiBQbGFjZWhvbGRlciB0byBzZWUgd2hhdCBleHRyYSBwcm9wcyB3ZSBtaWdodCBuZWVkLFxuICogd2lsbCBiZSBhZGRlZCB0byBvcmlnaW5hbCBJVlBDXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVZwY1YyIGV4dGVuZHMgSVZwYyB7XG4gIC8qKlxuICAgKiBUaGUgc2Vjb25kYXJ5IENJRFIgYmxvY2tzIGFzc29jaWF0ZWQgd2l0aCB0aGUgVlBDLlxuICAgKlxuICAgKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIHRoZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3ZwYy9sYXRlc3QvdXNlcmd1aWRlL3ZwYy1jaWRyLWJsb2Nrcy5odG1sI3ZwYy1yZXNpemV9LlxuICAgKi9cbiAgcmVhZG9ubHkgc2Vjb25kYXJ5Q2lkckJsb2NrOiBDZm5WUENDaWRyQmxvY2tbXTtcblxuICAvKipcbiAgICogVGhlIHByaW1hcnkgSVB2NCBDSURSIGJsb2NrIGFzc29jaWF0ZWQgd2l0aCB0aGUgVlBDLlxuICAgKiBOZWVkZWQgaW4gb3JkZXIgdG8gdmFsaWRhdGUgdGhlIHZwYyByYW5nZSBvZiBzdWJuZXRcbiAgICogY3VycmVudCBwcm9wIHZwY0NpZHJCbG9jayByZWZlcnMgdG8gdGhlIHRva2VuIHZhbHVlXG4gICAqIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgdGhlIHtAbGluayBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vdnBjL2xhdGVzdC91c2VyZ3VpZGUvdnBjLWNpZHItYmxvY2tzLmh0bWwjdnBjLXNpemluZy1pcHY0fS5cbiAgICovXG4gIHJlYWRvbmx5IGlwdjRDaWRyQmxvY2s6IHN0cmluZztcblxuICAvKipcbiAgICogQWRkIGFuIEVncmVzcyBvbmx5IEludGVybmV0IEdhdGV3YXkgdG8gY3VycmVudCBWUEMuXG4gICAqIENhbiBvbmx5IGJlIHVzZWQgZm9yIGlwdjYgZW5hYmxlZCBWUENzLlxuICAgKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIHRoZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3ZwYy9sYXRlc3QvdXNlcmd1aWRlL2VncmVzcy1vbmx5LWludGVybmV0LWdhdGV3YXktYmFzaWNzLmh0bWx9LlxuICAgKi9cbiAgYWRkRWdyZXNzT25seUludGVybmV0R2F0ZXdheShvcHRpb25zPzogRWdyZXNzT25seUludGVybmV0R2F0ZXdheU9wdGlvbnMpOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBBZGRzIGFuIEludGVybmV0IEdhdGV3YXkgdG8gY3VycmVudCBWUEMuXG4gICAqIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgdGhlIHtAbGluayBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vdnBjL2xhdGVzdC91c2VyZ3VpZGUvdnBjLWlndy1pbnRlcm5ldC1hY2Nlc3MuaHRtbH0uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZGVmaW5lcyByb3V0ZSBmb3IgYWxsIGlwdjQoJzAuMC4wLjAnKSBhbmQgaXB2NiBhZGRyZXNzZXMoJzo6LzAnKVxuICAgKi9cbiAgYWRkSW50ZXJuZXRHYXRld2F5KG9wdGlvbnM/OiBJbnRlcm5ldEdhdGV3YXlPcHRpb25zKTogdm9pZDtcblxuICAvKipcbiAgICogQWRkcyBWUE4gR2F0ZXdheSB0byBWUEMgYW5kIHNldCByb3V0ZSBwcm9wb2dhdGlvbi5cbiAgICogRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSB0aGUge0BsaW5rIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1yZXNvdXJjZS1lYzItdnBuZ2F0ZXdheS5odG1sfS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyByb3V0ZSBwcm9wb2dhdGlvblxuICAgKi9cbiAgZW5hYmxlVnBuR2F0ZXdheVYyKG9wdGlvbnM6IFZQTkdhdGV3YXlWMk9wdGlvbnMpOiBWUE5HYXRld2F5VjI7XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBuZXcgTkFUIEdhdGV3YXkgdG8gVlBDXG4gICAqIEEgTkFUIGdhdGV3YXkgaXMgYSBOZXR3b3JrIEFkZHJlc3MgVHJhbnNsYXRpb24gKE5BVCkgc2VydmljZS4gTkFUIEdhdGV3YXkgQ29ubmVjdGl2aXR5IGNhbiBiZSBvZiB0eXBlIGBQdWJsaWNgIG9yIGBQcml2YXRlYC5cbiAgICogRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSB0aGUge0BsaW5rIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS92cGMvbGF0ZXN0L3VzZXJndWlkZS92cGMtbmF0LWdhdGV3YXkuaHRtbH0uXG4gICAqXG4gICAqIEBkZWZhdWx0IENvbm5lY3Rpdml0eVR5cGUuUHVibGljXG4gICAqL1xuICBhZGROYXRHYXRld2F5KG9wdGlvbnM6IE5hdEdhdGV3YXlPcHRpb25zKTogTmF0R2F0ZXdheTtcblxufVxuXG4vKipcbiAqIEJhc2UgY2xhc3MgZm9yIGNyZWF0aW5nIGEgVlBDIChWaXJ0dWFsIFByaXZhdGUgQ2xvdWQpIGluIEFXUy5cbiAqXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIHRoZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Nkay9hcGkvdjIvZG9jcy9hd3MtY2RrLWxpYi5hd3NfZWMyLlZwYy5odG1sfEFXUyBDREsgRG9jdW1lbnRhdGlvbiBvbiBWUENzfS5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFZwY1YyQmFzZSBleHRlbmRzIFJlc291cmNlIGltcGxlbWVudHMgSVZwY1YyIHtcblxuICAvKipcbiAgKiBJZGVudGlmaWVyIGZvciB0aGlzIFZQQ1xuICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgdnBjSWQ6IHN0cmluZztcblxuICAvKipcbiAgKiBBcm4gb2YgdGhpcyBWUENcbiAgKi9cbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IHZwY0Fybjogc3RyaW5nO1xuXG4gIC8qKlxuICAqIENJRFIgcmFuZ2UgZm9yIHRoaXMgVlBDXG4gICovXG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSB2cGNDaWRyQmxvY2s6IHN0cmluZztcblxuICAvKipcbiAgKiBMaXN0IG9mIHB1YmxpYyBzdWJuZXRzIGluIHRoaXMgVlBDXG4gICovXG4gIHB1YmxpYyByZWFkb25seSBwdWJsaWNTdWJuZXRzOiBJU3VibmV0W10gPSBbXTtcblxuICAvKipcbiAgKiBMaXN0IG9mIHByaXZhdGUgc3VibmV0cyBpbiB0aGlzIFZQQ1xuICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcHJpdmF0ZVN1Ym5ldHM6IElTdWJuZXRbXSA9IFtdO1xuXG4gIC8qKlxuICAqIExpc3Qgb2YgaXNvbGF0ZWQgc3VibmV0cyBpbiB0aGlzIFZQQ1xuICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgaXNvbGF0ZWRTdWJuZXRzOiBJU3VibmV0W107XG5cbiAgLyoqXG4gICogQVpzIGZvciB0aGlzIFZQQ1xuICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYXZhaWxhYmlsaXR5Wm9uZXM6IHN0cmluZ1tdID0gW107XG5cbiAgLyoqXG4gICogRGVwZW5kYWJsZSB0aGF0IGNhbiBiZSBkZXBlbmRlZCB1cG9uIHRvIGZvcmNlIGludGVybmV0IGNvbm5lY3Rpdml0eSBlc3RhYmxpc2hlZCBvbiB0aGUgVlBDXG4gICovXG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBpbnRlcm5ldENvbm5lY3Rpdml0eUVzdGFibGlzaGVkOiBJRGVwZW5kYWJsZTtcblxuICAvKipcbiAgICogRGVwZW5kYWJsZSB0aGF0IGNhbiBiZSBkZXBlbmRlZCB1cG9uIHRvIGZvcmNlIGludGVybmV0IGNvbm5lY3Rpdml0eSBlc3RhYmxpc2hlZCBvbiB0aGUgVlBDXG4gICAqIEFkZCBpZ3cgdG8gdGhpcyBpZiBpdHMgYSBwdWJsaWMgc3VibmV0XG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IF9pbnRlcm5ldENvbm5lY3Rpdml0eUVzdGFibGlzaGVkID0gbmV3IERlcGVuZGVuY3lHcm91cCgpO1xuXG4gIC8qKlxuICAgKiBTZWNvbmRhcnkgSVBzIGZvciB0aGUgVlBDLCBjYW4gYmUgbXVsdGlwbGUgSXB2NCBvciBJcHY2XG4gICAqIElwdjQgc2hvdWxkIGJlIHdpdGhpbiBSRkMjMTkxOCByYW5nZVxuICAgKi9cbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IHNlY29uZGFyeUNpZHJCbG9jazogQ2ZuVlBDQ2lkckJsb2NrW107XG5cbiAgLyoqXG4gICAqIFRoZSBwcmltYXJ5IElQdjQgQ0lEUiBibG9jayBhc3NvY2lhdGVkIHdpdGggdGhlIFZQQy5cbiAgICogTmVlZGVkIGluIG9yZGVyIHRvIHZhbGlkYXRlIHRoZSB2cGMgcmFuZ2Ugb2Ygc3VibmV0XG4gICAqIGN1cnJlbnQgcHJvcCB2cGNDaWRyQmxvY2sgcmVmZXJzIHRvIHRoZSB0b2tlbiB2YWx1ZVxuICAgKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIHRoZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3ZwYy9sYXRlc3QvdXNlcmd1aWRlL3ZwYy1jaWRyLWJsb2Nrcy5odG1sI3ZwYy1zaXppbmctaXB2NH0uXG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgaXB2NENpZHJCbG9jazogc3RyaW5nO1xuXG4gIC8qKlxuICAqIElmIHRoaXMgaXMgc2V0IHRvIHRydWUsIGRvbid0IGVycm9yIG91dCBvbiB0cnlpbmcgdG8gc2VsZWN0IHN1Ym5ldHNcbiAgKi9cbiAgcHJvdGVjdGVkIGluY29tcGxldGVTdWJuZXREZWZpbml0aW9uOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIE11dGFibGUgcHJpdmF0ZSBmaWVsZCBmb3IgdGhlIHZwbkdhdGV3YXlJZFxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHByb3RlY3RlZCBfdnBuR2F0ZXdheUlkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBNdXRhYmxlIHByaXZhdGUgZmllbGQgZm9yIHRoZSBpbnRlcm5ldEdhdGV3YXlJZFxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHByb3RlY3RlZCBfaW50ZXJuZXRHYXRld2F5SWQgPSAnJztcblxuICAvKipcbiAgKiBSZXR1cm4gaW5mb3JtYXRpb24gb24gdGhlIHN1Ym5ldHMgYXBwcm9wcmlhdGUgZm9yIHRoZSBnaXZlbiBzZWxlY3Rpb24gc3RyYXRlZ3lcbiAgKlxuICAqIFJlcXVpcmVzIHRoYXQgYXQgbGVhc3Qgb25lIHN1Ym5ldCBpcyBtYXRjaGVkLCB0aHJvd3MgYSBkZXNjcmlwdGl2ZVxuICAqIGVycm9yIG1lc3NhZ2Ugb3RoZXJ3aXNlLlxuICAqL1xuICBwdWJsaWMgc2VsZWN0U3VibmV0cyhzZWxlY3Rpb246IFN1Ym5ldFNlbGVjdGlvbiA9IHt9KTogU2VsZWN0ZWRTdWJuZXRzIHtcbiAgICBjb25zdCBzdWJuZXRzID0gdGhpcy5zZWxlY3RTdWJuZXRPYmplY3RzKHNlbGVjdGlvbik7XG4gICAgY29uc3QgcHVicyA9IG5ldyBTZXQodGhpcy5wdWJsaWNTdWJuZXRzKTtcblxuICAgIHJldHVybiB7XG4gICAgICBzdWJuZXRJZHM6IHN1Ym5ldHMubWFwKHMgPT4gcy5zdWJuZXRJZCksXG4gICAgICBnZXQgYXZhaWxhYmlsaXR5Wm9uZXMoKTogc3RyaW5nW10geyByZXR1cm4gc3VibmV0cy5tYXAocyA9PiBzLmF2YWlsYWJpbGl0eVpvbmUpOyB9LFxuICAgICAgaW50ZXJuZXRDb25uZWN0aXZpdHlFc3RhYmxpc2hlZDogdGFwKG5ldyBDb21wb3NpdGVEZXBlbmRhYmxlKCksIGQgPT4gc3VibmV0cy5mb3JFYWNoKHMgPT4gZC5hZGQocy5pbnRlcm5ldENvbm5lY3Rpdml0eUVzdGFibGlzaGVkKSkpLFxuICAgICAgc3VibmV0cyxcbiAgICAgIGhhc1B1YmxpYzogc3VibmV0cy5zb21lKHMgPT4gcHVicy5oYXMocykpLFxuICAgICAgaXNQZW5kaW5nTG9va3VwOiB0aGlzLmluY29tcGxldGVTdWJuZXREZWZpbml0aW9uLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgKiBBZGRzIGEgVlBOIEdhdGV3YXkgdG8gdGhpcyBWUENcbiAgKiBAZGVwcmVjYXRlZCB1c2UgZW5hYmxlVnBuR2F0ZXdheVYyIGZvciBjb21wYXRpYmlsaXR5IHdpdGggVlBDVjIuUm91dGVcbiAgKi9cbiAgcHVibGljIGVuYWJsZVZwbkdhdGV3YXkob3B0aW9uczogRW5hYmxlVnBuR2F0ZXdheU9wdGlvbnMpOiB2b2lkIHtcbiAgICBpZiAodGhpcy52cG5HYXRld2F5SWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIFZQTiBHYXRld2F5IGhhcyBhbHJlYWR5IGJlZW4gZW5hYmxlZC4nKTtcbiAgICB9XG5cbiAgICBjb25zdCB2cG5HYXRld2F5ID0gbmV3IFZwbkdhdGV3YXkodGhpcywgJ1ZwbkdhdGV3YXknLCB7XG4gICAgICBhbWF6b25TaWRlQXNuOiBvcHRpb25zLmFtYXpvblNpZGVBc24sXG4gICAgICB0eXBlOiBWcG5Db25uZWN0aW9uVHlwZS5JUFNFQ18xLFxuICAgIH0pO1xuXG4gICAgdGhpcy5fdnBuR2F0ZXdheUlkID0gdnBuR2F0ZXdheS5nYXRld2F5SWQ7XG5cbiAgICBjb25zdCBhdHRhY2htZW50ID0gbmV3IENmblZQQ0dhdGV3YXlBdHRhY2htZW50KHRoaXMsICdWUENWUE5HVycsIHtcbiAgICAgIHZwY0lkOiB0aGlzLnZwY0lkLFxuICAgICAgdnBuR2F0ZXdheUlkOiB0aGlzLl92cG5HYXRld2F5SWQsXG4gICAgfSk7XG5cbiAgICAvLyBQcm9wYWdhdGUgcm91dGVzIG9uIHJvdXRlIHRhYmxlcyBhc3NvY2lhdGVkIHdpdGggdGhlIHJpZ2h0IHN1Ym5ldHNcbiAgICBjb25zdCB2cG5Sb3V0ZVByb3BhZ2F0aW9uID0gb3B0aW9ucy52cG5Sb3V0ZVByb3BhZ2F0aW9uID8/IFt7fV07XG4gICAgY29uc3Qgcm91dGVUYWJsZUlkcyA9IGFsbFJvdXRlVGFibGVJZHMoZmxhdHRlbih2cG5Sb3V0ZVByb3BhZ2F0aW9uLm1hcChzID0+IHRoaXMuc2VsZWN0U3VibmV0cyhzKS5zdWJuZXRzKSkpO1xuXG4gICAgaWYgKHJvdXRlVGFibGVJZHMubGVuZ3RoID09PSAwKSB7XG4gICAgICBBbm5vdGF0aW9ucy5vZih0aGlzKS5hZGRFcnJvcihgZW5hYmxlVnBuR2F0ZXdheTogbm8gc3VibmV0cyBtYXRjaGluZyBzZWxlY3Rpb246ICcke0pTT04uc3RyaW5naWZ5KHZwblJvdXRlUHJvcGFnYXRpb24pfScuIFNlbGVjdCBvdGhlciBzdWJuZXRzIHRvIGFkZCByb3V0ZXMgdG8uYCk7XG4gICAgfVxuXG4gICAgY29uc3Qgcm91dGVQcm9wYWdhdGlvbiA9IG5ldyBDZm5WUE5HYXRld2F5Um91dGVQcm9wYWdhdGlvbih0aGlzLCAnUm91dGVQcm9wYWdhdGlvbicsIHtcbiAgICAgIHJvdXRlVGFibGVJZHMsXG4gICAgICB2cG5HYXRld2F5SWQ6IHRoaXMuX3ZwbkdhdGV3YXlJZCxcbiAgICB9KTtcbiAgICAgIC8vIFRoZSBBV1M6OkVDMjo6VlBOR2F0ZXdheVJvdXRlUHJvcGFnYXRpb24gcmVzb3VyY2UgY2Fubm90IHVzZSB0aGUgVlBOIGdhdGV3YXlcbiAgICAgIC8vIHVudGlsIGl0IGhhcyBzdWNjZXNzZnVsbHkgYXR0YWNoZWQgdG8gdGhlIFZQQy5cbiAgICAgIC8vIFNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcmVzb3VyY2UtZWMyLXZwbi1nYXRld2F5cm91dGVwcm9wLmh0bWxcbiAgICByb3V0ZVByb3BhZ2F0aW9uLm5vZGUuYWRkRGVwZW5kZW5jeShhdHRhY2htZW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIFZQTkdBdGV3YXlWMiB0byB0aGlzIFZQQ1xuICAgKi9cbiAgcHVibGljIGVuYWJsZVZwbkdhdGV3YXlWMihvcHRpb25zOiBWUE5HYXRld2F5VjJPcHRpb25zKTogVlBOR2F0ZXdheVYyIHtcbiAgICBpZiAodGhpcy52cG5HYXRld2F5SWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIFZQTiBHYXRld2F5IGhhcyBhbHJlYWR5IGJlZW4gZW5hYmxlZC4nKTtcbiAgICB9XG5cbiAgICBjb25zdCB2cG5HYXRld2F5ID0gbmV3IFZQTkdhdGV3YXlWMih0aGlzLCAnVnBuR2F0ZXdheScsIHtcbiAgICAgIHZwYzogdGhpcyxcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgfSk7XG5cbiAgICB0aGlzLl9pbnRlcm5ldENvbm5lY3Rpdml0eUVzdGFibGlzaGVkLmFkZCh2cG5HYXRld2F5KTtcbiAgICB0aGlzLl92cG5HYXRld2F5SWQgPSB2cG5HYXRld2F5LnJvdXRlclRhcmdldElkO1xuXG4gICAgcmV0dXJuIHZwbkdhdGV3YXk7XG4gIH1cblxuICAvKipcbiAgKiBBZGRzIGEgbmV3IFZQTiBjb25uZWN0aW9uIHRvIHRoaXMgVlBDXG4gICovXG4gIHB1YmxpYyBhZGRWcG5Db25uZWN0aW9uKGlkOiBzdHJpbmcsIG9wdGlvbnM6IFZwbkNvbm5lY3Rpb25PcHRpb25zKTogVnBuQ29ubmVjdGlvbiB7XG4gICAgcmV0dXJuIG5ldyBWcG5Db25uZWN0aW9uKHRoaXMsIGlkLCB7XG4gICAgICB2cGM6IHRoaXMsXG4gICAgICAuLi5vcHRpb25zLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICogQWRkcyBhIG5ldyBjbGllbnQgVlBOIGVuZHBvaW50IHRvIHRoaXMgVlBDXG4gICovXG4gIHB1YmxpYyBhZGRDbGllbnRWcG5FbmRwb2ludChpZDogc3RyaW5nLCBvcHRpb25zOiBDbGllbnRWcG5FbmRwb2ludE9wdGlvbnMpOiBDbGllbnRWcG5FbmRwb2ludCB7XG4gICAgcmV0dXJuIG5ldyBDbGllbnRWcG5FbmRwb2ludCh0aGlzLCBpZCwge1xuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIHZwYzogdGhpcyxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAqIEFkZHMgYSBuZXcgaW50ZXJmYWNlIGVuZHBvaW50IHRvIHRoaXMgVlBDXG4gICovXG4gIHB1YmxpYyBhZGRJbnRlcmZhY2VFbmRwb2ludChpZDogc3RyaW5nLCBvcHRpb25zOiBJbnRlcmZhY2VWcGNFbmRwb2ludE9wdGlvbnMpOiBJbnRlcmZhY2VWcGNFbmRwb2ludCB7XG4gICAgcmV0dXJuIG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludCh0aGlzLCBpZCwge1xuICAgICAgdnBjOiB0aGlzLFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAqIEFkZHMgYSBuZXcgZ2F0ZXdheSBlbmRwb2ludCB0byB0aGlzIFZQQ1xuICAqL1xuICBwdWJsaWMgYWRkR2F0ZXdheUVuZHBvaW50KGlkOiBzdHJpbmcsIG9wdGlvbnM6IEdhdGV3YXlWcGNFbmRwb2ludE9wdGlvbnMpOiBHYXRld2F5VnBjRW5kcG9pbnQge1xuICAgIHJldHVybiBuZXcgR2F0ZXdheVZwY0VuZHBvaW50KHRoaXMsIGlkLCB7XG4gICAgICB2cGM6IHRoaXMsXG4gICAgICAuLi5vcHRpb25zLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBuZXcgRWdyZXNzIE9ubHkgSW50ZXJuZXQgR2F0ZXdheSB0byB0aGlzIFZQQyBhbmQgZGVmaW5lcyBhIG5ldyByb3V0ZVxuICAgKiB0byB0aGUgcm91dGUgdGFibGUgb2YgZ2l2ZW4gc3VibmV0cy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBpbiBjYXNlIG9mIG5vIGlucHV0IHN1Ym5ldHMsIG5vIHJvdXRlIGlzIGNyZWF0ZWRcbiAgICovXG4gIHB1YmxpYyBhZGRFZ3Jlc3NPbmx5SW50ZXJuZXRHYXRld2F5KG9wdGlvbnM/OiBFZ3Jlc3NPbmx5SW50ZXJuZXRHYXRld2F5T3B0aW9ucyk6IHZvaWQge1xuICAgIGNvbnN0IGVndyA9IG5ldyBFZ3Jlc3NPbmx5SW50ZXJuZXRHYXRld2F5KHRoaXMsICdFZ3Jlc3NPbmx5R1cnLCB7XG4gICAgICB2cGM6IHRoaXMsXG4gICAgfSk7XG5cbiAgICBjb25zdCB1c2VJcHY2ID0gKHRoaXMuc2Vjb25kYXJ5Q2lkckJsb2NrLnNvbWUoKHNlY29uZGFyeUFkZHJlc3MpID0+IHNlY29uZGFyeUFkZHJlc3MuYW1hem9uUHJvdmlkZWRJcHY2Q2lkckJsb2NrID09PSB0cnVlIHx8XG4gICAgc2Vjb25kYXJ5QWRkcmVzcy5pcHY2SXBhbVBvb2xJZCAhPSB1bmRlZmluZWQpKTtcblxuICAgIGlmICghdXNlSXB2Nikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdFZ3Jlc3Mgb25seSBJR1cgY2FuIG9ubHkgYmUgYWRkZWQgdG8gSXB2NiBlbmFibGVkIFZQQycpO1xuICAgIH07XG5cbiAgICBpZiAob3B0aW9ucz8uc3VibmV0cykge1xuICAgICAgY29uc3Qgc3VibmV0cyA9IGZsYXR0ZW4ob3B0aW9ucy5zdWJuZXRzLm1hcChzID0+IHRoaXMuc2VsZWN0U3VibmV0cyhzKS5zdWJuZXRzKSk7XG4gICAgICBzdWJuZXRzLmZvckVhY2goKHN1Ym5ldCkgPT4ge1xuICAgICAgICB0aGlzLmNyZWF0ZUVncmVzc1JvdXRlKHN1Ym5ldCwgZWd3LCBvcHRpb25zLmRlc3RpbmF0aW9uKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgcm91dGUgZm9yIEVHVyB3aXRoIGRlc3RpbmF0aW9uIHNldCB0byBvdXRib3VuZCBJUHY2KCc6Oi8wJykgb3IgY3VzdG9tIGlwdjYgYWRkcmVzcy5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBwcml2YXRlIGNyZWF0ZUVncmVzc1JvdXRlKHN1Ym5ldDogSVN1Ym5ldFYyLCBlZ3c6IEVncmVzc09ubHlJbnRlcm5ldEdhdGV3YXksIGRlc3RpbmF0aW9uPzogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgZGVzdGluYXRpb25JcHY2ID0gZGVzdGluYXRpb24gPz8gJzo6LzAnO1xuICAgIG5ldyBSb3V0ZSh0aGlzLCBgJHtzdWJuZXQubm9kZS5pZH0tRWdyZXNzUm91dGVgLCB7XG4gICAgICByb3V0ZVRhYmxlOiBzdWJuZXQucm91dGVUYWJsZSxcbiAgICAgIGRlc3RpbmF0aW9uOiBkZXN0aW5hdGlvbklwdjYsIC8vIElQdjYgZGVmYXVsdCByb3V0ZVxuICAgICAgdGFyZ2V0OiB7IGdhdGV3YXk6IGVndyB9LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBuZXcgSW50ZXJuZXQgR2F0ZXdheSB0byB0aGlzIFZQQ1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIGNyZWF0ZXMgYSBuZXcgcm91dGUgZm9yIHB1YmxpYyBzdWJuZXRzKHdpdGggYWxsIG91dGJvdW5kIGFjY2VzcykgdG8gdGhlIEludGVybmV0IEdhdGV3YXkuXG4gICAqL1xuICBwdWJsaWMgYWRkSW50ZXJuZXRHYXRld2F5KG9wdGlvbnM/OiBJbnRlcm5ldEdhdGV3YXlPcHRpb25zKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2ludGVybmV0R2F0ZXdheUlkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBJbnRlcm5ldCBHYXRld2F5IGhhcyBhbHJlYWR5IGJlZW4gZW5hYmxlZC4nKTtcbiAgICB9XG5cbiAgICBjb25zdCBpZ3cgPSBuZXcgSW50ZXJuZXRHYXRld2F5KHRoaXMsICdJbnRlcm5ldEdhdGV3YXknLCB7XG4gICAgICB2cGM6IHRoaXMsXG4gICAgfSk7XG5cbiAgICB0aGlzLl9pbnRlcm5ldENvbm5lY3Rpdml0eUVzdGFibGlzaGVkLmFkZChpZ3cpO1xuICAgIHRoaXMuX2ludGVybmV0R2F0ZXdheUlkID0gaWd3LnJvdXRlclRhcmdldElkO1xuXG4gICAgLy8gSWYgdGhlcmUgYXJlIG5vIHB1YmxpYyBzdWJuZXRzIGRlZmluZWQsIG5vIGRlZmF1bHQgcm91dGUgd2lsbCBiZSBhZGRlZFxuICAgIGlmICh0aGlzLnB1YmxpY1N1Ym5ldHMpIHtcbiAgICAgIHRoaXMucHVibGljU3VibmV0cy5mb3JFYWNoKCAocykgPT4gdGhpcy5hZGREZWZhdWx0SW50ZXJuZXRSb3V0ZShzLCBpZ3csIG9wdGlvbnMpKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBkZWZhdWx0IHJvdXRlIGZvciB0aGUgaW50ZXJuZXQgZ2F0ZXdheVxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHByaXZhdGUgYWRkRGVmYXVsdEludGVybmV0Um91dGUoc3VibmV0OiBJU3VibmV0VjIsIGlndzogSW50ZXJuZXRHYXRld2F5LCBvcHRpb25zPzogSW50ZXJuZXRHYXRld2F5T3B0aW9ucyk6IHZvaWQge1xuXG4gICAgaWYgKHN1Ym5ldC5zdWJuZXRUeXBlICE9PSBTdWJuZXRUeXBlLlBVQkxJQykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBwdWJsaWMgc3VibmV0cyBkZWZpbmVkIHRvIGFkZCByb3V0ZSBmb3IgaW50ZXJuZXQgZ2F0ZXdheScpO1xuICAgIH1cblxuICAgIC8vIEFkZCBkZWZhdWx0IHJvdXRlIHRvIElHVyBmb3IgSVB2NlxuICAgIGlmIChzdWJuZXQuaXB2NkNpZHJCbG9jaykge1xuICAgICAgbmV3IFJvdXRlKHRoaXMsIGAke3N1Ym5ldC5ub2RlLmlkfS1EZWZhdWx0SVB2NlJvdXRlYCwge1xuICAgICAgICByb3V0ZVRhYmxlOiBzdWJuZXQucm91dGVUYWJsZSxcbiAgICAgICAgZGVzdGluYXRpb246IG9wdGlvbnM/LmlwdjZEZXN0aW5hdGlvbiA/PyAnOjovMCcsXG4gICAgICAgIHRhcmdldDogeyBnYXRld2F5OiBpZ3cgfSxcbiAgICAgIH0pO1xuICAgIH1cbiAgICAvL0FkZCBkZWZhdWx0IHJvdXRlIHRvIElHVyBmb3IgSVB2NFxuICAgIG5ldyBSb3V0ZSh0aGlzLCBgJHtzdWJuZXQubm9kZS5pZH0tRGVmYXVsdFJvdXRlYCwge1xuICAgICAgcm91dGVUYWJsZTogc3VibmV0LnJvdXRlVGFibGUsXG4gICAgICBkZXN0aW5hdGlvbjogb3B0aW9ucz8uaXB2NERlc3RpbmF0aW9uID8/ICcwLjAuMC4wLzAnLFxuICAgICAgdGFyZ2V0OiB7IGdhdGV3YXk6IGlndyB9LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBuZXcgTkFUIEdhdGV3YXkgdG8gdGhlIGdpdmVuIHN1Ym5ldCBvZiB0aGlzIFZQQ1xuICAgKiBvZiBnaXZlbiBzdWJuZXRzLlxuICAgKi9cbiAgcHVibGljIGFkZE5hdEdhdGV3YXkob3B0aW9uczogTmF0R2F0ZXdheU9wdGlvbnMpOiBOYXRHYXRld2F5IHtcbiAgICBpZiAob3B0aW9ucy5jb25uZWN0aXZpdHlUeXBlID09PSBOYXRDb25uZWN0aXZpdHlUeXBlLlBVQkxJQyAmJiAhdGhpcy5faW50ZXJuZXRHYXRld2F5SWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGFkZCBhIFB1YmxpYyBOQVQgR2F0ZXdheSB3aXRob3V0IGFuIEludGVybmV0IEdhdGV3YXkgZW5hYmxlZCBvbiBWUEMnKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBOYXRHYXRld2F5KHRoaXMsICdOQVRHYXRld2F5Jywge1xuICAgICAgdnBjOiB0aGlzLFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAqIEFkZHMgYSBuZXcgZmxvdyBsb2cgdG8gdGhpcyBWUENcbiAgKi9cbiAgcHVibGljIGFkZEZsb3dMb2coaWQ6IHN0cmluZywgb3B0aW9ucz86IEZsb3dMb2dPcHRpb25zKTogRmxvd0xvZyB7XG4gICAgcmV0dXJuIG5ldyBGbG93TG9nKHRoaXMsIGlkLCB7XG4gICAgICByZXNvdXJjZVR5cGU6IEZsb3dMb2dSZXNvdXJjZVR5cGUuZnJvbVZwYyh0aGlzKSxcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgKiBSZXR1cm5zIHRoZSBpZCBvZiB0aGUgVlBOIEdhdGV3YXkgKGlmIGVuYWJsZWQpXG4gICovXG4gIHB1YmxpYyBnZXQgdnBuR2F0ZXdheUlkKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX3ZwbkdhdGV3YXlJZDtcbiAgfVxuXG4gIC8qKlxuICAqIFJldHVybnMgdGhlIGlkIG9mIHRoZSBJbnRlcm5ldCBHYXRld2F5IChpZiBlbmFibGVkKVxuICAqL1xuICBwdWJsaWMgZ2V0IGludGVybmV0R2F0ZXdheUlkKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2ludGVybmV0R2F0ZXdheUlkO1xuICB9XG5cbiAgLyoqXG4gICogUmV0dXJuIHRoZSBzdWJuZXRzIGFwcHJvcHJpYXRlIGZvciB0aGUgcGxhY2VtZW50IHN0cmF0ZWd5XG4gICovXG4gIHByb3RlY3RlZCBzZWxlY3RTdWJuZXRPYmplY3RzKHNlbGVjdGlvbjogU3VibmV0U2VsZWN0aW9uID0ge30pOiBJU3VibmV0W10ge1xuICAgIHNlbGVjdGlvbiA9IHRoaXMucmVpZnlTZWxlY3Rpb25EZWZhdWx0cyhzZWxlY3Rpb24pO1xuXG4gICAgaWYgKHNlbGVjdGlvbi5zdWJuZXRzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBzZWxlY3Rpb24uc3VibmV0cztcbiAgICB9XG5cbiAgICBsZXQgc3VibmV0cztcblxuICAgIGlmIChzZWxlY3Rpb24uc3VibmV0R3JvdXBOYW1lICE9PSB1bmRlZmluZWQpIHsgLy8gU2VsZWN0IGJ5IG5hbWVcbiAgICAgIHN1Ym5ldHMgPSB0aGlzLnNlbGVjdFN1Ym5ldE9iamVjdHNCeU5hbWUoc2VsZWN0aW9uLnN1Ym5ldEdyb3VwTmFtZSk7XG5cbiAgICB9IGVsc2UgeyAvLyBPciBzcGVjaWZ5IGJ5IHR5cGVcbiAgICAgIGNvbnN0IHR5cGUgPSBzZWxlY3Rpb24uc3VibmV0VHlwZSB8fCBTdWJuZXRUeXBlLlBSSVZBVEVfV0lUSF9FR1JFU1M7XG4gICAgICBzdWJuZXRzID0gdGhpcy5zZWxlY3RTdWJuZXRPYmplY3RzQnlUeXBlKHR5cGUpO1xuICAgIH1cblxuICAgIC8vIEFwcGx5IGFsbCB0aGUgZmlsdGVyc1xuICAgIHN1Ym5ldHMgPSB0aGlzLmFwcGx5U3VibmV0RmlsdGVycyhzdWJuZXRzLCBzZWxlY3Rpb24uc3VibmV0RmlsdGVycyA/PyBbXSk7XG5cbiAgICByZXR1cm4gc3VibmV0cztcbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlTdWJuZXRGaWx0ZXJzKHN1Ym5ldHM6IElTdWJuZXRbXSwgZmlsdGVyczogU3VibmV0RmlsdGVyW10pOiBJU3VibmV0W10ge1xuICAgIGxldCBmaWx0ZXJlZCA9IHN1Ym5ldHM7XG4gICAgLy8gQXBwbHkgZWFjaCBmaWx0ZXIgaW4gc2VxdWVuY2VcbiAgICBmb3IgKGNvbnN0IGZpbHRlciBvZiBmaWx0ZXJzKSB7XG4gICAgICBmaWx0ZXJlZCA9IGZpbHRlci5zZWxlY3RTdWJuZXRzKGZpbHRlcmVkKTtcbiAgICB9XG4gICAgcmV0dXJuIGZpbHRlcmVkO1xuICB9XG5cbiAgcHJpdmF0ZSBzZWxlY3RTdWJuZXRPYmplY3RzQnlOYW1lKGdyb3VwTmFtZTogc3RyaW5nKSB7XG4gICAgY29uc3QgYWxsU3VibmV0cyA9IFsuLi50aGlzLnB1YmxpY1N1Ym5ldHMsIC4uLnRoaXMucHJpdmF0ZVN1Ym5ldHMsIC4uLnRoaXMuaXNvbGF0ZWRTdWJuZXRzXTtcbiAgICBjb25zdCBzdWJuZXRzID0gYWxsU3VibmV0cy5maWx0ZXIocyA9PiBzdWJuZXRHcm91cE5hbWVGcm9tQ29uc3RydWN0SWQocykgPT09IGdyb3VwTmFtZSk7XG5cbiAgICBpZiAoc3VibmV0cy5sZW5ndGggPT09IDAgJiYgIXRoaXMuaW5jb21wbGV0ZVN1Ym5ldERlZmluaXRpb24pIHtcbiAgICAgIGNvbnN0IG5hbWVzID0gQXJyYXkuZnJvbShuZXcgU2V0KGFsbFN1Ym5ldHMubWFwKHN1Ym5ldEdyb3VwTmFtZUZyb21Db25zdHJ1Y3RJZCkpKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlcmUgYXJlIG5vIHN1Ym5ldCBncm91cHMgd2l0aCBuYW1lICcke2dyb3VwTmFtZX0nIGluIHRoaXMgVlBDLiBBdmFpbGFibGUgbmFtZXM6ICR7bmFtZXN9YCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN1Ym5ldHM7XG4gIH1cblxuICBwcml2YXRlIHNlbGVjdFN1Ym5ldE9iamVjdHNCeVR5cGUoc3VibmV0VHlwZTogU3VibmV0VHlwZSkge1xuICAgIGNvbnN0IGFsbFN1Ym5ldHMgPSB7XG4gICAgICBbU3VibmV0VHlwZS5QUklWQVRFX0lTT0xBVEVEXTogdGhpcy5pc29sYXRlZFN1Ym5ldHMsXG4gICAgICBbU3VibmV0VHlwZS5JU09MQVRFRF06IHRoaXMuaXNvbGF0ZWRTdWJuZXRzLFxuICAgICAgW1N1Ym5ldFR5cGUuUFJJVkFURV9XSVRIX05BVF06IHRoaXMucHJpdmF0ZVN1Ym5ldHMsXG4gICAgICBbU3VibmV0VHlwZS5QUklWQVRFX1dJVEhfRUdSRVNTXTogdGhpcy5wcml2YXRlU3VibmV0cyxcbiAgICAgIFtTdWJuZXRUeXBlLlBSSVZBVEVdOiB0aGlzLnByaXZhdGVTdWJuZXRzLFxuICAgICAgW1N1Ym5ldFR5cGUuUFVCTElDXTogdGhpcy5wdWJsaWNTdWJuZXRzLFxuICAgIH07XG5cbiAgICBjb25zdCBzdWJuZXRzID0gYWxsU3VibmV0c1tzdWJuZXRUeXBlXTtcblxuICAgIC8vIEZvcmNlIG1lcmdlIGNvbmZsaWN0IGhlcmUgd2l0aCBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvcHVsbC80MDg5XG4gICAgLy8gc2VlIEltcG9ydGVkVnBjXG5cbiAgICBpZiAoc3VibmV0cy5sZW5ndGggPT09IDAgJiYgIXRoaXMuaW5jb21wbGV0ZVN1Ym5ldERlZmluaXRpb24pIHtcbiAgICAgIGNvbnN0IGF2YWlsYWJsZVR5cGVzID0gT2JqZWN0LmVudHJpZXMoYWxsU3VibmV0cykuZmlsdGVyKChbXywgc3Vic10pID0+IHN1YnMubGVuZ3RoID4gMCkubWFwKChbdHlwZU5hbWUsIF9dKSA9PiB0eXBlTmFtZSk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZXJlIGFyZSBubyAnJHtzdWJuZXRUeXBlfScgc3VibmV0IGdyb3VwcyBpbiB0aGlzIFZQQy4gQXZhaWxhYmxlIHR5cGVzOiAke2F2YWlsYWJsZVR5cGVzfWApO1xuICAgIH1cblxuICAgIHJldHVybiBzdWJuZXRzO1xuICB9XG5cbiAgLyoqXG4gICogVmFsaWRhdGUgdGhlIGZpZWxkcyBpbiBhIFN1Ym5ldFNlbGVjdGlvbiBvYmplY3QsIGFuZCByZWlmeSBkZWZhdWx0cyBpZiBuZWNlc3NhcnlcbiAgKlxuICAqIEluIGNhc2Ugb2YgZGVmYXVsdCBzZWxlY3Rpb24sIHNlbGVjdCB0aGUgZmlyc3QgdHlwZSBvZiBQUklWQVRFLCBJU09MQVRFRCxcbiAgKiBQVUJMSUMgKGluIHRoYXQgb3JkZXIpIHRoYXQgaGFzIGFueSBzdWJuZXRzLlxuICAqL1xuICBwcml2YXRlIHJlaWZ5U2VsZWN0aW9uRGVmYXVsdHMocGxhY2VtZW50OiBTdWJuZXRTZWxlY3Rpb24pOiBTdWJuZXRTZWxlY3Rpb24ge1xuXG4gICAgLy8gVE9ETzogdGhyb3cgZXJyb3IgYXMgbmV3IFZwY1YyIGNhbm5vdCBzdXBwb3J0IHN1Ym5ldE5hbWUgb3Igc3VibmV0R3JvdXBOYW1lIGFueW1vcmVcbiAgICBpZiAocGxhY2VtZW50LnN1Ym5ldE5hbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHBsYWNlbWVudC5zdWJuZXRHcm91cE5hbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BsZWFzZSB1c2Ugb25seSBcXCdzdWJuZXRHcm91cE5hbWVcXCcgKFxcJ3N1Ym5ldE5hbWVcXCcgaXMgZGVwcmVjYXRlZCBhbmQgaGFzIHRoZSBzYW1lIGJlaGF2aW9yKScpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgQW5ub3RhdGlvbnMub2YodGhpcykuYWRkV2FybmluZ1YyKCdAYXdzLWNkay9hd3MtZWMyOnN1Ym5ldE5hbWVEZXByZWNhdGVkJywgJ1VzYWdlIG9mIFxcJ3N1Ym5ldE5hbWVcXCcgaW4gU3VibmV0U2VsZWN0aW9uIGlzIGRlcHJlY2F0ZWQsIHVzZSBcXCdzdWJuZXRHcm91cE5hbWVcXCcgaW5zdGVhZCcpO1xuICAgICAgfVxuICAgICAgcGxhY2VtZW50ID0geyAuLi5wbGFjZW1lbnQsIHN1Ym5ldEdyb3VwTmFtZTogcGxhY2VtZW50LnN1Ym5ldE5hbWUgfTtcbiAgICB9XG5cbiAgICBjb25zdCBleGNsdXNpdmVTZWxlY3Rpb25zOiBBcnJheTxrZXlvZiBTdWJuZXRTZWxlY3Rpb24+ID0gWydzdWJuZXRzJywgJ3N1Ym5ldFR5cGUnLCAnc3VibmV0R3JvdXBOYW1lJ107XG4gICAgY29uc3QgcHJvdmlkZWRTZWxlY3Rpb25zID0gZXhjbHVzaXZlU2VsZWN0aW9ucy5maWx0ZXIoa2V5ID0+IHBsYWNlbWVudFtrZXldICE9PSB1bmRlZmluZWQpO1xuICAgIGlmIChwcm92aWRlZFNlbGVjdGlvbnMubGVuZ3RoID4gMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBPbmx5IG9uZSBvZiAnJHtwcm92aWRlZFNlbGVjdGlvbnN9JyBjYW4gYmUgc3VwcGxpZWQgdG8gc3VibmV0IHNlbGVjdGlvbi5gKTtcbiAgICB9XG5cbiAgICBpZiAocGxhY2VtZW50LnN1Ym5ldFR5cGUgPT09IHVuZGVmaW5lZCAmJiBwbGFjZW1lbnQuc3VibmV0R3JvdXBOYW1lID09PSB1bmRlZmluZWQgJiYgcGxhY2VtZW50LnN1Ym5ldHMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gUmV0dXJuIGRlZmF1bHQgc3VibmV0IHR5cGUgYmFzZWQgb24gc3VibmV0cyB0aGF0IGFjdHVhbGx5IGV4aXN0XG4gICAgICBsZXQgc3VibmV0VHlwZSA9IHRoaXMucHJpdmF0ZVN1Ym5ldHMubGVuZ3RoXG4gICAgICAgID8gU3VibmV0VHlwZS5QUklWQVRFX1dJVEhfRUdSRVNTIDogdGhpcy5pc29sYXRlZFN1Ym5ldHMubGVuZ3RoID8gU3VibmV0VHlwZS5QUklWQVRFX0lTT0xBVEVEIDogU3VibmV0VHlwZS5QVUJMSUM7XG4gICAgICBwbGFjZW1lbnQgPSB7IC4uLnBsYWNlbWVudCwgc3VibmV0VHlwZTogc3VibmV0VHlwZSB9O1xuICAgIH1cblxuICAgIC8vIEVzdGFibGlzaCB3aGljaCBzdWJuZXQgZmlsdGVycyBhcmUgZ29pbmcgdG8gYmUgdXNlZFxuICAgIGxldCBzdWJuZXRGaWx0ZXJzID0gcGxhY2VtZW50LnN1Ym5ldEZpbHRlcnMgPz8gW107XG5cbiAgICAvLyBCYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3aXRoIGV4aXN0aW5nIGBhdmFpbGFiaWxpdHlab25lc2AgYW5kIGBvbmVQZXJBemAgZnVuY3Rpb25hbGl0eVxuICAgIGlmIChwbGFjZW1lbnQuYXZhaWxhYmlsaXR5Wm9uZXMgIT09IHVuZGVmaW5lZCkgeyAvLyBGaWx0ZXIgYnkgQVpzLCBpZiBzcGVjaWZpZWRcbiAgICAgIHN1Ym5ldEZpbHRlcnMucHVzaChTdWJuZXRGaWx0ZXIuYXZhaWxhYmlsaXR5Wm9uZXMocGxhY2VtZW50LmF2YWlsYWJpbGl0eVpvbmVzKSk7XG4gICAgfVxuICAgIGlmICghIXBsYWNlbWVudC5vbmVQZXJBeikgeyAvLyBFbnN1cmUgb25lIHBlciBBWiBpZiBzcGVjaWZpZWRcbiAgICAgIHN1Ym5ldEZpbHRlcnMucHVzaChTdWJuZXRGaWx0ZXIub25lUGVyQXooKSk7XG4gICAgfVxuXG4gICAgLy8gT3ZlcndyaXRlIHRoZSBwcm92aWRlZCBwbGFjZW1lbnQgZmlsdGVycyBhbmQgcmVtb3ZlIHRoZSBhdmFpbGFiaWxpdHlab25lcyBhbmQgb25lUGVyQXogcHJvcGVydGllc1xuICAgIHBsYWNlbWVudCA9IHsgLi4ucGxhY2VtZW50LCBzdWJuZXRGaWx0ZXJzOiBzdWJuZXRGaWx0ZXJzLCBhdmFpbGFiaWxpdHlab25lczogdW5kZWZpbmVkLCBvbmVQZXJBejogdW5kZWZpbmVkIH07XG4gICAgY29uc3QgeyBhdmFpbGFiaWxpdHlab25lcywgb25lUGVyQXosIC4uLnJlc3QgfSA9IHBsYWNlbWVudDtcblxuICAgIHJldHVybiByZXN0O1xuICB9XG5cbn1cblxuY2xhc3MgQ29tcG9zaXRlRGVwZW5kYWJsZSBpbXBsZW1lbnRzIElEZXBlbmRhYmxlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBkZXBlbmRhYmxlcyA9IG5ldyBBcnJheTxJRGVwZW5kYWJsZT4oKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICBEZXBlbmRhYmxlLmltcGxlbWVudCh0aGlzLCB7XG4gICAgICBnZXQgZGVwZW5kZW5jeVJvb3RzKCkge1xuICAgICAgICBjb25zdCByZXQgPSBuZXcgQXJyYXk8SUNvbnN0cnVjdD4oKTtcbiAgICAgICAgZm9yIChjb25zdCBkZXAgb2Ygc2VsZi5kZXBlbmRhYmxlcykge1xuICAgICAgICAgIHJldC5wdXNoKC4uLkRlcGVuZGFibGUub2YoZGVwKS5kZXBlbmRlbmN5Um9vdHMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXQ7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICogQWRkIGEgY29uc3RydWN0IHRvIHRoZSBkZXBlbmRlbmN5IHJvb3RzXG4gICovXG4gIHB1YmxpYyBhZGQoZGVwOiBJRGVwZW5kYWJsZSkge1xuICAgIHRoaXMuZGVwZW5kYWJsZXMucHVzaChkZXApO1xuICB9XG59XG5cbi8qKlxuKiBJbnZva2UgYSBmdW5jdGlvbiBvbiBhIHZhbHVlIChmb3IgaXRzIHNpZGUgZWZmZWN0KSBhbmQgcmV0dXJuIHRoZSB2YWx1ZVxuKi9cbmZ1bmN0aW9uIHRhcDxUPih4OiBULCBmbjogKHg6IFQpID0+IHZvaWQpOiBUIHtcbiAgZm4oeCk7XG4gIHJldHVybiB4O1xuXG59Il19
|
|
437
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidnBjLXYyLWJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ2cGMtdjItYmFzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSw2Q0FBb0Q7QUFDcEQsaURBQWtjO0FBQ2xjLGlDQUFtRjtBQUNuRiwyQ0FBa0Y7QUFDbEYsbUNBQThJO0FBc0o5STs7OztHQUlHO0FBQ0gsTUFBc0IsU0FBVSxTQUFRLHNCQUFRO0lBQWhEOztRQWlCRTs7VUFFRTtRQUNjLGtCQUFhLEdBQWMsRUFBRSxDQUFDO1FBRTlDOztVQUVFO1FBQ2MsbUJBQWMsR0FBYyxFQUFFLENBQUM7UUFPL0M7O1VBRUU7UUFDYyxzQkFBaUIsR0FBYSxFQUFFLENBQUM7UUFPakQ7Ozs7V0FJRztRQUNnQixxQ0FBZ0MsR0FBRyxJQUFJLDRCQUFlLEVBQUUsQ0FBQztRQWlDNUU7O1VBRUU7UUFDUSwrQkFBMEIsR0FBWSxLQUFLLENBQUM7UUFRdEQ7OztXQUdHO1FBQ08sdUJBQWtCLEdBQUcsRUFBRSxDQUFDO0tBZ1huQztJQTlXQzs7Ozs7TUFLRTtJQUNLLGFBQWEsQ0FBQyxZQUE2QixFQUFFO1FBQ2xELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNwRCxNQUFNLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFFekMsT0FBTztZQUNMLFNBQVMsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztZQUN2QyxJQUFJLGlCQUFpQixLQUFlLE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNsRiwrQkFBK0IsRUFBRSxHQUFHLENBQUMsSUFBSSxtQkFBbUIsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMs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Q0FBQyxJQUFJLEVBQUU7WUFDekIsSUFBSSxlQUFlO2dCQUNqQixNQUFNLEdBQUcsR0FBRyxJQUFJLEtBQUssRUFBYyxDQUFDO2dCQUNwQyxLQUFLLE1BQU0sR0FBRyxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztvQkFDbkMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLHVCQUFVLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDO2dCQUNsRCxDQUFDO2dCQUNELE9BQU8sR0FBRyxDQUFDO1lBQ2IsQ0FBQztTQUNGLENBQUMsQ0FBQztLQUNKO0lBRUQ7O01BRUU7SUFDSyxHQUFHLENBQUMsR0FBZ0I7UUFDekIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7S0FDNUI7Q0FDRjtBQUVEOztFQUVFO0FBQ0YsU0FBUyxHQUFHLENBQUksQ0FBSSxFQUFFLEVBQWtCO0lBQ3RDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNOLE9BQU8sQ0FBQyxDQUFDO0FBRVgsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJlc291cmNlLCBBbm5vdGF0aW9ucyB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IElWcGMsIElTdWJuZXQsIFN1Ym5ldFNlbGVjdGlvbiwgU2VsZWN0ZWRTdWJuZXRzLCBFbmFibGVWcG5HYXRld2F5T3B0aW9ucywgVnBuR2F0ZXdheSwgVnBuQ29ubmVjdGlvblR5cGUsIENmblZQQ0dhdGV3YXlBdHRhY2htZW50LCBDZm5WUE5HYXRld2F5Um91dGVQcm9wYWdhdGlvbiwgVnBuQ29ubmVjdGlvbk9wdGlvbnMsIFZwbkNvbm5lY3Rpb24sIENsaWVudFZwbkVuZHBvaW50T3B0aW9ucywgQ2xpZW50VnBuRW5kcG9pbnQsIEludGVyZmFjZVZwY0VuZHBvaW50T3B0aW9ucywgSW50ZXJmYWNlVnBjRW5kcG9pbnQsIEdhdGV3YXlWcGNFbmRwb2ludE9wdGlvbnMsIEdhdGV3YXlWcGNFbmRwb2ludCwgRmxvd0xvZ09wdGlvbnMsIEZsb3dMb2csIEZsb3dMb2dSZXNvdXJjZVR5cGUsIFN1Ym5ldFR5cGUsIFN1Ym5ldEZpbHRlciB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1lYzInO1xuaW1wb3J0IHsgYWxsUm91dGVUYWJsZUlkcywgZmxhdHRlbiwgc3VibmV0R3JvdXBOYW1lRnJvbUNvbnN0cnVjdElkIH0gZnJvbSAnLi91dGlsJztcbmltcG9ydCB7IElEZXBlbmRhYmxlLCBEZXBlbmRhYmxlLCBJQ29uc3RydWN0LCBEZXBlbmRlbmN5R3JvdXAgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IEVncmVzc09ubHlJbnRlcm5ldEdhdGV3YXksIEludGVybmV0R2F0ZXdheSwgTmF0Q29ubmVjdGl2aXR5VHlwZSwgTmF0R2F0ZXdheSwgTmF0R2F0ZXdheU9wdGlvbnMsIFJvdXRlLCBWUE5HYXRld2F5VjIgfSBmcm9tICcuL3JvdXRlJztcbmltcG9ydCB7IElTdWJuZXRWMiB9IGZyb20gJy4vc3VibmV0LXYyJztcbmltcG9ydCB7IElWUENDaWRyQmxvY2sgfSBmcm9tICcuL3ZwYy12Mic7XG5cbi8qKlxuICogT3B0aW9ucyB0byBkZWZpbmUgRWdyZXNzT25seUludGVybmV0R2F0ZXdheSBmb3IgVlBDXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRWdyZXNzT25seUludGVybmV0R2F0ZXdheU9wdGlvbnMge1xuICAvKipcbiAgICogTGlzdCBvZiBzdWJuZXRzIHdoZXJlIHJvdXRlIHRvIEVHVyB3aWxsIGJlIGFkZGVkXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gcm91dGUgY3JlYXRlZFxuICAgKi9cbiAgcmVhZG9ubHkgc3VibmV0cz86IFN1Ym5ldFNlbGVjdGlvbltdO1xuXG4gIC8qKlxuICAgKiBEZXN0aW5hdGlvbiBJcHY2IGFkZHJlc3MgZm9yIEVHVyByb3V0ZVxuICAgKlxuICAgKiBAZGVmYXVsdCAtICc6Oi8wJyBhbGwgSXB2NiB0cmFmZmljXG4gICAqL1xuICByZWFkb25seSBkZXN0aW5hdGlvbj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBPcHRpb25zIHRvIGRlZmluZSBJbnRlcm5ldEdhdGV3YXkgZm9yIFZQQ1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEludGVybmV0R2F0ZXdheU9wdGlvbnN7XG5cbiAgLyoqXG4gICAqIERlc3RpbmF0aW9uIElwdjYgYWRkcmVzcyBmb3IgRUdXIHJvdXRlXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gJzAuMC4wLjAnIGFsbCBJcHY0IHRyYWZmaWNcbiAgICovXG4gIHJlYWRvbmx5IGlwdjREZXN0aW5hdGlvbj86IHN0cmluZztcblxuICAvKipcbiAgICogRGVzdGluYXRpb24gSXB2NiBhZGRyZXNzIGZvciBFR1cgcm91dGVcbiAgICpcbiAgICogQGRlZmF1bHQgLSAnOjovMCcgYWxsIElwdjYgdHJhZmZpY1xuICAgKi9cbiAgcmVhZG9ubHkgaXB2NkRlc3RpbmF0aW9uPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgdG8gZGVmaW5lIFZQTkdhdGV3YXlWMiBmb3IgVlBDXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVlBOR2F0ZXdheVYyT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiBWUE4gY29ubmVjdGlvbiB0aGUgdmlydHVhbCBwcml2YXRlIGdhdGV3YXkgc3VwcG9ydHMuXG4gICAqIEBzZWUgaHR0cDovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcmVzb3VyY2UtZWMyLXZwbmdhdGV3YXkuaHRtbCNjZm4tZWMyLXZwbmdhdGV3YXktdHlwZVxuICAgKi9cbiAgcmVhZG9ubHkgdHlwZTogVnBuQ29ubmVjdGlvblR5cGU7XG5cbiAgLyoqXG4gICAqIFRoZSBwcml2YXRlIEF1dG9ub21vdXMgU3lzdGVtIE51bWJlciAoQVNOKSBmb3IgdGhlIEFtYXpvbiBzaWRlIG9mIGEgQkdQIHNlc3Npb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gQVNOIHNldCBmb3IgQkdQIHNlc3Npb25cbiAgICovXG4gIHJlYWRvbmx5IGFtYXpvblNpZGVBc24/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSByZXNvdXJjZSBuYW1lIG9mIHRoZSBWUE4gZ2F0ZXdheS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSByZXNvdXJjZSBwcm92aXNpb25lZCB3aXRob3V0IGFueSBuYW1lXG4gICAqL1xuICByZWFkb25seSB2cG5HYXRld2F5TmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogU3VibmV0cyB3aGVyZSB0aGUgcm91dGUgcHJvcGFnYXRpb24gc2hvdWxkIGJlIGFkZGVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIHByb3BvZ2F0aW9uIGZvciByb3V0ZXNcbiAgICovXG4gIHJlYWRvbmx5IHZwblJvdXRlUHJvcGFnYXRpb24/OiBTdWJuZXRTZWxlY3Rpb25bXTtcbn1cblxuLyoqXG4gKiBQbGFjZWhvbGRlciB0byBzZWUgd2hhdCBleHRyYSBwcm9wcyB3ZSBtaWdodCBuZWVkLFxuICogd2lsbCBiZSBhZGRlZCB0byBvcmlnaW5hbCBJVlBDXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVZwY1YyIGV4dGVuZHMgSVZwYyB7XG4gIC8qKlxuICAgKiBUaGUgc2Vjb25kYXJ5IENJRFIgYmxvY2tzIGFzc29jaWF0ZWQgd2l0aCB0aGUgVlBDLlxuICAgKlxuICAgKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIHRoZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3ZwYy9sYXRlc3QvdXNlcmd1aWRlL3ZwYy1jaWRyLWJsb2Nrcy5odG1sI3ZwYy1yZXNpemV9LlxuICAgKi9cbiAgcmVhZG9ubHkgc2Vjb25kYXJ5Q2lkckJsb2NrPzogSVZQQ0NpZHJCbG9ja1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgcHJpbWFyeSBJUHY0IENJRFIgYmxvY2sgYXNzb2NpYXRlZCB3aXRoIHRoZSBWUEMuXG4gICAqIE5lZWRlZCBpbiBvcmRlciB0byB2YWxpZGF0ZSB0aGUgdnBjIHJhbmdlIG9mIHN1Ym5ldFxuICAgKiBjdXJyZW50IHByb3AgdnBjQ2lkckJsb2NrIHJlZmVycyB0byB0aGUgdG9rZW4gdmFsdWVcbiAgICogRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSB0aGUge0BsaW5rIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS92cGMvbGF0ZXN0L3VzZXJndWlkZS92cGMtY2lkci1ibG9ja3MuaHRtbCN2cGMtc2l6aW5nLWlwdjR9LlxuICAgKi9cbiAgcmVhZG9ubHkgaXB2NENpZHJCbG9jazogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCB0byBvdmVycmlkZSBpbmZlcnJlZCByZWdpb25cbiAgICpcbiAgICogQGRlZmF1bHQgLSBjdXJyZW50IHN0YWNrJ3MgZW52aXJvbm1lbnQgcmVnaW9uXG4gICAqL1xuICByZWFkb25seSByZWdpb246IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIElEIG9mIHRoZSBBV1MgYWNjb3VudCB0aGF0IG93bnMgdGhlIFZQQ1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIHRoZSBhY2NvdW50IGlkIG9mIHRoZSBwYXJlbnQgc3RhY2tcbiAgICovXG4gIHJlYWRvbmx5IG93bmVyQWNjb3VudElkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIElQdjQgQ0lEUiBwcm92aXNpb25lZCB1bmRlciBwb29sXG4gICAqIFJlcXVpcmVkIHRvIGNoZWNrIGZvciBvdmVybGFwcGluZyBDSURScyBhZnRlciBwcm92aXNpb25pbmdcbiAgICogaXMgY29tcGxldGUgdW5kZXIgSVBBTSBwb29sXG4gICAqL1xuICByZWFkb25seSBpcHY0SXBhbVByb3Zpc2lvbmVkQ2lkcnM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogQWRkIGFuIEVncmVzcyBvbmx5IEludGVybmV0IEdhdGV3YXkgdG8gY3VycmVudCBWUEMuXG4gICAqIENhbiBvbmx5IGJlIHVzZWQgZm9yIGlwdjYgZW5hYmxlZCBWUENzLlxuICAgKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIHRoZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3ZwYy9sYXRlc3QvdXNlcmd1aWRlL2VncmVzcy1vbmx5LWludGVybmV0LWdhdGV3YXktYmFzaWNzLmh0bWx9LlxuICAgKi9cbiAgYWRkRWdyZXNzT25seUludGVybmV0R2F0ZXdheShvcHRpb25zPzogRWdyZXNzT25seUludGVybmV0R2F0ZXdheU9wdGlvbnMpOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBBZGRzIGFuIEludGVybmV0IEdhdGV3YXkgdG8gY3VycmVudCBWUEMuXG4gICAqIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgdGhlIHtAbGluayBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vdnBjL2xhdGVzdC91c2VyZ3VpZGUvdnBjLWlndy1pbnRlcm5ldC1hY2Nlc3MuaHRtbH0uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZGVmaW5lcyByb3V0ZSBmb3IgYWxsIGlwdjQoJzAuMC4wLjAnKSBhbmQgaXB2NiBhZGRyZXNzZXMoJzo6LzAnKVxuICAgKi9cbiAgYWRkSW50ZXJuZXRHYXRld2F5KG9wdGlvbnM/OiBJbnRlcm5ldEdhdGV3YXlPcHRpb25zKTogdm9pZDtcblxuICAvKipcbiAgICogQWRkcyBWUE4gR2F0ZXdheSB0byBWUEMgYW5kIHNldCByb3V0ZSBwcm9wb2dhdGlvbi5cbiAgICogRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSB0aGUge0BsaW5rIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1yZXNvdXJjZS1lYzItdnBuZ2F0ZXdheS5odG1sfS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyByb3V0ZSBwcm9wb2dhdGlvblxuICAgKi9cbiAgZW5hYmxlVnBuR2F0ZXdheVYyKG9wdGlvbnM6IFZQTkdhdGV3YXlWMk9wdGlvbnMpOiBWUE5HYXRld2F5VjI7XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBuZXcgTkFUIEdhdGV3YXkgdG8gVlBDXG4gICAqIEEgTkFUIGdhdGV3YXkgaXMgYSBOZXR3b3JrIEFkZHJlc3MgVHJhbnNsYXRpb24gKE5BVCkgc2VydmljZS4gTkFUIEdhdGV3YXkgQ29ubmVjdGl2aXR5IGNhbiBiZSBvZiB0eXBlIGBQdWJsaWNgIG9yIGBQcml2YXRlYC5cbiAgICogRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSB0aGUge0BsaW5rIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS92cGMvbGF0ZXN0L3VzZXJndWlkZS92cGMtbmF0LWdhdGV3YXkuaHRtbH0uXG4gICAqXG4gICAqIEBkZWZhdWx0IENvbm5lY3Rpdml0eVR5cGUuUHVibGljXG4gICAqL1xuICBhZGROYXRHYXRld2F5KG9wdGlvbnM6IE5hdEdhdGV3YXlPcHRpb25zKTogTmF0R2F0ZXdheTtcblxufVxuXG4vKipcbiAqIEJhc2UgY2xhc3MgZm9yIGNyZWF0aW5nIGEgVlBDIChWaXJ0dWFsIFByaXZhdGUgQ2xvdWQpIGluIEFXUy5cbiAqXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIHRoZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Nkay9hcGkvdjIvZG9jcy9hd3MtY2RrLWxpYi5hd3NfZWMyLlZwYy5odG1sfEFXUyBDREsgRG9jdW1lbnRhdGlvbiBvbiBWUENzfS5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFZwY1YyQmFzZSBleHRlbmRzIFJlc291cmNlIGltcGxlbWVudHMgSVZwY1YyIHtcblxuICAvKipcbiAgKiBJZGVudGlmaWVyIGZvciB0aGlzIFZQQ1xuICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgdnBjSWQ6IHN0cmluZztcblxuICAvKipcbiAgKiBBcm4gb2YgdGhpcyBWUENcbiAgKi9cbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IHZwY0Fybjogc3RyaW5nO1xuXG4gIC8qKlxuICAqIENJRFIgcmFuZ2UgZm9yIHRoaXMgVlBDXG4gICovXG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSB2cGNDaWRyQmxvY2s6IHN0cmluZztcblxuICAvKipcbiAgKiBMaXN0IG9mIHB1YmxpYyBzdWJuZXRzIGluIHRoaXMgVlBDXG4gICovXG4gIHB1YmxpYyByZWFkb25seSBwdWJsaWNTdWJuZXRzOiBJU3VibmV0W10gPSBbXTtcblxuICAvKipcbiAgKiBMaXN0IG9mIHByaXZhdGUgc3VibmV0cyBpbiB0aGlzIFZQQ1xuICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcHJpdmF0ZVN1Ym5ldHM6IElTdWJuZXRbXSA9IFtdO1xuXG4gIC8qKlxuICAqIExpc3Qgb2YgaXNvbGF0ZWQgc3VibmV0cyBpbiB0aGlzIFZQQ1xuICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgaXNvbGF0ZWRTdWJuZXRzOiBJU3VibmV0W107XG5cbiAgLyoqXG4gICogQVpzIGZvciB0aGlzIFZQQ1xuICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYXZhaWxhYmlsaXR5Wm9uZXM6IHN0cmluZ1tdID0gW107XG5cbiAgLyoqXG4gICogRGVwZW5kYWJsZSB0aGF0IGNhbiBiZSBkZXBlbmRlZCB1cG9uIHRvIGZvcmNlIGludGVybmV0IGNvbm5lY3Rpdml0eSBlc3RhYmxpc2hlZCBvbiB0aGUgVlBDXG4gICovXG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBpbnRlcm5ldENvbm5lY3Rpdml0eUVzdGFibGlzaGVkOiBJRGVwZW5kYWJsZTtcblxuICAvKipcbiAgICogRGVwZW5kYWJsZSB0aGF0IGNhbiBiZSBkZXBlbmRlZCB1cG9uIHRvIGZvcmNlIGludGVybmV0IGNvbm5lY3Rpdml0eSBlc3RhYmxpc2hlZCBvbiB0aGUgVlBDXG4gICAqIEFkZCBpZ3cgdG8gdGhpcyBpZiBpdHMgYSBwdWJsaWMgc3VibmV0XG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IF9pbnRlcm5ldENvbm5lY3Rpdml0eUVzdGFibGlzaGVkID0gbmV3IERlcGVuZGVuY3lHcm91cCgpO1xuXG4gIC8qKlxuICAgKiBTZWNvbmRhcnkgSVBzIGZvciB0aGUgVlBDLCBjYW4gYmUgbXVsdGlwbGUgSXB2NCBvciBJcHY2XG4gICAqIElwdjQgc2hvdWxkIGJlIHdpdGhpbiBSRkMjMTkxOCByYW5nZVxuICAgKi9cbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IHNlY29uZGFyeUNpZHJCbG9jaz86IElWUENDaWRyQmxvY2tbXTtcblxuICAvKipcbiAgICogVGhlIHByaW1hcnkgSVB2NCBDSURSIGJsb2NrIGFzc29jaWF0ZWQgd2l0aCB0aGUgVlBDLlxuICAgKiBOZWVkZWQgaW4gb3JkZXIgdG8gdmFsaWRhdGUgdGhlIHZwYyByYW5nZSBvZiBzdWJuZXRcbiAgICogY3VycmVudCBwcm9wIHZwY0NpZHJCbG9jayByZWZlcnMgdG8gdGhlIHRva2VuIHZhbHVlXG4gICAqIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgdGhlIHtAbGluayBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vdnBjL2xhdGVzdC91c2VyZ3VpZGUvdnBjLWNpZHItYmxvY2tzLmh0bWwjdnBjLXNpemluZy1pcHY0fS5cbiAgICovXG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBpcHY0Q2lkckJsb2NrOiBzdHJpbmc7XG5cbiAgLyoqXG4gICogUmVnaW9uIGZvciB0aGlzIFZQQ1xuICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgcmVnaW9uOiBzdHJpbmc7XG5cbiAgLyoqXG4gICogSWRlbnRpZmllciBvZiB0aGUgb3duZXIgZm9yIHRoaXMgVlBDXG4gICovXG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBvd25lckFjY291bnRJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJUHY0IENJRFIgcHJvdmlzaW9uZWQgdW5kZXIgcG9vbFxuICAgKiBSZXF1aXJlZCB0byBjaGVjayBmb3Igb3ZlcmxhcHBpbmcgQ0lEUnMgYWZ0ZXIgcHJvdmlzaW9uaW5nXG4gICAqIGlzIGNvbXBsZXRlIHVuZGVyIElQQU0gcG9vbFxuICAgKi9cbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IGlwdjRJcGFtUHJvdmlzaW9uZWRDaWRycz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAqIElmIHRoaXMgaXMgc2V0IHRvIHRydWUsIGRvbid0IGVycm9yIG91dCBvbiB0cnlpbmcgdG8gc2VsZWN0IHN1Ym5ldHNcbiAgKi9cbiAgcHJvdGVjdGVkIGluY29tcGxldGVTdWJuZXREZWZpbml0aW9uOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIE11dGFibGUgcHJpdmF0ZSBmaWVsZCBmb3IgdGhlIHZwbkdhdGV3YXlJZFxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHByb3RlY3RlZCBfdnBuR2F0ZXdheUlkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBNdXRhYmxlIHByaXZhdGUgZmllbGQgZm9yIHRoZSBpbnRlcm5ldEdhdGV3YXlJZFxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHByb3RlY3RlZCBfaW50ZXJuZXRHYXRld2F5SWQgPSAnJztcblxuICAvKipcbiAgKiBSZXR1cm4gaW5mb3JtYXRpb24gb24gdGhlIHN1Ym5ldHMgYXBwcm9wcmlhdGUgZm9yIHRoZSBnaXZlbiBzZWxlY3Rpb24gc3RyYXRlZ3lcbiAgKlxuICAqIFJlcXVpcmVzIHRoYXQgYXQgbGVhc3Qgb25lIHN1Ym5ldCBpcyBtYXRjaGVkLCB0aHJvd3MgYSBkZXNjcmlwdGl2ZVxuICAqIGVycm9yIG1lc3NhZ2Ugb3RoZXJ3aXNlLlxuICAqL1xuICBwdWJsaWMgc2VsZWN0U3VibmV0cyhzZWxlY3Rpb246IFN1Ym5ldFNlbGVjdGlvbiA9IHt9KTogU2VsZWN0ZWRTdWJuZXRzIHtcbiAgICBjb25zdCBzdWJuZXRzID0gdGhpcy5zZWxlY3RTdWJuZXRPYmplY3RzKHNlbGVjdGlvbik7XG4gICAgY29uc3QgcHVicyA9IG5ldyBTZXQodGhpcy5wdWJsaWNTdWJuZXRzKTtcblxuICAgIHJldHVybiB7XG4gICAgICBzdWJuZXRJZHM6IHN1Ym5ldHMubWFwKHMgPT4gcy5zdWJuZXRJZCksXG4gICAgICBnZXQgYXZhaWxhYmlsaXR5Wm9uZXMoKTogc3RyaW5nW10geyByZXR1cm4gc3VibmV0cy5tYXAocyA9PiBzLmF2YWlsYWJpbGl0eVpvbmUpOyB9LFxuICAgICAgaW50ZXJuZXRDb25uZWN0aXZpdHlFc3RhYmxpc2hlZDogdGFwKG5ldyBDb21wb3NpdGVEZXBlbmRhYmxlKCksIGQgPT4gc3VibmV0cy5mb3JFYWNoKHMgPT4gZC5hZGQocy5pbnRlcm5ldENvbm5lY3Rpdml0eUVzdGFibGlzaGVkKSkpLFxuICAgICAgc3VibmV0cyxcbiAgICAgIGhhc1B1YmxpYzogc3VibmV0cy5zb21lKHMgPT4gcHVicy5oYXMocykpLFxuICAgICAgaXNQZW5kaW5nTG9va3VwOiB0aGlzLmluY29tcGxldGVTdWJuZXREZWZpbml0aW9uLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgKiBBZGRzIGEgVlBOIEdhdGV3YXkgdG8gdGhpcyBWUENcbiAgKiBAZGVwcmVjYXRlZCB1c2UgZW5hYmxlVnBuR2F0ZXdheVYyIGZvciBjb21wYXRpYmlsaXR5IHdpdGggVlBDVjIuUm91dGVcbiAgKi9cbiAgcHVibGljIGVuYWJsZVZwbkdhdGV3YXkob3B0aW9uczogRW5hYmxlVnBuR2F0ZXdheU9wdGlvbnMpOiB2b2lkIHtcbiAgICBpZiAodGhpcy52cG5HYXRld2F5SWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIFZQTiBHYXRld2F5IGhhcyBhbHJlYWR5IGJlZW4gZW5hYmxlZC4nKTtcbiAgICB9XG5cbiAgICBjb25zdCB2cG5HYXRld2F5ID0gbmV3IFZwbkdhdGV3YXkodGhpcywgJ1ZwbkdhdGV3YXknLCB7XG4gICAgICBhbWF6b25TaWRlQXNuOiBvcHRpb25zLmFtYXpvblNpZGVBc24sXG4gICAgICB0eXBlOiBWcG5Db25uZWN0aW9uVHlwZS5JUFNFQ18xLFxuICAgIH0pO1xuXG4gICAgdGhpcy5fdnBuR2F0ZXdheUlkID0gdnBuR2F0ZXdheS5nYXRld2F5SWQ7XG5cbiAgICBjb25zdCBhdHRhY2htZW50ID0gbmV3IENmblZQQ0dhdGV3YXlBdHRhY2htZW50KHRoaXMsICdWUENWUE5HVycsIHtcbiAgICAgIHZwY0lkOiB0aGlzLnZwY0lkLFxuICAgICAgdnBuR2F0ZXdheUlkOiB0aGlzLl92cG5HYXRld2F5SWQsXG4gICAgfSk7XG5cbiAgICAvLyBQcm9wYWdhdGUgcm91dGVzIG9uIHJvdXRlIHRhYmxlcyBhc3NvY2lhdGVkIHdpdGggdGhlIHJpZ2h0IHN1Ym5ldHNcbiAgICBjb25zdCB2cG5Sb3V0ZVByb3BhZ2F0aW9uID0gb3B0aW9ucy52cG5Sb3V0ZVByb3BhZ2F0aW9uID8/IFt7fV07XG4gICAgY29uc3Qgcm91dGVUYWJsZUlkcyA9IGFsbFJvdXRlVGFibGVJZHMoZmxhdHRlbih2cG5Sb3V0ZVByb3BhZ2F0aW9uLm1hcChzID0+IHRoaXMuc2VsZWN0U3VibmV0cyhzKS5zdWJuZXRzKSkpO1xuXG4gICAgaWYgKHJvdXRlVGFibGVJZHMubGVuZ3RoID09PSAwKSB7XG4gICAgICBBbm5vdGF0aW9ucy5vZih0aGlzKS5hZGRFcnJvcihgZW5hYmxlVnBuR2F0ZXdheTogbm8gc3VibmV0cyBtYXRjaGluZyBzZWxlY3Rpb246ICcke0pTT04uc3RyaW5naWZ5KHZwblJvdXRlUHJvcGFnYXRpb24pfScuIFNlbGVjdCBvdGhlciBzdWJuZXRzIHRvIGFkZCByb3V0ZXMgdG8uYCk7XG4gICAgfVxuXG4gICAgY29uc3Qgcm91dGVQcm9wYWdhdGlvbiA9IG5ldyBDZm5WUE5HYXRld2F5Um91dGVQcm9wYWdhdGlvbih0aGlzLCAnUm91dGVQcm9wYWdhdGlvbicsIHtcbiAgICAgIHJvdXRlVGFibGVJZHMsXG4gICAgICB2cG5HYXRld2F5SWQ6IHRoaXMuX3ZwbkdhdGV3YXlJZCxcbiAgICB9KTtcbiAgICAgIC8vIFRoZSBBV1M6OkVDMjo6VlBOR2F0ZXdheVJvdXRlUHJvcGFnYXRpb24gcmVzb3VyY2UgY2Fubm90IHVzZSB0aGUgVlBOIGdhdGV3YXlcbiAgICAgIC8vIHVudGlsIGl0IGhhcyBzdWNjZXNzZnVsbHkgYXR0YWNoZWQgdG8gdGhlIFZQQy5cbiAgICAgIC8vIFNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcmVzb3VyY2UtZWMyLXZwbi1nYXRld2F5cm91dGVwcm9wLmh0bWxcbiAgICByb3V0ZVByb3BhZ2F0aW9uLm5vZGUuYWRkRGVwZW5kZW5jeShhdHRhY2htZW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIFZQTkdBdGV3YXlWMiB0byB0aGlzIFZQQ1xuICAgKi9cbiAgcHVibGljIGVuYWJsZVZwbkdhdGV3YXlWMihvcHRpb25zOiBWUE5HYXRld2F5VjJPcHRpb25zKTogVlBOR2F0ZXdheVYyIHtcbiAgICBpZiAodGhpcy52cG5HYXRld2F5SWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIFZQTiBHYXRld2F5IGhhcyBhbHJlYWR5IGJlZW4gZW5hYmxlZC4nKTtcbiAgICB9XG5cbiAgICBjb25zdCB2cG5HYXRld2F5ID0gbmV3IFZQTkdhdGV3YXlWMih0aGlzLCAnVnBuR2F0ZXdheScsIHtcbiAgICAgIHZwYzogdGhpcyxcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgfSk7XG5cbiAgICB0aGlzLl9pbnRlcm5ldENvbm5lY3Rpdml0eUVzdGFibGlzaGVkLmFkZCh2cG5HYXRld2F5KTtcbiAgICB0aGlzLl92cG5HYXRld2F5SWQgPSB2cG5HYXRld2F5LnJvdXRlclRhcmdldElkO1xuXG4gICAgcmV0dXJuIHZwbkdhdGV3YXk7XG4gIH1cblxuICAvKipcbiAgKiBBZGRzIGEgbmV3IFZQTiBjb25uZWN0aW9uIHRvIHRoaXMgVlBDXG4gICovXG4gIHB1YmxpYyBhZGRWcG5Db25uZWN0aW9uKGlkOiBzdHJpbmcsIG9wdGlvbnM6IFZwbkNvbm5lY3Rpb25PcHRpb25zKTogVnBuQ29ubmVjdGlvbiB7XG4gICAgcmV0dXJuIG5ldyBWcG5Db25uZWN0aW9uKHRoaXMsIGlkLCB7XG4gICAgICB2cGM6IHRoaXMsXG4gICAgICAuLi5vcHRpb25zLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICogQWRkcyBhIG5ldyBjbGllbnQgVlBOIGVuZHBvaW50IHRvIHRoaXMgVlBDXG4gICovXG4gIHB1YmxpYyBhZGRDbGllbnRWcG5FbmRwb2ludChpZDogc3RyaW5nLCBvcHRpb25zOiBDbGllbnRWcG5FbmRwb2ludE9wdGlvbnMpOiBDbGllbnRWcG5FbmRwb2ludCB7XG4gICAgcmV0dXJuIG5ldyBDbGllbnRWcG5FbmRwb2ludCh0aGlzLCBpZCwge1xuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIHZwYzogdGhpcyxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAqIEFkZHMgYSBuZXcgaW50ZXJmYWNlIGVuZHBvaW50IHRvIHRoaXMgVlBDXG4gICovXG4gIHB1YmxpYyBhZGRJbnRlcmZhY2VFbmRwb2ludChpZDogc3RyaW5nLCBvcHRpb25zOiBJbnRlcmZhY2VWcGNFbmRwb2ludE9wdGlvbnMpOiBJbnRlcmZhY2VWcGNFbmRwb2ludCB7XG4gICAgcmV0dXJuIG5ldyBJbnRlcmZhY2VWcGNFbmRwb2ludCh0aGlzLCBpZCwge1xuICAgICAgdnBjOiB0aGlzLFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAqIEFkZHMgYSBuZXcgZ2F0ZXdheSBlbmRwb2ludCB0byB0aGlzIFZQQ1xuICAqL1xuICBwdWJsaWMgYWRkR2F0ZXdheUVuZHBvaW50KGlkOiBzdHJpbmcsIG9wdGlvbnM6IEdhdGV3YXlWcGNFbmRwb2ludE9wdGlvbnMpOiBHYXRld2F5VnBjRW5kcG9pbnQge1xuICAgIHJldHVybiBuZXcgR2F0ZXdheVZwY0VuZHBvaW50KHRoaXMsIGlkLCB7XG4gICAgICB2cGM6IHRoaXMsXG4gICAgICAuLi5vcHRpb25zLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBuZXcgRWdyZXNzIE9ubHkgSW50ZXJuZXQgR2F0ZXdheSB0byB0aGlzIFZQQyBhbmQgZGVmaW5lcyBhIG5ldyByb3V0ZVxuICAgKiB0byB0aGUgcm91dGUgdGFibGUgb2YgZ2l2ZW4gc3VibmV0cy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBpbiBjYXNlIG9mIG5vIGlucHV0IHN1Ym5ldHMsIG5vIHJvdXRlIGlzIGNyZWF0ZWRcbiAgICovXG4gIHB1YmxpYyBhZGRFZ3Jlc3NPbmx5SW50ZXJuZXRHYXRld2F5KG9wdGlvbnM/OiBFZ3Jlc3NPbmx5SW50ZXJuZXRHYXRld2F5T3B0aW9ucyk6IHZvaWQge1xuICAgIGNvbnN0IGVndyA9IG5ldyBFZ3Jlc3NPbmx5SW50ZXJuZXRHYXRld2F5KHRoaXMsICdFZ3Jlc3NPbmx5R1cnLCB7XG4gICAgICB2cGM6IHRoaXMsXG4gICAgfSk7XG5cbiAgICBsZXQgdXNlSXB2NjtcbiAgICBpZiAodGhpcy5zZWNvbmRhcnlDaWRyQmxvY2spIHtcbiAgICAgIHVzZUlwdjYgPSAodGhpcy5zZWNvbmRhcnlDaWRyQmxvY2suc29tZSgoc2Vjb25kYXJ5QWRkcmVzcykgPT4gc2Vjb25kYXJ5QWRkcmVzcy5hbWF6b25Qcm92aWRlZElwdjZDaWRyQmxvY2sgPT09IHRydWUgfHxcbiAgICBzZWNvbmRhcnlBZGRyZXNzLmlwdjZJcGFtUG9vbElkICE9IHVuZGVmaW5lZCkpO1xuICAgIH1cblxuICAgIGlmICghdXNlSXB2Nikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdFZ3Jlc3Mgb25seSBJR1cgY2FuIG9ubHkgYmUgYWRkZWQgdG8gSXB2NiBlbmFibGVkIFZQQycpO1xuICAgIH07XG5cbiAgICBpZiAob3B0aW9ucz8uc3VibmV0cykge1xuICAgICAgY29uc3Qgc3VibmV0cyA9IGZsYXR0ZW4ob3B0aW9ucy5zdWJuZXRzLm1hcChzID0+IHRoaXMuc2VsZWN0U3VibmV0cyhzKS5zdWJuZXRzKSk7XG4gICAgICBzdWJuZXRzLmZvckVhY2goKHN1Ym5ldCkgPT4ge1xuICAgICAgICB0aGlzLmNyZWF0ZUVncmVzc1JvdXRlKHN1Ym5ldCwgZWd3LCBvcHRpb25zLmRlc3RpbmF0aW9uKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgcm91dGUgZm9yIEVHVyB3aXRoIGRlc3RpbmF0aW9uIHNldCB0byBvdXRib3VuZCBJUHY2KCc6Oi8wJykgb3IgY3VzdG9tIGlwdjYgYWRkcmVzcy5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBwcml2YXRlIGNyZWF0ZUVncmVzc1JvdXRlKHN1Ym5ldDogSVN1Ym5ldFYyLCBlZ3c6IEVncmVzc09ubHlJbnRlcm5ldEdhdGV3YXksIGRlc3RpbmF0aW9uPzogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgZGVzdGluYXRpb25JcHY2ID0gZGVzdGluYXRpb24gPz8gJzo6LzAnO1xuICAgIG5ldyBSb3V0ZSh0aGlzLCBgJHtzdWJuZXQubm9kZS5pZH0tRWdyZXNzUm91dGVgLCB7XG4gICAgICByb3V0ZVRhYmxlOiBzdWJuZXQucm91dGVUYWJsZSxcbiAgICAgIGRlc3RpbmF0aW9uOiBkZXN0aW5hdGlvbklwdjYsIC8vIElQdjYgZGVmYXVsdCByb3V0ZVxuICAgICAgdGFyZ2V0OiB7IGdhdGV3YXk6IGVndyB9LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBuZXcgSW50ZXJuZXQgR2F0ZXdheSB0byB0aGlzIFZQQ1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIGNyZWF0ZXMgYSBuZXcgcm91dGUgZm9yIHB1YmxpYyBzdWJuZXRzKHdpdGggYWxsIG91dGJvdW5kIGFjY2VzcykgdG8gdGhlIEludGVybmV0IEdhdGV3YXkuXG4gICAqL1xuICBwdWJsaWMgYWRkSW50ZXJuZXRHYXRld2F5KG9wdGlvbnM/OiBJbnRlcm5ldEdhdGV3YXlPcHRpb25zKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2ludGVybmV0R2F0ZXdheUlkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBJbnRlcm5ldCBHYXRld2F5IGhhcyBhbHJlYWR5IGJlZW4gZW5hYmxlZC4nKTtcbiAgICB9XG5cbiAgICBjb25zdCBpZ3cgPSBuZXcgSW50ZXJuZXRHYXRld2F5KHRoaXMsICdJbnRlcm5ldEdhdGV3YXknLCB7XG4gICAgICB2cGM6IHRoaXMsXG4gICAgfSk7XG5cbiAgICB0aGlzLl9pbnRlcm5ldENvbm5lY3Rpdml0eUVzdGFibGlzaGVkLmFkZChpZ3cpO1xuICAgIHRoaXMuX2ludGVybmV0R2F0ZXdheUlkID0gaWd3LnJvdXRlclRhcmdldElkO1xuXG4gICAgLy8gSWYgdGhlcmUgYXJlIG5vIHB1YmxpYyBzdWJuZXRzIGRlZmluZWQsIG5vIGRlZmF1bHQgcm91dGUgd2lsbCBiZSBhZGRlZFxuICAgIGlmICh0aGlzLnB1YmxpY1N1Ym5ldHMpIHtcbiAgICAgIHRoaXMucHVibGljU3VibmV0cy5mb3JFYWNoKCAocykgPT4gdGhpcy5hZGREZWZhdWx0SW50ZXJuZXRSb3V0ZShzLCBpZ3csIG9wdGlvbnMpKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBkZWZhdWx0IHJvdXRlIGZvciB0aGUgaW50ZXJuZXQgZ2F0ZXdheVxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHByaXZhdGUgYWRkRGVmYXVsdEludGVybmV0Um91dGUoc3VibmV0OiBJU3VibmV0VjIsIGlndzogSW50ZXJuZXRHYXRld2F5LCBvcHRpb25zPzogSW50ZXJuZXRHYXRld2F5T3B0aW9ucyk6IHZvaWQge1xuXG4gICAgaWYgKHN1Ym5ldC5zdWJuZXRUeXBlICE9PSBTdWJuZXRUeXBlLlBVQkxJQykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBwdWJsaWMgc3VibmV0cyBkZWZpbmVkIHRvIGFkZCByb3V0ZSBmb3IgaW50ZXJuZXQgZ2F0ZXdheScpO1xuICAgIH1cblxuICAgIC8vIEFkZCBkZWZhdWx0IHJvdXRlIHRvIElHVyBmb3IgSVB2NlxuICAgIGlmIChzdWJuZXQuaXB2NkNpZHJCbG9jaykge1xuICAgICAgbmV3IFJvdXRlKHRoaXMsIGAke3N1Ym5ldC5ub2RlLmlkfS1EZWZhdWx0SVB2NlJvdXRlYCwge1xuICAgICAgICByb3V0ZVRhYmxlOiBzdWJuZXQucm91dGVUYWJsZSxcbiAgICAgICAgZGVzdGluYXRpb246IG9wdGlvbnM/LmlwdjZEZXN0aW5hdGlvbiA/PyAnOjovMCcsXG4gICAgICAgIHRhcmdldDogeyBnYXRld2F5OiBpZ3cgfSxcbiAgICAgIH0pO1xuICAgIH1cbiAgICAvL0FkZCBkZWZhdWx0IHJvdXRlIHRvIElHVyBmb3IgSVB2NFxuICAgIG5ldyBSb3V0ZSh0aGlzLCBgJHtzdWJuZXQubm9kZS5pZH0tRGVmYXVsdFJvdXRlYCwge1xuICAgICAgcm91dGVUYWJsZTogc3VibmV0LnJvdXRlVGFibGUsXG4gICAgICBkZXN0aW5hdGlvbjogb3B0aW9ucz8uaXB2NERlc3RpbmF0aW9uID8/ICcwLjAuMC4wLzAnLFxuICAgICAgdGFyZ2V0OiB7IGdhdGV3YXk6IGlndyB9LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBuZXcgTkFUIEdhdGV3YXkgdG8gdGhlIGdpdmVuIHN1Ym5ldCBvZiB0aGlzIFZQQ1xuICAgKiBvZiBnaXZlbiBzdWJuZXRzLlxuICAgKi9cbiAgcHVibGljIGFkZE5hdEdhdGV3YXkob3B0aW9uczogTmF0R2F0ZXdheU9wdGlvbnMpOiBOYXRHYXRld2F5IHtcbiAgICBpZiAob3B0aW9ucy5jb25uZWN0aXZpdHlUeXBlID09PSBOYXRDb25uZWN0aXZpdHlUeXBlLlBVQkxJQyAmJiAhdGhpcy5faW50ZXJuZXRHYXRld2F5SWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGFkZCBhIFB1YmxpYyBOQVQgR2F0ZXdheSB3aXRob3V0IGFuIEludGVybmV0IEdhdGV3YXkgZW5hYmxlZCBvbiBWUEMnKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBOYXRHYXRld2F5KHRoaXMsICdOQVRHYXRld2F5Jywge1xuICAgICAgdnBjOiB0aGlzLFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAqIEFkZHMgYSBuZXcgZmxvdyBsb2cgdG8gdGhpcyBWUENcbiAgKi9cbiAgcHVibGljIGFkZEZsb3dMb2coaWQ6IHN0cmluZywgb3B0aW9ucz86IEZsb3dMb2dPcHRpb25zKTogRmxvd0xvZyB7XG4gICAgcmV0dXJuIG5ldyBGbG93TG9nKHRoaXMsIGlkLCB7XG4gICAgICByZXNvdXJjZVR5cGU6IEZsb3dMb2dSZXNvdXJjZVR5cGUuZnJvbVZwYyh0aGlzKSxcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgKiBSZXR1cm5zIHRoZSBpZCBvZiB0aGUgVlBOIEdhdGV3YXkgKGlmIGVuYWJsZWQpXG4gICovXG4gIHB1YmxpYyBnZXQgdnBuR2F0ZXdheUlkKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX3ZwbkdhdGV3YXlJZDtcbiAgfVxuXG4gIC8qKlxuICAqIFJldHVybnMgdGhlIGlkIG9mIHRoZSBJbnRlcm5ldCBHYXRld2F5IChpZiBlbmFibGVkKVxuICAqL1xuICBwdWJsaWMgZ2V0IGludGVybmV0R2F0ZXdheUlkKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2ludGVybmV0R2F0ZXdheUlkO1xuICB9XG5cbiAgLyoqXG4gICogUmV0dXJuIHRoZSBzdWJuZXRzIGFwcHJvcHJpYXRlIGZvciB0aGUgcGxhY2VtZW50IHN0cmF0ZWd5XG4gICovXG4gIHByb3RlY3RlZCBzZWxlY3RTdWJuZXRPYmplY3RzKHNlbGVjdGlvbjogU3VibmV0U2VsZWN0aW9uID0ge30pOiBJU3VibmV0W10ge1xuICAgIHNlbGVjdGlvbiA9IHRoaXMucmVpZnlTZWxlY3Rpb25EZWZhdWx0cyhzZWxlY3Rpb24pO1xuXG4gICAgaWYgKHNlbGVjdGlvbi5zdWJuZXRzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBzZWxlY3Rpb24uc3VibmV0cztcbiAgICB9XG5cbiAgICBsZXQgc3VibmV0cztcblxuICAgIGlmIChzZWxlY3Rpb24uc3VibmV0R3JvdXBOYW1lICE9PSB1bmRlZmluZWQpIHsgLy8gU2VsZWN0IGJ5IG5hbWVcbiAgICAgIHN1Ym5ldHMgPSB0aGlzLnNlbGVjdFN1Ym5ldE9iamVjdHNCeU5hbWUoc2VsZWN0aW9uLnN1Ym5ldEdyb3VwTmFtZSk7XG5cbiAgICB9IGVsc2UgeyAvLyBPciBzcGVjaWZ5IGJ5IHR5cGVcbiAgICAgIGNvbnN0IHR5cGUgPSBzZWxlY3Rpb24uc3VibmV0VHlwZSB8fCBTdWJuZXRUeXBlLlBSSVZBVEVfV0lUSF9FR1JFU1M7XG4gICAgICBzdWJuZXRzID0gdGhpcy5zZWxlY3RTdWJuZXRPYmplY3RzQnlUeXBlKHR5cGUpO1xuICAgIH1cblxuICAgIC8vIEFwcGx5IGFsbCB0aGUgZmlsdGVyc1xuICAgIHN1Ym5ldHMgPSB0aGlzLmFwcGx5U3VibmV0RmlsdGVycyhzdWJuZXRzLCBzZWxlY3Rpb24uc3VibmV0RmlsdGVycyA/PyBbXSk7XG5cbiAgICByZXR1cm4gc3VibmV0cztcbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlTdWJuZXRGaWx0ZXJzKHN1Ym5ldHM6IElTdWJuZXRbXSwgZmlsdGVyczogU3VibmV0RmlsdGVyW10pOiBJU3VibmV0W10ge1xuICAgIGxldCBmaWx0ZXJlZCA9IHN1Ym5ldHM7XG4gICAgLy8gQXBwbHkgZWFjaCBmaWx0ZXIgaW4gc2VxdWVuY2VcbiAgICBmb3IgKGNvbnN0IGZpbHRlciBvZiBmaWx0ZXJzKSB7XG4gICAgICBmaWx0ZXJlZCA9IGZpbHRlci5zZWxlY3RTdWJuZXRzKGZpbHRlcmVkKTtcbiAgICB9XG4gICAgcmV0dXJuIGZpbHRlcmVkO1xuICB9XG5cbiAgcHJpdmF0ZSBzZWxlY3RTdWJuZXRPYmplY3RzQnlOYW1lKGdyb3VwTmFtZTogc3RyaW5nKSB7XG4gICAgY29uc3QgYWxsU3VibmV0cyA9IFsuLi50aGlzLnB1YmxpY1N1Ym5ldHMsIC4uLnRoaXMucHJpdmF0ZVN1Ym5ldHMsIC4uLnRoaXMuaXNvbGF0ZWRTdWJuZXRzXTtcbiAgICBjb25zdCBzdWJuZXRzID0gYWxsU3VibmV0cy5maWx0ZXIocyA9PiBzdWJuZXRHcm91cE5hbWVGcm9tQ29uc3RydWN0SWQocykgPT09IGdyb3VwTmFtZSk7XG5cbiAgICBpZiAoc3VibmV0cy5sZW5ndGggPT09IDAgJiYgIXRoaXMuaW5jb21wbGV0ZVN1Ym5ldERlZmluaXRpb24pIHtcbiAgICAgIGNvbnN0IG5hbWVzID0gQXJyYXkuZnJvbShuZXcgU2V0KGFsbFN1Ym5ldHMubWFwKHN1Ym5ldEdyb3VwTmFtZUZyb21Db25zdHJ1Y3RJZCkpKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlcmUgYXJlIG5vIHN1Ym5ldCBncm91cHMgd2l0aCBuYW1lICcke2dyb3VwTmFtZX0nIGluIHRoaXMgVlBDLiBBdmFpbGFibGUgbmFtZXM6ICR7bmFtZXN9YCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN1Ym5ldHM7XG4gIH1cblxuICBwcml2YXRlIHNlbGVjdFN1Ym5ldE9iamVjdHNCeVR5cGUoc3VibmV0VHlwZTogU3VibmV0VHlwZSkge1xuICAgIGNvbnN0IGFsbFN1Ym5ldHMgPSB7XG4gICAgICBbU3VibmV0VHlwZS5QUklWQVRFX0lTT0xBVEVEXTogdGhpcy5pc29sYXRlZFN1Ym5ldHMsXG4gICAgICBbU3VibmV0VHlwZS5JU09MQVRFRF06IHRoaXMuaXNvbGF0ZWRTdWJuZXRzLFxuICAgICAgW1N1Ym5ldFR5cGUuUFJJVkFURV9XSVRIX05BVF06IHRoaXMucHJpdmF0ZVN1Ym5ldHMsXG4gICAgICBbU3VibmV0VHlwZS5QUklWQVRFX1dJVEhfRUdSRVNTXTogdGhpcy5wcml2YXRlU3VibmV0cyxcbiAgICAgIFtTdWJuZXRUeXBlLlBSSVZBVEVdOiB0aGlzLnByaXZhdGVTdWJuZXRzLFxuICAgICAgW1N1Ym5ldFR5cGUuUFVCTElDXTogdGhpcy5wdWJsaWNTdWJuZXRzLFxuICAgIH07XG5cbiAgICBjb25zdCBzdWJuZXRzID0gYWxsU3VibmV0c1tzdWJuZXRUeXBlXTtcblxuICAgIC8vIEZvcmNlIG1lcmdlIGNvbmZsaWN0IGhlcmUgd2l0aCBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvcHVsbC80MDg5XG4gICAgLy8gc2VlIEltcG9ydGVkVnBjXG5cbiAgICBpZiAoc3VibmV0cy5sZW5ndGggPT09IDAgJiYgIXRoaXMuaW5jb21wbGV0ZVN1Ym5ldERlZmluaXRpb24pIHtcbiAgICAgIGNvbnN0IGF2YWlsYWJsZVR5cGVzID0gT2JqZWN0LmVudHJpZXMoYWxsU3VibmV0cykuZmlsdGVyKChbXywgc3Vic10pID0+IHN1YnMubGVuZ3RoID4gMCkubWFwKChbdHlwZU5hbWUsIF9dKSA9PiB0eXBlTmFtZSk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZXJlIGFyZSBubyAnJHtzdWJuZXRUeXBlfScgc3VibmV0IGdyb3VwcyBpbiB0aGlzIFZQQy4gQXZhaWxhYmxlIHR5cGVzOiAke2F2YWlsYWJsZVR5cGVzfWApO1xuICAgIH1cblxuICAgIHJldHVybiBzdWJuZXRzO1xuICB9XG5cbiAgLyoqXG4gICogVmFsaWRhdGUgdGhlIGZpZWxkcyBpbiBhIFN1Ym5ldFNlbGVjdGlvbiBvYmplY3QsIGFuZCByZWlmeSBkZWZhdWx0cyBpZiBuZWNlc3NhcnlcbiAgKlxuICAqIEluIGNhc2Ugb2YgZGVmYXVsdCBzZWxlY3Rpb24sIHNlbGVjdCB0aGUgZmlyc3QgdHlwZSBvZiBQUklWQVRFLCBJU09MQVRFRCxcbiAgKiBQVUJMSUMgKGluIHRoYXQgb3JkZXIpIHRoYXQgaGFzIGFueSBzdWJuZXRzLlxuICAqL1xuICBwcml2YXRlIHJlaWZ5U2VsZWN0aW9uRGVmYXVsdHMocGxhY2VtZW50OiBTdWJuZXRTZWxlY3Rpb24pOiBTdWJuZXRTZWxlY3Rpb24ge1xuXG4gICAgLy8gVE9ETzogdGhyb3cgZXJyb3IgYXMgbmV3IFZwY1YyIGNhbm5vdCBzdXBwb3J0IHN1Ym5ldE5hbWUgb3Igc3VibmV0R3JvdXBOYW1lIGFueW1vcmVcbiAgICBpZiAocGxhY2VtZW50LnN1Ym5ldE5hbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHBsYWNlbWVudC5zdWJuZXRHcm91cE5hbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BsZWFzZSB1c2Ugb25seSBcXCdzdWJuZXRHcm91cE5hbWVcXCcgKFxcJ3N1Ym5ldE5hbWVcXCcgaXMgZGVwcmVjYXRlZCBhbmQgaGFzIHRoZSBzYW1lIGJlaGF2aW9yKScpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgQW5ub3RhdGlvbnMub2YodGhpcykuYWRkV2FybmluZ1YyKCdAYXdzLWNkay9hd3MtZWMyOnN1Ym5ldE5hbWVEZXByZWNhdGVkJywgJ1VzYWdlIG9mIFxcJ3N1Ym5ldE5hbWVcXCcgaW4gU3VibmV0U2VsZWN0aW9uIGlzIGRlcHJlY2F0ZWQsIHVzZSBcXCdzdWJuZXRHcm91cE5hbWVcXCcgaW5zdGVhZCcpO1xuICAgICAgfVxuICAgICAgcGxhY2VtZW50ID0geyAuLi5wbGFjZW1lbnQsIHN1Ym5ldEdyb3VwTmFtZTogcGxhY2VtZW50LnN1Ym5ldE5hbWUgfTtcbiAgICB9XG5cbiAgICBjb25zdCBleGNsdXNpdmVTZWxlY3Rpb25zOiBBcnJheTxrZXlvZiBTdWJuZXRTZWxlY3Rpb24+ID0gWydzdWJuZXRzJywgJ3N1Ym5ldFR5cGUnLCAnc3VibmV0R3JvdXBOYW1lJ107XG4gICAgY29uc3QgcHJvdmlkZWRTZWxlY3Rpb25zID0gZXhjbHVzaXZlU2VsZWN0aW9ucy5maWx0ZXIoa2V5ID0+IHBsYWNlbWVudFtrZXldICE9PSB1bmRlZmluZWQpO1xuICAgIGlmIChwcm92aWRlZFNlbGVjdGlvbnMubGVuZ3RoID4gMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBPbmx5IG9uZSBvZiAnJHtwcm92aWRlZFNlbGVjdGlvbnN9JyBjYW4gYmUgc3VwcGxpZWQgdG8gc3VibmV0IHNlbGVjdGlvbi5gKTtcbiAgICB9XG5cbiAgICBpZiAocGxhY2VtZW50LnN1Ym5ldFR5cGUgPT09IHVuZGVmaW5lZCAmJiBwbGFjZW1lbnQuc3VibmV0R3JvdXBOYW1lID09PSB1bmRlZmluZWQgJiYgcGxhY2VtZW50LnN1Ym5ldHMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gUmV0dXJuIGRlZmF1bHQgc3VibmV0IHR5cGUgYmFzZWQgb24gc3VibmV0cyB0aGF0IGFjdHVhbGx5IGV4aXN0XG4gICAgICBsZXQgc3VibmV0VHlwZSA9IHRoaXMucHJpdmF0ZVN1Ym5ldHMubGVuZ3RoXG4gICAgICAgID8gU3VibmV0VHlwZS5QUklWQVRFX1dJVEhfRUdSRVNTIDogdGhpcy5pc29sYXRlZFN1Ym5ldHMubGVuZ3RoID8gU3VibmV0VHlwZS5QUklWQVRFX0lTT0xBVEVEIDogU3VibmV0VHlwZS5QVUJMSUM7XG4gICAgICBwbGFjZW1lbnQgPSB7IC4uLnBsYWNlbWVudCwgc3VibmV0VHlwZTogc3VibmV0VHlwZSB9O1xuICAgIH1cblxuICAgIC8vIEVzdGFibGlzaCB3aGljaCBzdWJuZXQgZmlsdGVycyBhcmUgZ29pbmcgdG8gYmUgdXNlZFxuICAgIGxldCBzdWJuZXRGaWx0ZXJzID0gcGxhY2VtZW50LnN1Ym5ldEZpbHRlcnMgPz8gW107XG5cbiAgICAvLyBCYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3aXRoIGV4aXN0aW5nIGBhdmFpbGFiaWxpdHlab25lc2AgYW5kIGBvbmVQZXJBemAgZnVuY3Rpb25hbGl0eVxuICAgIGlmIChwbGFjZW1lbnQuYXZhaWxhYmlsaXR5Wm9uZXMgIT09IHVuZGVmaW5lZCkgeyAvLyBGaWx0ZXIgYnkgQVpzLCBpZiBzcGVjaWZpZWRcbiAgICAgIHN1Ym5ldEZpbHRlcnMucHVzaChTdWJuZXRGaWx0ZXIuYXZhaWxhYmlsaXR5Wm9uZXMocGxhY2VtZW50LmF2YWlsYWJpbGl0eVpvbmVzKSk7XG4gICAgfVxuICAgIGlmICghIXBsYWNlbWVudC5vbmVQZXJBeikgeyAvLyBFbnN1cmUgb25lIHBlciBBWiBpZiBzcGVjaWZpZWRcbiAgICAgIHN1Ym5ldEZpbHRlcnMucHVzaChTdWJuZXRGaWx0ZXIub25lUGVyQXooKSk7XG4gICAgfVxuXG4gICAgLy8gT3ZlcndyaXRlIHRoZSBwcm92aWRlZCBwbGFjZW1lbnQgZmlsdGVycyBhbmQgcmVtb3ZlIHRoZSBhdmFpbGFiaWxpdHlab25lcyBhbmQgb25lUGVyQXogcHJvcGVydGllc1xuICAgIHBsYWNlbWVudCA9IHsgLi4ucGxhY2VtZW50LCBzdWJuZXRGaWx0ZXJzOiBzdWJuZXRGaWx0ZXJzLCBhdmFpbGFiaWxpdHlab25lczogdW5kZWZpbmVkLCBvbmVQZXJBejogdW5kZWZpbmVkIH07XG4gICAgY29uc3QgeyBhdmFpbGFiaWxpdHlab25lcywgb25lUGVyQXosIC4uLnJlc3QgfSA9IHBsYWNlbWVudDtcblxuICAgIHJldHVybiByZXN0O1xuICB9XG5cbn1cblxuY2xhc3MgQ29tcG9zaXRlRGVwZW5kYWJsZSBpbXBsZW1lbnRzIElEZXBlbmRhYmxlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBkZXBlbmRhYmxlcyA9IG5ldyBBcnJheTxJRGVwZW5kYWJsZT4oKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICBEZXBlbmRhYmxlLmltcGxlbWVudCh0aGlzLCB7XG4gICAgICBnZXQgZGVwZW5kZW5jeVJvb3RzKCkge1xuICAgICAgICBjb25zdCByZXQgPSBuZXcgQXJyYXk8SUNvbnN0cnVjdD4oKTtcbiAgICAgICAgZm9yIChjb25zdCBkZXAgb2Ygc2VsZi5kZXBlbmRhYmxlcykge1xuICAgICAgICAgIHJldC5wdXNoKC4uLkRlcGVuZGFibGUub2YoZGVwKS5kZXBlbmRlbmN5Um9vdHMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXQ7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICogQWRkIGEgY29uc3RydWN0IHRvIHRoZSBkZXBlbmRlbmN5IHJvb3RzXG4gICovXG4gIHB1YmxpYyBhZGQoZGVwOiBJRGVwZW5kYWJsZSkge1xuICAgIHRoaXMuZGVwZW5kYWJsZXMucHVzaChkZXApO1xuICB9XG59XG5cbi8qKlxuKiBJbnZva2UgYSBmdW5jdGlvbiBvbiBhIHZhbHVlIChmb3IgaXRzIHNpZGUgZWZmZWN0KSBhbmQgcmV0dXJuIHRoZSB2YWx1ZVxuKi9cbmZ1bmN0aW9uIHRhcDxUPih4OiBULCBmbjogKHg6IFQpID0+IHZvaWQpOiBUIHtcbiAgZm4oeCk7XG4gIHJldHVybiB4O1xuXG59Il19
|
package/lib/vpc-v2.d.ts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import { CfnVPC,
|
|
1
|
+
import { CfnVPC, DefaultInstanceTenancy, ISubnet } from 'aws-cdk-lib/aws-ec2';
|
|
2
2
|
import { CfnResource } from 'aws-cdk-lib/core';
|
|
3
3
|
import { Construct, IDependable } from 'constructs';
|
|
4
4
|
import { IpamOptions, IIpamPool } from './ipam';
|
|
5
|
-
import { VpcV2Base } from './vpc-v2-base';
|
|
5
|
+
import { IVpcV2, VpcV2Base } from './vpc-v2-base';
|
|
6
|
+
import { SubnetV2Attributes } from './subnet-v2';
|
|
6
7
|
/**
|
|
7
8
|
* Additional props needed for secondary Address
|
|
8
9
|
*/
|
|
@@ -88,6 +89,13 @@ export interface VpcCidrOptions {
|
|
|
88
89
|
* @default - no name for primary addresses
|
|
89
90
|
*/
|
|
90
91
|
readonly cidrBlockName?: string;
|
|
92
|
+
/**
|
|
93
|
+
* IPv4 CIDR provisioned under pool
|
|
94
|
+
* Required to check for overlapping CIDRs after provisioning
|
|
95
|
+
* is complete under IPAM pool
|
|
96
|
+
* @default - no IPAM IPv4 CIDR range is provisioned using IPAM
|
|
97
|
+
*/
|
|
98
|
+
readonly ipv4IpamProvisionedCidrs?: string[];
|
|
91
99
|
}
|
|
92
100
|
/**
|
|
93
101
|
* Implements ip address allocation according to the IPAdress type
|
|
@@ -148,6 +156,57 @@ export interface VpcV2Props {
|
|
|
148
156
|
*/
|
|
149
157
|
readonly vpcName?: string;
|
|
150
158
|
}
|
|
159
|
+
/**
|
|
160
|
+
* Options to import a VPC created outside of CDK stack
|
|
161
|
+
*/
|
|
162
|
+
export interface VpcV2Attributes {
|
|
163
|
+
/**
|
|
164
|
+
* The VPC ID
|
|
165
|
+
* Refers to physical Id of the resource
|
|
166
|
+
*/
|
|
167
|
+
readonly vpcId: string;
|
|
168
|
+
/**
|
|
169
|
+
* Region in which imported VPC is hosted
|
|
170
|
+
* required in case of cross region VPC
|
|
171
|
+
* as given value will be used to set field region for imported VPC,
|
|
172
|
+
* which then later can be used for establishing VPC peering connection.
|
|
173
|
+
*
|
|
174
|
+
* @default - constructed with stack region value
|
|
175
|
+
*/
|
|
176
|
+
readonly region?: string;
|
|
177
|
+
/**
|
|
178
|
+
* The ID of the AWS account that owns the imported VPC
|
|
179
|
+
* required in case of cross account VPC
|
|
180
|
+
* as given value will be used to set field account for imported VPC,
|
|
181
|
+
* which then later can be used for establishing VPC peering connection.
|
|
182
|
+
*
|
|
183
|
+
* @default - constructed with stack account value
|
|
184
|
+
*/
|
|
185
|
+
readonly ownerAccountId?: string;
|
|
186
|
+
/**
|
|
187
|
+
* Primary VPC CIDR Block of the imported VPC
|
|
188
|
+
* Can only be IPv4
|
|
189
|
+
*/
|
|
190
|
+
readonly vpcCidrBlock: string;
|
|
191
|
+
/**
|
|
192
|
+
* A VPN Gateway is attached to the VPC
|
|
193
|
+
*
|
|
194
|
+
* @default - No VPN Gateway
|
|
195
|
+
*/
|
|
196
|
+
readonly vpnGatewayId?: string;
|
|
197
|
+
/**
|
|
198
|
+
* Subnets associated with imported VPC
|
|
199
|
+
*
|
|
200
|
+
* @default - no subnets provided to be imported
|
|
201
|
+
*/
|
|
202
|
+
readonly subnets?: SubnetV2Attributes[];
|
|
203
|
+
/**
|
|
204
|
+
* Import Secondary CIDR blocks associated with VPC
|
|
205
|
+
*
|
|
206
|
+
* @default - No secondary IP address
|
|
207
|
+
*/
|
|
208
|
+
readonly secondaryCidrBlocks?: VPCCidrBlockattributes[];
|
|
209
|
+
}
|
|
151
210
|
/**
|
|
152
211
|
* This class provides a foundation for creating and configuring a VPC with advanced features such as IPAM (IP Address Management) and IPv6 support.
|
|
153
212
|
*
|
|
@@ -156,17 +215,21 @@ export interface VpcV2Props {
|
|
|
156
215
|
* @resource AWS::EC2::VPC
|
|
157
216
|
*/
|
|
158
217
|
export declare class VpcV2 extends VpcV2Base {
|
|
218
|
+
/**
|
|
219
|
+
* Create a VPC from existing attributes
|
|
220
|
+
*/
|
|
221
|
+
static fromVpcV2Attributes(scope: Construct, id: string, attrs: VpcV2Attributes): IVpcV2;
|
|
159
222
|
/**
|
|
160
223
|
* Identifier for this VPC
|
|
161
224
|
*/
|
|
162
225
|
readonly vpcId: string;
|
|
163
226
|
/**
|
|
164
|
-
|
|
165
|
-
|
|
227
|
+
* @attribute
|
|
228
|
+
*/
|
|
166
229
|
readonly vpcArn: string;
|
|
167
230
|
/**
|
|
168
231
|
* @attribute
|
|
169
|
-
|
|
232
|
+
*/
|
|
170
233
|
readonly vpcCidrBlock: string;
|
|
171
234
|
/**
|
|
172
235
|
* The IPv6 CIDR blocks for the VPC.
|
|
@@ -187,8 +250,8 @@ export declare class VpcV2 extends VpcV2Base {
|
|
|
187
250
|
*/
|
|
188
251
|
readonly dnsHostnamesEnabled: boolean;
|
|
189
252
|
/**
|
|
190
|
-
|
|
191
|
-
|
|
253
|
+
* Indicates if DNS support is enabled for this VPC.
|
|
254
|
+
*/
|
|
192
255
|
readonly dnsSupportEnabled: boolean;
|
|
193
256
|
/**
|
|
194
257
|
* Isolated Subnets that are part of this VPC.
|
|
@@ -207,9 +270,23 @@ export declare class VpcV2 extends VpcV2Base {
|
|
|
207
270
|
*/
|
|
208
271
|
readonly internetConnectivityEstablished: IDependable;
|
|
209
272
|
/**
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
readonly secondaryCidrBlock
|
|
273
|
+
* reference to all secondary blocks attached
|
|
274
|
+
*/
|
|
275
|
+
readonly secondaryCidrBlock?: IVPCCidrBlock[];
|
|
276
|
+
/**
|
|
277
|
+
* IPv4 CIDR provisioned using IPAM pool
|
|
278
|
+
* Required to check for overlapping CIDRs after provisioning
|
|
279
|
+
* is complete under IPAM
|
|
280
|
+
*/
|
|
281
|
+
readonly ipv4IpamProvisionedCidrs?: string[];
|
|
282
|
+
/**
|
|
283
|
+
* Region for this VPC
|
|
284
|
+
*/
|
|
285
|
+
readonly region: string;
|
|
286
|
+
/**
|
|
287
|
+
* Identifier of the owner for this VPC
|
|
288
|
+
*/
|
|
289
|
+
readonly ownerAccountId: string;
|
|
213
290
|
/**
|
|
214
291
|
* For validation to define IPv6 subnets, set to true in case of
|
|
215
292
|
* Amazon Provided IPv6 cidr range
|
|
@@ -221,3 +298,81 @@ export declare class VpcV2 extends VpcV2Base {
|
|
|
221
298
|
readonly ipv4CidrBlock: string;
|
|
222
299
|
constructor(scope: Construct, id: string, props?: VpcV2Props);
|
|
223
300
|
}
|
|
301
|
+
/**
|
|
302
|
+
* Interface to create L2 for VPC Cidr Block
|
|
303
|
+
*/
|
|
304
|
+
export interface IVPCCidrBlock {
|
|
305
|
+
/**
|
|
306
|
+
* Amazon Provided Ipv6
|
|
307
|
+
*/
|
|
308
|
+
readonly amazonProvidedIpv6CidrBlock?: boolean;
|
|
309
|
+
/**
|
|
310
|
+
* The secondary IPv4 CIDR Block
|
|
311
|
+
*
|
|
312
|
+
* @default - no CIDR block provided
|
|
313
|
+
*/
|
|
314
|
+
readonly cidrBlock?: string;
|
|
315
|
+
/**
|
|
316
|
+
* IPAM pool for IPv6 address type
|
|
317
|
+
*/
|
|
318
|
+
readonly ipv6IpamPoolId?: string;
|
|
319
|
+
/**
|
|
320
|
+
* IPAM pool for IPv4 address type
|
|
321
|
+
*/
|
|
322
|
+
readonly ipv4IpamPoolId?: string;
|
|
323
|
+
}
|
|
324
|
+
/**
|
|
325
|
+
* Attributes for VPCCidrBlock used for defining a new CIDR Block
|
|
326
|
+
* and also for importing an existing CIDR
|
|
327
|
+
*/
|
|
328
|
+
export interface VPCCidrBlockattributes {
|
|
329
|
+
/**
|
|
330
|
+
* Amazon Provided Ipv6
|
|
331
|
+
*
|
|
332
|
+
* @default false
|
|
333
|
+
*/
|
|
334
|
+
readonly amazonProvidedIpv6CidrBlock?: boolean;
|
|
335
|
+
/**
|
|
336
|
+
* The secondary IPv4 CIDR Block
|
|
337
|
+
*
|
|
338
|
+
* @default - no CIDR block provided
|
|
339
|
+
*/
|
|
340
|
+
readonly cidrBlock?: string;
|
|
341
|
+
/**
|
|
342
|
+
* The secondary IPv4 CIDR Block
|
|
343
|
+
*
|
|
344
|
+
* @default - no CIDR block provided
|
|
345
|
+
*/
|
|
346
|
+
readonly cidrBlockName?: string;
|
|
347
|
+
/**
|
|
348
|
+
* Net mask length for IPv6 address type
|
|
349
|
+
*
|
|
350
|
+
* @default - no Net mask length configured for IPv6
|
|
351
|
+
*/
|
|
352
|
+
readonly ipv6NetmaskLength?: number;
|
|
353
|
+
/**
|
|
354
|
+
* Net mask length for IPv4 address type
|
|
355
|
+
*
|
|
356
|
+
* @default - no Net mask length configured for IPv4
|
|
357
|
+
*/
|
|
358
|
+
readonly ipv4NetmaskLength?: number;
|
|
359
|
+
/**
|
|
360
|
+
* IPAM pool for IPv6 address type
|
|
361
|
+
*
|
|
362
|
+
* @default - no IPAM pool Id provided for IPv6
|
|
363
|
+
*/
|
|
364
|
+
readonly ipv6IpamPoolId?: string;
|
|
365
|
+
/**
|
|
366
|
+
* IPAM pool for IPv4 address type
|
|
367
|
+
*
|
|
368
|
+
* @default - no IPAM pool Id provided for IPv4
|
|
369
|
+
*/
|
|
370
|
+
readonly ipv4IpamPoolId?: string;
|
|
371
|
+
/**
|
|
372
|
+
* IPv4 CIDR provisioned under pool
|
|
373
|
+
* Required to check for overlapping CIDRs after provisioning
|
|
374
|
+
* is complete under IPAM pool
|
|
375
|
+
* @default - no IPAM IPv4 CIDR range is provisioned using IPAM
|
|
376
|
+
*/
|
|
377
|
+
readonly ipv4IpamProvisionedCidrs?: string[];
|
|
378
|
+
}
|