cdk-import 0.2.158 → 0.2.159

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.
@@ -9,7 +9,11 @@ export declare class ServiceCatalogProvisioningConstructGenerator {
9
9
  private readonly resourceAttributes;
10
10
  private readonly constructClassName;
11
11
  private readonly propsStructName;
12
+ private readonly enums;
13
+ private readonly parameters;
14
+ private readonly defaultAttributes;
12
15
  private readonly outputKeys;
16
+ private readonly outputDescriptions;
13
17
  readonly name: string;
14
18
  /**
15
19
  * @param productData the aggregate details on a product with information on inputs and outputs of the template.
@@ -27,5 +31,8 @@ export declare class ServiceCatalogProvisioningConstructGenerator {
27
31
  private emitParameters;
28
32
  private emitParameterMap;
29
33
  private emitDefinitionTypes;
34
+ private resolveEnumValue;
35
+ private emitEnums;
36
+ private emitProductDescription;
30
37
  private emitConstructClass;
31
38
  }
@@ -40,17 +40,16 @@ class ServiceCatalogProvisioningConstructGenerator {
40
40
  this.propsStructName = j2j.TypeGenerator.normalizeTypeName(`${this.constructClassName}Props`);
41
41
  this.name = this.sanitizedTypeName;
42
42
  this.resourceAttributes = new Array();
43
- this.outputKeys = this.productDataAggregate.params.ProvisioningArtifactOutputKeys.map(key => key.Key);
43
+ this.enums = new Array();
44
+ this.parameters = this.productDataAggregate.params.ProvisioningArtifactParameters;
44
45
  this.hasParameters = this.productDataAggregate.params.ProvisioningArtifactParameters.length > 0;
45
- const attributeNames = [
46
- 'provisionedProductId',
47
- 'cloudFormationStackArn',
48
- 'recordId',
49
- ...this.outputKeys.map(case_1.camel),
50
- ];
51
- for (const attr of attributeNames) {
52
- this.resourceAttributes.push(attr);
53
- }
46
+ this.outputKeys = this.productDataAggregate.params.ProvisioningArtifactOutputKeys;
47
+ this.outputDescriptions = this.productDataAggregate.params.ProvisioningArtifactOutputKeys.reduce((obj, key) => {
48
+ obj[(0, case_1.camel)(key.Key)] = key.Description;
49
+ return obj;
50
+ }, {});
51
+ this.defaultAttributes = new Set(['provisionedProductId', 'cloudFormationStackArn', 'recordId']);
52
+ this.resourceAttributes.push(...this.defaultAttributes, ...this.outputKeys.map(key => (0, case_1.camel)(key.Key)));
54
53
  }
55
54
  /**
56
55
  * Render the type into a TypeScript class file defining the props and the wrapped L1 construct AWS::ServiceCatalog::CloudFormationProvisionedProduct.
@@ -67,6 +66,7 @@ class ServiceCatalogProvisioningConstructGenerator {
67
66
  this.emitDefinitionTypes(code);
68
67
  }
69
68
  this.emitConstructClass(code);
69
+ this.enums.length && this.emitEnums(code);
70
70
  return code.render();
71
71
  }
72
72
  emitImports(code) {
@@ -104,7 +104,7 @@ class ServiceCatalogProvisioningConstructGenerator {
104
104
  emitParameterMap(code) {
105
105
  var _a;
106
106
  code.openBlock('enum ParameterKeys');
107
- (_a = this.productDataAggregate.params.ProvisioningArtifactParameters) === null || _a === void 0 ? void 0 : _a.forEach(p => {
107
+ (_a = this.parameters) === null || _a === void 0 ? void 0 : _a.forEach(p => {
108
108
  code.line(`${(0, case_1.camel)(p.ParameterKey)} = '${p.ParameterKey}',`);
109
109
  });
110
110
  code.closeBlock();
@@ -122,38 +122,94 @@ class ServiceCatalogProvisioningConstructGenerator {
122
122
  }
123
123
  emitDefinitionTypes(code) {
124
124
  code.openBlock(`export interface ${this.constructClassName}Props`);
125
- this.productDataAggregate.params.ProvisioningArtifactParameters.forEach(pa => {
126
- var _a, _b, _c, _d;
125
+ this.parameters.forEach(pa => {
126
+ var _a, _b, _c, _d, _e, _f;
127
127
  let optional = '';
128
128
  code.line('/**');
129
- (pa.Description != undefined) ? code.line(` * ${pa.Description}`) : null;
129
+ code.line(` * ${(0, case_1.pascal)(pa.ParameterKey)}`);
130
+ if (pa.Description) {
131
+ code.line(' *');
132
+ code.line(` * ${pa.Description}`);
133
+ }
134
+ if ((_a = pa.ParameterConstraints) === null || _a === void 0 ? void 0 : _a.ConstraintDescription) {
135
+ code.line(' *');
136
+ code.line(` * ${(_b = pa.ParameterConstraints) === null || _b === void 0 ? void 0 : _b.ConstraintDescription}`);
137
+ }
130
138
  if (pa.DefaultValue) {
131
139
  optional += '?';
132
- (((_a = pa.ParameterConstraints) === null || _a === void 0 ? void 0 : _a.ConstraintDescription) != undefined) ? code.line(` * ${(_b = pa.ParameterConstraints) === null || _b === void 0 ? void 0 : _b.ConstraintDescription}`) : null;
133
140
  code.line(' *');
134
141
  code.line(` * @default ${pa.DefaultValue}`);
135
142
  }
143
+ if ((_d = (_c = pa.ParameterConstraints) === null || _c === void 0 ? void 0 : _c.AllowedValues) === null || _d === void 0 ? void 0 : _d.length) {
144
+ this.enums.push({
145
+ name: pa.ParameterKey,
146
+ allowedValues: pa.ParameterConstraints.AllowedValues,
147
+ });
148
+ }
149
+ ;
136
150
  code.line(' */');
137
- code.line(`readonly ${(0, case_1.camel)(pa.ParameterKey)}${optional}: ${((_d = (_c = pa.ParameterConstraints) === null || _c === void 0 ? void 0 : _c.AllowedValues) === null || _d === void 0 ? void 0 : _d.length) ? pa.ParameterKey : 'string'};`);
151
+ code.line(`readonly ${(0, case_1.camel)(pa.ParameterKey)}${optional}: ${((_f = (_e = pa.ParameterConstraints) === null || _e === void 0 ? void 0 : _e.AllowedValues) === null || _f === void 0 ? void 0 : _f.length) ? this.constructClassName + '.' + pa.ParameterKey : 'string'};`);
152
+ code.line();
153
+ });
154
+ code.closeBlock();
155
+ }
156
+ resolveEnumValue(val) {
157
+ if (Number(val)) {
158
+ return (0, case_1.constant)(`VALUE_${val}`);
159
+ }
160
+ else if (Number(val.charAt(0))) {
161
+ return `'${(0, case_1.constant)(val)}'`;
162
+ }
163
+ else {
164
+ return (0, case_1.constant)(val);
165
+ }
166
+ }
167
+ emitEnums(code) {
168
+ code.line();
169
+ code.openBlock(`export namespace ${this.constructClassName}`);
170
+ this.enums.forEach(e => {
171
+ code.line();
172
+ code.openBlock(`export enum ${e.name}`);
173
+ e.allowedValues.forEach(val => {
174
+ code.line('/**');
175
+ code.line(` * ${val}`);
176
+ code.line(' */');
177
+ code.line(`${this.resolveEnumValue(val)} = '${val}',`);
178
+ code.line();
179
+ });
180
+ code.closeBlock();
138
181
  code.line();
139
182
  });
140
183
  code.closeBlock();
141
184
  code.line();
142
185
  }
