@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/subnet-v2.js
CHANGED
|
@@ -19,7 +19,7 @@ class IpCidr {
|
|
|
19
19
|
}
|
|
20
20
|
exports.IpCidr = IpCidr;
|
|
21
21
|
_a = JSII_RTTI_SYMBOL_1;
|
|
22
|
-
IpCidr[_a] = { fqn: "@aws-cdk/aws-ec2-alpha.IpCidr", version: "2.
|
|
22
|
+
IpCidr[_a] = { fqn: "@aws-cdk/aws-ec2-alpha.IpCidr", version: "2.166.0-alpha.0" };
|
|
23
23
|
/**
|
|
24
24
|
* The SubnetV2 class represents a subnet within a VPC (Virtual Private Cloud) in AWS.
|
|
25
25
|
* It extends the Resource class and implements the ISubnet interface.
|
|
@@ -32,6 +32,71 @@ IpCidr[_a] = { fqn: "@aws-cdk/aws-ec2-alpha.IpCidr", version: "2.164.1-alpha.0"
|
|
|
32
32
|
*
|
|
33
33
|
*/
|
|
34
34
|
class SubnetV2 extends aws_cdk_lib_1.Resource {
|
|
35
|
+
/**
|
|
36
|
+
* Import an existing subnet to the VPC
|
|
37
|
+
*/
|
|
38
|
+
static fromSubnetV2Attributes(scope, id, attrs) {
|
|
39
|
+
try {
|
|
40
|
+
jsiiDeprecationWarnings._aws_cdk_aws_ec2_alpha_SubnetV2Attributes(attrs);
|
|
41
|
+
}
|
|
42
|
+
catch (error) {
|
|
43
|
+
if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
|
|
44
|
+
Error.captureStackTrace(error, this.fromSubnetV2Attributes);
|
|
45
|
+
}
|
|
46
|
+
throw error;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Class to define an import for an existing subnet
|
|
50
|
+
* @resource AWS::EC2::Subnet
|
|
51
|
+
*/
|
|
52
|
+
class ImportedSubnetV2 extends aws_cdk_lib_1.Resource {
|
|
53
|
+
constructor() {
|
|
54
|
+
super(...arguments);
|
|
55
|
+
/**
|
|
56
|
+
* The IPv6 CIDR Block assigned to this subnet
|
|
57
|
+
*/
|
|
58
|
+
this.ipv6CidrBlock = attrs.ipv6CidrBlock;
|
|
59
|
+
/**
|
|
60
|
+
* The type of subnet (eg. public or private) that this subnet represents.
|
|
61
|
+
*/
|
|
62
|
+
this.subnetType = attrs.subnetType;
|
|
63
|
+
/**
|
|
64
|
+
* The Availability Zone in which subnet is located
|
|
65
|
+
*/
|
|
66
|
+
this.availabilityZone = attrs.availabilityZone;
|
|
67
|
+
/**
|
|
68
|
+
* The subnetId for this particular subnet
|
|
69
|
+
* Refers to the physical ID created
|
|
70
|
+
*/
|
|
71
|
+
this.subnetId = attrs.subnetId;
|
|
72
|
+
/**
|
|
73
|
+
* Dependable that can be depended upon to force internet connectivity established on the VPC
|
|
74
|
+
*/
|
|
75
|
+
this.internetConnectivityEstablished = new constructs_1.DependencyGroup();
|
|
76
|
+
/**
|
|
77
|
+
* The IPv4 CIDR block assigned to this subnet
|
|
78
|
+
*/
|
|
79
|
+
this.ipv4CidrBlock = attrs.ipv4CidrBlock;
|
|
80
|
+
/**
|
|
81
|
+
* Current route table associated with this subnet
|
|
82
|
+
*/
|
|
83
|
+
this.routeTable = { routeTableId: attrs.routeTableId };
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Associate a Network ACL with this subnet
|
|
87
|
+
* Required here since it is implemented in the ISubnetV2
|
|
88
|
+
*/
|
|
89
|
+
associateNetworkAcl(aclId, networkAcl) {
|
|
90
|
+
const aclScope = networkAcl instanceof constructs_1.Construct ? networkAcl : this;
|
|
91
|
+
const other = networkAcl instanceof constructs_1.Construct ? this : networkAcl;
|
|
92
|
+
new aws_ec2_1.SubnetNetworkAclAssociation(aclScope, aclId + aws_cdk_lib_1.Names.nodeUniqueId(other.node), {
|
|
93
|
+
networkAcl,
|
|
94
|
+
subnet: this,
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
return new ImportedSubnetV2(scope, id);
|
|
99
|
+
}
|
|
35
100
|
/**
|
|
36
101
|
* Constructs a new SubnetV2 instance.
|
|
37
102
|
* @param scope The parent Construct that this resource will be part of.
|
|
@@ -142,7 +207,7 @@ class SubnetV2 extends aws_cdk_lib_1.Resource {
|
|
|
142
207
|
}
|
|
143
208
|
exports.SubnetV2 = SubnetV2;
|
|
144
209
|
_b = JSII_RTTI_SYMBOL_1;
|
|
145
|
-
SubnetV2[_b] = { fqn: "@aws-cdk/aws-ec2-alpha.SubnetV2", version: "2.
|
|
210
|
+
SubnetV2[_b] = { fqn: "@aws-cdk/aws-ec2-alpha.SubnetV2", version: "2.166.0-alpha.0" };
|
|
146
211
|
const subnetTypeMap = {
|
|
147
212
|
[aws_ec2_1.SubnetType.PRIVATE_ISOLATED]: (vpc, subnet) => vpc.isolatedSubnets.push(subnet),
|
|
148
213
|
[aws_ec2_1.SubnetType.PUBLIC]: (vpc, subnet) => vpc.publicSubnets.push(subnet),
|
|
@@ -171,8 +236,10 @@ function storeSubnetToVpcByType(vpc, subnet, type) {
|
|
|
171
236
|
* Need to set explicit dependency as during stack deletion,
|
|
172
237
|
* the cidr blocks may get deleted first and will fail as the subnets are still using the cidr blocks
|
|
173
238
|
*/
|
|
174
|
-
|
|
175
|
-
|
|
239
|
+
if (vpc.secondaryCidrBlock) {
|
|
240
|
+
for (const cidr of vpc.secondaryCidrBlock) {
|
|
241
|
+
subnet.node.addDependency(cidr);
|
|
242
|
+
}
|
|
176
243
|
}
|
|
177
244
|
}
|
|
178
245
|
/**
|
|
@@ -184,12 +251,17 @@ function storeSubnetToVpcByType(vpc, subnet, type) {
|
|
|
184
251
|
* @internal
|
|
185
252
|
*/
|
|
186
253
|
function validateSupportIpv6(vpc) {
|
|
187
|
-
if (vpc.secondaryCidrBlock
|
|
188
|
-
secondaryAddress.
|
|
189
|
-
|
|
254
|
+
if (vpc.secondaryCidrBlock) {
|
|
255
|
+
if (vpc.secondaryCidrBlock.some((secondaryAddress) => secondaryAddress.amazonProvidedIpv6CidrBlock === true ||
|
|
256
|
+
secondaryAddress.ipv6IpamPoolId != undefined)) {
|
|
257
|
+
return true;
|
|
258
|
+
}
|
|
259
|
+
else {
|
|
260
|
+
throw new Error('To use IPv6, the VPC must enable IPv6 support.');
|
|
261
|
+
}
|
|
190
262
|
}
|
|
191
263
|
else {
|
|
192
|
-
|
|
264
|
+
return false;
|
|
193
265
|
}
|
|
194
266
|
}
|
|
195
267
|
/**
|
|
@@ -202,14 +274,28 @@ function validateSupportIpv6(vpc) {
|
|
|
202
274
|
*/
|
|
203
275
|
function checkCidrRanges(vpc, cidrRange) {
|
|
204
276
|
const vpcCidrBlock = [vpc.ipv4CidrBlock];
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
277
|
+
const subnetCidrBlock = new util_1.CidrBlock(cidrRange);
|
|
278
|
+
const allCidrs = [];
|
|
279
|
+
// Secondary IP addresses assoicated using user defined IPv4 range
|
|
280
|
+
if (vpc.secondaryCidrBlock) {
|
|
281
|
+
for (const ipAddress of vpc.secondaryCidrBlock) {
|
|
282
|
+
if (ipAddress.cidrBlock) {
|
|
283
|
+
vpcCidrBlock.push(ipAddress.cidrBlock);
|
|
284
|
+
}
|
|
208
285
|
}
|
|
286
|
+
const cidrs = vpcCidrBlock.map(cidr => new util_1.CidrBlock(cidr));
|
|
287
|
+
allCidrs.push(...cidrs);
|
|
209
288
|
}
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
289
|
+
// Secondary IP addresses assoicated using IPAM IPv4 range
|
|
290
|
+
if (vpc.ipv4IpamProvisionedCidrs) {
|
|
291
|
+
const cidrs = vpc.ipv4IpamProvisionedCidrs.map(cidr => new util_1.CidrBlock(cidr));
|
|
292
|
+
allCidrs.push(...cidrs);
|
|
293
|
+
}
|
|
294
|
+
// If no IPv4 is assigned as secondary address
|
|
295
|
+
if (allCidrs.length === 0) {
|
|
296
|
+
throw new Error('No secondary IP address attached to VPC');
|
|
297
|
+
}
|
|
298
|
+
return allCidrs.some(c => c.containsCidr(subnetCidrBlock));
|
|
213
299
|
}
|
|
214
300
|
/**
|
|
215
301
|
* Validates if the provided IPv4 CIDR block overlaps with existing subnet CIDR blocks within the given VPC.
|
|
@@ -276,4 +362,4 @@ function validateOverlappingCidrRangesipv6(vpc, ipv6CidrBlock) {
|
|
|
276
362
|
}
|
|
277
363
|
return result;
|
|
278
364
|
}
|
|
279
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VibmV0LXYyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsic3VibmV0LXYyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLDZDQUFvRDtBQUNwRCxpREFBd0s7QUFDeEssMkNBQXFFO0FBRXJFLGlDQUFrRDtBQUNsRCxtQ0FBcUM7QUFTckM7O0dBRUc7QUFDSCxNQUFhLE1BQU07SUFPakIsWUFBWSxLQUFhO1FBQ3ZCLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO0tBQ25COztBQVRILHdCQVVDOzs7QUFrRkQ7Ozs7Ozs7Ozs7R0FVRztBQUNILE1BQWEsUUFBUyxTQUFRLHNCQUFRO0lBK0NwQzs7Ozs7T0FLRztJQUNILFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBb0I7UUFDNUQsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUU7WUFDZixZQUFZLEVBQUUsS0FBSyxDQUFDLFVBQVUsSUFBSSxrQkFBSSxDQUFDLE1BQU0sQ0FBQztnQkFDNUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLG1CQUFLLENBQUMsa0JBQWtCLENBQUMsSUFBSSxFQUFFLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSx3QkFBd0IsRUFBRSxHQUFHLEVBQUUsQ0FBQzthQUNqRyxDQUFDO1NBQ0gsQ0FBQyxDQUFDO1FBdkNMOzs7OztXQUtHO1FBQ2MscUNBQWdDLEdBQUcsSUFBSSw0QkFBZSxFQUFFLENBQUM7Ozs7OzsrQ0F6Qi9ELFFBQVE7Ozs7UUE0RGpCLE1BQU0sYUFBYSxHQUFHLEtBQUssQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDO1FBQy9DLE1BQU0sYUFBYSxHQUFHLEtBQUssQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDO1FBRWhELElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDMUQsTUFBTSxJQUFJLEtBQUssQ0FBQyw4Q0FBOEMsQ0FBQyxDQUFDO1FBQ2xFLENBQUM7UUFBQSxDQUFDO1FBRUYsSUFBSSxPQUFPLEdBQVksS0FBSyxDQUFDO1FBQzdCLElBQUksV0FBVyxHQUFZLEtBQUssQ0FBQztRQUVqQyxPQUFPLEdBQUcsNkJBQTZCLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRTdFLGlDQUFpQztRQUNqQyxJQUFJLEtBQUssQ0FBQyxhQUFhLEVBQUUsSUFBSSxFQUFFLENBQUM7WUFDOUIsbUJBQW1CLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQy9CLFdBQVcsR0FBRyxpQ0FBaUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDeEYsQ0FBQztRQUVELElBQUksT0FBTyxJQUFJLFdBQVcsRUFBRSxDQUFDO1lBQzNCLE1BQU0sSUFBSSxLQUFLLENBQUMsMkRBQTJELENBQUMsQ0FBQztRQUMvRSxDQUFDO1FBRUQsSUFBSSxLQUFLLENBQUMsMkJBQTJCLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDOUQsTUFBTSxJQUFJLEtBQUssQ0FBQyxxRUFBcUUsQ0FBQyxDQUFDO1FBQ3pGLENBQUM7UUFFRCxNQUFNLE1BQU0sR0FBRyxJQUFJLG1CQUFTLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRTtZQUMzQyxLQUFLLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLO1lBQ3RCLFNBQVMsRUFBRSxhQUFhO1lBQ3hCLGFBQWEsRUFBRSxhQUFhO1lBQzVCLGdCQUFnQixFQUFFLEtBQUssQ0FBQyxnQkFBZ0I7WUFDeEMsMkJBQTJCLEVBQUUsS0FBSyxDQUFDLDJCQUEyQixJQUFJLEtBQUs7U0FDeEUsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEdBQUcsTUFBTSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUM7UUFDOUMsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQztRQUMvQyxJQUFJLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUM7UUFDM0IsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQztRQUUvQyxJQUFJLENBQUMsV0FBVyxHQUFHLG9CQUFVLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsMkJBQTJCLENBQUMsQ0FBQztRQUVoRyxJQUFJLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNyQixJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUM7UUFDdEMsQ0FBQzthQUFNLENBQUM7WUFDTixrQ0FBa0M7WUFDbEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLGtCQUFVLENBQUMsSUFBSSxFQUFFLFlBQVksRUFBRTtnQkFDcEQsR0FBRyxFQUFFLEtBQUssQ0FBQyxHQUFHO2FBQ2YsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUVELE1BQU0sVUFBVSxHQUFHLElBQUksd0NBQThCLENBQUMsSUFBSSxFQUFFLHVCQUF1QixFQUFFO1lBQ25GLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtZQUN2QixZQUFZLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZO1NBQzNDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxnQ0FBZ0MsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFdEQsSUFBSSxDQUFDLCtCQUErQixHQUFHLElBQUksQ0FBQyxnQ0FBZ0MsQ0FBQztRQUU3RSxJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUM7UUFDbkMsc0JBQXNCLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0tBQzNEO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksbUJBQW1CLENBQUMsRUFBVSxFQUFFLFVBQXVCO1FBQzVELElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDO1FBRTlCLE1BQU0sS0FBSyxHQUFHLFVBQVUsWUFBWSxzQkFBUyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUNsRSxNQUFNLEtBQUssR0FBRyxVQUFVLFlBQVksc0JBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUM7UUFDbEUsSUFBSSxxQ0FBMkIsQ0FBQyxLQUFLLEVBQUUsRUFBRSxHQUFHLG1CQUFLLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUMxRSxVQUFVO1lBQ1YsTUFBTSxFQUFFLElBQUk7U0FDYixDQUFDLENBQUM7S0FDSjtJQUVEOztPQUVHO0lBQ0gsSUFBVyxVQUFVO1FBQ25CLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztLQUN6QjtJQUVEOztPQUVHO0lBRUgsSUFBVyxVQUFVO1FBQ25CLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztLQUN6Qjs7QUEzSkgsNEJBNEpDOzs7QUFFRCxNQUFNLGFBQWEsR0FBRztJQUNwQixDQUFDLG9CQUFVLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDLEdBQVcsRUFBRSxNQUFnQixFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDbEcsQ0FBQyxvQkFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBVyxFQUFFLE1BQWdCLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUN0RixDQUFDLG9CQUFVLENBQUMsbUJBQW1CLENBQUMsRUFBRSxDQUFDLEdBQVcsRUFBRSxNQUFnQixFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDcEcsQ0FBQyxvQkFBVSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsR0FBVyxFQUFFLE1BQWdCLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUMxRixDQUFDLG9CQUFVLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxHQUFXLEVBQUUsTUFBZ0IsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3hGLENBQUMsb0JBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUMsR0FBVyxFQUFFLE1BQWdCLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztDQUNsRyxDQUFDO0FBRUY7Ozs7Ozs7R0FPRztBQUNILFNBQVMsc0JBQXNCLENBQUMsR0FBVyxFQUFFLE1BQWdCLEVBQUUsSUFBZ0I7SUFDN0UsTUFBTSxnQkFBZ0IsR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDN0MsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3JCLGdCQUFnQixDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNoQyxDQUFDO1NBQU0sQ0FBQztRQUNOLE1BQU0sSUFBSSxLQUFLLENBQUMsNEJBQTRCLElBQUksRUFBRSxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUssTUFBTSxJQUFJLElBQUksR0FBRyxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDMUMsTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbEMsQ0FBQztBQUNILENBQUM7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsU0FBUyxtQkFBbUIsQ0FBQyxHQUFXO0lBQ3RDLElBQUksR0FBRyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDLGdCQUFnQixFQUFFLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQywyQkFBMkIsS0FBSyxJQUFJO1FBQzNHLGdCQUFnQixDQUFDLGNBQWMsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDO1FBQzlDLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztTQUFNLENBQUM7UUFDTixNQUFNLElBQUksS0FBSyxDQUFDLGdEQUFnRCxDQUFDLENBQUM7SUFDcEUsQ0FBQztBQUNILENBQUM7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsU0FBUyxlQUFlLENBQUMsR0FBVyxFQUFFLFNBQWlCO0lBRXJELE1BQU0sWUFBWSxHQUFHLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBRXpDLEtBQUssTUFBTSxTQUFTLElBQUksR0FBRyxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDL0MsSUFBSSxTQUFTLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDeEIsWUFBWSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDekMsQ0FBQztJQUNILENBQUM7SUFDRCxNQUFNLEtBQUssR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxnQkFBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFFNUQsTUFBTSxlQUFlLEdBQUcsSUFBSSxnQkFBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBRWpELE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQztBQUUxRCxDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUVILFNBQVMsNkJBQTZCLENBQUMsR0FBVyxFQUFFLGFBQXFCO0lBRXZFLElBQUksVUFBdUIsQ0FBQztJQUM1QixJQUFJLENBQUM7UUFDSCxVQUFVLEdBQUcsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDLE9BQU8sQ0FBQztJQUMzQyxDQUFDO0lBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUNYLG1CQUFtQixDQUFDO1FBQ3BCLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELE1BQU0sS0FBSyxHQUF1QixJQUFJLEtBQUssRUFBRSxDQUFDO0lBRTlDLE1BQU0sVUFBVSxHQUFHLElBQUksZ0JBQVMsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUVoRCxNQUFNLFVBQVUsR0FBcUIsQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLEVBQUUsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7SUFFOUUsS0FBSyxNQUFNLE1BQU0sSUFBSSxVQUFVLEVBQUUsQ0FBQztRQUNoQyxNQUFNLFNBQVMsR0FBRyxJQUFJLGdCQUFTLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3RELEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLEVBQUUsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBRUQsS0FBSyxNQUFNLEtBQUssSUFBSSxLQUFLLEVBQUUsQ0FBQztRQUMxQixJQUFJLFVBQVUsQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxFQUFFLENBQUM7WUFDaEQsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQztBQUVEOzs7Ozs7OztHQVFHO0FBQ0gsU0FBUyxpQ0FBaUMsQ0FBQyxHQUFXLEVBQUUsYUFBcUI7SUFFM0UsSUFBSSxVQUF1QixDQUFDO0lBQzVCLElBQUksQ0FBQztRQUNILFVBQVUsR0FBRyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUMsT0FBTyxDQUFDO0lBQzNDLENBQUM7SUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQ1gsbUJBQW1CLENBQUM7UUFDcEIsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsTUFBTSxPQUFPLEdBQVksRUFBRSxDQUFDO0lBRTVCLE1BQU0sVUFBVSxHQUFHLElBQUksb0JBQWEsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUVwRCxJQUFJLE1BQU0sR0FBYSxLQUFLLENBQUM7SUFFN0IsS0FBSyxNQUFNLE1BQU0sSUFBSSxVQUFVLEVBQUUsQ0FBQztRQUNoQyxJQUFJLE1BQU0sQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN6QixNQUFNLFNBQVMsR0FBRyxJQUFJLG9CQUFhLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQzFELE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQy9CLENBQUM7SUFDSCxDQUFDO0lBRUQsS0FBSyxNQUFNLEtBQUssSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUM1QixJQUFJLFVBQVUsQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ3JELE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDaEIsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUmVzb3VyY2UsIE5hbWVzLCBMYXp5IH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgQ2ZuU3VibmV0LCBDZm5TdWJuZXRSb3V0ZVRhYmxlQXNzb2NpYXRpb24sIElOZXR3b3JrQWNsLCBJUm91dGVUYWJsZSwgSVN1Ym5ldCwgTmV0d29ya0FjbCwgU3VibmV0TmV0d29ya0FjbEFzc29jaWF0aW9uLCBTdWJuZXRUeXBlIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWVjMic7XG5pbXBvcnQgeyBDb25zdHJ1Y3QsIERlcGVuZGVuY3lHcm91cCwgSURlcGVuZGFibGUgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IElWcGNWMiB9IGZyb20gJy4vdnBjLXYyLWJhc2UnO1xuaW1wb3J0IHsgQ2lkckJsb2NrLCBDaWRyQmxvY2tJcHY2IH0gZnJvbSAnLi91dGlsJztcbmltcG9ydCB7IFJvdXRlVGFibGUgfSBmcm9tICcuL3JvdXRlJztcblxuLyoqXG4gKiBJbnRlcmZhY2UgdG8gZGVmaW5lIHN1Ym5ldCBDSURSXG4gKi9cbmludGVyZmFjZSBJQ2lkciB7XG4gIHJlYWRvbmx5IGNpZHI6IHN0cmluZztcbn1cblxuLyoqXG4gKiBJUHY0IG9yIElQdjYgQ0lEUiByYW5nZSBmb3IgdGhlIHN1Ym5ldFxuICovXG5leHBvcnQgY2xhc3MgSXBDaWRyIGltcGxlbWVudHMgSUNpZHIge1xuXG4gIC8qKlxuICogSVB2NiBDSURSIHJhbmdlIGZvciB0aGUgc3VibmV0XG4gKiBBbGxvd2VkIG9ubHkgaWYgSVB2NiBpcyBlbmFibGVkIG9uIFZQY1xuICovXG4gIHB1YmxpYyByZWFkb25seSBjaWRyOiBzdHJpbmc7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBzdHJpbmcgKSB7XG4gICAgdGhpcy5jaWRyID0gcHJvcHM7XG4gIH1cbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIHRvIGRlZmluZSBzdWJuZXQgZm9yIFZQQy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdWJuZXRWMlByb3BzIHtcbi8qKlxuICogVlBDIFByb3BcbiAqL1xuICByZWFkb25seSB2cGM6IElWcGNWMjtcblxuICAvKipcbiAgICogaXB2NCBjaWRyIHRvIGFzc2lnbiB0byB0aGlzIHN1Ym5ldC5cbiAgICogU2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1yZXNvdXJjZS1lYzItc3VibmV0Lmh0bWwjY2ZuLWVjMi1zdWJuZXQtY2lkcmJsb2NrXG4gICAqL1xuICByZWFkb25seSBpcHY0Q2lkckJsb2NrOiBJcENpZHI7XG5cbiAgLyoqXG4gICAqIElwdjYgQ0lEUiBSYW5nZSBmb3Igc3VibmV0XG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm8gSXB2NiBhZGRyZXNzXG4gICAqL1xuICByZWFkb25seSBpcHY2Q2lkckJsb2NrPzogSXBDaWRyO1xuXG4gIC8qKlxuICAgKiBDdXN0b20gQVogZm9yIHRoZSBzdWJuZXRcbiAgICovXG4gIHJlYWRvbmx5IGF2YWlsYWJpbGl0eVpvbmU6IHN0cmluZztcblxuICAvKipcbiAgICogQ3VzdG9tIFJvdXRlIGZvciBzdWJuZXRcbiAgICpcbiAgICogQGRlZmF1bHQgLSBhIGRlZmF1bHQgcm91dGUgdGFibGUgY3JlYXRlZFxuICAgKi9cbiAgcmVhZG9ubHkgcm91dGVUYWJsZT86IElSb3V0ZVRhYmxlO1xuXG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiBTdWJuZXQgdG8gY29uZmlndXJlLlxuICAgKlxuICAgKiBUaGUgU3VibmV0IHR5cGUgd2lsbCBjb250cm9sIHRoZSBhYmlsaXR5IHRvIHJvdXRlIGFuZCBjb25uZWN0IHRvIHRoZVxuICAgKiBJbnRlcm5ldC5cbiAgICpcbiAgICogVE9ETzogQWRkIHZhbGlkYXRpb24gY2hlY2sgYHN1Ym5ldFR5cGVgIHdoZW4gYWRkaW5nIHJlc291cmNlcyAoZS5nLiBjYW5ub3QgYWRkIE5hdEdhdGV3YXkgdG8gcHJpdmF0ZSlcbiAgICovXG4gIHJlYWRvbmx5IHN1Ym5ldFR5cGU6IFN1Ym5ldFR5cGU7XG5cbiAgLyoqXG4gICAqIFN1Ym5ldCBuYW1lXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gcHJvdmlzaW9uZWQgd2l0aCBhbiBhdXRvZ2VuZXJhdGVkIG5hbWUgYnkgQ0RLXG4gICAqL1xuICByZWFkb25seSBzdWJuZXROYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciBhIG5ldHdvcmsgaW50ZXJmYWNlIGNyZWF0ZWQgaW4gdGhpcyBzdWJuZXQgcmVjZWl2ZXMgYW4gSVB2NiBhZGRyZXNzLlxuICAgKiBJZiB5b3Ugc3BlY2lmeSBBc3NpZ25JcHY2QWRkcmVzc09uQ3JlYXRpb24sIHlvdSBtdXN0IGFsc28gc3BlY2lmeSBJcHY2Q2lkckJsb2NrLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHVuZGVmaW5lZCBpbiBjYXNlIG5vdCBwcm92aWRlZCBhcyBhbiBpbnB1dFxuICAgKi9cbiAgcmVhZG9ubHkgYXNzaWduSXB2NkFkZHJlc3NPbkNyZWF0aW9uPzogYm9vbGVhbjtcblxufVxuXG4vKipcbiAqIEludGVyZmFjZSB3aXRoIGFkZGl0aW9uYWwgcHJvcGVydGllcyBmb3IgU3VibmV0VjJcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJU3VibmV0VjIgZXh0ZW5kcyBJU3VibmV0IHtcblxuICAvKipcbiAgICogVGhlIElQdjYgQ0lEUiBibG9jayBmb3IgdGhpcyBzdWJuZXRcbiAgICovXG4gIHJlYWRvbmx5IGlwdjZDaWRyQmxvY2s/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHN1Ym5ldCAocHVibGljIG9yIHByaXZhdGUpIHRoYXQgdGhpcyBzdWJuZXQgcmVwcmVzZW50cy5cbiAgICpcbiAgICogQGF0dHJpYnV0ZSBTdWJuZXRUeXBlXG4gICAqL1xuICByZWFkb25seSBzdWJuZXRUeXBlPzogU3VibmV0VHlwZTtcblxufVxuXG4vKipcbiAqIFRoZSBTdWJuZXRWMiBjbGFzcyByZXByZXNlbnRzIGEgc3VibmV0IHdpdGhpbiBhIFZQQyAoVmlydHVhbCBQcml2YXRlIENsb3VkKSBpbiBBV1MuXG4gKiBJdCBleHRlbmRzIHRoZSBSZXNvdXJjZSBjbGFzcyBhbmQgaW1wbGVtZW50cyB0aGUgSVN1Ym5ldCBpbnRlcmZhY2UuXG4gKlxuICogSW5zdGFuY2VzIG9mIHRoaXMgY2xhc3MgY2FuIGJlIHVzZWQgdG8gY3JlYXRlIGFuZCBtYW5hZ2Ugc3VibmV0cyB3aXRoaW4gYSBWcGNWMiBpbnN0YW5jZS5cbiAqIFN1Ym5ldHMgY2FuIGJlIGNvbmZpZ3VyZWQgd2l0aCBzcGVjaWZpYyBJUCBhZGRyZXNzIHJhbmdlcyAoSVB2NCBhbmQgSVB2NiksIGF2YWlsYWJpbGl0eSB6b25lcyxcbiAqIGFuZCBzdWJuZXQgdHlwZXMgKGUuZy4sIHB1YmxpYywgcHJpdmF0ZSwgaXNvbGF0ZWQpLlxuICpcbiAqIEByZXNvdXJjZSBBV1M6OkVDMjo6U3VibmV0XG4gKlxuICovXG5leHBvcnQgY2xhc3MgU3VibmV0VjIgZXh0ZW5kcyBSZXNvdXJjZSBpbXBsZW1lbnRzIElTdWJuZXRWMiB7XG5cbiAgLyoqXG4gICAqIFRoZSBBdmFpbGFiaWxpdHkgWm9uZSB0aGUgc3VibmV0IGlzIGxvY2F0ZWQgaW5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBhdmFpbGFiaWxpdHlab25lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBzdWJuZXRJZCBmb3IgdGhpcyBwYXJ0aWN1bGFyIHN1Ym5ldFxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgc3VibmV0SWQ6IHN0cmluZztcblxuICAvKipcbiAgICogIERlcGVuZGVuY2llcyBmb3IgaW50ZXJuZXQgY29ubmVjdGl2aXR5XG4gICAqIFRoaXMgUHJvcGVydHkgZXhwb3NlcyB0aGUgUm91dGVUYWJsZS1TdWJuZXQgYXNzb2NpYXRpb24gc28gdGhhdCBvdGhlciByZXNvdXJjZXMgY2FuIGRlcGVuZCBvbiBpdC5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBpbnRlcm5ldENvbm5lY3Rpdml0eUVzdGFibGlzaGVkOiBJRGVwZW5kYWJsZTtcblxuICAvKipcbiAgICogVGhlIHZhcmlhYmxlIG5hbWUgYGludGVybmV0Q29ubmVjdGl2aXR5RXN0YWJsaXNoZWRgIGRvZXMgbm90IHJlZmxlY3Qgd2hhdCBpdCBhY3R1YWxseSBpcy5cbiAgICogVGhlIG5hbWluZyBpcyBlbmZvcmNlZCBieSBJU3VibmV0LiBXZSBuZWVkIHRvIGtlZXAgaXQgdG8gbWFpbnRhaW4gY29tcGF0aWJpbGl0eS5cbiAgICogSXQgZXhwb3NlcyB0aGUgUm91dGVUYWJsZS1TdWJuZXQgYXNzb2NpYXRpb24gc28gdGhhdCBvdGhlciByZXNvdXJjZXMgY2FuIGRlcGVuZCBvbiBpdC5cbiAgICogRS5nLiBSZXNvdXJjZXMgaW4gYSBzdWJuZXQsIHdoZW4gYmVpbmcgZGVsZXRlZCwgbWF5IG5lZWQgdGhlIFJvdXRlVGFibGUgdG8gZXhpc3QgaW4gb3JkZXIgdG8gZGVsZXRlIHByb3Blcmx5XG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IF9pbnRlcm5ldENvbm5lY3Rpdml0eUVzdGFibGlzaGVkID0gbmV3IERlcGVuZGVuY3lHcm91cCgpO1xuXG4gIC8qKlxuICAgKiBUaGUgSVB2NCBDSURSIGJsb2NrIGZvciB0aGlzIHN1Ym5ldFxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGlwdjRDaWRyQmxvY2s6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIElQdjYgQ0lEUiBCbG9jayBmb3IgdGhpcyBzdWJuZXRcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBpcHY2Q2lkckJsb2NrPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiBzdWJuZXQgKHB1YmxpYyBvciBwcml2YXRlKSB0aGF0IHRoaXMgc3VibmV0IHJlcHJlc2VudHMuXG4gICAqIEBhdHRyaWJ1dGUgU3VibmV0VHlwZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHN1Ym5ldFR5cGU/OiBTdWJuZXRUeXBlO1xuXG4gIHByaXZhdGUgX25ldHdvcmtBY2w6IElOZXR3b3JrQWNsO1xuXG4gIHByaXZhdGUgX3JvdXRlVGFibGU6IElSb3V0ZVRhYmxlO1xuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3RzIGEgbmV3IFN1Ym5ldFYyIGluc3RhbmNlLlxuICAgKiBAcGFyYW0gc2NvcGUgVGhlIHBhcmVudCBDb25zdHJ1Y3QgdGhhdCB0aGlzIHJlc291cmNlIHdpbGwgYmUgcGFydCBvZi5cbiAgICogQHBhcmFtIGlkIFRoZSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhpcyByZXNvdXJjZS5cbiAgICogQHBhcmFtIHByb3BzIFRoZSBjb25maWd1cmF0aW9uIHByb3BlcnRpZXMgZm9yIHRoZSBzdWJuZXQuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogU3VibmV0VjJQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgcGh5c2ljYWxOYW1lOiBwcm9wcy5zdWJuZXROYW1lID8/IExhenkuc3RyaW5nKHtcbiAgICAgICAgcHJvZHVjZTogKCkgPT4gTmFtZXMudW5pcXVlUmVzb3VyY2VOYW1lKHRoaXMsIHsgbWF4TGVuZ3RoOiAxMjgsIGFsbG93ZWRTcGVjaWFsQ2hhcmFjdGVyczogJ18nIH0pLFxuICAgICAgfSksXG4gICAgfSk7XG5cbiAgICBjb25zdCBpcHY0Q2lkckJsb2NrID0gcHJvcHMuaXB2NENpZHJCbG9jay5jaWRyO1xuICAgIGNvbnN0IGlwdjZDaWRyQmxvY2sgPSBwcm9wcy5pcHY2Q2lkckJsb2NrPy5jaWRyO1xuXG4gICAgaWYgKCFjaGVja0NpZHJSYW5nZXMocHJvcHMudnBjLCBwcm9wcy5pcHY0Q2lkckJsb2NrLmNpZHIpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NJRFIgYmxvY2sgc2hvdWxkIGJlIHdpdGhpbiB0aGUgcmFuZ2Ugb2YgVlBDJyk7XG4gICAgfTtcblxuICAgIGxldCBvdmVybGFwOiBib29sZWFuID0gZmFsc2U7XG4gICAgbGV0IG92ZXJsYXBJcHY2OiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBvdmVybGFwID0gdmFsaWRhdGVPdmVybGFwcGluZ0NpZHJSYW5nZXMocHJvcHMudnBjLCBwcm9wcy5pcHY0Q2lkckJsb2NrLmNpZHIpO1xuXG4gICAgLy9jaGVjayB3aGV0aGVyIFZQQyBzdXBwb3J0cyBpcHY2XG4gICAgaWYgKHByb3BzLmlwdjZDaWRyQmxvY2s/LmNpZHIpIHtcbiAgICAgIHZhbGlkYXRlU3VwcG9ydElwdjYocHJvcHMudnBjKTtcbiAgICAgIG92ZXJsYXBJcHY2ID0gdmFsaWRhdGVPdmVybGFwcGluZ0NpZHJSYW5nZXNpcHY2KHByb3BzLnZwYywgcHJvcHMuaXB2NkNpZHJCbG9jaz8uY2lkcik7XG4gICAgfVxuXG4gICAgaWYgKG92ZXJsYXAgfHwgb3ZlcmxhcElwdjYpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ0lEUiBibG9jayBzaG91bGQgbm90IG92ZXJsYXAgd2l0aCBleGlzdGluZyBzdWJuZXQgYmxvY2tzJyk7XG4gICAgfVxuXG4gICAgaWYgKHByb3BzLmFzc2lnbklwdjZBZGRyZXNzT25DcmVhdGlvbiAmJiAhcHJvcHMuaXB2NkNpZHJCbG9jaykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJUHY2IENJRFIgYmxvY2sgaXMgcmVxdWlyZWQgd2hlbiBhc3NpZ25pbmcgSVB2NiBhZGRyZXNzIG9uIGNyZWF0aW9uJyk7XG4gICAgfVxuXG4gICAgY29uc3Qgc3VibmV0ID0gbmV3IENmblN1Ym5ldCh0aGlzLCAnU3VibmV0Jywge1xuICAgICAgdnBjSWQ6IHByb3BzLnZwYy52cGNJZCxcbiAgICAgIGNpZHJCbG9jazogaXB2NENpZHJCbG9jayxcbiAgICAgIGlwdjZDaWRyQmxvY2s6IGlwdjZDaWRyQmxvY2ssXG4gICAgICBhdmFpbGFiaWxpdHlab25lOiBwcm9wcy5hdmFpbGFiaWxpdHlab25lLFxuICAgICAgYXNzaWduSXB2NkFkZHJlc3NPbkNyZWF0aW9uOiBwcm9wcy5hc3NpZ25JcHY2QWRkcmVzc09uQ3JlYXRpb24gPz8gZmFsc2UsXG4gICAgfSk7XG5cbiAgICB0aGlzLm5vZGUuZGVmYXVsdENoaWxkID0gc3VibmV0O1xuICAgIHRoaXMuaXB2NENpZHJCbG9jayA9IHByb3BzLmlwdjRDaWRyQmxvY2suY2lkcjtcbiAgICB0aGlzLmlwdjZDaWRyQmxvY2sgPSBwcm9wcy5pcHY2Q2lkckJsb2NrPy5jaWRyO1xuICAgIHRoaXMuc3VibmV0SWQgPSBzdWJuZXQucmVmO1xuICAgIHRoaXMuYXZhaWxhYmlsaXR5Wm9uZSA9IHByb3BzLmF2YWlsYWJpbGl0eVpvbmU7XG5cbiAgICB0aGlzLl9uZXR3b3JrQWNsID0gTmV0d29ya0FjbC5mcm9tTmV0d29ya0FjbElkKHRoaXMsICdBY2wnLCBzdWJuZXQuYXR0ck5ldHdvcmtBY2xBc3NvY2lhdGlvbklkKTtcblxuICAgIGlmIChwcm9wcy5yb3V0ZVRhYmxlKSB7XG4gICAgICB0aGlzLl9yb3V0ZVRhYmxlID0gcHJvcHMucm91dGVUYWJsZTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQXNzaWduaW5nIGEgZGVmYXVsdCByb3V0ZSB0YWJsZVxuICAgICAgdGhpcy5fcm91dGVUYWJsZSA9IG5ldyBSb3V0ZVRhYmxlKHRoaXMsICdSb3V0ZVRhYmxlJywge1xuICAgICAgICB2cGM6IHByb3BzLnZwYyxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IHJvdXRlQXNzb2MgPSBuZXcgQ2ZuU3VibmV0Um91dGVUYWJsZUFzc29jaWF0aW9uKHRoaXMsICdSb3V0ZVRhYmxlQXNzb2NpYXRpb24nLCB7XG4gICAgICBzdWJuZXRJZDogdGhpcy5zdWJuZXRJZCxcbiAgICAgIHJvdXRlVGFibGVJZDogdGhpcy5yb3V0ZVRhYmxlLnJvdXRlVGFibGVJZCxcbiAgICB9KTtcblxuICAgIHRoaXMuX2ludGVybmV0Q29ubmVjdGl2aXR5RXN0YWJsaXNoZWQuYWRkKHJvdXRlQXNzb2MpO1xuXG4gICAgdGhpcy5pbnRlcm5ldENvbm5lY3Rpdml0eUVzdGFibGlzaGVkID0gdGhpcy5faW50ZXJuZXRDb25uZWN0aXZpdHlFc3RhYmxpc2hlZDtcblxuICAgIHRoaXMuc3VibmV0VHlwZSA9IHByb3BzLnN1Ym5ldFR5cGU7XG4gICAgc3RvcmVTdWJuZXRUb1ZwY0J5VHlwZShwcm9wcy52cGMsIHRoaXMsIHByb3BzLnN1Ym5ldFR5cGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFzc29jaWF0ZSBhIE5ldHdvcmsgQUNMIHdpdGggdGhpcyBzdWJuZXRcbiAgICpcbiAgICogQHBhcmFtIGlkIFRoZSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhpcyBhc3NvY2lhdGlvbi5cbiAgICogQHBhcmFtIG5ldHdvcmtBY2wgVGhlIE5ldHdvcmsgQUNMIHRvIGFzc29jaWF0ZSB3aXRoIHRoaXMgc3VibmV0LlxuICAgKiBUaGlzIGFsbG93cyBjb250cm9sbGluZyBpbmJvdW5kIGFuZCBvdXRib3VuZCB0cmFmZmljIGZvciBpbnN0YW5jZXMgaW4gdGhpcyBzdWJuZXQuXG4gICAqL1xuICBwdWJsaWMgYXNzb2NpYXRlTmV0d29ya0FjbChpZDogc3RyaW5nLCBuZXR3b3JrQWNsOiBJTmV0d29ya0FjbCkge1xuICAgIHRoaXMuX25ldHdvcmtBY2wgPSBuZXR3b3JrQWNsO1xuXG4gICAgY29uc3Qgc2NvcGUgPSBuZXR3b3JrQWNsIGluc3RhbmNlb2YgQ29uc3RydWN0ID8gbmV0d29ya0FjbCA6IHRoaXM7XG4gICAgY29uc3Qgb3RoZXIgPSBuZXR3b3JrQWNsIGluc3RhbmNlb2YgQ29uc3RydWN0ID8gdGhpcyA6IG5ldHdvcmtBY2w7XG4gICAgbmV3IFN1Ym5ldE5ldHdvcmtBY2xBc3NvY2lhdGlvbihzY29wZSwgaWQgKyBOYW1lcy5ub2RlVW5pcXVlSWQob3RoZXIubm9kZSksIHtcbiAgICAgIG5ldHdvcmtBY2wsXG4gICAgICBzdWJuZXQ6IHRoaXMsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHRoZSBSb3V0ZSBUYWJsZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBzdWJuZXRcbiAgICovXG4gIHB1YmxpYyBnZXQgcm91dGVUYWJsZSgpOiBJUm91dGVUYWJsZSB7XG4gICAgcmV0dXJuIHRoaXMuX3JvdXRlVGFibGU7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgTmV0d29yayBBQ0wgYXNzb2NpYXRlZCB3aXRoIHRoaXMgc3VibmV0LlxuICAgKi9cblxuICBwdWJsaWMgZ2V0IG5ldHdvcmtBY2woKTogSU5ldHdvcmtBY2wge1xuICAgIHJldHVybiB0aGlzLl9uZXR3b3JrQWNsO1xuICB9XG59XG5cbmNvbnN0IHN1Ym5ldFR5cGVNYXAgPSB7XG4gIFtTdWJuZXRUeXBlLlBSSVZBVEVfSVNPTEFURURdOiAodnBjOiBJVnBjVjIsIHN1Ym5ldDogU3VibmV0VjIpID0+IHZwYy5pc29sYXRlZFN1Ym5ldHMucHVzaChzdWJuZXQpLFxuICBbU3VibmV0VHlwZS5QVUJMSUNdOiAodnBjOiBJVnBjVjIsIHN1Ym5ldDogU3VibmV0VjIpID0+IHZwYy5wdWJsaWNTdWJuZXRzLnB1c2goc3VibmV0KSxcbiAgW1N1Ym5ldFR5cGUuUFJJVkFURV9XSVRIX0VHUkVTU106ICh2cGM6IElWcGNWMiwgc3VibmV0OiBTdWJuZXRWMikgPT4gdnBjLnByaXZhdGVTdWJuZXRzLnB1c2goc3VibmV0KSxcbiAgW1N1Ym5ldFR5cGUuSVNPTEFURURdOiAodnBjOiBJVnBjVjIsIHN1Ym5ldDogU3VibmV0VjIpID0+IHZwYy5pc29sYXRlZFN1Ym5ldHMucHVzaChzdWJuZXQpLFxuICBbU3VibmV0VHlwZS5QUklWQVRFXTogKHZwYzogSVZwY1YyLCBzdWJuZXQ6IFN1Ym5ldFYyKSA9PiB2cGMucHJpdmF0ZVN1Ym5ldHMucHVzaChzdWJuZXQpLFxuICBbU3VibmV0VHlwZS5QUklWQVRFX1dJVEhfTkFUXTogKHZwYzogSVZwY1YyLCBzdWJuZXQ6IFN1Ym5ldFYyKSA9PiB2cGMucHJpdmF0ZVN1Ym5ldHMucHVzaChzdWJuZXQpLFxufTtcblxuLyoqXG4gKiBTdG9yZXMgdGhlIHByb3ZpZGVkIHN1Ym5ldCBpbiB0aGUgVlBDJ3MgY29sbGVjdGlvbiBvZiBzdWJuZXRzIGJhc2VkIG9uIHRoZSBzcGVjaWZpZWQgc3VibmV0IHR5cGUuXG4gKlxuICogQHBhcmFtIHZwYyBUaGUgVlBDIGluc3RhbmNlIHRvIHdoaWNoIHRoZSBzdWJuZXQgYmVsb25ncy5cbiAqIEBwYXJhbSBzdWJuZXQgVGhlIHN1Ym5ldCBpbnN0YW5jZSB0byBiZSBzdG9yZWQuXG4gKiBAcGFyYW0gdHlwZSBUaGUgdHlwZSBvZiB0aGUgc3VibmV0IChlLmcuLCBwdWJsaWMsIHByaXZhdGUsIGlzb2xhdGVkKS5cbiAqIEBpbnRlcm5hbFxuICovXG5mdW5jdGlvbiBzdG9yZVN1Ym5ldFRvVnBjQnlUeXBlKHZwYzogSVZwY1YyLCBzdWJuZXQ6IFN1Ym5ldFYyLCB0eXBlOiBTdWJuZXRUeXBlKSB7XG4gIGNvbnN0IGZpbmRGdW5jdGlvblR5cGUgPSBzdWJuZXRUeXBlTWFwW3R5cGVdO1xuICBpZiAoZmluZEZ1bmN0aW9uVHlwZSkge1xuICAgIGZpbmRGdW5jdGlvblR5cGUodnBjLCBzdWJuZXQpO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgc3VibmV0IHR5cGU6ICR7dHlwZX1gKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBOZWVkIHRvIHNldCBleHBsaWNpdCBkZXBlbmRlbmN5IGFzIGR1cmluZyBzdGFjayBkZWxldGlvbixcbiAgICogdGhlIGNpZHIgYmxvY2tzIG1heSBnZXQgZGVsZXRlZCBmaXJzdCBhbmQgd2lsbCBmYWlsIGFzIHRoZSBzdWJuZXRzIGFyZSBzdGlsbCB1c2luZyB0aGUgY2lkciBibG9ja3NcbiAgICovXG4gIGZvciAoY29uc3QgY2lkciBvZiB2cGMuc2Vjb25kYXJ5Q2lkckJsb2NrKSB7XG4gICAgc3VibmV0Lm5vZGUuYWRkRGVwZW5kZW5jeShjaWRyKTtcbiAgfVxufVxuXG4vKipcbiAqIFZhbGlkYXRlcyB3aGV0aGVyIHRoZSBwcm92aWRlZCBWUEMgc3VwcG9ydHMgSVB2NiBhZGRyZXNzZXMuXG4gKlxuICogQHBhcmFtIHZwYyBUaGUgVlBDIGluc3RhbmNlIHRvIGJlIHZhbGlkYXRlZC5cbiAqIEB0aHJvd3MgRXJyb3IgaWYgdGhlIFZQQyBkb2VzIG5vdCBzdXBwb3J0IElQdjYgYWRkcmVzc2VzLlxuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgVlBDIHN1cHBvcnRzIElQdjYgYWRkcmVzc2VzLCBmYWxzZSBvdGhlcndpc2UuXG4gKiBAaW50ZXJuYWxcbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVTdXBwb3J0SXB2Nih2cGM6IElWcGNWMikge1xuICBpZiAodnBjLnNlY29uZGFyeUNpZHJCbG9jay5zb21lKChzZWNvbmRhcnlBZGRyZXNzKSA9PiBzZWNvbmRhcnlBZGRyZXNzLmFtYXpvblByb3ZpZGVkSXB2NkNpZHJCbG9jayA9PT0gdHJ1ZSB8fFxuICBzZWNvbmRhcnlBZGRyZXNzLmlwdjZJcGFtUG9vbElkICE9IHVuZGVmaW5lZCkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1RvIHVzZSBJUHY2LCB0aGUgVlBDIG11c3QgZW5hYmxlIElQdjYgc3VwcG9ydC4nKTtcbiAgfVxufVxuXG4vKipcbiAqIENoZWNrcyBpZiB0aGUgcHJvdmlkZWQgQ0lEUiByYW5nZSBmYWxscyB3aXRoaW4gdGhlIElQIGFkZHJlc3MgcmFuZ2VzIG9mIHRoZSBnaXZlbiBWUEMuXG4gKlxuICogQHBhcmFtIHZwYyBUaGUgVlBDIGluc3RhbmNlIHRvIGNoZWNrIGFnYWluc3QuXG4gKiBAcGFyYW0gY2lkclJhbmdlIFRoZSBDSURSIHJhbmdlIHRvIGJlIGNoZWNrZWQuXG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBDSURSIHJhbmdlIGZhbGxzIHdpdGhpbiB0aGUgVlBDJ3MgSVAgYWRkcmVzcyByYW5nZXMsIGZhbHNlIG90aGVyd2lzZS5cbiAqIEBpbnRlcm5hbFxuICovXG5mdW5jdGlvbiBjaGVja0NpZHJSYW5nZXModnBjOiBJVnBjVjIsIGNpZHJSYW5nZTogc3RyaW5nKSB7XG5cbiAgY29uc3QgdnBjQ2lkckJsb2NrID0gW3ZwYy5pcHY0Q2lkckJsb2NrXTtcblxuICBmb3IgKGNvbnN0IGlwQWRkcmVzcyBvZiB2cGMuc2Vjb25kYXJ5Q2lkckJsb2NrKSB7XG4gICAgaWYgKGlwQWRkcmVzcy5jaWRyQmxvY2spIHtcbiAgICAgIHZwY0NpZHJCbG9jay5wdXNoKGlwQWRkcmVzcy5jaWRyQmxvY2spO1xuICAgIH1cbiAgfVxuICBjb25zdCBjaWRycyA9IHZwY0NpZHJCbG9jay5tYXAoY2lkciA9PiBuZXcgQ2lkckJsb2NrKGNpZHIpKTtcblxuICBjb25zdCBzdWJuZXRDaWRyQmxvY2sgPSBuZXcgQ2lkckJsb2NrKGNpZHJSYW5nZSk7XG5cbiAgcmV0dXJuIGNpZHJzLnNvbWUoYyA9PiBjLmNvbnRhaW5zQ2lkcihzdWJuZXRDaWRyQmxvY2spKTtcblxufVxuXG4vKipcbiAqIFZhbGlkYXRlcyBpZiB0aGUgcHJvdmlkZWQgSVB2NCBDSURSIGJsb2NrIG92ZXJsYXBzIHdpdGggZXhpc3Rpbmcgc3VibmV0IENJRFIgYmxvY2tzIHdpdGhpbiB0aGUgZ2l2ZW4gVlBDLlxuICpcbiAqIEBwYXJhbSB2cGMgVGhlIFZQQyBpbnN0YW5jZSB0byBjaGVjayBhZ2FpbnN0LlxuICogQHBhcmFtIGlwdjRDaWRyQmxvY2sgVGhlIElQdjQgQ0lEUiBibG9jayB0byBiZSB2YWxpZGF0ZWQuXG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBJUHY0IENJRFIgYmxvY2sgb3ZlcmxhcHMgd2l0aCBleGlzdGluZyBzdWJuZXQgQ0lEUiBibG9ja3MsIGZhbHNlIG90aGVyd2lzZS5cbiAqIEBpbnRlcm5hbFxuICovXG5cbmZ1bmN0aW9uIHZhbGlkYXRlT3ZlcmxhcHBpbmdDaWRyUmFuZ2VzKHZwYzogSVZwY1YyLCBpcHY0Q2lkckJsb2NrOiBzdHJpbmcpOiBib29sZWFuIHtcblxuICBsZXQgYWxsU3VibmV0czogSVN1Ym5ldFYyW107XG4gIHRyeSB7XG4gICAgYWxsU3VibmV0cyA9IHZwYy5zZWxlY3RTdWJuZXRzKCkuc3VibmV0cztcbiAgfSBjYXRjaCAoZSkge1xuICAgICdObyBzdWJuZXRzIGluIFZQQyc7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgaXBNYXA6IFtzdHJpbmcsIHN0cmluZ11bXSA9IG5ldyBBcnJheSgpO1xuXG4gIGNvbnN0IGlucHV0UmFuZ2UgPSBuZXcgQ2lkckJsb2NrKGlwdjRDaWRyQmxvY2spO1xuXG4gIGNvbnN0IGlucHV0SXBNYXA6IFtzdHJpbmcsIHN0cmluZ10gPSBbaW5wdXRSYW5nZS5taW5JcCgpLCBpbnB1dFJhbmdlLm1heElwKCldO1xuXG4gIGZvciAoY29uc3Qgc3VibmV0IG9mIGFsbFN1Ym5ldHMpIHtcbiAgICBjb25zdCBjaWRyQmxvY2sgPSBuZXcgQ2lkckJsb2NrKHN1Ym5ldC5pcHY0Q2lkckJsb2NrKTtcbiAgICBpcE1hcC5wdXNoKFtjaWRyQmxvY2subWluSXAoKSwgY2lkckJsb2NrLm1heElwKCldKTtcbiAgfVxuXG4gIGZvciAoY29uc3QgcmFuZ2Ugb2YgaXBNYXApIHtcbiAgICBpZiAoaW5wdXRSYW5nZS5yYW5nZXNPdmVybGFwKHJhbmdlLCBpbnB1dElwTWFwKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlcyBpZiB0aGUgcHJvdmlkZWQgSVB2NiBDSURSIGJsb2NrIG92ZXJsYXBzIHdpdGggZXhpc3Rpbmcgc3VibmV0IENJRFIgYmxvY2tzIHdpdGhpbiB0aGUgZ2l2ZW4gVlBDLlxuICpcbiAqIEBwYXJhbSB2cGMgVGhlIFZQQyBpbnN0YW5jZSB0byBjaGVjayBhZ2FpbnN0LlxuICogQHBhcmFtIGlwdjZDaWRyQmxvY2sgVGhlIElQdjYgQ0lEUiBibG9jayB0byBiZSB2YWxpZGF0ZWQuXG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBJUHY2IENJRFIgYmxvY2sgb3ZlcmxhcHMgd2l0aCBleGlzdGluZyBzdWJuZXQgQ0lEUiBibG9ja3MsIGZhbHNlIG90aGVyd2lzZS5cbiAqIEB0aHJvd3MgRXJyb3IgaWYgbm8gc3VibmV0cyBhcmUgZm91bmQgaW4gdGhlIFZQQy5cbiAqIEBpbnRlcm5hbFxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZU92ZXJsYXBwaW5nQ2lkclJhbmdlc2lwdjYodnBjOiBJVnBjVjIsIGlwdjZDaWRyQmxvY2s6IHN0cmluZyk6IGJvb2xlYW4ge1xuXG4gIGxldCBhbGxTdWJuZXRzOiBJU3VibmV0VjJbXTtcbiAgdHJ5IHtcbiAgICBhbGxTdWJuZXRzID0gdnBjLnNlbGVjdFN1Ym5ldHMoKS5zdWJuZXRzO1xuICB9IGNhdGNoIChlKSB7XG4gICAgJ05vIHN1Ym5ldHMgaW4gVlBDJztcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBpcHY2TWFwOiBzdHJpbmdbXT0gW107XG5cbiAgY29uc3QgaW5wdXRSYW5nZSA9IG5ldyBDaWRyQmxvY2tJcHY2KGlwdjZDaWRyQmxvY2spO1xuXG4gIGxldCByZXN1bHQgOiBib29sZWFuID0gZmFsc2U7XG5cbiAgZm9yIChjb25zdCBzdWJuZXQgb2YgYWxsU3VibmV0cykge1xuICAgIGlmIChzdWJuZXQuaXB2NkNpZHJCbG9jaykge1xuICAgICAgY29uc3QgY2lkckJsb2NrID0gbmV3IENpZHJCbG9ja0lwdjYoc3VibmV0LmlwdjZDaWRyQmxvY2spO1xuICAgICAgaXB2Nk1hcC5wdXNoKGNpZHJCbG9jay5jaWRyKTtcbiAgICB9XG4gIH1cblxuICBmb3IgKGNvbnN0IHJhbmdlIG9mIGlwdjZNYXApIHtcbiAgICBpZiAoaW5wdXRSYW5nZS5yYW5nZXNPdmVybGFwKHJhbmdlLCBpbnB1dFJhbmdlLmNpZHIpKSB7XG4gICAgICByZXN1bHQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG4iXX0=
|
|
365
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VibmV0LXYyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsic3VibmV0LXYyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLDZDQUFvRDtBQUNwRCxpREFBd0s7QUFDeEssMkNBQXFFO0FBRXJFLGlDQUFrRDtBQUNsRCxtQ0FBcUM7QUFTckM7O0dBRUc7QUFDSCxNQUFhLE1BQU07SUFPakIsWUFBWSxLQUFhO1FBQ3ZCLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO0tBQ25COztBQVRILHdCQVVDOzs7QUFrRkQ7Ozs7Ozs7Ozs7R0FVRztBQUNILE1BQWEsUUFBUyxTQUFRLHNCQUFRO0lBRXBDOztPQUVHO0lBQ0ksTUFBTSxDQUFDLHNCQUFzQixDQUFDLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQXlCOzs7Ozs7Ozs7O1FBQzFGOzs7VUFHRTtRQUNGLE1BQU0sZ0JBQWlCLFNBQVEsc0JBQVE7WUFBdkM7O2dCQUVFOztrQkFFRTtnQkFDYyxrQkFBYSxHQUFZLEtBQUssQ0FBQyxhQUFhLENBQUM7Z0JBRTdEOztrQkFFRTtnQkFDYyxlQUFVLEdBQWdCLEtBQUssQ0FBQyxVQUFVLENBQUM7Z0JBRTNEOztrQkFFRTtnQkFDYyxxQkFBZ0IsR0FBVyxLQUFLLENBQUMsZ0JBQWdCLENBQUM7Z0JBRWxFOzs7a0JBR0U7Z0JBQ2MsYUFBUSxHQUFXLEtBQUssQ0FBQyxRQUFRLENBQUM7Z0JBRWxEOztrQkFFRTtnQkFDYyxvQ0FBK0IsR0FBZ0IsSUFBSSw0QkFBZSxFQUFFLENBQUM7Z0JBRXJGOztrQkFFRTtnQkFDYyxrQkFBYSxHQUFXLEtBQUssQ0FBQyxhQUFhLENBQUM7Z0JBRTVEOztrQkFFRTtnQkFDYyxlQUFVLEdBQWdCLEVBQUUsWUFBWSxFQUFFLEtBQUssQ0FBQyxZQUFhLEVBQUUsQ0FBQTtZQWNqRixDQUFDO1lBWkM7OztjQUdFO1lBQ0ssbUJBQW1CLENBQUMsS0FBYSxFQUFFLFVBQXVCO2dCQUMvRCxNQUFNLFFBQVEsR0FBRyxV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QUFFLENBQUM7WUFDckQsTUFBTSxHQUFHLElBQUksQ0FBQztRQUNoQixDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSZXNvdXJjZSwgTmFtZXMsIExhenkgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBDZm5TdWJuZXQsIENmblN1Ym5ldFJvdXRlVGFibGVBc3NvY2lhdGlvbiwgSU5ldHdvcmtBY2wsIElSb3V0ZVRhYmxlLCBJU3VibmV0LCBOZXR3b3JrQWNsLCBTdWJuZXROZXR3b3JrQWNsQXNzb2NpYXRpb24sIFN1Ym5ldFR5cGUgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZWMyJztcbmltcG9ydCB7IENvbnN0cnVjdCwgRGVwZW5kZW5jeUdyb3VwLCBJRGVwZW5kYWJsZSB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgSVZwY1YyIH0gZnJvbSAnLi92cGMtdjItYmFzZSc7XG5pbXBvcnQgeyBDaWRyQmxvY2ssIENpZHJCbG9ja0lwdjYgfSBmcm9tICcuL3V0aWwnO1xuaW1wb3J0IHsgUm91dGVUYWJsZSB9IGZyb20gJy4vcm91dGUnO1xuXG4vKipcbiAqIEludGVyZmFjZSB0byBkZWZpbmUgc3VibmV0IENJRFJcbiAqL1xuaW50ZXJmYWNlIElDaWRyIHtcbiAgcmVhZG9ubHkgY2lkcjogc3RyaW5nO1xufVxuXG4vKipcbiAqIElQdjQgb3IgSVB2NiBDSURSIHJhbmdlIGZvciB0aGUgc3VibmV0XG4gKi9cbmV4cG9ydCBjbGFzcyBJcENpZHIgaW1wbGVtZW50cyBJQ2lkciB7XG5cbiAgLyoqXG4gKiBJUHY2IENJRFIgcmFuZ2UgZm9yIHRoZSBzdWJuZXRcbiAqIEFsbG93ZWQgb25seSBpZiBJUHY2IGlzIGVuYWJsZWQgb24gVlBjXG4gKi9cbiAgcHVibGljIHJlYWRvbmx5IGNpZHI6IHN0cmluZztcbiAgY29uc3RydWN0b3IocHJvcHM6IHN0cmluZyApIHtcbiAgICB0aGlzLmNpZHIgPSBwcm9wcztcbiAgfVxufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgdG8gZGVmaW5lIHN1Ym5ldCBmb3IgVlBDLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN1Ym5ldFYyUHJvcHMge1xuLyoqXG4gKiBWUEMgUHJvcFxuICovXG4gIHJlYWRvbmx5IHZwYzogSVZwY1YyO1xuXG4gIC8qKlxuICAgKiBpcHY0IGNpZHIgdG8gYXNzaWduIHRvIHRoaXMgc3VibmV0LlxuICAgKiBTZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXJlc291cmNlLWVjMi1zdWJuZXQuaHRtbCNjZm4tZWMyLXN1Ym5ldC1jaWRyYmxvY2tcbiAgICovXG4gIHJlYWRvbmx5IGlwdjRDaWRyQmxvY2s6IElwQ2lkcjtcblxuICAvKipcbiAgICogSXB2NiBDSURSIFJhbmdlIGZvciBzdWJuZXRcbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBJcHY2IGFkZHJlc3NcbiAgICovXG4gIHJlYWRvbmx5IGlwdjZDaWRyQmxvY2s/OiBJcENpZHI7XG5cbiAgLyoqXG4gICAqIEN1c3RvbSBBWiBmb3IgdGhlIHN1Ym5ldFxuICAgKi9cbiAgcmVhZG9ubHkgYXZhaWxhYmlsaXR5Wm9uZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDdXN0b20gUm91dGUgZm9yIHN1Ym5ldFxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGEgZGVmYXVsdCByb3V0ZSB0YWJsZSBjcmVhdGVkXG4gICAqL1xuICByZWFkb25seSByb3V0ZVRhYmxlPzogSVJvdXRlVGFibGU7XG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIFN1Ym5ldCB0byBjb25maWd1cmUuXG4gICAqXG4gICAqIFRoZSBTdWJuZXQgdHlwZSB3aWxsIGNvbnRyb2wgdGhlIGFiaWxpdHkgdG8gcm91dGUgYW5kIGNvbm5lY3QgdG8gdGhlXG4gICAqIEludGVybmV0LlxuICAgKlxuICAgKiBUT0RPOiBBZGQgdmFsaWRhdGlvbiBjaGVjayBgc3VibmV0VHlwZWAgd2hlbiBhZGRpbmcgcmVzb3VyY2VzIChlLmcuIGNhbm5vdCBhZGQgTmF0R2F0ZXdheSB0byBwcml2YXRlKVxuICAgKi9cbiAgcmVhZG9ubHkgc3VibmV0VHlwZTogU3VibmV0VHlwZTtcblxuICAvKipcbiAgICogU3VibmV0IG5hbWVcbiAgICpcbiAgICogQGRlZmF1bHQgLSBwcm92aXNpb25lZCB3aXRoIGFuIGF1dG9nZW5lcmF0ZWQgbmFtZSBieSBDREtcbiAgICovXG4gIHJlYWRvbmx5IHN1Ym5ldE5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIGEgbmV0d29yayBpbnRlcmZhY2UgY3JlYXRlZCBpbiB0aGlzIHN1Ym5ldCByZWNlaXZlcyBhbiBJUHY2IGFkZHJlc3MuXG4gICAqIElmIHlvdSBzcGVjaWZ5IEFzc2lnbklwdjZBZGRyZXNzT25DcmVhdGlvbiwgeW91IG11c3QgYWxzbyBzcGVjaWZ5IElwdjZDaWRyQmxvY2suXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdW5kZWZpbmVkIGluIGNhc2Ugbm90IHByb3ZpZGVkIGFzIGFuIGlucHV0XG4gICAqL1xuICByZWFkb25seSBhc3NpZ25JcHY2QWRkcmVzc09uQ3JlYXRpb24/OiBib29sZWFuO1xuXG59XG5cbi8qKlxuICogSW50ZXJmYWNlIHdpdGggYWRkaXRpb25hbCBwcm9wZXJ0aWVzIGZvciBTdWJuZXRWMlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElTdWJuZXRWMiBleHRlbmRzIElTdWJuZXQge1xuXG4gIC8qKlxuICAgKiBUaGUgSVB2NiBDSURSIGJsb2NrIGZvciB0aGlzIHN1Ym5ldFxuICAgKi9cbiAgcmVhZG9ubHkgaXB2NkNpZHJCbG9jaz86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHR5cGUgb2Ygc3VibmV0IChwdWJsaWMgb3IgcHJpdmF0ZSkgdGhhdCB0aGlzIHN1Ym5ldCByZXByZXNlbnRzLlxuICAgKlxuICAgKiBAYXR0cmlidXRlIFN1Ym5ldFR5cGVcbiAgICovXG4gIHJlYWRvbmx5IHN1Ym5ldFR5cGU/OiBTdWJuZXRUeXBlO1xuXG59XG5cbi8qKlxuICogVGhlIFN1Ym5ldFYyIGNsYXNzIHJlcHJlc2VudHMgYSBzdWJuZXQgd2l0aGluIGEgVlBDIChWaXJ0dWFsIFByaXZhdGUgQ2xvdWQpIGluIEFXUy5cbiAqIEl0IGV4dGVuZHMgdGhlIFJlc291cmNlIGNsYXNzIGFuZCBpbXBsZW1lbnRzIHRoZSBJU3VibmV0IGludGVyZmFjZS5cbiAqXG4gKiBJbnN0YW5jZXMgb2YgdGhpcyBjbGFzcyBjYW4gYmUgdXNlZCB0byBjcmVhdGUgYW5kIG1hbmFnZSBzdWJuZXRzIHdpdGhpbiBhIFZwY1YyIGluc3RhbmNlLlxuICogU3VibmV0cyBjYW4gYmUgY29uZmlndXJlZCB3aXRoIHNwZWNpZmljIElQIGFkZHJlc3MgcmFuZ2VzIChJUHY0IGFuZCBJUHY2KSwgYXZhaWxhYmlsaXR5IHpvbmVzLFxuICogYW5kIHN1Ym5ldCB0eXBlcyAoZS5nLiwgcHVibGljLCBwcml2YXRlLCBpc29sYXRlZCkuXG4gKlxuICogQHJlc291cmNlIEFXUzo6RUMyOjpTdWJuZXRcbiAqXG4gKi9cbmV4cG9ydCBjbGFzcyBTdWJuZXRWMiBleHRlbmRzIFJlc291cmNlIGltcGxlbWVudHMgSVN1Ym5ldFYyIHtcblxuICAvKipcbiAgICogSW1wb3J0IGFuIGV4aXN0aW5nIHN1Ym5ldCB0byB0aGUgVlBDXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21TdWJuZXRWMkF0dHJpYnV0ZXMoc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgYXR0cnM6IFN1Ym5ldFYyQXR0cmlidXRlcykgOiBJU3VibmV0VjIge1xuICAgIC8qKlxuICAgICogQ2xhc3MgdG8gZGVmaW5lIGFuIGltcG9ydCBmb3IgYW4gZXhpc3Rpbmcgc3VibmV0XG4gICAgKiBAcmVzb3VyY2UgQVdTOjpFQzI6OlN1Ym5ldFxuICAgICovXG4gICAgY2xhc3MgSW1wb3J0ZWRTdWJuZXRWMiBleHRlbmRzIFJlc291cmNlIGltcGxlbWVudHMgSVN1Ym5ldFYyIHtcblxuICAgICAgLyoqXG4gICAgICAqIFRoZSBJUHY2IENJRFIgQmxvY2sgYXNzaWduZWQgdG8gdGhpcyBzdWJuZXRcbiAgICAgICovXG4gICAgICBwdWJsaWMgcmVhZG9ubHkgaXB2NkNpZHJCbG9jaz86IHN0cmluZyA9IGF0dHJzLmlwdjZDaWRyQmxvY2s7XG5cbiAgICAgIC8qKlxuICAgICAgKiBUaGUgdHlwZSBvZiBzdWJuZXQgKGVnLiBwdWJsaWMgb3IgcHJpdmF0ZSkgdGhhdCB0aGlzIHN1Ym5ldCByZXByZXNlbnRzLlxuICAgICAgKi9cbiAgICAgIHB1YmxpYyByZWFkb25seSBzdWJuZXRUeXBlPzogU3VibmV0VHlwZSA9IGF0dHJzLnN1Ym5ldFR5cGU7XG5cbiAgICAgIC8qKlxuICAgICAgKiBUaGUgQXZhaWxhYmlsaXR5IFpvbmUgaW4gd2hpY2ggc3VibmV0IGlzIGxvY2F0ZWRcbiAgICAgICovXG4gICAgICBwdWJsaWMgcmVhZG9ubHkgYXZhaWxhYmlsaXR5Wm9uZTogc3RyaW5nID0gYXR0cnMuYXZhaWxhYmlsaXR5Wm9uZTtcblxuICAgICAgLyoqXG4gICAgICAqIFRoZSBzdWJuZXRJZCBmb3IgdGhpcyBwYXJ0aWN1bGFyIHN1Ym5ldFxuICAgICAgKiBSZWZlcnMgdG8gdGhlIHBoeXNpY2FsIElEIGNyZWF0ZWRcbiAgICAgICovXG4gICAgICBwdWJsaWMgcmVhZG9ubHkgc3VibmV0SWQ6IHN0cmluZyA9IGF0dHJzLnN1Ym5ldElkO1xuXG4gICAgICAvKipcbiAgICAgICogRGVwZW5kYWJsZSB0aGF0IGNhbiBiZSBkZXBlbmRlZCB1cG9uIHRvIGZvcmNlIGludGVybmV0IGNvbm5lY3Rpdml0eSBlc3RhYmxpc2hlZCBvbiB0aGUgVlBDXG4gICAgICAqL1xuICAgICAgcHVibGljIHJlYWRvbmx5IGludGVybmV0Q29ubmVjdGl2aXR5RXN0YWJsaXNoZWQ6IElEZXBlbmRhYmxlID0gbmV3IERlcGVuZGVuY3lHcm91cCgpO1xuXG4gICAgICAvKipcbiAgICAgICogVGhlIElQdjQgQ0lEUiBibG9jayBhc3NpZ25lZCB0byB0aGlzIHN1Ym5ldFxuICAgICAgKi9cbiAgICAgIHB1YmxpYyByZWFkb25seSBpcHY0Q2lkckJsb2NrOiBzdHJpbmcgPSBhdHRycy5pcHY0Q2lkckJsb2NrO1xuXG4gICAgICAvKipcbiAgICAgICogIEN1cnJlbnQgcm91dGUgdGFibGUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgc3VibmV0XG4gICAgICAqL1xuICAgICAgcHVibGljIHJlYWRvbmx5IHJvdXRlVGFibGU6IElSb3V0ZVRhYmxlID0geyByb3V0ZVRhYmxlSWQ6IGF0dHJzLnJvdXRlVGFibGVJZCEgfVxuXG4gICAgICAvKipcbiAgICAgICogQXNzb2NpYXRlIGEgTmV0d29yayBBQ0wgd2l0aCB0aGlzIHN1Ym5ldFxuICAgICAgKiBSZXF1aXJlZCBoZXJlIHNpbmNlIGl0IGlzIGltcGxlbWVudGVkIGluIHRoZSBJU3VibmV0VjJcbiAgICAgICovXG4gICAgICBwdWJsaWMgYXNzb2NpYXRlTmV0d29ya0FjbChhY2xJZDogc3RyaW5nLCBuZXR3b3JrQWNsOiBJTmV0d29ya0FjbCkge1xuICAgICAgICBjb25zdCBhY2xTY29wZSA9IG5ldHdvcmtBY2wgaW5zdGFuY2VvZiBDb25zdHJ1Y3QgPyBuZXR3b3JrQWNsIDogdGhpcztcbiAgICAgICAgY29uc3Qgb3RoZXIgPSBuZXR3b3JrQWNsIGluc3RhbmNlb2YgQ29uc3RydWN0ID8gdGhpcyA6IG5ldHdvcmtBY2w7XG4gICAgICAgIG5ldyBTdWJuZXROZXR3b3JrQWNsQXNzb2NpYXRpb24oYWNsU2NvcGUsIGFjbElkICsgTmFtZXMubm9kZVVuaXF1ZUlkKG90aGVyLm5vZGUpLCB7XG4gICAgICAgICAgbmV0d29ya0FjbCxcbiAgICAgICAgICBzdWJuZXQ6IHRoaXMsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV3IEltcG9ydGVkU3VibmV0VjIoc2NvcGUsIGlkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgQXZhaWxhYmlsaXR5IFpvbmUgdGhlIHN1Ym5ldCBpcyBsb2NhdGVkIGluXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYXZhaWxhYmlsaXR5Wm9uZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgc3VibmV0SWQgZm9yIHRoaXMgcGFydGljdWxhciBzdWJuZXRcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHN1Ym5ldElkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqICBEZXBlbmRlbmNpZXMgZm9yIGludGVybmV0IGNvbm5lY3Rpdml0eVxuICAgKiBUaGlzIFByb3BlcnR5IGV4cG9zZXMgdGhlIFJvdXRlVGFibGUtU3VibmV0IGFzc29jaWF0aW9uIHNvIHRoYXQgb3RoZXIgcmVzb3VyY2VzIGNhbiBkZXBlbmQgb24gaXQuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgaW50ZXJuZXRDb25uZWN0aXZpdHlFc3RhYmxpc2hlZDogSURlcGVuZGFibGU7XG5cbiAgLyoqXG4gICAqIFRoZSB2YXJpYWJsZSBuYW1lIGBpbnRlcm5ldENvbm5lY3Rpdml0eUVzdGFibGlzaGVkYCBkb2VzIG5vdCByZWZsZWN0IHdoYXQgaXQgYWN0dWFsbHkgaXMuXG4gICAqIFRoZSBuYW1pbmcgaXMgZW5mb3JjZWQgYnkgSVN1Ym5ldC4gV2UgbmVlZCB0byBrZWVwIGl0IHRvIG1haW50YWluIGNvbXBhdGliaWxpdHkuXG4gICAqIEl0IGV4cG9zZXMgdGhlIFJvdXRlVGFibGUtU3VibmV0IGFzc29jaWF0aW9uIHNvIHRoYXQgb3RoZXIgcmVzb3VyY2VzIGNhbiBkZXBlbmQgb24gaXQuXG4gICAqIEUuZy4gUmVzb3VyY2VzIGluIGEgc3VibmV0LCB3aGVuIGJlaW5nIGRlbGV0ZWQsIG1heSBuZWVkIHRoZSBSb3V0ZVRhYmxlIHRvIGV4aXN0IGluIG9yZGVyIHRvIGRlbGV0ZSBwcm9wZXJseVxuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBfaW50ZXJuZXRDb25uZWN0aXZpdHlFc3RhYmxpc2hlZCA9IG5ldyBEZXBlbmRlbmN5R3JvdXAoKTtcblxuICAvKipcbiAgICogVGhlIElQdjQgQ0lEUiBibG9jayBmb3IgdGhpcyBzdWJuZXRcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBpcHY0Q2lkckJsb2NrOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBJUHY2IENJRFIgQmxvY2sgZm9yIHRoaXMgc3VibmV0XG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgaXB2NkNpZHJCbG9jaz86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHR5cGUgb2Ygc3VibmV0IChwdWJsaWMgb3IgcHJpdmF0ZSkgdGhhdCB0aGlzIHN1Ym5ldCByZXByZXNlbnRzLlxuICAgKiBAYXR0cmlidXRlIFN1Ym5ldFR5cGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBzdWJuZXRUeXBlPzogU3VibmV0VHlwZTtcblxuICBwcml2YXRlIF9uZXR3b3JrQWNsOiBJTmV0d29ya0FjbDtcblxuICBwcml2YXRlIF9yb3V0ZVRhYmxlOiBJUm91dGVUYWJsZTtcblxuICAvKipcbiAgICogQ29uc3RydWN0cyBhIG5ldyBTdWJuZXRWMiBpbnN0YW5jZS5cbiAgICogQHBhcmFtIHNjb3BlIFRoZSBwYXJlbnQgQ29uc3RydWN0IHRoYXQgdGhpcyByZXNvdXJjZSB3aWxsIGJlIHBhcnQgb2YuXG4gICAqIEBwYXJhbSBpZCBUaGUgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoaXMgcmVzb3VyY2UuXG4gICAqIEBwYXJhbSBwcm9wcyBUaGUgY29uZmlndXJhdGlvbiBwcm9wZXJ0aWVzIGZvciB0aGUgc3VibmV0LlxuICAgKi9cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFN1Ym5ldFYyUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHtcbiAgICAgIHBoeXNpY2FsTmFtZTogcHJvcHMuc3VibmV0TmFtZSA/PyBMYXp5LnN0cmluZyh7XG4gICAgICAgIHByb2R1Y2U6ICgpID0+IE5hbWVzLnVuaXF1ZVJlc291cmNlTmFtZSh0aGlzLCB7IG1heExlbmd0aDogMTI4LCBhbGxvd2VkU3BlY2lhbENoYXJhY3RlcnM6ICdfJyB9KSxcbiAgICAgIH0pLFxuICAgIH0pO1xuXG4gICAgY29uc3QgaXB2NENpZHJCbG9jayA9IHByb3BzLmlwdjRDaWRyQmxvY2suY2lkcjtcbiAgICBjb25zdCBpcHY2Q2lkckJsb2NrID0gcHJvcHMuaXB2NkNpZHJCbG9jaz8uY2lkcjtcblxuICAgIGlmICghY2hlY2tDaWRyUmFuZ2VzKHByb3BzLnZwYywgcHJvcHMuaXB2NENpZHJCbG9jay5jaWRyKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDSURSIGJsb2NrIHNob3VsZCBiZSB3aXRoaW4gdGhlIHJhbmdlIG9mIFZQQycpO1xuICAgIH07XG5cbiAgICBsZXQgb3ZlcmxhcDogYm9vbGVhbiA9IGZhbHNlO1xuICAgIGxldCBvdmVybGFwSXB2NjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgb3ZlcmxhcCA9IHZhbGlkYXRlT3ZlcmxhcHBpbmdDaWRyUmFuZ2VzKHByb3BzLnZwYywgcHJvcHMuaXB2NENpZHJCbG9jay5jaWRyKTtcblxuICAgIC8vY2hlY2sgd2hldGhlciBWUEMgc3VwcG9ydHMgaXB2NlxuICAgIGlmIChwcm9wcy5pcHY2Q2lkckJsb2NrPy5jaWRyKSB7XG4gICAgICB2YWxpZGF0ZVN1cHBvcnRJcHY2KHByb3BzLnZwYyk7XG4gICAgICBvdmVybGFwSXB2NiA9IHZhbGlkYXRlT3ZlcmxhcHBpbmdDaWRyUmFuZ2VzaXB2Nihwcm9wcy52cGMsIHByb3BzLmlwdjZDaWRyQmxvY2s/LmNpZHIpO1xuICAgIH1cblxuICAgIGlmIChvdmVybGFwIHx8IG92ZXJsYXBJcHY2KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NJRFIgYmxvY2sgc2hvdWxkIG5vdCBvdmVybGFwIHdpdGggZXhpc3Rpbmcgc3VibmV0IGJsb2NrcycpO1xuICAgIH1cblxuICAgIGlmIChwcm9wcy5hc3NpZ25JcHY2QWRkcmVzc09uQ3JlYXRpb24gJiYgIXByb3BzLmlwdjZDaWRyQmxvY2spIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSVB2NiBDSURSIGJsb2NrIGlzIHJlcXVpcmVkIHdoZW4gYXNzaWduaW5nIElQdjYgYWRkcmVzcyBvbiBjcmVhdGlvbicpO1xuICAgIH1cblxuICAgIGNvbnN0IHN1Ym5ldCA9IG5ldyBDZm5TdWJuZXQodGhpcywgJ1N1Ym5ldCcsIHtcbiAgICAgIHZwY0lkOiBwcm9wcy52cGMudnBjSWQsXG4gICAgICBjaWRyQmxvY2s6IGlwdjRDaWRyQmxvY2ssXG4gICAgICBpcHY2Q2lkckJsb2NrOiBpcHY2Q2lkckJsb2NrLFxuICAgICAgYXZhaWxhYmlsaXR5Wm9uZTogcHJvcHMuYXZhaWxhYmlsaXR5Wm9uZSxcbiAgICAgIGFzc2lnbklwdjZBZGRyZXNzT25DcmVhdGlvbjogcHJvcHMuYXNzaWduSXB2NkFkZHJlc3NPbkNyZWF0aW9uID8/IGZhbHNlLFxuICAgIH0pO1xuXG4gICAgdGhpcy5ub2RlLmRlZmF1bHRDaGlsZCA9IHN1Ym5ldDtcbiAgICB0aGlzLmlwdjRDaWRyQmxvY2sgPSBwcm9wcy5pcHY0Q2lkckJsb2NrLmNpZHI7XG4gICAgdGhpcy5pcHY2Q2lkckJsb2NrID0gcHJvcHMuaXB2NkNpZHJCbG9jaz8uY2lkcjtcbiAgICB0aGlzLnN1Ym5ldElkID0gc3VibmV0LnJlZjtcbiAgICB0aGlzLmF2YWlsYWJpbGl0eVpvbmUgPSBwcm9wcy5hdmFpbGFiaWxpdHlab25lO1xuXG4gICAgdGhpcy5fbmV0d29ya0FjbCA9IE5ldHdvcmtBY2wuZnJvbU5ldHdvcmtBY2xJZCh0aGlzLCAnQWNsJywgc3VibmV0LmF0dHJOZXR3b3JrQWNsQXNzb2NpYXRpb25JZCk7XG5cbiAgICBpZiAocHJvcHMucm91dGVUYWJsZSkge1xuICAgICAgdGhpcy5fcm91dGVUYWJsZSA9IHByb3BzLnJvdXRlVGFibGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEFzc2lnbmluZyBhIGRlZmF1bHQgcm91dGUgdGFibGVcbiAgICAgIHRoaXMuX3JvdXRlVGFibGUgPSBuZXcgUm91dGVUYWJsZSh0aGlzLCAnUm91dGVUYWJsZScsIHtcbiAgICAgICAgdnBjOiBwcm9wcy52cGMsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCByb3V0ZUFzc29jID0gbmV3IENmblN1Ym5ldFJvdXRlVGFibGVBc3NvY2lhdGlvbih0aGlzLCAnUm91dGVUYWJsZUFzc29jaWF0aW9uJywge1xuICAgICAgc3VibmV0SWQ6IHRoaXMuc3VibmV0SWQsXG4gICAgICByb3V0ZVRhYmxlSWQ6IHRoaXMucm91dGVUYWJsZS5yb3V0ZVRhYmxlSWQsXG4gICAgfSk7XG5cbiAgICB0aGlzLl9pbnRlcm5ldENvbm5lY3Rpdml0eUVzdGFibGlzaGVkLmFkZChyb3V0ZUFzc29jKTtcblxuICAgIHRoaXMuaW50ZXJuZXRDb25uZWN0aXZpdHlFc3RhYmxpc2hlZCA9IHRoaXMuX2ludGVybmV0Q29ubmVjdGl2aXR5RXN0YWJsaXNoZWQ7XG5cbiAgICB0aGlzLnN1Ym5ldFR5cGUgPSBwcm9wcy5zdWJuZXRUeXBlO1xuICAgIHN0b3JlU3VibmV0VG9WcGNCeVR5cGUocHJvcHMudnBjLCB0aGlzLCBwcm9wcy5zdWJuZXRUeXBlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBc3NvY2lhdGUgYSBOZXR3b3JrIEFDTCB3aXRoIHRoaXMgc3VibmV0XG4gICAqXG4gICAqIEBwYXJhbSBpZCBUaGUgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoaXMgYXNzb2NpYXRpb24uXG4gICAqIEBwYXJhbSBuZXR3b3JrQWNsIFRoZSBOZXR3b3JrIEFDTCB0byBhc3NvY2lhdGUgd2l0aCB0aGlzIHN1Ym5ldC5cbiAgICogVGhpcyBhbGxvd3MgY29udHJvbGxpbmcgaW5ib3VuZCBhbmQgb3V0Ym91bmQgdHJhZmZpYyBmb3IgaW5zdGFuY2VzIGluIHRoaXMgc3VibmV0LlxuICAgKi9cbiAgcHVibGljIGFzc29jaWF0ZU5ldHdvcmtBY2woaWQ6IHN0cmluZywgbmV0d29ya0FjbDogSU5ldHdvcmtBY2wpIHtcbiAgICB0aGlzLl9uZXR3b3JrQWNsID0gbmV0d29ya0FjbDtcblxuICAgIGNvbnN0IHNjb3BlID0gbmV0d29ya0FjbCBpbnN0YW5jZW9mIENvbnN0cnVjdCA/IG5ldHdvcmtBY2wgOiB0aGlzO1xuICAgIGNvbnN0IG90aGVyID0gbmV0d29ya0FjbCBpbnN0YW5jZW9mIENvbnN0cnVjdCA/IHRoaXMgOiBuZXR3b3JrQWNsO1xuICAgIG5ldyBTdWJuZXROZXR3b3JrQWNsQXNzb2NpYXRpb24oc2NvcGUsIGlkICsgTmFtZXMubm9kZVVuaXF1ZUlkKG90aGVyLm5vZGUpLCB7XG4gICAgICBuZXR3b3JrQWNsLFxuICAgICAgc3VibmV0OiB0aGlzLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgUm91dGUgVGFibGUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgc3VibmV0XG4gICAqL1xuICBwdWJsaWMgZ2V0IHJvdXRlVGFibGUoKTogSVJvdXRlVGFibGUge1xuICAgIHJldHVybiB0aGlzLl9yb3V0ZVRhYmxlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIE5ldHdvcmsgQUNMIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHN1Ym5ldC5cbiAgICovXG5cbiAgcHVibGljIGdldCBuZXR3b3JrQWNsKCk6IElOZXR3b3JrQWNsIHtcbiAgICByZXR1cm4gdGhpcy5fbmV0d29ya0FjbDtcbiAgfVxufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgcmVxdWlyZWQgdG8gaW1wb3J0IGEgc3VibmV0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3VibmV0VjJBdHRyaWJ1dGVzIHtcbiAgLyoqXG4gICAqIFRoZSBBdmFpbGFiaWxpdHkgWm9uZSB0aGlzIHN1Ym5ldCBpcyBsb2NhdGVkIGluXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm8gQVogaW5mb3JtYXRpb24sIGNhbm5vdCB1c2UgQVogc2VsZWN0aW9uIGZlYXR1cmVzXG4gICAqL1xuICByZWFkb25seSBhdmFpbGFiaWxpdHlab25lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBJUHY0IENJRFIgYmxvY2sgYXNzb2NpYXRlZCB3aXRoIHRoZSBzdWJuZXRcbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBDSURSIGluZm9ybWF0aW9uLCBjYW5ub3QgdXNlIENJRFIgZmlsdGVyIGZlYXR1cmVzXG4gICAqL1xuICByZWFkb25seSBpcHY0Q2lkckJsb2NrOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBJUHY0IENJRFIgYmxvY2sgYXNzb2NpYXRlZCB3aXRoIHRoZSBzdWJuZXRcbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBDSURSIGluZm9ybWF0aW9uLCBjYW5ub3QgdXNlIENJRFIgZmlsdGVyIGZlYXR1cmVzXG4gICAqL1xuICByZWFkb25seSBpcHY2Q2lkckJsb2NrPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgSUQgb2YgdGhlIHJvdXRlIHRhYmxlIGZvciB0aGlzIHBhcnRpY3VsYXIgc3VibmV0XG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm8gcm91dGUgdGFibGUgaW5mb3JtYXRpb24sIGNhbm5vdCBjcmVhdGUgVlBDIGVuZHBvaW50c1xuICAgKi9cbiAgcmVhZG9ubHkgcm91dGVUYWJsZUlkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgc3VibmV0SWQgZm9yIHRoaXMgcGFydGljdWxhciBzdWJuZXRcbiAgICovXG4gIHJlYWRvbmx5IHN1Ym5ldElkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHN1Ym5ldCAocHVibGljIG9yIHByaXZhdGUpIHRoYXQgdGhpcyBzdWJuZXQgcmVwcmVzZW50cy5cbiAgICovXG4gIHJlYWRvbmx5IHN1Ym5ldFR5cGU6IFN1Ym5ldFR5cGU7XG5cbiAgLyoqXG4gICAqIE5hbWUgb2YgdGhlIGdpdmVuIHN1Ym5ldFxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIHN1Ym5ldCBuYW1lXG4gICAqL1xuICByZWFkb25seSBzdWJuZXROYW1lPzogc3RyaW5nO1xuXG59XG5cbmNvbnN0IHN1Ym5ldFR5cGVNYXAgPSB7XG4gIFtTdWJuZXRUeXBlLlBSSVZBVEVfSVNPTEFURURdOiAodnBjOiBJVnBjVjIsIHN1Ym5ldDogU3VibmV0VjIpID0+IHZwYy5pc29sYXRlZFN1Ym5ldHMucHVzaChzdWJuZXQpLFxuICBbU3VibmV0VHlwZS5QVUJMSUNdOiAodnBjOiBJVnBjVjIsIHN1Ym5ldDogU3VibmV0VjIpID0+IHZwYy5wdWJsaWNTdWJuZXRzLnB1c2goc3VibmV0KSxcbiAgW1N1Ym5ldFR5cGUuUFJJVkFURV9XSVRIX0VHUkVTU106ICh2cGM6IElWcGNWMiwgc3VibmV0OiBTdWJuZXRWMikgPT4gdnBjLnByaXZhdGVTdWJuZXRzLnB1c2goc3VibmV0KSxcbiAgW1N1Ym5ldFR5cGUuSVNPTEFURURdOiAodnBjOiBJVnBjVjIsIHN1Ym5ldDogU3VibmV0VjIpID0+IHZwYy5pc29sYXRlZFN1Ym5ldHMucHVzaChzdWJuZXQpLFxuICBbU3VibmV0VHlwZS5QUklWQVRFXTogKHZwYzogSVZwY1YyLCBzdWJuZXQ6IFN1Ym5ldFYyKSA9PiB2cGMucHJpdmF0ZVN1Ym5ldHMucHVzaChzdWJuZXQpLFxuICBbU3VibmV0VHlwZS5QUklWQVRFX1dJVEhfTkFUXTogKHZwYzogSVZwY1YyLCBzdWJuZXQ6IFN1Ym5ldFYyKSA9PiB2cGMucHJpdmF0ZVN1Ym5ldHMucHVzaChzdWJuZXQpLFxufTtcblxuLyoqXG4gKiBTdG9yZXMgdGhlIHByb3ZpZGVkIHN1Ym5ldCBpbiB0aGUgVlBDJ3MgY29sbGVjdGlvbiBvZiBzdWJuZXRzIGJhc2VkIG9uIHRoZSBzcGVjaWZpZWQgc3VibmV0IHR5cGUuXG4gKlxuICogQHBhcmFtIHZwYyBUaGUgVlBDIGluc3RhbmNlIHRvIHdoaWNoIHRoZSBzdWJuZXQgYmVsb25ncy5cbiAqIEBwYXJhbSBzdWJuZXQgVGhlIHN1Ym5ldCBpbnN0YW5jZSB0byBiZSBzdG9yZWQuXG4gKiBAcGFyYW0gdHlwZSBUaGUgdHlwZSBvZiB0aGUgc3VibmV0IChlLmcuLCBwdWJsaWMsIHByaXZhdGUsIGlzb2xhdGVkKS5cbiAqIEBpbnRlcm5hbFxuICovXG5mdW5jdGlvbiBzdG9yZVN1Ym5ldFRvVnBjQnlUeXBlKHZwYzogSVZwY1YyLCBzdWJuZXQ6IFN1Ym5ldFYyLCB0eXBlOiBTdWJuZXRUeXBlKSB7XG4gIGNvbnN0IGZpbmRGdW5jdGlvblR5cGUgPSBzdWJuZXRUeXBlTWFwW3R5cGVdO1xuICBpZiAoZmluZEZ1bmN0aW9uVHlwZSkge1xuICAgIGZpbmRGdW5jdGlvblR5cGUodnBjLCBzdWJuZXQpO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgc3VibmV0IHR5cGU6ICR7dHlwZX1gKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBOZWVkIHRvIHNldCBleHBsaWNpdCBkZXBlbmRlbmN5IGFzIGR1cmluZyBzdGFjayBkZWxldGlvbixcbiAgICogdGhlIGNpZHIgYmxvY2tzIG1heSBnZXQgZGVsZXRlZCBmaXJzdCBhbmQgd2lsbCBmYWlsIGFzIHRoZSBzdWJuZXRzIGFyZSBzdGlsbCB1c2luZyB0aGUgY2lkciBibG9ja3NcbiAgICovXG4gIGlmICh2cGMuc2Vjb25kYXJ5Q2lkckJsb2NrKSB7XG4gICAgZm9yIChjb25zdCBjaWRyIG9mIHZwYy5zZWNvbmRhcnlDaWRyQmxvY2spIHtcbiAgICAgIHN1Ym5ldC5ub2RlLmFkZERlcGVuZGVuY3koY2lkcik7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogVmFsaWRhdGVzIHdoZXRoZXIgdGhlIHByb3ZpZGVkIFZQQyBzdXBwb3J0cyBJUHY2IGFkZHJlc3Nlcy5cbiAqXG4gKiBAcGFyYW0gdnBjIFRoZSBWUEMgaW5zdGFuY2UgdG8gYmUgdmFsaWRhdGVkLlxuICogQHRocm93cyBFcnJvciBpZiB0aGUgVlBDIGRvZXMgbm90IHN1cHBvcnQgSVB2NiBhZGRyZXNzZXMuXG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBWUEMgc3VwcG9ydHMgSVB2NiBhZGRyZXNzZXMsIGZhbHNlIG90aGVyd2lzZS5cbiAqIEBpbnRlcm5hbFxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZVN1cHBvcnRJcHY2KHZwYzogSVZwY1YyKSB7XG4gIGlmICh2cGMuc2Vjb25kYXJ5Q2lkckJsb2NrKSB7XG4gICAgaWYgKHZwYy5zZWNvbmRhcnlDaWRyQmxvY2suc29tZSgoc2Vjb25kYXJ5QWRkcmVzcykgPT4gc2Vjb25kYXJ5QWRkcmVzcy5hbWF6b25Qcm92aWRlZElwdjZDaWRyQmxvY2sgPT09IHRydWUgfHxcbiAgc2Vjb25kYXJ5QWRkcmVzcy5pcHY2SXBhbVBvb2xJZCAhPSB1bmRlZmluZWQpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdUbyB1c2UgSVB2NiwgdGhlIFZQQyBtdXN0IGVuYWJsZSBJUHY2IHN1cHBvcnQuJyk7XG4gICAgfVxuICB9IGVsc2Uge3JldHVybiBmYWxzZTt9XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIHRoZSBwcm92aWRlZCBDSURSIHJhbmdlIGZhbGxzIHdpdGhpbiB0aGUgSVAgYWRkcmVzcyByYW5nZXMgb2YgdGhlIGdpdmVuIFZQQy5cbiAqXG4gKiBAcGFyYW0gdnBjIFRoZSBWUEMgaW5zdGFuY2UgdG8gY2hlY2sgYWdhaW5zdC5cbiAqIEBwYXJhbSBjaWRyUmFuZ2UgVGhlIENJRFIgcmFuZ2UgdG8gYmUgY2hlY2tlZC5cbiAqIEByZXR1cm5zIFRydWUgaWYgdGhlIENJRFIgcmFuZ2UgZmFsbHMgd2l0aGluIHRoZSBWUEMncyBJUCBhZGRyZXNzIHJhbmdlcywgZmFsc2Ugb3RoZXJ3aXNlLlxuICogQGludGVybmFsXG4gKi9cbmZ1bmN0aW9uIGNoZWNrQ2lkclJhbmdlcyh2cGM6IElWcGNWMiwgY2lkclJhbmdlOiBzdHJpbmcpIHtcbiAgY29uc3QgdnBjQ2lkckJsb2NrID0gW3ZwYy5pcHY0Q2lkckJsb2NrXTtcbiAgY29uc3Qgc3VibmV0Q2lkckJsb2NrID0gbmV3IENpZHJCbG9jayhjaWRyUmFuZ2UpO1xuICBjb25zdCBhbGxDaWRyczogQ2lkckJsb2NrW10gPSBbXTtcblxuICAvLyBTZWNvbmRhcnkgSVAgYWRkcmVzc2VzIGFzc29pY2F0ZWQgdXNpbmcgdXNlciBkZWZpbmVkIElQdjQgcmFuZ2VcbiAgaWYgKHZwYy5zZWNvbmRhcnlDaWRyQmxvY2spIHtcbiAgICBmb3IgKGNvbnN0IGlwQWRkcmVzcyBvZiB2cGMuc2Vjb25kYXJ5Q2lkckJsb2NrKSB7XG4gICAgICBpZiAoaXBBZGRyZXNzLmNpZHJCbG9jaykge1xuICAgICAgICB2cGNDaWRyQmxvY2sucHVzaChpcEFkZHJlc3MuY2lkckJsb2NrKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgY2lkcnMgPSB2cGNDaWRyQmxvY2subWFwKGNpZHIgPT4gbmV3IENpZHJCbG9jayhjaWRyKSk7XG4gICAgYWxsQ2lkcnMucHVzaCguLi5jaWRycyk7XG4gIH1cblxuICAvLyBTZWNvbmRhcnkgSVAgYWRkcmVzc2VzIGFzc29pY2F0ZWQgdXNpbmcgSVBBTSBJUHY0IHJhbmdlXG4gIGlmICh2cGMuaXB2NElwYW1Qcm92aXNpb25lZENpZHJzKSB7XG4gICAgY29uc3QgY2lkcnMgPSB2cGMuaXB2NElwYW1Qcm92aXNpb25lZENpZHJzLm1hcChjaWRyID0+IG5ldyBDaWRyQmxvY2soY2lkcikpO1xuICAgIGFsbENpZHJzLnB1c2goLi4uY2lkcnMpO1xuICB9XG5cbiAgLy8gSWYgbm8gSVB2NCBpcyBhc3NpZ25lZCBhcyBzZWNvbmRhcnkgYWRkcmVzc1xuICBpZiAoYWxsQ2lkcnMubGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdObyBzZWNvbmRhcnkgSVAgYWRkcmVzcyBhdHRhY2hlZCB0byBWUEMnKTtcbiAgfVxuXG4gIHJldHVybiBhbGxDaWRycy5zb21lKGMgPT4gYy5jb250YWluc0NpZHIoc3VibmV0Q2lkckJsb2NrKSk7XG59XG5cbi8qKlxuICogVmFsaWRhdGVzIGlmIHRoZSBwcm92aWRlZCBJUHY0IENJRFIgYmxvY2sgb3ZlcmxhcHMgd2l0aCBleGlzdGluZyBzdWJuZXQgQ0lEUiBibG9ja3Mgd2l0aGluIHRoZSBnaXZlbiBWUEMuXG4gKlxuICogQHBhcmFtIHZwYyBUaGUgVlBDIGluc3RhbmNlIHRvIGNoZWNrIGFnYWluc3QuXG4gKiBAcGFyYW0gaXB2NENpZHJCbG9jayBUaGUgSVB2NCBDSURSIGJsb2NrIHRvIGJlIHZhbGlkYXRlZC5cbiAqIEByZXR1cm5zIFRydWUgaWYgdGhlIElQdjQgQ0lEUiBibG9jayBvdmVybGFwcyB3aXRoIGV4aXN0aW5nIHN1Ym5ldCBDSURSIGJsb2NrcywgZmFsc2Ugb3RoZXJ3aXNlLlxuICogQGludGVybmFsXG4gKi9cblxuZnVuY3Rpb24gdmFsaWRhdGVPdmVybGFwcGluZ0NpZHJSYW5nZXModnBjOiBJVnBjVjIsIGlwdjRDaWRyQmxvY2s6IHN0cmluZyk6IGJvb2xlYW4ge1xuXG4gIGxldCBhbGxTdWJuZXRzOiBJU3VibmV0VjJbXTtcbiAgdHJ5IHtcbiAgICBhbGxTdWJuZXRzID0gdnBjLnNlbGVjdFN1Ym5ldHMoKS5zdWJuZXRzO1xuICB9IGNhdGNoIChlKSB7XG4gICAgJ05vIHN1Ym5ldHMgaW4gVlBDJztcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBpcE1hcDogW3N0cmluZywgc3RyaW5nXVtdID0gbmV3IEFycmF5KCk7XG5cbiAgY29uc3QgaW5wdXRSYW5nZSA9IG5ldyBDaWRyQmxvY2soaXB2NENpZHJCbG9jayk7XG5cbiAgY29uc3QgaW5wdXRJcE1hcDogW3N0cmluZywgc3RyaW5nXSA9IFtpbnB1dFJhbmdlLm1pbklwKCksIGlucHV0UmFuZ2UubWF4SXAoKV07XG5cbiAgZm9yIChjb25zdCBzdWJuZXQgb2YgYWxsU3VibmV0cykge1xuICAgIGNvbnN0IGNpZHJCbG9jayA9IG5ldyBDaWRyQmxvY2soc3VibmV0LmlwdjRDaWRyQmxvY2spO1xuICAgIGlwTWFwLnB1c2goW2NpZHJCbG9jay5taW5JcCgpLCBjaWRyQmxvY2subWF4SXAoKV0pO1xuICB9XG5cbiAgZm9yIChjb25zdCByYW5nZSBvZiBpcE1hcCkge1xuICAgIGlmIChpbnB1dFJhbmdlLnJhbmdlc092ZXJsYXAocmFuZ2UsIGlucHV0SXBNYXApKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogVmFsaWRhdGVzIGlmIHRoZSBwcm92aWRlZCBJUHY2IENJRFIgYmxvY2sgb3ZlcmxhcHMgd2l0aCBleGlzdGluZyBzdWJuZXQgQ0lEUiBibG9ja3Mgd2l0aGluIHRoZSBnaXZlbiBWUEMuXG4gKlxuICogQHBhcmFtIHZwYyBUaGUgVlBDIGluc3RhbmNlIHRvIGNoZWNrIGFnYWluc3QuXG4gKiBAcGFyYW0gaXB2NkNpZHJCbG9jayBUaGUgSVB2NiBDSURSIGJsb2NrIHRvIGJlIHZhbGlkYXRlZC5cbiAqIEByZXR1cm5zIFRydWUgaWYgdGhlIElQdjYgQ0lEUiBibG9jayBvdmVybGFwcyB3aXRoIGV4aXN0aW5nIHN1Ym5ldCBDSURSIGJsb2NrcywgZmFsc2Ugb3RoZXJ3aXNlLlxuICogQHRocm93cyBFcnJvciBpZiBubyBzdWJuZXRzIGFyZSBmb3VuZCBpbiB0aGUgVlBDLlxuICogQGludGVybmFsXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlT3ZlcmxhcHBpbmdDaWRyUmFuZ2VzaXB2Nih2cGM6IElWcGNWMiwgaXB2NkNpZHJCbG9jazogc3RyaW5nKTogYm9vbGVhbiB7XG5cbiAgbGV0IGFsbFN1Ym5ldHM6IElTdWJuZXRWMltdO1xuICB0cnkge1xuICAgIGFsbFN1Ym5ldHMgPSB2cGMuc2VsZWN0U3VibmV0cygpLnN1Ym5ldHM7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAnTm8gc3VibmV0cyBpbiBWUEMnO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IGlwdjZNYXA6IHN0cmluZ1tdPSBbXTtcblxuICBjb25zdCBpbnB1dFJhbmdlID0gbmV3IENpZHJCbG9ja0lwdjYoaXB2NkNpZHJCbG9jayk7XG5cbiAgbGV0IHJlc3VsdCA6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBmb3IgKGNvbnN0IHN1Ym5ldCBvZiBhbGxTdWJuZXRzKSB7XG4gICAgaWYgKHN1Ym5ldC5pcHY2Q2lkckJsb2NrKSB7XG4gICAgICBjb25zdCBjaWRyQmxvY2sgPSBuZXcgQ2lkckJsb2NrSXB2NihzdWJuZXQuaXB2NkNpZHJCbG9jayk7XG4gICAgICBpcHY2TWFwLnB1c2goY2lkckJsb2NrLmNpZHIpO1xuICAgIH1cbiAgfVxuXG4gIGZvciAoY29uc3QgcmFuZ2Ugb2YgaXB2Nk1hcCkge1xuICAgIGlmIChpbnB1dFJhbmdlLnJhbmdlc092ZXJsYXAocmFuZ2UsIGlucHV0UmFuZ2UuY2lkcikpIHtcbiAgICAgIHJlc3VsdCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cbiJdfQ==
|
package/lib/util.js
CHANGED
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/*eslint no-bitwise: ["error", { "allow": ["~", "|", "<<", "&"] }] */
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
-
exports.CidrBlockIpv6 = exports.CidrBlock = exports.NetworkUtils =
|
|
4
|
+
exports.CidrBlockIpv6 = exports.CidrBlock = exports.NetworkUtils = void 0;
|
|
5
|
+
exports.subnetGroupNameFromConstructId = subnetGroupNameFromConstructId;
|
|
6
|
+
exports.subnetId = subnetId;
|
|
7
|
+
exports.allRouteTableIds = allRouteTableIds;
|
|
8
|
+
exports.flatten = flatten;
|
|
5
9
|
/**
|
|
6
10
|
* Return a subnet name from its construct ID
|
|
7
11
|
*
|
|
@@ -10,14 +14,12 @@ exports.CidrBlockIpv6 = exports.CidrBlock = exports.NetworkUtils = exports.flatt
|
|
|
10
14
|
function subnetGroupNameFromConstructId(subnet) {
|
|
11
15
|
return subnet.node.id.replace(/Subnet\d+$/, '');
|
|
12
16
|
}
|
|
13
|
-
exports.subnetGroupNameFromConstructId = subnetGroupNameFromConstructId;
|
|
14
17
|
/**
|
|
15
18
|
* Make the subnet construct ID from a name and number
|
|
16
19
|
*/
|
|
17
20
|
function subnetId(name, i) {
|
|
18
21
|
return `${name}Subnet${i + 1}`;
|
|
19
22
|
}
|
|
20
|
-
exports.subnetId = subnetId;
|
|
21
23
|
/**
|
|
22
24
|
* Return the union of table IDs from all selected subnets
|
|
23
25
|
*/
|
|
@@ -30,11 +32,9 @@ function allRouteTableIds(subnets) {
|
|
|
30
32
|
}
|
|
31
33
|
return Array.from(ret);
|
|
32
34
|
}
|
|
33
|
-
exports.allRouteTableIds = allRouteTableIds;
|
|
34
35
|
function flatten(xs) {
|
|
35
36
|
return Array.prototype.concat.apply([], xs);
|
|
36
37
|
}
|
|
37
|
-
exports.flatten = flatten;
|
|
38
38
|
/**
|
|
39
39
|
* NetworkUtils contains helpers to work with network constructs (subnets/ranges)
|
|
40
40
|
*/
|
|
@@ -307,4 +307,4 @@ class CidrBlockIpv6 {
|
|
|
307
307
|
}
|
|
308
308
|
}
|
|
309
309
|
exports.CidrBlockIpv6 = CidrBlockIpv6;
|
|
310
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLHFFQUFxRTs7O0FBSXJFOzs7O0dBSUc7QUFDSCxTQUFnQiw4QkFBOEIsQ0FBQyxNQUFlO0lBQzVELE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNsRCxDQUFDO0FBRkQsd0VBRUM7QUFFRDs7R0FFRztBQUNILFNBQWdCLFFBQVEsQ0FBQyxJQUFZLEVBQUUsQ0FBUztJQUM5QyxPQUFPLEdBQUcsSUFBSSxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztBQUNqQyxDQUFDO0FBRkQsNEJBRUM7QUFFRDs7R0FFRztBQUNILFNBQWdCLGdCQUFnQixDQUFDLE9BQWtCO0lBQ2pELE1BQU0sR0FBRyxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7SUFDOUIsS0FBSyxNQUFNLE1BQU0sSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUM3QixJQUFJLE1BQU0sQ0FBQyxVQUFVLElBQUksTUFBTSxDQUFDLFVBQVUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN4RCxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDMUMsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDekIsQ0FBQztBQVJELDRDQVFDO0FBRUQsU0FBZ0IsT0FBTyxDQUFJLEVBQVM7SUFDbEMsT0FBTyxLQUFLLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQzlDLENBQUM7QUFGRCwwQkFFQztBQUVEOztHQUVHO0FBQ0gsTUFBYSxZQUFZO0lBRXZCOzs7Ozs7Ozs7T0FTRztJQUNJLE1BQU0sQ0FBQyxPQUFPLENBQUMsU0FB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TSxDQUFDLENBQUMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDM0UsTUFBTSxhQUFhLEdBQUcsVUFBVSxHQUFHLENBQUMsSUFBSSxDQUFDO1FBQ3pDLE1BQU0sS0FBSyxHQUFHLGFBQWEsQ0FBQztRQUM1QixNQUFNLEdBQUcsR0FBRyxhQUFhLEdBQUcsSUFBSSxDQUFDO1FBRWpDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7S0FDckI7SUFFRDs7O09BR0c7SUFDSyxZQUFZLENBQUMsV0FBbUI7UUFDdEMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ2xELElBQUksVUFBVSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMzQixLQUFLLE1BQU0sS0FBSyxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQzNCLCtCQUErQjtZQUMvQixVQUFVLEdBQUcsQ0FBQyxVQUFVLElBQUksTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO1FBQ2xELENBQUM7UUFDRCxPQUFPLFVBQVUsQ0FBQztLQUNuQjtDQUNGO0FBN0ZELHNDQTZGQyIsInNvdXJjZXNDb250ZW50IjpbIi8qZXNsaW50IG5vLWJpdHdpc2U6IFtcImVycm9yXCIsIHsgXCJhbGxvd1wiOiBbXCJ+XCIsIFwifFwiLCBcIjw8XCIsIFwiJlwiXSB9XSAqL1xuXG5pbXBvcnQgeyBJU3VibmV0IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWVjMic7XG5cbi8qKlxuICogUmV0dXJuIGEgc3VibmV0IG5hbWUgZnJvbSBpdHMgY29uc3RydWN0IElEXG4gKlxuICogQWxsIHN1Ym5ldCBuYW1lcyBsb29rIGxpa2UgTkFNRSA8PiBcIlN1Ym5ldFwiIDw+IElOREVYXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdWJuZXRHcm91cE5hbWVGcm9tQ29uc3RydWN0SWQoc3VibmV0OiBJU3VibmV0KSB7XG4gIHJldHVybiBzdWJuZXQubm9kZS5pZC5yZXBsYWNlKC9TdWJuZXRcXGQrJC8sICcnKTtcbn1cblxuLyoqXG4gKiBNYWtlIHRoZSBzdWJuZXQgY29uc3RydWN0IElEIGZyb20gYSBuYW1lIGFuZCBudW1iZXJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN1Ym5ldElkKG5hbWU6IHN0cmluZywgaTogbnVtYmVyKSB7XG4gIHJldHVybiBgJHtuYW1lfVN1Ym5ldCR7aSArIDF9YDtcbn1cblxuLyoqXG4gKiBSZXR1cm4gdGhlIHVuaW9uIG9mIHRhYmxlIElEcyBmcm9tIGFsbCBzZWxlY3RlZCBzdWJuZXRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhbGxSb3V0ZVRhYmxlSWRzKHN1Ym5ldHM6IElTdWJuZXRbXSk6IHN0cmluZ1tdIHtcbiAgY29uc3QgcmV0ID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIGZvciAoY29uc3Qgc3VibmV0IG9mIHN1Ym5ldHMpIHtcbiAgICBpZiAoc3VibmV0LnJvdXRlVGFibGUgJiYgc3VibmV0LnJvdXRlVGFibGUucm91dGVUYWJsZUlkKSB7XG4gICAgICByZXQuYWRkKHN1Ym5ldC5yb3V0ZVRhYmxlLnJvdXRlVGFibGVJZCk7XG4gICAgfVxuICB9XG4gIHJldHVybiBBcnJheS5mcm9tKHJldCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmbGF0dGVuPEE+KHhzOiBBW11bXSk6IEFbXSB7XG4gIHJldHVybiBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLCB4cyk7XG59XG5cbi8qKlxuICogTmV0d29ya1V0aWxzIGNvbnRhaW5zIGhlbHBlcnMgdG8gd29yayB3aXRoIG5ldHdvcmsgY29uc3RydWN0cyAoc3VibmV0cy9yYW5nZXMpXG4gKi9cbmV4cG9ydCBjbGFzcyBOZXR3b3JrVXRpbHMge1xuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgYW4gSVB2NCBhZGRyZXNzIHN0cmluZy5cbiAgICpcbiAgICogQHBhcmFtIGlwQWRkcmVzcyBUaGUgSVB2NCBhZGRyZXNzIHN0cmluZyB0byBiZSB2YWxpZGF0ZWQuXG4gICAqIEByZXR1cm5zIFRydWUgaWYgdGhlIHN0cmluZyBpcyBhIHZhbGlkIElQdjQgYWRkcmVzcywgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgKiBWYWxpZGF0ZXMgYW4gSVB2NCBzdHJpbmdcbiAgICpcbiAgICogcmV0dXJucyB0cnVlIG9mIHRoZSBzdHJpbmcgY29udGFpbnMgNCBudW1iZXJzIGJldHdlZW4gMC0yNTUgZGVsaW1pdGVkIGJ5XG4gICAqIGEgYC5gIGNoYXJhY3RlclxuICAgKi9cbiAgcHVibGljIHN0YXRpYyB2YWxpZElwKGlwQWRkcmVzczogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3Qgb2N0ZXRzID0gaXBBZGRyZXNzLnNwbGl0KCcuJyk7XG4gICAgaWYgKG9jdGV0cy5sZW5ndGggIT09IDQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIG9jdGV0cy5tYXAoKG9jdGV0OiBzdHJpbmcpID0+IHBhcnNlSW50KG9jdGV0LCAxMCkpLlxuICAgICAgZXZlcnkoKG9jdGV0OiBudW1iZXIpID0+IG9jdGV0ID49IDAgJiYgb2N0ZXQgPD0gMjU1KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0cyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhbiBJUHY0IGFkZHJlc3MgdG8gaXRzIGNvcnJlc3BvbmRpbmcgbnVtZXJpY2FsIHZhbHVlLlxuICAgKlxuICAgKiBVc2VzIHRoZSBmb3JtdWxhOlxuICAgKiAoZmlyc3Qgb2N0ZXQgKiAyNTbCsykgKyAoc2Vjb25kIG9jdGV0ICogMjU2wrIpICsgKHRoaXJkIG9jdGV0ICogMjU2KSArXG4gICAqIChmb3VydGggb2N0ZXQpXG4gICAqXG4gICAqIEBwYXJhbSAgaXBBZGRyZXNzIHRoZSBJUCBhZGRyZXNzIChlLmcuIDE3NC42Ni4xNzMuMTY4KVxuICAgKiBAcmV0dXJucyB0aGUgaW50ZWdlciB2YWx1ZSBvZiB0aGUgSVAgYWRkcmVzcyAoZS5nIDI5MjM2MDU0MTYpXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGlwVG9OdW0oaXBBZGRyZXNzOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIGlmICghdGhpcy52YWxpZElwKGlwQWRkcmVzcykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgJHtpcEFkZHJlc3N9IGlzIG5vdCB2YWxpZGApO1xuICAgIH1cblxuICAgIHJldHVybiBpcEFkZHJlc3NcbiAgICAgIC5zcGxpdCgnLicpXG4gICAgICAucmVkdWNlKFxuICAgICAgICAocDogbnVtYmVyLCBjOiBzdHJpbmcsIGk6IG51bWJlcikgPT4gcCArIHBhcnNlSW50KGMsIDEwKSAqIDI1NiAqKiAoMyAtIGkpLFxuICAgICAgICAwLFxuICAgICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUYWtlcyBudW1iZXIgYW5kIGNvbnZlcnRzIGl0IHRvIElQdjQgYWRkcmVzcyBzdHJpbmdcbiAgICpcbiAgICogVGFrZXMgYSBudW1iZXIgKGUuZyAyOTIzNjA1NDE2KSBhbmQgY29udmVydHMgaXQgdG8gYW4gSVB2NCBhZGRyZXNzIHN0cmluZ1xuICAgKiBjdXJyZW50bHkgb25seSBzdXBwb3J0cyBJUHY0XG4gICAqXG4gICAqIEBwYXJhbSBpcE51bSBpbnRlZ2VyIHZhbHVlIG9mIHRoZSBJUCBhZGRyZXNzIChlLmcgMjkyMzYwNTQxNilcbiAgICogQHJldHVybnMgSVB2NCBhZGRyZXNzIChlLmcuIDE3NC42Ni4xNzMuMTY4KVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBudW1Ub0lwKGlwTnVtOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIC8vIHRoaXMgYWxsIGJlY2F1c2UgYml0d2lzZSBtYXRoIGlzIHNpZ25lZFxuICAgIGxldCByZW1haW5pbmcgPSBpcE51bTtcbiAgICBjb25zdCBhZGRyZXNzID0gbmV3IEFycmF5PG51bWJlcj4oKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDQ7IGkrKykge1xuICAgICAgaWYgKHJlbWFpbmluZyAhPT0gMCkge1xuICAgICAgICBhZGRyZXNzLnB1c2goTWF0aC5mbG9vcihyZW1haW5pbmcgLyAyNTYgKiogKDMgLSBpKSkpO1xuICAgICAgICByZW1haW5pbmcgPSByZW1haW5pbmcgJSAyNTYgKiogKDMgLSBpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFkZHJlc3MucHVzaCgwKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgaXBBZGRyZXNzOiBzdHJpbmcgPSBhZGRyZXNzLmpvaW4oJy4nKTtcbiAgICBpZiAoICF0aGlzLnZhbGlkSXAoaXBBZGRyZXNzKSApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgJHtpcEFkZHJlc3N9IGlzIG5vdCBhIHZhbGlkIElQIEFkZHJlc3NgKTtcbiAgICB9XG4gICAgcmV0dXJuIGlwQWRkcmVzcztcbiAgfVxufVxuXG4vKipcbiAqIEV4cG9ydGVkIGNsYXNzIGZyb20gVlBDIHRvIHN1cHBvcnQgc3VibmV0IGZpbHRlcmluZ1xuICogYW5kIENJRFIgdmFsaWRhdGlvblxuICovXG5leHBvcnQgY2xhc3MgQ2lkckJsb2NrIHtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlcyB0aGUgbmV0bWFzayBmb3IgYSBnaXZlbiBDSURSIG1hc2tcbiAgICpcbiAgICogVGhlIG5ldG1hc2sgaXMgYSAzMi1iaXQgYmluYXJ5IHZhbHVlIHVzZWQgdG8gc2VwYXJhdGUgdGhlIG5ldHdvcmsgcG9ydGlvbiBmcm9tIHRoZSBob3N0IHBvcnRpb24gb2YgYW4gSVB2NCBhZGRyZXNzLlxuICAgKiBJdCBpcyBjYWxjdWxhdGVkIGJhc2VkIG9uIHRoZSBDSURSIHByZWZpeCBsZW5ndGggKHRoZSBudW1iZXIgb2YgYml0cyB1c2VkIHRvIHJlcHJlc2VudCB0aGUgbmV0d29yayBwb3J0aW9uKS5cbiAgICpcbiAgICogRm9yIGV4YW1wbGU6XG4gICAqIENpZHJCbG9jay5jYWxjdWxhdGVOZXRtYXNrKDI0KSByZXR1cm5zICcyNTUuMjU1LjI1NS4wJ1xuICAgKlxuICAgKiBAcGFyYW0gbWFzayBUaGUgQ0lEUiBwcmVmaXggbGVuZ3RoIChiZXR3ZWVuIDAgYW5kIDMyKSBmb3Igd2hpY2ggdG8gY2FsY3VsYXRlIHRoZSBuZXRtYXNrLlxuICAgIC8vIENhbGN1bGF0ZSB0aGUgbmV0bWFzayBieSBwZXJmb3JtaW5nIGEgYml0d2lzZSBOT1Qgb24gdGhlIHJlc3VsdCBvZiAoMl4zMiAtIDJeKDMyIC0gbWFzaykpXG4gICAqIEByZXR1cm5zIFRoZSBuZXRtYXNrIHN0cmluZyBpbiBJUHY0IGFkZHJlc3MgZm9ybWF0LlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBjYWxjdWxhdGVOZXRtYXNrKG1hc2s6IG51bWJlcik6IHN0cmluZyB7XG4gICAgcmV0dXJuIE5ldHdvcmtVdGlscy5udW1Ub0lwKDIgKiogMzIgLSAyICoqICgzMiAtIG1hc2spKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGVzIHRoZSBudW1iZXIgSVAgYWRkcmVzc2VzIGluIGEgQ0lEUiBNYXNrXG4gICAqXG4gICAqIEZvciBleGFtcGxlOlxuICAgKiBDaWRyQmxvY2suY2FsY3VsYXRlTmV0c2l6ZSgxNikgcmV0dXJucyA2NTUzNlxuICAgKlxuICAgKiBAcGFyYW0gbWFzayBUaGUgQ0lEUiBwcmVmaXggbGVuZ3RoIChiZXR3ZWVuIDAgYW5kIDMyKSBmb3Igd2hpY2ggdG8gY2FsY3VsYXRlIHRoZSBuZXR3b3JrIHNpemUuXG4gICAqIENpZHJCbG9jay5jYWxjdWxhdGVOZXRzaXplKDI0KSByZXR1cm5zIDI1NlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBjYWxjdWxhdGVOZXRzaXplKG1hc2s6IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIDIgKiogKDMyIC0gbWFzayk7XG4gIH1cblxuICAvKipcbiAgICogSVAgYWRkcmVzcyBpbiB0aGUgQ0lEUiBibG9jay5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBjaWRyOiBzdHJpbmc7XG5cbiAgLypcbiAgICogVGhlIENJRFIgbWFzayBlLmcuIGZvciBDSURSICcxMC4wLjAuMC8yMScgcmV0dXJucyAyMVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IG1hc2s6IG51bWJlcjtcblxuICAvKlxuICAgKiBUaGUgdG90YWwgbnVtYmVyIG9mIElQIGFkZHJlc3NlcyBpbiB0aGUgQ0lEUlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IG5ldHdvcmtTaXplOiBudW1iZXI7XG5cbiAgLypcbiAgICogVGhlIG5ldHdvcmsgYWRkcmVzcyBwcm92aWRlZCBpbiBDSURSIGNyZWF0aW9uIG9mZnNldCBieSB0aGUgTmV0c2l6ZSAtMVxuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBuZXR3b3JrQWRkcmVzczogbnVtYmVyO1xuXG4gIC8qXG4gICAqIFBhcnNlcyBlaXRoZXIgQ0lEUiBub3RhdGlvbiBTdHJpbmcgb3IgdHdvIG51bWJlcnMgcmVwcmVzZW50aW5nIHRoZSBJUFxuICAgKiBzcGFjZVxuICAgKlxuICAgKiBjaWRyIGV4cGVjdHMgYSBzdHJpbmcgJzEwLjAuMC4wLzE2J1xuICAgKiBpcEFkZHJlc3MgZXhwZWN0cyBhIG51bWJlclxuICAgKiBtYXNrIGV4cGVjdHMgYSBudW1iZXJcbiAgICpcbiAgICogSWYgdGhlIGdpdmVuIGBjaWRyYCBvciBgaXBBZGRyZXNzYCBpcyBub3QgdGhlIGJlZ2lubmluZyBvZiB0aGUgYmxvY2ssXG4gICAqIHRoZW4gdGhlIG5leHQgYXZhaWxhYmxlIGJsb2NrIHdpbGwgYmUgcmV0dXJuZWQuIEZvciBleGFtcGxlLCBpZlxuICAgKiBgMTAuMC4zLjEvMjhgIGlzIGdpdmVuIHRoZSByZXR1cm5lZCBibG9jayB3aWxsIHJlcHJlc2VudCBgMTAuMC4zLjE2LzI4YC5cbiAgICovXG4gIGNvbnN0cnVjdG9yKGNpZHI6IHN0cmluZylcbiAgY29uc3RydWN0b3IoaXBBZGRyZXNzOiBudW1iZXIsIG1hc2s6IG51bWJlcilcbiAgY29uc3RydWN0b3IoaXBBZGRyZXNzT3JDaWRyOiBzdHJpbmcgfCBudW1iZXIsIG1hc2s/OiBudW1iZXIpIHtcbiAgICBpZiAodHlwZW9mIGlwQWRkcmVzc09yQ2lkciA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRoaXMubWFzayA9IHBhcnNlSW50KGlwQWRkcmVzc09yQ2lkci5zcGxpdCgnLycpWzFdLCAxMCk7XG4gICAgICB0aGlzLm5ldHdvcmtBZGRyZXNzID0gTmV0d29ya1V0aWxzLmlwVG9OdW0oaXBBZGRyZXNzT3JDaWRyLnNwbGl0KCcvJylbMF0pICtcbiAgICAgICAgQ2lkckJsb2NrLmNhbGN1bGF0ZU5ldHNpemUodGhpcy5tYXNrKSAtIDE7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0eXBlb2YgbWFzayA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgdGhpcy5tYXNrID0gbWFzaztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHRoaXMgc2hvdWxkIGJlIGltcG9zc2libGVcbiAgICAgICAgdGhpcy5tYXNrID0gMTY7XG4gICAgICB9XG4gICAgICB0aGlzLm5ldHdvcmtBZGRyZXNzID0gaXBBZGRyZXNzT3JDaWRyICsgQ2lkckJsb2NrLmNhbGN1bGF0ZU5ldHNpemUodGhpcy5tYXNrKSAtIDE7XG4gICAgICB0aGlzLm5ldHdvcmtTaXplID0gMiAqKiAoMzIgLSB0aGlzLm1hc2spO1xuICAgIH1cbiAgICB0aGlzLm5ldHdvcmtTaXplID0gMiAqKiAoMzIgLSB0aGlzLm1hc2spO1xuICAgIHRoaXMuY2lkciA9IGAke3RoaXMubWluSXAoKX0vJHt0aGlzLm1hc2t9YDtcbiAgfVxuXG4gIC8qXG4gICAqIFRoZSBtYXhpbXVtIElQIGluIHRoZSBDSURSIEJsb2NrIGUuZy4gJzEwLjAuOC4yNTUnXG4gICAqL1xuICBwdWJsaWMgbWF4SXAoKTogc3RyaW5nIHtcbiAgICAvLyBtaW4gKyAoMl4oMzItbWFzaykpIC0gMSBbemVybyBuZWVkcyB0byBjb3VudF1cbiAgICByZXR1cm4gTmV0d29ya1V0aWxzLm51bVRvSXAodGhpcy5tYXhBZGRyZXNzKCkpO1xuICB9XG5cbiAgLypcbiAgICogQ2hlY2tzIGlmIHRoaXMgQ0lEUiBibG9jayBmdWxseSBjb250YWlucyB0aGUgcHJvdmlkZWQgQ0lEUiBibG9jay5cbiAgICpcbiAgICogQHBhcmFtIG90aGVyIFRoZSBDSURSIGJsb2NrIHRvIGNoZWNrIGZvciBjb250YWlubWVudC5cbiAgICogQHJldHVybnMgVHJ1ZSBpZiB0aGlzIENJRFIgYmxvY2sgZnVsbHkgY29udGFpbnMgdGhlIHByb3ZpZGVkIENJRFIgYmxvY2ssIGZhbHNlIG90aGVyd2lzZS5cbiAgICpcbiAgICogVGhlIG1pbmltdW0gSVAgaW4gdGhlIENJRFIgQmxvY2sgZS5nLiAnMTAuMC4wLjAnXG4gICAqL1xuICBwdWJsaWMgbWluSXAoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gTmV0d29ya1V0aWxzLm51bVRvSXAodGhpcy5taW5BZGRyZXNzKCkpO1xuICB9XG5cbiAgLypcbiAgICogUmV0dXJucyB0aGUgbnVtYmVyIHJlcHJlc2VudGF0aW9uIGZvciB0aGUgbWluaW11bSBJUHY0IGFkZHJlc3NcbiAgICovXG4gIHB1YmxpYyBtaW5BZGRyZXNzKCk6IG51bWJlciB7XG4gICAgY29uc3QgZGl2ID0gdGhpcy5uZXR3b3JrQWRkcmVzcyAlIHRoaXMubmV0d29ya1NpemU7XG4gICAgcmV0dXJuIHRoaXMubmV0d29ya0FkZHJlc3MgLSBkaXY7XG4gIH1cblxuICAvKlxuICAgKiBSZXR1cm5zIHRoZSBudW1iZXIgcmVwcmVzZW50YXRpb24gZm9yIHRoZSBtYXhpbXVtIElQdjQgYWRkcmVzc1xuICAgKi9cbiAgcHVibGljIG1heEFkZHJlc3MoKTogbnVtYmVyIHtcbiAgICAvKipcbiAgICAgKiBUaGUgbWF4aW11bSBJUCBhZGRyZXNzIGluIHRoZSBDSURSIGJsb2NrIGlzIGNhbGN1bGF0ZWQgYXMgdGhlIG1pbmltdW0gYWRkcmVzcyArICgyXigzMi1tYXNrKSkgLSAxLlxuICAgICAqIFRoaXMgaXMgYmVjYXVzZSB0aGUgbWluaW11bSBhZGRyZXNzIHJlcHJlc2VudHMgdGhlIG5ldHdvcmsgYWRkcmVzcywgYW5kIHRoZSBtYXhpbXVtIGFkZHJlc3MgaXMgdGhlIGJyb2FkY2FzdCBhZGRyZXNzLlxuICAgICAqL1xuICAgIC8vIG1pbiArICgyXigzMi1tYXNrKSkgLSAxIFt6ZXJvIG5lZWRzIHRvIGNvdW50XVxuICAgIHJldHVybiB0aGlzLm1pbkFkZHJlc3MoKSArIHRoaXMubmV0d29ya1NpemUgLSAxO1xuICB9XG5cbiAgLypcbiAgICogUmV0dXJucyB0aGUgbmV4dCBjb25zZWN1dGl2ZSBDSURSIGJsb2NrIG9mIHRoZSBzYW1lIG1hc2sgc2l6ZSBmb2xsb3dpbmcgdGhpcyBDSURSIGJsb2NrLlxuICAgKlxuICAgKiBGb3IgZXhhbXBsZSwgaWYgdGhpcyBDSURSIGJsb2NrIGlzICcxMC4wLjAuMC8yNCcsIHRoZSBuZXh0IGJsb2NrIHdvdWxkIGJlICcxMC4wLjEuMC8yNCcuXG4gICAqXG4gICAqIFJldHVybnMgdGhlIG5leHQgQ0lEUiBCbG9jayBvZiB0aGUgc2FtZSBtYXNrIHNpemVcbiAgICovXG4gIHB1YmxpYyBuZXh0QmxvY2soKTogQ2lkckJsb2NrIHtcbiAgICByZXR1cm4gbmV3IENpZHJCbG9jayh0aGlzLm1heEFkZHJlc3MoKSArIDEsIHRoaXMubWFzayk7XG4gIH1cblxuICAvKlxuICAgKiBSZXR1cm5zIHRydWUgaWYgdGhpcyBDaWRyQmxvY2sgZnVsbHkgY29udGFpbnMgdGhlIHByb3ZpZGVkIENpZHJCbG9ja1xuICAgKi9cbiAgcHVibGljIGNvbnRhaW5zQ2lkcihvdGhlcjogQ2lkckJsb2NrKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICh0aGlzLm1heEFkZHJlc3MoKSA+PSBvdGhlci5tYXhBZGRyZXNzKCkpICYmXG4gICAgICAodGhpcy5taW5BZGRyZXNzKCkgPD0gb3RoZXIubWluQWRkcmVzcygpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdHdvIElQIGFkZHJlc3MgcmFuZ2VzIG92ZXJsYXAuXG4gICAqXG4gICAqIEBwYXJhbSByYW5nZTEgVGhlIGZpcnN0IElQIGFkZHJlc3MgcmFuZ2UgcmVwcmVzZW50ZWQgYXMgYW4gYXJyYXkgW3N0YXJ0LCBlbmRdLlxuICAgKiBAcGFyYW0gcmFuZ2UyIFRoZSBzZWNvbmQgSVAgYWRkcmVzcyByYW5nZSByZXByZXNlbnRlZCBhcyBhbiBhcnJheSBbc3RhcnQsIGVuZF0uXG4gICAqIEByZXR1cm5zIFRydWUgaWYgdGhlIHR3byBJUCBhZGRyZXNzIHJhbmdlcyBvdmVybGFwLCBmYWxzZSBvdGhlcndpc2UuXG4gICAqXG4gICAqIE5vdGU6IFRoaXMgbWV0aG9kIGFzc3VtZXMgdGhhdCB0aGUgc3RhcnQgYW5kIGVuZCBhZGRyZXNzZXMgYXJlIHZhbGlkIElQdjQgYWRkcmVzc2VzLlxuICAgKi9cbiAgcHVibGljIHJhbmdlc092ZXJsYXAocmFuZ2UxOiBbc3RyaW5nLCBzdHJpbmddLCByYW5nZTI6IFtzdHJpbmcsIHN0cmluZ10pOiBib29sZWFuIHtcbiAgICBjb25zdCBbc3RhcnQxLCBlbmQxXSA9IHJhbmdlMTtcbiAgICBjb25zdCBbc3RhcnQyLCBlbmQyXSA9IHJhbmdlMjtcblxuICAgIC8vIENoZWNrIGlmIHJhbmdlcyBvdmVybGFwXG4gICAgcmV0dXJuIHN0YXJ0MSA8PSBlbmQyICYmIHN0YXJ0MiA8PSBlbmQxO1xuICB9XG5cbn1cblxuLyoqXG4gKiBDbGFzcyB3aXRoIGhlbHBlciBmdW5jdGlvbnMgdG8gc3VwcG9ydFxuICogU3VibmV0IElwdjYgQWRkcmVzcyBWYWxpZGF0aW9uXG4gKlxuICogVGhpcyBjbGFzcyBwcm92aWRlcyBtZXRob2RzIGZvciB3b3JraW5nIHdpdGggSVB2NiBDSURSIGJsb2NrcywgaW5jbHVkaW5nIGNhbGN1bGF0aW5nIHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtXG4gKiBJUCBhZGRyZXNzZXMgaW4gYSBDSURSIGJsb2NrLCBhbmQgY2hlY2tpbmcgaWYgdHdvIENJRFIgYmxvY2tzIG92ZXJsYXAuXG4gKi9cbmV4cG9ydCBjbGFzcyBDaWRyQmxvY2tJcHY2IHtcblxuICAvKipcbiAgICogSXB2NiBDSURSIHJhbmdlXG4gICAqL1xuICBwdWJsaWMgY2lkcjogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIENJRFIgcHJlZml4IGxlbmd0aCAobnVtYmVyIG9mIGJpdHMgdXNlZCBmb3IgdGhlIG5ldHdvcmsgcG9ydGlvbiBvZiB0aGUgYWRkcmVzcykuXG4gICAqL1xuICBwdWJsaWMgY2lkclByZWZpeDogbnVtYmVyO1xuICBwcml2YXRlIGlwUGFydHM6IGJpZ2ludFtdO1xuICBwcml2YXRlIG5ldHdvcmtCaXRzOiBudW1iZXI7XG4gIHByaXZhdGUgbmV0d29ya1BhcnQ6IGJpZ2ludFtdO1xuXG4gIGNvbnN0cnVjdG9yKGNpZHI6IHN0cmluZykge1xuICAgIHRoaXMuY2lkciA9IGNpZHI7XG4gICAgY29uc3QgW2lwQWRkcmVzcywgcHJlZml4XSA9IGNpZHIuc3BsaXQoJy8nKTtcbiAgICB0aGlzLmNpZHJQcmVmaXggPSBwYXJzZUludChwcmVmaXgsIDEwKTtcbiAgICB0aGlzLmlwUGFydHMgPSB0aGlzLnBhcnNlQmlnSW50UGFydHMoaXBBZGRyZXNzKTtcbiAgICB0aGlzLm5ldHdvcmtCaXRzID0gdGhpcy5jaWRyUHJlZml4O1xuICAgIHRoaXMubmV0d29ya1BhcnQgPSB0aGlzLmlwUGFydHMuc2xpY2UoMCwgTWF0aC5jZWlsKHRoaXMubmV0d29ya0JpdHMgLyAxNikpO1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZUJpZ0ludFBhcnRzKGlwQWRkcmVzczogc3RyaW5nKTogYmlnaW50W10ge1xuICAgIHJldHVybiBpcEFkZHJlc3Muc3BsaXQoJzonKS5tYXAoKHBhcnQpID0+IEJpZ0ludChgMHgke3BhcnQucGFkU3RhcnQoNCwgJzAnKX1gIHx8ICcwJykpO1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIE1pbmltdW0gSVB2NiBhZGRyZXNzIGZvciBhIHByb3ZpZGVkIENJRFJcbiAgICovXG4gIHB1YmxpYyBtaW5JcCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IHN0YXJ0SVAgPSBbLi4udGhpcy5uZXR3b3JrUGFydF07XG4gICAgZm9yIChsZXQgaSA9IHRoaXMubmV0d29ya1BhcnQubGVuZ3RoOyBpIDwgODsgaSsrKSB7XG4gICAgICBzdGFydElQLnB1c2goQmlnSW50KDApKTtcbiAgICB9XG4gICAgcmV0dXJuIHN0YXJ0SVAubWFwKHRoaXMuZm9ybWF0SVB2NlBhcnQpLmpvaW4oJzonKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyBNYXhpbXVtIElQdjYgYWRkcmVzcyBmb3IgYSBwcm92aWRlZCBDSURSXG4gICAqL1xuICBwdWJsaWMgbWF4SXAoKTogc3RyaW5nIHtcbiAgICBjb25zdCBlbmRJUCA9IFsuLi50aGlzLm5ldHdvcmtQYXJ0XTtcbiAgICBjb25zdCBob3N0UGFydCA9IEFycmF5KDggLSB0aGlzLm5ldHdvcmtQYXJ0Lmxlbmd0aCkuZmlsbChCaWdJbnQoMHhmZmZmKSk7XG4gICAgZW5kSVAucHVzaCguLi5ob3N0UGFydCk7XG5cbiAgICByZXR1cm4gZW5kSVAubWFwKHRoaXMuZm9ybWF0SVB2NlBhcnQpLmpvaW4oJzonKTtcbiAgfVxuXG4gIHByaXZhdGUgZm9ybWF0SVB2NlBhcnQgPSAocGFydDogYmlnaW50KSA9PiBwYXJ0LnRvU3RyaW5nKDE2KS5wYWRTdGFydCg0LCAnMCcpO1xuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gcmFuZ2UxIElwdjYgQ0lEUiByYW5nZSB0byBjb21wYXJlXG4gICAqIEBwYXJhbSByYW5nZTIgSXB2NiBDSURSIHJhbmdlIHRvIGNvbXBhcmVcbiAgICogQHJldHVybnMgdHJ1ZSBpZiB0d28gcmFuZ2VzIG92ZXJsYXAsIGZhbHNlIG90aGVyd2lzZVxuICAgKi9cbiAgcHVibGljIHJhbmdlc092ZXJsYXAocmFuZ2UxOiBzdHJpbmcsIHJhbmdlMjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3QgW3N0YXJ0MSwgZW5kMV0gPSB0aGlzLmdldElQdjZSYW5nZShyYW5nZTEpO1xuICAgIGNvbnN0IFtzdGFydDIsIGVuZDJdID0gdGhpcy5nZXRJUHY2UmFuZ2UocmFuZ2UyKTtcblxuICAgIHJldHVybiAoc3RhcnQxIDw9IGVuZDIpICYmIChzdGFydDIgPD0gZW5kMSk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIGNpZHJcbiAgICogQHJldHVybnMgUmFuZ2UgaW4gdGhlIGZyb20gb2YgYmlnIGludCBudW1iZXIgW3N0YXJ0LCBlbmRdXG4gICAqL1xuICBwcml2YXRlIGdldElQdjZSYW5nZShjaWRyOiBzdHJpbmcpOiBbYmlnaW50LCBiaWdpbnRdIHtcbiAgICBjb25zdCBbaXB2NkFkZHJlc3MsIHByZWZpeExlbmd0aF0gPSBjaWRyLnNwbGl0KCcvJyk7XG4gICAgY29uc3QgaXB2Nk51bWJlciA9IHRoaXMuaXB2NlRvTnVtYmVyKGlwdjZBZGRyZXNzKTtcbiAgICBjb25zdCBtYXNrID0gKEJpZ0ludCgxKSA8PCBCaWdJbnQoMTI4IC0gTnVtYmVyKHByZWZpeExlbmd0aCkpKSAtIEJpZ0ludCgxKTtcbiAgICBjb25zdCBuZXR3b3JrUHJlZml4ID0gaXB2Nk51bWJlciAmIH5tYXNrO1xuICAgIGNvbnN0IHN0YXJ0ID0gbmV0d29ya1ByZWZpeDtcbiAgICBjb25zdCBlbmQgPSBuZXR3b3JrUHJlZml4IHwgbWFzaztcblxuICAgIHJldHVybiBbc3RhcnQsIGVuZF07XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIGlwdjZBZGRyZXNzXG4gICAqIEByZXR1cm5zIENvbnZlcnRzIGdpdmVuIGlwdjYgYWRkcmVzcyByYW5nZSB0byBiaWcgaW50IG51bWJlclxuICAgKi9cbiAgcHJpdmF0ZSBpcHY2VG9OdW1iZXIoaXB2NkFkZHJlc3M6IHN0cmluZyk6IGJpZ2ludCB7XG4gICAgY29uc3QgYmxvY2tzID0gdGhpcy5wYXJzZUJpZ0ludFBhcnRzKGlwdjZBZGRyZXNzKTtcbiAgICBsZXQgaXB2Nk51bWJlciA9IEJpZ0ludCgwKTtcbiAgICBmb3IgKGNvbnN0IGJsb2NrIG9mIGJsb2Nrcykge1xuICAgICAgLyogdHNsaW50OmRpc2FibGU6bm8tYml0d2lzZSAqL1xuICAgICAgaXB2Nk51bWJlciA9IChpcHY2TnVtYmVyIDw8IEJpZ0ludCgxNikpICsgYmxvY2s7XG4gICAgfVxuICAgIHJldHVybiBpcHY2TnVtYmVyO1xuICB9XG59XG5cbiJdfQ==
|
|
310
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLHFFQUFxRTs7O0FBU3JFLHdFQUVDO0FBS0QsNEJBRUM7QUFLRCw0Q0FRQztBQUVELDBCQUVDO0FBL0JEOzs7O0dBSUc7QUFDSCxTQUFnQiw4QkFBOEIsQ0FBQyxNQUFlO0lBQzVELE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNsRCxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFnQixRQUFRLENBQUMsSUFBWSxFQUFFLENBQVM7SUFDOUMsT0FBTyxHQUFHLElBQUksU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7QUFDakMsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBZ0IsZ0JBQWdCLENBQUMsT0FBa0I7SUFDakQsTUFBTSxHQUFHLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztJQUM5QixLQUFLLE1BQU0sTUFBTSxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQzdCLElBQUksTUFBTSxDQUFDLFVBQVUsSUFBSSxNQUFNLENBQUMsVUFBVSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3hELEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUMxQyxDQUFDO0lBQ0gsQ0FBQztJQUNELE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN6QixDQUFDO0FBRUQsU0FBZ0IsT0FBTyxDQUFJLEVBQVM7SUFDbEMsT0FBTyxLQUFLLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQzlDLENBQUM7QUFFRDs7R0FFRztBQUNILE1BQWEsWUFBWTtJQUV2Qjs7Ozs7Ozs7O09BU0c7SUFDSSxNQUFNLENBQUMsT0FBTyxDQUFDLFNB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QU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzNFLE1BQU0sYUFBYSxHQUFHLFVBQVUsR0FBRyxDQUFDLElBQUksQ0FBQztRQUN6QyxNQUFNLEtBQUssR0FBRyxhQUFhLENBQUM7UUFDNUIsTUFBTSxHQUFHLEdBQUcsYUFBYSxHQUFHLElBQUksQ0FBQztRQUVqQyxPQUFPLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0tBQ3JCO0lBRUQ7OztPQUdHO0lBQ0ssWUFBWSxDQUFDLFdBQW1CO1FBQ3RDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNsRCxJQUFJLFVBQVUsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDM0IsS0FBSyxNQUFNLEtBQUssSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUMzQiwrQkFBK0I7WUFDL0IsVUFBVSxHQUFHLENBQUMsVUFBVSxJQUFJLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztRQUNsRCxDQUFDO1FBQ0QsT0FBTyxVQUFVLENBQUM7S0FDbkI7Q0FDRjtBQTdGRCxzQ0E2RkMiLCJzb3VyY2VzQ29udGVudCI6WyIvKmVzbGludCBuby1iaXR3aXNlOiBbXCJlcnJvclwiLCB7IFwiYWxsb3dcIjogW1wiflwiLCBcInxcIiwgXCI8PFwiLCBcIiZcIl0gfV0gKi9cblxuaW1wb3J0IHsgSVN1Ym5ldCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1lYzInO1xuXG4vKipcbiAqIFJldHVybiBhIHN1Ym5ldCBuYW1lIGZyb20gaXRzIGNvbnN0cnVjdCBJRFxuICpcbiAqIEFsbCBzdWJuZXQgbmFtZXMgbG9vayBsaWtlIE5BTUUgPD4gXCJTdWJuZXRcIiA8PiBJTkRFWFxuICovXG5leHBvcnQgZnVuY3Rpb24gc3VibmV0R3JvdXBOYW1lRnJvbUNvbnN0cnVjdElkKHN1Ym5ldDogSVN1Ym5ldCkge1xuICByZXR1cm4gc3VibmV0Lm5vZGUuaWQucmVwbGFjZSgvU3VibmV0XFxkKyQvLCAnJyk7XG59XG5cbi8qKlxuICogTWFrZSB0aGUgc3VibmV0IGNvbnN0cnVjdCBJRCBmcm9tIGEgbmFtZSBhbmQgbnVtYmVyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdWJuZXRJZChuYW1lOiBzdHJpbmcsIGk6IG51bWJlcikge1xuICByZXR1cm4gYCR7bmFtZX1TdWJuZXQke2kgKyAxfWA7XG59XG5cbi8qKlxuICogUmV0dXJuIHRoZSB1bmlvbiBvZiB0YWJsZSBJRHMgZnJvbSBhbGwgc2VsZWN0ZWQgc3VibmV0c1xuICovXG5leHBvcnQgZnVuY3Rpb24gYWxsUm91dGVUYWJsZUlkcyhzdWJuZXRzOiBJU3VibmV0W10pOiBzdHJpbmdbXSB7XG4gIGNvbnN0IHJldCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBmb3IgKGNvbnN0IHN1Ym5ldCBvZiBzdWJuZXRzKSB7XG4gICAgaWYgKHN1Ym5ldC5yb3V0ZVRhYmxlICYmIHN1Ym5ldC5yb3V0ZVRhYmxlLnJvdXRlVGFibGVJZCkge1xuICAgICAgcmV0LmFkZChzdWJuZXQucm91dGVUYWJsZS5yb3V0ZVRhYmxlSWQpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gQXJyYXkuZnJvbShyZXQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmxhdHRlbjxBPih4czogQVtdW10pOiBBW10ge1xuICByZXR1cm4gQXJyYXkucHJvdG90eXBlLmNvbmNhdC5hcHBseShbXSwgeHMpO1xufVxuXG4vKipcbiAqIE5ldHdvcmtVdGlscyBjb250YWlucyBoZWxwZXJzIHRvIHdvcmsgd2l0aCBuZXR3b3JrIGNvbnN0cnVjdHMgKHN1Ym5ldHMvcmFuZ2VzKVxuICovXG5leHBvcnQgY2xhc3MgTmV0d29ya1V0aWxzIHtcblxuICAvKipcbiAgICogVmFsaWRhdGVzIGFuIElQdjQgYWRkcmVzcyBzdHJpbmcuXG4gICAqXG4gICAqIEBwYXJhbSBpcEFkZHJlc3MgVGhlIElQdjQgYWRkcmVzcyBzdHJpbmcgdG8gYmUgdmFsaWRhdGVkLlxuICAgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBzdHJpbmcgaXMgYSB2YWxpZCBJUHY0IGFkZHJlc3MsIGZhbHNlIG90aGVyd2lzZS5cbiAgICogVmFsaWRhdGVzIGFuIElQdjQgc3RyaW5nXG4gICAqXG4gICAqIHJldHVybnMgdHJ1ZSBvZiB0aGUgc3RyaW5nIGNvbnRhaW5zIDQgbnVtYmVycyBiZXR3ZWVuIDAtMjU1IGRlbGltaXRlZCBieVxuICAgKiBhIGAuYCBjaGFyYWN0ZXJcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgdmFsaWRJcChpcEFkZHJlc3M6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IG9jdGV0cyA9IGlwQWRkcmVzcy5zcGxpdCgnLicpO1xuICAgIGlmIChvY3RldHMubGVuZ3RoICE9PSA0KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBvY3RldHMubWFwKChvY3RldDogc3RyaW5nKSA9PiBwYXJzZUludChvY3RldCwgMTApKS5cbiAgICAgIGV2ZXJ5KChvY3RldDogbnVtYmVyKSA9PiBvY3RldCA+PSAwICYmIG9jdGV0IDw9IDI1NSk7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydHMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYW4gSVB2NCBhZGRyZXNzIHRvIGl0cyBjb3JyZXNwb25kaW5nIG51bWVyaWNhbCB2YWx1ZS5cbiAgICpcbiAgICogVXNlcyB0aGUgZm9ybXVsYTpcbiAgICogKGZpcnN0IG9jdGV0ICogMjU2wrMpICsgKHNlY29uZCBvY3RldCAqIDI1NsKyKSArICh0aGlyZCBvY3RldCAqIDI1NikgK1xuICAgKiAoZm91cnRoIG9jdGV0KVxuICAgKlxuICAgKiBAcGFyYW0gIGlwQWRkcmVzcyB0aGUgSVAgYWRkcmVzcyAoZS5nLiAxNzQuNjYuMTczLjE2OClcbiAgICogQHJldHVybnMgdGhlIGludGVnZXIgdmFsdWUgb2YgdGhlIElQIGFkZHJlc3MgKGUuZyAyOTIzNjA1NDE2KVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBpcFRvTnVtKGlwQWRkcmVzczogc3RyaW5nKTogbnVtYmVyIHtcbiAgICBpZiAoIXRoaXMudmFsaWRJcChpcEFkZHJlc3MpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7aXBBZGRyZXNzfSBpcyBub3QgdmFsaWRgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gaXBBZGRyZXNzXG4gICAgICAuc3BsaXQoJy4nKVxuICAgICAgLnJlZHVjZShcbiAgICAgICAgKHA6IG51bWJlciwgYzogc3RyaW5nLCBpOiBudW1iZXIpID0+IHAgKyBwYXJzZUludChjLCAxMCkgKiAyNTYgKiogKDMgLSBpKSxcbiAgICAgICAgMCxcbiAgICAgICk7XG4gIH1cblxuICAvKipcbiAgICogVGFrZXMgbnVtYmVyIGFuZCBjb252ZXJ0cyBpdCB0byBJUHY0IGFkZHJlc3Mgc3RyaW5nXG4gICAqXG4gICAqIFRha2VzIGEgbnVtYmVyIChlLmcgMjkyMzYwNTQxNikgYW5kIGNvbnZlcnRzIGl0IHRvIGFuIElQdjQgYWRkcmVzcyBzdHJpbmdcbiAgICogY3VycmVudGx5IG9ubHkgc3VwcG9ydHMgSVB2NFxuICAgKlxuICAgKiBAcGFyYW0gaXBOdW0gaW50ZWdlciB2YWx1ZSBvZiB0aGUgSVAgYWRkcmVzcyAoZS5nIDI5MjM2MDU0MTYpXG4gICAqIEByZXR1cm5zIElQdjQgYWRkcmVzcyAoZS5nLiAxNzQuNjYuMTczLjE2OClcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbnVtVG9JcChpcE51bTogbnVtYmVyKTogc3RyaW5nIHtcbiAgICAvLyB0aGlzIGFsbCBiZWNhdXNlIGJpdHdpc2UgbWF0aCBpcyBzaWduZWRcbiAgICBsZXQgcmVtYWluaW5nID0gaXBOdW07XG4gICAgY29uc3QgYWRkcmVzcyA9IG5ldyBBcnJheTxudW1iZXI+KCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCA0OyBpKyspIHtcbiAgICAgIGlmIChyZW1haW5pbmcgIT09IDApIHtcbiAgICAgICAgYWRkcmVzcy5wdXNoKE1hdGguZmxvb3IocmVtYWluaW5nIC8gMjU2ICoqICgzIC0gaSkpKTtcbiAgICAgICAgcmVtYWluaW5nID0gcmVtYWluaW5nICUgMjU2ICoqICgzIC0gaSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhZGRyZXNzLnB1c2goMCk7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGlwQWRkcmVzczogc3RyaW5nID0gYWRkcmVzcy5qb2luKCcuJyk7XG4gICAgaWYgKCAhdGhpcy52YWxpZElwKGlwQWRkcmVzcykgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7aXBBZGRyZXNzfSBpcyBub3QgYSB2YWxpZCBJUCBBZGRyZXNzYCk7XG4gICAgfVxuICAgIHJldHVybiBpcEFkZHJlc3M7XG4gIH1cbn1cblxuLyoqXG4gKiBFeHBvcnRlZCBjbGFzcyBmcm9tIFZQQyB0byBzdXBwb3J0IHN1Ym5ldCBmaWx0ZXJpbmdcbiAqIGFuZCBDSURSIHZhbGlkYXRpb25cbiAqL1xuZXhwb3J0IGNsYXNzIENpZHJCbG9jayB7XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZXMgdGhlIG5ldG1hc2sgZm9yIGEgZ2l2ZW4gQ0lEUiBtYXNrXG4gICAqXG4gICAqIFRoZSBuZXRtYXNrIGlzIGEgMzItYml0IGJpbmFyeSB2YWx1ZSB1c2VkIHRvIHNlcGFyYXRlIHRoZSBuZXR3b3JrIHBvcnRpb24gZnJvbSB0aGUgaG9zdCBwb3J0aW9uIG9mIGFuIElQdjQgYWRkcmVzcy5cbiAgICogSXQgaXMgY2FsY3VsYXRlZCBiYXNlZCBvbiB0aGUgQ0lEUiBwcmVmaXggbGVuZ3RoICh0aGUgbnVtYmVyIG9mIGJpdHMgdXNlZCB0byByZXByZXNlbnQgdGhlIG5ldHdvcmsgcG9ydGlvbikuXG4gICAqXG4gICAqIEZvciBleGFtcGxlOlxuICAgKiBDaWRyQmxvY2suY2FsY3VsYXRlTmV0bWFzaygyNCkgcmV0dXJucyAnMjU1LjI1NS4yNTUuMCdcbiAgICpcbiAgICogQHBhcmFtIG1hc2sgVGhlIENJRFIgcHJlZml4IGxlbmd0aCAoYmV0d2VlbiAwIGFuZCAzMikgZm9yIHdoaWNoIHRvIGNhbGN1bGF0ZSB0aGUgbmV0bWFzay5cbiAgICAvLyBDYWxjdWxhdGUgdGhlIG5ldG1hc2sgYnkgcGVyZm9ybWluZyBhIGJpdHdpc2UgTk9UIG9uIHRoZSByZXN1bHQgb2YgKDJeMzIgLSAyXigzMiAtIG1hc2spKVxuICAgKiBAcmV0dXJucyBUaGUgbmV0bWFzayBzdHJpbmcgaW4gSVB2NCBhZGRyZXNzIGZvcm1hdC5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgY2FsY3VsYXRlTmV0bWFzayhtYXNrOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIHJldHVybiBOZXR3b3JrVXRpbHMubnVtVG9JcCgyICoqIDMyIC0gMiAqKiAoMzIgLSBtYXNrKSk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlcyB0aGUgbnVtYmVyIElQIGFkZHJlc3NlcyBpbiBhIENJRFIgTWFza1xuICAgKlxuICAgKiBGb3IgZXhhbXBsZTpcbiAgICogQ2lkckJsb2NrLmNhbGN1bGF0ZU5ldHNpemUoMTYpIHJldHVybnMgNjU1MzZcbiAgICpcbiAgICogQHBhcmFtIG1hc2sgVGhlIENJRFIgcHJlZml4IGxlbmd0aCAoYmV0d2VlbiAwIGFuZCAzMikgZm9yIHdoaWNoIHRvIGNhbGN1bGF0ZSB0aGUgbmV0d29yayBzaXplLlxuICAgKiBDaWRyQmxvY2suY2FsY3VsYXRlTmV0c2l6ZSgyNCkgcmV0dXJucyAyNTZcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgY2FsY3VsYXRlTmV0c2l6ZShtYXNrOiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiAyICoqICgzMiAtIG1hc2spO1xuICB9XG5cbiAgLyoqXG4gICAqIElQIGFkZHJlc3MgaW4gdGhlIENJRFIgYmxvY2suXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgY2lkcjogc3RyaW5nO1xuXG4gIC8qXG4gICAqIFRoZSBDSURSIG1hc2sgZS5nLiBmb3IgQ0lEUiAnMTAuMC4wLjAvMjEnIHJldHVybnMgMjFcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBtYXNrOiBudW1iZXI7XG5cbiAgLypcbiAgICogVGhlIHRvdGFsIG51bWJlciBvZiBJUCBhZGRyZXNzZXMgaW4gdGhlIENJRFJcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBuZXR3b3JrU2l6ZTogbnVtYmVyO1xuXG4gIC8qXG4gICAqIFRoZSBuZXR3b3JrIGFkZHJlc3MgcHJvdmlkZWQgaW4gQ0lEUiBjcmVhdGlvbiBvZmZzZXQgYnkgdGhlIE5ldHNpemUgLTFcbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgbmV0d29ya0FkZHJlc3M6IG51bWJlcjtcblxuICAvKlxuICAgKiBQYXJzZXMgZWl0aGVyIENJRFIgbm90YXRpb24gU3RyaW5nIG9yIHR3byBudW1iZXJzIHJlcHJlc2VudGluZyB0aGUgSVBcbiAgICogc3BhY2VcbiAgICpcbiAgICogY2lkciBleHBlY3RzIGEgc3RyaW5nICcxMC4wLjAuMC8xNidcbiAgICogaXBBZGRyZXNzIGV4cGVjdHMgYSBudW1iZXJcbiAgICogbWFzayBleHBlY3RzIGEgbnVtYmVyXG4gICAqXG4gICAqIElmIHRoZSBnaXZlbiBgY2lkcmAgb3IgYGlwQWRkcmVzc2AgaXMgbm90IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGJsb2NrLFxuICAgKiB0aGVuIHRoZSBuZXh0IGF2YWlsYWJsZSBibG9jayB3aWxsIGJlIHJldHVybmVkLiBGb3IgZXhhbXBsZSwgaWZcbiAgICogYDEwLjAuMy4xLzI4YCBpcyBnaXZlbiB0aGUgcmV0dXJuZWQgYmxvY2sgd2lsbCByZXByZXNlbnQgYDEwLjAuMy4xNi8yOGAuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihjaWRyOiBzdHJpbmcpXG4gIGNvbnN0cnVjdG9yKGlwQWRkcmVzczogbnVtYmVyLCBtYXNrOiBudW1iZXIpXG4gIGNvbnN0cnVjdG9yKGlwQWRkcmVzc09yQ2lkcjogc3RyaW5nIHwgbnVtYmVyLCBtYXNrPzogbnVtYmVyKSB7XG4gICAgaWYgKHR5cGVvZiBpcEFkZHJlc3NPckNpZHIgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0aGlzLm1hc2sgPSBwYXJzZUludChpcEFkZHJlc3NPckNpZHIuc3BsaXQoJy8nKVsxXSwgMTApO1xuICAgICAgdGhpcy5uZXR3b3JrQWRkcmVzcyA9IE5ldHdvcmtVdGlscy5pcFRvTnVtKGlwQWRkcmVzc09yQ2lkci5zcGxpdCgnLycpWzBdKSArXG4gICAgICAgIENpZHJCbG9jay5jYWxjdWxhdGVOZXRzaXplKHRoaXMubWFzaykgLSAxO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodHlwZW9mIG1hc2sgPT09ICdudW1iZXInKSB7XG4gICAgICAgIHRoaXMubWFzayA9IG1hc2s7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyB0aGlzIHNob3VsZCBiZSBpbXBvc3NpYmxlXG4gICAgICAgIHRoaXMubWFzayA9IDE2O1xuICAgICAgfVxuICAgICAgdGhpcy5uZXR3b3JrQWRkcmVzcyA9IGlwQWRkcmVzc09yQ2lkciArIENpZHJCbG9jay5jYWxjdWxhdGVOZXRzaXplKHRoaXMubWFzaykgLSAxO1xuICAgICAgdGhpcy5uZXR3b3JrU2l6ZSA9IDIgKiogKDMyIC0gdGhpcy5tYXNrKTtcbiAgICB9XG4gICAgdGhpcy5uZXR3b3JrU2l6ZSA9IDIgKiogKDMyIC0gdGhpcy5tYXNrKTtcbiAgICB0aGlzLmNpZHIgPSBgJHt0aGlzLm1pbklwKCl9LyR7dGhpcy5tYXNrfWA7XG4gIH1cblxuICAvKlxuICAgKiBUaGUgbWF4aW11bSBJUCBpbiB0aGUgQ0lEUiBCbG9jayBlLmcuICcxMC4wLjguMjU1J1xuICAgKi9cbiAgcHVibGljIG1heElwKCk6IHN0cmluZyB7XG4gICAgLy8gbWluICsgKDJeKDMyLW1hc2spKSAtIDEgW3plcm8gbmVlZHMgdG8gY291bnRdXG4gICAgcmV0dXJuIE5ldHdvcmtVdGlscy5udW1Ub0lwKHRoaXMubWF4QWRkcmVzcygpKTtcbiAgfVxuXG4gIC8qXG4gICAqIENoZWNrcyBpZiB0aGlzIENJRFIgYmxvY2sgZnVsbHkgY29udGFpbnMgdGhlIHByb3ZpZGVkIENJRFIgYmxvY2suXG4gICAqXG4gICAqIEBwYXJhbSBvdGhlciBUaGUgQ0lEUiBibG9jayB0byBjaGVjayBmb3IgY29udGFpbm1lbnQuXG4gICAqIEByZXR1cm5zIFRydWUgaWYgdGhpcyBDSURSIGJsb2NrIGZ1bGx5IGNvbnRhaW5zIHRoZSBwcm92aWRlZCBDSURSIGJsb2NrLCBmYWxzZSBvdGhlcndpc2UuXG4gICAqXG4gICAqIFRoZSBtaW5pbXVtIElQIGluIHRoZSBDSURSIEJsb2NrIGUuZy4gJzEwLjAuMC4wJ1xuICAgKi9cbiAgcHVibGljIG1pbklwKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIE5ldHdvcmtVdGlscy5udW1Ub0lwKHRoaXMubWluQWRkcmVzcygpKTtcbiAgfVxuXG4gIC8qXG4gICAqIFJldHVybnMgdGhlIG51bWJlciByZXByZXNlbnRhdGlvbiBmb3IgdGhlIG1pbmltdW0gSVB2NCBhZGRyZXNzXG4gICAqL1xuICBwdWJsaWMgbWluQWRkcmVzcygpOiBudW1iZXIge1xuICAgIGNvbnN0IGRpdiA9IHRoaXMubmV0d29ya0FkZHJlc3MgJSB0aGlzLm5ldHdvcmtTaXplO1xuICAgIHJldHVybiB0aGlzLm5ldHdvcmtBZGRyZXNzIC0gZGl2O1xuICB9XG5cbiAgLypcbiAgICogUmV0dXJucyB0aGUgbnVtYmVyIHJlcHJlc2VudGF0aW9uIGZvciB0aGUgbWF4aW11bSBJUHY0IGFkZHJlc3NcbiAgICovXG4gIHB1YmxpYyBtYXhBZGRyZXNzKCk6IG51bWJlciB7XG4gICAgLyoqXG4gICAgICogVGhlIG1heGltdW0gSVAgYWRkcmVzcyBpbiB0aGUgQ0lEUiBibG9jayBpcyBjYWxjdWxhdGVkIGFzIHRoZSBtaW5pbXVtIGFkZHJlc3MgKyAoMl4oMzItbWFzaykpIC0gMS5cbiAgICAgKiBUaGlzIGlzIGJlY2F1c2UgdGhlIG1pbmltdW0gYWRkcmVzcyByZXByZXNlbnRzIHRoZSBuZXR3b3JrIGFkZHJlc3MsIGFuZCB0aGUgbWF4aW11bSBhZGRyZXNzIGlzIHRoZSBicm9hZGNhc3QgYWRkcmVzcy5cbiAgICAgKi9cbiAgICAvLyBtaW4gKyAoMl4oMzItbWFzaykpIC0gMSBbemVybyBuZWVkcyB0byBjb3VudF1cbiAgICByZXR1cm4gdGhpcy5taW5BZGRyZXNzKCkgKyB0aGlzLm5ldHdvcmtTaXplIC0gMTtcbiAgfVxuXG4gIC8qXG4gICAqIFJldHVybnMgdGhlIG5leHQgY29uc2VjdXRpdmUgQ0lEUiBibG9jayBvZiB0aGUgc2FtZSBtYXNrIHNpemUgZm9sbG93aW5nIHRoaXMgQ0lEUiBibG9jay5cbiAgICpcbiAgICogRm9yIGV4YW1wbGUsIGlmIHRoaXMgQ0lEUiBibG9jayBpcyAnMTAuMC4wLjAvMjQnLCB0aGUgbmV4dCBibG9jayB3b3VsZCBiZSAnMTAuMC4xLjAvMjQnLlxuICAgKlxuICAgKiBSZXR1cm5zIHRoZSBuZXh0IENJRFIgQmxvY2sgb2YgdGhlIHNhbWUgbWFzayBzaXplXG4gICAqL1xuICBwdWJsaWMgbmV4dEJsb2NrKCk6IENpZHJCbG9jayB7XG4gICAgcmV0dXJuIG5ldyBDaWRyQmxvY2sodGhpcy5tYXhBZGRyZXNzKCkgKyAxLCB0aGlzLm1hc2spO1xuICB9XG5cbiAgLypcbiAgICogUmV0dXJucyB0cnVlIGlmIHRoaXMgQ2lkckJsb2NrIGZ1bGx5IGNvbnRhaW5zIHRoZSBwcm92aWRlZCBDaWRyQmxvY2tcbiAgICovXG4gIHB1YmxpYyBjb250YWluc0NpZHIob3RoZXI6IENpZHJCbG9jayk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAodGhpcy5tYXhBZGRyZXNzKCkgPj0gb3RoZXIubWF4QWRkcmVzcygpKSAmJlxuICAgICAgKHRoaXMubWluQWRkcmVzcygpIDw9IG90aGVyLm1pbkFkZHJlc3MoKSk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHR3byBJUCBhZGRyZXNzIHJhbmdlcyBvdmVybGFwLlxuICAgKlxuICAgKiBAcGFyYW0gcmFuZ2UxIFRoZSBmaXJzdCBJUCBhZGRyZXNzIHJhbmdlIHJlcHJlc2VudGVkIGFzIGFuIGFycmF5IFtzdGFydCwgZW5kXS5cbiAgICogQHBhcmFtIHJhbmdlMiBUaGUgc2Vjb25kIElQIGFkZHJlc3MgcmFuZ2UgcmVwcmVzZW50ZWQgYXMgYW4gYXJyYXkgW3N0YXJ0LCBlbmRdLlxuICAgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSB0d28gSVAgYWRkcmVzcyByYW5nZXMgb3ZlcmxhcCwgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgKlxuICAgKiBOb3RlOiBUaGlzIG1ldGhvZCBhc3N1bWVzIHRoYXQgdGhlIHN0YXJ0IGFuZCBlbmQgYWRkcmVzc2VzIGFyZSB2YWxpZCBJUHY0IGFkZHJlc3Nlcy5cbiAgICovXG4gIHB1YmxpYyByYW5nZXNPdmVybGFwKHJhbmdlMTogW3N0cmluZywgc3RyaW5nXSwgcmFuZ2UyOiBbc3RyaW5nLCBzdHJpbmddKTogYm9vbGVhbiB7XG4gICAgY29uc3QgW3N0YXJ0MSwgZW5kMV0gPSByYW5nZTE7XG4gICAgY29uc3QgW3N0YXJ0MiwgZW5kMl0gPSByYW5nZTI7XG5cbiAgICAvLyBDaGVjayBpZiByYW5nZXMgb3ZlcmxhcFxuICAgIHJldHVybiBzdGFydDEgPD0gZW5kMiAmJiBzdGFydDIgPD0gZW5kMTtcbiAgfVxuXG59XG5cbi8qKlxuICogQ2xhc3Mgd2l0aCBoZWxwZXIgZnVuY3Rpb25zIHRvIHN1cHBvcnRcbiAqIFN1Ym5ldCBJcHY2IEFkZHJlc3MgVmFsaWRhdGlvblxuICpcbiAqIFRoaXMgY2xhc3MgcHJvdmlkZXMgbWV0aG9kcyBmb3Igd29ya2luZyB3aXRoIElQdjYgQ0lEUiBibG9ja3MsIGluY2x1ZGluZyBjYWxjdWxhdGluZyB0aGUgbWluaW11bSBhbmQgbWF4aW11bVxuICogSVAgYWRkcmVzc2VzIGluIGEgQ0lEUiBibG9jaywgYW5kIGNoZWNraW5nIGlmIHR3byBDSURSIGJsb2NrcyBvdmVybGFwLlxuICovXG5leHBvcnQgY2xhc3MgQ2lkckJsb2NrSXB2NiB7XG5cbiAgLyoqXG4gICAqIElwdjYgQ0lEUiByYW5nZVxuICAgKi9cbiAgcHVibGljIGNpZHI6IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBDSURSIHByZWZpeCBsZW5ndGggKG51bWJlciBvZiBiaXRzIHVzZWQgZm9yIHRoZSBuZXR3b3JrIHBvcnRpb24gb2YgdGhlIGFkZHJlc3MpLlxuICAgKi9cbiAgcHVibGljIGNpZHJQcmVmaXg6IG51bWJlcjtcbiAgcHJpdmF0ZSBpcFBhcnRzOiBiaWdpbnRbXTtcbiAgcHJpdmF0ZSBuZXR3b3JrQml0czogbnVtYmVyO1xuICBwcml2YXRlIG5ldHdvcmtQYXJ0OiBiaWdpbnRbXTtcblxuICBjb25zdHJ1Y3RvcihjaWRyOiBzdHJpbmcpIHtcbiAgICB0aGlzLmNpZHIgPSBjaWRyO1xuICAgIGNvbnN0IFtpcEFkZHJlc3MsIHByZWZpeF0gPSBjaWRyLnNwbGl0KCcvJyk7XG4gICAgdGhpcy5jaWRyUHJlZml4ID0gcGFyc2VJbnQocHJlZml4LCAxMCk7XG4gICAgdGhpcy5pcFBhcnRzID0gdGhpcy5wYXJzZUJpZ0ludFBhcnRzKGlwQWRkcmVzcyk7XG4gICAgdGhpcy5uZXR3b3JrQml0cyA9IHRoaXMuY2lkclByZWZpeDtcbiAgICB0aGlzLm5ldHdvcmtQYXJ0ID0gdGhpcy5pcFBhcnRzLnNsaWNlKDAsIE1hdGguY2VpbCh0aGlzLm5ldHdvcmtCaXRzIC8gMTYpKTtcbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VCaWdJbnRQYXJ0cyhpcEFkZHJlc3M6IHN0cmluZyk6IGJpZ2ludFtdIHtcbiAgICByZXR1cm4gaXBBZGRyZXNzLnNwbGl0KCc6JykubWFwKChwYXJ0KSA9PiBCaWdJbnQoYDB4JHtwYXJ0LnBhZFN0YXJ0KDQsICcwJyl9YCB8fCAnMCcpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyBNaW5pbXVtIElQdjYgYWRkcmVzcyBmb3IgYSBwcm92aWRlZCBDSURSXG4gICAqL1xuICBwdWJsaWMgbWluSXAoKTogc3RyaW5nIHtcbiAgICBjb25zdCBzdGFydElQID0gWy4uLnRoaXMubmV0d29ya1BhcnRdO1xuICAgIGZvciAobGV0IGkgPSB0aGlzLm5ldHdvcmtQYXJ0Lmxlbmd0aDsgaSA8IDg7IGkrKykge1xuICAgICAgc3RhcnRJUC5wdXNoKEJpZ0ludCgwKSk7XG4gICAgfVxuICAgIHJldHVybiBzdGFydElQLm1hcCh0aGlzLmZvcm1hdElQdjZQYXJ0KS5qb2luKCc6Jyk7XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMgTWF4aW11bSBJUHY2IGFkZHJlc3MgZm9yIGEgcHJvdmlkZWQgQ0lEUlxuICAgKi9cbiAgcHVibGljIG1heElwKCk6IHN0cmluZyB7XG4gICAgY29uc3QgZW5kSVAgPSBbLi4udGhpcy5uZXR3b3JrUGFydF07XG4gICAgY29uc3QgaG9zdFBhcnQgPSBBcnJheSg4IC0gdGhpcy5uZXR3b3JrUGFydC5sZW5ndGgpLmZpbGwoQmlnSW50KDB4ZmZmZikpO1xuICAgIGVuZElQLnB1c2goLi4uaG9zdFBhcnQpO1xuXG4gICAgcmV0dXJuIGVuZElQLm1hcCh0aGlzLmZvcm1hdElQdjZQYXJ0KS5qb2luKCc6Jyk7XG4gIH1cblxuICBwcml2YXRlIGZvcm1hdElQdjZQYXJ0ID0gKHBhcnQ6IGJpZ2ludCkgPT4gcGFydC50b1N0cmluZygxNikucGFkU3RhcnQoNCwgJzAnKTtcblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHJhbmdlMSBJcHY2IENJRFIgcmFuZ2UgdG8gY29tcGFyZVxuICAgKiBAcGFyYW0gcmFuZ2UyIElwdjYgQ0lEUiByYW5nZSB0byBjb21wYXJlXG4gICAqIEByZXR1cm5zIHRydWUgaWYgdHdvIHJhbmdlcyBvdmVybGFwLCBmYWxzZSBvdGhlcndpc2VcbiAgICovXG4gIHB1YmxpYyByYW5nZXNPdmVybGFwKHJhbmdlMTogc3RyaW5nLCByYW5nZTI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IFtzdGFydDEsIGVuZDFdID0gdGhpcy5nZXRJUHY2UmFuZ2UocmFuZ2UxKTtcbiAgICBjb25zdCBbc3RhcnQyLCBlbmQyXSA9IHRoaXMuZ2V0SVB2NlJhbmdlKHJhbmdlMik7XG5cbiAgICByZXR1cm4gKHN0YXJ0MSA8PSBlbmQyKSAmJiAoc3RhcnQyIDw9IGVuZDEpO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSBjaWRyXG4gICAqIEByZXR1cm5zIFJhbmdlIGluIHRoZSBmcm9tIG9mIGJpZyBpbnQgbnVtYmVyIFtzdGFydCwgZW5kXVxuICAgKi9cbiAgcHJpdmF0ZSBnZXRJUHY2UmFuZ2UoY2lkcjogc3RyaW5nKTogW2JpZ2ludCwgYmlnaW50XSB7XG4gICAgY29uc3QgW2lwdjZBZGRyZXNzLCBwcmVmaXhMZW5ndGhdID0gY2lkci5zcGxpdCgnLycpO1xuICAgIGNvbnN0IGlwdjZOdW1iZXIgPSB0aGlzLmlwdjZUb051bWJlcihpcHY2QWRkcmVzcyk7XG4gICAgY29uc3QgbWFzayA9IChCaWdJbnQoMSkgPDwgQmlnSW50KDEyOCAtIE51bWJlcihwcmVmaXhMZW5ndGgpKSkgLSBCaWdJbnQoMSk7XG4gICAgY29uc3QgbmV0d29ya1ByZWZpeCA9IGlwdjZOdW1iZXIgJiB+bWFzaztcbiAgICBjb25zdCBzdGFydCA9IG5ldHdvcmtQcmVmaXg7XG4gICAgY29uc3QgZW5kID0gbmV0d29ya1ByZWZpeCB8IG1hc2s7XG5cbiAgICByZXR1cm4gW3N0YXJ0LCBlbmRdO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBpcHY2QWRkcmVzc1xuICAgKiBAcmV0dXJucyBDb252ZXJ0cyBnaXZlbiBpcHY2IGFkZHJlc3MgcmFuZ2UgdG8gYmlnIGludCBudW1iZXJcbiAgICovXG4gIHByaXZhdGUgaXB2NlRvTnVtYmVyKGlwdjZBZGRyZXNzOiBzdHJpbmcpOiBiaWdpbnQge1xuICAgIGNvbnN0IGJsb2NrcyA9IHRoaXMucGFyc2VCaWdJbnRQYXJ0cyhpcHY2QWRkcmVzcyk7XG4gICAgbGV0IGlwdjZOdW1iZXIgPSBCaWdJbnQoMCk7XG4gICAgZm9yIChjb25zdCBibG9jayBvZiBibG9ja3MpIHtcbiAgICAgIC8qIHRzbGludDpkaXNhYmxlOm5vLWJpdHdpc2UgKi9cbiAgICAgIGlwdjZOdW1iZXIgPSAoaXB2Nk51bWJlciA8PCBCaWdJbnQoMTYpKSArIGJsb2NrO1xuICAgIH1cbiAgICByZXR1cm4gaXB2Nk51bWJlcjtcbiAgfVxufVxuXG4iXX0=
|
package/lib/vpc-v2-base.d.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { Resource } from 'aws-cdk-lib';
|
|
2
|
-
import { IVpc, ISubnet, SubnetSelection, SelectedSubnets, EnableVpnGatewayOptions, VpnConnectionType, VpnConnectionOptions, VpnConnection, ClientVpnEndpointOptions, ClientVpnEndpoint, InterfaceVpcEndpointOptions, InterfaceVpcEndpoint, GatewayVpcEndpointOptions, GatewayVpcEndpoint, FlowLogOptions, FlowLog
|
|
2
|
+
import { IVpc, ISubnet, SubnetSelection, SelectedSubnets, EnableVpnGatewayOptions, VpnConnectionType, VpnConnectionOptions, VpnConnection, ClientVpnEndpointOptions, ClientVpnEndpoint, InterfaceVpcEndpointOptions, InterfaceVpcEndpoint, GatewayVpcEndpointOptions, GatewayVpcEndpoint, FlowLogOptions, FlowLog } from 'aws-cdk-lib/aws-ec2';
|
|
3
3
|
import { IDependable, DependencyGroup } from 'constructs';
|
|
4
4
|
import { NatGateway, NatGatewayOptions, VPNGatewayV2 } from './route';
|
|
5
|
+
import { IVPCCidrBlock } from './vpc-v2';
|
|
5
6
|
/**
|
|
6
7
|
* Options to define EgressOnlyInternetGateway for VPC
|
|
7
8
|
*/
|
|
@@ -74,7 +75,7 @@ export interface IVpcV2 extends IVpc {
|
|
|
74
75
|
*
|
|
75
76
|
* For more information, see the {@link https://docs.aws.amazon.com/vpc/latest/userguide/vpc-cidr-blocks.html#vpc-resize}.
|
|
76
77
|
*/
|
|
77
|
-
readonly secondaryCidrBlock
|
|
78
|
+
readonly secondaryCidrBlock?: IVPCCidrBlock[];
|
|
78
79
|
/**
|
|
79
80
|
* The primary IPv4 CIDR block associated with the VPC.
|
|
80
81
|
* Needed in order to validate the vpc range of subnet
|
|
@@ -82,6 +83,24 @@ export interface IVpcV2 extends IVpc {
|
|
|
82
83
|
* For more information, see the {@link https://docs.aws.amazon.com/vpc/latest/userguide/vpc-cidr-blocks.html#vpc-sizing-ipv4}.
|
|
83
84
|
*/
|
|
84
85
|
readonly ipv4CidrBlock: string;
|
|
86
|
+
/**
|
|
87
|
+
* Optional to override inferred region
|
|
88
|
+
*
|
|
89
|
+
* @default - current stack's environment region
|
|
90
|
+
*/
|
|
91
|
+
readonly region: string;
|
|
92
|
+
/**
|
|
93
|
+
* The ID of the AWS account that owns the VPC
|
|
94
|
+
*
|
|
95
|
+
* @default - the account id of the parent stack
|
|
96
|
+
*/
|
|
97
|
+
readonly ownerAccountId: string;
|
|
98
|
+
/**
|
|
99
|
+
* IPv4 CIDR provisioned under pool
|
|
100
|
+
* Required to check for overlapping CIDRs after provisioning
|
|
101
|
+
* is complete under IPAM pool
|
|
102
|
+
*/
|
|
103
|
+
readonly ipv4IpamProvisionedCidrs?: string[];
|
|
85
104
|
/**
|
|
86
105
|
* Add an Egress only Internet Gateway to current VPC.
|
|
87
106
|
* Can only be used for ipv6 enabled VPCs.
|
|
@@ -159,7 +178,7 @@ export declare abstract class VpcV2Base extends Resource implements IVpcV2 {
|
|
|
159
178
|
* Secondary IPs for the VPC, can be multiple Ipv4 or Ipv6
|
|
160
179
|
* Ipv4 should be within RFC#1918 range
|
|
161
180
|
*/
|
|
162
|
-
abstract readonly secondaryCidrBlock
|
|
181
|
+
abstract readonly secondaryCidrBlock?: IVPCCidrBlock[];
|
|
163
182
|
/**
|
|
164
183
|
* The primary IPv4 CIDR block associated with the VPC.
|
|
165
184
|
* Needed in order to validate the vpc range of subnet
|
|
@@ -168,6 +187,20 @@ export declare abstract class VpcV2Base extends Resource implements IVpcV2 {
|
|
|
168
187
|
*/
|
|
169
188
|
abstract readonly ipv4CidrBlock: string;
|
|
170
189
|
/**
|
|
190
|
+
* Region for this VPC
|
|
191
|
+
*/
|
|
192
|
+
abstract readonly region: string;
|
|
193
|
+
/**
|
|
194
|
+
* Identifier of the owner for this VPC
|
|
195
|
+
*/
|
|
196
|
+
abstract readonly ownerAccountId: string;
|
|
197
|
+
/**
|
|
198
|
+
* IPv4 CIDR provisioned under pool
|
|
199
|
+
* Required to check for overlapping CIDRs after provisioning
|
|
200
|
+
* is complete under IPAM pool
|
|
201
|
+
*/
|
|
202
|
+
abstract readonly ipv4IpamProvisionedCidrs?: string[];
|
|
203
|
+
/**
|
|
171
204
|
* If this is set to true, don't error out on trying to select subnets
|
|
172
205
|
*/
|
|
173
206
|
protected incompleteSubnetDefinition: boolean;
|