@aws-cdk/aws-ec2-alpha 2.174.1-alpha.0 → 2.175.1-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 +385 -223
- package/.jsii.tabl.json.gz +0 -0
- package/README.md +19 -0
- package/lib/ipam.d.ts +12 -0
- package/lib/ipam.js +13 -3
- package/lib/route.d.ts +7 -1
- package/lib/route.js +38 -11
- package/lib/subnet-v2.js +18 -3
- package/lib/vpc-v2-base.d.ts +23 -0
- package/lib/vpc-v2-base.js +7 -2
- package/lib/vpc-v2.d.ts +5 -0
- package/lib/vpc-v2.js +10 -4
- package/package.json +7 -7
- package/rosetta/default.ts-fixture +1 -1
package/lib/route.js
CHANGED
|
@@ -23,6 +23,10 @@ var NatConnectivityType;
|
|
|
23
23
|
*/
|
|
24
24
|
NatConnectivityType["PRIVATE"] = "private";
|
|
25
25
|
})(NatConnectivityType || (exports.NatConnectivityType = NatConnectivityType = {}));
|
|
26
|
+
/**
|
|
27
|
+
* Name tag constant
|
|
28
|
+
*/
|
|
29
|
+
const NAME_TAG = 'Name';
|
|
26
30
|
/**
|
|
27
31
|
* Creates an egress-only internet gateway
|
|
28
32
|
* @resource AWS::EC2::EgressOnlyInternetGateway
|
|
@@ -39,6 +43,9 @@ class EgressOnlyInternetGateway extends core_1.Resource {
|
|
|
39
43
|
}
|
|
40
44
|
throw error;
|
|
41
45
|
}
|
|
46
|
+
if (props.egressOnlyInternetGatewayName) {
|
|
47
|
+
core_1.Tags.of(this).add(NAME_TAG, props.egressOnlyInternetGatewayName);
|
|
48
|
+
}
|
|
42
49
|
this.routerType = aws_ec2_1.RouterType.EGRESS_ONLY_INTERNET_GATEWAY;
|
|
43
50
|
this.resource = new aws_ec2_1.CfnEgressOnlyInternetGateway(this, 'EIGW', {
|
|
44
51
|
vpcId: props.vpc.vpcId,
|
|
@@ -49,7 +56,7 @@ class EgressOnlyInternetGateway extends core_1.Resource {
|
|
|
49
56
|
}
|
|
50
57
|
exports.EgressOnlyInternetGateway = EgressOnlyInternetGateway;
|
|
51
58
|
_a = JSII_RTTI_SYMBOL_1;
|
|
52
|
-
EgressOnlyInternetGateway[_a] = { fqn: "@aws-cdk/aws-ec2-alpha.EgressOnlyInternetGateway", version: "2.
|
|
59
|
+
EgressOnlyInternetGateway[_a] = { fqn: "@aws-cdk/aws-ec2-alpha.EgressOnlyInternetGateway", version: "2.175.1-alpha.0" };
|
|
53
60
|
/**
|
|
54
61
|
* Creates an internet gateway
|
|
55
62
|
* @resource AWS::EC2::InternetGateway
|
|
@@ -71,6 +78,9 @@ class InternetGateway extends core_1.Resource {
|
|
|
71
78
|
this.node.defaultChild = this.resource;
|
|
72
79
|
this.routerTargetId = this.resource.attrInternetGatewayId;
|
|
73
80
|
this.vpcId = props.vpc.vpcId;
|
|
81
|
+
if (props.internetGatewayName) {
|
|
82
|
+
core_1.Tags.of(this).add(NAME_TAG, props.internetGatewayName);
|
|
83
|
+
}
|
|
74
84
|
new aws_ec2_1.CfnVPCGatewayAttachment(this, 'GWAttachment', {
|
|
75
85
|
vpcId: this.vpcId,
|
|
76
86
|
internetGatewayId: this.routerTargetId,
|
|
@@ -79,14 +89,16 @@ class InternetGateway extends core_1.Resource {
|
|
|
79
89
|
}
|
|
80
90
|
exports.InternetGateway = InternetGateway;
|
|
81
91
|
_b = JSII_RTTI_SYMBOL_1;
|
|
82
|
-
InternetGateway[_b] = { fqn: "@aws-cdk/aws-ec2-alpha.InternetGateway", version: "2.
|
|
92
|
+
InternetGateway[_b] = { fqn: "@aws-cdk/aws-ec2-alpha.InternetGateway", version: "2.175.1-alpha.0" };
|
|
83
93
|
/**
|
|
84
94
|
* Creates a virtual private gateway
|
|
85
95
|
* @resource AWS::EC2::VPNGateway
|
|
86
96
|
*/
|
|
87
97
|
class VPNGatewayV2 extends core_1.Resource {
|
|
88
98
|
constructor(scope, id, props) {
|
|
89
|
-
super(scope, id
|
|
99
|
+
super(scope, id, {
|
|
100
|
+
physicalName: props.vpnGatewayName,
|
|
101
|
+
});
|
|
90
102
|
try {
|
|
91
103
|
jsiiDeprecationWarnings._aws_cdk_aws_ec2_alpha_VPNGatewayV2Props(props);
|
|
92
104
|
}
|
|
@@ -108,6 +120,9 @@ class VPNGatewayV2 extends core_1.Resource {
|
|
|
108
120
|
vpcId: this.vpcId,
|
|
109
121
|
vpnGatewayId: this.resource.attrVpnGatewayId,
|
|
110
122
|
});
|
|
123
|
+
if (props.vpnGatewayName) {
|
|
124
|
+
core_1.Tags.of(this).add(NAME_TAG, props.vpnGatewayName);
|
|
125
|
+
}
|
|
111
126
|
// Propagate routes on route tables associated with the right subnets
|
|
112
127
|
const vpnRoutePropagation = props.vpnRoutePropagation ?? [];
|
|
113
128
|
const subnets = vpnRoutePropagation.map(s => props.vpc.selectSubnets(s).subnets).flat();
|
|
@@ -127,7 +142,7 @@ class VPNGatewayV2 extends core_1.Resource {
|
|
|
127
142
|
}
|
|
128
143
|
exports.VPNGatewayV2 = VPNGatewayV2;
|
|
129
144
|
_c = JSII_RTTI_SYMBOL_1;
|
|
130
|
-
VPNGatewayV2[_c] = { fqn: "@aws-cdk/aws-ec2-alpha.VPNGatewayV2", version: "2.
|
|
145
|
+
VPNGatewayV2[_c] = { fqn: "@aws-cdk/aws-ec2-alpha.VPNGatewayV2", version: "2.175.1-alpha.0" };
|
|
131
146
|
/**
|
|
132
147
|
* Creates a network address translation (NAT) gateway
|
|
133
148
|
* @resource AWS::EC2::NatGateway
|
|
@@ -152,6 +167,9 @@ class NatGateway extends core_1.Resource {
|
|
|
152
167
|
throw new Error('Either provide vpc or allocationId');
|
|
153
168
|
}
|
|
154
169
|
}
|
|
170
|
+
if (props.natGatewayName) {
|
|
171
|
+
core_1.Tags.of(this).add(NAME_TAG, props?.natGatewayName);
|
|
172
|
+
}
|
|
155
173
|
// If user does not provide EIP, generate one for them
|
|
156
174
|
var aId;
|
|
157
175
|
if (this.connectivityType === NatConnectivityType.PUBLIC) {
|
|
@@ -172,6 +190,7 @@ class NatGateway extends core_1.Resource {
|
|
|
172
190
|
secondaryAllocationIds: props.secondaryAllocationIds,
|
|
173
191
|
...props,
|
|
174
192
|
});
|
|
193
|
+
this.natGatewayId = this.resource.attrNatGatewayId;
|
|
175
194
|
this.routerTargetId = this.resource.attrNatGatewayId;
|
|
176
195
|
this.node.defaultChild = this.resource;
|
|
177
196
|
this.node.addDependency(props.subnet.internetConnectivityEstablished);
|
|
@@ -179,7 +198,7 @@ class NatGateway extends core_1.Resource {
|
|
|
179
198
|
}
|
|
180
199
|
exports.NatGateway = NatGateway;
|
|
181
200
|
_d = JSII_RTTI_SYMBOL_1;
|
|
182
|
-
NatGateway[_d] = { fqn: "@aws-cdk/aws-ec2-alpha.NatGateway", version: "2.
|
|
201
|
+
NatGateway[_d] = { fqn: "@aws-cdk/aws-ec2-alpha.NatGateway", version: "2.175.1-alpha.0" };
|
|
183
202
|
/**
|
|
184
203
|
* Creates a peering connection between two VPCs
|
|
185
204
|
* @resource AWS::EC2::VPCPeeringConnection
|
|
@@ -208,6 +227,9 @@ class VPCPeeringConnection extends core_1.Resource {
|
|
|
208
227
|
if (overlap) {
|
|
209
228
|
throw new Error('CIDR block should not overlap with each other for establishing a peering connection');
|
|
210
229
|
}
|
|
230
|
+
if (props.vpcPeeringConnectionName) {
|
|
231
|
+
core_1.Tags.of(this).add(NAME_TAG, props.vpcPeeringConnectionName);
|
|
232
|
+
}
|
|
211
233
|
this.resource = new aws_ec2_1.CfnVPCPeeringConnection(this, 'VPCPeeringConnection', {
|
|
212
234
|
vpcId: props.requestorVpc.vpcId,
|
|
213
235
|
peerVpcId: props.acceptorVpc.vpcId,
|
|
@@ -255,7 +277,7 @@ class VPCPeeringConnection extends core_1.Resource {
|
|
|
255
277
|
}
|
|
256
278
|
exports.VPCPeeringConnection = VPCPeeringConnection;
|
|
257
279
|
_e = JSII_RTTI_SYMBOL_1;
|
|
258
|
-
VPCPeeringConnection[_e] = { fqn: "@aws-cdk/aws-ec2-alpha.VPCPeeringConnection", version: "2.
|
|
280
|
+
VPCPeeringConnection[_e] = { fqn: "@aws-cdk/aws-ec2-alpha.VPCPeeringConnection", version: "2.175.1-alpha.0" };
|
|
259
281
|
/**
|
|
260
282
|
* The gateway or endpoint targeted by the route.
|
|
261
283
|
*/
|
|
@@ -281,7 +303,7 @@ class RouteTargetType {
|
|
|
281
303
|
}
|
|
282
304
|
exports.RouteTargetType = RouteTargetType;
|
|
283
305
|
_f = JSII_RTTI_SYMBOL_1;
|
|
284
|
-
RouteTargetType[_f] = { fqn: "@aws-cdk/aws-ec2-alpha.RouteTargetType", version: "2.
|
|
306
|
+
RouteTargetType[_f] = { fqn: "@aws-cdk/aws-ec2-alpha.RouteTargetType", version: "2.175.1-alpha.0" };
|
|
285
307
|
/**
|
|
286
308
|
* Creates a new route with added functionality.
|
|
287
309
|
* @resource AWS::EC2::Route
|
|
@@ -335,7 +357,7 @@ class Route extends core_1.Resource {
|
|
|
335
357
|
}
|
|
336
358
|
exports.Route = Route;
|
|
337
359
|
_g = JSII_RTTI_SYMBOL_1;
|
|
338
|
-
Route[_g] = { fqn: "@aws-cdk/aws-ec2-alpha.Route", version: "2.
|
|
360
|
+
Route[_g] = { fqn: "@aws-cdk/aws-ec2-alpha.Route", version: "2.175.1-alpha.0" };
|
|
339
361
|
/**
|
|
340
362
|
* Creates a route table for the specified VPC
|
|
341
363
|
* @resource AWS::EC2::RouteTable
|
|
@@ -355,6 +377,9 @@ class RouteTable extends core_1.Resource {
|
|
|
355
377
|
this.resource = new aws_ec2_1.CfnRouteTable(this, 'RouteTable', {
|
|
356
378
|
vpcId: props.vpc.vpcId,
|
|
357
379
|
});
|
|
380
|
+
if (props.routeTableName) {
|
|
381
|
+
core_1.Tags.of(this).add(NAME_TAG, props.routeTableName);
|
|
382
|
+
}
|
|
358
383
|
this.node.defaultChild = this.resource;
|
|
359
384
|
this.routeTableId = this.resource.attrRouteTableId;
|
|
360
385
|
}
|
|
@@ -363,8 +388,9 @@ class RouteTable extends core_1.Resource {
|
|
|
363
388
|
*
|
|
364
389
|
* @param destination The IPv4 or IPv6 CIDR block used for the destination match.
|
|
365
390
|
* @param target The gateway or endpoint targeted by the route.
|
|
391
|
+
* @param routeName The resource name of the route.
|
|
366
392
|
*/
|
|
367
|
-
addRoute(id, destination, target) {
|
|
393
|
+
addRoute(id, destination, target, routeName) {
|
|
368
394
|
try {
|
|
369
395
|
jsiiDeprecationWarnings._aws_cdk_aws_ec2_alpha_RouteTargetType(target);
|
|
370
396
|
}
|
|
@@ -378,12 +404,13 @@ class RouteTable extends core_1.Resource {
|
|
|
378
404
|
routeTable: this,
|
|
379
405
|
destination: destination,
|
|
380
406
|
target: target,
|
|
407
|
+
routeName: routeName,
|
|
381
408
|
});
|
|
382
409
|
}
|
|
383
410
|
}
|
|
384
411
|
exports.RouteTable = RouteTable;
|
|
385
412
|
_h = JSII_RTTI_SYMBOL_1;
|
|
386
|
-
RouteTable[_h] = { fqn: "@aws-cdk/aws-ec2-alpha.RouteTable", version: "2.
|
|
413
|
+
RouteTable[_h] = { fqn: "@aws-cdk/aws-ec2-alpha.RouteTable", version: "2.175.1-alpha.0" };
|
|
387
414
|
function routerTypeToPropName(routerType) {
|
|
388
415
|
return ({
|
|
389
416
|
[aws_ec2_1.RouterType.CARRIER_GATEWAY]: 'carrierGatewayId',
|
|
@@ -398,4 +425,4 @@ function routerTypeToPropName(routerType) {
|
|
|
398
425
|
[aws_ec2_1.RouterType.VPC_ENDPOINT]: 'vpcEndpointId',
|
|
399
426
|
})[routerType];
|
|
400
427
|
}
|
|
401
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJyb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxpREFBa1M7QUFFbFMsMkNBQThFO0FBRTlFLGlDQUFtRTtBQUduRTs7OztHQUlHO0FBQ0gsSUFBWSxtQkFTWDtBQVRELFdBQVksbUJBQW1CO0lBQzdCOztPQUVHO0lBQ0gsd0NBQWlCLENBQUE7SUFDakI7O09BRUc7SUFDSCwwQ0FBbUIsQ0FBQTtBQUNyQixDQUFDLEVBVFcsbUJBQW1CLG1DQUFuQixtQkFBbUIsUUFTOUI7QUE4TEQ7OztHQUdHO0FBQ0gsTUFBYSx5QkFBMEIsU0FBUSxlQUFRO0lBZ0JyRCxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQXFDO1FBQzdFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7Ozs7OzsrQ0FqQlIseUJBQXlCOzs7O1FBbUJsQyxJQUFJLENBQUMsVUFBVSxHQUFHLG9CQUFVLENBQUMsNEJBQTRCLENBQUM7UUFFMUQsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLHNDQUE0QixDQUFDLElBQUksRUFBRSxNQUFNLEVBQUU7WUFDN0QsS0FBSyxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSztTQUN2QixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBRXZDLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7S0FDNUM7O0FBM0JILDhEQTRCQzs7O0FBRUQ7OztHQUdHO0FBQ0gsTUFBYSxlQUFnQixTQUFRLGVBQVE7SUFxQjNDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBMkI7UUFDbkUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQzs7Ozs7OytDQXRCUixlQUFlOzs7O1FBd0J4QixJQUFJLENBQUMsVUFBVSxHQUFHLG9CQUFVLENBQUMsT0FBTyxDQUFDO1FBRXJDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSw0QkFBa0IsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3hELElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7UUFFdkMsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLHFCQUFxQixDQUFDO1FBQzFELElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUM7UUFFN0IsSUFBSSxpQ0FBdUIsQ0FBQyxJQUFJLEVBQUUsY0FBYyxFQUFFO1lBQ2hELEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSztZQUNqQixpQkFBaUIsRUFBRSxJQUFJLENBQUMsY0FBYztTQUN2QyxDQUFDLENBQUM7S0FDSjs7QUFwQ0gsMENBcUNDOzs7QUFFRDs7O0dBR0c7QUFDSCxNQUFhLFlBQWEsU0FBUSxlQUFRO0lBK0J4QyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQXdCO1FBQ2hFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7Ozs7OzsrQ0FoQ1IsWUFBWTs7OztRQWtDckIsSUFBSSxDQUFDLFVBQVUsR0FBRyxvQkFBVSxDQUFDLE9BQU8sQ0FBQztRQUVyQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksdUJBQWEsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFO1lBQzdDLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSTtZQUNoQixhQUFhLEVBQUUsS0FBSyxDQUFDLGFBQWE7U0FDbkMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUV2QyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUM7UUFFckQsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQztRQUM3QixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksaUNBQXVCLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRTtZQUMvRCxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUs7WUFDakIsWUFBWSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCO1NBQzdDLENBQUMsQ0FBQztRQUVILHFFQUFxRTtRQUNyRSxNQUFNLG1CQUFtQixHQUFHLEtBQUssQ0FBQyxtQkFBbUIsSUFBSSxFQUFFLENBQUM7UUFDNUQsTUFBTSxPQUFPLEdBQUcsbUJBQW1CLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDeEYsTUFBTSxhQUFhLEdBQUcsSUFBQSx1QkFBZ0IsRUFBQyxPQUFPLENBQUMsQ0FBQztRQUVoRCxJQUFJLGFBQWEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDL0Isa0JBQVcsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsWUFBWSxDQUFDLDJDQUEyQyxFQUFFLG1DQUFtQyxJQUFJLENBQUMsU0FBUyxDQUFDLG1CQUFtQixDQUFDLDJDQUEyQyxDQUFDLENBQUM7UUFDck0sQ0FBQztRQUVELElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLHVDQUE2QixDQUFDLElBQUksRUFBRSxrQkFBa0IsRUFBRTtZQUNuRixhQUFhO1lBQ2IsWUFBWSxFQUFFLElBQUksQ0FBQyxjQUFjO1NBQ2xDLENBQUMsQ0FBQztRQUNILCtFQUErRTtRQUMvRSxpREFBaUQ7UUFDakQsZ0hBQWdIO1FBQ2hILElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztLQUM3RDs7QUFuRUgsb0NBb0VDOzs7QUFFRDs7O0dBR0c7QUFDSCxNQUFhLFVBQVcsU0FBUSxlQUFRO0lBK0J0QyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQXNCO1FBQzlELEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7Ozs7OzsrQ0FoQ1IsVUFBVTs7OztRQWtDbkIsSUFBSSxDQUFDLFVBQVUsR0FBRyxvQkFBVSxDQUFDLFdBQVcsQ0FBQztRQUV6QyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDLGdCQUFnQixJQUFJLG1CQUFtQixDQUFDLE1BQU0sQ0FBQztRQUM3RSxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDLGdCQUFnQixJQUFJLGVBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFeEUsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEtBQUssbUJBQW1CLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDekQsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQ3RDLE1BQU0sSUFBSSxLQUFLLENBQUMsb0NBQW9DLENBQUMsQ0FBQztZQUN4RCxDQUFDO1FBQ0gsQ0FBQztRQUVELHNEQUFzRDtRQUN0RCxJQUFJLEdBQXVCLENBQUM7UUFDNUIsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEtBQUssbUJBQW1CLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDekQsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUUsQ0FBQztnQkFDeEIsSUFBSSxHQUFHLEdBQUcsSUFBSSxnQkFBTSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUU7b0JBQ2hDLE1BQU0sRUFBRSxLQUFLLENBQUMsR0FBRyxFQUFFLEtBQUs7aUJBQ3pCLENBQUMsQ0FBQztnQkFDSCxHQUFHLEdBQUcsR0FBRyxDQUFDLGdCQUFnQixDQUFDO1lBQzdCLENBQUM7aUJBQU0sQ0FBQztnQkFDTixHQUFHLEdBQUcsS0FBSyxDQUFDLFlBQVksQ0FBQztZQUMzQixDQUFDO1FBQ0gsQ0FBQztRQUVELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSx1QkFBYSxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUU7WUFDcEQsUUFBUSxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsUUFBUTtZQUMvQixZQUFZLEVBQUUsR0FBRztZQUNqQix1QkFBdUIsRUFBRSxLQUFLLENBQUMsZ0JBQWdCLEVBQUUsU0FBUyxFQUFFO1lBQzVELHNCQUFzQixFQUFFLEtBQUssQ0FBQyxzQkFBc0I7WUFDcEQsR0FBRyxLQUFLO1NBQ1QsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDO1FBQ3JELElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDdkMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO0tBQ3ZFOztBQXJFSCxnQ0FzRUM7OztBQUVEOzs7R0FHRztBQUNILE1BQWEsb0JBQXFCLFNBQVEsZUFBUTtJQWlCaEQsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUFnQztRQUN4RSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDOzs7Ozs7K0NBbEJSLG9CQUFvQjs7OztRQW9CN0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxvQkFBVSxDQUFDLHNCQUFzQixDQUFDO1FBRXBELE1BQU0sY0FBYyxHQUFHLEtBQUssQ0FBQyxZQUFZLENBQUMsY0FBYyxLQUFLLEtBQUssQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDO1FBRTlGLElBQUksQ0FBQyxjQUFjLElBQUksS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3pDLE1BQU0sSUFBSSxLQUFLLENBQUMsb0RBQW9ELENBQUMsQ0FBQztRQUN4RSxDQUFDO1FBRUQsSUFBSSxjQUFjLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDekMsTUFBTSxJQUFJLEtBQUssQ0FBQyxnREFBZ0QsQ0FBQyxDQUFDO1FBQ3BFLENBQUM7UUFFRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsS0FBSyxDQUFDLFlBQVksRUFBRSxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDbkYsSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUNaLE1BQU0sSUFBSSxLQUFLLENBQUMscUZBQXFGLENBQUMsQ0FBQztRQUN6RyxDQUFDO1FBRUQsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLGlDQUF1QixDQUFDLElBQUksRUFBRSxzQkFBc0IsRUFBRTtZQUN4RSxLQUFLLEVBQUUsS0FBSyxDQUFDLFlBQVksQ0FBQyxLQUFLO1lBQy9CLFNBQVMsRUFBRSxLQUFLLENBQUMsV0FBVyxDQUFDLEtBQUs7WUFDbEMsV0FBVyxFQUFFLEtBQUssQ0FBQyxXQUFXLENBQUMsY0FBYztZQUM3QyxVQUFVLEVBQUUsS0FBSyxDQUFDLFdBQVcsQ0FBQyxNQUFNO1lBQ3BDLFdBQVcsRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLFNBQVM7U0FDNUQsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQztRQUMzQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO0tBQ3hDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNLLHNCQUFzQixDQUFDLFlBQW9CLEVBQUUsV0FBbUI7UUFFdEUsTUFBTSxjQUFjLEdBQUcsQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDcEQsTUFBTSxhQUFhLEdBQUcsQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLENBQUM7UUFFbEQsSUFBSSxZQUFZLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUNwQyxjQUFjLENBQUMsSUFBSSxDQUFDLEdBQUcsWUFBWSxDQUFDLGtCQUFrQjtpQkFDbkQsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQztpQkFDN0IsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFrQixFQUFFLENBQUMsSUFBSSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFDM0QsQ0FBQztRQUVELElBQUksV0FBVyxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDbkMsYUFBYSxDQUFDLElBQUksQ0FBQyxHQUFHLFdBQVcsQ0FBQyxrQkFBa0I7aUJBQ2pELEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUM7aUJBQzdCLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBa0IsRUFBRSxDQUFDLElBQUksS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBQzNELENBQUM7UUFFRCxLQUFLLE1BQU0sYUFBYSxJQUFJLGNBQWMsRUFBRSxDQUFDO1lBQzNDLE1BQU0sY0FBYyxHQUFHLElBQUksZ0JBQVMsQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUNwRCxNQUFNLGdCQUFnQixHQUFxQixDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxjQUFjLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztZQUU1RixLQUFLLE1BQU0sWUFBWSxJQUFJLGFBQWEsRUFBRSxDQUFDO2dCQUN6QyxNQUFNLGFBQWEsR0FBRyxJQUFJLGdCQUFTLENBQUMsWUFBWSxDQUFDLENBQUM7Z0JBQ2xELE1BQU0sZUFBZSxHQUFxQixDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsRUFBRSxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztnQkFFekYsSUFBSSxjQUFjLENBQUMsYUFBYSxDQUFDLGVBQWUsRUFBRSxnQkFBZ0IsQ0FBQyxFQUFFLENBQUM7b0JBQ3BFLE9BQU8sSUFBSSxDQUFDO2dCQUNkLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU8sS0FBSyxDQUFDO0tBQ2Q7O0FBekZILG9EQTJGQzs7O0FBdUJEOztHQUVHO0FBQ0gsTUFBYSxlQUFlO0lBaUIxQixZQUFZLEtBQXVCOzs7Ozs7K0NBakJ4QixlQUFlOzs7O1FBa0J4QixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztZQUM3RSxNQUFNLElBQUksS0FBSyxDQUFDLDJEQUEyRCxDQUFDLENBQUM7UUFDL0UsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUM7WUFDN0IsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDO1FBQ2pDLENBQUM7S0FDRjs7QUF4QkgsMENBeUJDOzs7QUF5REQ7OztHQUdHO0FBQ0gsTUFBYSxLQUFNLFNBQVEsZUFBUTtJQXVDakMsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUFpQjtRQUN6RCxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDOzs7Ozs7K0NBeENSLEtBQUs7Ozs7UUEwQ2QsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDO1FBQzNCLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQztRQUNuQyxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUM7UUFDckMsTUFBTSxpQkFBaUIsR0FBRyxtQkFBWSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDbEUsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDdkIsbUNBQW1DO1lBQ25DLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDO1FBQy9DLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLG1CQUFtQixHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUM7UUFDL0MsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsVUFBVSxLQUFLLG9CQUFVLENBQUMsNEJBQTRCLElBQUksaUJBQWlCLEVBQUUsQ0FBQztZQUNyRyxNQUFNLElBQUksS0FBSyxDQUFDLDREQUE0RCxDQUFDLENBQUM7UUFDaEYsQ0FBQztRQUNELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxvQkFBVSxDQUFDLFlBQVksQ0FBQztRQUV2RywrR0FBK0c7UUFDL0csSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLFlBQVksNEJBQWtCLENBQUMsRUFBRSxDQUFDO1lBQzFELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxrQkFBUSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUU7Z0JBQzFDLFlBQVksRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVk7Z0JBQzFDLG9CQUFvQixFQUFFLElBQUksQ0FBQyxtQkFBbUI7Z0JBQzlDLHdCQUF3QixFQUFFLElBQUksQ0FBQyxtQkFBbUI7Z0JBQ2xELENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUM7b0JBQ3ZHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUk7YUFDbkUsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7UUFFdkMsaUVBQWlFO1FBQ2pFLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUN4QixJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQy9DLENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDekIsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNoRCxDQUFDO0tBQ0Y7O0FBN0VILHNCQThFQzs7O0FBbUJEOzs7R0FHRztBQUNILE1BQWEsVUFBVyxTQUFRLGVBQVE7SUFXdEMsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUFzQjtRQUM5RCxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDOzs7Ozs7K0NBWlIsVUFBVTs7OztRQWNuQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksdUJBQWEsQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFO1lBQ3BELEtBQUssRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUs7U0FDdkIsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUV2QyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUM7S0FDcEQ7SUFFRDs7Ozs7T0FLRztJQUNJLFFBQVEsQ0FBQyxFQUFVLEVBQUUsV0FBbUIsRUFBRSxNQUF1Qjs7Ozs7Ozs7OztRQUN0RSxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFO1lBQ2xCLFVBQVUsRUFBRSxJQUFJO1lBQ2hCLFdBQVcsRUFBRSxXQUFXO1lBQ3hCLE1BQU0sRUFBRSxNQUFNO1NBQ2YsQ0FBQyxDQUFDO0tBQ0o7O0FBbENILGdDQW1DQzs7O0FBRUQsU0FBUyxvQkFBb0IsQ0FBQyxVQUFzQjtJQUNsRCxPQUFPLENBQUM7UUFDTixDQUFDLG9CQUFVLENBQUMsZUFBZSxDQUFDLEVBQUUsa0JBQWtCO1FBQ2hELENBQUMsb0JBQVUsQ0FBQyw0QkFBNEIsQ0FBQyxFQUFFLDZCQUE2QjtRQUN4RSxDQUFDLG9CQUFVLENBQUMsT0FBTyxDQUFDLEVBQUUsV0FBVztRQUNqQyxDQUFDLG9CQUFVLENBQUMsUUFBUSxDQUFDLEVBQUUsWUFBWTtRQUNuQyxDQUFDLG9CQUFVLENBQUMsYUFBYSxDQUFDLEVBQUUsZ0JBQWdCO1FBQzVDLENBQUMsb0JBQVUsQ0FBQyxXQUFXLENBQUMsRUFBRSxjQUFjO1FBQ3hDLENBQUMsb0JBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLG9CQUFvQjtRQUNwRCxDQUFDLG9CQUFVLENBQUMsZUFBZSxDQUFDLEVBQUUsa0JBQWtCO1FBQ2hELENBQUMsb0JBQVUsQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFLHdCQUF3QjtRQUM3RCxDQUFDLG9CQUFVLENBQUMsWUFBWSxDQUFDLEVBQUUsZUFBZTtLQUMzQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDakIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENmbkVJUCwgQ2ZuRWdyZXNzT25seUludGVybmV0R2F0ZXdheSwgQ2ZuSW50ZXJuZXRHYXRld2F5LCBDZm5OYXRHYXRld2F5LCBDZm5WUENQZWVyaW5nQ29ubmVjdGlvbiwgQ2ZuUm91dGUsIENmblJvdXRlVGFibGUsIENmblZQQ0dhdGV3YXlBdHRhY2htZW50LCBDZm5WUE5HYXRld2F5LCBDZm5WUE5HYXRld2F5Um91dGVQcm9wYWdhdGlvbiwgR2F0ZXdheVZwY0VuZHBvaW50LCBJUm91dGVUYWJsZSwgSVZwY0VuZHBvaW50LCBSb3V0ZXJUeXBlIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWVjMic7XG5pbXBvcnQgeyBDb25zdHJ1Y3QsIElEZXBlbmRhYmxlIH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBBbm5vdGF0aW9ucywgRHVyYXRpb24sIElSZXNvdXJjZSwgUmVzb3VyY2UgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlJztcbmltcG9ydCB7IElWcGNWMiwgVlBOR2F0ZXdheVYyT3B0aW9ucyB9IGZyb20gJy4vdnBjLXYyLWJhc2UnO1xuaW1wb3J0IHsgTmV0d29ya1V0aWxzLCBhbGxSb3V0ZVRhYmxlSWRzLCBDaWRyQmxvY2sgfSBmcm9tICcuL3V0aWwnO1xuaW1wb3J0IHsgSVN1Ym5ldFYyIH0gZnJvbSAnLi9zdWJuZXQtdjInO1xuXG4vKipcbiAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBOQVQgZ2F0ZXdheSBzdXBwb3J0cyBwdWJsaWMgb3IgcHJpdmF0ZSBjb25uZWN0aXZpdHkuXG4gKiBUaGUgZGVmYXVsdCBpcyBwdWJsaWMgY29ubmVjdGl2aXR5LlxuICogU2VlOiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcmVzb3VyY2UtZWMyLW5hdGdhdGV3YXkuaHRtbCNjZm4tZWMyLW5hdGdhdGV3YXktY29ubmVjdGl2aXR5dHlwZVxuICovXG5leHBvcnQgZW51bSBOYXRDb25uZWN0aXZpdHlUeXBlIHtcbiAgLyoqXG4gICAqIFNldHMgQ29ubmVjdGl2aXR5IHR5cGUgdG8gUFVCTElDXG4gICAqL1xuICBQVUJMSUMgPSAncHVibGljJyxcbiAgLyoqXG4gICAqIFNldHMgQ29ubmVjdGl2aXR5IHR5cGUgdG8gUFJJVkFURVxuICAgKi9cbiAgUFJJVkFURSA9ICdwcml2YXRlJyxcbn1cblxuLyoqXG4gKiBJbnRlcmZhY2UgdG8gZGVmaW5lIGEgcm91dGluZyB0YXJnZXQsIHN1Y2ggYXMgYW5cbiAqIGVncmVzcy1vbmx5IGludGVybmV0IGdhdGV3YXkgb3IgVlBDIGVuZHBvaW50LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElSb3V0ZVRhcmdldCBleHRlbmRzIElEZXBlbmRhYmxlIHtcbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHJvdXRlciB1c2VkIGluIHRoZSByb3V0ZS5cbiAgICovXG4gIHJlYWRvbmx5IHJvdXRlclR5cGU6IFJvdXRlclR5cGU7XG5cbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgcm91dGUgdGFyZ2V0LlxuICAgKi9cbiAgcmVhZG9ubHkgcm91dGVyVGFyZ2V0SWQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIHRvIGRlZmluZSBhbiBlZ3Jlc3Mtb25seSBpbnRlcm5ldCBnYXRld2F5LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVncmVzc09ubHlJbnRlcm5ldEdhdGV3YXlQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgSUQgb2YgdGhlIFZQQyBmb3Igd2hpY2ggdG8gY3JlYXRlIHRoZSBlZ3Jlc3Mtb25seSBpbnRlcm5ldCBnYXRld2F5LlxuICAgKi9cbiAgcmVhZG9ubHkgdnBjOiBJVnBjVjI7XG5cbiAgLyoqXG4gICAqIFRoZSByZXNvdXJjZSBuYW1lIG9mIHRoZSBlZ3Jlc3Mtb25seSBpbnRlcm5ldCBnYXRld2F5LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHByb3Zpc2lvbmVkIHdpdGhvdXQgYSByZXNvdXJjZSBuYW1lXG4gICAqL1xuICByZWFkb25seSBlZ3Jlc3NPbmx5SW50ZXJuZXRHYXRld2F5TmFtZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIHRvIGRlZmluZSBhbiBpbnRlcm5ldCBnYXRld2F5LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEludGVybmV0R2F0ZXdheVByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgVlBDIGZvciB3aGljaCB0byBjcmVhdGUgdGhlIGludGVybmV0IGdhdGV3YXkuXG4gICAqL1xuICByZWFkb25seSB2cGM6IElWcGNWMjtcblxuICAvKipcbiAgICogVGhlIHJlc291cmNlIG5hbWUgb2YgdGhlIGludGVybmV0IGdhdGV3YXkuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gcHJvdmlzaW9uZWQgd2l0aG91dCBhIHJlc291cmNlIG5hbWVcbiAgICovXG4gIHJlYWRvbmx5IGludGVybmV0R2F0ZXdheU5hbWU/OiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIHRvIGRlZmluZSBhIFZQTiBnYXRld2F5LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFZQTkdhdGV3YXlWMlByb3BzIGV4dGVuZHMgVlBOR2F0ZXdheVYyT3B0aW9ucyB7XG5cbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgVlBDIGZvciB3aGljaCB0byBjcmVhdGUgdGhlIFZQTiBnYXRld2F5LlxuICAgKi9cbiAgcmVhZG9ubHkgdnBjOiBJVnBjVjI7XG59XG5cbi8qKlxuICogT3B0aW9ucyB0byBkZWZpbmUgYSBOQVQgZ2F0ZXdheS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOYXRHYXRld2F5T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgc3VibmV0IGluIHdoaWNoIHRoZSBOQVQgZ2F0ZXdheSBpcyBsb2NhdGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgc3VibmV0OiBJU3VibmV0VjI7XG5cbiAgLyoqXG4gICAqIEFsbG9jYXRpb25JRCBvZiBFbGFzdGljIElQIGFkZHJlc3MgdGhhdCdzIGFzc29jaWF0ZWQgd2l0aCB0aGUgTkFUIGdhdGV3YXkuIFRoaXMgcHJvcGVydHkgaXMgcmVxdWlyZWQgZm9yIGEgcHVibGljIE5BVFxuICAgKiBnYXRld2F5IGFuZCBjYW5ub3QgYmUgc3BlY2lmaWVkIHdpdGggYSBwcml2YXRlIE5BVCBnYXRld2F5LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGF0dHIuYWxsb2NhdGlvbklEIG9mIGEgbmV3IEVsYXN0aWMgSVAgY3JlYXRlZCBieSBkZWZhdWx0XG4gICAqIC8vVE9ETzogQUREIEwyIGZvciBlbGFzdGljIGlwXG4gICAqL1xuICByZWFkb25seSBhbGxvY2F0aW9uSWQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBOQVQgZ2F0ZXdheSBzdXBwb3J0cyBwdWJsaWMgb3IgcHJpdmF0ZSBjb25uZWN0aXZpdHkuXG4gICAqXG4gICAqIEBkZWZhdWx0IE5hdENvbm5lY3Rpdml0eVR5cGUuUHVibGljXG4gICAqL1xuICByZWFkb25seSBjb25uZWN0aXZpdHlUeXBlPzogTmF0Q29ubmVjdGl2aXR5VHlwZTtcblxuICAvKipcbiAgICogVGhlIG1heGltdW0gYW1vdW50IG9mIHRpbWUgdG8gd2FpdCBiZWZvcmUgZm9yY2libHkgcmVsZWFzaW5nIHRoZVxuICAgKiBJUCBhZGRyZXNzZXMgaWYgY29ubmVjdGlvbnMgYXJlIHN0aWxsIGluIHByb2dyZXNzLlxuICAgKlxuICAgKiBAZGVmYXVsdCAzNTBzZWNvbmRzXG4gICAqL1xuICByZWFkb25seSBtYXhEcmFpbkR1cmF0aW9uPzogRHVyYXRpb247XG5cbiAgLyoqXG4gICAqIFRoZSBwcml2YXRlIElQdjQgYWRkcmVzcyB0byBhc3NpZ24gdG8gdGhlIE5BVCBnYXRld2F5LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIElmIHlvdSBkb24ndCBwcm92aWRlIGFuIGFkZHJlc3MsIGEgcHJpdmF0ZSBJUHY0IGFkZHJlc3Mgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGFzc2lnbmVkLlxuICAgKi9cbiAgcmVhZG9ubHkgcHJpdmF0ZUlwQWRkcmVzcz86IHN0cmluZztcblxuICAvKipcbiAgICogU2Vjb25kYXJ5IEVJUCBhbGxvY2F0aW9uIElEcy5cbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vdnBjL2xhdGVzdC91c2VyZ3VpZGUvdnBjLW5hdC1nYXRld2F5Lmh0bWwjbmF0LWdhdGV3YXktY3JlYXRpbmdcbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBzZWNvbmRhcnkgYWxsb2NhdGlvbiBJRHMgYXR0YWNoZWQgdG8gTkFUR1dcbiAgICpcbiAgICovXG4gIHJlYWRvbmx5IHNlY29uZGFyeUFsbG9jYXRpb25JZHM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIG51bWJlciBvZiBzZWNvbmRhcnkgcHJpdmF0ZSBJUHY0IGFkZHJlc3NlcyB5b3VcbiAgICogd2FudCB0byBhc3NpZ24gdG8gdGhlIE5BVCBnYXRld2F5LlxuICAgKlxuICAgKiBgU2Vjb25kYXJ5UHJpdmF0ZUlwQWRkcmVzc0NvdW50YCBhbmQgYFNlY29uZGFyeVByaXZhdGVJcEFkZHJlc3Nlc2AgY2Fubm90IGJlXG4gICAqIHNldCBhdCB0aGUgc2FtZSB0aW1lLlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS92cGMvbGF0ZXN0L3VzZXJndWlkZS92cGMtbmF0LWdhdGV3YXkuaHRtbCNuYXQtZ2F0ZXdheS1jcmVhdGluZ1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIHNlY29uZGFyeSBhbGxvY2F0aW9uIElEcyBhc3NvY2lhdGVkIHdpdGggTkFUR1dcbiAgICovXG4gIHJlYWRvbmx5IHNlY29uZGFyeVByaXZhdGVJcEFkZHJlc3NDb3VudD86IG51bWJlcjtcblxuICAvKipcbiAgICogU2Vjb25kYXJ5IHByaXZhdGUgSVB2NCBhZGRyZXNzZXMuXG4gICAqXG4gICAqIGBTZWNvbmRhcnlQcml2YXRlSXBBZGRyZXNzQ291bnRgIGFuZCBgU2Vjb25kYXJ5UHJpdmF0ZUlwQWRkcmVzc2VzYCBjYW5ub3QgYmVcbiAgICogc2V0IGF0IHRoZSBzYW1lIHRpbWUuXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3ZwYy9sYXRlc3QvdXNlcmd1aWRlL3ZwYy1uYXQtZ2F0ZXdheS5odG1sI25hdC1nYXRld2F5LWNyZWF0aW5nXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gc2Vjb25kYXJ5IHByaXZhdGUgSXBBZGRyZXNzZXMgYXNzb2NpYXRlZCB3aXRoIE5BVEdXXG4gICAqL1xuICByZWFkb25seSBzZWNvbmRhcnlQcml2YXRlSXBBZGRyZXNzZXM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIHJlc291cmNlIG5hbWUgb2YgdGhlIE5BVCBnYXRld2F5LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5BVEdXIHByb3Zpc2lvbmVkIHdpdGhvdXQgYW55IG5hbWVcbiAgICovXG4gIHJlYWRvbmx5IG5hdEdhdGV3YXlOYW1lPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgdG8gZGVmaW5lIGEgTkFUIGdhdGV3YXkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTmF0R2F0ZXdheVByb3BzIGV4dGVuZHMgTmF0R2F0ZXdheU9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIElEIG9mIHRoZSBWUEMgaW4gd2hpY2ggdGhlIE5BVCBnYXRld2F5IGlzIGxvY2F0ZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gZWxhc3RpYyBpcCBhc3NvY2lhdGVkLCByZXF1aXJlZCBpbiBjYXNlIG9mIHB1YmxpYyBjb25uZWN0aXZpdHkgaWYgYEFsbG9jYXRpb25JZGAgaXMgbm90IGRlZmluZWRcbiAgICovXG4gIHJlYWRvbmx5IHZwYz86IElWcGNWMjtcbn1cblxuLyoqXG4gKiBPcHRpb25zIHRvIGRlZmluZSBhIFZQQyBwZWVyaW5nIGNvbm5lY3Rpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVlBDUGVlcmluZ0Nvbm5lY3Rpb25PcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBWUEMgdGhhdCBpcyBhY2NlcHRpbmcgdGhlIHBlZXJpbmcgY29ubmVjdGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IGFjY2VwdG9yVnBjOiBJVnBjVjI7XG5cbiAgLyoqXG4gICAqIFRoZSByb2xlIGFybiBjcmVhdGVkIGluIHRoZSBhY2NlcHRvciBhY2NvdW50LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIHBlZXJSb2xlQXJuIG5lZWRlZCBpZiBub3QgY3Jvc3MgYWNjb3VudCBjb25uZWN0aW9uXG4gICAqL1xuICByZWFkb25seSBwZWVyUm9sZUFybj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHJlc291cmNlIG5hbWUgb2YgdGhlIHBlZXJpbmcgY29ubmVjdGlvbi5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBwZWVyaW5nIGNvbm5lY3Rpb24gcHJvdmlzaW9uZWQgd2l0aG91dCBhbnkgbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgdnBjUGVlcmluZ0Nvbm5lY3Rpb25OYW1lPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgdG8gZGVmaW5lIGEgVlBDIHBlZXJpbmcgY29ubmVjdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWUENQZWVyaW5nQ29ubmVjdGlvblByb3BzIGV4dGVuZHMgVlBDUGVlcmluZ0Nvbm5lY3Rpb25PcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBWUEMgdGhhdCBpcyByZXF1ZXN0aW5nIHRoZSBwZWVyaW5nIGNvbm5lY3Rpb24uXG4gICAqL1xuICByZWFkb25seSByZXF1ZXN0b3JWcGM6IElWcGNWMjtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGFuIGVncmVzcy1vbmx5IGludGVybmV0IGdhdGV3YXlcbiAqIEByZXNvdXJjZSBBV1M6OkVDMjo6RWdyZXNzT25seUludGVybmV0R2F0ZXdheVxuICovXG5leHBvcnQgY2xhc3MgRWdyZXNzT25seUludGVybmV0R2F0ZXdheSBleHRlbmRzIFJlc291cmNlIGltcGxlbWVudHMgSVJvdXRlVGFyZ2V0IHtcbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHJvdXRlciB1c2VkIGluIHRoZSByb3V0ZS5cbiAgICovXG4gIHJlYWRvbmx5IHJvdXRlclR5cGU6IFJvdXRlclR5cGU7XG5cbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgcm91dGUgdGFyZ2V0LlxuICAgKi9cbiAgcmVhZG9ubHkgcm91dGVyVGFyZ2V0SWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGVncmVzcy1vbmx5IGludGVybmV0IGdhdGV3YXkgQ0ZOIHJlc291cmNlLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHJlc291cmNlOiBDZm5FZ3Jlc3NPbmx5SW50ZXJuZXRHYXRld2F5O1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBFZ3Jlc3NPbmx5SW50ZXJuZXRHYXRld2F5UHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgdGhpcy5yb3V0ZXJUeXBlID0gUm91dGVyVHlwZS5FR1JFU1NfT05MWV9JTlRFUk5FVF9HQVRFV0FZO1xuXG4gICAgdGhpcy5yZXNvdXJjZSA9IG5ldyBDZm5FZ3Jlc3NPbmx5SW50ZXJuZXRHYXRld2F5KHRoaXMsICdFSUdXJywge1xuICAgICAgdnBjSWQ6IHByb3BzLnZwYy52cGNJZCxcbiAgICB9KTtcbiAgICB0aGlzLm5vZGUuZGVmYXVsdENoaWxkID0gdGhpcy5yZXNvdXJjZTtcblxuICAgIHRoaXMucm91dGVyVGFyZ2V0SWQgPSB0aGlzLnJlc291cmNlLmF0dHJJZDtcbiAgfVxufVxuXG4vKipcbiAqIENyZWF0ZXMgYW4gaW50ZXJuZXQgZ2F0ZXdheVxuICogQHJlc291cmNlIEFXUzo6RUMyOjpJbnRlcm5ldEdhdGV3YXlcbiAqL1xuZXhwb3J0IGNsYXNzIEludGVybmV0R2F0ZXdheSBleHRlbmRzIFJlc291cmNlIGltcGxlbWVudHMgSVJvdXRlVGFyZ2V0IHtcbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHJvdXRlciB1c2VkIGluIHRoZSByb3V0ZS5cbiAgICovXG4gIHJlYWRvbmx5IHJvdXRlclR5cGU6IFJvdXRlclR5cGU7XG5cbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgcm91dGUgdGFyZ2V0LlxuICAgKi9cbiAgcmVhZG9ubHkgcm91dGVyVGFyZ2V0SWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIElEIG9mIHRoZSBWUEMgZm9yIHdoaWNoIHRvIGNyZWF0ZSB0aGUgaW50ZXJuZXQgZ2F0ZXdheS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB2cGNJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgaW50ZXJuZXQgZ2F0ZXdheSBDRk4gcmVzb3VyY2UuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcmVzb3VyY2U6IENmbkludGVybmV0R2F0ZXdheTtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogSW50ZXJuZXRHYXRld2F5UHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgdGhpcy5yb3V0ZXJUeXBlID0gUm91dGVyVHlwZS5HQVRFV0FZO1xuXG4gICAgdGhpcy5yZXNvdXJjZSA9IG5ldyBDZm5JbnRlcm5ldEdhdGV3YXkodGhpcywgJ0lHVycsIHt9KTtcbiAgICB0aGlzLm5vZGUuZGVmYXVsdENoaWxkID0gdGhpcy5yZXNvdXJjZTtcblxuICAgIHRoaXMucm91dGVyVGFyZ2V0SWQgPSB0aGlzLnJlc291cmNlLmF0dHJJbnRlcm5ldEdhdGV3YXlJZDtcbiAgICB0aGlzLnZwY0lkID0gcHJvcHMudnBjLnZwY0lkO1xuXG4gICAgbmV3IENmblZQQ0dhdGV3YXlBdHRhY2htZW50KHRoaXMsICdHV0F0dGFjaG1lbnQnLCB7XG4gICAgICB2cGNJZDogdGhpcy52cGNJZCxcbiAgICAgIGludGVybmV0R2F0ZXdheUlkOiB0aGlzLnJvdXRlclRhcmdldElkLFxuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHZpcnR1YWwgcHJpdmF0ZSBnYXRld2F5XG4gKiBAcmVzb3VyY2UgQVdTOjpFQzI6OlZQTkdhdGV3YXlcbiAqL1xuZXhwb3J0IGNsYXNzIFZQTkdhdGV3YXlWMiBleHRlbmRzIFJlc291cmNlIGltcGxlbWVudHMgSVJvdXRlVGFyZ2V0IHtcbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHJvdXRlciB1c2VkIGluIHRoZSByb3V0ZS5cbiAgICovXG4gIHJlYWRvbmx5IHJvdXRlclR5cGU6IFJvdXRlclR5cGU7XG5cbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgcm91dGUgdGFyZ2V0LlxuICAgKi9cbiAgcmVhZG9ubHkgcm91dGVyVGFyZ2V0SWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIElEIG9mIHRoZSBWUEMgZm9yIHdoaWNoIHRvIGNyZWF0ZSB0aGUgVlBOIGdhdGV3YXkuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdnBjSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIFZQTiBnYXRld2F5IENGTiByZXNvdXJjZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSByZXNvdXJjZTogQ2ZuVlBOR2F0ZXdheTtcblxuICAvKipcbiAgICogVGhlIFZQTiBHYXRld2F5IEF0dGFjaG1lbnRcbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgX2F0dGFjaG1lbnQ6IENmblZQQ0dhdGV3YXlBdHRhY2htZW50O1xuXG4gIC8qKlxuICAgKiBUaGUgVlBOIEdhdGV3YXkgUm91dGUgUHJvcG9nYXRpb25cbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgX3JvdXRlUHJvcGFnYXRpb246IENmblZQTkdhdGV3YXlSb3V0ZVByb3BhZ2F0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBWUE5HYXRld2F5VjJQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICB0aGlzLnJvdXRlclR5cGUgPSBSb3V0ZXJUeXBlLkdBVEVXQVk7XG5cbiAgICB0aGlzLnJlc291cmNlID0gbmV3IENmblZQTkdhdGV3YXkodGhpcywgJ0lHVycsIHtcbiAgICAgIHR5cGU6IHByb3BzLnR5cGUsXG4gICAgICBhbWF6b25TaWRlQXNuOiBwcm9wcy5hbWF6b25TaWRlQXNuLFxuICAgIH0pO1xuICAgIHRoaXMubm9kZS5kZWZhdWx0Q2hpbGQgPSB0aGlzLnJlc291cmNlO1xuXG4gICAgdGhpcy5yb3V0ZXJUYXJnZXRJZCA9IHRoaXMucmVzb3VyY2UuYXR0clZwbkdhdGV3YXlJZDtcblxuICAgIHRoaXMudnBjSWQgPSBwcm9wcy52cGMudnBjSWQ7XG4gICAgdGhpcy5fYXR0YWNobWVudCA9IG5ldyBDZm5WUENHYXRld2F5QXR0YWNobWVudCh0aGlzLCAnVlBDVlBOR1cnLCB7XG4gICAgICB2cGNJZDogdGhpcy52cGNJZCxcbiAgICAgIHZwbkdhdGV3YXlJZDogdGhpcy5yZXNvdXJjZS5hdHRyVnBuR2F0ZXdheUlkLFxuICAgIH0pO1xuXG4gICAgLy8gUHJvcGFnYXRlIHJvdXRlcyBvbiByb3V0ZSB0YWJsZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSByaWdodCBzdWJuZXRzXG4gICAgY29uc3QgdnBuUm91dGVQcm9wYWdhdGlvbiA9IHByb3BzLnZwblJvdXRlUHJvcGFnYXRpb24gPz8gW107XG4gICAgY29uc3Qgc3VibmV0cyA9IHZwblJvdXRlUHJvcGFnYXRpb24ubWFwKHMgPT4gcHJvcHMudnBjLnNlbGVjdFN1Ym5ldHMocykuc3VibmV0cykuZmxhdCgpO1xuICAgIGNvbnN0IHJvdXRlVGFibGVJZHMgPSBhbGxSb3V0ZVRhYmxlSWRzKHN1Ym5ldHMpO1xuXG4gICAgaWYgKHJvdXRlVGFibGVJZHMubGVuZ3RoID09PSAwKSB7XG4gICAgICBBbm5vdGF0aW9ucy5vZihzY29wZSkuYWRkV2FybmluZ1YyKCdAYXdzLWNkazphd3MtZWMyLWVscGhhOmVuYWJsZVZwbkdhdGV3YXlWMicsIGBObyBzdWJuZXRzIG1hdGNoaW5nIHNlbGVjdGlvbjogJyR7SlNPTi5zdHJpbmdpZnkodnBuUm91dGVQcm9wYWdhdGlvbil9Jy4gU2VsZWN0IG90aGVyIHN1Ym5ldHMgdG8gYWRkIHJvdXRlcyB0by5gKTtcbiAgICB9XG5cbiAgICB0aGlzLl9yb3V0ZVByb3BhZ2F0aW9uID0gbmV3IENmblZQTkdhdGV3YXlSb3V0ZVByb3BhZ2F0aW9uKHRoaXMsICdSb3V0ZVByb3BhZ2F0aW9uJywge1xuICAgICAgcm91dGVUYWJsZUlkcyxcbiAgICAgIHZwbkdhdGV3YXlJZDogdGhpcy5yb3V0ZXJUYXJnZXRJZCxcbiAgICB9KTtcbiAgICAvLyBUaGUgQVdTOjpFQzI6OlZQTkdhdGV3YXlSb3V0ZVByb3BhZ2F0aW9uIHJlc291cmNlIGNhbm5vdCB1c2UgdGhlIFZQTiBnYXRld2F5XG4gICAgLy8gdW50aWwgaXQgaGFzIHN1Y2Nlc3NmdWxseSBhdHRhY2hlZCB0byB0aGUgVlBDLlxuICAgIC8vIFNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcmVzb3VyY2UtZWMyLXZwbi1nYXRld2F5cm91dGVwcm9wLmh0bWxcbiAgICB0aGlzLl9yb3V0ZVByb3BhZ2F0aW9uLm5vZGUuYWRkRGVwZW5kZW5jeSh0aGlzLl9hdHRhY2htZW50KTtcbiAgfVxufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXR3b3JrIGFkZHJlc3MgdHJhbnNsYXRpb24gKE5BVCkgZ2F0ZXdheVxuICogQHJlc291cmNlIEFXUzo6RUMyOjpOYXRHYXRld2F5XG4gKi9cbmV4cG9ydCBjbGFzcyBOYXRHYXRld2F5IGV4dGVuZHMgUmVzb3VyY2UgaW1wbGVtZW50cyBJUm91dGVUYXJnZXQge1xuICAvKipcbiAgICogVGhlIHR5cGUgb2Ygcm91dGVyIHVzZWQgaW4gdGhlIHJvdXRlLlxuICAgKi9cbiAgcmVhZG9ubHkgcm91dGVyVHlwZTogUm91dGVyVHlwZTtcblxuICAvKipcbiAgICogVGhlIElEIG9mIHRoZSByb3V0ZSB0YXJnZXQuXG4gICAqL1xuICByZWFkb25seSByb3V0ZXJUYXJnZXRJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgTkFUIGdhdGV3YXkgc3VwcG9ydHMgcHVibGljIG9yIHByaXZhdGUgY29ubmVjdGl2aXR5LlxuICAgKlxuICAgKiBAZGVmYXVsdCBwdWJsaWNcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBjb25uZWN0aXZpdHlUeXBlPzogTmF0Q29ubmVjdGl2aXR5VHlwZTtcblxuICAvKipcbiAgICogVGhlIG1heGltdW0gYW1vdW50IG9mIHRpbWUgdG8gd2FpdCBiZWZvcmUgZm9yY2libHkgcmVsZWFzaW5nIHRoZVxuICAgKiBJUCBhZGRyZXNzZXMgaWYgY29ubmVjdGlvbnMgYXJlIHN0aWxsIGluIHByb2dyZXNzLlxuICAgKlxuICAgKiBAZGVmYXVsdCAnMzUwIHNlY29uZHMnXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgbWF4RHJhaW5EdXJhdGlvbj86IER1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBUaGUgTkFUIGdhdGV3YXkgQ0ZOIHJlc291cmNlLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHJlc291cmNlOiBDZm5OYXRHYXRld2F5O1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBOYXRHYXRld2F5UHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgdGhpcy5yb3V0ZXJUeXBlID0gUm91dGVyVHlwZS5OQVRfR0FURVdBWTtcblxuICAgIHRoaXMuY29ubmVjdGl2aXR5VHlwZSA9IHByb3BzLmNvbm5lY3Rpdml0eVR5cGUgfHwgTmF0Q29ubmVjdGl2aXR5VHlwZS5QVUJMSUM7XG4gICAgdGhpcy5tYXhEcmFpbkR1cmF0aW9uID0gcHJvcHMubWF4RHJhaW5EdXJhdGlvbiB8fCBEdXJhdGlvbi5zZWNvbmRzKDM1MCk7XG5cbiAgICBpZiAodGhpcy5jb25uZWN0aXZpdHlUeXBlID09PSBOYXRDb25uZWN0aXZpdHlUeXBlLlBVQkxJQykge1xuICAgICAgaWYgKCFwcm9wcy52cGMgJiYgIXByb3BzLmFsbG9jYXRpb25JZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0VpdGhlciBwcm92aWRlIHZwYyBvciBhbGxvY2F0aW9uSWQnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBJZiB1c2VyIGRvZXMgbm90IHByb3ZpZGUgRUlQLCBnZW5lcmF0ZSBvbmUgZm9yIHRoZW1cbiAgICB2YXIgYUlkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgaWYgKHRoaXMuY29ubmVjdGl2aXR5VHlwZSA9PT0gTmF0Q29ubmVjdGl2aXR5VHlwZS5QVUJMSUMpIHtcbiAgICAgIGlmICghcHJvcHMuYWxsb2NhdGlvbklkKSB7XG4gICAgICAgIGxldCBlaXAgPSBuZXcgQ2ZuRUlQKHRoaXMsICdFSVAnLCB7XG4gICAgICAgICAgZG9tYWluOiBwcm9wcy52cGM/LnZwY0lkLFxuICAgICAgICB9KTtcbiAgICAgICAgYUlkID0gZWlwLmF0dHJBbGxvY2F0aW9uSWQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhSWQgPSBwcm9wcy5hbGxvY2F0aW9uSWQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5yZXNvdXJjZSA9IG5ldyBDZm5OYXRHYXRld2F5KHRoaXMsICdOQVRHYXRld2F5Jywge1xuICAgICAgc3VibmV0SWQ6IHByb3BzLnN1Ym5ldC5zdWJuZXRJZCxcbiAgICAgIGFsbG9jYXRpb25JZDogYUlkLFxuICAgICAgbWF4RHJhaW5EdXJhdGlvblNlY29uZHM6IHByb3BzLm1heERyYWluRHVyYXRpb24/LnRvU2Vjb25kcygpLFxuICAgICAgc2Vjb25kYXJ5QWxsb2NhdGlvbklkczogcHJvcHMuc2Vjb25kYXJ5QWxsb2NhdGlvbklkcyxcbiAgICAgIC4uLnByb3BzLFxuICAgIH0pO1xuXG4gICAgdGhpcy5yb3V0ZXJUYXJnZXRJZCA9IHRoaXMucmVzb3VyY2UuYXR0ck5hdEdhdGV3YXlJZDtcbiAgICB0aGlzLm5vZGUuZGVmYXVsdENoaWxkID0gdGhpcy5yZXNvdXJjZTtcbiAgICB0aGlzLm5vZGUuYWRkRGVwZW5kZW5jeShwcm9wcy5zdWJuZXQuaW50ZXJuZXRDb25uZWN0aXZpdHlFc3RhYmxpc2hlZCk7XG4gIH1cbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgcGVlcmluZyBjb25uZWN0aW9uIGJldHdlZW4gdHdvIFZQQ3NcbiAqIEByZXNvdXJjZSBBV1M6OkVDMjo6VlBDUGVlcmluZ0Nvbm5lY3Rpb25cbiAqL1xuZXhwb3J0IGNsYXNzIFZQQ1BlZXJpbmdDb25uZWN0aW9uIGV4dGVuZHMgUmVzb3VyY2UgaW1wbGVtZW50cyBJUm91dGVUYXJnZXQge1xuXG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiByb3V0ZXIgdXNlZCBpbiB0aGUgcm91dGUuXG4gICAqL1xuICByZWFkb25seSByb3V0ZXJUeXBlOiBSb3V0ZXJUeXBlO1xuXG4gIC8qKlxuICAgKiBUaGUgSUQgb2YgdGhlIHJvdXRlIHRhcmdldC5cbiAgICovXG4gIHJlYWRvbmx5IHJvdXRlclRhcmdldElkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBWUEMgcGVlcmluZyBjb25uZWN0aW9uIENGTiByZXNvdXJjZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSByZXNvdXJjZTogQ2ZuVlBDUGVlcmluZ0Nvbm5lY3Rpb247XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFZQQ1BlZXJpbmdDb25uZWN0aW9uUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgdGhpcy5yb3V0ZXJUeXBlID0gUm91dGVyVHlwZS5WUENfUEVFUklOR19DT05ORUNUSU9OO1xuXG4gICAgY29uc3QgaXNDcm9zc0FjY291bnQgPSBwcm9wcy5yZXF1ZXN0b3JWcGMub3duZXJBY2NvdW50SWQgIT09IHByb3BzLmFjY2VwdG9yVnBjLm93bmVyQWNjb3VudElkO1xuXG4gICAgaWYgKCFpc0Nyb3NzQWNjb3VudCAmJiBwcm9wcy5wZWVyUm9sZUFybikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdwZWVyUm9sZUFybiBpcyBub3QgbmVlZGVkIGZvciBzYW1lIGFjY291bnQgcGVlcmluZycpO1xuICAgIH1cblxuICAgIGlmIChpc0Nyb3NzQWNjb3VudCAmJiAhcHJvcHMucGVlclJvbGVBcm4pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ3Jvc3MgYWNjb3VudCBWUEMgcGVlcmluZyByZXF1aXJlcyBwZWVyUm9sZUFybicpO1xuICAgIH1cblxuICAgIGNvbnN0IG92ZXJsYXAgPSB0aGlzLnZhbGlkYXRlVnBjQ2lkck92ZXJsYXAocHJvcHMucmVxdWVzdG9yVnBjLCBwcm9wcy5hY2NlcHRvclZwYyk7XG4gICAgaWYgKG92ZXJsYXApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ0lEUiBibG9jayBzaG91bGQgbm90IG92ZXJsYXAgd2l0aCBlYWNoIG90aGVyIGZvciBlc3RhYmxpc2hpbmcgYSBwZWVyaW5nIGNvbm5lY3Rpb24nKTtcbiAgICB9XG5cbiAgICB0aGlzLnJlc291cmNlID0gbmV3IENmblZQQ1BlZXJpbmdDb25uZWN0aW9uKHRoaXMsICdWUENQZWVyaW5nQ29ubmVjdGlvbicsIHtcbiAgICAgIHZwY0lkOiBwcm9wcy5yZXF1ZXN0b3JWcGMudnBjSWQsXG4gICAgICBwZWVyVnBjSWQ6IHByb3BzLmFjY2VwdG9yVnBjLnZwY0lkLFxuICAgICAgcGVlck93bmVySWQ6IHByb3BzLmFjY2VwdG9yVnBjLm93bmVyQWNjb3VudElkLFxuICAgICAgcGVlclJlZ2lvbjogcHJvcHMuYWNjZXB0b3JWcGMucmVnaW9uLFxuICAgICAgcGVlclJvbGVBcm46IGlzQ3Jvc3NBY2NvdW50ID8gcHJvcHMucGVlclJvbGVBcm4gOiB1bmRlZmluZWQsXG4gICAgfSk7XG5cbiAgICB0aGlzLnJvdXRlclRhcmdldElkID0gdGhpcy5yZXNvdXJjZS5hdHRySWQ7XG4gICAgdGhpcy5ub2RlLmRlZmF1bHRDaGlsZCA9IHRoaXMucmVzb3VyY2U7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIGlmIHRoZSBwcm92aWRlZCBJUHY0IENJRFIgYmxvY2sgb3ZlcmxhcHMgd2l0aCBleGlzdGluZyBzdWJuZXQgQ0lEUiBibG9ja3Mgd2l0aGluIHRoZSBnaXZlbiBWUEMuXG4gICAqXG4gICAqIEBwYXJhbSByZXF1ZXN0b3JWcGMgVGhlIFZQQyBvZiB0aGUgcmVxdWVzdG9yLlxuICAgKiBAcGFyYW0gYWNjZXB0b3JWcGMgVGhlIFZQQyBvZiB0aGUgYWNjZXB0b3IuXG4gICAqIEByZXR1cm5zIFRydWUgaWYgdGhlIElQdjQgQ0lEUiBibG9jayBvdmVybGFwcyB3aXRoIGVhY2ggb3RoZXIgZm9yIHR3byBWUENzLCBmYWxzZSBvdGhlcndpc2UuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZVZwY0NpZHJPdmVybGFwKHJlcXVlc3RvclZwYzogSVZwY1YyLCBhY2NlcHRvclZwYzogSVZwY1YyKTogYm9vbGVhbiB7XG5cbiAgICBjb25zdCByZXF1ZXN0b3JDaWRycyA9IFtyZXF1ZXN0b3JWcGMuaXB2NENpZHJCbG9ja107XG4gICAgY29uc3QgYWNjZXB0b3JDaWRycyA9IFthY2NlcHRvclZwYy5pcHY0Q2lkckJsb2NrXTtcblxuICAgIGlmIChyZXF1ZXN0b3JWcGMuc2Vjb25kYXJ5Q2lkckJsb2NrKSB7XG4gICAgICByZXF1ZXN0b3JDaWRycy5wdXNoKC4uLnJlcXVlc3RvclZwYy5zZWNvbmRhcnlDaWRyQmxvY2tcbiAgICAgICAgLm1hcChibG9jayA9PiBibG9jay5jaWRyQmxvY2spXG4gICAgICAgIC5maWx0ZXIoKGNpZHIpOiBjaWRyIGlzIHN0cmluZyA9PiBjaWRyICE9PSB1bmRlZmluZWQpKTtcbiAgICB9XG5cbiAgICBpZiAoYWNjZXB0b3JWcGMuc2Vjb25kYXJ5Q2lkckJsb2NrKSB7XG4gICAgICBhY2NlcHRvckNpZHJzLnB1c2goLi4uYWNjZXB0b3JWcGMuc2Vjb25kYXJ5Q2lkckJsb2NrXG4gICAgICAgIC5tYXAoYmxvY2sgPT4gYmxvY2suY2lkckJsb2NrKVxuICAgICAgICAuZmlsdGVyKChjaWRyKTogY2lkciBpcyBzdHJpbmcgPT4gY2lkciAhPT0gdW5kZWZpbmVkKSk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCByZXF1ZXN0b3JDaWRyIG9mIHJlcXVlc3RvckNpZHJzKSB7XG4gICAgICBjb25zdCByZXF1ZXN0b3JSYW5nZSA9IG5ldyBDaWRyQmxvY2socmVxdWVzdG9yQ2lkcik7XG4gICAgICBjb25zdCByZXF1ZXN0b3JJcFJhbmdlOiBbc3RyaW5nLCBzdHJpbmddID0gW3JlcXVlc3RvclJhbmdlLm1pbklwKCksIHJlcXVlc3RvclJhbmdlLm1heElwKCldO1xuXG4gICAgICBmb3IgKGNvbnN0IGFjY2VwdG9yQ2lkciBvZiBhY2NlcHRvckNpZHJzKSB7XG4gICAgICAgIGNvbnN0IGFjY2VwdG9yUmFuZ2UgPSBuZXcgQ2lkckJsb2NrKGFjY2VwdG9yQ2lkcik7XG4gICAgICAgIGNvbnN0IGFjY2VwdG9ySXBSYW5nZTogW3N0cmluZywgc3RyaW5nXSA9IFthY2NlcHRvclJhbmdlLm1pbklwKCksIGFjY2VwdG9yUmFuZ2UubWF4SXAoKV07XG5cbiAgICAgICAgaWYgKHJlcXVlc3RvclJhbmdlLnJhbmdlc092ZXJsYXAoYWNjZXB0b3JJcFJhbmdlLCByZXF1ZXN0b3JJcFJhbmdlKSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbn1cblxuLyoqXG4gKiBUaGUgdHlwZSBvZiBlbmRwb2ludCBvciBnYXRld2F5IGJlaW5nIHRhcmdldGVkIGJ5IHRoZSByb3V0ZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSb3V0ZVRhcmdldFByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBnYXRld2F5IHJvdXRlIHRhcmdldC4gVGhpcyBpcyB1c2VkIGZvciB0YXJnZXRzIHN1Y2ggYXNcbiAgICogZWdyZXNzLW9ubHkgaW50ZXJuZXQgZ2F0ZXdheSBvciBWUEMgcGVlcmluZyBjb25uZWN0aW9uLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHRhcmdldCBpcyBub3Qgc2V0IHRvIGEgZ2F0ZXdheSwgaW4gdGhpcyBjYXNlIGFuIGVuZHBvaW50IGlzIG5lZWRlZC5cbiAgICovXG4gIHJlYWRvbmx5IGdhdGV3YXk/OiBJUm91dGVUYXJnZXQ7XG5cbiAgLyoqXG4gICAqIFRoZSBlbmRwb2ludCByb3V0ZSB0YXJnZXQuIFRoaXMgaXMgdXNlZCBmb3IgdGFyZ2V0cyBzdWNoIGFzXG4gICAqIFZQQyBlbmRwb2ludHMuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdGFyZ2V0IGlzIG5vdCBzZXQgdG8gYW4gZW5kcG9pbnQsIGluIHRoaXMgY2FzZSBhIGdhdGV3YXkgaXMgbmVlZGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgZW5kcG9pbnQ/OiBJVnBjRW5kcG9pbnQ7XG59XG5cbi8qKlxuICogVGhlIGdhdGV3YXkgb3IgZW5kcG9pbnQgdGFyZ2V0ZWQgYnkgdGhlIHJvdXRlLlxuICovXG5leHBvcnQgY2xhc3MgUm91dGVUYXJnZXRUeXBlIHtcbiAgLyoqXG4gICAqIFRoZSBnYXRld2F5IHJvdXRlIHRhcmdldC4gVGhpcyBpcyB1c2VkIGZvciB0YXJnZXRzIHN1Y2ggYXNcbiAgICogZWdyZXNzLW9ubHkgaW50ZXJuZXQgZ2F0ZXdheSBvciBWUEMgcGVlcmluZyBjb25uZWN0aW9uLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHRhcmdldCBpcyBub3Qgc2V0IHRvIGEgZ2F0ZXdheSwgaW4gdGhpcyBjYXNlIGFuIGVuZHBvaW50IGlzIG5lZWRlZC5cbiAgICovXG4gIHJlYWRvbmx5IGdhdGV3YXk/OiBJUm91dGVUYXJnZXQ7XG5cbiAgLyoqXG4gICAqIFRoZSBlbmRwb2ludCByb3V0ZSB0YXJnZXQuIFRoaXMgaXMgdXNlZCBmb3IgdGFyZ2V0cyBzdWNoIGFzXG4gICAqIFZQQyBlbmRwb2ludHMuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdGFyZ2V0IGlzIG5vdCBzZXQgdG8gYW4gZW5kcG9pbnQsIGluIHRoaXMgY2FzZSBhIGdhdGV3YXkgaXMgbmVlZGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgZW5kcG9pbnQ/OiBJVnBjRW5kcG9pbnQ7XG5cbiAgY29uc3RydWN0b3IocHJvcHM6IFJvdXRlVGFyZ2V0UHJvcHMpIHtcbiAgICBpZiAoKHByb3BzLmdhdGV3YXkgJiYgcHJvcHMuZW5kcG9pbnQpIHx8ICghcHJvcHMuZ2F0ZXdheSAmJiAhcHJvcHMuZW5kcG9pbnQpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4YWN0bHkgb25lIG9mIGBnYXRld2F5YCBvciBgZW5kcG9pbnRgIG11c3QgYmUgc3BlY2lmaWVkLicpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmdhdGV3YXkgPSBwcm9wcy5nYXRld2F5O1xuICAgICAgdGhpcy5lbmRwb2ludCA9IHByb3BzLmVuZHBvaW50O1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEludGVyZmFjZSB0byBkZWZpbmUgYSByb3V0ZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJUm91dGVWMiBleHRlbmRzIElSZXNvdXJjZSB7XG4gIC8qKlxuICAgKiBUaGUgSUQgb2YgdGhlIHJvdXRlIHRhYmxlIGZvciB0aGUgcm91dGUuXG4gICAqIEBhdHRyaWJ1dGUgcm91dGVUYWJsZVxuICAgKi9cbiAgcmVhZG9ubHkgcm91dGVUYWJsZTogSVJvdXRlVGFibGU7XG5cbiAgLyoqXG4gICAqIFRoZSBJUHY0IG9yIElQdjYgQ0lEUiBibG9jayB1c2VkIGZvciB0aGUgZGVzdGluYXRpb24gbWF0Y2guXG4gICAqXG4gICAqIFJvdXRpbmcgZGVjaXNpb25zIGFyZSBiYXNlZCBvbiB0aGUgbW9zdCBzcGVjaWZpYyBtYXRjaC5cbiAgICogVE9ETzogTG9vayBmb3Igc3Ryb25nIElQIHR5cGUgaW1wbGVtZW50YXRpb24gaGVyZS5cbiAgICovXG4gIHJlYWRvbmx5IGRlc3RpbmF0aW9uOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBnYXRld2F5IG9yIGVuZHBvaW50IHRhcmdldGVkIGJ5IHRoZSByb3V0ZS5cbiAgICovXG4gIHJlYWRvbmx5IHRhcmdldDogUm91dGVUYXJnZXRUeXBlO1xufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgdG8gZGVmaW5lIGEgcm91dGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUm91dGVQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgSUQgb2YgdGhlIHJvdXRlIHRhYmxlIGZvciB0aGUgcm91dGUuXG4gICAqXG4gICAqIEBhdHRyaWJ1dGUgcm91dGVUYWJsZVxuICAgKi9cbiAgcmVhZG9ubHkgcm91dGVUYWJsZTogSVJvdXRlVGFibGU7XG5cbiAgLyoqXG4gICAqIFRoZSBJUHY0IG9yIElQdjYgQ0lEUiBibG9jayB1c2VkIGZvciB0aGUgZGVzdGluYXRpb24gbWF0Y2guXG4gICAqXG4gICAqIFJvdXRpbmcgZGVjaXNpb25zIGFyZSBiYXNlZCBvbiB0aGUgbW9zdCBzcGVjaWZpYyBtYXRjaC5cbiAgICovXG4gIHJlYWRvbmx5IGRlc3RpbmF0aW9uOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBnYXRld2F5IG9yIGVuZHBvaW50IHRhcmdldGVkIGJ5IHRoZSByb3V0ZS5cbiAgICovXG4gIHJlYWRvbmx5IHRhcmdldDogUm91dGVUYXJnZXRUeXBlO1xuXG4gIC8qKlxuICAgKiBUaGUgcmVzb3VyY2UgbmFtZSBvZiB0aGUgcm91dGUuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gcHJvdmlzaW9uZWQgd2l0aG91dCBhIHJvdXRlIG5hbWVcbiAgICovXG4gIHJlYWRvbmx5IHJvdXRlTmFtZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IHJvdXRlIHdpdGggYWRkZWQgZnVuY3Rpb25hbGl0eS5cbiAqIEByZXNvdXJjZSBBV1M6OkVDMjo6Um91dGVcbiAqL1xuZXhwb3J0IGNsYXNzIFJvdXRlIGV4dGVuZHMgUmVzb3VyY2UgaW1wbGVtZW50cyBJUm91dGVWMiB7XG4gIC8qKlxuICAgKiBUaGUgSVB2NCBvciBJUHY2IENJRFIgYmxvY2sgdXNlZCBmb3IgdGhlIGRlc3RpbmF0aW9uIG1hdGNoLlxuICAgKlxuICAgKiBSb3V0aW5nIGRlY2lzaW9ucyBhcmUgYmFzZWQgb24gdGhlIG1vc3Qgc3BlY2lmaWMgbWF0Y2guXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZGVzdGluYXRpb246IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGdhdGV3YXkgb3IgZW5kcG9pbnQgdGFyZ2V0ZWQgYnkgdGhlIHJvdXRlLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHRhcmdldDogUm91dGVUYXJnZXRUeXBlO1xuXG4gIC8qKlxuICAgKiBUaGUgcm91dGUgdGFibGUgZm9yIHRoZSByb3V0ZS5cbiAgICogQGF0dHJpYnV0ZSByb3V0ZVRhYmxlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcm91dGVUYWJsZTogSVJvdXRlVGFibGU7XG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHJvdXRlciB0aGUgcm91dGUgaXMgdGFyZ2V0dGluZ1xuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHRhcmdldFJvdXRlclR5cGU6IFJvdXRlclR5cGU7XG5cbiAgLyoqXG4gICAqIFRoZSByb3V0ZSBDRk4gcmVzb3VyY2UuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcmVzb3VyY2U/OiBDZm5Sb3V0ZTtcblxuICAvKipcbiAgICogRGVzdGluYXRpb24gY2lkciBibG9jayBmb3IgaXB2NlxuICAgKi9cbiAgcHJpdmF0ZSBkZXN0aW5hdGlvbklwdjZDaWRyPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBEZXN0aW5hdGlvbiBjaWRyIGJsb2NrIGZvciBpcHY0XG4gICAqL1xuICBwcml2YXRlIGRlc3RpbmF0aW9uSXB2NENpZHI/OiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFJvdXRlUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgdGhpcy50YXJnZXQgPSBwcm9wcy50YXJnZXQ7XG4gICAgdGhpcy5yb3V0ZVRhYmxlID0gcHJvcHMucm91dGVUYWJsZTtcbiAgICB0aGlzLmRlc3RpbmF0aW9uID0gcHJvcHMuZGVzdGluYXRpb247XG4gICAgY29uc3QgaXNEZXN0aW5hdGlvbklwdjQgPSBOZXR3b3JrVXRpbHMudmFsaWRJcChwcm9wcy5kZXN0aW5hdGlvbik7XG4gICAgaWYgKCFpc0Rlc3RpbmF0aW9uSXB2NCkge1xuICAgICAgLy9UT0RPIFZhbGlkYXRlIGZvciBJUHY2IENJRFIgcmFuZ2VcbiAgICAgIHRoaXMuZGVzdGluYXRpb25JcHY2Q2lkciA9IHByb3BzLmRlc3RpbmF0aW9uO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRlc3RpbmF0aW9uSXB2NENpZHIgPSBwcm9wcy5kZXN0aW5hdGlvbjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy50YXJnZXQuZ2F0ZXdheT8ucm91dGVyVHlwZSA9PT0gUm91dGVyVHlwZS5FR1JFU1NfT05MWV9JTlRFUk5FVF9HQVRFV0FZICYmIGlzRGVzdGluYXRpb25JcHY0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0VncmVzcyBvbmx5IGludGVybmV0IGdhdGV3YXkgZG9lcyBub3Qgc3VwcG9ydCBJUHY0IHJvdXRpbmcnKTtcbiAgICB9XG4gICAgdGhpcy50YXJnZXRSb3V0ZXJUeXBlID0gdGhpcy50YXJnZXQuZ2F0ZXdheSA/IHRoaXMudGFyZ2V0LmdhdGV3YXkucm91dGVyVHlwZSA6IFJvdXRlclR5cGUuVlBDX0VORFBPSU5UO1xuXG4gICAgLy8gR2F0ZXdheSBnZW5lcmF0ZXMgcm91dGUgYXV0b21hdGljYWxseSB2aWEgaXRzIFJvdXRlVGFibGUsIHRodXMgd2UgZG9uJ3QgbmVlZCB0byBnZW5lcmF0ZSB0aGUgcmVzb3VyY2UgZm9yIGl0XG4gICAgaWYgKCEodGhpcy50YXJnZXQuZW5kcG9pbnQgaW5zdGFuY2VvZiBHYXRld2F5VnBjRW5kcG9pbnQpKSB7XG4gICAgICB0aGlzLnJlc291cmNlID0gbmV3IENmblJvdXRlKHRoaXMsICdSb3V0ZScsIHtcbiAgICAgICAgcm91dGVUYWJsZUlkOiB0aGlzLnJvdXRlVGFibGUucm91dGVUYWJsZUlkLFxuICAgICAgICBkZXN0aW5hdGlvbkNpZHJCbG9jazogdGhpcy5kZXN0aW5hdGlvbklwdjRDaWRyLFxuICAgICAgICBkZXN0aW5hdGlvbklwdjZDaWRyQmxvY2s6IHRoaXMuZGVzdGluYXRpb25JcHY2Q2lkcixcbiAgICAgICAgW3JvdXRlclR5cGVUb1Byb3BOYW1lKHRoaXMudGFyZ2V0Um91dGVyVHlwZSldOiB0aGlzLnRhcmdldC5nYXRld2F5ID8gdGhpcy50YXJnZXQuZ2F0ZXdheS5yb3V0ZXJUYXJnZXRJZCA6XG4gICAgICAgICAgdGhpcy50YXJnZXQuZW5kcG9pbnQgPyB0aGlzLnRhcmdldC5lbmRwb2ludC52cGNFbmRwb2ludElkIDogbnVsbCxcbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLm5vZGUuZGVmYXVsdENoaWxkID0gdGhpcy5yZXNvdXJjZTtcblxuICAgIC8vQ3JlYXRlIGEgcm91dGUgb25seSBhZnRlciB0YXJnZXQgZ2F0ZXdheSBvciBlbmRwb2ludCBpcyBjcmVhdGVkXG4gICAgaWYgKHRoaXMudGFyZ2V0LmdhdGV3YXkpIHtcbiAgICAgIHRoaXMubm9kZS5hZGREZXBlbmRlbmN5KHRoaXMudGFyZ2V0LmdhdGV3YXkpO1xuICAgIH1cbiAgICBpZiAodGhpcy50YXJnZXQuZW5kcG9pbnQpIHtcbiAgICAgIHRoaXMubm9kZS5hZGREZXBlbmRlbmN5KHRoaXMudGFyZ2V0LmVuZHBvaW50KTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIHRvIGRlZmluZSBhIHJvdXRlIHRhYmxlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJvdXRlVGFibGVQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgSUQgb2YgdGhlIFZQQy5cbiAgICovXG4gIHJlYWRvbmx5IHZwYzogSVZwY1YyO1xuXG4gIC8qKlxuICAgKiBUaGUgcmVzb3VyY2UgbmFtZSBvZiB0aGUgcm91dGUgdGFibGUuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gcHJvdmlzaW9uZWQgd2l0aG91dCBhIHJvdXRlIHRhYmxlIG5hbWVcbiAgICovXG4gIHJlYWRvbmx5IHJvdXRlVGFibGVOYW1lPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSByb3V0ZSB0YWJsZSBmb3IgdGhlIHNwZWNpZmllZCBWUENcbiAqIEByZXNvdXJjZSBBV1M6OkVDMjo6Um91dGVUYWJsZVxuICovXG5leHBvcnQgY2xhc3MgUm91dGVUYWJsZSBleHRlbmRzIFJlc291cmNlIGltcGxlbWVudHMgSVJvdXRlVGFibGUge1xuICAvKipcbiAgICogVGhlIElEIG9mIHRoZSByb3V0ZSB0YWJsZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSByb3V0ZVRhYmxlSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHJvdXRlIHRhYmxlIENGTiByZXNvdXJjZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSByZXNvdXJjZTogQ2ZuUm91dGVUYWJsZTtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogUm91dGVUYWJsZVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIHRoaXMucmVzb3VyY2UgPSBuZXcgQ2ZuUm91dGVUYWJsZSh0aGlzLCAnUm91dGVUYWJsZScsIHtcbiAgICAgIHZwY0lkOiBwcm9wcy52cGMudnBjSWQsXG4gICAgfSk7XG4gICAgdGhpcy5ub2RlLmRlZmF1bHRDaGlsZCA9IHRoaXMucmVzb3VyY2U7XG5cbiAgICB0aGlzLnJvdXRlVGFibGVJZCA9IHRoaXMucmVzb3VyY2UuYXR0clJvdXRlVGFibGVJZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgbmV3IGN1c3RvbSByb3V0ZSB0byB0aGUgcm91dGUgdGFibGUuXG4gICAqXG4gICAqIEBwYXJhbSBkZXN0aW5hdGlvbiBUaGUgSVB2NCBvciBJUHY2IENJRFIgYmxvY2sgdXNlZCBmb3IgdGhlIGRlc3RpbmF0aW9uIG1hdGNoLlxuICAgKiBAcGFyYW0gdGFyZ2V0IFRoZSBnYXRld2F5IG9yIGVuZHBvaW50IHRhcmdldGVkIGJ5IHRoZSByb3V0ZS5cbiAgICovXG4gIHB1YmxpYyBhZGRSb3V0ZShpZDogc3RyaW5nLCBkZXN0aW5hdGlvbjogc3RyaW5nLCB0YXJnZXQ6IFJvdXRlVGFyZ2V0VHlwZSkge1xuICAgIG5ldyBSb3V0ZSh0aGlzLCBpZCwge1xuICAgICAgcm91dGVUYWJsZTogdGhpcyxcbiAgICAgIGRlc3RpbmF0aW9uOiBkZXN0aW5hdGlvbixcbiAgICAgIHRhcmdldDogdGFyZ2V0LFxuICAgIH0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJvdXRlclR5cGVUb1Byb3BOYW1lKHJvdXRlclR5cGU6IFJvdXRlclR5cGUpIHtcbiAgcmV0dXJuICh7XG4gICAgW1JvdXRlclR5cGUuQ0FSUklFUl9HQVRFV0FZXTogJ2NhcnJpZXJHYXRld2F5SWQnLFxuICAgIFtSb3V0ZXJUeXBlLkVHUkVTU19PTkxZX0lOVEVSTkVUX0dBVEVXQVldOiAnZWdyZXNzT25seUludGVybmV0R2F0ZXdheUlkJyxcbiAgICBbUm91dGVyVHlwZS5HQVRFV0FZXTogJ2dhdGV3YXlJZCcsXG4gICAgW1JvdXRlclR5cGUuSU5TVEFOQ0VdOiAnaW5zdGFuY2VJZCcsXG4gICAgW1JvdXRlclR5cGUuTE9DQUxfR0FURVdBWV06ICdsb2NhbEdhdGV3YXlJZCcsXG4gICAgW1JvdXRlclR5cGUuTkFUX0dBVEVXQVldOiAnbmF0R2F0ZXdheUlkJyxcbiAgICBbUm91dGVyVHlwZS5ORVRXT1JLX0lOVEVSRkFDRV06ICduZXR3b3JrSW50ZXJmYWNlSWQnLFxuICAgIFtSb3V0ZXJUeXBlLlRSQU5TSVRfR0FURVdBWV06ICd0cmFuc2l0R2F0ZXdheUlkJyxcbiAgICBbUm91dGVyVHlwZS5WUENfUEVFUklOR19DT05ORUNUSU9OXTogJ3ZwY1BlZXJpbmdDb25uZWN0aW9uSWQnLFxuICAgIFtSb3V0ZXJUeXBlLlZQQ19FTkRQT0lOVF06ICd2cGNFbmRwb2ludElkJyxcbiAgfSlbcm91dGVyVHlwZV07XG59XG4iXX0=
|
|
428
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJyb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxpREFBa1M7QUFFbFMsMkNBQW9GO0FBRXBGLGlDQUFtRTtBQUduRTs7OztHQUlHO0FBQ0gsSUFBWSxtQkFTWDtBQVRELFdBQVksbUJBQW1CO0lBQzdCOztPQUVHO0lBQ0gsd0NBQWlCLENBQUE7SUFDakI7O09BRUc7SUFDSCwwQ0FBbUIsQ0FBQTtBQUNyQixDQUFDLEVBVFcsbUJBQW1CLG1DQUFuQixtQkFBbUIsUUFTOUI7QUE4TEQ7O0dBRUc7QUFDSCxNQUFNLFFBQVEsR0FBVyxNQUFNLENBQUM7QUFFaEM7OztHQUdHO0FBQ0gsTUFBYSx5QkFBMEIsU0FBUSxlQUFRO0lBZ0JyRCxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQXFDO1FBQzdFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7Ozs7OzsrQ0FqQlIseUJBQXlCOzs7O1FBbUJsQyxJQUFJLEtBQUssQ0FBQyw2QkFBNkIsRUFBRSxDQUFDO1lBQ3hDLFdBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsNkJBQTZCLENBQUMsQ0FBQztRQUNuRSxDQUFDO1FBQ0QsSUFBSSxDQUFDLFVBQVUsR0FBRyxvQkFBVSxDQUFDLDRCQUE0QixDQUFDO1FBRTFELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxzQ0FBNEIsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFO1lBQzdELEtBQUssRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUs7U0FDdkIsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUV2QyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDO0tBQzVDOztBQTlCSCw4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b0JBQVUsQ0FBQyw0QkFBNEIsQ0FBQyxFQUFFLDZCQUE2QjtRQUN4RSxDQUFDLG9CQUFVLENBQUMsT0FBTyxDQUFDLEVBQUUsV0FBVztRQUNqQyxDQUFDLG9CQUFVLENBQUMsUUFBUSxDQUFDLEVBQUUsWUFBWTtRQUNuQyxDQUFDLG9CQUFVLENBQUMsYUFBYSxDQUFDLEVBQUUsZ0JBQWdCO1FBQzVDLENBQUMsb0JBQVUsQ0FBQyxXQUFXLENBQUMsRUFBRSxjQUFjO1FBQ3hDLENBQUMsb0JBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLG9CQUFvQjtRQUNwRCxDQUFDLG9CQUFVLENBQUMsZUFBZSxDQUFDLEVBQUUsa0JBQWtCO1FBQ2hELENBQUMsb0JBQVUsQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFLHdCQUF3QjtRQUM3RCxDQUFDLG9CQUFVLENBQUMsWUFBWSxDQUFDLEVBQUUsZUFBZTtLQUMzQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDakIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENmbkVJUCwgQ2ZuRWdyZXNzT25seUludGVybmV0R2F0ZXdheSwgQ2ZuSW50ZXJuZXRHYXRld2F5LCBDZm5OYXRHYXRld2F5LCBDZm5WUENQZWVyaW5nQ29ubmVjdGlvbiwgQ2ZuUm91dGUsIENmblJvdXRlVGFibGUsIENmblZQQ0dhdGV3YXlBdHRhY2htZW50LCBDZm5WUE5HYXRld2F5LCBDZm5WUE5HYXRld2F5Um91dGVQcm9wYWdhdGlvbiwgR2F0ZXdheVZwY0VuZHBvaW50LCBJUm91dGVUYWJsZSwgSVZwY0VuZHBvaW50LCBSb3V0ZXJUeXBlIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWVjMic7XG5pbXBvcnQgeyBDb25zdHJ1Y3QsIElEZXBlbmRhYmxlIH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBBbm5vdGF0aW9ucywgRHVyYXRpb24sIElSZXNvdXJjZSwgUmVzb3VyY2UsIFRhZ3MgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlJztcbmltcG9ydCB7IElWcGNWMiwgVlBOR2F0ZXdheVYyT3B0aW9ucyB9IGZyb20gJy4vdnBjLXYyLWJhc2UnO1xuaW1wb3J0IHsgTmV0d29ya1V0aWxzLCBhbGxSb3V0ZVRhYmxlSWRzLCBDaWRyQmxvY2sgfSBmcm9tICcuL3V0aWwnO1xuaW1wb3J0IHsgSVN1Ym5ldFYyIH0gZnJvbSAnLi9zdWJuZXQtdjInO1xuXG4vKipcbiAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBOQVQgZ2F0ZXdheSBzdXBwb3J0cyBwdWJsaWMgb3IgcHJpdmF0ZSBjb25uZWN0aXZpdHkuXG4gKiBUaGUgZGVmYXVsdCBpcyBwdWJsaWMgY29ubmVjdGl2aXR5LlxuICogU2VlOiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcmVzb3VyY2UtZWMyLW5hdGdhdGV3YXkuaHRtbCNjZm4tZWMyLW5hdGdhdGV3YXktY29ubmVjdGl2aXR5dHlwZVxuICovXG5leHBvcnQgZW51bSBOYXRDb25uZWN0aXZpdHlUeXBlIHtcbiAgLyoqXG4gICAqIFNldHMgQ29ubmVjdGl2aXR5IHR5cGUgdG8gUFVCTElDXG4gICAqL1xuICBQVUJMSUMgPSAncHVibGljJyxcbiAgLyoqXG4gICAqIFNldHMgQ29ubmVjdGl2aXR5IHR5cGUgdG8gUFJJVkFURVxuICAgKi9cbiAgUFJJVkFURSA9ICdwcml2YXRlJyxcbn1cblxuLyoqXG4gKiBJbnRlcmZhY2UgdG8gZGVmaW5lIGEgcm91dGluZyB0YXJnZXQsIHN1Y2ggYXMgYW5cbiAqIGVncmVzcy1vbmx5IGludGVybmV0IGdhdGV3YXkgb3IgVlBDIGVuZHBvaW50LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElSb3V0ZVRhcmdldCBleHRlbmRzIElEZXBlbmRhYmxlIHtcbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHJvdXRlciB1c2VkIGluIHRoZSByb3V0ZS5cbiAgICovXG4gIHJlYWRvbmx5IHJvdXRlclR5cGU6IFJvdXRlclR5cGU7XG5cbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgcm91dGUgdGFyZ2V0LlxuICAgKi9cbiAgcmVhZG9ubHkgcm91dGVyVGFyZ2V0SWQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIHRvIGRlZmluZSBhbiBlZ3Jlc3Mtb25seSBpbnRlcm5ldCBnYXRld2F5LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVncmVzc09ubHlJbnRlcm5ldEdhdGV3YXlQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgSUQgb2YgdGhlIFZQQyBmb3Igd2hpY2ggdG8gY3JlYXRlIHRoZSBlZ3Jlc3Mtb25seSBpbnRlcm5ldCBnYXRld2F5LlxuICAgKi9cbiAgcmVhZG9ubHkgdnBjOiBJVnBjVjI7XG5cbiAgLyoqXG4gICAqIFRoZSByZXNvdXJjZSBuYW1lIG9mIHRoZSBlZ3Jlc3Mtb25seSBpbnRlcm5ldCBnYXRld2F5LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHByb3Zpc2lvbmVkIHdpdGhvdXQgYSByZXNvdXJjZSBuYW1lXG4gICAqL1xuICByZWFkb25seSBlZ3Jlc3NPbmx5SW50ZXJuZXRHYXRld2F5TmFtZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIHRvIGRlZmluZSBhbiBpbnRlcm5ldCBnYXRld2F5LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEludGVybmV0R2F0ZXdheVByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgVlBDIGZvciB3aGljaCB0byBjcmVhdGUgdGhlIGludGVybmV0IGdhdGV3YXkuXG4gICAqL1xuICByZWFkb25seSB2cGM6IElWcGNWMjtcblxuICAvKipcbiAgICogVGhlIHJlc291cmNlIG5hbWUgb2YgdGhlIGludGVybmV0IGdhdGV3YXkuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gcHJvdmlzaW9uZWQgd2l0aG91dCBhIHJlc291cmNlIG5hbWVcbiAgICovXG4gIHJlYWRvbmx5IGludGVybmV0R2F0ZXdheU5hbWU/OiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIHRvIGRlZmluZSBhIFZQTiBnYXRld2F5LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFZQTkdhdGV3YXlWMlByb3BzIGV4dGVuZHMgVlBOR2F0ZXdheVYyT3B0aW9ucyB7XG5cbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgVlBDIGZvciB3aGljaCB0byBjcmVhdGUgdGhlIFZQTiBnYXRld2F5LlxuICAgKi9cbiAgcmVhZG9ubHkgdnBjOiBJVnBjVjI7XG59XG5cbi8qKlxuICogT3B0aW9ucyB0byBkZWZpbmUgYSBOQVQgZ2F0ZXdheS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOYXRHYXRld2F5T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgc3VibmV0IGluIHdoaWNoIHRoZSBOQVQgZ2F0ZXdheSBpcyBsb2NhdGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgc3VibmV0OiBJU3VibmV0VjI7XG5cbiAgLyoqXG4gICAqIEFsbG9jYXRpb25JRCBvZiBFbGFzdGljIElQIGFkZHJlc3MgdGhhdCdzIGFzc29jaWF0ZWQgd2l0aCB0aGUgTkFUIGdhdGV3YXkuIFRoaXMgcHJvcGVydHkgaXMgcmVxdWlyZWQgZm9yIGEgcHVibGljIE5BVFxuICAgKiBnYXRld2F5IGFuZCBjYW5ub3QgYmUgc3BlY2lmaWVkIHdpdGggYSBwcml2YXRlIE5BVCBnYXRld2F5LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGF0dHIuYWxsb2NhdGlvbklEIG9mIGEgbmV3IEVsYXN0aWMgSVAgY3JlYXRlZCBieSBkZWZhdWx0XG4gICAqIC8vVE9ETzogQUREIEwyIGZvciBlbGFzdGljIGlwXG4gICAqL1xuICByZWFkb25seSBhbGxvY2F0aW9uSWQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBOQVQgZ2F0ZXdheSBzdXBwb3J0cyBwdWJsaWMgb3IgcHJpdmF0ZSBjb25uZWN0aXZpdHkuXG4gICAqXG4gICAqIEBkZWZhdWx0IE5hdENvbm5lY3Rpdml0eVR5cGUuUHVibGljXG4gICAqL1xuICByZWFkb25seSBjb25uZWN0aXZpdHlUeXBlPzogTmF0Q29ubmVjdGl2aXR5VHlwZTtcblxuICAvKipcbiAgICogVGhlIG1heGltdW0gYW1vdW50IG9mIHRpbWUgdG8gd2FpdCBiZWZvcmUgZm9yY2libHkgcmVsZWFzaW5nIHRoZVxuICAgKiBJUCBhZGRyZXNzZXMgaWYgY29ubmVjdGlvbnMgYXJlIHN0aWxsIGluIHByb2dyZXNzLlxuICAgKlxuICAgKiBAZGVmYXVsdCAzNTBzZWNvbmRzXG4gICAqL1xuICByZWFkb25seSBtYXhEcmFpbkR1cmF0aW9uPzogRHVyYXRpb247XG5cbiAgLyoqXG4gICAqIFRoZSBwcml2YXRlIElQdjQgYWRkcmVzcyB0byBhc3NpZ24gdG8gdGhlIE5BVCBnYXRld2F5LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIElmIHlvdSBkb24ndCBwcm92aWRlIGFuIGFkZHJlc3MsIGEgcHJpdmF0ZSBJUHY0IGFkZHJlc3Mgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGFzc2lnbmVkLlxuICAgKi9cbiAgcmVhZG9ubHkgcHJpdmF0ZUlwQWRkcmVzcz86IHN0cmluZztcblxuICAvKipcbiAgICogU2Vjb25kYXJ5IEVJUCBhbGxvY2F0aW9uIElEcy5cbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vdnBjL2xhdGVzdC91c2VyZ3VpZGUvdnBjLW5hdC1nYXRld2F5Lmh0bWwjbmF0LWdhdGV3YXktY3JlYXRpbmdcbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBzZWNvbmRhcnkgYWxsb2NhdGlvbiBJRHMgYXR0YWNoZWQgdG8gTkFUR1dcbiAgICpcbiAgICovXG4gIHJlYWRvbmx5IHNlY29uZGFyeUFsbG9jYXRpb25JZHM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIG51bWJlciBvZiBzZWNvbmRhcnkgcHJpdmF0ZSBJUHY0IGFkZHJlc3NlcyB5b3VcbiAgICogd2FudCB0byBhc3NpZ24gdG8gdGhlIE5BVCBnYXRld2F5LlxuICAgKlxuICAgKiBgU2Vjb25kYXJ5UHJpdmF0ZUlwQWRkcmVzc0NvdW50YCBhbmQgYFNlY29uZGFyeVByaXZhdGVJcEFkZHJlc3Nlc2AgY2Fubm90IGJlXG4gICAqIHNldCBhdCB0aGUgc2FtZSB0aW1lLlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS92cGMvbGF0ZXN0L3VzZXJndWlkZS92cGMtbmF0LWdhdGV3YXkuaHRtbCNuYXQtZ2F0ZXdheS1jcmVhdGluZ1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIHNlY29uZGFyeSBhbGxvY2F0aW9uIElEcyBhc3NvY2lhdGVkIHdpdGggTkFUR1dcbiAgICovXG4gIHJlYWRvbmx5IHNlY29uZGFyeVByaXZhdGVJcEFkZHJlc3NDb3VudD86IG51bWJlcjtcblxuICAvKipcbiAgICogU2Vjb25kYXJ5IHByaXZhdGUgSVB2NCBhZGRyZXNzZXMuXG4gICAqXG4gICAqIGBTZWNvbmRhcnlQcml2YXRlSXBBZGRyZXNzQ291bnRgIGFuZCBgU2Vjb25kYXJ5UHJpdmF0ZUlwQWRkcmVzc2VzYCBjYW5ub3QgYmVcbiAgICogc2V0IGF0IHRoZSBzYW1lIHRpbWUuXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3ZwYy9sYXRlc3QvdXNlcmd1aWRlL3ZwYy1uYXQtZ2F0ZXdheS5odG1sI25hdC1nYXRld2F5LWNyZWF0aW5nXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gc2Vjb25kYXJ5IHByaXZhdGUgSXBBZGRyZXNzZXMgYXNzb2NpYXRlZCB3aXRoIE5BVEdXXG4gICAqL1xuICByZWFkb25seSBzZWNvbmRhcnlQcml2YXRlSXBBZGRyZXNzZXM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIHJlc291cmNlIG5hbWUgb2YgdGhlIE5BVCBnYXRld2F5LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5BVEdXIHByb3Zpc2lvbmVkIHdpdGhvdXQgYW55IG5hbWVcbiAgICovXG4gIHJlYWRvbmx5IG5hdEdhdGV3YXlOYW1lPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgdG8gZGVmaW5lIGEgTkFUIGdhdGV3YXkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTmF0R2F0ZXdheVByb3BzIGV4dGVuZHMgTmF0R2F0ZXdheU9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIElEIG9mIHRoZSBWUEMgaW4gd2hpY2ggdGhlIE5BVCBnYXRld2F5IGlzIGxvY2F0ZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gZWxhc3RpYyBpcCBhc3NvY2lhdGVkLCByZXF1aXJlZCBpbiBjYXNlIG9mIHB1YmxpYyBjb25uZWN0aXZpdHkgaWYgYEFsbG9jYXRpb25JZGAgaXMgbm90IGRlZmluZWRcbiAgICovXG4gIHJlYWRvbmx5IHZwYz86IElWcGNWMjtcbn1cblxuLyoqXG4gKiBPcHRpb25zIHRvIGRlZmluZSBhIFZQQyBwZWVyaW5nIGNvbm5lY3Rpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVlBDUGVlcmluZ0Nvbm5lY3Rpb25PcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBWUEMgdGhhdCBpcyBhY2NlcHRpbmcgdGhlIHBlZXJpbmcgY29ubmVjdGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IGFjY2VwdG9yVnBjOiBJVnBjVjI7XG5cbiAgLyoqXG4gICAqIFRoZSByb2xlIGFybiBjcmVhdGVkIGluIHRoZSBhY2NlcHRvciBhY2NvdW50LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIHBlZXJSb2xlQXJuIG5lZWRlZCBpZiBub3QgY3Jvc3MgYWNjb3VudCBjb25uZWN0aW9uXG4gICAqL1xuICByZWFkb25seSBwZWVyUm9sZUFybj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHJlc291cmNlIG5hbWUgb2YgdGhlIHBlZXJpbmcgY29ubmVjdGlvbi5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBwZWVyaW5nIGNvbm5lY3Rpb24gcHJvdmlzaW9uZWQgd2l0aG91dCBhbnkgbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgdnBjUGVlcmluZ0Nvbm5lY3Rpb25OYW1lPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgdG8gZGVmaW5lIGEgVlBDIHBlZXJpbmcgY29ubmVjdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWUENQZWVyaW5nQ29ubmVjdGlvblByb3BzIGV4dGVuZHMgVlBDUGVlcmluZ0Nvbm5lY3Rpb25PcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBWUEMgdGhhdCBpcyByZXF1ZXN0aW5nIHRoZSBwZWVyaW5nIGNvbm5lY3Rpb24uXG4gICAqL1xuICByZWFkb25seSByZXF1ZXN0b3JWcGM6IElWcGNWMjtcbn1cblxuLyoqXG4gKiBOYW1lIHRhZyBjb25zdGFudFxuICovXG5jb25zdCBOQU1FX1RBRzogc3RyaW5nID0gJ05hbWUnO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gZWdyZXNzLW9ubHkgaW50ZXJuZXQgZ2F0ZXdheVxuICogQHJlc291cmNlIEFXUzo6RUMyOjpFZ3Jlc3NPbmx5SW50ZXJuZXRHYXRld2F5XG4gKi9cbmV4cG9ydCBjbGFzcyBFZ3Jlc3NPbmx5SW50ZXJuZXRHYXRld2F5IGV4dGVuZHMgUmVzb3VyY2UgaW1wbGVtZW50cyBJUm91dGVUYXJnZXQge1xuICAvKipcbiAgICogVGhlIHR5cGUgb2Ygcm91dGVyIHVzZWQgaW4gdGhlIHJvdXRlLlxuICAgKi9cbiAgcmVhZG9ubHkgcm91dGVyVHlwZTogUm91dGVyVHlwZTtcblxuICAvKipcbiAgICogVGhlIElEIG9mIHRoZSByb3V0ZSB0YXJnZXQuXG4gICAqL1xuICByZWFkb25seSByb3V0ZXJUYXJnZXRJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZWdyZXNzLW9ubHkgaW50ZXJuZXQgZ2F0ZXdheSBDRk4gcmVzb3VyY2UuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcmVzb3VyY2U6IENmbkVncmVzc09ubHlJbnRlcm5ldEdhdGV3YXk7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEVncmVzc09ubHlJbnRlcm5ldEdhdGV3YXlQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBpZiAocHJvcHMuZWdyZXNzT25seUludGVybmV0R2F0ZXdheU5hbWUpIHtcbiAgICAgIFRhZ3Mub2YodGhpcykuYWRkKE5BTUVfVEFHLCBwcm9wcy5lZ3Jlc3NPbmx5SW50ZXJuZXRHYXRld2F5TmFtZSk7XG4gICAgfVxuICAgIHRoaXMucm91dGVyVHlwZSA9IFJvdXRlclR5cGUuRUdSRVNTX09OTFlfSU5URVJORVRfR0FURVdBWTtcblxuICAgIHRoaXMucmVzb3VyY2UgPSBuZXcgQ2ZuRWdyZXNzT25seUludGVybmV0R2F0ZXdheSh0aGlzLCAnRUlHVycsIHtcbiAgICAgIHZwY0lkOiBwcm9wcy52cGMudnBjSWQsXG4gICAgfSk7XG4gICAgdGhpcy5ub2RlLmRlZmF1bHRDaGlsZCA9IHRoaXMucmVzb3VyY2U7XG5cbiAgICB0aGlzLnJvdXRlclRhcmdldElkID0gdGhpcy5yZXNvdXJjZS5hdHRySWQ7XG4gIH1cbn1cblxuLyoqXG4gKiBDcmVhdGVzIGFuIGludGVybmV0IGdhdGV3YXlcbiAqIEByZXNvdXJjZSBBV1M6OkVDMjo6SW50ZXJuZXRHYXRld2F5XG4gKi9cbmV4cG9ydCBjbGFzcyBJbnRlcm5ldEdhdGV3YXkgZXh0ZW5kcyBSZXNvdXJjZSBpbXBsZW1lbnRzIElSb3V0ZVRhcmdldCB7XG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiByb3V0ZXIgdXNlZCBpbiB0aGUgcm91dGUuXG4gICAqL1xuICByZWFkb25seSByb3V0ZXJUeXBlOiBSb3V0ZXJUeXBlO1xuXG4gIC8qKlxuICAgKiBUaGUgSUQgb2YgdGhlIHJvdXRlIHRhcmdldC5cbiAgICovXG4gIHJlYWRvbmx5IHJvdXRlclRhcmdldElkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgVlBDIGZvciB3aGljaCB0byBjcmVhdGUgdGhlIGludGVybmV0IGdhdGV3YXkuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdnBjSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGludGVybmV0IGdhdGV3YXkgQ0ZOIHJlc291cmNlLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHJlc291cmNlOiBDZm5JbnRlcm5ldEdhdGV3YXk7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEludGVybmV0R2F0ZXdheVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIHRoaXMucm91dGVyVHlwZSA9IFJvdXRlclR5cGUuR0FURVdBWTtcblxuICAgIHRoaXMucmVzb3VyY2UgPSBuZXcgQ2ZuSW50ZXJuZXRHYXRld2F5KHRoaXMsICdJR1cnLCB7fSk7XG4gICAgdGhpcy5ub2RlLmRlZmF1bHRDaGlsZCA9IHRoaXMucmVzb3VyY2U7XG5cbiAgICB0aGlzLnJvdXRlclRhcmdldElkID0gdGhpcy5yZXNvdXJjZS5hdHRySW50ZXJuZXRHYXRld2F5SWQ7XG4gICAgdGhpcy52cGNJZCA9IHByb3BzLnZwYy52cGNJZDtcblxuICAgIGlmIChwcm9wcy5pbnRlcm5ldEdhdGV3YXlOYW1lKSB7XG4gICAgICBUYWdzLm9mKHRoaXMpLmFkZChOQU1FX1RBRywgcHJvcHMuaW50ZXJuZXRHYXRld2F5TmFtZSk7XG4gICAgfVxuXG4gICAgbmV3IENmblZQQ0dhdGV3YXlBdHRhY2htZW50KHRoaXMsICdHV0F0dGFjaG1lbnQnLCB7XG4gICAgICB2cGNJZDogdGhpcy52cGNJZCxcbiAgICAgIGludGVybmV0R2F0ZXdheUlkOiB0aGlzLnJvdXRlclRhcmdldElkLFxuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHZpcnR1YWwgcHJpdmF0ZSBnYXRld2F5XG4gKiBAcmVzb3VyY2UgQVdTOjpFQzI6OlZQTkdhdGV3YXlcbiAqL1xuZXhwb3J0IGNsYXNzIFZQTkdhdGV3YXlWMiBleHRlbmRzIFJlc291cmNlIGltcGxlbWVudHMgSVJvdXRlVGFyZ2V0IHtcbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHJvdXRlciB1c2VkIGluIHRoZSByb3V0ZS5cbiAgICovXG4gIHJlYWRvbmx5IHJvdXRlclR5cGU6IFJvdXRlclR5cGU7XG5cbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgcm91dGUgdGFyZ2V0LlxuICAgKi9cbiAgcmVhZG9ubHkgcm91dGVyVGFyZ2V0SWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIElEIG9mIHRoZSBWUEMgZm9yIHdoaWNoIHRvIGNyZWF0ZSB0aGUgVlBOIGdhdGV3YXkuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdnBjSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIFZQTiBnYXRld2F5IENGTiByZXNvdXJjZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSByZXNvdXJjZTogQ2ZuVlBOR2F0ZXdheTtcblxuICAvKipcbiAgICogVGhlIFZQTiBHYXRld2F5IEF0dGFjaG1lbnRcbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgX2F0dGFjaG1lbnQ6IENmblZQQ0dhdGV3YXlBdHRhY2htZW50O1xuXG4gIC8qKlxuICAgKiBUaGUgVlBOIEdhdGV3YXkgUm91dGUgUHJvcG9nYXRpb25cbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgX3JvdXRlUHJvcGFnYXRpb246IENmblZQTkdhdGV3YXlSb3V0ZVByb3BhZ2F0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBWUE5HYXRld2F5VjJQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgcGh5c2ljYWxOYW1lOiBwcm9wcy52cG5HYXRld2F5TmFtZSxcbiAgICB9KTtcblxuICAgIHRoaXMucm91dGVyVHlwZSA9IFJvdXRlclR5cGUuR0FURVdBWTtcblxuICAgIHRoaXMucmVzb3VyY2UgPSBuZXcgQ2ZuVlBOR2F0ZXdheSh0aGlzLCAnSUdXJywge1xuICAgICAgdHlwZTogcHJvcHMudHlwZSxcbiAgICAgIGFtYXpvblNpZGVBc246IHByb3BzLmFtYXpvblNpZGVBc24sXG4gICAgfSk7XG4gICAgdGhpcy5ub2RlLmRlZmF1bHRDaGlsZCA9IHRoaXMucmVzb3VyY2U7XG5cbiAgICB0aGlzLnJvdXRlclRhcmdldElkID0gdGhpcy5yZXNvdXJjZS5hdHRyVnBuR2F0ZXdheUlkO1xuXG4gICAgdGhpcy52cGNJZCA9IHByb3BzLnZwYy52cGNJZDtcbiAgICB0aGlzLl9hdHRhY2htZW50ID0gbmV3IENmblZQQ0dhdGV3YXlBdHRhY2htZW50KHRoaXMsICdWUENWUE5HVycsIHtcbiAgICAgIHZwY0lkOiB0aGlzLnZwY0lkLFxuICAgICAgdnBuR2F0ZXdheUlkOiB0aGlzLnJlc291cmNlLmF0dHJWcG5HYXRld2F5SWQsXG4gICAgfSk7XG5cbiAgICBpZiAocHJvcHMudnBuR2F0ZXdheU5hbWUpIHtcbiAgICAgIFRhZ3Mub2YodGhpcykuYWRkKE5BTUVfVEFHLCBwcm9wcy52cG5HYXRld2F5TmFtZSk7XG4gICAgfVxuXG4gICAgLy8gUHJvcGFnYXRlIHJvdXRlcyBvbiByb3V0ZSB0YWJsZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSByaWdodCBzdWJuZXRzXG4gICAgY29uc3QgdnBuUm91dGVQcm9wYWdhdGlvbiA9IHByb3BzLnZwblJvdXRlUHJvcGFnYXRpb24gPz8gW107XG4gICAgY29uc3Qgc3VibmV0cyA9IHZwblJvdXRlUHJvcGFnYXRpb24ubWFwKHMgPT4gcHJvcHMudnBjLnNlbGVjdFN1Ym5ldHMocykuc3VibmV0cykuZmxhdCgpO1xuICAgIGNvbnN0IHJvdXRlVGFibGVJZHMgPSBhbGxSb3V0ZVRhYmxlSWRzKHN1Ym5ldHMpO1xuXG4gICAgaWYgKHJvdXRlVGFibGVJZHMubGVuZ3RoID09PSAwKSB7XG4gICAgICBBbm5vdGF0aW9ucy5vZihzY29wZSkuYWRkV2FybmluZ1YyKCdAYXdzLWNkazphd3MtZWMyLWVscGhhOmVuYWJsZVZwbkdhdGV3YXlWMicsIGBObyBzdWJuZXRzIG1hdGNoaW5nIHNlbGVjdGlvbjogJyR7SlNPTi5zdHJpbmdpZnkodnBuUm91dGVQcm9wYWdhdGlvbil9Jy4gU2VsZWN0IG90aGVyIHN1Ym5ldHMgdG8gYWRkIHJvdXRlcyB0by5gKTtcbiAgICB9XG5cbiAgICB0aGlzLl9yb3V0ZVByb3BhZ2F0aW9uID0gbmV3IENmblZQTkdhdGV3YXlSb3V0ZVByb3BhZ2F0aW9uKHRoaXMsICdSb3V0ZVByb3BhZ2F0aW9uJywge1xuICAgICAgcm91dGVUYWJsZUlkcyxcbiAgICAgIHZwbkdhdGV3YXlJZDogdGhpcy5yb3V0ZXJUYXJnZXRJZCxcbiAgICB9KTtcbiAgICAvLyBUaGUgQVdTOjpFQzI6OlZQTkdhdGV3YXlSb3V0ZVByb3BhZ2F0aW9uIHJlc291cmNlIGNhbm5vdCB1c2UgdGhlIFZQTiBnYXRld2F5XG4gICAgLy8gdW50aWwgaXQgaGFzIHN1Y2Nlc3NmdWxseSBhdHRhY2hlZCB0byB0aGUgVlBDLlxuICAgIC8vIFNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcmVzb3VyY2UtZWMyLXZwbi1nYXRld2F5cm91dGVwcm9wLmh0bWxcbiAgICB0aGlzLl9yb3V0ZVByb3BhZ2F0aW9uLm5vZGUuYWRkRGVwZW5kZW5jeSh0aGlzLl9hdHRhY2htZW50KTtcbiAgfVxufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXR3b3JrIGFkZHJlc3MgdHJhbnNsYXRpb24gKE5BVCkgZ2F0ZXdheVxuICogQHJlc291cmNlIEFXUzo6RUMyOjpOYXRHYXRld2F5XG4gKi9cbmV4cG9ydCBjbGFzcyBOYXRHYXRld2F5IGV4dGVuZHMgUmVzb3VyY2UgaW1wbGVtZW50cyBJUm91dGVUYXJnZXQge1xuXG4gIC8qKlxuICAgKiBJZCBvZiB0aGUgTmF0R2F0ZXdheVxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgbmF0R2F0ZXdheUlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHJvdXRlciB1c2VkIGluIHRoZSByb3V0ZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSByb3V0ZXJUeXBlOiBSb3V0ZXJUeXBlO1xuXG4gIC8qKlxuICAgKiBUaGUgSUQgb2YgdGhlIHJvdXRlIHRhcmdldC5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSByb3V0ZXJUYXJnZXRJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgTkFUIGdhdGV3YXkgc3VwcG9ydHMgcHVibGljIG9yIHByaXZhdGUgY29ubmVjdGl2aXR5LlxuICAgKlxuICAgKiBAZGVmYXVsdCBwdWJsaWNcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBjb25uZWN0aXZpdHlUeXBlPzogTmF0Q29ubmVjdGl2aXR5VHlwZTtcblxuICAvKipcbiAgICogVGhlIG1heGltdW0gYW1vdW50IG9mIHRpbWUgdG8gd2FpdCBiZWZvcmUgZm9yY2libHkgcmVsZWFzaW5nIHRoZVxuICAgKiBJUCBhZGRyZXNzZXMgaWYgY29ubmVjdGlvbnMgYXJlIHN0aWxsIGluIHByb2dyZXNzLlxuICAgKlxuICAgKiBAZGVmYXVsdCAnMzUwIHNlY29uZHMnXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgbWF4RHJhaW5EdXJhdGlvbj86IER1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBUaGUgTkFUIGdhdGV3YXkgQ0ZOIHJlc291cmNlLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHJlc291cmNlOiBDZm5OYXRHYXRld2F5O1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBOYXRHYXRld2F5UHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgdGhpcy5yb3V0ZXJUeXBlID0gUm91dGVyVHlwZS5OQVRfR0FURVdBWTtcblxuICAgIHRoaXMuY29ubmVjdGl2aXR5VHlwZSA9IHByb3BzLmNvbm5lY3Rpdml0eVR5cGUgfHwgTmF0Q29ubmVjdGl2aXR5VHlwZS5QVUJMSUM7XG4gICAgdGhpcy5tYXhEcmFpbkR1cmF0aW9uID0gcHJvcHMubWF4RHJhaW5EdXJhdGlvbiB8fCBEdXJhdGlvbi5zZWNvbmRzKDM1MCk7XG5cbiAgICBpZiAodGhpcy5jb25uZWN0aXZpdHlUeXBlID09PSBOYXRDb25uZWN0aXZpdHlUeXBlLlBVQkxJQykge1xuICAgICAgaWYgKCFwcm9wcy52cGMgJiYgIXByb3BzLmFsbG9jYXRpb25JZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0VpdGhlciBwcm92aWRlIHZwYyBvciBhbGxvY2F0aW9uSWQnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocHJvcHMubmF0R2F0ZXdheU5hbWUpIHtcbiAgICAgIFRhZ3Mub2YodGhpcykuYWRkKE5BTUVfVEFHLCBwcm9wcz8ubmF0R2F0ZXdheU5hbWUpO1xuICAgIH1cblxuICAgIC8vIElmIHVzZXIgZG9lcyBub3QgcHJvdmlkZSBFSVAsIGdlbmVyYXRlIG9uZSBmb3IgdGhlbVxuICAgIHZhciBhSWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBpZiAodGhpcy5jb25uZWN0aXZpdHlUeXBlID09PSBOYXRDb25uZWN0aXZpdHlUeXBlLlBVQkxJQykge1xuICAgICAgaWYgKCFwcm9wcy5hbGxvY2F0aW9uSWQpIHtcbiAgICAgICAgbGV0IGVpcCA9IG5ldyBDZm5FSVAodGhpcywgJ0VJUCcsIHtcbiAgICAgICAgICBkb21haW46IHByb3BzLnZwYz8udnBjSWQsXG4gICAgICAgIH0pO1xuICAgICAgICBhSWQgPSBlaXAuYXR0ckFsbG9jYXRpb25JZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFJZCA9IHByb3BzLmFsbG9jYXRpb25JZDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnJlc291cmNlID0gbmV3IENmbk5hdEdhdGV3YXkodGhpcywgJ05BVEdhdGV3YXknLCB7XG4gICAgICBzdWJuZXRJZDogcHJvcHMuc3VibmV0LnN1Ym5ldElkLFxuICAgICAgYWxsb2NhdGlvbklkOiBhSWQsXG4gICAgICBtYXhEcmFpbkR1cmF0aW9uU2Vjb25kczogcHJvcHMubWF4RHJhaW5EdXJhdGlvbj8udG9TZWNvbmRzKCksXG4gICAgICBzZWNvbmRhcnlBbGxvY2F0aW9uSWRzOiBwcm9wcy5zZWNvbmRhcnlBbGxvY2F0aW9uSWRzLFxuICAgICAgLi4ucHJvcHMsXG4gICAgfSk7XG4gICAgdGhpcy5uYXRHYXRld2F5SWQgPSB0aGlzLnJlc291cmNlLmF0dHJOYXRHYXRld2F5SWQ7XG5cbiAgICB0aGlzLnJvdXRlclRhcmdldElkID0gdGhpcy5yZXNvdXJjZS5hdHRyTmF0R2F0ZXdheUlkO1xuICAgIHRoaXMubm9kZS5kZWZhdWx0Q2hpbGQgPSB0aGlzLnJlc291cmNlO1xuICAgIHRoaXMubm9kZS5hZGREZXBlbmRlbmN5KHByb3BzLnN1Ym5ldC5pbnRlcm5ldENvbm5lY3Rpdml0eUVzdGFibGlzaGVkKTtcbiAgfVxufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBwZWVyaW5nIGNvbm5lY3Rpb24gYmV0d2VlbiB0d28gVlBDc1xuICogQHJlc291cmNlIEFXUzo6RUMyOjpWUENQZWVyaW5nQ29ubmVjdGlvblxuICovXG5leHBvcnQgY2xhc3MgVlBDUGVlcmluZ0Nvbm5lY3Rpb24gZXh0ZW5kcyBSZXNvdXJjZSBpbXBsZW1lbnRzIElSb3V0ZVRhcmdldCB7XG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHJvdXRlciB1c2VkIGluIHRoZSByb3V0ZS5cbiAgICovXG4gIHJlYWRvbmx5IHJvdXRlclR5cGU6IFJvdXRlclR5cGU7XG5cbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgcm91dGUgdGFyZ2V0LlxuICAgKi9cbiAgcmVhZG9ubHkgcm91dGVyVGFyZ2V0SWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIFZQQyBwZWVyaW5nIGNvbm5lY3Rpb24gQ0ZOIHJlc291cmNlLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHJlc291cmNlOiBDZm5WUENQZWVyaW5nQ29ubmVjdGlvbjtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogVlBDUGVlcmluZ0Nvbm5lY3Rpb25Qcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICB0aGlzLnJvdXRlclR5cGUgPSBSb3V0ZXJUeXBlLlZQQ19QRUVSSU5HX0NPTk5FQ1RJT047XG5cbiAgICBjb25zdCBpc0Nyb3NzQWNjb3VudCA9IHByb3BzLnJlcXVlc3RvclZwYy5vd25lckFjY291bnRJZCAhPT0gcHJvcHMuYWNjZXB0b3JWcGMub3duZXJBY2NvdW50SWQ7XG5cbiAgICBpZiAoIWlzQ3Jvc3NBY2NvdW50ICYmIHByb3BzLnBlZXJSb2xlQXJuKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3BlZXJSb2xlQXJuIGlzIG5vdCBuZWVkZWQgZm9yIHNhbWUgYWNjb3VudCBwZWVyaW5nJyk7XG4gICAgfVxuXG4gICAgaWYgKGlzQ3Jvc3NBY2NvdW50ICYmICFwcm9wcy5wZWVyUm9sZUFybikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDcm9zcyBhY2NvdW50IFZQQyBwZWVyaW5nIHJlcXVpcmVzIHBlZXJSb2xlQXJuJyk7XG4gICAgfVxuXG4gICAgY29uc3Qgb3ZlcmxhcCA9IHRoaXMudmFsaWRhdGVWcGNDaWRyT3ZlcmxhcChwcm9wcy5yZXF1ZXN0b3JWcGMsIHByb3BzLmFjY2VwdG9yVnBjKTtcbiAgICBpZiAob3ZlcmxhcCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDSURSIGJsb2NrIHNob3VsZCBub3Qgb3ZlcmxhcCB3aXRoIGVhY2ggb3RoZXIgZm9yIGVzdGFibGlzaGluZyBhIHBlZXJpbmcgY29ubmVjdGlvbicpO1xuICAgIH1cbiAgICBpZiAocHJvcHMudnBjUGVlcmluZ0Nvbm5lY3Rpb25OYW1lKSB7XG4gICAgICBUYWdzLm9mKHRoaXMpLmFkZChOQU1FX1RBRywgcHJvcHMudnBjUGVlcmluZ0Nvbm5lY3Rpb25OYW1lKTtcbiAgICB9XG5cbiAgICB0aGlzLnJlc291cmNlID0gbmV3IENmblZQQ1BlZXJpbmdDb25uZWN0aW9uKHRoaXMsICdWUENQZWVyaW5nQ29ubmVjdGlvbicsIHtcbiAgICAgIHZwY0lkOiBwcm9wcy5yZXF1ZXN0b3JWcGMudnBjSWQsXG4gICAgICBwZWVyVnBjSWQ6IHByb3BzLmFjY2VwdG9yVnBjLnZwY0lkLFxuICAgICAgcGVlck93bmVySWQ6IHByb3BzLmFjY2VwdG9yVnBjLm93bmVyQWNjb3VudElkLFxuICAgICAgcGVlclJlZ2lvbjogcHJvcHMuYWNjZXB0b3JWcGMucmVnaW9uLFxuICAgICAgcGVlclJvbGVBcm46IGlzQ3Jvc3NBY2NvdW50ID8gcHJvcHMucGVlclJvbGVBcm4gOiB1bmRlZmluZWQsXG4gICAgfSk7XG5cbiAgICB0aGlzLnJvdXRlclRhcmdldElkID0gdGhpcy5yZXNvdXJjZS5hdHRySWQ7XG4gICAgdGhpcy5ub2RlLmRlZmF1bHRDaGlsZCA9IHRoaXMucmVzb3VyY2U7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIGlmIHRoZSBwcm92aWRlZCBJUHY0IENJRFIgYmxvY2sgb3ZlcmxhcHMgd2l0aCBleGlzdGluZyBzdWJuZXQgQ0lEUiBibG9ja3Mgd2l0aGluIHRoZSBnaXZlbiBWUEMuXG4gICAqXG4gICAqIEBwYXJhbSByZXF1ZXN0b3JWcGMgVGhlIFZQQyBvZiB0aGUgcmVxdWVzdG9yLlxuICAgKiBAcGFyYW0gYWNjZXB0b3JWcGMgVGhlIFZQQyBvZiB0aGUgYWNjZXB0b3IuXG4gICAqIEByZXR1cm5zIFRydWUgaWYgdGhlIElQdjQgQ0lEUiBibG9jayBvdmVybGFwcyB3aXRoIGVhY2ggb3RoZXIgZm9yIHR3byBWUENzLCBmYWxzZSBvdGhlcndpc2UuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZVZwY0NpZHJPdmVybGFwKHJlcXVlc3RvclZwYzogSVZwY1YyLCBhY2NlcHRvclZwYzogSVZwY1YyKTogYm9vbGVhbiB7XG5cbiAgICBjb25zdCByZXF1ZXN0b3JDaWRycyA9IFtyZXF1ZXN0b3JWcGMuaXB2NENpZHJCbG9ja107XG4gICAgY29uc3QgYWNjZXB0b3JDaWRycyA9IFthY2NlcHRvclZwYy5pcHY0Q2lkckJsb2NrXTtcblxuICAgIGlmIChyZXF1ZXN0b3JWcGMuc2Vjb25kYXJ5Q2lkckJsb2NrKSB7XG4gICAgICByZXF1ZXN0b3JDaWRycy5wdXNoKC4uLnJlcXVlc3RvclZwYy5zZWNvbmRhcnlDaWRyQmxvY2tcbiAgICAgICAgLm1hcChibG9jayA9PiBibG9jay5jaWRyQmxvY2spXG4gICAgICAgIC5maWx0ZXIoKGNpZHIpOiBjaWRyIGlzIHN0cmluZyA9PiBjaWRyICE9PSB1bmRlZmluZWQpKTtcbiAgICB9XG5cbiAgICBpZiAoYWNjZXB0b3JWcGMuc2Vjb25kYXJ5Q2lkckJsb2NrKSB7XG4gICAgICBhY2NlcHRvckNpZHJzLnB1c2goLi4uYWNjZXB0b3JWcGMuc2Vjb25kYXJ5Q2lkckJsb2NrXG4gICAgICAgIC5tYXAoYmxvY2sgPT4gYmxvY2suY2lkckJsb2NrKVxuICAgICAgICAuZmlsdGVyKChjaWRyKTogY2lkciBpcyBzdHJpbmcgPT4gY2lkciAhPT0gdW5kZWZpbmVkKSk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCByZXF1ZXN0b3JDaWRyIG9mIHJlcXVlc3RvckNpZHJzKSB7XG4gICAgICBjb25zdCByZXF1ZXN0b3JSYW5nZSA9IG5ldyBDaWRyQmxvY2socmVxdWVzdG9yQ2lkcik7XG4gICAgICBjb25zdCByZXF1ZXN0b3JJcFJhbmdlOiBbc3RyaW5nLCBzdHJpbmddID0gW3JlcXVlc3RvclJhbmdlLm1pbklwKCksIHJlcXVlc3RvclJhbmdlLm1heElwKCldO1xuXG4gICAgICBmb3IgKGNvbnN0IGFjY2VwdG9yQ2lkciBvZiBhY2NlcHRvckNpZHJzKSB7XG4gICAgICAgIGNvbnN0IGFjY2VwdG9yUmFuZ2UgPSBuZXcgQ2lkckJsb2NrKGFjY2VwdG9yQ2lkcik7XG4gICAgICAgIGNvbnN0IGFjY2VwdG9ySXBSYW5nZTogW3N0cmluZywgc3RyaW5nXSA9IFthY2NlcHRvclJhbmdlLm1pbklwKCksIGFjY2VwdG9yUmFuZ2UubWF4SXAoKV07XG5cbiAgICAgICAgaWYgKHJlcXVlc3RvclJhbmdlLnJhbmdlc092ZXJsYXAoYWNjZXB0b3JJcFJhbmdlLCByZXF1ZXN0b3JJcFJhbmdlKSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbn1cblxuLyoqXG4gKiBUaGUgdHlwZSBvZiBlbmRwb2ludCBvciBnYXRld2F5IGJlaW5nIHRhcmdldGVkIGJ5IHRoZSByb3V0ZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSb3V0ZVRhcmdldFByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBnYXRld2F5IHJvdXRlIHRhcmdldC4gVGhpcyBpcyB1c2VkIGZvciB0YXJnZXRzIHN1Y2ggYXNcbiAgICogZWdyZXNzLW9ubHkgaW50ZXJuZXQgZ2F0ZXdheSBvciBWUEMgcGVlcmluZyBjb25uZWN0aW9uLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHRhcmdldCBpcyBub3Qgc2V0IHRvIGEgZ2F0ZXdheSwgaW4gdGhpcyBjYXNlIGFuIGVuZHBvaW50IGlzIG5lZWRlZC5cbiAgICovXG4gIHJlYWRvbmx5IGdhdGV3YXk/OiBJUm91dGVUYXJnZXQ7XG5cbiAgLyoqXG4gICAqIFRoZSBlbmRwb2ludCByb3V0ZSB0YXJnZXQuIFRoaXMgaXMgdXNlZCBmb3IgdGFyZ2V0cyBzdWNoIGFzXG4gICAqIFZQQyBlbmRwb2ludHMuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdGFyZ2V0IGlzIG5vdCBzZXQgdG8gYW4gZW5kcG9pbnQsIGluIHRoaXMgY2FzZSBhIGdhdGV3YXkgaXMgbmVlZGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgZW5kcG9pbnQ/OiBJVnBjRW5kcG9pbnQ7XG59XG5cbi8qKlxuICogVGhlIGdhdGV3YXkgb3IgZW5kcG9pbnQgdGFyZ2V0ZWQgYnkgdGhlIHJvdXRlLlxuICovXG5leHBvcnQgY2xhc3MgUm91dGVUYXJnZXRUeXBlIHtcbiAgLyoqXG4gICAqIFRoZSBnYXRld2F5IHJvdXRlIHRhcmdldC4gVGhpcyBpcyB1c2VkIGZvciB0YXJnZXRzIHN1Y2ggYXNcbiAgICogZWdyZXNzLW9ubHkgaW50ZXJuZXQgZ2F0ZXdheSBvciBWUEMgcGVlcmluZyBjb25uZWN0aW9uLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHRhcmdldCBpcyBub3Qgc2V0IHRvIGEgZ2F0ZXdheSwgaW4gdGhpcyBjYXNlIGFuIGVuZHBvaW50IGlzIG5lZWRlZC5cbiAgICovXG4gIHJlYWRvbmx5IGdhdGV3YXk/OiBJUm91dGVUYXJnZXQ7XG5cbiAgLyoqXG4gICAqIFRoZSBlbmRwb2ludCByb3V0ZSB0YXJnZXQuIFRoaXMgaXMgdXNlZCBmb3IgdGFyZ2V0cyBzdWNoIGFzXG4gICAqIFZQQyBlbmRwb2ludHMuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdGFyZ2V0IGlzIG5vdCBzZXQgdG8gYW4gZW5kcG9pbnQsIGluIHRoaXMgY2FzZSBhIGdhdGV3YXkgaXMgbmVlZGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgZW5kcG9pbnQ/OiBJVnBjRW5kcG9pbnQ7XG5cbiAgY29uc3RydWN0b3IocHJvcHM6IFJvdXRlVGFyZ2V0UHJvcHMpIHtcbiAgICBpZiAoKHByb3BzLmdhdGV3YXkgJiYgcHJvcHMuZW5kcG9pbnQpIHx8ICghcHJvcHMuZ2F0ZXdheSAmJiAhcHJvcHMuZW5kcG9pbnQpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4YWN0bHkgb25lIG9mIGBnYXRld2F5YCBvciBgZW5kcG9pbnRgIG11c3QgYmUgc3BlY2lmaWVkLicpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmdhdGV3YXkgPSBwcm9wcy5nYXRld2F5O1xuICAgICAgdGhpcy5lbmRwb2ludCA9IHByb3BzLmVuZHBvaW50O1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEludGVyZmFjZSB0byBkZWZpbmUgYSByb3V0ZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJUm91dGVWMiBleHRlbmRzIElSZXNvdXJjZSB7XG4gIC8qKlxuICAgKiBUaGUgSUQgb2YgdGhlIHJvdXRlIHRhYmxlIGZvciB0aGUgcm91dGUuXG4gICAqIEBhdHRyaWJ1dGUgcm91dGVUYWJsZVxuICAgKi9cbiAgcmVhZG9ubHkgcm91dGVUYWJsZTogSVJvdXRlVGFibGU7XG5cbiAgLyoqXG4gICAqIFRoZSBJUHY0IG9yIElQdjYgQ0lEUiBibG9jayB1c2VkIGZvciB0aGUgZGVzdGluYXRpb24gbWF0Y2guXG4gICAqXG4gICAqIFJvdXRpbmcgZGVjaXNpb25zIGFyZSBiYXNlZCBvbiB0aGUgbW9zdCBzcGVjaWZpYyBtYXRjaC5cbiAgICogVE9ETzogTG9vayBmb3Igc3Ryb25nIElQIHR5cGUgaW1wbGVtZW50YXRpb24gaGVyZS5cbiAgICovXG4gIHJlYWRvbmx5IGRlc3RpbmF0aW9uOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBnYXRld2F5IG9yIGVuZHBvaW50IHRhcmdldGVkIGJ5IHRoZSByb3V0ZS5cbiAgICovXG4gIHJlYWRvbmx5IHRhcmdldDogUm91dGVUYXJnZXRUeXBlO1xufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgdG8gZGVmaW5lIGEgcm91dGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUm91dGVQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgSUQgb2YgdGhlIHJvdXRlIHRhYmxlIGZvciB0aGUgcm91dGUuXG4gICAqXG4gICAqIEBhdHRyaWJ1dGUgcm91dGVUYWJsZVxuICAgKi9cbiAgcmVhZG9ubHkgcm91dGVUYWJsZTogSVJvdXRlVGFibGU7XG5cbiAgLyoqXG4gICAqIFRoZSBJUHY0IG9yIElQdjYgQ0lEUiBibG9jayB1c2VkIGZvciB0aGUgZGVzdGluYXRpb24gbWF0Y2guXG4gICAqXG4gICAqIFJvdXRpbmcgZGVjaXNpb25zIGFyZSBiYXNlZCBvbiB0aGUgbW9zdCBzcGVjaWZpYyBtYXRjaC5cbiAgICovXG4gIHJlYWRvbmx5IGRlc3RpbmF0aW9uOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBnYXRld2F5IG9yIGVuZHBvaW50IHRhcmdldGVkIGJ5IHRoZSByb3V0ZS5cbiAgICovXG4gIHJlYWRvbmx5IHRhcmdldDogUm91dGVUYXJnZXRUeXBlO1xuXG4gIC8qKlxuICAgKiBUaGUgcmVzb3VyY2UgbmFtZSBvZiB0aGUgcm91dGUuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gcHJvdmlzaW9uZWQgd2l0aG91dCBhIHJvdXRlIG5hbWVcbiAgICovXG4gIHJlYWRvbmx5IHJvdXRlTmFtZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IHJvdXRlIHdpdGggYWRkZWQgZnVuY3Rpb25hbGl0eS5cbiAqIEByZXNvdXJjZSBBV1M6OkVDMjo6Um91dGVcbiAqL1xuZXhwb3J0IGNsYXNzIFJvdXRlIGV4dGVuZHMgUmVzb3VyY2UgaW1wbGVtZW50cyBJUm91dGVWMiB7XG4gIC8qKlxuICAgKiBUaGUgSVB2NCBvciBJUHY2IENJRFIgYmxvY2sgdXNlZCBmb3IgdGhlIGRlc3RpbmF0aW9uIG1hdGNoLlxuICAgKlxuICAgKiBSb3V0aW5nIGRlY2lzaW9ucyBhcmUgYmFzZWQgb24gdGhlIG1vc3Qgc3BlY2lmaWMgbWF0Y2guXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZGVzdGluYXRpb246IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGdhdGV3YXkgb3IgZW5kcG9pbnQgdGFyZ2V0ZWQgYnkgdGhlIHJvdXRlLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHRhcmdldDogUm91dGVUYXJnZXRUeXBlO1xuXG4gIC8qKlxuICAgKiBUaGUgcm91dGUgdGFibGUgZm9yIHRoZSByb3V0ZS5cbiAgICogQGF0dHJpYnV0ZSByb3V0ZVRhYmxlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcm91dGVUYWJsZTogSVJvdXRlVGFibGU7XG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHJvdXRlciB0aGUgcm91dGUgaXMgdGFyZ2V0dGluZ1xuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHRhcmdldFJvdXRlclR5cGU6IFJvdXRlclR5cGU7XG5cbiAgLyoqXG4gICAqIFRoZSByb3V0ZSBDRk4gcmVzb3VyY2UuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcmVzb3VyY2U/OiBDZm5Sb3V0ZTtcblxuICAvKipcbiAgICogRGVzdGluYXRpb24gY2lkciBibG9jayBmb3IgaXB2NlxuICAgKi9cbiAgcHJpdmF0ZSBkZXN0aW5hdGlvbklwdjZDaWRyPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBEZXN0aW5hdGlvbiBjaWRyIGJsb2NrIGZvciBpcHY0XG4gICAqL1xuICBwcml2YXRlIGRlc3RpbmF0aW9uSXB2NENpZHI/OiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFJvdXRlUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgdGhpcy50YXJnZXQgPSBwcm9wcy50YXJnZXQ7XG4gICAgdGhpcy5yb3V0ZVRhYmxlID0gcHJvcHMucm91dGVUYWJsZTtcbiAgICB0aGlzLmRlc3RpbmF0aW9uID0gcHJvcHMuZGVzdGluYXRpb247XG4gICAgY29uc3QgaXNEZXN0aW5hdGlvbklwdjQgPSBOZXR3b3JrVXRpbHMudmFsaWRJcChwcm9wcy5kZXN0aW5hdGlvbik7XG4gICAgaWYgKCFpc0Rlc3RpbmF0aW9uSXB2NCkge1xuICAgICAgLy9UT0RPIFZhbGlkYXRlIGZvciBJUHY2IENJRFIgcmFuZ2VcbiAgICAgIHRoaXMuZGVzdGluYXRpb25JcHY2Q2lkciA9IHByb3BzLmRlc3RpbmF0aW9uO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRlc3RpbmF0aW9uSXB2NENpZHIgPSBwcm9wcy5kZXN0aW5hdGlvbjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy50YXJnZXQuZ2F0ZXdheT8ucm91dGVyVHlwZSA9PT0gUm91dGVyVHlwZS5FR1JFU1NfT05MWV9JTlRFUk5FVF9HQVRFV0FZICYmIGlzRGVzdGluYXRpb25JcHY0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0VncmVzcyBvbmx5IGludGVybmV0IGdhdGV3YXkgZG9lcyBub3Qgc3VwcG9ydCBJUHY0IHJvdXRpbmcnKTtcbiAgICB9XG4gICAgdGhpcy50YXJnZXRSb3V0ZXJUeXBlID0gdGhpcy50YXJnZXQuZ2F0ZXdheSA/IHRoaXMudGFyZ2V0LmdhdGV3YXkucm91dGVyVHlwZSA6IFJvdXRlclR5cGUuVlBDX0VORFBPSU5UO1xuICAgIC8vIEdhdGV3YXkgZ2VuZXJhdGVzIHJvdXRlIGF1dG9tYXRpY2FsbHkgdmlhIGl0cyBSb3V0ZVRhYmxlLCB0aHVzIHdlIGRvbid0IG5lZWQgdG8gZ2VuZXJhdGUgdGhlIHJlc291cmNlIGZvciBpdFxuICAgIGlmICghKHRoaXMudGFyZ2V0LmVuZHBvaW50IGluc3RhbmNlb2YgR2F0ZXdheVZwY0VuZHBvaW50KSkge1xuICAgICAgdGhpcy5yZXNvdXJjZSA9IG5ldyBDZm5Sb3V0ZSh0aGlzLCAnUm91dGUnLCB7XG4gICAgICAgIHJvdXRlVGFibGVJZDogdGhpcy5yb3V0ZVRhYmxlLnJvdXRlVGFibGVJZCxcbiAgICAgICAgZGVzdGluYXRpb25DaWRyQmxvY2s6IHRoaXMuZGVzdGluYXRpb25JcHY0Q2lkcixcbiAgICAgICAgZGVzdGluYXRpb25JcHY2Q2lkckJsb2NrOiB0aGlzLmRlc3RpbmF0aW9uSXB2NkNpZHIsXG4gICAgICAgIFtyb3V0ZXJUeXBlVG9Qcm9wTmFtZSh0aGlzLnRhcmdldFJvdXRlclR5cGUpXTogdGhpcy50YXJnZXQuZ2F0ZXdheSA/IHRoaXMudGFyZ2V0LmdhdGV3YXkucm91dGVyVGFyZ2V0SWQgOlxuICAgICAgICAgIHRoaXMudGFyZ2V0LmVuZHBvaW50ID8gdGhpcy50YXJnZXQuZW5kcG9pbnQudnBjRW5kcG9pbnRJZCA6IG51bGwsXG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5ub2RlLmRlZmF1bHRDaGlsZCA9IHRoaXMucmVzb3VyY2U7XG5cbiAgICAvL0NyZWF0ZSBhIHJvdXRlIG9ubHkgYWZ0ZXIgdGFyZ2V0IGdhdGV3YXkgb3IgZW5kcG9pbnQgaXMgY3JlYXRlZFxuICAgIGlmICh0aGlzLnRhcmdldC5nYXRld2F5KSB7XG4gICAgICB0aGlzLm5vZGUuYWRkRGVwZW5kZW5jeSh0aGlzLnRhcmdldC5nYXRld2F5KTtcbiAgICB9XG4gICAgaWYgKHRoaXMudGFyZ2V0LmVuZHBvaW50KSB7XG4gICAgICB0aGlzLm5vZGUuYWRkRGVwZW5kZW5jeSh0aGlzLnRhcmdldC5lbmRwb2ludCk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogUHJvcGVydGllcyB0byBkZWZpbmUgYSByb3V0ZSB0YWJsZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSb3V0ZVRhYmxlUHJvcHMge1xuICAvKipcbiAgICogVGhlIElEIG9mIHRoZSBWUEMuXG4gICAqL1xuICByZWFkb25seSB2cGM6IElWcGNWMjtcblxuICAvKipcbiAgICogVGhlIHJlc291cmNlIG5hbWUgb2YgdGhlIHJvdXRlIHRhYmxlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHByb3Zpc2lvbmVkIHdpdGhvdXQgYSByb3V0ZSB0YWJsZSBuYW1lXG4gICAqL1xuICByZWFkb25seSByb3V0ZVRhYmxlTmFtZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgcm91dGUgdGFibGUgZm9yIHRoZSBzcGVjaWZpZWQgVlBDXG4gKiBAcmVzb3VyY2UgQVdTOjpFQzI6OlJvdXRlVGFibGVcbiAqL1xuZXhwb3J0IGNsYXNzIFJvdXRlVGFibGUgZXh0ZW5kcyBSZXNvdXJjZSBpbXBsZW1lbnRzIElSb3V0ZVRhYmxlIHtcbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgcm91dGUgdGFibGUuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcm91dGVUYWJsZUlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSByb3V0ZSB0YWJsZSBDRk4gcmVzb3VyY2UuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcmVzb3VyY2U6IENmblJvdXRlVGFibGU7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFJvdXRlVGFibGVQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICB0aGlzLnJlc291cmNlID0gbmV3IENmblJvdXRlVGFibGUodGhpcywgJ1JvdXRlVGFibGUnLCB7XG4gICAgICB2cGNJZDogcHJvcHMudnBjLnZwY0lkLFxuICAgIH0pO1xuICAgIGlmIChwcm9wcy5yb3V0ZVRhYmxlTmFtZSkge1xuICAgICAgVGFncy5vZih0aGlzKS5hZGQoTkFNRV9UQUcsIHByb3BzLnJvdXRlVGFibGVOYW1lKTtcbiAgICB9XG4gICAgdGhpcy5ub2RlLmRlZmF1bHRDaGlsZCA9IHRoaXMucmVzb3VyY2U7XG5cbiAgICB0aGlzLnJvdXRlVGFibGVJZCA9IHRoaXMucmVzb3VyY2UuYXR0clJvdXRlVGFibGVJZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgbmV3IGN1c3RvbSByb3V0ZSB0byB0aGUgcm91dGUgdGFibGUuXG4gICAqXG4gICAqIEBwYXJhbSBkZXN0aW5hdGlvbiBUaGUgSVB2NCBvciBJUHY2IENJRFIgYmxvY2sgdXNlZCBmb3IgdGhlIGRlc3RpbmF0aW9uIG1hdGNoLlxuICAgKiBAcGFyYW0gdGFyZ2V0IFRoZSBnYXRld2F5IG9yIGVuZHBvaW50IHRhcmdldGVkIGJ5IHRoZSByb3V0ZS5cbiAgICogQHBhcmFtIHJvdXRlTmFtZSBUaGUgcmVzb3VyY2UgbmFtZSBvZiB0aGUgcm91dGUuXG4gICAqL1xuICBwdWJsaWMgYWRkUm91dGUoaWQ6IHN0cmluZywgZGVzdGluYXRpb246IHN0cmluZywgdGFyZ2V0OiBSb3V0ZVRhcmdldFR5cGUsIHJvdXRlTmFtZT86IHN0cmluZykge1xuICAgIG5ldyBSb3V0ZSh0aGlzLCBpZCwge1xuICAgICAgcm91dGVUYWJsZTogdGhpcyxcbiAgICAgIGRlc3RpbmF0aW9uOiBkZXN0aW5hdGlvbixcbiAgICAgIHRhcmdldDogdGFyZ2V0LFxuICAgICAgcm91dGVOYW1lOiByb3V0ZU5hbWUsXG4gICAgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcm91dGVyVHlwZVRvUHJvcE5hbWUocm91dGVyVHlwZTogUm91dGVyVHlwZSkge1xuICByZXR1cm4gKHtcbiAgICBbUm91dGVyVHlwZS5DQVJSSUVSX0dBVEVXQVldOiAnY2FycmllckdhdGV3YXlJZCcsXG4gICAgW1JvdXRlclR5cGUuRUdSRVNTX09OTFlfSU5URVJORVRfR0FURVdBWV06ICdlZ3Jlc3NPbmx5SW50ZXJuZXRHYXRld2F5SWQnLFxuICAgIFtSb3V0ZXJUeXBlLkdBVEVXQVldOiAnZ2F0ZXdheUlkJyxcbiAgICBbUm91dGVyVHlwZS5JTlNUQU5DRV06ICdpbnN0YW5jZUlkJyxcbiAgICBbUm91dGVyVHlwZS5MT0NBTF9HQVRFV0FZXTogJ2xvY2FsR2F0ZXdheUlkJyxcbiAgICBbUm91dGVyVHlwZS5OQVRfR0FURVdBWV06ICduYXRHYXRld2F5SWQnLFxuICAgIFtSb3V0ZXJUeXBlLk5FVFdPUktfSU5URVJGQUNFXTogJ25ldHdvcmtJbnRlcmZhY2VJZCcsXG4gICAgW1JvdXRlclR5cGUuVFJBTlNJVF9HQVRFV0FZXTogJ3RyYW5zaXRHYXRld2F5SWQnLFxuICAgIFtSb3V0ZXJUeXBlLlZQQ19QRUVSSU5HX0NPTk5FQ1RJT05dOiAndnBjUGVlcmluZ0Nvbm5lY3Rpb25JZCcsXG4gICAgW1JvdXRlclR5cGUuVlBDX0VORFBPSU5UXTogJ3ZwY0VuZHBvaW50SWQnLFxuICB9KVtyb3V0ZXJUeXBlXTtcbn1cbiJdfQ==
|
package/lib/subnet-v2.js
CHANGED
|
@@ -19,7 +19,15 @@ 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.175.1-alpha.0" };
|
|
23
|
+
/**
|
|
24
|
+
* Name tag constant
|
|
25
|
+
*/
|
|
26
|
+
const NAME_TAG = 'Name';
|
|
27
|
+
/**
|
|
28
|
+
* VPC Name tag constant
|
|
29
|
+
*/
|
|
30
|
+
const VPCNAME_TAG = 'VpcName';
|
|
23
31
|
/**
|
|
24
32
|
* The SubnetV2 class represents a subnet within a VPC (Virtual Private Cloud) in AWS.
|
|
25
33
|
* It extends the Resource class and implements the ISubnet interface.
|
|
@@ -158,6 +166,12 @@ class SubnetV2 extends aws_cdk_lib_1.Resource {
|
|
|
158
166
|
this.subnetId = subnet.ref;
|
|
159
167
|
this.availabilityZone = props.availabilityZone;
|
|
160
168
|
this._networkAcl = aws_ec2_1.NetworkAcl.fromNetworkAclId(this, 'Acl', subnet.attrNetworkAclAssociationId);
|
|
169
|
+
if (props.subnetName) {
|
|
170
|
+
aws_cdk_lib_1.Tags.of(this).add(NAME_TAG, props.subnetName);
|
|
171
|
+
}
|
|
172
|
+
if (props.vpc.vpcName) {
|
|
173
|
+
aws_cdk_lib_1.Tags.of(this).add(VPCNAME_TAG, props.vpc.vpcName);
|
|
174
|
+
}
|
|
161
175
|
if (props.routeTable) {
|
|
162
176
|
this._routeTable = props.routeTable;
|
|
163
177
|
}
|
|
@@ -165,6 +179,7 @@ class SubnetV2 extends aws_cdk_lib_1.Resource {
|
|
|
165
179
|
// Assigning a default route table
|
|
166
180
|
this._routeTable = new route_1.RouteTable(this, 'RouteTable', {
|
|
167
181
|
vpc: props.vpc,
|
|
182
|
+
routeTableName: 'DefaultCDKRouteTable',
|
|
168
183
|
});
|
|
169
184
|
}
|
|
170
185
|
const routeAssoc = new aws_ec2_1.CfnSubnetRouteTableAssociation(this, 'RouteTableAssociation', {
|
|
@@ -207,7 +222,7 @@ class SubnetV2 extends aws_cdk_lib_1.Resource {
|
|
|
207
222
|
}
|
|
208
223
|
exports.SubnetV2 = SubnetV2;
|
|
209
224
|
_b = JSII_RTTI_SYMBOL_1;
|
|
210
|
-
SubnetV2[_b] = { fqn: "@aws-cdk/aws-ec2-alpha.SubnetV2", version: "2.
|
|
225
|
+
SubnetV2[_b] = { fqn: "@aws-cdk/aws-ec2-alpha.SubnetV2", version: "2.175.1-alpha.0" };
|
|
211
226
|
const subnetTypeMap = {
|
|
212
227
|
[aws_ec2_1.SubnetType.PRIVATE_ISOLATED]: (vpc, subnet) => vpc.isolatedSubnets.push(subnet),
|
|
213
228
|
[aws_ec2_1.SubnetType.PUBLIC]: (vpc, subnet) => vpc.publicSubnets.push(subnet),
|
|
@@ -362,4 +377,4 @@ function validateOverlappingCidrRangesipv6(vpc, ipv6CidrBlock) {
|
|
|
362
377
|
}
|
|
363
378
|
return result;
|
|
364
379
|
}
|
|
365
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VibmV0LXYyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsic3VibmV0LXYyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLDZDQUFvRDtBQUNwRCxpREFBd0s7QUFDeEssMkNBQXFFO0FBRXJFLGlDQUFrRDtBQUNsRCxtQ0FBcUM7QUFTckM7O0dBRUc7QUFDSCxNQUFhLE1BQU07SUFPakIsWUFBWSxLQUFhO1FBQ3ZCLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO0tBQ25COztBQVRILHdCQVVDOzs7QUFrRkQ7Ozs7Ozs7Ozs7R0FVRztBQUNILE1BQWEsUUFBUyxTQUFRLHNCQUFRO0lBRXBDOztPQUVHO0lBQ0ksTUFBTSxDQUFDLHNCQUFzQixDQUFDLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQXlCOzs7Ozs7Ozs7O1FBQzFGOzs7VUFHRTtRQUNGLE1BQU0sZ0JBQWlCLFNBQVEsc0JBQVE7WUFBdkM7O2dCQUVFOztrQkFFRTtnQkFDYyxrQkFBYSxHQUFZLEtBQUssQ0FBQyxhQUFhLENBQUM7Z0JBRTdEOztrQkFFRTtnQkFDYyxlQUFVLEdBQWdCLEtBQUssQ0FBQyxVQUFVLENBQUM7Z0JBRTNEOztrQkFFRTtnQkFDYyxxQkFBZ0IsR0FBVyxLQUFLLENBQUMsZ0JBQWdCLENBQUM7Z0JBRWxFOzs7a0JBR0U7Z0JBQ2MsYUFBUSxHQUFXLEtBQUssQ0FBQyxRQUFRLENBQUM7Z0JBRWxEOztrQkFFRTtnQkFDYyxvQ0FBK0IsR0FBZ0IsSUFBSSw0QkFBZSxFQUFFLENBQUM7Z0JBRXJGOztrQkFFRTtnQkFDYyxrQkFBYSxHQUFXLEtBQUssQ0FBQyxhQUFhLENBQUM7Z0JBRTVEOztrQkFFRTtnQkFDYyxlQUFVLEdBQWdCLEVBQUUsWUFBWSxFQUFFLEtBQUssQ0FBQyxZQUFhLEVBQUUsQ0FBQztZQWNsRixDQUFDO1lBWkM7OztjQUdFO1lBQ0ssbUJBQW1CLENBQUMsS0FBYSxFQUFFLFVBQXVCO2dCQUMvRCxNQUFNLFFBQVEsR0FBRyxV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QUFFLENBQUM7WUFDckQsTUFBTSxHQUFHLElBQUksQ0FBQztRQUNoQixDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSZXNvdXJjZSwgTmFtZXMsIExhenkgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBDZm5TdWJuZXQsIENmblN1Ym5ldFJvdXRlVGFibGVBc3NvY2lhdGlvbiwgSU5ldHdvcmtBY2wsIElSb3V0ZVRhYmxlLCBJU3VibmV0LCBOZXR3b3JrQWNsLCBTdWJuZXROZXR3b3JrQWNsQXNzb2NpYXRpb24sIFN1Ym5ldFR5cGUgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZWMyJztcbmltcG9ydCB7IENvbnN0cnVjdCwgRGVwZW5kZW5jeUdyb3VwLCBJRGVwZW5kYWJsZSB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgSVZwY1YyIH0gZnJvbSAnLi92cGMtdjItYmFzZSc7XG5pbXBvcnQgeyBDaWRyQmxvY2ssIENpZHJCbG9ja0lwdjYgfSBmcm9tICcuL3V0aWwnO1xuaW1wb3J0IHsgUm91dGVUYWJsZSB9IGZyb20gJy4vcm91dGUnO1xuXG4vKipcbiAqIEludGVyZmFjZSB0byBkZWZpbmUgc3VibmV0IENJRFJcbiAqL1xuaW50ZXJmYWNlIElDaWRyIHtcbiAgcmVhZG9ubHkgY2lkcjogc3RyaW5nO1xufVxuXG4vKipcbiAqIElQdjQgb3IgSVB2NiBDSURSIHJhbmdlIGZvciB0aGUgc3VibmV0XG4gKi9cbmV4cG9ydCBjbGFzcyBJcENpZHIgaW1wbGVtZW50cyBJQ2lkciB7XG5cbiAgLyoqXG4gKiBJUHY2IENJRFIgcmFuZ2UgZm9yIHRoZSBzdWJuZXRcbiAqIEFsbG93ZWQgb25seSBpZiBJUHY2IGlzIGVuYWJsZWQgb24gVlBjXG4gKi9cbiAgcHVibGljIHJlYWRvbmx5IGNpZHI6IHN0cmluZztcbiAgY29uc3RydWN0b3IocHJvcHM6IHN0cmluZyApIHtcbiAgICB0aGlzLmNpZHIgPSBwcm9wcztcbiAgfVxufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgdG8gZGVmaW5lIHN1Ym5ldCBmb3IgVlBDLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN1Ym5ldFYyUHJvcHMge1xuLyoqXG4gKiBWUEMgUHJvcFxuICovXG4gIHJlYWRvbmx5IHZwYzogSVZwY1YyO1xuXG4gIC8qKlxuICAgKiBpcHY0IGNpZHIgdG8gYXNzaWduIHRvIHRoaXMgc3VibmV0LlxuICAgKiBTZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXJlc291cmNlLWVjMi1zdWJuZXQuaHRtbCNjZm4tZWMyLXN1Ym5ldC1jaWRyYmxvY2tcbiAgICovXG4gIHJlYWRvbmx5IGlwdjRDaWRyQmxvY2s6IElwQ2lkcjtcblxuICAvKipcbiAgICogSXB2NiBDSURSIFJhbmdlIGZvciBzdWJuZXRcbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBJcHY2IGFkZHJlc3NcbiAgICovXG4gIHJlYWRvbmx5IGlwdjZDaWRyQmxvY2s/OiBJcENpZHI7XG5cbiAgLyoqXG4gICAqIEN1c3RvbSBBWiBmb3IgdGhlIHN1Ym5ldFxuICAgKi9cbiAgcmVhZG9ubHkgYXZhaWxhYmlsaXR5Wm9uZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDdXN0b20gUm91dGUgZm9yIHN1Ym5ldFxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGEgZGVmYXVsdCByb3V0ZSB0YWJsZSBjcmVhdGVkXG4gICAqL1xuICByZWFkb25seSByb3V0ZVRhYmxlPzogSVJvdXRlVGFibGU7XG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIFN1Ym5ldCB0byBjb25maWd1cmUuXG4gICAqXG4gICAqIFRoZSBTdWJuZXQgdHlwZSB3aWxsIGNvbnRyb2wgdGhlIGFiaWxpdHkgdG8gcm91dGUgYW5kIGNvbm5lY3QgdG8gdGhlXG4gICAqIEludGVybmV0LlxuICAgKlxuICAgKiBUT0RPOiBBZGQgdmFsaWRhdGlvbiBjaGVjayBgc3VibmV0VHlwZWAgd2hlbiBhZGRpbmcgcmVzb3VyY2VzIChlLmcuIGNhbm5vdCBhZGQgTmF0R2F0ZXdheSB0byBwcml2YXRlKVxuICAgKi9cbiAgcmVhZG9ubHkgc3VibmV0VHlwZTogU3VibmV0VHlwZTtcblxuICAvKipcbiAgICogU3VibmV0IG5hbWVcbiAgICpcbiAgICogQGRlZmF1bHQgLSBwcm92aXNpb25lZCB3aXRoIGFuIGF1dG9nZW5lcmF0ZWQgbmFtZSBieSBDREtcbiAgICovXG4gIHJlYWRvbmx5IHN1Ym5ldE5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIGEgbmV0d29yayBpbnRlcmZhY2UgY3JlYXRlZCBpbiB0aGlzIHN1Ym5ldCByZWNlaXZlcyBhbiBJUHY2IGFkZHJlc3MuXG4gICAqIElmIHlvdSBzcGVjaWZ5IEFzc2lnbklwdjZBZGRyZXNzT25DcmVhdGlvbiwgeW91IG11c3QgYWxzbyBzcGVjaWZ5IElwdjZDaWRyQmxvY2suXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdW5kZWZpbmVkIGluIGNhc2Ugbm90IHByb3ZpZGVkIGFzIGFuIGlucHV0XG4gICAqL1xuICByZWFkb25seSBhc3NpZ25JcHY2QWRkcmVzc09uQ3JlYXRpb24/OiBib29sZWFuO1xuXG59XG5cbi8qKlxuICogSW50ZXJmYWNlIHdpdGggYWRkaXRpb25hbCBwcm9wZXJ0aWVzIGZvciBTdWJuZXRWMlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElTdWJuZXRWMiBleHRlbmRzIElTdWJuZXQge1xuXG4gIC8qKlxuICAgKiBUaGUgSVB2NiBDSURSIGJsb2NrIGZvciB0aGlzIHN1Ym5ldFxuICAgKi9cbiAgcmVhZG9ubHkgaXB2NkNpZHJCbG9jaz86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHR5cGUgb2Ygc3VibmV0IChwdWJsaWMgb3IgcHJpdmF0ZSkgdGhhdCB0aGlzIHN1Ym5ldCByZXByZXNlbnRzLlxuICAgKlxuICAgKiBAYXR0cmlidXRlIFN1Ym5ldFR5cGVcbiAgICovXG4gIHJlYWRvbmx5IHN1Ym5ldFR5cGU/OiBTdWJuZXRUeXBlO1xuXG59XG5cbi8qKlxuICogVGhlIFN1Ym5ldFYyIGNsYXNzIHJlcHJlc2VudHMgYSBzdWJuZXQgd2l0aGluIGEgVlBDIChWaXJ0dWFsIFByaXZhdGUgQ2xvdWQpIGluIEFXUy5cbiAqIEl0IGV4dGVuZHMgdGhlIFJlc291cmNlIGNsYXNzIGFuZCBpbXBsZW1lbnRzIHRoZSBJU3VibmV0IGludGVyZmFjZS5cbiAqXG4gKiBJbnN0YW5jZXMgb2YgdGhpcyBjbGFzcyBjYW4gYmUgdXNlZCB0byBjcmVhdGUgYW5kIG1hbmFnZSBzdWJuZXRzIHdpdGhpbiBhIFZwY1YyIGluc3RhbmNlLlxuICogU3VibmV0cyBjYW4gYmUgY29uZmlndXJlZCB3aXRoIHNwZWNpZmljIElQIGFkZHJlc3MgcmFuZ2VzIChJUHY0IGFuZCBJUHY2KSwgYXZhaWxhYmlsaXR5IHpvbmVzLFxuICogYW5kIHN1Ym5ldCB0eXBlcyAoZS5nLiwgcHVibGljLCBwcml2YXRlLCBpc29sYXRlZCkuXG4gKlxuICogQHJlc291cmNlIEFXUzo6RUMyOjpTdWJuZXRcbiAqXG4gKi9cbmV4cG9ydCBjbGFzcyBTdWJuZXRWMiBleHRlbmRzIFJlc291cmNlIGltcGxlbWVudHMgSVN1Ym5ldFYyIHtcblxuICAvKipcbiAgICogSW1wb3J0IGFuIGV4aXN0aW5nIHN1Ym5ldCB0byB0aGUgVlBDXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21TdWJuZXRWMkF0dHJpYnV0ZXMoc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgYXR0cnM6IFN1Ym5ldFYyQXR0cmlidXRlcykgOiBJU3VibmV0VjIge1xuICAgIC8qKlxuICAgICogQ2xhc3MgdG8gZGVmaW5lIGFuIGltcG9ydCBmb3IgYW4gZXhpc3Rpbmcgc3VibmV0XG4gICAgKiBAcmVzb3VyY2UgQVdTOjpFQzI6OlN1Ym5ldFxuICAgICovXG4gICAgY2xhc3MgSW1wb3J0ZWRTdWJuZXRWMiBleHRlbmRzIFJlc291cmNlIGltcGxlbWVudHMgSVN1Ym5ldFYyIHtcblxuICAgICAgLyoqXG4gICAgICAqIFRoZSBJUHY2IENJRFIgQmxvY2sgYXNzaWduZWQgdG8gdGhpcyBzdWJuZXRcbiAgICAgICovXG4gICAgICBwdWJsaWMgcmVhZG9ubHkgaXB2NkNpZHJCbG9jaz86IHN0cmluZyA9IGF0dHJzLmlwdjZDaWRyQmxvY2s7XG5cbiAgICAgIC8qKlxuICAgICAgKiBUaGUgdHlwZSBvZiBzdWJuZXQgKGVnLiBwdWJsaWMgb3IgcHJpdmF0ZSkgdGhhdCB0aGlzIHN1Ym5ldCByZXByZXNlbnRzLlxuICAgICAgKi9cbiAgICAgIHB1YmxpYyByZWFkb25seSBzdWJuZXRUeXBlPzogU3VibmV0VHlwZSA9IGF0dHJzLnN1Ym5ldFR5cGU7XG5cbiAgICAgIC8qKlxuICAgICAgKiBUaGUgQXZhaWxhYmlsaXR5IFpvbmUgaW4gd2hpY2ggc3VibmV0IGlzIGxvY2F0ZWRcbiAgICAgICovXG4gICAgICBwdWJsaWMgcmVhZG9ubHkgYXZhaWxhYmlsaXR5Wm9uZTogc3RyaW5nID0gYXR0cnMuYXZhaWxhYmlsaXR5Wm9uZTtcblxuICAgICAgLyoqXG4gICAgICAqIFRoZSBzdWJuZXRJZCBmb3IgdGhpcyBwYXJ0aWN1bGFyIHN1Ym5ldFxuICAgICAgKiBSZWZlcnMgdG8gdGhlIHBoeXNpY2FsIElEIGNyZWF0ZWRcbiAgICAgICovXG4gICAgICBwdWJsaWMgcmVhZG9ubHkgc3VibmV0SWQ6IHN0cmluZyA9IGF0dHJzLnN1Ym5ldElkO1xuXG4gICAgICAvKipcbiAgICAgICogRGVwZW5kYWJsZSB0aGF0IGNhbiBiZSBkZXBlbmRlZCB1cG9uIHRvIGZvcmNlIGludGVybmV0IGNvbm5lY3Rpdml0eSBlc3RhYmxpc2hlZCBvbiB0aGUgVlBDXG4gICAgICAqL1xuICAgICAgcHVibGljIHJlYWRvbmx5IGludGVybmV0Q29ubmVjdGl2aXR5RXN0YWJsaXNoZWQ6IElEZXBlbmRhYmxlID0gbmV3IERlcGVuZGVuY3lHcm91cCgpO1xuXG4gICAgICAvKipcbiAgICAgICogVGhlIElQdjQgQ0lEUiBibG9jayBhc3NpZ25lZCB0byB0aGlzIHN1Ym5ldFxuICAgICAgKi9cbiAgICAgIHB1YmxpYyByZWFkb25seSBpcHY0Q2lkckJsb2NrOiBzdHJpbmcgPSBhdHRycy5pcHY0Q2lkckJsb2NrO1xuXG4gICAgICAvKipcbiAgICAgICogIEN1cnJlbnQgcm91dGUgdGFibGUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgc3VibmV0XG4gICAgICAqL1xuICAgICAgcHVibGljIHJlYWRvbmx5IHJvdXRlVGFibGU6IElSb3V0ZVRhYmxlID0geyByb3V0ZVRhYmxlSWQ6IGF0dHJzLnJvdXRlVGFibGVJZCEgfTtcblxuICAgICAgLyoqXG4gICAgICAqIEFzc29jaWF0ZSBhIE5ldHdvcmsgQUNMIHdpdGggdGhpcyBzdWJuZXRcbiAgICAgICogUmVxdWlyZWQgaGVyZSBzaW5jZSBpdCBpcyBpbXBsZW1lbnRlZCBpbiB0aGUgSVN1Ym5ldFYyXG4gICAgICAqL1xuICAgICAgcHVibGljIGFzc29jaWF0ZU5ldHdvcmtBY2woYWNsSWQ6IHN0cmluZywgbmV0d29ya0FjbDogSU5ldHdvcmtBY2wpIHtcbiAgICAgICAgY29uc3QgYWNsU2NvcGUgPSBuZXR3b3JrQWNsIGluc3RhbmNlb2YgQ29uc3RydWN0ID8gbmV0d29ya0FjbCA6IHRoaXM7XG4gICAgICAgIGNvbnN0IG90aGVyID0gbmV0d29ya0FjbCBpbnN0YW5jZW9mIENvbnN0cnVjdCA/IHRoaXMgOiBuZXR3b3JrQWNsO1xuICAgICAgICBuZXcgU3VibmV0TmV0d29ya0FjbEFzc29jaWF0aW9uKGFjbFNjb3BlLCBhY2xJZCArIE5hbWVzLm5vZGVVbmlxdWVJZChvdGhlci5ub2RlKSwge1xuICAgICAgICAgIG5ldHdvcmtBY2wsXG4gICAgICAgICAgc3VibmV0OiB0aGlzLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5ldyBJbXBvcnRlZFN1Ym5ldFYyKHNjb3BlLCBpZCk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIEF2YWlsYWJpbGl0eSBab25lIHRoZSBzdWJuZXQgaXMgbG9jYXRlZCBpblxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGF2YWlsYWJpbGl0eVpvbmU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHN1Ym5ldElkIGZvciB0aGlzIHBhcnRpY3VsYXIgc3VibmV0XG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBzdWJuZXRJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiAgRGVwZW5kZW5jaWVzIGZvciBpbnRlcm5ldCBjb25uZWN0aXZpdHlcbiAgICogVGhpcyBQcm9wZXJ0eSBleHBvc2VzIHRoZSBSb3V0ZVRhYmxlLVN1Ym5ldCBhc3NvY2lhdGlvbiBzbyB0aGF0IG90aGVyIHJlc291cmNlcyBjYW4gZGVwZW5kIG9uIGl0LlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGludGVybmV0Q29ubmVjdGl2aXR5RXN0YWJsaXNoZWQ6IElEZXBlbmRhYmxlO1xuXG4gIC8qKlxuICAgKiBUaGUgdmFyaWFibGUgbmFtZSBgaW50ZXJuZXRDb25uZWN0aXZpdHlFc3RhYmxpc2hlZGAgZG9lcyBub3QgcmVmbGVjdCB3aGF0IGl0IGFjdHVhbGx5IGlzLlxuICAgKiBUaGUgbmFtaW5nIGlzIGVuZm9yY2VkIGJ5IElTdWJuZXQuIFdlIG5lZWQgdG8ga2VlcCBpdCB0byBtYWludGFpbiBjb21wYXRpYmlsaXR5LlxuICAgKiBJdCBleHBvc2VzIHRoZSBSb3V0ZVRhYmxlLVN1Ym5ldCBhc3NvY2lhdGlvbiBzbyB0aGF0IG90aGVyIHJlc291cmNlcyBjYW4gZGVwZW5kIG9uIGl0LlxuICAgKiBFLmcuIFJlc291cmNlcyBpbiBhIHN1Ym5ldCwgd2hlbiBiZWluZyBkZWxldGVkLCBtYXkgbmVlZCB0aGUgUm91dGVUYWJsZSB0byBleGlzdCBpbiBvcmRlciB0byBkZWxldGUgcHJvcGVybHlcbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgX2ludGVybmV0Q29ubmVjdGl2aXR5RXN0YWJsaXNoZWQgPSBuZXcgRGVwZW5kZW5jeUdyb3VwKCk7XG5cbiAgLyoqXG4gICAqIFRoZSBJUHY0IENJRFIgYmxvY2sgZm9yIHRoaXMgc3VibmV0XG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgaXB2NENpZHJCbG9jazogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgSVB2NiBDSURSIEJsb2NrIGZvciB0aGlzIHN1Ym5ldFxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGlwdjZDaWRyQmxvY2s/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHN1Ym5ldCAocHVibGljIG9yIHByaXZhdGUpIHRoYXQgdGhpcyBzdWJuZXQgcmVwcmVzZW50cy5cbiAgICogQGF0dHJpYnV0ZSBTdWJuZXRUeXBlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgc3VibmV0VHlwZT86IFN1Ym5ldFR5cGU7XG5cbiAgcHJpdmF0ZSBfbmV0d29ya0FjbDogSU5ldHdvcmtBY2w7XG5cbiAgcHJpdmF0ZSBfcm91dGVUYWJsZTogSVJvdXRlVGFibGU7XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdHMgYSBuZXcgU3VibmV0VjIgaW5zdGFuY2UuXG4gICAqIEBwYXJhbSBzY29wZSBUaGUgcGFyZW50IENvbnN0cnVjdCB0aGF0IHRoaXMgcmVzb3VyY2Ugd2lsbCBiZSBwYXJ0IG9mLlxuICAgKiBAcGFyYW0gaWQgVGhlIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGlzIHJlc291cmNlLlxuICAgKiBAcGFyYW0gcHJvcHMgVGhlIGNvbmZpZ3VyYXRpb24gcHJvcGVydGllcyBmb3IgdGhlIHN1Ym5ldC5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBTdWJuZXRWMlByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCB7XG4gICAgICBwaHlzaWNhbE5hbWU6IHByb3BzLnN1Ym5ldE5hbWUgPz8gTGF6eS5zdHJpbmcoe1xuICAgICAgICBwcm9kdWNlOiAoKSA9PiBOYW1lcy51bmlxdWVSZXNvdXJjZU5hbWUodGhpcywgeyBtYXhMZW5ndGg6IDEyOCwgYWxsb3dlZFNwZWNpYWxDaGFyYWN0ZXJzOiAnXycgfSksXG4gICAgICB9KSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGlwdjRDaWRyQmxvY2sgPSBwcm9wcy5pcHY0Q2lkckJsb2NrLmNpZHI7XG4gICAgY29uc3QgaXB2NkNpZHJCbG9jayA9IHByb3BzLmlwdjZDaWRyQmxvY2s/LmNpZHI7XG5cbiAgICBpZiAoIWNoZWNrQ2lkclJhbmdlcyhwcm9wcy52cGMsIHByb3BzLmlwdjRDaWRyQmxvY2suY2lkcikpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ0lEUiBibG9jayBzaG91bGQgYmUgd2l0aGluIHRoZSByYW5nZSBvZiBWUEMnKTtcbiAgICB9O1xuXG4gICAgbGV0IG92ZXJsYXA6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBsZXQgb3ZlcmxhcElwdjY6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIG92ZXJsYXAgPSB2YWxpZGF0ZU92ZXJsYXBwaW5nQ2lkclJhbmdlcyhwcm9wcy52cGMsIHByb3BzLmlwdjRDaWRyQmxvY2suY2lkcik7XG5cbiAgICAvL2NoZWNrIHdoZXRoZXIgVlBDIHN1cHBvcnRzIGlwdjZcbiAgICBpZiAocHJvcHMuaXB2NkNpZHJCbG9jaz8uY2lkcikge1xuICAgICAgdmFsaWRhdGVTdXBwb3J0SXB2Nihwcm9wcy52cGMpO1xuICAgICAgb3ZlcmxhcElwdjYgPSB2YWxpZGF0ZU92ZXJsYXBwaW5nQ2lkclJhbmdlc2lwdjYocHJvcHMudnBjLCBwcm9wcy5pcHY2Q2lkckJsb2NrPy5jaWRyKTtcbiAgICB9XG5cbiAgICBpZiAob3ZlcmxhcCB8fCBvdmVybGFwSXB2Nikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDSURSIGJsb2NrIHNob3VsZCBub3Qgb3ZlcmxhcCB3aXRoIGV4aXN0aW5nIHN1Ym5ldCBibG9ja3MnKTtcbiAgICB9XG5cbiAgICBpZiAocHJvcHMuYXNzaWduSXB2NkFkZHJlc3NPbkNyZWF0aW9uICYmICFwcm9wcy5pcHY2Q2lkckJsb2NrKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0lQdjYgQ0lEUiBibG9jayBpcyByZXF1aXJlZCB3aGVuIGFzc2lnbmluZyBJUHY2IGFkZHJlc3Mgb24gY3JlYXRpb24nKTtcbiAgICB9XG5cbiAgICBjb25zdCBzdWJuZXQgPSBuZXcgQ2ZuU3VibmV0KHRoaXMsICdTdWJuZXQnLCB7XG4gICAgICB2cGNJZDogcHJvcHMudnBjLnZwY0lkLFxuICAgICAgY2lkckJsb2NrOiBpcHY0Q2lkckJsb2NrLFxuICAgICAgaXB2NkNpZHJCbG9jazogaXB2NkNpZHJCbG9jayxcbiAgICAgIGF2YWlsYWJpbGl0eVpvbmU6IHByb3BzLmF2YWlsYWJpbGl0eVpvbmUsXG4gICAgICBhc3NpZ25JcHY2QWRkcmVzc09uQ3JlYXRpb246IHByb3BzLmFzc2lnbklwdjZBZGRyZXNzT25DcmVhdGlvbiA/PyBmYWxzZSxcbiAgICB9KTtcblxuICAgIHRoaXMubm9kZS5kZWZhdWx0Q2hpbGQgPSBzdWJuZXQ7XG4gICAgdGhpcy5pcHY0Q2lkckJsb2NrID0gcHJvcHMuaXB2NENpZHJCbG9jay5jaWRyO1xuICAgIHRoaXMuaXB2NkNpZHJCbG9jayA9IHByb3BzLmlwdjZDaWRyQmxvY2s/LmNpZHI7XG4gICAgdGhpcy5zdWJuZXRJZCA9IHN1Ym5ldC5yZWY7XG4gICAgdGhpcy5hdmFpbGFiaWxpdHlab25lID0gcHJvcHMuYXZhaWxhYmlsaXR5Wm9uZTtcblxuICAgIHRoaXMuX25ldHdvcmtBY2wgPSBOZXR3b3JrQWNsLmZyb21OZXR3b3JrQWNsSWQodGhpcywgJ0FjbCcsIHN1Ym5ldC5hdHRyTmV0d29ya0FjbEFzc29jaWF0aW9uSWQpO1xuXG4gICAgaWYgKHByb3BzLnJvdXRlVGFibGUpIHtcbiAgICAgIHRoaXMuX3JvdXRlVGFibGUgPSBwcm9wcy5yb3V0ZVRhYmxlO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBBc3NpZ25pbmcgYSBkZWZhdWx0IHJvdXRlIHRhYmxlXG4gICAgICB0aGlzLl9yb3V0ZVRhYmxlID0gbmV3IFJvdXRlVGFibGUodGhpcywgJ1JvdXRlVGFibGUnLCB7XG4gICAgICAgIHZwYzogcHJvcHMudnBjLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3Qgcm91dGVBc3NvYyA9IG5ldyBDZm5TdWJuZXRSb3V0ZVRhYmxlQXNzb2NpYXRpb24odGhpcywgJ1JvdXRlVGFibGVBc3NvY2lhdGlvbicsIHtcbiAgICAgIHN1Ym5ldElkOiB0aGlzLnN1Ym5ldElkLFxuICAgICAgcm91dGVUYWJsZUlkOiB0aGlzLnJvdXRlVGFibGUucm91dGVUYWJsZUlkLFxuICAgIH0pO1xuXG4gICAgdGhpcy5faW50ZXJuZXRDb25uZWN0aXZpdHlFc3RhYmxpc2hlZC5hZGQocm91dGVBc3NvYyk7XG5cbiAgICB0aGlzLmludGVybmV0Q29ubmVjdGl2aXR5RXN0YWJsaXNoZWQgPSB0aGlzLl9pbnRlcm5ldENvbm5lY3Rpdml0eUVzdGFibGlzaGVkO1xuXG4gICAgdGhpcy5zdWJuZXRUeXBlID0gcHJvcHMuc3VibmV0VHlwZTtcbiAgICBzdG9yZVN1Ym5ldFRvVnBjQnlUeXBlKHByb3BzLnZwYywgdGhpcywgcHJvcHMuc3VibmV0VHlwZSk7XG4gIH1cblxuICAvKipcbiAgICogQXNzb2NpYXRlIGEgTmV0d29yayBBQ0wgd2l0aCB0aGlzIHN1Ym5ldFxuICAgKlxuICAgKiBAcGFyYW0gaWQgVGhlIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGlzIGFzc29jaWF0aW9uLlxuICAgKiBAcGFyYW0gbmV0d29ya0FjbCBUaGUgTmV0d29yayBBQ0wgdG8gYXNzb2NpYXRlIHdpdGggdGhpcyBzdWJuZXQuXG4gICAqIFRoaXMgYWxsb3dzIGNvbnRyb2xsaW5nIGluYm91bmQgYW5kIG91dGJvdW5kIHRyYWZmaWMgZm9yIGluc3RhbmNlcyBpbiB0aGlzIHN1Ym5ldC5cbiAgICovXG4gIHB1YmxpYyBhc3NvY2lhdGVOZXR3b3JrQWNsKGlkOiBzdHJpbmcsIG5ldHdvcmtBY2w6IElOZXR3b3JrQWNsKSB7XG4gICAgdGhpcy5fbmV0d29ya0FjbCA9IG5ldHdvcmtBY2w7XG5cbiAgICBjb25zdCBzY29wZSA9IG5ldHdvcmtBY2wgaW5zdGFuY2VvZiBDb25zdHJ1Y3QgPyBuZXR3b3JrQWNsIDogdGhpcztcbiAgICBjb25zdCBvdGhlciA9IG5ldHdvcmtBY2wgaW5zdGFuY2VvZiBDb25zdHJ1Y3QgPyB0aGlzIDogbmV0d29ya0FjbDtcbiAgICBuZXcgU3VibmV0TmV0d29ya0FjbEFzc29jaWF0aW9uKHNjb3BlLCBpZCArIE5hbWVzLm5vZGVVbmlxdWVJZChvdGhlci5ub2RlKSwge1xuICAgICAgbmV0d29ya0FjbCxcbiAgICAgIHN1Ym5ldDogdGhpcyxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIFJvdXRlIFRhYmxlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHN1Ym5ldFxuICAgKi9cbiAgcHVibGljIGdldCByb3V0ZVRhYmxlKCk6IElSb3V0ZVRhYmxlIHtcbiAgICByZXR1cm4gdGhpcy5fcm91dGVUYWJsZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBOZXR3b3JrIEFDTCBhc3NvY2lhdGVkIHdpdGggdGhpcyBzdWJuZXQuXG4gICAqL1xuXG4gIHB1YmxpYyBnZXQgbmV0d29ya0FjbCgpOiBJTmV0d29ya0FjbCB7XG4gICAgcmV0dXJuIHRoaXMuX25ldHdvcmtBY2w7XG4gIH1cbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIHJlcXVpcmVkIHRvIGltcG9ydCBhIHN1Ym5ldFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN1Ym5ldFYyQXR0cmlidXRlcyB7XG4gIC8qKlxuICAgKiBUaGUgQXZhaWxhYmlsaXR5IFpvbmUgdGhpcyBzdWJuZXQgaXMgbG9jYXRlZCBpblxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIEFaIGluZm9ybWF0aW9uLCBjYW5ub3QgdXNlIEFaIHNlbGVjdGlvbiBmZWF0dXJlc1xuICAgKi9cbiAgcmVhZG9ubHkgYXZhaWxhYmlsaXR5Wm9uZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgSVB2NCBDSURSIGJsb2NrIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3VibmV0XG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm8gQ0lEUiBpbmZvcm1hdGlvbiwgY2Fubm90IHVzZSBDSURSIGZpbHRlciBmZWF0dXJlc1xuICAgKi9cbiAgcmVhZG9ubHkgaXB2NENpZHJCbG9jazogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgSVB2NCBDSURSIGJsb2NrIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3VibmV0XG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm8gQ0lEUiBpbmZvcm1hdGlvbiwgY2Fubm90IHVzZSBDSURSIGZpbHRlciBmZWF0dXJlc1xuICAgKi9cbiAgcmVhZG9ubHkgaXB2NkNpZHJCbG9jaz86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIElEIG9mIHRoZSByb3V0ZSB0YWJsZSBmb3IgdGhpcyBwYXJ0aWN1bGFyIHN1Ym5ldFxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIHJvdXRlIHRhYmxlIGluZm9ybWF0aW9uLCBjYW5ub3QgY3JlYXRlIFZQQyBlbmRwb2ludHNcbiAgICovXG4gIHJlYWRvbmx5IHJvdXRlVGFibGVJZD86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHN1Ym5ldElkIGZvciB0aGlzIHBhcnRpY3VsYXIgc3VibmV0XG4gICAqL1xuICByZWFkb25seSBzdWJuZXRJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiBzdWJuZXQgKHB1YmxpYyBvciBwcml2YXRlKSB0aGF0IHRoaXMgc3VibmV0IHJlcHJlc2VudHMuXG4gICAqL1xuICByZWFkb25seSBzdWJuZXRUeXBlOiBTdWJuZXRUeXBlO1xuXG4gIC8qKlxuICAgKiBOYW1lIG9mIHRoZSBnaXZlbiBzdWJuZXRcbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBzdWJuZXQgbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgc3VibmV0TmFtZT86IHN0cmluZztcblxufVxuXG5jb25zdCBzdWJuZXRUeXBlTWFwID0ge1xuICBbU3VibmV0VHlwZS5QUklWQVRFX0lTT0xBVEVEXTogKHZwYzogSVZwY1YyLCBzdWJuZXQ6IFN1Ym5ldFYyKSA9PiB2cGMuaXNvbGF0ZWRTdWJuZXRzLnB1c2goc3VibmV0KSxcbiAgW1N1Ym5ldFR5cGUuUFVCTElDXTogKHZwYzogSVZwY1YyLCBzdWJuZXQ6IFN1Ym5ldFYyKSA9PiB2cGMucHVibGljU3VibmV0cy5wdXNoKHN1Ym5ldCksXG4gIFtTdWJuZXRUeXBlLlBSSVZBVEVfV0lUSF9FR1JFU1NdOiAodnBjOiBJVnBjVjIsIHN1Ym5ldDogU3VibmV0VjIpID0+IHZwYy5wcml2YXRlU3VibmV0cy5wdXNoKHN1Ym5ldCksXG4gIFtTdWJuZXRUeXBlLklTT0xBVEVEXTogKHZwYzogSVZwY1YyLCBzdWJuZXQ6IFN1Ym5ldFYyKSA9PiB2cGMuaXNvbGF0ZWRTdWJuZXRzLnB1c2goc3VibmV0KSxcbiAgW1N1Ym5ldFR5cGUuUFJJVkFURV06ICh2cGM6IElWcGNWMiwgc3VibmV0OiBTdWJuZXRWMikgPT4gdnBjLnByaXZhdGVTdWJuZXRzLnB1c2goc3VibmV0KSxcbiAgW1N1Ym5ldFR5cGUuUFJJVkFURV9XSVRIX05BVF06ICh2cGM6IElWcGNWMiwgc3VibmV0OiBTdWJuZXRWMikgPT4gdnBjLnByaXZhdGVTdWJuZXRzLnB1c2goc3VibmV0KSxcbn07XG5cbi8qKlxuICogU3RvcmVzIHRoZSBwcm92aWRlZCBzdWJuZXQgaW4gdGhlIFZQQydzIGNvbGxlY3Rpb24gb2Ygc3VibmV0cyBiYXNlZCBvbiB0aGUgc3BlY2lmaWVkIHN1Ym5ldCB0eXBlLlxuICpcbiAqIEBwYXJhbSB2cGMgVGhlIFZQQyBpbnN0YW5jZSB0byB3aGljaCB0aGUgc3VibmV0IGJlbG9uZ3MuXG4gKiBAcGFyYW0gc3VibmV0IFRoZSBzdWJuZXQgaW5zdGFuY2UgdG8gYmUgc3RvcmVkLlxuICogQHBhcmFtIHR5cGUgVGhlIHR5cGUgb2YgdGhlIHN1Ym5ldCAoZS5nLiwgcHVibGljLCBwcml2YXRlLCBpc29sYXRlZCkuXG4gKiBAaW50ZXJuYWxcbiAqL1xuZnVuY3Rpb24gc3RvcmVTdWJuZXRUb1ZwY0J5VHlwZSh2cGM6IElWcGNWMiwgc3VibmV0OiBTdWJuZXRWMiwgdHlwZTogU3VibmV0VHlwZSkge1xuICBjb25zdCBmaW5kRnVuY3Rpb25UeXBlID0gc3VibmV0VHlwZU1hcFt0eXBlXTtcbiAgaWYgKGZpbmRGdW5jdGlvblR5cGUpIHtcbiAgICBmaW5kRnVuY3Rpb25UeXBlKHZwYywgc3VibmV0KTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIHN1Ym5ldCB0eXBlOiAke3R5cGV9YCk7XG4gIH1cblxuICAvKipcbiAgICogTmVlZCB0byBzZXQgZXhwbGljaXQgZGVwZW5kZW5jeSBhcyBkdXJpbmcgc3RhY2sgZGVsZXRpb24sXG4gICAqIHRoZSBjaWRyIGJsb2NrcyBtYXkgZ2V0IGRlbGV0ZWQgZmlyc3QgYW5kIHdpbGwgZmFpbCBhcyB0aGUgc3VibmV0cyBhcmUgc3RpbGwgdXNpbmcgdGhlIGNpZHIgYmxvY2tzXG4gICAqL1xuICBpZiAodnBjLnNlY29uZGFyeUNpZHJCbG9jaykge1xuICAgIGZvciAoY29uc3QgY2lkciBvZiB2cGMuc2Vjb25kYXJ5Q2lkckJsb2NrKSB7XG4gICAgICBzdWJuZXQubm9kZS5hZGREZXBlbmRlbmN5KGNpZHIpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFZhbGlkYXRlcyB3aGV0aGVyIHRoZSBwcm92aWRlZCBWUEMgc3VwcG9ydHMgSVB2NiBhZGRyZXNzZXMuXG4gKlxuICogQHBhcmFtIHZwYyBUaGUgVlBDIGluc3RhbmNlIHRvIGJlIHZhbGlkYXRlZC5cbiAqIEB0aHJvd3MgRXJyb3IgaWYgdGhlIFZQQyBkb2VzIG5vdCBzdXBwb3J0IElQdjYgYWRkcmVzc2VzLlxuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgVlBDIHN1cHBvcnRzIElQdjYgYWRkcmVzc2VzLCBmYWxzZSBvdGhlcndpc2UuXG4gKiBAaW50ZXJuYWxcbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVTdXBwb3J0SXB2Nih2cGM6IElWcGNWMikge1xuICBpZiAodnBjLnNlY29uZGFyeUNpZHJCbG9jaykge1xuICAgIGlmICh2cGMuc2Vjb25kYXJ5Q2lkckJsb2NrLnNvbWUoKHNlY29uZGFyeUFkZHJlc3MpID0+IHNlY29uZGFyeUFkZHJlc3MuYW1hem9uUHJvdmlkZWRJcHY2Q2lkckJsb2NrID09PSB0cnVlIHx8XG4gIHNlY29uZGFyeUFkZHJlc3MuaXB2NklwYW1Qb29sSWQgIT0gdW5kZWZpbmVkKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVG8gdXNlIElQdjYsIHRoZSBWUEMgbXVzdCBlbmFibGUgSVB2NiBzdXBwb3J0LicpO1xuICAgIH1cbiAgfSBlbHNlIHtyZXR1cm4gZmFsc2U7fVxufVxuXG4vKipcbiAqIENoZWNrcyBpZiB0aGUgcHJvdmlkZWQgQ0lEUiByYW5nZSBmYWxscyB3aXRoaW4gdGhlIElQIGFkZHJlc3MgcmFuZ2VzIG9mIHRoZSBnaXZlbiBWUEMuXG4gKlxuICogQHBhcmFtIHZwYyBUaGUgVlBDIGluc3RhbmNlIHRvIGNoZWNrIGFnYWluc3QuXG4gKiBAcGFyYW0gY2lkclJhbmdlIFRoZSBDSURSIHJhbmdlIHRvIGJlIGNoZWNrZWQuXG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBDSURSIHJhbmdlIGZhbGxzIHdpdGhpbiB0aGUgVlBDJ3MgSVAgYWRkcmVzcyByYW5nZXMsIGZhbHNlIG90aGVyd2lzZS5cbiAqIEBpbnRlcm5hbFxuICovXG5mdW5jdGlvbiBjaGVja0NpZHJSYW5nZXModnBjOiBJVnBjVjIsIGNpZHJSYW5nZTogc3RyaW5nKSB7XG4gIGNvbnN0IHZwY0NpZHJCbG9jayA9IFt2cGMuaXB2NENpZHJCbG9ja107XG4gIGNvbnN0IHN1Ym5ldENpZHJCbG9jayA9IG5ldyBDaWRyQmxvY2soY2lkclJhbmdlKTtcbiAgY29uc3QgYWxsQ2lkcnM6IENpZHJCbG9ja1tdID0gW107XG5cbiAgLy8gU2Vjb25kYXJ5IElQIGFkZHJlc3NlcyBhc3NvaWNhdGVkIHVzaW5nIHVzZXIgZGVmaW5lZCBJUHY0IHJhbmdlXG4gIGlmICh2cGMuc2Vjb25kYXJ5Q2lkckJsb2NrKSB7XG4gICAgZm9yIChjb25zdCBpcEFkZHJlc3Mgb2YgdnBjLnNlY29uZGFyeUNpZHJCbG9jaykge1xuICAgICAgaWYgKGlwQWRkcmVzcy5jaWRyQmxvY2spIHtcbiAgICAgICAgdnBjQ2lkckJsb2NrLnB1c2goaXBBZGRyZXNzLmNpZHJCbG9jayk7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGNpZHJzID0gdnBjQ2lkckJsb2NrLm1hcChjaWRyID0+IG5ldyBDaWRyQmxvY2soY2lkcikpO1xuICAgIGFsbENpZHJzLnB1c2goLi4uY2lkcnMpO1xuICB9XG5cbiAgLy8gU2Vjb25kYXJ5IElQIGFkZHJlc3NlcyBhc3NvaWNhdGVkIHVzaW5nIElQQU0gSVB2NCByYW5nZVxuICBpZiAodnBjLmlwdjRJcGFtUHJvdmlzaW9uZWRDaWRycykge1xuICAgIGNvbnN0IGNpZHJzID0gdnBjLmlwdjRJcGFtUHJvdmlzaW9uZWRDaWRycy5tYXAoY2lkciA9PiBuZXcgQ2lkckJsb2NrKGNpZHIpKTtcbiAgICBhbGxDaWRycy5wdXNoKC4uLmNpZHJzKTtcbiAgfVxuXG4gIC8vIElmIG5vIElQdjQgaXMgYXNzaWduZWQgYXMgc2Vjb25kYXJ5IGFkZHJlc3NcbiAgaWYgKGFsbENpZHJzLmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcignTm8gc2Vjb25kYXJ5IElQIGFkZHJlc3MgYXR0YWNoZWQgdG8gVlBDJyk7XG4gIH1cblxuICByZXR1cm4gYWxsQ2lkcnMuc29tZShjID0+IGMuY29udGFpbnNDaWRyKHN1Ym5ldENpZHJCbG9jaykpO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlcyBpZiB0aGUgcHJvdmlkZWQgSVB2NCBDSURSIGJsb2NrIG92ZXJsYXBzIHdpdGggZXhpc3Rpbmcgc3VibmV0IENJRFIgYmxvY2tzIHdpdGhpbiB0aGUgZ2l2ZW4gVlBDLlxuICpcbiAqIEBwYXJhbSB2cGMgVGhlIFZQQyBpbnN0YW5jZSB0byBjaGVjayBhZ2FpbnN0LlxuICogQHBhcmFtIGlwdjRDaWRyQmxvY2sgVGhlIElQdjQgQ0lEUiBibG9jayB0byBiZSB2YWxpZGF0ZWQuXG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBJUHY0IENJRFIgYmxvY2sgb3ZlcmxhcHMgd2l0aCBleGlzdGluZyBzdWJuZXQgQ0lEUiBibG9ja3MsIGZhbHNlIG90aGVyd2lzZS5cbiAqIEBpbnRlcm5hbFxuICovXG5cbmZ1bmN0aW9uIHZhbGlkYXRlT3ZlcmxhcHBpbmdDaWRyUmFuZ2VzKHZwYzogSVZwY1YyLCBpcHY0Q2lkckJsb2NrOiBzdHJpbmcpOiBib29sZWFuIHtcblxuICBsZXQgYWxsU3VibmV0czogSVN1Ym5ldFYyW107XG4gIHRyeSB7XG4gICAgYWxsU3VibmV0cyA9IHZwYy5zZWxlY3RTdWJuZXRzKCkuc3VibmV0cztcbiAgfSBjYXRjaCAoZSkge1xuICAgICdObyBzdWJuZXRzIGluIFZQQyc7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgaXBNYXA6IFtzdHJpbmcsIHN0cmluZ11bXSA9IG5ldyBBcnJheSgpO1xuXG4gIGNvbnN0IGlucHV0UmFuZ2UgPSBuZXcgQ2lkckJsb2NrKGlwdjRDaWRyQmxvY2spO1xuXG4gIGNvbnN0IGlucHV0SXBNYXA6IFtzdHJpbmcsIHN0cmluZ10gPSBbaW5wdXRSYW5nZS5taW5JcCgpLCBpbnB1dFJhbmdlLm1heElwKCldO1xuXG4gIGZvciAoY29uc3Qgc3VibmV0IG9mIGFsbFN1Ym5ldHMpIHtcbiAgICBjb25zdCBjaWRyQmxvY2sgPSBuZXcgQ2lkckJsb2NrKHN1Ym5ldC5pcHY0Q2lkckJsb2NrKTtcbiAgICBpcE1hcC5wdXNoKFtjaWRyQmxvY2subWluSXAoKSwgY2lkckJsb2NrLm1heElwKCldKTtcbiAgfVxuXG4gIGZvciAoY29uc3QgcmFuZ2Ugb2YgaXBNYXApIHtcbiAgICBpZiAoaW5wdXRSYW5nZS5yYW5nZXNPdmVybGFwKHJhbmdlLCBpbnB1dElwTWFwKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlcyBpZiB0aGUgcHJvdmlkZWQgSVB2NiBDSURSIGJsb2NrIG92ZXJsYXBzIHdpdGggZXhpc3Rpbmcgc3VibmV0IENJRFIgYmxvY2tzIHdpdGhpbiB0aGUgZ2l2ZW4gVlBDLlxuICpcbiAqIEBwYXJhbSB2cGMgVGhlIFZQQyBpbnN0YW5jZSB0byBjaGVjayBhZ2FpbnN0LlxuICogQHBhcmFtIGlwdjZDaWRyQmxvY2sgVGhlIElQdjYgQ0lEUiBibG9jayB0byBiZSB2YWxpZGF0ZWQuXG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBJUHY2IENJRFIgYmxvY2sgb3ZlcmxhcHMgd2l0aCBleGlzdGluZyBzdWJuZXQgQ0lEUiBibG9ja3MsIGZhbHNlIG90aGVyd2lzZS5cbiAqIEB0aHJvd3MgRXJyb3IgaWYgbm8gc3VibmV0cyBhcmUgZm91bmQgaW4gdGhlIFZQQy5cbiAqIEBpbnRlcm5hbFxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZU92ZXJsYXBwaW5nQ2lkclJhbmdlc2lwdjYodnBjOiBJVnBjVjIsIGlwdjZDaWRyQmxvY2s6IHN0cmluZyk6IGJvb2xlYW4ge1xuXG4gIGxldCBhbGxTdWJuZXRzOiBJU3VibmV0VjJbXTtcbiAgdHJ5IHtcbiAgICBhbGxTdWJuZXRzID0gdnBjLnNlbGVjdFN1Ym5ldHMoKS5zdWJuZXRzO1xuICB9IGNhdGNoIChlKSB7XG4gICAgJ05vIHN1Ym5ldHMgaW4gVlBDJztcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBpcHY2TWFwOiBzdHJpbmdbXT0gW107XG5cbiAgY29uc3QgaW5wdXRSYW5nZSA9IG5ldyBDaWRyQmxvY2tJcHY2KGlwdjZDaWRyQmxvY2spO1xuXG4gIGxldCByZXN1bHQgOiBib29sZWFuID0gZmFsc2U7XG5cbiAgZm9yIChjb25zdCBzdWJuZXQgb2YgYWxsU3VibmV0cykge1xuICAgIGlmIChzdWJuZXQuaXB2NkNpZHJCbG9jaykge1xuICAgICAgY29uc3QgY2lkckJsb2NrID0gbmV3IENpZHJCbG9ja0lwdjYoc3VibmV0LmlwdjZDaWRyQmxvY2spO1xuICAgICAgaXB2Nk1hcC5wdXNoKGNpZHJCbG9jay5jaWRyKTtcbiAgICB9XG4gIH1cblxuICBmb3IgKGNvbnN0IHJhbmdlIG9mIGlwdjZNYXApIHtcbiAgICBpZiAoaW5wdXRSYW5nZS5yYW5nZXNPdmVybGFwKHJhbmdlLCBpbnB1dFJhbmdlLmNpZHIpKSB7XG4gICAgICByZXN1bHQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG4iXX0=
|
|
380
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VibmV0LXYyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsic3VibmV0LXYyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLDZDQUEwRDtBQUMxRCxpREFBd0s7QUFDeEssMkNBQXFFO0FBRXJFLGlDQUFrRDtBQUNsRCxtQ0FBcUM7QUFTckM7O0dBRUc7QUFDSCxNQUFhLE1BQU07SUFPakIsWUFBWSxLQUFhO1FBQ3ZCLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO0tBQ25COztBQVRILHdCQVVDOzs7QUFFRDs7R0FFRztBQUNILE1BQU0sUUFBUSxHQUFXLE1BQU0sQ0FBQztBQUVoQzs7R0FFRztBQUNILE1BQU0sV0FBVyxHQUFXLFNBQVMsQ0FBQztBQWtGdEM7Ozs7Ozs7Ozs7R0FVRztBQUNILE1BQWEsUUFBUyxTQUFRLHNCQUFRO0lBRXBDOztPQUVHO0lBQ0ksTUFBTSxDQUFDLHNCQUFzQixDQUFDLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQXlCOzs7Ozs7Ozs7O1FBQzFGOzs7VUFHRTtRQUNGLE1BQU0sZ0JBQWlCLFNBQVEsc0JBQVE7WUFBdkM7O2dCQUVFOztrQkFFRTtnQkFDYyxrQkFBYSxHQUFZLEtBQUssQ0FBQyxhQUFhLENBQUM7Z0JBRTdEOztrQkFFRTtnQkFDYyxlQUFVLEdBQWdCLEtBQUssQ0FBQyxVQUFVLENBQUM7Z0JBRTNEOztrQkFFRTtnQkFDYyxxQkFBZ0IsR0FBVyxLQUFLLENBQUMsZ0JBQWdCLENBQUM7Z0JBRWxFOzs7a0JBR0U7Z0JBQ2MsYUFBUSxHQUFXLEtBQUssQ0FBQyxRQUFRLENBQUM7Z0JBRWxEOztrQkFFRTtnQkFDYyxvQ0FBK0IsR0FBZ0IsSUFBSSw0QkFBZSxFQUFFLENBQUM7Z0JBRXJGOztrQkFFRTtnQkFDYyxrQkFBYSxHQUFXLEtBQUssQ0FBQyxhQUFhLENBQUM7Z0JBRTVEOztrQkFFRTtnQkFDYyxlQUFVLEdBQWdCLEVBQUUsWUFBWSxFQUFFLEtBQUssQ0FBQyxZQUFhLEVBQUUs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RTVCLE1BQU0sVUFBVSxHQUFHLElBQUksb0JBQWEsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUVwRCxJQUFJLE1BQU0sR0FBYSxLQUFLLENBQUM7SUFFN0IsS0FBSyxNQUFNLE1BQU0sSUFBSSxVQUFVLEVBQUUsQ0FBQztRQUNoQyxJQUFJLE1BQU0sQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN6QixNQUFNLFNBQVMsR0FBRyxJQUFJLG9CQUFhLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQzFELE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQy9CLENBQUM7SUFDSCxDQUFDO0lBRUQsS0FBSyxNQUFNLEtBQUssSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUM1QixJQUFJLFVBQVUsQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ3JELE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDaEIsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUmVzb3VyY2UsIE5hbWVzLCBMYXp5LCBUYWdzIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgQ2ZuU3VibmV0LCBDZm5TdWJuZXRSb3V0ZVRhYmxlQXNzb2NpYXRpb24sIElOZXR3b3JrQWNsLCBJUm91dGVUYWJsZSwgSVN1Ym5ldCwgTmV0d29ya0FjbCwgU3VibmV0TmV0d29ya0FjbEFzc29jaWF0aW9uLCBTdWJuZXRUeXBlIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWVjMic7XG5pbXBvcnQgeyBDb25zdHJ1Y3QsIERlcGVuZGVuY3lHcm91cCwgSURlcGVuZGFibGUgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IElWcGNWMiB9IGZyb20gJy4vdnBjLXYyLWJhc2UnO1xuaW1wb3J0IHsgQ2lkckJsb2NrLCBDaWRyQmxvY2tJcHY2IH0gZnJvbSAnLi91dGlsJztcbmltcG9ydCB7IFJvdXRlVGFibGUgfSBmcm9tICcuL3JvdXRlJztcblxuLyoqXG4gKiBJbnRlcmZhY2UgdG8gZGVmaW5lIHN1Ym5ldCBDSURSXG4gKi9cbmludGVyZmFjZSBJQ2lkciB7XG4gIHJlYWRvbmx5IGNpZHI6IHN0cmluZztcbn1cblxuLyoqXG4gKiBJUHY0IG9yIElQdjYgQ0lEUiByYW5nZSBmb3IgdGhlIHN1Ym5ldFxuICovXG5leHBvcnQgY2xhc3MgSXBDaWRyIGltcGxlbWVudHMgSUNpZHIge1xuXG4gIC8qKlxuICogSVB2NiBDSURSIHJhbmdlIGZvciB0aGUgc3VibmV0XG4gKiBBbGxvd2VkIG9ubHkgaWYgSVB2NiBpcyBlbmFibGVkIG9uIFZQY1xuICovXG4gIHB1YmxpYyByZWFkb25seSBjaWRyOiBzdHJpbmc7XG4gIGNvbnN0cnVjdG9yKHByb3BzOiBzdHJpbmcgKSB7XG4gICAgdGhpcy5jaWRyID0gcHJvcHM7XG4gIH1cbn1cblxuLyoqXG4gKiBOYW1lIHRhZyBjb25zdGFudFxuICovXG5jb25zdCBOQU1FX1RBRzogc3RyaW5nID0gJ05hbWUnO1xuXG4vKipcbiAqIFZQQyBOYW1lIHRhZyBjb25zdGFudFxuICovXG5jb25zdCBWUENOQU1FX1RBRzogc3RyaW5nID0gJ1ZwY05hbWUnO1xuXG4vKipcbiAqIFByb3BlcnRpZXMgdG8gZGVmaW5lIHN1Ym5ldCBmb3IgVlBDLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN1Ym5ldFYyUHJvcHMge1xuLyoqXG4gKiBWUEMgUHJvcFxuICovXG4gIHJlYWRvbmx5IHZwYzogSVZwY1YyO1xuXG4gIC8qKlxuICAgKiBpcHY0IGNpZHIgdG8gYXNzaWduIHRvIHRoaXMgc3VibmV0LlxuICAgKiBTZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXJlc291cmNlLWVjMi1zdWJuZXQuaHRtbCNjZm4tZWMyLXN1Ym5ldC1jaWRyYmxvY2tcbiAgICovXG4gIHJlYWRvbmx5IGlwdjRDaWRyQmxvY2s6IElwQ2lkcjtcblxuICAvKipcbiAgICogSXB2NiBDSURSIFJhbmdlIGZvciBzdWJuZXRcbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBJcHY2IGFkZHJlc3NcbiAgICovXG4gIHJlYWRvbmx5IGlwdjZDaWRyQmxvY2s/OiBJcENpZHI7XG5cbiAgLyoqXG4gICAqIEN1c3RvbSBBWiBmb3IgdGhlIHN1Ym5ldFxuICAgKi9cbiAgcmVhZG9ubHkgYXZhaWxhYmlsaXR5Wm9uZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDdXN0b20gUm91dGUgZm9yIHN1Ym5ldFxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGEgZGVmYXVsdCByb3V0ZSB0YWJsZSBjcmVhdGVkXG4gICAqL1xuICByZWFkb25seSByb3V0ZVRhYmxlPzogSVJvdXRlVGFibGU7XG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIFN1Ym5ldCB0byBjb25maWd1cmUuXG4gICAqXG4gICAqIFRoZSBTdWJuZXQgdHlwZSB3aWxsIGNvbnRyb2wgdGhlIGFiaWxpdHkgdG8gcm91dGUgYW5kIGNvbm5lY3QgdG8gdGhlXG4gICAqIEludGVybmV0LlxuICAgKlxuICAgKiBUT0RPOiBBZGQgdmFsaWRhdGlvbiBjaGVjayBgc3VibmV0VHlwZWAgd2hlbiBhZGRpbmcgcmVzb3VyY2VzIChlLmcuIGNhbm5vdCBhZGQgTmF0R2F0ZXdheSB0byBwcml2YXRlKVxuICAgKi9cbiAgcmVhZG9ubHkgc3VibmV0VHlwZTogU3VibmV0VHlwZTtcblxuICAvKipcbiAgICogU3VibmV0IG5hbWVcbiAgICpcbiAgICogQGRlZmF1bHQgLSBwcm92aXNpb25lZCB3aXRoIGFuIGF1dG9nZW5lcmF0ZWQgbmFtZSBieSBDREtcbiAgICovXG4gIHJlYWRvbmx5IHN1Ym5ldE5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIGEgbmV0d29yayBpbnRlcmZhY2UgY3JlYXRlZCBpbiB0aGlzIHN1Ym5ldCByZWNlaXZlcyBhbiBJUHY2IGFkZHJlc3MuXG4gICAqIElmIHlvdSBzcGVjaWZ5IEFzc2lnbklwdjZBZGRyZXNzT25DcmVhdGlvbiwgeW91IG11c3QgYWxzbyBzcGVjaWZ5IElwdjZDaWRyQmxvY2suXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdW5kZWZpbmVkIGluIGNhc2Ugbm90IHByb3ZpZGVkIGFzIGFuIGlucHV0XG4gICAqL1xuICByZWFkb25seSBhc3NpZ25JcHY2QWRkcmVzc09uQ3JlYXRpb24/OiBib29sZWFuO1xuXG59XG5cbi8qKlxuICogSW50ZXJmYWNlIHdpdGggYWRkaXRpb25hbCBwcm9wZXJ0aWVzIGZvciBTdWJuZXRWMlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElTdWJuZXRWMiBleHRlbmRzIElTdWJuZXQge1xuXG4gIC8qKlxuICAgKiBUaGUgSVB2NiBDSURSIGJsb2NrIGZvciB0aGlzIHN1Ym5ldFxuICAgKi9cbiAgcmVhZG9ubHkgaXB2NkNpZHJCbG9jaz86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHR5cGUgb2Ygc3VibmV0IChwdWJsaWMgb3IgcHJpdmF0ZSkgdGhhdCB0aGlzIHN1Ym5ldCByZXByZXNlbnRzLlxuICAgKlxuICAgKiBAYXR0cmlidXRlIFN1Ym5ldFR5cGVcbiAgICovXG4gIHJlYWRvbmx5IHN1Ym5ldFR5cGU/OiBTdWJuZXRUeXBlO1xuXG59XG5cbi8qKlxuICogVGhlIFN1Ym5ldFYyIGNsYXNzIHJlcHJlc2VudHMgYSBzdWJuZXQgd2l0aGluIGEgVlBDIChWaXJ0dWFsIFByaXZhdGUgQ2xvdWQpIGluIEFXUy5cbiAqIEl0IGV4dGVuZHMgdGhlIFJlc291cmNlIGNsYXNzIGFuZCBpbXBsZW1lbnRzIHRoZSBJU3VibmV0IGludGVyZmFjZS5cbiAqXG4gKiBJbnN0YW5jZXMgb2YgdGhpcyBjbGFzcyBjYW4gYmUgdXNlZCB0byBjcmVhdGUgYW5kIG1hbmFnZSBzdWJuZXRzIHdpdGhpbiBhIFZwY1YyIGluc3RhbmNlLlxuICogU3VibmV0cyBjYW4gYmUgY29uZmlndXJlZCB3aXRoIHNwZWNpZmljIElQIGFkZHJlc3MgcmFuZ2VzIChJUHY0IGFuZCBJUHY2KSwgYXZhaWxhYmlsaXR5IHpvbmVzLFxuICogYW5kIHN1Ym5ldCB0eXBlcyAoZS5nLiwgcHVibGljLCBwcml2YXRlLCBpc29sYXRlZCkuXG4gKlxuICogQHJlc291cmNlIEFXUzo6RUMyOjpTdWJuZXRcbiAqXG4gKi9cbmV4cG9ydCBjbGFzcyBTdWJuZXRWMiBleHRlbmRzIFJlc291cmNlIGltcGxlbWVudHMgSVN1Ym5ldFYyIHtcblxuICAvKipcbiAgICogSW1wb3J0IGFuIGV4aXN0aW5nIHN1Ym5ldCB0byB0aGUgVlBDXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21TdWJuZXRWMkF0dHJpYnV0ZXMoc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgYXR0cnM6IFN1Ym5ldFYyQXR0cmlidXRlcykgOiBJU3VibmV0VjIge1xuICAgIC8qKlxuICAgICogQ2xhc3MgdG8gZGVmaW5lIGFuIGltcG9ydCBmb3IgYW4gZXhpc3Rpbmcgc3VibmV0XG4gICAgKiBAcmVzb3VyY2UgQVdTOjpFQzI6OlN1Ym5ldFxuICAgICovXG4gICAgY2xhc3MgSW1wb3J0ZWRTdWJuZXRWMiBleHRlbmRzIFJlc291cmNlIGltcGxlbWVudHMgSVN1Ym5ldFYyIHtcblxuICAgICAgLyoqXG4gICAgICAqIFRoZSBJUHY2IENJRFIgQmxvY2sgYXNzaWduZWQgdG8gdGhpcyBzdWJuZXRcbiAgICAgICovXG4gICAgICBwdWJsaWMgcmVhZG9ubHkgaXB2NkNpZHJCbG9jaz86IHN0cmluZyA9IGF0dHJzLmlwdjZDaWRyQmxvY2s7XG5cbiAgICAgIC8qKlxuICAgICAgKiBUaGUgdHlwZSBvZiBzdWJuZXQgKGVnLiBwdWJsaWMgb3IgcHJpdmF0ZSkgdGhhdCB0aGlzIHN1Ym5ldCByZXByZXNlbnRzLlxuICAgICAgKi9cbiAgICAgIHB1YmxpYyByZWFkb25seSBzdWJuZXRUeXBlPzogU3VibmV0VHlwZSA9IGF0dHJzLnN1Ym5ldFR5cGU7XG5cbiAgICAgIC8qKlxuICAgICAgKiBUaGUgQXZhaWxhYmlsaXR5IFpvbmUgaW4gd2hpY2ggc3VibmV0IGlzIGxvY2F0ZWRcbiAgICAgICovXG4gICAgICBwdWJsaWMgcmVhZG9ubHkgYXZhaWxhYmlsaXR5Wm9uZTogc3RyaW5nID0gYXR0cnMuYXZhaWxhYmlsaXR5Wm9uZTtcblxuICAgICAgLyoqXG4gICAgICAqIFRoZSBzdWJuZXRJZCBmb3IgdGhpcyBwYXJ0aWN1bGFyIHN1Ym5ldFxuICAgICAgKiBSZWZlcnMgdG8gdGhlIHBoeXNpY2FsIElEIGNyZWF0ZWRcbiAgICAgICovXG4gICAgICBwdWJsaWMgcmVhZG9ubHkgc3VibmV0SWQ6IHN0cmluZyA9IGF0dHJzLnN1Ym5ldElkO1xuXG4gICAgICAvKipcbiAgICAgICogRGVwZW5kYWJsZSB0aGF0IGNhbiBiZSBkZXBlbmRlZCB1cG9uIHRvIGZvcmNlIGludGVybmV0IGNvbm5lY3Rpdml0eSBlc3RhYmxpc2hlZCBvbiB0aGUgVlBDXG4gICAgICAqL1xuICAgICAgcHVibGljIHJlYWRvbmx5IGludGVybmV0Q29ubmVjdGl2aXR5RXN0YWJsaXNoZWQ6IElEZXBlbmRhYmxlID0gbmV3IERlcGVuZGVuY3lHcm91cCgpO1xuXG4gICAgICAvKipcbiAgICAgICogVGhlIElQdjQgQ0lEUiBibG9jayBhc3NpZ25lZCB0byB0aGlzIHN1Ym5ldFxuICAgICAgKi9cbiAgICAgIHB1YmxpYyByZWFkb25seSBpcHY0Q2lkckJsb2NrOiBzdHJpbmcgPSBhdHRycy5pcHY0Q2lkckJsb2NrO1xuXG4gICAgICAvKipcbiAgICAgICogIEN1cnJlbnQgcm91dGUgdGFibGUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgc3VibmV0XG4gICAgICAqL1xuICAgICAgcHVibGljIHJlYWRvbmx5IHJvdXRlVGFibGU6IElSb3V0ZVRhYmxlID0geyByb3V0ZVRhYmxlSWQ6IGF0dHJzLnJvdXRlVGFibGVJZCEgfTtcblxuICAgICAgLyoqXG4gICAgICAqIEFzc29jaWF0ZSBhIE5ldHdvcmsgQUNMIHdpdGggdGhpcyBzdWJuZXRcbiAgICAgICogUmVxdWlyZWQgaGVyZSBzaW5jZSBpdCBpcyBpbXBsZW1lbnRlZCBpbiB0aGUgSVN1Ym5ldFYyXG4gICAgICAqL1xuICAgICAgcHVibGljIGFzc29jaWF0ZU5ldHdvcmtBY2woYWNsSWQ6IHN0cmluZywgbmV0d29ya0FjbDogSU5ldHdvcmtBY2wpIHtcbiAgICAgICAgY29uc3QgYWNsU2NvcGUgPSBuZXR3b3JrQWNsIGluc3RhbmNlb2YgQ29uc3RydWN0ID8gbmV0d29ya0FjbCA6IHRoaXM7XG4gICAgICAgIGNvbnN0IG90aGVyID0gbmV0d29ya0FjbCBpbnN0YW5jZW9mIENvbnN0cnVjdCA/IHRoaXMgOiBuZXR3b3JrQWNsO1xuICAgICAgICBuZXcgU3VibmV0TmV0d29ya0FjbEFzc29jaWF0aW9uKGFjbFNjb3BlLCBhY2xJZCArIE5hbWVzLm5vZGVVbmlxdWVJZChvdGhlci5ub2RlKSwge1xuICAgICAgICAgIG5ldHdvcmtBY2wsXG4gICAgICAgICAgc3VibmV0OiB0aGlzLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5ldyBJbXBvcnRlZFN1Ym5ldFYyKHNjb3BlLCBpZCk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIEF2YWlsYWJpbGl0eSBab25lIHRoZSBzdWJuZXQgaXMgbG9jYXRlZCBpblxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGF2YWlsYWJpbGl0eVpvbmU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHN1Ym5ldElkIGZvciB0aGlzIHBhcnRpY3VsYXIgc3VibmV0XG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBzdWJuZXRJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiAgRGVwZW5kZW5jaWVzIGZvciBpbnRlcm5ldCBjb25uZWN0aXZpdHlcbiAgICogVGhpcyBQcm9wZXJ0eSBleHBvc2VzIHRoZSBSb3V0ZVRhYmxlLVN1Ym5ldCBhc3NvY2lhdGlvbiBzbyB0aGF0IG90aGVyIHJlc291cmNlcyBjYW4gZGVwZW5kIG9uIGl0LlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGludGVybmV0Q29ubmVjdGl2aXR5RXN0YWJsaXNoZWQ6IElEZXBlbmRhYmxlO1xuXG4gIC8qKlxuICAgKiBUaGUgdmFyaWFibGUgbmFtZSBgaW50ZXJuZXRDb25uZWN0aXZpdHlFc3RhYmxpc2hlZGAgZG9lcyBub3QgcmVmbGVjdCB3aGF0IGl0IGFjdHVhbGx5IGlzLlxuICAgKiBUaGUgbmFtaW5nIGlzIGVuZm9yY2VkIGJ5IElTdWJuZXQuIFdlIG5lZWQgdG8ga2VlcCBpdCB0byBtYWludGFpbiBjb21wYXRpYmlsaXR5LlxuICAgKiBJdCBleHBvc2VzIHRoZSBSb3V0ZVRhYmxlLVN1Ym5ldCBhc3NvY2lhdGlvbiBzbyB0aGF0IG90aGVyIHJlc291cmNlcyBjYW4gZGVwZW5kIG9uIGl0LlxuICAgKiBFLmcuIFJlc291cmNlcyBpbiBhIHN1Ym5ldCwgd2hlbiBiZWluZyBkZWxldGVkLCBtYXkgbmVlZCB0aGUgUm91dGVUYWJsZSB0byBleGlzdCBpbiBvcmRlciB0byBkZWxldGUgcHJvcGVybHlcbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgX2ludGVybmV0Q29ubmVjdGl2aXR5RXN0YWJsaXNoZWQgPSBuZXcgRGVwZW5kZW5jeUdyb3VwKCk7XG5cbiAgLyoqXG4gICAqIFRoZSBJUHY0IENJRFIgYmxvY2sgZm9yIHRoaXMgc3VibmV0XG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgaXB2NENpZHJCbG9jazogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgSVB2NiBDSURSIEJsb2NrIGZvciB0aGlzIHN1Ym5ldFxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGlwdjZDaWRyQmxvY2s/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHN1Ym5ldCAocHVibGljIG9yIHByaXZhdGUpIHRoYXQgdGhpcyBzdWJuZXQgcmVwcmVzZW50cy5cbiAgICogQGF0dHJpYnV0ZSBTdWJuZXRUeXBlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgc3VibmV0VHlwZT86IFN1Ym5ldFR5cGU7XG5cbiAgcHJpdmF0ZSBfbmV0d29ya0FjbDogSU5ldHdvcmtBY2w7XG5cbiAgcHJpdmF0ZSBfcm91dGVUYWJsZTogSVJvdXRlVGFibGU7XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdHMgYSBuZXcgU3VibmV0VjIgaW5zdGFuY2UuXG4gICAqIEBwYXJhbSBzY29wZSBUaGUgcGFyZW50IENvbnN0cnVjdCB0aGF0IHRoaXMgcmVzb3VyY2Ugd2lsbCBiZSBwYXJ0IG9mLlxuICAgKiBAcGFyYW0gaWQgVGhlIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGlzIHJlc291cmNlLlxuICAgKiBAcGFyYW0gcHJvcHMgVGhlIGNvbmZpZ3VyYXRpb24gcHJvcGVydGllcyBmb3IgdGhlIHN1Ym5ldC5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBTdWJuZXRWMlByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCB7XG4gICAgICBwaHlzaWNhbE5hbWU6IHByb3BzLnN1Ym5ldE5hbWUgPz8gTGF6eS5zdHJpbmcoe1xuICAgICAgICBwcm9kdWNlOiAoKSA9PiBOYW1lcy51bmlxdWVSZXNvdXJjZU5hbWUodGhpcywgeyBtYXhMZW5ndGg6IDEyOCwgYWxsb3dlZFNwZWNpYWxDaGFyYWN0ZXJzOiAnXycgfSksXG4gICAgICB9KSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGlwdjRDaWRyQmxvY2sgPSBwcm9wcy5pcHY0Q2lkckJsb2NrLmNpZHI7XG4gICAgY29uc3QgaXB2NkNpZHJCbG9jayA9IHByb3BzLmlwdjZDaWRyQmxvY2s/LmNpZHI7XG5cbiAgICBpZiAoIWNoZWNrQ2lkclJhbmdlcyhwcm9wcy52cGMsIHByb3BzLmlwdjRDaWRyQmxvY2suY2lkcikpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ0lEUiBibG9jayBzaG91bGQgYmUgd2l0aGluIHRoZSByYW5nZSBvZiBWUEMnKTtcbiAgICB9O1xuXG4gICAgbGV0IG92ZXJsYXA6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBsZXQgb3ZlcmxhcElwdjY6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIG92ZXJsYXAgPSB2YWxpZGF0ZU92ZXJsYXBwaW5nQ2lkclJhbmdlcyhwcm9wcy52cGMsIHByb3BzLmlwdjRDaWRyQmxvY2suY2lkcik7XG5cbiAgICAvL2NoZWNrIHdoZXRoZXIgVlBDIHN1cHBvcnRzIGlwdjZcbiAgICBpZiAocHJvcHMuaXB2NkNpZHJCbG9jaz8uY2lkcikge1xuICAgICAgdmFsaWRhdGVTdXBwb3J0SXB2Nihwcm9wcy52cGMpO1xuICAgICAgb3ZlcmxhcElwdjYgPSB2YWxpZGF0ZU92ZXJsYXBwaW5nQ2lkclJhbmdlc2lwdjYocHJvcHMudnBjLCBwcm9wcy5pcHY2Q2lkckJsb2NrPy5jaWRyKTtcbiAgICB9XG5cbiAgICBpZiAob3ZlcmxhcCB8fCBvdmVybGFwSXB2Nikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDSURSIGJsb2NrIHNob3VsZCBub3Qgb3ZlcmxhcCB3aXRoIGV4aXN0aW5nIHN1Ym5ldCBibG9ja3MnKTtcbiAgICB9XG5cbiAgICBpZiAocHJvcHMuYXNzaWduSXB2NkFkZHJlc3NPbkNyZWF0aW9uICYmICFwcm9wcy5pcHY2Q2lkckJsb2NrKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0lQdjYgQ0lEUiBibG9jayBpcyByZXF1aXJlZCB3aGVuIGFzc2lnbmluZyBJUHY2IGFkZHJlc3Mgb24gY3JlYXRpb24nKTtcbiAgICB9XG5cbiAgICBjb25zdCBzdWJuZXQgPSBuZXcgQ2ZuU3VibmV0KHRoaXMsICdTdWJuZXQnLCB7XG4gICAgICB2cGNJZDogcHJvcHMudnBjLnZwY0lkLFxuICAgICAgY2lkckJsb2NrOiBpcHY0Q2lkckJsb2NrLFxuICAgICAgaXB2NkNpZHJCbG9jazogaXB2NkNpZHJCbG9jayxcbiAgICAgIGF2YWlsYWJpbGl0eVpvbmU6IHByb3BzLmF2YWlsYWJpbGl0eVpvbmUsXG4gICAgICBhc3NpZ25JcHY2QWRkcmVzc09uQ3JlYXRpb246IHByb3BzLmFzc2lnbklwdjZBZGRyZXNzT25DcmVhdGlvbiA/PyBmYWxzZSxcbiAgICB9KTtcblxuICAgIHRoaXMubm9kZS5kZWZhdWx0Q2hpbGQgPSBzdWJuZXQ7XG4gICAgdGhpcy5pcHY0Q2lkckJsb2NrID0gcHJvcHMuaXB2NENpZHJCbG9jay5jaWRyO1xuICAgIHRoaXMuaXB2NkNpZHJCbG9jayA9IHByb3BzLmlwdjZDaWRyQmxvY2s/LmNpZHI7XG4gICAgdGhpcy5zdWJuZXRJZCA9IHN1Ym5ldC5yZWY7XG4gICAgdGhpcy5hdmFpbGFiaWxpdHlab25lID0gcHJvcHMuYXZhaWxhYmlsaXR5Wm9uZTtcblxuICAgIHRoaXMuX25ldHdvcmtBY2wgPSBOZXR3b3JrQWNsLmZyb21OZXR3b3JrQWNsSWQodGhpcywgJ0FjbCcsIHN1Ym5ldC5hdHRyTmV0d29ya0FjbEFzc29jaWF0aW9uSWQpO1xuXG4gICAgaWYgKHByb3BzLnN1Ym5ldE5hbWUpIHtcbiAgICAgIFRhZ3Mub2YodGhpcykuYWRkKE5BTUVfVEFHLCBwcm9wcy5zdWJuZXROYW1lKTtcbiAgICB9XG5cbiAgICBpZiAocHJvcHMudnBjLnZwY05hbWUpIHtcbiAgICAgIFRhZ3Mub2YodGhpcykuYWRkKFZQQ05BTUVfVEFHLCBwcm9wcy52cGMudnBjTmFtZSk7XG4gICAgfVxuXG4gICAgaWYgKHByb3BzLnJvdXRlVGFibGUpIHtcbiAgICAgIHRoaXMuX3JvdXRlVGFibGUgPSBwcm9wcy5yb3V0ZVRhYmxlO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBBc3NpZ25pbmcgYSBkZWZhdWx0IHJvdXRlIHRhYmxlXG4gICAgICB0aGlzLl9yb3V0ZVRhYmxlID0gbmV3IFJvdXRlVGFibGUodGhpcywgJ1JvdXRlVGFibGUnLCB7XG4gICAgICAgIHZwYzogcHJvcHMudnBjLFxuICAgICAgICByb3V0ZVRhYmxlTmFtZTogJ0RlZmF1bHRDREtSb3V0ZVRhYmxlJyxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IHJvdXRlQXNzb2MgPSBuZXcgQ2ZuU3VibmV0Um91dGVUYWJsZUFzc29jaWF0aW9uKHRoaXMsICdSb3V0ZVRhYmxlQXNzb2NpYXRpb24nLCB7XG4gICAgICBzdWJuZXRJZDogdGhpcy5zdWJuZXRJZCxcbiAgICAgIHJvdXRlVGFibGVJZDogdGhpcy5yb3V0ZVRhYmxlLnJvdXRlVGFibGVJZCxcbiAgICB9KTtcblxuICAgIHRoaXMuX2ludGVybmV0Q29ubmVjdGl2aXR5RXN0YWJsaXNoZWQuYWRkKHJvdXRlQXNzb2MpO1xuXG4gICAgdGhpcy5pbnRlcm5ldENvbm5lY3Rpdml0eUVzdGFibGlzaGVkID0gdGhpcy5faW50ZXJuZXRDb25uZWN0aXZpdHlFc3RhYmxpc2hlZDtcblxuICAgIHRoaXMuc3VibmV0VHlwZSA9IHByb3BzLnN1Ym5ldFR5cGU7XG4gICAgc3RvcmVTdWJuZXRUb1ZwY0J5VHlwZShwcm9wcy52cGMsIHRoaXMsIHByb3BzLnN1Ym5ldFR5cGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFzc29jaWF0ZSBhIE5ldHdvcmsgQUNMIHdpdGggdGhpcyBzdWJuZXRcbiAgICpcbiAgICogQHBhcmFtIGlkIFRoZSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhpcyBhc3NvY2lhdGlvbi5cbiAgICogQHBhcmFtIG5ldHdvcmtBY2wgVGhlIE5ldHdvcmsgQUNMIHRvIGFzc29jaWF0ZSB3aXRoIHRoaXMgc3VibmV0LlxuICAgKiBUaGlzIGFsbG93cyBjb250cm9sbGluZyBpbmJvdW5kIGFuZCBvdXRib3VuZCB0cmFmZmljIGZvciBpbnN0YW5jZXMgaW4gdGhpcyBzdWJuZXQuXG4gICAqL1xuICBwdWJsaWMgYXNzb2NpYXRlTmV0d29ya0FjbChpZDogc3RyaW5nLCBuZXR3b3JrQWNsOiBJTmV0d29ya0FjbCkge1xuICAgIHRoaXMuX25ldHdvcmtBY2wgPSBuZXR3b3JrQWNsO1xuXG4gICAgY29uc3Qgc2NvcGUgPSBuZXR3b3JrQWNsIGluc3RhbmNlb2YgQ29uc3RydWN0ID8gbmV0d29ya0FjbCA6IHRoaXM7XG4gICAgY29uc3Qgb3RoZXIgPSBuZXR3b3JrQWNsIGluc3RhbmNlb2YgQ29uc3RydWN0ID8gdGhpcyA6IG5ldHdvcmtBY2w7XG4gICAgbmV3IFN1Ym5ldE5ldHdvcmtBY2xBc3NvY2lhdGlvbihzY29wZSwgaWQgKyBOYW1lcy5ub2RlVW5pcXVlSWQob3RoZXIubm9kZSksIHtcbiAgICAgIG5ldHdvcmtBY2wsXG4gICAgICBzdWJuZXQ6IHRoaXMsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHRoZSBSb3V0ZSBUYWJsZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBzdWJuZXRcbiAgICovXG4gIHB1YmxpYyBnZXQgcm91dGVUYWJsZSgpOiBJUm91dGVUYWJsZSB7XG4gICAgcmV0dXJuIHRoaXMuX3JvdXRlVGFibGU7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgTmV0d29yayBBQ0wgYXNzb2NpYXRlZCB3aXRoIHRoaXMgc3VibmV0LlxuICAgKi9cblxuICBwdWJsaWMgZ2V0IG5ldHdvcmtBY2woKTogSU5ldHdvcmtBY2wge1xuICAgIHJldHVybiB0aGlzLl9uZXR3b3JrQWNsO1xuICB9XG59XG5cbi8qKlxuICogUHJvcGVydGllcyByZXF1aXJlZCB0byBpbXBvcnQgYSBzdWJuZXRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdWJuZXRWMkF0dHJpYnV0ZXMge1xuICAvKipcbiAgICogVGhlIEF2YWlsYWJpbGl0eSBab25lIHRoaXMgc3VibmV0IGlzIGxvY2F0ZWQgaW5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBBWiBpbmZvcm1hdGlvbiwgY2Fubm90IHVzZSBBWiBzZWxlY3Rpb24gZmVhdHVyZXNcbiAgICovXG4gIHJlYWRvbmx5IGF2YWlsYWJpbGl0eVpvbmU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIElQdjQgQ0lEUiBibG9jayBhc3NvY2lhdGVkIHdpdGggdGhlIHN1Ym5ldFxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIENJRFIgaW5mb3JtYXRpb24sIGNhbm5vdCB1c2UgQ0lEUiBmaWx0ZXIgZmVhdHVyZXNcbiAgICovXG4gIHJlYWRvbmx5IGlwdjRDaWRyQmxvY2s6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIElQdjQgQ0lEUiBibG9jayBhc3NvY2lhdGVkIHdpdGggdGhlIHN1Ym5ldFxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIENJRFIgaW5mb3JtYXRpb24sIGNhbm5vdCB1c2UgQ0lEUiBmaWx0ZXIgZmVhdHVyZXNcbiAgICovXG4gIHJlYWRvbmx5IGlwdjZDaWRyQmxvY2s/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgcm91dGUgdGFibGUgZm9yIHRoaXMgcGFydGljdWxhciBzdWJuZXRcbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyByb3V0ZSB0YWJsZSBpbmZvcm1hdGlvbiwgY2Fubm90IGNyZWF0ZSBWUEMgZW5kcG9pbnRzXG4gICAqL1xuICByZWFkb25seSByb3V0ZVRhYmxlSWQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBzdWJuZXRJZCBmb3IgdGhpcyBwYXJ0aWN1bGFyIHN1Ym5ldFxuICAgKi9cbiAgcmVhZG9ubHkgc3VibmV0SWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHR5cGUgb2Ygc3VibmV0IChwdWJsaWMgb3IgcHJpdmF0ZSkgdGhhdCB0aGlzIHN1Ym5ldCByZXByZXNlbnRzLlxuICAgKi9cbiAgcmVhZG9ubHkgc3VibmV0VHlwZTogU3VibmV0VHlwZTtcblxuICAvKipcbiAgICogTmFtZSBvZiB0aGUgZ2l2ZW4gc3VibmV0XG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gc3VibmV0IG5hbWVcbiAgICovXG4gIHJlYWRvbmx5IHN1Ym5ldE5hbWU/OiBzdHJpbmc7XG5cbn1cblxuY29uc3Qgc3VibmV0VHlwZU1hcCA9IHtcbiAgW1N1Ym5ldFR5cGUuUFJJVkFURV9JU09MQVRFRF06ICh2cGM6IElWcGNWMiwgc3VibmV0OiBTdWJuZXRWMikgPT4gdnBjLmlzb2xhdGVkU3VibmV0cy5wdXNoKHN1Ym5ldCksXG4gIFtTdWJuZXRUeXBlLlBVQkxJQ106ICh2cGM6IElWcGNWMiwgc3VibmV0OiBTdWJuZXRWMikgPT4gdnBjLnB1YmxpY1N1Ym5ldHMucHVzaChzdWJuZXQpLFxuICBbU3VibmV0VHlwZS5QUklWQVRFX1dJVEhfRUdSRVNTXTogKHZwYzogSVZwY1YyLCBzdWJuZXQ6IFN1Ym5ldFYyKSA9PiB2cGMucHJpdmF0ZVN1Ym5ldHMucHVzaChzdWJuZXQpLFxuICBbU3VibmV0VHlwZS5JU09MQVRFRF06ICh2cGM6IElWcGNWMiwgc3VibmV0OiBTdWJuZXRWMikgPT4gdnBjLmlzb2xhdGVkU3VibmV0cy5wdXNoKHN1Ym5ldCksXG4gIFtTdWJuZXRUeXBlLlBSSVZBVEVdOiAodnBjOiBJVnBjVjIsIHN1Ym5ldDogU3VibmV0VjIpID0+IHZwYy5wcml2YXRlU3VibmV0cy5wdXNoKHN1Ym5ldCksXG4gIFtTdWJuZXRUeXBlLlBSSVZBVEVfV0lUSF9OQVRdOiAodnBjOiBJVnBjVjIsIHN1Ym5ldDogU3VibmV0VjIpID0+IHZwYy5wcml2YXRlU3VibmV0cy5wdXNoKHN1Ym5ldCksXG59O1xuXG4vKipcbiAqIFN0b3JlcyB0aGUgcHJvdmlkZWQgc3VibmV0IGluIHRoZSBWUEMncyBjb2xsZWN0aW9uIG9mIHN1Ym5ldHMgYmFzZWQgb24gdGhlIHNwZWNpZmllZCBzdWJuZXQgdHlwZS5cbiAqXG4gKiBAcGFyYW0gdnBjIFRoZSBWUEMgaW5zdGFuY2UgdG8gd2hpY2ggdGhlIHN1Ym5ldCBiZWxvbmdzLlxuICogQHBhcmFtIHN1Ym5ldCBUaGUgc3VibmV0IGluc3RhbmNlIHRvIGJlIHN0b3JlZC5cbiAqIEBwYXJhbSB0eXBlIFRoZSB0eXBlIG9mIHRoZSBzdWJuZXQgKGUuZy4sIHB1YmxpYywgcHJpdmF0ZSwgaXNvbGF0ZWQpLlxuICogQGludGVybmFsXG4gKi9cbmZ1bmN0aW9uIHN0b3JlU3VibmV0VG9WcGNCeVR5cGUodnBjOiBJVnBjVjIsIHN1Ym5ldDogU3VibmV0VjIsIHR5cGU6IFN1Ym5ldFR5cGUpIHtcbiAgY29uc3QgZmluZEZ1bmN0aW9uVHlwZSA9IHN1Ym5ldFR5cGVNYXBbdHlwZV07XG4gIGlmIChmaW5kRnVuY3Rpb25UeXBlKSB7XG4gICAgZmluZEZ1bmN0aW9uVHlwZSh2cGMsIHN1Ym5ldCk7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBzdWJuZXQgdHlwZTogJHt0eXBlfWApO1xuICB9XG5cbiAgLyoqXG4gICAqIE5lZWQgdG8gc2V0IGV4cGxpY2l0IGRlcGVuZGVuY3kgYXMgZHVyaW5nIHN0YWNrIGRlbGV0aW9uLFxuICAgKiB0aGUgY2lkciBibG9ja3MgbWF5IGdldCBkZWxldGVkIGZpcnN0IGFuZCB3aWxsIGZhaWwgYXMgdGhlIHN1Ym5ldHMgYXJlIHN0aWxsIHVzaW5nIHRoZSBjaWRyIGJsb2Nrc1xuICAgKi9cbiAgaWYgKHZwYy5zZWNvbmRhcnlDaWRyQmxvY2spIHtcbiAgICBmb3IgKGNvbnN0IGNpZHIgb2YgdnBjLnNlY29uZGFyeUNpZHJCbG9jaykge1xuICAgICAgc3VibmV0Lm5vZGUuYWRkRGVwZW5kZW5jeShjaWRyKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgd2hldGhlciB0aGUgcHJvdmlkZWQgVlBDIHN1cHBvcnRzIElQdjYgYWRkcmVzc2VzLlxuICpcbiAqIEBwYXJhbSB2cGMgVGhlIFZQQyBpbnN0YW5jZSB0byBiZSB2YWxpZGF0ZWQuXG4gKiBAdGhyb3dzIEVycm9yIGlmIHRoZSBWUEMgZG9lcyBub3Qgc3VwcG9ydCBJUHY2IGFkZHJlc3Nlcy5cbiAqIEByZXR1cm5zIFRydWUgaWYgdGhlIFZQQyBzdXBwb3J0cyBJUHY2IGFkZHJlc3NlcywgZmFsc2Ugb3RoZXJ3aXNlLlxuICogQGludGVybmFsXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlU3VwcG9ydElwdjYodnBjOiBJVnBjVjIpIHtcbiAgaWYgKHZwYy5zZWNvbmRhcnlDaWRyQmxvY2spIHtcbiAgICBpZiAodnBjLnNlY29uZGFyeUNpZHJCbG9jay5zb21lKChzZWNvbmRhcnlBZGRyZXNzKSA9PiBzZWNvbmRhcnlBZGRyZXNzLmFtYXpvblByb3ZpZGVkSXB2NkNpZHJCbG9jayA9PT0gdHJ1ZSB8fFxuICBzZWNvbmRhcnlBZGRyZXNzLmlwdjZJcGFtUG9vbElkICE9IHVuZGVmaW5lZCkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RvIHVzZSBJUHY2LCB0aGUgVlBDIG11c3QgZW5hYmxlIElQdjYgc3VwcG9ydC4nKTtcbiAgICB9XG4gIH0gZWxzZSB7cmV0dXJuIGZhbHNlO31cbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgdGhlIHByb3ZpZGVkIENJRFIgcmFuZ2UgZmFsbHMgd2l0aGluIHRoZSBJUCBhZGRyZXNzIHJhbmdlcyBvZiB0aGUgZ2l2ZW4gVlBDLlxuICpcbiAqIEBwYXJhbSB2cGMgVGhlIFZQQyBpbnN0YW5jZSB0byBjaGVjayBhZ2FpbnN0LlxuICogQHBhcmFtIGNpZHJSYW5nZSBUaGUgQ0lEUiByYW5nZSB0byBiZSBjaGVja2VkLlxuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgQ0lEUiByYW5nZSBmYWxscyB3aXRoaW4gdGhlIFZQQydzIElQIGFkZHJlc3MgcmFuZ2VzLCBmYWxzZSBvdGhlcndpc2UuXG4gKiBAaW50ZXJuYWxcbiAqL1xuZnVuY3Rpb24gY2hlY2tDaWRyUmFuZ2VzKHZwYzogSVZwY1YyLCBjaWRyUmFuZ2U6IHN0cmluZykge1xuICBjb25zdCB2cGNDaWRyQmxvY2sgPSBbdnBjLmlwdjRDaWRyQmxvY2tdO1xuICBjb25zdCBzdWJuZXRDaWRyQmxvY2sgPSBuZXcgQ2lkckJsb2NrKGNpZHJSYW5nZSk7XG4gIGNvbnN0IGFsbENpZHJzOiBDaWRyQmxvY2tbXSA9IFtdO1xuXG4gIC8vIFNlY29uZGFyeSBJUCBhZGRyZXNzZXMgYXNzb2ljYXRlZCB1c2luZyB1c2VyIGRlZmluZWQgSVB2NCByYW5nZVxuICBpZiAodnBjLnNlY29uZGFyeUNpZHJCbG9jaykge1xuICAgIGZvciAoY29uc3QgaXBBZGRyZXNzIG9mIHZwYy5zZWNvbmRhcnlDaWRyQmxvY2spIHtcbiAgICAgIGlmIChpcEFkZHJlc3MuY2lkckJsb2NrKSB7XG4gICAgICAgIHZwY0NpZHJCbG9jay5wdXNoKGlwQWRkcmVzcy5jaWRyQmxvY2spO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBjaWRycyA9IHZwY0NpZHJCbG9jay5tYXAoY2lkciA9PiBuZXcgQ2lkckJsb2NrKGNpZHIpKTtcbiAgICBhbGxDaWRycy5wdXNoKC4uLmNpZHJzKTtcbiAgfVxuXG4gIC8vIFNlY29uZGFyeSBJUCBhZGRyZXNzZXMgYXNzb2ljYXRlZCB1c2luZyBJUEFNIElQdjQgcmFuZ2VcbiAgaWYgKHZwYy5pcHY0SXBhbVByb3Zpc2lvbmVkQ2lkcnMpIHtcbiAgICBjb25zdCBjaWRycyA9IHZwYy5pcHY0SXBhbVByb3Zpc2lvbmVkQ2lkcnMubWFwKGNpZHIgPT4gbmV3IENpZHJCbG9jayhjaWRyKSk7XG4gICAgYWxsQ2lkcnMucHVzaCguLi5jaWRycyk7XG4gIH1cblxuICAvLyBJZiBubyBJUHY0IGlzIGFzc2lnbmVkIGFzIHNlY29uZGFyeSBhZGRyZXNzXG4gIGlmIChhbGxDaWRycy5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHNlY29uZGFyeSBJUCBhZGRyZXNzIGF0dGFjaGVkIHRvIFZQQycpO1xuICB9XG5cbiAgcmV0dXJuIGFsbENpZHJzLnNvbWUoYyA9PiBjLmNvbnRhaW5zQ2lkcihzdWJuZXRDaWRyQmxvY2spKTtcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgaWYgdGhlIHByb3ZpZGVkIElQdjQgQ0lEUiBibG9jayBvdmVybGFwcyB3aXRoIGV4aXN0aW5nIHN1Ym5ldCBDSURSIGJsb2NrcyB3aXRoaW4gdGhlIGdpdmVuIFZQQy5cbiAqXG4gKiBAcGFyYW0gdnBjIFRoZSBWUEMgaW5zdGFuY2UgdG8gY2hlY2sgYWdhaW5zdC5cbiAqIEBwYXJhbSBpcHY0Q2lkckJsb2NrIFRoZSBJUHY0IENJRFIgYmxvY2sgdG8gYmUgdmFsaWRhdGVkLlxuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgSVB2NCBDSURSIGJsb2NrIG92ZXJsYXBzIHdpdGggZXhpc3Rpbmcgc3VibmV0IENJRFIgYmxvY2tzLCBmYWxzZSBvdGhlcndpc2UuXG4gKiBAaW50ZXJuYWxcbiAqL1xuXG5mdW5jdGlvbiB2YWxpZGF0ZU92ZXJsYXBwaW5nQ2lkclJhbmdlcyh2cGM6IElWcGNWMiwgaXB2NENpZHJCbG9jazogc3RyaW5nKTogYm9vbGVhbiB7XG5cbiAgbGV0IGFsbFN1Ym5ldHM6IElTdWJuZXRWMltdO1xuICB0cnkge1xuICAgIGFsbFN1Ym5ldHMgPSB2cGMuc2VsZWN0U3VibmV0cygpLnN1Ym5ldHM7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAnTm8gc3VibmV0cyBpbiBWUEMnO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IGlwTWFwOiBbc3RyaW5nLCBzdHJpbmddW10gPSBuZXcgQXJyYXkoKTtcblxuICBjb25zdCBpbnB1dFJhbmdlID0gbmV3IENpZHJCbG9jayhpcHY0Q2lkckJsb2NrKTtcblxuICBjb25zdCBpbnB1dElwTWFwOiBbc3RyaW5nLCBzdHJpbmddID0gW2lucHV0UmFuZ2UubWluSXAoKSwgaW5wdXRSYW5nZS5tYXhJcCgpXTtcblxuICBmb3IgKGNvbnN0IHN1Ym5ldCBvZiBhbGxTdWJuZXRzKSB7XG4gICAgY29uc3QgY2lkckJsb2NrID0gbmV3IENpZHJCbG9jayhzdWJuZXQuaXB2NENpZHJCbG9jayk7XG4gICAgaXBNYXAucHVzaChbY2lkckJsb2NrLm1pbklwKCksIGNpZHJCbG9jay5tYXhJcCgpXSk7XG4gIH1cblxuICBmb3IgKGNvbnN0IHJhbmdlIG9mIGlwTWFwKSB7XG4gICAgaWYgKGlucHV0UmFuZ2UucmFuZ2VzT3ZlcmxhcChyYW5nZSwgaW5wdXRJcE1hcCkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgaWYgdGhlIHByb3ZpZGVkIElQdjYgQ0lEUiBibG9jayBvdmVybGFwcyB3aXRoIGV4aXN0aW5nIHN1Ym5ldCBDSURSIGJsb2NrcyB3aXRoaW4gdGhlIGdpdmVuIFZQQy5cbiAqXG4gKiBAcGFyYW0gdnBjIFRoZSBWUEMgaW5zdGFuY2UgdG8gY2hlY2sgYWdhaW5zdC5cbiAqIEBwYXJhbSBpcHY2Q2lkckJsb2NrIFRoZSBJUHY2IENJRFIgYmxvY2sgdG8gYmUgdmFsaWRhdGVkLlxuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgSVB2NiBDSURSIGJsb2NrIG92ZXJsYXBzIHdpdGggZXhpc3Rpbmcgc3VibmV0IENJRFIgYmxvY2tzLCBmYWxzZSBvdGhlcndpc2UuXG4gKiBAdGhyb3dzIEVycm9yIGlmIG5vIHN1Ym5ldHMgYXJlIGZvdW5kIGluIHRoZSBWUEMuXG4gKiBAaW50ZXJuYWxcbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVPdmVybGFwcGluZ0NpZHJSYW5nZXNpcHY2KHZwYzogSVZwY1YyLCBpcHY2Q2lkckJsb2NrOiBzdHJpbmcpOiBib29sZWFuIHtcblxuICBsZXQgYWxsU3VibmV0czogSVN1Ym5ldFYyW107XG4gIHRyeSB7XG4gICAgYWxsU3VibmV0cyA9IHZwYy5zZWxlY3RTdWJuZXRzKCkuc3VibmV0cztcbiAgfSBjYXRjaCAoZSkge1xuICAgICdObyBzdWJuZXRzIGluIFZQQyc7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgaXB2Nk1hcDogc3RyaW5nW109IFtdO1xuXG4gIGNvbnN0IGlucHV0UmFuZ2UgPSBuZXcgQ2lkckJsb2NrSXB2NihpcHY2Q2lkckJsb2NrKTtcblxuICBsZXQgcmVzdWx0IDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIGZvciAoY29uc3Qgc3VibmV0IG9mIGFsbFN1Ym5ldHMpIHtcbiAgICBpZiAoc3VibmV0LmlwdjZDaWRyQmxvY2spIHtcbiAgICAgIGNvbnN0IGNpZHJCbG9jayA9IG5ldyBDaWRyQmxvY2tJcHY2KHN1Ym5ldC5pcHY2Q2lkckJsb2NrKTtcbiAgICAgIGlwdjZNYXAucHVzaChjaWRyQmxvY2suY2lkcik7XG4gICAgfVxuICB9XG5cbiAgZm9yIChjb25zdCByYW5nZSBvZiBpcHY2TWFwKSB7XG4gICAgaWYgKGlucHV0UmFuZ2UucmFuZ2VzT3ZlcmxhcChyYW5nZSwgaW5wdXRSYW5nZS5jaWRyKSkge1xuICAgICAgcmVzdWx0ID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuIl19
|