Ir para conteúdo
  • Cadastre-se

Painel de líderes

Conteúdo popular

Showing content with the highest reputation on 30-03-2017 em Posts

  1. Olá pessoal, Com o intuito de acabar com a dependência da CAPICOM, nos fontes do Projeto ACBr, apliquei um amplo refactoring, nas Units de ACBrDFeSSL e suas derivadas... O que é CAPICOM ? https://en.wikipedia.org/wiki/CAPICOM Porque usávamos a CAPICOM ? Usar diretamente as APIs do Windows não é uma tarefa simples.... A CAPICOM, facilita um pouco, as tarefas que podem ser feitas com a WinCrypt (ou MS Crypto), para acesso a certificados digitais instalados no Windows Quais as desvantagens da CAPICOM ? A Microsoft condenou a mesma como obsoleta. (esse é o principal motivo) Ela precisa ser registrada no Windows para funcionar Não suporta 64 bits O que será usado no lugar da CAPICOM ? Usaremos diretamente as APIs do Windows, ou seja, a WinCrypt (também conhecida como "MS Crypto" ou "CAPI"). Ou seja, encaramos o desafio e agora usamos apenas métodos da WinCrypt para acessos a Certificados Digitais no Windows. Para facilitar o acesso a API WinCrypt, estamos usando as Units do diretório: "Fontes\Terceiros\CodeGear\", mas especificamente a Unit "ACBr_WinCrypt.pas". Quais as vantagens da WinCrypt ? Ela está presente de forma nativa, em todas as versões do Windows (desde o Windows XP), ou seja, não requer instalação. Possui versões 32 e 64 bits Não requer registro da DLL Não requer a instalação de pacotes .NET ou Java Onde posso encontrar a WinCrypt ? Ela já está instalada, de forma nativa, no seu Windows... com o nome: "crypt32.dll" Se o seu Windows é 64 bits, você encontrará a mesma em: 32 bits: "C:\Windows\SysWOW64" 64 bits "C:\Windows\System32" Se o seu Windows é 32 bits, você encontrará a mesma em: "C:\Windows\System32" O suporte a Delphi7 será mantido ? SIM. Apesar de já anunciarmos o fim do Suporte a D7, tivemos o cuidado de testar as alterações no D7. Para isso, adaptamos as units da pasta "Fontes\Terceiros\CodeGear\" para o suporte a D7... Como configurar para usar a WinCrypt e não a CAPICOM ? A maneira mais simples é configurar a seguinte propriedade: ACBrNFe1.Configuracoes.Geral.SSLLib := libWinCrypt; Na verdade, a propriedade ACBrDFe.Configuracoes.Geral.SSLLib passou a ser virtual... ou seja, ela configurará de forma indireta, as 3 novas bibliotecas de TDFeSSL... Se você ler os fontes, quando rodamos o código acima, o seguinte código será executado. procedure TGeralConf.SetSSLLib(AValue: TSSLLib); case AValue of ..... libWinCrypt: begin SSLCryptLib := cryWinCrypt; SSLHttpLib := httpWinHttp; SSLXmlSignLib := xsMsXml; end; end; Se você deseja uma configuração diferenciada, poderá configurar as bibliotecas individualmente...Exemplo: ACBrNFe1.Configuracoes.Geral.SSLCryptLib := cryWinCrypt; ACBrNFe1.Configuracoes.Geral.SSLHttpLib := httpWinINet; ACBrNFe1.Configuracoes.Geral.SSLXmlSignLib := xsXmlSec; Como remover completamente, as Units da CAPICOM dos meus fontes ? Abra o arquivo \ACBr\Fontes\ACBrComum\ACBr.inc e altere a seguinte linha: {.$DEFINE DFE_SEM_CAPICOM} para: {$DEFINE DFE_SEM_CAPICOM} Ou seja, remova o "." do inicio O que mudou em ACBrDFeSSL ? Muita coisa.... (veja abaixo o trecho do "Change-Log").. Estudar os fontes do projeto Demo "\ACBr\Exemplos\ACBrDFe\ACBrNFe\Delphi", é a melhor maneira de conhecer as modificações. Veja abaixo, um resumo ilustrado: 1 - Agora você pode criar a sua própria janela de escolha de Certificado Veja esse exemplo de código, extraído de ACBrNFe_Demo. onde usamos o método "ACBrNFe1.SSL.LerCertificadosStore", para carregar todos os certificados da Store, definida em "ACBrNFe1.SSL.StoreName", após isso, as informações dos certificados podem ser obtidas em "ACBrNFe1.SSL.ListaCertificados" ACBrNFe1.SSL.LerCertificadosStore; For I := 0 to ACBrNFe1.SSL.ListaCertificados.Count-1 do begin with ACBrNFe1.SSL.ListaCertificados[I] do begin 2 - Agora você pode selecionar as bibliotecas de TDFeSSL, individualmente CryptLib: Permite definir qual será a biblioteca de Criptografia. Ela possui métodos como:"SelecionarCertificado", "CarregarCertificado", "CalcHash". além de propriedades como "DadosCertificado" e "ListaCertificados". TSSLCryptLib = (cryNone, cryOpenSSL, cryCapicom, cryWinCrypt) HttpLib: Usada para acesso HTTP e HTTPs, permitindo informar o Certificado na conexão. Possui métodos como: "Enviar" e propriedades como: "HTTPResultCode" e "InternalErrorCode" TSSLHttpLib = (httpNone, httpWinINet, httpWinHttp, httpOpenSSL, httpIndy); XMLSignLib: Usada para validar XMLs (contra um Schema), assinar um XML, Validar a assinatura existente em um XML. Possui métodos como: "Assinar", "Validar" e "VerificarAssinatura" TSSLXmlSignLib = (xsNone, xsXmlSec, xsMsXml, xsMsXmlCapicom); 3 - Independência das configurações de segurança do I.E. Isso pode ser obtido, se você utilizar SSLHttpLib = "httpWinHttp" ou "httpOpenSSL" Você poderá definir nos seus fontes, independente das configurações do Internet Explorer, configurações como o Tipo de segurança e TimeOut da tentativa de conexão. Essa funcionalidade já estava presente nas Units de acesso que utilizavam o OpenSSL a algum tempo. e agora com a nova Unit que faz acesso a HTTPS, usando a API do Windows chamada "WinHTTP", isso também será possível. O modelo: "httpWinINet" irá usar a API do Windows, chamada "WinINet", a qual já utilizávamos, e ela depende de configurações do I.E. 4 - Carregar o certificado por ArquivoPFX ou DadosPFX, com a WinCrypt ou CAPICOM Essa funcionalidade já estava presente, quando SSLCryptLib = cryOpenSSL. e não estava disponível para CAPICOM. Mas agora isso é possível, com a SSLCryptLib = cryCapicom ou cryWinCrypt. Ou seja, Se você tem um certificado A1, você não precisa instalar o certificado no Windows. Isso pode parecer pouco importante em uma primeira impressão... Mas veja as possibilidades: O certificado A1 poderia estar em um Banco de dados, ou em um Servidor Web, e ser carregado de forma dinâmica pela sua aplicação, independente de ser instalado manualmente no Windows. 5 - Compilar seu Executável em 64 bits Lembre-se que quando você compila o seu programa em 64 bits, todas as DLLs externas de qual ele necessitar, também devem ser de 64 bits. Portanto para isso, você não poderá usar a XMLSignLib = xsMsXml, pois a biblioteca da Microsoft para assinatura de XMLs "MSXML" não possui versão 64 bits. Mas observe que agora você pode usar a biblioteca WinCrypt com a XmlSec, basta configurar corretamente as bibliotecas de criptografia. Nota: Ainda não conseguimos, fazer com que a XMLSec possa usar certificados A3, mas isso deverá ser possível no futuro, pois a XMLSec tem suporte a "MSCrypto" Diagrama de Classes Como posso ajudar ? (Tarefas a serem efetuadas) 1 - Fazer a XmlSec funcionar usando a "mscrypto" Ainda não conseguimos fazer a XMLSec, usar a MSCrypto, atualmente ele apenas usa a "openssl". Porque isso é importante ? Temos vários problemas, com a msxml, como por exemplo: A Microsoft não distribui a mesma, de forma nativa, com o Windows (arquivo msxml5.dll) Ela não suporta 64 bits A licença de uso dassa biblioteca, é valida apenas para quem tem o Office instalado... Portanto, seria ótimo se pudéssemos ficar livres da MSXML, mas para isso, precisamos fazer o ACBr conseguir usar a XMLSec com suporte a MSCrypto (hoje ele só suporta OpenSSL)... Na verdade, já podemos usar WinCrypt + XmlSec, mas apenas para certificados A1, pois o ACBr é capaz de exportar o certificado A1 do Windows, para que o mesmo seja usado pelo OpenSSL. (ele fará isso internamente, e de forma transparente para o usuário) Quando conseguirmos fazer a XmlSec usar a MSCrypto (ou WinCrypt), conseguiremos compilar a aplicação em 64 bits, e com suporte a certificados A3 2 - Compilar os fontes da XMLSec no Windows, em 32 e 64 bits Hoje o único site que distribui a XMLSec já compilada para Windows é https://www.zlatkovic.com/libxml.en.html (Thanks Igor). Entretanto, podemos notar que os binários estão defasados, e não há uma versão 64 bits, com suporte a "mscrypto" Veja como ficou o "Change-Log" do refactoring em ACBrDFeSSL -- ACBrDFeSSL -- [*] Amplo refactoring promovido, separando a classe "TDFeSSLClass" em 3 novas classes: "TDFeSSLCryptClass" - para Carregar certificados e efetuar criptografia "TDFeSSLHttpClass" - para comunicação HTTP/HTTPS com suporte a Certificados "TDFeSSLXmlSignClass" - Para Validar XMLs, validar assinaturas e Assinar XML com Certificados [+] "TSSLLib", adicionado os tipos "libWinCrypt, libCustom" [+] Criada nova classe "TDadosCertificado", para conter os dados do certificado carregado [+] Criada nova classe "TListaCertificados",para conter uma lista de Objetos do tipo TDadosCertificado, com todos os certificados de uma "Store", e após a chamada do método "TDFeSSL.LerCertificadosStore" [+] Adicionada propriedade "TDFeSSL.StoreName: String", usada apenas no Windows. Nome da Store a ser aberta, padrão "MY" [+] Adicionada propriedade "TDFeSSL.StoreLocation: TSSLStoreLocation", usada apenas no Windows. Default "slCurrentUser". TSSLStoreLocation = (slMemory, slLocalMachine, slCurrentUser, slActiveDirectory, slSmartCard); [+] Adicionado o método: "TDFeSSL.LerCertificadosStore", apenas Windows, para carregar todos os Certifcados de "TDFeSSL.StoreName" para a lista de Objetos: "TDFeSSL.ListaCertificados" [+] Adicionado a propriedade "TDFeSSL.DadosCertificado", para permitir acesso aos dados do certificado carregado [+] Adicionada a propriedade "TDFeSSL.SSLCryptLib: TSSLCryptLib" default cryNone; para definir a classe de criptografia TSSLCryptLib = (cryNone, cryOpenSSL, cryCapicom, cryWinCrypt); [+] Adicionada a propriedade "TDFeSSL.SSLHttpLib: TSSLHttpLib" default httpNone; para definir a classe de comunicação HTTP/HTTPS TSSLHttpLib = (httpNone, httpWinINet, httpWinHttp, httpOpenSSL, httpIndy); [+] Adicionada a propriedade "TDFeSSL.SSLXmlSignLib: TSSLXmlSignLib" default xsNone; para definir a classe de assinatura de validação de XML TSSLXmlSignLib = (xsNone, xsXmlSec, xsMsXml, xsMsXmlCapicom); [+] Adicionada a propriedades "TDFeSSL"SSLType: TSSLType" default LT_all; para permitir definir o tipo de criptografia em HTTPS sendo: TSSLType = (LT_all, LT_SSLv2, LT_SSLv3, LT_TLSv1, LT_TLSv1_1, LT_TLSv1_2, LT_SSHv2) suportado apenas em TDFeHttpOpenSSL e TDFeHttpWinHttp -- ACBrDFeConfiguracoes -- [+] Adicionada as propriedades: property SSLCryptLib: TSSLCryptLib property SSLHttpLib: TSSLHttpLib property SSLXmlSignLib: TSSLXmlSignLib [*] Propriedade "SSLLib: TSSLLib" passou a ser virtual, e mantida por compatibilidade. Ajusta-la irá produzir ajustes em "SSLCryptLib", "SSLHttpLib" e "SSLXmlSignLib". Exemplo: if SSLLib = libOpenSSL then begin SSLCryptLib := cryOpenSSL; SSLHttpLib := httpOpenSSL; SSLXmlSignLib := xsXmlSec; end; -- ACBrDFe -- [+] Adicionado suporte a configurações de "SSLCryptLib", "SSLHttpLib", "SSLXmlSignLib" -- ACBrDFeOpenSSL -- [*] Amplo refactoring. Removido código referente a comunicação HTTP/HTTPs que foi migrado para "ACBrDFeHttpOpenSSL" [*] Removido código referente a assinatura digital e Validação de XML, que foi migrado para "ACBrDFeXsXmlSec" -- ACBRDFeWinCrypt -- [+] Nova Unit, para manipular Certificados do Windows e efetuar assinatura digital, usando a Win API WinCrypt (MSCrypto/CAPI) -- ACBrDFeCapicom -- [*] Refactoring, para usar boa parte do código de "ACBRDFeWinCrypt" -- ACBrDFeHttpOpenSSL -- [+] Adicionada nova Unit, derivada de ACBrDFeOpenSSL, criando implementação da classe de TDFeSSLHttpClass para comunicação http e https, usando a Synapse e OpenSSL -- ACBrDFeHttpWinApi -- [+] Adicionada nova Unit, derivada de ACBrDFeCapicom, criando implementação da classe de TDFeSSLHttpClass para comunicação http e https, usando as APIs do Windows WinHttp ou WinINet -- ACBrDFeHttpIndy, ACBrDFeCapicomDelphiSoap -- [*] Unit renomeada de "ACBrDFeCapicomDelphiSoap" para "ACBrDFeHttpIndy", e refatorada para não depender da CAPICOM -- ACBrDFeXsXmlSec -- [+] Adicionada nova Unit, derivada de ACBrDFeOpenSSL, criando implementação da classe de TDFeSSLXmlSignClass usando a Lib XMLSEC -- ACBrDFeXsMsXml -- [+] Adicionada nova Unit, derivada de ACBrDFeCapicom, criando implementação da classe de TDFeSSLXmlSignClass usando a Lib MSXML -- ACBrDFeXsMsXmlCapicom -- [+] Adicionada nova Unit, derivada de ACBrDFeCapicom, criando implementação da classe de TDFeSSLXmlSignMsXml usando a Lib MSXML e CAPICOM -- ACBrDFeException -- [+] Adicionado o exception "EACBrDFeExceptionNoPrivateKey" -- ACBrDFeUtil -- [+] Adicionado o método "SignatureElement: String" (por DSA) Obrigado... e considere nos ajudar, contratando o SAC, por pelo menos 1 mês http://www.projetoacbr.com.br/forum/sacv2/sobre/ http://www.projetoacbr.com.br/forum/sacv2/questoes_importantes/ http://www.projetoacbr.com.br/forum/sacv2/cadastro/ Fique atento.... Em breve, organizaremos um Webinar sobre essas modificações
    1 ponto
  2. 1 ponto
  3. Boa tarde. Campo modalidade voce coloca qual informação ? Campo Convenio voce coloca qual informação ? Campo tamanho NossoNumero voce coloca qual informação ? Obrigado Campo Modalidade do Cedente voce coloca qual informação ?
    1 ponto
  4. Oi, segundo a página 110 do manual, (acho q) vc não deve informar nada na tag infSeg (0-1) quando o responsável pelo seguro for o próprio emitente do MDFe (respSeg=1). Att Ricardo
    1 ponto
  5. O certificado gravado no cartão é tão frágil quanto o gravado em disco. Por um momento até pensei que a gravação, o certificado gravado fosse em uma região Read Only do cartão, mas não é. O Certificado é passível de um ataque de vírus, de um erro de leitura, de um mal funcionamento de um periférico. Qualquer coisa pode danificar o certificado. Assim é o que percebi. Troquei o computador por um novo com leitora nova e tudo mais. Mas como você comentou, o "medo" fica, dada a fragilidade da gravação. Uma coisa eu penso ter certeza, o ACBr, seus componentes e até mesmo o ACBrMonitorPlus não consomem com o certificado, não apagam o certificado. O problema está na fragilidade do arquivo.
    1 ponto
  6. Legal, muito obrigado Cristiano. Abraços!
    1 ponto
  7. Olá Edivilson, bom dia, A Sefaz/CE está fazendo os últimos ajustes pra liberar a retaguarda. Com relação ao fato do MDK apontar pra os webservices de SP isso não tem nenhuma influência para os desenvolvedores pois como o produto foi concebido para operar Offline você pode ficar até vários dias sem conectar o mesmo a internet. Ou seja, o que importa para os desenvolvedores é validar a integração do seu Aplicativo Comercial com a DLL/LIB da Sefaz/CE e validar os comandos adicionais. Att Cristiano Abbud
    1 ponto
  8. Boa noite Diego, boa noite a todos, Desculpe a demora em retornar aqui. Teremos Feira Autocom na próxima semana e inclusive estendo o convite para todos conhecerem o MFE em nosso estande. O MDK-1000 (MFE Development KIT) na sua versão "light" está sendo direcionado para os webservices da Sefaz/SP porque os webservices da Sefaz/CE ainda tem alguns detalhes a serem corrigidos. Porém os comandos adicionais exigidos para o MFE estão implementados no equipamento. Estes comandos são específicos para o MFE por conta das características de hardware adicional do equipamento. Sendo assim temos 3 comandos adicionais: - Consultar Status Operacional MFE, onde o retorno tem várias características adicionais e principalmente ligadas ao 3G, ao GPS e bateria. - Configurar Rede MFE, onde neste caso escolhemos a prioridade de qual o meio de comunicação com a Sefaz/CE iremos utilizar, sendo considerado entre rede ethernet/wifi/3G. - Informar dados do Aplicativo Comercial, onde o aplicativo comercial envia suas informações para a DLL/LIB da Sefaz, porém a DLL/LIB ainda não está contemplando este comando até o momento. Portanto o MDK-1000 irá permitir total integração com o ACBr/AC pois é 100% compatível com os comandos da Sefaz/SP e adicionando os 3 comandos da Sefaz/CE. Sendo que os 2 comandos que são de responsabilidade do MFE já estão implementados e funcionais e estão disponíveis para teste através do Software de Ativação do MFE. http://tanca.com.br/drivers.php?cat=24&sub=56 A disposição para qualquer duvida, Att Cristiano Abbud
    1 ponto
  9. Pessoal, boa tarde Depois de muito bater a cabeça a rotina de Distribuição do CTe está funcionando perfeitamente. Atentar-se ao ambiente colocado no componente e principalmente os parâmetros gerais SSL, porque ao alterar a SSL, os demais parâmetros não estão sendo alterado. Segue abaixo o código para distribuição. CTE := TACBrCTe.Create( nil ); CTE.Configuracoes.Geral.Salvar := true; CTE.Configuracoes.Arquivos.PathSalvar := ExtractFilePath(Application.ExeName) + '\Log'; CTE.Configuracoes.Arquivos.PathSchemas := ExtractFilePath(Application.ExeName) + '\Schemas\CTe'; CTE.Configuracoes.Geral.ModeloDF := moCTe; CTE.Configuracoes.Geral.VersaoDF := StrToVersaoCTe(b_ok, '3.00'); CTE.Configuracoes.WebServices.Ambiente := taProducao; CTE.Conhecimentos.Clear; CTE.Configuracoes.Certificados.ArquivoPFX := qAux.FieldByName('CERTIFICADOSSL').asString; CTE.Configuracoes.Certificados.Senha := qAux.FieldByName('SENHACERTIFICADOSSL').asString; CTE.Configuracoes.Geral.SSLLib := libOpenSSL; CTE.Configuracoes.Geral.SSLCryptLib := cryOpenSSL; CTE.Configuracoes.Geral.SSLHttpLib := httpOpenSSL; CTE.Configuracoes.Geral.SSLXmlSignLib := xsXmlSec; CTE.DistribuicaoDFePorUltNSU(i_codUf, RetiraCaracter(s_cgccfo), qAux.FieldByName('ULTIMONSUCTE').asString); for I := 0 to CTE.WebServices.DistribuicaoDFe.retDistDFeInt.docZip.Count-1 do begin if CTE.WebServices.DistribuicaoDFe.retDistDFeInt.docZip.Items.resCTe.chCTe <> '' then begin CTE.WebServices.DistribuicaoDFe.retDistDFeInt.docZip.Items.XML; end; end; Espero ter ajudado.
    1 ponto
  10. Boa noite Caetano, Já fiz a correção e enviei para o repositório.
    1 ponto
  11. Pessoal o problema é bem simples, em alguns equipamentos tivemos este mesmo problema, existe dois passos que revolve isso. Deu muito trabalho descobrir porque em alguns equipamentos funcionava muito bem, mas em outros perdia a comunicação. Isto acontece porque em alguns computadores as USB tem velocidades não compatível com a impressora e você tem que colocar alguns parâmetros para que possa compatibilizar a velocidade com a impressora. Primeiro tente mudar o time-out de 100 para 1000 e o intervalo de 10 para 15. Esses parâmetros eu peguei no próprio software da Bematech e resolveu o problema. Se Persistir mude na ACBR o Componente ControlePorta=True e depois DEVICE e vai no Componente HANDSHAKE Coloque hsDTR_DSR no Controle da Porta.
    1 ponto
  12. Não consegui compreender... Ajudaria se você desse nome dos arquivos... Aqui compila normal em D7, Tokyo e Lazarus
    1 ponto
  13. Olá Cleonir, me deparei com o mesmo problema, e consegui resolver setando as seguintes configurações: ACBrMDFe1.Configuracoes.Geral.SSLCryptLib := cryWinCrypt; ACBrMDFe1.Configuracoes.Geral.SSLHttpLib := httpIndy; ACBrMDFe1.Configuracoes.Geral.SSLXmlSignLib := xsMsXml; ACBrMDFe1.Configuracoes.Geral.SSLLib := LibCustom;
    1 ponto
  14. certo! como só houve você com esse relato sugiro efetuar testes e aplicar soluções para que possa resolver o problema e depois anexar aqui pode ser?
    1 ponto
  15. da pasta ACBrDFe ACBrDFeCapicom.pas ACBrDFeHttpOpenSSL.pas ACBrDFeHttpIndy.pas ACBrDFeHttpWinApi.pas ACBrDFeOpenSSL.pas ACBrDFeUtil.pas ACBrDFeWinCrypt.pas da pasta ACBrDFe/ACBrNFe ACBrNFeWebServices.pas da pasta ACBrDFe/ACBrNFe/DANFe ACBrNFeDANFEClass.pas da pasta ACBrDFe/ACBrNFe/DANFe/NFCe/EscPos ACBrNFeDANFeESCPOS.pas da pasta ACBrDFe/ACBrNFe/DANFe/NFe/Fortes ACBrNFeDAInutRL.pas ACBrNFeDAInutRLRetrato.pas ACBrNFeDANFeEventoRL.pas ACBrNFeDANFeRL.pas ACBrNFeDANFeRLClass.pas @Juliomar Marchetti Se por um acaso for no meio algumas units com remoção de hints e preferir não aplicar pode ficar a vontade. Essas eu postarei no tópico especifico de remoção de hints e warnings.
    1 ponto
  16. Rode o ACBrInstall_Trunk2 novamente...
    1 ponto
  17. Poste qual era o problema, pode ser útil para outros usuários do fórum!
    1 ponto
  18. Bom dia, Nas minhas postagens a dica que dou é o seguinte: Se ocorrer falha após o envio, não devemos enviar a nota novamente, uma vez que não sabemos se a falha ocorreu de fato no envio ou no retorno da SEFAZ. Sendo assim o que devemos fazer é carregar o componente com o XML assinado usando o LoadFromFile e em seguida executar o método Consultar. Exemplo: ACBrNFe1.NotasFiscais.Clear; ACBrNFe1.NotasFiscais.LoadFromFile(XmlNFe); // o XML da NF-e a ser carregado esta assinado ACBrNFe1.Consultar; Se obtivermos uma resposta da SEFAZ informando que a nota não existe no banco de dados dela, isso significa que a falha ocorreu no envio, portanto devemos envia-la novamente. Por outro lado se a nota foi enviada e processada com sucesso vamos ter como resposta o protocolo de autorização, neste caso o método Consultar se encarrega de atualizar o XML deixando-o completo, ou seja, assinado e protocolo, pronto para ser enviado ao destinatário. Como você pode ver em nenhum momento foi necessário usar o GerarNFe e GravarXML.
    1 ponto
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.

The popup will be closed in 10 segundos...
The popup will be closed in 10 segundos...