143
- emitConstructClass(code) {
144
- var _a;
186
+ emitProductDescription(code) {
187
+ const product = this.productDataAggregate.product;
145
188
  code.line('/**');
146
- code.line(` * A Service Catalog CloudFormation \`${this.sanitizedTypeName}\` product.`);
189
+ code.line(` * ${this.sanitizedTypeName}`);
147
190
  code.line(' *');
148
- code.line(' * @cloudformationResource AWS::ServiceCatalog::CloudFormationProvisionedProduct');
149
- code.line(' * @stability external');
191
+ if (product.ShortDescription) {
192
+ code.line(` * ${product.ShortDescription}`);
193
+ code.line(' *');
194
+ }
195
+ product.SupportDescription && code.line(` * ${product.SupportDescription}`);
196
+ product.SupportEmail && code.line(` * Support Email: ${product.SupportEmail}`);
197
+ product.SupportUrl && code.line(` * Support Url: ${product.SupportUrl}`);
198
+ product.Distributor && code.line(` * Distributor: ${product.Distributor}`);
199
+ product.Owner && code.line(` * Owner: ${product.Owner}`);
150
200
  code.line(' */');
201
+ }
202
+ emitConstructClass(code) {
203
+ var _a;
204
+ this.emitProductDescription(code);
151
205
  code.openBlock(`export class ${this.constructClassName} extends ${this.constructClassName}Base`);
152
206
  for (const prop of this.resourceAttributes) {
153
- code.line('/**');
154
- code.line(` * Attribute \`${this.sanitizedTypeName}.${prop}\``);
155
- code.line(' */');
156
- code.line(`public readonly ${(0, case_1.camel)(prop)}: string;`);
207
+ if (this.outputDescriptions[prop]) {
208
+ code.line('/**');
209
+ code.line(` * ${this.outputDescriptions[prop]}`);
210
+ code.line(' */');
211
+ }
212
+ code.line(`public readonly ${prop}: string;`);
157
213
  }
158
214
  code.line('private readonly provisionedProduct: sc.CfnCloudFormationProvisionedProduct;');
159
215
  code.line();
@@ -166,30 +222,40 @@ class ServiceCatalogProvisioningConstructGenerator {
166
222
  code.line(' * @param props - resource properties');
167
223
  }
168
224
  code.line(' */');
169
- if (this.hasParameters) {
170
- code.openBlock(`constructor(scope: constructs.Construct, id: string, props: ${this.propsStructName})`);
171
- }
172
- else {
173
- code.openBlock('constructor(scope: constructs.Construct, id: string)');
174
- }
225
+ code.openBlock(`constructor(scope: constructs.Construct, id: string${this.hasParameters ? ', props: ' + this.propsStructName : ''})`);
175
226
  code.line('super(scope, id);');
176
227
  code.line('');
177
228
  code.line("this.provisionedProduct = new sc.CfnCloudFormationProvisionedProduct(this, 'Resource', {");
178
229
  code.line(' provisionedProductName: this.node.id,');
179
- code.line(` provisioningArtifactName: '${this.productDataAggregate.provisioningArtifact.Name}',`);
180
- code.line(` productName: '${this.productDataAggregate.product.Name}',`);
230
+ if (this.productDataAggregate.provisioningArtifact.Name) {
231
+ code.line(` provisioningArtifactName: '${this.productDataAggregate.provisioningArtifact.Name}',`);
232
+ }
233
+ else {
234
+ code.line(` provisioningArtifactId: '${this.productDataAggregate.provisioningArtifact.Id}',`);
235
+ }
236
+ if (this.productDataAggregate.product.Name) {
237
+ code.line(` productName: '${this.productDataAggregate.product.Name}',`);
238
+ }
239
+ else {
240
+ code.line(` productId: '${this.productDataAggregate.product.ProductId}',`);
241
+ }
242
+ if (this.productDataAggregate.launchPath.Name) {
243
+ code.line(` pathName: '${this.productDataAggregate.launchPath.Name}',`);
244
+ }
245
+ else {
246
+ code.line(` pathId: '${this.productDataAggregate.launchPath.Id}',`);
247
+ }
181
248
  // generate provisioning parameters from props to avoid redundant defaults
182
249
  if (this.hasParameters) {
183
250
  this.emitParameters(code);
184
251
  }
185
- ;
186
252
  code.line('});');
187
253
  code.line();
188
254
  code.line('this.provisionedProductId = this.provisionedProduct.ref;');
189
255
  code.line("this.cloudFormationStackArn = cdk.Token.asString(cdk.Fn.getAtt(this.provisionedProduct.logicalId, 'CloudformationStackArn'));");
190
256
  code.line("this.recordId = cdk.Token.asString(cdk.Fn.getAtt(this.provisionedProduct.logicalId, 'RecordId'));");
191
257
  (_a = this.outputKeys) === null || _a === void 0 ? void 0 : _a.forEach(output => {
192
- code.line(`this.${(0, case_1.camel)(output)} = cdk.Token.asString(cdk.Fn.getAtt(this.provisionedProduct.logicalId, 'Outputs.${output}'));`);
258
+ code.line(`this.${(0, case_1.camel)(output.Key)} = cdk.Token.asString(cdk.Fn.getAtt(this.provisionedProduct.logicalId, 'Outputs.${output.Key}'));`);
193
259
  });
194
260
  code.closeBlock();
195
261
  // Close construct class
@@ -197,4 +263,4 @@ class ServiceCatalogProvisioningConstructGenerator {
197
263
  }
198
264
  }
199
265
  exports.ServiceCatalogProvisioningConstructGenerator = ServiceCatalogProvisioningConstructGenerator;
200
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtY29uc3RydWN0LWdlbmVyYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9zYy1jb25zdHJ1Y3QtZ2VuZXJhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsK0JBQXFDO0FBQ3JDLCtDQUFpQztBQUdqQzs7R0FFRztBQUNILE1BQWEsNENBQTRDO0lBVXZEOztPQUVHO0lBQ0gsWUFBWSxXQUFpQztRQUMzQyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsV0FBVyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFBLGFBQU0sRUFBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsT0FBTyxDQUFDLElBQUssQ0FBQyxDQUFDO1FBQ3pFLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxHQUFHLENBQUMsYUFBYSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ3RGLElBQUksQ0FBQyxlQUFlLEdBQUcsR0FBRyxDQUFDLGFBQWEsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsT0FBTyxDQUFDLENBQUM7UUFDOUYsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUM7UUFDbkMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksS0FBSyxFQUFVLENBQUM7UUFDOUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsTUFBTSxDQUFDLDhCQUErQixDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFJLENBQUMsQ0FBQztRQUN4RyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsOEJBQStCLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUVqRyxNQUFNLGNBQWMsR0FBYTtZQUMvQixzQkFBc0I7WUFD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QStILENBQUMsQ0FBQztRQUMzSSxJQUFJLENBQUMsSUFBSSxDQUFDLG1HQUFtRyxDQUFDLENBQUM7UUFDL0csTUFBQSxJQUFJLENBQUMsVUFBVSwwQ0FBRSxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDaEMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUEsWUFBSyxFQUFDLE1BQU0sQ0FBQyxtRkFBbUYsTUFBTSxNQUFNLENBQUMsQ0FBQztRQUNsSSxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUVsQix3QkFBd0I7UUFDeEIsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ3BCLENBQUM7Q0FDRjtBQXhMRCxvR0F3TEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBwYXNjYWwsIGNhbWVsIH0gZnJvbSAnY2FzZSc7XG5pbXBvcnQgKiBhcyBqMmogZnJvbSAnanNvbjJqc2lpJztcbmltcG9ydCB7IFByb2R1Y3REYXRhQWdncmVnYXRlIH0gZnJvbSAnLi9zZXJ2aWNlLWNhdGFsb2cnO1xuXG4vKipcbiAqIEdlbmVyYXRvciB0byBlbWl0IGNsYXNzZXMgYW5kIGluZm9ybWF0aW9uIG9uIHByb3Zpc2lvbmluZyBkZXRhaWxzIGZvciBhIHByb2R1Y3QuXG4gKi9cbmV4cG9ydCBjbGFzcyBTZXJ2aWNlQ2F0YWxvZ1Byb3Zpc2lvbmluZ0NvbnN0cnVjdEdlbmVyYXRvciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgcHJvZHVjdERhdGFBZ2dyZWdhdGU6IFByb2R1Y3REYXRhQWdncmVnYXRlO1xuICBwcml2YXRlIHJlYWRvbmx5IGhhc1BhcmFtZXRlcnM6IGJvb2xlYW47XG4gIHByaXZhdGUgcmVhZG9ubHkgc2FuaXRpemVkVHlwZU5hbWU6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSByZXNvdXJjZUF0dHJpYnV0ZXM6IHN0cmluZ1tdO1xuICBwcml2YXRlIHJlYWRvbmx5IGNvbnN0cnVjdENsYXNzTmFtZTogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IHByb3BzU3RydWN0TmFtZTogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IG91dHB1dEtleXM6IHN0cmluZ1tdO1xuICBwdWJsaWMgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAcGFyYW0gcHJvZHVjdERhdGEgdGhlIGFnZ3JlZ2F0ZSBkZXRhaWxzIG9uIGEgcHJvZHVjdCB3aXRoIGluZm9ybWF0aW9uIG9uIGlucHV0cyBhbmQgb3V0cHV0cyBvZiB0aGUgdGVtcGxhdGUuXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihwcm9kdWN0RGF0YTogUHJvZHVjdERhdGFBZ2dyZWdhdGUpIHtcbiAgICB0aGlzLnByb2R1Y3REYXRhQWdncmVnYXRlID0gcHJvZHVjdERhdGE7XG4gICAgdGhpcy5zYW5pdGl6ZWRUeXBlTmFtZSA9IHBhc2NhbCh0aGlzLnByb2R1Y3REYXRhQWdncmVnYXRlLnByb2R1Y3QuTmFtZSEpO1xuICAgIHRoaXMuY29uc3RydWN0Q2xhc3NOYW1lID0gajJqLlR5cGVHZW5lcmF0b3Iubm9ybWFsaXplVHlwZU5hbWUodGhpcy5zYW5pdGl6ZWRUeXBlTmFtZSk7XG4gICAgdGhpcy5wcm9wc1N0cnVjdE5hbWUgPSBqMmouVHlwZUdlbmVyYXRvci5ub3JtYWxpemVUeXBlTmFtZShgJHt0aGlzLmNvbnN0cnVjdENsYXNzTmFtZX1Qcm9wc2ApO1xuICAgIHRoaXMubmFtZSA9IHRoaXMuc2FuaXRpemVkVHlwZU5hbWU7XG4gICAgdGhpcy5yZXNvdXJjZUF0dHJpYnV0ZXMgPSBuZXcgQXJyYXk8c3RyaW5nPigpO1xuICAgIHRoaXMub3V0cHV0S2V5cyA9IHRoaXMucHJvZHVjdERhdGFBZ2dyZWdhdGUucGFyYW1zLlByb3Zpc2lvbmluZ0FydGlmYWN0T3V0cHV0S2V5cyEubWFwKGtleSA9PiBrZXkuS2V5ISk7XG4gICAgdGhpcy5oYXNQYXJhbWV0ZXJzID0gdGhpcy5wcm9kdWN0RGF0YUFnZ3JlZ2F0ZS5wYXJhbXMuUHJvdmlzaW9uaW5nQXJ0aWZhY3RQYXJhbWV0ZXJzIS5sZW5ndGggPiAwO1xuXG4gICAgY29uc3QgYXR0cmlidXRlTmFtZXM6IHN0cmluZ1tdID0gW1xuICAgICAgJ3Byb3Zpc2lvbmVkUHJvZHVjdElkJyxcbiAgICAgICdjbG91ZEZvcm1hdGlvblN0YWNrQXJuJyxcbiAgICAgICdyZWNvcmRJZCcsXG4gICAgICAuLi50aGlzLm91dHB1dEtleXMubWFwKGNhbWVsKSxcbiAgICBdO1xuXG4gICAgZm9yIChjb25zdCBhdHRyIG9mIGF0dHJpYnV0ZU5hbWVzKSB7XG4gICAgICB0aGlzLnJlc291cmNlQXR0cmlidXRlcy5wdXNoKGF0dHIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXIgdGhlIHR5cGUgaW50byBhIFR5cGVTY3JpcHQgY2xhc3MgZmlsZSBkZWZpbmluZyB0aGUgcHJvcHMgYW5kIHRoZSB3cmFwcGVkIEwxIGNvbnN0cnVjdCBBV1M6OlNlcnZpY2VDYXRhbG9nOjpDbG91ZEZvcm1hdGlvblByb3Zpc2lvbmVkUHJvZHVjdC5cbiAgICpcbiAgICogQHJldHVybnMgdGhlIHJlbmRlcmVkIGNsYXNzIGZpbGUgY29udGVudFxuICAgKi9cbiAgcHVibGljIHJlbmRlcigpOiBzdHJpbmcge1xuICAgIGNvbnN0IGNvZGUgPSBuZXcgajJqLkNvZGUoKTtcbiAgICB0aGlzLmVtaXRJbXBvcnRzKGNvZGUpO1xuICAgIHRoaXMuZW1pdEludGVyZmFjZShjb2RlKTtcbiAgICB0aGlzLmVtaXRCYXNlKGNvZGUpO1xuICAgIGlmICh0aGlzLmhhc1BhcmFtZXRlcnMpIHtcbiAgICAgIHRoaXMuZW1pdFBhcmFtZXRlck1hcChjb2RlKTtcbiAgICAgIHRoaXMuZW1pdERlZmluaXRpb25UeXBlcyhjb2RlKTtcbiAgICB9XG4gICAgdGhpcy5lbWl0Q29uc3RydWN0Q2xhc3MoY29kZSk7XG4gICAgcmV0dXJuIGNvZGUucmVuZGVyKCk7XG4gIH1cblxuICBwcml2YXRlIGVtaXRJbXBvcnRzKGNvZGU6IGoyai5Db2RlKSB7XG4gICAgY29kZS5saW5lKCcvLyBHZW5lcmF0ZWQgYnkgY2RrLWltcG9ydCcpO1xuICAgIGNvZGUubGluZShcImltcG9ydCAqIGFzIGNkayBmcm9tICdhd3MtY2RrLWxpYic7XCIpO1xuICAgIGNvZGUubGluZShcImltcG9ydCAqIGFzIGNvbnN0cnVjdHMgZnJvbSAnY29uc3RydWN0cyc7XCIpO1xuICAgIGNvZGUubGluZShcImltcG9ydCAqIGFzIHNjIGZyb20gJ2F3cy1jZGstbGliL2F3cy1zZXJ2aWNlY2F0YWxvZyc7XCIpO1xuICAgIGNvZGUubGluZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBlbWl0SW50ZXJmYWNlKGNvZGU6IGoyai5Db2RlKSB7XG4gICAgY29kZS5vcGVuQmxvY2soYGV4cG9ydCBpbnRlcmZhY2UgSSR7dGhpcy5jb25zdHJ1Y3RDbGFzc05hbWV9IGV4dGVuZHMgY2RrLklSZXNvdXJjZWApO1xuICAgIHRoaXMucmVzb3VyY2VBdHRyaWJ1dGVzLmZvckVhY2goYXR0ciA9PiB7XG4gICAgICBjb2RlLmxpbmUoYHJlYWRvbmx5ICR7YXR0cn06IHN0cmluZztgKTtcbiAgICB9KTtcbiAgICBjb2RlLmNsb3NlQmxvY2soKTtcbiAgICBjb2RlLmxpbmUoKTtcbiAgfVxuXG4gIHByaXZhdGUgZW1pdEJhc2UoY29kZTogajJqLkNvZGUpIHtcbiAgICBjb2RlLm9wZW5CbG9jayhgYWJzdHJhY3QgY2xhc3MgJHt0aGlzLmNvbnN0cnVjdENsYXNzTmFtZX1CYXNlIGV4dGVuZHMgY2RrLlJlc291cmNlIGltcGxlbWVudHMgSSR7dGhpcy5jb25zdHJ1Y3RDbGFzc05hbWV9YCk7XG4gICAgdGhpcy5yZXNvdXJjZUF0dHJpYnV0ZXMuZm9yRWFjaChhdHRyID0+IHtcbiAgICAgIGNvZGUubGluZShgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5ICR7YXR0cn06IHN0cmluZztgKTtcbiAgICB9KTtcbiAgICBjb2RlLmNsb3NlQmxvY2soKTtcbiAgICBjb2RlLmxpbmUoKTtcbiAgfVxuXG4gIHByaXZhdGUgZW1pdFBhcmFtZXRlcnMoY29kZTogajJqLkNvZGUpIHtcbiAgICBjb2RlLmxpbmUoJyAgcHJvdmlzaW9uaW5nUGFyYW1ldGVyczonKTtcbiAgICBjb2RlLmxpbmUoJyAgICBPYmplY3QuZW50cmllcyhwcm9wcykubWFwKChbaywgdl0pID0+IHsnKTtcbiAgICBjb2RlLmxpbmUoJyAgICAgIHJldHVybiB7Jyk7XG4gICAgY29kZS5saW5lKCcgICAgICAgIGtleTogUGFyYW1ldGVyS2V5cy52YWx1ZU9mKGspIGFzIHN0cmluZywnKTtcbiAgICBjb2RlLmxpbmUoJyAgICAgICAgdmFsdWU6IHYgYXMgc3RyaW5nLCcpO1xuICAgIGNvZGUubGluZSgnICAgICAgfScpO1xuICAgIGNvZGUubGluZSgnICAgIH0pLCcpO1xuICB9XG5cbiAgcHJpdmF0ZSBlbWl0UGFyYW1ldGVyTWFwKGNvZGU6IGoyai5Db2RlKSB7XG4gICAgY29kZS5vcGVuQmxvY2soJ2VudW0gUGFyYW1ldGVyS2V5cycpO1xuICAgIHRoaXMucHJvZHVjdERhdGFBZ2dyZWdhdGUucGFyYW1zLlByb3Zpc2lvbmluZ0FydGlmYWN0UGFyYW1ldGVycz8uZm9yRWFjaChwID0+IHtcbiAgICAgIGNvZGUubGluZShgJHtjYW1lbChwLlBhcmFtZXRlcktleSEpfSA9ICcke3AuUGFyYW1ldGVyS2V5fScsYCk7XG4gICAgfSk7XG4gICAgY29kZS5jbG9zZUJsb2NrKCk7XG4gICAgY29kZS5saW5lKCk7XG4gICAgY29kZS5vcGVuQmxvY2soJ25hbWVzcGFjZSBQYXJhbWV0ZXJLZXlzJyk7XG4gICAgY29kZS5saW5lKCdjb25zdCByZXZlcnNlTWFwID0gbmV3IE1hcDxzdHJpbmcsIFBhcmFtZXRlcktleXM+KCk7Jyk7XG4gICAgY29kZS5saW5lKCdPYmplY3Qua2V5cyhQYXJhbWV0ZXJLZXlzKS5mb3JFYWNoKChzOiBzdHJpbmcpID0+IHsnKTtcbiAgICBjb2RlLmxpbmUoJyAgY29uc3QgZSA9ICg8YW55PlBhcmFtZXRlcktleXMpW3NdOycpO1xuICAgIGNvZGUubGluZSgnICByZXZlcnNlTWFwLnNldChzLCBlKTsnKTtcbiAgICBjb2RlLmxpbmUoJ30pOycpO1xuICAgIGNvZGUubGluZSgnZXhwb3J0IGZ1bmN0aW9uIHZhbHVlT2Yoc3RyOiBzdHJpbmcpIHsnKTtcbiAgICBjb2RlLmxpbmUoJyAgcmV0dXJuIHJldmVyc2VNYXAuZ2V0KHN0cik7Jyk7XG4gICAgY29kZS5saW5lKCd9Jyk7XG4gICAgY29kZS5jbG9zZUJsb2NrKCk7XG4gIH1cblxuICBwcml2YXRlIGVtaXREZWZpbml0aW9uVHlwZXMoY29kZTogajJqLkNvZGUpIHtcbiAgICBjb2RlLm9wZW5CbG9jayhgZXhwb3J0IGludGVyZmFjZSAke3RoaXMuY29uc3RydWN0Q2xhc3NOYW1lfVByb3BzYCk7XG4gICAgdGhpcy5wcm9kdWN0RGF0YUFnZ3JlZ2F0ZS5wYXJhbXMuUHJvdmlzaW9uaW5nQXJ0aWZhY3RQYXJhbWV0ZXJzIS5mb3JFYWNoKHBhID0+IHtcbiAgICAgIGxldCBvcHRpb25hbCA9ICcnO1xuICAgICAgY29kZS5saW5lKCcvKionKTtcbiAgICAgIChwYS5EZXNjcmlwdGlvbiAhPSB1bmRlZmluZWQpID8gY29kZS5saW5lKGAgKiAke3BhLkRlc2NyaXB0aW9ufWApOiBudWxsO1xuICAgICAgaWYgKHBhLkRlZmF1bHRWYWx1ZSkge1xuICAgICAgICBvcHRpb25hbCArPSAnPyc7XG4gICAgICAgIChwYS5QYXJhbWV0ZXJDb25zdHJhaW50cz8uQ29uc3RyYWludERlc2NyaXB0aW9uICE9IHVuZGVmaW5lZCkgPyBjb2RlLmxpbmUoYCAqICR7cGEuUGFyYW1ldGVyQ29uc3RyYWludHM/LkNvbnN0cmFpbnREZXNjcmlwdGlvbn1gKTogbnVsbDtcbiAgICAgICAgY29kZS5saW5lKCcgKicpO1xuICAgICAgICBjb2RlLmxpbmUoYCAqIEBkZWZhdWx0ICR7cGEuRGVmYXVsdFZhbHVlfWApO1xuICAgICAgfVxuXG4gICAgICBjb2RlLmxpbmUoJyAqLycpO1xuICAgICAgY29kZS5saW5lKGByZWFkb25seSAke2NhbWVsKHBhLlBhcmFtZXRlcktleSEpfSR7b3B0aW9uYWx9OiAke3BhLlBhcmFtZXRlckNvbnN0cmFpbnRzPy5BbGxvd2VkVmFsdWVzPy5sZW5ndGggPyBwYS5QYXJhbWV0ZXJLZXkgOiAnc3RyaW5nJ307YCk7XG4gICAgICBjb2RlLmxpbmUoKTtcbiAgICB9KTtcbiAgICBjb2RlLmNsb3NlQmxvY2soKTtcbiAgICBjb2RlLmxpbmUoKTtcbiAgfVxuXG4gIHByaXZhdGUgZW1pdENvbnN0cnVjdENsYXNzKGNvZGU6IGoyai5Db2RlKSB7XG4gICAgY29kZS5saW5lKCcvKionKTtcbiAgICBjb2RlLmxpbmUoYCAqIEEgU2VydmljZSBDYXRhbG9nIENsb3VkRm9ybWF0aW9uIFxcYCR7dGhpcy5zYW5pdGl6ZWRUeXBlTmFtZX1cXGAgcHJvZHVjdC5gKTtcbiAgICBjb2RlLmxpbmUoJyAqJyk7XG4gICAgY29kZS5saW5lKCcgKiBAY2xvdWRmb3JtYXRpb25SZXNvdXJjZSBBV1M6OlNlcnZpY2VDYXRhbG9nOjpDbG91ZEZvcm1hdGlvblByb3Zpc2lvbmVkUHJvZHVjdCcpO1xuICAgIGNvZGUubGluZSgnICogQHN0YWJpbGl0eSBleHRlcm5hbCcpO1xuICAgIGNvZGUubGluZSgnICovJyk7XG4gICAgY29kZS5vcGVuQmxvY2soYGV4cG9ydCBjbGFzcyAke3RoaXMuY29uc3RydWN0Q2xhc3NOYW1lfSBleHRlbmRzICR7dGhpcy5jb25zdHJ1Y3RDbGFzc05hbWV9QmFzZWApO1xuICAgIGZvciAoY29uc3QgcHJvcCBvZiB0aGlzLnJlc291cmNlQXR0cmlidXRlcykge1xuICAgICAgY29kZS5saW5lKCcvKionKTtcbiAgICAgIGNvZGUubGluZShgICogQXR0cmlidXRlIFxcYCR7dGhpcy5zYW5pdGl6ZWRUeXBlTmFtZX0uJHtwcm9wfVxcYGApO1xuICAgICAgY29kZS5saW5lKCcgKi8nKTtcbiAgICAgIGNvZGUubGluZShgcHVibGljIHJlYWRvbmx5ICR7Y2FtZWwocHJvcCl9OiBzdHJpbmc7YCk7XG4gICAgfVxuICAgIGNvZGUubGluZSgncHJpdmF0ZSByZWFkb25seSBwcm92aXNpb25lZFByb2R1Y3Q6IHNjLkNmbkNsb3VkRm9ybWF0aW9uUHJvdmlzaW9uZWRQcm9kdWN0OycpO1xuICAgIGNvZGUubGluZSgpO1xuXG4gICAgY29kZS5saW5lKCcvKionKTtcbiAgICBjb2RlLmxpbmUoYCAqIENyZWF0ZSBhIG5ldyBTZXJ2aWNlIENhdGFsb2cgXFxgJHt0aGlzLnNhbml0aXplZFR5cGVOYW1lfVxcYCBwcm9kdWN0LmApO1xuICAgIGNvZGUubGluZSgnIConKTtcbiAgICBjb2RlLmxpbmUoJyAqIEBwYXJhbSBzY29wZSAtIHNjb3BlIGluIHdoaWNoIHRoaXMgcmVzb3VyY2UgaXMgZGVmaW5lZCcpO1xuICAgIGNvZGUubGluZSgnICogQHBhcmFtIGlkICAgIC0gc2NvcGVkIGlkIG9mIHRoZSByZXNvdXJjZScpO1xuICAgIGlmICh0aGlzLmhhc1BhcmFtZXRlcnMpIHtcbiAgICAgIGNvZGUubGluZSgnICogQHBhcmFtIHByb3BzIC0gcmVzb3VyY2UgcHJvcGVydGllcycpO1xuICAgIH1cbiAgICBjb2RlLmxpbmUoJyAqLycpO1xuICAgIGlmICh0aGlzLmhhc1BhcmFtZXRlcnMpIHtcbiAgICAgIGNvZGUub3BlbkJsb2NrKGBjb25zdHJ1Y3RvcihzY29wZTogY29uc3RydWN0cy5Db25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiAke3RoaXMucHJvcHNTdHJ1Y3ROYW1lfSlgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29kZS5vcGVuQmxvY2soJ2NvbnN0cnVjdG9yKHNjb3BlOiBjb25zdHJ1Y3RzLkNvbnN0cnVjdCwgaWQ6IHN0cmluZyknKTtcbiAgICB9XG4gICAgY29kZS5saW5lKCdzdXBlcihzY29wZSwgaWQpOycpO1xuICAgIGNvZGUubGluZSgnJyk7XG4gICAgY29kZS5saW5lKFwidGhpcy5wcm92aXNpb25lZFByb2R1Y3QgPSBuZXcgc2MuQ2ZuQ2xvdWRGb3JtYXRpb25Qcm92aXNpb25lZFByb2R1Y3QodGhpcywgJ1Jlc291cmNlJywge1wiKTtcbiAgICBjb2RlLmxpbmUoJyAgcHJvdmlzaW9uZWRQcm9kdWN0TmFtZTogdGhpcy5ub2RlLmlkLCcpO1xuICAgIGNvZGUubGluZShgICBwcm92aXNpb25pbmdBcnRpZmFjdE5hbWU6ICcke3RoaXMucHJvZHVjdERhdGFBZ2dyZWdhdGUucHJvdmlzaW9uaW5nQXJ0aWZhY3QuTmFtZSF9JyxgKTtcbiAgICBjb2RlLmxpbmUoYCAgcHJvZHVjdE5hbWU6ICcke3RoaXMucHJvZHVjdERhdGFBZ2dyZWdhdGUucHJvZHVjdC5OYW1lIX0nLGApO1xuXG4gICAgLy8gZ2VuZXJhdGUgcHJvdmlzaW9uaW5nIHBhcmFtZXRlcnMgZnJvbSBwcm9wcyB0byBhdm9pZCByZWR1bmRhbnQgZGVmYXVsdHNcbiAgICBpZiAodGhpcy5oYXNQYXJhbWV0ZXJzKSB7XG4gICAgICB0aGlzLmVtaXRQYXJhbWV0ZXJzKGNvZGUpO1xuICAgIH07XG4gICAgY29kZS5saW5lKCd9KTsnKTtcbiAgICBjb2RlLmxpbmUoKTtcbiAgICBjb2RlLmxpbmUoJ3RoaXMucHJvdmlzaW9uZWRQcm9kdWN0SWQgPSB0aGlzLnByb3Zpc2lvbmVkUHJvZHVjdC5yZWY7Jyk7XG4gICAgY29kZS5saW5lKFwidGhpcy5jbG91ZEZvcm1hdGlvblN0YWNrQXJuID0gY2RrLlRva2VuLmFzU3RyaW5nKGNkay5Gbi5nZXRBdHQodGhpcy5wcm92aXNpb25lZFByb2R1Y3QubG9naWNhbElkLCAnQ2xvdWRmb3JtYXRpb25TdGFja0FybicpKTtcIik7XG4gICAgY29kZS5saW5lKFwidGhpcy5yZWNvcmRJZCA9IGNkay5Ub2tlbi5hc1N0cmluZyhjZGsuRm4uZ2V0QXR0KHRoaXMucHJvdmlzaW9uZWRQcm9kdWN0LmxvZ2ljYWxJZCwgJ1JlY29yZElkJykpO1wiKTtcbiAgICB0aGlzLm91dHB1dEtleXM/LmZvckVhY2gob3V0cHV0ID0+IHtcbiAgICAgIGNvZGUubGluZShgdGhpcy4ke2NhbWVsKG91dHB1dCl9ID0gY2RrLlRva2VuLmFzU3RyaW5nKGNkay5Gbi5nZXRBdHQodGhpcy5wcm92aXNpb25lZFByb2R1Y3QubG9naWNhbElkLCAnT3V0cHV0cy4ke291dHB1dH0nKSk7YCk7XG4gICAgfSk7XG4gICAgY29kZS5jbG9zZUJsb2NrKCk7XG5cbiAgICAvLyBDbG9zZSBjb25zdHJ1Y3QgY2xhc3NcbiAgICBjb2RlLmNsb3NlQmxvY2soKTtcbiAgfVxufSJdfQ==
266
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtY29uc3RydWN0LWdlbmVyYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9zYy1jb25zdHJ1Y3QtZ2VuZXJhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0EsK0JBQStDO0FBQy9DLCtDQUFpQztBQVdqQzs7R0FFRztBQUNILE1BQWEsNENBQTRDO0lBY3ZEOztPQUVHO0lBQ0gsWUFBWSxXQUFpQztRQUMzQyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsV0FBVyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFBLGFBQU0sRUFBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsT0FBTyxDQUFDLElBQUssQ0FBQyxDQUFDO1FBQ3pFLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxHQUFHLENBQUMsYUFBYSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ3RGLElBQUksQ0FBQyxlQUFlLEdBQUcsR0FBRyxDQUFDLGFBQWEsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsT0FBTyxDQUFDLENBQUM7UUFDOUYsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUM7UUFDbkMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksS0FBSyxFQUFVLENBQUM7UUFDOUMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLEtBQUssRUFBa0IsQ0FBQztRQUN6QyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsOEJBQStCLENBQUM7UUFDbkYsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsTUFBTSxDQUFDLDhCQUErQixDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDakcsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENB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Q0FBQyxDQUFDO1NBQzNCO1FBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNqQixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDWixJQUFJLENBQUMsSUFBSSxDQUFDLDBEQUEwRCxDQUFDLENBQUM7UUFDdEUsSUFBSSxDQUFDLElBQUksQ0FBQywrSEFBK0gsQ0FBQyxDQUFDO1FBQzNJLElBQUksQ0FBQyxJQUFJLENBQUMsbUdBQW1HLENBQUMsQ0FBQztRQUMvRyxNQUFBLElBQUksQ0FBQyxVQUFVLDBDQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNoQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBQSxZQUFLLEVBQUMsTUFBTSxDQUFDLEdBQUksQ0FBQyxtRkFBbUYsTUFBTSxDQUFDLEdBQUksTUFBTSxDQUFDLENBQUM7UUFDNUksQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFFbEIsd0JBQXdCO1FBQ3hCLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUNwQixDQUFDO0NBQ0Y7QUFwUUQsb0dBb1FDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUHJvdmlzaW9uaW5nQXJ0aWZhY3RPdXRwdXRzLCBQcm92aXNpb25pbmdBcnRpZmFjdFBhcmFtZXRlcnMgfSBmcm9tICdhd3Mtc2RrL2NsaWVudHMvc2VydmljZWNhdGFsb2cnO1xuaW1wb3J0IHsgcGFzY2FsLCBjYW1lbCwgY29uc3RhbnQgfSBmcm9tICdjYXNlJztcbmltcG9ydCAqIGFzIGoyaiBmcm9tICdqc29uMmpzaWknO1xuaW1wb3J0IHsgUHJvZHVjdERhdGFBZ2dyZWdhdGUgfSBmcm9tICcuL3NlcnZpY2UtY2F0YWxvZyc7XG5cbi8qKlxuICogUmVwcmVzZW50cyBhbiBlbnVtIGZvciBDbG91ZEZvcm1hdGlvbiBwYXJhbWV0ZXIgaW5wdXRzIHRoYXQgaGF2ZSBwcmVkZWZpbmVkIGFsbG93ZWQgdmFsdWVzLlxuICovXG50eXBlIEVudW1EZWZpbml0aW9uID0ge1xuICBuYW1lOiBzdHJpbmc7XG4gIGFsbG93ZWRWYWx1ZXM6IHN0cmluZ1tdO1xufTtcblxuLyoqXG4gKiBHZW5lcmF0b3IgdG8gZW1pdCBjbGFzc2VzIGFuZCBpbmZvcm1hdGlvbiBvbiBwcm92aXNpb25pbmcgZGV0YWlscyBmb3IgYSBwcm9kdWN0LlxuICovXG5leHBvcnQgY2xhc3MgU2VydmljZUNhdGFsb2dQcm92aXNpb25pbmdDb25zdHJ1Y3RHZW5lcmF0b3Ige1xuICBwcml2YXRlIHJlYWRvbmx5IHByb2R1Y3REYXRhQWdncmVnYXRlOiBQcm9kdWN0RGF0YUFnZ3JlZ2F0ZTtcbiAgcHJpdmF0ZSByZWFkb25seSBoYXNQYXJhbWV0ZXJzOiBib29sZWFuO1xuICBwcml2YXRlIHJlYWRvbmx5IHNhbml0aXplZFR5cGVOYW1lOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgcmVzb3VyY2VBdHRyaWJ1dGVzOiBzdHJpbmdbXTtcbiAgcHJpdmF0ZSByZWFkb25seSBjb25zdHJ1Y3RDbGFzc05hbWU6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBwcm9wc1N0cnVjdE5hbWU6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBlbnVtczogRW51bURlZmluaXRpb25bXTtcbiAgcHJpdmF0ZSByZWFkb25seSBwYXJhbWV0ZXJzOiBQcm92aXNpb25pbmdBcnRpZmFjdFBhcmFtZXRlcnM7XG4gIHByaXZhdGUgcmVhZG9ubHkgZGVmYXVsdEF0dHJpYnV0ZXM6IFNldDxzdHJpbmc+O1xuICBwcml2YXRlIHJlYWRvbmx5IG91dHB1dEtleXM6IFByb3Zpc2lvbmluZ0FydGlmYWN0T3V0cHV0cztcbiAgcHJpdmF0ZSByZWFkb25seSBvdXRwdXREZXNjcmlwdGlvbnM6IHtba2V5OiBzdHJpbmddOiBzdHJpbmcgfCB1bmRlZmluZWR9O1xuICBwdWJsaWMgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAcGFyYW0gcHJvZHVjdERhdGEgdGhlIGFnZ3JlZ2F0ZSBkZXRhaWxzIG9uIGEgcHJvZHVjdCB3aXRoIGluZm9ybWF0aW9uIG9uIGlucHV0cyBhbmQgb3V0cHV0cyBvZiB0aGUgdGVtcGxhdGUuXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihwcm9kdWN0RGF0YTogUHJvZHVjdERhdGFBZ2dyZWdhdGUpIHtcbiAgICB0aGlzLnByb2R1Y3REYXRhQWdncmVnYXRlID0gcHJvZHVjdERhdGE7XG4gICAgdGhpcy5zYW5pdGl6ZWRUeXBlTmFtZSA9IHBhc2NhbCh0aGlzLnByb2R1Y3REYXRhQWdncmVnYXRlLnByb2R1Y3QuTmFtZSEpO1xuICAgIHRoaXMuY29uc3RydWN0Q2xhc3NOYW1lID0gajJqLlR5cGVHZW5lcmF0b3Iubm9ybWFsaXplVHlwZU5hbWUodGhpcy5zYW5pdGl6ZWRUeXBlTmFtZSk7XG4gICAgdGhpcy5wcm9wc1N0cnVjdE5hbWUgPSBqMmouVHlwZUdlbmVyYXRvci5ub3JtYWxpemVUeXBlTmFtZShgJHt0aGlzLmNvbnN0cnVjdENsYXNzTmFtZX1Qcm9wc2ApO1xuICAgIHRoaXMubmFtZSA9IHRoaXMuc2FuaXRpemVkVHlwZU5hbWU7XG4gICAgdGhpcy5yZXNvdXJjZUF0dHJpYnV0ZXMgPSBuZXcgQXJyYXk8c3RyaW5nPigpO1xuICAgIHRoaXMuZW51bXMgPSBuZXcgQXJyYXk8RW51bURlZmluaXRpb24+KCk7XG4gICAgdGhpcy5wYXJhbWV0ZXJzID0gdGhpcy5wcm9kdWN0RGF0YUFnZ3JlZ2F0ZS5wYXJhbXMuUHJvdmlzaW9uaW5nQXJ0aWZhY3RQYXJhbWV0ZXJzITtcbiAgICB0aGlzLmhhc1BhcmFtZXRlcnMgPSB0aGlzLnByb2R1Y3REYXRhQWdncmVnYXRlLnBhcmFtcy5Qcm92aXNpb25pbmdBcnRpZmFjdFBhcmFtZXRlcnMhLmxlbmd0aCA+IDA7XG4gICAgdGhpcy5vdXRwdXRLZXlzID0gdGhpcy5wcm9kdWN0RGF0YUFnZ3JlZ2F0ZS5wYXJhbXMuUHJvdmlzaW9uaW5nQXJ0aWZhY3RPdXRwdXRLZXlzITtcbiAgICB0aGlzLm91dHB1dERlc2NyaXB0aW9ucyA9IHRoaXMucHJvZHVjdERhdGFBZ2dyZWdhdGUucGFyYW1zLlByb3Zpc2lvbmluZ0FydGlmYWN0T3V0cHV0S2V5cyEucmVkdWNlKChvYmosIGtleSkgPT4ge1xuICAgICAgb2JqW2NhbWVsKGtleS5LZXkhKV0gPSBrZXkuRGVzY3JpcHRpb247XG4gICAgICByZXR1cm4gb2JqO1xuICAgIH0sIHt9IGFzIHtba2V5OiBzdHJpbmddOiBzdHJpbmcgfCB1bmRlZmluZWR9KTtcblxuICAgIHRoaXMuZGVmYXVsdEF0dHJpYnV0ZXMgPSBuZXcgU2V0PHN0cmluZz4oWydwcm92aXNpb25lZFByb2R1Y3RJZCcsICdjbG91ZEZvcm1hdGlvblN0YWNrQXJuJywgJ3JlY29yZElkJ10pO1xuXG4gICAgdGhpcy5yZXNvdXJjZUF0dHJpYnV0ZXMucHVzaChcbiAgICAgIC4uLnRoaXMuZGVmYXVsdEF0dHJpYnV0ZXMsXG4gICAgICAuLi50aGlzLm91dHB1dEtleXMubWFwKGtleSA9PiBjYW1lbChrZXkuS2V5ISkpLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVyIHRoZSB0eXBlIGludG8gYSBUeXBlU2NyaXB0IGNsYXNzIGZpbGUgZGVmaW5pbmcgdGhlIHByb3BzIGFuZCB0aGUgd3JhcHBlZCBMMSBjb25zdHJ1Y3QgQVdTOjpTZXJ2aWNlQ2F0YWxvZzo6Q2xvdWRGb3JtYXRpb25Qcm92aXNpb25lZFByb2R1Y3QuXG4gICAqXG4gICAqIEByZXR1cm5zIHRoZSByZW5kZXJlZCBjbGFzcyBmaWxlIGNvbnRlbnRcbiAgICovXG4gIHB1YmxpYyByZW5kZXIoKTogc3RyaW5nIHtcbiAgICBjb25zdCBjb2RlID0gbmV3IGoyai5Db2RlKCk7XG4gICAgdGhpcy5lbWl0SW1wb3J0cyhjb2RlKTtcbiAgICB0aGlzLmVtaXRJbnRlcmZhY2UoY29kZSk7XG4gICAgdGhpcy5lbWl0QmFzZShjb2RlKTtcbiAgICBpZiAodGhpcy5oYXNQYXJhbWV0ZXJzKSB7XG4gICAgICB0aGlzLmVtaXRQYXJhbWV0ZXJNYXAoY29kZSk7XG4gICAgICB0aGlzLmVtaXREZWZpbml0aW9uVHlwZXMoY29kZSk7XG4gICAgfVxuICAgIHRoaXMuZW1pdENvbnN0cnVjdENsYXNzKGNvZGUpO1xuICAgIHRoaXMuZW51bXMubGVuZ3RoICYmIHRoaXMuZW1pdEVudW1zKGNvZGUpO1xuICAgIHJldHVybiBjb2RlLnJlbmRlcigpO1xuICB9XG5cbiAgcHJpdmF0ZSBlbWl0SW1wb3J0cyhjb2RlOiBqMmouQ29kZSkge1xuICAgIGNvZGUubGluZSgnLy8gR2VuZXJhdGVkIGJ5IGNkay1pbXBvcnQnKTtcbiAgICBjb2RlLmxpbmUoXCJpbXBvcnQgKiBhcyBjZGsgZnJvbSAnYXdzLWNkay1saWInO1wiKTtcbiAgICBjb2RlLmxpbmUoXCJpbXBvcnQgKiBhcyBjb25zdHJ1Y3RzIGZyb20gJ2NvbnN0cnVjdHMnO1wiKTtcbiAgICBjb2RlLmxpbmUoXCJpbXBvcnQgKiBhcyBzYyBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtc2VydmljZWNhdGFsb2cnO1wiKTtcbiAgICBjb2RlLmxpbmUoKTtcbiAgfVxuXG4gIHByaXZhdGUgZW1pdEludGVyZmFjZShjb2RlOiBqMmouQ29kZSkge1xuICAgIGNvZGUub3BlbkJsb2NrKGBleHBvcnQgaW50ZXJmYWNlIEkke3RoaXMuY29uc3RydWN0Q2xhc3NOYW1lfSBleHRlbmRzIGNkay5JUmVzb3VyY2VgKTtcbiAgICB0aGlzLnJlc291cmNlQXR0cmlidXRlcy5mb3JFYWNoKGF0dHIgPT4ge1xuICAgICAgY29kZS5saW5lKGByZWFkb25seSAke2F0dHJ9OiBzdHJpbmc7YCk7XG4gICAgfSk7XG4gICAgY29kZS5jbG9zZUJsb2NrKCk7XG4gICAgY29kZS5saW5lKCk7XG4gIH1cblxuICBwcml2YXRlIGVtaXRCYXNlKGNvZGU6IGoyai5Db2RlKSB7XG4gICAgY29kZS5vcGVuQmxvY2soYGFic3RyYWN0IGNsYXNzICR7dGhpcy5jb25zdHJ1Y3RDbGFzc05hbWV9QmFzZSBleHRlbmRzIGNkay5SZXNvdXJjZSBpbXBsZW1lbnRzIEkke3RoaXMuY29uc3RydWN0Q2xhc3NOYW1lfWApO1xuICAgIHRoaXMucmVzb3VyY2VBdHRyaWJ1dGVzLmZvckVhY2goYXR0ciA9PiB7XG4gICAgICBjb2RlLmxpbmUoYHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSAke2F0dHJ9OiBzdHJpbmc7YCk7XG4gICAgfSk7XG4gICAgY29kZS5jbG9zZUJsb2NrKCk7XG4gICAgY29kZS5saW5lKCk7XG4gIH1cblxuICBwcml2YXRlIGVtaXRQYXJhbWV0ZXJzKGNvZGU6IGoyai5Db2RlKSB7XG4gICAgY29kZS5saW5lKCcgIHByb3Zpc2lvbmluZ1BhcmFtZXRlcnM6Jyk7XG4gICAgY29kZS5saW5lKCcgICAgT2JqZWN0LmVudHJpZXMocHJvcHMpLm1hcCgoW2ssIHZdKSA9PiB7Jyk7XG4gICAgY29kZS5saW5lKCcgICAgICByZXR1cm4geycpO1xuICAgIGNvZGUubGluZSgnICAgICAgICBrZXk6IFBhcmFtZXRlcktleXMudmFsdWVPZihrKSBhcyBzdHJpbmcsJyk7XG4gICAgY29kZS5saW5lKCcgICAgICAgIHZhbHVlOiB2IGFzIHN0cmluZywnKTtcbiAgICBjb2RlLmxpbmUoJyAgICAgIH0nKTtcbiAgICBjb2RlLmxpbmUoJyAgICB9KSwnKTtcbiAgfVxuXG4gIHByaXZhdGUgZW1pdFBhcmFtZXRlck1hcChjb2RlOiBqMmouQ29kZSkge1xuICAgIGNvZGUub3BlbkJsb2NrKCdlbnVtIFBhcmFtZXRlcktleXMnKTtcbiAgICB0aGlzLnBhcmFtZXRlcnM/LmZvckVhY2gocCA9PiB7XG4gICAgICBjb2RlLmxpbmUoYCR7Y2FtZWwocC5QYXJhbWV0ZXJLZXkhKX0gPSAnJHtwLlBhcmFtZXRlcktleX0nLGApO1xuICAgIH0pO1xuICAgIGNvZGUuY2xvc2VCbG9jaygpO1xuICAgIGNvZGUubGluZSgpO1xuICAgIGNvZGUub3BlbkJsb2NrKCduYW1lc3BhY2UgUGFyYW1ldGVyS2V5cycpO1xuICAgIGNvZGUubGluZSgnY29uc3QgcmV2ZXJzZU1hcCA9IG5ldyBNYXA8c3RyaW5nLCBQYXJhbWV0ZXJLZXlzPigpOycpO1xuICAgIGNvZGUubGluZSgnT2JqZWN0LmtleXMoUGFyYW1ldGVyS2V5cykuZm9yRWFjaCgoczogc3RyaW5nKSA9PiB7Jyk7XG4gICAgY29kZS5saW5lKCcgIGNvbnN0IGUgPSAoPGFueT5QYXJhbWV0ZXJLZXlzKVtzXTsnKTtcbiAgICBjb2RlLmxpbmUoJyAgcmV2ZXJzZU1hcC5zZXQocywgZSk7Jyk7XG4gICAgY29kZS5saW5lKCd9KTsnKTtcbiAgICBjb2RlLmxpbmUoJ2V4cG9ydCBmdW5jdGlvbiB2YWx1ZU9mKHN0cjogc3RyaW5nKSB7Jyk7XG4gICAgY29kZS5saW5lKCcgIHJldHVybiByZXZlcnNlTWFwLmdldChzdHIpOycpO1xuICAgIGNvZGUubGluZSgnfScpO1xuICAgIGNvZGUuY2xvc2VCbG9jaygpO1xuICB9XG5cbiAgcHJpdmF0ZSBlbWl0RGVmaW5pdGlvblR5cGVzKGNvZGU6IGoyai5Db2RlKSB7XG4gICAgY29kZS5vcGVuQmxvY2soYGV4cG9ydCBpbnRlcmZhY2UgJHt0aGlzLmNvbnN0cnVjdENsYXNzTmFtZX1Qcm9wc2ApO1xuICAgIHRoaXMucGFyYW1ldGVycyEuZm9yRWFjaChwYSA9PiB7XG4gICAgICBsZXQgb3B0aW9uYWwgPSAnJztcbiAgICAgIGNvZGUubGluZSgnLyoqJyk7XG4gICAgICBjb2RlLmxpbmUoYCAqICR7cGFzY2FsKHBhLlBhcmFtZXRlcktleSEpfWApO1xuICAgICAgaWYgKHBhLkRlc2NyaXB0aW9uKSB7XG4gICAgICAgIGNvZGUubGluZSgnIConKTtcbiAgICAgICAgY29kZS5saW5lKGAgKiAke3BhLkRlc2NyaXB0aW9ufWApO1xuICAgICAgfVxuICAgICAgaWYgKHBhLlBhcmFtZXRlckNvbnN0cmFpbnRzPy5Db25zdHJhaW50RGVzY3JpcHRpb24pIHtcbiAgICAgICAgY29kZS5saW5lKCcgKicpO1xuICAgICAgICBjb2RlLmxpbmUoYCAqICR7cGEuUGFyYW1ldGVyQ29uc3RyYWludHM/LkNvbnN0cmFpbnREZXNjcmlwdGlvbn1gKTtcbiAgICAgIH1cbiAgICAgIGlmIChwYS5EZWZhdWx0VmFsdWUpIHtcbiAgICAgICAgb3B0aW9uYWwgKz0gJz8nO1xuICAgICAgICBjb2RlLmxpbmUoJyAqJyk7XG4gICAgICAgIGNvZGUubGluZShgICogQGRlZmF1bHQgJHtwYS5EZWZhdWx0VmFsdWV9YCk7XG4gICAgICB9XG4gICAgICBpZiAocGEuUGFyYW1ldGVyQ29uc3RyYWludHM/LkFsbG93ZWRWYWx1ZXM/Lmxlbmd0aCkge1xuICAgICAgICB0aGlzLmVudW1zLnB1c2goe1xuICAgICAgICAgIG5hbWU6IHBhLlBhcmFtZXRlcktleSEsXG4gICAgICAgICAgYWxsb3dlZFZhbHVlczogcGEuUGFyYW1ldGVyQ29uc3RyYWludHMuQWxsb3dlZFZhbHVlcyxcbiAgICAgICAgfSk7XG4gICAgICB9O1xuXG4gICAgICBjb2RlLmxpbmUoJyAqLycpO1xuICAgICAgY29kZS5saW5lKGByZWFkb25seSAke2NhbWVsKHBhLlBhcmFtZXRlcktleSEpfSR7b3B0aW9uYWx9OiAke3BhLlBhcmFtZXRlckNvbnN0cmFpbnRzPy5BbGxvd2VkVmFsdWVzPy5sZW5ndGggPyB0aGlzLmNvbnN0cnVjdENsYXNzTmFtZSArICcuJyArIHBhLlBhcmFtZXRlcktleSA6ICdzdHJpbmcnfTtgKTtcbiAgICAgIGNvZGUubGluZSgpO1xuICAgIH0pO1xuICAgIGNvZGUuY2xvc2VCbG9jaygpO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNvbHZlRW51bVZhbHVlKHZhbDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoTnVtYmVyKHZhbCkpIHtcbiAgICAgIHJldHVybiBjb25zdGFudChgVkFMVUVfJHt2YWx9YCk7XG4gICAgfSBlbHNlIGlmIChOdW1iZXIodmFsLmNoYXJBdCgwKSkpIHtcbiAgICAgIHJldHVybiBgJyR7Y29uc3RhbnQodmFsKX0nYDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGNvbnN0YW50KHZhbCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBlbWl0RW51bXMoY29kZTogajJqLkNvZGUpIHtcbiAgICBjb2RlLmxpbmUoKTtcbiAgICBjb2RlLm9wZW5CbG9jayhgZXhwb3J0IG5hbWVzcGFjZSAke3RoaXMuY29uc3RydWN0Q2xhc3NOYW1lfWApO1xuICAgIHRoaXMuZW51bXMuZm9yRWFjaCggZSA9PiB7XG4gICAgICBjb2RlLmxpbmUoKTtcbiAgICAgIGNvZGUub3BlbkJsb2NrKGBleHBvcnQgZW51bSAke2UubmFtZX1gKTtcbiAgICAgIGUuYWxsb3dlZFZhbHVlcy5mb3JFYWNoKHZhbCA9PiB7XG4gICAgICAgIGNvZGUubGluZSgnLyoqJyk7XG4gICAgICAgIGNvZGUubGluZShgICogJHt2YWx9YCk7XG4gICAgICAgIGNvZGUubGluZSgnICovJyk7XG4gICAgICAgIGNvZGUubGluZShgJHt0aGlzLnJlc29sdmVFbnVtVmFsdWUodmFsKX0gPSAnJHt2YWx9JyxgKTtcbiAgICAgICAgY29kZS5saW5lKCk7XG4gICAgICB9KTtcbiAgICAgIGNvZGUuY2xvc2VCbG9jaygpO1xuICAgICAgY29kZS5saW5lKCk7XG4gICAgfSk7XG4gICAgY29kZS5jbG9zZUJsb2NrKCk7XG4gICAgY29kZS5saW5lKCk7XG4gIH1cblxuICBwcml2YXRlIGVtaXRQcm9kdWN0RGVzY3JpcHRpb24oY29kZTogajJqLkNvZGUpIHtcbiAgICBjb25zdCBwcm9kdWN0ID0gdGhpcy5wcm9kdWN0RGF0YUFnZ3JlZ2F0ZS5wcm9kdWN0O1xuICAgIGNvZGUubGluZSgnLyoqJyk7XG4gICAgY29kZS5saW5lKGAgKiAke3RoaXMuc2FuaXRpemVkVHlwZU5hbWV9YCk7XG4gICAgY29kZS5saW5lKCcgKicpO1xuICAgIGlmIChwcm9kdWN0LlNob3J0RGVzY3JpcHRpb24pIHtcbiAgICAgIGNvZGUubGluZShgICogJHtwcm9kdWN0LlNob3J0RGVzY3JpcHRpb259YCk7XG4gICAgICBjb2RlLmxpbmUoJyAqJyk7XG4gICAgfVxuICAgIHByb2R1Y3QuU3VwcG9ydERlc2NyaXB0aW9uICYmIGNvZGUubGluZShgICogJHtwcm9kdWN0LlN1cHBvcnREZXNjcmlwdGlvbn1gKTtcbiAgICBwcm9kdWN0LlN1cHBvcnRFbWFpbCAmJiBjb2RlLmxpbmUoYCAqIFN1cHBvcnQgRW1haWw6ICR7cHJvZHVjdC5TdXBwb3J0RW1haWx9YCk7XG4gICAgcHJvZHVjdC5TdXBwb3J0VXJsICYmIGNvZGUubGluZShgICogU3VwcG9ydCBVcmw6ICR7cHJvZHVjdC5TdXBwb3J0VXJsfWApO1xuICAgIHByb2R1Y3QuRGlzdHJpYnV0b3IgJiYgY29kZS5saW5lKGAgKiBEaXN0cmlidXRvcjogJHtwcm9kdWN0LkRpc3RyaWJ1dG9yfWApO1xuICAgIHByb2R1Y3QuT3duZXIgJiYgY29kZS5saW5lKGAgKiBPd25lcjogJHtwcm9kdWN0Lk93bmVyfWApO1xuICAgIGNvZGUubGluZSgnICovJyk7XG4gIH1cblxuICBwcml2YXRlIGVtaXRDb25zdHJ1Y3RDbGFzcyhjb2RlOiBqMmouQ29kZSkge1xuICAgIHRoaXMuZW1pdFByb2R1Y3REZXNjcmlwdGlvbihjb2RlKTtcbiAgICBjb2RlLm9wZW5CbG9jayhgZXhwb3J0IGNsYXNzICR7dGhpcy5jb25zdHJ1Y3RDbGFzc05hbWV9IGV4dGVuZHMgJHt0aGlzLmNvbnN0cnVjdENsYXNzTmFtZX1CYXNlYCk7XG4gICAgZm9yIChjb25zdCBwcm9wIG9mIHRoaXMucmVzb3VyY2VBdHRyaWJ1dGVzKSB7XG4gICAgICBpZiAodGhpcy5vdXRwdXREZXNjcmlwdGlvbnNbcHJvcF0pIHtcbiAgICAgICAgY29kZS5saW5lKCcvKionKTtcbiAgICAgICAgY29kZS5saW5lKGAgKiAke3RoaXMub3V0cHV0RGVzY3JpcHRpb25zW3Byb3BdfWApO1xuICAgICAgICBjb2RlLmxpbmUoJyAqLycpO1xuICAgICAgfVxuICAgICAgY29kZS5saW5lKGBwdWJsaWMgcmVhZG9ubHkgJHtwcm9wfTogc3RyaW5nO2ApO1xuICAgIH1cbiAgICBjb2RlLmxpbmUoJ3ByaXZhdGUgcmVhZG9ubHkgcHJvdmlzaW9uZWRQcm9kdWN0OiBzYy5DZm5DbG91ZEZvcm1hdGlvblByb3Zpc2lvbmVkUHJvZHVjdDsnKTtcbiAgICBjb2RlLmxpbmUoKTtcblxuICAgIGNvZGUubGluZSgnLyoqJyk7XG4gICAgY29kZS5saW5lKGAgKiBDcmVhdGUgYSBuZXcgU2VydmljZSBDYXRhbG9nIFxcYCR7dGhpcy5zYW5pdGl6ZWRUeXBlTmFtZX1cXGAgcHJvZHVjdC5gKTtcbiAgICBjb2RlLmxpbmUoJyAqJyk7XG4gICAgY29kZS5saW5lKCcgKiBAcGFyYW0gc2NvcGUgLSBzY29wZSBpbiB3aGljaCB0aGlzIHJlc291cmNlIGlzIGRlZmluZWQnKTtcbiAgICBjb2RlLmxpbmUoJyAqIEBwYXJhbSBpZCAgICAtIHNjb3BlZCBpZCBvZiB0aGUgcmVzb3VyY2UnKTtcbiAgICBpZiAodGhpcy5oYXNQYXJhbWV0ZXJzKSB7XG4gICAgICBjb2RlLmxpbmUoJyAqIEBwYXJhbSBwcm9wcyAtIHJlc291cmNlIHByb3BlcnRpZXMnKTtcbiAgICB9XG4gICAgY29kZS5saW5lKCcgKi8nKTtcbiAgICBjb2RlLm9wZW5CbG9jayhgY29uc3RydWN0b3Ioc2NvcGU6IGNvbnN0cnVjdHMuQ29uc3RydWN0LCBpZDogc3RyaW5nJHt0aGlzLmhhc1BhcmFtZXRlcnMgPyAnLCBwcm9wczogJyArIHRoaXMucHJvcHNTdHJ1Y3ROYW1lIDogJyd9KWApO1xuICAgIGNvZGUubGluZSgnc3VwZXIoc2NvcGUsIGlkKTsnKTtcbiAgICBjb2RlLmxpbmUoJycpO1xuICAgIGNvZGUubGluZShcInRoaXMucHJvdmlzaW9uZWRQcm9kdWN0ID0gbmV3IHNjLkNmbkNsb3VkRm9ybWF0aW9uUHJvdmlzaW9uZWRQcm9kdWN0KHRoaXMsICdSZXNvdXJjZScsIHtcIik7XG4gICAgY29kZS5saW5lKCcgIHByb3Zpc2lvbmVkUHJvZHVjdE5hbWU6IHRoaXMubm9kZS5pZCwnKTtcblxuICAgIGlmICh0aGlzLnByb2R1Y3REYXRhQWdncmVnYXRlLnByb3Zpc2lvbmluZ0FydGlmYWN0Lk5hbWUpIHtcbiAgICAgIGNvZGUubGluZShgICBwcm92aXNpb25pbmdBcnRpZmFjdE5hbWU6ICcke3RoaXMucHJvZHVjdERhdGFBZ2dyZWdhdGUucHJvdmlzaW9uaW5nQXJ0aWZhY3QuTmFtZSF9JyxgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29kZS5saW5lKGAgIHByb3Zpc2lvbmluZ0FydGlmYWN0SWQ6ICcke3RoaXMucHJvZHVjdERhdGFBZ2dyZWdhdGUucHJvdmlzaW9uaW5nQXJ0aWZhY3QuSWQhfScsYCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucHJvZHVjdERhdGFBZ2dyZWdhdGUucHJvZHVjdC5OYW1lKSB7XG4gICAgICBjb2RlLmxpbmUoYCAgcHJvZHVjdE5hbWU6ICcke3RoaXMucHJvZHVjdERhdGFBZ2dyZWdhdGUucHJvZHVjdC5OYW1lIX0nLGApO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb2RlLmxpbmUoYCAgcHJvZHVjdElkOiAnJHt0aGlzLnByb2R1Y3REYXRhQWdncmVnYXRlLnByb2R1Y3QuUHJvZHVjdElkIX0nLGApO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnByb2R1Y3REYXRhQWdncmVnYXRlLmxhdW5jaFBhdGguTmFtZSkge1xuICAgICAgY29kZS5saW5lKGAgIHBhdGhOYW1lOiAnJHt0aGlzLnByb2R1Y3REYXRhQWdncmVnYXRlLmxhdW5jaFBhdGguTmFtZSF9JyxgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29kZS5saW5lKGAgIHBhdGhJZDogJyR7dGhpcy5wcm9kdWN0RGF0YUFnZ3JlZ2F0ZS5sYXVuY2hQYXRoLklkIX0nLGApO1xuICAgIH1cblxuICAgIC8vIGdlbmVyYXRlIHByb3Zpc2lvbmluZyBwYXJhbWV0ZXJzIGZyb20gcHJvcHMgdG8gYXZvaWQgcmVkdW5kYW50IGRlZmF1bHRzXG4gICAgaWYgKHRoaXMuaGFzUGFyYW1ldGVycykge1xuICAgICAgdGhpcy5lbWl0UGFyYW1ldGVycyhjb2RlKTtcbiAgICB9XG5cbiAgICBjb2RlLmxpbmUoJ30pOycpO1xuICAgIGNvZGUubGluZSgpO1xuICAgIGNvZGUubGluZSgndGhpcy5wcm92aXNpb25lZFByb2R1Y3RJZCA9IHRoaXMucHJvdmlzaW9uZWRQcm9kdWN0LnJlZjsnKTtcbiAgICBjb2RlLmxpbmUoXCJ0aGlzLmNsb3VkRm9ybWF0aW9uU3RhY2tBcm4gPSBjZGsuVG9rZW4uYXNTdHJpbmcoY2RrLkZuLmdldEF0dCh0aGlzLnByb3Zpc2lvbmVkUHJvZHVjdC5sb2dpY2FsSWQsICdDbG91ZGZvcm1hdGlvblN0YWNrQXJuJykpO1wiKTtcbiAgICBjb2RlLmxpbmUoXCJ0aGlzLnJlY29yZElkID0gY2RrLlRva2VuLmFzU3RyaW5nKGNkay5Gbi5nZXRBdHQodGhpcy5wcm92aXNpb25lZFByb2R1Y3QubG9naWNhbElkLCAnUmVjb3JkSWQnKSk7XCIpO1xuICAgIHRoaXMub3V0cHV0S2V5cz8uZm9yRWFjaChvdXRwdXQgPT4ge1xuICAgICAgY29kZS5saW5lKGB0aGlzLiR7Y2FtZWwob3V0cHV0LktleSEpfSA9IGNkay5Ub2tlbi5hc1N0cmluZyhjZGsuRm4uZ2V0QXR0KHRoaXMucHJvdmlzaW9uZWRQcm9kdWN0LmxvZ2ljYWxJZCwgJ091dHB1dHMuJHtvdXRwdXQuS2V5IX0nKSk7YCk7XG4gICAgfSk7XG4gICAgY29kZS5jbG9zZUJsb2NrKCk7XG5cbiAgICAvLyBDbG9zZSBjb25zdHJ1Y3QgY2xhc3NcbiAgICBjb2RlLmNsb3NlQmxvY2soKTtcbiAgfVxufVxuIl19
package/package.json CHANGED
@@ -59,7 +59,7 @@
59
59
  },
60
60
  "main": "lib/index.js",
61
61
  "license": "Apache-2.0",
62
- "version": "0.2.158",
62
+ "version": "0.2.159",
63
63
  "jest": {
64
64
  "testMatch": [
65
65
  "<rootDir>/src/**/__tests__/**/*.ts?(x)",