valtech-components 4.0.141 → 4.0.143

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,8 +1,8 @@
1
1
  import { CommonModule } from '@angular/common';
2
- import { ChangeDetectionStrategy, Component, computed, input, } from '@angular/core';
2
+ import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';
3
3
  import { IonIcon } from '@ionic/angular/standalone';
4
4
  import { addIcons } from 'ionicons';
5
- import { alertCircleOutline, cloudOfflineOutline, documentOutline, } from 'ionicons/icons';
5
+ import { alertCircleOutline, cloudOfflineOutline, documentOutline } from 'ionicons/icons';
6
6
  import { ButtonComponent } from '../../atoms/button/button.component';
7
7
  import { TextComponent } from '../../atoms/text/text.component';
8
8
  import { TitleComponent } from '../../atoms/title/title.component';
@@ -51,6 +51,8 @@ export class EmptyStateComponent {
51
51
  this.variantClass = computed(() => this.props().variant ?? 'empty');
52
52
  /** Icono final — custom si se pasó, default de la variante si no. */
53
53
  this.iconName = computed(() => this.props().icon ?? DEFAULT_ICON_BY_VARIANT[this.variantClass()]);
54
+ /** Emoji opcional — si está, se renderiza en lugar del icono Ionicons. */
55
+ this.emoji = computed(() => this.props().emoji);
54
56
  /** Tamaño en px. Default 64. */
55
57
  this.iconSize = computed(() => this.props().iconSize ?? 64);
56
58
  /**
@@ -80,12 +82,13 @@ export class EmptyStateComponent {
80
82
  role="status"
81
83
  aria-live="polite"
82
84
  >
83
- <ion-icon
84
- class="empty-state__icon"
85
- [name]="iconName()"
86
- [style.font-size.px]="iconSize()"
87
- aria-hidden="true"
88
- />
85
+ @if (emoji(); as e) {
86
+ <div class="empty-state__emoji" [style.font-size.px]="iconSize()" aria-hidden="true">
87
+ {{ e }}
88
+ </div>
89
+ } @else {
90
+ <ion-icon class="empty-state__icon" [name]="iconName()" [style.font-size.px]="iconSize()" aria-hidden="true" />
91
+ }
89
92
 
90
93
  <val-title
91
94
  [props]="{
@@ -108,14 +111,10 @@ export class EmptyStateComponent {
108
111
  }
109
112
 
110
113
  @if (props().action; as a) {
111
- <val-button
112
- class="empty-state__cta"
113
- [props]="ctaProps()"
114
- (click)="a.handler()"
115
- />
114
+ <val-button class="empty-state__cta" [props]="ctaProps()" (click)="a.handler()" />
116
115
  }
117
116
  </section>
118
- `, isInline: true, styles: [".empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;gap:12px;padding:32px 16px;min-height:240px}.empty-state__icon{color:var(--ion-color-medium)}.empty-state--error .empty-state__icon{color:var(--ion-color-warning, #ffb800)}.empty-state--offline .empty-state__icon{color:var(--ion-color-medium);opacity:.7}.empty-state__cta{margin-top:8px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: ButtonComponent, selector: "val-button", inputs: ["preset", "props"], outputs: ["onClick"] }, { kind: "component", type: TextComponent, selector: "val-text", inputs: ["props"] }, { kind: "component", type: TitleComponent, selector: "val-title", inputs: ["props"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
117
+ `, isInline: true, styles: [".empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;gap:12px;padding:32px 16px;min-height:240px}.empty-state__icon{color:var(--ion-color-medium)}.empty-state__emoji{line-height:1}.empty-state--error .empty-state__icon{color:var(--ion-color-warning, #ffb800)}.empty-state--offline .empty-state__icon{color:var(--ion-color-medium);opacity:.7}.empty-state__cta{margin-top:8px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: ButtonComponent, selector: "val-button", inputs: ["preset", "props"], outputs: ["onClick"] }, { kind: "component", type: TextComponent, selector: "val-text", inputs: ["props"] }, { kind: "component", type: TitleComponent, selector: "val-title", inputs: ["props"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
119
118
  }
120
119
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: EmptyStateComponent, decorators: [{
121
120
  type: Component,
@@ -127,12 +126,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
127
126
  role="status"
128
127
  aria-live="polite"
129
128
  >
130
- <ion-icon
131
- class="empty-state__icon"
132
- [name]="iconName()"
133
- [style.font-size.px]="iconSize()"
134
- aria-hidden="true"
135
- />
129
+ @if (emoji(); as e) {
130
+ <div class="empty-state__emoji" [style.font-size.px]="iconSize()" aria-hidden="true">
131
+ {{ e }}
132
+ </div>
133
+ } @else {
134
+ <ion-icon class="empty-state__icon" [name]="iconName()" [style.font-size.px]="iconSize()" aria-hidden="true" />
135
+ }
136
136
 
137
137
  <val-title
138
138
  [props]="{
@@ -155,13 +155,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
155
155
  }
156
156
 
157
157
  @if (props().action; as a) {
158
- <val-button
159
- class="empty-state__cta"
160
- [props]="ctaProps()"
161
- (click)="a.handler()"
162
- />
158
+ <val-button class="empty-state__cta" [props]="ctaProps()" (click)="a.handler()" />
163
159
  }
164
160
  </section>
165
- `, styles: [".empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;gap:12px;padding:32px 16px;min-height:240px}.empty-state__icon{color:var(--ion-color-medium)}.empty-state--error .empty-state__icon{color:var(--ion-color-warning, #ffb800)}.empty-state--offline .empty-state__icon{color:var(--ion-color-medium);opacity:.7}.empty-state__cta{margin-top:8px}\n"] }]
161
+ `, styles: [".empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;gap:12px;padding:32px 16px;min-height:240px}.empty-state__icon{color:var(--ion-color-medium)}.empty-state__emoji{line-height:1}.empty-state--error .empty-state__icon{color:var(--ion-color-warning, #ffb800)}.empty-state--offline .empty-state__icon{color:var(--ion-color-medium);opacity:.7}.empty-state__cta{margin-top:8px}\n"] }]
166
162
  }] });
167
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1wdHktc3RhdGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL21vbGVjdWxlcy9lbXB0eS1zdGF0ZS9lbXB0eS1zdGF0ZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFFBQVEsRUFDUixLQUFLLEdBQ04sTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDcEMsT0FBTyxFQUNMLGtCQUFrQixFQUNsQixtQkFBbUIsRUFDbkIsZUFBZSxHQUNoQixNQUFNLGdCQUFnQixDQUFDO0FBRXhCLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUN0RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDaEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ25FLE9BQU8sRUFBa0IsZUFBZSxFQUFFLE1BQU0sYUFBYSxDQUFDOztBQUc5RCwrRUFBK0U7QUFDL0Usc0VBQXNFO0FBQ3RFLHNFQUFzRTtBQUN0RSxRQUFRLENBQUM7SUFDUCxrQkFBa0I7SUFDbEIsbUJBQW1CO0lBQ25CLGVBQWU7Q0FDaEIsQ0FBQyxDQUFDO0FBRUgsTUFBTSx1QkFBdUIsR0FBc0M7SUFDakUsS0FBSyxFQUFFLGtCQUFrQjtJQUN6QixLQUFLLEVBQUUsc0JBQXNCO0lBQzdCLE9BQU8sRUFBRSx1QkFBdUI7Q0FDakMsQ0FBQztBQUVGOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBc0JHO0FBOEVILE1BQU0sT0FBTyxtQkFBbUI7SUE3RWhDO1FBOEVFLFVBQUssR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFzQixDQUFDO1FBRTdDLDZDQUE2QztRQUNuQyxpQkFBWSxHQUFHLFFBQVEsQ0FDL0IsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLE9BQU8sSUFBSSxPQUFPLENBQ3RDLENBQUM7UUFFRixxRUFBcUU7UUFDM0QsYUFBUSxHQUFHLFFBQVEsQ0FDM0IsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLElBQUksSUFBSSx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FDeEUsQ0FBQztRQUVGLGdDQUFnQztRQUN0QixhQUFRLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDLENBQUM7UUFFakU7Ozs7V0FJRztRQUNPLGFBQVEsR0FBRyxRQUFRLENBQWlCLEdBQUcsRUFBRTtZQUNqRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsTUFBTSxDQUFDO1lBQ25DLE9BQU87Z0JBQ0wsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLElBQUksRUFBRTtnQkFDekIsS0FBSyxFQUFFLE1BQU07Z0JBQ2IsSUFBSSxFQUFFLFFBQVE7Z0JBQ2QsSUFBSSxFQUFFLE9BQU87Z0JBQ2IsSUFBSSxFQUFFLFNBQVM7Z0JBQ2YsS0FBSyxFQUFFLE9BQU87Z0JBQ2QsS0FBSyxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxPQUFPO2FBQ3pELENBQUM7UUFDdEIsQ0FBQyxDQUFDLENBQUM7S0FDSjsrR0FqQ1ksbUJBQW1CO21HQUFuQixtQkFBbUIsOE1BeEVwQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTJDVCxzZEE3Q1MsWUFBWSwrQkFBRSxPQUFPLDJKQUFFLGVBQWUsMEdBQUUsYUFBYSx3RUFBRSxjQUFjOzs0RkEwRXBFLG1CQUFtQjtrQkE3RS9CLFNBQVM7K0JBQ0UsaUJBQWlCLGNBQ2YsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLE9BQU8sRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLGNBQWMsQ0FBQyxtQkFDL0QsdUJBQXVCLENBQUMsTUFBTSxZQUNyQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTJDVCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBjb21wdXRlZCxcbiAgaW5wdXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSW9uSWNvbiB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyL3N0YW5kYWxvbmUnO1xuaW1wb3J0IHsgYWRkSWNvbnMgfSBmcm9tICdpb25pY29ucyc7XG5pbXBvcnQge1xuICBhbGVydENpcmNsZU91dGxpbmUsXG4gIGNsb3VkT2ZmbGluZU91dGxpbmUsXG4gIGRvY3VtZW50T3V0bGluZSxcbn0gZnJvbSAnaW9uaWNvbnMvaWNvbnMnO1xuXG5pbXBvcnQgeyBCdXR0b25Db21wb25lbnQgfSBmcm9tICcuLi8uLi9hdG9tcy9idXR0b24vYnV0dG9uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUZXh0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYXRvbXMvdGV4dC90ZXh0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUaXRsZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2F0b21zL3RpdGxlL3RpdGxlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBCdXR0b25NZXRhZGF0YSwgQ29tcG9uZW50U3RhdGVzIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgRW1wdHlTdGF0ZU1ldGFkYXRhLCBFbXB0eVN0YXRlVmFyaWFudCB9IGZyb20gJy4vdHlwZXMnO1xuXG4vLyBSZWdpc3RyYSBsb3MgMyBpY29ub3MgZGVmYXVsdCAodmFyaWFudGVzKS4gU2kgbGEgcMOhZ2luYSBwYXNhIHVuIGljb25vIGN1c3RvbVxuLy8gZW4gYHByb3BzLmljb25gLCBkZWJlIHJlZ2lzdHJhcmxvIGVsbGEgbWlzbWEgY29uIGFkZEljb25zKCkg4oCUIElvbmljXG4vLyBzdGFuZGFsb25lIG5vIHJlc3VlbHZlIG5vbWJyZXMgZ2xvYmFsLCBzb2xvIGxvcyBkZWwgcmVnaXN0cnkgbG9jYWwuXG5hZGRJY29ucyh7XG4gIGFsZXJ0Q2lyY2xlT3V0bGluZSxcbiAgY2xvdWRPZmZsaW5lT3V0bGluZSxcbiAgZG9jdW1lbnRPdXRsaW5lLFxufSk7XG5cbmNvbnN0IERFRkFVTFRfSUNPTl9CWV9WQVJJQU5UOiBSZWNvcmQ8RW1wdHlTdGF0ZVZhcmlhbnQsIHN0cmluZz4gPSB7XG4gIGVtcHR5OiAnZG9jdW1lbnQtb3V0bGluZScsXG4gIGVycm9yOiAnYWxlcnQtY2lyY2xlLW91dGxpbmUnLFxuICBvZmZsaW5lOiAnY2xvdWQtb2ZmbGluZS1vdXRsaW5lJyxcbn07XG5cbi8qKlxuICogYDx2YWwtZW1wdHktc3RhdGU+YCDigJQgbW9sZWN1bGUgZGVjbGFyYXRpdm8gcGFyYSBlc3RhZG9zIGRlIFwibm8gaGF5IGRhdG9zIC9cbiAqIGh1Ym8gZXJyb3IgLyBzaW4gcmVkXCIuIFJlZW1wbGF6YSBlbCBwYXRyw7NuIGFkLWhvYyAoaW9uLWljb24gKyB2YWwtdGl0bGUgK1xuICogdmFsLXRleHQgKyB2YWwtYnV0dG9uKSBxdWUgY2FkYSBww6FnaW5hIHZlbsOtYSBpbXByb3Zpc2FuZG8uXG4gKlxuICogVXNvIHTDrXBpY286XG4gKlxuICogYGBgaHRtbFxuICogQGlmIChsb2FkaW5nKCkpIHtcbiAqICAgPHZhbC1za2VsZXRvbi1sYXlvdXQgW3Byb3BzXT1cIi4uLlwiIC8+XG4gKiB9IEBlbHNlIGlmIChlcnJvclN0YXRlKCk7IGFzIGUpIHtcbiAqICAgPHZhbC1lbXB0eS1zdGF0ZSBbcHJvcHNdPVwiZVwiIC8+XG4gKiB9IEBlbHNlIGlmIChpdGVtcygpLmxlbmd0aCA9PT0gMCkge1xuICogICA8dmFsLWVtcHR5LXN0YXRlIFtwcm9wc109XCJlbXB0eVByb3BzXCIgLz5cbiAqIH0gQGVsc2Uge1xuICogICA8IS0tIGNvbnRlbmlkbyBub3JtYWwgLS0+XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBJMThuOiBsYXMgY2FkZW5hcyB2aWVuZW4geWEgdHJhZHVjaWRhcyBlbiBsYXMgcHJvcHMgKGxhIGxpYiBlcyBhZ27Ds3N0aWNhIGRlXG4gKiBuYW1lc3BhY2VzKS4gUGFyYSB3aXJpbmcgYXV0b23DoXRpY28gZGVzZGUgdW4gZXJyb3IgY2FwdHVyYWRvLCB1c2FyIGVsXG4gKiBoZWxwZXIgYGNyZWF0ZUVycm9yU3RhdGVQcm9wcyhlcnIsIC4uLilgIChgdmFsdGVjaC1jb21wb25lbnRzYCkuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbC1lbXB0eS1zdGF0ZScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIElvbkljb24sIEJ1dHRvbkNvbXBvbmVudCwgVGV4dENvbXBvbmVudCwgVGl0bGVDb21wb25lbnRdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgdGVtcGxhdGU6IGBcbiAgICA8c2VjdGlvblxuICAgICAgY2xhc3M9XCJlbXB0eS1zdGF0ZVwiXG4gICAgICBbY2xhc3MuZW1wdHktc3RhdGUtLWVycm9yXT1cInZhcmlhbnRDbGFzcygpID09PSAnZXJyb3InXCJcbiAgICAgIFtjbGFzcy5lbXB0eS1zdGF0ZS0tb2ZmbGluZV09XCJ2YXJpYW50Q2xhc3MoKSA9PT0gJ29mZmxpbmUnXCJcbiAgICAgIHJvbGU9XCJzdGF0dXNcIlxuICAgICAgYXJpYS1saXZlPVwicG9saXRlXCJcbiAgICA+XG4gICAgICA8aW9uLWljb25cbiAgICAgICAgY2xhc3M9XCJlbXB0eS1zdGF0ZV9faWNvblwiXG4gICAgICAgIFtuYW1lXT1cImljb25OYW1lKClcIlxuICAgICAgICBbc3R5bGUuZm9udC1zaXplLnB4XT1cImljb25TaXplKClcIlxuICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgLz5cblxuICAgICAgPHZhbC10aXRsZVxuICAgICAgICBbcHJvcHNdPVwie1xuICAgICAgICAgIHNpemU6ICdsYXJnZScsXG4gICAgICAgICAgY29sb3I6ICdkYXJrJyxcbiAgICAgICAgICBib2xkOiB0cnVlLFxuICAgICAgICAgIGNvbnRlbnQ6IHByb3BzKCkudGl0bGUsXG4gICAgICAgIH1cIlxuICAgICAgLz5cblxuICAgICAgQGlmIChwcm9wcygpLmRlc2NyaXB0aW9uOyBhcyBkZXNjKSB7XG4gICAgICAgIDx2YWwtdGV4dFxuICAgICAgICAgIFtwcm9wc109XCJ7XG4gICAgICAgICAgICBzaXplOiAnbGFyZ2UnLFxuICAgICAgICAgICAgY29sb3I6ICdtZWRpdW0nLFxuICAgICAgICAgICAgYm9sZDogZmFsc2UsXG4gICAgICAgICAgICBjb250ZW50OiBkZXNjLFxuICAgICAgICAgIH1cIlxuICAgICAgICAvPlxuICAgICAgfVxuXG4gICAgICBAaWYgKHByb3BzKCkuYWN0aW9uOyBhcyBhKSB7XG4gICAgICAgIDx2YWwtYnV0dG9uXG4gICAgICAgICAgY2xhc3M9XCJlbXB0eS1zdGF0ZV9fY3RhXCJcbiAgICAgICAgICBbcHJvcHNdPVwiY3RhUHJvcHMoKVwiXG4gICAgICAgICAgKGNsaWNrKT1cImEuaGFuZGxlcigpXCJcbiAgICAgICAgLz5cbiAgICAgIH1cbiAgICA8L3NlY3Rpb24+XG4gIGAsXG4gIHN0eWxlczogW1xuICAgIGBcbiAgICAgIC5lbXB0eS1zdGF0ZSB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICAgIGdhcDogMTJweDtcbiAgICAgICAgcGFkZGluZzogMzJweCAxNnB4O1xuICAgICAgICBtaW4taGVpZ2h0OiAyNDBweDtcbiAgICAgIH1cbiAgICAgIC5lbXB0eS1zdGF0ZV9faWNvbiB7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tY29sb3ItbWVkaXVtKTtcbiAgICAgIH1cbiAgICAgIC5lbXB0eS1zdGF0ZS0tZXJyb3IgLmVtcHR5LXN0YXRlX19pY29uIHtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi1jb2xvci13YXJuaW5nLCAjZmZiODAwKTtcbiAgICAgIH1cbiAgICAgIC5lbXB0eS1zdGF0ZS0tb2ZmbGluZSAuZW1wdHktc3RhdGVfX2ljb24ge1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLW1lZGl1bSk7XG4gICAgICAgIG9wYWNpdHk6IDAuNztcbiAgICAgIH1cbiAgICAgIC5lbXB0eS1zdGF0ZV9fY3RhIHtcbiAgICAgICAgbWFyZ2luLXRvcDogOHB4O1xuICAgICAgfVxuICAgIGAsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIEVtcHR5U3RhdGVDb21wb25lbnQge1xuICBwcm9wcyA9IGlucHV0LnJlcXVpcmVkPEVtcHR5U3RhdGVNZXRhZGF0YT4oKTtcblxuICAvKiogVmFyaWFudGUgcmVzdWVsdGEgKGRlZmF1bHQgYCdlbXB0eSdgKS4gKi9cbiAgcHJvdGVjdGVkIHZhcmlhbnRDbGFzcyA9IGNvbXB1dGVkPEVtcHR5U3RhdGVWYXJpYW50PihcbiAgICAoKSA9PiB0aGlzLnByb3BzKCkudmFyaWFudCA/PyAnZW1wdHknLFxuICApO1xuXG4gIC8qKiBJY29ubyBmaW5hbCDigJQgY3VzdG9tIHNpIHNlIHBhc8OzLCBkZWZhdWx0IGRlIGxhIHZhcmlhbnRlIHNpIG5vLiAqL1xuICBwcm90ZWN0ZWQgaWNvbk5hbWUgPSBjb21wdXRlZChcbiAgICAoKSA9PiB0aGlzLnByb3BzKCkuaWNvbiA/PyBERUZBVUxUX0lDT05fQllfVkFSSUFOVFt0aGlzLnZhcmlhbnRDbGFzcygpXSxcbiAgKTtcblxuICAvKiogVGFtYcOxbyBlbiBweC4gRGVmYXVsdCA2NC4gKi9cbiAgcHJvdGVjdGVkIGljb25TaXplID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5wcm9wcygpLmljb25TaXplID8/IDY0KTtcblxuICAvKipcbiAgICogUHJvcHMgZGVsIGJvdMOzbiBDVEEuIENvbnN0cnVpZGFzIGEgcGFydGlyIGRlIGBwcm9wcygpLmFjdGlvbmAuIEVsIGVzdGFkb1xuICAgKiBgV09SS0lOR2Agc2UgYXBsaWNhIGN1YW5kbyBgYWN0aW9uLmxvYWRpbmcgPT09IHRydWVgIChzcGlubmVyIG1pZW50cmFzXG4gICAqIGVsIGhhbmRsZXIgY29ycmUpLlxuICAgKi9cbiAgcHJvdGVjdGVkIGN0YVByb3BzID0gY29tcHV0ZWQ8QnV0dG9uTWV0YWRhdGE+KCgpID0+IHtcbiAgICBjb25zdCBhY3Rpb24gPSB0aGlzLnByb3BzKCkuYWN0aW9uO1xuICAgIHJldHVybiB7XG4gICAgICB0ZXh0OiBhY3Rpb24/LmxhYmVsID8/ICcnLFxuICAgICAgY29sb3I6ICdkYXJrJyxcbiAgICAgIHR5cGU6ICdidXR0b24nLFxuICAgICAgZmlsbDogJ3NvbGlkJyxcbiAgICAgIHNpemU6ICdkZWZhdWx0JyxcbiAgICAgIHNoYXBlOiAncm91bmQnLFxuICAgICAgc3RhdGU6IGFjdGlvbj8ubG9hZGluZyA/IENvbXBvbmVudFN0YXRlcy5XT1JLSU5HIDogQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQsXG4gICAgfSBhcyBCdXR0b25NZXRhZGF0YTtcbiAgfSk7XG59XG4iXX0=
163
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1wdHktc3RhdGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL21vbGVjdWxlcy9lbXB0eS1zdGF0ZS9lbXB0eS1zdGF0ZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNwRixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDcEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUNwQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsbUJBQW1CLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFMUYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNoRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDbkUsT0FBTyxFQUFrQixlQUFlLEVBQUUsTUFBTSxhQUFhLENBQUM7O0FBRzlELCtFQUErRTtBQUMvRSxzRUFBc0U7QUFDdEUsc0VBQXNFO0FBQ3RFLFFBQVEsQ0FBQztJQUNQLGtCQUFrQjtJQUNsQixtQkFBbUI7SUFDbkIsZUFBZTtDQUNoQixDQUFDLENBQUM7QUFFSCxNQUFNLHVCQUF1QixHQUFzQztJQUNqRSxLQUFLLEVBQUUsa0JBQWtCO0lBQ3pCLEtBQUssRUFBRSxzQkFBc0I7SUFDN0IsT0FBTyxFQUFFLHVCQUF1QjtDQUNqQyxDQUFDO0FBRUY7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQkc7QUE4RUgsTUFBTSxPQUFPLG1CQUFtQjtJQTdFaEM7UUE4RUUsVUFBSyxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQXNCLENBQUM7UUFFN0MsNkNBQTZDO1FBQ25DLGlCQUFZLEdBQUcsUUFBUSxDQUFvQixHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDO1FBRTVGLHFFQUFxRTtRQUMzRCxhQUFRLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxJQUFJLElBQUksdUJBQXVCLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQztRQUV2RywwRUFBMEU7UUFDaEUsVUFBSyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFckQsZ0NBQWdDO1FBQ3RCLGFBQVEsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLFFBQVEsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUVqRTs7OztXQUlHO1FBQ08sYUFBUSxHQUFHLFFBQVEsQ0FBaUIsR0FBRyxFQUFFO1lBQ2pELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxNQUFNLENBQUM7WUFDbkMsT0FBTztnQkFDTCxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssSUFBSSxFQUFFO2dCQUN6QixLQUFLLEVBQUUsTUFBTTtnQkFDYixJQUFJLEVBQUUsUUFBUTtnQkFDZCxJQUFJLEVBQUUsT0FBTztnQkFDYixJQUFJLEVBQUUsU0FBUztnQkFDZixLQUFLLEVBQUUsT0FBTztnQkFDZCxLQUFLLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLE9BQU87YUFDekQsQ0FBQztRQUN0QixDQUFDLENBQUMsQ0FBQztLQUNKOytHQWhDWSxtQkFBbUI7bUdBQW5CLG1CQUFtQiw4TUF4RXBCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBd0NULHdmQTFDUyxZQUFZLCtCQUFFLE9BQU8sMkpBQUUsZUFBZSwwR0FBRSxhQUFhLHdFQUFFLGNBQWM7OzRGQTBFcEUsbUJBQW1CO2tCQTdFL0IsU0FBUzsrQkFDRSxpQkFBaUIsY0FDZixJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsY0FBYyxDQUFDLG1CQUMvRCx1QkFBdUIsQ0FBQyxNQUFNLFlBQ3JDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBd0NUIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIGNvbXB1dGVkLCBpbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSW9uSWNvbiB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyL3N0YW5kYWxvbmUnO1xuaW1wb3J0IHsgYWRkSWNvbnMgfSBmcm9tICdpb25pY29ucyc7XG5pbXBvcnQgeyBhbGVydENpcmNsZU91dGxpbmUsIGNsb3VkT2ZmbGluZU91dGxpbmUsIGRvY3VtZW50T3V0bGluZSB9IGZyb20gJ2lvbmljb25zL2ljb25zJztcblxuaW1wb3J0IHsgQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYXRvbXMvYnV0dG9uL2J1dHRvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgVGV4dENvbXBvbmVudCB9IGZyb20gJy4uLy4uL2F0b21zL3RleHQvdGV4dC5jb21wb25lbnQnO1xuaW1wb3J0IHsgVGl0bGVDb21wb25lbnQgfSBmcm9tICcuLi8uLi9hdG9tcy90aXRsZS90aXRsZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQnV0dG9uTWV0YWRhdGEsIENvbXBvbmVudFN0YXRlcyB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IEVtcHR5U3RhdGVNZXRhZGF0YSwgRW1wdHlTdGF0ZVZhcmlhbnQgfSBmcm9tICcuL3R5cGVzJztcblxuLy8gUmVnaXN0cmEgbG9zIDMgaWNvbm9zIGRlZmF1bHQgKHZhcmlhbnRlcykuIFNpIGxhIHDDoWdpbmEgcGFzYSB1biBpY29ubyBjdXN0b21cbi8vIGVuIGBwcm9wcy5pY29uYCwgZGViZSByZWdpc3RyYXJsbyBlbGxhIG1pc21hIGNvbiBhZGRJY29ucygpIOKAlCBJb25pY1xuLy8gc3RhbmRhbG9uZSBubyByZXN1ZWx2ZSBub21icmVzIGdsb2JhbCwgc29sbyBsb3MgZGVsIHJlZ2lzdHJ5IGxvY2FsLlxuYWRkSWNvbnMoe1xuICBhbGVydENpcmNsZU91dGxpbmUsXG4gIGNsb3VkT2ZmbGluZU91dGxpbmUsXG4gIGRvY3VtZW50T3V0bGluZSxcbn0pO1xuXG5jb25zdCBERUZBVUxUX0lDT05fQllfVkFSSUFOVDogUmVjb3JkPEVtcHR5U3RhdGVWYXJpYW50LCBzdHJpbmc+ID0ge1xuICBlbXB0eTogJ2RvY3VtZW50LW91dGxpbmUnLFxuICBlcnJvcjogJ2FsZXJ0LWNpcmNsZS1vdXRsaW5lJyxcbiAgb2ZmbGluZTogJ2Nsb3VkLW9mZmxpbmUtb3V0bGluZScsXG59O1xuXG4vKipcbiAqIGA8dmFsLWVtcHR5LXN0YXRlPmAg4oCUIG1vbGVjdWxlIGRlY2xhcmF0aXZvIHBhcmEgZXN0YWRvcyBkZSBcIm5vIGhheSBkYXRvcyAvXG4gKiBodWJvIGVycm9yIC8gc2luIHJlZFwiLiBSZWVtcGxhemEgZWwgcGF0csOzbiBhZC1ob2MgKGlvbi1pY29uICsgdmFsLXRpdGxlICtcbiAqIHZhbC10ZXh0ICsgdmFsLWJ1dHRvbikgcXVlIGNhZGEgcMOhZ2luYSB2ZW7DrWEgaW1wcm92aXNhbmRvLlxuICpcbiAqIFVzbyB0w61waWNvOlxuICpcbiAqIGBgYGh0bWxcbiAqIEBpZiAobG9hZGluZygpKSB7XG4gKiAgIDx2YWwtc2tlbGV0b24tbGF5b3V0IFtwcm9wc109XCIuLi5cIiAvPlxuICogfSBAZWxzZSBpZiAoZXJyb3JTdGF0ZSgpOyBhcyBlKSB7XG4gKiAgIDx2YWwtZW1wdHktc3RhdGUgW3Byb3BzXT1cImVcIiAvPlxuICogfSBAZWxzZSBpZiAoaXRlbXMoKS5sZW5ndGggPT09IDApIHtcbiAqICAgPHZhbC1lbXB0eS1zdGF0ZSBbcHJvcHNdPVwiZW1wdHlQcm9wc1wiIC8+XG4gKiB9IEBlbHNlIHtcbiAqICAgPCEtLSBjb250ZW5pZG8gbm9ybWFsIC0tPlxuICogfVxuICogYGBgXG4gKlxuICogSTE4bjogbGFzIGNhZGVuYXMgdmllbmVuIHlhIHRyYWR1Y2lkYXMgZW4gbGFzIHByb3BzIChsYSBsaWIgZXMgYWduw7NzdGljYSBkZVxuICogbmFtZXNwYWNlcykuIFBhcmEgd2lyaW5nIGF1dG9tw6F0aWNvIGRlc2RlIHVuIGVycm9yIGNhcHR1cmFkbywgdXNhciBlbFxuICogaGVscGVyIGBjcmVhdGVFcnJvclN0YXRlUHJvcHMoZXJyLCAuLi4pYCAoYHZhbHRlY2gtY29tcG9uZW50c2ApLlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2YWwtZW1wdHktc3RhdGUnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBJb25JY29uLCBCdXR0b25Db21wb25lbnQsIFRleHRDb21wb25lbnQsIFRpdGxlQ29tcG9uZW50XSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHRlbXBsYXRlOiBgXG4gICAgPHNlY3Rpb25cbiAgICAgIGNsYXNzPVwiZW1wdHktc3RhdGVcIlxuICAgICAgW2NsYXNzLmVtcHR5LXN0YXRlLS1lcnJvcl09XCJ2YXJpYW50Q2xhc3MoKSA9PT0gJ2Vycm9yJ1wiXG4gICAgICBbY2xhc3MuZW1wdHktc3RhdGUtLW9mZmxpbmVdPVwidmFyaWFudENsYXNzKCkgPT09ICdvZmZsaW5lJ1wiXG4gICAgICByb2xlPVwic3RhdHVzXCJcbiAgICAgIGFyaWEtbGl2ZT1cInBvbGl0ZVwiXG4gICAgPlxuICAgICAgQGlmIChlbW9qaSgpOyBhcyBlKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJlbXB0eS1zdGF0ZV9fZW1vamlcIiBbc3R5bGUuZm9udC1zaXplLnB4XT1cImljb25TaXplKClcIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICAgICAgICB7eyBlIH19XG4gICAgICAgIDwvZGl2PlxuICAgICAgfSBAZWxzZSB7XG4gICAgICAgIDxpb24taWNvbiBjbGFzcz1cImVtcHR5LXN0YXRlX19pY29uXCIgW25hbWVdPVwiaWNvbk5hbWUoKVwiIFtzdHlsZS5mb250LXNpemUucHhdPVwiaWNvblNpemUoKVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICAgICB9XG5cbiAgICAgIDx2YWwtdGl0bGVcbiAgICAgICAgW3Byb3BzXT1cIntcbiAgICAgICAgICBzaXplOiAnbGFyZ2UnLFxuICAgICAgICAgIGNvbG9yOiAnZGFyaycsXG4gICAgICAgICAgYm9sZDogdHJ1ZSxcbiAgICAgICAgICBjb250ZW50OiBwcm9wcygpLnRpdGxlLFxuICAgICAgICB9XCJcbiAgICAgIC8+XG5cbiAgICAgIEBpZiAocHJvcHMoKS5kZXNjcmlwdGlvbjsgYXMgZGVzYykge1xuICAgICAgICA8dmFsLXRleHRcbiAgICAgICAgICBbcHJvcHNdPVwie1xuICAgICAgICAgICAgc2l6ZTogJ2xhcmdlJyxcbiAgICAgICAgICAgIGNvbG9yOiAnbWVkaXVtJyxcbiAgICAgICAgICAgIGJvbGQ6IGZhbHNlLFxuICAgICAgICAgICAgY29udGVudDogZGVzYyxcbiAgICAgICAgICB9XCJcbiAgICAgICAgLz5cbiAgICAgIH1cblxuICAgICAgQGlmIChwcm9wcygpLmFjdGlvbjsgYXMgYSkge1xuICAgICAgICA8dmFsLWJ1dHRvbiBjbGFzcz1cImVtcHR5LXN0YXRlX19jdGFcIiBbcHJvcHNdPVwiY3RhUHJvcHMoKVwiIChjbGljayk9XCJhLmhhbmRsZXIoKVwiIC8+XG4gICAgICB9XG4gICAgPC9zZWN0aW9uPlxuICBgLFxuICBzdHlsZXM6IFtcbiAgICBgXG4gICAgICAuZW1wdHktc3RhdGUge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICBnYXA6IDEycHg7XG4gICAgICAgIHBhZGRpbmc6IDMycHggMTZweDtcbiAgICAgICAgbWluLWhlaWdodDogMjQwcHg7XG4gICAgICB9XG4gICAgICAuZW1wdHktc3RhdGVfX2ljb24ge1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLW1lZGl1bSk7XG4gICAgICB9XG4gICAgICAuZW1wdHktc3RhdGVfX2Vtb2ppIHtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDE7XG4gICAgICB9XG4gICAgICAuZW1wdHktc3RhdGUtLWVycm9yIC5lbXB0eS1zdGF0ZV9faWNvbiB7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tY29sb3Itd2FybmluZywgI2ZmYjgwMCk7XG4gICAgICB9XG4gICAgICAuZW1wdHktc3RhdGUtLW9mZmxpbmUgLmVtcHR5LXN0YXRlX19pY29uIHtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi1jb2xvci1tZWRpdW0pO1xuICAgICAgICBvcGFjaXR5OiAwLjc7XG4gICAgICB9XG4gICAgICAuZW1wdHktc3RhdGVfX2N0YSB7XG4gICAgICAgIG1hcmdpbi10b3A6IDhweDtcbiAgICAgIH1cbiAgICBgLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBFbXB0eVN0YXRlQ29tcG9uZW50IHtcbiAgcHJvcHMgPSBpbnB1dC5yZXF1aXJlZDxFbXB0eVN0YXRlTWV0YWRhdGE+KCk7XG5cbiAgLyoqIFZhcmlhbnRlIHJlc3VlbHRhIChkZWZhdWx0IGAnZW1wdHknYCkuICovXG4gIHByb3RlY3RlZCB2YXJpYW50Q2xhc3MgPSBjb21wdXRlZDxFbXB0eVN0YXRlVmFyaWFudD4oKCkgPT4gdGhpcy5wcm9wcygpLnZhcmlhbnQgPz8gJ2VtcHR5Jyk7XG5cbiAgLyoqIEljb25vIGZpbmFsIOKAlCBjdXN0b20gc2kgc2UgcGFzw7MsIGRlZmF1bHQgZGUgbGEgdmFyaWFudGUgc2kgbm8uICovXG4gIHByb3RlY3RlZCBpY29uTmFtZSA9IGNvbXB1dGVkKCgpID0+IHRoaXMucHJvcHMoKS5pY29uID8/IERFRkFVTFRfSUNPTl9CWV9WQVJJQU5UW3RoaXMudmFyaWFudENsYXNzKCldKTtcblxuICAvKiogRW1vamkgb3BjaW9uYWwg4oCUIHNpIGVzdMOhLCBzZSByZW5kZXJpemEgZW4gbHVnYXIgZGVsIGljb25vIElvbmljb25zLiAqL1xuICBwcm90ZWN0ZWQgZW1vamkgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnByb3BzKCkuZW1vamkpO1xuXG4gIC8qKiBUYW1hw7FvIGVuIHB4LiBEZWZhdWx0IDY0LiAqL1xuICBwcm90ZWN0ZWQgaWNvblNpemUgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnByb3BzKCkuaWNvblNpemUgPz8gNjQpO1xuXG4gIC8qKlxuICAgKiBQcm9wcyBkZWwgYm90w7NuIENUQS4gQ29uc3RydWlkYXMgYSBwYXJ0aXIgZGUgYHByb3BzKCkuYWN0aW9uYC4gRWwgZXN0YWRvXG4gICAqIGBXT1JLSU5HYCBzZSBhcGxpY2EgY3VhbmRvIGBhY3Rpb24ubG9hZGluZyA9PT0gdHJ1ZWAgKHNwaW5uZXIgbWllbnRyYXNcbiAgICogZWwgaGFuZGxlciBjb3JyZSkuXG4gICAqL1xuICBwcm90ZWN0ZWQgY3RhUHJvcHMgPSBjb21wdXRlZDxCdXR0b25NZXRhZGF0YT4oKCkgPT4ge1xuICAgIGNvbnN0IGFjdGlvbiA9IHRoaXMucHJvcHMoKS5hY3Rpb247XG4gICAgcmV0dXJuIHtcbiAgICAgIHRleHQ6IGFjdGlvbj8ubGFiZWwgPz8gJycsXG4gICAgICBjb2xvcjogJ2RhcmsnLFxuICAgICAgdHlwZTogJ2J1dHRvbicsXG4gICAgICBmaWxsOiAnc29saWQnLFxuICAgICAgc2l6ZTogJ2RlZmF1bHQnLFxuICAgICAgc2hhcGU6ICdyb3VuZCcsXG4gICAgICBzdGF0ZTogYWN0aW9uPy5sb2FkaW5nID8gQ29tcG9uZW50U3RhdGVzLldPUktJTkcgOiBDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCxcbiAgICB9IGFzIEJ1dHRvbk1ldGFkYXRhO1xuICB9KTtcbn1cbiJdfQ==
@@ -49,6 +49,7 @@ export function createErrorStateProps(err, opts) {
49
49
  title: pick(opts.title),
50
50
  description: opts.description ? pick(opts.description) : undefined,
51
51
  action,
52
+ emoji: opts.emoji ? pick(opts.emoji) : undefined,
52
53
  };
53
54
  }
54
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9tb2xlY3VsZXMvZW1wdHktc3RhdGUvZmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUE0QjFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBK0JHO0FBQ0gsTUFBTSxVQUFVLHFCQUFxQixDQUNuQyxHQUFZLEVBQ1osSUFBMEI7SUFFMUIsTUFBTSxXQUFXLEdBQUcsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3hDLE1BQU0sT0FBTyxHQUFHLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO0lBRTVELE1BQU0sSUFBSSxHQUFHLENBQUksQ0FBK0IsRUFBSyxFQUFFLENBQ3JELE9BQU8sQ0FBQyxLQUFLLFFBQVEsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLFNBQVMsSUFBSSxDQUFDO1FBQ25ELENBQUMsQ0FBRSxDQUE4QixDQUFDLE9BQU8sQ0FBQztRQUMxQyxDQUFDLENBQUUsQ0FBTyxDQUFDO0lBRWYsTUFBTSxNQUFNLEdBQ1YsSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsT0FBTztRQUM3QixDQUFDLENBQUM7WUFDRSxLQUFLLEVBQUUsSUFBSSxDQUFDLFVBQVU7WUFDdEIsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO1lBQ3JCLE9BQU8sRUFBRSxJQUFJLENBQUMsUUFBUSxJQUFJLEtBQUs7U0FDaEM7UUFDSCxDQUFDLENBQUMsU0FBUyxDQUFDO0lBRWhCLE9BQU87UUFDTCxPQUFPO1FBQ1AsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQ3ZCLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTO1FBQ2xFLE1BQU07S0FDUCxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGludGVycHJldEVycm9yIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvZXJyb3JzL2ludGVycHJldC1lcnJvcic7XG5pbXBvcnQgeyBFbXB0eVN0YXRlTWV0YWRhdGEgfSBmcm9tICcuL3R5cGVzJztcblxuLyoqXG4gKiBPcGNpb25lcyBkZWwgaGVscGVyLiBMb3Mgc3RyaW5ncyBzb24gcmVxdWVyaWRvcyBwYXJhIG1hbnRlbmVyIGVsXG4gKiBjb21wb25lbnRlIGkxOG4tYWduw7NzdGljbyDigJQgbGEgcMOhZ2luYSBsb3MgcmVzdWVsdmUgKGNvbiBzdSBuYW1lc3BhY2UpIHkgbG9zXG4gKiBwYXNhIHlhIHRyYWR1Y2lkb3MuIEVsIGhlbHBlciBzb2xvIGRlY2lkZSBsYSBWQVJJQU5URSB5IGNvbXBvbmUgbG9zIHByb3BzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENyZWF0ZUVycm9yU3RhdGVPcHRzIHtcbiAgLyoqXG4gICAqIFTDrXR1bG8gYSBtb3N0cmFyLiBDb252ZW5jacOzbjogbGEgcMOhZ2luYSBsbyByZXN1ZWx2ZSBwb3IgZXNjZW5hcmlvOlxuICAgKiAgLSByZWQgY2HDrWRhICAgICDihpIgYHQoJ29mZmxpbmVUaXRsZScpYFxuICAgKiAgLSBlcnJvciBiYWNrZW5kIOKGkiBgdCgnZXJyb3JUaXRsZScpYFxuICAgKlxuICAgKiBTaSBwYXPDoXMgdW4gc29sbyBzdHJpbmcsIHNlIHVzYSBlbiBhbWJhcyB2YXJpYW50ZXMuIFNpIHBhc8OhcyBlbCBvYmpldG8sXG4gICAqIGVsIGhlbHBlciBlbGlnZSBzZWfDum4gYGlzTmV0d29ya2AgZGVsIGVycm9yIGludGVycHJldGFkby5cbiAgICovXG4gIHRpdGxlOiBzdHJpbmcgfCB7IG9mZmxpbmU6IHN0cmluZzsgZXJyb3I6IHN0cmluZyB9O1xuICAvKiogRGVzY3JpcGNpw7NuIGEgbW9zdHJhciAodMOtcGljYW1lbnRlIGVsIGBtZXNzYWdlYCBkZWwgYmFja2VuZCBlbiBlc3Bhw7FvbCkuICovXG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nIHwgeyBvZmZsaW5lOiBzdHJpbmc7IGVycm9yOiBzdHJpbmcgfTtcbiAgLyoqIExhYmVsIGRlbCBib3TDs24gQ1RBICh0w61waWNhbWVudGUgYHQoJ3JldHJ5JylgKS4gU2kgc2Ugb21pdGUsIG5vIHNlIG11ZXN0cmEgYm90w7NuLiAqL1xuICByZXRyeUxhYmVsPzogc3RyaW5nO1xuICAvKiogSGFuZGxlciBpbnZvY2FkbyBhbCBjbGljayBkZSByZXRyeS4gUmVxdWVyaWRvIHNpIGByZXRyeUxhYmVsYCBlc3TDoS4gKi9cbiAgb25SZXRyeT86ICgpID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+O1xuICAvKiogYHRydWVgIG1pZW50cmFzIGVsIHJldHJ5IGVzdMOhIGNvcnJpZW5kbyDigJQgZWwgYm90w7NuIHBhc2EgYSBXT1JLSU5HLiAqL1xuICByZXRyeWluZz86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQ29udmllcnRlIHVuIGVycm9yIGNhcHR1cmFkbyBlbiBgRW1wdHlTdGF0ZU1ldGFkYXRhYCBsaXN0byBwYXJhXG4gKiBgPHZhbC1lbXB0eS1zdGF0ZT5gLiBEZWNpZGUgbGEgdmFyaWFudGUgKGBvZmZsaW5lYCB2cyBgZXJyb3JgKSBzZWfDum5cbiAqIGBpbnRlcnByZXRFcnJvcihlcnIpLmlzTmV0d29ya2AuXG4gKlxuICogVXNvIHTDrXBpY28gZW4gdW5hIHBhZ2U6XG4gKlxuICogYGBgdHNcbiAqIHJlYWRvbmx5IGVycm9yU3RhdGUgPSBjb21wdXRlZCgoKSA9PiB7XG4gKiAgIGNvbnN0IGVyciA9IHRoaXMubG9hZEVycm9yKCk7XG4gKiAgIGlmICghZXJyKSByZXR1cm4gbnVsbDtcbiAqICAgcmV0dXJuIGNyZWF0ZUVycm9yU3RhdGVQcm9wcyhlcnIsIHtcbiAqICAgICB0aXRsZTogeyBvZmZsaW5lOiB0aGlzLnQoJ29mZmxpbmVUaXRsZScpLCBlcnJvcjogdGhpcy50KCdlcnJvclRpdGxlJykgfSxcbiAqICAgICBkZXNjcmlwdGlvbjogeyBvZmZsaW5lOiB0aGlzLnQoJ29mZmxpbmVIaW50JyksIGVycm9yOiBpbnRlcnByZXRFcnJvcihlcnIpLm1lc3NhZ2UgfSxcbiAqICAgICByZXRyeUxhYmVsOiB0aGlzLnQoJ3JldHJ5JyksXG4gKiAgICAgb25SZXRyeTogKCkgPT4gdGhpcy5yZWxvYWQoKSxcbiAqICAgICByZXRyeWluZzogdGhpcy5yZWxvYWRpbmcoKSxcbiAqICAgfSk7XG4gKiB9KTtcbiAqIGBgYFxuICpcbiAqIEVuIGVsIHRlbXBsYXRlOlxuICpcbiAqIGBgYGh0bWxcbiAqIEBpZiAoZXJyb3JTdGF0ZSgpOyBhcyBlKSB7XG4gKiAgIDx2YWwtZW1wdHktc3RhdGUgW3Byb3BzXT1cImVcIiAvPlxuICogfVxuICogYGBgXG4gKlxuICogUGFyYSBlc2NlbmFyaW9zIFNJTiBlcnJvciAobGlzdGEgdmFjw61hKSwgY29uc3RydWlyIGBFbXB0eVN0YXRlTWV0YWRhdGFgXG4gKiBtYW51YWxtZW50ZSBjb24gYHZhcmlhbnQ6ICdlbXB0eSdgIOKAlCBubyBlcyBsbyBxdWUgZXN0ZSBoZWxwZXIgcmVzdWVsdmUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVFcnJvclN0YXRlUHJvcHMoXG4gIGVycjogdW5rbm93bixcbiAgb3B0czogQ3JlYXRlRXJyb3JTdGF0ZU9wdHMsXG4pOiBFbXB0eVN0YXRlTWV0YWRhdGEge1xuICBjb25zdCBpbnRlcnByZXRlZCA9IGludGVycHJldEVycm9yKGVycik7XG4gIGNvbnN0IHZhcmlhbnQgPSBpbnRlcnByZXRlZC5pc05ldHdvcmsgPyAnb2ZmbGluZScgOiAnZXJyb3InO1xuXG4gIGNvbnN0IHBpY2sgPSA8VD4odjogVCB8IHsgb2ZmbGluZTogVDsgZXJyb3I6IFQgfSk6IFQgPT5cbiAgICB0eXBlb2YgdiA9PT0gJ29iamVjdCcgJiYgdiAhPT0gbnVsbCAmJiAnb2ZmbGluZScgaW4gdlxuICAgICAgPyAodiBhcyB7IG9mZmxpbmU6IFQ7IGVycm9yOiBUIH0pW3ZhcmlhbnRdXG4gICAgICA6ICh2IGFzIFQpO1xuXG4gIGNvbnN0IGFjdGlvbiA9XG4gICAgb3B0cy5yZXRyeUxhYmVsICYmIG9wdHMub25SZXRyeVxuICAgICAgPyB7XG4gICAgICAgICAgbGFiZWw6IG9wdHMucmV0cnlMYWJlbCxcbiAgICAgICAgICBoYW5kbGVyOiBvcHRzLm9uUmV0cnksXG4gICAgICAgICAgbG9hZGluZzogb3B0cy5yZXRyeWluZyA/PyBmYWxzZSxcbiAgICAgICAgfVxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgcmV0dXJuIHtcbiAgICB2YXJpYW50LFxuICAgIHRpdGxlOiBwaWNrKG9wdHMudGl0bGUpLFxuICAgIGRlc2NyaXB0aW9uOiBvcHRzLmRlc2NyaXB0aW9uID8gcGljayhvcHRzLmRlc2NyaXB0aW9uKSA6IHVuZGVmaW5lZCxcbiAgICBhY3Rpb24sXG4gIH07XG59XG4iXX0=
55
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9tb2xlY3VsZXMvZW1wdHktc3RhdGUvZmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFpQzFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBK0JHO0FBQ0gsTUFBTSxVQUFVLHFCQUFxQixDQUNuQyxHQUFZLEVBQ1osSUFBMEI7SUFFMUIsTUFBTSxXQUFXLEdBQUcsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3hDLE1BQU0sT0FBTyxHQUFHLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO0lBRTVELE1BQU0sSUFBSSxHQUFHLENBQUksQ0FBK0IsRUFBSyxFQUFFLENBQ3JELE9BQU8sQ0FBQyxLQUFLLFFBQVEsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLFNBQVMsSUFBSSxDQUFDO1FBQ25ELENBQUMsQ0FBRSxDQUE4QixDQUFDLE9BQU8sQ0FBQztRQUMxQyxDQUFDLENBQUUsQ0FBTyxDQUFDO0lBRWYsTUFBTSxNQUFNLEdBQ1YsSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsT0FBTztRQUM3QixDQUFDLENBQUM7WUFDRSxLQUFLLEVBQUUsSUFBSSxDQUFDLFVBQVU7WUFDdEIsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO1lBQ3JCLE9BQU8sRUFBRSxJQUFJLENBQUMsUUFBUSxJQUFJLEtBQUs7U0FDaEM7UUFDSCxDQUFDLENBQUMsU0FBUyxDQUFDO0lBRWhCLE9BQU87UUFDTCxPQUFPO1FBQ1AsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQ3ZCLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTO1FBQ2xFLE1BQU07UUFDTixLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUztLQUNqRCxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGludGVycHJldEVycm9yIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvZXJyb3JzL2ludGVycHJldC1lcnJvcic7XG5pbXBvcnQgeyBFbXB0eVN0YXRlTWV0YWRhdGEgfSBmcm9tICcuL3R5cGVzJztcblxuLyoqXG4gKiBPcGNpb25lcyBkZWwgaGVscGVyLiBMb3Mgc3RyaW5ncyBzb24gcmVxdWVyaWRvcyBwYXJhIG1hbnRlbmVyIGVsXG4gKiBjb21wb25lbnRlIGkxOG4tYWduw7NzdGljbyDigJQgbGEgcMOhZ2luYSBsb3MgcmVzdWVsdmUgKGNvbiBzdSBuYW1lc3BhY2UpIHkgbG9zXG4gKiBwYXNhIHlhIHRyYWR1Y2lkb3MuIEVsIGhlbHBlciBzb2xvIGRlY2lkZSBsYSBWQVJJQU5URSB5IGNvbXBvbmUgbG9zIHByb3BzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENyZWF0ZUVycm9yU3RhdGVPcHRzIHtcbiAgLyoqXG4gICAqIFTDrXR1bG8gYSBtb3N0cmFyLiBDb252ZW5jacOzbjogbGEgcMOhZ2luYSBsbyByZXN1ZWx2ZSBwb3IgZXNjZW5hcmlvOlxuICAgKiAgLSByZWQgY2HDrWRhICAgICDihpIgYHQoJ29mZmxpbmVUaXRsZScpYFxuICAgKiAgLSBlcnJvciBiYWNrZW5kIOKGkiBgdCgnZXJyb3JUaXRsZScpYFxuICAgKlxuICAgKiBTaSBwYXPDoXMgdW4gc29sbyBzdHJpbmcsIHNlIHVzYSBlbiBhbWJhcyB2YXJpYW50ZXMuIFNpIHBhc8OhcyBlbCBvYmpldG8sXG4gICAqIGVsIGhlbHBlciBlbGlnZSBzZWfDum4gYGlzTmV0d29ya2AgZGVsIGVycm9yIGludGVycHJldGFkby5cbiAgICovXG4gIHRpdGxlOiBzdHJpbmcgfCB7IG9mZmxpbmU6IHN0cmluZzsgZXJyb3I6IHN0cmluZyB9O1xuICAvKiogRGVzY3JpcGNpw7NuIGEgbW9zdHJhciAodMOtcGljYW1lbnRlIGVsIGBtZXNzYWdlYCBkZWwgYmFja2VuZCBlbiBlc3Bhw7FvbCkuICovXG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nIHwgeyBvZmZsaW5lOiBzdHJpbmc7IGVycm9yOiBzdHJpbmcgfTtcbiAgLyoqIExhYmVsIGRlbCBib3TDs24gQ1RBICh0w61waWNhbWVudGUgYHQoJ3JldHJ5JylgKS4gU2kgc2Ugb21pdGUsIG5vIHNlIG11ZXN0cmEgYm90w7NuLiAqL1xuICByZXRyeUxhYmVsPzogc3RyaW5nO1xuICAvKiogSGFuZGxlciBpbnZvY2FkbyBhbCBjbGljayBkZSByZXRyeS4gUmVxdWVyaWRvIHNpIGByZXRyeUxhYmVsYCBlc3TDoS4gKi9cbiAgb25SZXRyeT86ICgpID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+O1xuICAvKiogYHRydWVgIG1pZW50cmFzIGVsIHJldHJ5IGVzdMOhIGNvcnJpZW5kbyDigJQgZWwgYm90w7NuIHBhc2EgYSBXT1JLSU5HLiAqL1xuICByZXRyeWluZz86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBFbW9qaSBhIG1vc3RyYXIgZW4gbHVnYXIgZGVsIGljb25vIChlai4gYCfwn6W5J2ApLiBVbiBzb2xvIHN0cmluZyBhcGxpY2EgYVxuICAgKiBhbWJhcyB2YXJpYW50ZXM7IGVsIG9iamV0byBlbGlnZSBzZWfDum4gYGlzTmV0d29ya2AgKG9mZmxpbmUgdnMgZXJyb3IpLlxuICAgKi9cbiAgZW1vamk/OiBzdHJpbmcgfCB7IG9mZmxpbmU6IHN0cmluZzsgZXJyb3I6IHN0cmluZyB9O1xufVxuXG4vKipcbiAqIENvbnZpZXJ0ZSB1biBlcnJvciBjYXB0dXJhZG8gZW4gYEVtcHR5U3RhdGVNZXRhZGF0YWAgbGlzdG8gcGFyYVxuICogYDx2YWwtZW1wdHktc3RhdGU+YC4gRGVjaWRlIGxhIHZhcmlhbnRlIChgb2ZmbGluZWAgdnMgYGVycm9yYCkgc2Vnw7puXG4gKiBgaW50ZXJwcmV0RXJyb3IoZXJyKS5pc05ldHdvcmtgLlxuICpcbiAqIFVzbyB0w61waWNvIGVuIHVuYSBwYWdlOlxuICpcbiAqIGBgYHRzXG4gKiByZWFkb25seSBlcnJvclN0YXRlID0gY29tcHV0ZWQoKCkgPT4ge1xuICogICBjb25zdCBlcnIgPSB0aGlzLmxvYWRFcnJvcigpO1xuICogICBpZiAoIWVycikgcmV0dXJuIG51bGw7XG4gKiAgIHJldHVybiBjcmVhdGVFcnJvclN0YXRlUHJvcHMoZXJyLCB7XG4gKiAgICAgdGl0bGU6IHsgb2ZmbGluZTogdGhpcy50KCdvZmZsaW5lVGl0bGUnKSwgZXJyb3I6IHRoaXMudCgnZXJyb3JUaXRsZScpIH0sXG4gKiAgICAgZGVzY3JpcHRpb246IHsgb2ZmbGluZTogdGhpcy50KCdvZmZsaW5lSGludCcpLCBlcnJvcjogaW50ZXJwcmV0RXJyb3IoZXJyKS5tZXNzYWdlIH0sXG4gKiAgICAgcmV0cnlMYWJlbDogdGhpcy50KCdyZXRyeScpLFxuICogICAgIG9uUmV0cnk6ICgpID0+IHRoaXMucmVsb2FkKCksXG4gKiAgICAgcmV0cnlpbmc6IHRoaXMucmVsb2FkaW5nKCksXG4gKiAgIH0pO1xuICogfSk7XG4gKiBgYGBcbiAqXG4gKiBFbiBlbCB0ZW1wbGF0ZTpcbiAqXG4gKiBgYGBodG1sXG4gKiBAaWYgKGVycm9yU3RhdGUoKTsgYXMgZSkge1xuICogICA8dmFsLWVtcHR5LXN0YXRlIFtwcm9wc109XCJlXCIgLz5cbiAqIH1cbiAqIGBgYFxuICpcbiAqIFBhcmEgZXNjZW5hcmlvcyBTSU4gZXJyb3IgKGxpc3RhIHZhY8OtYSksIGNvbnN0cnVpciBgRW1wdHlTdGF0ZU1ldGFkYXRhYFxuICogbWFudWFsbWVudGUgY29uIGB2YXJpYW50OiAnZW1wdHknYCDigJQgbm8gZXMgbG8gcXVlIGVzdGUgaGVscGVyIHJlc3VlbHZlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRXJyb3JTdGF0ZVByb3BzKFxuICBlcnI6IHVua25vd24sXG4gIG9wdHM6IENyZWF0ZUVycm9yU3RhdGVPcHRzXG4pOiBFbXB0eVN0YXRlTWV0YWRhdGEge1xuICBjb25zdCBpbnRlcnByZXRlZCA9IGludGVycHJldEVycm9yKGVycik7XG4gIGNvbnN0IHZhcmlhbnQgPSBpbnRlcnByZXRlZC5pc05ldHdvcmsgPyAnb2ZmbGluZScgOiAnZXJyb3InO1xuXG4gIGNvbnN0IHBpY2sgPSA8VD4odjogVCB8IHsgb2ZmbGluZTogVDsgZXJyb3I6IFQgfSk6IFQgPT5cbiAgICB0eXBlb2YgdiA9PT0gJ29iamVjdCcgJiYgdiAhPT0gbnVsbCAmJiAnb2ZmbGluZScgaW4gdlxuICAgICAgPyAodiBhcyB7IG9mZmxpbmU6IFQ7IGVycm9yOiBUIH0pW3ZhcmlhbnRdXG4gICAgICA6ICh2IGFzIFQpO1xuXG4gIGNvbnN0IGFjdGlvbiA9XG4gICAgb3B0cy5yZXRyeUxhYmVsICYmIG9wdHMub25SZXRyeVxuICAgICAgPyB7XG4gICAgICAgICAgbGFiZWw6IG9wdHMucmV0cnlMYWJlbCxcbiAgICAgICAgICBoYW5kbGVyOiBvcHRzLm9uUmV0cnksXG4gICAgICAgICAgbG9hZGluZzogb3B0cy5yZXRyeWluZyA/PyBmYWxzZSxcbiAgICAgICAgfVxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgcmV0dXJuIHtcbiAgICB2YXJpYW50LFxuICAgIHRpdGxlOiBwaWNrKG9wdHMudGl0bGUpLFxuICAgIGRlc2NyaXB0aW9uOiBvcHRzLmRlc2NyaXB0aW9uID8gcGljayhvcHRzLmRlc2NyaXB0aW9uKSA6IHVuZGVmaW5lZCxcbiAgICBhY3Rpb24sXG4gICAgZW1vamk6IG9wdHMuZW1vamkgPyBwaWNrKG9wdHMuZW1vamkpIDogdW5kZWZpbmVkLFxuICB9O1xufVxuIl19
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvbW9sZWN1bGVzL2VtcHR5LXN0YXRlL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFZhcmlhbnRlIHNlbcOhbnRpY2EgZGVsIGVtcHR5L2Vycm9yIHN0YXRlLlxuICpcbiAqIC0gYGVtcHR5YCAgICDigJQgbGEgZnVlbnRlIGRldm9sdmnDsyBjZXJvIHJlc3VsdGFkb3MgKGxpc3RhIHZhY8OtYSwgc2luIG5vdGlmcykuXG4gKiAgICAgICAgICAgICAgICBJY29ubyBuZXV0cm8sIHNpbiBhbGFybWEuXG4gKiAtIGBlcnJvcmAgICAg4oCUIGxhIGZ1ZW50ZSBmYWxsw7MgcG9yIHVuIGVycm9yIGRlIGxhIGFwcC9zZXJ2aWRvciAoNTAwLCBwYXJzZSkuXG4gKiAgICAgICAgICAgICAgICBJY29ubyBkZSBhbGVydGEuXG4gKiAtIGBvZmZsaW5lYCAg4oCUIGxhIGZ1ZW50ZSBmYWxsw7MgcG9yIHJlZCBjYcOtZGEgLyBGaXJlc3RvcmUgdW5yZWFjaGFibGUuXG4gKiAgICAgICAgICAgICAgICBJY29ubyBjbG91ZC1vZmZsaW5lLlxuICpcbiAqIENhZGEgdmFyaWFudGUgbWFwZWEgYSB1biBpY29ubyBkZWZhdWx0IHNpIGBpY29uYCBubyBzZSBlc3BlY2lmaWNhLlxuICovXG5leHBvcnQgdHlwZSBFbXB0eVN0YXRlVmFyaWFudCA9ICdlbXB0eScgfCAnZXJyb3InIHwgJ29mZmxpbmUnO1xuXG4vKipcbiAqIEFjY2nDs24gQ1RBIG9wY2lvbmFsIGRlbCBzdGF0ZSAodMOtcGljYW1lbnRlIFwiUmVpbnRlbnRhclwiIC8gXCJSZWNhcmdhclwiKS5cbiAqXG4gKiBTaSBzZSBvbWl0ZSwgZWwgY29tcG9uZW50ZSBubyByZW5kZXJpemEgYm90w7NuLiBFbCBgaGFuZGxlcmAgeWEgdmllbmVcbiAqIHRyYWR1Y2lkbyDigJQgZWwgY29tcG9uZW50ZSBOTyByZXN1ZWx2ZSBpMThuIGludGVybmFtZW50ZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbXB0eVN0YXRlQWN0aW9uIHtcbiAgbGFiZWw6IHN0cmluZztcbiAgaGFuZGxlcjogKCkgPT4gdm9pZCB8IFByb21pc2U8dm9pZD47XG4gIC8qKiBTaSBgdHJ1ZWAsIGVsIGJvdMOzbiBwYXNhIGEgZXN0YWRvIFdPUktJTkcgKHNwaW5uZXIpLiDDmnRpbCBtaWVudHJhcyByZS1mZXRjaGEuICovXG4gIGxvYWRpbmc/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIE1ldGFkYXRhIHBhcmEgYDx2YWwtZW1wdHktc3RhdGU+YCDigJQgbW9sZWN1bGUgcXVlIHJlbmRlcml6YSB1biBlc3RhZG9cbiAqIGRlY2xhcmF0aXZvIGRlIFwibm8gaGF5IGRhdG9zIC8gaHVibyBlcnJvciAvIHNpbiByZWRcIiBjb24gdMOtdHVsbywgZGVzY3JpcGNpw7NuXG4gKiBvcGNpb25hbCB5IENUQSBvcGNpb25hbC4gUmVlbXBsYXphIGVsIHBhdHLDs24gYWQtaG9jIChpb24taWNvbiArIHZhbC10aXRsZSArXG4gKiB2YWwtdGV4dCArIHZhbC1idXR0b24pIHF1ZSBjYWRhIHDDoWdpbmEgdmVuw61hIGltcHJvdmlzYW5kby5cbiAqXG4gKiBJMThuOiBsb3Mgc3RyaW5ncyAoYHRpdGxlYCwgYGRlc2NyaXB0aW9uYCwgYGFjdGlvbi5sYWJlbGApIGxvcyByZXN1ZWx2ZSBsYVxuICogcMOhZ2luYSBhbnRlcyBkZSBjb25zdHJ1aXIgbGFzIHByb3BzLiBFc3RvIG1hbnRpZW5lIGVsIGNvbXBvbmVudGUgYWduw7NzdGljb1xuICogYSBuYW1lc3BhY2VzIHkgY29uc2lzdGVudGUgY29uIGVsIHJlc3RvIGRlIGxhIGxpYiAoRm9ybU1ldGFkYXRhLCBldGMuKS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbXB0eVN0YXRlTWV0YWRhdGEge1xuICAvKiogVMOtdHVsbyBwcmluY2lwYWwuIFJlcXVlcmlkby4gKi9cbiAgdGl0bGU6IHN0cmluZztcbiAgLyoqIERlc2NyaXBjacOzbiBvcGNpb25hbCAoMS0yIGzDrW5lYXMpIGRlYmFqbyBkZWwgdMOtdHVsby4gKi9cbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIC8qKiBWYXJpYW50ZSBzZW3DoW50aWNhLiBEZWZhdWx0IGAnZW1wdHknYC4gKi9cbiAgdmFyaWFudD86IEVtcHR5U3RhdGVWYXJpYW50O1xuICAvKipcbiAgICogTm9tYnJlIGRlbCBpY29ubyBJb25pY29ucyAoa2ViYWItY2FzZSkuIFNpIHNlIG9taXRlLCBlbCBjb21wb25lbnRlIHVzYVxuICAgKiBlbCBkZWZhdWx0IGRlIGxhIHZhcmlhbnRlOlxuICAgKiAgLSBlbXB0eSAgIOKGkiBgZG9jdW1lbnQtb3V0bGluZWBcbiAgICogIC0gZXJyb3IgICDihpIgYGFsZXJ0LWNpcmNsZS1vdXRsaW5lYFxuICAgKiAgLSBvZmZsaW5lIOKGkiBgY2xvdWQtb2ZmbGluZS1vdXRsaW5lYFxuICAgKlxuICAgKiBTaSBwYXPDoXMgdW4gaWNvbm8gY3VzdG9tLCBpbXBvcnRhbG8gKyByZWdpc3RyYWxvIGNvbiBgYWRkSWNvbnMoeyAuLi4gfSlgXG4gICAqIGVuIGVsIGNvbXBvbmVudGUgY29uc3VtaWRvciAoSW9uaWMgc3RhbmRhbG9uZSBubyBhdXRvLXJlZ2lzdHJhKS5cbiAgICovXG4gIGljb24/OiBzdHJpbmc7XG4gIC8qKiBUYW1hw7FvIGRlbCBpY29ubyBlbiBww614ZWxlcy4gRGVmYXVsdCBgNjRgLiAqL1xuICBpY29uU2l6ZT86IG51bWJlcjtcbiAgLyoqIEFjY2nDs24gQ1RBIG9wY2lvbmFsLiBTaSBzZSBvbWl0ZSwgbm8gc2UgbXVlc3RyYSBib3TDs24uICovXG4gIGFjdGlvbj86IEVtcHR5U3RhdGVBY3Rpb247XG59XG4iXX0=
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvbW9sZWN1bGVzL2VtcHR5LXN0YXRlL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFZhcmlhbnRlIHNlbcOhbnRpY2EgZGVsIGVtcHR5L2Vycm9yIHN0YXRlLlxuICpcbiAqIC0gYGVtcHR5YCAgICDigJQgbGEgZnVlbnRlIGRldm9sdmnDsyBjZXJvIHJlc3VsdGFkb3MgKGxpc3RhIHZhY8OtYSwgc2luIG5vdGlmcykuXG4gKiAgICAgICAgICAgICAgICBJY29ubyBuZXV0cm8sIHNpbiBhbGFybWEuXG4gKiAtIGBlcnJvcmAgICAg4oCUIGxhIGZ1ZW50ZSBmYWxsw7MgcG9yIHVuIGVycm9yIGRlIGxhIGFwcC9zZXJ2aWRvciAoNTAwLCBwYXJzZSkuXG4gKiAgICAgICAgICAgICAgICBJY29ubyBkZSBhbGVydGEuXG4gKiAtIGBvZmZsaW5lYCAg4oCUIGxhIGZ1ZW50ZSBmYWxsw7MgcG9yIHJlZCBjYcOtZGEgLyBGaXJlc3RvcmUgdW5yZWFjaGFibGUuXG4gKiAgICAgICAgICAgICAgICBJY29ubyBjbG91ZC1vZmZsaW5lLlxuICpcbiAqIENhZGEgdmFyaWFudGUgbWFwZWEgYSB1biBpY29ubyBkZWZhdWx0IHNpIGBpY29uYCBubyBzZSBlc3BlY2lmaWNhLlxuICovXG5leHBvcnQgdHlwZSBFbXB0eVN0YXRlVmFyaWFudCA9ICdlbXB0eScgfCAnZXJyb3InIHwgJ29mZmxpbmUnO1xuXG4vKipcbiAqIEFjY2nDs24gQ1RBIG9wY2lvbmFsIGRlbCBzdGF0ZSAodMOtcGljYW1lbnRlIFwiUmVpbnRlbnRhclwiIC8gXCJSZWNhcmdhclwiKS5cbiAqXG4gKiBTaSBzZSBvbWl0ZSwgZWwgY29tcG9uZW50ZSBubyByZW5kZXJpemEgYm90w7NuLiBFbCBgaGFuZGxlcmAgeWEgdmllbmVcbiAqIHRyYWR1Y2lkbyDigJQgZWwgY29tcG9uZW50ZSBOTyByZXN1ZWx2ZSBpMThuIGludGVybmFtZW50ZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbXB0eVN0YXRlQWN0aW9uIHtcbiAgbGFiZWw6IHN0cmluZztcbiAgaGFuZGxlcjogKCkgPT4gdm9pZCB8IFByb21pc2U8dm9pZD47XG4gIC8qKiBTaSBgdHJ1ZWAsIGVsIGJvdMOzbiBwYXNhIGEgZXN0YWRvIFdPUktJTkcgKHNwaW5uZXIpLiDDmnRpbCBtaWVudHJhcyByZS1mZXRjaGEuICovXG4gIGxvYWRpbmc/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIE1ldGFkYXRhIHBhcmEgYDx2YWwtZW1wdHktc3RhdGU+YCDigJQgbW9sZWN1bGUgcXVlIHJlbmRlcml6YSB1biBlc3RhZG9cbiAqIGRlY2xhcmF0aXZvIGRlIFwibm8gaGF5IGRhdG9zIC8gaHVibyBlcnJvciAvIHNpbiByZWRcIiBjb24gdMOtdHVsbywgZGVzY3JpcGNpw7NuXG4gKiBvcGNpb25hbCB5IENUQSBvcGNpb25hbC4gUmVlbXBsYXphIGVsIHBhdHLDs24gYWQtaG9jIChpb24taWNvbiArIHZhbC10aXRsZSArXG4gKiB2YWwtdGV4dCArIHZhbC1idXR0b24pIHF1ZSBjYWRhIHDDoWdpbmEgdmVuw61hIGltcHJvdmlzYW5kby5cbiAqXG4gKiBJMThuOiBsb3Mgc3RyaW5ncyAoYHRpdGxlYCwgYGRlc2NyaXB0aW9uYCwgYGFjdGlvbi5sYWJlbGApIGxvcyByZXN1ZWx2ZSBsYVxuICogcMOhZ2luYSBhbnRlcyBkZSBjb25zdHJ1aXIgbGFzIHByb3BzLiBFc3RvIG1hbnRpZW5lIGVsIGNvbXBvbmVudGUgYWduw7NzdGljb1xuICogYSBuYW1lc3BhY2VzIHkgY29uc2lzdGVudGUgY29uIGVsIHJlc3RvIGRlIGxhIGxpYiAoRm9ybU1ldGFkYXRhLCBldGMuKS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbXB0eVN0YXRlTWV0YWRhdGEge1xuICAvKiogVMOtdHVsbyBwcmluY2lwYWwuIFJlcXVlcmlkby4gKi9cbiAgdGl0bGU6IHN0cmluZztcbiAgLyoqIERlc2NyaXBjacOzbiBvcGNpb25hbCAoMS0yIGzDrW5lYXMpIGRlYmFqbyBkZWwgdMOtdHVsby4gKi9cbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIC8qKiBWYXJpYW50ZSBzZW3DoW50aWNhLiBEZWZhdWx0IGAnZW1wdHknYC4gKi9cbiAgdmFyaWFudD86IEVtcHR5U3RhdGVWYXJpYW50O1xuICAvKipcbiAgICogTm9tYnJlIGRlbCBpY29ubyBJb25pY29ucyAoa2ViYWItY2FzZSkuIFNpIHNlIG9taXRlLCBlbCBjb21wb25lbnRlIHVzYVxuICAgKiBlbCBkZWZhdWx0IGRlIGxhIHZhcmlhbnRlOlxuICAgKiAgLSBlbXB0eSAgIOKGkiBgZG9jdW1lbnQtb3V0bGluZWBcbiAgICogIC0gZXJyb3IgICDihpIgYGFsZXJ0LWNpcmNsZS1vdXRsaW5lYFxuICAgKiAgLSBvZmZsaW5lIOKGkiBgY2xvdWQtb2ZmbGluZS1vdXRsaW5lYFxuICAgKlxuICAgKiBTaSBwYXPDoXMgdW4gaWNvbm8gY3VzdG9tLCBpbXBvcnRhbG8gKyByZWdpc3RyYWxvIGNvbiBgYWRkSWNvbnMoeyAuLi4gfSlgXG4gICAqIGVuIGVsIGNvbXBvbmVudGUgY29uc3VtaWRvciAoSW9uaWMgc3RhbmRhbG9uZSBubyBhdXRvLXJlZ2lzdHJhKS5cbiAgICovXG4gIGljb24/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBFbW9qaSBhIG1vc3RyYXIgZW4gbHVnYXIgZGVsIGljb25vIElvbmljb25zIChlai4gYCfwn6W5J2ApLiBTaSBzZSBlc3BlY2lmaWNhLFxuICAgKiB0aWVuZSBwcmlvcmlkYWQgc29icmUgYGljb25gL2VsIGRlZmF1bHQgZGUgbGEgdmFyaWFudGUg4oCUIHNlIHJlbmRlcml6YSBjb21vXG4gICAqIHRleHRvIChubyByZXF1aWVyZSByZWdpc3RyYXIgbmFkYSBlbiBJb25pYykuIMOadGlsIHBhcmEgZGFyIHVuIHRvbm8gbcOhc1xuICAgKiBodW1hbm8gYSB1biBlc3RhZG8gZGUgZXJyb3IvdmFjw61vLlxuICAgKi9cbiAgZW1vamk/OiBzdHJpbmc7XG4gIC8qKiBUYW1hw7FvIGRlbCBpY29ubyBlbiBww614ZWxlcy4gRGVmYXVsdCBgNjRgLiAqL1xuICBpY29uU2l6ZT86IG51bWJlcjtcbiAgLyoqIEFjY2nDs24gQ1RBIG9wY2lvbmFsLiBTaSBzZSBvbWl0ZSwgbm8gc2UgbXVlc3RyYSBib3TDs24uICovXG4gIGFjdGlvbj86IEVtcHR5U3RhdGVBY3Rpb247XG59XG4iXX0=
@@ -8,10 +8,11 @@ import { TextComponent } from '../../atoms/text/text.component';
8
8
  import { TitleComponent } from '../../atoms/title/title.component';
9
9
  import { UserAvatarComponent } from '../../atoms/user-avatar/user-avatar.component';
10
10
  import { SearchSelectorComponent } from '../../molecules/select-input/select-input.component';
11
+ import { SkeletonLayoutComponent } from '../skeleton-layout/skeleton-layout.component';
11
12
  import { ComponentStates, InputType } from '../../types';
12
13
  import { I18nService } from '../../../services/i18n';
13
14
  import { OrgService } from '../../../services/org/org.service';
14
- import { PermissionCatalogService, createPermissionLabeler, } from '../../../services/org/permission-catalog.service';
15
+ import { PermissionCatalogService, createPermissionLabeler, groupPermissionsByScope, } from '../../../services/org/permission-catalog.service';
15
16
  import { ToastService } from '../../../services/toast.service';
16
17
  import { ValtechErrorService } from '../../../services/errors/valtech-error.service';
17
18
  import { ConfirmationDialogService } from '../../../services/confirmation-dialog/confirmation-dialog.service';
@@ -45,6 +46,16 @@ export class MemberDetailModalComponent {
45
46
  this.catalog = inject(PermissionCatalogService);
46
47
  /** Labeler de permisos con la SSOT del backend (catálogo). Se llena al cargar. */
47
48
  this.permLabeler = signal(null);
49
+ /** Catálogo del backend (define el alcance de cada recurso para agrupar). */
50
+ this.catalogResp = signal(null);
51
+ /**
52
+ * `true` mientras el catálogo aún no llegó (y hay `orgId` para pedirlo, sin
53
+ * error). Mientras tanto, la sección de permisos muestra skeleton — evita el
54
+ * parpadeo inglés→español del fallback humanizado antes de tener los labels es.
55
+ * Sin `orgId` el catálogo nunca se pide → `false` desde el arranque (se renderiza
56
+ * con el fallback, sin skeleton infinito).
57
+ */
58
+ this.permsLoading = signal(false);
48
59
  /** Organización a la que pertenece el miembro. */
49
60
  this.orgId = '';
50
61
  /** Si true, habilita cambio de rol y eliminación. */
@@ -76,6 +87,31 @@ export class MemberDetailModalComponent {
76
87
  const role = this.availableRoles.find(r => r.id === roleId || r.name === roleId);
77
88
  return role?.permissions ?? [];
78
89
  });
