bit-ng-library 14.0.8 → 14.1.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.
Files changed (29) hide show
  1. package/README.md +12 -1
  2. package/esm2020/lib/sharedlibrary/components/footer/bit-footer-messages.component.mjs +155 -0
  3. package/esm2020/lib/sharedlibrary/components/footer/bit-footer.component.mjs +24 -167
  4. package/esm2020/lib/sharedlibrary/components/footer/bit-pagijator.component.mjs +64 -0
  5. package/esm2020/lib/sharedlibrary/components/form/dropdown/bit-dropdown-general.component.mjs +5 -2
  6. package/esm2020/lib/sharedlibrary/components/form/dropdown/bit-dropdown-multiple.component.mjs +3 -3
  7. package/esm2020/lib/sharedlibrary/components/form/dropdown/bit-dropdown.component.mjs +3 -3
  8. package/esm2020/lib/sharedlibrary/global.constants.mjs +6 -1
  9. package/esm2020/lib/sharedlibrary/sharedlibrary.module.mjs +23 -5
  10. package/esm2020/public-api.mjs +3 -1
  11. package/fesm2015/bit-ng-library.mjs +259 -173
  12. package/fesm2015/bit-ng-library.mjs.map +1 -1
  13. package/fesm2020/bit-ng-library.mjs +258 -171
  14. package/fesm2020/bit-ng-library.mjs.map +1 -1
  15. package/lib/sharedlibrary/components/footer/bit-footer-messages.component.d.ts +47 -0
  16. package/lib/sharedlibrary/components/footer/bit-footer-messages.component.d.ts.map +1 -0
  17. package/lib/sharedlibrary/components/footer/bit-footer.component.d.ts +4 -45
  18. package/lib/sharedlibrary/components/footer/bit-footer.component.d.ts.map +1 -1
  19. package/lib/sharedlibrary/components/footer/bit-pagijator.component.d.ts +22 -0
  20. package/lib/sharedlibrary/components/footer/bit-pagijator.component.d.ts.map +1 -0
  21. package/lib/sharedlibrary/components/form/dropdown/bit-dropdown-general.component.d.ts +2 -1
  22. package/lib/sharedlibrary/components/form/dropdown/bit-dropdown-general.component.d.ts.map +1 -1
  23. package/lib/sharedlibrary/global.constants.d.ts +5 -0
  24. package/lib/sharedlibrary/global.constants.d.ts.map +1 -1
  25. package/lib/sharedlibrary/sharedlibrary.module.d.ts +59 -55
  26. package/lib/sharedlibrary/sharedlibrary.module.d.ts.map +1 -1
  27. package/package.json +1 -1
  28. package/public-api.d.ts +2 -0
  29. package/public-api.d.ts.map +1 -1
