@arsedizioni/ars-utils 18.2.492 → 18.2.494
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.
- package/clipper.common/common/services/clipper.service.d.ts +1 -1
- package/clipper.ui/ui/document-manager/document-manager.d.ts +8 -2
- package/clipper.ui/ui/document-menu/document-menu.component.d.ts +6 -2
- package/clipper.ui/ui/search-result-manager/search-result-manager.d.ts +2 -1
- package/esm2022/clipper.common/common/services/clipper.service.mjs +2 -2
- package/esm2022/clipper.ui/ui/browser-dialog/browser-dialog.component.mjs +2 -2
- package/esm2022/clipper.ui/ui/document/document.component.mjs +1 -1
- package/esm2022/clipper.ui/ui/document-manager/document-manager.mjs +23 -5
- package/esm2022/clipper.ui/ui/document-menu/document-menu.component.mjs +7 -3
- package/esm2022/clipper.ui/ui/references/references.component.mjs +2 -2
- package/esm2022/clipper.ui/ui/search-result-manager/search-result-manager.mjs +4 -3
- package/fesm2022/arsedizioni-ars-utils-clipper.common.mjs +1 -1
- package/fesm2022/arsedizioni-ars-utils-clipper.common.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-clipper.ui.mjs +34 -11
- package/fesm2022/arsedizioni-ars-utils-clipper.ui.mjs.map +1 -1
- package/package.json +7 -7
|
@@ -45,11 +45,15 @@ export class ClipperDocumentMenuComponent {
|
|
|
45
45
|
this.isLaw = input(false);
|
|
46
46
|
this.canPrint = input(false);
|
|
47
47
|
this.canFind = input(false);
|
|
48
|
+
this.canUseCalendar = input(false);
|
|
49
|
+
this.canUseArchive = input(false);
|
|
48
50
|
this.canDeselectAll = () => this.selectionSource() === 'selection' && this.selection().length > 0;
|
|
49
51
|
this.canManageBag = () => this.selectionSource() === 'bag';
|
|
50
52
|
this.canOpen = () => (this.getSingleSelection()?.documentId?.length ?? 0) > 0;
|
|
51
53
|
this.canAddToWorkingDocuments = () => this.selectionSource() !== 'bag' && this.getMultipleSelection().length > 0;
|
|
52
54
|
this.canSendByEmail = () => this.getMultipleSelection().length > 0;
|
|
55
|
+
this.canAddToArchive = () => this.canUseArchive() && this.canSendByEmail();
|
|
56
|
+
this.canAddToCalendar = () => this.canUseCalendar() && !this.isReference() && (this.isDeadline() || this.isLawInForce()) && this.canOpen();
|
|
53
57
|
this.canSaveAsPdf = () => {
|
|
54
58
|
const item = this.getSingleSelection();
|
|
55
59
|
return item !== null && item?.model !== ClipperModel.Coordinamento;
|
|
@@ -177,10 +181,10 @@ export class ClipperDocumentMenuComponent {
|
|
|
177
181
|
}
|
|
178
182
|
}
|
|
179
183
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.4", ngImport: i0, type: ClipperDocumentMenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
180
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.4", type: ClipperDocumentMenuComponent, isStandalone: true, selector: "clipper-document-menu", inputs: { useSelections: { classPropertyName: "useSelections", publicName: "useSelections", isSignal: true, isRequired: false, transformFunction: null }, selectionSource: { classPropertyName: "selectionSource", publicName: "selectionSource", isSignal: true, isRequired: false, transformFunction: null }, parent: { classPropertyName: "parent", publicName: "parent", isSignal: true, isRequired: true, transformFunction: null }, item: { classPropertyName: "item", publicName: "item", isSignal: true, isRequired: false, transformFunction: null }, isReference: { classPropertyName: "isReference", publicName: "isReference", isSignal: true, isRequired: false, transformFunction: null }, isReadable: { classPropertyName: "isReadable", publicName: "isReadable", isSignal: true, isRequired: false, transformFunction: null }, isDeadline: { classPropertyName: "isDeadline", publicName: "isDeadline", isSignal: true, isRequired: false, transformFunction: null }, isLawInForce: { classPropertyName: "isLawInForce", publicName: "isLawInForce", isSignal: true, isRequired: false, transformFunction: null }, isLaw: { classPropertyName: "isLaw", publicName: "isLaw", isSignal: true, isRequired: false, transformFunction: null }, canPrint: { classPropertyName: "canPrint", publicName: "canPrint", isSignal: true, isRequired: false, transformFunction: null }, canFind: { classPropertyName: "canFind", publicName: "canFind", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "rsMenuTrigger", first: true, predicate: ["rsMenuTrigger"], descendants: true, isSignal: true }, { propertyName: "linksMenuTrigger", first: true, predicate: ["linksMenuTrigger"], descendants: true, isSignal: true }], ngImport: i0, template: "@if (canDeselectAll()) {\r\n <button mat-menu-item (click)=\"parent().selection?.clear()\" [attr.aria-label]=\"'Deseleziona tutti'\"\r\n (mouseenter)=\"showSubMenu()\">\r\n <mat-icon>clear</mat-icon>Deseleziona tutti\r\n </button>\r\n } @else if (canManageBag()) {\r\n <button mat-menu-item (click)=\"parent().openBag()\" [attr.aria-label]=\"'Gestisci documenti di lavoro'\"\r\n (mouseenter)=\"showSubMenu()\">\r\n <mat-icon>work_outline</mat-icon>Gestisci documenti di lavoro\r\n </button>\r\n }\r\n @if (canOpen()) {\r\n <button mat-menu-item [attr.aria-label]=\"'Apri documento'\" (mouseenter)=\"showSubMenu()\"\r\n (click)=\"open(getSingleSelection())\">\r\n <mat-icon></mat-icon>Apri\r\n </button>\r\n }\r\n @if (canAddToWorkingDocuments()) {\r\n <button mat-menu-item [attr.aria-label]=\"'Aggiungi ai documenti di lavoro'\"\r\n (click)=\"parent().addItemsToBag(getMultipleSelection())\" (mouseenter)=\"showSubMenu()\">\r\n <mat-icon>work_outline</mat-icon>Aggiungi ai documenti di lavoro\r\n </button>\r\n }\r\n @if(canPrint()) {\r\n <button mat-menu-item (click)=\"parent().print()\" [attr.aria-label]=\"'Stampa documento'\" (mouseenter)=\"showSubMenu()\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"20px\" fxLayoutAlign=\"start center\" fxFill>\r\n <div fxFlex=\"*\" fxLayout=\"row\" fxFill fxLayoutAlign=\"start center\">\r\n <mat-icon>print</mat-icon>\r\n <div>Stampa</div>\r\n </div>\r\n <div class=\"accent small bold\">CTRL+P</div>\r\n </div>\r\n </button>\r\n }\r\n @if(canFind()) {\r\n <button mat-menu-item (click)=\"parent().find()\" [attr.aria-label]=\"'Trova nel documento'\" (mouseenter)=\"showSubMenu()\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"20px\" fxLayoutAlign=\"start center\" fxFill>\r\n <div fxFlex=\"*\" fxLayout=\"row\" fxFill fxLayoutAlign=\"start center\">\r\n <mat-icon>find_in_page</mat-icon>\r\n <div>Trova nel documento</div>\r\n </div>\r\n <div class=\"accent small bold\">CTRL+F</div>\r\n </div>\r\n </button>\r\n }\r\n @if (canSendByEmail()) {\r\n <button mat-menu-item (click)=\"parent().sendItemsTo(getMultipleSelection())\"\r\n [attr.aria-label]=\"'Invia documento per email'\" (mouseenter)=\"showSubMenu()\">\r\n <mat-icon>send</mat-icon>Invia per email\r\n </button>\r\n }\r\n @if (canSaveAsPdf()) {\r\n <button mat-menu-item (click)=\"parent().exportPdf(getSingleSelection())\" (mouseenter)=\"showSubMenu()\"\r\n [attr.aria-label]=\"'Salva documento in pdf'\">\r\n <mat-icon>save_alt</mat-icon>Salva in pdf\r\n </button>\r\n }\r\n @if (canOpen()) {\r\n <button mat-menu-item [attr.aria-label]=\"'Genera un link permanente da utilizzare esternamente'\"\r\n (click)=\"parent().showLink(getSingleSelection())\" (mouseenter)=\"showSubMenu()\">\r\n <mat-icon>link</mat-icon>Link\r\n </button>\r\n }\r\n @if (!isReference() && canOpen()) {\r\n <button mat-menu-item [matMenuTriggerFor]=\"linksMenu\" #linksMenuTrigger=\"matMenuTrigger\"\r\n (mouseenter)=\"showSubMenu(linksMenuTrigger)\" (mouseleave)=\"resetSubMenu(linksMenuTrigger)\">\r\n <mat-icon>compare_arrows</mat-icon>Collegamenti\r\n </button>\r\n <mat-menu #linksMenu=\"matMenu\">\r\n @if (!isReference() && canOpen()) {\r\n <button mat-menu-item [attr.aria-label]=\"'Mostra i documenti richiamati da questo'\"\r\n (click)=\"openReferences(getSingleSelection(), 1)\">\r\n Documenti richiamati\r\n </button>\r\n }\r\n @if (!isReference() && canOpen()) {\r\n <button mat-menu-item [attr.aria-label]=\"'Mostra i documenti che richiamano questo'\"\r\n (click)=\"openReferences(getSingleSelection(), 2)\">\r\n Documenti che richiamano\r\n </button>\r\n }\r\n @if (!isReference() && isLawInForce() && canOpen()) {\r\n <button mat-menu-item [attr.aria-label]=\"'Mostra giurisprudenza'\"\r\n (click)=\"openReferences(getSingleSelection(), 4)\">\r\n Juris\r\n </button>\r\n }\r\n @if (!isReference() && isLawInForce() && canOpen()) {\r\n <button mat-menu-item [attr.aria-label]=\"'Mostra modifiche normative'\"\r\n (click)=\"openReferences(getSingleSelection(), 3)\">\r\n Modifiche\r\n </button>\r\n }\r\n </mat-menu>\r\n }\r\n \r\n @if (canSetAsUnread()) {\r\n <button mat-menu-item [attr.aria-label]=\"'Segna come da leggere'\" (click)=\"setRead(false)\"\r\n (mouseenter)=\"showSubMenu()\">\r\n <mat-icon>outlined_flag</mat-icon>Segna come da leggere\r\n </button>\r\n }\r\n @if (canSetAsRead()) {\r\n <button mat-menu-item [attr.aria-label]=\"'Segna come gi\u00E0 letto'\" (click)=\"setRead(true)\"\r\n (mouseenter)=\"showSubMenu()\">\r\n <mat-icon>flag</mat-icon>Segna come gi\u00E0 letto\r\n </button>\r\n }\r\n \r\n \r\n @if ((isLawInForce() || isDeadline()) && canOpen()) {\r\n <button mat-menu-item [attr.aria-label]=\"'Mostra report utilizzo'\"\r\n (click)=\"parent().report(getSingleSelection())\" (mouseenter)=\"showSubMenu()\">\r\n <mat-icon>assignment</mat-icon>Report\r\n </button>\r\n }\r\n \r\n @if (canAccessRS()) {\r\n <mat-divider></mat-divider>\r\n <button mat-menu-item matTooltip=\"Registro & Scadenzario\" [attr.aria-label]=\"'Opzioni di Registro & Scadenzario'\"\r\n [matMenuTriggerFor]=\"rsMenu\" #rsMenuTrigger=\"matMenuTrigger\" (mouseenter)=\"showSubMenu(rsMenuTrigger)\"\r\n (mouseleave)=\"resetSubMenu(rsMenuTrigger)\">\r\n <mat-icon>alarm_on</mat-icon>\r\n Registro e scadenzario\r\n </button>\r\n <mat-menu #rsMenu=\"matMenu\">\r\n <button mat-menu-item [attr.aria-label]=\"'Nuova legge'\" (click)=\"parent().RS_newLaw(getMultipleSelection())\">\r\n Nuova legge\r\n </button>\r\n @if (canOpen()) {\r\n <button mat-menu-item [attr.aria-label]=\"'Nuova attivit\u00E0'\" (click)=\"parent().RS_newActivity(getSingleSelection())\">\r\n Nuova attivit\u00E0\r\n </button>\r\n }\r\n @if (canOpen()) {\r\n <button mat-menu-item [attr.aria-label]=\"'Report utilizzo norma'\" (click)=\"parent().RS_usageReport(getSingleSelection())\">\r\n Report utilizzo norma\r\n </button>\r\n }\r\n </mat-menu>\r\n }", styles: [""], dependencies: [{ kind: "ngmodule", type: FlexModule }, { kind: "directive", type: i1.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i1.DefaultLayoutGapDirective, selector: " [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]", inputs: ["fxLayoutGap", "fxLayoutGap.xs", "fxLayoutGap.sm", "fxLayoutGap.md", "fxLayoutGap.lg", "fxLayoutGap.xl", "fxLayoutGap.lt-sm", "fxLayoutGap.lt-md", "fxLayoutGap.lt-lg", "fxLayoutGap.lt-xl", "fxLayoutGap.gt-xs", "fxLayoutGap.gt-sm", "fxLayoutGap.gt-md", "fxLayoutGap.gt-lg"] }, { kind: "directive", type: i1.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i1.FlexFillDirective, selector: "[fxFill], [fxFlexFill]" }, { kind: "directive", type: i1.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i2.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i2.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i2.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatDividerModule }, { kind: "component", type: i4.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i5.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
184
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.4", type: ClipperDocumentMenuComponent, isStandalone: true, selector: "clipper-document-menu", inputs: { useSelections: { classPropertyName: "useSelections", publicName: "useSelections", isSignal: true, isRequired: false, transformFunction: null }, selectionSource: { classPropertyName: "selectionSource", publicName: "selectionSource", isSignal: true, isRequired: false, transformFunction: null }, parent: { classPropertyName: "parent", publicName: "parent", isSignal: true, isRequired: true, transformFunction: null }, item: { classPropertyName: "item", publicName: "item", isSignal: true, isRequired: false, transformFunction: null }, isReference: { classPropertyName: "isReference", publicName: "isReference", isSignal: true, isRequired: false, transformFunction: null }, isReadable: { classPropertyName: "isReadable", publicName: "isReadable", isSignal: true, isRequired: false, transformFunction: null }, isDeadline: { classPropertyName: "isDeadline", publicName: "isDeadline", isSignal: true, isRequired: false, transformFunction: null }, isLawInForce: { classPropertyName: "isLawInForce", publicName: "isLawInForce", isSignal: true, isRequired: false, transformFunction: null }, isLaw: { classPropertyName: "isLaw", publicName: "isLaw", isSignal: true, isRequired: false, transformFunction: null }, canPrint: { classPropertyName: "canPrint", publicName: "canPrint", isSignal: true, isRequired: false, transformFunction: null }, canFind: { classPropertyName: "canFind", publicName: "canFind", isSignal: true, isRequired: false, transformFunction: null }, canUseCalendar: { classPropertyName: "canUseCalendar", publicName: "canUseCalendar", isSignal: true, isRequired: false, transformFunction: null }, canUseArchive: { classPropertyName: "canUseArchive", publicName: "canUseArchive", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "rsMenuTrigger", first: true, predicate: ["rsMenuTrigger"], descendants: true, isSignal: true }, { propertyName: "linksMenuTrigger", first: true, predicate: ["linksMenuTrigger"], descendants: true, isSignal: true }], ngImport: i0, template: "@if (canDeselectAll()) {\r\n<button mat-menu-item (click)=\"parent().selection?.clear()\" [attr.aria-label]=\"'Deseleziona tutti'\"\r\n (mouseenter)=\"showSubMenu()\">\r\n <mat-icon>clear</mat-icon>Deseleziona tutti\r\n</button>\r\n} @else if (canManageBag()) {\r\n<button mat-menu-item (click)=\"parent().openBag()\" [attr.aria-label]=\"'Gestisci documenti di lavoro'\"\r\n (mouseenter)=\"showSubMenu()\">\r\n <mat-icon>work_outline</mat-icon>Gestisci documenti di lavoro\r\n</button>\r\n}\r\n@if (canOpen()) {\r\n<button mat-menu-item [attr.aria-label]=\"'Apri documento'\" (mouseenter)=\"showSubMenu()\"\r\n (click)=\"open(getSingleSelection())\">\r\n <mat-icon></mat-icon>Apri\r\n</button>\r\n}\r\n@if (canAddToWorkingDocuments()) {\r\n<button mat-menu-item [attr.aria-label]=\"'Aggiungi ai documenti di lavoro'\"\r\n (click)=\"parent().addItemsToBag(getMultipleSelection())\" (mouseenter)=\"showSubMenu()\">\r\n <mat-icon>work_outline</mat-icon>Aggiungi ai documenti di lavoro\r\n</button>\r\n}\r\n@if(canPrint()) {\r\n<button mat-menu-item (click)=\"parent().print()\" [attr.aria-label]=\"'Stampa documento'\" (mouseenter)=\"showSubMenu()\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"20px\" fxLayoutAlign=\"start center\" fxFill>\r\n <div fxFlex=\"*\" fxLayout=\"row\" fxFill fxLayoutAlign=\"start center\">\r\n <mat-icon>print</mat-icon>\r\n <div>Stampa</div>\r\n </div>\r\n <div class=\"accent small bold\">CTRL+P</div>\r\n </div>\r\n</button>\r\n}\r\n@if(canFind()) {\r\n<button mat-menu-item (click)=\"parent().find()\" [attr.aria-label]=\"'Trova nel documento'\" (mouseenter)=\"showSubMenu()\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"20px\" fxLayoutAlign=\"start center\" fxFill>\r\n <div fxFlex=\"*\" fxLayout=\"row\" fxFill fxLayoutAlign=\"start center\">\r\n <mat-icon>find_in_page</mat-icon>\r\n <div>Trova nel documento</div>\r\n </div>\r\n <div class=\"accent small bold\">CTRL+F</div>\r\n </div>\r\n</button>\r\n}\r\n@if (canSendByEmail()) {\r\n<button mat-menu-item (click)=\"parent().sendItemsTo(getMultipleSelection())\"\r\n [attr.aria-label]=\"'Invia documento per email'\" (mouseenter)=\"showSubMenu()\">\r\n <mat-icon>send</mat-icon>Invia per email\r\n</button>\r\n}\r\n@if (canAddToArchive()) {\r\n<button mat-menu-item (click)=\"parent().addToArchive(getMultipleSelection())\" [attr.aria-label]=\"'Archivia'\">\r\n <mat-icon>account_tree</mat-icon>Archivia\r\n</button>\r\n}\r\n@if (canSaveAsPdf()) {\r\n<button mat-menu-item (click)=\"parent().exportPdf(getSingleSelection())\" (mouseenter)=\"showSubMenu()\"\r\n [attr.aria-label]=\"'Salva documento in pdf'\">\r\n <mat-icon>save_alt</mat-icon>Salva in pdf\r\n</button>\r\n}\r\n@if (canOpen()) {\r\n<button mat-menu-item [attr.aria-label]=\"'Genera un link permanente da utilizzare esternamente'\"\r\n (click)=\"parent().showLink(getSingleSelection())\" (mouseenter)=\"showSubMenu()\">\r\n <mat-icon>link</mat-icon>Link\r\n</button>\r\n}\r\n@if (canOpen()) {\r\n<button mat-menu-item [attr.aria-label]=\"'Copia metadati negli appunti'\"\r\n (click)=\"parent().copyMetadataToClipboard(getSingleSelection())\" (mouseenter)=\"showSubMenu()\">\r\n <mat-icon>content_copy</mat-icon>Copia metadati\r\n</button>\r\n}\r\n@if (!isReference() && canOpen()) {\r\n<button mat-menu-item [matMenuTriggerFor]=\"linksMenu\" #linksMenuTrigger=\"matMenuTrigger\"\r\n (mouseenter)=\"showSubMenu(linksMenuTrigger)\" (mouseleave)=\"resetSubMenu(linksMenuTrigger)\">\r\n <mat-icon>compare_arrows</mat-icon>Collegamenti\r\n</button>\r\n<mat-menu #linksMenu=\"matMenu\">\r\n @if (!isReference() && canOpen()) {\r\n <button mat-menu-item [attr.aria-label]=\"'Mostra i documenti richiamati da questo'\"\r\n (click)=\"openReferences(getSingleSelection(), 1)\">\r\n Documenti richiamati\r\n </button>\r\n }\r\n @if (!isReference() && canOpen()) {\r\n <button mat-menu-item [attr.aria-label]=\"'Mostra i documenti che richiamano questo'\"\r\n (click)=\"openReferences(getSingleSelection(), 2)\">\r\n Documenti che richiamano\r\n </button>\r\n }\r\n @if (!isReference() && isLawInForce() && canOpen()) {\r\n <button mat-menu-item [attr.aria-label]=\"'Mostra giurisprudenza'\" (click)=\"openReferences(getSingleSelection(), 4)\">\r\n Juris\r\n </button>\r\n }\r\n @if (!isReference() && isLawInForce() && canOpen()) {\r\n <button mat-menu-item [attr.aria-label]=\"'Mostra modifiche normative'\"\r\n (click)=\"openReferences(getSingleSelection(), 3)\">\r\n Modifiche\r\n </button>\r\n }\r\n</mat-menu>\r\n}\r\n@if (canAddToCalendar()) {\r\n<button mat-menu-item [attr.aria-label]=\"'Aggiungi al calendario'\"\r\n (click)=\"parent().addToCalendar(getSingleSelection())\">\r\n <mat-icon>alarm</mat-icon> {{ isDeadline() ? 'Aggiungi al tuo calendario' : 'Crea scadenza'}}\r\n</button>\r\n}\r\n@if (!isReference() && isDeadline()) {\r\n@if(useSelections()) {\r\n<button mat-menu-item [attr.aria-label]=\"'Importa in Oultook (iCalandar)'\" (click)=\"parent().exportResults(2)\">\r\n <mat-icon>mail_outline</mat-icon>Importa in Outlook (iCalendar)\r\n</button>\r\n} @else if (item()) {\r\n<button mat-menu-item [attr.aria-label]=\"'Importa in Oultook (iCalandar)'\" (click)=\"parent().exportItems([item().documentId], null, 2)\">\r\n <mat-icon>mail_outline</mat-icon>Importa in Outlook (iCalendar)\r\n</button>\r\n}\r\n}\r\n@if (canSetAsUnread()) {\r\n<button mat-menu-item [attr.aria-label]=\"'Segna come da leggere'\" (click)=\"setRead(false)\" (mouseenter)=\"showSubMenu()\">\r\n <mat-icon>outlined_flag</mat-icon>Segna come da leggere\r\n</button>\r\n}\r\n@if (canSetAsRead()) {\r\n<button mat-menu-item [attr.aria-label]=\"'Segna come gi\u00E0 letto'\" (click)=\"setRead(true)\" (mouseenter)=\"showSubMenu()\">\r\n <mat-icon>flag</mat-icon>Segna come gi\u00E0 letto\r\n</button>\r\n}\r\n\r\n\r\n@if ((isLawInForce() || isDeadline()) && canOpen()) {\r\n<button mat-menu-item [attr.aria-label]=\"'Mostra report utilizzo'\" (click)=\"parent().report(getSingleSelection())\"\r\n (mouseenter)=\"showSubMenu()\">\r\n <mat-icon>assignment</mat-icon>Report\r\n</button>\r\n}\r\n\r\n@if (canAccessRS()) {\r\n<mat-divider></mat-divider>\r\n<button mat-menu-item matTooltip=\"Registro & Scadenzario\" [attr.aria-label]=\"'Opzioni di Registro & Scadenzario'\"\r\n [matMenuTriggerFor]=\"rsMenu\" #rsMenuTrigger=\"matMenuTrigger\" (mouseenter)=\"showSubMenu(rsMenuTrigger)\"\r\n (mouseleave)=\"resetSubMenu(rsMenuTrigger)\">\r\n <mat-icon>alarm_on</mat-icon>\r\n Registro e scadenzario\r\n</button>\r\n<mat-menu #rsMenu=\"matMenu\">\r\n <button mat-menu-item [attr.aria-label]=\"'Nuova legge'\" (click)=\"parent().RS_newLaw(getMultipleSelection())\">\r\n Nuova legge\r\n </button>\r\n @if (canOpen()) {\r\n <button mat-menu-item [attr.aria-label]=\"'Nuova attivit\u00E0'\" (click)=\"parent().RS_newActivity(getSingleSelection())\">\r\n Nuova attivit\u00E0\r\n </button>\r\n }\r\n @if (canOpen()) {\r\n <button mat-menu-item [attr.aria-label]=\"'Report utilizzo norma'\"\r\n (click)=\"parent().RS_usageReport(getSingleSelection())\">\r\n Report utilizzo norma\r\n </button>\r\n }\r\n</mat-menu>\r\n}", styles: [""], dependencies: [{ kind: "ngmodule", type: FlexModule }, { kind: "directive", type: i1.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i1.DefaultLayoutGapDirective, selector: " [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]", inputs: ["fxLayoutGap", "fxLayoutGap.xs", "fxLayoutGap.sm", "fxLayoutGap.md", "fxLayoutGap.lg", "fxLayoutGap.xl", "fxLayoutGap.lt-sm", "fxLayoutGap.lt-md", "fxLayoutGap.lt-lg", "fxLayoutGap.lt-xl", "fxLayoutGap.gt-xs", "fxLayoutGap.gt-sm", "fxLayoutGap.gt-md", "fxLayoutGap.gt-lg"] }, { kind: "directive", type: i1.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i1.FlexFillDirective, selector: "[fxFill], [fxFlexFill]" }, { kind: "directive", type: i1.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i2.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i2.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i2.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatDividerModule }, { kind: "component", type: i4.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i5.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
181
185
|
}
|
|
182
186
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.4", ngImport: i0, type: ClipperDocumentMenuComponent, decorators: [{
|
|
183
187
|
type: Component,
|
|
184
|
-
args: [{ selector: 'clipper-document-menu', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [FlexModule, MatMenuModule, MatIconModule, MatDividerModule, MatTooltipModule], template: "@if (canDeselectAll()) {\r\n
|
|
188
|
+
args: [{ selector: 'clipper-document-menu', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [FlexModule, MatMenuModule, MatIconModule, MatDividerModule, MatTooltipModule], template: "@if (canDeselectAll()) {\r\n<button mat-menu-item (click)=\"parent().selection?.clear()\" [attr.aria-label]=\"'Deseleziona tutti'\"\r\n (mouseenter)=\"showSubMenu()\">\r\n <mat-icon>clear</mat-icon>Deseleziona tutti\r\n</button>\r\n} @else if (canManageBag()) {\r\n<button mat-menu-item (click)=\"parent().openBag()\" [attr.aria-label]=\"'Gestisci documenti di lavoro'\"\r\n (mouseenter)=\"showSubMenu()\">\r\n <mat-icon>work_outline</mat-icon>Gestisci documenti di lavoro\r\n</button>\r\n}\r\n@if (canOpen()) {\r\n<button mat-menu-item [attr.aria-label]=\"'Apri documento'\" (mouseenter)=\"showSubMenu()\"\r\n (click)=\"open(getSingleSelection())\">\r\n <mat-icon></mat-icon>Apri\r\n</button>\r\n}\r\n@if (canAddToWorkingDocuments()) {\r\n<button mat-menu-item [attr.aria-label]=\"'Aggiungi ai documenti di lavoro'\"\r\n (click)=\"parent().addItemsToBag(getMultipleSelection())\" (mouseenter)=\"showSubMenu()\">\r\n <mat-icon>work_outline</mat-icon>Aggiungi ai documenti di lavoro\r\n</button>\r\n}\r\n@if(canPrint()) {\r\n<button mat-menu-item (click)=\"parent().print()\" [attr.aria-label]=\"'Stampa documento'\" (mouseenter)=\"showSubMenu()\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"20px\" fxLayoutAlign=\"start center\" fxFill>\r\n <div fxFlex=\"*\" fxLayout=\"row\" fxFill fxLayoutAlign=\"start center\">\r\n <mat-icon>print</mat-icon>\r\n <div>Stampa</div>\r\n </div>\r\n <div class=\"accent small bold\">CTRL+P</div>\r\n </div>\r\n</button>\r\n}\r\n@if(canFind()) {\r\n<button mat-menu-item (click)=\"parent().find()\" [attr.aria-label]=\"'Trova nel documento'\" (mouseenter)=\"showSubMenu()\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"20px\" fxLayoutAlign=\"start center\" fxFill>\r\n <div fxFlex=\"*\" fxLayout=\"row\" fxFill fxLayoutAlign=\"start center\">\r\n <mat-icon>find_in_page</mat-icon>\r\n <div>Trova nel documento</div>\r\n </div>\r\n <div class=\"accent small bold\">CTRL+F</div>\r\n </div>\r\n</button>\r\n}\r\n@if (canSendByEmail()) {\r\n<button mat-menu-item (click)=\"parent().sendItemsTo(getMultipleSelection())\"\r\n [attr.aria-label]=\"'Invia documento per email'\" (mouseenter)=\"showSubMenu()\">\r\n <mat-icon>send</mat-icon>Invia per email\r\n</button>\r\n}\r\n@if (canAddToArchive()) {\r\n<button mat-menu-item (click)=\"parent().addToArchive(getMultipleSelection())\" [attr.aria-label]=\"'Archivia'\">\r\n <mat-icon>account_tree</mat-icon>Archivia\r\n</button>\r\n}\r\n@if (canSaveAsPdf()) {\r\n<button mat-menu-item (click)=\"parent().exportPdf(getSingleSelection())\" (mouseenter)=\"showSubMenu()\"\r\n [attr.aria-label]=\"'Salva documento in pdf'\">\r\n <mat-icon>save_alt</mat-icon>Salva in pdf\r\n</button>\r\n}\r\n@if (canOpen()) {\r\n<button mat-menu-item [attr.aria-label]=\"'Genera un link permanente da utilizzare esternamente'\"\r\n (click)=\"parent().showLink(getSingleSelection())\" (mouseenter)=\"showSubMenu()\">\r\n <mat-icon>link</mat-icon>Link\r\n</button>\r\n}\r\n@if (canOpen()) {\r\n<button mat-menu-item [attr.aria-label]=\"'Copia metadati negli appunti'\"\r\n (click)=\"parent().copyMetadataToClipboard(getSingleSelection())\" (mouseenter)=\"showSubMenu()\">\r\n <mat-icon>content_copy</mat-icon>Copia metadati\r\n</button>\r\n}\r\n@if (!isReference() && canOpen()) {\r\n<button mat-menu-item [matMenuTriggerFor]=\"linksMenu\" #linksMenuTrigger=\"matMenuTrigger\"\r\n (mouseenter)=\"showSubMenu(linksMenuTrigger)\" (mouseleave)=\"resetSubMenu(linksMenuTrigger)\">\r\n <mat-icon>compare_arrows</mat-icon>Collegamenti\r\n</button>\r\n<mat-menu #linksMenu=\"matMenu\">\r\n @if (!isReference() && canOpen()) {\r\n <button mat-menu-item [attr.aria-label]=\"'Mostra i documenti richiamati da questo'\"\r\n (click)=\"openReferences(getSingleSelection(), 1)\">\r\n Documenti richiamati\r\n </button>\r\n }\r\n @if (!isReference() && canOpen()) {\r\n <button mat-menu-item [attr.aria-label]=\"'Mostra i documenti che richiamano questo'\"\r\n (click)=\"openReferences(getSingleSelection(), 2)\">\r\n Documenti che richiamano\r\n </button>\r\n }\r\n @if (!isReference() && isLawInForce() && canOpen()) {\r\n <button mat-menu-item [attr.aria-label]=\"'Mostra giurisprudenza'\" (click)=\"openReferences(getSingleSelection(), 4)\">\r\n Juris\r\n </button>\r\n }\r\n @if (!isReference() && isLawInForce() && canOpen()) {\r\n <button mat-menu-item [attr.aria-label]=\"'Mostra modifiche normative'\"\r\n (click)=\"openReferences(getSingleSelection(), 3)\">\r\n Modifiche\r\n </button>\r\n }\r\n</mat-menu>\r\n}\r\n@if (canAddToCalendar()) {\r\n<button mat-menu-item [attr.aria-label]=\"'Aggiungi al calendario'\"\r\n (click)=\"parent().addToCalendar(getSingleSelection())\">\r\n <mat-icon>alarm</mat-icon> {{ isDeadline() ? 'Aggiungi al tuo calendario' : 'Crea scadenza'}}\r\n</button>\r\n}\r\n@if (!isReference() && isDeadline()) {\r\n@if(useSelections()) {\r\n<button mat-menu-item [attr.aria-label]=\"'Importa in Oultook (iCalandar)'\" (click)=\"parent().exportResults(2)\">\r\n <mat-icon>mail_outline</mat-icon>Importa in Outlook (iCalendar)\r\n</button>\r\n} @else if (item()) {\r\n<button mat-menu-item [attr.aria-label]=\"'Importa in Oultook (iCalandar)'\" (click)=\"parent().exportItems([item().documentId], null, 2)\">\r\n <mat-icon>mail_outline</mat-icon>Importa in Outlook (iCalendar)\r\n</button>\r\n}\r\n}\r\n@if (canSetAsUnread()) {\r\n<button mat-menu-item [attr.aria-label]=\"'Segna come da leggere'\" (click)=\"setRead(false)\" (mouseenter)=\"showSubMenu()\">\r\n <mat-icon>outlined_flag</mat-icon>Segna come da leggere\r\n</button>\r\n}\r\n@if (canSetAsRead()) {\r\n<button mat-menu-item [attr.aria-label]=\"'Segna come gi\u00E0 letto'\" (click)=\"setRead(true)\" (mouseenter)=\"showSubMenu()\">\r\n <mat-icon>flag</mat-icon>Segna come gi\u00E0 letto\r\n</button>\r\n}\r\n\r\n\r\n@if ((isLawInForce() || isDeadline()) && canOpen()) {\r\n<button mat-menu-item [attr.aria-label]=\"'Mostra report utilizzo'\" (click)=\"parent().report(getSingleSelection())\"\r\n (mouseenter)=\"showSubMenu()\">\r\n <mat-icon>assignment</mat-icon>Report\r\n</button>\r\n}\r\n\r\n@if (canAccessRS()) {\r\n<mat-divider></mat-divider>\r\n<button mat-menu-item matTooltip=\"Registro & Scadenzario\" [attr.aria-label]=\"'Opzioni di Registro & Scadenzario'\"\r\n [matMenuTriggerFor]=\"rsMenu\" #rsMenuTrigger=\"matMenuTrigger\" (mouseenter)=\"showSubMenu(rsMenuTrigger)\"\r\n (mouseleave)=\"resetSubMenu(rsMenuTrigger)\">\r\n <mat-icon>alarm_on</mat-icon>\r\n Registro e scadenzario\r\n</button>\r\n<mat-menu #rsMenu=\"matMenu\">\r\n <button mat-menu-item [attr.aria-label]=\"'Nuova legge'\" (click)=\"parent().RS_newLaw(getMultipleSelection())\">\r\n Nuova legge\r\n </button>\r\n @if (canOpen()) {\r\n <button mat-menu-item [attr.aria-label]=\"'Nuova attivit\u00E0'\" (click)=\"parent().RS_newActivity(getSingleSelection())\">\r\n Nuova attivit\u00E0\r\n </button>\r\n }\r\n @if (canOpen()) {\r\n <button mat-menu-item [attr.aria-label]=\"'Report utilizzo norma'\"\r\n (click)=\"parent().RS_usageReport(getSingleSelection())\">\r\n Report utilizzo norma\r\n </button>\r\n }\r\n</mat-menu>\r\n}" }]
|
|
185
189
|
}] });
|
|
186
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnQtbWVudS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hcnMtdXRpbHMvY2xpcHBlci51aS91aS9kb2N1bWVudC1tZW51L2RvY3VtZW50LW1lbnUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJzLXV0aWxzL2NsaXBwZXIudWkvdWkvZG9jdW1lbnQtbWVudS9kb2N1bWVudC1tZW51LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQXFCLFNBQVMsRUFBVSxNQUFNLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN0SixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGFBQWEsRUFBa0IsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDbkQsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDMUMsT0FBTyxFQUF1QixZQUFZLEVBQUUsWUFBWSxFQUFFLE1BQU0sdUNBQXVDLENBQUM7Ozs7Ozs7QUFZeEcsTUFBTSxPQUFPLDRCQUE0QjtJQVR6QztRQVdVLGtCQUFhLEdBQXVDLFNBQVMsQ0FBaUIsZUFBZSxDQUFDLENBQUM7UUFDL0YscUJBQWdCLEdBQXVDLFNBQVMsQ0FBaUIsa0JBQWtCLENBQUMsQ0FBQztRQUNyRyxvQkFBZSxHQUF5QztZQUM5RCxJQUFJLENBQUMsZ0JBQWdCO1lBQ3JCLElBQUksQ0FB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Q3RDLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3BCLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3ZDLENBQUM7SUFDSCxDQUFDO0lBRUQ7Ozs7S0FJQztJQUNTLGNBQWMsQ0FBQyxJQUF5QixFQUFFLElBQVk7UUFDOUQsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDcEIsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLGNBQWMsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3ZELENBQUM7SUFDSCxDQUFDOzhHQTdLVSw0QkFBNEI7a0dBQTVCLDRCQUE0Qixxd0RDbkJ6QyxnaE1BNElHLHlERDVIUyxVQUFVLHU2RUFBRSxhQUFhLDZ2QkFBRSxhQUFhLG1MQUFFLGdCQUFnQixrSUFBRSxnQkFBZ0I7OzJGQUczRSw0QkFBNEI7a0JBVHhDLFNBQVM7K0JBQ0UsdUJBQXVCLGNBR3JCLElBQUksbUJBQ0MsdUJBQXVCLENBQUMsTUFBTSxXQUN0QyxDQUFDLFVBQVUsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIE9uRGVzdHJveSwgT25Jbml0LCBSZW5kZXJlcjIsIFNpZ25hbCwgaW5qZWN0LCBpbnB1dCwgdmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1hdFRvb2x0aXBNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwJztcclxuaW1wb3J0IHsgTWF0RGl2aWRlck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpdmlkZXInO1xyXG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XHJcbmltcG9ydCB7IE1hdE1lbnVNb2R1bGUsIE1hdE1lbnVUcmlnZ2VyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvbWVudSc7XHJcbmltcG9ydCB7IEZsZXhNb2R1bGUgfSBmcm9tICdAbmdicmFja2V0L25neC1sYXlvdXQnO1xyXG5pbXBvcnQgeyBTdWJqZWN0LCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgQ2xpcHBlckRvY3VtZW50SW5mbywgQ2xpcHBlck1vZGVsLCBDbGlwcGVyVXRpbHMgfSBmcm9tICdAYXJzZWRpemlvbmkvYXJzLXV0aWxzL2NsaXBwZXIuY29tbW9uJztcclxuaW1wb3J0IHsgQ2xpcHBlclNlYXJjaFJlc3VsdE1hbmFnZXIgfSBmcm9tICcuLi9zZWFyY2gtcmVzdWx0LW1hbmFnZXIvc2VhcmNoLXJlc3VsdC1tYW5hZ2VyJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnY2xpcHBlci1kb2N1bWVudC1tZW51JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZG9jdW1lbnQtbWVudS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vZG9jdW1lbnQtbWVudS5jb21wb25lbnQuc2NzcyddLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgaW1wb3J0czogW0ZsZXhNb2R1bGUsIE1hdE1lbnVNb2R1bGUsIE1hdEljb25Nb2R1bGUsIE1hdERpdmlkZXJNb2R1bGUsIE1hdFRvb2x0aXBNb2R1bGVdXHJcblxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ2xpcHBlckRvY3VtZW50TWVudUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuXHJcbiAgcHJpdmF0ZSByc01lbnVUcmlnZ2VyOiBTaWduYWw8TWF0TWVudVRyaWdnZXIgfCB1bmRlZmluZWQ+ID0gdmlld0NoaWxkPE1hdE1lbnVUcmlnZ2VyPigncnNNZW51VHJpZ2dlcicpO1xyXG4gIHByaXZhdGUgbGlua3NNZW51VHJpZ2dlcjogU2lnbmFsPE1hdE1lbnVUcmlnZ2VyIHwgdW5kZWZpbmVkPiA9IHZpZXdDaGlsZDxNYXRNZW51VHJpZ2dlcj4oJ2xpbmtzTWVudVRyaWdnZXInKTtcclxuICBwcml2YXRlIGFsbE1lbnVUcmlnZ2VyczogU2lnbmFsPE1hdE1lbnVUcmlnZ2VyIHwgdW5kZWZpbmVkPltdID0gW1xyXG4gICAgdGhpcy5saW5rc01lbnVUcmlnZ2VyLFxyXG4gICAgdGhpcy5yc01lbnVUcmlnZ2VyXHJcbiAgXVxyXG4gIHByaXZhdGUgcmVuZGVyZXIyID0gaW5qZWN0KFJlbmRlcmVyMik7XHJcbiAgcHJvdGVjdGVkIHVuc3Vic2NyaWJlOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICBwcm90ZWN0ZWQgY2hhbmdlRGV0ZWN0b3IgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xyXG4gIHVzZVNlbGVjdGlvbnMgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XHJcbiAgc2VsZWN0aW9uU291cmNlID0gaW5wdXQ8J2JhZycgfCAnc2VsZWN0aW9uJyB8ICdub25lJyB8IG51bGw+KCdzZWxlY3Rpb24nKTtcclxuICBwcm90ZWN0ZWQgc2VsZWN0aW9uID0gKCk6IENsaXBwZXJEb2N1bWVudEluZm9bXSA9PiB7XHJcbiAgICBpZiAodGhpcy51c2VTZWxlY3Rpb25zKCkpIHtcclxuICAgICAgc3dpdGNoICh0aGlzLnNlbGVjdGlvblNvdXJjZSgpKSB7XHJcbiAgICAgICAgY2FzZSAnYmFnJzpcclxuICAgICAgICAgIHJldHVybiB0aGlzLnBhcmVudCgpPy5jbGlwcGVyU2VydmljZS5iYWcoKSA/PyBbXTtcclxuICAgICAgICBjYXNlICdzZWxlY3Rpb24nOlxyXG4gICAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50KCk/LnNlbGVjdGlvbj8uYWxsID8/IFtdO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gW107XHJcbiAgfTtcclxuICBwYXJlbnQgPSBpbnB1dC5yZXF1aXJlZDxDbGlwcGVyU2VhcmNoUmVzdWx0TWFuYWdlcj4oKTtcclxuICBpdGVtID0gaW5wdXQ8Q2xpcHBlckRvY3VtZW50SW5mbz4oKTtcclxuICBpc1JlZmVyZW5jZSA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuICBpc1JlYWRhYmxlID0gaW5wdXQ8Ym9vbGVhbj4odHJ1ZSk7XHJcbiAgaXNEZWFkbGluZSA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuICBpc0xhd0luRm9yY2UgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XHJcbiAgaXNMYXcgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XHJcbiAgY2FuUHJpbnQgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XHJcbiAgY2FuRmluZCA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuICBwcm90ZWN0ZWQgY2FuRGVzZWxlY3RBbGwgPSAoKTogYm9vbGVhbiA9PiB0aGlzLnNlbGVjdGlvblNvdXJjZSgpID09PSAnc2VsZWN0aW9uJyAmJiB0aGlzLnNlbGVjdGlvbigpLmxlbmd0aCA+IDA7XHJcbiAgcHJvdGVjdGVkIGNhbk1hbmFnZUJhZyA9ICgpOiBib29sZWFuID0+IHRoaXMuc2VsZWN0aW9uU291cmNlKCkgPT09ICdiYWcnO1xyXG4gIHByb3RlY3RlZCBjYW5PcGVuID0gKCk6IGJvb2xlYW4gPT4gKHRoaXMuZ2V0U2luZ2xlU2VsZWN0aW9uKCk/LmRvY3VtZW50SWQ/Lmxlbmd0aCA/PyAwKSA+IDA7XHJcblxyXG4gIHByb3RlY3RlZCBjYW5BZGRUb1dvcmtpbmdEb2N1bWVudHMgPSAoKTogYm9vbGVhbiA9PiB0aGlzLnNlbGVjdGlvblNvdXJjZSgpICE9PSAnYmFnJyAmJiB0aGlzLmdldE11bHRpcGxlU2VsZWN0aW9uKCkubGVuZ3RoID4gMDtcclxuXHJcbiAgcHJvdGVjdGVkIGNhblNlbmRCeUVtYWlsID0gKCk6IGJvb2xlYW4gPT4gdGhpcy5nZXRNdWx0aXBsZVNlbGVjdGlvbigpLmxlbmd0aCA+IDA7XHJcblxyXG4gIHByb3RlY3RlZCBjYW5TYXZlQXNQZGYgPSAoKTogYm9vbGVhbiA9PiB7XHJcbiAgICBjb25zdCBpdGVtID0gdGhpcy5nZXRTaW5nbGVTZWxlY3Rpb24oKTtcclxuICAgIHJldHVybiBpdGVtICE9PSBudWxsICYmIGl0ZW0/Lm1vZGVsICE9PSBDbGlwcGVyTW9kZWwuQ29vcmRpbmFtZW50bztcclxuICB9XHJcbiAgcHJvdGVjdGVkIGNhblNldEFzUmVhZCA9ICgpOiBib29sZWFuID0+IHtcclxuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5nZXRNdWx0aXBsZVNlbGVjdGlvbigpO1xyXG4gICAgcmV0dXJuIHRoaXMuaXNSZWFkYWJsZSgpICYmIChpdGVtcy5sZW5ndGggPiAxIHx8IChpdGVtcy5sZW5ndGggPT09IDEgJiYgaXRlbXNbMF0uaXNSZWFkICE9PSB0cnVlICYmIFxyXG4gICAgICBDbGlwcGVyVXRpbHMuaXNDbGlwcGVyTW9kZWxSZWFkYWJsZShpdGVtc1swXS5tb2RlbCkpKTtcclxuICB9O1xyXG4gIHByb3RlY3RlZCBjYW5TZXRBc1VucmVhZCA9ICgpOiBib29sZWFuID0+IHtcclxuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5nZXRNdWx0aXBsZVNlbGVjdGlvbigpO1xyXG4gICAgcmV0dXJuIHRoaXMuaXNSZWFkYWJsZSgpICYmIChpdGVtcy5sZW5ndGggPiAxIHx8IChpdGVtcy5sZW5ndGggPT09IDEgJiYgaXRlbXNbMF0uaXNSZWFkID09PSB0cnVlICYmIFxyXG4gICAgICBDbGlwcGVyVXRpbHMuaXNDbGlwcGVyTW9kZWxSZWFkYWJsZShpdGVtc1swXS5tb2RlbCkpKTtcclxuICB9O1xyXG4gIHByb3RlY3RlZCBjYW5BY2Nlc3NSUyA9ICgpOiBib29sZWFuID0+IHtcclxuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5nZXRNdWx0aXBsZVNlbGVjdGlvbigpO1xyXG4gICAgcmV0dXJuIHRoaXMucGFyZW50KCk/LlJTX2VuYWJsZWQoaXRlbXMpID09PSB0cnVlICYmICF0aGlzLnVzZVNlbGVjdGlvbnMoKTtcclxuICB9O1xyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnNlbGVjdGlvblNvdXJjZSgpID09PSBcInNlbGVjdGlvblwiKSB7XHJcbiAgICAgIHRoaXMucGFyZW50KCk/LnNlbGVjdGlvbj8uY2hhbmdlZFxyXG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlKSlcclxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICB0aGlzLnVuc3Vic2NyaWJlLm5leHQoKTtcclxuICAgIHRoaXMudW5zdWJzY3JpYmUuY29tcGxldGUoKTtcclxuICB9XHJcblxyXG5cclxuICAvKipcclxuICAgKiBHZXQgYSBzaW5nbGUgc2VsZWN0aW9uXHJcbiAgICogQHJldHVybnMgdGhlIHNpbmdsZSBzZWxlY3Rpb24gb3IgbnVsbFxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBnZXRTaW5nbGVTZWxlY3Rpb24oKTogQ2xpcHBlckRvY3VtZW50SW5mbyB8IG51bGwgfCB1bmRlZmluZWQge1xyXG4gICAgaWYgKHRoaXMuaXRlbSgpKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLml0ZW0oKTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3Rpb24oKS5sZW5ndGggPT09IDEpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uKClbMF07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCBtdWx0aXBsZSBzZWxlY3Rpb25cclxuICAgKiBAcmV0dXJucyA6IHRoZSBtdWx0aXBsZSBzZWxlY3Rpb24gb3IgYXJyYXkgZW1wdHlcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgZ2V0TXVsdGlwbGVTZWxlY3Rpb24oKTogQ2xpcHBlckRvY3VtZW50SW5mb1tdIHtcclxuICAgIGlmICh0aGlzLml0ZW0oKSkge1xyXG4gICAgICBjb25zdCBpdGVtID0gdGhpcy5pdGVtKCk7XHJcbiAgICAgIGlmIChpdGVtKSB7XHJcbiAgICAgICAgcmV0dXJuIFtpdGVtXTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGlvbigpLmxlbmd0aCA+IDApIHtcclxuICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uKCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gW107XHJcbiAgfVxyXG5cclxuICAvKiogXHJcbiAgICogU2hvdyBhbmQgaGlkZSBzdWIgbWVudXNcclxuICAgKiBAcGFyYW0gdHJpZ2dlcjogdGhlIHRyaWdnZXIgdG8gdXNlIG9yIG51bGwgdG8gZGVzZWxlY3RcclxuICAqL1xyXG4gIHByb3RlY3RlZCBzaG93U3ViTWVudSh0cmlnZ2VyOiBNYXRNZW51VHJpZ2dlciB8IG51bGwgPSBudWxsKSB7XHJcbiAgICB0aGlzLmFsbE1lbnVUcmlnZ2Vycy5mb3JFYWNoKG1lbnVUcmlnZ2VyID0+IHtcclxuICAgICAgY29uc3QgbWVudSA9IG1lbnVUcmlnZ2VyKCk7XHJcbiAgICAgIGlmIChtZW51KSB7XHJcbiAgICAgICAgaWYgKG1lbnUubWVudU9wZW4pIHtcclxuICAgICAgICAgIG1lbnUuY2xvc2VNZW51KCk7XHJcbiAgICAgICAgICB0aGlzLnJlc2V0U3ViTWVudShtZW51KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgdHJpZ2dlcj8ub3Blbk1lbnUoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlc2V0IHN1YiBtZW51XHJcbiAgICogQHBhcmFtIHRyaWdnZXI6IHRoZSB0cmlnZ2VyIHRvIHVzZVxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCByZXNldFN1Yk1lbnUodHJpZ2dlcjogTWF0TWVudVRyaWdnZXIpIHtcclxuICAgIHRoaXMucmVuZGVyZXIyLnJlbW92ZUNsYXNzKHRyaWdnZXJbJ19lbGVtZW50J10ubmF0aXZlRWxlbWVudCwgJ2Nkay1mb2N1c2VkJyk7XHJcbiAgICB0aGlzLnJlbmRlcmVyMi5yZW1vdmVDbGFzcyh0cmlnZ2VyWydfZWxlbWVudCddLm5hdGl2ZUVsZW1lbnQsICdjZGstcHJvZ3JhbS1mb2N1c2VkJyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDaGVjayBpZiBjdXJyZW50IGl0ZW0gb3Igc2VsZWN0aW9uIGlzIHJlYWRcclxuICAgKiBAcmV0dXJucyAwIGlmIG5vdCByZWFkLCAxIGlmIHJlYWQsIDIgaWYgdW5rbm93blxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBpc1JlYWQoKTogbnVtYmVyIHtcclxuICAgIGlmICh0aGlzLml0ZW0oKSkgcmV0dXJuIHRoaXMuaXRlbSgpPy5pc1JlYWQgPT09IHRydWUgPyAxIDogMDtcclxuICAgIGlmICh0aGlzLnBhcmVudCgpPy5oYXNBbnlTZWxlY3Rpb24oKSkgcmV0dXJuIDI7XHJcbiAgICBjb25zdCBmaXJzdFNlbGVjdGlvbiA9IHRoaXMucGFyZW50KCk/LmdldFNpbmdsZVNlbGVjdGlvbigpO1xyXG4gICAgaWYgKGZpcnN0U2VsZWN0aW9uKSB7XHJcbiAgICAgIHJldHVybiBmaXJzdFNlbGVjdGlvbi5pc1JlYWQgPT09IHRydWUgPyAxIDogMDtcclxuICAgIH1cclxuICAgIHJldHVybiAwO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0IHRoZSBpcyByZWFkIGZsYWcgdmFsdWVcclxuICAgKiBAcGFyYW0gdmFsdWU6IHRydWUgb3IgZmFsc2VcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgc2V0UmVhZCh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5wYXJlbnQoKT8uc2V0UmVhZCh2YWx1ZSwgdGhpcy5pdGVtKCkpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogT3BlbiBhIGRvY3VtZW50XHJcbiAgICogQHBhcmFtIGl0ZW0gOiB0aGUgaXRlbSBcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgb3BlbihpdGVtOiBDbGlwcGVyRG9jdW1lbnRJbmZvKSB7XHJcbiAgICBpZiAoaXRlbS5kb2N1bWVudElkKSB7XHJcbiAgICAgIHRoaXMucGFyZW50KCk/Lm9wZW4oaXRlbS5kb2N1bWVudElkKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gKiBPcGVuIGRvY3VtZW50IHJlZmVyZW5jZXNcclxuICogQHBhcmFtIGl0ZW0gOiB0aGUgaXRlbSBcclxuICogQHBhcmFtIG1vZGU6IHRoZSBtb2RlXHJcbiAqL1xyXG4gIHByb3RlY3RlZCBvcGVuUmVmZXJlbmNlcyhpdGVtOiBDbGlwcGVyRG9jdW1lbnRJbmZvLCBtb2RlOiBudW1iZXIpIHtcclxuICAgIGlmIChpdGVtLmRvY3VtZW50SWQpIHtcclxuICAgICAgdGhpcy5wYXJlbnQoKT8ub3BlblJlZmVyZW5jZXMoaXRlbS5kb2N1bWVudElkLCBtb2RlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG59XHJcbiIsIkBpZiAoY2FuRGVzZWxlY3RBbGwoKSkge1xyXG4gIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwicGFyZW50KCkuc2VsZWN0aW9uPy5jbGVhcigpXCIgW2F0dHIuYXJpYS1sYWJlbF09XCInRGVzZWxlemlvbmEgdHV0dGknXCJcclxuICAgIChtb3VzZWVudGVyKT1cInNob3dTdWJNZW51KClcIj5cclxuICAgIDxtYXQtaWNvbj5jbGVhcjwvbWF0LWljb24+RGVzZWxlemlvbmEgdHV0dGlcclxuICA8L2J1dHRvbj5cclxuICB9IEBlbHNlIGlmIChjYW5NYW5hZ2VCYWcoKSkge1xyXG4gIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwicGFyZW50KCkub3BlbkJhZygpXCIgW2F0dHIuYXJpYS1sYWJlbF09XCInR2VzdGlzY2kgZG9jdW1lbnRpIGRpIGxhdm9ybydcIlxyXG4gICAgKG1vdXNlZW50ZXIpPVwic2hvd1N1Yk1lbnUoKVwiPlxyXG4gICAgPG1hdC1pY29uPndvcmtfb3V0bGluZTwvbWF0LWljb24+R2VzdGlzY2kgZG9jdW1lbnRpIGRpIGxhdm9yb1xyXG4gIDwvYnV0dG9uPlxyXG4gIH1cclxuICBAaWYgKGNhbk9wZW4oKSkge1xyXG4gIDxidXR0b24gbWF0LW1lbnUtaXRlbSBbYXR0ci5hcmlhLWxhYmVsXT1cIidBcHJpIGRvY3VtZW50bydcIiAobW91c2VlbnRlcik9XCJzaG93U3ViTWVudSgpXCJcclxuICAgIChjbGljayk9XCJvcGVuKGdldFNpbmdsZVNlbGVjdGlvbigpKVwiPlxyXG4gICAgPG1hdC1pY29uPjwvbWF0LWljb24+QXByaVxyXG4gIDwvYnV0dG9uPlxyXG4gIH1cclxuICBAaWYgKGNhbkFkZFRvV29ya2luZ0RvY3VtZW50cygpKSB7XHJcbiAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIFthdHRyLmFyaWEtbGFiZWxdPVwiJ0FnZ2l1bmdpIGFpIGRvY3VtZW50aSBkaSBsYXZvcm8nXCJcclxuICAgIChjbGljayk9XCJwYXJlbnQoKS5hZGRJdGVtc1RvQmFnKGdldE11bHRpcGxlU2VsZWN0aW9uKCkpXCIgKG1vdXNlZW50ZXIpPVwic2hvd1N1Yk1lbnUoKVwiPlxyXG4gICAgPG1hdC1pY29uPndvcmtfb3V0bGluZTwvbWF0LWljb24+QWdnaXVuZ2kgYWkgZG9jdW1lbnRpIGRpIGxhdm9yb1xyXG4gIDwvYnV0dG9uPlxyXG4gIH1cclxuICBAaWYoY2FuUHJpbnQoKSkge1xyXG4gIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwicGFyZW50KCkucHJpbnQoKVwiIFthdHRyLmFyaWEtbGFiZWxdPVwiJ1N0YW1wYSBkb2N1bWVudG8nXCIgKG1vdXNlZW50ZXIpPVwic2hvd1N1Yk1lbnUoKVwiPlxyXG4gICAgPGRpdiBmeExheW91dD1cInJvd1wiIGZ4TGF5b3V0R2FwPVwiMjBweFwiIGZ4TGF5b3V0QWxpZ249XCJzdGFydCBjZW50ZXJcIiBmeEZpbGw+XHJcbiAgICAgIDxkaXYgZnhGbGV4PVwiKlwiIGZ4TGF5b3V0PVwicm93XCIgZnhGaWxsIGZ4TGF5b3V0QWxpZ249XCJzdGFydCBjZW50ZXJcIj5cclxuICAgICAgICA8bWF0LWljb24+cHJpbnQ8L21hdC1pY29uPlxyXG4gICAgICAgIDxkaXY+U3RhbXBhPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiYWNjZW50IHNtYWxsIGJvbGRcIj5DVFJMK1A8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvYnV0dG9uPlxyXG4gIH1cclxuICBAaWYoY2FuRmluZCgpKSB7XHJcbiAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJwYXJlbnQoKS5maW5kKClcIiBbYXR0ci5hcmlhLWxhYmVsXT1cIidUcm92YSBuZWwgZG9jdW1lbnRvJ1wiIChtb3VzZWVudGVyKT1cInNob3dTdWJNZW51KClcIj5cclxuICAgIDxkaXYgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEdhcD1cIjIwcHhcIiBmeExheW91dEFsaWduPVwic3RhcnQgY2VudGVyXCIgZnhGaWxsPlxyXG4gICAgICA8ZGl2IGZ4RmxleD1cIipcIiBmeExheW91dD1cInJvd1wiIGZ4RmlsbCBmeExheW91dEFsaWduPVwic3RhcnQgY2VudGVyXCI+XHJcbiAgICAgICAgPG1hdC1pY29uPmZpbmRfaW5fcGFnZTwvbWF0LWljb24+XHJcbiAgICAgICAgPGRpdj5Ucm92YSBuZWwgZG9jdW1lbnRvPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiYWNjZW50IHNtYWxsIGJvbGRcIj5DVFJMK0Y8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvYnV0dG9uPlxyXG4gIH1cclxuICBAaWYgKGNhblNlbmRCeUVtYWlsKCkpIHtcclxuICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cInBhcmVudCgpLnNlbmRJdGVtc1RvKGdldE11bHRpcGxlU2VsZWN0aW9uKCkpXCJcclxuICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ0ludmlhIGRvY3VtZW50byBwZXIgZW1haWwnXCIgKG1vdXNlZW50ZXIpPVwic2hvd1N1Yk1lbnUoKVwiPlxyXG4gICAgPG1hdC1pY29uPnNlbmQ8L21hdC1pY29uPkludmlhIHBlciBlbWFpbFxyXG4gIDwvYnV0dG9uPlxyXG4gIH1cclxuICBAaWYgKGNhblNhdmVBc1BkZigpKSB7XHJcbiAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJwYXJlbnQoKS5leHBvcnRQZGYoZ2V0U2luZ2xlU2VsZWN0aW9uKCkpXCIgKG1vdXNlZW50ZXIpPVwic2hvd1N1Yk1lbnUoKVwiXHJcbiAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidTYWx2YSBkb2N1bWVudG8gaW4gcGRmJ1wiPlxyXG4gICAgPG1hdC1pY29uPnNhdmVfYWx0PC9tYXQtaWNvbj5TYWx2YSBpbiBwZGZcclxuICA8L2J1dHRvbj5cclxuICB9XHJcbiAgQGlmIChjYW5PcGVuKCkpIHtcclxuICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gW2F0dHIuYXJpYS1sYWJlbF09XCInR2VuZXJhIHVuIGxpbmsgcGVybWFuZW50ZSBkYSB1dGlsaXp6YXJlIGVzdGVybmFtZW50ZSdcIlxyXG4gICAgKGNsaWNrKT1cInBhcmVudCgpLnNob3dMaW5rKGdldFNpbmdsZVNlbGVjdGlvbigpKVwiIChtb3VzZWVudGVyKT1cInNob3dTdWJNZW51KClcIj5cclxuICAgIDxtYXQtaWNvbj5saW5rPC9tYXQtaWNvbj5MaW5rXHJcbiAgPC9idXR0b24+XHJcbiAgfVxyXG4gIEBpZiAoIWlzUmVmZXJlbmNlKCkgJiYgY2FuT3BlbigpKSB7XHJcbiAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIFttYXRNZW51VHJpZ2dlckZvcl09XCJsaW5rc01lbnVcIiAjbGlua3NNZW51VHJpZ2dlcj1cIm1hdE1lbnVUcmlnZ2VyXCJcclxuICAgIChtb3VzZWVudGVyKT1cInNob3dTdWJNZW51KGxpbmtzTWVudVRyaWdnZXIpXCIgKG1vdXNlbGVhdmUpPVwicmVzZXRTdWJNZW51KGxpbmtzTWVudVRyaWdnZXIpXCI+XHJcbiAgICA8bWF0LWljb24+Y29tcGFyZV9hcnJvd3M8L21hdC1pY29uPkNvbGxlZ2FtZW50aVxyXG4gIDwvYnV0dG9uPlxyXG4gIDxtYXQtbWVudSAjbGlua3NNZW51PVwibWF0TWVudVwiPlxyXG4gICAgQGlmICghaXNSZWZlcmVuY2UoKSAmJiBjYW5PcGVuKCkpIHtcclxuICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSBbYXR0ci5hcmlhLWxhYmVsXT1cIidNb3N0cmEgaSBkb2N1bWVudGkgcmljaGlhbWF0aSBkYSBxdWVzdG8nXCJcclxuICAgICAgKGNsaWNrKT1cIm9wZW5SZWZlcmVuY2VzKGdldFNpbmdsZVNlbGVjdGlvbigpLCAxKVwiPlxyXG4gICAgICBEb2N1bWVudGkgcmljaGlhbWF0aVxyXG4gICAgPC9idXR0b24+XHJcbiAgICB9XHJcbiAgICBAaWYgKCFpc1JlZmVyZW5jZSgpICYmIGNhbk9wZW4oKSkge1xyXG4gICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIFthdHRyLmFyaWEtbGFiZWxdPVwiJ01vc3RyYSBpIGRvY3VtZW50aSBjaGUgcmljaGlhbWFubyBxdWVzdG8nXCJcclxuICAgICAgKGNsaWNrKT1cIm9wZW5SZWZlcmVuY2VzKGdldFNpbmdsZVNlbGVjdGlvbigpLCAyKVwiPlxyXG4gICAgICBEb2N1bWVudGkgY2hlIHJpY2hpYW1hbm9cclxuICAgIDwvYnV0dG9uPlxyXG4gICAgfVxyXG4gICAgQGlmICghaXNSZWZlcmVuY2UoKSAmJiBpc0xhd0luRm9yY2UoKSAmJiBjYW5PcGVuKCkpIHtcclxuICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSBbYXR0ci5hcmlhLWxhYmVsXT1cIidNb3N0cmEgZ2l1cmlzcHJ1ZGVuemEnXCJcclxuICAgICAgKGNsaWNrKT1cIm9wZW5SZWZlcmVuY2VzKGdldFNpbmdsZVNlbGVjdGlvbigpLCA0KVwiPlxyXG4gICAgICBKdXJpc1xyXG4gICAgPC9idXR0b24+XHJcbiAgICB9XHJcbiAgICBAaWYgKCFpc1JlZmVyZW5jZSgpICYmIGlzTGF3SW5Gb3JjZSgpICYmIGNhbk9wZW4oKSkge1xyXG4gICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIFthdHRyLmFyaWEtbGFiZWxdPVwiJ01vc3RyYSBtb2RpZmljaGUgbm9ybWF0aXZlJ1wiXHJcbiAgICAgIChjbGljayk9XCJvcGVuUmVmZXJlbmNlcyhnZXRTaW5nbGVTZWxlY3Rpb24oKSwgMylcIj5cclxuICAgICAgTW9kaWZpY2hlXHJcbiAgICA8L2J1dHRvbj5cclxuICAgIH1cclxuICA8L21hdC1tZW51PlxyXG4gIH1cclxuICBcclxuICBAaWYgKGNhblNldEFzVW5yZWFkKCkpIHtcclxuICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gW2F0dHIuYXJpYS1sYWJlbF09XCInU2VnbmEgY29tZSBkYSBsZWdnZXJlJ1wiIChjbGljayk9XCJzZXRSZWFkKGZhbHNlKVwiXHJcbiAgICAobW91c2VlbnRlcik9XCJzaG93U3ViTWVudSgpXCI+XHJcbiAgICA8bWF0LWljb24+b3V0bGluZWRfZmxhZzwvbWF0LWljb24+U2VnbmEgY29tZSBkYSBsZWdnZXJlXHJcbiAgPC9idXR0b24+XHJcbiAgfVxyXG4gIEBpZiAoY2FuU2V0QXNSZWFkKCkpIHtcclxuICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gW2F0dHIuYXJpYS1sYWJlbF09XCInU2VnbmEgY29tZSBnacOgIGxldHRvJ1wiIChjbGljayk9XCJzZXRSZWFkKHRydWUpXCJcclxuICAgIChtb3VzZWVudGVyKT1cInNob3dTdWJNZW51KClcIj5cclxuICAgIDxtYXQtaWNvbj5mbGFnPC9tYXQtaWNvbj5TZWduYSBjb21lIGdpw6AgbGV0dG9cclxuICA8L2J1dHRvbj5cclxuICB9XHJcbiAgXHJcbiAgXHJcbiAgQGlmICgoaXNMYXdJbkZvcmNlKCkgfHwgaXNEZWFkbGluZSgpKSAmJiBjYW5PcGVuKCkpIHtcclxuICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gW2F0dHIuYXJpYS1sYWJlbF09XCInTW9zdHJhIHJlcG9ydCB1dGlsaXp6bydcIlxyXG4gICAgKGNsaWNrKT1cInBhcmVudCgpLnJlcG9ydChnZXRTaW5nbGVTZWxlY3Rpb24oKSlcIiAobW91c2VlbnRlcik9XCJzaG93U3ViTWVudSgpXCI+XHJcbiAgICA8bWF0LWljb24+YXNzaWdubWVudDwvbWF0LWljb24+UmVwb3J0XHJcbiAgPC9idXR0b24+XHJcbiAgfVxyXG4gIFxyXG4gIEBpZiAoY2FuQWNjZXNzUlMoKSkge1xyXG4gICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XHJcbiAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIG1hdFRvb2x0aXA9XCJSZWdpc3RybyAmIFNjYWRlbnphcmlvXCIgW2F0dHIuYXJpYS1sYWJlbF09XCInT3B6aW9uaSBkaSBSZWdpc3RybyAmIFNjYWRlbnphcmlvJ1wiXHJcbiAgICBbbWF0TWVudVRyaWdnZXJGb3JdPVwicnNNZW51XCIgI3JzTWVudVRyaWdnZXI9XCJtYXRNZW51VHJpZ2dlclwiIChtb3VzZWVudGVyKT1cInNob3dTdWJNZW51KHJzTWVudVRyaWdnZXIpXCJcclxuICAgIChtb3VzZWxlYXZlKT1cInJlc2V0U3ViTWVudShyc01lbnVUcmlnZ2VyKVwiPlxyXG4gICAgPG1hdC1pY29uPmFsYXJtX29uPC9tYXQtaWNvbj5cclxuICAgIFJlZ2lzdHJvIGUgc2NhZGVuemFyaW9cclxuICA8L2J1dHRvbj5cclxuICA8bWF0LW1lbnUgI3JzTWVudT1cIm1hdE1lbnVcIj5cclxuICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSBbYXR0ci5hcmlhLWxhYmVsXT1cIidOdW92YSBsZWdnZSdcIiAoY2xpY2spPVwicGFyZW50KCkuUlNfbmV3TGF3KGdldE11bHRpcGxlU2VsZWN0aW9uKCkpXCI+XHJcbiAgICAgIE51b3ZhIGxlZ2dlXHJcbiAgICA8L2J1dHRvbj5cclxuICAgIEBpZiAoY2FuT3BlbigpKSB7XHJcbiAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gW2F0dHIuYXJpYS1sYWJlbF09XCInTnVvdmEgYXR0aXZpdMOgJ1wiIChjbGljayk9XCJwYXJlbnQoKS5SU19uZXdBY3Rpdml0eShnZXRTaW5nbGVTZWxlY3Rpb24oKSlcIj5cclxuICAgICAgTnVvdmEgYXR0aXZpdMOgXHJcbiAgICA8L2J1dHRvbj5cclxuICAgIH1cclxuICAgIEBpZiAoY2FuT3BlbigpKSB7XHJcbiAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gW2F0dHIuYXJpYS1sYWJlbF09XCInUmVwb3J0IHV0aWxpenpvIG5vcm1hJ1wiIChjbGljayk9XCJwYXJlbnQoKS5SU191c2FnZVJlcG9ydChnZXRTaW5nbGVTZWxlY3Rpb24oKSlcIj5cclxuICAgICAgUmVwb3J0IHV0aWxpenpvIG5vcm1hXHJcbiAgICA8L2J1dHRvbj5cclxuICAgIH1cclxuICA8L21hdC1tZW51PlxyXG4gIH0iXX0=
|
|
190
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnQtbWVudS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hcnMtdXRpbHMvY2xpcHBlci51aS91aS9kb2N1bWVudC1tZW51L2RvY3VtZW50LW1lbnUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJzLXV0aWxzL2NsaXBwZXIudWkvdWkvZG9jdW1lbnQtbWVudS9kb2N1bWVudC1tZW51LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQXFCLFNBQVMsRUFBVSxNQUFNLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN0SixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGFBQWEsRUFBa0IsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDbkQsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDMUMsT0FBTyxFQUF1QixZQUFZLEVBQUUsWUFBWSxFQUFFLE1BQU0sdUNBQXVDLENBQUM7Ozs7Ozs7QUFZeEcsTUFBTSxPQUFPLDRCQUE0QjtJQVR6QztRQVdVLGtCQUFhLEdBQXVDLFNBQVMsQ0FBaUIsZUFBZSxDQUFDLENBQUM7UUFDL0YscUJBQWdCLEdBQXVDLFNBQVMsQ0FBaUIsa0JBQWtCLENBQUMsQ0FBQztRQUNyRyxvQkFBZSxHQUF5QztZQUM5RCxJQUFJLENBQUMsZ0JBQWdCO1lBQ3JCLElBQUksQ0FB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OlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIE9uRGVzdHJveSwgT25Jbml0LCBSZW5kZXJlcjIsIFNpZ25hbCwgaW5qZWN0LCBpbnB1dCwgdmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1hdFRvb2x0aXBNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwJztcclxuaW1wb3J0IHsgTWF0RGl2aWRlck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpdmlkZXInO1xyXG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XHJcbmltcG9ydCB7IE1hdE1lbnVNb2R1bGUsIE1hdE1lbnVUcmlnZ2VyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvbWVudSc7XHJcbmltcG9ydCB7IEZsZXhNb2R1bGUgfSBmcm9tICdAbmdicmFja2V0L25neC1sYXlvdXQnO1xyXG5pbXBvcnQgeyBTdWJqZWN0LCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgQ2xpcHBlckRvY3VtZW50SW5mbywgQ2xpcHBlck1vZGVsLCBDbGlwcGVyVXRpbHMgfSBmcm9tICdAYXJzZWRpemlvbmkvYXJzLXV0aWxzL2NsaXBwZXIuY29tbW9uJztcclxuaW1wb3J0IHsgQ2xpcHBlclNlYXJjaFJlc3VsdE1hbmFnZXIgfSBmcm9tICcuLi9zZWFyY2gtcmVzdWx0LW1hbmFnZXIvc2VhcmNoLXJlc3VsdC1tYW5hZ2VyJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnY2xpcHBlci1kb2N1bWVudC1tZW51JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZG9jdW1lbnQtbWVudS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vZG9jdW1lbnQtbWVudS5jb21wb25lbnQuc2NzcyddLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgaW1wb3J0czogW0ZsZXhNb2R1bGUsIE1hdE1lbnVNb2R1bGUsIE1hdEljb25Nb2R1bGUsIE1hdERpdmlkZXJNb2R1bGUsIE1hdFRvb2x0aXBNb2R1bGVdXHJcblxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ2xpcHBlckRvY3VtZW50TWVudUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuXHJcbiAgcHJpdmF0ZSByc01lbnVUcmlnZ2VyOiBTaWduYWw8TWF0TWVudVRyaWdnZXIgfCB1bmRlZmluZWQ+ID0gdmlld0NoaWxkPE1hdE1lbnVUcmlnZ2VyPigncnNNZW51VHJpZ2dlcicpO1xyXG4gIHByaXZhdGUgbGlua3NNZW51VHJpZ2dlcjogU2lnbmFsPE1hdE1lbnVUcmlnZ2VyIHwgdW5kZWZpbmVkPiA9IHZpZXdDaGlsZDxNYXRNZW51VHJpZ2dlcj4oJ2xpbmtzTWVudVRyaWdnZXInKTtcclxuICBwcml2YXRlIGFsbE1lbnVUcmlnZ2VyczogU2lnbmFsPE1hdE1lbnVUcmlnZ2VyIHwgdW5kZWZpbmVkPltdID0gW1xyXG4gICAgdGhpcy5saW5rc01lbnVUcmlnZ2VyLFxyXG4gICAgdGhpcy5yc01lbnVUcmlnZ2VyXHJcbiAgXVxyXG4gIHByaXZhdGUgcmVuZGVyZXIyID0gaW5qZWN0KFJlbmRlcmVyMik7XHJcbiAgcHJvdGVjdGVkIHVuc3Vic2NyaWJlOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICBwcm90ZWN0ZWQgY2hhbmdlRGV0ZWN0b3IgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xyXG4gIHVzZVNlbGVjdGlvbnMgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XHJcbiAgc2VsZWN0aW9uU291cmNlID0gaW5wdXQ8J2JhZycgfCAnc2VsZWN0aW9uJyB8ICdub25lJyB8IG51bGw+KCdzZWxlY3Rpb24nKTtcclxuICBwcm90ZWN0ZWQgc2VsZWN0aW9uID0gKCk6IENsaXBwZXJEb2N1bWVudEluZm9bXSA9PiB7XHJcbiAgICBpZiAodGhpcy51c2VTZWxlY3Rpb25zKCkpIHtcclxuICAgICAgc3dpdGNoICh0aGlzLnNlbGVjdGlvblNvdXJjZSgpKSB7XHJcbiAgICAgICAgY2FzZSAnYmFnJzpcclxuICAgICAgICAgIHJldHVybiB0aGlzLnBhcmVudCgpPy5jbGlwcGVyU2VydmljZS5iYWcoKSA/PyBbXTtcclxuICAgICAgICBjYXNlICdzZWxlY3Rpb24nOlxyXG4gICAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50KCk/LnNlbGVjdGlvbj8uYWxsID8/IFtdO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gW107XHJcbiAgfTtcclxuICBwYXJlbnQgPSBpbnB1dC5yZXF1aXJlZDxDbGlwcGVyU2VhcmNoUmVzdWx0TWFuYWdlcj4oKTtcclxuICBpdGVtID0gaW5wdXQ8Q2xpcHBlckRvY3VtZW50SW5mbz4oKTtcclxuICBpc1JlZmVyZW5jZSA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuICBpc1JlYWRhYmxlID0gaW5wdXQ8Ym9vbGVhbj4odHJ1ZSk7XHJcbiAgaXNEZWFkbGluZSA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuICBpc0xhd0luRm9yY2UgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XHJcbiAgaXNMYXcgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XHJcbiAgY2FuUHJpbnQgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XHJcbiAgY2FuRmluZCA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuICBjYW5Vc2VDYWxlbmRhciA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuICBjYW5Vc2VBcmNoaXZlID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIHByb3RlY3RlZCBjYW5EZXNlbGVjdEFsbCA9ICgpOiBib29sZWFuID0+IHRoaXMuc2VsZWN0aW9uU291cmNlKCkgPT09ICdzZWxlY3Rpb24nICYmIHRoaXMuc2VsZWN0aW9uKCkubGVuZ3RoID4gMDtcclxuICBwcm90ZWN0ZWQgY2FuTWFuYWdlQmFnID0gKCk6IGJvb2xlYW4gPT4gdGhpcy5zZWxlY3Rpb25Tb3VyY2UoKSA9PT0gJ2JhZyc7XHJcbiAgcHJvdGVjdGVkIGNhbk9wZW4gPSAoKTogYm9vbGVhbiA9PiAodGhpcy5nZXRTaW5nbGVTZWxlY3Rpb24oKT8uZG9jdW1lbnRJZD8ubGVuZ3RoID8/IDApID4gMDtcclxuICBwcm90ZWN0ZWQgY2FuQWRkVG9Xb3JraW5nRG9jdW1lbnRzID0gKCk6IGJvb2xlYW4gPT4gdGhpcy5zZWxlY3Rpb25Tb3VyY2UoKSAhPT0gJ2JhZycgJiYgdGhpcy5nZXRNdWx0aXBsZVNlbGVjdGlvbigpLmxlbmd0aCA+IDA7XHJcbiAgcHJvdGVjdGVkIGNhblNlbmRCeUVtYWlsID0gKCk6IGJvb2xlYW4gPT4gdGhpcy5nZXRNdWx0aXBsZVNlbGVjdGlvbigpLmxlbmd0aCA+IDA7XHJcbiAgcHJvdGVjdGVkIGNhbkFkZFRvQXJjaGl2ZSA9ICgpOiBib29sZWFuID0+IHRoaXMuY2FuVXNlQXJjaGl2ZSgpICYmIHRoaXMuY2FuU2VuZEJ5RW1haWwoKTtcclxuICBwcm90ZWN0ZWQgY2FuQWRkVG9DYWxlbmRhciA9ICgpOiBib29sZWFuID0+IHRoaXMuY2FuVXNlQ2FsZW5kYXIoKSAmJiAhdGhpcy5pc1JlZmVyZW5jZSgpICYmICh0aGlzLmlzRGVhZGxpbmUoKSB8fCB0aGlzLmlzTGF3SW5Gb3JjZSgpKSAmJiB0aGlzLmNhbk9wZW4oKTtcclxuICBwcm90ZWN0ZWQgY2FuU2F2ZUFzUGRmID0gKCk6IGJvb2xlYW4gPT4ge1xyXG4gICAgY29uc3QgaXRlbSA9IHRoaXMuZ2V0U2luZ2xlU2VsZWN0aW9uKCk7XHJcbiAgICByZXR1cm4gaXRlbSAhPT0gbnVsbCAmJiBpdGVtPy5tb2RlbCAhPT0gQ2xpcHBlck1vZGVsLkNvb3JkaW5hbWVudG87XHJcbiAgfVxyXG4gIHByb3RlY3RlZCBjYW5TZXRBc1JlYWQgPSAoKTogYm9vbGVhbiA9PiB7XHJcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMuZ2V0TXVsdGlwbGVTZWxlY3Rpb24oKTtcclxuICAgIHJldHVybiB0aGlzLmlzUmVhZGFibGUoKSAmJiAoaXRlbXMubGVuZ3RoID4gMSB8fCAoaXRlbXMubGVuZ3RoID09PSAxICYmIGl0ZW1zWzBdLmlzUmVhZCAhPT0gdHJ1ZSAmJiBcclxuICAgICAgQ2xpcHBlclV0aWxzLmlzQ2xpcHBlck1vZGVsUmVhZGFibGUoaXRlbXNbMF0ubW9kZWwpKSk7XHJcbiAgfTtcclxuICBwcm90ZWN0ZWQgY2FuU2V0QXNVbnJlYWQgPSAoKTogYm9vbGVhbiA9PiB7XHJcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMuZ2V0TXVsdGlwbGVTZWxlY3Rpb24oKTtcclxuICAgIHJldHVybiB0aGlzLmlzUmVhZGFibGUoKSAmJiAoaXRlbXMubGVuZ3RoID4gMSB8fCAoaXRlbXMubGVuZ3RoID09PSAxICYmIGl0ZW1zWzBdLmlzUmVhZCA9PT0gdHJ1ZSAmJiBcclxuICAgICAgQ2xpcHBlclV0aWxzLmlzQ2xpcHBlck1vZGVsUmVhZGFibGUoaXRlbXNbMF0ubW9kZWwpKSk7XHJcbiAgfTtcclxuICBwcm90ZWN0ZWQgY2FuQWNjZXNzUlMgPSAoKTogYm9vbGVhbiA9PiB7XHJcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMuZ2V0TXVsdGlwbGVTZWxlY3Rpb24oKTtcclxuICAgIHJldHVybiB0aGlzLnBhcmVudCgpPy5SU19lbmFibGVkKGl0ZW1zKSA9PT0gdHJ1ZSAmJiAhdGhpcy51c2VTZWxlY3Rpb25zKCk7XHJcbiAgfTtcclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5zZWxlY3Rpb25Tb3VyY2UoKSA9PT0gXCJzZWxlY3Rpb25cIikge1xyXG4gICAgICB0aGlzLnBhcmVudCgpPy5zZWxlY3Rpb24/LmNoYW5nZWRcclxuICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSkpXHJcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgdGhpcy51bnN1YnNjcmliZS5uZXh0KCk7XHJcbiAgICB0aGlzLnVuc3Vic2NyaWJlLmNvbXBsZXRlKCk7XHJcbiAgfVxyXG5cclxuICBcclxuICAvKipcclxuICAgKiBHZXQgYSBzaW5nbGUgc2VsZWN0aW9uXHJcbiAgICogQHJldHVybnMgdGhlIHNpbmdsZSBzZWxlY3Rpb24gb3IgbnVsbFxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBnZXRTaW5nbGVTZWxlY3Rpb24oKTogQ2xpcHBlckRvY3VtZW50SW5mbyB8IG51bGwgfCB1bmRlZmluZWQge1xyXG4gICAgaWYgKHRoaXMuaXRlbSgpKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLml0ZW0oKTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3Rpb24oKS5sZW5ndGggPT09IDEpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uKClbMF07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCBtdWx0aXBsZSBzZWxlY3Rpb25cclxuICAgKiBAcmV0dXJucyA6IHRoZSBtdWx0aXBsZSBzZWxlY3Rpb24gb3IgYXJyYXkgZW1wdHlcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgZ2V0TXVsdGlwbGVTZWxlY3Rpb24oKTogQ2xpcHBlckRvY3VtZW50SW5mb1tdIHtcclxuICAgIGlmICh0aGlzLml0ZW0oKSkge1xyXG4gICAgICBjb25zdCBpdGVtID0gdGhpcy5pdGVtKCk7XHJcbiAgICAgIGlmIChpdGVtKSB7XHJcbiAgICAgICAgcmV0dXJuIFtpdGVtXTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGlvbigpLmxlbmd0aCA+IDApIHtcclxuICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uKCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gW107XHJcbiAgfVxyXG5cclxuICAvKiogXHJcbiAgICogU2hvdyBhbmQgaGlkZSBzdWIgbWVudXNcclxuICAgKiBAcGFyYW0gdHJpZ2dlcjogdGhlIHRyaWdnZXIgdG8gdXNlIG9yIG51bGwgdG8gZGVzZWxlY3RcclxuICAqL1xyXG4gIHByb3RlY3RlZCBzaG93U3ViTWVudSh0cmlnZ2VyOiBNYXRNZW51VHJpZ2dlciB8IG51bGwgPSBudWxsKSB7XHJcbiAgICB0aGlzLmFsbE1lbnVUcmlnZ2Vycy5mb3JFYWNoKG1lbnVUcmlnZ2VyID0+IHtcclxuICAgICAgY29uc3QgbWVudSA9IG1lbnVUcmlnZ2VyKCk7XHJcbiAgICAgIGlmIChtZW51KSB7XHJcbiAgICAgICAgaWYgKG1lbnUubWVudU9wZW4pIHtcclxuICAgICAgICAgIG1lbnUuY2xvc2VNZW51KCk7XHJcbiAgICAgICAgICB0aGlzLnJlc2V0U3ViTWVudShtZW51KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgdHJpZ2dlcj8ub3Blbk1lbnUoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlc2V0IHN1YiBtZW51XHJcbiAgICogQHBhcmFtIHRyaWdnZXI6IHRoZSB0cmlnZ2VyIHRvIHVzZVxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCByZXNldFN1Yk1lbnUodHJpZ2dlcjogTWF0TWVudVRyaWdnZXIpIHtcclxuICAgIHRoaXMucmVuZGVyZXIyLnJlbW92ZUNsYXNzKHRyaWdnZXJbJ19lbGVtZW50J10ubmF0aXZlRWxlbWVudCwgJ2Nkay1mb2N1c2VkJyk7XHJcbiAgICB0aGlzLnJlbmRlcmVyMi5yZW1vdmVDbGFzcyh0cmlnZ2VyWydfZWxlbWVudCddLm5hdGl2ZUVsZW1lbnQsICdjZGstcHJvZ3JhbS1mb2N1c2VkJyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDaGVjayBpZiBjdXJyZW50IGl0ZW0gb3Igc2VsZWN0aW9uIGlzIHJlYWRcclxuICAgKiBAcmV0dXJucyAwIGlmIG5vdCByZWFkLCAxIGlmIHJlYWQsIDIgaWYgdW5rbm93blxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBpc1JlYWQoKTogbnVtYmVyIHtcclxuICAgIGlmICh0aGlzLml0ZW0oKSkgcmV0dXJuIHRoaXMuaXRlbSgpPy5pc1JlYWQgPT09IHRydWUgPyAxIDogMDtcclxuICAgIGlmICh0aGlzLnBhcmVudCgpPy5oYXNBbnlTZWxlY3Rpb24oKSkgcmV0dXJuIDI7XHJcbiAgICBjb25zdCBmaXJzdFNlbGVjdGlvbiA9IHRoaXMucGFyZW50KCk/LmdldFNpbmdsZVNlbGVjdGlvbigpO1xyXG4gICAgaWYgKGZpcnN0U2VsZWN0aW9uKSB7XHJcbiAgICAgIHJldHVybiBmaXJzdFNlbGVjdGlvbi5pc1JlYWQgPT09IHRydWUgPyAxIDogMDtcclxuICAgIH1cclxuICAgIHJldHVybiAwO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0IHRoZSBpcyByZWFkIGZsYWcgdmFsdWVcclxuICAgKiBAcGFyYW0gdmFsdWU6IHRydWUgb3IgZmFsc2VcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgc2V0UmVhZCh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5wYXJlbnQoKT8uc2V0UmVhZCh2YWx1ZSwgdGhpcy5pdGVtKCkpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogT3BlbiBhIGRvY3VtZW50XHJcbiAgICogQHBhcmFtIGl0ZW0gOiB0aGUgaXRlbSBcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgb3BlbihpdGVtOiBDbGlwcGVyRG9jdW1lbnRJbmZvKSB7XHJcbiAgICBpZiAoaXRlbS5kb2N1bWVudElkKSB7XHJcbiAgICAgIHRoaXMucGFyZW50KCk/Lm9wZW4oaXRlbS5kb2N1bWVudElkKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gKiBPcGVuIGRvY3VtZW50IHJlZmVyZW5jZXNcclxuICogQHBhcmFtIGl0ZW0gOiB0aGUgaXRlbSBcclxuICogQHBhcmFtIG1vZGU6IHRoZSBtb2RlXHJcbiAqL1xyXG4gIHByb3RlY3RlZCBvcGVuUmVmZXJlbmNlcyhpdGVtOiBDbGlwcGVyRG9jdW1lbnRJbmZvLCBtb2RlOiBudW1iZXIpIHtcclxuICAgIGlmIChpdGVtLmRvY3VtZW50SWQpIHtcclxuICAgICAgdGhpcy5wYXJlbnQoKT8ub3BlblJlZmVyZW5jZXMoaXRlbS5kb2N1bWVudElkLCBtb2RlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG59XHJcbiIsIkBpZiAoY2FuRGVzZWxlY3RBbGwoKSkge1xyXG48YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cInBhcmVudCgpLnNlbGVjdGlvbj8uY2xlYXIoKVwiIFthdHRyLmFyaWEtbGFiZWxdPVwiJ0Rlc2VsZXppb25hIHR1dHRpJ1wiXHJcbiAgKG1vdXNlZW50ZXIpPVwic2hvd1N1Yk1lbnUoKVwiPlxyXG4gIDxtYXQtaWNvbj5jbGVhcjwvbWF0LWljb24+RGVzZWxlemlvbmEgdHV0dGlcclxuPC9idXR0b24+XHJcbn0gQGVsc2UgaWYgKGNhbk1hbmFnZUJhZygpKSB7XHJcbjxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwicGFyZW50KCkub3BlbkJhZygpXCIgW2F0dHIuYXJpYS1sYWJlbF09XCInR2VzdGlzY2kgZG9jdW1lbnRpIGRpIGxhdm9ybydcIlxyXG4gIChtb3VzZWVudGVyKT1cInNob3dTdWJNZW51KClcIj5cclxuICA8bWF0LWljb24+d29ya19vdXRsaW5lPC9tYXQtaWNvbj5HZXN0aXNjaSBkb2N1bWVudGkgZGkgbGF2b3JvXHJcbjwvYnV0dG9uPlxyXG59XHJcbkBpZiAoY2FuT3BlbigpKSB7XHJcbjxidXR0b24gbWF0LW1lbnUtaXRlbSBbYXR0ci5hcmlhLWxhYmVsXT1cIidBcHJpIGRvY3VtZW50bydcIiAobW91c2VlbnRlcik9XCJzaG93U3ViTWVudSgpXCJcclxuICAoY2xpY2spPVwib3BlbihnZXRTaW5nbGVTZWxlY3Rpb24oKSlcIj5cclxuICA8bWF0LWljb24+PC9tYXQtaWNvbj5BcHJpXHJcbjwvYnV0dG9uPlxyXG59XHJcbkBpZiAoY2FuQWRkVG9Xb3JraW5nRG9jdW1lbnRzKCkpIHtcclxuPGJ1dHRvbiBtYXQtbWVudS1pdGVtIFthdHRyLmFyaWEtbGFiZWxdPVwiJ0FnZ2l1bmdpIGFpIGRvY3VtZW50aSBkaSBsYXZvcm8nXCJcclxuICAoY2xpY2spPVwicGFyZW50KCkuYWRkSXRlbXNUb0JhZyhnZXRNdWx0aXBsZVNlbGVjdGlvbigpKVwiIChtb3VzZWVudGVyKT1cInNob3dTdWJNZW51KClcIj5cclxuICA8bWF0LWljb24+d29ya19vdXRsaW5lPC9tYXQtaWNvbj5BZ2dpdW5naSBhaSBkb2N1bWVudGkgZGkgbGF2b3JvXHJcbjwvYnV0dG9uPlxyXG59XHJcbkBpZihjYW5QcmludCgpKSB7XHJcbjxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwicGFyZW50KCkucHJpbnQoKVwiIFthdHRyLmFyaWEtbGFiZWxdPVwiJ1N0YW1wYSBkb2N1bWVudG8nXCIgKG1vdXNlZW50ZXIpPVwic2hvd1N1Yk1lbnUoKVwiPlxyXG4gIDxkaXYgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEdhcD1cIjIwcHhcIiBmeExheW91dEFsaWduPVwic3RhcnQgY2VudGVyXCIgZnhGaWxsPlxyXG4gICAgPGRpdiBmeEZsZXg9XCIqXCIgZnhMYXlvdXQ9XCJyb3dcIiBmeEZpbGwgZnhMYXlvdXRBbGlnbj1cInN0YXJ0IGNlbnRlclwiPlxyXG4gICAgICA8bWF0LWljb24+cHJpbnQ8L21hdC1pY29uPlxyXG4gICAgICA8ZGl2PlN0YW1wYTwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiYWNjZW50IHNtYWxsIGJvbGRcIj5DVFJMK1A8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9idXR0b24+XHJcbn1cclxuQGlmKGNhbkZpbmQoKSkge1xyXG48YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cInBhcmVudCgpLmZpbmQoKVwiIFthdHRyLmFyaWEtbGFiZWxdPVwiJ1Ryb3ZhIG5lbCBkb2N1bWVudG8nXCIgKG1vdXNlZW50ZXIpPVwic2hvd1N1Yk1lbnUoKVwiPlxyXG4gIDxkaXYgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEdhcD1cIjIwcHhcIiBmeExheW91dEFsaWduPVwic3RhcnQgY2VudGVyXCIgZnhGaWxsPlxyXG4gICAgPGRpdiBmeEZsZXg9XCIqXCIgZnhMYXlvdXQ9XCJyb3dcIiBmeEZpbGwgZnhMYXlvdXRBbGlnbj1cInN0YXJ0IGNlbnRlclwiPlxyXG4gICAgICA8bWF0LWljb24+ZmluZF9pbl9wYWdlPC9tYXQtaWNvbj5cclxuICAgICAgPGRpdj5Ucm92YSBuZWwgZG9jdW1lbnRvPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJhY2NlbnQgc21hbGwgYm9sZFwiPkNUUkwrRjwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L2J1dHRvbj5cclxufVxyXG5AaWYgKGNhblNlbmRCeUVtYWlsKCkpIHtcclxuPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJwYXJlbnQoKS5zZW5kSXRlbXNUbyhnZXRNdWx0aXBsZVNlbGVjdGlvbigpKVwiXHJcbiAgW2F0dHIuYXJpYS1sYWJlbF09XCInSW52aWEgZG9jdW1lbnRvIHBlciBlbWFpbCdcIiAobW91c2VlbnRlcik9XCJzaG93U3ViTWVudSgpXCI+XHJcbiAgPG1hdC1pY29uPnNlbmQ8L21hdC1pY29uPkludmlhIHBlciBlbWFpbFxyXG48L2J1dHRvbj5cclxufVxyXG5AaWYgKGNhbkFkZFRvQXJjaGl2ZSgpKSB7XHJcbjxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwicGFyZW50KCkuYWRkVG9BcmNoaXZlKGdldE11bHRpcGxlU2VsZWN0aW9uKCkpXCIgW2F0dHIuYXJpYS1sYWJlbF09XCInQXJjaGl2aWEnXCI+XHJcbiAgPG1hdC1pY29uPmFjY291bnRfdHJlZTwvbWF0LWljb24+QXJjaGl2aWFcclxuPC9idXR0b24+XHJcbn1cclxuQGlmIChjYW5TYXZlQXNQZGYoKSkge1xyXG48YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cInBhcmVudCgpLmV4cG9ydFBkZihnZXRTaW5nbGVTZWxlY3Rpb24oKSlcIiAobW91c2VlbnRlcik9XCJzaG93U3ViTWVudSgpXCJcclxuICBbYXR0ci5hcmlhLWxhYmVsXT1cIidTYWx2YSBkb2N1bWVudG8gaW4gcGRmJ1wiPlxyXG4gIDxtYXQtaWNvbj5zYXZlX2FsdDwvbWF0LWljb24+U2FsdmEgaW4gcGRmXHJcbjwvYnV0dG9uPlxyXG59XHJcbkBpZiAoY2FuT3BlbigpKSB7XHJcbjxidXR0b24gbWF0LW1lbnUtaXRlbSBbYXR0ci5hcmlhLWxhYmVsXT1cIidHZW5lcmEgdW4gbGluayBwZXJtYW5lbnRlIGRhIHV0aWxpenphcmUgZXN0ZXJuYW1lbnRlJ1wiXHJcbiAgKGNsaWNrKT1cInBhcmVudCgpLnNob3dMaW5rKGdldFNpbmdsZVNlbGVjdGlvbigpKVwiIChtb3VzZWVudGVyKT1cInNob3dTdWJNZW51KClcIj5cclxuICA8bWF0LWljb24+bGluazwvbWF0LWljb24+TGlua1xyXG48L2J1dHRvbj5cclxufVxyXG5AaWYgKGNhbk9wZW4oKSkge1xyXG48YnV0dG9uIG1hdC1tZW51LWl0ZW0gW2F0dHIuYXJpYS1sYWJlbF09XCInQ29waWEgbWV0YWRhdGkgbmVnbGkgYXBwdW50aSdcIlxyXG4gIChjbGljayk9XCJwYXJlbnQoKS5jb3B5TWV0YWRhdGFUb0NsaXBib2FyZChnZXRTaW5nbGVTZWxlY3Rpb24oKSlcIiAobW91c2VlbnRlcik9XCJzaG93U3ViTWVudSgpXCI+XHJcbiAgPG1hdC1pY29uPmNvbnRlbnRfY29weTwvbWF0LWljb24+Q29waWEgbWV0YWRhdGlcclxuPC9idXR0b24+XHJcbn1cclxuQGlmICghaXNSZWZlcmVuY2UoKSAmJiBjYW5PcGVuKCkpIHtcclxuPGJ1dHRvbiBtYXQtbWVudS1pdGVtIFttYXRNZW51VHJpZ2dlckZvcl09XCJsaW5rc01lbnVcIiAjbGlua3NNZW51VHJpZ2dlcj1cIm1hdE1lbnVUcmlnZ2VyXCJcclxuICAobW91c2VlbnRlcik9XCJzaG93U3ViTWVudShsaW5rc01lbnVUcmlnZ2VyKVwiIChtb3VzZWxlYXZlKT1cInJlc2V0U3ViTWVudShsaW5rc01lbnVUcmlnZ2VyKVwiPlxyXG4gIDxtYXQtaWNvbj5jb21wYXJlX2Fycm93czwvbWF0LWljb24+Q29sbGVnYW1lbnRpXHJcbjwvYnV0dG9uPlxyXG48bWF0LW1lbnUgI2xpbmtzTWVudT1cIm1hdE1lbnVcIj5cclxuICBAaWYgKCFpc1JlZmVyZW5jZSgpICYmIGNhbk9wZW4oKSkge1xyXG4gIDxidXR0b24gbWF0LW1lbnUtaXRlbSBbYXR0ci5hcmlhLWxhYmVsXT1cIidNb3N0cmEgaSBkb2N1bWVudGkgcmljaGlhbWF0aSBkYSBxdWVzdG8nXCJcclxuICAgIChjbGljayk9XCJvcGVuUmVmZXJlbmNlcyhnZXRTaW5nbGVTZWxlY3Rpb24oKSwgMSlcIj5cclxuICAgIERvY3VtZW50aSByaWNoaWFtYXRpXHJcbiAgPC9idXR0b24+XHJcbiAgfVxyXG4gIEBpZiAoIWlzUmVmZXJlbmNlKCkgJiYgY2FuT3BlbigpKSB7XHJcbiAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIFthdHRyLmFyaWEtbGFiZWxdPVwiJ01vc3RyYSBpIGRvY3VtZW50aSBjaGUgcmljaGlhbWFubyBxdWVzdG8nXCJcclxuICAgIChjbGljayk9XCJvcGVuUmVmZXJlbmNlcyhnZXRTaW5nbGVTZWxlY3Rpb24oKSwgMilcIj5cclxuICAgIERvY3VtZW50aSBjaGUgcmljaGlhbWFub1xyXG4gIDwvYnV0dG9uPlxyXG4gIH1cclxuICBAaWYgKCFpc1JlZmVyZW5jZSgpICYmIGlzTGF3SW5Gb3JjZSgpICYmIGNhbk9wZW4oKSkge1xyXG4gIDxidXR0b24gbWF0LW1lbnUtaXRlbSBbYXR0ci5hcmlhLWxhYmVsXT1cIidNb3N0cmEgZ2l1cmlzcHJ1ZGVuemEnXCIgKGNsaWNrKT1cIm9wZW5SZWZlcmVuY2VzKGdldFNpbmdsZVNlbGVjdGlvbigpLCA0KVwiPlxyXG4gICAgSnVyaXNcclxuICA8L2J1dHRvbj5cclxuICB9XHJcbiAgQGlmICghaXNSZWZlcmVuY2UoKSAmJiBpc0xhd0luRm9yY2UoKSAmJiBjYW5PcGVuKCkpIHtcclxuICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gW2F0dHIuYXJpYS1sYWJlbF09XCInTW9zdHJhIG1vZGlmaWNoZSBub3JtYXRpdmUnXCJcclxuICAgIChjbGljayk9XCJvcGVuUmVmZXJlbmNlcyhnZXRTaW5nbGVTZWxlY3Rpb24oKSwgMylcIj5cclxuICAgIE1vZGlmaWNoZVxyXG4gIDwvYnV0dG9uPlxyXG4gIH1cclxuPC9tYXQtbWVudT5cclxufVxyXG5AaWYgKGNhbkFkZFRvQ2FsZW5kYXIoKSkge1xyXG48YnV0dG9uIG1hdC1tZW51LWl0ZW0gW2F0dHIuYXJpYS1sYWJlbF09XCInQWdnaXVuZ2kgYWwgY2FsZW5kYXJpbydcIlxyXG4gIChjbGljayk9XCJwYXJlbnQoKS5hZGRUb0NhbGVuZGFyKGdldFNpbmdsZVNlbGVjdGlvbigpKVwiPlxyXG4gIDxtYXQtaWNvbj5hbGFybTwvbWF0LWljb24+IHt7IGlzRGVhZGxpbmUoKSA/ICdBZ2dpdW5naSBhbCB0dW8gY2FsZW5kYXJpbycgOiAnQ3JlYSBzY2FkZW56YSd9fVxyXG48L2J1dHRvbj5cclxufVxyXG5AaWYgKCFpc1JlZmVyZW5jZSgpICYmIGlzRGVhZGxpbmUoKSkge1xyXG5AaWYodXNlU2VsZWN0aW9ucygpKSB7XHJcbjxidXR0b24gbWF0LW1lbnUtaXRlbSBbYXR0ci5hcmlhLWxhYmVsXT1cIidJbXBvcnRhIGluIE91bHRvb2sgKGlDYWxhbmRhciknXCIgKGNsaWNrKT1cInBhcmVudCgpLmV4cG9ydFJlc3VsdHMoMilcIj5cclxuICA8bWF0LWljb24+bWFpbF9vdXRsaW5lPC9tYXQtaWNvbj5JbXBvcnRhIGluIE91dGxvb2sgKGlDYWxlbmRhcilcclxuPC9idXR0b24+XHJcbn0gQGVsc2UgaWYgKGl0ZW0oKSkge1xyXG48YnV0dG9uIG1hdC1tZW51LWl0ZW0gW2F0dHIuYXJpYS1sYWJlbF09XCInSW1wb3J0YSBpbiBPdWx0b29rIChpQ2FsYW5kYXIpJ1wiIChjbGljayk9XCJwYXJlbnQoKS5leHBvcnRJdGVtcyhbaXRlbSgpLmRvY3VtZW50SWRdLCBudWxsLCAgMilcIj5cclxuICA8bWF0LWljb24+bWFpbF9vdXRsaW5lPC9tYXQtaWNvbj5JbXBvcnRhIGluIE91dGxvb2sgKGlDYWxlbmRhcilcclxuPC9idXR0b24+XHJcbn1cclxufVxyXG5AaWYgKGNhblNldEFzVW5yZWFkKCkpIHtcclxuPGJ1dHRvbiBtYXQtbWVudS1pdGVtIFthdHRyLmFyaWEtbGFiZWxdPVwiJ1NlZ25hIGNvbWUgZGEgbGVnZ2VyZSdcIiAoY2xpY2spPVwic2V0UmVhZChmYWxzZSlcIiAobW91c2VlbnRlcik9XCJzaG93U3ViTWVudSgpXCI+XHJcbiAgPG1hdC1pY29uPm91dGxpbmVkX2ZsYWc8L21hdC1pY29uPlNlZ25hIGNvbWUgZGEgbGVnZ2VyZVxyXG48L2J1dHRvbj5cclxufVxyXG5AaWYgKGNhblNldEFzUmVhZCgpKSB7XHJcbjxidXR0b24gbWF0LW1lbnUtaXRlbSBbYXR0ci5hcmlhLWxhYmVsXT1cIidTZWduYSBjb21lIGdpw6AgbGV0dG8nXCIgKGNsaWNrKT1cInNldFJlYWQodHJ1ZSlcIiAobW91c2VlbnRlcik9XCJzaG93U3ViTWVudSgpXCI+XHJcbiAgPG1hdC1pY29uPmZsYWc8L21hdC1pY29uPlNlZ25hIGNvbWUgZ2nDoCBsZXR0b1xyXG48L2J1dHRvbj5cclxufVxyXG5cclxuXHJcbkBpZiAoKGlzTGF3SW5Gb3JjZSgpIHx8IGlzRGVhZGxpbmUoKSkgJiYgY2FuT3BlbigpKSB7XHJcbjxidXR0b24gbWF0LW1lbnUtaXRlbSBbYXR0ci5hcmlhLWxhYmVsXT1cIidNb3N0cmEgcmVwb3J0IHV0aWxpenpvJ1wiIChjbGljayk9XCJwYXJlbnQoKS5yZXBvcnQoZ2V0U2luZ2xlU2VsZWN0aW9uKCkpXCJcclxuICAobW91c2VlbnRlcik9XCJzaG93U3ViTWVudSgpXCI+XHJcbiAgPG1hdC1pY29uPmFzc2lnbm1lbnQ8L21hdC1pY29uPlJlcG9ydFxyXG48L2J1dHRvbj5cclxufVxyXG5cclxuQGlmIChjYW5BY2Nlc3NSUygpKSB7XHJcbjxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxyXG48YnV0dG9uIG1hdC1tZW51LWl0ZW0gbWF0VG9vbHRpcD1cIlJlZ2lzdHJvICYgU2NhZGVuemFyaW9cIiBbYXR0ci5hcmlhLWxhYmVsXT1cIidPcHppb25pIGRpIFJlZ2lzdHJvICYgU2NhZGVuemFyaW8nXCJcclxuICBbbWF0TWVudVRyaWdnZXJGb3JdPVwicnNNZW51XCIgI3JzTWVudVRyaWdnZXI9XCJtYXRNZW51VHJpZ2dlclwiIChtb3VzZWVudGVyKT1cInNob3dTdWJNZW51KHJzTWVudVRyaWdnZXIpXCJcclxuICAobW91c2VsZWF2ZSk9XCJyZXNldFN1Yk1lbnUocnNNZW51VHJpZ2dlcilcIj5cclxuICA8bWF0LWljb24+YWxhcm1fb248L21hdC1pY29uPlxyXG4gIFJlZ2lzdHJvIGUgc2NhZGVuemFyaW9cclxuPC9idXR0b24+XHJcbjxtYXQtbWVudSAjcnNNZW51PVwibWF0TWVudVwiPlxyXG4gIDxidXR0b24gbWF0LW1lbnUtaXRlbSBbYXR0ci5hcmlhLWxhYmVsXT1cIidOdW92YSBsZWdnZSdcIiAoY2xpY2spPVwicGFyZW50KCkuUlNfbmV3TGF3KGdldE11bHRpcGxlU2VsZWN0aW9uKCkpXCI+XHJcbiAgICBOdW92YSBsZWdnZVxyXG4gIDwvYnV0dG9uPlxyXG4gIEBpZiAoY2FuT3BlbigpKSB7XHJcbiAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIFthdHRyLmFyaWEtbGFiZWxdPVwiJ051b3ZhIGF0dGl2aXTDoCdcIiAoY2xpY2spPVwicGFyZW50KCkuUlNfbmV3QWN0aXZpdHkoZ2V0U2luZ2xlU2VsZWN0aW9uKCkpXCI+XHJcbiAgICBOdW92YSBhdHRpdml0w6BcclxuICA8L2J1dHRvbj5cclxuICB9XHJcbiAgQGlmIChjYW5PcGVuKCkpIHtcclxuICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gW2F0dHIuYXJpYS1sYWJlbF09XCInUmVwb3J0IHV0aWxpenpvIG5vcm1hJ1wiXHJcbiAgICAoY2xpY2spPVwicGFyZW50KCkuUlNfdXNhZ2VSZXBvcnQoZ2V0U2luZ2xlU2VsZWN0aW9uKCkpXCI+XHJcbiAgICBSZXBvcnQgdXRpbGl6em8gbm9ybWFcclxuICA8L2J1dHRvbj5cclxuICB9XHJcbjwvbWF0LW1lbnU+XHJcbn0iXX0=
|