90
+ /**
91
+ * Permisos del rol actual agrupados por alcance (app actual / organización /
92
+ * otras apps) con sus labels ya resueltos — mismo patrón que `val-permissions-view`.
93
+ * Si el catálogo no cargó (sin `orgId` o falló), agrupa con un catálogo vacío:
94
+ * sin scope no se pueden clasificar los recursos → cae a un único grupo `org`
95
+ * con el labeler humanizado, manteniendo los chips visibles.
96
+ */
97
+ this.permissionGroups = computed(() => {
98
+ this.i18n.lang();
99
+ const perms = this.permissionsForCurrentRole();
100
+ if (perms.length === 0)
101
+ return [];
102
+ const catalog = this.catalogResp();
103
+ const labels = {
104
+ app: this.t('groupApp'),
105
+ org: this.t('groupOrg'),
106
+ other: this.t('groupOther'),
107
+ appLabel: (appId) => this.appLabel(appId),
108
+ };
109
+ if (catalog) {
110
+ return groupPermissionsByScope(perms, catalog, catalog.appId, this.permissionLabel.bind(this), labels);
111
+ }
112
+ // Sin catálogo: no hay scope → un solo grupo "organización" con el fallback.
113
+ return [{ key: 'org', label: labels.org, scope: 'org', perms: perms.map(p => this.permissionLabel(p)) }];
114
+ });
79
115
  this.roleSelectProps = computed(() => ({
80
116
  control: this.roleControl,
81
117
  label: '',
@@ -113,15 +149,31 @@ export class MemberDetailModalComponent {
113
149
  if (v && v !== this.currentRole())
114
150
  void this.onChangeRole(v);
115
151
  });
116
- // Catálogo del backend = SSOT de los labels de permisos (ADR-024). Si falla,
117
- // `permissionLabel` cae al fallback humanizado (no rompe el modal).
152
+ // Catálogo del backend = SSOT de los labels de permisos + del alcance para
153
+ // agrupar (ADR-024). Mientras carga mostramos skeleton (mata el parpadeo
154
+ // inglés→español del fallback). Si falla, `permissionLabel` cae al fallback
155
+ // humanizado (no rompe el modal). Sin `orgId` el catálogo nunca se pide →
156
+ // permsLoading queda false (se renderiza con el fallback, sin skeleton infinito).
118
157
  if (this.orgId) {
158
+ this.permsLoading.set(true);
119
159
  this.catalog.getCatalog(this.orgId).subscribe({
120
- next: catalog => this.permLabeler.set(createPermissionLabeler(catalog, this.i18n.lang(), { allLabel: this.t('permAll') })),
121
- error: () => { },
160
+ next: catalog => {
161
+ this.catalogResp.set(catalog);
162
+ this.permLabeler.set(createPermissionLabeler(catalog, this.i18n.lang(), { allLabel: this.t('permAll') }));
163
+ this.permsLoading.set(false);
164
+ },
165
+ error: () => {
166
+ this.permsLoading.set(false);
167
+ },
122
168
  });
123
169
  }
124
170
  }
171
+ /** Resuelve el nombre legible de una app por su appId (key `app_{id}`). */
172
+ appLabel(appId) {
173
+ const key = `app_${appId}`;
174
+ const label = this.t(key);
175
+ return label === key ? appId : label;
176
+ }
125
177
  permissionLabel(perm) {
126
178
  // SSOT = catálogo del backend. Hasta que cargue (o si falló), fallback a un
127
179
  // labeler vacío que humaniza el código crudo (evita salidas vacías como
@@ -262,12 +314,24 @@ export class MemberDetailModalComponent {
262
314
  }
263
315
  </div>
264
316
 
265
- @if (permissionsForCurrentRole().length > 0) {
317
+ @if (permsLoading()) {
266
318
  <div class="perms-section">
267
319
  <span class="perms-label">{{ t('permissionsTitle') }}</span>
268
- <div class="perms-list">
269
- @for (perm of permissionsForCurrentRole(); track perm) {
270
- <span class="perm-chip">{{ permissionLabel(perm) }}</span>
320
+ <val-skeleton-layout [props]="{ preset: 'list', rows: 3 }" />
321
+ </div>
322
+ } @else if (permissionsForCurrentRole().length > 0) {
323
+ <div class="perms-section">
324
+ <span class="perms-label">{{ t('permissionsTitle') }}</span>
325
+ <div class="perm-groups">
326
+ @for (g of permissionGroups(); track g.key) {
327
+ <div [class]="'perm-group perm-group--' + g.scope">
328
+ <span class="perm-group__badge">{{ g.label }}</span>
329
+ <div class="perm-chips">
330
+ @for (p of g.perms; track p) {
331
+ <span class="perm-chip">{{ p }}</span>
332
+ }
333
+ </div>
334
+ </div>
271
335
  }
272
336
  </div>
273
337
  </div>
@@ -285,7 +349,7 @@ export class MemberDetailModalComponent {
285
349
  </ion-button>
286
350
  </div>
287
351
  </ion-content>
288
- `, isInline: true, styles: ["ion-content{--padding-bottom: 24px}.member-head{display:flex;flex-direction:column;align-items:center;text-align:center;gap:6px;margin-bottom:20px}val-display{display:block}val-title{display:block}.role-section{display:flex;flex-direction:column;gap:8px;margin-bottom:24px}.role-readonly-label{font-size:.74rem;font-weight:600;text-transform:uppercase;letter-spacing:.04em;color:var(--ion-color-medium)}.member-role-badge{font-size:.78rem;font-weight:700;text-transform:uppercase;letter-spacing:.04em;padding:4px 12px;border-radius:20px;width:fit-content;background:color-mix(in srgb,var(--ion-color-primary) 12%,transparent);color:var(--ion-color-primary)}.perms-section{display:flex;flex-direction:column;gap:10px;margin-bottom:24px}.perms-label{font-size:.74rem;font-weight:600;text-transform:uppercase;letter-spacing:.04em;color:var(--ion-color-medium)}.perms-list{display:flex;flex-wrap:wrap;gap:6px}.perm-chip{font-size:.75rem;font-weight:500;padding:3px 10px;border-radius:20px;border:1px solid var(--val-border-color, rgba(0, 0, 0, .12));color:var(--ion-color-dark);background:transparent}.remove-section{border-top:1px solid var(--val-border-color, rgba(0, 0, 0, .08));padding-top:20px}.modal-close-bottom{margin-top:16px}\n"], dependencies: [{ kind: "component", type: IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "component", type: IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: IonContent, selector: "ion-content", inputs: ["color", "fixedSlotPlacement", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "component", type: ButtonComponent, selector: "val-button", inputs: ["preset", "props"], outputs: ["onClick"] }, { kind: "component", type: DisplayComponent, selector: "val-display", inputs: ["props"] }, { kind: "component", type: SearchSelectorComponent, selector: "val-select-input", inputs: ["preset", "props"] }, { kind: "component", type: TextComponent, selector: "val-text", inputs: ["props"] }, { kind: "component", type: TitleComponent, selector: "val-title", inputs: ["props"] }, { kind: "component", type: UserAvatarComponent, selector: "val-user-avatar", inputs: ["props"], outputs: ["onClick"] }] }); }
352
+ `, isInline: true, styles: ["ion-content{--padding-bottom: 24px}.member-head{display:flex;flex-direction:column;align-items:center;text-align:center;gap:6px;margin-bottom:20px}val-display{display:block}val-title{display:block}.role-section{display:flex;flex-direction:column;gap:8px;margin-bottom:24px}.role-readonly-label{font-size:.74rem;font-weight:600;text-transform:uppercase;letter-spacing:.04em;color:var(--ion-color-medium)}.member-role-badge{font-size:.78rem;font-weight:700;text-transform:uppercase;letter-spacing:.04em;padding:4px 12px;border-radius:20px;width:fit-content;background:color-mix(in srgb,var(--ion-color-primary) 12%,transparent);color:var(--ion-color-primary)}.perms-section{display:flex;flex-direction:column;gap:10px;margin-bottom:24px}.perms-label{font-size:.74rem;font-weight:600;text-transform:uppercase;letter-spacing:.04em;color:var(--ion-color-medium)}.perm-groups{display:flex;flex-direction:column;gap:12px}.perm-group{display:flex;flex-direction:column;gap:6px}.perm-group__badge{align-self:flex-start;display:inline-flex;align-items:center;gap:4px;font-size:.6875rem;font-weight:700;text-transform:uppercase;letter-spacing:.04em;padding:3px 9px;border-radius:6px}.perm-group--app .perm-group__badge{color:var(--ion-color-primary);background:rgba(var(--ion-color-primary-rgb),.12)}.perm-group--org .perm-group__badge{color:var(--ion-color-medium-shade, var(--ion-color-medium));background:var(--ion-color-light-shade, rgba(0, 0, 0, .06))}.perm-group--other .perm-group__badge{color:var(--ion-color-tertiary);background:rgba(var(--ion-color-tertiary-rgb),.12)}.perm-chips{display:flex;flex-wrap:wrap;gap:6px}.perm-chip{font-size:.75rem;padding:3px 10px;border-radius:20px;background:var(--ion-color-light);color:var(--ion-color-dark)}.perm-group--app .perm-chip{background:rgba(var(--ion-color-primary-rgb),.08)}.perm-group--other .perm-chip{background:rgba(var(--ion-color-tertiary-rgb),.08)}.remove-section{border-top:1px solid var(--val-border-color, rgba(0, 0, 0, .08));padding-top:20px}.modal-close-bottom{margin-top:16px}\n"], dependencies: [{ kind: "component", type: IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "component", type: IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: IonContent, selector: "ion-content", inputs: ["color", "fixedSlotPlacement", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "component", type: ButtonComponent, selector: "val-button", inputs: ["preset", "props"], outputs: ["onClick"] }, { kind: "component", type: DisplayComponent, selector: "val-display", inputs: ["props"] }, { kind: "component", type: SearchSelectorComponent, selector: "val-select-input", inputs: ["preset", "props"] }, { kind: "component", type: SkeletonLayoutComponent, selector: "val-skeleton-layout", inputs: ["props"] }, { kind: "component", type: TextComponent, selector: "val-text", inputs: ["props"] }, { kind: "component", type: TitleComponent, selector: "val-title", inputs: ["props"] }, { kind: "component", type: UserAvatarComponent, selector: "val-user-avatar", inputs: ["props"], outputs: ["onClick"] }] }); }
289
353
  }
290
354
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: MemberDetailModalComponent, decorators: [{
291
355
  type: Component,
@@ -299,6 +363,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
299
363
  ButtonComponent,
300
364
  DisplayComponent,
301
365
  SearchSelectorComponent,
366
+ SkeletonLayoutComponent,
302
367
  TextComponent,
303
368
  TitleComponent,
304
369
  UserAvatarComponent,
@@ -359,12 +424,24 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
359
424
  }
360
425
  </div>
361
426
 
362
- @if (permissionsForCurrentRole().length > 0) {
427
+ @if (permsLoading()) {
428
+ <div class="perms-section">
429
+ <span class="perms-label">{{ t('permissionsTitle') }}</span>
430
+ <val-skeleton-layout [props]="{ preset: 'list', rows: 3 }" />
431
+ </div>
432
+ } @else if (permissionsForCurrentRole().length > 0) {
363
433
  <div class="perms-section">
364
434
  <span class="perms-label">{{ t('permissionsTitle') }}</span>
365
- <div class="perms-list">
366
- @for (perm of permissionsForCurrentRole(); track perm) {
367
- <span class="perm-chip">{{ permissionLabel(perm) }}</span>
435
+ <div class="perm-groups">
436
+ @for (g of permissionGroups(); track g.key) {
437
+ <div [class]="'perm-group perm-group--' + g.scope">
438
+ <span class="perm-group__badge">{{ g.label }}</span>
439
+ <div class="perm-chips">
440
+ @for (p of g.perms; track p) {
441
+ <span class="perm-chip">{{ p }}</span>
442
+ }
443
+ </div>
444
+ </div>
368
445
  }
369
446
  </div>
370
447
  </div>
@@ -382,7 +459,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
382
459
  </ion-button>
383
460
  </div>
384
461
  </ion-content>
385
- `, styles: ["ion-content{--padding-bottom: 24px}.member-head{display:flex;flex-direction:column;align-items:center;text-align:center;gap:6px;margin-bottom:20px}val-display{display:block}val-title{display:block}.role-section{display:flex;flex-direction:column;gap:8px;margin-bottom:24px}.role-readonly-label{font-size:.74rem;font-weight:600;text-transform:uppercase;letter-spacing:.04em;color:var(--ion-color-medium)}.member-role-badge{font-size:.78rem;font-weight:700;text-transform:uppercase;letter-spacing:.04em;padding:4px 12px;border-radius:20px;width:fit-content;background:color-mix(in srgb,var(--ion-color-primary) 12%,transparent);color:var(--ion-color-primary)}.perms-section{display:flex;flex-direction:column;gap:10px;margin-bottom:24px}.perms-label{font-size:.74rem;font-weight:600;text-transform:uppercase;letter-spacing:.04em;color:var(--ion-color-medium)}.perms-list{display:flex;flex-wrap:wrap;gap:6px}.perm-chip{font-size:.75rem;font-weight:500;padding:3px 10px;border-radius:20px;border:1px solid var(--val-border-color, rgba(0, 0, 0, .12));color:var(--ion-color-dark);background:transparent}.remove-section{border-top:1px solid var(--val-border-color, rgba(0, 0, 0, .08));padding-top:20px}.modal-close-bottom{margin-top:16px}\n"] }]
462
+ `, styles: ["ion-content{--padding-bottom: 24px}.member-head{display:flex;flex-direction:column;align-items:center;text-align:center;gap:6px;margin-bottom:20px}val-display{display:block}val-title{display:block}.role-section{display:flex;flex-direction:column;gap:8px;margin-bottom:24px}.role-readonly-label{font-size:.74rem;font-weight:600;text-transform:uppercase;letter-spacing:.04em;color:var(--ion-color-medium)}.member-role-badge{font-size:.78rem;font-weight:700;text-transform:uppercase;letter-spacing:.04em;padding:4px 12px;border-radius:20px;width:fit-content;background:color-mix(in srgb,var(--ion-color-primary) 12%,transparent);color:var(--ion-color-primary)}.perms-section{display:flex;flex-direction:column;gap:10px;margin-bottom:24px}.perms-label{font-size:.74rem;font-weight:600;text-transform:uppercase;letter-spacing:.04em;color:var(--ion-color-medium)}.perm-groups{display:flex;flex-direction:column;gap:12px}.perm-group{display:flex;flex-direction:column;gap:6px}.perm-group__badge{align-self:flex-start;display:inline-flex;align-items:center;gap:4px;font-size:.6875rem;font-weight:700;text-transform:uppercase;letter-spacing:.04em;padding:3px 9px;border-radius:6px}.perm-group--app .perm-group__badge{color:var(--ion-color-primary);background:rgba(var(--ion-color-primary-rgb),.12)}.perm-group--org .perm-group__badge{color:var(--ion-color-medium-shade, var(--ion-color-medium));background:var(--ion-color-light-shade, rgba(0, 0, 0, .06))}.perm-group--other .perm-group__badge{color:var(--ion-color-tertiary);background:rgba(var(--ion-color-tertiary-rgb),.12)}.perm-chips{display:flex;flex-wrap:wrap;gap:6px}.perm-chip{font-size:.75rem;padding:3px 10px;border-radius:20px;background:var(--ion-color-light);color:var(--ion-color-dark)}.perm-group--app .perm-chip{background:rgba(var(--ion-color-primary-rgb),.08)}.perm-group--other .perm-chip{background:rgba(var(--ion-color-tertiary-rgb),.08)}.remove-section{border-top:1px solid var(--val-border-color, rgba(0, 0, 0, .08));padding-top:20px}.modal-close-bottom{margin-top:16px}\n"] }]
386
463
  }], ctorParameters: () => [], propDecorators: { _modalRef: [{
387
464
  type: Input
388
465
  }], member: [{
@@ -400,4 +477,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
400
477
  }], i18nNamespace: [{
401
478
  type: Input
402
479
  }] } });
403
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVtYmVyLWRldGFpbC1tb2RhbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvb3JnYW5pc21zL21lbWJlci1kZXRhaWwtbW9kYWwvbWVtYmVyLWRldGFpbC1tb2RhbC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlGLE9BQU8sRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsY0FBYyxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUNwRCxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRXJHLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUN0RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUN6RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDaEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBQ3BGLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHFEQUFxRCxDQUFDO0FBQzlGLE9BQU8sRUFBa0IsZUFBZSxFQUFpQixTQUFTLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFeEYsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUMvRCxPQUFPLEVBQ0wsd0JBQXdCLEVB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R0csS0FBSztzQkFBYixLQUFLO2dCQUdHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBR0csTUFBTTtzQkFBZCxLQUFLO2dCQUdHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBT0csU0FBUztzQkFBakIsS0FBSztnQkFHRyxhQUFhO3NCQUFyQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBjb21wdXRlZCwgaW5qZWN0LCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBmaXJzdFZhbHVlRnJvbSwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBJb25CdXR0b24sIElvbkJ1dHRvbnMsIElvbkNvbnRlbnQsIElvbkhlYWRlciwgSW9uVG9vbGJhciB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyL3N0YW5kYWxvbmUnO1xuXG5pbXBvcnQgeyBCdXR0b25Db21wb25lbnQgfSBmcm9tICcuLi8uLi9hdG9tcy9idXR0b24vYnV0dG9uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEaXNwbGF5Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYXRvbXMvZGlzcGxheS9kaXNwbGF5LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUZXh0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYXRvbXMvdGV4dC90ZXh0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUaXRsZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2F0b21zL3RpdGxlL3RpdGxlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBVc2VyQXZhdGFyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYXRvbXMvdXNlci1hdmF0YXIvdXNlci1hdmF0YXIuY29tcG9uZW50JztcbmltcG9ydCB7IFNlYXJjaFNlbGVjdG9yQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vbW9sZWN1bGVzL3NlbGVjdC1pbnB1dC9zZWxlY3QtaW5wdXQuY29tcG9uZW50JztcbmltcG9ydCB7IEJ1dHRvbk1ldGFkYXRhLCBDb21wb25lbnRTdGF0ZXMsIElucHV0TWV0YWRhdGEsIElucHV0VHlwZSB9IGZyb20gJy4uLy4uL3R5cGVzJztcblxuaW1wb3J0IHsgSTE4blNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9pMThuJztcbmltcG9ydCB7IE9yZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9vcmcvb3JnLnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgUGVybWlzc2lvbkNhdGFsb2dTZXJ2aWNlLFxuICBQZXJtaXNzaW9uTGFiZWxlcixcbiAgY3JlYXRlUGVybWlzc2lvbkxhYmVsZXIsXG59IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL29yZy9wZXJtaXNzaW9uLWNhdGFsb2cuc2VydmljZSc7XG5pbXBvcnQgeyBUb2FzdFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy90b2FzdC5zZXJ2aWNlJztcbmltcG9ydCB7IFZhbHRlY2hFcnJvclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9lcnJvcnMvdmFsdGVjaC1lcnJvci5zZXJ2aWNlJztcbmltcG9ydCB7IENvbmZpcm1hdGlvbkRpYWxvZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9jb25maXJtYXRpb24tZGlhbG9nL2NvbmZpcm1hdGlvbi1kaWFsb2cuc2VydmljZSc7XG5cbmltcG9ydCB7IHJlc29sdmVSb2xlTGFiZWxGcm9tTGlzdCB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL29yZy90eXBlcyc7XG5pbXBvcnQgeyBNZW1iZXJEZXRhaWwsIE9yZ1JvbGVXaXRoUGVybWlzc2lvbnMgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IE1FTUJFUl9ERVRBSUxfTU9EQUxfSTE4TiB9IGZyb20gJy4vbWVtYmVyLWRldGFpbC1tb2RhbC5pMThuJztcblxuY29uc3QgREVGQVVMVF9OQU1FU1BBQ0UgPSAnU2V0dGluZ3MuTWVtYmVyRGV0YWlsJztcblxuLyoqXG4gKiBgdmFsLW1lbWJlci1kZXRhaWwtbW9kYWxgIOKAlCBkZXRhbGxlIGRlIG1pZW1icm8gZGUgb3JnYW5pemFjacOzbjogcGVyZmlsLCByb2wgeVxuICogcGVybWlzb3MuIFByb21vdmlkbyBkZXNkZSBgc2hvd2Nhc2VgIGJham8gZWwgcHJvY2VzbyBkZSBBRFItMDIxLlxuICpcbiAqIFNpIGBjYW5NYW5hZ2VgIGVzIHRydWUsIHBlcm1pdGUgY2FtYmlhciBlbCByb2wgKHbDrWEgYE9yZ1NlcnZpY2UuY2hhbmdlTWVtYmVyUm9sZWApXG4gKiB5IHF1aXRhciBhbCBtaWVtYnJvICh2w61hIGBPcmdTZXJ2aWNlLnJlbW92ZU1lbWJlcmAsIGNvbiBjb25maXJtYWNpw7NuIGRlc3RydWN0aXZhKS5cbiAqIExvcyBwZXJtaXNvcyBkZWwgcm9sIGFjdHVhbCBzZSBtdWVzdHJhbiBjdWFuZG8gZWwgY29uc3VtZXIgbG9zIHByb3ZlZSBlblxuICogYGF2YWlsYWJsZVJvbGVzYC5cbiAqXG4gKiBBYmllcnRvIHbDrWEgYE1vZGFsU2VydmljZWAg4oCUIHJlY2liZSBgX21vZGFsUmVmYCBwb3IgYGNvbXBvbmVudFByb3BzYCArIGNhbGxiYWNrXG4gKiBgb25DaGFuZ2VkYC4gSGVhZGVyIGNhbsOzbmljbyAoUmVnbGEgIzUpOiBzaW4gYGlvbi10aXRsZWAsIGJvdMOzbiBDZXJyYXIgdGV4dG8gZW5cbiAqIGBzbG90PWVuZGAsIGlkZW50aWRhZCBlbiBlbCBib2R5IGNvbiBgdmFsLXVzZXItYXZhdGFyYC9gdmFsLWRpc3BsYXlgL2B2YWwtdGl0bGVgLlxuICpcbiAqIEF1dG8tcmVnaXN0cmEgc3VzIGRlZmF1bHRzIGkxOG4gKGVzL2VuKSBzaSBlbCBjb25zdW1lciBubyBwcm92ZXnDsyBlbCBuYW1lc3BhY2VcbiAqIGBTZXR0aW5ncy5NZW1iZXJEZXRhaWxgLlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2YWwtbWVtYmVyLWRldGFpbC1tb2RhbCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBJb25IZWFkZXIsXG4gICAgSW9uVG9vbGJhcixcbiAgICBJb25CdXR0b25zLFxuICAgIElvbkJ1dHRvbixcbiAgICBJb25Db250ZW50LFxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgQnV0dG9uQ29tcG9uZW50LFxuICAgIERpc3BsYXlDb21wb25lbnQsXG4gICAgU2VhcmNoU2VsZWN0b3JDb21wb25lbnQsXG4gICAgVGV4dENvbXBvbmVudCxcbiAgICBUaXRsZUNvbXBvbmVudCxcbiAgICBVc2VyQXZhdGFyQ29tcG9uZW50LFxuICBdLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxpb24taGVhZGVyPlxuICAgICAgPGlvbi10b29sYmFyPlxuICAgICAgICA8aW9uLWJ1dHRvbnMgc2xvdD1cImVuZFwiPlxuICAgICAgICAgIDxpb24tYnV0dG9uIGZpbGw9XCJjbGVhclwiIGNvbG9yPVwiZGFya1wiIHNoYXBlPVwicm91bmRcIiAoY2xpY2spPVwiZGlzbWlzcygpXCI+XG4gICAgICAgICAgICA8c3Ryb25nPnt7IHQoJ2Nsb3NlJykgfX08L3N0cm9uZz5cbiAgICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICAgIDwvaW9uLWJ1dHRvbnM+XG4gICAgICA8L2lvbi10b29sYmFyPlxuICAgIDwvaW9uLWhlYWRlcj5cblxuICAgIDxpb24tY29udGVudCBjbGFzcz1cImlvbi1wYWRkaW5nXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwibWVtYmVyLWhlYWRcIj5cbiAgICAgICAgPHZhbC11c2VyLWF2YXRhclxuICAgICAgICAgIFtwcm9wc109XCJ7XG4gICAgICAgICAgICBuYW1lOiBtZW1iZXIubmFtZSxcbiAgICAgICAgICAgIGF2YXRhclVybDogbWVtYmVyLmF2YXRhcixcbiAgICAgICAgICAgIGVtYWlsOiBtZW1iZXIuZW1haWwsXG4gICAgICAgICAgICBzaXplOiAnbGFyZ2UnLFxuICAgICAgICAgIH1cIlxuICAgICAgICAvPlxuICAgICAgICA8dmFsLWRpc3BsYXkgW3Byb3BzXT1cInsgY29udGVudDogZGlzcGxheU5hbWUoKSwgc2l6ZTogJ3NtYWxsJywgY29sb3I6ICdkYXJrJyB9XCIgLz5cbiAgICAgICAgPHZhbC10aXRsZVxuICAgICAgICAgIFtwcm9wc109XCJ7XG4gICAgICAgICAgICBjb250ZW50OiBzdWJ0aXRsZSgpLFxuICAgICAgICAgICAgc2l6ZTogJ2xhcmdlJyxcbiAgICAgICAgICAgIGNvbG9yOiAnJyxcbiAgICAgICAgICAgIGJvbGQ6IGZhbHNlLFxuICAgICAgICAgIH1cIlxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJyb2xlLXNlY3Rpb25cIj5cbiAgICAgICAgQGlmIChjYW5NYW5hZ2UpIHtcbiAgICAgICAgICA8dmFsLXRpdGxlXG4gICAgICAgICAgICBbcHJvcHNdPVwie1xuICAgICAgICAgICAgICBjb250ZW50OiB0KCdyb2xlTGFiZWwnKSxcbiAgICAgICAgICAgICAgc2l6ZTogJ3NtYWxsJyxcbiAgICAgICAgICAgICAgY29sb3I6ICdkYXJrJyxcbiAgICAgICAgICAgICAgYm9sZDogZmFsc2UsXG4gICAgICAgICAgICB9XCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIDx2YWwtc2VsZWN0LWlucHV0IGRhdGEtdGVzdGlkPVwibWVtYmVyLXJvbGUtc2VsZWN0XCIgW3Byb3BzXT1cInJvbGVTZWxlY3RQcm9wcygpXCIgLz5cbiAgICAgICAgICA8dmFsLXRleHRcbiAgICAgICAgICAgIFtwcm9wc109XCJ7XG4gICAgICAgICAgICAgIGNvbnRlbnQ6IHQoJ3JvbGVIaW50JyksXG4gICAgICAgICAgICAgIHNpemU6ICdzbWFsbCcsXG4gICAgICAgICAgICAgIGNvbG9yOiAnbWVkaXVtJyxcbiAgICAgICAgICAgICAgYm9sZDogZmFsc2UsXG4gICAgICAgICAgICB9XCJcbiAgICAgICAgICAvPlxuICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInJvbGUtcmVhZG9ubHktbGFiZWxcIj57eyB0KCdyb2xlUmVhZG9ubHknKSB9fTwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1lbWJlci1yb2xlLWJhZGdlXCI+e3sgY3VycmVudFJvbGVMYWJlbCgpIH19PC9zcGFuPlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cblxuICAgICAgQGlmIChwZXJtaXNzaW9uc0ZvckN1cnJlbnRSb2xlKCkubGVuZ3RoID4gMCkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwicGVybXMtc2VjdGlvblwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGVybXMtbGFiZWxcIj57eyB0KCdwZXJtaXNzaW9uc1RpdGxlJykgfX08L3NwYW4+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInBlcm1zLWxpc3RcIj5cbiAgICAgICAgICAgIEBmb3IgKHBlcm0gb2YgcGVybWlzc2lvbnNGb3JDdXJyZW50Um9sZSgpOyB0cmFjayBwZXJtKSB7XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGVybS1jaGlwXCI+e3sgcGVybWlzc2lvbkxhYmVsKHBlcm0pIH19PC9zcGFuPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cblxuICAgICAgQGlmIChjYW5NYW5hZ2UpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cInJlbW92ZS1zZWN0aW9uXCI+XG4gICAgICAgICAgPHZhbC1idXR0b24gW3Byb3BzXT1cInJlbW92ZUJ1dHRvblByb3BzKClcIiAoY2xpY2spPVwib25SZW1vdmUoKVwiIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuXG4gICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtY2xvc2UtYm90dG9tXCI+XG4gICAgICAgIDxpb24tYnV0dG9uIGV4cGFuZD1cImJsb2NrXCIgZmlsbD1cIm91dGxpbmVcIiBjb2xvcj1cImRhcmtcIiBzaGFwZT1cInJvdW5kXCIgKGNsaWNrKT1cImRpc21pc3MoKVwiPlxuICAgICAgICAgIHt7IHQoJ2Nsb3NlJykgfX1cbiAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9pb24tY29udGVudD5cbiAgYCxcbiAgc3R5bGVzOiBbXG4gICAgYFxuICAgICAgaW9uLWNvbnRlbnQge1xuICAgICAgICAtLXBhZGRpbmctYm90dG9tOiAyNHB4O1xuICAgICAgfVxuICAgICAgLm1lbWJlci1oZWFkIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICBnYXA6IDZweDtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMjBweDtcbiAgICAgIH1cbiAgICAgIHZhbC1kaXNwbGF5IHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICB9XG4gICAgICB2YWwtdGl0bGUge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIH1cbiAgICAgIC5yb2xlLXNlY3Rpb24ge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICBnYXA6IDhweDtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMjRweDtcbiAgICAgIH1cbiAgICAgIC5yb2xlLXJlYWRvbmx5LWxhYmVsIHtcbiAgICAgICAgZm9udC1zaXplOiAwLjc0cmVtO1xuICAgICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgICAgICBsZXR0ZXItc3BhY2luZzogMC4wNGVtO1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLW1lZGl1bSk7XG4gICAgICB9XG4gICAgICAubWVtYmVyLXJvbGUtYmFkZ2Uge1xuICAgICAgICBmb250LXNpemU6IDAuNzhyZW07XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgICAgIGxldHRlci1zcGFjaW5nOiAwLjA0ZW07XG4gICAgICAgIHBhZGRpbmc6IDRweCAxMnB4O1xuICAgICAgICBib3JkZXItcmFkaXVzOiAyMHB4O1xuICAgICAgICB3aWR0aDogZml0LWNvbnRlbnQ7XG4gICAgICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1pb24tY29sb3ItcHJpbWFyeSkgMTIlLCB0cmFuc3BhcmVudCk7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tY29sb3ItcHJpbWFyeSk7XG4gICAgICB9XG4gICAgICAucGVybXMtc2VjdGlvbiB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIGdhcDogMTBweDtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMjRweDtcbiAgICAgIH1cbiAgICAgIC5wZXJtcy1sYWJlbCB7XG4gICAgICAgIGZvbnQtc2l6ZTogMC43NHJlbTtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuMDRlbTtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi1jb2xvci1tZWRpdW0pO1xuICAgICAgfVxuICAgICAgLnBlcm1zLWxpc3Qge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAgICAgIGdhcDogNnB4O1xuICAgICAgfVxuICAgICAgLnBlcm0tY2hpcCB7XG4gICAgICAgIGZvbnQtc2l6ZTogMC43NXJlbTtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICAgICAgcGFkZGluZzogM3B4IDEwcHg7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDIwcHg7XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLXZhbC1ib3JkZXItY29sb3IsIHJnYmEoMCwgMCwgMCwgMC4xMikpO1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLWRhcmspO1xuICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICAgIH1cbiAgICAgIC5yZW1vdmUtc2VjdGlvbiB7XG4gICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCB2YXIoLS12YWwtYm9yZGVyLWNvbG9yLCByZ2JhKDAsIDAsIDAsIDAuMDgpKTtcbiAgICAgICAgcGFkZGluZy10b3A6IDIwcHg7XG4gICAgICB9XG4gICAgICAubW9kYWwtY2xvc2UtYm90dG9tIHtcbiAgICAgICAgbWFyZ2luLXRvcDogMTZweDtcbiAgICAgIH1cbiAgICBgLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBNZW1iZXJEZXRhaWxNb2RhbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSBvcmdTZXJ2aWNlID0gaW5qZWN0KE9yZ1NlcnZpY2UpO1xuICBwcml2YXRlIHRvYXN0ID0gaW5qZWN0KFRvYXN0U2VydmljZSk7XG4gIHByaXZhdGUgZXJyb3JzID0gaW5qZWN0KFZhbHRlY2hFcnJvclNlcnZpY2UpO1xuICBwcml2YXRlIGkxOG4gPSBpbmplY3QoSTE4blNlcnZpY2UpO1xuICBwcml2YXRlIGNvbmZpcm1EaWFsb2cgPSBpbmplY3QoQ29uZmlybWF0aW9uRGlhbG9nU2VydmljZSk7XG4gIHByaXZhdGUgY2F0YWxvZyA9IGluamVjdChQZXJtaXNzaW9uQ2F0YWxvZ1NlcnZpY2UpO1xuXG4gIC8qKiBMYWJlbGVyIGRlIHBlcm1pc29zIGNvbiBsYSBTU09UIGRlbCBiYWNrZW5kIChjYXTDoWxvZ28pLiBTZSBsbGVuYSBhbCBjYXJnYXIuICovXG4gIHByaXZhdGUgcmVhZG9ubHkgcGVybUxhYmVsZXIgPSBzaWduYWw8UGVybWlzc2lvbkxhYmVsZXIgfCBudWxsPihudWxsKTtcblxuICAvKiogSW55ZWN0YWRvIHBvciBgTW9kYWxTZXJ2aWNlLm9wZW5gIOKAlCByZWZlcmVuY2lhIHBhcmEgY2VycmFyIGRlc2RlIGRlbnRyby4gKi9cbiAgQElucHV0KCkgX21vZGFsUmVmPzogeyBkaXNtaXNzOiAoZGF0YT86IHVua25vd24sIHJvbGU/OiBzdHJpbmcpID0+IHZvaWQgfTtcblxuICAvKiogTWllbWJybyBhIG1vc3RyYXIgKHBhc2FkbyBwb3IgYGNvbXBvbmVudFByb3BzYCkuICovXG4gIEBJbnB1dCgpIG1lbWJlciE6IE1lbWJlckRldGFpbDtcblxuICAvKiogT3JnYW5pemFjacOzbiBhIGxhIHF1ZSBwZXJ0ZW5lY2UgZWwgbWllbWJyby4gKi9cbiAgQElucHV0KCkgb3JnSWQgPSAnJztcblxuICAvKiogU2kgdHJ1ZSwgaGFiaWxpdGEgY2FtYmlvIGRlIHJvbCB5IGVsaW1pbmFjacOzbi4gKi9cbiAgQElucHV0KCkgY2FuTWFuYWdlID0gZmFsc2U7XG5cbiAgLyoqIFNpIHRydWUsIGVsIG1pZW1icm8gbW9zdHJhZG8gZXMgZWwgcHJvcGlvIHVzdWFyaW8uICovXG4gIEBJbnB1dCgpIGlzU2VsZiA9IGZhbHNlO1xuXG4gIC8qKiBSb2xlcyBkaXNwb25pYmxlcyAoY29uIHBlcm1pc29zIG9wY2lvbmFsZXMpIHBhcmEgZWwgc2VsZWN0b3IgZGUgcm9sLiAqL1xuICBASW5wdXQoKSBhdmFpbGFibGVSb2xlczogT3JnUm9sZVdpdGhQZXJtaXNzaW9uc1tdID0gW1xuICAgIHsgaWQ6ICd2aWV3ZXInLCBuYW1lOiAndmlld2VyJyB9LFxuICAgIHsgaWQ6ICdlZGl0b3InLCBuYW1lOiAnZWRpdG9yJyB9LFxuICAgIHsgaWQ6ICdhZG1pbicsIG5hbWU6ICdhZG1pbicgfSxcbiAgXTtcblxuICAvKiogQ2FsbGJhY2sgdHJhcyBjYW1iaWFyIHJvbCBvIHF1aXRhciBhbCBtaWVtYnJvIChwYXNhZG8gcG9yIGBjb21wb25lbnRQcm9wc2ApLiAqL1xuICBASW5wdXQoKSBvbkNoYW5nZWQ/OiAoKSA9PiB2b2lkO1xuXG4gIC8qKiBOYW1lc3BhY2UgaTE4biBjb24gcXVlIGxhIHZpc3RhIHJlc3VlbHZlIHN1cyB0ZXh0b3MuICovXG4gIEBJbnB1dCgpIGkxOG5OYW1lc3BhY2UgPSBERUZBVUxUX05BTUVTUEFDRTtcblxuICByZWFkb25seSB3b3JraW5nID0gc2lnbmFsKGZhbHNlKTtcbiAgcmVhZG9ubHkgY3VycmVudFJvbGUgPSBzaWduYWw8c3RyaW5nPignJyk7XG5cbiAgcmVhZG9ubHkgcm9sZUNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2w8c3RyaW5nPignJyk7XG4gIHByaXZhdGUgcm9sZVN1Yj86IFN1YnNjcmlwdGlvbjtcblxuICByZWFkb25seSBkaXNwbGF5TmFtZSA9IGNvbXB1dGVkKCgpID0+IHRoaXMubWVtYmVyPy5uYW1lIHx8IHRoaXMubWVtYmVyPy5oYW5kbGUgfHwgdGhpcy5tZW1iZXI/LmVtYWlsIHx8ICfigJQnKTtcblxuICByZWFkb25seSBzdWJ0aXRsZSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBpZiAodGhpcy5pc1NlbGYpIHJldHVybiB0aGlzLnQoJ3N1YnRpdGxlU2VsZicpO1xuICAgIGlmICh0aGlzLm1lbWJlcj8uaGFuZGxlKSByZXR1cm4gJ0AnICsgdGhpcy5tZW1iZXIuaGFuZGxlO1xuICAgIHJldHVybiB0aGlzLm1lbWJlcj8uZW1haWwgPz8gJyc7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGN1cnJlbnRSb2xlTGFiZWwgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnJvbGVMYWJlbCh0aGlzLmN1cnJlbnRSb2xlKCkpKTtcblxuICByZWFkb25seSBwZXJtaXNzaW9uc0ZvckN1cnJlbnRSb2xlID0gY29tcHV0ZWQ8c3RyaW5nW10+KCgpID0+IHtcbiAgICBjb25zdCByb2xlSWQgPSB0aGlzLmN1cnJlbnRSb2xlKCk7XG4gICAgY29uc3Qgcm9sZSA9IHRoaXMuYXZhaWxhYmxlUm9sZXMuZmluZChyID0+IHIuaWQgPT09IHJvbGVJZCB8fCByLm5hbWUgPT09IHJvbGVJZCk7XG4gICAgcmV0dXJuIHJvbGU/LnBlcm1pc3Npb25zID8/IFtdO1xuICB9KTtcblxuICByZWFkb25seSByb2xlU2VsZWN0UHJvcHMgPSBjb21wdXRlZDxQYXJ0aWFsPElucHV0TWV0YWRhdGE+PigoKSA9PiAoe1xuICAgIGNvbnRyb2w6IHRoaXMucm9sZUNvbnRyb2wgYXMgRm9ybUNvbnRyb2wsXG4gICAgbGFiZWw6ICcnLFxuICAgIHBsYWNlaG9sZGVyOiB0aGlzLnQoJ3JvbGVMYWJlbCcpLFxuICAgIHR5cGU6IElucHV0VHlwZS5TRUxFQ1QsXG4gICAgc3RhdGU6IHRoaXMud29ya2luZygpID8gQ29tcG9uZW50U3RhdGVzLkRJU0FCTEVEIDogQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQsXG4gICAgb3B0aW9uczogdGhpcy5hdmFpbGFibGVSb2xlcy5tYXAociA9PiAoe1xuICAgICAgaWQ6IHIuaWQsXG4gICAgICBuYW1lOiB0aGlzLnJvbGVMYWJlbChyLm5hbWUpLFxuICAgICAgb3JkZXI6IDAsXG4gICAgfSkpLFxuICB9KSk7XG5cbiAgcmVhZG9ubHkgcmVtb3ZlQnV0dG9uUHJvcHMgPSBjb21wdXRlZDxQYXJ0aWFsPEJ1dHRvbk1ldGFkYXRhPj4oKCkgPT4gKHtcbiAgICB0ZXh0OiB0aGlzLnQoJ3JlbW92ZUN0YScpLFxuICAgIHRva2VuOiAnbWVtYmVyLXJlbW92ZScsXG4gICAgY29sb3I6ICdkYW5nZXInLFxuICAgIGZpbGw6ICdvdXRsaW5lJyxcbiAgICBleHBhbmQ6ICdibG9jaycsXG4gICAgc2l6ZTogJ2RlZmF1bHQnLFxuICAgIHNoYXBlOiAncm91bmQnLFxuICAgIHR5cGU6ICdidXR0b24nLFxuICAgIHN0YXRlOiB0aGlzLndvcmtpbmcoKSA/IENvbXBvbmVudFN0YXRlcy5XT1JLSU5HIDogQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQsXG4gIH0pKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmkxOG4ucmVnaXN0ZXJEZWZhdWx0cyhERUZBVUxUX05BTUVTUEFDRSwgTUVNQkVSX0RFVEFJTF9NT0RBTF9JMThOKTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuaTE4bi5yZWdpc3RlckRlZmF1bHRzKHRoaXMuaTE4bk5hbWVzcGFjZSwgTUVNQkVSX0RFVEFJTF9NT0RBTF9JMThOKTtcbiAgICBjb25zdCByb2xlTmFtZSA9IHRoaXMubWVtYmVyPy5yb2xlcz8uWzBdID8/ICcnO1xuICAgIC8vIFJlc29sdmUgdGhlIHJvbGUgbmFtZSB0byBpdHMgVVVJRCAtLSB0aGUgc2VsZWN0IHVzZXMgci5pZCAoVVVJRCkgYXMgdmFsdWVcbiAgICBjb25zdCBtYXRjaGVkID0gdGhpcy5hdmFpbGFibGVSb2xlcy5maW5kKHIgPT4gci5uYW1lID09PSByb2xlTmFtZSk7XG4gICAgY29uc3Qgcm9sZUlkID0gbWF0Y2hlZD8uaWQgPz8gcm9sZU5hbWU7XG4gICAgdGhpcy5jdXJyZW50Um9sZS5zZXQocm9sZUlkKTtcbiAgICB0aGlzLnJvbGVDb250cm9sLnNldFZhbHVlKHJvbGVJZCwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgIHRoaXMucm9sZVN1YiA9IHRoaXMucm9sZUNvbnRyb2wudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSh2ID0+IHtcbiAgICAgIGlmICh2ICYmIHYgIT09IHRoaXMuY3VycmVudFJvbGUoKSkgdm9pZCB0aGlzLm9uQ2hhbmdlUm9sZSh2KTtcbiAgICB9KTtcbiAgICAvLyBDYXTDoWxvZ28gZGVsIGJhY2tlbmQgPSBTU09UIGRlIGxvcyBsYWJlbHMgZGUgcGVybWlzb3MgKEFEUi0wMjQpLiBTaSBmYWxsYSxcbiAgICAvLyBgcGVybWlzc2lvbkxhYmVsYCBjYWUgYWwgZmFsbGJhY2sgaHVtYW5pemFkbyAobm8gcm9tcGUgZWwgbW9kYWwpLlxuICAgIGlmICh0aGlzLm9yZ0lkKSB7XG4gICAgICB0aGlzLmNhdGFsb2cuZ2V0Q2F0YWxvZyh0aGlzLm9yZ0lkKS5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiBjYXRhbG9nID0+XG4gICAgICAgICAgdGhpcy5wZXJtTGFiZWxlci5zZXQoY3JlYXRlUGVybWlzc2lvbkxhYmVsZXIoY2F0YWxvZywgdGhpcy5pMThuLmxhbmcoKSwgeyBhbGxMYWJlbDogdGhpcy50KCdwZXJtQWxsJykgfSkpLFxuICAgICAgICBlcnJvcjogKCkgPT4ge30sXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwZXJtaXNzaW9uTGFiZWwocGVybTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAvLyBTU09UID0gY2F0w6Fsb2dvIGRlbCBiYWNrZW5kLiBIYXN0YSBxdWUgY2FyZ3VlIChvIHNpIGZhbGzDsyksIGZhbGxiYWNrIGEgdW5cbiAgICAvLyBsYWJlbGVyIHZhY8OtbyBxdWUgaHVtYW5pemEgZWwgY8OzZGlnbyBjcnVkbyAoZXZpdGEgc2FsaWRhcyB2YWPDrWFzIGNvbW9cbiAgICAvLyBcIjogR2VzdGlvbmFyXCIpLiBFbCBgKjoqYCB5IHdpbGRjYXJkcyB1c2FuIGVsIGxhYmVsIGkxOG4gYHBlcm1BbGxgLlxuICAgIGNvbnN0IGxhYmVsZXIgPVxuICAgICAgdGhpcy5wZXJtTGFiZWxlcigpID8/XG4gICAgICBjcmVhdGVQZXJtaXNzaW9uTGFiZWxlcih7IHBlcm1pc3Npb25zOiBbXSwgYWN0aW9uTGFiZWxzOiB7fSB9LCB0aGlzLmkxOG4ubGFuZygpLCB7XG4gICAgICAgIGFsbExhYmVsOiB0aGlzLnQoJ3Blcm1BbGwnKSxcbiAgICAgIH0pO1xuICAgIHJldHVybiBsYWJlbGVyKHBlcm0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBvbkNoYW5nZVJvbGUobmV3Um9sZUlkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy53b3JraW5nKCkpIHJldHVybjtcbiAgICB0aGlzLndvcmtpbmcuc2V0KHRydWUpO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLm9yZ1NlcnZpY2UuY2hhbmdlTWVtYmVyUm9sZSh0aGlzLm9yZ0lkLCB0aGlzLm1lbWJlci51c2VySWQsIG5ld1JvbGVJZCkpO1xuICAgICAgdGhpcy5jdXJyZW50Um9sZS5zZXQobmV3Um9sZUlkKTtcbiAgICAgIHRoaXMubWVtYmVyID0geyAuLi50aGlzLm1lbWJlciwgcm9sZXM6IFtuZXdSb2xlSWRdIH07XG4gICAgICB0aGlzLnRvYXN0LnNob3coe1xuICAgICAgICBtZXNzYWdlOiB0aGlzLnQoJ2NoYW5nZVJvbGVTdWNjZXNzJyksXG4gICAgICAgIGNvbG9yOiAnZGFyaycsXG4gICAgICAgIGR1cmF0aW9uOiAzMDAwLFxuICAgICAgfSk7XG4gICAgICB0aGlzLm9uQ2hhbmdlZD8uKCk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aGlzLnJvbGVDb250cm9sLnNldFZhbHVlKHRoaXMuY3VycmVudFJvbGUoKSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgdGhpcy5lcnJvcnMuaGFuZGxlKGVyciwge1xuICAgICAgICBjb250ZXh0OiAnbWVtYmVyRGV0YWlsLmNoYW5nZVJvbGUnLFxuICAgICAgICBmYWxsYmFja0tleTogJ2NoYW5nZVJvbGVFcnJvcicsXG4gICAgICAgIGkxOG5OYW1lc3BhY2U6IHRoaXMuaTE4bk5hbWVzcGFjZSxcbiAgICAgIH0pO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLndvcmtpbmcuc2V0KGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBvblJlbW92ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy53b3JraW5nKCkpIHJldHVybjtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmNvbmZpcm1EaWFsb2cuY29uZmlybURlc3RydWN0aXZlKHtcbiAgICAgIHRpdGxlOiB0aGlzLnQoJ3JlbW92ZUNvbmZpcm1UaXRsZScpLFxuICAgICAgbWVzc2FnZTogdGhpcy50KCdyZW1vdmVDb25maXJtTWVzc2FnZScpLFxuICAgICAgY29uZmlybUJ1dHRvbjogeyB0ZXh0OiB0aGlzLnQoJ3JlbW92ZUNvbmZpcm1PaycpIH0sXG4gICAgICBjYW5jZWxCdXR0b246IHsgdGV4dDogdGhpcy50KCdjYW5jZWxDdGEnKSB9LFxuICAgIH0pO1xuICAgIGlmICghcmVzdWx0LmNvbmZpcm1lZCkgcmV0dXJuO1xuICAgIHRoaXMud29ya2luZy5zZXQodHJ1ZSk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMub3JnU2VydmljZS5yZW1vdmVNZW1iZXIodGhpcy5vcmdJZCwgdGhpcy5tZW1iZXIudXNlcklkKSk7XG4gICAgICB0aGlzLnRvYXN0LnNob3coe1xuICAgICAgICBtZXNzYWdlOiB0aGlzLnQoJ3JlbW92ZVN1Y2Nlc3MnKSxcbiAgICAgICAgY29sb3I6ICdkYXJrJyxcbiAgICAgICAgZHVyYXRpb246IDMwMDAsXG4gICAgICB9KTtcbiAgICAgIHRoaXMub25DaGFuZ2VkPy4oKTtcbiAgICAgIHRoaXMuZGlzbWlzcygpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhpcy5lcnJvcnMuaGFuZGxlKGVyciwge1xuICAgICAgICBjb250ZXh0OiAnbWVtYmVyRGV0YWlsLnJlbW92ZScsXG4gICAgICAgIGZhbGxiYWNrS2V5OiAncmVtb3ZlRXJyb3InLFxuICAgICAgICBpMThuTmFtZXNwYWNlOiB0aGlzLmkxOG5OYW1lc3BhY2UsXG4gICAgICB9KTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy53b3JraW5nLnNldChmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgcm9sZUxhYmVsKHJvbGVJZE9yTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gcmVzb2x2ZVJvbGVMYWJlbEZyb21MaXN0KHJvbGVJZE9yTmFtZSwgdGhpcy5hdmFpbGFibGVSb2xlcywgdGhpcy5pMThuLmxhbmcoKSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnJvbGVTdWI/LnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBkaXNtaXNzKCk6IHZvaWQge1xuICAgIHRoaXMuX21vZGFsUmVmPy5kaXNtaXNzKG51bGwsICdjYW5jZWwnKTtcbiAgfVxuXG4gIHQoa2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmkxOG4udChrZXksIHRoaXMuaTE4bk5hbWVzcGFjZSk7XG4gIH1cbn1cbiJdfQ==
480
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVtYmVyLWRldGFpbC1tb2RhbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvb3JnYW5pc21zL21lbWJlci1kZXRhaWwtbW9kYWwvbWVtYmVyLWRldGFpbC1tb2RhbC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlGLE9BQU8sRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsY0FBYyxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUNwRCxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRXJHLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUN0RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUN6RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDaEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBQ3BGLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHFEQUFxRCxDQUFDO0FBQzlGLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBQ3ZGLE9BQU8sRUFBa0IsZUFBZSxFQUFpQixTQUFTLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFeEYsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxVQUFVLEVB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LENBQUM7K0dBdFBVLDBCQUEwQjttR0FBMUIsMEJBQTBCLDZSQXROM0I7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBNEZULDhqRUExR0MsU0FBUyxvR0FDVCxVQUFVLG1GQUNWLFVBQVUsOEVBQ1YsU0FBUyxvUEFDVCxVQUFVLHVLQUNWLG1CQUFtQiwrQkFDbkIsZUFBZSwwR0FDZixnQkFBZ0IsMkVBQ2hCLHVCQUF1QiwwRkFDdkIsdUJBQXVCLG1GQUN2QixhQUFhLHdFQUNiLGNBQWMseUVBQ2QsbUJBQW1COzs0RkF3TlYsMEJBQTBCO2tCQXhPdEMsU0FBUzsrQkFDRSx5QkFBeUIsY0FDdkIsSUFBSSxXQUNQO3dCQUNQLFNBQVM7d0JBQ1QsVUFBVTt3QkFDVixVQUFVO3dCQUNWLFNBQVM7d0JBQ1QsVUFBVTt3QkFDVixtQkFBbUI7d0JBQ25CLGVBQWU7d0JBQ2YsZ0JBQWdCO3dCQUNoQix1QkFBdUI7d0JBQ3ZCLHVCQUF1Qjt3QkFDdkIsYUFBYTt3QkFDYixjQUFjO3dCQUNkLG1CQUFtQjtxQkFDcEIsWUFDUzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E0RlQ7d0RBa0pRLFNBQVM7c0JBQWpCLEtBQUs7Z0JBR0csTUFBTTtzQkFBZCxLQUFLO2dCQUdHLEtBQUs7c0JBQWIsS0FBSztnQkFHRyxTQUFTO3NCQUFqQixLQUFLO2dCQUdHLE1BQU07c0JBQWQsS0FBSztnQkFHRyxjQUFjO3NCQUF0QixLQUFLO2dCQU9HLFNBQVM7c0JBQWpCLEtBQUs7Z0JBR0csYUFBYTtzQkFBckIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgY29tcHV0ZWQsIGluamVjdCwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1Db250cm9sLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgZmlyc3RWYWx1ZUZyb20sIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgSW9uQnV0dG9uLCBJb25CdXR0b25zLCBJb25Db250ZW50LCBJb25IZWFkZXIsIElvblRvb2xiYXIgfSBmcm9tICdAaW9uaWMvYW5ndWxhci9zdGFuZGFsb25lJztcblxuaW1wb3J0IHsgQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYXRvbXMvYnV0dG9uL2J1dHRvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGlzcGxheUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2F0b21zL2Rpc3BsYXkvZGlzcGxheS5jb21wb25lbnQnO1xuaW1wb3J0IHsgVGV4dENvbXBvbmVudCB9IGZyb20gJy4uLy4uL2F0b21zL3RleHQvdGV4dC5jb21wb25lbnQnO1xuaW1wb3J0IHsgVGl0bGVDb21wb25lbnQgfSBmcm9tICcuLi8uLi9hdG9tcy90aXRsZS90aXRsZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgVXNlckF2YXRhckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2F0b21zL3VzZXItYXZhdGFyL3VzZXItYXZhdGFyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTZWFyY2hTZWxlY3RvckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL21vbGVjdWxlcy9zZWxlY3QtaW5wdXQvc2VsZWN0LWlucHV0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTa2VsZXRvbkxheW91dENvbXBvbmVudCB9IGZyb20gJy4uL3NrZWxldG9uLWxheW91dC9za2VsZXRvbi1sYXlvdXQuY29tcG9uZW50JztcbmltcG9ydCB7IEJ1dHRvbk1ldGFkYXRhLCBDb21wb25lbnRTdGF0ZXMsIElucHV0TWV0YWRhdGEsIElucHV0VHlwZSB9IGZyb20gJy4uLy4uL3R5cGVzJztcblxuaW1wb3J0IHsgSTE4blNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9pMThuJztcbmltcG9ydCB7IE9yZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9vcmcvb3JnLnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgUGVybWlzc2lvbkNhdGFsb2dTZXJ2aWNlLFxuICBQZXJtaXNzaW9uQ2F0YWxvZ1Jlc3BvbnNlLFxuICBQZXJtaXNzaW9uTGFiZWxlcixcbiAgUGVybWlzc2lvblNjb3BlR3JvdXAsXG4gIGNyZWF0ZVBlcm1pc3Npb25MYWJlbGVyLFxuICBncm91cFBlcm1pc3Npb25zQnlTY29wZSxcbn0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvb3JnL3Blcm1pc3Npb24tY2F0YWxvZy5zZXJ2aWNlJztcbmltcG9ydCB7IFRvYXN0U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3RvYXN0LnNlcnZpY2UnO1xuaW1wb3J0IHsgVmFsdGVjaEVycm9yU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2Vycm9ycy92YWx0ZWNoLWVycm9yLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29uZmlybWF0aW9uRGlhbG9nU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2NvbmZpcm1hdGlvbi1kaWFsb2cvY29uZmlybWF0aW9uLWRpYWxvZy5zZXJ2aWNlJztcblxuaW1wb3J0IHsgcmVzb2x2ZVJvbGVMYWJlbEZyb21MaXN0IH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvb3JnL3R5cGVzJztcbmltcG9ydCB7IE1lbWJlckRldGFpbCwgT3JnUm9sZVdpdGhQZXJtaXNzaW9ucyB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgTUVNQkVSX0RFVEFJTF9NT0RBTF9JMThOIH0gZnJvbSAnLi9tZW1iZXItZGV0YWlsLW1vZGFsLmkxOG4nO1xuXG5jb25zdCBERUZBVUxUX05BTUVTUEFDRSA9ICdTZXR0aW5ncy5NZW1iZXJEZXRhaWwnO1xuXG4vKipcbiAqIGB2YWwtbWVtYmVyLWRldGFpbC1tb2RhbGAg4oCUIGRldGFsbGUgZGUgbWllbWJybyBkZSBvcmdhbml6YWNpw7NuOiBwZXJmaWwsIHJvbCB5XG4gKiBwZXJtaXNvcy4gUHJvbW92aWRvIGRlc2RlIGBzaG93Y2FzZWAgYmFqbyBlbCBwcm9jZXNvIGRlIEFEUi0wMjEuXG4gKlxuICogU2kgYGNhbk1hbmFnZWAgZXMgdHJ1ZSwgcGVybWl0ZSBjYW1iaWFyIGVsIHJvbCAodsOtYSBgT3JnU2VydmljZS5jaGFuZ2VNZW1iZXJSb2xlYClcbiAqIHkgcXVpdGFyIGFsIG1pZW1icm8gKHbDrWEgYE9yZ1NlcnZpY2UucmVtb3ZlTWVtYmVyYCwgY29uIGNvbmZpcm1hY2nDs24gZGVzdHJ1Y3RpdmEpLlxuICogTG9zIHBlcm1pc29zIGRlbCByb2wgYWN0dWFsIHNlIG11ZXN0cmFuIGN1YW5kbyBlbCBjb25zdW1lciBsb3MgcHJvdmVlIGVuXG4gKiBgYXZhaWxhYmxlUm9sZXNgLlxuICpcbiAqIEFiaWVydG8gdsOtYSBgTW9kYWxTZXJ2aWNlYCDigJQgcmVjaWJlIGBfbW9kYWxSZWZgIHBvciBgY29tcG9uZW50UHJvcHNgICsgY2FsbGJhY2tcbiAqIGBvbkNoYW5nZWRgLiBIZWFkZXIgY2Fuw7NuaWNvIChSZWdsYSAjNSk6IHNpbiBgaW9uLXRpdGxlYCwgYm90w7NuIENlcnJhciB0ZXh0byBlblxuICogYHNsb3Q9ZW5kYCwgaWRlbnRpZGFkIGVuIGVsIGJvZHkgY29uIGB2YWwtdXNlci1hdmF0YXJgL2B2YWwtZGlzcGxheWAvYHZhbC10aXRsZWAuXG4gKlxuICogQXV0by1yZWdpc3RyYSBzdXMgZGVmYXVsdHMgaTE4biAoZXMvZW4pIHNpIGVsIGNvbnN1bWVyIG5vIHByb3ZlecOzIGVsIG5hbWVzcGFjZVxuICogYFNldHRpbmdzLk1lbWJlckRldGFpbGAuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbC1tZW1iZXItZGV0YWlsLW1vZGFsJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIElvbkhlYWRlcixcbiAgICBJb25Ub29sYmFyLFxuICAgIElvbkJ1dHRvbnMsXG4gICAgSW9uQnV0dG9uLFxuICAgIElvbkNvbnRlbnQsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICBCdXR0b25Db21wb25lbnQsXG4gICAgRGlzcGxheUNvbXBvbmVudCxcbiAgICBTZWFyY2hTZWxlY3RvckNvbXBvbmVudCxcbiAgICBTa2VsZXRvbkxheW91dENvbXBvbmVudCxcbiAgICBUZXh0Q29tcG9uZW50LFxuICAgIFRpdGxlQ29tcG9uZW50LFxuICAgIFVzZXJBdmF0YXJDb21wb25lbnQsXG4gIF0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGlvbi1oZWFkZXI+XG4gICAgICA8aW9uLXRvb2xiYXI+XG4gICAgICAgIDxpb24tYnV0dG9ucyBzbG90PVwiZW5kXCI+XG4gICAgICAgICAgPGlvbi1idXR0b24gZmlsbD1cImNsZWFyXCIgY29sb3I9XCJkYXJrXCIgc2hhcGU9XCJyb3VuZFwiIChjbGljayk9XCJkaXNtaXNzKClcIj5cbiAgICAgICAgICAgIDxzdHJvbmc+e3sgdCgnY2xvc2UnKSB9fTwvc3Ryb25nPlxuICAgICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgICAgPC9pb24tYnV0dG9ucz5cbiAgICAgIDwvaW9uLXRvb2xiYXI+XG4gICAgPC9pb24taGVhZGVyPlxuXG4gICAgPGlvbi1jb250ZW50IGNsYXNzPVwiaW9uLXBhZGRpbmdcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJtZW1iZXItaGVhZFwiPlxuICAgICAgICA8dmFsLXVzZXItYXZhdGFyXG4gICAgICAgICAgW3Byb3BzXT1cIntcbiAgICAgICAgICAgIG5hbWU6IG1lbWJlci5uYW1lLFxuICAgICAgICAgICAgYXZhdGFyVXJsOiBtZW1iZXIuYXZhdGFyLFxuICAgICAgICAgICAgZW1haWw6IG1lbWJlci5lbWFpbCxcbiAgICAgICAgICAgIHNpemU6ICdsYXJnZScsXG4gICAgICAgICAgfVwiXG4gICAgICAgIC8+XG4gICAgICAgIDx2YWwtZGlzcGxheSBbcHJvcHNdPVwieyBjb250ZW50OiBkaXNwbGF5TmFtZSgpLCBzaXplOiAnc21hbGwnLCBjb2xvcjogJ2RhcmsnIH1cIiAvPlxuICAgICAgICA8dmFsLXRpdGxlXG4gICAgICAgICAgW3Byb3BzXT1cIntcbiAgICAgICAgICAgIGNvbnRlbnQ6IHN1YnRpdGxlKCksXG4gICAgICAgICAgICBzaXplOiAnbGFyZ2UnLFxuICAgICAgICAgICAgY29sb3I6ICcnLFxuICAgICAgICAgICAgYm9sZDogZmFsc2UsXG4gICAgICAgICAgfVwiXG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cInJvbGUtc2VjdGlvblwiPlxuICAgICAgICBAaWYgKGNhbk1hbmFnZSkge1xuICAgICAgICAgIDx2YWwtdGl0bGVcbiAgICAgICAgICAgIFtwcm9wc109XCJ7XG4gICAgICAgICAgICAgIGNvbnRlbnQ6IHQoJ3JvbGVMYWJlbCcpLFxuICAgICAgICAgICAgICBzaXplOiAnc21hbGwnLFxuICAgICAgICAgICAgICBjb2xvcjogJ2RhcmsnLFxuICAgICAgICAgICAgICBib2xkOiBmYWxzZSxcbiAgICAgICAgICAgIH1cIlxuICAgICAgICAgIC8+XG4gICAgICAgICAgPHZhbC1zZWxlY3QtaW5wdXQgZGF0YS10ZXN0aWQ9XCJtZW1iZXItcm9sZS1zZWxlY3RcIiBbcHJvcHNdPVwicm9sZVNlbGVjdFByb3BzKClcIiAvPlxuICAgICAgICAgIDx2YWwtdGV4dFxuICAgICAgICAgICAgW3Byb3BzXT1cIntcbiAgICAgICAgICAgICAgY29udGVudDogdCgncm9sZUhpbnQnKSxcbiAgICAgICAgICAgICAgc2l6ZTogJ3NtYWxsJyxcbiAgICAgICAgICAgICAgY29sb3I6ICdtZWRpdW0nLFxuICAgICAgICAgICAgICBib2xkOiBmYWxzZSxcbiAgICAgICAgICAgIH1cIlxuICAgICAgICAgIC8+XG4gICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgIDxzcGFuIGNsYXNzPVwicm9sZS1yZWFkb25seS1sYWJlbFwiPnt7IHQoJ3JvbGVSZWFkb25seScpIH19PC9zcGFuPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWVtYmVyLXJvbGUtYmFkZ2VcIj57eyBjdXJyZW50Um9sZUxhYmVsKCkgfX08L3NwYW4+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuXG4gICAgICBAaWYgKHBlcm1zTG9hZGluZygpKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJwZXJtcy1zZWN0aW9uXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJwZXJtcy1sYWJlbFwiPnt7IHQoJ3Blcm1pc3Npb25zVGl0bGUnKSB9fTwvc3Bhbj5cbiAgICAgICAgICA8dmFsLXNrZWxldG9uLWxheW91dCBbcHJvcHNdPVwieyBwcmVzZXQ6ICdsaXN0Jywgcm93czogMyB9XCIgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9IEBlbHNlIGlmIChwZXJtaXNzaW9uc0ZvckN1cnJlbnRSb2xlKCkubGVuZ3RoID4gMCkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwicGVybXMtc2VjdGlvblwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGVybXMtbGFiZWxcIj57eyB0KCdwZXJtaXNzaW9uc1RpdGxlJykgfX08L3NwYW4+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInBlcm0tZ3JvdXBzXCI+XG4gICAgICAgICAgICBAZm9yIChnIG9mIHBlcm1pc3Npb25Hcm91cHMoKTsgdHJhY2sgZy5rZXkpIHtcbiAgICAgICAgICAgICAgPGRpdiBbY2xhc3NdPVwiJ3Blcm0tZ3JvdXAgcGVybS1ncm91cC0tJyArIGcuc2NvcGVcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBlcm0tZ3JvdXBfX2JhZGdlXCI+e3sgZy5sYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGVybS1jaGlwc1wiPlxuICAgICAgICAgICAgICAgICAgQGZvciAocCBvZiBnLnBlcm1zOyB0cmFjayBwKSB7XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGVybS1jaGlwXCI+e3sgcCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuXG4gICAgICBAaWYgKGNhbk1hbmFnZSkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwicmVtb3ZlLXNlY3Rpb25cIj5cbiAgICAgICAgICA8dmFsLWJ1dHRvbiBbcHJvcHNdPVwicmVtb3ZlQnV0dG9uUHJvcHMoKVwiIChjbGljayk9XCJvblJlbW92ZSgpXCIgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1jbG9zZS1ib3R0b21cIj5cbiAgICAgICAgPGlvbi1idXR0b24gZXhwYW5kPVwiYmxvY2tcIiBmaWxsPVwib3V0bGluZVwiIGNvbG9yPVwiZGFya1wiIHNoYXBlPVwicm91bmRcIiAoY2xpY2spPVwiZGlzbWlzcygpXCI+XG4gICAgICAgICAge3sgdCgnY2xvc2UnKSB9fVxuICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2lvbi1jb250ZW50PlxuICBgLFxuICBzdHlsZXM6IFtcbiAgICBgXG4gICAgICBpb24tY29udGVudCB7XG4gICAgICAgIC0tcGFkZGluZy1ib3R0b206IDI0cHg7XG4gICAgICB9XG4gICAgICAubWVtYmVyLWhlYWQge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICAgIGdhcDogNnB4O1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAyMHB4O1xuICAgICAgfVxuICAgICAgdmFsLWRpc3BsYXkge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIH1cbiAgICAgIHZhbC10aXRsZSB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgfVxuICAgICAgLnJvbGUtc2VjdGlvbiB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIGdhcDogOHB4O1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAyNHB4O1xuICAgICAgfVxuICAgICAgLnJvbGUtcmVhZG9ubHktbGFiZWwge1xuICAgICAgICBmb250LXNpemU6IDAuNzRyZW07XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgICAgIGxldHRlci1zcGFjaW5nOiAwLjA0ZW07XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tY29sb3ItbWVkaXVtKTtcbiAgICAgIH1cbiAgICAgIC5tZW1iZXItcm9sZS1iYWRnZSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMC43OHJlbTtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuMDRlbTtcbiAgICAgICAgcGFkZGluZzogNHB4IDEycHg7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDIwcHg7XG4gICAgICAgIHdpZHRoOiBmaXQtY29udGVudDtcbiAgICAgICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWlvbi1jb2xvci1wcmltYXJ5KSAxMiUsIHRyYW5zcGFyZW50KTtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi1jb2xvci1wcmltYXJ5KTtcbiAgICAgIH1cbiAgICAgIC5wZXJtcy1zZWN0aW9uIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgZ2FwOiAxMHB4O1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAyNHB4O1xuICAgICAgfVxuICAgICAgLnBlcm1zLWxhYmVsIHtcbiAgICAgICAgZm9udC1zaXplOiAwLjc0cmVtO1xuICAgICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgICAgICBsZXR0ZXItc3BhY2luZzogMC4wNGVtO1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLW1lZGl1bSk7XG4gICAgICB9XG4gICAgICAucGVybS1ncm91cHMge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICBnYXA6IDEycHg7XG4gICAgICB9XG4gICAgICAucGVybS1ncm91cCB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIGdhcDogNnB4O1xuICAgICAgfVxuICAgICAgLyogQmFkZ2UgZGUgYWxjYW5jZSBkZWwgZ3J1cG8g4oCUIGNvbG9yIGNvbXVuaWNhIHNpIGVsIHBlcm1pc28gZXMgZ2VuZXJhbCxcbiAgICAgICAgIGRlIGxhIGFwcCBhY3R1YWwsIG8gZGUgb3RyYSBhcHAuIElkw6ludGljbyBhIHZhbC1wZXJtaXNzaW9ucy12aWV3LiAqL1xuICAgICAgLnBlcm0tZ3JvdXBfX2JhZGdlIHtcbiAgICAgICAgYWxpZ24tc2VsZjogZmxleC1zdGFydDtcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIGdhcDogNHB4O1xuICAgICAgICBmb250LXNpemU6IDAuNjg3NXJlbTtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuMDRlbTtcbiAgICAgICAgcGFkZGluZzogM3B4IDlweDtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4O1xuICAgICAgfVxuICAgICAgLnBlcm0tZ3JvdXAtLWFwcCAucGVybS1ncm91cF9fYmFkZ2Uge1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLXByaW1hcnkpO1xuICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKHZhcigtLWlvbi1jb2xvci1wcmltYXJ5LXJnYiksIDAuMTIpO1xuICAgICAgfVxuICAgICAgLnBlcm0tZ3JvdXAtLW9yZyAucGVybS1ncm91cF9fYmFkZ2Uge1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLW1lZGl1bS1zaGFkZSwgdmFyKC0taW9uLWNvbG9yLW1lZGl1bSkpO1xuICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1pb24tY29sb3ItbGlnaHQtc2hhZGUsIHJnYmEoMCwgMCwgMCwgMC4wNikpO1xuICAgICAgfVxuICAgICAgLnBlcm0tZ3JvdXAtLW90aGVyIC5wZXJtLWdyb3VwX19iYWRnZSB7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tY29sb3ItdGVydGlhcnkpO1xuICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKHZhcigtLWlvbi1jb2xvci10ZXJ0aWFyeS1yZ2IpLCAwLjEyKTtcbiAgICAgIH1cbiAgICAgIC5wZXJtLWNoaXBzIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC13cmFwOiB3cmFwO1xuICAgICAgICBnYXA6IDZweDtcbiAgICAgIH1cbiAgICAgIC5wZXJtLWNoaXAge1xuICAgICAgICBmb250LXNpemU6IDAuNzVyZW07XG4gICAgICAgIHBhZGRpbmc6IDNweCAxMHB4O1xuICAgICAgICBib3JkZXItcmFkaXVzOiAyMHB4O1xuICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1pb24tY29sb3ItbGlnaHQpO1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLWRhcmspO1xuICAgICAgfVxuICAgICAgLyogVGludGUgc3V0aWwgZGUgbG9zIGNoaXBzIHNlZ8O6biBhbGNhbmNlLCBlbiBsw61uZWEgY29uIGVsIGJhZGdlLiAqL1xuICAgICAgLnBlcm0tZ3JvdXAtLWFwcCAucGVybS1jaGlwIHtcbiAgICAgICAgYmFja2dyb3VuZDogcmdiYSh2YXIoLS1pb24tY29sb3ItcHJpbWFyeS1yZ2IpLCAwLjA4KTtcbiAgICAgIH1cbiAgICAgIC5wZXJtLWdyb3VwLS1vdGhlciAucGVybS1jaGlwIHtcbiAgICAgICAgYmFja2dyb3VuZDogcmdiYSh2YXIoLS1pb24tY29sb3ItdGVydGlhcnktcmdiKSwgMC4wOCk7XG4gICAgICB9XG4gICAgICAucmVtb3ZlLXNlY3Rpb24ge1xuICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgdmFyKC0tdmFsLWJvcmRlci1jb2xvciwgcmdiYSgwLCAwLCAwLCAwLjA4KSk7XG4gICAgICAgIHBhZGRpbmctdG9wOiAyMHB4O1xuICAgICAgfVxuICAgICAgLm1vZGFsLWNsb3NlLWJvdHRvbSB7XG4gICAgICAgIG1hcmdpbi10b3A6IDE2cHg7XG4gICAgICB9XG4gICAgYCxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgTWVtYmVyRGV0YWlsTW9kYWxDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgb3JnU2VydmljZSA9IGluamVjdChPcmdTZXJ2aWNlKTtcbiAgcHJpdmF0ZSB0b2FzdCA9IGluamVjdChUb2FzdFNlcnZpY2UpO1xuICBwcml2YXRlIGVycm9ycyA9IGluamVjdChWYWx0ZWNoRXJyb3JTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBpMThuID0gaW5qZWN0KEkxOG5TZXJ2aWNlKTtcbiAgcHJpdmF0ZSBjb25maXJtRGlhbG9nID0gaW5qZWN0KENvbmZpcm1hdGlvbkRpYWxvZ1NlcnZpY2UpO1xuICBwcml2YXRlIGNhdGFsb2cgPSBpbmplY3QoUGVybWlzc2lvbkNhdGFsb2dTZXJ2aWNlKTtcblxuICAvKiogTGFiZWxlciBkZSBwZXJtaXNvcyBjb24gbGEgU1NPVCBkZWwgYmFja2VuZCAoY2F0w6Fsb2dvKS4gU2UgbGxlbmEgYWwgY2FyZ2FyLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IHBlcm1MYWJlbGVyID0gc2lnbmFsPFBlcm1pc3Npb25MYWJlbGVyIHwgbnVsbD4obnVsbCk7XG5cbiAgLyoqIENhdMOhbG9nbyBkZWwgYmFja2VuZCAoZGVmaW5lIGVsIGFsY2FuY2UgZGUgY2FkYSByZWN1cnNvIHBhcmEgYWdydXBhcikuICovXG4gIHByaXZhdGUgcmVhZG9ubHkgY2F0YWxvZ1Jlc3AgPSBzaWduYWw8UGVybWlzc2lvbkNhdGFsb2dSZXNwb25zZSB8IG51bGw+KG51bGwpO1xuXG4gIC8qKlxuICAgKiBgdHJ1ZWAgbWllbnRyYXMgZWwgY2F0w6Fsb2dvIGHDum4gbm8gbGxlZ8OzICh5IGhheSBgb3JnSWRgIHBhcmEgcGVkaXJsbywgc2luXG4gICAqIGVycm9yKS4gTWllbnRyYXMgdGFudG8sIGxhIHNlY2Npw7NuIGRlIHBlcm1pc29zIG11ZXN0cmEgc2tlbGV0b24g4oCUIGV2aXRhIGVsXG4gICAqIHBhcnBhZGVvIGluZ2zDqXPihpJlc3Bhw7FvbCBkZWwgZmFsbGJhY2sgaHVtYW5pemFkbyBhbnRlcyBkZSB0ZW5lciBsb3MgbGFiZWxzIGVzLlxuICAgKiBTaW4gYG9yZ0lkYCBlbCBjYXTDoWxvZ28gbnVuY2Egc2UgcGlkZSDihpIgYGZhbHNlYCBkZXNkZSBlbCBhcnJhbnF1ZSAoc2UgcmVuZGVyaXphXG4gICAqIGNvbiBlbCBmYWxsYmFjaywgc2luIHNrZWxldG9uIGluZmluaXRvKS5cbiAgICovXG4gIHJlYWRvbmx5IHBlcm1zTG9hZGluZyA9IHNpZ25hbChmYWxzZSk7XG5cbiAgLyoqIElueWVjdGFkbyBwb3IgYE1vZGFsU2VydmljZS5vcGVuYCDigJQgcmVmZXJlbmNpYSBwYXJhIGNlcnJhciBkZXNkZSBkZW50cm8uICovXG4gIEBJbnB1dCgpIF9tb2RhbFJlZj86IHsgZGlzbWlzczogKGRhdGE/OiB1bmtub3duLCByb2xlPzogc3RyaW5nKSA9PiB2b2lkIH07XG5cbiAgLyoqIE1pZW1icm8gYSBtb3N0cmFyIChwYXNhZG8gcG9yIGBjb21wb25lbnRQcm9wc2ApLiAqL1xuICBASW5wdXQoKSBtZW1iZXIhOiBNZW1iZXJEZXRhaWw7XG5cbiAgLyoqIE9yZ2FuaXphY2nDs24gYSBsYSBxdWUgcGVydGVuZWNlIGVsIG1pZW1icm8uICovXG4gIEBJbnB1dCgpIG9yZ0lkID0gJyc7XG5cbiAgLyoqIFNpIHRydWUsIGhhYmlsaXRhIGNhbWJpbyBkZSByb2wgeSBlbGltaW5hY2nDs24uICovXG4gIEBJbnB1dCgpIGNhbk1hbmFnZSA9IGZhbHNlO1xuXG4gIC8qKiBTaSB0cnVlLCBlbCBtaWVtYnJvIG1vc3RyYWRvIGVzIGVsIHByb3BpbyB1c3VhcmlvLiAqL1xuICBASW5wdXQoKSBpc1NlbGYgPSBmYWxzZTtcblxuICAvKiogUm9sZXMgZGlzcG9uaWJsZXMgKGNvbiBwZXJtaXNvcyBvcGNpb25hbGVzKSBwYXJhIGVsIHNlbGVjdG9yIGRlIHJvbC4gKi9cbiAgQElucHV0KCkgYXZhaWxhYmxlUm9sZXM6IE9yZ1JvbGVXaXRoUGVybWlzc2lvbnNbXSA9IFtcbiAgICB7IGlkOiAndmlld2VyJywgbmFtZTogJ3ZpZXdlcicgfSxcbiAgICB7IGlkOiAnZWRpdG9yJywgbmFtZTogJ2VkaXRvcicgfSxcbiAgICB7IGlkOiAnYWRtaW4nLCBuYW1lOiAnYWRtaW4nIH0sXG4gIF07XG5cbiAgLyoqIENhbGxiYWNrIHRyYXMgY2FtYmlhciByb2wgbyBxdWl0YXIgYWwgbWllbWJybyAocGFzYWRvIHBvciBgY29tcG9uZW50UHJvcHNgKS4gKi9cbiAgQElucHV0KCkgb25DaGFuZ2VkPzogKCkgPT4gdm9pZDtcblxuICAvKiogTmFtZXNwYWNlIGkxOG4gY29uIHF1ZSBsYSB2aXN0YSByZXN1ZWx2ZSBzdXMgdGV4dG9zLiAqL1xuICBASW5wdXQoKSBpMThuTmFtZXNwYWNlID0gREVGQVVMVF9OQU1FU1BBQ0U7XG5cbiAgcmVhZG9ubHkgd29ya2luZyA9IHNpZ25hbChmYWxzZSk7XG4gIHJlYWRvbmx5IGN1cnJlbnRSb2xlID0gc2lnbmFsPHN0cmluZz4oJycpO1xuXG4gIHJlYWRvbmx5IHJvbGVDb250cm9sID0gbmV3IEZvcm1Db250cm9sPHN0cmluZz4oJycpO1xuICBwcml2YXRlIHJvbGVTdWI/OiBTdWJzY3JpcHRpb247XG5cbiAgcmVhZG9ubHkgZGlzcGxheU5hbWUgPSBjb21wdXRlZCgoKSA9PiB0aGlzLm1lbWJlcj8ubmFtZSB8fCB0aGlzLm1lbWJlcj8uaGFuZGxlIHx8IHRoaXMubWVtYmVyPy5lbWFpbCB8fCAn4oCUJyk7XG5cbiAgcmVhZG9ubHkgc3VidGl0bGUgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgaWYgKHRoaXMuaXNTZWxmKSByZXR1cm4gdGhpcy50KCdzdWJ0aXRsZVNlbGYnKTtcbiAgICBpZiAodGhpcy5tZW1iZXI/LmhhbmRsZSkgcmV0dXJuICdAJyArIHRoaXMubWVtYmVyLmhhbmRsZTtcbiAgICByZXR1cm4gdGhpcy5tZW1iZXI/LmVtYWlsID8/ICcnO1xuICB9KTtcblxuICByZWFkb25seSBjdXJyZW50Um9sZUxhYmVsID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5yb2xlTGFiZWwodGhpcy5jdXJyZW50Um9sZSgpKSk7XG5cbiAgcmVhZG9ubHkgcGVybWlzc2lvbnNGb3JDdXJyZW50Um9sZSA9IGNvbXB1dGVkPHN0cmluZ1tdPigoKSA9PiB7XG4gICAgY29uc3Qgcm9sZUlkID0gdGhpcy5jdXJyZW50Um9sZSgpO1xuICAgIGNvbnN0IHJvbGUgPSB0aGlzLmF2YWlsYWJsZVJvbGVzLmZpbmQociA9PiByLmlkID09PSByb2xlSWQgfHwgci5uYW1lID09PSByb2xlSWQpO1xuICAgIHJldHVybiByb2xlPy5wZXJtaXNzaW9ucyA/PyBbXTtcbiAgfSk7XG5cbiAgLyoqXG4gICAqIFBlcm1pc29zIGRlbCByb2wgYWN0dWFsIGFncnVwYWRvcyBwb3IgYWxjYW5jZSAoYXBwIGFjdHVhbCAvIG9yZ2FuaXphY2nDs24gL1xuICAgKiBvdHJhcyBhcHBzKSBjb24gc3VzIGxhYmVscyB5YSByZXN1ZWx0b3Mg4oCUIG1pc21vIHBhdHLDs24gcXVlIGB2YWwtcGVybWlzc2lvbnMtdmlld2AuXG4gICAqIFNpIGVsIGNhdMOhbG9nbyBubyBjYXJnw7MgKHNpbiBgb3JnSWRgIG8gZmFsbMOzKSwgYWdydXBhIGNvbiB1biBjYXTDoWxvZ28gdmFjw61vOlxuICAgKiBzaW4gc2NvcGUgbm8gc2UgcHVlZGVuIGNsYXNpZmljYXIgbG9zIHJlY3Vyc29zIOKGkiBjYWUgYSB1biDDum5pY28gZ3J1cG8gYG9yZ2BcbiAgICogY29uIGVsIGxhYmVsZXIgaHVtYW5pemFkbywgbWFudGVuaWVuZG8gbG9zIGNoaXBzIHZpc2libGVzLlxuICAgKi9cbiAgcmVhZG9ubHkgcGVybWlzc2lvbkdyb3VwcyA9IGNvbXB1dGVkPFBlcm1pc3Npb25TY29wZUdyb3VwW10+KCgpID0+IHtcbiAgICB0aGlzLmkxOG4ubGFuZygpO1xuICAgIGNvbnN0IHBlcm1zID0gdGhpcy5wZXJtaXNzaW9uc0ZvckN1cnJlbnRSb2xlKCk7XG4gICAgaWYgKHBlcm1zLmxlbmd0aCA9PT0gMCkgcmV0dXJuIFtdO1xuICAgIGNvbnN0IGNhdGFsb2cgPSB0aGlzLmNhdGFsb2dSZXNwKCk7XG4gICAgY29uc3QgbGFiZWxzID0ge1xuICAgICAgYXBwOiB0aGlzLnQoJ2dyb3VwQXBwJyksXG4gICAgICBvcmc6IHRoaXMudCgnZ3JvdXBPcmcnKSxcbiAgICAgIG90aGVyOiB0aGlzLnQoJ2dyb3VwT3RoZXInKSxcbiAgICAgIGFwcExhYmVsOiAoYXBwSWQ6IHN0cmluZykgPT4gdGhpcy5hcHBMYWJlbChhcHBJZCksXG4gICAgfTtcbiAgICBpZiAoY2F0YWxvZykge1xuICAgICAgcmV0dXJuIGdyb3VwUGVybWlzc2lvbnNCeVNjb3BlKHBlcm1zLCBjYXRhbG9nLCBjYXRhbG9nLmFwcElkLCB0aGlzLnBlcm1pc3Npb25MYWJlbC5iaW5kKHRoaXMpLCBsYWJlbHMpO1xuICAgIH1cbiAgICAvLyBTaW4gY2F0w6Fsb2dvOiBubyBoYXkgc2NvcGUg4oaSIHVuIHNvbG8gZ3J1cG8gXCJvcmdhbml6YWNpw7NuXCIgY29uIGVsIGZhbGxiYWNrLlxuICAgIHJldHVybiBbeyBrZXk6ICdvcmcnLCBsYWJlbDogbGFiZWxzLm9yZywgc2NvcGU6ICdvcmcnLCBwZXJtczogcGVybXMubWFwKHAgPT4gdGhpcy5wZXJtaXNzaW9uTGFiZWwocCkpIH1dO1xuICB9KTtcblxuICByZWFkb25seSByb2xlU2VsZWN0UHJvcHMgPSBjb21wdXRlZDxQYXJ0aWFsPElucHV0TWV0YWRhdGE+PigoKSA9PiAoe1xuICAgIGNvbnRyb2w6IHRoaXMucm9sZUNvbnRyb2wgYXMgRm9ybUNvbnRyb2wsXG4gICAgbGFiZWw6ICcnLFxuICAgIHBsYWNlaG9sZGVyOiB0aGlzLnQoJ3JvbGVMYWJlbCcpLFxuICAgIHR5cGU6IElucHV0VHlwZS5TRUxFQ1QsXG4gICAgc3RhdGU6IHRoaXMud29ya2luZygpID8gQ29tcG9uZW50U3RhdGVzLkRJU0FCTEVEIDogQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQsXG4gICAgb3B0aW9uczogdGhpcy5hdmFpbGFibGVSb2xlcy5tYXAociA9PiAoe1xuICAgICAgaWQ6IHIuaWQsXG4gICAgICBuYW1lOiB0aGlzLnJvbGVMYWJlbChyLm5hbWUpLFxuICAgICAgb3JkZXI6IDAsXG4gICAgfSkpLFxuICB9KSk7XG5cbiAgcmVhZG9ubHkgcmVtb3ZlQnV0dG9uUHJvcHMgPSBjb21wdXRlZDxQYXJ0aWFsPEJ1dHRvbk1ldGFkYXRhPj4oKCkgPT4gKHtcbiAgICB0ZXh0OiB0aGlzLnQoJ3JlbW92ZUN0YScpLFxuICAgIHRva2VuOiAnbWVtYmVyLXJlbW92ZScsXG4gICAgY29sb3I6ICdkYW5nZXInLFxuICAgIGZpbGw6ICdvdXRsaW5lJyxcbiAgICBleHBhbmQ6ICdibG9jaycsXG4gICAgc2l6ZTogJ2RlZmF1bHQnLFxuICAgIHNoYXBlOiAncm91bmQnLFxuICAgIHR5cGU6ICdidXR0b24nLFxuICAgIHN0YXRlOiB0aGlzLndvcmtpbmcoKSA/IENvbXBvbmVudFN0YXRlcy5XT1JLSU5HIDogQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQsXG4gIH0pKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmkxOG4ucmVnaXN0ZXJEZWZhdWx0cyhERUZBVUxUX05BTUVTUEFDRSwgTUVNQkVSX0RFVEFJTF9NT0RBTF9JMThOKTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuaTE4bi5yZWdpc3RlckRlZmF1bHRzKHRoaXMuaTE4bk5hbWVzcGFjZSwgTUVNQkVSX0RFVEFJTF9NT0RBTF9JMThOKTtcbiAgICBjb25zdCByb2xlTmFtZSA9IHRoaXMubWVtYmVyPy5yb2xlcz8uWzBdID8/ICcnO1xuICAgIC8vIFJlc29sdmUgdGhlIHJvbGUgbmFtZSB0byBpdHMgVVVJRCAtLSB0aGUgc2VsZWN0IHVzZXMgci5pZCAoVVVJRCkgYXMgdmFsdWVcbiAgICBjb25zdCBtYXRjaGVkID0gdGhpcy5hdmFpbGFibGVSb2xlcy5maW5kKHIgPT4gci5uYW1lID09PSByb2xlTmFtZSk7XG4gICAgY29uc3Qgcm9sZUlkID0gbWF0Y2hlZD8uaWQgPz8gcm9sZU5hbWU7XG4gICAgdGhpcy5jdXJyZW50Um9sZS5zZXQocm9sZUlkKTtcbiAgICB0aGlzLnJvbGVDb250cm9sLnNldFZhbHVlKHJvbGVJZCwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgIHRoaXMucm9sZVN1YiA9IHRoaXMucm9sZUNvbnRyb2wudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSh2ID0+IHtcbiAgICAgIGlmICh2ICYmIHYgIT09IHRoaXMuY3VycmVudFJvbGUoKSkgdm9pZCB0aGlzLm9uQ2hhbmdlUm9sZSh2KTtcbiAgICB9KTtcbiAgICAvLyBDYXTDoWxvZ28gZGVsIGJhY2tlbmQgPSBTU09UIGRlIGxvcyBsYWJlbHMgZGUgcGVybWlzb3MgKyBkZWwgYWxjYW5jZSBwYXJhXG4gICAgLy8gYWdydXBhciAoQURSLTAyNCkuIE1pZW50cmFzIGNhcmdhIG1vc3RyYW1vcyBza2VsZXRvbiAobWF0YSBlbCBwYXJwYWRlb1xuICAgIC8vIGluZ2zDqXPihpJlc3Bhw7FvbCBkZWwgZmFsbGJhY2spLiBTaSBmYWxsYSwgYHBlcm1pc3Npb25MYWJlbGAgY2FlIGFsIGZhbGxiYWNrXG4gICAgLy8gaHVtYW5pemFkbyAobm8gcm9tcGUgZWwgbW9kYWwpLiBTaW4gYG9yZ0lkYCBlbCBjYXTDoWxvZ28gbnVuY2Egc2UgcGlkZSDihpJcbiAgICAvLyBwZXJtc0xvYWRpbmcgcXVlZGEgZmFsc2UgKHNlIHJlbmRlcml6YSBjb24gZWwgZmFsbGJhY2ssIHNpbiBza2VsZXRvbiBpbmZpbml0bykuXG4gICAgaWYgKHRoaXMub3JnSWQpIHtcbiAgICAgIHRoaXMucGVybXNMb2FkaW5nLnNldCh0cnVlKTtcbiAgICAgIHRoaXMuY2F0YWxvZy5nZXRDYXRhbG9nKHRoaXMub3JnSWQpLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6IGNhdGFsb2cgPT4ge1xuICAgICAgICAgIHRoaXMuY2F0YWxvZ1Jlc3Auc2V0KGNhdGFsb2cpO1xuICAgICAgICAgIHRoaXMucGVybUxhYmVsZXIuc2V0KGNyZWF0ZVBlcm1pc3Npb25MYWJlbGVyKGNhdGFsb2csIHRoaXMuaTE4bi5sYW5nKCksIHsgYWxsTGFiZWw6IHRoaXMudCgncGVybUFsbCcpIH0pKTtcbiAgICAgICAgICB0aGlzLnBlcm1zTG9hZGluZy5zZXQoZmFsc2UpO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKCkgPT4ge1xuICAgICAgICAgIHRoaXMucGVybXNMb2FkaW5nLnNldChmYWxzZSk7XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKiogUmVzdWVsdmUgZWwgbm9tYnJlIGxlZ2libGUgZGUgdW5hIGFwcCBwb3Igc3UgYXBwSWQgKGtleSBgYXBwX3tpZH1gKS4gKi9cbiAgYXBwTGFiZWwoYXBwSWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3Qga2V5ID0gYGFwcF8ke2FwcElkfWA7XG4gICAgY29uc3QgbGFiZWwgPSB0aGlzLnQoa2V5KTtcbiAgICByZXR1cm4gbGFiZWwgPT09IGtleSA/IGFwcElkIDogbGFiZWw7XG4gIH1cblxuICBwZXJtaXNzaW9uTGFiZWwocGVybTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAvLyBTU09UID0gY2F0w6Fsb2dvIGRlbCBiYWNrZW5kLiBIYXN0YSBxdWUgY2FyZ3VlIChvIHNpIGZhbGzDsyksIGZhbGxiYWNrIGEgdW5cbiAgICAvLyBsYWJlbGVyIHZhY8OtbyBxdWUgaHVtYW5pemEgZWwgY8OzZGlnbyBjcnVkbyAoZXZpdGEgc2FsaWRhcyB2YWPDrWFzIGNvbW9cbiAgICAvLyBcIjogR2VzdGlvbmFyXCIpLiBFbCBgKjoqYCB5IHdpbGRjYXJkcyB1c2FuIGVsIGxhYmVsIGkxOG4gYHBlcm1BbGxgLlxuICAgIGNvbnN0IGxhYmVsZXIgPVxuICAgICAgdGhpcy5wZXJtTGFiZWxlcigpID8/XG4gICAgICBjcmVhdGVQZXJtaXNzaW9uTGFiZWxlcih7IHBlcm1pc3Npb25zOiBbXSwgYWN0aW9uTGFiZWxzOiB7fSB9LCB0aGlzLmkxOG4ubGFuZygpLCB7XG4gICAgICAgIGFsbExhYmVsOiB0aGlzLnQoJ3Blcm1BbGwnKSxcbiAgICAgIH0pO1xuICAgIHJldHVybiBsYWJlbGVyKHBlcm0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBvbkNoYW5nZVJvbGUobmV3Um9sZUlkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy53b3JraW5nKCkpIHJldHVybjtcbiAgICB0aGlzLndvcmtpbmcuc2V0KHRydWUpO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLm9yZ1NlcnZpY2UuY2hhbmdlTWVtYmVyUm9sZSh0aGlzLm9yZ0lkLCB0aGlzLm1lbWJlci51c2VySWQsIG5ld1JvbGVJZCkpO1xuICAgICAgdGhpcy5jdXJyZW50Um9sZS5zZXQobmV3Um9sZUlkKTtcbiAgICAgIHRoaXMubWVtYmVyID0geyAuLi50aGlzLm1lbWJlciwgcm9sZXM6IFtuZXdSb2xlSWRdIH07XG4gICAgICB0aGlzLnRvYXN0LnNob3coe1xuICAgICAgICBtZXNzYWdlOiB0aGlzLnQoJ2NoYW5nZVJvbGVTdWNjZXNzJyksXG4gICAgICAgIGNvbG9yOiAnZGFyaycsXG4gICAgICAgIGR1cmF0aW9uOiAzMDAwLFxuICAgICAgfSk7XG4gICAgICB0aGlzLm9uQ2hhbmdlZD8uKCk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aGlzLnJvbGVDb250cm9sLnNldFZhbHVlKHRoaXMuY3VycmVudFJvbGUoKSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgdGhpcy5lcnJvcnMuaGFuZGxlKGVyciwge1xuICAgICAgICBjb250ZXh0OiAnbWVtYmVyRGV0YWlsLmNoYW5nZVJvbGUnLFxuICAgICAgICBmYWxsYmFja0tleTogJ2NoYW5nZVJvbGVFcnJvcicsXG4gICAgICAgIGkxOG5OYW1lc3BhY2U6IHRoaXMuaTE4bk5hbWVzcGFjZSxcbiAgICAgIH0pO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLndvcmtpbmcuc2V0KGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBvblJlbW92ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy53b3JraW5nKCkpIHJldHVybjtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmNvbmZpcm1EaWFsb2cuY29uZmlybURlc3RydWN0aXZlKHtcbiAgICAgIHRpdGxlOiB0aGlzLnQoJ3JlbW92ZUNvbmZpcm1UaXRsZScpLFxuICAgICAgbWVzc2FnZTogdGhpcy50KCdyZW1vdmVDb25maXJtTWVzc2FnZScpLFxuICAgICAgY29uZmlybUJ1dHRvbjogeyB0ZXh0OiB0aGlzLnQoJ3JlbW92ZUNvbmZpcm1PaycpIH0sXG4gICAgICBjYW5jZWxCdXR0b246IHsgdGV4dDogdGhpcy50KCdjYW5jZWxDdGEnKSB9LFxuICAgIH0pO1xuICAgIGlmICghcmVzdWx0LmNvbmZpcm1lZCkgcmV0dXJuO1xuICAgIHRoaXMud29ya2luZy5zZXQodHJ1ZSk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMub3JnU2VydmljZS5yZW1vdmVNZW1iZXIodGhpcy5vcmdJZCwgdGhpcy5tZW1iZXIudXNlcklkKSk7XG4gICAgICB0aGlzLnRvYXN0LnNob3coe1xuICAgICAgICBtZXNzYWdlOiB0aGlzLnQoJ3JlbW92ZVN1Y2Nlc3MnKSxcbiAgICAgICAgY29sb3I6ICdkYXJrJyxcbiAgICAgICAgZHVyYXRpb246IDMwMDAsXG4gICAgICB9KTtcbiAgICAgIHRoaXMub25DaGFuZ2VkPy4oKTtcbiAgICAgIHRoaXMuZGlzbWlzcygpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhpcy5lcnJvcnMuaGFuZGxlKGVyciwge1xuICAgICAgICBjb250ZXh0OiAnbWVtYmVyRGV0YWlsLnJlbW92ZScsXG4gICAgICAgIGZhbGxiYWNrS2V5OiAncmVtb3ZlRXJyb3InLFxuICAgICAgICBpMThuTmFtZXNwYWNlOiB0aGlzLmkxOG5OYW1lc3BhY2UsXG4gICAgICB9KTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy53b3JraW5nLnNldChmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgcm9sZUxhYmVsKHJvbGVJZE9yTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gcmVzb2x2ZVJvbGVMYWJlbEZyb21MaXN0KHJvbGVJZE9yTmFtZSwgdGhpcy5hdmFpbGFibGVSb2xlcywgdGhpcy5pMThuLmxhbmcoKSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnJvbGVTdWI/LnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBkaXNtaXNzKCk6IHZvaWQge1xuICAgIHRoaXMuX21vZGFsUmVmPy5kaXNtaXNzKG51bGwsICdjYW5jZWwnKTtcbiAgfVxuXG4gIHQoa2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmkxOG4udChrZXksIHRoaXMuaTE4bk5hbWVzcGFjZSk7XG4gIH1cbn1cbiJdfQ==