valtech-components 2.0.326 → 2.0.328

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.
Files changed (28) hide show
  1. package/esm2022/lib/components/atoms/button/button.component.mjs +18 -18
  2. package/esm2022/lib/components/atoms/display/display.component.mjs +13 -16
  3. package/esm2022/lib/components/atoms/text/text.component.mjs +19 -19
  4. package/esm2022/lib/components/atoms/title/title.component.mjs +7 -7
  5. package/esm2022/lib/components/atoms/title/types.mjs +6 -2
  6. package/esm2022/lib/components/molecules/alert-box/alert-box.component.mjs +6 -6
  7. package/esm2022/lib/components/molecules/language-selector/language-selector.component.mjs +6 -17
  8. package/esm2022/lib/components/organisms/form/form.component.mjs +1 -1
  9. package/esm2022/lib/services/lang-provider/lang-provider.service.mjs +66 -1
  10. package/esm2022/lib/shared/utils/simple-content.mjs +119 -0
  11. package/esm2022/public-api.mjs +3 -3
  12. package/fesm2022/valtech-components.mjs +413 -680
  13. package/fesm2022/valtech-components.mjs.map +1 -1
  14. package/lib/components/atoms/button/button.component.d.ts +3 -3
  15. package/lib/components/atoms/display/display.component.d.ts +2 -3
  16. package/lib/components/atoms/text/text.component.d.ts +3 -3
  17. package/lib/components/atoms/title/title.component.d.ts +1 -2
  18. package/lib/components/atoms/title/types.d.ts +10 -4
  19. package/lib/components/molecules/alert-box/alert-box.component.d.ts +3 -3
  20. package/lib/components/molecules/language-selector/language-selector.component.d.ts +1 -3
  21. package/lib/services/lang-provider/lang-provider.service.d.ts +50 -0
  22. package/lib/shared/utils/simple-content.d.ts +120 -0
  23. package/package.json +1 -1
  24. package/public-api.d.ts +1 -2
  25. package/esm2022/lib/services/content.service.mjs +0 -327
  26. package/esm2022/lib/shared/utils/reactive-content.mjs +0 -117
  27. package/lib/services/content.service.d.ts +0 -296
  28. package/lib/shared/utils/reactive-content.d.ts +0 -109
@@ -5,7 +5,7 @@ import { BoxComponent } from '../../atoms/box/box.component';
5
5
  import { IconComponent } from '../../atoms/icon/icon.component';
6
6
  import { TextComponent } from '../../atoms/text/text.component';
7
7
  import * as i0 from "@angular/core";
8
- import * as i1 from "../../../services/content.service";
8
+ import * as i1 from "../../../services/lang-provider/lang-provider.service";
9
9
  /**
10
10
  * val-alert-box
11
11
  *
@@ -30,8 +30,8 @@ export class AlertBoxComponent {
30
30
  getLegacyTextProps() {
31
31
  return this.props.text;
32
32
  }
33
- constructor(contentService) {
34
- this.contentService = contentService;
33
+ constructor(langService) {
34
+ this.langService = langService;
35
35
  this.subscriptions = new Subscription();
36
36
  }
37
37
  ngOnInit() {
@@ -60,7 +60,7 @@ export class AlertBoxComponent {
60
60
  this.computedTextProps.contentConfig = reactiveProps.textConfig;
61
61
  }
62
62
  }
63
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AlertBoxComponent, deps: [{ token: i1.ContentService }], target: i0.ɵɵFactoryTarget.Component }); }
63
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AlertBoxComponent, deps: [{ token: i1.LangService }], target: i0.ɵɵFactoryTarget.Component }); }
64
64
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: AlertBoxComponent, isStandalone: true, selector: "val-alert-box", inputs: { props: "props" }, ngImport: i0, template: `
65
65
  <val-box [props]="props.box">
66
66
  <div class="content-container" body>
@@ -90,7 +90,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
90
90
  </div>
91
91
  </val-box>
92
92
  `, styles: [":root{--ion-color-primary: #7026df;--ion-color-primary-rgb: 112, 38, 223;--ion-color-primary-contrast: #ffffff;--ion-color-primary-contrast-rgb: 255, 255, 255;--ion-color-primary-shade: #6321c4;--ion-color-primary-tint: #7e3ce2;--ion-color-secondary: #e2ccff;--ion-color-secondary-rgb: 226, 204, 255;--ion-color-secondary-contrast: #000000;--ion-color-secondary-contrast-rgb: 0, 0, 0;--ion-color-secondary-shade: #c7b4e0;--ion-color-secondary-tint: #e5d1ff;--ion-color-texti: #354c69;--ion-color-texti-rgb: 53, 76, 105;--ion-color-texti-contrast: #ffffff;--ion-color-texti-contrast-rgb: 255, 255, 255;--ion-color-texti-shade: #2f435c;--ion-color-texti-tint: #495e78;--ion-color-darki: #090f1b;--ion-color-darki-rgb: 9, 15, 27;--ion-color-darki-contrast: #ffffff;--ion-color-darki-contrast-rgb: 255, 255, 255;--ion-color-darki-shade: #080d18;--ion-color-darki-tint: #222732;--ion-color-medium: #9e9e9e;--ion-color-medium-rgb: 158, 158, 158;--ion-color-medium-contrast: #000000;--ion-color-medium-contrast-rgb: 0, 0, 0;--ion-color-medium-shade: #8b8b8b;--ion-color-medium-tint: #a8a8a8;--swiper-pagination-color: var(--ion-color-primary);--swiper-navigation-color: var(--ion-color-primary);--swiper-pagination-bullet-inactive-color: var(--ion-color-medium)}@media (prefers-color-scheme: dark){:root{--ion-color-texti: #8fc1ff;--ion-color-texti-rgb: 143, 193, 255;--ion-color-texti-contrast: #000000;--ion-color-texti-contrast-rgb: 0, 0, 0;--ion-color-texti-shade: #7eaae0;--ion-color-texti-tint: #9ac7ff;--ion-color-darki: #ffffff;--ion-color-darki-rgb: 255, 255, 255;--ion-color-darki-contrast: #000000;--ion-color-darki-contrast-rgb: 0, 0, 0;--ion-color-darki-shade: #e0e0e0;--ion-color-darki-tint: #ffffff;--ion-color-primary: #8f49f8;--ion-color-primary-rgb: 143, 73, 248;--ion-color-primary-contrast: #ffffff;--ion-color-primary-contrast-rgb: 255, 255, 255;--ion-color-primary-shade: #7e40da;--ion-color-primary-tint: #9a5bf9}}.ion-color-texti{--ion-color-base: var(--ion-color-texti);--ion-color-base-rgb: var(--ion-color-texti-rgb);--ion-color-contrast: var(--ion-color-texti-contrast);--ion-color-contrast-rgb: var(--ion-color-texti-contrast-rgb);--ion-color-shade: var(--ion-color-texti-shade);--ion-color-tint: var(--ion-color-texti-tint)}.ion-color-darki{--ion-color-base: var(--ion-color-darki);--ion-color-base-rgb: var(--ion-color-darki-rgb);--ion-color-contrast: var(--ion-color-darki-contrast);--ion-color-contrast-rgb: var(--ion-color-darki-contrast-rgb);--ion-color-shade: var(--ion-color-darki-shade);--ion-color-tint: var(--ion-color-darki-tint)}.text{margin-left:.25rem}.content-container{display:flex;align-items:flex-start}\n"] }]
93
- }], ctorParameters: () => [{ type: i1.ContentService }], propDecorators: { props: [{
93
+ }], ctorParameters: () => [{ type: i1.LangService }], propDecorators: { props: [{
94
94
  type: Input
95
95
  }] } });
96
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxlcnQtYm94LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZhbHRlY2gtY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvbW9sZWN1bGVzL2FsZXJ0LWJveC9hbGVydC1ib3guY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFDcEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVwQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQzs7O0FBc0JoRTs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNILE1BQU0sT0FBTyxpQkFBaUI7SUFhNUIscURBQXFEO0lBQ3JELElBQUksYUFBYTtRQUNmLE9BQU8sTUFBTSxJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksT0FBUSxJQUFJLENBQUMsS0FBYSxDQUFDLElBQUksS0FBSyxRQUFRLENBQUM7SUFDOUUsQ0FBQztJQUVELHdDQUF3QztJQUN4QyxrQkFBa0I7UUFDaEIsT0FBUSxJQUFJLENBQUMsS0FBMEIsQ0FBQyxJQUFJLENBQUM7SUFDL0MsQ0FBQztJQUVELFlBQW9CLGNBQThCO1FBQTlCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQXRCMUMsa0JBQWEsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO0lBc0JVLENBQUM7SUFFdEQsUUFBUTtRQUNOLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDeEIsSUFBSSxDQUFDLDJCQUEyQixFQUFFLENBQUM7UUFDckMsQ0FBQztJQUNILENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNuQyxDQUFDO0lBRU8sMkJBQTJCO1FBQ2pDLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxLQUFpQyxDQUFDO1FBRTdELG9DQUFvQztRQUNwQyxJQUFJLENBQUMsaUJBQWlCLEdBQUc7WUFDdkIsSUFBSSxFQUFFLGFBQWEsQ0FBQyxTQUFTLEVBQUUsSUFBSSxJQUFJLFFBQVE7WUFDL0MsS0FBSyxFQUFFLGFBQWEsQ0FBQyxTQUFTLEVBQUUsS0FBSztZQUNyQyxJQUFJLEVBQUUsYUFBYSxDQUFDLFNBQVMsRUFBRSxJQUFJLElBQUksS0FBSztTQUM3QyxDQUFDO1FBRUYsNEJBQTRCO1FBQzVCLElBQUksYUFBYSxDQUFDLElBQUksS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUNyQyxjQUFjO1lBQ2QsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDO1FBQ3RELENBQUM7YUFBTSxJQUFJLGFBQWEsQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNwQyxtQkFBbUI7WUFDbkIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUMsVUFBVSxDQUFDO1FBQ2xFLENBQUM7SUFDSCxDQUFDOytHQXJEVSxpQkFBaUI7bUdBQWpCLGlCQUFpQixxR0E5QmxCOzs7Ozs7Ozs7Ozs7R0FZVCwrcEZBYlMsWUFBWSwrQkFBRSxZQUFZLDZGQUFFLGFBQWEsd0VBQUUsYUFBYTs7NEZBK0J2RCxpQkFBaUI7a0JBbEM3QixTQUFTOytCQUNFLGVBQWUsY0FDYixJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxhQUFhLENBQUMsWUFDekQ7Ozs7Ozs7Ozs7OztHQVlUO21GQTBCRCxLQUFLO3NCQURKLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQ29udGVudFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9jb250ZW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgQm94Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYXRvbXMvYm94L2JveC5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWNvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2F0b21zL2ljb24vaWNvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgVGV4dENvbXBvbmVudCB9IGZyb20gJy4uLy4uL2F0b21zL3RleHQvdGV4dC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQWxlcnRCb3hNZXRhZGF0YSwgUmVhY3RpdmVBbGVydEJveE1ldGFkYXRhIH0gZnJvbSAnLi90eXBlcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbC1hbGVydC1ib3gnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBCb3hDb21wb25lbnQsIEljb25Db21wb25lbnQsIFRleHRDb21wb25lbnRdLFxuICB0ZW1wbGF0ZTogYFxuICAgIDx2YWwtYm94IFtwcm9wc109XCJwcm9wcy5ib3hcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb250ZW50LWNvbnRhaW5lclwiIGJvZHk+XG4gICAgICAgIDx2YWwtaWNvbiBbcHJvcHNdPVwicHJvcHMuaWNvblwiPjwvdmFsLWljb24+XG4gICAgICAgIDwhLS0gU3VwcG9ydCBib3RoIGxlZ2FjeSBhbmQgcmVhY3RpdmUgcGF0dGVybnMgLS0+XG4gICAgICAgIEBpZiAoaXNMZWdhY3lQcm9wcykge1xuICAgICAgICAgIDx2YWwtdGV4dCBjbGFzcz1cInRleHRcIiBbcHJvcHNdPVwiZ2V0TGVnYWN5VGV4dFByb3BzKClcIiAvPlxuICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICA8dmFsLXRleHQgY2xhc3M9XCJ0ZXh0XCIgW3Byb3BzXT1cImNvbXB1dGVkVGV4dFByb3BzXCIgLz5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgPC92YWwtYm94PlxuICBgLFxuICBzdHlsZVVybHM6IFsnLi9hbGVydC1ib3guY29tcG9uZW50LnNjc3MnXSxcbn0pXG4vKipcbiAqIHZhbC1hbGVydC1ib3hcbiAqXG4gKiBEaXNwbGF5cyBhbiBhbGVydCBib3ggd2l0aCBhbiBpY29uIGFuZCB0ZXh0LCB1c2luZyBhIHN0eWxlZCBib3ggY29udGFpbmVyLlxuICogU3VwcG9ydHMgYm90aCBzdGF0aWMgYW5kIHJlYWN0aXZlIGNvbnRlbnQgcGF0dGVybnMuXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIExlZ2FjeSBwYXR0ZXJuIHdpdGggVGV4dE1ldGFkYXRhXG4gKiA8dmFsLWFsZXJ0LWJveCBbcHJvcHNdPVwieyBib3g6IHsuLi59LCBpY29uOiB7Li4ufSwgdGV4dDogey4uLn0gfVwiPjwvdmFsLWFsZXJ0LWJveD5cbiAqXG4gKiAvLyBSZWFjdGl2ZSBwYXR0ZXJuIHdpdGggc2ltcGxpZmllZCBjb25maWd1cmF0aW9uXG4gKiA8dmFsLWFsZXJ0LWJveCBbcHJvcHNdPVwieyBib3g6IHsuLi59LCBpY29uOiB7Li4ufSwgdGV4dENvbmZpZzogeyBrZXk6ICdhbGVydC53YXJuaW5nJyB9IH1cIj48L3ZhbC1hbGVydC1ib3g+XG4gKlxuICogQGlucHV0IHByb3BzOiBBbGVydEJveE1ldGFkYXRhIHwgUmVhY3RpdmVBbGVydEJveE1ldGFkYXRhIC0gQ29uZmlndXJhdGlvbiBmb3IgdGhlIGFsZXJ0IGJveFxuICovXG5leHBvcnQgY2xhc3MgQWxlcnRCb3hDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgc3Vic2NyaXB0aW9ucyA9IG5ldyBTdWJzY3JpcHRpb24oKTtcblxuICAvKipcbiAgICogQWxlcnQgYm94IGNvbmZpZ3VyYXRpb24gb2JqZWN0LlxuICAgKiBTdXBwb3J0cyBib3RoIGxlZ2FjeSBBbGVydEJveE1ldGFkYXRhIGFuZCBSZWFjdGl2ZUFsZXJ0Qm94TWV0YWRhdGEgcGF0dGVybnMuXG4gICAqL1xuICBASW5wdXQoKVxuICBwcm9wczogQWxlcnRCb3hNZXRhZGF0YSB8IFJlYWN0aXZlQWxlcnRCb3hNZXRhZGF0YTtcblxuICAvKiogQ29tcHV0ZWQgdGV4dCBwcm9wZXJ0aWVzIGZvciByZWFjdGl2ZSBwYXR0ZXJuICovXG4gIGNvbXB1dGVkVGV4dFByb3BzOiBhbnk7XG5cbiAgLyoqIFdoZXRoZXIgdGhpcyBpcyB1c2luZyB0aGUgbGVnYWN5IHByb3BzIHBhdHRlcm4gKi9cbiAgZ2V0IGlzTGVnYWN5UHJvcHMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICd0ZXh0JyBpbiB0aGlzLnByb3BzICYmIHR5cGVvZiAodGhpcy5wcm9wcyBhcyBhbnkpLnRleHQgPT09ICdvYmplY3QnO1xuICB9XG5cbiAgLyoqIEdldCB0ZXh0IHByb3BzIGZvciBsZWdhY3kgcGF0dGVybiAqL1xuICBnZXRMZWdhY3lUZXh0UHJvcHMoKTogYW55IHtcbiAgICByZXR1cm4gKHRoaXMucHJvcHMgYXMgQWxlcnRCb3hNZXRhZGF0YSkudGV4dDtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY29udGVudFNlcnZpY2U6IENvbnRlbnRTZXJ2aWNlKSB7fVxuXG4gIG5nT25Jbml0KCkge1xuICAgIGlmICghdGhpcy5pc0xlZ2FjeVByb3BzKSB7XG4gICAgICB0aGlzLmluaXRpYWxpemVSZWFjdGl2ZVRleHRQcm9wcygpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0aWFsaXplUmVhY3RpdmVUZXh0UHJvcHMoKSB7XG4gICAgY29uc3QgcmVhY3RpdmVQcm9wcyA9IHRoaXMucHJvcHMgYXMgUmVhY3RpdmVBbGVydEJveE1ldGFkYXRhO1xuXG4gICAgLy8gQmFzZSB0ZXh0IHByb3BlcnRpZXMgd2l0aCBzdHlsaW5nXG4gICAgdGhpcy5jb21wdXRlZFRleHRQcm9wcyA9IHtcbiAgICAgIHNpemU6IHJlYWN0aXZlUHJvcHMudGV4dFN0eWxlPy5zaXplIHx8ICdtZWRpdW0nLFxuICAgICAgY29sb3I6IHJlYWN0aXZlUHJvcHMudGV4dFN0eWxlPy5jb2xvcixcbiAgICAgIGJvbGQ6IHJlYWN0aXZlUHJvcHMudGV4dFN0eWxlPy5ib2xkIHx8IGZhbHNlLFxuICAgIH07XG5cbiAgICAvLyBBZGQgY29udGVudCBjb25maWd1cmF0aW9uXG4gICAgaWYgKHJlYWN0aXZlUHJvcHMudGV4dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBTdGF0aWMgdGV4dFxuICAgICAgdGhpcy5jb21wdXRlZFRleHRQcm9wcy5jb250ZW50ID0gcmVhY3RpdmVQcm9wcy50ZXh0O1xuICAgIH0gZWxzZSBpZiAocmVhY3RpdmVQcm9wcy50ZXh0Q29uZmlnKSB7XG4gICAgICAvLyBSZWFjdGl2ZSBjb250ZW50XG4gICAgICB0aGlzLmNvbXB1dGVkVGV4dFByb3BzLmNvbnRlbnRDb25maWcgPSByZWFjdGl2ZVByb3BzLnRleHRDb25maWc7XG4gICAgfVxuICB9XG59XG4iXX0=
96
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxlcnQtYm94LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZhbHRlY2gtY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvbW9sZWN1bGVzL2FsZXJ0LWJveC9hbGVydC1ib3guY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFDcEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVwQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQzs7O0FBc0JoRTs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNILE1BQU0sT0FBTyxpQkFBaUI7SUFhNUIscURBQXFEO0lBQ3JELElBQUksYUFBYTtRQUNmLE9BQU8sTUFBTSxJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksT0FBUSxJQUFJLENBQUMsS0FBYSxDQUFDLElBQUksS0FBSyxRQUFRLENBQUM7SUFDOUUsQ0FBQztJQUVELHdDQUF3QztJQUN4QyxrQkFBa0I7UUFDaEIsT0FBUSxJQUFJLENBQUMsS0FBMEIsQ0FBQyxJQUFJLENBQUM7SUFDL0MsQ0FBQztJQUVELFlBQW9CLFdBQXdCO1FBQXhCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBdEJwQyxrQkFBYSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7SUFzQkksQ0FBQztJQUVoRCxRQUFRO1FBQ04sSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN4QixJQUFJLENBQUMsMkJBQTJCLEVBQUUsQ0FBQztRQUNyQyxDQUFDO0lBQ0gsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ25DLENBQUM7SUFFTywyQkFBMkI7UUFDakMsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLEtBQWlDLENBQUM7UUFFN0Qsb0NBQW9DO1FBQ3BDLElBQUksQ0FBQyxpQkFBaUIsR0FBRztZQUN2QixJQUFJLEVBQUUsYUFBYSxDQUFDLFNBQVMsRUFBRSxJQUFJLElBQUksUUFBUTtZQUMvQyxLQUFLLEVBQUUsYUFBYSxDQUFDLFNBQVMsRUFBRSxLQUFLO1lBQ3JDLElBQUksRUFBRSxhQUFhLENBQUMsU0FBUyxFQUFFLElBQUksSUFBSSxLQUFLO1NBQzdDLENBQUM7UUFFRiw0QkFBNEI7UUFDNUIsSUFBSSxhQUFhLENBQUMsSUFBSSxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3JDLGNBQWM7WUFDZCxJQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBTyxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUM7UUFDdEQsQ0FBQzthQUFNLElBQUksYUFBYSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3BDLG1CQUFtQjtZQUNuQixJQUFJLENBQUMsaUJBQWlCLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQyxVQUFVLENBQUM7UUFDbEUsQ0FBQztJQUNILENBQUM7K0dBckRVLGlCQUFpQjttR0FBakIsaUJBQWlCLHFHQTlCbEI7Ozs7Ozs7Ozs7OztHQVlULCtwRkFiUyxZQUFZLCtCQUFFLFlBQVksNkZBQUUsYUFBYSx3RUFBRSxhQUFhOzs0RkErQnZELGlCQUFpQjtrQkFsQzdCLFNBQVM7K0JBQ0UsZUFBZSxjQUNiLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLGFBQWEsQ0FBQyxZQUN6RDs7Ozs7Ozs7Ozs7O0dBWVQ7Z0ZBMEJELEtBQUs7c0JBREosS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBMYW5nU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2xhbmctcHJvdmlkZXIvbGFuZy1wcm92aWRlci5zZXJ2aWNlJztcbmltcG9ydCB7IEJveENvbXBvbmVudCB9IGZyb20gJy4uLy4uL2F0b21zL2JveC9ib3guY29tcG9uZW50JztcbmltcG9ydCB7IEljb25Db21wb25lbnQgfSBmcm9tICcuLi8uLi9hdG9tcy9pY29uL2ljb24uY29tcG9uZW50JztcbmltcG9ydCB7IFRleHRDb21wb25lbnQgfSBmcm9tICcuLi8uLi9hdG9tcy90ZXh0L3RleHQuY29tcG9uZW50JztcbmltcG9ydCB7IEFsZXJ0Qm94TWV0YWRhdGEsIFJlYWN0aXZlQWxlcnRCb3hNZXRhZGF0YSB9IGZyb20gJy4vdHlwZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2YWwtYWxlcnQtYm94JyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgQm94Q29tcG9uZW50LCBJY29uQ29tcG9uZW50LCBUZXh0Q29tcG9uZW50XSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8dmFsLWJveCBbcHJvcHNdPVwicHJvcHMuYm94XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29udGVudC1jb250YWluZXJcIiBib2R5PlxuICAgICAgICA8dmFsLWljb24gW3Byb3BzXT1cInByb3BzLmljb25cIj48L3ZhbC1pY29uPlxuICAgICAgICA8IS0tIFN1cHBvcnQgYm90aCBsZWdhY3kgYW5kIHJlYWN0aXZlIHBhdHRlcm5zIC0tPlxuICAgICAgICBAaWYgKGlzTGVnYWN5UHJvcHMpIHtcbiAgICAgICAgICA8dmFsLXRleHQgY2xhc3M9XCJ0ZXh0XCIgW3Byb3BzXT1cImdldExlZ2FjeVRleHRQcm9wcygpXCIgLz5cbiAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgPHZhbC10ZXh0IGNsYXNzPVwidGV4dFwiIFtwcm9wc109XCJjb21wdXRlZFRleHRQcm9wc1wiIC8+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgIDwvdmFsLWJveD5cbiAgYCxcbiAgc3R5bGVVcmxzOiBbJy4vYWxlcnQtYm94LmNvbXBvbmVudC5zY3NzJ10sXG59KVxuLyoqXG4gKiB2YWwtYWxlcnQtYm94XG4gKlxuICogRGlzcGxheXMgYW4gYWxlcnQgYm94IHdpdGggYW4gaWNvbiBhbmQgdGV4dCwgdXNpbmcgYSBzdHlsZWQgYm94IGNvbnRhaW5lci5cbiAqIFN1cHBvcnRzIGJvdGggc3RhdGljIGFuZCByZWFjdGl2ZSBjb250ZW50IHBhdHRlcm5zLlxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBMZWdhY3kgcGF0dGVybiB3aXRoIFRleHRNZXRhZGF0YVxuICogPHZhbC1hbGVydC1ib3ggW3Byb3BzXT1cInsgYm94OiB7Li4ufSwgaWNvbjogey4uLn0sIHRleHQ6IHsuLi59IH1cIj48L3ZhbC1hbGVydC1ib3g+XG4gKlxuICogLy8gUmVhY3RpdmUgcGF0dGVybiB3aXRoIHNpbXBsaWZpZWQgY29uZmlndXJhdGlvblxuICogPHZhbC1hbGVydC1ib3ggW3Byb3BzXT1cInsgYm94OiB7Li4ufSwgaWNvbjogey4uLn0sIHRleHRDb25maWc6IHsga2V5OiAnYWxlcnQud2FybmluZycgfSB9XCI+PC92YWwtYWxlcnQtYm94PlxuICpcbiAqIEBpbnB1dCBwcm9wczogQWxlcnRCb3hNZXRhZGF0YSB8IFJlYWN0aXZlQWxlcnRCb3hNZXRhZGF0YSAtIENvbmZpZ3VyYXRpb24gZm9yIHRoZSBhbGVydCBib3hcbiAqL1xuZXhwb3J0IGNsYXNzIEFsZXJ0Qm94Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBwcml2YXRlIHN1YnNjcmlwdGlvbnMgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cbiAgLyoqXG4gICAqIEFsZXJ0IGJveCBjb25maWd1cmF0aW9uIG9iamVjdC5cbiAgICogU3VwcG9ydHMgYm90aCBsZWdhY3kgQWxlcnRCb3hNZXRhZGF0YSBhbmQgUmVhY3RpdmVBbGVydEJveE1ldGFkYXRhIHBhdHRlcm5zLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHJvcHM6IEFsZXJ0Qm94TWV0YWRhdGEgfCBSZWFjdGl2ZUFsZXJ0Qm94TWV0YWRhdGE7XG5cbiAgLyoqIENvbXB1dGVkIHRleHQgcHJvcGVydGllcyBmb3IgcmVhY3RpdmUgcGF0dGVybiAqL1xuICBjb21wdXRlZFRleHRQcm9wczogYW55O1xuXG4gIC8qKiBXaGV0aGVyIHRoaXMgaXMgdXNpbmcgdGhlIGxlZ2FjeSBwcm9wcyBwYXR0ZXJuICovXG4gIGdldCBpc0xlZ2FjeVByb3BzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAndGV4dCcgaW4gdGhpcy5wcm9wcyAmJiB0eXBlb2YgKHRoaXMucHJvcHMgYXMgYW55KS50ZXh0ID09PSAnb2JqZWN0JztcbiAgfVxuXG4gIC8qKiBHZXQgdGV4dCBwcm9wcyBmb3IgbGVnYWN5IHBhdHRlcm4gKi9cbiAgZ2V0TGVnYWN5VGV4dFByb3BzKCk6IGFueSB7XG4gICAgcmV0dXJuICh0aGlzLnByb3BzIGFzIEFsZXJ0Qm94TWV0YWRhdGEpLnRleHQ7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGxhbmdTZXJ2aWNlOiBMYW5nU2VydmljZSkge31cblxuICBuZ09uSW5pdCgpIHtcbiAgICBpZiAoIXRoaXMuaXNMZWdhY3lQcm9wcykge1xuICAgICAgdGhpcy5pbml0aWFsaXplUmVhY3RpdmVUZXh0UHJvcHMoKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMudW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZVJlYWN0aXZlVGV4dFByb3BzKCkge1xuICAgIGNvbnN0IHJlYWN0aXZlUHJvcHMgPSB0aGlzLnByb3BzIGFzIFJlYWN0aXZlQWxlcnRCb3hNZXRhZGF0YTtcblxuICAgIC8vIEJhc2UgdGV4dCBwcm9wZXJ0aWVzIHdpdGggc3R5bGluZ1xuICAgIHRoaXMuY29tcHV0ZWRUZXh0UHJvcHMgPSB7XG4gICAgICBzaXplOiByZWFjdGl2ZVByb3BzLnRleHRTdHlsZT8uc2l6ZSB8fCAnbWVkaXVtJyxcbiAgICAgIGNvbG9yOiByZWFjdGl2ZVByb3BzLnRleHRTdHlsZT8uY29sb3IsXG4gICAgICBib2xkOiByZWFjdGl2ZVByb3BzLnRleHRTdHlsZT8uYm9sZCB8fCBmYWxzZSxcbiAgICB9O1xuXG4gICAgLy8gQWRkIGNvbnRlbnQgY29uZmlndXJhdGlvblxuICAgIGlmIChyZWFjdGl2ZVByb3BzLnRleHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gU3RhdGljIHRleHRcbiAgICAgIHRoaXMuY29tcHV0ZWRUZXh0UHJvcHMuY29udGVudCA9IHJlYWN0aXZlUHJvcHMudGV4dDtcbiAgICB9IGVsc2UgaWYgKHJlYWN0aXZlUHJvcHMudGV4dENvbmZpZykge1xuICAgICAgLy8gUmVhY3RpdmUgY29udGVudFxuICAgICAgdGhpcy5jb21wdXRlZFRleHRQcm9wcy5jb250ZW50Q29uZmlnID0gcmVhY3RpdmVQcm9wcy50ZXh0Q29uZmlnO1xuICAgIH1cbiAgfVxufVxuIl19
@@ -7,7 +7,6 @@ import { map } from 'rxjs/operators';
7
7
  import { PopoverSelectorComponent } from '../popover-selector/popover-selector.component';
8
8
  import * as i0 from "@angular/core";
9
9
  import * as i1 from "../../../services/lang-provider/lang-provider.service";
10
- import * as i2 from "../../../services/content.service";
11
10
  /**
12
11
  * val-language-selector
13
12
  *
@@ -52,9 +51,8 @@ import * as i2 from "../../../services/content.service";
52
51
  * @output languageChange: EventEmitter<string> - Emitted when language changes
53
52
  */
