@pepperi-addons/ngx-composite-lib 0.4.2-beta.69 → 0.4.2-beta.70

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.
@@ -4,7 +4,7 @@ import { BaseDestroyerDirective } from '@pepperi-addons/ngx-lib';
4
4
  import { BehaviorSubject } from 'rxjs';
5
5
  import * as i0 from "@angular/core";
6
6
  import * as i1 from "@pepperi-addons/ngx-lib";
7
- import * as i2 from "../layout-builder.service";
7
+ import * as i2 from "../layout-builder-internal.service";
8
8
  import * as i3 from "@angular/common";
9
9
  import * as i4 from "@pepperi-addons/ngx-lib/skeleton-loader";
10
10
  import * as i5 from "@pepperi-addons/ngx-lib/size-detector";
@@ -176,12 +176,12 @@ export class PepLayoutComponent extends BaseDestroyerDirective {
176
176
  this.layoutBuilderService.onSectionDragEnd(event);
177
177
  }
178
178
  }
179
- PepLayoutComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: PepLayoutComponent, deps: [{ token: i1.PepCustomizationService }, { token: i1.PepLayoutService }, { token: i2.PepLayoutBuilderService }, { token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component });
179
+ PepLayoutComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: PepLayoutComponent, deps: [{ token: i1.PepCustomizationService }, { token: i1.PepLayoutService }, { token: i2.LayoutBuilderInternalService }, { token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component });
180
180
  PepLayoutComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.2", type: PepLayoutComponent, selector: "pep-layout", inputs: { layoutView: "layoutView", blockTemplate: "blockTemplate", showSkeleton: "showSkeleton" }, outputs: { layoutViewChange: "layoutViewChange", screenTypeChange: "screenTypeChange" }, host: { properties: { "style.padding-inline": "this.paddingInline" } }, viewQueries: [{ propertyName: "skeletonContainer", first: true, predicate: ["skeletonCont"], descendants: true, static: true }, { propertyName: "sectionsContainer", first: true, predicate: ["sectionsCont"], descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "<!-- For the top spacing -->\n<div class=\"top-spacing spacing-{{verticalSpacing}}\" ></div>\n<div #sectionsCont cdkDropListGroup class=\"sections-container gap-{{ sectionsGap }}\" [ngClass]=\"{'preview-state': previewMode }\" \n cdkDropList (cdkDropListDropped)=\"onSectionDropped($event)\" [ngStyle]=\"{'grid-auto-rows': getSectionsTemplateRows()}\"\n >\n <section *ngFor=\"let section of sections$ | async; let i=index;\" \n class=\"draggable-section \" [ngClass]=\"selectedScreenType === 'Phablet' ? 'margin-'+sectionsGap : ''\" [blockTemplate]=\"blockTemplate\"\n [key]=\"section.Key\" [name]=\"section.Name || ('LAYOUT_BUILDER.SECTION' | translate) + ' ' + (i+1)\" [split]=\"section.Split\" [height]=\"section.Height\"\n [columns]=\"section.Columns\" [collapseOnTablet]=\"section.CollapseOnTablet || false\" [hideIn]=\"section.Hide || []\" [columnsGap]=\"columnsGap\"\n >\n </section>\n</div>\n<div #skeletonCont class=\"skeleton-container \">\n <pep-skeleton-loader [rowsNumber]=\"1\" [lastRowOffset]=\"false\" rowHeightType=\"xl\" ></pep-skeleton-loader>\n <div class=\"split-skeleton-container\">\n <pep-skeleton-loader [rowsNumber]=\"1\" [lastRowOffset]=\"false\" rowHeightType=\"max\" ></pep-skeleton-loader>\n <pep-skeleton-loader [rowsNumber]=\"1\" [lastRowOffset]=\"false\" rowHeightType=\"max\" ></pep-skeleton-loader>\n </div>\n <pep-skeleton-loader [rowsNumber]=\"1\" [lastRowOffset]=\"false\" rowHeightType=\"xl\" ></pep-skeleton-loader>\n\n <pep-skeleton-loader [rowsNumber]=\"1\" [lastRowOffset]=\"false\" rowHeightType=\"max\" ></pep-skeleton-loader>\n</div>\n<!-- For the bottom spacing -->\n<div class=\"bottom-spacing spacing-{{verticalSpacing}}\"></div>\n<pep-size-detector></pep-size-detector>", styles: [":host{display:grid;grid-template-areas:\"top-spacing\" \"content\" \"bottom-spacing\";grid-template-rows:auto 1fr auto;height:100%}.top-spacing{grid-area:top-spacing}.top-spacing.spacing-none{height:0}.top-spacing.spacing-sm{height:var(--pep-spacing-sm, .5rem)}.top-spacing.spacing-md{height:var(--pep-spacing-lg, 1rem)}.top-spacing.spacing-lg{height:var(--pep-spacing-2xl, 2rem)}.bottom-spacing{grid-area:bottom-spacing}.bottom-spacing.spacing-none{height:0}.bottom-spacing.spacing-sm{height:var(--pep-spacing-sm, .5rem)}.bottom-spacing.spacing-md{height:var(--pep-spacing-lg, 1rem)}.bottom-spacing.spacing-lg{height:var(--pep-spacing-2xl, 2rem)}.skeleton-container{display:grid;grid-area:content;height:100%;gap:var(--pep-spacing-lg, 1rem);grid-template-rows:auto auto auto 1fr;opacity:0}.skeleton-container .split-skeleton-container{display:grid;height:10rem;gap:var(--pep-spacing-lg, 1rem);grid-auto-flow:column}.sections-container{z-index:11;grid-area:content;width:100%;max-width:inherit;overflow-x:unset;margin:0 auto;position:relative;display:grid;grid-row:1px;height:inherit;opacity:0}.sections-container.gap-none{gap:0}.sections-container.gap-sm{gap:var(--pep-spacing-sm, .5rem)}.sections-container.gap-md{gap:var(--pep-spacing-lg, 1rem)}.sections-container.gap-lg{gap:var(--pep-spacing-2xl, 2rem)}.sections-container .draggable-section{display:block}.sections-container.preview-state section{display:contents}@keyframes in{0%{opacity:0;transform:translateY(-80);filter:blur(20px)}to{transform:translateY(0);opacity:1;filter:blur(0)}}.in{animation-name:in;animation-direction:normal;animation-duration:1.2s;animation-fill-mode:forwards}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i4.PepSkeletonLoaderComponent, selector: "pep-skeleton-loader", inputs: ["rowHeightType", "rowsNumber", "lastRowOffset"] }, { kind: "component", type: i5.PepSizeDetectorComponent, selector: "pep-size-detector", inputs: ["showScreenSize", "useAsWebComponent"], outputs: ["sizeChange"] }, { kind: "directive", type: i6.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i6.CdkDropListGroup, selector: "[cdkDropListGroup]", inputs: ["cdkDropListGroupDisabled"], exportAs: ["cdkDropListGroup"] }, { kind: "component", type: i7.SectionComponent, selector: "section", inputs: ["blockTemplate", "key", "name", "split", "height", "collapseOnTablet", "columns", "hideIn", "columnsGap"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i8.TranslatePipe, name: "translate" }] });
181
181
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: PepLayoutComponent, decorators: [{
182
182
  type: Component,
183
183
  args: [{ selector: 'pep-layout', template: "<!-- For the top spacing -->\n<div class=\"top-spacing spacing-{{verticalSpacing}}\" ></div>\n<div #sectionsCont cdkDropListGroup class=\"sections-container gap-{{ sectionsGap }}\" [ngClass]=\"{'preview-state': previewMode }\" \n cdkDropList (cdkDropListDropped)=\"onSectionDropped($event)\" [ngStyle]=\"{'grid-auto-rows': getSectionsTemplateRows()}\"\n >\n <section *ngFor=\"let section of sections$ | async; let i=index;\" \n class=\"draggable-section \" [ngClass]=\"selectedScreenType === 'Phablet' ? 'margin-'+sectionsGap : ''\" [blockTemplate]=\"blockTemplate\"\n [key]=\"section.Key\" [name]=\"section.Name || ('LAYOUT_BUILDER.SECTION' | translate) + ' ' + (i+1)\" [split]=\"section.Split\" [height]=\"section.Height\"\n [columns]=\"section.Columns\" [collapseOnTablet]=\"section.CollapseOnTablet || false\" [hideIn]=\"section.Hide || []\" [columnsGap]=\"columnsGap\"\n >\n </section>\n</div>\n<div #skeletonCont class=\"skeleton-container \">\n <pep-skeleton-loader [rowsNumber]=\"1\" [lastRowOffset]=\"false\" rowHeightType=\"xl\" ></pep-skeleton-loader>\n <div class=\"split-skeleton-container\">\n <pep-skeleton-loader [rowsNumber]=\"1\" [lastRowOffset]=\"false\" rowHeightType=\"max\" ></pep-skeleton-loader>\n <pep-skeleton-loader [rowsNumber]=\"1\" [lastRowOffset]=\"false\" rowHeightType=\"max\" ></pep-skeleton-loader>\n </div>\n <pep-skeleton-loader [rowsNumber]=\"1\" [lastRowOffset]=\"false\" rowHeightType=\"xl\" ></pep-skeleton-loader>\n\n <pep-skeleton-loader [rowsNumber]=\"1\" [lastRowOffset]=\"false\" rowHeightType=\"max\" ></pep-skeleton-loader>\n</div>\n<!-- For the bottom spacing -->\n<div class=\"bottom-spacing spacing-{{verticalSpacing}}\"></div>\n<pep-size-detector></pep-size-detector>", styles: [":host{display:grid;grid-template-areas:\"top-spacing\" \"content\" \"bottom-spacing\";grid-template-rows:auto 1fr auto;height:100%}.top-spacing{grid-area:top-spacing}.top-spacing.spacing-none{height:0}.top-spacing.spacing-sm{height:var(--pep-spacing-sm, .5rem)}.top-spacing.spacing-md{height:var(--pep-spacing-lg, 1rem)}.top-spacing.spacing-lg{height:var(--pep-spacing-2xl, 2rem)}.bottom-spacing{grid-area:bottom-spacing}.bottom-spacing.spacing-none{height:0}.bottom-spacing.spacing-sm{height:var(--pep-spacing-sm, .5rem)}.bottom-spacing.spacing-md{height:var(--pep-spacing-lg, 1rem)}.bottom-spacing.spacing-lg{height:var(--pep-spacing-2xl, 2rem)}.skeleton-container{display:grid;grid-area:content;height:100%;gap:var(--pep-spacing-lg, 1rem);grid-template-rows:auto auto auto 1fr;opacity:0}.skeleton-container .split-skeleton-container{display:grid;height:10rem;gap:var(--pep-spacing-lg, 1rem);grid-auto-flow:column}.sections-container{z-index:11;grid-area:content;width:100%;max-width:inherit;overflow-x:unset;margin:0 auto;position:relative;display:grid;grid-row:1px;height:inherit;opacity:0}.sections-container.gap-none{gap:0}.sections-container.gap-sm{gap:var(--pep-spacing-sm, .5rem)}.sections-container.gap-md{gap:var(--pep-spacing-lg, 1rem)}.sections-container.gap-lg{gap:var(--pep-spacing-2xl, 2rem)}.sections-container .draggable-section{display:block}.sections-container.preview-state section{display:contents}@keyframes in{0%{opacity:0;transform:translateY(-80);filter:blur(20px)}to{transform:translateY(0);opacity:1;filter:blur(0)}}.in{animation-name:in;animation-direction:normal;animation-duration:1.2s;animation-fill-mode:forwards}\n"] }]
184
- }], ctorParameters: function () { return [{ type: i1.PepCustomizationService }, { type: i1.PepLayoutService }, { type: i2.PepLayoutBuilderService }, { type: i0.ElementRef }, { type: i0.Renderer2 }]; }, propDecorators: { skeletonContainer: [{
184
+ }], ctorParameters: function () { return [{ type: i1.PepCustomizationService }, { type: i1.PepLayoutService }, { type: i2.LayoutBuilderInternalService }, { type: i0.ElementRef }, { type: i0.Renderer2 }]; }, propDecorators: { skeletonContainer: [{
185
185
  type: ViewChild,
186
186
  args: ['skeletonCont', { static: true }]
187
187
  }], sectionsContainer: [{
@@ -201,4 +201,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImpor
201
201
  type: HostBinding,
202
202
  args: ['style.padding-inline']
203
203
  }] } });
