@sumaris-net/ngx-components 18.6.17 → 18.6.19-alpha1

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.
@@ -190,7 +190,7 @@ export class AppPropertiesForm extends AppForm {
190
190
  }
191
191
  removeAt(index) {
192
192
  this._helper.removeAt(index);
193
- this._definitionsByIndex = {}; // clear map by index
193
+ this.clearTemplateCache();
194
194
  this.markForCheck();
195
195
  }
196
196
  async setValue(data) {
@@ -208,6 +208,7 @@ export class AppPropertiesForm extends AppForm {
208
208
  property.key = (definitionKeys.find((defKey) => defKey.key === property.key) || { key: property.key, value: property.key });
209
209
  });
210
210
  }
211
+ this.clearTemplateCache();
211
212
  this._helper.resize(values.length);
212
213
  this._helper.formArray.patchValue(values, { emitEvent: false });
213
214
  this.markAsPristine();
@@ -221,7 +222,17 @@ export class AppPropertiesForm extends AppForm {
221
222
  console.debug('[app-properties-form] Converting data as object', data, json);
222
223
  return json;
223
224
  }
225
+ clear() {
226
+ if (this._helper.formArray.length) {
227
+ this._helper.resize(0);
228
+ }
229
+ this.clearTemplateCache();
230
+ this.markForCheck();
231
+ }
224
232
  /* -- protected methods -- */
233
+ clearTemplateCache() {
234
+ this._definitionsByIndex = {}; // clear map by index
235
+ }
225
236
  async suggestDefinitionKeys(value, filter, sortBy, sortDirection, opts) {
226
237
  let items = await firstNotNilPromise(this._definitionKeys$, { stop: this.destroySubject });
227
238
  // DEBUG
@@ -303,4 +314,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
303
314
  }], definitions: [{
304
315
  type: Input
305
316
  }] } });