package/README.md CHANGED
@@ -26,7 +26,18 @@ To get more help on the Angular CLI use `ng help` or go check out the [Angular C
26
26
 
27
27
  ## changelog
28
28
 
29
- ## [14.0.8] - 2023-02-02
29
+ ## [14.1.0] - 2023-02-08
30
+
31
+ nuevo footer con un nuevo paginator
32
+
33
+ ## [14.0.9] - 2023-02-07
34
+
35
+ se añade a los dropbox una nueva propiedad appendTo que por defecto valdrá body
36
+ Se añade:
37
+ import {SplitterModule} from 'primeng/splitter';
38
+ import {ScrollPanelModule} from 'primeng/scrollpanel';
39
+
40
+ ## [14.0.8] - 2023-02-07
30
41
 
31
42
  se añade a los calendarios una nueva propiedad appendTo que por defecto valdrá body
32
43
 
@@ -0,0 +1,155 @@
1
+ import { ChangeDetectionStrategy, Component, Input } from '@angular/core';
2
+ import { of } from 'rxjs';
3
+ import { MORE_RESULTS, PageStatus, TYPE_BLANK, TYPE_FORM, TYPE_LIST, TYPE_SCROLL } from '../../global.constants';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "../../services";
6
+ import * as i2 from "../help/bit-help.component";
7
+ import * as i3 from "@angular/common";
8
+ export class BitFooterMessagesComponent {
9
+ constructor(translateService) {
10
+ this.translateService = translateService;
11
+ this.status = PageStatus.Init; // Determina en qué estado está la página: PageStatus.Init, PageStatus.SEARCHING, PageStatus.FINISH_SEARCH
12
+ }
13
+ ngOnInit() {
14
+ if (this.typeFooter == undefined) {
15
+ this.typeFooter = "list";
16
+ }
17
+ //mensajes por defecto si no vienen definidos
18
+ if (this.messages == undefined) {
19
+ this.setMessages();
20
+ this.messages.set(PageStatus.Error, "bitnglibrary.footer.error");
21
+ }
22
+ }
23
+ setMessages() {
24
+ console.log("definimos los mensajes del footer de manera estándar");
25
+ this.messages = new Map();
26
+ if (this.isFooterList() || this.isFooterScroll()) {
27
+ this.messages.set(PageStatus.Init, "bitnglibrary.footer.list.init");
28
+ this.messages.set(PageStatus.Searching, "bitnglibrary.footer.list.searching");
29
+ this.messages.set(PageStatus.EmptyResult, "bitnglibrary.footer.list.emptyresult");
30
+ this.messages.set(PageStatus.FinishSearch, "bitnglibrary.footer.list.finishsearch");
31
+ this.messages.set(MORE_RESULTS, "bitnglibrary.footer.list.moreresults");
32
+ }
33
+ else if (this.isFooterForm()) {
34
+ this.messages.set(PageStatus.Init, "bitnglibrary.footer.form.init");
35
+ this.messages.set(PageStatus.Searching, "bitnglibrary.footer.form.searching");
36
+ this.messages.set(PageStatus.FinishSearch, "bitnglibrary.footer.form.finishsearch");
37
+ this.messages.set(PageStatus.ReadOnly, "bitnglibrary.footer.list.readonly");
38
+ }
39
+ else if (this.typeFooter === TYPE_BLANK) {
40
+ console.log("the footer is BLANK!");
41
+ }
42
+ }
43
+ getStyle(error = false) {
44
+ let type = error ? "error" : "info";
45
+ if (this.isFooterList()) {
46
+ return `mensaje-list mensaje-${type}`;
47
+ }
48
+ else if (this.isFooterScroll()) {
49
+ return `mensaje-scroll mensaje-${type}`;
50
+ }
51
+ else if (this.isFooterForm()) {
52
+ return `mensaje-form mensaje-${type}`;
53
+ }
54
+ }
55
+ isFooterList() {
56
+ return this.typeFooter === TYPE_LIST;
57
+ }
58
+ isFooterScroll() {
59
+ return this.typeFooter === TYPE_SCROLL;
60
+ }
61
+ isFooterForm() {
62
+ return this.typeFooter === TYPE_FORM;
63
+ }
64
+ /** Flag: la página está realizando la búsqueda. */
65
+ get searchInitiated() {
66
+ return this.status === PageStatus.Init || this.status == PageStatus.Reset || !this.status;
67
+ }
68
+ /** Flag: la página está realizando la búsqueda. */
69
+ get searching() {
70
+ return this.status === PageStatus.Searching;
71
+ }
72
+ /** Flag: la página ha finalizado la última búsqueda. */
73
+ get searchFinished() {
74
+ return this.status === PageStatus.FinishSearch;
75
+ }
76
+ /** Flag: la página está en modo solo lectura */
77
+ get readOnly() {
78
+ return this.status == PageStatus.ReadOnly;
79
+ }
80
+ /** Flag: la página ha finalizado con error */
81
+ get error() {
82
+ return this.status == PageStatus.Error;
83
+ }
84
+ /** Flag: encontrado resultado. */
85
+ get foundResult() {
86
+ return (this.status === PageStatus.FinishSearch &&
87
+ ((this.typeFooter === TYPE_LIST && this.totalItems > 0)
88
+ || this.typeFooter === TYPE_FORM
89
+ || (this.typeFooter === TYPE_SCROLL && this.totalItems <= this.maxCurrentItems)));
90
+ }
91
+ /** Flag: hay más resultados (scroll). */
92
+ get moreResults() {
93
+ return (this.status === PageStatus.FinishSearch &&
94
+ (this.typeFooter === TYPE_SCROLL && this.totalItems > this.maxCurrentItems));
95
+ }
96
+ /** Flag: no hay resultados. */
97
+ get emptyResult() {
98
+ return this.status === PageStatus.FinishSearch && this.totalItems === 0;
99
+ }
100
+ get message() {
101
+ if (this.searchInitiated)
102
+ return this.initMessage;
103
+ if (this.searching)
104
+ return this.searchingMessage;
105
+ if (this.readOnly)
106
+ return this.readOnlyMessage;
107
+ if (this.foundResult)
108
+ return this.finishMessage;
109
+ if (this.moreResults)
110
+ return this.moreResultsMessage;
111
+ if (this.emptyResult)
112
+ return this.emptyMessage;
113
+ if (this.error)
114
+ return this.errorMessage;
115
+ return of("");
116
+ }
117
+ get initMessage() {
118
+ return this.translateService.selectTranslate(this.messages.get(PageStatus.Init));
119
+ }
120
+ get searchingMessage() {
121
+ return this.translateService.selectTranslate(this.messages.get(PageStatus.Searching));
122
+ }
123
+ get finishMessage() {
124
+ return this.translateService.selectTranslate(this.messages.get(PageStatus.FinishSearch));
125
+ }
126
+ get moreResultsMessage() {
127
+ return this.translateService.selectTranslate(this.messages.get(MORE_RESULTS));
128
+ }
129
+ get emptyMessage() {
130
+ return this.translateService.selectTranslate(this.messages.get(PageStatus.EmptyResult));
131
+ }
132
+ get readOnlyMessage() {
133
+ return this.translateService.selectTranslate(this.messages.get(PageStatus.ReadOnly));
134
+ }
135
+ get errorMessage() {
136
+ return this.translateService.selectTranslate(this.messages.get(PageStatus.Error));
137
+ }
138
+ }
139
+ BitFooterMessagesComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.8", ngImport: i0, type: BitFooterMessagesComponent, deps: [{ token: i1.TranslateService }], target: i0.ɵɵFactoryTarget.Component });
140
+ BitFooterMessagesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.8", type: BitFooterMessagesComponent, selector: "bit-footer-messages", inputs: { messages: "messages", status: "status", typeFooter: "typeFooter", maxCurrentItems: "maxCurrentItems", totalItems: "totalItems" }, ngImport: i0, template: "<div>\n <div [class]=\"getStyle()\">\n <i class=\"fa fa-info\"></i>\n <span>{{message | async}}</span>\n </div>\n\n <bit-help></bit-help>\n</div>", dependencies: [{ kind: "component", type: i2.BitHelpComponent, selector: "bit-help" }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
141
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.8", ngImport: i0, type: BitFooterMessagesComponent, decorators: [{
142
+ type: Component,
143
+ args: [{ selector: 'bit-footer-messages', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div>\n <div [class]=\"getStyle()\">\n <i class=\"fa fa-info\"></i>\n <span>{{message | async}}</span>\n </div>\n\n <bit-help></bit-help>\n</div>" }]
144
+ }], ctorParameters: function () { return [{ type: i1.TranslateService }]; }, propDecorators: { messages: [{
145
+ type: Input
146
+ }], status: [{
147
+ type: Input
148
+ }], typeFooter: [{
149
+ type: Input
150
+ }], maxCurrentItems: [{
151
+ type: Input
152
+ }], totalItems: [{
153
+ type: Input
154
+ }] } });
155
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYml0LWZvb3Rlci1tZXNzYWdlcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iaXQtbmctbGlicmFyeS9zcmMvbGliL3NoYXJlZGxpYnJhcnkvY29tcG9uZW50cy9mb290ZXIvYml0LWZvb3Rlci1tZXNzYWdlcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iaXQtbmctbGlicmFyeS9zcmMvbGliL3NoYXJlZGxpYnJhcnkvY29tcG9uZW50cy9mb290ZXIvYml0LWZvb3Rlci1tZXNzYWdlcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUNsRixPQUFPLEVBQWMsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXRDLE9BQU8sRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxNQUFNLHdCQUF3QixDQUFDOzs7OztBQVNqSCxNQUFNLE9BQU8sMEJBQTBCO0lBWXJDLFlBQW9CLGdCQUFrQztRQUFsQyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBUnRELFdBQU0sR0FBZSxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsMEdBQTBHO0lBUXRGLENBQUM7SUFFM0QsUUFBUTtRQUNOLElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxTQUFTLEVBQUU7WUFDaEMsSUFBSSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUM7U0FDMUI7UUFDRCw2Q0FBNkM7UUFDN0MsSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLFNBQVMsRUFBRTtZQUM5QixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDbkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsVUFBVSxD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QUNkLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztJQUMxRixDQUFDO0lBRUQsSUFBSSxlQUFlO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUN2RixDQUFDO0lBRUQsSUFBSSxZQUFZO1FBQ2QsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ3BGLENBQUM7O3VIQXhKVSwwQkFBMEI7MkdBQTFCLDBCQUEwQix1TUNadkMsNEpBT007MkZES08sMEJBQTBCO2tCQU50QyxTQUFTOytCQUNFLHFCQUFxQixtQkFDZCx1QkFBdUIsQ0FBQyxNQUFNO3VHQU0vQyxRQUFRO3NCQURQLEtBQUs7Z0JBR04sTUFBTTtzQkFETCxLQUFLO2dCQUdOLFVBQVU7c0JBRFQsS0FBSztnQkFHTixlQUFlO3NCQURkLEtBQUs7Z0JBR04sVUFBVTtzQkFEVCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgTU9SRV9SRVNVTFRTLCBQYWdlU3RhdHVzLCBUWVBFX0JMQU5LLCBUWVBFX0ZPUk0sIFRZUEVfTElTVCwgVFlQRV9TQ1JPTEwgfSBmcm9tICcuLi8uLi9nbG9iYWwuY29uc3RhbnRzJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2JpdC1mb290ZXItbWVzc2FnZXMnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgdGVtcGxhdGVVcmw6ICdiaXQtZm9vdGVyLW1lc3NhZ2VzLmNvbXBvbmVudC5odG1sJ1xufSlcblxuZXhwb3J0IGNsYXNzIEJpdEZvb3Rlck1lc3NhZ2VzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KClcbiAgbWVzc2FnZXM6IE1hcDxQYWdlU3RhdHVzLCBzdHJpbmc+O1xuICBASW5wdXQoKVxuICBzdGF0dXM6IFBhZ2VTdGF0dXMgPSBQYWdlU3RhdHVzLkluaXQ7IC8vIERldGVybWluYSBlbiBxdcOpIGVzdGFkbyBlc3TDoSBsYSBww6FnaW5hOiBQYWdlU3RhdHVzLkluaXQsIFBhZ2VTdGF0dXMuU0VBUkNISU5HLCBQYWdlU3RhdHVzLkZJTklTSF9TRUFSQ0hcbiAgQElucHV0KClcbiAgdHlwZUZvb3Rlcjogc3RyaW5nO1xuICBASW5wdXQoKVxuICBtYXhDdXJyZW50SXRlbXM6IG51bWJlcjtcbiAgQElucHV0KClcbiAgdG90YWxJdGVtczogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSkgeyB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMudHlwZUZvb3RlciA9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMudHlwZUZvb3RlciA9IFwibGlzdFwiO1xuICAgIH1cbiAgICAvL21lbnNhamVzIHBvciBkZWZlY3RvIHNpIG5vIHZpZW5lbiBkZWZpbmlkb3NcbiAgICBpZiAodGhpcy5tZXNzYWdlcyA9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuc2V0TWVzc2FnZXMoKTtcbiAgICAgIHRoaXMubWVzc2FnZXMuc2V0KFBhZ2VTdGF0dXMuRXJyb3IsIFwiYml0bmdsaWJyYXJ5LmZvb3Rlci5lcnJvclwiKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldE1lc3NhZ2VzKCkge1xuICAgIGNvbnNvbGUubG9nKFwiZGVmaW5pbW9zIGxvcyBtZW5zYWplcyBkZWwgZm9vdGVyIGRlIG1hbmVyYSBlc3TDoW5kYXJcIik7XG4gICAgdGhpcy5tZXNzYWdlcyA9IG5ldyBNYXA8UGFnZVN0YXR1cywgc3RyaW5nPigpO1xuICAgIGlmICh0aGlzLmlzRm9vdGVyTGlzdCgpIHx8IHRoaXMuaXNGb290ZXJTY3JvbGwoKSkge1xuICAgICAgdGhpcy5tZXNzYWdlcy5zZXQoUGFnZVN0YXR1cy5Jbml0LCBcImJpdG5nbGlicmFyeS5mb290ZXIubGlzdC5pbml0XCIpO1xuICAgICAgdGhpcy5tZXNzYWdlcy5zZXQoUGFnZVN0YXR1cy5TZWFyY2hpbmcsIFwiYml0bmdsaWJyYXJ5LmZvb3Rlci5saXN0LnNlYXJjaGluZ1wiKTtcbiAgICAgIHRoaXMubWVzc2FnZXMuc2V0KFBhZ2VTdGF0dXMuRW1wdHlSZXN1bHQsIFwiYml0bmdsaWJyYXJ5LmZvb3Rlci5saXN0LmVtcHR5cmVzdWx0XCIpO1xuICAgICAgdGhpcy5tZXNzYWdlcy5zZXQoUGFnZVN0YXR1cy5GaW5pc2hTZWFyY2gsIFwiYml0bmdsaWJyYXJ5LmZvb3Rlci5saXN0LmZpbmlzaHNlYXJjaFwiKTtcbiAgICAgIHRoaXMubWVzc2FnZXMuc2V0KE1PUkVfUkVTVUxUUywgXCJiaXRuZ2xpYnJhcnkuZm9vdGVyLmxpc3QubW9yZXJlc3VsdHNcIilcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXNGb290ZXJGb3JtKCkpIHtcbiAgICAgIHRoaXMubWVzc2FnZXMuc2V0KFBhZ2VTdGF0dXMuSW5pdCwgXCJiaXRuZ2xpYnJhcnkuZm9vdGVyLmZvcm0uaW5pdFwiKTtcbiAgICAgIHRoaXMubWVzc2FnZXMuc2V0KFBhZ2VTdGF0dXMuU2VhcmNoaW5nLCBcImJpdG5nbGlicmFyeS5mb290ZXIuZm9ybS5zZWFyY2hpbmdcIik7XG4gICAgICB0aGlzLm1lc3NhZ2VzLnNldChQYWdlU3RhdHVzLkZpbmlzaFNlYXJjaCwgXCJiaXRuZ2xpYnJhcnkuZm9vdGVyLmZvcm0uZmluaXNoc2VhcmNoXCIpO1xuICAgICAgdGhpcy5tZXNzYWdlcy5zZXQoUGFnZVN0YXR1cy5SZWFkT25seSwgXCJiaXRuZ2xpYnJhcnkuZm9vdGVyLmxpc3QucmVhZG9ubHlcIik7XG4gICAgfSBlbHNlIGlmICh0aGlzLnR5cGVGb290ZXIgPT09IFRZUEVfQkxBTkspIHtcbiAgICAgIGNvbnNvbGUubG9nKFwidGhlIGZvb3RlciBpcyBCTEFOSyFcIik7XG4gICAgfVxuICB9XG5cbiAgZ2V0U3R5bGUoZXJyb3I6IGJvb2xlYW4gPSBmYWxzZSk6IHN0cmluZyB7XG4gICAgbGV0IHR5cGUgPSBlcnJvciA/IFwiZXJyb3JcIiA6IFwiaW5mb1wiO1xuICAgIGlmICh0aGlzLmlzRm9vdGVyTGlzdCgpKSB7XG4gICAgICByZXR1cm4gYG1lbnNhamUtbGlzdCBtZW5zYWplLSR7dHlwZX1gO1xuICAgIH0gZWxzZSBpZiAodGhpcy5pc0Zvb3RlclNjcm9sbCgpKSB7XG4gICAgICByZXR1cm4gYG1lbnNhamUtc2Nyb2xsIG1lbnNhamUtJHt0eXBlfWA7XG4gICAgfSBlbHNlIGlmICh0aGlzLmlzRm9vdGVyRm9ybSgpKSB7XG4gICAgICByZXR1cm4gYG1lbnNhamUtZm9ybSBtZW5zYWplLSR7dHlwZX1gO1xuICAgIH1cbiAgfVxuXG4gIGlzRm9vdGVyTGlzdCgpIHtcbiAgICByZXR1cm4gdGhpcy50eXBlRm9vdGVyID09PSBUWVBFX0xJU1Q7XG4gIH1cblxuICBpc0Zvb3RlclNjcm9sbCgpIHtcbiAgICByZXR1cm4gdGhpcy50eXBlRm9vdGVyID09PSBUWVBFX1NDUk9MTDtcbiAgfVxuXG4gIGlzRm9vdGVyRm9ybSgpIHtcbiAgICByZXR1cm4gdGhpcy50eXBlRm9vdGVyID09PSBUWVBFX0ZPUk07XG4gIH1cblxuICAvKiogRmxhZzogbGEgcMOhZ2luYSBlc3TDoSByZWFsaXphbmRvIGxhIGLDunNxdWVkYS4gKi9cbiAgZ2V0IHNlYXJjaEluaXRpYXRlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0dXMgPT09IFBhZ2VTdGF0dXMuSW5pdCB8fCB0aGlzLnN0YXR1cyA9PSBQYWdlU3RhdHVzLlJlc2V0IHx8ICF0aGlzLnN0YXR1cztcbiAgfVxuXG4gIC8qKiBGbGFnOiBsYSBww6FnaW5hIGVzdMOhIHJlYWxpemFuZG8gbGEgYsO6c3F1ZWRhLiAqL1xuICBnZXQgc2VhcmNoaW5nKCkge1xuICAgIHJldHVybiB0aGlzLnN0YXR1cyA9PT0gUGFnZVN0YXR1cy5TZWFyY2hpbmc7XG4gIH1cblxuICAvKiogRmxhZzogbGEgcMOhZ2luYSBoYSBmaW5hbGl6YWRvIGxhIMO6bHRpbWEgYsO6c3F1ZWRhLiAqL1xuICBnZXQgc2VhcmNoRmluaXNoZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdHVzID09PSBQYWdlU3RhdHVzLkZpbmlzaFNlYXJjaDtcbiAgfVxuXG4gIC8qKiBGbGFnOiBsYSBww6FnaW5hIGVzdMOhIGVuIG1vZG8gc29sbyBsZWN0dXJhICovXG4gIGdldCByZWFkT25seSgpIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0dXMgPT0gUGFnZVN0YXR1cy5SZWFkT25seTtcbiAgfVxuXG4gIC8qKiBGbGFnOiBsYSBww6FnaW5hIGhhIGZpbmFsaXphZG8gY29uIGVycm9yICovXG4gIGdldCBlcnJvcigpIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0dXMgPT0gUGFnZVN0YXR1cy5FcnJvcjtcbiAgfVxuXG4gIC8qKiBGbGFnOiBlbmNvbnRyYWRvIHJlc3VsdGFkby4gKi9cbiAgZ2V0IGZvdW5kUmVzdWx0KCkge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLnN0YXR1cyA9PT0gUGFnZVN0YXR1cy5GaW5pc2hTZWFyY2ggJiZcbiAgICAgICgodGhpcy50eXBlRm9vdGVyID09PSBUWVBFX0xJU1QgJiYgdGhpcy50b3RhbEl0ZW1zID4gMClcbiAgICAgICAgfHwgdGhpcy50eXBlRm9vdGVyID09PSBUWVBFX0ZPUk1cbiAgICAgICAgfHwgKHRoaXMudHlwZUZvb3RlciA9PT0gVFlQRV9TQ1JPTEwgJiYgdGhpcy50b3RhbEl0ZW1zIDw9IHRoaXMubWF4Q3VycmVudEl0ZW1zKSlcbiAgICApO1xuICB9XG5cbiAgLyoqIEZsYWc6IGhheSBtw6FzIHJlc3VsdGFkb3MgKHNjcm9sbCkuICovXG4gIGdldCBtb3JlUmVzdWx0cygpIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5zdGF0dXMgPT09IFBhZ2VTdGF0dXMuRmluaXNoU2VhcmNoICYmXG4gICAgICAodGhpcy50eXBlRm9vdGVyID09PSBUWVBFX1NDUk9MTCAmJiB0aGlzLnRvdGFsSXRlbXMgPiB0aGlzLm1heEN1cnJlbnRJdGVtcylcbiAgICApO1xuICB9XG5cbiAgLyoqIEZsYWc6IG5vIGhheSByZXN1bHRhZG9zLiAqL1xuICBnZXQgZW1wdHlSZXN1bHQoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdHVzID09PSBQYWdlU3RhdHVzLkZpbmlzaFNlYXJjaCAmJiB0aGlzLnRvdGFsSXRlbXMgPT09IDA7XG4gIH1cblxuICBnZXQgbWVzc2FnZSgpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgIGlmICh0aGlzLnNlYXJjaEluaXRpYXRlZCkgcmV0dXJuIHRoaXMuaW5pdE1lc3NhZ2U7XG4gICAgaWYgKHRoaXMuc2VhcmNoaW5nKSByZXR1cm4gdGhpcy5zZWFyY2hpbmdNZXNzYWdlO1xuICAgIGlmICh0aGlzLnJlYWRPbmx5KSByZXR1cm4gdGhpcy5yZWFkT25seU1lc3NhZ2U7XG4gICAgaWYgKHRoaXMuZm91bmRSZXN1bHQpIHJldHVybiB0aGlzLmZpbmlzaE1lc3NhZ2U7XG4gICAgaWYgKHRoaXMubW9yZVJlc3VsdHMpIHJldHVybiB0aGlzLm1vcmVSZXN1bHRzTWVzc2FnZTtcbiAgICBpZiAodGhpcy5lbXB0eVJlc3VsdCkgcmV0dXJuIHRoaXMuZW1wdHlNZXNzYWdlO1xuICAgIGlmICh0aGlzLmVycm9yKSByZXR1cm4gdGhpcy5lcnJvck1lc3NhZ2U7XG4gICAgcmV0dXJuIG9mKFwiXCIpO1xuICB9XG5cbiAgZ2V0IGluaXRNZXNzYWdlKCk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlU2VydmljZS5zZWxlY3RUcmFuc2xhdGUodGhpcy5tZXNzYWdlcy5nZXQoUGFnZVN0YXR1cy5Jbml0KSk7XG4gIH1cblxuICBnZXQgc2VhcmNoaW5nTWVzc2FnZSgpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2Uuc2VsZWN0VHJhbnNsYXRlKHRoaXMubWVzc2FnZXMuZ2V0KFBhZ2VTdGF0dXMuU2VhcmNoaW5nKSk7XG4gIH1cblxuICBnZXQgZmluaXNoTWVzc2FnZSgpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2Uuc2VsZWN0VHJhbnNsYXRlKHRoaXMubWVzc2FnZXMuZ2V0KFBhZ2VTdGF0dXMuRmluaXNoU2VhcmNoKSk7XG4gIH1cblxuICBnZXQgbW9yZVJlc3VsdHNNZXNzYWdlKCk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlU2VydmljZS5zZWxlY3RUcmFuc2xhdGUodGhpcy5tZXNzYWdlcy5nZXQoTU9SRV9SRVNVTFRTKSk7XG4gIH1cblxuICBnZXQgZW1wdHlNZXNzYWdlKCk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlU2VydmljZS5zZWxlY3RUcmFuc2xhdGUodGhpcy5tZXNzYWdlcy5nZXQoUGFnZVN0YXR1cy5FbXB0eVJlc3VsdCkpO1xuICB9XG5cbiAgZ2V0IHJlYWRPbmx5TWVzc2FnZSgpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2Uuc2VsZWN0VHJhbnNsYXRlKHRoaXMubWVzc2FnZXMuZ2V0KFBhZ2VTdGF0dXMuUmVhZE9ubHkpKTtcbiAgfVxuXG4gIGdldCBlcnJvck1lc3NhZ2UoKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnNlbGVjdFRyYW5zbGF0ZSh0aGlzLm1lc3NhZ2VzLmdldChQYWdlU3RhdHVzLkVycm9yKSk7XG4gIH1cbn0iLCI8ZGl2PlxuICA8ZGl2IFtjbGFzc109XCJnZXRTdHlsZSgpXCI+XG4gICAgPGkgY2xhc3M9XCJmYSBmYS1pbmZvXCI+PC9pPlxuICAgIDxzcGFuPnt7bWVzc2FnZSB8IGFzeW5jfX08L3NwYW4+XG4gIDwvZGl2PlxuXG4gIDxiaXQtaGVscD48L2JpdC1oZWxwPlxuPC9kaXY+Il19
@@ -1,30 +1,27 @@
1
1
  import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, } from "@angular/core";
