Considere um processo AR(1):

\[ y_t = C + \phi y_{t-1} + e_t \quad , \ e_t \sim RB(0,\sigma^2) \quad , \ t = 1,2,...T \]

Esperança

É dada por:

\[ E[y_t] = E[C] + E[\phi y_{t-1}] + E[e_t]\\ E[y_t] = C + E[\phi y_{t-1}] + 0\\ \]

Sabemos que: \(E[y_{t-1}] = E[y_t]\)
Então fazendo uma simples manipulação temos que:

\[ E[y_t] - \phi E[y_t] = C \\ E[y_t][1 - \phi] = C \\ E[y_t] = \frac{C}{1 - \phi} = M \\ \]

Variância

É dada por:

\[ Var(y_t) = Var(c) + Var(\phi y_{t-1}) + Var(e_t) + 2cov(y_{t-1}, e_t) \\ Var(y_t) = 0 + \phi ^2 var(y_{t-1}) + \sigma ^2 + 2cov(y_{t-1}, e_t) \\ \] Sabemos que: \(Var(y_{t-1}) = Var(y_t)\)
E que: \(cov(y_{t-1}, e_t) = 0\)
Assim, realizando a mesma manobra algébrica anteriormente seguimos com:

\[ Var(y_t) = \phi ^2 var(y_t) + \sigma ^2 \\ Var(y_t)(1 - \phi ^2 ) = \sigma ^2 \\ Var(y_t) = \frac{\sigma ^2}{1 - \phi ^2 } , \quad |\phi| < 1 \]

Covariância

Primeiro encontraremos \(\gamma_1 = cov(y_t , y_{t-1})\)

\[ \gamma_1 = cov(y_t, y_{t-1}) = E[(\phi y_{t-1} + e_t) *(y_{t-1})] \\ \gamma_1 = E[\phi (y_{t-1})(y_{t-1})] + E[e_t (y_{t-1})] \\ \gamma_1 = \phi E[(y_{t-1})(y_{t-1})] + 0 \\ \gamma_1 = \phi Var(y_{t-1}) = \phi (\frac{\sigma ^2}{1 - \phi ^2 }) \\ \]

Para \(\gamma_2\):

\[ \gamma_2 = cov(y_t, y_{t-2}) = E[(\phi y_{t-2} + e_{t-1}) *(y_{t-2})] \\ \gamma_2 = E[\phi (y_{t-2})(y_{t-2})] + E[e_{t-1} (y_{t-2})] \\ \gamma_2 = \phi^2 E[(y_{t-2})(y_{t-2})] + 0 \\ \gamma_2 = \phi^2 Var(y_{t-2}) = \phi^2 (\frac{\sigma ^2}{1 - \phi ^2 }) \\ \]

Se continuarmos o processo n vezes teremos que: \[ \gamma_n = \phi ^n (\frac{\sigma ^2}{1 - \phi ^2}) \]

Correlação

A correlação, \(\rho\), é dada pela divisão da covariância pela variância. Assim temos que:
\[ \rho_n = \phi^n\]

Com isso agora podemos comparar as correlações obtidas de maneira teórica com as correlações estimadas de forma computacional. Para isto, geramos uma série temporal de forma pseudo aleatória considerando o modelo AR com 1 parâmetro:

set.seed(2023)

y_ar1= arima.sim(n = 100, list(ar = c(-0.6)))
ajuste.y_ar1 = arima(y_ar1,  order = c(1, 0, 0))
ajuste.y_ar1$coef
        ar1   intercept 
-0.53893041  0.08134307 
plot(y_ar1, ylab="Série temporal", xlab="Tempo")

acfar1 <- acf(y_ar1, lag.max=7, plot=FALSE)
acfar1 <- round(acfar1[["acf"]],3)
teoric <- round((ajuste.y_ar1$coef[1])^(0:7),3)
Tabela 1 - Valores Teóricos e Estimados Computacionalmente para o modelo AR(1), \(\widehat{\phi}\) = -0.539.
n 1 2 3 4 5 6 7
\(\rho_n\) -0.539 0.29 -0.157 0.084 -0.045 0.025 -0.013
r\(_n\) -0.544 0.38 -0.291 -0.02 0.084 -0.134 0.191
\(|\rho_n - r_n|\) 0.005 0.09 0.134 0.104 0.129 0.159 0.204

Onde \(\rho_{j}\) são os valores reais das auto correlações da série e \(r_{j}\) são os valores estimados.

acf(y_ar1)$ac

pacf(y_ar1)$acf

Considere um processo MA(1):

\[y_t = C + e_t + \theta e_{t-1} \quad , \ t = 1,2,...T \quad , \ e_t \sim RB(0,\sigma^2)\]

Esperança

É dada por:

