Este material tem como objetivo introduzir os conceitos sobre efeito causal dinâmico em uma série temporal multivariada. Vamos entender como podemos usar os modelos de regressão com defasagens distribuídas (distributed lag regression model) e autorregressivo com defasagens distribuídas (autoregressive distributed lag regression model) para estimar tal efeito.
INTRODUÇÃO
Em alguns trabalhos empíricos o objetivo é saber como uma série temporal muda em função de outra(s) série(s) temporal(is). Porém, quase sempre temos o interesse de conhecer o impacto presente e futuro. Ou seja, como a oscilação em uma série temporal impacta outra série temporal hoje e nos próximos períodos (dias, semanas, meses, trimestres, …).
Isto é conhecido como o efeito causal dinâmico sobre uma série temporal dado uma mudança na(s) outra(s) série(s). A alternativa econométrica que provavelmente seria a primeira opção é a regressão linear múltipla estimada pelo método dos mínimos quadrados ordinários (MQO). Neste caso, chamamos de distributed lag regression em função de adicionar defasagens da(s) variável(is) explicativa(s) como regressores.
Exemplo:
Assuma que temos uma série temporal multivariada com dois componentes (\(y\) e \(x\)) e que queremos estimar como \(x\) impacta \(y\) linearmente hoje e no futuro (\(r\) períodos à frente). No contexto do distributed lag regression model (DLM) poderíamos fazer:
\[
y_t = \beta_0 + \beta_1x_t + \beta_2x_{t-1} + \beta_3x_{t-2} + ... + \beta_{r+1}x_{t-r}+ u_t
\]
onde \(u_t\) é um termo de erro e o modelo relaciona \(x_t\) e \(r\) de suas defasagens a \(y_t\). Com relação aos parâmetos temos:
- \(\beta_{1}\): efeito imediato ou contemporâneo de uma mudança em uma unidade em \(x_t\) sobre \(y_t\)
- \(\beta_{2}\): efeito sobre \(y_t\) de uma mudança em uma unidade em \(x_{t-1}\) ou, equivalentemente, o efeito sobre \(y_{t+1}\) de uma mudança em uma unidade em \(x_{t}\). Ou seja, \(\beta_{2}\) é o efeito de uma mudança em uma unidade em \(x\) sobre \(y\) um período depois.
- em geral, o coeficiente \(x_{t-h}\) é o efeito de uma mudança em uma unidade em \(x\) sobre \(y\) depois de \(h\) períodos.
Porém, os estimadores obtidos por MQO para tal regressão linear múltipla (ou distributed lag regression model) não são viesados, mas são inconsistentes. Isso acontece em função de estarmos trabalhando com séries temporais e não dados cross-section. Provavelmente, os determinates de \(y_t\) omitidos são correlacionados ao longo do tempo e o termo de erro \(u_t\) pode ser serialmente correlacionado.
Neste cenário, não podemos assumir a hipótese de exogenidade (\(x_t\), …, \(x_{t-r}\) não são relacionados com \(u_t\), ou seja, \(E\left[u_t|x_t,x_{t-1},...x_{t-r}\right]=0\)). Como sabemos, apesar de não implicar em viés, a violação desta hipótese torna a inferência estatística não confiável, pois produz erros padrões incorretos. Assim, precisamos tratar a matriz de variâncias e covariâncias de forma que o problema de não exogeneidade seja contornado (por exemplo, usar estimativas para a matriz de variâncias e covariâncias proposto por Newey and West (1987))
Outra alternativa para obter o efeito causal dinâmico é modelar a correlação serial no termo de erro como um modelo autorregressivo e então usá-lo para derivar um modelo de regressão autorregressivo com defasagens distribuídas (autoregressive distributed lag regression model). Contudo, é requerido exogeneidade estrita sobre a qual os erros tem média condicional igual a zero dado os valores passados, presentes e futuros de \(x\).
Exemplo:
Suponha que até duas defasagens de \(x_t\) impactam \(y_t\) e que o termo de erro se comporta como um AR(1). Assim, teríamos as seguintes equações:
\[
\begin{aligned}
y_t &= \beta_0 + \beta_1x_t + \beta_2x_{t-1} + u_t \\
\\
u_t &= \phi_1u_{t-1}+a_t
\end{aligned}
\] onde \(\phi_1\) é o parâmetro autorregressivo e \(a_t\) é um termo de erro não autocorrelacionado. Perceba que não é necessário intercepto, pois assumimos que \(E[u_t]=0\). Posteriormente, mostraremos por meio de derivações que tal modelo pode ser reescrito como:
\[
y_t = \alpha_0 + \phi_1y_{t-1}+\delta_0x_t + \delta_1x_{t-1}+\delta_2x_{t-2}+a_t
\]
que é conhecido como autoregressive distributed lag regression model (ADL). Aqui, um \(ADL(1,2)\) onde temos \(1\) defasagem de \(y_t\) e \(2\) defasagens de \(x_t\) como variáveis explicativas.
No decorrer deste documento, apresentaremos as hipóteses de exogeneidade e exegeneidade forte e como elas estão ligadas aos modelos \(DLM\) e \(ADL\). Além disso, definiremos o efeito causal dinâmico e o processo que deve ser usado para escolher qual dos dois modelos usar na prática.
EFEITO CAUSAL DINÂMICO
Um efeito causal é resultado de um experimento aleatório controlado. Por exemplo, um horticultor aplica fertilizantes aleatoriamente em alguns pés de tomate, mas em outros não e então mede a produção. A diferença esperada entre a produção com e sem fertilizante é o efeito causal de usar fertilizantes na produção de tomates.
Este conceito de um experimento pode ser pensado em dados cross-section (aqui, pés de tomate) ou em dados em painel (por exemplo, renda individual antes e após um programa de treinamento em formato experimental). Por ter múltiplos sujeitos é possível ter grupos tanto de tratamento quanto de controle e assim, estimar o efeito causal do tratamento.
Na análise de séries temporais, esta definição de efeito causal em termos da ideia de um experimento aleatório controlado precisa ser modificada. Considere um problema de macroeconomia de estimar o efeito de uma mudança não antecipada na taxa de juros de curto prazo sobre a atividade econômica atual e futura de um dado país, medida pelo PIB.
Tomado literalmente, o experimento aleatório controlado em cross-section e dados em painel, implicaria em fazer um experimento aleatório em diversos países e ter o grupo de controle e o grupo de tratamento. Os bancos centrais no grupo de tratamento aplicariam o tratamento de uma mudança aleatória na taxa de juros enquanto o grupo de controle não aplicaria qualquer mudança. Para ambos os grupos, a atividade econômica deveria ser medida ao longo dos próximos anos. Porém, e se estamos interessados em aplicar este efeito para um país específico? Então, este experimento teria diferentes “clones” deste país como sujeito, que seriam divididos entre os grupos de tratamento e controle. Obviamente, este universo paralelo é inviável.
Ao invés disso, em dados de séries temporais é útil pensar em um experimento aleatório controlado consistindo do mesmo sujeito (por exemplo, a economia dos EUA) sendo dado diferentes tratamentos (mudanças aleatorias na taxa de juros) em diferentes pontos do tempo (1970, 1980 e assim em diante). Nesta abordagem, o único sujeito em período de tempo diferente desempenha tanto o papel de controle quanto o de tratamento (às vezes o FED muda a taxa de juros e às vezes não). Em função dos dados serem coletados ao longo do tempo, é possível estimar o efeito causal dinâmico, ou seja, o caminho temporal do efeito sobre a taxa de juros originado em função do tratamento.
Esta formulação do efeito causal dinâmico em dados de séries temporais como o resultado esperado de um experimento no qual diferentes níveis de tratamentos são repetidamente aplicados ao mesmo sujeito tem duas implicações para tentativa empíricas de medi-lo em séries temporais:
- O efeito não deveria mudar para a amostra de dados que temos
- \(x\) deve ser não correlacionado com o termo de erro (exogeneidade)
Exemplo:
Suponha que nos EUA existe um mercado de compra e venda de grandes quantidades de suco de laranja concentrado em um preço específico para uma data futura. A fonte de quase todo o concentrado deste suco é a Flórida. Além disso, de tempos em tempos ondas de frio na Flórida matam as laranjas de tal forma que a oferta desta fruta cai drasticamente fazendo com que o preço do suco de laranja concentrado aumente.
Em função deste problema, seria importante para a gestão saber:
- Qual é a alteração nos preços quando há ondas de frio na Flórida?
- Por quanto tempo a mudança climática influencia nos preços (hoje e futuramente)?
Assumindo que realprice é a variável que representa o preço real do suco de laranja concentrado e que fdd é o número de dias em que a temperatura (em graus Fahrenheit) cai abaixo de zero em um determinado mês, teríamos:
\[
realprice_t = \beta_0 + \beta_1fdd_t + \beta_2fdd_{t-1} + \beta_3fdd_{t-2} + ... + \beta_{r+1}fdd_{t-r}+ u_t
\] como o modelo DLM com \(r\) defasagens de \(fdd\) impactando o preço real, sendo:
- \(\beta_1\) é o efeito contemporâneo que mostra o aumento percentual nos preços ao longo do mês no qual ocorre um dia adicional de temperatura abaixo de zero.
- \(\beta_2\) até \(\beta_{r+1}\) representam o quanto um dia adicional de temperatura abaixo de zero impactaria nos preços ao longo dos próximos \(r\) meses.
Por outro lado,
\[
\begin{aligned}
realprice_t = \alpha_0 + \phi_1realprice_{t-1}+\delta_0fdd_t + \delta_1fdd_{t-1}+\delta_2fdd_{t-2}+a_t
\end{aligned}
\] seria um modelo ADL(1,2) onde \(1\) defasagem do próprio preço real e \(2\) defasagens de \(fdd\) impactam o preço real corrente.
Em ambos os casos os parâmetros estimados para \(fdd_t\) e suas defasagens serão os responsáveis por nos fornecer o efeito causal dinâmico (valor corrente e futuro) em realprice à medida que ocorre o aumento em uma unidade (um dia) em \(fdd_t\) ou suas defasagens.
DOIS TIPOS DE EXOGENEIDADE
Como sabemos, uma variável é definida como exógena se ela não está correlacionada com o termo de erro enquanto uma variável é considerada endógena se ela está correlacionada com o termo de erro.
Por exemplo, se vamos estimar o efeito causal dinâmico usando o modelo DLM,
\[
y_t = \beta_0 + \beta_1x_t + \beta_2x_{t-1} + \beta_3x_{t-2} + ... + \beta_{r+1}x_{t-r}+ u_t
\]
os regressores (os \(x`s\)) devem ser não correlacionados com o termo de erro. Assim, \(x\) será exógeno. Em função de estarmos trabalhando com séries temporais, é preciso refinar a definição de exogeneidade. Existem dois diferentes conceitos de exogeneidade que usaremos:
O termo de erro tem média condicional igual a \(0\) dado os valores correntes e passados de \(x\). Ou seja, \(E\left[u_t|x_t,x_{t-1},x_{t-2},...\right]=0\). Isto modifica a hipótese padrão de média condicional para regressão linear múltipla com dados cross-section que requer apenas que \(u_t\) tenha uma média condicional igual a \(0\) dado os regressores incluídos (\(E\left[u_t|x_t,x_{t-1},...,x_{t-r}\right]=0\)). Adicionar todas as defasagens de \(x\) na esperança condicional implica que todos os efeitos mais distantes (efeito causal além de \(r\)) são nulos. Assim, sob esta hipótese, todos as \(r\) defasagens são diferentes de zero e podemos chamar esta hipótese de exogeneidade.
O termo de erro tem média zero, dado todos os valores passados, presentes e futuros de \(x_t\). Ou seja, \(E\left(u_t|...,x_{t+1},x_t,x_{t-1},x_{t-2},...\right) = 0\). Isso é chamado de exogeneidade estrita. A razão para introduzir o conceito de exogeneidade estrita é que, quando \(x\) é estritamente exógeno, existe estimadores mais eficientes do efeito causal dinâmico do que os estimadores obtidos por OLS (aqui, DLM).
A diferença entre exogeneidade (passado e presente) e exogeneidade estrita (passado, presente, e futuro) é que a exogeneidade estrita inclui valores futuros de \(x\) na esperança. Assim, exogeneidade estrita implica exogeneidade, mas não o reverso.
Exemplo:
Considere o exemplo do preço do concentrado do suco de laranja, em que \(realprice_t\) é a mudança percentual no preço real do suco de laranja no mês e \(fdd_t\) é o número de dias com temperatura abaixo de zero neste mês. A partir da perspectiva do mercado de suco de laranja, podemos pensar no clima como se ele fosse aleatoriamente definido, no sentido de que o clima está fora do controle humano. Se o efeito de \(fdd\) é linear e se ele não tem efeito sobre os preços depois de \(r\) meses, então segue-se que o clima é exógeno. Mas o clima é estritamente exógeno? Se a média condicional de \(u_t\) dado valores futuros de \(fdd\) é diferente de zero, então \(fdd\) não é estritamente exógeno. Responder esta questão requer pensar cuidadosamente sobre o que precisamente está contido em \(u_t\).
Em particular, se os participantes do mercado de suco de laranja usam previsões do \(fdd\) quando eles decidem quanto eles comprarão ou venderão a um dado preço, então os preços de suco de laranja e, consequentemente, o termo de erro \(u_t\) incorporarão informações sobre o futuro de \(fdd\) que tornaria \(u_t\) um útil preditor de \(fdd\). Isto significa que \(u_t\) será correlacionado com valores futuros de \(fdd\) e em função disso não é estritamente exógeno.
REFERÊNCIAS
Newey, Whitney K, and Kenneth D West. 1987. “A Simple, Positive Semi-Definite, Heteroskedasticity and Autocorrelationconsistent Covariance Matrix” 55. Econometrica: 703–8.
Stock, James H, and Mark W Watson. 2019. Introduction to Econometrics. Pearson.
LS0tCnRpdGxlOiA8Y2VudGVyPiA8aDI+IDxiPiBFZmVpdG8gQ2F1c2FsIERpbsOibWljbyA8L2I+IDwvaDI+IDwvY2VudGVyPiAKYXV0aG9yOiA8Y2VudGVyPiBIdWRzb24gQ2hhdmVzIENvc3RhIDwvY2VudGVyPgpncmFwaGljczogeWVzCmxpbmtjb2xvcjogYmx1ZQpvdXRwdXQ6IAogIGh0bWxfbm90ZWJvb2s6CiAgICB0aGVtZTogY2VydWxlYW4KICAgIGZpZ19jYXB0aW9uOiB5ZXMKcmVmZXJlbmNlczoKLSBpZDogc3RvY2syMDAzaW50cm9kdWN0aW9uCiAgdGl0bGU6IEludHJvZHVjdGlvbiB0byBlY29ub21ldHJpY3MKICBhdXRob3I6CiAgLSBmYW1pbHk6IFN0b2NrCiAgICBnaXZlbjogSmFtZXMgSAogIC0gZmFtaWx5OiBXYXRzb24KICAgIGdpdmVuOiAgTWFyayBXCiAgcHVibGlzaGVyOiBQZWFyc29uCiAgdHlwZTogYm9vawogIGlzc3VlZDoKICAgIHllYXI6IDIwMTkKLSBpZDogbmV3ZXkxOTg2c2ltcGxlCiAgdGl0bGU6IEEgU2ltcGxlLCBQb3NpdGl2ZSBTZW1pLURlZmluaXRlLCBIZXRlcm9za2VkYXN0aWNpdHkgYW5kIEF1dG9jb3JyZWxhdGlvbmNvbnNpc3RlbnQgQ292YXJpYW5jZSBNYXRyaXgKICBhdXRob3I6CiAgLSBmYW1pbHk6IE5ld2V5CiAgICBnaXZlbjogV2hpdG5leSBLCiAgLSBmYW1pbHk6IFdlc3QKICAgIGdpdmVuOiAgS2VubmV0aCBECiAgcHVibGlzaGVyOiBFY29ub21ldHJpY2EKICB0eXBlOiBhcnRpY2xlLWpvdXJuYWwKICB2b2x1bWU6IDU1CiAgcGFnZTogNzAzLTcwOAogIGlzc3VlZDoKICAgIHllYXI6IDE5ODcKbm9jaXRlOiB8IAogIEBzdG9jazIwMDNpbnRyb2R1Y3Rpb24sIEBuZXdleTE5ODZzaW1wbGUKLS0tCgpFc3RlIG1hdGVyaWFsIHRlbSBjb21vIG9iamV0aXZvIGludHJvZHV6aXIgb3MgY29uY2VpdG9zIHNvYnJlICoqZWZlaXRvIGNhdXNhbCBkaW7Dom1pY28qKiBlbSB1bWEgc8OpcmllIHRlbXBvcmFsIG11bHRpdmFyaWFkYS4gVmFtb3MgZW50ZW5kZXIgY29tbyBwb2RlbW9zIHVzYXIgb3MgbW9kZWxvcyBkZSByZWdyZXNzw6NvIGNvbSBkZWZhc2FnZW5zIGRpc3RyaWJ1w61kYXMgKCpkaXN0cmlidXRlZCBsYWcgcmVncmVzc2lvbiBtb2RlbCopIGUgYXV0b3JyZWdyZXNzaXZvIGNvbSBkZWZhc2FnZW5zIGRpc3RyaWJ1w61kYXMgKCphdXRvcmVncmVzc2l2ZSBkaXN0cmlidXRlZCBsYWcgcmVncmVzc2lvbiBtb2RlbCopIHBhcmEgZXN0aW1hciB0YWwgZWZlaXRvLiAgCgojIyMjIyAqKklOVFJPRFXDh8ODTyoqCgpFbSBhbGd1bnMgdHJhYmFsaG9zIGVtcMOtcmljb3MgbyBvYmpldGl2byDDqSBzYWJlciBjb21vIHVtYSBzw6lyaWUgdGVtcG9yYWwgbXVkYSBlbSBmdW7Dp8OjbyBkZSBvdXRyYShzKSBzw6lyaWUocykgdGVtcG9yYWwoaXMpLiBQb3LDqW0sIHF1YXNlIHNlbXByZSB0ZW1vcyBvIGludGVyZXNzZSBkZSBjb25oZWNlciBvIGltcGFjdG8gcHJlc2VudGUgZSBmdXR1cm8uIE91IHNlamEsIGNvbW8gYSBvc2NpbGHDp8OjbyBlbSB1bWEgc8OpcmllIHRlbXBvcmFsIGltcGFjdGEgb3V0cmEgc8OpcmllIHRlbXBvcmFsIGhvamUgZSBub3MgcHLDs3hpbW9zIHBlcsOtb2RvcyAoZGlhcywgc2VtYW5hcywgbWVzZXMsIHRyaW1lc3RyZXMsIC4uLikuCgpJc3RvIMOpIGNvbmhlY2lkbyBjb21vIG8gKiplZmVpdG8gY2F1c2FsIGRpbsOibWljbyoqIHNvYnJlIHVtYSBzw6lyaWUgdGVtcG9yYWwgZGFkbyB1bWEgbXVkYW7Dp2EgbmEocykgb3V0cmEocykgc8OpcmllKHMpLiBBIGFsdGVybmF0aXZhIGVjb25vbcOpdHJpY2EgcXVlIHByb3ZhdmVsbWVudGUgc2VyaWEgYSBwcmltZWlyYSBvcMOnw6NvIMOpIGEgcmVncmVzc8OjbyBsaW5lYXIgbcO6bHRpcGxhIGVzdGltYWRhIHBlbG8gbcOpdG9kbyBkb3MgbcOtbmltb3MgcXVhZHJhZG9zIG9yZGluw6FyaW9zIChNUU8pLiBOZXN0ZSBjYXNvLCBjaGFtYW1vcyBkZSAqZGlzdHJpYnV0ZWQgbGFnIHJlZ3Jlc3Npb24qIGVtIGZ1bsOnw6NvIGRlIGFkaWNpb25hciBkZWZhc2FnZW5zIGRhKHMpIHZhcmnDoXZlbChpcykgZXhwbGljYXRpdmEocykgY29tbyByZWdyZXNzb3Jlcy4KCjxkaXYgc3R5bGU9ImJhY2tncm91bmQ6I2Y1ZjVmNTsgcGFkZGluZzoyMHB4OyBtYXJnaW46IDEwcHg7Ij4KKipFeGVtcGxvOioqCgpBc3N1bWEgcXVlIHRlbW9zIHVtYSBzw6lyaWUgdGVtcG9yYWwgbXVsdGl2YXJpYWRhIGNvbSBkb2lzIGNvbXBvbmVudGVzICgkeSQgZSAkeCQpIGUgcXVlIHF1ZXJlbW9zIGVzdGltYXIgY29tbyAkeCQgaW1wYWN0YSAkeSQgKipsaW5lYXJtZW50ZSoqIGhvamUgZSBubyBmdXR1cm8gKCRyJCBwZXLDrW9kb3Mgw6AgZnJlbnRlKS4gTm8gY29udGV4dG8gZG8gKmRpc3RyaWJ1dGVkIGxhZyByZWdyZXNzaW9uIG1vZGVsKiAoRExNKSBwb2RlcsOtYW1vcyBmYXplcjoKCiQkCnlfdCA9IFxiZXRhXzAgKyBcYmV0YV8xeF90ICsgXGJldGFfMnhfe3QtMX0gKyBcYmV0YV8zeF97dC0yfSArIC4uLiArIFxiZXRhX3tyKzF9eF97dC1yfSsgIHVfdAokJAoKb25kZSAkdV90JCDDqSB1bSB0ZXJtbyBkZSBlcnJvIGUgbyBtb2RlbG8gcmVsYWNpb25hICR4X3QkIGUgJHIkIGRlIHN1YXMgZGVmYXNhZ2VucyBhICR5X3QkLiBDb20gcmVsYcOnw6NvIGFvcyBwYXLDom1ldG9zIHRlbW9zOgoKKiAkXGJldGFfezF9JDogZWZlaXRvIGltZWRpYXRvIG91IGNvbnRlbXBvcsOibmVvIGRlIHVtYSBtdWRhbsOnYSBlbSB1bWEgdW5pZGFkZSBlbSAkeF90JCBzb2JyZSAkeV90JAoqICRcYmV0YV97Mn0kOiBlZmVpdG8gc29icmUgJHlfdCQgZGUgdW1hIG11ZGFuw6dhIGVtIHVtYSB1bmlkYWRlIGVtICR4X3t0LTF9JCBvdSwgZXF1aXZhbGVudGVtZW50ZSwgbyBlZmVpdG8gc29icmUgJHlfe3QrMX0kIGRlIHVtYSBtdWRhbsOnYSBlbSB1bWEgdW5pZGFkZSBlbSAkeF97dH0kLiBPdSBzZWphLCAkXGJldGFfezJ9JCDDqSBvIGVmZWl0byBkZSB1bWEgbXVkYW7Dp2EgZW0gdW1hIHVuaWRhZGUgZW0gJHgkIHNvYnJlICR5JCB1bSBwZXLDrW9kbyBkZXBvaXMuCiogZW0gZ2VyYWwsIG8gY29lZmljaWVudGUgJHhfe3QtaH0kIMOpIG8gZWZlaXRvIGRlIHVtYSBtdWRhbsOnYSBlbSB1bWEgdW5pZGFkZSBlbSAkeCQgc29icmUgJHkkIGRlcG9pcyBkZSAkaCQgcGVyw61vZG9zLiAKCjwvZGl2PgoKUG9yw6ltLCBvcyBlc3RpbWFkb3JlcyBvYnRpZG9zIHBvciBNUU8gcGFyYSB0YWwgcmVncmVzc8OjbyBsaW5lYXIgbcO6bHRpcGxhIChvdSAqZGlzdHJpYnV0ZWQgbGFnIHJlZ3Jlc3Npb24gbW9kZWwqKSAqKm7Do28gc8OjbyB2aWVzYWRvcywgbWFzIHPDo28gaW5jb25zaXN0ZW50ZXMqKi4gSXNzbyBhY29udGVjZSBlbSBmdW7Dp8OjbyBkZSBlc3Rhcm1vcyB0cmFiYWxoYW5kbyBjb20gc8OpcmllcyB0ZW1wb3JhaXMgZSBuw6NvIGRhZG9zIGNyb3NzLXNlY3Rpb24uIFByb3ZhdmVsbWVudGUsIG9zIGRldGVybWluYXRlcyBkZSAkeV90JCBvbWl0aWRvcyBzw6NvIGNvcnJlbGFjaW9uYWRvcyBhbyBsb25nbyBkbyB0ZW1wbyBlIG8gdGVybW8gZGUgZXJybyAkdV90JCBwb2RlIHNlciBzZXJpYWxtZW50ZSBjb3JyZWxhY2lvbmFkb1teMV0uCgpbXjFdOiBFbSBzw6lyaWVzIHRlbXBvcmFpcyBjaGFtYW1vcyBkZSBhdXRvY29ycmVsYcOnw6NvLCBwb2lzIGRlc2NyZXZlIGEgY29ycmVsYcOnw6NvIGVudHJlIGR1YXMgb2JzZXJ2YcOnw7VlcyBzZXBhcmFkYXMgcG9yIHVtIG91IG1haXMgcGVyw61vZG9zLiBDb21vIGrDoSBlc3R1ZGFtb3MsIHPDqXJpZXMgdGVtcG9yYWlzIHRlbmRlbSBhIGFwcmVzZW50YXIgYXV0b2NvcnJlbGHDp8OjbyBlbSBmdW7Dp8OjbyBkZSBzdWEgbmF0dXJlemEgZGUgZGFkb3Mgb3JkZW5hZG9zIG5vIHRlbXBvLgoKTmVzdGUgY2Vuw6FyaW8sIG7Do28gcG9kZW1vcyBhc3N1bWlyIGEgaGlww7N0ZXNlIGRlIGV4b2dlbmlkYWRlICgkeF90JCwgLi4uLCAkeF97dC1yfSQgbsOjbyBzw6NvIHJlbGFjaW9uYWRvcyBjb20gJHVfdCQsIG91IHNlamEsICRFXGxlZnRbdV90fHhfdCx4X3t0LTF9LC4uLnhfe3Qtcn1ccmlnaHRdPTAkKS4gQ29tbyBzYWJlbW9zLCBhcGVzYXIgZGUgbsOjbyBpbXBsaWNhciBlbSB2acOpcywgYSB2aW9sYcOnw6NvIGRlc3RhIGhpcMOzdGVzZSB0b3JuYSBhIGluZmVyw6puY2lhIGVzdGF0w61zdGljYSBuw6NvIGNvbmZpw6F2ZWwsIHBvaXMgcHJvZHV6IGVycm9zIHBhZHLDtWVzIGluY29ycmV0b3MuIEFzc2ltLCBwcmVjaXNhbW9zIHRyYXRhciBhIG1hdHJpeiBkZSB2YXJpw6JuY2lhcyBlIGNvdmFyacOibmNpYXMgZGUgZm9ybWEgcXVlIG8gcHJvYmxlbWEgZGUgbsOjbyBleG9nZW5laWRhZGUgc2VqYSBjb250b3JuYWRvIChwb3IgZXhlbXBsbywgdXNhciBlc3RpbWF0aXZhcyBwYXJhIGEgbWF0cml6IGRlIHZhcmnDom5jaWFzIGUgY292YXJpw6JuY2lhcyBwcm9wb3N0byBwb3IgQG5ld2V5MTk4NnNpbXBsZSkKCk91dHJhIGFsdGVybmF0aXZhIHBhcmEgb2J0ZXIgbyAqKmVmZWl0byBjYXVzYWwgZGluw6JtaWNvKiogw6kgbW9kZWxhciBhIGNvcnJlbGHDp8OjbyBzZXJpYWwgbm8gdGVybW8gZGUgZXJybyBjb21vIHVtIG1vZGVsbyBhdXRvcnJlZ3Jlc3Npdm8gZSBlbnTDo28gdXPDoS1sbyBwYXJhIGRlcml2YXIgdW0gbW9kZWxvIGRlIHJlZ3Jlc3PDo28gYXV0b3JyZWdyZXNzaXZvIGNvbSBkZWZhc2FnZW5zIGRpc3RyaWJ1w61kYXMgKCphdXRvcmVncmVzc2l2ZSBkaXN0cmlidXRlZCBsYWcgcmVncmVzc2lvbiBtb2RlbCopLiBDb250dWRvLCDDqSByZXF1ZXJpZG8gZXhvZ2VuZWlkYWRlIGVzdHJpdGEgc29icmUgYSBxdWFsIG9zIGVycm9zIHRlbSBtw6lkaWEgY29uZGljaW9uYWwgaWd1YWwgYSB6ZXJvIGRhZG8gb3MgdmFsb3JlcyBwYXNzYWRvcywgcHJlc2VudGVzIGUgZnV0dXJvcyBkZSAkeCQuIAoKPGRpdiBzdHlsZT0iYmFja2dyb3VuZDojZjVmNWY1OyBwYWRkaW5nOjIwcHg7IG1hcmdpbjogMTBweDsiPgoqKkV4ZW1wbG86KioKClN1cG9uaGEgcXVlIGF0w6kgZHVhcyBkZWZhc2FnZW5zIGRlICR4X3QkIGltcGFjdGFtICR5X3QkIGUgcXVlIG8gdGVybW8gZGUgZXJybyBzZSBjb21wb3J0YSBjb21vIHVtIEFSKDEpLiBBc3NpbSwgdGVyw61hbW9zIGFzIHNlZ3VpbnRlcyBlcXVhw6fDtWVzOgoKJCQKXGJlZ2lue2FsaWduZWR9CnlfdCAmPSBcYmV0YV8wICsgXGJldGFfMXhfdCArIFxiZXRhXzJ4X3t0LTF9ICsgIHVfdCBcXApcXAp1X3QgJj0gXHBoaV8xdV97dC0xfSthX3QKXGVuZHthbGlnbmVkfQokJApvbmRlICRccGhpXzEkIMOpIG8gcGFyw6JtZXRybyBhdXRvcnJlZ3Jlc3Npdm8gZSAkYV90JCDDqSB1bSB0ZXJtbyBkZSBlcnJvIG7Do28gYXV0b2NvcnJlbGFjaW9uYWRvLiBQZXJjZWJhIHF1ZSBuw6NvIMOpIG5lY2Vzc8OhcmlvIGludGVyY2VwdG8sIHBvaXMgYXNzdW1pbW9zIHF1ZSAkRVt1X3RdPTAkLiBQb3N0ZXJpb3JtZW50ZSwgbW9zdHJhcmVtb3MgcG9yIG1laW8gZGUgZGVyaXZhw6fDtWVzIHF1ZSB0YWwgbW9kZWxvIHBvZGUgc2VyIHJlZXNjcml0byBjb21vOgoKJCQKeV90ID0gXGFscGhhXzAgKyBccGhpXzF5X3t0LTF9K1xkZWx0YV8weF90ICsgXGRlbHRhXzF4X3t0LTF9K1xkZWx0YV8yeF97dC0yfSthX3QKJCQKCnF1ZSDDqSBjb25oZWNpZG8gY29tbyAqYXV0b3JlZ3Jlc3NpdmUgZGlzdHJpYnV0ZWQgbGFnIHJlZ3Jlc3Npb24gbW9kZWwqIChBREwpLiBBcXVpLCB1bSAkQURMKDEsMikkIG9uZGUgdGVtb3MgJDEkIGRlZmFzYWdlbSBkZSAkeV90JCBlICQyJCBkZWZhc2FnZW5zIGRlICR4X3QkIGNvbW8gdmFyacOhdmVpcyBleHBsaWNhdGl2YXMuIAoKPC9kaXY+CgpObyBkZWNvcnJlciBkZXN0ZSBkb2N1bWVudG8sIGFwcmVzZW50YXJlbW9zIGFzIGhpcMOzdGVzZXMgZGUgZXhvZ2VuZWlkYWRlIGUgZXhlZ2VuZWlkYWRlIGZvcnRlIGUgY29tbyBlbGFzIGVzdMOjbyBsaWdhZGFzIGFvcyBtb2RlbG9zICRETE0kIGUgJEFETCQuIEFsw6ltIGRpc3NvLCBkZWZpbmlyZW1vcyBvIGVmZWl0byBjYXVzYWwgZGluw6JtaWNvIGUgbyBwcm9jZXNzbyBxdWUgZGV2ZSBzZXIgdXNhZG8gcGFyYSBlc2NvbGhlciBxdWFsIGRvcyBkb2lzIG1vZGVsb3MgdXNhciBuYSBwcsOhdGljYS4gCgojIyMjIyAqKkVGRUlUTyBDQVVTQUwgRElOw4JNSUNPKioKClVtIGVmZWl0byBjYXVzYWwgw6kgcmVzdWx0YWRvIGRlIHVtIGV4cGVyaW1lbnRvIGFsZWF0w7NyaW8gY29udHJvbGFkby4gUG9yIGV4ZW1wbG8sIHVtIGhvcnRpY3VsdG9yIGFwbGljYSBmZXJ0aWxpemFudGVzIGFsZWF0b3JpYW1lbnRlIGVtIGFsZ3VucyBww6lzIGRlIHRvbWF0ZSwgbWFzIGVtIG91dHJvcyBuw6NvIGUgZW50w6NvIG1lZGUgYSBwcm9kdcOnw6NvLiBBIGRpZmVyZW7Dp2EgZXNwZXJhZGEgZW50cmUgYSBwcm9kdcOnw6NvIGNvbSBlIHNlbSBmZXJ0aWxpemFudGUgw6kgbyBlZmVpdG8gY2F1c2FsIGRlIHVzYXIgZmVydGlsaXphbnRlcyBuYSBwcm9kdcOnw6NvIGRlIHRvbWF0ZXMuCgpFc3RlIGNvbmNlaXRvIGRlIHVtIGV4cGVyaW1lbnRvIHBvZGUgc2VyIHBlbnNhZG8gZW0gZGFkb3MgY3Jvc3Mtc2VjdGlvbiAoYXF1aSwgcMOpcyBkZSB0b21hdGUpIG91IGVtIGRhZG9zIGVtIHBhaW5lbCAocG9yIGV4ZW1wbG8sIHJlbmRhIGluZGl2aWR1YWwgYW50ZXMgZSBhcMOzcyB1bSBwcm9ncmFtYSBkZSB0cmVpbmFtZW50byBlbSBmb3JtYXRvIGV4cGVyaW1lbnRhbCkuIFBvciB0ZXIgbcO6bHRpcGxvcyBzdWplaXRvcyDDqSBwb3Nzw612ZWwgdGVyIGdydXBvcyB0YW50byBkZSB0cmF0YW1lbnRvIHF1YW50byBkZSBjb250cm9sZSBlIGFzc2ltLCBlc3RpbWFyIG8gZWZlaXRvIGNhdXNhbCBkbyB0cmF0YW1lbnRvLgoKTmEgYW7DoWxpc2UgZGUgc8OpcmllcyB0ZW1wb3JhaXMsIGVzdGEgZGVmaW5pw6fDo28gZGUgZWZlaXRvIGNhdXNhbCBlbSB0ZXJtb3MgZGEgaWRlaWEgZGUgdW0gZXhwZXJpbWVudG8gYWxlYXTDs3JpbyBjb250cm9sYWRvIHByZWNpc2Egc2VyIG1vZGlmaWNhZGEuIENvbnNpZGVyZSB1bSBwcm9ibGVtYSBkZSBtYWNyb2Vjb25vbWlhIGRlIGVzdGltYXIgbyBlZmVpdG8gZGUgdW1hIG11ZGFuw6dhIG7Do28gYW50ZWNpcGFkYSBuYSB0YXhhIGRlIGp1cm9zIGRlIGN1cnRvIHByYXpvIHNvYnJlIGEgYXRpdmlkYWRlIGVjb27DtG1pY2EgYXR1YWwgZSBmdXR1cmEgZGUgdW0gZGFkbyBwYcOtcywgbWVkaWRhIHBlbG8gUElCLiAKClRvbWFkbyBsaXRlcmFsbWVudGUsIG8gZXhwZXJpbWVudG8gYWxlYXTDs3JpbyBjb250cm9sYWRvIGVtIGNyb3NzLXNlY3Rpb24gZSBkYWRvcyBlbSBwYWluZWwsIGltcGxpY2FyaWEgZW0gZmF6ZXIgdW0gZXhwZXJpbWVudG8gYWxlYXTDs3JpbyBlbSBkaXZlcnNvcyBwYcOtc2VzIGUgdGVyIG8gZ3J1cG8gZGUgY29udHJvbGUgZSBvIGdydXBvIGRlIHRyYXRhbWVudG8uIE9zIGJhbmNvcyBjZW50cmFpcyBubyBncnVwbyBkZSB0cmF0YW1lbnRvIGFwbGljYXJpYW0gbyB0cmF0YW1lbnRvIGRlIHVtYSBtdWRhbsOnYSBhbGVhdMOzcmlhIG5hIHRheGEgZGUganVyb3MgZW5xdWFudG8gbyBncnVwbyBkZSBjb250cm9sZSBuw6NvIGFwbGljYXJpYSBxdWFscXVlciBtdWRhbsOnYS4gUGFyYSBhbWJvcyBvcyBncnVwb3MsIGEgYXRpdmlkYWRlIGVjb27DtG1pY2EgZGV2ZXJpYSBzZXIgbWVkaWRhIGFvIGxvbmdvIGRvcyBwcsOzeGltb3MgYW5vcy4gUG9yw6ltLCBlIHNlIGVzdGFtb3MgaW50ZXJlc3NhZG9zIGVtIGFwbGljYXIgZXN0ZSBlZmVpdG8gcGFyYSB1bSBwYcOtcyBlc3BlY8OtZmljbz8gRW50w6NvLCBlc3RlIGV4cGVyaW1lbnRvIHRlcmlhIGRpZmVyZW50ZXMgImNsb25lcyIgZGVzdGUgcGHDrXMgY29tbyBzdWplaXRvLCBxdWUgc2VyaWFtIGRpdmlkaWRvcyBlbnRyZSBvcyBncnVwb3MgZGUgdHJhdGFtZW50byBlIGNvbnRyb2xlLiBPYnZpYW1lbnRlLCBlc3RlIHVuaXZlcnNvIHBhcmFsZWxvIMOpIGludmnDoXZlbC4KCkFvIGludsOpcyBkaXNzbywgZW0gZGFkb3MgZGUgc8OpcmllcyB0ZW1wb3JhaXMgw6kgw7p0aWwgcGVuc2FyIGVtIHVtIGV4cGVyaW1lbnRvIGFsZWF0w7NyaW8gY29udHJvbGFkbyBjb25zaXN0aW5kbyBkbyBtZXNtbyBzdWplaXRvIChwb3IgZXhlbXBsbywgYSBlY29ub21pYSBkb3MgRVVBKSBzZW5kbyBkYWRvIGRpZmVyZW50ZXMgdHJhdGFtZW50b3MgKG11ZGFuw6dhcyBhbGVhdG9yaWFzIG5hIHRheGEgZGUganVyb3MpIGVtIGRpZmVyZW50ZXMgcG9udG9zIGRvIHRlbXBvICgxOTcwLCAxOTgwIGUgYXNzaW0gZW0gZGlhbnRlKS4gTmVzdGEgYWJvcmRhZ2VtLCBvIMO6bmljbyBzdWplaXRvIGVtIHBlcsOtb2RvIGRlIHRlbXBvIGRpZmVyZW50ZSBkZXNlbXBlbmhhIHRhbnRvIG8gcGFwZWwgZGUgY29udHJvbGUgcXVhbnRvIG8gZGUgdHJhdGFtZW50byAow6BzIHZlemVzIG8gRkVEIG11ZGEgYSB0YXhhIGRlIGp1cm9zIGUgw6BzIHZlemVzIG7Do28pLiBFbSBmdW7Dp8OjbyBkb3MgZGFkb3Mgc2VyZW0gY29sZXRhZG9zIGFvIGxvbmdvIGRvIHRlbXBvLCDDqSBwb3Nzw612ZWwgZXN0aW1hciBvIGVmZWl0byBjYXVzYWwgZGluw6JtaWNvLCBvdSBzZWphLCBvIGNhbWluaG8gdGVtcG9yYWwgZG8gZWZlaXRvIHNvYnJlIGEgdGF4YSBkZSBqdXJvcyBvcmlnaW5hZG8gZW0gZnVuw6fDo28gZG8gdHJhdGFtZW50by4gCgo8IS0tIFBvciBleGVtcGxvLCB1bSBhdW1lbnRvIG7Do28gZXNwZXJhZG8gbmEgdGF4YSBkZSBqdXJvcyBubyBjdXJ0byBwcmF6byBkZSAyXCUsIHN1c3RlbnRhZG8gcG9yIHVtIHRyaW1lc3RyZSwgcG9kZSBpbmljaWFsbWVudGUgdGVyIHVtIGVmZWl0byBpbnNpZ25pZmljYW50ZSBzb2JyZSBvIHByb2R1dG8gZSBkZXBvaXMgZGUgZG9pcyB0cmltZXN0cmVzIG8gY3Jlc2NpbWVudG8gZG8gUElCIHBvZGUgZGltaW51aXIsIGNvbSBhIG1haW9yIHF1ZWRhIGFww7NzIHVtIGFubyBlIG1laW8uIEVudMOjbywgYXDDs3Mgb3MgcHLDs3hpbW9zIGRvaXMgYW5vcyBvIFBJQiBwb2RlIHJldG9ybmFyIGFvIG5vcm1hbC4gRXN0ZSBjYW1pbmhvIGRvIGVmZWl0byBjYXVzYWwgw6kgbyBlZmVpdG8gY2F1c2FsIGRpbsOibWljbyBzb2JyZSBvIGNyZXNjaW1lbnRvIGRvIFBJQiBlbSBmdW7Dp8OjbyBkZSB1bWEgbXVkYW7Dp2EgbsOjbyBlc3BlcmFkYSBuYSB0YXhhIGRlIGp1cm9zLiAtLT4KCkVzdGEgZm9ybXVsYcOnw6NvIGRvIGVmZWl0byBjYXVzYWwgZGluw6JtaWNvIGVtIGRhZG9zIGRlIHPDqXJpZXMgdGVtcG9yYWlzIGNvbW8gbyByZXN1bHRhZG8gZXNwZXJhZG8gZGUgdW0gZXhwZXJpbWVudG8gbm8gcXVhbCBkaWZlcmVudGVzIG7DrXZlaXMgZGUgdHJhdGFtZW50b3Mgc8OjbyByZXBldGlkYW1lbnRlIGFwbGljYWRvcyBhbyBtZXNtbyBzdWplaXRvIHRlbSBkdWFzIGltcGxpY2HDp8O1ZXMgcGFyYSB0ZW50YXRpdmEgZW1ww61yaWNhcyBkZSBtZWRpLWxvIGVtIHPDqXJpZXMgdGVtcG9yYWlzOgoKMS4gTyBlZmVpdG8gbsOjbyBkZXZlcmlhIG11ZGFyIHBhcmEgYSBhbW9zdHJhIGRlIGRhZG9zIHF1ZSB0ZW1vcwoyLiAkeCQgZGV2ZSBzZXIgbsOjbyBjb3JyZWxhY2lvbmFkbyBjb20gbyB0ZXJtbyBkZSBlcnJvIChleG9nZW5laWRhZGUpCgo8ZGl2IHN0eWxlPSJiYWNrZ3JvdW5kOiNmNWY1ZjU7IHBhZGRpbmc6MjBweDsgbWFyZ2luOiAxMHB4OyI+CioqRXhlbXBsbzoqKgoKU3Vwb25oYSBxdWUgbm9zIEVVQSBleGlzdGUgdW0gbWVyY2FkbyBkZSBjb21wcmEgZSB2ZW5kYSBkZSBncmFuZGVzIHF1YW50aWRhZGVzIGRlIHN1Y28gZGUgbGFyYW5qYSBjb25jZW50cmFkbyBlbSB1bSBwcmXDp28gZXNwZWPDrWZpY28gcGFyYSB1bWEgZGF0YSBmdXR1cmEuIEEgZm9udGUgZGUgcXVhc2UgdG9kbyBvIGNvbmNlbnRyYWRvIGRlc3RlIHN1Y28gw6kgYSBGbMOzcmlkYS4gQWzDqW0gZGlzc28sIGRlIHRlbXBvcyBlbSB0ZW1wb3Mgb25kYXMgZGUgZnJpbyBuYSBGbMOzcmlkYSBtYXRhbSBhcyBsYXJhbmphcyBkZSB0YWwgZm9ybWEgcXVlIGEgb2ZlcnRhIGRlc3RhIGZydXRhIGNhaSBkcmFzdGljYW1lbnRlIGZhemVuZG8gY29tIHF1ZSBvIHByZcOnbyBkbyBzdWNvIGRlIGxhcmFuamEgY29uY2VudHJhZG8gYXVtZW50ZS4gCgpFbSBmdW7Dp8OjbyBkZXN0ZSBwcm9ibGVtYSwgc2VyaWEgaW1wb3J0YW50ZSBwYXJhIGEgZ2VzdMOjbyBzYWJlcjoKCi0gUXVhbCDDqSBhIGFsdGVyYcOnw6NvIG5vcyBwcmXDp29zIHF1YW5kbyBow6Egb25kYXMgZGUgZnJpbyBuYSBGbMOzcmlkYT8KLSBQb3IgcXVhbnRvIHRlbXBvIGEgbXVkYW7Dp2EgY2xpbcOhdGljYSBpbmZsdWVuY2lhIG5vcyBwcmXDp29zIChob2plIGUgZnV0dXJhbWVudGUpPwoKQXNzdW1pbmRvIHF1ZSBgcmVhbHByaWNlYCDDqSBhIHZhcmnDoXZlbCBxdWUgcmVwcmVzZW50YSBvIHByZcOnbyByZWFsIGRvIHN1Y28gZGUgbGFyYW5qYSBjb25jZW50cmFkbyBlIHF1ZSBgZmRkYCDDqSBvIG7Dum1lcm8gZGUgZGlhcyBlbSBxdWUgYSB0ZW1wZXJhdHVyYSAoZW0gZ3JhdXMgRmFocmVuaGVpdCkgY2FpIGFiYWl4byBkZSB6ZXJvIGVtIHVtIGRldGVybWluYWRvIG3DqnMsIHRlcsOtYW1vczoKCiQkCnJlYWxwcmljZV90ID0gXGJldGFfMCArIFxiZXRhXzFmZGRfdCArIFxiZXRhXzJmZGRfe3QtMX0gKyBcYmV0YV8zZmRkX3t0LTJ9ICsgLi4uICsgXGJldGFfe3IrMX1mZGRfe3Qtcn0rICB1X3QKJCQKY29tbyBvIG1vZGVsbyBETE0gY29tICRyJCBkZWZhc2FnZW5zIGRlICRmZGQkIGltcGFjdGFuZG8gbyBwcmXDp28gcmVhbCwgc2VuZG86CgoqICRcYmV0YV8xJCDDqSBvIGVmZWl0byBjb250ZW1wb3LDom5lbyBxdWUgbW9zdHJhIG8gYXVtZW50byBwZXJjZW50dWFsIG5vcyBwcmXDp29zIGFvIGxvbmdvIGRvIG3DqnMgbm8gcXVhbCBvY29ycmUgdW0gZGlhIGFkaWNpb25hbCBkZSB0ZW1wZXJhdHVyYSBhYmFpeG8gZGUgemVyby4gCiogJFxiZXRhXzIkIGF0w6kgJFxiZXRhX3tyKzF9JCByZXByZXNlbnRhbSBvIHF1YW50byB1bSBkaWEgYWRpY2lvbmFsIGRlIHRlbXBlcmF0dXJhIGFiYWl4byBkZSB6ZXJvIGltcGFjdGFyaWEgbm9zIHByZcOnb3MgYW8gbG9uZ28gZG9zIHByw7N4aW1vcyAkciQgbWVzZXMuIAoKUG9yIG91dHJvIGxhZG8sIAoKJCQKXGJlZ2lue2FsaWduZWR9CnJlYWxwcmljZV90ID0gXGFscGhhXzAgKyBccGhpXzFyZWFscHJpY2Vfe3QtMX0rXGRlbHRhXzBmZGRfdCArIFxkZWx0YV8xZmRkX3t0LTF9K1xkZWx0YV8yZmRkX3t0LTJ9K2FfdApcZW5ke2FsaWduZWR9CiQkCnNlcmlhIHVtIG1vZGVsbyBBREwoMSwyKSBvbmRlICQxJCBkZWZhc2FnZW0gZG8gcHLDs3ByaW8gcHJlw6dvIHJlYWwgZSAkMiQgZGVmYXNhZ2VucyBkZSAkZmRkJCBpbXBhY3RhbSBvIHByZcOnbyByZWFsIGNvcnJlbnRlLgoKRW0gYW1ib3Mgb3MgY2Fzb3Mgb3MgcGFyw6JtZXRyb3MgZXN0aW1hZG9zIHBhcmEgJGZkZF90JCBlIHN1YXMgZGVmYXNhZ2VucyBzZXLDo28gb3MgcmVzcG9uc8OhdmVpcyBwb3Igbm9zIGZvcm5lY2VyIG8gZWZlaXRvIGNhdXNhbCBkaW7Dom1pY28gKHZhbG9yIGNvcnJlbnRlIGUgZnV0dXJvKSBlbSBgcmVhbHByaWNlYCDDoCBtZWRpZGEgcXVlIG9jb3JyZSBvIGF1bWVudG8gZW0gdW1hIHVuaWRhZGUgKHVtIGRpYSkgZW0gJGZkZF90JCBvdSBzdWFzIGRlZmFzYWdlbnMuCgo8L2Rpdj4KCgojIyMjIyAqKkRPSVMgVElQT1MgREUgRVhPR0VORUlEQURFKioKCkNvbW8gc2FiZW1vcywgdW1hIHZhcmnDoXZlbCDDqSBkZWZpbmlkYSBjb21vIGV4w7NnZW5hIHNlIGVsYSBuw6NvIGVzdMOhIGNvcnJlbGFjaW9uYWRhIGNvbSBvIHRlcm1vIGRlIGVycm8gZW5xdWFudG8gdW1hIHZhcmnDoXZlbCDDqSBjb25zaWRlcmFkYSBlbmTDs2dlbmEgc2UgZWxhIGVzdMOhIGNvcnJlbGFjaW9uYWRhIGNvbSBvIHRlcm1vIGRlIGVycm8uIAoKUG9yIGV4ZW1wbG8sIHNlIHZhbW9zIGVzdGltYXIgbyBlZmVpdG8gY2F1c2FsIGRpbsOibWljbyB1c2FuZG8gbyBtb2RlbG8gRExNLAoKJCQKeV90ID0gXGJldGFfMCArIFxiZXRhXzF4X3QgKyBcYmV0YV8yeF97dC0xfSArIFxiZXRhXzN4X3t0LTJ9ICsgLi4uICsgXGJldGFfe3IrMX14X3t0LXJ9KyAgdV90CiQkCgpvcyByZWdyZXNzb3JlcyAob3MgJHhgcyQpIGRldmVtIHNlciBuw6NvIGNvcnJlbGFjaW9uYWRvcyBjb20gbyB0ZXJtbyBkZSBlcnJvLiBBc3NpbSwgJHgkIHNlcsOhIGV4w7NnZW5vLiBFbSBmdW7Dp8OjbyBkZSBlc3Rhcm1vcyB0cmFiYWxoYW5kbyBjb20gc8OpcmllcyB0ZW1wb3JhaXMsIMOpIHByZWNpc28gcmVmaW5hciBhIGRlZmluacOnw6NvIGRlIGV4b2dlbmVpZGFkZS4gRXhpc3RlbSBkb2lzIGRpZmVyZW50ZXMgY29uY2VpdG9zIGRlIGV4b2dlbmVpZGFkZSBxdWUgdXNhcmVtb3M6CgoxLiBPIHRlcm1vIGRlIGVycm8gdGVtIG3DqWRpYSBjb25kaWNpb25hbCBpZ3VhbCBhICQwJCBkYWRvIG9zIHZhbG9yZXMgY29ycmVudGVzIGUgcGFzc2Fkb3MgZGUgJHgkLiBPdSBzZWphLCAkRVxsZWZ0W3VfdHx4X3QseF97dC0xfSx4X3t0LTJ9LC4uLlxyaWdodF09MCQuIElzdG8gbW9kaWZpY2EgYSBoaXDDs3Rlc2UgcGFkcsOjbyBkZSBtw6lkaWEgY29uZGljaW9uYWwgcGFyYSByZWdyZXNzw6NvIGxpbmVhciBtw7psdGlwbGEgY29tIGRhZG9zIGNyb3NzLXNlY3Rpb24gcXVlIHJlcXVlciBhcGVuYXMgcXVlICR1X3QkIHRlbmhhIHVtYSBtw6lkaWEgY29uZGljaW9uYWwgaWd1YWwgYSAkMCQgZGFkbyBvcyByZWdyZXNzb3JlcyBpbmNsdcOtZG9zICgkRVxsZWZ0W3VfdHx4X3QseF97dC0xfSwuLi4seF97dC1yfVxyaWdodF09MCQpLiBBZGljaW9uYXIgdG9kYXMgYXMgZGVmYXNhZ2VucyBkZSAkeCQgbmEgZXNwZXJhbsOnYSBjb25kaWNpb25hbCBpbXBsaWNhIHF1ZSB0b2RvcyBvcyBlZmVpdG9zIG1haXMgZGlzdGFudGVzIChlZmVpdG8gY2F1c2FsIGFsw6ltIGRlICRyJCkgc8OjbyAqKm51bG9zKiouIEFzc2ltLCBzb2IgZXN0YSBoaXDDs3Rlc2UsIHRvZG9zIGFzICRyJCBkZWZhc2FnZW5zICoqc8OjbyBkaWZlcmVudGVzIGRlIHplcm8qKiBlIHBvZGVtb3MgY2hhbWFyIGVzdGEgaGlww7N0ZXNlIGRlICoqZXhvZ2VuZWlkYWRlKiouCgoyLiAgTyB0ZXJtbyBkZSBlcnJvIHRlbSBtw6lkaWEgemVybywgZGFkbyB0b2RvcyBvcyB2YWxvcmVzIHBhc3NhZG9zLCBwcmVzZW50ZXMgZSBmdXR1cm9zIGRlICR4X3QkLiBPdSBzZWphLCAkRVxsZWZ0KHVfdHwuLi4seF97dCsxfSx4X3QseF97dC0xfSx4X3t0LTJ9LC4uLlxyaWdodCkgPSAwJC4gSXNzbyDDqSBjaGFtYWRvIGRlICoqZXhvZ2VuZWlkYWRlIGVzdHJpdGEqKi4gQSByYXrDo28gcGFyYSBpbnRyb2R1emlyIG8gY29uY2VpdG8gZGUgZXhvZ2VuZWlkYWRlIGVzdHJpdGEgw6kgcXVlLCBxdWFuZG8gJHgkIMOpIGVzdHJpdGFtZW50ZSBleMOzZ2VubywgZXhpc3RlIGVzdGltYWRvcmVzIG1haXMgZWZpY2llbnRlcyBkbyBlZmVpdG8gY2F1c2FsIGRpbsOibWljbyBkbyBxdWUgb3MgZXN0aW1hZG9yZXMgb2J0aWRvcyBwb3IgT0xTIChhcXVpLCBETE0pLiAKCkEgZGlmZXJlbsOnYSBlbnRyZSBleG9nZW5laWRhZGUgKHBhc3NhZG8gZSBwcmVzZW50ZSkgZSBleG9nZW5laWRhZGUgZXN0cml0YSAocGFzc2FkbywgcHJlc2VudGUsIGUgZnV0dXJvKSDDqSBxdWUgYSBleG9nZW5laWRhZGUgZXN0cml0YSBpbmNsdWkgdmFsb3JlcyBmdXR1cm9zIGRlICR4JCBuYSBlc3BlcmFuw6dhLiBBc3NpbSwgZXhvZ2VuZWlkYWRlIGVzdHJpdGEgaW1wbGljYSBleG9nZW5laWRhZGUsIG1hcyBuw6NvIG8gcmV2ZXJzby4gCgo8ZGl2IHN0eWxlPSJiYWNrZ3JvdW5kOiNmNWY1ZjU7IHBhZGRpbmc6MjBweDsgbWFyZ2luOiAxMHB4OyI+CioqRXhlbXBsbzoqKgoKQ29uc2lkZXJlIG8gZXhlbXBsbyBkbyBwcmXDp28gZG8gY29uY2VudHJhZG8gZG8gc3VjbyBkZSBsYXJhbmphLCBlbSBxdWUgJHJlYWxwcmljZV90JCDDqSBhIG11ZGFuw6dhIHBlcmNlbnR1YWwgbm8gcHJlw6dvIHJlYWwgZG8gc3VjbyBkZSBsYXJhbmphIG5vIG3DqnMgZSAkZmRkX3QkIMOpIG8gbsO6bWVybyBkZSBkaWFzIGNvbSB0ZW1wZXJhdHVyYSBhYmFpeG8gZGUgemVybyBuZXN0ZSBtw6pzLiBBIHBhcnRpciBkYSBwZXJzcGVjdGl2YSBkbyBtZXJjYWRvIGRlIHN1Y28gZGUgbGFyYW5qYSwgcG9kZW1vcyBwZW5zYXIgbm8gY2xpbWEgY29tbyBzZSBlbGUgZm9zc2UgYWxlYXRvcmlhbWVudGUgZGVmaW5pZG8sIG5vIHNlbnRpZG8gZGUgcXVlIG8gY2xpbWEgZXN0w6EgZm9yYSBkbyBjb250cm9sZSBodW1hbm8uIFNlIG8gZWZlaXRvIGRlICRmZGQkIMOpIGxpbmVhciBlIHNlIGVsZSBuw6NvIHRlbSBlZmVpdG8gc29icmUgb3MgcHJlw6dvcyBkZXBvaXMgZGUgJHIkIG1lc2VzLCBlbnTDo28gc2VndWUtc2UgcXVlIG8gY2xpbWEgw6kgZXjDs2dlbm8uIE1hcyBvIGNsaW1hIMOpIGVzdHJpdGFtZW50ZSBleMOzZ2Vubz8gU2UgYSBtw6lkaWEgY29uZGljaW9uYWwgZGUgJHVfdCQgZGFkbyB2YWxvcmVzIGZ1dHVyb3MgZGUgJGZkZCQgw6kgZGlmZXJlbnRlIGRlIHplcm8sIGVudMOjbyAkZmRkJCBuw6NvIMOpIGVzdHJpdGFtZW50ZSBleMOzZ2Vuby4gUmVzcG9uZGVyIGVzdGEgcXVlc3TDo28gcmVxdWVyIHBlbnNhciBjdWlkYWRvc2FtZW50ZSBzb2JyZSBvIHF1ZSBwcmVjaXNhbWVudGUgZXN0w6EgY29udGlkbyBlbSAkdV90JC4KCkVtIHBhcnRpY3VsYXIsIHNlIG9zIHBhcnRpY2lwYW50ZXMgZG8gbWVyY2FkbyBkZSBzdWNvIGRlIGxhcmFuamEgdXNhbSBwcmV2aXPDtWVzIGRvICRmZGQkIHF1YW5kbyBlbGVzIGRlY2lkZW0gcXVhbnRvIGVsZXMgY29tcHJhcsOjbyBvdSB2ZW5kZXLDo28gYSB1bSBkYWRvIHByZcOnbywgZW50w6NvIG9zIHByZcOnb3MgZGUgc3VjbyBkZSBsYXJhbmphIGUsIGNvbnNlcXVlbnRlbWVudGUsIG8gdGVybW8gZGUgZXJybyAkdV90JCBpbmNvcnBvcmFyw6NvIGluZm9ybWHDp8O1ZXMgc29icmUgbyBmdXR1cm8gZGUgJGZkZCQgcXVlIHRvcm5hcmlhICR1X3QkIHVtIMO6dGlsIHByZWRpdG9yIGRlICRmZGQkLiBJc3RvIHNpZ25pZmljYQpxdWUgJHVfdCQgc2Vyw6EgY29ycmVsYWNpb25hZG8gY29tIHZhbG9yZXMgZnV0dXJvcyBkZSAkZmRkJCBlIGVtIGZ1bsOnw6NvIGRpc3NvIG7Do28gw6kgZXN0cml0YW1lbnRlIGV4w7NnZW5vLiAKCjwvZGl2PgoKIyMjIyMgKipSRUZFUsOKTkNJQVMqKgoK