mapa-library-ui 0.25.3 → 0.27.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (69) hide show
  1. package/esm2020/lib/core/js-brasil/index.mjs +16 -0
  2. package/esm2020/lib/core/js-brasil/src/create.mjs +455 -0
  3. package/esm2020/lib/core/js-brasil/src/createNumberMask.mjs +115 -0
  4. package/esm2020/lib/core/js-brasil/src/estados.mjs +34 -0
  5. package/esm2020/lib/core/js-brasil/src/index.mjs +34 -0
  6. package/esm2020/lib/core/js-brasil/src/inscricaoestadual.mjs +702 -0
  7. package/esm2020/lib/core/js-brasil/src/interfaces.mjs +2 -0
  8. package/esm2020/lib/core/js-brasil/src/iptu.mjs +25 -0
  9. package/esm2020/lib/core/js-brasil/src/iptu_create.mjs +60 -0
  10. package/esm2020/lib/core/js-brasil/src/iptu_mask.mjs +38 -0
  11. package/esm2020/lib/core/js-brasil/src/iptu_validate.mjs +67 -0
  12. package/esm2020/lib/core/js-brasil/src/mask.mjs +579 -0
  13. package/esm2020/lib/core/js-brasil/src/name.mjs +371 -0
  14. package/esm2020/lib/core/js-brasil/src/placa.mjs +162 -0
  15. package/esm2020/lib/core/js-brasil/src/rg.mjs +63 -0
  16. package/esm2020/lib/core/js-brasil/src/saude.mjs +62 -0
  17. package/esm2020/lib/core/js-brasil/src/utils.mjs +304 -0
  18. package/esm2020/lib/core/js-brasil/src/validate.mjs +627 -0
  19. package/esm2020/lib/core/pipes/cpf.mjs +17 -0
  20. package/esm2020/public-api.mjs +3 -1
  21. package/esm2020/src/lib/components/capability/lib/components/dropdown/src/dropdown.component.mjs +2 -2
  22. package/esm2020/src/lib/components/chart/lib/components/dropdown/src/dropdown.component.mjs +2 -2
  23. package/esm2020/src/lib/components/dropdown/lib/components/dropdown/src/dropdown.component.mjs +2 -2
  24. package/esm2020/src/lib/components/table/lib/components/table/public-api.mjs +2 -1
  25. package/esm2020/src/lib/components/table/lib/components/table/src/table.module.mjs +10 -3
  26. package/fesm2015/mapa-library-ui-src-lib-components-capability.mjs +1 -1
  27. package/fesm2015/mapa-library-ui-src-lib-components-capability.mjs.map +1 -1
  28. package/fesm2015/mapa-library-ui-src-lib-components-chart.mjs +1 -1
  29. package/fesm2015/mapa-library-ui-src-lib-components-chart.mjs.map +1 -1
  30. package/fesm2015/mapa-library-ui-src-lib-components-dropdown.mjs +1 -1
  31. package/fesm2015/mapa-library-ui-src-lib-components-dropdown.mjs.map +1 -1
  32. package/fesm2015/mapa-library-ui-src-lib-components-table.mjs +31 -24
  33. package/fesm2015/mapa-library-ui-src-lib-components-table.mjs.map +1 -1
  34. package/fesm2015/mapa-library-ui.mjs +3675 -2
  35. package/fesm2015/mapa-library-ui.mjs.map +1 -1
  36. package/fesm2020/mapa-library-ui-src-lib-components-capability.mjs +1 -1
  37. package/fesm2020/mapa-library-ui-src-lib-components-capability.mjs.map +1 -1
  38. package/fesm2020/mapa-library-ui-src-lib-components-chart.mjs +1 -1
  39. package/fesm2020/mapa-library-ui-src-lib-components-chart.mjs.map +1 -1
  40. package/fesm2020/mapa-library-ui-src-lib-components-dropdown.mjs +1 -1
  41. package/fesm2020/mapa-library-ui-src-lib-components-dropdown.mjs.map +1 -1
  42. package/fesm2020/mapa-library-ui-src-lib-components-table.mjs +31 -24
  43. package/fesm2020/mapa-library-ui-src-lib-components-table.mjs.map +1 -1
  44. package/fesm2020/mapa-library-ui.mjs +3682 -2
  45. package/fesm2020/mapa-library-ui.mjs.map +1 -1
  46. package/lib/core/js-brasil/index.d.ts +15 -0
  47. package/lib/core/js-brasil/src/create.d.ts +37 -0
  48. package/lib/core/js-brasil/src/createNumberMask.d.ts +13 -0
  49. package/lib/core/js-brasil/src/estados.d.ts +7 -0
  50. package/lib/core/js-brasil/src/index.d.ts +34 -0
  51. package/lib/core/js-brasil/src/inscricaoestadual.d.ts +7 -0
  52. package/lib/core/js-brasil/src/interfaces.d.ts +51 -0
  53. package/lib/core/js-brasil/src/iptu.d.ts +3 -0
  54. package/lib/core/js-brasil/src/iptu_create.d.ts +5 -0
  55. package/lib/core/js-brasil/src/iptu_mask.d.ts +2 -0
  56. package/lib/core/js-brasil/src/iptu_validate.d.ts +10 -0
  57. package/lib/core/js-brasil/src/mask.d.ts +53 -0
  58. package/lib/core/js-brasil/src/name.d.ts +9 -0
  59. package/lib/core/js-brasil/src/placa.d.ts +6 -0
  60. package/lib/core/js-brasil/src/rg.d.ts +5 -0
  61. package/lib/core/js-brasil/src/saude.d.ts +84 -0
  62. package/lib/core/js-brasil/src/utils.d.ts +71 -0
  63. package/lib/core/js-brasil/src/validate.d.ts +90 -0
  64. package/lib/core/pipes/cpf.d.ts +7 -0
  65. package/mapa-library-ui-0.27.0.tgz +0 -0
  66. package/package.json +1 -1
  67. package/public-api.d.ts +2 -0
  68. package/src/lib/components/table/lib/components/table/public-api.d.ts +1 -0
  69. package/mapa-library-ui-0.25.3.tgz +0 -0
