@aws-cdk/aws-gamelift-alpha 2.219.0-alpha.0 → 2.221.0-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.jsii +3 -3
- package/.jsii.tabl.json.gz +0 -0
- package/lib/alias.js +164 -112
- package/lib/build-fleet.js +202 -140
- package/lib/build.js +188 -133
- package/lib/content.js +10 -8
- package/lib/fleet-base.js +7 -12
- package/lib/game-server-group.js +239 -171
- package/lib/game-session-queue.js +239 -190
- package/lib/ingress-rule.js +7 -7
- package/lib/matchmaking-configuration.js +5 -7
- package/lib/matchmaking-ruleset-body.js +6 -4
- package/lib/matchmaking-ruleset.js +143 -95
- package/lib/queued-matchmaking-configuration.js +194 -140
- package/lib/script.js +160 -104
- package/lib/standalone-matchmaking-configuration.js +144 -91
- package/package.json +9 -8
package/lib/build-fleet.js
CHANGED
|
@@ -1,11 +1,38 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var
|
|
3
|
-
var
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
2
|
+
var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) {
|
|
3
|
+
var useValue = arguments.length > 2;
|
|
4
|
+
for (var i = 0; i < initializers.length; i++) {
|
|
5
|
+
value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);
|
|
6
|
+
}
|
|
7
|
+
return useValue ? value : void 0;
|
|
8
|
+
};
|
|
9
|
+
var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {
|
|
10
|
+
function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; }
|
|
11
|
+
var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value";
|
|
12
|
+
var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null;
|
|
13
|
+
var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});
|
|
14
|
+
var _, done = false;
|
|
15
|
+
for (var i = decorators.length - 1; i >= 0; i--) {
|
|
16
|
+
var context = {};
|
|
17
|
+
for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p];
|
|
18
|
+
for (var p in contextIn.access) context.access[p] = contextIn.access[p];
|
|
19
|
+
context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); };
|
|
20
|
+
var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);
|
|
21
|
+
if (kind === "accessor") {
|
|
22
|
+
if (result === void 0) continue;
|
|
23
|
+
if (result === null || typeof result !== "object") throw new TypeError("Object expected");
|
|
24
|
+
if (_ = accept(result.get)) descriptor.get = _;
|
|
25
|
+
if (_ = accept(result.set)) descriptor.set = _;
|
|
26
|
+
if (_ = accept(result.init)) initializers.unshift(_);
|
|
27
|
+
}
|
|
28
|
+
else if (_ = accept(result)) {
|
|
29
|
+
if (kind === "field") initializers.unshift(_);
|
|
30
|
+
else descriptor[key] = _;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
if (target) Object.defineProperty(target, contextIn.name, descriptor);
|
|
34
|
+
done = true;
|
|
7
35
|
};
|
|
8
|
-
var _a;
|
|
9
36
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
37
|
exports.BuildFleet = void 0;
|
|
11
38
|
const jsiiDeprecationWarnings = require("../.warnings.jsii.js");
|
|
@@ -26,148 +53,183 @@ const prop_injectable_1 = require("aws-cdk-lib/core/lib/prop-injectable");
|
|
|
26
53
|
*
|
|
27
54
|
* @resource AWS::GameLift::Fleet
|
|
28
55
|
*/
|
|
29
|
-
let BuildFleet =
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
this.ingressRules = [];
|
|
47
|
-
try {
|
|
48
|
-
jsiiDeprecationWarnings._aws_cdk_aws_gamelift_alpha_BuildFleetProps(props);
|
|
56
|
+
let BuildFleet = (() => {
|
|
57
|
+
let _classDecorators = [prop_injectable_1.propertyInjectable];
|
|
58
|
+
let _classDescriptor;
|
|
59
|
+
let _classExtraInitializers = [];
|
|
60
|
+
let _classThis;
|
|
61
|
+
let _classSuper = fleet_base_1.FleetBase;
|
|
62
|
+
let _instanceExtraInitializers = [];
|
|
63
|
+
let _addIngressRule_decorators;
|
|
64
|
+
var BuildFleet = class extends _classSuper {
|
|
65
|
+
static { _classThis = this; }
|
|
66
|
+
static {
|
|
67
|
+
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
68
|
+
_addIngressRule_decorators = [(0, metadata_resource_1.MethodMetadata)()];
|
|
69
|
+
__esDecorate(this, null, _addIngressRule_decorators, { kind: "method", name: "addIngressRule", static: false, private: false, access: { has: obj => "addIngressRule" in obj, get: obj => obj.addIngressRule }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
70
|
+
__esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
|
|
71
|
+
BuildFleet = _classThis = _classDescriptor.value;
|
|
72
|
+
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
49
73
|
}
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
74
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-gamelift-alpha.BuildFleet", version: "2.221.0-alpha.0" };
|
|
75
|
+
/** Uniquely identifies this class. */
|
|
76
|
+
static PROPERTY_INJECTION_ID = '@aws-cdk.aws-gamelift-alpha.BuildFleet';
|
|
77
|
+
/**
|
|
78
|
+
* Import an existing fleet from its identifier.
|
|
79
|
+
*/
|
|
80
|
+
static fromBuildFleetId(scope, id, buildFleetId) {
|
|
81
|
+
return this.fromFleetAttributes(scope, id, { fleetId: buildFleetId });
|
|
55
82
|
}
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
}
|
|
83
|
+
/**
|
|
84
|
+
* Import an existing fleet from its ARN.
|
|
85
|
+
*/
|
|
86
|
+
static fromBuildFleetArn(scope, id, buildFleetArn) {
|
|
87
|
+
return this.fromFleetAttributes(scope, id, { fleetArn: buildFleetArn });
|
|
62
88
|
}
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
89
|
+
/**
|
|
90
|
+
* The Identifier of the fleet.
|
|
91
|
+
*/
|
|
92
|
+
fleetId = __runInitializers(this, _instanceExtraInitializers);
|
|
93
|
+
/**
|
|
94
|
+
* The ARN of the fleet.
|
|
95
|
+
*/
|
|
96
|
+
fleetArn;
|
|
97
|
+
/**
|
|
98
|
+
* The build content of the fleet
|
|
99
|
+
*/
|
|
100
|
+
content;
|
|
101
|
+
/**
|
|
102
|
+
* The IAM role GameLift assumes by fleet instances to access AWS ressources.
|
|
103
|
+
*/
|
|
104
|
+
role;
|
|
105
|
+
/**
|
|
106
|
+
* The principal this GameLift fleet is using.
|
|
107
|
+
*/
|
|
108
|
+
grantPrincipal;
|
|
109
|
+
ingressRules = [];
|
|
110
|
+
constructor(scope, id, props) {
|
|
111
|
+
super(scope, id, {
|
|
112
|
+
physicalName: props.fleetName,
|
|
113
|
+
});
|
|
114
|
+
try {
|
|
115
|
+
jsiiDeprecationWarnings._aws_cdk_aws_gamelift_alpha_BuildFleetProps(props);
|
|
66
116
|
}
|
|
117
|
+
catch (error) {
|
|
118
|
+
if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
|
|
119
|
+
Error.captureStackTrace(error, BuildFleet);
|
|
120
|
+
}
|
|
121
|
+
throw error;
|
|
122
|
+
}
|
|
123
|
+
// Enhanced CDK Analytics Telemetry
|
|
124
|
+
(0, metadata_resource_1.addConstructMetadata)(this, props);
|
|
125
|
+
if (!cdk.Token.isUnresolved(props.fleetName)) {
|
|
126
|
+
if (props.fleetName.length > 1024) {
|
|
127
|
+
throw new Error(`Fleet name can not be longer than 1024 characters but has ${props.fleetName.length} characters.`);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
if (props.description && !cdk.Token.isUnresolved(props.description)) {
|
|
131
|
+
if (props.description.length > 1024) {
|
|
132
|
+
throw new Error(`Fleet description can not be longer than 1024 characters but has ${props.description.length} characters.`);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
if (props.minSize && props.minSize < 0) {
|
|
136
|
+
throw new Error(`The minimum number of instances allowed in the Fleet cannot be lower than 0, given ${props.minSize}`);
|
|
137
|
+
}
|
|
138
|
+
if (props.maxSize && props.maxSize < 0) {
|
|
139
|
+
throw new Error(`The maximum number of instances allowed in the Fleet cannot be lower than 0, given ${props.maxSize}`);
|
|
140
|
+
}
|
|
141
|
+
if (props.peerVpc) {
|
|
142
|
+
this.warnVpcPeeringAuthorizations(this);
|
|
143
|
+
}
|
|
144
|
+
// Add all locations
|
|
145
|
+
if (props.locations && props.locations?.length > 100) {
|
|
146
|
+
throw new Error(`No more than 100 locations are allowed per fleet, given ${props.locations.length}`);
|
|
147
|
+
}
|
|
148
|
+
(props.locations || []).forEach(this.addInternalLocation.bind(this));
|
|
149
|
+
// Add all Ingress rules
|
|
150
|
+
if (props.ingressRules && props.ingressRules?.length > 50) {
|
|
151
|
+
throw new Error(`No more than 50 ingress rules are allowed per fleet, given ${props.ingressRules.length}`);
|
|
152
|
+
}
|
|
153
|
+
(props.ingressRules || []).forEach(this.addInternalIngressRule.bind(this));
|
|
154
|
+
this.content = props.content;
|
|
155
|
+
this.role = props.role ?? new iam.Role(this, 'ServiceRole', {
|
|
156
|
+
assumedBy: new iam.CompositePrincipal(new iam.ServicePrincipal('gamelift.amazonaws.com'), new iam.ServicePrincipal('ec2.amazonaws.com')),
|
|
157
|
+
});
|
|
158
|
+
this.grantPrincipal = this.role;
|
|
159
|
+
const resource = new aws_gamelift_1.CfnFleet(this, 'Resource', {
|
|
160
|
+
buildId: this.content.buildId,
|
|
161
|
+
certificateConfiguration: {
|
|
162
|
+
certificateType: props.useCertificate ? 'GENERATED' : 'DISABLED',
|
|
163
|
+
},
|
|
164
|
+
description: props.description,
|
|
165
|
+
desiredEc2Instances: props.desiredCapacity,
|
|
166
|
+
ec2InboundPermissions: cdk.Lazy.any({ produce: () => this.parseIngressRules() }),
|
|
167
|
+
ec2InstanceType: props.instanceType.toString(),
|
|
168
|
+
fleetType: props.useSpot ? 'SPOT' : 'ON_DEMAND',
|
|
169
|
+
instanceRoleArn: this.role.roleArn,
|
|
170
|
+
locations: cdk.Lazy.any({ produce: () => this.parseLocations() }),
|
|
171
|
+
maxSize: props.maxSize ? props.maxSize : 1,
|
|
172
|
+
minSize: props.minSize ? props.minSize : 0,
|
|
173
|
+
name: this.physicalName,
|
|
174
|
+
newGameSessionProtectionPolicy: props.protectNewGameSession ? 'FullProtection' : 'NoProtection',
|
|
175
|
+
peerVpcAwsAccountId: props.peerVpc && props.peerVpc.env.account,
|
|
176
|
+
peerVpcId: props.peerVpc && props.peerVpc.vpcId,
|
|
177
|
+
resourceCreationLimitPolicy: this.parseResourceCreationLimitPolicy(props),
|
|
178
|
+
runtimeConfiguration: this.parseRuntimeConfiguration(props),
|
|
179
|
+
});
|
|
180
|
+
this.fleetId = this.getResourceNameAttribute(resource.ref);
|
|
181
|
+
this.fleetArn = cdk.Stack.of(scope).formatArn({
|
|
182
|
+
service: 'gamelift',
|
|
183
|
+
resource: 'fleet',
|
|
184
|
+
resourceName: this.fleetId,
|
|
185
|
+
arnFormat: cdk.ArnFormat.SLASH_RESOURCE_NAME,
|
|
186
|
+
});
|
|
67
187
|
}
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
if (props.locations && props.locations?.length > 100) {
|
|
79
|
-
throw new Error(`No more than 100 locations are allowed per fleet, given ${props.locations.length}`);
|
|
80
|
-
}
|
|
81
|
-
(props.locations || []).forEach(this.addInternalLocation.bind(this));
|
|
82
|
-
// Add all Ingress rules
|
|
83
|
-
if (props.ingressRules && props.ingressRules?.length > 50) {
|
|
84
|
-
throw new Error(`No more than 50 ingress rules are allowed per fleet, given ${props.ingressRules.length}`);
|
|
85
|
-
}
|
|
86
|
-
(props.ingressRules || []).forEach(this.addInternalIngressRule.bind(this));
|
|
87
|
-
this.content = props.content;
|
|
88
|
-
this.role = props.role ?? new iam.Role(this, 'ServiceRole', {
|
|
89
|
-
assumedBy: new iam.CompositePrincipal(new iam.ServicePrincipal('gamelift.amazonaws.com'), new iam.ServicePrincipal('ec2.amazonaws.com')),
|
|
90
|
-
});
|
|
91
|
-
this.grantPrincipal = this.role;
|
|
92
|
-
const resource = new aws_gamelift_1.CfnFleet(this, 'Resource', {
|
|
93
|
-
buildId: this.content.buildId,
|
|
94
|
-
certificateConfiguration: {
|
|
95
|
-
certificateType: props.useCertificate ? 'GENERATED' : 'DISABLED',
|
|
96
|
-
},
|
|
97
|
-
description: props.description,
|
|
98
|
-
desiredEc2Instances: props.desiredCapacity,
|
|
99
|
-
ec2InboundPermissions: cdk.Lazy.any({ produce: () => this.parseIngressRules() }),
|
|
100
|
-
ec2InstanceType: props.instanceType.toString(),
|
|
101
|
-
fleetType: props.useSpot ? 'SPOT' : 'ON_DEMAND',
|
|
102
|
-
instanceRoleArn: this.role.roleArn,
|
|
103
|
-
locations: cdk.Lazy.any({ produce: () => this.parseLocations() }),
|
|
104
|
-
maxSize: props.maxSize ? props.maxSize : 1,
|
|
105
|
-
minSize: props.minSize ? props.minSize : 0,
|
|
106
|
-
name: this.physicalName,
|
|
107
|
-
newGameSessionProtectionPolicy: props.protectNewGameSession ? 'FullProtection' : 'NoProtection',
|
|
108
|
-
peerVpcAwsAccountId: props.peerVpc && props.peerVpc.env.account,
|
|
109
|
-
peerVpcId: props.peerVpc && props.peerVpc.vpcId,
|
|
110
|
-
resourceCreationLimitPolicy: this.parseResourceCreationLimitPolicy(props),
|
|
111
|
-
runtimeConfiguration: this.parseRuntimeConfiguration(props),
|
|
112
|
-
});
|
|
113
|
-
this.fleetId = this.getResourceNameAttribute(resource.ref);
|
|
114
|
-
this.fleetArn = cdk.Stack.of(scope).formatArn({
|
|
115
|
-
service: 'gamelift',
|
|
116
|
-
resource: 'fleet',
|
|
117
|
-
resourceName: this.fleetId,
|
|
118
|
-
arnFormat: cdk.ArnFormat.SLASH_RESOURCE_NAME,
|
|
119
|
-
});
|
|
120
|
-
}
|
|
121
|
-
/**
|
|
122
|
-
* Adds an ingress rule to allow inbound traffic to access game sessions on this fleet.
|
|
123
|
-
*
|
|
124
|
-
* @param source A range of allowed IP addresses
|
|
125
|
-
* @param port The port range used for ingress traffic
|
|
126
|
-
*/
|
|
127
|
-
addIngressRule(source, port) {
|
|
128
|
-
try {
|
|
129
|
-
jsiiDeprecationWarnings._aws_cdk_aws_gamelift_alpha_IPeer(source);
|
|
130
|
-
jsiiDeprecationWarnings._aws_cdk_aws_gamelift_alpha_Port(port);
|
|
131
|
-
}
|
|
132
|
-
catch (error) {
|
|
133
|
-
if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
|
|
134
|
-
Error.captureStackTrace(error, this.addIngressRule);
|
|
188
|
+
/**
|
|
189
|
+
* Adds an ingress rule to allow inbound traffic to access game sessions on this fleet.
|
|
190
|
+
*
|
|
191
|
+
* @param source A range of allowed IP addresses
|
|
192
|
+
* @param port The port range used for ingress traffic
|
|
193
|
+
*/
|
|
194
|
+
addIngressRule(source, port) {
|
|
195
|
+
try {
|
|
196
|
+
jsiiDeprecationWarnings._aws_cdk_aws_gamelift_alpha_IPeer(source);
|
|
197
|
+
jsiiDeprecationWarnings._aws_cdk_aws_gamelift_alpha_Port(port);
|
|
135
198
|
}
|
|
136
|
-
|
|
199
|
+
catch (error) {
|
|
200
|
+
if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
|
|
201
|
+
Error.captureStackTrace(error, this.addIngressRule);
|
|
202
|
+
}
|
|
203
|
+
throw error;
|
|
204
|
+
}
|
|
205
|
+
this.addInternalIngressRule({
|
|
206
|
+
source: source,
|
|
207
|
+
port: port,
|
|
208
|
+
});
|
|
137
209
|
}
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
addInternalIngressRule(ingressRule) {
|
|
144
|
-
if (this.ingressRules.length == 50) {
|
|
145
|
-
throw new Error('No more than 50 ingress rules are allowed per fleet');
|
|
210
|
+
addInternalIngressRule(ingressRule) {
|
|
211
|
+
if (this.ingressRules.length == 50) {
|
|
212
|
+
throw new Error('No more than 50 ingress rules are allowed per fleet');
|
|
213
|
+
}
|
|
214
|
+
this.ingressRules.push(ingressRule);
|
|
146
215
|
}
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
return
|
|
216
|
+
parseIngressRules() {
|
|
217
|
+
if (!this.ingressRules || this.ingressRules.length === 0) {
|
|
218
|
+
return undefined;
|
|
219
|
+
}
|
|
220
|
+
return this.ingressRules.map(parseIngressRule);
|
|
221
|
+
function parseIngressRule(ingressRule) {
|
|
222
|
+
return {
|
|
223
|
+
...ingressRule.port.toJson(),
|
|
224
|
+
...ingressRule.source.toJson(),
|
|
225
|
+
};
|
|
226
|
+
}
|
|
152
227
|
}
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
return {
|
|
156
|
-
...ingressRule.port.toJson(),
|
|
157
|
-
...ingressRule.source.toJson(),
|
|
158
|
-
};
|
|
228
|
+
static {
|
|
229
|
+
__runInitializers(_classThis, _classExtraInitializers);
|
|
159
230
|
}
|
|
160
|
-
}
|
|
161
|
-
|
|
231
|
+
};
|
|
232
|
+
return BuildFleet = _classThis;
|
|
233
|
+
})();
|
|
162
234
|
exports.BuildFleet = BuildFleet;
|
|
163
|
-
_a = JSII_RTTI_SYMBOL_1;
|
|
164
|
-
BuildFleet[_a] = { fqn: "@aws-cdk/aws-gamelift-alpha.BuildFleet", version: "2.219.0-alpha.0" };
|
|
165
|
-
/** Uniquely identifies this class. */
|
|
166
|
-
BuildFleet.PROPERTY_INJECTION_ID = '@aws-cdk.aws-gamelift-alpha.BuildFleet';
|
|
167
|
-
__decorate([
|
|
168
|
-
(0, metadata_resource_1.MethodMetadata)()
|
|
169
|
-
], BuildFleet.prototype, "addIngressRule", null);
|
|
170
|
-
exports.BuildFleet = BuildFleet = __decorate([
|
|
171
|
-
prop_injectable_1.propertyInjectable
|
|
172
|
-
], BuildFleet);
|
|
173
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGQtZmxlZXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJidWlsZC1mbGVldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQSwyQ0FBMkM7QUFDM0Msd0NBQXdDO0FBR3hDLDZDQUE2RDtBQUM3RCwyREFBb0Q7QUFFcEQsOEVBQThGO0FBQzlGLDBFQUEwRTtBQTZCMUU7Ozs7Ozs7OztHQVNHO0FBRUksSUFBTSxVQUFVLEdBQWhCLE1BQU0sVUFBVyxTQUFRLHNCQUFTO0lBSXZDOztPQUVHO0lBQ0gsTUFBTSxDQUFDLGdCQUFnQixDQUFDLEtBQWdCLEVBQUUsRUFBVSxFQUFFLFlBQW9CO1FBQ3hFLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQztLQUN2RTtJQUVEOztPQUVHO0lBQ0gsTUFBTSxDQUFDLGlCQUFpQixDQUFDLEtBQWdCLEVBQUUsRUFBVSxFQUFFLGFBQXFCO1FBQzFFLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLENBQUMsQ0FBQztLQUN6RTtJQTZCRCxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQXNCO1FBQzlELEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFO1lBQ2YsWUFBWSxFQUFFLEtBQUssQ0FBQyxTQUFTO1NBQzlCLENBQUMsQ0FBQztRQUxZLGlCQUFZLEdBQWtCLEVBQUUsQ0FBQzs7Ozs7OytDQTNDdkMsVUFBVTs7OztRQWlEbkIsbUNBQW1DO1FBQ25DLElBQUEsd0NBQW9CLEVBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRWxDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztZQUM3QyxJQUFJLEtBQUssQ0FB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LGdCQUFnQixDQUFDLFdBQXdCO1lBQ2hELE9BQU87Z0JBQ0wsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtnQkFDNUIsR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRTthQUMvQixDQUFDO1FBQ0osQ0FBQztLQUNGOztBQWpLVSxnQ0FBVTs7O0FBQ3JCLHNDQUFzQztBQUNmLGdDQUFxQixHQUFXLHdDQUF3QyxBQUFuRCxDQUFvRDtBQW9JekY7SUFETixJQUFBLGtDQUFjLEdBQUU7Z0RBTWhCO3FCQTNJVSxVQUFVO0lBRHRCLG9DQUFrQjtHQUNOLFVBQVUsQ0FrS3RCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgaWFtIGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nO1xuaW1wb3J0ICogYXMgY2RrIGZyb20gJ2F3cy1jZGstbGliL2NvcmUnO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBJQnVpbGQgfSBmcm9tICcuL2J1aWxkJztcbmltcG9ydCB7IEZsZWV0QmFzZSwgRmxlZXRQcm9wcywgSUZsZWV0IH0gZnJvbSAnLi9mbGVldC1iYXNlJztcbmltcG9ydCB7IENmbkZsZWV0IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWdhbWVsaWZ0JztcbmltcG9ydCB7IFBvcnQsIElQZWVyLCBJbmdyZXNzUnVsZSB9IGZyb20gJy4vaW5ncmVzcy1ydWxlJztcbmltcG9ydCB7IGFkZENvbnN0cnVjdE1ldGFkYXRhLCBNZXRob2RNZXRhZGF0YSB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL21ldGFkYXRhLXJlc291cmNlJztcbmltcG9ydCB7IHByb3BlcnR5SW5qZWN0YWJsZSB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL3Byb3AtaW5qZWN0YWJsZSc7XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIEdhbWVMaWZ0IEZsZWV0IHVzZWQgdG8gcnVuIGEgY3VzdG9tIGdhbWUgYnVpbGQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUJ1aWxkRmxlZXQgZXh0ZW5kcyBJRmxlZXQge31cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBhIG5ldyBHYW1lbGlmdCBidWlsZCBmbGVldFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1aWxkRmxlZXRQcm9wcyBleHRlbmRzIEZsZWV0UHJvcHMge1xuICAvKipcbiAgICogQSBidWlsZCB0byBiZSBkZXBsb3llZCBvbiB0aGUgZmxlZXQuXG4gICAqIFRoZSBidWlsZCBtdXN0IGhhdmUgYmVlbiBzdWNjZXNzZnVsbHkgdXBsb2FkZWQgdG8gQW1hem9uIEdhbWVMaWZ0IGFuZCBiZSBpbiBhIGBSRUFEWWAgc3RhdHVzLlxuICAgKlxuICAgKiBUaGlzIGZsZWV0IHNldHRpbmcgY2Fubm90IGJlIGNoYW5nZWQgb25jZSB0aGUgZmxlZXQgaXMgY3JlYXRlZC5cbiAgICovXG4gIHJlYWRvbmx5IGNvbnRlbnQ6IElCdWlsZDtcblxuICAvKipcbiAgICogVGhlIGFsbG93ZWQgSVAgYWRkcmVzcyByYW5nZXMgYW5kIHBvcnQgc2V0dGluZ3MgdGhhdCBhbGxvdyBpbmJvdW5kIHRyYWZmaWMgdG8gYWNjZXNzIGdhbWUgc2Vzc2lvbnMgb24gdGhpcyBmbGVldC5cbiAgICpcbiAgICogVGhpcyBwcm9wZXJ0eSBtdXN0IGJlIHNldCBiZWZvcmUgcGxheWVycyBjYW4gY29ubmVjdCB0byBnYW1lIHNlc3Npb25zLlxuICAgKlxuICAgKiBAZGVmYXVsdCBubyBpbmJvdW5kIHRyYWZmaWMgYWxsb3dlZFxuICAgKi9cbiAgcmVhZG9ubHkgaW5ncmVzc1J1bGVzPzogSW5ncmVzc1J1bGVbXTtcbn1cblxuLyoqXG4gKiBBIGZsZWV0IGNvbnRhaW5zIEFtYXpvbiBFbGFzdGljIENvbXB1dGUgQ2xvdWQgKEFtYXpvbiBFQzIpIGluc3RhbmNlcyB0aGF0IEdhbWVMaWZ0IGhvc3RzLlxuICogQSBmbGVldCB1c2VzIHRoZSBjb25maWd1cmF0aW9uIGFuZCBzY2FsaW5nIGxvZ2ljIHRoYXQgeW91IGRlZmluZSB0byBydW4geW91ciBnYW1lIHNlcnZlciBidWlsZC4gWW91IGNhbiB1c2UgYSBmbGVldCBkaXJlY3RseSB3aXRob3V0IGEgcXVldWUuXG4gKiBZb3UgY2FuIGFsc28gYXNzb2NpYXRlIG11bHRpcGxlIGZsZWV0cyB3aXRoIGEgR2FtZUxpZnQgcXVldWUuXG4gKlxuICogRm9yIGV4YW1wbGUsIHlvdSBjYW4gdXNlIFNwb3QgSW5zdGFuY2UgZmxlZXRzIGNvbmZpZ3VyZWQgd2l0aCB5b3VyIHByZWZlcnJlZCBsb2NhdGlvbnMsIGFsb25nIHdpdGggYSBiYWNrdXAgT24tRGVtYW5kIEluc3RhbmNlIGZsZWV0IHdpdGggdGhlIHNhbWUgbG9jYXRpb25zLlxuICogVXNpbmcgbXVsdGlwbGUgU3BvdCBJbnN0YW5jZSBmbGVldHMgb2YgZGlmZmVyZW50IGluc3RhbmNlIHR5cGVzIHJlZHVjZXMgdGhlIGNoYW5jZSBvZiBuZWVkaW5nIE9uLURlbWFuZCBJbnN0YW5jZSBwbGFjZW1lbnQuXG4gKlxuICogQHJlc291cmNlIEFXUzo6R2FtZUxpZnQ6OkZsZWV0XG4gKi9cbkBwcm9wZXJ0eUluamVjdGFibGVcbmV4cG9ydCBjbGFzcyBCdWlsZEZsZWV0IGV4dGVuZHMgRmxlZXRCYXNlIGltcGxlbWVudHMgSUJ1aWxkRmxlZXQge1xuICAvKiogVW5pcXVlbHkgaWRlbnRpZmllcyB0aGlzIGNsYXNzLiAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFBST1BFUlRZX0lOSkVDVElPTl9JRDogc3RyaW5nID0gJ0Bhd3MtY2RrLmF3cy1nYW1lbGlmdC1hbHBoYS5CdWlsZEZsZWV0JztcblxuICAvKipcbiAgICogSW1wb3J0IGFuIGV4aXN0aW5nIGZsZWV0IGZyb20gaXRzIGlkZW50aWZpZXIuXG4gICAqL1xuICBzdGF0aWMgZnJvbUJ1aWxkRmxlZXRJZChzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBidWlsZEZsZWV0SWQ6IHN0cmluZyk6IElCdWlsZEZsZWV0IHtcbiAgICByZXR1cm4gdGhpcy5mcm9tRmxlZXRBdHRyaWJ1dGVzKHNjb3BlLCBpZCwgeyBmbGVldElkOiBidWlsZEZsZWV0SWQgfSk7XG4gIH1cblxuICAvKipcbiAgICogSW1wb3J0IGFuIGV4aXN0aW5nIGZsZWV0IGZyb20gaXRzIEFSTi5cbiAgICovXG4gIHN0YXRpYyBmcm9tQnVpbGRGbGVldEFybihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBidWlsZEZsZWV0QXJuOiBzdHJpbmcpOiBJQnVpbGRGbGVldCB7XG4gICAgcmV0dXJuIHRoaXMuZnJvbUZsZWV0QXR0cmlidXRlcyhzY29wZSwgaWQsIHsgZmxlZXRBcm46IGJ1aWxkRmxlZXRBcm4gfSk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIElkZW50aWZpZXIgb2YgdGhlIGZsZWV0LlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGZsZWV0SWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIEFSTiBvZiB0aGUgZmxlZXQuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZmxlZXRBcm46IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGJ1aWxkIGNvbnRlbnQgb2YgdGhlIGZsZWV0XG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgY29udGVudDogSUJ1aWxkO1xuXG4gIC8qKlxuICAgKiBUaGUgSUFNIHJvbGUgR2FtZUxpZnQgYXNzdW1lcyBieSBmbGVldCBpbnN0YW5jZXMgdG8gYWNjZXNzIEFXUyByZXNzb3VyY2VzLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHJvbGU6IGlhbS5JUm9sZTtcblxuICAvKipcbiAgICogVGhlIHByaW5jaXBhbCB0aGlzIEdhbWVMaWZ0IGZsZWV0IGlzIHVzaW5nLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGdyYW50UHJpbmNpcGFsOiBpYW0uSVByaW5jaXBhbDtcblxuICBwcml2YXRlIHJlYWRvbmx5IGluZ3Jlc3NSdWxlczogSW5ncmVzc1J1bGVbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBCdWlsZEZsZWV0UHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHtcbiAgICAgIHBoeXNpY2FsTmFtZTogcHJvcHMuZmxlZXROYW1lLFxuICAgIH0pO1xuICAgIC8vIEVuaGFuY2VkIENESyBBbmFseXRpY3MgVGVsZW1ldHJ5XG4gICAgYWRkQ29uc3RydWN0TWV0YWRhdGEodGhpcywgcHJvcHMpO1xuXG4gICAgaWYgKCFjZGsuVG9rZW4uaXNVbnJlc29sdmVkKHByb3BzLmZsZWV0TmFtZSkpIHtcbiAgICAgIGlmIChwcm9wcy5mbGVldE5hbWUubGVuZ3RoID4gMTAyNCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEZsZWV0IG5hbWUgY2FuIG5vdCBiZSBsb25nZXIgdGhhbiAxMDI0IGNoYXJhY3RlcnMgYnV0IGhhcyAke3Byb3BzLmZsZWV0TmFtZS5sZW5ndGh9IGNoYXJhY3RlcnMuYCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHByb3BzLmRlc2NyaXB0aW9uICYmICFjZGsuVG9rZW4uaXNVbnJlc29sdmVkKHByb3BzLmRlc2NyaXB0aW9uKSkge1xuICAgICAgaWYgKHByb3BzLmRlc2NyaXB0aW9uLmxlbmd0aCA+IDEwMjQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGbGVldCBkZXNjcmlwdGlvbiBjYW4gbm90IGJlIGxvbmdlciB0aGFuIDEwMjQgY2hhcmFjdGVycyBidXQgaGFzICR7cHJvcHMuZGVzY3JpcHRpb24ubGVuZ3RofSBjaGFyYWN0ZXJzLmApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChwcm9wcy5taW5TaXplICYmIHByb3BzLm1pblNpemUgPCAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBtaW5pbXVtIG51bWJlciBvZiBpbnN0YW5jZXMgYWxsb3dlZCBpbiB0aGUgRmxlZXQgY2Fubm90IGJlIGxvd2VyIHRoYW4gMCwgZ2l2ZW4gJHtwcm9wcy5taW5TaXplfWApO1xuICAgIH1cblxuICAgIGlmIChwcm9wcy5tYXhTaXplICYmIHByb3BzLm1heFNpemUgPCAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBtYXhpbXVtIG51bWJlciBvZiBpbnN0YW5jZXMgYWxsb3dlZCBpbiB0aGUgRmxlZXQgY2Fubm90IGJlIGxvd2VyIHRoYW4gMCwgZ2l2ZW4gJHtwcm9wcy5tYXhTaXplfWApO1xuICAgIH1cblxuICAgIGlmIChwcm9wcy5wZWVyVnBjKSB7XG4gICAgICB0aGlzLndhcm5WcGNQZWVyaW5nQXV0aG9yaXphdGlvbnModGhpcyk7XG4gICAgfVxuXG4gICAgLy8gQWRkIGFsbCBsb2NhdGlvbnNcbiAgICBpZiAocHJvcHMubG9jYXRpb25zICYmIHByb3BzLmxvY2F0aW9ucz8ubGVuZ3RoID4gMTAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIG1vcmUgdGhhbiAxMDAgbG9jYXRpb25zIGFyZSBhbGxvd2VkIHBlciBmbGVldCwgZ2l2ZW4gJHtwcm9wcy5sb2NhdGlvbnMubGVuZ3RofWApO1xuICAgIH1cbiAgICAocHJvcHMubG9jYXRpb25zIHx8IFtdKS5mb3JFYWNoKHRoaXMuYWRkSW50ZXJuYWxMb2NhdGlvbi5iaW5kKHRoaXMpKTtcblxuICAgIC8vIEFkZCBhbGwgSW5ncmVzcyBydWxlc1xuICAgIGlmIChwcm9wcy5pbmdyZXNzUnVsZXMgJiYgcHJvcHMuaW5ncmVzc1J1bGVzPy5sZW5ndGggPiA1MCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBtb3JlIHRoYW4gNTAgaW5ncmVzcyBydWxlcyBhcmUgYWxsb3dlZCBwZXIgZmxlZXQsIGdpdmVuICR7cHJvcHMuaW5ncmVzc1J1bGVzLmxlbmd0aH1gKTtcbiAgICB9XG4gICAgKHByb3BzLmluZ3Jlc3NSdWxlcyB8fCBbXSkuZm9yRWFjaCh0aGlzLmFkZEludGVybmFsSW5ncmVzc1J1bGUuYmluZCh0aGlzKSk7XG5cbiAgICB0aGlzLmNvbnRlbnQgPSBwcm9wcy5jb250ZW50O1xuICAgIHRoaXMucm9sZSA9IHByb3BzLnJvbGUgPz8gbmV3IGlhbS5Sb2xlKHRoaXMsICdTZXJ2aWNlUm9sZScsIHtcbiAgICAgIGFzc3VtZWRCeTogbmV3IGlhbS5Db21wb3NpdGVQcmluY2lwYWwoXG4gICAgICAgIG5ldyBpYW0uU2VydmljZVByaW5jaXBhbCgnZ2FtZWxpZnQuYW1hem9uYXdzLmNvbScpLFxuICAgICAgICBuZXcgaWFtLlNlcnZpY2VQcmluY2lwYWwoJ2VjMi5hbWF6b25hd3MuY29tJykpLFxuICAgIH0pO1xuICAgIHRoaXMuZ3JhbnRQcmluY2lwYWwgPSB0aGlzLnJvbGU7XG5cbiAgICBjb25zdCByZXNvdXJjZSA9IG5ldyBDZm5GbGVldCh0aGlzLCAnUmVzb3VyY2UnLCB7XG4gICAgICBidWlsZElkOiB0aGlzLmNvbnRlbnQuYnVpbGRJZCxcbiAgICAgIGNlcnRpZmljYXRlQ29uZmlndXJhdGlvbjoge1xuICAgICAgICBjZXJ0aWZpY2F0ZVR5cGU6IHByb3BzLnVzZUNlcnRpZmljYXRlID8gJ0dFTkVSQVRFRCc6ICdESVNBQkxFRCcsXG4gICAgICB9LFxuICAgICAgZGVzY3JpcHRpb246IHByb3BzLmRlc2NyaXB0aW9uLFxuICAgICAgZGVzaXJlZEVjMkluc3RhbmNlczogcHJvcHMuZGVzaXJlZENhcGFjaXR5LFxuICAgICAgZWMySW5ib3VuZFBlcm1pc3Npb25zOiBjZGsuTGF6eS5hbnkoeyBwcm9kdWNlOiAoKSA9PiB0aGlzLnBhcnNlSW5ncmVzc1J1bGVzKCkgfSksXG4gICAgICBlYzJJbnN0YW5jZVR5cGU6IHByb3BzLmluc3RhbmNlVHlwZS50b1N0cmluZygpLFxuICAgICAgZmxlZXRUeXBlOiBwcm9wcy51c2VTcG90ID8gJ1NQT1QnIDogJ09OX0RFTUFORCcsXG4gICAgICBpbnN0YW5jZVJvbGVBcm46IHRoaXMucm9sZS5yb2xlQXJuLFxuICAgICAgbG9jYXRpb25zOiBjZGsuTGF6eS5hbnkoeyBwcm9kdWNlOiAoKSA9PiB0aGlzLnBhcnNlTG9jYXRpb25zKCkgfSksXG4gICAgICBtYXhTaXplOiBwcm9wcy5tYXhTaXplID8gcHJvcHMubWF4U2l6ZSA6IDEsXG4gICAgICBtaW5TaXplOiBwcm9wcy5taW5TaXplID8gcHJvcHMubWluU2l6ZSA6IDAsXG4gICAgICBuYW1lOiB0aGlzLnBoeXNpY2FsTmFtZSxcbiAgICAgIG5ld0dhbWVTZXNzaW9uUHJvdGVjdGlvblBvbGljeTogcHJvcHMucHJvdGVjdE5ld0dhbWVTZXNzaW9uID8gJ0Z1bGxQcm90ZWN0aW9uJyA6ICdOb1Byb3RlY3Rpb24nLFxuICAgICAgcGVlclZwY0F3c0FjY291bnRJZDogcHJvcHMucGVlclZwYyAmJiBwcm9wcy5wZWVyVnBjLmVudi5hY2NvdW50LFxuICAgICAgcGVlclZwY0lkOiBwcm9wcy5wZWVyVnBjICYmIHByb3BzLnBlZXJWcGMudnBjSWQsXG4gICAgICByZXNvdXJjZUNyZWF0aW9uTGltaXRQb2xpY3k6IHRoaXMucGFyc2VSZXNvdXJjZUNyZWF0aW9uTGltaXRQb2xpY3kocHJvcHMpLFxuICAgICAgcnVudGltZUNvbmZpZ3VyYXRpb246IHRoaXMucGFyc2VSdW50aW1lQ29uZmlndXJhdGlvbihwcm9wcyksXG4gICAgfSk7XG5cbiAgICB0aGlzLmZsZWV0SWQgPSB0aGlzLmdldFJlc291cmNlTmFtZUF0dHJpYnV0ZShyZXNvdXJjZS5yZWYpO1xuICAgIHRoaXMuZmxlZXRBcm4gPSBjZGsuU3RhY2sub2Yoc2NvcGUpLmZvcm1hdEFybih7XG4gICAgICBzZXJ2aWNlOiAnZ2FtZWxpZnQnLFxuICAgICAgcmVzb3VyY2U6ICdmbGVldCcsXG4gICAgICByZXNvdXJjZU5hbWU6IHRoaXMuZmxlZXRJZCxcbiAgICAgIGFybkZvcm1hdDogY2RrLkFybkZvcm1hdC5TTEFTSF9SRVNPVVJDRV9OQU1FLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYW4gaW5ncmVzcyBydWxlIHRvIGFsbG93IGluYm91bmQgdHJhZmZpYyB0byBhY2Nlc3MgZ2FtZSBzZXNzaW9ucyBvbiB0aGlzIGZsZWV0LlxuICAgKlxuICAgKiBAcGFyYW0gc291cmNlIEEgcmFuZ2Ugb2YgYWxsb3dlZCBJUCBhZGRyZXNzZXNcbiAgICogQHBhcmFtIHBvcnQgVGhlIHBvcnQgcmFuZ2UgdXNlZCBmb3IgaW5ncmVzcyB0cmFmZmljXG4gICAqL1xuICBATWV0aG9kTWV0YWRhdGEoKVxuICBwdWJsaWMgYWRkSW5ncmVzc1J1bGUoc291cmNlOiBJUGVlciwgcG9ydDogUG9ydCkge1xuICAgIHRoaXMuYWRkSW50ZXJuYWxJbmdyZXNzUnVsZSh7XG4gICAgICBzb3VyY2U6IHNvdXJjZSxcbiAgICAgIHBvcnQ6IHBvcnQsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFkZEludGVybmFsSW5ncmVzc1J1bGUoaW5ncmVzc1J1bGU6IEluZ3Jlc3NSdWxlKSB7XG4gICAgaWYgKHRoaXMuaW5ncmVzc1J1bGVzLmxlbmd0aCA9PSA1MCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBtb3JlIHRoYW4gNTAgaW5ncmVzcyBydWxlcyBhcmUgYWxsb3dlZCBwZXIgZmxlZXQnKTtcbiAgICB9XG4gICAgdGhpcy5pbmdyZXNzUnVsZXMucHVzaChpbmdyZXNzUnVsZSk7XG4gIH1cblxuICBwcml2YXRlIHBhcnNlSW5ncmVzc1J1bGVzKCk6IENmbkZsZWV0LklwUGVybWlzc2lvblByb3BlcnR5W10gfCB1bmRlZmluZWQge1xuICAgIGlmICghdGhpcy5pbmdyZXNzUnVsZXMgfHwgdGhpcy5pbmdyZXNzUnVsZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmluZ3Jlc3NSdWxlcy5tYXAocGFyc2VJbmdyZXNzUnVsZSk7XG5cbiAgICBmdW5jdGlvbiBwYXJzZUluZ3Jlc3NSdWxlKGluZ3Jlc3NSdWxlOiBJbmdyZXNzUnVsZSk6IENmbkZsZWV0LklwUGVybWlzc2lvblByb3BlcnR5IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmluZ3Jlc3NSdWxlLnBvcnQudG9Kc29uKCksXG4gICAgICAgIC4uLmluZ3Jlc3NSdWxlLnNvdXJjZS50b0pzb24oKSxcbiAgICAgIH07XG4gICAgfVxuICB9XG59XG4iXX0=
|
|
235
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGQtZmxlZXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJidWlsZC1mbGVldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwyQ0FBMkM7QUFDM0Msd0NBQXdDO0FBR3hDLDZDQUE2RDtBQUM3RCwyREFBb0Q7QUFFcEQsOEVBQThGO0FBQzlGLDBFQUEwRTtBQTZCMUU7Ozs7Ozs7OztHQVNHO0lBRVUsVUFBVTs0QkFEdEIsb0NBQWtCOzs7O3NCQUNhLHNCQUFTOzs7MEJBQWpCLFNBQVEsV0FBUzs7OzswQ0FxSXRDLElBQUEsa0NBQWMsR0FBRTtZQUNqQiw2TEFBTyxjQUFjLDZEQUtwQjtZQTNJSCw2S0FrS0M7Ozs7O1FBaktDLHNDQUFzQztRQUMvQixNQUFNLENBQVUscUJBQXFCLEdBQVcsd0NBQXdDLENBQUM7UUFFaEc7O1dBRUc7UUFDSCxNQUFNLENBQUMsZ0JBQWdCLENBQUMsS0FBZ0IsRUFBRSxFQUFVLEVBQUUsWUFBb0I7WUFDeEUsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDO1NBQ3ZFO1FBRUQ7O1dBRUc7UUFDSCxNQUFNLENBQUMsaUJBQWlCLENBQUMsS0FBZ0IsRUFBRSxFQUFVLEVBQUUsYUFBcUI7WUFDMUUsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsQ0FBQyxDQUFDO1NBQ3pFO1FBRUQ7O1dBRUc7UUFDYSxPQUFPLEdBckJaLG1EQUFVLENBcUJXO1FBRWhDOztXQUVHO1FBQ2EsUUFBUSxDQUFTO1FBRWpDOztXQUVHO1FBQ2EsT0FBTyxDQUFTO1FBRWhDOztXQUVHO1FBQ2EsSUFBSSxDQUFZO1FBRWhDOztXQUVHO1FBQ2EsY0FBYyxDQUFpQjtRQUU5QixZQUFZLEdB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QUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sSUFBSSxFQUFFLEVBQUUsQ0FBQztnQkFDbkMsTUFBTSxJQUFJLEtBQUssQ0FBQyxxREFBcUQsQ0FBQyxDQUFDO1lBQ3pFLENBQUM7WUFDRCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztTQUNyQztRQUVPLGlCQUFpQjtZQUN2QixJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDekQsT0FBTyxTQUFTLENBQUM7WUFDbkIsQ0FBQztZQUVELE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztZQUUvQyxTQUFTLGdCQUFnQixDQUFDLFdBQXdCO2dCQUNoRCxPQUFPO29CQUNMLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7b0JBQzVCLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUU7aUJBQy9CLENBQUM7WUFDSixDQUFDO1NBQ0Y7O1lBaktVLHVEQUFVOzs7OztBQUFWLGdDQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgaWFtIGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nO1xuaW1wb3J0ICogYXMgY2RrIGZyb20gJ2F3cy1jZGstbGliL2NvcmUnO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBJQnVpbGQgfSBmcm9tICcuL2J1aWxkJztcbmltcG9ydCB7IEZsZWV0QmFzZSwgRmxlZXRQcm9wcywgSUZsZWV0IH0gZnJvbSAnLi9mbGVldC1iYXNlJztcbmltcG9ydCB7IENmbkZsZWV0IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWdhbWVsaWZ0JztcbmltcG9ydCB7IFBvcnQsIElQZWVyLCBJbmdyZXNzUnVsZSB9IGZyb20gJy4vaW5ncmVzcy1ydWxlJztcbmltcG9ydCB7IGFkZENvbnN0cnVjdE1ldGFkYXRhLCBNZXRob2RNZXRhZGF0YSB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL21ldGFkYXRhLXJlc291cmNlJztcbmltcG9ydCB7IHByb3BlcnR5SW5qZWN0YWJsZSB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL3Byb3AtaW5qZWN0YWJsZSc7XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIEdhbWVMaWZ0IEZsZWV0IHVzZWQgdG8gcnVuIGEgY3VzdG9tIGdhbWUgYnVpbGQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUJ1aWxkRmxlZXQgZXh0ZW5kcyBJRmxlZXQge31cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBhIG5ldyBHYW1lbGlmdCBidWlsZCBmbGVldFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1aWxkRmxlZXRQcm9wcyBleHRlbmRzIEZsZWV0UHJvcHMge1xuICAvKipcbiAgICogQSBidWlsZCB0byBiZSBkZXBsb3llZCBvbiB0aGUgZmxlZXQuXG4gICAqIFRoZSBidWlsZCBtdXN0IGhhdmUgYmVlbiBzdWNjZXNzZnVsbHkgdXBsb2FkZWQgdG8gQW1hem9uIEdhbWVMaWZ0IGFuZCBiZSBpbiBhIGBSRUFEWWAgc3RhdHVzLlxuICAgKlxuICAgKiBUaGlzIGZsZWV0IHNldHRpbmcgY2Fubm90IGJlIGNoYW5nZWQgb25jZSB0aGUgZmxlZXQgaXMgY3JlYXRlZC5cbiAgICovXG4gIHJlYWRvbmx5IGNvbnRlbnQ6IElCdWlsZDtcblxuICAvKipcbiAgICogVGhlIGFsbG93ZWQgSVAgYWRkcmVzcyByYW5nZXMgYW5kIHBvcnQgc2V0dGluZ3MgdGhhdCBhbGxvdyBpbmJvdW5kIHRyYWZmaWMgdG8gYWNjZXNzIGdhbWUgc2Vzc2lvbnMgb24gdGhpcyBmbGVldC5cbiAgICpcbiAgICogVGhpcyBwcm9wZXJ0eSBtdXN0IGJlIHNldCBiZWZvcmUgcGxheWVycyBjYW4gY29ubmVjdCB0byBnYW1lIHNlc3Npb25zLlxuICAgKlxuICAgKiBAZGVmYXVsdCBubyBpbmJvdW5kIHRyYWZmaWMgYWxsb3dlZFxuICAgKi9cbiAgcmVhZG9ubHkgaW5ncmVzc1J1bGVzPzogSW5ncmVzc1J1bGVbXTtcbn1cblxuLyoqXG4gKiBBIGZsZWV0IGNvbnRhaW5zIEFtYXpvbiBFbGFzdGljIENvbXB1dGUgQ2xvdWQgKEFtYXpvbiBFQzIpIGluc3RhbmNlcyB0aGF0IEdhbWVMaWZ0IGhvc3RzLlxuICogQSBmbGVldCB1c2VzIHRoZSBjb25maWd1cmF0aW9uIGFuZCBzY2FsaW5nIGxvZ2ljIHRoYXQgeW91IGRlZmluZSB0byBydW4geW91ciBnYW1lIHNlcnZlciBidWlsZC4gWW91IGNhbiB1c2UgYSBmbGVldCBkaXJlY3RseSB3aXRob3V0IGEgcXVldWUuXG4gKiBZb3UgY2FuIGFsc28gYXNzb2NpYXRlIG11bHRpcGxlIGZsZWV0cyB3aXRoIGEgR2FtZUxpZnQgcXVldWUuXG4gKlxuICogRm9yIGV4YW1wbGUsIHlvdSBjYW4gdXNlIFNwb3QgSW5zdGFuY2UgZmxlZXRzIGNvbmZpZ3VyZWQgd2l0aCB5b3VyIHByZWZlcnJlZCBsb2NhdGlvbnMsIGFsb25nIHdpdGggYSBiYWNrdXAgT24tRGVtYW5kIEluc3RhbmNlIGZsZWV0IHdpdGggdGhlIHNhbWUgbG9jYXRpb25zLlxuICogVXNpbmcgbXVsdGlwbGUgU3BvdCBJbnN0YW5jZSBmbGVldHMgb2YgZGlmZmVyZW50IGluc3RhbmNlIHR5cGVzIHJlZHVjZXMgdGhlIGNoYW5jZSBvZiBuZWVkaW5nIE9uLURlbWFuZCBJbnN0YW5jZSBwbGFjZW1lbnQuXG4gKlxuICogQHJlc291cmNlIEFXUzo6R2FtZUxpZnQ6OkZsZWV0XG4gKi9cbkBwcm9wZXJ0eUluamVjdGFibGVcbmV4cG9ydCBjbGFzcyBCdWlsZEZsZWV0IGV4dGVuZHMgRmxlZXRCYXNlIGltcGxlbWVudHMgSUJ1aWxkRmxlZXQge1xuICAvKiogVW5pcXVlbHkgaWRlbnRpZmllcyB0aGlzIGNsYXNzLiAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFBST1BFUlRZX0lOSkVDVElPTl9JRDogc3RyaW5nID0gJ0Bhd3MtY2RrLmF3cy1nYW1lbGlmdC1hbHBoYS5CdWlsZEZsZWV0JztcblxuICAvKipcbiAgICogSW1wb3J0IGFuIGV4aXN0aW5nIGZsZWV0IGZyb20gaXRzIGlkZW50aWZpZXIuXG4gICAqL1xuICBzdGF0aWMgZnJvbUJ1aWxkRmxlZXRJZChzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBidWlsZEZsZWV0SWQ6IHN0cmluZyk6IElCdWlsZEZsZWV0IHtcbiAgICByZXR1cm4gdGhpcy5mcm9tRmxlZXRBdHRyaWJ1dGVzKHNjb3BlLCBpZCwgeyBmbGVldElkOiBidWlsZEZsZWV0SWQgfSk7XG4gIH1cblxuICAvKipcbiAgICogSW1wb3J0IGFuIGV4aXN0aW5nIGZsZWV0IGZyb20gaXRzIEFSTi5cbiAgICovXG4gIHN0YXRpYyBmcm9tQnVpbGRGbGVldEFybihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBidWlsZEZsZWV0QXJuOiBzdHJpbmcpOiBJQnVpbGRGbGVldCB7XG4gICAgcmV0dXJuIHRoaXMuZnJvbUZsZWV0QXR0cmlidXRlcyhzY29wZSwgaWQsIHsgZmxlZXRBcm46IGJ1aWxkRmxlZXRBcm4gfSk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIElkZW50aWZpZXIgb2YgdGhlIGZsZWV0LlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGZsZWV0SWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIEFSTiBvZiB0aGUgZmxlZXQuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZmxlZXRBcm46IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGJ1aWxkIGNvbnRlbnQgb2YgdGhlIGZsZWV0XG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgY29udGVudDogSUJ1aWxkO1xuXG4gIC8qKlxuICAgKiBUaGUgSUFNIHJvbGUgR2FtZUxpZnQgYXNzdW1lcyBieSBmbGVldCBpbnN0YW5jZXMgdG8gYWNjZXNzIEFXUyByZXNzb3VyY2VzLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHJvbGU6IGlhbS5JUm9sZTtcblxuICAvKipcbiAgICogVGhlIHByaW5jaXBhbCB0aGlzIEdhbWVMaWZ0IGZsZWV0IGlzIHVzaW5nLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGdyYW50UHJpbmNpcGFsOiBpYW0uSVByaW5jaXBhbDtcblxuICBwcml2YXRlIHJlYWRvbmx5IGluZ3Jlc3NSdWxlczogSW5ncmVzc1J1bGVbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBCdWlsZEZsZWV0UHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHtcbiAgICAgIHBoeXNpY2FsTmFtZTogcHJvcHMuZmxlZXROYW1lLFxuICAgIH0pO1xuICAgIC8vIEVuaGFuY2VkIENESyBBbmFseXRpY3MgVGVsZW1ldHJ5XG4gICAgYWRkQ29uc3RydWN0TWV0YWRhdGEodGhpcywgcHJvcHMpO1xuXG4gICAgaWYgKCFjZGsuVG9rZW4uaXNVbnJlc29sdmVkKHByb3BzLmZsZWV0TmFtZSkpIHtcbiAgICAgIGlmIChwcm9wcy5mbGVldE5hbWUubGVuZ3RoID4gMTAyNCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEZsZWV0IG5hbWUgY2FuIG5vdCBiZSBsb25nZXIgdGhhbiAxMDI0IGNoYXJhY3RlcnMgYnV0IGhhcyAke3Byb3BzLmZsZWV0TmFtZS5sZW5ndGh9IGNoYXJhY3RlcnMuYCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHByb3BzLmRlc2NyaXB0aW9uICYmICFjZGsuVG9rZW4uaXNVbnJlc29sdmVkKHByb3BzLmRlc2NyaXB0aW9uKSkge1xuICAgICAgaWYgKHByb3BzLmRlc2NyaXB0aW9uLmxlbmd0aCA+IDEwMjQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGbGVldCBkZXNjcmlwdGlvbiBjYW4gbm90IGJlIGxvbmdlciB0aGFuIDEwMjQgY2hhcmFjdGVycyBidXQgaGFzICR7cHJvcHMuZGVzY3JpcHRpb24ubGVuZ3RofSBjaGFyYWN0ZXJzLmApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChwcm9wcy5taW5TaXplICYmIHByb3BzLm1pblNpemUgPCAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBtaW5pbXVtIG51bWJlciBvZiBpbnN0YW5jZXMgYWxsb3dlZCBpbiB0aGUgRmxlZXQgY2Fubm90IGJlIGxvd2VyIHRoYW4gMCwgZ2l2ZW4gJHtwcm9wcy5taW5TaXplfWApO1xuICAgIH1cblxuICAgIGlmIChwcm9wcy5tYXhTaXplICYmIHByb3BzLm1heFNpemUgPCAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBtYXhpbXVtIG51bWJlciBvZiBpbnN0YW5jZXMgYWxsb3dlZCBpbiB0aGUgRmxlZXQgY2Fubm90IGJlIGxvd2VyIHRoYW4gMCwgZ2l2ZW4gJHtwcm9wcy5tYXhTaXplfWApO1xuICAgIH1cblxuICAgIGlmIChwcm9wcy5wZWVyVnBjKSB7XG4gICAgICB0aGlzLndhcm5WcGNQZWVyaW5nQXV0aG9yaXphdGlvbnModGhpcyk7XG4gICAgfVxuXG4gICAgLy8gQWRkIGFsbCBsb2NhdGlvbnNcbiAgICBpZiAocHJvcHMubG9jYXRpb25zICYmIHByb3BzLmxvY2F0aW9ucz8ubGVuZ3RoID4gMTAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIG1vcmUgdGhhbiAxMDAgbG9jYXRpb25zIGFyZSBhbGxvd2VkIHBlciBmbGVldCwgZ2l2ZW4gJHtwcm9wcy5sb2NhdGlvbnMubGVuZ3RofWApO1xuICAgIH1cbiAgICAocHJvcHMubG9jYXRpb25zIHx8IFtdKS5mb3JFYWNoKHRoaXMuYWRkSW50ZXJuYWxMb2NhdGlvbi5iaW5kKHRoaXMpKTtcblxuICAgIC8vIEFkZCBhbGwgSW5ncmVzcyBydWxlc1xuICAgIGlmIChwcm9wcy5pbmdyZXNzUnVsZXMgJiYgcHJvcHMuaW5ncmVzc1J1bGVzPy5sZW5ndGggPiA1MCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBtb3JlIHRoYW4gNTAgaW5ncmVzcyBydWxlcyBhcmUgYWxsb3dlZCBwZXIgZmxlZXQsIGdpdmVuICR7cHJvcHMuaW5ncmVzc1J1bGVzLmxlbmd0aH1gKTtcbiAgICB9XG4gICAgKHByb3BzLmluZ3Jlc3NSdWxlcyB8fCBbXSkuZm9yRWFjaCh0aGlzLmFkZEludGVybmFsSW5ncmVzc1J1bGUuYmluZCh0aGlzKSk7XG5cbiAgICB0aGlzLmNvbnRlbnQgPSBwcm9wcy5jb250ZW50O1xuICAgIHRoaXMucm9sZSA9IHByb3BzLnJvbGUgPz8gbmV3IGlhbS5Sb2xlKHRoaXMsICdTZXJ2aWNlUm9sZScsIHtcbiAgICAgIGFzc3VtZWRCeTogbmV3IGlhbS5Db21wb3NpdGVQcmluY2lwYWwoXG4gICAgICAgIG5ldyBpYW0uU2VydmljZVByaW5jaXBhbCgnZ2FtZWxpZnQuYW1hem9uYXdzLmNvbScpLFxuICAgICAgICBuZXcgaWFtLlNlcnZpY2VQcmluY2lwYWwoJ2VjMi5hbWF6b25hd3MuY29tJykpLFxuICAgIH0pO1xuICAgIHRoaXMuZ3JhbnRQcmluY2lwYWwgPSB0aGlzLnJvbGU7XG5cbiAgICBjb25zdCByZXNvdXJjZSA9IG5ldyBDZm5GbGVldCh0aGlzLCAnUmVzb3VyY2UnLCB7XG4gICAgICBidWlsZElkOiB0aGlzLmNvbnRlbnQuYnVpbGRJZCxcbiAgICAgIGNlcnRpZmljYXRlQ29uZmlndXJhdGlvbjoge1xuICAgICAgICBjZXJ0aWZpY2F0ZVR5cGU6IHByb3BzLnVzZUNlcnRpZmljYXRlID8gJ0dFTkVSQVRFRCc6ICdESVNBQkxFRCcsXG4gICAgICB9LFxuICAgICAgZGVzY3JpcHRpb246IHByb3BzLmRlc2NyaXB0aW9uLFxuICAgICAgZGVzaXJlZEVjMkluc3RhbmNlczogcHJvcHMuZGVzaXJlZENhcGFjaXR5LFxuICAgICAgZWMySW5ib3VuZFBlcm1pc3Npb25zOiBjZGsuTGF6eS5hbnkoeyBwcm9kdWNlOiAoKSA9PiB0aGlzLnBhcnNlSW5ncmVzc1J1bGVzKCkgfSksXG4gICAgICBlYzJJbnN0YW5jZVR5cGU6IHByb3BzLmluc3RhbmNlVHlwZS50b1N0cmluZygpLFxuICAgICAgZmxlZXRUeXBlOiBwcm9wcy51c2VTcG90ID8gJ1NQT1QnIDogJ09OX0RFTUFORCcsXG4gICAgICBpbnN0YW5jZVJvbGVBcm46IHRoaXMucm9sZS5yb2xlQXJuLFxuICAgICAgbG9jYXRpb25zOiBjZGsuTGF6eS5hbnkoeyBwcm9kdWNlOiAoKSA9PiB0aGlzLnBhcnNlTG9jYXRpb25zKCkgfSksXG4gICAgICBtYXhTaXplOiBwcm9wcy5tYXhTaXplID8gcHJvcHMubWF4U2l6ZSA6IDEsXG4gICAgICBtaW5TaXplOiBwcm9wcy5taW5TaXplID8gcHJvcHMubWluU2l6ZSA6IDAsXG4gICAgICBuYW1lOiB0aGlzLnBoeXNpY2FsTmFtZSxcbiAgICAgIG5ld0dhbWVTZXNzaW9uUHJvdGVjdGlvblBvbGljeTogcHJvcHMucHJvdGVjdE5ld0dhbWVTZXNzaW9uID8gJ0Z1bGxQcm90ZWN0aW9uJyA6ICdOb1Byb3RlY3Rpb24nLFxuICAgICAgcGVlclZwY0F3c0FjY291bnRJZDogcHJvcHMucGVlclZwYyAmJiBwcm9wcy5wZWVyVnBjLmVudi5hY2NvdW50LFxuICAgICAgcGVlclZwY0lkOiBwcm9wcy5wZWVyVnBjICYmIHByb3BzLnBlZXJWcGMudnBjSWQsXG4gICAgICByZXNvdXJjZUNyZWF0aW9uTGltaXRQb2xpY3k6IHRoaXMucGFyc2VSZXNvdXJjZUNyZWF0aW9uTGltaXRQb2xpY3kocHJvcHMpLFxuICAgICAgcnVudGltZUNvbmZpZ3VyYXRpb246IHRoaXMucGFyc2VSdW50aW1lQ29uZmlndXJhdGlvbihwcm9wcyksXG4gICAgfSk7XG5cbiAgICB0aGlzLmZsZWV0SWQgPSB0aGlzLmdldFJlc291cmNlTmFtZUF0dHJpYnV0ZShyZXNvdXJjZS5yZWYpO1xuICAgIHRoaXMuZmxlZXRBcm4gPSBjZGsuU3RhY2sub2Yoc2NvcGUpLmZvcm1hdEFybih7XG4gICAgICBzZXJ2aWNlOiAnZ2FtZWxpZnQnLFxuICAgICAgcmVzb3VyY2U6ICdmbGVldCcsXG4gICAgICByZXNvdXJjZU5hbWU6IHRoaXMuZmxlZXRJZCxcbiAgICAgIGFybkZvcm1hdDogY2RrLkFybkZvcm1hdC5TTEFTSF9SRVNPVVJDRV9OQU1FLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYW4gaW5ncmVzcyBydWxlIHRvIGFsbG93IGluYm91bmQgdHJhZmZpYyB0byBhY2Nlc3MgZ2FtZSBzZXNzaW9ucyBvbiB0aGlzIGZsZWV0LlxuICAgKlxuICAgKiBAcGFyYW0gc291cmNlIEEgcmFuZ2Ugb2YgYWxsb3dlZCBJUCBhZGRyZXNzZXNcbiAgICogQHBhcmFtIHBvcnQgVGhlIHBvcnQgcmFuZ2UgdXNlZCBmb3IgaW5ncmVzcyB0cmFmZmljXG4gICAqL1xuICBATWV0aG9kTWV0YWRhdGEoKVxuICBwdWJsaWMgYWRkSW5ncmVzc1J1bGUoc291cmNlOiBJUGVlciwgcG9ydDogUG9ydCkge1xuICAgIHRoaXMuYWRkSW50ZXJuYWxJbmdyZXNzUnVsZSh7XG4gICAgICBzb3VyY2U6IHNvdXJjZSxcbiAgICAgIHBvcnQ6IHBvcnQsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFkZEludGVybmFsSW5ncmVzc1J1bGUoaW5ncmVzc1J1bGU6IEluZ3Jlc3NSdWxlKSB7XG4gICAgaWYgKHRoaXMuaW5ncmVzc1J1bGVzLmxlbmd0aCA9PSA1MCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBtb3JlIHRoYW4gNTAgaW5ncmVzcyBydWxlcyBhcmUgYWxsb3dlZCBwZXIgZmxlZXQnKTtcbiAgICB9XG4gICAgdGhpcy5pbmdyZXNzUnVsZXMucHVzaChpbmdyZXNzUnVsZSk7XG4gIH1cblxuICBwcml2YXRlIHBhcnNlSW5ncmVzc1J1bGVzKCk6IENmbkZsZWV0LklwUGVybWlzc2lvblByb3BlcnR5W10gfCB1bmRlZmluZWQge1xuICAgIGlmICghdGhpcy5pbmdyZXNzUnVsZXMgfHwgdGhpcy5pbmdyZXNzUnVsZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmluZ3Jlc3NSdWxlcy5tYXAocGFyc2VJbmdyZXNzUnVsZSk7XG5cbiAgICBmdW5jdGlvbiBwYXJzZUluZ3Jlc3NSdWxlKGluZ3Jlc3NSdWxlOiBJbmdyZXNzUnVsZSk6IENmbkZsZWV0LklwUGVybWlzc2lvblByb3BlcnR5IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmluZ3Jlc3NSdWxlLnBvcnQudG9Kc29uKCksXG4gICAgICAgIC4uLmluZ3Jlc3NSdWxlLnNvdXJjZS50b0pzb24oKSxcbiAgICAgIH07XG4gICAgfVxuICB9XG59XG4iXX0=
|