54
53
  export class LanguageSelectorComponent {
55
- constructor(langService, contentService) {
54
+ constructor(langService) {
56
55
  this.langService = langService;
57
- this.contentService = contentService;
58
56
  /**
59
57
  * Language selector configuration object.
60
58
  * @type {LanguageSelectorMetadata}
@@ -118,20 +116,11 @@ export class LanguageSelectorComponent {
118
116
  }
119
117
  else if (this.props.labelConfig) {
120
118
  // Reactive label
121
- this.label$ = this.contentService.fromContent({
122
- className: this.props.labelConfig.className || '_global',
123
- key: this.props.labelConfig.key,
124
- fallback: this.props.labelConfig.fallback || 'Language',
125
- interpolation: this.props.labelConfig.interpolation,
126
- });
119
+ this.label$ = this.langService.getContent(this.props.labelConfig.className || '_global', this.props.labelConfig.key, this.props.labelConfig.fallback || 'Language');
127
120
  }
128
121
  else {
129
122
  // Default label from global content
130
- this.label$ = this.contentService.fromContent({
131
- className: '_global',
132
- key: 'language',
133
- fallback: 'Idioma',
134
- });
123
+ this.label$ = this.langService.getContent('_global', 'language', 'Idioma');
135
124
  }
136
125
  }
137
126
  initializePopoverProps() {
@@ -212,7 +201,7 @@ export class LanguageSelectorComponent {
212
201
  this.languageChange.emit(selectedLanguage);
213
202
  }
214
203
  }
215
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: LanguageSelectorComponent, deps: [{ token: i1.LangService }, { token: i2.ContentService }], target: i0.ɵɵFactoryTarget.Component }); }
204
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: LanguageSelectorComponent, deps: [{ token: i1.LangService }], target: i0.ɵɵFactoryTarget.Component }); }
216
205
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: LanguageSelectorComponent, isStandalone: true, selector: "val-language-selector", inputs: { props: "props" }, outputs: { languageChange: "languageChange" }, ngImport: i0, template: `
217
206
  <val-popover-selector [props]="popoverProps" (selectionChange)="onLanguageChange($event)"> </val-popover-selector>
218
207
  `, isInline: true, styles: [":host{display:inline-block;width:auto}val-popover-selector .popover-selector-container{display:inline-block;width:auto}val-popover-selector .selector-trigger .trigger-text{display:inline-flex;align-items:center;gap:8px;font-weight:700}val-popover-selector .selector-trigger .trigger-text .flag-emoji{font-size:1.2em;line-height:1;filter:drop-shadow(0 1px 2px rgba(0,0,0,.1));transition:transform .2s ease}val-popover-selector .selector-trigger.has-flag .trigger-text{letter-spacing:.025em}val-popover-selector .selector-trigger:hover:not([disabled]) .trigger-text .flag-emoji{transform:scale(1.1)}val-popover-selector .option-content{gap:10px;padding:8px 0}val-popover-selector .option-content .flag-emoji{font-size:1.1em;filter:drop-shadow(0 1px 2px rgba(0,0,0,.08))}val-popover-selector .option-content span{font-weight:600;letter-spacing:.01em}.language-flag{font-size:1.2em;margin-right:6px;vertical-align:middle;line-height:1;filter:drop-shadow(0 1px 3px rgba(0,0,0,.1));transition:all .2s ease}@media (max-width: 768px){val-popover-selector .selector-trigger .trigger-text{font-size:13px;gap:6px}val-popover-selector .selector-trigger .trigger-text .flag-emoji{font-size:1.1em}}val-popover-selector .selector-trigger:hover:not([disabled]) .trigger-text .flag-emoji{transform:scale(1.1) rotate(3deg);transition:transform .25s cubic-bezier(.4,0,.2,1)}val-popover-selector .selector-trigger:active .trigger-text .flag-emoji{transform:scale(1.05)}val-popover-selector .language-changing .flag-emoji{animation:languageSwitch .4s ease-in-out}@keyframes languageSwitch{0%{transform:scale(1)}50%{transform:scale(1.15) rotate(8deg)}to{transform:scale(1)}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: PopoverSelectorComponent, selector: "val-popover-selector", inputs: ["props"], outputs: ["selectionChange"] }] }); }
@@ -222,9 +211,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
222
211
  args: [{ selector: 'val-language-selector', standalone: true, imports: [CommonModule, PopoverSelectorComponent], template: `
223
212
  <val-popover-selector [props]="popoverProps" (selectionChange)="onLanguageChange($event)"> </val-popover-selector>
224
213
  `, styles: [":host{display:inline-block;width:auto}val-popover-selector .popover-selector-container{display:inline-block;width:auto}val-popover-selector .selector-trigger .trigger-text{display:inline-flex;align-items:center;gap:8px;font-weight:700}val-popover-selector .selector-trigger .trigger-text .flag-emoji{font-size:1.2em;line-height:1;filter:drop-shadow(0 1px 2px rgba(0,0,0,.1));transition:transform .2s ease}val-popover-selector .selector-trigger.has-flag .trigger-text{letter-spacing:.025em}val-popover-selector .selector-trigger:hover:not([disabled]) .trigger-text .flag-emoji{transform:scale(1.1)}val-popover-selector .option-content{gap:10px;padding:8px 0}val-popover-selector .option-content .flag-emoji{font-size:1.1em;filter:drop-shadow(0 1px 2px rgba(0,0,0,.08))}val-popover-selector .option-content span{font-weight:600;letter-spacing:.01em}.language-flag{font-size:1.2em;margin-right:6px;vertical-align:middle;line-height:1;filter:drop-shadow(0 1px 3px rgba(0,0,0,.1));transition:all .2s ease}@media (max-width: 768px){val-popover-selector .selector-trigger .trigger-text{font-size:13px;gap:6px}val-popover-selector .selector-trigger .trigger-text .flag-emoji{font-size:1.1em}}val-popover-selector .selector-trigger:hover:not([disabled]) .trigger-text .flag-emoji{transform:scale(1.1) rotate(3deg);transition:transform .25s cubic-bezier(.4,0,.2,1)}val-popover-selector .selector-trigger:active .trigger-text .flag-emoji{transform:scale(1.05)}val-popover-selector .language-changing .flag-emoji{animation:languageSwitch .4s ease-in-out}@keyframes languageSwitch{0%{transform:scale(1)}50%{transform:scale(1.15) rotate(8deg)}to{transform:scale(1)}}\n"] }]
225
- }], ctorParameters: () => [{ type: i1.LangService }, { type: i2.ContentService }], propDecorators: { props: [{
214
+ }], ctorParameters: () => [{ type: i1.LangService }], propDecorators: { props: [{
226
215
  type: Input
227
216
  }], languageChange: [{
228
217
  type: Output
229
218
  }] } });
230
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFuZ3VhZ2Utc2VsZWN0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsdGVjaC1jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9tb2xlY3VsZXMvbGFuZ3VhZ2Utc2VsZWN0b3IvbGFuZ3VhZ2Utc2VsZWN0b3IuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxRixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDakQsT0FBTyxFQUFjLFlBQVksRUFBRSxhQUFhLEVBQUUsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ25FLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUlyQyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQzs7OztBQWExRjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMENHO0FBQ0gsTUFBTSxPQUFPLHlCQUF5QjtJQTJEcEMsWUFDVSxXQUF3QixFQUN4QixjQUE4QjtRQUQ5QixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUE1RHhDOzs7V0FHRztRQUVILFVBQUssR0FBNkIsRUFBRSxDQUFDO1FBRXJDOzs7V0FHRztRQUVILG1CQUFjLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQWNwQyxrQkFBYSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFFM0MscUNBQXFDO1FBQ3BCLHlC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SSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDN0MsQ0FBQztJQUNILENBQUM7K0dBbE1VLHlCQUF5QjttR0FBekIseUJBQXlCLDRKQWhEMUI7O0dBRVQsK3JEQUhTLFlBQVksK0JBQUUsd0JBQXdCOzs0RkFpRHJDLHlCQUF5QjtrQkFwRHJDLFNBQVM7K0JBQ0UsdUJBQXVCLGNBQ3JCLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSx3QkFBd0IsQ0FBQyxZQUN2Qzs7R0FFVDs2R0FvREQsS0FBSztzQkFESixLQUFLO2dCQVFOLGNBQWM7c0JBRGIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGFkZEljb25zIH0gZnJvbSAnaW9uaWNvbnMnO1xuaW1wb3J0IHsgZ2xvYmUsIGxhbmd1YWdlIH0gZnJvbSAnaW9uaWNvbnMvaWNvbnMnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uLCBjb21iaW5lTGF0ZXN0LCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQ29udGVudFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9jb250ZW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgTGFuZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9sYW5nLXByb3ZpZGVyL2xhbmctcHJvdmlkZXIuc2VydmljZSc7XG5pbXBvcnQgeyBMYW5nT3B0aW9uIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbGFuZy1wcm92aWRlci90eXBlcyc7XG5pbXBvcnQgeyBQb3BvdmVyU2VsZWN0b3JDb21wb25lbnQgfSBmcm9tICcuLi9wb3BvdmVyLXNlbGVjdG9yL3BvcG92ZXItc2VsZWN0b3IuY29tcG9uZW50JztcbmltcG9ydCB7IFBvcG92ZXJPcHRpb24sIFBvcG92ZXJTZWxlY3Rvck1ldGFkYXRhIH0gZnJvbSAnLi4vcG9wb3Zlci1zZWxlY3Rvci90eXBlcyc7XG5pbXBvcnQgeyBMYW5ndWFnZVNlbGVjdG9yTWV0YWRhdGEgfSBmcm9tICcuL3R5cGVzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmFsLWxhbmd1YWdlLXNlbGVjdG9yJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgUG9wb3ZlclNlbGVjdG9yQ29tcG9uZW50XSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8dmFsLXBvcG92ZXItc2VsZWN0b3IgW3Byb3BzXT1cInBvcG92ZXJQcm9wc1wiIChzZWxlY3Rpb25DaGFuZ2UpPVwib25MYW5ndWFnZUNoYW5nZSgkZXZlbnQpXCI+IDwvdmFsLXBvcG92ZXItc2VsZWN0b3I+XG4gIGAsXG4gIHN0eWxlVXJsczogWycuL2xhbmd1YWdlLXNlbGVjdG9yLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuLyoqXG4gKiB2YWwtbGFuZ3VhZ2Utc2VsZWN0b3JcbiAqXG4gKiBBIHNwZWNpYWxpemVkIGxhbmd1YWdlIHNlbGVjdG9yIGNvbXBvbmVudCB0aGF0IGludGVncmF0ZXMgd2l0aCB0aGUgTGFuZ1NlcnZpY2UuXG4gKiBVc2VzIHRoZSBwb3BvdmVyLXNlbGVjdG9yIGNvbXBvbmVudCBpbnRlcm5hbGx5IGFuZCBwcm92aWRlcyBsYW5ndWFnZS1zcGVjaWZpYyBmdW5jdGlvbmFsaXR5LlxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBCYXNpYyB1c2FnZSAoYXV0by1kZXRlY3RzIGxhbmd1YWdlcyBmcm9tIExhbmdTZXJ2aWNlKVxuICogPHZhbC1sYW5ndWFnZS1zZWxlY3RvclxuICogICBbcHJvcHNdPVwieyBzaG93TGFiZWw6IHRydWUsIHNob3dGbGFnczogdHJ1ZSB9XCI+XG4gKiA8L3ZhbC1sYW5ndWFnZS1zZWxlY3Rvcj5cbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQ3VzdG9tIGNvbmZpZ3VyYXRpb25cbiAqIGNvbnN0IGxhbmd1YWdlUHJvcHM6IExhbmd1YWdlU2VsZWN0b3JNZXRhZGF0YSA9IHtcbiAqICAgc2hvd0xhYmVsOiB0cnVlLFxuICogICBsYWJlbDogJ0Nob29zZSBMYW5ndWFnZScsXG4gKiAgIHNob3dGbGFnczogdHJ1ZSxcbiAqICAgY29sb3I6ICdwcmltYXJ5JyxcbiAqICAgc2l6ZTogJ2xhcmdlJyxcbiAqICAgZmlsbDogJ291dGxpbmUnLFxuICogICBjdXN0b21MYW5ndWFnZU5hbWVzOiB7XG4gKiAgICAgJ2VzJzogJ0VzcGHDsW9sJyxcbiAqICAgICAnZW4nOiAnRW5nbGlzaCcsXG4gKiAgICAgJ2ZyJzogJ0ZyYW7Dp2FpcydcbiAqICAgfVxuICogfTtcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gV2l0aCByZWFjdGl2ZSBjb250ZW50XG4gKiBjb25zdCBsYW5ndWFnZVByb3BzOiBMYW5ndWFnZVNlbGVjdG9yTWV0YWRhdGEgPSB7XG4gKiAgIHNob3dMYWJlbDogdHJ1ZSxcbiAqICAgbGFiZWxDb25maWc6IHtcbiAqICAgICBjbGFzc05hbWU6ICdteUNvbXBvbmVudCcsXG4gKiAgICAga2V5OiAnbGFuZ3VhZ2VMYWJlbCcsXG4gKiAgICAgZmFsbGJhY2s6ICdMYW5ndWFnZSdcbiAqICAgfSxcbiAqICAgY29sb3I6ICd0ZXJ0aWFyeSdcbiAqIH07XG4gKlxuICogQGlucHV0IHByb3BzOiBMYW5ndWFnZVNlbGVjdG9yTWV0YWRhdGEgLSBDb25maWd1cmF0aW9uIGZvciB0aGUgbGFuZ3VhZ2Ugc2VsZWN0b3JcbiAqIEBvdXRwdXQgbGFuZ3VhZ2VDaGFuZ2U6IEV2ZW50RW1pdHRlcjxzdHJpbmc+IC0gRW1pdHRlZCB3aGVuIGxhbmd1YWdlIGNoYW5nZXNcbiAqL1xuZXhwb3J0IGNsYXNzIExhbmd1YWdlU2VsZWN0b3JDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIC8qKlxuICAgKiBMYW5ndWFnZSBzZWxlY3RvciBjb25maWd1cmF0aW9uIG9iamVjdC5cbiAgICogQHR5cGUge0xhbmd1YWdlU2VsZWN0b3JNZXRhZGF0YX1cbiAgICovXG4gIEBJbnB1dCgpXG4gIHByb3BzOiBMYW5ndWFnZVNlbGVjdG9yTWV0YWRhdGEgPSB7fTtcblxuICAvKipcbiAgICogRXZlbnQgZW1pdHRlZCB3aGVuIHRoZSBsYW5ndWFnZSBzZWxlY3Rpb24gY2hhbmdlcy5cbiAgICogRW1pdHMgdGhlIHNlbGVjdGVkIGxhbmd1YWdlIGNvZGUuXG4gICAqL1xuICBAT3V0cHV0KClcbiAgbGFuZ3VhZ2VDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblxuICAvKiogUG9wb3ZlciBzZWxlY3RvciBjb25maWd1cmF0aW9uICovXG4gIHBvcG92ZXJQcm9wczogUG9wb3ZlclNlbGVjdG9yTWV0YWRhdGE7XG5cbiAgLyoqIEN1cnJlbnQgbGFuZ3VhZ2Ugb2JzZXJ2YWJsZSAqL1xuICBjdXJyZW50TGFuZ3VhZ2UkOiBPYnNlcnZhYmxlPExhbmdPcHRpb24+O1xuXG4gIC8qKiBBdmFpbGFibGUgbGFuZ3VhZ2VzIG9ic2VydmFibGUgKi9cbiAgYXZhaWxhYmxlTGFuZ3VhZ2VzJDogT2JzZXJ2YWJsZTxMYW5nT3B0aW9uW10+O1xuXG4gIC8qKiBMYWJlbCBvYnNlcnZhYmxlIGZvciByZWFjdGl2ZSBjb250ZW50ICovXG4gIGxhYmVsJDogT2JzZXJ2YWJsZTxzdHJpbmc+O1xuXG4gIHByaXZhdGUgc3Vic2NyaXB0aW9ucyA9IG5ldyBTdWJzY3JpcHRpb24oKTtcblxuICAvKiogRGVmYXVsdCBsYW5ndWFnZSBkaXNwbGF5IG5hbWVzICovXG4gIHByaXZhdGUgcmVhZG9ubHkgZGVmYXVsdExhbmd1YWdlTmFtZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgZXM6ICdFc3Bhw7FvbCcsXG4gICAgZW46ICdFbmdsaXNoJyxcbiAgICBmcjogJ0ZyYW7Dp2FpcycsXG4gICAgZGU6ICdEZXV0c2NoJyxcbiAgICBwdDogJ1BvcnR1Z3XDqnMnLFxuICAgIGl0OiAnSXRhbGlhbm8nLFxuICAgIHpoOiAn5Lit5paHJyxcbiAgICBqYTogJ+aXpeacrOiqnicsXG4gICAga286ICftlZzqta3slrQnLFxuICAgIHJ1OiAn0KDRg9GB0YHQutC40LknLFxuICAgIGFyOiAn2KfZhNi52LHYqNmK2KknLFxuICB9O1xuXG4gIC8qKiBEZWZhdWx0IGZsYWcgaWNvbnMgZm9yIGxhbmd1YWdlcyAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGRlZmF1bHRMYW5ndWFnZUZsYWdzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgIGVzOiAn8J+HqvCfh7gnLFxuICAgIGVuOiAn8J+HuvCfh7gnLFxuICAgIGZyOiAn8J+Hq/Cfh7cnLFxuICAgIGRlOiAn8J+HqfCfh6onLFxuICAgIHB0OiAn8J+HtfCfh7knLFxuICAgIGl0OiAn8J+HrvCfh7knLFxuICAgIHpoOiAn8J+HqPCfh7MnLFxuICAgIGphOiAn8J+Hr/Cfh7UnLFxuICAgIGtvOiAn8J+HsPCfh7cnLFxuICAgIHJ1OiAn8J+Ht/Cfh7onLFxuICAgIGFyOiAn8J+HuPCfh6YnLFxuICB9O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgbGFuZ1NlcnZpY2U6IExhbmdTZXJ2aWNlLFxuICAgIHByaXZhdGUgY29udGVudFNlcnZpY2U6IENvbnRlbnRTZXJ2aWNlXG4gICkge1xuICAgIC8vIFJlZ2lzdGVyIHJlcXVpcmVkIGljb25zXG4gICAgYWRkSWNvbnMoeyBsYW5ndWFnZSwgZ2xvYmUgfSk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmluaXRpYWxpemVMYW5ndWFnZVN0YXRlKCk7XG4gICAgdGhpcy5pbml0aWFsaXplTGFiZWwoKTtcbiAgICB0aGlzLmluaXRpYWxpemVQb3BvdmVyUHJvcHMoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0aWFsaXplTGFuZ3VhZ2VTdGF0ZSgpIHtcbiAgICAvLyBHZXQgY3VycmVudCBsYW5ndWFnZSBhbmQgYXZhaWxhYmxlIGxhbmd1YWdlcyBmcm9tIExhbmdTZXJ2aWNlXG4gICAgdGhpcy5jdXJyZW50TGFuZ3VhZ2UkID0gdGhpcy5sYW5nU2VydmljZS5jdXJyZW50TGFuZyQ7XG4gICAgdGhpcy5hdmFpbGFibGVMYW5ndWFnZXMkID0gdGhpcy5jdXJyZW50TGFuZ3VhZ2UkLnBpcGUoXG4gICAgICBtYXAoKCkgPT4gdGhpcy5wcm9wcy5hdmFpbGFibGVMYW5ndWFnZXMgfHwgdGhpcy5sYW5nU2VydmljZS5hdmFpbGFibGVMYW5ncylcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0aWFsaXplTGFiZWwoKSB7XG4gICAgLy8gSW5pdGlhbGl6ZSBsYWJlbCBvYnNlcnZhYmxlIGJhc2VkIG9uIGNvbmZpZ3VyYXRpb25cbiAgICBpZiAodGhpcy5wcm9wcy5sYWJlbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBTdGF0aWMgbGFiZWxcbiAgICAgIHRoaXMubGFiZWwkID0gb2YodGhpcy5wcm9wcy5sYWJlbCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnByb3BzLmxhYmVsQ29uZmlnKSB7XG4gICAgICAvLyBSZWFjdGl2ZSBsYWJlbFxuICAgICAgdGhpcy5sYWJlbCQgPSB0aGlzLmNvbnRlbnRTZXJ2aWNlLmZyb21Db250ZW50KHtcbiAgICAgICAgY2xhc3NOYW1lOiB0aGlzLnByb3BzLmxhYmVsQ29uZmlnLmNsYXNzTmFtZSB8fCAnX2dsb2JhbCcsXG4gICAgICAgIGtleTogdGhpcy5wcm9wcy5sYWJlbENvbmZpZy5rZXksXG4gICAgICAgIGZhbGxiYWNrOiB0aGlzLnByb3BzLmxhYmVsQ29uZmlnLmZhbGxiYWNrIHx8ICdMYW5ndWFnZScsXG4gICAgICAgIGludGVycG9sYXRpb246IHRoaXMucHJvcHMubGFiZWxDb25maWcuaW50ZXJwb2xhdGlvbixcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBEZWZhdWx0IGxhYmVsIGZyb20gZ2xvYmFsIGNvbnRlbnRcbiAgICAgIHRoaXMubGFiZWwkID0gdGhpcy5jb250ZW50U2VydmljZS5mcm9tQ29udGVudCh7XG4gICAgICAgIGNsYXNzTmFtZTogJ19nbG9iYWwnLFxuICAgICAgICBrZXk6ICdsYW5ndWFnZScsXG4gICAgICAgIGZhbGxiYWNrOiAnSWRpb21hJyxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZVBvcG92ZXJQcm9wcygpIHtcbiAgICAvLyBTdWJzY3JpYmUgdG8gbGFuZ3VhZ2Ugc3RhdGUgY2hhbmdlcyBhbmQgY29udGVudCBjaGFuZ2VzIHRvIHVwZGF0ZSBwb3BvdmVyIHByb3BzXG4gICAgY29uc3QgbGFuZ3VhZ2VTdWJzY3JpcHRpb24gPSBjb21iaW5lTGF0ZXN0KFtcbiAgICAgIHRoaXMuYXZhaWxhYmxlTGFuZ3VhZ2VzJCxcbiAgICAgIHRoaXMuY3VycmVudExhbmd1YWdlJCxcbiAgICAgIHRoaXMubGFuZ1NlcnZpY2UuY3VycmVudExhbmckLCAvLyBUaGlzIHdpbGwgdHJpZ2dlciB1cGRhdGVzIHdoZW4gbGFuZ3VhZ2UgY2hhbmdlc1xuICAgIF0pLnN1YnNjcmliZSgoW2F2YWlsYWJsZUxhbmd1YWdlcywgY3VycmVudExhbmd1YWdlXSkgPT4ge1xuICAgICAgdGhpcy51cGRhdGVQb3BvdmVyUHJvcHMoYXZhaWxhYmxlTGFuZ3VhZ2VzLCBjdXJyZW50TGFuZ3VhZ2UpO1xuICAgIH0pO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQobGFuZ3VhZ2VTdWJzY3JpcHRpb24pO1xuXG4gICAgLy8gU3Vic2NyaWJlIHRvIGxhYmVsIGNoYW5nZXNcbiAgICBjb25zdCBsYWJlbFN1YnNjcmlwdGlvbiA9IHRoaXMubGFiZWwkLnN1YnNjcmliZShsYWJlbCA9PiB7XG4gICAgICBpZiAodGhpcy5wb3BvdmVyUHJvcHMpIHtcbiAgICAgICAgdGhpcy5wb3BvdmVyUHJvcHMgPSB7XG4gICAgICAgICAgLi4udGhpcy5wb3BvdmVyUHJvcHMsXG4gICAgICAgICAgbGFiZWw6IHRoaXMucHJvcHMuc2hvd0xhYmVsICE9PSBmYWxzZSA/IGxhYmVsIDogdW5kZWZpbmVkLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQobGFiZWxTdWJzY3JpcHRpb24pO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVQb3BvdmVyUHJvcHMoYXZhaWxhYmxlTGFuZ3VhZ2VzOiBMYW5nT3B0aW9uW10sIGN1cnJlbnRMYW5ndWFnZTogTGFuZ09wdGlvbikge1xuICAgIC8vIENvbnZlcnQgbGFuZ3VhZ2UgY29kZXMgdG8gcG9wb3ZlciBvcHRpb25zXG4gICAgY29uc3Qgb3B0aW9uczogUG9wb3Zlck9wdGlvbltdID0gYXZhaWxhYmxlTGFuZ3VhZ2VzLm1hcChsYW5nID0+ICh7XG4gICAgICB2YWx1ZTogbGFuZyxcbiAgICAgIGxhYmVsOiB0aGlzLmdldExhbmd1YWdlRGlzcGxheU5hbWUobGFuZyksXG4gICAgICBpY29uOiB0aGlzLnByb3BzLnNob3dGbGFncyA/IHVuZGVmaW5lZCA6IHVuZGVmaW5lZCwgLy8gV2UnbGwgdXNlIHRleHQgZmxhZ3MgaW5zdGVhZFxuICAgIH0pKTtcblxuICAgIC8vIENyZWF0ZSBwb3BvdmVyIGNvbmZpZ3VyYXRpb25cbiAgICB0aGlzLnBvcG92ZXJQcm9wcyA9IHtcbiAgICAgIG9wdGlvbnMsXG4gICAgICBzZWxlY3RlZFZhbHVlOiBjdXJyZW50TGFuZ3VhZ2UsXG4gICAgICBsYWJlbDogdGhpcy5wcm9wcy5zaG93TGFiZWwgIT09IGZhbHNlID8gJycgOiB1bmRlZmluZWQsIC8vIFdpbGwgYmUgc2V0IGJ5IGxhYmVsIHN1YnNjcmlwdGlvblxuICAgICAgaWNvbjogJ2xhbmd1YWdlJyxcbiAgICAgIHBsYWNlaG9sZGVyOiAnU2VsZWNjaW9uYXIgaWRpb21hLi4uJyxcbiAgICAgIGNvbG9yOiB0aGlzLnByb3BzLmNvbG9yIHx8ICdtZWRpdW0nLFxuICAgICAgc2l6ZTogdGhpcy5wcm9wcy5zaXplIHx8ICdkZWZhdWx0JyxcbiAgICAgIGZpbGw6IHRoaXMucHJvcHMuZmlsbCB8fCAnb3V0bGluZScsXG4gICAgICBzaGFwZTogdGhpcy5wcm9wcy5zaGFwZSxcbiAgICAgIGV4cGFuZDogdGhpcy5wcm9wcy5leHBhbmQsXG4gICAgICBkaXNhYmxlZDogdGhpcy5wcm9wcy5kaXNhYmxlZCB8fCBmYWxzZSxcbiAgICAgIGludGVyZmFjZTogJ3BvcG92ZXInLFxuICAgICAgc2hvd0NoZWNrbWFyazogdHJ1ZSxcbiAgICAgIG11bHRpcGxlOiBmYWxzZSxcbiAgICAgIGNhbmNlbFRleHQ6ICdDYW5jZWxhcicsXG4gICAgICBva1RleHQ6ICdBY2VwdGFyJyxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRMYW5ndWFnZURpc3BsYXlOYW1lKGxhbmd1YWdlQ29kZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAvLyBVc2UgY3VzdG9tIG5hbWVzIGlmIHByb3ZpZGVkXG4gICAgaWYgKHRoaXMucHJvcHMuY3VzdG9tTGFuZ3VhZ2VOYW1lcz8uW2xhbmd1YWdlQ29kZV0pIHtcbiAgICAgIGNvbnN0IGN1c3RvbU5hbWUgPSB0aGlzLnByb3BzLmN1c3RvbUxhbmd1YWdlTmFtZXNbbGFuZ3VhZ2VDb2RlXTtcbiAgICAgIGNvbnN0IGZsYWcgPSB0aGlzLnByb3BzLnNob3dGbGFncyA/IHRoaXMuZGVmYXVsdExhbmd1YWdlRmxhZ3NbbGFuZ3VhZ2VDb2RlXSA6ICcnO1xuICAgICAgcmV0dXJuIGZsYWcgPyBgJHtmbGFnfSAke2N1c3RvbU5hbWV9YCA6IGN1c3RvbU5hbWU7XG4gICAgfVxuXG4gICAgLy8gVXNlIHJlYWN0aXZlIGNvbnRlbnQgZm9yIHRyYW5zbGF0ZWQgbGFuZ3VhZ2UgbmFtZXNcbiAgICAvLyBOb3RlOiBUaGlzIHdpbGwgdXNlIHRoZSBjdXJyZW50IGxhbmd1YWdlIHNpbmNlIGdldExhbmd1YWdlRGlzcGxheU5hbWUgaXMgY2FsbGVkIGR1cmluZyBzdWJzY3JpcHRpb24gdXBkYXRlc1xuICAgIGNvbnN0IHRyYW5zbGF0ZWROYW1lID0gdGhpcy5sYW5nU2VydmljZS5nZXRUZXh0KCdfZ2xvYmFsJywgYGxhbmd1YWdlTmFtZV8ke2xhbmd1YWdlQ29kZX1gKTtcbiAgICBjb25zdCBmbGFnID0gdGhpcy5wcm9wcy5zaG93RmxhZ3MgPyB0aGlzLmRlZmF1bHRMYW5ndWFnZUZsYWdzW2xhbmd1YWdlQ29kZV0gOiAnJztcblxuICAgIGlmICh0cmFuc2xhdGVkTmFtZSAmJiB0cmFuc2xhdGVkTmFtZSAhPT0gYGxhbmd1YWdlTmFtZV8ke2xhbmd1YWdlQ29kZX1gKSB7XG4gICAgICByZXR1cm4gZmxhZyA/IGAke2ZsYWd9ICR7dHJhbnNsYXRlZE5hbWV9YCA6IHRyYW5zbGF0ZWROYW1lO1xuICAgIH1cblxuICAgIC8vIEZhbGxiYWNrIHRvIGRlZmF1bHQgbmFtZXMsIHRoZW4gdG8gY29kZVxuICAgIGNvbnN0IGRlZmF1bHROYW1lID0gdGhpcy5kZWZhdWx0TGFuZ3VhZ2VOYW1lc1tsYW5ndWFnZUNvZGVdIHx8IGxhbmd1YWdlQ29kZS50b1VwcGVyQ2FzZSgpO1xuICAgIHJldHVybiBmbGFnID8gYCR7ZmxhZ30gJHtkZWZhdWx0TmFtZX1gIDogZGVmYXVsdE5hbWU7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIGxhbmd1YWdlIHNlbGVjdGlvbiBjaGFuZ2UuXG4gICAqIEBwYXJhbSBzZWxlY3RlZExhbmd1YWdlIC0gVGhlIHNlbGVjdGVkIGxhbmd1YWdlIGNvZGUocylcbiAgICovXG4gIG9uTGFuZ3VhZ2VDaGFuZ2Uoc2VsZWN0ZWRMYW5ndWFnZTogc3RyaW5nIHwgc3RyaW5nW10pIHtcbiAgICBpZiAodHlwZW9mIHNlbGVjdGVkTGFuZ3VhZ2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICAvLyBVcGRhdGUgdGhlIGxhbmd1YWdlIHNlcnZpY2VcbiAgICAgIHRoaXMubGFuZ1NlcnZpY2Uuc2V0TGFuZyhzZWxlY3RlZExhbmd1YWdlKTtcblxuICAgICAgLy8gRW1pdCB0aGUgY2hhbmdlIGV2ZW50XG4gICAgICB0aGlzLmxhbmd1YWdlQ2hhbmdlLmVtaXQoc2VsZWN0ZWRMYW5ndWFnZSk7XG4gICAgfVxuICB9XG59XG4iXX0=
219
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFuZ3VhZ2Utc2VsZWN0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsdGVjaC1jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9tb2xlY3VsZXMvbGFuZ3VhZ2Utc2VsZWN0b3IvbGFuZ3VhZ2Utc2VsZWN0b3IuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxRixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDakQsT0FBTyxFQUFjLFlBQVksRUFBRSxhQUFhLEVBQUUsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ25FLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUdyQyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQzs7O0FBYTFGOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EwQ0c7QUFDSCxNQUFNLE9BQU8seUJBQXlCO0lBMkRwQyxZQUFvQixXQUF3QjtRQUF4QixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQTFENUM7OztXQUdHO1FBRUgsVUFBSyxHQUE2QixFQUFFLENBQUM7UUFFckM7OztXQUdHO1FBRUgsbUJBQWMsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBY3BDLGtCQUFhLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUUzQyxxQ0FBcUM7UUFDcEIseUJBQW9CLEdBQTJCO1lBQzlELEVBQUUsRUFBRSxTQUFTO1lBQ2IsRUFB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RUFBRSx3QkFBd0IsQ0FBQyxZQUN2Qzs7R0FFVDtnRkFvREQsS0FBSztzQkFESixLQUFLO2dCQVFOLGNBQWM7c0JBRGIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGFkZEljb25zIH0gZnJvbSAnaW9uaWNvbnMnO1xuaW1wb3J0IHsgZ2xvYmUsIGxhbmd1YWdlIH0gZnJvbSAnaW9uaWNvbnMvaWNvbnMnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uLCBjb21iaW5lTGF0ZXN0LCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgTGFuZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9sYW5nLXByb3ZpZGVyL2xhbmctcHJvdmlkZXIuc2VydmljZSc7XG5pbXBvcnQgeyBMYW5nT3B0aW9uIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbGFuZy1wcm92aWRlci90eXBlcyc7XG5pbXBvcnQgeyBQb3BvdmVyU2VsZWN0b3JDb21wb25lbnQgfSBmcm9tICcuLi9wb3BvdmVyLXNlbGVjdG9yL3BvcG92ZXItc2VsZWN0b3IuY29tcG9uZW50JztcbmltcG9ydCB7IFBvcG92ZXJPcHRpb24sIFBvcG92ZXJTZWxlY3Rvck1ldGFkYXRhIH0gZnJvbSAnLi4vcG9wb3Zlci1zZWxlY3Rvci90eXBlcyc7XG5pbXBvcnQgeyBMYW5ndWFnZVNlbGVjdG9yTWV0YWRhdGEgfSBmcm9tICcuL3R5cGVzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmFsLWxhbmd1YWdlLXNlbGVjdG9yJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgUG9wb3ZlclNlbGVjdG9yQ29tcG9uZW50XSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8dmFsLXBvcG92ZXItc2VsZWN0b3IgW3Byb3BzXT1cInBvcG92ZXJQcm9wc1wiIChzZWxlY3Rpb25DaGFuZ2UpPVwib25MYW5ndWFnZUNoYW5nZSgkZXZlbnQpXCI+IDwvdmFsLXBvcG92ZXItc2VsZWN0b3I+XG4gIGAsXG4gIHN0eWxlVXJsczogWycuL2xhbmd1YWdlLXNlbGVjdG9yLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuLyoqXG4gKiB2YWwtbGFuZ3VhZ2Utc2VsZWN0b3JcbiAqXG4gKiBBIHNwZWNpYWxpemVkIGxhbmd1YWdlIHNlbGVjdG9yIGNvbXBvbmVudCB0aGF0IGludGVncmF0ZXMgd2l0aCB0aGUgTGFuZ1NlcnZpY2UuXG4gKiBVc2VzIHRoZSBwb3BvdmVyLXNlbGVjdG9yIGNvbXBvbmVudCBpbnRlcm5hbGx5IGFuZCBwcm92aWRlcyBsYW5ndWFnZS1zcGVjaWZpYyBmdW5jdGlvbmFsaXR5LlxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBCYXNpYyB1c2FnZSAoYXV0by1kZXRlY3RzIGxhbmd1YWdlcyBmcm9tIExhbmdTZXJ2aWNlKVxuICogPHZhbC1sYW5ndWFnZS1zZWxlY3RvclxuICogICBbcHJvcHNdPVwieyBzaG93TGFiZWw6IHRydWUsIHNob3dGbGFnczogdHJ1ZSB9XCI+XG4gKiA8L3ZhbC1sYW5ndWFnZS1zZWxlY3Rvcj5cbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQ3VzdG9tIGNvbmZpZ3VyYXRpb25cbiAqIGNvbnN0IGxhbmd1YWdlUHJvcHM6IExhbmd1YWdlU2VsZWN0b3JNZXRhZGF0YSA9IHtcbiAqICAgc2hvd0xhYmVsOiB0cnVlLFxuICogICBsYWJlbDogJ0Nob29zZSBMYW5ndWFnZScsXG4gKiAgIHNob3dGbGFnczogdHJ1ZSxcbiAqICAgY29sb3I6ICdwcmltYXJ5JyxcbiAqICAgc2l6ZTogJ2xhcmdlJyxcbiAqICAgZmlsbDogJ291dGxpbmUnLFxuICogICBjdXN0b21MYW5ndWFnZU5hbWVzOiB7XG4gKiAgICAgJ2VzJzogJ0VzcGHDsW9sJyxcbiAqICAgICAnZW4nOiAnRW5nbGlzaCcsXG4gKiAgICAgJ2ZyJzogJ0ZyYW7Dp2FpcydcbiAqICAgfVxuICogfTtcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gV2l0aCByZWFjdGl2ZSBjb250ZW50XG4gKiBjb25zdCBsYW5ndWFnZVByb3BzOiBMYW5ndWFnZVNlbGVjdG9yTWV0YWRhdGEgPSB7XG4gKiAgIHNob3dMYWJlbDogdHJ1ZSxcbiAqICAgbGFiZWxDb25maWc6IHtcbiAqICAgICBjbGFzc05hbWU6ICdteUNvbXBvbmVudCcsXG4gKiAgICAga2V5OiAnbGFuZ3VhZ2VMYWJlbCcsXG4gKiAgICAgZmFsbGJhY2s6ICdMYW5ndWFnZSdcbiAqICAgfSxcbiAqICAgY29sb3I6ICd0ZXJ0aWFyeSdcbiAqIH07XG4gKlxuICogQGlucHV0IHByb3BzOiBMYW5ndWFnZVNlbGVjdG9yTWV0YWRhdGEgLSBDb25maWd1cmF0aW9uIGZvciB0aGUgbGFuZ3VhZ2Ugc2VsZWN0b3JcbiAqIEBvdXRwdXQgbGFuZ3VhZ2VDaGFuZ2U6IEV2ZW50RW1pdHRlcjxzdHJpbmc+IC0gRW1pdHRlZCB3aGVuIGxhbmd1YWdlIGNoYW5nZXNcbiAqL1xuZXhwb3J0IGNsYXNzIExhbmd1YWdlU2VsZWN0b3JDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIC8qKlxuICAgKiBMYW5ndWFnZSBzZWxlY3RvciBjb25maWd1cmF0aW9uIG9iamVjdC5cbiAgICogQHR5cGUge0xhbmd1YWdlU2VsZWN0b3JNZXRhZGF0YX1cbiAgICovXG4gIEBJbnB1dCgpXG4gIHByb3BzOiBMYW5ndWFnZVNlbGVjdG9yTWV0YWRhdGEgPSB7fTtcblxuICAvKipcbiAgICogRXZlbnQgZW1pdHRlZCB3aGVuIHRoZSBsYW5ndWFnZSBzZWxlY3Rpb24gY2hhbmdlcy5cbiAgICogRW1pdHMgdGhlIHNlbGVjdGVkIGxhbmd1YWdlIGNvZGUuXG4gICAqL1xuICBAT3V0cHV0KClcbiAgbGFuZ3VhZ2VDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblxuICAvKiogUG9wb3ZlciBzZWxlY3RvciBjb25maWd1cmF0aW9uICovXG4gIHBvcG92ZXJQcm9wczogUG9wb3ZlclNlbGVjdG9yTWV0YWRhdGE7XG5cbiAgLyoqIEN1cnJlbnQgbGFuZ3VhZ2Ugb2JzZXJ2YWJsZSAqL1xuICBjdXJyZW50TGFuZ3VhZ2UkOiBPYnNlcnZhYmxlPExhbmdPcHRpb24+O1xuXG4gIC8qKiBBdmFpbGFibGUgbGFuZ3VhZ2VzIG9ic2VydmFibGUgKi9cbiAgYXZhaWxhYmxlTGFuZ3VhZ2VzJDogT2JzZXJ2YWJsZTxMYW5nT3B0aW9uW10+O1xuXG4gIC8qKiBMYWJlbCBvYnNlcnZhYmxlIGZvciByZWFjdGl2ZSBjb250ZW50ICovXG4gIGxhYmVsJDogT2JzZXJ2YWJsZTxzdHJpbmc+O1xuXG4gIHByaXZhdGUgc3Vic2NyaXB0aW9ucyA9IG5ldyBTdWJzY3JpcHRpb24oKTtcblxuICAvKiogRGVmYXVsdCBsYW5ndWFnZSBkaXNwbGF5IG5hbWVzICovXG4gIHByaXZhdGUgcmVhZG9ubHkgZGVmYXVsdExhbmd1YWdlTmFtZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgZXM6ICdFc3Bhw7FvbCcsXG4gICAgZW46ICdFbmdsaXNoJyxcbiAgICBmcjogJ0ZyYW7Dp2FpcycsXG4gICAgZGU6ICdEZXV0c2NoJyxcbiAgICBwdDogJ1BvcnR1Z3XDqnMnLFxuICAgIGl0OiAnSXRhbGlhbm8nLFxuICAgIHpoOiAn5Lit5paHJyxcbiAgICBqYTogJ+aXpeacrOiqnicsXG4gICAga286ICftlZzqta3slrQnLFxuICAgIHJ1OiAn0KDRg9GB0YHQutC40LknLFxuICAgIGFyOiAn2KfZhNi52LHYqNmK2KknLFxuICB9O1xuXG4gIC8qKiBEZWZhdWx0IGZsYWcgaWNvbnMgZm9yIGxhbmd1YWdlcyAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGRlZmF1bHRMYW5ndWFnZUZsYWdzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgIGVzOiAn8J+HqvCfh7gnLFxuICAgIGVuOiAn8J+HuvCfh7gnLFxuICAgIGZyOiAn8J+Hq/Cfh7cnLFxuICAgIGRlOiAn8J+HqfCfh6onLFxuICAgIHB0OiAn8J+HtfCfh7knLFxuICAgIGl0OiAn8J+HrvCfh7knLFxuICAgIHpoOiAn8J+HqPCfh7MnLFxuICAgIGphOiAn8J+Hr/Cfh7UnLFxuICAgIGtvOiAn8J+HsPCfh7cnLFxuICAgIHJ1OiAn8J+Ht/Cfh7onLFxuICAgIGFyOiAn8J+HuPCfh6YnLFxuICB9O1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgbGFuZ1NlcnZpY2U6IExhbmdTZXJ2aWNlKSB7XG4gICAgLy8gUmVnaXN0ZXIgcmVxdWlyZWQgaWNvbnNcbiAgICBhZGRJY29ucyh7IGxhbmd1YWdlLCBnbG9iZSB9KTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuaW5pdGlhbGl6ZUxhbmd1YWdlU3RhdGUoKTtcbiAgICB0aGlzLmluaXRpYWxpemVMYWJlbCgpO1xuICAgIHRoaXMuaW5pdGlhbGl6ZVBvcG92ZXJQcm9wcygpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwcml2YXRlIGluaXRpYWxpemVMYW5ndWFnZVN0YXRlKCkge1xuICAgIC8vIEdldCBjdXJyZW50IGxhbmd1YWdlIGFuZCBhdmFpbGFibGUgbGFuZ3VhZ2VzIGZyb20gTGFuZ1NlcnZpY2VcbiAgICB0aGlzLmN1cnJlbnRMYW5ndWFnZSQgPSB0aGlzLmxhbmdTZXJ2aWNlLmN1cnJlbnRMYW5nJDtcbiAgICB0aGlzLmF2YWlsYWJsZUxhbmd1YWdlcyQgPSB0aGlzLmN1cnJlbnRMYW5ndWFnZSQucGlwZShcbiAgICAgIG1hcCgoKSA9PiB0aGlzLnByb3BzLmF2YWlsYWJsZUxhbmd1YWdlcyB8fCB0aGlzLmxhbmdTZXJ2aWNlLmF2YWlsYWJsZUxhbmdzKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGluaXRpYWxpemVMYWJlbCgpIHtcbiAgICAvLyBJbml0aWFsaXplIGxhYmVsIG9ic2VydmFibGUgYmFzZWQgb24gY29uZmlndXJhdGlvblxuICAgIGlmICh0aGlzLnByb3BzLmxhYmVsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIFN0YXRpYyBsYWJlbFxuICAgICAgdGhpcy5sYWJlbCQgPSBvZih0aGlzLnByb3BzLmxhYmVsKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMucHJvcHMubGFiZWxDb25maWcpIHtcbiAgICAgIC8vIFJlYWN0aXZlIGxhYmVsXG4gICAgICB0aGlzLmxhYmVsJCA9IHRoaXMubGFuZ1NlcnZpY2UuZ2V0Q29udGVudChcbiAgICAgICAgdGhpcy5wcm9wcy5sYWJlbENvbmZpZy5jbGFzc05hbWUgfHwgJ19nbG9iYWwnLFxuICAgICAgICB0aGlzLnByb3BzLmxhYmVsQ29uZmlnLmtleSxcbiAgICAgICAgdGhpcy5wcm9wcy5sYWJlbENvbmZpZy5mYWxsYmFjayB8fCAnTGFuZ3VhZ2UnXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBEZWZhdWx0IGxhYmVsIGZyb20gZ2xvYmFsIGNvbnRlbnRcbiAgICAgIHRoaXMubGFiZWwkID0gdGhpcy5sYW5nU2VydmljZS5nZXRDb250ZW50KCdfZ2xvYmFsJywgJ2xhbmd1YWdlJywgJ0lkaW9tYScpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZVBvcG92ZXJQcm9wcygpIHtcbiAgICAvLyBTdWJzY3JpYmUgdG8gbGFuZ3VhZ2Ugc3RhdGUgY2hhbmdlcyBhbmQgY29udGVudCBjaGFuZ2VzIHRvIHVwZGF0ZSBwb3BvdmVyIHByb3BzXG4gICAgY29uc3QgbGFuZ3VhZ2VTdWJzY3JpcHRpb24gPSBjb21iaW5lTGF0ZXN0KFtcbiAgICAgIHRoaXMuYXZhaWxhYmxlTGFuZ3VhZ2VzJCxcbiAgICAgIHRoaXMuY3VycmVudExhbmd1YWdlJCxcbiAgICAgIHRoaXMubGFuZ1NlcnZpY2UuY3VycmVudExhbmckLCAvLyBUaGlzIHdpbGwgdHJpZ2dlciB1cGRhdGVzIHdoZW4gbGFuZ3VhZ2UgY2hhbmdlc1xuICAgIF0pLnN1YnNjcmliZSgoW2F2YWlsYWJsZUxhbmd1YWdlcywgY3VycmVudExhbmd1YWdlXSkgPT4ge1xuICAgICAgdGhpcy51cGRhdGVQb3BvdmVyUHJvcHMoYXZhaWxhYmxlTGFuZ3VhZ2VzLCBjdXJyZW50TGFuZ3VhZ2UpO1xuICAgIH0pO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQobGFuZ3VhZ2VTdWJzY3JpcHRpb24pO1xuXG4gICAgLy8gU3Vic2NyaWJlIHRvIGxhYmVsIGNoYW5nZXNcbiAgICBjb25zdCBsYWJlbFN1YnNjcmlwdGlvbiA9IHRoaXMubGFiZWwkLnN1YnNjcmliZShsYWJlbCA9PiB7XG4gICAgICBpZiAodGhpcy5wb3BvdmVyUHJvcHMpIHtcbiAgICAgICAgdGhpcy5wb3BvdmVyUHJvcHMgPSB7XG4gICAgICAgICAgLi4udGhpcy5wb3BvdmVyUHJvcHMsXG4gICAgICAgICAgbGFiZWw6IHRoaXMucHJvcHMuc2hvd0xhYmVsICE9PSBmYWxzZSA/IGxhYmVsIDogdW5kZWZpbmVkLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQobGFiZWxTdWJzY3JpcHRpb24pO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVQb3BvdmVyUHJvcHMoYXZhaWxhYmxlTGFuZ3VhZ2VzOiBMYW5nT3B0aW9uW10sIGN1cnJlbnRMYW5ndWFnZTogTGFuZ09wdGlvbikge1xuICAgIC8vIENvbnZlcnQgbGFuZ3VhZ2UgY29kZXMgdG8gcG9wb3ZlciBvcHRpb25zXG4gICAgY29uc3Qgb3B0aW9uczogUG9wb3Zlck9wdGlvbltdID0gYXZhaWxhYmxlTGFuZ3VhZ2VzLm1hcChsYW5nID0+ICh7XG4gICAgICB2YWx1ZTogbGFuZyxcbiAgICAgIGxhYmVsOiB0aGlzLmdldExhbmd1YWdlRGlzcGxheU5hbWUobGFuZyksXG4gICAgICBpY29uOiB0aGlzLnByb3BzLnNob3dGbGFncyA/IHVuZGVmaW5lZCA6IHVuZGVmaW5lZCwgLy8gV2UnbGwgdXNlIHRleHQgZmxhZ3MgaW5zdGVhZFxuICAgIH0pKTtcblxuICAgIC8vIENyZWF0ZSBwb3BvdmVyIGNvbmZpZ3VyYXRpb25cbiAgICB0aGlzLnBvcG92ZXJQcm9wcyA9IHtcbiAgICAgIG9wdGlvbnMsXG4gICAgICBzZWxlY3RlZFZhbHVlOiBjdXJyZW50TGFuZ3VhZ2UsXG4gICAgICBsYWJlbDogdGhpcy5wcm9wcy5zaG93TGFiZWwgIT09IGZhbHNlID8gJycgOiB1bmRlZmluZWQsIC8vIFdpbGwgYmUgc2V0IGJ5IGxhYmVsIHN1YnNjcmlwdGlvblxuICAgICAgaWNvbjogJ2xhbmd1YWdlJyxcbiAgICAgIHBsYWNlaG9sZGVyOiAnU2VsZWNjaW9uYXIgaWRpb21hLi4uJyxcbiAgICAgIGNvbG9yOiB0aGlzLnByb3BzLmNvbG9yIHx8ICdtZWRpdW0nLFxuICAgICAgc2l6ZTogdGhpcy5wcm9wcy5zaXplIHx8ICdkZWZhdWx0JyxcbiAgICAgIGZpbGw6IHRoaXMucHJvcHMuZmlsbCB8fCAnb3V0bGluZScsXG4gICAgICBzaGFwZTogdGhpcy5wcm9wcy5zaGFwZSxcbiAgICAgIGV4cGFuZDogdGhpcy5wcm9wcy5leHBhbmQsXG4gICAgICBkaXNhYmxlZDogdGhpcy5wcm9wcy5kaXNhYmxlZCB8fCBmYWxzZSxcbiAgICAgIGludGVyZmFjZTogJ3BvcG92ZXInLFxuICAgICAgc2hvd0NoZWNrbWFyazogdHJ1ZSxcbiAgICAgIG11bHRpcGxlOiBmYWxzZSxcbiAgICAgIGNhbmNlbFRleHQ6ICdDYW5jZWxhcicsXG4gICAgICBva1RleHQ6ICdBY2VwdGFyJyxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRMYW5ndWFnZURpc3BsYXlOYW1lKGxhbmd1YWdlQ29kZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAvLyBVc2UgY3VzdG9tIG5hbWVzIGlmIHByb3ZpZGVkXG4gICAgaWYgKHRoaXMucHJvcHMuY3VzdG9tTGFuZ3VhZ2VOYW1lcz8uW2xhbmd1YWdlQ29kZV0pIHtcbiAgICAgIGNvbnN0IGN1c3RvbU5hbWUgPSB0aGlzLnByb3BzLmN1c3RvbUxhbmd1YWdlTmFtZXNbbGFuZ3VhZ2VDb2RlXTtcbiAgICAgIGNvbnN0IGZsYWcgPSB0aGlzLnByb3BzLnNob3dGbGFncyA/IHRoaXMuZGVmYXVsdExhbmd1YWdlRmxhZ3NbbGFuZ3VhZ2VDb2RlXSA6ICcnO1xuICAgICAgcmV0dXJuIGZsYWcgPyBgJHtmbGFnfSAke2N1c3RvbU5hbWV9YCA6IGN1c3RvbU5hbWU7XG4gICAgfVxuXG4gICAgLy8gVXNlIHJlYWN0aXZlIGNvbnRlbnQgZm9yIHRyYW5zbGF0ZWQgbGFuZ3VhZ2UgbmFtZXNcbiAgICAvLyBOb3RlOiBUaGlzIHdpbGwgdXNlIHRoZSBjdXJyZW50IGxhbmd1YWdlIHNpbmNlIGdldExhbmd1YWdlRGlzcGxheU5hbWUgaXMgY2FsbGVkIGR1cmluZyBzdWJzY3JpcHRpb24gdXBkYXRlc1xuICAgIGNvbnN0IHRyYW5zbGF0ZWROYW1lID0gdGhpcy5sYW5nU2VydmljZS5nZXRUZXh0KCdfZ2xvYmFsJywgYGxhbmd1YWdlTmFtZV8ke2xhbmd1YWdlQ29kZX1gKTtcbiAgICBjb25zdCBmbGFnID0gdGhpcy5wcm9wcy5zaG93RmxhZ3MgPyB0aGlzLmRlZmF1bHRMYW5ndWFnZUZsYWdzW2xhbmd1YWdlQ29kZV0gOiAnJztcblxuICAgIGlmICh0cmFuc2xhdGVkTmFtZSAmJiB0cmFuc2xhdGVkTmFtZSAhPT0gYGxhbmd1YWdlTmFtZV8ke2xhbmd1YWdlQ29kZX1gKSB7XG4gICAgICByZXR1cm4gZmxhZyA/IGAke2ZsYWd9ICR7dHJhbnNsYXRlZE5hbWV9YCA6IHRyYW5zbGF0ZWROYW1lO1xuICAgIH1cblxuICAgIC8vIEZhbGxiYWNrIHRvIGRlZmF1bHQgbmFtZXMsIHRoZW4gdG8gY29kZVxuICAgIGNvbnN0IGRlZmF1bHROYW1lID0gdGhpcy5kZWZhdWx0TGFuZ3VhZ2VOYW1lc1tsYW5ndWFnZUNvZGVdIHx8IGxhbmd1YWdlQ29kZS50b1VwcGVyQ2FzZSgpO1xuICAgIHJldHVybiBmbGFnID8gYCR7ZmxhZ30gJHtkZWZhdWx0TmFtZX1gIDogZGVmYXVsdE5hbWU7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIGxhbmd1YWdlIHNlbGVjdGlvbiBjaGFuZ2UuXG4gICAqIEBwYXJhbSBzZWxlY3RlZExhbmd1YWdlIC0gVGhlIHNlbGVjdGVkIGxhbmd1YWdlIGNvZGUocylcbiAgICovXG4gIG9uTGFuZ3VhZ2VDaGFuZ2Uoc2VsZWN0ZWRMYW5ndWFnZTogc3RyaW5nIHwgc3RyaW5nW10pIHtcbiAgICBpZiAodHlwZW9mIHNlbGVjdGVkTGFuZ3VhZ2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICAvLyBVcGRhdGUgdGhlIGxhbmd1YWdlIHNlcnZpY2VcbiAgICAgIHRoaXMubGFuZ1NlcnZpY2Uuc2V0TGFuZyhzZWxlY3RlZExhbmd1YWdlKTtcblxuICAgICAgLy8gRW1pdCB0aGUgY2hhbmdlIGV2ZW50XG4gICAgICB0aGlzLmxhbmd1YWdlQ2hhbmdlLmVtaXQoc2VsZWN0ZWRMYW5ndWFnZSk7XG4gICAgfVxuICB9XG59XG4iXX0=
@@ -280,4 +280,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
280
280
  }], onSelectChange: [{
281
281
  type: Output
282
282
  }] } });
283
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0ZWNoLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL29yZ2FuaXNtcy9mb3JtL2Zvcm0uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFjLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNGLE9BQU8sRUFBdUMsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUxRixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDcEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDekUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDekUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHFEQUFxRCxDQUFDO0FBQzNGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG1EQUFtRCxDQUFDO0FBQ3hGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHVEQUF1RCxDQUFDO0FBQzlGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBQ3JGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG1EQUFtRCxDQUFDO0FBQ3hGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBQ3JGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUNwRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUNyRixPQUFPLEVB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bUIsNERBQ25CLG9CQUFvQixzR0FDcEIsZ0JBQWdCLDJFQUNoQixhQUFhLHdFQUNiLHFCQUFxQixpRkFDckIsa0JBQWtCLDhFQUNsQixrQkFBa0IsOEVBQ2xCLGtCQUFrQiw4RUFDbEIsbUJBQW1CLCtFQUNuQixvQkFBb0IsZ0ZBQ3BCLG1CQUFtQiwrRUFDbkIsc0JBQXNCLGtGQUN0QixpQkFBaUIsNkVBQ2pCLHFCQUFxQix1SkFDckIsdUJBQXVCOzs0RkFzRWQsYUFBYTtrQkE3RnpCLFNBQVM7K0JBQ0UsVUFBVSxjQUNSLElBQUksV0FDUDt3QkFDUCxZQUFZO3dCQUNaLG1CQUFtQjt3QkFDbkIsZ0JBQWdCO3dCQUNoQixjQUFjO3dCQUNkLGtCQUFrQjt3QkFDbEIsbUJBQW1CO3dCQUNuQixvQkFBb0I7d0JBQ3BCLGdCQUFnQjt3QkFDaEIsYUFBYTt3QkFDYixxQkFBcUI7d0JBQ3JCLGtCQUFrQjt3QkFDbEIsa0JBQWtCO3dCQUNsQixrQkFBa0I7d0JBQ2xCLG1CQUFtQjt3QkFDbkIsb0JBQW9CO3dCQUNwQixtQkFBbUI7d0JBQ25CLHNCQUFzQjt3QkFDdEIsaUJBQWlCO3dCQUNqQixxQkFBcUI7d0JBQ3JCLHVCQUF1QjtxQkFDeEIsWUFDUzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpRVQ7eUdBS0QsS0FBSztzQkFESixLQUFLO2dCQUlOLFFBQVE7c0JBRFAsTUFBTTtnQkFJUCxTQUFTO3NCQURSLE1BQU07Z0JBSVAsY0FBYztzQkFEYixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBpc0F0RW5kIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL3V0aWxzL2RvbSc7XG5pbXBvcnQgeyBEaXNwbGF5Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYXRvbXMvZGlzcGxheS9kaXNwbGF5LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEaXZpZGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYXRvbXMvZGl2aWRlci9kaXZpZGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUaXRsZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2F0b21zL3RpdGxlL3RpdGxlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBCdXR0b25Hcm91cENvbXBvbmVudCB9IGZyb20gJy4uLy4uL21vbGVjdWxlcy9idXR0b24tZ3JvdXAvYnV0dG9uLWdyb3VwLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDaGVja0lucHV0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vbW9sZWN1bGVzL2NoZWNrLWlucHV0L2NoZWNrLWlucHV0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDb21tZW50SW5wdXRDb21wb25lbnQgfSBmcm9tICcuLi8uLi9tb2xlY3VsZXMvY29tbWVudC1pbnB1dC9jb21tZW50LWlucHV0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEYXRlSW5wdXRDb21wb25lbnQgfSBmcm9tICcuLi8uLi9tb2xlY3VsZXMvZGF0ZS1pbnB1dC9kYXRlLWlucHV0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBFbWFpbElucHV0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vbW9sZWN1bGVzL2VtYWlsLWlucHV0L2VtYWlsLWlucHV0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBGaWxlSW5wdXRDb21wb25lbnQgfSBmcm9tICcuLi8uLi9tb2xlY3VsZXMvZmlsZS1pbnB1dC9maWxlLWlucHV0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBIaW50Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vbW9sZWN1bGVzL2hpbnQvaGludC5jb21wb25lbnQnO1xuaW1wb3J0IHsgSG91cklucHV0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vbW9sZWN1bGVzL2hvdXItaW5wdXQvaG91ci1pbnB1dC5jb21wb25lbnQnO1xuaW1wb3J0IHsgTnVtYmVySW5wdXRDb21wb25lbnQgfSBmcm9tICcuLi8uLi9tb2xlY3VsZXMvbnVtYmVyLWlucHV0L251bWJlci1pbnB1dC5jb21wb25lbnQnO1xuaW1wb3J0IHsgUGFzc3dvcmRJbnB1dENvbXBvbmVudCB9IGZyb20gJy4uLy4uL21vbGVjdWxlcy9wYXNzd29yZC1pbnB1dC9wYXNzd29yZC1pbnB1dC5jb21wb25lbnQnO1xuaW1wb3J0IHsgUGluSW5wdXRDb21wb25lbnQgfSBmcm9tICcuLi8uLi9tb2xlY3VsZXMvcGluLWlucHV0L3Bpbi1pbnB1dC5jb21wb25lbnQnO1xuaW1wb3J0IHsgUmFkaW9JbnB1dENvbXBvbmVudCB9IGZyb20gJy4uLy4uL21vbGVjdWxlcy9yYWRpby1pbnB1dC9yYWRpby1pbnB1dC5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2VhcmNoU2VsZWN0b3JDb21wb25lbnQgfSBmcm9tICcuLi8uLi9tb2xlY3VsZXMvc2VsZWN0LWlucHV0L3NlbGVjdC1pbnB1dC5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2VsZWN0U2VhcmNoQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vbW9sZWN1bGVzL3NlbGVjdC1zZWFyY2gvc2VsZWN0LXNlYXJjaC5jb21wb25lbnQnO1xuaW1wb3J0IHsgVGV4dElucHV0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vbW9sZWN1bGVzL3RleHQtaW5wdXQvdGV4dC1pbnB1dC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQnV0dG9uTWV0YWRhdGEsIENvbXBvbmVudFN0YXRlcywgRm9ybU1ldGFkYXRhLCBGb3JtU3VibWl0LCBJbnB1dE1ldGFkYXRhLCBJbnB1dFR5cGUgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbC1mb3JtJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgIERpc3BsYXlDb21wb25lbnQsXG4gICAgVGl0bGVDb21wb25lbnQsXG4gICAgVGV4dElucHV0Q29tcG9uZW50LFxuICAgIENoZWNrSW5wdXRDb21wb25lbnQsXG4gICAgQnV0dG9uR3JvdXBDb21wb25lbnQsXG4gICAgRGl2aWRlckNvbXBvbmVudCxcbiAgICBIaW50Q29tcG9uZW50LFxuICAgIENvbW1lbnRJbnB1dENvbXBvbmVudCxcbiAgICBEYXRlSW5wdXRDb21wb25lbnQsXG4gICAgRmlsZUlucHV0Q29tcG9uZW50LFxuICAgIEhvdXJJbnB1dENvbXBvbmVudCxcbiAgICBFbWFpbElucHV0Q29tcG9uZW50LFxuICAgIE51bWJlcklucHV0Q29tcG9uZW50LFxuICAgIFJhZGlvSW5wdXRDb21wb25lbnQsXG4gICAgUGFzc3dvcmRJbnB1dENvbXBvbmVudCxcbiAgICBQaW5JbnB1dENvbXBvbmVudCxcbiAgICBTZWxlY3RTZWFyY2hDb21wb25lbnQsXG4gICAgU2VhcmNoU2VsZWN0b3JDb21wb25lbnQsXG4gIF0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBjbGFzcz1cImNvbnRhaW5lclwiPlxuICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJmb3JtXCI+XG4gICAgICAgIDx2YWwtZGlzcGxheVxuICAgICAgICAgICpuZ0lmPVwicHJvcHMubmFtZVwiXG4gICAgICAgICAgW3Byb3BzXT1cIntcbiAgICAgICAgICAgIGNvbnRlbnQ6IHByb3BzLm5hbWUsXG4gICAgICAgICAgICBjb2xvcjogJ2RhcmsnLFxuICAgICAgICAgICAgc2l6ZTogJ2xhcmdlJyxcbiAgICAgICAgICB9XCJcbiAgICAgICAgPjwvdmFsLWRpc3BsYXk+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uXCIgKm5nRm9yPVwibGV0IHMgb2YgcHJvcHMuc2VjdGlvbnNcIj5cbiAgICAgICAgICA8dmFsLXRpdGxlIFtwcm9wc109XCJ7IGNvbnRlbnQ6IHMubmFtZSwgc2l6ZTogJ2xhcmdlJywgY29sb3I6ICcnLCBib2xkOiBmYWxzZSB9XCI+PC92YWwtdGl0bGU+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0XCIgKm5nRm9yPVwibGV0IGYgb2Ygcy5maWVsZHNcIj5cbiAgICAgICAgICAgIDx2YWwtdGl0bGUgW3Byb3BzXT1cInsgY29udGVudDogZi5sYWJlbCwgc2l6ZTogJ3NtYWxsJywgY29sb3I6ICdkYXJrJywgYm9sZDogZmFsc2UgfVwiPjwvdmFsLXRpdGxlPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImYudHlwZSA9PT0gdHlwZXMuVEVYVFwiPlxuICAgICAgICAgICAgICA8dmFsLXRleHQtaW5wdXQgW3Byb3BzXT1cImdldEZpZWxkUHJvcChmKVwiPjwvdmFsLXRleHQtaW5wdXQ+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmLnR5cGUgPT09IHR5cGVzLkNIRUNLXCI+XG4gICAgICAgICAgICAgIDx2YWwtY2hlY2staW5wdXQ+PC92YWwtY2hlY2staW5wdXQ+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmLnR5cGUgPT09IHR5cGVzLkNPTU1FTlRcIj5cbiAgICAgICAgICAgICAgPHZhbC1jb21tZW50LWlucHV0IFtwcm9wc109XCJnZXRGaWVsZFByb3AoZilcIj48L3ZhbC1jb21tZW50LWlucHV0PlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZi50eXBlID09PSB0eXBlcy5EQVRFXCI+XG4gICAgICAgICAgICAgIDx2YWwtZGF0ZS1pbnB1dCBbcHJvcHNdPVwiZ2V0RmllbGRQcm9wKGYpXCI+PC92YWwtZGF0ZS1pbnB1dD5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImYudHlwZSA9PT0gdHlwZXMuRU1BSUxcIj5cbiAgICAgICAgICAgICAgPHZhbC1lbWFpbC1pbnB1dCBbcHJvcHNdPVwiZ2V0RmllbGRQcm9wKGYpXCI+PC92YWwtZW1haWwtaW5wdXQ+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmLnR5cGUgPT09IHR5cGVzLkZJTEVcIj5cbiAgICAgICAgICAgICAgPHZhbC1maWxlLWlucHV0IFtwcm9wc109XCJnZXRGaWVsZFByb3AoZilcIj48L3ZhbC1maWxlLWlucHV0PlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZi50eXBlID09PSB0eXBlcy5IT1VSXCI+XG4gICAgICAgICAgICAgIDx2YWwtaG91ci1pbnB1dCBbcHJvcHNdPVwiZ2V0RmllbGRQcm9wKGYpXCI+PC92YWwtaG91ci1pbnB1dD5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImYudHlwZSA9PT0gdHlwZXMuTlVNQkVSXCI+XG4gICAgICAgICAgICAgIDx2YWwtbnVtYmVyLWlucHV0IFtwcm9wc109XCJnZXRGaWVsZFByb3AoZilcIj48L3ZhbC1udW1iZXItaW5wdXQ+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmLnR5cGUgPT09IHR5cGVzLlBBU1NXT1JEXCI+XG4gICAgICAgICAgICAgIDx2YWwtcGFzc3dvcmQtaW5wdXQgW3Byb3BzXT1cImdldEZpZWxkUHJvcChmKVwiPjwvdmFsLXBhc3N3b3JkLWlucHV0PlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZi50eXBlID09PSB0eXBlcy5QSU5fQ09ERVwiPlxuICAgICAgICAgICAgICA8dmFsLXBpbi1pbnB1dCBbcHJvcHNdPVwiZ2V0RmllbGRQcm9wKGYpXCI+PC92YWwtcGluLWlucHV0PlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZi50eXBlID09PSB0eXBlcy5SQURJT1wiPlxuICAgICAgICAgICAgICA8dmFsLXJhZGlvLWlucHV0IFtwcm9wc109XCJnZXRGaWVsZFByb3AoZilcIj48L3ZhbC1yYWRpby1pbnB1dD5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImYudHlwZSA9PT0gdHlwZXMuU0VMRUNUXCI+XG4gICAgICAgICAgICAgIDx2YWwtc2VsZWN0LWlucHV0IFtwcm9wc109XCJnZXRGaWVsZFByb3AoZilcIj48L3ZhbC1zZWxlY3QtaW5wdXQ+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmLnR5cGUgPT09IHR5cGVzLlNFQVJDSF9TRUxFQ1RcIj5cbiAgICAgICAgICAgICAgPHZhbC1zZWxlY3Qtc2VhcmNoIFtwcm9wc109XCJnZXRGaWVsZFByb3AoZilcIj48L3ZhbC1zZWxlY3Qtc2VhcmNoPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8dmFsLWhpbnQgW3Byb3BzXT1cImdldEZpZWxkUHJvcChmKVwiPjwvdmFsLWhpbnQ+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPHZhbC1kaXZpZGVyIFtwcm9wc109XCJ7IGZpbGw6ICdzb2xpZCcsIHNpemU6ICdtZWRpdW0nLCBjb2xvcjogJ21lZGl1bScgfVwiPjwvdmFsLWRpdmlkZXI+XG4gICAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPHZhbC1idXR0b24tZ3JvdXBcbiAgICAgICAgICBbcHJvcHNdPVwieyBidXR0b25zOiBhY3Rpb25zLCBwb3NpdGlvbjogJ2NlbnRlcicsIGNvbHVtbmVkOiBmYWxzZSB9XCJcbiAgICAgICAgICAob25DbGljayk9XCJzdWJtaXRIYW5kbGVyKCRldmVudClcIlxuICAgICAgICA+PC92YWwtYnV0dG9uLWdyb3VwPlxuICAgICAgPC9mb3JtPlxuICAgIDwvZGl2PlxuICBgLFxuICBzdHlsZVVybHM6IFsnLi9mb3JtLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIEZvcm1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKVxuICBwcm9wczogRm9ybU1ldGFkYXRhO1xuXG4gIEBPdXRwdXQoKVxuICBvblN1Ym1pdCA9IG5ldyBFdmVudEVtaXR0ZXI8Rm9ybVN1Ym1pdD4oKTtcblxuICBAT3V0cHV0KClcbiAgb25JbnZhbGlkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIEBPdXRwdXQoKVxuICBvblNlbGVjdENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8eyBmaWVsZDogc3RyaW5nOyB2YWx1ZTogYW55IH0+KCk7XG5cbiAgZm9ybTogRm9ybUdyb3VwO1xuICB0eXBlcyA9IElucHV0VHlwZTtcbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyLFxuICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZlxuICApIHt9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgY29uc3QgZm9ybUNvbnRyb2xzID0ge307XG4gICAgdGhpcy5wcm9wcy5zZWN0aW9ucy5mb3JFYWNoKHNlY3Rpb24gPT4ge1xuICAgICAgc2VjdGlvbi5maWVsZHMuZm9yRWFjaChmaWVsZCA9PiB7XG4gICAgICAgIGZvcm1Db250cm9sc1tmaWVsZC5uYW1lXSA9IFt1bmRlZmluZWQsIGZpZWxkLnZhbGlkYXRvcnMgfHwgW11dO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgdGhpcy5mb3JtID0gdGhpcy5mYi5ncm91cChmb3JtQ29udHJvbHMpO1xuICAgIHRoaXMucHJvcHMuc2VjdGlvbnMuZm9yRWFjaChzZWN0aW9uID0+IHtcbiAgICAgIHNlY3Rpb24uZmllbGRzXG4gICAgICAgIC5maWx0ZXIoeCA9PiB4LnR5cGUgPT09IHRoaXMudHlwZXMuU0VMRUNUIHx8IHgudHlwZSA9PT0gdGhpcy50eXBlcy5URVhUIHx8IHgudHlwZSA9PT0gdGhpcy50eXBlcy5TRUFSQ0hfU0VMRUNUKVxuICAgICAgICAuZm9yRWFjaChmaWVsZCA9PiB7XG4gICAgICAgICAgdGhpcy50cmFja1NlbGVjdENoYW5nZXMoZmllbGQubmFtZSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgLy8gQ2xlYW51cCBzdWJzY3JpcHRpb25zIHRvIGF2b2lkIG1lbW9yeSBsZWFrc1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKHN1YiA9PiBzdWIudW5zdWJzY3JpYmUoKSk7XG4gIH1cblxuICB0cmFja1NlbGVjdENoYW5nZXMoZmllbGROYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCBjb250cm9sID0gdGhpcy5nZXRDb250cm9sKGZpZWxkTmFtZSk7XG4gICAgY29uc3Qgc3Vic2NyaXB0aW9uID0gY29udHJvbC52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgIHRoaXMub25TZWxlY3RDaGFuZ2UuZW1pdCh7IGZpZWxkOiBmaWVsZE5hbWUsIHZhbHVlIH0pO1xuICAgIH0pO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHN1YnNjcmlwdGlvbik7XG4gIH1cblxuICBhc3luYyBzdWJtaXRIYW5kbGVyKHRva2VuPzogc3RyaW5nKSB7XG4gICAgdGhpcy5vblN1Ym1pdC5lbWl0KHsgZmllbGRzOiB0aGlzLmZvcm0uZ2V0UmF3VmFsdWUoKSwgdG9rZW4gfSk7XG4gIH1cblxuICBnZXRDb250cm9sKGZpZWxkOiBzdHJpbmcpOiBGb3JtQ29udHJvbCB7XG4gICAgcmV0dXJuIHRoaXMuRm9ybS5nZXQoZmllbGQpIGFzIEZvcm1Db250cm9sO1xuICB9XG5cbiAgZ2V0RmllbGRQcm9wKGZpZWxkOiBJbnB1dE1ldGFkYXRhKTogSW5wdXRNZXRhZGF0YSB7XG4gICAgZmllbGQudG9rZW47XG4gICAgaWYgKCFmaWVsZC50b2tlbikge1xuICAgICAgZmllbGQudG9rZW4gPSBgaW5wdXQtJHtmaWVsZC50eXBlfS0ke2ZpZWxkLm5hbWV9YDtcbiAgICB9XG4gICAgY29uc3QgY29udHJvbCA9IHRoaXMuZ2V0Q29udHJvbChmaWVsZC5uYW1lKTtcbiAgICBpZiAoZmllbGQuc3RhdGUgPT09IENvbXBvbmVudFN0YXRlcy5ESVNBQkxFRCkge1xuICAgICAgY29udHJvbC5kaXNhYmxlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnRyb2wuZW5hYmxlKCk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAuLi5maWVsZCxcbiAgICAgIGNvbnRyb2wsXG4gICAgfTtcbiAgfVxuXG4gIGdldCBpc0F0RW5kT2ZGb3JtKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBpc0F0RW5kKHRoaXMuZWxlbWVudFJlZik7XG4gIH1cblxuICBnZXQgRm9ybSgpOiBGb3JtR3JvdXAge1xuICAgIHJldHVybiB0aGlzLmZvcm07XG4gIH1cblxuICBnZXQgRm9ybVN0YXRlKCk6IHsgZm9ybTogRm9ybUdyb3VwOyBkYXRhOiBGb3JtTWV0YWRhdGEgfSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGZvcm06IHRoaXMuRm9ybSxcbiAgICAgIGRhdGE6IHRoaXMucHJvcHMsXG4gICAgfTtcbiAgfVxuXG4gIGdldCBhY3Rpb25zKCk6IEJ1dHRvbk1ldGFkYXRhW10ge1xuICAgIGlmICghdGhpcy5mb3JtKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZm9ybS52YWxpZCkge1xuICAgICAgdGhpcy5wcm9wcy5hY3Rpb25zLnN0YXRlID0gQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQ7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucHJvcHMuc3RhdGUgPT09IENvbXBvbmVudFN0YXRlcy5XT1JLSU5HKSB7XG4gICAgICB0aGlzLnByb3BzLmFjdGlvbnMuc3RhdGUgPSBDb21wb25lbnRTdGF0ZXMuV09SS0lORztcbiAgICB9XG5cbiAgICBpZiAodGhpcy5wcm9wcy5zdGF0ZSA9PT0gQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQpIHtcbiAgICAgIHRoaXMucHJvcHMuYWN0aW9ucy5zdGF0ZSA9IENvbXBvbmVudFN0YXRlcy5FTkFCTEVEO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnByb3BzLnN0YXRlID09PSBDb21wb25lbnRTdGF0ZXMuRElTQUJMRUQpIHtcbiAgICAgIHRoaXMucHJvcHMuYWN0aW9ucy5zdGF0ZSA9IENvbXBvbmVudFN0YXRlcy5ESVNBQkxFRDtcbiAgICB9XG5cbiAgICByZXR1cm4gW3RoaXMucHJvcHMuYWN0aW9uc107XG4gIH1cbn1cbiJdfQ==
283
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0ZWNoLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL29yZ2FuaXNtcy9mb3JtL2Zvcm0uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFjLFlBQVksRUFBVSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25HLE9BQU8sRUFBdUMsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUxRixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDcEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDekUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDekUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHFEQUFxRCxDQUFDO0FBQzNGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG1EQUFtRCxDQUFDO0FBQ3hGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHVEQUF1RCxDQUFDO0FBQzlGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBQ3JGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG1EQUFtRCxDQUFDO0FBQ3hGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBQ3JGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUNwRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUNyRixPQUFPLEVB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bUIsNERBQ25CLG9CQUFvQixzR0FDcEIsZ0JBQWdCLDJFQUNoQixhQUFhLHdFQUNiLHFCQUFxQixpRkFDckIsa0JBQWtCLDhFQUNsQixrQkFBa0IsOEVBQ2xCLGtCQUFrQiw4RUFDbEIsbUJBQW1CLCtFQUNuQixvQkFBb0IsZ0ZBQ3BCLG1CQUFtQiwrRUFDbkIsc0JBQXNCLGtGQUN0QixpQkFBaUIsNkVBQ2pCLHFCQUFxQix1SkFDckIsdUJBQXVCOzs0RkFzRWQsYUFBYTtrQkE3RnpCLFNBQVM7K0JBQ0UsVUFBVSxjQUNSLElBQUksV0FDUDt3QkFDUCxZQUFZO3dCQUNaLG1CQUFtQjt3QkFDbkIsZ0JBQWdCO3dCQUNoQixjQUFjO3dCQUNkLGtCQUFrQjt3QkFDbEIsbUJBQW1CO3dCQUNuQixvQkFBb0I7d0JBQ3BCLGdCQUFnQjt3QkFDaEIsYUFBYTt3QkFDYixxQkFBcUI7d0JBQ3JCLGtCQUFrQjt3QkFDbEIsa0JBQWtCO3dCQUNsQixrQkFBa0I7d0JBQ2xCLG1CQUFtQjt3QkFDbkIsb0JBQW9CO3dCQUNwQixtQkFBbUI7d0JBQ25CLHNCQUFzQjt3QkFDdEIsaUJBQWlCO3dCQUNqQixxQkFBcUI7d0JBQ3JCLHVCQUF1QjtxQkFDeEIsWUFDUzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpRVQ7eUdBS0QsS0FBSztzQkFESixLQUFLO2dCQUlOLFFBQVE7c0JBRFAsTUFBTTtnQkFJUCxTQUFTO3NCQURSLE1BQU07Z0JBSVAsY0FBYztzQkFEYixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBpbmplY3QsIElucHV0LCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGlzQXRFbmQgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvdXRpbHMvZG9tJztcbmltcG9ydCB7IERpc3BsYXlDb21wb25lbnQgfSBmcm9tICcuLi8uLi9hdG9tcy9kaXNwbGF5L2Rpc3BsYXkuY29tcG9uZW50JztcbmltcG9ydCB7IERpdmlkZXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9hdG9tcy9kaXZpZGVyL2RpdmlkZXIuY29tcG9uZW50JztcbmltcG9ydCB7IFRpdGxlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYXRvbXMvdGl0bGUvdGl0bGUuY29tcG9uZW50JztcbmltcG9ydCB7IEJ1dHRvbkdyb3VwQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vbW9sZWN1bGVzL2J1dHRvbi1ncm91cC9idXR0b24tZ3JvdXAuY29tcG9uZW50JztcbmltcG9ydCB7IENoZWNrSW5wdXRDb21wb25lbnQgfSBmcm9tICcuLi8uLi9tb2xlY3VsZXMvY2hlY2staW5wdXQvY2hlY2staW5wdXQuY29tcG9uZW50JztcbmltcG9ydCB7IENvbW1lbnRJbnB1dENvbXBvbmVudCB9IGZyb20gJy4uLy4uL21vbGVjdWxlcy9jb21tZW50LWlucHV0L2NvbW1lbnQtaW5wdXQuY29tcG9uZW50JztcbmltcG9ydCB7IERhdGVJbnB1dENvbXBvbmVudCB9IGZyb20gJy4uLy4uL21vbGVjdWxlcy9kYXRlLWlucHV0L2RhdGUtaW5wdXQuY29tcG9uZW50JztcbmltcG9ydCB7IEVtYWlsSW5wdXRDb21wb25lbnQgfSBmcm9tICcuLi8uLi9tb2xlY3VsZXMvZW1haWwtaW5wdXQvZW1haWwtaW5wdXQuY29tcG9uZW50JztcbmltcG9ydCB7IEZpbGVJbnB1dENvbXBvbmVudCB9IGZyb20gJy4uLy4uL21vbGVjdWxlcy9maWxlLWlucHV0L2ZpbGUtaW5wdXQuY29tcG9uZW50JztcbmltcG9ydCB7IEhpbnRDb21wb25lbnQgfSBmcm9tICcuLi8uLi9tb2xlY3VsZXMvaGludC9oaW50LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBIb3VySW5wdXRDb21wb25lbnQgfSBmcm9tICcuLi8uLi9tb2xlY3VsZXMvaG91ci1pbnB1dC9ob3VyLWlucHV0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBOdW1iZXJJbnB1dENvbXBvbmVudCB9IGZyb20gJy4uLy4uL21vbGVjdWxlcy9udW1iZXItaW5wdXQvbnVtYmVyLWlucHV0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBQYXNzd29yZElucHV0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vbW9sZWN1bGVzL3Bhc3N3b3JkLWlucHV0L3Bhc3N3b3JkLWlucHV0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBQaW5JbnB1dENvbXBvbmVudCB9IGZyb20gJy4uLy4uL21vbGVjdWxlcy9waW4taW5wdXQvcGluLWlucHV0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBSYWRpb0lucHV0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vbW9sZWN1bGVzL3JhZGlvLWlucHV0L3JhZGlvLWlucHV0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTZWFyY2hTZWxlY3RvckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL21vbGVjdWxlcy9zZWxlY3QtaW5wdXQvc2VsZWN0LWlucHV0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTZWxlY3RTZWFyY2hDb21wb25lbnQgfSBmcm9tICcuLi8uLi9tb2xlY3VsZXMvc2VsZWN0LXNlYXJjaC9zZWxlY3Qtc2VhcmNoLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUZXh0SW5wdXRDb21wb25lbnQgfSBmcm9tICcuLi8uLi9tb2xlY3VsZXMvdGV4dC1pbnB1dC90ZXh0LWlucHV0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBCdXR0b25NZXRhZGF0YSwgQ29tcG9uZW50U3RhdGVzLCBGb3JtTWV0YWRhdGEsIEZvcm1TdWJtaXQsIElucHV0TWV0YWRhdGEsIElucHV0VHlwZSB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IExhbmdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbGFuZy1wcm92aWRlci9sYW5nLXByb3ZpZGVyLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2YWwtZm9ybScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICBEaXNwbGF5Q29tcG9uZW50LFxuICAgIFRpdGxlQ29tcG9uZW50LFxuICAgIFRleHRJbnB1dENvbXBvbmVudCxcbiAgICBDaGVja0lucHV0Q29tcG9uZW50LFxuICAgIEJ1dHRvbkdyb3VwQ29tcG9uZW50LFxuICAgIERpdmlkZXJDb21wb25lbnQsXG4gICAgSGludENvbXBvbmVudCxcbiAgICBDb21tZW50SW5wdXRDb21wb25lbnQsXG4gICAgRGF0ZUlucHV0Q29tcG9uZW50LFxuICAgIEZpbGVJbnB1dENvbXBvbmVudCxcbiAgICBIb3VySW5wdXRDb21wb25lbnQsXG4gICAgRW1haWxJbnB1dENvbXBvbmVudCxcbiAgICBOdW1iZXJJbnB1dENvbXBvbmVudCxcbiAgICBSYWRpb0lucHV0Q29tcG9uZW50LFxuICAgIFBhc3N3b3JkSW5wdXRDb21wb25lbnQsXG4gICAgUGluSW5wdXRDb21wb25lbnQsXG4gICAgU2VsZWN0U2VhcmNoQ29tcG9uZW50LFxuICAgIFNlYXJjaFNlbGVjdG9yQ29tcG9uZW50LFxuICBdLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXJcIj5cbiAgICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwiZm9ybVwiPlxuICAgICAgICA8dmFsLWRpc3BsYXlcbiAgICAgICAgICAqbmdJZj1cInByb3BzLm5hbWVcIlxuICAgICAgICAgIFtwcm9wc109XCJ7XG4gICAgICAgICAgICBjb250ZW50OiBwcm9wcy5uYW1lLFxuICAgICAgICAgICAgY29sb3I6ICdkYXJrJyxcbiAgICAgICAgICAgIHNpemU6ICdsYXJnZScsXG4gICAgICAgICAgfVwiXG4gICAgICAgID48L3ZhbC1kaXNwbGF5PlxuICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvblwiICpuZ0Zvcj1cImxldCBzIG9mIHByb3BzLnNlY3Rpb25zXCI+XG4gICAgICAgICAgPHZhbC10aXRsZSBbcHJvcHNdPVwieyBjb250ZW50OiBzLm5hbWUsIHNpemU6ICdsYXJnZScsIGNvbG9yOiAnJywgYm9sZDogZmFsc2UgfVwiPjwvdmFsLXRpdGxlPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dFwiICpuZ0Zvcj1cImxldCBmIG9mIHMuZmllbGRzXCI+XG4gICAgICAgICAgICA8dmFsLXRpdGxlIFtwcm9wc109XCJ7IGNvbnRlbnQ6IGYubGFiZWwsIHNpemU6ICdzbWFsbCcsIGNvbG9yOiAnZGFyaycsIGJvbGQ6IGZhbHNlIH1cIj48L3ZhbC10aXRsZT5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmLnR5cGUgPT09IHR5cGVzLlRFWFRcIj5cbiAgICAgICAgICAgICAgPHZhbC10ZXh0LWlucHV0IFtwcm9wc109XCJnZXRGaWVsZFByb3AoZilcIj48L3ZhbC10ZXh0LWlucHV0PlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZi50eXBlID09PSB0eXBlcy5DSEVDS1wiPlxuICAgICAgICAgICAgICA8dmFsLWNoZWNrLWlucHV0PjwvdmFsLWNoZWNrLWlucHV0PlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZi50eXBlID09PSB0eXBlcy5DT01NRU5UXCI+XG4gICAgICAgICAgICAgIDx2YWwtY29tbWVudC1pbnB1dCBbcHJvcHNdPVwiZ2V0RmllbGRQcm9wKGYpXCI+PC92YWwtY29tbWVudC1pbnB1dD5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImYudHlwZSA9PT0gdHlwZXMuREFURVwiPlxuICAgICAgICAgICAgICA8dmFsLWRhdGUtaW5wdXQgW3Byb3BzXT1cImdldEZpZWxkUHJvcChmKVwiPjwvdmFsLWRhdGUtaW5wdXQ+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmLnR5cGUgPT09IHR5cGVzLkVNQUlMXCI+XG4gICAgICAgICAgICAgIDx2YWwtZW1haWwtaW5wdXQgW3Byb3BzXT1cImdldEZpZWxkUHJvcChmKVwiPjwvdmFsLWVtYWlsLWlucHV0PlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZi50eXBlID09PSB0eXBlcy5GSUxFXCI+XG4gICAgICAgICAgICAgIDx2YWwtZmlsZS1pbnB1dCBbcHJvcHNdPVwiZ2V0RmllbGRQcm9wKGYpXCI+PC92YWwtZmlsZS1pbnB1dD5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImYudHlwZSA9PT0gdHlwZXMuSE9VUlwiPlxuICAgICAgICAgICAgICA8dmFsLWhvdXItaW5wdXQgW3Byb3BzXT1cImdldEZpZWxkUHJvcChmKVwiPjwvdmFsLWhvdXItaW5wdXQ+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmLnR5cGUgPT09IHR5cGVzLk5VTUJFUlwiPlxuICAgICAgICAgICAgICA8dmFsLW51bWJlci1pbnB1dCBbcHJvcHNdPVwiZ2V0RmllbGRQcm9wKGYpXCI+PC92YWwtbnVtYmVyLWlucHV0PlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZi50eXBlID09PSB0eXBlcy5QQVNTV09SRFwiPlxuICAgICAgICAgICAgICA8dmFsLXBhc3N3b3JkLWlucHV0IFtwcm9wc109XCJnZXRGaWVsZFByb3AoZilcIj48L3ZhbC1wYXNzd29yZC1pbnB1dD5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImYudHlwZSA9PT0gdHlwZXMuUElOX0NPREVcIj5cbiAgICAgICAgICAgICAgPHZhbC1waW4taW5wdXQgW3Byb3BzXT1cImdldEZpZWxkUHJvcChmKVwiPjwvdmFsLXBpbi1pbnB1dD5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImYudHlwZSA9PT0gdHlwZXMuUkFESU9cIj5cbiAgICAgICAgICAgICAgPHZhbC1yYWRpby1pbnB1dCBbcHJvcHNdPVwiZ2V0RmllbGRQcm9wKGYpXCI+PC92YWwtcmFkaW8taW5wdXQ+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmLnR5cGUgPT09IHR5cGVzLlNFTEVDVFwiPlxuICAgICAgICAgICAgICA8dmFsLXNlbGVjdC1pbnB1dCBbcHJvcHNdPVwiZ2V0RmllbGRQcm9wKGYpXCI+PC92YWwtc2VsZWN0LWlucHV0PlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZi50eXBlID09PSB0eXBlcy5TRUFSQ0hfU0VMRUNUXCI+XG4gICAgICAgICAgICAgIDx2YWwtc2VsZWN0LXNlYXJjaCBbcHJvcHNdPVwiZ2V0RmllbGRQcm9wKGYpXCI+PC92YWwtc2VsZWN0LXNlYXJjaD5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPHZhbC1oaW50IFtwcm9wc109XCJnZXRGaWVsZFByb3AoZilcIj48L3ZhbC1oaW50PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDx2YWwtZGl2aWRlciBbcHJvcHNdPVwieyBmaWxsOiAnc29saWQnLCBzaXplOiAnbWVkaXVtJywgY29sb3I6ICdtZWRpdW0nIH1cIj48L3ZhbC1kaXZpZGVyPlxuICAgICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDx2YWwtYnV0dG9uLWdyb3VwXG4gICAgICAgICAgW3Byb3BzXT1cInsgYnV0dG9uczogYWN0aW9ucywgcG9zaXRpb246ICdjZW50ZXInLCBjb2x1bW5lZDogZmFsc2UgfVwiXG4gICAgICAgICAgKG9uQ2xpY2spPVwic3VibWl0SGFuZGxlcigkZXZlbnQpXCJcbiAgICAgICAgPjwvdmFsLWJ1dHRvbi1ncm91cD5cbiAgICAgIDwvZm9ybT5cbiAgICA8L2Rpdj5cbiAgYCxcbiAgc3R5bGVVcmxzOiBbJy4vZm9ybS5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBGb3JtQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KClcbiAgcHJvcHM6IEZvcm1NZXRhZGF0YTtcblxuICBAT3V0cHV0KClcbiAgb25TdWJtaXQgPSBuZXcgRXZlbnRFbWl0dGVyPEZvcm1TdWJtaXQ+KCk7XG5cbiAgQE91dHB1dCgpXG4gIG9uSW52YWxpZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBAT3V0cHV0KClcbiAgb25TZWxlY3RDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHsgZmllbGQ6IHN0cmluZzsgdmFsdWU6IGFueSB9PigpO1xuXG4gIGZvcm06IEZvcm1Hcm91cDtcbiAgdHlwZXMgPSBJbnB1dFR5cGU7XG4gIHByaXZhdGUgc3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uW10gPSBbXTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGZiOiBGb3JtQnVpbGRlcixcbiAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWZcbiAgKSB7fVxuXG4gIG5nT25Jbml0KCkge1xuICAgIGNvbnN0IGZvcm1Db250cm9scyA9IHt9O1xuICAgIHRoaXMucHJvcHMuc2VjdGlvbnMuZm9yRWFjaChzZWN0aW9uID0+IHtcbiAgICAgIHNlY3Rpb24uZmllbGRzLmZvckVhY2goZmllbGQgPT4ge1xuICAgICAgICBmb3JtQ29udHJvbHNbZmllbGQubmFtZV0gPSBbdW5kZWZpbmVkLCBmaWVsZC52YWxpZGF0b3JzIHx8IFtdXTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHRoaXMuZm9ybSA9IHRoaXMuZmIuZ3JvdXAoZm9ybUNvbnRyb2xzKTtcbiAgICB0aGlzLnByb3BzLnNlY3Rpb25zLmZvckVhY2goc2VjdGlvbiA9PiB7XG4gICAgICBzZWN0aW9uLmZpZWxkc1xuICAgICAgICAuZmlsdGVyKHggPT4geC50eXBlID09PSB0aGlzLnR5cGVzLlNFTEVDVCB8fCB4LnR5cGUgPT09IHRoaXMudHlwZXMuVEVYVCB8fCB4LnR5cGUgPT09IHRoaXMudHlwZXMuU0VBUkNIX1NFTEVDVClcbiAgICAgICAgLmZvckVhY2goZmllbGQgPT4ge1xuICAgICAgICAgIHRoaXMudHJhY2tTZWxlY3RDaGFuZ2VzKGZpZWxkLm5hbWUpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIC8vIENsZWFudXAgc3Vic2NyaXB0aW9ucyB0byBhdm9pZCBtZW1vcnkgbGVha3NcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChzdWIgPT4gc3ViLnVuc3Vic2NyaWJlKCkpO1xuICB9XG5cbiAgdHJhY2tTZWxlY3RDaGFuZ2VzKGZpZWxkTmFtZTogc3RyaW5nKSB7XG4gICAgY29uc3QgY29udHJvbCA9IHRoaXMuZ2V0Q29udHJvbChmaWVsZE5hbWUpO1xuICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IGNvbnRyb2wudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICB0aGlzLm9uU2VsZWN0Q2hhbmdlLmVtaXQoeyBmaWVsZDogZmllbGROYW1lLCB2YWx1ZSB9KTtcbiAgICB9KTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChzdWJzY3JpcHRpb24pO1xuICB9XG5cbiAgYXN5bmMgc3VibWl0SGFuZGxlcih0b2tlbj86IHN0cmluZykge1xuICAgIHRoaXMub25TdWJtaXQuZW1pdCh7IGZpZWxkczogdGhpcy5mb3JtLmdldFJhd1ZhbHVlKCksIHRva2VuIH0pO1xuICB9XG5cbiAgZ2V0Q29udHJvbChmaWVsZDogc3RyaW5nKTogRm9ybUNvbnRyb2wge1xuICAgIHJldHVybiB0aGlzLkZvcm0uZ2V0KGZpZWxkKSBhcyBGb3JtQ29udHJvbDtcbiAgfVxuXG4gIGdldEZpZWxkUHJvcChmaWVsZDogSW5wdXRNZXRhZGF0YSk6IElucHV0TWV0YWRhdGEge1xuICAgIGZpZWxkLnRva2VuO1xuICAgIGlmICghZmllbGQudG9rZW4pIHtcbiAgICAgIGZpZWxkLnRva2VuID0gYGlucHV0LSR7ZmllbGQudHlwZX0tJHtmaWVsZC5uYW1lfWA7XG4gICAgfVxuICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmdldENvbnRyb2woZmllbGQubmFtZSk7XG4gICAgaWYgKGZpZWxkLnN0YXRlID09PSBDb21wb25lbnRTdGF0ZXMuRElTQUJMRUQpIHtcbiAgICAgIGNvbnRyb2wuZGlzYWJsZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb250cm9sLmVuYWJsZSgpO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgLi4uZmllbGQsXG4gICAgICBjb250cm9sLFxuICAgIH07XG4gIH1cblxuICBnZXQgaXNBdEVuZE9mRm9ybSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gaXNBdEVuZCh0aGlzLmVsZW1lbnRSZWYpO1xuICB9XG5cbiAgZ2V0IEZvcm0oKTogRm9ybUdyb3VwIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtO1xuICB9XG5cbiAgZ2V0IEZvcm1TdGF0ZSgpOiB7IGZvcm06IEZvcm1Hcm91cDsgZGF0YTogRm9ybU1ldGFkYXRhIH0ge1xuICAgIHJldHVybiB7XG4gICAgICBmb3JtOiB0aGlzLkZvcm0sXG4gICAgICBkYXRhOiB0aGlzLnByb3BzLFxuICAgIH07XG4gIH1cblxuICBnZXQgYWN0aW9ucygpOiBCdXR0b25NZXRhZGF0YVtdIHtcbiAgICBpZiAoIXRoaXMuZm9ybSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmZvcm0udmFsaWQpIHtcbiAgICAgIHRoaXMucHJvcHMuYWN0aW9ucy5zdGF0ZSA9IENvbXBvbmVudFN0YXRlcy5FTkFCTEVEO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnByb3BzLnN0YXRlID09PSBDb21wb25lbnRTdGF0ZXMuV09SS0lORykge1xuICAgICAgdGhpcy5wcm9wcy5hY3Rpb25zLnN0YXRlID0gQ29tcG9uZW50U3RhdGVzLldPUktJTkc7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucHJvcHMuc3RhdGUgPT09IENvbXBvbmVudFN0YXRlcy5FTkFCTEVEKSB7XG4gICAgICB0aGlzLnByb3BzLmFjdGlvbnMuc3RhdGUgPSBDb21wb25lbnRTdGF0ZXMuRU5BQkxFRDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5wcm9wcy5zdGF0ZSA9PT0gQ29tcG9uZW50U3RhdGVzLkRJU0FCTEVEKSB7XG4gICAgICB0aGlzLnByb3BzLmFjdGlvbnMuc3RhdGUgPSBDb21wb25lbnRTdGF0ZXMuRElTQUJMRUQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIFt0aGlzLnByb3BzLmFjdGlvbnNdO1xuICB9XG59XG4iXX0=
@@ -443,6 +443,71 @@ export class LangService {
443
443
  this.warnedMissingLanguages.clear();
444
444
  console.log('LangService: All content cleared');
445
445
  }
446
+ /**
447
+ * Get content with interpolation support.
448
+ * Retrieves content and replaces placeholders with provided values.
449
+ *
450
+ * @param className - The component class name
451
+ * @param key - The text key
452
+ * @param interpolationData - Object with values to interpolate
453
+ * @param fallback - Optional fallback text if key is not found
454
+ * @returns Text with interpolated values
455
+ */
456
+ getTextWithInterpolation(className, key, interpolationData, fallback) {
457
+ const content = this.getText(className, key, fallback);
458
+ return this.interpolateString(content, interpolationData);
459
+ }
460
+ /**
461
+ * Get reactive content with interpolation support.
462
+ * Returns an Observable that emits interpolated content when language changes.
463
+ *
464
+ * @param className - The component class name
465
+ * @param key - The text key
466
+ * @param interpolationData - Object with values to interpolate
467
+ * @param fallback - Optional fallback text if key is not found
468
+ * @returns Observable that emits interpolated text
469
+ */
470
+ getContentWithInterpolation(className, key, interpolationData, fallback) {
471
+ return this.getContent(className, key, fallback).pipe(map(content => this.interpolateString(content, interpolationData)));
472
+ }
473
+ /**
474
+ * Interpolate a string with provided values.
475
+ * Replaces placeholders like {{key}} or {key} with actual values.
476
+ *
477
+ * @param content - Content string with placeholders
478
+ * @param values - Values to interpolate
479
+ * @returns Interpolated string
480
+ *
481
+ * @example
482
+ * ```typescript
483
+ * interpolateString('Hello {{name}}!', { name: 'World' })
484
+ * // Returns: 'Hello World!'
485
+ * ```
486
+ */
487
+ interpolateString(content, values) {
488
+ if (!values || !content) {
489
+ return content;
490
+ }
491
+ return content.replace(/\{\{?(\w+)\}?\}/g, (match, key) => {
492
+ const value = values[key];
493
+ return value !== undefined ? String(value) : match;
494
+ });
495
+ }
496
+ /**
497
+ * Legacy function equivalent to the old fromContentWithInterpolation.
498
+ * Provides reactive content with interpolation support for backward compatibility.
499
+ *
500
+ * @param className - The component class name
501
+ * @param key - The text key
502
+ * @param interpolationData - Object with values to interpolate
503
+ * @param fallback - Optional fallback text if key is not found
504
+ * @returns Observable that emits interpolated text
505
+ *
506
+ * @deprecated Use getContentWithInterpolation instead
507
+ */
508
+ fromContentWithInterpolation(className, key, interpolationData, fallback) {
509
+ return this.getContentWithInterpolation(className, key, interpolationData, fallback);
510
+ }
446
511
  // Legacy getters/setters for backward compatibility
447
512
  get Lang() {
448
513
  return this.currentLang;
@@ -462,4 +527,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
462
527
  type: Inject,
463
528
  args: [ValtechConfigService]
464
529
  }] }] });
