desy-angular 12.1.0 → 13.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/desy-angular.module.mjs +10 -9
- package/esm2022/lib/desy-buttons/components/button-loader/button-loader.component.mjs +1 -1
- package/esm2022/lib/desy-buttons/desy-buttons.module.mjs +15 -15
- package/esm2022/lib/desy-forms/components/date-input/date-input.component.mjs +3 -3
- package/esm2022/lib/desy-forms/components/datepicker/datepicker.component.mjs +190 -0
- package/esm2022/lib/desy-forms/components/datepicker/datepicker.pipe.mjs +34 -0
- package/esm2022/lib/desy-forms/components/tree/tree.component.mjs +10 -8
- package/esm2022/lib/desy-forms/desy-forms.module.mjs +40 -24
- package/esm2022/lib/desy-nav/components/breadcrumbs/breadcrumbs.component.mjs +3 -3
- package/esm2022/lib/desy-nav/components/footer/footer-navigation/footer-navigation.component.mjs +4 -2
- package/esm2022/lib/desy-nav/components/footer/footer.component.mjs +3 -3
- package/esm2022/lib/desy-nav/components/header/header.component.mjs +3 -3
- package/esm2022/lib/desy-nav/components/header-advanced/header-advanced-sub/header-advanced-sub.component.mjs +3 -3
- package/esm2022/lib/desy-nav/components/header-advanced/header-advanced-super/header-advanced-super.component.mjs +3 -3
- package/esm2022/lib/desy-nav/components/header-mini/header-mini.component.mjs +3 -3
- package/esm2022/lib/desy-nav/components/links-list/links-list-icon-right/links-list-icon-right.component.mjs +16 -0
- package/esm2022/lib/desy-nav/components/links-list/links-list-item/links-list-item.component.mjs +6 -2
- package/esm2022/lib/desy-nav/components/links-list/links-list.component.mjs +5 -3
- package/esm2022/lib/desy-nav/components/menu-horizontal/menu-horizontal.component.mjs +3 -3
- package/esm2022/lib/desy-nav/components/menu-navigation/menu-navigation.component.mjs +3 -3
- package/esm2022/lib/desy-nav/components/menu-vertical/menu-vertical.component.mjs +3 -3
- package/esm2022/lib/desy-nav/components/nav/nav.component.mjs +3 -3
- package/esm2022/lib/desy-nav/components/notification/notification.component.mjs +3 -3
- package/esm2022/lib/desy-nav/components/skip-link/skip-link.component.mjs +5 -1
- package/esm2022/lib/desy-nav/desy-nav.module.mjs +6 -5
- package/esm2022/lib/desy-nav/interfaces/footer-logo.mjs +2 -1
- package/esm2022/lib/desy-pagination/components/pagination/pagination.component.mjs +18 -19
- package/esm2022/lib/desy-pagination/components/pagination-item-perpage/pagination-item-perpage.component.mjs +2 -2
- package/esm2022/lib/desy-pagination/desy-pagination.module.mjs +16 -8
- package/esm2022/lib/desy-tables/components/table/table.component.mjs +24 -4
- package/esm2022/lib/desy-tables/components/table-advanced/table-advanced.component.mjs +9 -10
- package/esm2022/lib/desy-tables/directives/focus-clicked-cell.directive.mjs +1 -5
- package/esm2022/lib/desy-views/components/collapsible/collapsible.component.mjs +11 -3
- package/esm2022/lib/desy-views/desy-views.module.mjs +27 -32
- package/esm2022/lib/shared/components/index.mjs +4 -3
- package/esm2022/lib/{desy-views → shared}/components/spinner/spinner.component.mjs +2 -2
- package/esm2022/lib/shared/directives/custom-inner-content.directive.mjs +21 -4
- package/esm2022/lib/shared/sharedExternal.module.mjs +24 -0
- package/esm2022/public-api.mjs +5 -2
- package/fesm2022/desy-angular.mjs +1128 -819
- package/fesm2022/desy-angular.mjs.map +1 -1
- package/lib/desy-angular.module.d.ts +2 -1
- package/lib/desy-buttons/desy-buttons.module.d.ts +3 -3
- package/lib/desy-forms/components/datepicker/datepicker.component.d.ts +31 -0
- package/lib/desy-forms/components/datepicker/datepicker.pipe.d.ts +7 -0
- package/lib/desy-forms/components/tree/tree.component.d.ts +5 -4
- package/lib/desy-forms/desy-forms.module.d.ts +10 -6
- package/lib/desy-nav/components/footer/footer-navigation/footer-navigation.component.d.ts +2 -1
- package/lib/desy-nav/components/header-advanced/header-advanced-sub/header-advanced-sub.component.d.ts +1 -1
- package/lib/desy-nav/components/header-advanced/header-advanced-super/header-advanced-super.component.d.ts +1 -1
- package/lib/desy-nav/components/header-mini/header-mini.component.d.ts +1 -1
- package/lib/desy-nav/components/links-list/links-list-icon-right/links-list-icon-right.component.d.ts +8 -0
- package/lib/desy-nav/components/links-list/links-list-item/links-list-item.component.d.ts +3 -1
- package/lib/desy-nav/components/links-list/links-list.component.d.ts +2 -1
- package/lib/desy-nav/desy-nav.module.d.ts +29 -28
- package/lib/desy-nav/interfaces/footer-logo.d.ts +1 -0
- package/lib/desy-pagination/components/pagination/pagination.component.d.ts +3 -3
- package/lib/desy-pagination/components/pagination-item-perpage/pagination-item-perpage.component.d.ts +3 -3
- package/lib/desy-pagination/desy-pagination.module.d.ts +3 -1
- package/lib/desy-tables/components/table/table.component.d.ts +3 -0
- package/lib/desy-tables/components/table-advanced/table-advanced.component.d.ts +1 -1
- package/lib/desy-views/components/collapsible/collapsible.component.d.ts +5 -1
- package/lib/desy-views/desy-views.module.d.ts +30 -31
- package/lib/shared/components/index.d.ts +3 -2
- package/lib/{desy-views → shared}/components/spinner/spinner.component.d.ts +1 -1
- package/lib/shared/directives/custom-inner-content.directive.d.ts +3 -2
- package/lib/shared/sharedExternal.module.d.ts +8 -0
- package/package.json +2 -2
- package/public-api.d.ts +4 -1
- package/esm2022/lib/desy-pagination/interfaces/index.mjs +0 -2
- package/lib/desy-pagination/interfaces/index.d.ts +0 -1
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
import { __decorate, __metadata } from "tslib";
|
|
2
|
+
import { Component, ContentChildren, ElementRef, forwardRef, Input, ViewChild } from '@angular/core';
|
|
3
|
+
import { NG_VALUE_ACCESSOR } from '@angular/forms';
|
|
4
|
+
import { DesyContentChild } from '../../../shared/decorators/desy-content-child.decorator';
|
|
5
|
+
import { ErrorMessageComponent } from '../error-message/error-message.component';
|
|
6
|
+
import { FormFieldComponent } from '../form-field/form-field.component';
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
import * as i1 from "@angular/common";
|
|
9
|
+
import * as i2 from "../../../shared/directives/accessibility-directive";
|
|
10
|
+
import * as i3 from "../../../desy-commons/components/content/content.component";
|
|
11
|
+
import * as i4 from "../../../desy-buttons/components/button/button.component";
|
|
12
|
+
import * as i5 from "../../../desy-buttons/components/dropdown/dropdown.component";
|
|
13
|
+
export class DatepickerComponent extends FormFieldComponent {
|
|
14
|
+
constructor() {
|
|
15
|
+
super();
|
|
16
|
+
this.standalone = false;
|
|
17
|
+
}
|
|
18
|
+
ngAfterViewInit() {
|
|
19
|
+
const inputElement = this.calendar.nativeElement.getElementsByTagName('input')[0];
|
|
20
|
+
if (inputElement && !this.standalone) {
|
|
21
|
+
const dropdownId = inputElement.getAttribute('id');
|
|
22
|
+
const datepickerDropdown = inputElement.parentNode.querySelector('desy-dropdown button');
|
|
23
|
+
let isOpen = false;
|
|
24
|
+
const focusCalendar = () => {
|
|
25
|
+
const inputInitialValue = inputElement.value;
|
|
26
|
+
requestAnimationFrame(() => {
|
|
27
|
+
const datepickerSelect = this.calendar.nativeElement.querySelector(':is(select)');
|
|
28
|
+
const datepickerCalendar = this.calendar.nativeElement.querySelector(':is(calendar-date, calendar-multi, calendar-range)');
|
|
29
|
+
const datepickerInitialValue = datepickerCalendar?.value;
|
|
30
|
+
if (this.value && datepickerCalendar) {
|
|
31
|
+
console.log(datepickerCalendar);
|
|
32
|
+
datepickerCalendar.value = this.value;
|
|
33
|
+
inputElement.value = this.value;
|
|
34
|
+
datepickerCalendar.focus();
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
this.value = datepickerInitialValue;
|
|
38
|
+
inputElement.value = this.value;
|
|
39
|
+
this.onChange(this.value);
|
|
40
|
+
}
|
|
41
|
+
if (datepickerSelect) {
|
|
42
|
+
datepickerSelect.addEventListener('change', function () {
|
|
43
|
+
const selectedValue = this.value;
|
|
44
|
+
datepickerCalendar.min = selectedValue + "-01-01";
|
|
45
|
+
datepickerCalendar.max = selectedValue + "-31-12";
|
|
46
|
+
datepickerCalendar.focusedDate = datepickerCalendar.min;
|
|
47
|
+
});
|
|
48
|
+
datepickerSelect.focus();
|
|
49
|
+
}
|
|
50
|
+
const datepickerCancel = this.calendar.nativeElement.querySelector('#' + dropdownId + '-cancel');
|
|
51
|
+
const datepickerSubmit = this.calendar.nativeElement.querySelector('#' + dropdownId + '-submit');
|
|
52
|
+
if (datepickerCancel) {
|
|
53
|
+
datepickerCancel.onclick = () => {
|
|
54
|
+
inputElement.value = inputInitialValue;
|
|
55
|
+
datepickerCalendar.tentative = "";
|
|
56
|
+
datepickerCalendar.value = datepickerInitialValue;
|
|
57
|
+
closeDropdown();
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
if (datepickerSubmit) {
|
|
61
|
+
datepickerSubmit.onclick = () => {
|
|
62
|
+
this.value = datepickerCalendar?.value;
|
|
63
|
+
inputElement.value = this.value;
|
|
64
|
+
this.onChange(this.value);
|
|
65
|
+
closeDropdown();
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
};
|
|
70
|
+
const closeDropdown = () => {
|
|
71
|
+
setTimeout(() => {
|
|
72
|
+
isOpen = false;
|
|
73
|
+
inputElement.focus();
|
|
74
|
+
}, 300);
|
|
75
|
+
};
|
|
76
|
+
const observer = new MutationObserver((mutations) => {
|
|
77
|
+
mutations.forEach((mutation) => {
|
|
78
|
+
if (mutation.type === 'attributes' && mutation.attributeName === 'aria-expanded') {
|
|
79
|
+
const currentExpandedValue = mutation.target.getAttribute('aria-expanded');
|
|
80
|
+
if (currentExpandedValue !== isOpen.toString()) {
|
|
81
|
+
const datepickerTimeout = setTimeout(focusCalendar, 0);
|
|
82
|
+
isOpen = currentExpandedValue === 'true';
|
|
83
|
+
if (!isOpen) {
|
|
84
|
+
clearTimeout(datepickerTimeout);
|
|
85
|
+
closeDropdown();
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
});
|
|
91
|
+
observer.observe(datepickerDropdown, { attributes: true, attributeFilter: ['aria-expanded'] });
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
const datepickerSelect = this.calendar.nativeElement.querySelector(':is(select)');
|
|
95
|
+
const datepickerCalendar = this.calendar.nativeElement.querySelector(':is(calendar-date, calendar-multi, calendar-range)');
|
|
96
|
+
if (datepickerSelect) {
|
|
97
|
+
datepickerSelect.addEventListener('change', function () {
|
|
98
|
+
const selectedValue = this.value;
|
|
99
|
+
datepickerCalendar.min = selectedValue + "-01-01";
|
|
100
|
+
datepickerCalendar.max = selectedValue + "-31-12";
|
|
101
|
+
datepickerCalendar.focusedDate = datepickerCalendar.min;
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
onInput(event) {
|
|
107
|
+
this.value = event.target.value;
|
|
108
|
+
this.onChange(this.value);
|
|
109
|
+
}
|
|
110
|
+
ngDoCheck() {
|
|
111
|
+
if (this.attributes) {
|
|
112
|
+
this.setAttributes();
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
setAttributes() {
|
|
116
|
+
const input = this.calendar.nativeElement.getElementsByTagName('input')[0];
|
|
117
|
+
const attr = this.attributes;
|
|
118
|
+
Object.keys(attr).forEach(key => {
|
|
119
|
+
input?.setAttribute(key, attr[key]);
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
writeValue(value) {
|
|
123
|
+
if (value) {
|
|
124
|
+
this.value = value || '';
|
|
125
|
+
}
|
|
126
|
+
else {
|
|
127
|
+
this.value = '';
|
|
128
|
+
}
|
|
129
|
+
this.onChange(this.value);
|
|
130
|
+
}
|
|
131
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DatepickerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
132
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: DatepickerComponent, selector: "desy-datepicker", inputs: { containerClasses: "containerClasses", standalone: "standalone", formGroupClasses: "formGroupClasses", id: "id", name: "name", type: "type", inputmode: "inputmode", describedBy: "describedBy", errorId: "errorId", classes: "classes", autocomplete: "autocomplete", pattern: "pattern", placeholder: "placeholder", attributes: "attributes", dropdownClasses: "dropdownClasses" }, providers: [
|
|
133
|
+
{
|
|
134
|
+
provide: NG_VALUE_ACCESSOR,
|
|
135
|
+
useExisting: forwardRef(() => DatepickerComponent),
|
|
136
|
+
multi: true
|
|
137
|
+
}
|
|
138
|
+
], queries: [{ propertyName: "errorMessage", predicate: ErrorMessageComponent }], viewQueries: [{ propertyName: "calendar", first: true, predicate: ["calendar"], descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "<div #calendar\n class=\"c-datepicker\"\n [ngClass]=\"containerClasses\"\n [desyAppAccessibility]=\"this\">\n <ng-container *ngIf=\"standalone\">\n <ng-container *ngTemplateOutlet=\"calendarContent\"></ng-container>\n </ng-container>\n <div *ngIf=\"!standalone\"\n class=\"c-form-group\"\n [ngClass]=\"formGroupClasses\">\n <ng-content select=\"desy-label\"></ng-content>\n <ng-content select=\"desy-hint\"></ng-content> \n <ng-content select=\"desy-error-message\"></ng-content>\n\n <div class=\"relative \">\n <input class=\"c-input block mt-sm border-black rounded font-semibold placeholder-neutral-dark focus:border-black focus:shadow-outline-focus-input focus:ring-4 focus:ring-warning-base disabled:bg-neutral-light disabled:border-neutral-base pr-16 w-full\"\n [ngClass]=\"{'border-alert-base ring-2 ring-alert-base': errorMessage}\"\n [attr.id]=\"id\"\n [attr.name]=\"name\"\n [type]=\"type || 'text'\"\n [attr.value]=\"value\"\n [attr.aria-describedby]=\"describedBy || (errorMessage || errorId ? errorId : null)\"\n [attr.aria-errormessage]=\"errorMessage || errorId ? errorId : null\"\n [attr.aria-invalid]=\"errorMessage || errorId ? 'true' : null\"\n [attr.autocomplete]=\"autocomplete\"\n [attr.pattern]=\"pattern\"\n [attr.inputmode]=\"inputmode\"\n (input)=\"onInput($event)\"\n [attr.placeholder]=\"placeholder\"\n [disabled]=\"disabled\" />\n\n\n <div class=\"absolute top-0 right-0\">\n <desy-dropdown [classes]=\"dropdownClasses ? dropdownClasses : 'c-dropdown--transparent'\"\n [disabled]=\"disabled\"\n (blur)=\"onBlur($event)\"\n [id]=\"id+'-dropdown'\">\n <span class=\"sr-only\">Seleccionar fecha con una tabla de calendario</span><svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 14 14\"\n width=\"1.375em\"\n height=\"1.375em\"\n aria-hidden=\"true\">\n <g>\n <path fill=\"currentColor\"\n fill-rule=\"evenodd\"\n d=\"M4.5 1.5c0 -0.552285 -0.44772 -1 -1 -1s-1 0.447715 -1 1v1H2C1.17157 2.5 0.5 3.17157 0.5 4v8c0 0.8284 0.67157 1.5 1.5 1.5h10c0.8284 0 1.5 -0.6716 1.5 -1.5V4c0 -0.82843 -0.6716 -1.5 -1.5 -1.5h-0.5v-1c0 -0.552285 -0.4477 -1 -1 -1 -0.55229 0 -1 0.447715 -1 1v1h-5v-1Zm-1 5.75c0.55228 0 1 -0.44772 1 -1s-0.44772 -1 -1 -1 -1 0.44772 -1 1 0.44772 1 1 1Zm3.5 0c0.55228 0 1 -0.44772 1 -1s-0.44772 -1 -1 -1 -1 0.44772 -1 1 0.44772 1 1 1Zm-2.5 3c0 0.5523 -0.44772 1 -1 1s-1 -0.4477 -1 -1c0 -0.55229 0.44772 -1 1 -1s1 0.44771 1 1Zm2.5 1c0.55228 0 1 -0.4477 1 -1 0 -0.55229 -0.44772 -1 -1 -1s-1 0.44771 -1 1c0 0.5523 0.44772 1 1 1Zm4.5 -5c0 0.55228 -0.4477 1 -1 1 -0.55229 0 -1 -0.44772 -1 -1s0.44771 -1 1 -1c0.5523 0 1 0.44772 1 1Z\"\n clip-rule=\"evenodd\"\n stroke-width=\"1\"></path>\n </g>\n </svg>\n <desy-content>\n <ng-container *ngTemplateOutlet=\"calendarContent\"></ng-container>\n <ul class=\"flex flex-wrap justify-between gap-sm p-sm\">\n <li>\n <desy-button [id]=\"id + '-submit'\"\n classes=\"c-button--primary c-button--sm\">\n Aceptar\n </desy-button>\n </li>\n <li>\n <desy-button [id]=\"id + '-cancel'\"\n classes=\"c-button--sm\">\n Cancelar\n </desy-button>\n </li>\n </ul>\n </desy-content>\n </desy-dropdown>\n </div>\n </div>\n </div>\n</div>\n\n<ng-template #calendarContent>\n <div class=\"p-sm overflow-x-auto\">\n <ng-content></ng-content>\n </div>\n</ng-template>", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.AccessibilityDirective, selector: "[desyAppAccessibility]", inputs: ["desyAppAccessibility"] }, { kind: "component", type: i3.ContentComponent, selector: "desy-content", inputs: ["classes"] }, { kind: "component", type: i4.ButtonComponent, selector: "desy-button", inputs: ["id", "classes", "html", "text", "element", "name", "type", "value", "disabled", "href", "target", "preventDoubleClick", "fragment", "routerLink", "routerLinkActiveClasses"], outputs: ["clickEvent"] }, { kind: "component", type: i5.DropdownComponent, selector: "desy-dropdown", inputs: ["id", "disabled", "hiddenText", "classesContainer", "classesTooltip", "caller", "classes"], outputs: ["clickEvent"] }] }); }
|
|
139
|
+
}
|
|
140
|
+
__decorate([
|
|
141
|
+
DesyContentChild(),
|
|
142
|
+
__metadata("design:type", ErrorMessageComponent)
|
|
143
|
+
], DatepickerComponent.prototype, "errorMessage", void 0);
|
|
144
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DatepickerComponent, decorators: [{
|
|
145
|
+
type: Component,
|
|
146
|
+
args: [{ selector: 'desy-datepicker', providers: [
|
|
147
|
+
{
|
|
148
|
+
provide: NG_VALUE_ACCESSOR,
|
|
149
|
+
useExisting: forwardRef(() => DatepickerComponent),
|
|
150
|
+
multi: true
|
|
151
|
+
}
|
|
152
|
+
], template: "<div #calendar\n class=\"c-datepicker\"\n [ngClass]=\"containerClasses\"\n [desyAppAccessibility]=\"this\">\n <ng-container *ngIf=\"standalone\">\n <ng-container *ngTemplateOutlet=\"calendarContent\"></ng-container>\n </ng-container>\n <div *ngIf=\"!standalone\"\n class=\"c-form-group\"\n [ngClass]=\"formGroupClasses\">\n <ng-content select=\"desy-label\"></ng-content>\n <ng-content select=\"desy-hint\"></ng-content> \n <ng-content select=\"desy-error-message\"></ng-content>\n\n <div class=\"relative \">\n <input class=\"c-input block mt-sm border-black rounded font-semibold placeholder-neutral-dark focus:border-black focus:shadow-outline-focus-input focus:ring-4 focus:ring-warning-base disabled:bg-neutral-light disabled:border-neutral-base pr-16 w-full\"\n [ngClass]=\"{'border-alert-base ring-2 ring-alert-base': errorMessage}\"\n [attr.id]=\"id\"\n [attr.name]=\"name\"\n [type]=\"type || 'text'\"\n [attr.value]=\"value\"\n [attr.aria-describedby]=\"describedBy || (errorMessage || errorId ? errorId : null)\"\n [attr.aria-errormessage]=\"errorMessage || errorId ? errorId : null\"\n [attr.aria-invalid]=\"errorMessage || errorId ? 'true' : null\"\n [attr.autocomplete]=\"autocomplete\"\n [attr.pattern]=\"pattern\"\n [attr.inputmode]=\"inputmode\"\n (input)=\"onInput($event)\"\n [attr.placeholder]=\"placeholder\"\n [disabled]=\"disabled\" />\n\n\n <div class=\"absolute top-0 right-0\">\n <desy-dropdown [classes]=\"dropdownClasses ? dropdownClasses : 'c-dropdown--transparent'\"\n [disabled]=\"disabled\"\n (blur)=\"onBlur($event)\"\n [id]=\"id+'-dropdown'\">\n <span class=\"sr-only\">Seleccionar fecha con una tabla de calendario</span><svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 14 14\"\n width=\"1.375em\"\n height=\"1.375em\"\n aria-hidden=\"true\">\n <g>\n <path fill=\"currentColor\"\n fill-rule=\"evenodd\"\n d=\"M4.5 1.5c0 -0.552285 -0.44772 -1 -1 -1s-1 0.447715 -1 1v1H2C1.17157 2.5 0.5 3.17157 0.5 4v8c0 0.8284 0.67157 1.5 1.5 1.5h10c0.8284 0 1.5 -0.6716 1.5 -1.5V4c0 -0.82843 -0.6716 -1.5 -1.5 -1.5h-0.5v-1c0 -0.552285 -0.4477 -1 -1 -1 -0.55229 0 -1 0.447715 -1 1v1h-5v-1Zm-1 5.75c0.55228 0 1 -0.44772 1 -1s-0.44772 -1 -1 -1 -1 0.44772 -1 1 0.44772 1 1 1Zm3.5 0c0.55228 0 1 -0.44772 1 -1s-0.44772 -1 -1 -1 -1 0.44772 -1 1 0.44772 1 1 1Zm-2.5 3c0 0.5523 -0.44772 1 -1 1s-1 -0.4477 -1 -1c0 -0.55229 0.44772 -1 1 -1s1 0.44771 1 1Zm2.5 1c0.55228 0 1 -0.4477 1 -1 0 -0.55229 -0.44772 -1 -1 -1s-1 0.44771 -1 1c0 0.5523 0.44772 1 1 1Zm4.5 -5c0 0.55228 -0.4477 1 -1 1 -0.55229 0 -1 -0.44772 -1 -1s0.44771 -1 1 -1c0.5523 0 1 0.44772 1 1Z\"\n clip-rule=\"evenodd\"\n stroke-width=\"1\"></path>\n </g>\n </svg>\n <desy-content>\n <ng-container *ngTemplateOutlet=\"calendarContent\"></ng-container>\n <ul class=\"flex flex-wrap justify-between gap-sm p-sm\">\n <li>\n <desy-button [id]=\"id + '-submit'\"\n classes=\"c-button--primary c-button--sm\">\n Aceptar\n </desy-button>\n </li>\n <li>\n <desy-button [id]=\"id + '-cancel'\"\n classes=\"c-button--sm\">\n Cancelar\n </desy-button>\n </li>\n </ul>\n </desy-content>\n </desy-dropdown>\n </div>\n </div>\n </div>\n</div>\n\n<ng-template #calendarContent>\n <div class=\"p-sm overflow-x-auto\">\n <ng-content></ng-content>\n </div>\n</ng-template>" }]
|
|
153
|
+
}], ctorParameters: function () { return []; }, propDecorators: { containerClasses: [{
|
|
154
|
+
type: Input
|
|
155
|
+
}], standalone: [{
|
|
156
|
+
type: Input
|
|
157
|
+
}], formGroupClasses: [{
|
|
158
|
+
type: Input
|
|
159
|
+
}], id: [{
|
|
160
|
+
type: Input
|
|
161
|
+
}], name: [{
|
|
162
|
+
type: Input
|
|
163
|
+
}], type: [{
|
|
164
|
+
type: Input
|
|
165
|
+
}], inputmode: [{
|
|
166
|
+
type: Input
|
|
167
|
+
}], describedBy: [{
|
|
168
|
+
type: Input
|
|
169
|
+
}], errorId: [{
|
|
170
|
+
type: Input
|
|
171
|
+
}], classes: [{
|
|
172
|
+
type: Input
|
|
173
|
+
}], autocomplete: [{
|
|
174
|
+
type: Input
|
|
175
|
+
}], pattern: [{
|
|
176
|
+
type: Input
|
|
177
|
+
}], placeholder: [{
|
|
178
|
+
type: Input
|
|
179
|
+
}], attributes: [{
|
|
180
|
+
type: Input
|
|
181
|
+
}], dropdownClasses: [{
|
|
182
|
+
type: Input
|
|
183
|
+
}], calendar: [{
|
|
184
|
+
type: ViewChild,
|
|
185
|
+
args: ['calendar', { static: true }]
|
|
186
|
+
}], errorMessage: [{
|
|
187
|
+
type: ContentChildren,
|
|
188
|
+
args: [ErrorMessageComponent]
|
|
189
|
+
}] } });
|
|
190
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kZXN5LWFuZ3VsYXIvc3JjL2xpYi9kZXN5LWZvcm1zL2NvbXBvbmVudHMvZGF0ZXBpY2tlci9kYXRlcGlja2VyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rlc3ktYW5ndWxhci9zcmMvbGliL2Rlc3ktZm9ybXMvY29tcG9uZW50cy9kYXRlcGlja2VyL2RhdGVwaWNrZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFFTCxTQUFTLEVBQ1QsZUFBZSxFQUVmLFVBQVUsRUFDVixVQUFVLEVBQ1YsS0FBSyxFQUNMLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx5REFBeUQsQ0FBQztBQUMzRixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUNqRixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQzs7Ozs7OztBQWF4RSxNQUFNLE9BQU8sbUJBQW9CLFNBQVEsa0JBQXVCO0lBdUI5RDtRQUFnQixLQUFLLEVBQUUsQ0FBQTtRQXBCZCxlQUFVLEdBQVksS0FBSyxDQUFDO0lBb0JiLENBQUM7SUFFekIsZUFBZTtRQUNiLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xGLElBQUksWUFBWSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNwQyxNQUFNLFVBQVUsR0FBRyxZQUFZLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFD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VTtzQkFBbEIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUVtQyxRQUFRO3NCQUFoRCxTQUFTO3VCQUFDLFVBQVUsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBR0MsWUFBWTtzQkFBbkQsZUFBZTt1QkFBQyxxQkFBcUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgRG9DaGVjayxcbiAgRWxlbWVudFJlZixcbiAgZm9yd2FyZFJlZixcbiAgSW5wdXQsXG4gIFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRGVzeUNvbnRlbnRDaGlsZCB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9kZWNvcmF0b3JzL2Rlc3ktY29udGVudC1jaGlsZC5kZWNvcmF0b3InO1xuaW1wb3J0IHsgRXJyb3JNZXNzYWdlQ29tcG9uZW50IH0gZnJvbSAnLi4vZXJyb3ItbWVzc2FnZS9lcnJvci1tZXNzYWdlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBGb3JtRmllbGRDb21wb25lbnQgfSBmcm9tICcuLi9mb3JtLWZpZWxkL2Zvcm0tZmllbGQuY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZGVzeS1kYXRlcGlja2VyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2RhdGVwaWNrZXIuY29tcG9uZW50Lmh0bWwnLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IERhdGVwaWNrZXJDb21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWVcbiAgICB9XG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgRGF0ZXBpY2tlckNvbXBvbmVudCBleHRlbmRzIEZvcm1GaWVsZENvbXBvbmVudDxhbnk+IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgRG9DaGVjayB7XG5cbiAgQElucHV0KCkgY29udGFpbmVyQ2xhc3Nlczogc3RyaW5nO1xuICBASW5wdXQoKSBzdGFuZGFsb25lOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGZvcm1Hcm91cENsYXNzZXM6IHN0cmluZztcbiAgQElucHV0KCkgaWQ6IHN0cmluZztcbiAgQElucHV0KCkgbmFtZTogc3RyaW5nO1xuICBASW5wdXQoKSB0eXBlOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGlucHV0bW9kZTogc3RyaW5nO1xuICBASW5wdXQoKSBkZXNjcmliZWRCeTogc3RyaW5nO1xuICBASW5wdXQoKSBlcnJvcklkOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGNsYXNzZXM6IHN0cmluZztcbiAgQElucHV0KCkgYXV0b2NvbXBsZXRlOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHBhdHRlcm46IHN0cmluZztcbiAgQElucHV0KCkgcGxhY2Vob2xkZXI6IHN0cmluZztcbiAgQElucHV0KCkgYXR0cmlidXRlczogc3RyaW5nO1xuICBASW5wdXQoKSBkcm9wZG93bkNsYXNzZXM6IHN0cmluZztcblxuICBAVmlld0NoaWxkKCdjYWxlbmRhcicsIHsgc3RhdGljOiB0cnVlIH0pIGNhbGVuZGFyOiBFbGVtZW50UmVmO1xuICBcbiAgQERlc3lDb250ZW50Q2hpbGQoKVxuICBAQ29udGVudENoaWxkcmVuKEVycm9yTWVzc2FnZUNvbXBvbmVudCkgZXJyb3JNZXNzYWdlOiBFcnJvck1lc3NhZ2VDb21wb25lbnQ7XG5cbiAgY29uc3RydWN0b3IoKSB7IHN1cGVyKCkgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICBjb25zdCBpbnB1dEVsZW1lbnQgPSB0aGlzLmNhbGVuZGFyLm5hdGl2ZUVsZW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2lucHV0JylbMF07XG4gICAgaWYgKGlucHV0RWxlbWVudCAmJiAhdGhpcy5zdGFuZGFsb25lKSB7XG4gICAgICBjb25zdCBkcm9wZG93bklkID0gaW5wdXRFbGVtZW50LmdldEF0dHJpYnV0ZSgnaWQnKTtcbiAgICAgIGNvbnN0IGRhdGVwaWNrZXJEcm9wZG93biA9IGlucHV0RWxlbWVudC5wYXJlbnROb2RlLnF1ZXJ5U2VsZWN0b3IoJ2Rlc3ktZHJvcGRvd24gYnV0dG9uJyk7XG4gICAgICBsZXQgaXNPcGVuID0gZmFsc2U7XG5cbiAgICAgIGNvbnN0IGZvY3VzQ2FsZW5kYXIgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGlucHV0SW5pdGlhbFZhbHVlID0gaW5wdXRFbGVtZW50LnZhbHVlO1xuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGRhdGVwaWNrZXJTZWxlY3QgPSB0aGlzLmNhbGVuZGFyLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignOmlzKHNlbGVjdCknKTtcbiAgICAgICAgICBjb25zdCBkYXRlcGlja2VyQ2FsZW5kYXIgPSB0aGlzLmNhbGVuZGFyLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignOmlzKGNhbGVuZGFyLWRhdGUsIGNhbGVuZGFyLW11bHRpLCBjYWxlbmRhci1yYW5nZSknKTtcbiAgICAgICAgICBjb25zdCBkYXRlcGlja2VySW5pdGlhbFZhbHVlID0gZGF0ZXBpY2tlckNhbGVuZGFyPy52YWx1ZTtcbiAgICAgICAgICBpZiAodGhpcy52YWx1ZSAmJiBkYXRlcGlja2VyQ2FsZW5kYXIpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGRhdGVwaWNrZXJDYWxlbmRhcilcbiAgICAgICAgICAgIGRhdGVwaWNrZXJDYWxlbmRhci52YWx1ZSA9IHRoaXMudmFsdWU7XG4gICAgICAgICAgICBpbnB1dEVsZW1lbnQudmFsdWUgPSB0aGlzLnZhbHVlO1xuICAgICAgICAgICAgLy8gZGF0ZXBpY2tlckNhbGVuZGFyLnZhbHVlID0gdGhpcy52YWx1ZS5zcGxpdCgnLycpLnJldmVyc2UoKS5qb2luKCctJyk7XG4gICAgICAgICAgICBkYXRlcGlja2VyQ2FsZW5kYXIuZm9jdXMoKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gZGF0ZXBpY2tlckluaXRpYWxWYWx1ZVxuICAgICAgICAgICAgaW5wdXRFbGVtZW50LnZhbHVlID0gdGhpcy52YWx1ZTtcbiAgICAgICAgICAgIHRoaXMub25DaGFuZ2UodGhpcy52YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIGlmIChkYXRlcGlja2VyQ2FsZW5kYXIpIHtcbiAgICAgICAgICAvLyAgIGRhdGVwaWNrZXJDYWxlbmRhci5mb2N1cygpO1xuICAgICAgICAgIC8vICAgZGF0ZXBpY2tlckNhbGVuZGFyLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIChlOiBhbnkpID0+IHtcbiAgICAgICAgICAvLyAgICAgLy8gaW5wdXRFbGVtZW50LnZhbHVlID0gZS50YXJnZXQudmFsdWU7XG4gICAgICAgICAgLy8gICB9KTtcbiAgICAgICAgICAvLyB9XG4gICAgICAgICAgaWYgKGRhdGVwaWNrZXJTZWxlY3QpIHtcbiAgICAgICAgICAgIGRhdGVwaWNrZXJTZWxlY3QuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICBjb25zdCBzZWxlY3RlZFZhbHVlID0gdGhpcy52YWx1ZTtcbiAgICAgICAgICAgICAgZGF0ZXBpY2tlckNhbGVuZGFyLm1pbiA9IHNlbGVjdGVkVmFsdWUgKyBcIi0wMS0wMVwiO1xuICAgICAgICAgICAgICBkYXRlcGlja2VyQ2FsZW5kYXIubWF4ID0gc2VsZWN0ZWRWYWx1ZSArIFwiLTMxLTEyXCI7XG4gICAgICAgICAgICAgIGRhdGVwaWNrZXJDYWxlbmRhci5mb2N1c2VkRGF0ZSA9IGRhdGVwaWNrZXJDYWxlbmRhci5taW47XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGRhdGVwaWNrZXJTZWxlY3QuZm9jdXMoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgZGF0ZXBpY2tlckNhbmNlbCA9IHRoaXMuY2FsZW5kYXIubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcjJyArIGRyb3Bkb3duSWQgKyAnLWNhbmNlbCcpO1xuICAgICAgICAgIGNvbnN0IGRhdGVwaWNrZXJTdWJtaXQgPSB0aGlzLmNhbGVuZGFyLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignIycgKyBkcm9wZG93bklkICsgJy1zdWJtaXQnKTtcbiAgICAgICAgICBpZiAoZGF0ZXBpY2tlckNhbmNlbCkge1xuICAgICAgICAgICAgZGF0ZXBpY2tlckNhbmNlbC5vbmNsaWNrID0gKCkgPT4ge1xuICAgICAgICAgICAgICBpbnB1dEVsZW1lbnQudmFsdWUgPSBpbnB1dEluaXRpYWxWYWx1ZTtcbiAgICAgICAgICAgICAgZGF0ZXBpY2tlckNhbGVuZGFyLnRlbnRhdGl2ZSA9IFwiXCI7XG4gICAgICAgICAgICAgIGRhdGVwaWNrZXJDYWxlbmRhci52YWx1ZSA9IGRhdGVwaWNrZXJJbml0aWFsVmFsdWU7XG4gICAgICAgICAgICAgIGNsb3NlRHJvcGRvd24oKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChkYXRlcGlja2VyU3VibWl0KSB7XG4gICAgICAgICAgICBkYXRlcGlja2VyU3VibWl0Lm9uY2xpY2sgPSAoKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBkYXRlcGlja2VyQ2FsZW5kYXI/LnZhbHVlO1xuICAgICAgICAgICAgICBpbnB1dEVsZW1lbnQudmFsdWUgPSB0aGlzLnZhbHVlO1xuICAgICAgICAgICAgICB0aGlzLm9uQ2hhbmdlKHRoaXMudmFsdWUpO1xuICAgICAgICAgICAgICBjbG9zZURyb3Bkb3duKCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9O1xuXG4gICAgICBjb25zdCBjbG9zZURyb3Bkb3duID0gKCkgPT4ge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBpc09wZW4gPSBmYWxzZTtcbiAgICAgICAgICBpbnB1dEVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgfSwgMzAwKTtcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKG11dGF0aW9ucykgPT4ge1xuICAgICAgICBtdXRhdGlvbnMuZm9yRWFjaCgobXV0YXRpb24pID0+IHtcbiAgICAgICAgICBpZiAobXV0YXRpb24udHlwZSA9PT0gJ2F0dHJpYnV0ZXMnICYmIG11dGF0aW9uLmF0dHJpYnV0ZU5hbWUgPT09ICdhcmlhLWV4cGFuZGVkJykge1xuICAgICAgICAgICAgY29uc3QgY3VycmVudEV4cGFuZGVkVmFsdWUgPSAobXV0YXRpb24udGFyZ2V0IGFzIEVsZW1lbnQpLmdldEF0dHJpYnV0ZSgnYXJpYS1leHBhbmRlZCcpO1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRFeHBhbmRlZFZhbHVlICE9PSBpc09wZW4udG9TdHJpbmcoKSkge1xuICAgICAgICAgICAgICBjb25zdCBkYXRlcGlja2VyVGltZW91dCA9IHNldFRpbWVvdXQoZm9jdXNDYWxlbmRhciwgMCk7XG4gICAgICAgICAgICAgIGlzT3BlbiA9IGN1cnJlbnRFeHBhbmRlZFZhbHVlID09PSAndHJ1ZSc7XG4gICAgICAgICAgICAgIGlmICghaXNPcGVuKSB7XG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGRhdGVwaWNrZXJUaW1lb3V0KTtcbiAgICAgICAgICAgICAgICBjbG9zZURyb3Bkb3duKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICBvYnNlcnZlci5vYnNlcnZlKGRhdGVwaWNrZXJEcm9wZG93biwgeyBhdHRyaWJ1dGVzOiB0cnVlLCBhdHRyaWJ1dGVGaWx0ZXI6IFsnYXJpYS1leHBhbmRlZCddIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBkYXRlcGlja2VyU2VsZWN0ID0gdGhpcy5jYWxlbmRhci5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJzppcyhzZWxlY3QpJyk7XG4gICAgICBjb25zdCBkYXRlcGlja2VyQ2FsZW5kYXIgPSB0aGlzLmNhbGVuZGFyLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignOmlzKGNhbGVuZGFyLWRhdGUsIGNhbGVuZGFyLW11bHRpLCBjYWxlbmRhci1yYW5nZSknKTtcbiAgICAgIGlmIChkYXRlcGlja2VyU2VsZWN0KSB7XG4gICAgICAgIGRhdGVwaWNrZXJTZWxlY3QuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGNvbnN0IHNlbGVjdGVkVmFsdWUgPSB0aGlzLnZhbHVlO1xuICAgICAgICAgIGRhdGVwaWNrZXJDYWxlbmRhci5taW4gPSBzZWxlY3RlZFZhbHVlICsgXCItMDEtMDFcIjtcbiAgICAgICAgICBkYXRlcGlja2VyQ2FsZW5kYXIubWF4ID0gc2VsZWN0ZWRWYWx1ZSArIFwiLTMxLTEyXCI7XG4gICAgICAgICAgZGF0ZXBpY2tlckNhbGVuZGFyLmZvY3VzZWREYXRlID0gZGF0ZXBpY2tlckNhbGVuZGFyLm1pbjtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb25JbnB1dChldmVudDogYW55KSB7XG4gICAgdGhpcy52YWx1ZSA9IGV2ZW50LnRhcmdldC52YWx1ZTtcbiAgICB0aGlzLm9uQ2hhbmdlKHRoaXMudmFsdWUpO1xuICB9XG5cbiAgbmdEb0NoZWNrKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmF0dHJpYnV0ZXMpIHtcbiAgICAgIHRoaXMuc2V0QXR0cmlidXRlcygpO1xuICAgIH1cbiAgfVxuXG4gIHNldEF0dHJpYnV0ZXMoKSB7XG4gICAgY29uc3QgaW5wdXQgPSB0aGlzLmNhbGVuZGFyLm5hdGl2ZUVsZW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2lucHV0JylbMF07XG4gICAgY29uc3QgYXR0ciA9IHRoaXMuYXR0cmlidXRlcztcbiAgICBPYmplY3Qua2V5cyhhdHRyKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICBpbnB1dD8uc2V0QXR0cmlidXRlKGtleSwgYXR0cltrZXldKTtcbiAgICB9KTtcbiAgfVxuXG4gIHdyaXRlVmFsdWUodmFsdWU6IGFueSk6IHZvaWQge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlIHx8ICcnO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnZhbHVlID0gJyc7XG4gICAgfVxuICAgIHRoaXMub25DaGFuZ2UodGhpcy52YWx1ZSk7XG4gIH1cblxuXG59XG4iLCI8ZGl2ICNjYWxlbmRhclxuICAgICBjbGFzcz1cImMtZGF0ZXBpY2tlclwiXG4gICAgIFtuZ0NsYXNzXT1cImNvbnRhaW5lckNsYXNzZXNcIlxuICAgICBbZGVzeUFwcEFjY2Vzc2liaWxpdHldPVwidGhpc1wiPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzdGFuZGFsb25lXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjYWxlbmRhckNvbnRlbnRcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8ZGl2ICpuZ0lmPVwiIXN0YW5kYWxvbmVcIlxuICAgICAgICAgY2xhc3M9XCJjLWZvcm0tZ3JvdXBcIlxuICAgICAgICAgW25nQ2xhc3NdPVwiZm9ybUdyb3VwQ2xhc3Nlc1wiPlxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJkZXN5LWxhYmVsXCI+PC9uZy1jb250ZW50PlxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJkZXN5LWhpbnRcIj48L25nLWNvbnRlbnQ+IFxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJkZXN5LWVycm9yLW1lc3NhZ2VcIj48L25nLWNvbnRlbnQ+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cInJlbGF0aXZlIFwiPlxuICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiYy1pbnB1dCBibG9jayBtdC1zbSBib3JkZXItYmxhY2sgcm91bmRlZCBmb250LXNlbWlib2xkIHBsYWNlaG9sZGVyLW5ldXRyYWwtZGFyayBmb2N1czpib3JkZXItYmxhY2sgZm9jdXM6c2hhZG93LW91dGxpbmUtZm9jdXMtaW5wdXQgZm9jdXM6cmluZy00IGZvY3VzOnJpbmctd2FybmluZy1iYXNlIGRpc2FibGVkOmJnLW5ldXRyYWwtbGlnaHQgZGlzYWJsZWQ6Ym9yZGVyLW5ldXRyYWwtYmFzZSBwci0xNiB3LWZ1bGxcIlxuICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnYm9yZGVyLWFsZXJ0LWJhc2UgcmluZy0yIHJpbmctYWxlcnQtYmFzZSc6IGVycm9yTWVzc2FnZX1cIlxuICAgICAgICAgICAgICAgICAgIFthdHRyLmlkXT1cImlkXCJcbiAgICAgICAgICAgICAgICAgICBbYXR0ci5uYW1lXT1cIm5hbWVcIlxuICAgICAgICAgICAgICAgICAgIFt0eXBlXT1cInR5cGUgfHwgJ3RleHQnXCJcbiAgICAgICAgICAgICAgICAgICBbYXR0ci52YWx1ZV09XCJ2YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1kZXNjcmliZWRieV09XCJkZXNjcmliZWRCeSB8fCAoZXJyb3JNZXNzYWdlIHx8IGVycm9ySWQgPyBlcnJvcklkIDogbnVsbClcIlxuICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtZXJyb3JtZXNzYWdlXT1cImVycm9yTWVzc2FnZSB8fCBlcnJvcklkID8gZXJyb3JJZCA6IG51bGxcIlxuICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtaW52YWxpZF09XCJlcnJvck1lc3NhZ2UgfHwgZXJyb3JJZCA/ICd0cnVlJyA6IG51bGxcIlxuICAgICAgICAgICAgICAgICAgIFthdHRyLmF1dG9jb21wbGV0ZV09XCJhdXRvY29tcGxldGVcIlxuICAgICAgICAgICAgICAgICAgIFthdHRyLnBhdHRlcm5dPVwicGF0dGVyblwiXG4gICAgICAgICAgICAgICAgICAgW2F0dHIuaW5wdXRtb2RlXT1cImlucHV0bW9kZVwiXG4gICAgICAgICAgICAgICAgICAgKGlucHV0KT1cIm9uSW5wdXQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgW2F0dHIucGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiIC8+XG5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFic29sdXRlIHRvcC0wIHJpZ2h0LTBcIj5cbiAgICAgICAgICAgICAgICA8ZGVzeS1kcm9wZG93biBbY2xhc3Nlc109XCJkcm9wZG93bkNsYXNzZXMgPyBkcm9wZG93bkNsYXNzZXMgOiAnYy1kcm9wZG93bi0tdHJhbnNwYXJlbnQnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChibHVyKT1cIm9uQmx1cigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwiaWQrJy1kcm9wZG93bidcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzci1vbmx5XCI+U2VsZWNjaW9uYXIgZmVjaGEgY29uIHVuYSB0YWJsYSBkZSBjYWxlbmRhcmlvPC9zcGFuPjxzdmdcbiAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDE0IDE0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjEuMzc1ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodD1cIjEuMzc1ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZmlsbD1cImN1cnJlbnRDb2xvclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbC1ydWxlPVwiZXZlbm9kZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk00LjUgMS41YzAgLTAuNTUyMjg1IC0wLjQ0NzcyIC0xIC0xIC0xcy0xIDAuNDQ3NzE1IC0xIDF2MUgyQzEuMTcxNTcgMi41IDAuNSAzLjE3MTU3IDAuNSA0djhjMCAwLjgyODQgMC42NzE1NyAxLjUgMS41IDEuNWgxMGMwLjgyODQgMCAxLjUgLTAuNjcxNiAxLjUgLTEuNVY0YzAgLTAuODI4NDMgLTAuNjcxNiAtMS41IC0xLjUgLTEuNWgtMC41di0xYzAgLTAuNTUyMjg1IC0wLjQ0NzcgLTEgLTEgLTEgLTAuNTUyMjkgMCAtMSAwLjQ0NzcxNSAtMSAxdjFoLTV2LTFabS0xIDUuNzVjMC41NTIyOCAwIDEgLTAuNDQ3NzIgMSAtMXMtMC40NDc3MiAtMSAtMSAtMSAtMSAwLjQ0NzcyIC0xIDEgMC40NDc3MiAxIDEgMVptMy41IDBjMC41NTIyOCAwIDEgLTAuNDQ3NzIgMSAtMXMtMC40NDc3MiAtMSAtMSAtMSAtMSAwLjQ0NzcyIC0xIDEgMC40NDc3MiAxIDEgMVptLTIuNSAzYzAgMC41NTIzIC0wLjQ0NzcyIDEgLTEgMXMtMSAtMC40NDc3IC0xIC0xYzAgLTAuNTUyMjkgMC40NDc3MiAtMSAxIC0xczEgMC40NDc3MSAxIDFabTIuNSAxYzAuNTUyMjggMCAxIC0wLjQ0NzcgMSAtMSAwIC0wLjU1MjI5IC0wLjQ0NzcyIC0xIC0xIC0xcy0xIDAuNDQ3NzEgLTEgMWMwIDAuNTUyMyAwLjQ0NzcyIDEgMSAxWm00LjUgLTVjMCAwLjU1MjI4IC0wLjQ0NzcgMSAtMSAxIC0wLjU1MjI5IDAgLTEgLTAuNDQ3NzIgLTEgLTFzMC40NDc3MSAtMSAxIC0xYzAuNTUyMyAwIDEgMC40NDc3MiAxIDFaXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGlwLXJ1bGU9XCJldmVub2RkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIxXCI+PC9wYXRoPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9nPlxuICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgPGRlc3ktY29udGVudD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjYWxlbmRhckNvbnRlbnRcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cImZsZXggZmxleC13cmFwIGp1c3RpZnktYmV0d2VlbiBnYXAtc20gcC1zbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRlc3ktYnV0dG9uIFtpZF09XCJpZCArICctc3VibWl0J1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc2VzPVwiYy1idXR0b24tLXByaW1hcnkgYy1idXR0b24tLXNtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY2VwdGFyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGVzeS1idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkZXN5LWJ1dHRvbiBbaWRdPVwiaWQgKyAnLWNhbmNlbCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3Nlcz1cImMtYnV0dG9uLS1zbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuY2VsYXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kZXN5LWJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgICAgICAgICAgPC9kZXN5LWNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgPC9kZXN5LWRyb3Bkb3duPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjY2FsZW5kYXJDb250ZW50PlxuICAgIDxkaXYgY2xhc3M9XCJwLXNtIG92ZXJmbG93LXgtYXV0b1wiPlxuICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgPC9kaXY+XG48L25nLXRlbXBsYXRlPiJdfQ==
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { Pipe } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export class FormatDatePipe {
|
|
4
|
+
transform(value) {
|
|
5
|
+
if (!value)
|
|
6
|
+
return '';
|
|
7
|
+
const fechas = value.split('/');
|
|
8
|
+
const fechasConvertidas = fechas.map(fecha => {
|
|
9
|
+
if (fecha.includes('-')) {
|
|
10
|
+
const [year, month, day] = fecha.split('-');
|
|
11
|
+
if (year && month && day) {
|
|
12
|
+
return `${day}/${month}/${year}`;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
else if (fecha.includes('/')) {
|
|
16
|
+
const [day, month, year] = fecha.split('/');
|
|
17
|
+
if (day && month && year) {
|
|
18
|
+
return `${day}/${month}/${year}`;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
return fecha;
|
|
22
|
+
});
|
|
23
|
+
return fechasConvertidas.join('-');
|
|
24
|
+
}
|
|
25
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FormatDatePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
26
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: FormatDatePipe, name: "formatDate" }); }
|
|
27
|
+
}
|
|
28
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FormatDatePipe, decorators: [{
|
|
29
|
+
type: Pipe,
|
|
30
|
+
args: [{
|
|
31
|
+
name: 'formatDate'
|
|
32
|
+
}]
|
|
33
|
+
}] });
|
|
34
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci5waXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGVzeS1hbmd1bGFyL3NyYy9saWIvZGVzeS1mb3Jtcy9jb21wb25lbnRzL2RhdGVwaWNrZXIvZGF0ZXBpY2tlci5waXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQWlCLE1BQU0sZUFBZSxDQUFDOztBQUtwRCxNQUFNLE9BQU8sY0FBYztJQUV2QixTQUFTLENBQUMsS0FBYTtRQUNuQixJQUFJLENBQUMsS0FBSztZQUFFLE9BQU8sRUFBRSxDQUFDO1FBRXRCLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFaEMsTUFBTSxpQkFBaUIsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ3pDLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDckIsTUFBTSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDNUMsSUFBSSxJQUFJLElBQUksS0FBSyxJQUFJLEdBQUcsRUFBRTtvQkFDdEIsT0FBTyxHQUFHLEdBQUcsSUFBSSxLQUFLLElBQUksSUFBSSxFQUFFLENBQUM7aUJBQ3BDO2FBQ0o7aUJBQU0sSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUM1QixNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUM1QyxJQUFJLEdBQUcsSUFBSSxLQUFLLElBQUksSUFBSSxFQUFFO29CQUN0QixPQUFPLEdBQUcsR0FBRyxJQUFJLEtBQUssSUFBSSxJQUFJLEVBQUUsQ0FBQztpQkFDcEM7YUFDSjtZQUNELE9BQU8sS0FBSyxDQUFDO1FBQ2pCLENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDdkMsQ0FBQzsrR0F2QlEsY0FBYzs2R0FBZCxjQUFjOzs0RkFBZCxjQUFjO2tCQUgxQixJQUFJO21CQUFDO29CQUNGLElBQUksRUFBRSxZQUFZO2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBpcGUsIFBpcGVUcmFuc2Zvcm0gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQFBpcGUoe1xuICAgIG5hbWU6ICdmb3JtYXREYXRlJ1xufSlcbmV4cG9ydCBjbGFzcyBGb3JtYXREYXRlUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0geyAvLyBJTiBQUk9HUkVTU1xuXG4gICAgdHJhbnNmb3JtKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBpZiAoIXZhbHVlKSByZXR1cm4gJyc7XG5cbiAgICAgICAgY29uc3QgZmVjaGFzID0gdmFsdWUuc3BsaXQoJy8nKTtcblxuICAgICAgICBjb25zdCBmZWNoYXNDb252ZXJ0aWRhcyA9IGZlY2hhcy5tYXAoZmVjaGEgPT4ge1xuICAgICAgICAgICAgaWYgKGZlY2hhLmluY2x1ZGVzKCctJykpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBbeWVhciwgbW9udGgsIGRheV0gPSBmZWNoYS5zcGxpdCgnLScpO1xuICAgICAgICAgICAgICAgIGlmICh5ZWFyICYmIG1vbnRoICYmIGRheSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYCR7ZGF5fS8ke21vbnRofS8ke3llYXJ9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGZlY2hhLmluY2x1ZGVzKCcvJykpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBbZGF5LCBtb250aCwgeWVhcl0gPSBmZWNoYS5zcGxpdCgnLycpO1xuICAgICAgICAgICAgICAgIGlmIChkYXkgJiYgbW9udGggJiYgeWVhcikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYCR7ZGF5fS8ke21vbnRofS8ke3llYXJ9YDsgXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZlY2hhO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gZmVjaGFzQ29udmVydGlkYXMuam9pbignLScpO1xuICAgIH1cbn0iXX0=
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { __decorate, __metadata } from "tslib";
|
|
2
2
|
import { ChangeDetectorRef, Component, ContentChildren, EventEmitter, forwardRef, Input, Output, QueryList, TemplateRef, ViewChild } from '@angular/core';
|
|
3
|
+
import { NG_VALUE_ACCESSOR } from "@angular/forms";
|
|
3
4
|
import { DesyContentChild } from "../../../shared/decorators/desy-content-child.decorator";
|
|
4
|
-
import { TreeItemComponent } from "./tree-item/tree-item.component";
|
|
5
5
|
import { DesyOnInputChange } from "../../../shared/decorators/desy-on-input-change.decorator";
|
|
6
|
-
import { NG_VALUE_ACCESSOR } from "@angular/forms";
|
|
7
|
-
import { FormFieldComponent } from "../form-field/form-field.component";
|
|
8
6
|
import { FieldsetComponent } from "../fieldset/fieldset.component";
|
|
7
|
+
import { FormFieldComponent } from "../form-field/form-field.component";
|
|
9
8
|
import { SearchBarComponent } from "../search-bar/search-bar.component";
|
|
9
|
+
import { TreeItemComponent } from "./tree-item/tree-item.component";
|
|
10
10
|
import * as i0 from "@angular/core";
|
|
11
11
|
import * as i1 from "@angular/common";
|
|
12
12
|
import * as i2 from "../../../shared/directives/accessibility-directive";
|
|
@@ -286,13 +286,13 @@ export class TreeComponent extends FormFieldComponent {
|
|
|
286
286
|
return list;
|
|
287
287
|
}
|
|
288
288
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TreeComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
289
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: TreeComponent, selector: "desy-tree", inputs: { idPrefix: "idPrefix", classes: "classes", name: "name", type: "type", describedBy: "describedBy", formGroupClasses: "formGroupClasses", expandedFirstLevel: "expandedFirstLevel", decoupleChildFromParent: "decoupleChildFromParent", disableDefaultSearch: "disableDefaultSearch", searchMatchValues: "searchMatchValues" }, outputs: { searchMatchValuesChange: "searchMatchValuesChange" }, providers: [
|
|
289
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: TreeComponent, selector: "desy-tree", inputs: { id: "id", idPrefix: "idPrefix", classes: "classes", name: "name", type: "type", describedBy: "describedBy", formGroupClasses: "formGroupClasses", expandedFirstLevel: "expandedFirstLevel", decoupleChildFromParent: "decoupleChildFromParent", disableDefaultSearch: "disableDefaultSearch", searchMatchValues: "searchMatchValues" }, outputs: { searchMatchValuesChange: "searchMatchValuesChange" }, providers: [
|
|
290
290
|
{
|
|
291
291
|
provide: NG_VALUE_ACCESSOR,
|
|
292
292
|
useExisting: forwardRef(() => TreeComponent),
|
|
293
293
|
multi: true
|
|
294
294
|
}
|
|
295
|
-
], queries: [{ propertyName: "allItems", predicate: TreeItemComponent, descendants: true }, { propertyName: "fieldsetComponent", predicate: FieldsetComponent }, { propertyName: "searchBarComponent", predicate: SearchBarComponent }], viewQueries: [{ propertyName: "innerHtml", first: true, predicate: ["innerHtml"], descendants: true, static: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "
|
|
295
|
+
], queries: [{ propertyName: "allItems", predicate: TreeItemComponent, descendants: true }, { propertyName: "fieldsetComponent", predicate: FieldsetComponent }, { propertyName: "searchBarComponent", predicate: SearchBarComponent }], viewQueries: [{ propertyName: "innerHtml", first: true, predicate: ["innerHtml"], descendants: true, static: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<ng-template #innerHtml>\n <ng-content select=\"desy-hint\"></ng-content>\n <ng-content select=\"desy-error-message\"></ng-content>\n <ng-content select=\"desy-search-bar\"></ng-content>\n <ul [attr.id]=\"id ? id : null\"\n [attr.role]=\"role ? role : 'tree'\"\n [desyAppAccessibility]=\"this\">\n <ng-content></ng-content>\n </ul>\n</ng-template>\n\n<!-- tree -->\n<div [class]=\"['c-form-group', formGroupClasses] | makeHtmlList\"\n [ngClass]=\"{'c-form-group--error': (hasErrorsMessage() || formGroupClasses === 'c-form-group--error') }\">\n <ng-container *ngIf=\"hasFieldsetComponent(); else innerHtml\">\n <ng-content select=\"desy-fieldset\"></ng-content>\n </ng-container>\n</div>", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.AccessibilityDirective, selector: "[desyAppAccessibility]", inputs: ["desyAppAccessibility"] }, { kind: "pipe", type: i3.MakeHtmlListPipe, name: "makeHtmlList" }] }); }
|
|
296
296
|
}
|
|
297
297
|
__decorate([
|
|
298
298
|
DesyOnInputChange('onSearchMatchValuesChange'),
|
|
@@ -318,8 +318,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
318
318
|
useExisting: forwardRef(() => TreeComponent),
|
|
319
319
|
multi: true
|
|
320
320
|
}
|
|
321
|
-
], template: "
|
|
322
|
-
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: {
|
|
321
|
+
], template: "<ng-template #innerHtml>\n <ng-content select=\"desy-hint\"></ng-content>\n <ng-content select=\"desy-error-message\"></ng-content>\n <ng-content select=\"desy-search-bar\"></ng-content>\n <ul [attr.id]=\"id ? id : null\"\n [attr.role]=\"role ? role : 'tree'\"\n [desyAppAccessibility]=\"this\">\n <ng-content></ng-content>\n </ul>\n</ng-template>\n\n<!-- tree -->\n<div [class]=\"['c-form-group', formGroupClasses] | makeHtmlList\"\n [ngClass]=\"{'c-form-group--error': (hasErrorsMessage() || formGroupClasses === 'c-form-group--error') }\">\n <ng-container *ngIf=\"hasFieldsetComponent(); else innerHtml\">\n <ng-content select=\"desy-fieldset\"></ng-content>\n </ng-container>\n</div>" }]
|
|
322
|
+
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { id: [{
|
|
323
|
+
type: Input
|
|
324
|
+
}], idPrefix: [{
|
|
323
325
|
type: Input
|
|
324
326
|
}], classes: [{
|
|
325
327
|
type: Input
|
|
@@ -354,4 +356,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
354
356
|
type: ViewChild,
|
|
355
357
|
args: ['innerHtml', { static: true }]
|
|
356
358
|
}] } });
|
|
357
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kZXN5LWFuZ3VsYXIvc3JjL2xpYi9kZXN5LWZvcm1zL2NvbXBvbmVudHMvdHJlZS90cmVlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rlc3ktYW5ndWxhci9zcmMvbGliL2Rlc3ktZm9ybXMvY29tcG9uZW50cy90cmVlL3RyZWUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFDTCxpQkFBaUIsRUFDakIsU0FBUyxFQUNULGVBQWUsRUFBRSxZQUFZLEVBQzdCLFVBQVUsRUFDVixLQUFLLEVBR0wsTUFBTSxFQUFFLFNBQVMsRUFDRixXQUFXLEVBQUUsU0FBUyxFQUN0QyxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSx5REFBeUQsQ0FBQztBQUN6RixPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxpQ0FBaUMsQ0FBQztBQUNsRSxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSwyREFBMkQsQ0FBQztBQUM1RixPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUNqRCxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQztBQUV0RSxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxnQ0FBZ0MsQ0FBQztBQUVqRSxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQzs7Ozs7QUFhdEUsTUFBTSxPQUFPLGFBQWMsU0FBUSxrQkFBeUI7SUFxQzFELFlBQW9CLGNBQWlDO1FBQ25ELEtBQUssRUFBRSxDQUFDO1FBRFUsbUJBQWMsR0FBZCxjQUFjLENBQW1CO1FBM0I1Qyx1QkFBa0IsR0FBRyxJQUFJLENBQUM7UUFDMUIsNEJBQXVCLEdBQUcsS0FBSyxDQUFD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LHlCQUF5QixFQUFDLENBQUM7OEJBQ1Qsa0JBQWtCO3lEQUFDOzRGQTFCakUsYUFBYTtrQkFYekIsU0FBUzsrQkFDRSxXQUFXLGFBRVY7d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsY0FBYyxDQUFDOzRCQUM1QyxLQUFLLEVBQUUsSUFBSTt5QkFDWjtxQkFDRjt3R0FJUSxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBRUcsZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUVHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFDRyx1QkFBdUI7c0JBQS9CLEtBQUs7Z0JBRUcsb0JBQW9CO3NCQUE1QixLQUFLO2dCQUdHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDSSx1QkFBdUI7c0JBQWhDLE1BQU07Z0JBR29ELFFBQVE7c0JBQWxFLGVBQWU7dUJBQUMsaUJBQWlCLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFO2dCQUdyQixpQkFBaUI7c0JBQXBELGVBQWU7dUJBQUMsaUJBQWlCO2dCQUdHLGtCQUFrQjtzQkFBdEQsZUFBZTt1QkFBQyxrQkFBa0I7Z0JBRU8sU0FBUztzQkFBbEQsU0FBUzt1QkFBQyxXQUFXLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkcmVuLCBFdmVudEVtaXR0ZXIsXG4gIGZvcndhcmRSZWYsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT3V0cHV0LCBRdWVyeUxpc3QsXG4gIFNpbXBsZUNoYW5nZXMsIFRlbXBsYXRlUmVmLCBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0Rlc3lDb250ZW50Q2hpbGR9IGZyb20gXCIuLi8uLi8uLi9zaGFyZWQvZGVjb3JhdG9ycy9kZXN5LWNvbnRlbnQtY2hpbGQuZGVjb3JhdG9yXCI7XG5pbXBvcnQge1RyZWVJdGVtQ29tcG9uZW50fSBmcm9tIFwiLi90cmVlLWl0ZW0vdHJlZS1pdGVtLmNvbXBvbmVudFwiO1xuaW1wb3J0IHtEZXN5T25JbnB1dENoYW5nZX0gZnJvbSBcIi4uLy4uLy4uL3NoYXJlZC9kZWNvcmF0b3JzL2Rlc3ktb24taW5wdXQtY2hhbmdlLmRlY29yYXRvclwiO1xuaW1wb3J0IHtOR19WQUxVRV9BQ0NFU1NPUn0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XG5pbXBvcnQge0Zvcm1GaWVsZENvbXBvbmVudH0gZnJvbSBcIi4uL2Zvcm0tZmllbGQvZm9ybS1maWVsZC5jb21wb25lbnRcIjtcbmltcG9ydCB7U3Vic2NyaXB0aW9ufSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHtGaWVsZHNldENvbXBvbmVudH0gZnJvbSBcIi4uL2ZpZWxkc2V0L2ZpZWxkc2V0LmNvbXBvbmVudFwiO1xuaW1wb3J0IHtRdWl0VHJlZUl0ZW1Gb2N1c09wdGlvbnN9IGZyb20gXCIuL2ludGVyZmFjZXMvcXVpdC10cmVlLWl0ZW0tZm9jdXMtb3B0aW9uc1wiO1xuaW1wb3J0IHtTZWFyY2hCYXJDb21wb25lbnR9IGZyb20gXCIuLi9zZWFyY2gtYmFyL3NlYXJjaC1iYXIuY29tcG9uZW50XCI7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2Rlc3ktdHJlZScsXG4gIHRlbXBsYXRlVXJsOiAnLi90cmVlLmNvbXBvbmVudC5odG1sJyxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBUcmVlQ29tcG9uZW50KSxcbiAgICAgIG11bHRpOiB0cnVlXG4gICAgfVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIFRyZWVDb21wb25lbnQgZXh0ZW5kcyBGb3JtRmllbGRDb21wb25lbnQ8YW55W10+IGltcGxlbWVudHMgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuXG4gIEBJbnB1dCgpIGlkUHJlZml4OiBzdHJpbmc7XG4gIEBJbnB1dCgpIGNsYXNzZXM6IHN0cmluZztcbiAgQElucHV0KCkgbmFtZTogc3RyaW5nO1xuICBASW5wdXQoKSB0eXBlOiAncmFkaW8nfCdjaGVja2JveCd8bnVsbHx1bmRlZmluZWQ7XG4gIEBJbnB1dCgpIGRlc2NyaWJlZEJ5OiBzdHJpbmc7XG5cbiAgQElucHV0KCkgZm9ybUdyb3VwQ2xhc3NlczogYW55O1xuXG4gIEBJbnB1dCgpIGV4cGFuZGVkRmlyc3RMZXZlbCA9IHRydWU7XG4gIEBJbnB1dCgpIGRlY291cGxlQ2hpbGRGcm9tUGFyZW50ID0gZmFsc2U7XG5cbiAgQElucHV0KCkgZGlzYWJsZURlZmF1bHRTZWFyY2ggPSBmYWxzZTtcblxuICBARGVzeU9uSW5wdXRDaGFuZ2UoJ29uU2VhcmNoTWF0Y2hWYWx1ZXNDaGFuZ2UnKVxuICBASW5wdXQoKSBzZWFyY2hNYXRjaFZhbHVlczogc3RyaW5nW107XG4gIEBPdXRwdXQoKSBzZWFyY2hNYXRjaFZhbHVlc0NoYW5nZTogRXZlbnRFbWl0dGVyPHN0cmluZ1tdPiA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nW10+KCk7XG5cbiAgQERlc3lPbklucHV0Q2hhbmdlKCdjb25maWd1cmVBbGxJdGVtcycpXG4gIEBDb250ZW50Q2hpbGRyZW4oVHJlZUl0ZW1Db21wb25lbnQsIHsgZGVzY2VuZGFudHM6IHRydWUgfSkgYWxsSXRlbXM6IFF1ZXJ5TGlzdDxUcmVlSXRlbUNvbXBvbmVudD47XG5cbiAgQERlc3lDb250ZW50Q2hpbGQoeyBvblNldENhbGxiYWNrTmFtZTogJ292ZXJyaWRlRmllbGRzZXRQYXJhbXMnfSlcbiAgQENvbnRlbnRDaGlsZHJlbihGaWVsZHNldENvbXBvbmVudCkgZmllbGRzZXRDb21wb25lbnQ6IEZpZWxkc2V0Q29tcG9uZW50O1xuXG4gIEBEZXN5Q29udGVudENoaWxkKHsgb25TZXRDYWxsYmFja05hbWU6ICdvdmVycmlkZVNlYXJjaEJhclBhcmFtcyd9KVxuICBAQ29udGVudENoaWxkcmVuKFNlYXJjaEJhckNvbXBvbmVudCkgc2VhcmNoQmFyQ29tcG9uZW50OiBTZWFyY2hCYXJDb21wb25lbnQ7XG5cbiAgQFZpZXdDaGlsZCgnaW5uZXJIdG1sJywgeyBzdGF0aWM6IHRydWUgfSkgaW5uZXJIdG1sOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIHByaXZhdGUgcm9vdEl0ZW1zOiBUcmVlSXRlbUNvbXBvbmVudFtdID0gW107XG4gIHByaXZhdGUgX2l0ZW1MaXN0U3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgX2FsbEl0ZW1MaXN0U3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgX2l0ZW1MaXN0Q2hlY2tlZFN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdID0gW107XG4gIHByaXZhdGUgX2l0ZW1MaXN0UXVpdEZvY3VzU3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uW10gPSBbXTtcbiAgcHJpdmF0ZSBfYWxyZWFkeUNvbmZpZ3VyaW5nSXRlbXMgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZikge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmNsZWFyU3Vic2NyaXB0aW9ucyh0aGlzLl9pdGVtTGlzdENoZWNrZWRTdWJzY3JpcHRpb25zKTtcbiAgICB0aGlzLmNsZWFyU3Vic2NyaXB0aW9ucyh0aGlzLl9pdGVtTGlzdFF1aXRGb2N1c1N1YnNjcmlwdGlvbnMpO1xuICAgIHRoaXMuX2l0ZW1MaXN0U3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuX2FsbEl0ZW1MaXN0U3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIHRoaXMuY29uZmlndXJlQWxsSXRlbXMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZSBzb2JyZXNjcmliZSBlbCB2YWxvciBwYXJhIGFjdHVhbGl6YXIgbG9zIGl0ZW1zXG4gICAqIEBPdmVycmlkZVxuICAgKi9cbiAgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMuY29uZmlndXJlQWxsSXRlbXModHJ1ZSk7XG4gICAgdGhpcy5vbkNoYW5nZSh0aGlzLnZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZSBzb2JyZXNjcmliZSBlbCB2YWxvciBwYXJhIGFjdHVhbGl6YXIgbG9zIGl0ZW1zXG4gICAqL1xuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBzdXBlci5zZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQpO1xuICAgIHRoaXMuY29uZmlndXJlQWxsSXRlbXMoKTtcbiAgfVxuXG4gIC8qXG4gICAqIEV2ZW50b3NcbiAgICovXG5cbiAgLyoqXG4gICAqIEFjdHVhbGl6YSBlbCB2YWxvciBkZWwgY29tcG9uZW50ZSBhbCBjaGVja3F1ZWFyc2UgdW4gw610ZW1cbiAgICogQHBhcmFtIG9yaWdpbkl0ZW0gw610ZW0gbW9kaWZpY2Fkb1xuICAgKi9cbiAgdXBkYXRlVmFsdWVGcm9tSXRlbXMob3JpZ2luSXRlbT86IFRyZWVJdGVtQ29tcG9uZW50KTogdm9pZCB7XG5cbiAgICAvLyBTaSBlcyByYWRpbywgc2UgZGVzYWN0aXZhbiBlbCByZXN0byBkZSBpdGVtcyBjdWFuZG8gc2UgYWN0aXZhIG90cm8gaXRlbVxuICAgIGlmICh0aGlzLnR5cGUgIT09ICdjaGVja2JveCcpIHtcbiAgICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5nZXRBbGxJdGVtc0luT3JkZXIoKTtcbiAgICAgIGl0ZW1zLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgIGlmIChpdGVtICE9PSBvcmlnaW5JdGVtICYmIGl0ZW0uY2hlY2tlZCkge1xuICAgICAgICAgIGl0ZW0uc2V0Q2hlY2tlZChmYWxzZSwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoIXRoaXMuZGVjb3VwbGVDaGlsZEZyb21QYXJlbnQpIHtcbiAgICAgIHRoaXMucm9vdEl0ZW1zLmZvckVhY2goaXRlbSA9PiBpdGVtLnNldENoZWNrZWRBdXRvbWF0aWNhbGx5RGVwZW5kaW5nT25DaGlsZHJlbigpKTtcbiAgICB9XG5cbiAgICB0aGlzLnZhbHVlID0gW107XG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLmdldEFsbEl0ZW1zSW5PcmRlcigpO1xuICAgIGl0ZW1zLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICBpZiAoaXRlbS5jaGVja2VkKSB7XG4gICAgICAgIHRoaXMudmFsdWUucHVzaChpdGVtLnZhbHVlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLm9uQ2hhbmdlKHRoaXMudmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlc3Rpb25hIGN1YW5kbyBlbCBmb2NvIGFiYW5kb25hIHVuIMOtdGVtIGRlc2RlIHVuIGV2ZW50byBkZSB0ZWNsYWRvIGNvbnRyb2xhZG9cbiAgICogQHBhcmFtIG9wdGlvbnNcbiAgICovXG4gIGhhbmRsZUl0ZW1RdWl0Rm9jdXMob3B0aW9uczogUXVpdFRyZWVJdGVtRm9jdXNPcHRpb25zKTogdm9pZCB7XG4gICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5uZXh0RWxlbWVudCkge1xuICAgICAgY29uc3QgaXRlbXMgPSB0aGlzLmdldEFsbEl0ZW1zSW5PcmRlcigpO1xuICAgICAgY29uc3QgZm9jdXNhYmxlSXRlbXMgPSBpdGVtcy5maWx0ZXIoaXRlbSA9PiAhaXRlbS5pc0hpZGRlbigpICYmICFpdGVtLmRpc2FibGVkICYmIGl0ZW0uYWxsUGFyZW50c0V4cGFuZGVkKTtcbiAgICAgIHN3aXRjaCAob3B0aW9ucy5uZXh0RWxlbWVudCkge1xuICAgICAgICBjYXNlIFwiZmlyc3RcIjpcbiAgICAgICAgICBmb2N1c2FibGVJdGVtc1swXS5mb2N1cygpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwibGFzdFwiOlxuICAgICAgICAgIGZvY3VzYWJsZUl0ZW1zW2ZvY3VzYWJsZUl0ZW1zLmxlbmd0aCAtIDFdLmZvY3VzKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJwYXJlbnRcIjpcbiAgICAgICAgICBjb25zdCBjdXJyZW50U3ViTGV2ZWwgPSBvcHRpb25zLmN1cnJlbnRJdGVtLnN1YkxldmVsO1xuICAgICAgICAgIGlmIChjdXJyZW50U3ViTGV2ZWwgPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50SXRlbUluZGV4ID0gZm9jdXNhYmxlSXRlbXMuZmluZEluZGV4KGl0ZW0gPT4gaXRlbSA9PT0gb3B0aW9ucy5jdXJyZW50SXRlbSk7XG4gICAgICAgICAgICBjb25zdCBwYXJlbnQgPSBmb2N1c2FibGVJdGVtcy5zbGljZSgwLCBjdXJyZW50SXRlbUluZGV4KS5yZXZlcnNlKCkuZmluZChpdGVtID0+IGl0ZW0uc3ViTGV2ZWwgPCBjdXJyZW50U3ViTGV2ZWwpO1xuICAgICAgICAgICAgaWYgKHBhcmVudCkge1xuICAgICAgICAgICAgICBwYXJlbnQuZm9jdXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJmaXJzdENoaWxkXCI6XG4gICAgICAgIGNhc2UgXCJuZXh0XCI6XG4gICAgICAgICAgaWYgKG9wdGlvbnMuY3VycmVudEl0ZW0pIHtcbiAgICAgICAgICAgIGxldCBjdXJyZW50SXRlbUluZGV4ID0gZm9jdXNhYmxlSXRlbXMuZmluZEluZGV4KGl0ZW0gPT4gaXRlbSA9PT0gb3B0aW9ucy5jdXJyZW50SXRlbSk7XG4gICAgICAgICAgICBpZiAoY3VycmVudEl0ZW1JbmRleCA8IGZvY3VzYWJsZUl0ZW1zLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgZm9jdXNhYmxlSXRlbXNbY3VycmVudEl0ZW1JbmRleCArIDFdLmZvY3VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwicHJldmlvdXNcIjpcbiAgICAgICAgICBpZiAob3B0aW9ucy5jdXJyZW50SXRlbSkge1xuICAgICAgICAgICAgY29uc3QgY3VycmVudEl0ZW1JbmRleCA9IGZvY3VzYWJsZUl0ZW1zLmZpbmRJbmRleChpdGVtID0+IGl0ZW0gPT09IG9wdGlvbnMuY3VycmVudEl0ZW0pO1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRJdGVtSW5kZXggPiAwKSB7XG4gICAgICAgICAgICAgIGZvY3VzYWJsZUl0ZW1zW2N1cnJlbnRJdGVtSW5kZXggLSAxXS5mb2N1cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVhbGl6YSBsYSBiw7pzcXVlZGEgaW50ZXJuYSBkZSBsb3MgaXRlbXMgZW4gZWwgY29tcG9uZW50ZVxuICAgKiBAcGFyYW0gdmFsdWUgdGV4dG8gZGUgYsO6c3F1ZWRhXG4gICAqL1xuICBvblNlYXJjaCh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmRpc2FibGVEZWZhdWx0U2VhcmNoKSB7XG4gICAgICBpZiAodmFsdWUgJiYgdmFsdWUubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLnNlYXJjaE1hdGNoVmFsdWVzID0gdGhpcy5hbGxJdGVtcy5maWx0ZXIoaXRlbSA9PiBpdGVtLm1hdGNoZXNUZXh0KHZhbHVlKSkubWFwKGl0ZW0gPT4gaXRlbS52YWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNlYXJjaE1hdGNoVmFsdWVzID0gbnVsbDtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2VhcmNoTWF0Y2hWYWx1ZXNDaGFuZ2UuZW1pdCh0aGlzLnNlYXJjaE1hdGNoVmFsdWVzKTtcbiAgICB9XG4gIH1cblxuICAvKlxuICAgKiBFdmVudG9zIGFsIGNhbWJpYXIgcHJvcGllZGFkZXNcbiAgICovXG5cbiAgLyoqXG4gICAqIENvbmZpZ3VyYSBsb3MgaXRlbXMgZGVsIMOhcmJvbFxuICAgKi9cbiAgY29uZmlndXJlQWxsSXRlbXMoaXNWYWx1ZUNoYW5nZSA9IGZhbHNlKTogdm9pZCB7XG5cbiAgICBpZiAoIXRoaXMuX2FscmVhZHlDb25maWd1cmluZ0l0ZW1zKSB7XG4gICAgICB0aGlzLl9hbHJlYWR5Q29uZmlndXJpbmdJdGVtcyA9IHRydWU7XG5cbiAgICAgIC8vIExvIHJlYWxpemFtb3MgZGVzZGUgdW4gc2V0VGltZW91dCBwYXJhIHF1ZSB0b2RvcyBsb3MgaW5wdXRzLCB2YWx1ZXMgeSBkZW3DoXMgdml2YW4gZW4gcGF6IHkgYXJtb27DrWFcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5hbGxJdGVtcz8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHRoaXMuY2xlYXJTdWJzY3JpcHRpb25zKHRoaXMuX2l0ZW1MaXN0Q2hlY2tlZFN1YnNjcmlwdGlvbnMpO1xuICAgICAgICAgIHRoaXMuY2xlYXJTdWJzY3JpcHRpb25zKHRoaXMuX2l0ZW1MaXN0UXVpdEZvY3VzU3Vic2NyaXB0aW9ucyk7XG4gICAgICAgICAgdGhpcy5hbGxJdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgaXRlbS5wYXJlbnROYW1lID0gdGhpcy5uYW1lO1xuICAgICAgICAgICAgaXRlbS50eXBlID0gdGhpcy50eXBlO1xuICAgICAgICAgICAgaXRlbS5pbmhlcml0ZWREZXNjcmliZWRCeSA9IHRoaXMuZ2V0RGVzY3JpYmVkQnlGb3JJdGVtcygpO1xuICAgICAgICAgICAgaXRlbS5pbmhlcml0ZWRFeHBhbmRlZEZpcnN0TGV2ZWwgPSB0aGlzLmV4cGFuZGVkRmlyc3RMZXZlbDtcbiAgICAgICAgICAgIGl0ZW0uaW5oZXJpdGVkRGVjb3VwbGVDaGlsZEZyb21QYXJlbnQgPSB0aGlzLmRlY291cGxlQ2hpbGRGcm9tUGFyZW50O1xuICAgICAgICAgICAgaXRlbS50cmVlRGlzYWJsZWQgPSB0aGlzLmRpc2FibGVkO1xuICAgICAgICAgICAgaWYgKCh0aGlzLnZhbHVlICYmIHRoaXMudmFsdWUubGVuZ3RoID4gMCkgfHwgaXNWYWx1ZUNoYW5nZSkge1xuICAgICAgICAgICAgICBjb25zdCB2YWx1ZUxpc3QgPSB0aGlzLnZhbHVlID8gdGhpcy52YWx1ZSA6IFtdO1xuICAgICAgICAgICAgICBpdGVtLnNldENoZWNrZWQoISF2YWx1ZUxpc3QuZmluZCh2ID0+IHYgPT09IGl0ZW0udmFsdWUpLCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGl0ZW0uZGV0ZWN0Q2hhbmdlcygpO1xuXG4gICAgICAgICAgICBjb25zdCBjaGVja2VkU3Vic2NyaXB0aW9uID0gaXRlbS5jaGVja2VkQ2hhbmdlRm9yVHJlZS5zdWJzY3JpYmUoKCkgPT4gdGhpcy51cGRhdGVWYWx1ZUZyb21JdGVtcyhpdGVtKSk7XG4gICAgICAgICAgICB0aGlzLl9pdGVtTGlzdENoZWNrZWRTdWJzY3JpcHRpb25zLnB1c2goY2hlY2tlZFN1YnNjcmlwdGlvbik7XG5cbiAgICAgICAgICAgIGNvbnN0IHF1aXRGb2N1c1N1YnNjcmlwdGlvbiA9IGl0ZW0ucXVpdEZvY3VzLnN1YnNjcmliZShvcHRpb25zID0+IHRoaXMuaGFuZGxlSXRlbVF1aXRGb2N1cyhvcHRpb25zKSk7XG4gICAgICAgICAgICB0aGlzLl9pdGVtTGlzdFF1aXRGb2N1c1N1YnNjcmlwdGlvbnMucHVzaChxdWl0Rm9jdXNTdWJzY3JpcHRpb24pO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgdGhpcy5zZXRFcnJvckluSXRlbXModGhpcy5oYXNFcnJvck1lc3NhZ2VDb21wb25lbnQoKSk7XG5cbiAgICAgICAgICB0aGlzLmJ1aWxkVHJlZSgpO1xuICAgICAgICAgIGlmICghdGhpcy52YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVWYWx1ZUZyb21JdGVtcygpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh0aGlzLnNlYXJjaE1hdGNoVmFsdWVzKSB7XG4gICAgICAgICAgICB0aGlzLm9uU2VhcmNoTWF0Y2hWYWx1ZXNDaGFuZ2UoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5hbGxJdGVtcyAmJiAhdGhpcy5fYWxsSXRlbUxpc3RTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICB0aGlzLl9hbGxJdGVtTGlzdFN1YnNjcmlwdGlvbiA9IHRoaXMuYWxsSXRlbXMuY2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4gdGhpcy5jb25maWd1cmVBbGxJdGVtcygpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB0aGlzLl9hbHJlYWR5Q29uZmlndXJpbmdJdGVtcyA9IGZhbHNlO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE1vZGlmaWNhIGxvcyBpdGVtcyB2aXNpYmxlcyBzZWfDum4gZWwgZmlsdHJvIGRlIGLDunNxdWVkYVxuICAgKi9cbiAgb25TZWFyY2hNYXRjaFZhbHVlc0NoYW5nZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5hbGxJdGVtcykge1xuICAgICAgdGhpcy5hbGxJdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICBpdGVtLmluaGVyaXRlZE1hdGNoZXNTZWFyY2ggPSB0cnVlO1xuICAgICAgfSk7XG5cbiAgICAgIGlmICh0aGlzLnNlYXJjaE1hdGNoVmFsdWVzICE9PSBudWxsICYmIHRoaXMuc2VhcmNoTWF0Y2hWYWx1ZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLmFsbEl0ZW1zLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuc2VhcmNoTWF0Y2hWYWx1ZXMuZmluZEluZGV4KHZhbHVlID0+IGl0ZW0udmFsdWUgPT09IHZhbHVlKSA8IDApIHtcbiAgICAgICAgICAgIGl0ZW0uaW5oZXJpdGVkTWF0Y2hlc1NlYXJjaCA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKlxuICAgKiBHZXR0ZXJzIGFuZCBzZXR0ZXJzXG4gICAqL1xuXG4gIGdldElkUHJlZml4KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaWRQcmVmaXggPyB0aGlzLmlkUHJlZml4IDogdGhpcy5uYW1lO1xuICB9XG5cbiAgZ2V0RGVzY3JpYmVkQnkoKTogc3RyaW5nIHtcbiAgICBsZXQgZGVzY3JpYmVkQnkgPSAnJztcbiAgICBpZiAodGhpcy5kZXNjcmliZWRCeSkge1xuICAgICAgZGVzY3JpYmVkQnkgPSB0aGlzLmRlc2NyaWJlZEJ5O1xuICAgIH1cblxuICAgIGlmICh0aGlzLmhhc0hpbnRDb21wb25lbnQoKSAmJiB0aGlzLmhpbnRDb21wb25lbnQuaWQpIHtcbiAgICAgIGRlc2NyaWJlZEJ5ID0gZGVzY3JpYmVkQnkgKyAnICcgKyB0aGlzLmhpbnRDb21wb25lbnQuaWQ7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaGFzRXJyb3JNZXNzYWdlQ29tcG9uZW50KCkgJiYgdGhpcy5lcnJvck1lc3NhZ2VDb21wb25lbnQuaWQpIHtcbiAgICAgIGRlc2NyaWJlZEJ5ID0gZGVzY3JpYmVkQnkgKyAnICcgKyB0aGlzLmVycm9yTWVzc2FnZUNvbXBvbmVudC5pZDtcbiAgICB9XG5cbiAgICByZXR1cm4gZGVzY3JpYmVkQnk7XG4gIH1cblxuICAvKipcbiAgICogRGV2dWVsdmUgZWwgdmFsb3IgZGUgZGVzY3JpYmVkQnkgcXVlIHNlIHRyYW5zbWl0aXLDoSBhIGxvcyBpdGVtc1xuICAgKi9cbiAgZ2V0RGVzY3JpYmVkQnlGb3JJdGVtcygpOiBzdHJpbmcge1xuICAgIGxldCBkZXNjcmliZWRCeTtcbiAgICBpZiAodGhpcy5oYXNGaWVsZHNldENvbXBvbmVudCgpKSB7XG4gICAgICBkZXNjcmliZWRCeSA9IHRoaXMuZmllbGRzZXRDb21wb25lbnQuZGVzY3JpYmVkQnk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlc2NyaWJlZEJ5ID0gdGhpcy5nZXREZXNjcmliZWRCeSgpO1xuICAgIH1cblxuICAgIHJldHVybiBkZXNjcmliZWRCeTtcbiAgfVxuXG4gIGhhc0ZpZWxkc2V0Q29tcG9uZW50KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMuZmllbGRzZXRDb21wb25lbnQ7XG4gIH1cblxuICAvKipcbiAgICogT3ZlcnJpZGVzIHN1cGVyLmdldEhpbnRJZCgpO1xuICAgKi9cbiAgZ2V0SGludElkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaWRQcmVmaXggPyB0aGlzLmlkUHJlZml4ICsgJy1oaW50JyA6IHRoaXMuaGludENvbXBvbmVudD8uaWQ7XG4gIH1cblxuICAvKipcbiAgICogT3ZlcnJpZGVzIHN1cGVyLmdldEhpbnRJZCgpO1xuICAgKi9cbiAgZ2V0RXJyb3JJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmlkUHJlZml4ID8gdGhpcy5pZFByZWZpeCArICctZXJyb3InIDogdGhpcy5lcnJvck1lc3NhZ2VDb21wb25lbnQ/LmlkO1xuICB9XG5cbiAgLypcbiAgICogRnVuY2lvbmVzIHBhcmEgcmVlbXBsYXphciBlbCBjb250ZW5pZG8gZGVsIGZpZWxkc2V0LCBsYWJlbCwgaGludCBvIGVycm9ybWVzc2FnZVxuICAgKi9cblxuICBvdmVycmlkZUZpZWxkc2V0UGFyYW1zKGZpZWxkc2V0OiBGaWVsZHNldENvbXBvbmVudCk6IHZvaWQge1xuICAgIGZpZWxkc2V0LmNhbGxlciA9IHRoaXMuaW5uZXJIdG1sO1xuICAgIGZpZWxkc2V0LmVycm9ySWQgPSB0aGlzLmdldEVycm9ySWQoKTtcbiAgICBmaWVsZHNldC5kZXNjcmliZWRCeSA9IHRoaXMuZ2V0RGVzY3JpYmVkQnkoKTtcbiAgICBmaWVsZHNldC5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBvdmVycmlkZVNlYXJjaEJhclBhcmFtcyhzZWFyY2hiYXI6IFNlYXJjaEJhckNvbXBvbmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGRlZmF1bHRPbkNoYW5nZSA9IHNlYXJjaGJhci5vbkNoYW5nZTtcbiAgICBjb25zdCBuZXdPbkNoYW5nZSA9IHZhbHVlID0+IHtcbiAgICAgIHRoaXMub25TZWFyY2godmFsdWUpO1xuICAgICAgZGVmYXVsdE9uQ2hhbmdlKHZhbHVlKTtcbiAgICB9XG4gICAgc2VhcmNoYmFyLnJlZ2lzdGVyT25DaGFuZ2UobmV3T25DaGFuZ2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlIGxsYW1hIGRlc2RlIEZvcm1GaWVsZFxuICAgKi9cbiAgb3ZlcnJpZGVIaW50UGFyYW1zKGhpbnQpOiB2b2lkIHtcbiAgICBoaW50LmlkID0gdGhpcy5nZXRIaW50SWQoKTtcbiAgICBoaW50LmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZSBsbGFtYSBkZXNkZSBGb3JtRmllbGRcbiAgICovXG4gIG92ZXJyaWRlRXJyb3JNZXNzYWdlUGFyYW1zKGVycm9yTWVzc2FnZSk6IHZvaWQge1xuICAgIGVycm9yTWVzc2FnZS5pZCA9IHRoaXMuZ2V0RXJyb3JJZCgpO1xuICAgIHRoaXMuc2V0RXJyb3JJbkl0ZW1zKHRoaXMuaGFzRXJyb3JNZXNzYWdlQ29tcG9uZW50KCkpO1xuICAgIGVycm9yTWVzc2FnZS5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICAvKipcbiAgICogU2UgbGxhbWEgZGVzZGUgRm9ybUZpZWxkXG4gICAqL1xuICBvbkRlbGV0ZUVycm9yTWVzc2FnZShlcnJvck1lc3NhZ2UpOiB2b2lkIHtcbiAgICB0aGlzLnNldEVycm9ySW5JdGVtcyh0aGlzLmhhc0Vycm9yTWVzc2FnZUNvbXBvbmVudCgpKTtcbiAgfVxuXG4gIC8qXG4gICAqIE3DqXRvZG9zIHByaXZhZG9zXG4gICAqL1xuXG4gIC8qKlxuICAgKiBDb25maWd1cmEgbGEgZXN0cnVjdHVyYSBkZWwgw6FyYm9sXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIGJ1aWxkVHJlZSgpOiB2b2lkIHtcblxuICAgIC8vIFNlIGNyZWEgdW4gbWFwYSBwYXJhIHRlbmVyIGFjY2VzaWJsZXMgbG9zIGl0ZW1zIHBvciBrZXkgeSBzZSBib3JyYW4gbG9zIGxpc3RhZG9zIGV4aXN0ZW50ZXNcbiAgICBjb25zdCBpdGVtTWFwID0ge31cbiAgICB0aGlzLnJvb3RJdGVtcyA9IFtdO1xuICAgIHRoaXMuYWxsSXRlbXMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgIGNvbnN0IGtleSA9IGl0ZW0uZ2V0S2V5KCk7XG4gICAgICBpdGVtTWFwW2tleV0gPSBpdGVtO1xuICAgICAgaWYgKGl0ZW0uc3ViKSB7XG4gICAgICAgIGl0ZW0uc3ViLml0ZW1MaXN0ID0gW107XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBTZSBhw7FhZGVuIGxvcyBpdGVtcyBhIGxvcyBsaXN0YWRvcyBjb3JyZXNwb25kaWVudGVzXG4gICAgdGhpcy5hbGxJdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgY29uc3QgcGFyZW50S2V5ID0gaXRlbS5nZXRQYXJlbnRLZXkoKTtcbiAgICAgIGlmIChwYXJlbnRLZXkgPT09ICdyb290Jykge1xuICAgICAgICB0aGlzLnJvb3RJdGVtcy5wdXNoKGl0ZW0pO1xuICAgICAgfSBlbHNlIGlmIChwYXJlbnRLZXkpIHtcbiAgICAgICAgY29uc3Qgc3ViID0gaXRlbU1hcFtwYXJlbnRLZXldLnN1YjtcbiAgICAgICAgaWYgKHN1Yikge1xuICAgICAgICAgIHN1Yi5pdGVtTGlzdC5wdXNoKGl0ZW0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBTZSBjb25maWd1cmFuIGxvcyBpdGVtcyBkZXNkZSByb290XG4gICAgbGV0IG9yZGVyID0gMDtcbiAgICB0aGlzLnJvb3RJdGVtcy5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgaXRlbS5zZXRTdWJMZXZlbCgwKTtcbiAgICAgIGl0ZW0uc2V0RGVmYXVsdElkKGAke3RoaXMuaWRQcmVmaXh9LSR7aW5kZXh9YCk7XG4gICAgICBpdGVtLnJlZnJlc2hBbGxQYXJlbnRzRXhwYW5kZWRSZWN1cnNpdmUodHJ1ZSk7XG4gICAgICBpZiAoIXRoaXMuZGVjb3VwbGVDaGlsZEZyb21QYXJlbnQpIHtcbiAgICAgICAgaXRlbS5zZXRDaGVja2VkQXV0b21hdGljYWxseURlcGVuZGluZ09uQ2hpbGRyZW4oKTtcbiAgICAgIH1cbiAgICAgIG9yZGVyID0gaXRlbS5zZXRPcmRlclJlY3Vyc2l2ZWx5KG9yZGVyKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaSB0aWVuZSB1biBtZW5zYWplIGRlIGVycm9yLCBzZSBpbmRpY2EgYSBsb3MgaXRlbXNcbiAgICogQHBhcmFtIGhhc0Vycm9yXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIHNldEVycm9ySW5JdGVtcyhoYXNFcnJvcjogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmICh0aGlzLmFsbEl0ZW1zPy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmFsbEl0ZW1zLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgIGl0ZW0uaW5oZXJpdGVkSGFzRXJyb3IgPSBoYXNFcnJvcjtcbiAgICAgICAgaXRlbS5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTGltcGlhIHVuIGxpc3RhZG8gZGUgc3Vic2NyaXBjaW9uZXNcbiAgICogQHBhcmFtIHN1YnNjcmlwdGlvbkxpc3RcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgY2xlYXJTdWJzY3JpcHRpb25zKHN1YnNjcmlwdGlvbkxpc3Q6IFN1YnNjcmlwdGlvbltdKTogdm9pZCB7XG4gICAgaWYgKHN1YnNjcmlwdGlvbkxpc3QubGVuZ3RoID4gMCkge1xuICAgICAgc3Vic2NyaXB0aW9uTGlzdC5mb3JFYWNoKHMgPT4gcy51bnN1YnNjcmliZSgpKTtcbiAgICAgIHN1YnNjcmlwdGlvbkxpc3Quc3BsaWNlKDAsIHN1YnNjcmlwdGlvbkxpc3QubGVuZ3RoKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEZXZ1ZWx2ZSBsb3MgaXRlbXMgZGVsIMOhcmJvbCBvcmRlbmFkb3NcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgZ2V0QWxsSXRlbXNJbk9yZGVyKCk6IFRyZWVJdGVtQ29tcG9uZW50W10ge1xuICAgIGxldCBsaXN0ID0gW107XG4gICAgaWYgKHRoaXMuYWxsSXRlbXMpIHtcbiAgICAgIGxpc3QgPSB0aGlzLmFsbEl0ZW1zLnRvQXJyYXkoKS5zb3J0KChhLCBiKSA9PiBhLm9yZGVySW5UcmVlID4gYi5vcmRlckluVHJlZSA/IDEgOiAtMSlcbiAgICB9XG4gICAgcmV0dXJuIGxpc3RcbiAgfVxuICBcblxufVxuIiwiXG48bmctdGVtcGxhdGUgI2lubmVySHRtbD5cbiAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiZGVzeS1oaW50XCI+PC9uZy1jb250ZW50PlxuICA8bmctY29udGVudCBzZWxlY3Q9XCJkZXN5LWVycm9yLW1lc3NhZ2VcIj48L25nLWNvbnRlbnQ+XG4gIDxuZy1jb250ZW50IHNlbGVjdD1cImRlc3ktc2VhcmNoLWJhclwiPjwvbmctY29udGVudD5cbiAgPHVsIFtjbGFzc109XCJbJ2MtdHJlZScsIGNsYXNzZXNdIHwgbWFrZUh0bWxMaXN0XCJcbiAgICAgIFthdHRyLnJvbGVdPVwicm9sZSA/IHJvbGUgOiAndHJlZSdcIlxuICAgICAgW2Rlc3lBcHBBY2Nlc3NpYmlsaXR5XT1cInRoaXNcIj5cbiAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gIDwvdWw+XG48L25nLXRlbXBsYXRlPlxuXG48IS0tIHRyZWUgLS0+XG48ZGl2IFtjbGFzc109XCJbJ2MtZm9ybS1ncm91cCcsIGZvcm1Hcm91cENsYXNzZXNdIHwgbWFrZUh0bWxMaXN0XCJcbiAgICAgW25nQ2xhc3NdPVwieydjLWZvcm0tZ3JvdXAtLWVycm9yJzogKGhhc0Vycm9yc01lc3NhZ2UoKSB8fCBmb3JtR3JvdXBDbGFzc2VzID09PSAnYy1mb3JtLWdyb3VwLS1lcnJvcicpIH1cIj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImhhc0ZpZWxkc2V0Q29tcG9uZW50KCk7IGVsc2UgaW5uZXJIdG1sXCI+XG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiZGVzeS1maWVsZHNldFwiPjwvbmctY29udGVudD5cbiAgPC9uZy1jb250YWluZXI+XG48L2Rpdj4iXX0=
|
|
359
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kZXN5LWFuZ3VsYXIvc3JjL2xpYi9kZXN5LWZvcm1zL2NvbXBvbmVudHMvdHJlZS90cmVlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rlc3ktYW5ndWxhci9zcmMvbGliL2Rlc3ktZm9ybXMvY29tcG9uZW50cy90cmVlL3RyZWUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFDTCxpQkFBaUIsRUFDakIsU0FBUyxFQUNULGVBQWUsRUFBRSxZQUFZLEVBQzdCLFVBQVUsRUFDVixLQUFLLEVBR0wsTUFBTSxFQUFFLFNBQVMsRUFDRixXQUFXLEVBQUUsU0FBUyxFQUN0QyxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVuRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx5REFBeUQsQ0FBQztBQUMzRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwyREFBMkQsQ0FBQztBQUM5RixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNuRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN4RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUV4RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQzs7Ozs7QUFhcEUsTUFBTSxPQUFPLGFBQWMsU0FBUSxrQkFBeUI7SUFzQzFELFlBQW9CLGNBQWlDO1FBQ25ELEtBQUssRUFBRSxDQUFDO1FBRFUsbUJBQWMsR0FBZCxjQUFjLENBQW1CO1FBM0I1Qyx1QkFBa0IsR0FBRyxJQUFJLENBQUM7UUFDMUIsNEJBQXVCLEdBQUcsS0FBSyxDQUFD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LHlCQUF5QixFQUFDLENBQUM7OEJBQ1Qsa0JBQWtCO3lEQUFDOzRGQTNCakUsYUFBYTtrQkFYekIsU0FBUzsrQkFDRSxXQUFXLGFBRVY7d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsY0FBYyxDQUFDOzRCQUM1QyxLQUFLLEVBQUUsSUFBSTt5QkFDWjtxQkFDRjt3R0FJUSxFQUFFO3NCQUFWLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUVHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFFRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csdUJBQXVCO3NCQUEvQixLQUFLO2dCQUVHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFHRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0ksdUJBQXVCO3NCQUFoQyxNQUFNO2dCQUdvRCxRQUFRO3NCQUFsRSxlQUFlO3VCQUFDLGlCQUFpQixFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRTtnQkFHckIsaUJBQWlCO3NCQUFwRCxlQUFlO3VCQUFDLGlCQUFpQjtnQkFHRyxrQkFBa0I7c0JBQXRELGVBQWU7dUJBQUMsa0JBQWtCO2dCQUVPLFNBQVM7c0JBQWxELFNBQVM7dUJBQUMsV0FBVyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZHJlbiwgRXZlbnRFbWl0dGVyLFxuICBmb3J3YXJkUmVmLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE91dHB1dCwgUXVlcnlMaXN0LFxuICBTaW1wbGVDaGFuZ2VzLCBUZW1wbGF0ZVJlZiwgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgeyBEZXN5Q29udGVudENoaWxkIH0gZnJvbSBcIi4uLy4uLy4uL3NoYXJlZC9kZWNvcmF0b3JzL2Rlc3ktY29udGVudC1jaGlsZC5kZWNvcmF0b3JcIjtcbmltcG9ydCB7IERlc3lPbklucHV0Q2hhbmdlIH0gZnJvbSBcIi4uLy4uLy4uL3NoYXJlZC9kZWNvcmF0b3JzL2Rlc3ktb24taW5wdXQtY2hhbmdlLmRlY29yYXRvclwiO1xuaW1wb3J0IHsgRmllbGRzZXRDb21wb25lbnQgfSBmcm9tIFwiLi4vZmllbGRzZXQvZmllbGRzZXQuY29tcG9uZW50XCI7XG5pbXBvcnQgeyBGb3JtRmllbGRDb21wb25lbnQgfSBmcm9tIFwiLi4vZm9ybS1maWVsZC9mb3JtLWZpZWxkLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgU2VhcmNoQmFyQ29tcG9uZW50IH0gZnJvbSBcIi4uL3NlYXJjaC1iYXIvc2VhcmNoLWJhci5jb21wb25lbnRcIjtcbmltcG9ydCB7IFF1aXRUcmVlSXRlbUZvY3VzT3B0aW9ucyB9IGZyb20gXCIuL2ludGVyZmFjZXMvcXVpdC10cmVlLWl0ZW0tZm9jdXMtb3B0aW9uc1wiO1xuaW1wb3J0IHsgVHJlZUl0ZW1Db21wb25lbnQgfSBmcm9tIFwiLi90cmVlLWl0ZW0vdHJlZS1pdGVtLmNvbXBvbmVudFwiO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdkZXN5LXRyZWUnLFxuICB0ZW1wbGF0ZVVybDogJy4vdHJlZS5jb21wb25lbnQuaHRtbCcsXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gVHJlZUNvbXBvbmVudCksXG4gICAgICBtdWx0aTogdHJ1ZVxuICAgIH1cbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBUcmVlQ29tcG9uZW50IGV4dGVuZHMgRm9ybUZpZWxkQ29tcG9uZW50PGFueVtdPiBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcblxuICBASW5wdXQoKSBpZDogc3RyaW5nO1xuICBASW5wdXQoKSBpZFByZWZpeDogc3RyaW5nO1xuICBASW5wdXQoKSBjbGFzc2VzOiBzdHJpbmc7XG4gIEBJbnB1dCgpIG5hbWU6IHN0cmluZztcbiAgQElucHV0KCkgdHlwZTogJ3JhZGlvJ3wnY2hlY2tib3gnfG51bGx8dW5kZWZpbmVkO1xuICBASW5wdXQoKSBkZXNjcmliZWRCeTogc3RyaW5nO1xuXG4gIEBJbnB1dCgpIGZvcm1Hcm91cENsYXNzZXM6IGFueTtcblxuICBASW5wdXQoKSBleHBhbmRlZEZpcnN0TGV2ZWwgPSB0cnVlO1xuICBASW5wdXQoKSBkZWNvdXBsZUNoaWxkRnJvbVBhcmVudCA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpIGRpc2FibGVEZWZhdWx0U2VhcmNoID0gZmFsc2U7XG5cbiAgQERlc3lPbklucHV0Q2hhbmdlKCdvblNlYXJjaE1hdGNoVmFsdWVzQ2hhbmdlJylcbiAgQElucHV0KCkgc2VhcmNoTWF0Y2hWYWx1ZXM6IHN0cmluZ1tdO1xuICBAT3V0cHV0KCkgc2VhcmNoTWF0Y2hWYWx1ZXNDaGFuZ2U6IEV2ZW50RW1pdHRlcjxzdHJpbmdbXT4gPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZ1tdPigpO1xuXG4gIEBEZXN5T25JbnB1dENoYW5nZSgnY29uZmlndXJlQWxsSXRlbXMnKVxuICBAQ29udGVudENoaWxkcmVuKFRyZWVJdGVtQ29tcG9uZW50LCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0pIGFsbEl0ZW1zOiBRdWVyeUxpc3Q8VHJlZUl0ZW1Db21wb25lbnQ+O1xuXG4gIEBEZXN5Q29udGVudENoaWxkKHsgb25TZXRDYWxsYmFja05hbWU6ICdvdmVycmlkZUZpZWxkc2V0UGFyYW1zJ30pXG4gIEBDb250ZW50Q2hpbGRyZW4oRmllbGRzZXRDb21wb25lbnQpIGZpZWxkc2V0Q29tcG9uZW50OiBGaWVsZHNldENvbXBvbmVudDtcblxuICBARGVzeUNvbnRlbnRDaGlsZCh7IG9uU2V0Q2FsbGJhY2tOYW1lOiAnb3ZlcnJpZGVTZWFyY2hCYXJQYXJhbXMnfSlcbiAgQENvbnRlbnRDaGlsZHJlbihTZWFyY2hCYXJDb21wb25lbnQpIHNlYXJjaEJhckNvbXBvbmVudDogU2VhcmNoQmFyQ29tcG9uZW50O1xuXG4gIEBWaWV3Q2hpbGQoJ2lubmVySHRtbCcsIHsgc3RhdGljOiB0cnVlIH0pIGlubmVySHRtbDogVGVtcGxhdGVSZWY8YW55PjtcblxuICBwcml2YXRlIHJvb3RJdGVtczogVHJlZUl0ZW1Db21wb25lbnRbXSA9IFtdO1xuICBwcml2YXRlIF9pdGVtTGlzdFN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIF9hbGxJdGVtTGlzdFN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIF9pdGVtTGlzdENoZWNrZWRTdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xuICBwcml2YXRlIF9pdGVtTGlzdFF1aXRGb2N1c1N1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdID0gW107XG4gIHByaXZhdGUgX2FscmVhZHlDb25maWd1cmluZ0l0ZW1zID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5jbGVhclN1YnNjcmlwdGlvbnModGhpcy5faXRlbUxpc3RDaGVja2VkU3Vic2NyaXB0aW9ucyk7XG4gICAgdGhpcy5jbGVhclN1YnNjcmlwdGlvbnModGhpcy5faXRlbUxpc3RRdWl0Rm9jdXNTdWJzY3JpcHRpb25zKTtcbiAgICB0aGlzLl9pdGVtTGlzdFN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLl9hbGxJdGVtTGlzdFN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICB0aGlzLmNvbmZpZ3VyZUFsbEl0ZW1zKCk7XG4gIH1cblxuICAvKipcbiAgICogU2Ugc29icmVzY3JpYmUgZWwgdmFsb3IgcGFyYSBhY3R1YWxpemFyIGxvcyBpdGVtc1xuICAgKiBAT3ZlcnJpZGVcbiAgICovXG4gIHdyaXRlVmFsdWUodmFsdWU6IGFueSk6IHZvaWQge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLmNvbmZpZ3VyZUFsbEl0ZW1zKHRydWUpO1xuICAgIHRoaXMub25DaGFuZ2UodGhpcy52YWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogU2Ugc29icmVzY3JpYmUgZWwgdmFsb3IgcGFyYSBhY3R1YWxpemFyIGxvcyBpdGVtc1xuICAgKi9cbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgc3VwZXIuc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkKTtcbiAgICB0aGlzLmNvbmZpZ3VyZUFsbEl0ZW1zKCk7XG4gIH1cblxuICAvKlxuICAgKiBFdmVudG9zXG4gICAqL1xuXG4gIC8qKlxuICAgKiBBY3R1YWxpemEgZWwgdmFsb3IgZGVsIGNvbXBvbmVudGUgYWwgY2hlY2txdWVhcnNlIHVuIMOtdGVtXG4gICAqIEBwYXJhbSBvcmlnaW5JdGVtIMOtdGVtIG1vZGlmaWNhZG9cbiAgICovXG4gIHVwZGF0ZVZhbHVlRnJvbUl0ZW1zKG9yaWdpbkl0ZW0/OiBUcmVlSXRlbUNvbXBvbmVudCk6IHZvaWQge1xuXG4gICAgLy8gU2kgZXMgcmFkaW8sIHNlIGRlc2FjdGl2YW4gZWwgcmVzdG8gZGUgaXRlbXMgY3VhbmRvIHNlIGFjdGl2YSBvdHJvIGl0ZW1cbiAgICBpZiAodGhpcy50eXBlICE9PSAnY2hlY2tib3gnKSB7XG4gICAgICBjb25zdCBpdGVtcyA9IHRoaXMuZ2V0QWxsSXRlbXNJbk9yZGVyKCk7XG4gICAgICBpdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICBpZiAoaXRlbSAhPT0gb3JpZ2luSXRlbSAmJiBpdGVtLmNoZWNrZWQpIHtcbiAgICAgICAgICBpdGVtLnNldENoZWNrZWQoZmFsc2UsIHRydWUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKCF0aGlzLmRlY291cGxlQ2hpbGRGcm9tUGFyZW50KSB7XG4gICAgICB0aGlzLnJvb3RJdGVtcy5mb3JFYWNoKGl0ZW0gPT4gaXRlbS5zZXRDaGVja2VkQXV0b21hdGljYWxseURlcGVuZGluZ09uQ2hpbGRyZW4oKSk7XG4gICAgfVxuXG4gICAgdGhpcy52YWx1ZSA9IFtdO1xuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5nZXRBbGxJdGVtc0luT3JkZXIoKTtcbiAgICBpdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgaWYgKGl0ZW0uY2hlY2tlZCkge1xuICAgICAgICB0aGlzLnZhbHVlLnB1c2goaXRlbS52YWx1ZSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5vbkNoYW5nZSh0aGlzLnZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXN0aW9uYSBjdWFuZG8gZWwgZm9jbyBhYmFuZG9uYSB1biDDrXRlbSBkZXNkZSB1biBldmVudG8gZGUgdGVjbGFkbyBjb250cm9sYWRvXG4gICAqIEBwYXJhbSBvcHRpb25zXG4gICAqL1xuICBoYW5kbGVJdGVtUXVpdEZvY3VzKG9wdGlvbnM6IFF1aXRUcmVlSXRlbUZvY3VzT3B0aW9ucyk6IHZvaWQge1xuICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMubmV4dEVsZW1lbnQpIHtcbiAgICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5nZXRBbGxJdGVtc0luT3JkZXIoKTtcbiAgICAgIGNvbnN0IGZvY3VzYWJsZUl0ZW1zID0gaXRlbXMuZmlsdGVyKGl0ZW0gPT4gIWl0ZW0uaXNIaWRkZW4oKSAmJiAhaXRlbS5kaXNhYmxlZCAmJiBpdGVtLmFsbFBhcmVudHNFeHBhbmRlZCk7XG4gICAgICBzd2l0Y2ggKG9wdGlvbnMubmV4dEVsZW1lbnQpIHtcbiAgICAgICAgY2FzZSBcImZpcnN0XCI6XG4gICAgICAgICAgZm9jdXNhYmxlSXRlbXNbMF0uZm9jdXMoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcImxhc3RcIjpcbiAgICAgICAgICBmb2N1c2FibGVJdGVtc1tmb2N1c2FibGVJdGVtcy5sZW5ndGggLSAxXS5mb2N1cygpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwicGFyZW50XCI6XG4gICAgICAgICAgY29uc3QgY3VycmVudFN1YkxldmVsID0gb3B0aW9ucy5jdXJyZW50SXRlbS5zdWJMZXZlbDtcbiAgICAgICAgICBpZiAoY3VycmVudFN1YkxldmVsID4gMCkge1xuICAgICAgICAgICAgY29uc3QgY3VycmVudEl0ZW1JbmRleCA9IGZvY3VzYWJsZUl0ZW1zLmZpbmRJbmRleChpdGVtID0+IGl0ZW0gPT09IG9wdGlvbnMuY3VycmVudEl0ZW0pO1xuICAgICAgICAgICAgY29uc3QgcGFyZW50ID0gZm9jdXNhYmxlSXRlbXMuc2xpY2UoMCwgY3VycmVudEl0ZW1JbmRleCkucmV2ZXJzZSgpLmZpbmQoaXRlbSA9PiBpdGVtLnN1YkxldmVsIDwgY3VycmVudFN1YkxldmVsKTtcbiAgICAgICAgICAgIGlmIChwYXJlbnQpIHtcbiAgICAgICAgICAgICAgcGFyZW50LmZvY3VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiZmlyc3RDaGlsZFwiOlxuICAgICAgICBjYXNlIFwibmV4dFwiOlxuICAgICAgICAgIGlmIChvcHRpb25zLmN1cnJlbnRJdGVtKSB7XG4gICAgICAgICAgICBsZXQgY3VycmVudEl0ZW1JbmRleCA9IGZvY3VzYWJsZUl0ZW1zLmZpbmRJbmRleChpdGVtID0+IGl0ZW0gPT09IG9wdGlvbnMuY3VycmVudEl0ZW0pO1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRJdGVtSW5kZXggPCBmb2N1c2FibGVJdGVtcy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgIGZvY3VzYWJsZUl0ZW1zW2N1cnJlbnRJdGVtSW5kZXggKyAxXS5mb2N1cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcInByZXZpb3VzXCI6XG4gICAgICAgICAgaWYgKG9wdGlvbnMuY3VycmVudEl0ZW0pIHtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRJdGVtSW5kZXggPSBmb2N1c2FibGVJdGVtcy5maW5kSW5kZXgoaXRlbSA9PiBpdGVtID09PSBvcHRpb25zLmN1cnJlbnRJdGVtKTtcbiAgICAgICAgICAgIGlmIChjdXJyZW50SXRlbUluZGV4ID4gMCkge1xuICAgICAgICAgICAgICBmb2N1c2FibGVJdGVtc1tjdXJyZW50SXRlbUluZGV4IC0gMV0uZm9jdXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlYWxpemEgbGEgYsO6c3F1ZWRhIGludGVybmEgZGUgbG9zIGl0ZW1zIGVuIGVsIGNvbXBvbmVudGVcbiAgICogQHBhcmFtIHZhbHVlIHRleHRvIGRlIGLDunNxdWVkYVxuICAgKi9cbiAgb25TZWFyY2godmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICghdGhpcy5kaXNhYmxlRGVmYXVsdFNlYXJjaCkge1xuICAgICAgaWYgKHZhbHVlICYmIHZhbHVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy5zZWFyY2hNYXRjaFZhbHVlcyA9IHRoaXMuYWxsSXRlbXMuZmlsdGVyKGl0ZW0gPT4gaXRlbS5tYXRjaGVzVGV4dCh2YWx1ZSkpLm1hcChpdGVtID0+IGl0ZW0udmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zZWFyY2hNYXRjaFZhbHVlcyA9IG51bGw7XG4gICAgICB9XG4gICAgICB0aGlzLnNlYXJjaE1hdGNoVmFsdWVzQ2hhbmdlLmVtaXQodGhpcy5zZWFyY2hNYXRjaFZhbHVlcyk7XG4gICAgfVxuICB9XG5cbiAgLypcbiAgICogRXZlbnRvcyBhbCBjYW1iaWFyIHByb3BpZWRhZGVzXG4gICAqL1xuXG4gIC8qKlxuICAgKiBDb25maWd1cmEgbG9zIGl0ZW1zIGRlbCDDoXJib2xcbiAgICovXG4gIGNvbmZpZ3VyZUFsbEl0ZW1zKGlzVmFsdWVDaGFuZ2UgPSBmYWxzZSk6IHZvaWQge1xuXG4gICAgaWYgKCF0aGlzLl9hbHJlYWR5Q29uZmlndXJpbmdJdGVtcykge1xuICAgICAgdGhpcy5fYWxyZWFkeUNvbmZpZ3VyaW5nSXRlbXMgPSB0cnVlO1xuXG4gICAgICAvLyBMbyByZWFsaXphbW9zIGRlc2RlIHVuIHNldFRpbWVvdXQgcGFyYSBxdWUgdG9kb3MgbG9zIGlucHV0cywgdmFsdWVzIHkgZGVtw6FzIHZpdmFuIGVuIHBheiB5IGFybW9uw61hXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuYWxsSXRlbXM/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICB0aGlzLmNsZWFyU3Vic2NyaXB0aW9ucyh0aGlzLl9pdGVtTGlzdENoZWNrZWRTdWJzY3JpcHRpb25zKTtcbiAgICAgICAgICB0aGlzLmNsZWFyU3Vic2NyaXB0aW9ucyh0aGlzLl9pdGVtTGlzdFF1aXRGb2N1c1N1YnNjcmlwdGlvbnMpO1xuICAgICAgICAgIHRoaXMuYWxsSXRlbXMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgIGl0ZW0ucGFyZW50TmFtZSA9IHRoaXMubmFtZTtcbiAgICAgICAgICAgIGl0ZW0udHlwZSA9IHRoaXMudHlwZTtcbiAgICAgICAgICAgIGl0ZW0uaW5oZXJpdGVkRGVzY3JpYmVkQnkgPSB0aGlzLmdldERlc2NyaWJlZEJ5Rm9ySXRlbXMoKTtcbiAgICAgICAgICAgIGl0ZW0uaW5oZXJpdGVkRXhwYW5kZWRGaXJzdExldmVsID0gdGhpcy5leHBhbmRlZEZpcnN0TGV2ZWw7XG4gICAgICAgICAgICBpdGVtLmluaGVyaXRlZERlY291cGxlQ2hpbGRGcm9tUGFyZW50ID0gdGhpcy5kZWNvdXBsZUNoaWxkRnJvbVBhcmVudDtcbiAgICAgICAgICAgIGl0ZW0udHJlZURpc2FibGVkID0gdGhpcy5kaXNhYmxlZDtcbiAgICAgICAgICAgIGlmICgodGhpcy52YWx1ZSAmJiB0aGlzLnZhbHVlLmxlbmd0aCA+IDApIHx8IGlzVmFsdWVDaGFuZ2UpIHtcbiAgICAgICAgICAgICAgY29uc3QgdmFsdWVMaXN0ID0gdGhpcy52YWx1ZSA/IHRoaXMudmFsdWUgOiBbXTtcbiAgICAgICAgICAgICAgaXRlbS5zZXRDaGVja2VkKCEhdmFsdWVMaXN0LmZpbmQodiA9PiB2ID09PSBpdGVtLnZhbHVlKSwgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpdGVtLmRldGVjdENoYW5nZXMoKTtcblxuICAgICAgICAgICAgY29uc3QgY2hlY2tlZFN1YnNjcmlwdGlvbiA9IGl0ZW0uY2hlY2tlZENoYW5nZUZvclRyZWUuc3Vic2NyaWJlKCgpID0+IHRoaXMudXBkYXRlVmFsdWVGcm9tSXRlbXMoaXRlbSkpO1xuICAgICAgICAgICAgdGhpcy5faXRlbUxpc3RDaGVja2VkU3Vic2NyaXB0aW9ucy5wdXNoKGNoZWNrZWRTdWJzY3JpcHRpb24pO1xuXG4gICAgICAgICAgICBjb25zdCBxdWl0Rm9jdXNTdWJzY3JpcHRpb24gPSBpdGVtLnF1aXRGb2N1cy5zdWJzY3JpYmUob3B0aW9ucyA9PiB0aGlzLmhhbmRsZUl0ZW1RdWl0Rm9jdXMob3B0aW9ucykpO1xuICAgICAgICAgICAgdGhpcy5faXRlbUxpc3RRdWl0Rm9jdXNTdWJzY3JpcHRpb25zLnB1c2gocXVpdEZvY3VzU3Vic2NyaXB0aW9uKTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHRoaXMuc2V0RXJyb3JJbkl0ZW1zKHRoaXMuaGFzRXJyb3JNZXNzYWdlQ29tcG9uZW50KCkpO1xuXG4gICAgICAgICAgdGhpcy5idWlsZFRyZWUoKTtcbiAgICAgICAgICBpZiAoIXRoaXMudmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlVmFsdWVGcm9tSXRlbXMoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodGhpcy5zZWFyY2hNYXRjaFZhbHVlcykge1xuICAgICAgICAgICAgdGhpcy5vblNlYXJjaE1hdGNoVmFsdWVzQ2hhbmdlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuYWxsSXRlbXMgJiYgIXRoaXMuX2FsbEl0ZW1MaXN0U3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgdGhpcy5fYWxsSXRlbUxpc3RTdWJzY3JpcHRpb24gPSB0aGlzLmFsbEl0ZW1zLmNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHRoaXMuY29uZmlndXJlQWxsSXRlbXMoKSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgdGhpcy5fYWxyZWFkeUNvbmZpZ3VyaW5nSXRlbXMgPSBmYWxzZTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBNb2RpZmljYSBsb3MgaXRlbXMgdmlzaWJsZXMgc2Vnw7puIGVsIGZpbHRybyBkZSBiw7pzcXVlZGFcbiAgICovXG4gIG9uU2VhcmNoTWF0Y2hWYWx1ZXNDaGFuZ2UoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuYWxsSXRlbXMpIHtcbiAgICAgIHRoaXMuYWxsSXRlbXMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgaXRlbS5pbmhlcml0ZWRNYXRjaGVzU2VhcmNoID0gdHJ1ZTtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAodGhpcy5zZWFyY2hNYXRjaFZhbHVlcyAhPT0gbnVsbCAmJiB0aGlzLnNlYXJjaE1hdGNoVmFsdWVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5hbGxJdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgIGlmICh0aGlzLnNlYXJjaE1hdGNoVmFsdWVzLmZpbmRJbmRleCh2YWx1ZSA9PiBpdGVtLnZhbHVlID09PSB2YWx1ZSkgPCAwKSB7XG4gICAgICAgICAgICBpdGVtLmluaGVyaXRlZE1hdGNoZXNTZWFyY2ggPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLypcbiAgICogR2V0dGVycyBhbmQgc2V0dGVyc1xuICAgKi9cblxuICBnZXRJZFByZWZpeCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmlkUHJlZml4ID8gdGhpcy5pZFByZWZpeCA6IHRoaXMubmFtZTtcbiAgfVxuXG4gIGdldERlc2NyaWJlZEJ5KCk6IHN0cmluZyB7XG4gICAgbGV0IGRlc2NyaWJlZEJ5ID0gJyc7XG4gICAgaWYgKHRoaXMuZGVzY3JpYmVkQnkpIHtcbiAgICAgIGRlc2NyaWJlZEJ5ID0gdGhpcy5kZXNjcmliZWRCeTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5oYXNIaW50Q29tcG9uZW50KCkgJiYgdGhpcy5oaW50Q29tcG9uZW50LmlkKSB7XG4gICAgICBkZXNjcmliZWRCeSA9IGRlc2NyaWJlZEJ5ICsgJyAnICsgdGhpcy5oaW50Q29tcG9uZW50LmlkO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmhhc0Vycm9yTWVzc2FnZUNvbXBvbmVudCgpICYmIHRoaXMuZXJyb3JNZXNzYWdlQ29tcG9uZW50LmlkKSB7XG4gICAgICBkZXNjcmliZWRCeSA9IGRlc2NyaWJlZEJ5ICsgJyAnICsgdGhpcy5lcnJvck1lc3NhZ2VDb21wb25lbnQuaWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlc2NyaWJlZEJ5O1xuICB9XG5cbiAgLyoqXG4gICAqIERldnVlbHZlIGVsIHZhbG9yIGRlIGRlc2NyaWJlZEJ5IHF1ZSBzZSB0cmFuc21pdGlyw6EgYSBsb3MgaXRlbXNcbiAgICovXG4gIGdldERlc2NyaWJlZEJ5Rm9ySXRlbXMoKTogc3RyaW5nIHtcbiAgICBsZXQgZGVzY3JpYmVkQnk7XG4gICAgaWYgKHRoaXMuaGFzRmllbGRzZXRDb21wb25lbnQoKSkge1xuICAgICAgZGVzY3JpYmVkQnkgPSB0aGlzLmZpZWxkc2V0Q29tcG9uZW50LmRlc2NyaWJlZEJ5O1xuICAgIH0gZWxzZSB7XG4gICAgICBkZXNjcmliZWRCeSA9IHRoaXMuZ2V0RGVzY3JpYmVkQnkoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGVzY3JpYmVkQnk7XG4gIH1cblxuICBoYXNGaWVsZHNldENvbXBvbmVudCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLmZpZWxkc2V0Q29tcG9uZW50O1xuICB9XG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlcyBzdXBlci5nZXRIaW50SWQoKTtcbiAgICovXG4gIGdldEhpbnRJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmlkUHJlZml4ID8gdGhpcy5pZFByZWZpeCArICctaGludCcgOiB0aGlzLmhpbnRDb21wb25lbnQ/LmlkO1xuICB9XG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlcyBzdXBlci5nZXRIaW50SWQoKTtcbiAgICovXG4gIGdldEVycm9ySWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pZFByZWZpeCA/IHRoaXMuaWRQcmVmaXggKyAnLWVycm9yJyA6IHRoaXMuZXJyb3JNZXNzYWdlQ29tcG9uZW50Py5pZDtcbiAgfVxuXG4gIC8qXG4gICAqIEZ1bmNpb25lcyBwYXJhIHJlZW1wbGF6YXIgZWwgY29udGVuaWRvIGRlbCBmaWVsZHNldCwgbGFiZWwsIGhpbnQgbyBlcnJvcm1lc3NhZ2VcbiAgICovXG5cbiAgb3ZlcnJpZGVGaWVsZHNldFBhcmFtcyhmaWVsZHNldDogRmllbGRzZXRDb21wb25lbnQpOiB2b2lkIHtcbiAgICBmaWVsZHNldC5jYWxsZXIgPSB0aGlzLmlubmVySHRtbDtcbiAgICBmaWVsZHNldC5lcnJvcklkID0gdGhpcy5nZXRFcnJvcklkKCk7XG4gICAgZmllbGRzZXQuZGVzY3JpYmVkQnkgPSB0aGlzLmdldERlc2NyaWJlZEJ5KCk7XG4gICAgZmllbGRzZXQuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgb3ZlcnJpZGVTZWFyY2hCYXJQYXJhbXMoc2VhcmNoYmFyOiBTZWFyY2hCYXJDb21wb25lbnQpOiB2b2lkIHtcbiAgICBjb25zdCBkZWZhdWx0T25DaGFuZ2UgPSBzZWFyY2hiYXIub25DaGFuZ2U7XG4gICAgY29uc3QgbmV3T25DaGFuZ2UgPSB2YWx1ZSA9PiB7XG4gICAgICB0aGlzLm9uU2VhcmNoKHZhbHVlKTtcbiAgICAgIGRlZmF1bHRPbkNoYW5nZSh2YWx1ZSk7XG4gICAgfVxuICAgIHNlYXJjaGJhci5yZWdpc3Rlck9uQ2hhbmdlKG5ld09uQ2hhbmdlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZSBsbGFtYSBkZXNkZSBGb3JtRmllbGRcbiAgICovXG4gIG92ZXJyaWRlSGludFBhcmFtcyhoaW50KTogdm9pZCB7XG4gICAgaGludC5pZCA9IHRoaXMuZ2V0SGludElkKCk7XG4gICAgaGludC5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICAvKipcbiAgICogU2UgbGxhbWEgZGVzZGUgRm9ybUZpZWxkXG4gICAqL1xuICBvdmVycmlkZUVycm9yTWVzc2FnZVBhcmFtcyhlcnJvck1lc3NhZ2UpOiB2b2lkIHtcbiAgICBlcnJvck1lc3NhZ2UuaWQgPSB0aGlzLmdldEVycm9ySWQoKTtcbiAgICB0aGlzLnNldEVycm9ySW5JdGVtcyh0aGlzLmhhc0Vycm9yTWVzc2FnZUNvbXBvbmVudCgpKTtcbiAgICBlcnJvck1lc3NhZ2UuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlIGxsYW1hIGRlc2RlIEZvcm1GaWVsZFxuICAgKi9cbiAgb25EZWxldGVFcnJvck1lc3NhZ2UoZXJyb3JNZXNzYWdlKTogdm9pZCB7XG4gICAgdGhpcy5zZXRFcnJvckluSXRlbXModGhpcy5oYXNFcnJvck1lc3NhZ2VDb21wb25lbnQoKSk7XG4gIH1cblxuICAvKlxuICAgKiBNw6l0b2RvcyBwcml2YWRvc1xuICAgKi9cblxuICAvKipcbiAgICogQ29uZmlndXJhIGxhIGVzdHJ1Y3R1cmEgZGVsIMOhcmJvbFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBidWlsZFRyZWUoKTogdm9pZCB7XG5cbiAgICAvLyBTZSBjcmVhIHVuIG1hcGEgcGFyYSB0ZW5lciBhY2Nlc2libGVzIGxvcyBpdGVtcyBwb3Iga2V5IHkgc2UgYm9ycmFuIGxvcyBsaXN0YWRvcyBleGlzdGVudGVzXG4gICAgY29uc3QgaXRlbU1hcCA9IHt9XG4gICAgdGhpcy5yb290SXRlbXMgPSBbXTtcbiAgICB0aGlzLmFsbEl0ZW1zLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICBjb25zdCBrZXkgPSBpdGVtLmdldEtleSgpO1xuICAgICAgaXRlbU1hcFtrZXldID0gaXRlbTtcbiAgICAgIGlmIChpdGVtLnN1Yikge1xuICAgICAgICBpdGVtLnN1Yi5pdGVtTGlzdCA9IFtdO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gU2UgYcOxYWRlbiBsb3MgaXRlbXMgYSBsb3MgbGlzdGFkb3MgY29ycmVzcG9uZGllbnRlc1xuICAgIHRoaXMuYWxsSXRlbXMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgIGNvbnN0IHBhcmVudEtleSA9IGl0ZW0uZ2V0UGFyZW50S2V5KCk7XG4gICAgICBpZiAocGFyZW50S2V5ID09PSAncm9vdCcpIHtcbiAgICAgICAgdGhpcy5yb290SXRlbXMucHVzaChpdGVtKTtcbiAgICAgIH0gZWxzZSBpZiAocGFyZW50S2V5KSB7XG4gICAgICAgIGNvbnN0IHN1YiA9IGl0ZW1NYXBbcGFyZW50S2V5XS5zdWI7XG4gICAgICAgIGlmIChzdWIpIHtcbiAgICAgICAgICBzdWIuaXRlbUxpc3QucHVzaChpdGVtKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gU2UgY29uZmlndXJhbiBsb3MgaXRlbXMgZGVzZGUgcm9vdFxuICAgIGxldCBvcmRlciA9IDA7XG4gICAgdGhpcy5yb290SXRlbXMuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgIGl0ZW0uc2V0U3ViTGV2ZWwoMCk7XG4gICAgICBpdGVtLnNldERlZmF1bHRJZChgJHt0aGlzLmlkUHJlZml4fS0ke2luZGV4fWApO1xuICAgICAgaXRlbS5yZWZyZXNoQWxsUGFyZW50c0V4cGFuZGVkUmVjdXJzaXZlKHRydWUpO1xuICAgICAgaWYgKCF0aGlzLmRlY291cGxlQ2hpbGRGcm9tUGFyZW50KSB7XG4gICAgICAgIGl0ZW0uc2V0Q2hlY2tlZEF1dG9tYXRpY2FsbHlEZXBlbmRpbmdPbkNoaWxkcmVuKCk7XG4gICAgICB9XG4gICAgICBvcmRlciA9IGl0ZW0uc2V0T3JkZXJSZWN1cnNpdmVseShvcmRlcik7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogU2kgdGllbmUgdW4gbWVuc2FqZSBkZSBlcnJvciwgc2UgaW5kaWNhIGEgbG9zIGl0ZW1zXG4gICAqIEBwYXJhbSBoYXNFcnJvclxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBzZXRFcnJvckluSXRlbXMoaGFzRXJyb3I6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5hbGxJdGVtcz8ubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5hbGxJdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICBpdGVtLmluaGVyaXRlZEhhc0Vycm9yID0gaGFzRXJyb3I7XG4gICAgICAgIGl0ZW0uZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIExpbXBpYSB1biBsaXN0YWRvIGRlIHN1YnNjcmlwY2lvbmVzXG4gICAqIEBwYXJhbSBzdWJzY3JpcHRpb25MaXN0XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIGNsZWFyU3Vic2NyaXB0aW9ucyhzdWJzY3JpcHRpb25MaXN0OiBTdWJzY3JpcHRpb25bXSk6IHZvaWQge1xuICAgIGlmIChzdWJzY3JpcHRpb25MaXN0Lmxlbmd0aCA+IDApIHtcbiAgICAgIHN1YnNjcmlwdGlvbkxpc3QuZm9yRWFjaChzID0+IHMudW5zdWJzY3JpYmUoKSk7XG4gICAgICBzdWJzY3JpcHRpb25MaXN0LnNwbGljZSgwLCBzdWJzY3JpcHRpb25MaXN0Lmxlbmd0aClcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRGV2dWVsdmUgbG9zIGl0ZW1zIGRlbCDDoXJib2wgb3JkZW5hZG9zXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIGdldEFsbEl0ZW1zSW5PcmRlcigpOiBUcmVlSXRlbUNvbXBvbmVudFtdIHtcbiAgICBsZXQgbGlzdCA9IFtdO1xuICAgIGlmICh0aGlzLmFsbEl0ZW1zKSB7XG4gICAgICBsaXN0ID0gdGhpcy5hbGxJdGVtcy50b0FycmF5KCkuc29ydCgoYSwgYikgPT4gYS5vcmRlckluVHJlZSA+IGIub3JkZXJJblRyZWUgPyAxIDogLTEpXG4gICAgfVxuICAgIHJldHVybiBsaXN0XG4gIH1cbiAgXG5cbn1cbiIsIjxuZy10ZW1wbGF0ZSAjaW5uZXJIdG1sPlxuICA8bmctY29udGVudCBzZWxlY3Q9XCJkZXN5LWhpbnRcIj48L25nLWNvbnRlbnQ+XG4gIDxuZy1jb250ZW50IHNlbGVjdD1cImRlc3ktZXJyb3ItbWVzc2FnZVwiPjwvbmctY29udGVudD5cbiAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiZGVzeS1zZWFyY2gtYmFyXCI+PC9uZy1jb250ZW50PlxuICA8dWwgW2F0dHIuaWRdPVwiaWQgPyBpZCA6IG51bGxcIlxuICAgICAgW2F0dHIucm9sZV09XCJyb2xlID8gcm9sZSA6ICd0cmVlJ1wiXG4gICAgICBbZGVzeUFwcEFjY2Vzc2liaWxpdHldPVwidGhpc1wiPlxuICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgPC91bD5cbjwvbmctdGVtcGxhdGU+XG5cbjwhLS0gdHJlZSAtLT5cbjxkaXYgW2NsYXNzXT1cIlsnYy1mb3JtLWdyb3VwJywgZm9ybUdyb3VwQ2xhc3Nlc10gfCBtYWtlSHRtbExpc3RcIlxuICAgICBbbmdDbGFzc109XCJ7J2MtZm9ybS1ncm91cC0tZXJyb3InOiAoaGFzRXJyb3JzTWVzc2FnZSgpIHx8IGZvcm1Hcm91cENsYXNzZXMgPT09ICdjLWZvcm0tZ3JvdXAtLWVycm9yJykgfVwiPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiaGFzRmllbGRzZXRDb21wb25lbnQoKTsgZWxzZSBpbm5lckh0bWxcIj5cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJkZXN5LWZpZWxkc2V0XCI+PC9uZy1jb250ZW50PlxuICA8L25nLWNvbnRhaW5lcj5cbjwvZGl2PiJdfQ==
|