keevo-components 2.0.173 → 2.0.174
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/components/kv-tree-environment/components/kv-tree-environment/kv-tree-environment.component.mjs +39 -33
- package/fesm2022/keevo-components.mjs +38 -32
- package/fesm2022/keevo-components.mjs.map +1 -1
- package/lib/components/kv-table/kv-table.component.d.ts +1 -1
- package/lib/components/kv-table-draggable/kv-table-draggable.component.d.ts +1 -1
- package/lib/components/kv-table-expandable/kv-table-expandable.component.d.ts +1 -1
- package/lib/components/kv-table-viewer/kv-table-viewer.component.d.ts +1 -1
- package/lib/components/kv-tree-environment/components/kv-tree-environment/kv-tree-environment.component.d.ts +2 -0
- package/package.json +1 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { CommonModule } from '@angular/common';
|
|
2
|
-
import { Component, input, signal, Output, EventEmitter, effect } from '@angular/core';
|
|
2
|
+
import { Component, input, signal, Output, EventEmitter, effect, ChangeDetectorRef, inject } from '@angular/core';
|
|
3
3
|
import { NoArvoreComponent } from '../no-arvore/no-arvore.component';
|
|
4
4
|
import { ScrollingModule } from '@angular/cdk/scrolling';
|
|
5
5
|
import { PrimeNgModule } from '../../../../api/modules/primeng.module';
|
|
@@ -17,6 +17,7 @@ export class KvTreeEnvironmentComponent {
|
|
|
17
17
|
this.showAddButton = input(true);
|
|
18
18
|
this.onAddClick = new EventEmitter();
|
|
19
19
|
this.onSelectedItem = new EventEmitter();
|
|
20
|
+
this.cdr = inject(ChangeDetectorRef);
|
|
20
21
|
this.mapaDeExpansao = new Map();
|
|
21
22
|
this._cachedDados = null;
|
|
22
23
|
this._dadosHash = null;
|
|
@@ -55,10 +56,25 @@ export class KvTreeEnvironmentComponent {
|
|
|
55
56
|
return;
|
|
56
57
|
const estadoAtual = this.mapaDeExpansao.get(noPlano.dadosOriginais.rotulo) ?? false;
|
|
57
58
|
this.mapaDeExpansao.set(noPlano.dadosOriginais.rotulo, !estadoAtual);
|
|
59
|
+
this.forcarAtualizacaoLista();
|
|
60
|
+
}
|
|
61
|
+
forcarAtualizacaoLista() {
|
|
58
62
|
this._cachedListaPlana = null;
|
|
59
63
|
this._listaPlanaHash = null;
|
|
60
|
-
this.
|
|
61
|
-
this.
|
|
64
|
+
const dados = this.obterDadosOtimizado();
|
|
65
|
+
const novaListaPlana = this.transformarParaListaPlanaOtimizada(dados);
|
|
66
|
+
this.listaPlana.set(novaListaPlana);
|
|
67
|
+
this.cdr.detectChanges();
|
|
68
|
+
setTimeout(() => {
|
|
69
|
+
const expansaoHash = Array.from(this.mapaDeExpansao.entries())
|
|
70
|
+
.sort(([a], [b]) => a.localeCompare(b))
|
|
71
|
+
.map(([k, v]) => `${k}:${v}`)
|
|
72
|
+
.join(',');
|
|
73
|
+
this._listaPlanaHash = `${this._dadosHash}:${expansaoHash}`;
|
|
74
|
+
this._cachedListaPlana = novaListaPlana;
|
|
75
|
+
this.cdr.detectChanges();
|
|
76
|
+
this.atualizarEstadoCollapseButton();
|
|
77
|
+
}, 0);
|
|
62
78
|
}
|
|
63
79
|
criarHashDados(estrutura, dados, simples, arvore) {
|
|
64
80
|
const estruturaHash = `e:${estrutura.length}:${estrutura.map(e => `${e.id}:${e.label}`).join(',')}`;
|
|
@@ -157,31 +173,24 @@ export class KvTreeEnvironmentComponent {
|
|
|
157
173
|
}
|
|
158
174
|
transformarParaListaPlanaOtimizada(nodes, nivel = 0) {
|
|
159
175
|
const lista = [];
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
const
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
lista.push(
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
nodes: node.filhos,
|
|
179
|
-
nivel: currentNivel + 1,
|
|
180
|
-
parentIndex: lista.length - 1
|
|
181
|
-
});
|
|
182
|
-
}
|
|
183
|
-
});
|
|
184
|
-
}
|
|
176
|
+
nodes.forEach((node, index) => {
|
|
177
|
+
const rotulo = node.rotulo;
|
|
178
|
+
const estaExpandido = this.mapaDeExpansao.get(rotulo) ?? (node.estaExpandido ?? false);
|
|
179
|
+
const temFilhos = !!(node.filhos && node.filhos.length > 0);
|
|
180
|
+
const noPlano = {
|
|
181
|
+
id: rotulo,
|
|
182
|
+
nivel: nivel,
|
|
183
|
+
expansivel: temFilhos,
|
|
184
|
+
estaExpandido: estaExpandido,
|
|
185
|
+
isLast: index === nodes.length - 1,
|
|
186
|
+
dadosOriginais: node
|
|
187
|
+
};
|
|
188
|
+
lista.push(noPlano);
|
|
189
|
+
if (estaExpandido && temFilhos) {
|
|
190
|
+
const filhosPlanos = this.transformarParaListaPlanaOtimizada(node.filhos, nivel + 1);
|
|
191
|
+
lista.push(...filhosPlanos);
|
|
192
|
+
}
|
|
193
|
+
});
|
|
185
194
|
return lista;
|
|
186
195
|
}
|
|
187
196
|
trackByNode(index, noPlano) {
|
|
@@ -195,10 +204,7 @@ export class KvTreeEnvironmentComponent {
|
|
|
195
204
|
else {
|
|
196
205
|
this.colapsarTodosOtimizado();
|
|
197
206
|
}
|
|
198
|
-
this.
|
|
199
|
-
this._listaPlanaHash = null;
|
|
200
|
-
this.gerarListaPlanaOtimizada();
|
|
201
|
-
this.atualizarEstadoCollapseButton();
|
|
207
|
+
this.forcarAtualizacaoLista();
|
|
202
208
|
}
|
|
203
209
|
expandirTodos() {
|
|
204
210
|
this.expandirTodosOtimizado();
|
|
@@ -317,4 +323,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImpor
|
|
|
317
323
|
}], onSelectedItem: [{
|
|
318
324
|
type: Output
|
|
319
325
|
}] } });
|
|
320
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia3YtdHJlZS1lbnZpcm9ubWVudC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9rZWV2by1jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9rdi10cmVlLWVudmlyb25tZW50L2NvbXBvbmVudHMva3YtdHJlZS1lbnZpcm9ubWVudC9rdi10cmVlLWVudmlyb25tZW50LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tlZXZvLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2t2LXRyZWUtZW52aXJvbm1lbnQvY29tcG9uZW50cy9rdi10cmVlLWVudmlyb25tZW50L2t2LXRyZWUtZW52aXJvbm1lbnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUNsRyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUVyRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDekQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdDQUF3QyxDQUFDOzs7O0FBY3ZFLE1BQU0sT0FBTywwQkFBMEI7SUEyQnJDO1FBekJBLGtCQUFhLEdBQUcsS0FBSyxDQUFhLEVBQUUsQ0FBQyxDQUFDO1FBQ3RDLGVBQVUsR0FBRyxLQUFLLENBQW9CLEVBQUUsQ0FBQyxDQUFDO1FBQzFDLG9CQUFlLEdBQUcsS0FBSyxDQUVyQixFQUFFLENBQUMsQ0FBQztRQUNOLGdCQUFXLEdBQUcsS0FBSyxDQUFnQixFQUFFLENBQUMsQ0FBQztRQUN2QyxpQkFBWSxHQUFH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WnRDLFNBQVM7aUNBQ0ksSUFBSSxZQUNOLHFCQUFxQixXQUd0Qjt3QkFDUCxZQUFZO3dCQUNaLGlCQUFpQjt3QkFDakIsZUFBZTt3QkFDZixhQUFhO3FCQUNkO3dEQWNTLFVBQVU7c0JBQW5CLE1BQU07Z0JBQ0csY0FBYztzQkFBdkIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb21wb25lbnQsIGlucHV0LCBzaWduYWwsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBlZmZlY3QsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTm9BcnZvcmVDb21wb25lbnQgfSBmcm9tICcuLi9uby1hcnZvcmUvbm8tYXJ2b3JlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBOb0Fydm9yZSwgTm9BcnZvcmVTaW1wbGVzLCBDb25maWdBcnZvcmVTaW1wbGVzLCBFc3RydXR1cmFBcnZvcmUsIERhZG9zQXJ2b3JlLCBOb1BsYW5vIH0gZnJvbSAnLi4vLi4vbW9kZWxzL25vLWFydm9yZS5tb2RlbCc7XG5pbXBvcnQgeyBTY3JvbGxpbmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jZGsvc2Nyb2xsaW5nJztcbmltcG9ydCB7IFByaW1lTmdNb2R1bGUgfSBmcm9tICcuLi8uLi8uLi8uLi9hcGkvbW9kdWxlcy9wcmltZW5nLm1vZHVsZSc7XG5cbkBDb21wb25lbnQoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICBzZWxlY3RvcjogJ2t2LXRyZWUtZW52aXJvbm1lbnQnLFxuICB0ZW1wbGF0ZVVybDogJy4va3YtdHJlZS1lbnZpcm9ubWVudC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2t2LXRyZWUtZW52aXJvbm1lbnQuY29tcG9uZW50LnNjc3MnXSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSwgXG4gICAgTm9BcnZvcmVDb21wb25lbnQsXG4gICAgU2Nyb2xsaW5nTW9kdWxlLFxuICAgIFByaW1lTmdNb2R1bGVcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgS3ZUcmVlRW52aXJvbm1lbnRDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuXG4gIGFydm9yZURlRGFkb3MgPSBpbnB1dDxOb0Fydm9yZVtdPihbXSk7XG4gIG5vc1NpbXBsZXMgPSBpbnB1dDxOb0Fydm9yZVNpbXBsZXNbXT4oW10pO1xuICBlc3RydXR1cmFBcnZvcmUgPSBpbnB1dDxcbiAgICBFc3RydXR1cmFBcnZvcmVbXVxuICA+KFtdKTtcbiAgZGFkb3NBcnZvcmUgPSBpbnB1dDxEYWRvc0Fydm9yZVtdPihbXSk7XG4gIGNvbmZpZ3VyYWNhbyA9IGlucHV0PENvbmZpZ0Fydm9yZVNpbXBsZXM+KHt9KTtcbiAgc2hvd0J1dHRvbkNvbGxhcHNlZCA9IGlucHV0PGJvb2xlYW4+KHRydWUpO1xuICBzaG93QWRkQnV0dG9uID0gaW5wdXQ8Ym9vbGVhbj4odHJ1ZSk7XG5cbiAgQE91dHB1dCgpIG9uQWRkQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSBvblNlbGVjdGVkSXRlbSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIHByaXZhdGUgbWFwYURlRXhwYW5zYW8gPSBuZXcgTWFwPHN0cmluZywgYm9vbGVhbj4oKTtcbiAgXG4gIHByaXZhdGUgX2NhY2hlZERhZG9zOiBOb0Fydm9yZVtdIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgX2RhZG9zSGFzaDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgX2NhY2hlZExpc3RhUGxhbmE6IE5vUGxhbm9bXSB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIF9saXN0YVBsYW5hSGFzaDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgbGlzdGFQbGFuYSA9IHNpZ25hbDxOb1BsYW5vW10+KFtdKTtcbiAgaWNvbkNvbGxhcHNlZCA9IHNpZ25hbDxzdHJpbmc+KCdjb2xsYXBzZV9hbGwnKTtcbiAgY29sbGFwc2VkQWxsID0gc2lnbmFsPGJvb2xlYW4+KHRydWUpO1xuICBzZWxlY3RlZEl0ZW0gPSBzaWduYWw8YW55PihudWxsKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgY29uc3QgZXN0cnV0dXJhID0gdGhpcy5lc3RydXR1cmFBcnZvcmUoKTtcbiAgICAgIGNvbnN0IGRhZG9zID0gdGhpcy5kYWRvc0Fydm9yZSgpO1xuICAgICAgY29uc3Qgc2ltcGxlcyA9IHRoaXMubm9zU2ltcGxlcygpO1xuICAgICAgY29uc3QgYXJ2b3JlID0gdGhpcy5hcnZvcmVEZURhZG9zKCk7XG4gICAgICBcbiAgICAgIGNvbnN0IGRhZG9zSGFzaCA9IHRoaXMuY3JpYXJIYXNoRGFkb3MoZXN0cnV0dXJhLCBkYWRvcywgc2ltcGxlcywgYXJ2b3JlKTtcbiAgICAgIFxuICAgICAgaWYgKHRoaXMuX2RhZG9zSGFzaCAhPT0gZGFkb3NIYXNoKSB7XG4gICAgICAgIHRoaXMuX2RhZG9zSGFzaCA9IGRhZG9zSGFzaDtcbiAgICAgICAgdGhpcy5pbnZhbGlkYXJDYWNoZSgpO1xuICAgICAgICBcbiAgICAgICAgY29uc3QgdGVtRGFkb3MgPSBlc3RydXR1cmEubGVuZ3RoID4gMCB8fCBkYWRvcy5sZW5ndGggPiAwIHx8IHNpbXBsZXMubGVuZ3RoID4gMCB8fCBhcnZvcmUubGVuZ3RoID4gMDtcbiAgICAgICAgXG4gICAgICAgIGlmICh0ZW1EYWRvcykge1xuICAgICAgICAgIHRoaXMuZ2VyYXJMaXN0YVBsYW5hT3RpbWl6YWRhKCk7XG4gICAgICAgICAgdGhpcy5hdHVhbGl6YXJFc3RhZG9Db2xsYXBzZUJ1dHRvbigpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMubGlzdGFQbGFuYS5zZXQoW10pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwgeyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9KTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuZ2VyYXJMaXN0YVBsYW5hKCk7XG4gICAgdGhpcy5hdHVhbGl6YXJFc3RhZG9Db2xsYXBzZUJ1dHRvbigpO1xuICB9XG5cbiAgYWx0ZXJuYXJObyhub1BsYW5vOiBOb1BsYW5vKTogdm9pZCB7XG4gICAgaWYgKCFub1BsYW5vLmV4cGFuc2l2ZWwpIHJldHVybjtcblxuICAgIGNvbnN0IGVzdGFkb0F0dWFsID0gdGhpcy5tYXBhRGVFeHBhbnNhby5nZXQobm9QbGFuby5kYWRvc09yaWdpbmFpcy5yb3R1bG8pID8/IGZhbHNlO1xuICAgIHRoaXMubWFwYURlRXhwYW5zYW8uc2V0KG5vUGxhbm8uZGFkb3NPcmlnaW5haXMucm90dWxvLCAhZXN0YWRvQXR1YWwpO1xuXG4gICAgdGhpcy5fY2FjaGVkTGlzdGFQbGFuYSA9IG51bGw7XG4gICAgdGhpcy5fbGlzdGFQbGFuYUhhc2ggPSBudWxsO1xuICAgIFxuICAgIHRoaXMuZ2VyYXJMaXN0YVBsYW5hT3RpbWl6YWRhKCk7XG4gICAgdGhpcy5hdHVhbGl6YXJFc3RhZG9Db2xsYXBzZUJ1dHRvbigpO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmlhckhhc2hEYWRvcyhlc3RydXR1cmE6IEVzdHJ1dHVyYUFydm9yZVtdLCBkYWRvczogRGFkb3NBcnZvcmVbXSwgc2ltcGxlczogTm9BcnZvcmVTaW1wbGVzW10sIGFydm9yZTogTm9BcnZvcmVbXSk6IHN0cmluZyB7XG4gICAgY29uc3QgZXN0cnV0dXJhSGFzaCA9IGBlOiR7ZXN0cnV0dXJhLmxlbmd0aH06JHtlc3RydXR1cmEubWFwKGUgPT4gYCR7ZS5pZH06JHtlLmxhYmVsfWApLmpvaW4oJywnKX1gO1xuICAgIGNvbnN0IGRhZG9zSGFzaCA9IGBkOiR7ZGFkb3MubGVuZ3RofToke2RhZG9zLm1hcChkID0+IGAke2QuaWR9YCkuam9pbignLCcpfWA7XG4gICAgY29uc3Qgc2ltcGxlc0hhc2ggPSBgczoke3NpbXBsZXMubGVuZ3RofToke3NpbXBsZXMubWFwKHMgPT4gcy5rZXkpLmpvaW4oJywnKX1gO1xuICAgIGNvbnN0IGFydm9yZUhhc2ggPSBgYToke2Fydm9yZS5sZW5ndGh9OiR7YXJ2b3JlLm1hcChhID0+IGEucm90dWxvKS5qb2luKCcsJyl9YDtcbiAgICBcbiAgICByZXR1cm4gYCR7ZXN0cnV0dXJhSGFzaH18JHtkYWRvc0hhc2h9fCR7c2ltcGxlc0hhc2h9fCR7YXJ2b3JlSGFzaH1gO1xuICB9XG5cbiAgcHJpdmF0ZSBpbnZhbGlkYXJDYWNoZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9jYWNoZWREYWRvcyA9IG51bGw7XG4gICAgdGhpcy5fY2FjaGVkTGlzdGFQbGFuYSA9IG51bGw7XG4gICAgdGhpcy5fbGlzdGFQbGFuYUhhc2ggPSBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXJhckxpc3RhUGxhbmFPdGltaXphZGEoKTogdm9pZCB7XG4gICAgY29uc3QgZGFkb3MgPSB0aGlzLm9idGVyRGFkb3NPdGltaXphZG8oKTtcbiAgICBcbiAgICBjb25zdCBleHBhbnNhb0hhc2ggPSBBcnJheS5mcm9tKHRoaXMubWFwYURlRXhwYW5zYW8uZW50cmllcygpKVxuICAgICAgLnNvcnQoKFthXSwgW2JdKSA9PiBhLmxvY2FsZUNvbXBhcmUoYikpXG4gICAgICAubWFwKChbaywgdl0pID0+IGAke2t9OiR7dn1gKVxuICAgICAgLmpvaW4oJywnKTtcbiAgICBcbiAgICBjb25zdCBsaXN0YVBsYW5hSGFzaCA9IGAke3RoaXMuX2RhZG9zSGFzaH06JHtleHBhbnNhb0hhc2h9YDtcbiAgICBcbiAgICBpZiAodGhpcy5fbGlzdGFQbGFuYUhhc2ggPT09IGxpc3RhUGxhbmFIYXNoICYmIHRoaXMuX2NhY2hlZExpc3RhUGxhbmEpIHtcbiAgICAgIHRoaXMubGlzdGFQbGFuYS5zZXQodGhpcy5fY2FjaGVkTGlzdGFQbGFuYSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIFxuICAgIGNvbnN0IG5vdmFMaXN0YVBsYW5hID0gdGhpcy50cmFuc2Zvcm1hclBhcmFMaXN0YVBsYW5hT3RpbWl6YWRhKGRhZG9zKTtcbiAgICBcbiAgICB0aGlzLl9jYWNoZWRMaXN0YVBsYW5hID0gbm92YUxpc3RhUGxhbmE7XG4gICAgdGhpcy5fbGlzdGFQbGFuYUhhc2ggPSBsaXN0YVBsYW5hSGFzaDtcbiAgICBcbiAgICB0aGlzLmxpc3RhUGxhbmEuc2V0KG5vdmFMaXN0YVBsYW5hKTtcbiAgfVxuXG4gIG9uQWN0aW9uRXhlY3V0ZWQobm9QbGFubzogTm9QbGFubyk6IHZvaWQge1xuICAgIGNvbnN0IGRhZG9zID0gbm9QbGFuby5kYWRvc09yaWdpbmFpcztcbiAgICB0aGlzLnNlbGVjdGVkSXRlbS5zZXQoZGFkb3MpO1xuICAgIHRoaXMub25TZWxlY3RlZEl0ZW0uZW1pdChkYWRvcyk7XG4gIH1cblxuICBwcml2YXRlIGdlcmFyTGlzdGFQbGFuYSgpOiB2b2lkIHtcbiAgICB0aGlzLmdlcmFyTGlzdGFQbGFuYU90aW1pemFkYSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBvYnRlckRhZG9zT3RpbWl6YWRvKCk6IE5vQXJ2b3JlW10ge1xuICAgIGlmICh0aGlzLl9jYWNoZWREYWRvcyAmJiB0aGlzLl9kYWRvc0hhc2gpIHtcbiAgICAgIHJldHVybiB0aGlzLl9jYWNoZWREYWRvcztcbiAgICB9XG5cbiAgICBjb25zdCBlc3RydXR1cmEgPSB0aGlzLmVzdHJ1dHVyYUFydm9yZSgpO1xuICAgIGNvbnN0IGRhZG9zID0gdGhpcy5kYWRvc0Fydm9yZSgpO1xuICAgIFxuICAgIGxldCByZXN1bHRhZG86IE5vQXJ2b3JlW107XG4gICAgXG4gICAgaWYgKGVzdHJ1dHVyYSAmJiBlc3RydXR1cmEubGVuZ3RoID4gMCkge1xuICAgICAgcmVzdWx0YWRvID0gdGhpcy5jb21iaW5hckVzdHJ1dHVyYUNvbURhZG9zKGVzdHJ1dHVyYSwgZGFkb3MgfHwgW10pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBub3NTaW1wbGVzID0gdGhpcy5ub3NTaW1wbGVzKCk7XG4gICAgICBpZiAobm9zU2ltcGxlcyAmJiBub3NTaW1wbGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmVzdWx0YWRvID0gdGhpcy5jb252ZXJ0ZXJTaW1wbGVzUGFyYUNvbXBsZXRvKG5vc1NpbXBsZXMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0YWRvID0gdGhpcy5hcnZvcmVEZURhZG9zKCk7XG4gICAgICB9XG4gICAgfVxuICAgIFxuICAgIHRoaXMuX2NhY2hlZERhZG9zID0gcmVzdWx0YWRvO1xuICAgIHJldHVybiByZXN1bHRhZG87XG4gIH1cblxuICBwcml2YXRlIG9idGVyRGFkb3MoKTogTm9BcnZvcmVbXSB7XG4gICAgcmV0dXJuIHRoaXMub2J0ZXJEYWRvc090aW1pemFkbygpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb252ZXJ0ZXJTaW1wbGVzUGFyYUNvbXBsZXRvKG5vc1NpbXBsZXM6IE5vQXJ2b3JlU2ltcGxlc1tdKTogTm9BcnZvcmVbXSB7XG4gICAgY29uc3QgbWFwYSA9IG5ldyBNYXA8c3RyaW5nLCBOb0Fydm9yZT4oKTtcbiAgICBjb25zdCByYWl6OiBOb0Fydm9yZVtdID0gW107XG5cbiAgICBub3NTaW1wbGVzLmZvckVhY2goc2ltcGxlcyA9PiB7XG4gICAgICBjb25zdCBubzogTm9BcnZvcmUgPSB7XG4gICAgICAgIHJvdHVsbzogc2ltcGxlcy5yb3R1bG8sXG4gICAgICAgIGljb25lOiBzaW1wbGVzLmljb25lLFxuICAgICAgICBjb3I6IHNpbXBsZXMuY29yLFxuICAgICAgICBhdGl2bzogc2ltcGxlcy5hdGl2byxcbiAgICAgICAgZXN0YUV4cGFuZGlkbzogc2ltcGxlcy5lc3RhRXhwYW5kaWRvLFxuICAgICAgICBmaWxob3M6IFtdXG4gICAgICB9O1xuICAgICAgbWFwYS5zZXQoc2ltcGxlcy5rZXksIG5vKTtcbiAgICB9KTtcblxuICAgIG5vc1NpbXBsZXMuZm9yRWFjaChzaW1wbGVzID0+IHtcbiAgICAgIGNvbnN0IG5vID0gbWFwYS5nZXQoc2ltcGxlcy5rZXkpITtcbiAgICAgIGNvbnN0IHBhcnRlcyA9IHNpbXBsZXMua2V5LnNwbGl0KCctJyk7XG4gICAgICBcbiAgICAgIGlmIChwYXJ0ZXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHJhaXoucHVzaChubyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBrZXlQYWkgPSBwYXJ0ZXMuc2xpY2UoMCwgLTEpLmpvaW4oJy0nKTtcbiAgICAgICAgY29uc3QgcGFpID0gbWFwYS5nZXQoa2V5UGFpKTtcbiAgICAgICAgaWYgKHBhaSkge1xuICAgICAgICAgIHBhaS5maWxob3MgPSBwYWkuZmlsaG9zIHx8IFtdO1xuICAgICAgICAgIHBhaS5maWxob3MucHVzaChubyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiByYWl6O1xuICB9XG5cbiAgcHJpdmF0ZSB0cmFuc2Zvcm1hclBhcmFMaXN0YVBsYW5hKG5vZGVzOiBOb0Fydm9yZVtdLCBuaXZlbCA9IDApOiBOb1BsYW5vW10ge1xuICAgIHJldHVybiB0aGlzLnRyYW5zZm9ybWFyUGFyYUxpc3RhUGxhbmFPdGltaXphZGEobm9kZXMsIG5pdmVsKTtcbiAgfVxuXG4gIHByaXZhdGUgdHJhbnNmb3JtYXJQYXJhTGlzdGFQbGFuYU90aW1pemFkYShub2RlczogTm9BcnZvcmVbXSwgbml2ZWwgPSAwKTogTm9QbGFub1tdIHtcbiAgICBjb25zdCBsaXN0YTogTm9QbGFub1tdID0gW107XG4gICAgY29uc3Qgc3RhY2s6IEFycmF5PHtub2RlczogTm9BcnZvcmVbXSwgbml2ZWw6IG51bWJlciwgcGFyZW50SW5kZXg6IG51bWJlcn0+ID0gW3tub2Rlcywgbml2ZWwsIHBhcmVudEluZGV4OiAtMX1dO1xuICAgIFxuICAgIHdoaWxlIChzdGFjay5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCB7bm9kZXM6IGN1cnJlbnROb2Rlcywgbml2ZWw6IGN1cnJlbnROaXZlbCwgcGFyZW50SW5kZXh9ID0gc3RhY2sucG9wKCkhO1xuICAgICAgXG4gICAgICBjdXJyZW50Tm9kZXMuZm9yRWFjaCgobm9kZSwgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3Qgcm90dWxvID0gbm9kZS5yb3R1bG87XG4gICAgICAgIGNvbnN0IGVzdGFFeHBhbmRpZG8gPSB0aGlzLm1hcGFEZUV4cGFuc2FvLmdldChyb3R1bG8pID8/IChub2RlLmVzdGFFeHBhbmRpZG8gPz8gZmFsc2UpO1xuICAgICAgICBjb25zdCB0ZW1GaWxob3MgPSAhIShub2RlLmZpbGhvcyAmJiBub2RlLmZpbGhvcy5sZW5ndGggPiAwKTtcbiAgICAgICAgXG4gICAgICAgIGNvbnN0IG5vUGxhbm86IE5vUGxhbm8gPSB7XG4gICAgICAgICAgaWQ6IHJvdHVsbyxcbiAgICAgICAgICBuaXZlbDogY3VycmVudE5pdmVsLFxuICAgICAgICAgIGV4cGFuc2l2ZWw6IHRlbUZpbGhvcyxcbiAgICAgICAgICBlc3RhRXhwYW5kaWRvOiBlc3RhRXhwYW5kaWRvLFxuICAgICAgICAgIGlzTGFzdDogaW5kZXggPT09IGN1cnJlbnROb2Rlcy5sZW5ndGggLSAxLFxuICAgICAgICAgIGRhZG9zT3JpZ2luYWlzOiBub2RlXG4gICAgICAgIH07XG4gICAgICAgIFxuICAgICAgICBsaXN0YS5wdXNoKG5vUGxhbm8pO1xuXG4gICAgICAgIGlmIChlc3RhRXhwYW5kaWRvICYmIHRlbUZpbGhvcykge1xuICAgICAgICAgIHN0YWNrLnB1c2goe1xuICAgICAgICAgICAgbm9kZXM6IG5vZGUuZmlsaG9zISxcbiAgICAgICAgICAgIG5pdmVsOiBjdXJyZW50Tml2ZWwgKyAxLFxuICAgICAgICAgICAgcGFyZW50SW5kZXg6IGxpc3RhLmxlbmd0aCAtIDFcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIFxuICAgIHJldHVybiBsaXN0YTtcbiAgfVxuXG4gIHRyYWNrQnlOb2RlKGluZGV4OiBudW1iZXIsIG5vUGxhbm86IE5vUGxhbm8pOiBzdHJpbmcge1xuICAgIHJldHVybiBub1BsYW5vLmlkO1xuICB9XG5cbiAgZXhlY3V0ZUNvbGxhcHNlZCgpIHtcbiAgICBjb25zdCB0b2Rvc0NvbGFwc2Fkb3MgPSB0aGlzLmNvbGxhcHNlZEFsbCgpO1xuICAgIFxuICAgIGlmICh0b2Rvc0NvbGFwc2Fkb3MpIHtcbiAgICAgIHRoaXMuZXhwYW5kaXJUb2Rvc090aW1pemFkbygpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNvbGFwc2FyVG9kb3NPdGltaXphZG8oKTtcbiAgICB9XG4gICAgXG4gICAgdGhpcy5fY2FjaGVkTGlzdGFQbGFuYSA9IG51bGw7XG4gICAgdGhpcy5fbGlzdGFQbGFuYUhhc2ggPSBudWxsO1xuICAgIFxuICAgIHRoaXMuZ2VyYXJMaXN0YVBsYW5hT3RpbWl6YWRhKCk7XG4gICAgdGhpcy5hdHVhbGl6YXJFc3RhZG9Db2xsYXBzZUJ1dHRvbigpO1xuICB9XG5cbiAgcHJpdmF0ZSBleHBhbmRpclRvZG9zKCk6IHZvaWQge1xuICAgIHRoaXMuZXhwYW5kaXJUb2Rvc090aW1pemFkbygpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb2xhcHNhclRvZG9zKCk6IHZvaWQge1xuICAgIHRoaXMuY29sYXBzYXJUb2Rvc090aW1pemFkbygpO1xuICB9XG5cbiAgcHJpdmF0ZSBleHBhbmRpclRvZG9zT3RpbWl6YWRvKCk6IHZvaWQge1xuICAgIGNvbnN0IGRhZG9zID0gdGhpcy5vYnRlckRhZG9zT3RpbWl6YWRvKCk7XG4gICAgY29uc3Qgc3RhY2s6IE5vQXJ2b3JlW10gPSBbLi4uZGFkb3NdO1xuICAgIFxuICAgIHdoaWxlIChzdGFjay5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBub2RlID0gc3RhY2sucG9wKCkhO1xuICAgICAgXG4gICAgICBpZiAobm9kZS5maWxob3MgJiYgbm9kZS5maWxob3MubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLm1hcGFEZUV4cGFuc2FvLnNldChub2RlLnJvdHVsbywgdHJ1ZSk7XG4gICAgICAgIHN0YWNrLnB1c2goLi4ubm9kZS5maWxob3MpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY29sYXBzYXJUb2Rvc090aW1pemFkbygpOiB2b2lkIHtcbiAgICBjb25zdCBkYWRvcyA9IHRoaXMub2J0ZXJEYWRvc090aW1pemFkbygpO1xuICAgIGNvbnN0IHN0YWNrOiBOb0Fydm9yZVtdID0gWy4uLmRhZG9zXTtcbiAgICBcbiAgICB3aGlsZSAoc3RhY2subGVuZ3RoID4gMCkge1xuICAgICAgY29uc3Qgbm9kZSA9IHN0YWNrLnBvcCgpITtcbiAgICAgIFxuICAgICAgaWYgKG5vZGUuZmlsaG9zICYmIG5vZGUuZmlsaG9zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy5tYXBhRGVFeHBhbnNhby5zZXQobm9kZS5yb3R1bG8sIGZhbHNlKTtcbiAgICAgICAgc3RhY2sucHVzaCguLi5ub2RlLmZpbGhvcyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBwZXJjb3JyZXJUb2Rvc05vcyhub2RlczogTm9BcnZvcmVbXSwgY2FsbGJhY2s6IChub2RlOiBOb0Fydm9yZSkgPT4gdm9pZCk6IHZvaWQge1xuICAgIG5vZGVzLmZvckVhY2gobm9kZSA9PiB7XG4gICAgICBjYWxsYmFjayhub2RlKTtcbiAgICAgIGlmIChub2RlLmZpbGhvcyAmJiBub2RlLmZpbGhvcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMucGVyY29ycmVyVG9kb3NOb3Mobm9kZS5maWxob3MsIGNhbGxiYWNrKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXR1YWxpemFyRXN0YWRvQ29sbGFwc2VCdXR0b24oKTogdm9pZCB7XG4gICAgY29uc3Qgbm9zRXhwYW5kaXZlaXMgPSB0aGlzLm9idGVyVG9kb3NOb3NFeHBhbmRpdmVpcygpO1xuICAgIGNvbnN0IG5vc0V4cGFuZGlkb3MgPSBub3NFeHBhbmRpdmVpcy5maWx0ZXIobm9kZSA9PiBcbiAgICAgIHRoaXMubWFwYURlRXhwYW5zYW8uZ2V0KG5vZGUucm90dWxvKSA/PyAobm9kZS5lc3RhRXhwYW5kaWRvID8/IGZhbHNlKVxuICAgICk7XG5cbiAgICBjb25zdCB0b2Rvc0ZlY2hhZG9zID0gbm9zRXhwYW5kaWRvcy5sZW5ndGggPT09IDA7XG5cbiAgICBpZiAodG9kb3NGZWNoYWRvcykge1xuICAgICAgdGhpcy5jb2xsYXBzZWRBbGwuc2V0KHRydWUpO1xuICAgICAgdGhpcy5pY29uQ29sbGFwc2VkLnNldCgnZXhwYW5kX2NvbnRlbnQnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jb2xsYXBzZWRBbGwuc2V0KGZhbHNlKTtcbiAgICAgIHRoaXMuaWNvbkNvbGxhcHNlZC5zZXQoJ2NvbGxhcHNlX2FsbCcpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgb2J0ZXJUb2Rvc05vc0V4cGFuZGl2ZWlzKCk6IE5vQXJ2b3JlW10ge1xuICAgIGNvbnN0IG5vc0V4cGFuZGl2ZWlzOiBOb0Fydm9yZVtdID0gW107XG4gICAgXG4gICAgdGhpcy5wZXJjb3JyZXJUb2Rvc05vcyh0aGlzLm9idGVyRGFkb3MoKSwgKG5vZGUpID0+IHtcbiAgICAgIGlmIChub2RlLmZpbGhvcyAmJiBub2RlLmZpbGhvcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIG5vc0V4cGFuZGl2ZWlzLnB1c2gobm9kZSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgXG4gICAgcmV0dXJuIG5vc0V4cGFuZGl2ZWlzO1xuICB9XG5cbiAgcHJpdmF0ZSBjb21iaW5hckVzdHJ1dHVyYUNvbURhZG9zKGVzdHJ1dHVyYTogRXN0cnV0dXJhQXJ2b3JlW10sIGRhZG9zOiBEYWRvc0Fydm9yZVtdKTogTm9BcnZvcmVbXSB7XG4gICAgY29uc3QgbWFwYURhZG9zID0gbmV3IE1hcChkYWRvcy5tYXAoZCA9PiBbZC5pZCwgZF0pKTtcbiAgICBjb25zdCBtYXBhRXN0cnV0dXJhID0gbmV3IE1hcDxudW1iZXIsIE5vQXJ2b3JlPigpO1xuICAgIGNvbnN0IHJhaXo6IE5vQXJ2b3JlW10gPSBbXTtcblxuICAgIGVzdHJ1dHVyYVxuICAgICAgLnNvcnQoKGEsIGIpID0+IChhLm9yZGVtIHx8IDApIC0gKGIub3JkZW0gfHwgMCkpIFxuICAgICAgLmZvckVhY2goZXN0ID0+IHtcbiAgICAgICAgY29uc3QgZGFkbyA9IG1hcGFEYWRvcy5nZXQoZXN0LmlkKTtcbiAgICAgICAgXG4gICAgICAgIGNvbnN0IG5vOiBOb0Fydm9yZSA9IHtcbiAgICAgICAgICByb3R1bG86IGRhZG8/LnJvdHVsbyB8fCBlc3QubGFiZWwsXG4gICAgICAgICAgaWNvbmU6IGVzdC5pY29uZSxcbiAgICAgICAgICBjb3I6IGVzdC5jb3IsXG4gICAgICAgICAgYXRpdm86IGRhZG8/LmF0aXZvID8/IHRydWUsXG4gICAgICAgICAgZXN0YUV4cGFuZGlkbzogZXN0LmVzdGFFeHBhbmRpZG8sXG4gICAgICAgICAgZmlsaG9zOiBbXSxcbiAgICAgICAgICBhY3Rpb25zOiBlc3QuYWN0aW9ucyxcbiAgICAgICAgICBkYXRhOiBlc3QuZGF0YVxuICAgICAgICB9O1xuICAgICAgICBcbiAgICAgICAgbWFwYUVzdHJ1dHVyYS5zZXQoZXN0LmlkLCBubyk7XG4gICAgICB9KTtcblxuICAgIGVzdHJ1dHVyYS5mb3JFYWNoKGVzdCA9PiB7XG4gICAgICBjb25zdCBubyA9IG1hcGFFc3RydXR1cmEuZ2V0KGVzdC5pZCkhO1xuICAgICAgXG4gICAgICBpZiAoIWVzdC5wYXJlbnRJZCkge1xuICAgICAgICByYWl6LnB1c2gobm8pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgcGFpID0gbWFwYUVzdHJ1dHVyYS5nZXQoZXN0LnBhcmVudElkKTtcbiAgICAgICAgaWYgKHBhaSkge1xuICAgICAgICAgIHBhaS5maWxob3MhLnB1c2gobm8pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gcmFpejtcbiAgfVxuXG4gIGV4ZWN1dGVBZGQoKSB7XG4gICAgdGhpcy5vbkFkZENsaWNrLmVtaXQoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuX2NhY2hlZERhZG9zID0gbnVsbDtcbiAgICB0aGlzLl9jYWNoZWRMaXN0YVBsYW5hID0gbnVsbDtcbiAgICB0aGlzLl9kYWRvc0hhc2ggPSAnJztcbiAgICB0aGlzLl9saXN0YVBsYW5hSGFzaCA9ICcnOyBcbiAgfVxuXG59XG4iLCI8ZGl2IGNsYXNzPVwiZ3JpZC1jb250YWluZXIgaC1mdWxsXCI+XG4gIDxzcGFuIFxuICAgIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCB0ZXh0LXNtIHRleHQtNTAwIG14LTEgcC0xIGN1cnNvci1wb2ludGVyIGhvdmVyOnN1cmZhY2UtMzAwXCJcbiAgICBzdHlsZT1cImJvcmRlci1yYWRpdXM6IDRweDsgbWFyZ2luLXRvcDogMTJweDtcIiBcbiAgICAoY2xpY2spPVwiZXhlY3V0ZUNvbGxhcHNlZCgpXCJcbiAgICBbcFRvb2x0aXBdPVwiY29sbGFwc2VkQWxsKCkgPyAnRXhwYW5kaXIgdHVkbycgOiAnUmVjb2xoZXIgdHVkbydcIlxuICA+XG4gICAge3sgaWNvbkNvbGxhcHNlZCgpIH19XG4gIDwvc3Bhbj5cbiAgPGNkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydCBjbGFzcz1cImgtZnVsbCB3LWZ1bGxcIiBpdGVtU2l6ZT1cIjQwXCI+XG4gICAgXG4gICAgPHVsIGNsYXNzPVwibGlzdGEtYXJ2b3JlLXZpcnR1YWwgcHItMiBweS0yXCI+XG4gICAgICA8bm8tYXJ2b3JlIFxuICAgICAgICAqY2RrVmlydHVhbEZvcj1cImxldCBubyBvZiBsaXN0YVBsYW5hKCk7IHRyYWNrQnk6IHRyYWNrQnlOb2RlXCIgXG4gICAgICAgIFtub1BsYW5vXT1cIm5vXCJcbiAgICAgICAgKG5vQWx0ZXJuYWRvKT1cImFsdGVybmFyTm8oJGV2ZW50KVwiXG4gICAgICAgIChhY3Rpb25FeGVjdXRlZCk9XCJvbkFjdGlvbkV4ZWN1dGVkKCRldmVudClcIiAvPlxuICAgIDwvdWw+XG5cbiAgPC9jZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnQ+XG48L2Rpdj4iXX0=
|
|
326
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia3YtdHJlZS1lbnZpcm9ubWVudC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9rZWV2by1jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9rdi10cmVlLWVudmlyb25tZW50L2NvbXBvbmVudHMva3YtdHJlZS1lbnZpcm9ubWVudC9rdi10cmVlLWVudmlyb25tZW50LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tlZXZvLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2t2LXRyZWUtZW52aXJvbm1lbnQvY29tcG9uZW50cy9rdi10cmVlLWVudmlyb25tZW50L2t2LXRyZWUtZW52aXJvbm1lbnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBYSxpQkFBaUIsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0gsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFFckUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQzs7OztBQWN2RSxNQUFNLE9BQU8sMEJBQTBCO0lBNEJyQztRQTFCQSxrQkFBYSxHQUFHLEtBQUssQ0FBYSxFQUFFLENBQUMsQ0FBQztRQUN0QyxlQUFVLEdBQUcsS0FBSyxDQUFvQixFQUFFLENBQUMsQ0FBQztRQUMxQyxvQkFBZSxHQUFHLEtBQUssQ0FFckIsRUFBRSxDQUFDLENBQUM7UUFDTixnQkFBVyxHQUFHLEtBQUssQ0FBZ0IsRUFBRSxDQUFD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LEVBQUUsQ0FBQyxDQUFDO2dCQUN2QixDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsVUFBVTtRQUNSLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDekIsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztRQUN6QixJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO1FBQzlCLElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxlQUFlLEdBQUcsRUFBRSxDQUFDO0lBQzVCLENBQUM7OEdBdlhVLDBCQUEwQjtrR0FBMUIsMEJBQTBCLDBwQ0NuQnZDLHl2QkFvQk0sa01EUEYsWUFBWSwrQkFDWixpQkFBaUIsc0hBQ2pCLGVBQWUsMmpCQUNmLGFBQWE7OzJGQUdKLDBCQUEwQjtrQkFadEMsU0FBUztpQ0FDSSxJQUFJLFlBQ04scUJBQXFCLFdBR3RCO3dCQUNQLFlBQVk7d0JBQ1osaUJBQWlCO3dCQUNqQixlQUFlO3dCQUNmLGFBQWE7cUJBQ2Q7d0RBY1MsVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxjQUFjO3NCQUF2QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudCwgaW5wdXQsIHNpZ25hbCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIGVmZmVjdCwgT25EZXN0cm95LCBDaGFuZ2VEZXRlY3RvclJlZiwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOb0Fydm9yZUNvbXBvbmVudCB9IGZyb20gJy4uL25vLWFydm9yZS9uby1hcnZvcmUuY29tcG9uZW50JztcbmltcG9ydCB7IE5vQXJ2b3JlLCBOb0Fydm9yZVNpbXBsZXMsIENvbmZpZ0Fydm9yZVNpbXBsZXMsIEVzdHJ1dHVyYUFydm9yZSwgRGFkb3NBcnZvcmUsIE5vUGxhbm8gfSBmcm9tICcuLi8uLi9tb2RlbHMvbm8tYXJ2b3JlLm1vZGVsJztcbmltcG9ydCB7IFNjcm9sbGluZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9zY3JvbGxpbmcnO1xuaW1wb3J0IHsgUHJpbWVOZ01vZHVsZSB9IGZyb20gJy4uLy4uLy4uLy4uL2FwaS9tb2R1bGVzL3ByaW1lbmcubW9kdWxlJztcblxuQENvbXBvbmVudCh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHNlbGVjdG9yOiAna3YtdHJlZS1lbnZpcm9ubWVudCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9rdi10cmVlLWVudmlyb25tZW50LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4va3YtdHJlZS1lbnZpcm9ubWVudC5jb21wb25lbnQuc2NzcyddLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLCBcbiAgICBOb0Fydm9yZUNvbXBvbmVudCxcbiAgICBTY3JvbGxpbmdNb2R1bGUsXG4gICAgUHJpbWVOZ01vZHVsZVxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBLdlRyZWVFbnZpcm9ubWVudENvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG5cbiAgYXJ2b3JlRGVEYWRvcyA9IGlucHV0PE5vQXJ2b3JlW10+KFtdKTtcbiAgbm9zU2ltcGxlcyA9IGlucHV0PE5vQXJ2b3JlU2ltcGxlc1tdPihbXSk7XG4gIGVzdHJ1dHVyYUFydm9yZSA9IGlucHV0PFxuICAgIEVzdHJ1dHVyYUFydm9yZVtdXG4gID4oW10pO1xuICBkYWRvc0Fydm9yZSA9IGlucHV0PERhZG9zQXJ2b3JlW10+KFtdKTtcbiAgY29uZmlndXJhY2FvID0gaW5wdXQ8Q29uZmlnQXJ2b3JlU2ltcGxlcz4oe30pO1xuICBzaG93QnV0dG9uQ29sbGFwc2VkID0gaW5wdXQ8Ym9vbGVhbj4odHJ1ZSk7XG4gIHNob3dBZGRCdXR0b24gPSBpbnB1dDxib29sZWFuPih0cnVlKTtcblxuICBAT3V0cHV0KCkgb25BZGRDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQE91dHB1dCgpIG9uU2VsZWN0ZWRJdGVtID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgcHJpdmF0ZSBjZHIgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuICBwcml2YXRlIG1hcGFEZUV4cGFuc2FvID0gbmV3IE1hcDxzdHJpbmcsIGJvb2xlYW4+KCk7XG4gIFxuICBwcml2YXRlIF9jYWNoZWREYWRvczogTm9BcnZvcmVbXSB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIF9kYWRvc0hhc2g6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIF9jYWNoZWRMaXN0YVBsYW5hOiBOb1BsYW5vW10gfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBfbGlzdGFQbGFuYUhhc2g6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gIGxpc3RhUGxhbmEgPSBzaWduYWw8Tm9QbGFub1tdPihbXSk7XG4gIGljb25Db2xsYXBzZWQgPSBzaWduYWw8c3RyaW5nPignY29sbGFwc2VfYWxsJyk7XG4gIGNvbGxhcHNlZEFsbCA9IHNpZ25hbDxib29sZWFuPih0cnVlKTtcbiAgc2VsZWN0ZWRJdGVtID0gc2lnbmFsPGFueT4obnVsbCk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGNvbnN0IGVzdHJ1dHVyYSA9IHRoaXMuZXN0cnV0dXJhQXJ2b3JlKCk7XG4gICAgICBjb25zdCBkYWRvcyA9IHRoaXMuZGFkb3NBcnZvcmUoKTtcbiAgICAgIGNvbnN0IHNpbXBsZXMgPSB0aGlzLm5vc1NpbXBsZXMoKTtcbiAgICAgIGNvbnN0IGFydm9yZSA9IHRoaXMuYXJ2b3JlRGVEYWRvcygpO1xuICAgICAgXG4gICAgICBjb25zdCBkYWRvc0hhc2ggPSB0aGlzLmNyaWFySGFzaERhZG9zKGVzdHJ1dHVyYSwgZGFkb3MsIHNpbXBsZXMsIGFydm9yZSk7XG4gICAgICBcbiAgICAgIGlmICh0aGlzLl9kYWRvc0hhc2ggIT09IGRhZG9zSGFzaCkge1xuICAgICAgICB0aGlzLl9kYWRvc0hhc2ggPSBkYWRvc0hhc2g7XG4gICAgICAgIHRoaXMuaW52YWxpZGFyQ2FjaGUoKTtcbiAgICAgICAgXG4gICAgICAgIGNvbnN0IHRlbURhZG9zID0gZXN0cnV0dXJhLmxlbmd0aCA+IDAgfHwgZGFkb3MubGVuZ3RoID4gMCB8fCBzaW1wbGVzLmxlbmd0aCA+IDAgfHwgYXJ2b3JlLmxlbmd0aCA+IDA7XG4gICAgICAgIFxuICAgICAgICBpZiAodGVtRGFkb3MpIHtcbiAgICAgICAgICB0aGlzLmdlcmFyTGlzdGFQbGFuYU90aW1pemFkYSgpO1xuICAgICAgICAgIHRoaXMuYXR1YWxpemFyRXN0YWRvQ29sbGFwc2VCdXR0b24oKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmxpc3RhUGxhbmEuc2V0KFtdKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfSk7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmdlcmFyTGlzdGFQbGFuYSgpO1xuICAgIHRoaXMuYXR1YWxpemFyRXN0YWRvQ29sbGFwc2VCdXR0b24oKTtcbiAgfVxuXG4gIGFsdGVybmFyTm8obm9QbGFubzogTm9QbGFubyk6IHZvaWQge1xuICAgIGlmICghbm9QbGFuby5leHBhbnNpdmVsKSByZXR1cm47XG5cbiAgICBjb25zdCBlc3RhZG9BdHVhbCA9IHRoaXMubWFwYURlRXhwYW5zYW8uZ2V0KG5vUGxhbm8uZGFkb3NPcmlnaW5haXMucm90dWxvKSA/PyBmYWxzZTtcbiAgICB0aGlzLm1hcGFEZUV4cGFuc2FvLnNldChub1BsYW5vLmRhZG9zT3JpZ2luYWlzLnJvdHVsbywgIWVzdGFkb0F0dWFsKTtcblxuICAgIHRoaXMuZm9yY2FyQXR1YWxpemFjYW9MaXN0YSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBmb3JjYXJBdHVhbGl6YWNhb0xpc3RhKCk6IHZvaWQge1xuICAgIHRoaXMuX2NhY2hlZExpc3RhUGxhbmEgPSBudWxsO1xuICAgIHRoaXMuX2xpc3RhUGxhbmFIYXNoID0gbnVsbDtcbiAgICBcbiAgICBjb25zdCBkYWRvcyA9IHRoaXMub2J0ZXJEYWRvc090aW1pemFkbygpO1xuICAgIGNvbnN0IG5vdmFMaXN0YVBsYW5hID0gdGhpcy50cmFuc2Zvcm1hclBhcmFMaXN0YVBsYW5hT3RpbWl6YWRhKGRhZG9zKTtcbiAgICBcbiAgICB0aGlzLmxpc3RhUGxhbmEuc2V0KG5vdmFMaXN0YVBsYW5hKTtcbiAgICBcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCBleHBhbnNhb0hhc2ggPSBBcnJheS5mcm9tKHRoaXMubWFwYURlRXhwYW5zYW8uZW50cmllcygpKVxuICAgICAgICAuc29ydCgoW2FdLCBbYl0pID0+IGEubG9jYWxlQ29tcGFyZShiKSlcbiAgICAgICAgLm1hcCgoW2ssIHZdKSA9PiBgJHtrfToke3Z9YClcbiAgICAgICAgLmpvaW4oJywnKTtcbiAgICAgIFxuICAgICAgdGhpcy5fbGlzdGFQbGFuYUhhc2ggPSBgJHt0aGlzLl9kYWRvc0hhc2h9OiR7ZXhwYW5zYW9IYXNofWA7XG4gICAgICB0aGlzLl9jYWNoZWRMaXN0YVBsYW5hID0gbm92YUxpc3RhUGxhbmE7XG4gICAgICBcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIHRoaXMuYXR1YWxpemFyRXN0YWRvQ29sbGFwc2VCdXR0b24oKTtcbiAgICB9LCAwKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JpYXJIYXNoRGFkb3MoZXN0cnV0dXJhOiBFc3RydXR1cmFBcnZvcmVbXSwgZGFkb3M6IERhZG9zQXJ2b3JlW10sIHNpbXBsZXM6IE5vQXJ2b3JlU2ltcGxlc1tdLCBhcnZvcmU6IE5vQXJ2b3JlW10pOiBzdHJpbmcge1xuICAgIGNvbnN0IGVzdHJ1dHVyYUhhc2ggPSBgZToke2VzdHJ1dHVyYS5sZW5ndGh9OiR7ZXN0cnV0dXJhLm1hcChlID0+IGAke2UuaWR9OiR7ZS5sYWJlbH1gKS5qb2luKCcsJyl9YDtcbiAgICBjb25zdCBkYWRvc0hhc2ggPSBgZDoke2RhZG9zLmxlbmd0aH06JHtkYWRvcy5tYXAoZCA9PiBgJHtkLmlkfWApLmpvaW4oJywnKX1gO1xuICAgIGNvbnN0IHNpbXBsZXNIYXNoID0gYHM6JHtzaW1wbGVzLmxlbmd0aH06JHtzaW1wbGVzLm1hcChzID0+IHMua2V5KS5qb2luKCcsJyl9YDtcbiAgICBjb25zdCBhcnZvcmVIYXNoID0gYGE6JHthcnZvcmUubGVuZ3RofToke2Fydm9yZS5tYXAoYSA9PiBhLnJvdHVsbykuam9pbignLCcpfWA7XG4gICAgXG4gICAgcmV0dXJuIGAke2VzdHJ1dHVyYUhhc2h9fCR7ZGFkb3NIYXNofXwke3NpbXBsZXNIYXNofXwke2Fydm9yZUhhc2h9YDtcbiAgfVxuXG4gIHByaXZhdGUgaW52YWxpZGFyQ2FjaGUoKTogdm9pZCB7XG4gICAgdGhpcy5fY2FjaGVkRGFkb3MgPSBudWxsO1xuICAgIHRoaXMuX2NhY2hlZExpc3RhUGxhbmEgPSBudWxsO1xuICAgIHRoaXMuX2xpc3RhUGxhbmFIYXNoID0gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgZ2VyYXJMaXN0YVBsYW5hT3RpbWl6YWRhKCk6IHZvaWQge1xuICAgIGNvbnN0IGRhZG9zID0gdGhpcy5vYnRlckRhZG9zT3RpbWl6YWRvKCk7XG4gICAgXG4gICAgY29uc3QgZXhwYW5zYW9IYXNoID0gQXJyYXkuZnJvbSh0aGlzLm1hcGFEZUV4cGFuc2FvLmVudHJpZXMoKSlcbiAgICAgIC5zb3J0KChbYV0sIFtiXSkgPT4gYS5sb2NhbGVDb21wYXJlKGIpKVxuICAgICAgLm1hcCgoW2ssIHZdKSA9PiBgJHtrfToke3Z9YClcbiAgICAgIC5qb2luKCcsJyk7XG4gICAgXG4gICAgY29uc3QgbGlzdGFQbGFuYUhhc2ggPSBgJHt0aGlzLl9kYWRvc0hhc2h9OiR7ZXhwYW5zYW9IYXNofWA7XG4gICAgXG4gICAgaWYgKHRoaXMuX2xpc3RhUGxhbmFIYXNoID09PSBsaXN0YVBsYW5hSGFzaCAmJiB0aGlzLl9jYWNoZWRMaXN0YVBsYW5hKSB7XG4gICAgICB0aGlzLmxpc3RhUGxhbmEuc2V0KHRoaXMuX2NhY2hlZExpc3RhUGxhbmEpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBcbiAgICBjb25zdCBub3ZhTGlzdGFQbGFuYSA9IHRoaXMudHJhbnNmb3JtYXJQYXJhTGlzdGFQbGFuYU90aW1pemFkYShkYWRvcyk7XG4gICAgXG4gICAgdGhpcy5fY2FjaGVkTGlzdGFQbGFuYSA9IG5vdmFMaXN0YVBsYW5hO1xuICAgIHRoaXMuX2xpc3RhUGxhbmFIYXNoID0gbGlzdGFQbGFuYUhhc2g7XG4gICAgXG4gICAgdGhpcy5saXN0YVBsYW5hLnNldChub3ZhTGlzdGFQbGFuYSk7XG4gIH1cblxuICBvbkFjdGlvbkV4ZWN1dGVkKG5vUGxhbm86IE5vUGxhbm8pOiB2b2lkIHtcbiAgICBjb25zdCBkYWRvcyA9IG5vUGxhbm8uZGFkb3NPcmlnaW5haXM7XG4gICAgdGhpcy5zZWxlY3RlZEl0ZW0uc2V0KGRhZG9zKTtcbiAgICB0aGlzLm9uU2VsZWN0ZWRJdGVtLmVtaXQoZGFkb3MpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXJhckxpc3RhUGxhbmEoKTogdm9pZCB7XG4gICAgdGhpcy5nZXJhckxpc3RhUGxhbmFPdGltaXphZGEoKTtcbiAgfVxuXG4gIHByaXZhdGUgb2J0ZXJEYWRvc090aW1pemFkbygpOiBOb0Fydm9yZVtdIHtcbiAgICBpZiAodGhpcy5fY2FjaGVkRGFkb3MgJiYgdGhpcy5fZGFkb3NIYXNoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fY2FjaGVkRGFkb3M7XG4gICAgfVxuXG4gICAgY29uc3QgZXN0cnV0dXJhID0gdGhpcy5lc3RydXR1cmFBcnZvcmUoKTtcbiAgICBjb25zdCBkYWRvcyA9IHRoaXMuZGFkb3NBcnZvcmUoKTtcbiAgICBcbiAgICBsZXQgcmVzdWx0YWRvOiBOb0Fydm9yZVtdO1xuICAgIFxuICAgIGlmIChlc3RydXR1cmEgJiYgZXN0cnV0dXJhLmxlbmd0aCA+IDApIHtcbiAgICAgIHJlc3VsdGFkbyA9IHRoaXMuY29tYmluYXJFc3RydXR1cmFDb21EYWRvcyhlc3RydXR1cmEsIGRhZG9zIHx8IFtdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgbm9zU2ltcGxlcyA9IHRoaXMubm9zU2ltcGxlcygpO1xuICAgICAgaWYgKG5vc1NpbXBsZXMgJiYgbm9zU2ltcGxlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJlc3VsdGFkbyA9IHRoaXMuY29udmVydGVyU2ltcGxlc1BhcmFDb21wbGV0byhub3NTaW1wbGVzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdGFkbyA9IHRoaXMuYXJ2b3JlRGVEYWRvcygpO1xuICAgICAgfVxuICAgIH1cbiAgICBcbiAgICB0aGlzLl9jYWNoZWREYWRvcyA9IHJlc3VsdGFkbztcbiAgICByZXR1cm4gcmVzdWx0YWRvO1xuICB9XG5cbiAgcHJpdmF0ZSBvYnRlckRhZG9zKCk6IE5vQXJ2b3JlW10ge1xuICAgIHJldHVybiB0aGlzLm9idGVyRGFkb3NPdGltaXphZG8oKTtcbiAgfVxuXG4gIHByaXZhdGUgY29udmVydGVyU2ltcGxlc1BhcmFDb21wbGV0byhub3NTaW1wbGVzOiBOb0Fydm9yZVNpbXBsZXNbXSk6IE5vQXJ2b3JlW10ge1xuICAgIGNvbnN0IG1hcGEgPSBuZXcgTWFwPHN0cmluZywgTm9BcnZvcmU+KCk7XG4gICAgY29uc3QgcmFpejogTm9BcnZvcmVbXSA9IFtdO1xuXG4gICAgbm9zU2ltcGxlcy5mb3JFYWNoKHNpbXBsZXMgPT4ge1xuICAgICAgY29uc3Qgbm86IE5vQXJ2b3JlID0ge1xuICAgICAgICByb3R1bG86IHNpbXBsZXMucm90dWxvLFxuICAgICAgICBpY29uZTogc2ltcGxlcy5pY29uZSxcbiAgICAgICAgY29yOiBzaW1wbGVzLmNvcixcbiAgICAgICAgYXRpdm86IHNpbXBsZXMuYXRpdm8sXG4gICAgICAgIGVzdGFFeHBhbmRpZG86IHNpbXBsZXMuZXN0YUV4cGFuZGlkbyxcbiAgICAgICAgZmlsaG9zOiBbXVxuICAgICAgfTtcbiAgICAgIG1hcGEuc2V0KHNpbXBsZXMua2V5LCBubyk7XG4gICAgfSk7XG5cbiAgICBub3NTaW1wbGVzLmZvckVhY2goc2ltcGxlcyA9PiB7XG4gICAgICBjb25zdCBubyA9IG1hcGEuZ2V0KHNpbXBsZXMua2V5KSE7XG4gICAgICBjb25zdCBwYXJ0ZXMgPSBzaW1wbGVzLmtleS5zcGxpdCgnLScpO1xuICAgICAgXG4gICAgICBpZiAocGFydGVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICByYWl6LnB1c2gobm8pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qga2V5UGFpID0gcGFydGVzLnNsaWNlKDAsIC0xKS5qb2luKCctJyk7XG4gICAgICAgIGNvbnN0IHBhaSA9IG1hcGEuZ2V0KGtleVBhaSk7XG4gICAgICAgIGlmIChwYWkpIHtcbiAgICAgICAgICBwYWkuZmlsaG9zID0gcGFpLmZpbGhvcyB8fCBbXTtcbiAgICAgICAgICBwYWkuZmlsaG9zLnB1c2gobm8pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gcmFpejtcbiAgfVxuXG4gIHByaXZhdGUgdHJhbnNmb3JtYXJQYXJhTGlzdGFQbGFuYShub2RlczogTm9BcnZvcmVbXSwgbml2ZWwgPSAwKTogTm9QbGFub1tdIHtcbiAgICByZXR1cm4gdGhpcy50cmFuc2Zvcm1hclBhcmFMaXN0YVBsYW5hT3RpbWl6YWRhKG5vZGVzLCBuaXZlbCk7XG4gIH1cblxuICBwcml2YXRlIHRyYW5zZm9ybWFyUGFyYUxpc3RhUGxhbmFPdGltaXphZGEobm9kZXM6IE5vQXJ2b3JlW10sIG5pdmVsID0gMCk6IE5vUGxhbm9bXSB7XG4gICAgY29uc3QgbGlzdGE6IE5vUGxhbm9bXSA9IFtdO1xuICAgIFxuICAgIG5vZGVzLmZvckVhY2goKG5vZGUsIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCByb3R1bG8gPSBub2RlLnJvdHVsbztcbiAgICAgIGNvbnN0IGVzdGFFeHBhbmRpZG8gPSB0aGlzLm1hcGFEZUV4cGFuc2FvLmdldChyb3R1bG8pID8/IChub2RlLmVzdGFFeHBhbmRpZG8gPz8gZmFsc2UpO1xuICAgICAgY29uc3QgdGVtRmlsaG9zID0gISEobm9kZS5maWxob3MgJiYgbm9kZS5maWxob3MubGVuZ3RoID4gMCk7XG4gICAgICBcbiAgICAgIGNvbnN0IG5vUGxhbm86IE5vUGxhbm8gPSB7XG4gICAgICAgIGlkOiByb3R1bG8sXG4gICAgICAgIG5pdmVsOiBuaXZlbCxcbiAgICAgICAgZXhwYW5zaXZlbDogdGVtRmlsaG9zLFxuICAgICAgICBlc3RhRXhwYW5kaWRvOiBlc3RhRXhwYW5kaWRvLFxuICAgICAgICBpc0xhc3Q6IGluZGV4ID09PSBub2Rlcy5sZW5ndGggLSAxLFxuICAgICAgICBkYWRvc09yaWdpbmFpczogbm9kZVxuICAgICAgfTtcbiAgICAgIFxuICAgICAgbGlzdGEucHVzaChub1BsYW5vKTtcblxuICAgICAgaWYgKGVzdGFFeHBhbmRpZG8gJiYgdGVtRmlsaG9zKSB7XG4gICAgICAgIGNvbnN0IGZpbGhvc1BsYW5vcyA9IHRoaXMudHJhbnNmb3JtYXJQYXJhTGlzdGFQbGFuYU90aW1pemFkYShub2RlLmZpbGhvcyEsIG5pdmVsICsgMSk7XG4gICAgICAgIGxpc3RhLnB1c2goLi4uZmlsaG9zUGxhbm9zKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBcbiAgICByZXR1cm4gbGlzdGE7XG4gIH1cblxuICB0cmFja0J5Tm9kZShpbmRleDogbnVtYmVyLCBub1BsYW5vOiBOb1BsYW5vKTogc3RyaW5nIHtcbiAgICByZXR1cm4gbm9QbGFuby5pZDtcbiAgfVxuXG4gIGV4ZWN1dGVDb2xsYXBzZWQoKSB7XG4gICAgY29uc3QgdG9kb3NDb2xhcHNhZG9zID0gdGhpcy5jb2xsYXBzZWRBbGwoKTtcbiAgICBcbiAgICBpZiAodG9kb3NDb2xhcHNhZG9zKSB7XG4gICAgICB0aGlzLmV4cGFuZGlyVG9kb3NPdGltaXphZG8oKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jb2xhcHNhclRvZG9zT3RpbWl6YWRvKCk7XG4gICAgfVxuICAgIFxuICAgIHRoaXMuZm9yY2FyQXR1YWxpemFjYW9MaXN0YSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBleHBhbmRpclRvZG9zKCk6IHZvaWQge1xuICAgIHRoaXMuZXhwYW5kaXJUb2Rvc090aW1pemFkbygpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb2xhcHNhclRvZG9zKCk6IHZvaWQge1xuICAgIHRoaXMuY29sYXBzYXJUb2Rvc090aW1pemFkbygpO1xuICB9XG5cbiAgcHJpdmF0ZSBleHBhbmRpclRvZG9zT3RpbWl6YWRvKCk6IHZvaWQge1xuICAgIGNvbnN0IGRhZG9zID0gdGhpcy5vYnRlckRhZG9zT3RpbWl6YWRvKCk7XG4gICAgY29uc3Qgc3RhY2s6IE5vQXJ2b3JlW10gPSBbLi4uZGFkb3NdO1xuICAgIFxuICAgIHdoaWxlIChzdGFjay5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBub2RlID0gc3RhY2sucG9wKCkhO1xuICAgICAgXG4gICAgICBpZiAobm9kZS5maWxob3MgJiYgbm9kZS5maWxob3MubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLm1hcGFEZUV4cGFuc2FvLnNldChub2RlLnJvdHVsbywgdHJ1ZSk7XG4gICAgICAgIHN0YWNrLnB1c2goLi4ubm9kZS5maWxob3MpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY29sYXBzYXJUb2Rvc090aW1pemFkbygpOiB2b2lkIHtcbiAgICBjb25zdCBkYWRvcyA9IHRoaXMub2J0ZXJEYWRvc090aW1pemFkbygpO1xuICAgIGNvbnN0IHN0YWNrOiBOb0Fydm9yZVtdID0gWy4uLmRhZG9zXTtcbiAgICBcbiAgICB3aGlsZSAoc3RhY2subGVuZ3RoID4gMCkge1xuICAgICAgY29uc3Qgbm9kZSA9IHN0YWNrLnBvcCgpITtcbiAgICAgIFxuICAgICAgaWYgKG5vZGUuZmlsaG9zICYmIG5vZGUuZmlsaG9zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy5tYXBhRGVFeHBhbnNhby5zZXQobm9kZS5yb3R1bG8sIGZhbHNlKTtcbiAgICAgICAgc3RhY2sucHVzaCguLi5ub2RlLmZpbGhvcyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBwZXJjb3JyZXJUb2Rvc05vcyhub2RlczogTm9BcnZvcmVbXSwgY2FsbGJhY2s6IChub2RlOiBOb0Fydm9yZSkgPT4gdm9pZCk6IHZvaWQge1xuICAgIG5vZGVzLmZvckVhY2gobm9kZSA9PiB7XG4gICAgICBjYWxsYmFjayhub2RlKTtcbiAgICAgIGlmIChub2RlLmZpbGhvcyAmJiBub2RlLmZpbGhvcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMucGVyY29ycmVyVG9kb3NOb3Mobm9kZS5maWxob3MsIGNhbGxiYWNrKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXR1YWxpemFyRXN0YWRvQ29sbGFwc2VCdXR0b24oKTogdm9pZCB7XG4gICAgY29uc3Qgbm9zRXhwYW5kaXZlaXMgPSB0aGlzLm9idGVyVG9kb3NOb3NFeHBhbmRpdmVpcygpO1xuICAgIGNvbnN0IG5vc0V4cGFuZGlkb3MgPSBub3NFeHBhbmRpdmVpcy5maWx0ZXIobm9kZSA9PiBcbiAgICAgIHRoaXMubWFwYURlRXhwYW5zYW8uZ2V0KG5vZGUucm90dWxvKSA/PyAobm9kZS5lc3RhRXhwYW5kaWRvID8/IGZhbHNlKVxuICAgICk7XG5cbiAgICBjb25zdCB0b2Rvc0ZlY2hhZG9zID0gbm9zRXhwYW5kaWRvcy5sZW5ndGggPT09IDA7XG5cbiAgICBpZiAodG9kb3NGZWNoYWRvcykge1xuICAgICAgdGhpcy5jb2xsYXBzZWRBbGwuc2V0KHRydWUpO1xuICAgICAgdGhpcy5pY29uQ29sbGFwc2VkLnNldCgnZXhwYW5kX2NvbnRlbnQnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jb2xsYXBzZWRBbGwuc2V0KGZhbHNlKTtcbiAgICAgIHRoaXMuaWNvbkNvbGxhcHNlZC5zZXQoJ2NvbGxhcHNlX2FsbCcpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgb2J0ZXJUb2Rvc05vc0V4cGFuZGl2ZWlzKCk6IE5vQXJ2b3JlW10ge1xuICAgIGNvbnN0IG5vc0V4cGFuZGl2ZWlzOiBOb0Fydm9yZVtdID0gW107XG4gICAgXG4gICAgdGhpcy5wZXJjb3JyZXJUb2Rvc05vcyh0aGlzLm9idGVyRGFkb3MoKSwgKG5vZGUpID0+IHtcbiAgICAgIGlmIChub2RlLmZpbGhvcyAmJiBub2RlLmZpbGhvcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIG5vc0V4cGFuZGl2ZWlzLnB1c2gobm9kZSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgXG4gICAgcmV0dXJuIG5vc0V4cGFuZGl2ZWlzO1xuICB9XG5cbiAgcHJpdmF0ZSBjb21iaW5hckVzdHJ1dHVyYUNvbURhZG9zKGVzdHJ1dHVyYTogRXN0cnV0dXJhQXJ2b3JlW10sIGRhZG9zOiBEYWRvc0Fydm9yZVtdKTogTm9BcnZvcmVbXSB7XG4gICAgY29uc3QgbWFwYURhZG9zID0gbmV3IE1hcChkYWRvcy5tYXAoZCA9PiBbZC5pZCwgZF0pKTtcbiAgICBjb25zdCBtYXBhRXN0cnV0dXJhID0gbmV3IE1hcDxudW1iZXIsIE5vQXJ2b3JlPigpO1xuICAgIGNvbnN0IHJhaXo6IE5vQXJ2b3JlW10gPSBbXTtcblxuICAgIGVzdHJ1dHVyYVxuICAgICAgLnNvcnQoKGEsIGIpID0+IChhLm9yZGVtIHx8IDApIC0gKGIub3JkZW0gfHwgMCkpIFxuICAgICAgLmZvckVhY2goZXN0ID0+IHtcbiAgICAgICAgY29uc3QgZGFkbyA9IG1hcGFEYWRvcy5nZXQoZXN0LmlkKTtcbiAgICAgICAgXG4gICAgICAgIGNvbnN0IG5vOiBOb0Fydm9yZSA9IHtcbiAgICAgICAgICByb3R1bG86IGRhZG8/LnJvdHVsbyB8fCBlc3QubGFiZWwsXG4gICAgICAgICAgaWNvbmU6IGVzdC5pY29uZSxcbiAgICAgICAgICBjb3I6IGVzdC5jb3IsXG4gICAgICAgICAgYXRpdm86IGRhZG8/LmF0aXZvID8/IHRydWUsXG4gICAgICAgICAgZXN0YUV4cGFuZGlkbzogZXN0LmVzdGFFeHBhbmRpZG8sXG4gICAgICAgICAgZmlsaG9zOiBbXSxcbiAgICAgICAgICBhY3Rpb25zOiBlc3QuYWN0aW9ucyxcbiAgICAgICAgICBkYXRhOiBlc3QuZGF0YVxuICAgICAgICB9O1xuICAgICAgICBcbiAgICAgICAgbWFwYUVzdHJ1dHVyYS5zZXQoZXN0LmlkLCBubyk7XG4gICAgICB9KTtcblxuICAgIGVzdHJ1dHVyYS5mb3JFYWNoKGVzdCA9PiB7XG4gICAgICBjb25zdCBubyA9IG1hcGFFc3RydXR1cmEuZ2V0KGVzdC5pZCkhO1xuICAgICAgXG4gICAgICBpZiAoIWVzdC5wYXJlbnRJZCkge1xuICAgICAgICByYWl6LnB1c2gobm8pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgcGFpID0gbWFwYUVzdHJ1dHVyYS5nZXQoZXN0LnBhcmVudElkKTtcbiAgICAgICAgaWYgKHBhaSkge1xuICAgICAgICAgIHBhaS5maWxob3MhLnB1c2gobm8pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gcmFpejtcbiAgfVxuXG4gIGV4ZWN1dGVBZGQoKSB7XG4gICAgdGhpcy5vbkFkZENsaWNrLmVtaXQoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuX2NhY2hlZERhZG9zID0gbnVsbDtcbiAgICB0aGlzLl9jYWNoZWRMaXN0YVBsYW5hID0gbnVsbDtcbiAgICB0aGlzLl9kYWRvc0hhc2ggPSAnJztcbiAgICB0aGlzLl9saXN0YVBsYW5hSGFzaCA9ICcnOyBcbiAgfVxuXG59XG4iLCI8ZGl2IGNsYXNzPVwiZ3JpZC1jb250YWluZXIgaC1mdWxsXCI+XG4gIDxzcGFuIFxuICAgIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCB0ZXh0LXNtIHRleHQtNTAwIG14LTEgcC0xIGN1cnNvci1wb2ludGVyIGhvdmVyOnN1cmZhY2UtMzAwXCJcbiAgICBzdHlsZT1cImJvcmRlci1yYWRpdXM6IDRweDsgbWFyZ2luLXRvcDogMTJweDtcIiBcbiAgICAoY2xpY2spPVwiZXhlY3V0ZUNvbGxhcHNlZCgpXCJcbiAgICBbcFRvb2x0aXBdPVwiY29sbGFwc2VkQWxsKCkgPyAnRXhwYW5kaXIgdHVkbycgOiAnUmVjb2xoZXIgdHVkbydcIlxuICA+XG4gICAge3sgaWNvbkNvbGxhcHNlZCgpIH19XG4gIDwvc3Bhbj5cbiAgPGNkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydCBjbGFzcz1cImgtZnVsbCB3LWZ1bGxcIiBpdGVtU2l6ZT1cIjQwXCI+XG4gICAgXG4gICAgPHVsIGNsYXNzPVwibGlzdGEtYXJ2b3JlLXZpcnR1YWwgcHItMiBweS0yXCI+XG4gICAgICA8bm8tYXJ2b3JlIFxuICAgICAgICAqY2RrVmlydHVhbEZvcj1cImxldCBubyBvZiBsaXN0YVBsYW5hKCk7IHRyYWNrQnk6IHRyYWNrQnlOb2RlXCIgXG4gICAgICAgIFtub1BsYW5vXT1cIm5vXCJcbiAgICAgICAgKG5vQWx0ZXJuYWRvKT1cImFsdGVybmFyTm8oJGV2ZW50KVwiXG4gICAgICAgIChhY3Rpb25FeGVjdXRlZCk9XCJvbkFjdGlvbkV4ZWN1dGVkKCRldmVudClcIiAvPlxuICAgIDwvdWw+XG5cbiAgPC9jZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnQ+XG48L2Rpdj4iXX0=
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { EventEmitter, Component, Input, Output, ViewChild, Injectable, signal, Directive, Pipe, ViewChildren, ContentChildren, forwardRef, viewChild, input, model, output, effect, computed, HostListener, TemplateRef, ContentChild, NgModule, untracked, inject, ChangeDetectionStrategy, ViewContainerRef, HostBinding, contentChildren, Injector } from '@angular/core';
|
|
2
|
+
import { EventEmitter, Component, Input, Output, ViewChild, Injectable, signal, Directive, Pipe, ViewChildren, ContentChildren, forwardRef, viewChild, input, model, output, effect, computed, HostListener, TemplateRef, ContentChild, NgModule, untracked, inject, ChangeDetectionStrategy, ViewContainerRef, HostBinding, contentChildren, Injector, ChangeDetectorRef } from '@angular/core';
|
|
3
3
|
import * as i1 from '@angular/common';
|
|
4
4
|
import { CommonModule, NgClass, DatePipe } from '@angular/common';
|
|
5
5
|
import * as i1$1 from 'primeng/button';
|
|
@@ -13380,6 +13380,7 @@ class KvTreeEnvironmentComponent {
|
|
|
13380
13380
|
this.showAddButton = input(true);
|
|
13381
13381
|
this.onAddClick = new EventEmitter();
|
|
13382
13382
|
this.onSelectedItem = new EventEmitter();
|
|
13383
|
+
this.cdr = inject(ChangeDetectorRef);
|
|
13383
13384
|
this.mapaDeExpansao = new Map();
|
|
13384
13385
|
this._cachedDados = null;
|
|
13385
13386
|
this._dadosHash = null;
|
|
@@ -13418,10 +13419,25 @@ class KvTreeEnvironmentComponent {
|
|
|
13418
13419
|
return;
|
|
13419
13420
|
const estadoAtual = this.mapaDeExpansao.get(noPlano.dadosOriginais.rotulo) ?? false;
|
|
13420
13421
|
this.mapaDeExpansao.set(noPlano.dadosOriginais.rotulo, !estadoAtual);
|
|
13422
|
+
this.forcarAtualizacaoLista();
|
|
13423
|
+
}
|
|
13424
|
+
forcarAtualizacaoLista() {
|
|
13421
13425
|
this._cachedListaPlana = null;
|
|
13422
13426
|
this._listaPlanaHash = null;
|
|
13423
|
-
this.
|
|
13424
|
-
this.
|
|
13427
|
+
const dados = this.obterDadosOtimizado();
|
|
13428
|
+
const novaListaPlana = this.transformarParaListaPlanaOtimizada(dados);
|
|
13429
|
+
this.listaPlana.set(novaListaPlana);
|
|
13430
|
+
this.cdr.detectChanges();
|
|
13431
|
+
setTimeout(() => {
|
|
13432
|
+
const expansaoHash = Array.from(this.mapaDeExpansao.entries())
|
|
13433
|
+
.sort(([a], [b]) => a.localeCompare(b))
|
|
13434
|
+
.map(([k, v]) => `${k}:${v}`)
|
|
13435
|
+
.join(',');
|
|
13436
|
+
this._listaPlanaHash = `${this._dadosHash}:${expansaoHash}`;
|
|
13437
|
+
this._cachedListaPlana = novaListaPlana;
|
|
13438
|
+
this.cdr.detectChanges();
|
|
13439
|
+
this.atualizarEstadoCollapseButton();
|
|
13440
|
+
}, 0);
|
|
13425
13441
|
}
|
|
13426
13442
|
criarHashDados(estrutura, dados, simples, arvore) {
|
|
13427
13443
|
const estruturaHash = `e:${estrutura.length}:${estrutura.map(e => `${e.id}:${e.label}`).join(',')}`;
|
|
@@ -13520,31 +13536,24 @@ class KvTreeEnvironmentComponent {
|
|
|
13520
13536
|
}
|
|
13521
13537
|
transformarParaListaPlanaOtimizada(nodes, nivel = 0) {
|
|
13522
13538
|
const lista = [];
|
|
13523
|
-
|
|
13524
|
-
|
|
13525
|
-
const
|
|
13526
|
-
|
|
13527
|
-
|
|
13528
|
-
|
|
13529
|
-
|
|
13530
|
-
|
|
13531
|
-
|
|
13532
|
-
|
|
13533
|
-
|
|
13534
|
-
|
|
13535
|
-
|
|
13536
|
-
|
|
13537
|
-
|
|
13538
|
-
lista.push(
|
|
13539
|
-
|
|
13540
|
-
|
|
13541
|
-
nodes: node.filhos,
|
|
13542
|
-
nivel: currentNivel + 1,
|
|
13543
|
-
parentIndex: lista.length - 1
|
|
13544
|
-
});
|
|
13545
|
-
}
|
|
13546
|
-
});
|
|
13547
|
-
}
|
|
13539
|
+
nodes.forEach((node, index) => {
|
|
13540
|
+
const rotulo = node.rotulo;
|
|
13541
|
+
const estaExpandido = this.mapaDeExpansao.get(rotulo) ?? (node.estaExpandido ?? false);
|
|
13542
|
+
const temFilhos = !!(node.filhos && node.filhos.length > 0);
|
|
13543
|
+
const noPlano = {
|
|
13544
|
+
id: rotulo,
|
|
13545
|
+
nivel: nivel,
|
|
13546
|
+
expansivel: temFilhos,
|
|
13547
|
+
estaExpandido: estaExpandido,
|
|
13548
|
+
isLast: index === nodes.length - 1,
|
|
13549
|
+
dadosOriginais: node
|
|
13550
|
+
};
|
|
13551
|
+
lista.push(noPlano);
|
|
13552
|
+
if (estaExpandido && temFilhos) {
|
|
13553
|
+
const filhosPlanos = this.transformarParaListaPlanaOtimizada(node.filhos, nivel + 1);
|
|
13554
|
+
lista.push(...filhosPlanos);
|
|
13555
|
+
}
|
|
13556
|
+
});
|
|
13548
13557
|
return lista;
|
|
13549
13558
|
}
|
|
13550
13559
|
trackByNode(index, noPlano) {
|
|
@@ -13558,10 +13567,7 @@ class KvTreeEnvironmentComponent {
|
|
|
13558
13567
|
else {
|
|
13559
13568
|
this.colapsarTodosOtimizado();
|
|
13560
13569
|
}
|
|
13561
|
-
this.
|
|
13562
|
-
this._listaPlanaHash = null;
|
|
13563
|
-
this.gerarListaPlanaOtimizada();
|
|
13564
|
-
this.atualizarEstadoCollapseButton();
|
|
13570
|
+
this.forcarAtualizacaoLista();
|
|
13565
13571
|
}
|
|
13566
13572
|
expandirTodos() {
|
|
13567
13573
|
this.expandirTodosOtimizado();
|