\[ E[y_t] = E[C] + E[e_t] + E[\theta e_{t-1}]\\ E[y_t] = C + 0 + 0\\ E[y_t] = C \]

Variância

É dada por:

\[ Var(y_t) = E[(y_t - c)^2] = E[(e_t + \theta e_{t-1})^2] \\ Var(y_t) = E[e_t ^2] + 2\theta E[e_t e_{t-1}] + \theta^2 E[e_{t-1} ^2] \\ Var(y_t) = \sigma^2 + 0 + \sigma^2 \theta^2 \\ Var(y_t) = \sigma^2(1+\theta^2) \]

Covariância

Primeiro encontraremos \(\gamma_1 = cov(y_t , y_{t-1})\)

\[ \gamma_1 = cov(y_t, y_{t-1}) = E[(e_t + \theta e_{t-1}) *(e_{t-1} + \theta e_{t-2})] \\ \gamma_1 = E[e_t e_{t-1}] + \theta E[e_t e_{t-2}] + \theta E[e_{t-1} ^2] + \theta^2 E[e_{t-1} e_{t-2}] \\ \gamma_1 = 0 + 0 + \theta \sigma^2 + 0 \\ \gamma_1 = \theta \sigma^2 \\ \]

Para \(\gamma_2\):

\[ \gamma_2 = cov(y_t, y_{t-1}) = E[(e_t + \theta e_{t-1}) *(e_{t-2} + \theta e_{t-3})] \\ \gamma_2 = E[e_t e_{t-2}] + \theta E[e_t e_{t-3}] + \theta E[e_{t-1} e_{t-2}] + \theta^2 E[e_{t-1} e_{t-3}] \\ \gamma_2 = 0 + 0 + 0 + 0 \\ \gamma_2 = 0 \\ \]

Para \(\gamma_3\):

\[ \gamma_3 = cov(y_t, y_{t-1}) = E[(e_t + \theta e_{t-1}) *(e_{t-3} + \theta e_{t-4})] \\ \gamma_3 = E[e_t e_{t-3}] + \theta E[e_t e_{t-4}] + \theta E[e_{t-1} e_{t-4}] + \theta^2 E[e_{t-1} e_{t-4}] \\ \gamma_3 = 0 + 0 + 0 + 0 \\ \gamma_3 = 0 \\ \]

Se continuarmos o processo n vezes teremos que:

\[ \gamma_n =\begin{cases} & \theta \sigma^2 \ , \forall \ n = 1\\ & 0 \ , \ \forall \ n > 1 \end{cases} \]

Correlação

A correlação, \(\rho\), é dada pela divisão da covariância pela variância. Assim temos que:
\[ \gamma_n =\begin{cases} & \frac{\theta}{1+\theta ^2} \ , \forall \ n = 1\\ & 0 \ , \ \forall \ n > 1 \end{cases} \]

Com isso agora podemos comparar as correlações obtidas de maneira teórica com as correlações estimadas de forma computacional. Para isto, geramos uma série temporal de forma pseudo aleatória considerando o modelo MA com 1 parâmetro:

set.seed(2023)

y_ma1= arima.sim(n = 100, list(ar = c(0.5)))
ajuste.y_ma1 = arima(y_ma1,  order = c(0, 0, 1))
ajuste.y_ma1$coef
      ma1 intercept 
0.4654431 0.2522353 
plot(y_ma1, ylab="Série temporal", xlab="Tempo")

acfma1 <- acf(y_ma1, lag.max=7, plot=FALSE)
acfma1 <- round(acfma1[["acf"]],3)
teoric1 <- c(round(ajuste.y_ma1$coef[1] / 1 + ajuste.y_ma1$coef[1]^2, 3), rep(0,6))
Tabela 2 - Valores Teóricos e Estimados Computacionalmente para o modelo MA(1), \(\theta\) = 0.465.
n 1 2 3 4 5 6 7
\(\rho_n\) 0.682 0 0 0 0 0 0
r\(_n\) 0.529 0.165 -0.158 -0.203 -0.061 0.004 0.11
\(|\rho_n - r_n|\) 0.153 0.165 0.158 0.203 0.061 0.004 0.11

Onde \(\rho_{j}\) são os valores reais das auto correlações da série e \(r_{j}\) são os valores estimados.

acf(y_ma1)$ac

pacf(y_ma1)$acf

Agora para tornarmos nosso \(\theta\) negativo fazemos:

set.seed(2023)

y_ma2 = arima.sim(n = 100, list(ar = c(-0.5)))
ajuste.y_ma2 = arima(y_ma2,  order = c(0, 0, 1))
ajuste.y_ma2$coef
        ma1   intercept 
-0.39459175  0.08722491 
plot(y_ma2, ylab="Série temporal", xlab="Tempo")

