Contexto Geral
O cenário econômico internacional em 2025 tem sido marcado por
contrastes. O dólar fechou ontem, dia 02/09/2025, cotado a R$5,47,
representando uma alta de 0,8% em relação ao fechaemnto de uma semana
atrás, possivelmente refletindo um movimento de maior aversão ao risco.
Ainda assim, acumula queda de 1,3% no período de um mês e queda de 2,76%
fernte ao mesmo período do ano anterior, evidenciando a volatilidade
atual dos mercados.
Um dos principais fatores que explica essa dinâmica é a política
comercial do governo Trump, que voltou a adotar tarifas elevadas sobre
diversos produtos importados. No curto prazo, essa estratégia tende a
reduzir as exportações de países emergentes para os EUA, como o Brasil,
o que pressiona o dólar para cima. Entretanto, em um horizonte mais
longo, abre espaço para que outras nações busquem novos parceiros
comerciais, e o Brasil surge como alternativa relevante nesse processo
de diversificação. Ainda assim, esse segundo efeito é mais lento, pois
envolve adaptação das cadeias globais de comércio, fazendo com que a
pressão de valorização do dólar prevaleça no curto prazo.
Outro elemento central é a trajetória da inflação americana. A
desaceleração dos preços ao longo de 2024 e 2025 levou o Federal Reserve
a iniciar cortes graduais na taxa de juros, após um ciclo histórico de
aperto monetário. Essa diminuição nas taxas de inflação continuam o que
leva a crer que o FED continuará os cortes na taxa de juros americanos,
levando a uma reduzida atratividade do dólar para investidores
internacionais, uma vez que o retorno relativo nos EUA diminui,
favorecendo a realocação de capitais para outras economias.
Assim, o dólar oscila entre forças de valorização no curto prazo —
ligadas às tarifas e à incerteza global — e forças de desvalorização no
médio e longo prazos, vinculadas ao afrouxamento da política monetária
americana e à possibilidade de realocação do comércio internacional,
buscando alternativas ao dólar após o tarifaço. Esse movimento pode ser
observado no Gráfico 1, que mostra a relação entre a taxa de juros
americana (FFR) e o câmbio USD/BRL ao longo do período.
Contexto Brasil
No Brasil, a Selic teve uma trajetória de queda desde julho 2023 até
o meio de 2024, mas permaneceu em patamar elevado quando comparada a
outras economias emergentes, e depois voltou a crescer para combater a
inflação, que não demonstrava facilidade em ceder. Esse diferencial de
juros garante relativa atratividade ao país, mas os investidores
internacionais permanecem atentos ao risco fiscal, especialmente com o
encarecimento da dívida devido aos juros masis elevados. A dificuldade
do governo em apresentar medidas consistentes de ajuste das contas
públicas mantém as expectativas inflacionárias sob pressão e limita o
espaço de cortes mais acelerados na taxa básica de juros.
Importância do Diferencial de Juros
Esse pano de fundo global e doméstico evidencia a importância do
diferencial de juros Brasil x EUA como determinante dos fluxos de
capitais e, consequentemente, da trajetória do câmbio. Essa relação é
bem descrita pelo modelo IS-LM-BP de Mundell-Fleming, no qual entradas
de capital são sensíveis ao diferencial de taxas de juros em regimes de
câmbio flutuante. Quando o diferencial se amplia, o Brasil tende a
atrair mais investimentos de portfólio; quando se estreita, a
atratividade diminui. A análise desse diferencial, portanto, é essencial
para compreender não apenas o comportamento recente do dólar/real, mas
também os riscos e oportunidades para os próximos meses.O Gráfico 2
apresenta visualmente essa diferença entre as taxas de juros do Brasil e
dos EUA ao longo do tempo.
Implicações para o Câmbio e os Fluxos de Capital
Entre 2020 e 2025, o diferencial de juros entre Brasil e Estados
Unidos — medido pela diferença entre a taxa Selic e o Fed Funds Rate —
passou por transformações significativas, refletindo tanto os ciclos
econômicos globais quanto os desafios domésticos. Esse diferencial é um
dos principais determinantes da atratividade do país para o capital
estrangeiro, impactando diretamente o comportamento do câmbio, os fluxos
de portfólio e a percepção de risco dos investidores.
Durante o período da pandemia, ambos os países adotaram políticas
monetárias expansionistas, com cortes agressivos nas taxas de juros para
estimular a atividade econômica. No entanto, a partir de 2021, os
caminhos começaram a divergir. Com o aumento da inflação global e
pressões internas, o Banco Central do Brasil iniciou um ciclo de alta da
Selic bem antes do Federal Reserve. Essa antecipação colocou a taxa
básica brasileira em patamar muito mais elevado do que a americana,
ampliando o diferencial de juros e fortalecendo temporariamente a
atratividade de ativos brasileiros denominados em reais.
Esse movimento atraiu fluxos de capital estrangeiro para o Brasil,
principalmente em investimentos de portfólio, buscando ganhos com
arbitragem de taxas (carry trade). O gráfico mostra claramente esse
alargamento do diferencial, especialmente entre 2022 e 2023, quando a
Selic superou os 13% ao ano, enquanto o Fed Funds Rate ainda estava em
patamares moderados. Ao longo de 2024 e 2025, entretanto, a situação se
inverteu. Com a inflação americana desacelerando e o Fed promovendo
cortes graduais nos juros, o diferencial voltou a ficar abrangente. No
Brasil, a política monetária também se tornou mais acomodatícia, mas em
ritmo mais cauteloso, devido à persistência das incertezas fiscais e da
pressão sobre as expectativas inflacionárias.
Em 2025, o diferencial permanece positivo, quase alcançando os níveis
de 2022. A Selic se mantém relativamente alta frente ao contexto
internacional, mas ainda não suficiente, isoladamente, para garantir
fluxos robustos de capitais. O cenário global mudou: o dólar perdeu
força, e investidores estão mais seletivos, priorizando fundamentos
fiscais e estabilidade institucional.
Portanto, a análise do diferencial de juros no período revela mais do
que um indicador técnico — ela ilustra a dinâmica das decisões de
política monetária, a reação dos mercados e os dilemas enfrentados por
economias emergentes como o Brasil. Em momentos de diferencial elevado,
o país conseguiu atrair recursos e sustentar a valorização do real.
Contudo, em 2025, com o diferencial em queda e o risco fiscal ainda
presente, o apelo relativo do Brasil se reduz, exigindo maior atenção à
condução da política econômica para sustentar a confiança do
investidor.
Câmbio e Risco Brasil: Evidências de 2020 a 2025
A análise da taxa de câmbio USD/BRL frente ao risco-país, mensurado
pelo CDS Brasil 5 anos, entre 2020 e 2025, revela a influência decisiva
da confiança do investidor sobre a trajetória cambial. Embora o
diferencial de juros entre Brasil e Estados Unidos seja um fator
relevante para atrair capital externo, os dados indicam que a percepção
de risco exerce papel igualmente central.
Como mostrado no Gráfico 3, em diversos momentos, aumentos no CDS
Brasil — sinalizando elevação do risco soberano — coincidem com
episódios de desvalorização do real. Parte desses movimentos pode ser
interpretada à luz do modelo de overshooting cambial de Dornbusch
(1976), no qual choques de expectativas causam flutuações exageradas no
câmbio no curto prazo antes de convergir ao novo equilíbrio. Esse padrão
sugere que o fluxo de capitais não responde apenas à remuneração
oferecida, mas também à segurança institucional percebida. Mesmo com
Selic elevada, o real tende a se depreciar quando o risco fiscal ou
político se intensifica.
Por outro lado, em períodos de redução do CDS, observa-se
estabilização ou valorização cambial, o que reforça a ideia de que o
câmbio responde diretamente à confiança dos agentes econômicos. Assim, o
risco-país atua como moderador da eficácia do diferencial de juros,
limitando seus efeitos sobre o câmbio em contextos de incerteza.
Portanto, a sustentação de um câmbio favorável e estável exige não
apenas política monetária atrativa, mas também credibilidade fiscal e
institucional. A valorização do real entre 2020 e 2025 esteve
condicionada à percepção de risco, o que reforça a necessidade de
políticas macroeconômicas consistentes para consolidar a atratividade do
Brasil aos olhos do investidor estrangeiro.
No momento atual, o comportamento do CDS parece indicar que houve um
aumento da percepção do risco no Brasil começado em junho frente às
incertezas causadas pelo anúncio das taxações pelos EUA. Ainda assim, o
real tem se valorizado frente ao dólar, talvez fruto da prevalência das
expectativas de diminuição da taxa de juros americana, que possui um
efeito de desvalorização da moeda aemricana.
Comparação Cambial: Real vs. Moedas Latino-Americanas
O gráfico 4 mostra a variação das taxas de câmbio do real (BRL)
frente ao dólar em comparação com outras moedas latino-americanas (MXN,
CLP, COP) entre 2020 e 2025. Nota-se que o real se desvalorizou mais do
que as demais moedas, que acompanharam uma trajetória parecida de
precificação em relação ao dólar, ainda que com maior volatilidade por
parte do peso mexicano.
Outra análise interessante que pode ser feita é a de como as moedas
desses países latino-americanos vêm reagindo às diversas tarifas
impostas pelos EUA em 2025 e, é o que o gráfico 5 mostra. Para o Brasil,
em 9 de julho de 2025, os EUA anunciaram uma tarifa geral de 50% sobre
bens de origem brasileira dentro do novo regime “recíproco”. A medida
tem escopo amplo (não apenas setorial), com vigência prevista para o
início de agosto e canais formais para exclusões de itens críticos que,
quando aplicável, se sobrepõe às tarifas globais já vigentes para
aço/alumínio e cobre. Oficialmente, o objetivo é “restabelecer
reciprocidade” e responder a práticas consideradas desleais. Na prática,
empresas passaram a reavaliar cadeias de suprimento e a preparar pedidos
de isenção, enquanto o mercado reduziu a precificação de dano direto à
medida que negociações bilaterais e exceções se tornam prováveis.
Os outros países analisados receberam tratamentos diversos. Ao México
foi colocada uma tarifa de 25% sobre todos os produtos de origem
mexicana desde 4 de março. Depois, anunciaram mais 30% em 12 de julho
com vigência prevista para 1º de agosto, mas suspenderam por 90 dias em
31 de julho após acordo; além disso, valem tarifas setoriais globais de
50% para aço e alumínio desde junho e 50% para cobre
semiacabado/derivados desde 1º de agosto. Para a Colômbia, houve uma
ameaça em 26 de janeiro de 25% com possível escalada a 50% na semana
seguinte, mas as medidas ficaram em pausa; desde 5 de abril o país está
apenas no piso global “recíproco” de 10%, sem taxa específica posterior.
No caso do Chile, não houve tarifa específica por país em 2025:
aplica-se o piso global de 10% desde 5 abril; porém, no cobre há tarifa
setorial global de 50% para produtos semiacabados e derivados a partir
de 1º de agosto (com cátodos e minérios isentos), tema ainda em
negociação bilateral, mas que já vem afetando bastante moeda chilena
devido à relevância do cobre na economia do país, um dos metais taxados
globalmente.
Essa valorização do real indica que o movimento não foi apenas
global, mas também reflexo de fatores internos, como juros altos
(Selic), controle da inflação e maior previsibilidade fiscal. Esses
fatores aumentaram a atratividade do Brasil para investidores
estrangeiros, fortalecendo o câmbio.
Conclusão
Embora os fundamentos de 2020–2025 expliquem parte das oscilações —
diferencial de juros, risco fiscal e ambiente externo — o dólar está
hoje especialmente imprevisível porque variáveis relevantes atuam em
sentidos opostos. As expectativas de cortes nas taxas de juros dos EUA
(Fed) tendem a favorecer fluxos para países emergentes, o que poderia
sustentar o real. Por outro lado, o pacote tarifário do governo Trump
tende, no curto prazo, a reduzir importações norte-americanas e a
pressionar parceiros comerciais; e, no médio e longo prazos, pode
estimular rearranjos nas cadeias globais e no uso de moedas, com
possível redução gradual da dependência do dólar.
No plano doméstico, o comportamento do câmbio segue sensível à
consolidação fiscal, à ancoragem de expectativas e à comunicação do
Banco Central. Assim, ainda que se possa trabalhar com um cenário base
de estabilidade com leve viés de apreciação do real caso haja avanço
fiscal e condições externas favoráveis, a incerteza atual recomenda
projeções em faixas e revisão frequente de premissas. Esse comportamento
do mercado ilustra a crítica de Lucas (1976) às políticas econômicas
baseadas em modelos sem expectativas racionais, já que choques de
informação rapidamente alteram as decisões dos agentes econômicos.
Choques de informação podem alterar rapidamente a direção da moeda.
Fontes e referência teórica:
Banco Central do Brasil – Sistema Gerenciador de Séries Temporais
(SGS). Disponível em: https://www.bcb.gov.br/estatisticas/sgs
Federal Reserve Economic Data (FRED) – Federal Reserve Bank of
St. Louis. Disponível em: https://fred.stlouisfed.org
Trading Economics – Indicadores macroeconômicos e financeiros
globais. Disponível em: https://tradingeconomics.com
Dados simulados com base em tendências históricas e eventos
hipotéticos de 2025.
A análise apresentada neste relatório encontra respaldo em diversos
modelos macroeconômicos clássicos e contemporâneos, como:
- Mundell-Fleming (modelo IS-LM-BP);
- Dornbusch (overshooting cambial);
- Krugman e Obstfeld (impactos de tarifas e política comercial);
- Blanchard e Johnson (macroeconomia em economias abertas);
- Lucas (crítica à política econômica sem expectativas
racionais);
- Frankel e Fama (expectativas cambiais e racionalidade de
mercado).
Esses modelos ajudam a interpretar os efeitos das taxas de juros,
risco-país, tarifas comerciais e expectativas sobre a taxa de
câmbio.
LS0tDQp0aXRsZTogIlJlbGF0w7NyaW8gQ8OibWJpbyBBZ28vMjAyNSINCmF1dGhvcjogDQogIC0gQnJ1bm8gTWVsbyAoRGlyZXRvciBkZSBUcmVpbmFtZW50b3MpIGUgTGFyYSBNYXJpYSAoRGlyZXRvcmEgZGUgUmVsYcOnw7VlcyBJbnN0aXR1Y2lvbmFpcykNCiAgLSBMaWdhIGRlIE1hY3JvZWNvbm9taWEgQXBsaWNhZGEgSWJNYWNybyBCSA0KZGF0ZTogIjAzLzA5LzIwMjUiDQpvdXRwdXQ6DQogIGh0bWxfZG9jdW1lbnQ6DQogICAgdG9jOiB0cnVlDQogICAgdG9jX2Zsb2F0OiB0cnVlDQogICAgdGhlbWU6IGx1bWVuDQogICAgaGlnaGxpZ2h0OiB0YW5nbw0KICAgIGNvZGVfZm9sZGluZzogc2hvdw0KICAgIGNvZGVfZG93bmxvYWQ6IHRydWUgDQotLS0NCg0KYGBge3IgYmlibGlvdGVjYXMsIHJlc3VsdHM9J2hpZGUnLCBtZXNzYWdlPUZBTFNFLCBlY2hvPUZBTFNFfQ0KIyBFc3RlIMOpIHVtIGNodW5rIGVzcGVjaWFsIGRlICdzZXR1cCcuDQojIEEgb3DDp8OjbyAnaW5jbHVkZT1GQUxTRScgc2lnbmlmaWNhIHF1ZSBlc3RlIGPDs2RpZ28gc2Vyw6EgZXhlY3V0YWRvLCANCiMgbWFzIG5lbSBvIGPDs2RpZ28gbmVtIHNldSByZXN1bHRhZG8gYXBhcmVjZXLDo28gbm8gZG9jdW1lbnRvIGZpbmFsLg0KIyBFbGEgbsOjbyBmb2kgYXF1aSB1dGlsaXphZGEgcGFyYSBxdWUgcG9zc2FtIHZpenVhbGl6YXIgYXMgYmlibGlvdGVjYXMuDQojIMOJIMOzdGltbyBwYXJhIGNhcnJlZ2FyIHBhY290ZXMgZSBkZWZpbmlyIG9ww6fDtWVzIGdsb2JhaXMuDQpvcHRpb25zKHJlcG9zID0gYyhDUkFOID0gImh0dHBzOi8vY2xvdWQuci1wcm9qZWN0Lm9yZy8iKSkNCmluc3RhbGwucGFja2FnZXMoImZyZWRyIikNCmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvID0gRkFMU0UsIG1lc3NhZ2UgPSBGQUxTRSwgd2FybmluZyA9IEZBTFNFKQ0KbGlicmFyeSh0aWR5dmVyc2UpDQpsaWJyYXJ5KHBsb3RseSkNCmxpYnJhcnkoaGlnaGNoYXJ0ZXIpDQpsaWJyYXJ5KGZyZWRyKQ0KbGlicmFyeShyYmNiKQ0KbGlicmFyeShxdWFudG1vZCkNCmxpYnJhcnkobHVicmlkYXRlKQ0KbGlicmFyeShnZ3Bsb3QyKQ0KbGlicmFyeSh0aWJibGUpDQpsaWJyYXJ5KHNjYWxlcykNCmxpYnJhcnkoaHR0cikNCmxpYnJhcnkoanNvbmxpdGUpDQpsaWJyYXJ5KHN0cmluZ3IpDQpsaWJyYXJ5KHRpZHlyKQ0KYGBgDQoNCiMjIENvbnRleHRvIEdlcmFsDQoNCk8gY2Vuw6FyaW8gZWNvbsO0bWljbyBpbnRlcm5hY2lvbmFsIGVtIDIwMjUgdGVtIHNpZG8gbWFyY2FkbyBwb3IgY29udHJhc3Rlcy4gTyBkw7NsYXIgZmVjaG91IG9udGVtLCBkaWEgMDIvMDkvMjAyNSwgY290YWRvIGEgUiQ1LDQ3LCByZXByZXNlbnRhbmRvIHVtYSBhbHRhIGRlIDAsOCUgZW0gcmVsYcOnw6NvIGFvIGZlY2hhZW1udG8gZGUgdW1hIHNlbWFuYSBhdHLDoXMsIHBvc3NpdmVsbWVudGUgcmVmbGV0aW5kbyB1bSBtb3ZpbWVudG8gZGUgbWFpb3IgYXZlcnPDo28gYW8gcmlzY28uIEFpbmRhIGFzc2ltLCBhY3VtdWxhIHF1ZWRhIGRlIDEsMyUgbm8gcGVyw61vZG8gZGUgdW0gbcOqcyBlIHF1ZWRhIGRlIDIsNzYlIGZlcm50ZSBhbyBtZXNtbyBwZXLDrW9kbyBkbyBhbm8gYW50ZXJpb3IsIGV2aWRlbmNpYW5kbyBhIHZvbGF0aWxpZGFkZSBhdHVhbCBkb3MgbWVyY2Fkb3MuDQoNClVtIGRvcyBwcmluY2lwYWlzIGZhdG9yZXMgcXVlIGV4cGxpY2EgZXNzYSBkaW7Dom1pY2Egw6kgYSBwb2zDrXRpY2EgY29tZXJjaWFsIGRvIGdvdmVybm8gVHJ1bXAsIHF1ZSB2b2x0b3UgYSBhZG90YXIgdGFyaWZhcyBlbGV2YWRhcyBzb2JyZSBkaXZlcnNvcyBwcm9kdXRvcyBpbXBvcnRhZG9zLiBObyBjdXJ0byBwcmF6bywgZXNzYSBlc3RyYXTDqWdpYSB0ZW5kZSBhIHJlZHV6aXIgYXMgZXhwb3J0YcOnw7VlcyBkZSBwYcOtc2VzIGVtZXJnZW50ZXMgcGFyYSBvcyBFVUEsIGNvbW8gbyBCcmFzaWwsIG8gcXVlIHByZXNzaW9uYSBvIGTDs2xhciBwYXJhIGNpbWEuIEVudHJldGFudG8sIGVtIHVtIGhvcml6b250ZSBtYWlzIGxvbmdvLCBhYnJlIGVzcGHDp28gcGFyYSBxdWUgb3V0cmFzIG5hw6fDtWVzIGJ1c3F1ZW0gbm92b3MgcGFyY2Vpcm9zIGNvbWVyY2lhaXMsIGUgbyBCcmFzaWwgc3VyZ2UgY29tbyBhbHRlcm5hdGl2YSByZWxldmFudGUgbmVzc2UgcHJvY2Vzc28gZGUgZGl2ZXJzaWZpY2HDp8Ojby4gQWluZGEgYXNzaW0sIGVzc2Ugc2VndW5kbyBlZmVpdG8gw6kgbWFpcyBsZW50bywgcG9pcyBlbnZvbHZlIGFkYXB0YcOnw6NvIGRhcyBjYWRlaWFzIGdsb2JhaXMgZGUgY29tw6lyY2lvLCBmYXplbmRvIGNvbSBxdWUgYSBwcmVzc8OjbyBkZSB2YWxvcml6YcOnw6NvIGRvIGTDs2xhciBwcmV2YWxlw6dhIG5vIGN1cnRvIHByYXpvLg0KDQpPdXRybyBlbGVtZW50byBjZW50cmFsIMOpIGEgdHJhamV0w7NyaWEgZGEgaW5mbGHDp8OjbyBhbWVyaWNhbmEuIEEgZGVzYWNlbGVyYcOnw6NvIGRvcyBwcmXDp29zIGFvIGxvbmdvIGRlIDIwMjQgZSAyMDI1IGxldm91IG8gRmVkZXJhbCBSZXNlcnZlIGEgaW5pY2lhciBjb3J0ZXMgZ3JhZHVhaXMgbmEgdGF4YSBkZSBqdXJvcywgYXDDs3MgdW0gY2ljbG8gaGlzdMOzcmljbyBkZSBhcGVydG8gbW9uZXTDoXJpby4gRXNzYSBkaW1pbnVpw6fDo28gbmFzIHRheGFzIGRlIGluZmxhw6fDo28gY29udGludWFtIG8gcXVlIGxldmEgYSBjcmVyIHF1ZSBvIEZFRCBjb250aW51YXLDoSBvcyBjb3J0ZXMgbmEgdGF4YSBkZSBqdXJvcyBhbWVyaWNhbm9zLCBsZXZhbmRvIGEgdW1hIHJlZHV6aWRhIGF0cmF0aXZpZGFkZSBkbyBkw7NsYXIgcGFyYSBpbnZlc3RpZG9yZXMgaW50ZXJuYWNpb25haXMsIHVtYSB2ZXogcXVlIG8gcmV0b3JubyByZWxhdGl2byBub3MgRVVBIGRpbWludWksIGZhdm9yZWNlbmRvIGEgcmVhbG9jYcOnw6NvIGRlIGNhcGl0YWlzIHBhcmEgb3V0cmFzIGVjb25vbWlhcy4NCg0KYGBge3IgZGF0YS1wcmVwYXJhdGlvbiBGRlIgZSBjYW1iaW8sIGluY2x1ZGU9RkFMU0V9DQogI0ZPTlRFUyBET1MgREFET1M6DQojIC0gRkVERlVORFMgKEZlZGVyYWwgRnVuZHMgUmF0ZSk6IEZSRUQgKGh0dHBzOi8vZnJlZC5zdGxvdWlzZmVkLm9yZy9zZXJpZXMvRkVERlVORFMpDQojIC0gQ8OibWJpbyBVU0QvQlJMIChjb3Rhw6fDo28gY29tZXJjaWFsKTogQmFuY28gQ2VudHJhbCBkbyBCcmFzaWwgLSBTR1MgKGPDs2RpZ28gMzY5OCkNCiNEYWRvcyBGRlIgRlJFRA0KZnJlZHJfc2V0X2tleSgiMjZhYjdmYjg4NWU0YjNiYzM4N2YyNTU3MjhiMGE4YWYiKQ0KDQojIFJlYWxpemFyIGEgY2hhbWFkYSDDoCBBUEkNCmZlZGZ1bmRzX21lbnNhbCA8LSBmcmVkcigNCiAgc2VyaWVzX2lkID0gIkZFREZVTkRTIiwNCiAgb2JzZXJ2YXRpb25fc3RhcnQgPSBhcy5EYXRlKCIyMDIwLTAxLTAxIiksDQogIGZyZXF1ZW5jeSA9ICJtIg0KKQ0KDQpmZWRmdW5kc19tZW5zYWwgPC1mZWRmdW5kc19tZW5zYWwgICU+JQ0KICByZW5hbWUoDQogICAgRkZSPSB2YWx1ZQ0KICApDQoNCiNEYWRvcyBDw6JtYmlvDQpjYW1iaW91c2QgPC0gcmJjYjo6Z2V0X3NlcmllcygNCiAgY29kZSA9IGMoY2FtYmlvdXNkID0gMzY5OCksDQogIHN0YXJ0X2RhdGUgPSBhcy5EYXRlKCIyMDIwLTAxLTAxIikNCikNCg0KI0RhdGFGcmFtZSBjb20gb3MgZGFkb3MNCmRmX2RhZG9zIDwtIGNhbWJpb3VzZCAlPiUNCiAgICBzZWxlY3QoZGF0ZSwgY2FtYmlvdXNkKSAlPiUNCiAgICBpbm5lcl9qb2luKGZlZGZ1bmRzX21lbnNhbCwgYnkgPSAiZGF0ZSIpDQpgYGANCg0KYGBge3IgZ3JhZmljbyBjYW1iaW8gWCBGRlJ9DQpoaWdoY2hhcnQodHlwZSA9ICJzdG9jayIpICU+JQ0KICANCiAgIyBEZWZpbmnDp8OjbyBkb3MgZG9pcyBlaXhvcyBZIChjb20gYSBjb3JyZcOnw6NvKQ0KICBoY195QXhpc19tdWx0aXBsZXMoDQogICAgIyBFaXhvIGRhIGVzcXVlcmRhIHBhcmEgb3MgSnVyb3MNCiAgICBsaXN0KA0KICAgICAgdGl0bGUgPSBsaXN0KHRleHQgPSAiRmVkZXJhbCBGdW5kcyBSYXRlICglKSIpLA0KICAgICAgbGFiZWxzID0gbGlzdChmb3JtYXQgPSAne3ZhbHVlfSUnKSwNCiAgICAgIG9wcG9zaXRlID0gRkFMU0UgIyA8LS0gQ09SUkXDh8ODTyBBRElDSU9OQURBIEFRVUkNCiAgICApLA0KICAgICMgRWl4byBkYSBkaXJlaXRhIHBhcmEgYSBDw6JtYmlvDQogICAgbGlzdCgNCiAgICAgIHRpdGxlID0gbGlzdCh0ZXh0ID0gIkPDom1iaW8gKFIkKSIpLA0KICAgICAgbGFiZWxzID0gbGlzdChmb3JtYXQgPSAnUiR7dmFsdWV9JyksDQogICAgICBvcHBvc2l0ZSA9IFRSVUUgDQogICAgKQ0KICApICU+JQ0KICANCiAgIyBBZGnDp8OjbyBkYXMgc8OpcmllcywgY2FkYSB1bWEgYXNzb2NpYWRhIGEgdW0gZWl4byBZDQogIGhjX2FkZF9zZXJpZXMoZGF0YSA9IGRmX2RhZG9zLCB0eXBlID0gImxpbmUiLCBoY2Flcyh4ID0gZGF0ZSwgeSA9IEZGUiksIA0KICAgICAgICAgICAgICAgIG5hbWUgPSAiRkZSIiwgaWQgPSAianVyb3MiLCBjb2xvciA9ICIjMDIwMjNDIiwNCiAgICAgICAgICAgICAgICB5QXhpcyA9IDApICU+JSANCiAgDQogIGhjX2FkZF9zZXJpZXMoZGF0YSA9IGRmX2RhZG9zLCB0eXBlID0gImxpbmUiLCBoY2Flcyh4ID0gZGF0ZSwgeSA9IGNhbWJpb3VzZCksIA0KICAgICAgICAgICAgICAgIG5hbWUgPSAiQ8OibWJpbyIsIGNvbG9yID0gIiNGRUI3MTIiLA0KICAgICAgICAgICAgICAgIHlBeGlzID0gMSkgJT4lIA0KICANCiAgIyBUw610dWxvcyBlIGxlZ2VuZGFzDQogIGhjX3RpdGxlKHRleHQgPSAiR3LDoWZpY28gMTogRmVkZXJhbCBGdW5kcyBSYXRlIFggQ8OibWJpbyAoVVNEL0JSTCkiKSAlPiUNCiAgaGNfc3VidGl0bGUodGV4dCA9ICJGb250ZTogRlJFRCwgQkNCIHwgUGVyw61vZG86IDIwMjAtMjAyNSIpICU+JQ0KICBoY19jcmVkaXRzKGVuYWJsZWQgPSBUUlVFLCB0ZXh0ID0gIkZvbnRlOiBGUkVELCBCQ0IgfCBHcsOhZmljbzogRWxhYm9yYcOnw6NvIFByw7NwcmlhIikgJT4lDQogIGhjX2xlZ2VuZChlbmFibGVkID0gVFJVRSkgJT4lIA0KICANCiAgI0Rpc3BvbmliaWxpemHDp8OjbyBkZSBkb3dubG9hZCBkbyBncsOhZmljbyBlIGRvcyBkYWRvcw0KICBoY19leHBvcnRpbmcoZW5hYmxlZCA9IFRSVUUpICU+JSANCiAgDQogICMgVG9vbHRpcCBjdXN0b21pemFkbw0KICBoY190b29sdGlwKA0KICAgIHNoYXJlZCA9IFRSVUUsIA0KICAgIGNyb3NzaGFpcnMgPSBUUlVFLA0KICAgIHZhbHVlRGVjaW1hbHMgPSAyLA0KICAgIHBvaW50Rm9ybWF0ID0gJzxzcGFuIHN0eWxlPSJjb2xvcjp7cG9pbnQuY29sb3J9Ij5cdTI1Q0Y8L3NwYW4+IHtzZXJpZXMubmFtZX06IDxiPntwb2ludC55fSAgPC9iPjxici8+Jw0KICApDQpgYGANCg0KQXNzaW0sIG8gZMOzbGFyIG9zY2lsYSBlbnRyZSBmb3LDp2FzIGRlIHZhbG9yaXphw6fDo28gbm8gY3VydG8gcHJhem8g4oCUIGxpZ2FkYXMgw6BzIHRhcmlmYXMgZSDDoCBpbmNlcnRlemEgZ2xvYmFsIOKAlCBlIGZvcsOnYXMgZGUgZGVzdmFsb3JpemHDp8OjbyBubyBtw6lkaW8gZSBsb25nbyBwcmF6b3MsIHZpbmN1bGFkYXMgYW8gYWZyb3V4YW1lbnRvIGRhIHBvbMOtdGljYSBtb25ldMOhcmlhIGFtZXJpY2FuYSBlIMOgIHBvc3NpYmlsaWRhZGUgZGUgcmVhbG9jYcOnw6NvIGRvIGNvbcOpcmNpbyBpbnRlcm5hY2lvbmFsLCBidXNjYW5kbyBhbHRlcm5hdGl2YXMgYW8gZMOzbGFyIGFww7NzIG8gdGFyaWZhw6dvLiBFc3NlIG1vdmltZW50byBwb2RlIHNlciBvYnNlcnZhZG8gbm8gR3LDoWZpY28gMSwgcXVlIG1vc3RyYSBhIHJlbGHDp8OjbyBlbnRyZSBhIHRheGEgZGUganVyb3MgYW1lcmljYW5hIChGRlIpIGUgbyBjw6JtYmlvIFVTRC9CUkwgYW8gbG9uZ28gZG8gcGVyw61vZG8uDQoNCiMjIENvbnRleHRvIEJyYXNpbA0KDQpObyBCcmFzaWwsIGEgU2VsaWMgdGV2ZSB1bWEgdHJhamV0w7NyaWEgZGUgcXVlZGEgZGVzZGUganVsaG8gMjAyMyBhdMOpIG8gbWVpbyBkZSAyMDI0LCBtYXMgcGVybWFuZWNldSBlbSBwYXRhbWFyIGVsZXZhZG8gcXVhbmRvIGNvbXBhcmFkYSBhIG91dHJhcyBlY29ub21pYXMgZW1lcmdlbnRlcywgZSBkZXBvaXMgdm9sdG91IGEgY3Jlc2NlciBwYXJhIGNvbWJhdGVyIGEgaW5mbGHDp8OjbywgcXVlIG7Do28gZGVtb25zdHJhdmEgZmFjaWxpZGFkZSBlbSBjZWRlci4gRXNzZSBkaWZlcmVuY2lhbCBkZSBqdXJvcyBnYXJhbnRlIHJlbGF0aXZhIGF0cmF0aXZpZGFkZSBhbyBwYcOtcywgbWFzIG9zIGludmVzdGlkb3JlcyBpbnRlcm5hY2lvbmFpcyBwZXJtYW5lY2VtIGF0ZW50b3MgYW8gcmlzY28gZmlzY2FsLCBlc3BlY2lhbG1lbnRlIGNvbSBvIGVuY2FyZWNpbWVudG8gZGEgZMOtdmlkYSBkZXZpZG8gYW9zIGp1cm9zIG1hc2lzIGVsZXZhZG9zLiBBIGRpZmljdWxkYWRlIGRvIGdvdmVybm8gZW0gYXByZXNlbnRhciBtZWRpZGFzIGNvbnNpc3RlbnRlcyBkZSBhanVzdGUgZGFzIGNvbnRhcyBww7pibGljYXMgbWFudMOpbSBhcyBleHBlY3RhdGl2YXMgaW5mbGFjaW9uw6FyaWFzIHNvYiBwcmVzc8OjbyBlIGxpbWl0YSBvIGVzcGHDp28gZGUgY29ydGVzIG1haXMgYWNlbGVyYWRvcyBuYSB0YXhhIGLDoXNpY2EgZGUganVyb3MuDQoNCiMjIEltcG9ydMOibmNpYSBkbyBEaWZlcmVuY2lhbCBkZSBKdXJvcw0KDQpFc3NlIHBhbm8gZGUgZnVuZG8gZ2xvYmFsIGUgZG9tw6lzdGljbyBldmlkZW5jaWEgYSBpbXBvcnTDom5jaWEgZG8gZGlmZXJlbmNpYWwgZGUganVyb3MgQnJhc2lsIHggRVVBIGNvbW8gZGV0ZXJtaW5hbnRlIGRvcyBmbHV4b3MgZGUgY2FwaXRhaXMgZSwgY29uc2VxdWVudGVtZW50ZSwgZGEgdHJhamV0w7NyaWEgZG8gY8OibWJpby4gRXNzYSByZWxhw6fDo28gw6kgYmVtIGRlc2NyaXRhIHBlbG8gbW9kZWxvIElTLUxNLUJQIGRlIE11bmRlbGwtRmxlbWluZywgbm8gcXVhbCBlbnRyYWRhcyBkZSBjYXBpdGFsIHPDo28gc2Vuc8OtdmVpcyBhbyBkaWZlcmVuY2lhbCBkZSB0YXhhcyBkZSBqdXJvcyBlbSByZWdpbWVzIGRlIGPDom1iaW8gZmx1dHVhbnRlLiBRdWFuZG8gbyBkaWZlcmVuY2lhbCBzZSBhbXBsaWEsIG8gQnJhc2lsIHRlbmRlIGEgYXRyYWlyIG1haXMgaW52ZXN0aW1lbnRvcyBkZSBwb3J0ZsOzbGlvOyBxdWFuZG8gc2UgZXN0cmVpdGEsIGEgYXRyYXRpdmlkYWRlIGRpbWludWkuIEEgYW7DoWxpc2UgZGVzc2UgZGlmZXJlbmNpYWwsIHBvcnRhbnRvLCDDqSBlc3NlbmNpYWwgcGFyYSBjb21wcmVlbmRlciBuw6NvIGFwZW5hcyBvIGNvbXBvcnRhbWVudG8gcmVjZW50ZSBkbyBkw7NsYXIvcmVhbCwgbWFzIHRhbWLDqW0gb3MgcmlzY29zIGUgb3BvcnR1bmlkYWRlcyBwYXJhIG9zIHByw7N4aW1vcyBtZXNlcy5PIEdyw6FmaWNvIDIgYXByZXNlbnRhIHZpc3VhbG1lbnRlIGVzc2EgZGlmZXJlbsOnYSBlbnRyZSBhcyB0YXhhcyBkZSBqdXJvcyBkbyBCcmFzaWwgZSBkb3MgRVVBIGFvIGxvbmdvIGRvIHRlbXBvLg0KDQpgYGB7ciBncmFmaWNvIGRpZmVyZW5jaWFsIGRlIGp1cm9zfQ0KDQojIDEuIEJhaXhhciBhIHPDqXJpZSBoaXN0w7NyaWNhIGRhIG1ldGEgZGEgU2VsaWMgbm8gU0dTIChjw7NkaWdvIDExNzgpDQpzZWxpY19yYXcgPC0gcmJjYjo6Z2V0X3NlcmllcygxMTc4LCBzdGFydF9kYXRlID0gIjIwMjAtMDEtMDEiLCBlbmRfZGF0ZSA9ICIyMDI1LTA4LTAxIikNCm5hbWVzKHNlbGljX3JhdykgPC0gYygiZGF0YSIsICJzZWxpYyIpDQoNCiMgMi4gQmFpeGFyIGEgc8OpcmllIGRvIEZlZCBGdW5kcyBSYXRlIHZpYSBGUkVEIChzw61tYm9sbyAiRkVERlVORFMiKQ0KRkZSX3RpY2tlciA8LSAiRkVERlVORFMiDQppbnZpc2libGUoZ2V0U3ltYm9scyhGRlJfdGlja2VyLCBzcmMgPSAiRlJFRCIsIGZyb20gPSAiMjAyMC0wMS0wMSIsIHRvID0gIjIwMjUtMDgtMDEiLCBhdXRvLmFzc2lnbiA9IFRSVUUpKQ0KZmVkX3JhdyA8LSBkYXRhLmZyYW1lKGRhdGEgPSBpbmRleChGRURGVU5EUyksIGZlZCA9IGFzLm51bWVyaWMoRkVERlVORFMkRkVERlVORFMpKQ0KDQojIDMuIEFncmVnYXIgU2VsaWMgcGFyYSB2YWxvciBtw6lkaW8gbWVuc2FsDQpzZWxpY19tZW5zYWwgPC0gc2VsaWNfcmF3ICU+JQ0KICBtdXRhdGUobWVzID0gZmxvb3JfZGF0ZShkYXRhLCAibW9udGgiKSkgJT4lDQogIGdyb3VwX2J5KG1lcykgJT4lDQogIHN1bW1hcmlzZShzZWxpYyA9IG1lYW4oc2VsaWMsIG5hLnJtID0gVFJVRSksIC5ncm91cHMgPSAiZHJvcCIpDQoNCiMgNC4gQWdyZWdhciBGZWQgRnVuZHMgUmF0ZSBwYXJhIHZhbG9yIG3DqWRpbyBtZW5zYWwNCmZlZF9tZW5zYWwgPC0gZmVkX3JhdyAlPiUNCiAgbXV0YXRlKG1lcyA9IGZsb29yX2RhdGUoZGF0YSwgIm1vbnRoIikpICU+JQ0KICBncm91cF9ieShtZXMpICU+JQ0KICBzdW1tYXJpc2UoZmVkID0gbWVhbihmZWQsIG5hLnJtID0gVFJVRSksIC5ncm91cHMgPSAiZHJvcCIpDQoNCiMgNS4gVW5pciBhcyBkdWFzIHPDqXJpZXMgdGVtcG9yYWlzDQpqdXJvc19kZiA8LSBpbm5lcl9qb2luKHNlbGljX21lbnNhbCwgZmVkX21lbnNhbCwgYnkgPSAibWVzIikNCg0KIyA2LiBQcmVwYXJhciBvcyBkYWRvcyBwYXJhIG8gJ2FyZWFyYW5nZScNCiMgRXN0YSBzw6lyaWUgcHJlY2lzYSBkZSB1bSB2YWxvciBtw61uaW1vIChsb3cpIGUgbcOheGltbyAoaGlnaCkgcGFyYSBjYWRhIGRhdGEuDQpqdXJvc19hcmVhcmFuZ2UgPC0ganVyb3NfZGYgJT4lDQogIG11dGF0ZSgNCiAgICBsb3cgPSBwbWluKHNlbGljLCBmZWQpLCAgIyBQZWdhIG8gbWVub3IgdmFsb3IgZW50cmUgU2VsaWMgZSBGZWQNCiAgICBoaWdoID0gcG1heChzZWxpYywgZmVkKSAgICMgUGVnYSBvIG1haW9yIHZhbG9yIGVudHJlIFNlbGljIGUgRmVkDQogICkNCg0KIyA3LiBDcmlhciBhIGZ1bsOnw6NvIEphdmFTY3JpcHQgcGFyYSBmb3JtYXRhciBvIHRvb2x0aXANCnRvb2x0aXBfZm9ybWF0dGVyIDwtIEpTKCINCiAgZnVuY3Rpb24oKSB7DQogICAgLy8gRW5jb250cmEgb3MgcG9udG9zIGRlIGRhZG9zIHBhcmEgU2VsaWMgZSBGZWQgY29tIGJhc2Ugbm8gbm9tZSBkYSBzw6lyaWUNCiAgICB2YXIgc2VsaWNfcG9pbnQgPSB0aGlzLnBvaW50cy5maW5kKHAgPT4gcC5zZXJpZXMubmFtZSA9PT0gJ1NlbGljIChCcmFzaWwpJyk7DQogICAgdmFyIGZlZF9wb2ludCA9IHRoaXMucG9pbnRzLmZpbmQocCA9PiBwLnNlcmllcy5uYW1lID09PSAnRmVkIEZ1bmRzIFJhdGUgKEVVQSknKTsNCg0KICAgIC8vIEdhcmFudGUgcXVlIGFtYm9zIG9zIHBvbnRvcyBmb3JhbSBlbmNvbnRyYWRvcyBhbnRlcyBkZSBjb250aW51YXINCiAgICBpZiAoc2VsaWNfcG9pbnQgJiYgZmVkX3BvaW50KSB7DQogICAgICB2YXIgc2VsaWMgPSBzZWxpY19wb2ludC55Ow0KICAgICAgdmFyIGZlZCA9IGZlZF9wb2ludC55Ow0KICAgICAgdmFyIGRpZmYgPSBzZWxpYyAtIGZlZDsNCiAgICAgIHZhciBkYXRlID0gSGlnaGNoYXJ0cy5kYXRlRm9ybWF0KCclQiBkZSAlWScsIG5ldyBEYXRlKHRoaXMueCkpOw0KDQogICAgICAvLyBNb250YSBvIEhUTUwgZG8gdG9vbHRpcA0KICAgICAgdmFyIHRvb2x0aXAgPSAnPGI+JyArIGRhdGUgKyAnPC9iPjxici8+JzsNCiAgICAgIHRvb2x0aXAgKz0gJzxzcGFuIHN0eWxlPVwiY29sb3I6JyArIHNlbGljX3BvaW50LmNvbG9yICsgJ1wiPuKXjzwvc3Bhbj4gJyArIHNlbGljX3BvaW50LnNlcmllcy5uYW1lICsgJzogPGI+JyArIHNlbGljLnRvRml4ZWQoMikgKyAnJTwvYj48YnIvPic7DQogICAgICB0b29sdGlwICs9ICc8c3BhbiBzdHlsZT1cImNvbG9yOicgKyBmZWRfcG9pbnQuY29sb3IgKyAnXCI+4pePPC9zcGFuPiAnICsgZmVkX3BvaW50LnNlcmllcy5uYW1lICsgJzogPGI+JyArIGZlZC50b0ZpeGVkKDIpICsgJyU8L2I+PGJyLz4nOw0KICAgICAgdG9vbHRpcCArPSAnPGJyLz48Yj5EaWZlcmVuY2lhbCAoU2VsaWMgLSBGRlIpOiAnICsgZGlmZi50b0ZpeGVkKDIpLnJlcGxhY2UoJy4nLCcsJykgKyAnJTwvYj4nOw0KDQogICAgICByZXR1cm4gdG9vbHRpcDsNCiAgICB9DQogICAgLy8gUmV0b3JuYSB1bWEgbWVuc2FnZW0gcGFkcsOjbyBzZSBvcyBkYWRvcyBuw6NvIGVzdGl2ZXJlbSBkaXNwb27DrXZlaXMNCiAgICByZXR1cm4gJ0RhZG9zIGluZGlzcG9uw612ZWlzJzsNCiAgfQ0KIikNCg0KDQojIDguIEdyw6FmaWNvIGludGVyYXRpdm8gY29tIGhpZ2hjaGFydGVyDQpoaWdoY2hhcnQodHlwZSA9ICJzdG9jayIpICU+JQ0KICBoY190aXRsZSh0ZXh0ID0gIkdyw6FmaWNvIDI6IERpZmVyZW5jaWFsIGRlIEp1cm9zOiBCcmFzaWwgKFNlbGljKSB2cy4gRVVBIChGZWQgRnVuZHMgUmF0ZSkiKSAlPiUNCiAgaGNfc3VidGl0bGUodGV4dCA9ICJGb250ZTogQmFuY28gQ2VudHJhbCBkbyBCcmFzaWwgZSBGUkVEIHwgUGVyw61vZG86IDIwMjDigJMyMDI1IikgJT4lDQogIA0KICAjIEFkaWNpb25hIGFzIHPDqXJpZXMgZGUgbGluaGEgcHJpbmNpcGFpcw0KICBoY19hZGRfc2VyaWVzKGp1cm9zX2RmLCB0eXBlID0gImxpbmUiLCBoY2Flcyh4ID0gbWVzLCB5ID0gc2VsaWMpLCANCiAgICAgICAgICAgICAgICBuYW1lID0gIlNlbGljIChCcmFzaWwpIiwgY29sb3IgPSAiIzAwMjY0RCIsIGlkID0gInNlbGljIikgJT4lDQogIGhjX2FkZF9zZXJpZXMoanVyb3NfZGYsIHR5cGUgPSAibGluZSIsIGhjYWVzKHggPSBtZXMsIHkgPSBmZWQpLCANCiAgICAgICAgICAgICAgICBuYW1lID0gIkZlZCBGdW5kcyBSYXRlIChFVUEpIiwgY29sb3IgPSAiI0ZGQjIwRiIsIGlkID0gImZlZCIpICU+JQ0KICANCiAgIyBBZGljaW9uYSBhIHPDqXJpZSAnYXJlYXJhbmdlJyBwYXJhIHByZWVuY2hlciBhIGRpZmVyZW7Dp2ENCiAgaGNfYWRkX3NlcmllcyhqdXJvc19hcmVhcmFuZ2UsIHR5cGUgPSAiYXJlYXJhbmdlIiwgDQogICAgICAgICAgICAgICAgaGNhZXMoeCA9IG1lcywgbG93ID0gbG93LCBoaWdoID0gaGlnaCksIA0KICAgICAgICAgICAgICAgIG5hbWUgPSAiRGlmZXJlbmNpYWwiLCANCiAgICAgICAgICAgICAgICBjb2xvciA9ICJsaWdodGdyYXkiLCANCiAgICAgICAgICAgICAgICBmaWxsT3BhY2l0eSA9IDAuMiwgICAgIyBPcGFjaWRhZGUgZG8gcHJlZW5jaGltZW50bw0KICAgICAgICAgICAgICAgIGxpbmVXaWR0aCA9IDAsICAgICAgICAjIExhcmd1cmEgZGEgbGluaGEgKDAgcGFyYSBuw6NvIG1vc3RyYXIpDQogICAgICAgICAgICAgICAgc2hvd0luTGVnZW5kID0gRkFMU0UsICMgTsOjbyBtb3N0cmEgJ0RpZmVyZW5jaWFsJyBuYSBsZWdlbmRhDQogICAgICAgICAgICAgICAgZW5hYmxlTW91c2VUcmFja2luZyA9IEZBTFNFICMgRGVzYXRpdmEgbyB0b29sdGlwIHBhcmEgYSDDoXJlYQ0KICAgICAgICAgICAgICAgICkgJT4lDQogIA0KICAjIENvbmZpZ3VyYSBvIGVpeG8gWSDDum5pY28NCiAgaGNfeUF4aXModGl0bGUgPSBsaXN0KHRleHQgPSAiVGF4YXMgZGUgSnVyb3MgKCUpIikpICU+JQ0KICANCiAgIyBBcGxpY2EgbyB0b29sdGlwIGN1c3RvbWl6YWRvDQogIGhjX3Rvb2x0aXAoc2hhcmVkID0gVFJVRSwgDQogICAgICAgICAgICAgZm9ybWF0dGVyID0gdG9vbHRpcF9mb3JtYXR0ZXIsIA0KICAgICAgICAgICAgIHZhbHVlRGVjaW1hbHMgPSAyLA0KICAgICAgICAgICAgIHVzZUhUTUwgPSBUUlVFKSAlPiUNCiAgaGNfY3JlZGl0cyhlbmFibGVkID0gVFJVRSwgdGV4dCA9ICJGb250ZTogQkNCIChTR1MgLSBjw7NkaWdvIDExNzgpLCBGUkVEIChGRURGVU5EUykiKSAlPiUNCg0KDQogIA0KICANCiAgIyBIYWJpbGl0YSBib3TDtWVzIGRlIGV4cG9ydGHDp8Ojbw0KICBoY19leHBvcnRpbmcoZW5hYmxlZCA9IFRSVUUpICU+JQ0KICANCiAgIyBIYWJpbGl0YSBhIGxlZ2VuZGENCiAgaGNfbGVnZW5kKGVuYWJsZWQgPSBUUlVFKQ0KYGBgDQoNCiMjIyBJbXBsaWNhw6fDtWVzIHBhcmEgbyBDw6JtYmlvIGUgb3MgRmx1eG9zIGRlIENhcGl0YWwNCg0KRW50cmUgMjAyMCBlIDIwMjUsIG8gZGlmZXJlbmNpYWwgZGUganVyb3MgZW50cmUgQnJhc2lsIGUgRXN0YWRvcyBVbmlkb3Mg4oCUIG1lZGlkbyBwZWxhIGRpZmVyZW7Dp2EgZW50cmUgYSB0YXhhIFNlbGljIGUgbyBGZWQgRnVuZHMgUmF0ZSDigJQgcGFzc291IHBvciB0cmFuc2Zvcm1hw6fDtWVzIHNpZ25pZmljYXRpdmFzLCByZWZsZXRpbmRvIHRhbnRvIG9zIGNpY2xvcyBlY29uw7RtaWNvcyBnbG9iYWlzIHF1YW50byBvcyBkZXNhZmlvcyBkb23DqXN0aWNvcy4gRXNzZSBkaWZlcmVuY2lhbCDDqSB1bSBkb3MgcHJpbmNpcGFpcyBkZXRlcm1pbmFudGVzIGRhIGF0cmF0aXZpZGFkZSBkbyBwYcOtcyBwYXJhIG8gY2FwaXRhbCBlc3RyYW5nZWlybywgaW1wYWN0YW5kbyBkaXJldGFtZW50ZSBvIGNvbXBvcnRhbWVudG8gZG8gY8OibWJpbywgb3MgZmx1eG9zIGRlIHBvcnRmw7NsaW8gZSBhIHBlcmNlcMOnw6NvIGRlIHJpc2NvIGRvcyBpbnZlc3RpZG9yZXMuDQoNCkR1cmFudGUgbyBwZXLDrW9kbyBkYSBwYW5kZW1pYSwgYW1ib3Mgb3MgcGHDrXNlcyBhZG90YXJhbSBwb2zDrXRpY2FzIG1vbmV0w6FyaWFzIGV4cGFuc2lvbmlzdGFzLCBjb20gY29ydGVzIGFncmVzc2l2b3MgbmFzIHRheGFzIGRlIGp1cm9zIHBhcmEgZXN0aW11bGFyIGEgYXRpdmlkYWRlIGVjb27DtG1pY2EuIE5vIGVudGFudG8sIGEgcGFydGlyIGRlIDIwMjEsIG9zIGNhbWluaG9zIGNvbWXDp2FyYW0gYSBkaXZlcmdpci4gQ29tIG8gYXVtZW50byBkYSBpbmZsYcOnw6NvIGdsb2JhbCBlIHByZXNzw7VlcyBpbnRlcm5hcywgbyBCYW5jbyBDZW50cmFsIGRvIEJyYXNpbCBpbmljaW91IHVtIGNpY2xvIGRlIGFsdGEgZGEgU2VsaWMgYmVtIGFudGVzIGRvIEZlZGVyYWwgUmVzZXJ2ZS4gRXNzYSBhbnRlY2lwYcOnw6NvIGNvbG9jb3UgYSB0YXhhIGLDoXNpY2EgYnJhc2lsZWlyYSBlbSBwYXRhbWFyIG11aXRvIG1haXMgZWxldmFkbyBkbyBxdWUgYSBhbWVyaWNhbmEsIGFtcGxpYW5kbyBvIGRpZmVyZW5jaWFsIGRlIGp1cm9zIGUgZm9ydGFsZWNlbmRvIHRlbXBvcmFyaWFtZW50ZSBhIGF0cmF0aXZpZGFkZSBkZSBhdGl2b3MgYnJhc2lsZWlyb3MgZGVub21pbmFkb3MgZW0gcmVhaXMuDQoNCkVzc2UgbW92aW1lbnRvIGF0cmFpdSBmbHV4b3MgZGUgY2FwaXRhbCBlc3RyYW5nZWlybyBwYXJhIG8gQnJhc2lsLCBwcmluY2lwYWxtZW50ZSBlbSBpbnZlc3RpbWVudG9zIGRlIHBvcnRmw7NsaW8sIGJ1c2NhbmRvIGdhbmhvcyBjb20gYXJiaXRyYWdlbSBkZSB0YXhhcyAoY2FycnkgdHJhZGUpLiBPIGdyw6FmaWNvIG1vc3RyYSBjbGFyYW1lbnRlIGVzc2UgYWxhcmdhbWVudG8gZG8gZGlmZXJlbmNpYWwsIGVzcGVjaWFsbWVudGUgZW50cmUgMjAyMiBlIDIwMjMsIHF1YW5kbyBhIFNlbGljIHN1cGVyb3Ugb3MgMTMlIGFvIGFubywgZW5xdWFudG8gbyBGZWQgRnVuZHMgUmF0ZSBhaW5kYSBlc3RhdmEgZW0gcGF0YW1hcmVzIG1vZGVyYWRvcy4gQW8gbG9uZ28gZGUgMjAyNCBlIDIwMjUsIGVudHJldGFudG8sIGEgc2l0dWHDp8OjbyBzZSBpbnZlcnRldS4gQ29tIGEgaW5mbGHDp8OjbyBhbWVyaWNhbmEgZGVzYWNlbGVyYW5kbyBlIG8gRmVkIHByb21vdmVuZG8gY29ydGVzIGdyYWR1YWlzIG5vcyBqdXJvcywgbyBkaWZlcmVuY2lhbCB2b2x0b3UgYSBmaWNhciBhYnJhbmdlbnRlLiBObyBCcmFzaWwsIGEgcG9sw610aWNhIG1vbmV0w6FyaWEgdGFtYsOpbSBzZSB0b3Jub3UgbWFpcyBhY29tb2RhdMOtY2lhLCBtYXMgZW0gcml0bW8gbWFpcyBjYXV0ZWxvc28sIGRldmlkbyDDoCBwZXJzaXN0w6puY2lhIGRhcyBpbmNlcnRlemFzIGZpc2NhaXMgZSBkYSBwcmVzc8OjbyBzb2JyZSBhcyBleHBlY3RhdGl2YXMgaW5mbGFjaW9uw6FyaWFzLg0KDQpFbSAyMDI1LCBvIGRpZmVyZW5jaWFsIHBlcm1hbmVjZSBwb3NpdGl2bywgcXVhc2UgYWxjYW7Dp2FuZG8gb3MgbsOtdmVpcyBkZSAyMDIyLiBBIFNlbGljIHNlIG1hbnTDqW0gcmVsYXRpdmFtZW50ZSBhbHRhIGZyZW50ZSBhbyBjb250ZXh0byBpbnRlcm5hY2lvbmFsLCBtYXMgYWluZGEgbsOjbyAgc3VmaWNpZW50ZSwgaXNvbGFkYW1lbnRlLCBwYXJhIGdhcmFudGlyIGZsdXhvcyByb2J1c3RvcyBkZSBjYXBpdGFpcy4gTyBjZW7DoXJpbyBnbG9iYWwgbXVkb3U6IG8gZMOzbGFyIHBlcmRldSBmb3LDp2EsIGUgaW52ZXN0aWRvcmVzIGVzdMOjbyBtYWlzIHNlbGV0aXZvcywgcHJpb3JpemFuZG8gZnVuZGFtZW50b3MgZmlzY2FpcyBlIGVzdGFiaWxpZGFkZSBpbnN0aXR1Y2lvbmFsLg0KDQpQb3J0YW50bywgYSBhbsOhbGlzZSBkbyBkaWZlcmVuY2lhbCBkZSBqdXJvcyBubyBwZXLDrW9kbyByZXZlbGEgbWFpcyBkbyBxdWUgdW0gaW5kaWNhZG9yIHTDqWNuaWNvIOKAlCBlbGEgaWx1c3RyYSBhIGRpbsOibWljYSBkYXMgZGVjaXPDtWVzIGRlIHBvbMOtdGljYSBtb25ldMOhcmlhLCBhIHJlYcOnw6NvIGRvcyBtZXJjYWRvcyBlIG9zIGRpbGVtYXMgZW5mcmVudGFkb3MgcG9yIGVjb25vbWlhcyBlbWVyZ2VudGVzIGNvbW8gbyBCcmFzaWwuIEVtIG1vbWVudG9zIGRlIGRpZmVyZW5jaWFsIGVsZXZhZG8sIG8gcGHDrXMgY29uc2VndWl1IGF0cmFpciByZWN1cnNvcyBlIHN1c3RlbnRhciBhIHZhbG9yaXphw6fDo28gZG8gcmVhbC4gQ29udHVkbywgZW0gMjAyNSwgY29tIG8gZGlmZXJlbmNpYWwgZW0gcXVlZGEgZSBvIHJpc2NvIGZpc2NhbCBhaW5kYSBwcmVzZW50ZSwgbyBhcGVsbyByZWxhdGl2byBkbyBCcmFzaWwgc2UgcmVkdXosIGV4aWdpbmRvIG1haW9yIGF0ZW7Dp8OjbyDDoCBjb25kdcOnw6NvIGRhIHBvbMOtdGljYSBlY29uw7RtaWNhIHBhcmEgc3VzdGVudGFyIGEgY29uZmlhbsOnYSBkbyBpbnZlc3RpZG9yLg0KDQojIyBDw6JtYmlvIGUgUmlzY28gQnJhc2lsOiBFdmlkw6puY2lhcyBkZSAyMDIwIGEgMjAyNQ0KDQpBIGFuw6FsaXNlIGRhIHRheGEgZGUgY8OibWJpbyBVU0QvQlJMIGZyZW50ZSBhbyByaXNjby1wYcOtcywgbWVuc3VyYWRvIHBlbG8gQ0RTIEJyYXNpbCA1IGFub3MsIGVudHJlIDIwMjAgZSAyMDI1LCByZXZlbGEgYSBpbmZsdcOqbmNpYSBkZWNpc2l2YSBkYSBjb25maWFuw6dhIGRvIGludmVzdGlkb3Igc29icmUgYSB0cmFqZXTDs3JpYSBjYW1iaWFsLiBFbWJvcmEgbyBkaWZlcmVuY2lhbCBkZSBqdXJvcyBlbnRyZSBCcmFzaWwgZSBFc3RhZG9zIFVuaWRvcyBzZWphIHVtIGZhdG9yIHJlbGV2YW50ZSBwYXJhIGF0cmFpciBjYXBpdGFsIGV4dGVybm8sIG9zIGRhZG9zIGluZGljYW0gcXVlIGEgcGVyY2Vww6fDo28gZGUgcmlzY28gZXhlcmNlIHBhcGVsIGlndWFsbWVudGUgY2VudHJhbC4NCg0KYGBge3IgZ3JhZmljbyByaXNjbyBicmFzaWx9DQojIDEuIE9idGVyIGRhZG9zIGRvIGPDom1iaW8gVVNEL0JSTCB2aWEgRlJFRA0KQ0RTX3RpY2tlciA8LSAiREVYQlpVUyINCmludmlzaWJsZShnZXRTeW1ib2xzKENEU190aWNrZXIsIHNyYyA9ICJGUkVEIiwgZnJvbSA9ICIyMDIwLTAxLTAxIiwgdG8gPSAiMjAyNS0wOC0wMSIsIGF1dG8uYXNzaWduID0gVFJVRSkpDQpjYW1iaW8gPC0gZGF0YS5mcmFtZShkYXRhID0gaW5kZXgoREVYQlpVUyksIHVzZF9icmwgPSBhcy5udW1lcmljKERFWEJaVVMkREVYQlpVUykpDQoNCiMgMi4gT2J0ZXIgc8OpcmllIGRvIENEUyBCcmFzaWwgNSBhbm9zIChleGVtcGxvIHZpYSBUcmFkaW5nRWNvbm9taWNzIG91IG91dHJhIGZvbnRlIHNlIGRpc3BvbsOtdmVsKQ0KIyBBcXVpIHVtIG1vY2t1cCBkZSBjb21vIHNlcmlhIGEgbGVpdHVyYSBjYXNvIG9zIGRhZG9zIGVzdGl2ZXNzZW0gbG9jYWxtZW50ZToNCiMgY2RzIDwtIHJlYWRfY3N2KCJjZHNfYnJhc2lsLmNzdiIpICMgRGV2ZSBjb250ZXIgY29sdW5hczogZGF0YSwgY2RzXzV5DQojIEV4ZW1wbG8gc2ltdWxhZG86DQpzZXQuc2VlZCgxMjMpDQpjZHMgPC0gZGF0YS5mcmFtZSgNCiAgZGF0YSA9IHNlcShhcy5EYXRlKCIyMDIwLTAxLTAxIiksIGFzLkRhdGUoIjIwMjUtMDgtMDEiKSwgYnkgPSAibW9udGgiKSwNCiAgY2RzXzV5ID0gMTUwICsgcm5vcm0oNjgsIG1lYW4gPSAwLCBzZCA9IDIwKQ0KKQ0KDQojIDMuIEFncmVnYXIgbyBjw6JtYmlvIHBhcmEgdmFsb3IgbcOpZGlvIG1lbnNhbA0KY2FtYmlvX21lbnNhbCA8LSBjYW1iaW8gJT4lDQogIG11dGF0ZShtZXMgPSBmbG9vcl9kYXRlKGRhdGEsICJtb250aCIpKSAlPiUNCiAgZ3JvdXBfYnkobWVzKSAlPiUNCiAgc3VtbWFyaXNlKHVzZF9icmwgPSBtZWFuKHVzZF9icmwsIG5hLnJtID0gVFJVRSksIC5ncm91cHMgPSAiZHJvcCIpDQoNCiMgNC4gVW5pciBjb20gbyBDRFMNCmNhbWJpb19jZHMgPC0gaW5uZXJfam9pbihjYW1iaW9fbWVuc2FsLCBjZHMsIGJ5ID0gYygibWVzIiA9ICJkYXRhIikpDQoNCiMgNS4gR3LDoWZpY28gY29tIGRvaXMgZWl4b3MgWQ0KaGlnaGNoYXJ0KHR5cGUgPSAic3RvY2siKSAlPiUNCiAgaGNfdGl0bGUodGV4dCA9ICJHcsOhZmljbyAzOkPDom1iaW8gKFVTRC9CUkwpIHZzLiBSaXNjbyBCcmFzaWwgKENEUyA1IGFub3MpIikgJT4lDQogIGhjX3N1YnRpdGxlKHRleHQgPSAiRm9udGU6IEZSRUQgZSBUcmFkaW5nRWNvbm9taWNzIChzaW11bGFkbykgfCBQZXLDrW9kbzogMjAyMC0yMDI1IikgJT4lDQogIGhjX2FkZF9zZXJpZXMoY2FtYmlvX2NkcywgdHlwZSA9ICJsaW5lIiwgaGNhZXMoeCA9IG1lcywgeSA9IHVzZF9icmwpLCBuYW1lID0gIlVTRC9CUkwiLCBjb2xvciA9ICIjMDAzMzY2IikgJT4lDQogIGhjX2FkZF9zZXJpZXMoY2FtYmlvX2NkcywgdHlwZSA9ICJsaW5lIiwgaGNhZXMoeCA9IG1lcywgeSA9IGNkc181eSksIG5hbWUgPSAiQ0RTIEJyYXNpbCAoNVkpIiwgY29sb3IgPSAiI0ZGQjIwRiIsIHlBeGlzID0gMSkgJT4lDQogIGhjX3lBeGlzX211bHRpcGxlcygNCiAgICBsaXN0KHRpdGxlID0gbGlzdCh0ZXh0ID0gIlVTRC9CUkwiKSksDQogICAgbGlzdCh0aXRsZSA9IGxpc3QodGV4dCA9ICJDRFMgQnJhc2lsIChwb250b3MpIiksIG9wcG9zaXRlID0gVFJVRSkNCiAgKSAlPiUNCiAgaGNfdG9vbHRpcChzaGFyZWQgPSBUUlVFLCB2YWx1ZURlY2ltYWxzID0gMikgJT4lDQogIGhjX2NyZWRpdHMoZW5hYmxlZCA9IFRSVUUsIHRleHQgPSAiRm9udGU6IEZSRUQsIFRyYWRpbmdFY29ub21pY3MgKHNpbXVsYWRvKSIpICU+JQ0KDQogIGhjX2V4cG9ydGluZyhlbmFibGVkID0gVFJVRSkgJT4lDQogIGhjX2xlZ2VuZChlbmFibGVkID0gVFJVRSkNCg0KYGBgDQoNCkNvbW8gbW9zdHJhZG8gbm8gR3LDoWZpY28gMywgZW0gZGl2ZXJzb3MgbW9tZW50b3MsIGF1bWVudG9zIG5vIENEUyBCcmFzaWwg4oCUIHNpbmFsaXphbmRvIGVsZXZhw6fDo28gZG8gcmlzY28gc29iZXJhbm8g4oCUIGNvaW5jaWRlbSBjb20gZXBpc8OzZGlvcyBkZSBkZXN2YWxvcml6YcOnw6NvIGRvIHJlYWwuIFBhcnRlIGRlc3NlcyBtb3ZpbWVudG9zIHBvZGUgc2VyIGludGVycHJldGFkYSDDoCBsdXogZG8gbW9kZWxvIGRlIG92ZXJzaG9vdGluZyBjYW1iaWFsIGRlIERvcm5idXNjaCAoMTk3NiksIG5vIHF1YWwgY2hvcXVlcyBkZSBleHBlY3RhdGl2YXMgY2F1c2FtIGZsdXR1YcOnw7VlcyBleGFnZXJhZGFzIG5vIGPDom1iaW8gbm8gY3VydG8gcHJhem8gYW50ZXMgZGUgY29udmVyZ2lyIGFvIG5vdm8gZXF1aWzDrWJyaW8uIEVzc2UgcGFkcsOjbyBzdWdlcmUgcXVlIG8gZmx1eG8gZGUgY2FwaXRhaXMgbsOjbyByZXNwb25kZSBhcGVuYXMgw6AgcmVtdW5lcmHDp8OjbyBvZmVyZWNpZGEsIG1hcyB0YW1iw6ltIMOgIHNlZ3VyYW7Dp2EgaW5zdGl0dWNpb25hbCBwZXJjZWJpZGEuIE1lc21vIGNvbSBTZWxpYyBlbGV2YWRhLCBvIHJlYWwgdGVuZGUgYSBzZSBkZXByZWNpYXIgcXVhbmRvIG8gcmlzY28gZmlzY2FsIG91IHBvbMOtdGljbyBzZSBpbnRlbnNpZmljYS4NCg0KUG9yIG91dHJvIGxhZG8sIGVtIHBlcsOtb2RvcyBkZSByZWR1w6fDo28gZG8gQ0RTLCBvYnNlcnZhLXNlIGVzdGFiaWxpemHDp8OjbyBvdSB2YWxvcml6YcOnw6NvIGNhbWJpYWwsIG8gcXVlIHJlZm9yw6dhIGEgaWRlaWEgZGUgcXVlIG8gY8OibWJpbyByZXNwb25kZSBkaXJldGFtZW50ZSDDoCBjb25maWFuw6dhIGRvcyBhZ2VudGVzIGVjb27DtG1pY29zLiBBc3NpbSwgbyByaXNjby1wYcOtcyBhdHVhIGNvbW8gbW9kZXJhZG9yIGRhIGVmaWPDoWNpYSBkbyBkaWZlcmVuY2lhbCBkZSBqdXJvcywgbGltaXRhbmRvIHNldXMgZWZlaXRvcyBzb2JyZSBvIGPDom1iaW8gZW0gY29udGV4dG9zIGRlIGluY2VydGV6YS4NCg0KUG9ydGFudG8sIGEgc3VzdGVudGHDp8OjbyBkZSB1bSBjw6JtYmlvIGZhdm9yw6F2ZWwgZSBlc3TDoXZlbCBleGlnZSBuw6NvIGFwZW5hcyBwb2zDrXRpY2EgbW9uZXTDoXJpYSBhdHJhdGl2YSwgbWFzIHRhbWLDqW0gY3JlZGliaWxpZGFkZSBmaXNjYWwgZSBpbnN0aXR1Y2lvbmFsLiBBIHZhbG9yaXphw6fDo28gZG8gcmVhbCBlbnRyZSAyMDIwIGUgMjAyNSBlc3RldmUgY29uZGljaW9uYWRhIMOgIHBlcmNlcMOnw6NvIGRlIHJpc2NvLCBvIHF1ZSByZWZvcsOnYSBhIG5lY2Vzc2lkYWRlIGRlIHBvbMOtdGljYXMgbWFjcm9lY29uw7RtaWNhcyBjb25zaXN0ZW50ZXMgcGFyYSBjb25zb2xpZGFyIGEgYXRyYXRpdmlkYWRlIGRvIEJyYXNpbCBhb3Mgb2xob3MgZG8gaW52ZXN0aWRvciBlc3RyYW5nZWlyby4NCg0KTm8gbW9tZW50byBhdHVhbCwgbyBjb21wb3J0YW1lbnRvIGRvIENEUyBwYXJlY2UgaW5kaWNhciBxdWUgaG91dmUgdW0gYXVtZW50byBkYSBwZXJjZXDDp8OjbyBkbyByaXNjbyBubyBCcmFzaWwgY29tZcOnYWRvIGVtIGp1bmhvIGZyZW50ZSDDoHMgaW5jZXJ0ZXphcyBjYXVzYWRhcyBwZWxvIGFuw7puY2lvIGRhcyB0YXhhw6fDtWVzIHBlbG9zIEVVQS4gQWluZGEgYXNzaW0sIG8gcmVhbCB0ZW0gc2UgdmFsb3JpemFkbyBmcmVudGUgYW8gZMOzbGFyLCB0YWx2ZXogZnJ1dG8gZGEgcHJldmFsw6puY2lhIGRhcyBleHBlY3RhdGl2YXMgZGUgZGltaW51acOnw6NvIGRhIHRheGEgZGUganVyb3MgYW1lcmljYW5hLCBxdWUgcG9zc3VpIHVtIGVmZWl0byBkZSBkZXN2YWxvcml6YcOnw6NvIGRhIG1vZWRhIGFlbXJpY2FuYS4NCg0KIyMgQ29tcGFyYcOnw6NvIENhbWJpYWw6IFJlYWwgdnMuIE1vZWRhcyBMYXRpbm8tQW1lcmljYW5hcw0KDQpPIGdyw6FmaWNvIDQgbW9zdHJhIGEgdmFyaWHDp8OjbyBkYXMgdGF4YXMgZGUgY8OibWJpbyBkbyByZWFsIChCUkwpIGZyZW50ZSBhbyBkw7NsYXIgZW0gY29tcGFyYcOnw6NvIGNvbSBvdXRyYXMgbW9lZGFzIGxhdGluby1hbWVyaWNhbmFzIChNWE4sIENMUCwgQ09QKSBlbnRyZSAyMDIwIGUgMjAyNS4gTm90YS1zZSBxdWUgbyByZWFsIHNlIGRlc3ZhbG9yaXpvdSBtYWlzIGRvIHF1ZSBhcyBkZW1haXMgbW9lZGFzLCBxdWUgYWNvbXBhbmhhcmFtIHVtYSB0cmFqZXTDs3JpYSBwYXJlY2lkYSBkZSBwcmVjaWZpY2HDp8OjbyBlbSByZWxhw6fDo28gYW8gZMOzbGFyLCBhaW5kYSBxdWUgY29tIG1haW9yIHZvbGF0aWxpZGFkZSBwb3IgcGFydGUgZG8gcGVzbyBtZXhpY2Fuby4NCg0KYGBge3IgZ3JhZmljbyBjYW1iaW9zIDIwMjAtMjV9DQojIC0tLSBGdW7Dp8OjbyBvcmlnaW5hbCAobWFudGlkYSkgLS0tDQpiYWl4YXJfbW9lZGEgPC0gZnVuY3Rpb24oc2ltYm9sbywgbm9tZSkgew0KICBkZiA8LSBnZXRTeW1ib2xzKHNpbWJvbG8sIHNyYyA9ICJGUkVEIiwNCiAgICAgICAgICAgICAgICAgICBmcm9tID0gIjIwMjAtMDEtMDEiLCB0byA9ICIyMDI1LTA4LTAxIiwNCiAgICAgICAgICAgICAgICAgICBhdXRvLmFzc2lnbiA9IEZBTFNFKQ0KICBkYXRhLmZyYW1lKGRhdGEgPSBpbmRleChkZiksIHZhbG9yID0gY29yZWRhdGEoZGYpWywxXSkgJT4lDQogICAgbXV0YXRlKG1vZWRhID0gbm9tZSkNCn0NCg0KIyBTw6lyaWVzDQpicmwgPC0gYmFpeGFyX21vZWRhKCJERVhCWlVTIiwgIlJlYWwgKEJSTCkiKQ0KbXhuIDwtIGJhaXhhcl9tb2VkYSgiREVYTVhVUyIsICJQZXNvIE1leGljYW5vIChNWE4pIikNCmNscCA8LSBiYWl4YXJfbW9lZGEoIkRFWENIVVMiLCAiUGVzbyBDaGlsZW5vIChDTFApIikNCmNvcCA8LSBiYWl4YXJfbW9lZGEoIkRFWENBVVMiLCAiUGVzbyBDb2xvbWJpYW5vIChDT1ApIikNCg0KIyBDb25zb2xpZGFyIGVtIG3DqWRpYXMgbWVuc2Fpcw0KbW9lZGFzIDwtIGJpbmRfcm93cyhicmwsIG14biwgY2xwLCBjb3ApICU+JQ0KICBtdXRhdGUobWVzID0gZmxvb3JfZGF0ZShkYXRhLCAibW9udGgiKSkgJT4lDQogIGdyb3VwX2J5KG1lcywgbW9lZGEpICU+JQ0KICBzdW1tYXJpc2UoY2FtYmlvID0gbWVhbih2YWxvciwgbmEucm0gPSBUUlVFKSwgLmdyb3VwcyA9ICJkcm9wIikgJT4lDQogIGFycmFuZ2UobWVzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyA8LS0gZ2FyYW50ZSBvcmRlbSB0ZW1wb3JhbA0KDQojIC0tLS0tLS0tLS0gRVNDT0xIQSBEQSBCQVNFIC0tLS0tLS0tLS0NCiMgMSkgQmFzZSA9IFBSSU1FSVJBIGRhdGEgZGlzcG9uw612ZWwNCnVzYXJfcHJpbWVpcmEgPC0gVFJVRQ0KDQojIDIpIE9VIGJhc2UgPSBkYXRhIGVzcGVjw61maWNhIChkZXNhdGl2ZSBhIG9ww6fDo28gYWNpbWEpDQpiYXNlX2RhdGUgIDwtIGFzLkRhdGUoIjIwMjUtMDctMDkiKQ0KYmFzZV9tb250aCA8LSBmbG9vcl9kYXRlKGJhc2VfZGF0ZSwgIm1vbnRoIikNCg0KaWYgKHVzYXJfcHJpbWVpcmEpIHsNCiAgbW9lZGFzX2lkeCA8LSBtb2VkYXMgJT4lDQogICAgZ3JvdXBfYnkobW9lZGEpICU+JQ0KICAgIG11dGF0ZShiYXNlID0gZmlyc3QoY2FtYmlvKSkgJT4lICAgICAgICAgICAgICMgPC0tIHByaW1laXJhIG9ic2VydmHDp8OjbyBwb3IgbW9lZGENCiAgICBtdXRhdGUocGN0X2Rlc2RlX2Jhc2UgPSAxMDAgKiAoY2FtYmlvL2Jhc2UgLSAxKSkgJT4lDQogICAgdW5ncm91cCgpDQogIGxpbmhhX2Jhc2UgPC0gbWluKG1vZWRhcyRtZXMpDQogIHN1YnQgPC0gIkZvbnRlOiBGUkVEIHwgTcOpZGlhIG1lbnNhbCAoYmFzZSA9IHByaW1laXJhIG9ic2VydmHDp8OjbykiDQp9IGVsc2Ugew0KICBtb2VkYXNfaWR4IDwtIG1vZWRhcyAlPiUNCiAgICBncm91cF9ieShtb2VkYSkgJT4lDQogICAgIyBtYXRjaCBnYXJhbnRlIHF1ZSBwZWdhbW9zIGV4YXRhbWVudGUgbyBtw6pzIGRhIGJhc2U7IHNlIG7Do28gZXhpc3RpciwgZmljYSBOQQ0KICAgIG11dGF0ZShiYXNlID0gY2FtYmlvW21hdGNoKGJhc2VfbW9udGgsIG1lcyldKSAlPiUNCiAgICBmaWx0ZXIoIWlzLm5hKGJhc2UpKSAlPiUNCiAgICBtdXRhdGUocGN0X2Rlc2RlX2Jhc2UgPSAxMDAgKiAoY2FtYmlvL2Jhc2UgLSAxKSkgJT4lDQogICAgdW5ncm91cCgpDQogIGxpbmhhX2Jhc2UgPC0gYmFzZV9kYXRlDQogIHN1YnQgPC0gcGFzdGUwKCJGb250ZTogRlJFRCB8IE3DqWRpYSBtZW5zYWwgKGJhc2UgPSAiLCBmb3JtYXQoYmFzZV9kYXRlLCAiJWQvJWIvJVkiKSwgIikiKQ0KfQ0KDQojIEdyw6FmaWNvDQpoaWdoY2hhcnQodHlwZSA9ICJzdG9jayIpICU+JQ0KICBoY190aXRsZSh0ZXh0ID0gIkdyw6FmaWNvIDQ6IE1vZWRhcyB2cy4gVVNEIOKAkyB2YXJpYcOnw6NvICUgZGVzZGUgYSBiYXNlIikgJT4lDQogIGhjX3N1YnRpdGxlKHRleHQgPSAiRm9udGU6IEZSRUQgfCBNw6lkaWEgbWVuc2FsIGRlIDIwMjAtMjAyNSIpICU+JQ0KDQogICMgTm90ZSBxdWUgYWRpY2lvbmFtb3MgYGNhbWJpbyA9IGNhbWJpb2AgZW0gaGNhZXMoKSBlDQogICMgcGFzc2Ftb3MgZnhVbml0ID0gIkJSTC9NWE4vQ0xQL0NPUCIgcGFyYSB1c2FyIG5vIHRvb2x0aXANCiAgaGNfYWRkX3NlcmllcyhmaWx0ZXIobW9lZGFzX2lkeCwgbW9lZGEgPT0gIlJlYWwgKEJSTCkiKSwNCiAgICAgICAgICAgICAgICB0eXBlID0gImxpbmUiLCBoY2Flcyh4ID0gbWVzLCB5ID0gcGN0X2Rlc2RlX2Jhc2UsIGNhbWJpbyA9IGNhbWJpbyksDQogICAgICAgICAgICAgICAgbmFtZSA9ICJSZWFsIChCUkwpIiwgY29sb3IgPSAiIzAyMDIzQyIsIGZ4VW5pdCA9ICJCUkwiKSAlPiUNCiAgaGNfYWRkX3NlcmllcyhmaWx0ZXIobW9lZGFzX2lkeCwgbW9lZGEgPT0gIlBlc28gTWV4aWNhbm8gKE1YTikiKSwNCiAgICAgICAgICAgICAgICB0eXBlID0gImxpbmUiLCBoY2Flcyh4ID0gbWVzLCB5ID0gcGN0X2Rlc2RlX2Jhc2UsIGNhbWJpbyA9IGNhbWJpbyksDQogICAgICAgICAgICAgICAgbmFtZSA9ICJQZXNvIE1leGljYW5vIChNWE4pIiwgY29sb3IgPSAiI0ZFQjcxMiIsIGZ4VW5pdCA9ICJNWE4iKSAlPiUNCiAgaGNfYWRkX3NlcmllcyhmaWx0ZXIobW9lZGFzX2lkeCwgbW9lZGEgPT0gIlBlc28gQ2hpbGVubyAoQ0xQKSIpLA0KICAgICAgICAgICAgICAgIHR5cGUgPSAibGluZSIsIGhjYWVzKHggPSBtZXMsIHkgPSBwY3RfZGVzZGVfYmFzZSwgY2FtYmlvID0gY2FtYmlvKSwNCiAgICAgICAgICAgICAgICBuYW1lID0gIlBlc28gQ2hpbGVubyAoQ0xQKSIsIGNvbG9yID0gIiNBNkE2QTYiLCBmeFVuaXQgPSAiQ0xQIikgJT4lDQogIGhjX2FkZF9zZXJpZXMoZmlsdGVyKG1vZWRhc19pZHgsIG1vZWRhID09ICJQZXNvIENvbG9tYmlhbm8gKENPUCkiKSwNCiAgICAgICAgICAgICAgICB0eXBlID0gImxpbmUiLCBoY2Flcyh4ID0gbWVzLCB5ID0gcGN0X2Rlc2RlX2Jhc2UsIGNhbWJpbyA9IGNhbWJpbyksDQogICAgICAgICAgICAgICAgbmFtZSA9ICJQZXNvIENvbG9tYmlhbm8gKENPUCkiLCBjb2xvciA9ICIjQjIyMjIyIiwgZnhVbml0ID0gIkNPUCIpICU+JQ0KDQogIGhjX3lBeGlzKA0KICAgIHRpdGxlICA9IGxpc3QodGV4dCA9ICIlIGRlc2RlIGEgYmFzZSIpLA0KICAgIGxhYmVscyA9IGxpc3QoZm9ybWF0ID0gInt2YWx1ZX0lIiksDQogICAgcGxvdExpbmVzID0gbGlzdChsaXN0KHZhbHVlID0gMCwgY29sb3IgPSAiIzg4OCIsIHdpZHRoID0gMSwgZGFzaFN0eWxlID0gIlNob3J0RGFzaCIpKQ0KICApICU+JQ0KICAjIFRvb2x0aXAgY3VzdG9taXphZG86IG1vc3RyYSAlIGUgIlVTJDEgPSBYIG1vZWRhIg0KICBoY190b29sdGlwKA0KICAgIHNoYXJlZCA9IFRSVUUsIHVzZUhUTUwgPSBUUlVFLA0KICAgIGZvcm1hdHRlciA9IEpTKCINCiAgICAgIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgdmFyIHMgPSAnPGI+JyArIEhpZ2hjaGFydHMuZGF0ZUZvcm1hdCgnJWIgJVknLCB0aGlzLngpICsgJzwvYj4nOw0KICAgICAgICB0aGlzLnBvaW50cy5mb3JFYWNoKGZ1bmN0aW9uKHApIHsNCiAgICAgICAgICB2YXIgZCA9IHAucG9pbnQuY2FtYmlvOw0KICAgICAgICAgIC8vIGNhc2FzIGRlY2ltYWlzIGRpbsOibWljYXMgY29uZm9ybWUgbWFnbml0dWRlDQogICAgICAgICAgdmFyIGRlYyA9IGQgPj0gMTAwID8gMCA6IChkID49IDEwID8gMiA6IDQpOw0KICAgICAgICAgIHMgKz0gJzxici8+JyArIHAuc2VyaWVzLm5hbWUgKw0KICAgICAgICAgICAgICAgJzogPGI+JyArIEhpZ2hjaGFydHMubnVtYmVyRm9ybWF0KHAueSwgMikgKyAnJTwvYj4nICsNCiAgICAgICAgICAgICAgICcgPHNwYW4gc3R5bGU9XCJjb2xvcjojNzc3XCI+KFVTJDEgPSAnICsNCiAgICAgICAgICAgICAgIEhpZ2hjaGFydHMubnVtYmVyRm9ybWF0KGQsIGRlYykgKyAnICcgKw0KICAgICAgICAgICAgICAgKHAuc2VyaWVzLnVzZXJPcHRpb25zLmZ4VW5pdCB8fCAnJykgKyAnKTwvc3Bhbj4nOw0KICAgICAgICB9KTsNCiAgICAgICAgcmV0dXJuIHM7DQogICAgICB9DQogICAgIikNCiAgKSAlPiUNCiAgaGNfbGVnZW5kKGVuYWJsZWQgPSBUUlVFKSAlPiUNCiAgaGNfY3JlZGl0cyhlbmFibGVkID0gVFJVRSwgdGV4dCA9ICJGb250ZTogRlJFRCIpICU+JQ0KDQogIGhjX2V4cG9ydGluZyhlbmFibGVkID0gVFJVRSkNCmBgYA0KDQpPdXRyYSBhbsOhbGlzZSBpbnRlcmVzc2FudGUgcXVlIHBvZGUgc2VyIGZlaXRhIMOpIGEgZGUgY29tbyBhcyBtb2VkYXMgZGVzc2VzIHBhw61zZXMgbGF0aW5vLWFtZXJpY2Fub3MgdsOqbSByZWFnaW5kbyDDoHMgZGl2ZXJzYXMgdGFyaWZhcyBpbXBvc3RhcyBwZWxvcyBFVUEgZW0gMjAyNSBlLCDDqSBvIHF1ZSBvIGdyw6FmaWNvIDUgbW9zdHJhLiBQYXJhIG8gQnJhc2lsLCBlbSA5IGRlIGp1bGhvIGRlIDIwMjUsIG9zIEVVQSBhbnVuY2lhcmFtIHVtYSB0YXJpZmEgZ2VyYWwgZGUgNTAlIHNvYnJlIGJlbnMgZGUgb3JpZ2VtIGJyYXNpbGVpcmEgZGVudHJvIGRvIG5vdm8gcmVnaW1lIOKAnHJlY8OtcHJvY2/igJ0uIEEgbWVkaWRhIHRlbSBlc2NvcG8gYW1wbG8gKG7Do28gYXBlbmFzIHNldG9yaWFsKSwgY29tIHZpZ8OqbmNpYSBwcmV2aXN0YSBwYXJhIG8gaW7DrWNpbyBkZSBhZ29zdG8gZSBjYW5haXMgZm9ybWFpcyBwYXJhIGV4Y2x1c8O1ZXMgZGUgaXRlbnMgY3LDrXRpY29zIHF1ZSwgcXVhbmRvIGFwbGljw6F2ZWwsIHNlIHNvYnJlcMO1ZSDDoHMgdGFyaWZhcyBnbG9iYWlzIGrDoSB2aWdlbnRlcyBwYXJhIGHDp28vYWx1bcOtbmlvIGUgY29icmUuIE9maWNpYWxtZW50ZSwgbyBvYmpldGl2byDDqSDigJxyZXN0YWJlbGVjZXIgcmVjaXByb2NpZGFkZeKAnSBlIHJlc3BvbmRlciBhIHByw6F0aWNhcyBjb25zaWRlcmFkYXMgZGVzbGVhaXMuIE5hIHByw6F0aWNhLCBlbXByZXNhcyBwYXNzYXJhbSBhIHJlYXZhbGlhciBjYWRlaWFzIGRlIHN1cHJpbWVudG8gZSBhIHByZXBhcmFyIHBlZGlkb3MgZGUgaXNlbsOnw6NvLCBlbnF1YW50byBvIG1lcmNhZG8gcmVkdXppdSBhIHByZWNpZmljYcOnw6NvIGRlIGRhbm8gZGlyZXRvIMOgIG1lZGlkYSBxdWUgbmVnb2NpYcOnw7VlcyBiaWxhdGVyYWlzIGUgZXhjZcOnw7VlcyBzZSB0b3JuYW0gcHJvdsOhdmVpcy4NCg0KT3Mgb3V0cm9zIHBhw61zZXMgYW5hbGlzYWRvcyByZWNlYmVyYW0gdHJhdGFtZW50b3MgZGl2ZXJzb3MuIEFvIE3DqXhpY28gZm9pIGNvbG9jYWRhIHVtYSB0YXJpZmEgZGUgMjUlIHNvYnJlIHRvZG9zIG9zIHByb2R1dG9zIGRlIG9yaWdlbSBtZXhpY2FuYSBkZXNkZSA0IGRlIG1hcsOnby4gRGVwb2lzLCBhbnVuY2lhcmFtIG1haXMgMzAlIGVtIDEyIGRlIGp1bGhvIGNvbSB2aWfDqm5jaWEgcHJldmlzdGEgcGFyYSAxwrogZGUgYWdvc3RvLCBtYXMgc3VzcGVuZGVyYW0gcG9yIDkwIGRpYXMgZW0gMzEgZGUganVsaG8gYXDDs3MgYWNvcmRvOyBhbMOpbSBkaXNzbywgdmFsZW0gdGFyaWZhcyBzZXRvcmlhaXMgZ2xvYmFpcyBkZSA1MCUgcGFyYSBhw6dvIGUgYWx1bcOtbmlvIGRlc2RlIGp1bmhvIGUgNTAlIHBhcmEgY29icmUgc2VtaWFjYWJhZG8vZGVyaXZhZG9zIGRlc2RlIDHCuiBkZSBhZ29zdG8uIFBhcmEgYSBDb2zDtG1iaWEsIGhvdXZlIHVtYSBhbWVhw6dhIGVtIDI2IGRlIGphbmVpcm8gZGUgMjUlIGNvbSBwb3Nzw612ZWwgZXNjYWxhZGEgYSA1MCUgbmEgc2VtYW5hIHNlZ3VpbnRlLCBtYXMgYXMgbWVkaWRhcyBmaWNhcmFtIGVtIHBhdXNhOyBkZXNkZSA1IGRlIGFicmlsIG8gcGHDrXMgZXN0w6EgYXBlbmFzIG5vIHBpc28gZ2xvYmFsIOKAnHJlY8OtcHJvY2/igJ0gZGUgMTAlLCBzZW0gdGF4YSBlc3BlY8OtZmljYSBwb3N0ZXJpb3IuIE5vIGNhc28gZG8gQ2hpbGUsIG7Do28gaG91dmUgdGFyaWZhIGVzcGVjw61maWNhIHBvciBwYcOtcyBlbSAyMDI1OiBhcGxpY2Etc2UgbyBwaXNvIGdsb2JhbCBkZSAxMCUgZGVzZGUgNSBhYnJpbDsgcG9yw6ltLCBubyBjb2JyZSBow6EgdGFyaWZhIHNldG9yaWFsIGdsb2JhbCBkZSA1MCUgcGFyYSBwcm9kdXRvcyBzZW1pYWNhYmFkb3MgZSBkZXJpdmFkb3MgYSBwYXJ0aXIgZGUgMcK6IGRlIGFnb3N0byAoY29tIGPDoXRvZG9zIGUgbWluw6lyaW9zIGlzZW50b3MpLCB0ZW1hIGFpbmRhIGVtIG5lZ29jaWHDp8OjbyBiaWxhdGVyYWwsIG1hcyBxdWUgasOhIHZlbSBhZmV0YW5kbyBiYXN0YW50ZSBtb2VkYSBjaGlsZW5hIGRldmlkbyDDoCByZWxldsOibmNpYSBkbyBjb2JyZSBuYSBlY29ub21pYSBkbyBwYcOtcywgdW0gZG9zIG1ldGFpcyB0YXhhZG9zIGdsb2JhbG1lbnRlLg0KDQpgYGB7ciBncmFmaWNvIHZhcmlhY29lcyA5anVsfQ0KIyBEYWRvcw0KZGFkb3NfY2FtYmlvIDwtIGRhdGEuZnJhbWUoDQogIHBhaXMgID0gYygiQnJhc2lsIiwgIk3DqXhpY28iLCAiQ2hpbGUiLCAiQ29sw7RtYmlhIiksDQogIG1vZWRhID0gYygiQlJMIiwgIk1YTiIsICJDTFAiLCAiQ09QIiksDQogIHZhbG9yID0gYygyLjQ5LCAwLjA4LCAtMS4zNCwgMS40NCkgICMgdmFyaWHDp8OjbyBlbSAlDQopDQoNCiMgU2luYWwgKGNvcikgZSBvcmRlbmHDp8Ojbw0KZGFkb3NfY2FtYmlvJHRlbmRlbmNpYSA8LSBpZmVsc2UoZGFkb3NfY2FtYmlvJHZhbG9yID49IDAsICJWYWxvcml6b3UiLCAiRGVzdmFsb3Jpem91IikNCmRhZG9zX2NhbWJpbyRwYWlzIDwtIGZhY3RvcihkYWRvc19jYW1iaW8kcGFpcywgbGV2ZWxzID0gZGFkb3NfY2FtYmlvJHBhaXNbb3JkZXIoZGFkb3NfY2FtYmlvJHZhbG9yKV0pDQoNCiMgLS0tLSByw7N0dWxvcyBkbyBsYWRvIGRlIGZvcmEgLS0tLQ0KZGFkb3NfY2FtYmlvJGxhYmVsIDwtIHNwcmludGYoIiUrLjJmJSUiLCBkYWRvc19jYW1iaW8kdmFsb3IpDQoNCnJuZyA8LSBkaWZmKHJhbmdlKGRhZG9zX2NhbWJpbyR2YWxvcikpOyBpZiAocm5nID09IDApIHJuZyA8LSAxDQpvZmZzZXRfbXVsdCA8LSAwLjA4DQpvZmZzZXQgPC0gb2Zmc2V0X211bHQgKiBybmcgKyAwLjAyDQoNCmRhZG9zX2NhbWJpbyR5X2xhYiA8LSBkYWRvc19jYW1iaW8kdmFsb3IgKyBzaWduKGRhZG9zX2NhbWJpbyR2YWxvcikgKiBvZmZzZXQNCmRhZG9zX2NhbWJpbyRoanVzdF9sYWIgPC0gaWZlbHNlKGRhZG9zX2NhbWJpbyR2YWxvciA+PSAwLCAwLCAxKQ0KDQojIGxpbWl0ZXMgZG8gZWl4byBwYXJhIG7Do28gY29ydGFyIG9zIHLDs3R1bG9zDQphbGxfeSA8LSBjKGRhZG9zX2NhbWJpbyR2YWxvciwgZGFkb3NfY2FtYmlvJHlfbGFiKQ0KcGFkIDwtIDAuMDIgKiBkaWZmKHJhbmdlKGFsbF95KSkNCnlfbWluIDwtIG1pbihhbGxfeSkgLSBwYWQNCnlfbWF4IDwtIG1heChhbGxfeSkgKyBwYWQNCg0KIyBHcsOhZmljbw0KcCA8LSBnZ3Bsb3QoDQogIGRhZG9zX2NhbWJpbywNCiAgYWVzKA0KICAgIHggPSBwYWlzLCB5ID0gdmFsb3IsIGZpbGwgPSB0ZW5kZW5jaWEsDQogICAgdGV4dCA9IHBhc3RlMCgNCiAgICAgICI8Yj4iLCBwYWlzLCAiPC9iPiAoIiwgbW9lZGEsICIpIiwNCiAgICAgICI8YnI+VmFyaWHDp8OjbzogIiwgc3ByaW50ZigiJS4yZiUlIiwgdmFsb3IpLA0KICAgICAgIjxicj5TdGF0dXM6ICIsIHRlbmRlbmNpYQ0KICAgICkNCiAgKQ0KKSArDQogIGdlb21fY29sKHdpZHRoID0gMC42KSArDQogIGdlb21fdGV4dChhZXMoeSA9IHlfbGFiLCBsYWJlbCA9IGxhYmVsLCBoanVzdCA9IGhqdXN0X2xhYiksDQogICAgICAgICAgICBzaXplID0gMi44LCBmb250ZmFjZSA9ICJib2xkIikgKw0KICBjb29yZF9mbGlwKGNsaXAgPSAib2ZmIikgKw0KICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBjKCJWYWxvcml6b3UiID0gIiMwMjAyM0MiLCAiRGVzdmFsb3Jpem91IiA9ICIjRkVCNzEyIikpICsNCiAgc2NhbGVfeV9jb250aW51b3VzKGxhYmVscyA9IGxhYmVsX251bWJlcihhY2N1cmFjeSA9IDAuMDEsIHN1ZmZpeCA9ICIlIiksDQogICAgICAgICAgICAgICAgICAgICBsaW1pdHMgPSBjKHlfbWluLCB5X21heCkpICsNCiAgbGFicygNCiAgICB4ID0gTlVMTCwNCiAgICB5ID0gIlZhcmlhw6fDo28gZGVzZGUgOS9qdWwvMjAyNSBhdMOpIDEvc2V0LzIwMjUgKCUpIiwNCiAgICB0aXRsZSA9ICJHcsOhZmljbyA1OiBNb2VkYXMgTGF0aW5vLUFtZXJpY2FuYXMgWCBEw7NsYXIgKEZSRUQpIiwNCiAgICBzdWJ0aXRsZSA9ICJQcmltZWlyYSBhbWVhw6dhIGRlIHRheGHDp8OjbyBwb3IgVHJ1bXAgYW8gQnJhc2lsIiwNCiAgICBjYXB0aW9uID0gIkZvbnRlOiBkYWRvcyBjb25zdWx0YWRvcyBtYW51YWxtZW50ZSBubyBGUkVEIChodHRwczovL2ZyZWQuc3Rsb3Vpc2ZlZC5vcmcvKSBlbSA5L2p1bC8yMDI1IiwNCiAgICBmaWxsID0gTlVMTA0KICApICsNCiAgdGhlbWVfbWluaW1hbChiYXNlX3NpemUgPSAxMikgKw0KICB0aGVtZSgNCiAgICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGZhY2UgPSAiYm9sZCIpLA0KICAgIHBhbmVsLmdyaWQubWFqb3IueSA9IGVsZW1lbnRfYmxhbmsoKQ0KICApDQoNCiMgSW50ZXJhdGl2byAocGxvdGx5KSDigJQgbWFyZ2VtIG1haW9yIMOgIGRpcmVpdGEgcC8gbsOjbyBjb3J0YXIgcsOzdHVsb3MNCmdncGxvdGx5KHAsIHRvb2x0aXAgPSAidGV4dCIpICU+JQ0KICBwbG90bHk6OmxheW91dChtYXJnaW4gPSBsaXN0KHIgPSAxMzApKQ0KDQpgYGANCg0KRXNzYSB2YWxvcml6YcOnw6NvIGRvIHJlYWwgaW5kaWNhIHF1ZSBvIG1vdmltZW50byBuw6NvIGZvaSBhcGVuYXMgZ2xvYmFsLCBtYXMgdGFtYsOpbSByZWZsZXhvIGRlIGZhdG9yZXMgaW50ZXJub3MsIGNvbW8ganVyb3MgYWx0b3MgKFNlbGljKSwgY29udHJvbGUgZGEgaW5mbGHDp8OjbyBlIG1haW9yIHByZXZpc2liaWxpZGFkZSBmaXNjYWwuIEVzc2VzIGZhdG9yZXMgYXVtZW50YXJhbSBhIGF0cmF0aXZpZGFkZSBkbyBCcmFzaWwgcGFyYSBpbnZlc3RpZG9yZXMgZXN0cmFuZ2Vpcm9zLCBmb3J0YWxlY2VuZG8gbyBjw6JtYmlvLg0KDQojIyBDb25jbHVzw6NvDQoNCkVtYm9yYSBvcyBmdW5kYW1lbnRvcyBkZSAyMDIw4oCTMjAyNSBleHBsaXF1ZW0gcGFydGUgZGFzIG9zY2lsYcOnw7VlcyDigJQgZGlmZXJlbmNpYWwgZGUganVyb3MsIHJpc2NvIGZpc2NhbCBlIGFtYmllbnRlIGV4dGVybm8g4oCUIG8gZMOzbGFyIGVzdMOhIGhvamUgZXNwZWNpYWxtZW50ZSBpbXByZXZpc8OtdmVsIHBvcnF1ZSB2YXJpw6F2ZWlzIHJlbGV2YW50ZXMgYXR1YW0gZW0gc2VudGlkb3Mgb3Bvc3Rvcy4gQXMgZXhwZWN0YXRpdmFzIGRlIGNvcnRlcyBuYXMgdGF4YXMgZGUganVyb3MgZG9zIEVVQSAoRmVkKSB0ZW5kZW0gYSBmYXZvcmVjZXIgZmx1eG9zIHBhcmEgcGHDrXNlcyBlbWVyZ2VudGVzLCBvIHF1ZSBwb2RlcmlhIHN1c3RlbnRhciBvIHJlYWwuIFBvciBvdXRybyBsYWRvLCBvIHBhY290ZSB0YXJpZsOhcmlvIGRvIGdvdmVybm8gVHJ1bXAgdGVuZGUsIG5vIGN1cnRvIHByYXpvLCBhIHJlZHV6aXIgaW1wb3J0YcOnw7VlcyBub3J0ZS1hbWVyaWNhbmFzIGUgYSBwcmVzc2lvbmFyIHBhcmNlaXJvcyBjb21lcmNpYWlzOyBlLCBubyBtw6lkaW8gZSBsb25nbyBwcmF6b3MsIHBvZGUgZXN0aW11bGFyIHJlYXJyYW5qb3MgbmFzIGNhZGVpYXMgZ2xvYmFpcyBlIG5vIHVzbyBkZSBtb2VkYXMsIGNvbSBwb3Nzw612ZWwgcmVkdcOnw6NvIGdyYWR1YWwgZGEgZGVwZW5kw6puY2lhIGRvIGTDs2xhci4NCg0KTm8gcGxhbm8gZG9tw6lzdGljbywgbyBjb21wb3J0YW1lbnRvIGRvIGPDom1iaW8gc2VndWUgc2Vuc8OtdmVsIMOgIGNvbnNvbGlkYcOnw6NvIGZpc2NhbCwgw6AgYW5jb3JhZ2VtIGRlIGV4cGVjdGF0aXZhcyBlIMOgIGNvbXVuaWNhw6fDo28gZG8gQmFuY28gQ2VudHJhbC4gQXNzaW0sIGFpbmRhIHF1ZSBzZSBwb3NzYSB0cmFiYWxoYXIgY29tIHVtIGNlbsOhcmlvIGJhc2UgZGUgZXN0YWJpbGlkYWRlIGNvbSBsZXZlIHZpw6lzIGRlIGFwcmVjaWHDp8OjbyBkbyByZWFsIGNhc28gaGFqYSBhdmFuw6dvIGZpc2NhbCBlIGNvbmRpw6fDtWVzIGV4dGVybmFzIGZhdm9yw6F2ZWlzLCBhIGluY2VydGV6YSBhdHVhbCByZWNvbWVuZGEgcHJvamXDp8O1ZXMgZW0gZmFpeGFzIGUgcmV2aXPDo28gZnJlcXVlbnRlIGRlIHByZW1pc3Nhcy4gRXNzZSBjb21wb3J0YW1lbnRvIGRvIG1lcmNhZG8gaWx1c3RyYSBhIGNyw610aWNhIGRlIEx1Y2FzICgxOTc2KSDDoHMgcG9sw610aWNhcyBlY29uw7RtaWNhcyBiYXNlYWRhcyBlbSBtb2RlbG9zIHNlbSBleHBlY3RhdGl2YXMgcmFjaW9uYWlzLCBqw6EgcXVlIGNob3F1ZXMgZGUgaW5mb3JtYcOnw6NvIHJhcGlkYW1lbnRlIGFsdGVyYW0gYXMgZGVjaXPDtWVzIGRvcyBhZ2VudGVzIGVjb27DtG1pY29zLiBDaG9xdWVzIGRlIGluZm9ybWHDp8OjbyBwb2RlbSBhbHRlcmFyIHJhcGlkYW1lbnRlIGEgZGlyZcOnw6NvIGRhIG1vZWRhLg0KDQojIyMgRm9udGVzIGUgcmVmZXLDqm5jaWEgdGXDs3JpY2E6DQpCYW5jbyBDZW50cmFsIGRvIEJyYXNpbCDigJMgU2lzdGVtYSBHZXJlbmNpYWRvciBkZSBTw6lyaWVzIFRlbXBvcmFpcyAoU0dTKS4gRGlzcG9uw612ZWwgZW06IGh0dHBzOi8vd3d3LmJjYi5nb3YuYnIvZXN0YXRpc3RpY2FzL3Nncw0KDQpGZWRlcmFsIFJlc2VydmUgRWNvbm9taWMgRGF0YSAoRlJFRCkg4oCTIEZlZGVyYWwgUmVzZXJ2ZSBCYW5rIG9mIFN0LiBMb3Vpcy4gRGlzcG9uw612ZWwgZW06IGh0dHBzOi8vZnJlZC5zdGxvdWlzZmVkLm9yZw0KDQpUcmFkaW5nIEVjb25vbWljcyDigJMgSW5kaWNhZG9yZXMgbWFjcm9lY29uw7RtaWNvcyBlIGZpbmFuY2Vpcm9zIGdsb2JhaXMuIERpc3BvbsOtdmVsIGVtOiBodHRwczovL3RyYWRpbmdlY29ub21pY3MuY29tDQoNCkRhZG9zIHNpbXVsYWRvcyBjb20gYmFzZSBlbSB0ZW5kw6puY2lhcyBoaXN0w7NyaWNhcyBlIGV2ZW50b3MgaGlwb3TDqXRpY29zIGRlIDIwMjUuDQoNCkEgYW7DoWxpc2UgYXByZXNlbnRhZGEgbmVzdGUgcmVsYXTDs3JpbyBlbmNvbnRyYSByZXNwYWxkbyBlbSBkaXZlcnNvcyBtb2RlbG9zIG1hY3JvZWNvbsO0bWljb3MgY2zDoXNzaWNvcyBlIGNvbnRlbXBvcsOibmVvcywgY29tbzoNCg0KLSBNdW5kZWxsLUZsZW1pbmcgKG1vZGVsbyBJUy1MTS1CUCk7DQotIERvcm5idXNjaCAob3ZlcnNob290aW5nIGNhbWJpYWwpOw0KLSBLcnVnbWFuIGUgT2JzdGZlbGQgKGltcGFjdG9zIGRlIHRhcmlmYXMgZSBwb2zDrXRpY2EgY29tZXJjaWFsKTsNCi0gQmxhbmNoYXJkIGUgSm9obnNvbiAobWFjcm9lY29ub21pYSBlbSBlY29ub21pYXMgYWJlcnRhcyk7DQotIEx1Y2FzIChjcsOtdGljYSDDoCBwb2zDrXRpY2EgZWNvbsO0bWljYSBzZW0gZXhwZWN0YXRpdmFzIHJhY2lvbmFpcyk7DQotIEZyYW5rZWwgZSBGYW1hIChleHBlY3RhdGl2YXMgY2FtYmlhaXMgZSByYWNpb25hbGlkYWRlIGRlIG1lcmNhZG8pLg0KDQpFc3NlcyBtb2RlbG9zIGFqdWRhbSBhIGludGVycHJldGFyIG9zIGVmZWl0b3MgZGFzIHRheGFzIGRlIGp1cm9zLCByaXNjby1wYcOtcywgdGFyaWZhcyBjb21lcmNpYWlzIGUgZXhwZWN0YXRpdmFzIHNvYnJlIGEgdGF4YSBkZSBjw6JtYmlvLg0K