@stiunb/unb-lib-components 18.0.22 → 18.0.23
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/unb-pessoa/unb-pessoa-email-form/unb-pessoa-email-form.mjs +34 -11
- package/esm2022/lib/unb-pessoa/unb-pessoa-email-form/unb-pessoa-email-list.mjs +65 -47
- package/esm2022/lib/unb-pessoa/unb-pessoa-endereco-form/unb-pessoa-endereco-form.mjs +102 -14
- package/esm2022/lib/unb-pessoa/unb-pessoa-endereco-form/unb-pessoa-endereco-list.mjs +71 -55
- package/esm2022/lib/unb-pessoa/unb-pessoa-form/unb-pessoa-form.component.mjs +227 -42
- package/esm2022/lib/unb-pessoa/unb-pessoa-models/unb-pessoa-email.model.mjs +1 -1
- package/esm2022/lib/unb-pessoa/unb-pessoa-models/unb-pessoa-endereco.model.mjs +1 -1
- package/esm2022/lib/unb-pessoa/unb-pessoa-models/unb-pessoa.model.mjs +2 -1
- package/esm2022/lib/unb-pessoa/unb-pessoa-pesquisar/unb-pessoa-pesquisar.component.mjs +141 -8
- package/esm2022/lib/unb-pessoa/unb-pessoa-telefone-form/unb-pessoa-telefone-form.mjs +62 -8
- package/esm2022/lib/unb-pessoa/unb-pessoa-telefone-form/unb-pessoa-telefone-list.mjs +62 -32
- package/esm2022/lib/unb-pessoa/unb-pessoa.module.mjs +9 -1
- package/esm2022/lib/unb-pessoa/unb-pessoa.service.mjs +9 -9
- package/esm2022/lib/unb-pessoa/unb-tipo-pessoa.enum.mjs +1 -1
- package/esm2022/lib/unb-usuario/oidc-decoded-token.mjs +1 -1
- package/esm2022/lib/unb-usuario/oidc-user-data.mjs +1 -1
- package/esm2022/public-api.mjs +14 -13
- package/esm2022/stiunb-unb-lib-components.mjs +5 -0
- package/fesm2022/stiunb-unb-lib-components.mjs +2469 -0
- package/fesm2022/stiunb-unb-lib-components.mjs.map +1 -0
- package/index.d.ts +1 -1
- package/lib/unb-pessoa/unb-pessoa-email-form/unb-pessoa-email-form.d.ts +3 -3
- package/lib/unb-pessoa/unb-pessoa-email-form/unb-pessoa-email-list.d.ts +6 -5
- package/lib/unb-pessoa/unb-pessoa-endereco-form/unb-pessoa-endereco-form.d.ts +6 -3
- package/lib/unb-pessoa/unb-pessoa-endereco-form/unb-pessoa-endereco-list.d.ts +6 -5
- package/lib/unb-pessoa/unb-pessoa-form/unb-pessoa-form.component.d.ts +17 -5
- package/lib/unb-pessoa/unb-pessoa-models/unb-pessoa-email.model.d.ts +1 -0
- package/lib/unb-pessoa/unb-pessoa-models/unb-pessoa-endereco.model.d.ts +3 -2
- package/lib/unb-pessoa/unb-pessoa-models/unb-pessoa.model.d.ts +5 -4
- package/lib/unb-pessoa/unb-pessoa-pesquisar/unb-pessoa-pesquisar.component.d.ts +14 -1
- package/lib/unb-pessoa/unb-pessoa-telefone-form/unb-pessoa-telefone-form.d.ts +2 -2
- package/lib/unb-pessoa/unb-pessoa-telefone-form/unb-pessoa-telefone-list.d.ts +6 -5
- package/lib/unb-pessoa/unb-pessoa.module.d.ts +20 -18
- package/lib/unb-pessoa/unb-pessoa.service.d.ts +2 -1
- package/package.json +5 -5
- package/public-api.d.ts +10 -10
- package/esm2022/unb-lib-components.mjs +0 -5
- package/fesm2022/unb-lib-components.mjs +0 -1923
- package/fesm2022/unb-lib-components.mjs.map +0 -1
|
@@ -2,4 +2,4 @@ export class UnbPessoaEmail {
|
|
|
2
2
|
}
|
|
3
3
|
export class UnbPessoaEmailTipo {
|
|
4
4
|
}
|
|
5
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5iLXBlc3NvYS1lbWFpbC5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VuYi1saWItY29tcG9uZW50cy9zcmMvbGliL3VuYi1wZXNzb2EvdW5iLXBlc3NvYS1tb2RlbHMvdW5iLXBlc3NvYS1lbWFpbC5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLE9BQU8sY0FBYztDQVExQjtBQUVELE1BQU0sT0FBTyxrQkFBa0I7Q0FJOUIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY2xhc3MgVW5iUGVzc29hRW1haWwge1xyXG4gIGNvZGlnbz86IG51bWJlcjtcclxuICB0aXBvRW1haWxDb2RpZ28/OiBudW1iZXI7XHJcbiAgdGlwbz86IHN0cmluZztcclxuICBlbWFpbD86IHN0cmluZztcclxuICBhdXRvcml6YWNhbz86IGJvb2xlYW47XHJcbiAgb3JkZW0/OiBudW1iZXI7XHJcbiAgb3JkZW1FbWFpbD86IG51bWJlciB8IG51bGw7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBVbmJQZXNzb2FFbWFpbFRpcG8ge1xyXG4gIGluZGV4PzogbnVtYmVyO1xyXG4gIGNvZGlnbz86IG51bWJlcjtcclxuICBkZW5vbWluYWNhbz86IHN0cmluZztcclxufSJdfQ==
|
|
@@ -2,4 +2,4 @@ export class UnbPessoaEndereco {
|
|
|
2
2
|
}
|
|
3
3
|
export class UnbPessoaEnderecoTipo {
|
|
4
4
|
}
|
|
5
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5iLXBlc3NvYS1lbmRlcmVjby5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VuYi1saWItY29tcG9uZW50cy9zcmMvbGliL3VuYi1wZXNzb2EvdW5iLXBlc3NvYS1tb2RlbHMvdW5iLXBlc3NvYS1lbmRlcmVjby5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLE9BQU8saUJBQWlCO0NBa0I3QjtBQUVELE1BQU0sT0FBTyxxQkFBcUI7Q0FHakMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY2xhc3MgVW5iUGVzc29hRW5kZXJlY28ge1xyXG4gIGNvZGlnbz86IG51bWJlcjtcclxuICB0aXBvRW5kZXJlY29Db2RpZ28/OiBudW1iZXI7XHJcbiAgdGlwbz86IHN0cmluZztcclxuICBjZXA/OiBzdHJpbmc7XHJcbiAgbG9ncmFkb3Vybz86IHN0cmluZztcclxuICBtdW5pY2lwaW8/OiBzdHJpbmc7XHJcbiAgYmFpcnJvPzogc3RyaW5nO1xyXG4gIHVmRW5kZXJlY28/OiBzdHJpbmc7IFxyXG4gIHVmPzogc3RyaW5nO1xyXG4gIHBhaXM/OiBzdHJpbmc7XHJcbiAgY29tcGxlbWVudG8/OiBzdHJpbmc7XHJcbiAgY2FpeGFQb3N0YWw/OiBzdHJpbmc7XHJcbiAgY29ycmVzcG9uZGVuY2lhPzogYm9vbGVhbjtcclxuICBvcmRlbUVuZGVyZWNvPzogbnVtYmVyIHwgbnVsbDtcclxuICBvcmRlbT86IG51bWJlcjtcclxuICBwYWlzRW5kZXJlY29Db2RpZ28/OiBudW1iZXIgfCBudWxsO1xyXG4gIG11bmljaXBpb0NvZGlnbz86IG51bWJlcjtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFVuYlBlc3NvYUVuZGVyZWNvVGlwbyB7XHJcbiAgY29kaWdvPzogbnVtYmVyO1xyXG4gIGRlbm9taW5hY2FvPzogc3RyaW5nO1xyXG59Il19
|
|
@@ -2,5 +2,6 @@
|
|
|
2
2
|
* Essa eh uma classe base, com propriedades comum a todas as outras pessoas.
|
|
3
3
|
* */
|
|
4
4
|
export class UnbPessoaModel {
|
|
5
|
+
;
|
|
5
6
|
}
|
|
6
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5iLXBlc3NvYS5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VuYi1saWItY29tcG9uZW50cy9zcmMvbGliL3VuYi1wZXNzb2EvdW5iLXBlc3NvYS1tb2RlbHMvdW5iLXBlc3NvYS5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFNQTs7S0FFSztBQUNMLE1BQU0sT0FBTyxjQUFjO0lBK0JhLENBQUM7Q0FzQ3hDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVGlwb1Blc3NvYUVudW0gfSBmcm9tIFwiLi4vdW5iLXRpcG8tcGVzc29hLmVudW1cIjtcclxuaW1wb3J0IHsgVW5iUGVzc29hRW1haWwgfSBmcm9tIFwiLi91bmItcGVzc29hLWVtYWlsLm1vZGVsXCI7XHJcbmltcG9ydCB7IFVuYlBlc3NvYUVuZGVyZWNvIH0gZnJvbSBcIi4vdW5iLXBlc3NvYS1lbmRlcmVjby5tb2RlbFwiO1xyXG5pbXBvcnQgeyBVbmJQZXNzb2FQYWlzIH0gZnJvbSBcIi4vdW5iLXBlc3NvYS1wYWlzXCI7XHJcbmltcG9ydCB7IFVuYlBlc3NvYVRlbGVmb25lIH0gZnJvbSBcIi4vdW5iLXBlc3NvYS10ZWxlZm9uZS5tb2RlbFwiO1xyXG5cclxuLyoqIFxyXG4gKiBFc3NhIGVoIHVtYSBjbGFzc2UgYmFzZSwgY29tIHByb3ByaWVkYWRlcyBjb211bSBhIHRvZGFzIGFzIG91dHJhcyBwZXNzb2FzLiBcclxuICogKi9cclxuZXhwb3J0IGNsYXNzIFVuYlBlc3NvYU1vZGVsIHtcclxuICBpZFBlc3NvYSE6IG51bWJlcjtcclxuICBjb2RpZ29QZXNzb2EhOiBudW1iZXI7ICAgXHJcbiAgZW5kZXJlY29zITogVW5iUGVzc29hRW5kZXJlY29bXTtcclxuICB0ZWxlZm9uZXMhOiBVbmJQZXNzb2FUZWxlZm9uZVtdO1xyXG4gIGVtYWlscyE6IFVuYlBlc3NvYUVtYWlsW107XHJcbiAgdGlwb1Blc3NvYSE6IFRpcG9QZXNzb2FFbnVtOyAvLyBpbmljaWFsaXphIGNvbSBvIGZpc2ljYSBzZWxlY2lvbmFkb1xyXG5cclxuICAvLyBBdHJpYnV0b3MgZGEgUGVzc29hIEbDrXNpY2FcclxuICBpZFNlcnZpZG9yITogbnVtYmVyO1xyXG4gIG1hdHJpY3VsYVNpcGVzITogbnVtYmVyO1xyXG4gIG1hdHJpY3VsYVNpYXBlITogbnVtYmVyO1xyXG4gIG5vbWUhOiBzdHJpbmc7XHJcbiAgY3BmITogc3RyaW5nO1xyXG4gIHJnITogc3RyaW5nO1xyXG4gIHJnT3JnYW8hOiBzdHJpbmc7XHJcbiAgcmdVZiE6IHN0cmluZztcclxuICByZ0RhdGFFbWlzc2FvITogc3RyaW5nO1xyXG4gIG51bWVyb1RpdHVsb0VsZWl0b3IhOiBzdHJpbmc7XHJcbiAgZGF0YUVtaXNzYW9UaXR1bG9FbGVpdG9yITogc3RyaW5nO1xyXG4gIHpvbmFUaXR1bG9FbGVpdG9yITogc3RyaW5nO1xyXG4gIHNlY2FvVGl0dWxvRWxlaXRvciE6IHN0cmluZztcclxuICB1ZlRpdHVsb0VsZWl0b3IhOiBzdHJpbmc7XHJcbiAgbnVtZXJvUmVzZXJ2aXN0YSE6IHN0cmluZztcclxuICBzZXJpZVJlc2VydmlzdGEhOiBzdHJpbmc7XHJcbiAgb3JnYW9SZXNlcnZpc3RhITogc3RyaW5nO1xyXG4gIGRhdGFOYXNjaW1lbnRvITogRGF0ZSB8IG51bGw7XHJcbiAgXHJcbiAgcGFpc05hc2NpbWVudG8hOiBzdHJpbmc7XHJcbiAgdWZOYXNjaW1lbnRvITogc3RyaW5nO1xyXG4gIG5hdHVyYWxpZGFkZSE6IHN0cmluZztcclxuICBjb2RpZ29QYWlzTmFzY2ltZW50byE6IG51bWJlciB8IG51bGwgOztcclxuICBjb2RpZ29QYWlzUGFzc2Fwb3J0ZSE6IG51bWJlcjtcclxuICBjb2RpZ29Fc3RhZG9DaXZpbCE6IG51bWJlciB8IG51bGwgO1xyXG4gIG5hY2lvbmFsaWRhZGUhOiBzdHJpbmc7XHJcbiAgZXN0YWRvQ2l2aWwhOiBzdHJpbmc7XHJcbiAgbm9tZVBhaSE6IHN0cmluZztcclxuICBub21lTWFlITogc3RyaW5nO1xyXG4gIHRpcG9TYW5ndWluZW8hOiBzdHJpbmc7XHJcbiAgZXNjb2xhcmlkYWRlITogbnVtYmVyIHxudWxsO1xyXG4gIG51bWVyb0NhcnRlaXJhVHJhYmFsaG8hOiBzdHJpbmc7XHJcbiAgc2VyaWVDYXJ0ZWlyYVRyYWJhbGhvITogc3RyaW5nO1xyXG4gIHVmQ2FydGVpcmFUcmFiYWxobyE6IHN0cmluZztcclxuICBwaXNQYXNlcCE6IHN0cmluZztcclxuICBudW1lcm9IYWJpbGl0YWNhbyE6IHN0cmluZztcclxuICByZWdpc3Ryb0hhYmlsaXRhY2FvITogc3RyaW5nO1xyXG4gIGRhdGFFbWlzc2FvSGFiaWxpdGFjYW8hOiBzdHJpbmc7XHJcbiAgZGF0YVZhbGlkYWRlSGFiaWxpdGFjYW8hOiBzdHJpbmc7XHJcbiAgY2F0ZWdvcmlhSGFiaWxpdGFjYW8hOiBzdHJpbmc7XHJcbiAgZGVmaWNpZW5jaWFGaXNpY2FIYWJpbGl0YWNhbyE6IHN0cmluZztcclxuICBwcmltZWlyYUhhYmlsaXRhY2FvITogc3RyaW5nO1xyXG4gIGF1dG9DYWRhc3RybyE6IGJvb2xlYW47XHJcbiAgbm9tZVNvY2lhbCE6IHN0cmluZztcclxuICBzZXhvITogc3RyaW5nOyAgXHJcbiAgY29kaWdvU2V4byE6IG51bWJlcjtcclxuXHJcbiAgLy8gQXRyaWJ1dG9zIGRhIFBlc3NvYSBFc3RyYW5nZWlyYVxyXG4gIHBhc3NhcG9ydGUhOiBzdHJpbmc7XHJcbiAgcGFpc09yaWdlbSE6IHN0cmluZztcclxuICBkYXRhQ2hlZ2FkYUJyYXNpbCE6IERhdGUgfCBudWxsO1xyXG5cclxuICAvLyBBdHJpYnV0b3MgZGEgUGVzc29hIEp1csOtZGljYVxyXG4gIGNucGohOiBzdHJpbmc7XHJcbiAgcmF6YW9Tb2NpYWwhOiBzdHJpbmc7XHJcbiAgbm9tZUZhbnRhc2lhITogc3RyaW5nO1xyXG4gIHNpZ2xhITogc3RyaW5nO1xyXG4gIHBhaXMhOiBVbmJQZXNzb2FQYWlzO1xyXG4gIHBhZ2luYVdlYiE6IHN0cmluZztcclxuXHJcbn0iXX0=
|
|
@@ -2,6 +2,7 @@ import { Component, EventEmitter, Input, Output } from '@angular/core';
|
|
|
2
2
|
import { UnbUtils } from '../../utils/unb-utils';
|
|
3
3
|
import { UnbPessoaModel } from '../unb-pessoa-models/unb-pessoa.model';
|
|
4
4
|
import { TipoPessoaEnum } from '../unb-tipo-pessoa.enum';
|
|
5
|
+
import { forkJoin } from 'rxjs';
|
|
5
6
|
import * as i0 from "@angular/core";
|
|
6
7
|
import * as i1 from "../unb-pessoa.service";
|
|
7
8
|
import * as i2 from "@angular/material/snack-bar";
|
|
@@ -11,7 +12,7 @@ import * as i5 from "@angular/material/icon";
|
|
|
11
12
|
import * as i6 from "@angular/material/button";
|
|
12
13
|
import * as i7 from "@angular/material/form-field";
|
|
13
14
|
import * as i8 from "@angular/material/input";
|
|
14
|
-
import * as i9 from "@angular/material/progress-
|
|
15
|
+
import * as i9 from "@angular/material/progress-spinner";
|
|
15
16
|
import * as i10 from "@angular/material/radio";
|
|
16
17
|
export class UnbPessoaPesquisarComponent {
|
|
17
18
|
constructor(pessoaService, snackBar) {
|
|
@@ -22,6 +23,7 @@ export class UnbPessoaPesquisarComponent {
|
|
|
22
23
|
this.pesquisarPorCPF = true;
|
|
23
24
|
this.pesquisarPorCNPJ = true;
|
|
24
25
|
this.pesquisarPorEstrangeiro = true;
|
|
26
|
+
this.campoPesquisaMaxWidth = '400px';
|
|
25
27
|
this.pessoaEmitted = new EventEmitter();
|
|
26
28
|
this.pessoa = new UnbPessoaModel();
|
|
27
29
|
this.mostrarPesquisa = true;
|
|
@@ -31,6 +33,9 @@ export class UnbPessoaPesquisarComponent {
|
|
|
31
33
|
this.hint = ""; // dica que aparece debaixo do campo
|
|
32
34
|
// usado pra saber se mostra ou nao o botao de incluir pessoa
|
|
33
35
|
this.pessoaEncontrado = false;
|
|
36
|
+
this.listaTipoEndereco = [];
|
|
37
|
+
this.listaTipoTelefone = [];
|
|
38
|
+
this.listaTipoEmail = [];
|
|
34
39
|
}
|
|
35
40
|
ngOnInit() {
|
|
36
41
|
if (this.apiPessoaConfig.url.endsWith('/')) {
|
|
@@ -50,6 +55,21 @@ export class UnbPessoaPesquisarComponent {
|
|
|
50
55
|
}
|
|
51
56
|
// inicializa o serviço com a configuração da API
|
|
52
57
|
this.pessoaService.setApiConfig(this.apiPessoaConfig);
|
|
58
|
+
forkJoin({
|
|
59
|
+
tiposEnd: this.pessoaService.getTipoEndereco(),
|
|
60
|
+
tiposTel: this.pessoaService.getTipoTelefone(),
|
|
61
|
+
tiposEmail: this.pessoaService.getTipoEmail()
|
|
62
|
+
}).subscribe({
|
|
63
|
+
next: ({ tiposEnd, tiposTel, tiposEmail }) => {
|
|
64
|
+
this.listaTipoEndereco = tiposEnd;
|
|
65
|
+
this.listaTipoTelefone = tiposTel;
|
|
66
|
+
this.listaTipoEmail = tiposEmail;
|
|
67
|
+
},
|
|
68
|
+
error: (err) => {
|
|
69
|
+
this.handleError("Falha ao carregar dados de apoio. Recarregue a página.");
|
|
70
|
+
console.error("Erro no forkJoin do pesquisar:", err);
|
|
71
|
+
}
|
|
72
|
+
});
|
|
53
73
|
// Conta quantos dos inputs estão como true
|
|
54
74
|
const opcoesAtivas = [this.pesquisarPorCPF, this.pesquisarPorCNPJ, this.pesquisarPorEstrangeiro].filter(op => op).length;
|
|
55
75
|
// Exibe a opcao do tipo de pessoa, somente se mais de um estiver selecionado
|
|
@@ -147,20 +167,95 @@ export class UnbPessoaPesquisarComponent {
|
|
|
147
167
|
}
|
|
148
168
|
return true;
|
|
149
169
|
}
|
|
170
|
+
// Em unb-pessoa-pesquisar.component.ts
|
|
150
171
|
hadleResult(resultado) {
|
|
151
172
|
this.isLoading = false;
|
|
152
173
|
if (resultado) {
|
|
153
174
|
resultado.tipoPessoa = this.pessoa.tipoPessoa; // o backend nao retorna o tipo pessoa. entao tenho que atribuir antes
|
|
154
175
|
this.pessoa = resultado;
|
|
176
|
+
// --- SEÇÃO DE LIMPEZA DE DADOS PRINCIPAIS (VOCÊ JÁ TINHA) ---
|
|
177
|
+
if (this.pessoa.sexo) {
|
|
178
|
+
if (this.pessoa.sexo.toUpperCase().trim() === 'FEMININO') {
|
|
179
|
+
this.pessoa.codigoSexo = 2;
|
|
180
|
+
}
|
|
181
|
+
else if (this.pessoa.sexo.toUpperCase().trim() === 'MASCULINO') {
|
|
182
|
+
this.pessoa.codigoSexo = 1;
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
if (this.pessoa.dataNascimento) {
|
|
186
|
+
this.pessoa.dataNascimento = this.parseData(this.pessoa.dataNascimento);
|
|
187
|
+
}
|
|
188
|
+
if (this.pessoa.estadoCivil) {
|
|
189
|
+
this.pessoa.codigoEstadoCivil = this.parseCodigo(this.pessoa.estadoCivil);
|
|
190
|
+
}
|
|
191
|
+
if (this.pessoa.paisNascimento) {
|
|
192
|
+
this.pessoa.codigoPaisNascimento = this.parseCodigo(this.pessoa.paisNascimento);
|
|
193
|
+
}
|
|
194
|
+
if (this.pessoa.escolaridade) {
|
|
195
|
+
this.pessoa.escolaridade = this.parseCodigo(this.pessoa.escolaridade);
|
|
196
|
+
}
|
|
197
|
+
// 1. Processa Endereços
|
|
198
|
+
// O payload 'salvar' espera: ordemEndereco, tipoEnderecoCodigo, paisEnderecoCodigo, ufEndereco
|
|
199
|
+
// 1. Processa Endereços
|
|
200
|
+
if (this.pessoa.enderecos && this.listaTipoEndereco.length > 0) {
|
|
201
|
+
// --- CORREÇÃO: Adicionado 'i' ao forEach ---
|
|
202
|
+
this.pessoa.enderecos.forEach((end, i) => {
|
|
203
|
+
// Traduz o 'tipo' (string) para 'tipoEnderecoCodigo' (number)
|
|
204
|
+
if (!end.tipoEnderecoCodigo && end.tipo) {
|
|
205
|
+
const tipoEncontrado = this.listaTipoEndereco.find(t => t.denominacao?.toLowerCase() === end.tipo?.toLowerCase());
|
|
206
|
+
if (tipoEncontrado)
|
|
207
|
+
end.tipoEnderecoCodigo = tipoEncontrado.codigo;
|
|
208
|
+
}
|
|
209
|
+
// Traduz 'pais' (string '22 - BRASIL') para 'paisEnderecoCodigo' (number)
|
|
210
|
+
if (!end.paisEnderecoCodigo && end.pais) {
|
|
211
|
+
end.paisEnderecoCodigo = this.parseCodigo(end.pais);
|
|
212
|
+
}
|
|
213
|
+
// Mapeia 'ordem' -> 'ordemEndereco' ou usa o índice (i + 1)
|
|
214
|
+
// O payload de salvar (no form) espera 'ordemEndereco'
|
|
215
|
+
end.ordemEndereco = end.ordemEndereco || end.ordem || (i + 1);
|
|
216
|
+
// Mapeia 'uf' -> 'ufEndereco'
|
|
217
|
+
if (!end.ufEndereco && end.uf) {
|
|
218
|
+
end.ufEndereco = end.uf;
|
|
219
|
+
}
|
|
220
|
+
});
|
|
221
|
+
}
|
|
222
|
+
// 2. Processa Telefones
|
|
223
|
+
if (this.pessoa.telefones && this.listaTipoTelefone.length > 0) {
|
|
224
|
+
// --- CORREÇÃO: Adicionado 'i' ao forEach ---
|
|
225
|
+
this.pessoa.telefones.forEach((tel, i) => {
|
|
226
|
+
if (!tel.tipoTelefoneCodigo && tel.tipo) {
|
|
227
|
+
const tipoEncontrado = this.listaTipoTelefone.find(t => t.denominacao?.toLowerCase() === tel.tipo?.toLowerCase());
|
|
228
|
+
if (tipoEncontrado)
|
|
229
|
+
tel.tipoTelefoneCodigo = tipoEncontrado.codigo;
|
|
230
|
+
}
|
|
231
|
+
// --- CORREÇÃO: Lógica da Ordem ---
|
|
232
|
+
// O payload de salvar (no form) lê 'tel.ordem'
|
|
233
|
+
tel.ordem = tel.ordem || (i + 1);
|
|
234
|
+
});
|
|
235
|
+
}
|
|
236
|
+
// 3. Processa Emails
|
|
237
|
+
if (this.pessoa.emails && this.listaTipoEmail.length > 0) {
|
|
238
|
+
// --- CORREÇÃO: Adicionado 'i' ao forEach ---
|
|
239
|
+
this.pessoa.emails.forEach((email, i) => {
|
|
240
|
+
if (!email.tipoEmailCodigo && email.tipo) {
|
|
241
|
+
const tipoEncontrado = this.listaTipoEmail.find(t => t.denominacao?.toLowerCase() === email.tipo?.toLowerCase());
|
|
242
|
+
if (tipoEncontrado)
|
|
243
|
+
email.tipoEmailCodigo = tipoEncontrado.codigo;
|
|
244
|
+
}
|
|
245
|
+
// --- CORREÇÃO: Lógica da Ordem ---
|
|
246
|
+
// O payload de salvar (no form) lê 'email.ordem'
|
|
247
|
+
email.ordem = email.ordem || (i + 1);
|
|
248
|
+
});
|
|
249
|
+
}
|
|
155
250
|
if (this.pessoa.tipoPessoa == TipoPessoaEnum.FISICA) {
|
|
156
|
-
this.pessoa.cpf = UnbUtils.formataCpf(resultado.cpf);
|
|
251
|
+
this.pessoa.cpf = UnbUtils.formataCpf(resultado.cpf);
|
|
157
252
|
}
|
|
158
253
|
else if (this.pessoa.tipoPessoa == TipoPessoaEnum.JURIDICA) {
|
|
159
|
-
this.pessoa.cnpj = UnbUtils.formataCnpj(resultado.cnpj);
|
|
254
|
+
this.pessoa.cnpj = UnbUtils.formataCnpj(resultado.cnpj);
|
|
160
255
|
}
|
|
161
256
|
}
|
|
162
257
|
else {
|
|
163
|
-
// se chegar aki eh pq nao encontrou
|
|
258
|
+
// se chegar aki eh pq nao encontrou... (lógica que já existe)
|
|
164
259
|
let novaPessoa = new UnbPessoaModel();
|
|
165
260
|
novaPessoa.tipoPessoa = this.pessoa.tipoPessoa;
|
|
166
261
|
if (this.pessoa.tipoPessoa == TipoPessoaEnum.FISICA) {
|
|
@@ -172,11 +267,47 @@ export class UnbPessoaPesquisarComponent {
|
|
|
172
267
|
else {
|
|
173
268
|
novaPessoa.passaporte = this.pessoa.passaporte;
|
|
174
269
|
}
|
|
175
|
-
// agora sobreescrevemos, pq se tiver uma pessoa pesquisada com resultado correto, e pesquisar novamente, precisamos apagar a primeira pessoa.
|
|
176
270
|
this.pessoa = novaPessoa;
|
|
177
271
|
}
|
|
178
272
|
this.pessoaEmitted.emit(this.pessoa);
|
|
179
273
|
}
|
|
274
|
+
parseCodigo(valorString) {
|
|
275
|
+
if (typeof valorString === 'number') {
|
|
276
|
+
return valorString; // Já é um número
|
|
277
|
+
}
|
|
278
|
+
if (typeof valorString !== 'string' || !valorString.includes(' - ')) {
|
|
279
|
+
// Tenta converter direto, caso o backend mande só o número como string
|
|
280
|
+
const num = parseInt(valorString, 10);
|
|
281
|
+
return isNaN(num) ? null : num;
|
|
282
|
+
}
|
|
283
|
+
const partes = valorString.split(' - ');
|
|
284
|
+
const codigo = parseInt(partes[0].trim(), 10);
|
|
285
|
+
return isNaN(codigo) ? null : codigo;
|
|
286
|
+
}
|
|
287
|
+
/**
|
|
288
|
+
* Converte uma string no formato 'dd/MM/yyyy' para um objeto Date.
|
|
289
|
+
* Retorna null se o formato for inválido.
|
|
290
|
+
*/
|
|
291
|
+
parseData(dataString) {
|
|
292
|
+
if (dataString instanceof Date) {
|
|
293
|
+
return dataString; // Já é um objeto Date
|
|
294
|
+
}
|
|
295
|
+
if (typeof dataString !== 'string' || !dataString.includes('/')) {
|
|
296
|
+
return null;
|
|
297
|
+
}
|
|
298
|
+
const partes = dataString.split('/'); // [dd, MM, yyyy]
|
|
299
|
+
if (partes.length === 3) {
|
|
300
|
+
const dia = parseInt(partes[0], 10);
|
|
301
|
+
const mes = parseInt(partes[1], 10) - 1; // Mês no JS é 0-indexado
|
|
302
|
+
const ano = parseInt(partes[2], 10);
|
|
303
|
+
// Verifica se a data é válida
|
|
304
|
+
const dataObj = new Date(ano, mes, dia);
|
|
305
|
+
if (dataObj.getFullYear() === ano && dataObj.getMonth() === mes && dataObj.getDate() === dia) {
|
|
306
|
+
return dataObj;
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
return null; // Formato inválido
|
|
310
|
+
}
|
|
180
311
|
handleError(erro) {
|
|
181
312
|
this.openSnackBar(erro);
|
|
182
313
|
this.isLoading = false;
|
|
@@ -196,11 +327,11 @@ export class UnbPessoaPesquisarComponent {
|
|
|
196
327
|
return TipoPessoaEnum;
|
|
197
328
|
}
|
|
198
329
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: UnbPessoaPesquisarComponent, deps: [{ token: i1.UnBPessoaService }, { token: i2.MatSnackBar }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
199
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.2", type: UnbPessoaPesquisarComponent, selector: "lib-unb-pessoa-pesquisar", inputs: { apiPessoaConfig: "apiPessoaConfig", pesquisarPorCPF: "pesquisarPorCPF", pesquisarPorCNPJ: "pesquisarPorCNPJ", pesquisarPorEstrangeiro: "pesquisarPorEstrangeiro", defaultTipoPessoa: "defaultTipoPessoa", pessoa: "pessoa", mostrarPesquisa: "mostrarPesquisa", limparAposPesquisa: "limparAposPesquisa", label: "label", placeholder: "placeholder", hint: "hint" }, outputs: { pessoaEmitted: "pessoaEmitted" }, ngImport: i0, template: "<form #pessoaForm=\"ngForm\" class=\"
|
|
330
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.2", type: UnbPessoaPesquisarComponent, selector: "lib-unb-pessoa-pesquisar", inputs: { apiPessoaConfig: "apiPessoaConfig", pesquisarPorCPF: "pesquisarPorCPF", pesquisarPorCNPJ: "pesquisarPorCNPJ", pesquisarPorEstrangeiro: "pesquisarPorEstrangeiro", defaultTipoPessoa: "defaultTipoPessoa", campoPesquisaMaxWidth: "campoPesquisaMaxWidth", pessoa: "pessoa", mostrarPesquisa: "mostrarPesquisa", limparAposPesquisa: "limparAposPesquisa", label: "label", placeholder: "placeholder", hint: "hint" }, outputs: { pessoaEmitted: "pessoaEmitted" }, ngImport: i0, template: "<form #pessoaForm=\"ngForm\" class=\"pesquisa-container\" [ngStyle]=\"{'--tamanho-maximo': campoPesquisaMaxWidth}\" (ngSubmit)=\"pesquisar()\">\r\n <div class=\"form-wrapper\">\r\n <div *ngIf=\"mostrarTipoPessoa\" class=\"radio-container\">\r\n <mat-radio-group aria-label=\"Tipo de Pessoa\" [(ngModel)]=\"pessoa.tipoPessoa\" #tipoPessoa=\"ngModel\" name=\"tipoPessoa\">\r\n <mat-radio-button *ngIf=\"pesquisarPorCPF\" value=\"{{ tipoPessoaEnum().FISICA}}\">Pessoa F\u00EDsica</mat-radio-button>\r\n <mat-radio-button *ngIf=\"pesquisarPorCNPJ\" value=\"{{tipoPessoaEnum().JURIDICA}}\"> Pessoa Jur\u00EDdica</mat-radio-button>\r\n <mat-radio-button *ngIf=\"pesquisarPorEstrangeiro\" value=\"{{tipoPessoaEnum().ESTRANGEIRA}}\">Estrangeiro</mat-radio-button>\r\n </mat-radio-group>\r\n </div>\r\n\r\n <div class=\"break\"></div>\r\n \r\n <ng-container *ngIf=\"pessoa.tipoPessoa === tipoPessoaEnum().FISICA\">\r\n <mat-form-field appearance=\"outline\">\r\n <mat-label>CPF</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"pessoa.cpf\" name=\"cpf\" #cpf=\"ngModel\" required={{true}}/> \r\n <button matSuffix mat-icon-button type=\"button\" aria-label=\"Pesquisar\" [disabled]=\"isLoading\" (click)=\"pesquisar()\">\r\n <ng-container *ngIf=\"!isLoading; else loadingIcon\">\r\n <mat-icon>search</mat-icon>\r\n </ng-container>\r\n <ng-template #loadingIcon>\r\n <mat-progress-spinner\r\n [diameter]=\"20\"\r\n mode=\"indeterminate\"\r\n color=\"primary\"\r\n class=\"spinner-button\">\r\n </mat-progress-spinner>\r\n </ng-template>\r\n </button>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"pessoa.tipoPessoa === tipoPessoaEnum().ESTRANGEIRA\">\r\n <mat-form-field appearance=\"outline\">\r\n <mat-label>Passaporte</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"pessoa.passaporte\" name=\"passaporte\" required=\"true\" />\r\n <button matSuffix mat-icon-button type=\"button\" aria-label=\"Pesquisar\" (click)=\"pesquisar()\">\r\n <ng-container *ngIf=\"!isLoading; else loadingIcon\">\r\n <mat-icon>search</mat-icon>\r\n </ng-container>\r\n <ng-template #loadingIcon>\r\n <mat-progress-spinner\r\n [diameter]=\"20\"\r\n mode=\"indeterminate\"\r\n color=\"primary\"\r\n class=\"spinner-button\">\r\n </mat-progress-spinner>\r\n </ng-template>\r\n </button>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"pessoa.tipoPessoa === tipoPessoaEnum().JURIDICA\">\r\n <mat-form-field appearance=\"outline\">\r\n <mat-label>CNPJ</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"pessoa.cnpj\" name=\"cnpj\" required=\"true\" />\r\n <button matSuffix mat-icon-button type=\"button\" aria-label=\"Pesquisar\" (click)=\"pesquisar()\">\r\n <ng-container *ngIf=\"!isLoading; else loadingIcon\">\r\n <mat-icon>search</mat-icon>\r\n </ng-container>\r\n <ng-template #loadingIcon>\r\n <mat-progress-spinner\r\n [diameter]=\"20\"\r\n mode=\"indeterminate\"\r\n color=\"primary\"\r\n class=\"spinner-button\">\r\n </mat-progress-spinner>\r\n </ng-template>\r\n </button>\r\n </mat-form-field>\r\n </ng-container>\r\n </div>\r\n</form>", styles: [".pesquisa-container{display:flex;justify-content:left}.form-wrapper{display:flex;flex-direction:column;width:100%;max-width:var(--tamanho-maximo);gap:5px}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i4.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i6.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i7.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i7.MatLabel, selector: "mat-label" }, { kind: "directive", type: i7.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "directive", type: i8.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i9.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "directive", type: i10.MatRadioGroup, selector: "mat-radio-group", inputs: ["color", "name", "labelPosition", "value", "selected", "disabled", "required"], outputs: ["change"], exportAs: ["matRadioGroup"] }, { kind: "component", type: i10.MatRadioButton, selector: "mat-radio-button", inputs: ["id", "name", "aria-label", "aria-labelledby", "aria-describedby", "disableRipple", "tabIndex", "checked", "value", "labelPosition", "disabled", "required", "color"], outputs: ["change"], exportAs: ["matRadioButton"] }] }); }
|
|
200
331
|
}
|
|
201
332
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: UnbPessoaPesquisarComponent, decorators: [{
|
|
202
333
|
type: Component,
|
|
203
|
-
args: [{ selector: 'lib-unb-pessoa-pesquisar', standalone: false, template: "<form #pessoaForm=\"ngForm\" class=\"
|
|
334
|
+
args: [{ selector: 'lib-unb-pessoa-pesquisar', standalone: false, template: "<form #pessoaForm=\"ngForm\" class=\"pesquisa-container\" [ngStyle]=\"{'--tamanho-maximo': campoPesquisaMaxWidth}\" (ngSubmit)=\"pesquisar()\">\r\n <div class=\"form-wrapper\">\r\n <div *ngIf=\"mostrarTipoPessoa\" class=\"radio-container\">\r\n <mat-radio-group aria-label=\"Tipo de Pessoa\" [(ngModel)]=\"pessoa.tipoPessoa\" #tipoPessoa=\"ngModel\" name=\"tipoPessoa\">\r\n <mat-radio-button *ngIf=\"pesquisarPorCPF\" value=\"{{ tipoPessoaEnum().FISICA}}\">Pessoa F\u00EDsica</mat-radio-button>\r\n <mat-radio-button *ngIf=\"pesquisarPorCNPJ\" value=\"{{tipoPessoaEnum().JURIDICA}}\"> Pessoa Jur\u00EDdica</mat-radio-button>\r\n <mat-radio-button *ngIf=\"pesquisarPorEstrangeiro\" value=\"{{tipoPessoaEnum().ESTRANGEIRA}}\">Estrangeiro</mat-radio-button>\r\n </mat-radio-group>\r\n </div>\r\n\r\n <div class=\"break\"></div>\r\n \r\n <ng-container *ngIf=\"pessoa.tipoPessoa === tipoPessoaEnum().FISICA\">\r\n <mat-form-field appearance=\"outline\">\r\n <mat-label>CPF</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"pessoa.cpf\" name=\"cpf\" #cpf=\"ngModel\" required={{true}}/> \r\n <button matSuffix mat-icon-button type=\"button\" aria-label=\"Pesquisar\" [disabled]=\"isLoading\" (click)=\"pesquisar()\">\r\n <ng-container *ngIf=\"!isLoading; else loadingIcon\">\r\n <mat-icon>search</mat-icon>\r\n </ng-container>\r\n <ng-template #loadingIcon>\r\n <mat-progress-spinner\r\n [diameter]=\"20\"\r\n mode=\"indeterminate\"\r\n color=\"primary\"\r\n class=\"spinner-button\">\r\n </mat-progress-spinner>\r\n </ng-template>\r\n </button>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"pessoa.tipoPessoa === tipoPessoaEnum().ESTRANGEIRA\">\r\n <mat-form-field appearance=\"outline\">\r\n <mat-label>Passaporte</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"pessoa.passaporte\" name=\"passaporte\" required=\"true\" />\r\n <button matSuffix mat-icon-button type=\"button\" aria-label=\"Pesquisar\" (click)=\"pesquisar()\">\r\n <ng-container *ngIf=\"!isLoading; else loadingIcon\">\r\n <mat-icon>search</mat-icon>\r\n </ng-container>\r\n <ng-template #loadingIcon>\r\n <mat-progress-spinner\r\n [diameter]=\"20\"\r\n mode=\"indeterminate\"\r\n color=\"primary\"\r\n class=\"spinner-button\">\r\n </mat-progress-spinner>\r\n </ng-template>\r\n </button>\r\n </mat-form-field>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"pessoa.tipoPessoa === tipoPessoaEnum().JURIDICA\">\r\n <mat-form-field appearance=\"outline\">\r\n <mat-label>CNPJ</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"pessoa.cnpj\" name=\"cnpj\" required=\"true\" />\r\n <button matSuffix mat-icon-button type=\"button\" aria-label=\"Pesquisar\" (click)=\"pesquisar()\">\r\n <ng-container *ngIf=\"!isLoading; else loadingIcon\">\r\n <mat-icon>search</mat-icon>\r\n </ng-container>\r\n <ng-template #loadingIcon>\r\n <mat-progress-spinner\r\n [diameter]=\"20\"\r\n mode=\"indeterminate\"\r\n color=\"primary\"\r\n class=\"spinner-button\">\r\n </mat-progress-spinner>\r\n </ng-template>\r\n </button>\r\n </mat-form-field>\r\n </ng-container>\r\n </div>\r\n</form>", styles: [".pesquisa-container{display:flex;justify-content:left}.form-wrapper{display:flex;flex-direction:column;width:100%;max-width:var(--tamanho-maximo);gap:5px}\n"] }]
|
|
204
335
|
}], ctorParameters: () => [{ type: i1.UnBPessoaService }, { type: i2.MatSnackBar }], propDecorators: { apiPessoaConfig: [{
|
|
205
336
|
type: Input
|
|
206
337
|
}], pesquisarPorCPF: [{
|
|
@@ -211,6 +342,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImpor
|
|
|
211
342
|
type: Input
|
|
212
343
|
}], defaultTipoPessoa: [{
|
|
213
344
|
type: Input
|
|
345
|
+
}], campoPesquisaMaxWidth: [{
|
|
346
|
+
type: Input
|
|
214
347
|
}], pessoaEmitted: [{
|
|
215
348
|
type: Output
|
|
216
349
|
}], pessoa: [{
|
|
@@ -226,4 +359,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImpor
|
|
|
226
359
|
}], hint: [{
|
|
227
360
|
type: Input
|
|
228
361
|
}] } });
|
|
229
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5iLXBlc3NvYS1wZXNxdWlzYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdW5iLWxpYi1jb21wb25lbnRzL3NyYy9saWIvdW5iLXBlc3NvYS91bmItcGVzc29hLXBlc3F1aXNhci91bmItcGVzc29hLXBlc3F1aXNhci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91bmItbGliLWNvbXBvbmVudHMvc3JjL2xpYi91bmItcGVzc29hL3VuYi1wZXNzb2EtcGVzcXVpc2FyL3VuYi1wZXNzb2EtcGVzcXVpc2FyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFL0UsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ2pELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUV2RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7Ozs7Ozs7Ozs7OztBQVF6RCxNQUFNLE9BQU8sMkJBQTJCO0lBbUJ0QyxZQUFvQixhQUErQixFQUFVLFFBQXFCO1FBQTlELGtCQUFhLEdBQWIsYUFBYSxDQUFrQjtRQUFVLGFBQVEsR0FBUixRQUFRLENBQWE7UUFsQmxGLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFFVCxvQkFBZSxHQUFtQyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxDQUFDO1FBQ3pFLG9CQUFlLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLHFCQUFnQixHQUFHLElBQUksQ0FBQztRQUN4Qiw0QkFBdUIsR0FBRyxJQUFJLENBQUM7UUFJOUIsa0JBQWEsR0FBRyxJQUFJLFlBQVksRUFBa0IsQ0FBQztRQUVwRCxXQUFNLEdBQUcs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OzJGRDlCTSwyQkFBMkI7a0JBTnZDLFNBQVM7K0JBQ0UsMEJBQTBCLGNBQ3hCLEtBQUs7K0dBT1IsZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyx1QkFBdUI7c0JBQS9CLEtBQUs7Z0JBRUcsaUJBQWlCO3NCQUF6QixLQUFLO2dCQUVJLGFBQWE7c0JBQXRCLE1BQU07Z0JBRUUsTUFBTTtzQkFBZCxLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTWF0U25hY2tCYXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zbmFjay1iYXInO1xyXG5pbXBvcnQgeyBVbmJVdGlscyB9IGZyb20gJy4uLy4uL3V0aWxzL3VuYi11dGlscyc7XHJcbmltcG9ydCB7IFVuYlBlc3NvYU1vZGVsIH0gZnJvbSAnLi4vdW5iLXBlc3NvYS1tb2RlbHMvdW5iLXBlc3NvYS5tb2RlbCc7XHJcbmltcG9ydCB7IFVuQlBlc3NvYVNlcnZpY2UgfSBmcm9tICcuLi91bmItcGVzc29hLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUaXBvUGVzc29hRW51bSB9IGZyb20gJy4uL3VuYi10aXBvLXBlc3NvYS5lbnVtJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLXVuYi1wZXNzb2EtcGVzcXVpc2FyJyxcclxuICBzdGFuZGFsb25lOiBmYWxzZSxcclxuICB0ZW1wbGF0ZVVybDogJy4vdW5iLXBlc3NvYS1wZXNxdWlzYXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi91bmItcGVzc29hLXBlc3F1aXNhci5jb21wb25lbnQuY3NzJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgVW5iUGVzc29hUGVzcXVpc2FyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBpc0xvYWRpbmcgPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KCkgYXBpUGVzc29hQ29uZmlnOiB7IHVybDogc3RyaW5nOyB0b2tlbjogc3RyaW5nIH0gPSB7IHVybDogJycsIHRva2VuOiAnJyB9O1xyXG4gIEBJbnB1dCgpIHBlc3F1aXNhclBvckNQRiA9IHRydWU7XHJcbiAgQElucHV0KCkgcGVzcXVpc2FyUG9yQ05QSiA9IHRydWU7XHJcbiAgQElucHV0KCkgcGVzcXVpc2FyUG9yRXN0cmFuZ2Vpcm8gPSB0cnVlO1xyXG4gIC8vIGRlZmluZSBvIHRpcG8gcGVzc29hIHBhZHJhby4gQXNpc20sIG8gcmFkaW8gYnV0dG9uIGphaCB2ZW0gbWFyY2FkbyBjb20gbyBxdWUgZm9pIGRlZmluaWRvIGFxdWkuXHJcbiAgQElucHV0KCkgZGVmYXVsdFRpcG9QZXNzb2EhOiBUaXBvUGVzc29hRW51bTtcclxuXHJcbiAgQE91dHB1dCgpIHBlc3NvYUVtaXR0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPFVuYlBlc3NvYU1vZGVsPigpO1xyXG4gIFxyXG4gIEBJbnB1dCgpIHBlc3NvYSA9IG5ldyBVbmJQZXNzb2FNb2RlbCgpO1xyXG4gIEBJbnB1dCgpIG1vc3RyYXJQZXNxdWlzYTogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgbGltcGFyQXBvc1Blc3F1aXNhOiBib29sZWFuID0gZmFsc2U7ICAvLyBpbmRpY2Egc2UgZGV2ZSBsaW1wYXIgbyBjcGYgYXBvcyBwZXNxdWlzYXJcclxuICBASW5wdXQoKSBsYWJlbCA9IFwiRGlnaXRlIG8gQ1BGL0NOUEogb3UgUGFzc2Fwb3J0ZVwiOyAvLyBlaCBvIHF1ZSBtb3N0cmEgbm8gdG9wbyBkbyBjb21wb25lbnRlXHJcbiAgQElucHV0KCkgcGxhY2Vob2xkZXIgPSBcIlwiOyAvLyBlaCBvIHF1ZSBtb3N0cmEgY29tbyBwbGFjZWhvbGRlciB0b3BvIGRvIGNvbXBvbmVudGVcclxuICBASW5wdXQoKSBoaW50ID0gXCJcIjsgLy8gZGljYSBxdWUgYXBhcmVjZSBkZWJhaXhvIGRvIGNhbXBvXHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcGVzc29hU2VydmljZTogVW5CUGVzc29hU2VydmljZSwgcHJpdmF0ZSBzbmFja0JhcjogTWF0U25hY2tCYXIpIHsgfVxyXG5cclxuICAvLyB1c2FkbyBwcmEgc2FiZXIgc2UgbW9zdHJhIG91IG5hbyBvIGJvdGFvIGRlIGluY2x1aXIgcGVzc29hXHJcbiAgcGVzc29hRW5jb250cmFkbzogQm9vbGVhbiB8IG51bGwgPSBmYWxzZTtcclxuICBtb3N0cmFyVGlwb1Blc3NvYSE6IGJvb2xlYW47XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuYXBpUGVzc29hQ29uZmlnLnVybC5lbmRzV2l0aCgnLycpKSB7XHJcbiAgICAgIHRoaXMuYXBpUGVzc29hQ29uZmlnLnVybCA9IHRoaXMuYXBpUGVzc29hQ29uZmlnLnVybC5zbGljZSgwLCAtMSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuYXBpUGVzc29hQ29uZmlnLnVybCA9PSBcIlwiKSB7XHJcbiAgICAgIHRoaXMuaGFuZGxlRXJyb3JQcmludENvbnNvbGUoXCJbVW5iUGVzc29hUGVzcXVpc2FyQ29tcG9uZW50XSBFUlJPUjogYXBpUGVzc29hQ29uZmlnLnVybCBlc3TDoSBudWxsLiBJbnNpcmEgbyBwYXLDom1ldHJvIChhcGlQZXNzb2FDb25maWcpIGNvbSBvIHZhbG9yIHbDoWxpZG8hXCIpXHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5hcGlQZXNzb2FDb25maWcudG9rZW4gPT0gXCJcIikge1xyXG4gICAgICB0aGlzLmhhbmRsZUVycm9yUHJpbnRDb25zb2xlKFwiW1VuYlBlc3NvYVBlc3F1aXNhckNvbXBvbmVudF0gRVJST1I6IGFwaVBlc3NvYUNvbmZpZy50b2tlbiBlc3TDoSBudWxsLiBJbnNpcmEgbyBwYXLDom1ldHJvIChhcGlQZXNzb2FDb25maWcpIGNvbSBvIHZhbG9yIGRvIHRva2VuIGRhIHN1YSBhcGxpY2HDp8Ojb1wiKVxyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8gc2UgY2hlZ2FyIGNvbSBiYXJyYSBubyBmaW5hbCwgZXUgcmV0aXJvLiBQcmEgZmljYXIgbm8gcGFkcmFvXHJcbiAgICBpZiAodGhpcy5hcGlQZXNzb2FDb25maWcudXJsLmVuZHNXaXRoKCcvJykpIHtcclxuICAgICAgdGhpcy5hcGlQZXNzb2FDb25maWcudXJsID0gdGhpcy5hcGlQZXNzb2FDb25maWcudXJsLnNsaWNlKDAsIC0xKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBpbmljaWFsaXphIG8gc2VydmnDp28gY29tIGEgY29uZmlndXJhw6fDo28gZGEgQVBJXHJcbiAgICB0aGlzLnBlc3NvYVNlcnZpY2Uuc2V0QXBpQ29uZmlnKHRoaXMuYXBpUGVzc29hQ29uZmlnKTtcclxuXHJcbiAgICAvLyBDb250YSBxdWFudG9zIGRvcyBpbnB1dHMgZXN0w6NvIGNvbW8gdHJ1ZVxyXG4gICAgY29uc3Qgb3Bjb2VzQXRpdmFzID0gW3RoaXMucGVzcXVpc2FyUG9yQ1BGLCB0aGlzLnBlc3F1aXNhclBvckNOUEosIHRoaXMucGVzcXVpc2FyUG9yRXN0cmFuZ2Vpcm9dLmZpbHRlcihvcCA9PiBvcCkubGVuZ3RoO1xyXG4gICAgLy8gRXhpYmUgYSBvcGNhbyBkbyB0aXBvIGRlIHBlc3NvYSwgc29tZW50ZSBzZSBtYWlzIGRlIHVtIGVzdGl2ZXIgc2VsZWNpb25hZG9cclxuICAgIGlmIChvcGNvZXNBdGl2YXMgPiAxKSB7XHJcbiAgICAgIHRoaXMubW9zdHJhclRpcG9QZXNzb2EgPSBvcGNvZXNBdGl2YXMgPiAxOyBcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIGVudGFvIHRlbmhvIHF1ZSBtYXJjYXIgcXVhbCBmb2kgc2VsZWNpb25hZGFcclxuICAgICAgaWYgKHRoaXMucGVzcXVpc2FyUG9yQ1BGKSB7XHJcbiAgICAgICAgdGhpcy5wZXNzb2EudGlwb1Blc3NvYSA9IFRpcG9QZXNzb2FFbnVtLkZJU0lDQTtcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLnBlc3F1aXNhclBvckNOUEopIHtcclxuICAgICAgICB0aGlzLnBlc3NvYS50aXBvUGVzc29hID0gVGlwb1Blc3NvYUVudW0uSlVSSURJQ0E7XHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5wZXNxdWlzYXJQb3JFc3RyYW5nZWlybykge1xyXG4gICAgICAgIHRoaXMucGVzc29hLnRpcG9QZXNzb2EgPSBUaXBvUGVzc29hRW51bS5FU1RSQU5HRUlSQTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmhhbmRsZUVycm9yUHJpbnRDb25zb2xlKFwiW1VuYlBlc3NvYVBlc3F1aXNhckNvbXBvbmVudF0gRVJST1I6IHBlc3F1aXNhclBvckNQRiwgcGVzcXVpc2FyUG9yQ05QSiBlIHBlc3F1aXNhclBvckVzdHJhbmdlaXJvIGVzdMOhIGZhbHNvLiBNYXJxdWUgcGVsbyBtZW5vcyB1bSBjb21vIHRydWVcIilcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBzZWxlY2lvbmEgbyByYWRpbyBidXR0b24gcGFkcmFvXHJcbiAgICBpZiAodGhpcy5kZWZhdWx0VGlwb1Blc3NvYSA9PSBUaXBvUGVzc29hRW51bS5GSVNJQ0EgJiYgdGhpcy5wZXNxdWlzYXJQb3JDUEYpIHtcclxuICAgICAgdGhpcy5wZXNzb2EudGlwb1Blc3NvYSA9IHRoaXMuZGVmYXVsdFRpcG9QZXNzb2E7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuZGVmYXVsdFRpcG9QZXNzb2EgPT0gVGlwb1Blc3NvYUVudW0uSlVSSURJQ0EgJiYgdGhpcy5wZXNxdWlzYXJQb3JDTlBKKSB7XHJcbiAgICAgIHRoaXMucGVzc29hLnRpcG9QZXNzb2EgPSB0aGlzLmRlZmF1bHRUaXBvUGVzc29hO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLmRlZmF1bHRUaXBvUGVzc29hID09IFRpcG9QZXNzb2FFbnVtLkVTVFJBTkdFSVJBICYmIHRoaXMucGVzcXVpc2FyUG9yRXN0cmFuZ2Vpcm8pIHtcclxuICAgICAgdGhpcy5wZXNzb2EudGlwb1Blc3NvYSA9IHRoaXMuZGVmYXVsdFRpcG9QZXNzb2E7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwZXNxdWlzYXIoKSB7ICBcclxuICAgIGlmICh0aGlzLnZhbGlkYXIoKSA9PSBmYWxzZSkgcmV0dXJuOyAgXHJcbiAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XHJcbiAgICBsZXQgcmVzdWx0O1xyXG4gICAgaWYgKHRoaXMucGVzc29hLnRpcG9QZXNzb2EgPT0gVGlwb1Blc3NvYUVudW0uRklTSUNBKSB7XHJcbiAgICAgIGxldCBjcGYgPSB0aGlzLnBlc3NvYS5jcGYubWF0Y2goL1xcZC9nKT8uam9pbihcIlwiKTsgLy8gcmVtb3ZlIGNhcmFjdGVyZXMgXHJcbiAgICAgIHJlc3VsdD0gdGhpcy5wZXNzb2FTZXJ2aWNlLmZpbmRCeUNwZihjcGYpO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnBlc3NvYS50aXBvUGVzc29hID09IFRpcG9QZXNzb2FFbnVtLkpVUklESUNBKSB7XHJcbiAgICAgIGxldCBjbnBqID0gdGhpcy5wZXNzb2EuY25wai5tYXRjaCgvXFxkL2cpPy5qb2luKFwiXCIpOyAvLyByZW1vdmUgY2FyYWN0ZXJlcyBcclxuICAgICAgcmVzdWx0PSB0aGlzLnBlc3NvYVNlcnZpY2UuZmluZEJ5Q25waihjbnBqKTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5wZXNzb2EudGlwb1Blc3NvYSA9PSBUaXBvUGVzc29hRW51bS5FU1RSQU5HRUlSQSkge1xyXG4gICAgICByZXN1bHQ9IHRoaXMucGVzc29hU2VydmljZS5maW5kQnlQYXNzYXBvcnRlKHRoaXMucGVzc29hLnBhc3NhcG9ydGUpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgcmVzdWx0LnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogdGhpcy5oYWRsZVJlc3VsdC5iaW5kKHRoaXMpLFxyXG4gICAgICAgIGVycm9yOiB0aGlzLmhhbmRsZUVycm9yLmJpbmQodGhpcylcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgXHJcbiAgfVxyXG5cclxuICB2YWxpZGFyKCk6IGJvb2xlYW4gIHtcclxuICAgIGlmICh0aGlzLmFwaVBlc3NvYUNvbmZpZy51cmwgPT0gXCJcIikge1xyXG4gICAgICB0aGlzLmhhbmRsZUVycm9yUHJpbnRDb25zb2xlKFwiW1VuYlBlc3NvYVBlc3F1aXNhckNvbXBvbmVudF0gRVJST1I6IGFwaVBlc3NvYUNvbmZpZy51cmwgZXN0w6EgbnVsbC4gSW5zaXJhIG8gcGFyw6JtZXRybyAoYXBpUGVzc29hQ29uZmlnKSBjb20gbyB2YWxvciB2w6FsaWRvIVwiKVxyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuYXBpUGVzc29hQ29uZmlnLnRva2VuID09IFwiXCIpIHtcclxuICAgICAgdGhpcy5oYW5kbGVFcnJvclByaW50Q29uc29sZShcIltVbmJQZXNzb2FQZXNxdWlzYXJDb21wb25lbnRdIEVSUk9SOiBhcGlQZXNzb2FDb25maWcudG9rZW4gZXN0w6EgbnVsbC4gSW5zaXJhIG8gcGFyw6JtZXRybyAoYXBpUGVzc29hQ29uZmlnKSBjb20gbyB2YWxvciBkbyB0b2tlbiBkYSBzdWEgYXBsaWNhw6fDo29cIilcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnBlc3NvYS50aXBvUGVzc29hID09IFRpcG9QZXNzb2FFbnVtLkZJU0lDQSkge1xyXG4gICAgICBpZiAodGhpcy5wZXNzb2EuY3BmID09IG51bGwgfHwgKHRoaXMucGVzc29hLmNwZiAhPSBudWxsICYmIHRoaXMucGVzc29hLmNwZiA9PSBcIlwiKSl7XHJcbiAgICAgICAgdGhpcy5oYW5kbGVFcnJvcihcIkNQRiDDqSB1bSBjYW1wbyBvYnJpZ2F0w7NyaW8uXCIpXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9IGVsc2UgaWYgKCFVbmJVdGlscy52YWxpZGFyQ1BGKHRoaXMucGVzc29hLmNwZikpIHtcclxuICAgICAgICB0aGlzLmhhbmRsZUVycm9yKFwiRGlnaXRlIHVtIHZhbG9yIHbDoWxpZG8gcGFyYSBvIENQRlwiKVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmICh0aGlzLnBlc3NvYS50aXBvUGVzc29hID09IFRpcG9QZXNzb2FFbnVtLkpVUklESUNBKSB7XHJcbiAgICAgIGlmICh0aGlzLnBlc3NvYS5jbnBqID09IG51bGwgfHwgKHRoaXMucGVzc29hLmNucGogIT0gbnVsbCAmJiB0aGlzLnBlc3NvYS5jbnBqID09IFwiXCIpKXtcclxuICAgICAgICB0aGlzLmhhbmRsZUVycm9yKFwiQ05QSiDDqSB1bSBjYW1wbyBvYnJpZ2F0w7NyaW9cIilcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH0gZWxzZSBpZiAoIVVuYlV0aWxzLnZhbGlkYXJDTlBKKHRoaXMucGVzc29hLmNucGopKSB7XHJcbiAgICAgICAgdGhpcy5oYW5kbGVFcnJvcihcIkRpZ2l0ZSB1bSB2YWxvciB2w6FsaWRvIHBhcmEgbyBDTlBKIVwiKVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmICh0aGlzLnBlc3NvYS50aXBvUGVzc29hID09IFRpcG9QZXNzb2FFbnVtLkVTVFJBTkdFSVJBKSB7XHJcbiAgICAgIGlmICh0aGlzLnBlc3NvYS5wYXNzYXBvcnRlID09IG51bGwgfHwgKHRoaXMucGVzc29hLnBhc3NhcG9ydGUgIT0gbnVsbCAmJiB0aGlzLnBlc3NvYS5wYXNzYXBvcnRlID09IFwiXCIpKXtcclxuICAgICAgICB0aGlzLmhhbmRsZUVycm9yKFwiUGFzc2Fwb3J0ZSDDqSB1bSBjYW1wbyBvYnJpZ2F0w7NyaW9cIilcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH0gICAgICBcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuaGFuZGxlRXJyb3IoXCJTZWxlY2lvbmUgdW0gdGlwbyBkZSBwZXNzb2EhXCIpXHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHJ1ZTsgICAgXHJcbiAgfVxyXG5cclxuICBoYWRsZVJlc3VsdChyZXN1bHRhZG86IFVuYlBlc3NvYU1vZGVsKSB7XHJcbiAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgXHJcbiAgICBpZiAocmVzdWx0YWRvKSB7XHJcbiAgICAgIHJlc3VsdGFkby50aXBvUGVzc29hID0gdGhpcy5wZXNzb2EudGlwb1Blc3NvYTsgLy8gbyBiYWNrZW5kIG5hbyByZXRvcm5hIG8gdGlwbyBwZXNzb2EuIGVudGFvIHRlbmhvIHF1ZSBhdHJpYnVpciBhbnRlc1xyXG4gICAgICB0aGlzLnBlc3NvYSA9IHJlc3VsdGFkbztcclxuICAgICAgaWYgKHRoaXMucGVzc29hLnRpcG9QZXNzb2EgPT0gVGlwb1Blc3NvYUVudW0uRklTSUNBKSB7XHJcbiAgICAgICAgdGhpcy5wZXNzb2EuY3BmID0gVW5iVXRpbHMuZm9ybWF0YUNwZihyZXN1bHRhZG8uY3BmKTsgLy8gdm9sdG91IHBybyBmb3JtYXRvIG9yaWdpbmFsIChpc3NvIGV2aXRhIGZvcm1hcnRhciBub3ZhbWVudGUpXHJcbiAgICAgIH1lbHNlIGlmICh0aGlzLnBlc3NvYS50aXBvUGVzc29hID09IFRpcG9QZXNzb2FFbnVtLkpVUklESUNBKSB7XHJcbiAgICAgICAgdGhpcy5wZXNzb2EuY25waiA9IFVuYlV0aWxzLmZvcm1hdGFDbnBqKHJlc3VsdGFkby5jbnBqKTsgLy8gdm9sdG91IHBybyBmb3JtYXRvIG9yaWdpbmFsIChpc3NvIGV2aXRhIGZvcm1hcnRhciBub3ZhbWVudGUpXHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIHNlIGNoZWdhciBha2kgZWggcHEgbmFvIGVuY29udHJvdSwgZW50YW8gdGVtb3MgcXVlIGVtaXRpciB1bSByZXN1bHRhZG8gY29tIGNvZGlnb1Blc3NvYSB2YXppbyBtYXMgY29tIG9zIGNyaXRlcmlvcyB1c2FkbyBuYSBwZXNxdWlzYVxyXG4gICAgICBsZXQgbm92YVBlc3NvYSA9IG5ldyBVbmJQZXNzb2FNb2RlbCgpO1xyXG4gICAgICBub3ZhUGVzc29hLnRpcG9QZXNzb2EgPSB0aGlzLnBlc3NvYS50aXBvUGVzc29hO1xyXG4gICAgICBpZiAodGhpcy5wZXNzb2EudGlwb1Blc3NvYSA9PSBUaXBvUGVzc29hRW51bS5GSVNJQ0EpIHtcclxuICAgICAgICBub3ZhUGVzc29hLmNwZiA9IHRoaXMucGVzc29hLmNwZjtcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLnBlc3NvYS50aXBvUGVzc29hID09IFRpcG9QZXNzb2FFbnVtLkpVUklESUNBKSB7XHJcbiAgICAgICAgbm92YVBlc3NvYS5jbnBqID0gdGhpcy5wZXNzb2EuY25wajtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBub3ZhUGVzc29hLnBhc3NhcG9ydGUgPSB0aGlzLnBlc3NvYS5wYXNzYXBvcnRlO1xyXG4gICAgICB9XHJcbiAgICAgIFxyXG4gICAgICAvLyBhZ29yYSBzb2JyZWVzY3JldmVtb3MsIHBxIHNlIHRpdmVyIHVtYSBwZXNzb2EgcGVzcXVpc2FkYSBjb20gcmVzdWx0YWRvIGNvcnJldG8sIGUgcGVzcXVpc2FyIG5vdmFtZW50ZSwgcHJlY2lzYW1vcyBhcGFnYXIgYSBwcmltZWlyYSBwZXNzb2EuIFxyXG4gICAgICB0aGlzLnBlc3NvYSA9IG5vdmFQZXNzb2E7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHRoaXMucGVzc29hRW1pdHRlZC5lbWl0KHRoaXMucGVzc29hKTsgICBcclxuICB9XHJcblxyXG4gIGhhbmRsZUVycm9yKGVycm86IGFueSkge1xyXG4gICAgdGhpcy5vcGVuU25hY2tCYXIoZXJybyk7ICBcclxuICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XHJcblxyXG4gICAgLy8gc2UgY2hlZ2FyIGFraSwgZW50YW8gbmFvIGVuY29udHJvdSBhIHBlc3NvYS4gTWFzIGRhbW9zIGEgY2hhbmNlIGRlIGluY2x1aXIgcGVzc29hXHJcbiAgICB0aGlzLnBlc3NvYUVuY29udHJhZG8gPSBmYWxzZSAgXHJcbiAgfVxyXG5cclxuICBoYW5kbGVFcnJvclByaW50Q29uc29sZShlcnJvOiBhbnkpIHtcclxuICAgIGNvbnNvbGUubG9nKGVycm8pO1xyXG4gICAgdGhpcy5oYW5kbGVFcnJvcihlcnJvKTtcclxuICB9XHJcblxyXG4gIG9wZW5TbmFja0JhcihtZXNzYWdlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuc25hY2tCYXIub3BlbihtZXNzYWdlLCAneCcsIHtcclxuICAgICAgZHVyYXRpb246IDUwMDAsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHRpcG9QZXNzb2FFbnVtKCkge1xyXG4gICAgcmV0dXJuIFRpcG9QZXNzb2FFbnVtO1xyXG4gIH1cclxufVxyXG4iLCI8Zm9ybSAjcGVzc29hRm9ybT1cIm5nRm9ybVwiIGNsYXNzPVwiZm9ybS1jb250YWluZXJcIiAobmdTdWJtaXQpPVwicGVzcXVpc2FyKClcIj5cclxuICAgIDwhLS0gVGlwbyBkYSBQZXNzb2EuIENvbnRyb2xhZG8gcGVsbyBPbkluaXQgLS0+XHJcbiAgICA8bWF0LXByb2dyZXNzLWJhciAqbmdJZj1cImlzTG9hZGluZ1wiIG1vZGU9XCJpbmRldGVybWluYXRlXCI+PC9tYXQtcHJvZ3Jlc3MtYmFyPiBcclxuICAgIDxkaXYgKm5nSWY9XCJtb3N0cmFyVGlwb1Blc3NvYVwiPlxyXG4gICAgICAgIDxtYXQtcmFkaW8tZ3JvdXAgYXJpYS1sYWJlbD1cIlRpcG8gZGUgUGVzc29hXCIgWyhuZ01vZGVsKV09XCJwZXNzb2EudGlwb1Blc3NvYVwiICN0aXBvUGVzc29hPVwibmdNb2RlbFwiIG5hbWU9XCJ0aXBvUGVzc29hXCI+XHJcbiAgICAgICAgICAgIDxtYXQtcmFkaW8tYnV0dG9uICpuZ0lmPVwicGVzcXVpc2FyUG9yQ1BGXCIgICAgICAgICAgICB2YWx1ZT1cInt7IHRpcG9QZXNzb2FFbnVtKCkuRklTSUNBfX1cIj5QZXNzb2EgRsOtc2ljYTwvbWF0LXJhZGlvLWJ1dHRvbj5cclxuICAgICAgICAgICAgPG1hdC1yYWRpby1idXR0b24gKm5nSWY9XCJwZXNxdWlzYXJQb3JDTlBKXCIgICAgICAgICAgIHZhbHVlPVwie3t0aXBvUGVzc29hRW51bSgpLkpVUklESUNBfX1cIj4gUGVzc29hIEp1csOtZGljYTwvbWF0LXJhZGlvLWJ1dHRvbj5cclxuICAgICAgICAgICAgPG1hdC1yYWRpby1idXR0b24gKm5nSWY9XCJwZXNxdWlzYXJQb3JFc3RyYW5nZWlyb1wiICAgIHZhbHVlPVwie3t0aXBvUGVzc29hRW51bSgpLkVTVFJBTkdFSVJBfX1cIj5Fc3RyYW5nZWlybzwvbWF0LXJhZGlvLWJ1dHRvbj5cclxuICAgICAgICA8L21hdC1yYWRpby1ncm91cD5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJicmVha1wiPjwvZGl2PlxyXG4gICAgXHJcbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicGVzc29hLnRpcG9QZXNzb2EgPT09IHRpcG9QZXNzb2FFbnVtKCkuRklTSUNBXCI+XHJcbiAgICAgIFxyXG4gICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIj5cclxuICAgICAgICA8bWF0LWxhYmVsPkNQRjwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIG1hdElucHV0IFsobmdNb2RlbCldPVwicGVzc29hLmNwZlwiIG5hbWU9XCJjcGZcIiAjY3BmPVwibmdNb2RlbFwiIHJlcXVpcmVkPXt7dHJ1ZX19Lz4gICAgICAgIFxyXG4gICAgICAgIDxidXR0b24gKm5nSWY9XCIhaXNMb2FkaW5nXCIgZGlzYWJsZWQ9XCJ7e2lzTG9hZGluZ319XCIgbWF0U3VmZml4IG1hdC1pY29uLWJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgYXJpYS1sYWJlbD1cIlBlc3F1aXNhclwiIChjbGljayk9XCJwZXNxdWlzYXIoKVwiPlxyXG4gICAgICAgICAgICA8bWF0LWljb24gc3R5bGU9XCJtYXJnaW4tcmlnaHQ6IDJweDtcIj5zZWFyY2g8L21hdC1pY29uPiAgICAgICAgICAgIFxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInBlc3NvYS50aXBvUGVzc29hID09PSB0aXBvUGVzc29hRW51bSgpLkVTVFJBTkdFSVJBXCI+XHJcbiAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiPlxyXG4gICAgICAgIDxtYXQtbGFiZWw+UGFzc2Fwb3J0ZTwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIG1hdElucHV0IFsobmdNb2RlbCldPVwicGVzc29hLnBhc3NhcG9ydGVcIiBuYW1lPVwicGFzc2Fwb3J0ZVwiIHJlcXVpcmVkPVwidHJ1ZVwiIC8+XHJcbiAgICAgICAgPGJ1dHRvbiAqbmdJZj1cIiFpc0xvYWRpbmdcIiBtYXRTdWZmaXggbWF0LWljb24tYnV0dG9uIHR5cGU9XCJidXR0b25cIiBhcmlhLWxhYmVsPVwiUGVzcXVpc2FyXCIgKGNsaWNrKT1cInBlc3F1aXNhcigpXCI+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvbj5zZWFyY2g8L21hdC1pY29uPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInBlc3NvYS50aXBvUGVzc29hID09PSB0aXBvUGVzc29hRW51bSgpLkpVUklESUNBXCI+XHJcbiAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiPlxyXG4gICAgICAgIDxtYXQtbGFiZWw+Q05QSjwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIG1hdElucHV0IFsobmdNb2RlbCldPVwicGVzc29hLmNucGpcIiBuYW1lPVwiY25walwiIHJlcXVpcmVkPVwidHJ1ZVwiIC8+XHJcbiAgICAgICAgPGJ1dHRvbiAqbmdJZj1cIiFpc0xvYWRpbmdcIiBtYXRTdWZmaXggbWF0LWljb24tYnV0dG9uIHR5cGU9XCJidXR0b25cIiBhcmlhLWxhYmVsPVwiUGVzcXVpc2FyXCIgKGNsaWNrKT1cInBlc3F1aXNhcigpXCI+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvbj5zZWFyY2g8L21hdC1pY29uPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbjwvZm9ybT4iXX0=
|
|
362
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5iLXBlc3NvYS1wZXNxdWlzYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdW5iLWxpYi1jb21wb25lbnRzL3NyYy9saWIvdW5iLXBlc3NvYS91bmItcGVzc29hLXBlc3F1aXNhci91bmItcGVzc29hLXBlc3F1aXNhci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91bmItbGliLWNvbXBvbmVudHMvc3JjL2xpYi91bmItcGVzc29hL3VuYi1wZXNzb2EtcGVzcXVpc2FyL3VuYi1wZXNzb2EtcGVzcXVpc2FyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFL0UsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ2pELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUV2RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFJekQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7Ozs7Ozs7Ozs7O0FBUWhDLE1BQU0sT0FBTywyQkFBMkI7SUFrQnRDLFlBQW9CLGFBQStCLEVBQVUsUUFBcUI7UUFBOUQsa0JBQWEsR0FBYixhQUFhLENBQWtCO1FBQVUsYUFBUSxHQUFSLFFBQVEsQ0FBYTtRQWpCbEYsY0FBUyxHQUFHLEtBQUssQ0FBQztRQUVULG9CQUFlLEdBQW1DLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLENBQUM7UUFDekUsb0JBQWUsR0FBRyxJQUFJLENBQUM7UUFDdkIscUJBQWdCLEdBQUcsSUFBSSxDQUFDO1FBQ3hCLDRCQUF1QixHQUFHLElBQUksQ0FBQztRQUUvQiwwQkFBcUIs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aUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLHFCQUFxQjtzQkFBN0IsS0FBSztnQkFDSSxhQUFhO3NCQUF0QixNQUFNO2dCQUVFLE1BQU07c0JBQWQsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1hdFNuYWNrQmFyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc25hY2stYmFyJztcclxuaW1wb3J0IHsgVW5iVXRpbHMgfSBmcm9tICcuLi8uLi91dGlscy91bmItdXRpbHMnO1xyXG5pbXBvcnQgeyBVbmJQZXNzb2FNb2RlbCB9IGZyb20gJy4uL3VuYi1wZXNzb2EtbW9kZWxzL3VuYi1wZXNzb2EubW9kZWwnO1xyXG5pbXBvcnQgeyBVbkJQZXNzb2FTZXJ2aWNlIH0gZnJvbSAnLi4vdW5iLXBlc3NvYS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVGlwb1Blc3NvYUVudW0gfSBmcm9tICcuLi91bmItdGlwby1wZXNzb2EuZW51bSc7XHJcbmltcG9ydCB7IFVuYlBlc3NvYUVuZGVyZWNvVGlwbyB9IGZyb20gJy4uL3VuYi1wZXNzb2EtbW9kZWxzL3VuYi1wZXNzb2EtZW5kZXJlY28ubW9kZWwnO1xyXG5pbXBvcnQgeyBVbmJQZXNzb2FUZWxlZm9uZVRpcG8gfSBmcm9tICcuLi91bmItcGVzc29hLW1vZGVscy91bmItcGVzc29hLXRlbGVmb25lLm1vZGVsJztcclxuaW1wb3J0IHsgVW5iUGVzc29hRW1haWxUaXBvIH0gZnJvbSAnLi4vdW5iLXBlc3NvYS1tb2RlbHMvdW5iLXBlc3NvYS1lbWFpbC5tb2RlbCc7XHJcbmltcG9ydCB7IGZvcmtKb2luIH0gZnJvbSAncnhqcyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi11bmItcGVzc29hLXBlc3F1aXNhcicsXHJcbiAgc3RhbmRhbG9uZTogZmFsc2UsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3VuYi1wZXNzb2EtcGVzcXVpc2FyLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vdW5iLXBlc3NvYS1wZXNxdWlzYXIuY29tcG9uZW50LmNzcydcclxufSlcclxuZXhwb3J0IGNsYXNzIFVuYlBlc3NvYVBlc3F1aXNhckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgaXNMb2FkaW5nID0gZmFsc2U7XHJcblxyXG4gIEBJbnB1dCgpIGFwaVBlc3NvYUNvbmZpZzogeyB1cmw6IHN0cmluZzsgdG9rZW46IHN0cmluZyB9ID0geyB1cmw6ICcnLCB0b2tlbjogJycgfTtcclxuICBASW5wdXQoKSBwZXNxdWlzYXJQb3JDUEYgPSB0cnVlO1xyXG4gIEBJbnB1dCgpIHBlc3F1aXNhclBvckNOUEogPSB0cnVlO1xyXG4gIEBJbnB1dCgpIHBlc3F1aXNhclBvckVzdHJhbmdlaXJvID0gdHJ1ZTtcclxuICBASW5wdXQoKSBkZWZhdWx0VGlwb1Blc3NvYSE6IFRpcG9QZXNzb2FFbnVtO1xyXG4gIEBJbnB1dCgpIGNhbXBvUGVzcXVpc2FNYXhXaWR0aDogc3RyaW5nID0gJzQwMHB4JzsgXHJcbiAgQE91dHB1dCgpIHBlc3NvYUVtaXR0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPFVuYlBlc3NvYU1vZGVsPigpO1xyXG5cclxuICBASW5wdXQoKSBwZXNzb2EgPSBuZXcgVW5iUGVzc29hTW9kZWwoKTtcclxuICBASW5wdXQoKSBtb3N0cmFyUGVzcXVpc2E6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIGxpbXBhckFwb3NQZXNxdWlzYTogYm9vbGVhbiA9IGZhbHNlOyAgLy8gaW5kaWNhIHNlIGRldmUgbGltcGFyIG8gY3BmIGFwb3MgcGVzcXVpc2FyXHJcbiAgQElucHV0KCkgbGFiZWwgPSBcIkRpZ2l0ZSBvIENQRi9DTlBKIG91IFBhc3NhcG9ydGVcIjsgLy8gZWggbyBxdWUgbW9zdHJhIG5vIHRvcG8gZG8gY29tcG9uZW50ZVxyXG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyID0gXCJcIjsgLy8gZWggbyBxdWUgbW9zdHJhIGNvbW8gcGxhY2Vob2xkZXIgdG9wbyBkbyBjb21wb25lbnRlXHJcbiAgQElucHV0KCkgaGludCA9IFwiXCI7IC8vIGRpY2EgcXVlIGFwYXJlY2UgZGViYWl4byBkbyBjYW1wb1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHBlc3NvYVNlcnZpY2U6IFVuQlBlc3NvYVNlcnZpY2UsIHByaXZhdGUgc25hY2tCYXI6IE1hdFNuYWNrQmFyKSB7IH1cclxuXHJcbiAgLy8gdXNhZG8gcHJhIHNhYmVyIHNlIG1vc3RyYSBvdSBuYW8gbyBib3RhbyBkZSBpbmNsdWlyIHBlc3NvYVxyXG4gIHBlc3NvYUVuY29udHJhZG86IEJvb2xlYW4gfCBudWxsID0gZmFsc2U7XHJcbiAgbW9zdHJhclRpcG9QZXNzb2EhOiBib29sZWFuO1xyXG5cclxuICBsaXN0YVRpcG9FbmRlcmVjbzogVW5iUGVzc29hRW5kZXJlY29UaXBvW10gPSBbXTtcclxuICBsaXN0YVRpcG9UZWxlZm9uZTogVW5iUGVzc29hVGVsZWZvbmVUaXBvW10gPSBbXTtcclxuICBsaXN0YVRpcG9FbWFpbDogVW5iUGVzc29hRW1haWxUaXBvW10gPSBbXTtcclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5hcGlQZXNzb2FDb25maWcudXJsLmVuZHNXaXRoKCcvJykpIHtcclxuICAgICAgdGhpcy5hcGlQZXNzb2FDb25maWcudXJsID0gdGhpcy5hcGlQZXNzb2FDb25maWcudXJsLnNsaWNlKDAsIC0xKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5hcGlQZXNzb2FDb25maWcudXJsID09IFwiXCIpIHtcclxuICAgICAgdGhpcy5oYW5kbGVFcnJvclByaW50Q29uc29sZShcIltVbmJQZXNzb2FQZXNxdWlzYXJDb21wb25lbnRdIEVSUk9SOiBhcGlQZXNzb2FDb25maWcudXJsIGVzdMOhIG51bGwuIEluc2lyYSBvIHBhcsOibWV0cm8gKGFwaVBlc3NvYUNvbmZpZykgY29tIG8gdmFsb3IgdsOhbGlkbyFcIilcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmFwaVBlc3NvYUNvbmZpZy50b2tlbiA9PSBcIlwiKSB7XHJcbiAgICAgIHRoaXMuaGFuZGxlRXJyb3JQcmludENvbnNvbGUoXCJbVW5iUGVzc29hUGVzcXVpc2FyQ29tcG9uZW50XSBFUlJPUjogYXBpUGVzc29hQ29uZmlnLnRva2VuIGVzdMOhIG51bGwuIEluc2lyYSBvIHBhcsOibWV0cm8gKGFwaVBlc3NvYUNvbmZpZykgY29tIG8gdmFsb3IgZG8gdG9rZW4gZGEgc3VhIGFwbGljYcOnw6NvXCIpXHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBzZSBjaGVnYXIgY29tIGJhcnJhIG5vIGZpbmFsLCBldSByZXRpcm8uIFByYSBmaWNhciBubyBwYWRyYW9cclxuICAgIGlmICh0aGlzLmFwaVBlc3NvYUNvbmZpZy51cmwuZW5kc1dpdGgoJy8nKSkge1xyXG4gICAgICB0aGlzLmFwaVBlc3NvYUNvbmZpZy51cmwgPSB0aGlzLmFwaVBlc3NvYUNvbmZpZy51cmwuc2xpY2UoMCwgLTEpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGluaWNpYWxpemEgbyBzZXJ2acOnbyBjb20gYSBjb25maWd1cmHDp8OjbyBkYSBBUElcclxuICAgIHRoaXMucGVzc29hU2VydmljZS5zZXRBcGlDb25maWcodGhpcy5hcGlQZXNzb2FDb25maWcpO1xyXG5cclxuICAgIGZvcmtKb2luKHtcclxuICAgICAgdGlwb3NFbmQ6IHRoaXMucGVzc29hU2VydmljZS5nZXRUaXBvRW5kZXJlY28oKSxcclxuICAgICAgdGlwb3NUZWw6IHRoaXMucGVzc29hU2VydmljZS5nZXRUaXBvVGVsZWZvbmUoKSxcclxuICAgICAgdGlwb3NFbWFpbDogdGhpcy5wZXNzb2FTZXJ2aWNlLmdldFRpcG9FbWFpbCgpXHJcbiAgICB9KS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAoeyB0aXBvc0VuZCwgdGlwb3NUZWwsIHRpcG9zRW1haWwgfSkgPT4ge1xyXG4gICAgICAgIHRoaXMubGlzdGFUaXBvRW5kZXJlY28gPSB0aXBvc0VuZDtcclxuICAgICAgICB0aGlzLmxpc3RhVGlwb1RlbGVmb25lID0gdGlwb3NUZWw7XHJcbiAgICAgICAgdGhpcy5saXN0YVRpcG9FbWFpbCA9IHRpcG9zRW1haWw7XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoZXJyKSA9PiB7XHJcbiAgICAgICAgdGhpcy5oYW5kbGVFcnJvcihcIkZhbGhhIGFvIGNhcnJlZ2FyIGRhZG9zIGRlIGFwb2lvLiBSZWNhcnJlZ3VlIGEgcMOhZ2luYS5cIik7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihcIkVycm8gbm8gZm9ya0pvaW4gZG8gcGVzcXVpc2FyOlwiLCBlcnIpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcblxyXG5cclxuICAgIC8vIENvbnRhIHF1YW50b3MgZG9zIGlucHV0cyBlc3TDo28gY29tbyB0cnVlXHJcbiAgICBjb25zdCBvcGNvZXNBdGl2YXMgPSBbdGhpcy5wZXNxdWlzYXJQb3JDUEYsIHRoaXMucGVzcXVpc2FyUG9yQ05QSiwgdGhpcy5wZXNxdWlzYXJQb3JFc3RyYW5nZWlyb10uZmlsdGVyKG9wID0+IG9wKS5sZW5ndGg7XHJcbiAgICAvLyBFeGliZSBhIG9wY2FvIGRvIHRpcG8gZGUgcGVzc29hLCBzb21lbnRlIHNlIG1haXMgZGUgdW0gZXN0aXZlciBzZWxlY2lvbmFkb1xyXG4gICAgaWYgKG9wY29lc0F0aXZhcyA+IDEpIHtcclxuICAgICAgdGhpcy5tb3N0cmFyVGlwb1Blc3NvYSA9IG9wY29lc0F0aXZhcyA+IDE7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBlbnRhbyB0ZW5obyBxdWUgbWFyY2FyIHF1YWwgZm9pIHNlbGVjaW9uYWRhXHJcbiAgICAgIGlmICh0aGlzLnBlc3F1aXNhclBvckNQRikge1xyXG4gICAgICAgIHRoaXMucGVzc29hLnRpcG9QZXNzb2EgPSBUaXBvUGVzc29hRW51bS5GSVNJQ0E7XHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5wZXNxdWlzYXJQb3JDTlBKKSB7XHJcbiAgICAgICAgdGhpcy5wZXNzb2EudGlwb1Blc3NvYSA9IFRpcG9QZXNzb2FFbnVtLkpVUklESUNBO1xyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMucGVzcXVpc2FyUG9yRXN0cmFuZ2Vpcm8pIHtcclxuICAgICAgICB0aGlzLnBlc3NvYS50aXBvUGVzc29hID0gVGlwb1Blc3NvYUVudW0uRVNUUkFOR0VJUkE7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5oYW5kbGVFcnJvclByaW50Q29uc29sZShcIltVbmJQZXNzb2FQZXNxdWlzYXJDb21wb25lbnRdIEVSUk9SOiBwZXNxdWlzYXJQb3JDUEYsIHBlc3F1aXNhclBvckNOUEogZSBwZXNxdWlzYXJQb3JFc3RyYW5nZWlybyBlc3TDoSBmYWxzby4gTWFycXVlIHBlbG8gbWVub3MgdW0gY29tbyB0cnVlXCIpXHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gc2VsZWNpb25hIG8gcmFkaW8gYnV0dG9uIHBhZHJhb1xyXG4gICAgaWYgKHRoaXMuZGVmYXVsdFRpcG9QZXNzb2EgPT0gVGlwb1Blc3NvYUVudW0uRklTSUNBICYmIHRoaXMucGVzcXVpc2FyUG9yQ1BGKSB7XHJcbiAgICAgIHRoaXMucGVzc29hLnRpcG9QZXNzb2EgPSB0aGlzLmRlZmF1bHRUaXBvUGVzc29hO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLmRlZmF1bHRUaXBvUGVzc29hID09IFRpcG9QZXNzb2FFbnVtLkpVUklESUNBICYmIHRoaXMucGVzcXVpc2FyUG9yQ05QSikge1xyXG4gICAgICB0aGlzLnBlc3NvYS50aXBvUGVzc29hID0gdGhpcy5kZWZhdWx0VGlwb1Blc3NvYTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5kZWZhdWx0VGlwb1Blc3NvYSA9PSBUaXBvUGVzc29hRW51bS5FU1RSQU5HRUlSQSAmJiB0aGlzLnBlc3F1aXNhclBvckVzdHJhbmdlaXJvKSB7XHJcbiAgICAgIHRoaXMucGVzc29hLnRpcG9QZXNzb2EgPSB0aGlzLmRlZmF1bHRUaXBvUGVzc29hO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcGVzcXVpc2FyKCkge1xyXG4gICAgaWYgKHRoaXMudmFsaWRhcigpID09IGZhbHNlKSByZXR1cm47XHJcbiAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XHJcbiAgICBsZXQgcmVzdWx0O1xyXG4gICAgaWYgKHRoaXMucGVzc29hLnRpcG9QZXNzb2EgPT0gVGlwb1Blc3NvYUVudW0uRklTSUNBKSB7XHJcbiAgICAgIGxldCBjcGYgPSB0aGlzLnBlc3NvYS5jcGYubWF0Y2goL1xcZC9nKT8uam9pbihcIlwiKTsgLy8gcmVtb3ZlIGNhcmFjdGVyZXMgXHJcbiAgICAgIHJlc3VsdCA9IHRoaXMucGVzc29hU2VydmljZS5maW5kQnlDcGYoY3BmKTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5wZXNzb2EudGlwb1Blc3NvYSA9PSBUaXBvUGVzc29hRW51bS5KVVJJRElDQSkge1xyXG4gICAgICBsZXQgY25waiA9IHRoaXMucGVzc29hLmNucGoubWF0Y2goL1xcZC9nKT8uam9pbihcIlwiKTsgLy8gcmVtb3ZlIGNhcmFjdGVyZXMgXHJcbiAgICAgIHJlc3VsdCA9IHRoaXMucGVzc29hU2VydmljZS5maW5kQnlDbnBqKGNucGopO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnBlc3NvYS50aXBvUGVzc29hID09IFRpcG9QZXNzb2FFbnVtLkVTVFJBTkdFSVJBKSB7XHJcbiAgICAgIHJlc3VsdCA9IHRoaXMucGVzc29hU2VydmljZS5maW5kQnlQYXNzYXBvcnRlKHRoaXMucGVzc29hLnBhc3NhcG9ydGUpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgcmVzdWx0LnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogdGhpcy5oYWRsZVJlc3VsdC5iaW5kKHRoaXMpLFxyXG4gICAgICAgIGVycm9yOiB0aGlzLmhhbmRsZUVycm9yLmJpbmQodGhpcylcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgdmFsaWRhcigpOiBib29sZWFuIHtcclxuICAgIGlmICh0aGlzLmFwaVBlc3NvYUNvbmZpZy51cmwgPT0gXCJcIikge1xyXG4gICAgICB0aGlzLmhhbmRsZUVycm9yUHJpbnRDb25zb2xlKFwiW1VuYlBlc3NvYVBlc3F1aXNhckNvbXBvbmVudF0gRVJST1I6IGFwaVBlc3NvYUNvbmZpZy51cmwgZXN0w6EgbnVsbC4gSW5zaXJhIG8gcGFyw6JtZXRybyAoYXBpUGVzc29hQ29uZmlnKSBjb20gbyB2YWxvciB2w6FsaWRvIVwiKVxyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuYXBpUGVzc29hQ29uZmlnLnRva2VuID09IFwiXCIpIHtcclxuICAgICAgdGhpcy5oYW5kbGVFcnJvclByaW50Q29uc29sZShcIltVbmJQZXNzb2FQZXNxdWlzYXJDb21wb25lbnRdIEVSUk9SOiBhcGlQZXNzb2FDb25maWcudG9rZW4gZXN0w6EgbnVsbC4gSW5zaXJhIG8gcGFyw6JtZXRybyAoYXBpUGVzc29hQ29uZmlnKSBjb20gbyB2YWxvciBkbyB0b2tlbiBkYSBzdWEgYXBsaWNhw6fDo29cIilcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnBlc3NvYS50aXBvUGVzc29hID09IFRpcG9QZXNzb2FFbnVtLkZJU0lDQSkge1xyXG4gICAgICBpZiAodGhpcy5wZXNzb2EuY3BmID09IG51bGwgfHwgKHRoaXMucGVzc29hLmNwZiAhPSBudWxsICYmIHRoaXMucGVzc29hLmNwZiA9PSBcIlwiKSkge1xyXG4gICAgICAgIHRoaXMuaGFuZGxlRXJyb3IoXCJDUEYgw6kgdW0gY2FtcG8gb2JyaWdhdMOzcmlvLlwiKVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfSBlbHNlIGlmICghVW5iVXRpbHMudmFsaWRhckNQRih0aGlzLnBlc3NvYS5jcGYpKSB7XHJcbiAgICAgICAgdGhpcy5oYW5kbGVFcnJvcihcIkRpZ2l0ZSB1bSB2YWxvciB2w6FsaWRvIHBhcmEgbyBDUEZcIilcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAodGhpcy5wZXNzb2EudGlwb1Blc3NvYSA9PSBUaXBvUGVzc29hRW51bS5KVVJJRElDQSkge1xyXG4gICAgICBpZiAodGhpcy5wZXNzb2EuY25waiA9PSBudWxsIHx8ICh0aGlzLnBlc3NvYS5jbnBqICE9IG51bGwgJiYgdGhpcy5wZXNzb2EuY25waiA9PSBcIlwiKSkge1xyXG4gICAgICAgIHRoaXMuaGFuZGxlRXJyb3IoXCJDTlBKIMOpIHVtIGNhbXBvIG9icmlnYXTDs3Jpb1wiKVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfSBlbHNlIGlmICghVW5iVXRpbHMudmFsaWRhckNOUEoodGhpcy5wZXNzb2EuY25waikpIHtcclxuICAgICAgICB0aGlzLmhhbmRsZUVycm9yKFwiRGlnaXRlIHVtIHZhbG9yIHbDoWxpZG8gcGFyYSBvIENOUEohXCIpXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMucGVzc29hLnRpcG9QZXNzb2EgPT0gVGlwb1Blc3NvYUVudW0uRVNUUkFOR0VJUkEpIHtcclxuICAgICAgaWYgKHRoaXMucGVzc29hLnBhc3NhcG9ydGUgPT0gbnVsbCB8fCAodGhpcy5wZXNzb2EucGFzc2Fwb3J0ZSAhPSBudWxsICYmIHRoaXMucGVzc29hLnBhc3NhcG9ydGUgPT0gXCJcIikpIHtcclxuICAgICAgICB0aGlzLmhhbmRsZUVycm9yKFwiUGFzc2Fwb3J0ZSDDqSB1bSBjYW1wbyBvYnJpZ2F0w7NyaW9cIilcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuaGFuZGxlRXJyb3IoXCJTZWxlY2lvbmUgdW0gdGlwbyBkZSBwZXNzb2EhXCIpXHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vIEVtIHVuYi1wZXNzb2EtcGVzcXVpc2FyLmNvbXBvbmVudC50c1xyXG4gIGhhZGxlUmVzdWx0KHJlc3VsdGFkbzogVW5iUGVzc29hTW9kZWwpIHtcclxuICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKHJlc3VsdGFkbykge1xyXG4gICAgICByZXN1bHRhZG8udGlwb1Blc3NvYSA9IHRoaXMucGVzc29hLnRpcG9QZXNzb2E7IC8vIG8gYmFja2VuZCBuYW8gcmV0b3JuYSBvIHRpcG8gcGVzc29hLiBlbnRhbyB0ZW5obyBxdWUgYXRyaWJ1aXIgYW50ZXNcclxuICAgICAgdGhpcy5wZXNzb2EgPSByZXN1bHRhZG87XHJcblxyXG4gICAgICAvLyAtLS0gU0XDh8ODTyBERSBMSU1QRVpBIERFIERBRE9TIFBSSU5DSVBBSVMgKFZPQ8OKIErDgSBUSU5IQSkgLS0tXHJcbiAgICAgIGlmICh0aGlzLnBlc3NvYS5zZXhvKSB7XHJcbiAgICAgICAgaWYgKHRoaXMucGVzc29hLnNleG8udG9VcHBlckNhc2UoKS50cmltKCkgPT09ICdGRU1JTklOTycpIHtcclxuICAgICAgICAgIHRoaXMucGVzc29hLmNvZGlnb1NleG8gPSAyO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5wZXNzb2Euc2V4by50b1VwcGVyQ2FzZSgpLnRyaW0oKSA9PT0gJ01BU0NVTElOTycpIHtcclxuICAgICAgICAgIHRoaXMucGVzc29hLmNvZGlnb1NleG8gPSAxO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMucGVzc29hLmRhdGFOYXNjaW1lbnRvKSB7XHJcbiAgICAgICAgdGhpcy5wZXNzb2EuZGF0YU5hc2NpbWVudG8gPSB0aGlzLnBhcnNlRGF0YSh0aGlzLnBlc3NvYS5kYXRhTmFzY2ltZW50byk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLnBlc3NvYS5lc3RhZG9DaXZpbCkge1xyXG4gICAgICAgIHRoaXMucGVzc29hLmNvZGlnb0VzdGFkb0NpdmlsID0gdGhpcy5wYXJzZUNvZGlnbyh0aGlzLnBlc3NvYS5lc3RhZG9DaXZpbCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLnBlc3NvYS5wYWlzTmFzY2ltZW50bykge1xyXG4gICAgICAgIHRoaXMucGVzc29hLmNvZGlnb1BhaXNOYXNjaW1lbnRvID0gdGhpcy5wYXJzZUNvZGlnbyh0aGlzLnBlc3NvYS5wYWlzTmFzY2ltZW50byk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLnBlc3NvYS5lc2NvbGFyaWRhZGUpIHtcclxuICAgICAgICB0aGlzLnBlc3NvYS5lc2NvbGFyaWRhZGUgPSB0aGlzLnBhcnNlQ29kaWdvKHRoaXMucGVzc29hLmVzY29sYXJpZGFkZSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIDEuIFByb2Nlc3NhIEVuZGVyZcOnb3NcclxuICAgICAgLy8gTyBwYXlsb2FkICdzYWx2YXInIGVzcGVyYTogb3JkZW1FbmRlcmVjbywgdGlwb0VuZGVyZWNvQ29kaWdvLCBwYWlzRW5kZXJlY29Db2RpZ28sIHVmRW5kZXJlY29cclxuICAgICAgLy8gMS4gUHJvY2Vzc2EgRW5kZXJlw6dvc1xyXG4gICAgICBpZiAodGhpcy5wZXNzb2EuZW5kZXJlY29zICYmIHRoaXMubGlzdGFUaXBvRW5kZXJlY28ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIC8vIC0tLSBDT1JSRcOHw4NPOiBBZGljaW9uYWRvICdpJyBhbyBmb3JFYWNoIC0tLVxyXG4gICAgICAgIHRoaXMucGVzc29hLmVuZGVyZWNvcy5mb3JFYWNoKChlbmQsIGkpID0+IHtcclxuICAgICAgICAgIC8vIFRyYWR1eiBvICd0aXBvJyAoc3RyaW5nKSBwYXJhICd0aXBvRW5kZXJlY29Db2RpZ28nIChudW1iZXIpXHJcbiAgICAgICAgICBpZiAoIWVuZC50aXBvRW5kZXJlY29Db2RpZ28gJiYgZW5kLnRpcG8pIHtcclxuICAgICAgICAgICAgY29uc3QgdGlwb0VuY29udHJhZG8gPSB0aGlzLmxpc3RhVGlwb0VuZGVyZWNvLmZpbmQodCA9PiB0LmRlbm9taW5hY2FvPy50b0xvd2VyQ2FzZSgpID09PSBlbmQudGlwbz8udG9Mb3dlckNhc2UoKSk7XHJcbiAgICAgICAgICAgIGlmICh0aXBvRW5jb250cmFkbykgZW5kLnRpcG9FbmRlcmVjb0NvZGlnbyA9IHRpcG9FbmNvbnRyYWRvLmNvZGlnbztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIC8vIFRyYWR1eiAncGFpcycgKHN0cmluZyAnMjIgLSBCUkFTSUwnKSBwYXJhICdwYWlzRW5kZXJlY29Db2RpZ28nIChudW1iZXIpXHJcbiAgICAgICAgICBpZiAoIWVuZC5wYWlzRW5kZXJlY29Db2RpZ28gJiYgZW5kLnBhaXMpIHtcclxuICAgICAgICAgICAgZW5kLnBhaXNFbmRlcmVjb0NvZGlnbyA9IHRoaXMucGFyc2VDb2RpZ28oZW5kLnBhaXMpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIE1hcGVpYSAnb3JkZW0nIC0+ICdvcmRlbUVuZGVyZWNvJyBvdSB1c2EgbyDDrW5kaWNlIChpICsgMSlcclxuICAgICAgICAgIC8vIE8gcGF5bG9hZCBkZSBzYWx2YXIgKG5vIGZvcm0pIGVzcGVyYSAnb3JkZW1FbmRlcmVjbydcclxuICAgICAgICAgIGVuZC5vcmRlbUVuZGVyZWNvID0gZW5kLm9yZGVtRW5kZXJlY28gfHwgZW5kLm9yZGVtIHx8IChpICsgMSk7XHJcblxyXG4gICAgICAgICAgLy8gTWFwZWlhICd1ZicgLT4gJ3VmRW5kZXJlY28nXHJcbiAgICAgICAgICBpZiAoIWVuZC51ZkVuZGVyZWNvICYmIGVuZC51Zikge1xyXG4gICAgICAgICAgICBlbmQudWZFbmRlcmVjbyA9IGVuZC51ZjtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gMi4gUHJvY2Vzc2EgVGVsZWZvbmVzXHJcbiAgICAgIGlmICh0aGlzLnBlc3NvYS50ZWxlZm9uZXMgJiYgdGhpcy5saXN0YVRpcG9UZWxlZm9uZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgLy8gLS0tIENPUlJFw4fDg086IEFkaWNpb25hZG8gJ2knIGFvIGZvckVhY2ggLS0tXHJcbiAgICAgICAgdGhpcy5wZXNzb2EudGVsZWZvbmVzLmZvckVhY2goKHRlbCwgaSkgPT4ge1xyXG4gICAgICAgICAgaWYgKCF0ZWwudGlwb1RlbGVmb25lQ29kaWdvICYmIHRlbC50aXBvKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRpcG9FbmNvbnRyYWRvID0gdGhpcy5saXN0YVRpcG9UZWxlZm9uZS5maW5kKHQgPT4gdC5kZW5vbWluYWNhbz8udG9Mb3dlckNhc2UoKSA9PT0gdGVsLnRpcG8/LnRvTG93ZXJDYXNlKCkpO1xyXG4gICAgICAgICAgICBpZiAodGlwb0VuY29udHJhZG8pIHRlbC50aXBvVGVsZWZvbmVDb2RpZ28gPSB0aXBvRW5jb250cmFkby5jb2RpZ287XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gLS0tIENPUlJFw4fDg086IEzDs2dpY2EgZGEgT3JkZW0gLS0tXHJcbiAgICAgICAgICAvLyBPIHBheWxvYWQgZGUgc2FsdmFyIChubyBmb3JtKSBsw6ogJ3RlbC5vcmRlbSdcclxuICAgICAgICAgIHRlbC5vcmRlbSA9IHRlbC5vcmRlbSB8fCAoaSArIDEpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyAzLiBQcm9jZXNzYSBFbWFpbHNcclxuICAgICAgaWYgKHRoaXMucGVzc29hLmVtYWlscyAmJiB0aGlzLmxpc3RhVGlwb0VtYWlsLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAvLyAtLS0gQ09SUkXDh8ODTzogQWRpY2lvbmFkbyAnaScgYW8gZm9yRWFjaCAtLS1cclxuICAgICAgICB0aGlzLnBlc3NvYS5lbWFpbHMuZm9yRWFjaCgoZW1haWwsIGkpID0+IHtcclxuICAgICAgICAgIGlmICghZW1haWwudGlwb0VtYWlsQ29kaWdvICYmIGVtYWlsLnRpcG8pIHtcclxuICAgICAgICAgICAgY29uc3QgdGlwb0VuY29udHJhZG8gPSB0aGlzLmxpc3RhVGlwb0VtYWlsLmZpbmQodCA9PiB0LmRlbm9taW5hY2FvPy50b0xvd2VyQ2FzZSgpID09PSBlbWFpbC50aXBvPy50b0xvd2VyQ2FzZSgpKTtcclxuICAgICAgICAgICAgaWYgKHRpcG9FbmNvbnRyYWRvKSBlbWFpbC50aXBvRW1haWxDb2RpZ28gPSB0aXBvRW5jb250cmFkby5jb2RpZ287XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gLS0tIENPUlJFw4fDg086IEzDs2dpY2EgZGEgT3JkZW0gLS0tXHJcbiAgICAgICAgICAvLyBPIHBheWxvYWQgZGUgc2FsdmFyIChubyBmb3JtKSBsw6ogJ2VtYWlsLm9yZGVtJ1xyXG4gICAgICAgICAgZW1haWwub3JkZW0gPSBlbWFpbC5vcmRlbSB8fCAoaSArIDEpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5wZXNzb2EudGlwb1Blc3NvYSA9PSBUaXBvUGVzc29hRW51bS5GSVNJQ0EpIHtcclxuICAgICAgICB0aGlzLnBlc3NvYS5jcGYgPSBVbmJVdGlscy5mb3JtYXRhQ3BmKHJlc3VsdGFkby5jcGYpO1xyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMucGVzc29hLnRpcG9QZXNzb2EgPT0gVGlwb1Blc3NvYUVudW0uSlVSSURJQ0EpIHtcclxuICAgICAgICB0aGlzLnBlc3NvYS5jbnBqID0gVW5iVXRpbHMuZm9ybWF0YUNucGoocmVzdWx0YWRvLmNucGopO1xyXG4gICAgICB9XHJcblxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gc2UgY2hlZ2FyIGFraSBlaCBwcSBuYW8gZW5jb250cm91Li4uIChsw7NnaWNhIHF1ZSBqw6EgZXhpc3RlKVxyXG4gICAgICBsZXQgbm92YVBlc3NvYSA9IG5ldyBVbmJQZXNzb2FNb2RlbCgpO1xyXG4gICAgICBub3ZhUGVzc29hLnRpcG9QZXNzb2EgPSB0aGlzLnBlc3NvYS50aXBvUGVzc29hO1xyXG4gICAgICBpZiAodGhpcy5wZXNzb2EudGlwb1Blc3NvYSA9PSBUaXBvUGVzc29hRW51bS5GSVNJQ0EpIHtcclxuICAgICAgICBub3ZhUGVzc29hLmNwZiA9IHRoaXMucGVzc29hLmNwZjtcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLnBlc3NvYS50aXBvUGVzc29hID09IFRpcG9QZXNzb2FFbnVtLkpVUklESUNBKSB7XHJcbiAgICAgICAgbm92YVBlc3NvYS5jbnBqID0gdGhpcy5wZXNzb2EuY25wajtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBub3ZhUGVzc29hLnBhc3NhcG9ydGUgPSB0aGlzLnBlc3NvYS5wYXNzYXBvcnRlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLnBlc3NvYSA9IG5vdmFQZXNzb2E7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5wZXNzb2FFbWl0dGVkLmVtaXQodGhpcy5wZXNzb2EpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBwYXJzZUNvZGlnbyh2YWxvclN0cmluZzogYW55KTogbnVtYmVyIHwgbnVsbCB7XHJcbiAgICBpZiAodHlwZW9mIHZhbG9yU3RyaW5nID09PSAnbnVtYmVyJykge1xyXG4gICAgICByZXR1cm4gdmFsb3JTdHJpbmc7IC8vIErDoSDDqSB1bSBuw7ptZXJvXHJcbiAgICB9XHJcbiAgICBpZiAodHlwZW9mIHZhbG9yU3RyaW5nICE9PSAnc3RyaW5nJyB8fCAhdmFsb3JTdHJpbmcuaW5jbHVkZXMoJyAtICcpKSB7XHJcbiAgICAgIC8vIFRlbnRhIGNvbnZlcnRlciBkaXJldG8sIGNhc28gbyBiYWNrZW5kIG1hbmRlIHPDsyBvIG7Dum1lcm8gY29tbyBzdHJpbmdcclxuICAgICAgY29uc3QgbnVtID0gcGFyc2VJbnQodmFsb3JTdHJpbmcsIDEwKTtcclxuICAgICAgcmV0dXJuIGlzTmFOKG51bSkgPyBudWxsIDogbnVtO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHBhcnRlcyA9IHZhbG9yU3RyaW5nLnNwbGl0KCcgLSAnKTtcclxuICAgIGNvbnN0IGNvZGlnbyA9IHBhcnNlSW50KHBhcnRlc1swXS50cmltKCksIDEwKTtcclxuICAgIHJldHVybiBpc05hTihjb2RpZ28pID8gbnVsbCA6IGNvZGlnbztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENvbnZlcnRlIHVtYSBzdHJpbmcgbm8gZm9ybWF0byAnZGQvTU0veXl5eScgcGFyYSB1bSBvYmpldG8gRGF0ZS5cclxuICAgKiBSZXRvcm5hIG51bGwgc2UgbyBmb3JtYXRvIGZvciBpbnbDoWxpZG8uXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBwYXJzZURhdGEoZGF0YVN0cmluZzogYW55KTogRGF0ZSB8IG51bGwge1xyXG4gICAgaWYgKGRhdGFTdHJpbmcgaW5zdGFuY2VvZiBEYXRlKSB7XHJcbiAgICAgIHJldHVybiBkYXRhU3RyaW5nOyAvLyBKw6Egw6kgdW0gb2JqZXRvIERhdGVcclxuICAgIH1cclxuICAgIGlmICh0eXBlb2YgZGF0YVN0cmluZyAhPT0gJ3N0cmluZycgfHwgIWRhdGFTdHJpbmcuaW5jbHVkZXMoJy8nKSkge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBwYXJ0ZXMgPSBkYXRhU3RyaW5nLnNwbGl0KCcvJyk7IC8vIFtkZCwgTU0sIHl5eXldXHJcbiAgICBpZiAocGFydGVzLmxlbmd0aCA9PT0gMykge1xyXG4gICAgICBjb25zdCBkaWEgPSBwYXJzZUludChwYXJ0ZXNbMF0sIDEwKTtcclxuICAgICAgY29uc3QgbWVzID0gcGFyc2VJbnQocGFydGVzWzFdLCAxMCkgLSAxOyAvLyBNw6pzIG5vIEpTIMOpIDAtaW5kZXhhZG9cclxuICAgICAgY29uc3QgYW5vID0gcGFyc2VJbnQocGFydGVzWzJdLCAxMCk7XHJcblxyXG4gICAgICAvLyBWZXJpZmljYSBzZSBhIGRhdGEgw6kgdsOhbGlkYVxyXG4gICAgICBjb25zdCBkYXRhT2JqID0gbmV3IERhdGUoYW5vLCBtZXMsIGRpYSk7XHJcbiAgICAgIGlmIChkYXRhT2JqLmdldEZ1bGxZZWFyKCkgPT09IGFubyAmJiBkYXRhT2JqLmdldE1vbnRoKCkgPT09IG1lcyAmJiBkYXRhT2JqLmdldERhdGUoKSA9PT0gZGlhKSB7XHJcbiAgICAgICAgcmV0dXJuIGRhdGFPYmo7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBudWxsOyAvLyBGb3JtYXRvIGludsOhbGlkb1xyXG4gIH1cclxuXHJcbiAgaGFuZGxlRXJyb3IoZXJybzogYW55KSB7XHJcbiAgICB0aGlzLm9wZW5TbmFja0JhcihlcnJvKTtcclxuICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XHJcblxyXG4gICAgLy8gc2UgY2hlZ2FyIGFraSwgZW50YW8gbmFvIGVuY29udHJvdSBhIHBlc3NvYS4gTWFzIGRhbW9zIGEgY2hhbmNlIGRlIGluY2x1aXIgcGVzc29hXHJcbiAgICB0aGlzLnBlc3NvYUVuY29udHJhZG8gPSBmYWxzZVxyXG4gIH1cclxuXHJcbiAgaGFuZGxlRXJyb3JQcmludENvbnNvbGUoZXJybzogYW55KSB7XHJcbiAgICBjb25zb2xlLmxvZyhlcnJvKTtcclxuICAgIHRoaXMuaGFuZGxlRXJyb3IoZXJybyk7XHJcbiAgfVxyXG5cclxuICBvcGVuU25hY2tCYXIobWVzc2FnZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLnNuYWNrQmFyLm9wZW4obWVzc2FnZSwgJ3gnLCB7XHJcbiAgICAgIGR1cmF0aW9uOiA1MDAwLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICB0aXBvUGVzc29hRW51bSgpIHtcclxuICAgIHJldHVybiBUaXBvUGVzc29hRW51bTtcclxuICB9XHJcbn1cclxuIiwiPGZvcm0gI3Blc3NvYUZvcm09XCJuZ0Zvcm1cIiBjbGFzcz1cInBlc3F1aXNhLWNvbnRhaW5lclwiIFtuZ1N0eWxlXT1cInsnLS10YW1hbmhvLW1heGltbyc6IGNhbXBvUGVzcXVpc2FNYXhXaWR0aH1cIiAobmdTdWJtaXQpPVwicGVzcXVpc2FyKClcIj5cclxuICA8ZGl2IGNsYXNzPVwiZm9ybS13cmFwcGVyXCI+XHJcbiAgICAgIDxkaXYgKm5nSWY9XCJtb3N0cmFyVGlwb1Blc3NvYVwiIGNsYXNzPVwicmFkaW8tY29udGFpbmVyXCI+XHJcbiAgICAgICAgICA8bWF0LXJhZGlvLWdyb3VwIGFyaWEtbGFiZWw9XCJUaXBvIGRlIFBlc3NvYVwiIFsobmdNb2RlbCldPVwicGVzc29hLnRpcG9QZXNzb2FcIiAjdGlwb1Blc3NvYT1cIm5nTW9kZWxcIiBuYW1lPVwidGlwb1Blc3NvYVwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtcmFkaW8tYnV0dG9uICpuZ0lmPVwicGVzcXVpc2FyUG9yQ1BGXCIgICAgICAgICAgICB2YWx1ZT1cInt7IHRpcG9QZXNzb2FFbnVtKCkuRklTSUNBfX1cIj5QZXNzb2EgRsOtc2ljYTwvbWF0LXJhZGlvLWJ1dHRvbj5cclxuICAgICAgICAgICAgICA8bWF0LXJhZGlvLWJ1dHRvbiAqbmdJZj1cInBlc3F1aXNhclBvckNOUEpcIiAgICAgICAgICAgdmFsdWU9XCJ7e3RpcG9QZXNzb2FFbnVtKCkuSlVSSURJQ0F9fVwiPiBQZXNzb2EgSnVyw61kaWNhPC9tYXQtcmFkaW8tYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDxtYXQtcmFkaW8tYnV0dG9uICpuZ0lmPVwicGVzcXVpc2FyUG9yRXN0cmFuZ2Vpcm9cIiAgICB2YWx1ZT1cInt7dGlwb1Blc3NvYUVudW0oKS5FU1RSQU5HRUlSQX19XCI+RXN0cmFuZ2Vpcm88L21hdC1yYWRpby1idXR0b24+XHJcbiAgICAgICAgICA8L21hdC1yYWRpby1ncm91cD5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwiYnJlYWtcIj48L2Rpdj5cclxuICAgICAgXHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJwZXNzb2EudGlwb1Blc3NvYSA9PT0gdGlwb1Blc3NvYUVudW0oKS5GSVNJQ0FcIj5cclxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIj5cclxuICAgICAgICAgIDxtYXQtbGFiZWw+Q1BGPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cInBlc3NvYS5jcGZcIiBuYW1lPVwiY3BmXCIgI2NwZj1cIm5nTW9kZWxcIiByZXF1aXJlZD17e3RydWV9fS8+ICAgICAgICBcclxuICAgICAgICAgIDxidXR0b24gbWF0U3VmZml4IG1hdC1pY29uLWJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgYXJpYS1sYWJlbD1cIlBlc3F1aXNhclwiIFtkaXNhYmxlZF09XCJpc0xvYWRpbmdcIiAoY2xpY2spPVwicGVzcXVpc2FyKClcIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc0xvYWRpbmc7IGVsc2UgbG9hZGluZ0ljb25cIj5cclxuICAgICAgICAgICAgICA8bWF0LWljb24+c2VhcmNoPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbG9hZGluZ0ljb24+XHJcbiAgICAgICAgICAgICAgPG1hdC1wcm9ncmVzcy1zcGlubmVyXHJcbiAgICAgICAgICAgICAgICBbZGlhbWV0ZXJdPVwiMjBcIlxyXG4gICAgICAgICAgICAgICAgbW9kZT1cImluZGV0ZXJtaW5hdGVcIlxyXG4gICAgICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwic3Bpbm5lci1idXR0b25cIj5cclxuICAgICAgICAgICAgICA8L21hdC1wcm9ncmVzcy1zcGlubmVyPlxyXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicGVzc29hLnRpcG9QZXNzb2EgPT09IHRpcG9QZXNzb2FFbnVtKCkuRVNUUkFOR0VJUkFcIj5cclxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIj5cclxuICAgICAgICAgIDxtYXQtbGFiZWw+UGFzc2Fwb3J0ZTwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgbWF0SW5wdXQgWyhuZ01vZGVsKV09XCJwZXNzb2EucGFzc2Fwb3J0ZVwiIG5hbWU9XCJwYXNzYXBvcnRlXCIgcmVxdWlyZWQ9XCJ0cnVlXCIgLz5cclxuICAgICAgICAgIDxidXR0b24gbWF0U3VmZml4IG1hdC1pY29uLWJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgYXJpYS1sYWJlbD1cIlBlc3F1aXNhclwiIChjbGljayk9XCJwZXNxdWlzYXIoKVwiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzTG9hZGluZzsgZWxzZSBsb2FkaW5nSWNvblwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtaWNvbj5zZWFyY2g8L21hdC1pY29uPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNsb2FkaW5nSWNvbj5cclxuICAgICAgICAgICAgICA8bWF0LXByb2dyZXNzLXNwaW5uZXJcclxuICAgICAgICAgICAgICAgIFtkaWFtZXRlcl09XCIyMFwiXHJcbiAgICAgICAgICAgICAgICBtb2RlPVwiaW5kZXRlcm1pbmF0ZVwiXHJcbiAgICAgICAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJzcGlubmVyLWJ1dHRvblwiPlxyXG4gICAgICAgICAgICAgIDwvbWF0LXByb2dyZXNzLXNwaW5uZXI+XHJcbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInBlc3NvYS50aXBvUGVzc29hID09PSB0aXBvUGVzc29hRW51bSgpLkpVUklESUNBXCI+XHJcbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XHJcbiAgICAgICAgICA8bWF0LWxhYmVsPkNOUEo8L21hdC1sYWJlbD5cclxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIG1hdElucHV0IFsobmdNb2RlbCldPVwicGVzc29hLmNucGpcIiBuYW1lPVwiY25walwiIHJlcXVpcmVkPVwidHJ1ZVwiIC8+XHJcbiAgICAgICAgICA8YnV0dG9uIG1hdFN1ZmZpeCBtYXQtaWNvbi1idXR0b24gdHlwZT1cImJ1dHRvblwiIGFyaWEtbGFiZWw9XCJQZXNxdWlzYXJcIiAoY2xpY2spPVwicGVzcXVpc2FyKClcIj5cclxuICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNMb2FkaW5nOyBlbHNlIGxvYWRpbmdJY29uXCI+XHJcbiAgICAgICAgICAgICAgPG1hdC1pY29uPnNlYXJjaDwvbWF0LWljb24+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2xvYWRpbmdJY29uPlxyXG4gICAgICAgICAgICAgIDxtYXQtcHJvZ3Jlc3Mtc3Bpbm5lclxyXG4gICAgICAgICAgICAgICAgW2RpYW1ldGVyXT1cIjIwXCJcclxuICAgICAgICAgICAgICAgIG1vZGU9XCJpbmRldGVybWluYXRlXCJcclxuICAgICAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInNwaW5uZXItYnV0dG9uXCI+XHJcbiAgICAgICAgICAgICAgPC9tYXQtcHJvZ3Jlc3Mtc3Bpbm5lcj5cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L2Rpdj5cclxuPC9mb3JtPiJdfQ==
|