Este material tem como objetivo contribuir para o entendimento sobre modelos autorregressivos (AR), principalmente sobre como avaliar a estacionariedade destes modelos e como fazer uso da função de autocorrelação parcial (FACP) para identificar na prática a ordem de um modelo AR.

INTRODUÇÃO

Nos modelos de séries temporais univariadas a modelagem econométrica tem como objetivo capturar a relação entre \(r_{t}\) e informações disponíveis antes de \(t\). Assim, a expressão geral da série temporal dos retornos, \({\left\{{r}_{t}\right\}}_{t=1}^{T}\), pode ser definida como:

\[ {r}_{t}=f\left({r}_{t-1},{r}_{t-2},...,{a}_{t} \right) \]

A função acima nos diz que valores passados dos retornos (\({r}_{t-1},{r}_{t-2},...,\)) juntamente com um termo de erro (\(a_{t}\)) são úteis para modelar o retorno em \(t\). Para que a equação seja operacional precisamos definir:

Diferentemente dos modelos de regressão linear múltipla, onde fazemos uso da teoria econômica para definir a forma funcional de \(f\left(\right)\), em séries temporais univariadas as funções de autocorrelação e autocorrelação parcial definirão os três pontos listados acima.

A classe de modelos autorregressivos é caracterizada por uma formulação para \(f\left(\right)\) onde apenas as defasagens dos retornos são capazes de modelar o retorno em \(t\), sendo o termo de erro (\(a_{t}\)) um ruído branco estacionário (média zero, variância constante e não-autocorrelacionado).

De forma geral, podemos escrever um modelo autorregressivo da seguinte forma:

\[ r_{t} = {\phi}_{0} + {\phi}_{1}r_{t-1} + {\phi}_{2}r_{t-2} + {\phi}_{3}r_{t-3} + ... + {\phi}_{p}r_{t-p} + a_{t} \]

Esta formulação é conhecida como AR(p) dado que \(p\) defasagens do retorno foram usadas para especificar a forma funcional linear a ser estimada.

AR(1)

Suponha que temos o seguinte modelo autorregressivo de primeira ordem, AR(1).

\[ r_{t} = {\phi}_{0} + {\phi}_{1}r_{t-1} + a_{t} \]

onde \(a_{t}\) é um ruído branco com média \(0\), variância \(\sigma_{a}^{2}\), \(E\left[a_t-E(a)\right]\left[a_{t-l}-E(a)\right]=E[a_{t}a_{t-l}]=0\) e iid (independente e identicamente distribuído).

Anteriormente, assumimos a hipótese de estacionariedade fraca para modelar uma série temporal. Assim, para estimar um modelo \(AR(1)\) temos que garantir que as hipóteses são mantidas. Elas são: \(E[r_{t}]=\mu\), \(Var(r_{t}) = \gamma_{0}\) e \(Cov(r_{t},r_{t-l})=\gamma_{l}\) onde \(\mu\) e \(\gamma_{0}\) são constantes e \(\gamma_{l}\) é função de uma defasagem \(l\) qualquer, mas não do tempo \(t\).

Fazendo uso da hipóteses \(E[r_{t}]=E[r_{t-1}]=\mu\) e \(E[a_{t}]=0\), temos:

\[ \begin{split} E[r_{t}] & = {\phi}_{0} + {\phi}_{1}E[r_{t-1}] \\ & \\ \mu &= {\phi}_{0} + {\phi}_{1}\mu \\ & \\ \mu &= \frac{{\phi}_{0}}{1 - {\phi}_{1}} \end{split} \]

O resultado mostra que o valor esperado do modelo autorregressivo de primeira ordem, AR(1), será constante e independente do tempo assim como proposto pela hipótese de estacionariedade fraca. Porém, precisamos que \({\phi}_{1} \neq 1\) para que o valor esperado exista.

Fazendo uso da hipóteses \(Var(r_{t})=Var(r_{t-1})\) em função da série ser gerada pelo mesmo processo, \(Var(a_{t})=\sigma_{a}^{2}\) e \(Cov(a_{t},r_{t-1})=0\), temos:

\[ \begin{split} Var(r_{t}) &= {\phi}_{1}^{2}Var(r_{t-1}) + Var(a_{t}) + 2{\phi}_{1}Cov(a_{t},r_{t-1}) \\ & \\ & = {\phi}_{1}^{2}Var(r_{t}) + \sigma_{a}^{2} \\ & \\ & = \frac{\sigma_{a}^{2}}{1-{\phi}_{1}^{2}} \end{split} \]

Dessa forma, se \(\left| {\phi}_{1} \right| > 1\), a variância de \(r_{t}\) seria negativa, o que é um absurdo. Se \(\left| {\phi}_{1} \right| = 1\), a variância de \(r_{t}\) é infinita, o que impossibilita, em princípio, a inferência estatística. Assim, a restrição que precisamos estabelecer ao processo AR(1) é que \(\left| {\phi}_{1} \right| < 1\).

Reescrevendo a média do processo como \(\phi_{0}=(1 -{\phi}_{1})\mu\) podemos reescrever o modelo AR(1) como:

\[ \begin{split} && r_{t} = (1 -{\phi}_{1})\mu + {\phi}_{1}r_{t-1} + a_{t} \\ && \\ && r_{t} = \mu -{\phi}_{1}\mu + {\phi}_{1}r_{t-1} + a_{t} \\ && \\ && r_{t} - \mu = {\phi}_{1}(r_{t-1} - \mu) + a_{t} \end{split} \]

Multiplicando os dois lados da equação acima por \((r_{t-l}-\mu)\), temos:

\[ \left(r_{t}-\mu\right)\left(r_{t-l}-\mu\right) = {\phi}_{1}(r_{t-1}-\mu)\left(r_{t-l}-\mu\right) + a_{t}\left(r_{t-l}-\mu\right) \]

Usando a hipótese de que \(E[a_{t}(r_{t-l}-\mu)]=0\) em função de \(a_{t}\) ser um ruído branco e calculando o valor esperado, teremos a autocovariância do processo em relação a uma defasagem qualquer tal que \(l>0\):

\[ E[(r_{t}-\mu)(r_{t-l}-\mu)] = {\phi}_{1}E[(r_{t-1} - \mu)(r_{t-l}-\mu)] \] que pode ser escrita usando \(\gamma\) para definir a autocovariância entre as defasagens \(l\) e \(l-1\) do retorno da seguinte forma:

\[ \gamma_{l} = {\phi}_{1}\gamma_{l-1} \]

Sabemos que a divisão da autocovariância pela variância proporcionará a autocorrelação. Assumindo que dividimos a equação acima pela variância do processo e em função de \(VAR(r_t)=VAR(r_{t-1})=VAR(r_{t-l})\), teremos:

\[ \rho_{l} = {\phi}_{1}\rho_{l-1} \] onde \(\phi_{1}\) representa a autocorrelação entre o retorno em \(l\) e \(l-1\). Como sabemos que \(\left| {\phi}_{1} \right| < 1\) (a partir da hipótese de variância incondicional constante) e que para \(l=0\) teremos \(\rho_{0}=1\), pois a autocorrelação será a divisão da variância do processo por ela mesma, podemos simular a função de autocorrelação do modelo AR(1), como segue:

Assim, podemos afirmar que a função de autocorrelação de um modelo AR(1) será da forma \(\rho_{l}={\phi}_{1}^{l}\) para \(l\ge0\). Simule as autocorrelações usando um valor de \({\phi}_{1}\) entre -1 e 1 (a partir da hipótese de variância incondicional constante) e veja que na medida que \(l\) aumentar o valor de \(\rho_{l}\) decairá exponencialmente.

Podemos visualizar as propriedades estudadas para este modelo a partir de suas funções de autocorrelação e autocorrelação parcial. Para tanto, vamos simular um modelo no seguinte formato:

\[ r_{t} = 10 + 0.5r_{t-1} + a_{t} \] A imagem abaixo mostra o gráfico da série temporal resultante do modelo. É possível observar que realmente há estacionariedade fraca dado que a série oscila em torno de uma média (\(10\)) e com uma variância constante.

A análise das funções de autocorrelação e autocorrelação parcial da série, mostradas abaixo, confirmam que para a PACF há significância estatística apenas em uma desafagem. O comportamento da função de aucorrelação também está de encontro com o estudado dado que apresenta decaimento exponencial.

AR(2)

Suponha que temos o seguinte modelo autorregressivo de segunda ordem, AR(2).

\[ r_{t} = {\phi}_{0} + {\phi}_{1}r_{t-1} + {\phi}_{2}r_{t-2} + a_{t} \]

onde \(a_{t}\) é um ruído branco com média \(0\), variância \(\sigma_{a}^{2}\), \(E\left[a_t-E(a)\right]\left[a_{t-l}-E(a)\right]=E[a_{t}a_{t-l}]=0\) e indepente e identicamente distribuído (iid).

Anteriormente, assumimos a hipótese de estacionariedade fraca para modelar uma série temporal. Assim, para estimar um modelo \(AR(2)\) temos que garantir que as hipóteses são mantidas. Elas são: \(E[r_{t}]=\mu\), \(Var(r_{t}) = \gamma_{0}\) e \(Cov(r_{t},r_{t-j})=\gamma_{l}\) onde \(\mu\) e \(\gamma_{0}\) são constantes e \(\gamma_{l}\) é função de uma defasagem \(l\) qualquer, mas não do tempo \(t\).

Fazendo uso da hipóteses \(E[r_{t}]=E[r_{t-1}]=[r_{t-2}]=\mu\) e \(E[a_{t}]=0\), temos:

\[ E[r_{t}] = {\phi}_{0} + {\phi}_{1}E[r_{t-1}] + {\phi}_{2}E[r_{t-2}] \] \[ \mu = {\phi}_{0} + {\phi}_{1}\mu + {\phi}_{2}\mu \]

\[ \mu = \frac{{\phi}_{0}}{1 - {\phi}_{1} - {\phi}_{2}} \]

O resultado mostra que o valor esperado do modelo autorregressivo de segunda ordem, AR(2), será constante e independente do tempo assim como proposto pela hipótese de estacionariedade fraca. Porém, precisamos que \(\phi_{1} + \phi_{2} \neq 1\) para que o valor esperado exista.

Reescrevendo a média do processo como \(\phi_{0}=(1 -{\phi}_{1} -{\phi}_{2})\mu\) podemos reescrever o modelo AR(2) como:

\[ r_{t} = (1 -{\phi}_{1} -{\phi}_{2})\mu + {\phi}_{1}r_{t-1} + {\phi}_{2}r_{t-2} + a_{t} \] \[ r_{t} = \mu -{\phi}_{1}\mu - {\phi}_{2}\mu + {\phi}_{1}r_{t-1} + {\phi}_{2}r_{t-2} + a_{t} \] \[ r_{t} - \mu = {\phi}_{1}(r_{t-1} - \mu) + {\phi}_{2}(r_{t-2} - \mu) + a_{t} \] Multiplicando os dois lados da equação acima por \((r_{t-l}-\mu)\), temos:

\[ \left(r_{t}-\mu\right)\left(r_{t-l}-\mu\right) = {\phi}_{1}\left(r_{t-1}-\mu\right)\left(r_{t-l}-\mu\right)+{\phi}_{2}\left(r_{t-2}-\mu\right)\left(r_{t-l}-\mu\right)+a_{t}\left(r_{t-l}-\mu\right) \]

Usando a hipótese de que \(E[a_{t}(r_{t-l}-\mu)]=0\) em função de \(a_{t}\) ser um ruído branco e calculando o valor esperado, teremos a autocovariância do processo em relação a uma defasagem qualquer tal que \(l>0\):

\[ E[(r_{t}-\mu)(r_{t-l}-\mu)] = {\phi}_{1}E[(r_{t-1} - \mu)(r_{t-l}-\mu)] + {\phi}_{2}E[(r_{t-2} - \mu)(r_{t-l}-\mu)] \] que pode ser escrita usando \(\gamma\) para definir a função de autocovariância do modelo AR(2) da seguinte forma:

\[ \gamma_{l} = {\phi}_{1}\gamma_{l-1} + {\phi}_{2}\gamma_{l-2} \]

Sabemos que a divisão da autocovariância pela variância proporcionará a autocorrelação. Assumindo que dividimos a equação acima pela variância do processo e em função de \(VAR(r_t)=VAR(r_{t-1})=VAR(r_{t-2})=VAR(r_{t-l})\) teremos a função de autocorrelação como:

\[ \rho_{l} = {\phi}_{1}\rho_{l-1} + {\phi}_{2}\rho_{l-2} \]

onde \(\phi_{1}\) e \(\phi_{2}\) representam a autocorrelação entre o retorno em \(l\) em relação a \(l-1\) e \(l-2\), respectivamente. Para \(l=0\), \(\rho_{0}=1\), pois a autocorrelação será a divisão da variância do processo por ela mesma. Além disso, por propriedade de correlação \(\rho_{-l}=\rho_{l}\) e \(\phi_{1} + \phi_{2} \neq 1\) para que a média exista.

Assim, a função de autocorrelação do modelo AR(2) estacionário será:

Avaliando \(\rho_{l}={\phi}_{1}\rho_{l-1}+{\phi}_{2}\rho_{l-2}\) é possível observar que se trata de uma equação em diferenças de segunda ordem (em diferenças por que estamos trabalhando com tempo discreto). Usando operadores de defasagens (\(B\rho_{l} = p_{l-1}\) e \(B^{2}\rho_{l} = p_{l-2}\)) podemos escrever a função como:

\[ (1-\phi_{1}B-\phi_{2}B^{2})\rho_{l}=0 \]

