appproject-components 1.0.48 → 1.0.49
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/README.md +24 -24
- package/karma.conf.js +44 -0
- package/ng-package.json +7 -0
- package/package.json +15 -26
- package/src/lib/appproject-components.component.spec.ts +23 -0
- package/src/lib/appproject-components.component.ts +20 -0
- package/src/lib/appproject-components.module.ts +106 -0
- package/src/lib/appproject-components.service.spec.ts +16 -0
- package/src/lib/appproject-components.service.ts +9 -0
- package/src/lib/baseComponent.scss +162 -0
- package/src/lib/baseInputComponent.ts +35 -0
- package/src/lib/buttons/baseBtnComponent.ts +38 -0
- package/src/lib/buttons/btn-action/btn-action.component.html +11 -0
- package/src/lib/buttons/btn-action/btn-action.component.scss +7 -0
- package/src/lib/buttons/btn-action/btn-action.component.spec.ts +24 -0
- package/src/lib/buttons/btn-action/btn-action.component.ts +31 -0
- package/src/lib/buttons/btn-cancelar/btn-cancelar.component.html +14 -0
- package/src/lib/buttons/btn-cancelar/btn-cancelar.component.scss +5 -0
- package/src/lib/buttons/btn-cancelar/btn-cancelar.component.spec.ts +24 -0
- package/src/lib/buttons/btn-cancelar/btn-cancelar.component.ts +19 -0
- package/src/lib/buttons/btn-excluir/btn-excluir.component.html +6 -0
- package/src/lib/buttons/btn-excluir/btn-excluir.component.scss +5 -0
- package/src/lib/buttons/btn-excluir/btn-excluir.component.spec.ts +24 -0
- package/src/lib/buttons/btn-excluir/btn-excluir.component.ts +18 -0
- package/src/lib/buttons/btn-novo/btn-novo.component.html +14 -0
- package/src/lib/buttons/btn-novo/btn-novo.component.scss +8 -0
- package/src/lib/buttons/btn-novo/btn-novo.component.spec.ts +24 -0
- package/src/lib/buttons/btn-novo/btn-novo.component.ts +20 -0
- package/src/lib/buttons/btn-salvar/btn-salvar.component.html +8 -0
- package/src/lib/buttons/btn-salvar/btn-salvar.component.scss +5 -0
- package/src/lib/buttons/btn-salvar/btn-salvar.component.spec.ts +24 -0
- package/src/lib/buttons/btn-salvar/btn-salvar.component.ts +16 -0
- package/src/lib/entity-edit/entity-edit.component.html +143 -0
- package/src/lib/entity-edit/entity-edit.component.scss +4 -0
- package/src/lib/entity-edit/entity-edit.component.spec.ts +23 -0
- package/src/lib/entity-edit/entity-edit.component.ts +43 -0
- package/src/lib/grid-view/grid-view.component.html +116 -0
- package/src/lib/grid-view/grid-view.component.scss +47 -0
- package/src/lib/grid-view/grid-view.component.spec.ts +23 -0
- package/src/lib/grid-view/grid-view.component.ts +292 -0
- package/src/lib/input-area/input-area.component.html +30 -0
- package/src/lib/input-area/input-area.component.scss +68 -0
- package/src/lib/input-area/input-area.component.spec.ts +23 -0
- package/src/lib/input-area/input-area.component.ts +69 -0
- package/src/lib/input-arquivo/input-arquivo.component.html +11 -0
- package/src/lib/input-arquivo/input-arquivo.component.scss +0 -0
- package/src/lib/input-arquivo/input-arquivo.component.spec.ts +23 -0
- package/src/lib/input-arquivo/input-arquivo.component.ts +140 -0
- package/src/lib/input-cep/input-cep.component.html +38 -0
- package/src/lib/input-cep/input-cep.component.scss +0 -0
- package/src/lib/input-cep/input-cep.component.spec.ts +23 -0
- package/src/lib/input-cep/input-cep.component.ts +186 -0
- package/src/lib/input-checkbox/input-checkbox.component.html +12 -0
- package/src/lib/input-checkbox/input-checkbox.component.scss +11 -0
- package/src/lib/input-checkbox/input-checkbox.component.spec.ts +23 -0
- package/src/lib/input-checkbox/input-checkbox.component.ts +48 -0
- package/src/lib/input-format/input-format.component.html +32 -0
- package/src/lib/input-format/input-format.component.scss +47 -0
- package/src/lib/input-format/input-format.component.spec.ts +23 -0
- package/src/lib/input-format/input-format.component.ts +139 -0
- package/src/lib/input-pesquisa/input-pesquisa.component.html +77 -0
- package/src/lib/input-pesquisa/input-pesquisa.component.scss +127 -0
- package/src/lib/input-pesquisa/input-pesquisa.component.spec.ts +23 -0
- package/src/lib/input-pesquisa/input-pesquisa.component.ts +558 -0
- package/src/lib/input-radio/input-radio.component.html +21 -0
- package/src/lib/input-radio/input-radio.component.scss +3 -0
- package/src/lib/input-radio/input-radio.component.spec.ts +23 -0
- package/src/lib/input-radio/input-radio.component.ts +49 -0
- package/src/lib/input-select/input-select.component.html +29 -0
- package/src/lib/input-select/input-select.component.scss +62 -0
- package/src/lib/input-select/input-select.component.spec.ts +23 -0
- package/src/lib/input-select/input-select.component.ts +96 -0
- package/src/lib/input-text/input-text.component.html +48 -0
- package/src/lib/input-text/input-text.component.scss +63 -0
- package/src/lib/input-text/input-text.component.spec.ts +23 -0
- package/src/lib/input-text/input-text.component.ts +78 -0
- package/src/lib/input-valor/input-valor.component.html +32 -0
- package/src/lib/input-valor/input-valor.component.scss +47 -0
- package/src/lib/input-valor/input-valor.component.spec.ts +23 -0
- package/src/lib/input-valor/input-valor.component.ts +164 -0
- package/{lib/lib-config.d.ts → src/lib/lib-config.ts} +4 -3
- package/src/lib/model-treeview/model-treeview.component.html +20 -0
- package/src/lib/model-treeview/model-treeview.component.scss +0 -0
- package/src/lib/model-treeview/model-treeview.component.spec.ts +23 -0
- package/src/lib/model-treeview/model-treeview.component.ts +152 -0
- package/src/lib/tree-view/tree-view.component.html +96 -0
- package/src/lib/tree-view/tree-view.component.scss +50 -0
- package/src/lib/tree-view/tree-view.component.spec.ts +23 -0
- package/src/lib/tree-view/tree-view.component.ts +92 -0
- package/src/lib/tree-view-nivel/tree-view-nivel.component.html +17 -0
- package/src/lib/tree-view-nivel/tree-view-nivel.component.scss +8 -0
- package/src/lib/tree-view-nivel/tree-view-nivel.component.spec.ts +23 -0
- package/src/lib/tree-view-nivel/tree-view-nivel.component.ts +43 -0
- package/{public-api.d.ts → src/public-api.ts} +30 -24
- package/src/test.ts +15 -0
- package/tsconfig.lib.json +15 -0
- package/tsconfig.lib.prod.json +10 -0
- package/tsconfig.spec.json +17 -0
- package/esm2022/appproject-components.mjs +0 -5
- package/esm2022/lib/appproject-components.component.mjs +0 -22
- package/esm2022/lib/appproject-components.module.mjs +0 -159
- package/esm2022/lib/appproject-components.service.mjs +0 -14
- package/esm2022/lib/baseInputComponent.mjs +0 -69
- package/esm2022/lib/buttons/baseBtnComponent.mjs +0 -63
- package/esm2022/lib/buttons/btn-action/btn-action.component.mjs +0 -55
- package/esm2022/lib/buttons/btn-cancelar/btn-cancelar.component.mjs +0 -25
- package/esm2022/lib/buttons/btn-excluir/btn-excluir.component.mjs +0 -29
- package/esm2022/lib/buttons/btn-novo/btn-novo.component.mjs +0 -33
- package/esm2022/lib/buttons/btn-salvar/btn-salvar.component.mjs +0 -19
- package/esm2022/lib/entity-edit/entity-edit.component.mjs +0 -53
- package/esm2022/lib/grid-view/grid-view.component.mjs +0 -275
- package/esm2022/lib/input-area/input-area.component.mjs +0 -72
- package/esm2022/lib/input-arquivo/input-arquivo.component.mjs +0 -154
- package/esm2022/lib/input-cep/input-cep.component.mjs +0 -180
- package/esm2022/lib/input-checkbox/input-checkbox.component.mjs +0 -51
- package/esm2022/lib/input-format/input-format.component.mjs +0 -138
- package/esm2022/lib/input-pesquisa/input-pesquisa.component.mjs +0 -557
- package/esm2022/lib/input-radio/input-radio.component.mjs +0 -58
- package/esm2022/lib/input-select/input-select.component.mjs +0 -110
- package/esm2022/lib/input-text/input-text.component.mjs +0 -88
- package/esm2022/lib/input-valor/input-valor.component.mjs +0 -161
- package/esm2022/lib/lib-config.mjs +0 -2
- package/esm2022/lib/model-treeview/model-treeview.component.mjs +0 -126
- package/esm2022/lib/tree-view/tree-view.component.mjs +0 -104
- package/esm2022/lib/tree-view-nivel/tree-view-nivel.component.mjs +0 -50
- package/esm2022/public-api.mjs +0 -30
- package/fesm2022/appproject-components.mjs +0 -2531
- package/fesm2022/appproject-components.mjs.map +0 -1
- package/index.d.ts +0 -5
- package/lib/appproject-components.component.d.ts +0 -8
- package/lib/appproject-components.module.d.ts +0 -36
- package/lib/appproject-components.service.d.ts +0 -6
- package/lib/baseInputComponent.d.ts +0 -28
- package/lib/buttons/baseBtnComponent.d.ts +0 -19
- package/lib/buttons/btn-action/btn-action.component.d.ts +0 -21
- package/lib/buttons/btn-cancelar/btn-cancelar.component.d.ts +0 -10
- package/lib/buttons/btn-excluir/btn-excluir.component.d.ts +0 -12
- package/lib/buttons/btn-novo/btn-novo.component.d.ts +0 -13
- package/lib/buttons/btn-salvar/btn-salvar.component.d.ts +0 -9
- package/lib/entity-edit/entity-edit.component.d.ts +0 -22
- package/lib/grid-view/grid-view.component.d.ts +0 -52
- package/lib/input-area/input-area.component.d.ts +0 -24
- package/lib/input-arquivo/input-arquivo.component.d.ts +0 -43
- package/lib/input-cep/input-cep.component.d.ts +0 -29
- package/lib/input-checkbox/input-checkbox.component.d.ts +0 -21
- package/lib/input-format/input-format.component.d.ts +0 -27
- package/lib/input-pesquisa/input-pesquisa.component.d.ts +0 -69
- package/lib/input-radio/input-radio.component.d.ts +0 -23
- package/lib/input-select/input-select.component.d.ts +0 -32
- package/lib/input-text/input-text.component.d.ts +0 -33
- package/lib/input-valor/input-valor.component.d.ts +0 -29
- package/lib/model-treeview/model-treeview.component.d.ts +0 -39
- package/lib/tree-view/tree-view.component.d.ts +0 -23
- package/lib/tree-view-nivel/tree-view-nivel.component.d.ts +0 -17
|
@@ -1,557 +0,0 @@
|
|
|
1
|
-
import { Component, EventEmitter, Inject, Input, ViewChild } from '@angular/core';
|
|
2
|
-
import { NG_VALUE_ACCESSOR } from '@angular/forms';
|
|
3
|
-
import { Subject, of } from 'rxjs';
|
|
4
|
-
import { BaseInputComponent } from '../baseInputComponent';
|
|
5
|
-
import { debounceTime, switchMap } from 'rxjs/operators';
|
|
6
|
-
import { ModelTreeviewComponent } from '../model-treeview/model-treeview.component';
|
|
7
|
-
import * as i0 from "@angular/core";
|
|
8
|
-
import * as i1 from "@angular/common/http";
|
|
9
|
-
import * as i2 from "@ionic/angular";
|
|
10
|
-
import * as i3 from "@angular/common";
|
|
11
|
-
//import { LibConfig, LibConfigService } from '../appproject-components.module';
|
|
12
|
-
export class InputPesquisaComponent extends BaseInputComponent {
|
|
13
|
-
writeValue(value) {
|
|
14
|
-
//console.log('write value', value);
|
|
15
|
-
this.onChange(value);
|
|
16
|
-
this.data = value;
|
|
17
|
-
if (value == null || value == 0) {
|
|
18
|
-
this.writePesquisa('');
|
|
19
|
-
this.selectedItem = null;
|
|
20
|
-
}
|
|
21
|
-
else {
|
|
22
|
-
if (this.loadInit == true) {
|
|
23
|
-
this.loadInit = false;
|
|
24
|
-
this.modelChanged.next(value);
|
|
25
|
-
//this.carregaItemIdParaLista(value);
|
|
26
|
-
}
|
|
27
|
-
else {
|
|
28
|
-
//console.log(this.selectedItem);
|
|
29
|
-
if (!this.selectedItem || (this.selectedItem && this.selectedItem[this.campoId] != value)) {
|
|
30
|
-
console.log('Id diferente');
|
|
31
|
-
this.modelChanged.next(value);
|
|
32
|
-
//this.carregaItemIdParaLista(value);
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
registerOnChange(fn) {
|
|
38
|
-
this.onChange = fn;
|
|
39
|
-
}
|
|
40
|
-
registerOnTouched(fn) {
|
|
41
|
-
this.onTouch = fn;
|
|
42
|
-
}
|
|
43
|
-
setDisabledState(isDisabled) {
|
|
44
|
-
this.disabled = this.disabled;
|
|
45
|
-
}
|
|
46
|
-
constructor(config, httpClient, modalCtrl) {
|
|
47
|
-
super();
|
|
48
|
-
this.config = config;
|
|
49
|
-
this.httpClient = httpClient;
|
|
50
|
-
this.modalCtrl = modalCtrl;
|
|
51
|
-
this.podePesquisar = true;
|
|
52
|
-
this.textoPesquisa = '';
|
|
53
|
-
this.selectElementVisivel = false;
|
|
54
|
-
this.listaPesquisa = [];
|
|
55
|
-
this.max = '30';
|
|
56
|
-
this.pesquisaSubject = new Subject();
|
|
57
|
-
this.filterFunction = null;
|
|
58
|
-
this.selectId = 'selectElement';
|
|
59
|
-
this.campoId = 'Id';
|
|
60
|
-
this.campoPaiId = 'PaiId';
|
|
61
|
-
this.campoDisplay = 'Descricao';
|
|
62
|
-
this.tipo = '';
|
|
63
|
-
//@ViewChild('selectElement', { read: ElementRef, static: true }) selectElement;
|
|
64
|
-
this.selectElement = null;
|
|
65
|
-
this.pesquisaChange = new EventEmitter();
|
|
66
|
-
//parametros para chamada API
|
|
67
|
-
//endpoint para pesquisa por digitação
|
|
68
|
-
this.url = '';
|
|
69
|
-
this.urlItem = '';
|
|
70
|
-
//endpoint para montar a arvore, se estiver vazia será usado o campo 'url'
|
|
71
|
-
this.urlTree = '';
|
|
72
|
-
this.empresa = 0;
|
|
73
|
-
this.loadInit = false;
|
|
74
|
-
this.onChange = (data) => { };
|
|
75
|
-
this.onTouch = () => { };
|
|
76
|
-
this.disabled = false;
|
|
77
|
-
this.console = console;
|
|
78
|
-
this.modelChanged = new Subject();
|
|
79
|
-
this.BASE_API = this.config.apiUrl;
|
|
80
|
-
this.modelChangeSubscription = this.modelChanged
|
|
81
|
-
.pipe(debounceTime(500))
|
|
82
|
-
.subscribe(data => {
|
|
83
|
-
this.carregaItemIdParaLista(data);
|
|
84
|
-
});
|
|
85
|
-
}
|
|
86
|
-
onBlur(event) {
|
|
87
|
-
console.log('blur', event);
|
|
88
|
-
//console.log(event.detail.relatedTarget);
|
|
89
|
-
if (event.detail.relatedTarget == null || event.detail.relatedTarget.id.indexOf(this.selectId + 'IonItem') == -1) {
|
|
90
|
-
//console.log("true", event.detail.relatedTarget.id);
|
|
91
|
-
//pesquisar item na lista
|
|
92
|
-
if (!this.existeNaListaTexto(this.textoPesquisa, true)) {
|
|
93
|
-
this.limparClick();
|
|
94
|
-
}
|
|
95
|
-
this.dropDownPesquisa(0);
|
|
96
|
-
if (this.form) {
|
|
97
|
-
this.form.get(this.formControlName)?.markAsTouched();
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
ngOnInit() {
|
|
102
|
-
//tratar urls
|
|
103
|
-
this.url = this.url.startsWith('http') ? this.url : `${this.BASE_API}/${this.url}`;
|
|
104
|
-
this.urlItem = this.urlItem.startsWith('http') ? this.urlItem : `${this.BASE_API}/${this.urlItem}`;
|
|
105
|
-
this.pesquisaSubject.pipe(switchMap((url) => {
|
|
106
|
-
//this.console.log('subject url:', url);
|
|
107
|
-
if (!this.isEmpty(url)) {
|
|
108
|
-
return this.httpClient.get(url);
|
|
109
|
-
//return of(url);
|
|
110
|
-
}
|
|
111
|
-
else
|
|
112
|
-
return of([]);
|
|
113
|
-
}))
|
|
114
|
-
.subscribe({
|
|
115
|
-
next: (result) => {
|
|
116
|
-
//this.listaPesquisa = result;
|
|
117
|
-
this.console.log('subject subscribe result:', result);
|
|
118
|
-
this.listaPesquisa = [];
|
|
119
|
-
if (result && result.length > 0) {
|
|
120
|
-
if (this.filterFunction) {
|
|
121
|
-
result = result.filter(this.filterFunction);
|
|
122
|
-
}
|
|
123
|
-
result.forEach((ent, index) => {
|
|
124
|
-
this.listaPesquisa.push({ ...ent, Index: index, Selected: false });
|
|
125
|
-
});
|
|
126
|
-
}
|
|
127
|
-
this.podePesquisar = true;
|
|
128
|
-
if (this.listaPesquisa.length > 0) {
|
|
129
|
-
this.dropDownPesquisa(this.listaPesquisa.length);
|
|
130
|
-
}
|
|
131
|
-
},
|
|
132
|
-
error: (error) => {
|
|
133
|
-
this.podePesquisar = true;
|
|
134
|
-
console.log('erro pesquisa', error);
|
|
135
|
-
}
|
|
136
|
-
});
|
|
137
|
-
}
|
|
138
|
-
writePesquisa(value) {
|
|
139
|
-
//console.log('write pesquisa', value);
|
|
140
|
-
this.textoPesquisa = value;
|
|
141
|
-
}
|
|
142
|
-
showPesquisa(e) {
|
|
143
|
-
//console.log('show pesquisa', e.keyCode);
|
|
144
|
-
var self = this;
|
|
145
|
-
const index = e.target.selectionStart >= 1 ? (e.target.selectionStart - 1) : 0;
|
|
146
|
-
//console.log(index, 'valor ', event.target.value, 'char ', event.target.value.charCodeAt(index));
|
|
147
|
-
const keyAt = e.target.value.charCodeAt(index);
|
|
148
|
-
/*
|
|
149
|
-
if ((e.keyCode >= 48 && e.keyCode <= 57) ||
|
|
150
|
-
(keyAt >= 48 && keyAt <= 57) ||
|
|
151
|
-
(e.keyCode >= 65 && e.keyCode <= 90) ||
|
|
152
|
-
(e.keyCode >= 96 && e.keyCode <= 105) ||
|
|
153
|
-
(e.keyCode == 8)) {
|
|
154
|
-
*/
|
|
155
|
-
if (e.keyCode != 40 && e.keyCode != 38) {
|
|
156
|
-
if (!self.podePesquisar) {
|
|
157
|
-
return;
|
|
158
|
-
}
|
|
159
|
-
let filtro = self.textoPesquisa;
|
|
160
|
-
if (filtro != null && filtro != '' && filtro.length >= 2) {
|
|
161
|
-
self.pesquisarEntidade(filtro);
|
|
162
|
-
}
|
|
163
|
-
else {
|
|
164
|
-
if (e.keyCode == 8 && !filtro) {
|
|
165
|
-
this.limparClick();
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
else {
|
|
170
|
-
if (e.keyCode == 40 || e.keyCode == 38) {
|
|
171
|
-
self.dropDownPesquisa(self.listaPesquisa.length);
|
|
172
|
-
if (self.selectElementVisivel == true) {
|
|
173
|
-
//let select = self.selectElement; //document.getElementById(self.TemplateSelect1Id());
|
|
174
|
-
//ion-list
|
|
175
|
-
//selecionado
|
|
176
|
-
//console.log(self.listaPesquisa);
|
|
177
|
-
let inc = e.keyCode == 40 ? 1 : -1;
|
|
178
|
-
let selected = self.listaPesquisa.find(s => s['Selected'] === true);
|
|
179
|
-
let cur = 0;
|
|
180
|
-
if (selected != null) {
|
|
181
|
-
cur = selected['Index'];
|
|
182
|
-
//desmarcar o atual
|
|
183
|
-
selected['Selected'] = false;
|
|
184
|
-
cur = cur + inc;
|
|
185
|
-
}
|
|
186
|
-
else {
|
|
187
|
-
cur = 0;
|
|
188
|
-
}
|
|
189
|
-
if (cur < 0) {
|
|
190
|
-
cur = self.listaPesquisa.length - 1;
|
|
191
|
-
}
|
|
192
|
-
else if (cur >= self.listaPesquisa.length) {
|
|
193
|
-
cur = 0;
|
|
194
|
-
}
|
|
195
|
-
let novoSelected = self.listaPesquisa.find(n => n['Index'] === cur);
|
|
196
|
-
if (novoSelected != null) {
|
|
197
|
-
novoSelected['Selected'] = true;
|
|
198
|
-
self.selectedItem = novoSelected;
|
|
199
|
-
self.textoPesquisa = novoSelected[self.campoDisplay];
|
|
200
|
-
}
|
|
201
|
-
/*
|
|
202
|
-
let select = document.getElementById(this.selectId) as any;
|
|
203
|
-
console.log('select Element', select)
|
|
204
|
-
if (select != null) {
|
|
205
|
-
let inc = e.keyCode == 40 ? 1 : -1;
|
|
206
|
-
let cur = select.selectedIndex;
|
|
207
|
-
if (cur == NaN) cur = -1;
|
|
208
|
-
select.selectedIndex = cur + inc;
|
|
209
|
-
if (select.selectedIndex >= 0 && select.selectedIndex < self.listaPesquisa.length) {
|
|
210
|
-
self.selectedItem = self.listaPesquisa[select.selectedIndex];
|
|
211
|
-
if (self.selectedItem != null) {
|
|
212
|
-
self.textoPesquisa = self.selectedItem[self.campoDisplay];
|
|
213
|
-
}
|
|
214
|
-
}
|
|
215
|
-
}
|
|
216
|
-
*/
|
|
217
|
-
}
|
|
218
|
-
}
|
|
219
|
-
else if (e.keyCode == 13) {
|
|
220
|
-
console.log('enter key', e);
|
|
221
|
-
//self.selecionarComboClick(e);
|
|
222
|
-
self.selecionarComboClick(null);
|
|
223
|
-
//return false;
|
|
224
|
-
}
|
|
225
|
-
else if (e.keyCode == 27) {
|
|
226
|
-
//ESC
|
|
227
|
-
self.dropDownPesquisa(0);
|
|
228
|
-
}
|
|
229
|
-
}
|
|
230
|
-
}
|
|
231
|
-
highlight(texto) {
|
|
232
|
-
let index = texto.toLowerCase().indexOf(this.textoPesquisa.toLowerCase());
|
|
233
|
-
//console.log(index);
|
|
234
|
-
if (index >= 0) {
|
|
235
|
-
return texto.substring(0, index) + '<strong>' + texto.substring(index, index + this.textoPesquisa.length) + '</strong>' + texto.substring(index + this.textoPesquisa.length); //texto.replace(this.textoPesquisa, `<strong>${this.textoPesquisa}</strong>`);
|
|
236
|
-
}
|
|
237
|
-
else {
|
|
238
|
-
return texto;
|
|
239
|
-
}
|
|
240
|
-
}
|
|
241
|
-
selecionarComboClick(item) {
|
|
242
|
-
// console.log(item);
|
|
243
|
-
var self = this;
|
|
244
|
-
// console.log('combo click', self);
|
|
245
|
-
/*
|
|
246
|
-
let select = document.getElementById(this.selectId) as any;
|
|
247
|
-
if (select.selectedIndex >= 0) {
|
|
248
|
-
self.selectedItem = self.listaPesquisa[select.selectedIndex];
|
|
249
|
-
}
|
|
250
|
-
console.log('selected', this.selectedItem);
|
|
251
|
-
//self.selectedItem = this.listaPesquisa.find(i => i[this.campoId] == e);
|
|
252
|
-
if (self.selectedItem != null) {
|
|
253
|
-
self.textoPesquisa = self.selectedItem[self.campoDisplay];
|
|
254
|
-
self.writeValue(self.selectedItem[self.campoId]);
|
|
255
|
-
if (e != null) {
|
|
256
|
-
self.selectElementVisivel = false;
|
|
257
|
-
if (self.action != null) {
|
|
258
|
-
self.action(self.selectedItem(), e);
|
|
259
|
-
}
|
|
260
|
-
}
|
|
261
|
-
}
|
|
262
|
-
else {
|
|
263
|
-
self.selectElementVisivel = false;
|
|
264
|
-
}
|
|
265
|
-
*/
|
|
266
|
-
// pesquisar selecionado
|
|
267
|
-
// console.log(this.listaPesquisa);
|
|
268
|
-
let selected = this.listaPesquisa.find(s => s['Selected'] === true);
|
|
269
|
-
// if (!selected) {
|
|
270
|
-
// console.log(this.campoId, item);
|
|
271
|
-
// selected = this.listaPesquisa.filter( s => s[this.campoId] == item[this.campoId]);
|
|
272
|
-
// }
|
|
273
|
-
//se o item form passado como parametro (click no ion-item)
|
|
274
|
-
if (item != null) {
|
|
275
|
-
if (selected != null) {
|
|
276
|
-
selected['Selected'] = false;
|
|
277
|
-
}
|
|
278
|
-
item['Selected'] = true;
|
|
279
|
-
selected = item;
|
|
280
|
-
}
|
|
281
|
-
if (selected != null) {
|
|
282
|
-
self.selectedItem = selected;
|
|
283
|
-
self.textoPesquisa = selected[self.campoDisplay];
|
|
284
|
-
self.writeValue(selected[self.campoId]);
|
|
285
|
-
self.selectElementVisivel = false;
|
|
286
|
-
//console.log('action', self.change);
|
|
287
|
-
if (self.pesquisaChange != null) {
|
|
288
|
-
self.pesquisaChange.emit(self.selectedItem);
|
|
289
|
-
}
|
|
290
|
-
}
|
|
291
|
-
else {
|
|
292
|
-
self.selectElementVisivel = false;
|
|
293
|
-
}
|
|
294
|
-
// this.listaPesquisa.forEach( pesquisa => {
|
|
295
|
-
// console.log(pesquisa, self.data);
|
|
296
|
-
// } );
|
|
297
|
-
// console.log(this.textoPesquisa);
|
|
298
|
-
}
|
|
299
|
-
selecionarComboChange(e) {
|
|
300
|
-
var self = this;
|
|
301
|
-
console.log('combo change', e);
|
|
302
|
-
self.selectedItem = this.listaPesquisa.find(i => i[this.campoId] == e);
|
|
303
|
-
if (self.selectedItem != null) {
|
|
304
|
-
self.writeValue(e);
|
|
305
|
-
self.textoPesquisa = self.selectedItem[self.campoDisplay];
|
|
306
|
-
if (e != null) {
|
|
307
|
-
self.selectElementVisivel = false;
|
|
308
|
-
if (self.pesquisaChange != null) {
|
|
309
|
-
self.pesquisaChange.emit(self.selectedItem);
|
|
310
|
-
}
|
|
311
|
-
}
|
|
312
|
-
}
|
|
313
|
-
else {
|
|
314
|
-
self.selectElementVisivel = false;
|
|
315
|
-
}
|
|
316
|
-
}
|
|
317
|
-
dropDownPesquisa(length) {
|
|
318
|
-
var self = this;
|
|
319
|
-
if (self.listaPesquisa != null && self.listaPesquisa.length > 0) {
|
|
320
|
-
if (length == -1) {
|
|
321
|
-
length = self.listaPesquisa.length;
|
|
322
|
-
}
|
|
323
|
-
self.selectElementVisivel = length == 0 ? false : true;
|
|
324
|
-
//console.log(this.selectElement);
|
|
325
|
-
//this.selectElement.open();
|
|
326
|
-
/*
|
|
327
|
-
//let element = this.selectElement;
|
|
328
|
-
let element = document.getElementById(this.selectId);
|
|
329
|
-
console.log('dropDown', element);
|
|
330
|
-
(element as any).size = length + 1;
|
|
331
|
-
if (length == 0) {
|
|
332
|
-
self.selectElementVisivel = false;
|
|
333
|
-
} else {
|
|
334
|
-
self.selectElementVisivel = true;
|
|
335
|
-
}
|
|
336
|
-
*/
|
|
337
|
-
}
|
|
338
|
-
}
|
|
339
|
-
pesquisarEntidade(filtro) {
|
|
340
|
-
let url = this.url.replace('<<FILTRO>>', filtro).replace('<<EMPRESA>>', this.empresa.toString());
|
|
341
|
-
console.log('pesquisarEntidade url', url);
|
|
342
|
-
this.podePesquisar = false;
|
|
343
|
-
this.pesquisaSubject.next(url);
|
|
344
|
-
}
|
|
345
|
-
pesquisarEntidadeOld(filtro) {
|
|
346
|
-
let url = this.url.replace('<<FILTRO>>', filtro).replace('<<EMPRESA>>', this.empresa.toString());
|
|
347
|
-
console.log('pesquisarEntidade url', url);
|
|
348
|
-
this.podePesquisar = false;
|
|
349
|
-
this.httpClient.get(url)
|
|
350
|
-
.subscribe({ next: (result) => {
|
|
351
|
-
//this.listaPesquisa = result;
|
|
352
|
-
if (this.filterFunction) {
|
|
353
|
-
result = result.filter(this.filterFunction);
|
|
354
|
-
}
|
|
355
|
-
this.listaPesquisa = [];
|
|
356
|
-
result.forEach((ent, index) => {
|
|
357
|
-
this.listaPesquisa.push({ ...ent, Index: index, Selected: false });
|
|
358
|
-
});
|
|
359
|
-
this.podePesquisar = true;
|
|
360
|
-
if (this.listaPesquisa.length > 0) {
|
|
361
|
-
this.dropDownPesquisa(this.listaPesquisa.length);
|
|
362
|
-
}
|
|
363
|
-
}, error: error => {
|
|
364
|
-
console.log('erro pesquisa', error);
|
|
365
|
-
this.podePesquisar = true;
|
|
366
|
-
} });
|
|
367
|
-
}
|
|
368
|
-
existeNaLista(id, setRegistro = false) {
|
|
369
|
-
if (this.listaPesquisa && this.listaPesquisa.length > 0) {
|
|
370
|
-
let existe = this.listaPesquisa.find(l => l[this.campoId] === id);
|
|
371
|
-
if (existe) {
|
|
372
|
-
if (setRegistro) {
|
|
373
|
-
this.selectedItem = existe;
|
|
374
|
-
this.selecionarComboClick(this.selectedItem);
|
|
375
|
-
}
|
|
376
|
-
return true;
|
|
377
|
-
}
|
|
378
|
-
else {
|
|
379
|
-
return false;
|
|
380
|
-
}
|
|
381
|
-
}
|
|
382
|
-
else {
|
|
383
|
-
return false;
|
|
384
|
-
}
|
|
385
|
-
}
|
|
386
|
-
existeNaListaTexto(texto, setRegistro = false) {
|
|
387
|
-
console.log("existe texto:", texto, this.campoDisplay, this.listaPesquisa);
|
|
388
|
-
if (this.listaPesquisa && this.listaPesquisa.length > 0) {
|
|
389
|
-
let existe = this.listaPesquisa.find(l => l[this.campoDisplay].toUpperCase() === texto.toUpperCase());
|
|
390
|
-
if (existe) {
|
|
391
|
-
if (setRegistro) {
|
|
392
|
-
this.selectedItem = existe;
|
|
393
|
-
this.selecionarComboClick(this.selectedItem);
|
|
394
|
-
}
|
|
395
|
-
return true;
|
|
396
|
-
}
|
|
397
|
-
else {
|
|
398
|
-
return false;
|
|
399
|
-
}
|
|
400
|
-
}
|
|
401
|
-
else {
|
|
402
|
-
return false;
|
|
403
|
-
}
|
|
404
|
-
}
|
|
405
|
-
validarItemSelecionado(setarRegistro = false) {
|
|
406
|
-
console.log('validar selecionado');
|
|
407
|
-
//passar pela função de filtro
|
|
408
|
-
let valido = false;
|
|
409
|
-
if (this.selectedItem) {
|
|
410
|
-
if (this.filterFunction) {
|
|
411
|
-
let existe = [{ ...this.selectedItem }].filter(this.filterFunction);
|
|
412
|
-
if (existe != null && existe.length > 0) {
|
|
413
|
-
valido = true;
|
|
414
|
-
}
|
|
415
|
-
}
|
|
416
|
-
else {
|
|
417
|
-
valido = true;
|
|
418
|
-
}
|
|
419
|
-
if (valido && setarRegistro) {
|
|
420
|
-
this.selecionarComboClick(this.selectedItem);
|
|
421
|
-
}
|
|
422
|
-
return valido;
|
|
423
|
-
}
|
|
424
|
-
else {
|
|
425
|
-
return false;
|
|
426
|
-
}
|
|
427
|
-
}
|
|
428
|
-
carregaItemIdParaLista(id) {
|
|
429
|
-
let url = this.urlItem.replace('<<ID>>', id.toString());
|
|
430
|
-
console.log(this.urlItem);
|
|
431
|
-
console.log('pesquisar ID url', url);
|
|
432
|
-
this.podePesquisar = false;
|
|
433
|
-
this.httpClient.get(url)
|
|
434
|
-
.subscribe({ next: (result) => {
|
|
435
|
-
this.listaPesquisa = [];
|
|
436
|
-
this.listaPesquisa.push({ ...result, Index: 0, Selected: true });
|
|
437
|
-
this.podePesquisar = true;
|
|
438
|
-
if (this.listaPesquisa.length > 0) {
|
|
439
|
-
this.selectedItem = this.listaPesquisa[0];
|
|
440
|
-
this.selecionarComboClick(this.selectedItem);
|
|
441
|
-
}
|
|
442
|
-
}, error: error => {
|
|
443
|
-
console.log('erro pesquisa', error);
|
|
444
|
-
this.podePesquisar = true;
|
|
445
|
-
} });
|
|
446
|
-
}
|
|
447
|
-
limparClick() {
|
|
448
|
-
this.writeValue(null);
|
|
449
|
-
this.writePesquisa(null);
|
|
450
|
-
this.listaPesquisa = [];
|
|
451
|
-
this.dropDownPesquisa(0);
|
|
452
|
-
//this.podePesquisar = true;
|
|
453
|
-
this.pesquisaSubject.next('');
|
|
454
|
-
if (this.limpar) {
|
|
455
|
-
this.limpar();
|
|
456
|
-
}
|
|
457
|
-
}
|
|
458
|
-
verificarPesquisa() {
|
|
459
|
-
//TODO: verificar se o texto corresponde com um item da lista
|
|
460
|
-
this.selecionarComboClick(null);
|
|
461
|
-
}
|
|
462
|
-
async pesquisarClick() {
|
|
463
|
-
/*
|
|
464
|
-
if (this.pesquisaAction != null) {
|
|
465
|
-
this.pesquisaAction();
|
|
466
|
-
}
|
|
467
|
-
*/
|
|
468
|
-
//pesquisaCategoria
|
|
469
|
-
console.log(this.filterFunction, this.url, this.urlTree);
|
|
470
|
-
const modal = await this.modalCtrl.create({
|
|
471
|
-
component: ModelTreeviewComponent,
|
|
472
|
-
componentProps: {
|
|
473
|
-
//campoId: this.campoId,
|
|
474
|
-
//campoPai: this.campoPaiId,
|
|
475
|
-
//campoLabel: this.campoDisplay,
|
|
476
|
-
textoPesquisa: this.textoPesquisa,
|
|
477
|
-
filterFunction: this.filterFunction,
|
|
478
|
-
empresaSelecionadaId: this.empresa,
|
|
479
|
-
tipo: this.tipo,
|
|
480
|
-
//especifico
|
|
481
|
-
//planoContas: this.planoContas,
|
|
482
|
-
url: this.isEmpty(this.urlTree) ? this.url : this.urlTree,
|
|
483
|
-
titulo: this.treeTitulo,
|
|
484
|
-
campoLabel: this.campoDisplay,
|
|
485
|
-
campoId: this.campoId,
|
|
486
|
-
campoPai: this.campoPaiId
|
|
487
|
-
},
|
|
488
|
-
cssClass: 'my-custom-modal-pesquisa'
|
|
489
|
-
});
|
|
490
|
-
modal.onDidDismiss().then(data => {
|
|
491
|
-
let result = data['data'];
|
|
492
|
-
console.log(result);
|
|
493
|
-
if (result != null && result.Id > 0) {
|
|
494
|
-
this.carregaItemIdParaLista(result.Id);
|
|
495
|
-
}
|
|
496
|
-
});
|
|
497
|
-
modal.present();
|
|
498
|
-
}
|
|
499
|
-
isEmpty(valor) {
|
|
500
|
-
return valor == null || valor == undefined || valor == '';
|
|
501
|
-
}
|
|
502
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.7", ngImport: i0, type: InputPesquisaComponent, deps: [{ token: 'LibConfigService' }, { token: i1.HttpClient }, { token: i2.ModalController }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
503
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.7", type: InputPesquisaComponent, selector: "kb-input-pesquisa", inputs: { textoPesquisa: "textoPesquisa", max: "max", filterFunction: "filterFunction", selectId: "selectId", campoId: "campoId", campoPaiId: "campoPaiId", campoDisplay: "campoDisplay", tipo: "tipo", pesquisaChange: "pesquisaChange", pesquisaAction: "pesquisaAction", limpar: "limpar", url: "url", urlItem: "urlItem", urlTree: "urlTree", empresa: "empresa", loadInit: "loadInit", treeTitulo: "treeTitulo" }, providers: [{
|
|
504
|
-
provide: NG_VALUE_ACCESSOR,
|
|
505
|
-
useExisting: InputPesquisaComponent,
|
|
506
|
-
multi: true
|
|
507
|
-
}], viewQueries: [{ propertyName: "selectElement", first: true, predicate: ["selectElement"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div style=\"padding-inline-end: 0px;\">\r\n <ion-item lines=\"none\" style=\"--background: inherited; --background-focused: transparent; margin-top: 2px;\" [class]=\"itemClass\">\r\n <ion-label position=\"{{ labelPosition }}\">{{ label }}</ion-label>\r\n <!-- formControlName=\"{{ campo }}\" -->\r\n <ion-spinner *ngIf=\"!podePesquisar\"\r\n style=\"--min-height: 0px !important; margin-inline-end: 5px !important; margin-top: 16px;\" \r\n slot=\"start\" name=\"lines\"></ion-spinner>\r\n <!-- (ionBlur)=\"verificarPesquisa()\" -->\r\n <!-- conflito com click da lista -->\r\n <ion-input #inputPesquisa\r\n [legacy]=\"true\"\r\n type=\"{{type}}\" \r\n [placeholder]=\"placeholder\" \r\n maxlength=\"{{ max }}\" \r\n (ionBlur)=\"onBlur($event)\"\r\n [value]=\"textoPesquisa\" (input)=\"writePesquisa(inputPesquisa.value)\" \r\n (keyup)=\"showPesquisa($event)\"\r\n autocomplete=\"off\" [style.--background]=\"inputBackgroungColor\"\r\n (click)=\"dropDownPesquisa(-1)\"\r\n [disabled]=\"readonly\" debounce=\"500\"></ion-input>\r\n <ion-button size=\"small\" slot=\"end\" tabindex=\"-1\"\r\n class=\"botao-limpar\" fill=\"clear\" color=\"medium\"\r\n (click)=\"limparClick()\">\r\n <ion-icon name=\"close-outline\"></ion-icon>\r\n </ion-button>\r\n \r\n \r\n <ion-button size=\"small\" slot=\"end\" tabindex=\"-1\"\r\n class=\"botao-limpar\" fill=\"clear\" color=\"medium\"\r\n (click)=\"pesquisarClick()\">\r\n <ion-icon color=\"primary\" name=\"search\"></ion-icon>\r\n </ion-button>\r\n \r\n \r\n </ion-item>\r\n \r\n <ion-list tabindex=\"-1\" [hidden]=\"!selectElementVisivel || !listaPesquisa || listaPesquisa.length == 0\" class=\"pesquisa-list\" style=\"max-height: 250px; overflow-y: auto;\">\r\n \r\n <ion-item tabindex=\"-1\" button *ngFor=\"let item of listaPesquisa\" \r\n (click)=\"selecionarComboClick(item)\" [id]=\"selectId + 'IonItem' + item['Index']\"\r\n class=\"pesquisa-item\">\r\n <!-- {{ item | json}} -->\r\n <span [class]=\"{'selected-item': item['Selected'] === true}\" [innerHTML]=\"highlight(item[campoDisplay])\"></span>\r\n </ion-item>\r\n \r\n </ion-list>\r\n \r\n <!--\r\n <ion-select interface=\"popover\" #selectElement tabindex=\"-1\" [hidden]=\"!selectElementVisivel\"\r\n (ionChange)=\"selecionarComboChange($event.target.value)\">\r\n <ion-select-option *ngFor=\"let item of listaPesquisa\" [value]=\"item[campoId]\" (click)=\"selecionarComboClick(item[campoId])\">\r\n {{ item[campoDisplay] }}\r\n </ion-select-option>\r\n </ion-select>\r\n -->\r\n \r\n <!--\r\n <select [id]=\"selectId\" #selectElement tabindex=\"-1\" [hidden]=\"!selectElementVisivel\"\r\n (change)=\"selecionarComboChange($event.target.value)\" class=\"pesquisa-select\">\r\n <option *ngFor=\"let item of listaPesquisa\" [value]=\"item[campoId]\" (click)=\"selecionarComboClick(item[campoId])\">\r\n {{ item[campoDisplay] }}\r\n </option>\r\n \r\n </select>\r\n -->\r\n \r\n <div class=\"validation-errors\" *ngIf=\"form\">\r\n \r\n <ng-container *ngFor=\"let validation of validation_messages\">\r\n <div class=\"error-message\"\r\n *ngIf=\"form.get(formControlName)?.hasError(validation.type) && (form.get(formControlName)?.dirty || form.get(formControlName)?.touched)\">\r\n • {{ validation.message }}\r\n </div>\r\n </ng-container>\r\n \r\n </div>\r\n </div>", styles: [".pesquisa-select{display:block;position:absolute;top:58px;left:20px;width:100%;z-index:800;font-size:16px;font-family:Roboto,Helvetica Neue,sans-serif;border-bottom-left-radius:5px;border-bottom-right-radius:5px}.pesquisa-select option{overflow-y:hidden}.pesquisa-select option:hover,.pesquisa-select option:checked{background-color:#add8e6}.pesquisa-list{display:block;position:absolute;margin-left:20px;margin-top:-4px;width:calc(100% - 50px);z-index:800;border:1px lightgrey solid;border-bottom-left-radius:5px;border-bottom-right-radius:5px;padding:0}.pesquisa-item{--inner-padding-top: 0px;--inner-padding-bottom: 0px;--padding-top: 0px;--padding-bottom: 0px;--min-height: 30px !important;font-size:12px}.pesquisa-item button{padding:0}.selected-item{background-color:#add8e6}.botao-limpar{margin-top:var(--margin-botao-limpar, 25px);margin-inline-start:4px!important;--padding-start:2px;--padding-end: 2px;margin-bottom:2px!important}[hidden]{display:none!important}\n", "@charset \"UTF-8\";ion-label{margin-bottom:4px!important;--color: var(--ion-color-label, auto) !important}ion-item ion-label{overflow:initial!important}ion-input{padding:var(--input-padding, 8px)!important;border:1px solid darkgray;border-radius:4px;width:100%;margin-top:2px;max-height:var(--input-max-height, 29px);transition:.2s ease}.has-focus{border:1px solid var(--ion-color-bluetool, #1f477d)}input:focus{border:1px solid lightblue!important}input:focus ion-input,input:focus ion-textarea{border:1px solid lightblue!important}input:focus ion-label{--color: var(--ion-color-label-focus, blue) !important}.item-has-focus ion-label{color:var(--ion-color-label-focus, blue)!important}.item-has-focus ion-input,.item-has-focus ion-textarea{border:1px solid lightblue!important}.native-input[disabled]{opacity:var(--item-disabled-opacity, .6)!important;background-color:transparent}.item-interactive-disabled ion-label{opacity:var(--item-disabled-opacity, .6)}.error-message{font-size:small;color:var(--error-text-color, red);margin-left:15px}.padding{padding:auto}.no-padding{--inner-padding-end: 0px;--padding-start: 0px;--padding-bottom: 0px;--inner-padding-bottom: 0px;height:55px!important}.no-padding-end{--inner-padding-end: 0px}.no-padding-start{--padding-start: 0px !important}.no-padding-no-height{--inner-padding-end: 0px;--padding-start: 0px;--padding-bottom: 0px;--inner-padding-bottom: 0px}.padding-top{--padding-top: 0px}.item-inner{padding-right:0!important}.label-right ion-label{transform-origin:right top;align-self:flex-end;margin-bottom:4%!important}.align-to-right ion-label{position:relative;left:25%;text-align:end}.error-input ion-input,.error-shake ion-input{animation:shake .4s 1 linear;border:1px solid var(--error-text-color, red)!important}@keyframes shake{0%{transform:translate(20px)}20%{transform:translate(-20px)}40%{transform:translate(10px)}60%{transform:translate(-10px)}80%{transform:translate(4px)}to{transform:translate(0)}}.error-input ion-label,.error-shake ion-label{color:var(--error-text-color, red)!important}.error-input ion-input,.error-shake ion-input{border:1px solid red!important}.error-shake ion-input{animation:shake .4s 1 linear}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i2.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i2.IonInput, selector: "ion-input", inputs: ["accept", "autocapitalize", "autocomplete", "autocorrect", "autofocus", "clearInput", "clearOnEdit", "color", "counter", "counterFormatter", "debounce", "disabled", "enterkeyhint", "errorText", "fill", "helperText", "inputmode", "label", "labelPlacement", "legacy", "max", "maxlength", "min", "minlength", "mode", "multiple", "name", "pattern", "placeholder", "readonly", "required", "shape", "size", "spellcheck", "step", "type", "value"] }, { kind: "component", type: i2.IonItem, selector: "ion-item", inputs: ["button", "color", "counter", "counterFormatter", "detail", "detailIcon", "disabled", "download", "fill", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "shape", "target", "type"] }, { kind: "component", type: i2.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i2.IonList, selector: "ion-list", inputs: ["inset", "lines", "mode"] }, { kind: "component", type: i2.IonSpinner, selector: "ion-spinner", inputs: ["color", "duration", "name", "paused"] }, { kind: "directive", type: i2.TextValueAccessor, selector: "ion-input:not([type=number]),ion-textarea,ion-searchbar" }] }); }
|
|
508
|
-
}
|
|
509
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.7", ngImport: i0, type: InputPesquisaComponent, decorators: [{
|
|
510
|
-
type: Component,
|
|
511
|
-
args: [{ selector: 'kb-input-pesquisa', providers: [{
|
|
512
|
-
provide: NG_VALUE_ACCESSOR,
|
|
513
|
-
useExisting: InputPesquisaComponent,
|
|
514
|
-
multi: true
|
|
515
|
-
}], template: "<div style=\"padding-inline-end: 0px;\">\r\n <ion-item lines=\"none\" style=\"--background: inherited; --background-focused: transparent; margin-top: 2px;\" [class]=\"itemClass\">\r\n <ion-label position=\"{{ labelPosition }}\">{{ label }}</ion-label>\r\n <!-- formControlName=\"{{ campo }}\" -->\r\n <ion-spinner *ngIf=\"!podePesquisar\"\r\n style=\"--min-height: 0px !important; margin-inline-end: 5px !important; margin-top: 16px;\" \r\n slot=\"start\" name=\"lines\"></ion-spinner>\r\n <!-- (ionBlur)=\"verificarPesquisa()\" -->\r\n <!-- conflito com click da lista -->\r\n <ion-input #inputPesquisa\r\n [legacy]=\"true\"\r\n type=\"{{type}}\" \r\n [placeholder]=\"placeholder\" \r\n maxlength=\"{{ max }}\" \r\n (ionBlur)=\"onBlur($event)\"\r\n [value]=\"textoPesquisa\" (input)=\"writePesquisa(inputPesquisa.value)\" \r\n (keyup)=\"showPesquisa($event)\"\r\n autocomplete=\"off\" [style.--background]=\"inputBackgroungColor\"\r\n (click)=\"dropDownPesquisa(-1)\"\r\n [disabled]=\"readonly\" debounce=\"500\"></ion-input>\r\n <ion-button size=\"small\" slot=\"end\" tabindex=\"-1\"\r\n class=\"botao-limpar\" fill=\"clear\" color=\"medium\"\r\n (click)=\"limparClick()\">\r\n <ion-icon name=\"close-outline\"></ion-icon>\r\n </ion-button>\r\n \r\n \r\n <ion-button size=\"small\" slot=\"end\" tabindex=\"-1\"\r\n class=\"botao-limpar\" fill=\"clear\" color=\"medium\"\r\n (click)=\"pesquisarClick()\">\r\n <ion-icon color=\"primary\" name=\"search\"></ion-icon>\r\n </ion-button>\r\n \r\n \r\n </ion-item>\r\n \r\n <ion-list tabindex=\"-1\" [hidden]=\"!selectElementVisivel || !listaPesquisa || listaPesquisa.length == 0\" class=\"pesquisa-list\" style=\"max-height: 250px; overflow-y: auto;\">\r\n \r\n <ion-item tabindex=\"-1\" button *ngFor=\"let item of listaPesquisa\" \r\n (click)=\"selecionarComboClick(item)\" [id]=\"selectId + 'IonItem' + item['Index']\"\r\n class=\"pesquisa-item\">\r\n <!-- {{ item | json}} -->\r\n <span [class]=\"{'selected-item': item['Selected'] === true}\" [innerHTML]=\"highlight(item[campoDisplay])\"></span>\r\n </ion-item>\r\n \r\n </ion-list>\r\n \r\n <!--\r\n <ion-select interface=\"popover\" #selectElement tabindex=\"-1\" [hidden]=\"!selectElementVisivel\"\r\n (ionChange)=\"selecionarComboChange($event.target.value)\">\r\n <ion-select-option *ngFor=\"let item of listaPesquisa\" [value]=\"item[campoId]\" (click)=\"selecionarComboClick(item[campoId])\">\r\n {{ item[campoDisplay] }}\r\n </ion-select-option>\r\n </ion-select>\r\n -->\r\n \r\n <!--\r\n <select [id]=\"selectId\" #selectElement tabindex=\"-1\" [hidden]=\"!selectElementVisivel\"\r\n (change)=\"selecionarComboChange($event.target.value)\" class=\"pesquisa-select\">\r\n <option *ngFor=\"let item of listaPesquisa\" [value]=\"item[campoId]\" (click)=\"selecionarComboClick(item[campoId])\">\r\n {{ item[campoDisplay] }}\r\n </option>\r\n \r\n </select>\r\n -->\r\n \r\n <div class=\"validation-errors\" *ngIf=\"form\">\r\n \r\n <ng-container *ngFor=\"let validation of validation_messages\">\r\n <div class=\"error-message\"\r\n *ngIf=\"form.get(formControlName)?.hasError(validation.type) && (form.get(formControlName)?.dirty || form.get(formControlName)?.touched)\">\r\n • {{ validation.message }}\r\n </div>\r\n </ng-container>\r\n \r\n </div>\r\n </div>", styles: [".pesquisa-select{display:block;position:absolute;top:58px;left:20px;width:100%;z-index:800;font-size:16px;font-family:Roboto,Helvetica Neue,sans-serif;border-bottom-left-radius:5px;border-bottom-right-radius:5px}.pesquisa-select option{overflow-y:hidden}.pesquisa-select option:hover,.pesquisa-select option:checked{background-color:#add8e6}.pesquisa-list{display:block;position:absolute;margin-left:20px;margin-top:-4px;width:calc(100% - 50px);z-index:800;border:1px lightgrey solid;border-bottom-left-radius:5px;border-bottom-right-radius:5px;padding:0}.pesquisa-item{--inner-padding-top: 0px;--inner-padding-bottom: 0px;--padding-top: 0px;--padding-bottom: 0px;--min-height: 30px !important;font-size:12px}.pesquisa-item button{padding:0}.selected-item{background-color:#add8e6}.botao-limpar{margin-top:var(--margin-botao-limpar, 25px);margin-inline-start:4px!important;--padding-start:2px;--padding-end: 2px;margin-bottom:2px!important}[hidden]{display:none!important}\n", "@charset \"UTF-8\";ion-label{margin-bottom:4px!important;--color: var(--ion-color-label, auto) !important}ion-item ion-label{overflow:initial!important}ion-input{padding:var(--input-padding, 8px)!important;border:1px solid darkgray;border-radius:4px;width:100%;margin-top:2px;max-height:var(--input-max-height, 29px);transition:.2s ease}.has-focus{border:1px solid var(--ion-color-bluetool, #1f477d)}input:focus{border:1px solid lightblue!important}input:focus ion-input,input:focus ion-textarea{border:1px solid lightblue!important}input:focus ion-label{--color: var(--ion-color-label-focus, blue) !important}.item-has-focus ion-label{color:var(--ion-color-label-focus, blue)!important}.item-has-focus ion-input,.item-has-focus ion-textarea{border:1px solid lightblue!important}.native-input[disabled]{opacity:var(--item-disabled-opacity, .6)!important;background-color:transparent}.item-interactive-disabled ion-label{opacity:var(--item-disabled-opacity, .6)}.error-message{font-size:small;color:var(--error-text-color, red);margin-left:15px}.padding{padding:auto}.no-padding{--inner-padding-end: 0px;--padding-start: 0px;--padding-bottom: 0px;--inner-padding-bottom: 0px;height:55px!important}.no-padding-end{--inner-padding-end: 0px}.no-padding-start{--padding-start: 0px !important}.no-padding-no-height{--inner-padding-end: 0px;--padding-start: 0px;--padding-bottom: 0px;--inner-padding-bottom: 0px}.padding-top{--padding-top: 0px}.item-inner{padding-right:0!important}.label-right ion-label{transform-origin:right top;align-self:flex-end;margin-bottom:4%!important}.align-to-right ion-label{position:relative;left:25%;text-align:end}.error-input ion-input,.error-shake ion-input{animation:shake .4s 1 linear;border:1px solid var(--error-text-color, red)!important}@keyframes shake{0%{transform:translate(20px)}20%{transform:translate(-20px)}40%{transform:translate(10px)}60%{transform:translate(-10px)}80%{transform:translate(4px)}to{transform:translate(0)}}.error-input ion-label,.error-shake ion-label{color:var(--error-text-color, red)!important}.error-input ion-input,.error-shake ion-input{border:1px solid red!important}.error-shake ion-input{animation:shake .4s 1 linear}\n"] }]
|
|
516
|
-
}], ctorParameters: () => [{ type: undefined, decorators: [{
|
|
517
|
-
type: Inject,
|
|
518
|
-
args: ['LibConfigService']
|
|
519
|
-
}] }, { type: i1.HttpClient }, { type: i2.ModalController }], propDecorators: { textoPesquisa: [{
|
|
520
|
-
type: Input
|
|
521
|
-
}], max: [{
|
|
522
|
-
type: Input
|
|
523
|
-
}], filterFunction: [{
|
|
524
|
-
type: Input
|
|
525
|
-
}], selectId: [{
|
|
526
|
-
type: Input
|
|
527
|
-
}], campoId: [{
|
|
528
|
-
type: Input
|
|
529
|
-
}], campoPaiId: [{
|
|
530
|
-
type: Input
|
|
531
|
-
}], campoDisplay: [{
|
|
532
|
-
type: Input
|
|
533
|
-
}], tipo: [{
|
|
534
|
-
type: Input
|
|
535
|
-
}], selectElement: [{
|
|
536
|
-
type: ViewChild,
|
|
537
|
-
args: ['selectElement', { static: false }]
|
|
538
|
-
}], pesquisaChange: [{
|
|
539
|
-
type: Input
|
|
540
|
-
}], pesquisaAction: [{
|
|
541
|
-
type: Input
|
|
542
|
-
}], limpar: [{
|
|
543
|
-
type: Input
|
|
544
|
-
}], url: [{
|
|
545
|
-
type: Input
|
|
546
|
-
}], urlItem: [{
|
|
547
|
-
type: Input
|
|
548
|
-
}], urlTree: [{
|
|
549
|
-
type: Input
|
|
550
|
-
}], empresa: [{
|
|
551
|
-
type: Input
|
|
552
|
-
}], loadInit: [{
|
|
553
|
-
type: Input
|
|
554
|
-
}], treeTitulo: [{
|
|
555
|
-
type: Input
|
|
556
|
-
}] } });
|
|
557
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtcGVzcXVpc2EuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXBwcHJvamVjdC1jb21wb25lbnRzL3NyYy9saWIvaW5wdXQtcGVzcXVpc2EvaW5wdXQtcGVzcXVpc2EuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXBwcHJvamVjdC1jb21wb25lbnRzL3NyYy9saWIvaW5wdXQtcGVzcXVpc2EvaW5wdXQtcGVzcXVpc2EuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBcUIsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JHLE9BQU8sRUFBd0IsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV6RSxPQUFPLEVBQUUsT0FBTyxFQUFnQixFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDakQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDM0QsT0FBTyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUN4RCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQzs7Ozs7QUFFcEYsZ0ZBQWdGO0FBWWhGLE1BQU0sT0FBTyxzQkFBdUIsU0FBUSxrQkFBa0I7SUE0QzVELFVBQVUsQ0FBQyxLQUFtQjtRQUM1QixvQ0FBb0M7UUFDcEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNyQixJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQztRQUNsQixJQUFJLEtBQUssSUFBSSxJQUFJLElBQUksS0FBSyxJQUFJLENBQUMsRUFBRTtZQUMvQixJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxZQUFZ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S0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBR0csR0FBRztzQkFBWCxLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFFRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbmplY3QsIElucHV0LCBPbkluaXQsIFByZWRpY2F0ZSwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgSW9uU2VsZWN0LCBNb2RhbENvbnRyb2xsZXIgfSBmcm9tICdAaW9uaWMvYW5ndWxhcic7XHJcbmltcG9ydCB7IFN1YmplY3QsIFN1YnNjcmlwdGlvbiwgb2YgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgQmFzZUlucHV0Q29tcG9uZW50IH0gZnJvbSAnLi4vYmFzZUlucHV0Q29tcG9uZW50JztcclxuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycydcclxuaW1wb3J0IHsgTW9kZWxUcmVldmlld0NvbXBvbmVudCB9IGZyb20gJy4uL21vZGVsLXRyZWV2aWV3L21vZGVsLXRyZWV2aWV3LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IExpYkNvbmZpZyB9IGZyb20gJy4uL2xpYi1jb25maWcnO1xyXG4vL2ltcG9ydCB7IExpYkNvbmZpZywgTGliQ29uZmlnU2VydmljZSB9IGZyb20gJy4uL2FwcHByb2plY3QtY29tcG9uZW50cy5tb2R1bGUnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdrYi1pbnB1dC1wZXNxdWlzYScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2lucHV0LXBlc3F1aXNhLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9pbnB1dC1wZXNxdWlzYS5jb21wb25lbnQuc2NzcycsICcuLy4uL2Jhc2VDb21wb25lbnQuc2NzcyddLFxyXG4gIHByb3ZpZGVyczogW3tcclxuICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gICAgdXNlRXhpc3Rpbmc6IElucHV0UGVzcXVpc2FDb21wb25lbnQsXHJcbiAgICBtdWx0aTogdHJ1ZVxyXG4gIH1dXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBJbnB1dFBlc3F1aXNhQ29tcG9uZW50IGV4dGVuZHMgQmFzZUlucHV0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBDb250cm9sVmFsdWVBY2Nlc3NvciB7XHJcblxyXG4gIHBvZGVQZXNxdWlzYXI6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIHRleHRvUGVzcXVpc2E6IHN0cmluZyA9ICcnO1xyXG4gIHNlbGVjdEVsZW1lbnRWaXNpdmVsOiBib29sZWFuID0gZmFsc2U7XHJcbiAgbGlzdGFQZXNxdWlzYTogYW55W10gPSBbXTtcclxuICBzZWxlY3RlZEl0ZW06IGFueTtcclxuICBASW5wdXQoKSBvdmVycmlkZSBtYXg6IHN0cmluZyA9ICczMCc7XHJcbiAgcHJpdmF0ZSBwZXNxdWlzYVN1YmplY3Q6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBTdWJqZWN0KCk7XHJcblxyXG4gIEBJbnB1dCgpIGZpbHRlckZ1bmN0aW9uOiBQcmVkaWNhdGU8YW55PiB8IG51bGwgPSBudWxsO1xyXG4gIEBJbnB1dCgpIHNlbGVjdElkOiBzdHJpbmcgPSAnc2VsZWN0RWxlbWVudCc7XHJcbiAgQElucHV0KCkgY2FtcG9JZDogc3RyaW5nID0gJ0lkJztcclxuICBASW5wdXQoKSBjYW1wb1BhaUlkOiBzdHJpbmcgPSAnUGFpSWQnO1xyXG4gIEBJbnB1dCgpIGNhbXBvRGlzcGxheTogc3RyaW5nID0gJ0Rlc2NyaWNhbyc7XHJcbiAgQElucHV0KCkgdGlwbzogc3RyaW5nID0gJyc7XHJcbiAgLy9AVmlld0NoaWxkKCdzZWxlY3RFbGVtZW50JywgeyByZWFkOiBFbGVtZW50UmVmLCBzdGF0aWM6IHRydWUgfSkgc2VsZWN0RWxlbWVudDtcclxuICBAVmlld0NoaWxkKCdzZWxlY3RFbGVtZW50JywgeyBzdGF0aWM6IGZhbHNlIH0pIHNlbGVjdEVsZW1lbnQ6IElvblNlbGVjdCB8IG51bGwgPSBudWxsO1xyXG5cclxuICBASW5wdXQoKSBwZXNxdWlzYUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBASW5wdXQoKSBwZXNxdWlzYUFjdGlvbj86IEZ1bmN0aW9uO1xyXG4gIEBJbnB1dCgpIGxpbXBhcj86IEZ1bmN0aW9uO1xyXG4gIC8vcGFyYW1ldHJvcyBwYXJhIGNoYW1hZGEgQVBJXHJcbiAgLy9lbmRwb2ludCBwYXJhIHBlc3F1aXNhIHBvciBkaWdpdGHDp8Ojb1xyXG4gIEBJbnB1dCgpIHVybDogc3RyaW5nID0gJyc7XHJcbiAgQElucHV0KCkgdXJsSXRlbTogc3RyaW5nID0gJyc7XHJcbiAgLy9lbmRwb2ludCBwYXJhIG1vbnRhciBhIGFydm9yZSwgc2UgZXN0aXZlciB2YXppYSBzZXLDoSB1c2FkbyBvIGNhbXBvICd1cmwnXHJcbiAgQElucHV0KCkgdXJsVHJlZTogc3RyaW5nID0gJyc7XHJcbiAgQElucHV0KCkgZW1wcmVzYTogbnVtYmVyID0gMDtcclxuICBASW5wdXQoKSBsb2FkSW5pdDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHRyZWVUaXR1bG86IHN0cmluZztcclxuXHJcbiAgLy9wbGFub0NvbnRhczogbnVtYmVyO1xyXG5cclxuICAvL2NvbnRyb2wgdmFsdWUgYWNlc3NvclxyXG4gIHB1YmxpYyBkYXRhOiBudW1iZXIgfCBhbnk7XHJcbiAgcHJpdmF0ZSBvbkNoYW5nZTogRnVuY3Rpb24gPSAoZGF0YTogbnVtYmVyKSA9PiB7IH07XHJcbiAgcHJpdmF0ZSBvblRvdWNoOiBGdW5jdGlvbiA9ICgpID0+IHsgfTtcclxuICBwcml2YXRlIGRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGNvbnNvbGUgPSBjb25zb2xlO1xyXG5cclxuICBtb2RlbENoYW5nZWQ6IFN1YmplY3Q8YW55PiA9IG5ldyBTdWJqZWN0PGFueT4oKTtcclxuICBtb2RlbENoYW5nZVN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcclxuXHJcbiAgd3JpdGVWYWx1ZSh2YWx1ZTogbnVtYmVyIHwgYW55KTogdm9pZCB7XHJcbiAgICAvL2NvbnNvbGUubG9nKCd3cml0ZSB2YWx1ZScsIHZhbHVlKTtcclxuICAgIHRoaXMub25DaGFuZ2UodmFsdWUpO1xyXG4gICAgdGhpcy5kYXRhID0gdmFsdWU7XHJcbiAgICBpZiAodmFsdWUgPT0gbnVsbCB8fCB2YWx1ZSA9PSAwKSB7XHJcbiAgICAgIHRoaXMud3JpdGVQZXNxdWlzYSgnJyk7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtID0gbnVsbDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLmxvYWRJbml0ID09IHRydWUpIHtcclxuICAgICAgICB0aGlzLmxvYWRJbml0ID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5tb2RlbENoYW5nZWQubmV4dCh2YWx1ZSk7XHJcbiAgICAgICAgLy90aGlzLmNhcnJlZ2FJdGVtSWRQYXJhTGlzdGEodmFsdWUpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vY29uc29sZS5sb2codGhpcy5zZWxlY3RlZEl0ZW0pO1xyXG4gICAgICAgIGlmICghdGhpcy5zZWxlY3RlZEl0ZW0gfHwgKHRoaXMuc2VsZWN0ZWRJdGVtICYmIHRoaXMuc2VsZWN0ZWRJdGVtW3RoaXMuY2FtcG9JZF0gIT0gdmFsdWUpKSB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZygnSWQgZGlmZXJlbnRlJyk7XHJcbiAgICAgICAgICB0aGlzLm1vZGVsQ2hhbmdlZC5uZXh0KHZhbHVlKTtcclxuICAgICAgICAgIC8vdGhpcy5jYXJyZWdhSXRlbUlkUGFyYUxpc3RhKHZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgfVxyXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xyXG4gIH1cclxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLm9uVG91Y2ggPSBmbjtcclxuICB9XHJcbiAgc2V0RGlzYWJsZWRTdGF0ZT8oaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgdGhpcy5kaXNhYmxlZCA9IHRoaXMuZGlzYWJsZWQ7XHJcbiAgfVxyXG5cclxuICBCQVNFX0FQSSA9IHRoaXMuY29uZmlnLmFwaVVybDtcclxuXHJcbiAgY29uc3RydWN0b3IoQEluamVjdCgnTGliQ29uZmlnU2VydmljZScpIHByaXZhdGUgY29uZmlnOiBMaWJDb25maWcsXHJcbiAgICBwcml2YXRlIGh0dHBDbGllbnQ6IEh0dHBDbGllbnQsXHJcbiAgICBwcml2YXRlIG1vZGFsQ3RybDogTW9kYWxDb250cm9sbGVyKSB7XHJcbiAgICBzdXBlcigpO1xyXG5cclxuICAgIHRoaXMubW9kZWxDaGFuZ2VTdWJzY3JpcHRpb24gPSB0aGlzLm1vZGVsQ2hhbmdlZFxyXG4gICAgICAucGlwZShkZWJvdW5jZVRpbWUoNTAwKVxyXG4gICAgICApXHJcbiAgICAgIC5zdWJzY3JpYmUoZGF0YSA9PiB7XHJcbiAgICAgICAgdGhpcy5jYXJyZWdhSXRlbUlkUGFyYUxpc3RhKGRhdGEpO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIG9uQmx1cihldmVudDogYW55KSB7XHJcbiAgICBjb25zb2xlLmxvZygnYmx1cicsIGV2ZW50KTtcclxuICAgIC8vY29uc29sZS5sb2coZXZlbnQuZGV0YWlsLnJlbGF0ZWRUYXJnZXQpO1xyXG4gICAgaWYgKGV2ZW50LmRldGFpbC5yZWxhdGVkVGFyZ2V0ID09IG51bGwgfHwgZXZlbnQuZGV0YWlsLnJlbGF0ZWRUYXJnZXQuaWQuaW5kZXhPZih0aGlzLnNlbGVjdElkICsgJ0lvbkl0ZW0nKSA9PSAtMSkge1xyXG4gICAgICAvL2NvbnNvbGUubG9nKFwidHJ1ZVwiLCBldmVudC5kZXRhaWwucmVsYXRlZFRhcmdldC5pZCk7XHJcbiAgICAgIC8vcGVzcXVpc2FyIGl0ZW0gbmEgbGlzdGFcclxuICAgICAgaWYgKCF0aGlzLmV4aXN0ZU5hTGlzdGFUZXh0byh0aGlzLnRleHRvUGVzcXVpc2EsIHRydWUpKSB7XHJcbiAgICAgICAgdGhpcy5saW1wYXJDbGljaygpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLmRyb3BEb3duUGVzcXVpc2EoMCk7XHJcbiAgICAgIGlmICh0aGlzLmZvcm0pIHtcclxuICAgICAgICB0aGlzLmZvcm0uZ2V0KHRoaXMuZm9ybUNvbnRyb2xOYW1lKT8ubWFya0FzVG91Y2hlZCgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvdmVycmlkZSBuZ09uSW5pdCgpIHtcclxuICAgIC8vdHJhdGFyIHVybHNcclxuICAgIHRoaXMudXJsID0gdGhpcy51cmwuc3RhcnRzV2l0aCgnaHR0cCcpID8gdGhpcy51cmwgOiBgJHt0aGlzLkJBU0VfQVBJfS8ke3RoaXMudXJsfWA7XHJcbiAgICB0aGlzLnVybEl0ZW0gPSB0aGlzLnVybEl0ZW0uc3RhcnRzV2l0aCgnaHR0cCcpID8gdGhpcy51cmxJdGVtIDogYCR7dGhpcy5CQVNFX0FQSX0vJHt0aGlzLnVybEl0ZW19YDtcclxuXHJcbiAgICB0aGlzLnBlc3F1aXNhU3ViamVjdC5waXBlKHN3aXRjaE1hcCgodXJsKSA9PiB7XHJcbiAgICAgIC8vdGhpcy5jb25zb2xlLmxvZygnc3ViamVjdCB1cmw6JywgdXJsKTsgICAgICBcclxuICAgICAgaWYgKCF0aGlzLmlzRW1wdHkodXJsKSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQuZ2V0KHVybCk7XHJcbiAgICAgICAgLy9yZXR1cm4gb2YodXJsKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlXHJcbiAgICAgICAgcmV0dXJuIG9mKFtdKTtcclxuICAgIH0pKVxyXG4gICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocmVzdWx0OiBhbnkpID0+IHtcclxuICAgICAgICAgIC8vdGhpcy5saXN0YVBlc3F1aXNhID0gcmVzdWx0O1xyXG4gICAgICAgICAgdGhpcy5jb25zb2xlLmxvZygnc3ViamVjdCBzdWJzY3JpYmUgcmVzdWx0OicsIHJlc3VsdCk7XHJcbiAgICAgICAgICB0aGlzLmxpc3RhUGVzcXVpc2EgPSBbXTtcclxuXHJcbiAgICAgICAgICBpZiAocmVzdWx0ICYmIHJlc3VsdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmZpbHRlckZ1bmN0aW9uKSB7XHJcbiAgICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0LmZpbHRlcih0aGlzLmZpbHRlckZ1bmN0aW9uKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmVzdWx0LmZvckVhY2goKGVudDogYW55LCBpbmRleDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5saXN0YVBlc3F1aXNhLnB1c2goeyAuLi5lbnQsIEluZGV4OiBpbmRleCwgU2VsZWN0ZWQ6IGZhbHNlIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICB0aGlzLnBvZGVQZXNxdWlzYXIgPSB0cnVlO1xyXG4gICAgICAgICAgaWYgKHRoaXMubGlzdGFQZXNxdWlzYS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZHJvcERvd25QZXNxdWlzYSh0aGlzLmxpc3RhUGVzcXVpc2EubGVuZ3RoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgLCBlcnJvcjogKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnBvZGVQZXNxdWlzYXIgPSB0cnVlO1xyXG4gICAgICAgICAgY29uc29sZS5sb2coJ2Vycm8gcGVzcXVpc2EnLCBlcnJvcik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHdyaXRlUGVzcXVpc2EodmFsdWU6IHN0cmluZyB8IGFueSk6IHZvaWQge1xyXG4gICAgLy9jb25zb2xlLmxvZygnd3JpdGUgcGVzcXVpc2EnLCB2YWx1ZSk7XHJcbiAgICB0aGlzLnRleHRvUGVzcXVpc2EgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIHNob3dQZXNxdWlzYShlOiBhbnkpOiB2b2lkIHtcclxuICAgIC8vY29uc29sZS5sb2coJ3Nob3cgcGVzcXVpc2EnLCBlLmtleUNvZGUpO1xyXG4gICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgY29uc3QgaW5kZXggPSBlLnRhcmdldC5zZWxlY3Rpb25TdGFydCA+PSAxID8gKGUudGFyZ2V0LnNlbGVjdGlvblN0YXJ0IC0gMSkgOiAwO1xyXG4gICAgLy9jb25zb2xlLmxvZyhpbmRleCwgJ3ZhbG9yICcsIGV2ZW50LnRhcmdldC52YWx1ZSwgJ2NoYXIgJywgZXZlbnQudGFyZ2V0LnZhbHVlLmNoYXJDb2RlQXQoaW5kZXgpKTtcclxuICAgIGNvbnN0IGtleUF0ID0gZS50YXJnZXQudmFsdWUuY2hhckNvZGVBdChpbmRleCk7XHJcbiAgICAvKlxyXG4gICAgaWYgKChlLmtleUNvZGUgPj0gNDggJiYgZS5rZXlDb2RlIDw9IDU3KSB8fFxyXG4gICAgICAoa2V5QXQgPj0gNDggJiYga2V5QXQgPD0gNTcpIHx8XHJcbiAgICAgIChlLmtleUNvZGUgPj0gNjUgJiYgZS5rZXlDb2RlIDw9IDkwKSB8fFxyXG4gICAgICAoZS5rZXlDb2RlID49IDk2ICYmIGUua2V5Q29kZSA8PSAxMDUpIHx8XHJcbiAgICAgIChlLmtleUNvZGUgPT0gOCkpIHtcclxuICAgICAgICAqL1xyXG4gICAgaWYgKGUua2V5Q29kZSAhPSA0MCAmJiBlLmtleUNvZGUgIT0gMzgpIHtcclxuICAgICAgaWYgKCFzZWxmLnBvZGVQZXNxdWlzYXIpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgbGV0IGZpbHRybyA9IHNlbGYudGV4dG9QZXNxdWlzYTtcclxuICAgICAgaWYgKGZpbHRybyAhPSBudWxsICYmIGZpbHRybyAhPSAnJyAmJiBmaWx0cm8ubGVuZ3RoID49IDIpIHtcclxuICAgICAgICBzZWxmLnBlc3F1aXNhckVudGlkYWRlKGZpbHRybyk7XHJcblxyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGlmIChlLmtleUNvZGUgPT0gOCAmJiAhZmlsdHJvKSB7XHJcbiAgICAgICAgICB0aGlzLmxpbXBhckNsaWNrKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGlmIChlLmtleUNvZGUgPT0gNDAgfHwgZS5rZXlDb2RlID09IDM4KSB7XHJcbiAgICAgICAgc2VsZi5kcm9wRG93blBlc3F1aXNhKHNlbGYubGlzdGFQZXNxdWlzYS5sZW5ndGgpO1xyXG4gICAgICAgIGlmIChzZWxmLnNlbGVjdEVsZW1lbnRWaXNpdmVsID09IHRydWUpIHtcclxuICAgICAgICAgIC8vbGV0IHNlbGVjdCA9IHNlbGYuc2VsZWN0RWxlbWVudDsgLy9kb2N1bWVudC5nZXRFbGVtZW50QnlJZChzZWxmLlRlbXBsYXRlU2VsZWN0MUlkKCkpO1xyXG5cclxuICAgICAgICAgIC8vaW9uLWxpc3RcclxuICAgICAgICAgIC8vc2VsZWNpb25hZG9cclxuICAgICAgICAgIC8vY29uc29sZS5sb2coc2VsZi5saXN0YVBlc3F1aXNhKTtcclxuICAgICAgICAgIGxldCBpbmMgPSBlLmtleUNvZGUgPT0gNDAgPyAxIDogLTE7XHJcbiAgICAgICAgICBsZXQgc2VsZWN0ZWQgPSBzZWxmLmxpc3RhUGVzcXVpc2EuZmluZChzID0+IHNbJ1NlbGVjdGVkJ10gPT09IHRydWUpO1xyXG4gICAgICAgICAgbGV0IGN1ciA9IDA7XHJcbiAgICAgICAgICBpZiAoc2VsZWN0ZWQgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBjdXIgPSBzZWxlY3RlZFsnSW5kZXgnXTtcclxuICAgICAgICAgICAgLy9kZXNtYXJjYXIgbyBhdHVhbFxyXG4gICAgICAgICAgICBzZWxlY3RlZFsnU2VsZWN0ZWQnXSA9IGZhbHNlO1xyXG4gICAgICAgICAgICBjdXIgPSBjdXIgKyBpbmM7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjdXIgPSAwO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmIChjdXIgPCAwKSB7XHJcbiAgICAgICAgICAgIGN1ciA9IHNlbGYubGlzdGFQZXNxdWlzYS5sZW5ndGggLSAxO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChjdXIgPj0gc2VsZi5saXN0YVBlc3F1aXNhLmxlbmd0aCkge1xyXG4gICAgICAgICAgICBjdXIgPSAwO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGxldCBub3ZvU2VsZWN0ZWQgPSBzZWxmLmxpc3RhUGVzcXVpc2EuZmluZChuID0+IG5bJ0luZGV4J10gPT09IGN1cik7XHJcbiAgICAgICAgICBpZiAobm92b1NlbGVjdGVkICE9IG51bGwpIHtcclxuICAgICAgICAgICAgbm92b1NlbGVjdGVkWydTZWxlY3RlZCddID0gdHJ1ZTtcclxuICAgICAgICAgICAgc2VsZi5zZWxlY3RlZEl0ZW0gPSBub3ZvU2VsZWN0ZWQ7XHJcbiAgICAgICAgICAgIHNlbGYudGV4dG9QZXNxdWlzYSA9IG5vdm9TZWxlY3RlZFtzZWxmLmNhbXBvRGlzcGxheV07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICAvKlxyXG4gICAgICAgICAgbGV0IHNlbGVjdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuc2VsZWN0SWQpIGFzIGFueTtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKCdzZWxlY3QgRWxlbWVudCcsIHNlbGVjdClcclxuICAgICAgICAgIGlmIChzZWxlY3QgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICBsZXQgaW5jID0gZS5rZXlDb2RlID09IDQwID8gMSA6IC0xO1xyXG4gICAgICAgICAgICBsZXQgY3VyID0gc2VsZWN0LnNlbGVjdGVkSW5kZXg7XHJcbiAgICAgICAgICAgIGlmIChjdXIgPT0gTmFOKSBjdXIgPSAtMTtcclxuICAgICAgICAgICAgc2VsZWN0LnNlbGVjdGVkSW5kZXggPSBjdXIgKyBpbmM7XHJcbiAgICAgICAgICAgIGlmIChzZWxlY3Quc2VsZWN0ZWRJbmRleCA+PSAwICYmIHNlbGVjdC5zZWxlY3RlZEluZGV4IDwgc2VsZi5saXN0YVBlc3F1aXNhLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgIHNlbGYuc2VsZWN0ZWRJdGVtID0gc2VsZi5saXN0YVBlc3F1aXNhW3NlbGVjdC5zZWxlY3RlZEluZGV4XTtcclxuICAgICAgICAgICAgICBpZiAoc2VsZi5zZWxlY3RlZEl0ZW0gIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgc2VsZi50ZXh0b1Blc3F1aXNhID0gc2VsZi5zZWxlY3RlZEl0ZW1bc2VsZi5jYW1wb0Rpc3BsYXldO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgKi9cclxuICAgICAgICB9XHJcblxyXG4gICAgICB9IGVsc2VcclxuICAgICAgICBpZiAoZS5rZXlDb2RlID09IDEzKSB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZygnZW50ZXIga2V5JywgZSlcclxuICAgICAgICAgIC8vc2VsZi5zZWxlY2lvbmFyQ29tYm9DbGljayhlKTtcclxuICAgICAgICAgIHNlbGYuc2VsZWNpb25hckNvbWJvQ2xpY2sobnVsbCk7XHJcbiAgICAgICAgICAvL3JldHVybiBmYWxzZTtcclxuICAgICAgICB9IGVsc2UgaWYgKGUua2V5Q29kZSA9PSAyNykge1xyXG4gICAgICAgICAgLy9FU0NcclxuICAgICAgICAgIHNlbGYuZHJvcERvd25QZXNxdWlzYSgwKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgaGlnaGxpZ2h0KHRleHRvOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgbGV0IGluZGV4ID0gdGV4dG8udG9Mb3dlckNhc2UoKS5pbmRleE9mKHRoaXMudGV4dG9QZXNxdWlzYS50b0xvd2VyQ2FzZSgpKTtcclxuICAgIC8vY29uc29sZS5sb2coaW5kZXgpO1xyXG4gICAgaWYgKGluZGV4ID49IDApIHtcclxuICAgICAgcmV0dXJuIHRleHRvLnN1YnN0cmluZygwLCBpbmRleCkgKyAnPHN0cm9uZz4nICsgdGV4dG8uc3Vic3RyaW5nKGluZGV4LCBpbmRleCArIHRoaXMudGV4dG9QZXNxdWlzYS5sZW5ndGgpICsgJzwvc3Ryb25nPicgKyB0ZXh0by5zdWJzdHJpbmcoaW5kZXggKyB0aGlzLnRleHRvUGVzcXVpc2EubGVuZ3RoKTsgIC8vdGV4dG8ucmVwbGFjZSh0aGlzLnRleHRvUGVzcXVpc2EsIGA8c3Ryb25nPiR7dGhpcy50ZXh0b1Blc3F1aXNhfTwvc3Ryb25nPmApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHRleHRvO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2VsZWNpb25hckNvbWJvQ2xpY2soaXRlbTogYW55KSB7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhpdGVtKTtcclxuICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgIC8vIGNvbnNvbGUubG9nKCdjb21ibyBjbGljaycsIHNlbGYpO1xyXG5cclxuICAgIC8qXHJcbiAgICBsZXQgc2VsZWN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5zZWxlY3RJZCkgYXMgYW55O1xyXG4gICAgaWYgKHNlbGVjdC5zZWxlY3RlZEluZGV4ID49IDApIHtcclxuICAgICAgc2VsZi5zZWxlY3RlZEl0ZW0gPSBzZWxmLmxpc3RhUGVzcXVpc2Fbc2VsZWN0LnNlbGVjdGVkSW5kZXhdO1xyXG4gICAgfVxyXG4gICAgY29uc29sZS5sb2coJ3NlbGVjdGVkJywgdGhpcy5zZWxlY3RlZEl0ZW0pO1xyXG4gICAgLy9zZWxmLnNlbGVjdGVkSXRlbSA9IHRoaXMubGlzdGFQZXNxdWlzYS5maW5kKGkgPT4gaVt0aGlzLmNhbXBvSWRdID09IGUpO1xyXG4gICAgaWYgKHNlbGYuc2VsZWN0ZWRJdGVtICE9IG51bGwpIHtcclxuICAgICAgc2VsZi50ZXh0b1Blc3F1aXNhID0gc2VsZi5zZWxlY3RlZEl0ZW1bc2VsZi5jYW1wb0Rpc3BsYXldO1xyXG4gICAgICBzZWxmLndyaXRlVmFsdWUoc2VsZi5zZWxlY3RlZEl0ZW1bc2VsZi5jYW1wb0lkXSk7XHJcbiAgICAgIGlmIChlICE9IG51bGwpIHtcclxuICAgICAgICBzZWxmLnNlbGVjdEVsZW1lbnRWaXNpdmVsID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKHNlbGYuYWN0aW9uICE9IG51bGwpIHtcclxuICAgICAgICAgIHNlbGYuYWN0aW9uKHNlbGYuc2VsZWN0ZWRJdGVtKCksIGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHNlbGYuc2VsZWN0RWxlbWVudFZpc2l2ZWwgPSBmYWxzZTtcclxuICAgIH1cclxuICAgICovXHJcbiAgICAvLyBwZXNxdWlzYXIgc2VsZWNpb25hZG9cclxuICAgIC8vIGNvbnNvbGUubG9nKHRoaXMubGlzdGFQZXNxdWlzYSk7XHJcbiAgICBsZXQgc2VsZWN0ZWQgPSB0aGlzLmxpc3RhUGVzcXVpc2EuZmluZChzID0+IHNbJ1NlbGVjdGVkJ10gPT09IHRydWUpO1xyXG5cclxuICAgIC8vIGlmICghc2VsZWN0ZWQpIHtcclxuICAgIC8vICAgY29uc29sZS5sb2codGhpcy5jYW1wb0lkLCBpdGVtKTtcclxuICAgIC8vICAgc2VsZWN0ZWQgPSB0aGlzLmxpc3RhUGVzcXVpc2EuZmlsdGVyKCBzID0+IHNbdGhpcy5jYW1wb0lkXSA9PSBpdGVtW3RoaXMuY2FtcG9JZF0pO1xyXG4gICAgLy8gfVxyXG5cclxuICAgIC8vc2UgbyBpdGVtIGZvcm0gcGFzc2FkbyBjb21vIHBhcmFtZXRybyAoY2xpY2sgbm8gaW9uLWl0ZW0pXHJcbiAgICBpZiAoaXRlbSAhPSBudWxsKSB7XHJcbiAgICAgIGlmIChzZWxlY3RlZCAhPSBudWxsKSB7XHJcbiAgICAgICAgc2VsZWN0ZWRbJ1NlbGVjdGVkJ10gPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgICBpdGVtWydTZWxlY3RlZCddID0gdHJ1ZTtcclxuICAgICAgc2VsZWN0ZWQgPSBpdGVtO1xyXG4gICAgfVxyXG4gICAgaWYgKHNlbGVjdGVkICE9IG51bGwpIHtcclxuICAgICAgc2VsZi5zZWxlY3RlZEl0ZW0gPSBzZWxlY3RlZDtcclxuICAgICAgc2VsZi50ZXh0b1Blc3F1aXNhID0gc2VsZWN0ZWRbc2VsZi5jYW1wb0Rpc3BsYXldO1xyXG4gICAgICBzZWxmLndyaXRlVmFsdWUoc2VsZWN0ZWRbc2VsZi5jYW1wb0lkXSk7XHJcbiAgICAgIHNlbGYuc2VsZWN0RWxlbWVudFZpc2l2ZWwgPSBmYWxzZTtcclxuICAgICAgLy9jb25zb2xlLmxvZygnYWN0aW9uJywgc2VsZi5jaGFuZ2UpO1xyXG4gICAgICBpZiAoc2VsZi5wZXNxdWlzYUNoYW5nZSAhPSBudWxsKSB7XHJcbiAgICAgICAgc2VsZi5wZXNxdWlzYUNoYW5nZS5lbWl0KHNlbGYuc2VsZWN0ZWRJdGVtKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgc2VsZi5zZWxlY3RFbGVtZW50VmlzaXZlbCA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgLy8gdGhpcy5saXN0YVBlc3F1aXNhLmZvckVhY2goIHBlc3F1aXNhID0+IHtcclxuICAgIC8vICAgY29uc29sZS5sb2cocGVzcXVpc2EsIHNlbGYuZGF0YSk7XHJcbiAgICAvLyB9ICk7XHJcbiAgICAvLyBjb25zb2xlLmxvZyh0aGlzLnRleHRvUGVzcXVpc2EpO1xyXG4gIH1cclxuXHJcbiAgc2VsZWNpb25hckNvbWJvQ2hhbmdlKGU6IGFueSkge1xyXG4gICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgY29uc29sZS5sb2coJ2NvbWJvIGNoYW5nZScsIGUpO1xyXG4gICAgc2VsZi5zZWxlY3RlZEl0ZW0gPSB0aGlzLmxpc3RhUGVzcXVpc2EuZmluZChpID0+IGlbdGhpcy5jYW1wb0lkXSA9PSBlKTtcclxuICAgIGlmIChzZWxmLnNlbGVjdGVkSXRlbSAhPSBudWxsKSB7XHJcbiAgICAgIHNlbGYud3JpdGVWYWx1ZShlKTtcclxuICAgICAgc2VsZi50ZXh0b1Blc3F1aXNhID0gc2VsZi5zZWxlY3RlZEl0ZW1bc2VsZi5jYW1wb0Rpc3BsYXldO1xyXG4gICAgICBpZiAoZSAhPSBudWxsKSB7XHJcbiAgICAgICAgc2VsZi5zZWxlY3RFbGVtZW50VmlzaXZlbCA9IGZhbHNlO1xyXG4gICAgICAgIGlmIChzZWxmLnBlc3F1aXNhQ2hhbmdlICE9IG51bGwpIHtcclxuICAgICAgICAgIHNlbGYucGVzcXVpc2FDaGFuZ2UuZW1pdChzZWxmLnNlbGVjdGVkSXRlbSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgc2VsZi5zZWxlY3RFbGVtZW50VmlzaXZlbCA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZHJvcERvd25QZXNxdWlzYShsZW5ndGg6IG51bWJlcikge1xyXG4gICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgaWYgKHNlbGYubGlzdGFQZXNxdWlzYSAhPSBudWxsICYmIHNlbGYubGlzdGFQZXNxdWlzYS5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGlmIChsZW5ndGggPT0gLTEpIHtcclxuICAgICAgICBsZW5ndGggPSBzZWxmLmxpc3RhUGVzcXVpc2EubGVuZ3RoO1xyXG4gICAgICB9XHJcbiAgICAgIHNlbGYuc2VsZWN0RWxlbWVudFZpc2l2ZWwgPSBsZW5ndGggPT0gMCA/IGZhbHNlIDogdHJ1ZTtcclxuXHJcbiAgICAgIC8vY29uc29sZS5sb2codGhpcy5zZWxlY3RFbGVtZW50KTtcclxuICAgICAgLy90aGlzLnNlbGVjdEVsZW1lbnQub3BlbigpO1xyXG5cclxuICAgICAgLypcclxuICAgICAgLy9sZXQgZWxlbWVudCA9IHRoaXMuc2VsZWN0RWxlbWVudDtcclxuICAgICAgbGV0IGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLnNlbGVjdElkKTtcclxuICAgICAgY29uc29sZS5sb2coJ2Ryb3BEb3duJywgZWxlbWVudCk7XHJcbiAgICAgIChlbGVtZW50IGFzIGFueSkuc2l6ZSA9IGxlbmd0aCArIDE7XHJcbiAgICAgIGlmIChsZW5ndGggPT0gMCkge1xyXG4gICAgICAgIHNlbGYuc2VsZWN0RWxlbWVudFZpc2l2ZWwgPSBmYWxzZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBzZWxmLnNlbGVjdEVsZW1lbnRWaXNpdmVsID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICAqL1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcGVzcXVpc2FyRW50aWRhZGUoZmlsdHJvOiBzdHJpbmcpIHtcclxuICAgIGxldCB1cmwgPSB0aGlzLnVybC5yZXBsYWNlKCc8PEZJTFRSTz4+JywgZmlsdHJvKS5yZXBsYWNlKCc8PEVNUFJFU0E+PicsIHRoaXMuZW1wcmVzYS50b1N0cmluZygpKTtcclxuICAgIGNvbnNvbGUubG9nKCdwZXNxdWlzYXJFbnRpZGFkZSB1cmwnLCB1cmwpO1xyXG4gICAgdGhpcy5wb2RlUGVzcXVpc2FyID0gZmFsc2U7XHJcbiAgICB0aGlzLnBlc3F1aXNhU3ViamVjdC5uZXh0KHVybCk7XHJcbiAgfVxyXG5cclxuICBwZXNxdWlzYXJFbnRpZGFkZU9sZChmaWx0cm86IHN0cmluZykge1xyXG4gICAgbGV0IHVybCA9IHRoaXMudXJsLnJlcGxhY2UoJzw8RklMVFJPPj4nLCBmaWx0cm8pLnJlcGxhY2UoJzw8RU1QUkVTQT4+JywgdGhpcy5lbXByZXNhLnRvU3RyaW5nKCkpO1xyXG4gICAgY29uc29sZS5sb2coJ3Blc3F1aXNhckVudGlkYWRlIHVybCcsIHVybCk7XHJcbiAgICB0aGlzLnBvZGVQZXNxdWlzYXIgPSBmYWxzZTtcclxuICAgIHRoaXMuaHR0cENsaWVudC5nZXQ8YW55Pih1cmwpXHJcbiAgICAgIC5zdWJzY3JpYmUoeyBuZXh0OiAocmVzdWx0OiBhbnkpID0+IHtcclxuICAgICAgICAvL3RoaXMubGlzdGFQZXNxdWlzYSA9IHJlc3VsdDtcclxuICAgICAgICBpZiAodGhpcy5maWx0ZXJGdW5jdGlvbikge1xyXG4gICAgICAgICAgcmVzdWx0ID0gcmVzdWx0LmZpbHRlcih0aGlzLmZpbHRlckZ1bmN0aW9uKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5saXN0YVBlc3F1aXNhID0gW107XHJcbiAgICAgICAgcmVzdWx0LmZvckVhY2goKGVudDogYW55LCBpbmRleDogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmxpc3RhUGVzcXVpc2EucHVzaCh7IC4uLmVudCwgSW5kZXg6IGluZGV4LCBTZWxlY3RlZDogZmFsc2UgfSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMucG9kZVBlc3F1aXNhciA9IHRydWU7XHJcbiAgICAgICAgaWYgKHRoaXMubGlzdGFQZXNxdWlzYS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICB0aGlzLmRyb3BEb3duUGVzcXVpc2EodGhpcy5saXN0YVBlc3F1aXNhLmxlbmd0aCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LCBlcnJvcjogZXJyb3IgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdlcnJvIHBlc3F1aXNhJywgZXJyb3IpO1xyXG4gICAgICAgIHRoaXMucG9kZVBlc3F1aXNhciA9IHRydWU7XHJcbiAgICAgIH19KTtcclxuICB9XHJcblxyXG4gIGV4aXN0ZU5hTGlzdGEoaWQ6IG51bWJlciwgc2V0UmVnaXN0cm86IGJvb2xlYW4gPSBmYWxzZSk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHRoaXMubGlzdGFQZXNxdWlzYSAmJiB0aGlzLmxpc3RhUGVzcXVpc2EubGVuZ3RoID4gMCkge1xyXG4gICAgICBsZXQgZXhpc3RlID0gdGhpcy5saXN0YVBlc3F1aXNhLmZpbmQobCA9PiBsW3RoaXMuY2FtcG9JZF0gPT09IGlkKTtcclxuICAgICAgaWYgKGV4aXN0ZSkge1xyXG4gICAgICAgIGlmIChzZXRSZWdpc3Rybykge1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW0gPSBleGlzdGU7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjaW9uYXJDb21ib0NsaWNrKHRoaXMuc2VsZWN0ZWRJdGVtKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBleGlzdGVOYUxpc3RhVGV4dG8odGV4dG86IHN0cmluZywgc2V0UmVnaXN0cm86IGJvb2xlYW4gPSBmYWxzZSk6IGJvb2xlYW4ge1xyXG4gICAgY29uc29sZS5sb2coXCJleGlzdGUgdGV4dG86XCIsIHRleHRvLCB0aGlzLmNhbXBvRGlzcGxheSwgdGhpcy5saXN0YVBlc3F1aXNhKTtcclxuICAgIGlmICh0aGlzLmxpc3RhUGVzcXVpc2EgJiYgdGhpcy5saXN0YVBlc3F1aXNhLmxlbmd0aCA+IDApIHtcclxuICAgICAgbGV0IGV4aXN0ZSA9IHRoaXMubGlzdGFQZXNxdWlzYS5maW5kKGwgPT4gbFt0aGlzLmNhbXBvRGlzcGxheV0udG9VcHBlckNhc2UoKSA9PT0gdGV4dG8udG9VcHBlckNhc2UoKSk7XHJcbiAgICAgIGlmIChleGlzdGUpIHtcclxuICAgICAgICBpZiAoc2V0UmVnaXN0cm8pIHtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtID0gZXhpc3RlO1xyXG4gICAgICAgICAgdGhpcy5zZWxlY2lvbmFyQ29tYm9DbGljayh0aGlzLnNlbGVjdGVkSXRlbSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdmFsaWRhckl0ZW1TZWxlY2lvbmFkbyhzZXRhclJlZ2lzdHJvOiBib29sZWFuID0gZmFsc2UpOiBib29sZWFuIHtcclxuICAgIGNvbnNvbGUubG9nKCd2YWxpZGFyIHNlbGVjaW9uYWRvJyk7XHJcbiAgICAvL3Bhc3NhciBwZWxhIGZ1bsOnw6NvIGRlIGZpbHRyb1xyXG4gICAgbGV0IHZhbGlkbyA9IGZhbHNlO1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRJdGVtKSB7XHJcbiAgICAgIGlmICh0aGlzLmZpbHRlckZ1bmN0aW9uKSB7XHJcbiAgICAgICAgbGV0IGV4aXN0ZSA9IFt7IC4uLnRoaXMuc2VsZWN0ZWRJdGVtIH1dLmZpbHRlcih0aGlzLmZpbHRlckZ1bmN0aW9uKTtcclxuICAgICAgICBpZiAoZXhpc3RlICE9IG51bGwgJiYgZXhpc3RlLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIHZhbGlkbyA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHZhbGlkbyA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHZhbGlkbyAmJiBzZXRhclJlZ2lzdHJvKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY2lvbmFyQ29tYm9DbGljayh0aGlzLnNlbGVjdGVkSXRlbSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiB2YWxpZG87XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjYXJyZWdhSXRlbUlkUGFyYUxpc3RhKGlkOiBudW1iZXIpIHtcclxuICAgIGxldCB1cmwgPSB0aGlzLnVybEl0ZW0ucmVwbGFjZSgnPDxJRD4+JywgaWQudG9TdHJpbmcoKSk7XHJcbiAgICBjb25zb2xlLmxvZyh0aGlzLnVybEl0ZW0pO1xyXG4gICAgY29uc29sZS5sb2coJ3Blc3F1aXNhciBJRCB1cmwnLCB1cmwpO1xyXG4gICAgdGhpcy5wb2RlUGVzcXVpc2FyID0gZmFsc2U7XHJcbiAgICB0aGlzLmh0dHBDbGllbnQuZ2V0PGFueT4odXJsKVxyXG4gICAgICAuc3Vic2NyaWJlKHsgbmV4dDogKHJlc3VsdDogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5saXN0YVBlc3F1aXNhID0gW107XHJcbiAgICAgICAgdGhpcy5saXN0YVBlc3F1aXNhLnB1c2goeyAuLi5yZXN1bHQsIEluZGV4OiAwLCBTZWxlY3RlZDogdHJ1ZSB9KTtcclxuICAgICAgICB0aGlzLnBvZGVQZXNxdWlzYXIgPSB0cnVlO1xyXG4gICAgICAgIGlmICh0aGlzLmxpc3RhUGVzcXVpc2EubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW0gPSB0aGlzLmxpc3RhUGVzcXVpc2FbMF07XHJcbiAgICAgICAgICB0aGlzLnNlbGVjaW9uYXJDb21ib0NsaWNrKHRoaXMuc2VsZWN0ZWRJdGVtKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sIGVycm9yOiAgZXJyb3IgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdlcnJvIHBlc3F1aXNhJywgZXJyb3IpO1xyXG4gICAgICAgIHRoaXMucG9kZVBlc3F1aXNhciA9IHRydWU7XHJcbiAgICAgIH19KTtcclxuICB9XHJcblxyXG4gIGxpbXBhckNsaWNrKCkge1xyXG4gICAgdGhpcy53cml0ZVZhbHVlKG51bGwpO1xyXG4gICAgdGhpcy53cml0ZVBlc3F1aXNhKG51bGwpO1xyXG4gICAgdGhpcy5saXN0YVBlc3F1aXNhID0gW107XHJcbiAgICB0aGlzLmRyb3BEb3duUGVzcXVpc2EoMCk7XHJcbiAgICAvL3RoaXMucG9kZVBlc3F1aXNhciA9IHRydWU7XHJcbiAgICB0aGlzLnBlc3F1aXNhU3ViamVjdC5uZXh0KCcnKTtcclxuICAgIGlmICh0aGlzLmxpbXBhcikge1xyXG4gICAgICB0aGlzLmxpbXBhcigpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdmVyaWZpY2FyUGVzcXVpc2EoKSB7XHJcbiAgICAvL1RPRE86IHZlcmlmaWNhciBzZSBvIHRleHRvIGNvcnJlc3BvbmRlIGNvbSB1bSBpdGVtIGRhIGxpc3RhXHJcbiAgICB0aGlzLnNlbGVjaW9uYXJDb21ib0NsaWNrKG51bGwpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgcGVzcXVpc2FyQ2xpY2soKSB7XHJcbiAgICAvKlxyXG4gICAgaWYgKHRoaXMucGVzcXVpc2FBY3Rpb24gIT0gbnVsbCkge1xyXG4gICAgICB0aGlzLnBlc3F1aXNhQWN0aW9uKCk7XHJcbiAgICB9XHJcbiAgICAqL1xyXG4gICAgLy9wZXNxdWlzYUNhdGVnb3JpYVxyXG4gICAgY29uc29sZS5sb2codGhpcy5maWx0ZXJGdW5jdGlvbiwgdGhpcy51cmwsIHRoaXMudXJsVHJlZSk7XHJcblxyXG4gICAgY29uc3QgbW9kYWwgPSBhd2FpdCB0aGlzLm1vZGFsQ3RybC5jcmVhdGUoe1xyXG4gICAgICBjb21wb25lbnQ6IE1vZGVsVHJlZXZpZXdDb21wb25lbnQsXHJcbiAgICAgIGNvbXBvbmVudFByb3BzOiB7XHJcbiAgICAgICAgLy9jYW1wb0lkOiB0aGlzLmNhbXBvSWQsXHJcbiAgICAgICAgLy9jYW1wb1BhaTogdGhpcy5jYW1wb1BhaUlkLFxyXG4gICAgICAgIC8vY2FtcG9MYWJlbDogdGhpcy5jYW1wb0Rpc3BsYXksXHJcbiAgICAgICAgdGV4dG9QZXNxdWlzYTogdGhpcy50ZXh0b1Blc3F1aXNhLFxyXG4gICAgICAgIGZpbHRlckZ1bmN0aW9uOiB0aGlzLmZpbHRlckZ1bmN0aW9uLFxyXG4gICAgICAgIGVtcHJlc2FTZWxlY2lvbmFkYUlkOiB0aGlzLmVtcHJlc2EsXHJcbiAgICAgICAgdGlwbzogdGhpcy50aXBvLFxyXG4gICAgICAgIC8vZXNwZWNpZmljb1xyXG4gICAgICAgIC8vcGxhbm9Db250YXM6IHRoaXMucGxhbm9Db250YXMsXHJcbiAgICAgICAgdXJsOiB0aGlzLmlzRW1wdHkodGhpcy51cmxUcmVlKSA/IHRoaXMudXJsIDogdGhpcy51cmxUcmVlLFxyXG4gICAgICAgIHRpdHVsbzogdGhpcy50cmVlVGl0dWxvLFxyXG4gICAgICAgIGNhbXBvTGFiZWw6IHRoaXMuY2FtcG9EaXNwbGF5LFxyXG4gICAgICAgIGNhbXBvSWQ6IHRoaXMuY2FtcG9JZCxcclxuICAgICAgICBjYW1wb1BhaTogdGhpcy5jYW1wb1BhaUlkXHJcbiAgICAgIH0sXHJcbiAgICAgIGNzc0NsYXNzOiAnbXktY3VzdG9tLW1vZGFsLXBlc3F1aXNhJ1xyXG4gICAgfSk7XHJcblxyXG4gICAgbW9kYWwub25EaWREaXNtaXNzKCkudGhlbihkYXRhID0+IHtcclxuICAgICAgbGV0IHJlc3VsdCA9IGRhdGFbJ2RhdGEnXTtcclxuICAgICAgY29uc29sZS5sb2cocmVzdWx0KTtcclxuICAgICAgaWYgKHJlc3VsdCAhPSBudWxsICYmIHJlc3VsdC5JZCA+IDApIHtcclxuICAgICAgICB0aGlzLmNhcnJlZ2FJdGVtSWRQYXJhTGlzdGEocmVzdWx0LklkKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBtb2RhbC5wcmVzZW50KCk7XHJcblxyXG4gIH1cclxuXHJcbiAgaXNFbXB0eSh2YWxvcjogc3RyaW5nIHwgYW55KSB7XHJcbiAgICByZXR1cm4gdmFsb3IgPT0gbnVsbCB8fCB2YWxvciA9PSB1bmRlZmluZWQgfHwgdmFsb3IgPT0gJydcclxuICB9XHJcbn1cclxuIiwiPGRpdiBzdHlsZT1cInBhZGRpbmctaW5saW5lLWVuZDogMHB4O1wiPlxyXG4gICAgPGlvbi1pdGVtIGxpbmVzPVwibm9uZVwiIHN0eWxlPVwiLS1iYWNrZ3JvdW5kOiBpbmhlcml0ZWQ7IC0tYmFja2dyb3VuZC1mb2N1c2VkOiB0cmFuc3BhcmVudDsgbWFyZ2luLXRvcDogMnB4O1wiIFtjbGFzc109XCJpdGVtQ2xhc3NcIj5cclxuICAgICAgPGlvbi1sYWJlbCBwb3NpdGlvbj1cInt7IGxhYmVsUG9zaXRpb24gfX1cIj57eyBsYWJlbCB9fTwvaW9uLWxhYmVsPlxyXG4gICAgICA8IS0tIGZvcm1Db250cm9sTmFtZT1cInt7IGNhbXBvIH19XCIgIC0tPlxyXG4gICAgICA8aW9uLXNwaW5uZXIgKm5nSWY9XCIhcG9kZVBlc3F1aXNhclwiXHJcbiAgICAgICAgc3R5bGU9XCItLW1pbi1oZWlnaHQ6IDBweCAhaW1wb3J0YW50OyBtYXJnaW4taW5saW5lLWVuZDogNXB4ICFpbXBvcnRhbnQ7IG1hcmdpbi10b3A6IDE2cHg7XCIgXHJcbiAgICAgICAgc2xvdD1cInN0YXJ0XCIgbmFtZT1cImxpbmVzXCI+PC9pb24tc3Bpbm5lcj5cclxuICAgICAgPCEtLSAoaW9uQmx1cik9XCJ2ZXJpZmljYXJQZXNxdWlzYSgpXCIgLS0+XHJcbiAgICAgIDwhLS0gY29uZmxpdG8gY29tIGNsaWNrIGRhIGxpc3RhIC0tPlxyXG4gICAgICA8aW9uLWlucHV0ICNpbnB1dFBlc3F1aXNhXHJcbiAgICAgICAgW2xlZ2FjeV09XCJ0cnVlXCJcclxuICAgICAgICB0eXBlPVwie3t0eXBlfX1cIiBcclxuICAgICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIiBcclxuICAgICAgICBtYXhsZW5ndGg9XCJ7eyBtYXggfX1cIiBcclxuICAgICAgICAoaW9uQmx1cik9XCJvbkJsdXIoJGV2ZW50KVwiXHJcbiAgICAgICAgW3ZhbHVlXT1cInRleHRvUGVzcXVpc2FcIiAoaW5wdXQpPVwid3JpdGVQZXNxdWlzYShpbnB1dFBlc3F1aXNhLnZhbHVlKVwiIFxyXG4gICAgICAgIChrZXl1cCk9XCJzaG93UGVzcXVpc2EoJGV2ZW50KVwiXHJcbiAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCIgW3N0eWxlLi0tYmFja2dyb3VuZF09XCJpbnB1dEJhY2tncm91bmdDb2xvclwiXHJcbiAgICAgICAgKGNsaWNrKT1cImRyb3BEb3duUGVzcXVpc2EoLTEpXCJcclxuICAgICAgICBbZGlzYWJsZWRdPVwicmVhZG9ubHlcIiBkZWJvdW5jZT1cIjUwMFwiPjwvaW9uLWlucHV0PlxyXG4gICAgICA8aW9uLWJ1dHRvbiBzaXplPVwic21hbGxcIiBzbG90PVwiZW5kXCIgdGFiaW5kZXg9XCItMVwiXHJcbiAgICAgICAgY2xhc3M9XCJib3Rhby1saW1wYXJcIiBmaWxsPVwiY2xlYXJcIiBjb2xvcj1cIm1lZGl1bVwiXHJcbiAgICAgICAgKGNsaWNrKT1cImxpbXBhckNsaWNrKClcIj5cclxuICAgICAgICA8aW9uLWljb24gbmFtZT1cImNsb3NlLW91dGxpbmVcIj48L2lvbi1pY29uPlxyXG4gICAgICA8L2lvbi1idXR0b24+XHJcbiAgXHJcbiAgICAgIFxyXG4gICAgICA8aW9uLWJ1dHRvbiBzaXplPVwic21hbGxcIiBzbG90PVwiZW5kXCIgdGFiaW5kZXg9XCItMVwiXHJcbiAgICAgICAgY2xhc3M9XCJib3Rhby1saW1wYXJcIiBmaWxsPVwiY2xlYXJcIiBjb2xvcj1cIm1lZGl1bVwiXHJcbiAgICAgICAgKGNsaWNrKT1cInBlc3F1aXNhckNsaWNrKClcIj5cclxuICAgICAgICA8aW9uLWljb24gY29sb3I9XCJwcmltYXJ5XCIgbmFtZT1cInNlYXJjaFwiPjwvaW9uLWljb24+XHJcbiAgICAgIDwvaW9uLWJ1dHRvbj5cclxuICAgICAgXHJcbiAgICAgIFxyXG4gICAgPC9pb24taXRlbT5cclxuICBcclxuICAgIDxpb24tbGlzdCB0YWJpbmRleD1cIi0xXCIgW2hpZGRlbl09XCIhc2VsZWN0RWxlbWVudFZpc2l2ZWwgfHwgIWxpc3RhUGVzcXVpc2EgfHwgbGlzdGFQZXNxdWlzYS5sZW5ndGggPT0gMFwiIGNsYXNzPVwicGVzcXVpc2EtbGlzdFwiIHN0eWxlPVwibWF4LWhlaWdodDogMjUwcHg7IG92ZXJmbG93LXk6IGF1dG87XCI+XHJcbiAgICAgIFxyXG4gICAgICA8aW9uLWl0ZW0gdGFiaW5kZXg9XCItMVwiIGJ1dHRvbiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBsaXN0YVBlc3F1aXNhXCIgXHJcbiAgICAgIChjbGljayk9XCJzZWxlY2lvbmFyQ29tYm9DbGljayhpdGVtKVwiIFtpZF09XCJzZWxlY3RJZCArICdJb25JdGVtJyArIGl0ZW1bJ0luZGV4J11cIlxyXG4gICAgICAgIGNsYXNzPVwicGVzcXVpc2EtaXRlbVwiPlxyXG4gICAgICAgIDwhLS0ge3sgaXRlbSB8IGpzb259fSAtLT5cclxuICAgICAgICA8c3BhbiBbY2xhc3NdPVwieydzZWxlY3RlZC1pdGVtJzogaXRlbVsnU2VsZWN0ZWQnXSA9PT0gdHJ1ZX1cIiBbaW5uZXJIVE1MXT1cImhpZ2hsaWdodChpdGVtW2NhbXBvRGlzcGxheV0pXCI+PC9zcGFuPlxyXG4gICAgICA8L2lvbi1pdGVtPlxyXG4gIFxyXG4gICAgPC9pb24tbGlzdD5cclxuICBcclxuICAgIDwhLS1cclxuICAgIDxpb24tc2VsZWN0IGludGVyZmFjZT1cInBvcG92ZXJcIiAjc2VsZWN0RWxlbWVudCB0YWJpbmRleD1cIi0xXCIgW2hpZGRlbl09XCIhc2VsZWN0RWxlbWVudFZpc2l2ZWxcIlxyXG4gICAgICAoaW9uQ2hhbmdlKT1cInNlbGVjaW9uYXJDb21ib0NoYW5nZSgkZXZlbnQudGFyZ2V0LnZhbHVlKVwiPlxyXG4gICAgICA8aW9uLXNlbGVjdC1vcHRpb24gKm5nRm9yPVwibGV0IGl0ZW0gb2YgbGlzdGFQZXNxdWlzYVwiIFt2YWx1ZV09XCJpdGVtW2NhbXBvSWRdXCIgKGNsaWNrKT1cInNlbGVjaW9uYXJDb21ib0NsaWNrKGl0ZW1bY2FtcG9JZF0pXCI+XHJcbiAgICAgICAge3sgaXRlbVtjYW1wb0Rpc3BsYXldIH19XHJcbiAgICAgIDwvaW9uLXNlbGVjdC1vcHRpb24+XHJcbiAgICA8L2lvbi1zZWxlY3Q+XHJcbiAgICAtLT5cclxuICBcclxuICAgIDwhLS1cclxuICAgIDxzZWxlY3QgW2lkXT1cInNlbGVjdElkXCIgI3NlbGVjdEVsZW1lbnQgdGFiaW5kZXg9XCItMVwiIFtoaWRkZW5dPVwiIXNlbGVjdEVsZW1lbnRWaXNpdmVsXCJcclxuICAgICAgKGNoYW5nZSk9XCJzZWxlY2lvbmFyQ29tYm9DaGFuZ2UoJGV2ZW50LnRhcmdldC52YWx1ZSlcIiBjbGFzcz1cInBlc3F1aXNhLXNlbGVjdFwiPlxyXG4gICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBpdGVtIG9mIGxpc3RhUGVzcXVpc2FcIiBbdmFsdWVdPVwiaXRlbVtjYW1wb0lkXVwiIChjbGljayk9XCJzZWxlY2lvbmFyQ29tYm9DbGljayhpdGVtW2NhbXBvSWRdKVwiPlxyXG4gICAgICAgIHt7IGl0ZW1bY2FtcG9EaXNwbGF5XSB9fVxyXG4gICAgICA8L29wdGlvbj5cclxuICBcclxuICAgIDwvc2VsZWN0PlxyXG4gICAgLS0+XHJcbiAgXHJcbiAgICA8ZGl2IGNsYXNzPVwidmFsaWRhdGlvbi1lcnJvcnNcIiAqbmdJZj1cImZvcm1cIj5cclxuICBcclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgdmFsaWRhdGlvbiBvZiB2YWxpZGF0aW9uX21lc3NhZ2VzXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImVycm9yLW1lc3NhZ2VcIlxyXG4gICAgICAgICAgKm5nSWY9XCJmb3JtLmdldChmb3JtQ29udHJvbE5hbWUpPy5oYXNFcnJvcih2YWxpZGF0aW9uLnR5cGUpICYmIChmb3JtLmdldChmb3JtQ29udHJvbE5hbWUpPy5kaXJ0eSB8fCBmb3JtLmdldChmb3JtQ29udHJvbE5hbWUpPy50b3VjaGVkKVwiPlxyXG4gICAgICAgICAgJiM4MjI2OyB7eyB2YWxpZGF0aW9uLm1lc3NhZ2UgfX1cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgXHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj4iXX0=
|