Tutoriais

Exemplo Arima

Sem comentários
Métodos de Previsão – MPAgro/FGV

1 – Carregando a base de dados

1.1 – Carregar arquivo .csv

Vamos iniciar com comando setwd para indicar a pasta de trabalho com o arquivo que será utilizado. Posteriormente, utilizaremos o comando read.csv2 para carregar o arquivo arroz.csv. O arquivo .csv possui uma série de preço anual de arroz, em R$/tonelada.

Os dados do arquivo arroz.csv serão armazenados em um data.frame no objeto base. No processo de carga, especificar corretamente os parâmetros header, sep e dec do comando read.csv2

 setwd ("c:\\metodos_previsao") 
 base = read.csv2("arroz.csv", header = TRUE, sep = ";", dec=",")

1.2 – Converter os preços em uma série de tempo

Vamos utilizar o comando ts para definir os preços como uma série temporal. Essa série será gravada no objeto com o nome parroz.

parroz = ts(base$arroz, start=c(1948), end=c(1992), frequency=1)

Vamos construir um gráfico com a série para verificar se os dados foram carregados corretamente.

plot(parroz, main="Preço anual do arroz", ylab = "R$/t", xlab = "período")

2 – Processo integrado auto-regressivo de médias móveis (ARIMA)

Vamos adotar a abordagem proposta por Box & Jenkins, realizando os seguintes passos:

  1. Identificação
  2. Estimação
  3. Verificação
  4. Previsão

Antes de iniciar a identificação do modelo, vamos avaliar a necessidade de realizar alguma transformação na série.

 plot(diff(parroz))

A partir do gráfico da variação da série, é possível verificar que a variância aumenta com o passar do tempo. Para tentar estabilizar a variância da série, vamos realizra a transformação logarítmica. A nova série será armazenada no objeto lparroz (logarítmo natural do preço do arroz).

 lparroz = log(parroz)
  plot(lparroz)
  plot(diff(lparroz))

2.1 – Identificação do modelo

Vamos utilizar a função acf2 do pacote astsa para construir as funções de autocorrelação (FAC) e de autocorrelação parcial (FACP) da série lparroz.

require(astsa)
acf2(lparroz, max.lag=15)

O gráfico da série e o comportamento da FAC sugerem que a série não é estacionária.

Há, basicamente, quatro maneiras de observar se série em estudo é ou não estacionária: 1. Análise gráfica 2. Comparar a média e a variância em diferentes períodos de tempo 3. Observar a FAC 4. Realizar testes de Raiz Unitária

Nessa primeira aula iremos utilizar a análise visual gráfica e a avaliação da FAC. Na próxima aula vamos utilizar testes de raiz unitária para avaliar a ordem de integração da série.

Para trabalhar com uma série estacionária, vamos aplicar a primeira diferença nos dados do objeto lparroz e construir a FAC e a FACP.

  acf2( diff(lparroz) )

A análise da FAC e da FACP sugerem os seguintes modelos:

  1. ARIMA (0,1,1)
  2. ARIMA (1,1,0)
  3. ARIMA (1,1,1)

Como os modelos propostos por Box & jenkins são da década de 1970, o esforço computacional para estimar o sistema era muito grande, portanto, a etapa de identificação era fundamental para se ter um modelo adequado. Atualmente, graças aos avanços computacionais, observar a FAC e a FACP é útil para se ter uma ideia inicial dos modelos que serão avaliados. Como veremos mais adiante, vamos selecionar o modelo que minimize os critérios de informação.

2.2 – Estimação dos modelos identificados

Para estimar os modelos identificados, vamos utilizar a função Arima do pacote forecast. Vamos estimar os três modelos com e sem constante (discutiremos esse aspecto nas próximas aulas).

Com relação ao método de estimação dos parâmetros, usaremos o procedimento default da função do R, que adota o método de Máxima Verossimilhança (Maximum Likelihood-ML).

require(forecast)
  arima011 = Arima(lparroz, order=c(0,1,1))
  arima011_cte = Arima(lparroz, order=c(0,1,1), include.constant = TRUE)
  
  arima110 = Arima(lparroz, order=c(1,1,0))
  arima110_cte = Arima(lparroz, order=c(1,1,0), include.constant = TRUE)

  arima111 = Arima(lparroz, order=c(1,1,1))
  arima111_cte = Arima(lparroz, order=c(1,1,1), include.constant = TRUE)  

