@aws-cdk/aws-ec2-alpha 2.219.0-alpha.0 → 2.220.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/lib/ipam.js CHANGED
@@ -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.Ipam = exports.IpamScopeType = exports.AwsServiceName = exports.IpamPoolPublicIpSource = exports.AddressFamily = void 0;
11
38
  const jsiiDeprecationWarnings = require("../.warnings.jsii.js");
@@ -81,104 +108,169 @@ const NAME_TAG = 'Name';
81
108
  * @resource AWS::EC2::IPAMPool
82
109
  * @internal
83
110
  */
84
- let IpamPool = class IpamPool extends aws_cdk_lib_1.Resource {
85
- constructor(scope, id, props) {
86
- super(scope, id, {
87
- physicalName: props.ipamPoolName ?? aws_cdk_lib_1.Lazy.string({
88
- produce: () => aws_cdk_lib_1.Names.uniqueResourceName(this, { maxLength: 128, allowedSpecialCharacters: '_' }),
89
- }),
90
- });
111
+ let IpamPool = (() => {
112
+ let _classDecorators = [prop_injectable_1.propertyInjectable];
113
+ let _classDescriptor;
114
+ let _classExtraInitializers = [];
115
+ let _classThis;
116
+ let _classSuper = aws_cdk_lib_1.Resource;
117
+ let _instanceExtraInitializers = [];
118
+ let _provisionCidr_decorators;
119
+ var IpamPool = class extends _classSuper {
120
+ static { _classThis = this; }
121
+ static {
122
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
123
+ _provisionCidr_decorators = [(0, metadata_resource_1.MethodMetadata)()];
124
+ __esDecorate(this, null, _provisionCidr_decorators, { kind: "method", name: "provisionCidr", static: false, private: false, access: { has: obj => "provisionCidr" in obj, get: obj => obj.provisionCidr }, metadata: _metadata }, null, _instanceExtraInitializers);
125
+ __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
126
+ IpamPool = _classThis = _classDescriptor.value;
127
+ if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
128
+ }
129
+ /** Uniquely identifies this class. */
130
+ static PROPERTY_INJECTION_ID = '@aws-cdk.aws-ec2-alpha.IpamPool';
131
+ /**
132
+ * Pool ID to be passed to the VPC construct
133
+ * @attribute IpamPoolId
134
+ */
135
+ ipamPoolId = __runInitializers(this, _instanceExtraInitializers);
91
136
  /**
92
137
  * Pool CIDR for IPv6 to be provisioned with Public IP source set to 'Amazon'
93
138
  */
94
- this.ipamCidrs = [];
139
+ ipamCidrs = [];
95
140
  /**
96
141
  * Pool CIDR for IPv4 to be provisioned using IPAM
97
142
  * Required to check for subnet IP range is within the VPC range
98
143
  */
99
- this.ipamIpv4Cidrs = [];
100
- // Enhanced CDK Analytics Telemetry
101
- (0, metadata_resource_1.addConstructMetadata)(this, props);
102
- if (props.addressFamily === AddressFamily.IP_V6 && !props.awsService) {
103
- throw new Error('awsService is required when addressFamily is set to ipv6');
144
+ ipamIpv4Cidrs = [];
145
+ /**
146
+ * Reference to ipamPool resource created in this class
147
+ */
148
+ _ipamPool;
149
+ constructor(scope, id, props) {
150
+ super(scope, id, {
151
+ physicalName: props.ipamPoolName ?? aws_cdk_lib_1.Lazy.string({
152
+ produce: () => aws_cdk_lib_1.Names.uniqueResourceName(this, { maxLength: 128, allowedSpecialCharacters: '_' }),
153
+ }),
154
+ });
155
+ // Enhanced CDK Analytics Telemetry
156
+ (0, metadata_resource_1.addConstructMetadata)(this, props);
157
+ if (props.addressFamily === AddressFamily.IP_V6 && !props.awsService) {
158
+ throw new Error('awsService is required when addressFamily is set to ipv6');
159
+ }
160
+ // Add tags to the IPAM Pool if name is provided
161
+ if (props.ipamPoolName) {
162
+ aws_cdk_lib_1.Tags.of(this).add(NAME_TAG, props.ipamPoolName);
163
+ }
164
+ this._ipamPool = new aws_ec2_1.CfnIPAMPool(this, id, {
165
+ addressFamily: props.addressFamily,
166
+ provisionedCidrs: props.ipv4ProvisionedCidrs?.map(cidr => ({ cidr })),
167
+ locale: props.locale,
168
+ ipamScopeId: props.ipamScopeId,
169
+ publicIpSource: props.publicIpSource,
170
+ awsService: props.awsService,
171
+ });
172
+ this.ipamPoolId = this._ipamPool.attrIpamPoolId;
173
+ // Populating to check for subnet range against all IPv4 ranges assigned to VPC including IPAM
174
+ props.ipv4ProvisionedCidrs?.map(cidr => (this.ipamIpv4Cidrs.push(cidr)));
175
+ this.node.defaultChild = this._ipamPool;
104
176
  }
105
- // Add tags to the IPAM Pool if name is provided
106
- if (props.ipamPoolName) {
107
- aws_cdk_lib_1.Tags.of(this).add(NAME_TAG, props.ipamPoolName);
177
+ /**
178
+ * A CIDR provisioned to an IPAM pool.
179
+ * @param id Name of Resource
180
+ * @param options Either a CIDR or netmask length must be provided
181
+ * @returns AWS::EC2::IPAMPoolCidr
182
+ */
183
+ provisionCidr(id, options) {
184
+ const cidr = new aws_ec2_1.CfnIPAMPoolCidr(this, id, {
185
+ ...options,
186
+ ipamPoolId: this.ipamPoolId,
187
+ });
188
+ this.ipamCidrs.push(cidr);
189
+ return cidr;
108
190
  }
109
- this._ipamPool = new aws_ec2_1.CfnIPAMPool(this, id, {
110
- addressFamily: props.addressFamily,
111
- provisionedCidrs: props.ipv4ProvisionedCidrs?.map(cidr => ({ cidr })),
112
- locale: props.locale,
113
- ipamScopeId: props.ipamScopeId,
114
- publicIpSource: props.publicIpSource,
115
- awsService: props.awsService,
116
- });
117
- this.ipamPoolId = this._ipamPool.attrIpamPoolId;
118
- // Populating to check for subnet range against all IPv4 ranges assigned to VPC including IPAM
119
- props.ipv4ProvisionedCidrs?.map(cidr => (this.ipamIpv4Cidrs.push(cidr)));
120
- this.node.defaultChild = this._ipamPool;
121
- }
122
- /**
123
- * A CIDR provisioned to an IPAM pool.
124
- * @param id Name of Resource
125
- * @param options Either a CIDR or netmask length must be provided
126
- * @returns AWS::EC2::IPAMPoolCidr
127
- */
128
- provisionCidr(id, options) {
129
- const cidr = new aws_ec2_1.CfnIPAMPoolCidr(this, id, {
130
- ...options,
131
- ipamPoolId: this.ipamPoolId,
132
- });
133
- this.ipamCidrs.push(cidr);
134
- return cidr;
135
- }
136
- };
137
- /** Uniquely identifies this class. */
138
- IpamPool.PROPERTY_INJECTION_ID = '@aws-cdk.aws-ec2-alpha.IpamPool';
139
- __decorate([
140
- (0, metadata_resource_1.MethodMetadata)()
141
- ], IpamPool.prototype, "provisionCidr", null);
142
- IpamPool = __decorate([
143
- prop_injectable_1.propertyInjectable
144
- ], IpamPool);
191
+ static {
192
+ __runInitializers(_classThis, _classExtraInitializers);
193
+ }
194
+ };
195
+ return IpamPool = _classThis;
196
+ })();
145
197
  /**
146
198
  * Creates custom Ipam Scope, custom IPAM scopes can only be private
147
199
  * (can be used for adding custom scopes to an existing IPAM)
148
200
  * @see https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-ipamscope.html
149
201
  * @resource AWS::EC2::IPAMScope
150
202
  */
151
- let IpamScope = class IpamScope extends aws_cdk_lib_1.Resource {
152
- constructor(scope, id, props) {
153
- super(scope, id);
154
- // Enhanced CDK Analytics Telemetry
155
- (0, metadata_resource_1.addConstructMetadata)(this, props);
156
- this._ipamScope = new aws_ec2_1.CfnIPAMScope(scope, 'IpamScope', {
157
- ipamId: props.ipamId,
158
- });
159
- aws_cdk_lib_1.Tags.of(this._ipamScope).add(NAME_TAG, props.ipamScopeName ?? 'CustomIpamScope');
160
- this.scopeId = this._ipamScope.attrIpamScopeId;
161
- this.scopeType = IpamScopeType.CUSTOM;
162
- this.scope = scope;
163
- this.props = props;
164
- }
165
- /**
166
- * Adds a pool to the IPAM scope.
167
- * @external
168
- */
169
- addPool(id, options) {
170
- return createIpamPool(this.scope, id, this.props, options, this.scopeId);
171
- }
172
- };
173
- /** Uniquely identifies this class. */
174
- IpamScope.PROPERTY_INJECTION_ID = '@aws-cdk.aws-ec2-alpha.IpamScope';
175
- IpamScope = __decorate([
176
- prop_injectable_1.propertyInjectable
177
- ], IpamScope);
203
+ let IpamScope = (() => {
204
+ let _classDecorators = [prop_injectable_1.propertyInjectable];
205
+ let _classDescriptor;
206
+ let _classExtraInitializers = [];
207
+ let _classThis;
208
+ let _classSuper = aws_cdk_lib_1.Resource;
209
+ var IpamScope = class extends _classSuper {
210
+ static { _classThis = this; }
211
+ static {
212
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
213
+ __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
214
+ IpamScope = _classThis = _classDescriptor.value;
215
+ if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
216
+ }
217
+ /** Uniquely identifies this class. */
218
+ static PROPERTY_INJECTION_ID = '@aws-cdk.aws-ec2-alpha.IpamScope';
219
+ /**
220
+ * Stores the reference to newly created Resource
221
+ */
222
+ _ipamScope;
223
+ /**
224
+ * ID for Resource IpamScope
225
+ * @attribute IpamScopeId
226
+ */
227
+ scopeId;
228
+ /**
229
+ * Properties to configure ipam scope
230
+ */
231
+ props;
232
+ /**
233
+ * Reference to stack scope to be passed through addPool method inorder to create a new IpamPool
234
+ */
235
+ scope;
236
+ /**
237
+ * Defines scope type can be either default or custom
238
+ */
239
+ scopeType;
240
+ constructor(scope, id, props) {
241
+ super(scope, id);
242
+ // Enhanced CDK Analytics Telemetry
243
+ (0, metadata_resource_1.addConstructMetadata)(this, props);
244
+ this._ipamScope = new aws_ec2_1.CfnIPAMScope(scope, 'IpamScope', {
245
+ ipamId: props.ipamId,
246
+ });
247
+ aws_cdk_lib_1.Tags.of(this._ipamScope).add(NAME_TAG, props.ipamScopeName ?? 'CustomIpamScope');
248
+ this.scopeId = this._ipamScope.attrIpamScopeId;
249
+ this.scopeType = IpamScopeType.CUSTOM;
250
+ this.scope = scope;
251
+ this.props = props;
252
+ }
253
+ /**
254
+ * Adds a pool to the IPAM scope.
255
+ * @external
256
+ */
257
+ addPool(id, options) {
258
+ return createIpamPool(this.scope, id, this.props, options, this.scopeId);
259
+ }
260
+ static {
261
+ __runInitializers(_classThis, _classExtraInitializers);
262
+ }
263
+ };
264
+ return IpamScope = _classThis;
265
+ })();
178
266
  /**
179
267
  * Base class for IPAM default scopes.
180
268
  */
181
269
  class IpamScopeBase {
270
+ scope;
271
+ scopeId;
272
+ props;
273
+ scopeType;
182
274
  constructor(scope, scopeId, props, scopeType) {
183
275
  this.scope = scope;
184
276
  this.scopeId = scopeId;
@@ -205,83 +297,127 @@ class IpamScopeBase {
205
297
  * @see https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-ipamscope.html
206
298
  * @resource AWS::EC2::IPAM
207
299
  */
208
- let Ipam = class Ipam extends aws_cdk_lib_1.Resource {
209
- constructor(scope, id, props) {
210
- super(scope, id);
300
+ let Ipam = (() => {
301
+ let _classDecorators = [prop_injectable_1.propertyInjectable];
302
+ let _classDescriptor;
303
+ let _classExtraInitializers = [];
304
+ let _classThis;
305
+ let _classSuper = aws_cdk_lib_1.Resource;
306
+ let _instanceExtraInitializers = [];
307
+ let _addScope_decorators;
308
+ var Ipam = class extends _classSuper {
309
+ static { _classThis = this; }
310
+ static {
311
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
312
+ _addScope_decorators = [(0, metadata_resource_1.MethodMetadata)()];
313
+ __esDecorate(this, null, _addScope_decorators, { kind: "method", name: "addScope", static: false, private: false, access: { has: obj => "addScope" in obj, get: obj => obj.addScope }, metadata: _metadata }, null, _instanceExtraInitializers);
314
+ __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
315
+ Ipam = _classThis = _classDescriptor.value;
316
+ if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
317
+ }
318
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-ec2-alpha.Ipam", version: "2.220.0-alpha.0" };
319
+ /** Uniquely identifies this class. */
320
+ static PROPERTY_INJECTION_ID = '@aws-cdk.aws-ec2-alpha.Ipam';
321
+ /**
322
+ * Provides access to default public IPAM scope through add pool method.
323
+ * Usage: To add an Ipam Pool to a default public scope
324
+ * @see https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-ipamscope.html
325
+ */
326
+ publicScope = __runInitializers(this, _instanceExtraInitializers);
327
+ /**
328
+ * Provides access to default private IPAM scope through add pool method.
329
+ * Usage: To add an Ipam Pool to a default private scope
330
+ * @see https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-ipamscope.html
331
+ * */
332
+ privateScope;
333
+ // Resource IPAM
334
+ _ipam;
335
+ /**
336
+ * Access to Ipam resource id that can be used later to add a custom private scope to this IPAM
337
+ * @attribute IpamId
338
+ */
339
+ ipamId;
340
+ /**
341
+ * List of operating regions for IPAM
342
+ */
343
+ operatingRegions;
211
344
  /**
212
345
  * List of scopes created under this IPAM
213
346
  */
214
- this.scopes = [];
215
- try {
216
- jsiiDeprecationWarnings._aws_cdk_aws_ec2_alpha_IpamProps(props);
217
- }
218
- catch (error) {
219
- if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
220
- Error.captureStackTrace(error, Ipam);
347
+ scopes = [];
348
+ /**
349
+ * IPAM name to be used for tagging
350
+ * @default no tag specified
351
+ * @attribute IpamName
352
+ */
353
+ ipamName;
354
+ constructor(scope, id, props) {
355
+ super(scope, id);
356
+ try {
357
+ jsiiDeprecationWarnings._aws_cdk_aws_ec2_alpha_IpamProps(props);
221
358
  }
222
- throw error;
223
- }
224
- // Enhanced CDK Analytics Telemetry
225
- (0, metadata_resource_1.addConstructMetadata)(this, props);
226
- if (props?.ipamName) {
227
- aws_cdk_lib_1.Tags.of(this).add(NAME_TAG, props.ipamName);
228
- }
229
- if (props?.operatingRegions && (props.operatingRegions.length === 0)) {
230
- throw new Error('Please provide at least one operating region');
231
- }
232
- this.operatingRegions = props?.operatingRegions ?? [aws_cdk_lib_1.Stack.of(this).region];
233
- this.ipamName = props?.ipamName;
234
- this._ipam = new aws_ec2_1.CfnIPAM(this, 'Ipam', {
235
- operatingRegions: this.operatingRegions ? this.operatingRegions.map(region => ({ regionName: region })) : [],
236
- });
237
- this.node.defaultChild = this._ipam;
238
- this.ipamId = this._ipam.attrIpamId;
239
- this.publicScope = new IpamScopeBase(this, 'DefaultPublicScope', {
240
- ipamOperatingRegions: this.operatingRegions,
241
- ipamId: this._ipam.attrIpamId,
242
- ipamScopeId: this._ipam.attrPublicDefaultScopeId,
243
- });
244
- this.privateScope = new IpamScopeBase(this, 'DefaultPrivateScope', {
245
- ipamOperatingRegions: this.operatingRegions,
246
- ipamId: this._ipam.attrIpamId,
247
- ipamScopeId: this._ipam.attrPrivateDefaultScopeId,
248
- });
249
- this.scopes.push(this.publicScope, this.privateScope);
250
- }
251
- /**
252
- * Function to add custom scope to an existing IPAM
253
- * Custom scopes can only be private
254
- */
255
- addScope(scope, id, options) {
256
- try {
257
- jsiiDeprecationWarnings._aws_cdk_aws_ec2_alpha_IpamScopeOptions(options);
359
+ catch (error) {
360
+ if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
361
+ Error.captureStackTrace(error, Ipam);
362
+ }
363
+ throw error;
364
+ }
365
+ // Enhanced CDK Analytics Telemetry
366
+ (0, metadata_resource_1.addConstructMetadata)(this, props);
367
+ if (props?.ipamName) {
368
+ aws_cdk_lib_1.Tags.of(this).add(NAME_TAG, props.ipamName);
369
+ }
370
+ if (props?.operatingRegions && (props.operatingRegions.length === 0)) {
371
+ throw new Error('Please provide at least one operating region');
372
+ }
373
+ this.operatingRegions = props?.operatingRegions ?? [aws_cdk_lib_1.Stack.of(this).region];
374
+ this.ipamName = props?.ipamName;
375
+ this._ipam = new aws_ec2_1.CfnIPAM(this, 'Ipam', {
376
+ operatingRegions: this.operatingRegions ? this.operatingRegions.map(region => ({ regionName: region })) : [],
377
+ });
378
+ this.node.defaultChild = this._ipam;
379
+ this.ipamId = this._ipam.attrIpamId;
380
+ this.publicScope = new IpamScopeBase(this, 'DefaultPublicScope', {
381
+ ipamOperatingRegions: this.operatingRegions,
382
+ ipamId: this._ipam.attrIpamId,
383
+ ipamScopeId: this._ipam.attrPublicDefaultScopeId,
384
+ });
385
+ this.privateScope = new IpamScopeBase(this, 'DefaultPrivateScope', {
386
+ ipamOperatingRegions: this.operatingRegions,
387
+ ipamId: this._ipam.attrIpamId,
388
+ ipamScopeId: this._ipam.attrPrivateDefaultScopeId,
389
+ });
390
+ this.scopes.push(this.publicScope, this.privateScope);
258
391
  }
259
- catch (error) {
260
- if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
261
- Error.captureStackTrace(error, this.addScope);
392
+ /**
393
+ * Function to add custom scope to an existing IPAM
394
+ * Custom scopes can only be private
395
+ */
396
+ addScope(scope, id, options) {
397
+ try {
398
+ jsiiDeprecationWarnings._aws_cdk_aws_ec2_alpha_IpamScopeOptions(options);
262
399
  }
263
- throw error;
400
+ catch (error) {
401
+ if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
402
+ Error.captureStackTrace(error, this.addScope);
403
+ }
404
+ throw error;
405
+ }
406
+ const ipamScope = new IpamScope(scope, id, {
407
+ ...options,
408
+ ipamId: this.ipamId,
409
+ ipamOperatingRegions: this.operatingRegions,
410
+ });
411
+ this.scopes.push(ipamScope);
412
+ return ipamScope;
264
413
  }
265
- const ipamScope = new IpamScope(scope, id, {
266
- ...options,
267
- ipamId: this.ipamId,
268
- ipamOperatingRegions: this.operatingRegions,
269
- });
270
- this.scopes.push(ipamScope);
271
- return ipamScope;
272
- }
273
- };
414
+ static {
415
+ __runInitializers(_classThis, _classExtraInitializers);
416
+ }
417
+ };
418
+ return Ipam = _classThis;
419
+ })();
274
420
  exports.Ipam = Ipam;
275
- _a = JSII_RTTI_SYMBOL_1;
276
- Ipam[_a] = { fqn: "@aws-cdk/aws-ec2-alpha.Ipam", version: "2.219.0-alpha.0" };
277
- /** Uniquely identifies this class. */
278
- Ipam.PROPERTY_INJECTION_ID = '@aws-cdk.aws-ec2-alpha.Ipam';
279
- __decorate([
280
- (0, metadata_resource_1.MethodMetadata)()
281
- ], Ipam.prototype, "addScope", null);
282
- exports.Ipam = Ipam = __decorate([
283
- prop_injectable_1.propertyInjectable
284
- ], Ipam);
285
421
  /**
286
422
  * Function to create IpamPool under scope
287
423
  * @internal
@@ -308,4 +444,4 @@ function createIpamPool(scope, id, scopeOptions, poolOptions, scopeId) {
308
444
  awsService: poolOptions.awsService,
309
445
  });
310
446
  }
311
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXBhbS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImlwYW0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUEsaURBQTBGO0FBRTFGLDZDQUFpRTtBQUNqRSw4RUFBOEY7QUFDOUYsMEVBQTBFO0FBRTFFOzs7OztHQUtHO0FBQ0gsSUFBWSxhQVlYO0FBWkQsV0FBWSxhQUFhO0lBQ3ZCOzs7T0FHRztJQUNILCtCQUFjLENBQUE7SUFFZDs7O09BR0c7SUFDSCwrQkFBYyxDQUFBO0FBQ2hCLENBQUMsRUFaVyxhQUFhLDZCQUFiLGFBQWEsUUFZeEI7QUFFRDs7OztHQUlHO0FBQ0gsSUFBWSxzQkFVWDtBQVZELFdBQVksc0JBQXNCO0lBQ2hDOztPQUVHO0lBQ0gseUNBQWUsQ0FBQTtJQUVmOztPQUVHO0lBQ0gsMkNBQWlCLENBQUE7QUFDbkIsQ0FBQyxFQVZXLHNCQUFzQixzQ0FBdEIsc0JBQXNCLFFBVWpDO0FBRUQ7O0dBRUc7QUFDSCxJQUFZLGNBS1g7QUFMRCxXQUFZLGNBQWM7SUFDeEI7O09BRUc7SUFDSCw2QkFBVyxDQUFBO0FBQ2IsQ0FBQyxFQUxXLGNBQWMsOEJBQWQsY0FBYyxRQUt6QjtBQXlCRDs7R0FFRztBQUNILElBQVksYUFVWDtBQVZELFdBQVksYUFBYTtJQUN2Qjs7T0FFRztJQUNILG9DQUFtQixDQUFBO0lBRW5COztPQUVHO0lBQ0gsa0NBQWlCLENBQUE7QUFDbkIsQ0FBQyxFQVZXLGFBQWEsNkJBQWIsYUFBYSxRQVV4QjtBQTRERCxNQUFNLFFBQVEsR0FBVyxNQUFNLENBQUM7QUE4SmhDOzs7Ozs7R0FNRztBQUVILElBQU0sUUFBUSxHQUFkLE1BQU0sUUFBUyxTQUFRLHNCQUFRO0lBeUI3QixZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQW9CO1FBQzVELEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFO1lBQ2YsWUFBWSxFQUFFLEtBQUssQ0FBQyxZQUFZLElBQUksa0JBQUksQ0FBQyxNQUFNLENB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QVEsQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFO1FBQzdCLFlBQVksRUFBRSxXQUFXLENBQUMsWUFBWTtRQUN0QyxhQUFhLEVBQUUsV0FBVyxDQUFDLGFBQWE7UUFDeEMsb0JBQW9CLEVBQUUsV0FBVyxDQUFDLG9CQUFvQjtRQUN0RCxXQUFXLEVBQUUsT0FBTztRQUNwQixNQUFNLEVBQUUsV0FBVyxDQUFDLE1BQU07UUFDMUIsY0FBYyxFQUFFLFdBQVcsQ0FBQyxjQUFjO1FBQzFDLFVBQVUsRUFBRSxXQUFXLENBQUMsVUFBVTtLQUNuQyxDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2ZuSVBBTSwgQ2ZuSVBBTVBvb2wsIENmbklQQU1Qb29sQ2lkciwgQ2ZuSVBBTVNjb3BlIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWVjMic7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IExhenksIE5hbWVzLCBSZXNvdXJjZSwgU3RhY2ssIFRhZ3MgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBhZGRDb25zdHJ1Y3RNZXRhZGF0YSwgTWV0aG9kTWV0YWRhdGEgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9tZXRhZGF0YS1yZXNvdXJjZSc7XG5pbXBvcnQgeyBwcm9wZXJ0eUluamVjdGFibGUgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9wcm9wLWluamVjdGFibGUnO1xuXG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIGFkZHJlc3MgZmFtaWx5IGZvciBJUCBhZGRyZXNzZXMgaW4gYW4gSVBBTSBwb29sLlxuICogSVBfVjQgLSBSZXByZXNlbnRzIHRoZSBJUHY0IGFkZHJlc3MgZmFtaWx5LlxuICogSVBfVjYgLSBSZXByZXNlbnRzIHRoZSBJUHY2IGFkZHJlc3MgZmFtaWx5LlxuICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcmVzb3VyY2UtZWMyLWlwYW1wb29sLmh0bWwjY2ZuLWVjMi1pcGFtcG9vbC1hZGRyZXNzZmFtaWx5XG4gKi9cbmV4cG9ydCBlbnVtIEFkZHJlc3NGYW1pbHkge1xuICAvKipcbiAgICogUmVwcmVzZW50cyB0aGUgSVB2NCBhZGRyZXNzIGZhbWlseS5cbiAgICogQWxsb3dlZCB1bmRlciBwdWJsaWMgYW5kIHByaXZhdGUgcG9vbC5cbiAgICovXG4gIElQX1Y0ID0gJ2lwdjQnLFxuXG4gIC8qKlxuICAgKiBSZXByZXNlbnRzIHRoZSBJUHY2IGFkZHJlc3MgZmFtaWx5LlxuICAgKiBPbmx5IGFsbG93ZWQgdW5kZXIgcHVibGljIHBvb2wuXG4gICAqL1xuICBJUF9WNiA9ICdpcHY2Jyxcbn1cblxuLyoqXG4gKiBUaGUgSVAgYWRkcmVzcyBzb3VyY2UgZm9yIHBvb2xzIGluIHRoZSBwdWJsaWMgc2NvcGUuXG4gKiBPbmx5IHVzZWQgZm9yIHByb3Zpc2lvbmluZyBJUCBhZGRyZXNzIENJRFJzIHRvIHBvb2xzIGluIHRoZSBwdWJsaWMgc2NvcGUuXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1yZXNvdXJjZS1lYzItaXBhbXBvb2wuaHRtbCNjZm4tZWMyLWlwYW1wb29sLXB1YmxpY2lwc291cmNlXG4gKi9cbmV4cG9ydCBlbnVtIElwYW1Qb29sUHVibGljSXBTb3VyY2Uge1xuICAvKipcbiAgICogQllPSVAgSXB2NiB0byBiZSByZWdpc3RlcmVkIHVuZGVyIElQQU1cbiAgICovXG4gIEJZT0lQID0gJ2J5b2lwJyxcblxuICAvKipcbiAgICogQW1hem9uIFByb3ZpZGVkIElwdjYgcmFuZ2VcbiAgICovXG4gIEFNQVpPTiA9ICdhbWF6b24nLFxufVxuXG4vKipcbiAqIExpbWl0cyB3aGljaCBzZXJ2aWNlIGluIEFXUyB0aGF0IHRoZSBwb29sIGNhbiBiZSB1c2VkIGluXG4gKi9cbmV4cG9ydCBlbnVtIEF3c1NlcnZpY2VOYW1lIHtcbiAgLyoqXG4gICAqICBBbGxvd3MgdXNlcnMgdG8gdXNlIHNwYWNlIGZvciBFbGFzdGljIElQIGFkZHJlc3NlcyBhbmQgVlBDc1xuICAgKi9cbiAgRUMyID0gJ2VjMicsXG59XG5cbi8qKlxuICogT3B0aW9ucyB0byBjcmVhdGUgYSBuZXcgSXBhbSBpbiB0aGUgYWNjb3VudFxuICovXG5leHBvcnQgaW50ZXJmYWNlIElwYW1Qcm9wcyB7XG5cbiAgLyoqXG4gICAqIFRoZSBvcGVyYXRpbmcgUmVnaW9ucyBmb3IgYW4gSVBBTS5cbiAgICogT3BlcmF0aW5nIFJlZ2lvbnMgYXJlIEFXUyBSZWdpb25zIHdoZXJlIHRoZSBJUEFNIGlzIGFsbG93ZWQgdG8gbWFuYWdlIElQIGFkZHJlc3MgQ0lEUnNcbiAgICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgb3BlcmF0aW5nIFJlZ2lvbnMsIHNlZSBbQ3JlYXRlIGFuIElQQU1dKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS8vdnBjL2xhdGVzdC9pcGFtL2NyZWF0ZS1pcGFtLmh0bWwpIGluIHRoZSAqQW1hem9uIFZQQyBJUEFNIFVzZXIgR3VpZGUqIC5cbiAgICogQHNlZSBodHRwOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1yZXNvdXJjZS1lYzItaXBhbS5odG1sI2Nmbi1lYzItaXBhbS1vcGVyYXRpbmdyZWdpb25zXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gU3RhY2sucmVnaW9uIGlmIGRlZmluZWQgaW4gdGhlIHN0YWNrXG4gICAqL1xuICByZWFkb25seSBvcGVyYXRpbmdSZWdpb25zPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIE5hbWUgb2YgSVBBTSB0aGF0IGNhbiBiZSB1c2VkIGZvciB0YWdnaW5nIHJlc291cmNlXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gSWYgbm8gbmFtZSBwcm92aWRlZCwgbm8gdGFncyB3aWxsIGJlIGFkZGVkIHRvIHRoZSBJUEFNXG4gICAqL1xuICByZWFkb25seSBpcGFtTmFtZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZWZlcnMgdG8gdHdvIHBvc3NpYmxlIHNjb3BlIHR5cGVzIHVuZGVyIElQQU1cbiAqL1xuZXhwb3J0IGVudW0gSXBhbVNjb3BlVHlwZSB7XG4gIC8qKlxuICAgKiBEZWZhdWx0IHNjb3BlcyBjcmVhdGVkIGJ5IElQQU1cbiAgICovXG4gIERFRkFVTFQgPSAnZGVmYXVsdCcsXG5cbiAgLyoqXG4gICAqIEN1c3RvbSBzY29wZSBjcmVhdGVkIHVzaW5nIG1ldGhvZFxuICAgKi9cbiAgQ1VTVE9NID0gJ2N1c3RvbScsXG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgY29uZmlndXJpbmcgYW4gSVBBTSBwb29sLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXJlc291cmNlLWVjMi1pcGFtcG9vbC5odG1sXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUG9vbE9wdGlvbnMge1xuXG4gIC8qKlxuICAgKiBhZGRyZXNzRmFtaWx5IC0gVGhlIGFkZHJlc3MgZmFtaWx5IG9mIHRoZSBwb29sIChpcHY0IG9yIGlwdjYpLlxuICAgKi9cbiAgcmVhZG9ubHkgYWRkcmVzc0ZhbWlseTogQWRkcmVzc0ZhbWlseTtcblxuICAvKipcbiAgICogSW5mb3JtYXRpb24gYWJvdXQgdGhlIENJRFJzIHByb3Zpc2lvbmVkIHRvIHRoZSBwb29sLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIENJRFJzIGFyZSBwcm92aXNpb25lZFxuICAgKi9cbiAgcmVhZG9ubHkgaXB2NFByb3Zpc2lvbmVkQ2lkcnM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIGxvY2FsZSAoQVdTIFJlZ2lvbikgb2YgdGhlIHBvb2wuIFNob3VsZCBiZSBvbmUgb2YgdGhlIElQQU0gb3BlcmF0aW5nIHJlZ2lvbi5cbiAgICogIE9ubHkgcmVzb3VyY2VzIGluIHRoZSBzYW1lIFJlZ2lvbiBhcyB0aGUgbG9jYWxlIG9mIHRoZSBwb29sIGNhbiBnZXQgSVAgYWRkcmVzcyBhbGxvY2F0aW9ucyBmcm9tIHRoZSBwb29sLlxuICAgKiBZb3UgY2FuIG9ubHkgYWxsb2NhdGUgYSBDSURSIGZvciBhIFZQQywgZm9yIGV4YW1wbGUsIGZyb20gYW4gSVBBTSBwb29sIHRoYXQgc2hhcmVzIGEgbG9jYWxlIHdpdGggdGhlIFZQQ+KAmXMgUmVnaW9uLlxuICAgKiBOb3RlIHRoYXQgb25jZSB5b3UgY2hvb3NlIGEgTG9jYWxlIGZvciBhIHBvb2wsIHlvdSBjYW5ub3QgbW9kaWZ5IGl0LiBJZiB5b3UgY2hvb3NlIGFuIEFXUyBSZWdpb24gZm9yIGxvY2FsZSB0aGF0IGhhcyBub3QgYmVlbiBjb25maWd1cmVkIGFzIGFuIG9wZXJhdGluZyBSZWdpb24gZm9yIHRoZSBJUEFNLCB5b3UnbGwgZ2V0IGFuIGVycm9yLlxuICAgKiBAc2VlIGh0dHA6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXJlc291cmNlLWVjMi1pcGFtcG9vbC5odG1sI2Nmbi1lYzItaXBhbXBvb2wtbG9jYWxlXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gQ3VycmVudCBvcGVyYXRpbmcgcmVnaW9uIG9mIElQQU1cbiAgICovXG4gIHJlYWRvbmx5IGxvY2FsZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIElQIGFkZHJlc3Mgc291cmNlIGZvciBwb29scyBpbiB0aGUgcHVibGljIHNjb3BlLlxuICAgKiBPbmx5IHVzZWQgZm9yIElQdjYgYWRkcmVzc1xuICAgKiBPbmx5IGFsbG93ZWQgdmFsdWVzIHRvIHRoaXMgYXJlICdieW9pcCcgb3IgJ2FtYXpvbidcbiAgICpcbiAgICogQGRlZmF1bHQgYW1hem9uXG4gICAqL1xuICByZWFkb25seSBwdWJsaWNJcFNvdXJjZT86IElwYW1Qb29sUHVibGljSXBTb3VyY2U7XG5cbiAgLyoqXG4gICAqIExpbWl0cyB3aGljaCBzZXJ2aWNlIGluIEFXUyB0aGF0IHRoZSBwb29sIGNhbiBiZSB1c2VkIGluLlxuICAgKlxuICAgKiBcImVjMlwiLCBmb3IgZXhhbXBsZSwgYWxsb3dzIHVzZXJzIHRvIHVzZSBzcGFjZSBmb3IgRWxhc3RpYyBJUCBhZGRyZXNzZXMgYW5kIFZQQ3MuXG4gICAqXG4gICAqIEBzZWUgaHR0cDovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcmVzb3VyY2UtZWMyLWlwYW1wb29sLmh0bWwjY2ZuLWVjMi1pcGFtcG9vbC1hd3NzZXJ2aWNlXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gcmVxdWlyZWQgaW4gY2FzZSBvZiBhbiBJUHY2LCB0aHJvd3MgYW4gZXJyb3IgaWYgbm90IHByb3ZpZGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgYXdzU2VydmljZT86IEF3c1NlcnZpY2VOYW1lO1xuXG4gIC8qKlxuICAgKiBJUEFNIFBvb2wgcmVzb3VyY2UgbmFtZSB0byBiZSB1c2VkIGZvciB0YWdnaW5nXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gYXV0b2dlbmVyYXRlZCBieSBDREsgaWYgbm90IHByb3ZpZGVkXG4gICAqL1xuICByZWFkb25seSBpcGFtUG9vbE5hbWU/OiBzdHJpbmc7XG59XG5cbmNvbnN0IE5BTUVfVEFHOiBzdHJpbmcgPSAnTmFtZSc7XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgY3JlYXRpbmcgYW4gSVBBTSBwb29sLlxuICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcmVzb3VyY2UtZWMyLWlwYW1wb29sLmh0bWxcbiAqL1xuaW50ZXJmYWNlIElwYW1Qb29sUHJvcHMgZXh0ZW5kcyBQb29sT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBTY29wZSBpZCB3aGVyZSBwb29sIG5lZWRzIHRvIGJlIGNyZWF0ZWRcbiAgICovXG4gIHJlYWRvbmx5IGlwYW1TY29wZUlkOiBzdHJpbmc7XG59XG5cbi8qKlxuICogT3B0aW9ucyB0byBwcm92aXNpb24gQ0lEUnMgdG8gYW4gSVBBTSBwb29sLlxuICogVXNlZCB0byBjcmVhdGUgYSBuZXcgSXBhbVBvb2xDaWRyXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1yZXNvdXJjZS1lYzItaXBhbXBvb2xjaWRyLmh0bWxcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJcGFtUG9vbENpZHJQcm92aXNpb25pbmdPcHRpb25zIHtcbiAgLyoqXG4gICAqIElwdjYgTmV0bWFzayBsZW5ndGggZm9yIHRoZSBDSURSXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gcG9vbCBwcm92aXNpb25lZCB3aXRob3V0IG5ldG1hc2sgbGVuZ3RoLCBuZWVkIGNpZHIgcmFuZ2UgaW4gdGhpcyBjYXNlXG4gICAqL1xuICByZWFkb25seSBuZXRtYXNrTGVuZ3RoPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBJcHY2IENJRFIgYmxvY2sgZm9yIHRoZSBJUEFNIHBvb2xcbiAgICpcbiAgICogQGRlZmF1bHQgLSBwb29sIHByb3Zpc2lvbmVkIHdpdGhvdXQgbmV0bWFzayBsZW5ndGgsIG5lZWQgbmV0bWFzayBsZW5ndGggaW4gdGhpcyBjYXNlXG4gICAqL1xuICByZWFkb25seSBjaWRyPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIERlZmluaXRpb24gdXNlZCB0byBhZGQgb3IgY3JlYXRlIGEgbmV3IElQQU0gcG9vbFxuICovXG5leHBvcnQgaW50ZXJmYWNlIElJcGFtUG9vbCB7XG4gIC8qKlxuICAgKiBQb29sIElEIHRvIGJlIHBhc3NlZCB0byB0aGUgVlBDIGNvbnN0cnVjdFxuICAgKiBAYXR0cmlidXRlIElwYW1Qb29sSWRcbiAgICovXG4gIHJlYWRvbmx5IGlwYW1Qb29sSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogUG9vbCBDSURSIGZvciBJUHY2IHRvIGJlIHByb3Zpc2lvbmVkIHdpdGggUHVibGljIElQIHNvdXJjZSBzZXQgdG8gJ0FtYXpvbidcbiAgICovXG4gIHJlYWRvbmx5IGlwYW1DaWRyczogQ2ZuSVBBTVBvb2xDaWRyW107XG5cbiAgLyoqXG4gICAqIFBvb2wgQ0lEUiBmb3IgSVB2NCB0byBiZSBwcm92aXNpb25lZCB1c2luZyBJUEFNXG4gICAqIFJlcXVpcmVkIHRvIGNoZWNrIGZvciBzdWJuZXQgSVAgcmFuZ2UgaXMgd2l0aGluIHRoZSBWUEMgcmFuZ2VcbiAgICovXG4gIHJlYWRvbmx5IGlwYW1JcHY0Q2lkcnM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogRnVuY3Rpb24gdG8gYXNzb2NpYXRlIGEgSVB2NiBhZGRyZXNzIHdpdGggSVBBTSBwb29sXG4gICAqL1xuICBwcm92aXNpb25DaWRyKGlkOiBzdHJpbmcsIG9wdGlvbnM6IElwYW1Qb29sQ2lkclByb3Zpc2lvbmluZ09wdGlvbnMpOiBDZm5JUEFNUG9vbENpZHI7XG5cbn1cblxuLyoqXG4gKiBJUEFNIHNjb3BlIGlzIHRoZSBoaWdoZXN0LWxldmVsIGNvbnRhaW5lciB3aXRoaW4gSVBBTS4gQW4gSVBBTSBjb250YWlucyB0d28gZGVmYXVsdCBzY29wZXMuXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1yZXNvdXJjZS1lYzItaXBhbXNjb3BlLmh0bWxcbiAqL1xuaW50ZXJmYWNlIElwYW1TY29wZVByb3BzIGV4dGVuZHMgSXBhbVNjb3BlT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBJUEFNIGlkIHRvIHdoaWNoIHNjb3BlIG5lZWRzIHRvIGJlIGFkZGVkXG4gICAqL1xuICByZWFkb25seSBpcGFtSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogT3BlcmF0aW5nIHJlZ2lvbnMgZm9yIHRoZSBJcGFtXG4gICAqIFJlcXVpcmVkIGluIG9yZGVyIHRvIHZhbGlkYXRlIHRoZSBsb2NhbGUgYmVpbmcgc2V0IG9uIHBvb2xcbiAgICovXG4gIHJlYWRvbmx5IGlwYW1PcGVyYXRpbmdSZWdpb25zOiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogQ3VzdG9tIGlwYW0gc2NvcGUgaWQgdG8gYWRkIGEgcG9vbCBpbiBvcmRlciB0byBzdXBwb3J0IGRlZmF1bHQgc2NvcGVzXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdGhyb3dzIGFuIGVycm9yIGlmIG5vIHNjb3BlIGlkIGlzIHByb3ZpZGVkXG4gICAqL1xuICByZWFkb25seSBpcGFtU2NvcGVJZD86IHN0cmluZztcblxufVxuXG4vKipcbiAqIEJlaW5nIHVzZWQgaW4gSVBBTSBjbGFzcyB0byBhZGQgcG9vbHMgdG8gZGVmYXVsdCBzY29wZSBjcmVhdGVkIGJ5IElQQU0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSXBhbVNjb3BlT3B0aW9ucyB7XG5cbiAgLyoqXG4gICAqIElQQU0gc2NvcGUgbmFtZSB0aGF0IHdpbGwgYmUgdXNlZCBmb3IgdGFnZ2luZ1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIHRhZ3Mgd2lsbCBiZSBhZGRlZCB0byB0aGUgc2NvcGVcbiAgICovXG4gIHJlYWRvbmx5IGlwYW1TY29wZU5hbWU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgY29uZmlndXJpbmcgYW4gSVAgQWRkcmVzcyBNYW5hZ2VyIChJUEFNKS5cbiAqXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIHRoZSB7QGxpbmsgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXJlc291cmNlLWVjMi1pcGFtLmh0bWx9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElwYW1PcHRpb25zIHtcblxuICAvKipcbiAgICogQ0lEUiBNYXNrIGZvciBWcGNcbiAgICogT25seSByZXF1aXJlZCB3aGVuIHVzaW5nIEFXUyBJcGFtXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gbmV0bWFzayBsZW5ndGggZm9yIElQQU0gYXR0YWNoZWQgdG8gVlBDIHNlY29uZGFyeSBhZGRyZXNzXG4gICAqL1xuICByZWFkb25seSBuZXRtYXNrTGVuZ3RoPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBJcHY0IG9yIGFuIElwdjYgSVBBTSBwb29sXG4gICAqIE9ubHkgcmVxdWlyZWQgd2hlbiB1c2luZyBBV1MgSXBhbVxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIHBvb2wgYXR0YWNoZWQgdG8gVlBDIHNlY29uZGFyeSBhZGRyZXNzXG4gICAqL1xuICByZWFkb25seSBpcGFtUG9vbD86IElJcGFtUG9vbDtcblxuICAvKipcbiAgICogUmVxdWlyZWQgdG8gc2V0IFNlY29uZGFyeSBjaWRyIGJsb2NrIHJlc291cmNlIG5hbWVcbiAgICogaW4gb3JkZXIgdG8gZ2VuZXJhdGUgdW5pcXVlIGxvZ2ljYWwgaWQgZm9yIHRoZSByZXNvdXJjZS5cbiAgICovXG4gIHJlYWRvbmx5IGNpZHJCbG9ja05hbWU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBJbnRlcmZhY2UgZm9yIElwYW1TY29wZSBDbGFzc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIElJcGFtU2NvcGVCYXNlIHtcblxuICAvKipcbiAgICogUmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IHNjb3BlIG9mIHN0YWNrIHRvIGJlIHBhc3NlZCBpbiBvcmRlciB0byBjcmVhdGVcbiAgICogYSBuZXcgSVBBTSBwb29sXG4gICAqL1xuICByZWFkb25seSBzY29wZTogQ29uc3RydWN0O1xuXG4gIC8qKlxuICAgKiBEZWZhdWx0IFNjb3BlIGlkcyBjcmVhdGVkIGJ5IHRoZSBJUEFNIG9yIGEgbmV3IFJlc291cmNlIGlkXG4gICAqL1xuICByZWFkb25seSBzY29wZUlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIERlZmluZXMgc2NvcGUgdHlwZSBjYW4gYmUgZWl0aGVyIGRlZmF1bHQgb3IgY3VzdG9tXG4gICAqL1xuICByZWFkb25seSBzY29wZVR5cGU/OiBJcGFtU2NvcGVUeXBlO1xuXG4gIC8qKlxuICAgKiBGdW5jdGlvbiB0byBhZGQgYSBuZXcgcG9vbCB0byBhbiBJUEFNIHNjb3BlXG4gICAqL1xuICBhZGRQb29sKGlkOiBzdHJpbmcsIG9wdGlvbnM6IFBvb2xPcHRpb25zKTogSUlwYW1Qb29sO1xuXG59XG5cbi8qKlxuICogQ3JlYXRlcyBuZXcgSVBBTSBQb29sXG4gKiBQb29scyBlbmFibGUgeW91IHRvIG9yZ2FuaXplIHlvdXIgSVAgYWRkcmVzc2VzIGFjY29yZGluZyB0byB5b3VyIHJvdXRpbmcgYW5kIHNlY3VyaXR5IG5lZWRzXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1yZXNvdXJjZS1lYzItaXBhbXBvb2wuaHRtbFxuICogQHJlc291cmNlIEFXUzo6RUMyOjpJUEFNUG9vbFxuICogQGludGVybmFsXG4gKi9cbkBwcm9wZXJ0eUluamVjdGFibGVcbmNsYXNzIElwYW1Qb29sIGV4dGVuZHMgUmVzb3VyY2UgaW1wbGVtZW50cyBJSXBhbVBvb2wge1xuICAvKiogVW5pcXVlbHkgaWRlbnRpZmllcyB0aGlzIGNsYXNzLiAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFBST1BFUlRZX0lOSkVDVElPTl9JRDogc3RyaW5nID0gJ0Bhd3MtY2RrLmF3cy1lYzItYWxwaGEuSXBhbVBvb2wnO1xuICAvKipcbiAgICogUG9vbCBJRCB0byBiZSBwYXNzZWQgdG8gdGhlIFZQQyBjb25zdHJ1Y3RcbiAgICogQGF0dHJpYnV0ZSBJcGFtUG9vbElkXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgaXBhbVBvb2xJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQb29sIENJRFIgZm9yIElQdjYgdG8gYmUgcHJvdmlzaW9uZWQgd2l0aCBQdWJsaWMgSVAgc291cmNlIHNldCB0byAnQW1hem9uJ1xuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGlwYW1DaWRyczogQ2ZuSVBBTVBvb2xDaWRyW10gPSBbXTtcblxuICAvKipcbiAgICogUG9vbCBDSURSIGZvciBJUHY0IHRvIGJlIHByb3Zpc2lvbmVkIHVzaW5nIElQQU1cbiAgICogUmVxdWlyZWQgdG8gY2hlY2sgZm9yIHN1Ym5ldCBJUCByYW5nZSBpcyB3aXRoaW4gdGhlIFZQQyByYW5nZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGlwYW1JcHY0Q2lkcnM6IHN0cmluZ1tdID0gW107XG5cbiAgLyoqXG4gICAqIFJlZmVyZW5jZSB0byBpcGFtUG9vbCByZXNvdXJjZSBjcmVhdGVkIGluIHRoaXMgY2xhc3NcbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgX2lwYW1Qb29sOiBDZm5JUEFNUG9vbDtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogSXBhbVBvb2xQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgcGh5c2ljYWxOYW1lOiBwcm9wcy5pcGFtUG9vbE5hbWUgPz8gTGF6eS5zdHJpbmcoe1xuICAgICAgICBwcm9kdWNlOiAoKSA9PiBOYW1lcy51bmlxdWVSZXNvdXJjZU5hbWUodGhpcywgeyBtYXhMZW5ndGg6IDEyOCwgYWxsb3dlZFNwZWNpYWxDaGFyYWN0ZXJzOiAnXycgfSksXG4gICAgICB9KSxcbiAgICB9KTtcbiAgICAvLyBFbmhhbmNlZCBDREsgQW5hbHl0aWNzIFRlbGVtZXRyeVxuICAgIGFkZENvbnN0cnVjdE1ldGFkYXRhKHRoaXMsIHByb3BzKTtcblxuICAgIGlmIChwcm9wcy5hZGRyZXNzRmFtaWx5ID09PSBBZGRyZXNzRmFtaWx5LklQX1Y2ICYmICFwcm9wcy5hd3NTZXJ2aWNlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2F3c1NlcnZpY2UgaXMgcmVxdWlyZWQgd2hlbiBhZGRyZXNzRmFtaWx5IGlzIHNldCB0byBpcHY2Jyk7XG4gICAgfVxuXG4gICAgLy8gQWRkIHRhZ3MgdG8gdGhlIElQQU0gUG9vbCBpZiBuYW1lIGlzIHByb3ZpZGVkXG4gICAgaWYgKHByb3BzLmlwYW1Qb29sTmFtZSkge1xuICAgICAgVGFncy5vZih0aGlzKS5hZGQoTkFNRV9UQUcsIHByb3BzLmlwYW1Qb29sTmFtZSk7XG4gICAgfVxuXG4gICAgdGhpcy5faXBhbVBvb2wgPSBuZXcgQ2ZuSVBBTVBvb2wodGhpcywgaWQsIHtcbiAgICAgIGFkZHJlc3NGYW1pbHk6IHByb3BzLmFkZHJlc3NGYW1pbHksXG4gICAgICBwcm92aXNpb25lZENpZHJzOiBwcm9wcy5pcHY0UHJvdmlzaW9uZWRDaWRycz8ubWFwKGNpZHIgPT4gKHsgY2lkciB9KSksXG4gICAgICBsb2NhbGU6IHByb3BzLmxvY2FsZSxcbiAgICAgIGlwYW1TY29wZUlkOiBwcm9wcy5pcGFtU2NvcGVJZCxcbiAgICAgIHB1YmxpY0lwU291cmNlOiBwcm9wcy5wdWJsaWNJcFNvdXJjZSxcbiAgICAgIGF3c1NlcnZpY2U6IHByb3BzLmF3c1NlcnZpY2UsXG4gICAgfSk7XG4gICAgdGhpcy5pcGFtUG9vbElkID0gdGhpcy5faXBhbVBvb2wuYXR0cklwYW1Qb29sSWQ7XG5cbiAgICAvLyBQb3B1bGF0aW5nIHRvIGNoZWNrIGZvciBzdWJuZXQgcmFuZ2UgYWdhaW5zdCBhbGwgSVB2NCByYW5nZXMgYXNzaWduZWQgdG8gVlBDIGluY2x1ZGluZyBJUEFNXG4gICAgcHJvcHMuaXB2NFByb3Zpc2lvbmVkQ2lkcnM/Lm1hcChjaWRyID0+ICh0aGlzLmlwYW1JcHY0Q2lkcnMucHVzaChjaWRyKSkpO1xuICAgIHRoaXMubm9kZS5kZWZhdWx0Q2hpbGQgPSB0aGlzLl9pcGFtUG9vbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBBIENJRFIgcHJvdmlzaW9uZWQgdG8gYW4gSVBBTSBwb29sLlxuICAgKiBAcGFyYW0gaWQgTmFtZSBvZiBSZXNvdXJjZVxuICAgKiBAcGFyYW0gb3B0aW9ucyBFaXRoZXIgYSBDSURSIG9yIG5ldG1hc2sgbGVuZ3RoIG11c3QgYmUgcHJvdmlkZWRcbiAgICogQHJldHVybnMgQVdTOjpFQzI6OklQQU1Qb29sQ2lkclxuICAgKi9cbiAgQE1ldGhvZE1ldGFkYXRhKClcbiAgcHVibGljIHByb3Zpc2lvbkNpZHIoaWQ6IHN0cmluZywgb3B0aW9uczogSXBhbVBvb2xDaWRyUHJvdmlzaW9uaW5nT3B0aW9ucyk6IENmbklQQU1Qb29sQ2lkciB7XG4gICAgY29uc3QgY2lkciA9IG5ldyBDZm5JUEFNUG9vbENpZHIodGhpcywgaWQsIHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBpcGFtUG9vbElkOiB0aGlzLmlwYW1Qb29sSWQsXG4gICAgfSk7XG4gICAgdGhpcy5pcGFtQ2lkcnMucHVzaChjaWRyKTtcbiAgICByZXR1cm4gY2lkcjtcbiAgfVxufVxuXG4vKipcbiAqIENyZWF0ZXMgY3VzdG9tIElwYW0gU2NvcGUsIGN1c3RvbSBJUEFNIHNjb3BlcyBjYW4gb25seSBiZSBwcml2YXRlXG4gKiAoY2FuIGJlIHVzZWQgZm9yIGFkZGluZyBjdXN0b20gc2NvcGVzIHRvIGFuIGV4aXN0aW5nIElQQU0pXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1yZXNvdXJjZS1lYzItaXBhbXNjb3BlLmh0bWxcbiAqIEByZXNvdXJjZSBBV1M6OkVDMjo6SVBBTVNjb3BlXG4gKi9cbkBwcm9wZXJ0eUluamVjdGFibGVcbmNsYXNzIElwYW1TY29wZSBleHRlbmRzIFJlc291cmNlIGltcGxlbWVudHMgSUlwYW1TY29wZUJhc2Uge1xuICAvKiogVW5pcXVlbHkgaWRlbnRpZmllcyB0aGlzIGNsYXNzLiAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFBST1BFUlRZX0lOSkVDVElPTl9JRDogc3RyaW5nID0gJ0Bhd3MtY2RrLmF3cy1lYzItYWxwaGEuSXBhbVNjb3BlJztcbiAgLyoqXG4gICAqIFN0b3JlcyB0aGUgcmVmZXJlbmNlIHRvIG5ld2x5IGNyZWF0ZWQgUmVzb3VyY2VcbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgX2lwYW1TY29wZTogQ2ZuSVBBTVNjb3BlO1xuXG4gIC8qKlxuICAgKiBJRCBmb3IgUmVzb3VyY2UgSXBhbVNjb3BlXG4gICAqIEBhdHRyaWJ1dGUgSXBhbVNjb3BlSWRcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBzY29wZUlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFByb3BlcnRpZXMgdG8gY29uZmlndXJlIGlwYW0gc2NvcGVcbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgcHJvcHM6IElwYW1TY29wZVByb3BzO1xuXG4gIC8qKlxuICAgKiBSZWZlcmVuY2UgdG8gc3RhY2sgc2NvcGUgdG8gYmUgcGFzc2VkIHRocm91Z2ggYWRkUG9vbCBtZXRob2QgaW5vcmRlciB0byBjcmVhdGUgYSBuZXcgSXBhbVBvb2xcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBzY29wZTogQ29uc3RydWN0O1xuXG4gIC8qKlxuICAgKiBEZWZpbmVzIHNjb3BlIHR5cGUgY2FuIGJlIGVpdGhlciBkZWZhdWx0IG9yIGN1c3RvbVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHNjb3BlVHlwZTogSXBhbVNjb3BlVHlwZTtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogSXBhbVNjb3BlUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuICAgIC8vIEVuaGFuY2VkIENESyBBbmFseXRpY3MgVGVsZW1ldHJ5XG4gICAgYWRkQ29uc3RydWN0TWV0YWRhdGEodGhpcywgcHJvcHMpO1xuICAgIHRoaXMuX2lwYW1TY29wZSA9IG5ldyBDZm5JUEFNU2NvcGUoc2NvcGUsICdJcGFtU2NvcGUnLCB7XG4gICAgICBpcGFtSWQ6IHByb3BzLmlwYW1JZCxcbiAgICB9KTtcbiAgICBUYWdzLm9mKHRoaXMuX2lwYW1TY29wZSkuYWRkKE5BTUVfVEFHLCBwcm9wcy5pcGFtU2NvcGVOYW1lID8/ICdDdXN0b21JcGFtU2NvcGUnKTtcbiAgICB0aGlzLnNjb3BlSWQgPSB0aGlzLl9pcGFtU2NvcGUuYXR0cklwYW1TY29wZUlkO1xuICAgIHRoaXMuc2NvcGVUeXBlID0gSXBhbVNjb3BlVHlwZS5DVVNUT007XG4gICAgdGhpcy5zY29wZSA9IHNjb3BlO1xuICAgIHRoaXMucHJvcHMgPSBwcm9wcztcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgcG9vbCB0byB0aGUgSVBBTSBzY29wZS5cbiAgICogQGV4dGVybmFsXG4gICAqL1xuICBhZGRQb29sKGlkOiBzdHJpbmcsIG9wdGlvbnM6IFBvb2xPcHRpb25zKTogSUlwYW1Qb29sIHtcbiAgICByZXR1cm4gY3JlYXRlSXBhbVBvb2wodGhpcy5zY29wZSwgaWQsIHRoaXMucHJvcHMsIG9wdGlvbnMsIHRoaXMuc2NvcGVJZCk7XG4gIH1cbn1cblxuLyoqXG4gKiBCYXNlIGNsYXNzIGZvciBJUEFNIGRlZmF1bHQgc2NvcGVzLlxuICovXG5jbGFzcyBJcGFtU2NvcGVCYXNlIGltcGxlbWVudHMgSUlwYW1TY29wZUJhc2Uge1xuICBjb25zdHJ1Y3RvcihcbiAgICByZWFkb25seSBzY29wZTogQ29uc3RydWN0LFxuICAgIHJlYWRvbmx5IHNjb3BlSWQ6IHN0cmluZyxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHByb3BzOiBJcGFtU2NvcGVQcm9wcyxcbiAgICByZWFkb25seSBzY29wZVR5cGU/OiBJcGFtU2NvcGVUeXBlLFxuICApIHtcbiAgICB0aGlzLnNjb3BlVHlwZSA9IElwYW1TY29wZVR5cGUuREVGQVVMVDtcbiAgICBpZiAoIXByb3BzLmlwYW1TY29wZUlkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2lwYW1TY29wZUlkIGlzIHJlcXVpcmVkJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2NvcGVJZCA9IHByb3BzLmlwYW1TY29wZUlkO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgcG9vbCB0byB0aGUgSVBBTSBzY29wZS5cbiAgICogQGV4dGVybmFsXG4gICAqL1xuICBhZGRQb29sKGlkOiBzdHJpbmcsIG9wdGlvbnM6IFBvb2xPcHRpb25zKTogSUlwYW1Qb29sIHtcbiAgICByZXR1cm4gY3JlYXRlSXBhbVBvb2wodGhpcy5zY29wZSwgaWQsIHRoaXMucHJvcHMsIG9wdGlvbnMsIHRoaXMuc2NvcGVJZCk7XG4gIH1cbn1cblxuLyoqXG4gKiBDcmVhdGVzIG5ldyBJUEFNIHdpdGggZGVmYXVsdCBwdWJsaWMgYW5kIHByaXZhdGUgc2NvcGVcbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXJlc291cmNlLWVjMi1pcGFtc2NvcGUuaHRtbFxuICogQHJlc291cmNlIEFXUzo6RUMyOjpJUEFNXG4gKi9cbkBwcm9wZXJ0eUluamVjdGFibGVcbmV4cG9ydCBjbGFzcyBJcGFtIGV4dGVuZHMgUmVzb3VyY2Uge1xuICAvKiogVW5pcXVlbHkgaWRlbnRpZmllcyB0aGlzIGNsYXNzLiAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFBST1BFUlRZX0lOSkVDVElPTl9JRDogc3RyaW5nID0gJ0Bhd3MtY2RrLmF3cy1lYzItYWxwaGEuSXBhbSc7XG4gIC8qKlxuICAgKiBQcm92aWRlcyBhY2Nlc3MgdG8gZGVmYXVsdCBwdWJsaWMgSVBBTSBzY29wZSB0aHJvdWdoIGFkZCBwb29sIG1ldGhvZC5cbiAgICogVXNhZ2U6IFRvIGFkZCBhbiBJcGFtIFBvb2wgdG8gYSBkZWZhdWx0IHB1YmxpYyBzY29wZVxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1yZXNvdXJjZS1lYzItaXBhbXNjb3BlLmh0bWxcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBwdWJsaWNTY29wZTogSUlwYW1TY29wZUJhc2U7XG5cbiAgLyoqXG4gICAqIFByb3ZpZGVzIGFjY2VzcyB0byBkZWZhdWx0IHByaXZhdGUgSVBBTSBzY29wZSB0aHJvdWdoIGFkZCBwb29sIG1ldGhvZC5cbiAgICogVXNhZ2U6IFRvIGFkZCBhbiBJcGFtIFBvb2wgdG8gYSBkZWZhdWx0IHByaXZhdGUgc2NvcGVcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcmVzb3VyY2UtZWMyLWlwYW1zY29wZS5odG1sXG4gICAqICovXG4gIHB1YmxpYyByZWFkb25seSBwcml2YXRlU2NvcGU6IElJcGFtU2NvcGVCYXNlO1xuXG4gIC8vIFJlc291cmNlIElQQU1cbiAgcHJpdmF0ZSByZWFkb25seSBfaXBhbTogQ2ZuSVBBTTtcbiAgLyoqXG4gICAqIEFjY2VzcyB0byBJcGFtIHJlc291cmNlIGlkIHRoYXQgY2FuIGJlIHVzZWQgbGF0ZXIgdG8gYWRkIGEgY3VzdG9tIHByaXZhdGUgc2NvcGUgdG8gdGhpcyBJUEFNXG4gICAqIEBhdHRyaWJ1dGUgSXBhbUlkXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgaXBhbUlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIExpc3Qgb2Ygb3BlcmF0aW5nIHJlZ2lvbnMgZm9yIElQQU1cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBvcGVyYXRpbmdSZWdpb25zOiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogTGlzdCBvZiBzY29wZXMgY3JlYXRlZCB1bmRlciB0aGlzIElQQU1cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBzY29wZXM6IElJcGFtU2NvcGVCYXNlW10gPSBbXTtcblxuICAvKipcbiAgICogSVBBTSBuYW1lIHRvIGJlIHVzZWQgZm9yIHRhZ2dpbmdcbiAgICogQGRlZmF1bHQgbm8gdGFnIHNwZWNpZmllZFxuICAgKiBAYXR0cmlidXRlIElwYW1OYW1lXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgaXBhbU5hbWU/OiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM/OiBJcGFtUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuICAgIC8vIEVuaGFuY2VkIENESyBBbmFseXRpY3MgVGVsZW1ldHJ5XG4gICAgYWRkQ29uc3RydWN0TWV0YWRhdGEodGhpcywgcHJvcHMpO1xuICAgIGlmIChwcm9wcz8uaXBhbU5hbWUpIHtcbiAgICAgIFRhZ3Mub2YodGhpcykuYWRkKE5BTUVfVEFHLCBwcm9wcy5pcGFtTmFtZSk7XG4gICAgfVxuICAgIGlmIChwcm9wcz8ub3BlcmF0aW5nUmVnaW9ucyAmJiAocHJvcHMub3BlcmF0aW5nUmVnaW9ucy5sZW5ndGggPT09IDApKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BsZWFzZSBwcm92aWRlIGF0IGxlYXN0IG9uZSBvcGVyYXRpbmcgcmVnaW9uJyk7XG4gICAgfVxuXG4gICAgdGhpcy5vcGVyYXRpbmdSZWdpb25zID0gcHJvcHM/Lm9wZXJhdGluZ1JlZ2lvbnMgPz8gW1N0YWNrLm9mKHRoaXMpLnJlZ2lvbl07XG4gICAgdGhpcy5pcGFtTmFtZSA9IHByb3BzPy5pcGFtTmFtZTtcblxuICAgIHRoaXMuX2lwYW0gPSBuZXcgQ2ZuSVBBTSh0aGlzLCAnSXBhbScsIHtcbiAgICAgIG9wZXJhdGluZ1JlZ2lvbnM6IHRoaXMub3BlcmF0aW5nUmVnaW9ucyA/IHRoaXMub3BlcmF0aW5nUmVnaW9ucy5tYXAocmVnaW9uID0+ICh7IHJlZ2lvbk5hbWU6IHJlZ2lvbiB9KSkgOiBbXSxcbiAgICB9KTtcbiAgICB0aGlzLm5vZGUuZGVmYXVsdENoaWxkID0gdGhpcy5faXBhbTtcblxuICAgIHRoaXMuaXBhbUlkID0gdGhpcy5faXBhbS5hdHRySXBhbUlkO1xuICAgIHRoaXMucHVibGljU2NvcGUgPSBuZXcgSXBhbVNjb3BlQmFzZSh0aGlzLCAnRGVmYXVsdFB1YmxpY1Njb3BlJywge1xuICAgICAgaXBhbU9wZXJhdGluZ1JlZ2lvbnM6IHRoaXMub3BlcmF0aW5nUmVnaW9ucyxcbiAgICAgIGlwYW1JZDogdGhpcy5faXBhbS5hdHRySXBhbUlkLFxuICAgICAgaXBhbVNjb3BlSWQ6IHRoaXMuX2lwYW0uYXR0clB1YmxpY0RlZmF1bHRTY29wZUlkLFxuICAgIH0pO1xuICAgIHRoaXMucHJpdmF0ZVNjb3BlID0gbmV3IElwYW1TY29wZUJhc2UodGhpcywgJ0RlZmF1bHRQcml2YXRlU2NvcGUnLCB7XG4gICAgICBpcGFtT3BlcmF0aW5nUmVnaW9uczogdGhpcy5vcGVyYXRpbmdSZWdpb25zLFxuICAgICAgaXBhbUlkOiB0aGlzLl9pcGFtLmF0dHJJcGFtSWQsXG4gICAgICBpcGFtU2NvcGVJZDogdGhpcy5faXBhbS5hdHRyUHJpdmF0ZURlZmF1bHRTY29wZUlkLFxuICAgIH0pO1xuXG4gICAgdGhpcy5zY29wZXMucHVzaCh0aGlzLnB1YmxpY1Njb3BlLCB0aGlzLnByaXZhdGVTY29wZSk7XG4gIH1cblxuICAvKipcbiAgICogRnVuY3Rpb24gdG8gYWRkIGN1c3RvbSBzY29wZSB0byBhbiBleGlzdGluZyBJUEFNXG4gICAqIEN1c3RvbSBzY29wZXMgY2FuIG9ubHkgYmUgcHJpdmF0ZVxuICAgKi9cbiAgQE1ldGhvZE1ldGFkYXRhKClcbiAgcHVibGljIGFkZFNjb3BlKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIG9wdGlvbnM6IElwYW1TY29wZU9wdGlvbnMpOiBJSXBhbVNjb3BlQmFzZSB7XG4gICAgY29uc3QgaXBhbVNjb3BlID0gbmV3IElwYW1TY29wZShzY29wZSwgaWQsIHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBpcGFtSWQ6IHRoaXMuaXBhbUlkLFxuICAgICAgaXBhbU9wZXJhdGluZ1JlZ2lvbnM6IHRoaXMub3BlcmF0aW5nUmVnaW9ucyxcbiAgICB9KTtcbiAgICB0aGlzLnNjb3Blcy5wdXNoKGlwYW1TY29wZSk7XG4gICAgcmV0dXJuIGlwYW1TY29wZTtcbiAgfVxufVxuXG4vKipcbiAqIEZ1bmN0aW9uIHRvIGNyZWF0ZSBJcGFtUG9vbCB1bmRlciBzY29wZVxuICogQGludGVybmFsXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUlwYW1Qb29sKFxuICBzY29wZTogQ29uc3RydWN0LFxuICBpZDogc3RyaW5nLFxuICBzY29wZU9wdGlvbnM6IElwYW1TY29wZVByb3BzLFxuICBwb29sT3B0aW9uczogUG9vbE9wdGlvbnMsXG4gIHNjb3BlSWQ6IHN0cmluZyxcbik6IElwYW1Qb29sIHtcbiAgLy8gT25seSBjaGVjayBsb2NhbGUgaWYgaXQncyBwcm92aWRlZCBzaW5jZSBpdCdzIGFuIG9wdGlvbmFsIGZpZWxkXG4gIGlmIChwb29sT3B0aW9ucy5sb2NhbGUpIHtcbiAgICBjb25zdCBpc0xvY2FsZUluT3BlcmF0aW5nUmVnaW9ucyA9IHNjb3BlT3B0aW9ucy5pcGFtT3BlcmF0aW5nUmVnaW9uc1xuICAgICAgPyBzY29wZU9wdGlvbnMuaXBhbU9wZXJhdGluZ1JlZ2lvbnMubWFwKHJlZ2lvbiA9PiAoeyByZWdpb25OYW1lOiByZWdpb24gfSkpXG4gICAgICAgIC5zb21lKHJlZ2lvbiA9PiByZWdpb24ucmVnaW9uTmFtZSA9PT0gcG9vbE9wdGlvbnMubG9jYWxlKVxuICAgICAgOiBmYWxzZTtcblxuICAgIGlmICghaXNMb2NhbGVJbk9wZXJhdGluZ1JlZ2lvbnMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlIHByb3ZpZGVkIGxvY2FsZSAnJHtwb29sT3B0aW9ucy5sb2NhbGV9JyBpcyBub3QgaW4gdGhlIG9wZXJhdGluZyByZWdpb25zICgke3Njb3BlT3B0aW9ucy5pcGFtT3BlcmF0aW5nUmVnaW9uc30pLiBgICtcbiAgICAgICAgJ0lmIHNwZWNpZmllZCwgbG9jYWxlIG11c3QgYmUgY29uZmlndXJlZCBhcyBhbiBvcGVyYXRpbmcgcmVnaW9uIGZvciB0aGUgSVBBTS4nKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3IElwYW1Qb29sKHNjb3BlLCBpZCwge1xuICAgIGlwYW1Qb29sTmFtZTogcG9vbE9wdGlvbnMuaXBhbVBvb2xOYW1lLFxuICAgIGFkZHJlc3NGYW1pbHk6IHBvb2xPcHRpb25zLmFkZHJlc3NGYW1pbHksXG4gICAgaXB2NFByb3Zpc2lvbmVkQ2lkcnM6IHBvb2xPcHRpb25zLmlwdjRQcm92aXNpb25lZENpZHJzLFxuICAgIGlwYW1TY29wZUlkOiBzY29wZUlkLFxuICAgIGxvY2FsZTogcG9vbE9wdGlvbnMubG9jYWxlLFxuICAgIHB1YmxpY0lwU291cmNlOiBwb29sT3B0aW9ucy5wdWJsaWNJcFNvdXJjZSxcbiAgICBhd3NTZXJ2aWNlOiBwb29sT3B0aW9ucy5hd3NTZXJ2aWNlLFxuICB9KTtcbn1cbiJdfQ==
447
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXBhbS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImlwYW0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsaURBQTBGO0FBRTFGLDZDQUFpRTtBQUNqRSw4RUFBOEY7QUFDOUYsMEVBQTBFO0FBRTFFOzs7OztHQUtHO0FBQ0gsSUFBWSxhQVlYO0FBWkQsV0FBWSxhQUFhO0lBQ3ZCOzs7T0FHRztJQUNILCtCQUFjLENBQUE7SUFFZDs7O09BR0c7SUFDSCwrQkFBYyxDQUFBO0FBQ2hCLENBQUMsRUFaVyxhQUFhLDZCQUFiLGFBQWEsUUFZeEI7QUFFRDs7OztHQUlHO0FBQ0gsSUFBWSxzQkFVWDtBQVZELFdBQVksc0JBQXNCO0lBQ2hDOztPQUVHO0lBQ0gseUNBQWUsQ0FBQTtJQUVmOztPQUVHO0lBQ0gsMkNBQWlCLENBQUE7QUFDbkIsQ0FBQyxFQVZXLHNCQUFzQixzQ0FBdEIsc0JBQXNCLFFBVWpDO0FBRUQ7O0dBRUc7QUFDSCxJQUFZLGNBS1g7QUFMRCxXQUFZLGNBQWM7SUFDeEI7O09BRUc7SUFDSCw2QkFBVyxDQUFBO0FBQ2IsQ0FBQyxFQUxXLGNBQWMsOEJBQWQsY0FBYyxRQUt6QjtBQXlCRDs7R0FFRztBQUNILElBQVksYUFVWDtBQVZELFdBQVksYUFBYTtJQUN2Qjs7T0FFRztJQUNILG9DQUFtQixDQUFBO0lBRW5COztPQUVHO0lBQ0gsa0NBQWlCLENBQUE7QUFDbkIsQ0FBQyxFQVZXLGFBQWEsNkJBQWIsYUFBYSxRQVV4QjtBQTRERCxNQUFNLFFBQVEsR0FBVyxNQUFNLENBQUM7QUE4SmhDOzs7Ozs7R0FNRztJQUVHLFFBQVE7NEJBRGIsb0NBQWtCOzs7O3NCQUNJLHNCQUFROzs7d0JBQWhCLFNBQVEsV0FBUTs7Ozt5Q0FnRTVCLElBQUEsa0NBQWMsR0FBRTtZQUNqQiwwTEFBTyxhQUFhLDZEQU9uQjtZQXhFSCw2S0F5RUM7Ozs7UUF4RUMsc0NBQXNDO1FBQy9C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QWMsQ0FDckIsS0FBZ0IsRUFDaEIsRUFBVSxFQUNWLFlBQTRCLEVBQzVCLFdBQXdCLEVBQ3hCLE9BQWU7SUFFZixrRUFBa0U7SUFDbEUsSUFBSSxXQUFXLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDdkIsTUFBTSwwQkFBMEIsR0FBRyxZQUFZLENBQUMsb0JBQW9CO1lBQ2xFLENBQUMsQ0FBQyxZQUFZLENBQUMsb0JBQW9CLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO2lCQUN4RSxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsVUFBVSxLQUFLLFdBQVcsQ0FBQyxNQUFNLENBQUM7WUFDM0QsQ0FBQyxDQUFDLEtBQUssQ0FBQztRQUVWLElBQUksQ0FBQywwQkFBMEIsRUFBRSxDQUFDO1lBQ2hDLE1BQU0sSUFBSSxLQUFLLENBQUMsd0JBQXdCLFdBQVcsQ0FBQyxNQUFNLHNDQUFzQyxZQUFZLENBQUMsb0JBQW9CLEtBQUs7Z0JBQ3BJLDhFQUE4RSxDQUFDLENBQUM7UUFDcEYsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLElBQUksUUFBUSxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUU7UUFDN0IsWUFBWSxFQUFFLFdBQVcsQ0FBQyxZQUFZO1FBQ3RDLGFBQWEsRUFBRSxXQUFXLENBQUMsYUFBYTtRQUN4QyxvQkFBb0IsRUFBRSxXQUFXLENBQUMsb0JBQW9CO1FBQ3RELFdBQVcsRUFBRSxPQUFPO1FBQ3BCLE1BQU0sRUFBRSxXQUFXLENBQUMsTUFBTTtRQUMxQixjQUFjLEVBQUUsV0FBVyxDQUFDLGNBQWM7UUFDMUMsVUFBVSxFQUFFLFdBQVcsQ0FBQyxVQUFVO0tBQ25DLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDZm5JUEFNLCBDZm5JUEFNUG9vbCwgQ2ZuSVBBTVBvb2xDaWRyLCBDZm5JUEFNU2NvcGUgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZWMyJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgTGF6eSwgTmFtZXMsIFJlc291cmNlLCBTdGFjaywgVGFncyB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IGFkZENvbnN0cnVjdE1ldGFkYXRhLCBNZXRob2RNZXRhZGF0YSB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL21ldGFkYXRhLXJlc291cmNlJztcbmltcG9ydCB7IHByb3BlcnR5SW5qZWN0YWJsZSB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL3Byb3AtaW5qZWN0YWJsZSc7XG5cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgYWRkcmVzcyBmYW1pbHkgZm9yIElQIGFkZHJlc3NlcyBpbiBhbiBJUEFNIHBvb2wuXG4gKiBJUF9WNCAtIFJlcHJlc2VudHMgdGhlIElQdjQgYWRkcmVzcyBmYW1pbHkuXG4gKiBJUF9WNiAtIFJlcHJlc2VudHMgdGhlIElQdjYgYWRkcmVzcyBmYW1pbHkuXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1yZXNvdXJjZS1lYzItaXBhbXBvb2wuaHRtbCNjZm4tZWMyLWlwYW1wb29sLWFkZHJlc3NmYW1pbHlcbiAqL1xuZXhwb3J0IGVudW0gQWRkcmVzc0ZhbWlseSB7XG4gIC8qKlxuICAgKiBSZXByZXNlbnRzIHRoZSBJUHY0IGFkZHJlc3MgZmFtaWx5LlxuICAgKiBBbGxvd2VkIHVuZGVyIHB1YmxpYyBhbmQgcHJpdmF0ZSBwb29sLlxuICAgKi9cbiAgSVBfVjQgPSAnaXB2NCcsXG5cbiAgLyoqXG4gICAqIFJlcHJlc2VudHMgdGhlIElQdjYgYWRkcmVzcyBmYW1pbHkuXG4gICAqIE9ubHkgYWxsb3dlZCB1bmRlciBwdWJsaWMgcG9vbC5cbiAgICovXG4gIElQX1Y2ID0gJ2lwdjYnLFxufVxuXG4vKipcbiAqIFRoZSBJUCBhZGRyZXNzIHNvdXJjZSBmb3IgcG9vbHMgaW4gdGhlIHB1YmxpYyBzY29wZS5cbiAqIE9ubHkgdXNlZCBmb3IgcHJvdmlzaW9uaW5nIElQIGFkZHJlc3MgQ0lEUnMgdG8gcG9vbHMgaW4gdGhlIHB1YmxpYyBzY29wZS5cbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXJlc291cmNlLWVjMi1pcGFtcG9vbC5odG1sI2Nmbi1lYzItaXBhbXBvb2wtcHVibGljaXBzb3VyY2VcbiAqL1xuZXhwb3J0IGVudW0gSXBhbVBvb2xQdWJsaWNJcFNvdXJjZSB7XG4gIC8qKlxuICAgKiBCWU9JUCBJcHY2IHRvIGJlIHJlZ2lzdGVyZWQgdW5kZXIgSVBBTVxuICAgKi9cbiAgQllPSVAgPSAnYnlvaXAnLFxuXG4gIC8qKlxuICAgKiBBbWF6b24gUHJvdmlkZWQgSXB2NiByYW5nZVxuICAgKi9cbiAgQU1BWk9OID0gJ2FtYXpvbicsXG59XG5cbi8qKlxuICogTGltaXRzIHdoaWNoIHNlcnZpY2UgaW4gQVdTIHRoYXQgdGhlIHBvb2wgY2FuIGJlIHVzZWQgaW5cbiAqL1xuZXhwb3J0IGVudW0gQXdzU2VydmljZU5hbWUge1xuICAvKipcbiAgICogIEFsbG93cyB1c2VycyB0byB1c2Ugc3BhY2UgZm9yIEVsYXN0aWMgSVAgYWRkcmVzc2VzIGFuZCBWUENzXG4gICAqL1xuICBFQzIgPSAnZWMyJyxcbn1cblxuLyoqXG4gKiBPcHRpb25zIHRvIGNyZWF0ZSBhIG5ldyBJcGFtIGluIHRoZSBhY2NvdW50XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSXBhbVByb3BzIHtcblxuICAvKipcbiAgICogVGhlIG9wZXJhdGluZyBSZWdpb25zIGZvciBhbiBJUEFNLlxuICAgKiBPcGVyYXRpbmcgUmVnaW9ucyBhcmUgQVdTIFJlZ2lvbnMgd2hlcmUgdGhlIElQQU0gaXMgYWxsb3dlZCB0byBtYW5hZ2UgSVAgYWRkcmVzcyBDSURSc1xuICAgKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBvcGVyYXRpbmcgUmVnaW9ucywgc2VlIFtDcmVhdGUgYW4gSVBBTV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tLy92cGMvbGF0ZXN0L2lwYW0vY3JlYXRlLWlwYW0uaHRtbCkgaW4gdGhlICpBbWF6b24gVlBDIElQQU0gVXNlciBHdWlkZSogLlxuICAgKiBAc2VlIGh0dHA6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXJlc291cmNlLWVjMi1pcGFtLmh0bWwjY2ZuLWVjMi1pcGFtLW9wZXJhdGluZ3JlZ2lvbnNcbiAgICpcbiAgICogQGRlZmF1bHQgLSBTdGFjay5yZWdpb24gaWYgZGVmaW5lZCBpbiB0aGUgc3RhY2tcbiAgICovXG4gIHJlYWRvbmx5IG9wZXJhdGluZ1JlZ2lvbnM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogTmFtZSBvZiBJUEFNIHRoYXQgY2FuIGJlIHVzZWQgZm9yIHRhZ2dpbmcgcmVzb3VyY2VcbiAgICpcbiAgICogQGRlZmF1bHQgLSBJZiBubyBuYW1lIHByb3ZpZGVkLCBubyB0YWdzIHdpbGwgYmUgYWRkZWQgdG8gdGhlIElQQU1cbiAgICovXG4gIHJlYWRvbmx5IGlwYW1OYW1lPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJlZmVycyB0byB0d28gcG9zc2libGUgc2NvcGUgdHlwZXMgdW5kZXIgSVBBTVxuICovXG5leHBvcnQgZW51bSBJcGFtU2NvcGVUeXBlIHtcbiAgLyoqXG4gICAqIERlZmF1bHQgc2NvcGVzIGNyZWF0ZWQgYnkgSVBBTVxuICAgKi9cbiAgREVGQVVMVCA9ICdkZWZhdWx0JyxcblxuICAvKipcbiAgICogQ3VzdG9tIHNjb3BlIGNyZWF0ZWQgdXNpbmcgbWV0aG9kXG4gICAqL1xuICBDVVNUT00gPSAnY3VzdG9tJyxcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBjb25maWd1cmluZyBhbiBJUEFNIHBvb2wuXG4gKlxuICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcmVzb3VyY2UtZWMyLWlwYW1wb29sLmh0bWxcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQb29sT3B0aW9ucyB7XG5cbiAgLyoqXG4gICAqIGFkZHJlc3NGYW1pbHkgLSBUaGUgYWRkcmVzcyBmYW1pbHkgb2YgdGhlIHBvb2wgKGlwdjQgb3IgaXB2NikuXG4gICAqL1xuICByZWFkb25seSBhZGRyZXNzRmFtaWx5OiBBZGRyZXNzRmFtaWx5O1xuXG4gIC8qKlxuICAgKiBJbmZvcm1hdGlvbiBhYm91dCB0aGUgQ0lEUnMgcHJvdmlzaW9uZWQgdG8gdGhlIHBvb2wuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm8gQ0lEUnMgYXJlIHByb3Zpc2lvbmVkXG4gICAqL1xuICByZWFkb25seSBpcHY0UHJvdmlzaW9uZWRDaWRycz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgbG9jYWxlIChBV1MgUmVnaW9uKSBvZiB0aGUgcG9vbC4gU2hvdWxkIGJlIG9uZSBvZiB0aGUgSVBBTSBvcGVyYXRpbmcgcmVnaW9uLlxuICAgKiAgT25seSByZXNvdXJjZXMgaW4gdGhlIHNhbWUgUmVnaW9uIGFzIHRoZSBsb2NhbGUgb2YgdGhlIHBvb2wgY2FuIGdldCBJUCBhZGRyZXNzIGFsbG9jYXRpb25zIGZyb20gdGhlIHBvb2wuXG4gICAqIFlvdSBjYW4gb25seSBhbGxvY2F0ZSBhIENJRFIgZm9yIGEgVlBDLCBmb3IgZXhhbXBsZSwgZnJvbSBhbiBJUEFNIHBvb2wgdGhhdCBzaGFyZXMgYSBsb2NhbGUgd2l0aCB0aGUgVlBD4oCZcyBSZWdpb24uXG4gICAqIE5vdGUgdGhhdCBvbmNlIHlvdSBjaG9vc2UgYSBMb2NhbGUgZm9yIGEgcG9vbCwgeW91IGNhbm5vdCBtb2RpZnkgaXQuIElmIHlvdSBjaG9vc2UgYW4gQVdTIFJlZ2lvbiBmb3IgbG9jYWxlIHRoYXQgaGFzIG5vdCBiZWVuIGNvbmZpZ3VyZWQgYXMgYW4gb3BlcmF0aW5nIFJlZ2lvbiBmb3IgdGhlIElQQU0sIHlvdSdsbCBnZXQgYW4gZXJyb3IuXG4gICAqIEBzZWUgaHR0cDovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcmVzb3VyY2UtZWMyLWlwYW1wb29sLmh0bWwjY2ZuLWVjMi1pcGFtcG9vbC1sb2NhbGVcbiAgICpcbiAgICogQGRlZmF1bHQgLSBDdXJyZW50IG9wZXJhdGluZyByZWdpb24gb2YgSVBBTVxuICAgKi9cbiAgcmVhZG9ubHkgbG9jYWxlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgSVAgYWRkcmVzcyBzb3VyY2UgZm9yIHBvb2xzIGluIHRoZSBwdWJsaWMgc2NvcGUuXG4gICAqIE9ubHkgdXNlZCBmb3IgSVB2NiBhZGRyZXNzXG4gICAqIE9ubHkgYWxsb3dlZCB2YWx1ZXMgdG8gdGhpcyBhcmUgJ2J5b2lwJyBvciAnYW1hem9uJ1xuICAgKlxuICAgKiBAZGVmYXVsdCBhbWF6b25cbiAgICovXG4gIHJlYWRvbmx5IHB1YmxpY0lwU291cmNlPzogSXBhbVBvb2xQdWJsaWNJcFNvdXJjZTtcblxuICAvKipcbiAgICogTGltaXRzIHdoaWNoIHNlcnZpY2UgaW4gQVdTIHRoYXQgdGhlIHBvb2wgY2FuIGJlIHVzZWQgaW4uXG4gICAqXG4gICAqIFwiZWMyXCIsIGZvciBleGFtcGxlLCBhbGxvd3MgdXNlcnMgdG8gdXNlIHNwYWNlIGZvciBFbGFzdGljIElQIGFkZHJlc3NlcyBhbmQgVlBDcy5cbiAgICpcbiAgICogQHNlZSBodHRwOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1yZXNvdXJjZS1lYzItaXBhbXBvb2wuaHRtbCNjZm4tZWMyLWlwYW1wb29sLWF3c3NlcnZpY2VcbiAgICpcbiAgICogQGRlZmF1bHQgLSByZXF1aXJlZCBpbiBjYXNlIG9mIGFuIElQdjYsIHRocm93cyBhbiBlcnJvciBpZiBub3QgcHJvdmlkZWQuXG4gICAqL1xuICByZWFkb25seSBhd3NTZXJ2aWNlPzogQXdzU2VydmljZU5hbWU7XG5cbiAgLyoqXG4gICAqIElQQU0gUG9vbCByZXNvdXJjZSBuYW1lIHRvIGJlIHVzZWQgZm9yIHRhZ2dpbmdcbiAgICpcbiAgICogQGRlZmF1bHQgLSBhdXRvZ2VuZXJhdGVkIGJ5IENESyBpZiBub3QgcHJvdmlkZWRcbiAgICovXG4gIHJlYWRvbmx5IGlwYW1Qb29sTmFtZT86IHN0cmluZztcbn1cblxuY29uc3QgTkFNRV9UQUc6IHN0cmluZyA9ICdOYW1lJztcblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBjcmVhdGluZyBhbiBJUEFNIHBvb2wuXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1yZXNvdXJjZS1lYzItaXBhbXBvb2wuaHRtbFxuICovXG5pbnRlcmZhY2UgSXBhbVBvb2xQcm9wcyBleHRlbmRzIFBvb2xPcHRpb25zIHtcbiAgLyoqXG4gICAqIFNjb3BlIGlkIHdoZXJlIHBvb2wgbmVlZHMgdG8gYmUgY3JlYXRlZFxuICAgKi9cbiAgcmVhZG9ubHkgaXBhbVNjb3BlSWQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBPcHRpb25zIHRvIHByb3Zpc2lvbiBDSURScyB0byBhbiBJUEFNIHBvb2wuXG4gKiBVc2VkIHRvIGNyZWF0ZSBhIG5ldyBJcGFtUG9vbENpZHJcbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXJlc291cmNlLWVjMi1pcGFtcG9vbGNpZHIuaHRtbFxuICovXG5leHBvcnQgaW50ZXJmYWNlIElwYW1Qb29sQ2lkclByb3Zpc2lvbmluZ09wdGlvbnMge1xuICAvKipcbiAgICogSXB2NiBOZXRtYXNrIGxlbmd0aCBmb3IgdGhlIENJRFJcbiAgICpcbiAgICogQGRlZmF1bHQgLSBwb29sIHByb3Zpc2lvbmVkIHdpdGhvdXQgbmV0bWFzayBsZW5ndGgsIG5lZWQgY2lkciByYW5nZSBpbiB0aGlzIGNhc2VcbiAgICovXG4gIHJlYWRvbmx5IG5ldG1hc2tMZW5ndGg/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIElwdjYgQ0lEUiBibG9jayBmb3IgdGhlIElQQU0gcG9vbFxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHBvb2wgcHJvdmlzaW9uZWQgd2l0aG91dCBuZXRtYXNrIGxlbmd0aCwgbmVlZCBuZXRtYXNrIGxlbmd0aCBpbiB0aGlzIGNhc2VcbiAgICovXG4gIHJlYWRvbmx5IGNpZHI/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogRGVmaW5pdGlvbiB1c2VkIHRvIGFkZCBvciBjcmVhdGUgYSBuZXcgSVBBTSBwb29sXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUlwYW1Qb29sIHtcbiAgLyoqXG4gICAqIFBvb2wgSUQgdG8gYmUgcGFzc2VkIHRvIHRoZSBWUEMgY29uc3RydWN0XG4gICAqIEBhdHRyaWJ1dGUgSXBhbVBvb2xJZFxuICAgKi9cbiAgcmVhZG9ubHkgaXBhbVBvb2xJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQb29sIENJRFIgZm9yIElQdjYgdG8gYmUgcHJvdmlzaW9uZWQgd2l0aCBQdWJsaWMgSVAgc291cmNlIHNldCB0byAnQW1hem9uJ1xuICAgKi9cbiAgcmVhZG9ubHkgaXBhbUNpZHJzOiBDZm5JUEFNUG9vbENpZHJbXTtcblxuICAvKipcbiAgICogUG9vbCBDSURSIGZvciBJUHY0IHRvIGJlIHByb3Zpc2lvbmVkIHVzaW5nIElQQU1cbiAgICogUmVxdWlyZWQgdG8gY2hlY2sgZm9yIHN1Ym5ldCBJUCByYW5nZSBpcyB3aXRoaW4gdGhlIFZQQyByYW5nZVxuICAgKi9cbiAgcmVhZG9ubHkgaXBhbUlwdjRDaWRycz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBGdW5jdGlvbiB0byBhc3NvY2lhdGUgYSBJUHY2IGFkZHJlc3Mgd2l0aCBJUEFNIHBvb2xcbiAgICovXG4gIHByb3Zpc2lvbkNpZHIoaWQ6IHN0cmluZywgb3B0aW9uczogSXBhbVBvb2xDaWRyUHJvdmlzaW9uaW5nT3B0aW9ucyk6IENmbklQQU1Qb29sQ2lkcjtcblxufVxuXG4vKipcbiAqIElQQU0gc2NvcGUgaXMgdGhlIGhpZ2hlc3QtbGV2ZWwgY29udGFpbmVyIHdpdGhpbiBJUEFNLiBBbiBJUEFNIGNvbnRhaW5zIHR3byBkZWZhdWx0IHNjb3Blcy5cbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXJlc291cmNlLWVjMi1pcGFtc2NvcGUuaHRtbFxuICovXG5pbnRlcmZhY2UgSXBhbVNjb3BlUHJvcHMgZXh0ZW5kcyBJcGFtU2NvcGVPcHRpb25zIHtcbiAgLyoqXG4gICAqIElQQU0gaWQgdG8gd2hpY2ggc2NvcGUgbmVlZHMgdG8gYmUgYWRkZWRcbiAgICovXG4gIHJlYWRvbmx5IGlwYW1JZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBPcGVyYXRpbmcgcmVnaW9ucyBmb3IgdGhlIElwYW1cbiAgICogUmVxdWlyZWQgaW4gb3JkZXIgdG8gdmFsaWRhdGUgdGhlIGxvY2FsZSBiZWluZyBzZXQgb24gcG9vbFxuICAgKi9cbiAgcmVhZG9ubHkgaXBhbU9wZXJhdGluZ1JlZ2lvbnM6IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBDdXN0b20gaXBhbSBzY29wZSBpZCB0byBhZGQgYSBwb29sIGluIG9yZGVyIHRvIHN1cHBvcnQgZGVmYXVsdCBzY29wZXNcbiAgICpcbiAgICogQGRlZmF1bHQgLSB0aHJvd3MgYW4gZXJyb3IgaWYgbm8gc2NvcGUgaWQgaXMgcHJvdmlkZWRcbiAgICovXG4gIHJlYWRvbmx5IGlwYW1TY29wZUlkPzogc3RyaW5nO1xuXG59XG5cbi8qKlxuICogQmVpbmcgdXNlZCBpbiBJUEFNIGNsYXNzIHRvIGFkZCBwb29scyB0byBkZWZhdWx0IHNjb3BlIGNyZWF0ZWQgYnkgSVBBTS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJcGFtU2NvcGVPcHRpb25zIHtcblxuICAvKipcbiAgICogSVBBTSBzY29wZSBuYW1lIHRoYXQgd2lsbCBiZSB1c2VkIGZvciB0YWdnaW5nXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gdGFncyB3aWxsIGJlIGFkZGVkIHRvIHRoZSBzY29wZVxuICAgKi9cbiAgcmVhZG9ubHkgaXBhbVNjb3BlTmFtZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBjb25maWd1cmluZyBhbiBJUCBBZGRyZXNzIE1hbmFnZXIgKElQQU0pLlxuICpcbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgdGhlIHtAbGluayBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcmVzb3VyY2UtZWMyLWlwYW0uaHRtbH0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSXBhbU9wdGlvbnMge1xuXG4gIC8qKlxuICAgKiBDSURSIE1hc2sgZm9yIFZwY1xuICAgKiBPbmx5IHJlcXVpcmVkIHdoZW4gdXNpbmcgQVdTIElwYW1cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBuZXRtYXNrIGxlbmd0aCBmb3IgSVBBTSBhdHRhY2hlZCB0byBWUEMgc2Vjb25kYXJ5IGFkZHJlc3NcbiAgICovXG4gIHJlYWRvbmx5IG5ldG1hc2tMZW5ndGg/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIElwdjQgb3IgYW4gSXB2NiBJUEFNIHBvb2xcbiAgICogT25seSByZXF1aXJlZCB3aGVuIHVzaW5nIEFXUyBJcGFtXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gcG9vbCBhdHRhY2hlZCB0byBWUEMgc2Vjb25kYXJ5IGFkZHJlc3NcbiAgICovXG4gIHJlYWRvbmx5IGlwYW1Qb29sPzogSUlwYW1Qb29sO1xuXG4gIC8qKlxuICAgKiBSZXF1aXJlZCB0byBzZXQgU2Vjb25kYXJ5IGNpZHIgYmxvY2sgcmVzb3VyY2UgbmFtZVxuICAgKiBpbiBvcmRlciB0byBnZW5lcmF0ZSB1bmlxdWUgbG9naWNhbCBpZCBmb3IgdGhlIHJlc291cmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgY2lkckJsb2NrTmFtZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIEludGVyZmFjZSBmb3IgSXBhbVNjb3BlIENsYXNzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUlwYW1TY29wZUJhc2Uge1xuXG4gIC8qKlxuICAgKiBSZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgc2NvcGUgb2Ygc3RhY2sgdG8gYmUgcGFzc2VkIGluIG9yZGVyIHRvIGNyZWF0ZVxuICAgKiBhIG5ldyBJUEFNIHBvb2xcbiAgICovXG4gIHJlYWRvbmx5IHNjb3BlOiBDb25zdHJ1Y3Q7XG5cbiAgLyoqXG4gICAqIERlZmF1bHQgU2NvcGUgaWRzIGNyZWF0ZWQgYnkgdGhlIElQQU0gb3IgYSBuZXcgUmVzb3VyY2UgaWRcbiAgICovXG4gIHJlYWRvbmx5IHNjb3BlSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogRGVmaW5lcyBzY29wZSB0eXBlIGNhbiBiZSBlaXRoZXIgZGVmYXVsdCBvciBjdXN0b21cbiAgICovXG4gIHJlYWRvbmx5IHNjb3BlVHlwZT86IElwYW1TY29wZVR5cGU7XG5cbiAgLyoqXG4gICAqIEZ1bmN0aW9uIHRvIGFkZCBhIG5ldyBwb29sIHRvIGFuIElQQU0gc2NvcGVcbiAgICovXG4gIGFkZFBvb2woaWQ6IHN0cmluZywgb3B0aW9uczogUG9vbE9wdGlvbnMpOiBJSXBhbVBvb2w7XG5cbn1cblxuLyoqXG4gKiBDcmVhdGVzIG5ldyBJUEFNIFBvb2xcbiAqIFBvb2xzIGVuYWJsZSB5b3UgdG8gb3JnYW5pemUgeW91ciBJUCBhZGRyZXNzZXMgYWNjb3JkaW5nIHRvIHlvdXIgcm91dGluZyBhbmQgc2VjdXJpdHkgbmVlZHNcbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXJlc291cmNlLWVjMi1pcGFtcG9vbC5odG1sXG4gKiBAcmVzb3VyY2UgQVdTOjpFQzI6OklQQU1Qb29sXG4gKiBAaW50ZXJuYWxcbiAqL1xuQHByb3BlcnR5SW5qZWN0YWJsZVxuY2xhc3MgSXBhbVBvb2wgZXh0ZW5kcyBSZXNvdXJjZSBpbXBsZW1lbnRzIElJcGFtUG9vbCB7XG4gIC8qKiBVbmlxdWVseSBpZGVudGlmaWVzIHRoaXMgY2xhc3MuICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUFJPUEVSVFlfSU5KRUNUSU9OX0lEOiBzdHJpbmcgPSAnQGF3cy1jZGsuYXdzLWVjMi1hbHBoYS5JcGFtUG9vbCc7XG4gIC8qKlxuICAgKiBQb29sIElEIHRvIGJlIHBhc3NlZCB0byB0aGUgVlBDIGNvbnN0cnVjdFxuICAgKiBAYXR0cmlidXRlIElwYW1Qb29sSWRcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBpcGFtUG9vbElkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFBvb2wgQ0lEUiBmb3IgSVB2NiB0byBiZSBwcm92aXNpb25lZCB3aXRoIFB1YmxpYyBJUCBzb3VyY2Ugc2V0IHRvICdBbWF6b24nXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgaXBhbUNpZHJzOiBDZm5JUEFNUG9vbENpZHJbXSA9IFtdO1xuXG4gIC8qKlxuICAgKiBQb29sIENJRFIgZm9yIElQdjQgdG8gYmUgcHJvdmlzaW9uZWQgdXNpbmcgSVBBTVxuICAgKiBSZXF1aXJlZCB0byBjaGVjayBmb3Igc3VibmV0IElQIHJhbmdlIGlzIHdpdGhpbiB0aGUgVlBDIHJhbmdlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgaXBhbUlwdjRDaWRyczogc3RyaW5nW10gPSBbXTtcblxuICAvKipcbiAgICogUmVmZXJlbmNlIHRvIGlwYW1Qb29sIHJlc291cmNlIGNyZWF0ZWQgaW4gdGhpcyBjbGFzc1xuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBfaXBhbVBvb2w6IENmbklQQU1Qb29sO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBJcGFtUG9vbFByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCB7XG4gICAgICBwaHlzaWNhbE5hbWU6IHByb3BzLmlwYW1Qb29sTmFtZSA/PyBMYXp5LnN0cmluZyh7XG4gICAgICAgIHByb2R1Y2U6ICgpID0+IE5hbWVzLnVuaXF1ZVJlc291cmNlTmFtZSh0aGlzLCB7IG1heExlbmd0aDogMTI4LCBhbGxvd2VkU3BlY2lhbENoYXJhY3RlcnM6ICdfJyB9KSxcbiAgICAgIH0pLFxuICAgIH0pO1xuICAgIC8vIEVuaGFuY2VkIENESyBBbmFseXRpY3MgVGVsZW1ldHJ5XG4gICAgYWRkQ29uc3RydWN0TWV0YWRhdGEodGhpcywgcHJvcHMpO1xuXG4gICAgaWYgKHByb3BzLmFkZHJlc3NGYW1pbHkgPT09IEFkZHJlc3NGYW1pbHkuSVBfVjYgJiYgIXByb3BzLmF3c1NlcnZpY2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignYXdzU2VydmljZSBpcyByZXF1aXJlZCB3aGVuIGFkZHJlc3NGYW1pbHkgaXMgc2V0IHRvIGlwdjYnKTtcbiAgICB9XG5cbiAgICAvLyBBZGQgdGFncyB0byB0aGUgSVBBTSBQb29sIGlmIG5hbWUgaXMgcHJvdmlkZWRcbiAgICBpZiAocHJvcHMuaXBhbVBvb2xOYW1lKSB7XG4gICAgICBUYWdzLm9mKHRoaXMpLmFkZChOQU1FX1RBRywgcHJvcHMuaXBhbVBvb2xOYW1lKTtcbiAgICB9XG5cbiAgICB0aGlzLl9pcGFtUG9vbCA9IG5ldyBDZm5JUEFNUG9vbCh0aGlzLCBpZCwge1xuICAgICAgYWRkcmVzc0ZhbWlseTogcHJvcHMuYWRkcmVzc0ZhbWlseSxcbiAgICAgIHByb3Zpc2lvbmVkQ2lkcnM6IHByb3BzLmlwdjRQcm92aXNpb25lZENpZHJzPy5tYXAoY2lkciA9PiAoeyBjaWRyIH0pKSxcbiAgICAgIGxvY2FsZTogcHJvcHMubG9jYWxlLFxuICAgICAgaXBhbVNjb3BlSWQ6IHByb3BzLmlwYW1TY29wZUlkLFxuICAgICAgcHVibGljSXBTb3VyY2U6IHByb3BzLnB1YmxpY0lwU291cmNlLFxuICAgICAgYXdzU2VydmljZTogcHJvcHMuYXdzU2VydmljZSxcbiAgICB9KTtcbiAgICB0aGlzLmlwYW1Qb29sSWQgPSB0aGlzLl9pcGFtUG9vbC5hdHRySXBhbVBvb2xJZDtcblxuICAgIC8vIFBvcHVsYXRpbmcgdG8gY2hlY2sgZm9yIHN1Ym5ldCByYW5nZSBhZ2FpbnN0IGFsbCBJUHY0IHJhbmdlcyBhc3NpZ25lZCB0byBWUEMgaW5jbHVkaW5nIElQQU1cbiAgICBwcm9wcy5pcHY0UHJvdmlzaW9uZWRDaWRycz8ubWFwKGNpZHIgPT4gKHRoaXMuaXBhbUlwdjRDaWRycy5wdXNoKGNpZHIpKSk7XG4gICAgdGhpcy5ub2RlLmRlZmF1bHRDaGlsZCA9IHRoaXMuX2lwYW1Qb29sO1xuICB9XG5cbiAgLyoqXG4gICAqIEEgQ0lEUiBwcm92aXNpb25lZCB0byBhbiBJUEFNIHBvb2wuXG4gICAqIEBwYXJhbSBpZCBOYW1lIG9mIFJlc291cmNlXG4gICAqIEBwYXJhbSBvcHRpb25zIEVpdGhlciBhIENJRFIgb3IgbmV0bWFzayBsZW5ndGggbXVzdCBiZSBwcm92aWRlZFxuICAgKiBAcmV0dXJucyBBV1M6OkVDMjo6SVBBTVBvb2xDaWRyXG4gICAqL1xuICBATWV0aG9kTWV0YWRhdGEoKVxuICBwdWJsaWMgcHJvdmlzaW9uQ2lkcihpZDogc3RyaW5nLCBvcHRpb25zOiBJcGFtUG9vbENpZHJQcm92aXNpb25pbmdPcHRpb25zKTogQ2ZuSVBBTVBvb2xDaWRyIHtcbiAgICBjb25zdCBjaWRyID0gbmV3IENmbklQQU1Qb29sQ2lkcih0aGlzLCBpZCwge1xuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIGlwYW1Qb29sSWQ6IHRoaXMuaXBhbVBvb2xJZCxcbiAgICB9KTtcbiAgICB0aGlzLmlwYW1DaWRycy5wdXNoKGNpZHIpO1xuICAgIHJldHVybiBjaWRyO1xuICB9XG59XG5cbi8qKlxuICogQ3JlYXRlcyBjdXN0b20gSXBhbSBTY29wZSwgY3VzdG9tIElQQU0gc2NvcGVzIGNhbiBvbmx5IGJlIHByaXZhdGVcbiAqIChjYW4gYmUgdXNlZCBmb3IgYWRkaW5nIGN1c3RvbSBzY29wZXMgdG8gYW4gZXhpc3RpbmcgSVBBTSlcbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXJlc291cmNlLWVjMi1pcGFtc2NvcGUuaHRtbFxuICogQHJlc291cmNlIEFXUzo6RUMyOjpJUEFNU2NvcGVcbiAqL1xuQHByb3BlcnR5SW5qZWN0YWJsZVxuY2xhc3MgSXBhbVNjb3BlIGV4dGVuZHMgUmVzb3VyY2UgaW1wbGVtZW50cyBJSXBhbVNjb3BlQmFzZSB7XG4gIC8qKiBVbmlxdWVseSBpZGVudGlmaWVzIHRoaXMgY2xhc3MuICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUFJPUEVSVFlfSU5KRUNUSU9OX0lEOiBzdHJpbmcgPSAnQGF3cy1jZGsuYXdzLWVjMi1hbHBoYS5JcGFtU2NvcGUnO1xuICAvKipcbiAgICogU3RvcmVzIHRoZSByZWZlcmVuY2UgdG8gbmV3bHkgY3JlYXRlZCBSZXNvdXJjZVxuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBfaXBhbVNjb3BlOiBDZm5JUEFNU2NvcGU7XG5cbiAgLyoqXG4gICAqIElEIGZvciBSZXNvdXJjZSBJcGFtU2NvcGVcbiAgICogQGF0dHJpYnV0ZSBJcGFtU2NvcGVJZFxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHNjb3BlSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogUHJvcGVydGllcyB0byBjb25maWd1cmUgaXBhbSBzY29wZVxuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBwcm9wczogSXBhbVNjb3BlUHJvcHM7XG5cbiAgLyoqXG4gICAqIFJlZmVyZW5jZSB0byBzdGFjayBzY29wZSB0byBiZSBwYXNzZWQgdGhyb3VnaCBhZGRQb29sIG1ldGhvZCBpbm9yZGVyIHRvIGNyZWF0ZSBhIG5ldyBJcGFtUG9vbFxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHNjb3BlOiBDb25zdHJ1Y3Q7XG5cbiAgLyoqXG4gICAqIERlZmluZXMgc2NvcGUgdHlwZSBjYW4gYmUgZWl0aGVyIGRlZmF1bHQgb3IgY3VzdG9tXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgc2NvcGVUeXBlOiBJcGFtU2NvcGVUeXBlO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBJcGFtU2NvcGVQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG4gICAgLy8gRW5oYW5jZWQgQ0RLIEFuYWx5dGljcyBUZWxlbWV0cnlcbiAgICBhZGRDb25zdHJ1Y3RNZXRhZGF0YSh0aGlzLCBwcm9wcyk7XG4gICAgdGhpcy5faXBhbVNjb3BlID0gbmV3IENmbklQQU1TY29wZShzY29wZSwgJ0lwYW1TY29wZScsIHtcbiAgICAgIGlwYW1JZDogcHJvcHMuaXBhbUlkLFxuICAgIH0pO1xuICAgIFRhZ3Mub2YodGhpcy5faXBhbVNjb3BlKS5hZGQoTkFNRV9UQUcsIHByb3BzLmlwYW1TY29wZU5hbWUgPz8gJ0N1c3RvbUlwYW1TY29wZScpO1xuICAgIHRoaXMuc2NvcGVJZCA9IHRoaXMuX2lwYW1TY29wZS5hdHRySXBhbVNjb3BlSWQ7XG4gICAgdGhpcy5zY29wZVR5cGUgPSBJcGFtU2NvcGVUeXBlLkNVU1RPTTtcbiAgICB0aGlzLnNjb3BlID0gc2NvcGU7XG4gICAgdGhpcy5wcm9wcyA9IHByb3BzO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBwb29sIHRvIHRoZSBJUEFNIHNjb3BlLlxuICAgKiBAZXh0ZXJuYWxcbiAgICovXG4gIGFkZFBvb2woaWQ6IHN0cmluZywgb3B0aW9uczogUG9vbE9wdGlvbnMpOiBJSXBhbVBvb2wge1xuICAgIHJldHVybiBjcmVhdGVJcGFtUG9vbCh0aGlzLnNjb3BlLCBpZCwgdGhpcy5wcm9wcywgb3B0aW9ucywgdGhpcy5zY29wZUlkKTtcbiAgfVxufVxuXG4vKipcbiAqIEJhc2UgY2xhc3MgZm9yIElQQU0gZGVmYXVsdCBzY29wZXMuXG4gKi9cbmNsYXNzIElwYW1TY29wZUJhc2UgaW1wbGVtZW50cyBJSXBhbVNjb3BlQmFzZSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHJlYWRvbmx5IHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgcmVhZG9ubHkgc2NvcGVJZDogc3RyaW5nLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcHJvcHM6IElwYW1TY29wZVByb3BzLFxuICAgIHJlYWRvbmx5IHNjb3BlVHlwZT86IElwYW1TY29wZVR5cGUsXG4gICkge1xuICAgIHRoaXMuc2NvcGVUeXBlID0gSXBhbVNjb3BlVHlwZS5ERUZBVUxUO1xuICAgIGlmICghcHJvcHMuaXBhbVNjb3BlSWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignaXBhbVNjb3BlSWQgaXMgcmVxdWlyZWQnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zY29wZUlkID0gcHJvcHMuaXBhbVNjb3BlSWQ7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBwb29sIHRvIHRoZSBJUEFNIHNjb3BlLlxuICAgKiBAZXh0ZXJuYWxcbiAgICovXG4gIGFkZFBvb2woaWQ6IHN0cmluZywgb3B0aW9uczogUG9vbE9wdGlvbnMpOiBJSXBhbVBvb2wge1xuICAgIHJldHVybiBjcmVhdGVJcGFtUG9vbCh0aGlzLnNjb3BlLCBpZCwgdGhpcy5wcm9wcywgb3B0aW9ucywgdGhpcy5zY29wZUlkKTtcbiAgfVxufVxuXG4vKipcbiAqIENyZWF0ZXMgbmV3IElQQU0gd2l0aCBkZWZhdWx0IHB1YmxpYyBhbmQgcHJpdmF0ZSBzY29wZVxuICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcmVzb3VyY2UtZWMyLWlwYW1zY29wZS5odG1sXG4gKiBAcmVzb3VyY2UgQVdTOjpFQzI6OklQQU1cbiAqL1xuQHByb3BlcnR5SW5qZWN0YWJsZVxuZXhwb3J0IGNsYXNzIElwYW0gZXh0ZW5kcyBSZXNvdXJjZSB7XG4gIC8qKiBVbmlxdWVseSBpZGVudGlmaWVzIHRoaXMgY2xhc3MuICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUFJPUEVSVFlfSU5KRUNUSU9OX0lEOiBzdHJpbmcgPSAnQGF3cy1jZGsuYXdzLWVjMi1hbHBoYS5JcGFtJztcbiAgLyoqXG4gICAqIFByb3ZpZGVzIGFjY2VzcyB0byBkZWZhdWx0IHB1YmxpYyBJUEFNIHNjb3BlIHRocm91Z2ggYWRkIHBvb2wgbWV0aG9kLlxuICAgKiBVc2FnZTogVG8gYWRkIGFuIElwYW0gUG9vbCB0byBhIGRlZmF1bHQgcHVibGljIHNjb3BlXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXJlc291cmNlLWVjMi1pcGFtc2NvcGUuaHRtbFxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHB1YmxpY1Njb3BlOiBJSXBhbVNjb3BlQmFzZTtcblxuICAvKipcbiAgICogUHJvdmlkZXMgYWNjZXNzIHRvIGRlZmF1bHQgcHJpdmF0ZSBJUEFNIHNjb3BlIHRocm91Z2ggYWRkIHBvb2wgbWV0aG9kLlxuICAgKiBVc2FnZTogVG8gYWRkIGFuIElwYW0gUG9vbCB0byBhIGRlZmF1bHQgcHJpdmF0ZSBzY29wZVxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1yZXNvdXJjZS1lYzItaXBhbXNjb3BlLmh0bWxcbiAgICogKi9cbiAgcHVibGljIHJlYWRvbmx5IHByaXZhdGVTY29wZTogSUlwYW1TY29wZUJhc2U7XG5cbiAgLy8gUmVzb3VyY2UgSVBBTVxuICBwcml2YXRlIHJlYWRvbmx5IF9pcGFtOiBDZm5JUEFNO1xuICAvKipcbiAgICogQWNjZXNzIHRvIElwYW0gcmVzb3VyY2UgaWQgdGhhdCBjYW4gYmUgdXNlZCBsYXRlciB0byBhZGQgYSBjdXN0b20gcHJpdmF0ZSBzY29wZSB0byB0aGlzIElQQU1cbiAgICogQGF0dHJpYnV0ZSBJcGFtSWRcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBpcGFtSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogTGlzdCBvZiBvcGVyYXRpbmcgcmVnaW9ucyBmb3IgSVBBTVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IG9wZXJhdGluZ1JlZ2lvbnM6IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBMaXN0IG9mIHNjb3BlcyBjcmVhdGVkIHVuZGVyIHRoaXMgSVBBTVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHNjb3BlczogSUlwYW1TY29wZUJhc2VbXSA9IFtdO1xuXG4gIC8qKlxuICAgKiBJUEFNIG5hbWUgdG8gYmUgdXNlZCBmb3IgdGFnZ2luZ1xuICAgKiBAZGVmYXVsdCBubyB0YWcgc3BlY2lmaWVkXG4gICAqIEBhdHRyaWJ1dGUgSXBhbU5hbWVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBpcGFtTmFtZT86IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wcz86IElwYW1Qcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG4gICAgLy8gRW5oYW5jZWQgQ0RLIEFuYWx5dGljcyBUZWxlbWV0cnlcbiAgICBhZGRDb25zdHJ1Y3RNZXRhZGF0YSh0aGlzLCBwcm9wcyk7XG4gICAgaWYgKHByb3BzPy5pcGFtTmFtZSkge1xuICAgICAgVGFncy5vZih0aGlzKS5hZGQoTkFNRV9UQUcsIHByb3BzLmlwYW1OYW1lKTtcbiAgICB9XG4gICAgaWYgKHByb3BzPy5vcGVyYXRpbmdSZWdpb25zICYmIChwcm9wcy5vcGVyYXRpbmdSZWdpb25zLmxlbmd0aCA9PT0gMCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUGxlYXNlIHByb3ZpZGUgYXQgbGVhc3Qgb25lIG9wZXJhdGluZyByZWdpb24nKTtcbiAgICB9XG5cbiAgICB0aGlzLm9wZXJhdGluZ1JlZ2lvbnMgPSBwcm9wcz8ub3BlcmF0aW5nUmVnaW9ucyA/PyBbU3RhY2sub2YodGhpcykucmVnaW9uXTtcbiAgICB0aGlzLmlwYW1OYW1lID0gcHJvcHM/LmlwYW1OYW1lO1xuXG4gICAgdGhpcy5faXBhbSA9IG5ldyBDZm5JUEFNKHRoaXMsICdJcGFtJywge1xuICAgICAgb3BlcmF0aW5nUmVnaW9uczogdGhpcy5vcGVyYXRpbmdSZWdpb25zID8gdGhpcy5vcGVyYXRpbmdSZWdpb25zLm1hcChyZWdpb24gPT4gKHsgcmVnaW9uTmFtZTogcmVnaW9uIH0pKSA6IFtdLFxuICAgIH0pO1xuICAgIHRoaXMubm9kZS5kZWZhdWx0Q2hpbGQgPSB0aGlzLl9pcGFtO1xuXG4gICAgdGhpcy5pcGFtSWQgPSB0aGlzLl9pcGFtLmF0dHJJcGFtSWQ7XG4gICAgdGhpcy5wdWJsaWNTY29wZSA9IG5ldyBJcGFtU2NvcGVCYXNlKHRoaXMsICdEZWZhdWx0UHVibGljU2NvcGUnLCB7XG4gICAgICBpcGFtT3BlcmF0aW5nUmVnaW9uczogdGhpcy5vcGVyYXRpbmdSZWdpb25zLFxuICAgICAgaXBhbUlkOiB0aGlzLl9pcGFtLmF0dHJJcGFtSWQsXG4gICAgICBpcGFtU2NvcGVJZDogdGhpcy5faXBhbS5hdHRyUHVibGljRGVmYXVsdFNjb3BlSWQsXG4gICAgfSk7XG4gICAgdGhpcy5wcml2YXRlU2NvcGUgPSBuZXcgSXBhbVNjb3BlQmFzZSh0aGlzLCAnRGVmYXVsdFByaXZhdGVTY29wZScsIHtcbiAgICAgIGlwYW1PcGVyYXRpbmdSZWdpb25zOiB0aGlzLm9wZXJhdGluZ1JlZ2lvbnMsXG4gICAgICBpcGFtSWQ6IHRoaXMuX2lwYW0uYXR0cklwYW1JZCxcbiAgICAgIGlwYW1TY29wZUlkOiB0aGlzLl9pcGFtLmF0dHJQcml2YXRlRGVmYXVsdFNjb3BlSWQsXG4gICAgfSk7XG5cbiAgICB0aGlzLnNjb3Blcy5wdXNoKHRoaXMucHVibGljU2NvcGUsIHRoaXMucHJpdmF0ZVNjb3BlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGdW5jdGlvbiB0byBhZGQgY3VzdG9tIHNjb3BlIHRvIGFuIGV4aXN0aW5nIElQQU1cbiAgICogQ3VzdG9tIHNjb3BlcyBjYW4gb25seSBiZSBwcml2YXRlXG4gICAqL1xuICBATWV0aG9kTWV0YWRhdGEoKVxuICBwdWJsaWMgYWRkU2NvcGUoc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgb3B0aW9uczogSXBhbVNjb3BlT3B0aW9ucyk6IElJcGFtU2NvcGVCYXNlIHtcbiAgICBjb25zdCBpcGFtU2NvcGUgPSBuZXcgSXBhbVNjb3BlKHNjb3BlLCBpZCwge1xuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIGlwYW1JZDogdGhpcy5pcGFtSWQsXG4gICAgICBpcGFtT3BlcmF0aW5nUmVnaW9uczogdGhpcy5vcGVyYXRpbmdSZWdpb25zLFxuICAgIH0pO1xuICAgIHRoaXMuc2NvcGVzLnB1c2goaXBhbVNjb3BlKTtcbiAgICByZXR1cm4gaXBhbVNjb3BlO1xuICB9XG59XG5cbi8qKlxuICogRnVuY3Rpb24gdG8gY3JlYXRlIElwYW1Qb29sIHVuZGVyIHNjb3BlXG4gKiBAaW50ZXJuYWxcbiAqL1xuZnVuY3Rpb24gY3JlYXRlSXBhbVBvb2woXG4gIHNjb3BlOiBDb25zdHJ1Y3QsXG4gIGlkOiBzdHJpbmcsXG4gIHNjb3BlT3B0aW9uczogSXBhbVNjb3BlUHJvcHMsXG4gIHBvb2xPcHRpb25zOiBQb29sT3B0aW9ucyxcbiAgc2NvcGVJZDogc3RyaW5nLFxuKTogSXBhbVBvb2wge1xuICAvLyBPbmx5IGNoZWNrIGxvY2FsZSBpZiBpdCdzIHByb3ZpZGVkIHNpbmNlIGl0J3MgYW4gb3B0aW9uYWwgZmllbGRcbiAgaWYgKHBvb2xPcHRpb25zLmxvY2FsZSkge1xuICAgIGNvbnN0IGlzTG9jYWxlSW5PcGVyYXRpbmdSZWdpb25zID0gc2NvcGVPcHRpb25zLmlwYW1PcGVyYXRpbmdSZWdpb25zXG4gICAgICA/IHNjb3BlT3B0aW9ucy5pcGFtT3BlcmF0aW5nUmVnaW9ucy5tYXAocmVnaW9uID0+ICh7IHJlZ2lvbk5hbWU6IHJlZ2lvbiB9KSlcbiAgICAgICAgLnNvbWUocmVnaW9uID0+IHJlZ2lvbi5yZWdpb25OYW1lID09PSBwb29sT3B0aW9ucy5sb2NhbGUpXG4gICAgICA6IGZhbHNlO1xuXG4gICAgaWYgKCFpc0xvY2FsZUluT3BlcmF0aW5nUmVnaW9ucykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgcHJvdmlkZWQgbG9jYWxlICcke3Bvb2xPcHRpb25zLmxvY2FsZX0nIGlzIG5vdCBpbiB0aGUgb3BlcmF0aW5nIHJlZ2lvbnMgKCR7c2NvcGVPcHRpb25zLmlwYW1PcGVyYXRpbmdSZWdpb25zfSkuIGAgK1xuICAgICAgICAnSWYgc3BlY2lmaWVkLCBsb2NhbGUgbXVzdCBiZSBjb25maWd1cmVkIGFzIGFuIG9wZXJhdGluZyByZWdpb24gZm9yIHRoZSBJUEFNLicpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXcgSXBhbVBvb2woc2NvcGUsIGlkLCB7XG4gICAgaXBhbVBvb2xOYW1lOiBwb29sT3B0aW9ucy5pcGFtUG9vbE5hbWUsXG4gICAgYWRkcmVzc0ZhbWlseTogcG9vbE9wdGlvbnMuYWRkcmVzc0ZhbWlseSxcbiAgICBpcHY0UHJvdmlzaW9uZWRDaWRyczogcG9vbE9wdGlvbnMuaXB2NFByb3Zpc2lvbmVkQ2lkcnMsXG4gICAgaXBhbVNjb3BlSWQ6IHNjb3BlSWQsXG4gICAgbG9jYWxlOiBwb29sT3B0aW9ucy5sb2NhbGUsXG4gICAgcHVibGljSXBTb3VyY2U6IHBvb2xPcHRpb25zLnB1YmxpY0lwU291cmNlLFxuICAgIGF3c1NlcnZpY2U6IHBvb2xPcHRpb25zLmF3c1NlcnZpY2UsXG4gIH0pO1xufVxuIl19