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