simpo-component-library 3.6.917 → 3.6.919

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 (47) hide show
  1. package/esm2022/lib/directive/background-directive.mjs +16 -5
  2. package/esm2022/lib/ecommerce/sections/cart/cart.component.mjs +5 -60
  3. package/esm2022/lib/ecommerce/sections/featured-products/featured-products.component.mjs +58 -60
  4. package/esm2022/lib/ecommerce/sections/product-desc/product-desc.component.mjs +1 -56
  5. package/esm2022/lib/elements/below-image-card/below-image-card.component.mjs +3 -3
  6. package/esm2022/lib/elements/covering-image-card/covering-image-card.component.mjs +3 -3
  7. package/esm2022/lib/elements/simpo-button/simpo-button.component.mjs +5 -3
  8. package/esm2022/lib/elements/top-of-image-card/top-of-image-card.component.mjs +3 -3
  9. package/esm2022/lib/sections/appointment-form/appointment-form.component.mjs +2 -2
  10. package/esm2022/lib/sections/banner-carousel/banner-carousel.component.mjs +2 -2
  11. package/esm2022/lib/sections/banner-grid-section/banner-grid-section.component.mjs +2 -2
  12. package/esm2022/lib/sections/banner-section/banner-section.component.mjs +2 -2
  13. package/esm2022/lib/sections/button-grid-section/button-grid-section.component.mjs +2 -2
  14. package/esm2022/lib/sections/carousel-banner/carousel-banner.component.mjs +2 -2
  15. package/esm2022/lib/sections/condensed-and-gradient/condensed-and-gradient.component.mjs +2 -2
  16. package/esm2022/lib/sections/countdown-banner/countdown-banner.component.mjs +2 -2
  17. package/esm2022/lib/sections/footer-section/footer-section.component.mjs +2 -2
  18. package/esm2022/lib/sections/header-section/header-section.component.mjs +2 -2
  19. package/esm2022/lib/sections/header-text/header-text.component.mjs +2 -2
  20. package/esm2022/lib/sections/image-background/image-background/image-background.component.mjs +2 -2
  21. package/esm2022/lib/sections/image-section/image-section.component.mjs +2 -2
  22. package/esm2022/lib/sections/logo-showcase/logo-showcase.component.mjs +18 -8
  23. package/esm2022/lib/sections/navbar-section/navbar-section.component.mjs +2 -2
  24. package/esm2022/lib/sections/new-services/new-services.component.mjs +2 -2
  25. package/esm2022/lib/sections/new-testimonials/new-testimonials.component.mjs +2 -2
  26. package/esm2022/lib/sections/overlapping-image/overlapping-image.component.mjs +2 -2
  27. package/esm2022/lib/sections/pricing-section/pricing-section.component.mjs +2 -2
  28. package/esm2022/lib/sections/product-info-section/product-info-section.component.mjs +2 -2
  29. package/esm2022/lib/sections/service-section/service-section.component.mjs +2 -2
  30. package/esm2022/lib/sections/team-member-section/team-member-section.component.mjs +2 -2
  31. package/esm2022/lib/sections/text-image-section/text-image-section.component.mjs +2 -2
  32. package/esm2022/lib/sections/text-section/text-section.component.mjs +2 -2
  33. package/esm2022/lib/sections/video-section/video-section.component.mjs +3 -3
  34. package/esm2022/lib/services/rest.service.mjs +4 -17
  35. package/esm2022/lib/tokens/api-token.mjs +2 -2
  36. package/fesm2022/simpo-component-library.mjs +130 -233
  37. package/fesm2022/simpo-component-library.mjs.map +1 -1
  38. package/lib/directive/background-directive.d.ts +2 -1
  39. package/lib/ecommerce/sections/cart/cart.component.d.ts +0 -1
  40. package/lib/ecommerce/sections/product-desc/product-desc.component.d.ts +0 -1
  41. package/lib/elements/simpo-button/simpo-button.component.d.ts +2 -1
  42. package/lib/sections/logo-showcase/logo-showcase.component.d.ts +4 -1
  43. package/lib/services/rest.service.d.ts +1 -5
  44. package/lib/tokens/api-token.d.ts +0 -1
  45. package/package.json +1 -1
  46. package/simpo-component-library-3.6.919.tgz +0 -0
  47. package/simpo-component-library-3.6.917.tgz +0 -0
@@ -168,7 +168,7 @@ export class CountdownBannerComponent extends BaseSection {
168
168
  }
169
169
  }
