@useinvio/nfse-sdk 3.0.0 → 3.2.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/CHANGELOG.md +176 -0
- package/README.en.md +146 -0
- package/README.md +77 -518
- package/dist/agent.d.ts +131 -0
- package/dist/agent.js +551 -0
- package/dist/agent.js.map +1 -0
- package/dist/certificate.d.ts +96 -0
- package/dist/certificate.js +218 -0
- package/dist/certificate.js.map +1 -0
- package/dist/certificateValidation.d.ts +11 -6
- package/dist/certificateValidation.js +23 -12
- package/dist/certificateValidation.js.map +1 -1
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +520 -0
- package/dist/cli.js.map +1 -0
- package/dist/cliBin.d.ts +2 -0
- package/dist/cliBin.js +6 -0
- package/dist/cliBin.js.map +1 -0
- package/dist/cliExample.d.ts +6 -0
- package/dist/cliExample.js +29 -0
- package/dist/cliExample.js.map +1 -0
- package/dist/client.d.ts +51 -4
- package/dist/client.js +41 -10
- package/dist/client.js.map +1 -1
- package/dist/config.d.ts +3 -0
- package/dist/config.js +8 -0
- package/dist/config.js.map +1 -1
- package/dist/consultas.d.ts +34 -0
- package/dist/consultas.js +61 -0
- package/dist/consultas.js.map +1 -0
- package/dist/dpsJson.js +1 -41
- package/dist/dpsJson.js.map +1 -1
- package/dist/dpsJsonSchema.d.ts +17 -0
- package/dist/dpsJsonSchema.js +184 -0
- package/dist/dpsJsonSchema.js.map +1 -0
- package/dist/emissaoNota.d.ts +11 -6
- package/dist/emissaoNota.js +10 -6
- package/dist/emissaoNota.js.map +1 -1
- package/dist/eventoJson.d.ts +76 -0
- package/dist/eventoJson.js +128 -0
- package/dist/eventoJson.js.map +1 -0
- package/dist/eventosNfse.d.ts +38 -0
- package/dist/eventosNfse.js +73 -0
- package/dist/eventosNfse.js.map +1 -0
- package/dist/fiscalDomains.d.ts +22 -0
- package/dist/fiscalDomains.js +99 -0
- package/dist/fiscalDomains.js.map +1 -0
- package/dist/fiscalValidation.js +21 -53
- package/dist/fiscalValidation.js.map +1 -1
- package/dist/gzipB64.d.ts +5 -0
- package/dist/gzipB64.js +12 -0
- package/dist/gzipB64.js.map +1 -1
- package/dist/index.d.ts +22 -7
- package/dist/index.js +11 -4
- package/dist/index.js.map +1 -1
- package/dist/jsonSchemaCheck.d.ts +12 -0
- package/dist/jsonSchemaCheck.js +70 -0
- package/dist/jsonSchemaCheck.js.map +1 -0
- package/dist/loadPfx.d.ts +2 -0
- package/dist/loadPfx.js +2 -1
- package/dist/loadPfx.js.map +1 -1
- package/dist/mcpCli.d.ts +2 -0
- package/dist/mcpCli.js +7 -0
- package/dist/mcpCli.js.map +1 -0
- package/dist/mcpServer.d.ts +49 -0
- package/dist/mcpServer.js +159 -0
- package/dist/mcpServer.js.map +1 -0
- package/dist/nfseXml.d.ts +48 -0
- package/dist/nfseXml.js +86 -0
- package/dist/nfseXml.js.map +1 -0
- package/dist/rejeicoes.d.ts +50 -0
- package/dist/rejeicoes.js +62 -0
- package/dist/rejeicoes.js.map +1 -0
- package/dist/rejeicoesCatalog.d.ts +10 -0
- package/dist/rejeicoesCatalog.js +4449 -0
- package/dist/rejeicoesCatalog.js.map +1 -0
- package/dist/sefinClient.d.ts +107 -7
- package/dist/sefinClient.js +232 -22
- package/dist/sefinClient.js.map +1 -1
- package/dist/signXml.d.ts +3 -3
- package/dist/signXml.js +17 -7
- package/dist/signXml.js.map +1 -1
- package/dist/testing.d.ts +80 -0
- package/dist/testing.js +285 -0
- package/dist/testing.js.map +1 -0
- package/dist/xmlBuild.d.ts +11 -0
- package/dist/xmlBuild.js +44 -0
- package/dist/xmlBuild.js.map +1 -0
- package/dist/xmlInspection.d.ts +1 -1
- package/dist/xmlInspection.js +10 -9
- package/dist/xmlInspection.js.map +1 -1
- package/dist/xsdValidation.d.ts +24 -5
- package/dist/xsdValidation.js +97 -67
- package/dist/xsdValidation.js.map +1 -1
- package/docs/README.md +47 -0
- package/docs/REGRAS_NEGOCIO_EMISSAO.md +8 -8
- package/docs/conceitos/como-funciona.md +87 -0
- package/docs/guias/adn.md +51 -0
- package/docs/guias/agentes-ia.md +111 -0
- package/docs/guias/cancelar.md +70 -0
- package/docs/guias/certificado.md +88 -0
- package/docs/guias/cli.md +68 -0
- package/docs/guias/consultar.md +54 -0
- package/docs/guias/emitir.md +172 -0
- package/docs/guias/recuperar-emissao.md +33 -0
- package/docs/guias/rejeicoes.md +70 -0
- package/docs/guias/testes.md +79 -0
- package/docs/guias/timeouts.md +33 -0
- package/docs/referencia/ambientes.md +35 -0
- package/docs/referencia/api.md +137 -0
- package/docs/referencia/erros.md +55 -0
- package/docs/tutoriais/primeira-nfse.md +130 -0
- package/examples/README.md +3 -1
- package/examples/cancel-nfse.ts +29 -0
- package/examples/client-resource.ts +3 -5
- package/examples/emit-homologation.ts +3 -4
- package/examples/handle-errors.ts +3 -3
- package/examples/recover-emission.ts +29 -0
- package/llms.txt +97 -82
- package/package.json +31 -6
package/dist/cli.js
ADDED
|
@@ -0,0 +1,520 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `nfse` command line: diagnose the setup, inspect the certificate, validate,
|
|
3
|
+
* emit, query, cancel and explain rejections, from the terminal.
|
|
4
|
+
*
|
|
5
|
+
* npx -p @useinvio/nfse-sdk nfse doctor
|
|
6
|
+
* npx -p @useinvio/nfse-sdk nfse emit nota.json --mock
|
|
7
|
+
*/
|
|
8
|
+
import { existsSync, readFileSync, writeFileSync } from 'node:fs';
|
|
9
|
+
import { createInterface } from 'node:readline';
|
|
10
|
+
import { parseArgs } from 'node:util';
|
|
11
|
+
import { NfseCertificate } from './certificate.js';
|
|
12
|
+
import { CertificateValidationError } from './certificateValidation.js';
|
|
13
|
+
import { ConsultaNfseError, obterNfse, recuperarNfsePorDps } from './consultas.js';
|
|
14
|
+
import { buildDpsFromJson } from './dpsJson.js';
|
|
15
|
+
import { EmitirNotaError, prepararNota, transmitirNotaPreparada } from './emissaoNota.js';
|
|
16
|
+
import { buildCancelamentoFromJson, EventoInvalidoError } from './eventoJson.js';
|
|
17
|
+
import { registrarEvento, RegistrarEventoError } from './eventosNfse.js';
|
|
18
|
+
import { DpsFiscalValidationError, validateDpsJsonRequest } from './fiscalValidation.js';
|
|
19
|
+
import { explicarRejeicao } from './rejeicoes.js';
|
|
20
|
+
import { baixarDanfse } from './sefinClient.js';
|
|
21
|
+
import { DpsXsdValidationError, validateDpsXmlAgainstXsd } from './xsdValidation.js';
|
|
22
|
+
const VERSION = (() => {
|
|
23
|
+
try {
|
|
24
|
+
return JSON.parse(readFileSync(new URL('../package.json', import.meta.url), 'utf8')).version;
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
return 'desconhecida';
|
|
28
|
+
}
|
|
29
|
+
})();
|
|
30
|
+
const HELP = `nfse ${VERSION} — NFS-e Nacional pelo terminal
|
|
31
|
+
|
|
32
|
+
Uso: nfse <comando> [opções]
|
|
33
|
+
|
|
34
|
+
Comandos
|
|
35
|
+
init [nota.json] Cria um JSON de nota de exemplo para editar
|
|
36
|
+
doctor Confere Node.js, motor XSD e certificado
|
|
37
|
+
cert [arquivo.pfx] Mostra titular, validade e fingerprint do certificado
|
|
38
|
+
validate <nota.json> Valida o JSON da DPS (regras + XSD oficial), sem enviar
|
|
39
|
+
xml <nota.json> Gera o XML da DPS não assinado
|
|
40
|
+
emit <nota.json> Emite a NFS-e (mostra o resumo e pede confirmação)
|
|
41
|
+
get <chave> Consulta uma NFS-e pela chave de acesso
|
|
42
|
+
danfse <chave> Baixa o PDF do DANFSe
|
|
43
|
+
cancel <chave> Cancela (--motivo 1|2|9 --justificativa "...")
|
|
44
|
+
recover <dpsId> Diz se a SEFIN gerou NFS-e para uma DPS (após timeout)
|
|
45
|
+
explain <código...> Explica códigos de rejeição com o texto oficial (ex.: E0014)
|
|
46
|
+
mcp Inicia o servidor MCP (stdio)
|
|
47
|
+
|
|
48
|
+
Opções
|
|
49
|
+
--producao Usa o ambiente de produção (padrão: produção restrita)
|
|
50
|
+
--mock Usa uma SEFIN simulada e um certificado de teste
|
|
51
|
+
--cert <arquivo.pfx> Certificado A1 (padrão: NFSE_CERT_PATH / NFSE_CERT_BASE64)
|
|
52
|
+
--password-file <arq> Arquivo com a senha (padrão: NFSE_CERT_PASSWORD[_FILE] ou pergunta)
|
|
53
|
+
-o, --output <arquivo> Salva o XML, a resposta ou o PDF
|
|
54
|
+
-y, --yes Não pede confirmação (emit, cancel)
|
|
55
|
+
--json Saída em JSON
|
|
56
|
+
-h, --help Esta ajuda
|
|
57
|
+
-v, --version Versão
|
|
58
|
+
|
|
59
|
+
Exemplos
|
|
60
|
+
nfse init
|
|
61
|
+
nfse doctor
|
|
62
|
+
nfse validate nota.json
|
|
63
|
+
nfse emit nota.json --mock
|
|
64
|
+
nfse explain E0014 E0312
|
|
65
|
+
`;
|
|
66
|
+
const useColor = process.stdout.isTTY && !process.env.NO_COLOR;
|
|
67
|
+
const paint = (code) => (text) => (useColor ? `\x1b[${code}m${text}\x1b[0m` : text);
|
|
68
|
+
const green = paint(32);
|
|
69
|
+
const red = paint(31);
|
|
70
|
+
const yellow = paint(33);
|
|
71
|
+
const bold = paint(1);
|
|
72
|
+
const dim = paint(2);
|
|
73
|
+
const ok = (text) => console.log(`${green('✔')} ${text}`);
|
|
74
|
+
const bad = (text) => console.log(`${red('✖')} ${text}`);
|
|
75
|
+
const warn = (text) => console.log(`${yellow('⚠')} ${text}`);
|
|
76
|
+
class CliError extends Error {
|
|
77
|
+
exitCode;
|
|
78
|
+
constructor(message, exitCode = 1) {
|
|
79
|
+
super(message);
|
|
80
|
+
this.exitCode = exitCode;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
function ambienteOf(options) {
|
|
84
|
+
if (options.producao)
|
|
85
|
+
return 'producao';
|
|
86
|
+
const env = process.env.NFSE_AMBIENTE?.trim().toLowerCase();
|
|
87
|
+
return env === 'producao' ? 'producao' : 'restrita';
|
|
88
|
+
}
|
|
89
|
+
async function ask(question, hidden = false, hint = 'Use --password-file ou NFSE_CERT_PASSWORD_FILE.') {
|
|
90
|
+
if (!process.stdin.isTTY)
|
|
91
|
+
throw new CliError(`Entrada interativa indisponível. ${hint}`);
|
|
92
|
+
const rl = createInterface({ input: process.stdin, output: process.stdout, terminal: true });
|
|
93
|
+
if (hidden) {
|
|
94
|
+
const output = rl;
|
|
95
|
+
output._writeToOutput = (text) => {
|
|
96
|
+
if (text.includes(question))
|
|
97
|
+
output.output.write(text);
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
try {
|
|
101
|
+
return await new Promise((resolve) => rl.question(question, resolve));
|
|
102
|
+
}
|
|
103
|
+
finally {
|
|
104
|
+
rl.close();
|
|
105
|
+
if (hidden)
|
|
106
|
+
process.stdout.write('\n');
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
async function loadCertificate(options, required) {
|
|
110
|
+
if (options.mock) {
|
|
111
|
+
const { createTestCertificate } = await import('./testing.js');
|
|
112
|
+
return createTestCertificate().certificate;
|
|
113
|
+
}
|
|
114
|
+
const path = options.cert ?? process.env.NFSE_CERT_PATH;
|
|
115
|
+
if (!path && !process.env.NFSE_CERT_BASE64) {
|
|
116
|
+
if (required)
|
|
117
|
+
throw new CliError('Certificado não configurado. Use --cert, NFSE_CERT_PATH/NFSE_CERT_BASE64, ou --mock para testar.');
|
|
118
|
+
return undefined;
|
|
119
|
+
}
|
|
120
|
+
let password;
|
|
121
|
+
if (options['password-file'])
|
|
122
|
+
password = readFileSync(options['password-file'], 'utf8').replace(/\r?\n$/, '');
|
|
123
|
+
else if (process.env.NFSE_CERT_PASSWORD_FILE)
|
|
124
|
+
password = readFileSync(process.env.NFSE_CERT_PASSWORD_FILE, 'utf8').replace(/\r?\n$/, '');
|
|
125
|
+
else if (process.env.NFSE_CERT_PASSWORD !== undefined)
|
|
126
|
+
password = process.env.NFSE_CERT_PASSWORD;
|
|
127
|
+
else
|
|
128
|
+
password = await ask('Senha do certificado: ', true);
|
|
129
|
+
if (path)
|
|
130
|
+
return NfseCertificate.fromFile(path, password);
|
|
131
|
+
return NfseCertificate.fromBase64(process.env.NFSE_CERT_BASE64, password);
|
|
132
|
+
}
|
|
133
|
+
function readRequest(file, ambiente) {
|
|
134
|
+
if (!file)
|
|
135
|
+
throw new CliError('Informe o arquivo JSON da nota. Ex.: nfse validate nota.json');
|
|
136
|
+
let parsed;
|
|
137
|
+
try {
|
|
138
|
+
parsed = JSON.parse(readFileSync(file, 'utf8'));
|
|
139
|
+
}
|
|
140
|
+
catch (error) {
|
|
141
|
+
throw new CliError(`Não foi possível ler ${file}: ${error instanceof Error ? error.message : String(error)}`);
|
|
142
|
+
}
|
|
143
|
+
const request = parsed;
|
|
144
|
+
if (request && typeof request === 'object' && request.ambiente && request.ambiente !== ambiente) {
|
|
145
|
+
throw new CliError(`O arquivo pede ambiente "${request.ambiente}", mas o comando roda em "${ambiente}". Use --producao ou remova "ambiente" do JSON.`);
|
|
146
|
+
}
|
|
147
|
+
return { ...request, ambiente };
|
|
148
|
+
}
|
|
149
|
+
function printExplanations(explicacoes) {
|
|
150
|
+
for (const e of explicacoes) {
|
|
151
|
+
console.log(`\n${bold(e.codigo)} ${e.conhecida ? '' : dim('(fora do catálogo oficial)')}`);
|
|
152
|
+
if (e.descricaoRecebida)
|
|
153
|
+
console.log(` Recebido: ${e.descricaoRecebida}${e.complemento ? ` (${e.complemento})` : ''}`);
|
|
154
|
+
if (e.mensagemOficial && e.mensagemOficial !== e.descricaoRecebida)
|
|
155
|
+
console.log(` Mensagem oficial: ${e.mensagemOficial}`);
|
|
156
|
+
if (e.regra && e.regra !== e.mensagemOficial)
|
|
157
|
+
console.log(` Regra: ${e.regra.replace(/\n+/g, ' ')}`);
|
|
158
|
+
if (e.campo)
|
|
159
|
+
console.log(` Campo: ${e.campo}`);
|
|
160
|
+
if (e.dica)
|
|
161
|
+
console.log(` ${dim(e.dica)}`);
|
|
162
|
+
if (e.fonte)
|
|
163
|
+
console.log(` ${dim(`Fonte: ${e.fonte.documento}`)}`);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
function printRejection(erros, status, options) {
|
|
167
|
+
if (options.json) {
|
|
168
|
+
console.log(JSON.stringify({ ok: false, status, erros, explicacoes: erros.map((erro) => explicarRejeicao(erro)) }, null, 2));
|
|
169
|
+
}
|
|
170
|
+
else {
|
|
171
|
+
bad(`A SEFIN rejeitou (HTTP ${status}).`);
|
|
172
|
+
printExplanations(erros.map((erro) => explicarRejeicao(erro)));
|
|
173
|
+
}
|
|
174
|
+
throw new CliError('', 2);
|
|
175
|
+
}
|
|
176
|
+
function printResumo(resumo) {
|
|
177
|
+
console.log(` Chave de acesso ${bold(resumo.chaveAcesso)}`);
|
|
178
|
+
console.log(` Número ${resumo.nNFSe} Situação ${resumo.cStat} Ambiente ${resumo.ambiente}`);
|
|
179
|
+
console.log(` Emitente ${resumo.emitente.CNPJ ?? resumo.emitente.CPF ?? '-'} ${resumo.emitente.xNome ?? ''}`);
|
|
180
|
+
if (resumo.tomador)
|
|
181
|
+
console.log(` Tomador ${resumo.tomador.CNPJ ?? resumo.tomador.CPF ?? resumo.tomador.NIF ?? '-'} ${resumo.tomador.xNome ?? ''}`);
|
|
182
|
+
console.log(` Competência ${resumo.dps.dCompet} DPS ${resumo.dps.serie}/${resumo.dps.nDPS}`);
|
|
183
|
+
console.log(` Valor líquido R$ ${resumo.valores.vLiq}${resumo.valores.vISSQN ? ` ISSQN R$ ${resumo.valores.vISSQN}` : ''}`);
|
|
184
|
+
}
|
|
185
|
+
async function confirm(options, ambiente, action) {
|
|
186
|
+
if (options.yes)
|
|
187
|
+
return;
|
|
188
|
+
const label = ambiente === 'producao' ? red('PRODUÇÃO (validade jurídica)') : 'produção restrita (teste)';
|
|
189
|
+
const expected = ambiente === 'producao' ? 'emitir' : 's';
|
|
190
|
+
const answer = await ask(`\n${action} em ${label}? ${ambiente === 'producao' ? 'Digite "emitir" para confirmar' : '[s/N]'}: `, false, 'Use --yes para confirmar sem perguntar.');
|
|
191
|
+
if (answer.trim().toLowerCase() !== expected)
|
|
192
|
+
throw new CliError('Cancelado. Nada foi enviado.', 0);
|
|
193
|
+
}
|
|
194
|
+
const commands = {
|
|
195
|
+
async init(args) {
|
|
196
|
+
const file = args[0] ?? 'nota.json';
|
|
197
|
+
if (existsSync(file))
|
|
198
|
+
throw new CliError(`${file} já existe; escolha outro nome: nfse init outra-nota.json`);
|
|
199
|
+
const { examplePayload } = await import('./cliExample.js');
|
|
200
|
+
const { ambiente: _ambiente, ...payload } = examplePayload();
|
|
201
|
+
writeFileSync(file, `${JSON.stringify(payload, null, 2)}\n`);
|
|
202
|
+
ok(`${file} criado com valores ilustrativos.`);
|
|
203
|
+
warn('Troque CNPJ, municípios, código de serviço e tributação pelos do seu prestador antes de emitir.');
|
|
204
|
+
console.log(`Próximo passo: nfse validate ${file}`);
|
|
205
|
+
},
|
|
206
|
+
async doctor(_args, options) {
|
|
207
|
+
let failures = 0;
|
|
208
|
+
const [major] = process.versions.node.split('.').map(Number);
|
|
209
|
+
if (major >= 20)
|
|
210
|
+
ok(`Node.js ${process.versions.node}`);
|
|
211
|
+
else {
|
|
212
|
+
bad(`Node.js ${process.versions.node}: o SDK exige 20 ou mais recente`);
|
|
213
|
+
failures++;
|
|
214
|
+
}
|
|
215
|
+
try {
|
|
216
|
+
const { examplePayload } = await import('./cliExample.js');
|
|
217
|
+
validateDpsXmlAgainstXsd(buildDpsFromJson(examplePayload()).xml);
|
|
218
|
+
ok('Motor XSD (libxml2 WebAssembly) e schemas oficiais v1.01 carregados');
|
|
219
|
+
}
|
|
220
|
+
catch (error) {
|
|
221
|
+
bad(`Motor XSD: ${error instanceof Error ? error.message : String(error)}`);
|
|
222
|
+
failures++;
|
|
223
|
+
}
|
|
224
|
+
const ambiente = ambienteOf(options);
|
|
225
|
+
ok(`Ambiente: ${ambiente === 'producao' ? red('produção') : 'produção restrita'}${options.mock ? ' (SEFIN simulada)' : ''}`);
|
|
226
|
+
try {
|
|
227
|
+
const certificate = await loadCertificate(options, false);
|
|
228
|
+
if (!certificate) {
|
|
229
|
+
warn('Certificado não configurado: defina NFSE_CERT_PATH e NFSE_CERT_PASSWORD (ou use --mock)');
|
|
230
|
+
}
|
|
231
|
+
else if (certificate instanceof NfseCertificate) {
|
|
232
|
+
const days = certificate.daysUntilExpiry();
|
|
233
|
+
const holder = certificate.cnpj ? `CNPJ ${certificate.cnpj}` : certificate.cpf ? `CPF ${certificate.cpf}` : 'sem CNPJ/CPF ICP-Brasil';
|
|
234
|
+
if (!certificate.isValidAt()) {
|
|
235
|
+
bad(`Certificado ${holder} fora da vigência (até ${certificate.notAfter.toISOString().slice(0, 10)})`);
|
|
236
|
+
failures++;
|
|
237
|
+
}
|
|
238
|
+
else if (days < 30)
|
|
239
|
+
warn(`Certificado ${holder} vence em ${days} dias (${certificate.notAfter.toISOString().slice(0, 10)})`);
|
|
240
|
+
else
|
|
241
|
+
ok(`Certificado ${holder}, válido por mais ${days} dias`);
|
|
242
|
+
if (!certificate.cnpj && !certificate.cpf)
|
|
243
|
+
warn('O certificado não traz CNPJ/CPF nos campos ICP-Brasil: informe o autor ao cancelar');
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
catch (error) {
|
|
247
|
+
bad(`Certificado: ${error instanceof CertificateValidationError ? `${error.code}: ${error.message}` : error instanceof Error ? error.message : String(error)}`);
|
|
248
|
+
failures++;
|
|
249
|
+
}
|
|
250
|
+
console.log(failures ? `\n${failures} problema(s) encontrado(s).` : `\n${green('Tudo pronto.')} Próximo passo: nfse validate nota.json`);
|
|
251
|
+
if (failures)
|
|
252
|
+
throw new CliError('', 1);
|
|
253
|
+
},
|
|
254
|
+
async cert(args, options) {
|
|
255
|
+
const certificate = await loadCertificate({ ...options, cert: args[0] ?? options.cert }, true);
|
|
256
|
+
if (!(certificate instanceof NfseCertificate))
|
|
257
|
+
throw new CliError('Certificado legado não suportado aqui.');
|
|
258
|
+
if (options.json) {
|
|
259
|
+
console.log(JSON.stringify({ ...certificate.toJSON(), diasRestantes: certificate.daysUntilExpiry() }, null, 2));
|
|
260
|
+
return;
|
|
261
|
+
}
|
|
262
|
+
console.log(` Titular ${certificate.subject}`);
|
|
263
|
+
console.log(` CNPJ / CPF ${certificate.cnpj ?? certificate.cpf ?? '—'}`);
|
|
264
|
+
console.log(` Emissor ${certificate.issuer}`);
|
|
265
|
+
console.log(` Validade ${certificate.notBefore.toISOString().slice(0, 10)} a ${certificate.notAfter.toISOString().slice(0, 10)} (${certificate.daysUntilExpiry()} dias restantes)`);
|
|
266
|
+
console.log(` Fingerprint ${certificate.fingerprintSha256}`);
|
|
267
|
+
},
|
|
268
|
+
async validate(args, options) {
|
|
269
|
+
const ambiente = ambienteOf(options);
|
|
270
|
+
const request = readRequest(args[0], ambiente);
|
|
271
|
+
const report = validateDpsJsonRequest(request);
|
|
272
|
+
let xmlIssue = [];
|
|
273
|
+
if (report.valid) {
|
|
274
|
+
try {
|
|
275
|
+
validateDpsXmlAgainstXsd(buildDpsFromJson(request).xml);
|
|
276
|
+
}
|
|
277
|
+
catch (error) {
|
|
278
|
+
if (!(error instanceof DpsXsdValidationError))
|
|
279
|
+
throw error;
|
|
280
|
+
xmlIssue = error.details;
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
const valid = report.valid && xmlIssue.length === 0;
|
|
284
|
+
if (options.json) {
|
|
285
|
+
console.log(JSON.stringify({ valid, issues: report.issues, warnings: report.warnings, xsd: xmlIssue }, null, 2));
|
|
286
|
+
}
|
|
287
|
+
else {
|
|
288
|
+
for (const issue of report.issues)
|
|
289
|
+
bad(`${issue.path}: ${issue.message}${issue.suggestion ? dim(` — ${issue.suggestion}`) : ''}`);
|
|
290
|
+
for (const detail of xmlIssue)
|
|
291
|
+
bad(`XSD: ${detail}`);
|
|
292
|
+
for (const warning of report.warnings)
|
|
293
|
+
warn(`${warning.path}: ${warning.message}`);
|
|
294
|
+
if (valid)
|
|
295
|
+
ok(`DPS válida (${ambiente}). Próximo passo: nfse emit ${args[0]}`);
|
|
296
|
+
}
|
|
297
|
+
if (!valid)
|
|
298
|
+
throw new CliError('', 1);
|
|
299
|
+
},
|
|
300
|
+
async xml(args, options) {
|
|
301
|
+
const { id, xml } = buildDpsFromJson(readRequest(args[0], ambienteOf(options)));
|
|
302
|
+
validateDpsXmlAgainstXsd(xml);
|
|
303
|
+
if (options.output) {
|
|
304
|
+
writeFileSync(options.output, xml);
|
|
305
|
+
ok(`${id} salvo em ${options.output}`);
|
|
306
|
+
}
|
|
307
|
+
else
|
|
308
|
+
console.log(xml);
|
|
309
|
+
},
|
|
310
|
+
async emit(args, options) {
|
|
311
|
+
const ambiente = ambienteOf(options);
|
|
312
|
+
const request = readRequest(args[0], ambiente);
|
|
313
|
+
if (options.mock)
|
|
314
|
+
(await import('./testing.js')).installMockSefin();
|
|
315
|
+
const certificate = (await loadCertificate(options, true));
|
|
316
|
+
const nota = prepararNota(request, certificate);
|
|
317
|
+
const emissao = request.emissao;
|
|
318
|
+
if (!options.json) {
|
|
319
|
+
console.log(bold('\nResumo da NFS-e'));
|
|
320
|
+
console.log(` Prestador ${request.prestador?.cnpj ?? '-'}`);
|
|
321
|
+
if (emissao.tomador)
|
|
322
|
+
console.log(` Tomador ${emissao.tomador.CNPJ ?? emissao.tomador.CPF ?? emissao.tomador.NIF ?? '-'} ${emissao.tomador.xNome ?? ''}`);
|
|
323
|
+
console.log(` Serviço ${request.servico?.cTribNac ?? '-'} ${request.servico?.xDescServ ?? ''}`);
|
|
324
|
+
console.log(` Valor R$ ${emissao.valores?.vServ ?? emissao.vServ ?? '-'}`);
|
|
325
|
+
console.log(` DPS ${nota.dpsId}`);
|
|
326
|
+
}
|
|
327
|
+
await confirm(options, ambiente, 'Emitir esta NFS-e');
|
|
328
|
+
try {
|
|
329
|
+
const result = await transmitirNotaPreparada(nota, certificate);
|
|
330
|
+
if (options.output)
|
|
331
|
+
writeFileSync(options.output, result.nfseXml);
|
|
332
|
+
if (options.json)
|
|
333
|
+
console.log(JSON.stringify({ ok: true, chaveAcesso: result.chaveAcesso, dpsId: result.dpsId }, null, 2));
|
|
334
|
+
else
|
|
335
|
+
ok(`NFS-e emitida. Chave de acesso: ${bold(result.chaveAcesso)}${options.output ? ` (XML em ${options.output})` : ''}`);
|
|
336
|
+
}
|
|
337
|
+
catch (error) {
|
|
338
|
+
if (error instanceof EmitirNotaError && !error.erros.some((e) => e.Codigo === 'INVALID_AUTHORIZATION_RESPONSE'))
|
|
339
|
+
printRejection(error.erros, error.status, options);
|
|
340
|
+
warn(`Sem resposta clara da SEFIN (${error instanceof Error ? error.message : String(error)}). Consultando a DPS antes de qualquer reenvio...`);
|
|
341
|
+
const existing = await recuperarNfsePorDps(nota.dpsId, certificate, ambiente, { retries: 3 });
|
|
342
|
+
if (existing) {
|
|
343
|
+
ok(`A NFS-e foi emitida. Chave de acesso: ${bold(existing.chaveAcesso)}`);
|
|
344
|
+
return;
|
|
345
|
+
}
|
|
346
|
+
throw new CliError(`A SEFIN não recebeu a DPS ${nota.dpsId}. É seguro rodar o mesmo comando de novo.`);
|
|
347
|
+
}
|
|
348
|
+
},
|
|
349
|
+
async get(args, options) {
|
|
350
|
+
const chave = args[0];
|
|
351
|
+
if (!chave)
|
|
352
|
+
throw new CliError('Informe a chave de acesso (50 dígitos).');
|
|
353
|
+
const certificate = (await loadCertificate(options, true));
|
|
354
|
+
try {
|
|
355
|
+
const nota = await obterNfse(chave, certificate, ambienteOf(options));
|
|
356
|
+
if (options.output)
|
|
357
|
+
writeFileSync(options.output, nota.nfseXml);
|
|
358
|
+
if (options.json)
|
|
359
|
+
console.log(JSON.stringify(nota.resumo, null, 2));
|
|
360
|
+
else
|
|
361
|
+
printResumo(nota.resumo);
|
|
362
|
+
}
|
|
363
|
+
catch (error) {
|
|
364
|
+
if (error instanceof ConsultaNfseError && error.notFound)
|
|
365
|
+
throw new CliError(`NFS-e não encontrada em ${ambienteOf(options)}.`);
|
|
366
|
+
if (error instanceof ConsultaNfseError)
|
|
367
|
+
printRejection(error.erros, error.status, options);
|
|
368
|
+
throw error;
|
|
369
|
+
}
|
|
370
|
+
},
|
|
371
|
+
async danfse(args, options) {
|
|
372
|
+
const chave = args[0];
|
|
373
|
+
if (!chave)
|
|
374
|
+
throw new CliError('Informe a chave de acesso (50 dígitos).');
|
|
375
|
+
const certificate = (await loadCertificate(options, true));
|
|
376
|
+
const result = await baixarDanfse(chave, certificate, ambienteOf(options));
|
|
377
|
+
if (!result.pdf)
|
|
378
|
+
throw new CliError(`DANFSe indisponível (HTTP ${result.status}).`);
|
|
379
|
+
const output = options.output ?? `danfse-${chave}.pdf`;
|
|
380
|
+
writeFileSync(output, result.pdf);
|
|
381
|
+
ok(`DANFSe salvo em ${output}`);
|
|
382
|
+
},
|
|
383
|
+
async cancel(args, options) {
|
|
384
|
+
const chave = args[0];
|
|
385
|
+
if (!chave)
|
|
386
|
+
throw new CliError('Informe a chave de acesso (50 dígitos).');
|
|
387
|
+
const ambiente = ambienteOf(options);
|
|
388
|
+
const certificate = (await loadCertificate(options, true));
|
|
389
|
+
const autor = certificate instanceof NfseCertificate && (certificate.cnpj || certificate.cpf)
|
|
390
|
+
? (certificate.cnpj ? { CNPJ: certificate.cnpj } : { CPF: certificate.cpf })
|
|
391
|
+
: undefined;
|
|
392
|
+
if (!autor)
|
|
393
|
+
throw new CliError('O certificado não traz CNPJ/CPF ICP-Brasil; cancele pelo SDK informando o autor.');
|
|
394
|
+
const built = buildCancelamentoFromJson({
|
|
395
|
+
ambiente,
|
|
396
|
+
chaveAcesso: chave,
|
|
397
|
+
autor,
|
|
398
|
+
cMotivo: (options.motivo ?? ''),
|
|
399
|
+
xMotivo: options.justificativa ?? '',
|
|
400
|
+
});
|
|
401
|
+
const nota = await obterNfse(chave, certificate, ambiente).catch(() => undefined);
|
|
402
|
+
if (nota && !options.json) {
|
|
403
|
+
console.log(bold('\nNFS-e a cancelar'));
|
|
404
|
+
printResumo(nota.resumo);
|
|
405
|
+
}
|
|
406
|
+
await confirm(options, ambiente, 'Cancelar esta NFS-e');
|
|
407
|
+
try {
|
|
408
|
+
const result = await registrarEvento(built, certificate);
|
|
409
|
+
if (options.json)
|
|
410
|
+
console.log(JSON.stringify({ ok: true, pedRegEventoId: result.pedRegEventoId }, null, 2));
|
|
411
|
+
else
|
|
412
|
+
ok(`Cancelamento registrado (${result.pedRegEventoId}).`);
|
|
413
|
+
}
|
|
414
|
+
catch (error) {
|
|
415
|
+
if (error instanceof RegistrarEventoError)
|
|
416
|
+
printRejection(error.erros, error.status, options);
|
|
417
|
+
throw error;
|
|
418
|
+
}
|
|
419
|
+
},
|
|
420
|
+
async recover(args, options) {
|
|
421
|
+
const dpsId = args[0];
|
|
422
|
+
if (!dpsId)
|
|
423
|
+
throw new CliError('Informe o Id da DPS ("DPS" + 42 dígitos).');
|
|
424
|
+
const certificate = (await loadCertificate(options, true));
|
|
425
|
+
const nota = await recuperarNfsePorDps(dpsId, certificate, ambienteOf(options));
|
|
426
|
+
if (options.json) {
|
|
427
|
+
console.log(JSON.stringify(nota ? { encontrada: true, ...nota.resumo } : { encontrada: false }, null, 2));
|
|
428
|
+
return;
|
|
429
|
+
}
|
|
430
|
+
if (!nota) {
|
|
431
|
+
warn('A SEFIN não tem NFS-e para esta DPS: ela não chegou a ser processada. É seguro reenviar a mesma DPS.');
|
|
432
|
+
return;
|
|
433
|
+
}
|
|
434
|
+
ok('A SEFIN gerou a NFS-e:');
|
|
435
|
+
printResumo(nota.resumo);
|
|
436
|
+
},
|
|
437
|
+
async explain(args, options) {
|
|
438
|
+
if (!args.length)
|
|
439
|
+
throw new CliError('Informe um ou mais códigos. Ex.: nfse explain E0014');
|
|
440
|
+
const explicacoes = args.map((codigo) => explicarRejeicao(codigo));
|
|
441
|
+
if (options.json)
|
|
442
|
+
console.log(JSON.stringify(explicacoes, null, 2));
|
|
443
|
+
else
|
|
444
|
+
printExplanations(explicacoes);
|
|
445
|
+
},
|
|
446
|
+
async mcp() {
|
|
447
|
+
const { runNfseMcpStdio } = await import('./mcpServer.js');
|
|
448
|
+
await runNfseMcpStdio();
|
|
449
|
+
},
|
|
450
|
+
};
|
|
451
|
+
/** Entry point; exported for tests. Returns the process exit code. */
|
|
452
|
+
export async function runCli(argv) {
|
|
453
|
+
let parsed;
|
|
454
|
+
try {
|
|
455
|
+
parsed = parseArgs({
|
|
456
|
+
args: argv,
|
|
457
|
+
allowPositionals: true,
|
|
458
|
+
options: {
|
|
459
|
+
producao: { type: 'boolean', default: false },
|
|
460
|
+
mock: { type: 'boolean', default: false },
|
|
461
|
+
cert: { type: 'string' },
|
|
462
|
+
'password-file': { type: 'string' },
|
|
463
|
+
output: { type: 'string', short: 'o' },
|
|
464
|
+
yes: { type: 'boolean', short: 'y', default: false },
|
|
465
|
+
json: { type: 'boolean', default: false },
|
|
466
|
+
motivo: { type: 'string' },
|
|
467
|
+
justificativa: { type: 'string' },
|
|
468
|
+
help: { type: 'boolean', short: 'h', default: false },
|
|
469
|
+
version: { type: 'boolean', short: 'v', default: false },
|
|
470
|
+
},
|
|
471
|
+
});
|
|
472
|
+
}
|
|
473
|
+
catch (error) {
|
|
474
|
+
console.error(`${red('✖')} ${error instanceof Error ? error.message : String(error)}\n\n${HELP}`);
|
|
475
|
+
return 1;
|
|
476
|
+
}
|
|
477
|
+
const { values, positionals } = parsed;
|
|
478
|
+
if (values.version) {
|
|
479
|
+
console.log(VERSION);
|
|
480
|
+
return 0;
|
|
481
|
+
}
|
|
482
|
+
const [name, ...args] = positionals;
|
|
483
|
+
if (values.help || !name) {
|
|
484
|
+
console.log(HELP);
|
|
485
|
+
return name || values.help ? 0 : 1;
|
|
486
|
+
}
|
|
487
|
+
const command = commands[name];
|
|
488
|
+
if (!command) {
|
|
489
|
+
console.error(`${red('✖')} Comando desconhecido: ${name}\n\n${HELP}`);
|
|
490
|
+
return 1;
|
|
491
|
+
}
|
|
492
|
+
const options = values;
|
|
493
|
+
if (options.mock && options.producao) {
|
|
494
|
+
console.error(`${red('✖')} --mock não pode ser usado com --producao.`);
|
|
495
|
+
return 1;
|
|
496
|
+
}
|
|
497
|
+
try {
|
|
498
|
+
await command(args, options);
|
|
499
|
+
return 0;
|
|
500
|
+
}
|
|
501
|
+
catch (error) {
|
|
502
|
+
if (error instanceof CliError) {
|
|
503
|
+
if (error.message)
|
|
504
|
+
console.error(`${error.exitCode === 0 ? '' : `${red('✖')} `}${error.message}`);
|
|
505
|
+
return error.exitCode;
|
|
506
|
+
}
|
|
507
|
+
if (error instanceof DpsFiscalValidationError) {
|
|
508
|
+
for (const issue of error.issues)
|
|
509
|
+
console.error(`${red('✖')} ${issue.path}: ${issue.message}`);
|
|
510
|
+
return 1;
|
|
511
|
+
}
|
|
512
|
+
if (error instanceof CertificateValidationError || error instanceof EventoInvalidoError || error instanceof DpsXsdValidationError) {
|
|
513
|
+
console.error(`${red('✖')} ${error.message}`);
|
|
514
|
+
return 1;
|
|
515
|
+
}
|
|
516
|
+
console.error(`${red('✖')} ${error instanceof Error ? error.message : String(error)}`);
|
|
517
|
+
return 1;
|
|
518
|
+
}
|
|
519
|
+
}
|
|
520
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../cli.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,eAAe,EAAyB,MAAM,kBAAkB,CAAC;AAC1E,OAAO,EAAE,0BAA0B,EAAE,MAAM,4BAA4B,CAAC;AACxE,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACnF,OAAO,EAAE,gBAAgB,EAAuB,MAAM,cAAc,CAAC;AACrE,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAC1F,OAAO,EAAE,yBAAyB,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACjF,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACzE,OAAO,EAAE,wBAAwB,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AACzF,OAAO,EAAE,gBAAgB,EAA2B,MAAM,gBAAgB,CAAC;AAC3E,OAAO,EAAE,YAAY,EAAkB,MAAM,kBAAkB,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAIrF,MAAM,OAAO,GAAG,CAAC,GAAG,EAAE;IACpB,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC,iBAAiB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,OAAiB,CAAC;IACzG,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,cAAc,CAAC;IACxB,CAAC;AACH,CAAC,CAAC,EAAE,CAAC;AAEL,MAAM,IAAI,GAAG,QAAQ,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmC3B,CAAC;AAcF,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;AAC/D,MAAM,KAAK,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,CAAC,IAAY,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,IAAI,IAAI,IAAI,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AACpG,MAAM,KAAK,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;AACxB,MAAM,GAAG,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;AACtB,MAAM,MAAM,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;AACzB,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;AACtB,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;AAErB,MAAM,EAAE,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;AAClE,MAAM,GAAG,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;AACjE,MAAM,IAAI,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;AAErE,MAAM,QAAS,SAAQ,KAAK;IACmB;IAA7C,YAAY,OAAe,EAAkB,WAAW,CAAC;QACvD,KAAK,CAAC,OAAO,CAAC,CAAC;QAD4B,aAAQ,GAAR,QAAQ,CAAI;IAEzD,CAAC;CACF;AAED,SAAS,UAAU,CAAC,OAAgB;IAClC,IAAI,OAAO,CAAC,QAAQ;QAAE,OAAO,UAAU,CAAC;IACxC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC5D,OAAO,GAAG,KAAK,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC;AACtD,CAAC;AAED,KAAK,UAAU,GAAG,CAAC,QAAgB,EAAE,MAAM,GAAG,KAAK,EAAE,IAAI,GAAG,iDAAiD;IAC3G,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK;QAAE,MAAM,IAAI,QAAQ,CAAC,oCAAoC,IAAI,EAAE,CAAC,CAAC;IACzF,MAAM,EAAE,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7F,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,MAAM,GAAG,EAAuF,CAAC;QACvG,MAAM,CAAC,cAAc,GAAG,CAAC,IAAY,EAAE,EAAE;YACvC,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;gBAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACzD,CAAC,CAAC;IACJ,CAAC;IACD,IAAI,CAAC;QACH,OAAO,MAAM,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;IAChF,CAAC;YAAS,CAAC;QACT,EAAE,CAAC,KAAK,EAAE,CAAC;QACX,IAAI,MAAM;YAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC;AACH,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,OAAgB,EAAE,QAAiB;IAChE,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,MAAM,EAAE,qBAAqB,EAAE,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC;QAC/D,OAAO,qBAAqB,EAAE,CAAC,WAAW,CAAC;IAC7C,CAAC;IACD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;IACxD,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QAC3C,IAAI,QAAQ;YAAE,MAAM,IAAI,QAAQ,CAAC,kGAAkG,CAAC,CAAC;QACrI,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,IAAI,QAA4B,CAAC;IACjC,IAAI,OAAO,CAAC,eAAe,CAAC;QAAE,QAAQ,GAAG,YAAY,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;SACzG,IAAI,OAAO,CAAC,GAAG,CAAC,uBAAuB;QAAE,QAAQ,GAAG,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,uBAAuB,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;SACpI,IAAI,OAAO,CAAC,GAAG,CAAC,kBAAkB,KAAK,SAAS;QAAE,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;;QAC5F,QAAQ,GAAG,MAAM,GAAG,CAAC,wBAAwB,EAAE,IAAI,CAAC,CAAC;IAC1D,IAAI,IAAI;QAAE,OAAO,eAAe,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC1D,OAAO,eAAe,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAiB,EAAE,QAAQ,CAAC,CAAC;AAC7E,CAAC;AAED,SAAS,WAAW,CAAC,IAAwB,EAAE,QAAkB;IAC/D,IAAI,CAAC,IAAI;QAAE,MAAM,IAAI,QAAQ,CAAC,8DAA8D,CAAC,CAAC;IAC9F,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;IAClD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,QAAQ,CAAC,wBAAwB,IAAI,KAAK,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAChH,CAAC;IACD,MAAM,OAAO,GAAG,MAAwB,CAAC;IACzC,IAAI,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAChG,MAAM,IAAI,QAAQ,CAAC,4BAA4B,OAAO,CAAC,QAAQ,6BAA6B,QAAQ,iDAAiD,CAAC,CAAC;IACzJ,CAAC;IACD,OAAO,EAAE,GAAG,OAAO,EAAE,QAAQ,EAAE,CAAC;AAClC,CAAC;AAED,SAAS,iBAAiB,CAAC,WAAiC;IAC1D,KAAK,MAAM,CAAC,IAAI,WAAW,EAAE,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,4BAA4B,CAAC,EAAE,CAAC,CAAC;QAC3F,IAAI,CAAC,CAAC,iBAAiB;YAAE,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,iBAAiB,GAAG,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACxH,IAAI,CAAC,CAAC,eAAe,IAAI,CAAC,CAAC,eAAe,KAAK,CAAC,CAAC,iBAAiB;YAAE,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC;QAC5H,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,eAAe;YAAE,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;QACtG,IAAI,CAAC,CAAC,KAAK;YAAE,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;QAChD,IAAI,CAAC,CAAC,IAAI;YAAE,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC5C,IAAI,CAAC,CAAC,KAAK;YAAE,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC;IACtE,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CAAC,KAAkB,EAAE,MAAc,EAAE,OAAgB;IAC1E,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC/H,CAAC;SAAM,CAAC;QACN,GAAG,CAAC,0BAA0B,MAAM,IAAI,CAAC,CAAC;QAC1C,iBAAiB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjE,CAAC;IACD,MAAM,IAAI,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;AAC5B,CAAC;AAED,SAAS,WAAW,CAAC,MAAkB;IACrC,OAAO,CAAC,GAAG,CAAC,sBAAsB,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IAC9D,OAAO,CAAC,GAAG,CAAC,sBAAsB,MAAM,CAAC,KAAK,eAAe,MAAM,CAAC,KAAK,eAAe,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC3G,OAAO,CAAC,GAAG,CAAC,sBAAsB,MAAM,CAAC,QAAQ,CAAC,IAAI,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,IAAI,GAAG,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC,CAAC;IACvH,IAAI,MAAM,CAAC,OAAO;QAAE,OAAO,CAAC,GAAG,CAAC,sBAAsB,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,IAAI,GAAG,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC,CAAC;IAC9J,OAAO,CAAC,GAAG,CAAC,sBAAsB,MAAM,CAAC,GAAG,CAAC,OAAO,UAAU,MAAM,CAAC,GAAG,CAAC,KAAK,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;IACrG,OAAO,CAAC,GAAG,CAAC,yBAAyB,MAAM,CAAC,OAAO,CAAC,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,eAAe,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACpI,CAAC;AAED,KAAK,UAAU,OAAO,CAAC,OAAgB,EAAE,QAAkB,EAAE,MAAc;IACzE,IAAI,OAAO,CAAC,GAAG;QAAE,OAAO;IACxB,MAAM,KAAK,GAAG,QAAQ,KAAK,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC,CAAC,CAAC,2BAA2B,CAAC;IAC1G,MAAM,QAAQ,GAAG,QAAQ,KAAK,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC;IAC1D,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,KAAK,MAAM,OAAO,KAAK,KAAK,QAAQ,KAAK,UAAU,CAAC,CAAC,CAAC,gCAAgC,CAAC,CAAC,CAAC,OAAO,IAAI,EAAE,KAAK,EAAE,yCAAyC,CAAC,CAAC;IACjL,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,QAAQ;QAAE,MAAM,IAAI,QAAQ,CAAC,8BAA8B,EAAE,CAAC,CAAC,CAAC;AACtG,CAAC;AAED,MAAM,QAAQ,GAAwE;IACpF,KAAK,CAAC,IAAI,CAAC,IAAI;QACb,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,WAAW,CAAC;QACpC,IAAI,UAAU,CAAC,IAAI,CAAC;YAAE,MAAM,IAAI,QAAQ,CAAC,GAAG,IAAI,2DAA2D,CAAC,CAAC;QAC7G,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAC;QAC3D,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,OAAO,EAAE,GAAG,cAAc,EAAE,CAAC;QAC7D,aAAa,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;QAC7D,EAAE,CAAC,GAAG,IAAI,mCAAmC,CAAC,CAAC;QAC/C,IAAI,CAAC,iGAAiG,CAAC,CAAC;QACxG,OAAO,CAAC,GAAG,CAAC,gCAAgC,IAAI,EAAE,CAAC,CAAC;IACtD,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO;QACzB,IAAI,QAAQ,GAAG,CAAC,CAAC;QACjB,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC7D,IAAI,KAAK,IAAI,EAAE;YAAE,EAAE,CAAC,WAAW,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;aACnD,CAAC;YAAC,GAAG,CAAC,WAAW,OAAO,CAAC,QAAQ,CAAC,IAAI,kCAAkC,CAAC,CAAC;YAAC,QAAQ,EAAE,CAAC;QAAC,CAAC;QAE7F,IAAI,CAAC;YACH,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAC;YAC3D,wBAAwB,CAAC,gBAAgB,CAAC,cAAc,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;YACjE,EAAE,CAAC,qEAAqE,CAAC,CAAC;QAC5E,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,GAAG,CAAC,cAAc,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAC5E,QAAQ,EAAE,CAAC;QACb,CAAC;QAED,MAAM,QAAQ,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;QACrC,EAAE,CAAC,aAAa,QAAQ,KAAK,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAE7H,IAAI,CAAC;YACH,MAAM,WAAW,GAAG,MAAM,eAAe,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YAC1D,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,IAAI,CAAC,yFAAyF,CAAC,CAAC;YAClG,CAAC;iBAAM,IAAI,WAAW,YAAY,eAAe,EAAE,CAAC;gBAClD,MAAM,IAAI,GAAG,WAAW,CAAC,eAAe,EAAE,CAAC;gBAC3C,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,yBAAyB,CAAC;gBACtI,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,EAAE,CAAC;oBAAC,GAAG,CAAC,eAAe,MAAM,0BAA0B,WAAW,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;oBAAC,QAAQ,EAAE,CAAC;gBAAC,CAAC;qBAChJ,IAAI,IAAI,GAAG,EAAE;oBAAE,IAAI,CAAC,eAAe,MAAM,aAAa,IAAI,UAAU,WAAW,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;;oBACxH,EAAE,CAAC,eAAe,MAAM,qBAAqB,IAAI,OAAO,CAAC,CAAC;gBAC/D,IAAI,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG;oBAAE,IAAI,CAAC,oFAAoF,CAAC,CAAC;YACxI,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,GAAG,CAAC,gBAAgB,KAAK,YAAY,0BAA0B,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAChK,QAAQ,EAAE,CAAC;QACb,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,QAAQ,6BAA6B,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,cAAc,CAAC,yCAAyC,CAAC,CAAC;QACzI,IAAI,QAAQ;YAAE,MAAM,IAAI,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IAC1C,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO;QACtB,MAAM,WAAW,GAAG,MAAM,eAAe,CAAC,EAAE,GAAG,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,CAAC;QAC/F,IAAI,CAAC,CAAC,WAAW,YAAY,eAAe,CAAC;YAAE,MAAM,IAAI,QAAQ,CAAC,wCAAwC,CAAC,CAAC;QAC5G,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,WAAW,CAAC,MAAM,EAAE,EAAE,aAAa,EAAE,WAAW,CAAC,eAAe,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAAC,OAAO;QAAC,CAAC;QAC9I,OAAO,CAAC,GAAG,CAAC,mBAAmB,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC;QACtD,OAAO,CAAC,GAAG,CAAC,mBAAmB,WAAW,CAAC,IAAI,IAAI,WAAW,CAAC,GAAG,IAAI,GAAG,EAAE,CAAC,CAAC;QAC7E,OAAO,CAAC,GAAG,CAAC,mBAAmB,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC;QACrD,OAAO,CAAC,GAAG,CAAC,mBAAmB,WAAW,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,WAAW,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,WAAW,CAAC,eAAe,EAAE,kBAAkB,CAAC,CAAC;QAC1L,OAAO,CAAC,GAAG,CAAC,mBAAmB,WAAW,CAAC,iBAAiB,EAAE,CAAC,CAAC;IAClE,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO;QAC1B,MAAM,QAAQ,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;QACrC,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;QAC/C,MAAM,MAAM,GAAG,sBAAsB,CAAC,OAAO,CAAC,CAAC;QAC/C,IAAI,QAAQ,GAAa,EAAE,CAAC;QAC5B,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YACjB,IAAI,CAAC;gBACH,wBAAwB,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC;YAC1D,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,CAAC,KAAK,YAAY,qBAAqB,CAAC;oBAAE,MAAM,KAAK,CAAC;gBAC3D,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC;YAC3B,CAAC;QACH,CAAC;QACD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC;QACpD,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAAC,CAAC;aAClI,CAAC;YACJ,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM;gBAAE,GAAG,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAClI,KAAK,MAAM,MAAM,IAAI,QAAQ;gBAAE,GAAG,CAAC,QAAQ,MAAM,EAAE,CAAC,CAAC;YACrD,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,QAAQ;gBAAE,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;YACnF,IAAI,KAAK;gBAAE,EAAE,CAAC,eAAe,QAAQ,+BAA+B,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACjF,CAAC;QACD,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IACxC,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO;QACrB,MAAM,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,gBAAgB,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAChF,wBAAwB,CAAC,GAAG,CAAC,CAAC;QAC9B,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YAAC,aAAa,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;YAAC,EAAE,CAAC,GAAG,EAAE,aAAa,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QAAC,CAAC;;YAC9F,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACxB,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO;QACtB,MAAM,QAAQ,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;QACrC,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;QAC/C,IAAI,OAAO,CAAC,IAAI;YAAE,CAAC,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,gBAAgB,EAAE,CAAC;QACpE,MAAM,WAAW,GAAG,CAAC,MAAM,eAAe,CAAC,OAAO,EAAE,IAAI,CAAC,CAAE,CAAC;QAC5D,MAAM,IAAI,GAAG,YAAY,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QAChD,MAAM,OAAO,GAAG,OAAO,CAAC,OAAyC,CAAC;QAClE,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YAClB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC;YACvC,OAAO,CAAC,GAAG,CAAC,iBAAiB,OAAO,CAAC,SAAS,EAAE,IAAI,IAAI,GAAG,EAAE,CAAC,CAAC;YAC/D,IAAI,OAAO,CAAC,OAAO;gBAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB,OAAO,CAAC,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,GAAG,IAAI,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC,CAAC;YAC9J,OAAO,CAAC,GAAG,CAAC,iBAAiB,OAAO,CAAC,OAAO,EAAE,QAAQ,IAAI,GAAG,IAAI,OAAO,CAAC,OAAO,EAAE,SAAS,IAAI,EAAE,EAAE,CAAC,CAAC;YACrG,OAAO,CAAC,GAAG,CAAC,oBAAoB,OAAO,CAAC,OAAO,EAAE,KAAK,IAAI,OAAO,CAAC,KAAK,IAAI,GAAG,EAAE,CAAC,CAAC;YAClF,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QAC7C,CAAC;QACD,MAAM,OAAO,CAAC,OAAO,EAAE,QAAQ,EAAE,mBAAmB,CAAC,CAAC;QACtD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,uBAAuB,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;YAChE,IAAI,OAAO,CAAC,MAAM;gBAAE,aAAa,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;YAClE,IAAI,OAAO,CAAC,IAAI;gBAAE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;;gBACtH,EAAE,CAAC,mCAAmC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,YAAY,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC/H,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,eAAe,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,gCAAgC,CAAC;gBAAE,cAAc,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YACpK,IAAI,CAAC,gCAAgC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,mDAAmD,CAAC,CAAC;YAChJ,MAAM,QAAQ,GAAG,MAAM,mBAAmB,CAAC,IAAI,CAAC,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;YAC9F,IAAI,QAAQ,EAAE,CAAC;gBAAC,EAAE,CAAC,yCAAyC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;gBAAC,OAAO;YAAC,CAAC;YACpG,MAAM,IAAI,QAAQ,CAAC,6BAA6B,IAAI,CAAC,KAAK,2CAA2C,CAAC,CAAC;QACzG,CAAC;IACH,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO;QACrB,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACtB,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,QAAQ,CAAC,yCAAyC,CAAC,CAAC;QAC1E,MAAM,WAAW,GAAG,CAAC,MAAM,eAAe,CAAC,OAAO,EAAE,IAAI,CAAC,CAAE,CAAC;QAC5D,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,KAAK,EAAE,WAAW,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;YACtE,IAAI,OAAO,CAAC,MAAM;gBAAE,aAAa,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;YAChE,IAAI,OAAO,CAAC,IAAI;gBAAE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;;gBAC/D,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAChC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,iBAAiB,IAAI,KAAK,CAAC,QAAQ;gBAAE,MAAM,IAAI,QAAQ,CAAC,2BAA2B,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAChI,IAAI,KAAK,YAAY,iBAAiB;gBAAE,cAAc,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YAC3F,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO;QACxB,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACtB,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,QAAQ,CAAC,yCAAyC,CAAC,CAAC;QAC1E,MAAM,WAAW,GAAG,CAAC,MAAM,eAAe,CAAC,OAAO,EAAE,IAAI,CAAC,CAAE,CAAC;QAC5D,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,KAAK,EAAE,WAAW,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;QAC3E,IAAI,CAAC,MAAM,CAAC,GAAG;YAAE,MAAM,IAAI,QAAQ,CAAC,6BAA6B,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC;QACpF,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,UAAU,KAAK,MAAM,CAAC;QACvD,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;QAClC,EAAE,CAAC,mBAAmB,MAAM,EAAE,CAAC,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO;QACxB,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACtB,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,QAAQ,CAAC,yCAAyC,CAAC,CAAC;QAC1E,MAAM,QAAQ,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;QACrC,MAAM,WAAW,GAAG,CAAC,MAAM,eAAe,CAAC,OAAO,EAAE,IAAI,CAAC,CAAE,CAAC;QAC5D,MAAM,KAAK,GAAG,WAAW,YAAY,eAAe,IAAI,CAAC,WAAW,CAAC,IAAI,IAAI,WAAW,CAAC,GAAG,CAAC;YAC3F,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,WAAW,CAAC,GAAG,EAAE,CAAC;YAC5E,CAAC,CAAC,SAAS,CAAC;QACd,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,QAAQ,CAAC,kFAAkF,CAAC,CAAC;QACnH,MAAM,KAAK,GAAG,yBAAyB,CAAC;YACtC,QAAQ;YACR,WAAW,EAAE,KAAK;YAClB,KAAK;YACL,OAAO,EAAE,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAoB;YAClD,OAAO,EAAE,OAAO,CAAC,aAAa,IAAI,EAAE;SACrC,CAAC,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,KAAK,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QAClF,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC;YAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAAC,CAAC;QACjG,MAAM,OAAO,CAAC,OAAO,EAAE,QAAQ,EAAE,qBAAqB,CAAC,CAAC;QACxD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;YACzD,IAAI,OAAO,CAAC,IAAI;gBAAE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,CAAC,cAAc,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;;gBACvG,EAAE,CAAC,4BAA4B,MAAM,CAAC,cAAc,IAAI,CAAC,CAAC;QACjE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,oBAAoB;gBAAE,cAAc,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YAC9F,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO;QACzB,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACtB,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,QAAQ,CAAC,2CAA2C,CAAC,CAAC;QAC5E,MAAM,WAAW,GAAG,CAAC,MAAM,eAAe,CAAC,OAAO,EAAE,IAAI,CAAC,CAAE,CAAC;QAC5D,MAAM,IAAI,GAAG,MAAM,mBAAmB,CAAC,KAAK,EAAE,WAAW,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;QAChF,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAAC,OAAO;QAAC,CAAC;QACxI,IAAI,CAAC,IAAI,EAAE,CAAC;YAAC,IAAI,CAAC,sGAAsG,CAAC,CAAC;YAAC,OAAO;QAAC,CAAC;QACpI,EAAE,CAAC,wBAAwB,CAAC,CAAC;QAC7B,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO;QACzB,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,QAAQ,CAAC,qDAAqD,CAAC,CAAC;QAC5F,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC;QACnE,IAAI,OAAO,CAAC,IAAI;YAAE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;;YAC/D,iBAAiB,CAAC,WAAW,CAAC,CAAC;IACtC,CAAC;IAED,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,CAAC;QAC3D,MAAM,eAAe,EAAE,CAAC;IAC1B,CAAC;CACF,CAAC;AAEF,sEAAsE;AACtE,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,IAAc;IACzC,IAAI,MAAM,CAAC;IACX,IAAI,CAAC;QACH,MAAM,GAAG,SAAS,CAAC;YACjB,IAAI,EAAE,IAAI;YACV,gBAAgB,EAAE,IAAI;YACtB,OAAO,EAAE;gBACP,QAAQ,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE;gBAC7C,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE;gBACzC,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBACxB,eAAe,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBACnC,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE;gBACtC,GAAG,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE;gBACpD,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE;gBACzC,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBAC1B,aAAa,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBACjC,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE;gBACrD,OAAO,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE;aACzD;SACF,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;QAClG,OAAO,CAAC,CAAC;IACX,CAAC;IACD,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,CAAC;IACvC,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAAC,OAAO,CAAC,CAAC;IAAC,CAAC;IACvD,MAAM,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,GAAG,WAAW,CAAC;IACpC,IAAI,MAAM,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAAC,OAAO,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAAC,CAAC;IACpF,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,CAAC,OAAO,EAAE,CAAC;QAAC,OAAO,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,0BAA0B,IAAI,OAAO,IAAI,EAAE,CAAC,CAAC;QAAC,OAAO,CAAC,CAAC;IAAC,CAAC;IAClG,MAAM,OAAO,GAAG,MAA4B,CAAC;IAC7C,IAAI,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;QAAC,OAAO,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;QAAC,OAAO,CAAC,CAAC;IAAC,CAAC;IAC3H,IAAI,CAAC;QACH,MAAM,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC7B,OAAO,CAAC,CAAC;IACX,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,QAAQ,EAAE,CAAC;YAC9B,IAAI,KAAK,CAAC,OAAO;gBAAE,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YAClG,OAAO,KAAK,CAAC,QAAQ,CAAC;QACxB,CAAC;QACD,IAAI,KAAK,YAAY,wBAAwB,EAAE,CAAC;YAC9C,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,MAAM;gBAAE,OAAO,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YAC/F,OAAO,CAAC,CAAC;QACX,CAAC;QACD,IAAI,KAAK,YAAY,0BAA0B,IAAI,KAAK,YAAY,mBAAmB,IAAI,KAAK,YAAY,qBAAqB,EAAE,CAAC;YAClI,OAAO,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YAC9C,OAAO,CAAC,CAAC;QACX,CAAC;QACD,OAAO,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACvF,OAAO,CAAC,CAAC;IACX,CAAC;AACH,CAAC"}
|
package/dist/cliBin.d.ts
ADDED
package/dist/cliBin.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cliBin.js","sourceRoot":"","sources":["../cliBin.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;IAC1C,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;AAC1B,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { DpsJsonRequest } from './dpsJson.js';
|
|
2
|
+
/**
|
|
3
|
+
* Illustrative payload for `nfse init` and `nfse doctor`. The values are
|
|
4
|
+
* fictitious; real invoices need the issuer's own codes and tax choices.
|
|
5
|
+
*/
|
|
6
|
+
export declare function examplePayload(): DpsJsonRequest;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Illustrative payload for `nfse init` and `nfse doctor`. The values are
|
|
3
|
+
* fictitious; real invoices need the issuer's own codes and tax choices.
|
|
4
|
+
*/
|
|
5
|
+
export function examplePayload() {
|
|
6
|
+
return {
|
|
7
|
+
ambiente: 'restrita',
|
|
8
|
+
prestador: {
|
|
9
|
+
cnpj: '12345678000195',
|
|
10
|
+
cLocEmi: '4106902',
|
|
11
|
+
serie: '1601',
|
|
12
|
+
opSimpNac: '1',
|
|
13
|
+
regEspTrib: '0',
|
|
14
|
+
},
|
|
15
|
+
servico: {
|
|
16
|
+
cTribNac: '010201',
|
|
17
|
+
xDescServ: 'Desenvolvimento de software',
|
|
18
|
+
cLocPrestacao: '4106902',
|
|
19
|
+
},
|
|
20
|
+
emissao: {
|
|
21
|
+
nDPS: '1',
|
|
22
|
+
valores: { vServ: '10.00' },
|
|
23
|
+
tributacaoMunicipal: { tribISSQN: '1', tpRetISSQN: '1' },
|
|
24
|
+
tributacaoFederal: { piscofins: { CST: '07' } },
|
|
25
|
+
totTrib: { pTotTribFed: '0.00', pTotTribEst: '0.00', pTotTribMun: '5.00' },
|
|
26
|
+
},
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=cliExample.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cliExample.js","sourceRoot":"","sources":["../cliExample.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,UAAU,cAAc;IAC5B,OAAO;QACL,QAAQ,EAAE,UAAU;QACpB,SAAS,EAAE;YACT,IAAI,EAAE,gBAAgB;YACtB,OAAO,EAAE,SAAS;YAClB,KAAK,EAAE,MAAM;YACb,SAAS,EAAE,GAAG;YACd,UAAU,EAAE,GAAG;SAChB;QACD,OAAO,EAAE;YACP,QAAQ,EAAE,QAAQ;YAClB,SAAS,EAAE,6BAA6B;YACxC,aAAa,EAAE,SAAS;SACzB;QACD,OAAO,EAAE;YACP,IAAI,EAAE,GAAG;YACT,OAAO,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE;YAC3B,mBAAmB,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE;YACxD,iBAAiB,EAAE,EAAE,SAAS,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;YAC/C,OAAO,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE;SAC3E;KACF,CAAC;AACJ,CAAC"}
|