ng-tailwind 5.3.11 → 5.3.12
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/components/ngt-date/ngt-date.component.mjs +3 -3
- package/esm2020/components/ngt-input/ngt-input.component.mjs +3 -3
- package/esm2020/components/ngt-multi-select/ngt-multi-select.component.mjs +3 -3
- package/esm2020/components/ngt-select/ngt-select.component.mjs +3 -3
- package/esm2020/components/ngt-textarea/ngt-textarea.component.mjs +3 -3
- package/fesm2015/ng-tailwind.mjs +10 -10
- package/fesm2015/ng-tailwind.mjs.map +1 -1
- package/fesm2020/ng-tailwind.mjs +10 -10
- package/fesm2020/ng-tailwind.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -412,7 +412,7 @@ export class NgtMultiSelectComponent extends NgtBaseNgModel {
|
|
|
412
412
|
NgtMultiSelectComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: NgtMultiSelectComponent, deps: [{ token: i1.NgtHttpService }, { token: i0.Injector }, { token: i0.ChangeDetectorRef }, { token: i2.NgtFormComponent, optional: true, skipSelf: true }, { token: i3.NgtSectionComponent, optional: true, skipSelf: true }, { token: i4.NgtModalComponent, optional: true, skipSelf: true }, { token: i5.NgtStylizableDirective, optional: true, self: true }, { token: i6.ControlContainer, host: true, optional: true }, { token: i7.NgtTranslateService, optional: true }], target: i0.ɵɵFactoryTarget.Component });
|
|
413
413
|
NgtMultiSelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.8", type: NgtMultiSelectComponent, selector: "ngt-multi-select", inputs: { customOptionTemplate: "customOptionTemplate", customHeaderTemplate: "customHeaderTemplate", label: "label", helpTitle: "helpTitle", helpText: "helpText", helpTextColor: "helpTextColor", helperReverseYPosition: "helperReverseYPosition", helperAutoXReverse: "helperAutoXReverse", shining: "shining", loading: "loading", bindLabel: "bindLabel", bindSearch: "bindSearch", itemsPerPage: "itemsPerPage", name: "name", remoteResource: "remoteResource", items: "items", searchable: "searchable", allowOriginalItemsUnselect: "allowOriginalItemsUnselect", allowSelectAll: "allowSelectAll", autoSelectUniqueOption: "autoSelectUniqueOption", isRequired: "isRequired", isDisabled: "isDisabled" }, outputs: { onDataChange: "onDataChange" }, host: { listeners: { "scroll": "onScroll($event)" } }, providers: [
|
|
414
414
|
NgtMakeProvider(NgtMultiSelectComponent)
|
|
415
|
-
], viewQueries: [{ propertyName: "containerRef", first: true, predicate: ["containerRef"], descendants: true }, { propertyName: "inputSearch", first: true, predicate: ["inputSearch"], descendants: true }, { propertyName: "elementCheckboxTemplate", first: true, predicate: ["elementCheckboxTemplate"], descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<label *ngIf=\"label && !shining\" class=\"flex text-xs\" [class.mb-2]='!hasValidationErrors()'>\n {{ label }}:\n\n <span *ngIf=\"isRequired\" class=\"text-red-500 font-bold text-xs ml-1\">*</span>\n\n <ngt-helper *ngIf=\"helpText\" [helpTitle]=\"helpTitle\" [iconColor]=\"helpTextColor\"\n [helperReverseYPosition]=\"helperReverseYPosition\" [autoXReverse]=\"helperAutoXReverse\" class=\"ml-1\">\n {{ helpText }}\n </ngt-helper>\n</label>\n\n<ngt-validation [hidden]='shining' class=\"block mb-1\" [control]='formControl' [container]='formContainer'>\n</ngt-validation>\n\n<div class=\"{{ shining ? 'hidden' : 'flex flex-col' }} border w-full rounded {{ ngtStyle.compile(['h']) }}\"\n style=\"min-height: 13rem;\" [class.border-red-500]='hasValidationErrors()' [class.disabled-background]='disabled()'>\n <div class=\"flex items-center w-full p-2 border-b\">\n <ngt-checkbox *ngIf=\"allowSelectAll\" class=\"flex\" title=\"Selecionar todos\" [isDisabled]='loading || disabled()'\n [label]=\"!searchable ? 'Selecionar todos' : ''\" [(ngModel)]=\"selectAllCheckbox\"\n [name]=\"selectAllCheckboxName\" [isClickDisabled]='true' h='h-4' w='w-4' (click)='selectAll()'\n ngt-stylizable>\n </ngt-checkbox>\n\n <ngt-input *ngIf=\"searchable\" class=\"block w-full\" [class.pl-2]=\"allowSelectAll\" [name]='searchInputName'\n [(ngModel)]='searchTerm' placeholder='Buscar...' [allowClear]='true' [jit]='true' h='h-10'\n (ngModelChange)='search($event)' [loading]='loading' [isDisabled]='disabled()' ngt-stylizable #inputSearch>\n </ngt-input>\n </div>\n\n <div *ngIf=\"loading\" class=\"flex flex-col gap-3 px-3 h-full w-full cursor-wait\">\n <ngt-shining class=\"h-10 w-full\"></ngt-shining>\n <ngt-shining class=\"h-10 w-full\"></ngt-shining>\n <ngt-shining class=\"h-10 w-full\"></ngt-shining>\n <ngt-shining class=\"h-10 w-full\"></ngt-shining>\n </div>\n\n <div class=\"w-full overflow-y-auto text-xs {{ loading ? 'hidden' : 'flex flex-col' }}\" (scroll)='onScroll($event)'\n #containerRef>\n <ng-container *ngIf=\"customHeaderTemplate\" [ngTemplateOutlet]=\"customHeaderTemplate\">\n </ng-container>\n\n <ng-container *ngFor=\"let element of getSelectableElements(); let i = index\">\n <div class=\"flex w-full items-center hover:bg-gray-200 {{ disabled() ? 'cursor-not-allowed' : 'cursor-pointer' }}\"\n [class.p-2]='!customOptionTemplate' (click)='toggleItem(element, $event)'>\n <ng-template let-element #elementCheckboxTemplate>\n <ngt-checkbox class=\"flex pr-2\" [name]='element.uuid' [(ngModel)]=\"element.isSelected\"\n (ngModelChange)='onNativeChange(element)' [isClickDisabled]='true'\n [isDisabled]='!canSelectItem(element)' h='h-5' w='w-5' (click)='toggleItem(element, $event)'\n ngt-stylizable>\n </ngt-checkbox>\n </ng-template>\n\n <ng-template let-element #defaultOptionTemplate>\n {{ getSelectableElementValue(element) }}\n </ng-template>\n\n <ng-container *ngIf=\"!customOptionTemplate\" [ngTemplateOutlet]=\"elementCheckboxTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: element }\">\n </ng-container>\n\n <ng-container [ngTemplateOutlet]=\"customOptionTemplate || defaultOptionTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: element, index: i }\">\n </ng-container>\n </div>\n </ng-container>\n\n <p *ngIf=\"!getSelectableElements()?.length\" class=\"text-center mt-4\">\n {{ ngtTranslateService.ngtMultiSelectNoDataFound }}\n </p>\n </div>\n</div>\n\n<div class=\"{{ shining ? 'hidden' : 'flex' }} w-full items-center mt-2\">\n <span class=\"text-xs mr-4\">\n {{ selectedElements?.length || 0 }} / {{ itemsTotal || 0 }}\n </span>\n\n <ngt-checkbox class=\"flex\" label=\"Visualizar selecionados\" [name]='displayOnlySelectedName'\n [(ngModel)]=\"displayOnlySelected\" [isDisabled]='loading || disabled()' h='h-5' w='w-5' ngt-stylizable>\n </ngt-checkbox>\n</div>\n\n<ngt-shining *ngIf='shining' class=\"block w-full {{ ngtStyle.compile(['h']) }}\" style=\"min-height: 16rem;\"\n rounded='rounded' ngt-stylizable>\n</ngt-shining>\n\n<input *ngIf='componentReady' type='hidden' [ngModel]='value' [name]='name' [value]='value'>", styles: [".disabled-background{border:solid #cbd5e0 1px!important;background-color:#fafafa!important;border-radius:.25rem!important;padding:1px!important}.div-loader{width:4rem;height:4rem;border:3px solid #a0aec038;border-top-color:#a0aec0;border-radius:50%;animation:spin 1s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}\n"], dependencies: [{ kind: "directive", type: i8.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i8.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i6.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: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i9.NgtValidationComponent, selector: "ngt-validation", inputs: ["control", "container", "minValue", "minLength"] }, { kind: "component", type: i10.NgtShiningComponent, selector: "ngt-shining", inputs: ["shiningWidth"] }, { kind: "component", type: i11.NgtHelperComponent, selector: "ngt-helper", inputs: ["helpTextColor", "helpText", "helpTitle", "icon", "iconSize", "iconColor", "iconTitle", "tooltipSize", "autoXReverse", "helperReverseYPosition"] }, { kind: "component", type: i12.NgtInputComponent, selector: "ngt-input", inputs: ["label", "placeholder", "shining", "loading", "helpTitle", "helpTextColor", "helpText", "innerLeftIcon", "innerLeftIconColor", "innerRightIcon", "innerRightIconColor", "decimalMaskPrecision", "showCharactersLength", "uppercase", "customInnerContentTemplate", "helperReverseYPosition", "helperAutoXReverse", "isDisabled", "isReadonly", "showRoundedIcon", "type", "name", "mask", "focus", "allowClear", "jit", "useInputEvent", "findExistingResource", "allowPhoneValidation", "validatePassword", "passwordableId", "passwordPolicyId", "isRequired", "uniqueResource", "minValue", "maxValue", "maxLength", "minLength", "match", "multipleOf", "validateMinValueOnMask", "externalServerDependency", "customValidator"], outputs: ["onClickLeftIcon", "onClickRightIcon", "validatePhoneResult"] }, { kind: "component", type: i13.NgtCheckboxComponent, selector: "ngt-checkbox", inputs: ["label", "shining", "isDisabled", "isClickDisabled", "name", "mode", "helpTitle", "helpTextColor", "helpText", "helperAutoXReverse"] }, { kind: "directive", type: i5.NgtStylizableDirective, selector: "[ngt-stylizable]", inputs: ["color", "color.text", "color.bg", "color.border", "h", "w", "p", "px", "py", "pt", "pr", "pb", "pl", "m", "mx", "my", "mt", "mr", "mb", "ml", "gap", "border", "shadow", "rounded", "font", "text", "breakWords", "overflow", "position", "justifyContent", "cursor", "fontCase"] }], viewProviders: [
|
|
415
|
+
], viewQueries: [{ propertyName: "containerRef", first: true, predicate: ["containerRef"], descendants: true }, { propertyName: "inputSearch", first: true, predicate: ["inputSearch"], descendants: true }, { propertyName: "elementCheckboxTemplate", first: true, predicate: ["elementCheckboxTemplate"], descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<label *ngIf=\"label && !shining\" class=\"flex text-xs\" [class.mb-2]='!hasValidationErrors()'>\n <span class=\"truncate\" [title]=\"label\">\n {{ label }}:\n </span>\n\n <span *ngIf=\"isRequired\" class=\"text-red-500 font-bold text-xs ml-1\">*</span>\n\n <ngt-helper *ngIf=\"helpText\" [helpTitle]=\"helpTitle\" [iconColor]=\"helpTextColor\"\n [helperReverseYPosition]=\"helperReverseYPosition\" [autoXReverse]=\"helperAutoXReverse\" class=\"ml-1\">\n {{ helpText }}\n </ngt-helper>\n</label>\n\n<ngt-validation [hidden]='shining' class=\"block mb-1\" [control]='formControl' [container]='formContainer'>\n</ngt-validation>\n\n<div class=\"{{ shining ? 'hidden' : 'flex flex-col' }} border w-full rounded {{ ngtStyle.compile(['h']) }}\"\n style=\"min-height: 13rem;\" [class.border-red-500]='hasValidationErrors()' [class.disabled-background]='disabled()'>\n <div class=\"flex items-center w-full p-2 border-b\">\n <ngt-checkbox *ngIf=\"allowSelectAll\" class=\"flex\" title=\"Selecionar todos\" [isDisabled]='loading || disabled()'\n [label]=\"!searchable ? 'Selecionar todos' : ''\" [(ngModel)]=\"selectAllCheckbox\"\n [name]=\"selectAllCheckboxName\" [isClickDisabled]='true' h='h-4' w='w-4' (click)='selectAll()'\n ngt-stylizable>\n </ngt-checkbox>\n\n <ngt-input *ngIf=\"searchable\" class=\"block w-full\" [class.pl-2]=\"allowSelectAll\" [name]='searchInputName'\n [(ngModel)]='searchTerm' placeholder='Buscar...' [allowClear]='true' [jit]='true' h='h-10'\n (ngModelChange)='search($event)' [loading]='loading' [isDisabled]='disabled()' ngt-stylizable #inputSearch>\n </ngt-input>\n </div>\n\n <div *ngIf=\"loading\" class=\"flex flex-col gap-3 px-3 h-full w-full cursor-wait\">\n <ngt-shining class=\"h-10 w-full\"></ngt-shining>\n <ngt-shining class=\"h-10 w-full\"></ngt-shining>\n <ngt-shining class=\"h-10 w-full\"></ngt-shining>\n <ngt-shining class=\"h-10 w-full\"></ngt-shining>\n </div>\n\n <div class=\"w-full overflow-y-auto text-xs {{ loading ? 'hidden' : 'flex flex-col' }}\" (scroll)='onScroll($event)'\n #containerRef>\n <ng-container *ngIf=\"customHeaderTemplate\" [ngTemplateOutlet]=\"customHeaderTemplate\">\n </ng-container>\n\n <ng-container *ngFor=\"let element of getSelectableElements(); let i = index\">\n <div class=\"flex w-full items-center hover:bg-gray-200 {{ disabled() ? 'cursor-not-allowed' : 'cursor-pointer' }}\"\n [class.p-2]='!customOptionTemplate' (click)='toggleItem(element, $event)'>\n <ng-template let-element #elementCheckboxTemplate>\n <ngt-checkbox class=\"flex pr-2\" [name]='element.uuid' [(ngModel)]=\"element.isSelected\"\n (ngModelChange)='onNativeChange(element)' [isClickDisabled]='true'\n [isDisabled]='!canSelectItem(element)' h='h-5' w='w-5' (click)='toggleItem(element, $event)'\n ngt-stylizable>\n </ngt-checkbox>\n </ng-template>\n\n <ng-template let-element #defaultOptionTemplate>\n {{ getSelectableElementValue(element) }}\n </ng-template>\n\n <ng-container *ngIf=\"!customOptionTemplate\" [ngTemplateOutlet]=\"elementCheckboxTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: element }\">\n </ng-container>\n\n <ng-container [ngTemplateOutlet]=\"customOptionTemplate || defaultOptionTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: element, index: i }\">\n </ng-container>\n </div>\n </ng-container>\n\n <p *ngIf=\"!getSelectableElements()?.length\" class=\"text-center mt-4\">\n {{ ngtTranslateService.ngtMultiSelectNoDataFound }}\n </p>\n </div>\n</div>\n\n<div class=\"{{ shining ? 'hidden' : 'flex' }} w-full items-center mt-2\">\n <span class=\"text-xs mr-4\">\n {{ selectedElements?.length || 0 }} / {{ itemsTotal || 0 }}\n </span>\n\n <ngt-checkbox class=\"flex\" label=\"Visualizar selecionados\" [name]='displayOnlySelectedName'\n [(ngModel)]=\"displayOnlySelected\" [isDisabled]='loading || disabled()' h='h-5' w='w-5' ngt-stylizable>\n </ngt-checkbox>\n</div>\n\n<ngt-shining *ngIf='shining' class=\"block w-full {{ ngtStyle.compile(['h']) }}\" style=\"min-height: 16rem;\"\n rounded='rounded' ngt-stylizable>\n</ngt-shining>\n\n<input *ngIf='componentReady' type='hidden' [ngModel]='value' [name]='name' [value]='value'>", styles: [".disabled-background{border:solid #cbd5e0 1px!important;background-color:#fafafa!important;border-radius:.25rem!important;padding:1px!important}.div-loader{width:4rem;height:4rem;border:3px solid #a0aec038;border-top-color:#a0aec0;border-radius:50%;animation:spin 1s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}\n"], dependencies: [{ kind: "directive", type: i8.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i8.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i6.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: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i9.NgtValidationComponent, selector: "ngt-validation", inputs: ["control", "container", "minValue", "minLength"] }, { kind: "component", type: i10.NgtShiningComponent, selector: "ngt-shining", inputs: ["shiningWidth"] }, { kind: "component", type: i11.NgtHelperComponent, selector: "ngt-helper", inputs: ["helpTextColor", "helpText", "helpTitle", "icon", "iconSize", "iconColor", "iconTitle", "tooltipSize", "autoXReverse", "helperReverseYPosition"] }, { kind: "component", type: i12.NgtInputComponent, selector: "ngt-input", inputs: ["label", "placeholder", "shining", "loading", "helpTitle", "helpTextColor", "helpText", "innerLeftIcon", "innerLeftIconColor", "innerRightIcon", "innerRightIconColor", "decimalMaskPrecision", "showCharactersLength", "uppercase", "customInnerContentTemplate", "helperReverseYPosition", "helperAutoXReverse", "isDisabled", "isReadonly", "showRoundedIcon", "type", "name", "mask", "focus", "allowClear", "jit", "useInputEvent", "findExistingResource", "allowPhoneValidation", "validatePassword", "passwordableId", "passwordPolicyId", "isRequired", "uniqueResource", "minValue", "maxValue", "maxLength", "minLength", "match", "multipleOf", "validateMinValueOnMask", "externalServerDependency", "customValidator"], outputs: ["onClickLeftIcon", "onClickRightIcon", "validatePhoneResult"] }, { kind: "component", type: i13.NgtCheckboxComponent, selector: "ngt-checkbox", inputs: ["label", "shining", "isDisabled", "isClickDisabled", "name", "mode", "helpTitle", "helpTextColor", "helpText", "helperAutoXReverse"] }, { kind: "directive", type: i5.NgtStylizableDirective, selector: "[ngt-stylizable]", inputs: ["color", "color.text", "color.bg", "color.border", "h", "w", "p", "px", "py", "pt", "pr", "pb", "pl", "m", "mx", "my", "mt", "mr", "mb", "ml", "gap", "border", "shadow", "rounded", "font", "text", "breakWords", "overflow", "position", "justifyContent", "cursor", "fontCase"] }], viewProviders: [
|
|
416
416
|
{ provide: ControlContainer, useExisting: NgForm }
|
|
417
417
|
], encapsulation: i0.ViewEncapsulation.None });
|
|
418
418
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: NgtMultiSelectComponent, decorators: [{
|
|
@@ -421,7 +421,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.8", ngImpor
|
|
|
421
421
|
NgtMakeProvider(NgtMultiSelectComponent)
|
|
422
422
|
], viewProviders: [
|
|
423
423
|
{ provide: ControlContainer, useExisting: NgForm }
|
|
424
|
-
], template: "<label *ngIf=\"label && !shining\" class=\"flex text-xs\" [class.mb-2]='!hasValidationErrors()'>\n {{ label }}:\n\n <span *ngIf=\"isRequired\" class=\"text-red-500 font-bold text-xs ml-1\">*</span>\n\n <ngt-helper *ngIf=\"helpText\" [helpTitle]=\"helpTitle\" [iconColor]=\"helpTextColor\"\n [helperReverseYPosition]=\"helperReverseYPosition\" [autoXReverse]=\"helperAutoXReverse\" class=\"ml-1\">\n {{ helpText }}\n </ngt-helper>\n</label>\n\n<ngt-validation [hidden]='shining' class=\"block mb-1\" [control]='formControl' [container]='formContainer'>\n</ngt-validation>\n\n<div class=\"{{ shining ? 'hidden' : 'flex flex-col' }} border w-full rounded {{ ngtStyle.compile(['h']) }}\"\n style=\"min-height: 13rem;\" [class.border-red-500]='hasValidationErrors()' [class.disabled-background]='disabled()'>\n <div class=\"flex items-center w-full p-2 border-b\">\n <ngt-checkbox *ngIf=\"allowSelectAll\" class=\"flex\" title=\"Selecionar todos\" [isDisabled]='loading || disabled()'\n [label]=\"!searchable ? 'Selecionar todos' : ''\" [(ngModel)]=\"selectAllCheckbox\"\n [name]=\"selectAllCheckboxName\" [isClickDisabled]='true' h='h-4' w='w-4' (click)='selectAll()'\n ngt-stylizable>\n </ngt-checkbox>\n\n <ngt-input *ngIf=\"searchable\" class=\"block w-full\" [class.pl-2]=\"allowSelectAll\" [name]='searchInputName'\n [(ngModel)]='searchTerm' placeholder='Buscar...' [allowClear]='true' [jit]='true' h='h-10'\n (ngModelChange)='search($event)' [loading]='loading' [isDisabled]='disabled()' ngt-stylizable #inputSearch>\n </ngt-input>\n </div>\n\n <div *ngIf=\"loading\" class=\"flex flex-col gap-3 px-3 h-full w-full cursor-wait\">\n <ngt-shining class=\"h-10 w-full\"></ngt-shining>\n <ngt-shining class=\"h-10 w-full\"></ngt-shining>\n <ngt-shining class=\"h-10 w-full\"></ngt-shining>\n <ngt-shining class=\"h-10 w-full\"></ngt-shining>\n </div>\n\n <div class=\"w-full overflow-y-auto text-xs {{ loading ? 'hidden' : 'flex flex-col' }}\" (scroll)='onScroll($event)'\n #containerRef>\n <ng-container *ngIf=\"customHeaderTemplate\" [ngTemplateOutlet]=\"customHeaderTemplate\">\n </ng-container>\n\n <ng-container *ngFor=\"let element of getSelectableElements(); let i = index\">\n <div class=\"flex w-full items-center hover:bg-gray-200 {{ disabled() ? 'cursor-not-allowed' : 'cursor-pointer' }}\"\n [class.p-2]='!customOptionTemplate' (click)='toggleItem(element, $event)'>\n <ng-template let-element #elementCheckboxTemplate>\n <ngt-checkbox class=\"flex pr-2\" [name]='element.uuid' [(ngModel)]=\"element.isSelected\"\n (ngModelChange)='onNativeChange(element)' [isClickDisabled]='true'\n [isDisabled]='!canSelectItem(element)' h='h-5' w='w-5' (click)='toggleItem(element, $event)'\n ngt-stylizable>\n </ngt-checkbox>\n </ng-template>\n\n <ng-template let-element #defaultOptionTemplate>\n {{ getSelectableElementValue(element) }}\n </ng-template>\n\n <ng-container *ngIf=\"!customOptionTemplate\" [ngTemplateOutlet]=\"elementCheckboxTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: element }\">\n </ng-container>\n\n <ng-container [ngTemplateOutlet]=\"customOptionTemplate || defaultOptionTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: element, index: i }\">\n </ng-container>\n </div>\n </ng-container>\n\n <p *ngIf=\"!getSelectableElements()?.length\" class=\"text-center mt-4\">\n {{ ngtTranslateService.ngtMultiSelectNoDataFound }}\n </p>\n </div>\n</div>\n\n<div class=\"{{ shining ? 'hidden' : 'flex' }} w-full items-center mt-2\">\n <span class=\"text-xs mr-4\">\n {{ selectedElements?.length || 0 }} / {{ itemsTotal || 0 }}\n </span>\n\n <ngt-checkbox class=\"flex\" label=\"Visualizar selecionados\" [name]='displayOnlySelectedName'\n [(ngModel)]=\"displayOnlySelected\" [isDisabled]='loading || disabled()' h='h-5' w='w-5' ngt-stylizable>\n </ngt-checkbox>\n</div>\n\n<ngt-shining *ngIf='shining' class=\"block w-full {{ ngtStyle.compile(['h']) }}\" style=\"min-height: 16rem;\"\n rounded='rounded' ngt-stylizable>\n</ngt-shining>\n\n<input *ngIf='componentReady' type='hidden' [ngModel]='value' [name]='name' [value]='value'>", styles: [".disabled-background{border:solid #cbd5e0 1px!important;background-color:#fafafa!important;border-radius:.25rem!important;padding:1px!important}.div-loader{width:4rem;height:4rem;border:3px solid #a0aec038;border-top-color:#a0aec0;border-radius:50%;animation:spin 1s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}\n"] }]
|
|
424
|
+
], template: "<label *ngIf=\"label && !shining\" class=\"flex text-xs\" [class.mb-2]='!hasValidationErrors()'>\n <span class=\"truncate\" [title]=\"label\">\n {{ label }}:\n </span>\n\n <span *ngIf=\"isRequired\" class=\"text-red-500 font-bold text-xs ml-1\">*</span>\n\n <ngt-helper *ngIf=\"helpText\" [helpTitle]=\"helpTitle\" [iconColor]=\"helpTextColor\"\n [helperReverseYPosition]=\"helperReverseYPosition\" [autoXReverse]=\"helperAutoXReverse\" class=\"ml-1\">\n {{ helpText }}\n </ngt-helper>\n</label>\n\n<ngt-validation [hidden]='shining' class=\"block mb-1\" [control]='formControl' [container]='formContainer'>\n</ngt-validation>\n\n<div class=\"{{ shining ? 'hidden' : 'flex flex-col' }} border w-full rounded {{ ngtStyle.compile(['h']) }}\"\n style=\"min-height: 13rem;\" [class.border-red-500]='hasValidationErrors()' [class.disabled-background]='disabled()'>\n <div class=\"flex items-center w-full p-2 border-b\">\n <ngt-checkbox *ngIf=\"allowSelectAll\" class=\"flex\" title=\"Selecionar todos\" [isDisabled]='loading || disabled()'\n [label]=\"!searchable ? 'Selecionar todos' : ''\" [(ngModel)]=\"selectAllCheckbox\"\n [name]=\"selectAllCheckboxName\" [isClickDisabled]='true' h='h-4' w='w-4' (click)='selectAll()'\n ngt-stylizable>\n </ngt-checkbox>\n\n <ngt-input *ngIf=\"searchable\" class=\"block w-full\" [class.pl-2]=\"allowSelectAll\" [name]='searchInputName'\n [(ngModel)]='searchTerm' placeholder='Buscar...' [allowClear]='true' [jit]='true' h='h-10'\n (ngModelChange)='search($event)' [loading]='loading' [isDisabled]='disabled()' ngt-stylizable #inputSearch>\n </ngt-input>\n </div>\n\n <div *ngIf=\"loading\" class=\"flex flex-col gap-3 px-3 h-full w-full cursor-wait\">\n <ngt-shining class=\"h-10 w-full\"></ngt-shining>\n <ngt-shining class=\"h-10 w-full\"></ngt-shining>\n <ngt-shining class=\"h-10 w-full\"></ngt-shining>\n <ngt-shining class=\"h-10 w-full\"></ngt-shining>\n </div>\n\n <div class=\"w-full overflow-y-auto text-xs {{ loading ? 'hidden' : 'flex flex-col' }}\" (scroll)='onScroll($event)'\n #containerRef>\n <ng-container *ngIf=\"customHeaderTemplate\" [ngTemplateOutlet]=\"customHeaderTemplate\">\n </ng-container>\n\n <ng-container *ngFor=\"let element of getSelectableElements(); let i = index\">\n <div class=\"flex w-full items-center hover:bg-gray-200 {{ disabled() ? 'cursor-not-allowed' : 'cursor-pointer' }}\"\n [class.p-2]='!customOptionTemplate' (click)='toggleItem(element, $event)'>\n <ng-template let-element #elementCheckboxTemplate>\n <ngt-checkbox class=\"flex pr-2\" [name]='element.uuid' [(ngModel)]=\"element.isSelected\"\n (ngModelChange)='onNativeChange(element)' [isClickDisabled]='true'\n [isDisabled]='!canSelectItem(element)' h='h-5' w='w-5' (click)='toggleItem(element, $event)'\n ngt-stylizable>\n </ngt-checkbox>\n </ng-template>\n\n <ng-template let-element #defaultOptionTemplate>\n {{ getSelectableElementValue(element) }}\n </ng-template>\n\n <ng-container *ngIf=\"!customOptionTemplate\" [ngTemplateOutlet]=\"elementCheckboxTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: element }\">\n </ng-container>\n\n <ng-container [ngTemplateOutlet]=\"customOptionTemplate || defaultOptionTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: element, index: i }\">\n </ng-container>\n </div>\n </ng-container>\n\n <p *ngIf=\"!getSelectableElements()?.length\" class=\"text-center mt-4\">\n {{ ngtTranslateService.ngtMultiSelectNoDataFound }}\n </p>\n </div>\n</div>\n\n<div class=\"{{ shining ? 'hidden' : 'flex' }} w-full items-center mt-2\">\n <span class=\"text-xs mr-4\">\n {{ selectedElements?.length || 0 }} / {{ itemsTotal || 0 }}\n </span>\n\n <ngt-checkbox class=\"flex\" label=\"Visualizar selecionados\" [name]='displayOnlySelectedName'\n [(ngModel)]=\"displayOnlySelected\" [isDisabled]='loading || disabled()' h='h-5' w='w-5' ngt-stylizable>\n </ngt-checkbox>\n</div>\n\n<ngt-shining *ngIf='shining' class=\"block w-full {{ ngtStyle.compile(['h']) }}\" style=\"min-height: 16rem;\"\n rounded='rounded' ngt-stylizable>\n</ngt-shining>\n\n<input *ngIf='componentReady' type='hidden' [ngModel]='value' [name]='name' [value]='value'>", styles: [".disabled-background{border:solid #cbd5e0 1px!important;background-color:#fafafa!important;border-radius:.25rem!important;padding:1px!important}.div-loader{width:4rem;height:4rem;border:3px solid #a0aec038;border-top-color:#a0aec0;border-radius:50%;animation:spin 1s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}\n"] }]
|
|
425
425
|
}], ctorParameters: function () { return [{ type: i1.NgtHttpService }, { type: i0.Injector }, { type: i0.ChangeDetectorRef }, { type: i2.NgtFormComponent, decorators: [{
|
|
426
426
|
type: Optional
|
|
427
427
|
}, {
|
|
@@ -503,4 +503,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.8", ngImpor
|
|
|
503
503
|
type: HostListener,
|
|
504
504
|
args: ['scroll', ['$event']]
|
|
505
505
|
}] } });
|
|
506
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd0LW11bHRpLXNlbGVjdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy10YWlsd2luZC9zcmMvY29tcG9uZW50cy9uZ3QtbXVsdGktc2VsZWN0L25ndC1tdWx0aS1zZWxlY3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctdGFpbHdpbmQvc3JjL2NvbXBvbmVudHMvbmd0LW11bHRpLXNlbGVjdC9uZ3QtbXVsdGktc2VsZWN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFSCxTQUFTLEVBRVQsWUFBWSxFQUNaLElBQUksRUFDSixZQUFZLEVBRVosS0FBSyxFQUlMLFFBQVEsRUFDUixNQUFNLEVBQ04sSUFBSSxFQUVKLFFBQVEsRUFFUixTQUFTLEVBQ1QsaUJBQWlCLEdBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBbUIsZ0JBQWdCLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHM0UsT0FBTyxFQUFFLGNBQWMsRUFBRSxlQUFlLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUUvRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFHMUMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sc0RBQXNELENBQUM7Ozs7Ozs7Ozs7Ozs7OztBQWtCNUYsTUFBTSxPQUFPLHVCQUF3QixTQUFRLGNBQWM7SUF3RXZELFlBQ1ksY0FBOEIsRUFDOUIsUUFBa0IsRUFDbEIsY0FBaUMsRUFHakMsT0FBeUIsRUFHekIsVUFBK0IsRUFHL0IsUUFBMkIsRUFHM0Isc0JBQThDLEVBRy9DLGFBQStCLEVBRy9CLG1CQUF3QztRQUUvQyxLQUFLLEVBQUUsQ0FBQztRQXRCQSxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUNsQixtQkFBYyxHQUFk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QUs7c0JBQXBCLEtBQUs7Z0JBQ1UsU0FBUztzQkFBeEIsS0FBSztnQkFDVSxRQUFRO3NCQUF2QixLQUFLO2dCQUNVLGFBQWE7c0JBQTVCLEtBQUs7Z0JBQ1Usc0JBQXNCO3NCQUFyQyxLQUFLO2dCQUNVLGtCQUFrQjtzQkFBakMsS0FBSztnQkFDVSxPQUFPO3NCQUF0QixLQUFLO2dCQUNVLE9BQU87c0JBQXRCLEtBQUs7Z0JBR1UsU0FBUztzQkFBeEIsS0FBSztnQkFDVSxVQUFVO3NCQUF6QixLQUFLO2dCQUNVLFlBQVk7c0JBQTNCLEtBQUs7Z0JBQ1UsSUFBSTtzQkFBbkIsS0FBSztnQkFDVSxjQUFjO3NCQUE3QixLQUFLO2dCQUNVLEtBQUs7c0JBQXBCLEtBQUs7Z0JBQ1UsVUFBVTtzQkFBekIsS0FBSztnQkFDVSwwQkFBMEI7c0JBQXpDLEtBQUs7Z0JBQ1UsY0FBYztzQkFBN0IsS0FBSztnQkFDVSxzQkFBc0I7c0JBQXJDLEtBQUs7Z0JBR1UsVUFBVTtzQkFBekIsS0FBSztnQkFDVSxVQUFVO3NCQUF6QixLQUFLO2dCQUVXLFlBQVk7c0JBQTVCLE1BQU07Z0JBb0ZBLFFBQVE7c0JBRGQsWUFBWTt1QkFBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBIb3N0LFxuICAgIEhvc3RMaXN0ZW5lcixcbiAgICBJbmplY3RvcixcbiAgICBJbnB1dCxcbiAgICBPbkNoYW5nZXMsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPcHRpb25hbCxcbiAgICBPdXRwdXQsXG4gICAgU2VsZixcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIFNraXBTZWxmLFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIENvbnRyb2xDb250YWluZXIsIE5nRm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBOZ3RCYXNlTmdNb2RlbCwgTmd0TWFrZVByb3ZpZGVyIH0gZnJvbSAnLi4vLi4vYmFzZS9uZ3QtYmFzZS1uZy1tb2RlbCc7XG5pbXBvcnQgeyBOZ3RTdHlsaXphYmxlRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9uZ3Qtc3R5bGl6YWJsZS9uZ3Qtc3R5bGl6YWJsZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgdXVpZCB9IGZyb20gJy4uLy4uL2hlbHBlcnMvdXVpZCc7XG5pbXBvcnQgeyBOZ3RIdHRwUGFnaW5hdGlvbiwgTmd0SHR0cFJlc3BvbnNlLCBOZ3RIdHRwU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2h0dHAvbmd0LWh0dHAuc2VydmljZSc7XG5pbXBvcnQgeyBOZ3RUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvaHR0cC9uZ3QtdHJhbnNsYXRlLnNlcnZpY2UnO1xuaW1wb3J0IHsgTmd0U3R5bGl6YWJsZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9uZ3Qtc3R5bGl6YWJsZS9uZ3Qtc3R5bGl6YWJsZS5zZXJ2aWNlJztcbmltcG9ydCB7IE5ndEZvcm1Db21wb25lbnQgfSBmcm9tICcuLi9uZ3QtZm9ybS9uZ3QtZm9ybS5jb21wb25lbnQnO1xuaW1wb3J0IHsgTmd0SW5wdXRDb21wb25lbnQgfSBmcm9tICcuLi9uZ3QtaW5wdXQvbmd0LWlucHV0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBOZ3RTZWN0aW9uQ29tcG9uZW50IH0gZnJvbSAnLi4vbmd0LXNlY3Rpb24vbmd0LXNlY3Rpb24uY29tcG9uZW50JztcbmltcG9ydCB7IE5ndE1vZGFsQ29tcG9uZW50IH0gZnJvbSAnLi4vbmd0LW1vZGFsL25ndC1tb2RhbC5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ25ndC1tdWx0aS1zZWxlY3QnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9uZ3QtbXVsdGktc2VsZWN0LmNvbXBvbmVudC5odG1sJyxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIHN0eWxlVXJsczogWycuL25ndC1tdWx0aS1zZWxlY3QuY29tcG9uZW50LmNzcyddLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICBOZ3RNYWtlUHJvdmlkZXIoTmd0TXVsdGlTZWxlY3RDb21wb25lbnQpXG4gICAgXSxcbiAgICB2aWV3UHJvdmlkZXJzOiBbXG4gICAgICAgIHsgcHJvdmlkZTogQ29udHJvbENvbnRhaW5lciwgdXNlRXhpc3Rpbmc6IE5nRm9ybSB9XG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBOZ3RNdWx0aVNlbGVjdENvbXBvbmVudCBleHRlbmRzIE5ndEJhc2VOZ01vZGVsIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIE9uQ2hhbmdlcyB7XG4gICAgQFZpZXdDaGlsZCgnY29udGFpbmVyUmVmJykgcHVibGljIGNvbnRhaW5lclJlZjogRWxlbWVudFJlZjtcbiAgICBAVmlld0NoaWxkKCdpbnB1dFNlYXJjaCcpIHB1YmxpYyBpbnB1dFNlYXJjaDogTmd0SW5wdXRDb21wb25lbnQ7XG4gICAgQFZpZXdDaGlsZCgnZWxlbWVudENoZWNrYm94VGVtcGxhdGUnKSBwdWJsaWMgZWxlbWVudENoZWNrYm94VGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICAvKiogVmlzdWFsICovXG4gICAgQElucHV0KCkgcHVibGljIGN1c3RvbU9wdGlvblRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAgIEBJbnB1dCgpIHB1YmxpYyBjdXN0b21IZWFkZXJUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcbiAgICBASW5wdXQoKSBwdWJsaWMgbGFiZWw6IHN0cmluZztcbiAgICBASW5wdXQoKSBwdWJsaWMgaGVscFRpdGxlOiBzdHJpbmc7XG4gICAgQElucHV0KCkgcHVibGljIGhlbHBUZXh0OiBzdHJpbmc7XG4gICAgQElucHV0KCkgcHVibGljIGhlbHBUZXh0Q29sb3I6IHN0cmluZyA9ICd0ZXh0LWdyZWVuLTUwMCc7XG4gICAgQElucHV0KCkgcHVibGljIGhlbHBlclJldmVyc2VZUG9zaXRpb246IGJvb2xlYW47XG4gICAgQElucHV0KCkgcHVibGljIGhlbHBlckF1dG9YUmV2ZXJzZTogYm9vbGVhbiA9IHRydWU7XG4gICAgQElucHV0KCkgcHVibGljIHNoaW5pbmc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBASW5wdXQoKSBwdWJsaWMgbG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgLyoqIEJlaGF2aW9yICovXG4gICAgQElucHV0KCkgcHVibGljIGJpbmRMYWJlbDogc3RyaW5nIHwgRnVuY3Rpb24gPSAnbmFtZSc7XG4gICAgQElucHV0KCkgcHVibGljIGJpbmRTZWFyY2g6IHN0cmluZyA9ICduYW1lJztcbiAgICBASW5wdXQoKSBwdWJsaWMgaXRlbXNQZXJQYWdlOiBudW1iZXIgPSAxNTtcbiAgICBASW5wdXQoKSBwdWJsaWMgbmFtZTogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHB1YmxpYyByZW1vdGVSZXNvdXJjZTogYW55O1xuICAgIEBJbnB1dCgpIHB1YmxpYyBpdGVtczogQXJyYXk8YW55PiA9IFtdO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBzZWFyY2hhYmxlOiBib29sZWFuID0gdHJ1ZTtcbiAgICBASW5wdXQoKSBwdWJsaWMgYWxsb3dPcmlnaW5hbEl0ZW1zVW5zZWxlY3Q6IGJvb2xlYW4gPSB0cnVlO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBhbGxvd1NlbGVjdEFsbDogYm9vbGVhbiA9IHRydWU7XG4gICAgQElucHV0KCkgcHVibGljIGF1dG9TZWxlY3RVbmlxdWVPcHRpb246IGJvb2xlYW47XG5cbiAgICAvKiogVmFsaWRhdGlvbiAqL1xuICAgIEBJbnB1dCgpIHB1YmxpYyBpc1JlcXVpcmVkOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBpc0Rpc2FibGVkOiBib29sZWFuO1xuXG4gICAgQE91dHB1dCgpIHB1YmxpYyBvbkRhdGFDaGFuZ2U6IEV2ZW50RW1pdHRlcjxBcnJheTxOZ3RTZWxlY3RDb250YWluZXJTZWxlY3RhYmxlRWxlbWVudEludGVyZmFjZT4+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgcHVibGljIHNlYXJjaFRlcm06IHN0cmluZyA9ICcnO1xuICAgIHB1YmxpYyBzZWFyY2hJbnB1dE5hbWU6IHN0cmluZyA9IHV1aWQoKTtcblxuICAgIHB1YmxpYyBzZWxlY3RBbGxDaGVja2JveE5hbWU6IHN0cmluZyA9IHV1aWQoKTtcbiAgICBwdWJsaWMgZGlzcGxheU9ubHlTZWxlY3RlZE5hbWU6IHN0cmluZyA9IHV1aWQoKTtcblxuICAgIHB1YmxpYyBzZWxlY3RlZEVsZW1lbnRzOiBBcnJheTxOZ3RTZWxlY3RDb250YWluZXJTZWxlY3RhYmxlRWxlbWVudEludGVyZmFjZT4gPSBbXTtcbiAgICBwdWJsaWMgaXRlbXNUb3RhbDogbnVtYmVyO1xuICAgIHB1YmxpYyBzZWxlY3RBbGxDaGVja2JveDogYm9vbGVhbjtcbiAgICBwdWJsaWMgZGlzcGxheU9ubHlTZWxlY3RlZDogYm9vbGVhbjtcblxuICAgIHB1YmxpYyBuYXRpdmVOYW1lOiBzdHJpbmcgPSB1dWlkKCk7XG4gICAgcHVibGljIG5hdGl2ZVZhbHVlOiBhbnk7XG5cbiAgICBwdWJsaWMgbmd0U3R5bGU6IE5ndFN0eWxpemFibGVTZXJ2aWNlO1xuICAgIHB1YmxpYyBzZWxlY3RhYmxlRWxlbWVudHM6IEFycmF5PE5ndFNlbGVjdENvbnRhaW5lclNlbGVjdGFibGVFbGVtZW50SW50ZXJmYWNlPiA9IFtdO1xuICAgIHB1YmxpYyBzZWxlY3RhYmxlRWxlbWVudHNPblNlYXJjaDogQXJyYXk8Tmd0U2VsZWN0Q29udGFpbmVyU2VsZWN0YWJsZUVsZW1lbnRJbnRlcmZhY2U+ID0gW107XG4gICAgcHVibGljIGNvbXBvbmVudFJlYWR5OiBib29sZWFuO1xuXG4gICAgcHJpdmF0ZSBwYWdpbmF0aW9uOiBOZ3RIdHRwUGFnaW5hdGlvbiA9IHtcbiAgICAgICAgY291bnQ6IG51bGwsXG4gICAgICAgIHBhZ2U6IDEsXG4gICAgICAgIHBhZ2VzOiBudWxsLFxuICAgICAgICB0b3RhbDogbnVsbCxcbiAgICAgICAgZnJvbTogbnVsbCxcbiAgICAgICAgdG86IG51bGwsXG4gICAgICAgIHBlcl9wYWdlOiBudWxsXG4gICAgfTtcblxuICAgIHByaXZhdGUgc3Vic2NyaXB0aW9uczogQXJyYXk8U3Vic2NyaXB0aW9uPiA9IFtdO1xuICAgIHByaXZhdGUgaW5TZWFyY2g6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBzZWFyY2hUaW1lb3V0OiBhbnk7XG4gICAgcHJpdmF0ZSBwcmV2aW91c1NlYXJjaFRlcm06IHN0cmluZyA9ICcnO1xuICAgIHByaXZhdGUgYmVjYW1lVmlzaWJsZTogYm9vbGVhbjtcbiAgICBwcml2YXRlIHNlbGVjdGFibGVSZXNvdXJjZXNDb3VudDogbnVtYmVyO1xuICAgIHByaXZhdGUgb3JpZ2luYWxJdGVtczogQXJyYXk8Tmd0U2VsZWN0Q29udGFpbmVyU2VsZWN0YWJsZUVsZW1lbnRJbnRlcmZhY2U+O1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIG5ndEh0dHBTZXJ2aWNlOiBOZ3RIdHRwU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgICAgIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmLFxuXG4gICAgICAgIEBPcHRpb25hbCgpIEBTa2lwU2VsZigpXG4gICAgICAgIHByaXZhdGUgbmd0Rm9ybTogTmd0Rm9ybUNvbXBvbmVudCxcblxuICAgICAgICBAT3B0aW9uYWwoKSBAU2tpcFNlbGYoKVxuICAgICAgICBwcml2YXRlIG5ndFNlY3Rpb246IE5ndFNlY3Rpb25Db21wb25lbnQsXG5cbiAgICAgICAgQE9wdGlvbmFsKCkgQFNraXBTZWxmKClcbiAgICAgICAgcHJpdmF0ZSBuZ3RNb2RhbDogTmd0TW9kYWxDb21wb25lbnQsXG5cbiAgICAgICAgQE9wdGlvbmFsKCkgQFNlbGYoKVxuICAgICAgICBwcml2YXRlIG5ndFN0eWxpemFibGVEaXJlY3RpdmU6IE5ndFN0eWxpemFibGVEaXJlY3RpdmUsXG5cbiAgICAgICAgQE9wdGlvbmFsKCkgQEhvc3QoKVxuICAgICAgICBwdWJsaWMgZm9ybUNvbnRhaW5lcjogQ29udHJvbENvbnRhaW5lcixcblxuICAgICAgICBAT3B0aW9uYWwoKVxuICAgICAgICBwdWJsaWMgbmd0VHJhbnNsYXRlU2VydmljZTogTmd0VHJhbnNsYXRlU2VydmljZVxuICAgICkge1xuICAgICAgICBzdXBlcigpO1xuXG4gICAgICAgIGlmICh0aGlzLm5ndEZvcm0pIHtcbiAgICAgICAgICAgIHRoaXMuc2hpbmluZyA9IHRoaXMubmd0Rm9ybS5pc1NoaW5pbmcoKTtcblxuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICAgICAgICAgICAgdGhpcy5uZ3RGb3JtLm9uU2hpbmluZ0NoYW5nZS5zdWJzY3JpYmUoKHNoaW5pbmc6IGJvb2xlYW4pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaGluaW5nID0gc2hpbmluZztcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLm5ndFN0eWxpemFibGVEaXJlY3RpdmUpIHtcbiAgICAgICAgICAgIHRoaXMubmd0U3R5bGUgPSB0aGlzLm5ndFN0eWxpemFibGVEaXJlY3RpdmUuZ2V0Tmd0U3R5bGl6YWJsZVNlcnZpY2UoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubmd0U3R5bGUgPSBuZXcgTmd0U3R5bGl6YWJsZVNlcnZpY2UoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubmd0U3R5bGUubG9hZCh0aGlzLmluamVjdG9yLCAnTmd0TXVsdGlTZWxlY3QnLCB7IGg6ICdoLTY0JyB9KTtcbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCdzY3JvbGwnLCBbJyRldmVudCddKVxuICAgIHB1YmxpYyBvblNjcm9sbChldmVudDogYW55KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGlzU2Nyb2xsRW5kID0gZXZlbnQudGFyZ2V0LnNjcm9sbFRvcCAmJiBldmVudC50YXJnZXQub2Zmc2V0SGVpZ2h0ICsgZXZlbnQudGFyZ2V0LnNjcm9sbFRvcCA+PSAoZXZlbnQudGFyZ2V0LnNjcm9sbEhlaWdodCAtIDMwKTtcblxuICAgICAgICBpZiAoaXNTY3JvbGxFbmQgJiYgIXRoaXMubG9hZGluZyAmJiAhdGhpcy5kaXNwbGF5T25seVNlbGVjdGVkICYmIHRoaXMuc2VsZWN0YWJsZUVsZW1lbnRzPy5sZW5ndGhcbiAgICAgICAgICAgICYmIHRoaXMucGFnaW5hdGlvbi5wZXJfcGFnZSA8IHRoaXMucGFnaW5hdGlvbi50b3RhbCkge1xuICAgICAgICAgICAgY29uc3QgY3VycmVudFBlclBhZ2UgPSB0eXBlb2YgdGhpcy5wYWdpbmF0aW9uLnBlcl9wYWdlID09PSAnc3RyaW5nJ1xuICAgICAgICAgICAgICAgID8gTnVtYmVyLnBhcnNlSW50KHRoaXMucGFnaW5hdGlvbi5wZXJfcGFnZSlcbiAgICAgICAgICAgICAgICA6IHRoaXMucGFnaW5hdGlvbi5wZXJfcGFnZTtcblxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmxvYWREYXRhKGN1cnJlbnRQZXJQYWdlICsgdGhpcy5pdGVtc1BlclBhZ2UsIHRoaXMuc2VhcmNoVGVybSkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuZm9ybUNvbnRhaW5lcikge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIlRoZSBlbGVtZW50IG11c3QgYmUgaW5zaWRlIGEgPGZvcm0gI2Zvcm09J25nRm9ybSc+IHRhZyFcIik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMubmFtZSkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIlRoZSBlbGVtZW50IG11c3QgY29udGFpbiBhIG5hbWUgYXR0cmlidXRlIVwiKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBuZ0RvQ2hlY2soKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5iZWNhbWVWaXNpYmxlICYmICF0aGlzLmlzSGlkZGVuKCkpIHtcbiAgICAgICAgICAgIHRoaXMuYmVjYW1lVmlzaWJsZSA9IHRydWU7XG5cbiAgICAgICAgICAgIHRoaXMubG9hZERhdGEoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmluaXRDb21wb25lbnRWYWxpZGF0aW9uKCk7XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jYW5BdXRvU2VsZWN0VW5pcXVlT3B0aW9uKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RhYmxlRWxlbWVudHNbMF0uaXNTZWxlY3RlZCA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbk5hdGl2ZUNoYW5nZSh0aGlzLnNlbGVjdGFibGVFbGVtZW50c1swXSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5vcmlnaW5hbEl0ZW1zID0gWy4uLnRoaXMuc2VsZWN0ZWRFbGVtZW50c107XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGlmIChjaGFuZ2VzLmlzUmVxdWlyZWQgJiYgdGhpcy5jb21wb25lbnRSZWFkeSkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVWYWxpZGF0aW9ucygpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNoYW5nZXMuaXNEaXNhYmxlZCkge1xuICAgICAgICAgICAgdGhpcy5kaXNwbGF5T25seVNlbGVjdGVkID0gdGhpcy5kaXNhYmxlZCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNoYW5nZXMuaXRlbXMpIHtcbiAgICAgICAgICAgIHRoaXMuYmluZFNlbGVjdGFibGVFbGVtZW50cyhjaGFuZ2VzLml0ZW1zLmN1cnJlbnRWYWx1ZSk7XG5cbiAgICAgICAgICAgIHRoaXMuY29tcG9uZW50UmVhZHkgPSB0cnVlO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5jYW5BdXRvU2VsZWN0VW5pcXVlT3B0aW9uKCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGFibGVFbGVtZW50c1swXS5pc1NlbGVjdGVkID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgIHRoaXMub25OYXRpdmVDaGFuZ2UodGhpcy5zZWxlY3RhYmxlRWxlbWVudHNbMF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNoYW5nZXMucmVtb3RlUmVzb3VyY2UgJiYgdGhpcy5iZWNhbWVWaXNpYmxlKSB7XG4gICAgICAgICAgICB0aGlzLmxvYWREYXRhKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbml0Q29tcG9uZW50VmFsaWRhdGlvbigpO1xuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY2FuQXV0b1NlbGVjdFVuaXF1ZU9wdGlvbigpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0YWJsZUVsZW1lbnRzWzBdLmlzU2VsZWN0ZWQgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25OYXRpdmVDaGFuZ2UodGhpcy5zZWxlY3RhYmxlRWxlbWVudHNbMF0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNoYW5nZXMuaXRlbXNQZXJQYWdlKSB7XG4gICAgICAgICAgICB0aGlzLnBhZ2luYXRpb24ucGVyX3BhZ2UgPSBjaGFuZ2VzLml0ZW1zUGVyUGFnZS5jdXJyZW50VmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGVzdHJveVN1YnNjcmlwdGlvbnMoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0Rm9jdXMoKTogdm9pZCB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5pbnB1dFNlYXJjaC5zZXRGb2N1cygpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgcmVmcmVzaChpdGVtc1BlclBhZ2U/OiBudW1iZXIsIHNlYXJjaFRlcm0/OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhpcy5pdGVtc1BlclBhZ2UgPSBpdGVtc1BlclBhZ2UgIT09IHVuZGVmaW5lZCA/IGl0ZW1zUGVyUGFnZSA6IHRoaXMuaXRlbXNQZXJQYWdlO1xuICAgICAgICB0aGlzLnNlYXJjaFRlcm0gPSBzZWFyY2hUZXJtICE9PSB1bmRlZmluZWQgPyBzZWFyY2hUZXJtIDogdGhpcy5zZWFyY2hUZXJtO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmxvYWREYXRhKHRoaXMuaXRlbXNQZXJQYWdlLCB0aGlzLnNlYXJjaFRlcm0pO1xuICAgIH1cblxuICAgIHB1YmxpYyByZXNldCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IFtdO1xuICAgICAgICB0aGlzLm5hdGl2ZVZhbHVlID0gW107XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRFbGVtZW50cyA9IFtdO1xuICAgICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2VsZWN0QWxsKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5hbGxvd1NlbGVjdEFsbCAmJiAhdGhpcy5sb2FkaW5nICYmICF0aGlzLmRpc2FibGVkKCkpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0QWxsQ2hlY2tib3ggPSAhdGhpcy5zZWxlY3RBbGxDaGVja2JveDtcblxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5uYXRpdmVWYWx1ZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEVsZW1lbnRzID0gdGhpcy5hbGxvd09yaWdpbmFsSXRlbXNVbnNlbGVjdCA/IFtdIDogWy4uLnRoaXMub3JpZ2luYWxJdGVtc107XG5cbiAgICAgICAgICAgIGNvbnN0IHBlcnBhZ2UgPSB0aGlzLnNlbGVjdEFsbENoZWNrYm94ID8gdGhpcy5wYWdpbmF0aW9uLnRvdGFsIDogdGhpcy5pdGVtc1BlclBhZ2U7XG5cbiAgICAgICAgICAgIHRoaXMubG9hZERhdGEocGVycGFnZSwgdGhpcy5zZWFyY2hUZXJtKVxuICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250YWluZXJSZWY/Lm5hdGl2ZUVsZW1lbnQ/LnNjcm9sbFRvKHsgdG9wOiAwIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0YWJsZUVsZW1lbnRzLmZvckVhY2goXG4gICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50ID0+IGVsZW1lbnQuaXNTZWxlY3RlZCA9IHRoaXMuc2VsZWN0QWxsQ2hlY2tib3ggfHwgdGhpcy5pc1NlbGVjdGVkRWxlbWVudChlbGVtZW50KVxuICAgICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdEFsbENoZWNrYm94KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkRWxlbWVudHMgPSB0aGlzLnNlbGVjdGFibGVFbGVtZW50cztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHNlbGVjdEVsZW1lbnRzKGVsZW1lbnRzOiBBcnJheTxhbnk+KTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5kaXNhYmxlZCgpKSB7XG4gICAgICAgICAgICBjb25zdCBlbGVtZW50SWRzID0gdGhpcy5pc0NvbG9xdWVudFJlc291cmNlcygpID8gZWxlbWVudHMubWFwKGVsZW1lbnQgPT4gZWxlbWVudC5nZXRBcGlJZCgpKSA6IGVsZW1lbnRzO1xuXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGFibGVFbGVtZW50cy5mb3JFYWNoKFxuICAgICAgICAgICAgICAgIChzZWxlY3RhYmxlRWxlbWVudDogTmd0U2VsZWN0Q29udGFpbmVyU2VsZWN0YWJsZUVsZW1lbnRJbnRlcmZhY2UpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBzZWxlY3RhYmxlRWxlbWVudC52YWx1ZTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAhc2VsZWN0YWJsZUVsZW1lbnQuaXNTZWxlY3RlZFxuICAgICAgICAgICAgICAgICAgICAgICAgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0aGlzLmlzQ29sb3F1ZW50UmVzb3VyY2VzKCkgJiYgZWxlbWVudElkcy5pbmNsdWRlcyh2YWx1ZS5nZXRBcGlJZCgpKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBlbGVtZW50SWRzLmluY2x1ZGVzKHZhbHVlKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGFibGVFbGVtZW50LmlzU2VsZWN0ZWQgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUVsZW1lbnRTZWxlY3Rpb24oc2VsZWN0YWJsZUVsZW1lbnQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyB0b2dnbGVJdGVtKHNlbGVjdGFibGVFbGVtZW50OiBOZ3RTZWxlY3RDb250YWluZXJTZWxlY3RhYmxlRWxlbWVudEludGVyZmFjZSwgZXZlbnQ/OiBFdmVudCk6IHZvaWQge1xuICAgICAgICBldmVudD8uc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgaWYgKCF0aGlzLmRpc2FibGVkKCkgJiYgdGhpcy5jYW5TZWxlY3RJdGVtKHNlbGVjdGFibGVFbGVtZW50KSkge1xuICAgICAgICAgICAgc2VsZWN0YWJsZUVsZW1lbnQuaXNTZWxlY3RlZCA9ICFzZWxlY3RhYmxlRWxlbWVudC5pc1NlbGVjdGVkO1xuXG4gICAgICAgICAgICB0aGlzLmhhbmRsZUVsZW1lbnRTZWxlY3Rpb24oc2VsZWN0YWJsZUVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG9uTmF0aXZlQ2hhbmdlKHNlbGVjdGFibGVFbGVtZW50OiBOZ3RTZWxlY3RDb250YWluZXJTZWxlY3RhYmxlRWxlbWVudEludGVyZmFjZSk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5jb21wb25lbnRSZWFkeSkge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVFbGVtZW50U2VsZWN0aW9uKHNlbGVjdGFibGVFbGVtZW50KTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuaGFzQ2hhbmdlc0JldHdlZW5CaW5kaW5ncyh0aGlzLnZhbHVlLCB0aGlzLnNlbGVjdGVkRWxlbWVudHMpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuc2VsZWN0ZWRFbGVtZW50cy5tYXAoZSA9PiBlLnZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBjaGFuZ2Uoc2VsZWN0ZWRFbGVtZW50czogQXJyYXk8YW55Pik6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5oYXNDaGFuZ2VzQmV0d2VlbkJpbmRpbmdzKHNlbGVjdGVkRWxlbWVudHMsIHRoaXMuc2VsZWN0ZWRFbGVtZW50cykpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGFibGVFbGVtZW50cz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5iaW5kU2VsZWN0ZWRFbGVtZW50cyhzZWxlY3RlZEVsZW1lbnRzKTtcblxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0YWJsZUVsZW1lbnRzLmZpbHRlcihlbGVtZW50ID0+IHRoaXMuaXNTZWxlY3RlZEVsZW1lbnQoZWxlbWVudCkpXG4gICAgICAgICAgICAgICAgICAgIC5mb3JFYWNoKGVsZW1lbnQgPT4gZWxlbWVudC5pc1NlbGVjdGVkID0gdHJ1ZSk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGFibGVFbGVtZW50c09uU2VhcmNoLmZpbHRlcihlbGVtZW50ID0+IHRoaXMuaXNTZWxlY3RlZEVsZW1lbnQoZWxlbWVudCkpXG4gICAgICAgICAgICAgICAgICAgIC5mb3JFYWNoKGVsZW1lbnQgPT4gZWxlbWVudC5pc1NlbGVjdGVkID0gdHJ1ZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRFbGVtZW50cyA9IHNlbGVjdGVkRWxlbWVudHM/Lm1hcChcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudCA9PiAoeyB1dWlkOiB1dWlkKCksIGlzU2VsZWN0ZWQ6IHRydWUsIHZhbHVlOiBlbGVtZW50IH0pXG4gICAgICAgICAgICAgICAgKSA/PyBbXTtcblxuICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIXNlbGVjdGVkRWxlbWVudHM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHRoaXMubWFya0FzUHJpc3RpbmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzZWFyY2godGVybTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5jb21wb25lbnRSZWFkeSB8fCB0ZXJtID09PSB1bmRlZmluZWQgfHwgdGVybSA9PT0gbnVsbCB8fCB0ZXJtID09PSB0aGlzLnByZXZpb3VzU2VhcmNoVGVybSB8fCB0aGlzLmxvYWRpbmcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnNlYXJjaFRpbWVvdXQpIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnNlYXJjaFRpbWVvdXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZWFyY2hUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnByZXZpb3VzU2VhcmNoVGVybSA9IHRlcm07XG4gICAgICAgICAgICB0aGlzLnNlbGVjdEFsbENoZWNrYm94ID0gdGhpcy5zZWxlY3RlZEVsZW1lbnRzPy5sZW5ndGggPT0gdGhpcy5zZWxlY3RhYmxlUmVzb3VyY2VzQ291bnQ7XG5cbiAgICAgICAgICAgIGlmICghdGVybSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5TZWFyY2ggPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLml0ZW1zPy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5pblNlYXJjaCA9IHRydWU7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLml0ZW1zPy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGFibGVFbGVtZW50c09uU2VhcmNoID0gdGhpcy5zZWxlY3RhYmxlRWxlbWVudHMuZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgICBpdGVtID0+IHRoaXMuZ2V0U2VsZWN0YWJsZUVsZW1lbnRWYWx1ZShpdGVtKS5pbmNsdWRlcyh0ZXJtKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZERhdGEodGhpcy5pdGVtc1BlclBhZ2UsIHRlcm0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCA1MDApO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRTZWxlY3RhYmxlRWxlbWVudHMoKTogQXJyYXk8YW55PiB7XG4gICAgICAgIGlmICh0aGlzLmluU2VhcmNoICYmIHRoaXMuaXRlbXM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0YWJsZUVsZW1lbnRzT25TZWFyY2g7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5kaXNwbGF5T25seVNlbGVjdGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZEVsZW1lbnRzO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0YWJsZUVsZW1lbnRzO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRTZWxlY3RhYmxlRWxlbWVudFZhbHVlKHNlbGVjdGFibGVJdGVtOiBhbnkpOiBzdHJpbmcge1xuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYmluZExhYmVsID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5iaW5kTGFiZWwoc2VsZWN0YWJsZUl0ZW0udmFsdWUpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBzZWxlY3RhYmxlSXRlbS52YWx1ZVsnZ2V0QXR0cmlidXRlJ10gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiBzZWxlY3RhYmxlSXRlbS52YWx1ZS5nZXRBdHRyaWJ1dGUodGhpcy5iaW5kTGFiZWwpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHNlbGVjdGFibGVJdGVtLnZhbHVlW3RoaXMuYmluZExhYmVsXTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaGFzVmFsaWRhdGlvbkVycm9ycygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybUNvbnRyb2w/LmVycm9ycyAmJiAoXG4gICAgICAgICAgICB0aGlzLmZvcm1Db250cm9sLmRpcnR5IHx8ICh0aGlzLmZvcm1Db250YWluZXIgJiYgdGhpcy5mb3JtQ29udGFpbmVyWydzdWJtaXR0ZWQnXSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2FuU2VsZWN0SXRlbShpdGVtOiBOZ3RTZWxlY3RDb250YWluZXJTZWxlY3RhYmxlRWxlbWVudEludGVyZmFjZSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gIXRoaXMuZGlzYWJsZWQoKVxuICAgICAgICAgICAgJiYgKFxuICAgICAgICAgICAgICAgIHRoaXMuYWxsb3dPcmlnaW5hbEl0ZW1zVW5zZWxlY3RcbiAgICAgICAgICAgICAgICB8fCAhdGhpcy5vcmlnaW5hbEl0ZW1zPy5zb21lKG9yaWdpbmFsSXRlbSA9PiBvcmlnaW5hbEl0ZW0udXVpZCA9PSBpdGVtLnV1aWQpXG4gICAgICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyBkaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNEaXNhYmxlZCB8fCB0aGlzLmlzRGlzYWJsZWRCeVBhcmVudCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlRWxlbWVudFNlbGVjdGlvbihzZWxlY3RhYmxlRWxlbWVudDogTmd0U2VsZWN0Q29udGFpbmVyU2VsZWN0YWJsZUVsZW1lbnRJbnRlcmZhY2UpOiB2b2lkIHtcbiAgICAgICAgaWYgKHNlbGVjdGFibGVFbGVtZW50LmlzU2VsZWN0ZWQgJiYgIXRoaXMuaXNTZWxlY3RlZEVsZW1lbnQoc2VsZWN0YWJsZUVsZW1lbnQpKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkRWxlbWVudHMucHVzaChzZWxlY3RhYmxlRWxlbWVudCk7XG4gICAgICAgIH0gZWxzZSBpZiAoIXNlbGVjdGFibGVFbGVtZW50LmlzU2VsZWN0ZWQgJiYgdGhpcy5pc1NlbGVjdGVkRWxlbWVudChzZWxlY3RhYmxlRWxlbWVudCkpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRFbGVtZW50cyA9IHRoaXMuc2VsZWN0ZWRFbGVtZW50cy5maWx0ZXIoXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRFbGVtZW50ID0+IHNlbGVjdGVkRWxlbWVudC51dWlkICE9PSBzZWxlY3RhYmxlRWxlbWVudC51dWlkXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICB0aGlzLm9uTmF0aXZlQ2hhbmdlKHNlbGVjdGFibGVFbGVtZW50KTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuZGlzcGxheU9ubHlTZWxlY3RlZCAmJiAhdGhpcy5zZWxlY3RlZEVsZW1lbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGlzcGxheU9ubHlTZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBsb2FkRGF0YShwZXJwYWdlOiBudW1iZXIgPSB0aGlzLml0ZW1zUGVyUGFnZSwgc2VhcmNoVGVybT86IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMucmVtb3RlUmVzb3VyY2UpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5sb2FkaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHBlcnBhZ2UgPT0gdGhpcy5pdGVtc1BlclBhZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250YWluZXJSZWY/Lm5hdGl2ZUVsZW1lbnQ/LnNjcm9sbFRvKHsgdG9wOiAwIH0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0YWJsZUVsZW1lbnRzID0gW107XG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLml0ZW1zUGVyUGFnZSA9IHBlcnBhZ2U7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBwYWdpbmF0aW9uOiBOZ3RIdHRwUGFnaW5hdGlvbiA9IHsgLi4udGhpcy5wYWdpbmF0aW9uLCAuLi57IHBlcl9wYWdlOiBwZXJwYWdlIH0gfTtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJzID0gc2VhcmNoVGVybSA/IHsgW3RoaXMuYmluZFNlYXJjaF06IHNlYXJjaFRlcm0gfSA6IG51bGw7XG5cbiAgICAgICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5uZ3RIdHRwU2VydmljZS5nZXQoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbW90ZVJlc291cmNlLCBmaWx0ZXJzLCBwYWdpbmF0aW9uXG4gICAgICAgICAgICAgICAgICAgICkuc3Vic2NyaWJlKFxuICAgICAgICAgICAgICAgICAgICAgICAgKHJlc3BvbnNlOiBOZ3RIdHRwUmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJpbmRTZWxlY3RhYmxlRWxlbWVudHMocmVzcG9uc2UuZGF0YSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBhZ2luYXRpb24gPSByZXNwb25zZS5tZXRhLnBhZ2luYXRpb247XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pdGVtc1RvdGFsID0gdGhpcy5wYWdpbmF0aW9uLnRvdGFsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGFibGVSZXNvdXJjZXNDb3VudCAmJiAhc2VhcmNoVGVybSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGFibGVSZXNvdXJjZXNDb3VudCA9IHRoaXMucGFnaW5hdGlvbi50b3RhbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uRGF0YUNoYW5nZS5lbWl0KHRoaXMuc2VsZWN0YWJsZUVsZW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbXBvbmVudFJlYWR5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5kaXNwbGF5T25seVNlbGVjdGVkID0gdGhpcy5kaXNhYmxlZCgpKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignVGhlIHByb3BlcnR5IFtyZW1vdGVSZXNvdXJjZV0gbmVlZHMgdG8gYmUgcHJlc2VudCB0byBiZSBhYmxlIHRvIG1ha2UgcmVtb3RlIHNlYXJjaCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGJpbmRTZWxlY3RhYmxlRWxlbWVudHMoZGF0YTogQXJyYXk8YW55Pik6IHZvaWQge1xuICAgICAgICBjb25zdCBmb3JtYXR0ZWRFbGVtZW50czogQXJyYXk8Tmd0U2VsZWN0Q29udGFpbmVyU2VsZWN0YWJsZUVsZW1lbnRJbnRlcmZhY2U+ID0gW107XG5cbiAgICAgICAgZGF0YS5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgY29uc3QgYWxyZWFkeVNlbGVjdGVkID0gdGhpcy5maW5kU2VsZWN0ZWRFbGVtZW50KGl0ZW0pO1xuXG4gICAgICAgICAgICBpZiAoYWxyZWFkeVNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgZm9ybWF0dGVkRWxlbWVudHMucHVzaChhbHJlYWR5U2VsZWN0ZWQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBmb3JtYXR0ZWRFbGVtZW50cy5wdXNoKHsgdXVpZDogdXVpZCgpLCBpc1NlbGVjdGVkOiBmYWxzZSwgdmFsdWU6IGl0ZW0gfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuc2VsZWN0YWJsZUVsZW1lbnRzID0gZm9ybWF0dGVkRWxlbWVudHM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBiaW5kU2VsZWN0ZWRFbGVtZW50cyhzZWxlY3RlZEVsZW1lbnRzOiBBcnJheTxhbnk+KTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2VsZWN0YWJsZUVsZW1lbnRzLmZvckVhY2goc2VsZWN0YWJsZUVsZW1lbnQgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc2hvdWxkQmVTZWxlY3RlZDogYm9vbGVhbiA9ICEhc2VsZWN0ZWRFbGVtZW50cz8uZmluZChcbiAgICAgICAgICAgICAgICBzZWxlY3RlZEVsZW1lbnQgPT4gdGhpcy5jb21wYXJlV2l0aChzZWxlY3RlZEVsZW1lbnQsIHNlbGVjdGFibGVFbGVtZW50LnZhbHVlKVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgaWYgKHNob3VsZEJlU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICBzZWxlY3RhYmxlRWxlbWVudC5pc1NlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUVsZW1lbnRTZWxlY3Rpb24oc2VsZWN0YWJsZUVsZW1lbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXRDb21wb25lbnRWYWxpZGF0aW9uKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5mb3JtQ29udGFpbmVyPy5jb250cm9sICYmICh0aGlzLmZvcm1Db250cm9sID0gdGhpcy5mb3JtQ29udGFpbmVyLmNvbnRyb2wuZ2V0KHRoaXMubmFtZSkpKSB7XG4gICAgICAgICAgICB0aGlzLmZvcm1Db250cm9sID0gdGhpcy5mb3JtQ29udGFpbmVyLmNvbnRyb2wuZ2V0KHRoaXMubmFtZSk7XG4gICAgICAgICAgICB0aGlzLm1hcmtBc1ByaXN0aW5lKCk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVZhbGlkYXRpb25zKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZVZhbGlkYXRpb25zKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBzeW5jVmFsaWRhdG9ycyA9IFtdO1xuXG4gICAgICAgIGlmICh0aGlzLmlzUmVxdWlyZWQpIHtcbiAgICAgICAgICAgIHN5bmNWYWxpZGF0b3JzLnB1c2godGhpcy5pc1JlcXVpcmVkVmFsaWRhdG9yKCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmZvcm1Db250cm9sLnNldFZhbGlkYXRvcnMoc3luY1ZhbGlkYXRvcnMpO1xuICAgICAgICAgICAgdGhpcy5mb3JtQ29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNSZXF1aXJlZFZhbGlkYXRvcigpOiBhbnkge1xuICAgICAgICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCkgPT4ge1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy52YWx1ZSkgJiYgdGhpcy52YWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB7ICdyZXF1aXJlZCc6IHRydWUgfTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGZpbmRTZWxlY3RlZEVsZW1lbnQoaXRlbTogYW55KTogYW55IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRFbGVtZW50cy5maW5kKHNlbGVjdGVkRWxlbWVudCA9PiB0aGlzLmNvbXBhcmVXaXRoKHNlbGVjdGVkRWxlbWVudC52YWx1ZSwgaXRlbSkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY29tcGFyZVdpdGgoYTogYW55LCBiOiBhbnkpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKHR5cGVvZiBhWydnZXRBcGlJZCddID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBiWydnZXRBcGlJZCddID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICByZXR1cm4gYS5nZXRBcGlJZCgpID09IGIuZ2V0QXBpSWQoKTtcbiAgICAgICAgfSBlbHNlIGlmIChhLmlkICYmIGIuaWQpIHtcbiAgICAgICAgICAgIHJldHVybiBhLmlkID09IGIuaWQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoYSkgPT09IEpTT04uc3RyaW5naWZ5KGIpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFzQ2hhbmdlc0JldHdlZW5CaW5kaW5ncyh2YWx1ZTogQXJyYXk8YW55PiwgbmF0aXZlVmFsdWU6IEFycmF5PGFueT4pOiBib29sZWFuIHtcbiAgICAgICAgaWYgKHZhbHVlPy5sZW5ndGggJiYgIXZhbHVlWzBdLnV1aWQpIHtcbiAgICAgICAgICAgIG5hdGl2ZVZhbHVlID0gbmF0aXZlVmFsdWUubWFwKGVsZW1lbnQgPT4gZWxlbWVudC52YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodmFsdWUpICE9PSBKU09OLnN0cmluZ2lmeShuYXRpdmVWYWx1ZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc1NlbGVjdGVkRWxlbWVudChzZWxlY3RhYmxlRWxlbWVudDogTmd0U2VsZWN0Q29udGFpbmVyU2VsZWN0YWJsZUVsZW1lbnRJbnRlcmZhY2UpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5zZWxlY3RlZEVsZW1lbnRzLmZpbmQoc2VsZWN0ZWRFbGVtZW50ID0+IHNlbGVjdGVkRWxlbWVudC51dWlkID09PSBzZWxlY3RhYmxlRWxlbWVudC51dWlkKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNhbkF1dG9TZWxlY3RVbmlxdWVPcHRpb24oKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmF1dG9TZWxlY3RVbmlxdWVPcHRpb25cbiAgICAgICAgICAgICYmICghdGhpcy52YWx1ZSB8fCAhdGhpcy52YWx1ZT8ubGVuZ3RoKVxuICAgICAgICAgICAgJiYgdGhpcy5zZWxlY3RhYmxlRWxlbWVudHM/Lmxlbmd0aCA9PSAxO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNIaWRkZW4oKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhdGhpcy5jb250YWluZXJSZWY/Lm5hdGl2ZUVsZW1lbnQub2Zmc2V0UGFyZW50O1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNDb2xvcXVlbnRSZXNvdXJjZXMoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGFibGVFbGVtZW50cz8ubGVuZ3RoICYmIHR5cGVvZiB0aGlzLnNlbGVjdGFibGVFbGVtZW50c1swXS52YWx1ZVsnZ2V0QXBpSWQnXSA9PT0gJ2Z1bmN0aW9uJztcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzRGlzYWJsZWRCeVBhcmVudCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmd0Rm9ybT8uaXNEaXNhYmxlZFxuICAgICAgICAgICAgfHwgdGhpcy5uZ3RTZWN0aW9uPy5pc0Rpc2FibGVkXG4gICAgICAgICAgICB8fCB0aGlzLm5ndE1vZGFsPy5pc0Rpc2FibGVkO1xuICAgIH1cblxuICAgIHByaXZhdGUgZGVzdHJveVN1YnNjcmlwdGlvbnMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKHN1YnNjcmlwdGlvbiA9PiBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSk7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucyA9IFtdO1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBOZ3RTZWxlY3RDb250YWluZXJTZWxlY3RhYmxlRWxlbWVudEludGVyZmFjZSB7XG4gICAgdXVpZDogc3RyaW5nO1xuICAgIGlzU2VsZWN0ZWQ6IGJvb2xlYW47XG4gICAgdmFsdWU6IGFueTtcbn1cbiIsIjxsYWJlbCAqbmdJZj1cImxhYmVsICYmICFzaGluaW5nXCIgY2xhc3M9XCJmbGV4IHRleHQteHNcIiBbY2xhc3MubWItMl09JyFoYXNWYWxpZGF0aW9uRXJyb3JzKCknPlxuICAgIHt7IGxhYmVsIH19OlxuXG4gICAgPHNwYW4gKm5nSWY9XCJpc1JlcXVpcmVkXCIgY2xhc3M9XCJ0ZXh0LXJlZC01MDAgZm9udC1ib2xkIHRleHQteHMgbWwtMVwiPio8L3NwYW4+XG5cbiAgICA8bmd0LWhlbHBlciAqbmdJZj1cImhlbHBUZXh0XCIgW2hlbHBUaXRsZV09XCJoZWxwVGl0bGVcIiBbaWNvbkNvbG9yXT1cImhlbHBUZXh0Q29sb3JcIlxuICAgICAgICBbaGVscGVyUmV2ZXJzZVlQb3NpdGlvbl09XCJoZWxwZXJSZXZlcnNlWVBvc2l0aW9uXCIgW2F1dG9YUmV2ZXJzZV09XCJoZWxwZXJBdXRvWFJldmVyc2VcIiBjbGFzcz1cIm1sLTFcIj5cbiAgICAgICAge3sgaGVscFRleHQgfX1cbiAgICA8L25ndC1oZWxwZXI+XG48L2xhYmVsPlxuXG48bmd0LXZhbGlkYXRpb24gW2hpZGRlbl09J3NoaW5pbmcnIGNsYXNzPVwiYmxvY2sgbWItMVwiIFtjb250cm9sXT0nZm9ybUNvbnRyb2wnIFtjb250YWluZXJdPSdmb3JtQ29udGFpbmVyJz5cbjwvbmd0LXZhbGlkYXRpb24+XG5cbjxkaXYgY2xhc3M9XCJ7eyBzaGluaW5nID8gJ2hpZGRlbicgOiAnZmxleCBmbGV4LWNvbCcgfX0gYm9yZGVyIHctZnVsbCByb3VuZGVkIHt7IG5ndFN0eWxlLmNvbXBpbGUoWydoJ10pIH19XCJcbiAgICBzdHlsZT1cIm1pbi1oZWlnaHQ6IDEzcmVtO1wiIFtjbGFzcy5ib3JkZXItcmVkLTUwMF09J2hhc1ZhbGlkYXRpb25FcnJvcnMoKScgW2NsYXNzLmRpc2FibGVkLWJhY2tncm91bmRdPSdkaXNhYmxlZCgpJz5cbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgdy1mdWxsIHAtMiBib3JkZXItYlwiPlxuICAgICAgICA8bmd0LWNoZWNrYm94ICpuZ0lmPVwiYWxsb3dTZWxlY3RBbGxcIiBjbGFzcz1cImZsZXhcIiB0aXRsZT1cIlNlbGVjaW9uYXIgdG9kb3NcIiBbaXNEaXNhYmxlZF09J2xvYWRpbmcgfHwgZGlzYWJsZWQoKSdcbiAgICAgICAgICAgIFtsYWJlbF09XCIhc2VhcmNoYWJsZSA/ICdTZWxlY2lvbmFyIHRvZG9zJyA6ICcnXCIgWyhuZ01vZGVsKV09XCJzZWxlY3RBbGxDaGVja2JveFwiXG4gICAgICAgICAgICBbbmFtZV09XCJzZWxlY3RBbGxDaGVja2JveE5hbWVcIiBbaXNDbGlja0Rpc2FibGVkXT0ndHJ1ZScgaD0naC00JyB3PSd3LTQnIChjbGljayk9J3NlbGVjdEFsbCgpJ1xuICAgICAgICAgICAgbmd0LXN0eWxpemFibGU+XG4gICAgICAgIDwvbmd0LWNoZWNrYm94PlxuXG4gICAgICAgIDxuZ3QtaW5wdXQgKm5nSWY9XCJzZWFyY2hhYmxlXCIgY2xhc3M9XCJibG9jayB3LWZ1bGxcIiBbY2xhc3MucGwtMl09XCJhbGxvd1NlbGVjdEFsbFwiIFtuYW1lXT0nc2VhcmNoSW5wdXROYW1lJ1xuICAgICAgICAgICAgWyhuZ01vZGVsKV09J3NlYXJjaFRlcm0nIHBsYWNlaG9sZGVyPSdCdXNjYXIuLi4nIFthbGxvd0NsZWFyXT0ndHJ1ZScgW2ppdF09J3RydWUnIGg9J2gtMTAnXG4gICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9J3NlYXJjaCgkZXZlbnQpJyBbbG9hZGluZ109J2xvYWRpbmcnIFtpc0Rpc2FibGVkXT0nZGlzYWJsZWQoKScgbmd0LXN0eWxpemFibGUgI2lucHV0U2VhcmNoPlxuICAgICAgICA8L25ndC1pbnB1dD5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgKm5nSWY9XCJsb2FkaW5nXCIgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGdhcC0zIHB4LTMgaC1mdWxsIHctZnVsbCBjdXJzb3Itd2FpdFwiPlxuICAgICAgICA8bmd0LXNoaW5pbmcgY2xhc3M9XCJoLTEwIHctZnVsbFwiPjwvbmd0LXNoaW5pbmc+XG4gICAgICAgIDxuZ3Qtc2hpbmluZyBjbGFzcz1cImgtMTAgdy1mdWxsXCI+PC9uZ3Qtc2hpbmluZz5cbiAgICAgICAgPG5ndC1zaGluaW5nIGNsYXNzPVwiaC0xMCB3LWZ1bGxcIj48L25ndC1zaGluaW5nPlxuICAgICAgICA8bmd0LXNoaW5pbmcgY2xhc3M9XCJoLTEwIHctZnVsbFwiPjwvbmd0LXNoaW5pbmc+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwidy1mdWxsIG92ZXJmbG93LXktYXV0byB0ZXh0LXhzIHt7IGxvYWRpbmcgPyAnaGlkZGVuJyA6ICdmbGV4IGZsZXgtY29sJyB9fVwiIChzY3JvbGwpPSdvblNjcm9sbCgkZXZlbnQpJ1xuICAgICAgICAjY29udGFpbmVyUmVmPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY3VzdG9tSGVhZGVyVGVtcGxhdGVcIiBbbmdUZW1wbGF0ZU91dGxldF09XCJjdXN0b21IZWFkZXJUZW1wbGF0ZVwiPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBlbGVtZW50IG9mIGdldFNlbGVjdGFibGVFbGVtZW50cygpOyBsZXQgaSA9IGluZGV4XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCB3LWZ1bGwgaXRlbXMtY2VudGVyIGhvdmVyOmJnLWdyYXktMjAwIHt7IGRpc2FibGVkKCkgPyAnY3Vyc29yLW5vdC1hbGxvd2VkJyA6ICdjdXJzb3ItcG9pbnRlcicgfX1cIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5wLTJdPSchY3VzdG9tT3B0aW9uVGVtcGxhdGUnIChjbGljayk9J3RvZ2dsZUl0ZW0oZWxlbWVudCwgJGV2ZW50KSc+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGxldC1lbGVtZW50ICNlbGVtZW50Q2hlY2tib3hUZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgPG5ndC1jaGVja2JveCBjbGFzcz1cImZsZXggcHItMlwiIFtuYW1lXT0nZWxlbWVudC51dWlkJyBbKG5nTW9kZWwpXT1cImVsZW1lbnQuaXNTZWxlY3RlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9J29uTmF0aXZlQ2hhbmdlKGVsZW1lbnQpJyBbaXNDbGlja0Rpc2FibGVkXT0ndHJ1ZSdcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpc0Rpc2FibGVkXT0nIWNhblNlbGVjdEl0ZW0oZWxlbWVudCknIGg9J2gtNScgdz0ndy01JyAoY2xpY2spPSd0b2dnbGVJdGVtKGVsZW1lbnQsICRldmVudCknXG4gICAgICAgICAgICAgICAgICAgICAgICBuZ3Qtc3R5bGl6YWJsZT5cbiAgICAgICAgICAgICAgICAgICAgPC9uZ3QtY2hlY2tib3g+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBsZXQtZWxlbWVudCAjZGVmYXVsdE9wdGlvblRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICB7eyBnZXRTZWxlY3RhYmxlRWxlbWVudFZhbHVlKGVsZW1lbnQpIH19XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhY3VzdG9tT3B0aW9uVGVtcGxhdGVcIiBbbmdUZW1wbGF0ZU91dGxldF09XCJlbGVtZW50Q2hlY2tib3hUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogZWxlbWVudCB9XCI+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImN1c3RvbU9wdGlvblRlbXBsYXRlIHx8IGRlZmF1bHRPcHRpb25UZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogZWxlbWVudCwgaW5kZXg6IGkgfVwiPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxwICpuZ0lmPVwiIWdldFNlbGVjdGFibGVFbGVtZW50cygpPy5sZW5ndGhcIiBjbGFzcz1cInRleHQtY2VudGVyIG10LTRcIj5cbiAgICAgICAgICAgIHt7IG5ndFRyYW5zbGF0ZVNlcnZpY2Uubmd0TXVsdGlTZWxlY3ROb0RhdGFGb3VuZCB9fVxuICAgICAgICA8L3A+XG4gICAgPC9kaXY+XG48L2Rpdj5cblxuPGRpdiBjbGFzcz1cInt7IHNoaW5pbmcgPyAnaGlkZGVuJyA6ICdmbGV4JyB9fSB3LWZ1bGwgaXRlbXMtY2VudGVyIG10LTJcIj5cbiAgICA8c3BhbiBjbGFzcz1cInRleHQteHMgbXItNFwiPlxuICAgICAgICB7eyBzZWxlY3RlZEVsZW1lbnRzPy5sZW5ndGggfHwgMCB9fSAvIHt7IGl0ZW1zVG90YWwgfHwgMCB9fVxuICAgIDwvc3Bhbj5cblxuICAgIDxuZ3QtY2hlY2tib3ggY2xhc3M9XCJmbGV4XCIgbGFiZWw9XCJWaXN1YWxpemFyIHNlbGVjaW9uYWRvc1wiIFtuYW1lXT0nZGlzcGxheU9ubHlTZWxlY3RlZE5hbWUnXG4gICAgICAgIFsobmdNb2RlbCldPVwiZGlzcGxheU9ubHlTZWxlY3RlZFwiIFtpc0Rpc2FibGVkXT0nbG9hZGluZyB8fCBkaXNhYmxlZCgpJyBoPSdoLTUnIHc9J3ctNScgbmd0LXN0eWxpemFibGU+XG4gICAgPC9uZ3QtY2hlY2tib3g+XG48L2Rpdj5cblxuPG5ndC1zaGluaW5nICpuZ0lmPSdzaGluaW5nJyBjbGFzcz1cImJsb2NrIHctZnVsbCB7eyBuZ3RTdHlsZS5jb21waWxlKFsnaCddKSB9fVwiIHN0eWxlPVwibWluLWhlaWdodDogMTZyZW07XCJcbiAgICByb3VuZGVkPSdyb3VuZGVkJyBuZ3Qtc3R5bGl6YWJsZT5cbjwvbmd0LXNoaW5pbmc+XG5cbjxpbnB1dCAqbmdJZj0nY29tcG9uZW50UmVhZHknIHR5cGU9J2hpZGRlbicgW25nTW9kZWxdPSd2YWx1ZScgW25hbWVdPSduYW1lJyBbdmFsdWVdPSd2YWx1ZSc+Il19
|
|
506
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd0LW11bHRpLXNlbGVjdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy10YWlsd2luZC9zcmMvY29tcG9uZW50cy9uZ3QtbXVsdGktc2VsZWN0L25ndC1tdWx0aS1zZWxlY3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctdGFpbHdpbmQvc3JjL2NvbXBvbmVudHMvbmd0LW11bHRpLXNlbGVjdC9uZ3QtbXVsdGktc2VsZWN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFSCxTQUFTLEVBRVQsWUFBWSxFQUNaLElBQUksRUFDSixZQUFZLEVBRVosS0FBSyxFQUlMLFFBQVEsRUFDUixNQUFNLEVBQ04sSUFBSSxFQUVKLFFBQVEsRUFFUixTQUFTLEVBQ1QsaUJBQWlCLEdBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBbUIsZ0JBQWdCLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHM0UsT0FBTyxFQUFFLGNBQWMsRUFBRSxlQUFlLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUUvRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFHMUMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sc0RBQXNELENBQUM7Ozs7Ozs7Ozs7Ozs7OztBQWtCNUYsTUFBTSxPQUFPLHVCQUF3QixTQUFRLGNBQWM7SUF3RXZELFlBQ1ksY0FBOEIsRUFDOUIsUUFBa0IsRUFDbEIsY0FBaUMsRUFHakMsT0FBeUIsRUFHekIsVUFBK0IsRUFHL0IsUUFBMkIsRUFHM0Isc0JBQThDLEVBRy9DLGFBQStCLEVBRy9CLG1CQUF3QztRQUUvQyxLQUFLLEVBQUUsQ0FBQztRQXRCQSxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUNsQixtQkFBYyxHQUFk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QUs7c0JBQXBCLEtBQUs7Z0JBQ1UsU0FBUztzQkFBeEIsS0FBSztnQkFDVSxRQUFRO3NCQUF2QixLQUFLO2dCQUNVLGFBQWE7c0JBQTVCLEtBQUs7Z0JBQ1Usc0JBQXNCO3NCQUFyQyxLQUFLO2dCQUNVLGtCQUFrQjtzQkFBakMsS0FBSztnQkFDVSxPQUFPO3NCQUF0QixLQUFLO2dCQUNVLE9BQU87c0JBQXRCLEtBQUs7Z0JBR1UsU0FBUztzQkFBeEIsS0FBSztnQkFDVSxVQUFVO3NCQUF6QixLQUFLO2dCQUNVLFlBQVk7c0JBQTNCLEtBQUs7Z0JBQ1UsSUFBSTtzQkFBbkIsS0FBSztnQkFDVSxjQUFjO3NCQUE3QixLQUFLO2dCQUNVLEtBQUs7c0JBQXBCLEtBQUs7Z0JBQ1UsVUFBVTtzQkFBekIsS0FBSztnQkFDVSwwQkFBMEI7c0JBQXpDLEtBQUs7Z0JBQ1UsY0FBYztzQkFBN0IsS0FBSztnQkFDVSxzQkFBc0I7c0JBQXJDLEtBQUs7Z0JBR1UsVUFBVTtzQkFBekIsS0FBSztnQkFDVSxVQUFVO3NCQUF6QixLQUFLO2dCQUVXLFlBQVk7c0JBQTVCLE1BQU07Z0JBb0ZBLFFBQVE7c0JBRGQsWUFBWTt1QkFBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBIb3N0LFxuICAgIEhvc3RMaXN0ZW5lcixcbiAgICBJbmplY3RvcixcbiAgICBJbnB1dCxcbiAgICBPbkNoYW5nZXMsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPcHRpb25hbCxcbiAgICBPdXRwdXQsXG4gICAgU2VsZixcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIFNraXBTZWxmLFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIENvbnRyb2xDb250YWluZXIsIE5nRm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBOZ3RCYXNlTmdNb2RlbCwgTmd0TWFrZVByb3ZpZGVyIH0gZnJvbSAnLi4vLi4vYmFzZS9uZ3QtYmFzZS1uZy1tb2RlbCc7XG5pbXBvcnQgeyBOZ3RTdHlsaXphYmxlRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9uZ3Qtc3R5bGl6YWJsZS9uZ3Qtc3R5bGl6YWJsZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgdXVpZCB9IGZyb20gJy4uLy4uL2hlbHBlcnMvdXVpZCc7XG5pbXBvcnQgeyBOZ3RIdHRwUGFnaW5hdGlvbiwgTmd0SHR0cFJlc3BvbnNlLCBOZ3RIdHRwU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2h0dHAvbmd0LWh0dHAuc2VydmljZSc7XG5pbXBvcnQgeyBOZ3RUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvaHR0cC9uZ3QtdHJhbnNsYXRlLnNlcnZpY2UnO1xuaW1wb3J0IHsgTmd0U3R5bGl6YWJsZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9uZ3Qtc3R5bGl6YWJsZS9uZ3Qtc3R5bGl6YWJsZS5zZXJ2aWNlJztcbmltcG9ydCB7IE5ndEZvcm1Db21wb25lbnQgfSBmcm9tICcuLi9uZ3QtZm9ybS9uZ3QtZm9ybS5jb21wb25lbnQnO1xuaW1wb3J0IHsgTmd0SW5wdXRDb21wb25lbnQgfSBmcm9tICcuLi9uZ3QtaW5wdXQvbmd0LWlucHV0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBOZ3RTZWN0aW9uQ29tcG9uZW50IH0gZnJvbSAnLi4vbmd0LXNlY3Rpb24vbmd0LXNlY3Rpb24uY29tcG9uZW50JztcbmltcG9ydCB7IE5ndE1vZGFsQ29tcG9uZW50IH0gZnJvbSAnLi4vbmd0LW1vZGFsL25ndC1tb2RhbC5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ25ndC1tdWx0aS1zZWxlY3QnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9uZ3QtbXVsdGktc2VsZWN0LmNvbXBvbmVudC5odG1sJyxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIHN0eWxlVXJsczogWycuL25ndC1tdWx0aS1zZWxlY3QuY29tcG9uZW50LmNzcyddLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICBOZ3RNYWtlUHJvdmlkZXIoTmd0TXVsdGlTZWxlY3RDb21wb25lbnQpXG4gICAgXSxcbiAgICB2aWV3UHJvdmlkZXJzOiBbXG4gICAgICAgIHsgcHJvdmlkZTogQ29udHJvbENvbnRhaW5lciwgdXNlRXhpc3Rpbmc6IE5nRm9ybSB9XG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBOZ3RNdWx0aVNlbGVjdENvbXBvbmVudCBleHRlbmRzIE5ndEJhc2VOZ01vZGVsIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIE9uQ2hhbmdlcyB7XG4gICAgQFZpZXdDaGlsZCgnY29udGFpbmVyUmVmJykgcHVibGljIGNvbnRhaW5lclJlZjogRWxlbWVudFJlZjtcbiAgICBAVmlld0NoaWxkKCdpbnB1dFNlYXJjaCcpIHB1YmxpYyBpbnB1dFNlYXJjaDogTmd0SW5wdXRDb21wb25lbnQ7XG4gICAgQFZpZXdDaGlsZCgnZWxlbWVudENoZWNrYm94VGVtcGxhdGUnKSBwdWJsaWMgZWxlbWVudENoZWNrYm94VGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICAvKiogVmlzdWFsICovXG4gICAgQElucHV0KCkgcHVibGljIGN1c3RvbU9wdGlvblRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAgIEBJbnB1dCgpIHB1YmxpYyBjdXN0b21IZWFkZXJUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcbiAgICBASW5wdXQoKSBwdWJsaWMgbGFiZWw6IHN0cmluZztcbiAgICBASW5wdXQoKSBwdWJsaWMgaGVscFRpdGxlOiBzdHJpbmc7XG4gICAgQElucHV0KCkgcHVibGljIGhlbHBUZXh0OiBzdHJpbmc7XG4gICAgQElucHV0KCkgcHVibGljIGhlbHBUZXh0Q29sb3I6IHN0cmluZyA9ICd0ZXh0LWdyZWVuLTUwMCc7XG4gICAgQElucHV0KCkgcHVibGljIGhlbHBlclJldmVyc2VZUG9zaXRpb246IGJvb2xlYW47XG4gICAgQElucHV0KCkgcHVibGljIGhlbHBlckF1dG9YUmV2ZXJzZTogYm9vbGVhbiA9IHRydWU7XG4gICAgQElucHV0KCkgcHVibGljIHNoaW5pbmc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBASW5wdXQoKSBwdWJsaWMgbG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgLyoqIEJlaGF2aW9yICovXG4gICAgQElucHV0KCkgcHVibGljIGJpbmRMYWJlbDogc3RyaW5nIHwgRnVuY3Rpb24gPSAnbmFtZSc7XG4gICAgQElucHV0KCkgcHVibGljIGJpbmRTZWFyY2g6IHN0cmluZyA9ICduYW1lJztcbiAgICBASW5wdXQoKSBwdWJsaWMgaXRlbXNQZXJQYWdlOiBudW1iZXIgPSAxNTtcbiAgICBASW5wdXQoKSBwdWJsaWMgbmFtZTogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHB1YmxpYyByZW1vdGVSZXNvdXJjZTogYW55O1xuICAgIEBJbnB1dCgpIHB1YmxpYyBpdGVtczogQXJyYXk8YW55PiA9IFtdO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBzZWFyY2hhYmxlOiBib29sZWFuID0gdHJ1ZTtcbiAgICBASW5wdXQoKSBwdWJsaWMgYWxsb3dPcmlnaW5hbEl0ZW1zVW5zZWxlY3Q6IGJvb2xlYW4gPSB0cnVlO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBhbGxvd1NlbGVjdEFsbDogYm9vbGVhbiA9IHRydWU7XG4gICAgQElucHV0KCkgcHVibGljIGF1dG9TZWxlY3RVbmlxdWVPcHRpb246IGJvb2xlYW47XG5cbiAgICAvKiogVmFsaWRhdGlvbiAqL1xuICAgIEBJbnB1dCgpIHB1YmxpYyBpc1JlcXVpcmVkOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBpc0Rpc2FibGVkOiBib29sZWFuO1xuXG4gICAgQE91dHB1dCgpIHB1YmxpYyBvbkRhdGFDaGFuZ2U6IEV2ZW50RW1pdHRlcjxBcnJheTxOZ3RTZWxlY3RDb250YWluZXJTZWxlY3RhYmxlRWxlbWVudEludGVyZmFjZT4+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgcHVibGljIHNlYXJjaFRlcm06IHN0cmluZyA9ICcnO1xuICAgIHB1YmxpYyBzZWFyY2hJbnB1dE5hbWU6IHN0cmluZyA9IHV1aWQoKTtcblxuICAgIHB1YmxpYyBzZWxlY3RBbGxDaGVja2JveE5hbWU6IHN0cmluZyA9IHV1aWQoKTtcbiAgICBwdWJsaWMgZGlzcGxheU9ubHlTZWxlY3RlZE5hbWU6IHN0cmluZyA9IHV1aWQoKTtcblxuICAgIHB1YmxpYyBzZWxlY3RlZEVsZW1lbnRzOiBBcnJheTxOZ3RTZWxlY3RDb250YWluZXJTZWxlY3RhYmxlRWxlbWVudEludGVyZmFjZT4gPSBbXTtcbiAgICBwdWJsaWMgaXRlbXNUb3RhbDogbnVtYmVyO1xuICAgIHB1YmxpYyBzZWxlY3RBbGxDaGVja2JveDogYm9vbGVhbjtcbiAgICBwdWJsaWMgZGlzcGxheU9ubHlTZWxlY3RlZDogYm9vbGVhbjtcblxuICAgIHB1YmxpYyBuYXRpdmVOYW1lOiBzdHJpbmcgPSB1dWlkKCk7XG4gICAgcHVibGljIG5hdGl2ZVZhbHVlOiBhbnk7XG5cbiAgICBwdWJsaWMgbmd0U3R5bGU6IE5ndFN0eWxpemFibGVTZXJ2aWNlO1xuICAgIHB1YmxpYyBzZWxlY3RhYmxlRWxlbWVudHM6IEFycmF5PE5ndFNlbGVjdENvbnRhaW5lclNlbGVjdGFibGVFbGVtZW50SW50ZXJmYWNlPiA9IFtdO1xuICAgIHB1YmxpYyBzZWxlY3RhYmxlRWxlbWVudHNPblNlYXJjaDogQXJyYXk8Tmd0U2VsZWN0Q29udGFpbmVyU2VsZWN0YWJsZUVsZW1lbnRJbnRlcmZhY2U+ID0gW107XG4gICAgcHVibGljIGNvbXBvbmVudFJlYWR5OiBib29sZWFuO1xuXG4gICAgcHJpdmF0ZSBwYWdpbmF0aW9uOiBOZ3RIdHRwUGFnaW5hdGlvbiA9IHtcbiAgICAgICAgY291bnQ6IG51bGwsXG4gICAgICAgIHBhZ2U6IDEsXG4gICAgICAgIHBhZ2VzOiBudWxsLFxuICAgICAgICB0b3RhbDogbnVsbCxcbiAgICAgICAgZnJvbTogbnVsbCxcbiAgICAgICAgdG86IG51bGwsXG4gICAgICAgIHBlcl9wYWdlOiBudWxsXG4gICAgfTtcblxuICAgIHByaXZhdGUgc3Vic2NyaXB0aW9uczogQXJyYXk8U3Vic2NyaXB0aW9uPiA9IFtdO1xuICAgIHByaXZhdGUgaW5TZWFyY2g6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBzZWFyY2hUaW1lb3V0OiBhbnk7XG4gICAgcHJpdmF0ZSBwcmV2aW91c1NlYXJjaFRlcm06IHN0cmluZyA9ICcnO1xuICAgIHByaXZhdGUgYmVjYW1lVmlzaWJsZTogYm9vbGVhbjtcbiAgICBwcml2YXRlIHNlbGVjdGFibGVSZXNvdXJjZXNDb3VudDogbnVtYmVyO1xuICAgIHByaXZhdGUgb3JpZ2luYWxJdGVtczogQXJyYXk8Tmd0U2VsZWN0Q29udGFpbmVyU2VsZWN0YWJsZUVsZW1lbnRJbnRlcmZhY2U+O1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIG5ndEh0dHBTZXJ2aWNlOiBOZ3RIdHRwU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgICAgIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmLFxuXG4gICAgICAgIEBPcHRpb25hbCgpIEBTa2lwU2VsZigpXG4gICAgICAgIHByaXZhdGUgbmd0Rm9ybTogTmd0Rm9ybUNvbXBvbmVudCxcblxuICAgICAgICBAT3B0aW9uYWwoKSBAU2tpcFNlbGYoKVxuICAgICAgICBwcml2YXRlIG5ndFNlY3Rpb246IE5ndFNlY3Rpb25Db21wb25lbnQsXG5cbiAgICAgICAgQE9wdGlvbmFsKCkgQFNraXBTZWxmKClcbiAgICAgICAgcHJpdmF0ZSBuZ3RNb2RhbDogTmd0TW9kYWxDb21wb25lbnQsXG5cbiAgICAgICAgQE9wdGlvbmFsKCkgQFNlbGYoKVxuICAgICAgICBwcml2YXRlIG5ndFN0eWxpemFibGVEaXJlY3RpdmU6IE5ndFN0eWxpemFibGVEaXJlY3RpdmUsXG5cbiAgICAgICAgQE9wdGlvbmFsKCkgQEhvc3QoKVxuICAgICAgICBwdWJsaWMgZm9ybUNvbnRhaW5lcjogQ29udHJvbENvbnRhaW5lcixcblxuICAgICAgICBAT3B0aW9uYWwoKVxuICAgICAgICBwdWJsaWMgbmd0VHJhbnNsYXRlU2VydmljZTogTmd0VHJhbnNsYXRlU2VydmljZVxuICAgICkge1xuICAgICAgICBzdXBlcigpO1xuXG4gICAgICAgIGlmICh0aGlzLm5ndEZvcm0pIHtcbiAgICAgICAgICAgIHRoaXMuc2hpbmluZyA9IHRoaXMubmd0Rm9ybS5pc1NoaW5pbmcoKTtcblxuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICAgICAgICAgICAgdGhpcy5uZ3RGb3JtLm9uU2hpbmluZ0NoYW5nZS5zdWJzY3JpYmUoKHNoaW5pbmc6IGJvb2xlYW4pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaGluaW5nID0gc2hpbmluZztcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLm5ndFN0eWxpemFibGVEaXJlY3RpdmUpIHtcbiAgICAgICAgICAgIHRoaXMubmd0U3R5bGUgPSB0aGlzLm5ndFN0eWxpemFibGVEaXJlY3RpdmUuZ2V0Tmd0U3R5bGl6YWJsZVNlcnZpY2UoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubmd0U3R5bGUgPSBuZXcgTmd0U3R5bGl6YWJsZVNlcnZpY2UoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubmd0U3R5bGUubG9hZCh0aGlzLmluamVjdG9yLCAnTmd0TXVsdGlTZWxlY3QnLCB7IGg6ICdoLTY0JyB9KTtcbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCdzY3JvbGwnLCBbJyRldmVudCddKVxuICAgIHB1YmxpYyBvblNjcm9sbChldmVudDogYW55KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGlzU2Nyb2xsRW5kID0gZXZlbnQudGFyZ2V0LnNjcm9sbFRvcCAmJiBldmVudC50YXJnZXQub2Zmc2V0SGVpZ2h0ICsgZXZlbnQudGFyZ2V0LnNjcm9sbFRvcCA+PSAoZXZlbnQudGFyZ2V0LnNjcm9sbEhlaWdodCAtIDMwKTtcblxuICAgICAgICBpZiAoaXNTY3JvbGxFbmQgJiYgIXRoaXMubG9hZGluZyAmJiAhdGhpcy5kaXNwbGF5T25seVNlbGVjdGVkICYmIHRoaXMuc2VsZWN0YWJsZUVsZW1lbnRzPy5sZW5ndGhcbiAgICAgICAgICAgICYmIHRoaXMucGFnaW5hdGlvbi5wZXJfcGFnZSA8IHRoaXMucGFnaW5hdGlvbi50b3RhbCkge1xuICAgICAgICAgICAgY29uc3QgY3VycmVudFBlclBhZ2UgPSB0eXBlb2YgdGhpcy5wYWdpbmF0aW9uLnBlcl9wYWdlID09PSAnc3RyaW5nJ1xuICAgICAgICAgICAgICAgID8gTnVtYmVyLnBhcnNlSW50KHRoaXMucGFnaW5hdGlvbi5wZXJfcGFnZSlcbiAgICAgICAgICAgICAgICA6IHRoaXMucGFnaW5hdGlvbi5wZXJfcGFnZTtcblxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmxvYWREYXRhKGN1cnJlbnRQZXJQYWdlICsgdGhpcy5pdGVtc1BlclBhZ2UsIHRoaXMuc2VhcmNoVGVybSkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuZm9ybUNvbnRhaW5lcikge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIlRoZSBlbGVtZW50IG11c3QgYmUgaW5zaWRlIGEgPGZvcm0gI2Zvcm09J25nRm9ybSc+IHRhZyFcIik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMubmFtZSkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIlRoZSBlbGVtZW50IG11c3QgY29udGFpbiBhIG5hbWUgYXR0cmlidXRlIVwiKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBuZ0RvQ2hlY2soKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5iZWNhbWVWaXNpYmxlICYmICF0aGlzLmlzSGlkZGVuKCkpIHtcbiAgICAgICAgICAgIHRoaXMuYmVjYW1lVmlzaWJsZSA9IHRydWU7XG5cbiAgICAgICAgICAgIHRoaXMubG9hZERhdGEoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmluaXRDb21wb25lbnRWYWxpZGF0aW9uKCk7XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jYW5BdXRvU2VsZWN0VW5pcXVlT3B0aW9uKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RhYmxlRWxlbWVudHNbMF0uaXNTZWxlY3RlZCA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbk5hdGl2ZUNoYW5nZSh0aGlzLnNlbGVjdGFibGVFbGVtZW50c1swXSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5vcmlnaW5hbEl0ZW1zID0gWy4uLnRoaXMuc2VsZWN0ZWRFbGVtZW50c107XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGlmIChjaGFuZ2VzLmlzUmVxdWlyZWQgJiYgdGhpcy5jb21wb25lbnRSZWFkeSkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVWYWxpZGF0aW9ucygpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNoYW5nZXMuaXNEaXNhYmxlZCkge1xuICAgICAgICAgICAgdGhpcy5kaXNwbGF5T25seVNlbGVjdGVkID0gdGhpcy5kaXNhYmxlZCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNoYW5nZXMuaXRlbXMpIHtcbiAgICAgICAgICAgIHRoaXMuYmluZFNlbGVjdGFibGVFbGVtZW50cyhjaGFuZ2VzLml0ZW1zLmN1cnJlbnRWYWx1ZSk7XG5cbiAgICAgICAgICAgIHRoaXMuY29tcG9uZW50UmVhZHkgPSB0cnVlO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5jYW5BdXRvU2VsZWN0VW5pcXVlT3B0aW9uKCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGFibGVFbGVtZW50c1swXS5pc1NlbGVjdGVkID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgIHRoaXMub25OYXRpdmVDaGFuZ2UodGhpcy5zZWxlY3RhYmxlRWxlbWVudHNbMF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNoYW5nZXMucmVtb3RlUmVzb3VyY2UgJiYgdGhpcy5iZWNhbWVWaXNpYmxlKSB7XG4gICAgICAgICAgICB0aGlzLmxvYWREYXRhKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbml0Q29tcG9uZW50VmFsaWRhdGlvbigpO1xuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY2FuQXV0b1NlbGVjdFVuaXF1ZU9wdGlvbigpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0YWJsZUVsZW1lbnRzWzBdLmlzU2VsZWN0ZWQgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25OYXRpdmVDaGFuZ2UodGhpcy5zZWxlY3RhYmxlRWxlbWVudHNbMF0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNoYW5nZXMuaXRlbXNQZXJQYWdlKSB7XG4gICAgICAgICAgICB0aGlzLnBhZ2luYXRpb24ucGVyX3BhZ2UgPSBjaGFuZ2VzLml0ZW1zUGVyUGFnZS5jdXJyZW50VmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGVzdHJveVN1YnNjcmlwdGlvbnMoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0Rm9jdXMoKTogdm9pZCB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5pbnB1dFNlYXJjaC5zZXRGb2N1cygpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgcmVmcmVzaChpdGVtc1BlclBhZ2U/OiBudW1iZXIsIHNlYXJjaFRlcm0/OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhpcy5pdGVtc1BlclBhZ2UgPSBpdGVtc1BlclBhZ2UgIT09IHVuZGVmaW5lZCA/IGl0ZW1zUGVyUGFnZSA6IHRoaXMuaXRlbXNQZXJQYWdlO1xuICAgICAgICB0aGlzLnNlYXJjaFRlcm0gPSBzZWFyY2hUZXJtICE9PSB1bmRlZmluZWQgPyBzZWFyY2hUZXJtIDogdGhpcy5zZWFyY2hUZXJtO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmxvYWREYXRhKHRoaXMuaXRlbXNQZXJQYWdlLCB0aGlzLnNlYXJjaFRlcm0pO1xuICAgIH1cblxuICAgIHB1YmxpYyByZXNldCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IFtdO1xuICAgICAgICB0aGlzLm5hdGl2ZVZhbHVlID0gW107XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRFbGVtZW50cyA9IFtdO1xuICAgICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2VsZWN0QWxsKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5hbGxvd1NlbGVjdEFsbCAmJiAhdGhpcy5sb2FkaW5nICYmICF0aGlzLmRpc2FibGVkKCkpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0QWxsQ2hlY2tib3ggPSAhdGhpcy5zZWxlY3RBbGxDaGVja2JveDtcblxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5uYXRpdmVWYWx1ZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEVsZW1lbnRzID0gdGhpcy5hbGxvd09yaWdpbmFsSXRlbXNVbnNlbGVjdCA/IFtdIDogWy4uLnRoaXMub3JpZ2luYWxJdGVtc107XG5cbiAgICAgICAgICAgIGNvbnN0IHBlcnBhZ2UgPSB0aGlzLnNlbGVjdEFsbENoZWNrYm94ID8gdGhpcy5wYWdpbmF0aW9uLnRvdGFsIDogdGhpcy5pdGVtc1BlclBhZ2U7XG5cbiAgICAgICAgICAgIHRoaXMubG9hZERhdGEocGVycGFnZSwgdGhpcy5zZWFyY2hUZXJtKVxuICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250YWluZXJSZWY/Lm5hdGl2ZUVsZW1lbnQ/LnNjcm9sbFRvKHsgdG9wOiAwIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0YWJsZUVsZW1lbnRzLmZvckVhY2goXG4gICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50ID0+IGVsZW1lbnQuaXNTZWxlY3RlZCA9IHRoaXMuc2VsZWN0QWxsQ2hlY2tib3ggfHwgdGhpcy5pc1NlbGVjdGVkRWxlbWVudChlbGVtZW50KVxuICAgICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdEFsbENoZWNrYm94KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkRWxlbWVudHMgPSB0aGlzLnNlbGVjdGFibGVFbGVtZW50cztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHNlbGVjdEVsZW1lbnRzKGVsZW1lbnRzOiBBcnJheTxhbnk+KTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5kaXNhYmxlZCgpKSB7XG4gICAgICAgICAgICBjb25zdCBlbGVtZW50SWRzID0gdGhpcy5pc0NvbG9xdWVudFJlc291cmNlcygpID8gZWxlbWVudHMubWFwKGVsZW1lbnQgPT4gZWxlbWVudC5nZXRBcGlJZCgpKSA6IGVsZW1lbnRzO1xuXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGFibGVFbGVtZW50cy5mb3JFYWNoKFxuICAgICAgICAgICAgICAgIChzZWxlY3RhYmxlRWxlbWVudDogTmd0U2VsZWN0Q29udGFpbmVyU2VsZWN0YWJsZUVsZW1lbnRJbnRlcmZhY2UpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBzZWxlY3RhYmxlRWxlbWVudC52YWx1ZTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAhc2VsZWN0YWJsZUVsZW1lbnQuaXNTZWxlY3RlZFxuICAgICAgICAgICAgICAgICAgICAgICAgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0aGlzLmlzQ29sb3F1ZW50UmVzb3VyY2VzKCkgJiYgZWxlbWVudElkcy5pbmNsdWRlcyh2YWx1ZS5nZXRBcGlJZCgpKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBlbGVtZW50SWRzLmluY2x1ZGVzKHZhbHVlKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGFibGVFbGVtZW50LmlzU2VsZWN0ZWQgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUVsZW1lbnRTZWxlY3Rpb24oc2VsZWN0YWJsZUVsZW1lbnQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyB0b2dnbGVJdGVtKHNlbGVjdGFibGVFbGVtZW50OiBOZ3RTZWxlY3RDb250YWluZXJTZWxlY3RhYmxlRWxlbWVudEludGVyZmFjZSwgZXZlbnQ/OiBFdmVudCk6IHZvaWQge1xuICAgICAgICBldmVudD8uc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgaWYgKCF0aGlzLmRpc2FibGVkKCkgJiYgdGhpcy5jYW5TZWxlY3RJdGVtKHNlbGVjdGFibGVFbGVtZW50KSkge1xuICAgICAgICAgICAgc2VsZWN0YWJsZUVsZW1lbnQuaXNTZWxlY3RlZCA9ICFzZWxlY3RhYmxlRWxlbWVudC5pc1NlbGVjdGVkO1xuXG4gICAgICAgICAgICB0aGlzLmhhbmRsZUVsZW1lbnRTZWxlY3Rpb24oc2VsZWN0YWJsZUVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG9uTmF0aXZlQ2hhbmdlKHNlbGVjdGFibGVFbGVtZW50OiBOZ3RTZWxlY3RDb250YWluZXJTZWxlY3RhYmxlRWxlbWVudEludGVyZmFjZSk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5jb21wb25lbnRSZWFkeSkge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVFbGVtZW50U2VsZWN0aW9uKHNlbGVjdGFibGVFbGVtZW50KTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuaGFzQ2hhbmdlc0JldHdlZW5CaW5kaW5ncyh0aGlzLnZhbHVlLCB0aGlzLnNlbGVjdGVkRWxlbWVudHMpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuc2VsZWN0ZWRFbGVtZW50cy5tYXAoZSA9PiBlLnZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBjaGFuZ2Uoc2VsZWN0ZWRFbGVtZW50czogQXJyYXk8YW55Pik6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5oYXNDaGFuZ2VzQmV0d2VlbkJpbmRpbmdzKHNlbGVjdGVkRWxlbWVudHMsIHRoaXMuc2VsZWN0ZWRFbGVtZW50cykpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGFibGVFbGVtZW50cz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5iaW5kU2VsZWN0ZWRFbGVtZW50cyhzZWxlY3RlZEVsZW1lbnRzKTtcblxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0YWJsZUVsZW1lbnRzLmZpbHRlcihlbGVtZW50ID0+IHRoaXMuaXNTZWxlY3RlZEVsZW1lbnQoZWxlbWVudCkpXG4gICAgICAgICAgICAgICAgICAgIC5mb3JFYWNoKGVsZW1lbnQgPT4gZWxlbWVudC5pc1NlbGVjdGVkID0gdHJ1ZSk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGFibGVFbGVtZW50c09uU2VhcmNoLmZpbHRlcihlbGVtZW50ID0+IHRoaXMuaXNTZWxlY3RlZEVsZW1lbnQoZWxlbWVudCkpXG4gICAgICAgICAgICAgICAgICAgIC5mb3JFYWNoKGVsZW1lbnQgPT4gZWxlbWVudC5pc1NlbGVjdGVkID0gdHJ1ZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRFbGVtZW50cyA9IHNlbGVjdGVkRWxlbWVudHM/Lm1hcChcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudCA9PiAoeyB1dWlkOiB1dWlkKCksIGlzU2VsZWN0ZWQ6IHRydWUsIHZhbHVlOiBlbGVtZW50IH0pXG4gICAgICAgICAgICAgICAgKSA/PyBbXTtcblxuICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIXNlbGVjdGVkRWxlbWVudHM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHRoaXMubWFya0FzUHJpc3RpbmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzZWFyY2godGVybTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5jb21wb25lbnRSZWFkeSB8fCB0ZXJtID09PSB1bmRlZmluZWQgfHwgdGVybSA9PT0gbnVsbCB8fCB0ZXJtID09PSB0aGlzLnByZXZpb3VzU2VhcmNoVGVybSB8fCB0aGlzLmxvYWRpbmcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnNlYXJjaFRpbWVvdXQpIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnNlYXJjaFRpbWVvdXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZWFyY2hUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnByZXZpb3VzU2VhcmNoVGVybSA9IHRlcm07XG4gICAgICAgICAgICB0aGlzLnNlbGVjdEFsbENoZWNrYm94ID0gdGhpcy5zZWxlY3RlZEVsZW1lbnRzPy5sZW5ndGggPT0gdGhpcy5zZWxlY3RhYmxlUmVzb3VyY2VzQ291bnQ7XG5cbiAgICAgICAgICAgIGlmICghdGVybSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5TZWFyY2ggPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLml0ZW1zPy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5pblNlYXJjaCA9IHRydWU7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLml0ZW1zPy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGFibGVFbGVtZW50c09uU2VhcmNoID0gdGhpcy5zZWxlY3RhYmxlRWxlbWVudHMuZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgICBpdGVtID0+IHRoaXMuZ2V0U2VsZWN0YWJsZUVsZW1lbnRWYWx1ZShpdGVtKS5pbmNsdWRlcyh0ZXJtKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZERhdGEodGhpcy5pdGVtc1BlclBhZ2UsIHRlcm0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCA1MDApO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRTZWxlY3RhYmxlRWxlbWVudHMoKTogQXJyYXk8YW55PiB7XG4gICAgICAgIGlmICh0aGlzLmluU2VhcmNoICYmIHRoaXMuaXRlbXM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0YWJsZUVsZW1lbnRzT25TZWFyY2g7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5kaXNwbGF5T25seVNlbGVjdGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZEVsZW1lbnRzO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0YWJsZUVsZW1lbnRzO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRTZWxlY3RhYmxlRWxlbWVudFZhbHVlKHNlbGVjdGFibGVJdGVtOiBhbnkpOiBzdHJpbmcge1xuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYmluZExhYmVsID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5iaW5kTGFiZWwoc2VsZWN0YWJsZUl0ZW0udmFsdWUpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBzZWxlY3RhYmxlSXRlbS52YWx1ZVsnZ2V0QXR0cmlidXRlJ10gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiBzZWxlY3RhYmxlSXRlbS52YWx1ZS5nZXRBdHRyaWJ1dGUodGhpcy5iaW5kTGFiZWwpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHNlbGVjdGFibGVJdGVtLnZhbHVlW3RoaXMuYmluZExhYmVsXTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaGFzVmFsaWRhdGlvbkVycm9ycygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybUNvbnRyb2w/LmVycm9ycyAmJiAoXG4gICAgICAgICAgICB0aGlzLmZvcm1Db250cm9sLmRpcnR5IHx8ICh0aGlzLmZvcm1Db250YWluZXIgJiYgdGhpcy5mb3JtQ29udGFpbmVyWydzdWJtaXR0ZWQnXSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2FuU2VsZWN0SXRlbShpdGVtOiBOZ3RTZWxlY3RDb250YWluZXJTZWxlY3RhYmxlRWxlbWVudEludGVyZmFjZSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gIXRoaXMuZGlzYWJsZWQoKVxuICAgICAgICAgICAgJiYgKFxuICAgICAgICAgICAgICAgIHRoaXMuYWxsb3dPcmlnaW5hbEl0ZW1zVW5zZWxlY3RcbiAgICAgICAgICAgICAgICB8fCAhdGhpcy5vcmlnaW5hbEl0ZW1zPy5zb21lKG9yaWdpbmFsSXRlbSA9PiBvcmlnaW5hbEl0ZW0udXVpZCA9PSBpdGVtLnV1aWQpXG4gICAgICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyBkaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNEaXNhYmxlZCB8fCB0aGlzLmlzRGlzYWJsZWRCeVBhcmVudCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlRWxlbWVudFNlbGVjdGlvbihzZWxlY3RhYmxlRWxlbWVudDogTmd0U2VsZWN0Q29udGFpbmVyU2VsZWN0YWJsZUVsZW1lbnRJbnRlcmZhY2UpOiB2b2lkIHtcbiAgICAgICAgaWYgKHNlbGVjdGFibGVFbGVtZW50LmlzU2VsZWN0ZWQgJiYgIXRoaXMuaXNTZWxlY3RlZEVsZW1lbnQoc2VsZWN0YWJsZUVsZW1lbnQpKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkRWxlbWVudHMucHVzaChzZWxlY3RhYmxlRWxlbWVudCk7XG4gICAgICAgIH0gZWxzZSBpZiAoIXNlbGVjdGFibGVFbGVtZW50LmlzU2VsZWN0ZWQgJiYgdGhpcy5pc1NlbGVjdGVkRWxlbWVudChzZWxlY3RhYmxlRWxlbWVudCkpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRFbGVtZW50cyA9IHRoaXMuc2VsZWN0ZWRFbGVtZW50cy5maWx0ZXIoXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRFbGVtZW50ID0+IHNlbGVjdGVkRWxlbWVudC51dWlkICE9PSBzZWxlY3RhYmxlRWxlbWVudC51dWlkXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICB0aGlzLm9uTmF0aXZlQ2hhbmdlKHNlbGVjdGFibGVFbGVtZW50KTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuZGlzcGxheU9ubHlTZWxlY3RlZCAmJiAhdGhpcy5zZWxlY3RlZEVsZW1lbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGlzcGxheU9ubHlTZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBsb2FkRGF0YShwZXJwYWdlOiBudW1iZXIgPSB0aGlzLml0ZW1zUGVyUGFnZSwgc2VhcmNoVGVybT86IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMucmVtb3RlUmVzb3VyY2UpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5sb2FkaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHBlcnBhZ2UgPT0gdGhpcy5pdGVtc1BlclBhZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250YWluZXJSZWY/Lm5hdGl2ZUVsZW1lbnQ/LnNjcm9sbFRvKHsgdG9wOiAwIH0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0YWJsZUVsZW1lbnRzID0gW107XG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLml0ZW1zUGVyUGFnZSA9IHBlcnBhZ2U7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBwYWdpbmF0aW9uOiBOZ3RIdHRwUGFnaW5hdGlvbiA9IHsgLi4udGhpcy5wYWdpbmF0aW9uLCAuLi57IHBlcl9wYWdlOiBwZXJwYWdlIH0gfTtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJzID0gc2VhcmNoVGVybSA/IHsgW3RoaXMuYmluZFNlYXJjaF06IHNlYXJjaFRlcm0gfSA6IG51bGw7XG5cbiAgICAgICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5uZ3RIdHRwU2VydmljZS5nZXQoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbW90ZVJlc291cmNlLCBmaWx0ZXJzLCBwYWdpbmF0aW9uXG4gICAgICAgICAgICAgICAgICAgICkuc3Vic2NyaWJlKFxuICAgICAgICAgICAgICAgICAgICAgICAgKHJlc3BvbnNlOiBOZ3RIdHRwUmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJpbmRTZWxlY3RhYmxlRWxlbWVudHMocmVzcG9uc2UuZGF0YSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBhZ2luYXRpb24gPSByZXNwb25zZS5tZXRhLnBhZ2luYXRpb247XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pdGVtc1RvdGFsID0gdGhpcy5wYWdpbmF0aW9uLnRvdGFsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGFibGVSZXNvdXJjZXNDb3VudCAmJiAhc2VhcmNoVGVybSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGFibGVSZXNvdXJjZXNDb3VudCA9IHRoaXMucGFnaW5hdGlvbi50b3RhbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uRGF0YUNoYW5nZS5lbWl0KHRoaXMuc2VsZWN0YWJsZUVsZW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbXBvbmVudFJlYWR5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5kaXNwbGF5T25seVNlbGVjdGVkID0gdGhpcy5kaXNhYmxlZCgpKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignVGhlIHByb3BlcnR5IFtyZW1vdGVSZXNvdXJjZV0gbmVlZHMgdG8gYmUgcHJlc2VudCB0byBiZSBhYmxlIHRvIG1ha2UgcmVtb3RlIHNlYXJjaCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGJpbmRTZWxlY3RhYmxlRWxlbWVudHMoZGF0YTogQXJyYXk8YW55Pik6IHZvaWQge1xuICAgICAgICBjb25zdCBmb3JtYXR0ZWRFbGVtZW50czogQXJyYXk8Tmd0U2VsZWN0Q29udGFpbmVyU2VsZWN0YWJsZUVsZW1lbnRJbnRlcmZhY2U+ID0gW107XG5cbiAgICAgICAgZGF0YS5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgY29uc3QgYWxyZWFkeVNlbGVjdGVkID0gdGhpcy5maW5kU2VsZWN0ZWRFbGVtZW50KGl0ZW0pO1xuXG4gICAgICAgICAgICBpZiAoYWxyZWFkeVNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgZm9ybWF0dGVkRWxlbWVudHMucHVzaChhbHJlYWR5U2VsZWN0ZWQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBmb3JtYXR0ZWRFbGVtZW50cy5wdXNoKHsgdXVpZDogdXVpZCgpLCBpc1NlbGVjdGVkOiBmYWxzZSwgdmFsdWU6IGl0ZW0gfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuc2VsZWN0YWJsZUVsZW1lbnRzID0gZm9ybWF0dGVkRWxlbWVudHM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBiaW5kU2VsZWN0ZWRFbGVtZW50cyhzZWxlY3RlZEVsZW1lbnRzOiBBcnJheTxhbnk+KTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2VsZWN0YWJsZUVsZW1lbnRzLmZvckVhY2goc2VsZWN0YWJsZUVsZW1lbnQgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc2hvdWxkQmVTZWxlY3RlZDogYm9vbGVhbiA9ICEhc2VsZWN0ZWRFbGVtZW50cz8uZmluZChcbiAgICAgICAgICAgICAgICBzZWxlY3RlZEVsZW1lbnQgPT4gdGhpcy5jb21wYXJlV2l0aChzZWxlY3RlZEVsZW1lbnQsIHNlbGVjdGFibGVFbGVtZW50LnZhbHVlKVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgaWYgKHNob3VsZEJlU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICBzZWxlY3RhYmxlRWxlbWVudC5pc1NlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUVsZW1lbnRTZWxlY3Rpb24oc2VsZWN0YWJsZUVsZW1lbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXRDb21wb25lbnRWYWxpZGF0aW9uKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5mb3JtQ29udGFpbmVyPy5jb250cm9sICYmICh0aGlzLmZvcm1Db250cm9sID0gdGhpcy5mb3JtQ29udGFpbmVyLmNvbnRyb2wuZ2V0KHRoaXMubmFtZSkpKSB7XG4gICAgICAgICAgICB0aGlzLmZvcm1Db250cm9sID0gdGhpcy5mb3JtQ29udGFpbmVyLmNvbnRyb2wuZ2V0KHRoaXMubmFtZSk7XG4gICAgICAgICAgICB0aGlzLm1hcmtBc1ByaXN0aW5lKCk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVZhbGlkYXRpb25zKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZVZhbGlkYXRpb25zKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBzeW5jVmFsaWRhdG9ycyA9IFtdO1xuXG4gICAgICAgIGlmICh0aGlzLmlzUmVxdWlyZWQpIHtcbiAgICAgICAgICAgIHN5bmNWYWxpZGF0b3JzLnB1c2godGhpcy5pc1JlcXVpcmVkVmFsaWRhdG9yKCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmZvcm1Db250cm9sLnNldFZhbGlkYXRvcnMoc3luY1ZhbGlkYXRvcnMpO1xuICAgICAgICAgICAgdGhpcy5mb3JtQ29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNSZXF1aXJlZFZhbGlkYXRvcigpOiBhbnkge1xuICAgICAgICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCkgPT4ge1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy52YWx1ZSkgJiYgdGhpcy52YWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB7ICdyZXF1aXJlZCc6IHRydWUgfTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGZpbmRTZWxlY3RlZEVsZW1lbnQoaXRlbTogYW55KTogYW55IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRFbGVtZW50cy5maW5kKHNlbGVjdGVkRWxlbWVudCA9PiB0aGlzLmNvbXBhcmVXaXRoKHNlbGVjdGVkRWxlbWVudC52YWx1ZSwgaXRlbSkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY29tcGFyZVdpdGgoYTogYW55LCBiOiBhbnkpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKHR5cGVvZiBhWydnZXRBcGlJZCddID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBiWydnZXRBcGlJZCddID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICByZXR1cm4gYS5nZXRBcGlJZCgpID09IGIuZ2V0QXBpSWQoKTtcbiAgICAgICAgfSBlbHNlIGlmIChhLmlkICYmIGIuaWQpIHtcbiAgICAgICAgICAgIHJldHVybiBhLmlkID09IGIuaWQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoYSkgPT09IEpTT04uc3RyaW5naWZ5KGIpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFzQ2hhbmdlc0JldHdlZW5CaW5kaW5ncyh2YWx1ZTogQXJyYXk8YW55PiwgbmF0aXZlVmFsdWU6IEFycmF5PGFueT4pOiBib29sZWFuIHtcbiAgICAgICAgaWYgKHZhbHVlPy5sZW5ndGggJiYgIXZhbHVlWzBdLnV1aWQpIHtcbiAgICAgICAgICAgIG5hdGl2ZVZhbHVlID0gbmF0aXZlVmFsdWUubWFwKGVsZW1lbnQgPT4gZWxlbWVudC52YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodmFsdWUpICE9PSBKU09OLnN0cmluZ2lmeShuYXRpdmVWYWx1ZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc1NlbGVjdGVkRWxlbWVudChzZWxlY3RhYmxlRWxlbWVudDogTmd0U2VsZWN0Q29udGFpbmVyU2VsZWN0YWJsZUVsZW1lbnRJbnRlcmZhY2UpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5zZWxlY3RlZEVsZW1lbnRzLmZpbmQoc2VsZWN0ZWRFbGVtZW50ID0+IHNlbGVjdGVkRWxlbWVudC51dWlkID09PSBzZWxlY3RhYmxlRWxlbWVudC51dWlkKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNhbkF1dG9TZWxlY3RVbmlxdWVPcHRpb24oKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmF1dG9TZWxlY3RVbmlxdWVPcHRpb25cbiAgICAgICAgICAgICYmICghdGhpcy52YWx1ZSB8fCAhdGhpcy52YWx1ZT8ubGVuZ3RoKVxuICAgICAgICAgICAgJiYgdGhpcy5zZWxlY3RhYmxlRWxlbWVudHM/Lmxlbmd0aCA9PSAxO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNIaWRkZW4oKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhdGhpcy5jb250YWluZXJSZWY/Lm5hdGl2ZUVsZW1lbnQub2Zmc2V0UGFyZW50O1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNDb2xvcXVlbnRSZXNvdXJjZXMoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGFibGVFbGVtZW50cz8ubGVuZ3RoICYmIHR5cGVvZiB0aGlzLnNlbGVjdGFibGVFbGVtZW50c1swXS52YWx1ZVsnZ2V0QXBpSWQnXSA9PT0gJ2Z1bmN0aW9uJztcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzRGlzYWJsZWRCeVBhcmVudCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmd0Rm9ybT8uaXNEaXNhYmxlZFxuICAgICAgICAgICAgfHwgdGhpcy5uZ3RTZWN0aW9uPy5pc0Rpc2FibGVkXG4gICAgICAgICAgICB8fCB0aGlzLm5ndE1vZGFsPy5pc0Rpc2FibGVkO1xuICAgIH1cblxuICAgIHByaXZhdGUgZGVzdHJveVN1YnNjcmlwdGlvbnMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKHN1YnNjcmlwdGlvbiA9PiBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSk7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucyA9IFtdO1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBOZ3RTZWxlY3RDb250YWluZXJTZWxlY3RhYmxlRWxlbWVudEludGVyZmFjZSB7XG4gICAgdXVpZDogc3RyaW5nO1xuICAgIGlzU2VsZWN0ZWQ6IGJvb2xlYW47XG4gICAgdmFsdWU6IGFueTtcbn1cbiIsIjxsYWJlbCAqbmdJZj1cImxhYmVsICYmICFzaGluaW5nXCIgY2xhc3M9XCJmbGV4IHRleHQteHNcIiBbY2xhc3MubWItMl09JyFoYXNWYWxpZGF0aW9uRXJyb3JzKCknPlxuICAgIDxzcGFuIGNsYXNzPVwidHJ1bmNhdGVcIiBbdGl0bGVdPVwibGFiZWxcIj5cbiAgICAgICAge3sgbGFiZWwgfX06XG4gICAgPC9zcGFuPlxuXG4gICAgPHNwYW4gKm5nSWY9XCJpc1JlcXVpcmVkXCIgY2xhc3M9XCJ0ZXh0LXJlZC01MDAgZm9udC1ib2xkIHRleHQteHMgbWwtMVwiPio8L3NwYW4+XG5cbiAgICA8bmd0LWhlbHBlciAqbmdJZj1cImhlbHBUZXh0XCIgW2hlbHBUaXRsZV09XCJoZWxwVGl0bGVcIiBbaWNvbkNvbG9yXT1cImhlbHBUZXh0Q29sb3JcIlxuICAgICAgICBbaGVscGVyUmV2ZXJzZVlQb3NpdGlvbl09XCJoZWxwZXJSZXZlcnNlWVBvc2l0aW9uXCIgW2F1dG9YUmV2ZXJzZV09XCJoZWxwZXJBdXRvWFJldmVyc2VcIiBjbGFzcz1cIm1sLTFcIj5cbiAgICAgICAge3sgaGVscFRleHQgfX1cbiAgICA8L25ndC1oZWxwZXI+XG48L2xhYmVsPlxuXG48bmd0LXZhbGlkYXRpb24gW2hpZGRlbl09J3NoaW5pbmcnIGNsYXNzPVwiYmxvY2sgbWItMVwiIFtjb250cm9sXT0nZm9ybUNvbnRyb2wnIFtjb250YWluZXJdPSdmb3JtQ29udGFpbmVyJz5cbjwvbmd0LXZhbGlkYXRpb24+XG5cbjxkaXYgY2xhc3M9XCJ7eyBzaGluaW5nID8gJ2hpZGRlbicgOiAnZmxleCBmbGV4LWNvbCcgfX0gYm9yZGVyIHctZnVsbCByb3VuZGVkIHt7IG5ndFN0eWxlLmNvbXBpbGUoWydoJ10pIH19XCJcbiAgICBzdHlsZT1cIm1pbi1oZWlnaHQ6IDEzcmVtO1wiIFtjbGFzcy5ib3JkZXItcmVkLTUwMF09J2hhc1ZhbGlkYXRpb25FcnJvcnMoKScgW2NsYXNzLmRpc2FibGVkLWJhY2tncm91bmRdPSdkaXNhYmxlZCgpJz5cbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgdy1mdWxsIHAtMiBib3JkZXItYlwiPlxuICAgICAgICA8bmd0LWNoZWNrYm94ICpuZ0lmPVwiYWxsb3dTZWxlY3RBbGxcIiBjbGFzcz1cImZsZXhcIiB0aXRsZT1cIlNlbGVjaW9uYXIgdG9kb3NcIiBbaXNEaXNhYmxlZF09J2xvYWRpbmcgfHwgZGlzYWJsZWQoKSdcbiAgICAgICAgICAgIFtsYWJlbF09XCIhc2VhcmNoYWJsZSA/ICdTZWxlY2lvbmFyIHRvZG9zJyA6ICcnXCIgWyhuZ01vZGVsKV09XCJzZWxlY3RBbGxDaGVja2JveFwiXG4gICAgICAgICAgICBbbmFtZV09XCJzZWxlY3RBbGxDaGVja2JveE5hbWVcIiBbaXNDbGlja0Rpc2FibGVkXT0ndHJ1ZScgaD0naC00JyB3PSd3LTQnIChjbGljayk9J3NlbGVjdEFsbCgpJ1xuICAgICAgICAgICAgbmd0LXN0eWxpemFibGU+XG4gICAgICAgIDwvbmd0LWNoZWNrYm94PlxuXG4gICAgICAgIDxuZ3QtaW5wdXQgKm5nSWY9XCJzZWFyY2hhYmxlXCIgY2xhc3M9XCJibG9jayB3LWZ1bGxcIiBbY2xhc3MucGwtMl09XCJhbGxvd1NlbGVjdEFsbFwiIFtuYW1lXT0nc2VhcmNoSW5wdXROYW1lJ1xuICAgICAgICAgICAgWyhuZ01vZGVsKV09J3NlYXJjaFRlcm0nIHBsYWNlaG9sZGVyPSdCdXNjYXIuLi4nIFthbGxvd0NsZWFyXT0ndHJ1ZScgW2ppdF09J3RydWUnIGg9J2gtMTAnXG4gICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9J3NlYXJjaCgkZXZlbnQpJyBbbG9hZGluZ109J2xvYWRpbmcnIFtpc0Rpc2FibGVkXT0nZGlzYWJsZWQoKScgbmd0LXN0eWxpemFibGUgI2lucHV0U2VhcmNoPlxuICAgICAgICA8L25ndC1pbnB1dD5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgKm5nSWY9XCJsb2FkaW5nXCIgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGdhcC0zIHB4LTMgaC1mdWxsIHctZnVsbCBjdXJzb3Itd2FpdFwiPlxuICAgICAgICA8bmd0LXNoaW5pbmcgY2xhc3M9XCJoLTEwIHctZnVsbFwiPjwvbmd0LXNoaW5pbmc+XG4gICAgICAgIDxuZ3Qtc2hpbmluZyBjbGFzcz1cImgtMTAgdy1mdWxsXCI+PC9uZ3Qtc2hpbmluZz5cbiAgICAgICAgPG5ndC1zaGluaW5nIGNsYXNzPVwiaC0xMCB3LWZ1bGxcIj48L25ndC1zaGluaW5nPlxuICAgICAgICA8bmd0LXNoaW5pbmcgY2xhc3M9XCJoLTEwIHctZnVsbFwiPjwvbmd0LXNoaW5pbmc+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwidy1mdWxsIG92ZXJmbG93LXktYXV0byB0ZXh0LXhzIHt7IGxvYWRpbmcgPyAnaGlkZGVuJyA6ICdmbGV4IGZsZXgtY29sJyB9fVwiIChzY3JvbGwpPSdvblNjcm9sbCgkZXZlbnQpJ1xuICAgICAgICAjY29udGFpbmVyUmVmPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY3VzdG9tSGVhZGVyVGVtcGxhdGVcIiBbbmdUZW1wbGF0ZU91dGxldF09XCJjdXN0b21IZWFkZXJUZW1wbGF0ZVwiPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBlbGVtZW50IG9mIGdldFNlbGVjdGFibGVFbGVtZW50cygpOyBsZXQgaSA9IGluZGV4XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCB3LWZ1bGwgaXRlbXMtY2VudGVyIGhvdmVyOmJnLWdyYXktMjAwIHt7IGRpc2FibGVkKCkgPyAnY3Vyc29yLW5vdC1hbGxvd2VkJyA6ICdjdXJzb3ItcG9pbnRlcicgfX1cIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5wLTJdPSchY3VzdG9tT3B0aW9uVGVtcGxhdGUnIChjbGljayk9J3RvZ2dsZUl0ZW0oZWxlbWVudCwgJGV2ZW50KSc+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGxldC1lbGVtZW50ICNlbGVtZW50Q2hlY2tib3hUZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgPG5ndC1jaGVja2JveCBjbGFzcz1cImZsZXggcHItMlwiIFtuYW1lXT0nZWxlbWVudC51dWlkJyBbKG5nTW9kZWwpXT1cImVsZW1lbnQuaXNTZWxlY3RlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9J29uTmF0aXZlQ2hhbmdlKGVsZW1lbnQpJyBbaXNDbGlja0Rpc2FibGVkXT0ndHJ1ZSdcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpc0Rpc2FibGVkXT0nIWNhblNlbGVjdEl0ZW0oZWxlbWVudCknIGg9J2gtNScgdz0ndy01JyAoY2xpY2spPSd0b2dnbGVJdGVtKGVsZW1lbnQsICRldmVudCknXG4gICAgICAgICAgICAgICAgICAgICAgICBuZ3Qtc3R5bGl6YWJsZT5cbiAgICAgICAgICAgICAgICAgICAgPC9uZ3QtY2hlY2tib3g+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBsZXQtZWxlbWVudCAjZGVmYXVsdE9wdGlvblRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICB7eyBnZXRTZWxlY3RhYmxlRWxlbWVudFZhbHVlKGVsZW1lbnQpIH19XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhY3VzdG9tT3B0aW9uVGVtcGxhdGVcIiBbbmdUZW1wbGF0ZU91dGxldF09XCJlbGVtZW50Q2hlY2tib3hUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogZWxlbWVudCB9XCI+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImN1c3RvbU9wdGlvblRlbXBsYXRlIHx8IGRlZmF1bHRPcHRpb25UZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogZWxlbWVudCwgaW5kZXg6IGkgfVwiPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxwICpuZ0lmPVwiIWdldFNlbGVjdGFibGVFbGVtZW50cygpPy5sZW5ndGhcIiBjbGFzcz1cInRleHQtY2VudGVyIG10LTRcIj5cbiAgICAgICAgICAgIHt7IG5ndFRyYW5zbGF0ZVNlcnZpY2Uubmd0TXVsdGlTZWxlY3ROb0RhdGFGb3VuZCB9fVxuICAgICAgICA8L3A+XG4gICAgPC9kaXY+XG48L2Rpdj5cblxuPGRpdiBjbGFzcz1cInt7IHNoaW5pbmcgPyAnaGlkZGVuJyA6ICdmbGV4JyB9fSB3LWZ1bGwgaXRlbXMtY2VudGVyIG10LTJcIj5cbiAgICA8c3BhbiBjbGFzcz1cInRleHQteHMgbXItNFwiPlxuICAgICAgICB7eyBzZWxlY3RlZEVsZW1lbnRzPy5sZW5ndGggfHwgMCB9fSAvIHt7IGl0ZW1zVG90YWwgfHwgMCB9fVxuICAgIDwvc3Bhbj5cblxuICAgIDxuZ3QtY2hlY2tib3ggY2xhc3M9XCJmbGV4XCIgbGFiZWw9XCJWaXN1YWxpemFyIHNlbGVjaW9uYWRvc1wiIFtuYW1lXT0nZGlzcGxheU9ubHlTZWxlY3RlZE5hbWUnXG4gICAgICAgIFsobmdNb2RlbCldPVwiZGlzcGxheU9ubHlTZWxlY3RlZFwiIFtpc0Rpc2FibGVkXT0nbG9hZGluZyB8fCBkaXNhYmxlZCgpJyBoPSdoLTUnIHc9J3ctNScgbmd0LXN0eWxpemFibGU+XG4gICAgPC9uZ3QtY2hlY2tib3g+XG48L2Rpdj5cblxuPG5ndC1zaGluaW5nICpuZ0lmPSdzaGluaW5nJyBjbGFzcz1cImJsb2NrIHctZnVsbCB7eyBuZ3RTdHlsZS5jb21waWxlKFsnaCddKSB9fVwiIHN0eWxlPVwibWluLWhlaWdodDogMTZyZW07XCJcbiAgICByb3VuZGVkPSdyb3VuZGVkJyBuZ3Qtc3R5bGl6YWJsZT5cbjwvbmd0LXNoaW5pbmc+XG5cbjxpbnB1dCAqbmdJZj0nY29tcG9uZW50UmVhZHknIHR5cGU9J2hpZGRlbicgW25nTW9kZWxdPSd2YWx1ZScgW25hbWVdPSduYW1lJyBbdmFsdWVdPSd2YWx1ZSc+Il19
|