Esta equação determinará o comportamento da função de autocorrelação do processo AR(2) estacionário. Avaliando apenas o polinômio da equação e fazendo \(B=z\), temos:

\[ 1-\phi_{1}z-\phi_{2}z^{2} \]

que terá como solução:

\[ z=\frac{\phi_{1}\pm \sqrt{\phi_{1}^{2}+4\phi_{2}}}{-2\phi_{2}} \]

se ambas as raízes do polinômio são valores reais, então a equação em diferenças de segunda ordem do modelo AR(2) resultará em uma função de autocorrelação com decaímento exponencial parecido com o AR(1). Já se \(\phi_{1}^{2}+4\phi_{2}<0\) teremos que ambas as raízes do polinômio são números complexos e o gráfico da função de autocorrelação apresentará um comportamento parecido com o das funções seno e coseno. Para relembrar, abaixo gráfico das funções seno e conseno.

Usando a função de autocorrelação do modelo AR(2), temos:

Para obter a variância, basta multiplicar o modelo reescrito como \(r_{t}-\mu={\phi}_{1}(r_{t-1}-\mu)+{\phi}_{2}(r_{t-2}-\mu)+a_{t}\) por \(r_{t}-\mu\), obter o valor esperado e fazer uso das hipóteses acima juntamente com \(\rho_{l}={\gamma_{l}}/{\gamma_0}\) para \(l\ge0\), \(E[a_{t}(r_{t-l}-\mu)]=0\) e \(E[a_{t}^{2}]=\sigma_{a}^{2}\) para encontrar:

\[ \begin{split} E[r_{t}-\mu]^{2} & = {\phi}_{1}E[(r_{t-1} - \mu)(r_{t}-\mu)] + {\phi}_{2}E[(r_{t-2} - \mu)(r_{t}-\mu)] + E[a_{t}(r_{t}-\mu)] \\ & \\ & = {\phi}_{1}E[(r_{t-1} - \mu)(r_{t}-\mu)] + {\phi}_{2}E[(r_{t-2} - \mu)(r_{t}-\mu)] + E[a_{t}\left({\phi}_{1}(r_{t-1} - \mu) + {\phi}_{2}(r_{t-2} - \mu) + a_{t}\right)] \\ & \\ & = {\phi}_{1}E[(r_{t-1} - \mu)(r_{t}-\mu)] + {\phi}_{2}E[(r_{t-2} - \mu)(r_{t}-\mu)] + E[a_{t}a_{t}] \\ & \\ E[r_{t}-\mu]^{2} =\gamma_{0} & = {\phi}_{1}\gamma_{1} + {\phi}_{2}\gamma_{2} + \sigma_{a}^{2} \\ & \\ \gamma_{0} & = {\phi}_{1}\gamma_{0}\rho_{1} + {\phi}_{2}\gamma_{0}\rho_{2} + \sigma_{a}^{2} \\ & \\ \gamma_{0} & = \gamma_{0}\left[\frac{\phi_{1}^{2}}{1-\phi_{2}} + \frac{\phi_{1}^{2}\phi_{2}}{1-\phi_{2}} +\phi_{2}^{2} \right] + \sigma_{a}^{2} \\ & \\ \gamma_{0} & = \frac{(1-\phi_{2})\sigma_{a}^{2}}{(\phi_{2}+1)(1-\phi_{2}-\phi_{1})(1-\phi_{2}+\phi_{1})} \\ & \\ \gamma_{0} & = \frac{(1-\phi_{2})\sigma_{a}^{2}}{(1+\phi_{2})\left[1-(\phi_{2}+\phi_{1})\right]\left[1-(\phi_{2}-\phi_{1})\right]} \\ \end{split} \]

Finalmente, temos que para o processo AR(2) apresentar variância e que ela seja finita é preciso que \(\phi_{2}+\phi_{1}<1\), \(\phi_{2}-\phi_{1}<1\) e \(\left| {\phi}_{2} \right| < 1\).

Podemos visualizar as propriedades estudadas para este modelo a partir de suas funções de autocorrelação e autocorrelação parcial. Para tanto, vamos simular um modelo no seguinte formato:

\[ r_{t} = 10 + 0.5r_{t-1} - 0.3r_{t-2} + a_{t} \] A imagem abaixo mostra o gráfico da série temporal resultante do modelo. É possível observar que há aparente estacionariedade fraca dado que a série oscila em torno de uma média (\(10\)) e com uma variância constante.

A análise das funções de autocorrelação e autocorrelação parcial da série, mostradas abaixo, confirmam que para a PACF há significância estatística apenas em duas desafagem. O comportamento da função de autocorrelação também está de encontro com o estudado dado que apresenta decaimento exponencial juntamente com comportamento parecido com o das funções seno e coseno.

AR(p)

Suponha agora que temos o seguinte modelo autorregressivo de ordem \(p\), AR(p).

\[ r_{t} = {\phi}_{0} + {\phi}_{1}r_{t-1} + {\phi}_{2}r_{t-2} + ... + {\phi}_{p}r_{t-p} + a_{t} \]

onde \(a_{t}\) é um ruído branco com média \(0\), variância \(\sigma_{a}^{2}\), \(E\left[a_t-E(a)\right]\left[a_{t-l}-E(a)\right]=E[a_{t}a_{t-l}]=0\) e indepente e identicamente distribuído (iid).

Anteriormente, assumimos a hipótese de estacionariedade fraca para modelar uma série temporal. Assim, para estimar um modelo \(AR(P)\) temos que garantir que as hipóteses são mantidas. Elas são: \(E[r_{t}]=\mu\), \(Var(r_{t}) = \gamma_{0}\) e \(Cov(r_{t},r_{t-j})=\gamma_{j}\) onde \(\mu\) e \(\gamma_{0}\) são constantes e \(\gamma_{j}\) é função de uma defasagem \(j\) qualquer, mas não do tempo \(t\).

Fazendo uso da hipóteses \(E[r_{t}]=E[r_{t-1}]=[r_{t-p}]=\mu\) e \(E[a_{t}]=0\), temos:

\[ E[r_{t}] = {\phi}_{0} + {\phi}_{1}E[r_{t-1}] + {\phi}_{2}E[r_{t-2}] + ... + {\phi}_{p}E[r_{t-p}] \] \[ \mu = {\phi}_{0} + {\phi}_{1}\mu + {\phi}_{2}\mu + ... + {\phi}_{p}\mu \]

\[ \mu = \frac{{\phi}_{0}}{1 - {\phi}_{1} - {\phi}_{2} - ... - {\phi}_{p}} \]

O resultado mostra que o valor esperado do modelo autorregressivo, AR(p), será constante e independente do tempo assim como proposto pela hipótese de estacionariedade fraca. Porém, precisamos que \(\phi_{1} + \phi_{2} + ... + \phi_{p} \neq 1\) para que o valor esperado exista.

Reescrevendo a média do processo como \(\phi_{0}=(1 -{\phi}_{1} -{\phi}_{2} - ... - {\phi}_{p})\mu\) podemos reescrever o modelo AR(p) como:

\[ r_{t} = (1 -{\phi}_{1} -{\phi}_{2} - ... - {\phi}_{p})\mu + {\phi}_{1}r_{t-1} + {\phi}_{2}r_{t-1} + ... + {\phi}_{p}r_{t-p} + a_{t} \] \[ r_{t} = \mu -{\phi}_{1}\mu - {\phi}_{2}\mu - ... - {\phi}_{p}\mu + {\phi}_{1}r_{t-1} + {\phi}_{2}r_{t-1} + ... + {\phi}_{p}r_{t-p} + a_{t} \] \[ r_{t} - \mu = {\phi}_{1}(r_{t-1} - \mu) + {\phi}_{2}(r_{t-2} - \mu) + ...+ {\phi}_{p}(r_{t-p} - \mu) + a_{t} \] Multiplicando os dois lados da equação acima por \((r_{t-l}-\mu)\), usando a hipótese de que \(E[a_{t}(r_{t-l}-\mu)]=0\) em função de \(a_{t}\) ser um ruído branco e calculando o valor esperado, teremos a autocovariância do processo em relação a uma defasagem qualquer tal que \(l>0\):

\[ E[(r_{t}-\mu)(r_{t-l}-\mu)] = {\phi}_{1}E[(r_{t-1} - \mu)(r_{t-l}-\mu)] + {\phi}_{2}E[(r_{t-2} - \mu)(r_{t-l}-\mu)] + ... + {\phi}_{p}E[(r_{t-p} - \mu)(r_{t-l}-\mu)] \] que pode ser escrita usando \(\gamma\) para definir a função de autocovariância do modelo AR(p) da seguinte forma:

\[ \gamma_{l} = {\phi}_{1}\gamma_{l-1} + {\phi}_{2}\gamma_{l-2} + ... + {\phi}_{p}\gamma_{l-p} \]

Sabemos que a divisão da autocovariância pela variância proporcionará a autocorrelação. Assumindo que dividimos a equação acima pela variância do processo, teremos a função de autocorrelação como:

\[ \rho_{l} = {\phi}_{1}\rho_{l-1} + {\phi}_{2}\rho_{l-2} + ... + {\phi}_{p}\rho_{l-p} \]

onde \(\phi_{1}\), \(\phi_{2}\), …, \(\phi_{p}\) representam a autocorrelação entre o retorno em \(l\) em relação a \(l-1\), \(l-2\), …, \(l-p\), respectivamente. Sabemos que para \(l=0\) teremos \(\rho_{0}=1\), pois a autocorrelação será a divisão da variância do processo por ela mesma, que \(\rho_{-l}=\rho_{l}\) em função de propriedade de correlação e \(\phi_{1} + \phi_{2} + ... + \phi_{p} \neq 1\) para que a média exista.

É interessante observar que a função de autocorrelação do processo AR(p), assim como vimos para o AR(2), é uma equação em diferenças, mas agora de ordem \(P\). Usando operadores de defasagens (\(B\rho_{l} = p_{l-1}\), \(B^{2}\rho_{l} = p_{l-2}\) e \(B^{p}\rho_{l} = p_{l-p}\)) podemos escrever a função como:

\[ (1-\phi_{1}B-\phi_{2}B^{2}- ... -\phi_{p}B^{p})\rho_{l}=0 \]

Esta equação determinará o comportamento da função de autocorrelação do processo AR(p) estacionário. Avaliando apenas o polinômio da equação e fazendo \(B=z\), temos:

\[ 1-\phi_{1}z-\phi_{2}z^{2} - ... -\phi_{p}z^{p} \]

Novamente, temos que o comportamento da função de autocorrelação do modelo AR(p) dependerá das raízes do polinômio. Se são valores reais, resultará em uma função de autocorrelação com decaímento exponencial parecido com o AR(1). Já se são números complexos o gráfico da função de autocorrelação apresentará um comportamento parecido com o das funções seno e coseno.

Podemos visualizar as propriedades estudadas para o modelo AR(p) a partir de suas funções de autocorrelação e autocorrelação parcial. Para tanto, vamos simular um modelo no seguinte formato:

\[ r_{t} = 10 + 0.5r_{t-1} - 0.3r_{t-2} + 0.1r_{t-3} + a_{t} \] A imagem abaixo mostra o gráfico da série temporal resultante do modelo. É possível observar que há aparente estacionariedade fraca dado que a série oscila em torno de uma média (\(10\)) e com uma variância constante.

A análise das funções de autocorrelação e autocorrelação parcial da série, mostradas abaixo, confirmam que para a PACF há significância estatística apenas em três desafagem. O comportamento da função de aucorrelação também está de encontro com o estudado dado que apresenta decaimento exponencial juntamente com comportamento parecido com o das funções seno e coseno.

IDENTIFICANDO MODELOS AR NA PRÁTICA

Na prática, não conhecemos a ordem \(p\) de um modelo AR puro. Ela deve ser especificada empiricamente. Uma abordagem comumente usada é avaliar a função de autocorrelação parcial (FACP) da série em diversas defasagens. Outra alternativa é fazer uso de algum critério de informação (AIC e/ou BIC, por exemplo). Nos exemplos anteriores fizemos uso da PACF para confirmar que ao avaliar tal função para os modelos AR simulados chegaríamos na correta defasagem do modelo.

Foi possível observar que em todos os casos de modelo AR puro a conclusão a partir da FACP estava correta. Maiores detalhes sobre a FACP e como os parâmetros são obtidos, podem ser encontrados neste link.

REFERÊNCIAS

Campbell, John Y, Andrew Wen-Chuan Lo, and Archie Craig MacKinlay. 1997. The Econometrics of Financial Markets. Princeton (NJ) Princeton University Press.

Morettin, Pedro Alberto. 2008. Econometria Financeira Um Curso Em Séries Temporais Financeiras. Edgard Blucher.

Tsay, Ruey S. 2010. Analysis of Financial Time Series. John Wiley & Sons.

———. 2014. An Introduction to Analysis of Financial Data with R. John Wiley & Sons.