306
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvcGVydGllcy5mb3JtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb3JlL2Zvcm0vcHJvcGVydGllcy9wcm9wZXJ0aWVzLmZvcm0udHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2NvcmUvZm9ybS9wcm9wZXJ0aWVzL3Byb3BlcnRpZXMuZm9ybS5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSx1QkFBdUIsRUFBcUIsU0FBUyxFQUFFLE1BQU0sRUFBWSxLQUFLLEVBQVUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRW5KLE9BQU8sRUFBK0Msd0JBQXdCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUN6SCxPQUFPLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUcxRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXhDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRXpELE9BQU8sRUFBRSxlQUFlLEVBQTBCLE1BQU0scUJBQXFCLENBQUM7QUFDOUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBR3JELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRTVELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUM1QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUVqRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0seUJBQXlCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWN0RCxNQUFNLE9BQU8saUJBQ1gsU0FBUSxPQUFZO0lBeUVS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QUFFLEVBQUUsT0FBTyxDQUFDLG1CQUNoRSx1QkFBdUIsQ0FBQyxNQUFNOzswQkFpRjVDLFFBQVE7eUNBeERGLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDa0MsTUFBTTtzQkFBN0MsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFDN0IsVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNrQyxXQUFXO3NCQUFsRCxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQUM3QixhQUFhO3NCQUFyQixLQUFLO2dCQUNrQyxjQUFjO3NCQUFyRCxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQUM3QixhQUFhO3NCQUFyQixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ2tDLGFBQWE7c0JBQXBELEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBQzdCLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFNTyxtQkFBbUI7c0JBQS9CLEtBQUs7Z0JBT08sV0FBVztzQkFBdkIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGJvb2xlYW5BdHRyaWJ1dGUsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBpbmplY3QsIEluamVjdG9yLCBJbnB1dCwgT25Jbml0LCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUdyb3VwRGlyZWN0aXZlLCBVbnR5cGVkRm9ybUFycmF5LCBVbnR5cGVkRm9ybUJ1aWxkZXIsIFVudHlwZWRGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBGb3JtRmllbGREZWZpbml0aW9uLCBGb3JtRmllbGREZWZpbml0aW9uTWFwLCBGb3JtRmllbGREZWZpbml0aW9uVXRpbHMgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvZm9ybS9maWVsZC5tb2RlbCc7XG5pbXBvcnQgeyBpc0VtcHR5QXJyYXksIGlzTmlsLCBpc05vdE5pbCB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9mdW5jdGlvbnMnO1xuaW1wb3J0IHsgRGF0ZUFkYXB0ZXIsIFRoZW1lUGFsZXR0ZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xuaW1wb3J0IHsgTW9tZW50IH0gZnJvbSAnbW9tZW50JztcbmltcG9ydCB7IEFwcEZvcm0gfSBmcm9tICcuLi9mb3JtLmNsYXNzJztcbmltcG9ydCB7IFByb3BlcnR5LCBQcm9wZXJ0eU1hcCB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC90eXBlcyc7XG5pbXBvcnQgeyBQcm9wZXJ0eVZhbGlkYXRvciB9IGZyb20gJy4vcHJvcGVydHkudmFsaWRhdG9yJztcbmltcG9ydCB7IFByZWRlZmluZWRDb2xvcnMgfSBmcm9tICdAaW9uaWMvY29yZSc7XG5pbXBvcnQgeyBGb3JtQXJyYXlIZWxwZXIsIEZvcm1BcnJheUhlbHBlck9wdGlvbnMgfSBmcm9tICcuLi9hcnJheS9mb3JtLWFycmF5JztcbmltcG9ydCB7IGlzTW9iaWxlIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL3BsYXRmb3Jtcyc7XG5pbXBvcnQgeyBNYXRGb3JtRmllbGRBcHBlYXJhbmNlLCBTdWJzY3JpcHRTaXppbmcgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcbmltcG9ydCB7IE1hdEF1dG9jb21wbGV0ZUZpZWxkQ29uZmlnIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL21hdGVyaWFsL2F1dG9jb21wbGV0ZS9tYXRlcmlhbC5hdXRvY29tcGxldGUuY29uZmlnJztcbmltcG9ydCB7IHN1Z2dlc3RGcm9tQXJyYXkgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvc2VydmljZXMnO1xuaW1wb3J0IHsgTG9hZFJlc3VsdCB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9zZXJ2aWNlcy9lbnRpdHktc2VydmljZS5jbGFzcyc7XG5pbXBvcnQgeyBBcHBQcm9wZXJ0aWVzVXRpbHMsIEFwcFByb3BlcnR5VXRpbHMgfSBmcm9tICcuL3Byb3BlcnRpZXMudXRpbHMnO1xuaW1wb3J0IHsgUnhTdGF0ZSB9IGZyb20gJ0ByeC1hbmd1bGFyL3N0YXRlJztcbmltcG9ydCB7IGZpcnN0Tm90TmlsUHJvbWlzZSB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9vYnNlcnZhYmxlcyc7XG5pbXBvcnQgeyBTb3J0RGlyZWN0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc29ydCc7XG5pbXBvcnQgeyBSZWdFeHBVdGlscyB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9yZWdleHBzJztcblxuZXhwb3J0IGludGVyZmFjZSBBcHBQcm9wZXJ0aWVzRm9ybVN0YXRlIHtcbiAgZGVmaW5pdGlvbnM6IEZvcm1GaWVsZERlZmluaXRpb25bXTtcbiAgZGVmaW5pdGlvbktleXM6IFByb3BlcnR5W107XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1wcm9wZXJ0aWVzLWZvcm0nLFxuICB0ZW1wbGF0ZVVybDogJ3Byb3BlcnRpZXMuZm9ybS5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJ3Byb3BlcnRpZXMuZm9ybS5zY3NzJ10sXG4gIHByb3ZpZGVyczogW3sgcHJvdmlkZTogUHJvcGVydHlWYWxpZGF0b3IsIHVzZUNsYXNzOiBQcm9wZXJ0eVZhbGlkYXRvciB9LCBSeFN0YXRlXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIEFwcFByb3BlcnRpZXNGb3JtPE8gPSBhbnksIFQgZXh0ZW5kcyBQcm9wZXJ0eTxPPiA9IFByb3BlcnR5PE8+LCBTIGV4dGVuZHMgQXBwUHJvcGVydGllc0Zvcm1TdGF0ZSA9IEFwcFByb3BlcnRpZXNGb3JtU3RhdGU+XG4gIGV4dGVuZHMgQXBwRm9ybTxUW10+XG4gIGltcGxlbWVudHMgT25Jbml0XG57XG4gIHByb3RlY3RlZCByZWFkb25seSBfc3RhdGU6IFJ4U3RhdGU8Uz4gPSBpbmplY3QoUnhTdGF0ZSk7XG5cbiAgcHJvdGVjdGVkIF9kZWZpbml0aW9ucyQgPSB0aGlzLl9zdGF0ZS5zZWxlY3QoJ2RlZmluaXRpb25zJyk7XG4gIHByb3RlY3RlZCBfZGVmaW5pdGlvbktleXMkID0gdGhpcy5fc3RhdGUuc2VsZWN0KCdkZWZpbml0aW9uS2V5cycpO1xuXG4gIHByb3RlY3RlZCBzZXQgX2RlZmluaXRpb25LZXlzKHZhbHVlOiBQcm9wZXJ0eVtdKSB7XG4gICAgdGhpcy5fc3RhdGUuc2V0KCdkZWZpbml0aW9uS2V5cycsICgpID0+IHZhbHVlKTtcbiAgfVxuICBwcm90ZWN0ZWQgZ2V0IF9kZWZpbml0aW9uS2V5cygpOiBQcm9wZXJ0eVtdIHtcbiAgICByZXR1cm4gdGhpcy5fc3RhdGUuZ2V0KCdkZWZpbml0aW9uS2V5cycpO1xuICB9XG5cbiAgcHJvdGVjdGVkIF9kZWZpbml0aW9uQnlLZXk6IEZvcm1GaWVsZERlZmluaXRpb25NYXAgPSB7fTtcbiAgcHJvdGVjdGVkIF9kZWZpbml0aW9uc0J5SW5kZXg6IHsgW2luZGV4OiBudW1iZXJdOiBGb3JtRmllbGREZWZpbml0aW9uIH0gPSB7fTtcbiAgcHJvdGVjdGVkIF9oZWxwZXI6IEZvcm1BcnJheUhlbHBlcjxQcm9wZXJ0eT47XG5cbiAgcHJvdGVjdGVkIF9hdXRvY29tcGxldGVDb25maWc6IE1hdEF1dG9jb21wbGV0ZUZpZWxkQ29uZmlnO1xuICBwcm90ZWN0ZWQgX2ZvY3VzZWRDb250cm9sSW5kZXg6IG51bWJlcjtcblxuICBASW5wdXQoKSBmb3JtQXJyYXlOYW1lOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGZvcm1BcnJheTogVW50eXBlZEZvcm1BcnJheTtcbiAgQElucHV0KCkgb3B0aW9uczogRm9ybUFycmF5SGVscGVyT3B0aW9ucztcbiAgQElucHV0KCkgY2hpcENvbG9yOiBUaGVtZVBhbGV0dGUgfCBQcmVkZWZpbmVkQ29sb3JzID0gJ2FjY2VudCc7XG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBtb2JpbGU6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGFwcGVhcmFuY2U6IE1hdEZvcm1GaWVsZEFwcGVhcmFuY2U7XG4gIEBJbnB1dCgpIHN1YnNjcmlwdFNpemluZzogU3Vic2NyaXB0U2l6aW5nO1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgc2hvd0hpbnRLZXkgPSBmYWxzZTtcbiAgQElucHV0KCkgaGludEtleVByZWZpeCA9ICcnO1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgc2hvd01vcmVCdXR0b24gPSB0cnVlO1xuICBASW5wdXQoKSBhZGRCdXR0b25UZXh0ID0gJ0NPTU1PTi5CVE5fQUREJztcbiAgQElucHV0KCkgYWRkQnV0dG9uVGl0bGUgPSAnJztcbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIHNob3dBZGRCdXR0b24gPSB0cnVlO1xuICBASW5wdXQoKSBwYW5lbENsYXNzOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHBhbmVsV2lkdGg6IHN0cmluZztcblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVXNlIGFkZEJ1dHRvblRpdGxlIGluc3RlYWRcbiAgICogQHBhcmFtIHZhbHVlXG4gICAqL1xuICBASW5wdXQoKSBzZXQgc2hvd01vcmVCdXR0b25UaXRsZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5hZGRCdXR0b25UaXRsZSA9IHZhbHVlO1xuICB9XG4gIGdldCBzaG93TW9yZUJ1dHRvblRpdGxlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuYWRkQnV0dG9uVGl0bGU7XG4gIH1cblxuICBASW5wdXQoKSBzZXQgZGVmaW5pdGlvbnModmFsdWU6IEZvcm1GaWVsZERlZmluaXRpb25bXSkge1xuICAgIHRoaXMuX3N0YXRlLnNldCgnZGVmaW5pdGlvbnMnLCAoKSA9PiB2YWx1ZSk7XG4gIH1cbiAgZ2V0IGRlZmluaXRpb25zKCk6IEZvcm1GaWVsZERlZmluaXRpb25bXSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXRlLmdldCgnZGVmaW5pdGlvbnMnKTtcbiAgfVxuXG4gIHNldCB2YWx1ZShkYXRhOiBUW10pIHtcbiAgICB0aGlzLnNldFZhbHVlKGRhdGEpO1xuICB9XG5cbiAgZ2V0IHZhbHVlKCk6IFRbXSB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybUFycmF5LnZhbHVlIGFzIFRbXTtcbiAgfVxuXG4gIGdldCBsZW5ndGgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtQXJyYXk/Lmxlbmd0aCB8fCAwO1xuICB9XG5cbiAgZ2V0IGZpZWxkRm9ybXMoKTogVW50eXBlZEZvcm1Hcm91cFtdIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtQXJyYXkuY29udHJvbHMgYXMgVW50eXBlZEZvcm1Hcm91cFtdO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIGluamVjdG9yOiBJbmplY3RvcixcbiAgICBwcm90ZWN0ZWQgZm9ybUJ1aWxkZXI6IFVudHlwZWRGb3JtQnVpbGRlcixcbiAgICBwcm90ZWN0ZWQgZGF0ZUFkYXB0ZXI6IERhdGVBZGFwdGVyPE1vbWVudD4sXG4gICAgcHJvdGVjdGVkIGNkOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcm90ZWN0ZWQgdmFsaWRhdG9yOiBQcm9wZXJ0eVZhbGlkYXRvcixcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIGZvcm1Hcm91cERpcjogRm9ybUdyb3VwRGlyZWN0aXZlXG4gICkge1xuICAgIHN1cGVyKGluamVjdG9yLCBudWxsKTtcblxuICAgIHRoaXMudGFiaW5kZXggPSAyMDsgLy8gRm9yIGNvbXBhdGliaWxpdHkgLSBUT0RPIHJlbW92ZSBsYXRlclxuICAgIC8vdGhpcy5kZWJ1ZyA9ICFlbnZpcm9ubWVudC5wcm9kdWN0aW9uO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgaWYgKHRoaXMub3B0aW9ucz8uYWxsb3dFbXB0eUFycmF5ID09PSBmYWxzZSAmJiBpc0VtcHR5QXJyYXkodGhpcy5kZWZpbml0aW9ucykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk1pc3Npbmcgb3IgaW52YWxpZCBhdHRyaWJ1dGUgJ2RlZmluaXRpb25zJ1wiKTtcbiAgICB9XG5cbiAgICAvLyBSZXRyaWV2ZSB0aGUgZm9ybVxuICAgIGNvbnN0IGZvcm0gPVxuICAgICAgKHRoaXMuZm9ybUFycmF5ICYmICh0aGlzLmZvcm1BcnJheS5wYXJlbnQgYXMgVW50eXBlZEZvcm1Hcm91cCkpIHx8ICh0aGlzLmZvcm1Hcm91cERpciAmJiB0aGlzLmZvcm1Hcm91cERpci5mb3JtKSB8fCB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHt9KTtcbiAgICB0aGlzLnNldEZvcm0oZm9ybSk7XG5cbiAgICB0aGlzLmZvcm1BcnJheSA9IHRoaXMuZm9ybUFycmF5IHx8ICh0aGlzLmZvcm1BcnJheU5hbWUgJiYgKGZvcm0uZ2V0KHRoaXMuZm9ybUFycmF5TmFtZSkgYXMgVW50eXBlZEZvcm1BcnJheSkpO1xuICAgIHRoaXMuZm9ybUFycmF5TmFtZSA9XG4gICAgICB0aGlzLmZvcm1BcnJheU5hbWUgfHwgKHRoaXMuZm9ybUFycmF5ICYmIE9iamVjdC5rZXlzKGZvcm0uY29udHJvbHMpLmZpbmQoKGtleSkgPT4gZm9ybS5nZXQoa2V5KSA9PT0gdGhpcy5mb3JtQXJyYXkpKSB8fCAncHJvcGVydGllcyc7XG4gICAgaWYgKCF0aGlzLmZvcm1BcnJheSkge1xuICAgICAgY29uc29sZS53YXJuKGBNaXNzaW5nIGFycmF5IGNvbnRyb2wgJyR7dGhpcy5mb3JtQXJyYXlOYW1lfScuIFdpbGwgY3JlYXRlIGl0IWApO1xuICAgICAgdGhpcy5mb3JtQXJyYXkgPSB0aGlzLmZvcm1CdWlsZGVyLmFycmF5KFtdKTtcbiAgICAgIHRoaXMuZm9ybS5hZGRDb250cm9sKHRoaXMuZm9ybUFycmF5TmFtZSwgdGhpcy5mb3JtQXJyYXkpO1xuICAgIH1cblxuICAgIHRoaXMuX2hlbHBlciA9IG5ldyBGb3JtQXJyYXlIZWxwZXI8UHJvcGVydHk+KFxuICAgICAgdGhpcy5mb3JtQXJyYXksXG4gICAgICAodmFsdWUpID0+IHRoaXMudmFsaWRhdG9yLmdldEZvcm1Hcm91cCh2YWx1ZSksXG4gICAgICAodjEsIHYyKSA9PiAoIXYxICYmICF2MikgfHwgdjEua2V5ID09PSB2Mi5rZXksXG4gICAgICAodmFsdWUpID0+IHRoaXMuaXNFbXB0eVByb3BlcnR5KHZhbHVlKSxcbiAgICAgIHRoaXMub3B0aW9uc1xuICAgICk7XG5cbiAgICBzdXBlci5uZ09uSW5pdCgpO1xuXG4gICAgLy8gRGVmYXVsdCB2YWx1ZXNcbiAgICB0aGlzLm1vYmlsZSA9IHRoaXMubW9iaWxlID8/IGlzTW9iaWxlKHdpbmRvdyk7XG5cbiAgICAvLyBDb21ibyBrZXlcbiAgICB0aGlzLl9hdXRvY29tcGxldGVDb25maWcgPSB7XG4gICAgICBzdWdnZXN0Rm46ICh2YWx1ZSwgZmlsdGVyLCBzb3J0QnksIHNvcnREaXJlY3Rpb24sIG9wdHMpID0+IHRoaXMuc3VnZ2VzdERlZmluaXRpb25LZXlzKHZhbHVlLCBmaWx0ZXIsICd2YWx1ZScsIHNvcnREaXJlY3Rpb24sIG9wdHMpLFxuICAgICAgZXF1YWxzOiAodjEsIHYyKSA9PiAodjE/LmtleSB8fCB2MSkgPT09ICh2Mj8ua2V5IHx8IHYyKSxcbiAgICAgIGRpc3BsYXlXaXRoOiAodmFsdWU6IGFueSkgPT4ge1xuICAgICAgICAvLyBERUJVR1xuICAgICAgICBpZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1ZygnW2FwcC1wcm9wZXJ0aWVzLWZvcm1dIERpc3BsYXlpbmcgdmFsdWUnLCB2YWx1ZSk7XG5cbiAgICAgICAgLy8gVmFsdWUgaXMgYW4gb2JqZWN0IChhIFByb3BlcnR5KVxuICAgICAgICBpZiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgIHJldHVybiAodmFsdWUgYXMgUHJvcGVydHkpLnZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVmFsdWUgaXMgYSBrZXlcbiAgICAgICAgY29uc3QgZGVmID0gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiB0aGlzLl9kZWZpbml0aW9uQnlLZXlbdmFsdWVdO1xuICAgICAgICBpZiAoIWRlZikgcmV0dXJuIHZhbHVlO1xuICAgICAgICByZXR1cm4gdGhpcy50cmFuc2xhdGUuaW5zdGFudChkZWYubGFiZWwpO1xuICAgICAgfSxcbiAgICAgIGF0dHJpYnV0ZXM6IFsndmFsdWUnXSxcbiAgICAgIGNvbHVtbk5hbWVzOiBbdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnU0VUVElOR1MuUFJPUEVSVFlfS0VZJyldLFxuICAgICAgc3BsaXRTZWFyY2hUZXh0OiBmYWxzZSxcbiAgICAgIHNob3dBbGxPbkZvY3VzOiB0cnVlLFxuICAgICAgc2VsZWN0SW5wdXRDb250ZW50T25Gb2N1czogdHJ1ZSxcbiAgICB9O1xuXG4gICAgdGhpcy5fc3RhdGUuaG9sZCh0aGlzLl9zdGF0ZS5zZWxlY3QoJ2RlZmluaXRpb25zJyksIChkZWZpbml0aW9ucykgPT4ge1xuICAgICAgaWYgKHRoaXMubG9hZGVkKSB0aGlzLnByb2Nlc3NEZWZpbml0aW9ucyhkZWZpbml0aW9ucyk7XG4gICAgfSk7XG5cbiAgICB0aGlzLnByb2Nlc3NEZWZpbml0aW9ucyh0aGlzLmRlZmluaXRpb25zKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBwcm9jZXNzRGVmaW5pdGlvbnMoZGVmaW5pdGlvbnM6IEZvcm1GaWVsZERlZmluaXRpb25bXSkge1xuICAgIGlmICghZGVmaW5pdGlvbnMpIHJldHVybiBbXTtcblxuICAgIC8vIERFQlVHXG4gICAgaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcoJ1thcHAtcHJvcGVydGllcy1mb3JtXSBQcm9jZXNzaW5nIGRlZmluaXRpb25zLi4uJywgZGVmaW5pdGlvbnMpO1xuXG4gICAgLy8gUHJlcGFyZSBkZWZpbml0aW9uIChlLmcuIHJlc29sdmUgdG9rZW5zIGlmIGFueSlcbiAgICBkZWZpbml0aW9ucyA9IEZvcm1GaWVsZERlZmluaXRpb25VdGlscy5wcmVwYXJlRGVmaW5pdGlvbnModGhpcy5pbmplY3RvciwgZGVmaW5pdGlvbnMgfHwgW10pO1xuXG4gICAgLy8gRmlsbCBvcHRpb25zIG1hcFxuICAgIGNvbnN0IGRlZmluaXRpb25zQnlLZXkgPSA8Rm9ybUZpZWxkRGVmaW5pdGlvbk1hcD57fTtcbiAgICB0aGlzLl9kZWZpbml0aW9uS2V5cyA9IGRlZmluaXRpb25zXG4gICAgICAubWFwKChkZWYpID0+IHtcbiAgICAgICAgZGVmaW5pdGlvbnNCeUtleVtkZWYua2V5XSA9IGRlZjtcbiAgICAgICAgaWYgKGRlZi5kaXNhYmxlZCkgcmV0dXJuIG51bGw7XG4gICAgICAgIHJldHVybiB7IGtleTogZGVmLmtleSwgdmFsdWU6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoZGVmLmxhYmVsKSB9O1xuICAgICAgfSlcbiAgICAgIC5maWx0ZXIoaXNOb3ROaWwpO1xuICAgIHRoaXMuX2RlZmluaXRpb25CeUtleSA9IGRlZmluaXRpb25zQnlLZXk7XG4gIH1cblxuICBnZXREZWZpbml0aW9uQXQoaW5kZXg6IG51bWJlcik6IEZvcm1GaWVsZERlZmluaXRpb24ge1xuICAgIGxldCBkZWZpbml0aW9uID0gdGhpcy5fZGVmaW5pdGlvbnNCeUluZGV4W2luZGV4XTtcbiAgICBpZiAoIWRlZmluaXRpb24pIHtcbiAgICAgIGRlZmluaXRpb24gPSB0aGlzLnVwZGF0ZURlZmluaXRpb25BdChpbmRleCwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgIH1cbiAgICByZXR1cm4gZGVmaW5pdGlvbjtcbiAgfVxuXG4gIHVwZGF0ZURlZmluaXRpb25BdChpbmRleDogbnVtYmVyLCBvcHRzPzogeyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pOiBGb3JtRmllbGREZWZpbml0aW9uIHtcbiAgICBsZXQgdmFsdWUgPSAodGhpcy5mb3JtQXJyYXkuYXQoaW5kZXgpIGFzIFVudHlwZWRGb3JtR3JvdXApLmNvbnRyb2xzLmtleS52YWx1ZTtcbiAgICBjb25zdCBrZXkgPSB2YWx1ZT8ua2V5IHx8IHZhbHVlO1xuICAgIGNvbnN0IGRlZmluaXRpb24gPSAoa2V5ICYmIHRoaXMuX2RlZmluaXRpb25CeUtleVtrZXldKSB8fCBudWxsO1xuICAgIHRoaXMuX2RlZmluaXRpb25zQnlJbmRleFtpbmRleF0gPSBkZWZpbml0aW9uOyAvLyB1cGRhdGUgbWFwIGJ5IGluZGV4XG4gICAgaWYgKG9wdHM/LmVtaXRFdmVudCAhPT0gZmFsc2UpIHtcbiAgICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICAgIHJldHVybiBkZWZpbml0aW9uO1xuICB9XG5cbiAgcmVtb3ZlQXQoaW5kZXg6IG51bWJlcikge1xuICAgIHRoaXMuX2hlbHBlci5yZW1vdmVBdChpbmRleCk7XG4gICAgdGhpcy5fZGVmaW5pdGlvbnNCeUluZGV4ID0ge307IC8vIGNsZWFyIG1hcCBieSBpbmRleFxuICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBhc3luYyBzZXRWYWx1ZShkYXRhOiBQcm9wZXJ0eU1hcCB8IFRbXSkge1xuICAgIGlmICghZGF0YSkgcmV0dXJuOyAvLyBTa2lwXG5cbiAgICBjb25zdCBbZGVmaW5pdGlvbnMsIGRlZmluaXRpb25LZXlzXSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgIGZpcnN0Tm90TmlsUHJvbWlzZSh0aGlzLl9kZWZpbml0aW9ucyQsIHsgc3RvcDogdGhpcy5kZXN0cm95U3ViamVjdCB9KSxcbiAgICAgIGZpcnN0Tm90TmlsUHJvbWlzZSh0aGlzLl9kZWZpbml0aW9uS2V5cyQsIHsgc3RvcDogdGhpcy5kZXN0cm95U3ViamVjdCB9KSxcbiAgICBdKTtcblxuICAgIC8vIFRyYW5zZm9ybSBwcm9wZXJ0aWVzIG1hcCBpbnRvIGFycmF5XG4gICAgY29uc3QgdmFsdWVzID0gYXdhaXQgQXBwUHJvcGVydGllc1V0aWxzLmFycmF5RnJvbU9iamVjdChkYXRhLCBkZWZpbml0aW9ucyk7XG5cbiAgICAvLyBXb3JrYXJvdW5kIGJlY2F1c2Ugd2hlbiBhdXRvY29tcGxldGUgdXNlIG1hdC1zZWxlY3QgKHdoZW4gbW9iaWxlKSwgaXQgbmVlZHMgdG8gZGlzcGxheSB0aGUgdmFsdWUgLSBmaXggaXNzdWUgbmd4LXN1bWFyaXMtY29tcG9uZW50cyMxNlxuICAgIGlmICh0aGlzLm1vYmlsZSkge1xuICAgICAgdmFsdWVzLmZvckVhY2goKHByb3BlcnR5KSA9PiB7XG4gICAgICAgIHByb3BlcnR5LmtleSA9IChkZWZpbml0aW9uS2V5cy5maW5kKChkZWZLZXkpID0+IGRlZktleS5rZXkgPT09IHByb3BlcnR5LmtleSkgfHwgPFByb3BlcnR5Pnsga2V5OiBwcm9wZXJ0eS5rZXksIHZhbHVlOiBwcm9wZXJ0eS5rZXkgfSkgYXMgYW55O1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5faGVscGVyLnJlc2l6ZSh2YWx1ZXMubGVuZ3RoKTtcbiAgICB0aGlzLl9oZWxwZXIuZm9ybUFycmF5LnBhdGNoVmFsdWUodmFsdWVzLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG5cbiAgICB0aGlzLm1hcmtBc1ByaXN0aW5lKCk7XG4gICAgdGhpcy5tYXJrQXNMb2FkZWQoKTtcbiAgfVxuXG4gIGdldFZhbHVlQXNKc29uKCk6IFByb3BlcnR5TWFwIHtcbiAgICBjb25zdCBkYXRhID0gdGhpcy52YWx1ZTtcbiAgICBjb25zdCBqc29uID0gQXBwUHJvcGVydGllc1V0aWxzLmFycmF5QXNPYmplY3QoZGF0YSwgdGhpcy5kZWZpbml0aW9ucywge1xuICAgICAgb21pdE5pbE9yQmxhbms6IHRoaXMub3B0aW9ucz8uYWxsb3dEdXBsaWNhdGVkVmFsdWVzICE9PSB0cnVlLFxuICAgIH0pO1xuICAgIGNvbnNvbGUuZGVidWcoJ1thcHAtcHJvcGVydGllcy1mb3JtXSBDb252ZXJ0aW5nIGRhdGEgYXMgb2JqZWN0JywgZGF0YSwganNvbik7XG4gICAgcmV0dXJuIGpzb247XG4gIH1cblxuICAvKiAtLSBwcm90ZWN0ZWQgbWV0aG9kcyAtLSAqL1xuXG4gIHByb3RlY3RlZCBhc3luYyBzdWdnZXN0RGVmaW5pdGlvbktleXMoXG4gICAgdmFsdWU6IGFueSxcbiAgICBmaWx0ZXI/OiBhbnksXG4gICAgc29ydEJ5Pzogc3RyaW5nIHwga2V5b2YgUHJvcGVydHksXG4gICAgc29ydERpcmVjdGlvbj86IFNvcnREaXJlY3Rpb24sXG4gICAgb3B0cz86IHtcbiAgICAgIG9mZnNldD86IG51bWJlcjtcbiAgICAgIHNpemU/OiBudW1iZXI7XG4gICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgfVxuICApOiBQcm9taXNlPExvYWRSZXN1bHQ8UHJvcGVydHk+PiB7XG4gICAgbGV0IGl0ZW1zID0gYXdhaXQgZmlyc3ROb3ROaWxQcm9taXNlKHRoaXMuX2RlZmluaXRpb25LZXlzJCwgeyBzdG9wOiB0aGlzLmRlc3Ryb3lTdWJqZWN0IH0pO1xuXG4gICAgLy8gREVCVUdcbiAgICBpZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1ZygnW2FwcC1wcm9wZXJ0aWVzLWZvcm1dIFN1Z2dlc3RpbmcgZGVmaW5pdGlvbiBrZXlzJywgdmFsdWUsIGl0ZW1zKTtcblxuICAgIC8vIEdldCBhcyBrZXlcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiAhUmVnRXhwVXRpbHMuaGFzV2lsZGNhcmRDaGFyYWN0ZXIodmFsdWUpKSB7XG4gICAgICBjb25zdCBvYmogPSBpdGVtcy5maW5kKChvKSA9PiBvLmtleSA9PT0gdmFsdWUpO1xuICAgICAgaWYgKG9iaikgcmV0dXJuIHsgZGF0YTogW29ial0gfSBhcyBMb2FkUmVzdWx0PFByb3BlcnR5PjtcbiAgICB9XG5cbiAgICAvLyBHZXQgYXMgb2JqZWN0XG4gICAgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHJldHVybiB7IGRhdGE6IFt2YWx1ZV0gfSBhcyBMb2FkUmVzdWx0PFByb3BlcnR5PjtcbiAgICB9XG5cbiAgICAvLyBSZW1vdmUgYWxyZWFkeSB1c2VkIGtleXNcbiAgICBpZiAodGhpcy5vcHRpb25zPy5hbGxvd0R1cGxpY2F0ZWRWYWx1ZXMgIT09IHRydWUpIHtcbiAgICAgIGNvbnN0IGV4aXN0aW5nS2V5cyA9ICh0aGlzLmZvcm1BcnJheS52YWx1ZSB8fCBbXSlcbiAgICAgICAgLmZpbHRlcigoXywgaW5kZXgpID0+IGluZGV4ICE9PSB0aGlzLl9mb2N1c2VkQ29udHJvbEluZGV4KVxuICAgICAgICAubWFwKEFwcFByb3BlcnR5VXRpbHMuZ2V0UHJvcGVydHlLZXkpO1xuICAgICAgaXRlbXMgPSBpdGVtcy5maWx0ZXIoKGl0ZW0pID0+ICFleGlzdGluZ0tleXMuaW5jbHVkZXMoaXRlbS5rZXkpKTtcbiAgICB9XG5cbiAgICB2YWx1ZSA9IHZhbHVlID8/ICcqJztcblxuICAgIC8vIEFueSBtYXRjaFxuICAgIGlmICghdmFsdWUuc3RhcnRzV2l0aCgnKicpKSB2YWx1ZSA9ICcqJyArIHZhbHVlO1xuXG4gICAgcmV0dXJuIHN1Z2dlc3RGcm9tQXJyYXkoaXRlbXMsIHZhbHVlLCB7IHNlYXJjaEF0dHJpYnV0ZTogJ3ZhbHVlJywgLi4uZmlsdGVyIH0sIHNvcnRCeSwgc29ydERpcmVjdGlvbiwgb3B0cyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgbWFya0ZvckNoZWNrKCkge1xuICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaXNFbXB0eVByb3BlcnR5KG9iajogUHJvcGVydHkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gaXNOaWwob2JqPy5rZXkpIHx8IGlzTmlsKG9iai52YWx1ZSk7XG4gIH1cbn1cbiIsIjwhLS0gUHJvcGVydGllcyAtLT5cbjxmb3JtIFtmb3JtR3JvdXBdPVwiZm9ybVwiIGNsYXNzPVwiZm9ybS1jb250YWluZXJcIj5cbiAgQGlmIChsb2FkaW5nU3ViamVjdCB8IGFzeW5jKSB7XG4gICAgPGlvbi1saXN0IFtpbnNldF09XCJtb2JpbGVcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJwcm9wZXJ0eVJvd1NrZWxldG9uXCI+PC9uZy1jb250YWluZXI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicHJvcGVydHlSb3dTa2VsZXRvblwiPjwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInByb3BlcnR5Um93U2tlbGV0b25cIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L2lvbi1saXN0PlxuICB9IEBlbHNlIHtcbiAgICA8aW9uLWxpc3QgZm9ybUFycmF5TmFtZT1cInByb3BlcnRpZXNcIiBbaW5zZXRdPVwibW9iaWxlXCI+XG4gICAgICA8IS0tIFNob3cgbW9yZSBvcHRpb25zIC0tPlxuICAgICAgQGlmICgoX2RlZmluaXRpb25LZXlzJCB8IGFzeW5jIHwgaXNOb3RFbXB0eUFycmF5KSAmJiBmb3JtQXJyYXk/Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICA8aW9uLWl0ZW0gbGluZXM9XCJub25lXCI+XG4gICAgICAgICAgPGlvbi1idXR0b24gY29sb3I9XCJsaWdodFwiIFt0aXRsZV09XCJhZGRCdXR0b25UaXRsZSB8IHRyYW5zbGF0ZVwiIChjbGljayk9XCJfaGVscGVyLmFkZCgpXCI+XG4gICAgICAgICAgICA8aW9uLWxhYmVsPnt7IGFkZEJ1dHRvblRleHQgfCB0cmFuc2xhdGUgfX08L2lvbi1sYWJlbD5cbiAgICAgICAgICAgIDxtYXQtaWNvbiBzbG90PVwiZW5kXCI+YXJyb3dfZHJvcF9kb3duPC9tYXQtaWNvbj5cbiAgICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICAgIDwvaW9uLWl0ZW0+XG4gICAgICB9XG5cbiAgICAgIEBmb3IgKGZpZWxkRm9ybSBvZiBmaWVsZEZvcm1zOyB0cmFjayBpOyBsZXQgaSA9ICRpbmRleCkge1xuICAgICAgICA8aW9uLWl0ZW0gbGluZXM9XCJub25lXCIgW2NsYXNzLm91dGxpbmVdPVwiYXBwZWFyYW5jZSA9PT0gJ291dGxpbmUnXCI+XG4gICAgICAgICAgPGlvbi1ncmlkIGNsYXNzPVwiaW9uLW5vLXBhZGRpbmdcIj5cbiAgICAgICAgICAgIDxpb24tcm93IFtmb3JtR3JvdXBOYW1lXT1cImlcIiBjbGFzcz1cImlvbi1uby1wYWRkaW5nXCI+XG4gICAgICAgICAgICAgIEBsZXQgZGVmaW5pdGlvbiA9IGdldERlZmluaXRpb25BdChpKTtcblxuICAgICAgICAgICAgICA8IS0tIHByb3BlcnR5IGtleSAtLT5cbiAgICAgICAgICAgICAgQGlmIChmaWVsZEZvcm0gfCBmb3JtR2V0Q29udHJvbDogJ2tleSc7IGFzIGNvbnRyb2wpIHtcbiAgICAgICAgICAgICAgICA8aW9uLWNvbFxuICAgICAgICAgICAgICAgICAgc2l6ZT1cIjEyXCJcbiAgICAgICAgICAgICAgICAgIHNpemUtc209XCI2XCJcbiAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCIoZGVmaW5pdGlvbiB8IHByb3BlcnR5R2V0OiAnbGFiZWwnIHwgdHJhbnNsYXRlKSB8fCAnJ1wiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImlvbi1uby1wYWRkaW5nXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8bWF0LWF1dG9jb21wbGV0ZS1maWVsZFxuICAgICAgICAgICAgICAgICAgICBmbG9hdExhYmVsPVwiYXV0b1wiXG4gICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJjb250cm9sXCJcbiAgICAgICAgICAgICAgICAgICAgW2FwcGVhcmFuY2VdPVwiYXBwZWFyYW5jZVwiXG4gICAgICAgICAgICAgICAgICAgIFtzdWJzY3JpcHRTaXppbmddPVwic2hvd0hpbnRLZXkgPyAnZml4ZWQnIDogc3Vic2NyaXB0U2l6aW5nXCJcbiAgICAgICAgICAgICAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJ1cGRhdGVEZWZpbml0aW9uQXQoaSlcIlxuICAgICAgICAgICAgICAgICAgICBbdGFiaW5kZXhdPVwidGFiaW5kZXggKyBpICogMlwiXG4gICAgICAgICAgICAgICAgICAgIFtjb25maWddPVwiX2F1dG9jb21wbGV0ZUNvbmZpZ1wiXG4gICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInU0VUVElOR1MuUFJPUEVSVFlfS0VZJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgKGZvY3VzKT1cIl9mb2N1c2VkQ29udHJvbEluZGV4ID0gaVwiXG4gICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJkZWZpbml0aW9uPy5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgIFttb2JpbGVdPVwibW9iaWxlXCJcbiAgICAgICAgICAgICAgICAgICAgW3BhbmVsQ2xhc3NdPVwicGFuZWxDbGFzc1wiXG4gICAgICAgICAgICAgICAgICAgIFtwYW5lbFdpZHRoXT1cInBhbmVsV2lkdGhcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWhpbnQgW2NsYXNzLmNkay12aXN1YWxseS1oaWRkZW5dPVwiIXNob3dIaW50S2V5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgQGxldCBrZXlWYWx1ZSA9IGNvbnRyb2wudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAge3sgaGludEtleVByZWZpeCB8fCAnJyB9fXt7IGtleVZhbHVlPy5rZXkgfHwga2V5VmFsdWUgfHwgJycgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtaGludD5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWF1dG9jb21wbGV0ZS1maWVsZD5cbiAgICAgICAgICAgICAgICA8L2lvbi1jb2w+XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICA8IS0tIHByb3BlcnR5IHZhbHVlIC0tPlxuICAgICAgICAgICAgICA8aW9uLWNvbCBzaXplPVwiXCIgc2l6ZS1zbT1cIlwiIGNsYXNzPVwiaW9uLW5vLXBhZGRpbmcgaW9uLXBhZGRpbmctc3RhcnQteHNcIj5cbiAgICAgICAgICAgICAgICBAaWYgKGRlZmluaXRpb24pIHtcbiAgICAgICAgICAgICAgICAgIDxhcHAtZm9ybS1maWVsZFxuICAgICAgICAgICAgICAgICAgICBmbG9hdExhYmVsPVwiYXV0b1wiXG4gICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJtb2JpbGUgPyAoJ1NFVFRJTkdTLlBST1BFUlRZX1ZBTFVFJyB8IHRyYW5zbGF0ZSkgOiAnICdcIlxuICAgICAgICAgICAgICAgICAgICBbYXBwZWFyYW5jZV09XCJhcHBlYXJhbmNlXCJcbiAgICAgICAgICAgICAgICAgICAgW3N1YnNjcmlwdFNpemluZ109XCJzdWJzY3JpcHRTaXppbmdcIlxuICAgICAgICAgICAgICAgICAgICBbZGVmaW5pdGlvbl09XCJkZWZpbml0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImZpZWxkRm9ybSB8IGZvcm1HZXRDb250cm9sOiAndmFsdWUnXCJcbiAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidTRVRUSU5HUy5QUk9QRVJUWV9WQUxVRScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICBbY2hpcENvbG9yXT1cImNoaXBDb2xvclwiXG4gICAgICAgICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgW2hpZGVSZXF1aXJlZE1hcmtlcl09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgW3RhYmluZGV4XT1cInRhYmluZGV4ICsgaSAqIDIgKyAxXCJcbiAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cImRlZmluaXRpb24/LmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgW3BhbmVsQ2xhc3NdPVwicGFuZWxDbGFzc1wiXG4gICAgICAgICAgICAgICAgICAgIFtwYW5lbFdpZHRoXT1cInBhbmVsV2lkdGhcIlxuICAgICAgICAgICAgICAgICAgPjwvYXBwLWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICA8IS0tIHVua25vd24gZGVmaW5pdGlvbiAtLT5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBbYXBwZWFyYW5jZV09XCJhcHBlYXJhbmNlXCIgW3N1YnNjcmlwdFNpemluZ109XCJzdWJzY3JpcHRTaXppbmdcIj5cbiAgICAgICAgICAgICAgICAgICAgQGlmIChtb2JpbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPnt7ICdTRVRUSU5HUy5QUk9QRVJUWV9WQUxVRScgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZmllbGRGb3JtIHwgZm9ybUdldENvbnRyb2w6ICd2YWx1ZSdcIlxuICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJtb2JpbGUgPyAnJyA6ICgnU0VUVElOR1MuUFJPUEVSVFlfVkFMVUUnIHwgdHJhbnNsYXRlKVwiXG4gICAgICAgICAgICAgICAgICAgICAgW3JlcXVpcmVkXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgIFt0YWJpbmRleF09XCIyMCArIGkgKiAyICsgMVwiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC9pb24tY29sPlxuXG4gICAgICAgICAgICAgIDxpb24tY29sIHNpemU9XCJhdXRvXCIgY2xhc3M9XCJpb24tbm8tcGFkZGluZ1wiPlxuICAgICAgICAgICAgICAgIEBpZiAoX2hlbHBlci5pc0xhc3QoaSkpIHtcbiAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBjb2xvcj1cImxpZ2h0XCJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIlxuICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkIHx8IChmaWVsZEZvcm0udmFsdWUgfCBhc0Jvb2xlYW46IGlzRW1wdHlQcm9wZXJ0eSkgfHwgKF9kZWZpbml0aW9uS2V5cyB8IGlzRW1wdHlBcnJheSlcbiAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIidTRVRUSU5HUy5CVE5fQUREX1BST1BFUlRZJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJfaGVscGVyLmFkZCgpXCJcbiAgICAgICAgICAgICAgICAgICAgW3RhYmluZGV4XT1cIjIwICsgaSAqIDIgKyAyXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPmFkZDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAgIGNvbG9yPVwibGlnaHRcIlxuICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRlZmluaXRpb24/LmRpc2FibGVkIHx8IGRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCInQ09NTU9OLkJUTl9ERUxFVEUnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJyZW1vdmVBdChpKVwiXG4gICAgICAgICAgICAgICAgICBbdGFiaW5kZXhdPVwiLTFcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDwvaW9uLWNvbD5cbiAgICAgICAgICAgIDwvaW9uLXJvdz5cbiAgICAgICAgICA8L2lvbi1ncmlkPlxuICAgICAgICA8L2lvbi1pdGVtPlxuICAgICAgfVxuICAgIDwvaW9uLWxpc3Q+XG4gIH1cbjwvZm9ybT5cblxuPG5nLXRlbXBsYXRlICNwcm9wZXJ0eVJvd1NrZWxldG9uPlxuICA8aW9uLWl0ZW0gbGluZXM9XCJub25lXCI+XG4gICAgPGlvbi1ncmlkIGNsYXNzPVwiaW9uLW5vLXBhZGRpbmdcIj5cbiAgICAgIDxpb24tcm93IGNsYXNzPVwiaW9uLW5vLXBhZGRpbmdcIj5cbiAgICAgICAgPCEtLSBwcm9wZXJ0eSBrZXkgLS0+XG4gICAgICAgIDxpb24tY29sIHNpemU9XCI2XCIgY2xhc3M9XCJpb24tbm8tcGFkZGluZ1wiPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBbc3Vic2NyaXB0U2l6aW5nXT1cInN1YnNjcmlwdFNpemluZ1wiPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGhpZGRlbiBkaXNhYmxlZCAvPlxuICAgICAgICAgICAgPGlvbi1za2VsZXRvbi10ZXh0IGFuaW1hdGVkIHN0eWxlPVwid2lkdGg6IDYwJVwiPjwvaW9uLXNrZWxldG9uLXRleHQ+XG4gICAgICAgICAgICA8aW9uLWljb24gbmFtZT1cImFycm93LWRyb3Bkb3duXCIgbWF0U3VmZml4PjwvaW9uLWljb24+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9pb24tY29sPlxuICAgICAgICA8IS0tIHZhbHVlIC0tPlxuICAgICAgICA8aW9uLWNvbCBjbGFzcz1cImlvbi1uby1wYWRkaW5nXCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIFtzdWJzY3JpcHRTaXppbmddPVwic3Vic2NyaXB0U2l6aW5nXCI+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgaGlkZGVuIGRpc2FibGVkIC8+XG4gICAgICAgICAgICA8aW9uLXNrZWxldG9uLXRleHQgYW5pbWF0ZWQgc3R5bGU9XCJ3aWR0aDogNjAlXCI+PC9pb24tc2tlbGV0b24tdGV4dD5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2lvbi1jb2w+XG4gICAgICAgIDwhLS0gYnV0dG9ucyAtLT5cbiAgICAgICAgPGlvbi1jb2wgc2l6ZT1cImF1dG9cIj5cbiAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBtYXQtaWNvbi1idXR0b24gY29sb3I9XCJsaWdodFwiIGRpc2FibGVkPlxuICAgICAgICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9pb24tY29sPlxuICAgICAgPC9pb24tcm93PlxuICAgIDwvaW9uLWdyaWQ+XG4gIDwvaW9uLWl0ZW0+XG48L25nLXRlbXBsYXRlPlxuIl19
317
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvcGVydGllcy5mb3JtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb3JlL2Zvcm0vcHJvcGVydGllcy9wcm9wZXJ0aWVzLmZvcm0udHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2NvcmUvZm9ybS9wcm9wZXJ0aWVzL3Byb3BlcnRpZXMuZm9ybS5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSx1QkFBdUIsRUFBcUIsU0FBUyxFQUFFLE1BQU0sRUFBWSxLQUFLLEVBQVUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRW5KLE9BQU8sRUFBK0Msd0JBQXdCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUN6SCxPQUFPLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUcxRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXhDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRXpELE9BQU8sRUFBRSxlQUFlLEVBQTBCLE1BQU0scUJBQXFCLENBQUM7QUFDOUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBR3JELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRTVELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUM1QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUVqRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0seUJBQXlCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWN0RCxNQUFNLE9BQU8saUJBQ1gsU0FBUSxPQUFZO0lBeUVS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aW1wb3J0IHsgYm9vbGVhbkF0dHJpYnV0ZSwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIGluamVjdCwgSW5qZWN0b3IsIElucHV0LCBPbkluaXQsIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtR3JvdXBEaXJlY3RpdmUsIFVudHlwZWRGb3JtQXJyYXksIFVudHlwZWRGb3JtQnVpbGRlciwgVW50eXBlZEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEZvcm1GaWVsZERlZmluaXRpb24sIEZvcm1GaWVsZERlZmluaXRpb25NYXAsIEZvcm1GaWVsZERlZmluaXRpb25VdGlscyB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9mb3JtL2ZpZWxkLm1vZGVsJztcbmltcG9ydCB7IGlzRW1wdHlBcnJheSwgaXNOaWwsIGlzTm90TmlsIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL2Z1bmN0aW9ucyc7XG5pbXBvcnQgeyBEYXRlQWRhcHRlciwgVGhlbWVQYWxldHRlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY29yZSc7XG5pbXBvcnQgeyBNb21lbnQgfSBmcm9tICdtb21lbnQnO1xuaW1wb3J0IHsgQXBwRm9ybSB9IGZyb20gJy4uL2Zvcm0uY2xhc3MnO1xuaW1wb3J0IHsgUHJvcGVydHksIFByb3BlcnR5TWFwIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL3R5cGVzJztcbmltcG9ydCB7IFByb3BlcnR5VmFsaWRhdG9yIH0gZnJvbSAnLi9wcm9wZXJ0eS52YWxpZGF0b3InO1xuaW1wb3J0IHsgUHJlZGVmaW5lZENvbG9ycyB9IGZyb20gJ0Bpb25pYy9jb3JlJztcbmltcG9ydCB7IEZvcm1BcnJheUhlbHBlciwgRm9ybUFycmF5SGVscGVyT3B0aW9ucyB9IGZyb20gJy4uL2FycmF5L2Zvcm0tYXJyYXknO1xuaW1wb3J0IHsgaXNNb2JpbGUgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvcGxhdGZvcm1zJztcbmltcG9ydCB7IE1hdEZvcm1GaWVsZEFwcGVhcmFuY2UsIFN1YnNjcmlwdFNpemluZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xuaW1wb3J0IHsgTWF0QXV0b2NvbXBsZXRlRmllbGRDb25maWcgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvbWF0ZXJpYWwvYXV0b2NvbXBsZXRlL21hdGVyaWFsLmF1dG9jb21wbGV0ZS5jb25maWcnO1xuaW1wb3J0IHsgc3VnZ2VzdEZyb21BcnJheSB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBMb2FkUmVzdWx0IH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL3NlcnZpY2VzL2VudGl0eS1zZXJ2aWNlLmNsYXNzJztcbmltcG9ydCB7IEFwcFByb3BlcnRpZXNVdGlscywgQXBwUHJvcGVydHlVdGlscyB9IGZyb20gJy4vcHJvcGVydGllcy51dGlscyc7XG5pbXBvcnQgeyBSeFN0YXRlIH0gZnJvbSAnQHJ4LWFuZ3VsYXIvc3RhdGUnO1xuaW1wb3J0IHsgZmlyc3ROb3ROaWxQcm9taXNlIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL29ic2VydmFibGVzJztcbmltcG9ydCB7IFNvcnREaXJlY3Rpb24gfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zb3J0JztcbmltcG9ydCB7IFJlZ0V4cFV0aWxzIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL3JlZ2V4cHMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFwcFByb3BlcnRpZXNGb3JtU3RhdGUge1xuICBkZWZpbml0aW9uczogRm9ybUZpZWxkRGVmaW5pdGlvbltdO1xuICBkZWZpbml0aW9uS2V5czogUHJvcGVydHlbXTtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLXByb3BlcnRpZXMtZm9ybScsXG4gIHRlbXBsYXRlVXJsOiAncHJvcGVydGllcy5mb3JtLmh0bWwnLFxuICBzdHlsZVVybHM6IFsncHJvcGVydGllcy5mb3JtLnNjc3MnXSxcbiAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBQcm9wZXJ0eVZhbGlkYXRvciwgdXNlQ2xhc3M6IFByb3BlcnR5VmFsaWRhdG9yIH0sIFJ4U3RhdGVdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgQXBwUHJvcGVydGllc0Zvcm08TyA9IGFueSwgVCBleHRlbmRzIFByb3BlcnR5PE8+ID0gUHJvcGVydHk8Tz4sIFMgZXh0ZW5kcyBBcHBQcm9wZXJ0aWVzRm9ybVN0YXRlID0gQXBwUHJvcGVydGllc0Zvcm1TdGF0ZT5cbiAgZXh0ZW5kcyBBcHBGb3JtPFRbXT5cbiAgaW1wbGVtZW50cyBPbkluaXRcbntcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IF9zdGF0ZTogUnhTdGF0ZTxTPiA9IGluamVjdChSeFN0YXRlKTtcblxuICBwcm90ZWN0ZWQgX2RlZmluaXRpb25zJCA9IHRoaXMuX3N0YXRlLnNlbGVjdCgnZGVmaW5pdGlvbnMnKTtcbiAgcHJvdGVjdGVkIF9kZWZpbml0aW9uS2V5cyQgPSB0aGlzLl9zdGF0ZS5zZWxlY3QoJ2RlZmluaXRpb25LZXlzJyk7XG5cbiAgcHJvdGVjdGVkIHNldCBfZGVmaW5pdGlvbktleXModmFsdWU6IFByb3BlcnR5W10pIHtcbiAgICB0aGlzLl9zdGF0ZS5zZXQoJ2RlZmluaXRpb25LZXlzJywgKCkgPT4gdmFsdWUpO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgX2RlZmluaXRpb25LZXlzKCk6IFByb3BlcnR5W10ge1xuICAgIHJldHVybiB0aGlzLl9zdGF0ZS5nZXQoJ2RlZmluaXRpb25LZXlzJyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgX2RlZmluaXRpb25CeUtleTogRm9ybUZpZWxkRGVmaW5pdGlvbk1hcCA9IHt9O1xuICBwcm90ZWN0ZWQgX2RlZmluaXRpb25zQnlJbmRleDogeyBbaW5kZXg6IG51bWJlcl06IEZvcm1GaWVsZERlZmluaXRpb24gfSA9IHt9O1xuICBwcm90ZWN0ZWQgX2hlbHBlcjogRm9ybUFycmF5SGVscGVyPFByb3BlcnR5PjtcblxuICBwcm90ZWN0ZWQgX2F1dG9jb21wbGV0ZUNvbmZpZzogTWF0QXV0b2NvbXBsZXRlRmllbGRDb25maWc7XG4gIHByb3RlY3RlZCBfZm9jdXNlZENvbnRyb2xJbmRleDogbnVtYmVyO1xuXG4gIEBJbnB1dCgpIGZvcm1BcnJheU5hbWU6IHN0cmluZztcbiAgQElucHV0KCkgZm9ybUFycmF5OiBVbnR5cGVkRm9ybUFycmF5O1xuICBASW5wdXQoKSBvcHRpb25zOiBGb3JtQXJyYXlIZWxwZXJPcHRpb25zO1xuICBASW5wdXQoKSBjaGlwQ29sb3I6IFRoZW1lUGFsZXR0ZSB8IFByZWRlZmluZWRDb2xvcnMgPSAnYWNjZW50JztcbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIG1vYmlsZTogYm9vbGVhbjtcbiAgQElucHV0KCkgYXBwZWFyYW5jZTogTWF0Rm9ybUZpZWxkQXBwZWFyYW5jZTtcbiAgQElucHV0KCkgc3Vic2NyaXB0U2l6aW5nOiBTdWJzY3JpcHRTaXppbmc7XG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBzaG93SGludEtleSA9IGZhbHNlO1xuICBASW5wdXQoKSBoaW50S2V5UHJlZml4ID0gJyc7XG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBzaG93TW9yZUJ1dHRvbiA9IHRydWU7XG4gIEBJbnB1dCgpIGFkZEJ1dHRvblRleHQgPSAnQ09NTU9OLkJUTl9BREQnO1xuICBASW5wdXQoKSBhZGRCdXR0b25UaXRsZSA9ICcnO1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgc2hvd0FkZEJ1dHRvbiA9IHRydWU7XG4gIEBJbnB1dCgpIHBhbmVsQ2xhc3M6IHN0cmluZztcbiAgQElucHV0KCkgcGFuZWxXaWR0aDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgYWRkQnV0dG9uVGl0bGUgaW5zdGVhZFxuICAgKiBAcGFyYW0gdmFsdWVcbiAgICovXG4gIEBJbnB1dCgpIHNldCBzaG93TW9yZUJ1dHRvblRpdGxlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLmFkZEJ1dHRvblRpdGxlID0gdmFsdWU7XG4gIH1cbiAgZ2V0IHNob3dNb3JlQnV0dG9uVGl0bGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5hZGRCdXR0b25UaXRsZTtcbiAgfVxuXG4gIEBJbnB1dCgpIHNldCBkZWZpbml0aW9ucyh2YWx1ZTogRm9ybUZpZWxkRGVmaW5pdGlvbltdKSB7XG4gICAgdGhpcy5fc3RhdGUuc2V0KCdkZWZpbml0aW9ucycsICgpID0+IHZhbHVlKTtcbiAgfVxuICBnZXQgZGVmaW5pdGlvbnMoKTogRm9ybUZpZWxkRGVmaW5pdGlvbltdIHtcbiAgICByZXR1cm4gdGhpcy5fc3RhdGUuZ2V0KCdkZWZpbml0aW9ucycpO1xuICB9XG5cbiAgc2V0IHZhbHVlKGRhdGE6IFRbXSkge1xuICAgIHRoaXMuc2V0VmFsdWUoZGF0YSk7XG4gIH1cblxuICBnZXQgdmFsdWUoKTogVFtdIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtQXJyYXkudmFsdWUgYXMgVFtdO1xuICB9XG5cbiAgZ2V0IGxlbmd0aCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmZvcm1BcnJheT8ubGVuZ3RoIHx8IDA7XG4gIH1cblxuICBnZXQgZmllbGRGb3JtcygpOiBVbnR5cGVkRm9ybUdyb3VwW10ge1xuICAgIHJldHVybiB0aGlzLmZvcm1BcnJheS5jb250cm9scyBhcyBVbnR5cGVkRm9ybUdyb3VwW107XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgIHByb3RlY3RlZCBmb3JtQnVpbGRlcjogVW50eXBlZEZvcm1CdWlsZGVyLFxuICAgIHByb3RlY3RlZCBkYXRlQWRhcHRlcjogRGF0ZUFkYXB0ZXI8TW9tZW50PixcbiAgICBwcm90ZWN0ZWQgY2Q6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByb3RlY3RlZCB2YWxpZGF0b3I6IFByb3BlcnR5VmFsaWRhdG9yLFxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgZm9ybUdyb3VwRGlyOiBGb3JtR3JvdXBEaXJlY3RpdmVcbiAgKSB7XG4gICAgc3VwZXIoaW5qZWN0b3IsIG51bGwpO1xuXG4gICAgdGhpcy50YWJpbmRleCA9IDIwOyAvLyBGb3IgY29tcGF0aWJpbGl0eSAtIFRPRE8gcmVtb3ZlIGxhdGVyXG4gICAgLy90aGlzLmRlYnVnID0gIWVudmlyb25tZW50LnByb2R1Y3Rpb247XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zPy5hbGxvd0VtcHR5QXJyYXkgPT09IGZhbHNlICYmIGlzRW1wdHlBcnJheSh0aGlzLmRlZmluaXRpb25zKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWlzc2luZyBvciBpbnZhbGlkIGF0dHJpYnV0ZSAnZGVmaW5pdGlvbnMnXCIpO1xuICAgIH1cblxuICAgIC8vIFJldHJpZXZlIHRoZSBmb3JtXG4gICAgY29uc3QgZm9ybSA9XG4gICAgICAodGhpcy5mb3JtQXJyYXkgJiYgKHRoaXMuZm9ybUFycmF5LnBhcmVudCBhcyBVbnR5cGVkRm9ybUdyb3VwKSkgfHwgKHRoaXMuZm9ybUdyb3VwRGlyICYmIHRoaXMuZm9ybUdyb3VwRGlyLmZvcm0pIHx8IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe30pO1xuICAgIHRoaXMuc2V0Rm9ybShmb3JtKTtcblxuICAgIHRoaXMuZm9ybUFycmF5ID0gdGhpcy5mb3JtQXJyYXkgfHwgKHRoaXMuZm9ybUFycmF5TmFtZSAmJiAoZm9ybS5nZXQodGhpcy5mb3JtQXJyYXlOYW1lKSBhcyBVbnR5cGVkRm9ybUFycmF5KSk7XG4gICAgdGhpcy5mb3JtQXJyYXlOYW1lID1cbiAgICAgIHRoaXMuZm9ybUFycmF5TmFtZSB8fCAodGhpcy5mb3JtQXJyYXkgJiYgT2JqZWN0LmtleXMoZm9ybS5jb250cm9scykuZmluZCgoa2V5KSA9PiBmb3JtLmdldChrZXkpID09PSB0aGlzLmZvcm1BcnJheSkpIHx8ICdwcm9wZXJ0aWVzJztcbiAgICBpZiAoIXRoaXMuZm9ybUFycmF5KSB7XG4gICAgICBjb25zb2xlLndhcm4oYE1pc3NpbmcgYXJyYXkgY29udHJvbCAnJHt0aGlzLmZvcm1BcnJheU5hbWV9Jy4gV2lsbCBjcmVhdGUgaXQhYCk7XG4gICAgICB0aGlzLmZvcm1BcnJheSA9IHRoaXMuZm9ybUJ1aWxkZXIuYXJyYXkoW10pO1xuICAgICAgdGhpcy5mb3JtLmFkZENvbnRyb2wodGhpcy5mb3JtQXJyYXlOYW1lLCB0aGlzLmZvcm1BcnJheSk7XG4gICAgfVxuXG4gICAgdGhpcy5faGVscGVyID0gbmV3IEZvcm1BcnJheUhlbHBlcjxQcm9wZXJ0eT4oXG4gICAgICB0aGlzLmZvcm1BcnJheSxcbiAgICAgICh2YWx1ZSkgPT4gdGhpcy52YWxpZGF0b3IuZ2V0Rm9ybUdyb3VwKHZhbHVlKSxcbiAgICAgICh2MSwgdjIpID0+ICghdjEgJiYgIXYyKSB8fCB2MS5rZXkgPT09IHYyLmtleSxcbiAgICAgICh2YWx1ZSkgPT4gdGhpcy5pc0VtcHR5UHJvcGVydHkodmFsdWUpLFxuICAgICAgdGhpcy5vcHRpb25zXG4gICAgKTtcblxuICAgIHN1cGVyLm5nT25Jbml0KCk7XG5cbiAgICAvLyBEZWZhdWx0IHZhbHVlc1xuICAgIHRoaXMubW9iaWxlID0gdGhpcy5tb2JpbGUgPz8gaXNNb2JpbGUod2luZG93KTtcblxuICAgIC8vIENvbWJvIGtleVxuICAgIHRoaXMuX2F1dG9jb21wbGV0ZUNvbmZpZyA9IHtcbiAgICAgIHN1Z2dlc3RGbjogKHZhbHVlLCBmaWx0ZXIsIHNvcnRCeSwgc29ydERpcmVjdGlvbiwgb3B0cykgPT4gdGhpcy5zdWdnZXN0RGVmaW5pdGlvbktleXModmFsdWUsIGZpbHRlciwgJ3ZhbHVlJywgc29ydERpcmVjdGlvbiwgb3B0cyksXG4gICAgICBlcXVhbHM6ICh2MSwgdjIpID0+ICh2MT8ua2V5IHx8IHYxKSA9PT0gKHYyPy5rZXkgfHwgdjIpLFxuICAgICAgZGlzcGxheVdpdGg6ICh2YWx1ZTogYW55KSA9PiB7XG4gICAgICAgIC8vIERFQlVHXG4gICAgICAgIGlmICh0aGlzLmRlYnVnKSBjb25zb2xlLmRlYnVnKCdbYXBwLXByb3BlcnRpZXMtZm9ybV0gRGlzcGxheWluZyB2YWx1ZScsIHZhbHVlKTtcblxuICAgICAgICAvLyBWYWx1ZSBpcyBhbiBvYmplY3QgKGEgUHJvcGVydHkpXG4gICAgICAgIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgcmV0dXJuICh2YWx1ZSBhcyBQcm9wZXJ0eSkudmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBWYWx1ZSBpcyBhIGtleVxuICAgICAgICBjb25zdCBkZWYgPSB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIHRoaXMuX2RlZmluaXRpb25CeUtleVt2YWx1ZV07XG4gICAgICAgIGlmICghZGVmKSByZXR1cm4gdmFsdWU7XG4gICAgICAgIHJldHVybiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KGRlZi5sYWJlbCk7XG4gICAgICB9LFxuICAgICAgYXR0cmlidXRlczogWyd2YWx1ZSddLFxuICAgICAgY29sdW1uTmFtZXM6IFt0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdTRVRUSU5HUy5QUk9QRVJUWV9LRVknKV0sXG4gICAgICBzcGxpdFNlYXJjaFRleHQ6IGZhbHNlLFxuICAgICAgc2hvd0FsbE9uRm9jdXM6IHRydWUsXG4gICAgICBzZWxlY3RJbnB1dENvbnRlbnRPbkZvY3VzOiB0cnVlLFxuICAgIH07XG5cbiAgICB0aGlzLl9zdGF0ZS5ob2xkKHRoaXMuX3N0YXRlLnNlbGVjdCgnZGVmaW5pdGlvbnMnKSwgKGRlZmluaXRpb25zKSA9PiB7XG4gICAgICBpZiAodGhpcy5sb2FkZWQpIHRoaXMucHJvY2Vzc0RlZmluaXRpb25zKGRlZmluaXRpb25zKTtcbiAgICB9KTtcblxuICAgIHRoaXMucHJvY2Vzc0RlZmluaXRpb25zKHRoaXMuZGVmaW5pdGlvbnMpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHByb2Nlc3NEZWZpbml0aW9ucyhkZWZpbml0aW9uczogRm9ybUZpZWxkRGVmaW5pdGlvbltdKSB7XG4gICAgaWYgKCFkZWZpbml0aW9ucykgcmV0dXJuIFtdO1xuXG4gICAgLy8gREVCVUdcbiAgICBpZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1ZygnW2FwcC1wcm9wZXJ0aWVzLWZvcm1dIFByb2Nlc3NpbmcgZGVmaW5pdGlvbnMuLi4nLCBkZWZpbml0aW9ucyk7XG5cbiAgICAvLyBQcmVwYXJlIGRlZmluaXRpb24gKGUuZy4gcmVzb2x2ZSB0b2tlbnMgaWYgYW55KVxuICAgIGRlZmluaXRpb25zID0gRm9ybUZpZWxkRGVmaW5pdGlvblV0aWxzLnByZXBhcmVEZWZpbml0aW9ucyh0aGlzLmluamVjdG9yLCBkZWZpbml0aW9ucyB8fCBbXSk7XG5cbiAgICAvLyBGaWxsIG9wdGlvbnMgbWFwXG4gICAgY29uc3QgZGVmaW5pdGlvbnNCeUtleSA9IDxGb3JtRmllbGREZWZpbml0aW9uTWFwPnt9O1xuICAgIHRoaXMuX2RlZmluaXRpb25LZXlzID0gZGVmaW5pdGlvbnNcbiAgICAgIC5tYXAoKGRlZikgPT4ge1xuICAgICAgICBkZWZpbml0aW9uc0J5S2V5W2RlZi5rZXldID0gZGVmO1xuICAgICAgICBpZiAoZGVmLmRpc2FibGVkKSByZXR1cm4gbnVsbDtcbiAgICAgICAgcmV0dXJuIHsga2V5OiBkZWYua2V5LCB2YWx1ZTogdGhpcy50cmFuc2xhdGUuaW5zdGFudChkZWYubGFiZWwpIH07XG4gICAgICB9KVxuICAgICAgLmZpbHRlcihpc05vdE5pbCk7XG4gICAgdGhpcy5fZGVmaW5pdGlvbkJ5S2V5ID0gZGVmaW5pdGlvbnNCeUtleTtcbiAgfVxuXG4gIGdldERlZmluaXRpb25BdChpbmRleDogbnVtYmVyKTogRm9ybUZpZWxkRGVmaW5pdGlvbiB7XG4gICAgbGV0IGRlZmluaXRpb24gPSB0aGlzLl9kZWZpbml0aW9uc0J5SW5kZXhbaW5kZXhdO1xuICAgIGlmICghZGVmaW5pdGlvbikge1xuICAgICAgZGVmaW5pdGlvbiA9IHRoaXMudXBkYXRlRGVmaW5pdGlvbkF0KGluZGV4LCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgfVxuICAgIHJldHVybiBkZWZpbml0aW9uO1xuICB9XG5cbiAgdXBkYXRlRGVmaW5pdGlvbkF0KGluZGV4OiBudW1iZXIsIG9wdHM/OiB7IGVtaXRFdmVudD86IGJvb2xlYW4gfSk6IEZvcm1GaWVsZERlZmluaXRpb24ge1xuICAgIGxldCB2YWx1ZSA9ICh0aGlzLmZvcm1BcnJheS5hdChpbmRleCkgYXMgVW50eXBlZEZvcm1Hcm91cCkuY29udHJvbHMua2V5LnZhbHVlO1xuICAgIGNvbnN0IGtleSA9IHZhbHVlPy5rZXkgfHwgdmFsdWU7XG4gICAgY29uc3QgZGVmaW5pdGlvbiA9IChrZXkgJiYgdGhpcy5fZGVmaW5pdGlvbkJ5S2V5W2tleV0pIHx8IG51bGw7XG4gICAgdGhpcy5fZGVmaW5pdGlvbnNCeUluZGV4W2luZGV4XSA9IGRlZmluaXRpb247IC8vIHVwZGF0ZSBtYXAgYnkgaW5kZXhcbiAgICBpZiAob3B0cz8uZW1pdEV2ZW50ICE9PSBmYWxzZSkge1xuICAgICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gICAgcmV0dXJuIGRlZmluaXRpb247XG4gIH1cblxuICByZW1vdmVBdChpbmRleDogbnVtYmVyKSB7XG4gICAgdGhpcy5faGVscGVyLnJlbW92ZUF0KGluZGV4KTtcbiAgICB0aGlzLmNsZWFyVGVtcGxhdGVDYWNoZSgpO1xuICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBhc3luYyBzZXRWYWx1ZShkYXRhOiBQcm9wZXJ0eU1hcCB8IFRbXSkge1xuICAgIGlmICghZGF0YSkgcmV0dXJuOyAvLyBTa2lwXG5cbiAgICBjb25zdCBbZGVmaW5pdGlvbnMsIGRlZmluaXRpb25LZXlzXSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgIGZpcnN0Tm90TmlsUHJvbWlzZSh0aGlzLl9kZWZpbml0aW9ucyQsIHsgc3RvcDogdGhpcy5kZXN0cm95U3ViamVjdCB9KSxcbiAgICAgIGZpcnN0Tm90TmlsUHJvbWlzZSh0aGlzLl9kZWZpbml0aW9uS2V5cyQsIHsgc3RvcDogdGhpcy5kZXN0cm95U3ViamVjdCB9KSxcbiAgICBdKTtcblxuICAgIC8vIFRyYW5zZm9ybSBwcm9wZXJ0aWVzIG1hcCBpbnRvIGFycmF5XG4gICAgY29uc3QgdmFsdWVzID0gYXdhaXQgQXBwUHJvcGVydGllc1V0aWxzLmFycmF5RnJvbU9iamVjdChkYXRhLCBkZWZpbml0aW9ucyk7XG5cbiAgICAvLyBXb3JrYXJvdW5kIGJlY2F1c2Ugd2hlbiBhdXRvY29tcGxldGUgdXNlIG1hdC1zZWxlY3QgKHdoZW4gbW9iaWxlKSwgaXQgbmVlZHMgdG8gZGlzcGxheSB0aGUgdmFsdWUgLSBmaXggaXNzdWUgbmd4LXN1bWFyaXMtY29tcG9uZW50cyMxNlxuICAgIGlmICh0aGlzLm1vYmlsZSkge1xuICAgICAgdmFsdWVzLmZvckVhY2goKHByb3BlcnR5KSA9PiB7XG4gICAgICAgIHByb3BlcnR5LmtleSA9IChkZWZpbml0aW9uS2V5cy5maW5kKChkZWZLZXkpID0+IGRlZktleS5rZXkgPT09IHByb3BlcnR5LmtleSkgfHwgPFByb3BlcnR5Pnsga2V5OiBwcm9wZXJ0eS5rZXksIHZhbHVlOiBwcm9wZXJ0eS5rZXkgfSkgYXMgYW55O1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5jbGVhclRlbXBsYXRlQ2FjaGUoKTtcbiAgICB0aGlzLl9oZWxwZXIucmVzaXplKHZhbHVlcy5sZW5ndGgpO1xuICAgIHRoaXMuX2hlbHBlci5mb3JtQXJyYXkucGF0Y2hWYWx1ZSh2YWx1ZXMsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcblxuICAgIHRoaXMubWFya0FzUHJpc3RpbmUoKTtcbiAgICB0aGlzLm1hcmtBc0xvYWRlZCgpO1xuICB9XG5cbiAgZ2V0VmFsdWVBc0pzb24oKTogUHJvcGVydHlNYXAge1xuICAgIGNvbnN0IGRhdGEgPSB0aGlzLnZhbHVlO1xuICAgIGNvbnN0IGpzb24gPSBBcHBQcm9wZXJ0aWVzVXRpbHMuYXJyYXlBc09iamVjdChkYXRhLCB0aGlzLmRlZmluaXRpb25zLCB7XG4gICAgICBvbWl0TmlsT3JCbGFuazogdGhpcy5vcHRpb25zPy5hbGxvd0R1cGxpY2F0ZWRWYWx1ZXMgIT09IHRydWUsXG4gICAgfSk7XG4gICAgY29uc29sZS5kZWJ1ZygnW2FwcC1wcm9wZXJ0aWVzLWZvcm1dIENvbnZlcnRpbmcgZGF0YSBhcyBvYmplY3QnLCBkYXRhLCBqc29uKTtcbiAgICByZXR1cm4ganNvbjtcbiAgfVxuXG4gIGNsZWFyKCkge1xuICAgIGlmICh0aGlzLl9oZWxwZXIuZm9ybUFycmF5Lmxlbmd0aCkge1xuICAgICAgdGhpcy5faGVscGVyLnJlc2l6ZSgwKTtcbiAgICB9XG4gICAgdGhpcy5jbGVhclRlbXBsYXRlQ2FjaGUoKTtcbiAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgLyogLS0gcHJvdGVjdGVkIG1ldGhvZHMgLS0gKi9cblxuICBwcm90ZWN0ZWQgY2xlYXJUZW1wbGF0ZUNhY2hlKCkge1xuICAgIHRoaXMuX2RlZmluaXRpb25zQnlJbmRleCA9IHt9OyAvLyBjbGVhciBtYXAgYnkgaW5kZXhcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBzdWdnZXN0RGVmaW5pdGlvbktleXMoXG4gICAgdmFsdWU6IGFueSxcbiAgICBmaWx0ZXI/OiBhbnksXG4gICAgc29ydEJ5Pzogc3RyaW5nIHwga2V5b2YgUHJvcGVydHksXG4gICAgc29ydERpcmVjdGlvbj86IFNvcnREaXJlY3Rpb24sXG4gICAgb3B0cz86IHtcbiAgICAgIG9mZnNldD86IG51bWJlcjtcbiAgICAgIHNpemU/OiBudW1iZXI7XG4gICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgfVxuICApOiBQcm9taXNlPExvYWRSZXN1bHQ8UHJvcGVydHk+PiB7XG4gICAgbGV0IGl0ZW1zID0gYXdhaXQgZmlyc3ROb3ROaWxQcm9taXNlKHRoaXMuX2RlZmluaXRpb25LZXlzJCwgeyBzdG9wOiB0aGlzLmRlc3Ryb3lTdWJqZWN0IH0pO1xuXG4gICAgLy8gREVCVUdcbiAgICBpZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1ZygnW2FwcC1wcm9wZXJ0aWVzLWZvcm1dIFN1Z2dlc3RpbmcgZGVmaW5pdGlvbiBrZXlzJywgdmFsdWUsIGl0ZW1zKTtcblxuICAgIC8vIEdldCBhcyBrZXlcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiAhUmVnRXhwVXRpbHMuaGFzV2lsZGNhcmRDaGFyYWN0ZXIodmFsdWUpKSB7XG4gICAgICBjb25zdCBvYmogPSBpdGVtcy5maW5kKChvKSA9PiBvLmtleSA9PT0gdmFsdWUpO1xuICAgICAgaWYgKG9iaikgcmV0dXJuIHsgZGF0YTogW29ial0gfSBhcyBMb2FkUmVzdWx0PFByb3BlcnR5PjtcbiAgICB9XG5cbiAgICAvLyBHZXQgYXMgb2JqZWN0XG4gICAgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHJldHVybiB7IGRhdGE6IFt2YWx1ZV0gfSBhcyBMb2FkUmVzdWx0PFByb3BlcnR5PjtcbiAgICB9XG5cbiAgICAvLyBSZW1vdmUgYWxyZWFkeSB1c2VkIGtleXNcbiAgICBpZiAodGhpcy5vcHRpb25zPy5hbGxvd0R1cGxpY2F0ZWRWYWx1ZXMgIT09IHRydWUpIHtcbiAgICAgIGNvbnN0IGV4aXN0aW5nS2V5cyA9ICh0aGlzLmZvcm1BcnJheS52YWx1ZSB8fCBbXSlcbiAgICAgICAgLmZpbHRlcigoXywgaW5kZXgpID0+IGluZGV4ICE9PSB0aGlzLl9mb2N1c2VkQ29udHJvbEluZGV4KVxuICAgICAgICAubWFwKEFwcFByb3BlcnR5VXRpbHMuZ2V0UHJvcGVydHlLZXkpO1xuICAgICAgaXRlbXMgPSBpdGVtcy5maWx0ZXIoKGl0ZW0pID0+ICFleGlzdGluZ0tleXMuaW5jbHVkZXMoaXRlbS5rZXkpKTtcbiAgICB9XG5cbiAgICB2YWx1ZSA9IHZhbHVlID8/ICcqJztcblxuICAgIC8vIEFueSBtYXRjaFxuICAgIGlmICghdmFsdWUuc3RhcnRzV2l0aCgnKicpKSB2YWx1ZSA9ICcqJyArIHZhbHVlO1xuXG4gICAgcmV0dXJuIHN1Z2dlc3RGcm9tQXJyYXkoaXRlbXMsIHZhbHVlLCB7IHNlYXJjaEF0dHJpYnV0ZTogJ3ZhbHVlJywgLi4uZmlsdGVyIH0sIHNvcnRCeSwgc29ydERpcmVjdGlvbiwgb3B0cyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgbWFya0ZvckNoZWNrKCkge1xuICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaXNFbXB0eVByb3BlcnR5KG9iajogUHJvcGVydHkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gaXNOaWwob2JqPy5rZXkpIHx8IGlzTmlsKG9iai52YWx1ZSk7XG4gIH1cbn1cbiIsIjwhLS0gUHJvcGVydGllcyAtLT5cbjxmb3JtIFtmb3JtR3JvdXBdPVwiZm9ybVwiIGNsYXNzPVwiZm9ybS1jb250YWluZXJcIj5cbiAgQGlmIChsb2FkaW5nU3ViamVjdCB8IGFzeW5jKSB7XG4gICAgPGlvbi1saXN0IFtpbnNldF09XCJtb2JpbGVcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJwcm9wZXJ0eVJvd1NrZWxldG9uXCI+PC9uZy1jb250YWluZXI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicHJvcGVydHlSb3dTa2VsZXRvblwiPjwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInByb3BlcnR5Um93U2tlbGV0b25cIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L2lvbi1saXN0PlxuICB9IEBlbHNlIHtcbiAgICA8aW9uLWxpc3QgZm9ybUFycmF5TmFtZT1cInByb3BlcnRpZXNcIiBbaW5zZXRdPVwibW9iaWxlXCI+XG4gICAgICA8IS0tIFNob3cgbW9yZSBvcHRpb25zIC0tPlxuICAgICAgQGlmICgoX2RlZmluaXRpb25LZXlzJCB8IGFzeW5jIHwgaXNOb3RFbXB0eUFycmF5KSAmJiBmb3JtQXJyYXk/Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICA8aW9uLWl0ZW0gbGluZXM9XCJub25lXCI+XG4gICAgICAgICAgPGlvbi1idXR0b24gY29sb3I9XCJsaWdodFwiIFt0aXRsZV09XCJhZGRCdXR0b25UaXRsZSB8IHRyYW5zbGF0ZVwiIChjbGljayk9XCJfaGVscGVyLmFkZCgpXCI+XG4gICAgICAgICAgICA8aW9uLWxhYmVsPnt7IGFkZEJ1dHRvblRleHQgfCB0cmFuc2xhdGUgfX08L2lvbi1sYWJlbD5cbiAgICAgICAgICAgIDxtYXQtaWNvbiBzbG90PVwiZW5kXCI+YXJyb3dfZHJvcF9kb3duPC9tYXQtaWNvbj5cbiAgICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICAgIDwvaW9uLWl0ZW0+XG4gICAgICB9XG5cbiAgICAgIEBmb3IgKGZpZWxkRm9ybSBvZiBmaWVsZEZvcm1zOyB0cmFjayBpOyBsZXQgaSA9ICRpbmRleCkge1xuICAgICAgICA8aW9uLWl0ZW0gbGluZXM9XCJub25lXCIgW2NsYXNzLm91dGxpbmVdPVwiYXBwZWFyYW5jZSA9PT0gJ291dGxpbmUnXCI+XG4gICAgICAgICAgPGlvbi1ncmlkIGNsYXNzPVwiaW9uLW5vLXBhZGRpbmdcIj5cbiAgICAgICAgICAgIDxpb24tcm93IFtmb3JtR3JvdXBOYW1lXT1cImlcIiBjbGFzcz1cImlvbi1uby1wYWRkaW5nXCI+XG4gICAgICAgICAgICAgIEBsZXQgZGVmaW5pdGlvbiA9IGdldERlZmluaXRpb25BdChpKTtcblxuICAgICAgICAgICAgICA8IS0tIHByb3BlcnR5IGtleSAtLT5cbiAgICAgICAgICAgICAgQGlmIChmaWVsZEZvcm0gfCBmb3JtR2V0Q29udHJvbDogJ2tleSc7IGFzIGNvbnRyb2wpIHtcbiAgICAgICAgICAgICAgICA8aW9uLWNvbFxuICAgICAgICAgICAgICAgICAgc2l6ZT1cIjEyXCJcbiAgICAgICAgICAgICAgICAgIHNpemUtc209XCI2XCJcbiAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCIoZGVmaW5pdGlvbiB8IHByb3BlcnR5R2V0OiAnbGFiZWwnIHwgdHJhbnNsYXRlKSB8fCAnJ1wiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImlvbi1uby1wYWRkaW5nXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8bWF0LWF1dG9jb21wbGV0ZS1maWVsZFxuICAgICAgICAgICAgICAgICAgICBmbG9hdExhYmVsPVwiYXV0b1wiXG4gICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJjb250cm9sXCJcbiAgICAgICAgICAgICAgICAgICAgW2FwcGVhcmFuY2VdPVwiYXBwZWFyYW5jZVwiXG4gICAgICAgICAgICAgICAgICAgIFtzdWJzY3JpcHRTaXppbmddPVwic2hvd0hpbnRLZXkgPyAnZml4ZWQnIDogc3Vic2NyaXB0U2l6aW5nXCJcbiAgICAgICAgICAgICAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJ1cGRhdGVEZWZpbml0aW9uQXQoaSlcIlxuICAgICAgICAgICAgICAgICAgICBbdGFiaW5kZXhdPVwidGFiaW5kZXggKyBpICogMlwiXG4gICAgICAgICAgICAgICAgICAgIFtjb25maWddPVwiX2F1dG9jb21wbGV0ZUNvbmZpZ1wiXG4gICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInU0VUVElOR1MuUFJPUEVSVFlfS0VZJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgKGZvY3VzKT1cIl9mb2N1c2VkQ29udHJvbEluZGV4ID0gaVwiXG4gICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJkZWZpbml0aW9uPy5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgIFttb2JpbGVdPVwibW9iaWxlXCJcbiAgICAgICAgICAgICAgICAgICAgW3BhbmVsQ2xhc3NdPVwicGFuZWxDbGFzc1wiXG4gICAgICAgICAgICAgICAgICAgIFtwYW5lbFdpZHRoXT1cInBhbmVsV2lkdGhcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWhpbnQgW2NsYXNzLmNkay12aXN1YWxseS1oaWRkZW5dPVwiIXNob3dIaW50S2V5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgQGxldCBrZXlWYWx1ZSA9IGNvbnRyb2wudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAge3sgaGludEtleVByZWZpeCB8fCAnJyB9fXt7IGtleVZhbHVlPy5rZXkgfHwga2V5VmFsdWUgfHwgJycgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtaGludD5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWF1dG9jb21wbGV0ZS1maWVsZD5cbiAgICAgICAgICAgICAgICA8L2lvbi1jb2w+XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICA8IS0tIHByb3BlcnR5IHZhbHVlIC0tPlxuICAgICAgICAgICAgICA8aW9uLWNvbCBzaXplPVwiXCIgc2l6ZS1zbT1cIlwiIGNsYXNzPVwiaW9uLW5vLXBhZGRpbmcgaW9uLXBhZGRpbmctc3RhcnQteHNcIj5cbiAgICAgICAgICAgICAgICBAaWYgKGRlZmluaXRpb24pIHtcbiAgICAgICAgICAgICAgICAgIDxhcHAtZm9ybS1maWVsZFxuICAgICAgICAgICAgICAgICAgICBmbG9hdExhYmVsPVwiYXV0b1wiXG4gICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJtb2JpbGUgPyAoJ1NFVFRJTkdTLlBST1BFUlRZX1ZBTFVFJyB8IHRyYW5zbGF0ZSkgOiAnICdcIlxuICAgICAgICAgICAgICAgICAgICBbYXBwZWFyYW5jZV09XCJhcHBlYXJhbmNlXCJcbiAgICAgICAgICAgICAgICAgICAgW3N1YnNjcmlwdFNpemluZ109XCJzdWJzY3JpcHRTaXppbmdcIlxuICAgICAgICAgICAgICAgICAgICBbZGVmaW5pdGlvbl09XCJkZWZpbml0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImZpZWxkRm9ybSB8IGZvcm1HZXRDb250cm9sOiAndmFsdWUnXCJcbiAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidTRVRUSU5HUy5QUk9QRVJUWV9WQUxVRScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICBbY2hpcENvbG9yXT1cImNoaXBDb2xvclwiXG4gICAgICAgICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgW2hpZGVSZXF1aXJlZE1hcmtlcl09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgW3RhYmluZGV4XT1cInRhYmluZGV4ICsgaSAqIDIgKyAxXCJcbiAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cImRlZmluaXRpb24/LmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgW3BhbmVsQ2xhc3NdPVwicGFuZWxDbGFzc1wiXG4gICAgICAgICAgICAgICAgICAgIFtwYW5lbFdpZHRoXT1cInBhbmVsV2lkdGhcIlxuICAgICAgICAgICAgICAgICAgPjwvYXBwLWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICA8IS0tIHVua25vd24gZGVmaW5pdGlvbiAtLT5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBbYXBwZWFyYW5jZV09XCJhcHBlYXJhbmNlXCIgW3N1YnNjcmlwdFNpemluZ109XCJzdWJzY3JpcHRTaXppbmdcIj5cbiAgICAgICAgICAgICAgICAgICAgQGlmIChtb2JpbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPnt7ICdTRVRUSU5HUy5QUk9QRVJUWV9WQUxVRScgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZmllbGRGb3JtIHwgZm9ybUdldENvbnRyb2w6ICd2YWx1ZSdcIlxuICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJtb2JpbGUgPyAnJyA6ICgnU0VUVElOR1MuUFJPUEVSVFlfVkFMVUUnIHwgdHJhbnNsYXRlKVwiXG4gICAgICAgICAgICAgICAgICAgICAgW3JlcXVpcmVkXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgIFt0YWJpbmRleF09XCIyMCArIGkgKiAyICsgMVwiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC9pb24tY29sPlxuXG4gICAgICAgICAgICAgIDxpb24tY29sIHNpemU9XCJhdXRvXCIgY2xhc3M9XCJpb24tbm8tcGFkZGluZ1wiPlxuICAgICAgICAgICAgICAgIEBpZiAoX2hlbHBlci5pc0xhc3QoaSkpIHtcbiAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBjb2xvcj1cImxpZ2h0XCJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIlxuICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkIHx8IChmaWVsZEZvcm0udmFsdWUgfCBhc0Jvb2xlYW46IGlzRW1wdHlQcm9wZXJ0eSkgfHwgKF9kZWZpbml0aW9uS2V5cyB8IGlzRW1wdHlBcnJheSlcbiAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIidTRVRUSU5HUy5CVE5fQUREX1BST1BFUlRZJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJfaGVscGVyLmFkZCgpXCJcbiAgICAgICAgICAgICAgICAgICAgW3RhYmluZGV4XT1cIjIwICsgaSAqIDIgKyAyXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPmFkZDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAgIGNvbG9yPVwibGlnaHRcIlxuICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRlZmluaXRpb24/LmRpc2FibGVkIHx8IGRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCInQ09NTU9OLkJUTl9ERUxFVEUnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJyZW1vdmVBdChpKVwiXG4gICAgICAgICAgICAgICAgICBbdGFiaW5kZXhdPVwiLTFcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDwvaW9uLWNvbD5cbiAgICAgICAgICAgIDwvaW9uLXJvdz5cbiAgICAgICAgICA8L2lvbi1ncmlkPlxuICAgICAgICA8L2lvbi1pdGVtPlxuICAgICAgfVxuICAgIDwvaW9uLWxpc3Q+XG4gIH1cbjwvZm9ybT5cblxuPG5nLXRlbXBsYXRlICNwcm9wZXJ0eVJvd1NrZWxldG9uPlxuICA8aW9uLWl0ZW0gbGluZXM9XCJub25lXCI+XG4gICAgPGlvbi1ncmlkIGNsYXNzPVwiaW9uLW5vLXBhZGRpbmdcIj5cbiAgICAgIDxpb24tcm93IGNsYXNzPVwiaW9uLW5vLXBhZGRpbmdcIj5cbiAgICAgICAgPCEtLSBwcm9wZXJ0eSBrZXkgLS0+XG4gICAgICAgIDxpb24tY29sIHNpemU9XCI2XCIgY2xhc3M9XCJpb24tbm8tcGFkZGluZ1wiPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBbc3Vic2NyaXB0U2l6aW5nXT1cInN1YnNjcmlwdFNpemluZ1wiPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGhpZGRlbiBkaXNhYmxlZCAvPlxuICAgICAgICAgICAgPGlvbi1za2VsZXRvbi10ZXh0IGFuaW1hdGVkIHN0eWxlPVwid2lkdGg6IDYwJVwiPjwvaW9uLXNrZWxldG9uLXRleHQ+XG4gICAgICAgICAgICA8aW9uLWljb24gbmFtZT1cImFycm93LWRyb3Bkb3duXCIgbWF0U3VmZml4PjwvaW9uLWljb24+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9pb24tY29sPlxuICAgICAgICA8IS0tIHZhbHVlIC0tPlxuICAgICAgICA8aW9uLWNvbCBjbGFzcz1cImlvbi1uby1wYWRkaW5nXCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIFtzdWJzY3JpcHRTaXppbmddPVwic3Vic2NyaXB0U2l6aW5nXCI+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgaGlkZGVuIGRpc2FibGVkIC8+XG4gICAgICAgICAgICA8aW9uLXNrZWxldG9uLXRleHQgYW5pbWF0ZWQgc3R5bGU9XCJ3aWR0aDogNjAlXCI+PC9pb24tc2tlbGV0b24tdGV4dD5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2lvbi1jb2w+XG4gICAgICAgIDwhLS0gYnV0dG9ucyAtLT5cbiAgICAgICAgPGlvbi1jb2wgc2l6ZT1cImF1dG9cIj5cbiAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBtYXQtaWNvbi1idXR0b24gY29sb3I9XCJsaWdodFwiIGRpc2FibGVkPlxuICAgICAgICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9pb24tY29sPlxuICAgICAgPC9pb24tcm93PlxuICAgIDwvaW9uLWdyaWQ+XG4gIDwvaW9uLWl0ZW0+XG48L25nLXRlbXBsYXRlPlxuIl19