@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.
@@ -1,11 +1,38 @@
1
1
  "use strict";
2
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
- return c > 3 && r && Object.defineProperty(target, key, r), r;
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 = class BuildFleet extends fleet_base_1.FleetBase {
30
- /**
31
- * Import an existing fleet from its identifier.
32
- */
33
- static fromBuildFleetId(scope, id, buildFleetId) {
34
- return this.fromFleetAttributes(scope, id, { fleetId: buildFleetId });
35
- }
36
- /**
37
- * Import an existing fleet from its ARN.
38
- */
39
- static fromBuildFleetArn(scope, id, buildFleetArn) {
40
- return this.fromFleetAttributes(scope, id, { fleetArn: buildFleetArn });
41
- }
42
- constructor(scope, id, props) {
43
- super(scope, id, {
44
- physicalName: props.fleetName,
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
- catch (error) {
51
- if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
52
- Error.captureStackTrace(error, BuildFleet);
53
- }
54
- throw error;
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
- // Enhanced CDK Analytics Telemetry
57
- (0, metadata_resource_1.addConstructMetadata)(this, props);
58
- if (!cdk.Token.isUnresolved(props.fleetName)) {
59
- if (props.fleetName.length > 1024) {
60
- throw new Error(`Fleet name can not be longer than 1024 characters but has ${props.fleetName.length} characters.`);
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
- if (props.description && !cdk.Token.isUnresolved(props.description)) {
64
- if (props.description.length > 1024) {
65
- throw new Error(`Fleet description can not be longer than 1024 characters but has ${props.description.length} characters.`);
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
- if (props.minSize && props.minSize < 0) {
69
- throw new Error(`The minimum number of instances allowed in the Fleet cannot be lower than 0, given ${props.minSize}`);
70
- }
71
- if (props.maxSize && props.maxSize < 0) {
72
- throw new Error(`The maximum number of instances allowed in the Fleet cannot be lower than 0, given ${props.maxSize}`);
73
- }
74
- if (props.peerVpc) {
75
- this.warnVpcPeeringAuthorizations(this);
76
- }
77
- // Add all locations
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
- throw error;
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
- this.addInternalIngressRule({
139
- source: source,
140
- port: port,
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
- this.ingressRules.push(ingressRule);
148
- }
149
- parseIngressRules() {
150
- if (!this.ingressRules || this.ingressRules.length === 0) {
151
- return undefined;
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
- return this.ingressRules.map(parseIngressRule);
154
- function parseIngressRule(ingressRule) {
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=