170
170
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CountdownBannerComponent, deps: [{ token: i1.EventsService }, { token: PLATFORM_ID }], target: i0.ɵɵFactoryTarget.Component }); }
171
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: CountdownBannerComponent, isStandalone: true, selector: "simpo-countdown-banner", inputs: { edit: "edit", data: "data", customClass: "customClass", nextComponentColor: "nextComponentColor", index: "index", delete: "delete", isHeaderRenderer: "isHeaderRenderer" }, usesInheritance: true, ngImport: i0, template: "<section>\n <div [id]=\"data?.id\" simpoHover (hovering)=\"showEditTabs($event)\" class=\"sale-wrapper total-container\"\n [attr.style]=\"customClass\" [simpoBackground]=\"style?.background\" [simpoOverlay]=\"style?.background\">\n <div #mainContainer [id]=\"data?.id\" [spacingHorizontal]=\"stylesLayout\" [simpoLayout]=\"stylesLayout\"\n class=\"sale-bar\">\n <!-- LEFT TEXT -->\n <div class=\"sale-text\">\n <simpo-text-editor *ngIf=\"content?.inputText?.[0] as countdownText\" [(value)]=\"countdownText.value\" [editable]=\"edit || false\" [sectionId]=\"data?.id\" [inputTextIndex]=\"0\"></simpo-text-editor>\n </div>\n\n <!-- TIMER -->\n <div class=\"sale-timer\" [style.color]=\"getContrastColor(style?.background?.accentColor)\">\n <div class=\"time-card\" [ngStyle]=\"{'background':getAccentBackground() }\">\n <span>{{ getDays(content?.endDate)}}</span>\n <small>DAY</small>\n </div>\n <div class=\"time-card\" [ngStyle]=\"{'background':getAccentBackground() }\">\n <span>{{ getHours(content?.endDate) }}</span>\n <small>HOUR</small>\n </div>\n <div class=\"time-card\" [ngStyle]=\"{'background':getAccentBackground() }\">\n <span>{{ getMinutes(content?.endDate) }}</span>\n <small>MIN</small>\n </div>\n <div class=\"time-card\" [ngStyle]=\"{'background':getAccentBackground() }\">\n <span>{{ getSeconds(content?.endDate) }}</span>\n <small>SEC</small>\n </div>\n </div>\n\n <!-- RIGHT ACTION -->\n <div class=\"sale-action\">\n <ng-container *ngIf=\"data?.action?.display\">\n <div *ngFor=\"let button of data?.action?.buttons\">\n <app-button-element [buttonContent]=\"button.content\" [buttonStyle]=\"button.styles\"\n [buttonId]=\"button.id\" [sectionId]=\"data?.id\"\n [color]=\"data?.styles?.background?.accentColor\" [edit]=\"edit\"\n [backgroundInfo]=\"data?.styles?.background\"></app-button-element>\n </div>\n </ng-container>\n </div>\n </div>\n\n <!-- Divider -->\n <ng-container *ngIf=\"style?.devider?.display\">\n <simpo-svg-divider [dividerType]=\"style?.devider?.deviderType\"\n [color]=\"nextComponentColor?.color\"></simpo-svg-divider>\n </ng-container>\n\n <!-- EDIT SELECTOR -->\n <div [ngClass]=\"{ hover_effect: edit }\" *ngIf=\"showEditors\">\n <simpo-hover-elements [data]=\"data\" [index]=\"index\" [editOptions]=\"edit\"></simpo-hover-elements>\n </div>\n\n <!-- DELETE SELECTOR -->\n <div *ngIf=\"showDelete\" [ngClass]=\"{ hover_effect: delete }\">\n <simpo-delete-hover-element [data]=\"data\" [index]=\"index\"></simpo-delete-hover-element>\n </div>\n </div>\n</section>", styles: [".sale-wrapper{width:100%}.total-container{height:auto;position:relative}.sale-bar{width:100%;color:#fff;display:flex;align-items:center;justify-content:space-between;gap:24px;padding:8px 32px}.sale-text{font-size:18px;font-weight:700;white-space:nowrap}.sale-timer{display:flex;align-items:baseline;gap:6px}.time-card{background-color:#fff;padding:5px 12px;border-radius:20px;display:flex;align-items:baseline;gap:4px;white-space:nowrap}.time-card span{font-size:15px;font-weight:800}.time-card small{font-size:11px;font-weight:600;opacity:.85}.sale-action{display:flex;align-items:center;gap:20px}.shop-button{background-color:#fff;color:#1c2a39;border:none;padding:5px 14px;border-radius:30px;font-size:14px;font-weight:500;cursor:pointer;transition:.3s ease}.shop-button:hover{background-color:#f2f2f2}.close-icon{font-size:20px;cursor:pointer;opacity:.8}.close-icon:hover{opacity:1}@media (max-width: 768px){.sale-bar{flex-direction:column;gap:20px;text-align:center}.sale-action{justify-content:center}}\n"], dependencies: [{ kind: "ngmodule", type: SimpoElementsModule }, { kind: "component", type: i2.SimpoButtonComponent, selector: "app-button-element", inputs: ["buttonContent", "buttonStyle", "buttonId", "color", "sectionId", "edit", "backgroundInfo", "disabled", "loading", "isFullWidth"] }, { kind: "component", type: i3.SvgDividerComponent, selector: "simpo-svg-divider", inputs: ["dividerType", "color"] }, { kind: "ngmodule", type: SimpoComponentModule }, { kind: "component", type: i4.HoverElementsComponent, selector: "simpo-hover-elements", inputs: ["data", "index", "editOptions", "isMerged", "isEcommerce"], outputs: ["edit"] }, { kind: "component", type: i5.DeleteHoverElementComponent, selector: "simpo-delete-hover-element", inputs: ["index", "data"], outputs: ["edit"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: TextEditorComponent, selector: "simpo-text-editor", inputs: ["value", "editable", "isRTE", "sectionId", "label", "type", "inputTextIndex", "itemIndex"], outputs: ["valueChange"] }, { kind: "directive", type: BackgroundDirective, selector: "[simpoBackground]", inputs: ["simpoBackground", "scrollValue"] }, { kind: "directive", type: HoverDirective, selector: "[simpoHover]", outputs: ["hovering"] }, { kind: "directive", type: OverlayDirective, selector: "[simpoOverlay]", inputs: ["simpoOverlay"] }, { kind: "directive", type: SpacingHorizontalDirective, selector: "[spacingHorizontal]", inputs: ["spacingHorizontal", "isHeader"] }, { kind: "directive", type: ContentFitDirective, selector: "[simpoLayout]", inputs: ["simpoLayout"] }] }); }
171
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: CountdownBannerComponent, isStandalone: true, selector: "simpo-countdown-banner", inputs: { edit: "edit", data: "data", customClass: "customClass", nextComponentColor: "nextComponentColor", index: "index", delete: "delete", isHeaderRenderer: "isHeaderRenderer" }, usesInheritance: true, ngImport: i0, template: "<section>\n <div [id]=\"data?.id\" simpoHover (hovering)=\"showEditTabs($event)\" class=\"sale-wrapper total-container\"\n [attr.style]=\"customClass\" [simpoBackground]=\"style?.background\" [simpoOverlay]=\"style?.background\">\n <div #mainContainer [id]=\"data?.id\" [spacingHorizontal]=\"stylesLayout\" [simpoLayout]=\"stylesLayout\"\n class=\"sale-bar\">\n <!-- LEFT TEXT -->\n <div class=\"sale-text\">\n <simpo-text-editor *ngIf=\"content?.inputText?.[0] as countdownText\" [(value)]=\"countdownText.value\" [editable]=\"edit || false\" [sectionId]=\"data?.id\" [inputTextIndex]=\"0\"></simpo-text-editor>\n </div>\n\n <!-- TIMER -->\n <div class=\"sale-timer\" [style.color]=\"getContrastColor(style?.background?.accentColor)\">\n <div class=\"time-card\" [ngStyle]=\"{'background':getAccentBackground() }\">\n <span>{{ getDays(content?.endDate)}}</span>\n <small>DAY</small>\n </div>\n <div class=\"time-card\" [ngStyle]=\"{'background':getAccentBackground() }\">\n <span>{{ getHours(content?.endDate) }}</span>\n <small>HOUR</small>\n </div>\n <div class=\"time-card\" [ngStyle]=\"{'background':getAccentBackground() }\">\n <span>{{ getMinutes(content?.endDate) }}</span>\n <small>MIN</small>\n </div>\n <div class=\"time-card\" [ngStyle]=\"{'background':getAccentBackground() }\">\n <span>{{ getSeconds(content?.endDate) }}</span>\n <small>SEC</small>\n </div>\n </div>\n\n <!-- RIGHT ACTION -->\n <div class=\"sale-action\">\n <ng-container *ngIf=\"data?.action?.display\">\n <div *ngFor=\"let button of data?.action?.buttons\">\n <app-button-element [buttonContent]=\"button.content\" [buttonStyle]=\"button.styles\"\n [buttonId]=\"button.id\" [sectionId]=\"data?.id\"\n [color]=\"data?.styles?.background?.accentColor\" [edit]=\"edit\"\n [backgroundInfo]=\"data?.styles?.background\"></app-button-element>\n </div>\n </ng-container>\n </div>\n </div>\n\n <!-- Divider -->\n <ng-container *ngIf=\"style?.devider?.display\">\n <simpo-svg-divider [dividerType]=\"style?.devider?.deviderType\"\n [color]=\"nextComponentColor?.color\"></simpo-svg-divider>\n </ng-container>\n\n <!-- EDIT SELECTOR -->\n <div [ngClass]=\"{ hover_effect: edit }\" *ngIf=\"showEditors\">\n <simpo-hover-elements [data]=\"data\" [index]=\"index\" [editOptions]=\"edit\"></simpo-hover-elements>\n </div>\n\n <!-- DELETE SELECTOR -->\n <div *ngIf=\"showDelete\" [ngClass]=\"{ hover_effect: delete }\">\n <simpo-delete-hover-element [data]=\"data\" [index]=\"index\"></simpo-delete-hover-element>\n </div>\n </div>\n</section>", styles: [".sale-wrapper{width:100%}.total-container{height:auto;position:relative}.sale-bar{width:100%;color:#fff;display:flex;align-items:center;justify-content:space-between;gap:24px;padding:8px 32px}.sale-text{font-size:18px;font-weight:700;white-space:nowrap}.sale-timer{display:flex;align-items:baseline;gap:6px}.time-card{background-color:#fff;padding:5px 12px;border-radius:20px;display:flex;align-items:baseline;gap:4px;white-space:nowrap}.time-card span{font-size:15px;font-weight:800}.time-card small{font-size:11px;font-weight:600;opacity:.85}.sale-action{display:flex;align-items:center;gap:20px}.shop-button{background-color:#fff;color:#1c2a39;border:none;padding:5px 14px;border-radius:30px;font-size:14px;font-weight:500;cursor:pointer;transition:.3s ease}.shop-button:hover{background-color:#f2f2f2}.close-icon{font-size:20px;cursor:pointer;opacity:.8}.close-icon:hover{opacity:1}@media (max-width: 768px){.sale-bar{flex-direction:column;gap:20px;text-align:center}.sale-action{justify-content:center}}\n"], dependencies: [{ kind: "ngmodule", type: SimpoElementsModule }, { kind: "component", type: i2.SimpoButtonComponent, selector: "app-button-element", inputs: ["buttonContent", "buttonStyle", "buttonId", "color", "sectionId", "edit", "backgroundInfo", "disabled", "loading", "isFullWidth", "itemIndex"] }, { kind: "component", type: i3.SvgDividerComponent, selector: "simpo-svg-divider", inputs: ["dividerType", "color"] }, { kind: "ngmodule", type: SimpoComponentModule }, { kind: "component", type: i4.HoverElementsComponent, selector: "simpo-hover-elements", inputs: ["data", "index", "editOptions", "isMerged", "isEcommerce"], outputs: ["edit"] }, { kind: "component", type: i5.DeleteHoverElementComponent, selector: "simpo-delete-hover-element", inputs: ["index", "data"], outputs: ["edit"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: TextEditorComponent, selector: "simpo-text-editor", inputs: ["value", "editable", "isRTE", "sectionId", "label", "type", "inputTextIndex", "itemIndex"], outputs: ["valueChange"] }, { kind: "directive", type: BackgroundDirective, selector: "[simpoBackground]", inputs: ["simpoBackground", "scrollValue"] }, { kind: "directive", type: HoverDirective, selector: "[simpoHover]", outputs: ["hovering"] }, { kind: "directive", type: OverlayDirective, selector: "[simpoOverlay]", inputs: ["simpoOverlay"] }, { kind: "directive", type: SpacingHorizontalDirective, selector: "[spacingHorizontal]", inputs: ["spacingHorizontal", "isHeader"] }, { kind: "directive", type: ContentFitDirective, selector: "[simpoLayout]", inputs: ["simpoLayout"] }] }); }
172
172
  }
173
173
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CountdownBannerComponent, decorators: [{
174
174
  type: Component,
@@ -202,4 +202,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
202
202
  }], isHeaderRenderer: [{
203
203
  type: Input
204
204
  }] } });