465
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFuZy1wcm92aWRlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsdGVjaC1jb21wb25lbnRzL3NyYy9saWIvc2VydmljZXMvbGFuZy1wcm92aWRlci9sYW5nLXByb3ZpZGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLGVBQWUsRUFBYyxvQkFBb0IsRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzNGLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN0RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMvRCxPQUFPLEVBQWlCLG9CQUFvQixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRS9ELE9BQU8sRUFBRSxTQUFTLEVBQThDLFdBQVcsRUFBRSxNQUFNLFNBQVMsQ0FBQzs7QUFFN0Y7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F5Qkc7QUFJSCxNQUFNLE9BQU8sV0FBVztJQVF0QixZQUEwQyxNQUFxQjtRQUx2RCx1QkFBa0IsR0FBaUIsRUFBRSxDQUFDO1FBR3RDLDJCQUFzQixHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7UUFHakQsT0FBTyxDQUFDLEdBQUcsQ0FBQywrQkFBK0IsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNyRCxJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUM7UUFDOUIsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFFckIsMENBQTBDO1FBQzFDLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1FBRWhDLDRFQUE0RTtRQUM1RSxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1FBRW5ELDZDQUE2QztRQUM3QyxNQUFNLE9BQU8sR0FBRyxtQkFBbUIsQ0FBQyxHQUFHLENBQWEsSUFBSSxDQUFDLENBQUM7UUFDMUQsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUM7UUFFdkUsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLGVBQWUsQ0FBYSxXQUFXLENBQUMsQ0FBQztRQUVqRSxPQUFPLENBQUMsR0FBRyxDQUFDLDBDQUEwQyxFQUFFO1lBQ3RELFNBQVMsRUFBRSxJQUFJLENBQUMsa0JBQWtCO1lBQ2xDLE9BQU8sRUFBRSxJQUFJLENBQUMsV0FBVztZQUN6QixPQUFPLEVBQUUsV0FBVztTQUNyQixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssd0JBQXdCO1FBQzlCLE1BQU0sV0FBVyxHQUFHLElBQUksR0FBRyxFQUFjLENBQUM7UUFFMUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLEVBQUU7WUFDckQsSUFBSSxnQkFBZ0IsRUFBRSxPQUFPLEVBQUUsQ0FBQztnQkFDOUIsTUFBTSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7b0JBQ25ELFdBQVcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3hCLENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7UUFFekQsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3pDLE9BQU8sQ0FBQyxJQUFJLENBQUMsOERBQThELENBQUMsQ0FBQztZQUM3RSxJQUFJLENBQUMsa0JBQWtCLEdBQUcsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXO1FBQ3ZELENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSyx3QkFBd0I7UUFDOUIsMkRBQTJEO1FBQzNELE1BQU0sY0FBYyxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUUsRUFBRSxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFcEQsS0FBSyxNQUFNLFNBQVMsSUFBSSxjQUFjLEVBQUUsQ0FBQztZQUN2QyxJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztnQkFDaEQsT0FBTyxTQUFTLENBQUM7WUFDbkIsQ0FBQztRQUNILENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQ7O09BRUc7SUFDSyxnQkFBZ0IsQ0FBQyxJQUF1QjtRQUM5QyxJQUFJLENBQUMsSUFBSTtZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDOUQsQ0FBQztJQUVEOzs7T0FHRztJQUNLLHVCQUF1QixDQUM3QixTQUFpQixFQUNqQixHQUFXLEVBQ1gsYUFBeUI7UUFNekIsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRWpELElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3RCLE9BQU87Z0JBQ0wsT0FBTyxFQUFFLFNBQVM7Z0JBQ2xCLFVBQVUsRUFBRSxhQUFhO2dCQUN6QixVQUFVLEVBQUUsS0FBSzthQUNsQixDQUFDO1FBQ0osQ0FBQztRQUVELCtCQUErQjtRQUMvQixNQUFNLGdCQUFnQixHQUFHLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNqRSxJQUFJLGdCQUFnQixFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUM1QixPQUFPO2dCQUNMLE9BQU8sRUFBRSxnQkFBZ0IsQ0FBQyxHQUFHLENBQUM7Z0JBQzlCLFVBQVUsRUFBRSxhQUFhO2dCQUN6QixVQUFVLEVBQUUsS0FBSzthQUNsQixDQUFDO1FBQ0osQ0FBQztRQUVELHdDQUF3QztRQUN4QyxNQUFNLFVBQVUsR0FBRyxHQUFHLFNBQVMsSUFBSSxHQUFHLElBQUksYUFBYSxFQUFFLENBQUM7UUFDMUQsTUFBTSxVQUFVLEdBQUcsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRWhFLElBQUksVUFBVSxFQUFFLENBQUM7WUFDZixJQUFJLENBQUMsc0JBQXNCLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzlDLENBQUM7UUFFRCx1QkFBdUI7UUFDdkIsSUFBSSxhQUFhLEtBQUssSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3ZDLE1BQU0sY0FBYyxHQUFHLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDbEUsSUFBSSxjQUFjLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUMxQixPQUFPO29CQUNMLE9BQU8sRUFBRSxjQUFjLENBQUMsR0FBRyxDQUFDO29CQUM1QixVQUFVLEVBQUUsSUFBSSxDQUFDLFdBQVc7b0JBQzVCLFVBQVU7aUJBQ1gsQ0FBQztZQUNKLENBQUM7UUFDSCxDQUFDO1FBRUQsK0JBQStCO1FBQy9CLEtBQUssTUFBTSxhQUFhLElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDcEQsTUFBTSxnQkFBZ0IsR0FBRyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDakUsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQzVCLE9BQU87b0JBQ0wsT0FBTyxFQUFFLGdCQUFnQixDQUFDLEdBQUcsQ0FBQztvQkFDOUIsVUFBVSxFQUFFLGFBQWE7b0JBQ3pCLFVBQVU7aUJBQ1gsQ0FBQztZQUNKLENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTztZQUNMLE9BQU8sRUFBRSxTQUFTO1lBQ2xCLFVBQVUsRUFBRSxhQUFhO1lBQ3pCLFVBQVU7U0FDWCxDQUFDO0lBQ0osQ0FBQztJQUVEOzs7T0FHRztJQUNILElBQUksWUFBWTtRQUNkLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQzFDLG9CQUFvQixFQUFFLEVBQ3RCLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQywrQ0FBK0M7U0FDL0QsQ0FBQztJQUNKLENBQUM7SUFFRDs7T0FFRztJQUNILElBQUksV0FBVztRQUNiLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUM7SUFDakMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBSSxjQUFjO1FBQ2hCLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFRDs7T0FFRztJQUNILElBQUksZUFBZTtRQUNqQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDMUIsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSCxPQUFPLENBQUMsSUFBZ0I7UUFDdEIsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUM1QyxPQUFPLENBQUMsSUFBSSxDQUNWLDBCQUEwQixJQUFJLDBDQUEwQyxFQUN4RSxJQUFJLENBQUMsa0JBQWtCLENBQ3hCLENBQUM7WUFDRixPQUFPLENBQUMsSUFBSSxDQUFDLGtEQUFrRCxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQztZQUNwRixJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUMxQixDQUFDO1FBRUQsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDN0IsbUJBQW1CLENBQUMsR0FBRyxDQUFhLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILElBQUksQ0FBQyxTQUFpQjtRQUNwQixNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDakQsT0FBTyxnQkFBZ0IsRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDbEUsQ0FBQztJQUVEOzs7Ozs7OztPQVFHO0lBQ0gsT0FBTyxDQUFDLFNBQWlCLEVBQUUsR0FBVyxFQUFFLFFBQWlCO1FBQ3ZELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxTQUFTLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFckYsSUFBSSxNQUFNLENBQUMsVUFBVSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEtBQUssSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUN2RSxPQUFPLENBQUMsSUFBSSxDQUNWLHlCQUF5QixTQUFTLElBQUksR0FBRyx1QkFBdUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLElBQUksRUFDM0YsVUFBVSxNQUFNLENBQUMsVUFBVSxpQ0FBaUMsRUFDNUQsSUFBSSxDQUFDLGtCQUFrQixDQUN4QixDQUFDO1FBQ0osQ0FBQztRQUVELE9BQU8sTUFBTSxDQUFDLE9BQU8sSUFBSSxRQUFRLElBQUksSUFBSSxTQUFTLElBQUksR0FBRyxHQUFHLENBQUM7SUFDL0QsQ0FBQztJQUVEOzs7Ozs7Ozs7T0FTRztJQUNILFVBQVUsQ0FBQyxTQUFpQixFQUFFLEdBQVcsRUFBRSxRQUFpQjtRQUMxRCxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUMzQixHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDVCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsU0FBUyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUVsRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLElBQUksTUFBTSxDQUFDLFVBQVUsS0FBSyxJQUFJLEVBQUUsQ0FBQztnQkFDcEQsT0FBTyxDQUFDLElBQUksQ0FDVix5QkFBeUIsU0FBUyxJQUFJLEdBQUcsdUJBQXVCLElBQUksSUFBSSxFQUN4RSxVQUFVLE1BQU0sQ0FBQyxVQUFVLGlDQUFpQyxFQUM1RCxJQUFJLENBQUMsa0JBQWtCLENBQ3hCLENBQUM7WUFDSixDQUFDO1lBRUQsT0FBTyxNQUFNLENBQUMsT0FBTyxJQUFJLFFBQVEsSUFBSSxJQUFJLFNBQVMsSUFBSSxHQUFHLEdBQUcsQ0FBQztRQUMvRCxDQUFDLENBQUMsRUFDRixvQkFBb0IsRUFBRSxDQUN2QixDQUFDO0lBQ0osQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSCxrQkFBa0IsQ0FBQyxTQUFpQixFQUFFLElBQWM7UUFDbEQsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FDM0IsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ1QsTUFBTSxNQUFNLEdBQTJCLEVBQUUsQ0FBQztZQUUxQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUNqQixNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsU0FBUyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFFekUsSUFBSSxhQUFhLENBQUMsVUFBVSxJQUFJLGFBQWEsQ0FBQyxVQUFVLEtBQUssSUFBSSxFQUFFLENBQUM7b0JBQ2xFLE9BQU8sQ0FBQyxJQUFJLENBQ1YseUJBQXlCLFNBQVMsSUFBSSxHQUFHLHVCQUF1QixJQUFJLElBQUksRUFDeEUsVUFBVSxhQUFhLENBQUMsVUFBVSxZQUFZLENBQy9DLENBQUM7Z0JBQ0osQ0FBQztnQkFFRCxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsYUFBYSxDQUFDLE9BQU8sSUFBSSxJQUFJLFNBQVMsSUFBSSxHQUFHLEdBQUcsQ0FBQztZQUNqRSxDQUFDLENBQUMsQ0FBQztZQUVILE9BQU8sTUFBTSxDQUFDO1FBQ2hCLENBQUMsQ0FBQyxFQUNGLG9CQUFvQixDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQ3BGLENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsVUFBVSxDQUFDLFNBQWlCLEVBQUUsR0FBVztRQUN2QyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzdDLElBQUksQ0FBQyxZQUFZO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFFaEMsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQzdDLFdBQVcsQ0FBQyxFQUFFLENBQUMsV0FBVyxJQUFJLE9BQU8sV0FBVyxDQUFDLEdBQUcsQ0FBQyxLQUFLLFFBQVEsQ0FDbkUsQ0FBQztJQUNKLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0gsb0JBQW9CLENBQUMsU0FBaUIsRUFBRSxHQUFXLEVBQUUsSUFBaUI7UUFDcEUsTUFBTSxVQUFVLEdBQUcsSUFBSSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUM7UUFDNUMsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRSxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDbEUsT0FBTyxZQUFZLElBQUksT0FBTyxZQUFZLENBQUMsR0FBRyxDQUFDLEtBQUssUUFBUSxDQUFDO0lBQy9ELENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILGlDQUFpQyxDQUFDLFNBQWlCO1FBQ2pELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDN0MsSUFBSSxDQUFDLFlBQVk7WUFBRSxPQUFPLEVBQUUsQ0FBQztRQUU3QixPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FDN0MsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQ3pGLENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSCxxQkFBcUIsQ0FBQyxTQUFpQixFQUFFLElBQWdCLEVBQUUsYUFBMEI7UUFDbkYsTUFBTSxPQUFPLEdBQUcsYUFBYSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUM7UUFDbEQsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUU3QyxJQUFJLENBQUMsWUFBWTtZQUFFLE9BQU8sRUFBRSxDQUFDO1FBRTdCLE1BQU0sZ0JBQWdCLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDN0QsTUFBTSxhQUFhLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFFdkQsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsTUFBTSxDQUN6QyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxJQUFJLE9BQU8sYUFBYSxDQUFDLEdBQUcsQ0FBQyxLQUFLLFFBQVEsQ0FDckUsQ0FBQztJQUNKLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7Ozs7O09BZUc7SUFDSCxlQUFlLENBQUMsU0FBaUIsRUFBRSxPQUF5QixFQUFFLFFBQWlCLElBQUk7UUFDakYsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2YsT0FBTyxDQUFDLEtBQUssQ0FBQyx3REFBd0QsQ0FBQyxDQUFDO1lBQ3hFLE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxDQUFDLE9BQU8sSUFBSSxPQUFPLE9BQU8sS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUM1QyxPQUFPLENBQUMsS0FBSyxDQUFDLDJEQUEyRCxDQUFDLENBQUM7WUFDM0UsT0FBTztRQUNULENBQUM7UUFFRCxPQUFPLENBQUMsR0FBRyxDQUFDLHlDQUF5QyxTQUFTLEdBQUcsRUFBRTtZQUNqRSxLQUFLO1lBQ0wsU0FBUyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO1NBQ2hDLENBQUMsQ0FBQztRQUVILG1EQUFtRDtRQUNuRCxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO1lBQzdCLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsSUFBSSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDaEQsQ0FBQztRQUVELDZDQUE2QztRQUM3QyxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxFQUFFLEVBQUU7WUFDdEQsSUFBSSxDQUFDLFdBQVcsSUFBSSxPQUFPLFdBQVcsS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDcEQsT0FBTyxDQUFDLElBQUksQ0FBQyw4Q0FBOEMsSUFBSSxTQUFTLFNBQVMsR0FBRyxDQUFDLENBQUM7Z0JBQ3RGLE9BQU87WUFDVCxDQUFDO1lBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQzNDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUM3QyxDQUFDO1lBRUQsSUFBSSxLQUFLLEVBQUUsQ0FBQztnQkFDVixJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRztvQkFDdEMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7b0JBQ3hDLEdBQUcsV0FBVztpQkFDZixDQUFDO1lBQ0osQ0FBQztpQkFBTSxDQUFDO2dCQUNOLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxXQUFXLEVBQUUsQ0FBQztZQUM3RCxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFSCw2QkFBNkI7UUFDN0IsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7UUFFaEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxxREFBcUQsU0FBUyxHQUFHLENBQUMsQ0FBQztJQUNqRixDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7T0FhRztJQUNILHVCQUF1QixDQUNyQixVQUE0QyxFQUM1QyxRQUFpQixJQUFJO1FBRXJCLElBQUksQ0FBQyxVQUFVLElBQUksT0FBTyxVQUFVLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDbEQsT0FBTyxDQUFDLEtBQUssQ0FBQyxzRUFBc0UsQ0FBQyxDQUFDO1lBQ3RGLE9BQU87UUFDVCxDQUFDO1FBRUQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxtREFBbUQsRUFBRTtZQUMvRCxPQUFPLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7WUFDaEMsS0FBSztTQUNOLENBQUMsQ0FBQztRQUVILE1BQU0sQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLEVBQUUsRUFBRTtZQUMxRCxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDbEQsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLENBQUMsR0FBRyxDQUFDLHNEQUFzRCxDQUFDLENBQUM7SUFDdEUsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxhQUFhLENBQUMsU0FBaUI7UUFDN0IsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2YsT0FBTyxDQUFDLEtBQUssQ0FBQyxzREFBc0QsQ0FBQyxDQUFDO1lBQ3RFLE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7WUFDNUIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQy9CLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1lBQ2hDLE9BQU8sQ0FBQyxHQUFHLENBQUMscUNBQXFDLFNBQVMsR0FBRyxDQUFDLENBQUM7UUFDakUsQ0FBQzthQUFNLENBQUM7WUFDTixPQUFPLENBQUMsSUFBSSxDQUFDLHNDQUFzQyxTQUFTLGFBQWEsQ0FBQyxDQUFDO1FBQzdFLENBQUM7SUFDSCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILG9CQUFvQjtRQUNsQixPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILHVCQUF1QjtRQUNyQixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsZUFBZTtRQUNiLE9BQU8sQ0FBQyxHQUFHLENBQUMsbUNBQW1DLENBQUMsQ0FBQztRQUNqRCxJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUNsQixJQUFJLENBQUMsa0JBQWtCLEdBQUcsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxtQkFBbUI7UUFDN0QsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3BDLE9BQU8sQ0FBQyxHQUFHLENBQUMsa0NBQWtDLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRUQsb0RBQW9EO0lBQ3BELElBQUksSUFBSTtRQUNOLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUMxQixDQUFDO0lBRUQsSUFBSSxJQUFJLENBQUMsSUFBZ0I7UUFDdkIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNyQixDQUFDOytHQTVnQlUsV0FBVyxrQkFRRixvQkFBb0I7bUhBUjdCLFdBQVcsY0FGVixNQUFNOzs0RkFFUCxXQUFXO2tCQUh2QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7MEJBU2MsTUFBTTsyQkFBQyxvQkFBb0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIG1hcCwgc2hhcmVSZXBsYXkgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IExBTkcgfSBmcm9tICcuLi8uLi9zaGFyZWQvY29uc3RhbnRzL3N0b3JhZ2UnO1xuaW1wb3J0IHsgTG9jYWxTdG9yYWdlU2VydmljZSB9IGZyb20gJy4uL2xvY2FsLXN0b3JhZ2Uuc2VydmljZSc7XG5pbXBvcnQgeyBWYWx0ZWNoQ29uZmlnLCBWYWx0ZWNoQ29uZmlnU2VydmljZSB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IFByb3ZpZGVyIH0gZnJvbSAnLi9jb250ZW50JztcbmltcG9ydCB7IExBTkdVQUdFUywgTGFuZ09wdGlvbiwgTGFuZ3VhZ2VUZXh0LCBMYW5ndWFnZXNDb250ZW50LCBUZXh0Q29udGVudCB9IGZyb20gJy4vdHlwZXMnO1xuXG4vKipcbiAqIExhbmdTZXJ2aWNlIC0gUmVhY3RpdmUgbGFuZ3VhZ2UgYW5kIGNvbnRlbnQgbWFuYWdlbWVudCBzZXJ2aWNlLlxuICpcbiAqIFRoaXMgc2VydmljZSBwcm92aWRlcyByZWFjdGl2ZSBjb250ZW50IG1hbmFnZW1lbnQgd2l0aCBPYnNlcnZhYmxlLWJhc2VkIGxhbmd1YWdlIHN3aXRjaGluZy5cbiAqIENvbXBvbmVudHMgY2FuIHN1YnNjcmliZSB0byBjb250ZW50IGNoYW5nZXMgYW5kIGF1dG9tYXRpY2FsbHkgdXBkYXRlIHdoZW4gdGhlIGxhbmd1YWdlIGNoYW5nZXMuXG4gKlxuICogVGhlIHNlcnZpY2UgYXV0b21hdGljYWxseSBkZXRlY3RzIGF2YWlsYWJsZSBsYW5ndWFnZXMgZnJvbSB0aGUgY29udGVudCBjb25maWd1cmF0aW9uXG4gKiBhbmQgcHJvdmlkZXMgaW50ZWxsaWdlbnQgZmFsbGJhY2tzIHdpdGggY29uc29sZSB3YXJuaW5ncyBmb3IgbWlzc2luZyB0cmFuc2xhdGlvbnMuXG4gKlxuICogQGV4YW1wbGUgQmFzaWMgdXNhZ2U6XG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdHJ1Y3Rvcihwcml2YXRlIGxhbmdTZXJ2aWNlOiBMYW5nU2VydmljZSkge31cbiAqXG4gKiAvLyBHZXQgY3VycmVudCBsYW5ndWFnZVxuICogY29uc3QgY3VycmVudExhbmcgPSB0aGlzLmxhbmdTZXJ2aWNlLmN1cnJlbnRMYW5nO1xuICpcbiAqIC8vIFN1YnNjcmliZSB0byBsYW5ndWFnZSBjaGFuZ2VzXG4gKiB0aGlzLmxhbmdTZXJ2aWNlLmN1cnJlbnRMYW5nJC5zdWJzY3JpYmUobGFuZyA9PiBjb25zb2xlLmxvZygnTGFuZ3VhZ2UgY2hhbmdlZDonLCBsYW5nKSk7XG4gKlxuICogLy8gR2V0IHN0YXRpYyB0ZXh0XG4gKiBjb25zdCB0ZXh0ID0gdGhpcy5sYW5nU2VydmljZS5nZXRUZXh0KCdDb21wb25lbnROYW1lJywgJ3RleHRLZXknKTtcbiAqXG4gKiAvLyBHZXQgcmVhY3RpdmUgdGV4dFxuICogY29uc3QgdGV4dCQgPSB0aGlzLmxhbmdTZXJ2aWNlLmdldENvbnRlbnQoJ0NvbXBvbmVudE5hbWUnLCAndGV4dEtleScpO1xuICogYGBgXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBMYW5nU2VydmljZSB7XG4gIHByaXZhdGUgY29udGVudDogUHJvdmlkZXI7XG4gIHByaXZhdGUgZGVmYXVsdExhbmc6IExhbmdPcHRpb247XG4gIHByaXZhdGUgYXZhaWxhYmxlTGFuZ3VhZ2VzOiBMYW5nT3B0aW9uW10gPSBbXTtcbiAgcHJpdmF0ZSBzZWxlY3RlZExhbmc6IEJlaGF2aW9yU3ViamVjdDxMYW5nT3B0aW9uPjtcbiAgcHJpdmF0ZSBjb25maWc6IFZhbHRlY2hDb25maWc7XG4gIHByaXZhdGUgd2FybmVkTWlzc2luZ0xhbmd1YWdlcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG4gIGNvbnN0cnVjdG9yKEBJbmplY3QoVmFsdGVjaENvbmZpZ1NlcnZpY2UpIGNvbmZpZzogVmFsdGVjaENvbmZpZykge1xuICAgIGNvbnNvbGUubG9nKCdMYW5nU2VydmljZTogSW5qZWN0ZWQgY29uZmlnOicsIGNvbmZpZyk7XG4gICAgdGhpcy5jb250ZW50ID0gY29uZmlnLmNvbnRlbnQ7XG4gICAgdGhpcy5jb25maWcgPSBjb25maWc7XG5cbiAgICAvLyBEZXRlY3QgYXZhaWxhYmxlIGxhbmd1YWdlcyBmcm9tIGNvbnRlbnRcbiAgICB0aGlzLmRldGVjdEF2YWlsYWJsZUxhbmd1YWdlcygpO1xuXG4gICAgLy8gU2V0IGRlZmF1bHQgbGFuZ3VhZ2UgKHByZWZlciBTcGFuaXNoLCB0aGVuIEVuZ2xpc2gsIHRoZW4gZmlyc3QgYXZhaWxhYmxlKVxuICAgIHRoaXMuZGVmYXVsdExhbmcgPSB0aGlzLmRldGVybWluZURlZmF1bHRMYW5ndWFnZSgpO1xuXG4gICAgLy8gSW5pdGlhbGl6ZSB3aXRoIHN0b3JlZCBsYW5ndWFnZSBvciBkZWZhdWx0XG4gICAgY29uc3QgY3VycmVudCA9IExvY2FsU3RvcmFnZVNlcnZpY2UuZ2V0PExhbmdPcHRpb24+KExBTkcpO1xuICAgIGNvbnN0IGluaXRpYWxMYW5nID0gdGhpcy52YWxpZGF0ZUxhbmd1YWdlKGN1cnJlbnQpIHx8IHRoaXMuZGVmYXVsdExhbmc7XG5cbiAgICB0aGlzLnNlbGVjdGVkTGFuZyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TGFuZ09wdGlvbj4oaW5pdGlhbExhbmcpO1xuXG4gICAgY29uc29sZS5sb2coJ0xhbmdTZXJ2aWNlOiBJbml0aWFsaXplZCB3aXRoIGxhbmd1YWdlczonLCB7XG4gICAgICBhdmFpbGFibGU6IHRoaXMuYXZhaWxhYmxlTGFuZ3VhZ2VzLFxuICAgICAgZGVmYXVsdDogdGhpcy5kZWZhdWx0TGFuZyxcbiAgICAgIGN1cnJlbnQ6IGluaXRpYWxMYW5nLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIERldGVjdCBhdmFpbGFibGUgbGFuZ3VhZ2VzIGZyb20gdGhlIGNvbnRlbnQgY29uZmlndXJhdGlvbi5cbiAgICogU2NhbnMgYWxsIGNvbXBvbmVudCBjb250ZW50IHRvIGZpbmQgd2hpY2ggbGFuZ3VhZ2VzIGFyZSBhY3R1YWxseSBjb25maWd1cmVkLlxuICAgKi9cbiAgcHJpdmF0ZSBkZXRlY3RBdmFpbGFibGVMYW5ndWFnZXMoKTogdm9pZCB7XG4gICAgY29uc3QgbGFuZ3VhZ2VTZXQgPSBuZXcgU2V0PExhbmdPcHRpb24+KCk7XG5cbiAgICBPYmplY3QudmFsdWVzKHRoaXMuY29udGVudCkuZm9yRWFjaChjb21wb25lbnRDb250ZW50ID0+IHtcbiAgICAgIGlmIChjb21wb25lbnRDb250ZW50Py5Db250ZW50KSB7XG4gICAgICAgIE9iamVjdC5rZXlzKGNvbXBvbmVudENvbnRlbnQuQ29udGVudCkuZm9yRWFjaChsYW5nID0+IHtcbiAgICAgICAgICBsYW5ndWFnZVNldC5hZGQobGFuZyk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5hdmFpbGFibGVMYW5ndWFnZXMgPSBBcnJheS5mcm9tKGxhbmd1YWdlU2V0KS5zb3J0KCk7XG5cbiAgICBpZiAodGhpcy5hdmFpbGFibGVMYW5ndWFnZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ0xhbmdTZXJ2aWNlOiBObyBsYW5ndWFnZXMgZGV0ZWN0ZWQgaW4gY29udGVudCBjb25maWd1cmF0aW9uIScpO1xuICAgICAgdGhpcy5hdmFpbGFibGVMYW5ndWFnZXMgPSBbTEFOR1VBR0VTLkVTXTsgLy8gRmFsbGJhY2tcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lIHRoZSBiZXN0IGRlZmF1bHQgbGFuZ3VhZ2UgYmFzZWQgb24gYXZhaWxhYmxlIGNvbnRlbnQuXG4gICAqL1xuICBwcml2YXRlIGRldGVybWluZURlZmF1bHRMYW5ndWFnZSgpOiBMYW5nT3B0aW9uIHtcbiAgICAvLyBQcmVmZXJlbmNlIG9yZGVyOiBTcGFuaXNoLCBFbmdsaXNoLCB0aGVuIGZpcnN0IGF2YWlsYWJsZVxuICAgIGNvbnN0IHByZWZlcnJlZE9yZGVyID0gW0xBTkdVQUdFUy5FUywgTEFOR1VBR0VTLkVOXTtcblxuICAgIGZvciAoY29uc3QgcHJlZmVycmVkIG9mIHByZWZlcnJlZE9yZGVyKSB7XG4gICAgICBpZiAodGhpcy5hdmFpbGFibGVMYW5ndWFnZXMuaW5jbHVkZXMocHJlZmVycmVkKSkge1xuICAgICAgICByZXR1cm4gcHJlZmVycmVkO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmF2YWlsYWJsZUxhbmd1YWdlc1swXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSBpZiBhIGxhbmd1YWdlIGlzIGF2YWlsYWJsZSBpbiB0aGUgY29udGVudC5cbiAgICovXG4gIHByaXZhdGUgdmFsaWRhdGVMYW5ndWFnZShsYW5nOiBMYW5nT3B0aW9uIHwgbnVsbCk6IExhbmdPcHRpb24gfCBudWxsIHtcbiAgICBpZiAoIWxhbmcpIHJldHVybiBudWxsO1xuICAgIHJldHVybiB0aGlzLmF2YWlsYWJsZUxhbmd1YWdlcy5pbmNsdWRlcyhsYW5nKSA/IGxhbmcgOiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgYmVzdCBhdmFpbGFibGUgbGFuZ3VhZ2UgZm9yIGEgY29tcG9uZW50IGFuZCBrZXkuXG4gICAqIFByb3ZpZGVzIGludGVsbGlnZW50IGZhbGxiYWNrIHdpdGggd2FybmluZ3MuXG4gICAqL1xuICBwcml2YXRlIGdldEJlc3RBdmFpbGFibGVDb250ZW50KFxuICAgIGNsYXNzTmFtZTogc3RyaW5nLFxuICAgIGtleTogc3RyaW5nLFxuICAgIHJlcXVlc3RlZExhbmc6IExhbmdPcHRpb25cbiAgKToge1xuICAgIGNvbnRlbnQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBhY3R1YWxMYW5nOiBMYW5nT3B0aW9uO1xuICAgIHNob3VsZFdhcm46IGJvb2xlYW47XG4gIH0ge1xuICAgIGNvbnN0IGNvbXBvbmVudENvbnRlbnQgPSB0aGlzLmNvbnRlbnRbY2xhc3NOYW1lXTtcblxuICAgIGlmICghY29tcG9uZW50Q29udGVudCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogdW5kZWZpbmVkLFxuICAgICAgICBhY3R1YWxMYW5nOiByZXF1ZXN0ZWRMYW5nLFxuICAgICAgICBzaG91bGRXYXJuOiBmYWxzZSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gVHJ5IHJlcXVlc3RlZCBsYW5ndWFnZSBmaXJzdFxuICAgIGNvbnN0IHJlcXVlc3RlZENvbnRlbnQgPSBjb21wb25lbnRDb250ZW50LkNvbnRlbnRbcmVxdWVzdGVkTGFuZ107XG4gICAgaWYgKHJlcXVlc3RlZENvbnRlbnQ/LltrZXldKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiByZXF1ZXN0ZWRDb250ZW50W2tleV0sXG4gICAgICAgIGFjdHVhbExhbmc6IHJlcXVlc3RlZExhbmcsXG4gICAgICAgIHNob3VsZFdhcm46IGZhbHNlLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBMYW5ndWFnZSBub3QgYXZhaWxhYmxlLCB0cnkgZmFsbGJhY2tzXG4gICAgY29uc3Qgd2FybmluZ0tleSA9IGAke2NsYXNzTmFtZX0uJHtrZXl9LiR7cmVxdWVzdGVkTGFuZ31gO1xuICAgIGNvbnN0IHNob3VsZFdhcm4gPSAhdGhpcy53YXJuZWRNaXNzaW5nTGFuZ3VhZ2VzLmhhcyh3YXJuaW5nS2V5KTtcblxuICAgIGlmIChzaG91bGRXYXJuKSB7XG4gICAgICB0aGlzLndhcm5lZE1pc3NpbmdMYW5ndWFnZXMuYWRkKHdhcm5pbmdLZXkpO1xuICAgIH1cblxuICAgIC8vIFRyeSBkZWZhdWx0IGxhbmd1YWdlXG4gICAgaWYgKHJlcXVlc3RlZExhbmcgIT09IHRoaXMuZGVmYXVsdExhbmcpIHtcbiAgICAgIGNvbnN0IGRlZmF1bHRDb250ZW50ID0gY29tcG9uZW50Q29udGVudC5Db250ZW50W3RoaXMuZGVmYXVsdExhbmddO1xuICAgICAgaWYgKGRlZmF1bHRDb250ZW50Py5ba2V5XSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRlbnQ6IGRlZmF1bHRDb250ZW50W2tleV0sXG4gICAgICAgICAgYWN0dWFsTGFuZzogdGhpcy5kZWZhdWx0TGFuZyxcbiAgICAgICAgICBzaG91bGRXYXJuLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRyeSBmaXJzdCBhdmFpbGFibGUgbGFuZ3VhZ2VcbiAgICBmb3IgKGNvbnN0IGF2YWlsYWJsZUxhbmcgb2YgdGhpcy5hdmFpbGFibGVMYW5ndWFnZXMpIHtcbiAgICAgIGNvbnN0IGF2YWlsYWJsZUNvbnRlbnQgPSBjb21wb25lbnRDb250ZW50LkNvbnRlbnRbYXZhaWxhYmxlTGFuZ107XG4gICAgICBpZiAoYXZhaWxhYmxlQ29udGVudD8uW2tleV0pIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZW50OiBhdmFpbGFibGVDb250ZW50W2tleV0sXG4gICAgICAgICAgYWN0dWFsTGFuZzogYXZhaWxhYmxlTGFuZyxcbiAgICAgICAgICBzaG91bGRXYXJuLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBjb250ZW50OiB1bmRlZmluZWQsXG4gICAgICBhY3R1YWxMYW5nOiByZXF1ZXN0ZWRMYW5nLFxuICAgICAgc2hvdWxkV2FybixcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIE9ic2VydmFibGUgdGhhdCBlbWl0cyB0aGUgY3VycmVudCBsYW5ndWFnZSB3aGVuZXZlciBpdCBjaGFuZ2VzLlxuICAgKiBVc2UgdGhpcyB0byBzdWJzY3JpYmUgdG8gbGFuZ3VhZ2UgY2hhbmdlcyBpbiBjb21wb25lbnRzLlxuICAgKi9cbiAgZ2V0IGN1cnJlbnRMYW5nJCgpOiBPYnNlcnZhYmxlPExhbmdPcHRpb24+IHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZExhbmcuYXNPYnNlcnZhYmxlKCkucGlwZShcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICBzaGFyZVJlcGxheSgxKSAvLyBFbnN1cmUgbmV3IHN1YnNjcmliZXJzIGdldCB0aGUgY3VycmVudCB2YWx1ZVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBjdXJyZW50IGxhbmd1YWdlIHN5bmNocm9ub3VzbHkuXG4gICAqL1xuICBnZXQgY3VycmVudExhbmcoKTogTGFuZ09wdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRMYW5nLnZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhcnJheSBvZiBhdmFpbGFibGUgbGFuZ3VhZ2VzIGRldGVjdGVkIGZyb20gY29udGVudC5cbiAgICovXG4gIGdldCBhdmFpbGFibGVMYW5ncygpOiBMYW5nT3B0aW9uW10ge1xuICAgIHJldHVybiBbLi4udGhpcy5hdmFpbGFibGVMYW5ndWFnZXNdO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgZGVmYXVsdCBsYW5ndWFnZS5cbiAgICovXG4gIGdldCBkZWZhdWx0TGFuZ3VhZ2UoKTogTGFuZ09wdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuZGVmYXVsdExhbmc7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBjdXJyZW50IGxhbmd1YWdlIGFuZCBwZXJzaXN0IGl0IHRvIGxvY2FsU3RvcmFnZS5cbiAgICogVGhpcyB3aWxsIHRyaWdnZXIgdXBkYXRlcyBpbiBhbGwgcmVhY3RpdmUgY29udGVudCBzdWJzY3JpcHRpb25zLlxuICAgKlxuICAgKiBWYWxpZGF0ZXMgdGhhdCB0aGUgbGFuZ3VhZ2UgaXMgYXZhaWxhYmxlIGFuZCB3YXJucyBpZiBub3QuXG4gICAqXG4gICAqIEBwYXJhbSBsYW5nIC0gVGhlIGxhbmd1YWdlIHRvIHNldFxuICAgKi9cbiAgc2V0TGFuZyhsYW5nOiBMYW5nT3B0aW9uKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmF2YWlsYWJsZUxhbmd1YWdlcy5pbmNsdWRlcyhsYW5nKSkge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBgTGFuZ1NlcnZpY2U6IExhbmd1YWdlIFwiJHtsYW5nfVwiIGlzIG5vdCBhdmFpbGFibGUuIEF2YWlsYWJsZSBsYW5ndWFnZXM6YCxcbiAgICAgICAgdGhpcy5hdmFpbGFibGVMYW5ndWFnZXNcbiAgICAgICk7XG4gICAgICBjb25zb2xlLndhcm4oYExhbmdTZXJ2aWNlOiBGYWxsaW5nIGJhY2sgdG8gZGVmYXVsdCBsYW5ndWFnZSBcIiR7dGhpcy5kZWZhdWx0TGFuZ31cImApO1xuICAgICAgbGFuZyA9IHRoaXMuZGVmYXVsdExhbmc7XG4gICAgfVxuXG4gICAgdGhpcy5zZWxlY3RlZExhbmcubmV4dChsYW5nKTtcbiAgICBMb2NhbFN0b3JhZ2VTZXJ2aWNlLnNldDxMYW5nT3B0aW9uPihMQU5HLCBsYW5nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgY29udGVudCBmb3IgYSBjb21wb25lbnQgY2xhc3MgYW5kIGtleSAobGVnYWN5IG1ldGhvZCkuXG4gICAqXG4gICAqIEBkZXByZWNhdGVkIFVzZSBnZXRUZXh0KCkgb3IgZ2V0Q29udGVudCgpIGZvciBiZXR0ZXIgdHlwZSBzYWZldHlcbiAgICovXG4gIFRleHQoY2xhc3NOYW1lOiBzdHJpbmcpOiBMYW5ndWFnZVRleHQge1xuICAgIGNvbnN0IGNvbXBvbmVudENvbnRlbnQgPSB0aGlzLmNvbnRlbnRbY2xhc3NOYW1lXTtcbiAgICByZXR1cm4gY29tcG9uZW50Q29udGVudD8uQ29udGVudFt0aGlzLnNlbGVjdGVkTGFuZy52YWx1ZV0gfHwge307XG4gIH1cblxuICAvKipcbiAgICogR2V0IGEgc2luZ2xlIGNvbnRlbnQgc3RyaW5nIHN5bmNocm9ub3VzbHkgZm9yIHRoZSBjdXJyZW50IGxhbmd1YWdlLlxuICAgKiBQcm92aWRlcyBpbnRlbGxpZ2VudCBmYWxsYmFjayB3aXRoIHdhcm5pbmdzIGZvciBtaXNzaW5nIHRyYW5zbGF0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIGNsYXNzTmFtZSAtIFRoZSBjb21wb25lbnQgY2xhc3MgbmFtZVxuICAgKiBAcGFyYW0ga2V5IC0gVGhlIHRleHQga2V5XG4gICAqIEBwYXJhbSBmYWxsYmFjayAtIE9wdGlvbmFsIGZhbGxiYWNrIHRleHQgaWYga2V5IGlzIG5vdCBmb3VuZFxuICAgKiBAcmV0dXJucyBUaGUgdGV4dCBzdHJpbmcgb3IgZmFsbGJhY2tcbiAgICovXG4gIGdldFRleHQoY2xhc3NOYW1lOiBzdHJpbmcsIGtleTogc3RyaW5nLCBmYWxsYmFjaz86IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgcmVzdWx0ID0gdGhpcy5nZXRCZXN0QXZhaWxhYmxlQ29udGVudChjbGFzc05hbWUsIGtleSwgdGhpcy5zZWxlY3RlZExhbmcudmFsdWUpO1xuXG4gICAgaWYgKHJlc3VsdC5zaG91bGRXYXJuICYmIHJlc3VsdC5hY3R1YWxMYW5nICE9PSB0aGlzLnNlbGVjdGVkTGFuZy52YWx1ZSkge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBgTGFuZ1NlcnZpY2U6IENvbnRlbnQgXCIke2NsYXNzTmFtZX0uJHtrZXl9XCIgbm90IGF2YWlsYWJsZSBpbiBcIiR7dGhpcy5zZWxlY3RlZExhbmcudmFsdWV9XCIuYCxcbiAgICAgICAgYFVzaW5nIFwiJHtyZXN1bHQuYWN0dWFsTGFuZ31cIiBpbnN0ZWFkLiBBdmFpbGFibGUgbGFuZ3VhZ2VzOmAsXG4gICAgICAgIHRoaXMuYXZhaWxhYmxlTGFuZ3VhZ2VzXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQuY29udGVudCB8fCBmYWxsYmFjayB8fCBgWyR7Y2xhc3NOYW1lfS4ke2tleX1dYDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYSByZWFjdGl2ZSBPYnNlcnZhYmxlIGZvciBhIHNwZWNpZmljIHRleHQga2V5IHRoYXQgdXBkYXRlcyB3aGVuIGxhbmd1YWdlIGNoYW5nZXMuXG4gICAqIFRoaXMgaXMgdGhlIHJlY29tbWVuZGVkIG1ldGhvZCBmb3IgY29tcG9uZW50cyB0aGF0IG5lZWQgcmVhY3RpdmUgY29udGVudC5cbiAgICogUHJvdmlkZXMgaW50ZWxsaWdlbnQgZmFsbGJhY2sgd2l0aCB3YXJuaW5ncyBmb3IgbWlzc2luZyB0cmFuc2xhdGlvbnMuXG4gICAqXG4gICAqIEBwYXJhbSBjbGFzc05hbWUgLSBUaGUgY29tcG9uZW50IGNsYXNzIG5hbWVcbiAgICogQHBhcmFtIGtleSAtIFRoZSB0ZXh0IGtleVxuICAgKiBAcGFyYW0gZmFsbGJhY2sgLSBPcHRpb25hbCBmYWxsYmFjayB0ZXh0IGlmIGtleSBpcyBub3QgZm91bmRcbiAgICogQHJldHVybnMgT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRoZSB0ZXh0IHN0cmluZyB3aGVuZXZlciBsYW5ndWFnZSBjaGFuZ2VzXG4gICAqL1xuICBnZXRDb250ZW50KGNsYXNzTmFtZTogc3RyaW5nLCBrZXk6IHN0cmluZywgZmFsbGJhY2s/OiBzdHJpbmcpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLmN1cnJlbnRMYW5nJC5waXBlKFxuICAgICAgbWFwKGxhbmcgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLmdldEJlc3RBdmFpbGFibGVDb250ZW50KGNsYXNzTmFtZSwga2V5LCBsYW5nKTtcblxuICAgICAgICBpZiAocmVzdWx0LnNob3VsZFdhcm4gJiYgcmVzdWx0LmFjdHVhbExhbmcgIT09IGxhbmcpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICBgTGFuZ1NlcnZpY2U6IENvbnRlbnQgXCIke2NsYXNzTmFtZX0uJHtrZXl9XCIgbm90IGF2YWlsYWJsZSBpbiBcIiR7bGFuZ31cIi5gLFxuICAgICAgICAgICAgYFVzaW5nIFwiJHtyZXN1bHQuYWN0dWFsTGFuZ31cIiBpbnN0ZWFkLiBBdmFpbGFibGUgbGFuZ3VhZ2VzOmAsXG4gICAgICAgICAgICB0aGlzLmF2YWlsYWJsZUxhbmd1YWdlc1xuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0LmNvbnRlbnQgfHwgZmFsbGJhY2sgfHwgYFske2NsYXNzTmFtZX0uJHtrZXl9XWA7XG4gICAgICB9KSxcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKClcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCByZWFjdGl2ZSBjb250ZW50IGZvciBtdWx0aXBsZSBrZXlzIGF0IG9uY2UuXG4gICAqIFByb3ZpZGVzIGludGVsbGlnZW50IGZhbGxiYWNrIHdpdGggd2FybmluZ3MgZm9yIG1pc3NpbmcgdHJhbnNsYXRpb25zLlxuICAgKlxuICAgKiBAcGFyYW0gY2xhc3NOYW1lIC0gVGhlIGNvbXBvbmVudCBjbGFzcyBuYW1lXG4gICAqIEBwYXJhbSBrZXlzIC0gQXJyYXkgb2YgdGV4dCBrZXlzIHRvIHJldHJpZXZlXG4gICAqIEByZXR1cm5zIE9ic2VydmFibGUgdGhhdCBlbWl0cyBhbiBvYmplY3Qgd2l0aCBhbGwgcmVxdWVzdGVkIGtleXNcbiAgICovXG4gIGdldE11bHRpcGxlQ29udGVudChjbGFzc05hbWU6IHN0cmluZywga2V5czogc3RyaW5nW10pOiBPYnNlcnZhYmxlPFJlY29yZDxzdHJpbmcsIHN0cmluZz4+IHtcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50TGFuZyQucGlwZShcbiAgICAgIG1hcChsYW5nID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG5cbiAgICAgICAga2V5cy5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgY29uc3QgY29udGVudFJlc3VsdCA9IHRoaXMuZ2V0QmVzdEF2YWlsYWJsZUNvbnRlbnQoY2xhc3NOYW1lLCBrZXksIGxhbmcpO1xuXG4gICAgICAgICAgaWYgKGNvbnRlbnRSZXN1bHQuc2hvdWxkV2FybiAmJiBjb250ZW50UmVzdWx0LmFjdHVhbExhbmcgIT09IGxhbmcpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgICAgYExhbmdTZXJ2aWNlOiBDb250ZW50IFwiJHtjbGFzc05hbWV9LiR7a2V5fVwiIG5vdCBhdmFpbGFibGUgaW4gXCIke2xhbmd9XCIuYCxcbiAgICAgICAgICAgICAgYFVzaW5nIFwiJHtjb250ZW50UmVzdWx0LmFjdHVhbExhbmd9XCIgaW5zdGVhZC5gXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJlc3VsdFtrZXldID0gY29udGVudFJlc3VsdC5jb250ZW50IHx8IGBbJHtjbGFzc05hbWV9LiR7a2V5fV1gO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSksXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgocHJldiwgY3VycikgPT4gSlNPTi5zdHJpbmdpZnkocHJldikgPT09IEpTT04uc3RyaW5naWZ5KGN1cnIpKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgYSBjb250ZW50IGtleSBleGlzdHMgZm9yIGEgY29tcG9uZW50IGluIGFueSBhdmFpbGFibGUgbGFuZ3VhZ2UuXG4gICAqXG4gICAqIEBwYXJhbSBjbGFzc05hbWUgLSBUaGUgY29tcG9uZW50IGNsYXNzIG5hbWVcbiAgICogQHBhcmFtIGtleSAtIFRoZSB0ZXh0IGtleVxuICAgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBrZXkgZXhpc3RzIGluIGFueSBsYW5ndWFnZVxuICAgKi9cbiAgaGFzQ29udGVudChjbGFzc05hbWU6IHN0cmluZywga2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCBjbGFzc0NvbnRlbnQgPSB0aGlzLmNvbnRlbnRbY2xhc3NOYW1lXTtcbiAgICBpZiAoIWNsYXNzQ29udGVudCkgcmV0dXJuIGZhbHNlO1xuXG4gICAgcmV0dXJuIE9iamVjdC52YWx1ZXMoY2xhc3NDb250ZW50LkNvbnRlbnQpLnNvbWUoXG4gICAgICBsYW5nQ29udGVudCA9PiBsYW5nQ29udGVudCAmJiB0eXBlb2YgbGFuZ0NvbnRlbnRba2V5XSA9PT0gJ3N0cmluZydcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGEgY29udGVudCBrZXkgZXhpc3RzIGZvciBhIGNvbXBvbmVudCBpbiBhIHNwZWNpZmljIGxhbmd1YWdlLlxuICAgKlxuICAgKiBAcGFyYW0gY2xhc3NOYW1lIC0gVGhlIGNvbXBvbmVudCBjbGFzcyBuYW1lXG4gICAqIEBwYXJhbSBrZXkgLSBUaGUgdGV4dCBrZXlcbiAgICogQHBhcmFtIGxhbmcgLSBUaGUgbGFuZ3VhZ2UgdG8gY2hlY2sgKGRlZmF1bHRzIHRvIGN1cnJlbnQgbGFuZ3VhZ2UpXG4gICAqIEByZXR1cm5zIFRydWUgaWYgdGhlIGtleSBleGlzdHMgaW4gdGhlIHNwZWNpZmllZCBsYW5ndWFnZVxuICAgKi9cbiAgaGFzQ29udGVudEluTGFuZ3VhZ2UoY2xhc3NOYW1lOiBzdHJpbmcsIGtleTogc3RyaW5nLCBsYW5nPzogTGFuZ09wdGlvbik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHRhcmdldExhbmcgPSBsYW5nIHx8IHRoaXMuY3VycmVudExhbmc7XG4gICAgY29uc3QgY2xhc3NDb250ZW50ID0gdGhpcy5jb250ZW50W2NsYXNzTmFtZV0/LkNvbnRlbnRbdGFyZ2V0TGFuZ107XG4gICAgcmV0dXJuIGNsYXNzQ29udGVudCAmJiB0eXBlb2YgY2xhc3NDb250ZW50W2tleV0gPT09ICdzdHJpbmcnO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhdmFpbGFibGUgbGFuZ3VhZ2VzIGZvciBhIHNwZWNpZmljIGNvbXBvbmVudC5cbiAgICpcbiAgICogQHBhcmFtIGNsYXNzTmFtZSAtIFRoZSBjb21wb25lbnQgY2xhc3MgbmFtZVxuICAgKiBAcmV0dXJucyBBcnJheSBvZiBsYW5ndWFnZSBjb2RlcyBhdmFpbGFibGUgZm9yIHRoZSBjb21wb25lbnRcbiAgICovXG4gIGdldEF2YWlsYWJsZUxhbmd1YWdlc0ZvckNvbXBvbmVudChjbGFzc05hbWU6IHN0cmluZyk6IExhbmdPcHRpb25bXSB7XG4gICAgY29uc3QgY2xhc3NDb250ZW50ID0gdGhpcy5jb250ZW50W2NsYXNzTmFtZV07XG4gICAgaWYgKCFjbGFzc0NvbnRlbnQpIHJldHVybiBbXTtcblxuICAgIHJldHVybiBPYmplY3Qua2V5cyhjbGFzc0NvbnRlbnQuQ29udGVudCkuZmlsdGVyKFxuICAgICAgbGFuZyA9PiBjbGFzc0NvbnRlbnQuQ29udGVudFtsYW5nXSAmJiBPYmplY3Qua2V5cyhjbGFzc0NvbnRlbnQuQ29udGVudFtsYW5nXSkubGVuZ3RoID4gMFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IG1pc3NpbmcgY29udGVudCBrZXlzIGZvciBhIGNvbXBvbmVudCBpbiBhIHNwZWNpZmljIGxhbmd1YWdlLlxuICAgKiBVc2VmdWwgZm9yIGlkZW50aWZ5aW5nIGluY29tcGxldGUgdHJhbnNsYXRpb25zLlxuICAgKlxuICAgKiBAcGFyYW0gY2xhc3NOYW1lIC0gVGhlIGNvbXBvbmVudCBjbGFzcyBuYW1lXG4gICAqIEBwYXJhbSBsYW5nIC0gVGhlIGxhbmd1YWdlIHRvIGNoZWNrXG4gICAqIEBwYXJhbSByZWZlcmVuY2VMYW5nIC0gVGhlIHJlZmVyZW5jZSBsYW5ndWFnZSB0byBjb21wYXJlIGFnYWluc3QgKGRlZmF1bHRzIHRvIGRlZmF1bHQgbGFuZ3VhZ2UpXG4gICAqIEByZXR1cm5zIEFycmF5IG9mIG1pc3Npbmcga2V5c1xuICAgKi9cbiAgZ2V0TWlzc2luZ0NvbnRlbnRLZXlzKGNsYXNzTmFtZTogc3RyaW5nLCBsYW5nOiBMYW5nT3B0aW9uLCByZWZlcmVuY2VMYW5nPzogTGFuZ09wdGlvbik6IHN0cmluZ1tdIHtcbiAgICBjb25zdCByZWZMYW5nID0gcmVmZXJlbmNlTGFuZyB8fCB0aGlzLmRlZmF1bHRMYW5nO1xuICAgIGNvbnN0IGNsYXNzQ29udGVudCA9IHRoaXMuY29udGVudFtjbGFzc05hbWVdO1xuXG4gICAgaWYgKCFjbGFzc0NvbnRlbnQpIHJldHVybiBbXTtcblxuICAgIGNvbnN0IHJlZmVyZW5jZUNvbnRlbnQgPSBjbGFzc0NvbnRlbnQuQ29udGVudFtyZWZMYW5nXSB8fCB7fTtcbiAgICBjb25zdCB0YXJnZXRDb250ZW50ID0gY2xhc3NDb250ZW50LkNvbnRlbnRbbGFuZ10gfHwge307XG5cbiAgICByZXR1cm4gT2JqZWN0LmtleXMocmVmZXJlbmNlQ29udGVudCkuZmlsdGVyKFxuICAgICAga2V5ID0+ICF0YXJnZXRDb250ZW50W2tleV0gfHwgdHlwZW9mIHRhcmdldENvbnRlbnRba2V5XSAhPT0gJ3N0cmluZydcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVyIG9yIHVwZGF0ZSBjb250ZW50IGZvciBhIGNvbXBvbmVudCBkeW5hbWljYWxseS5cbiAgICogVGhpcyBhbGxvd3MgcmVnaXN0ZXJpbmcgY29udGVudCBhdCBydW50aW1lIHdpdGhvdXQgQVBQX0lOSVRJQUxJWkVSLlxuICAgKlxuICAgKiBAcGFyYW0gY2xhc3NOYW1lIC0gVGhlIGNvbXBvbmVudCBjbGFzcyBuYW1lXG4gICAqIEBwYXJhbSBjb250ZW50IC0gVGhlIG11bHRpbGluZ3VhbCBjb250ZW50IG9iamVjdFxuICAgKiBAcGFyYW0gbWVyZ2UgLSBXaGV0aGVyIHRvIG1lcmdlIHdpdGggZXhpc3RpbmcgY29udGVudCAoZGVmYXVsdDogdHJ1ZSlcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiB0aGlzLmxhbmdTZXJ2aWNlLnJlZ2lzdGVyQ29udGVudCgnTXlDb21wb25lbnQnLCB7XG4gICAqICAgW0xBTkdVQUdFUy5FU106IHsgdGl0bGU6ICdUw610dWxvJywgZGVzY3JpcHRpb246ICdEZXNjcmlwY2nDs24nIH0sXG4gICAqICAgW0xBTkdVQUdFUy5FTl06IHsgdGl0bGU6ICdUaXRsZScsIGRlc2NyaXB0aW9uOiAnRGVzY3JpcHRpb24nIH1cbiAgICogfSk7XG4gICAqIGBgYFxuICAgKi9cbiAgcmVnaXN0ZXJDb250ZW50KGNsYXNzTmFtZTogc3RyaW5nLCBjb250ZW50OiBMYW5ndWFnZXNDb250ZW50LCBtZXJnZTogYm9vbGVhbiA9IHRydWUpOiB2b2lkIHtcbiAgICBpZiAoIWNsYXNzTmFtZSkge1xuICAgICAgY29uc29sZS5lcnJvcignTGFuZ1NlcnZpY2U6IGNsYXNzTmFtZSBpcyByZXF1aXJlZCBmb3IgcmVnaXN0ZXJDb250ZW50Jyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFjb250ZW50IHx8IHR5cGVvZiBjb250ZW50ICE9PSAnb2JqZWN0Jykge1xuICAgICAgY29uc29sZS5lcnJvcignTGFuZ1NlcnZpY2U6IEludmFsaWQgY29udGVudCBwcm92aWRlZCBmb3IgcmVnaXN0ZXJDb250ZW50Jyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc29sZS5sb2coYExhbmdTZXJ2aWNlOiBSZWdpc3RlcmluZyBjb250ZW50IGZvciBcIiR7Y2xhc3NOYW1lfVwiYCwge1xuICAgICAgbWVyZ2UsXG4gICAgICBsYW5ndWFnZXM6IE9iamVjdC5rZXlzKGNvbnRlbnQpLFxuICAgIH0pO1xuXG4gICAgLy8gSW5pdGlhbGl6ZSBjb21wb25lbnQgY29udGVudCBpZiBpdCBkb2Vzbid0IGV4aXN0XG4gICAgaWYgKCF0aGlzLmNvbnRlbnRbY2xhc3NOYW1lXSkge1xuICAgICAgdGhpcy5jb250ZW50W2NsYXNzTmFtZV0gPSBuZXcgVGV4dENvbnRlbnQoe30pO1xuICAgIH1cblxuICAgIC8vIE1lcmdlIG9yIHJlcGxhY2UgY29udGVudCBmb3IgZWFjaCBsYW5ndWFnZVxuICAgIE9iamVjdC5lbnRyaWVzKGNvbnRlbnQpLmZvckVhY2goKFtsYW5nLCBsYW5nQ29udGVudF0pID0+IHtcbiAgICAgIGlmICghbGFuZ0NvbnRlbnQgfHwgdHlwZW9mIGxhbmdDb250ZW50ICE9PSAnb2JqZWN0Jykge1xuICAgICAgICBjb25zb2xlLndhcm4oYExhbmdTZXJ2aWNlOiBJbnZhbGlkIGNvbnRlbnQgZm9yIGxhbmd1YWdlIFwiJHtsYW5nfVwiIGluIFwiJHtjbGFzc05hbWV9XCJgKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXRoaXMuY29udGVudFtjbGFzc05hbWVdLkNvbnRlbnRbbGFuZ10pIHtcbiAgICAgICAgdGhpcy5jb250ZW50W2NsYXNzTmFtZV0uQ29udGVudFtsYW5nXSA9IHt9O1xuICAgICAgfVxuXG4gICAgICBpZiAobWVyZ2UpIHtcbiAgICAgICAgdGhpcy5jb250ZW50W2NsYXNzTmFtZV0uQ29udGVudFtsYW5nXSA9IHtcbiAgICAgICAgICAuLi50aGlzLmNvbnRlbnRbY2xhc3NOYW1lXS5Db250ZW50W2xhbmddLFxuICAgICAgICAgIC4uLmxhbmdDb250ZW50LFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jb250ZW50W2NsYXNzTmFtZV0uQ29udGVudFtsYW5nXSA9IHsgLi4ubGFuZ0NvbnRlbnQgfTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIFVwZGF0ZSBhdmFpbGFibGUgbGFuZ3VhZ2VzXG4gICAgdGhpcy5kZXRlY3RBdmFpbGFibGVMYW5ndWFnZXMoKTtcblxuICAgIGNvbnNvbGUubG9nKGBMYW5nU2VydmljZTogQ29udGVudCByZWdpc3RlcmVkIHN1Y2Nlc3NmdWxseSBmb3IgXCIke2NsYXNzTmFtZX1cImApO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBtdWx0aXBsZSBjb250ZW50IHJlZ2lzdHJhdGlvbnMgYXQgb25jZS5cbiAgICpcbiAgICogQHBhcmFtIGNvbnRlbnRNYXAgLSBNYXAgb2YgY2xhc3NOYW1lIHRvIGNvbnRlbnRcbiAgICogQHBhcmFtIG1lcmdlIC0gV2hldGhlciB0byBtZXJnZSB3aXRoIGV4aXN0aW5nIGNvbnRlbnQgKGRlZmF1bHQ6IHRydWUpXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogdGhpcy5sYW5nU2VydmljZS5yZWdpc3Rlck11bHRpcGxlQ29udGVudCh7XG4gICAqICAgJ0NvbXBvbmVudDEnOiB7IFtMQU5HVUFHRVMuRVNdOiB7IGtleTE6ICd2YWxvcjEnIH0gfSxcbiAgICogICAnQ29tcG9uZW50Mic6IHsgW0xBTkdVQUdFUy5FTl06IHsga2V5MjogJ3ZhbHVlMicgfSB9XG4gICAqIH0pO1xuICAgKiBgYGBcbiAgICovXG4gIHJlZ2lzdGVyTXVsdGlwbGVDb250ZW50KFxuICAgIGNvbnRlbnRNYXA6IFJlY29yZDxzdHJpbmcsIExhbmd1YWdlc0NvbnRlbnQ+LFxuICAgIG1lcmdlOiBib29sZWFuID0gdHJ1ZVxuICApOiB2b2lkIHtcbiAgICBpZiAoIWNvbnRlbnRNYXAgfHwgdHlwZW9mIGNvbnRlbnRNYXAgIT09ICdvYmplY3QnKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdMYW5nU2VydmljZTogSW52YWxpZCBjb250ZW50TWFwIHByb3ZpZGVkIGZvciByZWdpc3Rlck11bHRpcGxlQ29udGVudCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnNvbGUubG9nKCdMYW5nU2VydmljZTogUmVnaXN0ZXJpbmcgbXVsdGlwbGUgY29udGVudCBlbnRyaWVzJywge1xuICAgICAgY2xhc3NlczogT2JqZWN0LmtleXMoY29udGVudE1hcCksXG4gICAgICBtZXJnZSxcbiAgICB9KTtcblxuICAgIE9iamVjdC5lbnRyaWVzKGNvbnRlbnRNYXApLmZvckVhY2goKFtjbGFzc05hbWUsIGNvbnRlbnRdKSA9PiB7XG4gICAgICB0aGlzLnJlZ2lzdGVyQ29udGVudChjbGFzc05hbWUsIGNvbnRlbnQsIG1lcmdlKTtcbiAgICB9KTtcblxuICAgIGNvbnNvbGUubG9nKCdMYW5nU2VydmljZTogTXVsdGlwbGUgY29udGVudCByZWdpc3RyYXRpb24gY29tcGxldGVkJyk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGNvbnRlbnQgZm9yIGEgc3BlY2lmaWMgY29tcG9uZW50LlxuICAgKlxuICAgKiBAcGFyYW0gY2xhc3NOYW1lIC0gVGhlIGNvbXBvbmVudCBjbGFzcyBuYW1lIHRvIHJlbW92ZVxuICAgKi9cbiAgcmVtb3ZlQ29udGVudChjbGFzc05hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICghY2xhc3NOYW1lKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdMYW5nU2VydmljZTogY2xhc3NOYW1lIGlzIHJlcXVpcmVkIGZvciByZW1vdmVDb250ZW50Jyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY29udGVudFtjbGFzc05hbWVdKSB7XG4gICAgICBkZWxldGUgdGhpcy5jb250ZW50W2NsYXNzTmFtZV07XG4gICAgICB0aGlzLmRldGVjdEF2YWlsYWJsZUxhbmd1YWdlcygpO1xuICAgICAgY29uc29sZS5sb2coYExhbmdTZXJ2aWNlOiBDb250ZW50IHJlbW92ZWQgZm9yIFwiJHtjbGFzc05hbWV9XCJgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS53YXJuKGBMYW5nU2VydmljZTogTm8gY29udGVudCBmb3VuZCBmb3IgXCIke2NsYXNzTmFtZX1cIiB0byByZW1vdmVgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IGEgbGlzdCBvZiBhbGwgcmVnaXN0ZXJlZCBjb21wb25lbnQgY2xhc3Nlcy5cbiAgICpcbiAgICogQHJldHVybnMgQXJyYXkgb2YgcmVnaXN0ZXJlZCBjbGFzcyBuYW1lc1xuICAgKi9cbiAgZ2V0UmVnaXN0ZXJlZENsYXNzZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLmNvbnRlbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgY29tcGxldGUgY29udGVudCBjb25maWd1cmF0aW9uIChmb3IgZGVidWdnaW5nIHB1cnBvc2VzKS5cbiAgICogUmV0dXJucyBhIGRlZXAgY29weSB0byBwcmV2ZW50IGFjY2lkZW50YWwgbXV0YXRpb25zLlxuICAgKlxuICAgKiBAcmV0dXJucyBDb21wbGV0ZSBjb250ZW50IGNvbmZpZ3VyYXRpb25cbiAgICovXG4gIGdldENvbnRlbnRDb25maWd1cmF0aW9uKCk6IFByb3ZpZGVyIHtcbiAgICByZXR1cm4gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmNvbnRlbnQpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhciBhbGwgY29udGVudCBhbmQgcmVzZXQgdG8gaW5pdGlhbCBzdGF0ZS5cbiAgICogVXNlZnVsIGZvciB0ZXN0aW5nIG9yIGNvbXBsZXRlIHJlaW5pdGlhbGl6YXRpb24uXG4gICAqL1xuICBjbGVhckFsbENvbnRlbnQoKTogdm9pZCB7XG4gICAgY29uc29sZS5sb2coJ0xhbmdTZXJ2aWNlOiBDbGVhcmluZyBhbGwgY29udGVudCcpO1xuICAgIHRoaXMuY29udGVudCA9IHt9O1xuICAgIHRoaXMuYXZhaWxhYmxlTGFuZ3VhZ2VzID0gW0xBTkdVQUdFUy5FU107IC8vIFJlc2V0IHRvIGRlZmF1bHRcbiAgICB0aGlzLndhcm5lZE1pc3NpbmdMYW5ndWFnZXMuY2xlYXIoKTtcbiAgICBjb25zb2xlLmxvZygnTGFuZ1NlcnZpY2U6IEFsbCBjb250ZW50IGNsZWFyZWQnKTtcbiAgfVxuXG4gIC8vIExlZ2FjeSBnZXR0ZXJzL3NldHRlcnMgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHlcbiAgZ2V0IExhbmcoKTogTGFuZ09wdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuY3VycmVudExhbmc7XG4gIH1cblxuICBzZXQgTGFuZyhsYW5nOiBMYW5nT3B0aW9uKSB7XG4gICAgdGhpcy5zZXRMYW5nKGxhbmcpO1xuICB9XG59XG4iXX0=
530
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFuZy1wcm92aWRlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsdGVjaC1jb21wb25lbnRzL3NyYy9saWIvc2VydmljZXMvbGFuZy1wcm92aWRlci9sYW5nLXByb3ZpZGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLGVBQWUsRUFBYyxvQkFBb0IsRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzNGLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN0RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMvRCxPQUFPLEVBQWlCLG9CQUFvQixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRS9ELE9BQU8sRUFBRSxTQUFTLEVBQThDLFdBQVcsRUFBRSxNQUFNLFNBQVMsQ0FBQzs7QUFFN0Y7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F5Qkc7QUFJSCxNQUFNLE9BQU8sV0FBVztJQVF0QixZQUEwQyxNQUFxQjtRQUx2RCx1QkFBa0IsR0FBaUIsRUFBRSxDQUFDO1FBR3RDLDJCQUFzQixHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7UUFHakQsT0FBTyxDQUFDLEdBQUcsQ0FBQywrQkFBK0IsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNyRCxJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUM7UUFDOUIsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFFckIsMENBQTBDO1FBQzFDLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1FBRWhDLDRFQUE0RTtRQUM1RSxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1FB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QyxDQUFDO0lBQ3ZGLENBQUM7SUFFRCxvREFBb0Q7SUFDcEQsSUFBSSxJQUFJO1FBQ04sT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzFCLENBQUM7SUFFRCxJQUFJLElBQUksQ0FBQyxJQUFnQjtRQUN2QixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3JCLENBQUM7K0dBbm1CVSxXQUFXLGtCQVFGLG9CQUFvQjttSEFSN0IsV0FBVyxjQUZWLE1BQU07OzRGQUVQLFdBQVc7a0JBSHZCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzswQkFTYyxNQUFNOzJCQUFDLG9CQUFvQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgbWFwLCBzaGFyZVJlcGxheSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgTEFORyB9IGZyb20gJy4uLy4uL3NoYXJlZC9jb25zdGFudHMvc3RvcmFnZSc7XG5pbXBvcnQgeyBMb2NhbFN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vbG9jYWwtc3RvcmFnZS5zZXJ2aWNlJztcbmltcG9ydCB7IFZhbHRlY2hDb25maWcsIFZhbHRlY2hDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgUHJvdmlkZXIgfSBmcm9tICcuL2NvbnRlbnQnO1xuaW1wb3J0IHsgTEFOR1VBR0VTLCBMYW5nT3B0aW9uLCBMYW5ndWFnZVRleHQsIExhbmd1YWdlc0NvbnRlbnQsIFRleHRDb250ZW50IH0gZnJvbSAnLi90eXBlcyc7XG5cbi8qKlxuICogTGFuZ1NlcnZpY2UgLSBSZWFjdGl2ZSBsYW5ndWFnZSBhbmQgY29udGVudCBtYW5hZ2VtZW50IHNlcnZpY2UuXG4gKlxuICogVGhpcyBzZXJ2aWNlIHByb3ZpZGVzIHJlYWN0aXZlIGNvbnRlbnQgbWFuYWdlbWVudCB3aXRoIE9ic2VydmFibGUtYmFzZWQgbGFuZ3VhZ2Ugc3dpdGNoaW5nLlxuICogQ29tcG9uZW50cyBjYW4gc3Vic2NyaWJlIHRvIGNvbnRlbnQgY2hhbmdlcyBhbmQgYXV0b21hdGljYWxseSB1cGRhdGUgd2hlbiB0aGUgbGFuZ3VhZ2UgY2hhbmdlcy5cbiAqXG4gKiBUaGUgc2VydmljZSBhdXRvbWF0aWNhbGx5IGRldGVjdHMgYXZhaWxhYmxlIGxhbmd1YWdlcyBmcm9tIHRoZSBjb250ZW50IGNvbmZpZ3VyYXRpb25cbiAqIGFuZCBwcm92aWRlcyBpbnRlbGxpZ2VudCBmYWxsYmFja3Mgd2l0aCBjb25zb2xlIHdhcm5pbmdzIGZvciBtaXNzaW5nIHRyYW5zbGF0aW9ucy5cbiAqXG4gKiBAZXhhbXBsZSBCYXNpYyB1c2FnZTpcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0cnVjdG9yKHByaXZhdGUgbGFuZ1NlcnZpY2U6IExhbmdTZXJ2aWNlKSB7fVxuICpcbiAqIC8vIEdldCBjdXJyZW50IGxhbmd1YWdlXG4gKiBjb25zdCBjdXJyZW50TGFuZyA9IHRoaXMubGFuZ1NlcnZpY2UuY3VycmVudExhbmc7XG4gKlxuICogLy8gU3Vic2NyaWJlIHRvIGxhbmd1YWdlIGNoYW5nZXNcbiAqIHRoaXMubGFuZ1NlcnZpY2UuY3VycmVudExhbmckLnN1YnNjcmliZShsYW5nID0+IGNvbnNvbGUubG9nKCdMYW5ndWFnZSBjaGFuZ2VkOicsIGxhbmcpKTtcbiAqXG4gKiAvLyBHZXQgc3RhdGljIHRleHRcbiAqIGNvbnN0IHRleHQgPSB0aGlzLmxhbmdTZXJ2aWNlLmdldFRleHQoJ0NvbXBvbmVudE5hbWUnLCAndGV4dEtleScpO1xuICpcbiAqIC8vIEdldCByZWFjdGl2ZSB0ZXh0XG4gKiBjb25zdCB0ZXh0JCA9IHRoaXMubGFuZ1NlcnZpY2UuZ2V0Q29udGVudCgnQ29tcG9uZW50TmFtZScsICd0ZXh0S2V5Jyk7XG4gKiBgYGBcbiAqL1xuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIExhbmdTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBjb250ZW50OiBQcm92aWRlcjtcbiAgcHJpdmF0ZSBkZWZhdWx0TGFuZzogTGFuZ09wdGlvbjtcbiAgcHJpdmF0ZSBhdmFpbGFibGVMYW5ndWFnZXM6IExhbmdPcHRpb25bXSA9IFtdO1xuICBwcml2YXRlIHNlbGVjdGVkTGFuZzogQmVoYXZpb3JTdWJqZWN0PExhbmdPcHRpb24+O1xuICBwcml2YXRlIGNvbmZpZzogVmFsdGVjaENvbmZpZztcbiAgcHJpdmF0ZSB3YXJuZWRNaXNzaW5nTGFuZ3VhZ2VzID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgY29uc3RydWN0b3IoQEluamVjdChWYWx0ZWNoQ29uZmlnU2VydmljZSkgY29uZmlnOiBWYWx0ZWNoQ29uZmlnKSB7XG4gICAgY29uc29sZS5sb2coJ0xhbmdTZXJ2aWNlOiBJbmplY3RlZCBjb25maWc6JywgY29uZmlnKTtcbiAgICB0aGlzLmNvbnRlbnQgPSBjb25maWcuY29udGVudDtcbiAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZztcblxuICAgIC8vIERldGVjdCBhdmFpbGFibGUgbGFuZ3VhZ2VzIGZyb20gY29udGVudFxuICAgIHRoaXMuZGV0ZWN0QXZhaWxhYmxlTGFuZ3VhZ2VzKCk7XG5cbiAgICAvLyBTZXQgZGVmYXVsdCBsYW5ndWFnZSAocHJlZmVyIFNwYW5pc2gsIHRoZW4gRW5nbGlzaCwgdGhlbiBmaXJzdCBhdmFpbGFibGUpXG4gICAgdGhpcy5kZWZhdWx0TGFuZyA9IHRoaXMuZGV0ZXJtaW5lRGVmYXVsdExhbmd1YWdlKCk7XG5cbiAgICAvLyBJbml0aWFsaXplIHdpdGggc3RvcmVkIGxhbmd1YWdlIG9yIGRlZmF1bHRcbiAgICBjb25zdCBjdXJyZW50ID0gTG9jYWxTdG9yYWdlU2VydmljZS5nZXQ8TGFuZ09wdGlvbj4oTEFORyk7XG4gICAgY29uc3QgaW5pdGlhbExhbmcgPSB0aGlzLnZhbGlkYXRlTGFuZ3VhZ2UoY3VycmVudCkgfHwgdGhpcy5kZWZhdWx0TGFuZztcblxuICAgIHRoaXMuc2VsZWN0ZWRMYW5nID0gbmV3IEJlaGF2aW9yU3ViamVjdDxMYW5nT3B0aW9uPihpbml0aWFsTGFuZyk7XG5cbiAgICBjb25zb2xlLmxvZygnTGFuZ1NlcnZpY2U6IEluaXRpYWxpemVkIHdpdGggbGFuZ3VhZ2VzOicsIHtcbiAgICAgIGF2YWlsYWJsZTogdGhpcy5hdmFpbGFibGVMYW5ndWFnZXMsXG4gICAgICBkZWZhdWx0OiB0aGlzLmRlZmF1bHRMYW5nLFxuICAgICAgY3VycmVudDogaW5pdGlhbExhbmcsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogRGV0ZWN0IGF2YWlsYWJsZSBsYW5ndWFnZXMgZnJvbSB0aGUgY29udGVudCBjb25maWd1cmF0aW9uLlxuICAgKiBTY2FucyBhbGwgY29tcG9uZW50IGNvbnRlbnQgdG8gZmluZCB3aGljaCBsYW5ndWFnZXMgYXJlIGFjdHVhbGx5IGNvbmZpZ3VyZWQuXG4gICAqL1xuICBwcml2YXRlIGRldGVjdEF2YWlsYWJsZUxhbmd1YWdlcygpOiB2b2lkIHtcbiAgICBjb25zdCBsYW5ndWFnZVNldCA9IG5ldyBTZXQ8TGFuZ09wdGlvbj4oKTtcblxuICAgIE9iamVjdC52YWx1ZXModGhpcy5jb250ZW50KS5mb3JFYWNoKGNvbXBvbmVudENvbnRlbnQgPT4ge1xuICAgICAgaWYgKGNvbXBvbmVudENvbnRlbnQ/LkNvbnRlbnQpIHtcbiAgICAgICAgT2JqZWN0LmtleXMoY29tcG9uZW50Q29udGVudC5Db250ZW50KS5mb3JFYWNoKGxhbmcgPT4ge1xuICAgICAgICAgIGxhbmd1YWdlU2V0LmFkZChsYW5nKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLmF2YWlsYWJsZUxhbmd1YWdlcyA9IEFycmF5LmZyb20obGFuZ3VhZ2VTZXQpLnNvcnQoKTtcblxuICAgIGlmICh0aGlzLmF2YWlsYWJsZUxhbmd1YWdlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIGNvbnNvbGUud2FybignTGFuZ1NlcnZpY2U6IE5vIGxhbmd1YWdlcyBkZXRlY3RlZCBpbiBjb250ZW50IGNvbmZpZ3VyYXRpb24hJyk7XG4gICAgICB0aGlzLmF2YWlsYWJsZUxhbmd1YWdlcyA9IFtMQU5HVUFHRVMuRVNdOyAvLyBGYWxsYmFja1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmUgdGhlIGJlc3QgZGVmYXVsdCBsYW5ndWFnZSBiYXNlZCBvbiBhdmFpbGFibGUgY29udGVudC5cbiAgICovXG4gIHByaXZhdGUgZGV0ZXJtaW5lRGVmYXVsdExhbmd1YWdlKCk6IExhbmdPcHRpb24ge1xuICAgIC8vIFByZWZlcmVuY2Ugb3JkZXI6IFNwYW5pc2gsIEVuZ2xpc2gsIHRoZW4gZmlyc3QgYXZhaWxhYmxlXG4gICAgY29uc3QgcHJlZmVycmVkT3JkZXIgPSBbTEFOR1VBR0VTLkVTLCBMQU5HVUFHRVMuRU5dO1xuXG4gICAgZm9yIChjb25zdCBwcmVmZXJyZWQgb2YgcHJlZmVycmVkT3JkZXIpIHtcbiAgICAgIGlmICh0aGlzLmF2YWlsYWJsZUxhbmd1YWdlcy5pbmNsdWRlcyhwcmVmZXJyZWQpKSB7XG4gICAgICAgIHJldHVybiBwcmVmZXJyZWQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuYXZhaWxhYmxlTGFuZ3VhZ2VzWzBdO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIGlmIGEgbGFuZ3VhZ2UgaXMgYXZhaWxhYmxlIGluIHRoZSBjb250ZW50LlxuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZUxhbmd1YWdlKGxhbmc6IExhbmdPcHRpb24gfCBudWxsKTogTGFuZ09wdGlvbiB8IG51bGwge1xuICAgIGlmICghbGFuZykgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHRoaXMuYXZhaWxhYmxlTGFuZ3VhZ2VzLmluY2x1ZGVzKGxhbmcpID8gbGFuZyA6IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBiZXN0IGF2YWlsYWJsZSBsYW5ndWFnZSBmb3IgYSBjb21wb25lbnQgYW5kIGtleS5cbiAgICogUHJvdmlkZXMgaW50ZWxsaWdlbnQgZmFsbGJhY2sgd2l0aCB3YXJuaW5ncy5cbiAgICovXG4gIHByaXZhdGUgZ2V0QmVzdEF2YWlsYWJsZUNvbnRlbnQoXG4gICAgY2xhc3NOYW1lOiBzdHJpbmcsXG4gICAga2V5OiBzdHJpbmcsXG4gICAgcmVxdWVzdGVkTGFuZzogTGFuZ09wdGlvblxuICApOiB7XG4gICAgY29udGVudDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGFjdHVhbExhbmc6IExhbmdPcHRpb247XG4gICAgc2hvdWxkV2FybjogYm9vbGVhbjtcbiAgfSB7XG4gICAgY29uc3QgY29tcG9uZW50Q29udGVudCA9IHRoaXMuY29udGVudFtjbGFzc05hbWVdO1xuXG4gICAgaWYgKCFjb21wb25lbnRDb250ZW50KSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiB1bmRlZmluZWQsXG4gICAgICAgIGFjdHVhbExhbmc6IHJlcXVlc3RlZExhbmcsXG4gICAgICAgIHNob3VsZFdhcm46IGZhbHNlLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBUcnkgcmVxdWVzdGVkIGxhbmd1YWdlIGZpcnN0XG4gICAgY29uc3QgcmVxdWVzdGVkQ29udGVudCA9IGNvbXBvbmVudENvbnRlbnQuQ29udGVudFtyZXF1ZXN0ZWRMYW5nXTtcbiAgICBpZiAocmVxdWVzdGVkQ29udGVudD8uW2tleV0pIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IHJlcXVlc3RlZENvbnRlbnRba2V5XSxcbiAgICAgICAgYWN0dWFsTGFuZzogcmVxdWVzdGVkTGFuZyxcbiAgICAgICAgc2hvdWxkV2FybjogZmFsc2UsXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIExhbmd1YWdlIG5vdCBhdmFpbGFibGUsIHRyeSBmYWxsYmFja3NcbiAgICBjb25zdCB3YXJuaW5nS2V5ID0gYCR7Y2xhc3NOYW1lfS4ke2tleX0uJHtyZXF1ZXN0ZWRMYW5nfWA7XG4gICAgY29uc3Qgc2hvdWxkV2FybiA9ICF0aGlzLndhcm5lZE1pc3NpbmdMYW5ndWFnZXMuaGFzKHdhcm5pbmdLZXkpO1xuXG4gICAgaWYgKHNob3VsZFdhcm4pIHtcbiAgICAgIHRoaXMud2FybmVkTWlzc2luZ0xhbmd1YWdlcy5hZGQod2FybmluZ0tleSk7XG4gICAgfVxuXG4gICAgLy8gVHJ5IGRlZmF1bHQgbGFuZ3VhZ2VcbiAgICBpZiAocmVxdWVzdGVkTGFuZyAhPT0gdGhpcy5kZWZhdWx0TGFuZykge1xuICAgICAgY29uc3QgZGVmYXVsdENvbnRlbnQgPSBjb21wb25lbnRDb250ZW50LkNvbnRlbnRbdGhpcy5kZWZhdWx0TGFuZ107XG4gICAgICBpZiAoZGVmYXVsdENvbnRlbnQ/LltrZXldKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudDogZGVmYXVsdENvbnRlbnRba2V5XSxcbiAgICAgICAgICBhY3R1YWxMYW5nOiB0aGlzLmRlZmF1bHRMYW5nLFxuICAgICAgICAgIHNob3VsZFdhcm4sXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVHJ5IGZpcnN0IGF2YWlsYWJsZSBsYW5ndWFnZVxuICAgIGZvciAoY29uc3QgYXZhaWxhYmxlTGFuZyBvZiB0aGlzLmF2YWlsYWJsZUxhbmd1YWdlcykge1xuICAgICAgY29uc3QgYXZhaWxhYmxlQ29udGVudCA9IGNvbXBvbmVudENvbnRlbnQuQ29udGVudFthdmFpbGFibGVMYW5nXTtcbiAgICAgIGlmIChhdmFpbGFibGVDb250ZW50Py5ba2V5XSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRlbnQ6IGF2YWlsYWJsZUNvbnRlbnRba2V5XSxcbiAgICAgICAgICBhY3R1YWxMYW5nOiBhdmFpbGFibGVMYW5nLFxuICAgICAgICAgIHNob3VsZFdhcm4sXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbnRlbnQ6IHVuZGVmaW5lZCxcbiAgICAgIGFjdHVhbExhbmc6IHJlcXVlc3RlZExhbmcsXG4gICAgICBzaG91bGRXYXJuLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRoZSBjdXJyZW50IGxhbmd1YWdlIHdoZW5ldmVyIGl0IGNoYW5nZXMuXG4gICAqIFVzZSB0aGlzIHRvIHN1YnNjcmliZSB0byBsYW5ndWFnZSBjaGFuZ2VzIGluIGNvbXBvbmVudHMuXG4gICAqL1xuICBnZXQgY3VycmVudExhbmckKCk6IE9ic2VydmFibGU8TGFuZ09wdGlvbj4ge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkTGFuZy5hc09ic2VydmFibGUoKS5waXBlKFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgIHNoYXJlUmVwbGF5KDEpIC8vIEVuc3VyZSBuZXcgc3Vic2NyaWJlcnMgZ2V0IHRoZSBjdXJyZW50IHZhbHVlXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGN1cnJlbnQgbGFuZ3VhZ2Ugc3luY2hyb25vdXNseS5cbiAgICovXG4gIGdldCBjdXJyZW50TGFuZygpOiBMYW5nT3B0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZExhbmcudmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGFycmF5IG9mIGF2YWlsYWJsZSBsYW5ndWFnZXMgZGV0ZWN0ZWQgZnJvbSBjb250ZW50LlxuICAgKi9cbiAgZ2V0IGF2YWlsYWJsZUxhbmdzKCk6IExhbmdPcHRpb25bXSB7XG4gICAgcmV0dXJuIFsuLi50aGlzLmF2YWlsYWJsZUxhbmd1YWdlc107XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBkZWZhdWx0IGxhbmd1YWdlLlxuICAgKi9cbiAgZ2V0IGRlZmF1bHRMYW5ndWFnZSgpOiBMYW5nT3B0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5kZWZhdWx0TGFuZztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGN1cnJlbnQgbGFuZ3VhZ2UgYW5kIHBlcnNpc3QgaXQgdG8gbG9jYWxTdG9yYWdlLlxuICAgKiBUaGlzIHdpbGwgdHJpZ2dlciB1cGRhdGVzIGluIGFsbCByZWFjdGl2ZSBjb250ZW50IHN1YnNjcmlwdGlvbnMuXG4gICAqXG4gICAqIFZhbGlkYXRlcyB0aGF0IHRoZSBsYW5ndWFnZSBpcyBhdmFpbGFibGUgYW5kIHdhcm5zIGlmIG5vdC5cbiAgICpcbiAgICogQHBhcmFtIGxhbmcgLSBUaGUgbGFuZ3VhZ2UgdG8gc2V0XG4gICAqL1xuICBzZXRMYW5nKGxhbmc6IExhbmdPcHRpb24pOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuYXZhaWxhYmxlTGFuZ3VhZ2VzLmluY2x1ZGVzKGxhbmcpKSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGBMYW5nU2VydmljZTogTGFuZ3VhZ2UgXCIke2xhbmd9XCIgaXMgbm90IGF2YWlsYWJsZS4gQXZhaWxhYmxlIGxhbmd1YWdlczpgLFxuICAgICAgICB0aGlzLmF2YWlsYWJsZUxhbmd1YWdlc1xuICAgICAgKTtcbiAgICAgIGNvbnNvbGUud2FybihgTGFuZ1NlcnZpY2U6IEZhbGxpbmcgYmFjayB0byBkZWZhdWx0IGxhbmd1YWdlIFwiJHt0aGlzLmRlZmF1bHRMYW5nfVwiYCk7XG4gICAgICBsYW5nID0gdGhpcy5kZWZhdWx0TGFuZztcbiAgICB9XG5cbiAgICB0aGlzLnNlbGVjdGVkTGFuZy5uZXh0KGxhbmcpO1xuICAgIExvY2FsU3RvcmFnZVNlcnZpY2Uuc2V0PExhbmdPcHRpb24+KExBTkcsIGxhbmcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBjb250ZW50IGZvciBhIGNvbXBvbmVudCBjbGFzcyBhbmQga2V5IChsZWdhY3kgbWV0aG9kKS5cbiAgICpcbiAgICogQGRlcHJlY2F0ZWQgVXNlIGdldFRleHQoKSBvciBnZXRDb250ZW50KCkgZm9yIGJldHRlciB0eXBlIHNhZmV0eVxuICAgKi9cbiAgVGV4dChjbGFzc05hbWU6IHN0cmluZyk6IExhbmd1YWdlVGV4dCB7XG4gICAgY29uc3QgY29tcG9uZW50Q29udGVudCA9IHRoaXMuY29udGVudFtjbGFzc05hbWVdO1xuICAgIHJldHVybiBjb21wb25lbnRDb250ZW50Py5Db250ZW50W3RoaXMuc2VsZWN0ZWRMYW5nLnZhbHVlXSB8fCB7fTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYSBzaW5nbGUgY29udGVudCBzdHJpbmcgc3luY2hyb25vdXNseSBmb3IgdGhlIGN1cnJlbnQgbGFuZ3VhZ2UuXG4gICAqIFByb3ZpZGVzIGludGVsbGlnZW50IGZhbGxiYWNrIHdpdGggd2FybmluZ3MgZm9yIG1pc3NpbmcgdHJhbnNsYXRpb25zLlxuICAgKlxuICAgKiBAcGFyYW0gY2xhc3NOYW1lIC0gVGhlIGNvbXBvbmVudCBjbGFzcyBuYW1lXG4gICAqIEBwYXJhbSBrZXkgLSBUaGUgdGV4dCBrZXlcbiAgICogQHBhcmFtIGZhbGxiYWNrIC0gT3B0aW9uYWwgZmFsbGJhY2sgdGV4dCBpZiBrZXkgaXMgbm90IGZvdW5kXG4gICAqIEByZXR1cm5zIFRoZSB0ZXh0IHN0cmluZyBvciBmYWxsYmFja1xuICAgKi9cbiAgZ2V0VGV4dChjbGFzc05hbWU6IHN0cmluZywga2V5OiBzdHJpbmcsIGZhbGxiYWNrPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCByZXN1bHQgPSB0aGlzLmdldEJlc3RBdmFpbGFibGVDb250ZW50KGNsYXNzTmFtZSwga2V5LCB0aGlzLnNlbGVjdGVkTGFuZy52YWx1ZSk7XG5cbiAgICBpZiAocmVzdWx0LnNob3VsZFdhcm4gJiYgcmVzdWx0LmFjdHVhbExhbmcgIT09IHRoaXMuc2VsZWN0ZWRMYW5nLnZhbHVlKSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGBMYW5nU2VydmljZTogQ29udGVudCBcIiR7Y2xhc3NOYW1lfS4ke2tleX1cIiBub3QgYXZhaWxhYmxlIGluIFwiJHt0aGlzLnNlbGVjdGVkTGFuZy52YWx1ZX1cIi5gLFxuICAgICAgICBgVXNpbmcgXCIke3Jlc3VsdC5hY3R1YWxMYW5nfVwiIGluc3RlYWQuIEF2YWlsYWJsZSBsYW5ndWFnZXM6YCxcbiAgICAgICAgdGhpcy5hdmFpbGFibGVMYW5ndWFnZXNcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdC5jb250ZW50IHx8IGZhbGxiYWNrIHx8IGBbJHtjbGFzc05hbWV9LiR7a2V5fV1gO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhIHJlYWN0aXZlIE9ic2VydmFibGUgZm9yIGEgc3BlY2lmaWMgdGV4dCBrZXkgdGhhdCB1cGRhdGVzIHdoZW4gbGFuZ3VhZ2UgY2hhbmdlcy5cbiAgICogVGhpcyBpcyB0aGUgcmVjb21tZW5kZWQgbWV0aG9kIGZvciBjb21wb25lbnRzIHRoYXQgbmVlZCByZWFjdGl2ZSBjb250ZW50LlxuICAgKiBQcm92aWRlcyBpbnRlbGxpZ2VudCBmYWxsYmFjayB3aXRoIHdhcm5pbmdzIGZvciBtaXNzaW5nIHRyYW5zbGF0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIGNsYXNzTmFtZSAtIFRoZSBjb21wb25lbnQgY2xhc3MgbmFtZVxuICAgKiBAcGFyYW0ga2V5IC0gVGhlIHRleHQga2V5XG4gICAqIEBwYXJhbSBmYWxsYmFjayAtIE9wdGlvbmFsIGZhbGxiYWNrIHRleHQgaWYga2V5IGlzIG5vdCBmb3VuZFxuICAgKiBAcmV0dXJucyBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIHRleHQgc3RyaW5nIHdoZW5ldmVyIGxhbmd1YWdlIGNoYW5nZXNcbiAgICovXG4gIGdldENvbnRlbnQoY2xhc3NOYW1lOiBzdHJpbmcsIGtleTogc3RyaW5nLCBmYWxsYmFjaz86IHN0cmluZyk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuY3VycmVudExhbmckLnBpcGUoXG4gICAgICBtYXAobGFuZyA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuZ2V0QmVzdEF2YWlsYWJsZUNvbnRlbnQoY2xhc3NOYW1lLCBrZXksIGxhbmcpO1xuXG4gICAgICAgIGlmIChyZXN1bHQuc2hvdWxkV2FybiAmJiByZXN1bHQuYWN0dWFsTGFuZyAhPT0gbGFuZykge1xuICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgIGBMYW5nU2VydmljZTogQ29udGVudCBcIiR7Y2xhc3NOYW1lfS4ke2tleX1cIiBub3QgYXZhaWxhYmxlIGluIFwiJHtsYW5nfVwiLmAsXG4gICAgICAgICAgICBgVXNpbmcgXCIke3Jlc3VsdC5hY3R1YWxMYW5nfVwiIGluc3RlYWQuIEF2YWlsYWJsZSBsYW5ndWFnZXM6YCxcbiAgICAgICAgICAgIHRoaXMuYXZhaWxhYmxlTGFuZ3VhZ2VzXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXN1bHQuY29udGVudCB8fCBmYWxsYmFjayB8fCBgWyR7Y2xhc3NOYW1lfS4ke2tleX1dYDtcbiAgICAgIH0pLFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHJlYWN0aXZlIGNvbnRlbnQgZm9yIG11bHRpcGxlIGtleXMgYXQgb25jZS5cbiAgICogUHJvdmlkZXMgaW50ZWxsaWdlbnQgZmFsbGJhY2sgd2l0aCB3YXJuaW5ncyBmb3IgbWlzc2luZyB0cmFuc2xhdGlvbnMuXG4gICAqXG4gICAqIEBwYXJhbSBjbGFzc05hbWUgLSBUaGUgY29tcG9uZW50IGNsYXNzIG5hbWVcbiAgICogQHBhcmFtIGtleXMgLSBBcnJheSBvZiB0ZXh0IGtleXMgdG8gcmV0cmlldmVcbiAgICogQHJldHVybnMgT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIGFuIG9iamVjdCB3aXRoIGFsbCByZXF1ZXN0ZWQga2V5c1xuICAgKi9cbiAgZ2V0TXVsdGlwbGVDb250ZW50KGNsYXNzTmFtZTogc3RyaW5nLCBrZXlzOiBzdHJpbmdbXSk6IE9ic2VydmFibGU8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4ge1xuICAgIHJldHVybiB0aGlzLmN1cnJlbnRMYW5nJC5waXBlKFxuICAgICAgbWFwKGxhbmcgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcblxuICAgICAgICBrZXlzLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICBjb25zdCBjb250ZW50UmVzdWx0ID0gdGhpcy5nZXRCZXN0QXZhaWxhYmxlQ29udGVudChjbGFzc05hbWUsIGtleSwgbGFuZyk7XG5cbiAgICAgICAgICBpZiAoY29udGVudFJlc3VsdC5zaG91bGRXYXJuICYmIGNvbnRlbnRSZXN1bHQuYWN0dWFsTGFuZyAhPT0gbGFuZykge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgICBgTGFuZ1NlcnZpY2U6IENvbnRlbnQgXCIke2NsYXNzTmFtZX0uJHtrZXl9XCIgbm90IGF2YWlsYWJsZSBpbiBcIiR7bGFuZ31cIi5gLFxuICAgICAgICAgICAgICBgVXNpbmcgXCIke2NvbnRlbnRSZXN1bHQuYWN0dWFsTGFuZ31cIiBpbnN0ZWFkLmBcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmVzdWx0W2tleV0gPSBjb250ZW50UmVzdWx0LmNvbnRlbnQgfHwgYFske2NsYXNzTmFtZX0uJHtrZXl9XWA7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9KSxcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKChwcmV2LCBjdXJyKSA9PiBKU09OLnN0cmluZ2lmeShwcmV2KSA9PT0gSlNPTi5zdHJpbmdpZnkoY3VycikpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhIGNvbnRlbnQga2V5IGV4aXN0cyBmb3IgYSBjb21wb25lbnQgaW4gYW55IGF2YWlsYWJsZSBsYW5ndWFnZS5cbiAgICpcbiAgICogQHBhcmFtIGNsYXNzTmFtZSAtIFRoZSBjb21wb25lbnQgY2xhc3MgbmFtZVxuICAgKiBAcGFyYW0ga2V5IC0gVGhlIHRleHQga2V5XG4gICAqIEByZXR1cm5zIFRydWUgaWYgdGhlIGtleSBleGlzdHMgaW4gYW55IGxhbmd1YWdlXG4gICAqL1xuICBoYXNDb250ZW50KGNsYXNzTmFtZTogc3RyaW5nLCBrZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGNsYXNzQ29udGVudCA9IHRoaXMuY29udGVudFtjbGFzc05hbWVdO1xuICAgIGlmICghY2xhc3NDb250ZW50KSByZXR1cm4gZmFsc2U7XG5cbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyhjbGFzc0NvbnRlbnQuQ29udGVudCkuc29tZShcbiAgICAgIGxhbmdDb250ZW50ID0+IGxhbmdDb250ZW50ICYmIHR5cGVvZiBsYW5nQ29udGVudFtrZXldID09PSAnc3RyaW5nJ1xuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgYSBjb250ZW50IGtleSBleGlzdHMgZm9yIGEgY29tcG9uZW50IGluIGEgc3BlY2lmaWMgbGFuZ3VhZ2UuXG4gICAqXG4gICAqIEBwYXJhbSBjbGFzc05hbWUgLSBUaGUgY29tcG9uZW50IGNsYXNzIG5hbWVcbiAgICogQHBhcmFtIGtleSAtIFRoZSB0ZXh0IGtleVxuICAgKiBAcGFyYW0gbGFuZyAtIFRoZSBsYW5ndWFnZSB0byBjaGVjayAoZGVmYXVsdHMgdG8gY3VycmVudCBsYW5ndWFnZSlcbiAgICogQHJldHVybnMgVHJ1ZSBpZiB0aGUga2V5IGV4aXN0cyBpbiB0aGUgc3BlY2lmaWVkIGxhbmd1YWdlXG4gICAqL1xuICBoYXNDb250ZW50SW5MYW5ndWFnZShjbGFzc05hbWU6IHN0cmluZywga2V5OiBzdHJpbmcsIGxhbmc/OiBMYW5nT3B0aW9uKTogYm9vbGVhbiB7XG4gICAgY29uc3QgdGFyZ2V0TGFuZyA9IGxhbmcgfHwgdGhpcy5jdXJyZW50TGFuZztcbiAgICBjb25zdCBjbGFzc0NvbnRlbnQgPSB0aGlzLmNvbnRlbnRbY2xhc3NOYW1lXT8uQ29udGVudFt0YXJnZXRMYW5nXTtcbiAgICByZXR1cm4gY2xhc3NDb250ZW50ICYmIHR5cGVvZiBjbGFzc0NvbnRlbnRba2V5XSA9PT0gJ3N0cmluZyc7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGF2YWlsYWJsZSBsYW5ndWFnZXMgZm9yIGEgc3BlY2lmaWMgY29tcG9uZW50LlxuICAgKlxuICAgKiBAcGFyYW0gY2xhc3NOYW1lIC0gVGhlIGNvbXBvbmVudCBjbGFzcyBuYW1lXG4gICAqIEByZXR1cm5zIEFycmF5IG9mIGxhbmd1YWdlIGNvZGVzIGF2YWlsYWJsZSBmb3IgdGhlIGNvbXBvbmVudFxuICAgKi9cbiAgZ2V0QXZhaWxhYmxlTGFuZ3VhZ2VzRm9yQ29tcG9uZW50KGNsYXNzTmFtZTogc3RyaW5nKTogTGFuZ09wdGlvbltdIHtcbiAgICBjb25zdCBjbGFzc0NvbnRlbnQgPSB0aGlzLmNvbnRlbnRbY2xhc3NOYW1lXTtcbiAgICBpZiAoIWNsYXNzQ29udGVudCkgcmV0dXJuIFtdO1xuXG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKGNsYXNzQ29udGVudC5Db250ZW50KS5maWx0ZXIoXG4gICAgICBsYW5nID0+IGNsYXNzQ29udGVudC5Db250ZW50W2xhbmddICYmIE9iamVjdC5rZXlzKGNsYXNzQ29udGVudC5Db250ZW50W2xhbmddKS5sZW5ndGggPiAwXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgbWlzc2luZyBjb250ZW50IGtleXMgZm9yIGEgY29tcG9uZW50IGluIGEgc3BlY2lmaWMgbGFuZ3VhZ2UuXG4gICAqIFVzZWZ1bCBmb3IgaWRlbnRpZnlpbmcgaW5jb21wbGV0ZSB0cmFuc2xhdGlvbnMuXG4gICAqXG4gICAqIEBwYXJhbSBjbGFzc05hbWUgLSBUaGUgY29tcG9uZW50IGNsYXNzIG5hbWVcbiAgICogQHBhcmFtIGxhbmcgLSBUaGUgbGFuZ3VhZ2UgdG8gY2hlY2tcbiAgICogQHBhcmFtIHJlZmVyZW5jZUxhbmcgLSBUaGUgcmVmZXJlbmNlIGxhbmd1YWdlIHRvIGNvbXBhcmUgYWdhaW5zdCAoZGVmYXVsdHMgdG8gZGVmYXVsdCBsYW5ndWFnZSlcbiAgICogQHJldHVybnMgQXJyYXkgb2YgbWlzc2luZyBrZXlzXG4gICAqL1xuICBnZXRNaXNzaW5nQ29udGVudEtleXMoY2xhc3NOYW1lOiBzdHJpbmcsIGxhbmc6IExhbmdPcHRpb24sIHJlZmVyZW5jZUxhbmc/OiBMYW5nT3B0aW9uKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IHJlZkxhbmcgPSByZWZlcmVuY2VMYW5nIHx8IHRoaXMuZGVmYXVsdExhbmc7XG4gICAgY29uc3QgY2xhc3NDb250ZW50ID0gdGhpcy5jb250ZW50W2NsYXNzTmFtZV07XG5cbiAgICBpZiAoIWNsYXNzQ29udGVudCkgcmV0dXJuIFtdO1xuXG4gICAgY29uc3QgcmVmZXJlbmNlQ29udGVudCA9IGNsYXNzQ29udGVudC5Db250ZW50W3JlZkxhbmddIHx8IHt9O1xuICAgIGNvbnN0IHRhcmdldENvbnRlbnQgPSBjbGFzc0NvbnRlbnQuQ29udGVudFtsYW5nXSB8fCB7fTtcblxuICAgIHJldHVybiBPYmplY3Qua2V5cyhyZWZlcmVuY2VDb250ZW50KS5maWx0ZXIoXG4gICAgICBrZXkgPT4gIXRhcmdldENvbnRlbnRba2V5XSB8fCB0eXBlb2YgdGFyZ2V0Q29udGVudFtrZXldICE9PSAnc3RyaW5nJ1xuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXIgb3IgdXBkYXRlIGNvbnRlbnQgZm9yIGEgY29tcG9uZW50IGR5bmFtaWNhbGx5LlxuICAgKiBUaGlzIGFsbG93cyByZWdpc3RlcmluZyBjb250ZW50IGF0IHJ1bnRpbWUgd2l0aG91dCBBUFBfSU5JVElBTElaRVIuXG4gICAqXG4gICAqIEBwYXJhbSBjbGFzc05hbWUgLSBUaGUgY29tcG9uZW50IGNsYXNzIG5hbWVcbiAgICogQHBhcmFtIGNvbnRlbnQgLSBUaGUgbXVsdGlsaW5ndWFsIGNvbnRlbnQgb2JqZWN0XG4gICAqIEBwYXJhbSBtZXJnZSAtIFdoZXRoZXIgdG8gbWVyZ2Ugd2l0aCBleGlzdGluZyBjb250ZW50IChkZWZhdWx0OiB0cnVlKVxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIHRoaXMubGFuZ1NlcnZpY2UucmVnaXN0ZXJDb250ZW50KCdNeUNvbXBvbmVudCcsIHtcbiAgICogICBbTEFOR1VBR0VTLkVTXTogeyB0aXRsZTogJ1TDrXR1bG8nLCBkZXNjcmlwdGlvbjogJ0Rlc2NyaXBjacOzbicgfSxcbiAgICogICBbTEFOR1VBR0VTLkVOXTogeyB0aXRsZTogJ1RpdGxlJywgZGVzY3JpcHRpb246ICdEZXNjcmlwdGlvbicgfVxuICAgKiB9KTtcbiAgICogYGBgXG4gICAqL1xuICByZWdpc3RlckNvbnRlbnQoY2xhc3NOYW1lOiBzdHJpbmcsIGNvbnRlbnQ6IExhbmd1YWdlc0NvbnRlbnQsIG1lcmdlOiBib29sZWFuID0gdHJ1ZSk6IHZvaWQge1xuICAgIGlmICghY2xhc3NOYW1lKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdMYW5nU2VydmljZTogY2xhc3NOYW1lIGlzIHJlcXVpcmVkIGZvciByZWdpc3RlckNvbnRlbnQnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIWNvbnRlbnQgfHwgdHlwZW9mIGNvbnRlbnQgIT09ICdvYmplY3QnKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdMYW5nU2VydmljZTogSW52YWxpZCBjb250ZW50IHByb3ZpZGVkIGZvciByZWdpc3RlckNvbnRlbnQnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zb2xlLmxvZyhgTGFuZ1NlcnZpY2U6IFJlZ2lzdGVyaW5nIGNvbnRlbnQgZm9yIFwiJHtjbGFzc05hbWV9XCJgLCB7XG4gICAgICBtZXJnZSxcbiAgICAgIGxhbmd1YWdlczogT2JqZWN0LmtleXMoY29udGVudCksXG4gICAgfSk7XG5cbiAgICAvLyBJbml0aWFsaXplIGNvbXBvbmVudCBjb250ZW50IGlmIGl0IGRvZXNuJ3QgZXhpc3RcbiAgICBpZiAoIXRoaXMuY29udGVudFtjbGFzc05hbWVdKSB7XG4gICAgICB0aGlzLmNvbnRlbnRbY2xhc3NOYW1lXSA9IG5ldyBUZXh0Q29udGVudCh7fSk7XG4gICAgfVxuXG4gICAgLy8gTWVyZ2Ugb3IgcmVwbGFjZSBjb250ZW50IGZvciBlYWNoIGxhbmd1YWdlXG4gICAgT2JqZWN0LmVudHJpZXMoY29udGVudCkuZm9yRWFjaCgoW2xhbmcsIGxhbmdDb250ZW50XSkgPT4ge1xuICAgICAgaWYgKCFsYW5nQ29udGVudCB8fCB0eXBlb2YgbGFuZ0NvbnRlbnQgIT09ICdvYmplY3QnKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihgTGFuZ1NlcnZpY2U6IEludmFsaWQgY29udGVudCBmb3IgbGFuZ3VhZ2UgXCIke2xhbmd9XCIgaW4gXCIke2NsYXNzTmFtZX1cImApO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICghdGhpcy5jb250ZW50W2NsYXNzTmFtZV0uQ29udGVudFtsYW5nXSkge1xuICAgICAgICB0aGlzLmNvbnRlbnRbY2xhc3NOYW1lXS5Db250ZW50W2xhbmddID0ge307XG4gICAgICB9XG5cbiAgICAgIGlmIChtZXJnZSkge1xuICAgICAgICB0aGlzLmNvbnRlbnRbY2xhc3NOYW1lXS5Db250ZW50W2xhbmddID0ge1xuICAgICAgICAgIC4uLnRoaXMuY29udGVudFtjbGFzc05hbWVdLkNvbnRlbnRbbGFuZ10sXG4gICAgICAgICAgLi4ubGFuZ0NvbnRlbnQsXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmNvbnRlbnRbY2xhc3NOYW1lXS5Db250ZW50W2xhbmddID0geyAuLi5sYW5nQ29udGVudCB9O1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gVXBkYXRlIGF2YWlsYWJsZSBsYW5ndWFnZXNcbiAgICB0aGlzLmRldGVjdEF2YWlsYWJsZUxhbmd1YWdlcygpO1xuXG4gICAgY29uc29sZS5sb2coYExhbmdTZXJ2aWNlOiBDb250ZW50IHJlZ2lzdGVyZWQgc3VjY2Vzc2Z1bGx5IGZvciBcIiR7Y2xhc3NOYW1lfVwiYCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIG11bHRpcGxlIGNvbnRlbnQgcmVnaXN0cmF0aW9ucyBhdCBvbmNlLlxuICAgKlxuICAgKiBAcGFyYW0gY29udGVudE1hcCAtIE1hcCBvZiBjbGFzc05hbWUgdG8gY29udGVudFxuICAgKiBAcGFyYW0gbWVyZ2UgLSBXaGV0aGVyIHRvIG1lcmdlIHdpdGggZXhpc3RpbmcgY29udGVudCAoZGVmYXVsdDogdHJ1ZSlcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiB0aGlzLmxhbmdTZXJ2aWNlLnJlZ2lzdGVyTXVsdGlwbGVDb250ZW50KHtcbiAgICogICAnQ29tcG9uZW50MSc6IHsgW0xBTkdVQUdFUy5FU106IHsga2V5MTogJ3ZhbG9yMScgfSB9LFxuICAgKiAgICdDb21wb25lbnQyJzogeyBbTEFOR1VBR0VTLkVOXTogeyBrZXkyOiAndmFsdWUyJyB9IH1cbiAgICogfSk7XG4gICAqIGBgYFxuICAgKi9cbiAgcmVnaXN0ZXJNdWx0aXBsZUNvbnRlbnQoXG4gICAgY29udGVudE1hcDogUmVjb3JkPHN0cmluZywgTGFuZ3VhZ2VzQ29udGVudD4sXG4gICAgbWVyZ2U6IGJvb2xlYW4gPSB0cnVlXG4gICk6IHZvaWQge1xuICAgIGlmICghY29udGVudE1hcCB8fCB0eXBlb2YgY29udGVudE1hcCAhPT0gJ29iamVjdCcpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0xhbmdTZXJ2aWNlOiBJbnZhbGlkIGNvbnRlbnRNYXAgcHJvdmlkZWQgZm9yIHJlZ2lzdGVyTXVsdGlwbGVDb250ZW50Jyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc29sZS5sb2coJ0xhbmdTZXJ2aWNlOiBSZWdpc3RlcmluZyBtdWx0aXBsZSBjb250ZW50IGVudHJpZXMnLCB7XG4gICAgICBjbGFzc2VzOiBPYmplY3Qua2V5cyhjb250ZW50TWFwKSxcbiAgICAgIG1lcmdlLFxuICAgIH0pO1xuXG4gICAgT2JqZWN0LmVudHJpZXMoY29udGVudE1hcCkuZm9yRWFjaCgoW2NsYXNzTmFtZSwgY29udGVudF0pID0+IHtcbiAgICAgIHRoaXMucmVnaXN0ZXJDb250ZW50KGNsYXNzTmFtZSwgY29udGVudCwgbWVyZ2UpO1xuICAgIH0pO1xuXG4gICAgY29uc29sZS5sb2coJ0xhbmdTZXJ2aWNlOiBNdWx0aXBsZSBjb250ZW50IHJlZ2lzdHJhdGlvbiBjb21wbGV0ZWQnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgY29udGVudCBmb3IgYSBzcGVjaWZpYyBjb21wb25lbnQuXG4gICAqXG4gICAqIEBwYXJhbSBjbGFzc05hbWUgLSBUaGUgY29tcG9uZW50IGNsYXNzIG5hbWUgdG8gcmVtb3ZlXG4gICAqL1xuICByZW1vdmVDb250ZW50KGNsYXNzTmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCFjbGFzc05hbWUpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0xhbmdTZXJ2aWNlOiBjbGFzc05hbWUgaXMgcmVxdWlyZWQgZm9yIHJlbW92ZUNvbnRlbnQnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jb250ZW50W2NsYXNzTmFtZV0pIHtcbiAgICAgIGRlbGV0ZSB0aGlzLmNvbnRlbnRbY2xhc3NOYW1lXTtcbiAgICAgIHRoaXMuZGV0ZWN0QXZhaWxhYmxlTGFuZ3VhZ2VzKCk7XG4gICAgICBjb25zb2xlLmxvZyhgTGFuZ1NlcnZpY2U6IENvbnRlbnQgcmVtb3ZlZCBmb3IgXCIke2NsYXNzTmFtZX1cImApO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLndhcm4oYExhbmdTZXJ2aWNlOiBObyBjb250ZW50IGZvdW5kIGZvciBcIiR7Y2xhc3NOYW1lfVwiIHRvIHJlbW92ZWApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYSBsaXN0IG9mIGFsbCByZWdpc3RlcmVkIGNvbXBvbmVudCBjbGFzc2VzLlxuICAgKlxuICAgKiBAcmV0dXJucyBBcnJheSBvZiByZWdpc3RlcmVkIGNsYXNzIG5hbWVzXG4gICAqL1xuICBnZXRSZWdpc3RlcmVkQ2xhc3NlcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuY29udGVudCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBjb21wbGV0ZSBjb250ZW50IGNvbmZpZ3VyYXRpb24gKGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMpLlxuICAgKiBSZXR1cm5zIGEgZGVlcCBjb3B5IHRvIHByZXZlbnQgYWNjaWRlbnRhbCBtdXRhdGlvbnMuXG4gICAqXG4gICAqIEByZXR1cm5zIENvbXBsZXRlIGNvbnRlbnQgY29uZmlndXJhdGlvblxuICAgKi9cbiAgZ2V0Q29udGVudENvbmZpZ3VyYXRpb24oKTogUHJvdmlkZXIge1xuICAgIHJldHVybiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuY29udGVudCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIENsZWFyIGFsbCBjb250ZW50IGFuZCByZXNldCB0byBpbml0aWFsIHN0YXRlLlxuICAgKiBVc2VmdWwgZm9yIHRlc3Rpbmcgb3IgY29tcGxldGUgcmVpbml0aWFsaXphdGlvbi5cbiAgICovXG4gIGNsZWFyQWxsQ29udGVudCgpOiB2b2lkIHtcbiAgICBjb25zb2xlLmxvZygnTGFuZ1NlcnZpY2U6IENsZWFyaW5nIGFsbCBjb250ZW50Jyk7XG4gICAgdGhpcy5jb250ZW50ID0ge307XG4gICAgdGhpcy5hdmFpbGFibGVMYW5ndWFnZXMgPSBbTEFOR1VBR0VTLkVTXTsgLy8gUmVzZXQgdG8gZGVmYXVsdFxuICAgIHRoaXMud2FybmVkTWlzc2luZ0xhbmd1YWdlcy5jbGVhcigpO1xuICAgIGNvbnNvbGUubG9nKCdMYW5nU2VydmljZTogQWxsIGNvbnRlbnQgY2xlYXJlZCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBjb250ZW50IHdpdGggaW50ZXJwb2xhdGlvbiBzdXBwb3J0LlxuICAgKiBSZXRyaWV2ZXMgY29udGVudCBhbmQgcmVwbGFjZXMgcGxhY2Vob2xkZXJzIHdpdGggcHJvdmlkZWQgdmFsdWVzLlxuICAgKlxuICAgKiBAcGFyYW0gY2xhc3NOYW1lIC0gVGhlIGNvbXBvbmVudCBjbGFzcyBuYW1lXG4gICAqIEBwYXJhbSBrZXkgLSBUaGUgdGV4dCBrZXlcbiAgICogQHBhcmFtIGludGVycG9sYXRpb25EYXRhIC0gT2JqZWN0IHdpdGggdmFsdWVzIHRvIGludGVycG9sYXRlXG4gICAqIEBwYXJhbSBmYWxsYmFjayAtIE9wdGlvbmFsIGZhbGxiYWNrIHRleHQgaWYga2V5IGlzIG5vdCBmb3VuZFxuICAgKiBAcmV0dXJucyBUZXh0IHdpdGggaW50ZXJwb2xhdGVkIHZhbHVlc1xuICAgKi9cbiAgZ2V0VGV4dFdpdGhJbnRlcnBvbGF0aW9uKFxuICAgIGNsYXNzTmFtZTogc3RyaW5nLFxuICAgIGtleTogc3RyaW5nLFxuICAgIGludGVycG9sYXRpb25EYXRhPzogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVtYmVyPixcbiAgICBmYWxsYmFjaz86IHN0cmluZ1xuICApOiBzdHJpbmcge1xuICAgIGNvbnN0IGNvbnRlbnQgPSB0aGlzLmdldFRleHQoY2xhc3NOYW1lLCBrZXksIGZhbGxiYWNrKTtcbiAgICByZXR1cm4gdGhpcy5pbnRlcnBvbGF0ZVN0cmluZyhjb250ZW50LCBpbnRlcnBvbGF0aW9uRGF0YSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHJlYWN0aXZlIGNvbnRlbnQgd2l0aCBpbnRlcnBvbGF0aW9uIHN1cHBvcnQuXG4gICAqIFJldHVybnMgYW4gT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIGludGVycG9sYXRlZCBjb250ZW50IHdoZW4gbGFuZ3VhZ2UgY2hhbmdlcy5cbiAgICpcbiAgICogQHBhcmFtIGNsYXNzTmFtZSAtIFRoZSBjb21wb25lbnQgY2xhc3MgbmFtZVxuICAgKiBAcGFyYW0ga2V5IC0gVGhlIHRleHQga2V5XG4gICAqIEBwYXJhbSBpbnRlcnBvbGF0aW9uRGF0YSAtIE9iamVjdCB3aXRoIHZhbHVlcyB0byBpbnRlcnBvbGF0ZVxuICAgKiBAcGFyYW0gZmFsbGJhY2sgLSBPcHRpb25hbCBmYWxsYmFjayB0ZXh0IGlmIGtleSBpcyBub3QgZm91bmRcbiAgICogQHJldHVybnMgT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIGludGVycG9sYXRlZCB0ZXh0XG4gICAqL1xuICBnZXRDb250ZW50V2l0aEludGVycG9sYXRpb24oXG4gICAgY2xhc3NOYW1lOiBzdHJpbmcsXG4gICAga2V5OiBzdHJpbmcsXG4gICAgaW50ZXJwb2xhdGlvbkRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBudW1iZXI+LFxuICAgIGZhbGxiYWNrPzogc3RyaW5nXG4gICk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Q29udGVudChjbGFzc05hbWUsIGtleSwgZmFsbGJhY2spLnBpcGUoXG4gICAgICBtYXAoY29udGVudCA9PiB0aGlzLmludGVycG9sYXRlU3RyaW5nKGNvbnRlbnQsIGludGVycG9sYXRpb25EYXRhKSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEludGVycG9sYXRlIGEgc3RyaW5nIHdpdGggcHJvdmlkZWQgdmFsdWVzLlxuICAgKiBSZXBsYWNlcyBwbGFjZWhvbGRlcnMgbGlrZSB7e2tleX19IG9yIHtrZXl9IHdpdGggYWN0dWFsIHZhbHVlcy5cbiAgICpcbiAgICogQHBhcmFtIGNvbnRlbnQgLSBDb250ZW50IHN0cmluZyB3aXRoIHBsYWNlaG9sZGVyc1xuICAgKiBAcGFyYW0gdmFsdWVzIC0gVmFsdWVzIHRvIGludGVycG9sYXRlXG4gICAqIEByZXR1cm5zIEludGVycG9sYXRlZCBzdHJpbmdcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBpbnRlcnBvbGF0ZVN0cmluZygnSGVsbG8ge3tuYW1lfX0hJywgeyBuYW1lOiAnV29ybGQnIH0pXG4gICAqIC8vIFJldHVybnM6ICdIZWxsbyBXb3JsZCEnXG4gICAqIGBgYFxuICAgKi9cbiAgcHJpdmF0ZSBpbnRlcnBvbGF0ZVN0cmluZyhjb250ZW50OiBzdHJpbmcsIHZhbHVlcz86IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bWJlcj4pOiBzdHJpbmcge1xuICAgIGlmICghdmFsdWVzIHx8ICFjb250ZW50KSB7XG4gICAgICByZXR1cm4gY29udGVudDtcbiAgICB9XG5cbiAgICByZXR1cm4gY29udGVudC5yZXBsYWNlKC9cXHtcXHs/KFxcdyspXFx9P1xcfS9nLCAobWF0Y2gsIGtleSkgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSB2YWx1ZXNba2V5XTtcbiAgICAgIHJldHVybiB2YWx1ZSAhPT0gdW5kZWZpbmVkID8gU3RyaW5nKHZhbHVlKSA6IG1hdGNoO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIExlZ2FjeSBmdW5jdGlvbiBlcXVpdmFsZW50IHRvIHRoZSBvbGQgZnJvbUNvbnRlbnRXaXRoSW50ZXJwb2xhdGlvbi5cbiAgICogUHJvdmlkZXMgcmVhY3RpdmUgY29udGVudCB3aXRoIGludGVycG9sYXRpb24gc3VwcG9ydCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS5cbiAgICpcbiAgICogQHBhcmFtIGNsYXNzTmFtZSAtIFRoZSBjb21wb25lbnQgY2xhc3MgbmFtZVxuICAgKiBAcGFyYW0ga2V5IC0gVGhlIHRleHQga2V5XG4gICAqIEBwYXJhbSBpbnRlcnBvbGF0aW9uRGF0YSAtIE9iamVjdCB3aXRoIHZhbHVlcyB0byBpbnRlcnBvbGF0ZVxuICAgKiBAcGFyYW0gZmFsbGJhY2sgLSBPcHRpb25hbCBmYWxsYmFjayB0ZXh0IGlmIGtleSBpcyBub3QgZm91bmRcbiAgICogQHJldHVybnMgT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIGludGVycG9sYXRlZCB0ZXh0XG4gICAqXG4gICAqIEBkZXByZWNhdGVkIFVzZSBnZXRDb250ZW50V2l0aEludGVycG9sYXRpb24gaW5zdGVhZFxuICAgKi9cbiAgZnJvbUNvbnRlbnRXaXRoSW50ZXJwb2xhdGlvbihcbiAgICBjbGFzc05hbWU6IHN0cmluZyxcbiAgICBrZXk6IHN0cmluZyxcbiAgICBpbnRlcnBvbGF0aW9uRGF0YT86IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bWJlcj4sXG4gICAgZmFsbGJhY2s/OiBzdHJpbmdcbiAgKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRDb250ZW50V2l0aEludGVycG9sYXRpb24oY2xhc3NOYW1lLCBrZXksIGludGVycG9sYXRpb25EYXRhLCBmYWxsYmFjayk7XG4gIH1cblxuICAvLyBMZWdhY3kgZ2V0dGVycy9zZXR0ZXJzIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5XG4gIGdldCBMYW5nKCk6IExhbmdPcHRpb24ge1xuICAgIHJldHVybiB0aGlzLmN1cnJlbnRMYW5nO1xuICB9XG5cbiAgc2V0IExhbmcobGFuZzogTGFuZ09wdGlvbikge1xuICAgIHRoaXMuc2V0TGFuZyhsYW5nKTtcbiAgfVxufVxuIl19