2
- import { BaseFilter, BASE_RESULTADOS_PAGE } from "../../../base/shared/base.filter";
3
- import { PageStatus } from "../../global.constants";
2
+ import { BaseFilter } from "../../../base/shared/base.filter";
3
+ import { PageStatus, TYPE_FORM, TYPE_LIST, TYPE_SCROLL } from "../../global.constants";
4
4
  import * as i0 from "@angular/core";
5
- import * as i1 from "../../services";
6
- import * as i2 from "@angular/common";
7
- import * as i3 from "primeng/paginator";
8
- import * as i4 from "../help/bit-help.component";
9
- import * as i5 from "@ngneat/transloco";
5
+ import * as i1 from "@angular/common";
6
+ import * as i2 from "./bit-pagijator.component";
7
+ import * as i3 from "./bit-footer-messages.component";
8
+ import * as i4 from "@ngneat/transloco";
10
9
  /**
11
10
  * Componente que muestra un paginador en la sección footer.
12
11
  **/
13
12
  export class BitFooterComponent {
14
- constructor(translateService) {
15
- this.translateService = translateService;
13
+ constructor() {
16
14
  this.mostrarAvisos = true;
17
15
  this.fixed = true; // Indicará si lo queremos fijo abajo en la página. Por defecto sí.
18
16
  this.status = PageStatus.Init; // Determina en qué estado está la página: PageStatus.Init, PageStatus.SEARCHING, PageStatus.FINISH_SEARCH
19
- this.mostrarEnlacesPaginas = true;
20
- this.mostrarPrimeraUltimaPagina = true;
17
+ this.mostrarEnlacesPaginas = true; //deprecated
18
+ this.mostrarPrimeraUltimaPagina = true; //deprecated
21
19
  this.visible = true;
22
- this.forcePageLinkSize = 1; // número de enlaces en el paginador para poder navegar hacia delante o detrás que forzamos a que haya
20
+ this.forcePageLinkSize = 1; //deprecated número de enlaces en el paginador para poder navegar hacia delante o detrás que forzamos a que haya
23
21
  this.onPageChange = new EventEmitter(); //para notificar cambios en la página a mostrar
24
22
  this.onNewPageSize = new EventEmitter(); //para notificar cambios en los elementos a mostrar por página
25
23
  this.baseItemsPerPage = BaseFilter.RESULTADOS_PAGE; // guardamos el número de resultados pre-configurados por página para mostrar la lista de x, x+10 y x+20
26
- this.itemsPerPage = BaseFilter.RESULTADOS_PAGE; // número de elementos por página que mostramos
27
- this.maxCurrentItems = -1;
24
+ this.maxCurrentItems = -1; // número de elementos que mostramos en pantalla. Necesario para el modo scroll
28
25
  }
29
26
  ngOnInit() {
30
27
  if (this.typeFooter == undefined) {
@@ -33,31 +30,6 @@ export class BitFooterComponent {
33
30
  if (this.paginator == undefined) {
34
31
  this.paginator = false;
35
32
  }
36
- //mensajes por defecto si no vienen definidos
37
- if (this.messages == undefined) {
38
- this.setMessages();
39
- this.messages.set(PageStatus.Error, "bitnglibrary.footer.error");
40
- }
41
- }
42
- setMessages() {
43
- console.log("definimos los mensajes del footer de manera estándar");
44
- this.messages = new Map();
45
- if (this.isFooterList() || this.isFooterScroll()) {
46
- this.messages.set(PageStatus.Init, "bitnglibrary.footer.list.init");
47
- this.messages.set(PageStatus.Searching, "bitnglibrary.footer.list.searching");
48
- this.messages.set(PageStatus.EmptyResult, "bitnglibrary.footer.list.emptyresult");
49
- this.messages.set(PageStatus.FinishSearch, "bitnglibrary.footer.list.finishsearch");
50
- this.messages.set(BitFooterComponent.MORE_RESULTS, "bitnglibrary.footer.list.moreresults");
51
- }
52
- else if (this.isFooterForm()) {
53
- this.messages.set(PageStatus.Init, "bitnglibrary.footer.form.init");
54
- this.messages.set(PageStatus.Searching, "bitnglibrary.footer.form.searching");
55
- this.messages.set(PageStatus.FinishSearch, "bitnglibrary.footer.form.finishsearch");
56
- this.messages.set(PageStatus.ReadOnly, "bitnglibrary.footer.list.readonly");
57
- }
58
- else if (this.typeFooter === BitFooterComponent.TYPE_BLANK) {
59
- console.log("the footer is BLANK!");
60
- }
61
33
  }
62
34
  /**
63
35
  * Escucharemos a cambios en las propiedades totalItems para actualizar el paginador con respecto a las páginas que mostramos
@@ -72,165 +44,50 @@ export class BitFooterComponent {
72
44
  else if (propName === "totalItems") {
73
45
  this.totalItems = changedProp.currentValue;
74
46
  console.log("totalItems:" + this.totalItems);
75
- if (changedProp.previousValue !== changedProp.currentValue) {
76
- this.calculatePageLinkSize(); //recalculamos
77
- }
78
47
  this.calculateMaxCurrentItems();
79
48
  }
80
49
  else if (propName === "filter") {
81
50
  this.filter = changedProp.currentValue;
82
51
  this.calculateMaxCurrentItems();
83
- if (changedProp.previousValue !== changedProp.currentValue) {
84
- this.calculatePageLinkSize(); //recalculamos
85
- if (!this.filter?.pagina || this.filter.pagina <= 1) {
86
- this.goToFirstPage();
87
- console.log("goToFirstPage");
88
- }
89
- }
90
- this.first = (this.filter.pagina - 1) * this.filter.resultados;
91
- console.log("first:" + this.first);
92
52
  }
93
53
  }
94
54
  }
95
- showFooter() {
96
- // Problema. Estamos obteniendo un status a null cuando regresamos de una ficha
97
- // status es null porque realmente no se está lanzando ninguna búsqueda por lo que el método updatePageStatus retorna null
98
- return this.typeFooter === 'list' && this.visible;
55
+ showPagijator() {
56
+ return this.typeFooter === 'list' && this.visible && this.paginator;
99
57
  }
100
58
  showScroll() {
101
59
  return this.typeFooter === 'scroll' && this.visible;
102
60
  }
103
- /** Calcula el número de enlaces visibles en el paginador (en el rango entre 1 y BASE_RESULTADOS_PAGE). */
104
- calculatePageLinkSize() {
105
- if (this.forcePageLinkSize == 0) {
106
- console.log(`calculatePageLinkSize totalItems: ${this.totalItems} itemsPerPage:${this.itemsPerPage}`);
107
- this.pageLinkSize = Math.ceil(this.totalItems / this.itemsPerPage);
108
- if (this.pageLinkSize < 1) {
109
- this.pageLinkSize = 1;
110
- }
111
- if (this.pageLinkSize > BASE_RESULTADOS_PAGE) {
112
- this.pageLinkSize = BASE_RESULTADOS_PAGE;
113
- }
114
- }
115
- else {
116
- this.pageLinkSize = this.forcePageLinkSize;
117
- }
118
- console.log("pageLinkSize", this.pageLinkSize);
119
- }
120
61
  calculateMaxCurrentItems() {
121
62
  this.maxCurrentItems = this.filter?.pagina * this.filter?.resultados;
122
63
  if (this.maxCurrentItems > this.totalItems) {
123
64
  this.maxCurrentItems = this.totalItems;
124
65
  }
125
66
  }
126
- /** Establece el número de página en la visualización de resultados. Se invoca cuando el usuario cambia el número de resultados a mostrar o cambia de página */
127
- paginate(event) {
128
- console.log("Page changed to:" + event.page + " maxCurrentItems:" + this.maxCurrentItems + " firstElement:" + this.first);
129
- if (event.rows !== this.itemsPerPage) {
130
- // han cambiado el número de elementos por página
131
- //notificamos que los elementos por página han cambiado
132
- this.onNewPageSize.emit(event.rows);
133
- this.itemsPerPage = event.rows;
134
- this.goToFirstPage();
135
- this.calculatePageLinkSize(); // recalculamos el número de enlaces de página
136
- }
137
- else {
138
- // notificamos a nuestro papá que la página ha cambiado
139
- this.onPageChange.emit(event.page + 1);
140
- }
67
+ pageChange(page) {
68
+ this.onPageChange.emit(page);
141
69
  }
142
- goToFirstPage() {
143
- this.first = 1;
70
+ pageSizeChange(pageSize) {
71
+ this.onNewPageSize.emit(pageSize);
144
72
  }
145
73
  getStyle() {
146
- if (this.fixed && this.typeFooter === BitFooterComponent.TYPE_LIST || this.typeFooter === BitFooterComponent.TYPE_SCROLL) {
74
+ if (this.fixed && this.typeFooter === TYPE_LIST || this.typeFooter === TYPE_SCROLL) {
147
75
  return "footer navbar-fixed-bottom";
148
76
  }
149
- else if (this.fixed && this.typeFooter === BitFooterComponent.TYPE_FORM) {
77
+ else if (this.fixed && this.typeFooter === TYPE_FORM) {
150
78
  return "footer navbar-fixed-bottom-form";
151
79
  }
152
80
  else {
153
81
  return "footer";
154
82
  }
155
83
  }
156
- isFooterList() {
157
- return this.typeFooter === BitFooterComponent.TYPE_LIST;
158
- }
159
- isFooterScroll() {
160
- return this.typeFooter === BitFooterComponent.TYPE_SCROLL;
161
- }
162
- isFooterForm() {
163
- return this.typeFooter === BitFooterComponent.TYPE_FORM;
164
- }
165
- /** Flag: la página está realizando la búsqueda. */
166
- get searchInitiated() {
167
- return this.status === PageStatus.Init || this.status == PageStatus.Reset || !this.status;
168
- }
169
- /** Flag: la página está realizando la búsqueda. */
170
- get searching() {
171
- return this.status === PageStatus.Searching;
172
- }
173
- /** Flag: la página ha finalizado la última búsqueda. */
174
- get searchFinished() {
175
- return this.status === PageStatus.FinishSearch;
176
- }
177
- /** Flag: la página está en modo solo lectura */
178
- get readOnly() {
179
- return this.status == PageStatus.ReadOnly;
180
- }
181
- /** Flag: la página ha finalizado con error */
182
- get error() {
183
- return this.status == PageStatus.Error;
184
- }
185
- /** Flag: encontrado resultado. */
186
- get foundResult() {
187
- return (this.status === PageStatus.FinishSearch &&
188
- ((this.typeFooter === BitFooterComponent.TYPE_LIST && this.totalItems > 0)
189
- || this.typeFooter === BitFooterComponent.TYPE_FORM
190
- || (this.typeFooter === BitFooterComponent.TYPE_SCROLL && this.totalItems <= this.maxCurrentItems)));
191
- }
192
- /** Flag: hay más resultados (scroll). */
193
- get moreResults() {
194
- return (this.status === PageStatus.FinishSearch &&
195
- (this.typeFooter === BitFooterComponent.TYPE_SCROLL && this.totalItems > this.maxCurrentItems));
196
- }
197
- /** Flag: no hay resultados. */
198
- get emptyResult() {
199
- return this.status === PageStatus.FinishSearch && this.totalItems === 0;
200
- }
201
- get initMessage() {
202
- return this.translateService.selectTranslate(this.messages.get(PageStatus.Init));
203
- }
204
- get searchingMessage() {
205
- return this.translateService.selectTranslate(this.messages.get(PageStatus.Searching));
206
- }
207
- get finishMessage() {
208
- return this.translateService.selectTranslate(this.messages.get(PageStatus.FinishSearch));
209
- }
210
- get moreResultsMessage() {
211
- return this.translateService.selectTranslate(this.messages.get(BitFooterComponent.MORE_RESULTS));
212
- }
213
- get emptyMessage() {
214
- return this.translateService.selectTranslate(this.messages.get(PageStatus.EmptyResult));
215
- }
216
- get readOnlyMessage() {
217
- return this.translateService.selectTranslate(this.messages.get(PageStatus.ReadOnly));
218
- }
219
- get errorMessage() {
220
- return this.translateService.selectTranslate(this.messages.get(PageStatus.Error));
221
- }
222
84
  }
223
- BitFooterComponent.TYPE_LIST = "list";
224
- BitFooterComponent.TYPE_SCROLL = "scroll";
225
- BitFooterComponent.TYPE_FORM = "form";
226
- BitFooterComponent.TYPE_BLANK = "blank";
227
- BitFooterComponent.MORE_RESULTS = -1;
228
- BitFooterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.8", ngImport: i0, type: BitFooterComponent, deps: [{ token: i1.TranslateService }], target: i0.ɵɵFactoryTarget.Component });
229
- BitFooterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.8", type: BitFooterComponent, selector: "bit-footer", inputs: { totalItems: "totalItems", filter: "filter", paginator: "paginator", mostrarAvisos: "mostrarAvisos", fixed: "fixed", messages: "messages", status: "status", typeFooter: ["type", "typeFooter"], mostrarEnlacesPaginas: "mostrarEnlacesPaginas", mostrarPrimeraUltimaPagina: "mostrarPrimeraUltimaPagina", visible: "visible", forcePageLinkSize: "forcePageLinkSize" }, outputs: { onPageChange: "onPageChange", onNewPageSize: "onNewPageSize" }, usesOnChanges: true, ngImport: i0, template: "<footer [class]=\"getStyle()\">\n <div class=\"grid\">\n <div class=\"col-12 md:col-2 lg:col-2\" *ngIf=\"showFooter()\">\n <div class=\"numero-resultados\">\n <label>{{\"bitnglibrary.footer.results\" | transloco}}</label>\n <span>{{maxCurrentItems}} / {{totalItems}}</span>\n </div>\n </div>\n <div class=\"col-12 md:col-2 lg:col-2\" *ngIf=\"showScroll()\">\n <div class=\"numero-resultados-scroll\">\n <label>{{\"bitnglibrary.footer.results\" | transloco}}</label>\n <span *ngIf=\"maxCurrentItems >= totalItems\">{{totalItems}}</span>\n <span *ngIf=\"maxCurrentItems < totalItems\">{{maxCurrentItems}} / {{totalItems}}</span>\n </div>\n </div>\n\n <div class=\"col-12 md:col-7 lg:col-7 p-text-center\" *ngIf=\"showFooter()\">\n <p-paginator *ngIf=\"paginator\"\n [first]=\"first\"\n [rows]=\"itemsPerPage\"\n [totalRecords]=\"totalItems\"\n [pageLinkSize]=\"mostrarEnlacesPaginas ? pageLinkSize : 1\"\n [rowsPerPageOptions]=\"[baseItemsPerPage,baseItemsPerPage*5,baseItemsPerPage*25,baseItemsPerPage*50]\"\n [showPageLinks]=\"mostrarEnlacesPaginas\"\n [showJumpToPageDropdown]=\"false\"\n [showFirstLastIcon]=\"mostrarPrimeraUltimaPagina ? true : maxCurrentItems >= totalItems\"\n (onPageChange)=\"paginate($event)\"></p-paginator>\n </div>\n <div class=\"col-12 md:col-3 lg:col-3\">\n <div *ngIf=\"searchInitiated\"\n [className]=\"typeFooter === 'scroll' ? 'mensaje-scroll mensaje-info' : 'mensaje mensaje-info'\">\n <i class=\"fa fa-info\"></i>\n <span>{{initMessage | async}}</span>\n </div>\n\n <div *ngIf=\"searching\"\n [className]=\"typeFooter === 'scroll' ? 'mensaje-scroll mensaje-info' : 'mensaje mensaje-info'\">\n <i class=\"fa fa-info\"></i>\n <span>{{searchingMessage | async}}</span>\n </div>\n\n <div *ngIf=\"readOnly\"\n [className]=\"typeFooter === 'scroll' ? 'mensaje-scroll mensaje-info' : 'mensaje mensaje-info'\">\n <i class=\"fa fa-info\"></i>\n <span>{{readOnlyMessage | async}}</span>\n </div>\n\n <div *ngIf=\"foundResult\"\n [className]=\"typeFooter === 'scroll' ? 'mensaje-scroll mensaje-info' : 'mensaje mensaje-info'\">\n <i class=\"fa fa-info\"></i>\n <span>{{finishMessage | async}}</span>\n </div>\n\n <div *ngIf=\"moreResults\"\n [className]=\"typeFooter === 'scroll' ? 'mensaje-scroll mensaje-info' : 'mensaje mensaje-info'\">\n <i class=\"fa fa-info\"></i>\n <span>{{moreResultsMessage | async}}</span>\n </div>\n\n <div *ngIf=\"emptyResult\"\n [className]=\"typeFooter === 'scroll' ? 'mensaje-scroll mensaje-info' : 'mensaje mensaje-info'\">\n <i class=\"fa fa-exclamation\"></i>\n <span>{{emptyMessage | async}}</span>\n </div>\n\n <div *ngIf=\"error\"\n [className]=\"typeFooter === 'scroll' ? 'mensaje-scroll mensaje-info' : 'mensaje mensaje-info'\">\n <i class=\"fa fa-exclamation-triangle\"></i>\n <span>{{errorMessage | async}}</span>\n </div>\n\n <bit-help></bit-help>\n </div>\n </div>\n</footer>\n", dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.Paginator, selector: "p-paginator", inputs: ["pageLinkSize", "style", "styleClass", "alwaysShow", "templateLeft", "templateRight", "dropdownAppendTo", "dropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showFirstLastIcon", "totalRecords", "rows", "rowsPerPageOptions", "showJumpToPageDropdown", "showJumpToPageInput", "showPageLinks", "dropdownItemTemplate", "first"], outputs: ["onPageChange"] }, { kind: "component", type: i4.BitHelpComponent, selector: "bit-help" }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "pipe", type: i5.TranslocoPipe, name: "transloco" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
85
+ BitFooterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.8", ngImport: i0, type: BitFooterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
86
+ BitFooterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.8", type: BitFooterComponent, selector: "bit-footer", inputs: { totalItems: "totalItems", filter: "filter", paginator: "paginator", mostrarAvisos: "mostrarAvisos", fixed: "fixed", messages: "messages", status: "status", typeFooter: ["type", "typeFooter"], mostrarEnlacesPaginas: "mostrarEnlacesPaginas", mostrarPrimeraUltimaPagina: "mostrarPrimeraUltimaPagina", visible: "visible", forcePageLinkSize: "forcePageLinkSize" }, outputs: { onPageChange: "onPageChange", onNewPageSize: "onNewPageSize" }, usesOnChanges: true, ngImport: i0, template: "<footer [class]=\"getStyle()\">\n\n <div class=\"scroll-outer-container\" *ngIf=\"showScroll()\">\n <div class=\"pagijator-container\">\n <label>{{\"bitnglibrary.footer.results\" | transloco}}</label>\n <span *ngIf=\"maxCurrentItems >= totalItems\">{{totalItems}}</span>\n <span *ngIf=\"maxCurrentItems < totalItems\">{{maxCurrentItems}} / {{totalItems}}</span>\n </div>\n </div>\n\n <bit-pagijator *ngIf=\"showPagijator()\"\n [totalItems]=\"totalItems\"\n [page]=\"filter ? filter.pagina : 1\"\n [rowsPerPageOptions]=\"[baseItemsPerPage,baseItemsPerPage*5,baseItemsPerPage*25,baseItemsPerPage*50]\"\n (onPageChange)=\"pageChange($event)\"\n (onPageSizeChange)=\"pageSizeChange($event)\"></bit-pagijator>\n\n <bit-footer-messages *ngIf=\"mostrarAvisos\"\n [messages]=\"messages\"\n [typeFooter]=\"typeFooter\"\n [status]=\"status\"\n [maxCurrentItems]=\"maxCurrentItems\"\n [totalItems]=\"totalItems\"></bit-footer-messages>\n\n</footer>\n", dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.BitPagijatorComponent, selector: "bit-pagijator", inputs: ["page", "totalItems", "itemsPerPage", "rowsPerPageOptions"], outputs: ["onPageChange", "onPageSizeChange"] }, { kind: "component", type: i3.BitFooterMessagesComponent, selector: "bit-footer-messages", inputs: ["messages", "status", "typeFooter", "maxCurrentItems", "totalItems"] }, { kind: "pipe", type: i4.TranslocoPipe, name: "transloco" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
230
87
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.8", ngImport: i0, type: BitFooterComponent, decorators: [{
231
88
  type: Component,
232
- args: [{ selector: "bit-footer", changeDetection: ChangeDetectionStrategy.OnPush, template: "<footer [class]=\"getStyle()\">\n <div class=\"grid\">\n <div class=\"col-12 md:col-2 lg:col-2\" *ngIf=\"showFooter()\">\n <div class=\"numero-resultados\">\n <label>{{\"bitnglibrary.footer.results\" | transloco}}</label>\n <span>{{maxCurrentItems}} / {{totalItems}}</span>\n </div>\n </div>\n <div class=\"col-12 md:col-2 lg:col-2\" *ngIf=\"showScroll()\">\n <div class=\"numero-resultados-scroll\">\n <label>{{\"bitnglibrary.footer.results\" | transloco}}</label>\n <span *ngIf=\"maxCurrentItems >= totalItems\">{{totalItems}}</span>\n <span *ngIf=\"maxCurrentItems < totalItems\">{{maxCurrentItems}} / {{totalItems}}</span>\n </div>\n </div>\n\n <div class=\"col-12 md:col-7 lg:col-7 p-text-center\" *ngIf=\"showFooter()\">\n <p-paginator *ngIf=\"paginator\"\n [first]=\"first\"\n [rows]=\"itemsPerPage\"\n [totalRecords]=\"totalItems\"\n [pageLinkSize]=\"mostrarEnlacesPaginas ? pageLinkSize : 1\"\n [rowsPerPageOptions]=\"[baseItemsPerPage,baseItemsPerPage*5,baseItemsPerPage*25,baseItemsPerPage*50]\"\n [showPageLinks]=\"mostrarEnlacesPaginas\"\n [showJumpToPageDropdown]=\"false\"\n [showFirstLastIcon]=\"mostrarPrimeraUltimaPagina ? true : maxCurrentItems >= totalItems\"\n (onPageChange)=\"paginate($event)\"></p-paginator>\n </div>\n <div class=\"col-12 md:col-3 lg:col-3\">\n <div *ngIf=\"searchInitiated\"\n [className]=\"typeFooter === 'scroll' ? 'mensaje-scroll mensaje-info' : 'mensaje mensaje-info'\">\n <i class=\"fa fa-info\"></i>\n <span>{{initMessage | async}}</span>\n </div>\n\n <div *ngIf=\"searching\"\n [className]=\"typeFooter === 'scroll' ? 'mensaje-scroll mensaje-info' : 'mensaje mensaje-info'\">\n <i class=\"fa fa-info\"></i>\n <span>{{searchingMessage | async}}</span>\n </div>\n\n <div *ngIf=\"readOnly\"\n [className]=\"typeFooter === 'scroll' ? 'mensaje-scroll mensaje-info' : 'mensaje mensaje-info'\">\n <i class=\"fa fa-info\"></i>\n <span>{{readOnlyMessage | async}}</span>\n </div>\n\n <div *ngIf=\"foundResult\"\n [className]=\"typeFooter === 'scroll' ? 'mensaje-scroll mensaje-info' : 'mensaje mensaje-info'\">\n <i class=\"fa fa-info\"></i>\n <span>{{finishMessage | async}}</span>\n </div>\n\n <div *ngIf=\"moreResults\"\n [className]=\"typeFooter === 'scroll' ? 'mensaje-scroll mensaje-info' : 'mensaje mensaje-info'\">\n <i class=\"fa fa-info\"></i>\n <span>{{moreResultsMessage | async}}</span>\n </div>\n\n <div *ngIf=\"emptyResult\"\n [className]=\"typeFooter === 'scroll' ? 'mensaje-scroll mensaje-info' : 'mensaje mensaje-info'\">\n <i class=\"fa fa-exclamation\"></i>\n <span>{{emptyMessage | async}}</span>\n </div>\n\n <div *ngIf=\"error\"\n [className]=\"typeFooter === 'scroll' ? 'mensaje-scroll mensaje-info' : 'mensaje mensaje-info'\">\n <i class=\"fa fa-exclamation-triangle\"></i>\n <span>{{errorMessage | async}}</span>\n </div>\n\n <bit-help></bit-help>\n </div>\n </div>\n</footer>\n" }]
233
- }], ctorParameters: function () { return [{ type: i1.TranslateService }]; }, propDecorators: { totalItems: [{
89
+ args: [{ selector: "bit-footer", changeDetection: ChangeDetectionStrategy.OnPush, template: "<footer [class]=\"getStyle()\">\n\n <div class=\"scroll-outer-container\" *ngIf=\"showScroll()\">\n <div class=\"pagijator-container\">\n <label>{{\"bitnglibrary.footer.results\" | transloco}}</label>\n <span *ngIf=\"maxCurrentItems >= totalItems\">{{totalItems}}</span>\n <span *ngIf=\"maxCurrentItems < totalItems\">{{maxCurrentItems}} / {{totalItems}}</span>\n </div>\n </div>\n\n <bit-pagijator *ngIf=\"showPagijator()\"\n [totalItems]=\"totalItems\"\n [page]=\"filter ? filter.pagina : 1\"\n [rowsPerPageOptions]=\"[baseItemsPerPage,baseItemsPerPage*5,baseItemsPerPage*25,baseItemsPerPage*50]\"\n (onPageChange)=\"pageChange($event)\"\n (onPageSizeChange)=\"pageSizeChange($event)\"></bit-pagijator>\n\n <bit-footer-messages *ngIf=\"mostrarAvisos\"\n [messages]=\"messages\"\n [typeFooter]=\"typeFooter\"\n [status]=\"status\"\n [maxCurrentItems]=\"maxCurrentItems\"\n [totalItems]=\"totalItems\"></bit-footer-messages>\n\n</footer>\n" }]
90
+ }], ctorParameters: function () { return []; }, propDecorators: { totalItems: [{
234
91
  type: Input
235
92
  }], filter: [{
236
93
  type: Input
@@ -260,4 +117,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.8", ngImpor
260
117
  }], onNewPageSize: [{
261
118
  type: Output
262
119
  }] } });
263
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYml0LWZvb3Rlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iaXQtbmctbGlicmFyeS9zcmMvbGliL3NoYXJlZGxpYnJhcnkvY29tcG9uZW50cy9mb290ZXIvYml0LWZvb3Rlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iaXQtbmctbGlicmFyeS9zcmMvbGliL3NoYXJlZGxpYnJhcnkvY29tcG9uZW50cy9mb290ZXIvYml0LWZvb3Rlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUdMLE1BQU0sR0FFUCxNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsVUFBVSxFQUFFLG9CQUFvQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDcEYsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHdCQUF3QixDQUFDOzs7Ozs7O0FBR3BEOztJQUVJO0FBTUosTUFBTSxPQUFPLGtCQUFrQjtJQTJDN0IsWUFBb0IsZ0JBQWtDO1FBQWxDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUE1QnRELGtCQUFhLEdBQVksSUFBSSxDQUFDO1FBRTlCLFVBQUssR0FBWSxJQUFJLENBQUMsQ0FBQyxtRUFBbUU7UUFJMUYsV0FBTSxHQUFlLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQywwR0FBMEc7UUFJaEosMEJBQXFCLEdBQVksSUFBSSxDQUFDO1FBRXRDLCtCQUEwQixHQUFZLElBQUksQ0FBQztRQUUzQyxZQUFPLEdBQVksSUFBSSxDQUFDO1FBRXhCLHNCQUFpQixHQUFXLENBQUMsQ0FBQyxDQUFDLHNHQUFzRztRQUVySSxpQkFBWSxHQUFHLElBQUksWUFBWSxFQUFVLENBQUMsQ0FBQywrQ0FBK0M7UUFFMUYsa0JBQWEsR0FBRyxJQUFJ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QkFHTixPQUFPO3NCQUROLEtBQUs7Z0JBR04saUJBQWlCO3NCQURoQixLQUFLO2dCQUdOLFlBQVk7c0JBRFgsTUFBTTtnQkFHUCxhQUFhO3NCQURaLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBTaW1wbGVDaGFuZ2UsXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQge09ic2VydmFibGV9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgeyBCYXNlRmlsdGVyLCBCQVNFX1JFU1VMVEFET1NfUEFHRSB9IGZyb20gXCIuLi8uLi8uLi9iYXNlL3NoYXJlZC9iYXNlLmZpbHRlclwiO1xuaW1wb3J0IHsgUGFnZVN0YXR1cyB9IGZyb20gXCIuLi8uLi9nbG9iYWwuY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzXCI7XG5cbi8qKlxuICogQ29tcG9uZW50ZSBxdWUgbXVlc3RyYSB1biBwYWdpbmFkb3IgZW4gbGEgc2VjY2nDs24gZm9vdGVyLlxuICoqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiBcImJpdC1mb290ZXJcIixcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHRlbXBsYXRlVXJsOiBcImJpdC1mb290ZXIuY29tcG9uZW50Lmh0bWxcIlxufSlcbmV4cG9ydCBjbGFzcyBCaXRGb290ZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XG4gIHB1YmxpYyBzdGF0aWMgVFlQRV9MSVNUOiBzdHJpbmcgPSBcImxpc3RcIjtcbiAgcHVibGljIHN0YXRpYyBUWVBFX1NDUk9MTDogc3RyaW5nID0gXCJzY3JvbGxcIjtcbiAgcHVibGljIHN0YXRpYyBUWVBFX0ZPUk06IHN0cmluZyA9IFwiZm9ybVwiO1xuICBwdWJsaWMgc3RhdGljIFRZUEVfQkxBTks6IHN0cmluZyA9IFwiYmxhbmtcIjtcblxuICBwdWJsaWMgc3RhdGljIE1PUkVfUkVTVUxUUyA9IC0xO1xuXG4gIEBJbnB1dCgpXG4gIHRvdGFsSXRlbXM6IG51bWJlcjsgICAgIC8vIE7Dum1lcm8gdG90YWwgZGUgZWxlbWVudG9zIHJlY3VwZXJhZG9zIGRlIGxhIGNvbnN1bHRhXG4gIEBJbnB1dCgpXG4gIGZpbHRlcjogQmFzZUZpbHRlcjtcbiAgQElucHV0KClcbiAgcGFnaW5hdG9yOiBib29sZWFuO1xuICBASW5wdXQoKVxuICBtb3N0cmFyQXZpc29zOiBib29sZWFuID0gdHJ1ZTtcbiAgQElucHV0KClcbiAgZml4ZWQ6IGJvb2xlYW4gPSB0cnVlOyAvLyBJbmRpY2Fyw6Egc2kgbG8gcXVlcmVtb3MgZmlqbyBhYmFqbyBlbiBsYSBww6FnaW5hLiBQb3IgZGVmZWN0byBzw60uXG4gIEBJbnB1dCgpXG4gIG1lc3NhZ2VzOiBNYXA8UGFnZVN0YXR1cywgc3RyaW5nPjtcbiAgQElucHV0KClcbiAgc3RhdHVzOiBQYWdlU3RhdHVzID0gUGFnZVN0YXR1cy5Jbml0OyAvLyBEZXRlcm1pbmEgZW4gcXXDqSBlc3RhZG8gZXN0w6EgbGEgcMOhZ2luYTogUGFnZVN0YXR1cy5Jbml0LCBQYWdlU3RhdHVzLlNFQVJDSElORywgUGFnZVN0YXR1cy5GSU5JU0hfU0VBUkNIXG4gIEBJbnB1dChcInR5cGVcIilcbiAgdHlwZUZvb3Rlcjogc3RyaW5nO1xuICBASW5wdXQoKVxuICBtb3N0cmFyRW5sYWNlc1BhZ2luYXM6IGJvb2xlYW4gPSB0cnVlO1xuICBASW5wdXQoKVxuICBtb3N0cmFyUHJpbWVyYVVsdGltYVBhZ2luYTogYm9vbGVhbiA9IHRydWU7XG4gIEBJbnB1dCgpXG4gIHZpc2libGU6IGJvb2xlYW4gPSB0cnVlO1xuICBASW5wdXQoKVxuICBmb3JjZVBhZ2VMaW5rU2l6ZTogbnVtYmVyID0gMTsgLy8gbsO6bWVybyBkZSBlbmxhY2VzIGVuIGVsIHBhZ2luYWRvciBwYXJhIHBvZGVyIG5hdmVnYXIgaGFjaWEgZGVsYW50ZSBvIGRldHLDoXMgcXVlIGZvcnphbW9zIGEgcXVlIGhheWFcbiAgQE91dHB1dCgpXG4gIG9uUGFnZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpOyAvL3BhcmEgbm90aWZpY2FyIGNhbWJpb3MgZW4gbGEgcMOhZ2luYSBhIG1vc3RyYXJcbiAgQE91dHB1dCgpXG4gIG9uTmV3UGFnZVNpemUgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTsgLy9wYXJhIG5vdGlmaWNhciBjYW1iaW9zIGVuIGxvcyBlbGVtZW50b3MgYSBtb3N0cmFyIHBvciBww6FnaW5hXG5cbiAgYmFzZUl0ZW1zUGVyUGFnZTogbnVtYmVyID0gQmFzZUZpbHRlci5SRVNVTFRBRE9TX1BBR0U7IC8vIGd1YXJkYW1vcyBlbCBuw7ptZXJvIGRlIHJlc3VsdGFkb3MgcHJlLWNvbmZpZ3VyYWRvcyBwb3IgcMOhZ2luYSBwYXJhIG1vc3RyYXIgbGEgbGlzdGEgZGUgeCwgeCsxMCB5IHgrMjBcbiAgaXRlbXNQZXJQYWdlOiBudW1iZXIgPSBCYXNlRmlsdGVyLlJFU1VMVEFET1NfUEFHRTsgLy8gbsO6bWVybyBkZSBlbGVtZW50b3MgcG9yIHDDoWdpbmEgcXVlIG1vc3RyYW1vc1xuICBmaXJzdDogbnVtYmVyO1xuICBwYWdlTGlua1NpemU6IG51bWJlcjsgLy8gbsO6bWVybyBkZSBlbmxhY2VzIGVuIGVsIHBhZ2luYWRvciBwYXJhIHBvZGVyIG5hdmVnYXIgaGFjaWEgZGVsYW50ZSBvIGRldHLDoXNcbiAgbWF4Q3VycmVudEl0ZW1zOiBudW1iZXIgPSAtMTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UpIHtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnR5cGVGb290ZXIgPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnR5cGVGb290ZXIgPSBcImxpc3RcIjtcbiAgICB9XG4gICAgaWYgKHRoaXMucGFnaW5hdG9yID09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5wYWdpbmF0b3IgPSBmYWxzZTtcbiAgICB9XG4gICAgLy9tZW5zYWplcyBwb3IgZGVmZWN0byBzaSBubyB2aWVuZW4gZGVmaW5pZG9zXG4gICAgaWYgKHRoaXMubWVzc2FnZXMgPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnNldE1lc3NhZ2VzKCk7XG4gICAgICB0aGlzLm1lc3NhZ2VzLnNldChQYWdlU3RhdHVzLkVycm9yLCBcImJpdG5nbGlicmFyeS5mb290ZXIuZXJyb3JcIik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRNZXNzYWdlcygpIHtcbiAgICBjb25zb2xlLmxvZyhcImRlZmluaW1vcyBsb3MgbWVuc2FqZXMgZGVsIGZvb3RlciBkZSBtYW5lcmEgZXN0w6FuZGFyXCIpO1xuICAgIHRoaXMubWVzc2FnZXMgPSBuZXcgTWFwPFBhZ2VTdGF0dXMsIHN0cmluZz4oKTtcbiAgICBpZiAodGhpcy5pc0Zvb3Rlckxpc3QoKSB8fCB0aGlzLmlzRm9vdGVyU2Nyb2xsKCkpIHtcbiAgICAgIHRoaXMubWVzc2FnZXMuc2V0KFBhZ2VTdGF0dXMuSW5pdCwgXCJiaXRuZ2xpYnJhcnkuZm9vdGVyLmxpc3QuaW5pdFwiKTtcbiAgICAgIHRoaXMubWVzc2FnZXMuc2V0KFBhZ2VTdGF0dXMuU2VhcmNoaW5nLCBcImJpdG5nbGlicmFyeS5mb290ZXIubGlzdC5zZWFyY2hpbmdcIik7XG4gICAgICB0aGlzLm1lc3NhZ2VzLnNldChQYWdlU3RhdHVzLkVtcHR5UmVzdWx0LCBcImJpdG5nbGlicmFyeS5mb290ZXIubGlzdC5lbXB0eXJlc3VsdFwiKTtcbiAgICAgIHRoaXMubWVzc2FnZXMuc2V0KFBhZ2VTdGF0dXMuRmluaXNoU2VhcmNoLCBcImJpdG5nbGlicmFyeS5mb290ZXIubGlzdC5maW5pc2hzZWFyY2hcIik7XG4gICAgICB0aGlzLm1lc3NhZ2VzLnNldChCaXRGb290ZXJDb21wb25lbnQuTU9SRV9SRVNVTFRTLCBcImJpdG5nbGlicmFyeS5mb290ZXIubGlzdC5tb3JlcmVzdWx0c1wiKVxuICAgIH0gZWxzZSBpZiAodGhpcy5pc0Zvb3RlckZvcm0oKSkge1xuICAgICAgdGhpcy5tZXNzYWdlcy5zZXQoUGFnZVN0YXR1cy5Jbml0LCBcImJpdG5nbGlicmFyeS5mb290ZXIuZm9ybS5pbml0XCIpO1xuICAgICAgdGhpcy5tZXNzYWdlcy5zZXQoUGFnZVN0YXR1cy5TZWFyY2hpbmcsIFwiYml0bmdsaWJyYXJ5LmZvb3Rlci5mb3JtLnNlYXJjaGluZ1wiKTtcbiAgICAgIHRoaXMubWVzc2FnZXMuc2V0KFBhZ2VTdGF0dXMuRmluaXNoU2VhcmNoLCBcImJpdG5nbGlicmFyeS5mb290ZXIuZm9ybS5maW5pc2hzZWFyY2hcIik7XG4gICAgICB0aGlzLm1lc3NhZ2VzLnNldChQYWdlU3RhdHVzLlJlYWRPbmx5LCBcImJpdG5nbGlicmFyeS5mb290ZXIubGlzdC5yZWFkb25seVwiKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMudHlwZUZvb3RlciA9PT0gQml0Rm9vdGVyQ29tcG9uZW50LlRZUEVfQkxBTkspIHtcbiAgICAgIGNvbnNvbGUubG9nKFwidGhlIGZvb3RlciBpcyBCTEFOSyFcIik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEVzY3VjaGFyZW1vcyBhIGNhbWJpb3MgZW4gbGFzIHByb3BpZWRhZGVzIHRvdGFsSXRlbXMgcGFyYSBhY3R1YWxpemFyIGVsIHBhZ2luYWRvciBjb24gcmVzcGVjdG8gYSBsYXMgcMOhZ2luYXMgcXVlIG1vc3RyYW1vc1xuICAgKi9cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogeyBbcHJvcEtleTogc3RyaW5nXTogU2ltcGxlQ2hhbmdlIH0pIHtcbiAgICBmb3IgKGxldCBwcm9wTmFtZSBpbiBjaGFuZ2VzKSB7XG4gICAgICBsZXQgY2hhbmdlZFByb3AgPSBjaGFuZ2VzW3Byb3BOYW1lXTtcbiAgICAgIGlmIChwcm9wTmFtZSA9PT0gXCJzdGF0dXNcIikge1xuICAgICAgICB0aGlzLnN0YXR1cyA9IGNoYW5nZWRQcm9wLmN1cnJlbnRWYWx1ZTtcbiAgICAgICAgY29uc29sZS5sb2coXCJzdGF0dXM6XCIgKyB0aGlzLnN0YXR1cyk7XG4gICAgICB9IGVsc2UgaWYgKHByb3BOYW1lID09PSBcInRvdGFsSXRlbXNcIikge1xuICAgICAgICB0aGlzLnRvdGFsSXRlbXMgPSBjaGFuZ2VkUHJvcC5jdXJyZW50VmFsdWU7XG4gICAgICAgIGNvbnNvbGUubG9nKFwidG90YWxJdGVtczpcIiArIHRoaXMudG90YWxJdGVtcyk7XG4gICAgICAgIGlmIChjaGFuZ2VkUHJvcC5wcmV2aW91c1ZhbHVlICE9PSBjaGFuZ2VkUHJvcC5jdXJyZW50VmFsdWUpIHtcbiAgICAgICAgICB0aGlzLmNhbGN1bGF0ZVBhZ2VMaW5rU2l6ZSgpOyAgICAgLy9yZWNhbGN1bGFtb3NcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNhbGN1bGF0ZU1heEN1cnJlbnRJdGVtcygpO1xuICAgICAgfSBlbHNlIGlmIChwcm9wTmFtZSA9PT0gXCJmaWx0ZXJcIikge1xuICAgICAgICB0aGlzLmZpbHRlciA9IGNoYW5nZWRQcm9wLmN1cnJlbnRWYWx1ZTtcbiAgICAgICAgdGhpcy5jYWxjdWxhdGVNYXhDdXJyZW50SXRlbXMoKTtcbiAgICAgICAgaWYgKGNoYW5nZWRQcm9wLnByZXZpb3VzVmFsdWUgIT09IGNoYW5nZWRQcm9wLmN1cnJlbnRWYWx1ZSkge1xuICAgICAgICAgIHRoaXMuY2FsY3VsYXRlUGFnZUxpbmtTaXplKCk7ICAgICAvL3JlY2FsY3VsYW1vc1xuICAgICAgICAgIGlmICghdGhpcy5maWx0ZXI/LnBhZ2luYSB8fCB0aGlzLmZpbHRlci5wYWdpbmEgPD0gMSkge1xuICAgICAgICAgICAgdGhpcy5nb1RvRmlyc3RQYWdlKCk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcImdvVG9GaXJzdFBhZ2VcIik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuZmlyc3QgPSAodGhpcy5maWx0ZXIucGFnaW5hIC0gMSkgKiB0aGlzLmZpbHRlci5yZXN1bHRhZG9zO1xuICAgICAgICBjb25zb2xlLmxvZyhcImZpcnN0OlwiICsgdGhpcy5maXJzdCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc2hvd0Zvb3RlcigpIHtcbiAgICAvLyBQcm9ibGVtYS4gRXN0YW1vcyBvYnRlbmllbmRvIHVuIHN0YXR1cyBhIG51bGwgY3VhbmRvIHJlZ3Jlc2Ftb3MgZGUgdW5hIGZpY2hhXG4gICAgLy8gc3RhdHVzIGVzIG51bGwgcG9ycXVlIHJlYWxtZW50ZSBubyBzZSBlc3TDoSBsYW56YW5kbyBuaW5ndW5hIGLDunNxdWVkYSBwb3IgbG8gcXVlIGVsIG3DqXRvZG8gdXBkYXRlUGFnZVN0YXR1cyByZXRvcm5hICBudWxsXG4gICAgcmV0dXJuIHRoaXMudHlwZUZvb3RlciA9PT0gJ2xpc3QnICYmIHRoaXMudmlzaWJsZTtcbiAgfVxuXG4gIHNob3dTY3JvbGwoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudHlwZUZvb3RlciA9PT0gJ3Njcm9sbCcgJiYgdGhpcy52aXNpYmxlO1xuICB9XG5cbiAgLyoqIENhbGN1bGEgZWwgbsO6bWVybyBkZSBlbmxhY2VzIHZpc2libGVzIGVuIGVsIHBhZ2luYWRvciAoZW4gZWwgcmFuZ28gZW50cmUgMSB5IEJBU0VfUkVTVUxUQURPU19QQUdFKS4gKi9cbiAgY2FsY3VsYXRlUGFnZUxpbmtTaXplKCkge1xuICAgIGlmICh0aGlzLmZvcmNlUGFnZUxpbmtTaXplID09IDApIHtcbiAgICAgIGNvbnNvbGUubG9nKGBjYWxjdWxhdGVQYWdlTGlua1NpemUgdG90YWxJdGVtczogJHt0aGlzLnRvdGFsSXRlbXN9IGl0ZW1zUGVyUGFnZToke3RoaXMuaXRlbXNQZXJQYWdlfWApO1xuICAgICAgdGhpcy5wYWdlTGlua1NpemUgPSBNYXRoLmNlaWwodGhpcy50b3RhbEl0ZW1zIC8gdGhpcy5pdGVtc1BlclBhZ2UpO1xuICAgICAgaWYgKHRoaXMucGFnZUxpbmtTaXplIDwgMSkge1xuICAgICAgICB0aGlzLnBhZ2VMaW5rU2l6ZSA9IDE7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5wYWdlTGlua1NpemUgPiBCQVNFX1JFU1VMVEFET1NfUEFHRSkge1xuICAgICAgICB0aGlzLnBhZ2VMaW5rU2l6ZSA9IEJBU0VfUkVTVUxUQURPU19QQUdFO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnBhZ2VMaW5rU2l6ZSA9IHRoaXMuZm9yY2VQYWdlTGlua1NpemU7XG4gICAgfVxuICAgIGNvbnNvbGUubG9nKFwicGFnZUxpbmtTaXplXCIsIHRoaXMucGFnZUxpbmtTaXplKTtcbiAgfVxuXG4gIGNhbGN1bGF0ZU1heEN1cnJlbnRJdGVtcygpIHtcbiAgICB0aGlzLm1heEN1cnJlbnRJdGVtcyA9IHRoaXMuZmlsdGVyPy5wYWdpbmEgKiB0aGlzLmZpbHRlcj8ucmVzdWx0YWRvcztcbiAgICBpZiAodGhpcy5tYXhDdXJyZW50SXRlbXMgPiB0aGlzLnRvdGFsSXRlbXMpIHtcbiAgICAgIHRoaXMubWF4Q3VycmVudEl0ZW1zID0gdGhpcy50b3RhbEl0ZW1zO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBFc3RhYmxlY2UgZWwgbsO6bWVybyBkZSBww6FnaW5hIGVuIGxhIHZpc3VhbGl6YWNpw7NuIGRlIHJlc3VsdGFkb3MuIFNlIGludm9jYSBjdWFuZG8gZWwgdXN1YXJpbyBjYW1iaWEgZWwgbsO6bWVybyBkZSByZXN1bHRhZG9zIGEgbW9zdHJhciBvIGNhbWJpYSBkZSBww6FnaW5hICovXG4gIHBhZ2luYXRlKGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICBjb25zb2xlLmxvZyhcIlBhZ2UgY2hhbmdlZCB0bzpcIiArIGV2ZW50LnBhZ2UgKyBcIiBtYXhDdXJyZW50SXRlbXM6XCIgKyB0aGlzLm1heEN1cnJlbnRJdGVtcyArIFwiIGZpcnN0RWxlbWVudDpcIiArIHRoaXMuZmlyc3QpO1xuICAgIGlmIChldmVudC5yb3dzICE9PSB0aGlzLml0ZW1zUGVyUGFnZSkge1xuICAgICAgLy8gaGFuIGNhbWJpYWRvIGVsIG7Dum1lcm8gZGUgZWxlbWVudG9zIHBvciBww6FnaW5hXG4gICAgICAvL25vdGlmaWNhbW9zIHF1ZSBsb3MgZWxlbWVudG9zIHBvciBww6FnaW5hIGhhbiBjYW1iaWFkb1xuICAgICAgdGhpcy5vbk5ld1BhZ2VTaXplLmVtaXQoZXZlbnQucm93cyk7XG4gICAgICB0aGlzLml0ZW1zUGVyUGFnZSA9IGV2ZW50LnJvd3M7XG4gICAgICB0aGlzLmdvVG9GaXJzdFBhZ2UoKTtcbiAgICAgIHRoaXMuY2FsY3VsYXRlUGFnZUxpbmtTaXplKCk7IC8vIHJlY2FsY3VsYW1vcyBlbCBuw7ptZXJvIGRlIGVubGFjZXMgZGUgcMOhZ2luYVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBub3RpZmljYW1vcyBhIG51ZXN0cm8gcGFww6EgcXVlIGxhIHDDoWdpbmEgaGEgY2FtYmlhZG9cbiAgICAgIHRoaXMub25QYWdlQ2hhbmdlLmVtaXQoZXZlbnQucGFnZSArIDEpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ29Ub0ZpcnN0UGFnZSgpIHtcbiAgICB0aGlzLmZpcnN0ID0gMTtcbiAgfVxuXG4gIGdldFN0eWxlKCkge1xuICAgIGlmICh0aGlzLmZpeGVkICYmIHRoaXMudHlwZUZvb3RlciA9PT0gQml0Rm9vdGVyQ29tcG9uZW50LlRZUEVfTElTVCB8fCB0aGlzLnR5cGVGb290ZXIgPT09IEJpdEZvb3RlckNvbXBvbmVudC5UWVBFX1NDUk9MTCkge1xuICAgICAgcmV0dXJuIFwiZm9vdGVyIG5hdmJhci1maXhlZC1ib3R0b21cIjtcbiAgICB9IGVsc2UgaWYgKHRoaXMuZml4ZWQgJiYgdGhpcy50eXBlRm9vdGVyID09PSBCaXRGb290ZXJDb21wb25lbnQuVFlQRV9GT1JNKSB7XG4gICAgICByZXR1cm4gXCJmb290ZXIgbmF2YmFyLWZpeGVkLWJvdHRvbS1mb3JtXCI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBcImZvb3RlclwiO1xuICAgIH1cbiAgfVxuXG4gIGlzRm9vdGVyTGlzdCgpIHtcbiAgICByZXR1cm4gdGhpcy50eXBlRm9vdGVyID09PSBCaXRGb290ZXJDb21wb25lbnQuVFlQRV9MSVNUO1xuICB9XG5cbiAgaXNGb290ZXJTY3JvbGwoKSB7XG4gICAgcmV0dXJuIHRoaXMudHlwZUZvb3RlciA9PT0gQml0Rm9vdGVyQ29tcG9uZW50LlRZUEVfU0NST0xMO1xuICB9XG5cbiAgaXNGb290ZXJGb3JtKCkge1xuICAgIHJldHVybiB0aGlzLnR5cGVGb290ZXIgPT09IEJpdEZvb3RlckNvbXBvbmVudC5UWVBFX0ZPUk07XG4gIH1cblxuICAvKiogRmxhZzogbGEgcMOhZ2luYSBlc3TDoSByZWFsaXphbmRvIGxhIGLDunNxdWVkYS4gKi9cbiAgZ2V0IHNlYXJjaEluaXRpYXRlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0dXMgPT09IFBhZ2VTdGF0dXMuSW5pdCB8fCB0aGlzLnN0YXR1cyA9PSBQYWdlU3RhdHVzLlJlc2V0IHx8ICF0aGlzLnN0YXR1cztcbiAgfVxuXG4gIC8qKiBGbGFnOiBsYSBww6FnaW5hIGVzdMOhIHJlYWxpemFuZG8gbGEgYsO6c3F1ZWRhLiAqL1xuICBnZXQgc2VhcmNoaW5nKCkge1xuICAgIHJldHVybiB0aGlzLnN0YXR1cyA9PT0gUGFnZVN0YXR1cy5TZWFyY2hpbmc7XG4gIH1cblxuICAvKiogRmxhZzogbGEgcMOhZ2luYSBoYSBmaW5hbGl6YWRvIGxhIMO6bHRpbWEgYsO6c3F1ZWRhLiAqL1xuICBnZXQgc2VhcmNoRmluaXNoZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdHVzID09PSBQYWdlU3RhdHVzLkZpbmlzaFNlYXJjaDtcbiAgfVxuXG4gIC8qKiBGbGFnOiBsYSBww6FnaW5hIGVzdMOhIGVuIG1vZG8gc29sbyBsZWN0dXJhICovXG4gIGdldCByZWFkT25seSgpIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0dXMgPT0gUGFnZVN0YXR1cy5SZWFkT25seTtcbiAgfVxuXG4gIC8qKiBGbGFnOiBsYSBww6FnaW5hIGhhIGZpbmFsaXphZG8gY29uIGVycm9yICovXG4gIGdldCBlcnJvcigpIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0dXMgPT0gUGFnZVN0YXR1cy5FcnJvcjtcbiAgfVxuXG4gIC8qKiBGbGFnOiBlbmNvbnRyYWRvIHJlc3VsdGFkby4gKi9cbiAgZ2V0IGZvdW5kUmVzdWx0KCkge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLnN0YXR1cyA9PT0gUGFnZVN0YXR1cy5GaW5pc2hTZWFyY2ggJiZcbiAgICAgICgodGhpcy50eXBlRm9vdGVyID09PSBCaXRGb290ZXJDb21wb25lbnQuVFlQRV9MSVNUICYmIHRoaXMudG90YWxJdGVtcyA+IDApXG4gICAgICAgIHx8IHRoaXMudHlwZUZvb3RlciA9PT0gQml0Rm9vdGVyQ29tcG9uZW50LlRZUEVfRk9STVxuICAgICAgICB8fCAodGhpcy50eXBlRm9vdGVyID09PSBCaXRGb290ZXJDb21wb25lbnQuVFlQRV9TQ1JPTEwgJiYgdGhpcy50b3RhbEl0ZW1zIDw9IHRoaXMubWF4Q3VycmVudEl0ZW1zKSlcbiAgICApO1xuICB9XG5cbiAgLyoqIEZsYWc6IGhheSBtw6FzIHJlc3VsdGFkb3MgKHNjcm9sbCkuICovXG4gIGdldCBtb3JlUmVzdWx0cygpIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5zdGF0dXMgPT09IFBhZ2VTdGF0dXMuRmluaXNoU2VhcmNoICYmXG4gICAgICAodGhpcy50eXBlRm9vdGVyID09PSBCaXRGb290ZXJDb21wb25lbnQuVFlQRV9TQ1JPTEwgJiYgdGhpcy50b3RhbEl0ZW1zID4gdGhpcy5tYXhDdXJyZW50SXRlbXMpXG4gICAgKTtcbiAgfVxuXG4gIC8qKiBGbGFnOiBubyBoYXkgcmVzdWx0YWRvcy4gKi9cbiAgZ2V0IGVtcHR5UmVzdWx0KCkge1xuICAgIHJldHVybiB0aGlzLnN0YXR1cyA9PT0gUGFnZVN0YXR1cy5GaW5pc2hTZWFyY2ggJiYgdGhpcy50b3RhbEl0ZW1zID09PSAwO1xuICB9XG5cbiAgZ2V0IGluaXRNZXNzYWdlKCk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlU2VydmljZS5zZWxlY3RUcmFuc2xhdGUodGhpcy5tZXNzYWdlcy5nZXQoUGFnZVN0YXR1cy5Jbml0KSk7XG4gIH1cblxuICBnZXQgc2VhcmNoaW5nTWVzc2FnZSgpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2Uuc2VsZWN0VHJhbnNsYXRlKHRoaXMubWVzc2FnZXMuZ2V0KFBhZ2VTdGF0dXMuU2VhcmNoaW5nKSk7XG4gIH1cblxuICBnZXQgZmluaXNoTWVzc2FnZSgpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2Uuc2VsZWN0VHJhbnNsYXRlKHRoaXMubWVzc2FnZXMuZ2V0KFBhZ2VTdGF0dXMuRmluaXNoU2VhcmNoKSk7XG4gIH1cblxuICBnZXQgbW9yZVJlc3VsdHNNZXNzYWdlKCk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlU2VydmljZS5zZWxlY3RUcmFuc2xhdGUodGhpcy5tZXNzYWdlcy5nZXQoQml0Rm9vdGVyQ29tcG9uZW50Lk1PUkVfUkVTVUxUUykpO1xuICB9XG5cbiAgZ2V0IGVtcHR5TWVzc2FnZSgpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2Uuc2VsZWN0VHJhbnNsYXRlKHRoaXMubWVzc2FnZXMuZ2V0KFBhZ2VTdGF0dXMuRW1wdHlSZXN1bHQpKTtcbiAgfVxuXG4gIGdldCByZWFkT25seU1lc3NhZ2UoKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnNlbGVjdFRyYW5zbGF0ZSh0aGlzLm1lc3NhZ2VzLmdldChQYWdlU3RhdHVzLlJlYWRPbmx5KSk7XG4gIH1cblxuICBnZXQgZXJyb3JNZXNzYWdlKCk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlU2VydmljZS5zZWxlY3RUcmFuc2xhdGUodGhpcy5tZXNzYWdlcy5nZXQoUGFnZVN0YXR1cy5FcnJvcikpO1xuICB9XG59XG4iLCI8Zm9vdGVyIFtjbGFzc109XCJnZXRTdHlsZSgpXCI+XG4gIDxkaXYgY2xhc3M9XCJncmlkXCI+XG4gICAgPGRpdiBjbGFzcz1cImNvbC0xMiBtZDpjb2wtMiBsZzpjb2wtMlwiICpuZ0lmPVwic2hvd0Zvb3RlcigpXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwibnVtZXJvLXJlc3VsdGFkb3NcIj5cbiAgICAgICAgPGxhYmVsPnt7XCJiaXRuZ2xpYnJhcnkuZm9vdGVyLnJlc3VsdHNcIiB8IHRyYW5zbG9jb319PC9sYWJlbD5cbiAgICAgICAgPHNwYW4+e3ttYXhDdXJyZW50SXRlbXN9fSAvIHt7dG90YWxJdGVtc319PC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImNvbC0xMiBtZDpjb2wtMiBsZzpjb2wtMlwiICpuZ0lmPVwic2hvd1Njcm9sbCgpXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwibnVtZXJvLXJlc3VsdGFkb3Mtc2Nyb2xsXCI+XG4gICAgICAgIDxsYWJlbD57e1wiYml0bmdsaWJyYXJ5LmZvb3Rlci5yZXN1bHRzXCIgfCB0cmFuc2xvY299fTwvbGFiZWw+XG4gICAgICAgIDxzcGFuICpuZ0lmPVwibWF4Q3VycmVudEl0ZW1zID49IHRvdGFsSXRlbXNcIj57e3RvdGFsSXRlbXN9fTwvc3Bhbj5cbiAgICAgICAgPHNwYW4gKm5nSWY9XCJtYXhDdXJyZW50SXRlbXMgPCB0b3RhbEl0ZW1zXCI+e3ttYXhDdXJyZW50SXRlbXN9fSAvIHt7dG90YWxJdGVtc319PC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIG1kOmNvbC03IGxnOmNvbC03IHAtdGV4dC1jZW50ZXJcIiAqbmdJZj1cInNob3dGb290ZXIoKVwiPlxuICAgICAgPHAtcGFnaW5hdG9yICpuZ0lmPVwicGFnaW5hdG9yXCJcbiAgICAgICAgICBbZmlyc3RdPVwiZmlyc3RcIlxuICAgICAgICAgIFtyb3dzXT1cIml0ZW1zUGVyUGFnZVwiXG4gICAgICAgICAgW3RvdGFsUmVjb3Jkc109XCJ0b3RhbEl0ZW1zXCJcbiAgICAgICAgICBbcGFnZUxpbmtTaXplXT1cIm1vc3RyYXJFbmxhY2VzUGFnaW5hcyA/IHBhZ2VMaW5rU2l6ZSA6IDFcIlxuICAgICAgICAgIFtyb3dzUGVyUGFnZU9wdGlvbnNdPVwiW2Jhc2VJdGVtc1BlclBhZ2UsYmFzZUl0ZW1zUGVyUGFnZSo1LGJhc2VJdGVtc1BlclBhZ2UqMjUsYmFzZUl0ZW1zUGVyUGFnZSo1MF1cIlxuICAgICAgICAgIFtzaG93UGFnZUxpbmtzXT1cIm1vc3RyYXJFbmxhY2VzUGFnaW5hc1wiXG4gICAgICAgICAgW3Nob3dKdW1wVG9QYWdlRHJvcGRvd25dPVwiZmFsc2VcIlxuICAgICAgICAgIFtzaG93Rmlyc3RMYXN0SWNvbl09XCJtb3N0cmFyUHJpbWVyYVVsdGltYVBhZ2luYSA/IHRydWUgOiBtYXhDdXJyZW50SXRlbXMgPj0gdG90YWxJdGVtc1wiXG4gICAgICAgICAgKG9uUGFnZUNoYW5nZSk9XCJwYWdpbmF0ZSgkZXZlbnQpXCI+PC9wLXBhZ2luYXRvcj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIG1kOmNvbC0zIGxnOmNvbC0zXCI+XG4gICAgICA8ZGl2ICpuZ0lmPVwic2VhcmNoSW5pdGlhdGVkXCJcbiAgICAgICAgICAgW2NsYXNzTmFtZV09XCJ0eXBlRm9vdGVyID09PSAnc2Nyb2xsJyA/ICdtZW5zYWplLXNjcm9sbCBtZW5zYWplLWluZm8nIDogJ21lbnNhamUgbWVuc2FqZS1pbmZvJ1wiPlxuICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWluZm9cIj48L2k+XG4gICAgICAgIDxzcGFuPnt7aW5pdE1lc3NhZ2UgfCBhc3luY319PC9zcGFuPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgKm5nSWY9XCJzZWFyY2hpbmdcIlxuICAgICAgICAgICBbY2xhc3NOYW1lXT1cInR5cGVGb290ZXIgPT09ICdzY3JvbGwnID8gJ21lbnNhamUtc2Nyb2xsIG1lbnNhamUtaW5mbycgOiAnbWVuc2FqZSBtZW5zYWplLWluZm8nXCI+XG4gICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtaW5mb1wiPjwvaT5cbiAgICAgICAgPHNwYW4+e3tzZWFyY2hpbmdNZXNzYWdlIHwgYXN5bmN9fTwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2ICpuZ0lmPVwicmVhZE9ubHlcIlxuICAgICAgICAgICBbY2xhc3NOYW1lXT1cInR5cGVGb290ZXIgPT09ICdzY3JvbGwnID8gJ21lbnNhamUtc2Nyb2xsIG1lbnNhamUtaW5mbycgOiAnbWVuc2FqZSBtZW5zYWplLWluZm8nXCI+XG4gICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtaW5mb1wiPjwvaT5cbiAgICAgICAgPHNwYW4+e3tyZWFkT25seU1lc3NhZ2UgfCBhc3luY319PC9zcGFuPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgKm5nSWY9XCJmb3VuZFJlc3VsdFwiXG4gICAgICAgICAgIFtjbGFzc05hbWVdPVwidHlwZUZvb3RlciA9PT0gJ3Njcm9sbCcgPyAnbWVuc2FqZS1zY3JvbGwgbWVuc2FqZS1pbmZvJyA6ICdtZW5zYWplIG1lbnNhamUtaW5mbydcIj5cbiAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1pbmZvXCI+PC9pPlxuICAgICAgICA8c3Bhbj57e2ZpbmlzaE1lc3NhZ2UgfCBhc3luY319PC9zcGFuPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgKm5nSWY9XCJtb3JlUmVzdWx0c1wiXG4gICAgICAgICAgIFtjbGFzc05hbWVdPVwidHlwZUZvb3RlciA9PT0gJ3Njcm9sbCcgPyAnbWVuc2FqZS1zY3JvbGwgbWVuc2FqZS1pbmZvJyA6ICdtZW5zYWplIG1lbnNhamUtaW5mbydcIj5cbiAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1pbmZvXCI+PC9pPlxuICAgICAgICA8c3Bhbj57e21vcmVSZXN1bHRzTWVzc2FnZSB8IGFzeW5jfX08L3NwYW4+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiAqbmdJZj1cImVtcHR5UmVzdWx0XCJcbiAgICAgICAgICAgW2NsYXNzTmFtZV09XCJ0eXBlRm9vdGVyID09PSAnc2Nyb2xsJyA/ICdtZW5zYWplLXNjcm9sbCBtZW5zYWplLWluZm8nIDogJ21lbnNhamUgbWVuc2FqZS1pbmZvJ1wiPlxuICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWV4Y2xhbWF0aW9uXCI+PC9pPlxuICAgICAgICA8c3Bhbj57e2VtcHR5TWVzc2FnZSB8IGFzeW5jfX08L3NwYW4+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiAqbmdJZj1cImVycm9yXCJcbiAgICAgICAgICAgW2NsYXNzTmFtZV09XCJ0eXBlRm9vdGVyID09PSAnc2Nyb2xsJyA/ICdtZW5zYWplLXNjcm9sbCBtZW5zYWplLWluZm8nIDogJ21lbnNhamUgbWVuc2FqZS1pbmZvJ1wiPlxuICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWV4Y2xhbWF0aW9uLXRyaWFuZ2xlXCI+PC9pPlxuICAgICAgICA8c3Bhbj57e2Vycm9yTWVzc2FnZSB8IGFzeW5jfX08L3NwYW4+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGJpdC1oZWxwPjwvYml0LWhlbHA+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9mb290ZXI+XG4iXX0=
120
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYml0LWZvb3Rlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iaXQtbmctbGlicmFyeS9zcmMvbGliL3NoYXJlZGxpYnJhcnkvY29tcG9uZW50cy9mb290ZXIvYml0LWZvb3Rlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iaXQtbmctbGlicmFyeS9zcmMvbGliL3NoYXJlZGxpYnJhcnkvY29tcG9uZW50cy9mb290ZXIvYml0LWZvb3Rlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUdMLE1BQU0sR0FFUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDOUQsT0FBTyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxNQUFNLHdCQUF3QixDQUFDOzs7Ozs7QUFFdkY7O0lBRUk7QUFNSixNQUFNLE9BQU8sa0JBQWtCO0lBaUM3QjtRQXpCQSxrQkFBYSxHQUFZLElBQUksQ0FBQztRQUU5QixVQUFLLEdBQVksSUFBSSxDQUFDLENBQUMsbUVBQW1FO1FBSTFGLFdBQU0sR0FBZSxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsMEdBQTBHO1FBSWhKLDBCQUFxQixHQUFZLElBQUksQ0FBQyxDQUFFLFlBQVk7UUFFcEQsK0JBQTBCLEdBQVksSUFBSSxDQUFDLENBQUMsWUFBWTtRQUV4RCxZQUFPLEdBQVksSUFBSSxDQUFDO1FBRXhCLHNCQUFpQixHQUFXLENBQUMsQ0FBQyxDQUFDLGdIQUFnSDtRQUUvSSxpQkFBWSxHQUFHLElBQUksWUFBWSxFQUFVLENBQUMsQ0FBQywrQ0FBK0M7UUFFMUYsa0JBQWEsR0FBRyxJQUFJLFlBQVksRUFB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QU07MEVBSy9DLFVBQVU7c0JBRFQsS0FBSztnQkFHTixNQUFNO3NCQURMLEtBQUs7Z0JBR04sU0FBUztzQkFEUixLQUFLO2dCQUdOLGFBQWE7c0JBRFosS0FBSztnQkFHTixLQUFLO3NCQURKLEtBQUs7Z0JBR04sUUFBUTtzQkFEUCxLQUFLO2dCQUdOLE1BQU07c0JBREwsS0FBSztnQkFHTixVQUFVO3NCQURULEtBQUs7dUJBQUMsTUFBTTtnQkFHYixxQkFBcUI7c0JBRHBCLEtBQUs7Z0JBR04sMEJBQTBCO3NCQUR6QixLQUFLO2dCQUdOLE9BQU87c0JBRE4sS0FBSztnQkFHTixpQkFBaUI7c0JBRGhCLEtBQUs7Z0JBR04sWUFBWTtzQkFEWCxNQUFNO2dCQUdQLGFBQWE7c0JBRFosTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFNpbXBsZUNoYW5nZSxcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IEJhc2VGaWx0ZXIgfSBmcm9tIFwiLi4vLi4vLi4vYmFzZS9zaGFyZWQvYmFzZS5maWx0ZXJcIjtcbmltcG9ydCB7IFBhZ2VTdGF0dXMsIFRZUEVfRk9STSwgVFlQRV9MSVNULCBUWVBFX1NDUk9MTCB9IGZyb20gXCIuLi8uLi9nbG9iYWwuY29uc3RhbnRzXCI7XG5cbi8qKlxuICogQ29tcG9uZW50ZSBxdWUgbXVlc3RyYSB1biBwYWdpbmFkb3IgZW4gbGEgc2VjY2nDs24gZm9vdGVyLlxuICoqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiBcImJpdC1mb290ZXJcIixcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHRlbXBsYXRlVXJsOiBcImJpdC1mb290ZXIuY29tcG9uZW50Lmh0bWxcIlxufSlcbmV4cG9ydCBjbGFzcyBCaXRGb290ZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XG4gIEBJbnB1dCgpXG4gIHRvdGFsSXRlbXM6IG51bWJlcjsgICAgIC8vIE7Dum1lcm8gdG90YWwgZGUgZWxlbWVudG9zIHJlY3VwZXJhZG9zIGRlIGxhIGNvbnN1bHRhXG4gIEBJbnB1dCgpXG4gIGZpbHRlcjogQmFzZUZpbHRlcjtcbiAgQElucHV0KClcbiAgcGFnaW5hdG9yOiBib29sZWFuO1xuICBASW5wdXQoKVxuICBtb3N0cmFyQXZpc29zOiBib29sZWFuID0gdHJ1ZTtcbiAgQElucHV0KClcbiAgZml4ZWQ6IGJvb2xlYW4gPSB0cnVlOyAvLyBJbmRpY2Fyw6Egc2kgbG8gcXVlcmVtb3MgZmlqbyBhYmFqbyBlbiBsYSBww6FnaW5hLiBQb3IgZGVmZWN0byBzw60uXG4gIEBJbnB1dCgpXG4gIG1lc3NhZ2VzOiBNYXA8UGFnZVN0YXR1cywgc3RyaW5nPjtcbiAgQElucHV0KClcbiAgc3RhdHVzOiBQYWdlU3RhdHVzID0gUGFnZVN0YXR1cy5Jbml0OyAvLyBEZXRlcm1pbmEgZW4gcXXDqSBlc3RhZG8gZXN0w6EgbGEgcMOhZ2luYTogUGFnZVN0YXR1cy5Jbml0LCBQYWdlU3RhdHVzLlNFQVJDSElORywgUGFnZVN0YXR1cy5GSU5JU0hfU0VBUkNIXG4gIEBJbnB1dChcInR5cGVcIilcbiAgdHlwZUZvb3Rlcjogc3RyaW5nO1xuICBASW5wdXQoKVxuICBtb3N0cmFyRW5sYWNlc1BhZ2luYXM6IGJvb2xlYW4gPSB0cnVlOyAgLy9kZXByZWNhdGVkXG4gIEBJbnB1dCgpXG4gIG1vc3RyYXJQcmltZXJhVWx0aW1hUGFnaW5hOiBib29sZWFuID0gdHJ1ZTsgLy9kZXByZWNhdGVkXG4gIEBJbnB1dCgpXG4gIHZpc2libGU6IGJvb2xlYW4gPSB0cnVlO1xuICBASW5wdXQoKVxuICBmb3JjZVBhZ2VMaW5rU2l6ZTogbnVtYmVyID0gMTsgLy9kZXByZWNhdGVkIG7Dum1lcm8gZGUgZW5sYWNlcyBlbiBlbCBwYWdpbmFkb3IgcGFyYSBwb2RlciBuYXZlZ2FyIGhhY2lhIGRlbGFudGUgbyBkZXRyw6FzIHF1ZSBmb3J6YW1vcyBhIHF1ZSBoYXlhXG4gIEBPdXRwdXQoKVxuICBvblBhZ2VDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTsgLy9wYXJhIG5vdGlmaWNhciBjYW1iaW9zIGVuIGxhIHDDoWdpbmEgYSBtb3N0cmFyXG4gIEBPdXRwdXQoKVxuICBvbk5ld1BhZ2VTaXplID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7IC8vcGFyYSBub3RpZmljYXIgY2FtYmlvcyBlbiBsb3MgZWxlbWVudG9zIGEgbW9zdHJhciBwb3IgcMOhZ2luYVxuXG4gIGJhc2VJdGVtc1BlclBhZ2U6IG51bWJlciA9IEJhc2VGaWx0ZXIuUkVTVUxUQURPU19QQUdFOyAvLyBndWFyZGFtb3MgZWwgbsO6bWVybyBkZSByZXN1bHRhZG9zIHByZS1jb25maWd1cmFkb3MgcG9yIHDDoWdpbmEgcGFyYSBtb3N0cmFyIGxhIGxpc3RhIGRlIHgsIHgrMTAgeSB4KzIwXG4gIG1heEN1cnJlbnRJdGVtczogbnVtYmVyID0gLTE7ICAgLy8gbsO6bWVybyBkZSBlbGVtZW50b3MgcXVlIG1vc3RyYW1vcyBlbiBwYW50YWxsYS4gTmVjZXNhcmlvIHBhcmEgZWwgbW9kbyBzY3JvbGxcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnR5cGVGb290ZXIgPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnR5cGVGb290ZXIgPSBcImxpc3RcIjtcbiAgICB9XG4gICAgaWYgKHRoaXMucGFnaW5hdG9yID09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5wYWdpbmF0b3IgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRXNjdWNoYXJlbW9zIGEgY2FtYmlvcyBlbiBsYXMgcHJvcGllZGFkZXMgdG90YWxJdGVtcyBwYXJhIGFjdHVhbGl6YXIgZWwgcGFnaW5hZG9yIGNvbiByZXNwZWN0byBhIGxhcyBww6FnaW5hcyBxdWUgbW9zdHJhbW9zXG4gICAqL1xuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiB7IFtwcm9wS2V5OiBzdHJpbmddOiBTaW1wbGVDaGFuZ2UgfSkge1xuICAgIGZvciAobGV0IHByb3BOYW1lIGluIGNoYW5nZXMpIHtcbiAgICAgIGxldCBjaGFuZ2VkUHJvcCA9IGNoYW5nZXNbcHJvcE5hbWVdO1xuICAgICAgaWYgKHByb3BOYW1lID09PSBcInN0YXR1c1wiKSB7XG4gICAgICAgIHRoaXMuc3RhdHVzID0gY2hhbmdlZFByb3AuY3VycmVudFZhbHVlO1xuICAgICAgICBjb25zb2xlLmxvZyhcInN0YXR1czpcIiArIHRoaXMuc3RhdHVzKTtcbiAgICAgIH0gZWxzZSBpZiAocHJvcE5hbWUgPT09IFwidG90YWxJdGVtc1wiKSB7XG4gICAgICAgIHRoaXMudG90YWxJdGVtcyA9IGNoYW5nZWRQcm9wLmN1cnJlbnRWYWx1ZTtcbiAgICAgICAgY29uc29sZS5sb2coXCJ0b3RhbEl0ZW1zOlwiICsgdGhpcy50b3RhbEl0ZW1zKTtcbiAgICAgICAgdGhpcy5jYWxjdWxhdGVNYXhDdXJyZW50SXRlbXMoKTtcbiAgICAgIH0gZWxzZSBpZiAocHJvcE5hbWUgPT09IFwiZmlsdGVyXCIpIHtcbiAgICAgICAgdGhpcy5maWx0ZXIgPSBjaGFuZ2VkUHJvcC5jdXJyZW50VmFsdWU7XG4gICAgICAgIHRoaXMuY2FsY3VsYXRlTWF4Q3VycmVudEl0ZW1zKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc2hvd1BhZ2lqYXRvcigpIHtcbiAgICByZXR1cm4gdGhpcy50eXBlRm9vdGVyID09PSAnbGlzdCcgJiYgdGhpcy52aXNpYmxlICYmIHRoaXMucGFnaW5hdG9yO1xuICB9XG5cbiAgc2hvd1Njcm9sbCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy50eXBlRm9vdGVyID09PSAnc2Nyb2xsJyAmJiB0aGlzLnZpc2libGU7XG4gIH1cblxuICBjYWxjdWxhdGVNYXhDdXJyZW50SXRlbXMoKSB7XG4gICAgdGhpcy5tYXhDdXJyZW50SXRlbXMgPSB0aGlzLmZpbHRlcj8ucGFnaW5hICogdGhpcy5maWx0ZXI/LnJlc3VsdGFkb3M7XG4gICAgaWYgKHRoaXMubWF4Q3VycmVudEl0ZW1zID4gdGhpcy50b3RhbEl0ZW1zKSB7XG4gICAgICB0aGlzLm1heEN1cnJlbnRJdGVtcyA9IHRoaXMudG90YWxJdGVtcztcbiAgICB9XG4gIH1cblxuICBwYWdlQ2hhbmdlKHBhZ2U6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMub25QYWdlQ2hhbmdlLmVtaXQocGFnZSk7XG4gIH1cblxuICBwYWdlU2l6ZUNoYW5nZShwYWdlU2l6ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5vbk5ld1BhZ2VTaXplLmVtaXQocGFnZVNpemUpO1xuICB9XG5cbiAgZ2V0U3R5bGUoKSB7XG4gICAgaWYgKHRoaXMuZml4ZWQgJiYgdGhpcy50eXBlRm9vdGVyID09PSBUWVBFX0xJU1QgfHwgdGhpcy50eXBlRm9vdGVyID09PSBUWVBFX1NDUk9MTCkge1xuICAgICAgcmV0dXJuIFwiZm9vdGVyIG5hdmJhci1maXhlZC1ib3R0b21cIjtcbiAgICB9IGVsc2UgaWYgKHRoaXMuZml4ZWQgJiYgdGhpcy50eXBlRm9vdGVyID09PSBUWVBFX0ZPUk0pIHtcbiAgICAgIHJldHVybiBcImZvb3RlciBuYXZiYXItZml4ZWQtYm90dG9tLWZvcm1cIjtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFwiZm9vdGVyXCI7XG4gICAgfVxuICB9XG5cbn1cbiIsIjxmb290ZXIgW2NsYXNzXT1cImdldFN0eWxlKClcIj5cblxuICA8ZGl2IGNsYXNzPVwic2Nyb2xsLW91dGVyLWNvbnRhaW5lclwiICpuZ0lmPVwic2hvd1Njcm9sbCgpXCI+XG4gICAgPGRpdiBjbGFzcz1cInBhZ2lqYXRvci1jb250YWluZXJcIj5cbiAgICAgIDxsYWJlbD57e1wiYml0bmdsaWJyYXJ5LmZvb3Rlci5yZXN1bHRzXCIgfCB0cmFuc2xvY299fTwvbGFiZWw+XG4gICAgICA8c3BhbiAqbmdJZj1cIm1heEN1cnJlbnRJdGVtcyA+PSB0b3RhbEl0ZW1zXCI+e3t0b3RhbEl0ZW1zfX08L3NwYW4+XG4gICAgICA8c3BhbiAqbmdJZj1cIm1heEN1cnJlbnRJdGVtcyA8IHRvdGFsSXRlbXNcIj57e21heEN1cnJlbnRJdGVtc319IC8ge3t0b3RhbEl0ZW1zfX08L3NwYW4+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxiaXQtcGFnaWphdG9yICpuZ0lmPVwic2hvd1BhZ2lqYXRvcigpXCJcbiAgICBbdG90YWxJdGVtc109XCJ0b3RhbEl0ZW1zXCJcbiAgICBbcGFnZV09XCJmaWx0ZXIgPyBmaWx0ZXIucGFnaW5hIDogMVwiXG4gICAgW3Jvd3NQZXJQYWdlT3B0aW9uc109XCJbYmFzZUl0ZW1zUGVyUGFnZSxiYXNlSXRlbXNQZXJQYWdlKjUsYmFzZUl0ZW1zUGVyUGFnZSoyNSxiYXNlSXRlbXNQZXJQYWdlKjUwXVwiXG4gICAgKG9uUGFnZUNoYW5nZSk9XCJwYWdlQ2hhbmdlKCRldmVudClcIlxuICAgIChvblBhZ2VTaXplQ2hhbmdlKT1cInBhZ2VTaXplQ2hhbmdlKCRldmVudClcIj48L2JpdC1wYWdpamF0b3I+XG5cbiAgPGJpdC1mb290ZXItbWVzc2FnZXMgKm5nSWY9XCJtb3N0cmFyQXZpc29zXCJcbiAgICBbbWVzc2FnZXNdPVwibWVzc2FnZXNcIlxuICAgIFt0eXBlRm9vdGVyXT1cInR5cGVGb290ZXJcIlxuICAgIFtzdGF0dXNdPVwic3RhdHVzXCJcbiAgICBbbWF4Q3VycmVudEl0ZW1zXT1cIm1heEN1cnJlbnRJdGVtc1wiXG4gICAgW3RvdGFsSXRlbXNdPVwidG90YWxJdGVtc1wiPjwvYml0LWZvb3Rlci1tZXNzYWdlcz5cblxuPC9mb290ZXI+XG4iXX0=