@esfaenza/forms-and-validations 15.2.58 → 16.2.0
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/{esm2020 → esm2022}/lib/forms/base-form-control.mjs +4 -4
- package/{esm2020 → esm2022}/lib/forms/form-adaptive/form-adaptive.component.loc.mjs +4 -4
- package/{esm2020 → esm2022}/lib/forms/form-adaptive/form-adaptive.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/forms/form-autocomplete/form-autocomplete.component.loc.mjs +4 -4
- package/{esm2020 → esm2022}/lib/forms/form-autocomplete/form-autocomplete.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/forms/form-checkbox/form-checkbox.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/forms/form-date/form-date.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/forms/form-datetime/form-datetime.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/forms/form-empty/form-empty.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/forms/form-error/form-error.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/forms/form-file/form-file.component.loc.mjs +4 -4
- package/{esm2020 → esm2022}/lib/forms/form-file/form-file.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/forms/form-info/form-info.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/forms/form-input/form-input.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/forms/form-multiselect/form-multiselect.component.loc.mjs +4 -4
- package/{esm2020 → esm2022}/lib/forms/form-multiselect/form-multiselect.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/forms/form-select/form-select.component.loc.mjs +4 -4
- package/{esm2020 → esm2022}/lib/forms/form-select/form-select.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/forms/form-template/form-template.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/forms/form-textarea/form-textarea.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/forms/form-time/form-time.component.mjs +4 -4
- package/{esm2020 → esm2022}/lib/forms-and-validations.module.mjs +64 -64
- package/{esm2020 → esm2022}/lib/models/dayjs-adapter/dayjs-date-adapter.mjs +4 -4
- package/{esm2020 → esm2022}/lib/validations/base-validation.loc.mjs +4 -4
- package/{esm2020 → esm2022}/lib/validations/base-validation.mjs +4 -4
- package/{esm2020 → esm2022}/lib/validations/customValidators/CustomRequiredDirective.mjs +4 -4
- package/esm2022/lib/validations/validation-autocomplete/validation-autocomplete.component.mjs +147 -0
- package/esm2022/lib/validations/validation-autocomplete-multi/validation-autocomplete-multi.component.mjs +240 -0
- package/esm2022/lib/validations/validation-currency/validation-currency.component.mjs +75 -0
- package/esm2022/lib/validations/validation-date/validation-date.component.mjs +183 -0
- package/esm2022/lib/validations/validation-datetime/validation-datetime.component.mjs +212 -0
- package/esm2022/lib/validations/validation-input/validation-input.component.mjs +218 -0
- package/esm2022/lib/validations/validation-select/validation-select.component.mjs +183 -0
- package/esm2022/lib/validations/validation-text-area/validation-text-area.component.mjs +78 -0
- package/{fesm2020 → fesm2022}/esfaenza-forms-and-validations.mjs +218 -218
- package/{fesm2020 → fesm2022}/esfaenza-forms-and-validations.mjs.map +1 -1
- package/lib/forms/base-form-control.d.ts +1 -1
- package/lib/forms/form-adaptive/form-adaptive.component.d.ts +1 -1
- package/lib/forms/form-autocomplete/form-autocomplete.component.d.ts +1 -1
- package/lib/forms/form-checkbox/form-checkbox.component.d.ts +1 -1
- package/lib/forms/form-date/form-date.component.d.ts +1 -1
- package/lib/forms/form-datetime/form-datetime.component.d.ts +1 -1
- package/lib/forms/form-empty/form-empty.component.d.ts +1 -1
- package/lib/forms/form-error/form-error.component.d.ts +1 -1
- package/lib/forms/form-file/form-file.component.d.ts +1 -1
- package/lib/forms/form-info/form-info.component.d.ts +1 -1
- package/lib/forms/form-input/form-input.component.d.ts +1 -1
- package/lib/forms/form-multiselect/form-multiselect.component.d.ts +1 -1
- package/lib/forms/form-select/form-select.component.d.ts +1 -1
- package/lib/forms/form-template/form-template.component.d.ts +1 -1
- package/lib/forms/form-textarea/form-textarea.component.d.ts +1 -1
- package/lib/forms/form-time/form-time.component.d.ts +1 -1
- package/lib/validations/base-validation.d.ts +1 -1
- package/lib/validations/customValidators/CustomRequiredDirective.d.ts +1 -1
- package/lib/validations/validation-autocomplete/validation-autocomplete.component.d.ts +1 -1
- package/lib/validations/validation-autocomplete-multi/validation-autocomplete-multi.component.d.ts +1 -1
- package/lib/validations/validation-currency/validation-currency.component.d.ts +1 -1
- package/lib/validations/validation-date/validation-date.component.d.ts +1 -1
- package/lib/validations/validation-datetime/validation-datetime.component.d.ts +1 -1
- package/lib/validations/validation-input/validation-input.component.d.ts +1 -1
- package/lib/validations/validation-select/validation-select.component.d.ts +1 -1
- package/lib/validations/validation-text-area/validation-text-area.component.d.ts +1 -1
- package/package.json +20 -26
- package/esm2020/lib/validations/validation-autocomplete/validation-autocomplete.component.mjs +0 -147
- package/esm2020/lib/validations/validation-autocomplete-multi/validation-autocomplete-multi.component.mjs +0 -240
- package/esm2020/lib/validations/validation-currency/validation-currency.component.mjs +0 -75
- package/esm2020/lib/validations/validation-date/validation-date.component.mjs +0 -183
- package/esm2020/lib/validations/validation-datetime/validation-datetime.component.mjs +0 -212
- package/esm2020/lib/validations/validation-input/validation-input.component.mjs +0 -218
- package/esm2020/lib/validations/validation-select/validation-select.component.mjs +0 -183
- package/esm2020/lib/validations/validation-text-area/validation-text-area.component.mjs +0 -78
- package/fesm2015/esfaenza-forms-and-validations.mjs +0 -4314
- package/fesm2015/esfaenza-forms-and-validations.mjs.map +0 -1
- /package/{esm2020 → esm2022}/esfaenza-forms-and-validations.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/models/AppFile.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/models/ChangeEvent.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/models/FormsAndValidationsModuleConfig.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/tokens.mjs +0 -0
- /package/{esm2020 → esm2022}/public-api.mjs +0 -0
|
@@ -364,10 +364,10 @@ export class FormAdaptiveComponent extends BaseFormControl {
|
|
|
364
364
|
//Ricreo il timeout per eseguire quella funzione dopo throttleTime millisecondi
|
|
365
365
|
this.executionTimers[id] = setTimeout(() => { func(); this.executionTimers[id] = null; }, throttleTime);
|
|
366
366
|
}
|
|
367
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FormAdaptiveComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.UtilityService }, { token: i1.DateService }, { token: i2.NgxMatDateAdapter }, { token: i3.LocalizationService }, { token: i4.NgControl, optional: true, self: true }, { token: NG_VALIDATORS, optional: true }, { token: i5.AccessControlService }, { token: i5.ComponentContext, optional: true }, { token: ACO_CUSTOMKEY, optional: true }, { token: FAV_DEBUG_MODE, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
368
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: FormAdaptiveComponent, selector: "form-adaptive", inputs: { Type: "Type", TypeMissingMessage: "TypeMissingMessage", Pattern: "Pattern", AdjustNumber: "AdjustNumber", AllowDownload: "AllowDownload", Precision: "Precision", Alignment: "Alignment", SearchFunction: "SearchFunction", MinChars: "MinChars", CaseSensitive: "CaseSensitive", Options: "Options" }, providers: [{ provide: LocalizationService, useClass: FormAdaptiveComponentLoc }], viewQueries: [{ propertyName: "inputEl", first: true, predicate: ["fileInput"], descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<!-- Uguale in tutti i componenti --------------------------------------------------------------------------->\r\n<ng-container *ngIf=\"!FormLayout && (!DisplayMode || (DisplayLayout != 'hidden' && DisplayCondition))\">\r\n <ng-container *ngIf=\"DisplayMode && !DisplayModeTemplate\">\r\n <ng-container *ngIf=\"DisplayLayout == 'form'\">{{ EvaluatedModel }}</ng-container>\r\n <div *ngIf=\"DisplayLayout == 'inline'\" class=\"app-inline\">{{ EvaluatedModel }}</div>\r\n </ng-container>\r\n <ng-container *ngIf=\"DisplayMode && DisplayModeTemplate\"><ng-container *ngTemplateOutlet=\"DisplayModeTemplate, context: { $implicit: EvaluatedModel }\"></ng-container></ng-container>\r\n <div [hidden]=\"DisplayMode\"><ng-container *ngTemplateOutlet=\"controlTemplate\"></ng-container></div>\r\n</ng-container>\r\n\r\n<div *ngIf=\"FormLayout && (!DisplayMode || (DisplayLayout != 'hidden' && DisplayCondition))\" class=\"{{FormGroupClass + (Last ? ' app-margin-bottom-0 app-margin-right-0 ' : '') + (DisplayLayout == 'inline' && DisplayMode ? (' app-inline-block ' + (!Last ? 'app-margin-right-10' : '')) : ' form-group row')}}\">\r\n\r\n <label class=\"col-md-{{(DisplayMode && DisplayLayout == 'inline' ? 'none app-bold app-margin-bottom-0' : LabelColWidth) + (DisplayMode ? ' app-bold' : ' m-t-5') }}\">{{Label}}{{Required && !DisplayMode ? '*' : ''}}{{Label ? \":\" : \"\"}}</label>\r\n <span *ngIf=\"DisplayMode && DisplayLayout == 'inline' && InlineSeparator != ''\">{{InlineSeparator}}</span>\r\n <div class=\"col-md-{{DisplayMode && DisplayLayout == 'inline' ? 'none app-inline-block' : InputColWidth}}\">\r\n\r\n <ng-container *ngIf=\"DisplayMode && !DisplayModeTemplate\">{{ EvaluatedModel }}</ng-container>\r\n <ng-container *ngIf=\"DisplayMode && DisplayModeTemplate\"><ng-container *ngTemplateOutlet=\"DisplayModeTemplate, context: { $implicit: EvaluatedModel }\"></ng-container></ng-container>\r\n <div [hidden]=\"DisplayMode\"><ng-container *ngTemplateOutlet=\"controlTemplate\"></ng-container></div>\r\n </div>\r\n <div class=\"clearfix\"></div>\r\n</div>\r\n<!----------------------------------------------------------------------------------------------------------->\r\n\r\n<ng-template #controlTemplate>\r\n <div *ngIf=\"!Type\" class=\"app-margin-top-5\">\r\n <em>{{TypeMissingMessage}}</em>\r\n </div>\r\n \r\n <!--Se currency-->\r\n <div *ngIf=\"Type == 'currency'\">\r\n <val-currency #validationControl=\"ngModel\" [FocusSubject]=\"FocusSubject\" [SetValidationSubject]=\"SetValidationSubject\" [FieldAppearence]=\"FieldAppearence\" [forceInvalid]=\"ForcedError\" [FloatingLabel]=\"FloatingLabel\"\r\n [CurrencyOptions]=\"{ prefix: '', thousands: '.', decimal: ',', precision: Precision, align: Alignment }\" [noValidate]=\"!Validation\"\r\n type=\"text\" [Readonly]=\"Readonly\" [submitted]=\"Form?.submitted\" [required]=\"Required\" [(ngModel)]=\"Model\" [id]=\"GeneratedName\" name=\"{{GeneratedName}}\" autocomplete=\"off\" (inputChange)=\"changed();\" (inputFocus)=\"focused($event);\" (inputFinalized)=\"finalized()\"></val-currency>\r\n </div>\r\n <!--Se data-->\r\n <div *ngIf=\"Type == 'date'\">\r\n <val-date #validationControl=\"ngModel\" [FocusSubject]=\"FocusSubject\" [SetValidationSubject]=\"SetValidationSubject\" [FieldAppearence]=\"FieldAppearence\" [forceInvalid]=\"ForcedError\" [FloatingLabel]=\"FloatingLabel\" [noValidate]=\"!Validation\" [Readonly]=\"Readonly\" [submitted]=\"Form?.submitted\" [required]=\"Required\" [(ngModel)]=\"Model\" [id]=\"GeneratedName\" [useJsDates]=\"useJsDates\" name=\"{{GeneratedName}}\" autocomplete=\"off\" (inputChange)=\"changed($event);\" (inputFocus)=\"focused($event);\" (inputFinalized)=\"finalized()\"></val-date>\r\n </div>\r\n <!--Se stringa-->\r\n <div *ngIf=\"Type == 'string'\">\r\n <val-input #validationControl=\"ngModel\" [FocusSubject]=\"FocusSubject\" [SetValidationSubject]=\"SetValidationSubject\" [FieldAppearence]=\"FieldAppearence\" [forceInvalid]=\"ForcedError\" [FloatingLabel]=\"FloatingLabel\" [noValidate]=\"!Validation\" [Readonly]=\"Readonly\" [submitted]=\"Form?.submitted\" type=\"text\" pattern=\"{{Pattern || ''}}\" [required]=\"Required\" [placeholder]=\"Placeholder\" [(ngModel)]=\"Model\" [id]=\"GeneratedName\" name=\"{{GeneratedName}}\" autocomplete=\"off\" (inputChange)=\"changed($event);\" (inputFocus)=\"focused($event);\" (inputFinalized)=\"finalized()\"></val-input>\r\n </div>\r\n <!--Se numero-->\r\n <div *ngIf=\"Type == 'float' || Type == 'number'\">\r\n <val-input #validationControl=\"ngModel\" [FocusSubject]=\"FocusSubject\" [SetValidationSubject]=\"SetValidationSubject\" [FieldAppearence]=\"FieldAppearence\" [forceInvalid]=\"ForcedError\" [FloatingLabel]=\"FloatingLabel\" [noValidate]=\"!Validation\" [Readonly]=\"Readonly\" [submitted]=\"Form?.submitted\" type=\"text\" pattern=\"{{Pattern || FloatPattern}}\" [required]=\"Required\" [placeholder]=\"Placeholder\" [(ngModel)]=\"Model\" [id]=\"GeneratedName\" name=\"{{GeneratedName}}\" autocomplete=\"off\" (inputChange)=\"changed($event);\" (inputFocus)=\"focused($event);\" (inputFinalized)=\"finalized()\"></val-input>\r\n </div>\r\n <!--Se numero intero-->\r\n <div *ngIf=\"Type == 'int'\">\r\n <val-input #validationControl=\"ngModel\" [FocusSubject]=\"FocusSubject\" [SetValidationSubject]=\"SetValidationSubject\" [FieldAppearence]=\"FieldAppearence\" [forceInvalid]=\"ForcedError\" [FloatingLabel]=\"FloatingLabel\" [noValidate]=\"!Validation\" [Readonly]=\"Readonly\" [submitted]=\"Form?.submitted\" type=\"text\" pattern=\"{{Pattern || IntPattern}}\" [required]=\"Required\" [placeholder]=\"Placeholder\" [(ngModel)]=\"Model\" [id]=\"GeneratedName\" name=\"{{GeneratedName}}\" autocomplete=\"off\" (inputChange)=\"changed($event);\" (inputFocus)=\"focused($event);\" (inputFinalized)=\"finalized()\"></val-input>\r\n </div>\r\n <!--Se boolean-->\r\n <div class=\"m-t-5\" *ngIf=\"Type == 'boolean'\">\r\n <input #validationControl=\"ngModel\" [readonly]=\"Readonly\" type=\"checkbox\" class=\"app-pointer\" [(ngModel)]=\"Model\" id=\"{{GeneratedName}}\" name=\"{{GeneratedName}}\" (ngModelChange)=\"changed(); finalized();\" (click)=\"focused($event);\" />\r\n </div>\r\n <!--Se enum-->\r\n <div *ngIf=\"Type == 'enum'\">\r\n <val-select #validationControl=\"ngModel\" [FocusSubject]=\"FocusSubject\" [SetValidationSubject]=\"SetValidationSubject\" [FieldAppearence]=\"FieldAppearence\" [forceInvalid]=\"ForcedError\" [noValidate]=\"!Validation\" [Readonly]=\"Readonly\" [submitted]=\"Form?.submitted\" [placeHolderValue]=\"''\" [placeholder]=\"Required ? ('Select' | localize : lc) + '...' : Placeholder\" [required]=\"Required\" [(ngModel)]=\"Model\" (inputChange)=\"changed($event);\" (inputFocus)=\"focused($event);\" (inputFinalized)=\"finalized()\" [id]=\"GeneratedName\" name=\"{{GeneratedName}}\">\r\n <option *ngFor=\"let val of BoundSource\" [value]=\"val.id\">{{val.description}}</option>\r\n </val-select>\r\n </div>\r\n <!--Se autocomplete-->\r\n <div *ngIf=\"Type == 'autocomplete'\">\r\n <val-autocomplete #validationControl=\"ngModel\" [FocusSubject]=\"FocusSubject\" [SetValidationSubject]=\"SetValidationSubject\" [FieldAppearence]=\"FieldAppearence\" [forceInvalid]=\"ForcedError\" [noValidate]=\"!Validation\" [Readonly]=\"Readonly\" [submitted]=\"Form?.submitted\" [required]=\"Required\" [placeholder]=\"Required ? ('Select' | localize : lc) + '...' : Placeholder\" [(ngModel)]=\"Model\" [id]=\"GeneratedName\" name=\"{{GeneratedName}}\" [FilteredSource]=\"FilteredBoundSource\" (inputChange)=\"filterSource($event); changed($event);\" (inputFocus)=\"focused($event);\" (inputFinalized)=\"finalized()\"></val-autocomplete>\r\n </div>\r\n <!--Se date time-->\r\n <div *ngIf=\"Type == 'datetime'\">\r\n <val-datetime #validationControl=\"ngModel\" [FocusSubject]=\"FocusSubject\" [SetValidationSubject]=\"SetValidationSubject\" [FieldAppearence]=\"FieldAppearence\" [forceInvalid]=\"ForcedError\" [FloatingLabel]=\"FloatingLabel\" [noValidate]=\"!Validation\" [Readonly]=\"Readonly\" [submitted]=\"Form?.submitted\" [required]=\"Required\" [useJsDates]=\"useJsDates\" [(ngModel)]=\"Model\" [id]=\"GeneratedName\" name=\"{{GeneratedName}}\" autocomplete=\"off\" (inputChange)=\"changed($event);\" (inputFocus)=\"focused($event);\" (inputFinalized)=\"finalized()\"></val-datetime>\r\n </div>\r\n <!--Se time-->\r\n <div *ngIf=\"Type == 'time'\">\r\n <ngx-mat-timepicker name=\"val-time\" #elementRef #baseInput=\"ngModel\" [(ngModel)]=\"Model\" [disabled]=\"Readonly\"\r\n [showSpinners]=\"false\" [stepHour]=\"2\" [stepMinute]=\"5\" [stepSecond]=\"30\"\r\n [showSeconds]=\"true\" (ngModelChange)=\"changed()\" #validationControl=\"ngModel\">\r\n </ngx-mat-timepicker>\r\n </div>\r\n <!--Se file-->\r\n <div *ngIf=\"Type == 'file'\">\r\n <div class=\"input-group file-upload\">\r\n <input type=\"file\" (change)=\"fileChange()\" #fileInput id=\"{{GeneratedName}}\" class=\"file-upload-btn app-pointer\" [multiple]=\"null\"/>\r\n <input type=\"text\" [class.frm-padding-left-22]=\"AllowDownload && ModelFile.filename && ModelFile.fileb64\" class=\"form-control checking-field\" placeholder=\"{{'Select a file' | localize : lc}}...\" [(ngModel)]=\"ModelFile.filename\" name=\"dsfile\" #validationControl=\"ngModel\" [required]=\"Required\"/>\r\n \r\n <a class=\"fa fa-download app-pointer app-input-icon\" *ngIf=\"AllowDownload && ModelFile.filename && ModelFile.fileb64\" (click)=\"downloadAttachment()\"></a>\r\n <i class=\"fa fa-times delete-file\" (click)=\"fileChange(true)\" *ngIf=\"ModelFile.filename\"></i>\r\n <span class=\"input-group-btn\">\r\n <button class=\"btn btn-primary btn-file-upload\" type=\"button\"><i class=\"fa fa-upload\"></i></button>\r\n </span>\r\n </div>\r\n </div>\r\n</ng-template>", styles: [".frm-padding-left-22{padding-left:22px}.drop-container{position:relative;display:flex;gap:10px;flex-direction:column;justify-content:center;align-items:center;height:200px;padding:20px;border-radius:10px;border:2px dashed #0d45a5;color:#444;cursor:pointer;transition:background .2s ease-in-out,border .2s ease-in-out}.drop-container:hover{background:#eee;border-color:#111}.drop-container:hover .drop-title{color:#222}.drop-title{color:#444;font-size:20px;font-weight:700;text-align:center;transition:color .2s ease-in-out}input[type=file]{width:350px;max-width:100%;color:#444;padding:5px;background:#fff;border-radius:10px;border:1px solid #555}input[type=file]::file-selector-button{margin-right:20px;border:none;background:#084cdf;padding:10px 20px;border-radius:10px;color:#fff;cursor:pointer;transition:background .2s ease-in-out}input[type=file]::file-selector-button:hover{background:#0d45a5}.file-download-btn{border-radius:5px;padding:5px 10px;background-color:#0d45a5}.file-download-btn:hover{background-color:#084cdf}.file-download-btn-text{color:#fff}.file-delete-btn{color:red;position:absolute;right:10px;top:10px}.file-name-container{width:100%;white-space:nowrap;text-overflow:ellipsis;overflow-y:clip;text-align:center}\n"], dependencies: [{ kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i4.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i4.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { 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.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i4.PatternValidator, selector: "[pattern][formControlName],[pattern][formControl],[pattern][ngModel]", inputs: ["pattern"] }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i2.NgxMatTimepickerComponent, selector: "ngx-mat-timepicker", inputs: ["disabled", "showSpinners", "stepHour", "stepMinute", "stepSecond", "showSeconds", "disableMinute", "enableMeridian", "defaultTime", "color"], exportAs: ["ngxMatTimepicker"] }, { kind: "component", type: i7.ValidationInputComponent, selector: "val-input", inputs: ["Frozen", "Password", "showWarning", "warningTitle", "warningClass", "value", "Type"] }, { kind: "component", type: i8.ValidationSelectComponent, selector: "val-select", inputs: ["emptyFieldValue", "placeHolderValue", "emptyValue", "showValidationSymbol", "label"], outputs: ["onBlur"] }, { kind: "component", type: i9.ValidationDateComponent, selector: "val-date", inputs: ["useJsDates"] }, { kind: "component", type: i10.ValidationCurrencyComponent, selector: "val-currency", inputs: ["CurrencyOptions"] }, { kind: "component", type: i11.ValidationAutocompleteComponent, selector: "val-autocomplete", inputs: ["FilteredSource", "value", "label"], outputs: ["optionChange"] }, { kind: "component", type: i12.ValidationDateTimeComponent, selector: "val-datetime", inputs: ["useJsDates"] }, { kind: "pipe", type: i3.LocalizePipe, name: "localize" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
367
369
|
}
|
|
368
|
-
|
|
369
|
-
FormAdaptiveComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: FormAdaptiveComponent, selector: "form-adaptive", inputs: { Type: "Type", TypeMissingMessage: "TypeMissingMessage", Pattern: "Pattern", AdjustNumber: "AdjustNumber", AllowDownload: "AllowDownload", Precision: "Precision", Alignment: "Alignment", SearchFunction: "SearchFunction", MinChars: "MinChars", CaseSensitive: "CaseSensitive", Options: "Options" }, providers: [{ provide: LocalizationService, useClass: FormAdaptiveComponentLoc }], viewQueries: [{ propertyName: "inputEl", first: true, predicate: ["fileInput"], descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<!-- Uguale in tutti i componenti --------------------------------------------------------------------------->\r\n<ng-container *ngIf=\"!FormLayout && (!DisplayMode || (DisplayLayout != 'hidden' && DisplayCondition))\">\r\n <ng-container *ngIf=\"DisplayMode && !DisplayModeTemplate\">\r\n <ng-container *ngIf=\"DisplayLayout == 'form'\">{{ EvaluatedModel }}</ng-container>\r\n <div *ngIf=\"DisplayLayout == 'inline'\" class=\"app-inline\">{{ EvaluatedModel }}</div>\r\n </ng-container>\r\n <ng-container *ngIf=\"DisplayMode && DisplayModeTemplate\"><ng-container *ngTemplateOutlet=\"DisplayModeTemplate, context: { $implicit: EvaluatedModel }\"></ng-container></ng-container>\r\n <div [hidden]=\"DisplayMode\"><ng-container *ngTemplateOutlet=\"controlTemplate\"></ng-container></div>\r\n</ng-container>\r\n\r\n<div *ngIf=\"FormLayout && (!DisplayMode || (DisplayLayout != 'hidden' && DisplayCondition))\" class=\"{{FormGroupClass + (Last ? ' app-margin-bottom-0 app-margin-right-0 ' : '') + (DisplayLayout == 'inline' && DisplayMode ? (' app-inline-block ' + (!Last ? 'app-margin-right-10' : '')) : ' form-group row')}}\">\r\n\r\n <label class=\"col-md-{{(DisplayMode && DisplayLayout == 'inline' ? 'none app-bold app-margin-bottom-0' : LabelColWidth) + (DisplayMode ? ' app-bold' : ' m-t-5') }}\">{{Label}}{{Required && !DisplayMode ? '*' : ''}}{{Label ? \":\" : \"\"}}</label>\r\n <span *ngIf=\"DisplayMode && DisplayLayout == 'inline' && InlineSeparator != ''\">{{InlineSeparator}}</span>\r\n <div class=\"col-md-{{DisplayMode && DisplayLayout == 'inline' ? 'none app-inline-block' : InputColWidth}}\">\r\n\r\n <ng-container *ngIf=\"DisplayMode && !DisplayModeTemplate\">{{ EvaluatedModel }}</ng-container>\r\n <ng-container *ngIf=\"DisplayMode && DisplayModeTemplate\"><ng-container *ngTemplateOutlet=\"DisplayModeTemplate, context: { $implicit: EvaluatedModel }\"></ng-container></ng-container>\r\n <div [hidden]=\"DisplayMode\"><ng-container *ngTemplateOutlet=\"controlTemplate\"></ng-container></div>\r\n </div>\r\n <div class=\"clearfix\"></div>\r\n</div>\r\n<!----------------------------------------------------------------------------------------------------------->\r\n\r\n<ng-template #controlTemplate>\r\n <div *ngIf=\"!Type\" class=\"app-margin-top-5\">\r\n <em>{{TypeMissingMessage}}</em>\r\n </div>\r\n \r\n <!--Se currency-->\r\n <div *ngIf=\"Type == 'currency'\">\r\n <val-currency #validationControl=\"ngModel\" [FocusSubject]=\"FocusSubject\" [SetValidationSubject]=\"SetValidationSubject\" [FieldAppearence]=\"FieldAppearence\" [forceInvalid]=\"ForcedError\" [FloatingLabel]=\"FloatingLabel\"\r\n [CurrencyOptions]=\"{ prefix: '', thousands: '.', decimal: ',', precision: Precision, align: Alignment }\" [noValidate]=\"!Validation\"\r\n type=\"text\" [Readonly]=\"Readonly\" [submitted]=\"Form?.submitted\" [required]=\"Required\" [(ngModel)]=\"Model\" [id]=\"GeneratedName\" name=\"{{GeneratedName}}\" autocomplete=\"off\" (inputChange)=\"changed();\" (inputFocus)=\"focused($event);\" (inputFinalized)=\"finalized()\"></val-currency>\r\n </div>\r\n <!--Se data-->\r\n <div *ngIf=\"Type == 'date'\">\r\n <val-date #validationControl=\"ngModel\" [FocusSubject]=\"FocusSubject\" [SetValidationSubject]=\"SetValidationSubject\" [FieldAppearence]=\"FieldAppearence\" [forceInvalid]=\"ForcedError\" [FloatingLabel]=\"FloatingLabel\" [noValidate]=\"!Validation\" [Readonly]=\"Readonly\" [submitted]=\"Form?.submitted\" [required]=\"Required\" [(ngModel)]=\"Model\" [id]=\"GeneratedName\" [useJsDates]=\"useJsDates\" name=\"{{GeneratedName}}\" autocomplete=\"off\" (inputChange)=\"changed($event);\" (inputFocus)=\"focused($event);\" (inputFinalized)=\"finalized()\"></val-date>\r\n </div>\r\n <!--Se stringa-->\r\n <div *ngIf=\"Type == 'string'\">\r\n <val-input #validationControl=\"ngModel\" [FocusSubject]=\"FocusSubject\" [SetValidationSubject]=\"SetValidationSubject\" [FieldAppearence]=\"FieldAppearence\" [forceInvalid]=\"ForcedError\" [FloatingLabel]=\"FloatingLabel\" [noValidate]=\"!Validation\" [Readonly]=\"Readonly\" [submitted]=\"Form?.submitted\" type=\"text\" pattern=\"{{Pattern || ''}}\" [required]=\"Required\" [placeholder]=\"Placeholder\" [(ngModel)]=\"Model\" [id]=\"GeneratedName\" name=\"{{GeneratedName}}\" autocomplete=\"off\" (inputChange)=\"changed($event);\" (inputFocus)=\"focused($event);\" (inputFinalized)=\"finalized()\"></val-input>\r\n </div>\r\n <!--Se numero-->\r\n <div *ngIf=\"Type == 'float' || Type == 'number'\">\r\n <val-input #validationControl=\"ngModel\" [FocusSubject]=\"FocusSubject\" [SetValidationSubject]=\"SetValidationSubject\" [FieldAppearence]=\"FieldAppearence\" [forceInvalid]=\"ForcedError\" [FloatingLabel]=\"FloatingLabel\" [noValidate]=\"!Validation\" [Readonly]=\"Readonly\" [submitted]=\"Form?.submitted\" type=\"text\" pattern=\"{{Pattern || FloatPattern}}\" [required]=\"Required\" [placeholder]=\"Placeholder\" [(ngModel)]=\"Model\" [id]=\"GeneratedName\" name=\"{{GeneratedName}}\" autocomplete=\"off\" (inputChange)=\"changed($event);\" (inputFocus)=\"focused($event);\" (inputFinalized)=\"finalized()\"></val-input>\r\n </div>\r\n <!--Se numero intero-->\r\n <div *ngIf=\"Type == 'int'\">\r\n <val-input #validationControl=\"ngModel\" [FocusSubject]=\"FocusSubject\" [SetValidationSubject]=\"SetValidationSubject\" [FieldAppearence]=\"FieldAppearence\" [forceInvalid]=\"ForcedError\" [FloatingLabel]=\"FloatingLabel\" [noValidate]=\"!Validation\" [Readonly]=\"Readonly\" [submitted]=\"Form?.submitted\" type=\"text\" pattern=\"{{Pattern || IntPattern}}\" [required]=\"Required\" [placeholder]=\"Placeholder\" [(ngModel)]=\"Model\" [id]=\"GeneratedName\" name=\"{{GeneratedName}}\" autocomplete=\"off\" (inputChange)=\"changed($event);\" (inputFocus)=\"focused($event);\" (inputFinalized)=\"finalized()\"></val-input>\r\n </div>\r\n <!--Se boolean-->\r\n <div class=\"m-t-5\" *ngIf=\"Type == 'boolean'\">\r\n <input #validationControl=\"ngModel\" [readonly]=\"Readonly\" type=\"checkbox\" class=\"app-pointer\" [(ngModel)]=\"Model\" id=\"{{GeneratedName}}\" name=\"{{GeneratedName}}\" (ngModelChange)=\"changed(); finalized();\" (click)=\"focused($event);\" />\r\n </div>\r\n <!--Se enum-->\r\n <div *ngIf=\"Type == 'enum'\">\r\n <val-select #validationControl=\"ngModel\" [FocusSubject]=\"FocusSubject\" [SetValidationSubject]=\"SetValidationSubject\" [FieldAppearence]=\"FieldAppearence\" [forceInvalid]=\"ForcedError\" [noValidate]=\"!Validation\" [Readonly]=\"Readonly\" [submitted]=\"Form?.submitted\" [placeHolderValue]=\"''\" [placeholder]=\"Required ? ('Select' | localize : lc) + '...' : Placeholder\" [required]=\"Required\" [(ngModel)]=\"Model\" (inputChange)=\"changed($event);\" (inputFocus)=\"focused($event);\" (inputFinalized)=\"finalized()\" [id]=\"GeneratedName\" name=\"{{GeneratedName}}\">\r\n <option *ngFor=\"let val of BoundSource\" [value]=\"val.id\">{{val.description}}</option>\r\n </val-select>\r\n </div>\r\n <!--Se autocomplete-->\r\n <div *ngIf=\"Type == 'autocomplete'\">\r\n <val-autocomplete #validationControl=\"ngModel\" [FocusSubject]=\"FocusSubject\" [SetValidationSubject]=\"SetValidationSubject\" [FieldAppearence]=\"FieldAppearence\" [forceInvalid]=\"ForcedError\" [noValidate]=\"!Validation\" [Readonly]=\"Readonly\" [submitted]=\"Form?.submitted\" [required]=\"Required\" [placeholder]=\"Required ? ('Select' | localize : lc) + '...' : Placeholder\" [(ngModel)]=\"Model\" [id]=\"GeneratedName\" name=\"{{GeneratedName}}\" [FilteredSource]=\"FilteredBoundSource\" (inputChange)=\"filterSource($event); changed($event);\" (inputFocus)=\"focused($event);\" (inputFinalized)=\"finalized()\"></val-autocomplete>\r\n </div>\r\n <!--Se date time-->\r\n <div *ngIf=\"Type == 'datetime'\">\r\n <val-datetime #validationControl=\"ngModel\" [FocusSubject]=\"FocusSubject\" [SetValidationSubject]=\"SetValidationSubject\" [FieldAppearence]=\"FieldAppearence\" [forceInvalid]=\"ForcedError\" [FloatingLabel]=\"FloatingLabel\" [noValidate]=\"!Validation\" [Readonly]=\"Readonly\" [submitted]=\"Form?.submitted\" [required]=\"Required\" [useJsDates]=\"useJsDates\" [(ngModel)]=\"Model\" [id]=\"GeneratedName\" name=\"{{GeneratedName}}\" autocomplete=\"off\" (inputChange)=\"changed($event);\" (inputFocus)=\"focused($event);\" (inputFinalized)=\"finalized()\"></val-datetime>\r\n </div>\r\n <!--Se time-->\r\n <div *ngIf=\"Type == 'time'\">\r\n <ngx-mat-timepicker name=\"val-time\" #elementRef #baseInput=\"ngModel\" [(ngModel)]=\"Model\" [disabled]=\"Readonly\"\r\n [showSpinners]=\"false\" [stepHour]=\"2\" [stepMinute]=\"5\" [stepSecond]=\"30\"\r\n [showSeconds]=\"true\" (ngModelChange)=\"changed()\" #validationControl=\"ngModel\">\r\n </ngx-mat-timepicker>\r\n </div>\r\n <!--Se file-->\r\n <div *ngIf=\"Type == 'file'\">\r\n <div class=\"input-group file-upload\">\r\n <input type=\"file\" (change)=\"fileChange()\" #fileInput id=\"{{GeneratedName}}\" class=\"file-upload-btn app-pointer\" [multiple]=\"null\"/>\r\n <input type=\"text\" [class.frm-padding-left-22]=\"AllowDownload && ModelFile.filename && ModelFile.fileb64\" class=\"form-control checking-field\" placeholder=\"{{'Select a file' | localize : lc}}...\" [(ngModel)]=\"ModelFile.filename\" name=\"dsfile\" #validationControl=\"ngModel\" [required]=\"Required\"/>\r\n \r\n <a class=\"fa fa-download app-pointer app-input-icon\" *ngIf=\"AllowDownload && ModelFile.filename && ModelFile.fileb64\" (click)=\"downloadAttachment()\"></a>\r\n <i class=\"fa fa-times delete-file\" (click)=\"fileChange(true)\" *ngIf=\"ModelFile.filename\"></i>\r\n <span class=\"input-group-btn\">\r\n <button class=\"btn btn-primary btn-file-upload\" type=\"button\"><i class=\"fa fa-upload\"></i></button>\r\n </span>\r\n </div>\r\n </div>\r\n</ng-template>", styles: [".frm-padding-left-22{padding-left:22px}.drop-container{position:relative;display:flex;gap:10px;flex-direction:column;justify-content:center;align-items:center;height:200px;padding:20px;border-radius:10px;border:2px dashed #0d45a5;color:#444;cursor:pointer;transition:background .2s ease-in-out,border .2s ease-in-out}.drop-container:hover{background:#eee;border-color:#111}.drop-container:hover .drop-title{color:#222}.drop-title{color:#444;font-size:20px;font-weight:700;text-align:center;transition:color .2s ease-in-out}input[type=file]{width:350px;max-width:100%;color:#444;padding:5px;background:#fff;border-radius:10px;border:1px solid #555}input[type=file]::file-selector-button{margin-right:20px;border:none;background:#084cdf;padding:10px 20px;border-radius:10px;color:#fff;cursor:pointer;transition:background .2s ease-in-out}input[type=file]::file-selector-button:hover{background:#0d45a5}.file-download-btn{border-radius:5px;padding:5px 10px;background-color:#0d45a5}.file-download-btn:hover{background-color:#084cdf}.file-download-btn-text{color:#fff}.file-delete-btn{color:red;position:absolute;right:10px;top:10px}.file-name-container{width:100%;white-space:nowrap;text-overflow:ellipsis;overflow-y:clip;text-align:center}\n"], dependencies: [{ kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i4.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i4.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { 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.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i4.PatternValidator, selector: "[pattern][formControlName],[pattern][formControl],[pattern][ngModel]", inputs: ["pattern"] }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i2.NgxMatTimepickerComponent, selector: "ngx-mat-timepicker", inputs: ["disabled", "showSpinners", "stepHour", "stepMinute", "stepSecond", "showSeconds", "disableMinute", "enableMeridian", "defaultTime", "color"], exportAs: ["ngxMatTimepicker"] }, { kind: "component", type: i7.ValidationInputComponent, selector: "val-input", inputs: ["Frozen", "Password", "showWarning", "warningTitle", "warningClass", "value", "Type"] }, { kind: "component", type: i8.ValidationSelectComponent, selector: "val-select", inputs: ["emptyFieldValue", "placeHolderValue", "emptyValue", "showValidationSymbol", "label"], outputs: ["onBlur"] }, { kind: "component", type: i9.ValidationDateComponent, selector: "val-date", inputs: ["useJsDates"] }, { kind: "component", type: i10.ValidationCurrencyComponent, selector: "val-currency", inputs: ["CurrencyOptions"] }, { kind: "component", type: i11.ValidationAutocompleteComponent, selector: "val-autocomplete", inputs: ["FilteredSource", "value", "label"], outputs: ["optionChange"] }, { kind: "component", type: i12.ValidationDateTimeComponent, selector: "val-datetime", inputs: ["useJsDates"] }, { kind: "pipe", type: i3.LocalizePipe, name: "localize" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
370
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FormAdaptiveComponent, decorators: [{
|
|
370
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FormAdaptiveComponent, decorators: [{
|
|
371
371
|
type: Component,
|
|
372
372
|
args: [{ selector: "form-adaptive", providers: [{ provide: LocalizationService, useClass: FormAdaptiveComponentLoc }], changeDetection: ChangeDetectionStrategy.OnPush, template: "<!-- Uguale in tutti i componenti --------------------------------------------------------------------------->\r\n<ng-container *ngIf=\"!FormLayout && (!DisplayMode || (DisplayLayout != 'hidden' && DisplayCondition))\">\r\n <ng-container *ngIf=\"DisplayMode && !DisplayModeTemplate\">\r\n <ng-container *ngIf=\"DisplayLayout == 'form'\">{{ EvaluatedModel }}</ng-container>\r\n <div *ngIf=\"DisplayLayout == 'inline'\" class=\"app-inline\">{{ EvaluatedModel }}</div>\r\n </ng-container>\r\n <ng-container *ngIf=\"DisplayMode && DisplayModeTemplate\"><ng-container *ngTemplateOutlet=\"DisplayModeTemplate, context: { $implicit: EvaluatedModel }\"></ng-container></ng-container>\r\n <div [hidden]=\"DisplayMode\"><ng-container *ngTemplateOutlet=\"controlTemplate\"></ng-container></div>\r\n</ng-container>\r\n\r\n<div *ngIf=\"FormLayout && (!DisplayMode || (DisplayLayout != 'hidden' && DisplayCondition))\" class=\"{{FormGroupClass + (Last ? ' app-margin-bottom-0 app-margin-right-0 ' : '') + (DisplayLayout == 'inline' && DisplayMode ? (' app-inline-block ' + (!Last ? 'app-margin-right-10' : '')) : ' form-group row')}}\">\r\n\r\n <label class=\"col-md-{{(DisplayMode && DisplayLayout == 'inline' ? 'none app-bold app-margin-bottom-0' : LabelColWidth) + (DisplayMode ? ' app-bold' : ' m-t-5') }}\">{{Label}}{{Required && !DisplayMode ? '*' : ''}}{{Label ? \":\" : \"\"}}</label>\r\n <span *ngIf=\"DisplayMode && DisplayLayout == 'inline' && InlineSeparator != ''\">{{InlineSeparator}}</span>\r\n <div class=\"col-md-{{DisplayMode && DisplayLayout == 'inline' ? 'none app-inline-block' : InputColWidth}}\">\r\n\r\n <ng-container *ngIf=\"DisplayMode && !DisplayModeTemplate\">{{ EvaluatedModel }}</ng-container>\r\n <ng-container *ngIf=\"DisplayMode && DisplayModeTemplate\"><ng-container *ngTemplateOutlet=\"DisplayModeTemplate, context: { $implicit: EvaluatedModel }\"></ng-container></ng-container>\r\n <div [hidden]=\"DisplayMode\"><ng-container *ngTemplateOutlet=\"controlTemplate\"></ng-container></div>\r\n </div>\r\n <div class=\"clearfix\"></div>\r\n</div>\r\n<!----------------------------------------------------------------------------------------------------------->\r\n\r\n<ng-template #controlTemplate>\r\n <div *ngIf=\"!Type\" class=\"app-margin-top-5\">\r\n <em>{{TypeMissingMessage}}</em>\r\n </div>\r\n \r\n <!--Se currency-->\r\n <div *ngIf=\"Type == 'currency'\">\r\n <val-currency #validationControl=\"ngModel\" [FocusSubject]=\"FocusSubject\" [SetValidationSubject]=\"SetValidationSubject\" [FieldAppearence]=\"FieldAppearence\" [forceInvalid]=\"ForcedError\" [FloatingLabel]=\"FloatingLabel\"\r\n [CurrencyOptions]=\"{ prefix: '', thousands: '.', decimal: ',', precision: Precision, align: Alignment }\" [noValidate]=\"!Validation\"\r\n type=\"text\" [Readonly]=\"Readonly\" [submitted]=\"Form?.submitted\" [required]=\"Required\" [(ngModel)]=\"Model\" [id]=\"GeneratedName\" name=\"{{GeneratedName}}\" autocomplete=\"off\" (inputChange)=\"changed();\" (inputFocus)=\"focused($event);\" (inputFinalized)=\"finalized()\"></val-currency>\r\n </div>\r\n <!--Se data-->\r\n <div *ngIf=\"Type == 'date'\">\r\n <val-date #validationControl=\"ngModel\" [FocusSubject]=\"FocusSubject\" [SetValidationSubject]=\"SetValidationSubject\" [FieldAppearence]=\"FieldAppearence\" [forceInvalid]=\"ForcedError\" [FloatingLabel]=\"FloatingLabel\" [noValidate]=\"!Validation\" [Readonly]=\"Readonly\" [submitted]=\"Form?.submitted\" [required]=\"Required\" [(ngModel)]=\"Model\" [id]=\"GeneratedName\" [useJsDates]=\"useJsDates\" name=\"{{GeneratedName}}\" autocomplete=\"off\" (inputChange)=\"changed($event);\" (inputFocus)=\"focused($event);\" (inputFinalized)=\"finalized()\"></val-date>\r\n </div>\r\n <!--Se stringa-->\r\n <div *ngIf=\"Type == 'string'\">\r\n <val-input #validationControl=\"ngModel\" [FocusSubject]=\"FocusSubject\" [SetValidationSubject]=\"SetValidationSubject\" [FieldAppearence]=\"FieldAppearence\" [forceInvalid]=\"ForcedError\" [FloatingLabel]=\"FloatingLabel\" [noValidate]=\"!Validation\" [Readonly]=\"Readonly\" [submitted]=\"Form?.submitted\" type=\"text\" pattern=\"{{Pattern || ''}}\" [required]=\"Required\" [placeholder]=\"Placeholder\" [(ngModel)]=\"Model\" [id]=\"GeneratedName\" name=\"{{GeneratedName}}\" autocomplete=\"off\" (inputChange)=\"changed($event);\" (inputFocus)=\"focused($event);\" (inputFinalized)=\"finalized()\"></val-input>\r\n </div>\r\n <!--Se numero-->\r\n <div *ngIf=\"Type == 'float' || Type == 'number'\">\r\n <val-input #validationControl=\"ngModel\" [FocusSubject]=\"FocusSubject\" [SetValidationSubject]=\"SetValidationSubject\" [FieldAppearence]=\"FieldAppearence\" [forceInvalid]=\"ForcedError\" [FloatingLabel]=\"FloatingLabel\" [noValidate]=\"!Validation\" [Readonly]=\"Readonly\" [submitted]=\"Form?.submitted\" type=\"text\" pattern=\"{{Pattern || FloatPattern}}\" [required]=\"Required\" [placeholder]=\"Placeholder\" [(ngModel)]=\"Model\" [id]=\"GeneratedName\" name=\"{{GeneratedName}}\" autocomplete=\"off\" (inputChange)=\"changed($event);\" (inputFocus)=\"focused($event);\" (inputFinalized)=\"finalized()\"></val-input>\r\n </div>\r\n <!--Se numero intero-->\r\n <div *ngIf=\"Type == 'int'\">\r\n <val-input #validationControl=\"ngModel\" [FocusSubject]=\"FocusSubject\" [SetValidationSubject]=\"SetValidationSubject\" [FieldAppearence]=\"FieldAppearence\" [forceInvalid]=\"ForcedError\" [FloatingLabel]=\"FloatingLabel\" [noValidate]=\"!Validation\" [Readonly]=\"Readonly\" [submitted]=\"Form?.submitted\" type=\"text\" pattern=\"{{Pattern || IntPattern}}\" [required]=\"Required\" [placeholder]=\"Placeholder\" [(ngModel)]=\"Model\" [id]=\"GeneratedName\" name=\"{{GeneratedName}}\" autocomplete=\"off\" (inputChange)=\"changed($event);\" (inputFocus)=\"focused($event);\" (inputFinalized)=\"finalized()\"></val-input>\r\n </div>\r\n <!--Se boolean-->\r\n <div class=\"m-t-5\" *ngIf=\"Type == 'boolean'\">\r\n <input #validationControl=\"ngModel\" [readonly]=\"Readonly\" type=\"checkbox\" class=\"app-pointer\" [(ngModel)]=\"Model\" id=\"{{GeneratedName}}\" name=\"{{GeneratedName}}\" (ngModelChange)=\"changed(); finalized();\" (click)=\"focused($event);\" />\r\n </div>\r\n <!--Se enum-->\r\n <div *ngIf=\"Type == 'enum'\">\r\n <val-select #validationControl=\"ngModel\" [FocusSubject]=\"FocusSubject\" [SetValidationSubject]=\"SetValidationSubject\" [FieldAppearence]=\"FieldAppearence\" [forceInvalid]=\"ForcedError\" [noValidate]=\"!Validation\" [Readonly]=\"Readonly\" [submitted]=\"Form?.submitted\" [placeHolderValue]=\"''\" [placeholder]=\"Required ? ('Select' | localize : lc) + '...' : Placeholder\" [required]=\"Required\" [(ngModel)]=\"Model\" (inputChange)=\"changed($event);\" (inputFocus)=\"focused($event);\" (inputFinalized)=\"finalized()\" [id]=\"GeneratedName\" name=\"{{GeneratedName}}\">\r\n <option *ngFor=\"let val of BoundSource\" [value]=\"val.id\">{{val.description}}</option>\r\n </val-select>\r\n </div>\r\n <!--Se autocomplete-->\r\n <div *ngIf=\"Type == 'autocomplete'\">\r\n <val-autocomplete #validationControl=\"ngModel\" [FocusSubject]=\"FocusSubject\" [SetValidationSubject]=\"SetValidationSubject\" [FieldAppearence]=\"FieldAppearence\" [forceInvalid]=\"ForcedError\" [noValidate]=\"!Validation\" [Readonly]=\"Readonly\" [submitted]=\"Form?.submitted\" [required]=\"Required\" [placeholder]=\"Required ? ('Select' | localize : lc) + '...' : Placeholder\" [(ngModel)]=\"Model\" [id]=\"GeneratedName\" name=\"{{GeneratedName}}\" [FilteredSource]=\"FilteredBoundSource\" (inputChange)=\"filterSource($event); changed($event);\" (inputFocus)=\"focused($event);\" (inputFinalized)=\"finalized()\"></val-autocomplete>\r\n </div>\r\n <!--Se date time-->\r\n <div *ngIf=\"Type == 'datetime'\">\r\n <val-datetime #validationControl=\"ngModel\" [FocusSubject]=\"FocusSubject\" [SetValidationSubject]=\"SetValidationSubject\" [FieldAppearence]=\"FieldAppearence\" [forceInvalid]=\"ForcedError\" [FloatingLabel]=\"FloatingLabel\" [noValidate]=\"!Validation\" [Readonly]=\"Readonly\" [submitted]=\"Form?.submitted\" [required]=\"Required\" [useJsDates]=\"useJsDates\" [(ngModel)]=\"Model\" [id]=\"GeneratedName\" name=\"{{GeneratedName}}\" autocomplete=\"off\" (inputChange)=\"changed($event);\" (inputFocus)=\"focused($event);\" (inputFinalized)=\"finalized()\"></val-datetime>\r\n </div>\r\n <!--Se time-->\r\n <div *ngIf=\"Type == 'time'\">\r\n <ngx-mat-timepicker name=\"val-time\" #elementRef #baseInput=\"ngModel\" [(ngModel)]=\"Model\" [disabled]=\"Readonly\"\r\n [showSpinners]=\"false\" [stepHour]=\"2\" [stepMinute]=\"5\" [stepSecond]=\"30\"\r\n [showSeconds]=\"true\" (ngModelChange)=\"changed()\" #validationControl=\"ngModel\">\r\n </ngx-mat-timepicker>\r\n </div>\r\n <!--Se file-->\r\n <div *ngIf=\"Type == 'file'\">\r\n <div class=\"input-group file-upload\">\r\n <input type=\"file\" (change)=\"fileChange()\" #fileInput id=\"{{GeneratedName}}\" class=\"file-upload-btn app-pointer\" [multiple]=\"null\"/>\r\n <input type=\"text\" [class.frm-padding-left-22]=\"AllowDownload && ModelFile.filename && ModelFile.fileb64\" class=\"form-control checking-field\" placeholder=\"{{'Select a file' | localize : lc}}...\" [(ngModel)]=\"ModelFile.filename\" name=\"dsfile\" #validationControl=\"ngModel\" [required]=\"Required\"/>\r\n \r\n <a class=\"fa fa-download app-pointer app-input-icon\" *ngIf=\"AllowDownload && ModelFile.filename && ModelFile.fileb64\" (click)=\"downloadAttachment()\"></a>\r\n <i class=\"fa fa-times delete-file\" (click)=\"fileChange(true)\" *ngIf=\"ModelFile.filename\"></i>\r\n <span class=\"input-group-btn\">\r\n <button class=\"btn btn-primary btn-file-upload\" type=\"button\"><i class=\"fa fa-upload\"></i></button>\r\n </span>\r\n </div>\r\n </div>\r\n</ng-template>", styles: [".frm-padding-left-22{padding-left:22px}.drop-container{position:relative;display:flex;gap:10px;flex-direction:column;justify-content:center;align-items:center;height:200px;padding:20px;border-radius:10px;border:2px dashed #0d45a5;color:#444;cursor:pointer;transition:background .2s ease-in-out,border .2s ease-in-out}.drop-container:hover{background:#eee;border-color:#111}.drop-container:hover .drop-title{color:#222}.drop-title{color:#444;font-size:20px;font-weight:700;text-align:center;transition:color .2s ease-in-out}input[type=file]{width:350px;max-width:100%;color:#444;padding:5px;background:#fff;border-radius:10px;border:1px solid #555}input[type=file]::file-selector-button{margin-right:20px;border:none;background:#084cdf;padding:10px 20px;border-radius:10px;color:#fff;cursor:pointer;transition:background .2s ease-in-out}input[type=file]::file-selector-button:hover{background:#0d45a5}.file-download-btn{border-radius:5px;padding:5px 10px;background-color:#0d45a5}.file-download-btn:hover{background-color:#084cdf}.file-download-btn-text{color:#fff}.file-delete-btn{color:red;position:absolute;right:10px;top:10px}.file-name-container{width:100%;white-space:nowrap;text-overflow:ellipsis;overflow-y:clip;text-align:center}\n"] }]
|
|
373
373
|
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.UtilityService }, { type: i1.DateService }, { type: i2.NgxMatDateAdapter }, { type: i3.LocalizationService }, { type: i4.NgControl, decorators: [{
|
|
@@ -417,4 +417,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
|
|
|
417
417
|
}], Options: [{
|
|
418
418
|
type: Input
|
|
419
419
|
}] } });
|
|
420
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1hZGFwdGl2ZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mb3Jtcy1hbmQtdmFsaWRhdGlvbnMvc3JjL2xpYi9mb3Jtcy9mb3JtLWFkYXB0aXZlL2Zvcm0tYWRhcHRpdmUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZm9ybXMtYW5kLXZhbGlkYXRpb25zL3NyYy9saWIvZm9ybXMvZm9ybS1hZGFwdGl2ZS9mb3JtLWFkYXB0aXZlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFVBQVU7QUFDVixPQUFPLEVBQUUsdUJBQXVCLEVBQXFCLFNBQVMsRUFBb0IsTUFBTSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFpQixTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakssT0FBTyxFQUF5QyxhQUFhLEVBQWEsZ0JBQWdCLEVBQWlDLE1BQU0sZ0JBQWdCLENBQUM7QUFFbEosc0JBQXNCO0FBQ3RCLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBSzlELGVBQWU7QUFDZixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDdkQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFekUsVUFBVTtBQUNWLE9BQU8sRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzdELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7QUFjL0MsMkpBQTJKO0FBUTNKLE1BQU0sT0FBTyxxQkFBc0IsU0FBUSxlQUFlO0lBMkR0RCwyQkFBMkI7SUFDM0IsWUFBWSxHQUFzQixFQUFVLE9BQXVCLEVBQVUsU0FBc0IsRUFBVSxXQUFtQyxFQUFTLEVBQXVCLEVBQXNCLFNBQW9CLEVBQXFDLFdB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U0FBUzsrQkFDSSxlQUFlLGFBQ2QsQ0FBQyxFQUFFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxRQUFRLEVBQUUsd0JBQXdCLEVBQUUsQ0FBQyxtQkFHaEUsdUJBQXVCLENBQUMsTUFBTTs7MEJBOERvSSxRQUFROzswQkFBSSxJQUFJOzswQkFBMEIsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxhQUFhOzswQkFBc0QsUUFBUTs7MEJBQWtDLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsYUFBYTs7MEJBQTBCLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsY0FBYzs0Q0F6RC9hLElBQUk7c0JBQVosS0FBSztnQkFHRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBR0csT0FBTztzQkFBZixLQUFLO2dCQUdHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBR3FDLE9BQU87c0JBQWpELFNBQVM7dUJBQUMsV0FBVyxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFHaEMsYUFBYTtzQkFBckIsS0FBSztnQkFNRyxTQUFTO3NCQUFqQixLQUFLO2dCQUdHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBR0csY0FBYztzQkFBdEIsS0FBSztnQkFHRyxRQUFRO3NCQUFoQixLQUFLO2dCQUdHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBR0csT0FBTztzQkFBZixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQW5ndWxhclxyXG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgSG9zdCwgSW5qZWN0LCBJbnB1dCwgT3B0aW9uYWwsIFNlbGYsIFNpbXBsZUNoYW5nZXMsIFZpZXdDaGlsZCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTElEQVRPUlMsIE5nQ29udHJvbCwgUGF0dGVyblZhbGlkYXRvciwgVmFsaWRhdGlvbkVycm9ycywgVmFsaWRhdG9yRm4gfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuXHJcbi8vIEVTIC8gQ29uZmlndXJhemlvbmlcclxuaW1wb3J0IHsgTG9jYWxpemF0aW9uU2VydmljZSB9IGZyb20gXCJAZXNmYWVuemEvbG9jYWxpemF0aW9uc1wiO1xyXG5pbXBvcnQgeyBEYXRlU2VydmljZSwgVXRpbGl0eVNlcnZpY2UgfSBmcm9tIFwiQGVzZmFlbnphL2V4dGVuc2lvbnNcIjtcclxuaW1wb3J0IHsgQWNjZXNzQ29udHJvbFNlcnZpY2UsIENvbXBvbmVudENvbnRleHQgfSBmcm9tICdAZXNmYWVuemEvYWNjZXNzLWNvbnRyb2wnO1xyXG5pbXBvcnQgeyBOZ3hNYXREYXRlQWRhcHRlciB9IGZyb20gXCJAYW5ndWxhci1tYXRlcmlhbC1jb21wb25lbnRzL2RhdGV0aW1lLXBpY2tlclwiO1xyXG5cclxuLy8gQXBwbGljYXppb25lXHJcbmltcG9ydCB7IEJhc2VGb3JtQ29udHJvbCB9IGZyb20gXCIuLi9iYXNlLWZvcm0tY29udHJvbFwiO1xyXG5pbXBvcnQgeyBGb3JtQWRhcHRpdmVDb21wb25lbnRMb2MgfSBmcm9tIFwiLi9mb3JtLWFkYXB0aXZlLmNvbXBvbmVudC5sb2NcIjtcclxuXHJcbi8vIE1vZGVsbGlcclxuaW1wb3J0IHsgQUNPX0NVU1RPTUtFWSwgRkFWX0RFQlVHX01PREUgfSBmcm9tICcuLi8uLi90b2tlbnMnO1xyXG5pbXBvcnQgeyBBcHBGaWxlIH0gZnJvbSBcIi4uLy4uL21vZGVscy9BcHBGaWxlXCI7XHJcblxyXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHsgQ2hhbmdlRXZlbnQgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL0NoYW5nZUV2ZW50XCI7XHJcblxyXG4vKipcclxuICogRGljaGlhcmF6aW9uZSBkZWxsYSB2YXJpYWJpbGUgZ2xvYmFsZSBkYXlqcy4gTCdvbmVyZSBkaSBcImNyZWFybGFcIiDDqCBhZmZpZGF0byBhbGwnYXBwbGljYXppb25lIGNoZSB1dGlsaXp6YSBxdWVzdGEgbGlicmVyaWEsIFxyXG4gKiBjaGUgZG92csOgIGltcG9ydGFyZSBsbyBzY3JpcHQgZ2xvYmFsZSBkaSBkYXlqcyBuZWxsYSBDTElcclxuICovXHJcbmRlY2xhcmUgdmFyIGRheWpzOiBhbnk7XHJcblxyXG4vKiogT3B6aW9uaSBnZW5lcmljaGUgZGlzcG9uaWJpbGkgKi9cclxuZXhwb3J0IHR5cGUgQXZhaWxhYmxlT3B0aW9ucyA9ICdKc0RhdGVzJyB8ICdDYXNlU2Vuc2l0aXZlJyB8ICdNaW5DaGFycycgfCAnU2VhcmNoRnVuY3Rpb24nIHwgJ0FsaWdubWVudCcgfCAnUHJlY2lzaW9uJyB8ICdBbGxvd0Rvd25sb2FkJyB8ICdBZGp1c3ROdW1iZXInIHwgJ1BhdHRlcm4nO1xyXG5cclxuLyoqIENvbXBvbmVudGUgaW4gZ3JhZG8gZGkgYXNzdW1lcmUgbGEgZm9ybWEgZGkgdW4gcXVhbHNpYXNpIGFsdHJvIGNvbXBvbmVudGUgZm9ybSBpbiBiYXNlIGFsIHRpcG8gc3BlY2lmaWNhdG8uIFV0aWxlICBwZXIgbGEgY3JlYXppb25lIGRpIGZvcm0gZGluYW1pY2kgKi9cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogXCJmb3JtLWFkYXB0aXZlXCIsXHJcbiAgICBwcm92aWRlcnM6IFt7IHByb3ZpZGU6IExvY2FsaXphdGlvblNlcnZpY2UsIHVzZUNsYXNzOiBGb3JtQWRhcHRpdmVDb21wb25lbnRMb2MgfV0sXHJcbiAgICB0ZW1wbGF0ZVVybDogXCJmb3JtLWFkYXB0aXZlLmNvbXBvbmVudC5odG1sXCIsXHJcbiAgICBzdHlsZVVybHM6IFtcIi4uL2Zvcm0tZmlsZS9mb3JtLWZpbGUuY29tcG9uZW50LmNzc1wiXSxcclxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBGb3JtQWRhcHRpdmVDb21wb25lbnQgZXh0ZW5kcyBCYXNlRm9ybUNvbnRyb2wgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciB7XHJcblxyXG4gICAgLyoqIFRpcG9sb2dpYSBjaGUgZGVjaWRlIGNoZSBjb21wb25lbnRlIG1vc3RyYXJlICovXHJcbiAgICBASW5wdXQoKSBUeXBlOiAnc3RyaW5nJyB8ICdmbG9hdCcgfCAnZGF0ZScgfCAnbnVtYmVyJyB8ICdpbnQnIHwgJ2Jvb2xlYW4nIHwgJ2VudW0nIHwgJ2F1dG9jb21wbGV0ZScgfCAnZGF0ZXRpbWUnIHwgJ3RpbWUnIHwgJ2ZpbGUnIHwgJ2N1cnJlbmN5JztcclxuXHJcbiAgICAvKiogTWVzc2FnZ2lvIHBlciBxdWFuZG8gc2kgYmluZGEgdW4gZm9ybS1hZGFwdGl2ZSBzZW56YSB0aXBvICovXHJcbiAgICBASW5wdXQoKSBUeXBlTWlzc2luZ01lc3NhZ2U6IHN0cmluZztcclxuXHJcbiAgICAvKiogUGF0dGVybiBkaSB2YWxpZGF6aW9uZSAqL1xyXG4gICAgQElucHV0KCkgUGF0dGVybjogc3RyaW5nO1xyXG5cclxuICAgIC8qKiBJbmRpY2EgZGkgYWdnaXVzdGFyZSBpbiB1c2NpdGEgaSBudW1iZXIgaW4gbW9kbyBjaGUgc2lhbm8gcGFyc2FiaWxpIGRhbCBqYXZhc2NyaXB0ICovXHJcbiAgICBASW5wdXQoKSBBZGp1c3ROdW1iZXI6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAgIC8qKiBSaWZlcmltZW50byBhbGwnZWxlbWVudG8gaW5wdXQgZGkgdGlwbyBmaWxlIHF1YWxvcmEgaWwgKipUeXBlKiogZGkgcXVlc3RvIGNvbXBvbmVudGUgZm9zc2UgKipmaWxlKiogKi9cclxuICAgIEBWaWV3Q2hpbGQoXCJmaWxlSW5wdXRcIiwgeyBzdGF0aWM6IGZhbHNlIH0pIGlucHV0RWw6IEVsZW1lbnRSZWY7XHJcblxyXG4gICAgLyoqIFBlcm1ldHRlIGRpIHNjYXJpY2FyZSBsJ2V2ZW50dWFsZSBmaWxlIHByZXNlbnRlIHF1YWxvcmEgaWwgKipUeXBlKiogZGkgcXVlc3RvIGNvbXBvbmVudGUgZm9zc2UgKipmaWxlKiogKi9cclxuICAgIEBJbnB1dCgpIEFsbG93RG93bmxvYWQ6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAgIC8qKiBNb2RlbGxvIHR5cGVzY3JpcHQgZGkgYmluZCBkZWkgZmlsZSAqL1xyXG4gICAgTW9kZWxGaWxlOiBBcHBGaWxlO1xyXG5cclxuICAgIC8qKiBVdGlsaXp6YXRhIG5lbCBmb3JtLWFkYXB0ZXIgcGVyIHNwZWNpZmljYXJlIGxhIHByZWNpc2lvbmUgZGVnbGkgaW5wdXQgY3VycmVuY3ltYXAgKFR5cGU6IGN1cnJlbmN5KSAqL1xyXG4gICAgQElucHV0KCkgUHJlY2lzaW9uOiBudW1iZXIgPSAyO1xyXG5cclxuICAgIC8qKiBBbGxpbmVhbWVudG8gZGVsbGEgY3VycmVuY3kgbWFzayAqL1xyXG4gICAgQElucHV0KCkgQWxpZ25tZW50OiAnbGVmdCcgfCAncmlnaHQnID0gJ3JpZ2h0JztcclxuXHJcbiAgICAvKiogRnVuemlvbmUgZGkgcmljZXJjYSBjaGUgdmVycsOgIGNoaWFtYXRhIGRhbCBjb21wb25lbnRlICovXHJcbiAgICBASW5wdXQoKSBTZWFyY2hGdW5jdGlvbjogKHNlYXJjaDogc3RyaW5nLCBieWlkOiBib29sZWFuKSA9PiBPYnNlcnZhYmxlPHsgaWQ6IHN0cmluZywgZGVzY3JpcHRpb246IHN0cmluZyB9W10+ID0gbnVsbDtcclxuXHJcbiAgICAvKiogTnVtZXJvIG1pbmltbyBkaSBjYXJhdHRlcmkgY29uIGN1aSBjZXJjYXJlICovXHJcbiAgICBASW5wdXQoKSBNaW5DaGFyczogbnVtYmVyID0gMztcclxuXHJcbiAgICAvKiogSW5kaWNhIHNlIGkgY29udHJvbGxpIGRldm9ubyBlc3NlcmUgZWZmZXR0dWF0aSB0ZW5lbmRvIGNvbnRvIGRlbCBDYXNlIG8gbWVuby4gVmFsZSBzb2xvIHF1YWxvcmEgbGEgKipTb3VyY2UqKiBmb3NzZSBmb3JuaXRhICovXHJcbiAgICBASW5wdXQoKSBDYXNlU2Vuc2l0aXZlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgLyoqIE9wemlvbmkgc3BlY2lmaWNoZSBwZXIgaWwgY29tcG9uZW50ZSBjaGUgc2kgdmEgYSB2aXN1YWxpenphcmUuIEVzLiBwZXIgaSB0aXBpIGRhdGU6IHsgSnNEYXRlczogdHJ1ZSB9ICovXHJcbiAgICBASW5wdXQoKSBPcHRpb25zOiB7IFtpZCBpbiBBdmFpbGFibGVPcHRpb25zXT86IGFueSB9ID0ge307XHJcblxyXG4gICAgLyoqIFZhcmlhYmlsZSBpbnRlcm5hIGNoZSBnZXN0aXNjZSBzZSBlZmZldHR1YXJlIGlsIHJpYWxsaW5lYW1lbnRvIGRlaSBkYXRpIG8gbWVubyAqL1xyXG4gICAgcHJpdmF0ZSBhbGlnblZhbHVlczogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5kaWNhIHNlIGlnbm9yYXJlIGlsIHByb3NzaW1vIGV2ZW50byB3cml0ZVZhbHVlIGNoZSBub3JtYWxtZW50ZSBkb3ZyZWJiZSByaWNoaWVkZXJlIGxhIG51b3ZhIHNvdXJjZS4gU2VydmUgcGVyIHF1YW5kbyBsJ3V0ZW50ZSBzZWxlemlvbmEgdW4gZWxlbWVudG86XHJcbiAgICAgKiBTdWJpdG8gZG9wbyBwYXJ0aXJlYmJlIHVuIGFsdHJvIGV2ZW50byBtb2RlbENoYW5nZSBjaGUgcmljYXJpY2hlcmViYmUgbnVvdmFtZW50ZSBsYSBzb3VyY2VcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBpZ25vcmVOZXh0V3JpdGVWYWx1ZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIC8qKiBDYWNoZSBkZWxsYSBzb3JnZW50ZSBvcmlnaW5hbGUgUE9TVCBiaW5kaW5nLCBpbiBtb2RvIGRhIHBvdGVyIGZhcmUgZmlsdHJpIGluIGxvY2FsZSBxdWFsb3JhIGxhICoqU2VhcmNoRnVuY3Rpb24qKiBub24gZm9zc2UgZGVmaW5pdGEgZSBsYSAqKlNvdXJjZSoqIGZvc3NlIGFzc2VnbmF0YSAqL1xyXG4gICAgcHVibGljIEZpbHRlcmVkQm91bmRTb3VyY2U6IHsgaWQ6IHN0cmluZywgZGVzY3JpcHRpb246IHN0cmluZyB9W10gPSBbXTtcclxuXHJcbiAgICAvKiogU29sbyBwZXIgZ2xpIGlucHV0IGRpIHRpcG8gXCJkYXRlXCIuIENhcGlzY2UgY2hlIG1vZGFsaXTDoCB1c2FyZSBwZXIgaWwgdmFsaWRhdGlvbi1kYXRlIHNvdHRvc3RhbnRlICovXHJcbiAgICBwdWJsaWMgdXNlSnNEYXRlczogYm9vbGVhbiA9IG51bGw7XHJcblxyXG4gICAgLyoqIFZhcmlhYmlsZSBpbnRlcm5hIGNoZSBzYWx2YSBpbCB2YWxvcmUgZGVnbGkgaW5wdXQgZmxvYXQgcHJpbWEgZGVsbCdhZ2dpdXN0YW1lbnRvICovXHJcbiAgICBwcml2YXRlIGZsb2F0VmFsdWVQcmVBZGp1c3RtZW50ZTogc3RyaW5nO1xyXG5cclxuICAgIC8qKiBAaWdub3JlIENvc3RydXR0b3JlICAqL1xyXG4gICAgY29uc3RydWN0b3IoY2RyOiBDaGFuZ2VEZXRlY3RvclJlZiwgcHJpdmF0ZSB1dGlFeHRzOiBVdGlsaXR5U2VydmljZSwgcHJpdmF0ZSBkYXRlc0V4dHM6IERhdGVTZXJ2aWNlLCBwcml2YXRlIGRhdGVBZGFwdGVyOiBOZ3hNYXREYXRlQWRhcHRlcjxhbnk+LCBwdWJsaWMgbGM6IExvY2FsaXphdGlvblNlcnZpY2UsIEBPcHRpb25hbCgpIEBTZWxmKCkgbmdDb250cm9sOiBOZ0NvbnRyb2wsIEBPcHRpb25hbCgpIEBJbmplY3QoTkdfVkFMSURBVE9SUykgX3ZhbGlkYXRvcnM6IEFycmF5PGFueT4sIGFjOiBBY2Nlc3NDb250cm9sU2VydmljZSwgQE9wdGlvbmFsKCkgQXBwQ29udGV4dDogQ29tcG9uZW50Q29udGV4dCwgQE9wdGlvbmFsKCkgQEluamVjdChBQ09fQ1VTVE9NS0VZKSBBQ09fQ1VTVE9NS0VZOiBzdHJpbmcsIEBPcHRpb25hbCgpIEBJbmplY3QoRkFWX0RFQlVHX01PREUpIEZBVl9ERUJVR19NT0RFOiBib29sZWFuKSB7XHJcbiAgICAgICAgc3VwZXIoY2RyLCBuZ0NvbnRyb2wsIF92YWxpZGF0b3JzLCBhYywgQXBwQ29udGV4dCwgQUNPX0NVU1RPTUtFWSwgRkFWX0RFQlVHX01PREUpO1xyXG5cclxuICAgICAgICB0aGlzLk1vZGVsRmlsZSA9IG5ldyBBcHBGaWxlKCk7XHJcbiAgICAgICAgdGhpcy5Vc2VVc2VyVmFsaWRhdG9ycyA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBJbnRQYXR0ZXJuID0gJ15bMC05XVxcXFxkKiQnO1xyXG4gICAgcHVibGljIEZsb2F0UGF0dGVybiA9ICdeKFswLTldKlssXSk/WzAtOV0rJCc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBOdmwgY29uIHVuIG1pbmltbyBkaSBzZW5zb1xyXG4gICAgICogQHBhcmFtIHZhbHVlIFZhbG9yZSBiYXNlXHJcbiAgICAgKiBAcGFyYW0gaWZub2QgVmFsb3JlIGRhIHVzYXJlIHNlICoqdmFsdWUqKiDDqCBudWxsbyBvIHVuZGVmaW5lZFxyXG4gICAgICogQHJldHVybnMgSWwgdmFsb3JlIHByZXNvIGZyYSBpIGR1ZSBkaXNwb25pYmlsaVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIG52bDxUPih2YWx1ZTogVCwgaWZub2Q6IFQpOiBUIHtcclxuICAgICAgICByZXR1cm4gdmFsdWUgPT0gbnVsbCB8fCB2YWx1ZSA9PSB1bmRlZmluZWQgPyBpZm5vZCA6IHZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xyXG5cclxuICAgICAgICAvLyBBc3NlZ25hemlvbmUgT3B6aW9uaSBkYSBvZ2dldHRvXHJcbiAgICAgICAgaWYodGhpcy5PcHRpb25zKXtcclxuICAgICAgICAgICAgdGhpcy51c2VKc0RhdGVzID0gdGhpcy5udmwodGhpcy5PcHRpb25zPy5Kc0RhdGVzLCB0aGlzLnVzZUpzRGF0ZXMpOztcclxuICAgICAgICAgICAgdGhpcy5DYXNlU2Vuc2l0aXZlID0gdGhpcy5udmwodGhpcy5PcHRpb25zPy5DYXNlU2Vuc2l0aXZlLCB0aGlzLkNhc2VTZW5zaXRpdmUpO1xyXG4gICAgICAgICAgICB0aGlzLk1pbkNoYXJzID0gdGhpcy5udmwodGhpcy5PcHRpb25zPy5NaW5DaGFycywgdGhpcy5NaW5DaGFycyk7XHJcbiAgICAgICAgICAgIHRoaXMuU2VhcmNoRnVuY3Rpb24gPSB0aGlzLm52bCh0aGlzLk9wdGlvbnM/LlNlYXJjaEZ1bmN0aW9uLCB0aGlzLlNlYXJjaEZ1bmN0aW9uKTtcclxuICAgICAgICAgICAgdGhpcy5BbGlnbm1lbnQgPSB0aGlzLm52bCh0aGlzLk9wdGlvbnM/LkFsaWdubWVudCwgdGhpcy5BbGlnbm1lbnQpO1xyXG4gICAgICAgICAgICB0aGlzLlByZWNpc2lvbiA9IHRoaXMubnZsKHRoaXMuT3B0aW9ucz8uUHJlY2lzaW9uLCB0aGlzLlByZWNpc2lvbik7XHJcbiAgICAgICAgICAgIHRoaXMuQWxsb3dEb3dubG9hZCA9IHRoaXMubnZsKHRoaXMuT3B0aW9ucz8uQWxsb3dEb3dubG9hZCwgdGhpcy5BbGxvd0Rvd25sb2FkKTtcclxuICAgICAgICAgICAgdGhpcy5BZGp1c3ROdW1iZXIgPSB0aGlzLm52bCh0aGlzLk9wdGlvbnM/LkFkanVzdE51bWJlciwgdGhpcy5BZGp1c3ROdW1iZXIpO1xyXG4gICAgICAgICAgICB0aGlzLlBhdHRlcm4gPSB0aGlzLm52bCh0aGlzLk9wdGlvbnM/LlBhdHRlcm4sIHRoaXMuUGF0dGVybik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5uZ0NvbnRyb2wpIHtcclxuICAgICAgICAgICAgLy8gRXNjbHVzaSBpIHZhbGlkYXRvcmkgYSBjb21wb25lbnRpXHJcbiAgICAgICAgICAgbGV0IHZhbGlkYXRvcnMgPSBbLi4uKHRoaXMuX3ZhbGlkYXRvcnMgfHwgW10pXS5maWx0ZXIodiA9PiAhdi5uZ09uSW5pdCk7XHJcblxyXG4gICAgICAgICAgIHZhciBwdiA9IG5ldyBQYXR0ZXJuVmFsaWRhdG9yKCk7XHJcbiAgICAgICAgICAgc3dpdGNoICh0aGlzLlR5cGUpIHtcclxuICAgICAgICAgICAgICAgY2FzZSAnaW50JzpcclxuICAgICAgICAgICAgICAgICAgIHB2LnBhdHRlcm4gPSB0aGlzLlBhdHRlcm4gfHwgdGhpcy5JbnRQYXR0ZXJuO1xyXG4gICAgICAgICAgICAgICAgICAgdmFsaWRhdG9ycy5wdXNoKHB2KTtcclxuICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICBjYXNlICdmbG9hdCc6XHJcbiAgICAgICAgICAgICAgIGNhc2UgJ251bWJlcic6XHJcbiAgICAgICAgICAgICAgICAgICBwdi5wYXR0ZXJuID0gdGhpcy5QYXR0ZXJuIHx8IHRoaXMuRmxvYXRQYXR0ZXJuO1xyXG4gICAgICAgICAgICAgICAgICAgdmFsaWRhdG9ycy5wdXNoKHB2KTtcclxuICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICBjYXNlICdzdHJpbmcnOlxyXG4gICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuUGF0dGVybikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgIHB2LnBhdHRlcm4gPSB0aGlzLlBhdHRlcm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9ycy5wdXNoKHB2KTtcclxuICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgIH1cclxuICAgICAgICAgICAvLyBBIHF1YW50byBwYXJlIGxhIGNyZWF6aW9uZSBkZWwgdmFsaWRhdG9yZSByb21wZSBpbCBjYXNvIGQndXNvIGNsYXNzaWNvLi4uXHJcbiAgICAgICAgICAgKDxhbnk+cHYpLl92YWxpZGF0b3IgPSB0aGlzLmN1c3RvbVBhdHRlcm5WYWxpZGF0b3IocHYucGF0dGVybik7XHJcbiAgICAgICAgICAgKDxhbnk+dGhpcy5uZ0NvbnRyb2wpLl9zZXRWYWxpZGF0b3JzKHZhbGlkYXRvcnMpO1xyXG4gICAgICAgICAgIHRoaXMubmdDb250cm9sLmNvbnRyb2wuc2V0VmFsaWRhdG9ycyh2YWxpZGF0b3JzKTtcclxuICAgICAgICAgICB0aGlzLm5nQ29udHJvbC5jb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBWYWxpZGF0b3IgdGhhdCByZXF1aXJlcyB0aGUgY29udHJvbCdzIHZhbHVlIHRvIG1hdGNoIGEgcmVnZXggcGF0dGVybi5cclxuICAgICAqIFNlZSBgVmFsaWRhdG9ycy5wYXR0ZXJuYCBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbi5cclxuICAgICAqL1xyXG4gICAgY3VzdG9tUGF0dGVyblZhbGlkYXRvcihwYXR0ZXJuOiBzdHJpbmcgfCBSZWdFeHApOiBWYWxpZGF0b3JGbiB7XHJcbiAgICAgICAgaWYgKCFwYXR0ZXJuKSByZXR1cm4gKF86IEFic3RyYWN0Q29udHJvbCkgPT4gbnVsbDtcclxuICAgICAgICBsZXQgcmVnZXg6IFJlZ0V4cDtcclxuICAgICAgICBsZXQgcmVnZXhTdHI6IHN0cmluZztcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiBwYXR0ZXJuID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICByZWdleFN0ciA9ICcnO1xyXG4gICAgICAgICAgICBpZiAocGF0dGVybi5jaGFyQXQoMCkgIT09ICdeJykgcmVnZXhTdHIgKz0gJ14nO1xyXG4gICAgICAgICAgICByZWdleFN0ciArPSBwYXR0ZXJuO1xyXG4gICAgICAgICAgICBpZiAocGF0dGVybi5jaGFyQXQocGF0dGVybi5sZW5ndGggLSAxKSAhPT0gJyQnKSByZWdleFN0ciArPSAnJCc7XHJcbiAgICAgICAgICAgIHJlZ2V4ID0gbmV3IFJlZ0V4cChyZWdleFN0cik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcclxuICAgICAgICAgICAgaWYgKCFjb250cm9sLnZhbHVlKSB7IHJldHVybiBudWxsOyB9XHJcblxyXG4gICAgICAgICAgICAvLyBDYXJpY2FtZW50byBhdnZlbnV0byBhZGVzc28gZGEgbW9kZWxsb1xyXG4gICAgICAgICAgICBpZihjb250cm9sLnZhbHVlICYmICF0aGlzLmZsb2F0VmFsdWVQcmVBZGp1c3RtZW50ZSlcclxuICAgICAgICAgICAgICAgIHRoaXMuZmxvYXRWYWx1ZVByZUFkanVzdG1lbnRlID0gY29udHJvbC52YWx1ZS50b1N0cmluZygpLnJlcGxhY2UoXCIuXCIsIFwiLFwiKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiByZWdleC50ZXN0KHRoaXMuZmxvYXRWYWx1ZVByZUFkanVzdG1lbnRlKSA/IG51bGwgOiB7ICdwYXR0ZXJuJzogeyAncmVxdWlyZWRQYXR0ZXJuJzogcmVnZXhTdHIsICdhY3R1YWxWYWx1ZSc6IHRoaXMuZmxvYXRWYWx1ZVByZUFkanVzdG1lbnRlIH0gfTtcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBAaWdub3JlICovXHJcbiAgICBwdWJsaWMgYXN5bmMgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xyXG4gICAgICAgIGNvbnN0IG5ld1NvdXJjZSA9IGNoYW5nZXNbXCJTb3VyY2VcIl07XHJcbiAgICAgICAgY29uc3QgbmV3VHlwZSA9IGNoYW5nZXNbXCJUeXBlXCJdO1xyXG5cclxuICAgICAgICBpZiAobmV3U291cmNlKSB7XHJcbiAgICAgICAgICAgIHRoaXMudHJ5QmluZFNvdXJjZURpc3BsYXkoKTtcclxuXHJcbiAgICAgICAgICAgIC8vIFByaW1hIGFzc2VnbmF6aW9uZSBzZSBjYW1iaWEgbGEgc291cmNlIHNvdHRvIChxdWluZGkgc2UgdmllbmUgYmluZGF0YSBkaXJldHRhbWVudGUgZGEgSFRNTClcclxuICAgICAgICAgICAgaWYgKHRoaXMuVHlwZSA9PSBcImF1dG9jb21wbGV0ZVwiICYmICh0aGlzLk1vZGVsPy5sZW5ndGggfHwgMCkgPj0gdGhpcy5NaW5DaGFycyAmJiAhdGhpcy5TZWFyY2hGdW5jdGlvbilcclxuICAgICAgICAgICAgICAgIHRoaXMuRmlsdGVyZWRCb3VuZFNvdXJjZSA9IHRoaXMuQm91bmRTb3VyY2U7XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIHRoaXMuRmlsdGVyZWRCb3VuZFNvdXJjZSA9IFtdO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAobmV3VHlwZSAmJiB0aGlzLk1vZGVsKVxyXG4gICAgICAgICAgICB0aGlzLndyaXRlVmFsdWUodGhpcy5Nb2RlbCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIEBpZ25vcmUgKi9cclxuICAgIHdyaXRlVmFsdWUob2JqOiBhbnkpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmFsaWduVmFsdWVzID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMuRXZhbHVhdGVkTW9kZWwgPSBvYmo/LnRvU3RyaW5nKCkgfHwgXCJcIjtcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLlR5cGUpIHtcclxuICAgICAgICAgICAgdGhpcy5UeXBlID0gXCJzdHJpbmdcIjtcclxuICAgICAgICAgICAgdGhpcy5FdmFsdWF0ZWRNb2RlbCA9IG9iajtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLlR5cGUgPT0gXCJkYXRlXCIgfHwgdGhpcy5UeXBlID09IFwiZGF0ZXRpbWVcIikge1xyXG4gICAgICAgICAgICB0aGlzLnVzZUpzRGF0ZXMgPSB0aGlzLnVzZUpzRGF0ZXMgPT0gbnVsbCA/IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopID09PSBcIltvYmplY3QgRGF0ZV1cIiA6IHRoaXMudXNlSnNEYXRlcztcclxuICAgICAgICAgICAgaWYgKHRoaXMuVHlwZSA9PSBcImRhdGVcIilcclxuICAgICAgICAgICAgICAgIHRoaXMuRXZhbHVhdGVkTW9kZWwgPSB0aGlzLmRhdGVzRXh0cy5nZXRGb3JtYXR0ZWQob2JqLCB0cnVlLCBmYWxzZSk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLlR5cGUgPT0gXCJkYXRldGltZVwiKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5FdmFsdWF0ZWRNb2RlbCA9IHRoaXMuZGF0ZXNFeHRzLmdldEZvcm1hdHRlZChvYmosIGZhbHNlLCB0cnVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoKHRoaXMuVHlwZSA9PSBcImZsb2F0XCIgfHwgdGhpcy5UeXBlID09IFwibnVtYmVyXCIpICYmIG9iaikge1xyXG4gICAgICAgICAgICBvYmogPSBvYmoudG9TdHJpbmcoKS5yZXBsYWNlKFwiLlwiLCBcIixcIik7XHJcbiAgICAgICAgICAgIHRoaXMuRXZhbHVhdGVkTW9kZWwgPSBvYmo7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIFBlciBzaWN1cmV6emEgcmlhbGxpbmVvIGkgdmFsb3JpXHJcbiAgICAgICAgZWxzZSBpZiAodGhpcy5UeXBlID09IFwiYm9vbGVhblwiKSB7XHJcbiAgICAgICAgICAgIG9iaiA9IG9iaiA/IChvYmogPT09IHRydWUgfHwgb2JqLnRvTG93ZXJDYXNlKCkgPT0gXCJ0cnVlXCIpIDogZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuYWxpZ25WYWx1ZXMgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLkV2YWx1YXRlZE1vZGVsID0gdGhpcy5sYy5sb2Mob2JqID8gJ1PDrCcgOiAnTm8nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodGhpcy5UeXBlID09IFwidGltZVwiKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IFtob3VycywgbWludXRlcywgc2Vjb25kc10gPSAob2JqIHx8IFwiMDA6MDA6MDBcIikuc3BsaXQoXCI6XCIpO1xyXG4gICAgICAgICAgICBvYmogPSBkYXlqcygpLmhvdXIocGFyc2VJbnQoaG91cnMgPz8gMCkpLm1pbnV0ZShwYXJzZUludChtaW51dGVzID8/IDApKS5zZWNvbmQocGFyc2VJbnQoc2Vjb25kcyA/PyAwKSk7XHJcbiAgICAgICAgICAgIHRoaXMuRXZhbHVhdGVkTW9kZWwgPSBgJHtob3VycyB8fCAnMDAnfToke21pbnV0ZXMgfHwgJzAwJ306JHtzZWNvbmRzIHx8ICcwMCd9YDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodGhpcy5UeXBlID09IFwiZmlsZVwiKSB7XHJcbiAgICAgICAgICAgIG9iaiA9IHRoaXMuTW9kZWxGaWxlO1xyXG4gICAgICAgICAgICB0aGlzLkV2YWx1YXRlZE1vZGVsID0gdGhpcy5Nb2RlbEZpbGUuZmlsZW5hbWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHRoaXMuVHlwZSA9PSBcImF1dG9jb21wbGV0ZVwiKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLlNlYXJjaEZ1bmN0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLlNlYXJjaEZ1bmN0aW9uKG9iaiwgdHJ1ZSkuc3Vic2NyaWJlKHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuU291cmNlID0gdDtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRyeUJpbmRTb3VyY2VEaXNwbGF5KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7IHRoaXMuZmluYWxpemVWYWx1ZShvYmopOyB9KTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIHRoaXMuZmluYWxpemVWYWx1ZShvYmopO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuQm91bmRTb3VyY2UgJiYgdGhpcy5Cb3VuZFNvdXJjZS5sZW5ndGggPiAwKVxyXG4gICAgICAgICAgICB0aGlzLkV2YWx1YXRlZE1vZGVsID0gdGhpcy5Cb3VuZFNvdXJjZS5maW5kKHQgPT4gdC5pZCA9PSBvYmopPy5kZXNjcmlwdGlvbjtcclxuXHJcbiAgICAgICAgc3VwZXIud3JpdGVWYWx1ZShvYmopO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5hbGlnblZhbHVlcykge1xyXG4gICAgICAgICAgICB0aGlzLmNoYW5nZWQoKTtcclxuICAgICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGF0byB1biB2YWxvcmUgdmVyaWZpY2Egc2UgcHXDsiByZXN0aXR1aXJlIGxlIGluZm9ybWF6aW9uaSB0cm92YXRlIGluICoqU291cmNlKiogY29uIGlkIHVndWFsZSBhICoqdmFsdWUqKiBvIHNlIGRldmUgcmVzdGl0dWlyZSBpbCB2YWxvcmUgaW4gc2VcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHthbnl9IHZhbHVlIFZhbG9yZSBzY3JpdHRvIG5lbGwnaW5wdXQgZGkgdGVzdG9cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBmaW5hbGl6ZVZhbHVlKHZhbHVlOiBhbnkpIHtcclxuICAgICAgICB2YXIgdmFsID0gdGhpcy5Tb3VyY2UuZmluZCh0ID0+IHQuaWQgPT0gdmFsdWUpO1xyXG4gICAgICAgIHRoaXMucHJvcGFnYXRlQ2hhbmdlKHZhbCA/IHZhbC5pZCA6IHZhbHVlKTtcclxuICAgICAgICB0aGlzLk1vZGVsID0gdmFsID8gdmFsLmRlc2NyaXB0aW9uIDogdmFsdWU7XHJcbiAgICAgICAgdGhpcy5FdmFsdWF0ZWRNb2RlbCA9IHRoaXMuTW9kZWw7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBFdmVudG8gZGkgZmlsdHJvIGRlbGxhIHNvcmdlbnRlIGRhdGkgaW4gYmFzZSBhbGwnaW5wdXQgdXRlbnRlXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudCBJbnB1dCB1dGVudGVcclxuICAgICAqL1xyXG4gICAgcHVibGljIGZpbHRlclNvdXJjZShldmVudD86IENoYW5nZUV2ZW50KSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaWdub3JlTmV4dFdyaXRlVmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5pZ25vcmVOZXh0V3JpdGVWYWx1ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBRdWFuZG8gZmlsdHJvIGxhIHNvdXJjZSwgc2Ugbm9uIGRldm8gaWdub3JhcmUgbCdldmVudG8gZGV2byBjb211bnF1ZSBhc3NpY3VyYXJtaSBkaSBpbXBvc3RhcmUgaWwgdmFsb3JlIHNlbGV6aW9uYXRvIGEgbnVsbFxyXG4gICAgICAgIHN1cGVyLmNoYW5nZWQobnVsbCk7XHJcblxyXG4gICAgICAgIGlmICghZXZlbnQgJiYgdGhpcy5NaW5DaGFycyA9PSAwICYmICF0aGlzLlNlYXJjaEZ1bmN0aW9uKSB7XHJcbiAgICAgICAgICAgIHRoaXMuRmlsdGVyZWRCb3VuZFNvdXJjZSA9IHRoaXMuQm91bmRTb3VyY2U7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghZXZlbnQgfHwgZXZlbnQudmFsdWUubGVuZ3RoIDwgdGhpcy5NaW5DaGFycykge1xyXG4gICAgICAgICAgICB0aGlzLkZpbHRlcmVkQm91bmRTb3VyY2UgPSBbXTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLlNlYXJjaEZ1bmN0aW9uICYmICghdGhpcy5Tb3VyY2UgfHwgdGhpcy5Tb3VyY2UubGVuZ3RoID09IDApKVxyXG4gICAgICAgICAgICB0aHJvdyBcIkltcG9zc2liaWxlIGZpbHRyYXJlIGdsaSBlbGVtZW50aSBzZW56YSB1bmEgZnVuemlvbmUgZGkgcmljZXJjYSBjaGUgcmVzdGl0dWlzY2EgdW5hIGxpc3RhIGRpIHsgaWQ6IHN0cmluZywgZGVzY3JpcHRpb246IHN0cmluZyB9XCI7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLlNlYXJjaEZ1bmN0aW9uKSB7XHJcbiAgICAgICAgICAgIHRoaXMudGhyb3R0bGEoXCJmaWx0ZXJzb3VyY2VcIiwgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5TZWFyY2hGdW5jdGlvbihldmVudC52YWx1ZSwgZmFsc2UpLnN1YnNjcmliZSh0ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLlNvdXJjZSA9IHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50cnlCaW5kU291cmNlRGlzcGxheSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIEluIHF1ZXN0byBjYXNvIMOoIGdpw6AgZmlsdHJhdGEgZGFsbGEgU2VhcmNoRnVuY3Rpb25cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLkZpbHRlcmVkQm91bmRTb3VyY2UgPSB0aGlzLkJvdW5kU291cmNlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlRmlsdGVyZWRTb3VyY2VPbkRlc2NyaXB0aW9uU2VsZWN0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSwgNDAwKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMudGhyb3R0bGEoXCJmaWx0ZXJzb3VyY2VcIiwgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy8gSW4gcXVlc3RvIGNhc28gZGV2byBmaWx0cmFyZSBpbyBpbiBtZW1vcmlhXHJcbiAgICAgICAgICAgICAgICB0aGlzLkZpbHRlcmVkQm91bmRTb3VyY2UgPSB0aGlzLkJvdW5kU291cmNlLmZpbHRlcih0ID0+ICh0aGlzLkNhc2VTZW5zaXRpdmUgJiYgdC5kZXNjcmlwdGlvbi5pbmNsdWRlcyhldmVudC52YWx1ZSkpIHx8ICghdGhpcy5DYXNlU2Vuc2l0aXZlICYmIHQuZGVzY3JpcHRpb24udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhldmVudC52YWx1ZS50b0xvd2VyQ2FzZSgpKSkpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVGaWx0ZXJlZFNvdXJjZU9uRGVzY3JpcHRpb25TZWxlY3Rpb24oKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgICAgICAgICB9LCAxMDApO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKiogQGlnbm9yZSAqL1xyXG4gICAgcHJpdmF0ZSByZW1vdmVGaWx0ZXJlZFNvdXJjZU9uRGVzY3JpcHRpb25TZWxlY3Rpb24oKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuRmlsdGVyZWRCb3VuZFNvdXJjZS5sZW5ndGggPT0gMSAmJiAodGhpcy5GaWx0ZXJlZEJvdW5kU291cmNlWzBdLmRlc2NyaXB0aW9uID09PSB0aGlzLk1vZGVsKSkge1xyXG4gICAgICAgICAgICB0aGlzLk1vZGVsID0gdGhpcy5Cb3VuZFNvdXJjZVswXS5pZDtcclxuICAgICAgICAgICAgdGhpcy5FdmFsdWF0ZWRNb2RlbCA9IHRoaXMuQm91bmRTb3VyY2VbMF0uZGVzY3JpcHRpb247XHJcbiAgICAgICAgICAgIHRoaXMuRmlsdGVyZWRCb3VuZFNvdXJjZSA9IFtdO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKiogTWV0b2RvIHJpY2hpYW1hdG8gcXVhbmRvIHZpZW5lIG1vZGlmaWNhdG8gaWwgbW9kZWxsbyBkZWwgY2FtcG8gZGkgaW5wdXQgKi9cclxuICAgIGNoYW5nZWQoZXZlbnQ/OiBDaGFuZ2VFdmVudCkge1xyXG4gICAgICAgIHZhciB0b0VtaXQgPSB0aGlzLmdldE1vZGVsVG9FbWl0KCk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLlR5cGUgPT0gXCJhdXRvY29tcGxldGVcIilcclxuICAgICAgICAgICAgdGhpcy5pZ25vcmVOZXh0V3JpdGVWYWx1ZSA9IHRydWU7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLkVtaXRQZW5kaW5nQ2hhbmdlcylcclxuICAgICAgICAgICAgc3VwZXIuY2hhbmdlZCh0b0VtaXQsIGZhbHNlLCBmYWxzZSwgZXZlbnQ/LmludGVybmFsKTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogQGlnbm9yZSAqL1xyXG4gICAgZmluYWxpemVkKCkge1xyXG4gICAgICAgIHN1cGVyLmZpbmFsaXplZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBNZXRvZG8gcmljaGlhbWF0byBxdWFuZG8gdmllbmUgc2VsZXppb25hdG8gaWwgY2FtcG8gY29sIG1vdXNlICovXHJcbiAgICBmb2N1c2VkKGV2ZW50OiBhbnkpIHtcclxuICAgICAgICBzdXBlci5mb2N1c2VkKGV2ZW50KTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogRWZmZXR0dWEgZ2xpIGFnZ2l1c3RhbWVudGkgZGF0aSBkZWwgY2FzbyBlZCBlbWV0dGUgaWwgbW9kZWxsbyBjb3JyZXR0byAqL1xyXG4gICAgcHJpdmF0ZSBnZXRNb2RlbFRvRW1pdCgpIHtcclxuICAgICAgICB2YXIgdG9FbWl0ID0gdGhpcy5Nb2RlbCA/XHJcbiAgICAgICAgICAgICh0aGlzLlR5cGUgPT0gXCJ0aW1lXCIgfHwgdGhpcy51c2VKc0RhdGVzID9cclxuICAgICAgICAgICAgICAgIHRoaXMuZGF0ZUFkYXB0ZXIuY2xvbmUodGhpcy5kYXRlc0V4dHMuZ2V0RGF0ZUNvbnZlcnRpb24odGhpcy5Nb2RlbCkpXHJcbiAgICAgICAgICAgICAgICA6IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5Nb2RlbCkpKVxyXG4gICAgICAgICAgICA6IG51bGw7XHJcblxyXG4gICAgICAgIGlmICgodGhpcy5UeXBlID09IFwiZmxvYXRcIiB8fCB0aGlzLlR5cGUgPT0gXCJudW1iZXJcIikgJiYgdG9FbWl0KSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLkFkanVzdE51bWJlcikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5mbG9hdFZhbHVlUHJlQWRqdXN0bWVudGUgPSB0b0VtaXQ7XHJcbiAgICAgICAgICAgICAgICB0b0VtaXQgPSB0b0VtaXQucmVwbGFjZShcIi5cIiwgXCJcIikucmVwbGFjZShcIixcIiwgXCIuXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuRXZhbHVhdGVkTW9kZWwgPSB0b0VtaXQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHRoaXMuVHlwZSA9PSBcImJvb2xlYW5cIikge1xyXG4gICAgICAgICAgICB0b0VtaXQgPSB0b0VtaXQgPyB0cnVlIDogZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuRXZhbHVhdGVkTW9kZWwgPSB0aGlzLmxjLmxvYyh0b0VtaXQgPyAnWWVzJyA6ICdObycpOztcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodGhpcy5UeXBlID09IFwidGltZVwiKSB7XHJcbiAgICAgICAgICAgIHRvRW1pdCA9IHRvRW1pdC5mb3JtYXQoXCJISDptbTpzc1wiKTtcclxuICAgICAgICAgICAgdGhpcy5FdmFsdWF0ZWRNb2RlbCA9IHRvRW1pdDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoKHRoaXMuVHlwZSA9PSBcImRhdGVcIiB8fCB0aGlzLlR5cGUgPT0gXCJkYXRldGltZVwiKSAmJiB0aGlzLnVzZUpzRGF0ZXMpIHtcclxuICAgICAgICAgICAgdG9FbWl0ID0gdG9FbWl0LnRvRGF0ZSgpO1xyXG4gICAgICAgICAgICB0aGlzLkV2YWx1YXRlZE1vZGVsID0gdGhpcy5kYXRlc0V4dHMuZ2V0Rm9ybWF0dGVkKHRoaXMuTW9kZWwsIHRoaXMuVHlwZSA9PSBcImRhdGVcIiwgdGhpcy5UeXBlID09IFwiZGF0ZXRpbWVcIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdG9FbWl0O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSGVscGVyIHBlciBnZXN0aXJlIGxhIG1vZGlmaWNhIGRlbCBmaWxlIGF0dHVhbG1lbnRlIGJpbmRhdG8uIE92dmlhbWVudGUgZnVuemlvbmEgc29sbyBxdWFsb3JhIGlsICoqVHlwZSoqIGZvc3NlICoqZmlsZSoqXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gY2xlYXIgSW5kaWNhIHNlIGJpc29nbmEgc3Z1b3RhcmUgbCdpbnB1dCBvIG1lbm8gXHJcbiAgICAgKi9cclxuICAgIGZpbGVDaGFuZ2UoY2xlYXI6IGJvb2xlYW4gPSBmYWxzZSkge1xyXG4gICAgICAgIGxldCBmaWxlczogRmlsZVtdID0gW107XHJcbiAgICAgICAgbGV0IG1vZGVsID0gKDxBcHBGaWxlPnRoaXMuTW9kZWwpO1xyXG4gICAgICAgIGxldCBuZTogSFRNTElucHV0RWxlbWVudCA9IHRoaXMuaW5wdXRFbC5uYXRpdmVFbGVtZW50O1xyXG5cclxuICAgICAgICBpZiAoY2xlYXIpIHtcclxuICAgICAgICAgICAgbW9kZWwuZmlsZW5hbWUgPSBcIlwiO1xyXG4gICAgICAgICAgICBuZS52YWx1ZSA9IFwiXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5lLmZpbGVzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgICAgICAgICAgZmlsZXMucHVzaChuZS5maWxlcy5pdGVtKGkpKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChuZS5maWxlcy5sZW5ndGggPT0gMSlcclxuICAgICAgICAgICAgICAgIG1vZGVsLmZpbGVuYW1lID0gbmUuZmlsZXNbMF0ubmFtZTtcclxuICAgICAgICAgICAgaWYgKG5lLmZpbGVzLmxlbmd0aCA+IDEpXHJcbiAgICAgICAgICAgICAgICBtb2RlbC5maWxlbmFtZSA9IG5lLmZpbGVzLmxlbmd0aCArIFwiIFwiICsgdGhpcy5sYy5sb2MoXCJGaWxlcyBTZWxlY3RlZFwiKTtcclxuICAgICAgICAgICAgbW9kZWwubmF0aXZlZmlsZXMgPSBmaWxlcztcclxuICAgICAgICAgICAgbW9kZWwuZmlsZWI2NCA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuY2hhbmdlZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBQZXJtZXR0ZSBkaSBzY2FyaWNhcmUgaWwgZmlsZSBjb2xsZWdhdG8gYWxsJ2V2ZXRudWFsZSBmaWxlIGlucHV0IHJhcHByZXNlbnRhdG8gZGEgcXVlc3RvIGNvbXBvbmVudGUgKi9cclxuICAgIGRvd25sb2FkQXR0YWNobWVudCgpIHtcclxuICAgICAgICBsZXQgbW9kZWwgPSAoPEFwcEZpbGU+dGhpcy5Nb2RlbCk7XHJcbiAgICAgICAgdGhpcy51dGlFeHRzLnNhdmVGaWxlKG1vZGVsLmZpbGViNjQsIG1vZGVsLmZpbGVuYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogQGlnbm9yZSAqL1xyXG4gICAgb25Ob3ROdWxsVmFsdWVTZXQoKTogdm9pZCB7IH1cclxuXHJcbiAgICAvLyoqKioqKioqKioqKioqKioqKioqIEZ1bnppb25lIGRpIHRocm90dGxpbmcgcGVyIG5vbiBzcGFtbWFyZSByaWNoaWVzdGUgaW4gY2FzbyBkaSBhbmltYXppb25pIGF0dGl2YXRlXHJcbiAgICAvL1RPRE86IHNwb3N0YXJsYSBpbiB1biBtZXRvZG8gZGkgdXRpbGl0w6AgKGVzZmFlbnphL2V4dGVuc2lvbnMpXHJcbiAgICAvKiogQGlnbm9yZSAqL1xyXG4gICAgcHJpdmF0ZSBleGVjdXRpb25UaW1lcnM6IHsgW2luZGV4OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xyXG4gICAgLyoqIEBpZ25vcmUgKi9cclxuICAgIHByaXZhdGUgdGhyb3R0bGEoaWQ6IHN0cmluZywgZnVuYzogRnVuY3Rpb24sIHRocm90dGxlVGltZTogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgLy9TZSBobyBsYSBmdW56aW9uZSBjaGUgdnVvbGUgZXNlZ3VpcmUgcmlwdWxpc2NvIHF1ZWwgdGltZW91dFxyXG4gICAgICAgIGlmICh0aGlzLmV4ZWN1dGlvblRpbWVyc1tpZF0pXHJcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmV4ZWN1dGlvblRpbWVyc1tpZF0pO1xyXG5cclxuICAgICAgICAvL1JpY3JlbyBpbCB0aW1lb3V0IHBlciBlc2VndWlyZSBxdWVsbGEgZnVuemlvbmUgZG9wbyB0aHJvdHRsZVRpbWUgbWlsbGlzZWNvbmRpXHJcbiAgICAgICAgdGhpcy5leGVjdXRpb25UaW1lcnNbaWRdID0gc2V0VGltZW91dCgoKSA9PiB7IGZ1bmMoKTsgdGhpcy5leGVjdXRpb25UaW1lcnNbaWRdID0gbnVsbDsgfSwgdGhyb3R0bGVUaW1lKTtcclxuICAgIH1cclxuICAgIC8vKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG59IiwiPCEtLSBVZ3VhbGUgaW4gdHV0dGkgaSBjb21wb25lbnRpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT5cclxuPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFGb3JtTGF5b3V0ICYmICghRGlzcGxheU1vZGUgfHwgKERpc3BsYXlMYXlvdXQgIT0gJ2hpZGRlbicgJiYgRGlzcGxheUNvbmRpdGlvbikpXCI+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiRGlzcGxheU1vZGUgJiYgIURpc3BsYXlNb2RlVGVtcGxhdGVcIj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiRGlzcGxheUxheW91dCA9PSAnZm9ybSdcIj57eyBFdmFsdWF0ZWRNb2RlbCB9fTwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCJEaXNwbGF5TGF5b3V0ID09ICdpbmxpbmUnXCIgY2xhc3M9XCJhcHAtaW5saW5lXCI+e3sgRXZhbHVhdGVkTW9kZWwgfX08L2Rpdj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIkRpc3BsYXlNb2RlICYmIERpc3BsYXlNb2RlVGVtcGxhdGVcIj48bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiRGlzcGxheU1vZGVUZW1wbGF0ZSwgY29udGV4dDogeyAkaW1wbGljaXQ6IEV2YWx1YXRlZE1vZGVsIH1cIj48L25nLWNvbnRhaW5lcj48L25nLWNvbnRhaW5lcj5cclxuICAgIDxkaXYgW2hpZGRlbl09XCJEaXNwbGF5TW9kZVwiPjxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjb250cm9sVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj48L2Rpdj5cclxuPC9uZy1jb250YWluZXI+XHJcblxyXG48ZGl2ICpuZ0lmPVwiRm9ybUxheW91dCAmJiAoIURpc3BsYXlNb2RlIHx8IChEaXNwbGF5TGF5b3V0ICE9ICdoaWRkZW4nICYmIERpc3BsYXlDb25kaXRpb24pKVwiIGNsYXNzPVwie3tGb3JtR3JvdXBDbGFzcyArIChMYXN0ID8gJyBhcHAtbWFyZ2luLWJvdHRvbS0wIGFwcC1tYXJnaW4tcmlnaHQtMCAnIDogJycpICsgKERpc3BsYXlMYXlvdXQgPT0gJ2lubGluZScgJiYgRGlzcGxheU1vZGUgPyAoJyBhcHAtaW5saW5lLWJsb2NrICcgKyAoIUxhc3QgPyAnYXBwLW1hcmdpbi1yaWdodC0xMCcgOiAnJykpIDogJyBmb3JtLWdyb3VwIHJvdycpfX1cIj5cclxuXHJcbiAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbWQte3soRGlzcGxheU1vZGUgJiYgRGlzcGxheUxheW91dCA9PSAnaW5saW5lJyA/ICdub25lIGFwcC1ib2xkIGFwcC1tYXJnaW4tYm90dG9tLTAnIDogTGFiZWxDb2xXaWR0aCkgKyAoRGlzcGxheU1vZGUgPyAnIGFwcC1ib2xkJyA6ICcgbS10LTUnKSB9fVwiPnt7TGFiZWx9fXt7UmVxdWlyZWQgJiYgIURpc3BsYXlNb2RlID8gJyonIDogJyd9fXt7TGFiZWwgPyBcIjpcIiA6IFwiXCJ9fTwvbGFiZWw+XHJcbiAgICA8c3BhbiAqbmdJZj1cIkRpc3BsYXlNb2RlICYmIERpc3BsYXlMYXlvdXQgPT0gJ2lubGluZScgJiYgSW5saW5lU2VwYXJhdG9yICE9ICcnXCI+e3tJbmxpbmVTZXBhcmF0b3J9fTwvc3Bhbj5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQte3tEaXNwbGF5TW9kZSAmJiBEaXNwbGF5TGF5b3V0ID09ICdpbmxpbmUnID8gJ25vbmUgYXBwLWlubGluZS1ibG9jaycgOiBJbnB1dENvbFdpZHRofX1cIj5cclxuXHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIkRpc3BsYXlNb2RlICYmICFEaXNwbGF5TW9kZVRlbXBsYXRlXCI+e3sgRXZhbHVhdGVkTW9kZWwgfX08L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiRGlzcGxheU1vZGUgJiYgRGlzcGxheU1vZGVUZW1wbGF0ZVwiPjxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJEaXNwbGF5TW9kZVRlbXBsYXRlLCBjb250ZXh0OiB7ICRpbXBsaWNpdDogRXZhbHVhdGVkTW9kZWwgfVwiPjwvbmctY29udGFpbmVyPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDxkaXYgW2hpZGRlbl09XCJEaXNwbGF5TW9kZVwiPjxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjb250cm9sVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj48L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImNsZWFyZml4XCI+PC9kaXY+XHJcbjwvZGl2PlxyXG48IS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPlxyXG5cclxuPG5nLXRlbXBsYXRlICNjb250cm9sVGVtcGxhdGU+XHJcbiAgICA8ZGl2ICpuZ0lmPVwiIVR5cGVcIiBjbGFzcz1cImFwcC1tYXJnaW4tdG9wLTVcIj5cclxuICAgICAgICA8ZW0+e3tUeXBlTWlzc2luZ01lc3NhZ2V9fTwvZW0+XHJcbiAgICA8L2Rpdj5cclxuICAgXHJcbiAgICAgPCEtLVNlIGN1cnJlbmN5LS0+XHJcbiAgICAgPGRpdiAqbmdJZj1cIlR5cGUgPT0gJ2N1cnJlbmN5J1wiPlxyXG4gICAgICAgIDx2YWwtY3VycmVuY3kgI3ZhbGlkYXRpb25Db250cm9sPVwibmdNb2RlbFwiIFtGb2N1c1N1YmplY3RdPVwiRm9jdXNTdWJqZWN0XCIgW1NldFZhbGlkYXRpb25TdWJqZWN0XT1cIlNldFZhbGlkYXRpb25TdWJqZWN0XCIgW0ZpZWxkQXBwZWFyZW5jZV09XCJGaWVsZEFwcGVhcmVuY2VcIiBbZm9yY2VJbnZhbGlkXT1cIkZvcmNlZEVycm9yXCIgW0Zsb2F0aW5nTGFiZWxdPVwiRmxvYXRpbmdMYWJlbFwiXHJcbiAgICAgICAgW0N1cnJlbmN5T3B0aW9uc109XCJ7IHByZWZpeDogJycsIHRob3VzYW5kczogJy4nLCBkZWNpbWFsOiAnLCcsIHByZWNpc2lvbjogUHJlY2lzaW9uLCBhbGlnbjogQWxpZ25tZW50IH1cIiBbbm9WYWxpZGF0ZV09XCIhVmFsaWRhdGlvblwiXHJcbiAgICAgICAgdHlwZT1cInRleHRcIiBbUmVhZG9ubHldPVwiUmVhZG9ubHlcIiBbc3VibWl0dGVkXT1cIkZvcm0/LnN1Ym1pdHRlZFwiIFtyZXF1aXJlZF09XCJSZXF1aXJlZFwiIFsobmdNb2RlbCldPVwiTW9kZWxcIiBbaWRdPVwiR2VuZXJhdGVkTmFtZVwiIG5hbWU9XCJ7e0dlbmVyYXRlZE5hbWV9fVwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiIChpbnB1dENoYW5nZSk9XCJjaGFuZ2VkKCk7XCIgKGlucHV0Rm9jdXMpPVwiZm9jdXNlZCgkZXZlbnQpO1wiIChpbnB1dEZpbmFsaXplZCk9XCJmaW5hbGl6ZWQoKVwiPjwvdmFsLWN1cnJlbmN5PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tU2UgZGF0YS0tPlxyXG4gICAgPGRpdiAqbmdJZj1cIlR5cGUgPT0gJ2RhdGUnXCI+XHJcbiAgICAgICAgPHZhbC1kYXRlICN2YWxpZGF0aW9uQ29udHJvbD1cIm5nTW9kZWxcIiBbRm9jdXNTdWJqZWN0XT1cIkZvY3VzU3ViamVjdFwiIFtTZXRWYWxpZGF0aW9uU3ViamVjdF09XCJTZXRWYWxpZGF0aW9uU3ViamVjdFwiIFtGaWVsZEFwcGVhcmVuY2VdPVwiRmllbGRBcHBlYXJlbmNlXCIgW2ZvcmNlSW52YWxpZF09XCJGb3JjZWRFcnJvclwiIFtGbG9hdGluZ0xhYmVsXT1cIkZsb2F0aW5nTGFiZWxcIiBbbm9WYWxpZGF0ZV09XCIhVmFsaWRhdGlvblwiIFtSZWFkb25seV09XCJSZWFkb25seVwiIFtzdWJtaXR0ZWRdPVwiRm9ybT8uc3VibWl0dGVkXCIgW3JlcXVpcmVkXT1cIlJlcXVpcmVkXCIgWyhuZ01vZGVsKV09XCJNb2RlbFwiIFtpZF09XCJHZW5lcmF0ZWROYW1lXCIgW3VzZUpzRGF0ZXNdPVwidXNlSnNEYXRlc1wiIG5hbWU9XCJ7e0dlbmVyYXRlZE5hbWV9fVwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiIChpbnB1dENoYW5nZSk9XCJjaGFuZ2VkKCRldmVudCk7XCIgKGlucHV0Rm9jdXMpPVwiZm9jdXNlZCgkZXZlbnQpO1wiIChpbnB1dEZpbmFsaXplZCk9XCJmaW5hbGl6ZWQoKVwiPjwvdmFsLWRhdGU+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS1TZSBzdHJpbmdhLS0+XHJcbiAgICA8ZGl2ICpuZ0lmPVwiVHlwZSA9PSAnc3RyaW5nJ1wiPlxyXG4gICAgICAgIDx2YWwtaW5wdXQgI3ZhbGlkYXRpb25Db250cm9sPVwibmdNb2RlbFwiIFtGb2N1c1N1YmplY3RdPVwiRm9jdXNTdWJqZWN0XCIgW1NldFZhbGlkYXRpb25TdWJqZWN0XT1cIlNldFZhbGlkYXRpb25TdWJqZWN0XCIgW0ZpZWxkQXBwZWFyZW5jZV09XCJGaWVsZEFwcGVhcmVuY2VcIiBbZm9yY2VJbnZhbGlkXT1cIkZvcmNlZEVycm9yXCIgW0Zsb2F0aW5nTGFiZWxdPVwiRmxvYXRpbmdMYWJlbFwiIFtub1ZhbGlkYXRlXT1cIiFWYWxpZGF0aW9uXCIgW1JlYWRvbmx5XT1cIlJlYWRvbmx5XCIgW3N1Ym1pdHRlZF09XCJGb3JtPy5zdWJtaXR0ZWRcIiB0eXBlPVwidGV4dFwiIHBhdHRlcm49XCJ7e1BhdHRlcm4gfHwgJyd9fVwiIFtyZXF1aXJlZF09XCJSZXF1aXJlZFwiIFtwbGFjZWhvbGRlcl09XCJQbGFjZWhvbGRlclwiIFsobmdNb2RlbCldPVwiTW9kZWxcIiBbaWRdPVwiR2VuZXJhdGVkTmFtZVwiIG5hbWU9XCJ7e0dlbmVyYXRlZE5hbWV9fVwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiIChpbnB1dENoYW5nZSk9XCJjaGFuZ2VkKCRldmVudCk7XCIgKGlucHV0Rm9jdXMpPVwiZm9jdXNlZCgkZXZlbnQpO1wiIChpbnB1dEZpbmFsaXplZCk9XCJmaW5hbGl6ZWQoKVwiPjwvdmFsLWlucHV0PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tU2UgbnVtZXJvLS0+XHJcbiAgICA8ZGl2ICpuZ0lmPVwiVHlwZSA9PSAnZmxvYXQnIHx8IFR5cGUgPT0gJ251bWJlcidcIj5cclxuICAgICAgICA8dmFsLWlucHV0ICN2YWxpZGF0aW9uQ29udHJvbD1cIm5nTW9kZWxcIiBbRm9jdXNTdWJqZWN0XT1cIkZvY3VzU3ViamVjdFwiIFtTZXRWYWxpZGF0aW9uU3ViamVjdF09XCJTZXRWYWxpZGF0aW9uU3ViamVjdFwiIFtGaWVsZEFwcGVhcmVuY2VdPVwiRmllbGRBcHBlYXJlbmNlXCIgW2ZvcmNlSW52YWxpZF09XCJGb3JjZWRFcnJvclwiIFtGbG9hdGluZ0xhYmVsXT1cIkZsb2F0aW5nTGFiZWxcIiBbbm9WYWxpZGF0ZV09XCIhVmFsaWRhdGlvblwiIFtSZWFkb25seV09XCJSZWFkb25seVwiIFtzdWJtaXR0ZWRdPVwiRm9ybT8uc3VibWl0dGVkXCIgdHlwZT1cInRleHRcIiBwYXR0ZXJuPVwie3tQYXR0ZXJuIHx8IEZsb2F0UGF0dGVybn19XCIgW3JlcXVpcmVkXT1cIlJlcXVpcmVkXCIgW3BsYWNlaG9sZGVyXT1cIlBsYWNlaG9sZGVyXCIgWyhuZ01vZGVsKV09XCJNb2RlbFwiIFtpZF09XCJHZW5lcmF0ZWROYW1lXCIgbmFtZT1cInt7R2VuZXJhdGVkTmFtZX19XCIgYXV0b2NvbXBsZXRlPVwib2ZmXCIgKGlucHV0Q2hhbmdlKT1cImNoYW5nZWQoJGV2ZW50KTtcIiAoaW5wdXRGb2N1cyk9XCJmb2N1c2VkKCRldmVudCk7XCIgKGlucHV0RmluYWxpemVkKT1cImZpbmFsaXplZCgpXCI+PC92YWwtaW5wdXQ+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS1TZSBudW1lcm8gaW50ZXJvLS0+XHJcbiAgICA8ZGl2ICpuZ0lmPVwiVHlwZSA9PSAnaW50J1wiPlxyXG4gICAgICAgIDx2YWwtaW5wdXQgI3ZhbGlkYXRpb25Db250cm9sPVwibmdNb2RlbFwiIFtGb2N1c1N1YmplY3RdPVwiRm9jdXNTdWJqZWN0XCIgW1NldFZhbGlkYXRpb25TdWJqZWN0XT1cIlNldFZhbGlkYXRpb25TdWJqZWN0XCIgW0ZpZWxkQXBwZWFyZW5jZV09XCJGaWVsZEFwcGVhcmVuY2VcIiBbZm9yY2VJbnZhbGlkXT1cIkZvcmNlZEVycm9yXCIgW0Zsb2F0aW5nTGFiZWxdPVwiRmxvYXRpbmdMYWJlbFwiIFtub1ZhbGlkYXRlXT1cIiFWYWxpZGF0aW9uXCIgW1JlYWRvbmx5XT1cIlJlYWRvbmx5XCIgW3N1Ym1pdHRlZF09XCJGb3JtPy5zdWJtaXR0ZWRcIiB0eXBlPVwidGV4dFwiIHBhdHRlcm49XCJ7e1BhdHRlcm4gfHwgSW50UGF0dGVybn19XCIgW3JlcXVpcmVkXT1cIlJlcXVpcmVkXCIgW3BsYWNlaG9sZGVyXT1cIlBsYWNlaG9sZGVyXCIgWyhuZ01vZGVsKV09XCJNb2RlbFwiIFtpZF09XCJHZW5lcmF0ZWROYW1lXCIgbmFtZT1cInt7R2VuZXJhdGVkTmFtZX19XCIgYXV0b2NvbXBsZXRlPVwib2ZmXCIgKGlucHV0Q2hhbmdlKT1cImNoYW5nZWQoJGV2ZW50KTtcIiAoaW5wdXRGb2N1cyk9XCJmb2N1c2VkKCRldmVudCk7XCIgKGlucHV0RmluYWxpemVkKT1cImZpbmFsaXplZCgpXCI+PC92YWwtaW5wdXQ+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS1TZSBib29sZWFuLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwibS10LTVcIiAqbmdJZj1cIlR5cGUgPT0gJ2Jvb2xlYW4nXCI+XHJcbiAgICAgICAgPGlucHV0ICN2YWxpZGF0aW9uQ29udHJvbD1cIm5nTW9kZWxcIiBbcmVhZG9ubHldPVwiUmVhZG9ubHlcIiB0eXBlPVwiY2hlY2tib3hcIiBjbGFzcz1cImFwcC1wb2ludGVyXCIgWyhuZ01vZGVsKV09XCJNb2RlbFwiIGlkPVwie3tHZW5lcmF0ZWROYW1lfX1cIiBuYW1lPVwie3tHZW5lcmF0ZWROYW1lfX1cIiAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VkKCk7IGZpbmFsaXplZCgpO1wiIChjbGljayk9XCJmb2N1c2VkKCRldmVudCk7XCIgLz5cclxuICAgIDwvZGl2PlxyXG4gICAgPCEtLVNlIGVudW0tLT5cclxuICAgIDxkaXYgKm5nSWY9XCJUeXBlID09ICdlbnVtJ1wiPlxyXG4gICAgICAgIDx2YWwtc2VsZWN0ICN2YWxpZGF0aW9uQ29udHJvbD1cIm5nTW9kZWxcIiBbRm9jdXNTdWJqZWN0XT1cIkZvY3VzU3ViamVjdFwiIFtTZXRWYWxpZGF0aW9uU3ViamVjdF09XCJTZXRWYWxpZGF0aW9uU3ViamVjdFwiIFtGaWVsZEFwcGVhcmVuY2VdPVwiRmllbGRBcHBlYXJlbmNlXCIgW2ZvcmNlSW52YWxpZF09XCJGb3JjZWRFcnJvclwiIFtub1ZhbGlkYXRlXT1cIiFWYWxpZGF0aW9uXCIgW1JlYWRvbmx5XT1cIlJlYWRvbmx5XCIgW3N1Ym1pdHRlZF09XCJGb3JtPy5zdWJtaXR0ZWRcIiBbcGxhY2VIb2xkZXJWYWx1ZV09XCInJ1wiIFtwbGFjZWhvbGRlcl09XCJSZXF1aXJlZCA/ICgnU2VsZWN0JyB8IGxvY2FsaXplIDogbGMpICsgJy4uLicgOiBQbGFjZWhvbGRlclwiIFtyZXF1aXJlZF09XCJSZXF1aXJlZFwiIFsobmdNb2RlbCldPVwiTW9kZWxcIiAoaW5wdXRDaGFuZ2UpPVwiY2hhbmdlZCgkZXZlbnQpO1wiIChpbnB1dEZvY3VzKT1cImZvY3VzZWQoJGV2ZW50KTtcIiAoaW5wdXRGaW5hbGl6ZWQpPVwiZmluYWxpemVkKClcIiBbaWRdPVwiR2VuZXJhdGVkTmFtZVwiIG5hbWU9XCJ7e0dlbmVyYXRlZE5hbWV9fVwiPlxyXG4gICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCB2YWwgb2YgQm91bmRTb3VyY2VcIiBbdmFsdWVdPVwidmFsLmlkXCI+e3t2YWwuZGVzY3JpcHRpb259fTwvb3B0aW9uPlxyXG4gICAgICAgIDwvdmFsLXNlbGVjdD5cclxuICAgIDwvZGl2PlxyXG4gICAgPCEtLVNlIGF1dG9jb21wbGV0ZS0tPlxyXG4gICAgPGRpdiAqbmdJZj1cIlR5cGUgPT0gJ2F1dG9jb21wbGV0ZSdcIj5cclxuICAgICAgICA8dmFsLWF1dG9jb21wbGV0ZSAjdmFsaWRhdGlvbkNvbnRyb2w9XCJuZ01vZGVsXCIgW0ZvY3VzU3ViamVjdF09XCJGb2N1c1N1YmplY3RcIiBbU2V0VmFsaWRhdGlvblN1YmplY3RdPVwiU2V0VmFsaWRhdGlvblN1YmplY3RcIiBbRmllbGRBcHBlYXJlbmNlXT1cIkZpZWxkQXBwZWFyZW5jZVwiIFtmb3JjZUludmFsaWRdPVwiRm9yY2VkRXJyb3JcIiBbbm9WYWxpZGF0ZV09XCIhVmFsaWRhdGlvblwiIFtSZWFkb25seV09XCJSZWFkb25seVwiIFtzdWJtaXR0ZWRdPVwiRm9ybT8uc3VibWl0dGVkXCIgW3JlcXVpcmVkXT1cIlJlcXVpcmVkXCIgW3BsYWNlaG9sZGVyXT1cIlJlcXVpcmVkID8gKCdTZWxlY3QnIHwgbG9jYWxpemUgOiBsYykgKyAnLi4uJyA6IFBsYWNlaG9sZGVyXCIgWyhuZ01vZGVsKV09XCJNb2RlbFwiIFtpZF09XCJHZW5lcmF0ZWROYW1lXCIgbmFtZT1cInt7R2VuZXJhdGVkTmFtZX19XCIgW0ZpbHRlcmVkU291cmNlXT1cIkZpbHRlcmVkQm91bmRTb3VyY2VcIiAoaW5wdXRDaGFuZ2UpPVwiZmlsdGVyU291cmNlKCRldmVudCk7IGNoYW5nZWQoJGV2ZW50KTtcIiAoaW5wdXRGb2N1cyk9XCJmb2N1c2VkKCRldmVudCk7XCIgKGlucHV0RmluYWxpemVkKT1cImZpbmFsaXplZCgpXCI+PC92YWwtYXV0b2NvbXBsZXRlPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tU2UgZGF0ZSB0aW1lLS0+XHJcbiAgICA8ZGl2ICpuZ0lmPVwiVHlwZSA9PSAnZGF0ZXRpbWUnXCI+XHJcbiAgICAgICAgPHZhbC1kYXRldGltZSAjdmFsaWRhdGlvbkNvbnRyb2w9XCJuZ01vZGVsXCIgW0ZvY3VzU3ViamVjdF09XCJGb2N1c1N1YmplY3RcIiBbU2V0VmFsaWRhdGlvblN1YmplY3RdPVwiU2V0VmFsaWRhdGlvblN1YmplY3RcIiBbRmllbGRBcHBlYXJlbmNlXT1cIkZpZWxkQXBwZWFyZW5jZVwiIFtmb3JjZUludmFsaWRdPVwiRm9yY2VkRXJyb3JcIiBbRmxvYXRpbmdMYWJlbF09XCJGbG9hdGluZ0xhYmVsXCIgW25vVmFsaWRhdGVdPVwiIVZhbGlkYXRpb25cIiBbUmVhZG9ubHldPVwiUmVhZG9ubHlcIiBbc3VibWl0dGVkXT1cIkZvcm0/LnN1Ym1pdHRlZFwiIFtyZXF1aXJlZF09XCJSZXF1aXJlZFwiIFt1c2VKc0RhdGVzXT1cInVzZUpzRGF0ZXNcIiBbKG5nTW9kZWwpXT1cIk1vZGVsXCIgW2lkXT1cIkdlbmVyYXRlZE5hbWVcIiBuYW1lPVwie3tHZW5lcmF0ZWROYW1lfX1cIiBhdXRvY29tcGxldGU9XCJvZmZcIiAoaW5wdXRDaGFuZ2UpPVwiY2hhbmdlZCgkZXZlbnQpO1wiIChpbnB1dEZvY3VzKT1cImZvY3VzZWQoJGV2ZW50KTtcIiAoaW5wdXRGaW5hbGl6ZWQpPVwiZmluYWxpemVkKClcIj48L3ZhbC1kYXRldGltZT5cclxuICAgIDwvZGl2PlxyXG4gICAgPCEtLVNlIHRpbWUtLT5cclxuICAgIDxkaXYgKm5nSWY9XCJUeXBlID09ICd0aW1lJ1wiPlxyXG4gICAgICAgIDxuZ3gtbWF0LXRpbWVwaWNrZXIgbmFtZT1cInZhbC10aW1lXCIgI2VsZW1lbnRSZWYgI2Jhc2VJbnB1dD1cIm5nTW9kZWxcIiBbKG5nTW9kZWwpXT1cIk1vZGVsXCIgW2Rpc2FibGVkXT1cIlJlYWRvbmx5XCJcclxuICAgICAgICBbc2hvd1NwaW5uZXJzXT1cImZhbHNlXCIgW3N0ZXBIb3VyXT1cIjJcIiBbc3RlcE1pbnV0ZV09XCI1XCIgW3N0ZXBTZWNvbmRdPVwiMzBcIlxyXG4gICAgICAgIFtzaG93U2Vjb25kc109XCJ0cnVlXCIgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlZCgpXCIgI3ZhbGlkYXRpb25Db250cm9sPVwibmdNb2RlbFwiPlxyXG4gICAgICAgIDwvbmd4LW1hdC10aW1lcGlja2VyPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tU2UgZmlsZS0tPlxyXG4gICAgPGRpdiAqbmdJZj1cIlR5cGUgPT0gJ2ZpbGUnXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwIGZpbGUtdXBsb2FkXCI+XHJcbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiZmlsZVwiIChjaGFuZ2UpPVwiZmlsZUNoYW5nZSgpXCIgI2ZpbGVJbnB1dCBpZD1cInt7R2VuZXJhdGVkTmFtZX19XCIgY2xhc3M9XCJmaWxlLXVwbG9hZC1idG4gYXBwLXBvaW50ZXJcIiBbbXVsdGlwbGVdPVwibnVsbFwiLz5cclxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgW2NsYXNzLmZybS1wYWRkaW5nLWxlZnQtMjJdPVwiQWxsb3dEb3dubG9hZCAmJiBNb2RlbEZpbGUuZmlsZW5hbWUgJiYgTW9kZWxGaWxlLmZpbGViNjRcIiBjbGFzcz1cImZvcm0tY29udHJvbCBjaGVja2luZy1maWVsZFwiIHBsYWNlaG9sZGVyPVwie3snU2VsZWN0IGEgZmlsZScgfCBsb2NhbGl6ZSA6IGxjfX0uLi5cIiBbKG5nTW9kZWwpXT1cIk1vZGVsRmlsZS5maWxlbmFtZVwiIG5hbWU9XCJkc2ZpbGVcIiAjdmFsaWRhdGlvbkNvbnRyb2w9XCJuZ01vZGVsXCIgW3JlcXVpcmVkXT1cIlJlcXVpcmVkXCIvPlxyXG4gICAgXHJcbiAgICAgICAgICAgIDxhIGNsYXNzPVwiZmEgZmEtZG93bmxvYWQgYXBwLXBvaW50ZXIgYXBwLWlucHV0LWljb25cIiAqbmdJZj1cIkFsbG93RG93bmxvYWQgJiYgTW9kZWxGaWxlLmZpbGVuYW1lICYmIE1vZGVsRmlsZS5maWxlYjY0XCIgKGNsaWNrKT1cImRvd25sb2FkQXR0YWNobWVudCgpXCI+PC9hPlxyXG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXRpbWVzIGRlbGV0ZS1maWxlXCIgKGNsaWNrKT1cImZpbGVDaGFuZ2UodHJ1ZSlcIiAqbmdJZj1cIk1vZGVsRmlsZS5maWxlbmFtZVwiPjwvaT5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpbnB1dC1ncm91cC1idG5cIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLWZpbGUtdXBsb2FkXCIgdHlwZT1cImJ1dHRvblwiPjxpIGNsYXNzPVwiZmEgZmEtdXBsb2FkXCI+PC9pPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT4iXX0=
|
|
420
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1hZGFwdGl2ZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mb3Jtcy1hbmQtdmFsaWRhdGlvbnMvc3JjL2xpYi9mb3Jtcy9mb3JtLWFkYXB0aXZlL2Zvcm0tYWRhcHRpdmUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZm9ybXMtYW5kLXZhbGlkYXRpb25zL3NyYy9saWIvZm9ybXMvZm9ybS1hZGFwdGl2ZS9mb3JtLWFkYXB0aXZlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFVBQVU7QUFDVixPQUFPLEVBQUUsdUJBQXVCLEVBQXFCLFNBQVMsRUFBb0IsTUFBTSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFpQixTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakssT0FBTyxFQUF5QyxhQUFhLEVBQWEsZ0JBQWdCLEVBQWlDLE1BQU0sZ0JBQWdCLENBQUM7QUFFbEosc0JBQXNCO0FBQ3RCLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBSzlELGVBQWU7QUFDZixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDdkQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFekUsVUFBVTtBQUNWLE9BQU8sRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzdELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7QUFjL0MsMkpBQTJKO0FBUTNKLE1BQU0sT0FBTyxxQkFBc0IsU0FBUSxlQUFlO0lBMkR0RCwyQkFBMkI7SUFDM0IsWUFBWSxHQUFzQixFQUFVLE9BQXVCLEVBQVUsU0FBc0IsRUFBVSxXQUFtQyxFQUFTLEVBQXVCLEVBQXNCLFNBQW9CLEVBQXFDLFdB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U0FBUzsrQkFDSSxlQUFlLGFBQ2QsQ0FBQyxFQUFFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxRQUFRLEVBQUUsd0JBQXdCLEVBQUUsQ0FBQyxtQkFHaEUsdUJBQXVCLENBQUMsTUFBTTs7MEJBOERvSSxRQUFROzswQkFBSSxJQUFJOzswQkFBMEIsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxhQUFhOzswQkFBc0QsUUFBUTs7MEJBQWtDLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsYUFBYTs7MEJBQTBCLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsY0FBYzs0Q0F6RC9hLElBQUk7c0JBQVosS0FBSztnQkFHRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBR0csT0FBTztzQkFBZixLQUFLO2dCQUdHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBR3FDLE9BQU87c0JBQWpELFNBQVM7dUJBQUMsV0FBVyxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFHaEMsYUFBYTtzQkFBckIsS0FBSztnQkFNRyxTQUFTO3NCQUFqQixLQUFLO2dCQUdHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBR0csY0FBYztzQkFBdEIsS0FBSztnQkFHRyxRQUFRO3NCQUFoQixLQUFLO2dCQUdHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBR0csT0FBTztzQkFBZixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQW5ndWxhclxyXG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgSG9zdCwgSW5qZWN0LCBJbnB1dCwgT3B0aW9uYWwsIFNlbGYsIFNpbXBsZUNoYW5nZXMsIFZpZXdDaGlsZCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTElEQVRPUlMsIE5nQ29udHJvbCwgUGF0dGVyblZhbGlkYXRvciwgVmFsaWRhdGlvbkVycm9ycywgVmFsaWRhdG9yRm4gfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuXHJcbi8vIEVTIC8gQ29uZmlndXJhemlvbmlcclxuaW1wb3J0IHsgTG9jYWxpemF0aW9uU2VydmljZSB9IGZyb20gXCJAZXNmYWVuemEvbG9jYWxpemF0aW9uc1wiO1xyXG5pbXBvcnQgeyBEYXRlU2VydmljZSwgVXRpbGl0eVNlcnZpY2UgfSBmcm9tIFwiQGVzZmFlbnphL2V4dGVuc2lvbnNcIjtcclxuaW1wb3J0IHsgQWNjZXNzQ29udHJvbFNlcnZpY2UsIENvbXBvbmVudENvbnRleHQgfSBmcm9tICdAZXNmYWVuemEvYWNjZXNzLWNvbnRyb2wnO1xyXG5pbXBvcnQgeyBOZ3hNYXREYXRlQWRhcHRlciB9IGZyb20gXCJAYW5ndWxhci1tYXRlcmlhbC1jb21wb25lbnRzL2RhdGV0aW1lLXBpY2tlclwiO1xyXG5cclxuLy8gQXBwbGljYXppb25lXHJcbmltcG9ydCB7IEJhc2VGb3JtQ29udHJvbCB9IGZyb20gXCIuLi9iYXNlLWZvcm0tY29udHJvbFwiO1xyXG5pbXBvcnQgeyBGb3JtQWRhcHRpdmVDb21wb25lbnRMb2MgfSBmcm9tIFwiLi9mb3JtLWFkYXB0aXZlLmNvbXBvbmVudC5sb2NcIjtcclxuXHJcbi8vIE1vZGVsbGlcclxuaW1wb3J0IHsgQUNPX0NVU1RPTUtFWSwgRkFWX0RFQlVHX01PREUgfSBmcm9tICcuLi8uLi90b2tlbnMnO1xyXG5pbXBvcnQgeyBBcHBGaWxlIH0gZnJvbSBcIi4uLy4uL21vZGVscy9BcHBGaWxlXCI7XHJcblxyXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHsgQ2hhbmdlRXZlbnQgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL0NoYW5nZUV2ZW50XCI7XHJcblxyXG4vKipcclxuICogRGljaGlhcmF6aW9uZSBkZWxsYSB2YXJpYWJpbGUgZ2xvYmFsZSBkYXlqcy4gTCdvbmVyZSBkaSBcImNyZWFybGFcIiDDqCBhZmZpZGF0byBhbGwnYXBwbGljYXppb25lIGNoZSB1dGlsaXp6YSBxdWVzdGEgbGlicmVyaWEsIFxyXG4gKiBjaGUgZG92csOgIGltcG9ydGFyZSBsbyBzY3JpcHQgZ2xvYmFsZSBkaSBkYXlqcyBuZWxsYSBDTElcclxuICovXHJcbmRlY2xhcmUgdmFyIGRheWpzOiBhbnk7XHJcblxyXG4vKiogT3B6aW9uaSBnZW5lcmljaGUgZGlzcG9uaWJpbGkgKi9cclxuZXhwb3J0IHR5cGUgQXZhaWxhYmxlT3B0aW9ucyA9ICdKc0RhdGVzJyB8ICdDYXNlU2Vuc2l0aXZlJyB8ICdNaW5DaGFycycgfCAnU2VhcmNoRnVuY3Rpb24nIHwgJ0FsaWdubWVudCcgfCAnUHJlY2lzaW9uJyB8ICdBbGxvd0Rvd25sb2FkJyB8ICdBZGp1c3ROdW1iZXInIHwgJ1BhdHRlcm4nO1xyXG5cclxuLyoqIENvbXBvbmVudGUgaW4gZ3JhZG8gZGkgYXNzdW1lcmUgbGEgZm9ybWEgZGkgdW4gcXVhbHNpYXNpIGFsdHJvIGNvbXBvbmVudGUgZm9ybSBpbiBiYXNlIGFsIHRpcG8gc3BlY2lmaWNhdG8uIFV0aWxlICBwZXIgbGEgY3JlYXppb25lIGRpIGZvcm0gZGluYW1pY2kgKi9cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogXCJmb3JtLWFkYXB0aXZlXCIsXHJcbiAgICBwcm92aWRlcnM6IFt7IHByb3ZpZGU6IExvY2FsaXphdGlvblNlcnZpY2UsIHVzZUNsYXNzOiBGb3JtQWRhcHRpdmVDb21wb25lbnRMb2MgfV0sXHJcbiAgICB0ZW1wbGF0ZVVybDogXCJmb3JtLWFkYXB0aXZlLmNvbXBvbmVudC5odG1sXCIsXHJcbiAgICBzdHlsZVVybHM6IFtcIi4uL2Zvcm0tZmlsZS9mb3JtLWZpbGUuY29tcG9uZW50LmNzc1wiXSxcclxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBGb3JtQWRhcHRpdmVDb21wb25lbnQgZXh0ZW5kcyBCYXNlRm9ybUNvbnRyb2wgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciB7XHJcblxyXG4gICAgLyoqIFRpcG9sb2dpYSBjaGUgZGVjaWRlIGNoZSBjb21wb25lbnRlIG1vc3RyYXJlICovXHJcbiAgICBASW5wdXQoKSBUeXBlOiAnc3RyaW5nJyB8ICdmbG9hdCcgfCAnZGF0ZScgfCAnbnVtYmVyJyB8ICdpbnQnIHwgJ2Jvb2xlYW4nIHwgJ2VudW0nIHwgJ2F1dG9jb21wbGV0ZScgfCAnZGF0ZXRpbWUnIHwgJ3RpbWUnIHwgJ2ZpbGUnIHwgJ2N1cnJlbmN5JztcclxuXHJcbiAgICAvKiogTWVzc2FnZ2lvIHBlciBxdWFuZG8gc2kgYmluZGEgdW4gZm9ybS1hZGFwdGl2ZSBzZW56YSB0aXBvICovXHJcbiAgICBASW5wdXQoKSBUeXBlTWlzc2luZ01lc3NhZ2U6IHN0cmluZztcclxuXHJcbiAgICAvKiogUGF0dGVybiBkaSB2YWxpZGF6aW9uZSAqL1xyXG4gICAgQElucHV0KCkgUGF0dGVybjogc3RyaW5nO1xyXG5cclxuICAgIC8qKiBJbmRpY2EgZGkgYWdnaXVzdGFyZSBpbiB1c2NpdGEgaSBudW1iZXIgaW4gbW9kbyBjaGUgc2lhbm8gcGFyc2FiaWxpIGRhbCBqYXZhc2NyaXB0ICovXHJcbiAgICBASW5wdXQoKSBBZGp1c3ROdW1iZXI6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAgIC8qKiBSaWZlcmltZW50byBhbGwnZWxlbWVudG8gaW5wdXQgZGkgdGlwbyBmaWxlIHF1YWxvcmEgaWwgKipUeXBlKiogZGkgcXVlc3RvIGNvbXBvbmVudGUgZm9zc2UgKipmaWxlKiogKi9cclxuICAgIEBWaWV3Q2hpbGQoXCJmaWxlSW5wdXRcIiwgeyBzdGF0aWM6IGZhbHNlIH0pIGlucHV0RWw6IEVsZW1lbnRSZWY7XHJcblxyXG4gICAgLyoqIFBlcm1ldHRlIGRpIHNjYXJpY2FyZSBsJ2V2ZW50dWFsZSBmaWxlIHByZXNlbnRlIHF1YWxvcmEgaWwgKipUeXBlKiogZGkgcXVlc3RvIGNvbXBvbmVudGUgZm9zc2UgKipmaWxlKiogKi9cclxuICAgIEBJbnB1dCgpIEFsbG93RG93bmxvYWQ6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAgIC8qKiBNb2RlbGxvIHR5cGVzY3JpcHQgZGkgYmluZCBkZWkgZmlsZSAqL1xyXG4gICAgTW9kZWxGaWxlOiBBcHBGaWxlO1xyXG5cclxuICAgIC8qKiBVdGlsaXp6YXRhIG5lbCBmb3JtLWFkYXB0ZXIgcGVyIHNwZWNpZmljYXJlIGxhIHByZWNpc2lvbmUgZGVnbGkgaW5wdXQgY3VycmVuY3ltYXAgKFR5cGU6IGN1cnJlbmN5KSAqL1xyXG4gICAgQElucHV0KCkgUHJlY2lzaW9uOiBudW1iZXIgPSAyO1xyXG5cclxuICAgIC8qKiBBbGxpbmVhbWVudG8gZGVsbGEgY3VycmVuY3kgbWFzayAqL1xyXG4gICAgQElucHV0KCkgQWxpZ25tZW50OiAnbGVmdCcgfCAncmlnaHQnID0gJ3JpZ2h0JztcclxuXHJcbiAgICAvKiogRnVuemlvbmUgZGkgcmljZXJjYSBjaGUgdmVycsOgIGNoaWFtYXRhIGRhbCBjb21wb25lbnRlICovXHJcbiAgICBASW5wdXQoKSBTZWFyY2hGdW5jdGlvbjogKHNlYXJjaDogc3RyaW5nLCBieWlkOiBib29sZWFuKSA9PiBPYnNlcnZhYmxlPHsgaWQ6IHN0cmluZywgZGVzY3JpcHRpb246IHN0cmluZyB9W10+ID0gbnVsbDtcclxuXHJcbiAgICAvKiogTnVtZXJvIG1pbmltbyBkaSBjYXJhdHRlcmkgY29uIGN1aSBjZXJjYXJlICovXHJcbiAgICBASW5wdXQoKSBNaW5DaGFyczogbnVtYmVyID0gMztcclxuXHJcbiAgICAvKiogSW5kaWNhIHNlIGkgY29udHJvbGxpIGRldm9ubyBlc3NlcmUgZWZmZXR0dWF0aSB0ZW5lbmRvIGNvbnRvIGRlbCBDYXNlIG8gbWVuby4gVmFsZSBzb2xvIHF1YWxvcmEgbGEgKipTb3VyY2UqKiBmb3NzZSBmb3JuaXRhICovXHJcbiAgICBASW5wdXQoKSBDYXNlU2Vuc2l0aXZlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgLyoqIE9wemlvbmkgc3BlY2lmaWNoZSBwZXIgaWwgY29tcG9uZW50ZSBjaGUgc2kgdmEgYSB2aXN1YWxpenphcmUuIEVzLiBwZXIgaSB0aXBpIGRhdGU6IHsgSnNEYXRlczogdHJ1ZSB9ICovXHJcbiAgICBASW5wdXQoKSBPcHRpb25zOiB7IFtpZCBpbiBBdmFpbGFibGVPcHRpb25zXT86IGFueSB9ID0ge307XHJcblxyXG4gICAgLyoqIFZhcmlhYmlsZSBpbnRlcm5hIGNoZSBnZXN0aXNjZSBzZSBlZmZldHR1YXJlIGlsIHJpYWxsaW5lYW1lbnRvIGRlaSBkYXRpIG8gbWVubyAqL1xyXG4gICAgcHJpdmF0ZSBhbGlnblZhbHVlczogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5kaWNhIHNlIGlnbm9yYXJlIGlsIHByb3NzaW1vIGV2ZW50byB3cml0ZVZhbHVlIGNoZSBub3JtYWxtZW50ZSBkb3ZyZWJiZSByaWNoaWVkZXJlIGxhIG51b3ZhIHNvdXJjZS4gU2VydmUgcGVyIHF1YW5kbyBsJ3V0ZW50ZSBzZWxlemlvbmEgdW4gZWxlbWVudG86XHJcbiAgICAgKiBTdWJpdG8gZG9wbyBwYXJ0aXJlYmJlIHVuIGFsdHJvIGV2ZW50byBtb2RlbENoYW5nZSBjaGUgcmljYXJpY2hlcmViYmUgbnVvdmFtZW50ZSBsYSBzb3VyY2VcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBpZ25vcmVOZXh0V3JpdGVWYWx1ZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIC8qKiBDYWNoZSBkZWxsYSBzb3JnZW50ZSBvcmlnaW5hbGUgUE9TVCBiaW5kaW5nLCBpbiBtb2RvIGRhIHBvdGVyIGZhcmUgZmlsdHJpIGluIGxvY2FsZSBxdWFsb3JhIGxhICoqU2VhcmNoRnVuY3Rpb24qKiBub24gZm9zc2UgZGVmaW5pdGEgZSBsYSAqKlNvdXJjZSoqIGZvc3NlIGFzc2VnbmF0YSAqL1xyXG4gICAgcHVibGljIEZpbHRlcmVkQm91bmRTb3VyY2U6IHsgaWQ6IHN0cmluZywgZGVzY3JpcHRpb246IHN0cmluZyB9W10gPSBbXTtcclxuXHJcbiAgICAvKiogU29sbyBwZXIgZ2xpIGlucHV0IGRpIHRpcG8gXCJkYXRlXCIuIENhcGlzY2UgY2hlIG1vZGFsaXTDoCB1c2FyZSBwZXIgaWwgdmFsaWRhdGlvbi1kYXRlIHNvdHRvc3RhbnRlICovXHJcbiAgICBwdWJsaWMgdXNlSnNEYXRlczogYm9vbGVhbiA9IG51bGw7XHJcblxyXG4gICAgLyoqIFZhcmlhYmlsZSBpbnRlcm5hIGNoZSBzYWx2YSBpbCB2YWxvcmUgZGVnbGkgaW5wdXQgZmxvYXQgcHJpbWEgZGVsbCdhZ2dpdXN0YW1lbnRvICovXHJcbiAgICBwcml2YXRlIGZsb2F0VmFsdWVQcmVBZGp1c3RtZW50ZTogc3RyaW5nO1xyXG5cclxuICAgIC8qKiBAaWdub3JlIENvc3RydXR0b3JlICAqL1xyXG4gICAgY29uc3RydWN0b3IoY2RyOiBDaGFuZ2VEZXRlY3RvclJlZiwgcHJpdmF0ZSB1dGlFeHRzOiBVdGlsaXR5U2VydmljZSwgcHJpdmF0ZSBkYXRlc0V4dHM6IERhdGVTZXJ2aWNlLCBwcml2YXRlIGRhdGVBZGFwdGVyOiBOZ3hNYXREYXRlQWRhcHRlcjxhbnk+LCBwdWJsaWMgbGM6IExvY2FsaXphdGlvblNlcnZpY2UsIEBPcHRpb25hbCgpIEBTZWxmKCkgbmdDb250cm9sOiBOZ0NvbnRyb2wsIEBPcHRpb25hbCgpIEBJbmplY3QoTkdfVkFMSURBVE9SUykgX3ZhbGlkYXRvcnM6IEFycmF5PGFueT4sIGFjOiBBY2Nlc3NDb250cm9sU2VydmljZSwgQE9wdGlvbmFsKCkgQXBwQ29udGV4dDogQ29tcG9uZW50Q29udGV4dCwgQE9wdGlvbmFsKCkgQEluamVjdChBQ09fQ1VTVE9NS0VZKSBBQ09fQ1VTVE9NS0VZOiBzdHJpbmcsIEBPcHRpb25hbCgpIEBJbmplY3QoRkFWX0RFQlVHX01PREUpIEZBVl9ERUJVR19NT0RFOiBib29sZWFuKSB7XHJcbiAgICAgICAgc3VwZXIoY2RyLCBuZ0NvbnRyb2wsIF92YWxpZGF0b3JzLCBhYywgQXBwQ29udGV4dCwgQUNPX0NVU1RPTUtFWSwgRkFWX0RFQlVHX01PREUpO1xyXG5cclxuICAgICAgICB0aGlzLk1vZGVsRmlsZSA9IG5ldyBBcHBGaWxlKCk7XHJcbiAgICAgICAgdGhpcy5Vc2VVc2VyVmFsaWRhdG9ycyA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBJbnRQYXR0ZXJuID0gJ15bMC05XVxcXFxkKiQnO1xyXG4gICAgcHVibGljIEZsb2F0UGF0dGVybiA9ICdeKFswLTldKlssXSk/WzAtOV0rJCc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBOdmwgY29uIHVuIG1pbmltbyBkaSBzZW5zb1xyXG4gICAgICogQHBhcmFtIHZhbHVlIFZhbG9yZSBiYXNlXHJcbiAgICAgKiBAcGFyYW0gaWZub2QgVmFsb3JlIGRhIHVzYXJlIHNlICoqdmFsdWUqKiDDqCBudWxsbyBvIHVuZGVmaW5lZFxyXG4gICAgICogQHJldHVybnMgSWwgdmFsb3JlIHByZXNvIGZyYSBpIGR1ZSBkaXNwb25pYmlsaVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIG52bDxUPih2YWx1ZTogVCwgaWZub2Q6IFQpOiBUIHtcclxuICAgICAgICByZXR1cm4gdmFsdWUgPT0gbnVsbCB8fCB2YWx1ZSA9PSB1bmRlZmluZWQgPyBpZm5vZCA6IHZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xyXG5cclxuICAgICAgICAvLyBBc3NlZ25hemlvbmUgT3B6aW9uaSBkYSBvZ2dldHRvXHJcbiAgICAgICAgaWYodGhpcy5PcHRpb25zKXtcclxuICAgICAgICAgICAgdGhpcy51c2VKc0RhdGVzID0gdGhpcy5udmwodGhpcy5PcHRpb25zPy5Kc0RhdGVzLCB0aGlzLnVzZUpzRGF0ZXMpOztcclxuICAgICAgICAgICAgdGhpcy5DYXNlU2Vuc2l0aXZlID0gdGhpcy5udmwodGhpcy5PcHRpb25zPy5DYXNlU2Vuc2l0aXZlLCB0aGlzLkNhc2VTZW5zaXRpdmUpO1xyXG4gICAgICAgICAgICB0aGlzLk1pbkNoYXJzID0gdGhpcy5udmwodGhpcy5PcHRpb25zPy5NaW5DaGFycywgdGhpcy5NaW5DaGFycyk7XHJcbiAgICAgICAgICAgIHRoaXMuU2VhcmNoRnVuY3Rpb24gPSB0aGlzLm52bCh0aGlzLk9wdGlvbnM/LlNlYXJjaEZ1bmN0aW9uLCB0aGlzLlNlYXJjaEZ1bmN0aW9uKTtcclxuICAgICAgICAgICAgdGhpcy5BbGlnbm1lbnQgPSB0aGlzLm52bCh0aGlzLk9wdGlvbnM/LkFsaWdubWVudCwgdGhpcy5BbGlnbm1lbnQpO1xyXG4gICAgICAgICAgICB0aGlzLlByZWNpc2lvbiA9IHRoaXMubnZsKHRoaXMuT3B0aW9ucz8uUHJlY2lzaW9uLCB0aGlzLlByZWNpc2lvbik7XHJcbiAgICAgICAgICAgIHRoaXMuQWxsb3dEb3dubG9hZCA9IHRoaXMubnZsKHRoaXMuT3B0aW9ucz8uQWxsb3dEb3dubG9hZCwgdGhpcy5BbGxvd0Rvd25sb2FkKTtcclxuICAgICAgICAgICAgdGhpcy5BZGp1c3ROdW1iZXIgPSB0aGlzLm52bCh0aGlzLk9wdGlvbnM/LkFkanVzdE51bWJlciwgdGhpcy5BZGp1c3ROdW1iZXIpO1xyXG4gICAgICAgICAgICB0aGlzLlBhdHRlcm4gPSB0aGlzLm52bCh0aGlzLk9wdGlvbnM/LlBhdHRlcm4sIHRoaXMuUGF0dGVybik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5uZ0NvbnRyb2wpIHtcclxuICAgICAgICAgICAgLy8gRXNjbHVzaSBpIHZhbGlkYXRvcmkgYSBjb21wb25lbnRpXHJcbiAgICAgICAgICAgbGV0IHZhbGlkYXRvcnMgPSBbLi4uKHRoaXMuX3ZhbGlkYXRvcnMgfHwgW10pXS5maWx0ZXIodiA9PiAhdi5uZ09uSW5pdCk7XHJcblxyXG4gICAgICAgICAgIHZhciBwdiA9IG5ldyBQYXR0ZXJuVmFsaWRhdG9yKCk7XHJcbiAgICAgICAgICAgc3dpdGNoICh0aGlzLlR5cGUpIHtcclxuICAgICAgICAgICAgICAgY2FzZSAnaW50JzpcclxuICAgICAgICAgICAgICAgICAgIHB2LnBhdHRlcm4gPSB0aGlzLlBhdHRlcm4gfHwgdGhpcy5JbnRQYXR0ZXJuO1xyXG4gICAgICAgICAgICAgICAgICAgdmFsaWRhdG9ycy5wdXNoKHB2KTtcclxuICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICBjYXNlICdmbG9hdCc6XHJcbiAgICAgICAgICAgICAgIGNhc2UgJ251bWJlcic6XHJcbiAgICAgICAgICAgICAgICAgICBwdi5wYXR0ZXJuID0gdGhpcy5QYXR0ZXJuIHx8IHRoaXMuRmxvYXRQYXR0ZXJuO1xyXG4gICAgICAgICAgICAgICAgICAgdmFsaWRhdG9ycy5wdXNoKHB2KTtcclxuICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICBjYXNlICdzdHJpbmcnOlxyXG4gICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuUGF0dGVybikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgIHB2LnBhdHRlcm4gPSB0aGlzLlBhdHRlcm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9ycy5wdXNoKHB2KTtcclxuICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgIH1cclxuICAgICAgICAgICAvLyBBIHF1YW50byBwYXJlIGxhIGNyZWF6aW9uZSBkZWwgdmFsaWRhdG9yZSByb21wZSBpbCBjYXNvIGQndXNvIGNsYXNzaWNvLi4uXHJcbiAgICAgICAgICAgKDxhbnk+cHYpLl92YWxpZGF0b3IgPSB0aGlzLmN1c3RvbVBhdHRlcm5WYWxpZGF0b3IocHYucGF0dGVybik7XHJcbiAgICAgICAgICAgKDxhbnk+dGhpcy5uZ0NvbnRyb2wpLl9zZXRWYWxpZGF0b3JzKHZhbGlkYXRvcnMpO1xyXG4gICAgICAgICAgIHRoaXMubmdDb250cm9sLmNvbnRyb2wuc2V0VmFsaWRhdG9ycyh2YWxpZGF0b3JzKTtcclxuICAgICAgICAgICB0aGlzLm5nQ29udHJvbC5jb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBWYWxpZGF0b3IgdGhhdCByZXF1aXJlcyB0aGUgY29udHJvbCdzIHZhbHVlIHRvIG1hdGNoIGEgcmVnZXggcGF0dGVybi5cclxuICAgICAqIFNlZSBgVmFsaWRhdG9ycy5wYXR0ZXJuYCBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbi5cclxuICAgICAqL1xyXG4gICAgY3VzdG9tUGF0dGVyblZhbGlkYXRvcihwYXR0ZXJuOiBzdHJpbmcgfCBSZWdFeHApOiBWYWxpZGF0b3JGbiB7XHJcbiAgICAgICAgaWYgKCFwYXR0ZXJuKSByZXR1cm4gKF86IEFic3RyYWN0Q29udHJvbCkgPT4gbnVsbDtcclxuICAgICAgICBsZXQgcmVnZXg6IFJlZ0V4cDtcclxuICAgICAgICBsZXQgcmVnZXhTdHI6IHN0cmluZztcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiBwYXR0ZXJuID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICByZWdleFN0ciA9ICcnO1xyXG4gICAgICAgICAgICBpZiAocGF0dGVybi5jaGFyQXQoMCkgIT09ICdeJykgcmVnZXhTdHIgKz0gJ14nO1xyXG4gICAgICAgICAgICByZWdleFN0ciArPSBwYXR0ZXJuO1xyXG4gICAgICAgICAgICBpZiAocGF0dGVybi5jaGFyQXQocGF0dGVybi5sZW5ndGggLSAxKSAhPT0gJyQnKSByZWdleFN0ciArPSAnJCc7XHJcbiAgICAgICAgICAgIHJlZ2V4ID0gbmV3IFJlZ0V4cChyZWdleFN0cik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcclxuICAgICAgICAgICAgaWYgKCFjb250cm9sLnZhbHVlKSB7IHJldHVybiBudWxsOyB9XHJcblxyXG4gICAgICAgICAgICAvLyBDYXJpY2FtZW50byBhdnZlbnV0byBhZGVzc28gZGEgbW9kZWxsb1xyXG4gICAgICAgICAgICBpZihjb250cm9sLnZhbHVlICYmICF0aGlzLmZsb2F0VmFsdWVQcmVBZGp1c3RtZW50ZSlcclxuICAgICAgICAgICAgICAgIHRoaXMuZmxvYXRWYWx1ZVByZUFkanVzdG1lbnRlID0gY29udHJvbC52YWx1ZS50b1N0cmluZygpLnJlcGxhY2UoXCIuXCIsIFwiLFwiKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiByZWdleC50ZXN0KHRoaXMuZmxvYXRWYWx1ZVByZUFkanVzdG1lbnRlKSA/IG51bGwgOiB7ICdwYXR0ZXJuJzogeyAncmVxdWlyZWRQYXR0ZXJuJzogcmVnZXhTdHIsICdhY3R1YWxWYWx1ZSc6IHRoaXMuZmxvYXRWYWx1ZVByZUFkanVzdG1lbnRlIH0gfTtcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBAaWdub3JlICovXHJcbiAgICBwdWJsaWMgYXN5bmMgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xyXG4gICAgICAgIGNvbnN0IG5ld1NvdXJjZSA9IGNoYW5nZXNbXCJTb3VyY2VcIl07XHJcbiAgICAgICAgY29uc3QgbmV3VHlwZSA9IGNoYW5nZXNbXCJUeXBlXCJdO1xyXG5cclxuICAgICAgICBpZiAobmV3U291cmNlKSB7XHJcbiAgICAgICAgICAgIHRoaXMudHJ5QmluZFNvdXJjZURpc3BsYXkoKTtcclxuXHJcbiAgICAgICAgICAgIC8vIFByaW1hIGFzc2VnbmF6aW9uZSBzZSBjYW1iaWEgbGEgc291cmNlIHNvdHRvIChxdWluZGkgc2UgdmllbmUgYmluZGF0YSBkaXJldHRhbWVudGUgZGEgSFRNTClcclxuICAgICAgICAgICAgaWYgKHRoaXMuVHlwZSA9PSBcImF1dG9jb21wbGV0ZVwiICYmICh0aGlzLk1vZGVsPy5sZW5ndGggfHwgMCkgPj0gdGhpcy5NaW5DaGFycyAmJiAhdGhpcy5TZWFyY2hGdW5jdGlvbilcclxuICAgICAgICAgICAgICAgIHRoaXMuRmlsdGVyZWRCb3VuZFNvdXJjZSA9IHRoaXMuQm91bmRTb3VyY2U7XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIHRoaXMuRmlsdGVyZWRCb3VuZFNvdXJjZSA9IFtdO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAobmV3VHlwZSAmJiB0aGlzLk1vZGVsKVxyXG4gICAgICAgICAgICB0aGlzLndyaXRlVmFsdWUodGhpcy5Nb2RlbCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIEBpZ25vcmUgKi9cclxuICAgIHdyaXRlVmFsdWUob2JqOiBhbnkpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmFsaWduVmFsdWVzID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMuRXZhbHVhdGVkTW9kZWwgPSBvYmo/LnRvU3RyaW5nKCkgfHwgXCJcIjtcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLlR5cGUpIHtcclxuICAgICAgICAgICAgdGhpcy5UeXBlID0gXCJzdHJpbmdcIjtcclxuICAgICAgICAgICAgdGhpcy5FdmFsdWF0ZWRNb2RlbCA9IG9iajtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLlR5cGUgPT0gXCJkYXRlXCIgfHwgdGhpcy5UeXBlID09IFwiZGF0ZXRpbWVcIikge1xyXG4gICAgICAgICAgICB0aGlzLnVzZUpzRGF0ZXMgPSB0aGlzLnVzZUpzRGF0ZXMgPT0gbnVsbCA/IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopID09PSBcIltvYmplY3QgRGF0ZV1cIiA6IHRoaXMudXNlSnNEYXRlcztcclxuICAgICAgICAgICAgaWYgKHRoaXMuVHlwZSA9PSBcImRhdGVcIilcclxuICAgICAgICAgICAgICAgIHRoaXMuRXZhbHVhdGVkTW9kZWwgPSB0aGlzLmRhdGVzRXh0cy5nZXRGb3JtYXR0ZWQob2JqLCB0cnVlLCBmYWxzZSk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLlR5cGUgPT0gXCJkYXRldGltZVwiKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5FdmFsdWF0ZWRNb2RlbCA9IHRoaXMuZGF0ZXNFeHRzLmdldEZvcm1hdHRlZChvYmosIGZhbHNlLCB0cnVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoKHRoaXMuVHlwZSA9PSBcImZsb2F0XCIgfHwgdGhpcy5UeXBlID09IFwibnVtYmVyXCIpICYmIG9iaikge1xyXG4gICAgICAgICAgICBvYmogPSBvYmoudG9TdHJpbmcoKS5yZXBsYWNlKFwiLlwiLCBcIixcIik7XHJcbiAgICAgICAgICAgIHRoaXMuRXZhbHVhdGVkTW9kZWwgPSBvYmo7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIFBlciBzaWN1cmV6emEgcmlhbGxpbmVvIGkgdmFsb3JpXHJcbiAgICAgICAgZWxzZSBpZiAodGhpcy5UeXBlID09IFwiYm9vbGVhblwiKSB7XHJcbiAgICAgICAgICAgIG9iaiA9IG9iaiA/IChvYmogPT09IHRydWUgfHwgb2JqLnRvTG93ZXJDYXNlKCkgPT0gXCJ0cnVlXCIpIDogZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuYWxpZ25WYWx1ZXMgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLkV2YWx1YXRlZE1vZGVsID0gdGhpcy5sYy5sb2Mob2JqID8gJ1PDrCcgOiAnTm8nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodGhpcy5UeXBlID09IFwidGltZVwiKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IFtob3VycywgbWludXRlcywgc2Vjb25kc10gPSAob2JqIHx8IFwiMDA6MDA6MDBcIikuc3BsaXQoXCI6XCIpO1xyXG4gICAgICAgICAgICBvYmogPSBkYXlqcygpLmhvdXIocGFyc2VJbnQoaG91cnMgPz8gMCkpLm1pbnV0ZShwYXJzZUludChtaW51dGVzID8/IDApKS5zZWNvbmQocGFyc2VJbnQoc2Vjb25kcyA/PyAwKSk7XHJcbiAgICAgICAgICAgIHRoaXMuRXZhbHVhdGVkTW9kZWwgPSBgJHtob3VycyB8fCAnMDAnfToke21pbnV0ZXMgfHwgJzAwJ306JHtzZWNvbmRzIHx8ICcwMCd9YDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodGhpcy5UeXBlID09IFwiZmlsZVwiKSB7XHJcbiAgICAgICAgICAgIG9iaiA9IHRoaXMuTW9kZWxGaWxlO1xyXG4gICAgICAgICAgICB0aGlzLkV2YWx1YXRlZE1vZGVsID0gdGhpcy5Nb2RlbEZpbGUuZmlsZW5hbWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHRoaXMuVHlwZSA9PSBcImF1dG9jb21wbGV0ZVwiKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLlNlYXJjaEZ1bmN0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLlNlYXJjaEZ1bmN0aW9uKG9iaiwgdHJ1ZSkuc3Vic2NyaWJlKHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuU291cmNlID0gdDtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRyeUJpbmRTb3VyY2VEaXNwbGF5KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7IHRoaXMuZmluYWxpemVWYWx1ZShvYmopOyB9KTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIHRoaXMuZmluYWxpemVWYWx1ZShvYmopO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuQm91bmRTb3VyY2UgJiYgdGhpcy5Cb3VuZFNvdXJjZS5sZW5ndGggPiAwKVxyXG4gICAgICAgICAgICB0aGlzLkV2YWx1YXRlZE1vZGVsID0gdGhpcy5Cb3VuZFNvdXJjZS5maW5kKHQgPT4gdC5pZCA9PSBvYmopPy5kZXNjcmlwdGlvbjtcclxuXHJcbiAgICAgICAgc3VwZXIud3JpdGVWYWx1ZShvYmopO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5hbGlnblZhbHVlcykge1xyXG4gICAgICAgICAgICB0aGlzLmNoYW5nZWQoKTtcclxuICAgICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGF0byB1biB2YWxvcmUgdmVyaWZpY2Egc2UgcHXDsiByZXN0aXR1aXJlIGxlIGluZm9ybWF6aW9uaSB0cm92YXRlIGluICoqU291cmNlKiogY29uIGlkIHVndWFsZSBhICoqdmFsdWUqKiBvIHNlIGRldmUgcmVzdGl0dWlyZSBpbCB2YWxvcmUgaW4gc2VcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHthbnl9IHZhbHVlIFZhbG9yZSBzY3JpdHRvIG5lbGwnaW5wdXQgZGkgdGVzdG9cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBmaW5hbGl6ZVZhbHVlKHZhbHVlOiBhbnkpIHtcclxuICAgICAgICB2YXIgdmFsID0gdGhpcy5Tb3VyY2UuZmluZCh0ID0+IHQuaWQgPT0gdmFsdWUpO1xyXG4gICAgICAgIHRoaXMucHJvcGFnYXRlQ2hhbmdlKHZhbCA/IHZhbC5pZCA6IHZhbHVlKTtcclxuICAgICAgICB0aGlzLk1vZGVsID0gdmFsID8gdmFsLmRlc2NyaXB0aW9uIDogdmFsdWU7XHJcbiAgICAgICAgdGhpcy5FdmFsdWF0ZWRNb2RlbCA9IHRoaXMuTW9kZWw7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBFdmVudG8gZGkgZmlsdHJvIGRlbGxhIHNvcmdlbnRlIGRhdGkgaW4gYmFzZSBhbGwnaW5wdXQgdXRlbnRlXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudCBJbnB1dCB1dGVudGVcclxuICAgICAqL1xyXG4gICAgcHVibGljIGZpbHRlclNvdXJjZShldmVudD86IENoYW5nZUV2ZW50KSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaWdub3JlTmV4dFdyaXRlVmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5pZ25vcmVOZXh0V3JpdGVWYWx1ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBRdWFuZG8gZmlsdHJvIGxhIHNvdXJjZSwgc2Ugbm9uIGRldm8gaWdub3JhcmUgbCdldmVudG8gZGV2byBjb211bnF1ZSBhc3NpY3VyYXJtaSBkaSBpbXBvc3RhcmUgaWwgdmFsb3JlIHNlbGV6aW9uYXRvIGEgbnVsbFxyXG4gICAgICAgIHN1cGVyLmNoYW5nZWQobnVsbCk7XHJcblxyXG4gICAgICAgIGlmICghZXZlbnQgJiYgdGhpcy5NaW5DaGFycyA9PSAwICYmICF0aGlzLlNlYXJjaEZ1bmN0aW9uKSB7XHJcbiAgICAgICAgICAgIHRoaXMuRmlsdGVyZWRCb3VuZFNvdXJjZSA9IHRoaXMuQm91bmRTb3VyY2U7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghZXZlbnQgfHwgZXZlbnQudmFsdWUubGVuZ3RoIDwgdGhpcy5NaW5DaGFycykge1xyXG4gICAgICAgICAgICB0aGlzLkZpbHRlcmVkQm91bmRTb3VyY2UgPSBbXTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLlNlYXJjaEZ1bmN0aW9uICYmICghdGhpcy5Tb3VyY2UgfHwgdGhpcy5Tb3VyY2UubGVuZ3RoID09IDApKVxyXG4gICAgICAgICAgICB0aHJvdyBcIkltcG9zc2liaWxlIGZpbHRyYXJlIGdsaSBlbGVtZW50aSBzZW56YSB1bmEgZnVuemlvbmUgZGkgcmljZXJjYSBjaGUgcmVzdGl0dWlzY2EgdW5hIGxpc3RhIGRpIHsgaWQ6IHN0cmluZywgZGVzY3JpcHRpb246IHN0cmluZyB9XCI7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLlNlYXJjaEZ1bmN0aW9uKSB7XHJcbiAgICAgICAgICAgIHRoaXMudGhyb3R0bGEoXCJmaWx0ZXJzb3VyY2VcIiwgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5TZWFyY2hGdW5jdGlvbihldmVudC52YWx1ZSwgZmFsc2UpLnN1YnNjcmliZSh0ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLlNvdXJjZSA9IHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50cnlCaW5kU291cmNlRGlzcGxheSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIEluIHF1ZXN0byBjYXNvIMOoIGdpw6AgZmlsdHJhdGEgZGFsbGEgU2VhcmNoRnVuY3Rpb25cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLkZpbHRlcmVkQm91bmRTb3VyY2UgPSB0aGlzLkJvdW5kU291cmNlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlRmlsdGVyZWRTb3VyY2VPbkRlc2NyaXB0aW9uU2VsZWN0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSwgNDAwKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMudGhyb3R0bGEoXCJmaWx0ZXJzb3VyY2VcIiwgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy8gSW4gcXVlc3RvIGNhc28gZGV2byBmaWx0cmFyZSBpbyBpbiBtZW1vcmlhXHJcbiAgICAgICAgICAgICAgICB0aGlzLkZpbHRlcmVkQm91bmRTb3VyY2UgPSB0aGlzLkJvdW5kU291cmNlLmZpbHRlcih0ID0+ICh0aGlzLkNhc2VTZW5zaXRpdmUgJiYgdC5kZXNjcmlwdGlvbi5pbmNsdWRlcyhldmVudC52YWx1ZSkpIHx8ICghdGhpcy5DYXNlU2Vuc2l0aXZlICYmIHQuZGVzY3JpcHRpb24udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhldmVudC52YWx1ZS50b0xvd2VyQ2FzZSgpKSkpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVGaWx0ZXJlZFNvdXJjZU9uRGVzY3JpcHRpb25TZWxlY3Rpb24oKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgICAgICAgICB9LCAxMDApO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKiogQGlnbm9yZSAqL1xyXG4gICAgcHJpdmF0ZSByZW1vdmVGaWx0ZXJlZFNvdXJjZU9uRGVzY3JpcHRpb25TZWxlY3Rpb24oKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuRmlsdGVyZWRCb3VuZFNvdXJjZS5sZW5ndGggPT0gMSAmJiAodGhpcy5GaWx0ZXJlZEJvdW5kU291cmNlWzBdLmRlc2NyaXB0aW9uID09PSB0aGlzLk1vZGVsKSkge1xyXG4gICAgICAgICAgICB0aGlzLk1vZGVsID0gdGhpcy5Cb3VuZFNvdXJjZVswXS5pZDtcclxuICAgICAgICAgICAgdGhpcy5FdmFsdWF0ZWRNb2RlbCA9IHRoaXMuQm91bmRTb3VyY2VbMF0uZGVzY3JpcHRpb247XHJcbiAgICAgICAgICAgIHRoaXMuRmlsdGVyZWRCb3VuZFNvdXJjZSA9IFtdO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKiogTWV0b2RvIHJpY2hpYW1hdG8gcXVhbmRvIHZpZW5lIG1vZGlmaWNhdG8gaWwgbW9kZWxsbyBkZWwgY2FtcG8gZGkgaW5wdXQgKi9cclxuICAgIGNoYW5nZWQoZXZlbnQ/OiBDaGFuZ2VFdmVudCkge1xyXG4gICAgICAgIHZhciB0b0VtaXQgPSB0aGlzLmdldE1vZGVsVG9FbWl0KCk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLlR5cGUgPT0gXCJhdXRvY29tcGxldGVcIilcclxuICAgICAgICAgICAgdGhpcy5pZ25vcmVOZXh0V3JpdGVWYWx1ZSA9IHRydWU7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLkVtaXRQZW5kaW5nQ2hhbmdlcylcclxuICAgICAgICAgICAgc3VwZXIuY2hhbmdlZCh0b0VtaXQsIGZhbHNlLCBmYWxzZSwgZXZlbnQ/LmludGVybmFsKTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogQGlnbm9yZSAqL1xyXG4gICAgZmluYWxpemVkKCkge1xyXG4gICAgICAgIHN1cGVyLmZpbmFsaXplZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBNZXRvZG8gcmljaGlhbWF0byBxdWFuZG8gdmllbmUgc2VsZXppb25hdG8gaWwgY2FtcG8gY29sIG1vdXNlICovXHJcbiAgICBmb2N1c2VkKGV2ZW50OiBhbnkpIHtcclxuICAgICAgICBzdXBlci5mb2N1c2VkKGV2ZW50KTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogRWZmZXR0dWEgZ2xpIGFnZ2l1c3RhbWVudGkgZGF0aSBkZWwgY2FzbyBlZCBlbWV0dGUgaWwgbW9kZWxsbyBjb3JyZXR0byAqL1xyXG4gICAgcHJpdmF0ZSBnZXRNb2RlbFRvRW1pdCgpIHtcclxuICAgICAgICB2YXIgdG9FbWl0ID0gdGhpcy5Nb2RlbCA/XHJcbiAgICAgICAgICAgICh0aGlzLlR5cGUgPT0gXCJ0aW1lXCIgfHwgdGhpcy51c2VKc0RhdGVzID9cclxuICAgICAgICAgICAgICAgIHRoaXMuZGF0ZUFkYXB0ZXIuY2xvbmUodGhpcy5kYXRlc0V4dHMuZ2V0RGF0ZUNvbnZlcnRpb24odGhpcy5Nb2RlbCkpXHJcbiAgICAgICAgICAgICAgICA6IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5Nb2RlbCkpKVxyXG4gICAgICAgICAgICA6IG51bGw7XHJcblxyXG4gICAgICAgIGlmICgodGhpcy5UeXBlID09IFwiZmxvYXRcIiB8fCB0aGlzLlR5cGUgPT0gXCJudW1iZXJcIikgJiYgdG9FbWl0KSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLkFkanVzdE51bWJlcikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5mbG9hdFZhbHVlUHJlQWRqdXN0bWVudGUgPSB0b0VtaXQ7XHJcbiAgICAgICAgICAgICAgICB0b0VtaXQgPSB0b0VtaXQucmVwbGFjZShcIi5cIiwgXCJcIikucmVwbGFjZShcIixcIiwgXCIuXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuRXZhbHVhdGVkTW9kZWwgPSB0b0VtaXQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHRoaXMuVHlwZSA9PSBcImJvb2xlYW5cIikge1xyXG4gICAgICAgICAgICB0b0VtaXQgPSB0b0VtaXQgPyB0cnVlIDogZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuRXZhbHVhdGVkTW9kZWwgPSB0aGlzLmxjLmxvYyh0b0VtaXQgPyAnWWVzJyA6ICdObycpOztcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodGhpcy5UeXBlID09IFwidGltZVwiKSB7XHJcbiAgICAgICAgICAgIHRvRW1pdCA9IHRvRW1pdC5mb3JtYXQoXCJISDptbTpzc1wiKTtcclxuICAgICAgICAgICAgdGhpcy5FdmFsdWF0ZWRNb2RlbCA9IHRvRW1pdDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoKHRoaXMuVHlwZSA9PSBcImRhdGVcIiB8fCB0aGlzLlR5cGUgPT0gXCJkYXRldGltZVwiKSAmJiB0aGlzLnVzZUpzRGF0ZXMpIHtcclxuICAgICAgICAgICAgdG9FbWl0ID0gdG9FbWl0LnRvRGF0ZSgpO1xyXG4gICAgICAgICAgICB0aGlzLkV2YWx1YXRlZE1vZGVsID0gdGhpcy5kYXRlc0V4dHMuZ2V0Rm9ybWF0dGVkKHRoaXMuTW9kZWwsIHRoaXMuVHlwZSA9PSBcImRhdGVcIiwgdGhpcy5UeXBlID09IFwiZGF0ZXRpbWVcIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdG9FbWl0O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSGVscGVyIHBlciBnZXN0aXJlIGxhIG1vZGlmaWNhIGRlbCBmaWxlIGF0dHVhbG1lbnRlIGJpbmRhdG8uIE92dmlhbWVudGUgZnVuemlvbmEgc29sbyBxdWFsb3JhIGlsICoqVHlwZSoqIGZvc3NlICoqZmlsZSoqXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gY2xlYXIgSW5kaWNhIHNlIGJpc29nbmEgc3Z1b3RhcmUgbCdpbnB1dCBvIG1lbm8gXHJcbiAgICAgKi9cclxuICAgIGZpbGVDaGFuZ2UoY2xlYXI6IGJvb2xlYW4gPSBmYWxzZSkge1xyXG4gICAgICAgIGxldCBmaWxlczogRmlsZVtdID0gW107XHJcbiAgICAgICAgbGV0IG1vZGVsID0gKDxBcHBGaWxlPnRoaXMuTW9kZWwpO1xyXG4gICAgICAgIGxldCBuZTogSFRNTElucHV0RWxlbWVudCA9IHRoaXMuaW5wdXRFbC5uYXRpdmVFbGVtZW50O1xyXG5cclxuICAgICAgICBpZiAoY2xlYXIpIHtcclxuICAgICAgICAgICAgbW9kZWwuZmlsZW5hbWUgPSBcIlwiO1xyXG4gICAgICAgICAgICBuZS52YWx1ZSA9IFwiXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5lLmZpbGVzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgICAgICAgICAgZmlsZXMucHVzaChuZS5maWxlcy5pdGVtKGkpKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChuZS5maWxlcy5sZW5ndGggPT0gMSlcclxuICAgICAgICAgICAgICAgIG1vZGVsLmZpbGVuYW1lID0gbmUuZmlsZXNbMF0ubmFtZTtcclxuICAgICAgICAgICAgaWYgKG5lLmZpbGVzLmxlbmd0aCA+IDEpXHJcbiAgICAgICAgICAgICAgICBtb2RlbC5maWxlbmFtZSA9IG5lLmZpbGVzLmxlbmd0aCArIFwiIFwiICsgdGhpcy5sYy5sb2MoXCJGaWxlcyBTZWxlY3RlZFwiKTtcclxuICAgICAgICAgICAgbW9kZWwubmF0aXZlZmlsZXMgPSBmaWxlcztcclxuICAgICAgICAgICAgbW9kZWwuZmlsZWI2NCA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuY2hhbmdlZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBQZXJtZXR0ZSBkaSBzY2FyaWNhcmUgaWwgZmlsZSBjb2xsZWdhdG8gYWxsJ2V2ZXRudWFsZSBmaWxlIGlucHV0IHJhcHByZXNlbnRhdG8gZGEgcXVlc3RvIGNvbXBvbmVudGUgKi9cclxuICAgIGRvd25sb2FkQXR0YWNobWVudCgpIHtcclxuICAgICAgICBsZXQgbW9kZWwgPSAoPEFwcEZpbGU+dGhpcy5Nb2RlbCk7XHJcbiAgICAgICAgdGhpcy51dGlFeHRzLnNhdmVGaWxlKG1vZGVsLmZpbGViNjQsIG1vZGVsLmZpbGVuYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogQGlnbm9yZSAqL1xyXG4gICAgb25Ob3ROdWxsVmFsdWVTZXQoKTogdm9pZCB7IH1cclxuXHJcbiAgICAvLyoqKioqKioqKioqKioqKioqKioqIEZ1bnppb25lIGRpIHRocm90dGxpbmcgcGVyIG5vbiBzcGFtbWFyZSByaWNoaWVzdGUgaW4gY2FzbyBkaSBhbmltYXppb25pIGF0dGl2YXRlXHJcbiAgICAvL1RPRE86IHNwb3N0YXJsYSBpbiB1biBtZXRvZG8gZGkgdXRpbGl0w6AgKGVzZmFlbnphL2V4dGVuc2lvbnMpXHJcbiAgICAvKiogQGlnbm9yZSAqL1xyXG4gICAgcHJpdmF0ZSBleGVjdXRpb25UaW1lcnM6IHsgW2luZGV4OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xyXG4gICAgLyoqIEBpZ25vcmUgKi9cclxuICAgIHByaXZhdGUgdGhyb3R0bGEoaWQ6IHN0cmluZywgZnVuYzogRnVuY3Rpb24sIHRocm90dGxlVGltZTogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgLy9TZSBobyBsYSBmdW56aW9uZSBjaGUgdnVvbGUgZXNlZ3VpcmUgcmlwdWxpc2NvIHF1ZWwgdGltZW91dFxyXG4gICAgICAgIGlmICh0aGlzLmV4ZWN1dGlvblRpbWVyc1tpZF0pXHJcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmV4ZWN1dGlvblRpbWVyc1tpZF0pO1xyXG5cclxuICAgICAgICAvL1JpY3JlbyBpbCB0aW1lb3V0IHBlciBlc2VndWlyZSBxdWVsbGEgZnVuemlvbmUgZG9wbyB0aHJvdHRsZVRpbWUgbWlsbGlzZWNvbmRpXHJcbiAgICAgICAgdGhpcy5leGVjdXRpb25UaW1lcnNbaWRdID0gc2V0VGltZW91dCgoKSA9PiB7IGZ1bmMoKTsgdGhpcy5leGVjdXRpb25UaW1lcnNbaWRdID0gbnVsbDsgfSwgdGhyb3R0bGVUaW1lKTtcclxuICAgIH1cclxuICAgIC8vKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG59IiwiPCEtLSBVZ3VhbGUgaW4gdHV0dGkgaSBjb21wb25lbnRpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT5cclxuPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFGb3JtTGF5b3V0ICYmICghRGlzcGxheU1vZGUgfHwgKERpc3BsYXlMYXlvdXQgIT0gJ2hpZGRlbicgJiYgRGlzcGxheUNvbmRpdGlvbikpXCI+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiRGlzcGxheU1vZGUgJiYgIURpc3BsYXlNb2RlVGVtcGxhdGVcIj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiRGlzcGxheUxheW91dCA9PSAnZm9ybSdcIj57eyBFdmFsdWF0ZWRNb2RlbCB9fTwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCJEaXNwbGF5TGF5b3V0ID09ICdpbmxpbmUnXCIgY2xhc3M9XCJhcHAtaW5saW5lXCI+e3sgRXZhbHVhdGVkTW9kZWwgfX08L2Rpdj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIkRpc3BsYXlNb2RlICYmIERpc3BsYXlNb2RlVGVtcGxhdGVcIj48bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiRGlzcGxheU1vZGVUZW1wbGF0ZSwgY29udGV4dDogeyAkaW1wbGljaXQ6IEV2YWx1YXRlZE1vZGVsIH1cIj48L25nLWNvbnRhaW5lcj48L25nLWNvbnRhaW5lcj5cclxuICAgIDxkaXYgW2hpZGRlbl09XCJEaXNwbGF5TW9kZVwiPjxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjb250cm9sVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj48L2Rpdj5cclxuPC9uZy1jb250YWluZXI+XHJcblxyXG48ZGl2ICpuZ0lmPVwiRm9ybUxheW91dCAmJiAoIURpc3BsYXlNb2RlIHx8IChEaXNwbGF5TGF5b3V0ICE9ICdoaWRkZW4nICYmIERpc3BsYXlDb25kaXRpb24pKVwiIGNsYXNzPVwie3tGb3JtR3JvdXBDbGFzcyArIChMYXN0ID8gJyBhcHAtbWFyZ2luLWJvdHRvbS0wIGFwcC1tYXJnaW4tcmlnaHQtMCAnIDogJycpICsgKERpc3BsYXlMYXlvdXQgPT0gJ2lubGluZScgJiYgRGlzcGxheU1vZGUgPyAoJyBhcHAtaW5saW5lLWJsb2NrICcgKyAoIUxhc3QgPyAnYXBwLW1hcmdpbi1yaWdodC0xMCcgOiAnJykpIDogJyBmb3JtLWdyb3VwIHJvdycpfX1cIj5cclxuXHJcbiAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbWQte3soRGlzcGxheU1vZGUgJiYgRGlzcGxheUxheW91dCA9PSAnaW5saW5lJyA/ICdub25lIGFwcC1ib2xkIGFwcC1tYXJnaW4tYm90dG9tLTAnIDogTGFiZWxDb2xXaWR0aCkgKyAoRGlzcGxheU1vZGUgPyAnIGFwcC1ib2xkJyA6ICcgbS10LTUnKSB9fVwiPnt7TGFiZWx9fXt7UmVxdWlyZWQgJiYgIURpc3BsYXlNb2RlID8gJyonIDogJyd9fXt7TGFiZWwgPyBcIjpcIiA6IFwiXCJ9fTwvbGFiZWw+XHJcbiAgICA8c3BhbiAqbmdJZj1cIkRpc3BsYXlNb2RlICYmIERpc3BsYXlMYXlvdXQgPT0gJ2lubGluZScgJiYgSW5saW5lU2VwYXJhdG9yICE9ICcnXCI+e3tJbmxpbmVTZXBhcmF0b3J9fTwvc3Bhbj5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQte3tEaXNwbGF5TW9kZSAmJiBEaXNwbGF5TGF5b3V0ID09ICdpbmxpbmUnID8gJ25vbmUgYXBwLWlubGluZS1ibG9jaycgOiBJbnB1dENvbFdpZHRofX1cIj5cclxuXHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIkRpc3BsYXlNb2RlICYmICFEaXNwbGF5TW9kZVRlbXBsYXRlXCI+e3sgRXZhbHVhdGVkTW9kZWwgfX08L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiRGlzcGxheU1vZGUgJiYgRGlzcGxheU1vZGVUZW1wbGF0ZVwiPjxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJEaXNwbGF5TW9kZVRlbXBsYXRlLCBjb250ZXh0OiB7ICRpbXBsaWNpdDogRXZhbHVhdGVkTW9kZWwgfVwiPjwvbmctY29udGFpbmVyPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDxkaXYgW2hpZGRlbl09XCJEaXNwbGF5TW9kZVwiPjxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjb250cm9sVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj48L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImNsZWFyZml4XCI+PC9kaXY+XHJcbjwvZGl2PlxyXG48IS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPlxyXG5cclxuPG5nLXRlbXBsYXRlICNjb250cm9sVGVtcGxhdGU+XHJcbiAgICA8ZGl2ICpuZ0lmPVwiIVR5cGVcIiBjbGFzcz1cImFwcC1tYXJnaW4tdG9wLTVcIj5cclxuICAgICAgICA8ZW0+e3tUeXBlTWlzc2luZ01lc3NhZ2V9fTwvZW0+XHJcbiAgICA8L2Rpdj5cclxuICAgXHJcbiAgICAgPCEtLVNlIGN1cnJlbmN5LS0+XHJcbiAgICAgPGRpdiAqbmdJZj1cIlR5cGUgPT0gJ2N1cnJlbmN5J1wiPlxyXG4gICAgICAgIDx2YWwtY3VycmVuY3kgI3ZhbGlkYXRpb25Db250cm9sPVwibmdNb2RlbFwiIFtGb2N1c1N1YmplY3RdPVwiRm9jdXNTdWJqZWN0XCIgW1NldFZhbGlkYXRpb25TdWJqZWN0XT1cIlNldFZhbGlkYXRpb25TdWJqZWN0XCIgW0ZpZWxkQXBwZWFyZW5jZV09XCJGaWVsZEFwcGVhcmVuY2VcIiBbZm9yY2VJbnZhbGlkXT1cIkZvcmNlZEVycm9yXCIgW0Zsb2F0aW5nTGFiZWxdPVwiRmxvYXRpbmdMYWJlbFwiXHJcbiAgICAgICAgW0N1cnJlbmN5T3B0aW9uc109XCJ7IHByZWZpeDogJycsIHRob3VzYW5kczogJy4nLCBkZWNpbWFsOiAnLCcsIHByZWNpc2lvbjogUHJlY2lzaW9uLCBhbGlnbjogQWxpZ25tZW50IH1cIiBbbm9WYWxpZGF0ZV09XCIhVmFsaWRhdGlvblwiXHJcbiAgICAgICAgdHlwZT1cInRleHRcIiBbUmVhZG9ubHldPVwiUmVhZG9ubHlcIiBbc3VibWl0dGVkXT1cIkZvcm0/LnN1Ym1pdHRlZFwiIFtyZXF1aXJlZF09XCJSZXF1aXJlZFwiIFsobmdNb2RlbCldPVwiTW9kZWxcIiBbaWRdPVwiR2VuZXJhdGVkTmFtZVwiIG5hbWU9XCJ7e0dlbmVyYXRlZE5hbWV9fVwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiIChpbnB1dENoYW5nZSk9XCJjaGFuZ2VkKCk7XCIgKGlucHV0Rm9jdXMpPVwiZm9jdXNlZCgkZXZlbnQpO1wiIChpbnB1dEZpbmFsaXplZCk9XCJmaW5hbGl6ZWQoKVwiPjwvdmFsLWN1cnJlbmN5PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tU2UgZGF0YS0tPlxyXG4gICAgPGRpdiAqbmdJZj1cIlR5cGUgPT0gJ2RhdGUnXCI+XHJcbiAgICAgICAgPHZhbC1kYXRlICN2YWxpZGF0aW9uQ29udHJvbD1cIm5nTW9kZWxcIiBbRm9jdXNTdWJqZWN0XT1cIkZvY3VzU3ViamVjdFwiIFtTZXRWYWxpZGF0aW9uU3ViamVjdF09XCJTZXRWYWxpZGF0aW9uU3ViamVjdFwiIFtGaWVsZEFwcGVhcmVuY2VdPVwiRmllbGRBcHBlYXJlbmNlXCIgW2ZvcmNlSW52YWxpZF09XCJGb3JjZWRFcnJvclwiIFtGbG9hdGluZ0xhYmVsXT1cIkZsb2F0aW5nTGFiZWxcIiBbbm9WYWxpZGF0ZV09XCIhVmFsaWRhdGlvblwiIFtSZWFkb25seV09XCJSZWFkb25seVwiIFtzdWJtaXR0ZWRdPVwiRm9ybT8uc3VibWl0dGVkXCIgW3JlcXVpcmVkXT1cIlJlcXVpcmVkXCIgWyhuZ01vZGVsKV09XCJNb2RlbFwiIFtpZF09XCJHZW5lcmF0ZWROYW1lXCIgW3VzZUpzRGF0ZXNdPVwidXNlSnNEYXRlc1wiIG5hbWU9XCJ7e0dlbmVyYXRlZE5hbWV9fVwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiIChpbnB1dENoYW5nZSk9XCJjaGFuZ2VkKCRldmVudCk7XCIgKGlucHV0Rm9jdXMpPVwiZm9jdXNlZCgkZXZlbnQpO1wiIChpbnB1dEZpbmFsaXplZCk9XCJmaW5hbGl6ZWQoKVwiPjwvdmFsLWRhdGU+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS1TZSBzdHJpbmdhLS0+XHJcbiAgICA8ZGl2ICpuZ0lmPVwiVHlwZSA9PSAnc3RyaW5nJ1wiPlxyXG4gICAgICAgIDx2YWwtaW5wdXQgI3ZhbGlkYXRpb25Db250cm9sPVwibmdNb2RlbFwiIFtGb2N1c1N1YmplY3RdPVwiRm9jdXNTdWJqZWN0XCIgW1NldFZhbGlkYXRpb25TdWJqZWN0XT1cIlNldFZhbGlkYXRpb25TdWJqZWN0XCIgW0ZpZWxkQXBwZWFyZW5jZV09XCJGaWVsZEFwcGVhcmVuY2VcIiBbZm9yY2VJbnZhbGlkXT1cIkZvcmNlZEVycm9yXCIgW0Zsb2F0aW5nTGFiZWxdPVwiRmxvYXRpbmdMYWJlbFwiIFtub1ZhbGlkYXRlXT1cIiFWYWxpZGF0aW9uXCIgW1JlYWRvbmx5XT1cIlJlYWRvbmx5XCIgW3N1Ym1pdHRlZF09XCJGb3JtPy5zdWJtaXR0ZWRcIiB0eXBlPVwidGV4dFwiIHBhdHRlcm49XCJ7e1BhdHRlcm4gfHwgJyd9fVwiIFtyZXF1aXJlZF09XCJSZXF1aXJlZFwiIFtwbGFjZWhvbGRlcl09XCJQbGFjZWhvbGRlclwiIFsobmdNb2RlbCldPVwiTW9kZWxcIiBbaWRdPVwiR2VuZXJhdGVkTmFtZVwiIG5hbWU9XCJ7e0dlbmVyYXRlZE5hbWV9fVwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiIChpbnB1dENoYW5nZSk9XCJjaGFuZ2VkKCRldmVudCk7XCIgKGlucHV0Rm9jdXMpPVwiZm9jdXNlZCgkZXZlbnQpO1wiIChpbnB1dEZpbmFsaXplZCk9XCJmaW5hbGl6ZWQoKVwiPjwvdmFsLWlucHV0PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tU2UgbnVtZXJvLS0+XHJcbiAgICA8ZGl2ICpuZ0lmPVwiVHlwZSA9PSAnZmxvYXQnIHx8IFR5cGUgPT0gJ251bWJlcidcIj5cclxuICAgICAgICA8dmFsLWlucHV0ICN2YWxpZGF0aW9uQ29udHJvbD1cIm5nTW9kZWxcIiBbRm9jdXNTdWJqZWN0XT1cIkZvY3VzU3ViamVjdFwiIFtTZXRWYWxpZGF0aW9uU3ViamVjdF09XCJTZXRWYWxpZGF0aW9uU3ViamVjdFwiIFtGaWVsZEFwcGVhcmVuY2VdPVwiRmllbGRBcHBlYXJlbmNlXCIgW2ZvcmNlSW52YWxpZF09XCJGb3JjZWRFcnJvclwiIFtGbG9hdGluZ0xhYmVsXT1cIkZsb2F0aW5nTGFiZWxcIiBbbm9WYWxpZGF0ZV09XCIhVmFsaWRhdGlvblwiIFtSZWFkb25seV09XCJSZWFkb25seVwiIFtzdWJtaXR0ZWRdPVwiRm9ybT8uc3VibWl0dGVkXCIgdHlwZT1cInRleHRcIiBwYXR0ZXJuPVwie3tQYXR0ZXJuIHx8IEZsb2F0UGF0dGVybn19XCIgW3JlcXVpcmVkXT1cIlJlcXVpcmVkXCIgW3BsYWNlaG9sZGVyXT1cIlBsYWNlaG9sZGVyXCIgWyhuZ01vZGVsKV09XCJNb2RlbFwiIFtpZF09XCJHZW5lcmF0ZWROYW1lXCIgbmFtZT1cInt7R2VuZXJhdGVkTmFtZX19XCIgYXV0b2NvbXBsZXRlPVwib2ZmXCIgKGlucHV0Q2hhbmdlKT1cImNoYW5nZWQoJGV2ZW50KTtcIiAoaW5wdXRGb2N1cyk9XCJmb2N1c2VkKCRldmVudCk7XCIgKGlucHV0RmluYWxpemVkKT1cImZpbmFsaXplZCgpXCI+PC92YWwtaW5wdXQ+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS1TZSBudW1lcm8gaW50ZXJvLS0+XHJcbiAgICA8ZGl2ICpuZ0lmPVwiVHlwZSA9PSAnaW50J1wiPlxyXG4gICAgICAgIDx2YWwtaW5wdXQgI3ZhbGlkYXRpb25Db250cm9sPVwibmdNb2RlbFwiIFtGb2N1c1N1YmplY3RdPVwiRm9jdXNTdWJqZWN0XCIgW1NldFZhbGlkYXRpb25TdWJqZWN0XT1cIlNldFZhbGlkYXRpb25TdWJqZWN0XCIgW0ZpZWxkQXBwZWFyZW5jZV09XCJGaWVsZEFwcGVhcmVuY2VcIiBbZm9yY2VJbnZhbGlkXT1cIkZvcmNlZEVycm9yXCIgW0Zsb2F0aW5nTGFiZWxdPVwiRmxvYXRpbmdMYWJlbFwiIFtub1ZhbGlkYXRlXT1cIiFWYWxpZGF0aW9uXCIgW1JlYWRvbmx5XT1cIlJlYWRvbmx5XCIgW3N1Ym1pdHRlZF09XCJGb3JtPy5zdWJtaXR0ZWRcIiB0eXBlPVwidGV4dFwiIHBhdHRlcm49XCJ7e1BhdHRlcm4gfHwgSW50UGF0dGVybn19XCIgW3JlcXVpcmVkXT1cIlJlcXVpcmVkXCIgW3BsYWNlaG9sZGVyXT1cIlBsYWNlaG9sZGVyXCIgWyhuZ01vZGVsKV09XCJNb2RlbFwiIFtpZF09XCJHZW5lcmF0ZWROYW1lXCIgbmFtZT1cInt7R2VuZXJhdGVkTmFtZX19XCIgYXV0b2NvbXBsZXRlPVwib2ZmXCIgKGlucHV0Q2hhbmdlKT1cImNoYW5nZWQoJGV2ZW50KTtcIiAoaW5wdXRGb2N1cyk9XCJmb2N1c2VkKCRldmVudCk7XCIgKGlucHV0RmluYWxpemVkKT1cImZpbmFsaXplZCgpXCI+PC92YWwtaW5wdXQ+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS1TZSBib29sZWFuLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwibS10LTVcIiAqbmdJZj1cIlR5cGUgPT0gJ2Jvb2xlYW4nXCI+XHJcbiAgICAgICAgPGlucHV0ICN2YWxpZGF0aW9uQ29udHJvbD1cIm5nTW9kZWxcIiBbcmVhZG9ubHldPVwiUmVhZG9ubHlcIiB0eXBlPVwiY2hlY2tib3hcIiBjbGFzcz1cImFwcC1wb2ludGVyXCIgWyhuZ01vZGVsKV09XCJNb2RlbFwiIGlkPVwie3tHZW5lcmF0ZWROYW1lfX1cIiBuYW1lPVwie3tHZW5lcmF0ZWROYW1lfX1cIiAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VkKCk7IGZpbmFsaXplZCgpO1wiIChjbGljayk9XCJmb2N1c2VkKCRldmVudCk7XCIgLz5cclxuICAgIDwvZGl2PlxyXG4gICAgPCEtLVNlIGVudW0tLT5cclxuICAgIDxkaXYgKm5nSWY9XCJUeXBlID09ICdlbnVtJ1wiPlxyXG4gICAgICAgIDx2YWwtc2VsZWN0ICN2YWxpZGF0aW9uQ29udHJvbD1cIm5nTW9kZWxcIiBbRm9jdXNTdWJqZWN0XT1cIkZvY3VzU3ViamVjdFwiIFtTZXRWYWxpZGF0aW9uU3ViamVjdF09XCJTZXRWYWxpZGF0aW9uU3ViamVjdFwiIFtGaWVsZEFwcGVhcmVuY2VdPVwiRmllbGRBcHBlYXJlbmNlXCIgW2ZvcmNlSW52YWxpZF09XCJGb3JjZWRFcnJvclwiIFtub1ZhbGlkYXRlXT1cIiFWYWxpZGF0aW9uXCIgW1JlYWRvbmx5XT1cIlJlYWRvbmx5XCIgW3N1Ym1pdHRlZF09XCJGb3JtPy5zdWJtaXR0ZWRcIiBbcGxhY2VIb2xkZXJWYWx1ZV09XCInJ1wiIFtwbGFjZWhvbGRlcl09XCJSZXF1aXJlZCA/ICgnU2VsZWN0JyB8IGxvY2FsaXplIDogbGMpICsgJy4uLicgOiBQbGFjZWhvbGRlclwiIFtyZXF1aXJlZF09XCJSZXF1aXJlZFwiIFsobmdNb2RlbCldPVwiTW9kZWxcIiAoaW5wdXRDaGFuZ2UpPVwiY2hhbmdlZCgkZXZlbnQpO1wiIChpbnB1dEZvY3VzKT1cImZvY3VzZWQoJGV2ZW50KTtcIiAoaW5wdXRGaW5hbGl6ZWQpPVwiZmluYWxpemVkKClcIiBbaWRdPVwiR2VuZXJhdGVkTmFtZVwiIG5hbWU9XCJ7e0dlbmVyYXRlZE5hbWV9fVwiPlxyXG4gICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCB2YWwgb2YgQm91bmRTb3VyY2VcIiBbdmFsdWVdPVwidmFsLmlkXCI+e3t2YWwuZGVzY3JpcHRpb259fTwvb3B0aW9uPlxyXG4gICAgICAgIDwvdmFsLXNlbGVjdD5cclxuICAgIDwvZGl2PlxyXG4gICAgPCEtLVNlIGF1dG9jb21wbGV0ZS0tPlxyXG4gICAgPGRpdiAqbmdJZj1cIlR5cGUgPT0gJ2F1dG9jb21wbGV0ZSdcIj5cclxuICAgICAgICA8dmFsLWF1dG9jb21wbGV0ZSAjdmFsaWRhdGlvbkNvbnRyb2w9XCJuZ01vZGVsXCIgW0ZvY3VzU3ViamVjdF09XCJGb2N1c1N1YmplY3RcIiBbU2V0VmFsaWRhdGlvblN1YmplY3RdPVwiU2V0VmFsaWRhdGlvblN1YmplY3RcIiBbRmllbGRBcHBlYXJlbmNlXT1cIkZpZWxkQXBwZWFyZW5jZVwiIFtmb3JjZUludmFsaWRdPVwiRm9yY2VkRXJyb3JcIiBbbm9WYWxpZGF0ZV09XCIhVmFsaWRhdGlvblwiIFtSZWFkb25seV09XCJSZWFkb25seVwiIFtzdWJtaXR0ZWRdPVwiRm9ybT8uc3VibWl0dGVkXCIgW3JlcXVpcmVkXT1cIlJlcXVpcmVkXCIgW3BsYWNlaG9sZGVyXT1cIlJlcXVpcmVkID8gKCdTZWxlY3QnIHwgbG9jYWxpemUgOiBsYykgKyAnLi4uJyA6IFBsYWNlaG9sZGVyXCIgWyhuZ01vZGVsKV09XCJNb2RlbFwiIFtpZF09XCJHZW5lcmF0ZWROYW1lXCIgbmFtZT1cInt7R2VuZXJhdGVkTmFtZX19XCIgW0ZpbHRlcmVkU291cmNlXT1cIkZpbHRlcmVkQm91bmRTb3VyY2VcIiAoaW5wdXRDaGFuZ2UpPVwiZmlsdGVyU291cmNlKCRldmVudCk7IGNoYW5nZWQoJGV2ZW50KTtcIiAoaW5wdXRGb2N1cyk9XCJmb2N1c2VkKCRldmVudCk7XCIgKGlucHV0RmluYWxpemVkKT1cImZpbmFsaXplZCgpXCI+PC92YWwtYXV0b2NvbXBsZXRlPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tU2UgZGF0ZSB0aW1lLS0+XHJcbiAgICA8ZGl2ICpuZ0lmPVwiVHlwZSA9PSAnZGF0ZXRpbWUnXCI+XHJcbiAgICAgICAgPHZhbC1kYXRldGltZSAjdmFsaWRhdGlvbkNvbnRyb2w9XCJuZ01vZGVsXCIgW0ZvY3VzU3ViamVjdF09XCJGb2N1c1N1YmplY3RcIiBbU2V0VmFsaWRhdGlvblN1YmplY3RdPVwiU2V0VmFsaWRhdGlvblN1YmplY3RcIiBbRmllbGRBcHBlYXJlbmNlXT1cIkZpZWxkQXBwZWFyZW5jZVwiIFtmb3JjZUludmFsaWRdPVwiRm9yY2VkRXJyb3JcIiBbRmxvYXRpbmdMYWJlbF09XCJGbG9hdGluZ0xhYmVsXCIgW25vVmFsaWRhdGVdPVwiIVZhbGlkYXRpb25cIiBbUmVhZG9ubHldPVwiUmVhZG9ubHlcIiBbc3VibWl0dGVkXT1cIkZvcm0/LnN1Ym1pdHRlZFwiIFtyZXF1aXJlZF09XCJSZXF1aXJlZFwiIFt1c2VKc0RhdGVzXT1cInVzZUpzRGF0ZXNcIiBbKG5nTW9kZWwpXT1cIk1vZGVsXCIgW2lkXT1cIkdlbmVyYXRlZE5hbWVcIiBuYW1lPVwie3tHZW5lcmF0ZWROYW1lfX1cIiBhdXRvY29tcGxldGU9XCJvZmZcIiAoaW5wdXRDaGFuZ2UpPVwiY2hhbmdlZCgkZXZlbnQpO1wiIChpbnB1dEZvY3VzKT1cImZvY3VzZWQoJGV2ZW50KTtcIiAoaW5wdXRGaW5hbGl6ZWQpPVwiZmluYWxpemVkKClcIj48L3ZhbC1kYXRldGltZT5cclxuICAgIDwvZGl2PlxyXG4gICAgPCEtLVNlIHRpbWUtLT5cclxuICAgIDxkaXYgKm5nSWY9XCJUeXBlID09ICd0aW1lJ1wiPlxyXG4gICAgICAgIDxuZ3gtbWF0LXRpbWVwaWNrZXIgbmFtZT1cInZhbC10aW1lXCIgI2VsZW1lbnRSZWYgI2Jhc2VJbnB1dD1cIm5nTW9kZWxcIiBbKG5nTW9kZWwpXT1cIk1vZGVsXCIgW2Rpc2FibGVkXT1cIlJlYWRvbmx5XCJcclxuICAgICAgICBbc2hvd1NwaW5uZXJzXT1cImZhbHNlXCIgW3N0ZXBIb3VyXT1cIjJcIiBbc3RlcE1pbnV0ZV09XCI1XCIgW3N0ZXBTZWNvbmRdPVwiMzBcIlxyXG4gICAgICAgIFtzaG93U2Vjb25kc109XCJ0cnVlXCIgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlZCgpXCIgI3ZhbGlkYXRpb25Db250cm9sPVwibmdNb2RlbFwiPlxyXG4gICAgICAgIDwvbmd4LW1hdC10aW1lcGlja2VyPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tU2UgZmlsZS0tPlxyXG4gICAgPGRpdiAqbmdJZj1cIlR5cGUgPT0gJ2ZpbGUnXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwIGZpbGUtdXBsb2FkXCI+XHJcbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiZmlsZVwiIChjaGFuZ2UpPVwiZmlsZUNoYW5nZSgpXCIgI2ZpbGVJbnB1dCBpZD1cInt7R2VuZXJhdGVkTmFtZX19XCIgY2xhc3M9XCJmaWxlLXVwbG9hZC1idG4gYXBwLXBvaW50ZXJcIiBbbXVsdGlwbGVdPVwibnVsbFwiLz5cclxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgW2NsYXNzLmZybS1wYWRkaW5nLWxlZnQtMjJdPVwiQWxsb3dEb3dubG9hZCAmJiBNb2RlbEZpbGUuZmlsZW5hbWUgJiYgTW9kZWxGaWxlLmZpbGViNjRcIiBjbGFzcz1cImZvcm0tY29udHJvbCBjaGVja2luZy1maWVsZFwiIHBsYWNlaG9sZGVyPVwie3snU2VsZWN0IGEgZmlsZScgfCBsb2NhbGl6ZSA6IGxjfX0uLi5cIiBbKG5nTW9kZWwpXT1cIk1vZGVsRmlsZS5maWxlbmFtZVwiIG5hbWU9XCJkc2ZpbGVcIiAjdmFsaWRhdGlvbkNvbnRyb2w9XCJuZ01vZGVsXCIgW3JlcXVpcmVkXT1cIlJlcXVpcmVkXCIvPlxyXG4gICAgXHJcbiAgICAgICAgICAgIDxhIGNsYXNzPVwiZmEgZmEtZG93bmxvYWQgYXBwLXBvaW50ZXIgYXBwLWlucHV0LWljb25cIiAqbmdJZj1cIkFsbG93RG93bmxvYWQgJiYgTW9kZWxGaWxlLmZpbGVuYW1lICYmIE1vZGVsRmlsZS5maWxlYjY0XCIgKGNsaWNrKT1cImRvd25sb2FkQXR0YWNobWVudCgpXCI+PC9hPlxyXG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXRpbWVzIGRlbGV0ZS1maWxlXCIgKGNsaWNrKT1cImZpbGVDaGFuZ2UodHJ1ZSlcIiAqbmdJZj1cIk1vZGVsRmlsZS5maWxlbmFtZVwiPjwvaT5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpbnB1dC1ncm91cC1idG5cIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLWZpbGUtdXBsb2FkXCIgdHlwZT1cImJ1dHRvblwiPjxpIGNsYXNzPVwiZmEgZmEtdXBsb2FkXCI+PC9pPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT4iXX0=
|
|
@@ -12,10 +12,10 @@ export class FormAutocompleteComponentLoc extends LocalizationService {
|
|
|
12
12
|
super(injector);
|
|
13
13
|
super.set("it->en", "Seleziona", ["Select"]);
|
|
14
14
|
}
|
|
15
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FormAutocompleteComponentLoc, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
16
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FormAutocompleteComponentLoc }); }
|
|
15
17
|
}
|
|
16
|
-
|
|
17
|
-
FormAutocompleteComponentLoc.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FormAutocompleteComponentLoc });
|
|
18
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FormAutocompleteComponentLoc, decorators: [{
|
|
18
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FormAutocompleteComponentLoc, decorators: [{
|
|
19
19
|
type: Injectable
|
|
20
20
|
}], ctorParameters: function () { return [{ type: i0.Injector }]; } });
|
|
21
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1hdXRvY29tcGxldGUuY29tcG9uZW50LmxvYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Zvcm1zLWFuZC12YWxpZGF0aW9ucy9zcmMvbGliL2Zvcm1zL2Zvcm0tYXV0b2NvbXBsZXRlL2Zvcm0tYXV0b2NvbXBsZXRlLmNvbXBvbmVudC5sb2MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBWSxNQUFNLGVBQWUsQ0FBQztBQUNyRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQzs7QUFFOUQ7O0dBRUc7QUFFSCxNQUFNLE9BQU8sNEJBQTZCLFNBQVEsbUJBQW1CO0lBRWpFOztPQUVHO0lBQ0gsWUFBWSxRQUFrQjtRQUMxQixLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFaEIsS0FBSyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQTtJQUNoRCxDQUFDOytHQVRRLDRCQUE0QjttSEFBNUIsNEJBQTRCOzs0RkFBNUIsNEJBQTRCO2tCQUR4QyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0b3IgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBMb2NhbGl6YXRpb25TZXJ2aWNlIH0gZnJvbSBcIkBlc2ZhZW56YS9sb2NhbGl6YXRpb25zXCI7XHJcblxyXG4vKipcclxuICogQ2xhc3NlIGRpIGxvY2FsaXp6YXppb25lIHBlciBpbCBjb21wb25lbnRlICoqRm9ybUF1dG9jb21wbGV0ZUNvbXBvbmVudCoqXHJcbiAqL1xyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBGb3JtQXV0b2NvbXBsZXRlQ29tcG9uZW50TG9jIGV4dGVuZHMgTG9jYWxpemF0aW9uU2VydmljZSB7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAaWdub3JlXHJcbiAgICAgKi9cclxuICAgIGNvbnN0cnVjdG9yKGluamVjdG9yOiBJbmplY3Rvcikge1xyXG4gICAgICAgIHN1cGVyKGluamVjdG9yKTtcclxuXHJcbiAgICAgICAgc3VwZXIuc2V0KFwiaXQtPmVuXCIsIFwiU2VsZXppb25hXCIsIFtcIlNlbGVjdFwiXSlcclxuICAgIH1cclxufSJdfQ==
|