mapa-library-ui 0.25.3 → 0.26.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/core/js-brasil/index.mjs +16 -0
- package/esm2020/lib/core/js-brasil/src/create.mjs +455 -0
- package/esm2020/lib/core/js-brasil/src/createNumberMask.mjs +115 -0
- package/esm2020/lib/core/js-brasil/src/estados.mjs +34 -0
- package/esm2020/lib/core/js-brasil/src/index.mjs +34 -0
- package/esm2020/lib/core/js-brasil/src/inscricaoestadual.mjs +702 -0
- package/esm2020/lib/core/js-brasil/src/interfaces.mjs +2 -0
- package/esm2020/lib/core/js-brasil/src/iptu.mjs +25 -0
- package/esm2020/lib/core/js-brasil/src/iptu_create.mjs +60 -0
- package/esm2020/lib/core/js-brasil/src/iptu_mask.mjs +38 -0
- package/esm2020/lib/core/js-brasil/src/iptu_validate.mjs +67 -0
- package/esm2020/lib/core/js-brasil/src/mask.mjs +579 -0
- package/esm2020/lib/core/js-brasil/src/name.mjs +371 -0
- package/esm2020/lib/core/js-brasil/src/placa.mjs +162 -0
- package/esm2020/lib/core/js-brasil/src/rg.mjs +63 -0
- package/esm2020/lib/core/js-brasil/src/saude.mjs +62 -0
- package/esm2020/lib/core/js-brasil/src/utils.mjs +304 -0
- package/esm2020/lib/core/js-brasil/src/validate.mjs +627 -0
- package/esm2020/lib/core/pipes/cpf.mjs +17 -0
- package/esm2020/public-api.mjs +3 -1
- package/esm2020/src/lib/components/table/lib/components/table/public-api.mjs +2 -1
- package/esm2020/src/lib/components/table/lib/components/table/src/table.module.mjs +10 -3
- package/fesm2015/mapa-library-ui-src-lib-components-table.mjs +31 -24
- package/fesm2015/mapa-library-ui-src-lib-components-table.mjs.map +1 -1
- package/fesm2015/mapa-library-ui.mjs +3675 -2
- package/fesm2015/mapa-library-ui.mjs.map +1 -1
- package/fesm2020/mapa-library-ui-src-lib-components-table.mjs +31 -24
- package/fesm2020/mapa-library-ui-src-lib-components-table.mjs.map +1 -1
- package/fesm2020/mapa-library-ui.mjs +3682 -2
- package/fesm2020/mapa-library-ui.mjs.map +1 -1
- package/lib/core/js-brasil/index.d.ts +15 -0
- package/lib/core/js-brasil/src/create.d.ts +37 -0
- package/lib/core/js-brasil/src/createNumberMask.d.ts +13 -0
- package/lib/core/js-brasil/src/estados.d.ts +7 -0
- package/lib/core/js-brasil/src/index.d.ts +34 -0
- package/lib/core/js-brasil/src/inscricaoestadual.d.ts +7 -0
- package/lib/core/js-brasil/src/interfaces.d.ts +51 -0
- package/lib/core/js-brasil/src/iptu.d.ts +3 -0
- package/lib/core/js-brasil/src/iptu_create.d.ts +5 -0
- package/lib/core/js-brasil/src/iptu_mask.d.ts +2 -0
- package/lib/core/js-brasil/src/iptu_validate.d.ts +10 -0
- package/lib/core/js-brasil/src/mask.d.ts +53 -0
- package/lib/core/js-brasil/src/name.d.ts +9 -0
- package/lib/core/js-brasil/src/placa.d.ts +6 -0
- package/lib/core/js-brasil/src/rg.d.ts +5 -0
- package/lib/core/js-brasil/src/saude.d.ts +84 -0
- package/lib/core/js-brasil/src/utils.d.ts +71 -0
- package/lib/core/js-brasil/src/validate.d.ts +90 -0
- package/lib/core/pipes/cpf.d.ts +7 -0
- package/mapa-library-ui-0.26.0.tgz +0 -0
- package/package.json +1 -1
- package/public-api.d.ts +2 -0
- package/src/lib/components/table/lib/components/table/public-api.d.ts +1 -0
- package/mapa-library-ui-0.25.3.tgz +0 -0
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export * from './src';
|
|
2
|
+
export * from './src/create';
|
|
3
|
+
export * from './src/estados';
|
|
4
|
+
export * from './src/inscricaoestadual';
|
|
5
|
+
export * from './src/interfaces';
|
|
6
|
+
export * from './src/iptu_create';
|
|
7
|
+
export * from './src/iptu_mask';
|
|
8
|
+
export * from './src/iptu_validate';
|
|
9
|
+
export * from './src/iptu';
|
|
10
|
+
export * from './src/name';
|
|
11
|
+
export * from './src/placa';
|
|
12
|
+
export * from './src/rg';
|
|
13
|
+
export * from './src/saude';
|
|
14
|
+
export * from './src/utils';
|
|
15
|
+
export * from './src/validate';
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tYXBhLWxpYnJhcnktdWkvc3JjL2xpYi9jb3JlL2pzLWJyYXNpbC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLE9BQU8sQ0FBQztBQUN0QixjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLGVBQWUsQ0FBQztBQUM5QixjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMsa0JBQWtCLENBQUM7QUFDakMsY0FBYyxtQkFBbUIsQ0FBQztBQUNsQyxjQUFjLGlCQUFpQixDQUFDO0FBQ2hDLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyxZQUFZLENBQUM7QUFDM0IsY0FBYyxZQUFZLENBQUM7QUFDM0IsY0FBYyxhQUFhLENBQUM7QUFDNUIsY0FBYyxVQUFVLENBQUM7QUFDekIsY0FBYyxhQUFhLENBQUM7QUFDNUIsY0FBYyxhQUFhLENBQUM7QUFDNUIsY0FBYyxnQkFBZ0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vc3JjJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2NyZWF0ZSc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9lc3RhZG9zJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2luc2NyaWNhb2VzdGFkdWFsJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2ludGVyZmFjZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvaXB0dV9jcmVhdGUnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvaXB0dV9tYXNrJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2lwdHVfdmFsaWRhdGUnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvaXB0dSc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9uYW1lJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL3BsYWNhJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL3JnJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL3NhdWRlJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL3V0aWxzJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL3ZhbGlkYXRlJzsiXX0=
|
|
@@ -0,0 +1,455 @@
|
|
|
1
|
+
import { ESTADOS_SIGLA } from './estados';
|
|
2
|
+
import { getAllDigits, fillString, modulo11Custom } from './utils';
|
|
3
|
+
/**
|
|
4
|
+
*
|
|
5
|
+
* @param uf - UF do número da guia. Ex: 35(SP), 81(PE)
|
|
6
|
+
* @param ano - ANO do número da guia. Ex: 2018, 2019
|
|
7
|
+
* @param tipo - TIPO da guia. Aih = 1, APAC = 2
|
|
8
|
+
*/
|
|
9
|
+
export function create_aih(value) {
|
|
10
|
+
value = getAllDigits(value.toString());
|
|
11
|
+
if (value.length > 12) {
|
|
12
|
+
value = value.toString().substr(0, value.length - 1);
|
|
13
|
+
}
|
|
14
|
+
const cod = parseInt(value);
|
|
15
|
+
const calc = Math.ceil(cod - (cod / 11));
|
|
16
|
+
const digito = calc.toString().substr(-1);
|
|
17
|
+
return digito;
|
|
18
|
+
}
|
|
19
|
+
export function create_certidao(value) {
|
|
20
|
+
if (value.length > 30) {
|
|
21
|
+
value = value.substring(0, value.length - 2);
|
|
22
|
+
}
|
|
23
|
+
let b1 = parseInt(value.slice(29));
|
|
24
|
+
let b2 = parseInt(value.slice(28, 29));
|
|
25
|
+
let b3 = parseInt(value.slice(27, 28));
|
|
26
|
+
let b4 = parseInt(value.slice(26, 27));
|
|
27
|
+
let b5 = parseInt(value.slice(25, 26));
|
|
28
|
+
let b6 = parseInt(value.slice(24, 25));
|
|
29
|
+
let b7 = parseInt(value.slice(23, 24));
|
|
30
|
+
let b8 = parseInt(value.slice(22, 23));
|
|
31
|
+
let b9 = parseInt(value.slice(21, 22));
|
|
32
|
+
let b10 = parseInt(value.slice(20, 21));
|
|
33
|
+
let b11 = parseInt(value.slice(19, 20));
|
|
34
|
+
let b12 = parseInt(value.slice(18, 19));
|
|
35
|
+
let b13 = parseInt(value.slice(17, 18));
|
|
36
|
+
let b14 = parseInt(value.slice(16, 17));
|
|
37
|
+
let b15 = parseInt(value.slice(15, 16));
|
|
38
|
+
let b16 = parseInt(value.slice(14, 15));
|
|
39
|
+
let b17 = parseInt(value.slice(13, 14));
|
|
40
|
+
let b18 = parseInt(value.slice(12, 13));
|
|
41
|
+
let b19 = parseInt(value.slice(11, 12));
|
|
42
|
+
let b20 = parseInt(value.slice(10, 11));
|
|
43
|
+
let b21 = parseInt(value.slice(9, 10));
|
|
44
|
+
let b22 = parseInt(value.slice(8, 9));
|
|
45
|
+
let b23 = parseInt(value.slice(7, 8));
|
|
46
|
+
let b24 = parseInt(value.slice(6, 7));
|
|
47
|
+
let b25 = parseInt(value.slice(5, 6));
|
|
48
|
+
let b26 = parseInt(value.slice(4, 5));
|
|
49
|
+
let b27 = parseInt(value.slice(3, 4));
|
|
50
|
+
let b28 = parseInt(value.slice(2, 3));
|
|
51
|
+
let b29 = parseInt(value.slice(1, 2));
|
|
52
|
+
let b30 = parseInt(value.slice(0, 1));
|
|
53
|
+
let certPriDig = (b1 * 9 + b2 * 8 + b3 * 7 + b4 * 6 + b5 * 5 + b6 * 4 + b7 * 3 + b8 * 2 + b9 * 1 + b10 * 0 + b11 * 10 + b12 * 9 + b13 * 8 + b14 * 7 + b15 * 6 + b16 * 5 + b17 * 4 + b18 * 3 + b19 * 2 + b20 * 1 + b21 * 0 + b22 * 10 + b23 * 9 + b24 * 8 + b25 * 7 + b26 * 6 + b27 * 5 + b28 * 4 + b29 * 3 + b30 * 2) % 11;
|
|
54
|
+
if (certPriDig == 10) {
|
|
55
|
+
certPriDig = 1;
|
|
56
|
+
}
|
|
57
|
+
let certSegDig = (certPriDig * 9 + b1 * 8 + b2 * 7 + b3 * 6 + b4 * 5 + b5 * 4 + b6 * 3 + b7 * 2 + b8 * 1 + b9 * 0 + b10 * 10 + b11 * 9 + b12 * 8 + b13 * 7 + b14 * 6 + b15 * 5 + b16 * 4 + b17 * 3 + b18 * 2 + b19 * 1 + b20 * 0 + b21 * 10 + b22 * 9 + b23 * 8 + b24 * 7 + b25 * 6 + b26 * 5 + b27 * 4 + b28 * 3 + b29 * 2 + b30 * 1) % 11;
|
|
58
|
+
if (certSegDig == 10) {
|
|
59
|
+
certSegDig = 1;
|
|
60
|
+
}
|
|
61
|
+
let certDV = certPriDig * 10 + certSegDig;
|
|
62
|
+
if (certDV == 0) {
|
|
63
|
+
certDV = "00";
|
|
64
|
+
}
|
|
65
|
+
if (certDV > 0 && certDV < 10) {
|
|
66
|
+
certDV = "0" + certDV;
|
|
67
|
+
}
|
|
68
|
+
return certDV.toString();
|
|
69
|
+
}
|
|
70
|
+
export function create_cnhespelho(value) {
|
|
71
|
+
let v1 = modulo11Custom(value.substr(0, value.length - 1), 1, 8, false);
|
|
72
|
+
return v1;
|
|
73
|
+
}
|
|
74
|
+
export function create_renachestadual(value) {
|
|
75
|
+
const state = value.substr(0, 2).toLowerCase();
|
|
76
|
+
if (!ESTADOS_SIGLA.includes(state)) {
|
|
77
|
+
return false;
|
|
78
|
+
}
|
|
79
|
+
let digits = value.substr(2);
|
|
80
|
+
digits = digits.replace(/[^\d]/g, '');
|
|
81
|
+
if (digits.length !== 9) {
|
|
82
|
+
return false;
|
|
83
|
+
}
|
|
84
|
+
let v1 = modulo11Custom(digits.substr(0, digits.length - 1), 1, 11);
|
|
85
|
+
return '' + v1;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
*
|
|
89
|
+
* @param value
|
|
90
|
+
* @returns
|
|
91
|
+
*/
|
|
92
|
+
export function create_renachseguranca(value) {
|
|
93
|
+
value = value.replace(/[^\d]+/g, '');
|
|
94
|
+
if (value.length !== 11) {
|
|
95
|
+
return false;
|
|
96
|
+
}
|
|
97
|
+
let v1 = modulo11Custom(value.substr(0, value.length - 1), 1, 11);
|
|
98
|
+
return "" + v1;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Dígito verificador da CNH não é mais o módulo 11 conforme últimas resoluções
|
|
102
|
+
* @param value
|
|
103
|
+
* @returns
|
|
104
|
+
*/
|
|
105
|
+
export function create_cnh(value) {
|
|
106
|
+
value = value.replace(/[^\d]+/g, '');
|
|
107
|
+
if (value.length != 11 || value === '0') {
|
|
108
|
+
return false;
|
|
109
|
+
}
|
|
110
|
+
// let v1 = modulo11Custom(value.substr(0, value.length - 2), 2);
|
|
111
|
+
// if (v1 === '10') v1 = '00'
|
|
112
|
+
let v1 = value.substr(-2);
|
|
113
|
+
return v1;
|
|
114
|
+
}
|
|
115
|
+
export function create_cnpj(cnpj) {
|
|
116
|
+
cnpj = cnpj.replace(/[^\d]+/g, '');
|
|
117
|
+
if (cnpj === '') {
|
|
118
|
+
return false;
|
|
119
|
+
}
|
|
120
|
+
if (cnpj.length !== 14) {
|
|
121
|
+
return false;
|
|
122
|
+
}
|
|
123
|
+
// Elimina CNPJs invalidos conhecidos
|
|
124
|
+
if (cnpj === '00000000000000' ||
|
|
125
|
+
cnpj === '11111111111111' ||
|
|
126
|
+
cnpj === '22222222222222' ||
|
|
127
|
+
cnpj === '33333333333333' ||
|
|
128
|
+
cnpj === '44444444444444' ||
|
|
129
|
+
cnpj === '55555555555555' ||
|
|
130
|
+
cnpj === '66666666666666' ||
|
|
131
|
+
cnpj === '77777777777777' ||
|
|
132
|
+
cnpj === '88888888888888' ||
|
|
133
|
+
cnpj === '99999999999999') {
|
|
134
|
+
return false;
|
|
135
|
+
}
|
|
136
|
+
// Valida DVs
|
|
137
|
+
let tamanho = cnpj.length - 2;
|
|
138
|
+
let numeros = cnpj.substring(0, tamanho);
|
|
139
|
+
let soma = 0;
|
|
140
|
+
let pos = tamanho - 7;
|
|
141
|
+
for (let i = tamanho; i >= 1; i--) {
|
|
142
|
+
soma += numeros.charAt(tamanho - i) * pos--;
|
|
143
|
+
if (pos < 2) {
|
|
144
|
+
pos = 9;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
const resultados = [0, 0];
|
|
148
|
+
resultados[0] = soma % 11 < 2 ? 0 : 11 - soma % 11;
|
|
149
|
+
tamanho = tamanho + 1;
|
|
150
|
+
numeros = cnpj.substring(0, tamanho);
|
|
151
|
+
soma = 0;
|
|
152
|
+
pos = tamanho - 7;
|
|
153
|
+
for (let i = tamanho; i >= 1; i--) {
|
|
154
|
+
soma += numeros.charAt(tamanho - i) * pos--;
|
|
155
|
+
if (pos < 2) {
|
|
156
|
+
pos = 9;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
resultados[1] = soma % 11 < 2 ? 0 : 11 - soma % 11;
|
|
160
|
+
return resultados;
|
|
161
|
+
}
|
|
162
|
+
export function create_cns(number) {
|
|
163
|
+
number = getAllDigits(number);
|
|
164
|
+
let somaInicial = 0;
|
|
165
|
+
for (let i = 0; i < number.length - 1; i++) {
|
|
166
|
+
somaInicial += parseInt(number[i]) * (15 - i);
|
|
167
|
+
}
|
|
168
|
+
let soma = somaInicial;
|
|
169
|
+
let rest = 0;
|
|
170
|
+
while (soma % 11 !== 0) {
|
|
171
|
+
rest++;
|
|
172
|
+
soma = somaInicial + (rest * 1);
|
|
173
|
+
}
|
|
174
|
+
return number.substr(-2, 1) + rest;
|
|
175
|
+
}
|
|
176
|
+
export function create_cpf(strCPF) {
|
|
177
|
+
strCPF = strCPF.replace(/[^\d]+/g, '');
|
|
178
|
+
if (strCPF === '00000000000') {
|
|
179
|
+
return false;
|
|
180
|
+
}
|
|
181
|
+
// const r1 = modulo11(strCPF.substr(0, strCPF.length - 2))
|
|
182
|
+
// const r2 = modulo11(strCPF.substr(0, strCPF.length - 2) + '' + r1)
|
|
183
|
+
// const restos = [
|
|
184
|
+
// r1, r2
|
|
185
|
+
// ];
|
|
186
|
+
const restoscustom = modulo11Custom(strCPF.substr(0, strCPF.length - 2), 2, 12);
|
|
187
|
+
return restoscustom;
|
|
188
|
+
}
|
|
189
|
+
export function create_cartaocredito(number) {
|
|
190
|
+
// if (number.length > 18) { alert("Erro. A rotina não abrange cartões\ncom mais de 18 dígitos (fora o DV).\nIntroduza 18 dígitos, no máximo."); }
|
|
191
|
+
number = "00000000000000000" + number;
|
|
192
|
+
number = number.slice(number.length - 18);
|
|
193
|
+
let b1 = parseInt(number.slice(17));
|
|
194
|
+
let b2 = parseInt(number.slice(16, 17));
|
|
195
|
+
let b3 = parseInt(number.slice(15, 16));
|
|
196
|
+
let b4 = parseInt(number.slice(14, 15));
|
|
197
|
+
let b5 = parseInt(number.slice(13, 14));
|
|
198
|
+
let b6 = parseInt(number.slice(12, 13));
|
|
199
|
+
let b7 = parseInt(number.slice(11, 12));
|
|
200
|
+
let b8 = parseInt(number.slice(10, 11));
|
|
201
|
+
let b9 = parseInt(number.slice(9, 10));
|
|
202
|
+
let b10 = parseInt(number.slice(8, 9));
|
|
203
|
+
let b11 = parseInt(number.slice(7, 8));
|
|
204
|
+
let b12 = parseInt(number.slice(6, 7));
|
|
205
|
+
let b13 = parseInt(number.slice(5, 6));
|
|
206
|
+
let b14 = parseInt(number.slice(4, 5));
|
|
207
|
+
let b15 = parseInt(number.slice(3, 4));
|
|
208
|
+
let b16 = parseInt(number.slice(2, 3));
|
|
209
|
+
let b17 = parseInt(number.slice(1, 2));
|
|
210
|
+
let b18 = parseInt(number.slice(0, 1));
|
|
211
|
+
let ci17 = b1 * 2;
|
|
212
|
+
if (ci17 > 9) {
|
|
213
|
+
ci17 = ci17 - 9;
|
|
214
|
+
}
|
|
215
|
+
let ci1516 = b3 * 2;
|
|
216
|
+
if (ci1516 > 9) {
|
|
217
|
+
ci1516 = ci1516 - 9;
|
|
218
|
+
}
|
|
219
|
+
let ci1314 = b5 * 2;
|
|
220
|
+
if (ci1314 > 9) {
|
|
221
|
+
ci1314 = ci1314 - 9;
|
|
222
|
+
}
|
|
223
|
+
let ci1112 = b7 * 2;
|
|
224
|
+
if (ci1112 > 9) {
|
|
225
|
+
ci1112 = ci1112 - 9;
|
|
226
|
+
}
|
|
227
|
+
let ci910 = b9 * 2;
|
|
228
|
+
if (ci910 > 9) {
|
|
229
|
+
ci910 = ci910 - 9;
|
|
230
|
+
}
|
|
231
|
+
let ci78 = b11 * 2;
|
|
232
|
+
if (ci78 > 9) {
|
|
233
|
+
ci78 = ci78 - 9;
|
|
234
|
+
}
|
|
235
|
+
let ci56 = b13 * 2;
|
|
236
|
+
if (ci56 > 9) {
|
|
237
|
+
ci56 = ci56 - 9;
|
|
238
|
+
}
|
|
239
|
+
let ci34 = b15 * 2;
|
|
240
|
+
if (ci34 > 9) {
|
|
241
|
+
ci34 = ci34 - 9;
|
|
242
|
+
}
|
|
243
|
+
let ci12 = b17 * 2;
|
|
244
|
+
if (ci12 > 9) {
|
|
245
|
+
ci12 = ci12 - 9;
|
|
246
|
+
}
|
|
247
|
+
let ci1617 = b2;
|
|
248
|
+
let ci1415 = b4;
|
|
249
|
+
let ci1213 = b6;
|
|
250
|
+
let ci1011 = b8;
|
|
251
|
+
let ci89 = b10;
|
|
252
|
+
let ci67 = b12;
|
|
253
|
+
let ci45 = b14;
|
|
254
|
+
let ci23 = b16;
|
|
255
|
+
let ci01 = b18;
|
|
256
|
+
let ccredDig = (ci1617 + ci1415 + ci1213 + ci1011 + ci89 + ci67 + ci45 + ci23 + ci01 + ci17 + ci1516 + ci1314 + ci1112 + ci910 + ci78 + ci56 + ci34 + ci12) % 10;
|
|
257
|
+
ccredDig = 10 - ccredDig;
|
|
258
|
+
if (ccredDig == 10) {
|
|
259
|
+
ccredDig = 0;
|
|
260
|
+
}
|
|
261
|
+
return ccredDig;
|
|
262
|
+
}
|
|
263
|
+
export function create_ect(number) {
|
|
264
|
+
number = getAllDigits(number);
|
|
265
|
+
number = "0000000" + number;
|
|
266
|
+
number = number.slice(number.length - 8);
|
|
267
|
+
let b1 = parseInt(number.slice(7));
|
|
268
|
+
let b2 = parseInt(number.slice(6, 7));
|
|
269
|
+
let b3 = parseInt(number.slice(5, 6));
|
|
270
|
+
let b4 = parseInt(number.slice(4, 5));
|
|
271
|
+
let b5 = parseInt(number.slice(3, 4));
|
|
272
|
+
let b6 = parseInt(number.slice(2, 3));
|
|
273
|
+
let b7 = parseInt(number.slice(1, 2));
|
|
274
|
+
let b8 = parseInt(number.slice(0, 1));
|
|
275
|
+
let regEctDig = (b1 * 7 + b2 * 9 + b3 * 5 + b4 * 3 + b5 * 2 + b6 * 4 + b7 * 6 + b8 * 8) % 11;
|
|
276
|
+
regEctDig = 11 - regEctDig;
|
|
277
|
+
if (regEctDig == 11) {
|
|
278
|
+
regEctDig = 5;
|
|
279
|
+
}
|
|
280
|
+
if (regEctDig == 10) {
|
|
281
|
+
regEctDig = 0;
|
|
282
|
+
}
|
|
283
|
+
return regEctDig;
|
|
284
|
+
}
|
|
285
|
+
export function create_pispasep(number) {
|
|
286
|
+
number = getAllDigits(number);
|
|
287
|
+
let nis = fillString(number, 11, '0');
|
|
288
|
+
let d;
|
|
289
|
+
let p = 2, c = 9;
|
|
290
|
+
for (d = 0; c >= 0; c--, (p < 9) ? p++ : p = 2) {
|
|
291
|
+
d += parseInt(nis[c]) * p;
|
|
292
|
+
}
|
|
293
|
+
const digit = (((10 * d) % 11) % 10);
|
|
294
|
+
return digit;
|
|
295
|
+
}
|
|
296
|
+
export function create_renavam(renavam) {
|
|
297
|
+
let dig1 = 0;
|
|
298
|
+
while (renavam.length < 11) {
|
|
299
|
+
renavam = '0' + renavam;
|
|
300
|
+
}
|
|
301
|
+
dig1 = (renavam.charCodeAt(0) - 48) * 3 + (renavam.charCodeAt(1) - 48) * 2 + (renavam.charCodeAt(2) - 48) * 9 + (renavam.charCodeAt(3) - 48) * 8 +
|
|
302
|
+
(renavam.charCodeAt(4) - 48) * 7 + (renavam.charCodeAt(5) - 48) * 6 + (renavam.charCodeAt(6) - 48) * 5 +
|
|
303
|
+
(renavam.charCodeAt(7) - 48) * 4 + (renavam.charCodeAt(8) - 48) * 3 + (renavam.charCodeAt(9) - 48) * 2;
|
|
304
|
+
dig1 = dig1 * 10;
|
|
305
|
+
let resto = (dig1 % 11);
|
|
306
|
+
if (resto === 10) {
|
|
307
|
+
return 0;
|
|
308
|
+
}
|
|
309
|
+
else {
|
|
310
|
+
return resto;
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
/**
|
|
314
|
+
*
|
|
315
|
+
* Font: http://ghiorzi.org/index.htm
|
|
316
|
+
* @param number
|
|
317
|
+
*/
|
|
318
|
+
export function create_processo(number) {
|
|
319
|
+
number = getAllDigits(number);
|
|
320
|
+
number = "00000000000000000" + number;
|
|
321
|
+
number = number.slice(number.length - 18);
|
|
322
|
+
let b1 = parseInt(number.slice(0, 1)) * 10000000000;
|
|
323
|
+
let b2 = parseInt(number.slice(1, 2)) * 1000000000;
|
|
324
|
+
let b3 = parseInt(number.slice(2, 3)) * 100000000;
|
|
325
|
+
let b4 = parseInt(number.slice(3, 4)) * 10000000;
|
|
326
|
+
let b5 = parseInt(number.slice(4, 5)) * 1000000;
|
|
327
|
+
let b6 = parseInt(number.slice(5, 6)) * 100000;
|
|
328
|
+
let b7 = parseInt(number.slice(6, 7)) * 10000;
|
|
329
|
+
let b8 = parseInt(number.slice(7, 8)) * 1000;
|
|
330
|
+
let b9 = parseInt(number.slice(8, 9)) * 100;
|
|
331
|
+
let b10 = parseInt(number.slice(9, 10)) * 10;
|
|
332
|
+
let b11 = parseInt(number.slice(10, 11));
|
|
333
|
+
const proc1a11 = b1 + b2 + b3 + b4 + b5 + b6 + b7 + b8 + b9 + b10 + b11;
|
|
334
|
+
const resto1 = proc1a11 % 97;
|
|
335
|
+
let b12 = parseInt(number.slice(11, 12)) * 1000000;
|
|
336
|
+
let b13 = parseInt(number.slice(12, 13)) * 100000;
|
|
337
|
+
let b14 = parseInt(number.slice(13, 14)) * 10000;
|
|
338
|
+
let b15 = parseInt(number.slice(14, 15)) * 1000;
|
|
339
|
+
let b16 = parseInt(number.slice(15, 16)) * 100;
|
|
340
|
+
let b17 = parseInt(number.slice(16, 17)) * 10;
|
|
341
|
+
let b18 = parseInt(number.slice(17));
|
|
342
|
+
const proc12a18 = b12 + b13 + b14 + b15 + b16 + b17 + b18;
|
|
343
|
+
const resto2 = (resto1 * 10000000 * 100 + proc12a18 * 100) % 97;
|
|
344
|
+
let procJudDV = 98 - resto2;
|
|
345
|
+
if (procJudDV < 10) {
|
|
346
|
+
procJudDV = "0" + procJudDV;
|
|
347
|
+
}
|
|
348
|
+
let procJudCompl = b1 / 10000 + b2 / 10000 + b3 / 10000 + b4 / 10000 + b5 / 10000 + b6 / 10000 + b7 / 10000 + "-" + procJudDV + "." + b8 / 1000 + b9 / 100 + b10 / 10 + b11 + "." + b12 / 1000000 + "." + b13 / 100000 + b14 / 10000 + "." + b15 / 1000 + b16 / 100 + b17 / 10 + b18;
|
|
349
|
+
procJudCompl = "000000" + procJudCompl;
|
|
350
|
+
const result = procJudCompl.slice(procJudCompl.length - 25);
|
|
351
|
+
return result;
|
|
352
|
+
}
|
|
353
|
+
export function create_titulo_atual(titulo) {
|
|
354
|
+
const tit = titulo;
|
|
355
|
+
let dig1 = 0;
|
|
356
|
+
let dig2 = 0;
|
|
357
|
+
const tam = tit.length;
|
|
358
|
+
const estado = tit.substr(tam - 4, 2);
|
|
359
|
+
titulo = tit.substr(0, tam - 2);
|
|
360
|
+
titulo = '000000000000' + titulo;
|
|
361
|
+
titulo = titulo.substr(titulo.length - 11, titulo.length - 1);
|
|
362
|
+
const exce = (estado === '01') || (estado === '02');
|
|
363
|
+
dig1 = (titulo.charCodeAt(0) - 48) * 2 + (titulo.charCodeAt(1) - 48) * 9 + (titulo.charCodeAt(2) - 48) * 8 +
|
|
364
|
+
(titulo.charCodeAt(3) - 48) * 7 + (titulo.charCodeAt(4) - 48) * 6 + (titulo.charCodeAt(5) - 48) * 5 +
|
|
365
|
+
(titulo.charCodeAt(6) - 48) * 4 + (titulo.charCodeAt(7) - 48) * 3 + (titulo.charCodeAt(8) - 48) * 2;
|
|
366
|
+
let resto = (dig1 % 11);
|
|
367
|
+
if (resto === 0) {
|
|
368
|
+
if (exce) {
|
|
369
|
+
dig1 = 1;
|
|
370
|
+
}
|
|
371
|
+
else {
|
|
372
|
+
dig1 = 0;
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
else {
|
|
376
|
+
if (resto === 1) {
|
|
377
|
+
dig1 = 0;
|
|
378
|
+
}
|
|
379
|
+
else {
|
|
380
|
+
dig1 = 11 - resto;
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
dig2 = (titulo.charCodeAt(9) - 48) * 4 + (titulo.charCodeAt(10) - 48) * 3 + dig1 * 2;
|
|
384
|
+
resto = (dig2 % 11);
|
|
385
|
+
if (resto === 0) {
|
|
386
|
+
if (exce) {
|
|
387
|
+
dig2 = 1;
|
|
388
|
+
}
|
|
389
|
+
else {
|
|
390
|
+
dig2 = 0;
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
else {
|
|
394
|
+
if (resto === 1) {
|
|
395
|
+
dig2 = 0;
|
|
396
|
+
}
|
|
397
|
+
else {
|
|
398
|
+
dig2 = 11 - resto;
|
|
399
|
+
}
|
|
400
|
+
}
|
|
401
|
+
return dig1.toString() + dig2.toString();
|
|
402
|
+
}
|
|
403
|
+
export function create_titulo(titNum) {
|
|
404
|
+
titNum = getAllDigits(titNum);
|
|
405
|
+
if (titNum.length > 11) {
|
|
406
|
+
titNum = titNum.substr(0, 11);
|
|
407
|
+
}
|
|
408
|
+
titNum = "00000000" + titNum;
|
|
409
|
+
titNum = titNum.slice(titNum.length - 11);
|
|
410
|
+
let a1 = parseInt(titNum.slice(10));
|
|
411
|
+
let a2 = parseInt(titNum.slice(9, 10));
|
|
412
|
+
let a3 = parseInt(titNum.slice(8, 9));
|
|
413
|
+
let a4 = parseInt(titNum.slice(7, 8));
|
|
414
|
+
let a5 = parseInt(titNum.slice(6, 7));
|
|
415
|
+
let a6 = parseInt(titNum.slice(5, 6));
|
|
416
|
+
let a7 = parseInt(titNum.slice(4, 5));
|
|
417
|
+
let a8 = parseInt(titNum.slice(3, 4));
|
|
418
|
+
let a9 = parseInt(titNum.slice(2, 3));
|
|
419
|
+
let a10 = parseInt(titNum.slice(1, 2));
|
|
420
|
+
let a11 = parseInt(titNum.slice(0, 1));
|
|
421
|
+
if (a2 * 10 + a1 == 0 || a2 * 10 + a1 > 28) {
|
|
422
|
+
throw new Error("Esse nº é suspeito, porque a identificação da \nUF (últimos 2 dígitos) deve estar entre 01 e 28.");
|
|
423
|
+
}
|
|
424
|
+
let titExcecao1 = 0;
|
|
425
|
+
let titExcecao2 = 0;
|
|
426
|
+
let titPriDig = (a3 * 9 + a4 * 8 + a5 * 7 + a6 * 6 + a7 * 5 + a8 * 4 + a9 * 3 + a10 * 2 + a11 * 9) % 11;
|
|
427
|
+
if (titPriDig == 0) {
|
|
428
|
+
titExcecao1 = 1;
|
|
429
|
+
}
|
|
430
|
+
if (titPriDig == 10) {
|
|
431
|
+
titPriDig = 0;
|
|
432
|
+
}
|
|
433
|
+
if ((a2 * 10 + a1 == 1 || a2 * 10 + a1 == 2) && (titExcecao1 == 1)) {
|
|
434
|
+
titPriDig = 1;
|
|
435
|
+
}
|
|
436
|
+
let titSegDig = (titPriDig * 9 + a1 * 8 + a2 * 7) % 11;
|
|
437
|
+
if (titSegDig == 0) {
|
|
438
|
+
titExcecao2 = 1;
|
|
439
|
+
}
|
|
440
|
+
if (titSegDig == 10) {
|
|
441
|
+
titSegDig = 0;
|
|
442
|
+
}
|
|
443
|
+
if ((a2 * 10 + a1 == 1 || a2 * 10 + a1 == 2) && (titExcecao2 == 1)) {
|
|
444
|
+
titSegDig = 1;
|
|
445
|
+
}
|
|
446
|
+
let titDV = titPriDig * 10 + titSegDig;
|
|
447
|
+
if (titDV == 0) {
|
|
448
|
+
titDV = "00";
|
|
449
|
+
}
|
|
450
|
+
if (titDV > 0 && titDV < 10) {
|
|
451
|
+
titDV = "0" + titDV;
|
|
452
|
+
}
|
|
453
|
+
return titDV.toString();
|
|
454
|
+
}
|
|
455
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbWFwYS1saWJyYXJ5LXVpL3NyYy9saWIvY29yZS9qcy1icmFzaWwvc3JjL2NyZWF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQzFDLE9BQU8sRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUVuRTs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxVQUFVLENBQUMsS0FBOEI7SUFDdkQsS0FBSyxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUN2QyxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsRUFBRSxFQUFFO1FBQ3JCLEtBQUssR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0tBQ3REO0lBQ0QsTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzVCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDekMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzFDLE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUM7QUFFRCxNQUFNLFVBQVUsZUFBZSxDQUFDLEtBQWE7SUFFM0MsSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLEVBQUUsRUFBRTtRQUNyQixLQUFLLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztLQUM5QztJQUNELElBQUksRUFBRSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDbkMsSUFBSSxFQUFFLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDdkMsSUFBSSxFQUFFLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDdkMsSUFBSSxFQUFFLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDdkMsSUFBSSxFQUFFLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDdkMsSUFBSSxFQUFFLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDdkMsSUFBSSxFQUFFLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDdkMsSUFBSSxFQUFFLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDdkMsSUFBSSxFQUFFLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDdkMsSUFBSSxHQUFHLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDeEMsSUFBSSxHQUFHLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDeEMsSUFBSSxHQUFHLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDeEMsSUFBSSxHQUFHLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDeEMsSUFBSSxHQUFHLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDeEMsSUFBSSxHQUFHLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDeEMsSUFBSSxHQUFHLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDeEMsSUFBSSxHQUFHLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDeEMsSUFBSSxHQUFHLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDeEMsSUFBSSxHQUFHLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDeEMsSUFBSSxHQUFHLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDeEMsSUFBSSxHQUFHLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDdkMsSUFBSSxHQUFHLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdEMsSUFBSSxHQUFHLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdEMsSUFBSSxHQUFHLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdEMsSUFBSSxHQUFHLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdEMsSUFBSSxHQUFHLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdEMsSUFBSSxHQUFHLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdEMsSUFBSSxHQUFHLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdEMsSUFBSSxHQUFHLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdEMsSUFBSSxHQUFHLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFdEMsSUFBSSxVQUFVLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUMzVCxJQUFJLFVBQVUsSUFBSSxFQUFFLEVBQUU7UUFBRSxVQUFVLEdBQUcsQ0FBQyxDQUFDO0tBQUU7SUFDekMsSUFBSSxVQUFVLEdBQUcsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQzVVLElBQUksVUFBVSxJQUFJLEVBQUUsRUFBRTtRQUFFLFVBQVUsR0FBRyxDQUFDLENBQUM7S0FBRTtJQUN6QyxJQUFJLE1BQU0sR0FBUSxVQUFVLEdBQUcsRUFBRSxHQUFHLFVBQVUsQ0FBQztJQUMvQyxJQUFJLE1BQU0sSUFBSSxDQUFDLEVBQUU7UUFBRSxNQUFNLEdBQUcsSUFBSSxDQUFDO0tBQUU7SUFDbkMsSUFBSSxNQUFNLEdBQUcsQ0FBQyxJQUFJLE1BQU0sR0FBRyxFQUFFLEVBQUU7UUFBRSxNQUFNLEdBQUcsR0FBRyxHQUFHLE1BQU0sQ0FBQztLQUFFO0lBRXpELE9BQU8sTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQzNCLENBQUM7QUFFRCxNQUFNLFVBQVUsaUJBQWlCLENBQUMsS0FBYTtJQUM3QyxJQUFJLEVBQUUsR0FBRyxjQUFjLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3hFLE9BQU8sRUFBRSxDQUFBO0FBQ1gsQ0FBQztBQUVELE1BQU0sVUFBVSxxQkFBcUIsQ0FBQyxLQUFhO0lBRWpELE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFBO0lBQzlDLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFO1FBQ2xDLE9BQU8sS0FBSyxDQUFBO0tBQ2I7SUFFRCxJQUFJLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQzVCLE1BQU0sR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN0QyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1FBQ3ZCLE9BQU8sS0FBSyxDQUFDO0tBQ2Q7SUFFRCxJQUFJLEVBQUUsR0FBRyxjQUFjLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDcEUsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFBO0FBQ2hCLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLHNCQUFzQixDQUFDLEtBQWE7SUFDbEQsS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3JDLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxFQUFFLEVBQUU7UUFDdkIsT0FBTyxLQUFLLENBQUM7S0FDZDtJQUVELElBQUksRUFBRSxHQUFHLGNBQWMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNsRSxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDakIsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsVUFBVSxDQUFDLEtBQWE7SUFDdEMsS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBRXJDLElBQUksS0FBSyxDQUFDLE1BQU0sSUFBSSxFQUFFLElBQUksS0FBSyxLQUFLLEdBQUcsRUFBRTtRQUN2QyxPQUFPLEtBQUssQ0FBQztLQUNkO0lBQ0QsaUVBQWlFO0lBQ2pFLDZCQUE2QjtJQUM3QixJQUFJLEVBQUUsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDekIsT0FBTyxFQUFFLENBQUM7QUFDWixDQUFDO0FBRUQsTUFBTSxVQUFVLFdBQVcsQ0FBQyxJQUFZO0lBQ3RDLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUVuQyxJQUFJLElBQUksS0FBSyxFQUFFLEVBQUU7UUFDZixPQUFPLEtBQUssQ0FBQztLQUNkO0lBRUQsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLEVBQUUsRUFBRTtRQUN0QixPQUFPLEtBQUssQ0FBQztLQUNkO0lBRUQscUNBQXFDO0lBQ3JDLElBQUksSUFBSSxLQUFLLGdCQUFnQjtRQUMzQixJQUFJLEtBQUssZ0JBQWdCO1FBQ3pCLElBQUksS0FBSyxnQkFBZ0I7UUFDekIsSUFBSSxLQUFLLGdCQUFnQjtRQUN6QixJQUFJLEtBQUssZ0JBQWdCO1FBQ3pCLElBQUksS0FBSyxnQkFBZ0I7UUFDekIsSUFBSSxLQUFLLGdCQUFnQjtRQUN6QixJQUFJLEtBQUssZ0JBQWdCO1FBQ3pCLElBQUksS0FBSyxnQkFBZ0I7UUFDekIsSUFBSSxLQUFLLGdCQUFnQixFQUFFO1FBQzNCLE9BQU8sS0FBSyxDQUFDO0tBQ2Q7SUFFRCxhQUFhO0lBQ2IsSUFBSSxPQUFPLEdBQVcsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUE7SUFDckMsSUFBSSxPQUFPLEdBQVEsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDOUMsSUFBSSxJQUFJLEdBQVEsQ0FBQyxDQUFDO0lBQ2xCLElBQUksR0FBRyxHQUFHLE9BQU8sR0FBRyxDQUFDLENBQUM7SUFDdEIsS0FBSyxJQUFJLENBQUMsR0FBRyxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUNqQyxJQUFJLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUM7UUFDNUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxFQUFFO1lBQ1gsR0FBRyxHQUFHLENBQUMsQ0FBQztTQUNUO0tBRUY7SUFDRCxNQUFNLFVBQVUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMxQixVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7SUFFbkQsT0FBTyxHQUFHLE9BQU8sR0FBRyxDQUFDLENBQUM7SUFDdEIsT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3JDLElBQUksR0FBRyxDQUFDLENBQUM7SUFDVCxHQUFHLEdBQUcsT0FBTyxHQUFHLENBQUMsQ0FBQztJQUNsQixLQUFLLElBQUksQ0FBQyxHQUFHLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ2pDLElBQUksSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQztRQUM1QyxJQUFJLEdBQUcsR0FBRyxDQUFDLEVBQUU7WUFDWCxHQUFHLEdBQUcsQ0FBQyxDQUFDO1NBQ1Q7S0FDRjtJQUNELFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUNuRCxPQUFPLFVBQVUsQ0FBQztBQUNwQixDQUFDO0FBRUQsTUFBTSxVQUFVLFVBQVUsQ0FBQyxNQUFjO0lBQ3ZDLE1BQU0sR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDOUIsSUFBSSxXQUFXLEdBQUcsQ0FBQyxDQUFDO0lBQ3BCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUMxQyxXQUFXLElBQUksUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0tBQy9DO0lBQ0QsSUFBSSxJQUFJLEdBQUcsV0FBVyxDQUFDO0lBQ3ZCLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQztJQUNiLE9BQU8sSUFBSSxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUU7UUFDdEIsSUFBSSxFQUFFLENBQUM7UUFDUCxJQUFJLEdBQUcsV0FBVyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFBO0tBQ2hDO0lBQ0QsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNyQyxDQUFDO0FBRUQsTUFBTSxVQUFVLFVBQVUsQ0FBQyxNQUFjO0lBQ3ZDLE1BQU0sR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN2QyxJQUFJLE1BQU0sS0FBSyxhQUFhLEVBQUU7UUFDNUIsT0FBTyxLQUFLLENBQUM7S0FDZDtJQUVELDJEQUEyRDtJQUMzRCxxRUFBcUU7SUFDckUsbUJBQW1CO0lBQ25CLFdBQVc7SUFDWCxLQUFLO0lBRUwsTUFBTSxZQUFZLEdBQUcsY0FBYyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ2hGLE9BQU8sWUFBWSxDQUFBO0FBQ3JCLENBQUM7QUFFRCxNQUFNLFVBQVUsb0JBQW9CLENBQUMsTUFBYztJQUVqRCxrSkFBa0o7SUFFbEosTUFBTSxHQUFHLG1CQUFtQixHQUFHLE1BQU0sQ0FBQztJQUN0QyxNQUFNLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBRTFDLElBQUksRUFBRSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDcEMsSUFBSSxFQUFFLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDeEMsSUFBSSxFQUFFLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDeEMsSUFBSSxFQUFFLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDeEMsSUFBSSxFQUFFLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDeEMsSUFBSSxFQUFFLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDeEMsSUFBSSxFQUFFLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDeEMsSUFBSSxFQUFFLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDeEMsSUFBSSxFQUFFLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDdkMsSUFBSSxHQUFHLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkMsSUFBSSxHQUFHLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkMsSUFBSSxHQUFHLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkMsSUFBSSxHQUFHLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkMsSUFBSSxHQUFHLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkMsSUFBSSxHQUFHLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkMsSUFBSSxHQUFHLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkMsSUFBSSxHQUFHLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkMsSUFBSSxHQUFHLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFHdkMsSUFBSSxJQUFJLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUFDLElBQUksSUFBSSxHQUFHLENBQUMsRUFBRTtRQUFFLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0tBQUU7SUFDckQsSUFBSSxNQUFNLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUFDLElBQUksTUFBTSxHQUFHLENBQUMsRUFBRTtRQUFFLE1BQU0sR0FBRyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0tBQUU7SUFDN0QsSUFBSSxNQUFNLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUFDLElBQUksTUFBTSxHQUFHLENBQUMsRUFBRTtRQUFFLE1BQU0sR0FBRyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0tBQUU7SUFDN0QsSUFBSSxNQUFNLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUFDLElBQUksTUFBTSxHQUFHLENBQUMsRUFBRTtRQUFFLE1BQU0sR0FBRyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0tBQUU7SUFDN0QsSUFBSSxLQUFLLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUFDLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRTtRQUFFLEtBQUssR0FBRyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0tBQUU7SUFDekQsSUFBSSxJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUFDLElBQUksSUFBSSxHQUFHLENBQUMsRUFBRTtRQUFFLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0tBQUU7SUFDdEQsSUFBSSxJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUFDLElBQUksSUFBSSxHQUFHLENBQUMsRUFBRTtRQUFFLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0tBQUU7SUFDdEQsSUFBSSxJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUFDLElBQUksSUFBSSxHQUFHLENBQUMsRUFBRTtRQUFFLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0tBQUU7SUFDdEQsSUFBSSxJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUFDLElBQUksSUFBSSxHQUFHLENBQUMsRUFBRTtRQUFFLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0tBQUU7SUFDdEQsSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDO0lBQ2hCLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQztJQUNoQixJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7SUFDaEIsSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDO0lBQ2hCLElBQUksSUFBSSxHQUFHLEdBQUcsQ0FBQztJQUNmLElBQUksSUFBSSxHQUFHLEdBQUcsQ0FBQztJQUNmLElBQUksSUFBSSxHQUFHLEdBQUcsQ0FBQztJQUNmLElBQUksSUFBSSxHQUFHLEdBQUcsQ0FBQztJQUNmLElBQUksSUFBSSxHQUFHLEdBQUcsQ0FBQztJQUVmLElBQUksUUFBUSxHQUFHLENBQUMsTUFBTSxHQUFHLE1BQU0sR0FBRyxNQUFNLEdBQUcsTUFBTSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLE1BQU0sR0FBRyxNQUFNLEdBQUcsTUFBTSxHQUFHLEtBQUssR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDakssUUFBUSxHQUFHLEVBQUUsR0FBRyxRQUFRLENBQUM7SUFBQyxJQUFJLFFBQVEsSUFBSSxFQUFFLEVBQUU7UUFBRSxRQUFRLEdBQUcsQ0FBQyxDQUFDO0tBQUU7SUFFL0QsT0FBTyxRQUFRLENBQUM7QUFDbEIsQ0FBQztBQUVELE1BQU0sVUFBVSxVQUFVLENBQUMsTUFBYztJQUN2QyxNQUFNLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzlCLE1BQU0sR0FBRyxTQUFTLEdBQUcsTUFBTSxDQUFDO0lBQzVCLE1BQU0sR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFFekMsSUFBSSxFQUFFLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNuQyxJQUFJLEVBQUUsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN0QyxJQUFJLEVBQUUsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN0QyxJQUFJLEVBQUUsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN0QyxJQUFJLEVBQUUsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN0QyxJQUFJLEVBQUUsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN0QyxJQUFJLEVBQUUsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN0QyxJQUFJLEVBQUUsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUV0QyxJQUFJLFNBQVMsR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUM3RixTQUFTLEdBQUcsRUFBRSxHQUFHLFNBQVMsQ0FBQztJQUMzQixJQUFJLFNBQVMsSUFBSSxFQUFFLEVBQUU7UUFBRSxTQUFTLEdBQUcsQ0FBQyxDQUFDO0tBQUU7SUFDdkMsSUFBSSxTQUFTLElBQUksRUFBRSxFQUFFO1FBQUUsU0FBUyxHQUFHLENBQUMsQ0FBQztLQUFFO0lBQ3ZDLE9BQU8sU0FBUyxDQUFDO0FBQ25CLENBQUM7QUFFRCxNQUFNLFVBQVUsZUFBZSxDQUFDLE1BQWM7SUFFNUMsTUFBTSxHQUFHLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM5QixJQUFJLEdBQUcsR0FBRyxVQUFVLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUV0QyxJQUFJLENBQUMsQ0FBQztJQUNOLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxD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QUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQztJQUNsRCxJQUFJLEVBQUUsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUM7SUFDakQsSUFBSSxFQUFFLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDO0lBQ2hELElBQUksRUFBRSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztJQUMvQyxJQUFJLEVBQUUsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7SUFDOUMsSUFBSSxFQUFFLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0lBQzdDLElBQUksRUFBRSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztJQUM1QyxJQUFJLEdBQUcsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDN0MsSUFBSSxHQUFHLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFFekMsTUFBTSxRQUFRLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztJQUN4RSxNQUFNLE1BQU0sR0FBRyxRQUFRLEdBQUcsRUFBRSxDQUFDO0lBRTdCLElBQUksR0FBRyxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQztJQUNuRCxJQUFJLEdBQUcsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUM7SUFDbEQsSUFBSSxHQUFHLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO0lBQ2pELElBQUksR0FBRyxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztJQUNoRCxJQUFJLEdBQUcsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7SUFDL0MsSUFBSSxHQUFHLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQzlDLElBQUksR0FBRyxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFFckMsTUFBTSxTQUFTLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQzFELE1BQU0sTUFBTSxHQUFHLENBQUMsTUFBTSxHQUFHLFFBQVEsR0FBRyxHQUFHLEdBQUcsU0FBUyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUVoRSxJQUFJLFNBQVMsR0FBUSxFQUFFLEdBQUcsTUFBTSxDQUFDO0lBRWpDLElBQUksU0FBUyxHQUFHLEVBQUUsRUFBRTtRQUNsQixTQUFTLEdBQUcsR0FBRyxHQUFHLFNBQVMsQ0FBQztLQUM3QjtJQUVELElBQUksWUFBWSxHQUFHLEVBQUUsR0FBRyxLQUFLLEdBQUcsRUFBRSxHQUFHLEtBQUssR0FBRyxFQUFFLEdBQUcsS0FBSyxHQUFHLEVBQUUsR0FBRyxLQUFLLEdBQUcsRUFBRSxHQUFHLEtBQUssR0FBRyxFQUFFLEdBQUcsS0FBSyxHQUFHLEVBQUUsR0FBRyxLQUFLLEdBQUcsR0FBRyxHQUFHLFNBQVMsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLElBQUksR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsT0FBTyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsTUFBTSxHQUFHLEdBQUcsR0FBRyxLQUFLLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQztJQUVyUixZQUFZLEdBQUcsUUFBUSxHQUFHLFlBQVksQ0FBQztJQUN2QyxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDNUQsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQUdELE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxNQUFjO0lBQ2hELE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQztJQUNuQixJQUFJLElBQUksR0FBRyxDQUFDLENBQUM7SUFDYixJQUFJLElBQUksR0FBRyxDQUFDLENBQUM7SUFDYixNQUFNLEdBQUcsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDO0lBQ3ZCLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN0QyxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ2hDLE1BQU0sR0FBRyxjQUFjLEdBQUcsTUFBTSxDQUFDO0lBQ2pDLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsRUFBRSxFQUFFLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDOUQsTUFBTSxJQUFJLEdBQUcsQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLENBQUM7SUFDcEQsSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQztRQUN4RyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUM7UUFDbkcsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDdEcsSUFBSSxLQUFLLEdBQUcsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDeEIsSUFBSSxLQUFLLEtBQUssQ0FBQyxFQUFFO1FBQ2YsSUFBSSxJQUFJLEVBQUU7WUFDUixJQUFJLEdBQUcsQ0FBQyxDQUFDO1NBQ1Y7YUFBTTtZQUNMLElBQUksR0FBRyxDQUFDLENBQUM7U0FDVjtLQUNGO1NBQU07UUFDTCxJQUFJLEtBQUssS0FBSyxDQUFDLEVBQUU7WUFDZixJQUFJLEdBQUcsQ0FBQyxDQUFDO1NBQ1Y7YUFBTTtZQUNMLElBQUksR0FBRyxFQUFFLEdBQUcsS0FBSyxDQUFDO1NBQ25CO0tBQ0Y7SUFDRCxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUM7SUFDckYsS0FBSyxHQUFHLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQ3BCLElBQUksS0FBSyxLQUFLLENBQUMsRUFBRTtRQUNmLElBQUksSUFBSSxFQUFFO1lBQ1IsSUFBSSxHQUFHLENBQUMsQ0FBQztTQUNWO2FBQU07WUFDTCxJQUFJLEdBQUcsQ0FBQyxDQUFDO1NBQ1Y7S0FDRjtTQUFNO1FBQ0wsSUFBSSxLQUFLLEtBQUssQ0FBQyxFQUFFO1lBQ2YsSUFBSSxHQUFHLENBQUMsQ0FBQztTQUNWO2FBQU07WUFDTCxJQUFJLEdBQUcsRUFBRSxHQUFHLEtBQUssQ0FBQztTQUNuQjtLQUNGO0lBQ0QsT0FBTyxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQzNDLENBQUM7QUFFRCxNQUFNLFVBQVUsYUFBYSxDQUFDLE1BQWM7SUFDMUMsTUFBTSxHQUFHLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUU5QixJQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsRUFBRSxFQUFFO1FBQ3RCLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztLQUMvQjtJQUVELE1BQU0sR0FBRyxVQUFVLEdBQUcsTUFBTSxDQUFDO0lBQzdCLE1BQU0sR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFFMUMsSUFBSSxFQUFFLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNwQyxJQUFJLEVBQUUsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN2QyxJQUFJLEVBQUUsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN0QyxJQUFJLEVBQUUsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN0QyxJQUFJLEVBQUUsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN0QyxJQUFJLEVBQUUsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN0QyxJQUFJLEVBQUUsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN0QyxJQUFJLEVBQUUsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN0QyxJQUFJLEVBQUUsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN0QyxJQUFJLEdBQUcsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN2QyxJQUFJLEdBQUcsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUV2QyxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUU7UUFDMUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxrR0FBa0csQ0FBQyxDQUFDO0tBQ3JIO0lBRUQsSUFBSSxXQUFXLEdBQUcsQ0FBQyxDQUFDO0lBQ3BCLElBQUksV0FBVyxHQUFHLENBQUMsQ0FBQztJQUVwQixJQUFJLFNBQVMsR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ3hHLElBQUksU0FBUyxJQUFJLENBQUMsRUFBRTtRQUFFLFdBQVcsR0FBRyxDQUFDLENBQUM7S0FBRTtJQUN4QyxJQUFJLFNBQVMsSUFBSSxFQUFFLEVBQUU7UUFBRSxTQUFTLEdBQUcsQ0FBQyxDQUFDO0tBQUU7SUFDdkMsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsSUFBSSxDQUFDLENBQUMsRUFBRTtRQUFFLFNBQVMsR0FBRyxDQUFDLENBQUM7S0FBRTtJQUV0RixJQUFJLFNBQVMsR0FBRyxDQUFDLFNBQVMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ3ZELElBQUksU0FBUyxJQUFJLENBQUMsRUFBRTtRQUFFLFdBQVcsR0FBRyxDQUFDLENBQUM7S0FBRTtJQUN4QyxJQUFJLFNBQVMsSUFBSSxFQUFFLEVBQUU7UUFBRSxTQUFTLEdBQUcsQ0FBQyxDQUFDO0tBQUU7SUFDdkMsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsSUFBSSxDQUFDLENBQUMsRUFBRTtRQUFFLFNBQVMsR0FBRyxDQUFDLENBQUM7S0FBRTtJQUV0RixJQUFJLEtBQUssR0FBUSxTQUFTLEdBQUcsRUFBRSxHQUFHLFNBQVMsQ0FBQztJQUM1QyxJQUFJLEtBQUssSUFBSSxDQUFDLEVBQUU7UUFBRSxLQUFLLEdBQUcsSUFBSSxDQUFDO0tBQUU7SUFDakMsSUFBSSxLQUFLLEdBQUcsQ0FBQyxJQUFJLEtBQUssR0FBRyxFQUFFLEVBQUU7UUFBRSxLQUFLLEdBQUcsR0FBRyxHQUFHLEtBQUssQ0FBQztLQUFFO0lBRXJELE9BQU8sS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQzFCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFU1RBRE9TX1NJR0xBIH0gZnJvbSAnLi9lc3RhZG9zJztcbmltcG9ydCB7IGdldEFsbERpZ2l0cywgZmlsbFN0cmluZywgbW9kdWxvMTFDdXN0b20gfSBmcm9tICcuL3V0aWxzJztcblxuLyoqXG4gKiBcbiAqIEBwYXJhbSB1ZiAtIFVGIGRvIG7Dum1lcm8gZGEgZ3VpYS4gRXg6IDM1KFNQKSwgODEoUEUpXG4gKiBAcGFyYW0gYW5vIC0gQU5PIGRvIG7Dum1lcm8gZGEgZ3VpYS4gRXg6IDIwMTgsIDIwMTlcbiAqIEBwYXJhbSB0aXBvIC0gVElQTyBkYSBndWlhLiBBaWggPSAxLCBBUEFDID0gMlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlX2FpaCh2YWx1ZTogc3RyaW5nIHwgbnVtYmVyIHwgYW55W10pIHtcbiAgdmFsdWUgPSBnZXRBbGxEaWdpdHModmFsdWUudG9TdHJpbmcoKSk7XG4gIGlmICh2YWx1ZS5sZW5ndGggPiAxMikge1xuICAgIHZhbHVlID0gdmFsdWUudG9TdHJpbmcoKS5zdWJzdHIoMCwgdmFsdWUubGVuZ3RoIC0gMSk7XG4gIH1cbiAgY29uc3QgY29kID0gcGFyc2VJbnQodmFsdWUpO1xuICBjb25zdCBjYWxjID0gTWF0aC5jZWlsKGNvZCAtIChjb2QgLyAxMSkpO1xuICBjb25zdCBkaWdpdG8gPSBjYWxjLnRvU3RyaW5nKCkuc3Vic3RyKC0xKTtcbiAgcmV0dXJuIGRpZ2l0bztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZV9jZXJ0aWRhbyh2YWx1ZTogc3RyaW5nKSB7XG5cbiAgaWYgKHZhbHVlLmxlbmd0aCA+IDMwKSB7XG4gICAgdmFsdWUgPSB2YWx1ZS5zdWJzdHJpbmcoMCwgdmFsdWUubGVuZ3RoIC0gMik7XG4gIH1cbiAgbGV0IGIxID0gcGFyc2VJbnQodmFsdWUuc2xpY2UoMjkpKTtcbiAgbGV0IGIyID0gcGFyc2VJbnQodmFsdWUuc2xpY2UoMjgsIDI5KSk7XG4gIGxldCBiMyA9IHBhcnNlSW50KHZhbHVlLnNsaWNlKDI3LCAyOCkpO1xuICBsZXQgYjQgPSBwYXJzZUludCh2YWx1ZS5zbGljZSgyNiwgMjcpKTtcbiAgbGV0IGI1ID0gcGFyc2VJbnQodmFsdWUuc2xpY2UoMjUsIDI2KSk7XG4gIGxldCBiNiA9IHBhcnNlSW50KHZhbHVlLnNsaWNlKDI0LCAyNSkpO1xuICBsZXQgYjcgPSBwYXJzZUludCh2YWx1ZS5zbGljZSgyMywgMjQpKTtcbiAgbGV0IGI4ID0gcGFyc2VJbnQodmFsdWUuc2xpY2UoMjIsIDIzKSk7XG4gIGxldCBiOSA9IHBhcnNlSW50KHZhbHVlLnNsaWNlKDIxLCAyMikpO1xuICBsZXQgYjEwID0gcGFyc2VJbnQodmFsdWUuc2xpY2UoMjAsIDIxKSk7XG4gIGxldCBiMTEgPSBwYXJzZUludCh2YWx1ZS5zbGljZSgxOSwgMjApKTtcbiAgbGV0IGIxMiA9IHBhcnNlSW50KHZhbHVlLnNsaWNlKDE4LCAxOSkpO1xuICBsZXQgYjEzID0gcGFyc2VJbnQodmFsdWUuc2xpY2UoMTcsIDE4KSk7XG4gIGxldCBiMTQgPSBwYXJzZUludCh2YWx1ZS5zbGljZSgxNiwgMTcpKTtcbiAgbGV0IGIxNSA9IHBhcnNlSW50KHZhbHVlLnNsaWNlKDE1LCAxNikpO1xuICBsZXQgYjE2ID0gcGFyc2VJbnQodmFsdWUuc2xpY2UoMTQsIDE1KSk7XG4gIGxldCBiMTcgPSBwYXJzZUludCh2YWx1ZS5zbGljZSgxMywgMTQpKTtcbiAgbGV0IGIxOCA9IHBhcnNlSW50KHZhbHVlLnNsaWNlKDEyLCAxMykpO1xuICBsZXQgYjE5ID0gcGFyc2VJbnQodmFsdWUuc2xpY2UoMTEsIDEyKSk7XG4gIGxldCBiMjAgPSBwYXJzZUludCh2YWx1ZS5zbGljZSgxMCwgMTEpKTtcbiAgbGV0IGIyMSA9IHBhcnNlSW50KHZhbHVlLnNsaWNlKDksIDEwKSk7XG4gIGxldCBiMjIgPSBwYXJzZUludCh2YWx1ZS5zbGljZSg4LCA5KSk7XG4gIGxldCBiMjMgPSBwYXJzZUludCh2YWx1ZS5zbGljZSg3LCA4KSk7XG4gIGxldCBiMjQgPSBwYXJzZUludCh2YWx1ZS5zbGljZSg2LCA3KSk7XG4gIGxldCBiMjUgPSBwYXJzZUludCh2YWx1ZS5zbGljZSg1LCA2KSk7XG4gIGxldCBiMjYgPSBwYXJzZUludCh2YWx1ZS5zbGljZSg0LCA1KSk7XG4gIGxldCBiMjcgPSBwYXJzZUludCh2YWx1ZS5zbGljZSgzLCA0KSk7XG4gIGxldCBiMjggPSBwYXJzZUludCh2YWx1ZS5zbGljZSgyLCAzKSk7XG4gIGxldCBiMjkgPSBwYXJzZUludCh2YWx1ZS5zbGljZSgxLCAyKSk7XG4gIGxldCBiMzAgPSBwYXJzZUludCh2YWx1ZS5zbGljZSgwLCAxKSk7XG5cbiAgbGV0IGNlcnRQcmlEaWcgPSAoYjEgKiA5ICsgYjIgKiA4ICsgYjMgKiA3ICsgYjQgKiA2ICsgYjUgKiA1ICsgYjYgKiA0ICsgYjcgKiAzICsgYjggKiAyICsgYjkgKiAxICsgYjEwICogMCArIGIxMSAqIDEwICsgYjEyICogOSArIGIxMyAqIDggKyBiMTQgKiA3ICsgYjE1ICogNiArIGIxNiAqIDUgKyBiMTcgKiA0ICsgYjE4ICogMyArIGIxOSAqIDIgKyBiMjAgKiAxICsgYjIxICogMCArIGIyMiAqIDEwICsgYjIzICogOSArIGIyNCAqIDggKyBiMjUgKiA3ICsgYjI2ICogNiArIGIyNyAqIDUgKyBiMjggKiA0ICsgYjI5ICogMyArIGIzMCAqIDIpICUgMTE7XG4gIGlmIChjZXJ0UHJpRGlnID09IDEwKSB7IGNlcnRQcmlEaWcgPSAxOyB9XG4gIGxldCBjZXJ0U2VnRGlnID0gKGNlcnRQcmlEaWcgKiA5ICsgYjEgKiA4ICsgYjIgKiA3ICsgYjMgKiA2ICsgYjQgKiA1ICsgYjUgKiA0ICsgYjYgKiAzICsgYjcgKiAyICsgYjggKiAxICsgYjkgKiAwICsgYjEwICogMTAgKyBiMTEgKiA5ICsgYjEyICogOCArIGIxMyAqIDcgKyBiMTQgKiA2ICsgYjE1ICogNSArIGIxNiAqIDQgKyBiMTcgKiAzICsgYjE4ICogMiArIGIxOSAqIDEgKyBiMjAgKiAwICsgYjIxICogMTAgKyBiMjIgKiA5ICsgYjIzICogOCArIGIyNCAqIDcgKyBiMjUgKiA2ICsgYjI2ICogNSArIGIyNyAqIDQgKyBiMjggKiAzICsgYjI5ICogMiArIGIzMCAqIDEpICUgMTE7XG4gIGlmIChjZXJ0U2VnRGlnID09IDEwKSB7IGNlcnRTZWdEaWcgPSAxOyB9XG4gIGxldCBjZXJ0RFY6IGFueSA9IGNlcnRQcmlEaWcgKiAxMCArIGNlcnRTZWdEaWc7XG4gIGlmIChjZXJ0RFYgPT0gMCkgeyBjZXJ0RFYgPSBcIjAwXCI7IH1cbiAgaWYgKGNlcnREViA+IDAgJiYgY2VydERWIDwgMTApIHsgY2VydERWID0gXCIwXCIgKyBjZXJ0RFY7IH1cblxuICByZXR1cm4gY2VydERWLnRvU3RyaW5nKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVfY25oZXNwZWxobyh2YWx1ZTogc3RyaW5nKSB7XG4gIGxldCB2MSA9IG1vZHVsbzExQ3VzdG9tKHZhbHVlLnN1YnN0cigwLCB2YWx1ZS5sZW5ndGggLSAxKSwgMSwgOCwgZmFsc2UpO1xuICByZXR1cm4gdjFcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZV9yZW5hY2hlc3RhZHVhbCh2YWx1ZTogc3RyaW5nKSB7XG5cbiAgY29uc3Qgc3RhdGUgPSB2YWx1ZS5zdWJzdHIoMCwgMikudG9Mb3dlckNhc2UoKVxuICBpZiAoIUVTVEFET1NfU0lHTEEuaW5jbHVkZXMoc3RhdGUpKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBsZXQgZGlnaXRzID0gdmFsdWUuc3Vic3RyKDIpXG4gIGRpZ2l0cyA9IGRpZ2l0cy5yZXBsYWNlKC9bXlxcZF0vZywgJycpO1xuICBpZiAoZGlnaXRzLmxlbmd0aCAhPT0gOSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGxldCB2MSA9IG1vZHVsbzExQ3VzdG9tKGRpZ2l0cy5zdWJzdHIoMCwgZGlnaXRzLmxlbmd0aCAtIDEpLCAxLCAxMSk7XG4gIHJldHVybiAnJyArIHYxXG59XG5cbi8qKlxuICogXG4gKiBAcGFyYW0gdmFsdWUgXG4gKiBAcmV0dXJucyBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZV9yZW5hY2hzZWd1cmFuY2EodmFsdWU6IHN0cmluZykge1xuICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoL1teXFxkXSsvZywgJycpO1xuICBpZiAodmFsdWUubGVuZ3RoICE9PSAxMSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGxldCB2MSA9IG1vZHVsbzExQ3VzdG9tKHZhbHVlLnN1YnN0cigwLCB2YWx1ZS5sZW5ndGggLSAxKSwgMSwgMTEpO1xuICByZXR1cm4gXCJcIiArIHYxO1xufVxuXG4vKipcbiAqIETDrWdpdG8gdmVyaWZpY2Fkb3IgZGEgQ05IIG7Do28gw6kgbWFpcyBvIG3Ds2R1bG8gMTEgY29uZm9ybWUgw7psdGltYXMgcmVzb2x1w6fDtWVzXG4gKiBAcGFyYW0gdmFsdWUgXG4gKiBAcmV0dXJucyBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZV9jbmgodmFsdWU6IHN0cmluZykge1xuICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoL1teXFxkXSsvZywgJycpO1xuXG4gIGlmICh2YWx1ZS5sZW5ndGggIT0gMTEgfHwgdmFsdWUgPT09ICcwJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvLyBsZXQgdjEgPSBtb2R1bG8xMUN1c3RvbSh2YWx1ZS5zdWJzdHIoMCwgdmFsdWUubGVuZ3RoIC0gMiksIDIpO1xuICAvLyBpZiAodjEgPT09ICcxMCcpIHYxID0gJzAwJ1xuICBsZXQgdjEgPSB2YWx1ZS5zdWJzdHIoLTIpXG4gIHJldHVybiB2MTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZV9jbnBqKGNucGo6IHN0cmluZykge1xuICBjbnBqID0gY25wai5yZXBsYWNlKC9bXlxcZF0rL2csICcnKTtcblxuICBpZiAoY25waiA9PT0gJycpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoY25wai5sZW5ndGggIT09IDE0KSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gRWxpbWluYSBDTlBKcyBpbnZhbGlkb3MgY29uaGVjaWRvc1xuICBpZiAoY25waiA9PT0gJzAwMDAwMDAwMDAwMDAwJyB8fFxuICAgIGNucGogPT09ICcxMTExMTExMTExMTExMScgfHxcbiAgICBjbnBqID09PSAnMjIyMjIyMjIyMjIyMjInIHx8XG4gICAgY25waiA9PT0gJzMzMzMzMzMzMzMzMzMzJyB8fFxuICAgIGNucGogPT09ICc0NDQ0NDQ0NDQ0NDQ0NCcgfHxcbiAgICBjbnBqID09PSAnNTU1NTU1NTU1NTU1NTUnIHx8XG4gICAgY25waiA9PT0gJzY2NjY2NjY2NjY2NjY2JyB8fFxuICAgIGNucGogPT09ICc3Nzc3Nzc3Nzc3Nzc3NycgfHxcbiAgICBjbnBqID09PSAnODg4ODg4ODg4ODg4ODgnIHx8XG4gICAgY25waiA9PT0gJzk5OTk5OTk5OTk5OTk5Jykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIFZhbGlkYSBEVnNcbiAgbGV0IHRhbWFuaG86IG51bWJlciA9IGNucGoubGVuZ3RoIC0gMlxuICBsZXQgbnVtZXJvczogYW55ID0gY25wai5zdWJzdHJpbmcoMCwgdGFtYW5obyk7XG4gIGxldCBzb21hOiBhbnkgPSAwO1xuICBsZXQgcG9zID0gdGFtYW5obyAtIDc7XG4gIGZvciAobGV0IGkgPSB0YW1hbmhvOyBpID49IDE7IGktLSkge1xuICAgIHNvbWEgKz0gbnVtZXJvcy5jaGFyQXQodGFtYW5obyAtIGkpICogcG9zLS07XG4gICAgaWYgKHBvcyA8IDIpIHtcbiAgICAgIHBvcyA9IDk7XG4gICAgfVxuXG4gIH1cbiAgY29uc3QgcmVzdWx0YWRvcyA9IFswLCAwXTtcbiAgcmVzdWx0YWRvc1swXSA9IHNvbWEgJSAxMSA8IDIgPyAwIDogMTEgLSBzb21hICUgMTE7XG5cbiAgdGFtYW5obyA9IHRhbWFuaG8gKyAxO1xuICBudW1lcm9zID0gY25wai5zdWJzdHJpbmcoMCwgdGFtYW5obyk7XG4gIHNvbWEgPSAwO1xuICBwb3MgPSB0YW1hbmhvIC0gNztcbiAgZm9yIChsZXQgaSA9IHRhbWFuaG87IGkgPj0gMTsgaS0tKSB7XG4gICAgc29tYSArPSBudW1lcm9zLmNoYXJBdCh0YW1hbmhvIC0gaSkgKiBwb3MtLTtcbiAgICBpZiAocG9zIDwgMikge1xuICAgICAgcG9zID0gOTtcbiAgICB9XG4gIH1cbiAgcmVzdWx0YWRvc1sxXSA9IHNvbWEgJSAxMSA8IDIgPyAwIDogMTEgLSBzb21hICUgMTE7XG4gIHJldHVybiByZXN1bHRhZG9zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlX2NucyhudW1iZXI6IHN0cmluZykge1xuICBudW1iZXIgPSBnZXRBbGxEaWdpdHMobnVtYmVyKTtcbiAgbGV0IHNvbWFJbmljaWFsID0gMDtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1iZXIubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgc29tYUluaWNpYWwgKz0gcGFyc2VJbnQobnVtYmVyW2ldKSAqICgxNSAtIGkpO1xuICB9XG4gIGxldCBzb21hID0gc29tYUluaWNpYWw7XG4gIGxldCByZXN0ID0gMDtcbiAgd2hpbGUgKHNvbWEgJSAxMSAhPT0gMCkge1xuICAgIHJlc3QrKztcbiAgICBzb21hID0gc29tYUluaWNpYWwgKyAocmVzdCAqIDEpXG4gIH1cbiAgcmV0dXJuIG51bWJlci5zdWJzdHIoLTIsIDEpICsgcmVzdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZV9jcGYoc3RyQ1BGOiBzdHJpbmcpIHtcbiAgc3RyQ1BGID0gc3RyQ1BGLnJlcGxhY2UoL1teXFxkXSsvZywgJycpO1xuICBpZiAoc3RyQ1BGID09PSAnMDAwMDAwMDAwMDAnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gY29uc3QgcjEgPSBtb2R1bG8xMShzdHJDUEYuc3Vic3RyKDAsIHN0ckNQRi5sZW5ndGggLSAyKSlcbiAgLy8gY29uc3QgcjIgPSBtb2R1bG8xMShzdHJDUEYuc3Vic3RyKDAsIHN0ckNQRi5sZW5ndGggLSAyKSArICcnICsgcjEpXG4gIC8vIGNvbnN0IHJlc3RvcyA9IFtcbiAgLy8gICByMSwgcjJcbiAgLy8gXTtcblxuICBjb25zdCByZXN0b3NjdXN0b20gPSBtb2R1bG8xMUN1c3RvbShzdHJDUEYuc3Vic3RyKDAsIHN0ckNQRi5sZW5ndGggLSAyKSwgMiwgMTIpO1xuICByZXR1cm4gcmVzdG9zY3VzdG9tXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVfY2FydGFvY3JlZGl0byhudW1iZXI6IHN0cmluZykge1xuXG4gIC8vIGlmIChudW1iZXIubGVuZ3RoID4gMTgpIHsgYWxlcnQoXCJFcnJvLiBBIHJvdGluYSBuw6NvIGFicmFuZ2UgY2FydMO1ZXNcXG5jb20gbWFpcyBkZSAxOCBkw61naXRvcyAoZm9yYSBvIERWKS5cXG5JbnRyb2R1emEgMTggZMOtZ2l0b3MsIG5vIG3DoXhpbW8uXCIpOyB9XG5cbiAgbnVtYmVyID0gXCIwMDAwMDAwMDAwMDAwMDAwMFwiICsgbnVtYmVyO1xuICBudW1iZXIgPSBudW1iZXIuc2xpY2UobnVtYmVyLmxlbmd0aCAtIDE4KTtcblxuICBsZXQgYjEgPSBwYXJzZUludChudW1iZXIuc2xpY2UoMTcpKTtcbiAgbGV0IGIyID0gcGFyc2VJbnQobnVtYmVyLnNsaWNlKDE2LCAxNykpO1xuICBsZXQgYjMgPSBwYXJzZUludChudW1iZXIuc2xpY2UoMTUsIDE2KSk7XG4gIGxldCBiNCA9IHBhcnNlSW50KG51bWJlci5zbGljZSgxNCwgMTUpKTtcbiAgbGV0IGI1ID0gcGFyc2VJbnQobnVtYmVyLnNsaWNlKDEzLCAxNCkpO1xuICBsZXQgYjYgPSBwYXJzZUludChudW1iZXIuc2xpY2UoMTIsIDEzKSk7XG4gIGxldCBiNyA9IHBhcnNlSW50KG51bWJlci5zbGljZSgxMSwgMTIpKTtcbiAgbGV0IGI4ID0gcGFyc2VJbnQobnVtYmVyLnNsaWNlKDEwLCAxMSkpO1xuICBsZXQgYjkgPSBwYXJzZUludChudW1iZXIuc2xpY2UoOSwgMTApKTtcbiAgbGV0IGIxMCA9IHBhcnNlSW50KG51bWJlci5zbGljZSg4LCA5KSk7XG4gIGxldCBiMTEgPSBwYXJzZUludChudW1iZXIuc2xpY2UoNywgOCkpO1xuICBsZXQgYjEyID0gcGFyc2VJbnQobnVtYmVyLnNsaWNlKDYsIDcpKTtcbiAgbGV0IGIxMyA9IHBhcnNlSW50KG51bWJlci5zbGljZSg1LCA2KSk7XG4gIGxldCBiMTQgPSBwYXJzZUludChudW1iZXIuc2xpY2UoNCwgNSkpO1xuICBsZXQgYjE1ID0gcGFyc2VJbnQobnVtYmVyLnNsaWNlKDMsIDQpKTtcbiAgbGV0IGIxNiA9IHBhcnNlSW50KG51bWJlci5zbGljZSgyLCAzKSk7XG4gIGxldCBiMTcgPSBwYXJzZUludChudW1iZXIuc2xpY2UoMSwgMikpO1xuICBsZXQgYjE4ID0gcGFyc2VJbnQobnVtYmVyLnNsaWNlKDAsIDEpKTtcblxuXG4gIGxldCBjaTE3ID0gYjEgKiAyOyBpZiAoY2kxNyA+IDkpIHsgY2kxNyA9IGNpMTcgLSA5OyB9XG4gIGxldCBjaTE1MTYgPSBiMyAqIDI7IGlmIChjaTE1MTYgPiA5KSB7IGNpMTUxNiA9IGNpMTUxNiAtIDk7IH1cbiAgbGV0IGNpMTMxNCA9IGI1ICogMjsgaWYgKGNpMTMxNCA+IDkpIHsgY2kxMzE0ID0gY2kxMzE0IC0gOTsgfVxuICBsZXQgY2kxMTEyID0gYjcgKiAyOyBpZiAoY2kxMTEyID4gOSkgeyBjaTExMTIgPSBjaTExMTIgLSA5OyB9XG4gIGxldCBjaTkxMCA9IGI5ICogMjsgaWYgKGNpOTEwID4gOSkgeyBjaTkxMCA9IGNpOTEwIC0gOTsgfVxuICBsZXQgY2k3OCA9IGIxMSAqIDI7IGlmIChjaTc4ID4gOSkgeyBjaTc4ID0gY2k3OCAtIDk7IH1cbiAgbGV0IGNpNTYgPSBiMTMgKiAyOyBpZiAoY2k1NiA+IDkpIHsgY2k1NiA9IGNpNTYgLSA5OyB9XG4gIGxldCBjaTM0ID0gYjE1ICogMjsgaWYgKGNpMzQgPiA5KSB7IGNpMzQgPSBjaTM0IC0gOTsgfVxuICBsZXQgY2kxMiA9IGIxNyAqIDI7IGlmIChjaTEyID4gOSkgeyBjaTEyID0gY2kxMiAtIDk7IH1cbiAgbGV0IGNpMTYxNyA9IGIyO1xuICBsZXQgY2kxNDE1ID0gYjQ7XG4gIGxldCBjaTEyMTMgPSBiNjtcbiAgbGV0IGNpMTAxMSA9IGI4O1xuICBsZXQgY2k4OSA9IGIxMDtcbiAgbGV0IGNpNjcgPSBiMTI7XG4gIGxldCBjaTQ1ID0gYjE0O1xuICBsZXQgY2kyMyA9IGIxNjtcbiAgbGV0IGNpMDEgPSBiMTg7XG5cbiAgbGV0IGNjcmVkRGlnID0gKGNpMTYxNyArIGNpMTQxNSArIGNpMTIxMyArIGNpMTAxMSArIGNpODkgKyBjaTY3ICsgY2k0NSArIGNpMjMgKyBjaTAxICsgY2kxNyArIGNpMTUxNiArIGNpMTMxNCArIGNpMTExMiArIGNpOTEwICsgY2k3OCArIGNpNTYgKyBjaTM0ICsgY2kxMikgJSAxMDtcbiAgY2NyZWREaWcgPSAxMCAtIGNjcmVkRGlnOyBpZiAoY2NyZWREaWcgPT0gMTApIHsgY2NyZWREaWcgPSAwOyB9XG5cbiAgcmV0dXJuIGNjcmVkRGlnO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlX2VjdChudW1iZXI6IHN0cmluZykge1xuICBudW1iZXIgPSBnZXRBbGxEaWdpdHMobnVtYmVyKTtcbiAgbnVtYmVyID0gXCIwMDAwMDAwXCIgKyBudW1iZXI7XG4gIG51bWJlciA9IG51bWJlci5zbGljZShudW1iZXIubGVuZ3RoIC0gOCk7XG5cbiAgbGV0IGIxID0gcGFyc2VJbnQobnVtYmVyLnNsaWNlKDcpKTtcbiAgbGV0IGIyID0gcGFyc2VJbnQobnVtYmVyLnNsaWNlKDYsIDcpKTtcbiAgbGV0IGIzID0gcGFyc2VJbnQobnVtYmVyLnNsaWNlKDUsIDYpKTtcbiAgbGV0IGI0ID0gcGFyc2VJbnQobnVtYmVyLnNsaWNlKDQsIDUpKTtcbiAgbGV0IGI1ID0gcGFyc2VJbnQobnVtYmVyLnNsaWNlKDMsIDQpKTtcbiAgbGV0IGI2ID0gcGFyc2VJbnQobnVtYmVyLnNsaWNlKDIsIDMpKTtcbiAgbGV0IGI3ID0gcGFyc2VJbnQobnVtYmVyLnNsaWNlKDEsIDIpKTtcbiAgbGV0IGI4ID0gcGFyc2VJbnQobnVtYmVyLnNsaWNlKDAsIDEpKTtcblxuICBsZXQgcmVnRWN0RGlnID0gKGIxICogNyArIGIyICogOSArIGIzICogNSArIGI0ICogMyArIGI1ICogMiArIGI2ICogNCArIGI3ICogNiArIGI4ICogOCkgJSAxMTtcbiAgcmVnRWN0RGlnID0gMTEgLSByZWdFY3REaWc7XG4gIGlmIChyZWdFY3REaWcgPT0gMTEpIHsgcmVnRWN0RGlnID0gNTsgfVxuICBpZiAocmVnRWN0RGlnID09IDEwKSB7IHJlZ0VjdERpZyA9IDA7IH1cbiAgcmV0dXJuIHJlZ0VjdERpZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZV9waXNwYXNlcChudW1iZXI6IHN0cmluZykge1xuXG4gIG51bWJlciA9IGdldEFsbERpZ2l0cyhudW1iZXIpO1xuICBsZXQgbmlzID0gZmlsbFN0cmluZyhudW1iZXIsIDExLCAnMCcpO1xuXG4gIGxldCBkO1xuICBsZXQgcCA9IDIsIGMgPSA5O1xuICBmb3IgKGQgPSAwOyBjID49IDA7IGMtLSwgKHAgPCA5KSA/IHArKyA6IHAgPSAyKSB7XG4gICAgZCArPSBwYXJzZUludChuaXNbY10pICogcDtcbiAgfVxuXG4gIGNvbnN0IGRpZ2l0ID0gKCgoMTAgKiBkKSAlIDExKSAlIDEwKTtcbiAgcmV0dXJuIGRpZ2l0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlX3JlbmF2YW0ocmVuYXZhbTogc3RyaW5nKSB7XG4gIGxldCBkaWcxID0gMDtcbiAgd2hpbGUgKHJlbmF2YW0ubGVuZ3RoIDwgMTEpIHtcbiAgICByZW5hdmFtID0gJzAnICsgcmVuYXZhbTtcbiAgfVxuXG4gIGRpZzEgPSAocmVuYXZhbS5jaGFyQ29kZUF0KDApIC0gNDgpICogMyArIChyZW5hdmFtLmNoYXJDb2RlQXQoMSkgLSA0OCkgKiAyICsgKHJlbmF2YW0uY2hhckNvZGVBdCgyKSAtIDQ4KSAqIDkgKyAocmVuYXZhbS5jaGFyQ29kZUF0KDMpIC0gNDgpICogOCArXG4gICAgKHJlbmF2YW0uY2hhckNvZGVBdCg0KSAtIDQ4KSAqIDcgKyAocmVuYXZhbS5jaGFyQ29kZUF0KDUpIC0gNDgpICogNiArIChyZW5hdmFtLmNoYXJDb2RlQXQoNikgLSA0OCkgKiA1ICtcbiAgICAocmVuYXZhbS5jaGFyQ29kZUF0KDcpIC0gNDgpICogNCArIChyZW5hdmFtLmNoYXJDb2RlQXQoOCkgLSA0OCkgKiAzICsgKHJlbmF2YW0uY2hhckNvZGVBdCg5KSAtIDQ4KSAqIDI7XG4gIGRpZzEgPSBkaWcxICogMTA7XG4gIGxldCByZXN0byA9IChkaWcxICUgMTEpO1xuICBpZiAocmVzdG8gPT09IDEwKSB7XG4gICAgcmV0dXJuIDA7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHJlc3RvO1xuICB9XG59XG5cblxuXG4vKipcbiAqIFxuICogRm9udDogaHR0cDovL2doaW9yemkub3JnL2luZGV4Lmh0bVxuICogQHBhcmFtIG51bWJlciBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZV9wcm9jZXNzbyhudW1iZXI6IHN0cmluZykge1xuICBudW1iZXIgPSBnZXRBbGxEaWdpdHMobnVtYmVyKTtcbiAgbnVtYmVyID0gXCIwMDAwMDAwMDAwMDAwMDAwMFwiICsgbnVtYmVyO1xuICBudW1iZXIgPSBudW1iZXIuc2xpY2UobnVtYmVyLmxlbmd0aCAtIDE4KTtcblxuICBsZXQgYjEgPSBwYXJzZUludChudW1iZXIuc2xpY2UoMCwgMSkpICogMTAwMDAwMDAwMDA7XG4gIGxldCBiMiA9IHBhcnNlSW50KG51bWJlci5zbGljZSgxLCAyKSkgKiAxMDAwMDAwMDAwO1xuICBsZXQgYjMgPSBwYXJzZUludChudW1iZXIuc2xpY2UoMiwgMykpICogMTAwMDAwMDAwO1xuICBsZXQgYjQgPSBwYXJzZUludChudW1iZXIuc2xpY2UoMywgNCkpICogMTAwMDAwMDA7XG4gIGxldCBiNSA9IHBhcnNlSW50KG51bWJlci5zbGljZSg0LCA1KSkgKiAxMDAwMDAwO1xuICBsZXQgYjYgPSBwYXJzZUludChudW1iZXIuc2xpY2UoNSwgNikpICogMTAwMDAwO1xuICBsZXQgYjcgPSBwYXJzZUludChudW1iZXIuc2xpY2UoNiwgNykpICogMTAwMDA7XG4gIGxldCBiOCA9IHBhcnNlSW50KG51bWJlci5zbGljZSg3LCA4KSkgKiAxMDAwO1xuICBsZXQgYjkgPSBwYXJzZUludChudW1iZXIuc2xpY2UoOCwgOSkpICogMTAwO1xuICBsZXQgYjEwID0gcGFyc2VJbnQobnVtYmVyLnNsaWNlKDksIDEwKSkgKiAxMDtcbiAgbGV0IGIxMSA9IHBhcnNlSW50KG51bWJlci5zbGljZSgxMCwgMTEpKTtcblxuICBjb25zdCBwcm9jMWExMSA9IGIxICsgYjIgKyBiMyArIGI0ICsgYjUgKyBiNiArIGI3ICsgYjggKyBiOSArIGIxMCArIGIxMTtcbiAgY29uc3QgcmVzdG8xID0gcHJvYzFhMTEgJSA5NztcblxuICBsZXQgYjEyID0gcGFyc2VJbnQobnVtYmVyLnNsaWNlKDExLCAxMikpICogMTAwMDAwMDtcbiAgbGV0IGIxMyA9IHBhcnNlSW50KG51bWJlci5zbGljZSgxMiwgMTMpKSAqIDEwMDAwMDtcbiAgbGV0IGIxNCA9IHBhcnNlSW50KG51bWJlci5zbGljZSgxMywgMTQpKSAqIDEwMDAwO1xuICBsZXQgYjE1ID0gcGFyc2VJbnQobnVtYmVyLnNsaWNlKDE0LCAxNSkpICogMTAwMDtcbiAgbGV0IGIxNiA9IHBhcnNlSW50KG51bWJlci5zbGljZSgxNSwgMTYpKSAqIDEwMDtcbiAgbGV0IGIxNyA9IHBhcnNlSW50KG51bWJlci5zbGljZSgxNiwgMTcpKSAqIDEwO1xuICBsZXQgYjE4ID0gcGFyc2VJbnQobnVtYmVyLnNsaWNlKDE3KSk7XG5cbiAgY29uc3QgcHJvYzEyYTE4ID0gYjEyICsgYjEzICsgYjE0ICsgYjE1ICsgYjE2ICsgYjE3ICsgYjE4O1xuICBjb25zdCByZXN0bzIgPSAocmVzdG8xICogMTAwMDAwMDAgKiAxMDAgKyBwcm9jMTJhMTggKiAxMDApICUgOTc7XG5cbiAgbGV0IHByb2NKdWREVjogYW55ID0gOTggLSByZXN0bzI7XG5cbiAgaWYgKHByb2NKdWREViA8IDEwKSB7XG4gICAgcHJvY0p1ZERWID0gXCIwXCIgKyBwcm9jSnVkRFY7XG4gIH1cblxuICBsZXQgcHJvY0p1ZENvbXBsID0gYjEgLyAxMDAwMCArIGIyIC8gMTAwMDAgKyBiMyAvIDEwMDAwICsgYjQgLyAxMDAwMCArIGI1IC8gMTAwMDAgKyBiNiAvIDEwMDAwICsgYjcgLyAxMDAwMCArIFwiLVwiICsgcHJvY0p1ZERWICsgXCIuXCIgKyBiOCAvIDEwMDAgKyBiOSAvIDEwMCArIGIxMCAvIDEwICsgYjExICsgXCIuXCIgKyBiMTIgLyAxMDAwMDAwICsgXCIuXCIgKyBiMTMgLyAxMDAwMDAgKyBiMTQgLyAxMDAwMCArIFwiLlwiICsgYjE1IC8gMTAwMCArIGIxNiAvIDEwMCArIGIxNyAvIDEwICsgYjE4O1xuXG4gIHByb2NKdWRDb21wbCA9IFwiMDAwMDAwXCIgKyBwcm9jSnVkQ29tcGw7XG4gIGNvbnN0IHJlc3VsdCA9IHByb2NKdWRDb21wbC5zbGljZShwcm9jSnVkQ29tcGwubGVuZ3RoIC0gMjUpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVfdGl0dWxvX2F0dWFsKHRpdHVsbzogc3RyaW5nKSB7XG4gIGNvbnN0IHRpdCA9IHRpdHVsbztcbiAgbGV0IGRpZzEgPSAwO1xuICBsZXQgZGlnMiA9IDA7XG4gIGNvbnN0IHRhbSA9IHRpdC5sZW5ndGg7XG4gIGNvbnN0IGVzdGFkbyA9IHRpdC5zdWJzdHIodGFtIC0gNCwgMik7XG4gIHRpdHVsbyA9IHRpdC5zdWJzdHIoMCwgdGFtIC0gMik7XG4gIHRpdHVsbyA9ICcwMDAwMDAwMDAwMDAnICsgdGl0dWxvO1xuICB0aXR1bG8gPSB0aXR1bG8uc3Vic3RyKHRpdHVsby5sZW5ndGggLSAxMSwgdGl0dWxvLmxlbmd0aCAtIDEpO1xuICBjb25zdCBleGNlID0gKGVzdGFkbyA9PT0gJzAxJykgfHwgKGVzdGFkbyA9PT0gJzAyJyk7XG4gIGRpZzEgPSAodGl0dWxvLmNoYXJDb2RlQXQoMCkgLSA0OCkgKiAyICsgKHRpdHVsby5jaGFyQ29kZUF0KDEpIC0gNDgpICogOSArICh0aXR1bG8uY2hhckNvZGVBdCgyKSAtIDQ4KSAqIDggK1xuICAgICh0aXR1bG8uY2hhckNvZGVBdCgzKSAtIDQ4KSAqIDcgKyAodGl0dWxvLmNoYXJDb2RlQXQoNCkgLSA0OCkgKiA2ICsgKHRpdHVsby5jaGFyQ29kZUF0KDUpIC0gNDgpICogNSArXG4gICAgKHRpdHVsby5jaGFyQ29kZUF0KDYpIC0gNDgpICogNCArICh0aXR1bG8uY2hhckNvZGVBdCg3KSAtIDQ4KSAqIDMgKyAodGl0dWxvLmNoYXJDb2RlQXQoOCkgLSA0OCkgKiAyO1xuICBsZXQgcmVzdG8gPSAoZGlnMSAlIDExKTtcbiAgaWYgKHJlc3RvID09PSAwKSB7XG4gICAgaWYgKGV4Y2UpIHtcbiAgICAgIGRpZzEgPSAxO1xuICAgIH0gZWxzZSB7XG4gICAgICBkaWcxID0gMDtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKHJlc3RvID09PSAxKSB7XG4gICAgICBkaWcxID0gMDtcbiAgICB9IGVsc2Uge1xuICAgICAgZGlnMSA9IDExIC0gcmVzdG87XG4gICAgfVxuICB9XG4gIGRpZzIgPSAodGl0dWxvLmNoYXJDb2RlQXQoOSkgLSA0OCkgKiA0ICsgKHRpdHVsby5jaGFyQ29kZUF0KDEwKSAtIDQ4KSAqIDMgKyBkaWcxICogMjtcbiAgcmVzdG8gPSAoZGlnMiAlIDExKTtcbiAgaWYgKHJlc3RvID09PSAwKSB7XG4gICAgaWYgKGV4Y2UpIHtcbiAgICAgIGRpZzIgPSAxO1xuICAgIH0gZWxzZSB7XG4gICAgICBkaWcyID0gMDtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKHJlc3RvID09PSAxKSB7XG4gICAgICBkaWcyID0gMDtcbiAgICB9IGVsc2Uge1xuICAgICAgZGlnMiA9IDExIC0gcmVzdG87XG4gICAgfVxuICB9XG4gIHJldHVybiBkaWcxLnRvU3RyaW5nKCkgKyBkaWcyLnRvU3RyaW5nKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVfdGl0dWxvKHRpdE51bTogc3RyaW5nKSB7XG4gIHRpdE51bSA9IGdldEFsbERpZ2l0cyh0aXROdW0pO1xuXG4gIGlmICh0aXROdW0ubGVuZ3RoID4gMTEpIHtcbiAgICB0aXROdW0gPSB0aXROdW0uc3Vic3RyKDAsIDExKTtcbiAgfVxuXG4gIHRpdE51bSA9IFwiMDAwMDAwMDBcIiArIHRpdE51bTtcbiAgdGl0TnVtID0gdGl0TnVtLnNsaWNlKHRpdE51bS5sZW5ndGggLSAxMSk7XG5cbiAgbGV0IGExID0gcGFyc2VJbnQodGl0TnVtLnNsaWNlKDEwKSk7XG4gIGxldCBhMiA9IHBhcnNlSW50KHRpdE51bS5zbGljZSg5LCAxMCkpO1xuICBsZXQgYTMgPSBwYXJzZUludCh0aXROdW0uc2xpY2UoOCwgOSkpO1xuICBsZXQgYTQgPSBwYXJzZUludCh0aXROdW0uc2xpY2UoNywgOCkpO1xuICBsZXQgYTUgPSBwYXJzZUludCh0aXROdW0uc2xpY2UoNiwgNykpO1xuICBsZXQgYTYgPSBwYXJzZUludCh0aXROdW0uc2xpY2UoNSwgNikpO1xuICBsZXQgYTcgPSBwYXJzZUludCh0aXROdW0uc2xpY2UoNCwgNSkpO1xuICBsZXQgYTggPSBwYXJzZUludCh0aXROdW0uc2xpY2UoMywgNCkpO1xuICBsZXQgYTkgPSBwYXJzZUludCh0aXROdW0uc2xpY2UoMiwgMykpO1xuICBsZXQgYTEwID0gcGFyc2VJbnQodGl0TnVtLnNsaWNlKDEsIDIpKTtcbiAgbGV0IGExMSA9IHBhcnNlSW50KHRpdE51bS5zbGljZSgwLCAxKSk7XG5cbiAgaWYgKGEyICogMTAgKyBhMSA9PSAwIHx8IGEyICogMTAgKyBhMSA+IDI4KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiRXNzZSBuwrogw6kgc3VzcGVpdG8sIHBvcnF1ZSBhIGlkZW50aWZpY2HDp8OjbyBkYSBcXG5VRiAow7psdGltb3MgMiBkw61naXRvcykgZGV2ZSBlc3RhciBlbnRyZSAwMSBlIDI4LlwiKTtcbiAgfVxuXG4gIGxldCB0aXRFeGNlY2FvMSA9IDA7XG4gIGxldCB0aXRFeGNlY2FvMiA9IDA7XG5cbiAgbGV0IHRpdFByaURpZyA9IChhMyAqIDkgKyBhNCAqIDggKyBhNSAqIDcgKyBhNiAqIDYgKyBhNyAqIDUgKyBhOCAqIDQgKyBhOSAqIDMgKyBhMTAgKiAyICsgYTExICogOSkgJSAxMTtcbiAgaWYgKHRpdFByaURpZyA9PSAwKSB7IHRpdEV4Y2VjYW8xID0gMTsgfVxuICBpZiAodGl0UHJpRGlnID09IDEwKSB7IHRpdFByaURpZyA9IDA7IH1cbiAgaWYgKChhMiAqIDEwICsgYTEgPT0gMSB8fCBhMiAqIDEwICsgYTEgPT0gMikgJiYgKHRpdEV4Y2VjYW8xID09IDEpKSB7IHRpdFByaURpZyA9IDE7IH1cblxuICBsZXQgdGl0U2VnRGlnID0gKHRpdFByaURpZyAqIDkgKyBhMSAqIDggKyBhMiAqIDcpICUgMTE7XG4gIGlmICh0aXRTZWdEaWcgPT0gMCkgeyB0aXRFeGNlY2FvMiA9IDE7IH1cbiAgaWYgKHRpdFNlZ0RpZyA9PSAxMCkgeyB0aXRTZWdEaWcgPSAwOyB9XG4gIGlmICgoYTIgKiAxMCArIGExID09IDEgfHwgYTIgKiAxMCArIGExID09IDIpICYmICh0aXRFeGNlY2FvMiA9PSAxKSkgeyB0aXRTZWdEaWcgPSAxOyB9XG5cbiAgbGV0IHRpdERWOiBhbnkgPSB0aXRQcmlEaWcgKiAxMCArIHRpdFNlZ0RpZztcbiAgaWYgKHRpdERWID09IDApIHsgdGl0RFYgPSBcIjAwXCI7IH1cbiAgaWYgKHRpdERWID4gMCAmJiB0aXREViA8IDEwKSB7IHRpdERWID0gXCIwXCIgKyB0aXREVjsgfVxuXG4gIHJldHVybiB0aXREVi50b1N0cmluZygpO1xufSJdfQ==
|