@arsedizioni/ars-utils 18.1.19 → 18.1.21
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/esm2022/clipper.ui/ui/search-dialog/search-dialog.component.mjs +3 -3
- package/esm2022/ui.oauth/ui/components/login/loginOAuth.component.mjs +3 -3
- package/fesm2022/arsedizioni-ars-utils-clipper.ui.mjs +2 -2
- package/fesm2022/arsedizioni-ars-utils-clipper.ui.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-ui.oauth.mjs +2 -2
- package/fesm2022/arsedizioni-ars-utils-ui.oauth.mjs.map +1 -1
- package/package.json +7 -7
|
@@ -288,7 +288,7 @@ export class ClipperSearchDialogComponent {
|
|
|
288
288
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: ClipperSearchDialogComponent, deps: [{ token: i1.ApplicationDialogService }, { token: i2.ClipperService }, { token: i3.MatDialog }, { token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
289
289
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.3", type: ClipperSearchDialogComponent, isStandalone: true, selector: "ng-component", outputs: { done: "done" }, host: { attributes: { "Bind": SystemUtils.generateUUID() } }, providers: [
|
|
290
290
|
MAT_DATEPICKER_SCROLL_STRATEGY_FACTORY_PROVIDER
|
|
291
|
-
], viewQueries: [{ propertyName: "okButton", first: true, predicate: ["okButton"], descendants: true }], ngImport: i0, template: "<h2 mat-dialog-title>Ricerca</h2>\r\n<div mat-dialog-content>\r\n <form name=\"form\" #f=\"ngForm\" (keyup.Enter)=\"!f.form.invalid ? ok() : null\" novalidate>\r\n <div fxLayout=\"column\">\r\n <div fxFlexAlign=\"end\">\r\n @if (enableRead) {\r\n<div class=\"spaced-bottom-10\">\r\n <mat-checkbox color=\"primary\" name=\"showUnreadDocumentsOnly\" [(ngModel)]=\"params.showUnreadDocumentsOnly\">\r\n Mostra solo non letti</mat-checkbox>\r\n </div>\r\n}\r\n @if (enableComments) {\r\n<div class=\"spaced-bottom-10\">\r\n <mat-checkbox color=\"primary\" name=\"showCommentedDocumentsOnly\"\r\n [(ngModel)]=\"params.showCommentedDocumentsOnly\">\r\n Mostra solo norme con commenti</mat-checkbox>\r\n </div>\r\n}\r\n </div>\r\n @if (enableModel) {\r\n<mat-form-field>\r\n <mat-label>Tipo</mat-label>\r\n <mat-select [(ngModel)]=\"params.sector\" #sector=\"ngModel\" name=\"model\" (selectionChange)=\"sectorChanged()\">\r\n <mat-option>Tutti</mat-option>\r\n @for (m of models; track m) {\r\n <mat-option [value]=\"m.id\">\r\n {{m.name}}\r\n </mat-option>\r\n}\r\n </mat-select>\r\n </mat-form-field>\r\n}\r\n @if (enableSector) {\r\n<mat-form-field>\r\n <mat-label>Settore</mat-label>\r\n <mat-select [(ngModel)]=\"params.sector\" #sector=\"ngModel\" name=\"sector\" (selectionChange)=\"sectorChanged()\">\r\n <mat-option>Tutti</mat-option>\r\n @for (s of sectors; track s) {\r\n <mat-option [value]=\"s.id\">\r\n @if (s.group == 'A') {\r\n<span> </span>\r\n}\r\n {{s.name}}\r\n </mat-option>\r\n}\r\n </mat-select>\r\n </mat-form-field>\r\n}\r\n @if (enableAuthor && authors && authors.length > 0) {\r\n<mat-form-field>\r\n <mat-label>Autore</mat-label>\r\n <mat-select [(ngModel)]=\"params.author\" #sector=\"ngModel\" name=\"author\">\r\n <mat-option>Tutti</mat-option>\r\n @for (a of authors; track a) {\r\n <mat-option [value]=\"a.authorId\">\r\n {{a.authorDescription}}\r\n </mat-option>\r\n}\r\n </mat-select>\r\n </mat-form-field>\r\n}\r\n @if (enableTopic && topics && topics.length > 0) {\r\n<mat-form-field>\r\n <mat-label>Argomento</mat-label>\r\n <mat-select [(ngModel)]=\"params.topic\" #topic=\"ngModel\" name=\"topic\">\r\n <mat-option>Tutti</mat-option>\r\n @for (t of topics; track t) {\r\n <mat-option [value]=\"t.value\" [matTooltip]=\"t.name\">\r\n <div [innerHtml]=\"t.title | safeHtml\"></div>\r\n </mat-option>\r\n}\r\n </mat-select>\r\n </mat-form-field>\r\n}\r\n @if (enableTaxonomy) {\r\n<mat-form-field>\r\n <mat-label>Argomento</mat-label>\r\n <input matInput [(ngModel)]=\"params.taxonomyNode\" readonly name=\"taxonomy\" />\r\n @if (params.taxonomyNode) {\r\n<button type=\"button\" tabindex=\"-1\" mat-icon-button matSuffix aria-label=\"Azzera\"\r\n (click)=\"params.taxonomy = null; params.taxonomyNode = null; params.taxonomyPath = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n}\r\n <button type=\"button\" mat-icon-button matSuffix aria-label=\"Scegli\" matTooltip=\"Scegli\"\r\n (click)=\"selectTaxonomy()\">\r\n <mat-icon>search</mat-icon>\r\n </button>\r\n @if (params.taxonomyNode) {\r\n<mat-hint align=\"start\" class=\"truncated lowercase\">\r\n <div>{{params.taxonomyPath}}</div>\r\n </mat-hint>\r\n}\r\n </mat-form-field>\r\n}\r\n @if (enableType) {\r\n<mat-form-field>\r\n <mat-label>Tipo</mat-label>\r\n <mat-select [(ngModel)]=\"params.type\" #topic=\"ngModel\" name=\"type\">\r\n <mat-option>Tutti</mat-option>\r\n @for (t of types; track t) {\r\n <mat-option [value]=\"t.documentTypeId\" [matTooltip]=\"t.documentTypeDescription\">\r\n {{t.documentTypeDescription}}\r\n </mat-option>\r\n}\r\n </mat-select>\r\n </mat-form-field>\r\n}\r\n @if (enableText) {\r\n<mat-form-field>\r\n <mat-label>Testo</mat-label>\r\n <input matInput name=\"text\" #text [(ngModel)]=\"params.text\" maxlength=\"200\" />\r\n @if (params.text) {\r\n<button type=\"button\" tabindex=\"-1\" mat-icon-button matSuffix aria-label=\"Azzera\"\r\n (click)=\"params.text = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n}\r\n <button fxHide.xs type=\"button\" mat-icon-button matSuffix aria-label=\"Componi\" matTooltip=\"Componi\"\r\n (click)=\"text.focus(); compose()\">\r\n <mat-icon>build</mat-icon>\r\n </button>\r\n <button fxHide.xs type=\"button\" mat-icon-button matSuffix aria-label=\"Informazioni\"\r\n matTooltip=\"Come effettuare la ricerca in testo libero\" (click)=\"text.focus(); help()\">\r\n <mat-icon>help_outline</mat-icon>\r\n </button>\r\n </mat-form-field>\r\n}\r\n @if (enableText) {\r\n<div class=\"spaced-bottom-10\">\r\n <mat-checkbox color=\"primary\" [disabled]=\"!params.text\" name=\"titleOnly\"\r\n [(ngModel)]=\"params.titleOnly\">Cerca\r\n solo nel titolo</mat-checkbox>\r\n </div>\r\n}\r\n @if (enablePublication) {\r\n<div>\r\n <div class=\"section-title\">Pubblicazione</div>\r\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between\" fxFill>\r\n <mat-form-field fxFlex=\"49\" fxFlex.xs=\"100\">\r\n <mat-label>Intervallo</mat-label>\r\n <mat-date-range-input [rangePicker]=\"picker1\">\r\n <input matStartDate [(ngModel)]=\"interval.from\" [dateIntervalChange]=\"interval\" #rangeFrom1=\"ngModel\"\r\n name=\"rangeFrom1\" placeholder=\"Da data\">\r\n <input matEndDate [(ngModel)]=\"interval.to\" [dateIntervalChange]=\"interval\" [end]=\"true\"\r\n #rangeTo1=\"ngModel\" name=\"rangeTo1\" placeholder=\"A data\">\r\n </mat-date-range-input>\r\n @if (interval.from || interval.to) {\r\n<button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button\r\n aria-label=\"Pulisci\" (click)=\"interval.clear()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n}\r\n <mat-datepicker-toggle matSuffix [for]=\"picker1\"></mat-datepicker-toggle>\r\n <mat-date-range-picker #picker1></mat-date-range-picker>\r\n @if (rangeFrom1.invalid || rangeTo1.invalid) {\r\n<mat-error>Intervallo non valido.</mat-error>\r\n}\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n}\r\n @if (enableDocument) {\r\n<div>\r\n <div class=\"section-title\">Estremi documento</div>\r\n <div class=\"section\">\r\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between\" fxFill>\r\n <mat-form-field fxFlex=\"30\" fxFlex.xs=\"100\">\r\n <mat-label>Num. doc.</mat-label>\r\n <input matInput [(ngModel)]=\"params.number\" #number=\"ngModel\" name=\"number\" maxlength=\"10\" />\r\n @if (params.number) {\r\n<button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.number = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n}\r\n <mat-hint>Senza spazi</mat-hint>\r\n @if (number.invalid) {\r\n<mat-error>Spazi non validi.</mat-error>\r\n}\r\n </mat-form-field>\r\n <mat-form-field fxFlex=\"68\" fxFlex.xs=\"100\">\r\n <mat-label>Intervallo</mat-label>\r\n <mat-date-range-input [rangePicker]=\"picker2\">\r\n <input matStartDate [(ngModel)]=\"interval.from\" [dateIntervalChange]=\"interval\" #rangeFrom2=\"ngModel\"\r\n name=\"rangeFrom2\" placeholder=\"Da data\">\r\n <input matEndDate [(ngModel)]=\"interval.to\" [dateIntervalChange]=\"interval\" [end]=\"true\"\r\n #rangeTo2=\"ngModel\" name=\"rangeTo2\" placeholder=\"A data\">\r\n </mat-date-range-input>\r\n @if (interval.from || interval.to) {\r\n<button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button\r\n aria-label=\"Pulisci\" (click)=\"interval.clear()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n}\r\n <mat-datepicker-toggle matSuffix [for]=\"picker2\"></mat-datepicker-toggle>\r\n <mat-date-range-picker #picker2></mat-date-range-picker>\r\n @if (rangeFrom2.invalid || rangeTo2.invalid) {\r\n<mat-error>Intervallo non valido.</mat-error>\r\n}\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n </div>\r\n}\r\n @if (enableSource) {\r\n<div>\r\n <div class=\"section-title\">Fonte</div>\r\n <div class=\"section\">\r\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between\" fxFill>\r\n <mat-form-field fxFlex=\"30\" fxFlex.xs=\"100\">\r\n <mat-label>Num. doc.</mat-label>\r\n <input matInput [(ngModel)]=\"params.sourceNumber\" #sourceNumber=\"ngModel\" name=\"sourceNumber\"\r\n maxlength=\"10\" />\r\n @if (params.sourceNumber) {\r\n<button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button\r\n aria-label=\"Pulisci\" (click)=\"params.sourceNumber = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n}\r\n <mat-hint>Senza spazi</mat-hint>\r\n @if (sourceNumber.invalid) {\r\n<mat-error>Spazi non validi.</mat-error>\r\n}\r\n </mat-form-field>\r\n <mat-form-field fxFlex=\"68\" fxFlex.xs=\"100\">\r\n <mat-label>Intervallo</mat-label>\r\n <mat-date-range-input [rangePicker]=\"picker3\">\r\n <input matStartDate [(ngModel)]=\"sourceInterval.from\" [dateIntervalChange]=\"sourceInterval\"\r\n #rangeFrom3=\"ngModel\" name=\"rangeFrom3\" placeholder=\"Da data\">\r\n <input matEndDate [(ngModel)]=\"sourceInterval.to\" [dateIntervalChange]=\"sourceInterval\" [end]=\"true\"\r\n #rangeTo3=\"ngModel\" name=\"rangeTo3\" placeholder=\"A data\">\r\n </mat-date-range-input>\r\n @if (sourceInterval.from || sourceInterval.to) {\r\n<button type=\"button\" tabindex=\"-1\" matSuffix\r\n mat-icon-button aria-label=\"Pulisci\" (click)=\"sourceInterval.clear()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n}\r\n <mat-datepicker-toggle matSuffix [for]=\"picker3\"></mat-datepicker-toggle>\r\n <mat-date-range-picker #picker3></mat-date-range-picker>\r\n @if (rangeFrom3.invalid || rangeTo3.invalid) {\r\n<mat-error>Intervallo non valido.</mat-error>\r\n}\r\n </mat-form-field>\r\n </div>\r\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between\" fxFill>\r\n @if (sources && sources.length > 0) {\r\n<mat-form-field fxFlex=\"100\">\r\n <mat-label>Tipo fonte</mat-label>\r\n <mat-select [(ngModel)]=\"params.source\" #sector=\"ngModel\" name=\"source\">\r\n <mat-option>Tutti</mat-option>\r\n @for (s of sources; track s) {\r\n <mat-option [value]=\"s.id\">\r\n {{s.name}}\r\n </mat-option>\r\n}\r\n </mat-select>\r\n </mat-form-field>\r\n}\r\n </div>\r\n </div>\r\n </div>\r\n}\r\n @if (enableChanges) {\r\n<div>\r\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between\" fxFill>\r\n <mat-form-field fxFlex=\"49\" fxFlex.xs=\"100\">\r\n <mat-label>Motivo</mat-label>\r\n <mat-select [(ngModel)]=\"params.reason\" #topic=\"ngModel\" name=\"reason\">\r\n @for (t of types; track t) {\r\n <mat-option [value]=\"t.value\" [matTooltip]=\"t.name\">\r\n {{t.name}}\r\n </mat-option>\r\n}\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n\r\n <div class=\"section-title mat-body-3\">Documento modificato</div>\r\n <div class=\"section\">\r\n <p class=\"small\" style=\"line-height: 12px\"><i>Saranno visualizzati i documenti modificanti.</i>\r\n </p>\r\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between\" fxFill>\r\n <mat-form-field fxFlex=\"23\" fxFlex.xs=\"100\">\r\n <mat-label>Num. doc.</mat-label>\r\n <input matInput [(ngModel)]=\"params.changedNumber\" #changedNumber=\"ngModel\" name=\"changedNumber\"\r\n maxlength=\"10\" />\r\n @if (params.changedNumber) {\r\n<button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button\r\n aria-label=\"Pulisci\" (click)=\"params.changedNumber = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n}\r\n <mat-hint>Senza spazi</mat-hint>\r\n @if (changedNumber.invalid) {\r\n<mat-error>Spazi non validi.</mat-error>\r\n}\r\n </mat-form-field>\r\n <mat-form-field fxFlex=\"23\" fxFlex.xs=\"100\">\r\n <mat-label>Anno</mat-label>\r\n <input type=\"number\" min=\"1750\" matInput [(ngModel)]=\"params.changedYear\" #changedYear=\"ngModel\"\r\n name=\"changedYear\" maxlength=\"4\" />\r\n @if (params.changedYear) {\r\n<button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button\r\n aria-label=\"Pulisci\" (click)=\"params.changedYear = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n}\r\n <mat-hint>Dal 1750</mat-hint>\r\n </mat-form-field>\r\n <mat-form-field fxFlex=\"51\" fxFlex.xs=\"100\">\r\n <mat-label>Titolo</mat-label>\r\n <input matInput [(ngModel)]=\"params.changedTitle\" #changedTitle=\"ngModel\" name=\"changedTitle\"\r\n maxlength=\"10\" />\r\n @if (params.changedTitle) {\r\n<button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button\r\n aria-label=\"Pulisci\" (click)=\"params.changedTitle = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n}\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n\r\n <div class=\"section-title \">Documento modificante</div>\r\n <div class=\"section\">\r\n <p class=\"small\" style=\"line-height: 12px\">\r\n <i>Saranno visualizzati i documenti modificati, oppure solo i modificanti se \u00E8 stato specificato\r\n l'estremo del documento modificato.</i>\r\n </p>\r\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between\" fxFill>\r\n <mat-form-field fxFlex=\"23\" fxFlex.xs=\"100\">\r\n <mat-label>Num. doc.</mat-label>\r\n <input matInput [(ngModel)]=\"params.modifierNumber\" #modifierNumber=\"ngModel\" name=\"modifierNumber\"\r\n maxlength=\"10\" />\r\n @if (params.modifierNumber) {\r\n<button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button\r\n aria-label=\"Pulisci\" (click)=\"params.modifierNumber = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n}\r\n <mat-hint>Senza spazi</mat-hint>\r\n @if (modifierNumber.invalid) {\r\n<mat-error>Spazi non validi.</mat-error>\r\n}\r\n </mat-form-field>\r\n <mat-form-field fxFlex=\"23\" fxFlex.xs=\"100\">\r\n <mat-label>Anno</mat-label>\r\n <input type=\"number\" min=1750 matInput [(ngModel)]=\"params.modifierYear\" #modifierYear=\"ngModel\"\r\n name=\"modifierYear\" maxlength=\"4\" />\r\n @if (params.modifierYear) {\r\n<button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button\r\n aria-label=\"Pulisci\" (click)=\"params.modifierYear = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n}\r\n <mat-hint>Dal 1750</mat-hint>\r\n </mat-form-field>\r\n <mat-form-field fxFlex=\"51\" fxFlex.xs=\"100\">\r\n <mat-label>Titolo</mat-label>\r\n <input matInput [(ngModel)]=\"params.modifierTitle\" #modifierTitle=\"ngModel\" name=\"modifierTitle\"\r\n maxlength=\"10\" />\r\n @if (params.modifierTitle) {\r\n<button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button\r\n aria-label=\"Pulisci\" (click)=\"params.modifierTitle = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n}\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n </div>\r\n}\r\n </div>\r\n </form>\r\n</div>\r\n<div mat-dialog-actions>\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxFlex=\"30\">\r\n <button type=\"button\" mat-button (click)=\"clear()\" color=\"primary\">PULISCI</button>\r\n </div>\r\n <div fxFlex=\"70\" fxLayoutAlign=\"end\">\r\n <button mat-flat-button color=\"primary\" #okButton [disabled]=\"f.form.invalid\" (click)=\"ok()\">TROVA</button>\r\n <button mat-button [mat-dialog-close]=\"true\" color=\"primary\">CHIUDI</button>\r\n </div>\r\n </div>\r\n</div>", styles: [".dialog-info{font-size:x-small;text-align:right;margin:10px}.dialog-title{padding:0 24px}b{font-weight:700}.large{font-size:large!important;line-height:18px!important}.small{font-size:small!important;line-height:16px!important}.small-icon-button{width:1.5rem!important;height:1.5rem!important;padding:0!important;display:inline-flex!important;align-items:center;justify-content:center}.small-icon-button .mat-mdc-button-touch-target{width:1.5rem!important;height:1.5rem!important}.x-small{font-size:x-small!important;line-height:14px!important}.uppercase{text-transform:uppercase!important}.lowercase{text-transform:lowercase!important}.truncated{min-width:0}.truncated span,.truncated div{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.no-spaced{padding-top:0!important;padding-bottom:0!important}.spaced-column{padding-top:20px!important;padding-bottom:20px!important}.spaced-20{padding-bottom:20px!important}.section,.spaced-10{padding-bottom:10px!important}.spaced-5{padding-bottom:5px!important}.section-title{font-size:large;font-weight:500;padding-top:10px;padding-bottom:8px}.icon-small{transform:scale(.8)}.icon-menu-drop-down{padding-right:0!important;margin-right:0!important}.item{min-height:50px!important;border-bottom:1px dotted #eee!important;line-height:18px}.item:hover{background-color:#fff8e1}.item-cell{padding:5px 0}.item-line{padding-top:1px;padding-bottom:1px}.item-line .command a{text-decoration:none;color:#2a91e0;font-weight:500;cursor:pointer!important}.item-line .command a:hover{opacity:.7}.item-line>a{color:#2a91e0!important;opacity:1!important;cursor:pointer}.item-line>a:hover{opacity:.7!important}.item-line-1{font-weight:500;font-size:1em;color:#000}.item-line-2{font-size:.9em;color:#000}.item-line-3{font-size:.8em;color:#000}.item-line-4{font-size:.7em;color:#000}.item-line-block-title{font-size:.8em;font-weight:500}.item-line-block{margin-top:4px;margin-bottom:4px;margin-left:10px;padding-left:10px;border-left:2px solid #009688}.item-line-read{font-weight:400!important}.item-line-read .command,.item-line-read a{color:#2a91e0;cursor:pointer!important;opacity:1!important}.item-line-read .command:hover,.item-line-read a:hover{opacity:.7!important}.item-line-red-badge{background-color:red;color:#fff;padding:2px 4px;border-radius:3px;border:1px solid red}.items-group-title{line-height:24px;padding:20px 10px 10px 20px;font-weight:500;font-size:19.2px}.items-footer{padding-top:10px}.sidenav-title-container{min-height:64px!important;padding-left:15px;margin-bottom:4px}.sidenav-title{color:#009688;font-weight:500;font-size:19.2px}.item-greyed-1{color:#607d8b}.item-greyed-2{color:#90a4ae}.item-accent{color:#0d7066}.item-primary{color:#009688}.item-badge{margin-left:10px;margin-bottom:5px;padding:0 4px;height:12px;line-height:12px;border-radius:3px;font-size:x-small;font-weight:500;text-align:center;background-color:orange;color:#000}\n"], dependencies: [{ kind: "directive", type: MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i4.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i4.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: FlexModule }, { kind: "directive", type: i5.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: i5.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: i5.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: i5.FlexFillDirective, selector: "[fxFill], [fxFlexFill]" }, { kind: "directive", type: i5.DefaultFlexAlignDirective, selector: " [fxFlexAlign], [fxFlexAlign.xs], [fxFlexAlign.sm], [fxFlexAlign.md], [fxFlexAlign.lg], [fxFlexAlign.xl], [fxFlexAlign.lt-sm], [fxFlexAlign.lt-md], [fxFlexAlign.lt-lg], [fxFlexAlign.lt-xl], [fxFlexAlign.gt-xs], [fxFlexAlign.gt-sm], [fxFlexAlign.gt-md], [fxFlexAlign.gt-lg]", inputs: ["fxFlexAlign", "fxFlexAlign.xs", "fxFlexAlign.sm", "fxFlexAlign.md", "fxFlexAlign.lg", "fxFlexAlign.xl", "fxFlexAlign.lt-sm", "fxFlexAlign.lt-md", "fxFlexAlign.lt-lg", "fxFlexAlign.lt-xl", "fxFlexAlign.gt-xs", "fxFlexAlign.gt-sm", "fxFlexAlign.gt-md", "fxFlexAlign.gt-lg"] }, { kind: "directive", type: i5.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: MatCheckboxModule }, { kind: "component", type: i6.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i7.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i7.MatLabel, selector: "mat-label" }, { kind: "directive", type: i7.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i7.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i7.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i8.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i9.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: MatOptionModule }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i10.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i11.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i12.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i12.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i13.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: ExtendedModule }, { kind: "directive", type: i14.DefaultShowHideDirective, selector: " [fxShow], [fxShow.print], [fxShow.xs], [fxShow.sm], [fxShow.md], [fxShow.lg], [fxShow.xl], [fxShow.lt-sm], [fxShow.lt-md], [fxShow.lt-lg], [fxShow.lt-xl], [fxShow.gt-xs], [fxShow.gt-sm], [fxShow.gt-md], [fxShow.gt-lg], [fxHide], [fxHide.print], [fxHide.xs], [fxHide.sm], [fxHide.md], [fxHide.lg], [fxHide.xl], [fxHide.lt-sm], [fxHide.lt-md], [fxHide.lt-lg], [fxHide.lt-xl], [fxHide.gt-xs], [fxHide.gt-sm], [fxHide.gt-md], [fxHide.gt-lg]", inputs: ["fxShow", "fxShow.print", "fxShow.xs", "fxShow.sm", "fxShow.md", "fxShow.lg", "fxShow.xl", "fxShow.lt-sm", "fxShow.lt-md", "fxShow.lt-lg", "fxShow.lt-xl", "fxShow.gt-xs", "fxShow.gt-sm", "fxShow.gt-md", "fxShow.gt-lg", "fxHide", "fxHide.print", "fxHide.xs", "fxHide.sm", "fxHide.md", "fxHide.lg", "fxHide.xl", "fxHide.lt-sm", "fxHide.lt-md", "fxHide.lt-lg", "fxHide.lt-xl", "fxHide.gt-xs", "fxHide.gt-sm", "fxHide.gt-md", "fxHide.gt-lg"] }, { kind: "ngmodule", type: MatDatepickerModule }, { kind: "component", type: i15.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "component", type: i15.MatDateRangeInput, selector: "mat-date-range-input", inputs: ["rangePicker", "required", "dateFilter", "min", "max", "disabled", "separator", "comparisonStart", "comparisonEnd"], exportAs: ["matDateRangeInput"] }, { kind: "directive", type: i15.MatStartDate, selector: "input[matStartDate]", outputs: ["dateChange", "dateInput"] }, { kind: "directive", type: i15.MatEndDate, selector: "input[matEndDate]", outputs: ["dateChange", "dateInput"] }, { kind: "component", type: i15.MatDateRangePicker, selector: "mat-date-range-picker", exportAs: ["matDateRangePicker"] }, { kind: "directive", type: DateIntervalChangeDirective, selector: "[dateIntervalChange]", inputs: ["dateIntervalChange", "end"] }, { kind: "directive", type: MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "pipe", type: SafeHtmlPipe, name: "safeHtml" }] }); }
|
|
291
|
+
], viewQueries: [{ propertyName: "okButton", first: true, predicate: ["okButton"], descendants: true }], ngImport: i0, template: "<h2 mat-dialog-title>Ricerca</h2>\r\n<div mat-dialog-content>\r\n <form name=\"form\" #f=\"ngForm\" (keyup.Enter)=\"!f.form.invalid ? ok() : null\" novalidate>\r\n <div fxLayout=\"column\">\r\n <div fxFlexAlign=\"end\">\r\n @if (enableRead) {\r\n<div style=\"padding-bottom:10px\">\r\n <mat-checkbox color=\"primary\" name=\"showUnreadDocumentsOnly\" [(ngModel)]=\"params.showUnreadDocumentsOnly\">\r\n Mostra solo non letti</mat-checkbox>\r\n </div>\r\n}\r\n @if (enableComments) {\r\n<div style=\"padding-bottom:10px\">\r\n <mat-checkbox color=\"primary\" name=\"showCommentedDocumentsOnly\"\r\n [(ngModel)]=\"params.showCommentedDocumentsOnly\">\r\n Mostra solo norme con commenti</mat-checkbox>\r\n </div>\r\n}\r\n </div>\r\n @if (enableModel) {\r\n<mat-form-field>\r\n <mat-label>Tipo</mat-label>\r\n <mat-select [(ngModel)]=\"params.sector\" #sector=\"ngModel\" name=\"model\" (selectionChange)=\"sectorChanged()\">\r\n <mat-option>Tutti</mat-option>\r\n @for (m of models; track m) {\r\n <mat-option [value]=\"m.id\">\r\n {{m.name}}\r\n </mat-option>\r\n}\r\n </mat-select>\r\n </mat-form-field>\r\n}\r\n @if (enableSector) {\r\n<mat-form-field>\r\n <mat-label>Settore</mat-label>\r\n <mat-select [(ngModel)]=\"params.sector\" #sector=\"ngModel\" name=\"sector\" (selectionChange)=\"sectorChanged()\">\r\n <mat-option>Tutti</mat-option>\r\n @for (s of sectors; track s) {\r\n <mat-option [value]=\"s.id\">\r\n @if (s.group == 'A') {\r\n<span> </span>\r\n}\r\n {{s.name}}\r\n </mat-option>\r\n}\r\n </mat-select>\r\n </mat-form-field>\r\n}\r\n @if (enableAuthor && authors && authors.length > 0) {\r\n<mat-form-field>\r\n <mat-label>Autore</mat-label>\r\n <mat-select [(ngModel)]=\"params.author\" #sector=\"ngModel\" name=\"author\">\r\n <mat-option>Tutti</mat-option>\r\n @for (a of authors; track a) {\r\n <mat-option [value]=\"a.authorId\">\r\n {{a.authorDescription}}\r\n </mat-option>\r\n}\r\n </mat-select>\r\n </mat-form-field>\r\n}\r\n @if (enableTopic && topics && topics.length > 0) {\r\n<mat-form-field>\r\n <mat-label>Argomento</mat-label>\r\n <mat-select [(ngModel)]=\"params.topic\" #topic=\"ngModel\" name=\"topic\">\r\n <mat-option>Tutti</mat-option>\r\n @for (t of topics; track t) {\r\n <mat-option [value]=\"t.value\" [matTooltip]=\"t.name\">\r\n <div [innerHtml]=\"t.title | safeHtml\"></div>\r\n </mat-option>\r\n}\r\n </mat-select>\r\n </mat-form-field>\r\n}\r\n @if (enableTaxonomy) {\r\n<mat-form-field>\r\n <mat-label>Argomento</mat-label>\r\n <input matInput [(ngModel)]=\"params.taxonomyNode\" readonly name=\"taxonomy\" />\r\n @if (params.taxonomyNode) {\r\n<button type=\"button\" tabindex=\"-1\" mat-icon-button matSuffix aria-label=\"Azzera\"\r\n (click)=\"params.taxonomy = null; params.taxonomyNode = null; params.taxonomyPath = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n}\r\n <button type=\"button\" mat-icon-button matSuffix aria-label=\"Scegli\" matTooltip=\"Scegli\"\r\n (click)=\"selectTaxonomy()\">\r\n <mat-icon>search</mat-icon>\r\n </button>\r\n @if (params.taxonomyNode) {\r\n<mat-hint align=\"start\" class=\"truncated lowercase\">\r\n <div>{{params.taxonomyPath}}</div>\r\n </mat-hint>\r\n}\r\n </mat-form-field>\r\n}\r\n @if (enableType) {\r\n<mat-form-field>\r\n <mat-label>Tipo</mat-label>\r\n <mat-select [(ngModel)]=\"params.type\" #topic=\"ngModel\" name=\"type\">\r\n <mat-option>Tutti</mat-option>\r\n @for (t of types; track t) {\r\n <mat-option [value]=\"t.documentTypeId\" [matTooltip]=\"t.documentTypeDescription\">\r\n {{t.documentTypeDescription}}\r\n </mat-option>\r\n}\r\n </mat-select>\r\n </mat-form-field>\r\n}\r\n @if (enableText) {\r\n<mat-form-field>\r\n <mat-label>Testo</mat-label>\r\n <input matInput name=\"text\" #text [(ngModel)]=\"params.text\" maxlength=\"200\" />\r\n @if (params.text) {\r\n<button type=\"button\" tabindex=\"-1\" mat-icon-button matSuffix aria-label=\"Azzera\"\r\n (click)=\"params.text = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n}\r\n <button fxHide.xs type=\"button\" mat-icon-button matSuffix aria-label=\"Componi\" matTooltip=\"Componi\"\r\n (click)=\"text.focus(); compose()\">\r\n <mat-icon>build</mat-icon>\r\n </button>\r\n <button fxHide.xs type=\"button\" mat-icon-button matSuffix aria-label=\"Informazioni\"\r\n matTooltip=\"Come effettuare la ricerca in testo libero\" (click)=\"text.focus(); help()\">\r\n <mat-icon>help_outline</mat-icon>\r\n </button>\r\n </mat-form-field>\r\n}\r\n @if (enableText) {\r\n<div style=\"padding-bottom:10px\">\r\n <mat-checkbox color=\"primary\" [disabled]=\"!params.text\" name=\"titleOnly\"\r\n [(ngModel)]=\"params.titleOnly\">Cerca\r\n solo nel titolo</mat-checkbox>\r\n </div>\r\n}\r\n @if (enablePublication) {\r\n<div>\r\n <div class=\"section-title\">Pubblicazione</div>\r\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between\" fxFill>\r\n <mat-form-field fxFlex=\"49\" fxFlex.xs=\"100\">\r\n <mat-label>Intervallo</mat-label>\r\n <mat-date-range-input [rangePicker]=\"picker1\">\r\n <input matStartDate [(ngModel)]=\"interval.from\" [dateIntervalChange]=\"interval\" #rangeFrom1=\"ngModel\"\r\n name=\"rangeFrom1\" placeholder=\"Da data\">\r\n <input matEndDate [(ngModel)]=\"interval.to\" [dateIntervalChange]=\"interval\" [end]=\"true\"\r\n #rangeTo1=\"ngModel\" name=\"rangeTo1\" placeholder=\"A data\">\r\n </mat-date-range-input>\r\n @if (interval.from || interval.to) {\r\n<button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button\r\n aria-label=\"Pulisci\" (click)=\"interval.clear()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n}\r\n <mat-datepicker-toggle matSuffix [for]=\"picker1\"></mat-datepicker-toggle>\r\n <mat-date-range-picker #picker1></mat-date-range-picker>\r\n @if (rangeFrom1.invalid || rangeTo1.invalid) {\r\n<mat-error>Intervallo non valido.</mat-error>\r\n}\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n}\r\n @if (enableDocument) {\r\n<div>\r\n <div class=\"section-title\">Estremi documento</div>\r\n <div class=\"section\">\r\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between\" fxFill>\r\n <mat-form-field fxFlex=\"30\" fxFlex.xs=\"100\">\r\n <mat-label>Num. doc.</mat-label>\r\n <input matInput [(ngModel)]=\"params.number\" #number=\"ngModel\" name=\"number\" maxlength=\"10\" />\r\n @if (params.number) {\r\n<button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.number = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n}\r\n <mat-hint>Senza spazi</mat-hint>\r\n @if (number.invalid) {\r\n<mat-error>Spazi non validi.</mat-error>\r\n}\r\n </mat-form-field>\r\n <mat-form-field fxFlex=\"68\" fxFlex.xs=\"100\">\r\n <mat-label>Intervallo</mat-label>\r\n <mat-date-range-input [rangePicker]=\"picker2\">\r\n <input matStartDate [(ngModel)]=\"interval.from\" [dateIntervalChange]=\"interval\" #rangeFrom2=\"ngModel\"\r\n name=\"rangeFrom2\" placeholder=\"Da data\">\r\n <input matEndDate [(ngModel)]=\"interval.to\" [dateIntervalChange]=\"interval\" [end]=\"true\"\r\n #rangeTo2=\"ngModel\" name=\"rangeTo2\" placeholder=\"A data\">\r\n </mat-date-range-input>\r\n @if (interval.from || interval.to) {\r\n<button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button\r\n aria-label=\"Pulisci\" (click)=\"interval.clear()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n}\r\n <mat-datepicker-toggle matSuffix [for]=\"picker2\"></mat-datepicker-toggle>\r\n <mat-date-range-picker #picker2></mat-date-range-picker>\r\n @if (rangeFrom2.invalid || rangeTo2.invalid) {\r\n<mat-error>Intervallo non valido.</mat-error>\r\n}\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n </div>\r\n}\r\n @if (enableSource) {\r\n<div>\r\n <div class=\"section-title\">Fonte</div>\r\n <div class=\"section\">\r\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between\" fxFill>\r\n <mat-form-field fxFlex=\"30\" fxFlex.xs=\"100\">\r\n <mat-label>Num. doc.</mat-label>\r\n <input matInput [(ngModel)]=\"params.sourceNumber\" #sourceNumber=\"ngModel\" name=\"sourceNumber\"\r\n maxlength=\"10\" />\r\n @if (params.sourceNumber) {\r\n<button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button\r\n aria-label=\"Pulisci\" (click)=\"params.sourceNumber = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n}\r\n <mat-hint>Senza spazi</mat-hint>\r\n @if (sourceNumber.invalid) {\r\n<mat-error>Spazi non validi.</mat-error>\r\n}\r\n </mat-form-field>\r\n <mat-form-field fxFlex=\"68\" fxFlex.xs=\"100\">\r\n <mat-label>Intervallo</mat-label>\r\n <mat-date-range-input [rangePicker]=\"picker3\">\r\n <input matStartDate [(ngModel)]=\"sourceInterval.from\" [dateIntervalChange]=\"sourceInterval\"\r\n #rangeFrom3=\"ngModel\" name=\"rangeFrom3\" placeholder=\"Da data\">\r\n <input matEndDate [(ngModel)]=\"sourceInterval.to\" [dateIntervalChange]=\"sourceInterval\" [end]=\"true\"\r\n #rangeTo3=\"ngModel\" name=\"rangeTo3\" placeholder=\"A data\">\r\n </mat-date-range-input>\r\n @if (sourceInterval.from || sourceInterval.to) {\r\n<button type=\"button\" tabindex=\"-1\" matSuffix\r\n mat-icon-button aria-label=\"Pulisci\" (click)=\"sourceInterval.clear()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n}\r\n <mat-datepicker-toggle matSuffix [for]=\"picker3\"></mat-datepicker-toggle>\r\n <mat-date-range-picker #picker3></mat-date-range-picker>\r\n @if (rangeFrom3.invalid || rangeTo3.invalid) {\r\n<mat-error>Intervallo non valido.</mat-error>\r\n}\r\n </mat-form-field>\r\n </div>\r\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between\" fxFill>\r\n @if (sources && sources.length > 0) {\r\n<mat-form-field fxFlex=\"100\">\r\n <mat-label>Tipo fonte</mat-label>\r\n <mat-select [(ngModel)]=\"params.source\" #sector=\"ngModel\" name=\"source\">\r\n <mat-option>Tutti</mat-option>\r\n @for (s of sources; track s) {\r\n <mat-option [value]=\"s.id\">\r\n {{s.name}}\r\n </mat-option>\r\n}\r\n </mat-select>\r\n </mat-form-field>\r\n}\r\n </div>\r\n </div>\r\n </div>\r\n}\r\n @if (enableChanges) {\r\n<div>\r\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between\" fxFill>\r\n <mat-form-field fxFlex=\"49\" fxFlex.xs=\"100\">\r\n <mat-label>Motivo</mat-label>\r\n <mat-select [(ngModel)]=\"params.reason\" #topic=\"ngModel\" name=\"reason\">\r\n @for (t of types; track t) {\r\n <mat-option [value]=\"t.value\" [matTooltip]=\"t.name\">\r\n {{t.name}}\r\n </mat-option>\r\n}\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n\r\n <div class=\"section-title mat-body-3\">Documento modificato</div>\r\n <div class=\"section\">\r\n <p class=\"small\" style=\"line-height: 12px\"><i>Saranno visualizzati i documenti modificanti.</i>\r\n </p>\r\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between\" fxFill>\r\n <mat-form-field fxFlex=\"23\" fxFlex.xs=\"100\">\r\n <mat-label>Num. doc.</mat-label>\r\n <input matInput [(ngModel)]=\"params.changedNumber\" #changedNumber=\"ngModel\" name=\"changedNumber\"\r\n maxlength=\"10\" />\r\n @if (params.changedNumber) {\r\n<button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button\r\n aria-label=\"Pulisci\" (click)=\"params.changedNumber = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n}\r\n <mat-hint>Senza spazi</mat-hint>\r\n @if (changedNumber.invalid) {\r\n<mat-error>Spazi non validi.</mat-error>\r\n}\r\n </mat-form-field>\r\n <mat-form-field fxFlex=\"23\" fxFlex.xs=\"100\">\r\n <mat-label>Anno</mat-label>\r\n <input type=\"number\" min=\"1750\" matInput [(ngModel)]=\"params.changedYear\" #changedYear=\"ngModel\"\r\n name=\"changedYear\" maxlength=\"4\" />\r\n @if (params.changedYear) {\r\n<button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button\r\n aria-label=\"Pulisci\" (click)=\"params.changedYear = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n}\r\n <mat-hint>Dal 1750</mat-hint>\r\n </mat-form-field>\r\n <mat-form-field fxFlex=\"51\" fxFlex.xs=\"100\">\r\n <mat-label>Titolo</mat-label>\r\n <input matInput [(ngModel)]=\"params.changedTitle\" #changedTitle=\"ngModel\" name=\"changedTitle\"\r\n maxlength=\"10\" />\r\n @if (params.changedTitle) {\r\n<button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button\r\n aria-label=\"Pulisci\" (click)=\"params.changedTitle = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n}\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n\r\n <div class=\"section-title \">Documento modificante</div>\r\n <div class=\"section\">\r\n <p class=\"small\" style=\"line-height: 12px\">\r\n <i>Saranno visualizzati i documenti modificati, oppure solo i modificanti se \u00E8 stato specificato\r\n l'estremo del documento modificato.</i>\r\n </p>\r\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between\" fxFill>\r\n <mat-form-field fxFlex=\"23\" fxFlex.xs=\"100\">\r\n <mat-label>Num. doc.</mat-label>\r\n <input matInput [(ngModel)]=\"params.modifierNumber\" #modifierNumber=\"ngModel\" name=\"modifierNumber\"\r\n maxlength=\"10\" />\r\n @if (params.modifierNumber) {\r\n<button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button\r\n aria-label=\"Pulisci\" (click)=\"params.modifierNumber = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n}\r\n <mat-hint>Senza spazi</mat-hint>\r\n @if (modifierNumber.invalid) {\r\n<mat-error>Spazi non validi.</mat-error>\r\n}\r\n </mat-form-field>\r\n <mat-form-field fxFlex=\"23\" fxFlex.xs=\"100\">\r\n <mat-label>Anno</mat-label>\r\n <input type=\"number\" min=1750 matInput [(ngModel)]=\"params.modifierYear\" #modifierYear=\"ngModel\"\r\n name=\"modifierYear\" maxlength=\"4\" />\r\n @if (params.modifierYear) {\r\n<button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button\r\n aria-label=\"Pulisci\" (click)=\"params.modifierYear = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n}\r\n <mat-hint>Dal 1750</mat-hint>\r\n </mat-form-field>\r\n <mat-form-field fxFlex=\"51\" fxFlex.xs=\"100\">\r\n <mat-label>Titolo</mat-label>\r\n <input matInput [(ngModel)]=\"params.modifierTitle\" #modifierTitle=\"ngModel\" name=\"modifierTitle\"\r\n maxlength=\"10\" />\r\n @if (params.modifierTitle) {\r\n<button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button\r\n aria-label=\"Pulisci\" (click)=\"params.modifierTitle = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n}\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n </div>\r\n}\r\n </div>\r\n </form>\r\n</div>\r\n<div mat-dialog-actions>\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxFlex=\"30\">\r\n <button type=\"button\" mat-button (click)=\"clear()\" color=\"primary\">PULISCI</button>\r\n </div>\r\n <div fxFlex=\"70\" fxLayoutAlign=\"end\">\r\n <button mat-flat-button color=\"primary\" #okButton [disabled]=\"f.form.invalid\" (click)=\"ok()\">TROVA</button>\r\n <button mat-button [mat-dialog-close]=\"true\" color=\"primary\">CHIUDI</button>\r\n </div>\r\n </div>\r\n</div>", styles: [".dialog-info{font-size:x-small;text-align:right;margin:10px}.dialog-title{padding:0 24px}b{font-weight:700}.large{font-size:large!important;line-height:18px!important}.small{font-size:small!important;line-height:16px!important}.small-icon-button{width:1.5rem!important;height:1.5rem!important;padding:0!important;display:inline-flex!important;align-items:center;justify-content:center}.small-icon-button .mat-mdc-button-touch-target{width:1.5rem!important;height:1.5rem!important}.x-small{font-size:x-small!important;line-height:14px!important}.uppercase{text-transform:uppercase!important}.lowercase{text-transform:lowercase!important}.truncated{min-width:0}.truncated span,.truncated div{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.no-spaced{padding-top:0!important;padding-bottom:0!important}.spaced-column{padding-top:20px!important;padding-bottom:20px!important}.spaced-20{padding-bottom:20px!important}.section,.spaced-10{padding-bottom:10px!important}.spaced-5{padding-bottom:5px!important}.section-title{font-size:large;font-weight:500;padding-top:10px;padding-bottom:8px}.icon-small{transform:scale(.8)}.icon-menu-drop-down{padding-right:0!important;margin-right:0!important}.item{min-height:50px!important;border-bottom:1px dotted #eee!important;line-height:18px}.item:hover{background-color:#fff8e1}.item-cell{padding:5px 0}.item-line{padding-top:1px;padding-bottom:1px}.item-line .command a{text-decoration:none;color:#2a91e0;font-weight:500;cursor:pointer!important}.item-line .command a:hover{opacity:.7}.item-line>a{color:#2a91e0!important;opacity:1!important;cursor:pointer}.item-line>a:hover{opacity:.7!important}.item-line-1{font-weight:500;font-size:1em;color:#000}.item-line-2{font-size:.9em;color:#000}.item-line-3{font-size:.8em;color:#000}.item-line-4{font-size:.7em;color:#000}.item-line-block-title{font-size:.8em;font-weight:500}.item-line-block{margin-top:4px;margin-bottom:4px;margin-left:10px;padding-left:10px;border-left:2px solid #009688}.item-line-read{font-weight:400!important}.item-line-read .command,.item-line-read a{color:#2a91e0;cursor:pointer!important;opacity:1!important}.item-line-read .command:hover,.item-line-read a:hover{opacity:.7!important}.item-line-red-badge{background-color:red;color:#fff;padding:2px 4px;border-radius:3px;border:1px solid red}.items-group-title{line-height:24px;padding:20px 10px 10px 20px;font-weight:500;font-size:19.2px}.items-footer{padding-top:10px}.sidenav-title-container{min-height:64px!important;padding-left:15px;margin-bottom:4px}.sidenav-title{color:#009688;font-weight:500;font-size:19.2px}.item-greyed-1{color:#607d8b}.item-greyed-2{color:#90a4ae}.item-accent{color:#0d7066}.item-primary{color:#009688}.item-badge{margin-left:10px;margin-bottom:5px;padding:0 4px;height:12px;line-height:12px;border-radius:3px;font-size:x-small;font-weight:500;text-align:center;background-color:orange;color:#000}\n"], dependencies: [{ kind: "directive", type: MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i4.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i4.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: FlexModule }, { kind: "directive", type: i5.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: i5.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: i5.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: i5.FlexFillDirective, selector: "[fxFill], [fxFlexFill]" }, { kind: "directive", type: i5.DefaultFlexAlignDirective, selector: " [fxFlexAlign], [fxFlexAlign.xs], [fxFlexAlign.sm], [fxFlexAlign.md], [fxFlexAlign.lg], [fxFlexAlign.xl], [fxFlexAlign.lt-sm], [fxFlexAlign.lt-md], [fxFlexAlign.lt-lg], [fxFlexAlign.lt-xl], [fxFlexAlign.gt-xs], [fxFlexAlign.gt-sm], [fxFlexAlign.gt-md], [fxFlexAlign.gt-lg]", inputs: ["fxFlexAlign", "fxFlexAlign.xs", "fxFlexAlign.sm", "fxFlexAlign.md", "fxFlexAlign.lg", "fxFlexAlign.xl", "fxFlexAlign.lt-sm", "fxFlexAlign.lt-md", "fxFlexAlign.lt-lg", "fxFlexAlign.lt-xl", "fxFlexAlign.gt-xs", "fxFlexAlign.gt-sm", "fxFlexAlign.gt-md", "fxFlexAlign.gt-lg"] }, { kind: "directive", type: i5.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: MatCheckboxModule }, { kind: "component", type: i6.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i7.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i7.MatLabel, selector: "mat-label" }, { kind: "directive", type: i7.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i7.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i7.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i8.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i9.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: MatOptionModule }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i10.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i11.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i12.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i12.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i13.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: ExtendedModule }, { kind: "directive", type: i14.DefaultShowHideDirective, selector: " [fxShow], [fxShow.print], [fxShow.xs], [fxShow.sm], [fxShow.md], [fxShow.lg], [fxShow.xl], [fxShow.lt-sm], [fxShow.lt-md], [fxShow.lt-lg], [fxShow.lt-xl], [fxShow.gt-xs], [fxShow.gt-sm], [fxShow.gt-md], [fxShow.gt-lg], [fxHide], [fxHide.print], [fxHide.xs], [fxHide.sm], [fxHide.md], [fxHide.lg], [fxHide.xl], [fxHide.lt-sm], [fxHide.lt-md], [fxHide.lt-lg], [fxHide.lt-xl], [fxHide.gt-xs], [fxHide.gt-sm], [fxHide.gt-md], [fxHide.gt-lg]", inputs: ["fxShow", "fxShow.print", "fxShow.xs", "fxShow.sm", "fxShow.md", "fxShow.lg", "fxShow.xl", "fxShow.lt-sm", "fxShow.lt-md", "fxShow.lt-lg", "fxShow.lt-xl", "fxShow.gt-xs", "fxShow.gt-sm", "fxShow.gt-md", "fxShow.gt-lg", "fxHide", "fxHide.print", "fxHide.xs", "fxHide.sm", "fxHide.md", "fxHide.lg", "fxHide.xl", "fxHide.lt-sm", "fxHide.lt-md", "fxHide.lt-lg", "fxHide.lt-xl", "fxHide.gt-xs", "fxHide.gt-sm", "fxHide.gt-md", "fxHide.gt-lg"] }, { kind: "ngmodule", type: MatDatepickerModule }, { kind: "component", type: i15.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "component", type: i15.MatDateRangeInput, selector: "mat-date-range-input", inputs: ["rangePicker", "required", "dateFilter", "min", "max", "disabled", "separator", "comparisonStart", "comparisonEnd"], exportAs: ["matDateRangeInput"] }, { kind: "directive", type: i15.MatStartDate, selector: "input[matStartDate]", outputs: ["dateChange", "dateInput"] }, { kind: "directive", type: i15.MatEndDate, selector: "input[matEndDate]", outputs: ["dateChange", "dateInput"] }, { kind: "component", type: i15.MatDateRangePicker, selector: "mat-date-range-picker", exportAs: ["matDateRangePicker"] }, { kind: "directive", type: DateIntervalChangeDirective, selector: "[dateIntervalChange]", inputs: ["dateIntervalChange", "end"] }, { kind: "directive", type: MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "pipe", type: SafeHtmlPipe, name: "safeHtml" }] }); }
|
|
292
292
|
}
|
|
293
293
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: ClipperSearchDialogComponent, decorators: [{
|
|
294
294
|
type: Component,
|
|
@@ -313,7 +313,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImpor
|
|
|
313
313
|
MatDialogActions,
|
|
314
314
|
MatDialogClose,
|
|
315
315
|
SafeHtmlPipe,
|
|
316
|
-
], template: "<h2 mat-dialog-title>Ricerca</h2>\r\n<div mat-dialog-content>\r\n <form name=\"form\" #f=\"ngForm\" (keyup.Enter)=\"!f.form.invalid ? ok() : null\" novalidate>\r\n <div fxLayout=\"column\">\r\n <div fxFlexAlign=\"end\">\r\n @if (enableRead) {\r\n<div class=\"spaced-bottom-10\">\r\n <mat-checkbox color=\"primary\" name=\"showUnreadDocumentsOnly\" [(ngModel)]=\"params.showUnreadDocumentsOnly\">\r\n Mostra solo non letti</mat-checkbox>\r\n </div>\r\n}\r\n @if (enableComments) {\r\n<div class=\"spaced-bottom-10\">\r\n <mat-checkbox color=\"primary\" name=\"showCommentedDocumentsOnly\"\r\n [(ngModel)]=\"params.showCommentedDocumentsOnly\">\r\n Mostra solo norme con commenti</mat-checkbox>\r\n </div>\r\n}\r\n </div>\r\n @if (enableModel) {\r\n<mat-form-field>\r\n <mat-label>Tipo</mat-label>\r\n <mat-select [(ngModel)]=\"params.sector\" #sector=\"ngModel\" name=\"model\" (selectionChange)=\"sectorChanged()\">\r\n <mat-option>Tutti</mat-option>\r\n @for (m of models; track m) {\r\n <mat-option [value]=\"m.id\">\r\n {{m.name}}\r\n </mat-option>\r\n}\r\n </mat-select>\r\n </mat-form-field>\r\n}\r\n @if (enableSector) {\r\n<mat-form-field>\r\n <mat-label>Settore</mat-label>\r\n <mat-select [(ngModel)]=\"params.sector\" #sector=\"ngModel\" name=\"sector\" (selectionChange)=\"sectorChanged()\">\r\n <mat-option>Tutti</mat-option>\r\n @for (s of sectors; track s) {\r\n <mat-option [value]=\"s.id\">\r\n @if (s.group == 'A') {\r\n<span> </span>\r\n}\r\n {{s.name}}\r\n </mat-option>\r\n}\r\n </mat-select>\r\n </mat-form-field>\r\n}\r\n @if (enableAuthor && authors && authors.length > 0) {\r\n<mat-form-field>\r\n <mat-label>Autore</mat-label>\r\n <mat-select [(ngModel)]=\"params.author\" #sector=\"ngModel\" name=\"author\">\r\n <mat-option>Tutti</mat-option>\r\n @for (a of authors; track a) {\r\n <mat-option [value]=\"a.authorId\">\r\n {{a.authorDescription}}\r\n </mat-option>\r\n}\r\n </mat-select>\r\n </mat-form-field>\r\n}\r\n @if (enableTopic && topics && topics.length > 0) {\r\n<mat-form-field>\r\n <mat-label>Argomento</mat-label>\r\n <mat-select [(ngModel)]=\"params.topic\" #topic=\"ngModel\" name=\"topic\">\r\n <mat-option>Tutti</mat-option>\r\n @for (t of topics; track t) {\r\n <mat-option [value]=\"t.value\" [matTooltip]=\"t.name\">\r\n <div [innerHtml]=\"t.title | safeHtml\"></div>\r\n </mat-option>\r\n}\r\n </mat-select>\r\n </mat-form-field>\r\n}\r\n @if (enableTaxonomy) {\r\n<mat-form-field>\r\n <mat-label>Argomento</mat-label>\r\n <input matInput [(ngModel)]=\"params.taxonomyNode\" readonly name=\"taxonomy\" />\r\n @if (params.taxonomyNode) {\r\n<button type=\"button\" tabindex=\"-1\" mat-icon-button matSuffix aria-label=\"Azzera\"\r\n (click)=\"params.taxonomy = null; params.taxonomyNode = null; params.taxonomyPath = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n}\r\n <button type=\"button\" mat-icon-button matSuffix aria-label=\"Scegli\" matTooltip=\"Scegli\"\r\n (click)=\"selectTaxonomy()\">\r\n <mat-icon>search</mat-icon>\r\n </button>\r\n @if (params.taxonomyNode) {\r\n<mat-hint align=\"start\" class=\"truncated lowercase\">\r\n <div>{{params.taxonomyPath}}</div>\r\n </mat-hint>\r\n}\r\n </mat-form-field>\r\n}\r\n @if (enableType) {\r\n<mat-form-field>\r\n <mat-label>Tipo</mat-label>\r\n <mat-select [(ngModel)]=\"params.type\" #topic=\"ngModel\" name=\"type\">\r\n <mat-option>Tutti</mat-option>\r\n @for (t of types; track t) {\r\n <mat-option [value]=\"t.documentTypeId\" [matTooltip]=\"t.documentTypeDescription\">\r\n {{t.documentTypeDescription}}\r\n </mat-option>\r\n}\r\n </mat-select>\r\n </mat-form-field>\r\n}\r\n @if (enableText) {\r\n<mat-form-field>\r\n <mat-label>Testo</mat-label>\r\n <input matInput name=\"text\" #text [(ngModel)]=\"params.text\" maxlength=\"200\" />\r\n @if (params.text) {\r\n<button type=\"button\" tabindex=\"-1\" mat-icon-button matSuffix aria-label=\"Azzera\"\r\n (click)=\"params.text = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n}\r\n <button fxHide.xs type=\"button\" mat-icon-button matSuffix aria-label=\"Componi\" matTooltip=\"Componi\"\r\n (click)=\"text.focus(); compose()\">\r\n <mat-icon>build</mat-icon>\r\n </button>\r\n <button fxHide.xs type=\"button\" mat-icon-button matSuffix aria-label=\"Informazioni\"\r\n matTooltip=\"Come effettuare la ricerca in testo libero\" (click)=\"text.focus(); help()\">\r\n <mat-icon>help_outline</mat-icon>\r\n </button>\r\n </mat-form-field>\r\n}\r\n @if (enableText) {\r\n<div class=\"spaced-bottom-10\">\r\n <mat-checkbox color=\"primary\" [disabled]=\"!params.text\" name=\"titleOnly\"\r\n [(ngModel)]=\"params.titleOnly\">Cerca\r\n solo nel titolo</mat-checkbox>\r\n </div>\r\n}\r\n @if (enablePublication) {\r\n<div>\r\n <div class=\"section-title\">Pubblicazione</div>\r\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between\" fxFill>\r\n <mat-form-field fxFlex=\"49\" fxFlex.xs=\"100\">\r\n <mat-label>Intervallo</mat-label>\r\n <mat-date-range-input [rangePicker]=\"picker1\">\r\n <input matStartDate [(ngModel)]=\"interval.from\" [dateIntervalChange]=\"interval\" #rangeFrom1=\"ngModel\"\r\n name=\"rangeFrom1\" placeholder=\"Da data\">\r\n <input matEndDate [(ngModel)]=\"interval.to\" [dateIntervalChange]=\"interval\" [end]=\"true\"\r\n #rangeTo1=\"ngModel\" name=\"rangeTo1\" placeholder=\"A data\">\r\n </mat-date-range-input>\r\n @if (interval.from || interval.to) {\r\n<button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button\r\n aria-label=\"Pulisci\" (click)=\"interval.clear()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n}\r\n <mat-datepicker-toggle matSuffix [for]=\"picker1\"></mat-datepicker-toggle>\r\n <mat-date-range-picker #picker1></mat-date-range-picker>\r\n @if (rangeFrom1.invalid || rangeTo1.invalid) {\r\n<mat-error>Intervallo non valido.</mat-error>\r\n}\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n}\r\n @if (enableDocument) {\r\n<div>\r\n <div class=\"section-title\">Estremi documento</div>\r\n <div class=\"section\">\r\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between\" fxFill>\r\n <mat-form-field fxFlex=\"30\" fxFlex.xs=\"100\">\r\n <mat-label>Num. doc.</mat-label>\r\n <input matInput [(ngModel)]=\"params.number\" #number=\"ngModel\" name=\"number\" maxlength=\"10\" />\r\n @if (params.number) {\r\n<button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.number = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n}\r\n <mat-hint>Senza spazi</mat-hint>\r\n @if (number.invalid) {\r\n<mat-error>Spazi non validi.</mat-error>\r\n}\r\n </mat-form-field>\r\n <mat-form-field fxFlex=\"68\" fxFlex.xs=\"100\">\r\n <mat-label>Intervallo</mat-label>\r\n <mat-date-range-input [rangePicker]=\"picker2\">\r\n <input matStartDate [(ngModel)]=\"interval.from\" [dateIntervalChange]=\"interval\" #rangeFrom2=\"ngModel\"\r\n name=\"rangeFrom2\" placeholder=\"Da data\">\r\n <input matEndDate [(ngModel)]=\"interval.to\" [dateIntervalChange]=\"interval\" [end]=\"true\"\r\n #rangeTo2=\"ngModel\" name=\"rangeTo2\" placeholder=\"A data\">\r\n </mat-date-range-input>\r\n @if (interval.from || interval.to) {\r\n<button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button\r\n aria-label=\"Pulisci\" (click)=\"interval.clear()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n}\r\n <mat-datepicker-toggle matSuffix [for]=\"picker2\"></mat-datepicker-toggle>\r\n <mat-date-range-picker #picker2></mat-date-range-picker>\r\n @if (rangeFrom2.invalid || rangeTo2.invalid) {\r\n<mat-error>Intervallo non valido.</mat-error>\r\n}\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n </div>\r\n}\r\n @if (enableSource) {\r\n<div>\r\n <div class=\"section-title\">Fonte</div>\r\n <div class=\"section\">\r\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between\" fxFill>\r\n <mat-form-field fxFlex=\"30\" fxFlex.xs=\"100\">\r\n <mat-label>Num. doc.</mat-label>\r\n <input matInput [(ngModel)]=\"params.sourceNumber\" #sourceNumber=\"ngModel\" name=\"sourceNumber\"\r\n maxlength=\"10\" />\r\n @if (params.sourceNumber) {\r\n<button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button\r\n aria-label=\"Pulisci\" (click)=\"params.sourceNumber = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n}\r\n <mat-hint>Senza spazi</mat-hint>\r\n @if (sourceNumber.invalid) {\r\n<mat-error>Spazi non validi.</mat-error>\r\n}\r\n </mat-form-field>\r\n <mat-form-field fxFlex=\"68\" fxFlex.xs=\"100\">\r\n <mat-label>Intervallo</mat-label>\r\n <mat-date-range-input [rangePicker]=\"picker3\">\r\n <input matStartDate [(ngModel)]=\"sourceInterval.from\" [dateIntervalChange]=\"sourceInterval\"\r\n #rangeFrom3=\"ngModel\" name=\"rangeFrom3\" placeholder=\"Da data\">\r\n <input matEndDate [(ngModel)]=\"sourceInterval.to\" [dateIntervalChange]=\"sourceInterval\" [end]=\"true\"\r\n #rangeTo3=\"ngModel\" name=\"rangeTo3\" placeholder=\"A data\">\r\n </mat-date-range-input>\r\n @if (sourceInterval.from || sourceInterval.to) {\r\n<button type=\"button\" tabindex=\"-1\" matSuffix\r\n mat-icon-button aria-label=\"Pulisci\" (click)=\"sourceInterval.clear()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n}\r\n <mat-datepicker-toggle matSuffix [for]=\"picker3\"></mat-datepicker-toggle>\r\n <mat-date-range-picker #picker3></mat-date-range-picker>\r\n @if (rangeFrom3.invalid || rangeTo3.invalid) {\r\n<mat-error>Intervallo non valido.</mat-error>\r\n}\r\n </mat-form-field>\r\n </div>\r\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between\" fxFill>\r\n @if (sources && sources.length > 0) {\r\n<mat-form-field fxFlex=\"100\">\r\n <mat-label>Tipo fonte</mat-label>\r\n <mat-select [(ngModel)]=\"params.source\" #sector=\"ngModel\" name=\"source\">\r\n <mat-option>Tutti</mat-option>\r\n @for (s of sources; track s) {\r\n <mat-option [value]=\"s.id\">\r\n {{s.name}}\r\n </mat-option>\r\n}\r\n </mat-select>\r\n </mat-form-field>\r\n}\r\n </div>\r\n </div>\r\n </div>\r\n}\r\n @if (enableChanges) {\r\n<div>\r\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between\" fxFill>\r\n <mat-form-field fxFlex=\"49\" fxFlex.xs=\"100\">\r\n <mat-label>Motivo</mat-label>\r\n <mat-select [(ngModel)]=\"params.reason\" #topic=\"ngModel\" name=\"reason\">\r\n @for (t of types; track t) {\r\n <mat-option [value]=\"t.value\" [matTooltip]=\"t.name\">\r\n {{t.name}}\r\n </mat-option>\r\n}\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n\r\n <div class=\"section-title mat-body-3\">Documento modificato</div>\r\n <div class=\"section\">\r\n <p class=\"small\" style=\"line-height: 12px\"><i>Saranno visualizzati i documenti modificanti.</i>\r\n </p>\r\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between\" fxFill>\r\n <mat-form-field fxFlex=\"23\" fxFlex.xs=\"100\">\r\n <mat-label>Num. doc.</mat-label>\r\n <input matInput [(ngModel)]=\"params.changedNumber\" #changedNumber=\"ngModel\" name=\"changedNumber\"\r\n maxlength=\"10\" />\r\n @if (params.changedNumber) {\r\n<button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button\r\n aria-label=\"Pulisci\" (click)=\"params.changedNumber = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n}\r\n <mat-hint>Senza spazi</mat-hint>\r\n @if (changedNumber.invalid) {\r\n<mat-error>Spazi non validi.</mat-error>\r\n}\r\n </mat-form-field>\r\n <mat-form-field fxFlex=\"23\" fxFlex.xs=\"100\">\r\n <mat-label>Anno</mat-label>\r\n <input type=\"number\" min=\"1750\" matInput [(ngModel)]=\"params.changedYear\" #changedYear=\"ngModel\"\r\n name=\"changedYear\" maxlength=\"4\" />\r\n @if (params.changedYear) {\r\n<button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button\r\n aria-label=\"Pulisci\" (click)=\"params.changedYear = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n}\r\n <mat-hint>Dal 1750</mat-hint>\r\n </mat-form-field>\r\n <mat-form-field fxFlex=\"51\" fxFlex.xs=\"100\">\r\n <mat-label>Titolo</mat-label>\r\n <input matInput [(ngModel)]=\"params.changedTitle\" #changedTitle=\"ngModel\" name=\"changedTitle\"\r\n maxlength=\"10\" />\r\n @if (params.changedTitle) {\r\n<button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button\r\n aria-label=\"Pulisci\" (click)=\"params.changedTitle = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n}\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n\r\n <div class=\"section-title \">Documento modificante</div>\r\n <div class=\"section\">\r\n <p class=\"small\" style=\"line-height: 12px\">\r\n <i>Saranno visualizzati i documenti modificati, oppure solo i modificanti se \u00E8 stato specificato\r\n l'estremo del documento modificato.</i>\r\n </p>\r\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between\" fxFill>\r\n <mat-form-field fxFlex=\"23\" fxFlex.xs=\"100\">\r\n <mat-label>Num. doc.</mat-label>\r\n <input matInput [(ngModel)]=\"params.modifierNumber\" #modifierNumber=\"ngModel\" name=\"modifierNumber\"\r\n maxlength=\"10\" />\r\n @if (params.modifierNumber) {\r\n<button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button\r\n aria-label=\"Pulisci\" (click)=\"params.modifierNumber = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n}\r\n <mat-hint>Senza spazi</mat-hint>\r\n @if (modifierNumber.invalid) {\r\n<mat-error>Spazi non validi.</mat-error>\r\n}\r\n </mat-form-field>\r\n <mat-form-field fxFlex=\"23\" fxFlex.xs=\"100\">\r\n <mat-label>Anno</mat-label>\r\n <input type=\"number\" min=1750 matInput [(ngModel)]=\"params.modifierYear\" #modifierYear=\"ngModel\"\r\n name=\"modifierYear\" maxlength=\"4\" />\r\n @if (params.modifierYear) {\r\n<button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button\r\n aria-label=\"Pulisci\" (click)=\"params.modifierYear = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n}\r\n <mat-hint>Dal 1750</mat-hint>\r\n </mat-form-field>\r\n <mat-form-field fxFlex=\"51\" fxFlex.xs=\"100\">\r\n <mat-label>Titolo</mat-label>\r\n <input matInput [(ngModel)]=\"params.modifierTitle\" #modifierTitle=\"ngModel\" name=\"modifierTitle\"\r\n maxlength=\"10\" />\r\n @if (params.modifierTitle) {\r\n<button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button\r\n aria-label=\"Pulisci\" (click)=\"params.modifierTitle = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n}\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n </div>\r\n}\r\n </div>\r\n </form>\r\n</div>\r\n<div mat-dialog-actions>\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxFlex=\"30\">\r\n <button type=\"button\" mat-button (click)=\"clear()\" color=\"primary\">PULISCI</button>\r\n </div>\r\n <div fxFlex=\"70\" fxLayoutAlign=\"end\">\r\n <button mat-flat-button color=\"primary\" #okButton [disabled]=\"f.form.invalid\" (click)=\"ok()\">TROVA</button>\r\n <button mat-button [mat-dialog-close]=\"true\" color=\"primary\">CHIUDI</button>\r\n </div>\r\n </div>\r\n</div>", styles: [".dialog-info{font-size:x-small;text-align:right;margin:10px}.dialog-title{padding:0 24px}b{font-weight:700}.large{font-size:large!important;line-height:18px!important}.small{font-size:small!important;line-height:16px!important}.small-icon-button{width:1.5rem!important;height:1.5rem!important;padding:0!important;display:inline-flex!important;align-items:center;justify-content:center}.small-icon-button .mat-mdc-button-touch-target{width:1.5rem!important;height:1.5rem!important}.x-small{font-size:x-small!important;line-height:14px!important}.uppercase{text-transform:uppercase!important}.lowercase{text-transform:lowercase!important}.truncated{min-width:0}.truncated span,.truncated div{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.no-spaced{padding-top:0!important;padding-bottom:0!important}.spaced-column{padding-top:20px!important;padding-bottom:20px!important}.spaced-20{padding-bottom:20px!important}.section,.spaced-10{padding-bottom:10px!important}.spaced-5{padding-bottom:5px!important}.section-title{font-size:large;font-weight:500;padding-top:10px;padding-bottom:8px}.icon-small{transform:scale(.8)}.icon-menu-drop-down{padding-right:0!important;margin-right:0!important}.item{min-height:50px!important;border-bottom:1px dotted #eee!important;line-height:18px}.item:hover{background-color:#fff8e1}.item-cell{padding:5px 0}.item-line{padding-top:1px;padding-bottom:1px}.item-line .command a{text-decoration:none;color:#2a91e0;font-weight:500;cursor:pointer!important}.item-line .command a:hover{opacity:.7}.item-line>a{color:#2a91e0!important;opacity:1!important;cursor:pointer}.item-line>a:hover{opacity:.7!important}.item-line-1{font-weight:500;font-size:1em;color:#000}.item-line-2{font-size:.9em;color:#000}.item-line-3{font-size:.8em;color:#000}.item-line-4{font-size:.7em;color:#000}.item-line-block-title{font-size:.8em;font-weight:500}.item-line-block{margin-top:4px;margin-bottom:4px;margin-left:10px;padding-left:10px;border-left:2px solid #009688}.item-line-read{font-weight:400!important}.item-line-read .command,.item-line-read a{color:#2a91e0;cursor:pointer!important;opacity:1!important}.item-line-read .command:hover,.item-line-read a:hover{opacity:.7!important}.item-line-red-badge{background-color:red;color:#fff;padding:2px 4px;border-radius:3px;border:1px solid red}.items-group-title{line-height:24px;padding:20px 10px 10px 20px;font-weight:500;font-size:19.2px}.items-footer{padding-top:10px}.sidenav-title-container{min-height:64px!important;padding-left:15px;margin-bottom:4px}.sidenav-title{color:#009688;font-weight:500;font-size:19.2px}.item-greyed-1{color:#607d8b}.item-greyed-2{color:#90a4ae}.item-accent{color:#0d7066}.item-primary{color:#009688}.item-badge{margin-left:10px;margin-bottom:5px;padding:0 4px;height:12px;line-height:12px;border-radius:3px;font-size:x-small;font-weight:500;text-align:center;background-color:orange;color:#000}\n"] }]
|
|
316
|
+
], template: "<h2 mat-dialog-title>Ricerca</h2>\r\n<div mat-dialog-content>\r\n <form name=\"form\" #f=\"ngForm\" (keyup.Enter)=\"!f.form.invalid ? ok() : null\" novalidate>\r\n <div fxLayout=\"column\">\r\n <div fxFlexAlign=\"end\">\r\n @if (enableRead) {\r\n<div style=\"padding-bottom:10px\">\r\n <mat-checkbox color=\"primary\" name=\"showUnreadDocumentsOnly\" [(ngModel)]=\"params.showUnreadDocumentsOnly\">\r\n Mostra solo non letti</mat-checkbox>\r\n </div>\r\n}\r\n @if (enableComments) {\r\n<div style=\"padding-bottom:10px\">\r\n <mat-checkbox color=\"primary\" name=\"showCommentedDocumentsOnly\"\r\n [(ngModel)]=\"params.showCommentedDocumentsOnly\">\r\n Mostra solo norme con commenti</mat-checkbox>\r\n </div>\r\n}\r\n </div>\r\n @if (enableModel) {\r\n<mat-form-field>\r\n <mat-label>Tipo</mat-label>\r\n <mat-select [(ngModel)]=\"params.sector\" #sector=\"ngModel\" name=\"model\" (selectionChange)=\"sectorChanged()\">\r\n <mat-option>Tutti</mat-option>\r\n @for (m of models; track m) {\r\n <mat-option [value]=\"m.id\">\r\n {{m.name}}\r\n </mat-option>\r\n}\r\n </mat-select>\r\n </mat-form-field>\r\n}\r\n @if (enableSector) {\r\n<mat-form-field>\r\n <mat-label>Settore</mat-label>\r\n <mat-select [(ngModel)]=\"params.sector\" #sector=\"ngModel\" name=\"sector\" (selectionChange)=\"sectorChanged()\">\r\n <mat-option>Tutti</mat-option>\r\n @for (s of sectors; track s) {\r\n <mat-option [value]=\"s.id\">\r\n @if (s.group == 'A') {\r\n<span> </span>\r\n}\r\n {{s.name}}\r\n </mat-option>\r\n}\r\n </mat-select>\r\n </mat-form-field>\r\n}\r\n @if (enableAuthor && authors && authors.length > 0) {\r\n<mat-form-field>\r\n <mat-label>Autore</mat-label>\r\n <mat-select [(ngModel)]=\"params.author\" #sector=\"ngModel\" name=\"author\">\r\n <mat-option>Tutti</mat-option>\r\n @for (a of authors; track a) {\r\n <mat-option [value]=\"a.authorId\">\r\n {{a.authorDescription}}\r\n </mat-option>\r\n}\r\n </mat-select>\r\n </mat-form-field>\r\n}\r\n @if (enableTopic && topics && topics.length > 0) {\r\n<mat-form-field>\r\n <mat-label>Argomento</mat-label>\r\n <mat-select [(ngModel)]=\"params.topic\" #topic=\"ngModel\" name=\"topic\">\r\n <mat-option>Tutti</mat-option>\r\n @for (t of topics; track t) {\r\n <mat-option [value]=\"t.value\" [matTooltip]=\"t.name\">\r\n <div [innerHtml]=\"t.title | safeHtml\"></div>\r\n </mat-option>\r\n}\r\n </mat-select>\r\n </mat-form-field>\r\n}\r\n @if (enableTaxonomy) {\r\n<mat-form-field>\r\n <mat-label>Argomento</mat-label>\r\n <input matInput [(ngModel)]=\"params.taxonomyNode\" readonly name=\"taxonomy\" />\r\n @if (params.taxonomyNode) {\r\n<button type=\"button\" tabindex=\"-1\" mat-icon-button matSuffix aria-label=\"Azzera\"\r\n (click)=\"params.taxonomy = null; params.taxonomyNode = null; params.taxonomyPath = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n}\r\n <button type=\"button\" mat-icon-button matSuffix aria-label=\"Scegli\" matTooltip=\"Scegli\"\r\n (click)=\"selectTaxonomy()\">\r\n <mat-icon>search</mat-icon>\r\n </button>\r\n @if (params.taxonomyNode) {\r\n<mat-hint align=\"start\" class=\"truncated lowercase\">\r\n <div>{{params.taxonomyPath}}</div>\r\n </mat-hint>\r\n}\r\n </mat-form-field>\r\n}\r\n @if (enableType) {\r\n<mat-form-field>\r\n <mat-label>Tipo</mat-label>\r\n <mat-select [(ngModel)]=\"params.type\" #topic=\"ngModel\" name=\"type\">\r\n <mat-option>Tutti</mat-option>\r\n @for (t of types; track t) {\r\n <mat-option [value]=\"t.documentTypeId\" [matTooltip]=\"t.documentTypeDescription\">\r\n {{t.documentTypeDescription}}\r\n </mat-option>\r\n}\r\n </mat-select>\r\n </mat-form-field>\r\n}\r\n @if (enableText) {\r\n<mat-form-field>\r\n <mat-label>Testo</mat-label>\r\n <input matInput name=\"text\" #text [(ngModel)]=\"params.text\" maxlength=\"200\" />\r\n @if (params.text) {\r\n<button type=\"button\" tabindex=\"-1\" mat-icon-button matSuffix aria-label=\"Azzera\"\r\n (click)=\"params.text = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n}\r\n <button fxHide.xs type=\"button\" mat-icon-button matSuffix aria-label=\"Componi\" matTooltip=\"Componi\"\r\n (click)=\"text.focus(); compose()\">\r\n <mat-icon>build</mat-icon>\r\n </button>\r\n <button fxHide.xs type=\"button\" mat-icon-button matSuffix aria-label=\"Informazioni\"\r\n matTooltip=\"Come effettuare la ricerca in testo libero\" (click)=\"text.focus(); help()\">\r\n <mat-icon>help_outline</mat-icon>\r\n </button>\r\n </mat-form-field>\r\n}\r\n @if (enableText) {\r\n<div style=\"padding-bottom:10px\">\r\n <mat-checkbox color=\"primary\" [disabled]=\"!params.text\" name=\"titleOnly\"\r\n [(ngModel)]=\"params.titleOnly\">Cerca\r\n solo nel titolo</mat-checkbox>\r\n </div>\r\n}\r\n @if (enablePublication) {\r\n<div>\r\n <div class=\"section-title\">Pubblicazione</div>\r\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between\" fxFill>\r\n <mat-form-field fxFlex=\"49\" fxFlex.xs=\"100\">\r\n <mat-label>Intervallo</mat-label>\r\n <mat-date-range-input [rangePicker]=\"picker1\">\r\n <input matStartDate [(ngModel)]=\"interval.from\" [dateIntervalChange]=\"interval\" #rangeFrom1=\"ngModel\"\r\n name=\"rangeFrom1\" placeholder=\"Da data\">\r\n <input matEndDate [(ngModel)]=\"interval.to\" [dateIntervalChange]=\"interval\" [end]=\"true\"\r\n #rangeTo1=\"ngModel\" name=\"rangeTo1\" placeholder=\"A data\">\r\n </mat-date-range-input>\r\n @if (interval.from || interval.to) {\r\n<button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button\r\n aria-label=\"Pulisci\" (click)=\"interval.clear()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n}\r\n <mat-datepicker-toggle matSuffix [for]=\"picker1\"></mat-datepicker-toggle>\r\n <mat-date-range-picker #picker1></mat-date-range-picker>\r\n @if (rangeFrom1.invalid || rangeTo1.invalid) {\r\n<mat-error>Intervallo non valido.</mat-error>\r\n}\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n}\r\n @if (enableDocument) {\r\n<div>\r\n <div class=\"section-title\">Estremi documento</div>\r\n <div class=\"section\">\r\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between\" fxFill>\r\n <mat-form-field fxFlex=\"30\" fxFlex.xs=\"100\">\r\n <mat-label>Num. doc.</mat-label>\r\n <input matInput [(ngModel)]=\"params.number\" #number=\"ngModel\" name=\"number\" maxlength=\"10\" />\r\n @if (params.number) {\r\n<button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.number = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n}\r\n <mat-hint>Senza spazi</mat-hint>\r\n @if (number.invalid) {\r\n<mat-error>Spazi non validi.</mat-error>\r\n}\r\n </mat-form-field>\r\n <mat-form-field fxFlex=\"68\" fxFlex.xs=\"100\">\r\n <mat-label>Intervallo</mat-label>\r\n <mat-date-range-input [rangePicker]=\"picker2\">\r\n <input matStartDate [(ngModel)]=\"interval.from\" [dateIntervalChange]=\"interval\" #rangeFrom2=\"ngModel\"\r\n name=\"rangeFrom2\" placeholder=\"Da data\">\r\n <input matEndDate [(ngModel)]=\"interval.to\" [dateIntervalChange]=\"interval\" [end]=\"true\"\r\n #rangeTo2=\"ngModel\" name=\"rangeTo2\" placeholder=\"A data\">\r\n </mat-date-range-input>\r\n @if (interval.from || interval.to) {\r\n<button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button\r\n aria-label=\"Pulisci\" (click)=\"interval.clear()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n}\r\n <mat-datepicker-toggle matSuffix [for]=\"picker2\"></mat-datepicker-toggle>\r\n <mat-date-range-picker #picker2></mat-date-range-picker>\r\n @if (rangeFrom2.invalid || rangeTo2.invalid) {\r\n<mat-error>Intervallo non valido.</mat-error>\r\n}\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n </div>\r\n}\r\n @if (enableSource) {\r\n<div>\r\n <div class=\"section-title\">Fonte</div>\r\n <div class=\"section\">\r\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between\" fxFill>\r\n <mat-form-field fxFlex=\"30\" fxFlex.xs=\"100\">\r\n <mat-label>Num. doc.</mat-label>\r\n <input matInput [(ngModel)]=\"params.sourceNumber\" #sourceNumber=\"ngModel\" name=\"sourceNumber\"\r\n maxlength=\"10\" />\r\n @if (params.sourceNumber) {\r\n<button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button\r\n aria-label=\"Pulisci\" (click)=\"params.sourceNumber = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n}\r\n <mat-hint>Senza spazi</mat-hint>\r\n @if (sourceNumber.invalid) {\r\n<mat-error>Spazi non validi.</mat-error>\r\n}\r\n </mat-form-field>\r\n <mat-form-field fxFlex=\"68\" fxFlex.xs=\"100\">\r\n <mat-label>Intervallo</mat-label>\r\n <mat-date-range-input [rangePicker]=\"picker3\">\r\n <input matStartDate [(ngModel)]=\"sourceInterval.from\" [dateIntervalChange]=\"sourceInterval\"\r\n #rangeFrom3=\"ngModel\" name=\"rangeFrom3\" placeholder=\"Da data\">\r\n <input matEndDate [(ngModel)]=\"sourceInterval.to\" [dateIntervalChange]=\"sourceInterval\" [end]=\"true\"\r\n #rangeTo3=\"ngModel\" name=\"rangeTo3\" placeholder=\"A data\">\r\n </mat-date-range-input>\r\n @if (sourceInterval.from || sourceInterval.to) {\r\n<button type=\"button\" tabindex=\"-1\" matSuffix\r\n mat-icon-button aria-label=\"Pulisci\" (click)=\"sourceInterval.clear()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n}\r\n <mat-datepicker-toggle matSuffix [for]=\"picker3\"></mat-datepicker-toggle>\r\n <mat-date-range-picker #picker3></mat-date-range-picker>\r\n @if (rangeFrom3.invalid || rangeTo3.invalid) {\r\n<mat-error>Intervallo non valido.</mat-error>\r\n}\r\n </mat-form-field>\r\n </div>\r\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between\" fxFill>\r\n @if (sources && sources.length > 0) {\r\n<mat-form-field fxFlex=\"100\">\r\n <mat-label>Tipo fonte</mat-label>\r\n <mat-select [(ngModel)]=\"params.source\" #sector=\"ngModel\" name=\"source\">\r\n <mat-option>Tutti</mat-option>\r\n @for (s of sources; track s) {\r\n <mat-option [value]=\"s.id\">\r\n {{s.name}}\r\n </mat-option>\r\n}\r\n </mat-select>\r\n </mat-form-field>\r\n}\r\n </div>\r\n </div>\r\n </div>\r\n}\r\n @if (enableChanges) {\r\n<div>\r\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between\" fxFill>\r\n <mat-form-field fxFlex=\"49\" fxFlex.xs=\"100\">\r\n <mat-label>Motivo</mat-label>\r\n <mat-select [(ngModel)]=\"params.reason\" #topic=\"ngModel\" name=\"reason\">\r\n @for (t of types; track t) {\r\n <mat-option [value]=\"t.value\" [matTooltip]=\"t.name\">\r\n {{t.name}}\r\n </mat-option>\r\n}\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n\r\n <div class=\"section-title mat-body-3\">Documento modificato</div>\r\n <div class=\"section\">\r\n <p class=\"small\" style=\"line-height: 12px\"><i>Saranno visualizzati i documenti modificanti.</i>\r\n </p>\r\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between\" fxFill>\r\n <mat-form-field fxFlex=\"23\" fxFlex.xs=\"100\">\r\n <mat-label>Num. doc.</mat-label>\r\n <input matInput [(ngModel)]=\"params.changedNumber\" #changedNumber=\"ngModel\" name=\"changedNumber\"\r\n maxlength=\"10\" />\r\n @if (params.changedNumber) {\r\n<button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button\r\n aria-label=\"Pulisci\" (click)=\"params.changedNumber = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n}\r\n <mat-hint>Senza spazi</mat-hint>\r\n @if (changedNumber.invalid) {\r\n<mat-error>Spazi non validi.</mat-error>\r\n}\r\n </mat-form-field>\r\n <mat-form-field fxFlex=\"23\" fxFlex.xs=\"100\">\r\n <mat-label>Anno</mat-label>\r\n <input type=\"number\" min=\"1750\" matInput [(ngModel)]=\"params.changedYear\" #changedYear=\"ngModel\"\r\n name=\"changedYear\" maxlength=\"4\" />\r\n @if (params.changedYear) {\r\n<button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button\r\n aria-label=\"Pulisci\" (click)=\"params.changedYear = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n}\r\n <mat-hint>Dal 1750</mat-hint>\r\n </mat-form-field>\r\n <mat-form-field fxFlex=\"51\" fxFlex.xs=\"100\">\r\n <mat-label>Titolo</mat-label>\r\n <input matInput [(ngModel)]=\"params.changedTitle\" #changedTitle=\"ngModel\" name=\"changedTitle\"\r\n maxlength=\"10\" />\r\n @if (params.changedTitle) {\r\n<button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button\r\n aria-label=\"Pulisci\" (click)=\"params.changedTitle = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n}\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n\r\n <div class=\"section-title \">Documento modificante</div>\r\n <div class=\"section\">\r\n <p class=\"small\" style=\"line-height: 12px\">\r\n <i>Saranno visualizzati i documenti modificati, oppure solo i modificanti se \u00E8 stato specificato\r\n l'estremo del documento modificato.</i>\r\n </p>\r\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between\" fxFill>\r\n <mat-form-field fxFlex=\"23\" fxFlex.xs=\"100\">\r\n <mat-label>Num. doc.</mat-label>\r\n <input matInput [(ngModel)]=\"params.modifierNumber\" #modifierNumber=\"ngModel\" name=\"modifierNumber\"\r\n maxlength=\"10\" />\r\n @if (params.modifierNumber) {\r\n<button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button\r\n aria-label=\"Pulisci\" (click)=\"params.modifierNumber = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n}\r\n <mat-hint>Senza spazi</mat-hint>\r\n @if (modifierNumber.invalid) {\r\n<mat-error>Spazi non validi.</mat-error>\r\n}\r\n </mat-form-field>\r\n <mat-form-field fxFlex=\"23\" fxFlex.xs=\"100\">\r\n <mat-label>Anno</mat-label>\r\n <input type=\"number\" min=1750 matInput [(ngModel)]=\"params.modifierYear\" #modifierYear=\"ngModel\"\r\n name=\"modifierYear\" maxlength=\"4\" />\r\n @if (params.modifierYear) {\r\n<button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button\r\n aria-label=\"Pulisci\" (click)=\"params.modifierYear = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n}\r\n <mat-hint>Dal 1750</mat-hint>\r\n </mat-form-field>\r\n <mat-form-field fxFlex=\"51\" fxFlex.xs=\"100\">\r\n <mat-label>Titolo</mat-label>\r\n <input matInput [(ngModel)]=\"params.modifierTitle\" #modifierTitle=\"ngModel\" name=\"modifierTitle\"\r\n maxlength=\"10\" />\r\n @if (params.modifierTitle) {\r\n<button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button\r\n aria-label=\"Pulisci\" (click)=\"params.modifierTitle = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n}\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n </div>\r\n}\r\n </div>\r\n </form>\r\n</div>\r\n<div mat-dialog-actions>\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxFlex=\"30\">\r\n <button type=\"button\" mat-button (click)=\"clear()\" color=\"primary\">PULISCI</button>\r\n </div>\r\n <div fxFlex=\"70\" fxLayoutAlign=\"end\">\r\n <button mat-flat-button color=\"primary\" #okButton [disabled]=\"f.form.invalid\" (click)=\"ok()\">TROVA</button>\r\n <button mat-button [mat-dialog-close]=\"true\" color=\"primary\">CHIUDI</button>\r\n </div>\r\n </div>\r\n</div>", styles: [".dialog-info{font-size:x-small;text-align:right;margin:10px}.dialog-title{padding:0 24px}b{font-weight:700}.large{font-size:large!important;line-height:18px!important}.small{font-size:small!important;line-height:16px!important}.small-icon-button{width:1.5rem!important;height:1.5rem!important;padding:0!important;display:inline-flex!important;align-items:center;justify-content:center}.small-icon-button .mat-mdc-button-touch-target{width:1.5rem!important;height:1.5rem!important}.x-small{font-size:x-small!important;line-height:14px!important}.uppercase{text-transform:uppercase!important}.lowercase{text-transform:lowercase!important}.truncated{min-width:0}.truncated span,.truncated div{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.no-spaced{padding-top:0!important;padding-bottom:0!important}.spaced-column{padding-top:20px!important;padding-bottom:20px!important}.spaced-20{padding-bottom:20px!important}.section,.spaced-10{padding-bottom:10px!important}.spaced-5{padding-bottom:5px!important}.section-title{font-size:large;font-weight:500;padding-top:10px;padding-bottom:8px}.icon-small{transform:scale(.8)}.icon-menu-drop-down{padding-right:0!important;margin-right:0!important}.item{min-height:50px!important;border-bottom:1px dotted #eee!important;line-height:18px}.item:hover{background-color:#fff8e1}.item-cell{padding:5px 0}.item-line{padding-top:1px;padding-bottom:1px}.item-line .command a{text-decoration:none;color:#2a91e0;font-weight:500;cursor:pointer!important}.item-line .command a:hover{opacity:.7}.item-line>a{color:#2a91e0!important;opacity:1!important;cursor:pointer}.item-line>a:hover{opacity:.7!important}.item-line-1{font-weight:500;font-size:1em;color:#000}.item-line-2{font-size:.9em;color:#000}.item-line-3{font-size:.8em;color:#000}.item-line-4{font-size:.7em;color:#000}.item-line-block-title{font-size:.8em;font-weight:500}.item-line-block{margin-top:4px;margin-bottom:4px;margin-left:10px;padding-left:10px;border-left:2px solid #009688}.item-line-read{font-weight:400!important}.item-line-read .command,.item-line-read a{color:#2a91e0;cursor:pointer!important;opacity:1!important}.item-line-read .command:hover,.item-line-read a:hover{opacity:.7!important}.item-line-red-badge{background-color:red;color:#fff;padding:2px 4px;border-radius:3px;border:1px solid red}.items-group-title{line-height:24px;padding:20px 10px 10px 20px;font-weight:500;font-size:19.2px}.items-footer{padding-top:10px}.sidenav-title-container{min-height:64px!important;padding-left:15px;margin-bottom:4px}.sidenav-title{color:#009688;font-weight:500;font-size:19.2px}.item-greyed-1{color:#607d8b}.item-greyed-2{color:#90a4ae}.item-accent{color:#0d7066}.item-primary{color:#009688}.item-badge{margin-left:10px;margin-bottom:5px;padding:0 4px;height:12px;line-height:12px;border-radius:3px;font-size:x-small;font-weight:500;text-align:center;background-color:orange;color:#000}\n"] }]
|
|
317
317
|
}], ctorParameters: () => [{ type: i1.ApplicationDialogService }, { type: i2.ClipperService }, { type: i3.MatDialog }, { type: undefined, decorators: [{
|
|
318
318
|
type: Inject,
|
|
319
319
|
args: [MAT_DIALOG_DATA]
|
|
@@ -323,4 +323,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImpor
|
|
|
323
323
|
}], done: [{
|
|
324
324
|
type: Output
|
|
325
325
|
}] } });
|
|
326
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLWRpYWxvZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hcnMtdXRpbHMvY2xpcHBlci51aS91aS9zZWFyY2gtZGlhbG9nL3NlYXJjaC1kaWFsb2cuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJzLXV0aWxzL2NsaXBwZXIudWkvdWkvc2VhcmNoLWRpYWxvZy9zZWFyY2gtZGlhbG9nLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBVSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNGLE9BQU8sRUFBYSxlQUFlLEVBQUUsY0FBYyxFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzFJLE9BQU8sRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDeEUsT0FBTyxFQUNMLGtCQUFrQixFQUdsQixXQUFXLEVBQ1osTUFBTSx1Q0FBdUMsQ0FBQztBQUMvQyxPQUFPLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSwwREFBMEQsQ0FBQztBQUM5RyxPQUFPLEVBQUUsMENBQTBDLEVBQUUsTUFBTSw0RUFBNEUsQ0FBQztBQUN4SSxPQUFPLEVBQUUsK0NBQStDLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNwSCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDM0QsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDMUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVB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O0lBQ1AsQ0FBQzs4R0FoUlUsNEJBQTRCLGlIQWlDN0IsZUFBZTtrR0FqQ2QsNEJBQTRCLHlHQTlCckIsV0FBVyxDQUFDLFlBQVksRUFBRSxpQkFHL0I7WUFDUCwrQ0FBK0M7U0FDbEQsZ0lDbENMLHN3aUJBbVlNLDg0RkQ5VkUsY0FBYywrSEFDZCxnQkFBZ0Isd0dBQ2hCLFdBQVcsdWlEQUNYLFVBQVUsK2hHQUVWLGlCQUFpQiw2V0FDakIsa0JBQWtCLGdtQkFDbEIsZUFBZSxtckJBQ2YsZUFBZSw4QkFFZixnQkFBZ0IsNlRBQ2hCLGNBQWMsMldBQ2QsZUFBZSwwVUFDZixhQUFhLG9MQUNiLGNBQWMsbytCQUNkLG1CQUFtQiwwekJBQ25CLDJCQUEyQix3R0FDM0IsZ0JBQWdCLDRIQUNoQixjQUFjLGdMQUNkLFlBQVk7OzJGQUdQLDRCQUE0QjtrQkEvQnhDLFNBQVM7MkJBQ0EsRUFBRSxNQUFNLEVBQUUsV0FBVyxDQUFDLFlBQVksRUFBRSxFQUFFLGFBR2pDO3dCQUNQLCtDQUErQztxQkFDbEQsY0FDVyxJQUFJLFdBQ1A7d0JBQ0wsY0FBYzt3QkFDZCxnQkFBZ0I7d0JBQ2hCLFdBQVc7d0JBQ1gsVUFBVTt3QkFFVixpQkFBaUI7d0JBQ2pCLGtCQUFrQjt3QkFDbEIsZUFBZTt3QkFDZixlQUFlO3dCQUVmLGdCQUFnQjt3QkFDaEIsY0FBYzt3QkFDZCxlQUFlO3dCQUNmLGFBQWE7d0JBQ2IsY0FBYzt3QkFDZCxtQkFBbUI7d0JBQ25CLDJCQUEyQjt3QkFDM0IsZ0JBQWdCO3dCQUNoQixjQUFjO3dCQUNkLFlBQVk7cUJBQ2Y7OzBCQW1DQSxNQUFNOzJCQUFDLGVBQWU7eUNBaENGLFFBQVE7c0JBQTlCLFNBQVM7dUJBQUMsVUFBVTtnQkFDWCxJQUFJO3NCQUFiLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5qZWN0LCBPbkluaXQsIE91dHB1dCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1hdERpYWxvZywgTUFUX0RJQUxPR19EQVRBLCBNYXREaWFsb2dUaXRsZSwgTWF0RGlhbG9nQ29udGVudCwgTWF0RGlhbG9nQWN0aW9ucywgTWF0RGlhbG9nQ2xvc2UgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQgeyBEYXRlSW50ZXJ2YWwsIFN5c3RlbVV0aWxzIH0gZnJvbSAnQGFyc2VkaXppb25pL2Fycy11dGlscy9jb3JlJztcclxuaW1wb3J0IHtcclxuICBDbGlwcGVyRGVmaW5pdGlvbnMsXHJcbiAgQ2xpcHBlclNlcnZpY2UsXHJcbiAgQ2xpcHBlclNlYXJjaFBhcmFtcyxcclxuICBTZWFyY2hVdGlsc1xyXG59IGZyb20gJ0BhcnNlZGl6aW9uaS9hcnMtdXRpbHMvY2xpcHBlci5jb21tb24nO1xyXG5pbXBvcnQgeyBDbGlwcGVyU2VhcmNoRnJlZVRleHRIZWxwQ29tcG9uZW50IH0gZnJvbSAnLi4vc2VhcmNoLWZyZWUtdGV4dC1oZWxwL3NlYXJjaC1mcmVlLXRleHQtaGVscC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDbGlwcGVyU2VhcmNoRnJlZVRleHRRdWVyeUJ1aWxkZXJDb21wb25lbnQgfSBmcm9tICcuLi9zZWFyY2gtZnJlZS10ZXh0LXF1ZXJ5LWJ1aWxkZXIvc2VhcmNoLWZyZWUtdGV4dC1xdWVyeS1idWlsZGVyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IE1BVF9EQVRFUElDS0VSX1NDUk9MTF9TVFJBVEVHWV9GQUNUT1JZX1BST1ZJREVSLCBNYXREYXRlcGlja2VyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGF0ZXBpY2tlcic7XHJcbmltcG9ydCB7IFNhZmVIdG1sUGlwZSB9IGZyb20gJ0BhcnNlZGl6aW9uaS9hcnMtdXRpbHMvY29yZSc7XHJcbmltcG9ydCB7IERhdGVJbnRlcnZhbENoYW5nZURpcmVjdGl2ZSB9IGZyb20gJ0BhcnNlZGl6aW9uaS9hcnMtdXRpbHMvY29yZSc7XHJcbmltcG9ydCB7IEV4dGVuZGVkTW9kdWxlIH0gZnJvbSAnQG5nYnJhY2tldC9uZ3gtbGF5b3V0L2V4dGVuZGVkJztcclxuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xyXG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xyXG5pbXBvcnQgeyBNYXRJbnB1dE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2lucHV0JztcclxuaW1wb3J0IHsgTWF0VG9vbHRpcE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Rvb2x0aXAnO1xyXG5pbXBvcnQgeyBNYXRPcHRpb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jb3JlJztcclxuaW1wb3J0IHsgTWF0U2VsZWN0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2VsZWN0JztcclxuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XHJcbmltcG9ydCB7IE1hdENoZWNrYm94TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY2hlY2tib3gnO1xyXG5pbXBvcnQgeyBGbGV4TW9kdWxlIH0gZnJvbSAnQG5nYnJhY2tldC9uZ3gtbGF5b3V0L2ZsZXgnO1xyXG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgQXBwbGljYXRpb25EaWFsb2dTZXJ2aWNlIH0gZnJvbSAnQGFyc2VkaXppb25pL2Fycy11dGlscy91aS5hcHBsaWNhdGlvbic7XHJcblxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBob3N0OiB7ICdCaW5kJzogU3lzdGVtVXRpbHMuZ2VuZXJhdGVVVUlEKCkgfSxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9zZWFyY2gtZGlhbG9nLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL3NlYXJjaC1kaWFsb2cuY29tcG9uZW50LnNjc3MnXSxcclxuICAgIHByb3ZpZGVyczogW1xyXG4gICAgICAgIE1BVF9EQVRFUElDS0VSX1NDUk9MTF9TVFJBVEVHWV9GQUNUT1JZX1BST1ZJREVSXHJcbiAgICBdLFxyXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICAgIGltcG9ydHM6IFtcclxuICAgICAgICBNYXREaWFsb2dUaXRsZSxcclxuICAgICAgICBNYXREaWFsb2dDb250ZW50LFxyXG4gICAgICAgIEZvcm1zTW9kdWxlLFxyXG4gICAgICAgIEZsZXhNb2R1bGUsXHJcbiAgICAgICAgXHJcbiAgICAgICAgTWF0Q2hlY2tib3hNb2R1bGUsXHJcbiAgICAgICAgTWF0Rm9ybUZpZWxkTW9kdWxlLFxyXG4gICAgICAgIE1hdFNlbGVjdE1vZHVsZSxcclxuICAgICAgICBNYXRPcHRpb25Nb2R1bGUsXHJcbiAgICAgICAgXHJcbiAgICAgICAgTWF0VG9vbHRpcE1vZHVsZSxcclxuICAgICAgICBNYXRJbnB1dE1vZHVsZSxcclxuICAgICAgICBNYXRCdXR0b25Nb2R1bGUsXHJcbiAgICAgICAgTWF0SWNvbk1vZHVsZSxcclxuICAgICAgICBFeHRlbmRlZE1vZHVsZSxcclxuICAgICAgICBNYXREYXRlcGlja2VyTW9kdWxlLFxyXG4gICAgICAgIERhdGVJbnRlcnZhbENoYW5nZURpcmVjdGl2ZSxcclxuICAgICAgICBNYXREaWFsb2dBY3Rpb25zLFxyXG4gICAgICAgIE1hdERpYWxvZ0Nsb3NlLFxyXG4gICAgICAgIFNhZmVIdG1sUGlwZSxcclxuICAgIF0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDbGlwcGVyU2VhcmNoRGlhbG9nQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBAVmlld0NoaWxkKCdva0J1dHRvbicpIG9rQnV0dG9uITogSFRNTEJ1dHRvbkVsZW1lbnQ7XHJcbiAgQE91dHB1dCgpIGRvbmUgPSBuZXcgRXZlbnRFbWl0dGVyPENsaXBwZXJTZWFyY2hQYXJhbXM+KCk7XHJcblxyXG4gIHBhcmFtczogQ2xpcHBlclNlYXJjaFBhcmFtcztcclxuICBpbnRlcnZhbDogRGF0ZUludGVydmFsID0gbmV3IERhdGVJbnRlcnZhbCgpO1xyXG4gIG1vZGVsczogYW55O1xyXG4gIHNlY3RvcnM6IGFueTtcclxuICBzb3VyY2VzOiBhbnk7XHJcbiAgc291cmNlSW50ZXJ2YWw6IERhdGVJbnRlcnZhbCA9IG5ldyBEYXRlSW50ZXJ2YWwoKTtcclxuICB0b3BpY3M6IGFueTtcclxuICB0eXBlczogYW55O1xyXG4gIGF1dGhvcnM6IGFueTtcclxuICBlbmFibGVBdXRob3I6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBlbmFibGVUb3BpYzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGVuYWJsZVRheG9ub215OiBib29sZWFuID0gZmFsc2U7XHJcbiAgZW5hYmxlVHlwZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGVuYWJsZVRleHQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBlbmFibGVNb2RlbDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGVuYWJsZVNlY3RvcjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGVuYWJsZVNvdXJjZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGVuYWJsZURvY3VtZW50OiBib29sZWFuID0gZmFsc2U7XHJcbiAgZW5hYmxlRGVhZGxpbmU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBlbmFibGVQdWJsaWNhdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGVuYWJsZUNoYW5nZXM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBlbmFibGVSZWFkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgZW5hYmxlQ29tbWVudHM6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSAkZGlhbG9nOiBBcHBsaWNhdGlvbkRpYWxvZ1NlcnZpY2UsXHJcbiAgICBwcml2YXRlICRjbGlwcGVyOiBDbGlwcGVyU2VydmljZSxcclxuICAgIHB1YmxpYyBkaWFsb2c6IE1hdERpYWxvZyxcclxuICAgIEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBfZGF0YTogYW55XHJcbiAgKSB7XHJcbiAgICB0aGlzLmVuYWJsZVB1YmxpY2F0aW9uID0gX2RhdGEuZW5hYmxlUHVibGljYXRpb247XHJcbiAgICB0aGlzLmVuYWJsZURvY3VtZW50ID0gX2RhdGEuZW5hYmxlRG9jdW1lbnQ7XHJcbiAgICB0aGlzLmVuYWJsZURlYWRsaW5lID0gX2RhdGEuZW5hYmxlRGVhZGxpbmU7XHJcbiAgICB0aGlzLmVuYWJsZU1vZGVsID0gX2RhdGEuZW5hYmxlTW9kZWw7XHJcbiAgICB0aGlzLmVuYWJsZVNlY3RvciA9IF9kYXRhLmVuYWJsZVNlY3RvcjtcclxuICAgIHRoaXMuZW5hYmxlU291cmNlID0gX2RhdGEuZW5hYmxlU291cmNlO1xyXG4gICAgdGhpcy5lbmFibGVBdXRob3IgPSBfZGF0YS5lbmFibGVBdXRob3I7XHJcbiAgICB0aGlzLmVuYWJsZVRvcGljID0gX2RhdGEuZW5hYmxlVG9waWM7XHJcbiAgICB0aGlzLmVuYWJsZVRheG9ub215ID0gX2RhdGEuZW5hYmxlVGF4b25vbXk7XHJcbiAgICB0aGlzLmVuYWJsZVR5cGUgPSBfZGF0YS5lbmFibGVUeXBlO1xyXG4gICAgdGhpcy5lbmFibGVUZXh0ID0gX2RhdGEuZW5hYmxlVGV4dDtcclxuICAgIHRoaXMuZW5hYmxlQ2hhbmdlcyA9IF9kYXRhLmVuYWJsZUNoYW5nZXM7XHJcbiAgICB0aGlzLmVuYWJsZUNvbW1lbnRzID0gX2RhdGEuZW5hYmxlQ29tbWVudHM7XHJcbiAgICB0aGlzLmVuYWJsZVJlYWQgPSB0cnVlO1xyXG4gICAgdGhpcy5wYXJhbXMgPSB7XHJcbiAgICAgIHNob3dVbnJlYWREb2N1bWVudHNPbmx5OiBfZGF0YS5wYXJhbXMuc2hvd1VucmVhZERvY3VtZW50c09ubHksXHJcbiAgICAgIHNob3dDb21tZW50ZWREb2N1bWVudHNPbmx5OiBfZGF0YS5wYXJhbXMuc2hvd0NvbW1lbnRlZERvY3VtZW50c09ubHksXHJcbiAgICAgIGNvdW50OiAyNSxcclxuICAgICAgZmlyc3Q6IDBcclxuICAgIH07XHJcbiAgICB0aGlzLnBhcmFtcy50ZXh0ID0gX2RhdGEucGFyYW1zLnRleHQ7XHJcbiAgICB0aGlzLnBhcmFtcy50aXRsZU9ubHkgPSBfZGF0YS5wYXJhbXMudGl0bGVPbmx5O1xyXG4gICAgaWYgKHRoaXMuZW5hYmxlU2VjdG9yKSB7XHJcbiAgICAgIHRoaXMucGFyYW1zLnNlY3RvciA9IF9kYXRhLnBhcmFtcy5zZWN0b3I7XHJcbiAgICAgIGlmIChfZGF0YS5zZWN0b3JzKSB0aGlzLnNlY3RvcnMgPSBfZGF0YS5zZWN0b3JzO1xyXG4gICAgICBlbHNlIHRoaXMuc2VjdG9ycyA9IENsaXBwZXJEZWZpbml0aW9ucy5TRUNUT1JTO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZW5hYmxlQXV0aG9yKSB0aGlzLnBhcmFtcy5hdXRob3IgPSBfZGF0YS5wYXJhbXMuYXV0aG9yO1xyXG4gICAgaWYgKHRoaXMuZW5hYmxlTW9kZWwpIHtcclxuICAgICAgdGhpcy5tb2RlbHMgPSBfZGF0YS5tb2RlbHM7XHJcbiAgICAgIHRoaXMucGFyYW1zLnNlY3RvciA9IF9kYXRhLnBhcmFtcy5zZWN0b3I7IC8vIFVzZSBzZWN0b3IgYXMgdmFsdWUgYW5kIG5vdCBtb2RlbFxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZW5hYmxlRG9jdW1lbnQpIHRoaXMucGFyYW1zLm51bWJlciA9IF9kYXRhLnBhcmFtcy5udW1iZXI7XHJcbiAgICBpZiAodGhpcy5lbmFibGVEb2N1bWVudCB8fCB0aGlzLmVuYWJsZVB1YmxpY2F0aW9uKSB7XHJcbiAgICAgIGlmIChfZGF0YS5wYXJhbXMuZnJvbURhdGUpIHRoaXMuaW50ZXJ2YWwuZnJvbSA9IF9kYXRhLnBhcmFtcy5mcm9tRGF0ZTtcclxuICAgICAgaWYgKF9kYXRhLnBhcmFtcy50b0RhdGUpIHRoaXMuaW50ZXJ2YWwudG8gPSBfZGF0YS5wYXJhbXMudG9EYXRlO1xyXG5cclxuICAgIH1cclxuICAgIGlmICh0aGlzLmVuYWJsZVRvcGljKSB0aGlzLnBhcmFtcy50b3BpYyA9IF9kYXRhLnBhcmFtcy50b3BpYztcclxuICAgIGlmICh0aGlzLmVuYWJsZVRheG9ub215KSB7XHJcbiAgICAgIHRoaXMucGFyYW1zLnRheG9ub215ID0gX2RhdGEucGFyYW1zLnRheG9ub215O1xyXG4gICAgICB0aGlzLnBhcmFtcy50YXhvbm9teVBhdGggPSBfZGF0YS5wYXJhbXMudGF4b25vbXlQYXRoO1xyXG4gICAgICB0aGlzLnBhcmFtcy50YXhvbm9teU5vZGUgPSBfZGF0YS5wYXJhbXMudGF4b25vbXlOb2RlO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZW5hYmxlVHlwZSkge1xyXG4gICAgICB0aGlzLnR5cGVzID0gQ2xpcHBlckRlZmluaXRpb25zLlNFQ1RPUl9UWVBFUztcclxuICAgICAgdGhpcy5wYXJhbXMudHlwZSA9IF9kYXRhLnBhcmFtcy50eXBlO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZW5hYmxlU291cmNlKSB7XHJcbiAgICAgIHRoaXMuc291cmNlcyA9IENsaXBwZXJEZWZpbml0aW9ucy5TT1VSQ0VTO1xyXG4gICAgICB0aGlzLnBhcmFtcy5zb3VyY2UgPSBfZGF0YS5wYXJhbXMuc291cmNlO1xyXG4gICAgICB0aGlzLnBhcmFtcy5zb3VyY2VOdW1iZXIgPSBfZGF0YS5wYXJhbXMuc291cmNlTnVtYmVyO1xyXG4gICAgICBpZiAoX2RhdGEucGFyYW1zLnNvdXJjZUZyb21EYXRlKVxyXG4gICAgICAgIHRoaXMuc291cmNlSW50ZXJ2YWwuZnJvbSA9IF9kYXRhLnBhcmFtcy5zb3VyY2VGcm9tRGF0ZTtcclxuICAgICAgaWYgKF9kYXRhLnBhcmFtcy5zb3VyY2VUb0RhdGUpXHJcbiAgICAgICAgdGhpcy5zb3VyY2VJbnRlcnZhbC50byA9IF9kYXRhLnBhcmFtcy5zb3VyY2VUb0RhdGU7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5lbmFibGVDaGFuZ2VzKSB7XHJcbiAgICAgIHRoaXMudHlwZXMgPSBfZGF0YS5jaGFuZ2VSZWFzb25zO1xyXG4gICAgICB0aGlzLnBhcmFtcy5yZWFzb24gPSBfZGF0YS5wYXJhbXMucmVhc29uO1xyXG4gICAgICB0aGlzLnBhcmFtcy5jaGFuZ2VkTnVtYmVyID0gX2RhdGEucGFyYW1zLmNoYW5nZWROdW1iZXI7XHJcbiAgICAgIHRoaXMucGFyYW1zLmNoYW5nZWRZZWFyID0gX2RhdGEucGFyYW1zLmNoYW5nZWRZZWFyO1xyXG4gICAgICB0aGlzLnBhcmFtcy5jaGFuZ2VkVGl0bGUgPSBfZGF0YS5wYXJhbXMuY2hhbmdlZFRpdGxlO1xyXG4gICAgICB0aGlzLnBhcmFtcy5tb2RpZmllck51bWJlciA9IF9kYXRhLnBhcmFtcy5tb2RpZmllck51bWJlcjtcclxuICAgICAgdGhpcy5wYXJhbXMubW9kaWZpZXJZZWFyID0gX2RhdGEucGFyYW1zLm1vZGlmaWVyWWVhcjtcclxuICAgICAgdGhpcy5wYXJhbXMubW9kaWZpZXJUaXRsZSA9IF9kYXRhLnBhcmFtcy5tb2RpZmllclRpdGxlO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZW5hYmxlRGVhZGxpbmUpIHtcclxuICAgICAgdGhpcy50eXBlcyA9IF9kYXRhLmRlYWRsaW5lcztcclxuICAgICAgdGhpcy5wYXJhbXMudHlwZSA9IF9kYXRhLnBhcmFtcy50eXBlO1xyXG4gICAgfVxyXG4gICAgaWYgKCF0aGlzLmVuYWJsZVJlYWQgPT09IGZhbHNlKVxyXG4gICAgICB0aGlzLmVuYWJsZVJlYWQgPSBmYWxzZTtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5wYXJhbXMubW9kZWwgPT09IENsaXBwZXJEZWZpbml0aW9ucy5ETV9TQ0FERU5aQV9TRUdOQUxBWklPTkUgfHxcclxuICAgICAgdGhpcy5wYXJhbXMubW9kZWwgPT09IENsaXBwZXJEZWZpbml0aW9ucy5ETV9OT1JNQVRJVkFfVklHRU5URSB8fFxyXG4gICAgICB0aGlzLnBhcmFtcy5tb2RlbCA9PT0gQ2xpcHBlckRlZmluaXRpb25zLkRNX01FVE9ESV9BTkFMSVNJXHJcbiAgICApXHJcbiAgICAgIHRoaXMuZW5hYmxlUmVhZCA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLmF1dGhvcnMgPSBbXTtcclxuXHJcbiAgICBpZiAodGhpcy5lbmFibGVUb3BpYykge1xyXG4gICAgICBpZiAoIXRoaXMuJGNsaXBwZXIubG9nZ2VkSW4pIHJldHVybjtcclxuICAgICAgLy8gTG9hZCB0b3BpY3NcclxuICAgICAgdGhpcy4kY2xpcHBlci5nZXRUb3BpY3MoKVxyXG4gICAgICAgIC5zdWJzY3JpYmUociA9PiB7XHJcbiAgICAgICAgICBpZiAoci5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIGxldCBuYW1lID0gJyc7XHJcbiAgICAgICAgICAgIHIudmFsdWUuZm9yRWFjaCgobjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgbmFtZSA9ICcnO1xyXG4gICAgICAgICAgICAgIChuLnZhbHVlLm1hdGNoKC8uL2cpIHx8IFtdKS5mb3JFYWNoKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIG5hbWUgKz0gJyZuYnNwOyZuYnNwOyc7XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgbmFtZSArPSBuLnZhbHVlICsgJyAtICcgKyBuLm5hbWU7XHJcbiAgICAgICAgICAgICAgbi50aXRsZSA9IG5hbWU7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB0aGlzLnRvcGljcyA9IHIudmFsdWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuZW5hYmxlQXV0aG9yICYmIHRoaXMucGFyYW1zLnNlY3RvcikgdGhpcy5zZWN0b3JDaGFuZ2VkKCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlIGF1dGhvcnMgd2hlbiBzZWxlY3RlZCBzZWN0b3JzIGNoYW5nZWRcclxuICAgKi9cclxuICBzZWN0b3JDaGFuZ2VkKCkge1xyXG4gICAgaWYgKHRoaXMuZW5hYmxlQXV0aG9yKSB7XHJcbiAgICAgIGxldCBhdXRob3JzOiBhbnkgPSBbXTtcclxuICAgICAgaWYgKHRoaXMucGFyYW1zLnNlY3Rvcikge1xyXG4gICAgICAgIENsaXBwZXJEZWZpbml0aW9ucy5TRUNUT1JfQVVUSE9SUy5mb3JFYWNoKChuOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChuLnNlY3RvcklkID09PSB0aGlzLnBhcmFtcy5zZWN0b3IpIGF1dGhvcnMucHVzaChuKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmF1dGhvcnMgPSBhdXRob3JzO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmVuYWJsZVR5cGUpIHtcclxuICAgICAgaWYgKHRoaXMucGFyYW1zLnNlY3Rvcikge1xyXG4gICAgICAgIGxldCB0eXBlczogYW55ID0gW107XHJcbiAgICAgICAgQ2xpcHBlckRlZmluaXRpb25zLlNFQ1RPUl9UWVBFUy5mb3JFYWNoKChuOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChuLnNlY3RvcklkID09PSB0aGlzLnBhcmFtcy5zZWN0b3IpIHR5cGVzLnB1c2gobik7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy50eXBlcyA9IHR5cGVzO1xyXG4gICAgICB9IGVsc2UgdGhpcy50eXBlcyA9IENsaXBwZXJEZWZpbml0aW9ucy5TRUNUT1JfVFlQRVM7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDbGVhciBzZWFyY2hcclxuICAgKi9cclxuICBjbGVhcigpIHtcclxuICAgIFNlYXJjaFV0aWxzLmNsZWFyKHRoaXMucGFyYW1zKTtcclxuICAgIHRoaXMuaW50ZXJ2YWwuY2xlYXIoKTtcclxuICAgIHRoaXMuc291cmNlSW50ZXJ2YWwuY2xlYXIoKTtcclxuICAgIHRoaXMuc2VjdG9yQ2hhbmdlZCgpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4gKiBTaG93IGZyZWUgdGV4dCBoZWxwXHJcbiAqL1xyXG4gIGhlbHAoKSB7XHJcbiAgICB0aGlzLiRkaWFsb2cub3BlbihDbGlwcGVyU2VhcmNoRnJlZVRleHRIZWxwQ29tcG9uZW50LCB7XHJcbiAgICAgIGFyaWFMYWJlbDogJ2luZm9ybWF6aW9uaSByaWNlcmNhJyxcclxuICAgICAgYXV0b0ZvY3VzOiBmYWxzZSxcclxuICAgICAgcmVzdG9yZUZvY3VzOiB0cnVlLFxyXG4gICAgICBkaXNhYmxlQ2xvc2U6IGZhbHNlLFxyXG4gICAgICBtaW5XaWR0aDogJzM3NXB4JyxcclxuICAgICAgbWF4V2lkdGg6ICc4MDBweCcsXHJcbiAgICAgIHdpZHRoOiAnOTklJyxcclxuICAgIH0pO1xyXG5cclxuICB9XHJcbiAgLyoqXHJcbiAgICogQ29tcG9zZSBhIGZyZWUgdGV4dCBzZWFyY2ggcXVlcnlcclxuICAgKi9cclxuICBjb21wb3NlKCkge1xyXG4gICAgbGV0IGQgPSB0aGlzLiRkaWFsb2cub3BlbihDbGlwcGVyU2VhcmNoRnJlZVRleHRRdWVyeUJ1aWxkZXJDb21wb25lbnQsIHtcclxuICAgICAgYXJpYUxhYmVsOiAnY29zdHJ1aXNjaSByaWNlcmNhJyxcclxuICAgICAgYXV0b0ZvY3VzOiBmYWxzZSxcclxuICAgICAgcmVzdG9yZUZvY3VzOiB0cnVlLFxyXG4gICAgICBkaXNhYmxlQ2xvc2U6IGZhbHNlLFxyXG4gICAgICBtaW5XaWR0aDogJzM3NXB4JyxcclxuICAgICAgbWF4V2lkdGg6ICc2MDBweCcsXHJcbiAgICAgIHdpZHRoOiAnOTklJ1xyXG4gICAgfSk7XHJcbiAgICBkLmNvbXBvbmVudEluc3RhbmNlLmRvbmVcclxuICAgICAgLnN1YnNjcmliZSgocjogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5wYXJhbXMudGV4dCA9IHIucXVlcnk7XHJcblxyXG4gICAgICAgIC8vIEZpbmlzaGVkXHJcbiAgICAgICAgZC5jbG9zZSgpO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFN1Ym1pdCBzZWFyY2hcclxuICAgKi9cclxuICBvaygpIHtcclxuICAgIHRoaXMub2tCdXR0b24uZm9jdXMoKTtcclxuICAgIGlmICh0aGlzLnBhcmFtcy50ZXh0KVxyXG4gICAgICB0aGlzLnBhcmFtcy50ZXh0ID0gU2VhcmNoVXRpbHMubm9ybWFsaXplVGV4dFF1ZXJ5KHRoaXMucGFyYW1zLnRleHQpO1xyXG4gICAgaWYgKHRoaXMuaW50ZXJ2YWwpIHtcclxuICAgICAgdGhpcy5wYXJhbXMuZnJvbURhdGUgPSB0aGlzLmludGVydmFsLmZyb207XHJcbiAgICAgIHRoaXMucGFyYW1zLnRvRGF0ZSA9IHRoaXMuaW50ZXJ2YWwudG87XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5zb3VyY2VJbnRlcnZhbCkge1xyXG4gICAgICB0aGlzLnBhcmFtcy5zb3VyY2VGcm9tRGF0ZSA9IHRoaXMuc291cmNlSW50ZXJ2YWwuZnJvbTtcclxuICAgICAgdGhpcy5wYXJhbXMuc291cmNlVG9EYXRlID0gdGhpcy5zb3VyY2VJbnRlcnZhbC50bztcclxuICAgIH1cclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAvLyBOb3RpZnlcclxuICAgICAgdGhpcy5kb25lLmVtaXQodGhpcy5wYXJhbXMpO1xyXG4gICAgfSwgNTAwKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNlbGVjdCBhIHRheG9ub215IHRvcGljXHJcbiAgICovXHJcbiAgc2VsZWN0VGF4b25vbXkoKSB7XHJcbiAgICBpZiAoIXRoaXMuJGNsaXBwZXIubG9nZ2VkSW4pIHJldHVybjtcclxuICAgIGxldCBwYXJhbXMgPSBudWxsO1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLnBhcmFtcy5tb2RlbCA9PT0gQ2xpcHBlckRlZmluaXRpb25zLkRNX0dVSURBIHx8XHJcbiAgICAgIHRoaXMucGFyYW1zLm1vZGVsID09PSBDbGlwcGVyRGVmaW5pdGlvbnMuRE1fR1VJREFfTk9STUFUSVZBIHx8XHJcbiAgICAgIHRoaXMucGFyYW1zLm1vZGVsID09PSBDbGlwcGVyRGVmaW5pdGlvbnMuRE1fU0NIRURBX0FERU1QSU1FTlRJXHJcbiAgICApIHtcclxuICAgICAgcGFyYW1zID0geyBtb2RlbDogQ2xpcHBlckRlZmluaXRpb25zLkRNX0dVSURBLCBjb3VudEl0ZW1zOiB0cnVlIH07XHJcbiAgICB9XHJcbiAgICB0aGlzLiRkaWFsb2cuYnVzeSgnQ2FyaWNhbWVudG8gaW4gY29yc28uLi4nKTtcclxuICAgIHRoaXMuJGNsaXBwZXIuZ2V0VGF4b25vbXkocGFyYW1zKVxyXG4gICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiByID0+IHtcclxuICAgICAgICAgIHRoaXMuJGRpYWxvZ1xyXG4gICAgICAgICAgICAuc2VsZWN0VHJlZShcclxuICAgICAgICAgICAgICB0aGlzLiRjbGlwcGVyLnRvTm9kZXMoci52YWx1ZS5zdWJGb2xkZXJzKSxcclxuICAgICAgICAgICAgICAnU2VsZXppb25hIHVuIGFyZ29tZW50bycsXHJcbiAgICAgICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICAgICB0aGlzLnBhcmFtcy50YXhvbm9teU5vZGVcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAuY29tcG9uZW50SW5zdGFuY2UuZG9uZS5zdWJzY3JpYmUociA9PiB7XHJcbiAgICAgICAgICAgICAgbGV0IG4gPSByLnNlbGVjdGVkSXRlbXNbMF0uYmFnO1xyXG4gICAgICAgICAgICAgIHRoaXMucGFyYW1zLnRheG9ub215ID0gbi5pZDtcclxuICAgICAgICAgICAgICB0aGlzLnBhcmFtcy50YXhvbm9teVBhdGggPSBuLnBhdGg7XHJcbiAgICAgICAgICAgICAgdGhpcy5wYXJhbXMudGF4b25vbXlOb2RlID0gbi5uYW1lO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNvbXBsZXRlOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLiRkaWFsb2cuY2xlYXJCdXN5KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcbn1cclxuIiwiPGgyIG1hdC1kaWFsb2ctdGl0bGU+UmljZXJjYTwvaDI+XHJcbjxkaXYgbWF0LWRpYWxvZy1jb250ZW50PlxyXG4gIDxmb3JtIG5hbWU9XCJmb3JtXCIgI2Y9XCJuZ0Zvcm1cIiAoa2V5dXAuRW50ZXIpPVwiIWYuZm9ybS5pbnZhbGlkID8gb2soKSA6IG51bGxcIiBub3ZhbGlkYXRlPlxyXG4gICAgPGRpdiBmeExheW91dD1cImNvbHVtblwiPlxyXG4gICAgICA8ZGl2IGZ4RmxleEFsaWduPVwiZW5kXCI+XHJcbiAgICAgICAgQGlmIChlbmFibGVSZWFkKSB7XHJcbjxkaXYgY2xhc3M9XCJzcGFjZWQtYm90dG9tLTEwXCI+XHJcbiAgICAgICAgICA8bWF0LWNoZWNrYm94IGNvbG9yPVwicHJpbWFyeVwiIG5hbWU9XCJzaG93VW5yZWFkRG9jdW1lbnRzT25seVwiIFsobmdNb2RlbCldPVwicGFyYW1zLnNob3dVbnJlYWREb2N1bWVudHNPbmx5XCI+XHJcbiAgICAgICAgICAgIE1vc3RyYSBzb2xvIG5vbiBsZXR0aTwvbWF0LWNoZWNrYm94PlxyXG4gICAgICAgIDwvZGl2PlxyXG59XHJcbiAgICAgICAgQGlmIChlbmFibGVDb21tZW50cykge1xyXG48ZGl2IGNsYXNzPVwic3BhY2VkLWJvdHRvbS0xMFwiPlxyXG4gICAgICAgICAgPG1hdC1jaGVja2JveCBjb2xvcj1cInByaW1hcnlcIiBuYW1lPVwic2hvd0NvbW1lbnRlZERvY3VtZW50c09ubHlcIlxyXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cInBhcmFtcy5zaG93Q29tbWVudGVkRG9jdW1lbnRzT25seVwiPlxyXG4gICAgICAgICAgICBNb3N0cmEgc29sbyBub3JtZSBjb24gY29tbWVudGk8L21hdC1jaGVja2JveD5cclxuICAgICAgICA8L2Rpdj5cclxufVxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgQGlmIChlbmFibGVNb2RlbCkge1xyXG48bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgPG1hdC1sYWJlbD5UaXBvPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgPG1hdC1zZWxlY3QgWyhuZ01vZGVsKV09XCJwYXJhbXMuc2VjdG9yXCIgI3NlY3Rvcj1cIm5nTW9kZWxcIiBuYW1lPVwibW9kZWxcIiAoc2VsZWN0aW9uQ2hhbmdlKT1cInNlY3RvckNoYW5nZWQoKVwiPlxyXG4gICAgICAgICAgPG1hdC1vcHRpb24+VHV0dGk8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICBAZm9yIChtIG9mIG1vZGVsczsgdHJhY2sgbSkge1xyXG4gIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCJtLmlkXCI+XHJcbiAgICAgICAgICAgIHt7bS5uYW1lfX1cclxuICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxufVxyXG4gICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxufVxyXG4gICAgICBAaWYgKGVuYWJsZVNlY3Rvcikge1xyXG48bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgPG1hdC1sYWJlbD5TZXR0b3JlPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgPG1hdC1zZWxlY3QgWyhuZ01vZGVsKV09XCJwYXJhbXMuc2VjdG9yXCIgI3NlY3Rvcj1cIm5nTW9kZWxcIiBuYW1lPVwic2VjdG9yXCIgKHNlbGVjdGlvbkNoYW5nZSk9XCJzZWN0b3JDaGFuZ2VkKClcIj5cclxuICAgICAgICAgIDxtYXQtb3B0aW9uPlR1dHRpPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgQGZvciAocyBvZiBzZWN0b3JzOyB0cmFjayBzKSB7XHJcbiAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cInMuaWRcIj5cclxuICAgICAgICAgICAgQGlmIChzLmdyb3VwID09ICdBJykge1xyXG48c3Bhbj4mbmJzcDsmbmJzcDs8L3NwYW4+XHJcbn1cclxuICAgICAgICAgICAge3tzLm5hbWV9fVxyXG4gICAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG59XHJcbiAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG59XHJcbiAgICAgIEBpZiAoZW5hYmxlQXV0aG9yICYmIGF1dGhvcnMgJiYgYXV0aG9ycy5sZW5ndGggPiAwKSB7XHJcbjxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICA8bWF0LWxhYmVsPkF1dG9yZTwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDxtYXQtc2VsZWN0IFsobmdNb2RlbCldPVwicGFyYW1zLmF1dGhvclwiICNzZWN0b3I9XCJuZ01vZGVsXCIgbmFtZT1cImF1dGhvclwiPlxyXG4gICAgICAgICAgPG1hdC1vcHRpb24+VHV0dGk8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICBAZm9yIChhIG9mIGF1dGhvcnM7IHRyYWNrIGEpIHtcclxuICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwiYS5hdXRob3JJZFwiPlxyXG4gICAgICAgICAgICB7e2EuYXV0aG9yRGVzY3JpcHRpb259fVxyXG4gICAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG59XHJcbiAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG59XHJcbiAgICAgIEBpZiAoZW5hYmxlVG9waWMgJiYgdG9waWNzICYmIHRvcGljcy5sZW5ndGggPiAwKSB7XHJcbjxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICA8bWF0LWxhYmVsPkFyZ29tZW50bzwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDxtYXQtc2VsZWN0IFsobmdNb2RlbCldPVwicGFyYW1zLnRvcGljXCIgI3RvcGljPVwibmdNb2RlbFwiIG5hbWU9XCJ0b3BpY1wiPlxyXG4gICAgICAgICAgPG1hdC1vcHRpb24+VHV0dGk8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICBAZm9yICh0IG9mIHRvcGljczsgdHJhY2sgdCkge1xyXG4gIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCJ0LnZhbHVlXCIgW21hdFRvb2x0aXBdPVwidC5uYW1lXCI+XHJcbiAgICAgICAgICAgIDxkaXYgW2lubmVySHRtbF09XCJ0LnRpdGxlIHwgc2FmZUh0bWxcIj48L2Rpdj5cclxuICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxufVxyXG4gICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxufVxyXG4gICAgICBAaWYgKGVuYWJsZVRheG9ub215KSB7XHJcbjxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICA8bWF0LWxhYmVsPkFyZ29tZW50bzwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cInBhcmFtcy50YXhvbm9teU5vZGVcIiByZWFkb25seSBuYW1lPVwidGF4b25vbXlcIiAvPlxyXG4gICAgICAgIEBpZiAocGFyYW1zLnRheG9ub215Tm9kZSkge1xyXG48YnV0dG9uIHR5cGU9XCJidXR0b25cIiB0YWJpbmRleD1cIi0xXCIgbWF0LWljb24tYnV0dG9uIG1hdFN1ZmZpeCBhcmlhLWxhYmVsPVwiQXp6ZXJhXCJcclxuICAgICAgICAgIChjbGljayk9XCJwYXJhbXMudGF4b25vbXkgPSBudWxsOyBwYXJhbXMudGF4b25vbXlOb2RlID0gbnVsbDsgcGFyYW1zLnRheG9ub215UGF0aCA9IG51bGxcIj5cclxuICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbn1cclxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBtYXQtaWNvbi1idXR0b24gbWF0U3VmZml4IGFyaWEtbGFiZWw9XCJTY2VnbGlcIiBtYXRUb29sdGlwPVwiU2NlZ2xpXCJcclxuICAgICAgICAgIChjbGljayk9XCJzZWxlY3RUYXhvbm9teSgpXCI+XHJcbiAgICAgICAgICA8bWF0LWljb24+c2VhcmNoPC9tYXQtaWNvbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICBAaWYgKHBhcmFtcy50YXhvbm9teU5vZGUpIHtcclxuPG1hdC1oaW50IGFsaWduPVwic3RhcnRcIiBjbGFzcz1cInRydW5jYXRlZCBsb3dlcmNhc2VcIj5cclxuICAgICAgICAgIDxkaXY+e3twYXJhbXMudGF4b25vbXlQYXRofX08L2Rpdj5cclxuICAgICAgICA8L21hdC1oaW50PlxyXG59XHJcbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbn1cclxuICAgICAgQGlmIChlbmFibGVUeXBlKSB7XHJcbjxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICA8bWF0LWxhYmVsPlRpcG88L21hdC1sYWJlbD5cclxuICAgICAgICA8bWF0LXNlbGVjdCBbKG5nTW9kZWwpXT1cInBhcmFtcy50eXBlXCIgI3RvcGljPVwibmdNb2RlbFwiIG5hbWU9XCJ0eXBlXCI+XHJcbiAgICAgICAgICA8bWF0LW9wdGlvbj5UdXR0aTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgIEBmb3IgKHQgb2YgdHlwZXM7IHRyYWNrIHQpIHtcclxuICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwidC5kb2N1bWVudFR5cGVJZFwiIFttYXRUb29sdGlwXT1cInQuZG9jdW1lbnRUeXBlRGVzY3JpcHRpb25cIj5cclxuICAgICAgICAgICAge3t0LmRvY3VtZW50VHlwZURlc2NyaXB0aW9ufX1cclxuICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxufVxyXG4gICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxufVxyXG4gICAgICBAaWYgKGVuYWJsZVRleHQpIHtcclxuPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgIDxtYXQtbGFiZWw+VGVzdG88L21hdC1sYWJlbD5cclxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT1cInRleHRcIiAjdGV4dCBbKG5nTW9kZWwpXT1cInBhcmFtcy50ZXh0XCIgbWF4bGVuZ3RoPVwiMjAwXCIgLz5cclxuICAgICAgICBAaWYgKHBhcmFtcy50ZXh0KSB7XHJcbjxidXR0b24gdHlwZT1cImJ1dHRvblwiIHRhYmluZGV4PVwiLTFcIiBtYXQtaWNvbi1idXR0b24gbWF0U3VmZml4IGFyaWEtbGFiZWw9XCJBenplcmFcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cInBhcmFtcy50ZXh0ID0gbnVsbFwiPlxyXG4gICAgICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxufVxyXG4gICAgICAgIDxidXR0b24gZnhIaWRlLnhzIHR5cGU9XCJidXR0b25cIiBtYXQtaWNvbi1idXR0b24gbWF0U3VmZml4IGFyaWEtbGFiZWw9XCJDb21wb25pXCIgbWF0VG9vbHRpcD1cIkNvbXBvbmlcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cInRleHQuZm9jdXMoKTsgY29tcG9zZSgpXCI+XHJcbiAgICAgICAgICA8bWF0LWljb24+YnVpbGQ8L21hdC1pY29uPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gZnhIaWRlLnhzIHR5cGU9XCJidXR0b25cIiBtYXQtaWNvbi1idXR0b24gbWF0U3VmZml4IGFyaWEtbGFiZWw9XCJJbmZvcm1hemlvbmlcIlxyXG4gICAgICAgICAgbWF0VG9vbHRpcD1cIkNvbWUgZWZmZXR0dWFyZSBsYSByaWNlcmNhIGluIHRlc3RvIGxpYmVyb1wiIChjbGljayk9XCJ0ZXh0LmZvY3VzKCk7IGhlbHAoKVwiPlxyXG4gICAgICAgICAgPG1hdC1pY29uPmhlbHBfb3V0bGluZTwvbWF0LWljb24+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbn1cclxuICAgICAgQGlmIChlbmFibGVUZXh0KSB7XHJcbjxkaXYgY2xhc3M9XCJzcGFjZWQtYm90dG9tLTEwXCI+XHJcbiAgICAgICAgPG1hdC1jaGVja2JveCBjb2xvcj1cInByaW1hcnlcIiBbZGlzYWJsZWRdPVwiIXBhcmFtcy50ZXh0XCIgbmFtZT1cInRpdGxlT25seVwiXHJcbiAgICAgICAgICBbKG5nTW9kZWwpXT1cInBhcmFtcy50aXRsZU9ubHlcIj5DZXJjYVxyXG4gICAgICAgICAgc29sbyBuZWwgdGl0b2xvPC9tYXQtY2hlY2tib3g+XHJcbiAgICAgIDwvZGl2PlxyXG59XHJcbiAgICAgIEBpZiAoZW5hYmxlUHVibGljYXRpb24pIHtcclxuPGRpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbi10aXRsZVwiPlB1YmJsaWNhemlvbmU8L2Rpdj5cclxuICAgICAgICA8ZGl2IGZ4TGF5b3V0PVwicm93IHdyYXBcIiBmeExheW91dEFsaWduPVwic3BhY2UtYmV0d2VlblwiIGZ4RmlsbD5cclxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg9XCI0OVwiIGZ4RmxleC54cz1cIjEwMFwiPlxyXG4gICAgICAgICAgICA8bWF0LWxhYmVsPkludGVydmFsbG88L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgPG1hdC1kYXRlLXJhbmdlLWlucHV0IFtyYW5nZVBpY2tlcl09XCJwaWNrZXIxXCI+XHJcbiAgICAgICAgICAgICAgPGlucHV0IG1hdFN0YXJ0RGF0ZSBbKG5nTW9kZWwpXT1cImludGVydmFsLmZyb21cIiBbZGF0ZUludGVydmFsQ2hhbmdlXT1cImludGVydmFsXCIgI3JhbmdlRnJvbTE9XCJuZ01vZGVsXCJcclxuICAgICAgICAgICAgICAgIG5hbWU9XCJyYW5nZUZyb20xXCIgcGxhY2Vob2xkZXI9XCJEYSBkYXRhXCI+XHJcbiAgICAgICAgICAgICAgPGlucHV0IG1hdEVuZERhdGUgWyhuZ01vZGVsKV09XCJpbnRlcnZhbC50b1wiIFtkYXRlSW50ZXJ2YWxDaGFuZ2VdPVwiaW50ZXJ2YWxcIiBbZW5kXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgI3JhbmdlVG8xPVwibmdNb2RlbFwiIG5hbWU9XCJyYW5nZVRvMVwiIHBsYWNlaG9sZGVyPVwiQSBkYXRhXCI+XHJcbiAgICAgICAgICAgIDwvbWF0LWRhdGUtcmFuZ2UtaW5wdXQ+XHJcbiAgICAgICAgICAgIEBpZiAoaW50ZXJ2YWwuZnJvbSB8fCBpbnRlcnZhbC50bykge1xyXG48YnV0dG9uIHR5cGU9XCJidXR0b25cIiB0YWJpbmRleD1cIi0xXCIgbWF0U3VmZml4IG1hdC1pY29uLWJ1dHRvblxyXG4gICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJQdWxpc2NpXCIgKGNsaWNrKT1cImludGVydmFsLmNsZWFyKClcIj5cclxuICAgICAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxufVxyXG4gICAgICAgICAgICA8bWF0LWRhdGVwaWNrZXItdG9nZ2xlIG1hdFN1ZmZpeCBbZm9yXT1cInBpY2tlcjFcIj48L21hdC1kYXRlcGlja2VyLXRvZ2dsZT5cclxuICAgICAgICAgICAgPG1hdC1kYXRlLXJhbmdlLXBpY2tlciAjcGlja2VyMT48L21hdC1kYXRlLXJhbmdlLXBpY2tlcj5cclxuICAgICAgICAgICAgQGlmIChyYW5nZUZyb20xLmludmFsaWQgfHwgcmFuZ2VUbzEuaW52YWxpZCkge1xyXG48bWF0LWVycm9yPkludGVydmFsbG8gbm9uIHZhbGlkby48L21hdC1lcnJvcj5cclxufVxyXG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbn1cclxuICAgICAgQGlmIChlbmFibGVEb2N1bWVudCkge1xyXG48ZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLXRpdGxlXCI+RXN0cmVtaSBkb2N1bWVudG88L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvblwiPlxyXG4gICAgICAgICAgPGRpdiBmeExheW91dD1cInJvdyB3cmFwXCIgZnhMYXlvdXRBbGlnbj1cInNwYWNlLWJldHdlZW5cIiBmeEZpbGw+XHJcbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg9XCIzMFwiIGZ4RmxleC54cz1cIjEwMFwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtbGFiZWw+TnVtLiBkb2MuPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IFsobmdNb2RlbCldPVwicGFyYW1zLm51bWJlclwiICNudW1iZXI9XCJuZ01vZGVsXCIgbmFtZT1cIm51bWJlclwiIG1heGxlbmd0aD1cIjEwXCIgLz5cclxuICAgICAgICAgICAgICBAaWYgKHBhcmFtcy5udW1iZXIpIHtcclxuPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgdGFiaW5kZXg9XCItMVwiIG1hdFN1ZmZpeCBtYXQtaWNvbi1idXR0b24gYXJpYS1sYWJlbD1cIlB1bGlzY2lcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInBhcmFtcy5udW1iZXIgPSBudWxsXCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG59XHJcbiAgICAgICAgICAgICAgPG1hdC1oaW50PlNlbnphIHNwYXppPC9tYXQtaGludD5cclxuICAgICAgICAgICAgICBAaWYgKG51bWJlci5pbnZhbGlkKSB7XHJcbjxtYXQtZXJyb3I+U3Bhemkgbm9uIHZhbGlkaS48L21hdC1lcnJvcj5cclxufVxyXG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PVwiNjhcIiBmeEZsZXgueHM9XCIxMDBcIj5cclxuICAgICAgICAgICAgICA8bWF0LWxhYmVsPkludGVydmFsbG88L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICA8bWF0LWRhdGUtcmFuZ2UtaW5wdXQgW3JhbmdlUGlja2VyXT1cInBpY2tlcjJcIj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRTdGFydERhdGUgWyhuZ01vZGVsKV09XCJpbnRlcnZhbC5mcm9tXCIgW2RhdGVJbnRlcnZhbENoYW5nZV09XCJpbnRlcnZhbFwiICNyYW5nZUZyb20yPVwibmdNb2RlbFwiXHJcbiAgICAgICAgICAgICAgICAgIG5hbWU9XCJyYW5nZUZyb20yXCIgcGxhY2Vob2xkZXI9XCJEYSBkYXRhXCI+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0RW5kRGF0ZSBbKG5nTW9kZWwpXT1cImludGVydmFsLnRvXCIgW2RhdGVJbnRlcnZhbENoYW5nZV09XCJpbnRlcnZhbFwiIFtlbmRdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICNyYW5nZVRvMj1cIm5nTW9kZWxcIiBuYW1lPVwicmFuZ2VUbzJcIiBwbGFjZWhvbGRlcj1cIkEgZGF0YVwiPlxyXG4gICAgICAgICAgICAgIDwvbWF0LWRhdGUtcmFuZ2UtaW5wdXQ+XHJcbiAgICAgICAgICAgICAgQGlmIChpbnRlcnZhbC5mcm9tIHx8IGludGVydmFsLnRvKSB7XHJcbjxidXR0b24gdHlwZT1cImJ1dHRvblwiIHRhYmluZGV4PVwiLTFcIiBtYXRTdWZmaXggbWF0LWljb24tYnV0dG9uXHJcbiAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiUHVsaXNjaVwiIChjbGljayk9XCJpbnRlcnZhbC5jbGVhcigpXCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG59XHJcbiAgICAgICAgICAgICAgPG1hdC1kYXRlcGlja2VyLXRvZ2dsZSBtYXRTdWZmaXggW2Zvcl09XCJwaWNrZXIyXCI+PC9tYXQtZGF0ZXBpY2tlci10b2dnbGU+XHJcbiAgICAgICAgICAgICAgPG1hdC1kYXRlLXJhbmdlLXBpY2tlciAjcGlja2VyMj48L21hdC1kYXRlLXJhbmdlLXBpY2tlcj5cclxuICAgICAgICAgICAgICBAaWYgKHJhbmdlRnJvbTIuaW52YWxpZCB8fCByYW5nZVRvMi5pbnZhbGlkKSB7XHJcbjxtYXQtZXJyb3I+SW50ZXJ2YWxsbyBub24gdmFsaWRvLjwvbWF0LWVycm9yPlxyXG59XHJcbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbn1cclxuICAgICAgQGlmIChlbmFibGVTb3VyY2UpIHtcclxuPGRpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbi10aXRsZVwiPkZvbnRlPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb25cIj5cclxuICAgICAgICAgIDxkaXYgZnhMYXlvdXQ9XCJyb3cgd3JhcFwiIGZ4TGF5b3V0QWxpZ249XCJzcGFjZS1iZXR3ZWVuXCIgZnhGaWxsPlxyXG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PVwiMzBcIiBmeEZsZXgueHM9XCIxMDBcIj5cclxuICAgICAgICAgICAgICA8bWF0LWxhYmVsPk51bS4gZG9jLjwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cInBhcmFtcy5zb3VyY2VOdW1iZXJcIiAjc291cmNlTnVtYmVyPVwibmdNb2RlbFwiIG5hbWU9XCJzb3VyY2VOdW1iZXJcIlxyXG4gICAgICAgICAgICAgICAgbWF4bGVuZ3RoPVwiMTBcIiAvPlxyXG4gICAgICAgICAgICAgIEBpZiAocGFyYW1zLnNvdXJjZU51bWJlcikge1xyXG48YnV0dG9uIHR5cGU9XCJidXR0b25cIiB0YWJpbmRleD1cIi0xXCIgbWF0U3VmZml4IG1hdC1pY29uLWJ1dHRvblxyXG4gICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIlB1bGlzY2lcIiAoY2xpY2spPVwicGFyYW1zLnNvdXJjZU51bWJlciA9IG51bGxcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbn1cclxuICAgICAgICAgICAgICA8bWF0LWhpbnQ+U2VuemEgc3Bhemk8L21hdC1oaW50PlxyXG4gICAgICAgICAgICAgIEBpZiAoc291cmNlTnVtYmVyLmludmFsaWQpIHtcclxuPG1hdC1lcnJvcj5TcGF6aSBub24gdmFsaWRpLjwvbWF0LWVycm9yPlxyXG59XHJcbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg9XCI2OFwiIGZ4RmxleC54cz1cIjEwMFwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtbGFiZWw+SW50ZXJ2YWxsbzwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgIDxtYXQtZGF0ZS1yYW5nZS1pbnB1dCBbcmFuZ2VQaWNrZXJdPVwicGlja2VyM1wiPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdFN0YXJ0RGF0ZSBbKG5nTW9kZWwpXT1cInNvdXJjZUludGVydmFsLmZyb21cIiBbZGF0ZUludGVydmFsQ2hhbmdlXT1cInNvdXJjZUludGVydmFsXCJcclxuICAgICAgICAgICAgICAgICAgI3JhbmdlRnJvbTM9XCJuZ01vZGVsXCIgbmFtZT1cInJhbmdlRnJvbTNcIiBwbGFjZWhvbGRlcj1cIkRhIGRhdGFcIj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRFbmREYXRlIFsobmdNb2RlbCldPVwic291cmNlSW50ZXJ2YWwudG9cIiBbZGF0ZUludGVydmFsQ2hhbmdlXT1cInNvdXJjZUludGVydmFsXCIgW2VuZF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgI3JhbmdlVG8zPVwibmdNb2RlbFwiIG5hbWU9XCJyYW5nZVRvM1wiIHBsYWNlaG9sZGVyPVwiQSBkYXRhXCI+XHJcbiAgICAgICAgICAgICAgPC9tYXQtZGF0ZS1yYW5nZS1pbnB1dD5cclxuICAgICAgICAgICAgICBAaWYgKHNvdXJjZUludGVydmFsLmZyb20gfHwgc291cmNlSW50ZXJ2YWwudG8pIHtcclxuPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgdGFiaW5kZXg9XCItMVwiIG1hdFN1ZmZpeFxyXG4gICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uIGFyaWEtbGFiZWw9XCJQdWxpc2NpXCIgKGNsaWNrKT1cInNvdXJjZUludGVydmFsLmNsZWFyKClcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbn1cclxuICAgICAgICAgICAgICA8bWF0LWRhdGVwaWNrZXItdG9nZ2xlIG1hdFN1ZmZpeCBbZm9yXT1cInBpY2tlcjNcIj48L21hdC1kYXRlcGlja2VyLXRvZ2dsZT5cclxuICAgICAgICAgICAgICA8bWF0LWRhdGUtcmFuZ2UtcGlja2VyICNwaWNrZXIzPjwvbWF0LWRhdGUtcmFuZ2UtcGlja2VyPlxyXG4gICAgICAgICAgICAgIEBpZiAocmFuZ2VGcm9tMy5pbnZhbGlkIHx8IHJhbmdlVG8zLmludmFsaWQpIHtcclxuPG1hdC1lcnJvcj5JbnRlcnZhbGxvIG5vbiB2YWxpZG8uPC9tYXQtZXJyb3I+XHJcbn1cclxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBmeExheW91dD1cInJvdyB3cmFwXCIgZnhMYXlvdXRBbGlnbj1cInNwYWNlLWJldHdlZW5cIiBmeEZpbGw+XHJcbiAgICAgICAgICAgIEBpZiAoc291cmNlcyAmJiBzb3VyY2VzLmxlbmd0aCA+IDApIHtcclxuPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD1cIjEwMFwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtbGFiZWw+VGlwbyBmb250ZTwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgIDxtYXQtc2VsZWN0IFsobmdNb2RlbCldPVwicGFyYW1zLnNvdXJjZVwiICNzZWN0b3I9XCJuZ01vZGVsXCIgbmFtZT1cInNvdXJjZVwiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1vcHRpb24+VHV0dGk8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgICBAZm9yIChzIG9mIHNvdXJjZXM7IHRyYWNrIHMpIHtcclxuICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwicy5pZFwiPlxyXG4gICAgICAgICAgICAgICAgICB7e3MubmFtZX19XHJcbiAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XHJcbn1cclxuICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbn1cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxufVxyXG4gICAgICBAaWYgKGVuYWJsZUNoYW5nZXMpIHtcclxuPGRpdj5cclxuICAgICAgICA8ZGl2IGZ4TGF5b3V0PVwicm93IHdyYXBcIiBmeExheW91dEFsaWduPVwic3BhY2UtYmV0d2VlblwiIGZ4RmlsbD5cclxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg9XCI0OVwiIGZ4RmxleC54cz1cIjEwMFwiPlxyXG4gICAgICAgICAgICA8bWF0LWxhYmVsPk1vdGl2bzwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBbKG5nTW9kZWwpXT1cInBhcmFtcy5yZWFzb25cIiAjdG9waWM9XCJuZ01vZGVsXCIgbmFtZT1cInJlYXNvblwiPlxyXG4gICAgICAgICAgICAgIEBmb3IgKHQgb2YgdHlwZXM7IHRyYWNrIHQpIHtcclxuICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwidC52YWx1ZVwiIFttYXRUb29sdGlwXT1cInQubmFtZVwiPlxyXG4gICAgICAgICAgICAgICAge3t0Lm5hbWV9fVxyXG4gICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxufVxyXG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbi10aXRsZSBtYXQtYm9keS0zXCI+RG9jdW1lbnRvIG1vZGlmaWNhdG88L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvblwiPlxyXG4gICAgICAgICAgPHAgY2xhc3M9XCJzbWFsbFwiIHN0eWxlPVwibGluZS1oZWlnaHQ6IDEycHhcIj48aT5TYXJhbm5vIHZpc3VhbGl6emF0aSBpIGRvY3VtZW50aSBtb2RpZmljYW50aS48L2k+XHJcbiAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICA8ZGl2IGZ4TGF5b3V0PVwicm93IHdyYXBcIiBmeExheW91dEFsaWduPVwic3BhY2UtYmV0d2VlblwiIGZ4RmlsbD5cclxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD1cIjIzXCIgZnhGbGV4LnhzPVwiMTAwXCI+XHJcbiAgICAgICAgICAgICAgPG1hdC1sYWJlbD5OdW0uIGRvYy48L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgWyhuZ01vZGVsKV09XCJwYXJhbXMuY2hhbmdlZE51bWJlclwiICNjaGFuZ2VkTnVtYmVyPVwibmdNb2RlbFwiIG5hbWU9XCJjaGFuZ2VkTnVtYmVyXCJcclxuICAgICAgICAgICAgICAgIG1heGxlbmd0aD1cIjEwXCIgLz5cclxuICAgICAgICAgICAgICBAaWYgKHBhcmFtcy5jaGFuZ2VkTnVtYmVyKSB7XHJcbjxidXR0b24gdHlwZT1cImJ1dHRvblwiIHRhYmluZGV4PVwiLTFcIiBtYXRTdWZmaXggbWF0LWljb24tYnV0dG9uXHJcbiAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiUHVsaXNjaVwiIChjbGljayk9XCJwYXJhbXMuY2hhbmdlZE51bWJlciA9IG51bGxcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbn1cclxuICAgICAgICAgICAgICA8bWF0LWhpbnQ+U2VuemEgc3Bhemk8L21hdC1oaW50PlxyXG4gICAgICAgICAgICAgIEBpZiAoY2hhbmdlZE51bWJlci5pbnZhbGlkKSB7XHJcbjxtYXQtZXJyb3I+U3Bhemkgbm9uIHZhbGlkaS48L21hdC1lcnJvcj5cclxufVxyXG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PVwiMjNcIiBmeEZsZXgueHM9XCIxMDBcIj5cclxuICAgICAgICAgICAgICA8bWF0LWxhYmVsPkFubm88L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiIG1pbj1cIjE3NTBcIiBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cInBhcmFtcy5jaGFuZ2VkWWVhclwiICNjaGFuZ2VkWWVhcj1cIm5nTW9kZWxcIlxyXG4gICAgICAgICAgICAgICAgbmFtZT1cImNoYW5nZWRZZWFyXCIgbWF4bGVuZ3RoPVwiNFwiIC8+XHJcbiAgICAgICAgICAgICAgQGlmIChwYXJhbXMuY2hhbmdlZFllYXIpIHtcclxuPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgdGFiaW5kZXg9XCItMVwiIG1hdFN1ZmZpeCBtYXQtaWNvbi1idXR0b25cclxuICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJQdWxpc2NpXCIgKGNsaWNrKT1cInBhcmFtcy5jaGFuZ2VkWWVhciA9IG51bGxcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbn1cclxuICAgICAgICAgICAgICA8bWF0LWhpbnQ+RGFsIDE3NTA8L21hdC1oaW50PlxyXG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PVwiNTFcIiBmeEZsZXgueHM9XCIxMDBcIj5cclxuICAgICAgICAgICAgICA8bWF0LWxhYmVsPlRpdG9sbzwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cInBhcmFtcy5jaGFuZ2VkVGl0bGVcIiAjY2hhbmdlZFRpdGxlPVwibmdNb2RlbFwiIG5hbWU9XCJjaGFuZ2VkVGl0bGVcIlxyXG4gICAgICAgICAgICAgICAgbWF4bGVuZ3RoPVwiMTBcIiAvPlxyXG4gICAgICAgICAgICAgIEBpZiAocGFyYW1zLmNoYW5nZWRUaXRsZSkge1xyXG48YnV0dG9uIHR5cGU9XCJidXR0b25cIiB0YWJpbmRleD1cIi0xXCIgbWF0U3VmZml4IG1hdC1pY29uLWJ1dHRvblxyXG4gICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIlB1bGlzY2lcIiAoY2xpY2spPVwicGFyYW1zLmNoYW5nZWRUaXRsZSA9IG51bGxcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbn1cclxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbi10aXRsZSBcIj5Eb2N1bWVudG8gbW9kaWZpY2FudGU8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvblwiPlxyXG4gICAgICAgICAgPHAgY2xhc3M9XCJzbWFsbFwiIHN0eWxlPVwibGluZS1oZWlnaHQ6IDEycHhcIj5cclxuICAgICAgICAgICAgPGk+U2FyYW5ubyB2aXN1YWxpenphdGkgaSBkb2N1bWVudGkgbW9kaWZpY2F0aSwgb3BwdXJlIHNvbG8gaSBtb2RpZmljYW50aSBzZSDDqCBzdGF0byBzcGVjaWZpY2F0b1xyXG4gICAgICAgICAgICAgIGwnZXN0cmVtbyBkZWwgZG9jdW1lbnRvIG1vZGlmaWNhdG8uPC9pPlxyXG4gICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgPGRpdiBmeExheW91dD1cInJvdyB3cmFwXCIgZnhMYXlvdXRBbGlnbj1cInNwYWNlLWJldHdlZW5cIiBmeEZpbGw+XHJcbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg9XCIyM1wiIGZ4RmxleC54cz1cIjEwMFwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtbGFiZWw+TnVtLiBkb2MuPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IFsobmdNb2RlbCldPVwicGFyYW1zLm1vZGlmaWVyTnVtYmVyXCIgI21vZGlmaWVyTnVtYmVyPVwibmdNb2RlbFwiIG5hbWU9XCJtb2RpZmllck51bWJlclwiXHJcbiAgICAgICAgICAgICAgICBtYXhsZW5ndGg9XCIxMFwiIC8+XHJcbiAgICAgICAgICAgICAgQGlmIChwYXJhbXMubW9kaWZpZXJOdW1iZXIpIHtcclxuPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgdGFiaW5kZXg9XCItMVwiIG1hdFN1ZmZpeCBtYXQtaWNvbi1idXR0b25cclxuICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJQdWxpc2NpXCIgKGNsaWNrKT1cInBhcmFtcy5tb2RpZmllck51bWJlciA9IG51bGxcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbn1cclxuICAgICAgICAgICAgICA8bWF0LWhpbnQ+U2VuemEgc3Bhemk8L21hdC1oaW50PlxyXG4gICAgICAgICAgICAgIEBpZiAobW9kaWZpZXJOdW1iZXIuaW52YWxpZCkge1xyXG48bWF0LWVycm9yPlNwYXppIG5vbiB2YWxpZGkuPC9tYXQtZXJyb3I+XHJcbn1cclxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD1cIjIzXCIgZnhGbGV4LnhzPVwiMTAwXCI+XHJcbiAgICAgICAgICAgICAgPG1hdC1sYWJlbD5Bbm5vPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIiBtaW49MTc1MCBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cInBhcmFtcy5tb2RpZmllclllYXJcIiAjbW9kaWZpZXJZZWFyPVwibmdNb2RlbFwiXHJcbiAgICAgICAgICAgICAgICBuYW1lPVwibW9kaWZpZXJZZWFyXCIgbWF4bGVuZ3RoPVwiNFwiIC8+XHJcbiAgICAgICAgICAgICAgQGlmIChwYXJhbXMubW9kaWZpZXJZZWFyKSB7XHJcbjxidXR0b24gdHlwZT1cImJ1dHRvblwiIHRhYmluZGV4PVwiLTFcIiBtYXRTdWZmaXggbWF0LWljb24tYnV0dG9uXHJcbiAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiUHVsaXNjaVwiIChjbGljayk9XCJwYXJhbXMubW9kaWZpZXJZZWFyID0gbnVsbFwiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICA8L2J1dHRvbj5cclxufVxyXG4gICAgICAgICAgICAgIDxtYXQtaGludD5EYWwgMTc1MDwvbWF0LWhpbnQ+XHJcbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg9XCI1MVwiIGZ4RmxleC54cz1cIjEwMFwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtbGFiZWw+VGl0b2xvPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IFsobmdNb2RlbCldPVwicGFyYW1zLm1vZGlmaWVyVGl0bGVcIiAjbW9kaWZpZXJUaXRsZT1cIm5nTW9kZWxcIiBuYW1lPVwibW9kaWZpZXJUaXRsZVwiXHJcbiAgICAgICAgICAgICAgICBtYXhsZW5ndGg9XCIxMFwiIC8+XHJcbiAgICAgICAgICAgICAgQGlmIChwYXJhbXMubW9kaWZpZXJUaXRsZSkge1xyXG48YnV0dG9uIHR5cGU9XCJidXR0b25cIiB0YWJpbmRleD1cIi0xXCIgbWF0U3VmZml4IG1hdC1pY29uLWJ1dHRvblxyXG4gICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIlB1bGlzY2lcIiAoY2xpY2spPVwicGFyYW1zLm1vZGlmaWVyVGl0bGUgPSBudWxsXCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG59XHJcbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbn1cclxuICAgIDwvZGl2PlxyXG4gIDwvZm9ybT5cclxuPC9kaXY+XHJcbjxkaXYgbWF0LWRpYWxvZy1hY3Rpb25zPlxyXG4gIDxkaXYgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEdhcD1cIjEwcHhcIiBmeEZpbGw+XHJcbiAgICA8ZGl2IGZ4RmxleD1cIjMwXCI+XHJcbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIG1hdC1idXR0b24gKGNsaWNrKT1cImNsZWFyKClcIiBjb2xvcj1cInByaW1hcnlcIj5QVUxJU0NJPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgZnhGbGV4PVwiNzBcIiBmeExheW91dEFsaWduPVwiZW5kXCI+XHJcbiAgICAgIDxidXR0b24gbWF0LWZsYXQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiICNva0J1dHRvbiBbZGlzYWJsZWRdPVwiZi5mb3JtLmludmFsaWRcIiAoY2xpY2spPVwib2soKVwiPlRST1ZBPC9idXR0b24+XHJcbiAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiBbbWF0LWRpYWxvZy1jbG9zZV09XCJ0cnVlXCIgY29sb3I9XCJwcmltYXJ5XCI+Q0hJVURJPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9kaXY+Il19
|
|
326
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLWRpYWxvZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hcnMtdXRpbHMvY2xpcHBlci51aS91aS9zZWFyY2gtZGlhbG9nL3NlYXJjaC1kaWFsb2cuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJzLXV0aWxzL2NsaXBwZXIudWkvdWkvc2VhcmNoLWRpYWxvZy9zZWFyY2gtZGlhbG9nLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBVSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNGLE9BQU8sRUFBYSxlQUFlLEVBQUUsY0FBYyxFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzFJLE9BQU8sRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDeEUsT0FBTyxFQUNMLGtCQUFrQixFQUdsQixXQUFXLEVBQ1osTUFBTSx1Q0FBdUMsQ0FBQztBQUMvQyxPQUFPLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSwwREFBMEQsQ0FBQztBQUM5RyxPQUFPLEVBQUUsMENBQTBDLEVBQUUsTUFBTSw0RUFBNEUsQ0FBQztBQUN4SSxPQUFPLEVBQUUsK0NBQStDLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNwSCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDM0QsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDMUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVB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O0lBQ1AsQ0FBQzs4R0FoUlUsNEJBQTRCLGlIQWlDN0IsZUFBZTtrR0FqQ2QsNEJBQTRCLHlHQTlCckIsV0FBVyxDQUFDLFlBQVksRUFBRSxpQkFHL0I7WUFDUCwrQ0FBK0M7U0FDbEQsZ0lDbENMLCt3aUJBbVlNLDg0RkQ5VkUsY0FBYywrSEFDZCxnQkFBZ0Isd0dBQ2hCLFdBQVcsdWlEQUNYLFVBQVUsK2hHQUVWLGlCQUFpQiw2V0FDakIsa0JBQWtCLGdtQkFDbEIsZUFBZSxtckJBQ2YsZUFBZSw4QkFFZixnQkFBZ0IsNlRBQ2hCLGNBQWMsMldBQ2QsZUFBZSwwVUFDZixhQUFhLG9MQUNiLGNBQWMsbytCQUNkLG1CQUFtQiwwekJBQ25CLDJCQUEyQix3R0FDM0IsZ0JBQWdCLDRIQUNoQixjQUFjLGdMQUNkLFlBQVk7OzJGQUdQLDRCQUE0QjtrQkEvQnhDLFNBQVM7MkJBQ0EsRUFBRSxNQUFNLEVBQUUsV0FBVyxDQUFDLFlBQVksRUFBRSxFQUFFLGFBR2pDO3dCQUNQLCtDQUErQztxQkFDbEQsY0FDVyxJQUFJLFdBQ1A7d0JBQ0wsY0FBYzt3QkFDZCxnQkFBZ0I7d0JBQ2hCLFdBQVc7d0JBQ1gsVUFBVTt3QkFFVixpQkFBaUI7d0JBQ2pCLGtCQUFrQjt3QkFDbEIsZUFBZTt3QkFDZixlQUFlO3dCQUVmLGdCQUFnQjt3QkFDaEIsY0FBYzt3QkFDZCxlQUFlO3dCQUNmLGFBQWE7d0JBQ2IsY0FBYzt3QkFDZCxtQkFBbUI7d0JBQ25CLDJCQUEyQjt3QkFDM0IsZ0JBQWdCO3dCQUNoQixjQUFjO3dCQUNkLFlBQVk7cUJBQ2Y7OzBCQW1DQSxNQUFNOzJCQUFDLGVBQWU7eUNBaENGLFFBQVE7c0JBQTlCLFNBQVM7dUJBQUMsVUFBVTtnQkFDWCxJQUFJO3NCQUFiLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5qZWN0LCBPbkluaXQsIE91dHB1dCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1hdERpYWxvZywgTUFUX0RJQUxPR19EQVRBLCBNYXREaWFsb2dUaXRsZSwgTWF0RGlhbG9nQ29udGVudCwgTWF0RGlhbG9nQWN0aW9ucywgTWF0RGlhbG9nQ2xvc2UgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQgeyBEYXRlSW50ZXJ2YWwsIFN5c3RlbVV0aWxzIH0gZnJvbSAnQGFyc2VkaXppb25pL2Fycy11dGlscy9jb3JlJztcclxuaW1wb3J0IHtcclxuICBDbGlwcGVyRGVmaW5pdGlvbnMsXHJcbiAgQ2xpcHBlclNlcnZpY2UsXHJcbiAgQ2xpcHBlclNlYXJjaFBhcmFtcyxcclxuICBTZWFyY2hVdGlsc1xyXG59IGZyb20gJ0BhcnNlZGl6aW9uaS9hcnMtdXRpbHMvY2xpcHBlci5jb21tb24nO1xyXG5pbXBvcnQgeyBDbGlwcGVyU2VhcmNoRnJlZVRleHRIZWxwQ29tcG9uZW50IH0gZnJvbSAnLi4vc2VhcmNoLWZyZWUtdGV4dC1oZWxwL3NlYXJjaC1mcmVlLXRleHQtaGVscC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDbGlwcGVyU2VhcmNoRnJlZVRleHRRdWVyeUJ1aWxkZXJDb21wb25lbnQgfSBmcm9tICcuLi9zZWFyY2gtZnJlZS10ZXh0LXF1ZXJ5LWJ1aWxkZXIvc2VhcmNoLWZyZWUtdGV4dC1xdWVyeS1idWlsZGVyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IE1BVF9EQVRFUElDS0VSX1NDUk9MTF9TVFJBVEVHWV9GQUNUT1JZX1BST1ZJREVSLCBNYXREYXRlcGlja2VyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGF0ZXBpY2tlcic7XHJcbmltcG9ydCB7IFNhZmVIdG1sUGlwZSB9IGZyb20gJ0BhcnNlZGl6aW9uaS9hcnMtdXRpbHMvY29yZSc7XHJcbmltcG9ydCB7IERhdGVJbnRlcnZhbENoYW5nZURpcmVjdGl2ZSB9IGZyb20gJ0BhcnNlZGl6aW9uaS9hcnMtdXRpbHMvY29yZSc7XHJcbmltcG9ydCB7IEV4dGVuZGVkTW9kdWxlIH0gZnJvbSAnQG5nYnJhY2tldC9uZ3gtbGF5b3V0L2V4dGVuZGVkJztcclxuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xyXG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xyXG5pbXBvcnQgeyBNYXRJbnB1dE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2lucHV0JztcclxuaW1wb3J0IHsgTWF0VG9vbHRpcE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Rvb2x0aXAnO1xyXG5pbXBvcnQgeyBNYXRPcHRpb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jb3JlJztcclxuaW1wb3J0IHsgTWF0U2VsZWN0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2VsZWN0JztcclxuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XHJcbmltcG9ydCB7IE1hdENoZWNrYm94TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY2hlY2tib3gnO1xyXG5pbXBvcnQgeyBGbGV4TW9kdWxlIH0gZnJvbSAnQG5nYnJhY2tldC9uZ3gtbGF5b3V0L2ZsZXgnO1xyXG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgQXBwbGljYXRpb25EaWFsb2dTZXJ2aWNlIH0gZnJvbSAnQGFyc2VkaXppb25pL2Fycy11dGlscy91aS5hcHBsaWNhdGlvbic7XHJcblxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBob3N0OiB7ICdCaW5kJzogU3lzdGVtVXRpbHMuZ2VuZXJhdGVVVUlEKCkgfSxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9zZWFyY2gtZGlhbG9nLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL3NlYXJjaC1kaWFsb2cuY29tcG9uZW50LnNjc3MnXSxcclxuICAgIHByb3ZpZGVyczogW1xyXG4gICAgICAgIE1BVF9EQVRFUElDS0VSX1NDUk9MTF9TVFJBVEVHWV9GQUNUT1JZX1BST1ZJREVSXHJcbiAgICBdLFxyXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICAgIGltcG9ydHM6IFtcclxuICAgICAgICBNYXREaWFsb2dUaXRsZSxcclxuICAgICAgICBNYXREaWFsb2dDb250ZW50LFxyXG4gICAgICAgIEZvcm1zTW9kdWxlLFxyXG4gICAgICAgIEZsZXhNb2R1bGUsXHJcbiAgICAgICAgXHJcbiAgICAgICAgTWF0Q2hlY2tib3hNb2R1bGUsXHJcbiAgICAgICAgTWF0Rm9ybUZpZWxkTW9kdWxlLFxyXG4gICAgICAgIE1hdFNlbGVjdE1vZHVsZSxcclxuICAgICAgICBNYXRPcHRpb25Nb2R1bGUsXHJcbiAgICAgICAgXHJcbiAgICAgICAgTWF0VG9vbHRpcE1vZHVsZSxcclxuICAgICAgICBNYXRJbnB1dE1vZHVsZSxcclxuICAgICAgICBNYXRCdXR0b25Nb2R1bGUsXHJcbiAgICAgICAgTWF0SWNvbk1vZHVsZSxcclxuICAgICAgICBFeHRlbmRlZE1vZHVsZSxcclxuICAgICAgICBNYXREYXRlcGlja2VyTW9kdWxlLFxyXG4gICAgICAgIERhdGVJbnRlcnZhbENoYW5nZURpcmVjdGl2ZSxcclxuICAgICAgICBNYXREaWFsb2dBY3Rpb25zLFxyXG4gICAgICAgIE1hdERpYWxvZ0Nsb3NlLFxyXG4gICAgICAgIFNhZmVIdG1sUGlwZSxcclxuICAgIF0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDbGlwcGVyU2VhcmNoRGlhbG9nQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBAVmlld0NoaWxkKCdva0J1dHRvbicpIG9rQnV0dG9uITogSFRNTEJ1dHRvbkVsZW1lbnQ7XHJcbiAgQE91dHB1dCgpIGRvbmUgPSBuZXcgRXZlbnRFbWl0dGVyPENsaXBwZXJTZWFyY2hQYXJhbXM+KCk7XHJcblxyXG4gIHBhcmFtczogQ2xpcHBlclNlYXJjaFBhcmFtcztcclxuICBpbnRlcnZhbDogRGF0ZUludGVydmFsID0gbmV3IERhdGVJbnRlcnZhbCgpO1xyXG4gIG1vZGVsczogYW55O1xyXG4gIHNlY3RvcnM6IGFueTtcclxuICBzb3VyY2VzOiBhbnk7XHJcbiAgc291cmNlSW50ZXJ2YWw6IERhdGVJbnRlcnZhbCA9IG5ldyBEYXRlSW50ZXJ2YWwoKTtcclxuICB0b3BpY3M6IGFueTtcclxuICB0eXBlczogYW55O1xyXG4gIGF1dGhvcnM6IGFueTtcclxuICBlbmFibGVBdXRob3I6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBlbmFibGVUb3BpYzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGVuYWJsZVRheG9ub215OiBib29sZWFuID0gZmFsc2U7XHJcbiAgZW5hYmxlVHlwZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGVuYWJsZVRleHQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBlbmFibGVNb2RlbDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGVuYWJsZVNlY3RvcjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGVuYWJsZVNvdXJjZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGVuYWJsZURvY3VtZW50OiBib29sZWFuID0gZmFsc2U7XHJcbiAgZW5hYmxlRGVhZGxpbmU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBlbmFibGVQdWJsaWNhdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGVuYWJsZUNoYW5nZXM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBlbmFibGVSZWFkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgZW5hYmxlQ29tbWVudHM6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSAkZGlhbG9nOiBBcHBsaWNhdGlvbkRpYWxvZ1NlcnZpY2UsXHJcbiAgICBwcml2YXRlICRjbGlwcGVyOiBDbGlwcGVyU2VydmljZSxcclxuICAgIHB1YmxpYyBkaWFsb2c6IE1hdERpYWxvZyxcclxuICAgIEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBfZGF0YTogYW55XHJcbiAgKSB7XHJcbiAgICB0aGlzLmVuYWJsZVB1YmxpY2F0aW9uID0gX2RhdGEuZW5hYmxlUHVibGljYXRpb247XHJcbiAgICB0aGlzLmVuYWJsZURvY3VtZW50ID0gX2RhdGEuZW5hYmxlRG9jdW1lbnQ7XHJcbiAgICB0aGlzLmVuYWJsZURlYWRsaW5lID0gX2RhdGEuZW5hYmxlRGVhZGxpbmU7XHJcbiAgICB0aGlzLmVuYWJsZU1vZGVsID0gX2RhdGEuZW5hYmxlTW9kZWw7XHJcbiAgICB0aGlzLmVuYWJsZVNlY3RvciA9IF9kYXRhLmVuYWJsZVNlY3RvcjtcclxuICAgIHRoaXMuZW5hYmxlU291cmNlID0gX2RhdGEuZW5hYmxlU291cmNlO1xyXG4gICAgdGhpcy5lbmFibGVBdXRob3IgPSBfZGF0YS5lbmFibGVBdXRob3I7XHJcbiAgICB0aGlzLmVuYWJsZVRvcGljID0gX2RhdGEuZW5hYmxlVG9waWM7XHJcbiAgICB0aGlzLmVuYWJsZVRheG9ub215ID0gX2RhdGEuZW5hYmxlVGF4b25vbXk7XHJcbiAgICB0aGlzLmVuYWJsZVR5cGUgPSBfZGF0YS5lbmFibGVUeXBlO1xyXG4gICAgdGhpcy5lbmFibGVUZXh0ID0gX2RhdGEuZW5hYmxlVGV4dDtcclxuICAgIHRoaXMuZW5hYmxlQ2hhbmdlcyA9IF9kYXRhLmVuYWJsZUNoYW5nZXM7XHJcbiAgICB0aGlzLmVuYWJsZUNvbW1lbnRzID0gX2RhdGEuZW5hYmxlQ29tbWVudHM7XHJcbiAgICB0aGlzLmVuYWJsZVJlYWQgPSB0cnVlO1xyXG4gICAgdGhpcy5wYXJhbXMgPSB7XHJcbiAgICAgIHNob3dVbnJlYWREb2N1bWVudHNPbmx5OiBfZGF0YS5wYXJhbXMuc2hvd1VucmVhZERvY3VtZW50c09ubHksXHJcbiAgICAgIHNob3dDb21tZW50ZWREb2N1bWVudHNPbmx5OiBfZGF0YS5wYXJhbXMuc2hvd0NvbW1lbnRlZERvY3VtZW50c09ubHksXHJcbiAgICAgIGNvdW50OiAyNSxcclxuICAgICAgZmlyc3Q6IDBcclxuICAgIH07XHJcbiAgICB0aGlzLnBhcmFtcy50ZXh0ID0gX2RhdGEucGFyYW1zLnRleHQ7XHJcbiAgICB0aGlzLnBhcmFtcy50aXRsZU9ubHkgPSBfZGF0YS5wYXJhbXMudGl0bGVPbmx5O1xyXG4gICAgaWYgKHRoaXMuZW5hYmxlU2VjdG9yKSB7XHJcbiAgICAgIHRoaXMucGFyYW1zLnNlY3RvciA9IF9kYXRhLnBhcmFtcy5zZWN0b3I7XHJcbiAgICAgIGlmIChfZGF0YS5zZWN0b3JzKSB0aGlzLnNlY3RvcnMgPSBfZGF0YS5zZWN0b3JzO1xyXG4gICAgICBlbHNlIHRoaXMuc2VjdG9ycyA9IENsaXBwZXJEZWZpbml0aW9ucy5TRUNUT1JTO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZW5hYmxlQXV0aG9yKSB0aGlzLnBhcmFtcy5hdXRob3IgPSBfZGF0YS5wYXJhbXMuYXV0aG9yO1xyXG4gICAgaWYgKHRoaXMuZW5hYmxlTW9kZWwpIHtcclxuICAgICAgdGhpcy5tb2RlbHMgPSBfZGF0YS5tb2RlbHM7XHJcbiAgICAgIHRoaXMucGFyYW1zLnNlY3RvciA9IF9kYXRhLnBhcmFtcy5zZWN0b3I7IC8vIFVzZSBzZWN0b3IgYXMgdmFsdWUgYW5kIG5vdCBtb2RlbFxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZW5hYmxlRG9jdW1lbnQpIHRoaXMucGFyYW1zLm51bWJlciA9IF9kYXRhLnBhcmFtcy5udW1iZXI7XHJcbiAgICBpZiAodGhpcy5lbmFibGVEb2N1bWVudCB8fCB0aGlzLmVuYWJsZVB1YmxpY2F0aW9uKSB7XHJcbiAgICAgIGlmIChfZGF0YS5wYXJhbXMuZnJvbURhdGUpIHRoaXMuaW50ZXJ2YWwuZnJvbSA9IF9kYXRhLnBhcmFtcy5mcm9tRGF0ZTtcclxuICAgICAgaWYgKF9kYXRhLnBhcmFtcy50b0RhdGUpIHRoaXMuaW50ZXJ2YWwudG8gPSBfZGF0YS5wYXJhbXMudG9EYXRlO1xyXG5cclxuICAgIH1cclxuICAgIGlmICh0aGlzLmVuYWJsZVRvcGljKSB0aGlzLnBhcmFtcy50b3BpYyA9IF9kYXRhLnBhcmFtcy50b3BpYztcclxuICAgIGlmICh0aGlzLmVuYWJsZVRheG9ub215KSB7XHJcbiAgICAgIHRoaXMucGFyYW1zLnRheG9ub215ID0gX2RhdGEucGFyYW1zLnRheG9ub215O1xyXG4gICAgICB0aGlzLnBhcmFtcy50YXhvbm9teVBhdGggPSBfZGF0YS5wYXJhbXMudGF4b25vbXlQYXRoO1xyXG4gICAgICB0aGlzLnBhcmFtcy50YXhvbm9teU5vZGUgPSBfZGF0YS5wYXJhbXMudGF4b25vbXlOb2RlO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZW5hYmxlVHlwZSkge1xyXG4gICAgICB0aGlzLnR5cGVzID0gQ2xpcHBlckRlZmluaXRpb25zLlNFQ1RPUl9UWVBFUztcclxuICAgICAgdGhpcy5wYXJhbXMudHlwZSA9IF9kYXRhLnBhcmFtcy50eXBlO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZW5hYmxlU291cmNlKSB7XHJcbiAgICAgIHRoaXMuc291cmNlcyA9IENsaXBwZXJEZWZpbml0aW9ucy5TT1VSQ0VTO1xyXG4gICAgICB0aGlzLnBhcmFtcy5zb3VyY2UgPSBfZGF0YS5wYXJhbXMuc291cmNlO1xyXG4gICAgICB0aGlzLnBhcmFtcy5zb3VyY2VOdW1iZXIgPSBfZGF0YS5wYXJhbXMuc291cmNlTnVtYmVyO1xyXG4gICAgICBpZiAoX2RhdGEucGFyYW1zLnNvdXJjZUZyb21EYXRlKVxyXG4gICAgICAgIHRoaXMuc291cmNlSW50ZXJ2YWwuZnJvbSA9IF9kYXRhLnBhcmFtcy5zb3VyY2VGcm9tRGF0ZTtcclxuICAgICAgaWYgKF9kYXRhLnBhcmFtcy5zb3VyY2VUb0RhdGUpXHJcbiAgICAgICAgdGhpcy5zb3VyY2VJbnRlcnZhbC50byA9IF9kYXRhLnBhcmFtcy5zb3VyY2VUb0RhdGU7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5lbmFibGVDaGFuZ2VzKSB7XHJcbiAgICAgIHRoaXMudHlwZXMgPSBfZGF0YS5jaGFuZ2VSZWFzb25zO1xyXG4gICAgICB0aGlzLnBhcmFtcy5yZWFzb24gPSBfZGF0YS5wYXJhbXMucmVhc29uO1xyXG4gICAgICB0aGlzLnBhcmFtcy5jaGFuZ2VkTnVtYmVyID0gX2RhdGEucGFyYW1zLmNoYW5nZWROdW1iZXI7XHJcbiAgICAgIHRoaXMucGFyYW1zLmNoYW5nZWRZZWFyID0gX2RhdGEucGFyYW1zLmNoYW5nZWRZZWFyO1xyXG4gICAgICB0aGlzLnBhcmFtcy5jaGFuZ2VkVGl0bGUgPSBfZGF0YS5wYXJhbXMuY2hhbmdlZFRpdGxlO1xyXG4gICAgICB0aGlzLnBhcmFtcy5tb2RpZmllck51bWJlciA9IF9kYXRhLnBhcmFtcy5tb2RpZmllck51bWJlcjtcclxuICAgICAgdGhpcy5wYXJhbXMubW9kaWZpZXJZZWFyID0gX2RhdGEucGFyYW1zLm1vZGlmaWVyWWVhcjtcclxuICAgICAgdGhpcy5wYXJhbXMubW9kaWZpZXJUaXRsZSA9IF9kYXRhLnBhcmFtcy5tb2RpZmllclRpdGxlO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZW5hYmxlRGVhZGxpbmUpIHtcclxuICAgICAgdGhpcy50eXBlcyA9IF9kYXRhLmRlYWRsaW5lcztcclxuICAgICAgdGhpcy5wYXJhbXMudHlwZSA9IF9kYXRhLnBhcmFtcy50eXBlO1xyXG4gICAgfVxyXG4gICAgaWYgKCF0aGlzLmVuYWJsZVJlYWQgPT09IGZhbHNlKVxyXG4gICAgICB0aGlzLmVuYWJsZVJlYWQgPSBmYWxzZTtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5wYXJhbXMubW9kZWwgPT09IENsaXBwZXJEZWZpbml0aW9ucy5ETV9TQ0FERU5aQV9TRUdOQUxBWklPTkUgfHxcclxuICAgICAgdGhpcy5wYXJhbXMubW9kZWwgPT09IENsaXBwZXJEZWZpbml0aW9ucy5ETV9OT1JNQVRJVkFfVklHRU5URSB8fFxyXG4gICAgICB0aGlzLnBhcmFtcy5tb2RlbCA9PT0gQ2xpcHBlckRlZmluaXRpb25zLkRNX01FVE9ESV9BTkFMSVNJXHJcbiAgICApXHJcbiAgICAgIHRoaXMuZW5hYmxlUmVhZCA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLmF1dGhvcnMgPSBbXTtcclxuXHJcbiAgICBpZiAodGhpcy5lbmFibGVUb3BpYykge1xyXG4gICAgICBpZiAoIXRoaXMuJGNsaXBwZXIubG9nZ2VkSW4pIHJldHVybjtcclxuICAgICAgLy8gTG9hZCB0b3BpY3NcclxuICAgICAgdGhpcy4kY2xpcHBlci5nZXRUb3BpY3MoKVxyXG4gICAgICAgIC5zdWJzY3JpYmUociA9PiB7XHJcbiAgICAgICAgICBpZiAoci5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIGxldCBuYW1lID0gJyc7XHJcbiAgICAgICAgICAgIHIudmFsdWUuZm9yRWFjaCgobjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgbmFtZSA9ICcnO1xyXG4gICAgICAgICAgICAgIChuLnZhbHVlLm1hdGNoKC8uL2cpIHx8IFtdKS5mb3JFYWNoKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIG5hbWUgKz0gJyZuYnNwOyZuYnNwOyc7XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgbmFtZSArPSBuLnZhbHVlICsgJyAtICcgKyBuLm5hbWU7XHJcbiAgICAgICAgICAgICAgbi50aXRsZSA9IG5hbWU7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB0aGlzLnRvcGljcyA9IHIudmFsdWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuZW5hYmxlQXV0aG9yICYmIHRoaXMucGFyYW1zLnNlY3RvcikgdGhpcy5zZWN0b3JDaGFuZ2VkKCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlIGF1dGhvcnMgd2hlbiBzZWxlY3RlZCBzZWN0b3JzIGNoYW5nZWRcclxuICAgKi9cclxuICBzZWN0b3JDaGFuZ2VkKCkge1xyXG4gICAgaWYgKHRoaXMuZW5hYmxlQXV0aG9yKSB7XHJcbiAgICAgIGxldCBhdXRob3JzOiBhbnkgPSBbXTtcclxuICAgICAgaWYgKHRoaXMucGFyYW1zLnNlY3Rvcikge1xyXG4gICAgICAgIENsaXBwZXJEZWZpbml0aW9ucy5TRUNUT1JfQVVUSE9SUy5mb3JFYWNoKChuOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChuLnNlY3RvcklkID09PSB0aGlzLnBhcmFtcy5zZWN0b3IpIGF1dGhvcnMucHVzaChuKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmF1dGhvcnMgPSBhdXRob3JzO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmVuYWJsZVR5cGUpIHtcclxuICAgICAgaWYgKHRoaXMucGFyYW1zLnNlY3Rvcikge1xyXG4gICAgICAgIGxldCB0eXBlczogYW55ID0gW107XHJcbiAgICAgICAgQ2xpcHBlckRlZmluaXRpb25zLlNFQ1RPUl9UWVBFUy5mb3JFYWNoKChuOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChuLnNlY3RvcklkID09PSB0aGlzLnBhcmFtcy5zZWN0b3IpIHR5cGVzLnB1c2gobik7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy50eXBlcyA9IHR5cGVzO1xyXG4gICAgICB9IGVsc2UgdGhpcy50eXBlcyA9IENsaXBwZXJEZWZpbml0aW9ucy5TRUNUT1JfVFlQRVM7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDbGVhciBzZWFyY2hcclxuICAgKi9cclxuICBjbGVhcigpIHtcclxuICAgIFNlYXJjaFV0aWxzLmNsZWFyKHRoaXMucGFyYW1zKTtcclxuICAgIHRoaXMuaW50ZXJ2YWwuY2xlYXIoKTtcclxuICAgIHRoaXMuc291cmNlSW50ZXJ2YWwuY2xlYXIoKTtcclxuICAgIHRoaXMuc2VjdG9yQ2hhbmdlZCgpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4gKiBTaG93IGZyZWUgdGV4dCBoZWxwXHJcbiAqL1xyXG4gIGhlbHAoKSB7XHJcbiAgICB0aGlzLiRkaWFsb2cub3BlbihDbGlwcGVyU2VhcmNoRnJlZVRleHRIZWxwQ29tcG9uZW50LCB7XHJcbiAgICAgIGFyaWFMYWJlbDogJ2luZm9ybWF6aW9uaSByaWNlcmNhJyxcclxuICAgICAgYXV0b0ZvY3VzOiBmYWxzZSxcclxuICAgICAgcmVzdG9yZUZvY3VzOiB0cnVlLFxyXG4gICAgICBkaXNhYmxlQ2xvc2U6IGZhbHNlLFxyXG4gICAgICBtaW5XaWR0aDogJzM3NXB4JyxcclxuICAgICAgbWF4V2lkdGg6ICc4MDBweCcsXHJcbiAgICAgIHdpZHRoOiAnOTklJyxcclxuICAgIH0pO1xyXG5cclxuICB9XHJcbiAgLyoqXHJcbiAgICogQ29tcG9zZSBhIGZyZWUgdGV4dCBzZWFyY2ggcXVlcnlcclxuICAgKi9cclxuICBjb21wb3NlKCkge1xyXG4gICAgbGV0IGQgPSB0aGlzLiRkaWFsb2cub3BlbihDbGlwcGVyU2VhcmNoRnJlZVRleHRRdWVyeUJ1aWxkZXJDb21wb25lbnQsIHtcclxuICAgICAgYXJpYUxhYmVsOiAnY29zdHJ1aXNjaSByaWNlcmNhJyxcclxuICAgICAgYXV0b0ZvY3VzOiBmYWxzZSxcclxuICAgICAgcmVzdG9yZUZvY3VzOiB0cnVlLFxyXG4gICAgICBkaXNhYmxlQ2xvc2U6IGZhbHNlLFxyXG4gICAgICBtaW5XaWR0aDogJzM3NXB4JyxcclxuICAgICAgbWF4V2lkdGg6ICc2MDBweCcsXHJcbiAgICAgIHdpZHRoOiAnOTklJ1xyXG4gICAgfSk7XHJcbiAgICBkLmNvbXBvbmVudEluc3RhbmNlLmRvbmVcclxuICAgICAgLnN1YnNjcmliZSgocjogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5wYXJhbXMudGV4dCA9IHIucXVlcnk7XHJcblxyXG4gICAgICAgIC8vIEZpbmlzaGVkXHJcbiAgICAgICAgZC5jbG9zZSgpO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFN1Ym1pdCBzZWFyY2hcclxuICAgKi9cclxuICBvaygpIHtcclxuICAgIHRoaXMub2tCdXR0b24uZm9jdXMoKTtcclxuICAgIGlmICh0aGlzLnBhcmFtcy50ZXh0KVxyXG4gICAgICB0aGlzLnBhcmFtcy50ZXh0ID0gU2VhcmNoVXRpbHMubm9ybWFsaXplVGV4dFF1ZXJ5KHRoaXMucGFyYW1zLnRleHQpO1xyXG4gICAgaWYgKHRoaXMuaW50ZXJ2YWwpIHtcclxuICAgICAgdGhpcy5wYXJhbXMuZnJvbURhdGUgPSB0aGlzLmludGVydmFsLmZyb207XHJcbiAgICAgIHRoaXMucGFyYW1zLnRvRGF0ZSA9IHRoaXMuaW50ZXJ2YWwudG87XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5zb3VyY2VJbnRlcnZhbCkge1xyXG4gICAgICB0aGlzLnBhcmFtcy5zb3VyY2VGcm9tRGF0ZSA9IHRoaXMuc291cmNlSW50ZXJ2YWwuZnJvbTtcclxuICAgICAgdGhpcy5wYXJhbXMuc291cmNlVG9EYXRlID0gdGhpcy5zb3VyY2VJbnRlcnZhbC50bztcclxuICAgIH1cclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAvLyBOb3RpZnlcclxuICAgICAgdGhpcy5kb25lLmVtaXQodGhpcy5wYXJhbXMpO1xyXG4gICAgfSwgNTAwKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNlbGVjdCBhIHRheG9ub215IHRvcGljXHJcbiAgICovXHJcbiAgc2VsZWN0VGF4b25vbXkoKSB7XHJcbiAgICBpZiAoIXRoaXMuJGNsaXBwZXIubG9nZ2VkSW4pIHJldHVybjtcclxuICAgIGxldCBwYXJhbXMgPSBudWxsO1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLnBhcmFtcy5tb2RlbCA9PT0gQ2xpcHBlckRlZmluaXRpb25zLkRNX0dVSURBIHx8XHJcbiAgICAgIHRoaXMucGFyYW1zLm1vZGVsID09PSBDbGlwcGVyRGVmaW5pdGlvbnMuRE1fR1VJREFfTk9STUFUSVZBIHx8XHJcbiAgICAgIHRoaXMucGFyYW1zLm1vZGVsID09PSBDbGlwcGVyRGVmaW5pdGlvbnMuRE1fU0NIRURBX0FERU1QSU1FTlRJXHJcbiAgICApIHtcclxuICAgICAgcGFyYW1zID0geyBtb2RlbDogQ2xpcHBlckRlZmluaXRpb25zLkRNX0dVSURBLCBjb3VudEl0ZW1zOiB0cnVlIH07XHJcbiAgICB9XHJcbiAgICB0aGlzLiRkaWFsb2cuYnVzeSgnQ2FyaWNhbWVudG8gaW4gY29yc28uLi4nKTtcclxuICAgIHRoaXMuJGNsaXBwZXIuZ2V0VGF4b25vbXkocGFyYW1zKVxyXG4gICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiByID0+IHtcclxuICAgICAgICAgIHRoaXMuJGRpYWxvZ1xyXG4gICAgICAgICAgICAuc2VsZWN0VHJlZShcclxuICAgICAgICAgICAgICB0aGlzLiRjbGlwcGVyLnRvTm9kZXMoci52YWx1ZS5zdWJGb2xkZXJzKSxcclxuICAgICAgICAgICAgICAnU2VsZXppb25hIHVuIGFyZ29tZW50bycsXHJcbiAgICAgICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICAgICB0aGlzLnBhcmFtcy50YXhvbm9teU5vZGVcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAuY29tcG9uZW50SW5zdGFuY2UuZG9uZS5zdWJzY3JpYmUociA9PiB7XHJcbiAgICAgICAgICAgICAgbGV0IG4gPSByLnNlbGVjdGVkSXRlbXNbMF0uYmFnO1xyXG4gICAgICAgICAgICAgIHRoaXMucGFyYW1zLnRheG9ub215ID0gbi5pZDtcclxuICAgICAgICAgICAgICB0aGlzLnBhcmFtcy50YXhvbm9teVBhdGggPSBuLnBhdGg7XHJcbiAgICAgICAgICAgICAgdGhpcy5wYXJhbXMudGF4b25vbXlOb2RlID0gbi5uYW1lO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNvbXBsZXRlOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLiRkaWFsb2cuY2xlYXJCdXN5KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcbn1cclxuIiwiPGgyIG1hdC1kaWFsb2ctdGl0bGU+UmljZXJjYTwvaDI+XHJcbjxkaXYgbWF0LWRpYWxvZy1jb250ZW50PlxyXG4gIDxmb3JtIG5hbWU9XCJmb3JtXCIgI2Y9XCJuZ0Zvcm1cIiAoa2V5dXAuRW50ZXIpPVwiIWYuZm9ybS5pbnZhbGlkID8gb2soKSA6IG51bGxcIiBub3ZhbGlkYXRlPlxyXG4gICAgPGRpdiBmeExheW91dD1cImNvbHVtblwiPlxyXG4gICAgICA8ZGl2IGZ4RmxleEFsaWduPVwiZW5kXCI+XHJcbiAgICAgICAgQGlmIChlbmFibGVSZWFkKSB7XHJcbjxkaXYgc3R5bGU9XCJwYWRkaW5nLWJvdHRvbToxMHB4XCI+XHJcbiAgICAgICAgICA8bWF0LWNoZWNrYm94IGNvbG9yPVwicHJpbWFyeVwiIG5hbWU9XCJzaG93VW5yZWFkRG9jdW1lbnRzT25seVwiIFsobmdNb2RlbCldPVwicGFyYW1zLnNob3dVbnJlYWREb2N1bWVudHNPbmx5XCI+XHJcbiAgICAgICAgICAgIE1vc3RyYSBzb2xvIG5vbiBsZXR0aTwvbWF0LWNoZWNrYm94PlxyXG4gICAgICAgIDwvZGl2PlxyXG59XHJcbiAgICAgICAgQGlmIChlbmFibGVDb21tZW50cykge1xyXG48ZGl2IHN0eWxlPVwicGFkZGluZy1ib3R0b206MTBweFwiPlxyXG4gICAgICAgICAgPG1hdC1jaGVja2JveCBjb2xvcj1cInByaW1hcnlcIiBuYW1lPVwic2hvd0NvbW1lbnRlZERvY3VtZW50c09ubHlcIlxyXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cInBhcmFtcy5zaG93Q29tbWVudGVkRG9jdW1lbnRzT25seVwiPlxyXG4gICAgICAgICAgICBNb3N0cmEgc29sbyBub3JtZSBjb24gY29tbWVudGk8L21hdC1jaGVja2JveD5cclxuICAgICAgICA8L2Rpdj5cclxufVxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgQGlmIChlbmFibGVNb2RlbCkge1xyXG48bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgPG1hdC1sYWJlbD5UaXBvPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgPG1hdC1zZWxlY3QgWyhuZ01vZGVsKV09XCJwYXJhbXMuc2VjdG9yXCIgI3NlY3Rvcj1cIm5nTW9kZWxcIiBuYW1lPVwibW9kZWxcIiAoc2VsZWN0aW9uQ2hhbmdlKT1cInNlY3RvckNoYW5nZWQoKVwiPlxyXG4gICAgICAgICAgPG1hdC1vcHRpb24+VHV0dGk8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICBAZm9yIChtIG9mIG1vZGVsczsgdHJhY2sgbSkge1xyXG4gIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCJtLmlkXCI+XHJcbiAgICAgICAgICAgIHt7bS5uYW1lfX1cclxuICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxufVxyXG4gICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxufVxyXG4gICAgICBAaWYgKGVuYWJsZVNlY3Rvcikge1xyXG48bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgPG1hdC1sYWJlbD5TZXR0b3JlPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgPG1hdC1zZWxlY3QgWyhuZ01vZGVsKV09XCJwYXJhbXMuc2VjdG9yXCIgI3NlY3Rvcj1cIm5nTW9kZWxcIiBuYW1lPVwic2VjdG9yXCIgKHNlbGVjdGlvbkNoYW5nZSk9XCJzZWN0b3JDaGFuZ2VkKClcIj5cclxuICAgICAgICAgIDxtYXQtb3B0aW9uPlR1dHRpPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgQGZvciAocyBvZiBzZWN0b3JzOyB0cmFjayBzKSB7XHJcbiAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cInMuaWRcIj5cclxuICAgICAgICAgICAgQGlmIChzLmdyb3VwID09ICdBJykge1xyXG48c3Bhbj4mbmJzcDsmbmJzcDs8L3NwYW4+XHJcbn1cclxuICAgICAgICAgICAge3tzLm5hbWV9fVxyXG4gICAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG59XHJcbiAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG59XHJcbiAgICAgIEBpZiAoZW5hYmxlQXV0aG9yICYmIGF1dGhvcnMgJiYgYXV0aG9ycy5sZW5ndGggPiAwKSB7XHJcbjxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICA8bWF0LWxhYmVsPkF1dG9yZTwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDxtYXQtc2VsZWN0IFsobmdNb2RlbCldPVwicGFyYW1zLmF1dGhvclwiICNzZWN0b3I9XCJuZ01vZGVsXCIgbmFtZT1cImF1dGhvclwiPlxyXG4gICAgICAgICAgPG1hdC1vcHRpb24+VHV0dGk8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICBAZm9yIChhIG9mIGF1dGhvcnM7IHRyYWNrIGEpIHtcclxuICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwiYS5hdXRob3JJZFwiPlxyXG4gICAgICAgICAgICB7e2EuYXV0aG9yRGVzY3JpcHRpb259fVxyXG4gICAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG59XHJcbiAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG59XHJcbiAgICAgIEBpZiAoZW5hYmxlVG9waWMgJiYgdG9waWNzICYmIHRvcGljcy5sZW5ndGggPiAwKSB7XHJcbjxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICA8bWF0LWxhYmVsPkFyZ29tZW50bzwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDxtYXQtc2VsZWN0IFsobmdNb2RlbCldPVwicGFyYW1zLnRvcGljXCIgI3RvcGljPVwibmdNb2RlbFwiIG5hbWU9XCJ0b3BpY1wiPlxyXG4gICAgICAgICAgPG1hdC1vcHRpb24+VHV0dGk8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICBAZm9yICh0IG9mIHRvcGljczsgdHJhY2sgdCkge1xyXG4gIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCJ0LnZhbHVlXCIgW21hdFRvb2x0aXBdPVwidC5uYW1lXCI+XHJcbiAgICAgICAgICAgIDxkaXYgW2lubmVySHRtbF09XCJ0LnRpdGxlIHwgc2FmZUh0bWxcIj48L2Rpdj5cclxuICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxufVxyXG4gICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxufVxyXG4gICAgICBAaWYgKGVuYWJsZVRheG9ub215KSB7XHJcbjxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICA8bWF0LWxhYmVsPkFyZ29tZW50bzwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cInBhcmFtcy50YXhvbm9teU5vZGVcIiByZWFkb25seSBuYW1lPVwidGF4b25vbXlcIiAvPlxyXG4gICAgICAgIEBpZiAocGFyYW1zLnRheG9ub215Tm9kZSkge1xyXG48YnV0dG9uIHR5cGU9XCJidXR0b25cIiB0YWJpbmRleD1cIi0xXCIgbWF0LWljb24tYnV0dG9uIG1hdFN1ZmZpeCBhcmlhLWxhYmVsPVwiQXp6ZXJhXCJcclxuICAgICAgICAgIChjbGljayk9XCJwYXJhbXMudGF4b25vbXkgPSBudWxsOyBwYXJhbXMudGF4b25vbXlOb2RlID0gbnVsbDsgcGFyYW1zLnRheG9ub215UGF0aCA9IG51bGxcIj5cclxuICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbn1cclxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBtYXQtaWNvbi1idXR0b24gbWF0U3VmZml4IGFyaWEtbGFiZWw9XCJTY2VnbGlcIiBtYXRUb29sdGlwPVwiU2NlZ2xpXCJcclxuICAgICAgICAgIChjbGljayk9XCJzZWxlY3RUYXhvbm9teSgpXCI+XHJcbiAgICAgICAgICA8bWF0LWljb24+c2VhcmNoPC9tYXQtaWNvbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICBAaWYgKHBhcmFtcy50YXhvbm9teU5vZGUpIHtcclxuPG1hdC1oaW50IGFsaWduPVwic3RhcnRcIiBjbGFzcz1cInRydW5jYXRlZCBsb3dlcmNhc2VcIj5cclxuICAgICAgICAgIDxkaXY+e3twYXJhbXMudGF4b25vbXlQYXRofX08L2Rpdj5cclxuICAgICAgICA8L21hdC1oaW50PlxyXG59XHJcbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbn1cclxuICAgICAgQGlmIChlbmFibGVUeXBlKSB7XHJcbjxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICA8bWF0LWxhYmVsPlRpcG88L21hdC1sYWJlbD5cclxuICAgICAgICA8bWF0LXNlbGVjdCBbKG5nTW9kZWwpXT1cInBhcmFtcy50eXBlXCIgI3RvcGljPVwibmdNb2RlbFwiIG5hbWU9XCJ0eXBlXCI+XHJcbiAgICAgICAgICA8bWF0LW9wdGlvbj5UdXR0aTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgIEBmb3IgKHQgb2YgdHlwZXM7IHRyYWNrIHQpIHtcclxuICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwidC5kb2N1bWVudFR5cGVJZFwiIFttYXRUb29sdGlwXT1cInQuZG9jdW1lbnRUeXBlRGVzY3JpcHRpb25cIj5cclxuICAgICAgICAgICAge3t0LmRvY3VtZW50VHlwZURlc2NyaXB0aW9ufX1cclxuICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxufVxyXG4gICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxufVxyXG4gICAgICBAaWYgKGVuYWJsZVRleHQpIHtcclxuPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgIDxtYXQtbGFiZWw+VGVzdG88L21hdC1sYWJlbD5cclxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT1cInRleHRcIiAjdGV4dCBbKG5nTW9kZWwpXT1cInBhcmFtcy50ZXh0XCIgbWF4bGVuZ3RoPVwiMjAwXCIgLz5cclxuICAgICAgICBAaWYgKHBhcmFtcy50ZXh0KSB7XHJcbjxidXR0b24gdHlwZT1cImJ1dHRvblwiIHRhYmluZGV4PVwiLTFcIiBtYXQtaWNvbi1idXR0b24gbWF0U3VmZml4IGFyaWEtbGFiZWw9XCJBenplcmFcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cInBhcmFtcy50ZXh0ID0gbnVsbFwiPlxyXG4gICAgICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxufVxyXG4gICAgICAgIDxidXR0b24gZnhIaWRlLnhzIHR5cGU9XCJidXR0b25cIiBtYXQtaWNvbi1idXR0b24gbWF0U3VmZml4IGFyaWEtbGFiZWw9XCJDb21wb25pXCIgbWF0VG9vbHRpcD1cIkNvbXBvbmlcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cInRleHQuZm9jdXMoKTsgY29tcG9zZSgpXCI+XHJcbiAgICAgICAgICA8bWF0LWljb24+YnVpbGQ8L21hdC1pY29uPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gZnhIaWRlLnhzIHR5cGU9XCJidXR0b25cIiBtYXQtaWNvbi1idXR0b24gbWF0U3VmZml4IGFyaWEtbGFiZWw9XCJJbmZvcm1hemlvbmlcIlxyXG4gICAgICAgICAgbWF0VG9vbHRpcD1cIkNvbWUgZWZmZXR0dWFyZSBsYSByaWNlcmNhIGluIHRlc3RvIGxpYmVyb1wiIChjbGljayk9XCJ0ZXh0LmZvY3VzKCk7IGhlbHAoKVwiPlxyXG4gICAgICAgICAgPG1hdC1pY29uPmhlbHBfb3V0bGluZTwvbWF0LWljb24+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbn1cclxuICAgICAgQGlmIChlbmFibGVUZXh0KSB7XHJcbjxkaXYgc3R5bGU9XCJwYWRkaW5nLWJvdHRvbToxMHB4XCI+XHJcbiAgICAgICAgPG1hdC1jaGVja2JveCBjb2xvcj1cInByaW1hcnlcIiBbZGlzYWJsZWRdPVwiIXBhcmFtcy50ZXh0XCIgbmFtZT1cInRpdGxlT25seVwiXHJcbiAgICAgICAgICBbKG5nTW9kZWwpXT1cInBhcmFtcy50aXRsZU9ubHlcIj5DZXJjYVxyXG4gICAgICAgICAgc29sbyBuZWwgdGl0b2xvPC9tYXQtY2hlY2tib3g+XHJcbiAgICAgIDwvZGl2PlxyXG59XHJcbiAgICAgIEBpZiAoZW5hYmxlUHVibGljYXRpb24pIHtcclxuPGRpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbi10aXRsZVwiPlB1YmJsaWNhemlvbmU8L2Rpdj5cclxuICAgICAgICA8ZGl2IGZ4TGF5b3V0PVwicm93IHdyYXBcIiBmeExheW91dEFsaWduPVwic3BhY2UtYmV0d2VlblwiIGZ4RmlsbD5cclxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg9XCI0OVwiIGZ4RmxleC54cz1cIjEwMFwiPlxyXG4gICAgICAgICAgICA8bWF0LWxhYmVsPkludGVydmFsbG88L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgPG1hdC1kYXRlLXJhbmdlLWlucHV0IFtyYW5nZVBpY2tlcl09XCJwaWNrZXIxXCI+XHJcbiAgICAgICAgICAgICAgPGlucHV0IG1hdFN0YXJ0RGF0ZSBbKG5nTW9kZWwpXT1cImludGVydmFsLmZyb21cIiBbZGF0ZUludGVydmFsQ2hhbmdlXT1cImludGVydmFsXCIgI3JhbmdlRnJvbTE9XCJuZ01vZGVsXCJcclxuICAgICAgICAgICAgICAgIG5hbWU9XCJyYW5nZUZyb20xXCIgcGxhY2Vob2xkZXI9XCJEYSBkYXRhXCI+XHJcbiAgICAgICAgICAgICAgPGlucHV0IG1hdEVuZERhdGUgWyhuZ01vZGVsKV09XCJpbnRlcnZhbC50b1wiIFtkYXRlSW50ZXJ2YWxDaGFuZ2VdPVwiaW50ZXJ2YWxcIiBbZW5kXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgI3JhbmdlVG8xPVwibmdNb2RlbFwiIG5hbWU9XCJyYW5nZVRvMVwiIHBsYWNlaG9sZGVyPVwiQSBkYXRhXCI+XHJcbiAgICAgICAgICAgIDwvbWF0LWRhdGUtcmFuZ2UtaW5wdXQ+XHJcbiAgICAgICAgICAgIEBpZiAoaW50ZXJ2YWwuZnJvbSB8fCBpbnRlcnZhbC50bykge1xyXG48YnV0dG9uIHR5cGU9XCJidXR0b25cIiB0YWJpbmRleD1cIi0xXCIgbWF0U3VmZml4IG1hdC1pY29uLWJ1dHRvblxyXG4gICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJQdWxpc2NpXCIgKGNsaWNrKT1cImludGVydmFsLmNsZWFyKClcIj5cclxuICAgICAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxufVxyXG4gICAgICAgICAgICA8bWF0LWRhdGVwaWNrZXItdG9nZ2xlIG1hdFN1ZmZpeCBbZm9yXT1cInBpY2tlcjFcIj48L21hdC1kYXRlcGlja2VyLXRvZ2dsZT5cclxuICAgICAgICAgICAgPG1hdC1kYXRlLXJhbmdlLXBpY2tlciAjcGlja2VyMT48L21hdC1kYXRlLXJhbmdlLXBpY2tlcj5cclxuICAgICAgICAgICAgQGlmIChyYW5nZUZyb20xLmludmFsaWQgfHwgcmFuZ2VUbzEuaW52YWxpZCkge1xyXG48bWF0LWVycm9yPkludGVydmFsbG8gbm9uIHZhbGlkby48L21hdC1lcnJvcj5cclxufVxyXG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbn1cclxuICAgICAgQGlmIChlbmFibGVEb2N1bWVudCkge1xyXG48ZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLXRpdGxlXCI+RXN0cmVtaSBkb2N1bWVudG88L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvblwiPlxyXG4gICAgICAgICAgPGRpdiBmeExheW91dD1cInJvdyB3cmFwXCIgZnhMYXlvdXRBbGlnbj1cInNwYWNlLWJldHdlZW5cIiBmeEZpbGw+XHJcbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg9XCIzMFwiIGZ4RmxleC54cz1cIjEwMFwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtbGFiZWw+TnVtLiBkb2MuPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IFsobmdNb2RlbCldPVwicGFyYW1zLm51bWJlclwiICNudW1iZXI9XCJuZ01vZGVsXCIgbmFtZT1cIm51bWJlclwiIG1heGxlbmd0aD1cIjEwXCIgLz5cclxuICAgICAgICAgICAgICBAaWYgKHBhcmFtcy5udW1iZXIpIHtcclxuPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgdGFiaW5kZXg9XCItMVwiIG1hdFN1ZmZpeCBtYXQtaWNvbi1idXR0b24gYXJpYS1sYWJlbD1cIlB1bGlzY2lcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInBhcmFtcy5udW1iZXIgPSBudWxsXCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG59XHJcbiAgICAgICAgICAgICAgPG1hdC1oaW50PlNlbnphIHNwYXppPC9tYXQtaGludD5cclxuICAgICAgICAgICAgICBAaWYgKG51bWJlci5pbnZhbGlkKSB7XHJcbjxtYXQtZXJyb3I+U3Bhemkgbm9uIHZhbGlkaS48L21hdC1lcnJvcj5cclxufVxyXG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PVwiNjhcIiBmeEZsZXgueHM9XCIxMDBcIj5cclxuICAgICAgICAgICAgICA8bWF0LWxhYmVsPkludGVydmFsbG88L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICA8bWF0LWRhdGUtcmFuZ2UtaW5wdXQgW3JhbmdlUGlja2VyXT1cInBpY2tlcjJcIj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRTdGFydERhdGUgWyhuZ01vZGVsKV09XCJpbnRlcnZhbC5mcm9tXCIgW2RhdGVJbnRlcnZhbENoYW5nZV09XCJpbnRlcnZhbFwiICNyYW5nZUZyb20yPVwibmdNb2RlbFwiXHJcbiAgICAgICAgICAgICAgICAgIG5hbWU9XCJyYW5nZUZyb20yXCIgcGxhY2Vob2xkZXI9XCJEYSBkYXRhXCI+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0RW5kRGF0ZSBbKG5nTW9kZWwpXT1cImludGVydmFsLnRvXCIgW2RhdGVJbnRlcnZhbENoYW5nZV09XCJpbnRlcnZhbFwiIFtlbmRdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICNyYW5nZVRvMj1cIm5nTW9kZWxcIiBuYW1lPVwicmFuZ2VUbzJcIiBwbGFjZWhvbGRlcj1cIkEgZGF0YVwiPlxyXG4gICAgICAgICAgICAgIDwvbWF0LWRhdGUtcmFuZ2UtaW5wdXQ+XHJcbiAgICAgICAgICAgICAgQGlmIChpbnRlcnZhbC5mcm9tIHx8IGludGVydmFsLnRvKSB7XHJcbjxidXR0b24gdHlwZT1cImJ1dHRvblwiIHRhYmluZGV4PVwiLTFcIiBtYXRTdWZmaXggbWF0LWljb24tYnV0dG9uXHJcbiAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiUHVsaXNjaVwiIChjbGljayk9XCJpbnRlcnZhbC5jbGVhcigpXCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG59XHJcbiAgICAgICAgICAgICAgPG1hdC1kYXRlcGlja2VyLXRvZ2dsZSBtYXRTdWZmaXggW2Zvcl09XCJwaWNrZXIyXCI+PC9tYXQtZGF0ZXBpY2tlci10b2dnbGU+XHJcbiAgICAgICAgICAgICAgPG1hdC1kYXRlLXJhbmdlLXBpY2tlciAjcGlja2VyMj48L21hdC1kYXRlLXJhbmdlLXBpY2tlcj5cclxuICAgICAgICAgICAgICBAaWYgKHJhbmdlRnJvbTIuaW52YWxpZCB8fCByYW5nZVRvMi5pbnZhbGlkKSB7XHJcbjxtYXQtZXJyb3I+SW50ZXJ2YWxsbyBub24gdmFsaWRvLjwvbWF0LWVycm9yPlxyXG59XHJcbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbn1cclxuICAgICAgQGlmIChlbmFibGVTb3VyY2UpIHtcclxuPGRpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbi10aXRsZVwiPkZvbnRlPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb25cIj5cclxuICAgICAgICAgIDxkaXYgZnhMYXlvdXQ9XCJyb3cgd3JhcFwiIGZ4TGF5b3V0QWxpZ249XCJzcGFjZS1iZXR3ZWVuXCIgZnhGaWxsPlxyXG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PVwiMzBcIiBmeEZsZXgueHM9XCIxMDBcIj5cclxuICAgICAgICAgICAgICA8bWF0LWxhYmVsPk51bS4gZG9jLjwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cInBhcmFtcy5zb3VyY2VOdW1iZXJcIiAjc291cmNlTnVtYmVyPVwibmdNb2RlbFwiIG5hbWU9XCJzb3VyY2VOdW1iZXJcIlxyXG4gICAgICAgICAgICAgICAgbWF4bGVuZ3RoPVwiMTBcIiAvPlxyXG4gICAgICAgICAgICAgIEBpZiAocGFyYW1zLnNvdXJjZU51bWJlcikge1xyXG48YnV0dG9uIHR5cGU9XCJidXR0b25cIiB0YWJpbmRleD1cIi0xXCIgbWF0U3VmZml4IG1hdC1pY29uLWJ1dHRvblxyXG4gICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIlB1bGlzY2lcIiAoY2xpY2spPVwicGFyYW1zLnNvdXJjZU51bWJlciA9IG51bGxcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbn1cclxuICAgICAgICAgICAgICA8bWF0LWhpbnQ+U2VuemEgc3Bhemk8L21hdC1oaW50PlxyXG4gICAgICAgICAgICAgIEBpZiAoc291cmNlTnVtYmVyLmludmFsaWQpIHtcclxuPG1hdC1lcnJvcj5TcGF6aSBub24gdmFsaWRpLjwvbWF0LWVycm9yPlxyXG59XHJcbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg9XCI2OFwiIGZ4RmxleC54cz1cIjEwMFwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtbGFiZWw+SW50ZXJ2YWxsbzwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgIDxtYXQtZGF0ZS1yYW5nZS1pbnB1dCBbcmFuZ2VQaWNrZXJdPVwicGlja2VyM1wiPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdFN0YXJ0RGF0ZSBbKG5nTW9kZWwpXT1cInNvdXJjZUludGVydmFsLmZyb21cIiBbZGF0ZUludGVydmFsQ2hhbmdlXT1cInNvdXJjZUludGVydmFsXCJcclxuICAgICAgICAgICAgICAgICAgI3JhbmdlRnJvbTM9XCJuZ01vZGVsXCIgbmFtZT1cInJhbmdlRnJvbTNcIiBwbGFjZWhvbGRlcj1cIkRhIGRhdGFcIj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRFbmREYXRlIFsobmdNb2RlbCldPVwic291cmNlSW50ZXJ2YWwudG9cIiBbZGF0ZUludGVydmFsQ2hhbmdlXT1cInNvdXJjZUludGVydmFsXCIgW2VuZF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgI3JhbmdlVG8zPVwibmdNb2RlbFwiIG5hbWU9XCJyYW5nZVRvM1wiIHBsYWNlaG9sZGVyPVwiQSBkYXRhXCI+XHJcbiAgICAgICAgICAgICAgPC9tYXQtZGF0ZS1yYW5nZS1pbnB1dD5cclxuICAgICAgICAgICAgICBAaWYgKHNvdXJjZUludGVydmFsLmZyb20gfHwgc291cmNlSW50ZXJ2YWwudG8pIHtcclxuPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgdGFiaW5kZXg9XCItMVwiIG1hdFN1ZmZpeFxyXG4gICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uIGFyaWEtbGFiZWw9XCJQdWxpc2NpXCIgKGNsaWNrKT1cInNvdXJjZUludGVydmFsLmNsZWFyKClcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbn1cclxuICAgICAgICAgICAgICA8bWF0LWRhdGVwaWNrZXItdG9nZ2xlIG1hdFN1ZmZpeCBbZm9yXT1cInBpY2tlcjNcIj48L21hdC1kYXRlcGlja2VyLXRvZ2dsZT5cclxuICAgICAgICAgICAgICA8bWF0LWRhdGUtcmFuZ2UtcGlja2VyICNwaWNrZXIzPjwvbWF0LWRhdGUtcmFuZ2UtcGlja2VyPlxyXG4gICAgICAgICAgICAgIEBpZiAocmFuZ2VGcm9tMy5pbnZhbGlkIHx8IHJhbmdlVG8zLmludmFsaWQpIHtcclxuPG1hdC1lcnJvcj5JbnRlcnZhbGxvIG5vbiB2YWxpZG8uPC9tYXQtZXJyb3I+XHJcbn1cclxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBmeExheW91dD1cInJvdyB3cmFwXCIgZnhMYXlvdXRBbGlnbj1cInNwYWNlLWJldHdlZW5cIiBmeEZpbGw+XHJcbiAgICAgICAgICAgIEBpZiAoc291cmNlcyAmJiBzb3VyY2VzLmxlbmd0aCA+IDApIHtcclxuPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD1cIjEwMFwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtbGFiZWw+VGlwbyBmb250ZTwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgIDxtYXQtc2VsZWN0IFsobmdNb2RlbCldPVwicGFyYW1zLnNvdXJjZVwiICNzZWN0b3I9XCJuZ01vZGVsXCIgbmFtZT1cInNvdXJjZVwiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1vcHRpb24+VHV0dGk8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgICBAZm9yIChzIG9mIHNvdXJjZXM7IHRyYWNrIHMpIHtcclxuICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwicy5pZFwiPlxyXG4gICAgICAgICAgICAgICAgICB7e3MubmFtZX19XHJcbiAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XHJcbn1cclxuICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbn1cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxufVxyXG4gICAgICBAaWYgKGVuYWJsZUNoYW5nZXMpIHtcclxuPGRpdj5cclxuICAgICAgICA8ZGl2IGZ4TGF5b3V0PVwicm93IHdyYXBcIiBmeExheW91dEFsaWduPVwic3BhY2UtYmV0d2VlblwiIGZ4RmlsbD5cclxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg9XCI0OVwiIGZ4RmxleC54cz1cIjEwMFwiPlxyXG4gICAgICAgICAgICA8bWF0LWxhYmVsPk1vdGl2bzwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBbKG5nTW9kZWwpXT1cInBhcmFtcy5yZWFzb25cIiAjdG9waWM9XCJuZ01vZGVsXCIgbmFtZT1cInJlYXNvblwiPlxyXG4gICAgICAgICAgICAgIEBmb3IgKHQgb2YgdHlwZXM7IHRyYWNrIHQpIHtcclxuICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwidC52YWx1ZVwiIFttYXRUb29sdGlwXT1cInQubmFtZVwiPlxyXG4gICAgICAgICAgICAgICAge3t0Lm5hbWV9fVxyXG4gICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxufVxyXG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbi10aXRsZSBtYXQtYm9keS0zXCI+RG9jdW1lbnRvIG1vZGlmaWNhdG88L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvblwiPlxyXG4gICAgICAgICAgPHAgY2xhc3M9XCJzbWFsbFwiIHN0eWxlPVwibGluZS1oZWlnaHQ6IDEycHhcIj48aT5TYXJhbm5vIHZpc3VhbGl6emF0aSBpIGRvY3VtZW50aSBtb2RpZmljYW50aS48L2k+XHJcbiAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICA8ZGl2IGZ4TGF5b3V0PVwicm93IHdyYXBcIiBmeExheW91dEFsaWduPVwic3BhY2UtYmV0d2VlblwiIGZ4RmlsbD5cclxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD1cIjIzXCIgZnhGbGV4LnhzPVwiMTAwXCI+XHJcbiAgICAgICAgICAgICAgPG1hdC1sYWJlbD5OdW0uIGRvYy48L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgWyhuZ01vZGVsKV09XCJwYXJhbXMuY2hhbmdlZE51bWJlclwiICNjaGFuZ2VkTnVtYmVyPVwibmdNb2RlbFwiIG5hbWU9XCJjaGFuZ2VkTnVtYmVyXCJcclxuICAgICAgICAgICAgICAgIG1heGxlbmd0aD1cIjEwXCIgLz5cclxuICAgICAgICAgICAgICBAaWYgKHBhcmFtcy5jaGFuZ2VkTnVtYmVyKSB7XHJcbjxidXR0b24gdHlwZT1cImJ1dHRvblwiIHRhYmluZGV4PVwiLTFcIiBtYXRTdWZmaXggbWF0LWljb24tYnV0dG9uXHJcbiAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiUHVsaXNjaVwiIChjbGljayk9XCJwYXJhbXMuY2hhbmdlZE51bWJlciA9IG51bGxcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbn1cclxuICAgICAgICAgICAgICA8bWF0LWhpbnQ+U2VuemEgc3Bhemk8L21hdC1oaW50PlxyXG4gICAgICAgICAgICAgIEBpZiAoY2hhbmdlZE51bWJlci5pbnZhbGlkKSB7XHJcbjxtYXQtZXJyb3I+U3Bhemkgbm9uIHZhbGlkaS48L21hdC1lcnJvcj5cclxufVxyXG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PVwiMjNcIiBmeEZsZXgueHM9XCIxMDBcIj5cclxuICAgICAgICAgICAgICA8bWF0LWxhYmVsPkFubm88L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiIG1pbj1cIjE3NTBcIiBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cInBhcmFtcy5jaGFuZ2VkWWVhclwiICNjaGFuZ2VkWWVhcj1cIm5nTW9kZWxcIlxyXG4gICAgICAgICAgICAgICAgbmFtZT1cImNoYW5nZWRZZWFyXCIgbWF4bGVuZ3RoPVwiNFwiIC8+XHJcbiAgICAgICAgICAgICAgQGlmIChwYXJhbXMuY2hhbmdlZFllYXIpIHtcclxuPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgdGFiaW5kZXg9XCItMVwiIG1hdFN1ZmZpeCBtYXQtaWNvbi1idXR0b25cclxuICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJQdWxpc2NpXCIgKGNsaWNrKT1cInBhcmFtcy5jaGFuZ2VkWWVhciA9IG51bGxcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbn1cclxuICAgICAgICAgICAgICA8bWF0LWhpbnQ+RGFsIDE3NTA8L21hdC1oaW50PlxyXG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PVwiNTFcIiBmeEZsZXgueHM9XCIxMDBcIj5cclxuICAgICAgICAgICAgICA8bWF0LWxhYmVsPlRpdG9sbzwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cInBhcmFtcy5jaGFuZ2VkVGl0bGVcIiAjY2hhbmdlZFRpdGxlPVwibmdNb2RlbFwiIG5hbWU9XCJjaGFuZ2VkVGl0bGVcIlxyXG4gICAgICAgICAgICAgICAgbWF4bGVuZ3RoPVwiMTBcIiAvPlxyXG4gICAgICAgICAgICAgIEBpZiAocGFyYW1zLmNoYW5nZWRUaXRsZSkge1xyXG48YnV0dG9uIHR5cGU9XCJidXR0b25cIiB0YWJpbmRleD1cIi0xXCIgbWF0U3VmZml4IG1hdC1pY29uLWJ1dHRvblxyXG4gICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIlB1bGlzY2lcIiAoY2xpY2spPVwicGFyYW1zLmNoYW5nZWRUaXRsZSA9IG51bGxcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbn1cclxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbi10aXRsZSBcIj5Eb2N1bWVudG8gbW9kaWZpY2FudGU8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvblwiPlxyXG4gICAgICAgICAgPHAgY2xhc3M9XCJzbWFsbFwiIHN0eWxlPVwibGluZS1oZWlnaHQ6IDEycHhcIj5cclxuICAgICAgICAgICAgPGk+U2FyYW5ubyB2aXN1YWxpenphdGkgaSBkb2N1bWVudGkgbW9kaWZpY2F0aSwgb3BwdXJlIHNvbG8gaSBtb2RpZmljYW50aSBzZSDDqCBzdGF0byBzcGVjaWZpY2F0b1xyXG4gICAgICAgICAgICAgIGwnZXN0cmVtbyBkZWwgZG9jdW1lbnRvIG1vZGlmaWNhdG8uPC9pPlxyXG4gICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgPGRpdiBmeExheW91dD1cInJvdyB3cmFwXCIgZnhMYXlvdXRBbGlnbj1cInNwYWNlLWJldHdlZW5cIiBmeEZpbGw+XHJcbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg9XCIyM1wiIGZ4RmxleC54cz1cIjEwMFwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtbGFiZWw+TnVtLiBkb2MuPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IFsobmdNb2RlbCldPVwicGFyYW1zLm1vZGlmaWVyTnVtYmVyXCIgI21vZGlmaWVyTnVtYmVyPVwibmdNb2RlbFwiIG5hbWU9XCJtb2RpZmllck51bWJlclwiXHJcbiAgICAgICAgICAgICAgICBtYXhsZW5ndGg9XCIxMFwiIC8+XHJcbiAgICAgICAgICAgICAgQGlmIChwYXJhbXMubW9kaWZpZXJOdW1iZXIpIHtcclxuPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgdGFiaW5kZXg9XCItMVwiIG1hdFN1ZmZpeCBtYXQtaWNvbi1idXR0b25cclxuICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJQdWxpc2NpXCIgKGNsaWNrKT1cInBhcmFtcy5tb2RpZmllck51bWJlciA9IG51bGxcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbn1cclxuICAgICAgICAgICAgICA8bWF0LWhpbnQ+U2VuemEgc3Bhemk8L21hdC1oaW50PlxyXG4gICAgICAgICAgICAgIEBpZiAobW9kaWZpZXJOdW1iZXIuaW52YWxpZCkge1xyXG48bWF0LWVycm9yPlNwYXppIG5vbiB2YWxpZGkuPC9tYXQtZXJyb3I+XHJcbn1cclxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD1cIjIzXCIgZnhGbGV4LnhzPVwiMTAwXCI+XHJcbiAgICAgICAgICAgICAgPG1hdC1sYWJlbD5Bbm5vPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIiBtaW49MTc1MCBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cInBhcmFtcy5tb2RpZmllclllYXJcIiAjbW9kaWZpZXJZZWFyPVwibmdNb2RlbFwiXHJcbiAgICAgICAgICAgICAgICBuYW1lPVwibW9kaWZpZXJZZWFyXCIgbWF4bGVuZ3RoPVwiNFwiIC8+XHJcbiAgICAgICAgICAgICAgQGlmIChwYXJhbXMubW9kaWZpZXJZZWFyKSB7XHJcbjxidXR0b24gdHlwZT1cImJ1dHRvblwiIHRhYmluZGV4PVwiLTFcIiBtYXRTdWZmaXggbWF0LWljb24tYnV0dG9uXHJcbiAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiUHVsaXNjaVwiIChjbGljayk9XCJwYXJhbXMubW9kaWZpZXJZZWFyID0gbnVsbFwiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICA8L2J1dHRvbj5cclxufVxyXG4gICAgICAgICAgICAgIDxtYXQtaGludD5EYWwgMTc1MDwvbWF0LWhpbnQ+XHJcbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg9XCI1MVwiIGZ4RmxleC54cz1cIjEwMFwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtbGFiZWw+VGl0b2xvPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IFsobmdNb2RlbCldPVwicGFyYW1zLm1vZGlmaWVyVGl0bGVcIiAjbW9kaWZpZXJUaXRsZT1cIm5nTW9kZWxcIiBuYW1lPVwibW9kaWZpZXJUaXRsZVwiXHJcbiAgICAgICAgICAgICAgICBtYXhsZW5ndGg9XCIxMFwiIC8+XHJcbiAgICAgICAgICAgICAgQGlmIChwYXJhbXMubW9kaWZpZXJUaXRsZSkge1xyXG48YnV0dG9uIHR5cGU9XCJidXR0b25cIiB0YWJpbmRleD1cIi0xXCIgbWF0U3VmZml4IG1hdC1pY29uLWJ1dHRvblxyXG4gICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIlB1bGlzY2lcIiAoY2xpY2spPVwicGFyYW1zLm1vZGlmaWVyVGl0bGUgPSBudWxsXCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG59XHJcbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbn1cclxuICAgIDwvZGl2PlxyXG4gIDwvZm9ybT5cclxuPC9kaXY+XHJcbjxkaXYgbWF0LWRpYWxvZy1hY3Rpb25zPlxyXG4gIDxkaXYgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEdhcD1cIjEwcHhcIiBmeEZpbGw+XHJcbiAgICA8ZGl2IGZ4RmxleD1cIjMwXCI+XHJcbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIG1hdC1idXR0b24gKGNsaWNrKT1cImNsZWFyKClcIiBjb2xvcj1cInByaW1hcnlcIj5QVUxJU0NJPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgZnhGbGV4PVwiNzBcIiBmeExheW91dEFsaWduPVwiZW5kXCI+XHJcbiAgICAgIDxidXR0b24gbWF0LWZsYXQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiICNva0J1dHRvbiBbZGlzYWJsZWRdPVwiZi5mb3JtLmludmFsaWRcIiAoY2xpY2spPVwib2soKVwiPlRST1ZBPC9idXR0b24+XHJcbiAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiBbbWF0LWRpYWxvZy1jbG9zZV09XCJ0cnVlXCIgY29sb3I9XCJwcmltYXJ5XCI+Q0hJVURJPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9kaXY+Il19
|