@@ -0,0 +1,702 @@
1
+ import { allNumbersAreSame } from './utils';
2
+ /**
3
+ * BASED ON https://github.com/gammasoft/ie/
4
+ */
5
+ export const generateInscricaoEstadual = {
6
+ ac: function (valor) {
7
+ if (tamanhoNaoE(valor, 13)) {
8
+ return false;
9
+ }
10
+ if (naoComecaCom(valor, '01')) {
11
+ return false;
12
+ }
13
+ const base = primeiros(valor, 11);
14
+ const primeiroDigito = substracaoPor11SeMaiorQue2CasoContrario0(mod(base));
15
+ const segundoDigito = substracaoPor11SeMaiorQue2CasoContrario0(mod(base + primeiroDigito));
16
+ return base + primeiroDigito + segundoDigito;
17
+ },
18
+ am: function (valor) {
19
+ if (tamanhoNaoE(valor)) {
20
+ return false;
21
+ }
22
+ return calculoTrivialGenerate(valor);
23
+ },
24
+ al: function (valor) {
25
+ if (tamanhoNaoE(valor)) {
26
+ return false;
27
+ }
28
+ if (naoComecaCom(valor, '24')) {
29
+ return false;
30
+ }
31
+ // FORMAÇÃO: 24XNNNNND, sendo:
32
+ // 24 – Código do Estado
33
+ // X – Tipo de empresa (0-Normal, 3-Produtor Rural, 5-Substituta, 7- Micro-Empresa Ambulante, 8-Micro-Empresa)
34
+ // NNNNN – Número da empresa
35
+ // D – Dígito de verificação calculado pelo Módulo11, pêsos 2 à 9 da direita para a esquerda, exceto D
36
+ // Exemplo: Número 2 4 0 0 0 0 0 4 D
37
+ // 2 4 X N N N N N D
38
+ // Fonte: http://www.sintegra.gov.br/Cad_Estados/cad_AL.html
39
+ const base = primeiros(valor);
40
+ // Pesos 9 8 7 6 5 4 3 2
41
+ // SOMA = (2 * 4) + (3 * 0) + (4 * 0) + (5 * 0) + (6 * 0) + (7 * 0) + (8 * 4) + (9 * 2) = 58
42
+ const soma = base.split('').reduce((acc, v, i) => {
43
+ return acc + (9 - i) * Number(v);
44
+ }, 0);
45
+ // PRODUTO = 58 * 10 = 580
46
+ const produto = soma * 10;
47
+ // RESTO = 580 – INTEIRO(580 / 11)*11 = 580 – (52*11) = 8
48
+ const resto = produto - Math.floor(produto / 11) * 11;
49
+ // DÍGITO = 8 - Caso RESTO seja igual a 10 o DÍGITO será 0 (zero)
50
+ const digito = resto === 10 ? 0 : resto;
51
+ return base + digito;
52
+ },
53
+ ap: function (valor) {
54
+ if (tamanhoNaoE(valor)) {
55
+ return false;
56
+ }
57
+ if (naoComecaCom(valor, '03')) {
58
+ return false;
59
+ }
60
+ const base = primeiros(valor);
61
+ let p, d;
62
+ if (entre(base, 3000001, 3017000)) {
63
+ p = 5;
64
+ d = 0;
65
+ }
66
+ else if (entre(base, 3017001, 3019022)) {
67
+ p = 9;
68
+ d = 1;
69
+ }
70
+ else {
71
+ p = 0;
72
+ d = 0;
73
+ }
74
+ const resto = mod(p + base, [2, 3, 4, 5, 6, 7, 8, 9, 1]);
75
+ let digito;
76
+ if (resto === 1) {
77
+ digito = 0;
78
+ }
79
+ else if (resto === 0) {
80
+ digito = d;
81
+ }
82
+ else {
83
+ digito = 11 - resto;
84
+ }
85
+ return base + digito;
86
+ },
87
+ ba: function (valor) {
88
+ if (tamanhoNaoE(valor, 8) && tamanhoNaoE(valor)) {
89
+ return false;
90
+ }
91
+ const base = primeiros(valor, valor.length - 2);
92
+ let primeiroDigito, segundoDigito;
93
+ const segundoMultiplicador = serie(2, 7);
94
+ const primeiroMultiplicador = serie(2, 8);
95
+ let primeiroResto, segundoResto;
96
+ let digitoComparacao = valor.substring(0, 1);
97
+ if (tamanhoE(valor, 9)) {
98
+ segundoMultiplicador.push(8);
99
+ primeiroMultiplicador.push(9);
100
+ digitoComparacao = valor.substring(1, 2);
101
+ }
102
+ if ('0123458'.split('').indexOf(digitoComparacao) !== -1) {
103
+ segundoResto = mod(base, segundoMultiplicador, 10);
104
+ segundoDigito = segundoResto === 0 ? 0 : 10 - segundoResto;
105
+ primeiroResto = mod(base + segundoDigito, primeiroMultiplicador, 10);
106
+ primeiroDigito = primeiroResto === 0 ? 0 : 10 - primeiroResto;
107
+ }
108
+ else {
109
+ segundoResto = mod(base, segundoMultiplicador);
110
+ segundoDigito = substracaoPor11SeMaiorQue2CasoContrario0(segundoResto);
111
+ primeiroResto = mod(base + segundoDigito, primeiroMultiplicador);
112
+ primeiroDigito = substracaoPor11SeMaiorQue2CasoContrario0(primeiroResto);
113
+ }
114
+ return base + primeiroDigito + segundoDigito;
115
+ },
116
+ ce: function (valor) {
117
+ if (tamanhoNaoE(valor)) {
118
+ return false;
119
+ }
120
+ return calculoTrivialGenerate(valor);
121
+ },
122
+ df: function (valor) {
123
+ if (tamanhoNaoE(valor, 13)) {
124
+ return false;
125
+ }
126
+ if (naoComecaCom(valor, '07') && naoComecaCom(valor, '08')) {
127
+ return false;
128
+ }
129
+ const base = primeiros(valor, 11);
130
+ const primeiro = substracaoPor11SeMaiorQue2CasoContrario0(mod(base));
131
+ const segundo = substracaoPor11SeMaiorQue2CasoContrario0(mod(base + primeiro));
132
+ return base + primeiro + segundo;
133
+ },
134
+ es: function (valor) {
135
+ return calculoTrivialGenerate(valor);
136
+ },
137
+ go: function (valor) {
138
+ if (tamanhoNaoE(valor)) {
139
+ return false;
140
+ }
141
+ // Verifica os digitos iniciais do estado
142
+ // Fonte: https://appasp.economia.go.gov.br/Legislacao/arquivos/Secretario/IN/IN_1535_2022.htm
143
+ if (['10', '11', '15', '20'].indexOf(valor.substring(0, 2)) === -1) {
144
+ return false;
145
+ }
146
+ const base = primeiros(valor);
147
+ if (base === '11094402') {
148
+ return valor.substr(8) === '1' || valor.substr(8) === '0';
149
+ }
150
+ const resto = mod(base);
151
+ let digito;
152
+ if (resto === 0) {
153
+ digito = 0;
154
+ }
155
+ else if (resto === 1) {
156
+ if (entre(base, 10103105, 10119997)) {
157
+ digito = 1;
158
+ }
159
+ else {
160
+ digito = 0;
161
+ }
162
+ }
163
+ else {
164
+ digito = 11 - resto;
165
+ }
166
+ return base + digito;
167
+ },
168
+ ma: function (valor) {
169
+ if (tamanhoNaoE(valor)) {
170
+ return false;
171
+ }
172
+ if (naoComecaCom(valor, '12')) {
173
+ return false;
174
+ }
175
+ return calculoTrivialGenerate(valor);
176
+ },
177
+ mg: function (valor) {
178
+ if (tamanhoNaoE(valor, 13)) {
179
+ return false;
180
+ }
181
+ const base = primeiros(valor, 11);
182
+ const baseComZero = valor.substring(0, 3) + '0' + valor.substring(3, 11);
183
+ let i = 0;
184
+ const produtorioLiteral = baseComZero.split('').reduceRight(function (anterior, atual) {
185
+ if (i > [2, 1].length - 1) {
186
+ i = 0;
187
+ }
188
+ return ([2, 1][i++] * parseInt(atual, 10)).toString() + anterior.toString();
189
+ }, '').split('').reduce(function (anterior, atual) {
190
+ return anterior + parseInt(atual, 10);
191
+ }, 0);
192
+ let primeiro = ((Math.floor(produtorioLiteral / 10) + 1) * 10) - produtorioLiteral;
193
+ if (primeiro === 10) {
194
+ primeiro = 0;
195
+ }
196
+ const segundo = substracaoPor11SeMaiorQue2CasoContrario0(mod(base + primeiro, serie(2, 11)));
197
+ return base + primeiro + segundo;
198
+ },
199
+ ms: function (valor) {
200
+ if (naoComecaCom(valor, '28')) {
201
+ return false;
202
+ }
203
+ return calculoTrivialGenerate(valor);
204
+ },
205
+ mt: function (valor) {
206
+ if (tamanhoNaoE(valor, 11) && tamanhoNaoE(valor)) {
207
+ return false;
208
+ }
209
+ const base = tamanhoE(valor, 11) ? valor.substring(0, 10) : primeiros(valor);
210
+ return calculoTrivialGenerate(valor, base, true);
211
+ },
212
+ pa: function (valor) {
213
+ if (tamanhoNaoE(valor)) {
214
+ return false;
215
+ }
216
+ if (naoComecaCom(valor, '15') && naoComecaCom(valor, '75')) {
217
+ return false;
218
+ }
219
+ return calculoTrivialGenerate(valor);
220
+ },
221
+ pb: function (valor) {
222
+ if (tamanhoNaoE(valor)) {
223
+ return false;
224
+ }
225
+ return calculoTrivialGenerate(valor);
226
+ },
227
+ pe: function (valor) {
228
+ const base = valor.substring(0, valor.length - 2);
229
+ const restoPrimeiro = mod(base);
230
+ const primeiro = 11 - restoPrimeiro >= 10 ? 0 : 11 - restoPrimeiro;
231
+ const restoSegundo = mod(base + primeiro);
232
+ const segundo = 11 - restoSegundo >= 10 ? 0 : 11 - restoSegundo;
233
+ return base + primeiro + segundo;
234
+ },
235
+ pi: function (valor) {
236
+ return calculoTrivialGenerate(valor);
237
+ },
238
+ pr: function (valor) {
239
+ if (tamanhoNaoE(valor, 10)) {
240
+ return false;
241
+ }
242
+ const base = primeiros(valor);
243
+ const restoPrimeiro = mod(base, serie(2, 7));
244
+ const primeiro = 11 - restoPrimeiro >= 10 ? 0 : 11 - restoPrimeiro;
245
+ const restoSegundo = mod(base + primeiro, serie(2, 7));
246
+ const segundo = 11 - restoSegundo >= 10 ? 0 : 11 - restoSegundo;
247
+ return base + primeiro + segundo;
248
+ },
249
+ rj: function (valor) {
250
+ if (tamanhoNaoE(valor, 8)) {
251
+ return false;
252
+ }
253
+ const base = primeiros(valor, 7);
254
+ const digito = substracaoPor11SeMaiorQue2CasoContrario0(mod(base, serie(2, 7)));
255
+ return base + digito;
256
+ },
257
+ rn: function (valor) {
258
+ if (tamanhoNaoE(valor) && tamanhoNaoE(valor, 10)) {
259
+ return false;
260
+ }
261
+ if (naoComecaCom(valor, '20')) {
262
+ return false;
263
+ }
264
+ const base = valor.substring(0, valor.length - 1);
265
+ const multiplicadores = serie(2, 9);
266
+ if (tamanhoE(valor, 10)) {
267
+ multiplicadores.push(10);
268
+ }
269
+ const resto = (mod(base, multiplicadores) * 10) % 11;
270
+ const digito = resto === 10 ? 0 : resto;
271
+ return base + digito;
272
+ },
273
+ ro: function (valor) {
274
+ let base, digito, resultadoMod;
275
+ if (tamanhoE(valor, 9)) {
276
+ base = valor.substring(3, 8);
277
+ digito = substracaoPor11SeMaiorQue2CasoContrario0(mod(base));
278
+ return valor === valor.substring(0, 3) + base + digito;
279
+ }
280
+ else if (tamanhoE(valor, 14)) {
281
+ base = primeiros(valor, 13);
282
+ resultadoMod = mod(base);
283
+ digito = resultadoMod <= 1 ? 1 : 11 - resultadoMod;
284
+ return base + digito;
285
+ }
286
+ else {
287
+ return false;
288
+ }
289
+ },
290
+ rr: function (valor) {
291
+ if (tamanhoNaoE(valor)) {
292
+ return false;
293
+ }
294
+ if (naoComecaCom(valor, '24')) {
295
+ return false;
296
+ }
297
+ const base = primeiros(valor);
298
+ const digito = mod(base, [8, 7, 6, 5, 4, 3, 2, 1], 9);
299
+ return base + digito;
300
+ },
301
+ rs: function (valor) {
302
+ if (tamanhoNaoE(valor, 10)) {
303
+ return false;
304
+ }
305
+ const base = primeiros(valor, 9);
306
+ return calculoTrivialGenerate(valor, base, true);
307
+ },
308
+ sc: function (valor) {
309
+ return calculoTrivialGenerate(valor);
310
+ },
311
+ se: function (valor) {
312
+ if (tamanhoNaoE(valor)) {
313
+ return false;
314
+ }
315
+ return calculoTrivialGenerate(valor);
316
+ },
317
+ sp: function (valor) {
318
+ valor = valor.toUpperCase();
319
+ let segundaBase;
320
+ if (valor.substr(0, 1) === 'P') {
321
+ if (tamanhoNaoE(valor, 13)) {
322
+ return false;
323
+ }
324
+ const base = valor.substring(1, 9);
325
+ segundaBase = valor.substring(10, 13);
326
+ const resto = mod(base, [10, 8, 7, 6, 5, 4, 3, 1]).toString();
327
+ const digito = resto.length > 1 ? resto[1] : resto[0];
328
+ return 'P' + base + digito + segundaBase;
329
+ }
330
+ else {
331
+ if (tamanhoNaoE(valor, 12)) {
332
+ return false;
333
+ }
334
+ const primeiraBase = primeiros(valor);
335
+ segundaBase = valor.substring(9, 11);
336
+ const primeiroResto = mod(primeiraBase, [10, 8, 7, 6, 5, 4, 3, 1]).toString();
337
+ const primeiro = primeiroResto.length > 1 ? primeiroResto[1] : primeiroResto[0];
338
+ const segundoResto = mod(primeiraBase + primeiro + segundaBase, serie(2, 10)).toString();
339
+ const segundo = segundoResto.length > 1 ? segundoResto[1] : segundoResto[0];
340
+ return primeiraBase + primeiro + segundaBase + segundo;
341
+ }
342
+ },
343
+ to: function (valor) {
344
+ if (tamanhoNaoE(valor) && tamanhoNaoE(valor, 11)) {
345
+ return false;
346
+ }
347
+ let base;
348
+ if (tamanhoE(valor, 11)) {
349
+ if (['01', '02', '03', '99'].indexOf(valor.substring(2, 4)) === -1) {
350
+ return false;
351
+ }
352
+ base = valor.substring(0, 2) + valor.substring(4, 10);
353
+ }
354
+ else {
355
+ base = primeiros(valor);
356
+ }
357
+ const digito = substracaoPor11SeMaiorQue2CasoContrario0(mod(base));
358
+ return valor.substring(0, valor.length - 1) + digito;
359
+ },
360
+ };
361
+ const funcoes = {
362
+ ac: function (valor) {
363
+ return valor === generateInscricaoEstadual['ac'](valor);
364
+ },
365
+ am: function (valor) {
366
+ return valor === generateInscricaoEstadual['am'](valor);
367
+ },
368
+ al: function (valor) {
369
+ return valor === generateInscricaoEstadual['al'](valor);
370
+ },
371
+ ap: function (valor) {
372
+ return valor === generateInscricaoEstadual['ap'](valor);
373
+ },
374
+ ba: function (valor) {
375
+ return valor === generateInscricaoEstadual['ba'](valor);
376
+ },
377
+ ce: function (valor) {
378
+ return valor === generateInscricaoEstadual['ce'](valor);
379
+ },
380
+ df: function (valor) {
381
+ return valor === generateInscricaoEstadual['df'](valor);
382
+ },
383
+ es: function (valor) {
384
+ return valor === generateInscricaoEstadual['es'](valor);
385
+ },
386
+ go: function (valor) {
387
+ return valor === generateInscricaoEstadual['go'](valor);
388
+ },
389
+ ma: function (valor) {
390
+ return valor === generateInscricaoEstadual['ma'](valor);
391
+ },
392
+ mg: function (valor) {
393
+ return valor === generateInscricaoEstadual['mg'](valor);
394
+ },
395
+ ms: function (valor) {
396
+ return valor === generateInscricaoEstadual['ms'](valor);
397
+ },
398
+ mt: function (valor) {
399
+ return valor === generateInscricaoEstadual['mt'](valor);
400
+ },
401
+ pa: function (valor) {
402
+ return valor === generateInscricaoEstadual['pa'](valor);
403
+ },
404
+ pb: function (valor) {
405
+ return valor === generateInscricaoEstadual['pb'](valor);
406
+ },
407
+ pe: function (valor) {
408
+ return valor === generateInscricaoEstadual['pe'](valor);
409
+ },
410
+ pi: function (valor) {
411
+ return valor === generateInscricaoEstadual['pi'](valor);
412
+ },
413
+ pr: function (valor) {
414
+ return valor === generateInscricaoEstadual['pr'](valor);
415
+ },
416
+ rj: function (valor) {
417
+ return valor === generateInscricaoEstadual['rj'](valor);
418
+ },
419
+ rn: function (valor) {
420
+ return valor === generateInscricaoEstadual['rn'](valor);
421
+ },
422
+ ro: function (valor) {
423
+ return valor === generateInscricaoEstadual['ro'](valor);
424
+ },
425
+ rr: function (valor) {
426
+ return valor === generateInscricaoEstadual['rr'](valor);
427
+ },
428
+ rs: function (valor) {
429
+ return valor === generateInscricaoEstadual['rs'](valor);
430
+ },
431
+ sc: function (valor) {
432
+ return valor === generateInscricaoEstadual['sc'](valor);
433
+ },
434
+ se: function (valor) {
435
+ return valor === generateInscricaoEstadual['se'](valor);
436
+ },
437
+ sp: function (valor) {
438
+ return valor === generateInscricaoEstadual['sp'](valor);
439
+ },
440
+ to: function (valor) {
441
+ return valor === generateInscricaoEstadual['to'](valor);
442
+ },
443
+ };
444
+ export function validate_inscricaoestadual(ie, estado) {
445
+ if (eIndefinido(estado) || estado === null) {
446
+ estado = '';
447
+ }
448
+ estado = estado.toLowerCase();
449
+ if (estado !== '' && !(estado in funcoes)) {
450
+ return new Error('estado não é válido');
451
+ }
452
+ if (eIndefinido(ie)) {
453
+ return new Error('ie deve ser fornecida');
454
+ }
455
+ if (Array.isArray(ie)) {
456
+ let retorno = true;
457
+ ie.forEach(function (i) {
458
+ if (!validate_inscricaoestadual(i, estado)) {
459
+ retorno = false;
460
+ }
461
+ });
462
+ return retorno;
463
+ }
464
+ if (typeof ie !== 'string') {
465
+ return new Error('ie deve ser string ou array de strings');
466
+ }
467
+ if (!allNumbersAreSame(ie)) {
468
+ return new Error('ie com todos dígitos iguais');
469
+ }
470
+ if (ie.match(/^ISENTO$/i)) {
471
+ return true;
472
+ }
473
+ ie = ie.replace(/[\.|\-|\/|\s]/g, '');
474
+ if (estado === '') {
475
+ if (lookup(ie)) {
476
+ return true;
477
+ }
478
+ else {
479
+ return false;
480
+ }
481
+ }
482
+ if (/^\d+$/.test(ie) || estado === 'sp' || funcoes[estado]) {
483
+ return funcoes[estado](ie);
484
+ }
485
+ return false;
486
+ }
487
+ export const MASKSIE = {
488
+ ac: {
489
+ text: '01.004.823/001-12',
490
+ textMask: [/\d/, /\d/, '.', /\d/, /\d/, /\d/, '.', /\d/, /\d/, /\d/, '/', /\d/, /\d/, /\d/, '-', /\d/, /\d/]
491
+ },
492
+ al: {
493
+ text: '240000048',
494
+ textMask: [/\d/, /\d/, /\d/, /\d/, /\d/, /\d/, /\d/, /\d/, /\d/]
495
+ },
496
+ am: {
497
+ text: '04.145.871-0',
498
+ textMask: [/\d/, /\d/, '.', /\d/, /\d/, /\d/, '.', /\d/, /\d/, /\d/, '-', /\d/]
499
+ },
500
+ ap: {
501
+ text: '240000048',
502
+ textMask: [/\d/, /\d/, /\d/, /\d/, /\d/, /\d/, /\d/, /\d/, /\d/]
503
+ },
504
+ ba: {
505
+ text: '1234567-48',
506
+ textMask: [/\d/, /\d/, /\d/, /\d/, /\d/, /\d/, /\d/, '-', /\d/, /\d/],
507
+ textMaskFunction: function mask(userInput) {
508
+ const numberLength = getSizeNumbers(userInput);
509
+ if (!userInput || numberLength > 8) {
510
+ return [/\d/, /\d/, /\d/, /\d/, /\d/, /\d/, /\d/, '-', /\d/, /\d/];
511
+ }
512
+ else {
513
+ return [/\d/, /\d/, /\d/, /\d/, /\d/, /\d/, '-', /\d/, /\d/];
514
+ }
515
+ }
516
+ },
517
+ ce: {
518
+ text: '06.000001-5',
519
+ textMask: [/\d/, /\d/, '.', /\d/, /\d/, /\d/, /\d/, /\d/, /\d/, '-', /\d/]
520
+ },
521
+ df: {
522
+ text: '06 000001 123-55',
523
+ textMask: [/\d/, /\d/, ' ', /\d/, /\d/, /\d/, /\d/, /\d/, /\d/, ' ', /\d/, /\d/, /\d/, '-', /\d/, /\d/]
524
+ },
525
+ es: {
526
+ text: '082.560.67-6',
527
+ textMask: [/\d/, /\d/, /\d/, '.', /\d/, /\d/, /\d/, '.', /\d/, /\d/, '-', /\d/]
528
+ },
529
+ go: {
530
+ text: '06.000.001-5',
531
+ textMask: [/\d/, /\d/, '.', /\d/, /\d/, /\d/, '.', /\d/, /\d/, /\d/, '-', /\d/]
532
+ },
533
+ ma: {
534
+ text: '12.104.376-2',
535
+ textMask: [/\d/, /\d/, '.', /\d/, /\d/, /\d/, '.', /\d/, /\d/, /\d/, '-', /\d/, /\d/]
536
+ },
537
+ mg: {
538
+ text: '001.819.263/0048',
539
+ textMask: [/\d/, /\d/, /\d/, '.', /\d/, /\d/, /\d/, '.', /\d/, /\d/, /\d/, '/', /\d/, /\d/, /\d/, /\d/]
540
+ },
541
+ ms: {
542
+ text: '001819263',
543
+ textMask: [/\d/, /\d/, /\d/, /\d/, /\d/, /\d/, /\d/, /\d/, /\d/]
544
+ },
545
+ mt: {
546
+ text: '0018192630-1',
547
+ textMask: [/\d/, /\d/, /\d/, /\d/, /\d/, /\d/, /\d/, /\d/, /\d/, /\d/, '-', /\d/]
548
+ },
549
+ pa: {
550
+ text: '06-000001-5',
551
+ textMask: [/\d/, /\d/, '-', /\d/, /\d/, /\d/, /\d/, /\d/, /\d/, '-', /\d/]
552
+ },
553
+ pb: {
554
+ text: '06000001-5',
555
+ textMask: [/\d/, /\d/, /\d/, /\d/, /\d/, /\d/, /\d/, /\d/, '-', /\d/]
556
+ },
557
+ pe: {
558
+ text: '0192310-24',
559
+ textMask: [/\d/, /\d/, /\d/, /\d/, /\d/, /\d/, /\d/, '-', /\d/, /\d/]
560
+ },
561
+ pi: {
562
+ text: '19.301.656-7',
563
+ textMask: [/\d/, /\d/, '.', /\d/, /\d/, /\d/, '.', /\d/, /\d/, /\d/, '-', /\d/]
564
+ },
565
+ pr: {
566
+ text: '19301656-78',
567
+ textMask: [/\d/, /\d/, /\d/, /\d/, /\d/, /\d/, /\d/, /\d/, '-', /\d/, /\d/]
568
+ },
569
+ rj: {
570
+ text: '20.040.04-1',
571
+ textMask: [/\d/, /\d/, '.', /\d/, /\d/, /\d/, '.', /\d/, /\d/, '-', /\d/]
572
+ },
573
+ rn: {
574
+ text: '20.040.040-1',
575
+ textMask: [/\d/, /\d/, '.', /\d/, /\d/, /\d/, '.', /\d/, /\d/, /\d/, '-', /\d/],
576
+ textMaskFunction: function mask(userInput) {
577
+ const numberLength = getSizeNumbers(userInput);
578
+ if (!userInput || numberLength > 9) {
579
+ return [/\d/, /\d/, '.', /\d/, /\d/, /\d/, '.', /\d/, /\d/, /\d/, '-', /\d/, /\d/];
580
+ }
581
+ else {
582
+ return [/\d/, /\d/, '.', /\d/, /\d/, /\d/, '.', /\d/, /\d/, /\d/, '-', /\d/];
583
+ }
584
+ }
585
+ },
586
+ ro: {
587
+ text: '101.62521-3',
588
+ textMask: [/\d/, /\d/, /\d/, '/', /\d/, /\d/, /\d/, /\d/, /\d/, /\d/, /\d/]
589
+ },
590
+ rr: {
591
+ text: '24006628-1',
592
+ textMask: [/\d/, /\d/, /\d/, '/', /\d/, /\d/, /\d/, /\d/, /\d/, /\d/, /\d/]
593
+ },
594
+ rs: {
595
+ text: '024/0440013',
596
+ textMask: [/\d/, /\d/, /\d/, '/', /\d/, /\d/, /\d/, /\d/, /\d/, /\d/, /\d/]
597
+ },
598
+ sc: {
599
+ text: '271.234.563',
600
+ textMask: [/\d/, /\d/, /\d/, '.', /\d/, /\d/, /\d/, '.', /\d/, /\d/, /\d/]
601
+ },
602
+ se: {
603
+ text: '27123456-3',
604
+ textMask: [/\d/, /\d/, /\d/, '/', /\d/, /\d/, /\d/, /\d/, /\d/, /\d/, /\d/]
605
+ },
606
+ sp: {
607
+ text: '114.814.878.119',
608
+ textMask: [/\d/, /\d/, /\d/, '.', /\d/, /\d/, /\d/, '.', /\d/, /\d/, /\d/, '.', /\d/, /\d/, /\d/]
609
+ },
610
+ to: {
611
+ text: '11 81 4878119',
612
+ textMask: [/\d/, /\d/, ' ', /\d/, /\d/, ' ', /\d/, /\d/, /\d/, /\d/, /\d/, /\d/, /\d/]
613
+ },
614
+ };
615
+ function getSizeNumbers(userInput) {
616
+ const numbers = userInput.match(/\d/g);
617
+ let numberLength = 0;
618
+ if (numbers) {
619
+ numberLength = numbers.join('').length;
620
+ }
621
+ return numberLength;
622
+ }
623
+ function eIndefinido(objeto) {
624
+ return typeof objeto === typeof undefined;
625
+ }
626
+ function tamanhoNaoE(string, tamanho = 9) {
627
+ if (eIndefinido(tamanho)) {
628
+ tamanho = 9;
629
+ }
630
+ return string.length !== tamanho;
631
+ }
632
+ function tamanhoE(string, tamanho) {
633
+ return !tamanhoNaoE(string, tamanho);
634
+ }
635
+ function serie(de, ate) {
636
+ const resultado = [];
637
+ while (de <= ate) {
638
+ resultado.push(de++);
639
+ }
640
+ return resultado;
641
+ }
642
+ function primeiros(string, quantidade = 8) {
643
+ if (eIndefinido(quantidade)) {
644
+ quantidade = 8;
645
+ }
646
+ return string.substring(0, quantidade);
647
+ }
648
+ function substracaoPor11SeMaiorQue2CasoContrario0(valor) {
649
+ return valor < 2 ? 0 : 11 - valor;
650
+ }
651
+ function mod(valor, multiplicadores = serie(2, 9), divisor = 11) {
652
+ if (eIndefinido(divisor)) {
653
+ divisor = 11;
654
+ }
655
+ if (eIndefinido(multiplicadores)) {
656
+ multiplicadores = serie(2, 9);
657
+ }
658
+ let i = 0;
659
+ return valor.split('').reduceRight(function (anterior, atual) {
660
+ if (i > multiplicadores.length - 1) {
661
+ i = 0;
662
+ }
663
+ return (multiplicadores[i++] * parseInt(atual, 10)) + anterior;
664
+ }, 0) % divisor;
665
+ }
666
+ function calculoTrivialGenerate(valor, base = null, validarTamanho = false) {
667
+ if (!validarTamanho && tamanhoNaoE(valor)) {
668
+ return false;
669
+ }
670
+ if (eIndefinido(base)) {
671
+ base = primeiros(valor);
672
+ }
673
+ if (!base) {
674
+ base = primeiros(valor);
675
+ }
676
+ const digito = substracaoPor11SeMaiorQue2CasoContrario0(mod(base));
677
+ return base + digito;
678
+ }
679
+ function naoComecaCom(string, valor) {
680
+ return string.substring(0, valor.length) !== valor;
681
+ }
682
+ function entre(valor, limiteInferior, limiteSuperior) {
683
+ if (typeof valor === 'string') {
684
+ valor = parseInt(valor, 10);
685
+ }
686
+ return valor >= limiteInferior && valor <= limiteSuperior;
687
+ }
688
+ function lookup(ie) {
689
+ const resultado = [];
690
+ for (const estado in funcoes) {
691
+ if (funcoes[estado](ie)) {
692
+ resultado.push(estado);
693
+ }
694
+ }
695
+ if (tamanhoE(resultado, 0)) {
696
+ return false;
697
+ }
698
+ else {
699
+ return resultado;
700
+ }
701
+ }
702
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5zY3JpY2FvZXN0YWR1YWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tYXBhLWxpYnJhcnktdWkvc3JjL2xpYi9jb3JlL2pzLWJyYXNpbC9zcmMvaW5zY3JpY2FvZXN0YWR1YWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sU0FBUyxDQUFDO0FBRzVDOztHQUVHO0FBR0gsTUFBTSxDQUFDLE1BQU0seUJBQXlCLEdBQXdCO0lBQzVELEVBQUUsRUFBRSxVQUFVLEtBQVU7UUFDdEIsSUFBSSxXQUFXLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxFQUFFO1lBQzFCLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFFRCxJQUFJLFlBQVksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEVBQUU7WUFDN0IsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUVELE1BQU0sSUFBSSxHQUFHLFNBQVMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFbEMsTUFBTSxjQUFjLEdBQUcsd0NBQXdDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDM0UsTUFBTSxhQUFhLEdBQUcsd0NBQXdDLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUFDO1FBRTNGLE9BQU8sSUFBSSxHQUFHLGNBQWMsR0FBRyxhQUFhLENBQUM7SUFDL0MsQ0FBQztJQUVELEVBQUUsRUFBRSxVQUFVLEtBQVU7UUFDdEIsSUFBSSxXQUFXLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDdEIsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUVELE9BQU8sc0JBQXNCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVELEVBQUUsRUFBRSxVQUFVLEtBQVU7UUFDdEIsSUFBSSxXQUFXLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDdEIsT0FBTyxLQUFL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RUFBRSxFQUFFLFVBQVUsS0FBVTtRQUN0QixPQUFPLEtBQUssS0FBSyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQsRUFBRSxFQUFFLFVBQVUsS0FBVTtRQUN0QixPQUFPLEtBQUssS0FBSyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQsRUFBRSxFQUFFLFVBQVUsS0FBVTtRQUN0QixPQUFPLEtBQUssS0FBSyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQsRUFBRSxFQUFFLFVBQVUsS0FBVTtRQUN0QixPQUFPLEtBQUssS0FBSyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQsRUFBRSxFQUFFLFVBQVUsS0FBVTtRQUN0QixPQUFPLEtBQUssS0FBSyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBQ0QsRUFBRSxFQUFFLFVBQVUsS0FBVTtRQUN0QixPQUFPLEtBQUssS0FBSyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBQ0QsRUFBRSxFQUFFLFVBQVUsS0FBVTtRQUN0QixPQUFPLEtBQUssS0FBSyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQsRUFBRSxFQUFFLFVBQVUsS0FBVTtRQUN0QixPQUFPLEtBQUssS0FBSyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQsRUFBRSxFQUFFLFVBQVUsS0FBVTtRQUN0QixPQUFPLEtBQUssS0FBSyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBQ0QsRUFBRSxFQUFFLFVBQVUsS0FBVTtRQUN0QixPQUFPLEtBQUssS0FBSyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBQ0QsRUFBRSxFQUFFLFVBQVUsS0FBVTtRQUN0QixPQUFPLEtBQUssS0FBSyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQsRUFBRSxFQUFFLFVBQVUsS0FBVTtRQUN0QixPQUFPLEtBQUssS0FBSyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQsRUFBRSxFQUFFLFVBQVUsS0FBVTtRQUN0QixPQUFPLEtBQUssS0FBSyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQsRUFBRSxFQUFFLFVBQVUsS0FBVTtRQUN0QixPQUFPLEtBQUssS0FBSyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQsRUFBRSxFQUFFLFVBQVUsS0FBVTtRQUN0QixPQUFPLEtBQUssS0FBSyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBQ0QsRUFBRSxFQUFFLFVBQVUsS0FBVTtRQUN0QixPQUFPLEtBQUssS0FBSyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQsRUFBRSxFQUFFLFVBQVUsS0FBVTtRQUN0QixPQUFPLEtBQUssS0FBSyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBQ0QsRUFBRSxFQUFFLFVBQVUsS0FBVTtRQUN0QixPQUFPLEtBQUssS0FBSyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBQ0QsRUFBRSxFQUFFLFVBQVUsS0FB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RUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDO0tBQ2xGO0lBQ0QsRUFBRSxFQUFFO1FBQ0YsSUFBSSxFQUFFLGFBQWE7UUFDbkIsUUFBUSxFQUFFLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQztLQUMzRTtJQUNELEVBQUUsRUFBRTtRQUNGLElBQUksRUFBRSxZQUFZO1FBQ2xCLFFBQVEsRUFBRSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQztLQUN0RTtJQUNELEVBQUUsRUFBRTtRQUNGLElBQUksRUFBRSxZQUFZO1FBQ2xCLFFBQVEsRUFBRSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQztLQUN0RTtJQUNELEVBQUUsRUFBRTtRQUNGLElBQUksRUFBRSxjQUFjO1FBQ3BCLFFBQVEsRUFBRSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDO0tBQ2hGO0lBQ0QsRUFBRSxFQUFFO1FBQ0YsSUFBSSxFQUFFLGFBQWE7UUFDbkIsUUFBUSxFQUFFLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQztLQUM1RTtJQUNELEVBQUUsRUFBRTtRQUNGLElBQUksRUFBRSxhQUFhO1FBQ25CLFFBQVEsRUFBRSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUM7S0FDMUU7SUFDRCxFQUFFLEVBQUU7UUFDRixJQUFJLEVBQUUsY0FBYztRQUNwQixRQUFRLEVBQUUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQztRQUMvRSxnQkFBZ0IsRUFBRSxTQUFTLElBQUksQ0FBQyxTQUFjO1lBQzVDLE1BQU0sWUFBWSxHQUFHLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUUvQyxJQUFJLENBQUMsU0FBUyxJQUFJLFlBQVksR0FBRyxDQUFDLEVBQUU7Z0JBQ2xDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQzthQUNwRjtpQkFBTTtnQkFDTCxPQUFPLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQzthQUM5RTtRQUNILENBQUM7S0FDRjtJQUNELEVBQUUsRUFBRTtRQUNGLElBQUksRUFBRSxhQUFhO1FBQ25CLFFBQVEsRUFBRSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUM7S0FDNUU7SUFDRCxFQUFFLEVBQUU7UUFDRixJQUFJLEVBQUUsWUFBWTtRQUNsQixRQUFRLEVBQUUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDO0tBQzVFO0lBQ0QsRUFBRSxFQUFFO1FBQ0YsSUFBSSxFQUFFLGFBQWE7UUFDbkIsUUFBUSxFQUFFLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQztLQUM1RTtJQUNELEVBQUUsRUFBRTtRQUNGLElBQUksRUFBRSxhQUFhO1FBQ25CLFFBQVEsRUFBRSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUM7S0FDM0U7SUFDRCxFQUFFLEVBQUU7UUFDRixJQUFJLEVBQUUsWUFBWTtRQUNsQixRQUFRLEVBQUUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDO0tBQzVFO0lBQ0QsRUFBRSxFQUFFO1FBQ0YsSUFBSSxFQUFFLGlCQUFpQjtRQUN2QixRQUFRLEVBQUUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQztLQUNsRztJQUNELEVBQUUsRUFBRTtRQUNGLElBQUksRUFBRSxlQUFlO1FBQ3JCLFFBQVEsRUFBRSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQztLQUN2RjtDQUNGLENBQUM7QUFFRixTQUFTLGNBQWMsQ0FBQyxTQUFpQjtJQUN2QyxNQUFNLE9BQU8sR0FBUSxTQUFTLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzVDLElBQUksWUFBWSxHQUFHLENBQUMsQ0FBQztJQUNyQixJQUFJLE9BQU8sRUFBRTtRQUNYLFlBQVksR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQztLQUN4QztJQUNELE9BQU8sWUFBWSxDQUFBO0FBQ3JCLENBQUM7QUFFRCxTQUFTLFdBQVcsQ0FBQyxNQUFXO0lBQzlCLE9BQU8sT0FBTyxNQUFNLEtBQUssT0FBTyxTQUFTLENBQUM7QUFDNUMsQ0FBQztBQUVELFNBQVMsV0FBVyxDQUFDLE1BQTJCLEVBQUUsT0FBTyxHQUFHLENBQUM7SUFDM0QsSUFBSSxXQUFXLENBQUMsT0FBTyxDQUFDLEVBQUU7UUFDeEIsT0FBTyxHQUFHLENBQUMsQ0FBQztLQUNiO0lBRUQsT0FBTyxNQUFNLENBQUMsTUFBTSxLQUFLLE9BQU8sQ0FBQztBQUNuQyxDQUFDO0FBRUQsU0FBUyxRQUFRLENBQUMsTUFBYSxFQUFFLE9BQWU7SUFDOUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDdkMsQ0FBQztBQUVELFNBQVMsS0FBSyxDQUFDLEVBQVUsRUFBRSxHQUFXO0lBQ3BDLE1BQU0sU0FBUyxHQUFHLEVBQUUsQ0FBQztJQUVyQixPQUFPLEVBQUUsSUFBSSxHQUFHLEVBQUU7UUFDaEIsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0tBQ3RCO0lBRUQsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQztBQUVELFNBQVMsU0FBUyxDQUFDLE1BQVcsRUFBRSxVQUFVLEdBQUcsQ0FBQztJQUM1QyxJQUFJLFdBQVcsQ0FBQyxVQUFVLENBQUMsRUFBRTtRQUMzQixVQUFVLEdBQUcsQ0FBQyxDQUFDO0tBQ2hCO0lBRUQsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQztBQUN6QyxDQUFDO0FBRUQsU0FBUyx3Q0FBd0MsQ0FBQyxLQUFhO0lBQzdELE9BQU8sS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsS0FBSyxDQUFDO0FBQ3BDLENBQUM7QUFFRCxTQUFTLEdBQUcsQ0FBQyxLQUFhLEVBQUUsZUFBZSxHQUFHLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsT0FBTyxHQUFHLEVBQUU7SUFDckUsSUFBSSxXQUFXLENBQUMsT0FBTyxDQUFDLEVBQUU7UUFDeEIsT0FBTyxHQUFHLEVBQUUsQ0FBQztLQUNkO0lBRUQsSUFBSSxXQUFXLENBQUMsZUFBZSxDQUFDLEVBQUU7UUFDaEMsZUFBZSxHQUFHLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7S0FDL0I7SUFFRCxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFVixPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsV0FBVyxDQUFDLFVBQVUsUUFBZ0IsRUFBRSxLQUFhO1FBQzFFLElBQUksQ0FBQyxHQUFHLGVBQWUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ2xDLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDUDtRQUVELE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDO0lBQ2pFLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUM7QUFDbEIsQ0FBQztBQUVELFNBQVMsc0JBQXNCLENBQUMsS0FBVSxFQUFFLE9BQVksSUFBSSxFQUFFLGNBQWMsR0FBRyxLQUFLO0lBQ2xGLElBQUksQ0FBQyxjQUFjLElBQUksV0FBVyxDQUFDLEtBQUssQ0FBQyxFQUFFO1FBQ3pDLE9BQU8sS0FBSyxDQUFDO0tBQ2Q7SUFDRCxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUNyQixJQUFJLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO0tBQ3pCO0lBQ0QsSUFBSSxDQUFDLElBQUksRUFBRTtRQUNULElBQUksR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7S0FDekI7SUFFRCxNQUFNLE1BQU0sR0FBRyx3Q0FBd0MsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUVuRSxPQUFPLElBQUksR0FBRyxNQUFNLENBQUM7QUFDdkIsQ0FBQztBQUVELFNBQVMsWUFBWSxDQUFDLE1BQVcsRUFBRSxLQUFhO0lBQzlDLE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEtBQUssQ0FBQztBQUNyRCxDQUFDO0FBRUQsU0FBUyxLQUFLLENBQUMsS0FBc0IsRUFBRSxjQUFzQixFQUFFLGNBQXNCO0lBQ25GLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFO1FBQzdCLEtBQUssR0FBRyxRQUFRLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0tBQzdCO0lBRUQsT0FBTyxLQUFLLElBQUksY0FBYyxJQUFJLEtBQUssSUFBSSxjQUFjLENBQUM7QUFDNUQsQ0FBQztBQUdELFNBQVMsTUFBTSxDQUFDLEVBQU87SUFDckIsTUFBTSxTQUFTLEdBQUcsRUFBRSxDQUFDO0lBRXJCLEtBQUssTUFBTSxNQUFNLElBQUksT0FBTyxFQUFFO1FBQzVCLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO1lBQ3ZCLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDeEI7S0FDRjtJQUVELElBQUksUUFBUSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsRUFBRTtRQUMxQixPQUFPLEtBQUssQ0FBQztLQUNkO1NBQU07UUFDTCxPQUFPLFNBQVMsQ0FBQztLQUNsQjtBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhbGxOdW1iZXJzQXJlU2FtZSB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgQmlnT2JqZWN0LCBNYXNrVHlwZSB9IGZyb20gJy4vaW50ZXJmYWNlcyc7XG5cbi8qKlxuICogQkFTRUQgT04gaHR0cHM6Ly9naXRodWIuY29tL2dhbW1hc29mdC9pZS9cbiAqL1xuXG5cbmV4cG9ydCBjb25zdCBnZW5lcmF0ZUluc2NyaWNhb0VzdGFkdWFsOiBCaWdPYmplY3Q8RnVuY3Rpb24+ID0ge1xuICBhYzogZnVuY3Rpb24gKHZhbG9yOiBhbnkpIHtcbiAgICBpZiAodGFtYW5ob05hb0UodmFsb3IsIDEzKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChuYW9Db21lY2FDb20odmFsb3IsICcwMScpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgYmFzZSA9IHByaW1laXJvcyh2YWxvciwgMTEpO1xuXG4gICAgY29uc3QgcHJpbWVpcm9EaWdpdG8gPSBzdWJzdHJhY2FvUG9yMTFTZU1haW9yUXVlMkNhc29Db250cmFyaW8wKG1vZChiYXNlKSk7XG4gICAgY29uc3Qgc2VndW5kb0RpZ2l0byA9IHN1YnN0cmFjYW9Qb3IxMVNlTWFpb3JRdWUyQ2Fzb0NvbnRyYXJpbzAobW9kKGJhc2UgKyBwcmltZWlyb0RpZ2l0bykpO1xuXG4gICAgcmV0dXJuIGJhc2UgKyBwcmltZWlyb0RpZ2l0byArIHNlZ3VuZG9EaWdpdG87XG4gIH0sXG5cbiAgYW06IGZ1bmN0aW9uICh2YWxvcjogYW55KSB7XG4gICAgaWYgKHRhbWFuaG9OYW9FKHZhbG9yKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiBjYWxjdWxvVHJpdmlhbEdlbmVyYXRlKHZhbG9yKTtcbiAgfSxcblxuICBhbDogZnVuY3Rpb24gKHZhbG9yOiBhbnkpIHtcbiAgICBpZiAodGFtYW5ob05hb0UodmFsb3IpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKG5hb0NvbWVjYUNvbSh2YWxvciwgJzI0JykpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBGT1JNQcOHw4NPOiAyNFhOTk5OTkQsICBzZW5kbzpcbiAgICAvLyAyNCDigJMgQ8OzZGlnbyBkbyBFc3RhZG9cbiAgICAvLyBYIOKAkyBUaXBvIGRlIGVtcHJlc2EgKDAtTm9ybWFsLCAzLVByb2R1dG9yIFJ1cmFsLCA1LVN1YnN0aXR1dGEsIDctIE1pY3JvLUVtcHJlc2EgQW1idWxhbnRlLCA4LU1pY3JvLUVtcHJlc2EpXG4gICAgLy8gTk5OTk4g4oCTIE7Dum1lcm8gZGEgZW1wcmVzYVxuICAgIC8vIEQg4oCTIETDrWdpdG8gZGUgdmVyaWZpY2HDp8OjbyBjYWxjdWxhZG8gcGVsbyBNw7NkdWxvMTEsIHDDqnNvcyAyIMOgIDkgZGEgZGlyZWl0YSBwYXJhIGEgZXNxdWVyZGEsIGV4Y2V0byBEXG4gICAgLy8gRXhlbXBsbzogTsO6bWVybyAyIDQgMCAwIDAgMCAwIDQgRFxuICAgIC8vICAgICAgICAgICAgICAgICAyIDQgWCBOIE4gTiBOIE4gRFxuICAgIC8vIEZvbnRlOiBodHRwOi8vd3d3LnNpbnRlZ3JhLmdvdi5ici9DYWRfRXN0YWRvcy9jYWRfQUwuaHRtbFxuXG4gICAgY29uc3QgYmFzZTogYW55ID0gcHJpbWVpcm9zKHZhbG9yKTtcblxuICAgIC8vIFBlc29zIDkgOCA3IDYgNSA0IDMgMlxuICAgIC8vIFNPTUEgPSAoMiAqIDQpICsgKDMgKiAwKSArICg0ICogMCkgKyAoNSAqIDApICsgKDYgKiAwKSArICg3ICogMCkgKyAoOCAqIDQpICsgKDkgKiAyKSA9IDU4XG4gICAgY29uc3Qgc29tYSA9IGJhc2Uuc3BsaXQoJycpLnJlZHVjZSgoYWNjOiBudW1iZXIsIHY6IHN0cmluZywgaTogbnVtYmVyKSA9PiB7XG4gICAgICByZXR1cm4gYWNjICsgKDkgLSBpKSAqIE51bWJlcih2KVxuICAgIH0sIDApXG4gICAgLy8gUFJPRFVUTyA9IDU4ICogMTAgPSA1ODBcbiAgICBjb25zdCBwcm9kdXRvID0gc29tYSAqIDEwXG4gICAgLy8gUkVTVE8gPSA1ODAg4oCTIElOVEVJUk8oNTgwIC8gMTEpKjExID0gNTgwIOKAkyAoNTIqMTEpID0gOFxuICAgIGNvbnN0IHJlc3RvID0gcHJvZHV0byAtIE1hdGguZmxvb3IocHJvZHV0byAvIDExKSAqIDExXG4gICAgLy8gRMONR0lUTyA9IDggLSBDYXNvIFJFU1RPIHNlamEgaWd1YWwgYSAxMCBvIETDjUdJVE8gc2Vyw6EgMCAoemVybylcbiAgICBjb25zdCBkaWdpdG8gPSByZXN0byA9PT0gMTAgPyAwIDogcmVzdG9cbiAgICByZXR1cm4gYmFzZSArIGRpZ2l0bztcbiAgfSxcblxuICBhcDogZnVuY3Rpb24gKHZhbG9yOiBhbnkpIHtcbiAgICBpZiAodGFtYW5ob05hb0UodmFsb3IpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKG5hb0NvbWVjYUNvbSh2YWxvciwgJzAzJykpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCBiYXNlOiBhbnkgPSBwcmltZWlyb3ModmFsb3IpO1xuXG4gICAgbGV0IHA6IG51bWJlciwgZDogbnVtYmVyO1xuXG4gICAgaWYgKGVudHJlKGJhc2UsIDMwMDAwMDEsIDMwMTcwMDApKSB7XG4gICAgICBwID0gNTtcbiAgICAgIGQgPSAwO1xuICAgIH0gZWxzZSBpZiAoZW50cmUoYmFzZSwgMzAxNzAwMSwgMzAxOTAyMikpIHtcbiAgICAgIHAgPSA5O1xuICAgICAgZCA9IDE7XG4gICAgfSBlbHNlIHtcbiAgICAgIHAgPSAwO1xuICAgICAgZCA9IDA7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdG8gPSBtb2QocCArIGJhc2UsIFsyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxXSk7XG5cbiAgICBsZXQgZGlnaXRvOiBudW1iZXI7XG4gICAgaWYgKHJlc3RvID09PSAxKSB7XG4gICAgICBkaWdpdG8gPSAwO1xuICAgIH0gZWxzZSBpZiAocmVzdG8gPT09IDApIHtcbiAgICAgIGRpZ2l0byA9IGQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRpZ2l0byA9IDExIC0gcmVzdG87XG4gICAgfVxuXG4gICAgcmV0dXJuIGJhc2UgKyBkaWdpdG87XG4gIH0sXG5cbiAgYmE6IGZ1bmN0aW9uICh2YWxvcjogYW55KSB7XG4gICAgaWYgKHRhbWFuaG9OYW9FKHZhbG9yLCA4KSAmJiB0YW1hbmhvTmFvRSh2YWxvcikpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCBiYXNlOiBhbnkgPSBwcmltZWlyb3ModmFsb3IsIHZhbG9yLmxlbmd0aCAtIDIpO1xuICAgIGxldCBwcmltZWlyb0RpZ2l0bzogbnVtYmVyLCBzZWd1bmRvRGlnaXRvOiBudW1iZXI7XG5cbiAgICBjb25zdCBzZWd1bmRvTXVsdGlwbGljYWRvciA9IHNlcmllKDIsIDcpO1xuICAgIGNvbnN0IHByaW1laXJvTXVsdGlwbGljYWRvciA9IHNlcmllKDIsIDgpO1xuXG4gICAgbGV0IHByaW1laXJvUmVzdG86IG51bWJlciwgc2VndW5kb1Jlc3RvOiBudW1iZXI7XG4gICAgbGV0IGRpZ2l0b0NvbXBhcmFjYW8gPSB2YWxvci5zdWJzdHJpbmcoMCwgMSk7XG5cbiAgICBpZiAodGFtYW5ob0UodmFsb3IsIDkpKSB7XG4gICAgICBzZWd1bmRvTXVsdGlwbGljYWRvci5wdXNoKDgpO1xuICAgICAgcHJpbWVpcm9NdWx0aXBsaWNhZG9yLnB1c2goOSk7XG4gICAgICBkaWdpdG9Db21wYXJhY2FvID0gdmFsb3Iuc3Vic3RyaW5nKDEsIDIpO1xuICAgIH1cblxuICAgIGlmICgnMDEyMzQ1OCcuc3BsaXQoJycpLmluZGV4T2YoZGlnaXRvQ29tcGFyYWNhbykgIT09IC0xKSB7XG4gICAgICBzZWd1bmRvUmVzdG8gPSBtb2QoYmFzZSwgc2VndW5kb011bHRpcGxpY2Fkb3IsIDEwKTtcbiAgICAgIHNlZ3VuZG9EaWdpdG8gPSBzZWd1bmRvUmVzdG8gPT09IDAgPyAwIDogMTAgLSBzZWd1bmRvUmVzdG87XG5cbiAgICAgIHByaW1laXJvUmVzdG8gPSBtb2QoYmFzZSArIHNlZ3VuZG9EaWdpdG8sIHByaW1laXJvTXVsdGlwbGljYWRvciwgMTApO1xuICAgICAgcHJpbWVpcm9EaWdpdG8gPSBwcmltZWlyb1Jlc3RvID09PSAwID8gMCA6IDEwIC0gcHJpbWVpcm9SZXN0bztcbiAgICB9IGVsc2Uge1xuICAgICAgc2VndW5kb1Jlc3RvID0gbW9kKGJhc2UsIHNlZ3VuZG9NdWx0aXBsaWNhZG9yKTtcbiAgICAgIHNlZ3VuZG9EaWdpdG8gPSBzdWJzdHJhY2FvUG9yMTFTZU1haW9yUXVlMkNhc29Db250cmFyaW8wKHNlZ3VuZG9SZXN0byk7XG5cbiAgICAgIHByaW1laXJvUmVzdG8gPSBtb2QoYmFzZSArIHNlZ3VuZG9EaWdpdG8sIHByaW1laXJvTXVsdGlwbGljYWRvcik7XG4gICAgICBwcmltZWlyb0RpZ2l0byA9IHN1YnN0cmFjYW9Qb3IxMVNlTWFpb3JRdWUyQ2Fzb0NvbnRyYXJpbzAocHJpbWVpcm9SZXN0byk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJhc2UgKyBwcmltZWlyb0RpZ2l0byArIHNlZ3VuZG9EaWdpdG87XG4gIH0sXG5cbiAgY2U6IGZ1bmN0aW9uICh2YWxvcjogYW55KSB7XG4gICAgaWYgKHRhbWFuaG9OYW9FKHZhbG9yKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gY2FsY3Vsb1RyaXZpYWxHZW5lcmF0ZSh2YWxvcik7XG4gIH0sXG5cbiAgZGY6IGZ1bmN0aW9uICh2YWxvcjogYW55KSB7XG4gICAgaWYgKHRhbWFuaG9OYW9FKHZhbG9yLCAxMykpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAobmFvQ29tZWNhQ29tKHZhbG9yLCAnMDcnKSAmJiBuYW9Db21lY2FDb20odmFsb3IsICcwOCcpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IGJhc2U6IGFueSA9IHByaW1laXJvcyh2YWxvciwgMTEpO1xuXG4gICAgY29uc3QgcHJpbWVpcm8gPSBzdWJzdHJhY2FvUG9yMTFTZU1haW9yUXVlMkNhc29Db250cmFyaW8wKG1vZChiYXNlKSk7XG4gICAgY29uc3Qgc2VndW5kbyA9IHN1YnN0cmFjYW9Qb3IxMVNlTWFpb3JRdWUyQ2Fzb0NvbnRyYXJpbzAobW9kKGJhc2UgKyBwcmltZWlybykpO1xuICAgIHJldHVybiBiYXNlICsgcHJpbWVpcm8gKyBzZWd1bmRvO1xuICB9LFxuXG4gIGVzOiBmdW5jdGlvbiAodmFsb3I6IGFueSkge1xuICAgIHJldHVybiBjYWxjdWxvVHJpdmlhbEdlbmVyYXRlKHZhbG9yKTtcbiAgfSxcbiAgZ286IGZ1bmN0aW9uICh2YWxvcjogYW55KSB7XG4gICAgaWYgKHRhbWFuaG9OYW9FKHZhbG9yKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIFZlcmlmaWNhIG9zIGRpZ2l0b3MgaW5pY2lhaXMgZG8gZXN0YWRvXG4gICAgLy8gRm9udGU6IGh0dHBzOi8vYXBwYXNwLmVjb25vbWlhLmdvLmdvdi5ici9MZWdpc2xhY2FvL2FycXVpdm9zL1NlY3JldGFyaW8vSU4vSU5fMTUzNV8yMDIyLmh0bVxuXG4gICAgaWYgKFsnMTAnLCAnMTEnLCAnMTUnLCAnMjAnXS5pbmRleE9mKHZhbG9yLnN1YnN0cmluZygwLCAyKSkgPT09IC0xKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgYmFzZTogYW55ID0gcHJpbWVpcm9zKHZhbG9yKTtcblxuICAgIGlmIChiYXNlID09PSAnMTEwOTQ0MDInKSB7XG4gICAgICByZXR1cm4gdmFsb3Iuc3Vic3RyKDgpID09PSAnMScgfHwgdmFsb3Iuc3Vic3RyKDgpID09PSAnMCc7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdG8gPSBtb2QoYmFzZSk7XG4gICAgbGV0IGRpZ2l0bzogbnVtYmVyO1xuXG4gICAgaWYgKHJlc3RvID09PSAwKSB7XG4gICAgICBkaWdpdG8gPSAwO1xuICAgIH0gZWxzZSBpZiAocmVzdG8gPT09IDEpIHtcbiAgICAgIGlmIChlbnRyZShiYXNlLCAxMDEwMzEwNSwgMTAxMTk5OTcpKSB7XG4gICAgICAgIGRpZ2l0byA9IDE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkaWdpdG8gPSAwO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBkaWdpdG8gPSAxMSAtIHJlc3RvO1xuICAgIH1cblxuICAgIHJldHVybiBiYXNlICsgZGlnaXRvO1xuICB9LFxuICBtYTogZnVuY3Rpb24gKHZhbG9yOiBhbnkpIHtcbiAgICBpZiAodGFtYW5ob05hb0UodmFsb3IpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKG5hb0NvbWVjYUNvbSh2YWxvciwgJzEyJykpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2FsY3Vsb1RyaXZpYWxHZW5lcmF0ZSh2YWxvcik7XG4gIH0sXG5cbiAgbWc6IGZ1bmN0aW9uICh2YWxvcjogYW55KSB7XG4gICAgaWYgKHRhbWFuaG9OYW9FKHZhbG9yLCAxMykpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCBiYXNlID0gcHJpbWVpcm9zKHZhbG9yLCAxMSk7XG5cbiAgICBjb25zdCBiYXNlQ29tWmVybyA9IHZhbG9yLnN1YnN0cmluZygwLCAzKSArICcwJyArIHZhbG9yLnN1YnN0cmluZygzLCAxMSk7XG5cbiAgICBsZXQgaSA9IDA7XG4gICAgY29uc3QgcHJvZHV0b3Jpb0xpdGVyYWwgPSBiYXNlQ29tWmVyby5zcGxpdCgnJykucmVkdWNlUmlnaHQoZnVuY3Rpb24gKGFudGVyaW9yLCBhdHVhbCkge1xuICAgICAgaWYgKGkgPiBbMiwgMV0ubGVuZ3RoIC0gMSkge1xuICAgICAgICBpID0gMDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIChbMiwgMV1baSsrXSAqIHBhcnNlSW50KGF0dWFsLCAxMCkpLnRvU3RyaW5nKCkgKyBhbnRlcmlvci50b1N0cmluZygpO1xuICAgIH0sICcnKS5zcGxpdCgnJykucmVkdWNlKGZ1bmN0aW9uIChhbnRlcmlvciwgYXR1YWwpIHtcbiAgICAgIHJldHVybiBhbnRlcmlvciArIHBhcnNlSW50KGF0dWFsLCAxMCk7XG4gICAgfSwgMCk7XG5cbiAgICBsZXQgcHJpbWVpcm86IGFueSA9ICgoTWF0aC5mbG9vcihwcm9kdXRvcmlvTGl0ZXJhbCAvIDEwKSArIDEpICogMTApIC0gcHJvZHV0b3Jpb0xpdGVyYWw7XG4gICAgaWYgKHByaW1laXJvID09PSAxMCkge1xuICAgICAgcHJpbWVpcm8gPSAwO1xuICAgIH1cblxuICAgIGNvbnN0IHNlZ3VuZG8gPSBzdWJzdHJhY2FvUG9yMTFTZU1haW9yUXVlMkNhc29Db250cmFyaW8wKG1vZChiYXNlICsgcHJpbWVpcm8sIHNlcmllKDIsIDExKSkpO1xuXG4gICAgcmV0dXJuIGJhc2UgKyBwcmltZWlybyArIHNlZ3VuZG87XG4gIH0sXG5cbiAgbXM6IGZ1bmN0aW9uICh2YWxvcjogYW55KSB7XG4gICAgaWYgKG5hb0NvbWVjYUNvbSh2YWxvciwgJzI4JykpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2FsY3Vsb1RyaXZpYWxHZW5lcmF0ZSh2YWxvcik7XG4gIH0sXG4gIG10OiBmdW5jdGlvbiAodmFsb3I6IGFueSkge1xuICAgIGlmICh0YW1hbmhvTmFvRSh2YWxvciwgMTEpICYmIHRhbWFuaG9OYW9FKHZhbG9yKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IGJhc2UgPSB0YW1hbmhvRSh2YWxvciwgMTEpID8gdmFsb3Iuc3Vic3RyaW5nKDAsIDEwKSA6IHByaW1laXJvcyh2YWxvcik7XG4gICAgcmV0dXJuIGNhbGN1bG9Ucml2aWFsR2VuZXJhdGUodmFsb3IsIGJhc2UsIHRydWUpO1xuICB9LFxuICBwYTogZnVuY3Rpb24gKHZhbG9yOiBhbnkpIHtcbiAgICBpZiAodGFtYW5ob05hb0UodmFsb3IpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKG5hb0NvbWVjYUNvbSh2YWxvciwgJzE1JykgJiYgbmFvQ29tZWNhQ29tKHZhbG9yLCAnNzUnKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiBjYWxjdWxvVHJpdmlhbEdlbmVyYXRlKHZhbG9yKTtcbiAgfSxcblxuICBwYjogZnVuY3Rpb24gKHZhbG9yOiBhbnkpIHtcbiAgICBpZiAodGFtYW5ob05hb0UodmFsb3IpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNhbGN1bG9Ucml2aWFsR2VuZXJhdGUodmFsb3IpO1xuICB9LFxuXG4gIHBlOiBmdW5jdGlvbiAodmFsb3I6IGFueSkge1xuICAgIGNvbnN0IGJhc2U6IGFueSA9IHZhbG9yLnN1YnN0cmluZygwLCB2YWxvci5sZW5ndGggLSAyKTtcblxuICAgIGNvbnN0IHJlc3RvUHJpbWVpcm8gPSBtb2QoYmFzZSk7XG4gICAgY29uc3QgcHJpbWVpcm8gPSAxMSAtIHJlc3RvUHJpbWVpcm8gPj0gMTAgPyAwIDogMTEgLSByZXN0b1ByaW1laXJvO1xuXG4gICAgY29uc3QgcmVzdG9TZWd1bmRvID0gbW9kKGJhc2UgKyBwcmltZWlybyk7XG4gICAgY29uc3Qgc2VndW5kbyA9IDExIC0gcmVzdG9TZWd1bmRvID49IDEwID8gMCA6IDExIC0gcmVzdG9TZWd1bmRvO1xuXG4gICAgcmV0dXJuIGJhc2UgKyBwcmltZWlybyArIHNlZ3VuZG87XG4gIH0sXG5cbiAgcGk6IGZ1bmN0aW9uICh2YWxvcjogYW55KSB7XG4gICAgcmV0dXJuIGNhbGN1bG9Ucml2aWFsR2VuZXJhdGUodmFsb3IpO1xuICB9LFxuXG4gIHByOiBmdW5jdGlvbiAodmFsb3I6IGFueSkge1xuICAgIGlmICh0YW1hbmhvTmFvRSh2YWxvciwgMTApKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgYmFzZSA9IHByaW1laXJvcyh2YWxvcik7XG5cbiAgICBjb25zdCByZXN0b1ByaW1laXJvID0gbW9kKGJhc2UsIHNlcmllKDIsIDcpKTtcbiAgICBjb25zdCBwcmltZWlybyA9IDExIC0gcmVzdG9QcmltZWlybyA+PSAxMCA/IDAgOiAxMSAtIHJlc3RvUHJpbWVpcm87XG5cbiAgICBjb25zdCByZXN0b1NlZ3VuZG8gPSBtb2QoYmFzZSArIHByaW1laXJvLCBzZXJpZSgyLCA3KSk7XG4gICAgY29uc3Qgc2VndW5kbyA9IDExIC0gcmVzdG9TZWd1bmRvID49IDEwID8gMCA6IDExIC0gcmVzdG9TZWd1bmRvO1xuXG4gICAgcmV0dXJuIGJhc2UgKyBwcmltZWlybyArIHNlZ3VuZG87XG4gIH0sXG4gIHJqOiBmdW5jdGlvbiAodmFsb3I6IGFueSkge1xuICAgIGlmICh0YW1hbmhvTmFvRSh2YWxvciwgOCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCBiYXNlID0gcHJpbWVpcm9zKHZhbG9yLCA3KTtcbiAgICBjb25zdCBkaWdpdG8gPSBzdWJzdHJhY2FvUG9yMTFTZU1haW9yUXVlMkNhc29Db250cmFyaW8wKG1vZChiYXNlLCBzZXJpZSgyLCA3KSkpO1xuXG4gICAgcmV0dXJuIGJhc2UgKyBkaWdpdG87XG4gIH0sXG5cbiAgcm46IGZ1bmN0aW9uICh2YWxvcjogYW55KSB7XG4gICAgaWYgKHRhbWFuaG9OYW9FKHZhbG9yKSAmJiB0YW1hbmhvTmFvRSh2YWxvciwgMTApKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKG5hb0NvbWVjYUNvbSh2YWxvciwgJzIwJykpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCBiYXNlID0gdmFsb3Iuc3Vic3RyaW5nKDAsIHZhbG9yLmxlbmd0aCAtIDEpO1xuXG4gICAgY29uc3QgbXVsdGlwbGljYWRvcmVzID0gc2VyaWUoMiwgOSk7XG4gICAgaWYgKHRhbWFuaG9FKHZhbG9yLCAxMCkpIHtcbiAgICAgIG11bHRpcGxpY2Fkb3Jlcy5wdXNoKDEwKTtcbiAgICB9XG5cbiAgICBjb25zdCByZXN0byA9IChtb2QoYmFzZSwgbXVsdGlwbGljYWRvcmVzKSAqIDEwKSAlIDExO1xuICAgIGNvbnN0IGRpZ2l0byA9IHJlc3RvID09PSAxMCA/IDAgOiByZXN0bztcblxuICAgIHJldHVybiBiYXNlICsgZGlnaXRvO1xuICB9LFxuICBybzogZnVuY3Rpb24gKHZhbG9yOiBhbnkpIHtcbiAgICBsZXQgYmFzZTogYW55LCBkaWdpdG86IG51bWJlciwgcmVzdWx0YWRvTW9kOiBudW1iZXI7XG5cbiAgICBpZiAodGFtYW5ob0UodmFsb3IsIDkpKSB7XG4gICAgICBiYXNlID0gdmFsb3Iuc3Vic3RyaW5nKDMsIDgpO1xuICAgICAgZGlnaXRvID0gc3Vic3RyYWNhb1BvcjExU2VNYWlvclF1ZTJDYXNvQ29udHJhcmlvMChtb2QoYmFzZSkpO1xuXG4gICAgICByZXR1cm4gdmFsb3IgPT09IHZhbG9yLnN1YnN0cmluZygwLCAzKSArIGJhc2UgKyBkaWdpdG87XG4gICAgfSBlbHNlIGlmICh0YW1hbmhvRSh2YWxvciwgMTQpKSB7XG4gICAgICBiYXNlID0gcHJpbWVpcm9zKHZhbG9yLCAxMyk7XG4gICAgICByZXN1bHRhZG9Nb2QgPSBtb2QoYmFzZSk7XG4gICAgICBkaWdpdG8gPSByZXN1bHRhZG9Nb2QgPD0gMSA/IDEgOiAxMSAtIHJlc3VsdGFkb01vZDtcblxuICAgICAgcmV0dXJuIGJhc2UgKyBkaWdpdG87XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH0sXG4gIHJyOiBmdW5jdGlvbiAodmFsb3I6IGFueSkge1xuICAgIGlmICh0YW1hbmhvTmFvRSh2YWxvcikpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAobmFvQ29tZWNhQ29tKHZhbG9yLCAnMjQnKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IGJhc2UgPSBwcmltZWlyb3ModmFsb3IpO1xuICAgIGNvbnN0IGRpZ2l0byA9IG1vZChiYXNlLCBbOCwgNywgNiwgNSwgNCwgMywgMiwgMV0sIDkpO1xuXG4gICAgcmV0dXJuIGJhc2UgKyBkaWdpdG87XG4gIH0sXG5cbiAgcnM6IGZ1bmN0aW9uICh2YWxvcjogYW55KSB7XG4gICAgaWYgKHRhbWFuaG9OYW9FKHZhbG9yLCAxMCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCBiYXNlID0gcHJpbWVpcm9zKHZhbG9yLCA5KTtcbiAgICByZXR1cm4gY2FsY3Vsb1RyaXZpYWxHZW5lcmF0ZSh2YWxvciwgYmFzZSwgdHJ1ZSk7XG4gIH0sXG5cbiAgc2M6IGZ1bmN0aW9uICh2YWxvcjogYW55KSB7XG4gICAgcmV0dXJuIGNhbGN1bG9Ucml2aWFsR2VuZXJhdGUodmFsb3IpO1xuICB9LFxuXG4gIHNlOiBmdW5jdGlvbiAodmFsb3I6IGFueSkge1xuICAgIGlmICh0YW1hbmhvTmFvRSh2YWxvcikpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2FsY3Vsb1RyaXZpYWxHZW5lcmF0ZSh2YWxvcik7XG4gIH0sXG5cbiAgc3A6IGZ1bmN0aW9uICh2YWxvcjogYW55KSB7XG4gICAgdmFsb3IgPSB2YWxvci50b1VwcGVyQ2FzZSgpO1xuXG4gICAgbGV0IHNlZ3VuZGFCYXNlOiBzdHJpbmc7XG5cbiAgICBpZiAodmFsb3Iuc3Vic3RyKDAsIDEpID09PSAnUCcpIHtcbiAgICAgIGlmICh0YW1hbmhvTmFvRSh2YWxvciwgMTMpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgYmFzZSA9IHZhbG9yLnN1YnN0cmluZygxLCA5KTtcbiAgICAgIHNlZ3VuZGFCYXNlID0gdmFsb3Iuc3Vic3RyaW5nKDEwLCAxMyk7XG4gICAgICBjb25zdCByZXN0byA9IG1vZChiYXNlLCBbMTAsIDgsIDcsIDYsIDUsIDQsIDMsIDFdKS50b1N0cmluZygpO1xuICAgICAgY29uc3QgZGlnaXRvID0gcmVzdG8ubGVuZ3RoID4gMSA/IHJlc3RvWzFdIDogcmVzdG9bMF07XG5cbiAgICAgIHJldHVybiAnUCcgKyBiYXNlICsgZGlnaXRvICsgc2VndW5kYUJhc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0YW1hbmhvTmFvRSh2YWxvciwgMTIpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcHJpbWVpcmFCYXNlID0gcHJpbWVpcm9zKHZhbG9yKTtcbiAgICAgIHNlZ3VuZGFCYXNlID0gdmFsb3Iuc3Vic3RyaW5nKDksIDExKTtcblxuICAgICAgY29uc3QgcHJpbWVpcm9SZXN0byA9IG1vZChwcmltZWlyYUJhc2UsIFsxMCwgOCwgNywgNiwgNSwgNCwgMywgMV0pLnRvU3RyaW5nKCk7XG4gICAgICBjb25zdCBwcmltZWlybyA9IHByaW1laXJvUmVzdG8ubGVuZ3RoID4gMSA/IHByaW1laXJvUmVzdG9bMV0gOiBwcmltZWlyb1Jlc3RvWzBdO1xuXG4gICAgICBjb25zdCBzZWd1bmRvUmVzdG8gPSBtb2QocHJpbWVpcmFCYXNlICsgcHJpbWVpcm8gKyBzZWd1bmRhQmFzZSwgc2VyaWUoMiwgMTApKS50b1N0cmluZygpO1xuICAgICAgY29uc3Qgc2VndW5kbyA9IHNlZ3VuZG9SZXN0by5sZW5ndGggPiAxID8gc2VndW5kb1Jlc3RvWzFdIDogc2VndW5kb1Jlc3RvWzBdO1xuXG4gICAgICByZXR1cm4gcHJpbWVpcmFCYXNlICsgcHJpbWVpcm8gKyBzZWd1bmRhQmFzZSArIHNlZ3VuZG87XG4gICAgfVxuICB9LFxuXG4gIHRvOiBmdW5jdGlvbiAodmFsb3I6IGFueSkge1xuICAgIGlmICh0YW1hbmhvTmFvRSh2YWxvcikgJiYgdGFtYW5ob05hb0UodmFsb3IsIDExKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGxldCBiYXNlOiBhbnk7XG5cbiAgICBpZiAodGFtYW5ob0UodmFsb3IsIDExKSkge1xuICAgICAgaWYgKFsnMDEnLCAnMDInLCAnMDMnLCAnOTknXS5pbmRleE9mKHZhbG9yLnN1YnN0cmluZygyLCA0KSkgPT09IC0xKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgYmFzZSA9IHZhbG9yLnN1YnN0cmluZygwLCAyKSArIHZhbG9yLnN1YnN0cmluZyg0LCAxMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGJhc2UgPSBwcmltZWlyb3ModmFsb3IpO1xuICAgIH1cblxuICAgIGNvbnN0IGRpZ2l0byA9IHN1YnN0cmFjYW9Qb3IxMVNlTWFpb3JRdWUyQ2Fzb0NvbnRyYXJpbzAobW9kKGJhc2UpKTtcblxuICAgIHJldHVybiB2YWxvci5zdWJzdHJpbmcoMCwgdmFsb3IubGVuZ3RoIC0gMSkgKyBkaWdpdG87XG4gIH0sXG59O1xuXG5cblxuXG5jb25zdCBmdW5jb2VzOiBCaWdPYmplY3Q8RnVuY3Rpb24+ID0ge1xuICBhYzogZnVuY3Rpb24gKHZhbG9yOiBhbnkpIHtcbiAgICByZXR1cm4gdmFsb3IgPT09IGdlbmVyYXRlSW5zY3JpY2FvRXN0YWR1YWxbJ2FjJ10odmFsb3IpO1xuICB9LFxuXG4gIGFtOiBmdW5jdGlvbiAodmFsb3I6IGFueSkge1xuICAgIHJldHVybiB2YWxvciA9PT0gZ2VuZXJhdGVJbnNjcmljYW9Fc3RhZHVhbFsnYW0nXSh2YWxvcik7XG4gIH0sXG5cbiAgYWw6IGZ1bmN0aW9uICh2YWxvcjogYW55KSB7XG4gICAgcmV0dXJuIHZhbG9yID09PSBnZW5lcmF0ZUluc2NyaWNhb0VzdGFkdWFsWydhbCddKHZhbG9yKTtcbiAgfSxcblxuICBhcDogZnVuY3Rpb24gKHZhbG9yOiBhbnkpIHtcbiAgICByZXR1cm4gdmFsb3IgPT09IGdlbmVyYXRlSW5zY3JpY2FvRXN0YWR1YWxbJ2FwJ10odmFsb3IpO1xuICB9LFxuXG4gIGJhOiBmdW5jdGlvbiAodmFsb3I6IGFueSkge1xuICAgIHJldHVybiB2YWxvciA9PT0gZ2VuZXJhdGVJbnNjcmljYW9Fc3RhZHVhbFsnYmEnXSh2YWxvcik7XG4gIH0sXG5cbiAgY2U6IGZ1bmN0aW9uICh2YWxvcjogYW55KSB7XG4gICAgcmV0dXJuIHZhbG9yID09PSBnZW5lcmF0ZUluc2NyaWNhb0VzdGFkdWFsWydjZSddKHZhbG9yKTtcbiAgfSxcblxuICBkZjogZnVuY3Rpb24gKHZhbG9yOiBhbnkpIHtcbiAgICByZXR1cm4gdmFsb3IgPT09IGdlbmVyYXRlSW5zY3JpY2FvRXN0YWR1YWxbJ2RmJ10odmFsb3IpO1xuICB9LFxuXG4gIGVzOiBmdW5jdGlvbiAodmFsb3I6IGFueSkge1xuICAgIHJldHVybiB2YWxvciA9PT0gZ2VuZXJhdGVJbnNjcmljYW9Fc3RhZHVhbFsnZXMnXSh2YWxvcik7XG4gIH0sXG4gIGdvOiBmdW5jdGlvbiAodmFsb3I6IGFueSkge1xuICAgIHJldHVybiB2YWxvciA9PT0gZ2VuZXJhdGVJbnNjcmljYW9Fc3RhZHVhbFsnZ28nXSh2YWxvcik7XG4gIH0sXG4gIG1hOiBmdW5jdGlvbiAodmFsb3I6IGFueSkge1xuICAgIHJldHVybiB2YWxvciA9PT0gZ2VuZXJhdGVJbnNjcmljYW9Fc3RhZHVhbFsnbWEnXSh2YWxvcik7XG4gIH0sXG5cbiAgbWc6IGZ1bmN0aW9uICh2YWxvcjogYW55KSB7XG4gICAgcmV0dXJuIHZhbG9yID09PSBnZW5lcmF0ZUluc2NyaWNhb0VzdGFkdWFsWydtZyddKHZhbG9yKTtcbiAgfSxcblxuICBtczogZnVuY3Rpb24gKHZhbG9yOiBhbnkpIHtcbiAgICByZXR1cm4gdmFsb3IgPT09IGdlbmVyYXRlSW5zY3JpY2FvRXN0YWR1YWxbJ21zJ10odmFsb3IpO1xuICB9LFxuICBtdDogZnVuY3Rpb24gKHZhbG9yOiBhbnkpIHtcbiAgICByZXR1cm4gdmFsb3IgPT09IGdlbmVyYXRlSW5zY3JpY2FvRXN0YWR1YWxbJ210J10odmFsb3IpO1xuICB9LFxuICBwYTogZnVuY3Rpb24gKHZhbG9yOiBhbnkpIHtcbiAgICByZXR1cm4gdmFsb3IgPT09IGdlbmVyYXRlSW5zY3JpY2FvRXN0YWR1YWxbJ3BhJ10odmFsb3IpO1xuICB9LFxuXG4gIHBiOiBmdW5jdGlvbiAodmFsb3I6IGFueSkge1xuICAgIHJldHVybiB2YWxvciA9PT0gZ2VuZXJhdGVJbnNjcmljYW9Fc3RhZHVhbFsncGInXSh2YWxvcik7XG4gIH0sXG5cbiAgcGU6IGZ1bmN0aW9uICh2YWxvcjogYW55KSB7XG4gICAgcmV0dXJuIHZhbG9yID09PSBnZW5lcmF0ZUluc2NyaWNhb0VzdGFkdWFsWydwZSddKHZhbG9yKTtcbiAgfSxcblxuICBwaTogZnVuY3Rpb24gKHZhbG9yOiBhbnkpIHtcbiAgICByZXR1cm4gdmFsb3IgPT09IGdlbmVyYXRlSW5zY3JpY2FvRXN0YWR1YWxbJ3BpJ10odmFsb3IpO1xuICB9LFxuXG4gIHByOiBmdW5jdGlvbiAodmFsb3I6IGFueSkge1xuICAgIHJldHVybiB2YWxvciA9PT0gZ2VuZXJhdGVJbnNjcmljYW9Fc3RhZHVhbFsncHInXSh2YWxvcik7XG4gIH0sXG4gIHJqOiBmdW5jdGlvbiAodmFsb3I6IGFueSkge1xuICAgIHJldHVybiB2YWxvciA9PT0gZ2VuZXJhdGVJbnNjcmljYW9Fc3RhZHVhbFsncmonXSh2YWxvcik7XG4gIH0sXG5cbiAgcm46IGZ1bmN0aW9uICh2YWxvcjogYW55KSB7XG4gICAgcmV0dXJuIHZhbG9yID09PSBnZW5lcmF0ZUluc2NyaWNhb0VzdGFkdWFsWydybiddKHZhbG9yKTtcbiAgfSxcbiAgcm86IGZ1bmN0aW9uICh2YWxvcjogYW55KSB7XG4gICAgcmV0dXJuIHZhbG9yID09PSBnZW5lcmF0ZUluc2NyaWNhb0VzdGFkdWFsWydybyddKHZhbG9yKTtcbiAgfSxcbiAgcnI6IGZ1bmN0aW9uICh2YWxvcjogYW55KSB7XG4gICAgcmV0dXJuIHZhbG9yID09PSBnZW5lcmF0ZUluc2NyaWNhb0VzdGFkdWFsWydyciddKHZhbG9yKTtcbiAgfSxcblxuICByczogZnVuY3Rpb24gKHZhbG9yOiBhbnkpIHtcbiAgICByZXR1cm4gdmFsb3IgPT09IGdlbmVyYXRlSW5zY3JpY2FvRXN0YWR1YWxbJ3JzJ10odmFsb3IpO1xuICB9LFxuXG4gIHNjOiBmdW5jdGlvbiAodmFsb3I6IGFueSkge1xuICAgIHJldHVybiB2YWxvciA9PT0gZ2VuZXJhdGVJbnNjcmljYW9Fc3RhZHVhbFsnc2MnXSh2YWxvcik7XG4gIH0sXG5cbiAgc2U6IGZ1bmN0aW9uICh2YWxvcjogYW55KSB7XG4gICAgcmV0dXJuIHZhbG9yID09PSBnZW5lcmF0ZUluc2NyaWNhb0VzdGFkdWFsWydzZSddKHZhbG9yKTtcbiAgfSxcblxuICBzcDogZnVuY3Rpb24gKHZhbG9yOiBzdHJpbmcgfCBib29sZWFuKSB7XG4gICAgcmV0dXJuIHZhbG9yID09PSBnZW5lcmF0ZUluc2NyaWNhb0VzdGFkdWFsWydzcCddKHZhbG9yKTtcbiAgfSxcblxuICB0bzogZnVuY3Rpb24gKHZhbG9yOiBhbnkpIHtcbiAgICByZXR1cm4gdmFsb3IgPT09IGdlbmVyYXRlSW5zY3JpY2FvRXN0YWR1YWxbJ3RvJ10odmFsb3IpO1xuICB9LFxufTtcblxuXG5cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlX2luc2NyaWNhb2VzdGFkdWFsKGllOiBzdHJpbmcgfCBBcnJheTxzdHJpbmc+LCBlc3RhZG86IGFueSkge1xuICBpZiAoZUluZGVmaW5pZG8oZXN0YWRvKSB8fCBlc3RhZG8gPT09IG51bGwpIHtcbiAgICBlc3RhZG8gPSAnJztcbiAgfVxuXG4gIGVzdGFkbyA9IGVzdGFkby50b0xvd2VyQ2FzZSgpO1xuXG4gIGlmIChlc3RhZG8gIT09ICcnICYmICEoZXN0YWRvIGluIGZ1bmNvZXMpKSB7XG4gICAgcmV0dXJuIG5ldyBFcnJvcignZXN0YWRvIG7Do28gw6kgdsOhbGlkbycpO1xuICB9XG5cbiAgaWYgKGVJbmRlZmluaWRvKGllKSkge1xuICAgIHJldHVybiBuZXcgRXJyb3IoJ2llIGRldmUgc2VyIGZvcm5lY2lkYScpO1xuICB9XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkoaWUpKSB7XG4gICAgbGV0IHJldG9ybm8gPSB0cnVlO1xuICAgIGllLmZvckVhY2goZnVuY3Rpb24gKGkpIHtcbiAgICAgIGlmICghdmFsaWRhdGVfaW5zY3JpY2FvZXN0YWR1YWwoaSwgZXN0YWRvKSkge1xuICAgICAgICByZXRvcm5vID0gZmFsc2U7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHJldG9ybm87XG4gIH1cblxuICBpZiAodHlwZW9mIGllICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBuZXcgRXJyb3IoJ2llIGRldmUgc2VyIHN0cmluZyBvdSBhcnJheSBkZSBzdHJpbmdzJyk7XG4gIH1cblxuICBpZiAoIWFsbE51bWJlcnNBcmVTYW1lKGllKSkge1xuICAgIHJldHVybiBuZXcgRXJyb3IoJ2llIGNvbSB0b2RvcyBkw61naXRvcyBpZ3VhaXMnKTtcbiAgfVxuXG4gIGlmIChpZS5tYXRjaCgvXklTRU5UTyQvaSkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGllID0gaWUucmVwbGFjZSgvW1xcLnxcXC18XFwvfFxcc10vZywgJycpO1xuXG4gIGlmIChlc3RhZG8gPT09ICcnKSB7XG4gICAgaWYgKGxvb2t1cChpZSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgaWYgKC9eXFxkKyQvLnRlc3QoaWUpIHx8IGVzdGFkbyA9PT0gJ3NwJyB8fCBmdW5jb2VzW2VzdGFkb10pIHtcbiAgICByZXR1cm4gZnVuY29lc1tlc3RhZG9dKGllKTtcbiAgfVxuXG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgY29uc3QgTUFTS1NJRTogQmlnT2JqZWN0PE1hc2tUeXBlPiA9IHtcbiAgYWM6IHtcbiAgICB0ZXh0OiAnMDEuMDA0LjgyMy8wMDEtMTInLFxuICAgIHRleHRNYXNrOiBbL1xcZC8sIC9cXGQvLCAnLicsIC9cXGQvLCAvXFxkLywgL1xcZC8sICcuJywgL1xcZC8sIC9cXGQvLCAvXFxkLywgJy8nLCAvXFxkLywgL1xcZC8sIC9cXGQvLCAnLScsIC9cXGQvLCAvXFxkL11cbiAgfSxcbiAgYWw6IHtcbiAgICB0ZXh0OiAnMjQwMDAwMDQ4JyxcbiAgICB0ZXh0TWFzazogWy9cXGQvLCAvXFxkLywgL1xcZC8sIC9cXGQvLCAvXFxkLywgL1xcZC8sIC9cXGQvLCAvXFxkLywgL1xcZC9dXG4gIH0sXG4gIGFtOiB7XG4gICAgdGV4dDogJzA0LjE0NS44NzEtMCcsXG4gICAgdGV4dE1hc2s6IFsvXFxkLywgL1xcZC8sICcuJywgL1xcZC8sIC9cXGQvLCAvXFxkLywgJy4nLCAvXFxkLywgL1xcZC8sIC9cXGQvLCAnLScsIC9cXGQvXVxuICB9LFxuICBhcDoge1xuICAgIHRleHQ6ICcyNDAwMDAwNDgnLFxuICAgIHRleHRNYXNrOiBbL1xcZC8sIC9cXGQvLCAvXFxkLywgL1xcZC8sIC9cXGQvLCAvXFxkLywgL1xcZC8sIC9cXGQvLCAvXFxkL11cbiAgfSxcbiAgYmE6IHtcbiAgICB0ZXh0OiAnMTIzNDU2Ny00OCcsXG4gICAgdGV4dE1hc2s6IFsvXFxkLywgL1xcZC8sIC9cXGQvLCAvXFxkLywgL1xcZC8sIC9cXGQvLCAvXFxkLywgJy0nLCAvXFxkLywgL1xcZC9dLFxuICAgIHRleHRNYXNrRnVuY3Rpb246IGZ1bmN0aW9uIG1hc2sodXNlcklucHV0OiBhbnkpIHtcbiAgICAgIGNvbnN0IG51bWJlckxlbmd0aCA9IGdldFNpemVOdW1iZXJzKHVzZXJJbnB1dCk7XG4gICAgICBpZiAoIXVzZXJJbnB1dCB8fCBudW1iZXJMZW5ndGggPiA4KSB7XG4gICAgICAgIHJldHVybiBbL1xcZC8sIC9cXGQvLCAvXFxkLywgL1xcZC8sIC9cXGQvLCAvXFxkLywgL1xcZC8sICctJywgL1xcZC8sIC9cXGQvXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBbL1xcZC8sIC9cXGQvLCAvXFxkLywgL1xcZC8sIC9cXGQvLCAvXFxkLywgJy0nLCAvXFxkLywgL1xcZC9dO1xuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgY2U6IHtcbiAgICB0ZXh0OiAnMDYuMDAwMDAxLTUnLFxuICAgIHRleHRNYXNrOiBbL1xcZC8sIC9cXGQvLCAnLicsIC9cXGQvLCAvXFxkLywgL1xcZC8sIC9cXGQvLCAvXFxkLywgL1xcZC8sICctJywgL1xcZC9dXG4gIH0sXG4gIGRmOiB7XG4gICAgdGV4dDogJzA2IDAwMDAwMSAxMjMtNTUnLFxuICAgIHRleHRNYXNrOiBbL1xcZC8sIC9cXGQvLCAnICcsIC9cXGQvLCAvXFxkLywgL1xcZC8sIC9cXGQvLCAvXFxkLywgL1xcZC8sICcgJywgL1xcZC8sIC9cXGQvLCAvXFxkLywgJy0nLCAvXFxkLywgL1xcZC9dXG4gIH0sXG4gIGVzOiB7XG4gICAgdGV4dDogJzA4Mi41NjAuNjctNicsXG4gICAgdGV4dE1hc2s6IFsvXFxkLywgL1xcZC8sIC9cXGQvLCAnLicsIC9cXGQvLCAvXFxkLywgL1xcZC8sICcuJywgL1xcZC8sIC9cXGQvLCAnLScsIC9cXGQvXVxuICB9LFxuICBnbzoge1xuICAgIHRleHQ6ICcwNi4wMDAuMDAxLTUnLFxuICAgIHRleHRNYXNrOiBbL1xcZC8sIC9cXGQvLCAnLicsIC9cXGQvLCAvXFxkLywgL1xcZC8sICcuJywgL1xcZC8sIC9cXGQvLCAvXFxkLywgJy0nLCAvXFxkL11cbiAgfSxcbiAgbWE6IHtcbiAgICB0ZXh0OiAnMTIuMTA0LjM3Ni0yJyxcbiAgICB0ZXh0TWFzazogWy9cXGQvLCAvXFxkLywgJy4nLCAvXFxkLywgL1xcZC8sIC9cXGQvLCAnLicsIC9cXGQvLCAvXFxkLywgL1xcZC8sICctJywgL1xcZC8sIC9cXGQvXVxuICB9LFxuICBtZzoge1xuICAgIHRleHQ6ICcwMDEuODE5LjI2My8wMDQ4JyxcbiAgICB0ZXh0TWFzazogWy9cXGQvLCAvXFxkLywgL1xcZC8sICcuJywgL1xcZC8sIC9cXGQvLCAvXFxkLywgJy4nLCAvXFxkLywgL1xcZC8sIC9cXGQvLCAnLycsIC9cXGQvLCAvXFxkLywgL1xcZC8sIC9cXGQvXVxuICB9LFxuICBtczoge1xuICAgIHRleHQ6ICcwMDE4MTkyNjMnLFxuICAgIHRleHRNYXNrOiBbL1xcZC8sIC9cXGQvLCAvXFxkLywgL1xcZC8sIC9cXGQvLCAvXFxkLywgL1xcZC8sIC9cXGQvLCAvXFxkL11cbiAgfSxcbiAgbXQ6IHtcbiAgICB0ZXh0OiAnMDAxODE5MjYzMC0xJyxcbiAgICB0ZXh0TWFzazogWy9cXGQvLCAvXFxkLywgL1xcZC8sIC9cXGQvLCAvXFxkLywgL1xcZC8sIC9cXGQvLCAvXFxkLywgL1xcZC8sIC9cXGQvLCAnLScsIC9cXGQvXVxuICB9LFxuICBwYToge1xuICAgIHRleHQ6ICcwNi0wMDAwMDEtNScsXG4gICAgdGV4dE1hc2s6IFsvXFxkLywgL1xcZC8sICctJywgL1xcZC8sIC9cXGQvLCAvXFxkLywgL1xcZC8sIC9cXGQvLCAvXFxkLywgJy0nLCAvXFxkL11cbiAgfSxcbiAgcGI6IHtcbiAgICB0ZXh0OiAnMDYwMDAwMDEtNScsXG4gICAgdGV4dE1hc2s6IFsvXFxkLywgL1xcZC8sIC9cXGQvLCAvXFxkLywgL1xcZC8sIC9cXGQvLCAvXFxkLywgL1xcZC8sICctJywgL1xcZC9dXG4gIH0sXG4gIHBlOiB7XG4gICAgdGV4dDogJzAxOTIzMTAtMjQnLFxuICAgIHRleHRNYXNrOiBbL1xcZC8sIC9cXGQvLCAvXFxkLywgL1xcZC8sIC9cXGQvLCAvXFxkLywgL1xcZC8sICctJywgL1xcZC8sIC9cXGQvXVxuICB9LFxuICBwaToge1xuICAgIHRleHQ6ICcxOS4zMDEuNjU2LTcnLFxuICAgIHRleHRNYXNrOiBbL1xcZC8sIC9cXGQvLCAnLicsIC9cXGQvLCAvXFxkLywgL1xcZC8sICcuJywgL1xcZC8sIC9cXGQvLCAvXFxkLywgJy0nLCAvXFxkL11cbiAgfSxcbiAgcHI6IHtcbiAgICB0ZXh0OiAnMTkzMDE2NTYtNzgnLFxuICAgIHRleHRNYXNrOiBbL1xcZC8sIC9cXGQvLCAvXFxkLywgL1xcZC8sIC9cXGQvLCAvXFxkLywgL1xcZC8sIC9cXGQvLCAnLScsIC9cXGQvLCAvXFxkL11cbiAgfSxcbiAgcmo6IHtcbiAgICB0ZXh0OiAnMjAuMDQwLjA0LTEnLFxuICAgIHRleHRNYXNrOiBbL1xcZC8sIC9cXGQvLCAnLicsIC9cXGQvLCAvXFxkLywgL1xcZC8sICcuJywgL1xcZC8sIC9cXGQvLCAnLScsIC9cXGQvXVxuICB9LFxuICBybjoge1xuICAgIHRleHQ6ICcyMC4wNDAuMDQwLTEnLFxuICAgIHRleHRNYXNrOiBbL1xcZC8sIC9cXGQvLCAnLicsIC9cXGQvLCAvXFxkLywgL1xcZC8sICcuJywgL1xcZC8sIC9cXGQvLCAvXFxkLywgJy0nLCAvXFxkL10sXG4gICAgdGV4dE1hc2tGdW5jdGlvbjogZnVuY3Rpb24gbWFzayh1c2VySW5wdXQ6IGFueSkge1xuICAgICAgY29uc3QgbnVtYmVyTGVuZ3RoID0gZ2V0U2l6ZU51bWJlcnModXNlcklucHV0KTtcblxuICAgICAgaWYgKCF1c2VySW5wdXQgfHwgbnVtYmVyTGVuZ3RoID4gOSkge1xuICAgICAgICByZXR1cm4gWy9cXGQvLCAvXFxkLywgJy4nLCAvXFxkLywgL1xcZC8sIC9cXGQvLCAnLicsIC9cXGQvLCAvXFxkLywgL1xcZC8sICctJywgL1xcZC8sIC9cXGQvXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBbL1xcZC8sIC9cXGQvLCAnLicsIC9cXGQvLCAvXFxkLywgL1xcZC8sICcuJywgL1xcZC8sIC9cXGQvLCAvXFxkLywgJy0nLCAvXFxkL107XG4gICAgICB9XG4gICAgfVxuICB9LFxuICBybzoge1xuICAgIHRleHQ6ICcxMDEuNjI1MjEtMycsXG4gICAgdGV4dE1hc2s6IFsvXFxkLywgL1xcZC8sIC9cXGQvLCAnLycsIC9cXGQvLCAvXFxkLywgL1xcZC8sIC9cXGQvLCAvXFxkLywgL1xcZC8sIC9cXGQvXVxuICB9LFxuICBycjoge1xuICAgIHRleHQ6ICcyNDAwNjYyOC0xJyxcbiAgICB0ZXh0TWFzazogWy9cXGQvLCAvXFxkLywgL1xcZC8sICcvJywgL1xcZC8sIC9cXGQvLCAvXFxkLywgL1xcZC8sIC9cXGQvLCAvXFxkLywgL1xcZC9dXG4gIH0sXG4gIHJzOiB7XG4gICAgdGV4dDogJzAyNC8wNDQwMDEzJyxcbiAgICB0ZXh0TWFzazogWy9cXGQvLCAvXFxkLywgL1xcZC8sICcvJywgL1xcZC8sIC9cXGQvLCAvXFxkLywgL1xcZC8sIC9cXGQvLCAvXFxkLywgL1xcZC9dXG4gIH0sXG4gIHNjOiB7XG4gICAgdGV4dDogJzI3MS4yMzQuNTYzJyxcbiAgICB0ZXh0TWFzazogWy9cXGQvLCAvXFxkLywgL1xcZC8sICcuJywgL1xcZC8sIC9cXGQvLCAvXFxkLywgJy4nLCAvXFxkLywgL1xcZC8sIC9cXGQvXVxuICB9LFxuICBzZToge1xuICAgIHRleHQ6ICcyNzEyMzQ1Ni0zJyxcbiAgICB0ZXh0TWFzazogWy9cXGQvLCAvXFxkLywgL1xcZC8sICcvJywgL1xcZC8sIC9cXGQvLCAvXFxkLywgL1xcZC8sIC9cXGQvLCAvXFxkLywgL1xcZC9dXG4gIH0sXG4gIHNwOiB7XG4gICAgdGV4dDogJzExNC44MTQuODc4LjExOScsXG4gICAgdGV4dE1hc2s6IFsvXFxkLywgL1xcZC8sIC9cXGQvLCAnLicsIC9cXGQvLCAvXFxkLywgL1xcZC8sICcuJywgL1xcZC8sIC9cXGQvLCAvXFxkLywgJy4nLCAvXFxkLywgL1xcZC8sIC9cXGQvXVxuICB9LFxuICB0bzoge1xuICAgIHRleHQ6ICcxMSA4MSA0ODc4MTE5JyxcbiAgICB0ZXh0TWFzazogWy9cXGQvLCAvXFxkLywgJyAnLCAvXFxkLywgL1xcZC8sICcgJywgL1xcZC8sIC9cXGQvLCAvXFxkLywgL1xcZC8sIC9cXGQvLCAvXFxkLywgL1xcZC9dXG4gIH0sXG59O1xuXG5mdW5jdGlvbiBnZXRTaXplTnVtYmVycyh1c2VySW5wdXQ6IHN0cmluZykge1xuICBjb25zdCBudW1iZXJzOiBhbnkgPSB1c2VySW5wdXQubWF0Y2goL1xcZC9nKTtcbiAgbGV0IG51bWJlckxlbmd0aCA9IDA7XG4gIGlmIChudW1iZXJzKSB7XG4gICAgbnVtYmVyTGVuZ3RoID0gbnVtYmVycy5qb2luKCcnKS5sZW5ndGg7XG4gIH1cbiAgcmV0dXJuIG51bWJlckxlbmd0aFxufVxuXG5mdW5jdGlvbiBlSW5kZWZpbmlkbyhvYmpldG86IGFueSkge1xuICByZXR1cm4gdHlwZW9mIG9iamV0byA9PT0gdHlwZW9mIHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gdGFtYW5ob05hb0Uoc3RyaW5nOiB7IGxlbmd0aDogbnVtYmVyOyB9LCB0YW1hbmhvID0gOSkge1xuICBpZiAoZUluZGVmaW5pZG8odGFtYW5obykpIHtcbiAgICB0YW1hbmhvID0gOTtcbiAgfVxuXG4gIHJldHVybiBzdHJpbmcubGVuZ3RoICE9PSB0YW1hbmhvO1xufVxuXG5mdW5jdGlvbiB0YW1hbmhvRShzdHJpbmc6IGFueVtdLCB0YW1hbmhvOiBudW1iZXIpIHtcbiAgcmV0dXJuICF0YW1hbmhvTmFvRShzdHJpbmcsIHRhbWFuaG8pO1xufVxuXG5mdW5jdGlvbiBzZXJpZShkZTogbnVtYmVyLCBhdGU6IG51bWJlcikge1xuICBjb25zdCByZXN1bHRhZG8gPSBbXTtcblxuICB3aGlsZSAoZGUgPD0gYXRlKSB7XG4gICAgcmVzdWx0YWRvLnB1c2goZGUrKyk7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0YWRvO1xufVxuXG5mdW5jdGlvbiBwcmltZWlyb3Moc3RyaW5nOiBhbnksIHF1YW50aWRhZGUgPSA4KSB7XG4gIGlmIChlSW5kZWZpbmlkbyhxdWFudGlkYWRlKSkge1xuICAgIHF1YW50aWRhZGUgPSA4O1xuICB9XG5cbiAgcmV0dXJuIHN0cmluZy5zdWJzdHJpbmcoMCwgcXVhbnRpZGFkZSk7XG59XG5cbmZ1bmN0aW9uIHN1YnN0cmFjYW9Qb3IxMVNlTWFpb3JRdWUyQ2Fzb0NvbnRyYXJpbzAodmFsb3I6IG51bWJlcikge1xuICByZXR1cm4gdmFsb3IgPCAyID8gMCA6IDExIC0gdmFsb3I7XG59XG5cbmZ1bmN0aW9uIG1vZCh2YWxvcjogc3RyaW5nLCBtdWx0aXBsaWNhZG9yZXMgPSBzZXJpZSgyLCA5KSwgZGl2aXNvciA9IDExKSB7XG4gIGlmIChlSW5kZWZpbmlkbyhkaXZpc29yKSkge1xuICAgIGRpdmlzb3IgPSAxMTtcbiAgfVxuXG4gIGlmIChlSW5kZWZpbmlkbyhtdWx0aXBsaWNhZG9yZXMpKSB7XG4gICAgbXVsdGlwbGljYWRvcmVzID0gc2VyaWUoMiwgOSk7XG4gIH1cblxuICBsZXQgaSA9IDA7XG5cbiAgcmV0dXJuIHZhbG9yLnNwbGl0KCcnKS5yZWR1Y2VSaWdodChmdW5jdGlvbiAoYW50ZXJpb3I6IG51bWJlciwgYXR1YWw6IHN0cmluZykge1xuICAgIGlmIChpID4gbXVsdGlwbGljYWRvcmVzLmxlbmd0aCAtIDEpIHtcbiAgICAgIGkgPSAwO1xuICAgIH1cblxuICAgIHJldHVybiAobXVsdGlwbGljYWRvcmVzW2krK10gKiBwYXJzZUludChhdHVhbCwgMTApKSArIGFudGVyaW9yO1xuICB9LCAwKSAlIGRpdmlzb3I7XG59XG5cbmZ1bmN0aW9uIGNhbGN1bG9Ucml2aWFsR2VuZXJhdGUodmFsb3I6IGFueSwgYmFzZTogYW55ID0gbnVsbCwgdmFsaWRhclRhbWFuaG8gPSBmYWxzZSkge1xuICBpZiAoIXZhbGlkYXJUYW1hbmhvICYmIHRhbWFuaG9OYW9FKHZhbG9yKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoZUluZGVmaW5pZG8oYmFzZSkpIHtcbiAgICBiYXNlID0gcHJpbWVpcm9zKHZhbG9yKTtcbiAgfVxuICBpZiAoIWJhc2UpIHtcbiAgICBiYXNlID0gcHJpbWVpcm9zKHZhbG9yKTtcbiAgfVxuXG4gIGNvbnN0IGRpZ2l0byA9IHN1YnN0cmFjYW9Qb3IxMVNlTWFpb3JRdWUyQ2Fzb0NvbnRyYXJpbzAobW9kKGJhc2UpKTtcblxuICByZXR1cm4gYmFzZSArIGRpZ2l0bztcbn1cblxuZnVuY3Rpb24gbmFvQ29tZWNhQ29tKHN0cmluZzogYW55LCB2YWxvcjogc3RyaW5nKSB7XG4gIHJldHVybiBzdHJpbmcuc3Vic3RyaW5nKDAsIHZhbG9yLmxlbmd0aCkgIT09IHZhbG9yO1xufVxuXG5mdW5jdGlvbiBlbnRyZSh2YWxvcjogc3RyaW5nIHwgbnVtYmVyLCBsaW1pdGVJbmZlcmlvcjogbnVtYmVyLCBsaW1pdGVTdXBlcmlvcjogbnVtYmVyKSB7XG4gIGlmICh0eXBlb2YgdmFsb3IgPT09ICdzdHJpbmcnKSB7XG4gICAgdmFsb3IgPSBwYXJzZUludCh2YWxvciwgMTApO1xuICB9XG5cbiAgcmV0dXJuIHZhbG9yID49IGxpbWl0ZUluZmVyaW9yICYmIHZhbG9yIDw9IGxpbWl0ZVN1cGVyaW9yO1xufVxuXG5cbmZ1bmN0aW9uIGxvb2t1cChpZTogYW55KSB7XG4gIGNvbnN0IHJlc3VsdGFkbyA9IFtdO1xuXG4gIGZvciAoY29uc3QgZXN0YWRvIGluIGZ1bmNvZXMpIHtcbiAgICBpZiAoZnVuY29lc1tlc3RhZG9dKGllKSkge1xuICAgICAgcmVzdWx0YWRvLnB1c2goZXN0YWRvKTtcbiAgICB9XG4gIH1cblxuICBpZiAodGFtYW5ob0UocmVzdWx0YWRvLCAwKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gcmVzdWx0YWRvO1xuICB9XG59XG5cbiJdfQ==