acfma2 <- acf(y_ma2, lag.max=7, plot=FALSE)
acfma2 <- round(acfma2[["acf"]],3)
teoric2 <- c(round(ajuste.y_ma2$coef[1] / 1 + ajuste.y_ma2$coef[1]^2, 3), rep(0,6))
Tabela 3 - Valores Teóricos e Estimados Computacionalmente para o modelo MA(1), \(\theta\) = -0.395.
n 1 2 3 4 5 6 7
\(\rho_n\) -0.239 0 0 0 0 0 0
r\(_n\) -0.428 0.275 -0.234 -0.089 0.106 -0.123 0.178
\(|\rho_n - r_n|\) 0.189 0.275 0.234 0.089 0.106 0.123 0.178

Onde \(\rho_{j}\) são os valores reais das auto correlações da série e \(r_{j}\) são os valores estimados.

acf(y_ma1)$ac

pacf(y_ma1)$acf

Desenvolvido por: Eraldo Rocha

LS0tDQp0aXRsZTogIlPDqXJpZXMgVGVtcG9yYWlzIg0Kb3V0cHV0OiBodG1sX25vdGVib29rDQoNCi0tLQ0KDQpgYGB7ciwgZWNobz1GQUxTRX0NCnJtKGxpc3Q9bHMoYWxsPVQpKQ0KYGBgDQoNCg0KIyMjIyBDb25zaWRlcmUgdW0gcHJvY2Vzc28gQVIoMSk6IA0KDQokJA0KeV90ID0gQyArIFxwaGkgeV97dC0xfSArIGVfdCBccXVhZCAsIFwgZV90IFxzaW0gUkIoMCxcc2lnbWFeMikgXHF1YWQgLCBcIHQgPSAxLDIsLi4uVA0KJCQgDQoNCiMjIyMjICoqRXNwZXJhbsOnYSoqDQrDiSBkYWRhIHBvcjogDQoNCiQkDQpFW3lfdF0gPSBFW0NdICsgRVtccGhpIHlfe3QtMX1dICsgRVtlX3RdXFwNCkVbeV90XSA9IEMgKyBFW1xwaGkgeV97dC0xfV0gKyAwXFwNCiQkDQoNClNhYmVtb3MgcXVlOiAkRVt5X3t0LTF9XSA9IEVbeV90XSQgIA0KRW50w6NvIGZhemVuZG8gdW1hIHNpbXBsZXMgbWFuaXB1bGHDp8OjbyB0ZW1vcyBxdWU6ICANCg0KJCQNCkVbeV90XSAtIFxwaGkgRVt5X3RdID0gQyBcXA0KRVt5X3RdWzEgLSBccGhpXSA9IEMgXFwNCkVbeV90XSA9IFxmcmFje0N9ezEgLSBccGhpfSA9IE0gXFwNCiQkDQoNCg0KDQojIyMjIyAqKlZhcmnDom5jaWEqKiANCsOJIGRhZGEgcG9yOiAgDQoNCiQkDQpWYXIoeV90KSA9IFZhcihjKSArIFZhcihccGhpIHlfe3QtMX0pICsgVmFyKGVfdCkgKyAyY292KHlfe3QtMX0sIGVfdCkgXFwNClZhcih5X3QpID0gMCArIFxwaGkgXjIgdmFyKHlfe3QtMX0pICsgXHNpZ21hIF4yICsgMmNvdih5X3t0LTF9LCBlX3QpIFxcDQokJA0KU2FiZW1vcyBxdWU6ICRWYXIoeV97dC0xfSkgPSBWYXIoeV90KSQgIA0KRSBxdWU6ICRjb3YoeV97dC0xfSwgZV90KSA9IDAkICANCkFzc2ltLCByZWFsaXphbmRvIGEgbWVzbWEgbWFub2JyYSBhbGfDqWJyaWNhIGFudGVyaW9ybWVudGUgc2VndWltb3MgY29tOg0KDQokJA0KVmFyKHlfdCkgPSBccGhpIF4yIHZhcih5X3QpICsgXHNpZ21hIF4yIFxcDQpWYXIoeV90KSgxIC0gXHBoaSBeMiApID0gXHNpZ21hIF4yIFxcDQpWYXIoeV90KSA9IFxmcmFje1xzaWdtYSBeMn17MSAtIFxwaGkgXjIgfSAsIFxxdWFkIHxccGhpfCA8IDENCiQkDQoNCiMjIyMjICoqQ292YXJpw6JuY2lhKioNClByaW1laXJvIGVuY29udHJhcmVtb3MgJFxnYW1tYV8xID0gY292KHlfdCAsIHlfe3QtMX0pJCAgDQoNCiQkDQpcZ2FtbWFfMSA9IGNvdih5X3QsIHlfe3QtMX0pID0gRVsoXHBoaSB5X3t0LTF9ICsgZV90KSAqKHlfe3QtMX0pXSBcXA0KXGdhbW1hXzEgPSBFW1xwaGkgKHlfe3QtMX0pKHlfe3QtMX0pXSArIEVbZV90ICh5X3t0LTF9KV0gXFwNClxnYW1tYV8xID0gXHBoaSBFWyh5X3t0LTF9KSh5X3t0LTF9KV0gKyAwIFxcDQpcZ2FtbWFfMSA9IFxwaGkgVmFyKHlfe3QtMX0pID0gXHBoaSAoXGZyYWN7XHNpZ21hIF4yfXsxIC0gXHBoaSBeMiB9KSBcXA0KJCQNCg0KUGFyYSAkXGdhbW1hXzIkOiAgDQoNCiQkDQpcZ2FtbWFfMiA9IGNvdih5X3QsIHlfe3QtMn0pID0gRVsoXHBoaSB5X3t0LTJ9ICsgZV97dC0xfSkgKih5X3t0LTJ9KV0gXFwNClxnYW1tYV8yID0gRVtccGhpICh5X3t0LTJ9KSh5X3t0LTJ9KV0gKyBFW2Vfe3QtMX0gKHlfe3QtMn0pXSBcXA0KXGdhbW1hXzIgPSBccGhpXjIgRVsoeV97dC0yfSkoeV97dC0yfSldICsgMCBcXA0KXGdhbW1hXzIgPSBccGhpXjIgVmFyKHlfe3QtMn0pID0gXHBoaV4yIChcZnJhY3tcc2lnbWEgXjJ9ezEgLSBccGhpIF4yIH0pIFxcDQokJA0KDQpTZSBjb250aW51YXJtb3MgbyBwcm9jZXNzbyBuIHZlemVzIHRlcmVtb3MgcXVlOiANCiQkIFxnYW1tYV9uID0gXHBoaSBebiAoXGZyYWN7XHNpZ21hIF4yfXsxIC0gXHBoaSBeMn0pICQkDQoNCiMjIyMjICoqQ29ycmVsYcOnw6NvKioNCkEgY29ycmVsYcOnw6NvLCAkXHJobyQsIMOpIGRhZGEgcGVsYSBkaXZpc8OjbyBkYSBjb3ZhcmnDom5jaWEgcGVsYSB2YXJpw6JuY2lhLiBBc3NpbSB0ZW1vcyBxdWU6ICANCiQkIFxyaG9fbiA9IFxwaGlebiQkDQoNCkNvbSBpc3NvIGFnb3JhIHBvZGVtb3MgY29tcGFyYXIgYXMgY29ycmVsYcOnw7VlcyBvYnRpZGFzIGRlIG1hbmVpcmEgdGXDs3JpY2EgY29tIGFzIGNvcnJlbGHDp8O1ZXMgZXN0aW1hZGFzIGRlIGZvcm1hIGNvbXB1dGFjaW9uYWwuIFBhcmEgaXN0bywgZ2VyYW1vcyB1bWEgc8OpcmllIHRlbXBvcmFsIGRlIGZvcm1hIHBzZXVkbyBhbGVhdMOzcmlhIGNvbnNpZGVyYW5kbyBvIG1vZGVsbyBBUiBjb20gMSBwYXLDom1ldHJvOg0KDQpgYGB7cn0NCnNldC5zZWVkKDIwMjMpDQoNCnlfYXIxPSBhcmltYS5zaW0obiA9IDEwMCwgbGlzdChhciA9IGMoLTAuNikpKQ0KYWp1c3RlLnlfYXIxID0gYXJpbWEoeV9hcjEsICBvcmRlciA9IGMoMSwgMCwgMCkpDQphanVzdGUueV9hcjEkY29lZg0KcGxvdCh5X2FyMSwgeWxhYj0iU8OpcmllIHRlbXBvcmFsIiwgeGxhYj0iVGVtcG8iKQ0KYGBgDQoNCmBgYHtyfQ0KYWNmYXIxIDwtIGFjZih5X2FyMSwgbGFnLm1heD03LCBwbG90PUZBTFNFKQ0KYWNmYXIxIDwtIHJvdW5kKGFjZmFyMVtbImFjZiJdXSwzKQ0KdGVvcmljIDwtIHJvdW5kKChhanVzdGUueV9hcjEkY29lZlsxXSleKDA6NyksMykNCmBgYA0KIyMjIyMgVGFiZWxhIDEgLSBWYWxvcmVzIFRlw7NyaWNvcyBlIEVzdGltYWRvcyBDb21wdXRhY2lvbmFsbWVudGUgcGFyYSBvIG1vZGVsbyBBUigxKSwgJFx3aWRlaGF0e1xwaGl9JCA9IGByIHJvdW5kKGFqdXN0ZS55X2FyMSRjb2VmWzFdLCAzKWAuDQoNCnwgICAgbiAgICAgfCAgMSAgfCAgIDIgICAgfCAgIDMgICB8ICAgNCAgICB8ICAgNSAgICB8ICAgNiAgICB8ICAgNyAgICB8DQp8Oi0tLS0tLS0tOnw6LS0tOnw6LS0tLS0tOnw6LS0tLS06fDotLS0tLS06fDotLS0tLS06fDotLS0tLS06fDotLS0tLS06fA0KfCAkXHJob19uJCB8ICBgciB0ZW9yaWNbMl1gICB8IGByIHRlb3JpY1szXWAgIHwgYHIgdGVvcmljWzRdYCAgfCAgYHIgdGVvcmljWzVdYCB8ICBgciB0ZW9yaWNbNl1gICB8ICBgciB0ZW9yaWNbN11gIHwgIGByIHRlb3JpY1s4XWAgIHwNCnwgIHIkX24kICAgfCAgYHIgYWNmYXIxWzJdYCAgfCAgYHIgYWNmYXIxWzNdYCB8ICBgciBhY2ZhcjFbNF1gIHwgYHIgYWNmYXIxWzVdYCAgfCAgYHIgYWNmYXIxWzZdYCAgfCAgYHIgYWNmYXIxWzddYCB8ICBgciBhY2ZhcjFbOF1gICB8DQp8ICAkfFxyaG9fbiAtIHJfbnwkICAgfCAgYHIgYWJzKHRlb3JpY1syXSAtIGFjZmFyMVsyXSlgICB8ICBgciBhYnModGVvcmljWzNdIC0gYWNmYXIxWzNdKWAgfCAgYHIgYWJzKHRlb3JpY1s0XSAtIGFjZmFyMVs0XSlgIHwgYHIgYWJzKHRlb3JpY1s1XSAtIGFjZmFyMVs1XSlgICB8ICBgciBhYnModGVvcmljWzZdIC0gYWNmYXIxWzZdKWAgIHwgIGByIGFicyh0ZW9yaWNbN10gLSBhY2ZhcjFbN10pYCB8ICBgciBhYnModGVvcmljWzhdIC0gYWNmYXIxWzhdKWAgIHwNCg0KDQpPbmRlICRccmhvX3tqfSQgc8OjbyBvcyB2YWxvcmVzIHJlYWlzIGRhcyBhdXRvIGNvcnJlbGHDp8O1ZXMgZGEgc8OpcmllIGUgJHJfe2p9JCBzw6NvIG9zIHZhbG9yZXMgZXN0aW1hZG9zLg0KDQoNCmBgYHtyIHJlc3VsdHMgPSAiaGlkZSJ9DQphY2YoeV9hcjEpJGFjDQpwYWNmKHlfYXIxKSRhY2YNCmBgYA0KIyMjIyBDb25zaWRlcmUgdW0gcHJvY2Vzc28gTUEoMSk6DQokJHlfdCA9IEMgKyBlX3QgKyBcdGhldGEgZV97dC0xfSBccXVhZCAsIFwgdCA9IDEsMiwuLi5UIFxxdWFkICwgXCBlX3QgXHNpbSBSQigwLFxzaWdtYV4yKSQkIA0KDQojIyMjIyAqKkVzcGVyYW7Dp2EqKg0Kw4kgZGFkYSBwb3I6IA0KDQokJA0KRVt5X3RdID0gRVtDXSArIEVbZV90XSArIEVbXHRoZXRhIGVfe3QtMX1dXFwNCkVbeV90XSA9IEMgKyAwICsgMFxcDQpFW3lfdF0gPSBDDQokJA0KDQoNCiMjIyMjICoqVmFyacOibmNpYSoqIA0Kw4kgZGFkYSBwb3I6ICANCg0KJCQNClZhcih5X3QpID0gRVsoeV90IC0gYyleMl0gPSBFWyhlX3QgKyBcdGhldGEgZV97dC0xfSleMl0gXFwNClZhcih5X3QpID0gRVtlX3QgXjJdICsgMlx0aGV0YSBFW2VfdCBlX3t0LTF9XSArIFx0aGV0YV4yIEVbZV97dC0xfSBeMl0gXFwNClZhcih5X3QpID0gXHNpZ21hXjIgKyAwICsgXHNpZ21hXjIgXHRoZXRhXjIgXFwNClZhcih5X3QpID0gXHNpZ21hXjIoMStcdGhldGFeMikNCiQkDQoNCiMjIyMjICoqQ292YXJpw6JuY2lhKioNClByaW1laXJvIGVuY29udHJhcmVtb3MgJFxnYW1tYV8xID0gY292KHlfdCAsIHlfe3QtMX0pJCAgDQoNCiQkDQpcZ2FtbWFfMSA9IGNvdih5X3QsIHlfe3QtMX0pID0gRVsoZV90ICsgXHRoZXRhIGVfe3QtMX0pICooZV97dC0xfSArIFx0aGV0YSBlX3t0LTJ9KV0gXFwNClxnYW1tYV8xID0gRVtlX3QgZV97dC0xfV0gKyBcdGhldGEgRVtlX3QgZV97dC0yfV0gKyBcdGhldGEgRVtlX3t0LTF9IF4yXSArIFx0aGV0YV4yIEVbZV97dC0xfSBlX3t0LTJ9XSBcXA0KXGdhbW1hXzEgPSAwICsgMCArIFx0aGV0YSBcc2lnbWFeMiArIDAgXFwgDQpcZ2FtbWFfMSA9IFx0aGV0YSBcc2lnbWFeMiBcXCANCiQkDQoNClBhcmEgJFxnYW1tYV8yJDogIA0KDQokJA0KXGdhbW1hXzIgPSBjb3YoeV90LCB5X3t0LTF9KSA9IEVbKGVfdCArIFx0aGV0YSBlX3t0LTF9KSAqKGVfe3QtMn0gKyBcdGhldGEgZV97dC0zfSldIFxcDQpcZ2FtbWFfMiA9IEVbZV90IGVfe3QtMn1dICsgXHRoZXRhIEVbZV90IGVfe3QtM31dICsgXHRoZXRhIEVbZV97dC0xfSBlX3t0LTJ9XSArIFx0aGV0YV4yIEVbZV97dC0xfSBlX3t0LTN9XSBcXA0KXGdhbW1hXzIgPSAwICsgMCArICAwICsgMCBcXCANClxnYW1tYV8yID0gMCBcXCANCiQkDQoNClBhcmEgJFxnYW1tYV8zJDogIA0KDQokJA0KXGdhbW1hXzMgPSBjb3YoeV90LCB5X3t0LTF9KSA9IEVbKGVfdCArIFx0aGV0YSBlX3t0LTF9KSAqKGVfe3QtM30gKyBcdGhldGEgZV97dC00fSldIFxcDQpcZ2FtbWFfMyA9IEVbZV90IGVfe3QtM31dICsgXHRoZXRhIEVbZV90IGVfe3QtNH1dICsgXHRoZXRhIEVbZV97dC0xfSBlX3t0LTR9XSArIFx0aGV0YV4yIEVbZV97dC0xfSBlX3t0LTR9XSBcXA0KXGdhbW1hXzMgPSAwICsgMCArICAwICsgMCBcXCANClxnYW1tYV8zID0gMCBcXCANCiQkDQoNCg0KU2UgY29udGludWFybW9zIG8gcHJvY2Vzc28gbiB2ZXplcyB0ZXJlbW9zIHF1ZToNCg0KJCQNClxnYW1tYV9uID1cYmVnaW57Y2FzZXN9DQogJiBcdGhldGEgXHNpZ21hXjIgXCAsIFxmb3JhbGwgXCBuID0gMVxcIA0KICYgIDAgXCAsIFwgXGZvcmFsbCBcIG4gPiAxIA0KXGVuZHtjYXNlc30NCiQkDQoNCg0KIyMjIyMgKipDb3JyZWxhw6fDo28qKg0KQSBjb3JyZWxhw6fDo28sICRccmhvJCwgw6kgZGFkYSBwZWxhIGRpdmlzw6NvIGRhIGNvdmFyacOibmNpYSBwZWxhIHZhcmnDom5jaWEuIEFzc2ltIHRlbW9zIHF1ZTogIA0KJCQNClxnYW1tYV9uID1cYmVnaW57Y2FzZXN9DQogJiBcZnJhY3tcdGhldGF9ezErXHRoZXRhIF4yfSBcICwgXGZvcmFsbCBcIG4gPSAxXFwgDQogJiAgMCBcICwgXCBcZm9yYWxsIFwgbiA+IDEgDQpcZW5ke2Nhc2VzfQ0KJCQNCg0KQ29tIGlzc28gYWdvcmEgcG9kZW1vcyBjb21wYXJhciBhcyBjb3JyZWxhw6fDtWVzIG9idGlkYXMgZGUgbWFuZWlyYSB0ZcOzcmljYSBjb20gYXMgY29ycmVsYcOnw7VlcyBlc3RpbWFkYXMgZGUgZm9ybWEgY29tcHV0YWNpb25hbC4gUGFyYSBpc3RvLCBnZXJhbW9zIHVtYSBzw6lyaWUgdGVtcG9yYWwgZGUgZm9ybWEgcHNldWRvIGFsZWF0w7NyaWEgY29uc2lkZXJhbmRvIG8gbW9kZWxvIE1BIGNvbSAxIHBhcsOibWV0cm86DQoNCmBgYHtyfQ0Kc2V0LnNlZWQoMjAyMykNCg0KeV9tYTE9IGFyaW1hLnNpbShuID0gMTAwLCBsaXN0KGFyID0gYygwLjUpKSkNCmFqdXN0ZS55X21hMSA9IGFyaW1hKHlfbWExLCAgb3JkZXIgPSBjKDAsIDAsIDEpKQ0KYWp1c3RlLnlfbWExJGNvZWYNCnBsb3QoeV9tYTEsIHlsYWI9IlPDqXJpZSB0ZW1wb3JhbCIsIHhsYWI9IlRlbXBvIikNCmBgYA0KDQoNCg0KDQoNCmBgYHtyfQ0KYWNmbWExIDwtIGFjZih5X21hMSwgbGFnLm1heD03LCBwbG90PUZBTFNFKQ0KYWNmbWExIDwtIHJvdW5kKGFjZm1hMVtbImFjZiJdXSwzKQ0KdGVvcmljMSA8LSBjKHJvdW5kKGFqdXN0ZS55X21hMSRjb2VmWzFdIC8gMSArIGFqdXN0ZS55X21hMSRjb2VmWzFdXjIsIDMpLCByZXAoMCw2KSkNCmBgYA0KDQojIyMjIyBUYWJlbGEgMiAtIFZhbG9yZXMgVGXDs3JpY29zIGUgRXN0aW1hZG9zIENvbXB1dGFjaW9uYWxtZW50ZSBwYXJhIG8gbW9kZWxvIE1BKDEpLCAkXHRoZXRhJCA9IGByIHJvdW5kKGFqdXN0ZS55X21hMSRjb2VmWzFdLCAzKWAuDQoNCnwgICAgbiAgICAgfCAgMSAgfCAgIDIgICAgfCAgIDMgICB8ICAgNCAgICB8ICAgNSAgICB8ICAgNiAgICB8ICAgNyAgICB8DQp8Oi0tLS0tLS0tOnw6LS0tOnw6LS0tLS0tOnw6LS0tLS06fDotLS0tLS06fDotLS0tLS06fDotLS0tLS06fDotLS0tLS06fA0KfCAkXHJob19uJCB8ICBgciB0ZW9yaWMxWzFdYCAgfCBgciB0ZW9yaWMxWzJdYCAgfCBgciB0ZW9yaWMxWzNdYCAgfCBgciB0ZW9yaWMxWzRdYCAgfCAgYHIgdGVvcmljMVs1XWAgIHwgIGByIHRlb3JpYzFbNl1gIHwgIGByIHRlb3JpYzFbN11gICB8DQp8ICByJF9uJCAgIHwgIGByIGFjZm1hMVsyXWAgIHwgYHIgYWNmbWExWzNdYCAgfCAgYHIgYWNmbWExWzRdYCB8IGByIGFjZm1hMVs1XWAgIHwgIGByIGFjZm1hMVs2XWAgIHwgIGByIGFjZm1hMVs3XWAgfCAgYHIgYWNmbWExWzhdYCAgfA0KfCAgJHxccmhvX24gLSByX258JCAgIHwgIGByIGFicyh0ZW9yaWMxWzFdIC0gYWNmbWExWzJdKWAgIHwgIGByIGFicyh0ZW9yaWMxWzJdIC0gYWNmbWExWzNdKWAgfCAgYHIgYWJzKHRlb3JpYzFbM10gLSBhY2ZtYTFbNF0pYCB8IGByIGFicyh0ZW9yaWMxWzRdIC0gYWNmbWExWzVdKWAgIHwgIGByIGFicyh0ZW9yaWMxWzVdIC0gYWNmbWExWzZdKWAgIHwgIGByIGFicyh0ZW9yaWMxWzZdIC0gYWNmbWExWzddKWAgfCAgYHIgYWJzKHRlb3JpYzFbN10gLSBhY2ZtYTFbOF0pYCAgfA0KDQoNCk9uZGUgJFxyaG9fe2p9JCBzw6NvIG9zIHZhbG9yZXMgcmVhaXMgZGFzIGF1dG8gY29ycmVsYcOnw7VlcyBkYSBzw6lyaWUgZSAkcl97an0kIHPDo28gb3MgdmFsb3JlcyBlc3RpbWFkb3MuDQoNCmBgYHtyIHJlc3VsdHMgPSAiaGlkZSJ9DQphY2YoeV9tYTEpJGFjDQpwYWNmKHlfbWExKSRhY2YNCmBgYA0KDQoNCiMjIyMgQWdvcmEgcGFyYSB0b3JuYXJtb3Mgbm9zc28gJFx0aGV0YSQgbmVnYXRpdm8gZmF6ZW1vczoNCg0KYGBge3J9DQpzZXQuc2VlZCgyMDIzKQ0KDQp5X21hMiA9IGFyaW1hLnNpbShuID0gMTAwLCBsaXN0KGFyID0gYygtMC41KSkpDQphanVzdGUueV9tYTIgPSBhcmltYSh5X21hMiwgIG9yZGVyID0gYygwLCAwLCAxKSkNCmFqdXN0ZS55X21hMiRjb2VmDQpwbG90KHlfbWEyLCB5bGFiPSJTw6lyaWUgdGVtcG9yYWwiLCB4bGFiPSJUZW1wbyIpDQpgYGANCg0KYGBge3J9DQphY2ZtYTIgPC0gYWNmKHlfbWEyLCBsYWcubWF4PTcsIHBsb3Q9RkFMU0UpDQphY2ZtYTIgPC0gcm91bmQoYWNmbWEyW1siYWNmIl1dLDMpDQp0ZW9yaWMyIDwtIGMocm91bmQoYWp1c3RlLnlfbWEyJGNvZWZbMV0gLyAxICsgYWp1c3RlLnlfbWEyJGNvZWZbMV1eMiwgMyksIHJlcCgwLDYpKQ0KYGBgDQoNCiMjIyMjIFRhYmVsYSAzIC0gVmFsb3JlcyBUZcOzcmljb3MgZSBFc3RpbWFkb3MgQ29tcHV0YWNpb25hbG1lbnRlIHBhcmEgbyBtb2RlbG8gTUEoMSksICRcdGhldGEkID0gYHIgcm91bmQoYWp1c3RlLnlfbWEyJGNvZWZbMV0sIDMpYC4NCg0KfCAgICBuICAgICB8ICAxICB8ICAgMiAgICB8ICAgMyAgIHwgICA0ICAgIHwgICA1ICAgIHwgICA2ICAgIHwgICA3ICAgIHwNCnw6LS0tLS0tLS06fDotLS06fDotLS0tLS06fDotLS0tLTp8Oi0tLS0tLTp8Oi0tLS0tLTp8Oi0tLS0tLTp8Oi0tLS0tLTp8DQp8ICRccmhvX24kIHwgIGByIHRlb3JpYzJbMV1gICB8IGByIHRlb3JpYzJbMl1gICB8IGByIHRlb3JpYzJbM11gICB8IGByIHRlb3JpYzJbNF1gICB8ICBgciB0ZW9yaWMyWzVdYCAgfCAgYHIgdGVvcmljMls2XWAgfCAgYHIgdGVvcmljMls3XWAgIHwNCnwgIHIkX24kICAgfCAgYHIgYWNmbWEyWzJdYCAgfCBgciBhY2ZtYTJbM11gICB8ICBgciBhY2ZtYTJbNF1gIHwgYHIgYWNmbWEyWzVdYCAgfCAgYHIgYWNmbWEyWzZdYCAgfCAgYHIgYWNmbWEyWzddYCB8ICBgciBhY2ZtYTJbOF1gICB8DQp8ICAkfFxyaG9fbiAtIHJfbnwkICAgfCAgYHIgYWJzKHRlb3JpYzJbMV0gLSBhY2ZtYTJbMl0pYCAgfCAgYHIgYWJzKHRlb3JpYzJbMl0gLSBhY2ZtYTJbM10pYCB8ICBgciBhYnModGVvcmljMlszXSAtIGFjZm1hMls0XSlgIHwgYHIgYWJzKHRlb3JpYzJbNF0gLSBhY2ZtYTJbNV0pYCAgfCAgYHIgYWJzKHRlb3JpYzJbNV0gLSBhY2ZtYTJbNl0pYCAgfCAgYHIgYWJzKHRlb3JpYzJbNl0gLSBhY2ZtYTJbN10pYCB8ICBgciBhYnModGVvcmljMls3XSAtIGFjZm1hMls4XSlgICB8DQoNCg0KT25kZSAkXHJob197an0kIHPDo28gb3MgdmFsb3JlcyByZWFpcyBkYXMgYXV0byBjb3JyZWxhw6fDtWVzIGRhIHPDqXJpZSBlICRyX3tqfSQgc8OjbyBvcyB2YWxvcmVzIGVzdGltYWRvcy4NCg0KDQpgYGB7ciByZXN1bHRzID0gImhpZGUifQ0KYWNmKHlfbWExKSRhYw0KcGFjZih5X21hMSkkYWNmDQpgYGANCg0KDQoNCg0KIyMjIyBEZXNlbnZvbHZpZG8gcG9yOiBFcmFsZG8gUm9jaGEg