204
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF5b3V0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1jb21wb3NpdGUtbGliL2xheW91dC1idWlsZGVyL2xheW91dC9sYXlvdXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWNvbXBvc2l0ZS1saWIvbGF5b3V0LWJ1aWxkZXIvbGF5b3V0L2xheW91dC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQThGLFNBQVMsRUFDbkYsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBMEIsTUFBTSxlQUFlLENBQUM7QUFFOUgsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDN0QsT0FBTyxFQUFFLHNCQUFzQixFQUFnRSxNQUFNLHlCQUF5QixDQUFDO0FBRy9ILE9BQU8sRUFBRSxlQUFlLEVBQWMsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7Ozs7QUFRbkQsTUFBTSxPQUFPLGtCQUFtQixTQUFRLHNCQUFzQjtJQTREMUQsWUFDVyxvQkFBNkMsRUFDN0MsYUFBK0IsRUFDL0Isb0JBQTZDLEVBQzVDLFdBQXVCLEVBQ3ZCLFFBQW1CO1FBRzNCLEtBQUssRUFBRSxDQUFDO1FBUEQseUJBQW9CLEdBQXBCLG9CQUFvQixDQUF5QjtRQUM3QyxrQkFBYSxHQUFiLGFBQWEsQ0FBa0I7UUFDL0IseUJBQW9CLEdBQXBCLG9CQUFvQixDQUF5QjtRQUM1QyxnQkFBVyxHQUFYLFdBQVcsQ0FBWTtRQUN2QixhQUFRLEdBQVIsUUFBUSxDQUFXO1FBbkR0QixrQkFBYSxHQUFpQyxTQUFTLENBQUM7UUFFekQsa0JBQWEsR0FBRyxLQUFLLENBQUM7UUFVcEIscUJBQWdCLEdBQWlDLElBQUksWUFBWSxFQUFFLENBQUM7UUFDcEUscUJBQWdCLEdBQXFDLElBQUksWUFBWSxFQUFFLENB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QztJQUVELFdBQVcsQ0FBQyxLQUFtQjtRQUMzQixJQUFJLENBQUMsb0JBQW9CLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUVELFNBQVMsQ0FBQyxLQUFpQjtRQUN2QixJQUFJLENBQUMsb0JBQW9CLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdEQsQ0FBQzs7K0dBM01RLGtCQUFrQjttR0FBbEIsa0JBQWtCLGlrQkNmL0IsK3ZEQXdCdUM7MkZEVDFCLGtCQUFrQjtrQkFMOUIsU0FBUzsrQkFDSSxZQUFZO29PQUt1QixpQkFBaUI7c0JBQTdELFNBQVM7dUJBQUMsY0FBYyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFDRSxpQkFBaUI7c0JBQTdELFNBQVM7dUJBQUMsY0FBYyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFJdkMsVUFBVTtzQkFEYixLQUFLO2dCQVNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBSUYsWUFBWTtzQkFEZixLQUFLO2dCQVNJLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFDRyxnQkFBZ0I7c0JBQXpCLE1BQU07Z0JBb0JHLGFBQWE7c0JBRHRCLFdBQVc7dUJBQUMsc0JBQXNCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJDb250ZW50SW5pdCwgQWZ0ZXJWaWV3Q2hlY2tlZCwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbnRlbnRDaGlsZCwgRWxlbWVudFJlZiwgUmVuZGVyZXIyLCBWaWV3Q2hpbGQsIENvbnRlbnRDaGlsZHJlbixcbiAgICBPbkluaXQsIEFmdGVyVmlld0luaXQsIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0LCBIb3N0QmluZGluZywgUXVlcnlMaXN0LCBUZW1wbGF0ZVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ2RrRHJhZywgQ2RrRHJhZ0Ryb3AsIENka0RyYWdFbmQsIENka0RyYWdFbnRlciwgQ2RrRHJhZ0V4aXQsIENka0RyYWdTdGFydCwgQ2RrRHJvcExpc3QsIERyYWdEcm9wIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2RyYWctZHJvcCc7XG5pbXBvcnQgeyBjb2VyY2VOdW1iZXJQcm9wZXJ0eSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5pbXBvcnQgeyBCYXNlRGVzdHJveWVyRGlyZWN0aXZlLCBQZXBDdXN0b21pemF0aW9uU2VydmljZSwgUGVwTGF5b3V0U2VydmljZSwgUGVwU2NyZWVuU2l6ZVR5cGUgfSBmcm9tICdAcGVwcGVyaS1hZGRvbnMvbmd4LWxpYic7XG5pbXBvcnQgeyBQZXBMYXlvdXRCdWlsZGVyU2VydmljZSB9IGZyb20gJy4uL2xheW91dC1idWlsZGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgSVBlcExheW91dEJsb2NrQWRkZWRFdmVudCwgSVBlcExheW91dFNlY3Rpb24sIElQZXBMYXlvdXRWaWV3LCBQZXBMYXlvdXRTaXplVHlwZSB9IGZyb20gJy4uL2xheW91dC1idWlsZGVyLm1vZGVsJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRGF0YVZpZXdTY3JlZW5TaXplIH0gZnJvbSAnQHBlcHBlcmktYWRkb25zL3BhcGktc2RrJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdwZXAtbGF5b3V0JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vbGF5b3V0LmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9sYXlvdXQuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgUGVwTGF5b3V0Q29tcG9uZW50IGV4dGVuZHMgQmFzZURlc3Ryb3llckRpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gICAgQFZpZXdDaGlsZCgnc2tlbGV0b25Db250JywgeyBzdGF0aWM6IHRydWUgfSkgc2tlbGV0b25Db250YWluZXIhOiBFbGVtZW50UmVmO1xuICAgIEBWaWV3Q2hpbGQoJ3NlY3Rpb25zQ29udCcsIHsgc3RhdGljOiB0cnVlIH0pIHNlY3Rpb25zQ29udGFpbmVyITogRWxlbWVudFJlZjtcblxuICAgIHByaXZhdGUgX2xheW91dFZpZXchOiBJUGVwTGF5b3V0VmlldztcbiAgICBASW5wdXQoKVxuICAgIHNldCBsYXlvdXRWaWV3KHZhbHVlOiBJUGVwTGF5b3V0Vmlldykge1xuICAgICAgICB0aGlzLl9sYXlvdXRWaWV3ID0gdmFsdWU7XG4gICAgICAgIHRoaXMubGF5b3V0QnVpbGRlclNlcnZpY2UubG9hZExheW91dEJ1aWxkZXIodmFsdWUpO1xuICAgIH1cbiAgICBnZXQgbGF5b3V0VmlldygpOiBJUGVwTGF5b3V0VmlldyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sYXlvdXRWaWV3O1xuICAgIH1cblxuICAgIEBJbnB1dCgpIGJsb2NrVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG5cbiAgICBwcml2YXRlIF9zaG93U2tlbGV0b24gPSBmYWxzZTtcbiAgICBASW5wdXQoKVxuICAgIHNldCBzaG93U2tlbGV0b24odmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fc2hvd1NrZWxldG9uID0gdmFsdWU7XG4gICAgICAgIHRoaXMubGF5b3V0QnVpbGRlclNlcnZpY2Uuc2hvd1NrZWxldG9uKHZhbHVlKTtcbiAgICB9XG4gICAgZ2V0IHNob3dTa2VsZXRvbigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Nob3dTa2VsZXRvbjtcbiAgICB9XG4gICAgXG4gICAgQE91dHB1dCgpIGxheW91dFZpZXdDaGFuZ2U6IEV2ZW50RW1pdHRlcjxJUGVwTGF5b3V0Vmlldz4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgQE91dHB1dCgpIHNjcmVlblR5cGVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxEYXRhVmlld1NjcmVlblNpemU+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgcHJpdmF0ZSBfaG9yaXpvbnRhbFNwYWNpbmc6IFBlcExheW91dFNpemVUeXBlIHwgdW5kZWZpbmVkID0gJ21kJztcbiAgICBzZXQgaG9yaXpvbnRhbFNwYWNpbmcodmFsdWU6IFBlcExheW91dFNpemVUeXBlIHwgdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuX2hvcml6b250YWxTcGFjaW5nID0gdmFsdWU7XG4gICAgICAgIHRoaXMucGFkZGluZ0lubGluZSA9IHRoaXMuY29udmVydExheW91dFNpemVUeXBlKHZhbHVlIHx8ICdtZCcpO1xuICAgIH1cbiAgICBnZXQgaG9yaXpvbnRhbFNwYWNpbmcoKTogUGVwTGF5b3V0U2l6ZVR5cGUgfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gdGhpcy5faG9yaXpvbnRhbFNwYWNpbmc7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfdmVydGljYWxTcGFjaW5nOiBQZXBMYXlvdXRTaXplVHlwZSB8IHVuZGVmaW5lZCA9ICdtZCc7XG4gICAgc2V0IHZlcnRpY2FsU3BhY2luZyh2YWx1ZTogUGVwTGF5b3V0U2l6ZVR5cGUgfCB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5fdmVydGljYWxTcGFjaW5nID0gdmFsdWU7XG4gICAgfVxuICAgIGdldCB2ZXJ0aWNhbFNwYWNpbmcoKTogUGVwTGF5b3V0U2l6ZVR5cGUgfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gdGhpcy5fdmVydGljYWxTcGFjaW5nO1xuICAgIH1cblxuICAgIEBIb3N0QmluZGluZygnc3R5bGUucGFkZGluZy1pbmxpbmUnKVxuICAgIHByb3RlY3RlZCBwYWRkaW5nSW5saW5lID0gJzFyZW0nO1xuICAgIFxuICAgIHByb3RlY3RlZCBzZWN0aW9uc0dhcCE6IFBlcExheW91dFNpemVUeXBlO1xuICAgIHByb3RlY3RlZCBjb2x1bW5zR2FwITogUGVwTGF5b3V0U2l6ZVR5cGU7XG4gICAgcHJvdGVjdGVkIHByZXZpZXdNb2RlID0gZmFsc2U7XG5cbiAgICBwcml2YXRlIF9zZWN0aW9uc1N1YmplY3Q6IEJlaGF2aW9yU3ViamVjdDxJUGVwTGF5b3V0U2VjdGlvbltdPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SVBlcExheW91dFNlY3Rpb25bXT4oW10pO1xuICAgIHByb3RlY3RlZCBnZXQgc2VjdGlvbnMkKCk6IE9ic2VydmFibGU8SVBlcExheW91dFNlY3Rpb25bXT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2VjdGlvbnNTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBzZWxlY3RlZFNjcmVlblR5cGUhOiBEYXRhVmlld1NjcmVlblNpemU7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHVibGljIGN1c3RvbWl6YXRpb25TZXJ2aWNlOiBQZXBDdXN0b21pemF0aW9uU2VydmljZSxcbiAgICAgICAgcHVibGljIGxheW91dFNlcnZpY2U6IFBlcExheW91dFNlcnZpY2UsXG4gICAgICAgIHB1YmxpYyBsYXlvdXRCdWlsZGVyU2VydmljZTogUGVwTGF5b3V0QnVpbGRlclNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgaG9zdEVsZW1lbnQ6IEVsZW1lbnRSZWYsXG4gICAgICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICAgICAgLy8gcHJpdmF0ZSBkcmFnRHJvcFNlcnZpY2U6IERyYWdEcm9wXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5ob3N0RWxlbWVudC5uYXRpdmVFbGVtZW50LCAncGVwLWxheW91dCcpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY29udmVydExheW91dFNpemVUeXBlKHNpemU6IFBlcExheW91dFNpemVUeXBlIHwgJ25vbmUnKSB7XG4gICAgICAgIGxldCByZXM7XG5cbiAgICAgICAgaWYgKHNpemUgPT09ICdsZycpIHtcbiAgICAgICAgICAgIHJlcyA9ICcycmVtJztcbiAgICAgICAgfSBlbHNlIGlmIChzaXplID09PSAnbWQnKSB7XG4gICAgICAgICAgICByZXMgPSAnMXJlbSc7XG4gICAgICAgIH0gZWxzZSBpZiAoc2l6ZSA9PT0gJ3NtJykge1xuICAgICAgICAgICAgcmVzID0gJzAuNXJlbSc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXMgPSAnMCc7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIHByaXZhdGUgYW5pbWF0ZVNrZWxldG9uKCkge1xuICAgICAgICBpZiAodGhpcy5fc2hvd1NrZWxldG9uKSB7XG4gICAgICAgICAgICAvLyB0aGlzLnNlY3Rpb25zQ29udGFpbmVyPy5uYXRpdmVFbGVtZW50Py5jbGFzc0xpc3QuYWRkKCdvdXQnKTtcbiAgICAgICAgICAgIHRoaXMuc2VjdGlvbnNDb250YWluZXI/Lm5hdGl2ZUVsZW1lbnQ/LmNsYXNzTGlzdC5yZW1vdmUoJ2luJyk7XG4gICAgICAgICAgICB0aGlzLnNrZWxldG9uQ29udGFpbmVyPy5uYXRpdmVFbGVtZW50Py5jbGFzc0xpc3QuYWRkKCdpbicpO1xuICAgICAgICAgICAgLy8gdGhpcy5za2VsZXRvbkNvbnRhaW5lcj8ubmF0aXZlRWxlbWVudD8uY2xhc3NMaXN0LnJlbW92ZSgnb3V0Jyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNlY3Rpb25zQ29udGFpbmVyPy5uYXRpdmVFbGVtZW50Py5jbGFzc0xpc3QuYWRkKCdpbicpO1xuICAgICAgICAgICAgLy8gdGhpcy5zZWN0aW9uc0NvbnRhaW5lcj8ubmF0aXZlRWxlbWVudD8uY2xhc3NMaXN0LnJlbW92ZSgnb3V0Jyk7XG4gICAgICAgICAgICAvLyB0aGlzLnNrZWxldG9uQ29udGFpbmVyPy5uYXRpdmVFbGVtZW50Py5jbGFzc0xpc3QuYWRkKCdvdXQnKTtcbiAgICAgICAgICAgIHRoaXMuc2tlbGV0b25Db250YWluZXI/Lm5hdGl2ZUVsZW1lbnQ/LmNsYXNzTGlzdC5yZW1vdmUoJ2luJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHNldExheW91dERhdGFQcm9wZXJ0aWVzKCkge1xuICAgICAgICBjb25zdCBsYXlvdXRWaWV3ID0gdGhpcy5fbGF5b3V0VmlldztcblxuICAgICAgICBpZiAobGF5b3V0Vmlldykge1xuICAgICAgICAgICAgaWYgKHRoaXMuc2VjdGlvbnNDb250YWluZXI/Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICBsZXQgbWF4V2lkdGggPSBjb2VyY2VOdW1iZXJQcm9wZXJ0eShsYXlvdXRWaWV3LkxheW91dC5NYXhXaWR0aCwgMCk7XG4gICAgICAgICAgICAgICAgY29uc3QgbWF4V2lkdGhUb1NldCA9IG1heFdpZHRoID09PSAwID8gJ3Vuc2V0JyA6IGAke21heFdpZHRofXB4YDtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuc2VjdGlvbnNDb250YWluZXIubmF0aXZlRWxlbWVudCwgJ21heC13aWR0aCcsIG1heFdpZHRoVG9TZXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICB0aGlzLnNlY3Rpb25zR2FwID0gbGF5b3V0Vmlldy5MYXlvdXQuU2VjdGlvbnNHYXAgfHwgJ21kJztcbiAgICAgICAgICAgIHRoaXMuY29sdW1uc0dhcCA9IGxheW91dFZpZXcuTGF5b3V0LkNvbHVtbnNHYXAgfHwgJ21kJztcblxuICAgICAgICAgICAgdGhpcy5ob3Jpem9udGFsU3BhY2luZyA9IGxheW91dFZpZXcuTGF5b3V0Lkhvcml6b250YWxTcGFjaW5nO1xuICAgICAgICAgICAgdGhpcy52ZXJ0aWNhbFNwYWNpbmcgPSBsYXlvdXRWaWV3LkxheW91dC5WZXJ0aWNhbFNwYWNpbmc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHNldFNjcmVlbnRUeXBlKHNjcmVlblNpemU6IFBlcFNjcmVlblNpemVUeXBlKSB7XG4gICAgICAgIGNvbnN0IHNjcmVlblR5cGUgPSB0aGlzLmxheW91dEJ1aWxkZXJTZXJ2aWNlLmdldFNjcmVlblR5cGUoc2NyZWVuU2l6ZSk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRTY3JlZW5UeXBlID0gc2NyZWVuVHlwZTtcbiAgICAgICAgdGhpcy5zY3JlZW5UeXBlQ2hhbmdlLmVtaXQoc2NyZWVuVHlwZSk7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbiAgICAgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgIEludGVybmFsIEV2ZW50cyAtIGZvciBjb2RlIHVzYWdlXG4gICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICAgICAgICBpZiAodGhpcy5sYXlvdXRCdWlsZGVyU2VydmljZS5lZGl0TW9kZSkge1xuICAgICAgICAgICAgdGhpcy5sYXlvdXRCdWlsZGVyU2VydmljZS5wcmV2aWV3TW9kZUNoYW5nZSQucGlwZSh0aGlzLmdldERlc3Ryb3llcigpKS5zdWJzY3JpYmUoKHByZXZpZXdNb2RlOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnByZXZpZXdNb2RlID0gcHJldmlld01vZGU7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubGF5b3V0QnVpbGRlclNlcnZpY2Uuc2VjdGlvbnNDaGFuZ2UkLnBpcGUodGhpcy5nZXREZXN0cm95ZXIoKSkuc3Vic2NyaWJlKChzZWN0aW9uczogYW55KSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9zZWN0aW9uc1N1YmplY3QubmV4dChzZWN0aW9ucyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMubGF5b3V0QnVpbGRlclNlcnZpY2Uuc2hvd1NrZWxldG9uQ2hhbmdlJC5waXBlKHRoaXMuZ2V0RGVzdHJveWVyKCkpLnN1YnNjcmliZSgoc2hvd1NrZWxldG9uOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmIChzaG93U2tlbGV0b24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3Nob3dTa2VsZXRvbiA9IHNob3dTa2VsZXRvbjtcbiAgICAgICAgICAgICAgICB0aGlzLmFuaW1hdGVTa2VsZXRvbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmxheW91dFNlcnZpY2Uub25SZXNpemUkLnBpcGUodGhpcy5nZXREZXN0cm95ZXIoKSkuc3Vic2NyaWJlKChzaXplOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2V0U2NyZWVudFR5cGUoc2l6ZSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMubGF5b3V0QnVpbGRlclNlcnZpY2Uuc2NyZWVuU2l6ZUNoYW5nZSQucGlwZSh0aGlzLmdldERlc3Ryb3llcigpKS5zdWJzY3JpYmUoKHNpemU6IGFueSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXRTY3JlZW50VHlwZShzaXplKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuICAgICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgRXh0ZXJuYWwgRXZlbnRzIC0gZm9yIHJhaXNlIHRvIHRoZSBjbGllbnRcbiAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gICAgICAgIHRoaXMubGF5b3V0QnVpbGRlclNlcnZpY2UubGF5b3V0Vmlld0NoYW5nZSQucGlwZSh0aGlzLmdldERlc3Ryb3llcigpKS5zdWJzY3JpYmUoKGxheW91dFZpZXc6IGFueSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbGF5b3V0VmlldyA9IGxheW91dFZpZXc7XG4gICAgICAgICAgICB0aGlzLnNldExheW91dERhdGFQcm9wZXJ0aWVzKCk7XG4gICAgICAgICAgICB0aGlzLmxheW91dFZpZXdDaGFuZ2UuZW1pdCh0aGlzLl9sYXlvdXRWaWV3KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZ2V0U2VjdGlvbnNUZW1wbGF0ZVJvd3MoKSB7XG4gICAgICAgIGxldCBncmlkQXV0b1Jvd3MgPSAnJztcbiAgICAgICAgLy8gbGV0IGZpbGxIZWlnaHRDb3VudCA9IDA7XG4gICAgICAgIHRoaXMuc2VjdGlvbnMkLnBpcGUodGhpcy5nZXREZXN0cm95ZXIoKSkuc3Vic2NyaWJlKChzZWN0aW9uczogYW55KSA9PiB7ICAgIFxuICAgICAgICAgICAgaWYgKHNlY3Rpb25zPy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBzZWN0aW9ucy5mb3JFYWNoKChzZWM6IElQZXBMYXlvdXRTZWN0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmKHNlYy5GaWxsSGVpZ2h0ID09PSB0cnVlKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZpbGxIZWlnaHRDb3VudCsrO1xuICAgICAgICAgICAgICAgICAgICAgICAgZ3JpZEF1dG9Sb3dzICs9ICcgYXV0byc7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBncmlkQXV0b1Jvd3MgKz0gJyBtaW4tY29udGVudCc7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAvL2lmIGFsbCBhcmUgZmlsbCBoZWlnaHQgc2hvdWxkIHJldHVybiAxZnIgZm9yIGFsbFxuICAgICAgICAgICAgICAgIC8vaWYgbm90IHNob3VsZCByZXR1cm4gYXV0byBmb3IgZmlsbCBoZWlnaHQgYW5kIG1pbiBjb250ZW50IGZvciBub25lXG4gICAgICAgICAgICAgICAgcmV0dXJuIGdyaWRBdXRvUm93cztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gZ3JpZEF1dG9Sb3dzO1xuICAgIH1cblxuICAgIG9uU2VjdGlvbkRyb3BwZWQoZXZlbnQ6IENka0RyYWdEcm9wPGFueVtdPikge1xuICAgICAgICB0aGlzLmxheW91dEJ1aWxkZXJTZXJ2aWNlLm9uU2VjdGlvbkRyb3BwZWQoZXZlbnQpO1xuICAgIH1cblxuICAgIG9uRHJhZ1N0YXJ0KGV2ZW50OiBDZGtEcmFnU3RhcnQpIHtcbiAgICAgICAgdGhpcy5sYXlvdXRCdWlsZGVyU2VydmljZS5vblNlY3Rpb25EcmFnU3RhcnQoZXZlbnQpO1xuICAgIH1cblxuICAgIG9uRHJhZ0VuZChldmVudDogQ2RrRHJhZ0VuZCkge1xuICAgICAgICB0aGlzLmxheW91dEJ1aWxkZXJTZXJ2aWNlLm9uU2VjdGlvbkRyYWdFbmQoZXZlbnQpO1xuICAgIH1cbn1cbiIsIjwhLS0gRm9yIHRoZSB0b3Agc3BhY2luZyAtLT5cbjxkaXYgY2xhc3M9XCJ0b3Atc3BhY2luZyBzcGFjaW5nLXt7dmVydGljYWxTcGFjaW5nfX1cIiA+PC9kaXY+XG48ZGl2ICNzZWN0aW9uc0NvbnQgY2RrRHJvcExpc3RHcm91cCBjbGFzcz1cInNlY3Rpb25zLWNvbnRhaW5lciBnYXAte3sgc2VjdGlvbnNHYXAgfX1cIiBbbmdDbGFzc109XCJ7J3ByZXZpZXctc3RhdGUnOiBwcmV2aWV3TW9kZSB9XCIgIFxuICAgIGNka0Ryb3BMaXN0IChjZGtEcm9wTGlzdERyb3BwZWQpPVwib25TZWN0aW9uRHJvcHBlZCgkZXZlbnQpXCIgW25nU3R5bGVdPVwieydncmlkLWF1dG8tcm93cyc6IGdldFNlY3Rpb25zVGVtcGxhdGVSb3dzKCl9XCJcbiAgICA+XG4gICAgPHNlY3Rpb24gKm5nRm9yPVwibGV0IHNlY3Rpb24gb2Ygc2VjdGlvbnMkIHwgYXN5bmM7IGxldCBpPWluZGV4O1wiIFxuICAgICAgICBjbGFzcz1cImRyYWdnYWJsZS1zZWN0aW9uIFwiIFtuZ0NsYXNzXT1cInNlbGVjdGVkU2NyZWVuVHlwZSA9PT0gJ1BoYWJsZXQnID8gJ21hcmdpbi0nK3NlY3Rpb25zR2FwIDogJydcIiBbYmxvY2tUZW1wbGF0ZV09XCJibG9ja1RlbXBsYXRlXCJcbiAgICAgICAgW2tleV09XCJzZWN0aW9uLktleVwiIFtuYW1lXT1cInNlY3Rpb24uTmFtZSB8fCAoJ0xBWU9VVF9CVUlMREVSLlNFQ1RJT04nIHwgdHJhbnNsYXRlKSArICcgJyArIChpKzEpXCIgW3NwbGl0XT1cInNlY3Rpb24uU3BsaXRcIiBbaGVpZ2h0XT1cInNlY3Rpb24uSGVpZ2h0XCJcbiAgICAgICAgW2NvbHVtbnNdPVwic2VjdGlvbi5Db2x1bW5zXCIgW2NvbGxhcHNlT25UYWJsZXRdPVwic2VjdGlvbi5Db2xsYXBzZU9uVGFibGV0IHx8IGZhbHNlXCIgW2hpZGVJbl09XCJzZWN0aW9uLkhpZGUgfHwgW11cIiBbY29sdW1uc0dhcF09XCJjb2x1bW5zR2FwXCJcbiAgICAgICAgPlxuICAgIDwvc2VjdGlvbj5cbjwvZGl2PlxuPGRpdiAjc2tlbGV0b25Db250IGNsYXNzPVwic2tlbGV0b24tY29udGFpbmVyIFwiPlxuICAgIDxwZXAtc2tlbGV0b24tbG9hZGVyIFtyb3dzTnVtYmVyXT1cIjFcIiBbbGFzdFJvd09mZnNldF09XCJmYWxzZVwiIHJvd0hlaWdodFR5cGU9XCJ4bFwiID48L3BlcC1za2VsZXRvbi1sb2FkZXI+XG4gICAgPGRpdiBjbGFzcz1cInNwbGl0LXNrZWxldG9uLWNvbnRhaW5lclwiPlxuICAgICAgICA8cGVwLXNrZWxldG9uLWxvYWRlciBbcm93c051bWJlcl09XCIxXCIgW2xhc3RSb3dPZmZzZXRdPVwiZmFsc2VcIiByb3dIZWlnaHRUeXBlPVwibWF4XCIgPjwvcGVwLXNrZWxldG9uLWxvYWRlcj5cbiAgICAgICAgPHBlcC1za2VsZXRvbi1sb2FkZXIgW3Jvd3NOdW1iZXJdPVwiMVwiIFtsYXN0Um93T2Zmc2V0XT1cImZhbHNlXCIgcm93SGVpZ2h0VHlwZT1cIm1heFwiID48L3BlcC1za2VsZXRvbi1sb2FkZXI+XG4gICAgPC9kaXY+XG4gICAgPHBlcC1za2VsZXRvbi1sb2FkZXIgW3Jvd3NOdW1iZXJdPVwiMVwiIFtsYXN0Um93T2Zmc2V0XT1cImZhbHNlXCIgcm93SGVpZ2h0VHlwZT1cInhsXCIgPjwvcGVwLXNrZWxldG9uLWxvYWRlcj5cblxuICAgIDxwZXAtc2tlbGV0b24tbG9hZGVyIFtyb3dzTnVtYmVyXT1cIjFcIiBbbGFzdFJvd09mZnNldF09XCJmYWxzZVwiIHJvd0hlaWdodFR5cGU9XCJtYXhcIiA+PC9wZXAtc2tlbGV0b24tbG9hZGVyPlxuPC9kaXY+XG48IS0tIEZvciB0aGUgYm90dG9tIHNwYWNpbmcgLS0+XG48ZGl2IGNsYXNzPVwiYm90dG9tLXNwYWNpbmcgc3BhY2luZy17e3ZlcnRpY2FsU3BhY2luZ319XCI+PC9kaXY+XG48cGVwLXNpemUtZGV0ZWN0b3I+PC9wZXAtc2l6ZS1kZXRlY3Rvcj4iXX0=
204
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF5b3V0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1jb21wb3NpdGUtbGliL2xheW91dC1idWlsZGVyL2xheW91dC9sYXlvdXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWNvbXBvc2l0ZS1saWIvbGF5b3V0LWJ1aWxkZXIvbGF5b3V0L2xheW91dC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQThGLFNBQVMsRUFDbkYsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBMEIsTUFBTSxlQUFlLENBQUM7QUFFOUgsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDN0QsT0FBTyxFQUFFLHNCQUFzQixFQUFnRSxNQUFNLHlCQUF5QixDQUFDO0FBRy9ILE9BQU8sRUFBRSxlQUFlLEVBQWMsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7Ozs7QUFRbkQsTUFBTSxPQUFPLGtCQUFtQixTQUFRLHNCQUFzQjtJQTREMUQsWUFDVyxvQkFBNkMsRUFDN0MsYUFBK0IsRUFDL0Isb0JBQWtELEVBQ2pELFdBQXVCLEVBQ3ZCLFFBQW1CO1FBRzNCLEtBQUssRUFBRSxDQUFDO1FBUEQseUJBQW9CLEdBQXBCLG9CQUFvQixDQUF5QjtRQUM3QyxrQkFBYSxHQUFiLGFBQWEsQ0FBa0I7UUFDL0IseUJBQW9CLEdBQXBCLG9CQUFvQixDQUE4QjtRQUNqRCxnQkFBVyxHQUFYLFdBQVcsQ0FBWTtRQUN2QixhQUFRLEdBQVIsUUFBUSxDQUFXO1FBbkR0QixrQkFBYSxHQUFpQyxTQUFTLENBQUM7UUFFekQsa0JBQWEsR0FBRyxLQUFLLENBQUM7UUFVcEIscUJBQWdCLEdBQWlDLElBQUksWUFBWSxFQUFFLENBQUM7UUFDcEUscUJBQWdCLEdBQXFDLElBQUksWUFBWSxFQUFFLENB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QztJQUVELFdBQVcsQ0FBQyxLQUFtQjtRQUMzQixJQUFJLENBQUMsb0JBQW9CLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUVELFNBQVMsQ0FBQyxLQUFpQjtRQUN2QixJQUFJLENBQUMsb0JBQW9CLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdEQsQ0FBQzs7K0dBM01RLGtCQUFrQjttR0FBbEIsa0JBQWtCLGlrQkNmL0IsK3ZEQXdCdUM7MkZEVDFCLGtCQUFrQjtrQkFMOUIsU0FBUzsrQkFDSSxZQUFZO3lPQUt1QixpQkFBaUI7c0JBQTdELFNBQVM7dUJBQUMsY0FBYyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFDRSxpQkFBaUI7c0JBQTdELFNBQVM7dUJBQUMsY0FBYyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFJdkMsVUFBVTtzQkFEYixLQUFLO2dCQVNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBSUYsWUFBWTtzQkFEZixLQUFLO2dCQVNJLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFDRyxnQkFBZ0I7c0JBQXpCLE1BQU07Z0JBb0JHLGFBQWE7c0JBRHRCLFdBQVc7dUJBQUMsc0JBQXNCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJDb250ZW50SW5pdCwgQWZ0ZXJWaWV3Q2hlY2tlZCwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbnRlbnRDaGlsZCwgRWxlbWVudFJlZiwgUmVuZGVyZXIyLCBWaWV3Q2hpbGQsIENvbnRlbnRDaGlsZHJlbixcbiAgICBPbkluaXQsIEFmdGVyVmlld0luaXQsIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0LCBIb3N0QmluZGluZywgUXVlcnlMaXN0LCBUZW1wbGF0ZVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ2RrRHJhZywgQ2RrRHJhZ0Ryb3AsIENka0RyYWdFbmQsIENka0RyYWdFbnRlciwgQ2RrRHJhZ0V4aXQsIENka0RyYWdTdGFydCwgQ2RrRHJvcExpc3QsIERyYWdEcm9wIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2RyYWctZHJvcCc7XG5pbXBvcnQgeyBjb2VyY2VOdW1iZXJQcm9wZXJ0eSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5pbXBvcnQgeyBCYXNlRGVzdHJveWVyRGlyZWN0aXZlLCBQZXBDdXN0b21pemF0aW9uU2VydmljZSwgUGVwTGF5b3V0U2VydmljZSwgUGVwU2NyZWVuU2l6ZVR5cGUgfSBmcm9tICdAcGVwcGVyaS1hZGRvbnMvbmd4LWxpYic7XG5pbXBvcnQgeyBMYXlvdXRCdWlsZGVySW50ZXJuYWxTZXJ2aWNlIH0gZnJvbSAnLi4vbGF5b3V0LWJ1aWxkZXItaW50ZXJuYWwuc2VydmljZSc7XG5pbXBvcnQgeyBJUGVwTGF5b3V0QmxvY2tBZGRlZEV2ZW50LCBJUGVwTGF5b3V0U2VjdGlvbiwgSVBlcExheW91dFZpZXcsIFBlcExheW91dFNpemVUeXBlIH0gZnJvbSAnLi4vbGF5b3V0LWJ1aWxkZXIubW9kZWwnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBEYXRhVmlld1NjcmVlblNpemUgfSBmcm9tICdAcGVwcGVyaS1hZGRvbnMvcGFwaS1zZGsnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3BlcC1sYXlvdXQnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9sYXlvdXQuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2xheW91dC5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBQZXBMYXlvdXRDb21wb25lbnQgZXh0ZW5kcyBCYXNlRGVzdHJveWVyRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0IHtcbiAgICBAVmlld0NoaWxkKCdza2VsZXRvbkNvbnQnLCB7IHN0YXRpYzogdHJ1ZSB9KSBza2VsZXRvbkNvbnRhaW5lciE6IEVsZW1lbnRSZWY7XG4gICAgQFZpZXdDaGlsZCgnc2VjdGlvbnNDb250JywgeyBzdGF0aWM6IHRydWUgfSkgc2VjdGlvbnNDb250YWluZXIhOiBFbGVtZW50UmVmO1xuXG4gICAgcHJpdmF0ZSBfbGF5b3V0VmlldyE6IElQZXBMYXlvdXRWaWV3O1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IGxheW91dFZpZXcodmFsdWU6IElQZXBMYXlvdXRWaWV3KSB7XG4gICAgICAgIHRoaXMuX2xheW91dFZpZXcgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5sYXlvdXRCdWlsZGVyU2VydmljZS5sb2FkTGF5b3V0QnVpbGRlcih2YWx1ZSk7XG4gICAgfVxuICAgIGdldCBsYXlvdXRWaWV3KCk6IElQZXBMYXlvdXRWaWV3IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xheW91dFZpZXc7XG4gICAgfVxuXG4gICAgQElucHV0KCkgYmxvY2tUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcblxuICAgIHByaXZhdGUgX3Nob3dTa2VsZXRvbiA9IGZhbHNlO1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHNob3dTa2VsZXRvbih2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9zaG93U2tlbGV0b24gPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5sYXlvdXRCdWlsZGVyU2VydmljZS5zaG93U2tlbGV0b24odmFsdWUpO1xuICAgIH1cbiAgICBnZXQgc2hvd1NrZWxldG9uKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2hvd1NrZWxldG9uO1xuICAgIH1cbiAgICBcbiAgICBAT3V0cHV0KCkgbGF5b3V0Vmlld0NoYW5nZTogRXZlbnRFbWl0dGVyPElQZXBMYXlvdXRWaWV3PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICBAT3V0cHV0KCkgc2NyZWVuVHlwZUNoYW5nZTogRXZlbnRFbWl0dGVyPERhdGFWaWV3U2NyZWVuU2l6ZT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICBwcml2YXRlIF9ob3Jpem9udGFsU3BhY2luZzogUGVwTGF5b3V0U2l6ZVR5cGUgfCB1bmRlZmluZWQgPSAnbWQnO1xuICAgIHNldCBob3Jpem9udGFsU3BhY2luZyh2YWx1ZTogUGVwTGF5b3V0U2l6ZVR5cGUgfCB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5faG9yaXpvbnRhbFNwYWNpbmcgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5wYWRkaW5nSW5saW5lID0gdGhpcy5jb252ZXJ0TGF5b3V0U2l6ZVR5cGUodmFsdWUgfHwgJ21kJyk7XG4gICAgfVxuICAgIGdldCBob3Jpem9udGFsU3BhY2luZygpOiBQZXBMYXlvdXRTaXplVHlwZSB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9ob3Jpem9udGFsU3BhY2luZztcbiAgICB9XG5cbiAgICBwcml2YXRlIF92ZXJ0aWNhbFNwYWNpbmc6IFBlcExheW91dFNpemVUeXBlIHwgdW5kZWZpbmVkID0gJ21kJztcbiAgICBzZXQgdmVydGljYWxTcGFjaW5nKHZhbHVlOiBQZXBMYXlvdXRTaXplVHlwZSB8IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLl92ZXJ0aWNhbFNwYWNpbmcgPSB2YWx1ZTtcbiAgICB9XG4gICAgZ2V0IHZlcnRpY2FsU3BhY2luZygpOiBQZXBMYXlvdXRTaXplVHlwZSB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiB0aGlzLl92ZXJ0aWNhbFNwYWNpbmc7XG4gICAgfVxuXG4gICAgQEhvc3RCaW5kaW5nKCdzdHlsZS5wYWRkaW5nLWlubGluZScpXG4gICAgcHJvdGVjdGVkIHBhZGRpbmdJbmxpbmUgPSAnMXJlbSc7XG4gICAgXG4gICAgcHJvdGVjdGVkIHNlY3Rpb25zR2FwITogUGVwTGF5b3V0U2l6ZVR5cGU7XG4gICAgcHJvdGVjdGVkIGNvbHVtbnNHYXAhOiBQZXBMYXlvdXRTaXplVHlwZTtcbiAgICBwcm90ZWN0ZWQgcHJldmlld01vZGUgPSBmYWxzZTtcblxuICAgIHByaXZhdGUgX3NlY3Rpb25zU3ViamVjdDogQmVoYXZpb3JTdWJqZWN0PElQZXBMYXlvdXRTZWN0aW9uW10+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJUGVwTGF5b3V0U2VjdGlvbltdPihbXSk7XG4gICAgcHJvdGVjdGVkIGdldCBzZWN0aW9ucyQoKTogT2JzZXJ2YWJsZTxJUGVwTGF5b3V0U2VjdGlvbltdPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zZWN0aW9uc1N1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHNlbGVjdGVkU2NyZWVuVHlwZSE6IERhdGFWaWV3U2NyZWVuU2l6ZTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgY3VzdG9taXphdGlvblNlcnZpY2U6IFBlcEN1c3RvbWl6YXRpb25TZXJ2aWNlLFxuICAgICAgICBwdWJsaWMgbGF5b3V0U2VydmljZTogUGVwTGF5b3V0U2VydmljZSxcbiAgICAgICAgcHVibGljIGxheW91dEJ1aWxkZXJTZXJ2aWNlOiBMYXlvdXRCdWlsZGVySW50ZXJuYWxTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGhvc3RFbGVtZW50OiBFbGVtZW50UmVmLFxuICAgICAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgICAgIC8vIHByaXZhdGUgZHJhZ0Ryb3BTZXJ2aWNlOiBEcmFnRHJvcFxuICAgICkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuaG9zdEVsZW1lbnQubmF0aXZlRWxlbWVudCwgJ3BlcC1sYXlvdXQnKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNvbnZlcnRMYXlvdXRTaXplVHlwZShzaXplOiBQZXBMYXlvdXRTaXplVHlwZSB8ICdub25lJykge1xuICAgICAgICBsZXQgcmVzO1xuXG4gICAgICAgIGlmIChzaXplID09PSAnbGcnKSB7XG4gICAgICAgICAgICByZXMgPSAnMnJlbSc7XG4gICAgICAgIH0gZWxzZSBpZiAoc2l6ZSA9PT0gJ21kJykge1xuICAgICAgICAgICAgcmVzID0gJzFyZW0nO1xuICAgICAgICB9IGVsc2UgaWYgKHNpemUgPT09ICdzbScpIHtcbiAgICAgICAgICAgIHJlcyA9ICcwLjVyZW0nO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzID0gJzAnO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICBwcml2YXRlIGFuaW1hdGVTa2VsZXRvbigpIHtcbiAgICAgICAgaWYgKHRoaXMuX3Nob3dTa2VsZXRvbikge1xuICAgICAgICAgICAgLy8gdGhpcy5zZWN0aW9uc0NvbnRhaW5lcj8ubmF0aXZlRWxlbWVudD8uY2xhc3NMaXN0LmFkZCgnb3V0Jyk7XG4gICAgICAgICAgICB0aGlzLnNlY3Rpb25zQ29udGFpbmVyPy5uYXRpdmVFbGVtZW50Py5jbGFzc0xpc3QucmVtb3ZlKCdpbicpO1xuICAgICAgICAgICAgdGhpcy5za2VsZXRvbkNvbnRhaW5lcj8ubmF0aXZlRWxlbWVudD8uY2xhc3NMaXN0LmFkZCgnaW4nKTtcbiAgICAgICAgICAgIC8vIHRoaXMuc2tlbGV0b25Db250YWluZXI/Lm5hdGl2ZUVsZW1lbnQ/LmNsYXNzTGlzdC5yZW1vdmUoJ291dCcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZWN0aW9uc0NvbnRhaW5lcj8ubmF0aXZlRWxlbWVudD8uY2xhc3NMaXN0LmFkZCgnaW4nKTtcbiAgICAgICAgICAgIC8vIHRoaXMuc2VjdGlvbnNDb250YWluZXI/Lm5hdGl2ZUVsZW1lbnQ/LmNsYXNzTGlzdC5yZW1vdmUoJ291dCcpO1xuICAgICAgICAgICAgLy8gdGhpcy5za2VsZXRvbkNvbnRhaW5lcj8ubmF0aXZlRWxlbWVudD8uY2xhc3NMaXN0LmFkZCgnb3V0Jyk7XG4gICAgICAgICAgICB0aGlzLnNrZWxldG9uQ29udGFpbmVyPy5uYXRpdmVFbGVtZW50Py5jbGFzc0xpc3QucmVtb3ZlKCdpbicpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRMYXlvdXREYXRhUHJvcGVydGllcygpIHtcbiAgICAgICAgY29uc3QgbGF5b3V0VmlldyA9IHRoaXMuX2xheW91dFZpZXc7XG5cbiAgICAgICAgaWYgKGxheW91dFZpZXcpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnNlY3Rpb25zQ29udGFpbmVyPy5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgbGV0IG1heFdpZHRoID0gY29lcmNlTnVtYmVyUHJvcGVydHkobGF5b3V0Vmlldy5MYXlvdXQuTWF4V2lkdGgsIDApO1xuICAgICAgICAgICAgICAgIGNvbnN0IG1heFdpZHRoVG9TZXQgPSBtYXhXaWR0aCA9PT0gMCA/ICd1bnNldCcgOiBgJHttYXhXaWR0aH1weGA7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLnNlY3Rpb25zQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQsICdtYXgtd2lkdGgnLCBtYXhXaWR0aFRvU2V0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdGhpcy5zZWN0aW9uc0dhcCA9IGxheW91dFZpZXcuTGF5b3V0LlNlY3Rpb25zR2FwIHx8ICdtZCc7XG4gICAgICAgICAgICB0aGlzLmNvbHVtbnNHYXAgPSBsYXlvdXRWaWV3LkxheW91dC5Db2x1bW5zR2FwIHx8ICdtZCc7XG5cbiAgICAgICAgICAgIHRoaXMuaG9yaXpvbnRhbFNwYWNpbmcgPSBsYXlvdXRWaWV3LkxheW91dC5Ib3Jpem9udGFsU3BhY2luZztcbiAgICAgICAgICAgIHRoaXMudmVydGljYWxTcGFjaW5nID0gbGF5b3V0Vmlldy5MYXlvdXQuVmVydGljYWxTcGFjaW5nO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRTY3JlZW50VHlwZShzY3JlZW5TaXplOiBQZXBTY3JlZW5TaXplVHlwZSkge1xuICAgICAgICBjb25zdCBzY3JlZW5UeXBlID0gdGhpcy5sYXlvdXRCdWlsZGVyU2VydmljZS5nZXRTY3JlZW5UeXBlKHNjcmVlblNpemUpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkU2NyZWVuVHlwZSA9IHNjcmVlblR5cGU7XG4gICAgICAgIHRoaXMuc2NyZWVuVHlwZUNoYW5nZS5lbWl0KHNjcmVlblR5cGUpO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4gICAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlcm5hbCBFdmVudHMgLSBmb3IgY29kZSB1c2FnZVxuICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgICAgICAgaWYgKHRoaXMubGF5b3V0QnVpbGRlclNlcnZpY2UuZWRpdE1vZGUpIHtcbiAgICAgICAgICAgIHRoaXMubGF5b3V0QnVpbGRlclNlcnZpY2UucHJldmlld01vZGVDaGFuZ2UkLnBpcGUodGhpcy5nZXREZXN0cm95ZXIoKSkuc3Vic2NyaWJlKChwcmV2aWV3TW9kZTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5wcmV2aWV3TW9kZSA9IHByZXZpZXdNb2RlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmxheW91dEJ1aWxkZXJTZXJ2aWNlLnNlY3Rpb25zQ2hhbmdlJC5waXBlKHRoaXMuZ2V0RGVzdHJveWVyKCkpLnN1YnNjcmliZSgoc2VjdGlvbnM6IGFueSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fc2VjdGlvbnNTdWJqZWN0Lm5leHQoc2VjdGlvbnMpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmxheW91dEJ1aWxkZXJTZXJ2aWNlLnNob3dTa2VsZXRvbkNoYW5nZSQucGlwZSh0aGlzLmdldERlc3Ryb3llcigpKS5zdWJzY3JpYmUoKHNob3dTa2VsZXRvbjogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAoc2hvd1NrZWxldG9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zaG93U2tlbGV0b24gPSBzaG93U2tlbGV0b247XG4gICAgICAgICAgICAgICAgdGhpcy5hbmltYXRlU2tlbGV0b24oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5sYXlvdXRTZXJ2aWNlLm9uUmVzaXplJC5waXBlKHRoaXMuZ2V0RGVzdHJveWVyKCkpLnN1YnNjcmliZSgoc2l6ZTogYW55KSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNldFNjcmVlbnRUeXBlKHNpemUpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmxheW91dEJ1aWxkZXJTZXJ2aWNlLnNjcmVlblNpemVDaGFuZ2UkLnBpcGUodGhpcy5nZXREZXN0cm95ZXIoKSkuc3Vic2NyaWJlKChzaXplOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2V0U2NyZWVudFR5cGUoc2l6ZSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbiAgICAgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgIEV4dGVybmFsIEV2ZW50cyAtIGZvciByYWlzZSB0byB0aGUgY2xpZW50XG4gICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICAgICAgICB0aGlzLmxheW91dEJ1aWxkZXJTZXJ2aWNlLmxheW91dFZpZXdDaGFuZ2UkLnBpcGUodGhpcy5nZXREZXN0cm95ZXIoKSkuc3Vic2NyaWJlKChsYXlvdXRWaWV3OiBhbnkpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2xheW91dFZpZXcgPSBsYXlvdXRWaWV3O1xuICAgICAgICAgICAgdGhpcy5zZXRMYXlvdXREYXRhUHJvcGVydGllcygpO1xuICAgICAgICAgICAgdGhpcy5sYXlvdXRWaWV3Q2hhbmdlLmVtaXQodGhpcy5fbGF5b3V0Vmlldyk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGdldFNlY3Rpb25zVGVtcGxhdGVSb3dzKCkge1xuICAgICAgICBsZXQgZ3JpZEF1dG9Sb3dzID0gJyc7XG4gICAgICAgIC8vIGxldCBmaWxsSGVpZ2h0Q291bnQgPSAwO1xuICAgICAgICB0aGlzLnNlY3Rpb25zJC5waXBlKHRoaXMuZ2V0RGVzdHJveWVyKCkpLnN1YnNjcmliZSgoc2VjdGlvbnM6IGFueSkgPT4geyAgICBcbiAgICAgICAgICAgIGlmIChzZWN0aW9ucz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgc2VjdGlvbnMuZm9yRWFjaCgoc2VjOiBJUGVwTGF5b3V0U2VjdGlvbikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZihzZWMuRmlsbEhlaWdodCA9PT0gdHJ1ZSl7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBmaWxsSGVpZ2h0Q291bnQrKztcbiAgICAgICAgICAgICAgICAgICAgICAgIGdyaWRBdXRvUm93cyArPSAnIGF1dG8nO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgZ3JpZEF1dG9Sb3dzICs9ICcgbWluLWNvbnRlbnQnO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgLy9pZiBhbGwgYXJlIGZpbGwgaGVpZ2h0IHNob3VsZCByZXR1cm4gMWZyIGZvciBhbGxcbiAgICAgICAgICAgICAgICAvL2lmIG5vdCBzaG91bGQgcmV0dXJuIGF1dG8gZm9yIGZpbGwgaGVpZ2h0IGFuZCBtaW4gY29udGVudCBmb3Igbm9uZVxuICAgICAgICAgICAgICAgIHJldHVybiBncmlkQXV0b1Jvd3M7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGdyaWRBdXRvUm93cztcbiAgICB9XG5cbiAgICBvblNlY3Rpb25Ecm9wcGVkKGV2ZW50OiBDZGtEcmFnRHJvcDxhbnlbXT4pIHtcbiAgICAgICAgdGhpcy5sYXlvdXRCdWlsZGVyU2VydmljZS5vblNlY3Rpb25Ecm9wcGVkKGV2ZW50KTtcbiAgICB9XG5cbiAgICBvbkRyYWdTdGFydChldmVudDogQ2RrRHJhZ1N0YXJ0KSB7XG4gICAgICAgIHRoaXMubGF5b3V0QnVpbGRlclNlcnZpY2Uub25TZWN0aW9uRHJhZ1N0YXJ0KGV2ZW50KTtcbiAgICB9XG5cbiAgICBvbkRyYWdFbmQoZXZlbnQ6IENka0RyYWdFbmQpIHtcbiAgICAgICAgdGhpcy5sYXlvdXRCdWlsZGVyU2VydmljZS5vblNlY3Rpb25EcmFnRW5kKGV2ZW50KTtcbiAgICB9XG59XG4iLCI8IS0tIEZvciB0aGUgdG9wIHNwYWNpbmcgLS0+XG48ZGl2IGNsYXNzPVwidG9wLXNwYWNpbmcgc3BhY2luZy17e3ZlcnRpY2FsU3BhY2luZ319XCIgPjwvZGl2PlxuPGRpdiAjc2VjdGlvbnNDb250IGNka0Ryb3BMaXN0R3JvdXAgY2xhc3M9XCJzZWN0aW9ucy1jb250YWluZXIgZ2FwLXt7IHNlY3Rpb25zR2FwIH19XCIgW25nQ2xhc3NdPVwieydwcmV2aWV3LXN0YXRlJzogcHJldmlld01vZGUgfVwiICBcbiAgICBjZGtEcm9wTGlzdCAoY2RrRHJvcExpc3REcm9wcGVkKT1cIm9uU2VjdGlvbkRyb3BwZWQoJGV2ZW50KVwiIFtuZ1N0eWxlXT1cInsnZ3JpZC1hdXRvLXJvd3MnOiBnZXRTZWN0aW9uc1RlbXBsYXRlUm93cygpfVwiXG4gICAgPlxuICAgIDxzZWN0aW9uICpuZ0Zvcj1cImxldCBzZWN0aW9uIG9mIHNlY3Rpb25zJCB8IGFzeW5jOyBsZXQgaT1pbmRleDtcIiBcbiAgICAgICAgY2xhc3M9XCJkcmFnZ2FibGUtc2VjdGlvbiBcIiBbbmdDbGFzc109XCJzZWxlY3RlZFNjcmVlblR5cGUgPT09ICdQaGFibGV0JyA/ICdtYXJnaW4tJytzZWN0aW9uc0dhcCA6ICcnXCIgW2Jsb2NrVGVtcGxhdGVdPVwiYmxvY2tUZW1wbGF0ZVwiXG4gICAgICAgIFtrZXldPVwic2VjdGlvbi5LZXlcIiBbbmFtZV09XCJzZWN0aW9uLk5hbWUgfHwgKCdMQVlPVVRfQlVJTERFUi5TRUNUSU9OJyB8IHRyYW5zbGF0ZSkgKyAnICcgKyAoaSsxKVwiIFtzcGxpdF09XCJzZWN0aW9uLlNwbGl0XCIgW2hlaWdodF09XCJzZWN0aW9uLkhlaWdodFwiXG4gICAgICAgIFtjb2x1bW5zXT1cInNlY3Rpb24uQ29sdW1uc1wiIFtjb2xsYXBzZU9uVGFibGV0XT1cInNlY3Rpb24uQ29sbGFwc2VPblRhYmxldCB8fCBmYWxzZVwiIFtoaWRlSW5dPVwic2VjdGlvbi5IaWRlIHx8IFtdXCIgW2NvbHVtbnNHYXBdPVwiY29sdW1uc0dhcFwiXG4gICAgICAgID5cbiAgICA8L3NlY3Rpb24+XG48L2Rpdj5cbjxkaXYgI3NrZWxldG9uQ29udCBjbGFzcz1cInNrZWxldG9uLWNvbnRhaW5lciBcIj5cbiAgICA8cGVwLXNrZWxldG9uLWxvYWRlciBbcm93c051bWJlcl09XCIxXCIgW2xhc3RSb3dPZmZzZXRdPVwiZmFsc2VcIiByb3dIZWlnaHRUeXBlPVwieGxcIiA+PC9wZXAtc2tlbGV0b24tbG9hZGVyPlxuICAgIDxkaXYgY2xhc3M9XCJzcGxpdC1za2VsZXRvbi1jb250YWluZXJcIj5cbiAgICAgICAgPHBlcC1za2VsZXRvbi1sb2FkZXIgW3Jvd3NOdW1iZXJdPVwiMVwiIFtsYXN0Um93T2Zmc2V0XT1cImZhbHNlXCIgcm93SGVpZ2h0VHlwZT1cIm1heFwiID48L3BlcC1za2VsZXRvbi1sb2FkZXI+XG4gICAgICAgIDxwZXAtc2tlbGV0b24tbG9hZGVyIFtyb3dzTnVtYmVyXT1cIjFcIiBbbGFzdFJvd09mZnNldF09XCJmYWxzZVwiIHJvd0hlaWdodFR5cGU9XCJtYXhcIiA+PC9wZXAtc2tlbGV0b24tbG9hZGVyPlxuICAgIDwvZGl2PlxuICAgIDxwZXAtc2tlbGV0b24tbG9hZGVyIFtyb3dzTnVtYmVyXT1cIjFcIiBbbGFzdFJvd09mZnNldF09XCJmYWxzZVwiIHJvd0hlaWdodFR5cGU9XCJ4bFwiID48L3BlcC1za2VsZXRvbi1sb2FkZXI+XG5cbiAgICA8cGVwLXNrZWxldG9uLWxvYWRlciBbcm93c051bWJlcl09XCIxXCIgW2xhc3RSb3dPZmZzZXRdPVwiZmFsc2VcIiByb3dIZWlnaHRUeXBlPVwibWF4XCIgPjwvcGVwLXNrZWxldG9uLWxvYWRlcj5cbjwvZGl2PlxuPCEtLSBGb3IgdGhlIGJvdHRvbSBzcGFjaW5nIC0tPlxuPGRpdiBjbGFzcz1cImJvdHRvbS1zcGFjaW5nIHNwYWNpbmcte3t2ZXJ0aWNhbFNwYWNpbmd9fVwiPjwvZGl2PlxuPHBlcC1zaXplLWRldGVjdG9yPjwvcGVwLXNpemUtZGV0ZWN0b3I+Il19