LS0tCnRpdGxlOiA8Y2VudGVyPiA8aDI+IDxiPiBNb2RlbG9zIEF1dG9ycmVncmVzc2l2b3MgKEFSKSA8L2I+IDwvaDI+IDwvY2VudGVyPiAKYXV0aG9yOiA8Y2VudGVyPiBGcmFuayBNYWdhbGjDo2VzIGRlIFBpbmhvIC0gSUJNRUMvTUcgPC9jZW50ZXI+CmdyYXBoaWNzOiB5ZXMKbGlua2NvbG9yOiBibHVlCm91dHB1dDogCiAgaHRtbF9ub3RlYm9vazoKICAgIHRoZW1lOiBjZXJ1bGVhbgogICAgZmlnX2NhcHRpb246IHllcwpyZWZlcmVuY2VzOgotIGlkOiB0c2F5MjAxNGludHJvZHVjdGlvbgogIHRpdGxlOiBBbiBpbnRyb2R1Y3Rpb24gdG8gYW5hbHlzaXMgb2YgZmluYW5jaWFsIGRhdGEgd2l0aCBSCiAgYXV0aG9yOgogIC0gZmFtaWx5OiBUc2F5CiAgICBnaXZlbjogUnVleSBTCiAgcHVibGlzaGVyOiBKb2huIFdpbGV5IFwmIFNvbnMKICB0eXBlOiBib29rCiAgaXNzdWVkOgogICAgeWVhcjogMjAxNAotIGlkOiBjYW1wYmVsbDE5OTdlY29ub21ldHJpY3MKICB0aXRsZTogVGhlIGVjb25vbWV0cmljcyBvZiBmaW5hbmNpYWwgbWFya2V0cwogIGF1dGhvcjoKICAtIGZhbWlseTogQ2FtcGJlbGwKICAgIGdpdmVuOiBKb2huIFkKICAtIGZhbWlseTogTG8KICAgIGdpdmVuOiBBbmRyZXcgV2VuLUNodWFuCiAgLSBmYW1pbHk6IE1hY0tpbmxheQogICAgZ2l2ZW46IEFyY2hpZSBDcmFpZwogIHB1Ymxpc2hlcjogUHJpbmNldG9uIChOSikgUHJpbmNldG9uIFVuaXZlcnNpdHkgUHJlc3MKICB0eXBlOiBib29rCiAgaXNzdWVkOgogICAgeWVhcjogMTk5NwotIGlkOiBtb3JldHRpbjIwMDhlY29ub21ldHJpYQogIHRpdGxlOiBFY29ub21ldHJpYSBmaW5hbmNlaXJhIHVtIGN1cnNvIGVtIHPDqXJpZXMgdGVtcG9yYWlzIGZpbmFuY2VpcmFzCiAgYXV0aG9yOgogIC0gZmFtaWx5OiBNb3JldHRpbgogICAgZ2l2ZW46IFBlZHJvIEFsYmVydG8KICBwdWJsaXNoZXI6IEVkZ2FyZCBCbHVjaGVyCiAgdHlwZTogYm9vawogIGlzc3VlZDoKICAgIHllYXI6IDIwMDgKLSBpZDogdHNheTIwMTBhbmFseXNpcwogIHRpdGxlOiBBbmFseXNpcyBvZiBmaW5hbmNpYWwgdGltZSBzZXJpZXMKICBhdXRob3I6CiAgLSBmYW1pbHk6IFRzYXkKICAgIGdpdmVuOiBSdWV5IFMKICBwdWJsaXNoZXI6IEpvaG4gV2lsZXkgXCYgU29ucwogIHR5cGU6IGJvb2sKICBpc3N1ZWQ6CiAgICB5ZWFyOiAyMDEwCm5vY2l0ZTogfCAKICBAdHNheTIwMTRpbnRyb2R1Y3Rpb24sIEBjYW1wYmVsbDE5OTdlY29ub21ldHJpY3MsIEBtb3JldHRpbjIwMDhlY29ub21ldHJpYSwgQHRzYXkyMDEwYW5hbHlzaXMKLS0tCgpFc3RlIG1hdGVyaWFsIHRlbSBjb21vIG9iamV0aXZvIGNvbnRyaWJ1aXIgcGFyYSBvIGVudGVuZGltZW50byBzb2JyZSAqKm1vZGVsb3MgYXV0b3JyZWdyZXNzaXZvcyAoQVIpKiosIHByaW5jaXBhbG1lbnRlIHNvYnJlIGNvbW8gYXZhbGlhciBhIGVzdGFjaW9uYXJpZWRhZGUgZGVzdGVzIG1vZGVsb3MgZSBjb21vIGZhemVyIHVzbyBkYSAqKmZ1bsOnw6NvIGRlIGF1dG9jb3JyZWxhw6fDo28gcGFyY2lhbCAoRkFDUCkqKiBwYXJhIGlkZW50aWZpY2FyIG5hIHByw6F0aWNhIGEgb3JkZW0gZGUgdW0gbW9kZWxvIEFSLgoKYGBge3IsIGVjaG89RkFMU0V9CiMgUGFjb3RlcyBuZWNlc3NhcmlvcwpzdXBwcmVzc01lc3NhZ2VzKHJlcXVpcmUoem9vKSkKc3VwcHJlc3NNZXNzYWdlcyhyZXF1aXJlKHF1YW50bW9kKSkKc3VwcHJlc3NNZXNzYWdlcyhyZXF1aXJlKERUKSkKc3VwcHJlc3NNZXNzYWdlcyhyZXF1aXJlKGRwbHlyKSkKc3VwcHJlc3NNZXNzYWdlcyhyZXF1aXJlKG1hZ3JpdHRyKSkKc3VwcHJlc3NNZXNzYWdlcyhyZXF1aXJlKGhpZ2hjaGFydGVyKSkKc3VwcHJlc3NNZXNzYWdlcyhyZXF1aXJlKFBlcmZvcm1hbmNlQW5hbHl0aWNzKSkgCnN1cHByZXNzTWVzc2FnZXMocmVxdWlyZShodG1sdG9vbHMpKQpgYGAKCiMjIyMjICoqSU5UUk9EVcOHw4NPKioKCk5vcyBtb2RlbG9zIGRlIHPDqXJpZXMgdGVtcG9yYWlzIHVuaXZhcmlhZGFzIGEgbW9kZWxhZ2VtIGVjb25vbcOpdHJpY2EgdGVtIGNvbW8gb2JqZXRpdm8gKipjYXB0dXJhciBhIHJlbGHDp8OjbyBlbnRyZSAkcl97dH0kIGUgaW5mb3JtYcOnw7VlcyBkaXNwb27DrXZlaXMgYW50ZXMgZGUgJHQkLioqIEFzc2ltLCBhIGV4cHJlc3PDo28gZ2VyYWwgZGEgc8OpcmllIHRlbXBvcmFsIGRvcyByZXRvcm5vcywgJHtcbGVmdFx7e3J9X3t0fVxyaWdodFx9fV97dD0xfV57VH0kLCBwb2RlIHNlciBkZWZpbmlkYSBjb21vOgoKJCQKe3J9X3t0fT1mXGxlZnQoe3J9X3t0LTF9LHtyfV97dC0yfSwuLi4se2F9X3t0fSBccmlnaHQpCiQkCgpBIGZ1bsOnw6NvIGFjaW1hIG5vcyBkaXogcXVlIHZhbG9yZXMgcGFzc2Fkb3MgZG9zIHJldG9ybm9zICgke3J9X3t0LTF9LHtyfV97dC0yfSwuLi4sJCkganVudGFtZW50ZSBjb20gdW0gdGVybW8gZGUgZXJybyAoJGFfe3R9JCkgc8OjbyDDunRlaXMgcGFyYSBtb2RlbGFyIG8gcmV0b3JubyBlbSAkdCQuIFBhcmEgcXVlIGEgZXF1YcOnw6NvIHNlamEgb3BlcmFjaW9uYWwgcHJlY2lzYW1vcyBkZWZpbmlyOgoKKiBBIGZvcm1hIGZ1bmNpb25hbCBkZSAkZlxsZWZ0KFxyaWdodCkkCiogTyBuw7ptZXJvIGRlIGRlZmFzYWdlbnMgZG8gcmV0b3JubwoqIFVtYSBlc3RydXR1cmEgcGFyYSBvIHRlcm1vIGRlIGVycm8gJHthfV97dH0kCgpEaWZlcmVudGVtZW50ZSBkb3MgbW9kZWxvcyBkZSByZWdyZXNzw6NvIGxpbmVhciBtw7psdGlwbGEsIG9uZGUgZmF6ZW1vcyB1c28gZGEgdGVvcmlhIGVjb27DtG1pY2EgcGFyYSBkZWZpbmlyIGEgZm9ybWEgZnVuY2lvbmFsIGRlICRmXGxlZnQoXHJpZ2h0KSQsIGVtIHPDqXJpZXMgdGVtcG9yYWlzIHVuaXZhcmlhZGFzIGFzIGZ1bsOnw7VlcyBkZSBhdXRvY29ycmVsYcOnw6NvIGUgYXV0b2NvcnJlbGHDp8OjbyBwYXJjaWFsIGRlZmluaXLDo28gb3MgdHLDqnMgcG9udG9zIGxpc3RhZG9zIGFjaW1hLiAKCkEgY2xhc3NlIGRlICoqbW9kZWxvcyBhdXRvcnJlZ3Jlc3Npdm9zKiogw6kgY2FyYWN0ZXJpemFkYSBwb3IgdW1hIGZvcm11bGHDp8OjbyBwYXJhICRmXGxlZnQoXHJpZ2h0KSQgb25kZSBhcGVuYXMgYXMgZGVmYXNhZ2VucyBkb3MgcmV0b3Jub3Mgc8OjbyBjYXBhemVzIGRlIG1vZGVsYXIgbyByZXRvcm5vIGVtICR0JCwgc2VuZG8gbyB0ZXJtbyBkZSBlcnJvICgkYV97dH0kKSB1bSBydcOtZG8gYnJhbmNvIGVzdGFjaW9uw6FyaW8gKG3DqWRpYSB6ZXJvLCB2YXJpw6JuY2lhIGNvbnN0YW50ZSBlIG7Do28tYXV0b2NvcnJlbGFjaW9uYWRvKS4KCkRlIGZvcm1hIGdlcmFsLCBwb2RlbW9zIGVzY3JldmVyIHVtICoqbW9kZWxvIGF1dG9ycmVncmVzc2l2byoqIGRhIHNlZ3VpbnRlIGZvcm1hOgoKJCQKcl97dH0gPSB7XHBoaX1fezB9ICsge1xwaGl9X3sxfXJfe3QtMX0gKyB7XHBoaX1fezJ9cl97dC0yfSArIHtccGhpfV97M31yX3t0LTN9ICsgLi4uICsge1xwaGl9X3twfXJfe3QtcH0gKyAgYV97dH0KJCQKCkVzdGEgZm9ybXVsYcOnw6NvIMOpIGNvbmhlY2lkYSBjb21vICoqQVIocCkqKiBkYWRvIHF1ZSAkcCQgZGVmYXNhZ2VucyBkbyByZXRvcm5vIGZvcmFtIHVzYWRhcyBwYXJhIGVzcGVjaWZpY2FyIGEgZm9ybWEgZnVuY2lvbmFsICoqbGluZWFyKiogYSBzZXIgZXN0aW1hZGEuIAoKIyMjIyMgKipBUigxKSoqCgpTdXBvbmhhIHF1ZSB0ZW1vcyBvIHNlZ3VpbnRlIG1vZGVsbyBhdXRvcnJlZ3Jlc3Npdm8gZGUgcHJpbWVpcmEgb3JkZW0sICoqQVIoMSkqKi4KCiQkCnJfe3R9ID0ge1xwaGl9X3swfSArIHtccGhpfV97MX1yX3t0LTF9ICsgYV97dH0KJCQKCm9uZGUgJGFfe3R9JCDDqSB1bSBydcOtZG8gYnJhbmNvIGNvbSBtw6lkaWEgJDAkLCB2YXJpw6JuY2lhICRcc2lnbWFfe2F9XnsyfSQsICRFXGxlZnRbYV90LUUoYSlccmlnaHRdXGxlZnRbYV97dC1sfS1FKGEpXHJpZ2h0XT1FW2Ffe3R9YV97dC1sfV09MCQgZSBpaWQgKGluZGVwZW5kZW50ZSBlIGlkZW50aWNhbWVudGUgZGlzdHJpYnXDrWRvKS4gCgpBbnRlcmlvcm1lbnRlLCBhc3N1bWltb3MgYSBoaXDDs3Rlc2UgZGUgZXN0YWNpb25hcmllZGFkZSBmcmFjYSBwYXJhIG1vZGVsYXIgdW1hIHPDqXJpZSB0ZW1wb3JhbC4gQXNzaW0sIHBhcmEgZXN0aW1hciB1bSBtb2RlbG8gJEFSKDEpJCB0ZW1vcyBxdWUgZ2FyYW50aXIgcXVlIGFzIGhpcMOzdGVzZXMgc8OjbyBtYW50aWRhcy4gRWxhcyBzw6NvOiAkRVtyX3t0fV09XG11JCwgJFZhcihyX3t0fSkgPSBcZ2FtbWFfezB9JCBlICRDb3Yocl97dH0scl97dC1sfSk9XGdhbW1hX3tsfSQgb25kZSAkXG11JCBlICRcZ2FtbWFfezB9JCBzw6NvIGNvbnN0YW50ZXMgZSAkXGdhbW1hX3tsfSQgw6kgZnVuw6fDo28gZGUgdW1hIGRlZmFzYWdlbSAkbCQgcXVhbHF1ZXIsIG1hcyBuw6NvIGRvIHRlbXBvICR0JC4KCiogKipNw4lESUEgSU5DT05ESUNJT05BTCBDT05TVEFOVEUqKgoKRmF6ZW5kbyB1c28gZGEgaGlww7N0ZXNlcyAkRVtyX3t0fV09RVtyX3t0LTF9XT1cbXUkIGUgJEVbYV97dH1dPTAkLCB0ZW1vczoKCiQkClxiZWdpbntzcGxpdH0KRVtyX3t0fV0gJiA9IHtccGhpfV97MH0gKyB7XHBoaX1fezF9RVtyX3t0LTF9XSBcXAomIFxcClxtdSAmPSB7XHBoaX1fezB9ICsge1xwaGl9X3sxfVxtdSBcXAomIFxcClxtdSAmPSBcZnJhY3t7XHBoaX1fezB9fXsxIC0ge1xwaGl9X3sxfX0KXGVuZHtzcGxpdH0KJCQKCk8gcmVzdWx0YWRvIG1vc3RyYSBxdWUgbyB2YWxvciBlc3BlcmFkbyBkbyBtb2RlbG8gYXV0b3JyZWdyZXNzaXZvIGRlIHByaW1laXJhIG9yZGVtLCAqKkFSKDEpKiosIHNlcsOhIGNvbnN0YW50ZSBlIGluZGVwZW5kZW50ZSBkbyB0ZW1wbyBhc3NpbSBjb21vIHByb3Bvc3RvIHBlbGEgaGlww7N0ZXNlIGRlIGVzdGFjaW9uYXJpZWRhZGUgZnJhY2EuIFBvcsOpbSwgcHJlY2lzYW1vcyBxdWUgJHtccGhpfV97MX0gXG5lcSAxJCBwYXJhIHF1ZSBvIHZhbG9yIGVzcGVyYWRvIGV4aXN0YS4KCiogKipWQVJJw4JOQ0lBIElOQ09ORElDSU9OQUwgQ09OU1RBTlRFKioKCkZhemVuZG8gdXNvIGRhIGhpcMOzdGVzZXMgJFZhcihyX3t0fSk9VmFyKHJfe3QtMX0pJCBlbSBmdW7Dp8OjbyBkYSBzw6lyaWUgc2VyIGdlcmFkYSBwZWxvIG1lc21vIHByb2Nlc3NvLCAkVmFyKGFfe3R9KT1cc2lnbWFfe2F9XnsyfSQgZSAkQ292KGFfe3R9LHJfe3QtMX0pPTAkLCB0ZW1vczoKCiQkClxiZWdpbntzcGxpdH0KVmFyKHJfe3R9KSAmPSB7XHBoaX1fezF9XnsyfVZhcihyX3t0LTF9KSArIFZhcihhX3t0fSkgKyAye1xwaGl9X3sxfUNvdihhX3t0fSxyX3t0LTF9KSBcXAomIFxcCiYgPSB7XHBoaX1fezF9XnsyfVZhcihyX3t0fSkgKyBcc2lnbWFfe2F9XnsyfSBcXAomIFxcCiYgPSBcZnJhY3tcc2lnbWFfe2F9XnsyfX17MS17XHBoaX1fezF9XnsyfX0KXGVuZHtzcGxpdH0KJCQKCkRlc3NhIGZvcm1hLCBzZSAkXGxlZnR8IHtccGhpfV97MX0gXHJpZ2h0fCA+IDEkLCBhIHZhcmnDom5jaWEgZGUgJHJfe3R9JCBzZXJpYSBuZWdhdGl2YSwgbyBxdWUgw6kgdW0gYWJzdXJkby4gU2UgJFxsZWZ0fCB7XHBoaX1fezF9IFxyaWdodHwgPSAxJCwgYSB2YXJpw6JuY2lhIGRlICRyX3t0fSQgw6kgaW5maW5pdGEsIG8gcXVlIGltcG9zc2liaWxpdGEsIGVtIHByaW5jw61waW8sIGEgaW5mZXLDqm5jaWEgZXN0YXTDrXN0aWNhLiBBc3NpbSwgYSByZXN0cmnDp8OjbyBxdWUgcHJlY2lzYW1vcyBlc3RhYmVsZWNlciBhbyBwcm9jZXNzbyAqKkFSKDEpKiogw6kgcXVlICRcbGVmdHwge1xwaGl9X3sxfSBccmlnaHR8IDwgMSQuCgoqICoqQVVUT0NPVkFSScOCTkNJQSBFIEFVVE9DT1JSRUxBw4fDg08gREVQRU5ERU5URVMgQVBFTkFTIERFICRsJCoqCgpSZWVzY3JldmVuZG8gYSBtw6lkaWEgZG8gcHJvY2Vzc28gY29tbyAkXHBoaV97MH09KDEgLXtccGhpfV97MX0pXG11JCBwb2RlbW9zIHJlZXNjcmV2ZXIgbyBtb2RlbG8gKipBUigxKSoqIGNvbW86CgokJApcYmVnaW57c3BsaXR9CiYmIHJfe3R9ID0gKDEgLXtccGhpfV97MX0pXG11ICsge1xwaGl9X3sxfXJfe3QtMX0gKyBhX3t0fSBcXCAKJiYgXFwKJiYgcl97dH0gPSBcbXUgLXtccGhpfV97MX1cbXUgKyB7XHBoaX1fezF9cl97dC0xfSArIGFfe3R9IFxcIAomJiBcXCAKJiYgcl97dH0gLSBcbXUgPSB7XHBoaX1fezF9KHJfe3QtMX0gLSBcbXUpICsgYV97dH0KXGVuZHtzcGxpdH0KJCQKCk11bHRpcGxpY2FuZG8gb3MgZG9pcyBsYWRvcyBkYSBlcXVhw6fDo28gYWNpbWEgcG9yICQocl97dC1sfS1cbXUpJCwgdGVtb3M6CgokJApcbGVmdChyX3t0fS1cbXVccmlnaHQpXGxlZnQocl97dC1sfS1cbXVccmlnaHQpID0ge1xwaGl9X3sxfShyX3t0LTF9LVxtdSlcbGVmdChyX3t0LWx9LVxtdVxyaWdodCkgKyBhX3t0fVxsZWZ0KHJfe3QtbH0tXG11XHJpZ2h0KQokJAoKVXNhbmRvIGEgaGlww7N0ZXNlIGRlIHF1ZSAkRVthX3t0fShyX3t0LWx9LVxtdSldPTAkIGVtIGZ1bsOnw6NvIGRlICRhX3t0fSQgc2VyIHVtIHJ1w61kbyBicmFuY28gZSBjYWxjdWxhbmRvIG8gdmFsb3IgZXNwZXJhZG8sIHRlcmVtb3MgYSAqKmF1dG9jb3ZhcmnDom5jaWEqKiBkbyBwcm9jZXNzbyBlbSByZWxhw6fDo28gYSB1bWEgZGVmYXNhZ2VtIHF1YWxxdWVyIHRhbCBxdWUgJGw+MCQ6CgokJApFWyhyX3t0fS1cbXUpKHJfe3QtbH0tXG11KV0gPSB7XHBoaX1fezF9RVsocl97dC0xfSAtIFxtdSkocl97dC1sfS1cbXUpXQokJApxdWUgcG9kZSBzZXIgZXNjcml0YSB1c2FuZG8gJFxnYW1tYSQgcGFyYSBkZWZpbmlyIGEgYXV0b2NvdmFyacOibmNpYSBlbnRyZSBhcyBkZWZhc2FnZW5zICRsJCBlICRsLTEkIGRvIHJldG9ybm8gZGEgc2VndWludGUgZm9ybWE6CgokJApcZ2FtbWFfe2x9ID0ge1xwaGl9X3sxfVxnYW1tYV97bC0xfQokJAoKU2FiZW1vcyBxdWUgYSBkaXZpc8OjbyBkYSBhdXRvY292YXJpw6JuY2lhIHBlbGEgdmFyacOibmNpYSBwcm9wb3JjaW9uYXLDoSBhICoqYXV0b2NvcnJlbGHDp8OjbyoqLiBBc3N1bWluZG8gcXVlIGRpdmlkaW1vcyBhIGVxdWHDp8OjbyBhY2ltYSBwZWxhIHZhcmnDom5jaWEgZG8gcHJvY2Vzc28gZSBlbSBmdW7Dp8OjbyBkZSAkVkFSKHJfdCk9VkFSKHJfe3QtMX0pPVZBUihyX3t0LWx9KSQsIHRlcmVtb3M6CgokJApccmhvX3tsfSA9IHtccGhpfV97MX1ccmhvX3tsLTF9CiQkCm9uZGUgJFxwaGlfezF9JCByZXByZXNlbnRhIGEgYXV0b2NvcnJlbGHDp8OjbyBlbnRyZSBvIHJldG9ybm8gZW0gJGwkIGUgJGwtMSQuIENvbW8gc2FiZW1vcyBxdWUgJFxsZWZ0fCB7XHBoaX1fezF9IFxyaWdodHwgPCAxJCAoYSBwYXJ0aXIgZGEgaGlww7N0ZXNlIGRlIHZhcmnDom5jaWEgaW5jb25kaWNpb25hbCBjb25zdGFudGUpIGUgcXVlIHBhcmEgJGw9MCQgdGVyZW1vcyAkXHJob197MH09MSQsIHBvaXMgYSBhdXRvY29ycmVsYcOnw6NvIHNlcsOhIGEgZGl2aXPDo28gZGEgdmFyacOibmNpYSBkbyBwcm9jZXNzbyBwb3IgZWxhIG1lc21hLCBwb2RlbW9zIHNpbXVsYXIgYSBmdW7Dp8OjbyBkZSBhdXRvY29ycmVsYcOnw6NvIGRvIG1vZGVsbyAqKkFSKDEpKiosIGNvbW8gc2VndWU6CgoqICRccmhvX3swfT0xJAoqICRccmhvX3sxfT17XHBoaX1fezF9XHJob197MH09e1xwaGl9X3sxfSQKKiAkXHJob197Mn09e1xwaGl9X3sxfVxyaG9fezF9PXtccGhpfV97MX0gXHRpbWVzeyBccGhpfV97MX09e1xwaGl9X3sxfV57Mn0kCiogJFxyaG9fezN9PXtccGhpfV97MX1ccmhvX3syfT17XHBoaX1fezF9XHRpbWVzIHtccGhpfV97MX1cdGltZXMge1xwaGl9X3sxfT17XHBoaX1fezF9XnszfSQKKiAuLi4uCgpBc3NpbSwgcG9kZW1vcyBhZmlybWFyIHF1ZSBhIGZ1bsOnw6NvIGRlIGF1dG9jb3JyZWxhw6fDo28gZGUgdW0gbW9kZWxvICoqQVIoMSkqKiBzZXLDoSBkYSBmb3JtYSAkXHJob197bH09e1xwaGl9X3sxfV57bH0kIHBhcmEgJGxcZ2UwJC4gU2ltdWxlIGFzIGF1dG9jb3JyZWxhw6fDtWVzIHVzYW5kbyB1bSB2YWxvciBkZSAke1xwaGl9X3sxfSQgZW50cmUgLTEgZSAxIChhIHBhcnRpciBkYSBoaXDDs3Rlc2UgZGUgdmFyacOibmNpYSBpbmNvbmRpY2lvbmFsIGNvbnN0YW50ZSkgZSB2ZWphIHF1ZSBuYSBtZWRpZGEgcXVlICRsJCBhdW1lbnRhciBvIHZhbG9yIGRlICRccmhvX3tsfSQgZGVjYWlyw6EgZXhwb25lbmNpYWxtZW50ZS4KCiogKipGVU7Dh8OVRVMgREUgQVVUT0NPUlJFTEHDh8ODTyBFIEFVVE9DT1JSRUxBw4fDg08gUEFSQ0lBTCoqCgpQb2RlbW9zIHZpc3VhbGl6YXIgYXMgcHJvcHJpZWRhZGVzIGVzdHVkYWRhcyBwYXJhIGVzdGUgbW9kZWxvIGEgcGFydGlyIGRlIHN1YXMgZnVuw6fDtWVzIGRlIGF1dG9jb3JyZWxhw6fDo28gZSBhdXRvY29ycmVsYcOnw6NvIHBhcmNpYWwuIFBhcmEgdGFudG8sIHZhbW9zIHNpbXVsYXIgdW0gbW9kZWxvIG5vIHNlZ3VpbnRlIGZvcm1hdG86IAoKJCQKcl97dH0gPSAxMCArIDAuNXJfe3QtMX0gKyBhX3t0fQokJApBIGltYWdlbSBhYmFpeG8gbW9zdHJhIG8gZ3LDoWZpY28gZGEgc8OpcmllIHRlbXBvcmFsIHJlc3VsdGFudGUgZG8gbW9kZWxvLiDDiSBwb3Nzw612ZWwgb2JzZXJ2YXIgcXVlIHJlYWxtZW50ZSBow6EgZXN0YWNpb25hcmllZGFkZSBmcmFjYSBkYWRvIHF1ZSBhIHPDqXJpZSBvc2NpbGEgZW0gdG9ybm8gZGUgdW1hIG3DqWRpYSAoJDEwJCkgZSBjb20gdW1hIHZhcmnDom5jaWEgY29uc3RhbnRlLgoKYGBge3IsIGVjaG89RkFMU0UsIHRpZHk9VFJVRSwgcmVzdWx0cz0nYXNpcycsIHdhcm5pbmcgPSBGQUxTRX0KYXIxIDwtIGFzLnh0cyhhcmltYS5zaW0obGlzdChvcmRlciA9IGMoMSwwLDApLCBhciA9IGMoMC41KSksIG4gPSAxMDAwMCkrMTApCmhjMSA8LSBoaWdoY2hhcnQodHlwZSA9ICJzdG9jayIpICU+JSAKICBoY190aXRsZSh0ZXh0ID0gIkFSKDEpIFNpbXVsYWRvIikgJT4lIAogIGhjX2FkZF9zZXJpZXMoYXIxLCBpZCA9ICJ0cyIsIGNvbG9yID0gJyMwZDIzM2EnKSAlPiUKICBoY19leHBvcnRpbmcoZW5hYmxlZCA9IFRSVUUpCgpoYzEKYGBgCgpBIGFuw6FsaXNlIGRhcyBmdW7Dp8O1ZXMgZGUgYXV0b2NvcnJlbGHDp8OjbyBlIGF1dG9jb3JyZWxhw6fDo28gcGFyY2lhbCBkYSBzw6lyaWUsIG1vc3RyYWRhcyBhYmFpeG8sIGNvbmZpcm1hbSBxdWUgcGFyYSBhIFBBQ0YgaMOhIHNpZ25pZmljw6JuY2lhIGVzdGF0w61zdGljYSBhcGVuYXMgZW0gdW1hIGRlc2FmYWdlbS4gTyBjb21wb3J0YW1lbnRvIGRhIGZ1bsOnw6NvIGRlIGF1Y29ycmVsYcOnw6NvIHRhbWLDqW0gZXN0w6EgZGUgZW5jb250cm8gY29tIG8gZXN0dWRhZG8gZGFkbyBxdWUgYXByZXNlbnRhIGRlY2FpbWVudG8gZXhwb25lbmNpYWwuIAoKYGBge3IsIGVjaG89RkFMU0UsIHRpZHk9VFJVRSwgcmVzdWx0cz0nYXNpcycsIHdhcm5pbmcgPSBGQUxTRSwgZmlnLmhlaWdodD03fQojIEZ1bsOnw6NvIGRlIGF1dG9jb3JyZWxhw6fDo28KYWNmX2FyMSA8LSBhY2YoYXIxLCBuYS5hY3Rpb24gPSBuYS5wYXNzLCBwbG90ID0gRkFMU0UsIGxhZy5tYXggPSAxNSkKCgojIEdyw6FmaWNvIGRhIGZ1bsOnw6NvIGRlIGF1dG9jb3JyZWxhw6fDo28uIApwbG90KGFjZl9hcjEsIG1haW4gPSAiIiwgeWxhYiA9ICIiLCB4bGFiID0gIkRlZmFzYWdlbSIpCnRpdGxlKCJGdW7Dp8OjbyBkZSBBdXRvY29ycmVsYcOnw6NvIChGQUMpIiwgYWRqID0gMC41LCBsaW5lID0gMSkKCmBgYAoKYGBge3IsIGVjaG89RkFMU0UsIHRpZHk9VFJVRSwgcmVzdWx0cz0nYXNpcycsIHdhcm5pbmcgPSBGQUxTRSwgZmlnLmhlaWdodD03fQojIEZ1bsOnw6NvIGRlIGF1dG9jb3JyZWxhw6fDo28gcGFyY2lhbApwYWNmX2FyMSA8LSBwYWNmKGFyMSwgbmEuYWN0aW9uID0gbmEucGFzcywgcGxvdCA9IEZBTFNFLCBsYWcubWF4ID0gMTUpCgojIEdyw6FmaWNvIGRhIGZ1bsOnw6NvIGRlIGF1dG9jb3JyZWxhw6fDo28gcGFyY2lhbC4gCnBsb3QocGFjZl9hcjEsIG1haW4gPSAiIiwgeWxhYiA9ICIiLCB4bGFiID0gIkRlZmFzYWdlbSIpCnRpdGxlKCJGdW7Dp8OjbyBkZSBBdXRvY29ycmVsYcOnw6NvIFBhcmNpYWwgKEZBQ1ApIiwgYWRqID0gMC41LCBsaW5lID0gMSkKCmBgYAoKCiMjIyMjICoqQVIoMikqKgoKU3Vwb25oYSBxdWUgdGVtb3MgbyBzZWd1aW50ZSBtb2RlbG8gYXV0b3JyZWdyZXNzaXZvIGRlIHNlZ3VuZGEgb3JkZW0sICoqQVIoMikqKi4KCiQkCnJfe3R9ID0ge1xwaGl9X3swfSArIHtccGhpfV97MX1yX3t0LTF9ICsge1xwaGl9X3syfXJfe3QtMn0gKyBhX3t0fQokJAoKb25kZSAkYV97dH0kIMOpIHVtIHJ1w61kbyBicmFuY28gY29tIG3DqWRpYSAkMCQsIHZhcmnDom5jaWEgJFxzaWdtYV97YX1eezJ9JCwgJEVcbGVmdFthX3QtRShhKVxyaWdodF1cbGVmdFthX3t0LWx9LUUoYSlccmlnaHRdPUVbYV97dH1hX3t0LWx9XT0wJCBlIGluZGVwZW50ZSBlIGlkZW50aWNhbWVudGUgZGlzdHJpYnXDrWRvIChpaWQpLiAKCkFudGVyaW9ybWVudGUsIGFzc3VtaW1vcyBhIGhpcMOzdGVzZSBkZSBlc3RhY2lvbmFyaWVkYWRlIGZyYWNhIHBhcmEgbW9kZWxhciB1bWEgc8OpcmllIHRlbXBvcmFsLiBBc3NpbSwgcGFyYSBlc3RpbWFyIHVtIG1vZGVsbyAkQVIoMikkIHRlbW9zIHF1ZSBnYXJhbnRpciBxdWUgYXMgaGlww7N0ZXNlcyBzw6NvIG1hbnRpZGFzLiBFbGFzIHPDo286ICRFW3Jfe3R9XT1cbXUkLCAkVmFyKHJfe3R9KSA9IFxnYW1tYV97MH0kIGUgJENvdihyX3t0fSxyX3t0LWp9KT1cZ2FtbWFfe2x9JCBvbmRlICRcbXUkIGUgJFxnYW1tYV97MH0kIHPDo28gY29uc3RhbnRlcyBlICRcZ2FtbWFfe2x9JCDDqSBmdW7Dp8OjbyBkZSB1bWEgZGVmYXNhZ2VtICRsJCBxdWFscXVlciwgbWFzIG7Do28gZG8gdGVtcG8gJHQkLgoKKiAqKk3DiURJQSBJTkNPTkRJQ0lPTkFMIENPTlNUQU5URSoqCgpGYXplbmRvIHVzbyBkYSBoaXDDs3Rlc2VzICRFW3Jfe3R9XT1FW3Jfe3QtMX1dPVtyX3t0LTJ9XT1cbXUkIGUgJEVbYV97dH1dPTAkLCB0ZW1vczoKCiQkCkVbcl97dH1dID0ge1xwaGl9X3swfSArIHtccGhpfV97MX1FW3Jfe3QtMX1dICsge1xwaGl9X3syfUVbcl97dC0yfV0KJCQKJCQKXG11ID0ge1xwaGl9X3swfSArIHtccGhpfV97MX1cbXUgKyB7XHBoaX1fezJ9XG11CiQkCgokJApcbXUgPSBcZnJhY3t7XHBoaX1fezB9fXsxIC0ge1xwaGl9X3sxfSAtIHtccGhpfV97Mn19CiQkCgpPIHJlc3VsdGFkbyBtb3N0cmEgcXVlIG8gdmFsb3IgZXNwZXJhZG8gZG8gbW9kZWxvIGF1dG9ycmVncmVzc2l2byBkZSBzZWd1bmRhIG9yZGVtLCAqKkFSKDIpKiosIHNlcsOhIGNvbnN0YW50ZSBlIGluZGVwZW5kZW50ZSBkbyB0ZW1wbyBhc3NpbSBjb21vIHByb3Bvc3RvIHBlbGEgaGlww7N0ZXNlIGRlIGVzdGFjaW9uYXJpZWRhZGUgZnJhY2EuIFBvcsOpbSwgcHJlY2lzYW1vcyBxdWUgJFxwaGlfezF9ICsgXHBoaV97Mn0gXG5lcSAxJCBwYXJhIHF1ZSBvIHZhbG9yIGVzcGVyYWRvIGV4aXN0YS4KCiogKipBVVRPQ09WQVJJw4JOQ0lBIEUgQVVUT0NPUlJFTEHDh8ODTyBERVBFTkRFTkRPIEFQRU5BUyBERSAkbCQqKgoKUmVlc2NyZXZlbmRvIGEgbcOpZGlhIGRvIHByb2Nlc3NvIGNvbW8gJFxwaGlfezB9PSgxIC17XHBoaX1fezF9IC17XHBoaX1fezJ9KVxtdSQgcG9kZW1vcyByZWVzY3JldmVyIG8gbW9kZWxvICoqQVIoMikqKiBjb21vOgoKJCQKcl97dH0gPSAoMSAte1xwaGl9X3sxfSAte1xwaGl9X3syfSlcbXUgKyB7XHBoaX1fezF9cl97dC0xfSArIHtccGhpfV97Mn1yX3t0LTJ9ICsgYV97dH0KJCQKJCQKcl97dH0gPSBcbXUgLXtccGhpfV97MX1cbXUgLSB7XHBoaX1fezJ9XG11ICsge1xwaGl9X3sxfXJfe3QtMX0gKyB7XHBoaX1fezJ9cl97dC0yfSArIGFfe3R9CiQkCiQkCnJfe3R9IC0gXG11ID0ge1xwaGl9X3sxfShyX3t0LTF9IC0gXG11KSAgKyB7XHBoaX1fezJ9KHJfe3QtMn0gLSBcbXUpICsgYV97dH0KJCQKTXVsdGlwbGljYW5kbyBvcyBkb2lzIGxhZG9zIGRhIGVxdWHDp8OjbyBhY2ltYSBwb3IgJChyX3t0LWx9LVxtdSkkLCB0ZW1vczoKCiQkClxsZWZ0KHJfe3R9LVxtdVxyaWdodClcbGVmdChyX3t0LWx9LVxtdVxyaWdodCkgPSB7XHBoaX1fezF9XGxlZnQocl97dC0xfS1cbXVccmlnaHQpXGxlZnQocl97dC1sfS1cbXVccmlnaHQpK3tccGhpfV97Mn1cbGVmdChyX3t0LTJ9LVxtdVxyaWdodClcbGVmdChyX3t0LWx9LVxtdVxyaWdodCkrYV97dH1cbGVmdChyX3t0LWx9LVxtdVxyaWdodCkKJCQKClVzYW5kbyBhIGhpcMOzdGVzZSBkZSBxdWUgJEVbYV97dH0ocl97dC1sfS1cbXUpXT0wJCBlbSBmdW7Dp8OjbyBkZSAkYV97dH0kIHNlciB1bSBydcOtZG8gYnJhbmNvIGUgY2FsY3VsYW5kbyBvIHZhbG9yIGVzcGVyYWRvLCB0ZXJlbW9zIGEgKiphdXRvY292YXJpw6JuY2lhKiogZG8gcHJvY2Vzc28gZW0gcmVsYcOnw6NvIGEgdW1hIGRlZmFzYWdlbSBxdWFscXVlciB0YWwgcXVlICRsPjAkOgoKJCQKRVsocl97dH0tXG11KShyX3t0LWx9LVxtdSldID0ge1xwaGl9X3sxfUVbKHJfe3QtMX0gLSBcbXUpKHJfe3QtbH0tXG11KV0gKyB7XHBoaX1fezJ9RVsocl97dC0yfSAtIFxtdSkocl97dC1sfS1cbXUpXQokJApxdWUgcG9kZSBzZXIgZXNjcml0YSB1c2FuZG8gJFxnYW1tYSQgcGFyYSBkZWZpbmlyIGEgZnVuw6fDo28gZGUgYXV0b2NvdmFyacOibmNpYSBkbyAqKm1vZGVsbyBBUigyKSoqIGRhIHNlZ3VpbnRlIGZvcm1hOgoKJCQKXGdhbW1hX3tsfSA9IHtccGhpfV97MX1cZ2FtbWFfe2wtMX0gKyB7XHBoaX1fezJ9XGdhbW1hX3tsLTJ9CiQkCgpTYWJlbW9zIHF1ZSBhIGRpdmlzw6NvIGRhIGF1dG9jb3ZhcmnDom5jaWEgcGVsYSB2YXJpw6JuY2lhIHByb3BvcmNpb25hcsOhIGEgKiphdXRvY29ycmVsYcOnw6NvKiouIEFzc3VtaW5kbyBxdWUgZGl2aWRpbW9zIGEgZXF1YcOnw6NvIGFjaW1hIHBlbGEgdmFyacOibmNpYSBkbyBwcm9jZXNzbyBlIGVtIGZ1bsOnw6NvIGRlICRWQVIocl90KT1WQVIocl97dC0xfSk9VkFSKHJfe3QtMn0pPVZBUihyX3t0LWx9KSQgdGVyZW1vcyBhICoqZnVuw6fDo28gZGUgYXV0b2NvcnJlbGHDp8OjbyoqIGNvbW86CgokJApccmhvX3tsfSA9IHtccGhpfV97MX1ccmhvX3tsLTF9ICsge1xwaGl9X3syfVxyaG9fe2wtMn0KJCQKCm9uZGUgJFxwaGlfezF9JCBlICRccGhpX3syfSQgcmVwcmVzZW50YW0gYSBhdXRvY29ycmVsYcOnw6NvIGVudHJlIG8gcmV0b3JubyBlbSAkbCQgZW0gcmVsYcOnw6NvIGEgJGwtMSQgZSAkbC0yJCwgcmVzcGVjdGl2YW1lbnRlLiBQYXJhICRsPTAkLCAkXHJob197MH09MSQsIHBvaXMgYSBhdXRvY29ycmVsYcOnw6NvIHNlcsOhIGEgZGl2aXPDo28gZGEgdmFyacOibmNpYSBkbyBwcm9jZXNzbyBwb3IgZWxhIG1lc21hLiBBbMOpbSBkaXNzbywgcG9yIHByb3ByaWVkYWRlIGRlIGNvcnJlbGHDp8OjbyAkXHJob197LWx9PVxyaG9fe2x9JCBlICRccGhpX3sxfSArIFxwaGlfezJ9IFxuZXEgMSQgcGFyYSBxdWUgYSBtw6lkaWEgZXhpc3RhLiAKCkFzc2ltLCBhIGZ1bsOnw6NvIGRlIGF1dG9jb3JyZWxhw6fDo28gZG8gbW9kZWxvICoqQVIoMikqKiBlc3RhY2lvbsOhcmlvIHNlcsOhOgoKKiAkXHJob197MH09MSQKKiAkXHJob197MX09e1xwaGl9X3sxfVxyaG9fezB9K3tccGhpfV97Mn1ccmhvX3stMX09e1xwaGl9X3sxfSt7XHBoaX1fezJ9XHJob197MX09XGZyYWN7XHBoaV97MX19ezEtXHBoaV97Mn19JAoqICRccmhvX3tsfT17XHBoaX1fezF9XHJob197bC0xfSt7XHBoaX1fezJ9XHJob197bC0yfSQgcGFyYSAkbFxnZSAyJAoKCkF2YWxpYW5kbyAkXHJob197bH09e1xwaGl9X3sxfVxyaG9fe2wtMX0re1xwaGl9X3syfVxyaG9fe2wtMn0kIMOpIHBvc3PDrXZlbCBvYnNlcnZhciBxdWUgc2UgdHJhdGEgZGUgdW1hIGVxdWHDp8OjbyBlbSBkaWZlcmVuw6dhcyBkZSBzZWd1bmRhIG9yZGVtIChlbSBkaWZlcmVuw6dhcyBwb3IgcXVlIGVzdGFtb3MgdHJhYmFsaGFuZG8gY29tIHRlbXBvIGRpc2NyZXRvKS4gVXNhbmRvIG9wZXJhZG9yZXMgZGUgZGVmYXNhZ2VucyAoJEJccmhvX3tsfSA9IHBfe2wtMX0kIGUgJEJeezJ9XHJob197bH0gPSBwX3tsLTJ9JCkgcG9kZW1vcyBlc2NyZXZlciBhIGZ1bsOnw6NvIGNvbW86CgokJAooMS1ccGhpX3sxfUItXHBoaV97Mn1CXnsyfSlccmhvX3tsfT0wCiQkCgpFc3RhIGVxdWHDp8OjbyBkZXRlcm1pbmFyw6EgbyBjb21wb3J0YW1lbnRvIGRhIGZ1bsOnw6NvIGRlIGF1dG9jb3JyZWxhw6fDo28gZG8gcHJvY2Vzc28gKipBUigyKSoqIGVzdGFjaW9uw6FyaW8uIEF2YWxpYW5kbyBhcGVuYXMgbyBwb2xpbsO0bWlvIGRhIGVxdWHDp8OjbyBlIGZhemVuZG8gJEI9eiQsIHRlbW9zOgoKJCQKMS1ccGhpX3sxfXotXHBoaV97Mn16XnsyfQokJAoKcXVlIHRlcsOhIGNvbW8gc29sdcOnw6NvOgoKJCQKej1cZnJhY3tccGhpX3sxfVxwbSBcc3FydHtccGhpX3sxfV57Mn0rNFxwaGlfezJ9fX17LTJccGhpX3syfX0KJCQKCnNlIGFtYmFzIGFzIHJhw616ZXMgZG8gcG9saW7DtG1pbyBzw6NvIHZhbG9yZXMgcmVhaXMsIGVudMOjbyBhIGVxdWHDp8OjbyBlbSBkaWZlcmVuw6dhcyBkZSBzZWd1bmRhIG9yZGVtIGRvIG1vZGVsbyAqKkFSKDIpKiogcmVzdWx0YXLDoSBlbSB1bWEgKipmdW7Dp8OjbyBkZSBhdXRvY29ycmVsYcOnw6NvKiogY29tIGRlY2HDrW1lbnRvIGV4cG9uZW5jaWFsIHBhcmVjaWRvIGNvbSBvICoqQVIoMSkqKi4gSsOhIHNlICRccGhpX3sxfV57Mn0rNFxwaGlfezJ9PDAkIHRlcmVtb3MgcXVlIGFtYmFzIGFzIHJhw616ZXMgZG8gcG9saW7DtG1pbyBzw6NvIG7Dum1lcm9zIGNvbXBsZXhvcyBlIG8gZ3LDoWZpY28gZGEgKipmdW7Dp8OjbyBkZSBhdXRvY29ycmVsYcOnw6NvKiogYXByZXNlbnRhcsOhIHVtIGNvbXBvcnRhbWVudG8gcGFyZWNpZG8gY29tIG8gZGFzIGZ1bsOnw7VlcyBzZW5vIGUgY29zZW5vLiBQYXJhIHJlbGVtYnJhciwgYWJhaXhvIGdyw6FmaWNvIGRhcyBmdW7Dp8O1ZXMgc2VubyBlIGNvbnNlbm8uCgpgYGB7ciwgZWNobz1GQUxTRSwgdGlkeT1UUlVFLCByZXN1bHRzPSdhc2lzJywgd2FybmluZyA9IEZBTFNFfQp0IDwtc2VxKDAsMTAsMC4xKQp5IDwtc2luKHQpCnkyIDwtY29zKHQpCgpzZWNvIDwtIGhpZ2hjaGFydCgpICU+JSAKICBoY19hZGRfc2VyaWVzKG5hbWUgPSAiU2VubyIsIGRhdGEgPSB5KSAlPiUgCiAgaGNfYWRkX3NlcmllcyhuYW1lID0gIkNvc2VubyIsIGRhdGEgPSB5MikKCnNlY28KYGBgCgoKKiAqKlZBUknDgk5DSUEgSU5DT05ESUNJT05BTCBDT05TVEFOVEUqKgoKVXNhbmRvIGEgZnVuw6fDo28gZGUgYXV0b2NvcnJlbGHDp8OjbyBkbyBtb2RlbG8gKipBUigyKSoqLCB0ZW1vczoKCiogJFxyaG9fezB9PTEkCiogJFxyaG9fezF9PXtccGhpfV97MX1ccmhvX3swfSt7XHBoaX1fezJ9XHJob197LTF9PXtccGhpfV97MX0re1xwaGl9X3syfVxyaG9fezF9PVxmcmFje1xwaGlfezF9fXsxLVxwaGlfezJ9fSQKKiAkXHJob197Mn09e1xwaGl9X3sxfVxyaG9fezF9K3tccGhpfV97Mn1ccmhvX3swfT1cZnJhY3tccGhpX3sxfV57Mn19ezEtXHBoaV97Mn19ICsgXHBoaV97Mn0kCgpQYXJhIG9idGVyIGEgdmFyacOibmNpYSwgYmFzdGEgbXVsdGlwbGljYXIgbyBtb2RlbG8gcmVlc2NyaXRvIGNvbW8gJHJfe3R9LVxtdT17XHBoaX1fezF9KHJfe3QtMX0tXG11KSt7XHBoaX1fezJ9KHJfe3QtMn0tXG11KSthX3t0fSQgcG9yICRyX3t0fS1cbXUkLCBvYnRlciBvIHZhbG9yIGVzcGVyYWRvIGUgZmF6ZXIgdXNvIGRhcyBoaXDDs3Rlc2VzIGFjaW1hIGp1bnRhbWVudGUgY29tICRccmhvX3tsfT17XGdhbW1hX3tsfX0ve1xnYW1tYV8wfSQgcGFyYSAkbFxnZTAkLCAkRVthX3t0fShyX3t0LWx9LVxtdSldPTAkIGUgJEVbYV97dH1eezJ9XT1cc2lnbWFfe2F9XnsyfSQgcGFyYSBlbmNvbnRyYXI6CgokJApcYmVnaW57c3BsaXR9CkVbcl97dH0tXG11XV57Mn0gJiA9IHtccGhpfV97MX1FWyhyX3t0LTF9IC0gXG11KShyX3t0fS1cbXUpXSArIHtccGhpfV97Mn1FWyhyX3t0LTJ9IC0gXG11KShyX3t0fS1cbXUpXSArIEVbYV97dH0ocl97dH0tXG11KV0gXFwKJiBcXAomID0ge1xwaGl9X3sxfUVbKHJfe3QtMX0gLSBcbXUpKHJfe3R9LVxtdSldICsge1xwaGl9X3syfUVbKHJfe3QtMn0gLSBcbXUpKHJfe3R9LVxtdSldICsgRVthX3t0fVxsZWZ0KHtccGhpfV97MX0ocl97dC0xfSAtIFxtdSkgICsge1xwaGl9X3syfShyX3t0LTJ9IC0gXG11KSArIGFfe3R9XHJpZ2h0KV0gXFwKJiBcXAomID0ge1xwaGl9X3sxfUVbKHJfe3QtMX0gLSBcbXUpKHJfe3R9LVxtdSldICsge1xwaGl9X3syfUVbKHJfe3QtMn0gLSBcbXUpKHJfe3R9LVxtdSldICsgRVthX3t0fWFfe3R9XSBcXAomIFxcCkVbcl97dH0tXG11XV57Mn0gPVxnYW1tYV97MH0gJiA9IHtccGhpfV97MX1cZ2FtbWFfezF9ICsge1xwaGl9X3syfVxnYW1tYV97Mn0gKyBcc2lnbWFfe2F9XnsyfSBcXCAKJiBcXApcZ2FtbWFfezB9ICYgPSB7XHBoaX1fezF9XGdhbW1hX3swfVxyaG9fezF9ICsge1xwaGl9X3syfVxnYW1tYV97MH1ccmhvX3syfSArIFxzaWdtYV97YX1eezJ9IFxcCiYgXFwKXGdhbW1hX3swfSAmID0gXGdhbW1hX3swfVxsZWZ0W1xmcmFje1xwaGlfezF9XnsyfX17MS1ccGhpX3syfX0gKyBcZnJhY3tccGhpX3sxfV57Mn1ccGhpX3syfX17MS1ccGhpX3syfX0gK1xwaGlfezJ9XnsyfSBccmlnaHRdICArIFxzaWdtYV97YX1eezJ9IFxcCiYgXFwKXGdhbW1hX3swfSAmID0gXGZyYWN7KDEtXHBoaV97Mn0pXHNpZ21hX3thfV57Mn19eyhccGhpX3syfSsxKSgxLVxwaGlfezJ9LVxwaGlfezF9KSgxLVxwaGlfezJ9K1xwaGlfezF9KX0gXFwKJiBcXApcZ2FtbWFfezB9ICYgPSBcZnJhY3soMS1ccGhpX3syfSlcc2lnbWFfe2F9XnsyfX17KDErXHBoaV97Mn0pXGxlZnRbMS0oXHBoaV97Mn0rXHBoaV97MX0pXHJpZ2h0XVxsZWZ0WzEtKFxwaGlfezJ9LVxwaGlfezF9KVxyaWdodF19IFxcClxlbmR7c3BsaXR9CiQkCgpGaW5hbG1lbnRlLCB0ZW1vcyBxdWUgcGFyYSBvIHByb2Nlc3NvICoqQVIoMikqKiBhcHJlc2VudGFyIHZhcmnDom5jaWEgZSBxdWUgZWxhIHNlamEgZmluaXRhIMOpIHByZWNpc28gcXVlICRccGhpX3syfStccGhpX3sxfTwxJCwgJFxwaGlfezJ9LVxwaGlfezF9PDEkIGUgJFxsZWZ0fCB7XHBoaX1fezJ9IFxyaWdodHwgPCAxJC4KCiogKipGVU7Dh8OVRVMgREUgQVVUT0NPUlJFTEHDh8ODTyBFIEFVVE9DT1JSRUxBw4fDg08gUEFSQ0lBTCoqCgpQb2RlbW9zIHZpc3VhbGl6YXIgYXMgcHJvcHJpZWRhZGVzIGVzdHVkYWRhcyBwYXJhIGVzdGUgbW9kZWxvIGEgcGFydGlyIGRlIHN1YXMgZnVuw6fDtWVzIGRlIGF1dG9jb3JyZWxhw6fDo28gZSBhdXRvY29ycmVsYcOnw6NvIHBhcmNpYWwuIFBhcmEgdGFudG8sIHZhbW9zIHNpbXVsYXIgdW0gbW9kZWxvIG5vIHNlZ3VpbnRlIGZvcm1hdG86IAoKJCQKcl97dH0gPSAxMCArIDAuNXJfe3QtMX0gLSAwLjNyX3t0LTJ9ICsgYV97dH0KJCQKQSBpbWFnZW0gYWJhaXhvIG1vc3RyYSBvIGdyw6FmaWNvIGRhIHPDqXJpZSB0ZW1wb3JhbCByZXN1bHRhbnRlIGRvIG1vZGVsby4gw4kgcG9zc8OtdmVsIG9ic2VydmFyIHF1ZSBow6EgYXBhcmVudGUgZXN0YWNpb25hcmllZGFkZSBmcmFjYSBkYWRvIHF1ZSBhIHPDqXJpZSBvc2NpbGEgZW0gdG9ybm8gZGUgdW1hIG3DqWRpYSAoJDEwJCkgZSBjb20gdW1hIHZhcmnDom5jaWEgY29uc3RhbnRlLgoKYGBge3IsIGVjaG89RkFMU0UsIHRpZHk9VFJVRSwgcmVzdWx0cz0nYXNpcycsIHdhcm5pbmcgPSBGQUxTRX0KYXIyIDwtIGFzLnh0cyhhcmltYS5zaW0obGlzdChvcmRlciA9IGMoMiwwLDApLCBhciA9IGMoMC41LC0wLjMpKSwgbiA9IDEwMDAwKSsxMCkKaGMyIDwtIGhpZ2hjaGFydCh0eXBlID0gInN0b2NrIikgJT4lIAogIGhjX3RpdGxlKHRleHQgPSAiQVIoMikgU2ltdWxhZG8iKSAlPiUgCiAgaGNfYWRkX3NlcmllcyhhcjIsIGlkID0gInRzIiwgY29sb3IgPSAnYmxhY2snKSAlPiUKICBoY19leHBvcnRpbmcoZW5hYmxlZCA9IFRSVUUpCgpoYzIKYGBgCgpBIGFuw6FsaXNlIGRhcyBmdW7Dp8O1ZXMgZGUgYXV0b2NvcnJlbGHDp8OjbyBlIGF1dG9jb3JyZWxhw6fDo28gcGFyY2lhbCBkYSBzw6lyaWUsIG1vc3RyYWRhcyBhYmFpeG8sIGNvbmZpcm1hbSBxdWUgcGFyYSBhIFBBQ0YgaMOhIHNpZ25pZmljw6JuY2lhIGVzdGF0w61zdGljYSBhcGVuYXMgZW0gKipkdWFzKiogZGVzYWZhZ2VtLiBPIGNvbXBvcnRhbWVudG8gZGEgZnVuw6fDo28gZGUgYXV0b2NvcnJlbGHDp8OjbyB0YW1iw6ltIGVzdMOhIGRlIGVuY29udHJvIGNvbSBvIGVzdHVkYWRvIGRhZG8gcXVlIGFwcmVzZW50YSBkZWNhaW1lbnRvIGV4cG9uZW5jaWFsIGp1bnRhbWVudGUgY29tIGNvbXBvcnRhbWVudG8gcGFyZWNpZG8gY29tIG8gZGFzIGZ1bsOnw7VlcyBzZW5vIGUgY29zZW5vLiAKCmBgYHtyLCBlY2hvPUZBTFNFLCB0aWR5PVRSVUUsIHJlc3VsdHM9J2FzaXMnLCB3YXJuaW5nID0gRkFMU0UsIGZpZy5oZWlnaHQ9N30KIyBGdW7Dp8OjbyBkZSBhdXRvY29ycmVsYcOnw6NvCmFjZl9hcjIgPC0gYWNmKGFyMiwgbmEuYWN0aW9uID0gbmEucGFzcywgcGxvdCA9IEZBTFNFLCBsYWcubWF4ID0gMTUpCgojIEdyw6FmaWNvIGRhIGZ1bsOnw6NvIGRlIGF1dG9jb3JyZWxhw6fDo28uIApwbG90KGFjZl9hcjIsIG1haW4gPSAiIiwgeWxhYiA9ICIiLCB4bGFiID0gIkRlZmFzYWdlbSIpCnRpdGxlKCJGdW7Dp8OjbyBkZSBBdXRvY29ycmVsYcOnw6NvIChGQUMpIiwgYWRqID0gMC41LCBsaW5lID0gMSkKYGBgCgpgYGB7ciwgZWNobz1GQUxTRSwgdGlkeT1UUlVFLCByZXN1bHRzPSdhc2lzJywgd2FybmluZyA9IEZBTFNFLCBmaWcuaGVpZ2h0PTd9CiMgRnVuw6fDo28gZGUgYXV0b2NvcnJlbGHDp8OjbyBwYXJjaWFsCnBhY2ZfYXIyIDwtIHBhY2YoYXIyLCBuYS5hY3Rpb24gPSBuYS5wYXNzLCBwbG90ID0gRkFMU0UsIGxhZy5tYXggPSAxNSkKCiMgR3LDoWZpY28gZGEgZnVuw6fDo28gZGUgYXV0b2NvcnJlbGHDp8OjbyBwYXJjaWFsLiAKcGxvdChwYWNmX2FyMiwgbWFpbiA9ICIiLCB5bGFiID0gIiIsIHhsYWIgPSAiRGVmYXNhZ2VtIikKdGl0bGUoIkZ1bsOnw6NvIGRlIEF1dG9jb3JyZWxhw6fDo28gUGFyY2lhbCAoRkFDUCkiLCBhZGogPSAwLjUsIGxpbmUgPSAxKQoKYGBgCgojIyMjIyAqKkFSKHApKioKClN1cG9uaGEgYWdvcmEgcXVlIHRlbW9zIG8gc2VndWludGUgbW9kZWxvIGF1dG9ycmVncmVzc2l2byBkZSBvcmRlbSAkcCQsIEFSKHApLgoKJCQKcl97dH0gPSB7XHBoaX1fezB9ICsge1xwaGl9X3sxfXJfe3QtMX0gKyB7XHBoaX1fezJ9cl97dC0yfSArIC4uLiArIHtccGhpfV97cH1yX3t0LXB9ICsgYV97dH0KJCQKCm9uZGUgJGFfe3R9JCDDqSB1bSBydcOtZG8gYnJhbmNvIGNvbSBtw6lkaWEgJDAkLCB2YXJpw6JuY2lhICRcc2lnbWFfe2F9XnsyfSQsICRFXGxlZnRbYV90LUUoYSlccmlnaHRdXGxlZnRbYV97dC1sfS1FKGEpXHJpZ2h0XT1FW2Ffe3R9YV97dC1sfV09MCQgZSBpbmRlcGVudGUgZSBpZGVudGljYW1lbnRlIGRpc3RyaWJ1w61kbyAoaWlkKS4gCgpBbnRlcmlvcm1lbnRlLCBhc3N1bWltb3MgYSBoaXDDs3Rlc2UgZGUgZXN0YWNpb25hcmllZGFkZSBmcmFjYSBwYXJhIG1vZGVsYXIgdW1hIHPDqXJpZSB0ZW1wb3JhbC4gQXNzaW0sIHBhcmEgZXN0aW1hciB1bSBtb2RlbG8gJEFSKFApJCB0ZW1vcyBxdWUgZ2FyYW50aXIgcXVlIGFzIGhpcMOzdGVzZXMgc8OjbyBtYW50aWRhcy4gRWxhcyBzw6NvOiAkRVtyX3t0fV09XG11JCwgJFZhcihyX3t0fSkgPSBcZ2FtbWFfezB9JCBlICRDb3Yocl97dH0scl97dC1qfSk9XGdhbW1hX3tqfSQgb25kZSAkXG11JCBlICRcZ2FtbWFfezB9JCBzw6NvIGNvbnN0YW50ZXMgZSAkXGdhbW1hX3tqfSQgw6kgZnVuw6fDo28gZGUgdW1hIGRlZmFzYWdlbSAkaiQgcXVhbHF1ZXIsIG1hcyBuw6NvIGRvIHRlbXBvICR0JC4KCgoqICoqTcOJRElBIENPTlNUQU5URSoqCgpGYXplbmRvIHVzbyBkYSBoaXDDs3Rlc2VzICRFW3Jfe3R9XT1FW3Jfe3QtMX1dPVtyX3t0LXB9XT1cbXUkIGUgJEVbYV97dH1dPTAkLCB0ZW1vczoKCiQkCkVbcl97dH1dID0ge1xwaGl9X3swfSArIHtccGhpfV97MX1FW3Jfe3QtMX1dICsge1xwaGl9X3syfUVbcl97dC0yfV0gKyAuLi4gKyB7XHBoaX1fe3B9RVtyX3t0LXB9XQokJAokJApcbXUgPSB7XHBoaX1fezB9ICsge1xwaGl9X3sxfVxtdSArIHtccGhpfV97Mn1cbXUgKyAuLi4gKyB7XHBoaX1fe3B9XG11CiQkCgokJApcbXUgPSBcZnJhY3t7XHBoaX1fezB9fXsxIC0ge1xwaGl9X3sxfSAtIHtccGhpfV97Mn0gLSAuLi4gLSB7XHBoaX1fe3B9fQokJAoKTyByZXN1bHRhZG8gbW9zdHJhIHF1ZSBvIHZhbG9yIGVzcGVyYWRvIGRvIG1vZGVsbyBhdXRvcnJlZ3Jlc3Npdm8sICoqQVIocCkqKiwgc2Vyw6EgY29uc3RhbnRlIGUgaW5kZXBlbmRlbnRlIGRvIHRlbXBvIGFzc2ltIGNvbW8gcHJvcG9zdG8gcGVsYSBoaXDDs3Rlc2UgZGUgZXN0YWNpb25hcmllZGFkZSBmcmFjYS4gUG9yw6ltLCBwcmVjaXNhbW9zIHF1ZSAkXHBoaV97MX0gKyBccGhpX3syfSArIC4uLiArIFxwaGlfe3B9IFxuZXEgMSQgcGFyYSBxdWUgbyB2YWxvciBlc3BlcmFkbyBleGlzdGEuCgoqICoqQVVUT0NPVkFSScOCTkNJQSBFIEFVVE9DT1JSRUxBw4fDg08gREVQRU5ERU5ETyBBUEVOQVMgREUgJGwkKioKClJlZXNjcmV2ZW5kbyBhIG3DqWRpYSBkbyBwcm9jZXNzbyBjb21vICRccGhpX3swfT0oMSAte1xwaGl9X3sxfSAte1xwaGl9X3syfSAtIC4uLiAtIHtccGhpfV97cH0pXG11JCBwb2RlbW9zIHJlZXNjcmV2ZXIgbyBtb2RlbG8gKipBUihwKSoqIGNvbW86CgokJApyX3t0fSA9ICgxIC17XHBoaX1fezF9IC17XHBoaX1fezJ9IC0gLi4uIC0ge1xwaGl9X3twfSlcbXUgKyB7XHBoaX1fezF9cl97dC0xfSArIHtccGhpfV97Mn1yX3t0LTF9ICsgLi4uICsge1xwaGl9X3twfXJfe3QtcH0gKyBhX3t0fQokJAokJApyX3t0fSA9IFxtdSAte1xwaGl9X3sxfVxtdSAtIHtccGhpfV97Mn1cbXUgLSAuLi4gLSB7XHBoaX1fe3B9XG11ICsge1xwaGl9X3sxfXJfe3QtMX0gKyB7XHBoaX1fezJ9cl97dC0xfSArIC4uLiArIHtccGhpfV97cH1yX3t0LXB9ICsgYV97dH0KJCQKJCQKcl97dH0gLSBcbXUgPSB7XHBoaX1fezF9KHJfe3QtMX0gLSBcbXUpICArIHtccGhpfV97Mn0ocl97dC0yfSAtIFxtdSkgKyAuLi4rIHtccGhpfV97cH0ocl97dC1wfSAtIFxtdSkgKyBhX3t0fQokJApNdWx0aXBsaWNhbmRvIG9zIGRvaXMgbGFkb3MgZGEgZXF1YcOnw6NvIGFjaW1hIHBvciAkKHJfe3QtbH0tXG11KSQsIHVzYW5kbyBhIGhpcMOzdGVzZSBkZSBxdWUgJEVbYV97dH0ocl97dC1sfS1cbXUpXT0wJCBlbSBmdW7Dp8OjbyBkZSAkYV97dH0kIHNlciB1bSBydcOtZG8gYnJhbmNvIGUgY2FsY3VsYW5kbyBvIHZhbG9yIGVzcGVyYWRvLCB0ZXJlbW9zIGEgKiphdXRvY292YXJpw6JuY2lhKiogZG8gcHJvY2Vzc28gZW0gcmVsYcOnw6NvIGEgdW1hIGRlZmFzYWdlbSBxdWFscXVlciB0YWwgcXVlICRsPjAkOgoKJCQKRVsocl97dH0tXG11KShyX3t0LWx9LVxtdSldID0ge1xwaGl9X3sxfUVbKHJfe3QtMX0gLSBcbXUpKHJfe3QtbH0tXG11KV0gKyB7XHBoaX1fezJ9RVsocl97dC0yfSAtIFxtdSkocl97dC1sfS1cbXUpXSArIC4uLiArIHtccGhpfV97cH1FWyhyX3t0LXB9IC0gXG11KShyX3t0LWx9LVxtdSldCiQkCnF1ZSBwb2RlIHNlciBlc2NyaXRhIHVzYW5kbyAkXGdhbW1hJCBwYXJhIGRlZmluaXIgYSBmdW7Dp8OjbyBkZSBhdXRvY292YXJpw6JuY2lhIGRvICoqbW9kZWxvIEFSKHApKiogZGEgc2VndWludGUgZm9ybWE6CgokJCAKXGdhbW1hX3tsfSA9IHtccGhpfV97MX1cZ2FtbWFfe2wtMX0gKyB7XHBoaX1fezJ9XGdhbW1hX3tsLTJ9ICsgLi4uICsge1xwaGl9X3twfVxnYW1tYV97bC1wfQokJAoKU2FiZW1vcyBxdWUgYSBkaXZpc8OjbyBkYSBhdXRvY292YXJpw6JuY2lhIHBlbGEgdmFyacOibmNpYSBwcm9wb3JjaW9uYXLDoSBhICoqYXV0b2NvcnJlbGHDp8OjbyoqLiBBc3N1bWluZG8gcXVlIGRpdmlkaW1vcyBhIGVxdWHDp8OjbyBhY2ltYSBwZWxhIHZhcmnDom5jaWEgZG8gcHJvY2Vzc28sIHRlcmVtb3MgYSAqKmZ1bsOnw6NvIGRlIGF1dG9jb3JyZWxhw6fDo28qKiBjb21vOgoKJCQKXHJob197bH0gPSB7XHBoaX1fezF9XHJob197bC0xfSArIHtccGhpfV97Mn1ccmhvX3tsLTJ9ICsgLi4uICsge1xwaGl9X3twfVxyaG9fe2wtcH0KJCQKCm9uZGUgJFxwaGlfezF9JCwgJFxwaGlfezJ9JCwgLi4uLCAkXHBoaV97cH0kIHJlcHJlc2VudGFtIGEgYXV0b2NvcnJlbGHDp8OjbyBlbnRyZSBvIHJldG9ybm8gZW0gJGwkIGVtIHJlbGHDp8OjbyBhICRsLTEkLCAkbC0yJCwgLi4uLCAkbC1wJCwgcmVzcGVjdGl2YW1lbnRlLiBTYWJlbW9zIHF1ZSBwYXJhICRsPTAkIHRlcmVtb3MgJFxyaG9fezB9PTEkLCBwb2lzIGEgYXV0b2NvcnJlbGHDp8OjbyBzZXLDoSBhIGRpdmlzw6NvIGRhIHZhcmnDom5jaWEgZG8gcHJvY2Vzc28gcG9yIGVsYSBtZXNtYSwgcXVlICRccmhvX3stbH09XHJob197bH0kIGVtIGZ1bsOnw6NvIGRlIHByb3ByaWVkYWRlIGRlIGNvcnJlbGHDp8OjbyBlICRccGhpX3sxfSArIFxwaGlfezJ9ICsgLi4uICsgXHBoaV97cH0gXG5lcSAxJCBwYXJhIHF1ZSBhIG3DqWRpYSBleGlzdGEuIAoKw4kgaW50ZXJlc3NhbnRlIG9ic2VydmFyIHF1ZSBhIGZ1bsOnw6NvIGRlIGF1dG9jb3JyZWxhw6fDo28gZG8gcHJvY2Vzc28gKipBUihwKSoqLCBhc3NpbSBjb21vIHZpbW9zIHBhcmEgbyAqKkFSKDIpKiosIMOpIHVtYSBlcXVhw6fDo28gZW0gZGlmZXJlbsOnYXMsIG1hcyBhZ29yYSBkZSBvcmRlbSAkUCQuIFVzYW5kbyBvcGVyYWRvcmVzIGRlIGRlZmFzYWdlbnMgKCRCXHJob197bH0gPSBwX3tsLTF9JCwgJEJeezJ9XHJob197bH0gPSBwX3tsLTJ9JCBlICRCXntwfVxyaG9fe2x9ID0gcF97bC1wfSQpIHBvZGVtb3MgZXNjcmV2ZXIgYSBmdW7Dp8OjbyBjb21vOgoKJCQKKDEtXHBoaV97MX1CLVxwaGlfezJ9Ql57Mn0tIC4uLiAtXHBoaV97cH1CXntwfSlccmhvX3tsfT0wCiQkCgpFc3RhIGVxdWHDp8OjbyBkZXRlcm1pbmFyw6EgbyBjb21wb3J0YW1lbnRvIGRhIGZ1bsOnw6NvIGRlIGF1dG9jb3JyZWxhw6fDo28gZG8gcHJvY2Vzc28gKipBUihwKSoqIGVzdGFjaW9uw6FyaW8uIEF2YWxpYW5kbyBhcGVuYXMgbyBwb2xpbsO0bWlvIGRhIGVxdWHDp8OjbyBlIGZhemVuZG8gJEI9eiQsIHRlbW9zOgoKJCQKMS1ccGhpX3sxfXotXHBoaV97Mn16XnsyfSAtIC4uLiAtXHBoaV97cH16XntwfQokJAoKTm92YW1lbnRlLCB0ZW1vcyBxdWUgbyBjb21wb3J0YW1lbnRvIGRhICoqZnVuw6fDo28gZGUgYXV0b2NvcnJlbGHDp8OjbyoqIGRvIG1vZGVsbyAqKkFSKHApKiogZGVwZW5kZXLDoSBkYXMgcmHDrXplcyBkbyBwb2xpbsO0bWlvLiBTZSBzw6NvIHZhbG9yZXMgcmVhaXMsIHJlc3VsdGFyw6EgZW0gdW1hICoqZnVuw6fDo28gZGUgYXV0b2NvcnJlbGHDp8OjbyoqIGNvbSBkZWNhw61tZW50byBleHBvbmVuY2lhbCBwYXJlY2lkbyBjb20gbyAqKkFSKDEpKiouIErDoSBzZSBzw6NvIG7Dum1lcm9zIGNvbXBsZXhvcyBvIGdyw6FmaWNvIGRhICoqZnVuw6fDo28gZGUgYXV0b2NvcnJlbGHDp8OjbyoqIGFwcmVzZW50YXLDoSB1bSBjb21wb3J0YW1lbnRvIHBhcmVjaWRvIGNvbSBvIGRhcyBmdW7Dp8O1ZXMgc2VubyBlIGNvc2Vuby4gCgoqICoqRlVOw4fDlUVTIERFIEFVVE9DT1JSRUxBw4fDg08gRSBBVVRPQ09SUkVMQcOHw4NPIFBBUkNJQUwqKgoKUG9kZW1vcyB2aXN1YWxpemFyIGFzIHByb3ByaWVkYWRlcyBlc3R1ZGFkYXMgcGFyYSBvIG1vZGVsbyAqKkFSKHApKiogYSBwYXJ0aXIgZGUgc3VhcyBmdW7Dp8O1ZXMgZGUgYXV0b2NvcnJlbGHDp8OjbyBlIGF1dG9jb3JyZWxhw6fDo28gcGFyY2lhbC4gUGFyYSB0YW50bywgdmFtb3Mgc2ltdWxhciB1bSBtb2RlbG8gbm8gc2VndWludGUgZm9ybWF0bzogCgokJApyX3t0fSA9IDEwICsgMC41cl97dC0xfSAtIDAuM3Jfe3QtMn0gKyAwLjFyX3t0LTN9ICsgYV97dH0KJCQKQSBpbWFnZW0gYWJhaXhvIG1vc3RyYSBvIGdyw6FmaWNvIGRhIHPDqXJpZSB0ZW1wb3JhbCByZXN1bHRhbnRlIGRvIG1vZGVsby4gw4kgcG9zc8OtdmVsIG9ic2VydmFyIHF1ZSBow6EgYXBhcmVudGUgZXN0YWNpb25hcmllZGFkZSBmcmFjYSBkYWRvIHF1ZSBhIHPDqXJpZSBvc2NpbGEgZW0gdG9ybm8gZGUgdW1hIG3DqWRpYSAoJDEwJCkgZSBjb20gdW1hIHZhcmnDom5jaWEgY29uc3RhbnRlLgoKYGBge3IsIGVjaG89RkFMU0UsIHRpZHk9VFJVRSwgcmVzdWx0cz0nYXNpcycsIHdhcm5pbmcgPSBGQUxTRX0KYXIzIDwtIGFzLnh0cyhhcmltYS5zaW0obGlzdChvcmRlciA9IGMoMywwLDApLCBhciA9IGMoMC41LC0wLjMsMC4xKSksIG4gPSAxMDAwMCkrMTApCmhjMyA8LSBoaWdoY2hhcnQodHlwZSA9ICJzdG9jayIpICU+JSAKICBoY190aXRsZSh0ZXh0ID0gIkFSKDMpIFNpbXVsYWRvIikgJT4lIAogIGhjX2FkZF9zZXJpZXMoYXIzLCBpZCA9ICJ0cyIsIGNvbG9yID0gJ2JsYWNrJykgJT4lCiAgaGNfZXhwb3J0aW5nKGVuYWJsZWQgPSBUUlVFKQoKaGMzCmBgYAoKQSBhbsOhbGlzZSBkYXMgZnVuw6fDtWVzIGRlIGF1dG9jb3JyZWxhw6fDo28gZSBhdXRvY29ycmVsYcOnw6NvIHBhcmNpYWwgZGEgc8OpcmllLCBtb3N0cmFkYXMgYWJhaXhvLCBjb25maXJtYW0gcXVlIHBhcmEgYSBQQUNGIGjDoSBzaWduaWZpY8OibmNpYSBlc3RhdMOtc3RpY2EgYXBlbmFzIGVtICoqdHLDqnMqKiBkZXNhZmFnZW0uIE8gY29tcG9ydGFtZW50byBkYSBmdW7Dp8OjbyBkZSBhdWNvcnJlbGHDp8OjbyB0YW1iw6ltIGVzdMOhIGRlIGVuY29udHJvIGNvbSBvIGVzdHVkYWRvIGRhZG8gcXVlIGFwcmVzZW50YSBkZWNhaW1lbnRvIGV4cG9uZW5jaWFsIGp1bnRhbWVudGUgY29tIGNvbXBvcnRhbWVudG8gcGFyZWNpZG8gY29tIG8gZGFzIGZ1bsOnw7VlcyBzZW5vIGUgY29zZW5vLgoKYGBge3IsIGVjaG89RkFMU0UsIHRpZHk9VFJVRSwgcmVzdWx0cz0nYXNpcycsIHdhcm5pbmcgPSBGQUxTRSwgZmlnLmhlaWdodD03fQojIEZ1bsOnw6NvIGRlIGF1dG9jb3JyZWxhw6fDo28KYWNmX2FyMyA8LSBhY2YoYXIzLCBuYS5hY3Rpb24gPSBuYS5wYXNzLCBwbG90ID0gRkFMU0UsIGxhZy5tYXggPSAxNSkKCiMgR3LDoWZpY28gZGEgZnVuw6fDo28gZGUgYXV0b2NvcnJlbGHDp8Ojby4gCnBsb3QoYWNmX2FyMywgbWFpbiA9ICIiLCB5bGFiID0gIiIsIHhsYWIgPSAiRGVmYXNhZ2VtIikKdGl0bGUoIkZ1bsOnw6NvIGRlIEF1dG9jb3JyZWxhw6fDo28gKEZBQykiLCBhZGogPSAwLjUsIGxpbmUgPSAxKQpgYGAKCmBgYHtyLCBlY2hvPUZBTFNFLCB0aWR5PVRSVUUsIHJlc3VsdHM9J2FzaXMnLCB3YXJuaW5nID0gRkFMU0UsIGZpZy5oZWlnaHQ9N30KIyBGdW7Dp8OjbyBkZSBhdXRvY29ycmVsYcOnw6NvIHBhcmNpYWwKcGFjZl9hcjMgPC0gcGFjZihhcjMsIG5hLmFjdGlvbiA9IG5hLnBhc3MsIHBsb3QgPSBGQUxTRSwgbGFnLm1heCA9IDE1KQoKIyBHcsOhZmljbyBkYSBmdW7Dp8OjbyBkZSBhdXRvY29ycmVsYcOnw6NvIHBhcmNpYWwuIApwbG90KHBhY2ZfYXIzLCBtYWluID0gIiIsIHlsYWIgPSAiIiwgeGxhYiA9ICJEZWZhc2FnZW0iKQp0aXRsZSgiRnVuw6fDo28gZGUgQXV0b2NvcnJlbGHDp8OjbyBQYXJjaWFsIChGQUNQKSIsIGFkaiA9IDAuNSwgbGluZSA9IDEpCmBgYAoKIyMjIyMgKipJREVOVElGSUNBTkRPIE1PREVMT1MgQVIgTkEgUFLDgVRJQ0EqKgoKTmEgcHLDoXRpY2EsIG7Do28gY29uaGVjZW1vcyBhIG9yZGVtICRwJCBkZSB1bSBtb2RlbG8gQVIgcHVyby4gRWxhIGRldmUgc2VyIGVzcGVjaWZpY2FkYSBlbXBpcmljYW1lbnRlLiBVbWEgYWJvcmRhZ2VtIGNvbXVtZW50ZSB1c2FkYSDDqSBhdmFsaWFyIGEgKipmdW7Dp8OjbyBkZSBhdXRvY29ycmVsYcOnw6NvIHBhcmNpYWwgKEZBQ1ApKiogZGEgc8OpcmllIGVtIGRpdmVyc2FzIGRlZmFzYWdlbnMuIE91dHJhIGFsdGVybmF0aXZhIMOpIGZhemVyIHVzbyBkZSBhbGd1bSBjcml0w6lyaW8gZGUgaW5mb3JtYcOnw6NvIChBSUMgZS9vdSBCSUMsIHBvciBleGVtcGxvKS4gTm9zIGV4ZW1wbG9zIGFudGVyaW9yZXMgZml6ZW1vcyB1c28gZGEgUEFDRiBwYXJhIGNvbmZpcm1hciBxdWUgYW8gYXZhbGlhciB0YWwgZnVuw6fDo28gcGFyYSBvcyBtb2RlbG9zIEFSIHNpbXVsYWRvcyBjaGVnYXLDrWFtb3MgbmEgY29ycmV0YSBkZWZhc2FnZW0gZG8gbW9kZWxvLgoKRm9pIHBvc3PDrXZlbCBvYnNlcnZhciBxdWUgZW0gdG9kb3Mgb3MgY2Fzb3MgZGUgbW9kZWxvIEFSIHB1cm8gYSBjb25jbHVzw6NvIGEgcGFydGlyIGRhIEZBQ1AgZXN0YXZhIGNvcnJldGEuIE1haW9yZXMgZGV0YWxoZXMgc29icmUgYSBGQUNQIGUgY29tbyBvcyBwYXLDom1ldHJvcyBzw6NvIG9idGlkb3MsIHBvZGVtIHNlciBlbmNvbnRyYWRvcyBuZXN0ZSBbbGlua10oaHR0cDovL3JwdWJzLmNvbS9mcmFuay1waW5oby81MjIzNjApLgoKCiMjIyMjICoqUkVGRVLDik5DSUFTKio=