205
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY291bnRkb3duLWJhbm5lci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaW1wby11aS9zcmMvbGliL3NlY3Rpb25zL2NvdW50ZG93bi1iYW5uZXIvY291bnRkb3duLWJhbm5lci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaW1wby11aS9zcmMvbGliL3NlY3Rpb25zL2NvdW50ZG93bi1iYW5uZXIvY291bnRkb3duLWJhbm5lci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULE1BQU0sRUFDTixLQUFLLEVBR0wsV0FBVyxHQUNaLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzNELE9BQU8sRUFBRSxZQUFZLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUlsRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUV2RixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMzRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDekUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDckUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBQzFGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRTlELE9BQU8sV0FBVyxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7OztBQW9CekMsTUFBTSxPQUFPLHdCQUNYLFNB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LENBQUMsU0FBNkI7UUFDaEQsUUFBUSxTQUFTLEVBQUUsQ0FBQztZQUNsQixLQUFLLE1BQU07Z0JBQ1QsT0FBTyxFQUFFLENBQUMsQ0FBQyx5Q0FBeUM7WUFFdEQsS0FBSyxPQUFPO2dCQUNWLE9BQU8sT0FBTyxDQUFDO1lBRWpCLEtBQUssZ0JBQWdCO2dCQUNuQixPQUFPLE9BQU8sQ0FBQztZQUVqQixLQUFLLGVBQWU7Z0JBQ2xCLE9BQU8sUUFBUSxDQUFDO1lBRWxCO2dCQUNFLE9BQU8sRUFBRSxDQUFDLENBQUMsV0FBVztRQUMxQixDQUFDO0lBQ0gsQ0FBQzsrR0EzTFUsd0JBQXdCLCtDQTRCekIsV0FBVzttR0E1QlYsd0JBQXdCLCtSQzVDckMsb3BHQTJEVSwyaUNEN0JOLG1CQUFtQixzWEFDbkIsb0JBQW9CLG1XQUNwQixZQUFZLG1iQUNaLG1CQUFtQiw2TEFDbkIsbUJBQW1CLDBHQUNuQixjQUFjLGdGQUNkLGdCQUFnQixxRkFDaEIsMEJBQTBCLDJHQUUxQixtQkFBbUI7OzRGQUtWLHdCQUF3QjtrQkFsQnBDLFNBQVM7K0JBQ0Usd0JBQXdCLGNBQ3RCLElBQUksV0FDUDt3QkFDUCxtQkFBbUI7d0JBQ25CLG9CQUFvQjt3QkFDcEIsWUFBWTt3QkFDWixtQkFBbUI7d0JBQ25CLG1CQUFtQjt3QkFDbkIsY0FBYzt3QkFDZCxnQkFBZ0I7d0JBQ2hCLDBCQUEwQjt3QkFDMUIsZUFBZTt3QkFDZixtQkFBbUI7cUJBQ3BCOzswQkFnQ0UsTUFBTTsyQkFBQyxXQUFXO3lDQXhCWixJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBSUcsZ0JBQWdCO3NCQUF4QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBJbmplY3QsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgUExBVEZPUk1fSUQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBTaW1wb0VsZW1lbnRzTW9kdWxlIH0gZnJvbSAnLi4vLi4vZWxlbWVudHMvaW5kZXgnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlLCBpc1BsYXRmb3JtQnJvd3NlciB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBTdHlsZXNNb2RlbCB9IGZyb20gJy4uLy4uL3N0eWxlcy9zdHlsZS5tb2RlbCc7XG5pbXBvcnQgeyBFdmVudHNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZXZlbnRzLnNlcnZpY2UnO1xuaW1wb3J0IHsgQmFja2dyb3VuZE1vZGVsLCBMYXlPdXRNb2RlbCB9IGZyb20gJy4uLy4uL3N0eWxlcy9zdHlsZS5tb2RlbCc7XG5pbXBvcnQgeyBUZXh0RWRpdG9yQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vZWxlbWVudHMvdGV4dC1lZGl0b3IvdGV4dC1lZGl0b3IuY29tcG9uZW50JztcbmltcG9ydCB7IENvdW50RG93bkJhbm5lckNvbnRlbnRNb2RhbCwgQ291bnREb3duQmFubmVyU2VjdGlvbiB9IGZyb20gJy4vY291bnRkb3duLWJhbm5lci5jb21wb25lbnQubW9kZWwnO1xuaW1wb3J0IHsgQmFja2dyb3VuZERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS9iYWNrZ3JvdW5kLWRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBIb3ZlckRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS9ob3Zlci1lbGVtZW50LWRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBPdmVybGF5RGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlL292ZXJsYXktZGlyZWN0aXZlJztcbmltcG9ydCB7IEJvcmRlckRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS9ib3JkZXItZGlyZWN0aXZlJztcbmltcG9ydCB7IFNwYWNpbmdIb3Jpem9udGFsRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlL3NwYWNpbmctaG9yaXpvbnRhbC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgQ29udGVudEZpdERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS9jb250ZW50LWZpdC1kaXJlY3RpdmUnO1xuaW1wb3J0IHsgU2ltcG9Db21wb25lbnRNb2R1bGUgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2luZGV4JztcblxuaW1wb3J0IEJhc2VTZWN0aW9uIGZyb20gJy4uL0Jhc2VTZWN0aW9uJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc2ltcG8tY291bnRkb3duLWJhbm5lcicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBTaW1wb0VsZW1lbnRzTW9kdWxlLFxuICAgIFNpbXBvQ29tcG9uZW50TW9kdWxlLFxuICAgIENvbW1vbk1vZHVsZSxcbiAgICBUZXh0RWRpdG9yQ29tcG9uZW50LFxuICAgIEJhY2tncm91bmREaXJlY3RpdmUsXG4gICAgSG92ZXJEaXJlY3RpdmUsXG4gICAgT3ZlcmxheURpcmVjdGl2ZSxcbiAgICBTcGFjaW5nSG9yaXpvbnRhbERpcmVjdGl2ZSxcbiAgICBCb3JkZXJEaXJlY3RpdmUsXG4gICAgQ29udGVudEZpdERpcmVjdGl2ZVxuICBdLFxuICB0ZW1wbGF0ZVVybDogJy4vY291bnRkb3duLWJhbm5lci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9jb3VudGRvd24tYmFubmVyLmNvbXBvbmVudC5jc3MnXG59KVxuZXhwb3J0IGNsYXNzIENvdW50ZG93bkJhbm5lckNvbXBvbmVudFxuICBleHRlbmRzIEJhc2VTZWN0aW9uXG4gIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuXG4gIEBJbnB1dCgpIGVkaXQ/OiBib29sZWFuO1xuICBASW5wdXQoKSBkYXRhPzogQ291bnREb3duQmFubmVyU2VjdGlvbiB8IGFueTtcbiAgQElucHV0KCkgY3VzdG9tQ2xhc3M/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIG5leHRDb21wb25lbnRDb2xvcj86IEJhY2tncm91bmRNb2RlbDtcbiAgQElucHV0KCkgaW5kZXg/OiBudW1iZXI7XG4gIEBJbnB1dCgpIGRlbGV0ZT86IGJvb2xlYW47XG4gIC8vIFdoZW4gcmVuZGVyZWQgZW1iZWRkZWQgaW5zaWRlIGEgaGVhZGVyIChzZWUgSGVhZGVyU2VjdGlvbkNvbXBvbmVudCksXG4gIC8vIHRoaXMgYmFubmVyIG11c3QgYWx3YXlzIHN0YXkgY29tcGFjdCByZWdhcmRsZXNzIG9mIHdoYXRldmVyIHNwYWNpbmcgaXNcbiAgLy8gc3RvcmVkIGluIGl0cyBvd24gZGF0YSDigJQgc2VlIHN0eWxlc0xheW91dCBiZWxvdy5cbiAgQElucHV0KCkgaXNIZWFkZXJSZW5kZXJlcjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHN0eWxlPzogU3R5bGVzTW9kZWw7XG4gIGNvbnRlbnQ/OiBDb3VudERvd25CYW5uZXJDb250ZW50TW9kYWw7XG5cbiAgZGF5czogc3RyaW5nID0gJzAwJztcbiAgaG91cnM6IHN0cmluZyA9ICcwMCc7XG4gIG1pbnV0ZXM6IHN0cmluZyA9ICcwMCc7XG4gIHNlY29uZHM6IHN0cmluZyA9ICcwMCc7XG4gIGludGVydmFsOiBhbnk7XG4gIGJhbm5lclRleHQ6IHN0cmluZyA9ICcnO1xuICB0YXJnZXREYXRlOiBzdHJpbmcgPSBcIjIwMjYtMDItMTdUMDA6MDA6MDBcIjtcbiAgY3VycmVudFRpbWU6IG51bWJlciA9IERhdGUubm93KCk7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZXZlbnRTZXJ2aWNlOiBFdmVudHNTZXJ2aWNlLFxuICAgIEBJbmplY3QoUExBVEZPUk1fSUQpIHByaXZhdGUgcGxhdGZvcm1JZDogb2JqZWN0XG4gICkge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmNvbnRlbnQgPSB0aGlzLmRhdGE/LmNvbnRlbnQ7XG4gICAgdGhpcy5zdHlsZSA9IHRoaXMuZGF0YT8uc3R5bGVzO1xuICAgIHRoaXMuYmFubmVyVGV4dCA9IHRoaXMuY29udGVudD8uaW5wdXRUZXh0WzBdLnZhbHVlID8/ICcnO1xuICAgIGlmIChpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSB7XG4gICAgICB0aGlzLmludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgICB0aGlzLmN1cnJlbnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICAgIH0sIDEwMDApO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIGlmICh0aGlzLmludGVydmFsKSB7XG4gICAgICBjbGVhckludGVydmFsKHRoaXMuaW50ZXJ2YWwpO1xuICAgIH1cbiAgfVxuXG5cbiAgZ2V0RGF5cyhkYXRlU3RyaW5nOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIGlmICghZGF0ZVN0cmluZykgcmV0dXJuIDA7XG5cbiAgICBjb25zdCB0YXJnZXQgPSBuZXcgRGF0ZShkYXRlU3RyaW5nKS5nZXRUaW1lKCk7XG4gICAgaWYgKGlzTmFOKHRhcmdldCkpIHJldHVybiAwO1xuXG4gICAgY29uc3QgZGlmZmVyZW5jZSA9IHRhcmdldCAtIHRoaXMuY3VycmVudFRpbWU7XG4gICAgaWYgKGRpZmZlcmVuY2UgPD0gMCkgcmV0dXJuIDA7XG5cbiAgICByZXR1cm4gTWF0aC5mbG9vcihkaWZmZXJlbmNlIC8gKDEwMDAgKiA2MCAqIDYwICogMjQpKTtcbiAgfVxuXG4gIGdldEhvdXJzKGRhdGVTdHJpbmc6IHN0cmluZyk6IG51bWJlciB7XG4gICAgaWYgKCFkYXRlU3RyaW5nKSByZXR1cm4gMDtcblxuICAgIGNvbnN0IHRhcmdldCA9IG5ldyBEYXRlKGRhdGVTdHJpbmcpLmdldFRpbWUoKTtcbiAgICBpZiAoaXNOYU4odGFyZ2V0KSkgcmV0dXJuIDA7XG5cbiAgICBjb25zdCBkaWZmZXJlbmNlID0gdGFyZ2V0IC0gdGhpcy5jdXJyZW50VGltZTtcbiAgICBpZiAoZGlmZmVyZW5jZSA8PSAwKSByZXR1cm4gMDtcblxuICAgIHJldHVybiBNYXRoLmZsb29yKChkaWZmZXJlbmNlIC8gKDEwMDAgKiA2MCAqIDYwKSkgJSAyNCk7XG4gIH1cblxuICBnZXRNaW51dGVzKGRhdGVTdHJpbmc6IHN0cmluZyk6IG51bWJlciB7XG4gICAgaWYgKCFkYXRlU3RyaW5nKSByZXR1cm4gMDtcblxuICAgIGNvbnN0IHRhcmdldCA9IG5ldyBEYXRlKGRhdGVTdHJpbmcpLmdldFRpbWUoKTtcbiAgICBpZiAoaXNOYU4odGFyZ2V0KSkgcmV0dXJuIDA7XG5cbiAgICBjb25zdCBkaWZmZXJlbmNlID0gdGFyZ2V0IC0gdGhpcy5jdXJyZW50VGltZTtcbiAgICBpZiAoZGlmZmVyZW5jZSA8PSAwKSByZXR1cm4gMDtcblxuICAgIHJldHVybiBNYXRoLmZsb29yKChkaWZmZXJlbmNlIC8gKDEwMDAgKiA2MCkpICUgNjApO1xuICB9XG5cbiAgZ2V0U2Vjb25kcyhkYXRlU3RyaW5nOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIGlmICghZGF0ZVN0cmluZykgcmV0dXJuIDA7XG5cbiAgICBjb25zdCB0YXJnZXQgPSBuZXcgRGF0ZShkYXRlU3RyaW5nKS5nZXRUaW1lKCk7XG4gICAgaWYgKGlzTmFOKHRhcmdldCkpIHJldHVybiAwO1xuXG4gICAgY29uc3QgZGlmZmVyZW5jZSA9IHRhcmdldCAtIHRoaXMuY3VycmVudFRpbWU7XG4gICAgaWYgKGRpZmZlcmVuY2UgPD0gMCkgcmV0dXJuIDA7XG5cbiAgICByZXR1cm4gTWF0aC5mbG9vcigoZGlmZmVyZW5jZSAvIDEwMDApICUgNjApO1xuICB9XG5cbiAgZ2V0IHN0eWxlc0xheW91dCgpIHtcbiAgICBjb25zdCBsYXlvdXQgPSB7IC4uLnRoaXMuc3R5bGU/LmxheW91dCB9IGFzIExheU91dE1vZGVsO1xuICAgIGlmICh0aGlzLmlzSGVhZGVyUmVuZGVyZXIpIHtcbiAgICAgIC8vIERvbid0IGZvcmNlIHNwYWNpbmcgdG8gJ3JlbW92ZScgKDByZW0pIOKAlCB0aGF0J3Mgc3RpbGwgYW4gaW5saW5lXG4gICAgICAvLyBvdmVycmlkZSB0aGF0IGJlYXRzIHRoaXMgY29tcG9uZW50J3Mgb3duIENTUyBwYWRkaW5nICg4cHggMzJweCksXG4gICAgICAvLyBqdXN0IGF0IHRoZSBvcHBvc2l0ZSBleHRyZW1lICh0b28gdGlnaHQgaW5zdGVhZCBvZiB0b28gbG9vc2UpLlxuICAgICAgLy8gT21pdHRpbmcgdGhlc2Uga2V5cyBlbnRpcmVseSBtZWFucyB0aGUgc3BhY2luZyBkaXJlY3RpdmVzJyBvd25cbiAgICAgIC8vIGd1YXJkcyBza2lwIHNldHRpbmcgYW55IGlubGluZSBwYWRkaW5nIGF0IGFsbCAoQ29udGVudEZpdERpcmVjdGl2ZVxuICAgICAgLy8gY2hlY2tzIGBzcGFjZT8udG9wYC9gc3BhY2U/LmJvdHRvbWA7IFNwYWNpbmdIb3Jpem9udGFsRGlyZWN0aXZlJ3NcbiAgICAgIC8vIGRlc2t0b3AgYnJhbmNoIGNhbGxzIHNldFByb3BlcnR5IHdpdGggYW4gaW52YWxpZCB2YWx1ZSB3aGVuXG4gICAgICAvLyBzcGFjaW5nSG9yaXpvbnRhbCBpcyB1bmRlZmluZWQsIHdoaWNoIHRoZSBicm93c2VyIHNpbGVudGx5XG4gICAgICAvLyBpZ25vcmVzKSDigJQgc28gdGhlIENTUydzIG93biBwYWRkaW5nOiA4cHggMzJweCBhcHBsaWVzIHVudG91Y2hlZC5cbiAgICAgIGNvbnN0IHsgc3BhY2luZywgc3BhY2luZ0hvcml6b250YWwsIC4uLnJlc3QgfSA9IGxheW91dCBhcyBhbnk7XG4gICAgICByZXR1cm4gcmVzdCBhcyBMYXlPdXRNb2RlbDtcbiAgICB9XG4gICAgcmV0dXJuIGxheW91dDtcbiAgfVxuXG4gIGdldENvbnRyYXN0Q29sb3IoYmdDb2xvcjogc3RyaW5nIHwgdW5kZWZpbmVkKTogc3RyaW5nIHtcbiAgICBpZiAoIWJnQ29sb3IpIHJldHVybiAnIzAwMDAwMCc7XG5cbiAgICBsZXQgY29sb3JUb0NoZWNrID0gYmdDb2xvcjtcblxuICAgIC8vIElmIGdyYWRpZW50IOKGkiBleHRyYWN0IGZpcnN0IGNvbG9yIGluc2lkZSBsaW5lYXItZ3JhZGllbnQoLi4uKVxuICAgIGlmIChiZ0NvbG9yLmluY2x1ZGVzKCdsaW5lYXItZ3JhZGllbnQnKSkge1xuICAgICAgY29uc3QgbWF0Y2ggPSBiZ0NvbG9yLm1hdGNoKC8oI1swLTlBLUZhLWZdezZ9fHJnYlxcKFteKV0rXFwpKS8pO1xuICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgIGNvbG9yVG9DaGVjayA9IG1hdGNoWzBdO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCByID0gMCwgZyA9IDAsIGIgPSAwO1xuXG4gICAgLy8gSEVYIGZvcm1hdFxuICAgIGlmIChjb2xvclRvQ2hlY2suc3RhcnRzV2l0aCgnIycpKSB7XG4gICAgICBjb25zdCBoZXggPSBjb2xvclRvQ2hlY2sucmVwbGFjZSgnIycsICcnKTtcbiAgICAgIHIgPSBwYXJzZUludChoZXguc3Vic3RyaW5nKDAsIDIpLCAxNik7XG4gICAgICBnID0gcGFyc2VJbnQoaGV4LnN1YnN0cmluZygyLCA0KSwgMTYpO1xuICAgICAgYiA9IHBhcnNlSW50KGhleC5zdWJzdHJpbmcoNCwgNiksIDE2KTtcbiAgICB9XG5cbiAgICAvLyBSR0IgZm9ybWF0XG4gICAgZWxzZSBpZiAoY29sb3JUb0NoZWNrLnN0YXJ0c1dpdGgoJ3JnYicpKSB7XG4gICAgICBjb25zdCB2YWx1ZXMgPSBjb2xvclRvQ2hlY2subWF0Y2goL1xcZCsvZyk7XG4gICAgICBpZiAodmFsdWVzKSB7XG4gICAgICAgIHIgPSArdmFsdWVzWzBdO1xuICAgICAgICBnID0gK3ZhbHVlc1sxXTtcbiAgICAgICAgYiA9ICt2YWx1ZXNbMl07XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgYnJpZ2h0bmVzcyA9IChyICogMjk5ICsgZyAqIDU4NyArIGIgKiAxMTQpIC8gMTAwMDtcblxuICAgIHJldHVybiBicmlnaHRuZXNzID4gMTI4ID8gJyMwMDAwMDAnIDogJyNmZmZmZmYnO1xuICB9XG5cbiAgZ2V0QWNjZW50QmFja2dyb3VuZCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IGJnID0gdGhpcy5zdHlsZT8uYmFja2dyb3VuZDtcblxuICAgIGlmICghYmcpIHJldHVybiAnJztcblxuICAgIGlmIChiZy5hY2NlbnRCYWNrZ3JvdW5kVHlwZSA9PT0gJ1NvbGlkJykge1xuICAgICAgcmV0dXJuIGJnLmFjY2VudENvbG9yO1xuICAgIH1cblxuICAgIGNvbnN0IGFuZ2xlID0gdGhpcy5nZXRHcmFkaWVudERpcmVjdGlvbihiZy5ncmFkaWVudERpcmVjdGlvbik7XG5cbiAgICByZXR1cm4gYW5nbGVcbiAgICAgID8gYGxpbmVhci1ncmFkaWVudCgke2FuZ2xlfSwgJHtiZy5hY2NlbnRDb2xvcn0sICR7Ymcuc2Vjb25kYXJ5QWNjZW50Q29sb3J9KWBcbiAgICAgIDogYGxpbmVhci1ncmFkaWVudCgke2JnLmFjY2VudENvbG9yfSwgJHtiZy5zZWNvbmRhcnlBY2NlbnRDb2xvcn0pYDtcbiAgfVxuICBnZXRHcmFkaWVudERpcmVjdGlvbihkaXJlY3Rpb246IHN0cmluZyB8IHVuZGVmaW5lZCk6IHN0cmluZyB7XG4gICAgc3dpdGNoIChkaXJlY3Rpb24pIHtcbiAgICAgIGNhc2UgJ0RPV04nOlxuICAgICAgICByZXR1cm4gJyc7IC8vIGRlZmF1bHQgdG9wIOKGkiBib3R0b20gKG5vIGFuZ2xlIG5lZWRlZClcblxuICAgICAgY2FzZSAnUklHSFQnOlxuICAgICAgICByZXR1cm4gJzkwZGVnJztcblxuICAgICAgY2FzZSAnRElBR09OQUxfUklHSFQnOlxuICAgICAgICByZXR1cm4gJzQ1ZGVnJztcblxuICAgICAgY2FzZSAnRElBR09OQUxfTEVGVCc6XG4gICAgICAgIHJldHVybiAnMTM1ZGVnJztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICcnOyAvLyBmYWxsYmFja1xuICAgIH1cbiAgfVxufVxuIiwiPHNlY3Rpb24+XG4gICAgPGRpdiBbaWRdPVwiZGF0YT8uaWRcIiBzaW1wb0hvdmVyIChob3ZlcmluZyk9XCJzaG93RWRpdFRhYnMoJGV2ZW50KVwiIGNsYXNzPVwic2FsZS13cmFwcGVyIHRvdGFsLWNvbnRhaW5lclwiXG4gICAgICAgIFthdHRyLnN0eWxlXT1cImN1c3RvbUNsYXNzXCIgW3NpbXBvQmFja2dyb3VuZF09XCJzdHlsZT8uYmFja2dyb3VuZFwiIFtzaW1wb092ZXJsYXldPVwic3R5bGU/LmJhY2tncm91bmRcIj5cbiAgICAgICAgPGRpdiAjbWFpbkNvbnRhaW5lciBbaWRdPVwiZGF0YT8uaWRcIiBbc3BhY2luZ0hvcml6b250YWxdPVwic3R5bGVzTGF5b3V0XCIgW3NpbXBvTGF5b3V0XT1cInN0eWxlc0xheW91dFwiXG4gICAgICAgICAgICBjbGFzcz1cInNhbGUtYmFyXCI+XG4gICAgICAgICAgICA8IS0tIExFRlQgVEVYVCAtLT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzYWxlLXRleHRcIj5cbiAgICAgICAgICAgICAgICA8c2ltcG8tdGV4dC1lZGl0b3IgKm5nSWY9XCJjb250ZW50Py5pbnB1dFRleHQ/LlswXSBhcyBjb3VudGRvd25UZXh0XCIgWyh2YWx1ZSldPVwiY291bnRkb3duVGV4dC52YWx1ZVwiIFtlZGl0YWJsZV09XCJlZGl0IHx8IGZhbHNlXCIgW3NlY3Rpb25JZF09XCJkYXRhPy5pZFwiIFtpbnB1dFRleHRJbmRleF09XCIwXCI+PC9zaW1wby10ZXh0LWVkaXRvcj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8IS0tIFRJTUVSIC0tPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNhbGUtdGltZXJcIiBbc3R5bGUuY29sb3JdPVwiZ2V0Q29udHJhc3RDb2xvcihzdHlsZT8uYmFja2dyb3VuZD8uYWNjZW50Q29sb3IpXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpbWUtY2FyZFwiIFtuZ1N0eWxlXT1cInsnYmFja2dyb3VuZCc6Z2V0QWNjZW50QmFja2dyb3VuZCgpIH1cIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgZ2V0RGF5cyhjb250ZW50Py5lbmREYXRlKX19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8c21hbGw+REFZPC9zbWFsbD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGltZS1jYXJkXCIgW25nU3R5bGVdPVwieydiYWNrZ3JvdW5kJzpnZXRBY2NlbnRCYWNrZ3JvdW5kKCkgfVwiPlxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyBnZXRIb3Vycyhjb250ZW50Py5lbmREYXRlKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPHNtYWxsPkhPVVI8L3NtYWxsPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aW1lLWNhcmRcIiBbbmdTdHlsZV09XCJ7J2JhY2tncm91bmQnOmdldEFjY2VudEJhY2tncm91bmQoKSB9XCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IGdldE1pbnV0ZXMoY29udGVudD8uZW5kRGF0ZSkgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxzbWFsbD5NSU48L3NtYWxsPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aW1lLWNhcmRcIiBbbmdTdHlsZV09XCJ7J2JhY2tncm91bmQnOmdldEFjY2VudEJhY2tncm91bmQoKSB9XCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IGdldFNlY29uZHMoY29udGVudD8uZW5kRGF0ZSkgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxzbWFsbD5TRUM8L3NtYWxsPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDwhLS0gUklHSFQgQUNUSU9OIC0tPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNhbGUtYWN0aW9uXCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImRhdGE/LmFjdGlvbj8uZGlzcGxheVwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBidXR0b24gb2YgZGF0YT8uYWN0aW9uPy5idXR0b25zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YXBwLWJ1dHRvbi1lbGVtZW50IFtidXR0b25Db250ZW50XT1cImJ1dHRvbi5jb250ZW50XCIgW2J1dHRvblN0eWxlXT1cImJ1dHRvbi5zdHlsZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtidXR0b25JZF09XCJidXR0b24uaWRcIiBbc2VjdGlvbklkXT1cImRhdGE/LmlkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29sb3JdPVwiZGF0YT8uc3R5bGVzPy5iYWNrZ3JvdW5kPy5hY2NlbnRDb2xvclwiIFtlZGl0XT1cImVkaXRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtiYWNrZ3JvdW5kSW5mb109XCJkYXRhPy5zdHlsZXM/LmJhY2tncm91bmRcIj48L2FwcC1idXR0b24tZWxlbWVudD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPCEtLSBEaXZpZGVyIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic3R5bGU/LmRldmlkZXI/LmRpc3BsYXlcIj5cbiAgICAgICAgICAgIDxzaW1wby1zdmctZGl2aWRlciBbZGl2aWRlclR5cGVdPVwic3R5bGU/LmRldmlkZXI/LmRldmlkZXJUeXBlXCJcbiAgICAgICAgICAgICAgICBbY29sb3JdPVwibmV4dENvbXBvbmVudENvbG9yPy5jb2xvclwiPjwvc2ltcG8tc3ZnLWRpdmlkZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDwhLS0gRURJVCBTRUxFQ1RPUiAtLT5cbiAgICAgICAgPGRpdiBbbmdDbGFzc109XCJ7IGhvdmVyX2VmZmVjdDogZWRpdCB9XCIgKm5nSWY9XCJzaG93RWRpdG9yc1wiPlxuICAgICAgICAgICAgPHNpbXBvLWhvdmVyLWVsZW1lbnRzIFtkYXRhXT1cImRhdGFcIiBbaW5kZXhdPVwiaW5kZXhcIiBbZWRpdE9wdGlvbnNdPVwiZWRpdFwiPjwvc2ltcG8taG92ZXItZWxlbWVudHM+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwhLS0gREVMRVRFIFNFTEVDVE9SIC0tPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd0RlbGV0ZVwiIFtuZ0NsYXNzXT1cInsgaG92ZXJfZWZmZWN0OiBkZWxldGUgfVwiPlxuICAgICAgICAgICAgPHNpbXBvLWRlbGV0ZS1ob3Zlci1lbGVtZW50IFtkYXRhXT1cImRhdGFcIiBbaW5kZXhdPVwiaW5kZXhcIj48L3NpbXBvLWRlbGV0ZS1ob3Zlci1lbGVtZW50PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvc2VjdGlvbj4iXX0=
205
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY291bnRkb3duLWJhbm5lci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaW1wby11aS9zcmMvbGliL3NlY3Rpb25zL2NvdW50ZG93bi1iYW5uZXIvY291bnRkb3duLWJhbm5lci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaW1wby11aS9zcmMvbGliL3NlY3Rpb25zL2NvdW50ZG93bi1iYW5uZXIvY291bnRkb3duLWJhbm5lci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULE1BQU0sRUFDTixLQUFLLEVBR0wsV0FBVyxHQUNaLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzNELE9BQU8sRUFBRSxZQUFZLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUlsRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUV2RixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMzRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDekUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDckUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBQzFGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRTlELE9BQU8sV0FBVyxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7OztBQW9CekMsTUFBTSxPQUFPLHdCQUNYLFNB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LENBQUMsU0FBNkI7UUFDaEQsUUFBUSxTQUFTLEVBQUUsQ0FBQztZQUNsQixLQUFLLE1BQU07Z0JBQ1QsT0FBTyxFQUFFLENBQUMsQ0FBQyx5Q0FBeUM7WUFFdEQsS0FBSyxPQUFPO2dCQUNWLE9BQU8sT0FBTyxDQUFDO1lBRWpCLEtBQUssZ0JBQWdCO2dCQUNuQixPQUFPLE9BQU8sQ0FBQztZQUVqQixLQUFLLGVBQWU7Z0JBQ2xCLE9BQU8sUUFBUSxDQUFDO1lBRWxCO2dCQUNFLE9BQU8sRUFBRSxDQUFDLENBQUMsV0FBVztRQUMxQixDQUFDO0lBQ0gsQ0FBQzsrR0EzTFUsd0JBQXdCLCtDQTRCekIsV0FBVzttR0E1QlYsd0JBQXdCLCtSQzVDckMsb3BHQTJEVSwyaUNEN0JOLG1CQUFtQixtWUFDbkIsb0JBQW9CLG1XQUNwQixZQUFZLG1iQUNaLG1CQUFtQiw2TEFDbkIsbUJBQW1CLDBHQUNuQixjQUFjLGdGQUNkLGdCQUFnQixxRkFDaEIsMEJBQTBCLDJHQUUxQixtQkFBbUI7OzRGQUtWLHdCQUF3QjtrQkFsQnBDLFNBQVM7K0JBQ0Usd0JBQXdCLGNBQ3RCLElBQUksV0FDUDt3QkFDUCxtQkFBbUI7d0JBQ25CLG9CQUFvQjt3QkFDcEIsWUFBWTt3QkFDWixtQkFBbUI7d0JBQ25CLG1CQUFtQjt3QkFDbkIsY0FBYzt3QkFDZCxnQkFBZ0I7d0JBQ2hCLDBCQUEwQjt3QkFDMUIsZUFBZTt3QkFDZixtQkFBbUI7cUJBQ3BCOzswQkFnQ0UsTUFBTTsyQkFBQyxXQUFXO3lDQXhCWixJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBSUcsZ0JBQWdCO3NCQUF4QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBJbmplY3QsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgUExBVEZPUk1fSUQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBTaW1wb0VsZW1lbnRzTW9kdWxlIH0gZnJvbSAnLi4vLi4vZWxlbWVudHMvaW5kZXgnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlLCBpc1BsYXRmb3JtQnJvd3NlciB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBTdHlsZXNNb2RlbCB9IGZyb20gJy4uLy4uL3N0eWxlcy9zdHlsZS5tb2RlbCc7XG5pbXBvcnQgeyBFdmVudHNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZXZlbnRzLnNlcnZpY2UnO1xuaW1wb3J0IHsgQmFja2dyb3VuZE1vZGVsLCBMYXlPdXRNb2RlbCB9IGZyb20gJy4uLy4uL3N0eWxlcy9zdHlsZS5tb2RlbCc7XG5pbXBvcnQgeyBUZXh0RWRpdG9yQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vZWxlbWVudHMvdGV4dC1lZGl0b3IvdGV4dC1lZGl0b3IuY29tcG9uZW50JztcbmltcG9ydCB7IENvdW50RG93bkJhbm5lckNvbnRlbnRNb2RhbCwgQ291bnREb3duQmFubmVyU2VjdGlvbiB9IGZyb20gJy4vY291bnRkb3duLWJhbm5lci5jb21wb25lbnQubW9kZWwnO1xuaW1wb3J0IHsgQmFja2dyb3VuZERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS9iYWNrZ3JvdW5kLWRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBIb3ZlckRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS9ob3Zlci1lbGVtZW50LWRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBPdmVybGF5RGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlL292ZXJsYXktZGlyZWN0aXZlJztcbmltcG9ydCB7IEJvcmRlckRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS9ib3JkZXItZGlyZWN0aXZlJztcbmltcG9ydCB7IFNwYWNpbmdIb3Jpem9udGFsRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlL3NwYWNpbmctaG9yaXpvbnRhbC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgQ29udGVudEZpdERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZS9jb250ZW50LWZpdC1kaXJlY3RpdmUnO1xuaW1wb3J0IHsgU2ltcG9Db21wb25lbnRNb2R1bGUgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2luZGV4JztcblxuaW1wb3J0IEJhc2VTZWN0aW9uIGZyb20gJy4uL0Jhc2VTZWN0aW9uJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc2ltcG8tY291bnRkb3duLWJhbm5lcicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBTaW1wb0VsZW1lbnRzTW9kdWxlLFxuICAgIFNpbXBvQ29tcG9uZW50TW9kdWxlLFxuICAgIENvbW1vbk1vZHVsZSxcbiAgICBUZXh0RWRpdG9yQ29tcG9uZW50LFxuICAgIEJhY2tncm91bmREaXJlY3RpdmUsXG4gICAgSG92ZXJEaXJlY3RpdmUsXG4gICAgT3ZlcmxheURpcmVjdGl2ZSxcbiAgICBTcGFjaW5nSG9yaXpvbnRhbERpcmVjdGl2ZSxcbiAgICBCb3JkZXJEaXJlY3RpdmUsXG4gICAgQ29udGVudEZpdERpcmVjdGl2ZVxuICBdLFxuICB0ZW1wbGF0ZVVybDogJy4vY291bnRkb3duLWJhbm5lci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9jb3VudGRvd24tYmFubmVyLmNvbXBvbmVudC5jc3MnXG59KVxuZXhwb3J0IGNsYXNzIENvdW50ZG93bkJhbm5lckNvbXBvbmVudFxuICBleHRlbmRzIEJhc2VTZWN0aW9uXG4gIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuXG4gIEBJbnB1dCgpIGVkaXQ/OiBib29sZWFuO1xuICBASW5wdXQoKSBkYXRhPzogQ291bnREb3duQmFubmVyU2VjdGlvbiB8IGFueTtcbiAgQElucHV0KCkgY3VzdG9tQ2xhc3M/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIG5leHRDb21wb25lbnRDb2xvcj86IEJhY2tncm91bmRNb2RlbDtcbiAgQElucHV0KCkgaW5kZXg/OiBudW1iZXI7XG4gIEBJbnB1dCgpIGRlbGV0ZT86IGJvb2xlYW47XG4gIC8vIFdoZW4gcmVuZGVyZWQgZW1iZWRkZWQgaW5zaWRlIGEgaGVhZGVyIChzZWUgSGVhZGVyU2VjdGlvbkNvbXBvbmVudCksXG4gIC8vIHRoaXMgYmFubmVyIG11c3QgYWx3YXlzIHN0YXkgY29tcGFjdCByZWdhcmRsZXNzIG9mIHdoYXRldmVyIHNwYWNpbmcgaXNcbiAgLy8gc3RvcmVkIGluIGl0cyBvd24gZGF0YSDigJQgc2VlIHN0eWxlc0xheW91dCBiZWxvdy5cbiAgQElucHV0KCkgaXNIZWFkZXJSZW5kZXJlcjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHN0eWxlPzogU3R5bGVzTW9kZWw7XG4gIGNvbnRlbnQ/OiBDb3VudERvd25CYW5uZXJDb250ZW50TW9kYWw7XG5cbiAgZGF5czogc3RyaW5nID0gJzAwJztcbiAgaG91cnM6IHN0cmluZyA9ICcwMCc7XG4gIG1pbnV0ZXM6IHN0cmluZyA9ICcwMCc7XG4gIHNlY29uZHM6IHN0cmluZyA9ICcwMCc7XG4gIGludGVydmFsOiBhbnk7XG4gIGJhbm5lclRleHQ6IHN0cmluZyA9ICcnO1xuICB0YXJnZXREYXRlOiBzdHJpbmcgPSBcIjIwMjYtMDItMTdUMDA6MDA6MDBcIjtcbiAgY3VycmVudFRpbWU6IG51bWJlciA9IERhdGUubm93KCk7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZXZlbnRTZXJ2aWNlOiBFdmVudHNTZXJ2aWNlLFxuICAgIEBJbmplY3QoUExBVEZPUk1fSUQpIHByaXZhdGUgcGxhdGZvcm1JZDogb2JqZWN0XG4gICkge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmNvbnRlbnQgPSB0aGlzLmRhdGE/LmNvbnRlbnQ7XG4gICAgdGhpcy5zdHlsZSA9IHRoaXMuZGF0YT8uc3R5bGVzO1xuICAgIHRoaXMuYmFubmVyVGV4dCA9IHRoaXMuY29udGVudD8uaW5wdXRUZXh0WzBdLnZhbHVlID8/ICcnO1xuICAgIGlmIChpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSB7XG4gICAgICB0aGlzLmludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgICB0aGlzLmN1cnJlbnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICAgIH0sIDEwMDApO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIGlmICh0aGlzLmludGVydmFsKSB7XG4gICAgICBjbGVhckludGVydmFsKHRoaXMuaW50ZXJ2YWwpO1xuICAgIH1cbiAgfVxuXG5cbiAgZ2V0RGF5cyhkYXRlU3RyaW5nOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIGlmICghZGF0ZVN0cmluZykgcmV0dXJuIDA7XG5cbiAgICBjb25zdCB0YXJnZXQgPSBuZXcgRGF0ZShkYXRlU3RyaW5nKS5nZXRUaW1lKCk7XG4gICAgaWYgKGlzTmFOKHRhcmdldCkpIHJldHVybiAwO1xuXG4gICAgY29uc3QgZGlmZmVyZW5jZSA9IHRhcmdldCAtIHRoaXMuY3VycmVudFRpbWU7XG4gICAgaWYgKGRpZmZlcmVuY2UgPD0gMCkgcmV0dXJuIDA7XG5cbiAgICByZXR1cm4gTWF0aC5mbG9vcihkaWZmZXJlbmNlIC8gKDEwMDAgKiA2MCAqIDYwICogMjQpKTtcbiAgfVxuXG4gIGdldEhvdXJzKGRhdGVTdHJpbmc6IHN0cmluZyk6IG51bWJlciB7XG4gICAgaWYgKCFkYXRlU3RyaW5nKSByZXR1cm4gMDtcblxuICAgIGNvbnN0IHRhcmdldCA9IG5ldyBEYXRlKGRhdGVTdHJpbmcpLmdldFRpbWUoKTtcbiAgICBpZiAoaXNOYU4odGFyZ2V0KSkgcmV0dXJuIDA7XG5cbiAgICBjb25zdCBkaWZmZXJlbmNlID0gdGFyZ2V0IC0gdGhpcy5jdXJyZW50VGltZTtcbiAgICBpZiAoZGlmZmVyZW5jZSA8PSAwKSByZXR1cm4gMDtcblxuICAgIHJldHVybiBNYXRoLmZsb29yKChkaWZmZXJlbmNlIC8gKDEwMDAgKiA2MCAqIDYwKSkgJSAyNCk7XG4gIH1cblxuICBnZXRNaW51dGVzKGRhdGVTdHJpbmc6IHN0cmluZyk6IG51bWJlciB7XG4gICAgaWYgKCFkYXRlU3RyaW5nKSByZXR1cm4gMDtcblxuICAgIGNvbnN0IHRhcmdldCA9IG5ldyBEYXRlKGRhdGVTdHJpbmcpLmdldFRpbWUoKTtcbiAgICBpZiAoaXNOYU4odGFyZ2V0KSkgcmV0dXJuIDA7XG5cbiAgICBjb25zdCBkaWZmZXJlbmNlID0gdGFyZ2V0IC0gdGhpcy5jdXJyZW50VGltZTtcbiAgICBpZiAoZGlmZmVyZW5jZSA8PSAwKSByZXR1cm4gMDtcblxuICAgIHJldHVybiBNYXRoLmZsb29yKChkaWZmZXJlbmNlIC8gKDEwMDAgKiA2MCkpICUgNjApO1xuICB9XG5cbiAgZ2V0U2Vjb25kcyhkYXRlU3RyaW5nOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIGlmICghZGF0ZVN0cmluZykgcmV0dXJuIDA7XG5cbiAgICBjb25zdCB0YXJnZXQgPSBuZXcgRGF0ZShkYXRlU3RyaW5nKS5nZXRUaW1lKCk7XG4gICAgaWYgKGlzTmFOKHRhcmdldCkpIHJldHVybiAwO1xuXG4gICAgY29uc3QgZGlmZmVyZW5jZSA9IHRhcmdldCAtIHRoaXMuY3VycmVudFRpbWU7XG4gICAgaWYgKGRpZmZlcmVuY2UgPD0gMCkgcmV0dXJuIDA7XG5cbiAgICByZXR1cm4gTWF0aC5mbG9vcigoZGlmZmVyZW5jZSAvIDEwMDApICUgNjApO1xuICB9XG5cbiAgZ2V0IHN0eWxlc0xheW91dCgpIHtcbiAgICBjb25zdCBsYXlvdXQgPSB7IC4uLnRoaXMuc3R5bGU/LmxheW91dCB9IGFzIExheU91dE1vZGVsO1xuICAgIGlmICh0aGlzLmlzSGVhZGVyUmVuZGVyZXIpIHtcbiAgICAgIC8vIERvbid0IGZvcmNlIHNwYWNpbmcgdG8gJ3JlbW92ZScgKDByZW0pIOKAlCB0aGF0J3Mgc3RpbGwgYW4gaW5saW5lXG4gICAgICAvLyBvdmVycmlkZSB0aGF0IGJlYXRzIHRoaXMgY29tcG9uZW50J3Mgb3duIENTUyBwYWRkaW5nICg4cHggMzJweCksXG4gICAgICAvLyBqdXN0IGF0IHRoZSBvcHBvc2l0ZSBleHRyZW1lICh0b28gdGlnaHQgaW5zdGVhZCBvZiB0b28gbG9vc2UpLlxuICAgICAgLy8gT21pdHRpbmcgdGhlc2Uga2V5cyBlbnRpcmVseSBtZWFucyB0aGUgc3BhY2luZyBkaXJlY3RpdmVzJyBvd25cbiAgICAgIC8vIGd1YXJkcyBza2lwIHNldHRpbmcgYW55IGlubGluZSBwYWRkaW5nIGF0IGFsbCAoQ29udGVudEZpdERpcmVjdGl2ZVxuICAgICAgLy8gY2hlY2tzIGBzcGFjZT8udG9wYC9gc3BhY2U/LmJvdHRvbWA7IFNwYWNpbmdIb3Jpem9udGFsRGlyZWN0aXZlJ3NcbiAgICAgIC8vIGRlc2t0b3AgYnJhbmNoIGNhbGxzIHNldFByb3BlcnR5IHdpdGggYW4gaW52YWxpZCB2YWx1ZSB3aGVuXG4gICAgICAvLyBzcGFjaW5nSG9yaXpvbnRhbCBpcyB1bmRlZmluZWQsIHdoaWNoIHRoZSBicm93c2VyIHNpbGVudGx5XG4gICAgICAvLyBpZ25vcmVzKSDigJQgc28gdGhlIENTUydzIG93biBwYWRkaW5nOiA4cHggMzJweCBhcHBsaWVzIHVudG91Y2hlZC5cbiAgICAgIGNvbnN0IHsgc3BhY2luZywgc3BhY2luZ0hvcml6b250YWwsIC4uLnJlc3QgfSA9IGxheW91dCBhcyBhbnk7XG4gICAgICByZXR1cm4gcmVzdCBhcyBMYXlPdXRNb2RlbDtcbiAgICB9XG4gICAgcmV0dXJuIGxheW91dDtcbiAgfVxuXG4gIGdldENvbnRyYXN0Q29sb3IoYmdDb2xvcjogc3RyaW5nIHwgdW5kZWZpbmVkKTogc3RyaW5nIHtcbiAgICBpZiAoIWJnQ29sb3IpIHJldHVybiAnIzAwMDAwMCc7XG5cbiAgICBsZXQgY29sb3JUb0NoZWNrID0gYmdDb2xvcjtcblxuICAgIC8vIElmIGdyYWRpZW50IOKGkiBleHRyYWN0IGZpcnN0IGNvbG9yIGluc2lkZSBsaW5lYXItZ3JhZGllbnQoLi4uKVxuICAgIGlmIChiZ0NvbG9yLmluY2x1ZGVzKCdsaW5lYXItZ3JhZGllbnQnKSkge1xuICAgICAgY29uc3QgbWF0Y2ggPSBiZ0NvbG9yLm1hdGNoKC8oI1swLTlBLUZhLWZdezZ9fHJnYlxcKFteKV0rXFwpKS8pO1xuICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgIGNvbG9yVG9DaGVjayA9IG1hdGNoWzBdO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCByID0gMCwgZyA9IDAsIGIgPSAwO1xuXG4gICAgLy8gSEVYIGZvcm1hdFxuICAgIGlmIChjb2xvclRvQ2hlY2suc3RhcnRzV2l0aCgnIycpKSB7XG4gICAgICBjb25zdCBoZXggPSBjb2xvclRvQ2hlY2sucmVwbGFjZSgnIycsICcnKTtcbiAgICAgIHIgPSBwYXJzZUludChoZXguc3Vic3RyaW5nKDAsIDIpLCAxNik7XG4gICAgICBnID0gcGFyc2VJbnQoaGV4LnN1YnN0cmluZygyLCA0KSwgMTYpO1xuICAgICAgYiA9IHBhcnNlSW50KGhleC5zdWJzdHJpbmcoNCwgNiksIDE2KTtcbiAgICB9XG5cbiAgICAvLyBSR0IgZm9ybWF0XG4gICAgZWxzZSBpZiAoY29sb3JUb0NoZWNrLnN0YXJ0c1dpdGgoJ3JnYicpKSB7XG4gICAgICBjb25zdCB2YWx1ZXMgPSBjb2xvclRvQ2hlY2subWF0Y2goL1xcZCsvZyk7XG4gICAgICBpZiAodmFsdWVzKSB7XG4gICAgICAgIHIgPSArdmFsdWVzWzBdO1xuICAgICAgICBnID0gK3ZhbHVlc1sxXTtcbiAgICAgICAgYiA9ICt2YWx1ZXNbMl07XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgYnJpZ2h0bmVzcyA9IChyICogMjk5ICsgZyAqIDU4NyArIGIgKiAxMTQpIC8gMTAwMDtcblxuICAgIHJldHVybiBicmlnaHRuZXNzID4gMTI4ID8gJyMwMDAwMDAnIDogJyNmZmZmZmYnO1xuICB9XG5cbiAgZ2V0QWNjZW50QmFja2dyb3VuZCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IGJnID0gdGhpcy5zdHlsZT8uYmFja2dyb3VuZDtcblxuICAgIGlmICghYmcpIHJldHVybiAnJztcblxuICAgIGlmIChiZy5hY2NlbnRCYWNrZ3JvdW5kVHlwZSA9PT0gJ1NvbGlkJykge1xuICAgICAgcmV0dXJuIGJnLmFjY2VudENvbG9yO1xuICAgIH1cblxuICAgIGNvbnN0IGFuZ2xlID0gdGhpcy5nZXRHcmFkaWVudERpcmVjdGlvbihiZy5ncmFkaWVudERpcmVjdGlvbik7XG5cbiAgICByZXR1cm4gYW5nbGVcbiAgICAgID8gYGxpbmVhci1ncmFkaWVudCgke2FuZ2xlfSwgJHtiZy5hY2NlbnRDb2xvcn0sICR7Ymcuc2Vjb25kYXJ5QWNjZW50Q29sb3J9KWBcbiAgICAgIDogYGxpbmVhci1ncmFkaWVudCgke2JnLmFjY2VudENvbG9yfSwgJHtiZy5zZWNvbmRhcnlBY2NlbnRDb2xvcn0pYDtcbiAgfVxuICBnZXRHcmFkaWVudERpcmVjdGlvbihkaXJlY3Rpb246IHN0cmluZyB8IHVuZGVmaW5lZCk6IHN0cmluZyB7XG4gICAgc3dpdGNoIChkaXJlY3Rpb24pIHtcbiAgICAgIGNhc2UgJ0RPV04nOlxuICAgICAgICByZXR1cm4gJyc7IC8vIGRlZmF1bHQgdG9wIOKGkiBib3R0b20gKG5vIGFuZ2xlIG5lZWRlZClcblxuICAgICAgY2FzZSAnUklHSFQnOlxuICAgICAgICByZXR1cm4gJzkwZGVnJztcblxuICAgICAgY2FzZSAnRElBR09OQUxfUklHSFQnOlxuICAgICAgICByZXR1cm4gJzQ1ZGVnJztcblxuICAgICAgY2FzZSAnRElBR09OQUxfTEVGVCc6XG4gICAgICAgIHJldHVybiAnMTM1ZGVnJztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICcnOyAvLyBmYWxsYmFja1xuICAgIH1cbiAgfVxufVxuIiwiPHNlY3Rpb24+XG4gICAgPGRpdiBbaWRdPVwiZGF0YT8uaWRcIiBzaW1wb0hvdmVyIChob3ZlcmluZyk9XCJzaG93RWRpdFRhYnMoJGV2ZW50KVwiIGNsYXNzPVwic2FsZS13cmFwcGVyIHRvdGFsLWNvbnRhaW5lclwiXG4gICAgICAgIFthdHRyLnN0eWxlXT1cImN1c3RvbUNsYXNzXCIgW3NpbXBvQmFja2dyb3VuZF09XCJzdHlsZT8uYmFja2dyb3VuZFwiIFtzaW1wb092ZXJsYXldPVwic3R5bGU/LmJhY2tncm91bmRcIj5cbiAgICAgICAgPGRpdiAjbWFpbkNvbnRhaW5lciBbaWRdPVwiZGF0YT8uaWRcIiBbc3BhY2luZ0hvcml6b250YWxdPVwic3R5bGVzTGF5b3V0XCIgW3NpbXBvTGF5b3V0XT1cInN0eWxlc0xheW91dFwiXG4gICAgICAgICAgICBjbGFzcz1cInNhbGUtYmFyXCI+XG4gICAgICAgICAgICA8IS0tIExFRlQgVEVYVCAtLT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzYWxlLXRleHRcIj5cbiAgICAgICAgICAgICAgICA8c2ltcG8tdGV4dC1lZGl0b3IgKm5nSWY9XCJjb250ZW50Py5pbnB1dFRleHQ/LlswXSBhcyBjb3VudGRvd25UZXh0XCIgWyh2YWx1ZSldPVwiY291bnRkb3duVGV4dC52YWx1ZVwiIFtlZGl0YWJsZV09XCJlZGl0IHx8IGZhbHNlXCIgW3NlY3Rpb25JZF09XCJkYXRhPy5pZFwiIFtpbnB1dFRleHRJbmRleF09XCIwXCI+PC9zaW1wby10ZXh0LWVkaXRvcj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8IS0tIFRJTUVSIC0tPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNhbGUtdGltZXJcIiBbc3R5bGUuY29sb3JdPVwiZ2V0Q29udHJhc3RDb2xvcihzdHlsZT8uYmFja2dyb3VuZD8uYWNjZW50Q29sb3IpXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpbWUtY2FyZFwiIFtuZ1N0eWxlXT1cInsnYmFja2dyb3VuZCc6Z2V0QWNjZW50QmFja2dyb3VuZCgpIH1cIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgZ2V0RGF5cyhjb250ZW50Py5lbmREYXRlKX19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8c21hbGw+REFZPC9zbWFsbD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGltZS1jYXJkXCIgW25nU3R5bGVdPVwieydiYWNrZ3JvdW5kJzpnZXRBY2NlbnRCYWNrZ3JvdW5kKCkgfVwiPlxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyBnZXRIb3Vycyhjb250ZW50Py5lbmREYXRlKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPHNtYWxsPkhPVVI8L3NtYWxsPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aW1lLWNhcmRcIiBbbmdTdHlsZV09XCJ7J2JhY2tncm91bmQnOmdldEFjY2VudEJhY2tncm91bmQoKSB9XCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IGdldE1pbnV0ZXMoY29udGVudD8uZW5kRGF0ZSkgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxzbWFsbD5NSU48L3NtYWxsPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aW1lLWNhcmRcIiBbbmdTdHlsZV09XCJ7J2JhY2tncm91bmQnOmdldEFjY2VudEJhY2tncm91bmQoKSB9XCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IGdldFNlY29uZHMoY29udGVudD8uZW5kRGF0ZSkgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxzbWFsbD5TRUM8L3NtYWxsPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDwhLS0gUklHSFQgQUNUSU9OIC0tPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNhbGUtYWN0aW9uXCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImRhdGE/LmFjdGlvbj8uZGlzcGxheVwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBidXR0b24gb2YgZGF0YT8uYWN0aW9uPy5idXR0b25zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YXBwLWJ1dHRvbi1lbGVtZW50IFtidXR0b25Db250ZW50XT1cImJ1dHRvbi5jb250ZW50XCIgW2J1dHRvblN0eWxlXT1cImJ1dHRvbi5zdHlsZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtidXR0b25JZF09XCJidXR0b24uaWRcIiBbc2VjdGlvbklkXT1cImRhdGE/LmlkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29sb3JdPVwiZGF0YT8uc3R5bGVzPy5iYWNrZ3JvdW5kPy5hY2NlbnRDb2xvclwiIFtlZGl0XT1cImVkaXRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtiYWNrZ3JvdW5kSW5mb109XCJkYXRhPy5zdHlsZXM/LmJhY2tncm91bmRcIj48L2FwcC1idXR0b24tZWxlbWVudD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPCEtLSBEaXZpZGVyIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic3R5bGU/LmRldmlkZXI/LmRpc3BsYXlcIj5cbiAgICAgICAgICAgIDxzaW1wby1zdmctZGl2aWRlciBbZGl2aWRlclR5cGVdPVwic3R5bGU/LmRldmlkZXI/LmRldmlkZXJUeXBlXCJcbiAgICAgICAgICAgICAgICBbY29sb3JdPVwibmV4dENvbXBvbmVudENvbG9yPy5jb2xvclwiPjwvc2ltcG8tc3ZnLWRpdmlkZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDwhLS0gRURJVCBTRUxFQ1RPUiAtLT5cbiAgICAgICAgPGRpdiBbbmdDbGFzc109XCJ7IGhvdmVyX2VmZmVjdDogZWRpdCB9XCIgKm5nSWY9XCJzaG93RWRpdG9yc1wiPlxuICAgICAgICAgICAgPHNpbXBvLWhvdmVyLWVsZW1lbnRzIFtkYXRhXT1cImRhdGFcIiBbaW5kZXhdPVwiaW5kZXhcIiBbZWRpdE9wdGlvbnNdPVwiZWRpdFwiPjwvc2ltcG8taG92ZXItZWxlbWVudHM+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwhLS0gREVMRVRFIFNFTEVDVE9SIC0tPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd0RlbGV0ZVwiIFtuZ0NsYXNzXT1cInsgaG92ZXJfZWZmZWN0OiBkZWxldGUgfVwiPlxuICAgICAgICAgICAgPHNpbXBvLWRlbGV0ZS1ob3Zlci1lbGVtZW50IFtkYXRhXT1cImRhdGFcIiBbaW5kZXhdPVwiaW5kZXhcIj48L3NpbXBvLWRlbGV0ZS1ob3Zlci1lbGVtZW50PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvc2VjdGlvbj4iXX0=