Os resultados dos modelos estimados foram armazenados nos objetivos arima011,arima011_cte, etc.

Para selecionar o melhor modelo, vamos identificar aquele que minimiza o Critério de Informação de Akaike (AIC) e o Critério Bayesiano ou de Schwarz (BIC).

  arima011$aic
  arima011_cte$aic
  arima110$aic
  arima110_cte$aic
  arima111$aic
  arima111_cte$aic
  arima011$bic
  arima011_cte$bic
  arima110$bic
  arima110_cte$bic
  arima111$bic
  arima111_cte$bic

Ambos os critérios indicaram o modelo ARIMA(0,1,1) com constante

2.3 – Verificação ou diagnóstico do modelo

Nesta fase as seguintes características serão analisadas:

  1. Significância dos parâmetros estimados

  2. Análise dos resíduos, especialmente avaliar a ausência de autocorrelação linear

2.3.1 – Significância dos parâmetros estimados

O modelo não deve conter parâmetros em excesso (critério da parcimônia). A existência de parâmetros redundantes será avaliada a partir do teste t de Student, cuja estatística é dada pela razão entre o coeficiente estimado e o seu erro-padrão.

Se o valor o coeficiente estimado for pequeno em relção a seu erro-padrão, temos uma indicação de não significância estatístia e, portanto, é provável que exista superespecificação do modelo.

Regra de decisão a ser adotada: se \(|t| > 2\) então \(H_0: \phi_i=0,\ i=1,..,p\) ou \(H_0:\theta_j,\ j=1,..,q\) é rejeitada (ver detalhes na apresentação utilizada em aula).

  arima011_cte  
  -0.4948/0.1394

2.3.2 – Análise dos resíduos

Os resíduos do modelo estimado são estimativas do ruído branco. Dessa forma, os mesmos devem se comportar aproximadamente como uma ruído branco se o modelo estiver adequadamente espeficiados. Em particular, seus coeficientes de autocorrelação devem ser estatisticamente iguais a zero.

Para verificar se essa condição é atendida, vamos realizar testes individuais e testes conjuntos para os coeficientes de autocorrelação (verificar detalhes dos testes na apresentação utilizada em aula)

acf2(arima011_cte$residuals)

Box.test(arima011_cte$residuals, type=c("Ljung-Box"), lag=2)
Box.test(arima011_cte$residuals, type=c("Ljung-Box"), lag=4)
Box.test(arima011_cte$residuals, type=c("Ljung-Box"), lag=6)

Todos os testes realizados indicam a ausência de autocorrelação dos resíduos.

De maneira mais direta, o diagnóstico dos resíduos também pode ser realizado utilizando a função checkresiduals do pacote forecast.

checkresiduals(arima011_cte)

2.4 – Previsão

A última etapa da metodologia de Box & Jenkins consiste em, a partir do modelo estimado, realizar previsões (verificar detalhes no PPT utilizado em aula).

Para realizar as previsões, iremos uitlizar a função forecast do pacote forecast. Como exercício, vamos realizar previsão para três anos (parâmetro h=3), com intervalo de confiança de 95%

previsao = forecast(arima011_cte, h=3, level=0.95)
plot(previsao)

Como trabalhamos com a série em ln, precisamos calcular o antilogaritmo dos valores previstos. Uma das formas de executar essa transformação é dada por:

