@cqa-lib/cqa-ui 1.0.111 → 1.0.113

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.
@@ -138,7 +138,7 @@ DaterangepickerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0
138
138
  </button>
139
139
  </div>
140
140
  </div>
141
- `, isInline: true, directives: [{ type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.DaterangepickerDirective, selector: "[cqaDaterangepicker]", inputs: ["options", "startDate", "endDate", "minDate", "maxDate"], outputs: ["datesUpdated", "cancelClicked", "applyClicked"] }] });
141
+ `, isInline: true, directives: [{ type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.DaterangepickerDirective, selector: "[cqaDaterangepicker]", inputs: ["options", "startDate", "endDate", "minDate", "maxDate", "parentEl"], outputs: ["datesUpdated", "cancelClicked", "applyClicked"] }] });
142
142
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: DaterangepickerComponent, decorators: [{
143
143
  type: Component,
144
144
  args: [{
@@ -79,7 +79,7 @@ export class DaterangepickerDirective {
79
79
  return;
80
80
  }
81
81
  // Resolve parent element to scope styles; allow override via options.parentEl, else use body.
82
- const resolvedParentEl = this.options?.parentEl || 'body';
82
+ const resolvedParentEl = this.parentEl || this.options?.parentEl || 'body';
83
83
  const baseOptions = {
84
84
  opens: 'left',
85
85
  drops: 'down',
@@ -280,7 +280,7 @@ export class DaterangepickerDirective {
280
280
  }
281
281
  }
282
282
  DaterangepickerDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: DaterangepickerDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
283
- DaterangepickerDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.4.0", type: DaterangepickerDirective, selector: "[cqaDaterangepicker]", inputs: { options: "options", startDate: "startDate", endDate: "endDate", minDate: "minDate", maxDate: "maxDate" }, outputs: { datesUpdated: "datesUpdated", cancelClicked: "cancelClicked", applyClicked: "applyClicked" }, providers: [
283
+ DaterangepickerDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.4.0", type: DaterangepickerDirective, selector: "[cqaDaterangepicker]", inputs: { options: "options", startDate: "startDate", endDate: "endDate", minDate: "minDate", maxDate: "maxDate", parentEl: "parentEl" }, outputs: { datesUpdated: "datesUpdated", cancelClicked: "cancelClicked", applyClicked: "applyClicked" }, providers: [
284
284
  {
285
285
  provide: NG_VALUE_ACCESSOR,
286
286
  useExisting: forwardRef(() => DaterangepickerDirective),
@@ -309,6 +309,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
309
309
  type: Input
310
310
  }], maxDate: [{
311
311
  type: Input
312
+ }], parentEl: [{
313
+ type: Input
312
314
  }], datesUpdated: [{
313
315
  type: Output
314
316
  }], cancelClicked: [{
@@ -316,4 +318,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
316
318
  }], applyClicked: [{
317
319
  type: Output
318
320
  }] } });
319
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXJhbmdlcGlja2VyLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvZmlsdGVycy9kYXRlcmFuZ2VwaWNrZXIvZGF0ZXJhbmdlcGlja2VyLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFjLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUErQyxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUksT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pFLE9BQU8sS0FBSyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQ2pDLE9BQU8sS0FBSyxZQUFZLE1BQU0sUUFBUSxDQUFDO0FBQ3ZDLE9BQU8saUJBQWlCLENBQUM7O0FBRXpCLDBFQUEwRTtBQUMxRSxNQUFNLENBQUMsR0FBUyxNQUFjLENBQUMsT0FBTyxJQUFLLE1BQWMsQ0FBQztBQUMxRCxNQUFNLE1BQU0sR0FBUyxZQUFvQixDQUFDLE9BQU8sSUFBSyxZQUFvQixDQUFDO0FBRTNFLDBFQUEwRTtBQUMxRSxJQUFJLE9BQU8sTUFBTSxLQUFLLFdBQVcsRUFBRTtJQUNoQyxNQUFjLENBQUMsTUFBTSxHQUFJLE1BQWMsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDO0lBQ3BELE1BQWMsQ0FBQyxDQUFDLEdBQUksTUFBYyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDMUMsTUFBYyxDQUFDLE1BQU0sR0FBSSxNQUFjLENBQUMsTUFBTSxJQUFJLE1BQU0sQ0FBQztDQUMzRDtBQXlDRCxNQUFNLE9BQU8sd0JBQXdCO0lBc0NuQyxZQUFvQixFQUFjO1FBQWQsT0FBRSxHQUFGLEVBQUUsQ0FBWTtRQXJDekIsWUFBTyxHQUEyQixFQUFFLENBQUM7UUFLcEMsaUJBQVksR0FBRyxJQUFJLFlBQVksRUFBb0QsQ0FBQztRQUNwRixrQkFBYSxHQUFHLElBQUks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O2lCQUNGO2lHQUVVLE9BQU87c0JBQWYsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNJLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csYUFBYTtzQkFBdEIsTUFBTTtnQkFDRyxZQUFZO3NCQUFyQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIE9uSW5pdCwgT25EZXN0cm95LCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMsIGZvcndhcmRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCAqIGFzIGpxdWVyeSBmcm9tICdqcXVlcnknO1xuaW1wb3J0ICogYXMgbW9tZW50SW1wb3J0IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgJ2RhdGVyYW5nZXBpY2tlcic7XG5cbi8vIE5vcm1hbGl6ZSBtb2R1bGUgZGVmYXVsdC9uYW1lc3BhY2UgaW50ZXJvcCBmb3IgYm90aCBFU00gYW5kIENKUyBidWlsZHMuXG5jb25zdCAkOiBhbnkgPSAoanF1ZXJ5IGFzIGFueSkuZGVmYXVsdCB8fCAoanF1ZXJ5IGFzIGFueSk7XG5jb25zdCBtb21lbnQ6IGFueSA9IChtb21lbnRJbXBvcnQgYXMgYW55KS5kZWZhdWx0IHx8IChtb21lbnRJbXBvcnQgYXMgYW55KTtcblxuLy8gRW5zdXJlIGdsb2JhbHMgYXJlIHByZXNlbnQgZm9yIHRoZSBkYXRlcmFuZ2VwaWNrZXIgcGx1Z2luIHJlZ2lzdHJhdGlvbi5cbmlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAod2luZG93IGFzIGFueSkualF1ZXJ5ID0gKHdpbmRvdyBhcyBhbnkpLmpRdWVyeSB8fCAkO1xuICAod2luZG93IGFzIGFueSkuJCA9ICh3aW5kb3cgYXMgYW55KS4kIHx8ICQ7XG4gICh3aW5kb3cgYXMgYW55KS5tb21lbnQgPSAod2luZG93IGFzIGFueSkubW9tZW50IHx8IG1vbWVudDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEYXRlUmFuZ2VQaWNrZXJPcHRpb25zIHtcbiAgc3RhcnREYXRlPzogRGF0ZSB8IHN0cmluZztcbiAgZW5kRGF0ZT86IERhdGUgfCBzdHJpbmc7XG4gIG1pbkRhdGU/OiBEYXRlIHwgc3RyaW5nO1xuICBtYXhEYXRlPzogRGF0ZSB8IHN0cmluZztcbiAgbG9jYWxlPzogYW55O1xuICByYW5nZXM/OiBhbnk7XG4gIG9wZW5zPzogJ2xlZnQnIHwgJ3JpZ2h0JyB8ICdjZW50ZXInO1xuICBkcm9wcz86ICdkb3duJyB8ICd1cCcgfCAnYXV0byc7XG4gIGJ1dHRvbkNsYXNzZXM/OiBzdHJpbmc7XG4gIGFwcGx5QnV0dG9uQ2xhc3Nlcz86IHN0cmluZztcbiAgY2FuY2VsQnV0dG9uQ2xhc3Nlcz86IHN0cmluZztcbiAgYXV0b0FwcGx5PzogYm9vbGVhbjtcbiAgYWx3YXlzU2hvd0NhbGVuZGFycz86IGJvb2xlYW47XG4gIHNob3dEcm9wZG93bnM/OiBib29sZWFuO1xuICBzaG93V2Vla051bWJlcnM/OiBib29sZWFuO1xuICBzaG93SVNPV2Vla051bWJlcnM/OiBib29sZWFuO1xuICBzaW5nbGVEYXRlUGlja2VyPzogYm9vbGVhbjtcbiAgdGltZVBpY2tlcj86IGJvb2xlYW47XG4gIHRpbWVQaWNrZXIyNEhvdXI/OiBib29sZWFuO1xuICB0aW1lUGlja2VySW5jcmVtZW50PzogbnVtYmVyO1xuICB0aW1lUGlja2VyU2Vjb25kcz86IGJvb2xlYW47XG4gIGxpbmtlZENhbGVuZGFycz86IGJvb2xlYW47XG4gIGF1dG9VcGRhdGVJbnB1dD86IGJvb2xlYW47XG4gIGlzSW52YWxpZERhdGU/OiAoZGF0ZTogRGF0ZSkgPT4gYm9vbGVhbjtcbiAgaXNDdXN0b21EYXRlPzogKGRhdGU6IERhdGUpID0+IHN0cmluZyB8IGJvb2xlYW47XG4gIHBhcmVudEVsPzogc3RyaW5nIHwgSFRNTEVsZW1lbnQ7XG59XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tjcWFEYXRlcmFuZ2VwaWNrZXJdJyxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBEYXRlcmFuZ2VwaWNrZXJEaXJlY3RpdmUpLFxuICAgICAgbXVsdGk6IHRydWVcbiAgICB9XG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgRGF0ZXJhbmdlcGlja2VyRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIE9uQ2hhbmdlcywgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuICBASW5wdXQoKSBvcHRpb25zOiBEYXRlUmFuZ2VQaWNrZXJPcHRpb25zID0ge307XG4gIEBJbnB1dCgpIHN0YXJ0RGF0ZT86IERhdGUgfCBzdHJpbmc7XG4gIEBJbnB1dCgpIGVuZERhdGU/OiBEYXRlIHwgc3RyaW5nO1xuICBASW5wdXQoKSBtaW5EYXRlPzogRGF0ZSB8IHN0cmluZztcbiAgQElucHV0KCkgbWF4RGF0ZT86IERhdGUgfCBzdHJpbmc7XG4gIEBPdXRwdXQoKSBkYXRlc1VwZGF0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHsgc3RhcnREYXRlOiBEYXRlIHwgbnVsbDsgZW5kRGF0ZTogRGF0ZSB8IG51bGwgfT4oKTtcbiAgQE91dHB1dCgpIGNhbmNlbENsaWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSBhcHBseUNsaWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHsgc3RhcnREYXRlOiBEYXRlIHwgbnVsbDsgZW5kRGF0ZTogRGF0ZSB8IG51bGwgfT4oKTtcblxuICBwcml2YXRlIHBpY2tlckluc3RhbmNlOiBhbnk7XG4gIHByaXZhdGUgb25DaGFuZ2UgPSAodmFsdWU6IGFueSkgPT4ge307XG4gIHByaXZhdGUgb25Ub3VjaGVkID0gKCkgPT4ge307XG5cbiAgLyoqXG4gICAqIFNhZmVseSB1cGRhdGUgdGhlIGlucHV0IHRleHQgdG8gYXZvaWQgXCJJbnZhbGlkIGRhdGVcIiBvciBcInVuZGVmaW5lZFwiIHN0cmluZ3MuXG4gICAqL1xuICBwcml2YXRlIHVwZGF0ZUlucHV0VmFsdWUoc3RhcnQ6IGFueSwgZW5kOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAodHlwZW9mICh3aW5kb3cgYXMgYW55KS5tb21lbnQgPT09ICd1bmRlZmluZWQnKSByZXR1cm47XG4gICAgY29uc3QgbSA9ICh3aW5kb3cgYXMgYW55KS5tb21lbnQ7XG4gICAgY29uc3QgZm9ybWF0ID0gKHRoaXMub3B0aW9ucz8ubG9jYWxlICYmIHRoaXMub3B0aW9ucy5sb2NhbGUuZm9ybWF0KSB8fCAnTU0vREQvWVlZWSc7XG4gICAgY29uc3Qgc2VwYXJhdG9yID0gKHRoaXMub3B0aW9ucz8ubG9jYWxlICYmIHRoaXMub3B0aW9ucy5sb2NhbGUuc2VwYXJhdG9yKSB8fCAnIC0gJztcblxuICAgIGNvbnN0IGhhc1N0YXJ0ID0gc3RhcnQgJiYgbS5pc01vbWVudChzdGFydCk7XG4gICAgY29uc3QgaGFzRW5kID0gZW5kICYmIG0uaXNNb21lbnQoZW5kKTtcblxuICAgIGlmIChoYXNTdGFydCAmJiBoYXNFbmQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHRleHQgPSBgJHtzdGFydC5mb3JtYXQoZm9ybWF0KX0ke3NlcGFyYXRvcn0ke2VuZC5mb3JtYXQoZm9ybWF0KX1gO1xuICAgICAgICAkKHRoaXMuZWwubmF0aXZlRWxlbWVudCkudmFsKHRleHQpO1xuICAgICAgfSBjYXRjaCB7fVxuICAgIH0gZWxzZSB7XG4gICAgICB0cnkge1xuICAgICAgICAkKHRoaXMuZWwubmF0aXZlRWxlbWVudCkudmFsKCcnKTtcbiAgICAgIH0gY2F0Y2gge31cbiAgICB9XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVsOiBFbGVtZW50UmVmKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuaW5pdERhdGVyYW5nZXBpY2tlcigpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmICh0aGlzLnBpY2tlckluc3RhbmNlKSB7XG4gICAgICBpZiAoY2hhbmdlc1snc3RhcnREYXRlJ10gfHwgY2hhbmdlc1snZW5kRGF0ZSddKSB7XG4gICAgICAgIHRoaXMudXBkYXRlRGF0ZXMoKTtcbiAgICAgIH1cbiAgICAgIGlmIChjaGFuZ2VzWydtaW5EYXRlJ10gfHwgY2hhbmdlc1snbWF4RGF0ZSddKSB7XG4gICAgICAgIHRoaXMudXBkYXRlTWluTWF4RGF0ZXMoKTtcbiAgICAgIH1cbiAgICAgIGlmIChjaGFuZ2VzWydvcHRpb25zJ10pIHtcbiAgICAgICAgdGhpcy5kZXN0cm95UGlja2VyKCk7XG4gICAgICAgIHRoaXMuaW5pdERhdGVyYW5nZXBpY2tlcigpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZGVzdHJveVBpY2tlcigpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0RGF0ZXJhbmdlcGlja2VyKCk6IHZvaWQge1xuICAgIGlmICh0eXBlb2YgJCA9PT0gJ3VuZGVmaW5lZCcgfHwgdHlwZW9mICgkLmZuIGFzIGFueSkuZGF0ZXJhbmdlcGlja2VyID09PSAndW5kZWZpbmVkJykge1xuICAgICAgY29uc29sZS5lcnJvcignalF1ZXJ5IGFuZCBkYXRlcmFuZ2VwaWNrZXIgbXVzdCBiZSBsb2FkZWQnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBDaGVjayBpZiBtb21lbnQuanMgaXMgYXZhaWxhYmxlXG4gICAgaWYgKHR5cGVvZiAod2luZG93IGFzIGFueSkubW9tZW50ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgY29uc29sZS5lcnJvcignbW9tZW50LmpzIG11c3QgYmUgbG9hZGVkIGZvciBkYXRlcmFuZ2VwaWNrZXIgdG8gd29yaycpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFJlc29sdmUgcGFyZW50IGVsZW1lbnQgdG8gc2NvcGUgc3R5bGVzOyBhbGxvdyBvdmVycmlkZSB2aWEgb3B0aW9ucy5wYXJlbnRFbCwgZWxzZSB1c2UgYm9keS5cbiAgICBjb25zdCByZXNvbHZlZFBhcmVudEVsID0gdGhpcy5vcHRpb25zPy5wYXJlbnRFbCB8fCAnYm9keSc7XG5cbiAgICBjb25zdCBiYXNlT3B0aW9uczogRGF0ZVJhbmdlUGlja2VyT3B0aW9ucyA9IHtcbiAgICAgIG9wZW5zOiAnbGVmdCcsXG4gICAgICBkcm9wczogJ2Rvd24nLFxuICAgICAgYXV0b0FwcGx5OiB0cnVlLFxuICAgICAgYXV0b1VwZGF0ZUlucHV0OiBmYWxzZSwgLy8gd2UgbWFuYWdlIHRoZSBpbnB1dCBvdXJzZWx2ZXMgdG8gcHJldmVudCBcIkludmFsaWQgZGF0ZVwiXG4gICAgICBsb2NhbGU6IHtcbiAgICAgICAgZm9ybWF0OiAnTU0vREQvWVlZWScsXG4gICAgICAgIHNlcGFyYXRvcjogJyAtICcsXG4gICAgICAgIGFwcGx5TGFiZWw6ICdBcHBseScsXG4gICAgICAgIGNhbmNlbExhYmVsOiAnQ2FuY2VsJyxcbiAgICAgICAgZnJvbUxhYmVsOiAnRnJvbScsXG4gICAgICAgIHRvTGFiZWw6ICdUbycsXG4gICAgICAgIGN1c3RvbVJhbmdlTGFiZWw6ICdDdXN0b20nLFxuICAgICAgICB3ZWVrTGFiZWw6ICdXJyxcbiAgICAgICAgZGF5c09mV2VlazogWydTdScsICdNbycsICdUdScsICdXZScsICdUaCcsICdGcicsICdTYSddLFxuICAgICAgICBtb250aE5hbWVzOiBbJ0phbnVhcnknLCAnRmVicnVhcnknLCAnTWFyY2gnLCAnQXByaWwnLCAnTWF5JywgJ0p1bmUnLCAnSnVseScsICdBdWd1c3QnLCAnU2VwdGVtYmVyJywgJ09jdG9iZXInLCAnTm92ZW1iZXInLCAnRGVjZW1iZXInXSxcbiAgICAgICAgZmlyc3REYXk6IDBcbiAgICAgIH0sXG4gICAgICBwYXJlbnRFbDogcmVzb2x2ZWRQYXJlbnRFbCBhcyBhbnlcbiAgICB9O1xuXG4gICAgLy8gTWVyZ2Ugb3B0aW9ucyBidXQgZm9yY2UtZGlzYWJsZSBwbHVnaW4gYXV0b1VwZGF0ZUlucHV0IHRvIGF2b2lkIGludmFsaWQgdmFsdWVzLlxuICAgIGNvbnN0IGRlZmF1bHRPcHRpb25zOiBEYXRlUmFuZ2VQaWNrZXJPcHRpb25zID0ge1xuICAgICAgLi4uYmFzZU9wdGlvbnMsXG4gICAgICAuLi50aGlzLm9wdGlvbnMsXG4gICAgICBsb2NhbGU6IHtcbiAgICAgICAgLi4uYmFzZU9wdGlvbnMubG9jYWxlLFxuICAgICAgICAuLi4odGhpcy5vcHRpb25zPy5sb2NhbGUgfHwge30pXG4gICAgICB9LFxuICAgICAgYXV0b1VwZGF0ZUlucHV0OiBmYWxzZVxuICAgIH07XG5cbiAgICAvLyBDb252ZXJ0IERhdGUgb2JqZWN0cyB0byBtb21lbnQgb2JqZWN0cyBmb3IgZGF0ZXJhbmdlcGlja2VyXG4gICAgY29uc3QgdG9Nb21lbnQgPSAoZDogRGF0ZSB8IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQpOiBhbnkgPT4ge1xuICAgICAgaWYgKCFkKSByZXR1cm4gbnVsbDtcbiAgICAgIGlmICh0eXBlb2YgZCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgY29uc3QgbG93ZXIgPSBkLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBpZiAobG93ZXIgPT09ICd1bmRlZmluZWQnIHx8IGxvd2VyID09PSAnbnVsbCcgfHwgbG93ZXIgPT09ICcnKSByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGlmIChtb21lbnQuaXNNb21lbnQgJiYgbW9tZW50LmlzTW9tZW50KGQpKSByZXR1cm4gZDtcbiAgICAgIGNvbnN0IGRhdGUgPSB0eXBlb2YgZCA9PT0gJ3N0cmluZycgPyBuZXcgRGF0ZShkKSA6IGQ7XG4gICAgICBpZiAoZGF0ZSBpbnN0YW5jZW9mIERhdGUgJiYgIWlzTmFOKGRhdGUuZ2V0VGltZSgpKSkge1xuICAgICAgICByZXR1cm4gbW9tZW50KGRhdGUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgICBcbiAgICBjb25zdCBzdGFydE1vbWVudCA9IHRvTW9tZW50KHRoaXMuc3RhcnREYXRlKTtcbiAgICBjb25zdCBlbmRNb21lbnQgPSB0b01vbWVudCh0aGlzLmVuZERhdGUpO1xuICAgIGNvbnN0IG1pbk1vbWVudCA9IHRvTW9tZW50KHRoaXMubWluRGF0ZSk7XG4gICAgY29uc3QgbWF4TW9tZW50ID0gdG9Nb21lbnQodGhpcy5tYXhEYXRlKTtcbiAgICBcbiAgICBpZiAoc3RhcnRNb21lbnQpIGRlZmF1bHRPcHRpb25zLnN0YXJ0RGF0ZSA9IHN0YXJ0TW9tZW50O1xuICAgIGlmIChlbmRNb21lbnQpIGRlZmF1bHRPcHRpb25zLmVuZERhdGUgPSBlbmRNb21lbnQ7XG4gICAgaWYgKG1pbk1vbWVudCkgZGVmYXVsdE9wdGlvbnMubWluRGF0ZSA9IG1pbk1vbWVudDtcbiAgICBpZiAobWF4TW9tZW50KSBkZWZhdWx0T3B0aW9ucy5tYXhEYXRlID0gbWF4TW9tZW50O1xuXG4gICAgLy8gSWYgbm8gaW5pdGlhbCBkYXRlcywgZW5zdXJlIHRoZSBpbnB1dCBpcyBibGFuayBiZWZvcmUgcGx1Z2luIGluaXQuXG4gICAgaWYgKCFzdGFydE1vbWVudCAmJiAhZW5kTW9tZW50KSB7XG4gICAgICB0cnkgeyAkKHRoaXMuZWwubmF0aXZlRWxlbWVudCkudmFsKCcnKTsgfSBjYXRjaCB7fVxuICAgIH1cblxuICAgIC8vIEluaXRpYWxpemUgdGhlIHBpY2tlclxuICAgICQodGhpcy5lbC5uYXRpdmVFbGVtZW50KS5kYXRlcmFuZ2VwaWNrZXIoZGVmYXVsdE9wdGlvbnMsIChzdGFydDogYW55LCBlbmQ6IGFueSwgbGFiZWw6IHN0cmluZykgPT4ge1xuICAgICAgY29uc3Qgc3RhcnREYXRlID0gc3RhcnQgPyBzdGFydC50b0RhdGUoKSA6IG51bGw7XG4gICAgICBjb25zdCBlbmREYXRlID0gZW5kID8gZW5kLnRvRGF0ZSgpIDogbnVsbDtcbiAgICAgIFxuICAgICAgdGhpcy5vbkNoYW5nZSh7IHN0YXJ0OiBzdGFydERhdGUsIGVuZDogZW5kRGF0ZSB9KTtcbiAgICAgIHRoaXMuZGF0ZXNVcGRhdGVkLmVtaXQoeyBzdGFydERhdGUsIGVuZERhdGUgfSk7XG4gICAgICB0aGlzLmFwcGx5Q2xpY2tlZC5lbWl0KHsgc3RhcnREYXRlLCBlbmREYXRlIH0pO1xuICAgICAgdGhpcy51cGRhdGVJbnB1dFZhbHVlKHN0YXJ0LCBlbmQpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5waWNrZXJJbnN0YW5jZSA9ICQodGhpcy5lbC5uYXRpdmVFbGVtZW50KS5kYXRhKCdkYXRlcmFuZ2VwaWNrZXInKTtcblxuICAgIC8vIEVuc3VyZSB0aGUgb3ZlcmxheSBnZXRzIHRoZSBzdHlsaW5nIHNjb3BlIGNsYXNzIGlmIG5vdCBhbHJlYWR5IHByZXNlbnQuXG4gICAgaWYgKHRoaXMucGlja2VySW5zdGFuY2U/LmNvbnRhaW5lcikge1xuICAgICAgY29uc3QgYyA9IHRoaXMucGlja2VySW5zdGFuY2UuY29udGFpbmVyO1xuICAgICAgaWYgKCFjLmhhc0NsYXNzKCdjcWEtdWktZGF0ZXJhbmdlLXBpY2tlcicpKSB7XG4gICAgICAgIGMuYWRkQ2xhc3MoJ2NxYS11aS1kYXRlcmFuZ2UtcGlja2VyJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIGNhbmNlbCBldmVudFxuICAgICQodGhpcy5lbC5uYXRpdmVFbGVtZW50KS5vbignY2FuY2VsLmRhdGVyYW5nZXBpY2tlcicsICgpID0+IHtcbiAgICAgIHRoaXMuY2FuY2VsQ2xpY2tlZC5lbWl0KCk7XG4gICAgICB0aGlzLnVwZGF0ZUlucHV0VmFsdWUobnVsbCwgbnVsbCk7XG4gICAgfSk7XG5cbiAgICAvLyBVcGRhdGUgaW5pdGlhbCB2YWx1ZSBpZiBwcm92aWRlZFxuICAgIHRoaXMudXBkYXRlRGF0ZXMoKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlRGF0ZXMoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnBpY2tlckluc3RhbmNlKSByZXR1cm47XG4gICAgaWYgKHR5cGVvZiAod2luZG93IGFzIGFueSkubW9tZW50ID09PSAndW5kZWZpbmVkJykgcmV0dXJuO1xuXG4gICAgY29uc3QgbW9tZW50ID0gKHdpbmRvdyBhcyBhbnkpLm1vbWVudDtcbiAgICBcbiAgICAvLyBDb252ZXJ0IERhdGUgb2JqZWN0cyB0byBtb21lbnQgb2JqZWN0c1xuICAgIGNvbnN0IHRvTW9tZW50ID0gKGQ6IERhdGUgfCBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkKTogYW55ID0+IHtcbiAgICAgIGlmICghZCkgcmV0dXJuIG51bGw7XG4gICAgICBpZiAodHlwZW9mIGQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGNvbnN0IGxvd2VyID0gZC50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKGxvd2VyID09PSAndW5kZWZpbmVkJyB8fCBsb3dlciA9PT0gJ251bGwnIHx8IGxvd2VyID09PSAnJykgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBpZiAobW9tZW50LmlzTW9tZW50ICYmIG1vbWVudC5pc01vbWVudChkKSkgcmV0dXJuIGQ7XG4gICAgICBjb25zdCBkYXRlID0gdHlwZW9mIGQgPT09ICdzdHJpbmcnID8gbmV3IERhdGUoZCkgOiBkO1xuICAgICAgaWYgKGRhdGUgaW5zdGFuY2VvZiBEYXRlICYmICFpc05hTihkYXRlLmdldFRpbWUoKSkpIHtcbiAgICAgICAgcmV0dXJuIG1vbWVudChkYXRlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gICAgXG4gICAgY29uc3Qgc3RhcnRNb21lbnQgPSB0b01vbWVudCh0aGlzLnN0YXJ0RGF0ZSk7XG4gICAgY29uc3QgZW5kTW9tZW50ID0gdG9Nb21lbnQodGhpcy5lbmREYXRlKTtcbiAgICBcbiAgICBpZiAoc3RhcnRNb21lbnQpIHtcbiAgICAgIHRoaXMucGlja2VySW5zdGFuY2Uuc2V0U3RhcnREYXRlKHN0YXJ0TW9tZW50KTtcbiAgICB9XG4gICAgXG4gICAgaWYgKGVuZE1vbWVudCkge1xuICAgICAgdGhpcy5waWNrZXJJbnN0YW5jZS5zZXRFbmREYXRlKGVuZE1vbWVudCk7XG4gICAgfVxuICAgIFxuICAgIC8vIFVwZGF0ZSBpbnB1dCB0ZXh0IHRvIHJlZmxlY3QgY3VycmVudCB2YWx1ZXNcbiAgICB0aGlzLnVwZGF0ZUlucHV0VmFsdWUoc3RhcnRNb21lbnQsIGVuZE1vbWVudCk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZU1pbk1heERhdGVzKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5waWNrZXJJbnN0YW5jZSkgcmV0dXJuO1xuICAgIGlmICh0eXBlb2YgKHdpbmRvdyBhcyBhbnkpLm1vbWVudCA9PT0gJ3VuZGVmaW5lZCcpIHJldHVybjtcblxuICAgIGNvbnN0IG1vbWVudCA9ICh3aW5kb3cgYXMgYW55KS5tb21lbnQ7XG4gICAgXG4gICAgLy8gQ29udmVydCBEYXRlIG9iamVjdHMgdG8gbW9tZW50IG9iamVjdHNcbiAgICBjb25zdCB0b01vbWVudCA9IChkOiBEYXRlIHwgc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCk6IGFueSA9PiB7XG4gICAgICBpZiAoIWQpIHJldHVybiBudWxsO1xuICAgICAgaWYgKG1vbWVudC5pc01vbWVudCAmJiBtb21lbnQuaXNNb21lbnQoZCkpIHJldHVybiBkO1xuICAgICAgY29uc3QgZGF0ZSA9IHR5cGVvZiBkID09PSAnc3RyaW5nJyA/IG5ldyBEYXRlKGQpIDogZDtcbiAgICAgIGlmIChkYXRlIGluc3RhbmNlb2YgRGF0ZSAmJiAhaXNOYU4oZGF0ZS5nZXRUaW1lKCkpKSB7XG4gICAgICAgIHJldHVybiBtb21lbnQoZGF0ZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICAgIFxuICAgIGNvbnN0IG1pbk1vbWVudCA9IHRvTW9tZW50KHRoaXMubWluRGF0ZSk7XG4gICAgY29uc3QgbWF4TW9tZW50ID0gdG9Nb21lbnQodGhpcy5tYXhEYXRlKTtcbiAgICBcbiAgICBpZiAobWluTW9tZW50KSB7XG4gICAgICB0aGlzLnBpY2tlckluc3RhbmNlLnNldE1pbkRhdGUobWluTW9tZW50KTtcbiAgICB9XG4gICAgaWYgKG1heE1vbWVudCkge1xuICAgICAgdGhpcy5waWNrZXJJbnN0YW5jZS5zZXRNYXhEYXRlKG1heE1vbWVudCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBkZXN0cm95UGlja2VyKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnBpY2tlckluc3RhbmNlICYmIHR5cGVvZiAkICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgJCh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQpLm9mZignY2FuY2VsLmRhdGVyYW5nZXBpY2tlcicpO1xuICAgICAgJCh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQpLmRhdGEoJ2RhdGVyYW5nZXBpY2tlcicpPy5yZW1vdmUoKTtcbiAgICAgIHRoaXMucGlja2VySW5zdGFuY2UgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8vIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGltcGxlbWVudGF0aW9uXG4gIHdyaXRlVmFsdWUodmFsdWU6IHsgc3RhcnQ6IERhdGUgfCBudWxsOyBlbmQ6IERhdGUgfCBudWxsIH0gfCBudWxsKTogdm9pZCB7XG4gICAgaWYgKHZhbHVlICYmICh2YWx1ZS5zdGFydCB8fCB2YWx1ZS5lbmQpKSB7XG4gICAgICAvLyBWYWxpZGF0ZSBkYXRlcyBiZWZvcmUgc2V0dGluZ1xuICAgICAgY29uc3QgaXNWYWxpZERhdGUgPSAoZDogRGF0ZSB8IG51bGwpOiBib29sZWFuID0+IHtcbiAgICAgICAgcmV0dXJuIGQgIT09IG51bGwgJiYgZCBpbnN0YW5jZW9mIERhdGUgJiYgIWlzTmFOKGQuZ2V0VGltZSgpKTtcbiAgICAgIH07XG4gICAgICBcbiAgICAgIHRoaXMuc3RhcnREYXRlID0gKHZhbHVlLnN0YXJ0ICYmIGlzVmFsaWREYXRlKHZhbHVlLnN0YXJ0KSkgPyB2YWx1ZS5zdGFydCA6IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuZW5kRGF0ZSA9ICh2YWx1ZS5lbmQgJiYgaXNWYWxpZERhdGUodmFsdWUuZW5kKSkgPyB2YWx1ZS5lbmQgOiB1bmRlZmluZWQ7XG4gICAgICB0aGlzLnVwZGF0ZURhdGVzKCk7XG4gICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCAodmFsdWUgJiYgIXZhbHVlLnN0YXJ0ICYmICF2YWx1ZS5lbmQpKSB7XG4gICAgICB0aGlzLnN0YXJ0RGF0ZSA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuZW5kRGF0ZSA9IHVuZGVmaW5lZDtcbiAgICAgIGlmICh0aGlzLnBpY2tlckluc3RhbmNlKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgbSA9ICh3aW5kb3cgYXMgYW55KS5tb21lbnQ7XG4gICAgICAgICAgaWYgKG0pIHtcbiAgICAgICAgICAgIC8vIFJlc2V0IHBpY2tlciBpbnRlcm5hbHMgdG8gYSBzYWZlIHZhbHVlIGluc3RlYWQgb2YgbnVsbCB0byBhdm9pZCBcIkludmFsaWQgZGF0ZVwiXG4gICAgICAgICAgICB0aGlzLnBpY2tlckluc3RhbmNlLnNldFN0YXJ0RGF0ZShtKCkpO1xuICAgICAgICAgICAgdGhpcy5waWNrZXJJbnN0YW5jZS5zZXRFbmREYXRlKG0oKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMudXBkYXRlSW5wdXRWYWx1ZShudWxsLCBudWxsKTtcbiAgICAgICAgfSBjYXRjaCB7fVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46ICh2YWx1ZTogYW55KSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xuICB9XG5cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xuICB9XG5cbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZWwubmF0aXZlRWxlbWVudCkge1xuICAgICAgdGhpcy5lbC5uYXRpdmVFbGVtZW50LmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgICB9XG4gIH1cbn1cblxuIl19
321
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXJhbmdlcGlja2VyLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvZmlsdGVycy9kYXRlcmFuZ2VwaWNrZXIvZGF0ZXJhbmdlcGlja2VyLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFjLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUErQyxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUksT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pFLE9BQU8sS0FBSyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQ2pDLE9BQU8sS0FBSyxZQUFZLE1BQU0sUUFBUSxDQUFDO0FBQ3ZDLE9BQU8saUJBQWlCLENBQUM7O0FBRXpCLDBFQUEwRTtBQUMxRSxNQUFNLENBQUMsR0FBUyxNQUFjLENBQUMsT0FBTyxJQUFLLE1BQWMsQ0FBQztBQUMxRCxNQUFNLE1BQU0sR0FBUyxZQUFvQixDQUFDLE9BQU8sSUFBSyxZQUFvQixDQUFDO0FBRTNFLDBFQUEwRTtBQUMxRSxJQUFJLE9BQU8sTUFBTSxLQUFLLFdBQVcsRUFBRTtJQUNoQyxNQUFjLENBQUMsTUFBTSxHQUFJLE1BQWMsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDO0lBQ3BELE1BQWMsQ0FBQyxDQUFDLEdBQUksTUFBYyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDMUMsTUFBYyxDQUFDLE1BQU0sR0FBSSxNQUFjLENBQUMsTUFBTSxJQUFJLE1BQU0sQ0FBQztDQUMzRDtBQXlDRCxNQUFNLE9BQU8sd0JBQXdCO0lBdUNuQyxZQUFvQixFQUFjO1FBQWQsT0FBRSxHQUFGLEVBQUUsQ0FBWTtRQXRDekIsWUFBTyxHQUEyQixFQUFFLENBQUM7UUFNcEMsaUJBQVksR0FBRyxJQUFJLFlBQVksRUFBb0QsQ0FBQztRQUNwRixrQkFBYSxHQUFHLElBQUks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QUFFLElBQUk7eUJBQ1o7cUJBQ0Y7aUJBQ0Y7aUdBRVUsT0FBTztzQkFBZixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDSSxZQUFZO3NCQUFyQixNQUFNO2dCQUNHLGFBQWE7c0JBQXRCLE1BQU07Z0JBQ0csWUFBWTtzQkFBckIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBPbkluaXQsIE9uRGVzdHJveSwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzLCBmb3J3YXJkUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgKiBhcyBqcXVlcnkgZnJvbSAnanF1ZXJ5JztcbmltcG9ydCAqIGFzIG1vbWVudEltcG9ydCBmcm9tICdtb21lbnQnO1xuaW1wb3J0ICdkYXRlcmFuZ2VwaWNrZXInO1xuXG4vLyBOb3JtYWxpemUgbW9kdWxlIGRlZmF1bHQvbmFtZXNwYWNlIGludGVyb3AgZm9yIGJvdGggRVNNIGFuZCBDSlMgYnVpbGRzLlxuY29uc3QgJDogYW55ID0gKGpxdWVyeSBhcyBhbnkpLmRlZmF1bHQgfHwgKGpxdWVyeSBhcyBhbnkpO1xuY29uc3QgbW9tZW50OiBhbnkgPSAobW9tZW50SW1wb3J0IGFzIGFueSkuZGVmYXVsdCB8fCAobW9tZW50SW1wb3J0IGFzIGFueSk7XG5cbi8vIEVuc3VyZSBnbG9iYWxzIGFyZSBwcmVzZW50IGZvciB0aGUgZGF0ZXJhbmdlcGlja2VyIHBsdWdpbiByZWdpc3RyYXRpb24uXG5pZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgKHdpbmRvdyBhcyBhbnkpLmpRdWVyeSA9ICh3aW5kb3cgYXMgYW55KS5qUXVlcnkgfHwgJDtcbiAgKHdpbmRvdyBhcyBhbnkpLiQgPSAod2luZG93IGFzIGFueSkuJCB8fCAkO1xuICAod2luZG93IGFzIGFueSkubW9tZW50ID0gKHdpbmRvdyBhcyBhbnkpLm1vbWVudCB8fCBtb21lbnQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGF0ZVJhbmdlUGlja2VyT3B0aW9ucyB7XG4gIHN0YXJ0RGF0ZT86IERhdGUgfCBzdHJpbmc7XG4gIGVuZERhdGU/OiBEYXRlIHwgc3RyaW5nO1xuICBtaW5EYXRlPzogRGF0ZSB8IHN0cmluZztcbiAgbWF4RGF0ZT86IERhdGUgfCBzdHJpbmc7XG4gIGxvY2FsZT86IGFueTtcbiAgcmFuZ2VzPzogYW55O1xuICBvcGVucz86ICdsZWZ0JyB8ICdyaWdodCcgfCAnY2VudGVyJztcbiAgZHJvcHM/OiAnZG93bicgfCAndXAnIHwgJ2F1dG8nO1xuICBidXR0b25DbGFzc2VzPzogc3RyaW5nO1xuICBhcHBseUJ1dHRvbkNsYXNzZXM/OiBzdHJpbmc7XG4gIGNhbmNlbEJ1dHRvbkNsYXNzZXM/OiBzdHJpbmc7XG4gIGF1dG9BcHBseT86IGJvb2xlYW47XG4gIGFsd2F5c1Nob3dDYWxlbmRhcnM/OiBib29sZWFuO1xuICBzaG93RHJvcGRvd25zPzogYm9vbGVhbjtcbiAgc2hvd1dlZWtOdW1iZXJzPzogYm9vbGVhbjtcbiAgc2hvd0lTT1dlZWtOdW1iZXJzPzogYm9vbGVhbjtcbiAgc2luZ2xlRGF0ZVBpY2tlcj86IGJvb2xlYW47XG4gIHRpbWVQaWNrZXI/OiBib29sZWFuO1xuICB0aW1lUGlja2VyMjRIb3VyPzogYm9vbGVhbjtcbiAgdGltZVBpY2tlckluY3JlbWVudD86IG51bWJlcjtcbiAgdGltZVBpY2tlclNlY29uZHM/OiBib29sZWFuO1xuICBsaW5rZWRDYWxlbmRhcnM/OiBib29sZWFuO1xuICBhdXRvVXBkYXRlSW5wdXQ/OiBib29sZWFuO1xuICBpc0ludmFsaWREYXRlPzogKGRhdGU6IERhdGUpID0+IGJvb2xlYW47XG4gIGlzQ3VzdG9tRGF0ZT86IChkYXRlOiBEYXRlKSA9PiBzdHJpbmcgfCBib29sZWFuO1xuICBwYXJlbnRFbD86IHN0cmluZyB8IEhUTUxFbGVtZW50O1xufVxuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbY3FhRGF0ZXJhbmdlcGlja2VyXScsXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gRGF0ZXJhbmdlcGlja2VyRGlyZWN0aXZlKSxcbiAgICAgIG11bHRpOiB0cnVlXG4gICAgfVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIERhdGVyYW5nZXBpY2tlckRpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBPbkNoYW5nZXMsIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcbiAgQElucHV0KCkgb3B0aW9uczogRGF0ZVJhbmdlUGlja2VyT3B0aW9ucyA9IHt9O1xuICBASW5wdXQoKSBzdGFydERhdGU/OiBEYXRlIHwgc3RyaW5nO1xuICBASW5wdXQoKSBlbmREYXRlPzogRGF0ZSB8IHN0cmluZztcbiAgQElucHV0KCkgbWluRGF0ZT86IERhdGUgfCBzdHJpbmc7XG4gIEBJbnB1dCgpIG1heERhdGU/OiBEYXRlIHwgc3RyaW5nO1xuICBASW5wdXQoKSBwYXJlbnRFbD86IHN0cmluZyB8IEhUTUxFbGVtZW50O1xuICBAT3V0cHV0KCkgZGF0ZXNVcGRhdGVkID0gbmV3IEV2ZW50RW1pdHRlcjx7IHN0YXJ0RGF0ZTogRGF0ZSB8IG51bGw7IGVuZERhdGU6IERhdGUgfCBudWxsIH0+KCk7XG4gIEBPdXRwdXQoKSBjYW5jZWxDbGlja2VkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgYXBwbHlDbGlja2VkID0gbmV3IEV2ZW50RW1pdHRlcjx7IHN0YXJ0RGF0ZTogRGF0ZSB8IG51bGw7IGVuZERhdGU6IERhdGUgfCBudWxsIH0+KCk7XG5cbiAgcHJpdmF0ZSBwaWNrZXJJbnN0YW5jZTogYW55O1xuICBwcml2YXRlIG9uQ2hhbmdlID0gKHZhbHVlOiBhbnkpID0+IHt9O1xuICBwcml2YXRlIG9uVG91Y2hlZCA9ICgpID0+IHt9O1xuXG4gIC8qKlxuICAgKiBTYWZlbHkgdXBkYXRlIHRoZSBpbnB1dCB0ZXh0IHRvIGF2b2lkIFwiSW52YWxpZCBkYXRlXCIgb3IgXCJ1bmRlZmluZWRcIiBzdHJpbmdzLlxuICAgKi9cbiAgcHJpdmF0ZSB1cGRhdGVJbnB1dFZhbHVlKHN0YXJ0OiBhbnksIGVuZDogYW55KTogdm9pZCB7XG4gICAgaWYgKHR5cGVvZiAod2luZG93IGFzIGFueSkubW9tZW50ID09PSAndW5kZWZpbmVkJykgcmV0dXJuO1xuICAgIGNvbnN0IG0gPSAod2luZG93IGFzIGFueSkubW9tZW50O1xuICAgIGNvbnN0IGZvcm1hdCA9ICh0aGlzLm9wdGlvbnM/LmxvY2FsZSAmJiB0aGlzLm9wdGlvbnMubG9jYWxlLmZvcm1hdCkgfHwgJ01NL0REL1lZWVknO1xuICAgIGNvbnN0IHNlcGFyYXRvciA9ICh0aGlzLm9wdGlvbnM/LmxvY2FsZSAmJiB0aGlzLm9wdGlvbnMubG9jYWxlLnNlcGFyYXRvcikgfHwgJyAtICc7XG5cbiAgICBjb25zdCBoYXNTdGFydCA9IHN0YXJ0ICYmIG0uaXNNb21lbnQoc3RhcnQpO1xuICAgIGNvbnN0IGhhc0VuZCA9IGVuZCAmJiBtLmlzTW9tZW50KGVuZCk7XG5cbiAgICBpZiAoaGFzU3RhcnQgJiYgaGFzRW5kKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB0ZXh0ID0gYCR7c3RhcnQuZm9ybWF0KGZvcm1hdCl9JHtzZXBhcmF0b3J9JHtlbmQuZm9ybWF0KGZvcm1hdCl9YDtcbiAgICAgICAgJCh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQpLnZhbCh0ZXh0KTtcbiAgICAgIH0gY2F0Y2gge31cbiAgICB9IGVsc2Uge1xuICAgICAgdHJ5IHtcbiAgICAgICAgJCh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQpLnZhbCgnJyk7XG4gICAgICB9IGNhdGNoIHt9XG4gICAgfVxuICB9XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBlbDogRWxlbWVudFJlZikge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmluaXREYXRlcmFuZ2VwaWNrZXIoKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5waWNrZXJJbnN0YW5jZSkge1xuICAgICAgaWYgKGNoYW5nZXNbJ3N0YXJ0RGF0ZSddIHx8IGNoYW5nZXNbJ2VuZERhdGUnXSkge1xuICAgICAgICB0aGlzLnVwZGF0ZURhdGVzKCk7XG4gICAgICB9XG4gICAgICBpZiAoY2hhbmdlc1snbWluRGF0ZSddIHx8IGNoYW5nZXNbJ21heERhdGUnXSkge1xuICAgICAgICB0aGlzLnVwZGF0ZU1pbk1heERhdGVzKCk7XG4gICAgICB9XG4gICAgICBpZiAoY2hhbmdlc1snb3B0aW9ucyddKSB7XG4gICAgICAgIHRoaXMuZGVzdHJveVBpY2tlcigpO1xuICAgICAgICB0aGlzLmluaXREYXRlcmFuZ2VwaWNrZXIoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmRlc3Ryb3lQaWNrZXIoKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdERhdGVyYW5nZXBpY2tlcigpOiB2b2lkIHtcbiAgICBpZiAodHlwZW9mICQgPT09ICd1bmRlZmluZWQnIHx8IHR5cGVvZiAoJC5mbiBhcyBhbnkpLmRhdGVyYW5nZXBpY2tlciA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ2pRdWVyeSBhbmQgZGF0ZXJhbmdlcGlja2VyIG11c3QgYmUgbG9hZGVkJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgaWYgbW9tZW50LmpzIGlzIGF2YWlsYWJsZVxuICAgIGlmICh0eXBlb2YgKHdpbmRvdyBhcyBhbnkpLm1vbWVudCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ21vbWVudC5qcyBtdXN0IGJlIGxvYWRlZCBmb3IgZGF0ZXJhbmdlcGlja2VyIHRvIHdvcmsnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBSZXNvbHZlIHBhcmVudCBlbGVtZW50IHRvIHNjb3BlIHN0eWxlczsgYWxsb3cgb3ZlcnJpZGUgdmlhIG9wdGlvbnMucGFyZW50RWwsIGVsc2UgdXNlIGJvZHkuXG4gICAgY29uc3QgcmVzb2x2ZWRQYXJlbnRFbCA9IHRoaXMucGFyZW50RWwgfHwgdGhpcy5vcHRpb25zPy5wYXJlbnRFbCB8fCAnYm9keSc7XG5cbiAgICBjb25zdCBiYXNlT3B0aW9uczogRGF0ZVJhbmdlUGlja2VyT3B0aW9ucyA9IHtcbiAgICAgIG9wZW5zOiAnbGVmdCcsXG4gICAgICBkcm9wczogJ2Rvd24nLFxuICAgICAgYXV0b0FwcGx5OiB0cnVlLFxuICAgICAgYXV0b1VwZGF0ZUlucHV0OiBmYWxzZSwgLy8gd2UgbWFuYWdlIHRoZSBpbnB1dCBvdXJzZWx2ZXMgdG8gcHJldmVudCBcIkludmFsaWQgZGF0ZVwiXG4gICAgICBsb2NhbGU6IHtcbiAgICAgICAgZm9ybWF0OiAnTU0vREQvWVlZWScsXG4gICAgICAgIHNlcGFyYXRvcjogJyAtICcsXG4gICAgICAgIGFwcGx5TGFiZWw6ICdBcHBseScsXG4gICAgICAgIGNhbmNlbExhYmVsOiAnQ2FuY2VsJyxcbiAgICAgICAgZnJvbUxhYmVsOiAnRnJvbScsXG4gICAgICAgIHRvTGFiZWw6ICdUbycsXG4gICAgICAgIGN1c3RvbVJhbmdlTGFiZWw6ICdDdXN0b20nLFxuICAgICAgICB3ZWVrTGFiZWw6ICdXJyxcbiAgICAgICAgZGF5c09mV2VlazogWydTdScsICdNbycsICdUdScsICdXZScsICdUaCcsICdGcicsICdTYSddLFxuICAgICAgICBtb250aE5hbWVzOiBbJ0phbnVhcnknLCAnRmVicnVhcnknLCAnTWFyY2gnLCAnQXByaWwnLCAnTWF5JywgJ0p1bmUnLCAnSnVseScsICdBdWd1c3QnLCAnU2VwdGVtYmVyJywgJ09jdG9iZXInLCAnTm92ZW1iZXInLCAnRGVjZW1iZXInXSxcbiAgICAgICAgZmlyc3REYXk6IDBcbiAgICAgIH0sXG4gICAgICBwYXJlbnRFbDogcmVzb2x2ZWRQYXJlbnRFbCBhcyBhbnlcbiAgICB9O1xuXG4gICAgLy8gTWVyZ2Ugb3B0aW9ucyBidXQgZm9yY2UtZGlzYWJsZSBwbHVnaW4gYXV0b1VwZGF0ZUlucHV0IHRvIGF2b2lkIGludmFsaWQgdmFsdWVzLlxuICAgIGNvbnN0IGRlZmF1bHRPcHRpb25zOiBEYXRlUmFuZ2VQaWNrZXJPcHRpb25zID0ge1xuICAgICAgLi4uYmFzZU9wdGlvbnMsXG4gICAgICAuLi50aGlzLm9wdGlvbnMsXG4gICAgICBsb2NhbGU6IHtcbiAgICAgICAgLi4uYmFzZU9wdGlvbnMubG9jYWxlLFxuICAgICAgICAuLi4odGhpcy5vcHRpb25zPy5sb2NhbGUgfHwge30pXG4gICAgICB9LFxuICAgICAgYXV0b1VwZGF0ZUlucHV0OiBmYWxzZVxuICAgIH07XG5cbiAgICAvLyBDb252ZXJ0IERhdGUgb2JqZWN0cyB0byBtb21lbnQgb2JqZWN0cyBmb3IgZGF0ZXJhbmdlcGlja2VyXG4gICAgY29uc3QgdG9Nb21lbnQgPSAoZDogRGF0ZSB8IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQpOiBhbnkgPT4ge1xuICAgICAgaWYgKCFkKSByZXR1cm4gbnVsbDtcbiAgICAgIGlmICh0eXBlb2YgZCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgY29uc3QgbG93ZXIgPSBkLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBpZiAobG93ZXIgPT09ICd1bmRlZmluZWQnIHx8IGxvd2VyID09PSAnbnVsbCcgfHwgbG93ZXIgPT09ICcnKSByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGlmIChtb21lbnQuaXNNb21lbnQgJiYgbW9tZW50LmlzTW9tZW50KGQpKSByZXR1cm4gZDtcbiAgICAgIGNvbnN0IGRhdGUgPSB0eXBlb2YgZCA9PT0gJ3N0cmluZycgPyBuZXcgRGF0ZShkKSA6IGQ7XG4gICAgICBpZiAoZGF0ZSBpbnN0YW5jZW9mIERhdGUgJiYgIWlzTmFOKGRhdGUuZ2V0VGltZSgpKSkge1xuICAgICAgICByZXR1cm4gbW9tZW50KGRhdGUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgICBcbiAgICBjb25zdCBzdGFydE1vbWVudCA9IHRvTW9tZW50KHRoaXMuc3RhcnREYXRlKTtcbiAgICBjb25zdCBlbmRNb21lbnQgPSB0b01vbWVudCh0aGlzLmVuZERhdGUpO1xuICAgIGNvbnN0IG1pbk1vbWVudCA9IHRvTW9tZW50KHRoaXMubWluRGF0ZSk7XG4gICAgY29uc3QgbWF4TW9tZW50ID0gdG9Nb21lbnQodGhpcy5tYXhEYXRlKTtcbiAgICBcbiAgICBpZiAoc3RhcnRNb21lbnQpIGRlZmF1bHRPcHRpb25zLnN0YXJ0RGF0ZSA9IHN0YXJ0TW9tZW50O1xuICAgIGlmIChlbmRNb21lbnQpIGRlZmF1bHRPcHRpb25zLmVuZERhdGUgPSBlbmRNb21lbnQ7XG4gICAgaWYgKG1pbk1vbWVudCkgZGVmYXVsdE9wdGlvbnMubWluRGF0ZSA9IG1pbk1vbWVudDtcbiAgICBpZiAobWF4TW9tZW50KSBkZWZhdWx0T3B0aW9ucy5tYXhEYXRlID0gbWF4TW9tZW50O1xuXG4gICAgLy8gSWYgbm8gaW5pdGlhbCBkYXRlcywgZW5zdXJlIHRoZSBpbnB1dCBpcyBibGFuayBiZWZvcmUgcGx1Z2luIGluaXQuXG4gICAgaWYgKCFzdGFydE1vbWVudCAmJiAhZW5kTW9tZW50KSB7XG4gICAgICB0cnkgeyAkKHRoaXMuZWwubmF0aXZlRWxlbWVudCkudmFsKCcnKTsgfSBjYXRjaCB7fVxuICAgIH1cblxuICAgIC8vIEluaXRpYWxpemUgdGhlIHBpY2tlclxuICAgICQodGhpcy5lbC5uYXRpdmVFbGVtZW50KS5kYXRlcmFuZ2VwaWNrZXIoZGVmYXVsdE9wdGlvbnMsIChzdGFydDogYW55LCBlbmQ6IGFueSwgbGFiZWw6IHN0cmluZykgPT4ge1xuICAgICAgY29uc3Qgc3RhcnREYXRlID0gc3RhcnQgPyBzdGFydC50b0RhdGUoKSA6IG51bGw7XG4gICAgICBjb25zdCBlbmREYXRlID0gZW5kID8gZW5kLnRvRGF0ZSgpIDogbnVsbDtcbiAgICAgIFxuICAgICAgdGhpcy5vbkNoYW5nZSh7IHN0YXJ0OiBzdGFydERhdGUsIGVuZDogZW5kRGF0ZSB9KTtcbiAgICAgIHRoaXMuZGF0ZXNVcGRhdGVkLmVtaXQoeyBzdGFydERhdGUsIGVuZERhdGUgfSk7XG4gICAgICB0aGlzLmFwcGx5Q2xpY2tlZC5lbWl0KHsgc3RhcnREYXRlLCBlbmREYXRlIH0pO1xuICAgICAgdGhpcy51cGRhdGVJbnB1dFZhbHVlKHN0YXJ0LCBlbmQpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5waWNrZXJJbnN0YW5jZSA9ICQodGhpcy5lbC5uYXRpdmVFbGVtZW50KS5kYXRhKCdkYXRlcmFuZ2VwaWNrZXInKTtcblxuICAgIC8vIEVuc3VyZSB0aGUgb3ZlcmxheSBnZXRzIHRoZSBzdHlsaW5nIHNjb3BlIGNsYXNzIGlmIG5vdCBhbHJlYWR5IHByZXNlbnQuXG4gICAgaWYgKHRoaXMucGlja2VySW5zdGFuY2U/LmNvbnRhaW5lcikge1xuICAgICAgY29uc3QgYyA9IHRoaXMucGlja2VySW5zdGFuY2UuY29udGFpbmVyO1xuICAgICAgaWYgKCFjLmhhc0NsYXNzKCdjcWEtdWktZGF0ZXJhbmdlLXBpY2tlcicpKSB7XG4gICAgICAgIGMuYWRkQ2xhc3MoJ2NxYS11aS1kYXRlcmFuZ2UtcGlja2VyJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIGNhbmNlbCBldmVudFxuICAgICQodGhpcy5lbC5uYXRpdmVFbGVtZW50KS5vbignY2FuY2VsLmRhdGVyYW5nZXBpY2tlcicsICgpID0+IHtcbiAgICAgIHRoaXMuY2FuY2VsQ2xpY2tlZC5lbWl0KCk7XG4gICAgICB0aGlzLnVwZGF0ZUlucHV0VmFsdWUobnVsbCwgbnVsbCk7XG4gICAgfSk7XG5cbiAgICAvLyBVcGRhdGUgaW5pdGlhbCB2YWx1ZSBpZiBwcm92aWRlZFxuICAgIHRoaXMudXBkYXRlRGF0ZXMoKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlRGF0ZXMoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnBpY2tlckluc3RhbmNlKSByZXR1cm47XG4gICAgaWYgKHR5cGVvZiAod2luZG93IGFzIGFueSkubW9tZW50ID09PSAndW5kZWZpbmVkJykgcmV0dXJuO1xuXG4gICAgY29uc3QgbW9tZW50ID0gKHdpbmRvdyBhcyBhbnkpLm1vbWVudDtcbiAgICBcbiAgICAvLyBDb252ZXJ0IERhdGUgb2JqZWN0cyB0byBtb21lbnQgb2JqZWN0c1xuICAgIGNvbnN0IHRvTW9tZW50ID0gKGQ6IERhdGUgfCBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkKTogYW55ID0+IHtcbiAgICAgIGlmICghZCkgcmV0dXJuIG51bGw7XG4gICAgICBpZiAodHlwZW9mIGQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGNvbnN0IGxvd2VyID0gZC50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKGxvd2VyID09PSAndW5kZWZpbmVkJyB8fCBsb3dlciA9PT0gJ251bGwnIHx8IGxvd2VyID09PSAnJykgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBpZiAobW9tZW50LmlzTW9tZW50ICYmIG1vbWVudC5pc01vbWVudChkKSkgcmV0dXJuIGQ7XG4gICAgICBjb25zdCBkYXRlID0gdHlwZW9mIGQgPT09ICdzdHJpbmcnID8gbmV3IERhdGUoZCkgOiBkO1xuICAgICAgaWYgKGRhdGUgaW5zdGFuY2VvZiBEYXRlICYmICFpc05hTihkYXRlLmdldFRpbWUoKSkpIHtcbiAgICAgICAgcmV0dXJuIG1vbWVudChkYXRlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gICAgXG4gICAgY29uc3Qgc3RhcnRNb21lbnQgPSB0b01vbWVudCh0aGlzLnN0YXJ0RGF0ZSk7XG4gICAgY29uc3QgZW5kTW9tZW50ID0gdG9Nb21lbnQodGhpcy5lbmREYXRlKTtcbiAgICBcbiAgICBpZiAoc3RhcnRNb21lbnQpIHtcbiAgICAgIHRoaXMucGlja2VySW5zdGFuY2Uuc2V0U3RhcnREYXRlKHN0YXJ0TW9tZW50KTtcbiAgICB9XG4gICAgXG4gICAgaWYgKGVuZE1vbWVudCkge1xuICAgICAgdGhpcy5waWNrZXJJbnN0YW5jZS5zZXRFbmREYXRlKGVuZE1vbWVudCk7XG4gICAgfVxuICAgIFxuICAgIC8vIFVwZGF0ZSBpbnB1dCB0ZXh0IHRvIHJlZmxlY3QgY3VycmVudCB2YWx1ZXNcbiAgICB0aGlzLnVwZGF0ZUlucHV0VmFsdWUoc3RhcnRNb21lbnQsIGVuZE1vbWVudCk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZU1pbk1heERhdGVzKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5waWNrZXJJbnN0YW5jZSkgcmV0dXJuO1xuICAgIGlmICh0eXBlb2YgKHdpbmRvdyBhcyBhbnkpLm1vbWVudCA9PT0gJ3VuZGVmaW5lZCcpIHJldHVybjtcblxuICAgIGNvbnN0IG1vbWVudCA9ICh3aW5kb3cgYXMgYW55KS5tb21lbnQ7XG4gICAgXG4gICAgLy8gQ29udmVydCBEYXRlIG9iamVjdHMgdG8gbW9tZW50IG9iamVjdHNcbiAgICBjb25zdCB0b01vbWVudCA9IChkOiBEYXRlIHwgc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCk6IGFueSA9PiB7XG4gICAgICBpZiAoIWQpIHJldHVybiBudWxsO1xuICAgICAgaWYgKG1vbWVudC5pc01vbWVudCAmJiBtb21lbnQuaXNNb21lbnQoZCkpIHJldHVybiBkO1xuICAgICAgY29uc3QgZGF0ZSA9IHR5cGVvZiBkID09PSAnc3RyaW5nJyA/IG5ldyBEYXRlKGQpIDogZDtcbiAgICAgIGlmIChkYXRlIGluc3RhbmNlb2YgRGF0ZSAmJiAhaXNOYU4oZGF0ZS5nZXRUaW1lKCkpKSB7XG4gICAgICAgIHJldHVybiBtb21lbnQoZGF0ZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICAgIFxuICAgIGNvbnN0IG1pbk1vbWVudCA9IHRvTW9tZW50KHRoaXMubWluRGF0ZSk7XG4gICAgY29uc3QgbWF4TW9tZW50ID0gdG9Nb21lbnQodGhpcy5tYXhEYXRlKTtcbiAgICBcbiAgICBpZiAobWluTW9tZW50KSB7XG4gICAgICB0aGlzLnBpY2tlckluc3RhbmNlLnNldE1pbkRhdGUobWluTW9tZW50KTtcbiAgICB9XG4gICAgaWYgKG1heE1vbWVudCkge1xuICAgICAgdGhpcy5waWNrZXJJbnN0YW5jZS5zZXRNYXhEYXRlKG1heE1vbWVudCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBkZXN0cm95UGlja2VyKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnBpY2tlckluc3RhbmNlICYmIHR5cGVvZiAkICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgJCh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQpLm9mZignY2FuY2VsLmRhdGVyYW5nZXBpY2tlcicpO1xuICAgICAgJCh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQpLmRhdGEoJ2RhdGVyYW5nZXBpY2tlcicpPy5yZW1vdmUoKTtcbiAgICAgIHRoaXMucGlja2VySW5zdGFuY2UgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8vIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGltcGxlbWVudGF0aW9uXG4gIHdyaXRlVmFsdWUodmFsdWU6IHsgc3RhcnQ6IERhdGUgfCBudWxsOyBlbmQ6IERhdGUgfCBudWxsIH0gfCBudWxsKTogdm9pZCB7XG4gICAgaWYgKHZhbHVlICYmICh2YWx1ZS5zdGFydCB8fCB2YWx1ZS5lbmQpKSB7XG4gICAgICAvLyBWYWxpZGF0ZSBkYXRlcyBiZWZvcmUgc2V0dGluZ1xuICAgICAgY29uc3QgaXNWYWxpZERhdGUgPSAoZDogRGF0ZSB8IG51bGwpOiBib29sZWFuID0+IHtcbiAgICAgICAgcmV0dXJuIGQgIT09IG51bGwgJiYgZCBpbnN0YW5jZW9mIERhdGUgJiYgIWlzTmFOKGQuZ2V0VGltZSgpKTtcbiAgICAgIH07XG4gICAgICBcbiAgICAgIHRoaXMuc3RhcnREYXRlID0gKHZhbHVlLnN0YXJ0ICYmIGlzVmFsaWREYXRlKHZhbHVlLnN0YXJ0KSkgPyB2YWx1ZS5zdGFydCA6IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuZW5kRGF0ZSA9ICh2YWx1ZS5lbmQgJiYgaXNWYWxpZERhdGUodmFsdWUuZW5kKSkgPyB2YWx1ZS5lbmQgOiB1bmRlZmluZWQ7XG4gICAgICB0aGlzLnVwZGF0ZURhdGVzKCk7XG4gICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCAodmFsdWUgJiYgIXZhbHVlLnN0YXJ0ICYmICF2YWx1ZS5lbmQpKSB7XG4gICAgICB0aGlzLnN0YXJ0RGF0ZSA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuZW5kRGF0ZSA9IHVuZGVmaW5lZDtcbiAgICAgIGlmICh0aGlzLnBpY2tlckluc3RhbmNlKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgbSA9ICh3aW5kb3cgYXMgYW55KS5tb21lbnQ7XG4gICAgICAgICAgaWYgKG0pIHtcbiAgICAgICAgICAgIC8vIFJlc2V0IHBpY2tlciBpbnRlcm5hbHMgdG8gYSBzYWZlIHZhbHVlIGluc3RlYWQgb2YgbnVsbCB0byBhdm9pZCBcIkludmFsaWQgZGF0ZVwiXG4gICAgICAgICAgICB0aGlzLnBpY2tlckluc3RhbmNlLnNldFN0YXJ0RGF0ZShtKCkpO1xuICAgICAgICAgICAgdGhpcy5waWNrZXJJbnN0YW5jZS5zZXRFbmREYXRlKG0oKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMudXBkYXRlSW5wdXRWYWx1ZShudWxsLCBudWxsKTtcbiAgICAgICAgfSBjYXRjaCB7fVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46ICh2YWx1ZTogYW55KSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xuICB9XG5cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xuICB9XG5cbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZWwubmF0aXZlRWxlbWVudCkge1xuICAgICAgdGhpcy5lbC5uYXRpdmVFbGVtZW50LmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgICB9XG4gIH1cbn1cblxuIl19
@@ -412,10 +412,10 @@ export class DynamicFilterComponent {
412
412
  }
413
413
  }
414
414
  DynamicFilterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: DynamicFilterComponent, deps: [{ token: i1.FormBuilder }], target: i0.ɵɵFactoryTarget.Component });
415
- DynamicFilterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: DynamicFilterComponent, selector: "cqa-dynamic-filter", inputs: { config: "config", model: "model", showFilterPanel: "showFilterPanel", buttonLayout: "buttonLayout" }, outputs: { filtersApplied: "filtersApplied", filtersChanged: "filtersChanged", resetAction: "resetAction", onApplyFilterClick: "onApplyFilterClick", onResetFilterClick: "onResetFilterClick" }, host: { classAttribute: "cqa-ui-root" }, viewQueries: [{ propertyName: "selectComponents", predicate: DynamicSelectFieldComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"cqa-ui-root cqa-ui-daterange-picker\">\n <div class=\"cqa-filter cqa-mb-[28px]\" *ngIf=\"showFilterPanel\" style=\"height: auto;\">\n <!-- Bottom Layout: Current design with selectors in grid and buttons below -->\n <ng-container *ngIf=\"buttonLayout === 'bottom'\">\n <form class=\"ts-form cqa-grid lg:cqa-grid-cols-4 md:cqa-grid-cols-2 cqa-gap-4 cqa-relative\" [formGroup]=\"form\"\n (keydown.enter)=\"(false)\" novalidate=\"novalidate\">\n <ng-container *ngFor=\"let c of config\">\n <ng-container *ngIf=\"!c.hidden\">\n <div class=\"form-group cus-range-select cqa-flex cqa-flex-col cqa-gap-2 cqa-flex-shrink-0 filter-selector-width cqa-w-full\">\n <!-- Select -->\n <ng-container *ngIf=\"c.type === 'select'\">\n <cqa-dynamic-select [form]=\"form\" [config]=\"getSelectConfig(c)\"></cqa-dynamic-select>\n </ng-container>\n\n <!-- Date Range Picker -->\n <ng-container *ngIf=\"c.type === 'date-range-picker'\">\n <cqa-daterangepicker\n [label]=\"c.label\"\n [placeholder]=\"c.placeholder || 'Start Date - End Date'\"\n [disabled]=\"c.disabled || false\"\n [startDate]=\"getDateGroup(c.key)?.get('start')?.value\"\n [endDate]=\"getDateGroup(c.key)?.get('end')?.value\"\n [minDate]=\"undefined\"\n [maxDate]=\"maxDate\"\n [ranges]=\"getDaterangepickerRanges()\"\n [autoApply]=\"true\"\n [alwaysShowCalendars]=\"true\"\n [parentEl]=\"c.parentEl\"\n (datesUpdated)=\"onDaterangepickerChange($event, c.key)\"\n (applyClicked)=\"onDaterangepickerApply($event, c.key)\">\n </cqa-daterangepicker>\n <mat-error *ngIf=\"getDateGroup(c.key)?.invalid && getDateGroup(c.key)?.touched\">\n {{ getDateValidationError(c.key) }}\n </mat-error>\n </ng-container>\n </div>\n </ng-container>\n </ng-container>\n </form>\n\n <div class=\"cqa-flex cqa-justify-end cqa-items-stretch cqa-gap-2 cqa-mt-4\">\n <cqa-button variant=\"filled\" (mousedown)=\"preparePrimaryAction()\" (clicked)=\"apply()\" [disabled]=\"!hasSelectedFilters\">Apply Filter</cqa-button>\n <cqa-button variant=\"outlined\" (mousedown)=\"preparePrimaryAction()\" (clicked)=\"reset()\">Reset</cqa-button>\n </div>\n </ng-container>\n\n <!-- Right Layout: Buttons on leftmost side, selectors on rightmost side -->\n <ng-container *ngIf=\"buttonLayout === 'right'\">\n <form class=\"ts-form cqa-flex cqa-flex-wrap cqa-items-end cqa-justify-between cqa-gap-4 cqa-ui-daterange-picker cqa-relative\" [formGroup]=\"form\"\n (keydown.enter)=\"(false)\" novalidate=\"novalidate\" style=\"height: auto;\">\n <div class=\"cqa-flex cqa-items-stretch cqa-gap-2 cqa-flex-shrink-0 cqa-order-first cqa-mr-auto\">\n <cqa-button variant=\"filled\" (clicked)=\"apply()\" [disabled]=\"!hasSelectedFilters\">Apply Filter</cqa-button>\n <cqa-button variant=\"outlined\" (clicked)=\"reset()\">Reset</cqa-button>\n </div>\n <div class=\"cqa-flex cqa-flex-wrap cqa-items-end cqa-gap-4 cqa-flex-1 cqa-justify-end cqa-order-last cqa-ml-auto\">\n <ng-container *ngFor=\"let c of config\">\n <ng-container *ngIf=\"!c.hidden\">\n <div class=\"form-group cqa-flex cqa-flex-col cqa-gap-2 cqa-flex-shrink-0 filter-selector-width\">\n <!-- Select -->\n <ng-container *ngIf=\"c.type === 'select'\">\n <cqa-dynamic-select [form]=\"form\" [config]=\"getSelectConfig(c)\"></cqa-dynamic-select>\n </ng-container>\n\n <!-- Date Range (Daterangepicker) --> \n <ng-container *ngIf=\"c.type === 'date-range-picker'\">\n <cqa-daterangepicker\n [label]=\"c.label\"\n [placeholder]=\"c.placeholder || 'Start Date - End Date'\"\n [disabled]=\"c.disabled || false\"\n [startDate]=\"getDateGroup(c.key)?.get('start')?.value\"\n [endDate]=\"getDateGroup(c.key)?.get('end')?.value\"\n [minDate]=\"undefined\"\n [maxDate]=\"maxDate\"\n [ranges]=\"getDaterangepickerRanges()\"\n [autoApply]=\"true\"\n [alwaysShowCalendars]=\"true\"\n (datesUpdated)=\"onDaterangepickerChange($event, c.key)\"\n (applyClicked)=\"onDaterangepickerApply($event, c.key)\">\n </cqa-daterangepicker>\n <mat-error *ngIf=\"getDateGroup(c.key)?.invalid && getDateGroup(c.key)?.touched\">\n {{ getDateValidationError(c.key) }}\n </mat-error>\n </ng-container>\n </div>\n </ng-container>\n </ng-container>\n </div>\n </form>\n </ng-container>\n\n <!-- Left Layout: Selectors on leftmost side, buttons on rightmost side -->\n <ng-container *ngIf=\"buttonLayout === 'left'\">\n <form class=\"ts-form cqa-flex cqa-flex-wrap cqa-items-end cqa-justify-between cqa-gap-4 cqa-ui-daterange-picker cqa-relative\" [formGroup]=\"form\"\n (keydown.enter)=\"(false)\" novalidate=\"novalidate\" style=\"height: auto;\">\n <div class=\"cqa-flex cqa-flex-wrap cqa-items-end cqa-gap-4 cqa-flex-1 cqa-order-first cqa-mr-auto\">\n <ng-container *ngFor=\"let c of config\">\n <ng-container *ngIf=\"!c.hidden\">\n <div class=\"form-group cqa-flex cqa-flex-col cqa-gap-2 cqa-flex-shrink-0 filter-selector-width\">\n <!-- Select -->\n <ng-container *ngIf=\"c.type === 'select'\">\n <cqa-dynamic-select [form]=\"form\" [config]=\"getSelectConfig(c)\"></cqa-dynamic-select>\n </ng-container>\n\n <!-- Date Range (Daterangepicker) --> \n <ng-container *ngIf=\"c.type === 'date-range-picker'\">\n <cqa-daterangepicker\n [label]=\"c.label\"\n [placeholder]=\"c.placeholder || 'Start Date - End Date'\"\n [disabled]=\"c.disabled || false\"\n [startDate]=\"getDateGroup(c.key)?.get('start')?.value\"\n [endDate]=\"getDateGroup(c.key)?.get('end')?.value\"\n [minDate]=\"undefined\"\n [maxDate]=\"maxDate\"\n [ranges]=\"getDaterangepickerRanges()\"\n [autoApply]=\"true\"\n [alwaysShowCalendars]=\"true\"\n (datesUpdated)=\"onDaterangepickerChange($event, c.key)\"\n (applyClicked)=\"onDaterangepickerApply($event, c.key)\">\n </cqa-daterangepicker>\n <mat-error *ngIf=\"getDateGroup(c.key)?.invalid && getDateGroup(c.key)?.touched\">\n {{ getDateValidationError(c.key) }}\n </mat-error>\n </ng-container>\n </div>\n </ng-container>\n </ng-container>\n </div>\n <div class=\"cqa-flex cqa-items-stretch cqa-gap-2 cqa-flex-shrink-0 cqa-order-last cqa-ml-auto\">\n <cqa-button variant=\"filled\" (mousedown)=\"preparePrimaryAction()\" (clicked)=\"apply()\" [disabled]=\"!hasSelectedFilters\">Apply Filter</cqa-button>\n <cqa-button variant=\"outlined\" (mousedown)=\"preparePrimaryAction()\" (clicked)=\"reset()\">Reset</cqa-button>\n </div>\n </form>\n </ng-container>\n </div>\n</div>", components: [{ type: i2.DynamicSelectFieldComponent, selector: "cqa-dynamic-select", inputs: ["form", "config"], outputs: ["selectionChange", "selectClick", "searchChange", "loadMore"] }, { type: i3.DaterangepickerComponent, selector: "cqa-daterangepicker", inputs: ["label", "placeholder", "disabled", "startDate", "endDate", "minDate", "maxDate", "ranges", "autoApply", "alwaysShowCalendars", "opens", "drops", "isInvalidDate", "parentEl"], outputs: ["datesUpdated", "cancelClicked", "applyClicked"] }, { type: i4.ButtonComponent, selector: "cqa-button", inputs: ["variant", "disabled", "icon", "iconPosition", "fullWidth", "iconColor", "type", "text", "customClass", "tooltip", "tooltipPosition"], outputs: ["clicked"] }], directives: [{ type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i6.MatError, selector: "mat-error", inputs: ["id"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
415
+ DynamicFilterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: DynamicFilterComponent, selector: "cqa-dynamic-filter", inputs: { config: "config", model: "model", showFilterPanel: "showFilterPanel", buttonLayout: "buttonLayout" }, outputs: { filtersApplied: "filtersApplied", filtersChanged: "filtersChanged", resetAction: "resetAction", onApplyFilterClick: "onApplyFilterClick", onResetFilterClick: "onResetFilterClick" }, host: { classAttribute: "cqa-ui-root" }, viewQueries: [{ propertyName: "selectComponents", predicate: DynamicSelectFieldComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"cqa-ui-root cqa-ui-daterange-picker\">\n <div class=\"cqa-filter cqa-mb-[28px]\" *ngIf=\"showFilterPanel\" style=\"height: auto;\">\n <!-- Bottom Layout: Current design with selectors in grid and buttons below -->\n <ng-container *ngIf=\"buttonLayout === 'bottom'\">\n <form class=\"ts-form cqa-grid lg:cqa-grid-cols-4 md:cqa-grid-cols-2 cqa-gap-4 cqa-relative\" [formGroup]=\"form\"\n (keydown.enter)=\"(false)\" novalidate=\"novalidate\">\n <ng-container *ngFor=\"let c of config\">\n <ng-container *ngIf=\"!c.hidden\">\n <div class=\"form-group cus-range-select cqa-flex cqa-flex-col cqa-gap-2 cqa-flex-shrink-0 filter-selector-width cqa-w-full\">\n <!-- Select -->\n <ng-container *ngIf=\"c.type === 'select'\">\n <cqa-dynamic-select [form]=\"form\" [config]=\"getSelectConfig(c)\"></cqa-dynamic-select>\n </ng-container>\n\n <!-- Date Range Picker -->\n <ng-container *ngIf=\"c.type === 'date-range-picker'\">\n <cqa-daterangepicker\n [label]=\"c.label\"\n [placeholder]=\"c.placeholder || 'Start Date - End Date'\"\n [disabled]=\"c.disabled || false\"\n [startDate]=\"getDateGroup(c.key)?.get('start')?.value\"\n [endDate]=\"getDateGroup(c.key)?.get('end')?.value\"\n [minDate]=\"undefined\"\n [maxDate]=\"maxDate\"\n [ranges]=\"getDaterangepickerRanges()\"\n [autoApply]=\"true\"\n [alwaysShowCalendars]=\"true\"\n [parentEl]=\"c.parentEl\"\n (datesUpdated)=\"onDaterangepickerChange($event, c.key)\"\n (applyClicked)=\"onDaterangepickerApply($event, c.key)\">\n </cqa-daterangepicker>\n <mat-error *ngIf=\"getDateGroup(c.key)?.invalid && getDateGroup(c.key)?.touched\">\n {{ getDateValidationError(c.key) }}\n </mat-error>\n </ng-container>\n </div>\n </ng-container>\n </ng-container>\n </form>\n\n <div class=\"cqa-flex cqa-justify-end cqa-items-stretch cqa-gap-2 cqa-mt-4\">\n <cqa-button variant=\"filled\" (mousedown)=\"preparePrimaryAction()\" (clicked)=\"apply()\" [disabled]=\"!hasSelectedFilters\">Apply Filter</cqa-button>\n <cqa-button variant=\"outlined\" (mousedown)=\"preparePrimaryAction()\" (clicked)=\"reset()\">Reset</cqa-button>\n </div>\n </ng-container>\n\n <!-- Right Layout: Buttons on leftmost side, selectors on rightmost side -->\n <ng-container *ngIf=\"buttonLayout === 'right'\">\n <form class=\"ts-form cqa-flex cqa-flex-wrap cqa-items-end cqa-justify-between cqa-gap-4 cqa-ui-daterange-picker cqa-relative\" [formGroup]=\"form\"\n (keydown.enter)=\"(false)\" novalidate=\"novalidate\" style=\"height: auto;\">\n <div class=\"cqa-flex cqa-items-stretch cqa-gap-2 cqa-flex-shrink-0 cqa-order-first cqa-mr-auto\">\n <cqa-button variant=\"filled\" (clicked)=\"apply()\" [disabled]=\"!hasSelectedFilters\">Apply Filter</cqa-button>\n <cqa-button variant=\"outlined\" (clicked)=\"reset()\">Reset</cqa-button>\n </div>\n <div class=\"cqa-flex cqa-flex-wrap cqa-items-end cqa-gap-4 cqa-flex-1 cqa-justify-end cqa-order-last cqa-ml-auto\">\n <ng-container *ngFor=\"let c of config\">\n <ng-container *ngIf=\"!c.hidden\">\n <div class=\"form-group cqa-flex cqa-flex-col cqa-gap-2 cqa-flex-shrink-0 filter-selector-width\">\n <!-- Select -->\n <ng-container *ngIf=\"c.type === 'select'\">\n <cqa-dynamic-select [form]=\"form\" [config]=\"getSelectConfig(c)\"></cqa-dynamic-select>\n </ng-container>\n\n <!-- Date Range (Daterangepicker) --> \n <ng-container *ngIf=\"c.type === 'date-range-picker'\">\n <cqa-daterangepicker\n [label]=\"c.label\"\n [placeholder]=\"c.placeholder || 'Start Date - End Date'\"\n [disabled]=\"c.disabled || false\"\n [startDate]=\"getDateGroup(c.key)?.get('start')?.value\"\n [endDate]=\"getDateGroup(c.key)?.get('end')?.value\"\n [minDate]=\"undefined\"\n [maxDate]=\"maxDate\"\n [ranges]=\"getDaterangepickerRanges()\"\n [autoApply]=\"true\"\n [alwaysShowCalendars]=\"true\"\n [parentEl]=\"c.parentEl\"\n (datesUpdated)=\"onDaterangepickerChange($event, c.key)\"\n (applyClicked)=\"onDaterangepickerApply($event, c.key)\">\n </cqa-daterangepicker>\n <mat-error *ngIf=\"getDateGroup(c.key)?.invalid && getDateGroup(c.key)?.touched\">\n {{ getDateValidationError(c.key) }}\n </mat-error>\n </ng-container>\n </div>\n </ng-container>\n </ng-container>\n </div>\n </form>\n </ng-container>\n\n <!-- Left Layout: Selectors on leftmost side, buttons on rightmost side -->\n <ng-container *ngIf=\"buttonLayout === 'left'\">\n <form class=\"ts-form cqa-flex cqa-flex-wrap cqa-items-end cqa-justify-between cqa-gap-4 cqa-ui-daterange-picker cqa-relative\" [formGroup]=\"form\"\n (keydown.enter)=\"(false)\" novalidate=\"novalidate\" style=\"height: auto;\">\n <div class=\"cqa-flex cqa-flex-wrap cqa-items-end cqa-gap-4 cqa-flex-1 cqa-order-first cqa-mr-auto\">\n <ng-container *ngFor=\"let c of config\">\n <ng-container *ngIf=\"!c.hidden\">\n <div class=\"form-group cqa-flex cqa-flex-col cqa-gap-2 cqa-flex-shrink-0 filter-selector-width\">\n <!-- Select -->\n <ng-container *ngIf=\"c.type === 'select'\">\n <cqa-dynamic-select [form]=\"form\" [config]=\"getSelectConfig(c)\"></cqa-dynamic-select>\n </ng-container>\n\n <!-- Date Range (Daterangepicker) --> \n <ng-container *ngIf=\"c.type === 'date-range-picker'\">\n <cqa-daterangepicker\n [label]=\"c.label\"\n [placeholder]=\"c.placeholder || 'Start Date - End Date'\"\n [disabled]=\"c.disabled || false\"\n [startDate]=\"getDateGroup(c.key)?.get('start')?.value\"\n [endDate]=\"getDateGroup(c.key)?.get('end')?.value\"\n [minDate]=\"undefined\"\n [maxDate]=\"maxDate\"\n [ranges]=\"getDaterangepickerRanges()\"\n [autoApply]=\"true\"\n [alwaysShowCalendars]=\"true\"\n [parentEl]=\"c.parentEl\"\n (datesUpdated)=\"onDaterangepickerChange($event, c.key)\"\n (applyClicked)=\"onDaterangepickerApply($event, c.key)\">\n </cqa-daterangepicker>\n <mat-error *ngIf=\"getDateGroup(c.key)?.invalid && getDateGroup(c.key)?.touched\">\n {{ getDateValidationError(c.key) }}\n </mat-error>\n </ng-container>\n </div>\n </ng-container>\n </ng-container>\n </div>\n <div class=\"cqa-flex cqa-items-stretch cqa-gap-2 cqa-flex-shrink-0 cqa-order-last cqa-ml-auto\">\n <cqa-button variant=\"filled\" (mousedown)=\"preparePrimaryAction()\" (clicked)=\"apply()\" [disabled]=\"!hasSelectedFilters\">Apply Filter</cqa-button>\n <cqa-button variant=\"outlined\" (mousedown)=\"preparePrimaryAction()\" (clicked)=\"reset()\">Reset</cqa-button>\n </div>\n </form>\n </ng-container>\n </div>\n</div>", components: [{ type: i2.DynamicSelectFieldComponent, selector: "cqa-dynamic-select", inputs: ["form", "config"], outputs: ["selectionChange", "selectClick", "searchChange", "loadMore"] }, { type: i3.DaterangepickerComponent, selector: "cqa-daterangepicker", inputs: ["label", "placeholder", "disabled", "startDate", "endDate", "minDate", "maxDate", "ranges", "autoApply", "alwaysShowCalendars", "opens", "drops", "isInvalidDate", "parentEl"], outputs: ["datesUpdated", "cancelClicked", "applyClicked"] }, { type: i4.ButtonComponent, selector: "cqa-button", inputs: ["variant", "disabled", "icon", "iconPosition", "fullWidth", "iconColor", "type", "text", "customClass", "tooltip", "tooltipPosition"], outputs: ["clicked"] }], directives: [{ type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i6.MatError, selector: "mat-error", inputs: ["id"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
416
416
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: DynamicFilterComponent, decorators: [{
417
417
  type: Component,
418
- args: [{ selector: 'cqa-dynamic-filter', changeDetection: ChangeDetectionStrategy.OnPush, host: { class: 'cqa-ui-root' }, template: "<div class=\"cqa-ui-root cqa-ui-daterange-picker\">\n <div class=\"cqa-filter cqa-mb-[28px]\" *ngIf=\"showFilterPanel\" style=\"height: auto;\">\n <!-- Bottom Layout: Current design with selectors in grid and buttons below -->\n <ng-container *ngIf=\"buttonLayout === 'bottom'\">\n <form class=\"ts-form cqa-grid lg:cqa-grid-cols-4 md:cqa-grid-cols-2 cqa-gap-4 cqa-relative\" [formGroup]=\"form\"\n (keydown.enter)=\"(false)\" novalidate=\"novalidate\">\n <ng-container *ngFor=\"let c of config\">\n <ng-container *ngIf=\"!c.hidden\">\n <div class=\"form-group cus-range-select cqa-flex cqa-flex-col cqa-gap-2 cqa-flex-shrink-0 filter-selector-width cqa-w-full\">\n <!-- Select -->\n <ng-container *ngIf=\"c.type === 'select'\">\n <cqa-dynamic-select [form]=\"form\" [config]=\"getSelectConfig(c)\"></cqa-dynamic-select>\n </ng-container>\n\n <!-- Date Range Picker -->\n <ng-container *ngIf=\"c.type === 'date-range-picker'\">\n <cqa-daterangepicker\n [label]=\"c.label\"\n [placeholder]=\"c.placeholder || 'Start Date - End Date'\"\n [disabled]=\"c.disabled || false\"\n [startDate]=\"getDateGroup(c.key)?.get('start')?.value\"\n [endDate]=\"getDateGroup(c.key)?.get('end')?.value\"\n [minDate]=\"undefined\"\n [maxDate]=\"maxDate\"\n [ranges]=\"getDaterangepickerRanges()\"\n [autoApply]=\"true\"\n [alwaysShowCalendars]=\"true\"\n [parentEl]=\"c.parentEl\"\n (datesUpdated)=\"onDaterangepickerChange($event, c.key)\"\n (applyClicked)=\"onDaterangepickerApply($event, c.key)\">\n </cqa-daterangepicker>\n <mat-error *ngIf=\"getDateGroup(c.key)?.invalid && getDateGroup(c.key)?.touched\">\n {{ getDateValidationError(c.key) }}\n </mat-error>\n </ng-container>\n </div>\n </ng-container>\n </ng-container>\n </form>\n\n <div class=\"cqa-flex cqa-justify-end cqa-items-stretch cqa-gap-2 cqa-mt-4\">\n <cqa-button variant=\"filled\" (mousedown)=\"preparePrimaryAction()\" (clicked)=\"apply()\" [disabled]=\"!hasSelectedFilters\">Apply Filter</cqa-button>\n <cqa-button variant=\"outlined\" (mousedown)=\"preparePrimaryAction()\" (clicked)=\"reset()\">Reset</cqa-button>\n </div>\n </ng-container>\n\n <!-- Right Layout: Buttons on leftmost side, selectors on rightmost side -->\n <ng-container *ngIf=\"buttonLayout === 'right'\">\n <form class=\"ts-form cqa-flex cqa-flex-wrap cqa-items-end cqa-justify-between cqa-gap-4 cqa-ui-daterange-picker cqa-relative\" [formGroup]=\"form\"\n (keydown.enter)=\"(false)\" novalidate=\"novalidate\" style=\"height: auto;\">\n <div class=\"cqa-flex cqa-items-stretch cqa-gap-2 cqa-flex-shrink-0 cqa-order-first cqa-mr-auto\">\n <cqa-button variant=\"filled\" (clicked)=\"apply()\" [disabled]=\"!hasSelectedFilters\">Apply Filter</cqa-button>\n <cqa-button variant=\"outlined\" (clicked)=\"reset()\">Reset</cqa-button>\n </div>\n <div class=\"cqa-flex cqa-flex-wrap cqa-items-end cqa-gap-4 cqa-flex-1 cqa-justify-end cqa-order-last cqa-ml-auto\">\n <ng-container *ngFor=\"let c of config\">\n <ng-container *ngIf=\"!c.hidden\">\n <div class=\"form-group cqa-flex cqa-flex-col cqa-gap-2 cqa-flex-shrink-0 filter-selector-width\">\n <!-- Select -->\n <ng-container *ngIf=\"c.type === 'select'\">\n <cqa-dynamic-select [form]=\"form\" [config]=\"getSelectConfig(c)\"></cqa-dynamic-select>\n </ng-container>\n\n <!-- Date Range (Daterangepicker) --> \n <ng-container *ngIf=\"c.type === 'date-range-picker'\">\n <cqa-daterangepicker\n [label]=\"c.label\"\n [placeholder]=\"c.placeholder || 'Start Date - End Date'\"\n [disabled]=\"c.disabled || false\"\n [startDate]=\"getDateGroup(c.key)?.get('start')?.value\"\n [endDate]=\"getDateGroup(c.key)?.get('end')?.value\"\n [minDate]=\"undefined\"\n [maxDate]=\"maxDate\"\n [ranges]=\"getDaterangepickerRanges()\"\n [autoApply]=\"true\"\n [alwaysShowCalendars]=\"true\"\n (datesUpdated)=\"onDaterangepickerChange($event, c.key)\"\n (applyClicked)=\"onDaterangepickerApply($event, c.key)\">\n </cqa-daterangepicker>\n <mat-error *ngIf=\"getDateGroup(c.key)?.invalid && getDateGroup(c.key)?.touched\">\n {{ getDateValidationError(c.key) }}\n </mat-error>\n </ng-container>\n </div>\n </ng-container>\n </ng-container>\n </div>\n </form>\n </ng-container>\n\n <!-- Left Layout: Selectors on leftmost side, buttons on rightmost side -->\n <ng-container *ngIf=\"buttonLayout === 'left'\">\n <form class=\"ts-form cqa-flex cqa-flex-wrap cqa-items-end cqa-justify-between cqa-gap-4 cqa-ui-daterange-picker cqa-relative\" [formGroup]=\"form\"\n (keydown.enter)=\"(false)\" novalidate=\"novalidate\" style=\"height: auto;\">\n <div class=\"cqa-flex cqa-flex-wrap cqa-items-end cqa-gap-4 cqa-flex-1 cqa-order-first cqa-mr-auto\">\n <ng-container *ngFor=\"let c of config\">\n <ng-container *ngIf=\"!c.hidden\">\n <div class=\"form-group cqa-flex cqa-flex-col cqa-gap-2 cqa-flex-shrink-0 filter-selector-width\">\n <!-- Select -->\n <ng-container *ngIf=\"c.type === 'select'\">\n <cqa-dynamic-select [form]=\"form\" [config]=\"getSelectConfig(c)\"></cqa-dynamic-select>\n </ng-container>\n\n <!-- Date Range (Daterangepicker) --> \n <ng-container *ngIf=\"c.type === 'date-range-picker'\">\n <cqa-daterangepicker\n [label]=\"c.label\"\n [placeholder]=\"c.placeholder || 'Start Date - End Date'\"\n [disabled]=\"c.disabled || false\"\n [startDate]=\"getDateGroup(c.key)?.get('start')?.value\"\n [endDate]=\"getDateGroup(c.key)?.get('end')?.value\"\n [minDate]=\"undefined\"\n [maxDate]=\"maxDate\"\n [ranges]=\"getDaterangepickerRanges()\"\n [autoApply]=\"true\"\n [alwaysShowCalendars]=\"true\"\n (datesUpdated)=\"onDaterangepickerChange($event, c.key)\"\n (applyClicked)=\"onDaterangepickerApply($event, c.key)\">\n </cqa-daterangepicker>\n <mat-error *ngIf=\"getDateGroup(c.key)?.invalid && getDateGroup(c.key)?.touched\">\n {{ getDateValidationError(c.key) }}\n </mat-error>\n </ng-container>\n </div>\n </ng-container>\n </ng-container>\n </div>\n <div class=\"cqa-flex cqa-items-stretch cqa-gap-2 cqa-flex-shrink-0 cqa-order-last cqa-ml-auto\">\n <cqa-button variant=\"filled\" (mousedown)=\"preparePrimaryAction()\" (clicked)=\"apply()\" [disabled]=\"!hasSelectedFilters\">Apply Filter</cqa-button>\n <cqa-button variant=\"outlined\" (mousedown)=\"preparePrimaryAction()\" (clicked)=\"reset()\">Reset</cqa-button>\n </div>\n </form>\n </ng-container>\n </div>\n</div>", styles: [] }]
418
+ args: [{ selector: 'cqa-dynamic-filter', changeDetection: ChangeDetectionStrategy.OnPush, host: { class: 'cqa-ui-root' }, template: "<div class=\"cqa-ui-root cqa-ui-daterange-picker\">\n <div class=\"cqa-filter cqa-mb-[28px]\" *ngIf=\"showFilterPanel\" style=\"height: auto;\">\n <!-- Bottom Layout: Current design with selectors in grid and buttons below -->\n <ng-container *ngIf=\"buttonLayout === 'bottom'\">\n <form class=\"ts-form cqa-grid lg:cqa-grid-cols-4 md:cqa-grid-cols-2 cqa-gap-4 cqa-relative\" [formGroup]=\"form\"\n (keydown.enter)=\"(false)\" novalidate=\"novalidate\">\n <ng-container *ngFor=\"let c of config\">\n <ng-container *ngIf=\"!c.hidden\">\n <div class=\"form-group cus-range-select cqa-flex cqa-flex-col cqa-gap-2 cqa-flex-shrink-0 filter-selector-width cqa-w-full\">\n <!-- Select -->\n <ng-container *ngIf=\"c.type === 'select'\">\n <cqa-dynamic-select [form]=\"form\" [config]=\"getSelectConfig(c)\"></cqa-dynamic-select>\n </ng-container>\n\n <!-- Date Range Picker -->\n <ng-container *ngIf=\"c.type === 'date-range-picker'\">\n <cqa-daterangepicker\n [label]=\"c.label\"\n [placeholder]=\"c.placeholder || 'Start Date - End Date'\"\n [disabled]=\"c.disabled || false\"\n [startDate]=\"getDateGroup(c.key)?.get('start')?.value\"\n [endDate]=\"getDateGroup(c.key)?.get('end')?.value\"\n [minDate]=\"undefined\"\n [maxDate]=\"maxDate\"\n [ranges]=\"getDaterangepickerRanges()\"\n [autoApply]=\"true\"\n [alwaysShowCalendars]=\"true\"\n [parentEl]=\"c.parentEl\"\n (datesUpdated)=\"onDaterangepickerChange($event, c.key)\"\n (applyClicked)=\"onDaterangepickerApply($event, c.key)\">\n </cqa-daterangepicker>\n <mat-error *ngIf=\"getDateGroup(c.key)?.invalid && getDateGroup(c.key)?.touched\">\n {{ getDateValidationError(c.key) }}\n </mat-error>\n </ng-container>\n </div>\n </ng-container>\n </ng-container>\n </form>\n\n <div class=\"cqa-flex cqa-justify-end cqa-items-stretch cqa-gap-2 cqa-mt-4\">\n <cqa-button variant=\"filled\" (mousedown)=\"preparePrimaryAction()\" (clicked)=\"apply()\" [disabled]=\"!hasSelectedFilters\">Apply Filter</cqa-button>\n <cqa-button variant=\"outlined\" (mousedown)=\"preparePrimaryAction()\" (clicked)=\"reset()\">Reset</cqa-button>\n </div>\n </ng-container>\n\n <!-- Right Layout: Buttons on leftmost side, selectors on rightmost side -->\n <ng-container *ngIf=\"buttonLayout === 'right'\">\n <form class=\"ts-form cqa-flex cqa-flex-wrap cqa-items-end cqa-justify-between cqa-gap-4 cqa-ui-daterange-picker cqa-relative\" [formGroup]=\"form\"\n (keydown.enter)=\"(false)\" novalidate=\"novalidate\" style=\"height: auto;\">\n <div class=\"cqa-flex cqa-items-stretch cqa-gap-2 cqa-flex-shrink-0 cqa-order-first cqa-mr-auto\">\n <cqa-button variant=\"filled\" (clicked)=\"apply()\" [disabled]=\"!hasSelectedFilters\">Apply Filter</cqa-button>\n <cqa-button variant=\"outlined\" (clicked)=\"reset()\">Reset</cqa-button>\n </div>\n <div class=\"cqa-flex cqa-flex-wrap cqa-items-end cqa-gap-4 cqa-flex-1 cqa-justify-end cqa-order-last cqa-ml-auto\">\n <ng-container *ngFor=\"let c of config\">\n <ng-container *ngIf=\"!c.hidden\">\n <div class=\"form-group cqa-flex cqa-flex-col cqa-gap-2 cqa-flex-shrink-0 filter-selector-width\">\n <!-- Select -->\n <ng-container *ngIf=\"c.type === 'select'\">\n <cqa-dynamic-select [form]=\"form\" [config]=\"getSelectConfig(c)\"></cqa-dynamic-select>\n </ng-container>\n\n <!-- Date Range (Daterangepicker) --> \n <ng-container *ngIf=\"c.type === 'date-range-picker'\">\n <cqa-daterangepicker\n [label]=\"c.label\"\n [placeholder]=\"c.placeholder || 'Start Date - End Date'\"\n [disabled]=\"c.disabled || false\"\n [startDate]=\"getDateGroup(c.key)?.get('start')?.value\"\n [endDate]=\"getDateGroup(c.key)?.get('end')?.value\"\n [minDate]=\"undefined\"\n [maxDate]=\"maxDate\"\n [ranges]=\"getDaterangepickerRanges()\"\n [autoApply]=\"true\"\n [alwaysShowCalendars]=\"true\"\n [parentEl]=\"c.parentEl\"\n (datesUpdated)=\"onDaterangepickerChange($event, c.key)\"\n (applyClicked)=\"onDaterangepickerApply($event, c.key)\">\n </cqa-daterangepicker>\n <mat-error *ngIf=\"getDateGroup(c.key)?.invalid && getDateGroup(c.key)?.touched\">\n {{ getDateValidationError(c.key) }}\n </mat-error>\n </ng-container>\n </div>\n </ng-container>\n </ng-container>\n </div>\n </form>\n </ng-container>\n\n <!-- Left Layout: Selectors on leftmost side, buttons on rightmost side -->\n <ng-container *ngIf=\"buttonLayout === 'left'\">\n <form class=\"ts-form cqa-flex cqa-flex-wrap cqa-items-end cqa-justify-between cqa-gap-4 cqa-ui-daterange-picker cqa-relative\" [formGroup]=\"form\"\n (keydown.enter)=\"(false)\" novalidate=\"novalidate\" style=\"height: auto;\">\n <div class=\"cqa-flex cqa-flex-wrap cqa-items-end cqa-gap-4 cqa-flex-1 cqa-order-first cqa-mr-auto\">\n <ng-container *ngFor=\"let c of config\">\n <ng-container *ngIf=\"!c.hidden\">\n <div class=\"form-group cqa-flex cqa-flex-col cqa-gap-2 cqa-flex-shrink-0 filter-selector-width\">\n <!-- Select -->\n <ng-container *ngIf=\"c.type === 'select'\">\n <cqa-dynamic-select [form]=\"form\" [config]=\"getSelectConfig(c)\"></cqa-dynamic-select>\n </ng-container>\n\n <!-- Date Range (Daterangepicker) --> \n <ng-container *ngIf=\"c.type === 'date-range-picker'\">\n <cqa-daterangepicker\n [label]=\"c.label\"\n [placeholder]=\"c.placeholder || 'Start Date - End Date'\"\n [disabled]=\"c.disabled || false\"\n [startDate]=\"getDateGroup(c.key)?.get('start')?.value\"\n [endDate]=\"getDateGroup(c.key)?.get('end')?.value\"\n [minDate]=\"undefined\"\n [maxDate]=\"maxDate\"\n [ranges]=\"getDaterangepickerRanges()\"\n [autoApply]=\"true\"\n [alwaysShowCalendars]=\"true\"\n [parentEl]=\"c.parentEl\"\n (datesUpdated)=\"onDaterangepickerChange($event, c.key)\"\n (applyClicked)=\"onDaterangepickerApply($event, c.key)\">\n </cqa-daterangepicker>\n <mat-error *ngIf=\"getDateGroup(c.key)?.invalid && getDateGroup(c.key)?.touched\">\n {{ getDateValidationError(c.key) }}\n </mat-error>\n </ng-container>\n </div>\n </ng-container>\n </ng-container>\n </div>\n <div class=\"cqa-flex cqa-items-stretch cqa-gap-2 cqa-flex-shrink-0 cqa-order-last cqa-ml-auto\">\n <cqa-button variant=\"filled\" (mousedown)=\"preparePrimaryAction()\" (clicked)=\"apply()\" [disabled]=\"!hasSelectedFilters\">Apply Filter</cqa-button>\n <cqa-button variant=\"outlined\" (mousedown)=\"preparePrimaryAction()\" (clicked)=\"reset()\">Reset</cqa-button>\n </div>\n </form>\n </ng-container>\n </div>\n</div>", styles: [] }]
419
419
  }], ctorParameters: function () { return [{ type: i1.FormBuilder }]; }, propDecorators: { config: [{
420
420
  type: Input
421
421
  }], model: [{
@@ -438,4 +438,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
438
438
  type: ViewChildren,
439
439
  args: [DynamicSelectFieldComponent]
440
440
  }] } });
441
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1maWx0ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9maWx0ZXJzL2R5bmFtaWMtZmlsdGVyL2R5bmFtaWMtZmlsdGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvZmlsdGVycy9keW5hbWljLWZpbHRlci9keW5hbWljLWZpbHRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQWEsTUFBTSxFQUFpQixZQUFZLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFDbkosT0FBTyxFQUFlLFdBQVcsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUdyRSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxxREFBcUQsQ0FBQzs7Ozs7Ozs7QUFvRGxHLE1BQU0sT0FBTyxzQkFBc0I7SUFrQmpDLFlBQTZCLEVBQWU7UUFBZixPQUFFLEdBQUYsRUFBRSxDQUFhO1FBakJuQyxXQUFNLEdBQXdCLEVBQUUsQ0FBQztRQUNqQyxVQUFLLEdBQXdCLEVBQUUsQ0FBQztRQUNoQyxvQkFBZSxHQUFZLElBQUksQ0FBQztRQUNoQyxpQkFBWSxHQUFnQyxRQUFRLENBQUM7UUFDcEQsbUJBQWMsR0FBRyxJQUFJLFlBQVksRUFBdUIsQ0FBQztRQUN6RCxtQkFBYyxHQUFHLElBQUksWUFBWSxFQUF1QixDQUFDO1FBQ3pELGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUN2Qyx1QkFBa0IsR0FBRyxJQUFJLFlBQVksRUFBdUIsQ0FBQztRQUM3RCx1QkFBa0IsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBRXhELFNBQUksR0FBYyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNwQyxZQUFPLEdB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O3NCQUF2QixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csa0JBQWtCO3NCQUEzQixNQUFNO2dCQUNHLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFPb0MsZ0JBQWdCO3NCQUExRCxZQUFZO3VCQUFDLDJCQUEyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uQ2hhbmdlcywgT3V0cHV0LCBTaW1wbGVDaGFuZ2VzLCBWaWV3Q2hpbGRyZW4sIFF1ZXJ5TGlzdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Db250cm9sLCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBNYXREYXRlcGlja2VySW5wdXRFdmVudCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RhdGVwaWNrZXInO1xuaW1wb3J0IHsgRHluYW1pY1NlbGVjdEZpZWxkQ29uZmlnIH0gZnJvbSAnLi4vLi4vZHluYW1pYy1zZWxlY3QvZHluYW1pYy1zZWxlY3QtZmllbGQuY29tcG9uZW50JztcbmltcG9ydCB7IER5bmFtaWNTZWxlY3RGaWVsZENvbXBvbmVudCB9IGZyb20gJy4uLy4uL2R5bmFtaWMtc2VsZWN0L2R5bmFtaWMtc2VsZWN0LWZpZWxkLmNvbXBvbmVudCc7XG5cbnR5cGUgRmlsdGVyVHlwZSA9ICdzZWxlY3QnIHwgJ2RhdGUtcmFuZ2UtcGlja2VyJztcblxuZXhwb3J0IGludGVyZmFjZSBEeW5hbWljRmlsdGVyT3B0aW9uIHtcbiAgaWQ/OiBudW1iZXIgfCBzdHJpbmc7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHZhbHVlPzogYW55O1xuICBsYWJlbD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEeW5hbWljRmlsdGVySXRlbSB7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nO1xuICB0eXBlOiBGaWx0ZXJUeXBlO1xuICBrZXk6IHN0cmluZztcbiAgb3B0aW9ucz86IER5bmFtaWNGaWx0ZXJPcHRpb25bXTtcbiAgbXVsdGlwbGU/OiBib29sZWFuO1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIGhpZGRlbj86IGJvb2xlYW47XG4gIHNlYXJjaGFibGU/OiBib29sZWFuO1xuICBvcHRpb25TdHlsZT86ICdjaGVja21hcmsnIHwgJ2NoZWNrYm94JztcbiAgc2hvd1NlbGVjdEFsbD86IGJvb2xlYW47XG4gIHNlbGVjdEFsbExhYmVsPzogc3RyaW5nO1xuICBzZWxlY3RlZFZhbHVlPzogYW55IHwgYW55W107XG4gIC8vIFNlcnZlci1kcml2ZW4gc2VsZWN0IHN1cHBvcnQgKHBhc3N0aHJvdWdoIHRvIGNxYS1keW5hbWljLXNlbGVjdClcbiAgc2VydmVyU2VhcmNoPzogYm9vbGVhbjtcbiAgLyoqIE1vcmUgcmVzdWx0cyBhdmFpbGFibGUgc2VydmVyLXNpZGUgZm9yIGluZmluaXRlIHNjcm9sbCAqL1xuICBoYXNNb3JlPzogYm9vbGVhbjtcbiAgLyoqIEV4dGVybmFsIGxvYWRpbmcgc3RhdGUgZm9yIGFzeW5jIGZldGNoaW5nICovXG4gIGlzTG9hZGluZz86IGJvb2xlYW47XG4gIC8qKiBDYWxsYmFjayB3aGVuIHNlYXJjaCB0ZXh0IGNoYW5nZXMgKHNlcnZlciBtb2RlKSAqL1xuICBvblNlYXJjaD86IChxdWVyeTogc3RyaW5nKSA9PiB2b2lkO1xuICAvKiogQ2FsbGJhY2sgd2hlbiBtb3JlIGRhdGEgaXMgcmVxdWVzdGVkIChpbmZpbml0ZSBzY3JvbGwpICovXG4gIG9uTG9hZE1vcmU/OiAocXVlcnk/OiBzdHJpbmcpID0+IHZvaWQ7XG4gIHNlbGVjdGVkU3RhcnREYXRlPzogRGF0ZSB8IHN0cmluZztcbiAgc2VsZWN0ZWRFbmREYXRlPzogRGF0ZSB8IHN0cmluZztcbiAgb25EYXRlQ2hhbmdlPzogKHZhbHVlOiB7IHN0YXJ0OiBEYXRlIHwgbnVsbDsgZW5kOiBEYXRlIHwgbnVsbCB9LCBldmVudD86IE1hdERhdGVwaWNrZXJJbnB1dEV2ZW50PERhdGU+IHwgRXZlbnQpID0+IHZvaWQ7XG4gIHBhcmVudEVsPzogc3RyaW5nIHwgSFRNTEVsZW1lbnQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRHluYW1pY0ZpbHRlclZhbHVlcyB7XG4gIFtrZXk6IHN0cmluZ106IGFueTtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY3FhLWR5bmFtaWMtZmlsdGVyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2R5bmFtaWMtZmlsdGVyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGhvc3Q6IHsgY2xhc3M6ICdjcWEtdWktcm9vdCcgfVxufSlcbmV4cG9ydCBjbGFzcyBEeW5hbWljRmlsdGVyQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzIHtcbiAgQElucHV0KCkgY29uZmlnOiBEeW5hbWljRmlsdGVySXRlbVtdID0gW107XG4gIEBJbnB1dCgpIG1vZGVsOiBEeW5hbWljRmlsdGVyVmFsdWVzID0ge307XG4gIEBJbnB1dCgpIHNob3dGaWx0ZXJQYW5lbDogYm9vbGVhbiA9IHRydWU7XG4gIEBJbnB1dCgpIGJ1dHRvbkxheW91dDogJ2xlZnQnIHwgJ3JpZ2h0JyB8ICdib3R0b20nID0gJ2JvdHRvbSc7XG4gIEBPdXRwdXQoKSBmaWx0ZXJzQXBwbGllZCA9IG5ldyBFdmVudEVtaXR0ZXI8RHluYW1pY0ZpbHRlclZhbHVlcz4oKTtcbiAgQE91dHB1dCgpIGZpbHRlcnNDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxEeW5hbWljRmlsdGVyVmFsdWVzPigpO1xuICBAT3V0cHV0KCkgcmVzZXRBY3Rpb24gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSBvbkFwcGx5RmlsdGVyQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPER5bmFtaWNGaWx0ZXJWYWx1ZXM+KCk7XG4gIEBPdXRwdXQoKSBvblJlc2V0RmlsdGVyQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgZm9ybTogRm9ybUdyb3VwID0gdGhpcy5mYi5ncm91cCh7fSk7XG4gIG1heERhdGUgPSBuZXcgRGF0ZSgpO1xuICBzZWFyY2hUZXh0QnlLZXk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgcHJpdmF0ZSBzZWxlY3RPdXRzaWRlQ2xlYW51cCA9IG5ldyBNYXA8YW55LCAoKSA9PiB2b2lkPigpO1xuICBoYXNTZWxlY3RlZEZpbHRlcnMgPSBmYWxzZTtcbiAgQFZpZXdDaGlsZHJlbihEeW5hbWljU2VsZWN0RmllbGRDb21wb25lbnQpIHNlbGVjdENvbXBvbmVudHM/OiBRdWVyeUxpc3Q8RHluYW1pY1NlbGVjdEZpZWxkQ29tcG9uZW50PjtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGZiOiBGb3JtQnVpbGRlcikge1xuICAgIC8vIEVuc3VyZSBtYXhEYXRlIGlzIHRoZSBlbmQgb2YgdG9kYXksIHNvIGFueSBmdXR1cmUgZGF0ZXMgYXJlIGRpc2FsbG93ZWRcbiAgICB0aGlzLm1heERhdGUgPSB0aGlzLmVuZE9mRGF5KG5ldyBEYXRlKCkpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzWydjb25maWcnXSB8fCBjaGFuZ2VzWydtb2RlbCddKSB7XG4gICAgICB0aGlzLmJ1aWxkRm9ybSgpO1xuICAgIH1cbiAgfVxuXG4gIG9uRGF0ZUNoYW5nZShldmVudDogTWF0RGF0ZXBpY2tlcklucHV0RXZlbnQ8RGF0ZT4gfCBFdmVudCwga2V5OiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmludm9rZURhdGVSYW5nZUNoYW5nZShrZXksIGV2ZW50KTtcbiAgfVxuXG4gIC8vIE5HWCBEYXRlUmFuZ2VQaWNrZXIgaW50ZWdyYXRpb25cbiAgbmd4RGF0ZVJhbmdlQnlLZXk6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcbiAgbmd4UmFuZ2VzOiBhbnkgPSB7fTsgLy8gVXNpbmcgJ2FueScgdG8gYXZvaWQgRGF5anMgdHlwZSBtaXNtYXRjaCAtIGxpYnJhcnkgYWNjZXB0cyBEYXRlIG9iamVjdHMgYXQgcnVudGltZVxuICBuZ3hMb2NhbGUgPSB7IGN1c3RvbVJhbmdlTGFiZWw6ICdDdXN0b20gcmFuZ2UnIH07XG4gIC8vIERpc2FibGUgYWxsIGRhdGVzIGFmdGVyIHRvZGF5IGluIHRoZSBuZ3ggZGF0ZXBpY2tlclxuICBkaXNhYmxlRnV0dXJlRGF0ZXMgPSAobTogYW55KTogYm9vbGVhbiA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGQ6IERhdGUgPSBtICYmIHR5cGVvZiBtLnRvRGF0ZSA9PT0gJ2Z1bmN0aW9uJyA/IG0udG9EYXRlKCkgOiBuZXcgRGF0ZShtKTtcbiAgICAgIHJldHVybiBkLmdldFRpbWUoKSA+IHRoaXMubWF4RGF0ZS5nZXRUaW1lKCk7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9O1xuICBvbk5neERhdGVzVXBkYXRlZChlOiBhbnksIGtleTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgZ3JvdXAgPSB0aGlzLmdldERhdGVHcm91cChrZXkpO1xuICAgIGlmICghZ3JvdXApIHJldHVybjtcbiAgICBjb25zdCBjbGFtcCA9IChkOiBEYXRlIHwgbnVsbCkgPT4gKGQgJiYgZC5nZXRUaW1lKCkgPiB0aGlzLm1heERhdGUuZ2V0VGltZSgpID8gdGhpcy5tYXhEYXRlIDogZCk7XG4gICAgY29uc3Qgc3RhcnRSYXcgPSBlPy5zdGFydERhdGUgPyAodHlwZW9mIGUuc3RhcnREYXRlLnRvRGF0ZSA9PT0gJ2Z1bmN0aW9uJyA/IGUuc3RhcnREYXRlLnRvRGF0ZSgpIDogbmV3IERhdGUoZS5zdGFydERhdGUpKSA6IG51bGw7XG4gICAgY29uc3QgZW5kUmF3ID0gZT8uZW5kRGF0ZSA/ICh0eXBlb2YgZS5lbmREYXRlLnRvRGF0ZSA9PT0gJ2Z1bmN0aW9uJyA/IGUuZW5kRGF0ZS50b0RhdGUoKSA6IG5ldyBEYXRlKGUuZW5kRGF0ZSkpIDogbnVsbDtcbiAgICBjb25zdCBzdGFydCA9IGNsYW1wKHN0YXJ0UmF3KTtcbiAgICBjb25zdCBlbmQgPSBjbGFtcChlbmRSYXcpO1xuICAgIGdyb3VwLnBhdGNoVmFsdWUoeyBzdGFydCwgZW5kIH0sIHsgZW1pdEV2ZW50OiB0cnVlIH0pO1xuICAgIGNvbnN0IHNlcmlhbGl6ZWQgPSB0aGlzLnNlcmlhbGl6ZSgpO1xuICAgIHRoaXMuaGFzU2VsZWN0ZWRGaWx0ZXJzID0gT2JqZWN0LmtleXMoc2VyaWFsaXplZCkubGVuZ3RoID4gMDtcbiAgICBpZiAoc3RhcnQgJiYgZW5kICYmIGdyb3VwLnZhbGlkKSB7XG4gICAgICB0aGlzLmFwcGx5KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZmlsdGVyc0NoYW5nZWQuZW1pdChzZXJpYWxpemVkKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkRm9ybSgpOiB2b2lkIHtcbiAgICBjb25zdCBjdHJsczogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuICAgICh0aGlzLmNvbmZpZyB8fCBbXSkuZm9yRWFjaChjID0+IHtcbiAgICAgIGlmIChjLmhpZGRlbikgcmV0dXJuO1xuICAgICAgaWYgKGMudHlwZSA9PT0gJ2RhdGUtcmFuZ2UtcGlja2VyJykge1xuICAgICAgICBjb25zdCBpbml0aWFsUmFuZ2UgPSB0aGlzLmdldEluaXRpYWxEYXRlUmFuZ2VWYWx1ZShjKTtcbiAgICAgICAgY3RybHNbYy5rZXldID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICAgICAgc3RhcnQ6IG5ldyBGb3JtQ29udHJvbChpbml0aWFsUmFuZ2Uuc3RhcnQpLFxuICAgICAgICAgIGVuZDogbmV3IEZvcm1Db250cm9sKGluaXRpYWxSYW5nZS5lbmQpLFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGluaXRpYWwgPSB0aGlzLnJlc29sdmVJbml0aWFsU2VsZWN0VmFsdWUoYyk7XG4gICAgICAgIGlmIChjLm11bHRpcGxlKSB7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSBBcnJheS5pc0FycmF5KGluaXRpYWwpID8gaW5pdGlhbCA6IChpbml0aWFsICE9IG51bGwgPyBbaW5pdGlhbF0gOiBbXSk7XG4gICAgICAgICAgY3RybHNbYy5rZXldID0gbmV3IEZvcm1Db250cm9sKHZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjdHJsc1tjLmtleV0gPSBuZXcgRm9ybUNvbnRyb2wodGhpcy5jb2VyY2VUb1NpbmdsZVZhbHVlKGluaXRpYWwpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuZm9ybSA9IHRoaXMuZmIuZ3JvdXAoY3RybHMpO1xuICAgIC8vIGluaXRpYWxpemUgYXBwbHkgYnV0dG9uIHN0YXRlIGJhc2VkIG9uIGluaXRpYWwgdmFsdWVzXG4gICAgdGhpcy5oYXNTZWxlY3RlZEZpbHRlcnMgPSBPYmplY3Qua2V5cyh0aGlzLnNlcmlhbGl6ZSgpKS5sZW5ndGggPiAwO1xuICAgIC8vIGJ1aWxkIGNvbW1vbiByYW5nZXMgZm9yIG5neCBkYXRlcGlja2VyXG4gICAgdGhpcy5uZ3hSYW5nZXMgPSB0aGlzLmJ1aWxkTmd4UmFuZ2VzKCk7XG4gICAgdGhpcy5mb3JtLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgY29uc3Qgc2VyaWFsaXplZCA9IHRoaXMuc2VyaWFsaXplKCk7XG4gICAgICB0aGlzLmhhc1NlbGVjdGVkRmlsdGVycyA9IE9iamVjdC5rZXlzKHNlcmlhbGl6ZWQpLmxlbmd0aCA+IDA7XG4gICAgICB0aGlzLmZpbHRlcnNDaGFuZ2VkLmVtaXQoc2VyaWFsaXplZCk7XG4gICAgfSk7XG4gIH1cblxuICBvblNlbGVjdE9wZW5lZENoYW5nZShvcGVuZWQ6IGJvb2xlYW4sIHNlbGVjdDogYW55KTogdm9pZCB7XG4gICAgaWYgKG9wZW5lZCkge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IG9uRG9jRG93biA9IChlOiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICAgICAgY29uc3QgcGFuZWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuY2RrLW92ZXJsYXktcGFuZSAubWF0LXNlbGVjdC1wYW5lbCcpIGFzIEhUTUxFbGVtZW50IHwgbnVsbDtcbiAgICAgICAgICBjb25zdCB0YXJnZXQgPSBlLnRhcmdldCBhcyBOb2RlIHwgbnVsbDtcbiAgICAgICAgICBjb25zdCBvcmlnaW5FbCA9IChzZWxlY3Q/Ll9lbGVtZW50UmVmPy5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50KSB8fCBudWxsO1xuICAgICAgICAgIGNvbnN0IGluc2lkZVBhbmVsID0gISEocGFuZWwgJiYgdGFyZ2V0ICYmIHBhbmVsLmNvbnRhaW5zKHRhcmdldCkpO1xuICAgICAgICAgIGNvbnN0IGluc2lkZU9yaWdpbiA9ICEhKG9yaWdpbkVsICYmIHRhcmdldCAmJiBvcmlnaW5FbC5jb250YWlucyh0YXJnZXQpKTtcbiAgICAgICAgICBpZiAoIWluc2lkZVBhbmVsICYmICFpbnNpZGVPcmlnaW4pIHtcbiAgICAgICAgICAgIHNlbGVjdC5jbG9zZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgb25Eb2NEb3duLCB0cnVlKTtcbiAgICAgICAgdGhpcy5zZWxlY3RPdXRzaWRlQ2xlYW51cC5zZXQoc2VsZWN0LCAoKSA9PiBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBvbkRvY0Rvd24sIHRydWUpKTtcbiAgICAgIH0sIDApO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBjbGVhbnVwID0gdGhpcy5zZWxlY3RPdXRzaWRlQ2xlYW51cC5nZXQoc2VsZWN0KTtcbiAgICAgIGlmIChjbGVhbnVwKSBjbGVhbnVwKCk7XG4gICAgICB0aGlzLnNlbGVjdE91dHNpZGVDbGVhbnVwLmRlbGV0ZShzZWxlY3QpO1xuICAgIH1cbiAgfVxuXG4gIG9uU2VhcmNoKGtleTogc3RyaW5nLCB0ZXh0OiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnNlYXJjaFRleHRCeUtleVtrZXldID0gKHRleHQgfHwgJycpLnRvTG93ZXJDYXNlKCk7XG4gIH1cblxuICBmaWx0ZXJlZE9wdGlvbnMoaXRlbTogRHluYW1pY0ZpbHRlckl0ZW0pOiBEeW5hbWljRmlsdGVyT3B0aW9uW10ge1xuICAgIGNvbnN0IG9wdGlvbnMgPSBpdGVtPy5vcHRpb25zIHx8IFtdO1xuICAgIGNvbnN0IHEgPSAodGhpcy5zZWFyY2hUZXh0QnlLZXlbaXRlbS5rZXldIHx8ICcnKS50cmltKCk7XG4gICAgaWYgKCFxKSByZXR1cm4gb3B0aW9ucztcbiAgICByZXR1cm4gb3B0aW9ucy5maWx0ZXIob3B0ID0+IHtcbiAgICAgIGNvbnN0IG5hbWUgPSAob3B0Lm5hbWUgPz8gb3B0LmxhYmVsID8/IFN0cmluZyhvcHQudmFsdWUgPz8gJycpKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgcmV0dXJuIG5hbWUuaW5jbHVkZXMocSk7XG4gICAgfSk7XG4gIH1cblxuICBnZXREYXRlR3JvdXAoa2V5OiBzdHJpbmcpOiBGb3JtR3JvdXAge1xuICAgIHJldHVybiB0aGlzLmZvcm0uZ2V0KGtleSkgYXMgRm9ybUdyb3VwO1xuICB9XG5cbiAgZ2V0U2VsZWN0Q29uZmlnKGl0ZW06IER5bmFtaWNGaWx0ZXJJdGVtKTogRHluYW1pY1NlbGVjdEZpZWxkQ29uZmlnIHtcbiAgICByZXR1cm4ge1xuICAgICAga2V5OiBpdGVtLmtleSxcbiAgICAgIGxhYmVsOiBpdGVtLmxhYmVsLFxuICAgICAgcGxhY2Vob2xkZXI6IGl0ZW0ucGxhY2Vob2xkZXIsXG4gICAgICBkaXNhYmxlZDogaXRlbS5kaXNhYmxlZCxcbiAgICAgIG11bHRpcGxlOiBpdGVtLm11bHRpcGxlLFxuICAgICAgc2VhcmNoYWJsZTogaXRlbS5zZWFyY2hhYmxlLFxuICAgICAgb3B0aW9uU3R5bGU6IGl0ZW0ub3B0aW9uU3R5bGUsXG4gICAgICBzaG93U2VsZWN0QWxsOiBpdGVtLnNob3dTZWxlY3RBbGwsXG4gICAgICBzZWxlY3RBbGxMYWJlbDogaXRlbS5zZWxlY3RBbGxMYWJlbCxcbiAgICAgIHNlbGVjdGVkVmFsdWU6IGl0ZW0uc2VsZWN0ZWRWYWx1ZSxcbiAgICAgIHNlcnZlclNlYXJjaDogaXRlbS5zZXJ2ZXJTZWFyY2gsXG4gICAgICBoYXNNb3JlOiBpdGVtLmhhc01vcmUsXG4gICAgICBpc0xvYWRpbmc6IGl0ZW0uaXNMb2FkaW5nLFxuICAgICAgb25TZWFyY2g6IGl0ZW0ub25TZWFyY2gsXG4gICAgICBvbkxvYWRNb3JlOiBpdGVtLm9uTG9hZE1vcmUsXG4gICAgICBvcHRpb25zOiBpdGVtLm9wdGlvbnMgfHwgW11cbiAgICB9O1xuICB9XG5cbiAgYXBwbHkoKTogdm9pZCB7XG4gICAgdGhpcy5jbG9zZUFsbE9wZW5TZWxlY3RzKCk7XG4gICAgY29uc3QgZmlsdGVyVmFsdWVzID0gdGhpcy5zZXJpYWxpemUoKTtcbiAgICB0aGlzLmZpbHRlcnNBcHBsaWVkLmVtaXQoZmlsdGVyVmFsdWVzKTtcbiAgICB0aGlzLm9uQXBwbHlGaWx0ZXJDbGljay5lbWl0KGZpbHRlclZhbHVlcyk7XG4gIH1cblxuICByZXNldCgpOiB2b2lkIHtcbiAgICB0aGlzLmNsb3NlQWxsT3BlblNlbGVjdHMoKTtcbiAgICBPYmplY3Qua2V5cyh0aGlzLmZvcm0uY29udHJvbHMpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIGNvbnN0IGN0cmwgPSB0aGlzLmZvcm0uZ2V0KGtleSk7XG4gICAgICBpZiAoY3RybCBpbnN0YW5jZW9mIEZvcm1Hcm91cCkge1xuICAgICAgICBjdHJsLmdldCgnc3RhcnQnKT8uc2V0VmFsdWUodW5kZWZpbmVkKTtcbiAgICAgICAgY3RybC5nZXQoJ2VuZCcpPy5zZXRWYWx1ZSh1bmRlZmluZWQpO1xuICAgICAgICB0aGlzLmludm9rZURhdGVSYW5nZUNoYW5nZShrZXkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY3RybD8uc2V0VmFsdWUodW5kZWZpbmVkKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLnJlc2V0QWN0aW9uLmVtaXQoKTtcbiAgICB0aGlzLm9uUmVzZXRGaWx0ZXJDbGljay5lbWl0KCk7XG4gICAgY29uc3Qgc2VyaWFsaXplZCA9IHRoaXMuc2VyaWFsaXplKCk7XG4gICAgdGhpcy5oYXNTZWxlY3RlZEZpbHRlcnMgPSBPYmplY3Qua2V5cyhzZXJpYWxpemVkKS5sZW5ndGggPiAwO1xuICAgIHRoaXMuZmlsdGVyc0NoYW5nZWQuZW1pdChzZXJpYWxpemVkKTtcbiAgfVxuXG4gIC8qKiBDbG9zZSBhbnkgb3BlbiBNYXRTZWxlY3QgcGFuZWxzIGJlZm9yZSBwcmltYXJ5IGFjdGlvbnMgdG8gYXZvaWQgZG91YmxlLWNsaWNrIGlzc3VlcyAqL1xuICBwcmVwYXJlUHJpbWFyeUFjdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLmNsb3NlQWxsT3BlblNlbGVjdHMoKTtcbiAgfVxuXG4gIHByaXZhdGUgY2xvc2VBbGxPcGVuU2VsZWN0cygpOiB2b2lkIHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5zZWxlY3RDb21wb25lbnRzPy5mb3JFYWNoKGMgPT4gYy5jbG9zZVBhbmVsKCkpO1xuICAgIH0gY2F0Y2gge31cbiAgfVxuXG4gIHByaXZhdGUgc2VyaWFsaXplKCk6IER5bmFtaWNGaWx0ZXJWYWx1ZXMge1xuICAgIGNvbnN0IHJlc3VsdDogRHluYW1pY0ZpbHRlclZhbHVlcyA9IHt9O1xuICAgICh0aGlzLmNvbmZpZyB8fCBbXSkuZm9yRWFjaChjID0+IHtcbiAgICAgIGNvbnN0IGN0cmwgPSB0aGlzLmZvcm0uZ2V0KGMua2V5KTtcbiAgICAgIGlmICghY3RybCkgcmV0dXJuO1xuICAgICAgbGV0IHZhbDogYW55ID0gY3RybCBpbnN0YW5jZW9mIEZvcm1Hcm91cCA/IChjdHJsIGFzIEZvcm1Hcm91cCkuZ2V0UmF3VmFsdWUoKSA6IGN0cmwudmFsdWU7XG4gICAgICBpZiAoYy50eXBlID09PSAnZGF0ZS1yYW5nZS1waWNrZXInKSB7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gdmFsPy5zdGFydDsgY29uc3QgZW5kID0gdmFsPy5lbmQ7XG4gICAgICAgIGlmIChzdGFydCB8fCBlbmQpIHJlc3VsdFtjLmtleV0gPSB7IHN0YXJ0LCBlbmQgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh2YWwgIT09IHVuZGVmaW5lZCAmJiB2YWwgIT09IG51bGwgJiYgKEFycmF5LmlzQXJyYXkodmFsKSA/IHZhbC5sZW5ndGggPiAwIDogdmFsICE9PSAnJykpIHtcbiAgICAgICAgICByZXN1bHRbYy5rZXldID0gdmFsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHByaXZhdGUgcmVzb2x2ZUluaXRpYWxTZWxlY3RWYWx1ZShpdGVtOiBEeW5hbWljRmlsdGVySXRlbSk6IGFueSB7XG4gICAgaWYgKHRoaXMubW9kZWwgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMubW9kZWwsIGl0ZW0ua2V5KSkge1xuICAgICAgcmV0dXJuIHRoaXMubW9kZWxbaXRlbS5rZXldO1xuICAgIH1cbiAgICBpZiAoaXRlbS5zZWxlY3RlZFZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBpdGVtLnNlbGVjdGVkVmFsdWU7XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBwcml2YXRlIGNvZXJjZVRvU2luZ2xlVmFsdWUodmFsdWU6IGFueSk6IGFueSB7XG4gICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICByZXR1cm4gdmFsdWUubGVuZ3RoID8gdmFsdWVbMF0gOiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0SW5pdGlhbERhdGVSYW5nZVZhbHVlKGl0ZW06IER5bmFtaWNGaWx0ZXJJdGVtKTogeyBzdGFydDogRGF0ZSB8IG51bGw7IGVuZDogRGF0ZSB8IG51bGwgfSB7XG4gICAgY29uc3QgbW9kZWxWYWx1ZSA9IHRoaXMubW9kZWw/LltpdGVtLmtleV07XG4gICAgY29uc3Qgc3RhcnRTb3VyY2UgPSBtb2RlbFZhbHVlPy5zdGFydCA/PyBpdGVtLnNlbGVjdGVkU3RhcnREYXRlID8/IG51bGw7XG4gICAgY29uc3QgZW5kU291cmNlID0gbW9kZWxWYWx1ZT8uZW5kID8/IGl0ZW0uc2VsZWN0ZWRFbmREYXRlID8/IG51bGw7XG4gICAgY29uc3Qgc3RhcnQgPSB0aGlzLm5vcm1hbGl6ZURhdGVWYWx1ZShzdGFydFNvdXJjZSk7XG4gICAgY29uc3QgZW5kID0gdGhpcy5ub3JtYWxpemVEYXRlVmFsdWUoZW5kU291cmNlKTtcbiAgICBjb25zdCBjbGFtcCA9IChkOiBEYXRlIHwgbnVsbCkgPT4gKGQgJiYgZC5nZXRUaW1lKCkgPiB0aGlzLm1heERhdGUuZ2V0VGltZSgpID8gdGhpcy5tYXhEYXRlIDogZCk7XG4gICAgcmV0dXJuIHsgc3RhcnQ6IGNsYW1wKHN0YXJ0KSwgZW5kOiBjbGFtcChlbmQpIH07XG4gIH1cblxuICBwcml2YXRlIG5vcm1hbGl6ZURhdGVWYWx1ZSh2YWx1ZTogYW55KTogRGF0ZSB8IG51bGwge1xuICAgIGlmICghdmFsdWUpIHJldHVybiBudWxsO1xuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUgJiYgIWlzTmFOKHZhbHVlLmdldFRpbWUoKSkpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgY29uc3QgcGFyc2VkID0gbmV3IERhdGUodmFsdWUpO1xuICAgIHJldHVybiBpc05hTihwYXJzZWQuZ2V0VGltZSgpKSA/IG51bGwgOiBwYXJzZWQ7XG4gIH1cblxuICBwcml2YXRlIGludm9rZURhdGVSYW5nZUNoYW5nZShrZXk6IHN0cmluZywgZXZlbnQ/OiBNYXREYXRlcGlja2VySW5wdXRFdmVudDxEYXRlPiB8IEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgaXRlbSA9ICh0aGlzLmNvbmZpZyB8fCBbXSkuZmluZChjZmcgPT4gY2ZnLmtleSA9PT0ga2V5KTtcbiAgICBpZiAoIWl0ZW0/Lm9uRGF0ZUNoYW5nZSkgcmV0dXJuO1xuICAgIGNvbnN0IGRhdGVHcm91cCA9IHRoaXMuZ2V0RGF0ZUdyb3VwKGtleSk7XG4gICAgaWYgKCFkYXRlR3JvdXApIHJldHVybjtcbiAgICBjb25zdCB7IHN0YXJ0LCBlbmQgfSA9IGRhdGVHcm91cC5nZXRSYXdWYWx1ZSgpIHx8IHt9O1xuICAgIGl0ZW0ub25EYXRlQ2hhbmdlKFxuICAgICAge1xuICAgICAgICBzdGFydDogdGhpcy5ub3JtYWxpemVEYXRlVmFsdWUoc3RhcnQpLFxuICAgICAgICBlbmQ6IHRoaXMubm9ybWFsaXplRGF0ZVZhbHVlKGVuZCksXG4gICAgICB9LFxuICAgICAgZXZlbnRcbiAgICApO1xuICB9XG5cbiAgLy8gTWF0IGRhdGUgcmFuZ2UgcGlja2VyIG92ZXJsYXkgcHJlc2V0IGhlbHBlcnNcbiAgYXBwbHlQcmVzZXRUb0dyb3VwKGtleTogc3RyaW5nLCBwcmVzZXRLZXk6ICd0b2RheScgfCAnbGFzdDdkYXlzJyB8ICdsYXN0MzBkYXlzJyB8ICdsYXN0OTBkYXlzJyB8ICdsYXN0M21vbnRocycgfCAndGhpc21vbnRoJyB8ICdsYXN0bW9udGgnKTogdm9pZCB7XG4gICAgY29uc3QgZGF0ZUdyb3VwID0gdGhpcy5nZXREYXRlR3JvdXAoa2V5KTtcbiAgICBpZiAoIWRhdGVHcm91cCkgcmV0dXJuO1xuICAgIGNvbnN0IHsgc3RhcnQsIGVuZCB9ID0gdGhpcy5nZXRQcmVzZXREYXRlcyhwcmVzZXRLZXkpO1xuICAgIGRhdGVHcm91cC5wYXRjaFZhbHVlKHsgc3RhcnQsIGVuZCB9KTtcbiAgICB0aGlzLmZpbHRlcnNDaGFuZ2VkLmVtaXQodGhpcy5zZXJpYWxpemUoKSk7XG4gICAgdGhpcy5pbnZva2VEYXRlUmFuZ2VDaGFuZ2Uoa2V5KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0UHJlc2V0RGF0ZXMocHJlc2V0S2V5OiAndG9kYXknIHwgJ2xhc3Q3ZGF5cycgfCAnbGFzdDMwZGF5cycgfCAnbGFzdDkwZGF5cycgfCAnbGFzdDNtb250aHMnIHwgJ3RoaXNtb250aCcgfCAnbGFzdG1vbnRoJyk6IHsgc3RhcnQ6IERhdGU7IGVuZDogRGF0ZSB9IHtcbiAgICBjb25zdCB0b2RheSA9IG5ldyBEYXRlKCk7XG4gICAgY29uc3QgY2xhbXBUb0VuZE9mVG9kYXkgPSAoZDogRGF0ZSkgPT4geyBjb25zdCBuZCA9IG5ldyBEYXRlKGQpOyBuZC5zZXRIb3VycygyMyw1OSw1OSw5OTkpOyByZXR1cm4gbmQ7IH07XG4gICAgc3dpdGNoIChwcmVzZXRLZXkpIHtcbiAgICAgIGNhc2UgJ3RvZGF5JzpcbiAgICAgICAgcmV0dXJuIHsgc3RhcnQ6IHRvZGF5LCBlbmQ6IHRvZGF5IH07XG4gICAgICBjYXNlICdsYXN0N2RheXMnOiB7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gbmV3IERhdGUoKTsgc3RhcnQuc2V0RGF0ZShzdGFydC5nZXREYXRlKCkgLSA2KTtcbiAgICAgICAgcmV0dXJuIHsgc3RhcnQsIGVuZDogdG9kYXkgfTtcbiAgICAgIH1cbiAgICAgIGNhc2UgJ2xhc3QzMGRheXMnOiB7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gbmV3IERhdGUoKTsgc3RhcnQuc2V0RGF0ZShzdGFydC5nZXREYXRlKCkgLSAyOSk7XG4gICAgICAgIHJldHVybiB7IHN0YXJ0LCBlbmQ6IHRvZGF5IH07XG4gICAgICB9XG4gICAgICBjYXNlICdsYXN0OTBkYXlzJzoge1xuICAgICAgICBjb25zdCBzdGFydCA9IG5ldyBEYXRlKCk7IHN0YXJ0LnNldERhdGUoc3RhcnQuZ2V0RGF0ZSgpIC0gODkpO1xuICAgICAgICByZXR1cm4geyBzdGFydCwgZW5kOiB0b2RheSB9O1xuICAgICAgfVxuICAgICAgY2FzZSAnbGFzdDNtb250aHMnOiB7XG4gICAgICAgIC8vIFN0YXJ0IGZyb20gdGhlIGZpcnN0IGRheSBvZiB0aGUgbW9udGggdHdvIG1vbnRocyBhZ28gKGNvdmVycyBjdXJyZW50ICsgcHJldmlvdXMgMiBtb250aHMpLlxuICAgICAgICBjb25zdCBzdGFydCA9IG5ldyBEYXRlKHRvZGF5LmdldEZ1bGxZZWFyKCksIHRvZGF5LmdldE1vbnRoKCkgLSAyLCAxKTtcbiAgICAgICAgcmV0dXJuIHsgc3RhcnQsIGVuZDogdG9kYXkgfTtcbiAgICAgIH1cbiAgICAgIGNhc2UgJ3RoaXNtb250aCc6IHtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBuZXcgRGF0ZSh0b2RheS5nZXRGdWxsWWVhcigpLCB0b2RheS5nZXRNb250aCgpLCAxKTtcbiAgICAgICAgcmV0dXJuIHsgc3RhcnQsIGVuZDogdG9kYXkgfTtcbiAgICAgIH1cbiAgICAgIGNhc2UgJ2xhc3Rtb250aCc6IHtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBuZXcgRGF0ZSh0b2RheS5nZXRGdWxsWWVhcigpLCB0b2RheS5nZXRNb250aCgpIC0gMSwgMSk7XG4gICAgICAgIGNvbnN0IGVuZCA9IG5ldyBEYXRlKHRvZGF5LmdldEZ1bGxZZWFyKCksIHRvZGF5LmdldE1vbnRoKCksIDApO1xuICAgICAgICByZXR1cm4geyBzdGFydCwgZW5kOiBjbGFtcFRvRW5kT2ZUb2RheShlbmQpIH07XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHByaXZhdGUgc3RhcnRPZkRheShkOiBEYXRlKTogRGF0ZSB7IGNvbnN0IG5kID0gbmV3IERhdGUoZCk7IG5kLnNldEhvdXJzKDAsMCwwLDApOyByZXR1cm4gbmQ7IH1cbiAgcHJpdmF0ZSBlbmRPZkRheShkOiBEYXRlKTogRGF0ZSB7IGNvbnN0IG5kID0gbmV3IERhdGUoZCk7IG5kLnNldEhvdXJzKDIzLDU5LDU5LDk5OSk7IHJldHVybiBuZDsgfVxuICBwcml2YXRlIHN0YXJ0T2ZNb250aCh5ZWFyOiBudW1iZXIsIG1vbnRoOiBudW1iZXIpOiBEYXRlIHsgcmV0dXJuIG5ldyBEYXRlKHllYXIsIG1vbnRoLCAxLCAwLDAsMCwwKTsgfVxuICBwcml2YXRlIGVuZE9mTW9udGgoeWVhcjogbnVtYmVyLCBtb250aDogbnVtYmVyKTogRGF0ZSB7IHJldHVybiBuZXcgRGF0ZSh5ZWFyLCBtb250aCArIDEsIDAsIDIzLDU5LDU5LDk5OSk7IH1cbiAgcHJpdmF0ZSBidWlsZE5neFJhbmdlcygpOiBSZWNvcmQ8c3RyaW5nLCBbRGF0ZSwgRGF0ZV0+IHtcbiAgICBjb25zdCB0b2RheSA9IG5ldyBEYXRlKCk7XG4gICAgY29uc3QgbGFzdDdTdGFydCA9IG5ldyBEYXRlKCk7IGxhc3Q3U3RhcnQuc2V0RGF0ZShsYXN0N1N0YXJ0LmdldERhdGUoKSAtIDYpO1xuICAgIGNvbnN0IGxhc3QzMFN0YXJ0ID0gbmV3IERhdGUoKTsgbGFzdDMwU3RhcnQuc2V0RGF0ZShsYXN0MzBTdGFydC5nZXREYXRlKCkgLSAyOSk7XG4gICAgY29uc3QgbGFzdDkwU3RhcnQgPSBuZXcgRGF0ZSgpOyBsYXN0OTBTdGFydC5zZXREYXRlKGxhc3Q5MFN0YXJ0LmdldERhdGUoKSAtIDg5KTtcbiAgICBjb25zdCBsYXN0M01vbnRoc1N0YXJ0ID0gdGhpcy5zdGFydE9mTW9udGgodG9kYXkuZ2V0RnVsbFllYXIoKSwgdG9kYXkuZ2V0TW9udGgoKSAtIDIpO1xuICAgIGNvbnN0IHRoaXNNb250aFN0YXJ0ID0gdGhpcy5zdGFydE9mTW9udGgodG9kYXkuZ2V0RnVsbFllYXIoKSwgdG9kYXkuZ2V0TW9udGgoKSk7XG4gICAgY29uc3QgbGFzdE1vbnRoU3RhcnQgPSB0aGlzLnN0YXJ0T2ZNb250aCh0b2RheS5nZXRGdWxsWWVhcigpLCB0b2RheS5nZXRNb250aCgpIC0gMSk7XG4gICAgY29uc3QgbGFzdE1vbnRoRW5kID0gdGhpcy5lbmRPZk1vbnRoKHRvZGF5LmdldEZ1bGxZZWFyKCksIHRvZGF5LmdldE1vbnRoKCkgLSAxKTtcbiAgICByZXR1cm4ge1xuICAgICAgJ1RvZGF5JzogW3RoaXMuc3RhcnRPZkRheSh0b2RheSksIHRoaXMuZW5kT2ZEYXkodG9kYXkpXSxcbiAgICAgICdMYXN0IDcgRGF5cyc6IFt0aGlzLnN0YXJ0T2ZEYXkobGFzdDdTdGFydCksIHRoaXMuZW5kT2ZEYXkodG9kYXkpXSxcbiAgICAgICdMYXN0IDMwIERheXMnOiBbdGhpcy5zdGFydE9mRGF5KGxhc3QzMFN0YXJ0KSwgdGhpcy5lbmRPZkRheSh0b2RheSldLFxuICAgICAgJ0xhc3QgOTAgRGF5cyc6IFt0aGlzLnN0YXJ0T2ZEYXkobGFzdDkwU3RhcnQpLCB0aGlzLmVuZE9mRGF5KHRvZGF5KV0sXG4gICAgICAnTGFzdCAzIE1vbnRocyc6IFt0aGlzLnN0YXJ0T2ZEYXkobGFzdDNNb250aHNTdGFydCksIHRoaXMuZW5kT2ZEYXkodG9kYXkpXSxcbiAgICAgICdUaGlzIE1vbnRoJzogW3RoaXMuc3RhcnRPZkRheSh0aGlzTW9udGhTdGFydCksIHRoaXMuZW5kT2ZEYXkodG9kYXkpXSxcbiAgICAgICdMYXN0IE1vbnRoJzogW3RoaXMuc3RhcnRPZkRheShsYXN0TW9udGhTdGFydCksIHRoaXMuZW5kT2ZEYXkobGFzdE1vbnRoRW5kKV0sXG4gICAgfTtcbiAgfVxuICBvbkRhdGVyYW5nZXBpY2tlckNoYW5nZShldmVudDogeyBzdGFydERhdGU6IERhdGUgfCBudWxsOyBlbmREYXRlOiBEYXRlIHwgbnVsbCB9LCBrZXk6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGdyb3VwID0gdGhpcy5nZXREYXRlR3JvdXAoa2V5KTtcbiAgICBpZiAoIWdyb3VwKSByZXR1cm47XG4gICAgXG4gICAgZ3JvdXAucGF0Y2hWYWx1ZSh7XG4gICAgICBzdGFydDogZXZlbnQuc3RhcnREYXRlLFxuICAgICAgZW5kOiBldmVudC5lbmREYXRlXG4gICAgfSwgeyBlbWl0RXZlbnQ6IHRydWUgfSk7XG4gICAgXG4gICAgY29uc3Qgc2VyaWFsaXplZCA9IHRoaXMuc2VyaWFsaXplKCk7XG4gICAgdGhpcy5oYXNTZWxlY3RlZEZpbHRlcnMgPSBPYmplY3Qua2V5cyhzZXJpYWxpemVkKS5sZW5ndGggPiAwO1xuICAgIHRoaXMuZmlsdGVyc0NoYW5nZWQuZW1pdChzZXJpYWxpemVkKTtcbiAgICB0aGlzLmludm9rZURhdGVSYW5nZUNoYW5nZShrZXkpO1xuICB9XG5cbiAgb25EYXRlcmFuZ2VwaWNrZXJBcHBseShldmVudDogeyBzdGFydERhdGU6IERhdGUgfCBudWxsOyBlbmREYXRlOiBEYXRlIHwgbnVsbCB9LCBrZXk6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMub25EYXRlcmFuZ2VwaWNrZXJDaGFuZ2UoZXZlbnQsIGtleSk7XG4gICAgLy8gT3B0aW9uYWxseSB0cmlnZ2VyIGFwcGx5IGFjdGlvblxuICAgIGNvbnN0IHNlcmlhbGl6ZWQgPSB0aGlzLnNlcmlhbGl6ZSgpO1xuICAgIGlmIChldmVudC5zdGFydERhdGUgJiYgZXZlbnQuZW5kRGF0ZSkge1xuICAgICAgLy8gRG9uJ3QgYXV0by1hcHBseSwgbGV0IHVzZXIgY2xpY2sgQXBwbHkgRmlsdGVyIGJ1dHRvblxuICAgIH1cbiAgfVxuXG4gIGdldERhdGVyYW5nZXBpY2tlclJhbmdlcygpOiBhbnkge1xuICAgIC8vIFVzZSB0aGUgZXhpc3RpbmcgZ2V0UHJlc2V0RGF0ZXMgbG9naWMgdG8gZW5zdXJlIGNvbnNpc3RlbmN5XG4gICAgY29uc3QgdG9kYXlQcmVzZXQgPSB0aGlzLmdldFByZXNldERhdGVzKCd0b2RheScpO1xuICAgIGNvbnN0IGxhc3Q3UHJlc2V0ID0gdGhpcy5nZXRQcmVzZXREYXRlcygnbGFzdDdkYXlzJyk7XG4gICAgY29uc3QgbGFzdDMwUHJlc2V0ID0gdGhpcy5nZXRQcmVzZXREYXRlcygnbGFzdDMwZGF5cycpO1xuICAgIGNvbnN0IGxhc3Q5MFByZXNldCA9IHRoaXMuZ2V0UHJlc2V0RGF0ZXMoJ2xhc3Q5MGRheXMnKTtcbiAgICBjb25zdCBsYXN0M01vbnRoc1ByZXNldCA9IHRoaXMuZ2V0UHJlc2V0RGF0ZXMoJ2xhc3QzbW9udGhzJyk7XG4gICAgY29uc3QgdGhpc01vbnRoUHJlc2V0ID0gdGhpcy5nZXRQcmVzZXREYXRlcygndGhpc21vbnRoJyk7XG4gICAgY29uc3QgbGFzdE1vbnRoUHJlc2V0ID0gdGhpcy5nZXRQcmVzZXREYXRlcygnbGFzdG1vbnRoJyk7XG4gICAgXG4gICAgcmV0dXJuIHtcbiAgICAgICdUb2RheSc6IFt0b2RheVByZXNldC5zdGFydCwgdGhpcy5lbmRPZkRheSh0b2RheVByZXNldC5lbmQpXSxcbiAgICAgICdMYXN0IDcgRGF5cyc6IFtsYXN0N1ByZXNldC5zdGFydCwgdGhpcy5lbmRPZkRheShsYXN0N1ByZXNldC5lbmQpXSxcbiAgICAgICdMYXN0IDMwIERheXMnOiBbbGFzdDMwUHJlc2V0LnN0YXJ0LCB0aGlzLmVuZE9mRGF5KGxhc3QzMFByZXNldC5lbmQpXSxcbiAgICAgICdMYXN0IDkwIERheXMnOiBbbGFzdDkwUHJlc2V0LnN0YXJ0LCB0aGlzLmVuZE9mRGF5KGxhc3Q5MFByZXNldC5lbmQpXSxcbiAgICAgICdMYXN0IDMgTW9udGhzJzogW2xhc3QzTW9udGhzUHJlc2V0LnN0YXJ0LCB0aGlzLmVuZE9mRGF5KGxhc3QzTW9udGhzUHJlc2V0LmVuZCldLFxuICAgICAgJ1RoaXMgTW9udGgnOiBbdGhpc01vbnRoUHJlc2V0LnN0YXJ0LCB0aGlzLmVuZE9mRGF5KHRoaXNNb250aFByZXNldC5lbmQpXSxcbiAgICAgICdMYXN0IE1vbnRoJzogW2xhc3RNb250aFByZXNldC5zdGFydCwgdGhpcy5lbmRPZkRheShsYXN0TW9udGhQcmVzZXQuZW5kKV1cbiAgICB9O1xuICB9XG5cbiAgZ2V0RGF0ZVZhbGlkYXRpb25FcnJvcihrZXk6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICAgIGNvbnN0IGRhdGVHcm91cCA9IHRoaXMuZ2V0RGF0ZUdyb3VwKGtleSk7XG4gICAgaWYgKCFkYXRlR3JvdXApIHJldHVybiBudWxsO1xuXG4gICAgY29uc3Qgc3RhcnRDdHJsID0gZGF0ZUdyb3VwLmNvbnRyb2xzWydzdGFydCddO1xuICAgIGNvbnN0IGVuZEN0cmwgPSBkYXRlR3JvdXAuY29udHJvbHNbJ2VuZCddO1xuICAgIGNvbnN0IHN0YXJ0VmFsID0gc3RhcnRDdHJsPy52YWx1ZTtcbiAgICBjb25zdCBlbmRWYWwgPSBlbmRDdHJsPy52YWx1ZTtcbiAgICBjb25zdCBzdGFydFBhcnNlRXJyID0gc3RhcnRDdHJsPy5lcnJvcnM/LlsnbWF0RGF0ZXBpY2tlclBhcnNlJ10/LnRleHQ7XG4gICAgY29uc3QgZW5kUGFyc2VFcnIgPSBlbmRDdHJsPy5lcnJvcnM/LlsnbWF0RGF0ZXBpY2tlclBhcnNlJ10/LnRleHQ7XG5cbiAgICBpZiAoIXN0YXJ0VmFsICYmICFlbmRWYWwgJiYgIXN0YXJ0UGFyc2VFcnIgJiYgIWVuZFBhcnNlRXJyKSByZXR1cm4gbnVsbDtcblxuICAgIGlmIChzdGFydFBhcnNlRXJyKSByZXR1cm4gYEludmFsaWQgc3RhcnQgZGF0ZSBmb3JtYXRgO1xuICAgIGlmIChlbmRQYXJzZUVycikgcmV0dXJuIGBJbnZhbGlkIGVuZCBkYXRlIGZvcm1hdGA7XG5cbiAgICBpZiAoc3RhcnRWYWwgJiYgIWVuZFZhbCkgcmV0dXJuIGBQbGVhc2Ugc2VsZWN0IGFuIGVuZCBkYXRlYDtcbiAgICBpZiAoIXN0YXJ0VmFsICYmIGVuZFZhbCkgcmV0dXJuIGBQbGVhc2Ugc2VsZWN0IGEgc3RhcnQgZGF0ZWA7XG5cbiAgICBpZiAoZGF0ZUdyb3VwLmhhc0Vycm9yKCdtYXRTdGFydERhdGVJbnZhbGlkJykpIHJldHVybiBgU3RhcnQgZGF0ZSBtdXN0IGJlIGJlZm9yZSBlbmQgZGF0ZWA7XG4gICAgaWYgKGRhdGVHcm91cC5oYXNFcnJvcignbWF0RW5kRGF0ZUludmFsaWQnKSkgcmV0dXJuIGBFbmQgZGF0ZSBtdXN0IGJlIGFmdGVyIHN0YXJ0IGRhdGVgO1xuXG4gICAgaWYgKGRhdGVHcm91cC5pbnZhbGlkKSB7XG4gICAgICBjb25zdCBjb25maWcgPSB0aGlzLmNvbmZpZz8uZmluZChjID0+IGMua2V5ID09PSBrZXkpO1xuICAgICAgcmV0dXJuIGNvbmZpZyA/IGAke2NvbmZpZy5sYWJlbH0gaXMgaW52YWxpZGAgOiAnRGF0ZSByYW5nZSBpcyBpbnZhbGlkJztcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIER5bmFtaWMgRGF0ZSBQaWNrZXIgSW50ZWdyYXRpb24gTWV0aG9kcyByZW1vdmVkIChjb21wb25lbnQgbm8gbG9uZ2VyIHVzZWQpXG59XG5cblxuIiwiPGRpdiBjbGFzcz1cImNxYS11aS1yb290IGNxYS11aS1kYXRlcmFuZ2UtcGlja2VyXCI+XG4gIDxkaXYgY2xhc3M9XCJjcWEtZmlsdGVyIGNxYS1tYi1bMjhweF1cIiAqbmdJZj1cInNob3dGaWx0ZXJQYW5lbFwiIHN0eWxlPVwiaGVpZ2h0OiBhdXRvO1wiPlxuICAgIDwhLS0gQm90dG9tIExheW91dDogQ3VycmVudCBkZXNpZ24gd2l0aCBzZWxlY3RvcnMgaW4gZ3JpZCBhbmQgYnV0dG9ucyBiZWxvdyAtLT5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYnV0dG9uTGF5b3V0ID09PSAnYm90dG9tJ1wiPlxuICAgICAgPGZvcm0gY2xhc3M9XCJ0cy1mb3JtIGNxYS1ncmlkIGxnOmNxYS1ncmlkLWNvbHMtNCBtZDpjcWEtZ3JpZC1jb2xzLTIgY3FhLWdhcC00IGNxYS1yZWxhdGl2ZVwiIFtmb3JtR3JvdXBdPVwiZm9ybVwiXG4gICAgICAgIChrZXlkb3duLmVudGVyKT1cIihmYWxzZSlcIiBub3ZhbGlkYXRlPVwibm92YWxpZGF0ZVwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjIG9mIGNvbmZpZ1wiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhYy5oaWRkZW5cIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIGN1cy1yYW5nZS1zZWxlY3QgY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1nYXAtMiBjcWEtZmxleC1zaHJpbmstMCBmaWx0ZXItc2VsZWN0b3Itd2lkdGggY3FhLXctZnVsbFwiPlxuICAgICAgICAgICAgICA8IS0tIFNlbGVjdCAtLT5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImMudHlwZSA9PT0gJ3NlbGVjdCdcIj5cbiAgICAgICAgICAgICAgICA8Y3FhLWR5bmFtaWMtc2VsZWN0IFtmb3JtXT1cImZvcm1cIiBbY29uZmlnXT1cImdldFNlbGVjdENvbmZpZyhjKVwiPjwvY3FhLWR5bmFtaWMtc2VsZWN0PlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICA8IS0tIERhdGUgUmFuZ2UgUGlja2VyIC0tPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYy50eXBlID09PSAnZGF0ZS1yYW5nZS1waWNrZXInXCI+XG4gICAgICAgICAgICAgICAgPGNxYS1kYXRlcmFuZ2VwaWNrZXJcbiAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJjLmxhYmVsXCJcbiAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJjLnBsYWNlaG9sZGVyIHx8ICdTdGFydCBEYXRlIC0gRW5kIERhdGUnXCJcbiAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJjLmRpc2FibGVkIHx8IGZhbHNlXCJcbiAgICAgICAgICAgICAgICAgIFtzdGFydERhdGVdPVwiZ2V0RGF0ZUdyb3VwKGMua2V5KT8uZ2V0KCdzdGFydCcpPy52YWx1ZVwiXG4gICAgICAgICAgICAgICAgICBbZW5kRGF0ZV09XCJnZXREYXRlR3JvdXAoYy5rZXkpPy5nZXQoJ2VuZCcpPy52YWx1ZVwiXG4gICAgICAgICAgICAgICAgICBbbWluRGF0ZV09XCJ1bmRlZmluZWRcIlxuICAgICAgICAgICAgICAgICAgW21heERhdGVdPVwibWF4RGF0ZVwiXG4gICAgICAgICAgICAgICAgICBbcmFuZ2VzXT1cImdldERhdGVyYW5nZXBpY2tlclJhbmdlcygpXCJcbiAgICAgICAgICAgICAgICAgIFthdXRvQXBwbHldPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICBbYWx3YXlzU2hvd0NhbGVuZGFyc109XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgIFtwYXJlbnRFbF09XCJjLnBhcmVudEVsXCJcbiAgICAgICAgICAgICAgICAgIChkYXRlc1VwZGF0ZWQpPVwib25EYXRlcmFuZ2VwaWNrZXJDaGFuZ2UoJGV2ZW50LCBjLmtleSlcIlxuICAgICAgICAgICAgICAgICAgKGFwcGx5Q2xpY2tlZCk9XCJvbkRhdGVyYW5nZXBpY2tlckFwcGx5KCRldmVudCwgYy5rZXkpXCI+XG4gICAgICAgICAgICAgICAgPC9jcWEtZGF0ZXJhbmdlcGlja2VyPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJnZXREYXRlR3JvdXAoYy5rZXkpPy5pbnZhbGlkICYmIGdldERhdGVHcm91cChjLmtleSk/LnRvdWNoZWRcIj5cbiAgICAgICAgICAgICAgICAgIHt7IGdldERhdGVWYWxpZGF0aW9uRXJyb3IoYy5rZXkpIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9mb3JtPlxuXG4gICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWp1c3RpZnktZW5kIGNxYS1pdGVtcy1zdHJldGNoIGNxYS1nYXAtMiBjcWEtbXQtNFwiPlxuICAgICAgICA8Y3FhLWJ1dHRvbiB2YXJpYW50PVwiZmlsbGVkXCIgKG1vdXNlZG93bik9XCJwcmVwYXJlUHJpbWFyeUFjdGlvbigpXCIgKGNsaWNrZWQpPVwiYXBwbHkoKVwiIFtkaXNhYmxlZF09XCIhaGFzU2VsZWN0ZWRGaWx0ZXJzXCI+QXBwbHkgRmlsdGVyPC9jcWEtYnV0dG9uPlxuICAgICAgICA8Y3FhLWJ1dHRvbiB2YXJpYW50PVwib3V0bGluZWRcIiAobW91c2Vkb3duKT1cInByZXBhcmVQcmltYXJ5QWN0aW9uKClcIiAoY2xpY2tlZCk9XCJyZXNldCgpXCI+UmVzZXQ8L2NxYS1idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDwhLS0gUmlnaHQgTGF5b3V0OiBCdXR0b25zIG9uIGxlZnRtb3N0IHNpZGUsIHNlbGVjdG9ycyBvbiByaWdodG1vc3Qgc2lkZSAtLT5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYnV0dG9uTGF5b3V0ID09PSAncmlnaHQnXCI+XG4gICAgICA8Zm9ybSBjbGFzcz1cInRzLWZvcm0gY3FhLWZsZXggY3FhLWZsZXgtd3JhcCBjcWEtaXRlbXMtZW5kIGNxYS1qdXN0aWZ5LWJldHdlZW4gY3FhLWdhcC00IGNxYS11aS1kYXRlcmFuZ2UtcGlja2VyIGNxYS1yZWxhdGl2ZVwiIFtmb3JtR3JvdXBdPVwiZm9ybVwiXG4gICAgICAgIChrZXlkb3duLmVudGVyKT1cIihmYWxzZSlcIiBub3ZhbGlkYXRlPVwibm92YWxpZGF0ZVwiIHN0eWxlPVwiaGVpZ2h0OiBhdXRvO1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLXN0cmV0Y2ggY3FhLWdhcC0yIGNxYS1mbGV4LXNocmluay0wIGNxYS1vcmRlci1maXJzdCBjcWEtbXItYXV0b1wiPlxuICAgICAgICAgIDxjcWEtYnV0dG9uIHZhcmlhbnQ9XCJmaWxsZWRcIiAoY2xpY2tlZCk9XCJhcHBseSgpXCIgW2Rpc2FibGVkXT1cIiFoYXNTZWxlY3RlZEZpbHRlcnNcIj5BcHBseSBGaWx0ZXI8L2NxYS1idXR0b24+XG4gICAgICAgICAgPGNxYS1idXR0b24gdmFyaWFudD1cIm91dGxpbmVkXCIgKGNsaWNrZWQpPVwicmVzZXQoKVwiPlJlc2V0PC9jcWEtYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LXdyYXAgY3FhLWl0ZW1zLWVuZCBjcWEtZ2FwLTQgY3FhLWZsZXgtMSBjcWEtanVzdGlmeS1lbmQgY3FhLW9yZGVyLWxhc3QgY3FhLW1sLWF1dG9cIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjIG9mIGNvbmZpZ1wiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhYy5oaWRkZW5cIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIGNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTIgY3FhLWZsZXgtc2hyaW5rLTAgZmlsdGVyLXNlbGVjdG9yLXdpZHRoXCI+XG4gICAgICAgICAgICAgIDwhLS0gU2VsZWN0IC0tPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYy50eXBlID09PSAnc2VsZWN0J1wiPlxuICAgICAgICAgICAgICAgIDxjcWEtZHluYW1pYy1zZWxlY3QgW2Zvcm1dPVwiZm9ybVwiIFtjb25maWddPVwiZ2V0U2VsZWN0Q29uZmlnKGMpXCI+PC9jcWEtZHluYW1pYy1zZWxlY3Q+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgIDwhLS0gRGF0ZSBSYW5nZSAoRGF0ZXJhbmdlcGlja2VyKSAtLT4gXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjLnR5cGUgPT09ICdkYXRlLXJhbmdlLXBpY2tlcidcIj5cbiAgICAgICAgICAgICAgICA8Y3FhLWRhdGVyYW5nZXBpY2tlclxuICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cImMubGFiZWxcIlxuICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImMucGxhY2Vob2xkZXIgfHwgJ1N0YXJ0IERhdGUgLSBFbmQgRGF0ZSdcIlxuICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImMuZGlzYWJsZWQgfHwgZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgW3N0YXJ0RGF0ZV09XCJnZXREYXRlR3JvdXAoYy5rZXkpPy5nZXQoJ3N0YXJ0Jyk/LnZhbHVlXCJcbiAgICAgICAgICAgICAgICAgIFtlbmREYXRlXT1cImdldERhdGVHcm91cChjLmtleSk/LmdldCgnZW5kJyk/LnZhbHVlXCJcbiAgICAgICAgICAgICAgICAgIFttaW5EYXRlXT1cInVuZGVmaW5lZFwiXG4gICAgICAgICAgICAgICAgICBbbWF4RGF0ZV09XCJtYXhEYXRlXCJcbiAgICAgICAgICAgICAgICAgIFtyYW5nZXNdPVwiZ2V0RGF0ZXJhbmdlcGlja2VyUmFuZ2VzKClcIlxuICAgICAgICAgICAgICAgICAgW2F1dG9BcHBseV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgIFthbHdheXNTaG93Q2FsZW5kYXJzXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgKGRhdGVzVXBkYXRlZCk9XCJvbkRhdGVyYW5nZXBpY2tlckNoYW5nZSgkZXZlbnQsIGMua2V5KVwiXG4gICAgICAgICAgICAgICAgICAoYXBwbHlDbGlja2VkKT1cIm9uRGF0ZXJhbmdlcGlja2VyQXBwbHkoJGV2ZW50LCBjLmtleSlcIj5cbiAgICAgICAgICAgICAgICA8L2NxYS1kYXRlcmFuZ2VwaWNrZXI+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj1cImdldERhdGVHcm91cChjLmtleSk/LmludmFsaWQgJiYgZ2V0RGF0ZUdyb3VwKGMua2V5KT8udG91Y2hlZFwiPlxuICAgICAgICAgICAgICAgICAge3sgZ2V0RGF0ZVZhbGlkYXRpb25FcnJvcihjLmtleSkgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9mb3JtPlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPCEtLSBMZWZ0IExheW91dDogU2VsZWN0b3JzIG9uIGxlZnRtb3N0IHNpZGUsIGJ1dHRvbnMgb24gcmlnaHRtb3N0IHNpZGUgLS0+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImJ1dHRvbkxheW91dCA9PT0gJ2xlZnQnXCI+XG4gICAgICA8Zm9ybSBjbGFzcz1cInRzLWZvcm0gY3FhLWZsZXggY3FhLWZsZXgtd3JhcCBjcWEtaXRlbXMtZW5kIGNxYS1qdXN0aWZ5LWJldHdlZW4gY3FhLWdhcC00IGNxYS11aS1kYXRlcmFuZ2UtcGlja2VyIGNxYS1yZWxhdGl2ZVwiIFtmb3JtR3JvdXBdPVwiZm9ybVwiXG4gICAgICAgIChrZXlkb3duLmVudGVyKT1cIihmYWxzZSlcIiBub3ZhbGlkYXRlPVwibm92YWxpZGF0ZVwiIHN0eWxlPVwiaGVpZ2h0OiBhdXRvO1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtd3JhcCBjcWEtaXRlbXMtZW5kIGNxYS1nYXAtNCBjcWEtZmxleC0xIGNxYS1vcmRlci1maXJzdCBjcWEtbXItYXV0b1wiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGMgb2YgY29uZmlnXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFjLmhpZGRlblwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1nYXAtMiBjcWEtZmxleC1zaHJpbmstMCBmaWx0ZXItc2VsZWN0b3Itd2lkdGhcIj5cbiAgICAgICAgICAgICAgPCEtLSBTZWxlY3QgLS0+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjLnR5cGUgPT09ICdzZWxlY3QnXCI+XG4gICAgICAgICAgICAgICAgPGNxYS1keW5hbWljLXNlbGVjdCBbZm9ybV09XCJmb3JtXCIgW2NvbmZpZ109XCJnZXRTZWxlY3RDb25maWcoYylcIj48L2NxYS1keW5hbWljLXNlbGVjdD5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgPCEtLSBEYXRlIFJhbmdlIChEYXRlcmFuZ2VwaWNrZXIpIC0tPiBcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImMudHlwZSA9PT0gJ2RhdGUtcmFuZ2UtcGlja2VyJ1wiPlxuICAgICAgICAgICAgICAgIDxjcWEtZGF0ZXJhbmdlcGlja2VyXG4gICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiYy5sYWJlbFwiXG4gICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiYy5wbGFjZWhvbGRlciB8fCAnU3RhcnQgRGF0ZSAtIEVuZCBEYXRlJ1wiXG4gICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiYy5kaXNhYmxlZCB8fCBmYWxzZVwiXG4gICAgICAgICAgICAgICAgICBbc3RhcnREYXRlXT1cImdldERhdGVHcm91cChjLmtleSk/LmdldCgnc3RhcnQnKT8udmFsdWVcIlxuICAgICAgICAgICAgICAgICAgW2VuZERhdGVdPVwiZ2V0RGF0ZUdyb3VwKGMua2V5KT8uZ2V0KCdlbmQnKT8udmFsdWVcIlxuICAgICAgICAgICAgICAgICAgW21pbkRhdGVdPVwidW5kZWZpbmVkXCJcbiAgICAgICAgICAgICAgICAgIFttYXhEYXRlXT1cIm1heERhdGVcIlxuICAgICAgICAgICAgICAgICAgW3Jhbmdlc109XCJnZXREYXRlcmFuZ2VwaWNrZXJSYW5nZXMoKVwiXG4gICAgICAgICAgICAgICAgICBbYXV0b0FwcGx5XT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgW2Fsd2F5c1Nob3dDYWxlbmRhcnNdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAoZGF0ZXNVcGRhdGVkKT1cIm9uRGF0ZXJhbmdlcGlja2VyQ2hhbmdlKCRldmVudCwgYy5rZXkpXCJcbiAgICAgICAgICAgICAgICAgIChhcHBseUNsaWNrZWQpPVwib25EYXRlcmFuZ2VwaWNrZXJBcHBseSgkZXZlbnQsIGMua2V5KVwiPlxuICAgICAgICAgICAgICAgIDwvY3FhLWRhdGVyYW5nZXBpY2tlcj5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPVwiZ2V0RGF0ZUdyb3VwKGMua2V5KT8uaW52YWxpZCAmJiBnZXREYXRlR3JvdXAoYy5rZXkpPy50b3VjaGVkXCI+XG4gICAgICAgICAgICAgICAgICB7eyBnZXREYXRlVmFsaWRhdGlvbkVycm9yKGMua2V5KSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtc3RyZXRjaCBjcWEtZ2FwLTIgY3FhLWZsZXgtc2hyaW5rLTAgY3FhLW9yZGVyLWxhc3QgY3FhLW1sLWF1dG9cIj5cbiAgICAgICAgICA8Y3FhLWJ1dHRvbiB2YXJpYW50PVwiZmlsbGVkXCIgKG1vdXNlZG93bik9XCJwcmVwYXJlUHJpbWFyeUFjdGlvbigpXCIgKGNsaWNrZWQpPVwiYXBwbHkoKVwiIFtkaXNhYmxlZF09XCIhaGFzU2VsZWN0ZWRGaWx0ZXJzXCI+QXBwbHkgRmlsdGVyPC9jcWEtYnV0dG9uPlxuICAgICAgICAgIDxjcWEtYnV0dG9uIHZhcmlhbnQ9XCJvdXRsaW5lZFwiIChtb3VzZWRvd24pPVwicHJlcGFyZVByaW1hcnlBY3Rpb24oKVwiIChjbGlja2VkKT1cInJlc2V0KClcIj5SZXNldDwvY3FhLWJ1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Zvcm0+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuPC9kaXY+Il19
441
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1maWx0ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9maWx0ZXJzL2R5bmFtaWMtZmlsdGVyL2R5bmFtaWMtZmlsdGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvZmlsdGVycy9keW5hbWljLWZpbHRlci9keW5hbWljLWZpbHRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQWEsTUFBTSxFQUFpQixZQUFZLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFDbkosT0FBTyxFQUFlLFdBQVcsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUdyRSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxxREFBcUQsQ0FBQzs7Ozs7Ozs7QUFvRGxHLE1BQU0sT0FBTyxzQkFBc0I7SUFrQmpDLFlBQTZCLEVBQWU7UUFBZixPQUFFLEdBQUYsRUFBRSxDQUFhO1FBakJuQyxXQUFNLEdBQXdCLEVBQUUsQ0FBQztRQUNqQyxVQUFLLEdBQXdCLEVBQUUsQ0FBQztRQUNoQyxvQkFBZSxHQUFZLElBQUksQ0FBQztRQUNoQyxpQkFBWSxHQUFnQyxRQUFRLENBQUM7UUFDcEQsbUJBQWMsR0FBRyxJQUFJLFlBQVksRUFBdUIsQ0FBQztRQUN6RCxtQkFBYyxHQUFHLElBQUksWUFBWSxFQUF1QixDQUFDO1FBQ3pELGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUN2Qyx1QkFBa0IsR0FBRyxJQUFJLFlBQVksRUFBdUIsQ0FBQztRQUM3RCx1QkFBa0IsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBRXhELFNBQUksR0FBYyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNwQyxZQUFPLEdB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O3NCQUF2QixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csa0JBQWtCO3NCQUEzQixNQUFNO2dCQUNHLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFPb0MsZ0JBQWdCO3NCQUExRCxZQUFZO3VCQUFDLDJCQUEyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uQ2hhbmdlcywgT3V0cHV0LCBTaW1wbGVDaGFuZ2VzLCBWaWV3Q2hpbGRyZW4sIFF1ZXJ5TGlzdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Db250cm9sLCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBNYXREYXRlcGlja2VySW5wdXRFdmVudCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RhdGVwaWNrZXInO1xuaW1wb3J0IHsgRHluYW1pY1NlbGVjdEZpZWxkQ29uZmlnIH0gZnJvbSAnLi4vLi4vZHluYW1pYy1zZWxlY3QvZHluYW1pYy1zZWxlY3QtZmllbGQuY29tcG9uZW50JztcbmltcG9ydCB7IER5bmFtaWNTZWxlY3RGaWVsZENvbXBvbmVudCB9IGZyb20gJy4uLy4uL2R5bmFtaWMtc2VsZWN0L2R5bmFtaWMtc2VsZWN0LWZpZWxkLmNvbXBvbmVudCc7XG5cbnR5cGUgRmlsdGVyVHlwZSA9ICdzZWxlY3QnIHwgJ2RhdGUtcmFuZ2UtcGlja2VyJztcblxuZXhwb3J0IGludGVyZmFjZSBEeW5hbWljRmlsdGVyT3B0aW9uIHtcbiAgaWQ/OiBudW1iZXIgfCBzdHJpbmc7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHZhbHVlPzogYW55O1xuICBsYWJlbD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEeW5hbWljRmlsdGVySXRlbSB7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nO1xuICB0eXBlOiBGaWx0ZXJUeXBlO1xuICBrZXk6IHN0cmluZztcbiAgb3B0aW9ucz86IER5bmFtaWNGaWx0ZXJPcHRpb25bXTtcbiAgbXVsdGlwbGU/OiBib29sZWFuO1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIGhpZGRlbj86IGJvb2xlYW47XG4gIHNlYXJjaGFibGU/OiBib29sZWFuO1xuICBvcHRpb25TdHlsZT86ICdjaGVja21hcmsnIHwgJ2NoZWNrYm94JztcbiAgc2hvd1NlbGVjdEFsbD86IGJvb2xlYW47XG4gIHNlbGVjdEFsbExhYmVsPzogc3RyaW5nO1xuICBzZWxlY3RlZFZhbHVlPzogYW55IHwgYW55W107XG4gIC8vIFNlcnZlci1kcml2ZW4gc2VsZWN0IHN1cHBvcnQgKHBhc3N0aHJvdWdoIHRvIGNxYS1keW5hbWljLXNlbGVjdClcbiAgc2VydmVyU2VhcmNoPzogYm9vbGVhbjtcbiAgLyoqIE1vcmUgcmVzdWx0cyBhdmFpbGFibGUgc2VydmVyLXNpZGUgZm9yIGluZmluaXRlIHNjcm9sbCAqL1xuICBoYXNNb3JlPzogYm9vbGVhbjtcbiAgLyoqIEV4dGVybmFsIGxvYWRpbmcgc3RhdGUgZm9yIGFzeW5jIGZldGNoaW5nICovXG4gIGlzTG9hZGluZz86IGJvb2xlYW47XG4gIC8qKiBDYWxsYmFjayB3aGVuIHNlYXJjaCB0ZXh0IGNoYW5nZXMgKHNlcnZlciBtb2RlKSAqL1xuICBvblNlYXJjaD86IChxdWVyeTogc3RyaW5nKSA9PiB2b2lkO1xuICAvKiogQ2FsbGJhY2sgd2hlbiBtb3JlIGRhdGEgaXMgcmVxdWVzdGVkIChpbmZpbml0ZSBzY3JvbGwpICovXG4gIG9uTG9hZE1vcmU/OiAocXVlcnk/OiBzdHJpbmcpID0+IHZvaWQ7XG4gIHNlbGVjdGVkU3RhcnREYXRlPzogRGF0ZSB8IHN0cmluZztcbiAgc2VsZWN0ZWRFbmREYXRlPzogRGF0ZSB8IHN0cmluZztcbiAgb25EYXRlQ2hhbmdlPzogKHZhbHVlOiB7IHN0YXJ0OiBEYXRlIHwgbnVsbDsgZW5kOiBEYXRlIHwgbnVsbCB9LCBldmVudD86IE1hdERhdGVwaWNrZXJJbnB1dEV2ZW50PERhdGU+IHwgRXZlbnQpID0+IHZvaWQ7XG4gIHBhcmVudEVsPzogc3RyaW5nIHwgSFRNTEVsZW1lbnQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRHluYW1pY0ZpbHRlclZhbHVlcyB7XG4gIFtrZXk6IHN0cmluZ106IGFueTtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY3FhLWR5bmFtaWMtZmlsdGVyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2R5bmFtaWMtZmlsdGVyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGhvc3Q6IHsgY2xhc3M6ICdjcWEtdWktcm9vdCcgfVxufSlcbmV4cG9ydCBjbGFzcyBEeW5hbWljRmlsdGVyQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzIHtcbiAgQElucHV0KCkgY29uZmlnOiBEeW5hbWljRmlsdGVySXRlbVtdID0gW107XG4gIEBJbnB1dCgpIG1vZGVsOiBEeW5hbWljRmlsdGVyVmFsdWVzID0ge307XG4gIEBJbnB1dCgpIHNob3dGaWx0ZXJQYW5lbDogYm9vbGVhbiA9IHRydWU7XG4gIEBJbnB1dCgpIGJ1dHRvbkxheW91dDogJ2xlZnQnIHwgJ3JpZ2h0JyB8ICdib3R0b20nID0gJ2JvdHRvbSc7XG4gIEBPdXRwdXQoKSBmaWx0ZXJzQXBwbGllZCA9IG5ldyBFdmVudEVtaXR0ZXI8RHluYW1pY0ZpbHRlclZhbHVlcz4oKTtcbiAgQE91dHB1dCgpIGZpbHRlcnNDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxEeW5hbWljRmlsdGVyVmFsdWVzPigpO1xuICBAT3V0cHV0KCkgcmVzZXRBY3Rpb24gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSBvbkFwcGx5RmlsdGVyQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPER5bmFtaWNGaWx0ZXJWYWx1ZXM+KCk7XG4gIEBPdXRwdXQoKSBvblJlc2V0RmlsdGVyQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgZm9ybTogRm9ybUdyb3VwID0gdGhpcy5mYi5ncm91cCh7fSk7XG4gIG1heERhdGUgPSBuZXcgRGF0ZSgpO1xuICBzZWFyY2hUZXh0QnlLZXk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgcHJpdmF0ZSBzZWxlY3RPdXRzaWRlQ2xlYW51cCA9IG5ldyBNYXA8YW55LCAoKSA9PiB2b2lkPigpO1xuICBoYXNTZWxlY3RlZEZpbHRlcnMgPSBmYWxzZTtcbiAgQFZpZXdDaGlsZHJlbihEeW5hbWljU2VsZWN0RmllbGRDb21wb25lbnQpIHNlbGVjdENvbXBvbmVudHM/OiBRdWVyeUxpc3Q8RHluYW1pY1NlbGVjdEZpZWxkQ29tcG9uZW50PjtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGZiOiBGb3JtQnVpbGRlcikge1xuICAgIC8vIEVuc3VyZSBtYXhEYXRlIGlzIHRoZSBlbmQgb2YgdG9kYXksIHNvIGFueSBmdXR1cmUgZGF0ZXMgYXJlIGRpc2FsbG93ZWRcbiAgICB0aGlzLm1heERhdGUgPSB0aGlzLmVuZE9mRGF5KG5ldyBEYXRlKCkpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzWydjb25maWcnXSB8fCBjaGFuZ2VzWydtb2RlbCddKSB7XG4gICAgICB0aGlzLmJ1aWxkRm9ybSgpO1xuICAgIH1cbiAgfVxuXG4gIG9uRGF0ZUNoYW5nZShldmVudDogTWF0RGF0ZXBpY2tlcklucHV0RXZlbnQ8RGF0ZT4gfCBFdmVudCwga2V5OiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmludm9rZURhdGVSYW5nZUNoYW5nZShrZXksIGV2ZW50KTtcbiAgfVxuXG4gIC8vIE5HWCBEYXRlUmFuZ2VQaWNrZXIgaW50ZWdyYXRpb25cbiAgbmd4RGF0ZVJhbmdlQnlLZXk6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcbiAgbmd4UmFuZ2VzOiBhbnkgPSB7fTsgLy8gVXNpbmcgJ2FueScgdG8gYXZvaWQgRGF5anMgdHlwZSBtaXNtYXRjaCAtIGxpYnJhcnkgYWNjZXB0cyBEYXRlIG9iamVjdHMgYXQgcnVudGltZVxuICBuZ3hMb2NhbGUgPSB7IGN1c3RvbVJhbmdlTGFiZWw6ICdDdXN0b20gcmFuZ2UnIH07XG4gIC8vIERpc2FibGUgYWxsIGRhdGVzIGFmdGVyIHRvZGF5IGluIHRoZSBuZ3ggZGF0ZXBpY2tlclxuICBkaXNhYmxlRnV0dXJlRGF0ZXMgPSAobTogYW55KTogYm9vbGVhbiA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGQ6IERhdGUgPSBtICYmIHR5cGVvZiBtLnRvRGF0ZSA9PT0gJ2Z1bmN0aW9uJyA/IG0udG9EYXRlKCkgOiBuZXcgRGF0ZShtKTtcbiAgICAgIHJldHVybiBkLmdldFRpbWUoKSA+IHRoaXMubWF4RGF0ZS5nZXRUaW1lKCk7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9O1xuICBvbk5neERhdGVzVXBkYXRlZChlOiBhbnksIGtleTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgZ3JvdXAgPSB0aGlzLmdldERhdGVHcm91cChrZXkpO1xuICAgIGlmICghZ3JvdXApIHJldHVybjtcbiAgICBjb25zdCBjbGFtcCA9IChkOiBEYXRlIHwgbnVsbCkgPT4gKGQgJiYgZC5nZXRUaW1lKCkgPiB0aGlzLm1heERhdGUuZ2V0VGltZSgpID8gdGhpcy5tYXhEYXRlIDogZCk7XG4gICAgY29uc3Qgc3RhcnRSYXcgPSBlPy5zdGFydERhdGUgPyAodHlwZW9mIGUuc3RhcnREYXRlLnRvRGF0ZSA9PT0gJ2Z1bmN0aW9uJyA/IGUuc3RhcnREYXRlLnRvRGF0ZSgpIDogbmV3IERhdGUoZS5zdGFydERhdGUpKSA6IG51bGw7XG4gICAgY29uc3QgZW5kUmF3ID0gZT8uZW5kRGF0ZSA/ICh0eXBlb2YgZS5lbmREYXRlLnRvRGF0ZSA9PT0gJ2Z1bmN0aW9uJyA/IGUuZW5kRGF0ZS50b0RhdGUoKSA6IG5ldyBEYXRlKGUuZW5kRGF0ZSkpIDogbnVsbDtcbiAgICBjb25zdCBzdGFydCA9IGNsYW1wKHN0YXJ0UmF3KTtcbiAgICBjb25zdCBlbmQgPSBjbGFtcChlbmRSYXcpO1xuICAgIGdyb3VwLnBhdGNoVmFsdWUoeyBzdGFydCwgZW5kIH0sIHsgZW1pdEV2ZW50OiB0cnVlIH0pO1xuICAgIGNvbnN0IHNlcmlhbGl6ZWQgPSB0aGlzLnNlcmlhbGl6ZSgpO1xuICAgIHRoaXMuaGFzU2VsZWN0ZWRGaWx0ZXJzID0gT2JqZWN0LmtleXMoc2VyaWFsaXplZCkubGVuZ3RoID4gMDtcbiAgICBpZiAoc3RhcnQgJiYgZW5kICYmIGdyb3VwLnZhbGlkKSB7XG4gICAgICB0aGlzLmFwcGx5KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZmlsdGVyc0NoYW5nZWQuZW1pdChzZXJpYWxpemVkKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkRm9ybSgpOiB2b2lkIHtcbiAgICBjb25zdCBjdHJsczogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuICAgICh0aGlzLmNvbmZpZyB8fCBbXSkuZm9yRWFjaChjID0+IHtcbiAgICAgIGlmIChjLmhpZGRlbikgcmV0dXJuO1xuICAgICAgaWYgKGMudHlwZSA9PT0gJ2RhdGUtcmFuZ2UtcGlja2VyJykge1xuICAgICAgICBjb25zdCBpbml0aWFsUmFuZ2UgPSB0aGlzLmdldEluaXRpYWxEYXRlUmFuZ2VWYWx1ZShjKTtcbiAgICAgICAgY3RybHNbYy5rZXldID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICAgICAgc3RhcnQ6IG5ldyBGb3JtQ29udHJvbChpbml0aWFsUmFuZ2Uuc3RhcnQpLFxuICAgICAgICAgIGVuZDogbmV3IEZvcm1Db250cm9sKGluaXRpYWxSYW5nZS5lbmQpLFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGluaXRpYWwgPSB0aGlzLnJlc29sdmVJbml0aWFsU2VsZWN0VmFsdWUoYyk7XG4gICAgICAgIGlmIChjLm11bHRpcGxlKSB7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSBBcnJheS5pc0FycmF5KGluaXRpYWwpID8gaW5pdGlhbCA6IChpbml0aWFsICE9IG51bGwgPyBbaW5pdGlhbF0gOiBbXSk7XG4gICAgICAgICAgY3RybHNbYy5rZXldID0gbmV3IEZvcm1Db250cm9sKHZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjdHJsc1tjLmtleV0gPSBuZXcgRm9ybUNvbnRyb2wodGhpcy5jb2VyY2VUb1NpbmdsZVZhbHVlKGluaXRpYWwpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuZm9ybSA9IHRoaXMuZmIuZ3JvdXAoY3RybHMpO1xuICAgIC8vIGluaXRpYWxpemUgYXBwbHkgYnV0dG9uIHN0YXRlIGJhc2VkIG9uIGluaXRpYWwgdmFsdWVzXG4gICAgdGhpcy5oYXNTZWxlY3RlZEZpbHRlcnMgPSBPYmplY3Qua2V5cyh0aGlzLnNlcmlhbGl6ZSgpKS5sZW5ndGggPiAwO1xuICAgIC8vIGJ1aWxkIGNvbW1vbiByYW5nZXMgZm9yIG5neCBkYXRlcGlja2VyXG4gICAgdGhpcy5uZ3hSYW5nZXMgPSB0aGlzLmJ1aWxkTmd4UmFuZ2VzKCk7XG4gICAgdGhpcy5mb3JtLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgY29uc3Qgc2VyaWFsaXplZCA9IHRoaXMuc2VyaWFsaXplKCk7XG4gICAgICB0aGlzLmhhc1NlbGVjdGVkRmlsdGVycyA9IE9iamVjdC5rZXlzKHNlcmlhbGl6ZWQpLmxlbmd0aCA+IDA7XG4gICAgICB0aGlzLmZpbHRlcnNDaGFuZ2VkLmVtaXQoc2VyaWFsaXplZCk7XG4gICAgfSk7XG4gIH1cblxuICBvblNlbGVjdE9wZW5lZENoYW5nZShvcGVuZWQ6IGJvb2xlYW4sIHNlbGVjdDogYW55KTogdm9pZCB7XG4gICAgaWYgKG9wZW5lZCkge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IG9uRG9jRG93biA9IChlOiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICAgICAgY29uc3QgcGFuZWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuY2RrLW92ZXJsYXktcGFuZSAubWF0LXNlbGVjdC1wYW5lbCcpIGFzIEhUTUxFbGVtZW50IHwgbnVsbDtcbiAgICAgICAgICBjb25zdCB0YXJnZXQgPSBlLnRhcmdldCBhcyBOb2RlIHwgbnVsbDtcbiAgICAgICAgICBjb25zdCBvcmlnaW5FbCA9IChzZWxlY3Q/Ll9lbGVtZW50UmVmPy5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50KSB8fCBudWxsO1xuICAgICAgICAgIGNvbnN0IGluc2lkZVBhbmVsID0gISEocGFuZWwgJiYgdGFyZ2V0ICYmIHBhbmVsLmNvbnRhaW5zKHRhcmdldCkpO1xuICAgICAgICAgIGNvbnN0IGluc2lkZU9yaWdpbiA9ICEhKG9yaWdpbkVsICYmIHRhcmdldCAmJiBvcmlnaW5FbC5jb250YWlucyh0YXJnZXQpKTtcbiAgICAgICAgICBpZiAoIWluc2lkZVBhbmVsICYmICFpbnNpZGVPcmlnaW4pIHtcbiAgICAgICAgICAgIHNlbGVjdC5jbG9zZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgb25Eb2NEb3duLCB0cnVlKTtcbiAgICAgICAgdGhpcy5zZWxlY3RPdXRzaWRlQ2xlYW51cC5zZXQoc2VsZWN0LCAoKSA9PiBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBvbkRvY0Rvd24sIHRydWUpKTtcbiAgICAgIH0sIDApO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBjbGVhbnVwID0gdGhpcy5zZWxlY3RPdXRzaWRlQ2xlYW51cC5nZXQoc2VsZWN0KTtcbiAgICAgIGlmIChjbGVhbnVwKSBjbGVhbnVwKCk7XG4gICAgICB0aGlzLnNlbGVjdE91dHNpZGVDbGVhbnVwLmRlbGV0ZShzZWxlY3QpO1xuICAgIH1cbiAgfVxuXG4gIG9uU2VhcmNoKGtleTogc3RyaW5nLCB0ZXh0OiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnNlYXJjaFRleHRCeUtleVtrZXldID0gKHRleHQgfHwgJycpLnRvTG93ZXJDYXNlKCk7XG4gIH1cblxuICBmaWx0ZXJlZE9wdGlvbnMoaXRlbTogRHluYW1pY0ZpbHRlckl0ZW0pOiBEeW5hbWljRmlsdGVyT3B0aW9uW10ge1xuICAgIGNvbnN0IG9wdGlvbnMgPSBpdGVtPy5vcHRpb25zIHx8IFtdO1xuICAgIGNvbnN0IHEgPSAodGhpcy5zZWFyY2hUZXh0QnlLZXlbaXRlbS5rZXldIHx8ICcnKS50cmltKCk7XG4gICAgaWYgKCFxKSByZXR1cm4gb3B0aW9ucztcbiAgICByZXR1cm4gb3B0aW9ucy5maWx0ZXIob3B0ID0+IHtcbiAgICAgIGNvbnN0IG5hbWUgPSAob3B0Lm5hbWUgPz8gb3B0LmxhYmVsID8/IFN0cmluZyhvcHQudmFsdWUgPz8gJycpKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgcmV0dXJuIG5hbWUuaW5jbHVkZXMocSk7XG4gICAgfSk7XG4gIH1cblxuICBnZXREYXRlR3JvdXAoa2V5OiBzdHJpbmcpOiBGb3JtR3JvdXAge1xuICAgIHJldHVybiB0aGlzLmZvcm0uZ2V0KGtleSkgYXMgRm9ybUdyb3VwO1xuICB9XG5cbiAgZ2V0U2VsZWN0Q29uZmlnKGl0ZW06IER5bmFtaWNGaWx0ZXJJdGVtKTogRHluYW1pY1NlbGVjdEZpZWxkQ29uZmlnIHtcbiAgICByZXR1cm4ge1xuICAgICAga2V5OiBpdGVtLmtleSxcbiAgICAgIGxhYmVsOiBpdGVtLmxhYmVsLFxuICAgICAgcGxhY2Vob2xkZXI6IGl0ZW0ucGxhY2Vob2xkZXIsXG4gICAgICBkaXNhYmxlZDogaXRlbS5kaXNhYmxlZCxcbiAgICAgIG11bHRpcGxlOiBpdGVtLm11bHRpcGxlLFxuICAgICAgc2VhcmNoYWJsZTogaXRlbS5zZWFyY2hhYmxlLFxuICAgICAgb3B0aW9uU3R5bGU6IGl0ZW0ub3B0aW9uU3R5bGUsXG4gICAgICBzaG93U2VsZWN0QWxsOiBpdGVtLnNob3dTZWxlY3RBbGwsXG4gICAgICBzZWxlY3RBbGxMYWJlbDogaXRlbS5zZWxlY3RBbGxMYWJlbCxcbiAgICAgIHNlbGVjdGVkVmFsdWU6IGl0ZW0uc2VsZWN0ZWRWYWx1ZSxcbiAgICAgIHNlcnZlclNlYXJjaDogaXRlbS5zZXJ2ZXJTZWFyY2gsXG4gICAgICBoYXNNb3JlOiBpdGVtLmhhc01vcmUsXG4gICAgICBpc0xvYWRpbmc6IGl0ZW0uaXNMb2FkaW5nLFxuICAgICAgb25TZWFyY2g6IGl0ZW0ub25TZWFyY2gsXG4gICAgICBvbkxvYWRNb3JlOiBpdGVtLm9uTG9hZE1vcmUsXG4gICAgICBvcHRpb25zOiBpdGVtLm9wdGlvbnMgfHwgW11cbiAgICB9O1xuICB9XG5cbiAgYXBwbHkoKTogdm9pZCB7XG4gICAgdGhpcy5jbG9zZUFsbE9wZW5TZWxlY3RzKCk7XG4gICAgY29uc3QgZmlsdGVyVmFsdWVzID0gdGhpcy5zZXJpYWxpemUoKTtcbiAgICB0aGlzLmZpbHRlcnNBcHBsaWVkLmVtaXQoZmlsdGVyVmFsdWVzKTtcbiAgICB0aGlzLm9uQXBwbHlGaWx0ZXJDbGljay5lbWl0KGZpbHRlclZhbHVlcyk7XG4gIH1cblxuICByZXNldCgpOiB2b2lkIHtcbiAgICB0aGlzLmNsb3NlQWxsT3BlblNlbGVjdHMoKTtcbiAgICBPYmplY3Qua2V5cyh0aGlzLmZvcm0uY29udHJvbHMpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIGNvbnN0IGN0cmwgPSB0aGlzLmZvcm0uZ2V0KGtleSk7XG4gICAgICBpZiAoY3RybCBpbnN0YW5jZW9mIEZvcm1Hcm91cCkge1xuICAgICAgICBjdHJsLmdldCgnc3RhcnQnKT8uc2V0VmFsdWUodW5kZWZpbmVkKTtcbiAgICAgICAgY3RybC5nZXQoJ2VuZCcpPy5zZXRWYWx1ZSh1bmRlZmluZWQpO1xuICAgICAgICB0aGlzLmludm9rZURhdGVSYW5nZUNoYW5nZShrZXkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY3RybD8uc2V0VmFsdWUodW5kZWZpbmVkKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLnJlc2V0QWN0aW9uLmVtaXQoKTtcbiAgICB0aGlzLm9uUmVzZXRGaWx0ZXJDbGljay5lbWl0KCk7XG4gICAgY29uc3Qgc2VyaWFsaXplZCA9IHRoaXMuc2VyaWFsaXplKCk7XG4gICAgdGhpcy5oYXNTZWxlY3RlZEZpbHRlcnMgPSBPYmplY3Qua2V5cyhzZXJpYWxpemVkKS5sZW5ndGggPiAwO1xuICAgIHRoaXMuZmlsdGVyc0NoYW5nZWQuZW1pdChzZXJpYWxpemVkKTtcbiAgfVxuXG4gIC8qKiBDbG9zZSBhbnkgb3BlbiBNYXRTZWxlY3QgcGFuZWxzIGJlZm9yZSBwcmltYXJ5IGFjdGlvbnMgdG8gYXZvaWQgZG91YmxlLWNsaWNrIGlzc3VlcyAqL1xuICBwcmVwYXJlUHJpbWFyeUFjdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLmNsb3NlQWxsT3BlblNlbGVjdHMoKTtcbiAgfVxuXG4gIHByaXZhdGUgY2xvc2VBbGxPcGVuU2VsZWN0cygpOiB2b2lkIHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5zZWxlY3RDb21wb25lbnRzPy5mb3JFYWNoKGMgPT4gYy5jbG9zZVBhbmVsKCkpO1xuICAgIH0gY2F0Y2gge31cbiAgfVxuXG4gIHByaXZhdGUgc2VyaWFsaXplKCk6IER5bmFtaWNGaWx0ZXJWYWx1ZXMge1xuICAgIGNvbnN0IHJlc3VsdDogRHluYW1pY0ZpbHRlclZhbHVlcyA9IHt9O1xuICAgICh0aGlzLmNvbmZpZyB8fCBbXSkuZm9yRWFjaChjID0+IHtcbiAgICAgIGNvbnN0IGN0cmwgPSB0aGlzLmZvcm0uZ2V0KGMua2V5KTtcbiAgICAgIGlmICghY3RybCkgcmV0dXJuO1xuICAgICAgbGV0IHZhbDogYW55ID0gY3RybCBpbnN0YW5jZW9mIEZvcm1Hcm91cCA/IChjdHJsIGFzIEZvcm1Hcm91cCkuZ2V0UmF3VmFsdWUoKSA6IGN0cmwudmFsdWU7XG4gICAgICBpZiAoYy50eXBlID09PSAnZGF0ZS1yYW5nZS1waWNrZXInKSB7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gdmFsPy5zdGFydDsgY29uc3QgZW5kID0gdmFsPy5lbmQ7XG4gICAgICAgIGlmIChzdGFydCB8fCBlbmQpIHJlc3VsdFtjLmtleV0gPSB7IHN0YXJ0LCBlbmQgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh2YWwgIT09IHVuZGVmaW5lZCAmJiB2YWwgIT09IG51bGwgJiYgKEFycmF5LmlzQXJyYXkodmFsKSA/IHZhbC5sZW5ndGggPiAwIDogdmFsICE9PSAnJykpIHtcbiAgICAgICAgICByZXN1bHRbYy5rZXldID0gdmFsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHByaXZhdGUgcmVzb2x2ZUluaXRpYWxTZWxlY3RWYWx1ZShpdGVtOiBEeW5hbWljRmlsdGVySXRlbSk6IGFueSB7XG4gICAgaWYgKHRoaXMubW9kZWwgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMubW9kZWwsIGl0ZW0ua2V5KSkge1xuICAgICAgcmV0dXJuIHRoaXMubW9kZWxbaXRlbS5rZXldO1xuICAgIH1cbiAgICBpZiAoaXRlbS5zZWxlY3RlZFZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBpdGVtLnNlbGVjdGVkVmFsdWU7XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBwcml2YXRlIGNvZXJjZVRvU2luZ2xlVmFsdWUodmFsdWU6IGFueSk6IGFueSB7XG4gICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICByZXR1cm4gdmFsdWUubGVuZ3RoID8gdmFsdWVbMF0gOiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0SW5pdGlhbERhdGVSYW5nZVZhbHVlKGl0ZW06IER5bmFtaWNGaWx0ZXJJdGVtKTogeyBzdGFydDogRGF0ZSB8IG51bGw7IGVuZDogRGF0ZSB8IG51bGwgfSB7XG4gICAgY29uc3QgbW9kZWxWYWx1ZSA9IHRoaXMubW9kZWw/LltpdGVtLmtleV07XG4gICAgY29uc3Qgc3RhcnRTb3VyY2UgPSBtb2RlbFZhbHVlPy5zdGFydCA/PyBpdGVtLnNlbGVjdGVkU3RhcnREYXRlID8/IG51bGw7XG4gICAgY29uc3QgZW5kU291cmNlID0gbW9kZWxWYWx1ZT8uZW5kID8/IGl0ZW0uc2VsZWN0ZWRFbmREYXRlID8/IG51bGw7XG4gICAgY29uc3Qgc3RhcnQgPSB0aGlzLm5vcm1hbGl6ZURhdGVWYWx1ZShzdGFydFNvdXJjZSk7XG4gICAgY29uc3QgZW5kID0gdGhpcy5ub3JtYWxpemVEYXRlVmFsdWUoZW5kU291cmNlKTtcbiAgICBjb25zdCBjbGFtcCA9IChkOiBEYXRlIHwgbnVsbCkgPT4gKGQgJiYgZC5nZXRUaW1lKCkgPiB0aGlzLm1heERhdGUuZ2V0VGltZSgpID8gdGhpcy5tYXhEYXRlIDogZCk7XG4gICAgcmV0dXJuIHsgc3RhcnQ6IGNsYW1wKHN0YXJ0KSwgZW5kOiBjbGFtcChlbmQpIH07XG4gIH1cblxuICBwcml2YXRlIG5vcm1hbGl6ZURhdGVWYWx1ZSh2YWx1ZTogYW55KTogRGF0ZSB8IG51bGwge1xuICAgIGlmICghdmFsdWUpIHJldHVybiBudWxsO1xuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUgJiYgIWlzTmFOKHZhbHVlLmdldFRpbWUoKSkpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgY29uc3QgcGFyc2VkID0gbmV3IERhdGUodmFsdWUpO1xuICAgIHJldHVybiBpc05hTihwYXJzZWQuZ2V0VGltZSgpKSA/IG51bGwgOiBwYXJzZWQ7XG4gIH1cblxuICBwcml2YXRlIGludm9rZURhdGVSYW5nZUNoYW5nZShrZXk6IHN0cmluZywgZXZlbnQ/OiBNYXREYXRlcGlja2VySW5wdXRFdmVudDxEYXRlPiB8IEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgaXRlbSA9ICh0aGlzLmNvbmZpZyB8fCBbXSkuZmluZChjZmcgPT4gY2ZnLmtleSA9PT0ga2V5KTtcbiAgICBpZiAoIWl0ZW0/Lm9uRGF0ZUNoYW5nZSkgcmV0dXJuO1xuICAgIGNvbnN0IGRhdGVHcm91cCA9IHRoaXMuZ2V0RGF0ZUdyb3VwKGtleSk7XG4gICAgaWYgKCFkYXRlR3JvdXApIHJldHVybjtcbiAgICBjb25zdCB7IHN0YXJ0LCBlbmQgfSA9IGRhdGVHcm91cC5nZXRSYXdWYWx1ZSgpIHx8IHt9O1xuICAgIGl0ZW0ub25EYXRlQ2hhbmdlKFxuICAgICAge1xuICAgICAgICBzdGFydDogdGhpcy5ub3JtYWxpemVEYXRlVmFsdWUoc3RhcnQpLFxuICAgICAgICBlbmQ6IHRoaXMubm9ybWFsaXplRGF0ZVZhbHVlKGVuZCksXG4gICAgICB9LFxuICAgICAgZXZlbnRcbiAgICApO1xuICB9XG5cbiAgLy8gTWF0IGRhdGUgcmFuZ2UgcGlja2VyIG92ZXJsYXkgcHJlc2V0IGhlbHBlcnNcbiAgYXBwbHlQcmVzZXRUb0dyb3VwKGtleTogc3RyaW5nLCBwcmVzZXRLZXk6ICd0b2RheScgfCAnbGFzdDdkYXlzJyB8ICdsYXN0MzBkYXlzJyB8ICdsYXN0OTBkYXlzJyB8ICdsYXN0M21vbnRocycgfCAndGhpc21vbnRoJyB8ICdsYXN0bW9udGgnKTogdm9pZCB7XG4gICAgY29uc3QgZGF0ZUdyb3VwID0gdGhpcy5nZXREYXRlR3JvdXAoa2V5KTtcbiAgICBpZiAoIWRhdGVHcm91cCkgcmV0dXJuO1xuICAgIGNvbnN0IHsgc3RhcnQsIGVuZCB9ID0gdGhpcy5nZXRQcmVzZXREYXRlcyhwcmVzZXRLZXkpO1xuICAgIGRhdGVHcm91cC5wYXRjaFZhbHVlKHsgc3RhcnQsIGVuZCB9KTtcbiAgICB0aGlzLmZpbHRlcnNDaGFuZ2VkLmVtaXQodGhpcy5zZXJpYWxpemUoKSk7XG4gICAgdGhpcy5pbnZva2VEYXRlUmFuZ2VDaGFuZ2Uoa2V5KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0UHJlc2V0RGF0ZXMocHJlc2V0S2V5OiAndG9kYXknIHwgJ2xhc3Q3ZGF5cycgfCAnbGFzdDMwZGF5cycgfCAnbGFzdDkwZGF5cycgfCAnbGFzdDNtb250aHMnIHwgJ3RoaXNtb250aCcgfCAnbGFzdG1vbnRoJyk6IHsgc3RhcnQ6IERhdGU7IGVuZDogRGF0ZSB9IHtcbiAgICBjb25zdCB0b2RheSA9IG5ldyBEYXRlKCk7XG4gICAgY29uc3QgY2xhbXBUb0VuZE9mVG9kYXkgPSAoZDogRGF0ZSkgPT4geyBjb25zdCBuZCA9IG5ldyBEYXRlKGQpOyBuZC5zZXRIb3VycygyMyw1OSw1OSw5OTkpOyByZXR1cm4gbmQ7IH07XG4gICAgc3dpdGNoIChwcmVzZXRLZXkpIHtcbiAgICAgIGNhc2UgJ3RvZGF5JzpcbiAgICAgICAgcmV0dXJuIHsgc3RhcnQ6IHRvZGF5LCBlbmQ6IHRvZGF5IH07XG4gICAgICBjYXNlICdsYXN0N2RheXMnOiB7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gbmV3IERhdGUoKTsgc3RhcnQuc2V0RGF0ZShzdGFydC5nZXREYXRlKCkgLSA2KTtcbiAgICAgICAgcmV0dXJuIHsgc3RhcnQsIGVuZDogdG9kYXkgfTtcbiAgICAgIH1cbiAgICAgIGNhc2UgJ2xhc3QzMGRheXMnOiB7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gbmV3IERhdGUoKTsgc3RhcnQuc2V0RGF0ZShzdGFydC5nZXREYXRlKCkgLSAyOSk7XG4gICAgICAgIHJldHVybiB7IHN0YXJ0LCBlbmQ6IHRvZGF5IH07XG4gICAgICB9XG4gICAgICBjYXNlICdsYXN0OTBkYXlzJzoge1xuICAgICAgICBjb25zdCBzdGFydCA9IG5ldyBEYXRlKCk7IHN0YXJ0LnNldERhdGUoc3RhcnQuZ2V0RGF0ZSgpIC0gODkpO1xuICAgICAgICByZXR1cm4geyBzdGFydCwgZW5kOiB0b2RheSB9O1xuICAgICAgfVxuICAgICAgY2FzZSAnbGFzdDNtb250aHMnOiB7XG4gICAgICAgIC8vIFN0YXJ0IGZyb20gdGhlIGZpcnN0IGRheSBvZiB0aGUgbW9udGggdHdvIG1vbnRocyBhZ28gKGNvdmVycyBjdXJyZW50ICsgcHJldmlvdXMgMiBtb250aHMpLlxuICAgICAgICBjb25zdCBzdGFydCA9IG5ldyBEYXRlKHRvZGF5LmdldEZ1bGxZZWFyKCksIHRvZGF5LmdldE1vbnRoKCkgLSAyLCAxKTtcbiAgICAgICAgcmV0dXJuIHsgc3RhcnQsIGVuZDogdG9kYXkgfTtcbiAgICAgIH1cbiAgICAgIGNhc2UgJ3RoaXNtb250aCc6IHtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBuZXcgRGF0ZSh0b2RheS5nZXRGdWxsWWVhcigpLCB0b2RheS5nZXRNb250aCgpLCAxKTtcbiAgICAgICAgcmV0dXJuIHsgc3RhcnQsIGVuZDogdG9kYXkgfTtcbiAgICAgIH1cbiAgICAgIGNhc2UgJ2xhc3Rtb250aCc6IHtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBuZXcgRGF0ZSh0b2RheS5nZXRGdWxsWWVhcigpLCB0b2RheS5nZXRNb250aCgpIC0gMSwgMSk7XG4gICAgICAgIGNvbnN0IGVuZCA9IG5ldyBEYXRlKHRvZGF5LmdldEZ1bGxZZWFyKCksIHRvZGF5LmdldE1vbnRoKCksIDApO1xuICAgICAgICByZXR1cm4geyBzdGFydCwgZW5kOiBjbGFtcFRvRW5kT2ZUb2RheShlbmQpIH07XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHByaXZhdGUgc3RhcnRPZkRheShkOiBEYXRlKTogRGF0ZSB7IGNvbnN0IG5kID0gbmV3IERhdGUoZCk7IG5kLnNldEhvdXJzKDAsMCwwLDApOyByZXR1cm4gbmQ7IH1cbiAgcHJpdmF0ZSBlbmRPZkRheShkOiBEYXRlKTogRGF0ZSB7IGNvbnN0IG5kID0gbmV3IERhdGUoZCk7IG5kLnNldEhvdXJzKDIzLDU5LDU5LDk5OSk7IHJldHVybiBuZDsgfVxuICBwcml2YXRlIHN0YXJ0T2ZNb250aCh5ZWFyOiBudW1iZXIsIG1vbnRoOiBudW1iZXIpOiBEYXRlIHsgcmV0dXJuIG5ldyBEYXRlKHllYXIsIG1vbnRoLCAxLCAwLDAsMCwwKTsgfVxuICBwcml2YXRlIGVuZE9mTW9udGgoeWVhcjogbnVtYmVyLCBtb250aDogbnVtYmVyKTogRGF0ZSB7IHJldHVybiBuZXcgRGF0ZSh5ZWFyLCBtb250aCArIDEsIDAsIDIzLDU5LDU5LDk5OSk7IH1cbiAgcHJpdmF0ZSBidWlsZE5neFJhbmdlcygpOiBSZWNvcmQ8c3RyaW5nLCBbRGF0ZSwgRGF0ZV0+IHtcbiAgICBjb25zdCB0b2RheSA9IG5ldyBEYXRlKCk7XG4gICAgY29uc3QgbGFzdDdTdGFydCA9IG5ldyBEYXRlKCk7IGxhc3Q3U3RhcnQuc2V0RGF0ZShsYXN0N1N0YXJ0LmdldERhdGUoKSAtIDYpO1xuICAgIGNvbnN0IGxhc3QzMFN0YXJ0ID0gbmV3IERhdGUoKTsgbGFzdDMwU3RhcnQuc2V0RGF0ZShsYXN0MzBTdGFydC5nZXREYXRlKCkgLSAyOSk7XG4gICAgY29uc3QgbGFzdDkwU3RhcnQgPSBuZXcgRGF0ZSgpOyBsYXN0OTBTdGFydC5zZXREYXRlKGxhc3Q5MFN0YXJ0LmdldERhdGUoKSAtIDg5KTtcbiAgICBjb25zdCBsYXN0M01vbnRoc1N0YXJ0ID0gdGhpcy5zdGFydE9mTW9udGgodG9kYXkuZ2V0RnVsbFllYXIoKSwgdG9kYXkuZ2V0TW9udGgoKSAtIDIpO1xuICAgIGNvbnN0IHRoaXNNb250aFN0YXJ0ID0gdGhpcy5zdGFydE9mTW9udGgodG9kYXkuZ2V0RnVsbFllYXIoKSwgdG9kYXkuZ2V0TW9udGgoKSk7XG4gICAgY29uc3QgbGFzdE1vbnRoU3RhcnQgPSB0aGlzLnN0YXJ0T2ZNb250aCh0b2RheS5nZXRGdWxsWWVhcigpLCB0b2RheS5nZXRNb250aCgpIC0gMSk7XG4gICAgY29uc3QgbGFzdE1vbnRoRW5kID0gdGhpcy5lbmRPZk1vbnRoKHRvZGF5LmdldEZ1bGxZZWFyKCksIHRvZGF5LmdldE1vbnRoKCkgLSAxKTtcbiAgICByZXR1cm4ge1xuICAgICAgJ1RvZGF5JzogW3RoaXMuc3RhcnRPZkRheSh0b2RheSksIHRoaXMuZW5kT2ZEYXkodG9kYXkpXSxcbiAgICAgICdMYXN0IDcgRGF5cyc6IFt0aGlzLnN0YXJ0T2ZEYXkobGFzdDdTdGFydCksIHRoaXMuZW5kT2ZEYXkodG9kYXkpXSxcbiAgICAgICdMYXN0IDMwIERheXMnOiBbdGhpcy5zdGFydE9mRGF5KGxhc3QzMFN0YXJ0KSwgdGhpcy5lbmRPZkRheSh0b2RheSldLFxuICAgICAgJ0xhc3QgOTAgRGF5cyc6IFt0aGlzLnN0YXJ0T2ZEYXkobGFzdDkwU3RhcnQpLCB0aGlzLmVuZE9mRGF5KHRvZGF5KV0sXG4gICAgICAnTGFzdCAzIE1vbnRocyc6IFt0aGlzLnN0YXJ0T2ZEYXkobGFzdDNNb250aHNTdGFydCksIHRoaXMuZW5kT2ZEYXkodG9kYXkpXSxcbiAgICAgICdUaGlzIE1vbnRoJzogW3RoaXMuc3RhcnRPZkRheSh0aGlzTW9udGhTdGFydCksIHRoaXMuZW5kT2ZEYXkodG9kYXkpXSxcbiAgICAgICdMYXN0IE1vbnRoJzogW3RoaXMuc3RhcnRPZkRheShsYXN0TW9udGhTdGFydCksIHRoaXMuZW5kT2ZEYXkobGFzdE1vbnRoRW5kKV0sXG4gICAgfTtcbiAgfVxuICBvbkRhdGVyYW5nZXBpY2tlckNoYW5nZShldmVudDogeyBzdGFydERhdGU6IERhdGUgfCBudWxsOyBlbmREYXRlOiBEYXRlIHwgbnVsbCB9LCBrZXk6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGdyb3VwID0gdGhpcy5nZXREYXRlR3JvdXAoa2V5KTtcbiAgICBpZiAoIWdyb3VwKSByZXR1cm47XG4gICAgXG4gICAgZ3JvdXAucGF0Y2hWYWx1ZSh7XG4gICAgICBzdGFydDogZXZlbnQuc3RhcnREYXRlLFxuICAgICAgZW5kOiBldmVudC5lbmREYXRlXG4gICAgfSwgeyBlbWl0RXZlbnQ6IHRydWUgfSk7XG4gICAgXG4gICAgY29uc3Qgc2VyaWFsaXplZCA9IHRoaXMuc2VyaWFsaXplKCk7XG4gICAgdGhpcy5oYXNTZWxlY3RlZEZpbHRlcnMgPSBPYmplY3Qua2V5cyhzZXJpYWxpemVkKS5sZW5ndGggPiAwO1xuICAgIHRoaXMuZmlsdGVyc0NoYW5nZWQuZW1pdChzZXJpYWxpemVkKTtcbiAgICB0aGlzLmludm9rZURhdGVSYW5nZUNoYW5nZShrZXkpO1xuICB9XG5cbiAgb25EYXRlcmFuZ2VwaWNrZXJBcHBseShldmVudDogeyBzdGFydERhdGU6IERhdGUgfCBudWxsOyBlbmREYXRlOiBEYXRlIHwgbnVsbCB9LCBrZXk6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMub25EYXRlcmFuZ2VwaWNrZXJDaGFuZ2UoZXZlbnQsIGtleSk7XG4gICAgLy8gT3B0aW9uYWxseSB0cmlnZ2VyIGFwcGx5IGFjdGlvblxuICAgIGNvbnN0IHNlcmlhbGl6ZWQgPSB0aGlzLnNlcmlhbGl6ZSgpO1xuICAgIGlmIChldmVudC5zdGFydERhdGUgJiYgZXZlbnQuZW5kRGF0ZSkge1xuICAgICAgLy8gRG9uJ3QgYXV0by1hcHBseSwgbGV0IHVzZXIgY2xpY2sgQXBwbHkgRmlsdGVyIGJ1dHRvblxuICAgIH1cbiAgfVxuXG4gIGdldERhdGVyYW5nZXBpY2tlclJhbmdlcygpOiBhbnkge1xuICAgIC8vIFVzZSB0aGUgZXhpc3RpbmcgZ2V0UHJlc2V0RGF0ZXMgbG9naWMgdG8gZW5zdXJlIGNvbnNpc3RlbmN5XG4gICAgY29uc3QgdG9kYXlQcmVzZXQgPSB0aGlzLmdldFByZXNldERhdGVzKCd0b2RheScpO1xuICAgIGNvbnN0IGxhc3Q3UHJlc2V0ID0gdGhpcy5nZXRQcmVzZXREYXRlcygnbGFzdDdkYXlzJyk7XG4gICAgY29uc3QgbGFzdDMwUHJlc2V0ID0gdGhpcy5nZXRQcmVzZXREYXRlcygnbGFzdDMwZGF5cycpO1xuICAgIGNvbnN0IGxhc3Q5MFByZXNldCA9IHRoaXMuZ2V0UHJlc2V0RGF0ZXMoJ2xhc3Q5MGRheXMnKTtcbiAgICBjb25zdCBsYXN0M01vbnRoc1ByZXNldCA9IHRoaXMuZ2V0UHJlc2V0RGF0ZXMoJ2xhc3QzbW9udGhzJyk7XG4gICAgY29uc3QgdGhpc01vbnRoUHJlc2V0ID0gdGhpcy5nZXRQcmVzZXREYXRlcygndGhpc21vbnRoJyk7XG4gICAgY29uc3QgbGFzdE1vbnRoUHJlc2V0ID0gdGhpcy5nZXRQcmVzZXREYXRlcygnbGFzdG1vbnRoJyk7XG4gICAgXG4gICAgcmV0dXJuIHtcbiAgICAgICdUb2RheSc6IFt0b2RheVByZXNldC5zdGFydCwgdGhpcy5lbmRPZkRheSh0b2RheVByZXNldC5lbmQpXSxcbiAgICAgICdMYXN0IDcgRGF5cyc6IFtsYXN0N1ByZXNldC5zdGFydCwgdGhpcy5lbmRPZkRheShsYXN0N1ByZXNldC5lbmQpXSxcbiAgICAgICdMYXN0IDMwIERheXMnOiBbbGFzdDMwUHJlc2V0LnN0YXJ0LCB0aGlzLmVuZE9mRGF5KGxhc3QzMFByZXNldC5lbmQpXSxcbiAgICAgICdMYXN0IDkwIERheXMnOiBbbGFzdDkwUHJlc2V0LnN0YXJ0LCB0aGlzLmVuZE9mRGF5KGxhc3Q5MFByZXNldC5lbmQpXSxcbiAgICAgICdMYXN0IDMgTW9udGhzJzogW2xhc3QzTW9udGhzUHJlc2V0LnN0YXJ0LCB0aGlzLmVuZE9mRGF5KGxhc3QzTW9udGhzUHJlc2V0LmVuZCldLFxuICAgICAgJ1RoaXMgTW9udGgnOiBbdGhpc01vbnRoUHJlc2V0LnN0YXJ0LCB0aGlzLmVuZE9mRGF5KHRoaXNNb250aFByZXNldC5lbmQpXSxcbiAgICAgICdMYXN0IE1vbnRoJzogW2xhc3RNb250aFByZXNldC5zdGFydCwgdGhpcy5lbmRPZkRheShsYXN0TW9udGhQcmVzZXQuZW5kKV1cbiAgICB9O1xuICB9XG5cbiAgZ2V0RGF0ZVZhbGlkYXRpb25FcnJvcihrZXk6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICAgIGNvbnN0IGRhdGVHcm91cCA9IHRoaXMuZ2V0RGF0ZUdyb3VwKGtleSk7XG4gICAgaWYgKCFkYXRlR3JvdXApIHJldHVybiBudWxsO1xuXG4gICAgY29uc3Qgc3RhcnRDdHJsID0gZGF0ZUdyb3VwLmNvbnRyb2xzWydzdGFydCddO1xuICAgIGNvbnN0IGVuZEN0cmwgPSBkYXRlR3JvdXAuY29udHJvbHNbJ2VuZCddO1xuICAgIGNvbnN0IHN0YXJ0VmFsID0gc3RhcnRDdHJsPy52YWx1ZTtcbiAgICBjb25zdCBlbmRWYWwgPSBlbmRDdHJsPy52YWx1ZTtcbiAgICBjb25zdCBzdGFydFBhcnNlRXJyID0gc3RhcnRDdHJsPy5lcnJvcnM/LlsnbWF0RGF0ZXBpY2tlclBhcnNlJ10/LnRleHQ7XG4gICAgY29uc3QgZW5kUGFyc2VFcnIgPSBlbmRDdHJsPy5lcnJvcnM/LlsnbWF0RGF0ZXBpY2tlclBhcnNlJ10/LnRleHQ7XG5cbiAgICBpZiAoIXN0YXJ0VmFsICYmICFlbmRWYWwgJiYgIXN0YXJ0UGFyc2VFcnIgJiYgIWVuZFBhcnNlRXJyKSByZXR1cm4gbnVsbDtcblxuICAgIGlmIChzdGFydFBhcnNlRXJyKSByZXR1cm4gYEludmFsaWQgc3RhcnQgZGF0ZSBmb3JtYXRgO1xuICAgIGlmIChlbmRQYXJzZUVycikgcmV0dXJuIGBJbnZhbGlkIGVuZCBkYXRlIGZvcm1hdGA7XG5cbiAgICBpZiAoc3RhcnRWYWwgJiYgIWVuZFZhbCkgcmV0dXJuIGBQbGVhc2Ugc2VsZWN0IGFuIGVuZCBkYXRlYDtcbiAgICBpZiAoIXN0YXJ0VmFsICYmIGVuZFZhbCkgcmV0dXJuIGBQbGVhc2Ugc2VsZWN0IGEgc3RhcnQgZGF0ZWA7XG5cbiAgICBpZiAoZGF0ZUdyb3VwLmhhc0Vycm9yKCdtYXRTdGFydERhdGVJbnZhbGlkJykpIHJldHVybiBgU3RhcnQgZGF0ZSBtdXN0IGJlIGJlZm9yZSBlbmQgZGF0ZWA7XG4gICAgaWYgKGRhdGVHcm91cC5oYXNFcnJvcignbWF0RW5kRGF0ZUludmFsaWQnKSkgcmV0dXJuIGBFbmQgZGF0ZSBtdXN0IGJlIGFmdGVyIHN0YXJ0IGRhdGVgO1xuXG4gICAgaWYgKGRhdGVHcm91cC5pbnZhbGlkKSB7XG4gICAgICBjb25zdCBjb25maWcgPSB0aGlzLmNvbmZpZz8uZmluZChjID0+IGMua2V5ID09PSBrZXkpO1xuICAgICAgcmV0dXJuIGNvbmZpZyA/IGAke2NvbmZpZy5sYWJlbH0gaXMgaW52YWxpZGAgOiAnRGF0ZSByYW5nZSBpcyBpbnZhbGlkJztcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIER5bmFtaWMgRGF0ZSBQaWNrZXIgSW50ZWdyYXRpb24gTWV0aG9kcyByZW1vdmVkIChjb21wb25lbnQgbm8gbG9uZ2VyIHVzZWQpXG59XG5cblxuIiwiPGRpdiBjbGFzcz1cImNxYS11aS1yb290IGNxYS11aS1kYXRlcmFuZ2UtcGlja2VyXCI+XG4gIDxkaXYgY2xhc3M9XCJjcWEtZmlsdGVyIGNxYS1tYi1bMjhweF1cIiAqbmdJZj1cInNob3dGaWx0ZXJQYW5lbFwiIHN0eWxlPVwiaGVpZ2h0OiBhdXRvO1wiPlxuICAgIDwhLS0gQm90dG9tIExheW91dDogQ3VycmVudCBkZXNpZ24gd2l0aCBzZWxlY3RvcnMgaW4gZ3JpZCBhbmQgYnV0dG9ucyBiZWxvdyAtLT5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYnV0dG9uTGF5b3V0ID09PSAnYm90dG9tJ1wiPlxuICAgICAgPGZvcm0gY2xhc3M9XCJ0cy1mb3JtIGNxYS1ncmlkIGxnOmNxYS1ncmlkLWNvbHMtNCBtZDpjcWEtZ3JpZC1jb2xzLTIgY3FhLWdhcC00IGNxYS1yZWxhdGl2ZVwiIFtmb3JtR3JvdXBdPVwiZm9ybVwiXG4gICAgICAgIChrZXlkb3duLmVudGVyKT1cIihmYWxzZSlcIiBub3ZhbGlkYXRlPVwibm92YWxpZGF0ZVwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjIG9mIGNvbmZpZ1wiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhYy5oaWRkZW5cIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIGN1cy1yYW5nZS1zZWxlY3QgY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1nYXAtMiBjcWEtZmxleC1zaHJpbmstMCBmaWx0ZXItc2VsZWN0b3Itd2lkdGggY3FhLXctZnVsbFwiPlxuICAgICAgICAgICAgICA8IS0tIFNlbGVjdCAtLT5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImMudHlwZSA9PT0gJ3NlbGVjdCdcIj5cbiAgICAgICAgICAgICAgICA8Y3FhLWR5bmFtaWMtc2VsZWN0IFtmb3JtXT1cImZvcm1cIiBbY29uZmlnXT1cImdldFNlbGVjdENvbmZpZyhjKVwiPjwvY3FhLWR5bmFtaWMtc2VsZWN0PlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICA8IS0tIERhdGUgUmFuZ2UgUGlja2VyIC0tPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYy50eXBlID09PSAnZGF0ZS1yYW5nZS1waWNrZXInXCI+XG4gICAgICAgICAgICAgICAgPGNxYS1kYXRlcmFuZ2VwaWNrZXJcbiAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJjLmxhYmVsXCJcbiAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJjLnBsYWNlaG9sZGVyIHx8ICdTdGFydCBEYXRlIC0gRW5kIERhdGUnXCJcbiAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJjLmRpc2FibGVkIHx8IGZhbHNlXCJcbiAgICAgICAgICAgICAgICAgIFtzdGFydERhdGVdPVwiZ2V0RGF0ZUdyb3VwKGMua2V5KT8uZ2V0KCdzdGFydCcpPy52YWx1ZVwiXG4gICAgICAgICAgICAgICAgICBbZW5kRGF0ZV09XCJnZXREYXRlR3JvdXAoYy5rZXkpPy5nZXQoJ2VuZCcpPy52YWx1ZVwiXG4gICAgICAgICAgICAgICAgICBbbWluRGF0ZV09XCJ1bmRlZmluZWRcIlxuICAgICAgICAgICAgICAgICAgW21heERhdGVdPVwibWF4RGF0ZVwiXG4gICAgICAgICAgICAgICAgICBbcmFuZ2VzXT1cImdldERhdGVyYW5nZXBpY2tlclJhbmdlcygpXCJcbiAgICAgICAgICAgICAgICAgIFthdXRvQXBwbHldPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICBbYWx3YXlzU2hvd0NhbGVuZGFyc109XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgIFtwYXJlbnRFbF09XCJjLnBhcmVudEVsXCJcbiAgICAgICAgICAgICAgICAgIChkYXRlc1VwZGF0ZWQpPVwib25EYXRlcmFuZ2VwaWNrZXJDaGFuZ2UoJGV2ZW50LCBjLmtleSlcIlxuICAgICAgICAgICAgICAgICAgKGFwcGx5Q2xpY2tlZCk9XCJvbkRhdGVyYW5nZXBpY2tlckFwcGx5KCRldmVudCwgYy5rZXkpXCI+XG4gICAgICAgICAgICAgICAgPC9jcWEtZGF0ZXJhbmdlcGlja2VyPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJnZXREYXRlR3JvdXAoYy5rZXkpPy5pbnZhbGlkICYmIGdldERhdGVHcm91cChjLmtleSk/LnRvdWNoZWRcIj5cbiAgICAgICAgICAgICAgICAgIHt7IGdldERhdGVWYWxpZGF0aW9uRXJyb3IoYy5rZXkpIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9mb3JtPlxuXG4gICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWp1c3RpZnktZW5kIGNxYS1pdGVtcy1zdHJldGNoIGNxYS1nYXAtMiBjcWEtbXQtNFwiPlxuICAgICAgICA8Y3FhLWJ1dHRvbiB2YXJpYW50PVwiZmlsbGVkXCIgKG1vdXNlZG93bik9XCJwcmVwYXJlUHJpbWFyeUFjdGlvbigpXCIgKGNsaWNrZWQpPVwiYXBwbHkoKVwiIFtkaXNhYmxlZF09XCIhaGFzU2VsZWN0ZWRGaWx0ZXJzXCI+QXBwbHkgRmlsdGVyPC9jcWEtYnV0dG9uPlxuICAgICAgICA8Y3FhLWJ1dHRvbiB2YXJpYW50PVwib3V0bGluZWRcIiAobW91c2Vkb3duKT1cInByZXBhcmVQcmltYXJ5QWN0aW9uKClcIiAoY2xpY2tlZCk9XCJyZXNldCgpXCI+UmVzZXQ8L2NxYS1idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDwhLS0gUmlnaHQgTGF5b3V0OiBCdXR0b25zIG9uIGxlZnRtb3N0IHNpZGUsIHNlbGVjdG9ycyBvbiByaWdodG1vc3Qgc2lkZSAtLT5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYnV0dG9uTGF5b3V0ID09PSAncmlnaHQnXCI+XG4gICAgICA8Zm9ybSBjbGFzcz1cInRzLWZvcm0gY3FhLWZsZXggY3FhLWZsZXgtd3JhcCBjcWEtaXRlbXMtZW5kIGNxYS1qdXN0aWZ5LWJldHdlZW4gY3FhLWdhcC00IGNxYS11aS1kYXRlcmFuZ2UtcGlja2VyIGNxYS1yZWxhdGl2ZVwiIFtmb3JtR3JvdXBdPVwiZm9ybVwiXG4gICAgICAgIChrZXlkb3duLmVudGVyKT1cIihmYWxzZSlcIiBub3ZhbGlkYXRlPVwibm92YWxpZGF0ZVwiIHN0eWxlPVwiaGVpZ2h0OiBhdXRvO1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLXN0cmV0Y2ggY3FhLWdhcC0yIGNxYS1mbGV4LXNocmluay0wIGNxYS1vcmRlci1maXJzdCBjcWEtbXItYXV0b1wiPlxuICAgICAgICAgIDxjcWEtYnV0dG9uIHZhcmlhbnQ9XCJmaWxsZWRcIiAoY2xpY2tlZCk9XCJhcHBseSgpXCIgW2Rpc2FibGVkXT1cIiFoYXNTZWxlY3RlZEZpbHRlcnNcIj5BcHBseSBGaWx0ZXI8L2NxYS1idXR0b24+XG4gICAgICAgICAgPGNxYS1idXR0b24gdmFyaWFudD1cIm91dGxpbmVkXCIgKGNsaWNrZWQpPVwicmVzZXQoKVwiPlJlc2V0PC9jcWEtYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LXdyYXAgY3FhLWl0ZW1zLWVuZCBjcWEtZ2FwLTQgY3FhLWZsZXgtMSBjcWEtanVzdGlmeS1lbmQgY3FhLW9yZGVyLWxhc3QgY3FhLW1sLWF1dG9cIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjIG9mIGNvbmZpZ1wiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhYy5oaWRkZW5cIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIGNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTIgY3FhLWZsZXgtc2hyaW5rLTAgZmlsdGVyLXNlbGVjdG9yLXdpZHRoXCI+XG4gICAgICAgICAgICAgIDwhLS0gU2VsZWN0IC0tPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYy50eXBlID09PSAnc2VsZWN0J1wiPlxuICAgICAgICAgICAgICAgIDxjcWEtZHluYW1pYy1zZWxlY3QgW2Zvcm1dPVwiZm9ybVwiIFtjb25maWddPVwiZ2V0U2VsZWN0Q29uZmlnKGMpXCI+PC9jcWEtZHluYW1pYy1zZWxlY3Q+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgIDwhLS0gRGF0ZSBSYW5nZSAoRGF0ZXJhbmdlcGlja2VyKSAtLT4gXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjLnR5cGUgPT09ICdkYXRlLXJhbmdlLXBpY2tlcidcIj5cbiAgICAgICAgICAgICAgICA8Y3FhLWRhdGVyYW5nZXBpY2tlclxuICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cImMubGFiZWxcIlxuICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImMucGxhY2Vob2xkZXIgfHwgJ1N0YXJ0IERhdGUgLSBFbmQgRGF0ZSdcIlxuICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImMuZGlzYWJsZWQgfHwgZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgW3N0YXJ0RGF0ZV09XCJnZXREYXRlR3JvdXAoYy5rZXkpPy5nZXQoJ3N0YXJ0Jyk/LnZhbHVlXCJcbiAgICAgICAgICAgICAgICAgIFtlbmREYXRlXT1cImdldERhdGVHcm91cChjLmtleSk/LmdldCgnZW5kJyk/LnZhbHVlXCJcbiAgICAgICAgICAgICAgICAgIFttaW5EYXRlXT1cInVuZGVmaW5lZFwiXG4gICAgICAgICAgICAgICAgICBbbWF4RGF0ZV09XCJtYXhEYXRlXCJcbiAgICAgICAgICAgICAgICAgIFtyYW5nZXNdPVwiZ2V0RGF0ZXJhbmdlcGlja2VyUmFuZ2VzKClcIlxuICAgICAgICAgICAgICAgICAgW2F1dG9BcHBseV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgIFthbHdheXNTaG93Q2FsZW5kYXJzXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgW3BhcmVudEVsXT1cImMucGFyZW50RWxcIlxuICAgICAgICAgICAgICAgICAgKGRhdGVzVXBkYXRlZCk9XCJvbkRhdGVyYW5nZXBpY2tlckNoYW5nZSgkZXZlbnQsIGMua2V5KVwiXG4gICAgICAgICAgICAgICAgICAoYXBwbHlDbGlja2VkKT1cIm9uRGF0ZXJhbmdlcGlja2VyQXBwbHkoJGV2ZW50LCBjLmtleSlcIj5cbiAgICAgICAgICAgICAgICA8L2NxYS1kYXRlcmFuZ2VwaWNrZXI+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj1cImdldERhdGVHcm91cChjLmtleSk/LmludmFsaWQgJiYgZ2V0RGF0ZUdyb3VwKGMua2V5KT8udG91Y2hlZFwiPlxuICAgICAgICAgICAgICAgICAge3sgZ2V0RGF0ZVZhbGlkYXRpb25FcnJvcihjLmtleSkgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9mb3JtPlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPCEtLSBMZWZ0IExheW91dDogU2VsZWN0b3JzIG9uIGxlZnRtb3N0IHNpZGUsIGJ1dHRvbnMgb24gcmlnaHRtb3N0IHNpZGUgLS0+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImJ1dHRvbkxheW91dCA9PT0gJ2xlZnQnXCI+XG4gICAgICA8Zm9ybSBjbGFzcz1cInRzLWZvcm0gY3FhLWZsZXggY3FhLWZsZXgtd3JhcCBjcWEtaXRlbXMtZW5kIGNxYS1qdXN0aWZ5LWJldHdlZW4gY3FhLWdhcC00IGNxYS11aS1kYXRlcmFuZ2UtcGlja2VyIGNxYS1yZWxhdGl2ZVwiIFtmb3JtR3JvdXBdPVwiZm9ybVwiXG4gICAgICAgIChrZXlkb3duLmVudGVyKT1cIihmYWxzZSlcIiBub3ZhbGlkYXRlPVwibm92YWxpZGF0ZVwiIHN0eWxlPVwiaGVpZ2h0OiBhdXRvO1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtd3JhcCBjcWEtaXRlbXMtZW5kIGNxYS1nYXAtNCBjcWEtZmxleC0xIGNxYS1vcmRlci1maXJzdCBjcWEtbXItYXV0b1wiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGMgb2YgY29uZmlnXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFjLmhpZGRlblwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1nYXAtMiBjcWEtZmxleC1zaHJpbmstMCBmaWx0ZXItc2VsZWN0b3Itd2lkdGhcIj5cbiAgICAgICAgICAgICAgPCEtLSBTZWxlY3QgLS0+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjLnR5cGUgPT09ICdzZWxlY3QnXCI+XG4gICAgICAgICAgICAgICAgPGNxYS1keW5hbWljLXNlbGVjdCBbZm9ybV09XCJmb3JtXCIgW2NvbmZpZ109XCJnZXRTZWxlY3RDb25maWcoYylcIj48L2NxYS1keW5hbWljLXNlbGVjdD5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgPCEtLSBEYXRlIFJhbmdlIChEYXRlcmFuZ2VwaWNrZXIpIC0tPiBcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImMudHlwZSA9PT0gJ2RhdGUtcmFuZ2UtcGlja2VyJ1wiPlxuICAgICAgICAgICAgICAgIDxjcWEtZGF0ZXJhbmdlcGlja2VyXG4gICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiYy5sYWJlbFwiXG4gICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiYy5wbGFjZWhvbGRlciB8fCAnU3RhcnQgRGF0ZSAtIEVuZCBEYXRlJ1wiXG4gICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiYy5kaXNhYmxlZCB8fCBmYWxzZVwiXG4gICAgICAgICAgICAgICAgICBbc3RhcnREYXRlXT1cImdldERhdGVHcm91cChjLmtleSk/LmdldCgnc3RhcnQnKT8udmFsdWVcIlxuICAgICAgICAgICAgICAgICAgW2VuZERhdGVdPVwiZ2V0RGF0ZUdyb3VwKGMua2V5KT8uZ2V0KCdlbmQnKT8udmFsdWVcIlxuICAgICAgICAgICAgICAgICAgW21pbkRhdGVdPVwidW5kZWZpbmVkXCJcbiAgICAgICAgICAgICAgICAgIFttYXhEYXRlXT1cIm1heERhdGVcIlxuICAgICAgICAgICAgICAgICAgW3Jhbmdlc109XCJnZXREYXRlcmFuZ2VwaWNrZXJSYW5nZXMoKVwiXG4gICAgICAgICAgICAgICAgICBbYXV0b0FwcGx5XT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgW2Fsd2F5c1Nob3dDYWxlbmRhcnNdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICBbcGFyZW50RWxdPVwiYy5wYXJlbnRFbFwiXG4gICAgICAgICAgICAgICAgICAoZGF0ZXNVcGRhdGVkKT1cIm9uRGF0ZXJhbmdlcGlja2VyQ2hhbmdlKCRldmVudCwgYy5rZXkpXCJcbiAgICAgICAgICAgICAgICAgIChhcHBseUNsaWNrZWQpPVwib25EYXRlcmFuZ2VwaWNrZXJBcHBseSgkZXZlbnQsIGMua2V5KVwiPlxuICAgICAgICAgICAgICAgIDwvY3FhLWRhdGVyYW5nZXBpY2tlcj5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPVwiZ2V0RGF0ZUdyb3VwKGMua2V5KT8uaW52YWxpZCAmJiBnZXREYXRlR3JvdXAoYy5rZXkpPy50b3VjaGVkXCI+XG4gICAgICAgICAgICAgICAgICB7eyBnZXREYXRlVmFsaWRhdGlvbkVycm9yKGMua2V5KSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtc3RyZXRjaCBjcWEtZ2FwLTIgY3FhLWZsZXgtc2hyaW5rLTAgY3FhLW9yZGVyLWxhc3QgY3FhLW1sLWF1dG9cIj5cbiAgICAgICAgICA8Y3FhLWJ1dHRvbiB2YXJpYW50PVwiZmlsbGVkXCIgKG1vdXNlZG93bik9XCJwcmVwYXJlUHJpbWFyeUFjdGlvbigpXCIgKGNsaWNrZWQpPVwiYXBwbHkoKVwiIFtkaXNhYmxlZF09XCIhaGFzU2VsZWN0ZWRGaWx0ZXJzXCI+QXBwbHkgRmlsdGVyPC9jcWEtYnV0dG9uPlxuICAgICAgICAgIDxjcWEtYnV0dG9uIHZhcmlhbnQ9XCJvdXRsaW5lZFwiIChtb3VzZWRvd24pPVwicHJlcGFyZVByaW1hcnlBY3Rpb24oKVwiIChjbGlja2VkKT1cInJlc2V0KClcIj5SZXNldDwvY3FhLWJ1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Zvcm0+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuPC9kaXY+Il19