previsao$mean = exp(previsao$mean)
previsao$x = exp(previsao$x)
previsao$upper = exp(previsao$upper)
previsao$lower = exp(previsao$lower)
previsao$fitted = exp(previsao$fitted)
plot(previsao)
LS0tDQp0aXRsZTogIk3pdG9kb3MgZGUgUHJldmlz428gLSBNUEFncm8vRkdWIg0KYXV0aG9yOiAiUHJvZi4gRHIgTHVjaWFubyBSb2RyaWd1ZXMiDQpzdWJ0aXRsZTogQ/NkaWdvIHV0aWxpemFkbyBlbSBhdWxhIC0gTW9kZWxvIEFSSU1BDQpkYXRlOiAiMDcvMDcvMjAxOCINCm91dHB1dDoNCiAgDQogIGh0bWxfZG9jdW1lbnQ6IGRlZmF1bHQNCiAgaHRtbF9ub3RlYm9vazogZGVmYXVsdA0KICBwZGZfZG9jdW1lbnQ6IGRlZmF1bHQNCiAgd29yZF9kb2N1bWVudDogZGVmYXVsdA0KDQotLS0NCg0KDQojIDEgLSBDYXJyZWdhbmRvIGEgYmFzZSBkZSBkYWRvcw0KDQoNCiMjIDEuMSAtIENhcnJlZ2FyIGFycXVpdm8gLmNzdg0KDQpWYW1vcyBpbmljaWFyIGNvbSBjb21hbmRvICoqc2V0d2QqKiBwYXJhIGluZGljYXIgYSBwYXN0YSBkZSB0cmFiYWxobyBjb20gbyBhcnF1aXZvIHF1ZSBzZXLhIHV0aWxpemFkby4gUG9zdGVyaW9ybWVudGUsIHV0aWxpemFyZW1vcyBvIGNvbWFuZG8gKipyZWFkLmNzdjIqKiBwYXJhIGNhcnJlZ2FyIG8gYXJxdWl2byBfYXJyb3ouY3N2Xy4gTyBhcnF1aXZvIF8uY3N2XyBwb3NzdWkgdW1hIHPpcmllIGRlIHByZedvIGFudWFsIGRlIGFycm96LCBlbSBSJC90b25lbGFkYS4NCg0KT3MgZGFkb3MgZG8gYXJxdWl2byBfYXJyb3ouY3N2XyBzZXLjbyBhcm1hemVuYWRvcyBlbSB1bSBkYXRhLmZyYW1lIG5vIG9iamV0byAqKl9iYXNlXyoqLiBObyBwcm9jZXNzbyBkZSBjYXJnYSwgZXNwZWNpZmljYXIgY29ycmV0YW1lbnRlIG9zIHBhcuJtZXRyb3MgKipfaGVhZGVyXyoqLCAqKl9zZXBfKiogZSAqKl9kZWNfKiogZG8gY29tYW5kbyAqKl9yZWFkLmNzdjJfKioNCg0KDQpgYGB7cn0NCiBzZXR3ZCAoImM6XFxtZXRvZG9zX3ByZXZpc2FvIikgDQogYmFzZSA9IHJlYWQuY3N2MigiYXJyb3ouY3N2IiwgaGVhZGVyID0gVFJVRSwgc2VwID0gIjsiLCBkZWM9IiwiKQ0KDQpgYGANCg0KDQojIyAxLjIgLSBDb252ZXJ0ZXIgb3MgcHJl529zIGVtIHVtYSBz6XJpZSBkZSB0ZW1wbw0KDQpWYW1vcyB1dGlsaXphciBvIGNvbWFuZG8gKipfdHNfKiogcGFyYSBkZWZpbmlyIG9zIHByZedvcyBjb21vIHVtYSBz6XJpZSB0ZW1wb3JhbC4gRXNzYSBz6XJpZSBzZXLhIGdyYXZhZGEgbm8gb2JqZXRvIGNvbSBvIG5vbWUgKipfcGFycm96XyoqLg0KDQpgYGB7cn0NCnBhcnJveiA9IHRzKGJhc2UkYXJyb3osIHN0YXJ0PWMoMTk0OCksIGVuZD1jKDE5OTIpLCBmcmVxdWVuY3k9MSkNCmBgYA0KDQpWYW1vcyBjb25zdHJ1aXIgdW0gZ3LhZmljbyBjb20gYSBz6XJpZSBwYXJhIHZlcmlmaWNhciBzZSBvcyBkYWRvcyBmb3JhbSBjYXJyZWdhZG9zIGNvcnJldGFtZW50ZS4NCg0KYGBge3J9DQpwbG90KHBhcnJveiwgbWFpbj0iUHJl528gYW51YWwgZG8gYXJyb3oiLCB5bGFiID0gIlIkL3QiLCB4bGFiID0gInBlcu1vZG8iKQ0KYGBgDQoNCg0KDQojIDIgLSBQcm9jZXNzbyBpbnRlZ3JhZG8gYXV0by1yZWdyZXNzaXZvIGRlIG3pZGlhcyBt83ZlaXMgKEFSSU1BKQ0KDQpWYW1vcyBhZG90YXIgYSBhYm9yZGFnZW0gcHJvcG9zdGEgcG9yIEJveCAmIEplbmtpbnMsIHJlYWxpemFuZG8gb3Mgc2VndWludGVzIHBhc3NvczoNCg0KMS4gSWRlbnRpZmljYefjbw0KMi4gRXN0aW1h5+NvDQozLiBWZXJpZmljYefjbw0KNC4gUHJldmlz428NCg0KQW50ZXMgZGUgaW5pY2lhciBhIGlkZW50aWZpY2Hn428gZG8gbW9kZWxvLCB2YW1vcyBhdmFsaWFyIGEgbmVjZXNzaWRhZGUgZGUgcmVhbGl6YXIgYWxndW1hIHRyYW5zZm9ybWHn428gbmEgc+lyaWUuIA0KDQpgYGB7cn0NCiBwbG90KGRpZmYocGFycm96KSkNCmBgYA0KDQoNCg0KQSBwYXJ0aXIgZG8gZ3LhZmljbyBkYSB2YXJpYefjbyBkYSBz6XJpZSwg6SBwb3Nz7XZlbCB2ZXJpZmljYXIgcXVlIGEgdmFyaeJuY2lhIGF1bWVudGEgY29tIG8gcGFzc2FyIGRvIHRlbXBvLiBQYXJhIHRlbnRhciBlc3RhYmlsaXphciBhIHZhcmnibmNpYSBkYSBz6XJpZSwgdmFtb3MgcmVhbGl6cmEgYSB0cmFuc2Zvcm1h5+NvIGxvZ2Fy7XRtaWNhLiBBIG5vdmEgc+lyaWUgc2Vy4SBhcm1hemVuYWRhIG5vIG9iamV0byAqKl9scGFycm96XyoqIChsb2dhcu10bW8gbmF0dXJhbCBkbyBwcmXnbyBkbyBhcnJveikuDQoNCg0KYGBge3J9DQogbHBhcnJveiA9IGxvZyhwYXJyb3opDQogIHBsb3QobHBhcnJveikNCiAgcGxvdChkaWZmKGxwYXJyb3opKQ0KYGBgDQoNCg0KIyMgMi4xIC0gSWRlbnRpZmljYefjbyBkbyBtb2RlbG8NCg0KVmFtb3MgdXRpbGl6YXIgYSBmdW7n428gKipfYWNmMl8qKiBkbyBwYWNvdGUgKipfYXN0c2FfKiogcGFyYSBjb25zdHJ1aXIgYXMgZnVu5/VlcyBkZSBhdXRvY29ycmVsYefjbyAoKkZBQyopIGUgZGUgYXV0b2NvcnJlbGHn428gcGFyY2lhbCAoKkZBQ1AqKSBkYSBz6XJpZSAqKl9scGFycm96XyoqLg0KDQpgYGB7cn0NCnJlcXVpcmUoYXN0c2EpDQphY2YyKGxwYXJyb3osIG1heC5sYWc9MTUpDQpgYGANCg0KDQpPIGdy4WZpY28gZGEgc+lyaWUgZSBvIGNvbXBvcnRhbWVudG8gZGEgRkFDIHN1Z2VyZW0gcXVlIGEgc+lyaWUgbuNvIOkgZXN0YWNpb27hcmlhLiANCg0KSOEsIGJhc2ljYW1lbnRlLCBxdWF0cm8gbWFuZWlyYXMgZGUgb2JzZXJ2YXIgc2Ugc+lyaWUgZW0gZXN0dWRvIOkgb3UgbuNvIGVzdGFjaW9u4XJpYToNCjEuIEFu4Wxpc2UgZ3LhZmljYQ0KMi4gQ29tcGFyYXIgYSBt6WRpYSBlIGEgdmFyaeJuY2lhIGVtIGRpZmVyZW50ZXMgcGVy7W9kb3MgZGUgdGVtcG8NCjMuIE9ic2VydmFyIGEgRkFDDQo0LiBSZWFsaXphciB0ZXN0ZXMgZGUgUmFpeiBVbml04XJpYQ0KDQpOZXNzYSBwcmltZWlyYSBhdWxhIGlyZW1vcyB1dGlsaXphciBhIGFu4Wxpc2UgdmlzdWFsIGdy4WZpY2EgZSBhIGF2YWxpYefjbyBkYSBGQUMuIE5hIHBy83hpbWEgYXVsYSB2YW1vcyB1dGlsaXphciB0ZXN0ZXMgZGUgcmFpeiB1bml04XJpYSBwYXJhIGF2YWxpYXIgYSBvcmRlbSBkZSBpbnRlZ3Jh5+NvIGRhIHPpcmllLiANCg0KUGFyYSB0cmFiYWxoYXIgY29tIHVtYSBz6XJpZSBlc3RhY2lvbuFyaWEsIHZhbW9zIGFwbGljYXIgYSBwcmltZWlyYSBkaWZlcmVu52Egbm9zIGRhZG9zIGRvIG9iamV0byAqKl9scGFycm96XyoqIGUgY29uc3RydWlyIGEgRkFDIGUgYSBGQUNQLg0KDQpgYGB7cn0NCiAgYWNmMiggZGlmZihscGFycm96KSApDQpgYGANCg0KQSBhbuFsaXNlIGRhIEZBQyBlIGRhIEZBQ1Agc3VnZXJlbSBvcyBzZWd1aW50ZXMgbW9kZWxvczoNCg0KMS4gQVJJTUEgKDAsMSwxKQ0KMi4gQVJJTUEgKDEsMSwwKQ0KMy4gQVJJTUEgKDEsMSwxKQ0KDQpDb21vIG9zIG1vZGVsb3MgcHJvcG9zdG9zIHBvciBCb3ggJiBqZW5raW5zIHPjbyBkYSBk6WNhZGEgZGUgMTk3MCwgbyBlc2ZvcudvIGNvbXB1dGFjaW9uYWwgcGFyYSBlc3RpbWFyIG8gc2lzdGVtYSBlcmEgbXVpdG8gZ3JhbmRlLCBwb3J0YW50bywgYSBldGFwYSBkZSBpZGVudGlmaWNh5+NvIGVyYSBmdW5kYW1lbnRhbCBwYXJhIHNlIHRlciB1bSBtb2RlbG8gYWRlcXVhZG8uIEF0dWFsbWVudGUsIGdyYedhcyBhb3MgYXZhbudvcyBjb21wdXRhY2lvbmFpcywgb2JzZXJ2YXIgYSBGQUMgZSBhIEZBQ1Ag6SD6dGlsICBwYXJhIHNlIHRlciB1bWEgaWRlaWEgaW5pY2lhbCBkb3MgbW9kZWxvcyBxdWUgc2Vy428gYXZhbGlhZG9zLiBDb21vIHZlcmVtb3MgbWFpcyBhZGlhbnRlLCB2YW1vcyBzZWxlY2lvbmFyIG8gbW9kZWxvIHF1ZSBtaW5pbWl6ZSBvcyBjcml06XJpb3MgZGUgaW5mb3JtYefjby4NCg0KDQojIyAyLjIgLSBFc3RpbWHn428gZG9zIG1vZGVsb3MgaWRlbnRpZmljYWRvcw0KDQpQYXJhIGVzdGltYXIgb3MgbW9kZWxvcyBpZGVudGlmaWNhZG9zLCB2YW1vcyB1dGlsaXphciBhIGZ1bufjbyAqKl9BcmltYV8qKiBkbyBwYWNvdGUgKipfZm9yZWNhc3RfKiouIFZhbW9zIGVzdGltYXIgb3MgdHLqcyBtb2RlbG9zIGNvbSBlIHNlbSBjb25zdGFudGUgKCpkaXNjdXRpcmVtb3MgZXNzZSBhc3BlY3RvIG5hcyBwcvN4aW1hcyBhdWxhcyopLg0KDQpDb20gcmVsYefjbyBhbyBt6XRvZG8gZGUgZXN0aW1h5+NvIGRvcyBwYXLibWV0cm9zLCB1c2FyZW1vcyBvIHByb2NlZGltZW50byAqZGVmYXVsdCogZGEgZnVu5+NvIGRvIFIsIHF1ZSBhZG90YSBvIG3pdG9kbyBkZSBN4XhpbWEgVmVyb3NzaW1pbGhhbudhIChNYXhpbXVtIExpa2VsaWhvb2QtTUwpLg0KDQoNCmBgYHtyfQ0KcmVxdWlyZShmb3JlY2FzdCkNCiAgYXJpbWEwMTEgPSBBcmltYShscGFycm96LCBvcmRlcj1jKDAsMSwxKSkNCiAgYXJpbWEwMTFfY3RlID0gQXJpbWEobHBhcnJveiwgb3JkZXI9YygwLDEsMSksIGluY2x1ZGUuY29uc3RhbnQgPSBUUlVFKQ0KICANCiAgYXJpbWExMTAgPSBBcmltYShscGFycm96LCBvcmRlcj1jKDEsMSwwKSkNCiAgYXJpbWExMTBfY3RlID0gQXJpbWEobHBhcnJveiwgb3JkZXI9YygxLDEsMCksIGluY2x1ZGUuY29uc3RhbnQgPSBUUlVFKQ0KDQogIGFyaW1hMTExID0gQXJpbWEobHBhcnJveiwgb3JkZXI9YygxLDEsMSkpDQogIGFyaW1hMTExX2N0ZSA9IEFyaW1hKGxwYXJyb3osIG9yZGVyPWMoMSwxLDEpLCBpbmNsdWRlLmNvbnN0YW50ID0gVFJVRSkgIA0KDQpgYGANCg0KT3MgcmVzdWx0YWRvcyBkb3MgbW9kZWxvcyBlc3RpbWFkb3MgZm9yYW0gYXJtYXplbmFkb3Mgbm9zIG9iamV0aXZvcyAqYXJpbWEwMTEqLCphcmltYTAxMV9jdGUqLCBldGMuDQoNClBhcmEgc2VsZWNpb25hciBvIG1lbGhvciBtb2RlbG8sIHZhbW9zIGlkZW50aWZpY2FyIGFxdWVsZSBxdWUgbWluaW1pemEgbyBDcml06XJpbyBkZSBJbmZvcm1h5+NvIGRlIEFrYWlrZSAoQUlDKSBlIG8gQ3JpdOlyaW8gQmF5ZXNpYW5vIG91IGRlIFNjaHdhcnogKEJJQykuDQoNCmBgYHtyfQ0KICBhcmltYTAxMSRhaWMNCiAgYXJpbWEwMTFfY3RlJGFpYw0KICBhcmltYTExMCRhaWMNCiAgYXJpbWExMTBfY3RlJGFpYw0KICBhcmltYTExMSRhaWMNCiAgYXJpbWExMTFfY3RlJGFpYw0KYGBgDQoNCg0KYGBge3J9DQogIGFyaW1hMDExJGJpYw0KICBhcmltYTAxMV9jdGUkYmljDQogIGFyaW1hMTEwJGJpYw0KICBhcmltYTExMF9jdGUkYmljDQogIGFyaW1hMTExJGJpYw0KICBhcmltYTExMV9jdGUkYmljDQpgYGANCg0KQW1ib3Mgb3MgY3JpdOlyaW9zIGluZGljYXJhbSBvIG1vZGVsbyAqKl9BUklNQSgwLDEsMSkgY29tIGNvbnN0YW50ZV8qKg0KDQoNCg0KIyMgMi4zIC0gVmVyaWZpY2Hn428gb3UgZGlhZ27zc3RpY28gZG8gbW9kZWxvDQoNCg0KTmVzdGEgZmFzZSBhcyBzZWd1aW50ZXMgY2FyYWN0ZXLtc3RpY2FzIHNlcuNvIGFuYWxpc2FkYXM6IA0KDQoxLiBTaWduaWZpY+JuY2lhIGRvcyBwYXLibWV0cm9zIGVzdGltYWRvcw0KDQoyLiBBbuFsaXNlIGRvcyByZXPtZHVvcywgZXNwZWNpYWxtZW50ZSBhdmFsaWFyIGEgYXVz6m5jaWEgZGUgYXV0b2NvcnJlbGHn428gbGluZWFyDQoNCg0KDQojIyMgMi4zLjEgLSBTaWduaWZpY+JuY2lhIGRvcyBwYXLibWV0cm9zIGVzdGltYWRvcw0KDQoNCk8gbW9kZWxvIG7jbyBkZXZlIGNvbnRlciBwYXLibWV0cm9zIGVtIGV4Y2Vzc28gKGNyaXTpcmlvIGRhIHBhcmNpbfRuaWEpLiBBIGV4aXN06m5jaWEgZGUgcGFy4m1ldHJvcyByZWR1bmRhbnRlcyBzZXLhIGF2YWxpYWRhIGEgcGFydGlyIGRvIHRlc3RlIHQgZGUgU3R1ZGVudCwgY3VqYSBlc3RhdO1zdGljYSDpIGRhZGEgcGVsYSByYXrjbyBlbnRyZSBvIGNvZWZpY2llbnRlIGVzdGltYWRvIGUgbyBzZXUgZXJyby1wYWRy428uDQoNClNlIG8gdmFsb3IgbyBjb2VmaWNpZW50ZSBlc3RpbWFkbyBmb3IgcGVxdWVubyBlbSByZWzn428gYSBzZXUgZXJyby1wYWRy428sIHRlbW9zIHVtYSBpbmRpY2Hn428gZGUgbuNvIHNpZ25pZmlj4m5jaWEgZXN0YXTtc3RpYSBlLCBwb3J0YW50bywg6SBwcm924XZlbCBxdWUgZXhpc3RhIHN1cGVyZXNwZWNpZmljYefjbyBkbyBtb2RlbG8uDQoNClJlZ3JhIGRlIGRlY2lz428gYSBzZXIgYWRvdGFkYTogc2UgJHx0fCA+IDIkIGVudONvICRIXzA6IFxwaGlfaT0wLFwgaT0xLC4uLHAkIG91ICRIXzA6XHRoZXRhX2osXCBqPTEsLi4scSQgKirpIHJlamVpdGFkYSoqICgqdmVyIGRldGFsaGVzIG5hIGFwcmVzZW50YefjbyB1dGlsaXphZGEgZW0gYXVsYSopLg0KDQpgYGB7cn0NCiAgYXJpbWEwMTFfY3RlICANCiAgLTAuNDk0OC8wLjEzOTQNCmBgYA0KDQoNCg0KIyMjIDIuMy4yIC0gQW7hbGlzZSBkb3MgcmVz7WR1b3MNCg0KDQpPcyByZXPtZHVvcyBkbyBtb2RlbG8gZXN0aW1hZG8gc+NvIGVzdGltYXRpdmFzIGRvIHJ17WRvIGJyYW5jby4gRGVzc2EgZm9ybWEsIG9zIG1lc21vcyBkZXZlbSBzZSBjb21wb3J0YXIgYXByb3hpbWFkYW1lbnRlIGNvbW8gdW1hIHJ17WRvIGJyYW5jbyBzZSBvIG1vZGVsbyBlc3RpdmVyIGFkZXF1YWRhbWVudGUgZXNwZWZpY2lhZG9zLiBFbSBwYXJ0aWN1bGFyLCBzZXVzIGNvZWZpY2llbnRlcyBkZSBhdXRvY29ycmVsYefjbyBkZXZlbSBzZXIgZXN0YXRpc3RpY2FtZW50ZSBpZ3VhaXMgYSB6ZXJvLg0KDQpQYXJhIHZlcmlmaWNhciBzZSBlc3NhIGNvbmRp5+NvIOkgYXRlbmRpZGEsIHZhbW9zIHJlYWxpemFyIHRlc3RlcyBpbmRpdmlkdWFpcyBlIHRlc3RlcyBjb25qdW50b3MgcGFyYSBvcyBjb2VmaWNpZW50ZXMgZGUgYXV0b2NvcnJlbGHn428gKCp2ZXJpZmljYXIgZGV0YWxoZXMgZG9zIHRlc3RlcyBuYSBhcHJlc2VudGHn428gdXRpbGl6YWRhIGVtIGF1bGEqKQ0KDQpgYGB7cn0NCmFjZjIoYXJpbWEwMTFfY3RlJHJlc2lkdWFscykNCg0KQm94LnRlc3QoYXJpbWEwMTFfY3RlJHJlc2lkdWFscywgdHlwZT1jKCJManVuZy1Cb3giKSwgbGFnPTIpDQpCb3gudGVzdChhcmltYTAxMV9jdGUkcmVzaWR1YWxzLCB0eXBlPWMoIkxqdW5nLUJveCIpLCBsYWc9NCkNCkJveC50ZXN0KGFyaW1hMDExX2N0ZSRyZXNpZHVhbHMsIHR5cGU9YygiTGp1bmctQm94IiksIGxhZz02KQ0KDQoNCmBgYA0KDQpUb2RvcyBvcyB0ZXN0ZXMgcmVhbGl6YWRvcyBpbmRpY2FtIGEgYXVz6m5jaWEgZGUgYXV0b2NvcnJlbGHn428gZG9zIHJlc+1kdW9zLg0KDQpEZSBtYW5laXJhIG1haXMgZGlyZXRhLCBvIGRpYWdu83N0aWNvIGRvcyByZXPtZHVvcyB0YW1i6W0gcG9kZSBzZXIgcmVhbGl6YWRvIHV0aWxpemFuZG8gYSBmdW7n428gKipfY2hlY2tyZXNpZHVhbHNfKiogZG8gcGFjb3RlICoqX2ZvcmVjYXN0XyoqLg0KDQpgYGB7cn0NCmNoZWNrcmVzaWR1YWxzKGFyaW1hMDExX2N0ZSkNCmBgYA0KDQoNCiMjIDIuNCAtIFByZXZpc+NvDQoNCkEg+mx0aW1hIGV0YXBhIGRhIG1ldG9kb2xvZ2lhIGRlIEJveCAmIEplbmtpbnMgY29uc2lzdGUgZW0sIGEgcGFydGlyIGRvIG1vZGVsbyBlc3RpbWFkbywgcmVhbGl6YXIgcHJldmlz9WVzICgqdmVyaWZpY2FyIGRldGFsaGVzIG5vIFBQVCB1dGlsaXphZG8gZW0gYXVsYSopLg0KDQpQYXJhIHJlYWxpemFyIGFzIHByZXZpc/VlcywgaXJlbW9zIHVpdGxpemFyIGEgZnVu5+NvICoqX2ZvcmVjYXN0XyoqIGRvIHBhY290ZSAqKl9mb3JlY2FzdF8qKi4gQ29tbyBleGVyY+1jaW8sIHZhbW9zIHJlYWxpemFyIHByZXZpc+NvIHBhcmEgdHLqcyBhbm9zIChwYXLibWV0cm8gX2g9M18pLCBjb20gaW50ZXJ2YWxvIGRlIGNvbmZpYW7nYSBkZSA5NSUNCg0KYGBge3J9DQpwcmV2aXNhbyA9IGZvcmVjYXN0KGFyaW1hMDExX2N0ZSwgaD0zLCBsZXZlbD0wLjk1KQ0KcGxvdChwcmV2aXNhbykNCmBgYA0KDQpDb21vIHRyYWJhbGhhbW9zIGNvbSBhIHPpcmllIGVtICpsbiosIHByZWNpc2Ftb3MgY2FsY3VsYXIgbyAqYW50aWxvZ2FyaXRtbyogZG9zIHZhbG9yZXMgcHJldmlzdG9zLiBVbWEgZGFzIGZvcm1hcyBkZSBleGVjdXRhciBlc3NhIHRyYW5zZm9ybWHn428g6SBkYWRhIHBvcjoNCg0KDQoNCmBgYHtyfQ0KcHJldmlzYW8kbWVhbiA9IGV4cChwcmV2aXNhbyRtZWFuKQ0KcHJldmlzYW8keCA9IGV4cChwcmV2aXNhbyR4KQ0KcHJldmlzYW8kdXBwZXIgPSBleHAocHJldmlzYW8kdXBwZXIpDQpwcmV2aXNhbyRsb3dlciA9IGV4cChwcmV2aXNhbyRsb3dlcikNCnByZXZpc2FvJGZpdHRlZCA9IGV4cChwcmV2aXNhbyRmaXR0ZWQpDQpwbG90KHByZXZpc2FvKQ0KYGBgDQoNCg==

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *