2. A Grande Recessão (2014–2016)
2.1 Contexto e datação oficial da recessão
Conforme já apresentado na introdução, a recessão brasileira recente
foi datada pelo CODACE entre o segundo trimestre de 2014 (pico) e o
quarto trimestre de 2016 (vale), totalizando onze trimestres
consecutivos de contração da atividade. Em datação mensal, divulgada
posteriormente pelo Comitê, o pico ocorreu em março de 2014 e o vale em
dezembro de 2016. A queda acumulada do PIB no período, medida pela série
dessazonalizada, foi da ordem de 7 a 8%, magnitude que se aproxima de
11% quando avaliada em termos per capita.
Em termos de comparação histórica, trata-se de uma das recessões mais
severas já registradas no Brasil. Foi a mais longa desde o início da
datação trimestral do CODACE em 1980, uma das mais profundas dos últimos
150 anos de história econômica do país, e foi seguida pela recuperação
mais lenta já documentada — o nível pré-crise do PIB per capita só seria
recuperado anos depois.
No Gráfico 10, é possível visualizar a interação entre o PIB, a Selic
e o IPCA ao longo do ciclo recessivo: a área sombreada delimita o
período datado pelo CODACE (2T/2014 a 4T/2016), durante o qual o PIB
registrou variações negativas sucessivas enquanto a inflação atingia
10,67% em 2015 e a Selic era elevada até 14,25% ao ano.
Gráfico 10
2.2 Os fatores que levaram à recessão
A recessão de 2014–2016 não foi resultado de um único choque, mas da
convergência de três vetores que se reforçaram mutuamente: o esgotamento
do ciclo expansivo anterior, um choque externo desfavorável e uma crise
de credibilidade da política econômica.
O primeiro vetor foi a herança do ciclo 2008–2014, discutida na seção
anterior. O modelo de crescimento baseado em consumo, crédito
subsidiado, desonerações setoriais e expansão do gasto público —
consolidado a partir de 2011–2012 sob o rótulo de Nova Matriz Econômica
— deixou o país com déficits primários crescentes, inflação represada
por preços administrados e margens de lucro deprimidas no setor privado.
Quando o ciclo começou a desacelerar, esses desequilíbrios estreitaram o
espaço de manobra da política econômica.
O segundo vetor foi externo. A partir de 2011, e com mais intensidade
em 2014–2015, encerrou-se o superciclo das commodities que havia
sustentado parte do crescimento dos anos 2000. A desaceleração da
economia chinesa derrubou os preços internacionais e deteriorou os
termos de troca brasileiros, comprimindo a receita de exportações e
reduzindo o investimento no setor extrativo. O choque externo não
explica isoladamente a profundidade da recessão — países
latino-americanos igualmente expostos ao ciclo de commodities, como
Chile e Peru, sofreram desacelerações muito mais brandas — mas atuou
como amplificador das vulnerabilidades já presentes.
O terceiro vetor foi a perda de credibilidade da política econômica
em 2015. A descoberta das pedaladas fiscais minou a confiança nos
números oficiais; o ajuste fiscal anunciado por Joaquim Levy em uma
economia já em queda combinou-se com o realinhamento dos preços
administrados, o que levou o IPCA a 10,67% em 2015 e forçou a Selic a
subir até 14,25%. A perda do grau de investimento pela Standard &
Poor’s em setembro de 2015, seguida pelas demais agências, encareceu o
financiamento e elevou o risco-país. Sobreposto a tudo isso, o avanço da
Operação Lava Jato paralisou investimentos no setor de óleo e gás e na
construção, e o processo de impeachment iniciado em dezembro de 2015
paralisou a agenda econômica.
A combinação desses três vetores produziu o que a literatura costuma
chamar de balance sheet recession: uma contração em que famílias,
empresas e setor público precisam reduzir endividamento simultaneamente,
o que ajuda a entender tanto a profundidade quanto a lentidão da
recuperação posterior.
2.3 Mercado de trabalho, investimento e produtividade
2.3.1 O colapso do investimento
Embora o desemprego seja a face mais visível de uma recessão, foi o
investimento que liderou a queda da atividade entre 2014 e 2016, em
sintonia com o que sugere a teoria dos ciclos: a Formação Bruta de
Capital Fixo (FBCF) é tipicamente o componente mais volátil do PIB e o
primeiro a reagir à deterioração das expectativas.
Na variação anual, a FBCF começou a desacelerar ainda em 2014,
registrando contração de 4,4% no ano. A queda aprofundou-se para -13,9%
em 2015 e mais -12,1% em 2016. Olhando para a dinâmica trimestral,
conforme mostra o Gráfico 11, o componente acumulou onze trimestres
consecutivos de queda, com recuos que chegaram a -7,0% em um único
trimestre (2T/2015). No acumulado do pico ao vale, o investimento recuou
cerca de 27%, e a taxa de investimento (FBCF/PIB) caiu de 20,9% em 2013
para 16,4% em 2016 — um dos níveis mais baixos da série histórica do
indicador, que continuaria caindo até 14,6% em 2017.
A lógica econômica por trás desse colapso conecta-se diretamente aos
problemas acumulados no ciclo anterior. A redução das margens de lucro
das empresas, num contexto de elevação do custo unitário do trabalho e
câmbio apreciado, já vinha desestimulando novos projetos desde
2012–2013. Quando a esses fatores se somaram a alta da Selic, a elevação
do risco-país, a paralisação dos projetos da Petrobras pela Operação
Lava Jato e o congelamento dos desembolsos do BNDES — que havia sido
peça central do financiamento do investimento durante a expansão —, o
investimento entrou em queda livre. Os indicadores de utilização da
capacidade instalada da indústria, apresentados no Gráfico 12, caíram
para mínimos históricos, sinalizando que não havia razão econômica para
ampliar o estoque de capital.
Gráfico 11
Gráfico 12
2.3.2 O ajuste do mercado de trabalho
O mercado de trabalho confirmou na recessão um padrão clássico do
ciclo econômico: foi a última variável a entrar e a última a sair da
crise. No primeiro trimestre de 2014, a taxa de desocupação medida pela
PNAD Contínua estava em 7,2%, próxima do mínimo histórico da série. A
partir de meados de 2014, com a queda do investimento e a desaceleração
da indústria, o desemprego começou a subir, mas inicialmente de forma
lenta.
Essa lentidão inicial reflete o que a literatura chama de labor
hoarding: as empresas seguraram suas equipes na expectativa de uma
recuperação rápida, absorvendo no curto prazo a queda da demanda como
redução de produtividade e horas trabalhadas. Quando ficou claro que a
recessão seria longa, os ajustes vieram de forma abrupta. Como mostra o
Gráfico 13, a taxa de desocupação saltou para 9,1% no último trimestre
de 2015, atingiu 12,1% no quarto trimestre de 2016 e alcançou o pico de
13,9% no primeiro trimestre de 2017 — já fora do período recessivo
oficial, confirmando justamente a defasagem do mercado de trabalho em
relação ao ciclo do PIB.
Dois aspectos do ajuste merecem destaque, pois ajudam a entender
legados duradouros da crise. O primeiro é o aumento da informalidade:
parte significativa da recuperação posterior do emprego se deu por
vínculos sem carteira ou por conta própria, com remuneração mais baixa e
produtividade média menor. O segundo é a queda da massa de rendimentos
reais — resultado combinado de menor ocupação e da inflação elevada de
2015–2016, que comprimiu o poder de compra dos salários e alimentou um
ciclo recessivo no consumo, tema da próxima seção.
Gráfico 13
2.3.3 Produtividade: o problema estrutural revelado pela
recessão
A recessão expôs uma fragilidade que estava parcialmente mascarada
pela expansão anterior: a estagnação da produtividade. Os indicadores
construídos pelo Observatório da Produtividade Regis Bonelli (FGV/IBRE)
mostram que, entre 2010 e 2014, enquanto a produtividade por hora
trabalhada crescia a um ritmo modesto de cerca de 1,5% ao ano, a
Produtividade Total dos Fatores (PTF) avançava apenas 0,5% ao ano —
sinal de que o crescimento estava sendo sustentado mais por acumulação
de fatores (capital e trabalho) do que por ganhos de eficiência.
Durante a recessão, a PTF teve queda expressiva, visível no Gráfico
14 pela inflexão do índice a partir de 2014 e pelo ponto particularmente
severo no quarto trimestre de 2015. A produtividade por hora também
recuou. O ponto analiticamente mais relevante, porém, é o que veio
depois: pela primeira vez em sua história recente, o Brasil saiu de uma
recessão profunda sem registrar ganhos significativos de produtividade
na recuperação. Em ciclos anteriores, a saída da crise costumava vir
acompanhada de aumento da eficiência, à medida que as empresas
reorganizavam processos e o capital se realocava para usos mais
produtivos. Dessa vez, isso não ocorreu.
Esse comportamento ajuda a explicar a frustração com o ritmo do
crescimento pós-2017 e dialoga diretamente com a discussão do momento
atual: sem ganhos consistentes de produtividade, a economia brasileira
passa a depender cada vez mais da acumulação de fatores para crescer, o
que reforça os limites estruturais ao ciclo de expansão.
Gráfico 14
2.4 Consumo, crédito e confiança
2.4.1 A reversão do consumo das famílias
O consumo das famílias, que havia sido o motor do ciclo expansivo de
2008–2014, sofreu uma reversão expressiva durante a recessão. Como
evidencia o Gráfico 15, pela série trimestral dessazonalizada, o
agregado registrou sete quedas consecutivas entre o 1º trimestre de 2015
e o 3º trimestre de 2016. Os recuos chegaram a 1,9% em um único
trimestre, no 2º trimestre de 2015, e a queda acumulada no período foi
de aproximadamente 6%, configurando a contração mais longa e intensa do
consumo das famílias na série histórica recente.
A magnitude desse movimento é macroeconomicamente decisiva porque o
consumo das famílias responde por aproximadamente dois terços do PIB
pela ótica da despesa. Quando esse componente entra em queda,
dificilmente outros agregados conseguem compensar, e a contração se
generaliza.
A reversão foi resultado da combinação de fatores discutidos nas
seções anteriores. A queda da renda real do trabalho, decorrente do
aumento do desemprego e da inflação de dois dígitos em 2015, comprimiu o
poder de compra. A elevação da Selic encareceu o crédito ao consumidor,
que será analisado na próxima subseção. E o endividamento elevado das
famílias — herança do ciclo de crédito da década anterior — limitou a
capacidade de absorção do choque por meio de novos empréstimos. O
resultado foi um ciclo recessivo no consumo que se retroalimentou: queda
do emprego comprime a renda, que comprime o consumo, que comprime a
produção e o emprego novamente.
Gráfico 15
2.4.2 A retração do crédito
O crédito, que havia funcionado como combustível da expansão
anterior, comportou-se na recessão como amplificador da queda. Conforme
se observa no Gráfico 16, o estoque total de crédito do Sistema
Financeiro Nacional, que vinha crescendo continuamente desde meados dos
anos 2000, recuou em termos reais e caiu como proporção do PIB — de
cerca de 53,7% no fim de 2015 para 49,3% no fim de 2016.
Três fatores explicam essa reversão. O primeiro é a alta da Selic,
que elevou as taxas de juros ao tomador final a patamares proibitivos:
os juros médios do crédito livre para pessoa física chegaram a cerca de
71,5% ao ano em 2016. O segundo é a deterioração da percepção de risco
do sistema financeiro diante da queda da atividade e do aumento da
inadimplência, sobretudo entre empresas. O terceiro é a retração do
crédito direcionado, particularmente do BNDES, que reverteu o forte
crescimento dos desembolsos observado no ciclo anterior — movimento
associado tanto ao ajuste fiscal quanto à reorientação da política de
crédito a partir de 2015.
O efeito combinado foi um processo de desalavancagem simultânea de
famílias e empresas, que se prolongou pelos anos seguintes ao fim da
recessão e ajuda a explicar a lentidão da retomada. Em uma economia em
que o crédito havia sido um componente central do crescimento, a sua
reversão eliminou um dos principais canais de financiamento da demanda
agregada.
Gráfico 16
2.4.3 Confiança e incerteza
Um aspecto distintivo da recessão de 2014–2016, em comparação com
episódios anteriores, é o papel central das expectativas e da incerteza.
Como ilustra o Gráfico 17, os indicadores de confiança da FGV/IBRE — em
particular o Índice de Confiança Empresarial (ICE) e o Índice de
Confiança do Consumidor (ICC) — atingiram mínimos históricos entre o
final de 2015 e o início de 2016, em níveis inferiores aos observados no
auge da crise internacional de 2008–2009. Indicadores de incerteza, como
o Indicador de Incerteza da Economia (IIE-Br) da FGV, também registraram
níveis recordes no mesmo período, com pico em setembro de 2015.
A deterioração das expectativas é macroeconomicamente relevante
porque cria um canal próprio de transmissão da crise. Diante de cenários
incertos, empresas postergam decisões de investimento e famílias
aumentam a poupança precaucionária, comprimindo simultaneamente a FBCF e
o consumo — ou seja, ampliando o efeito recessivo dos demais choques
pela via expectacional.
A perda de credibilidade da política econômica em 2015 alimentou
diretamente esses indicadores. A revisão da meta de superávit primário
para déficit, a sucessão de trocas no comando do Ministério da Fazenda
(Levy → Nelson Barbosa → Henrique Meirelles) e as incertezas do processo
de impeachment funcionaram como ruídos contínuos que dificultavam a
formação de expectativas estáveis. Assim, a crise política não atuou
apenas como um pano de fundo da recessão, mas como um vetor concreto de
transmissão dos problemas para a atividade econômica real.
Gráfico 17
2.5 PIB e a profundidade da queda da atividade
A síntese de todos os movimentos analisados nas seções anteriores
aparece nas Contas Nacionais. O PIB brasileiro registrou variações
anuais de +0,5% em 2014, -3,5% em 2015 e -3,6% em 2016, com a economia
encolhendo por onze trimestres consecutivos quando se examina a série
dessazonalizada. O Gráfico 18 torna visível essa sequência: as colunas
escuras delimitam exatamente os onze trimestres consecutivos de
contração entre o 2T/2014 e o 4T/2016 datados pelo CODACE.
Pela ótica da despesa, a contração foi liderada pela FBCF — cuja
contribuição negativa para o PIB chegou a cerca de -2,7 pontos
percentuais em 2015 — e pelo consumo das famílias. Apenas as exportações
líquidas e o consumo do governo apresentaram contribuições não negativas
em alguns trimestres, sendo as exportações beneficiadas pela depreciação
cambial e o consumo do governo limitado pelo aperto fiscal de 2015. Pela
ótica da oferta, a queda foi puxada pela indústria, com destaque para a
indústria de transformação e a construção civil — esta última
especialmente afetada pela paralisação de obras vinculadas à Operação
Lava Jato.
Em termos per capita, a queda foi ainda mais severa, aproximando-se
de 11% acumulados quando descontado o crescimento populacional. O choque
foi suficiente para fazer o PIB per capita brasileiro retroceder ao
nível observado por volta de 2008 — ou seja, a recessão anulou quase
todo o avanço de bem-estar agregado conquistado durante o ciclo
expansivo discutido na seção anterior.
Gráfico 18
2.6 Transição para a recuperação lenta
Tecnicamente, a recessão terminou no quarto trimestre de 2016, com o
vale identificado pelo CODACE em dezembro daquele ano. Mas, como ocorre
em recessões profundas e de natureza estrutural, o fim da contração não
significou o fim da crise. A recuperação que se iniciou em 2017
mostrou-se a mais lenta da história econômica brasileira recente: o
crescimento médio do PIB nos anos seguintes ficou em torno de 1,3% ao
ano, ritmo claramente insuficiente para recompor as perdas.
Quatro fatores ajudam a explicar essa lentidão. O primeiro é o
caráter de balance sheet recession: como visto nas seções anteriores,
famílias, empresas e setor público entraram simultaneamente em processo
de redução de endividamento, o que prolongou o ciclo de desalavancagem
por anos e limitou a reação da demanda agregada. O segundo é a
fragilidade fiscal, que restringiu o uso de estímulos via gasto público
e, ao contrário, exigiu reformas como a Emenda Constitucional do Teto de
Gastos (EC 95/2016) e a Reforma Trabalhista (2017) apenas para conter a
deterioração estrutural. O terceiro são as cicatrizes (scars) deixadas
pela recessão sobre o capital humano e o estoque de capital físico:
trabalhadores desocupados por longos períodos perdem produtividade e
empregabilidade, e investimentos não realizados não são facilmente
recuperados em ciclos subsequentes — ponto que dialoga diretamente com a
estagnação da produtividade discutida em 2.3.3. O quarto são as
instabilidades posteriores que interromperam a retomada antes que ela se
consolidasse: a greve dos caminhoneiros em 2018, a transição política
daquele ano e, mais à frente, o choque da pandemia em 2020.
A recessão de 2014–2016 deixa, assim, lições importantes para a
leitura dos ciclos econômicos brasileiros. A primeira é que expansões
puxadas por consumo e crédito, sustentadas por estímulos fiscais e
parafiscais, tendem a esgotar-se quando os fundamentos de produtividade
não acompanham o ritmo da demanda. A segunda é que choques externos não
são, sozinhos, determinantes — eles amplificam vulnerabilidades internas
pré-existentes. A terceira é que a credibilidade da política econômica é
um insumo macroeconômico relevante: sua perda eleva a incerteza, deprime
expectativas e transforma o que seria uma desaceleração em recessão
profunda.
Essas lições servem de pano de fundo para a próxima seção, em que
será examinado o momento atual da economia brasileira — buscando avaliar
em que medida os arranjos institucionais e os fundamentos
macroeconômicos pós-recessão alteraram a dinâmica cíclica do país, e
quais dos legados de 2014–2016 ainda condicionam o ciclo presente.
3. Brasil atual
De acordo com as datas oficiais do CODACE, o último ciclo econômico
brasileiro - caracterizado como uma recessão - foi encerrado no segundo
trimestre de 2020. Até o momento da publicação deste relatório, não
houve divulgação oficial sobre o período subsequente, de modo que não se
sabe formalmente se a economia brasileira se encontra em uma fase de
expansão ou recessão. No entanto, como discutido anteriormente,
independentemente da fase do ciclo econômico, é possível identificar
padrões, pontos fortes e desequilíbrios estruturais na economia. Assim,
esta seção busca analisar alguns indicadores do Brasil atual à luz do
histórico apresentado ao longo do relatório, observando quais
fragilidades persistem e quais transformações podem ser percebidas na
economia brasileira.
3.1 Estrutura produtiva e investimento
A análise do ciclo atual começa pela composição setorial do produto.
O ritmo da expansão importa, mas o que define se ela é sustentável no
longo prazo é a estrutura por trás: quais setores estão puxando o
crescimento, em que proporção, e se essa proporção se altera ao longo do
tempo. Assim, a questão central é observar se a economia brasileira está
passando por uma transformação estrutural ou se continua crescendo
dentro do mesmo padrão observado em ciclos anteriores.
Gráfico 19:
Como observado no gráfico X, no terceiro trimestre de 2020, o setor
de serviços (linha azul escura) respondia por aproximadamente R$ 1,15
trilhão do PIB brasileiro, enquanto a indústria (linha amarela)
representava cerca de R$ 405 bilhões e a agropecuária (linha azul clara)
aproximadamente R$ 100 bilhões. No período mais recente da série,
correspondente ao quarto trimestre de 2025, os serviços passaram para
aproximadamente R$2,04 trilhões, enquanto a indústria atingiu cerca de
R$648 bilhões. A agropecuária, por sua vez, permaneceu próxima de R$100
bilhões, embora essa comparação deve considerar os efeitos de
sazonalidade característicos do setor.
Em termos absolutos, todos os setores cresceram ao longo do período
analisado. O mais relevante, porém, está na composição relativa do PIB.
O setor de serviços continua concentrando mais de 60% da atividade
econômica brasileira e ampliou ainda mais sua participação ao longo da
série, enquanto a indústria permanece relativamente estagnada em termos
percentuais. O problema brasileiro, então, não é simplesmente a
predominância do setor de serviços - característica comum também a
várias economias, inclusive desenvolvidas. O problema está na ausência
de avanço relativo da indústria e na limitada transformação estrutural
da economia. Assim como observado no ciclo de expansão de 2008–2014, o
crescimento recente da economia brasileira continua concentrado em
setores que já eram predominantes anteriormente, sem mudanças
significativas na composição produtiva do país.
A composição setorial da economia ajuda a entender como o país
cresce. O investimento, por outro lado, ajuda a entender se esse
crescimento possui capacidade de sustentação no longo prazo. Nesse
sentido, o gráfico X apresenta a evolução da Formação Bruta de Capital
Fixo (FBCF) em conjunto com a taxa Selic entre 2020 e 2025.
Gráfico 20:
Como observado no gráfico X, a FBCF continua apresentando forte
oscilação ao longo do período, sem estabelecer uma trajetória
consistente de crescimento. Mesmo nos momentos de recuperação do
investimento, o movimento não se sustenta por longos períodos,
reproduzindo um padrão já observado em ciclos anteriores da economia
brasileira.
O pico da série ocorreu em abril de 2021, quando a variação anual da
FBCF atingiu aproximadamente 26,25%. No entanto, o movimento perdeu
força rapidamente, chegando a -6,84% em junho de 2023. Mesmo nos dados
mais recentes, a instabilidade permanece evidente: em julho de 2025, a
FBCF registrava crescimento de aproximadamente 2,32%, mas voltou para
-3,12% em outubro do mesmo ano. Assim, a principal característica
observada na série é justamente a ausência de uma trajetória sustentada
de investimento. A FBCF apresenta momentos pontuais de recuperação, mas
sem continuidade suficiente para consolidar um ciclo consistente de
expansão do investimento produtivo no país.
Parte dessa dinâmica pode ser associada ao patamar elevado da taxa
Selic no Brasil. Em alguns momentos do gráfico, é possível observar que
a redução dos juros é acompanhada por melhora da Formação Bruta de
Capital Fixo. No entanto, mesmo durante esses períodos de queda, a taxa
básica de juros permanece em níveis elevados. Em outras palavras, muitas
vezes a Selic reduz de 15% para 14%, mas continua representando um custo
alto para decisões de investimento produtivo.
Somado a isso, o ambiente de incerteza fiscal e econômica reduz ainda
mais os incentivos ao investimento. O resultado é uma trajetória de
investimento instável e marcada por fortes oscilações, reproduzindo um
padrão semelhante ao observado no ciclo de expansão de 2008–2014.
3.2 Mercado de trabalho e produtividade
A análise do mercado de trabalho no ciclo atual exige um olhar para
além da taxa de desocupação. Embora essa seja a métrica mais conhecida e
utilizada, sua queda isoladamente não é suficiente para indicar, por si
só, um mercado de trabalho saudável ou sustentável. Por isso, é
importante analisá-la em conjunto com a taxa de subutilização, que
oferece uma leitura mais ampla das condições efetivas da economia.
A taxa de subutilização engloba não apenas as pessoas desocupadas,
mas também aquelas que trabalham menos horas do que gostariam - a
chamada subocupação por insuficiência de horas - e a força de trabalho
potencial, composta por pessoas que gostariam de trabalhar, mas não
procuraram emprego por diferentes motivos, como dificuldades de
deslocamento, ausência de creche para os filhos ou incompatibilidade de
horários com a faculdade. Por reunir essas três dimensões, a taxa de
subutilização funciona como um termômetro mais sensível das condições do
mercado de trabalho.
A análise conjunta dos dois indicadores é importante porque
diferentes combinações entre eles revelam estados distintos da economia.
Em alguns períodos de recessão, por exemplo, a taxa de desocupação pode
permanecer relativamente baixa, transmitindo a impressão de um mercado
de trabalho aquecido. Entretanto, se a subutilização permanecer elevada,
o quadro real ainda indica a existência de trabalhadores subocupados ou
fora da força de trabalho, mas ainda disponíveis para trabalhar.
Gráfico 21:
No caso brasileiro recente, porém, o movimento observado foi de queda
simultânea tanto da taxa de desocupação quanto da taxa de subutilização.
Em julho de 2020, a taxa de desocupação encontrava-se em 14,9%, enquanto
a taxa de subutilização atingia 30,4%. Em outubro de 2025, ambos os
indicadores haviam recuado de forma expressiva: a desocupação chegou a
5,1% e a subutilização a 13,4%.
A trajetória de queda é evidente nas duas séries, refletindo uma
redução consistente do desemprego e da força de trabalho subutilizada ao
longo do período. Entretanto, no caso brasileiro atual, essa
configuração não é necessariamente positiva. As duas taxas encontram-se
simultaneamente em níveis muito baixos, indicando que há pouca folga
disponível no mercado de trabalho. Em outras palavras, grande parte das
pessoas que poderiam ser incorporadas ao mercado já se encontra ocupada
ou procurando emprego ativamente.
Esse cenário tende a gerar pressões salariais, que posteriormente
podem se traduzir em pressões inflacionárias, dificultando a condução da
política monetária e impondo limites adicionais ao crescimento
econômico. Em economias com ganhos robustos de produtividade, um mercado
de trabalho aquecido pode ser sustentado por aumentos da capacidade
produtiva. No caso brasileiro, contudo, essa preocupação se torna mais
relevante justamente porque o desempenho da produtividade permanece
limitado.
Nesse sentido, o gráfico 22 apresenta a evolução recente da
Produtividade Total dos Fatores (PTF).
Gráfico 22:
Como observado no gráfico 22, a PTF apresentada já incorpora o ajuste
por capital humano - cuja importância foi discutida anteriormente -,
garantindo que os movimentos observados reflitam ganhos efetivos de
eficiência produtiva, e não simplesmente o aumento da escolaridade ou da
qualificação da força de trabalho. Além disso, adicionou-se uma média
móvel de quatro trimestres (linha amarela), que permite visualizar a
tendência da série ao suavizar oscilações pontuais.
A série inicia em julho de 2020 em um patamar elevado, de
aproximadamente 92 pontos, valor que pode ser associado ao contexto
pós-pandêmico, marcado pelo retorno gradual da atividade econômica e por
padrões atípicos de trabalho. A partir desse ponto, a PTF apresenta uma
queda significativa, atingindo 87,3 já em abril de 2021, sinalizando que
o nível elevado observado no início da série não se sustentou.
Ao longo do período, observam-se algumas recuperações pontuais, como
entre julho de 2022 e janeiro de 2023, e entre outubro de 2023 e janeiro
de 2024. Entretanto, tanto a média móvel quanto a própria série
evidenciam que, apesar desses movimentos intermediários, a tendência
geral da PTF ao longo do período foi de queda. O dado mais recente,
referente ao quarto trimestre de 2025, registra a PTF em 83,9, patamar
significativamente inferior aos 92 observados no início da série
analisada.
Esse resultado é particularmente preocupante quando combinado com o
quadro do mercado de trabalho discutido anteriormente. A economia
brasileira encontra-se em uma situação em que praticamente todas as
pessoas que poderiam estar trabalhando já se encontram ocupadas, mas, ao
mesmo tempo, essas pessoas não estão se tornando mais produtivas ao
longo do tempo. Em outras palavras, o país atingiu o limite da
acumulação de fatores no mercado de trabalho sem que isso fosse
acompanhado por ganhos de eficiência produtiva. Esse cenário impõe
restrições importantes ao crescimento de longo prazo. Sem aumentos
consistentes de produtividade, a economia perde a capacidade de produzir
mais utilizando os mesmos recursos, reproduzindo, e agravando, uma das
principais fragilidades estruturais já identificadas no ciclo de
expansão de 2008–2014.
3.3 Confiança, incerteza e limites do crescimento
Para além dos indicadores de atividade, mercado de trabalho e
produtividade, a análise do ciclo atual se beneficia da observação de
indicadores qualitativos que captam a percepção de empresários e
consumidores sobre o estado da economia. O gráfico 23 apresenta o Índice
de Confiança Empresarial (ICE) e o Índice de Confiança do Consumidor
(ICC), ambos calculados pela FGV/IBRE, em conjunto com o Nível de
Utilização da Capacidade Instalada (NUCI), que mede o quanto a indústria
está efetivamente operando em relação ao seu potencial de produção.
Gráfico 23:
Como observado no gráfico 23, o NUCI (linha azul clara) mantém-se em
patamares relativamente elevados ao longo de todo o período, o que
indica baixa ociosidade na indústria. Esse comportamento pode parecer
positivo à primeira vista, mas deve ser lido com cautela: uma indústria
operando próxima do seu limite de capacidade pode gerar pressão de
preços pelo lado da demanda, dado que qualquer aumento do consumo
encontra dificuldades de ser absorvido pela produção corrente. Em outras
palavras, o NUCI elevado não significa, automaticamente, uma indústria
em expansão - significa apenas que não há folga produtiva para absorver
choques de demanda.
O ICE (linha amarela), que mede a confiança empresarial, segue em
níveis fracos, principalmente no que diz respeito às expectativas
futuras dos empresários. Esse comportamento é macroeconomicamente
relevante porque a confiança empresarial é um dos principais
determinantes das decisões de investimento e contratação. Quando os
empresários não enxergam um horizonte claro de expansão da demanda, eles
tendem a postergar projetos, limitar a expansão da produção e manter
quadros de pessoal mais enxutos - reforçando, na prática, a fragilidade
do investimento já observada anteriormente.
O ICC (linha azul escura), por sua vez, apresenta trajetória de
recuperação ao longo do período. O movimento é consistente com a melhora
do mercado de trabalho discutida em 3.2, que ampliou tanto a ocupação
quanto a renda das famílias. Apesar dessa recuperação, contudo, o índice
permanece abaixo de 100 pontos - patamar considerado neutro -,
sinalizando que o consumidor brasileiro segue cauteloso quanto às
perspectivas futuras, mesmo diante de uma situação corrente mais
favorável.
A leitura conjunta dos três indicadores revela uma contradição
importante do ciclo atual: a economia mostra resiliência no presente,
refletida na utilização da capacidade instalada e na melhora do consumo,
mas opera com baixa confiança em relação ao futuro. Esse descompasso
entre o desempenho corrente e as expectativas futuras impõe um limite
adicional ao crescimento, pois reduz os incentivos para que empresas
ampliem seus investimentos e para que famílias aumentem o consumo de
bens duráveis - perpetuando, assim, as fragilidades estruturais já
identificadas ao longo desta seção.
3.4 Situação fiscal e dívida pública
Atualmente, não é possível analisar a situação econômica brasileira
sem passar pela questão da dívida pública. O endividamento do governo
geral encontra-se em um patamar elevado, próximo de 80% do PIB, e a
trajetória dos indicadores fiscais nos últimos anos reforça a
preocupação com a sustentabilidade das contas públicas. O gráfico 24
apresenta a evolução da Necessidade de Financiamento do Setor Público
(NFSP) e da Dívida Bruta do Governo Geral entre 2020 e 2025.
Gráfico 24:
Como observado no gráfico 24, as barras amarelas representam a NFSP -
sendo que valores positivos correspondem a déficits primários do
governo, e valores negativos a superávits. A linha azul escura, por sua
vez, mostra a evolução da dívida bruta do governo geral como percentual
do PIB. Desde julho de 2023, o Brasil tem registrado déficits primários
praticamente contínuos, o que significa que as receitas do governo não
têm sido suficientes para cobrir seus gastos correntes, excluídos os
juros da dívida. Entre novembro e dezembro de 2024, observa-se uma
redução do tamanho desses déficits, e ao longo de 2025 os déficits têm
se mantido em níveis mais baixos. Ainda assim, a situação fiscal
brasileira permanece preocupante.
A redução do déficit é, sem dúvida, um movimento positivo. No
entanto, é importante notar que a dívida pública brasileira já se
encontra em patamar elevado - chegando em quase 80% do PIB como pode ser
visto na linha azul -, e isso faz com que ela apresente uma dinâmica de
crescimento praticamente autônoma. Mesmo que o governo conseguisse zerar
completamente seus gastos discricionários, a dívida continuaria a
crescer, impulsionada pela combinação entre um crescimento econômico
baixo e juros estruturalmente elevados. Em outras palavras, o resultado
primário deixa de ser suficiente, isoladamente, para estabilizar a
trajetória da dívida quando o diferencial entre a taxa de juros e a taxa
de crescimento da economia é amplo e persistente.
Esse quadro fiscal precisa ser lido em conjunto com os indicadores
discutidos nas seções anteriores. A economia brasileira encontra-se em
uma situação na qual a estrutura produtiva não se transformou, o
investimento permanece instável, o mercado de trabalho está aquecido sem
reservas de mão de obra disponível, e a produtividade segue em
trajetória de queda. Esse conjunto de fragilidades estruturais limita a
capacidade de crescimento do país no longo prazo - e, justamente por
isso, retroalimenta a deterioração fiscal: sem crescimento robusto, a
relação dívida/PIB tende a se elevar mesmo na ausência de novos déficits
expressivos.
O resultado é um cenário em que as contas públicas se deterioram não
apenas pelo lado do gasto, mas também pela própria fragilidade
estrutural da economia brasileira em gerar crescimento sustentado.
Conclusão
A análise histórica dos ciclos econômicos brasileiros se mostra
fundamental para a compreensão do momento atual da economia. Ao longo
deste relatório, foram examinados o ciclo de expansão de 2008–2014, a
recessão de 2014–2016 e a fase iniciada após o segundo trimestre de
2020, buscando identificar não apenas os movimentos de cada período,
mas, sobretudo, os padrões estruturais que se repetem ao longo do tempo.
Essa abordagem permite observar que muitas das fragilidades
identificadas na economia brasileira atual têm raízes em ciclos
anteriores, e que sua persistência impõe limites importantes ao
crescimento de longo prazo.
A situação atual da economia brasileira é preocupante. O crescimento
permanece em ritmo baixo, a indústria opera próxima do limite da
capacidade instalada, o mercado de trabalho encontra-se aquecido, com
taxas de desocupação e subutilização em níveis mínimos, e a
produtividade total dos fatores segue em trajetória de queda. Esse
conjunto de indicadores aponta para uma economia que, embora apresente
resiliência no curto prazo, encontra-se estagnada em termos estruturais
— com pouca folga de capacidade produtiva, sem ganhos consistentes de
eficiência e com fragilidades fiscais persistentes. O Brasil precisa,
portanto, encontrar mecanismos para crescer de forma sustentável, o que
exige, necessariamente, uma perspectiva de longo prazo voltada ao
aumento da produtividade, à transformação estrutural da economia e à
ampliação do investimento produtivo.
Quanto à fase em que a economia brasileira efetivamente se encontra,
ainda não há definição oficial. O último ciclo datado pelo CODACE foi
encerrado no segundo trimestre de 2020 e, até o momento da publicação
deste relatório, em maio de 2026, não houve divulgação de novas datas -
de modo que não é possível afirmar formalmente se o país segue em
expansão ou se já transitou para uma nova fase recessiva.
Independentemente da datação, contudo, o ponto central da análise
permanece o mesmo. Se o Brasil ainda se encontra em expansão, as
fragilidades observadas são exatamente as mesmas que precederam a
recessão de 2014–2016: baixa produtividade, investimento instável,
estrutura produtiva pouco alterada e contas públicas fragilizadas. Se
uma nova recessão já estiver em curso, essas mesmas fragilidades estão
entre suas principais causas.
Em qualquer das hipóteses, a conclusão é a mesma. Os problemas
estruturais que limitam o crescimento da economia brasileira não são
novos: foram identificados no ciclo de expansão de 2008–2014, expostos
com nitidez pela recessão de 2014–2016 e seguem presentes no ciclo
atual. Enquanto essas questões estruturais não forem efetivamente
enfrentadas - sobretudo no que diz respeito à produtividade e ao
investimento produtivo - a economia brasileira tende a permanecer presa
em ciclos curtos de crescimento moderado seguidos por recessões
profundas, sem conseguir consolidar uma trajetória de expansão
sustentável no longo prazo.
Referências
ABEL, Andrew B.; BERNANKE, Ben S.; CROUSHORE, Dean. Macroeconomia. 6.
ed. São Paulo: Pearson Addison Wesley, 2008.AGÊNCIA BRASIL. Fitch
rebaixa nota e Brasil perde grau de investimento. Brasília: EBC, 2015.
Disponível em: https://agenciabrasil.ebc.com.br/economia/noticia/2015-12/fitch-rebaixa-brasil-e-pais-perde-grau-de-investimento.
Acesso em: 25 maio 2026.BALASSIANO, Marcel. Recessão brasileira
(2014-2016): uma análise por meio do método do controle sintético do
PIB, PIB per capita, taxa de investimento e taxa de desemprego. Blog do
IBRE, 2018. Disponível em: https://blogdoibre.fgv.br/posts/recessao-brasileira-2014-2016-uma-analise-por-meio-do-metodo-do-controle-sintetico-do-pib-pib.
Acesso em: 25 maio 2026.BANCO CENTRAL DO BRASIL. Sistema Gerenciador de
Séries Temporais (SGS): séries de crédito, Selic e indicadores
monetários. Brasília: BCB, 2024. Disponível em: https://www3.bcb.gov.br/sgspub/. Acesso em: 25 maio
2026.BARRETO, Flávio Ataliba; AVELINO, Pedro; FRANÇA, João Mário Santos
de. Novas evidências sobre o peso do crédito nas famílias brasileiras.
Blog do IBRE, 2026. Disponível em: https://blogdoibre.fgv.br/posts/novas-evidencias-sobre-o-peso-do-credito-nas-familias-brasileiras.
Acesso em: 25 maio 2026.COMITÊ DE DATAÇÃO DE CICLOS ECONÔMICOS (CODACE).
Cronologia de Ciclos da Economia Brasileira. Rio de Janeiro: FGV IBRE,
2024. Disponível em: https://portalibre.fgv.br/codace-cronologia. Acesso em:
25 maio 2026.CRISE econômica brasileira de 2014. In: WIKIPÉDIA: a
enciclopédia livre. [S. l.], 2025. Disponível em: https://pt.wikipedia.org/wiki/Crise_econ%C3%B4mica_brasileira_de_2014.
Acesso em: 25 maio 2026.DEPARTAMENTO INTERSINDICAL DE ESTATÍSTICA E
ESTUDOS SOCIOECONÔMICOS. Nota técnica nº 79: política de valorização do
salário mínimo — valor para 2009. São Paulo: DIEESE, 2009. Disponível
em: https://www.dieese.org.br/notatecnica/2009/notatec79SalMin2009.html.
Acesso em: 25 maio 2026.DEPARTAMENTO INTERSINDICAL DE ESTATÍSTICA E
ESTUDOS SOCIOECONÔMICOS. Nota técnica nº 135: a evolução do crédito na
economia brasileira 2008–2014. São Paulo: DIEESE, 2014. Disponível em:
https://www.dieese.org.br/notatecnica/2014/notaTec135Credito.pdf.
Acesso em: 25 maio 2026.E-CÁLCULOS. Histórico do salário mínimo. [s.l.:
s.n., s.d.]. Disponível em: https://www.ecalculos.com.br/utilitarios/historico-salario-minimo.php.
Acesso em: 25 maio 2026.FUNDAÇÃO GETULIO VARGAS. Instituto Brasileiro de
Economia (FGV IBRE). Indicadores trimestrais de PTF: 4º trimestre de
2025. Rio de Janeiro: FGV IBRE, 2026. Disponível em: https://ibre.fgv.br/sites/ibre.fgv.br/files/arquivos/u65/indicadores_trimestrais_de_ptf_-_4t2025.pdf.
Acesso em: 25 maio 2026.FUNDAÇÃO GETULIO VARGAS. Instituto Brasileiro de
Economia (FGV IBRE). Observatório da Produtividade Regis Bonelli. Rio de
Janeiro: FGV IBRE, 2024. Disponível em: https://ibre.fgv.br/observatorio-produtividade. Acesso
em: 25 maio 2026.FUNDAÇÃO GETULIO VARGAS. Instituto Brasileiro de
Economia (FGV IBRE). Portal do Ciclo Econômico. Rio de Janeiro: FGV
IBRE, 2024. Disponível em: https://ciclo-economico-ibre.fgv.br/. Acesso em: 25 maio
2026.FUNDAÇÃO GETULIO VARGAS. Instituto Brasileiro de Economia (FGV
IBRE). Resultados dos indicadores de produtividade do trabalho no quarto
trimestre de 2025. Blog do IBRE, 2026. Disponível em: https://blogdoibre.fgv.br/posts/resultados-dos-indicadores-de-produtividade-do-trabalho-no-quarto-trimestre-de-2025.
Acesso em: 25 maio 2026.FUNDAÇÃO GETULIO VARGAS. Instituto Brasileiro de
Economia (FGV IBRE). Sobre ciclos econômicos. Rio de Janeiro: FGV IBRE,
2024. Disponível em: https://portalibre.fgv.br/sobre-ciclos-economicos.
Acesso em: 25 maio 2026.FUNDAÇÃO GETULIO VARGAS. Instituto Brasileiro de
Economia (FGV IBRE). Sondagens, Índices de Confiança e Indicadores de
Atividade. Rio de Janeiro: FGV IBRE, [2026]. Disponível em: https://portalibre.fgv.br. Acesso em: 25 maio
2026.INSTITUTO BRASILEIRO DE GEOGRAFIA E ESTATÍSTICA. Contas Nacionais
Trimestrais. Rio de Janeiro: IBGE, 2024. Disponível em: https://www.ibge.gov.br/estatisticas/economicas/contas-nacionais/9300-contas-nacionais-trimestrais.html.
Acesso em: 25 maio 2026.INSTITUTO BRASILEIRO DE GEOGRAFIA E ESTATÍSTICA.
Evolução do Mercado de Trabalho: retrospectiva 2003–2014. Rio de
Janeiro: IBGE, 2015. Disponível em: https://ftp.ibge.gov.br/Trabalho_e_Rendimento/Pesquisa_Mensal_de_Emprego/Evolucao_Mercado_Trabalho/retrospectiva2003_2014.pdf.
Acesso em: 25 maio 2026.INSTITUTO BRASILEIRO DE GEOGRAFIA E ESTATÍSTICA.
Índice Nacional de Preços ao Consumidor (INPC). Rio de Janeiro: IBGE,
[2026]. Disponível em: https://www.ibge.gov.br/estatisticas/economicas/precos-e-custos/9258-indice-nacional-de-precos-ao-consumidor.html.
Acesso em: 25 maio 2026.INSTITUTO BRASILEIRO DE GEOGRAFIA E ESTATÍSTICA.
Pesquisa Mensal de Emprego (PME). Rio de Janeiro: IBGE, [2026].
Disponível em: https://www.ibge.gov.br/estatisticas/sociais/trabalho/9180-pesquisa-mensal-de-emprego.html.
Acesso em: 25 maio 2026.INSTITUTO BRASILEIRO DE GEOGRAFIA E ESTATÍSTICA.
Pesquisa Nacional por Amostra de Domicílios Contínua (PNAD Contínua).
Rio de Janeiro: IBGE, [2026]. Disponível em: https://sidra.ibge.gov.br/Tabela/1846. Acesso em: 25
maio 2026.INSTITUTO BRASILEIRO DE GEOGRAFIA E ESTATÍSTICA. Sistema IBGE
de Recuperação Automática (SIDRA): Tabelas 5932 (Contas Nacionais
Trimestrais) e 4099 (PNAD Contínua). Rio de Janeiro: IBGE, 2024.
Disponível em: https://sidra.ibge.gov.br/. Acesso em: 25 maio
2026.RANDO, Imira Taira. O Brasil e a crise financeira: políticas
econômicas (2008–2014). Trabalho de conclusão de curso — Faculdade de
Ciências e Letras, Universidade Estadual Paulista “Júlio de Mesquita
Filho”, Campus de Araraquara, [s.d.]. Disponível em: https://repositorio.unesp.br/server/api/core/bitstreams/bf788161-c4c8-4db3-905e-0791ec8e4e55/content.
Acesso em: 25 maio 2026.VELOSO, Fernando; FEIJÓ, Janaína; BARBOSA FILHO,
Fernando de Holanda; RUHE, Ana Paula. Índice de Capital Humano (ICH)
Anual. Rio de Janeiro: FGV IBRE, jun. 2023. Disponível em: https://ibre.fgv.br/sites/ibre.fgv.br/files/arquivos/u65/ich_anual_final.pdf.
Acesso em: 25 maio 2026.
LS0tDQp0aXRsZTogIkJyYXNpbDogZW0gZXhwYW5zw6NvIG91IHJlY2Vzc8Ojbz8gVW1hIGFuw6FsaXNlIGhpc3TDs3JpY2EgZG9zIGNpY2xvcyBlY29uw7RtaWNvcyBicmFzaWxlaXJvcyINCmF1dGhvcjogIlJvYmVydGEgTG9iYXRvIGUgVGhpYWdvIEZyYWdvc28iDQpkYXRlOiAiMjAyNi0wNS0yNSINCm91dHB1dDoNCiAgaHRtbF9kb2N1bWVudDoNCiAgICB0b2M6IHRydWUNCiAgICB0b2NfZmxvYXQ6IHRydWUNCiAgICB0aGVtZTogbHVtZW4NCiAgICBoaWdobGlnaHQ6IHRhbmdvDQogICAgY29kZV9mb2xkaW5nOiBzaG93DQogICAgY29kZV9kb3dubG9hZDogdHJ1ZQ0KICBwZGZfZG9jdW1lbnQ6DQogICAgdG9jOiB0cnVlDQogICAgaGlnaGxpZ2h0OiB0YW5nbw0KLS0tDQpgYGBgYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9DQprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IEZBTFNFLCBtZXNzYWdlID0gRkFMU0UsIHdhcm5pbmcgPSBGQUxTRSkNCmxpYnJhcnkoZmxleHRhYmxlKQ0KbGlicmFyeShvZmZpY2VyKQ0KbGlicmFyeShHZXRCQ0JEYXRhKQ0KbGlicmFyeShodG1sd2lkZ2V0cykNCmxpYnJhcnkod2Vic2hvdDIpDQpsaWJyYXJ5KHpvbykNCmxpYnJhcnkoZHBseXIpDQpsaWJyYXJ5KGdncGxvdDIpDQpsaWJyYXJ5KGhpZ2hjaGFydGVyKQ0KbGlicmFyeShwbG90bHkpDQpsaWJyYXJ5KHNpZHJhcikNCmxpYnJhcnkoaXBlYWRhdGFyKQ0KbGlicmFyeShxdWFudG1vZCkNCmxpYnJhcnkoc2NhbGVzKQ0KbGlicmFyeShsdWJyaWRhdGUpDQpsaWJyYXJ5KHJiY2IpDQpsaWJyYXJ5KHJlYWR4bCkNCmxpYnJhcnkod3JpdGV4bCkNCmxpYnJhcnkoaHR0cikNCmxpYnJhcnkodGlkeXIpDQpsaWJyYXJ5KGZyZWRyKQ0KZGFkb3NfZGlyIDwtICJDOi9Vc2Vycy9yb2Jlci9Eb3dubG9hZHMiDQpgYGBgYGBgDQoNCiMgSW50cm9kdcOnw6NvIA0KQ2ljbG9zIGVjb27DtG1pY29zIHPDo28gZmx1dHVhw6fDtWVzIGPDrWNsaWNhcyBkYSBhdGl2aWRhZGUgZWNvbsO0bWljYSBtYXJjYWRhcyBwZWxhIGFsdGVybsOibmNpYSBlbnRyZSBmYXNlcyBkZSBleHBhbnPDo28gZSByZWNlc3PDo28uIFN1YSBjYXJhY3RlcsOtc3RpY2EgY2VudHJhbCDDqSBxdWUsIGVtYm9yYSByZWNvcnJlbnRlcywgZXNzYXMgZmx1dHVhw6fDtWVzIG7Do28gc8OjbyBwZXJpw7NkaWNhczogbsOjbyBow6EgcmVndWxhcmlkYWRlIHF1ZSBwZXJtaXRhIHByZXZlciBjb20gcHJlY2lzw6NvIHF1YW5kbyB1bWEgZmFzZSBjb21lw6dhIG91IHRlcm1pbmEuIEFpbmRhIGFzc2ltLCBhIGFuw6FsaXNlIGRvcyBjaWNsb3MgcGFzc2Fkb3MgcGVybWl0ZSBpZGVudGlmaWNhciBwYWRyw7VlcywgcmVjb25oZWNlciBmcmFnaWxpZGFkZXMgcXVlIHNlIHJlcGV0ZW0gZSBjb21wcmVlbmRlciBtZWxob3IgYSBkaW7Dom1pY2EgZGEgZWNvbm9taWEgYnJhc2lsZWlyYSBhbyBsb25nbyBkbyB0ZW1wby4NCg0KQSBUYWJlbGEgMSBhcHJlc2VudGEgYXMgZGF0YXMgb2ZpY2lhaXMgZG9zIGNpY2xvcyBlY29uw7RtaWNvcyBicmFzaWxlaXJvcywgY29uZm9ybWUgYSBkYXRhw6fDo28gZG8gQ29taXTDqiBkZSBEYXRhw6fDo28gZGUgQ2ljbG9zIEVjb27DtG1pY29zIChDT0RBQ0UpLCBkYSBGR1Y6DQoNCioqVGFiZWxhIDE6KioNCmBgYHtyLCBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KY29kYWNlX3JlbCA8LSBkYXRhLmZyYW1lKA0KICBwaWNvID0gYygiTm92ZW1icm8gMTk4MCAoSVYpIiwgIk1hcsOnbyAxOTg3IChJKSIsICJKdWxobyAxOTg5IChJSUkpIiwNCiAgICAgICAgICAgIkphbmVpcm8gMTk5NSAoSSkiLCAiTm92ZW1icm8gMTk5NyAoSVYpIiwgIkphbmVpcm8gMjAwMSAoSSkiLA0KICAgICAgICAgICAiTm92ZW1icm8gMjAwMiAoSVYpIiwgIkFnb3N0byAyMDA4IChJSUkpIiwgIk1hcsOnbyAyMDE0IChJKSIsDQogICAgICAgICAgICI0wrogVHJpbS4gZGUgMjAxOSIpLA0KICB2YWxlID0gYygiRmV2ZXJlaXJvIDE5ODMgKEkpIiwgIk91dHVicm8gMTk4OCAoSVYpIiwgIkRlemVtYnJvIDE5OTEgKElWKSIsDQogICAgICAgICAgICJTZXRlbWJybyAxOTk1IChJSUkpIiwgIkZldmVyZWlybyAxOTk5IChJKSIsICJTZXRlbWJybyAyMDAxIChJSUkpIiwNCiAgICAgICAgICAgIkp1bmhvIDIwMDMgKElJKSIsICJEZXplbWJybyAyMDA4IChJVikiLCAiRGV6ZW1icm8gMjAxNiAoSVYpIiwNCiAgICAgICAgICAgIjLCuiBUcmltLiBkZSAyMDIwIiksDQogIHBpY29fdmFsZSA9IGMoIjI4IiwgIjIwIiwgIjMwIiwgIjkiLCAiMTYiLCAiOSIsICI4IiwgIjUiLCAiMzQiLCAi4oCTIiksDQogIG1lc2VzX2VudHJlID0gYygi4oCTIiwgIjQ4IiwgIjgiLCAiMzYiLCAiMjUiLCAiMjIiLCAiMTMiLCAiNjEiLCAiNjIiLCAi4oCTIiksDQogIHZhbGVfYW50ZXJpb3IgPSBjKCLigJMiLCAiNjgiLCAiMzgiLCAiNDUiLCAiNDEiLCAiMzEiLCAiMjEiLCAiNjYiLCAiMTE0IiwgIuKAkyIpLA0KICBwaWNvX2FudGVyaW9yID0gYygi4oCTIiwgIjc2IiwgIjI4IiwgIjY2IiwgIjM0IiwgIjM4IiwgIjIyIiwgIjY5IiwgIjY3IiwgIuKAkyIpDQopDQoNCm1lZGlhX3JvdyA8LSBkYXRhLmZyYW1lKA0KICBwaWNvID0gIkR1cmHDp8OjbyBtw6lkaWEgKGVtIG1lc2VzKSIsDQogIHZhbGUgPSAiIiwNCiAgcGljb192YWxlID0gIjE3LDciLA0KICBtZXNlc19lbnRyZSA9ICIzNCw0IiwNCiAgdmFsZV9hbnRlcmlvciA9ICI1MywwIiwNCiAgcGljb19hbnRlcmlvciA9ICI1MCwwIg0KKQ0KDQp0YWJlbGFfcmVsIDwtIGJpbmRfcm93cyhjb2RhY2VfcmVsLCBtZWRpYV9yb3cpDQoNCmZ0X3JlbCA8LSBmbGV4dGFibGUodGFiZWxhX3JlbCkgJT4lDQogIHNldF9oZWFkZXJfbGFiZWxzKA0KICAgIHBpY28gPSAiUGljbyIsDQogICAgdmFsZSA9ICJWYWxlIiwNCiAgICBwaWNvX3ZhbGUgPSAiTWVzZXMgZG9cbnBpY28gYW8gdmFsZSIsDQogICAgbWVzZXNfZW50cmUgPSAiTWVzZXMgZW50cmUgbyB2YWxlXG5hbnRlcmlvciBlIGVzdGUgcGljbyIsDQogICAgdmFsZV9hbnRlcmlvciA9ICJEbyB2YWxlIGFudGVyaW9yXG5hdMOpIGVzdGUgdmFsZSIsDQogICAgcGljb19hbnRlcmlvciA9ICJEbyBwaWNvIGFudGVyaW9yXG5hdMOpIGVzdGUgcGljbyINCiAgKSAlPiUNCiAgIyBGdW5kbyBicmFuY28gZ2VyYWwNCiAgYmcoYmcgPSAiI0ZGRkZGRiIsIHBhcnQgPSAiYWxsIikgJT4lDQogIGNvbG9yKGNvbG9yID0gIiM0NDQ0NDQiLCBwYXJ0ID0gImJvZHkiKSAlPiUNCiAgIyBIZWFkZXIgbWluaW1hbGlzdGENCiAgYmcoYmcgPSAiI0ZGRkZGRiIsIHBhcnQgPSAiaGVhZGVyIikgJT4lDQogIGNvbG9yKGNvbG9yID0gIiMwMjAyM0MiLCBwYXJ0ID0gImhlYWRlciIpICU+JQ0KICBib2xkKHBhcnQgPSAiaGVhZGVyIikgJT4lDQogICMgRGVzdGFxdWUgZXhwYW5zw6NvIDIwMDgNCiAgYmcoaSA9IDgsIGJnID0gIiNGRkY4RTciKSAlPiUNCiAgY29sb3IoaSA9IDgsIGNvbG9yID0gIiMwMjAyM0MiKSAlPiUNCiAgYm9sZChpID0gOCkgJT4lDQogICMgRGVzdGFxdWUgcmVjZXNzw6NvIDIwMTQNCiAgYmcoaSA9IDksIGJnID0gIiNFOEVBRjAiKSAlPiUNCiAgY29sb3IoaSA9IDksIGNvbG9yID0gIiMwMjAyM0MiKSAlPiUNCiAgYm9sZChpID0gOSkgJT4lDQogICMgTGluaGEgbcOpZGlhDQogIGJnKGkgPSBucm93KHRhYmVsYV9yZWwpLCBiZyA9ICIjRjVGNUY1IikgJT4lDQogIGNvbG9yKGkgPSBucm93KHRhYmVsYV9yZWwpLCBjb2xvciA9ICIjNDQ0NDQ0IikgJT4lDQogIGJvbGQoaSA9IG5yb3codGFiZWxhX3JlbCkpICU+JQ0KICBpdGFsaWMoaSA9IG5yb3codGFiZWxhX3JlbCkpICU+JQ0KICAjIEJvcmRhcyBtaW5pbWFsaXN0YXMNCiAgYm9yZGVyX3JlbW92ZSgpICU+JQ0KICBobGluZShpID0gMSwgYm9yZGVyID0gZnBfYm9yZGVyKGNvbG9yID0gIiMwMjAyM0MiLCB3aWR0aCA9IDEuNSksIHBhcnQgPSAiaGVhZGVyIikgJT4lDQogIGhsaW5lX3RvcChib3JkZXIgPSBmcF9ib3JkZXIoY29sb3IgPSAiIzAyMDIzQyIsIHdpZHRoID0gMS41KSwgcGFydCA9ICJoZWFkZXIiKSAlPiUNCiAgaGxpbmVfYm90dG9tKGJvcmRlciA9IGZwX2JvcmRlcihjb2xvciA9ICIjQ0NDQ0NDIiwgd2lkdGggPSAwLjUpLCBwYXJ0ID0gImJvZHkiKSAlPiUNCiAgIyBMaW5oYXMgc2VwYXJhZG9yYXMgc3VhdmVzDQogIGhsaW5lKGkgPSBjKDE6MTApLCBib3JkZXIgPSBmcF9ib3JkZXIoY29sb3IgPSAiI0VFRUVFRSIsIHdpZHRoID0gMC41KSwgcGFydCA9ICJib2R5IikgJT4lDQogICMgQWxpbmhhbWVudG8NCiAgYWxpZ24oYWxpZ24gPSAiY2VudGVyIiwgcGFydCA9ICJhbGwiKSAlPiUNCiAgYWxpZ24oaiA9IDE6MiwgYWxpZ24gPSAibGVmdCIsIHBhcnQgPSAiYWxsIikgJT4lDQogICMgRm9udGUNCiAgZm9udChmb250bmFtZSA9ICJBcmlhbCIsIHBhcnQgPSAiYWxsIikgJT4lDQogIGZvbnRzaXplKHNpemUgPSAxMCwgcGFydCA9ICJib2R5IikgJT4lDQogIGZvbnRzaXplKHNpemUgPSAxMCwgcGFydCA9ICJoZWFkZXIiKSAlPiUNCiAgcGFkZGluZyhwYWRkaW5nLnRvcCA9IDYsIHBhZGRpbmcuYm90dG9tID0gNiwgcGFydCA9ICJhbGwiKSAlPiUNCiAgIyBGb250ZS9jYXB0aW9uDQogIGFkZF9mb290ZXJfbGluZXMoIkZvbnRlOiBDT0RBQ0UvRkdWLUlCUkUuIikgJT4lDQogIGNvbG9yKGNvbG9yID0gIiM4ODg4ODgiLCBwYXJ0ID0gImZvb3RlciIpICU+JQ0KICBmb250c2l6ZShzaXplID0gOSwgcGFydCA9ICJmb290ZXIiKSAlPiUNCiAgaXRhbGljKHBhcnQgPSAiZm9vdGVyIikgJT4lDQogIGF1dG9maXQoKQ0KDQpmdF9yZWwNCmBgYA0KDQpFc3RlIHJlbGF0w7NyaW8gYWRvdGEgdW1hIGFib3JkYWdlbSBoaXN0w7NyaWNhLiBBbmFsaXNhLXNlLCBpbmljaWFsbWVudGUsIG8gY2ljbG8gZGUgZXhwYW5zw6NvIGRlIDIwMDjigJMyMDE0IGUgYSByZWNlc3PDo28gZGUgMjAxNOKAkzIwMTYsIGJ1c2NhbmRvIGlkZW50aWZpY2FyIG9zIG1vdG9yZXMgZGUgY3Jlc2NpbWVudG8gZSBhcyBmcmFnaWxpZGFkZXMgZXN0cnV0dXJhaXMgZGUgY2FkYSBwZXLDrW9kby4gRW0gc2VndWlkYSwgb2JzZXJ2YS1zZSBxdWFpcyBkZXNzZXMgcGFkcsO1ZXMgcGVyc2lzdGVtLCBzZSB0cmFuc2Zvcm1hcmFtIG91IGZvcmFtIHN1cGVyYWRvcyBubyBCcmFzaWwgYXR1YWwuIA0KDQpBIGVzY29saGEgcG9yIHVtYSBhbsOhbGlzZSBoaXN0w7NyaWNhIG1haXMgYXByb2Z1bmRhZGEgcGFydGUgZGEgcHJlbWlzc2EgZGUgcXVlIG11aXRhcyBkYXMgcXVlc3TDtWVzIGVzdHJ1dHVyYWlzIHF1ZSBhZmV0YW0gYSBhdGl2aWRhZGUgZWNvbsO0bWljYSBicmFzaWxlaXJhIGhvamUgdMOqbSByYcOtemVzIGVtIGNpY2xvcyBhbnRlcmlvcmVzLiBDb21wcmVlbmTDqi1sYXMgZXhpZ2UsIHBvcnRhbnRvLCBvbGhhciBwYXJhIHRyw6FzIGFudGVzIGRlIGludGVycHJldGFyIG8gcHJlc2VudGUuDQoNCiMgMS4gQSBFeHBhbnPDo28gUMOzcy1DcmlzZSAoMjAwOOKAkzIwMTQpDQojIyAxLjEgTyBjb2xjaMOjbyBleHRlcm5vOiBjb21vIG8gQnJhc2lsIHNhaXUgZGEgY3Jpc2UNCg0KQ29udGV4dHVhbGl6YW5kbyBoaXN0b3JpY2FtZW50ZSwgYSBjcmlzZSBkZSAyMDA4IGZvaSBtYXJjYWRhIHBvciB1bWEgZXh0cmVtYSBkZXNjb25maWFuw6dhIG5vIG1lcmNhZG8uIENvbSBhIHF1ZWJyYSBkZSBpbnN0aXR1acOnw7VlcyBjb21vIG8gTGVobWFuIEJyb3RoZXJzIC0gdW0gZG9zIG1haW9yZXMgYmFuY29zIGRlIGludmVzdGltZW50byBkbyBtdW5kbyAtLCBzdXJnaXUgdW1hIHByZW9jdXBhw6fDo28gZ2VuZXJhbGl6YWRhOiBvIHF1ZSBwb2RlcmlhIGFjb250ZWNlciBjb20gbyBzaXN0ZW1hIGZpbmFuY2Vpcm8gZ2xvYmFsPyBFbSBtb21lbnRvcyBkZSBtZWRvLCBvY29ycmUgbyBjaGFtYWRvIGZsaWdodC10by1xdWFsaXR5LCBhIGNvcnJpZGEgcG9yIGF0aXZvcyBtYWlzIHNlZ3Vyb3MsIGNvbW8gbyBkw7NsYXIuIENvbSBpc3NvLCBhIGRlbWFuZGEgcGVsYSBtb2VkYSBhbWVyaWNhbmEgYXVtZW50YSBhYnJ1cHRhbWVudGUsIHByZXNzaW9uYW5kbyBzZXUgcHJlw6dvIHBhcmEgY2ltYS4gDQoNCk5vIEdyw6FmaWNvIDEsIG9ic2VydmEtc2UgcXVlIG8gQnJhc2lsIGhhdmlhIGFjdW11bGFkbyByZXNlcnZhcyBpbnRlcm5hY2lvbmFpcyBhbyBsb25nbyBkb3MgYW5vcyBhbnRlcmlvcmVzIMOgIGNyaXNlLiBObyBtb21lbnRvIGRvIGNob3F1ZSwgZXNzYXMgcmVzZXJ2YXMgcmVjdWFyYW0sIGV2aWRlbmNpYW5kbyBzZXUgdXNvIGNvbW8gYW1vcnRlY2Vkb3IuIEEgbGluaGEgZG8gY8OibWJpbyBlbSBzZXUgcG9udG8gbWFpcyBhbHRvIGNvcnJlc3BvbmRlIGV4YXRhbWVudGUgYW8gcGVyw61vZG8gZW0gcXVlIGFzIHJlc2VydmFzIGVzdGF2YW0gc2VuZG8gY29uc3VtaWRhcywgaWx1c3RyYW5kbyBhIHJlbGHDp8OjbyBlbnRyZSBvcyBkb2lzIG1vdmltZW50b3MuDQoNCioqR3LDoWZpY28gMToqKg0KDQpgYGB7ciwgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCg0Kc3RhcnRfZGF0ZSA8LSBhcy5EYXRlKCIyMDA0LTAxLTAxIikNCmVuZF9kYXRlICAgPC0gYXMuRGF0ZSgiMjAxNC0wMy0zMSIpDQoNCmNvbF9yZXNlcnZhcyA8LSAiI0ZFQjAxNSINCmNvbF9kb2xhciAgICA8LSAiIzAyMDIzQyINCg0KIyBSZXNlcnZhczogU0dTIDM1NDYg4oCUIG1lbnNhbCwgVVMkIG1pbGjDtWVzDQpyZXNlcnZhcyA8LSBnYmNiZF9nZXRfc2VyaWVzKA0KICBpZCA9IDM1NDYsDQogIGZpcnN0LmRhdGUgPSBzdGFydF9kYXRlLA0KICBsYXN0LmRhdGUgID0gZW5kX2RhdGUsDQogIHVzZS5tZW1vaXNlID0gRkFMU0UNCikgfD4NCiAgc2VsZWN0KGRhdGUgPSByZWYuZGF0ZSwgcmVzZXJ2YXMgPSB2YWx1ZSkNCg0KIyBEw7NsYXI6IFNHUyAxMDgxMyDigJQgZGnDoXJpbzsgY29sYXBzYSBwYXJhIGZpbmFsIGRlIG3DqnMgKG3DqWRpYSBtZW5zYWwpDQpkb2xhciA8LSBnYmNiZF9nZXRfc2VyaWVzKA0KICBpZCA9IDEwODEzLA0KICBmaXJzdC5kYXRlID0gc3RhcnRfZGF0ZSwNCiAgbGFzdC5kYXRlICA9IGVuZF9kYXRlLA0KICB1c2UubWVtb2lzZSA9IEZBTFNFDQopIHw+DQogIHNlbGVjdChkYXRlID0gcmVmLmRhdGUsIHVzZCA9IHZhbHVlKSB8Pg0KICBtdXRhdGUobWVzID0gZmxvb3JfZGF0ZShkYXRlLCAibW9udGgiKSkgfD4NCiAgZ3JvdXBfYnkobWVzKSB8Pg0KICBzdW1tYXJpc2UodXNkID0gbWVhbih1c2QsIG5hLnJtID0gVFJVRSksIC5ncm91cHMgPSAiZHJvcCIpIHw+DQogIHJlbmFtZShkYXRlID0gbWVzKQ0KDQpoYyA8LSBoaWdoY2hhcnQodHlwZSA9ICJzdG9jayIpIHw+DQogIGhjX3RpdGxlKHRleHQgPSAiVmFyaWHDp8OjbyBkYXMgUmVzZXJ2YXMgSW50ZXJuYWNpb25haXMgZSBkYSBUYXhhIGRlIEPDom1iaW88YnI+MjAwNC0yMDE0IiwNCiAgICAgICAgICAgYWxpZ24gPSAiY2VudGVyIiwNCiAgICAgICAgICAgc3R5bGUgPSBsaXN0KGNvbG9yID0gIiMwMjAyM0MiLCBmb250V2VpZ2h0ID0gImJvbGQiKSkgfD4NCiAgaGNfc3VidGl0bGUodGV4dCA9ICJTw6lyaWVzIG1lbnNhaXMg4oCUIGphbi8yMDA0IGEgbWFyLzIwMTQiLA0KICAgICAgICAgICAgICBhbGlnbiA9ICJjZW50ZXIiKSB8Pg0KICBoY195QXhpc19tdWx0aXBsZXMoDQogICAgbGlzdCh0aXRsZSA9IGxpc3QodGV4dCA9ICJSZXNlcnZhcyBpbnRlcm5hY2lvbmFpczxicj4oVVMkIG1pbGjDtWVzKSIsDQogICAgICAgICAgICAgICAgICAgICAgc3R5bGUgPSBsaXN0KGNvbG9yID0gY29sX3Jlc2VydmFzKSksDQogICAgICAgICBsYWJlbHMgPSBsaXN0KHN0eWxlID0gbGlzdChjb2xvciA9IGNvbF9yZXNlcnZhcykpLA0KICAgICAgICAgb3Bwb3NpdGUgPSBGQUxTRSksDQogICAgbGlzdCh0aXRsZSA9IGxpc3QodGV4dCA9ICJUYXhhIGRlIGPDom1iaW88YnI+KFIkL1VTJCkiLA0KICAgICAgICAgICAgICAgICAgICAgIHN0eWxlID0gbGlzdChjb2xvciA9IGNvbF9kb2xhcikpLA0KICAgICAgICAgbGFiZWxzID0gbGlzdChzdHlsZSA9IGxpc3QoY29sb3IgPSBjb2xfZG9sYXIpKSwNCiAgICAgICAgIG9wcG9zaXRlID0gVFJVRSkNCiAgKSB8Pg0KICBoY19hZGRfc2VyaWVzKGRhdGEgPSByZXNlcnZhcywgdHlwZSA9ICJsaW5lIiwNCiAgICAgICAgICAgICAgICBoY2Flcyh4ID0gZGF0ZSwgeSA9IHJlc2VydmFzKSwNCiAgICAgICAgICAgICAgICBuYW1lID0gIlJlc2VydmFzIGludGVybmFjaW9uYWlzIiwNCiAgICAgICAgICAgICAgICBjb2xvciA9IGNvbF9yZXNlcnZhcywgeUF4aXMgPSAwKSB8Pg0KICBoY19hZGRfc2VyaWVzKGRhdGEgPSBkb2xhciwgdHlwZSA9ICJsaW5lIiwNCiAgICAgICAgICAgICAgICBoY2Flcyh4ID0gZGF0ZSwgeSA9IHVzZCksDQogICAgICAgICAgICAgICAgbmFtZSA9ICJVU0QvQlJMIiwNCiAgICAgICAgICAgICAgICBjb2xvciA9IGNvbF9kb2xhciwgeUF4aXMgPSAxKSB8Pg0KICBoY190b29sdGlwKHNoYXJlZCA9IFRSVUUsIHZhbHVlRGVjaW1hbHMgPSAyKSB8Pg0KICBoY19sZWdlbmQoZW5hYmxlZCA9IFRSVUUpIHw+DQogIGhjX2NyZWRpdHMoZW5hYmxlZCA9IFRSVUUsDQogICAgICAgICAgICAgdGV4dCA9ICJGb250ZTogQmFuY28gQ2VudHJhbCBkbyBCcmFzaWwgKFNHUyAzNTQ2IGUgMTA4MTMpLiBFbGFib3Jhw6fDo28gcHLDs3ByaWEgSWJNYWNyb0JILiIsDQogICAgICAgICAgICAgaHJlZiA9ICIiKQ0KDQpoYw0KYGBgDQoNCkEgaW50ZXJ2ZW7Dp8OjbyBkbyBCYW5jbyBDZW50cmFsIGZvaSBmb2NhZGEgZW0gcmVzb2x2ZXIgYSBlc2Nhc3NleiBkZSBkw7NsYXJlcyBubyBtZXJjYWRvLiBBIHByaW5jaXBhbCB0w6F0aWNhIGZvaSBvIHVzbyBkZSB2ZW5kYXMgY29tIGNvbXByb21pc3NvIGRlIHJlY29tcHJhOiBvIEJDIG9mZXJlY2V1IGTDs2xhcmVzIGFvcyBiYW5jb3MgY29tIGEgZ2FyYW50aWEgZGUgcmVjb21wcsOhLWxvcyBlbSBkYXRhIGZ1dHVyYSwgc2FuYW5kbyBhIGZhbHRhIGRlIGxpcXVpZGV6IHNlbSBjb21wcm9tZXRlciBwZXJtYW5lbnRlbWVudGUgbyBlc3RvcXVlIGRlIHJlc2VydmFzLiBEZSBmb3JtYSBjb21wbGVtZW50YXIsIG8gQkMgdXRpbGl6b3UgYXMgcmVzZXJ2YXMgcGFyYSBzdXByaXIgYSBlc2Nhc3NleiBkZSBjcsOpZGl0byBleHRlcm5vIG5vIGZpbmFuY2lhbWVudG8gZG8gY29tw6lyY2lvIGV4dGVyaW9yIC0gYXMgY2hhbWFkYXMgbGluaGFzIGRlIHRyYWRlIGZpbmFuY2UgLSBxdWUgaGF2aWFtIHNpZG8gY29ydGFkYXMgcGVsb3MgYmFuY29zIGludGVybmFjaW9uYWlzIGNvbSBhIGVjbG9zw6NvIGRhIGNyaXNlLiBTZW0gZXNzZSBzdXBvcnRlLCBvcyBleHBvcnRhZG9yZXMgYnJhc2lsZWlyb3MgbsOjbyB0ZXJpYW0gY29tbyBmaW5hbmNpYXIgbyBpbnRlcnZhbG8gZW50cmUgYSBwcm9kdcOnw6NvIGUgbyByZWNlYmltZW50byBkYXMgdmVuZGFzIGFvIGV4dGVyaW9yLiAgQWzDqW0gZGlzc28sIG8gQkMgdXRpbGl6b3UgbyBzd2FwIGNhbWJpYWwgLSB1bSBjb250cmF0byBxdWUgb2ZlcmVjZSBwcm90ZcOnw6NvIGNhbWJpYWwgc2VtIGRlc2VtYm9sc28gaW1lZGlhdG8gZGUgZMOzbGFyIGbDrXNpY28gLSwgaW5zdHJ1bWVudG8gZXNzZW5jaWFsIHBhcmEgYW5jb3JhciBleHBlY3RhdGl2YXMgZSBlc3RhYmlsaXphciBvIGPDom1iaW8gbm8gbWVyY2FkbyBmdXR1cm8uDQoNCkEgYXR1YcOnw6NvIGRvIEJhbmNvIENlbnRyYWwgcGVybWl0aXUgcXVlIG8gcGHDrXMgbWl0aWdhc3NlIG9zIGVmZWl0b3MgZGEgY3Jpc2UgZGUgZm9ybWEgcmVsYXRpdmFtZW50ZSByw6FwaWRhLCBjb250ZW5kbyBvIGNvbnTDoWdpby4gTyB2YWxlIGRvIGNpY2xvIGZvaSBkYXRhZG8gbm8gcXVhcnRvIHRyaW1lc3RyZSBkZSAyMDA4LCBhIHBhcnRpciBkbyBxdWFsIG8gQnJhc2lsIGluaWNpb3UgdW1hIG5vdmEgdHJhamV0w7NyaWEgZGUgZXhwYW5zw6NvLiBWYWxlIGRlc3RhY2FyIHF1ZSBhcyBkYXRhcyBkbyBDT0RBQ0Ugc8OjbyBjb25maXJtYWRhcyBjb20gdW1hIGNlcnRhIGRlZmFzYWdlbSAtIGVtIGRlemVtYnJvIGRlIDIwMDgsIGEgcG9wdWxhw6fDo28gbsOjbyB0aW5oYSBjb21vIHNhYmVyIHF1ZSBzZSBpbmljaWF2YSB1bWEgdHJhamV0w7NyaWEgZGUgZXhwYW5zw6NvLg0KDQojIyAxLjIgT3MgbW90b3JlcyBkYSBleHBhbnPDo28NCg0KQSBleHBhbnPDo28gYnJhc2lsZWlyYSBuw6NvIGZvaSBmcnV0byBkZSB1bSDDum5pY28gZmF0b3IsIG1hcyBkZSB1bSBjb25qdW50byBkZSB2YXJpw6F2ZWlzIGFnaW5kbyBkZSBmb3JtYSBhcnRpY3VsYWRhLiBDb20gbyBjb2xjaMOjbyBleHRlcm5vIGdhcmFudGluZG8gZXN0YWJpbGlkYWRlLCBvIGNyZXNjaW1lbnRvIGRlIDIwMDjigJMyMDE0IGZvaSBwdXhhZG8gaW50ZXJuYW1lbnRlIC0gY29uc3VtbyBkYXMgZmFtw61saWFzLCBleHBhbnPDo28gZG8gY3LDqWRpdG8sIGZvcm1hbGl6YcOnw6NvIGRvIHRyYWJhbGhvLCBlIGdhc3RvIHDDumJsaWNvIC0gaW1wdWxzaW9uYXJhbSBjb25qdW50YW1lbnRlIGEgZGVtYW5kYSBhZ3JlZ2FkYS4gDQoNCiMjIyAxLjIuMSBSZW5kYSBlIGNvbnN1bW8gZGFzIGZhbcOtbGlhcw0KRHVyYW50ZSBvIHBlcsOtb2RvIGRlIGV4cGFuc8OjbywgbyBjb25zdW1vIGRhcyBmYW3DrWxpYXMgY3Jlc2NldSBkZSBmb3JtYSBzdXN0ZW50YWRhIGUgc2UgZmlybW91IGNvbW8gdW0gY29tcG9uZW50ZSBlc3TDoXZlbCBkYSBkZW1hbmRhIGFncmVnYWRhLiBFc3NlIG1vdmltZW50byDDqSwgYW8gbWVzbW8gdGVtcG8sIGNhdXNhIGUgY29uc2VxdcOqbmNpYSBkbyBjaWNsbzogY2F1c2EsIHBvcnF1ZSBhIGV4cGFuc8OjbyBkbyBjb25zdW1vIGVsZXZvdSBhIGRlbWFuZGEsIGVzdGltdWxhbmRvIHByb2R1w6fDo28gZSBjb250cmF0YcOnw7VlczsgY29uc2VxdcOqbmNpYSwgcG9ycXVlIG8gYXVtZW50byBkbyBlbXByZWdvIGUgZGEgcmVuZGEgYWxpbWVudG91IGRlIHZvbHRhIGEgY2FwYWNpZGFkZSBkZSBjb25zdW1pci4gTyBxdWUgZGVzdHJhdm91IGVzc2UgY2ljbG8sIHBvcsOpbSwgbsOjbyBmb2kgYWxlYXTDs3JpbyAtIGVzdGV2ZSBsaWdhZG8gw6AgcG9sw610aWNhIGRlIHZhbG9yaXphw6fDo28gZG8gc2Fsw6FyaW8gbcOtbmltby4NCg0KQSByZWdyYSwgbmVnb2NpYWRhIGVtIDIwMDcsIGZpeG91IGRvaXMgY29tcG9uZW50ZXMgcGFyYSBvIHJlYWp1c3RlIGFudWFsOiAoaSkgbyBJTlBDW14gMV0gZG8gcGVyw61vZG8sIHF1ZSBhcGVuYXMgcmVww7VlIGEgaW5mbGHDp8OjbyBlLCBwb3J0YW50bywgbsOjbyBpbXBsaWNhIGdhbmhvIHJlYWw7IGUgKGlpKSBhIHZhcmlhw6fDo28gZG8gUElCIGRlZmFzYWRhIGVtIGRvaXMgYW5vcywgcXVlIGNvbnN0aXR1aSBvIGdhbmhvIHJlYWwgcHJvcHJpYW1lbnRlIGRpdG8uIEFzc2ltLCBvIHJlYWp1c3RlIGRlIDIwMDggaW5jb3Jwb3JvdSBvIFBJQiBkZSAyMDA2OyBvIGRlIDIwMDksIG8gZGUgMjAwNzsgbyBkZSAyMDEwLCBvIGRlIDIwMDguIEEgdHJhamV0w7NyaWEgY29uanVudGEgZG8gc2Fsw6FyaW8gbcOtbmltbyByZWFsIGUgZG8gY29uc3VtbyBkYXMgZmFtw61saWFzIHBvZGUgc2VyIHZpc3RhIG5vIGdyw6FmaWNvIDIuDQoNClteIDFdIE5vdGE6IMONbmRpY2UgTmFjaW9uYWwgZGUgUHJlw6dvcyBhbyBDb25zdW1pZG9yLCBjYWxjdWxhZG8gcGVsbyBJQkdFLiBNZWRlIGEgaW5mbGHDp8OjbyBkYSBjZXN0YSBkZSBjb25zdW1vIGRhcyBmYW3DrWxpYXMgY29tIHBlc3NvYSBkZSByZWZlcsOqbmNpYSBhc3NhbGFyaWFkYSBlIHJlbmRpbWVudG8gZW50cmUgMSBlIDUgc2Fsw6FyaW9zIG3DrW5pbW9zLCBlbSDDoXJlYXMgdXJiYW5hcy4gw4ksIHBvcnRhbnRvLCBvIMOtbmRpY2UgcXVlIHJlZmxldGUgYSBpbmZsYcOnw6NvIGVuZnJlbnRhZGEgcGVsYSBwcsOzcHJpYSBwb3B1bGHDp8OjbyBhZmV0YWRhIHBlbG8gcmVhanVzdGUgZG8gU00sIGRhw60gc3VhIGVzY29saGEgY29tbyBjb21wb25lbnRlIGRlIHJlcG9zacOnw6NvIG5hIHJlZ3JhLg0KDQoqKkdyw6FmaWNvIDI6KiogDQpgYGB7ciwgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCmNvbnN1bW9mYW0gPC0gcmVhZF9leGNlbCgiQzovVXNlcnMvcm9iZXIvT25lRHJpdmUvSWJNYWNyby9jb25zdW1vZmFtMS54bHN4IikNCnRyaW1lc3RyZXMgPC0gYXMuY2hhcmFjdGVyKGNvbnN1bW9mYW1bMywgLTFdKQ0KdmFsb3JlcyA8LSBhcy5udW1lcmljKGFzLmNoYXJhY3Rlcihjb25zdW1vZmFtWzUsIC0xXSkpDQpjb25zdW1vIDwtIGRhdGEuZnJhbWUoDQogIHRyaW1lc3RyZSA9IHRyaW1lc3RyZXMsDQogIHZhbG9yID0gdmFsb3Jlcw0KKSAlPiUNCiAgbXV0YXRlKA0KICAgIGFubyA9IGFzLmludGVnZXIoc3Vic3RyKHRyaW1lc3RyZSwgbmNoYXIodHJpbWVzdHJlKS0zLCBuY2hhcih0cmltZXN0cmUpKSksDQogICAgdHJpbSA9IGNhc2Vfd2hlbigNCiAgICAgIGdyZXBsKCIxwroiLCB0cmltZXN0cmUpIH4gMSwNCiAgICAgIGdyZXBsKCIywroiLCB0cmltZXN0cmUpIH4gMiwNCiAgICAgIGdyZXBsKCIzwroiLCB0cmltZXN0cmUpIH4gMywNCiAgICAgIGdyZXBsKCI0wroiLCB0cmltZXN0cmUpIH4gNA0KICAgICksDQogICAgZGF0YSA9IGFzLkRhdGUocGFzdGUwKGFubywgIi0iLCBmb3JtYXRDKHRyaW0gKiAzIC0gMiwgd2lkdGggPSAyLCBmbGFnID0gIjAiKSwgIi0xNSIpKSwNCiAgICBkYXRhX21zID0gYXMubnVtZXJpYyhhcy5QT1NJWGN0KGRhdGEsIHR6ID0gIlVUQyIpKSAqIDEwMDANCiAgKQ0KZGFkb3MgPC0gY29uc3VtbyAlPiUgc2VsZWN0KHRpbWVzdGFtcCA9IGRhdGFfbXMsIHZhbG9yKQ0KDQojID09PSBEQURPUyBERSBTQUzDgVJJTyBNw41OSU1PID09PQ0Kc2FsYXJpb190cmltIDwtIGRhdGEuZnJhbWUoDQogIGRhdGEgPSBhcy5EYXRlKGMoDQogICAgIjIwMDktMDEtMTUiLCAiMjAwOS0wNC0xNSIsICIyMDA5LTA3LTE1IiwgIjIwMDktMTAtMTUiLA0KICAgICIyMDEwLTAxLTE1IiwgIjIwMTAtMDQtMTUiLCAiMjAxMC0wNy0xNSIsICIyMDEwLTEwLTE1IiwNCiAgICAiMjAxMS0wMS0xNSIsICIyMDExLTA0LTE1IiwgIjIwMTEtMDctMTUiLCAiMjAxMS0xMC0xNSIsDQogICAgIjIwMTItMDEtMTUiLCAiMjAxMi0wNC0xNSIsICIyMDEyLTA3LTE1IiwgIjIwMTItMTAtMTUiLA0KICAgICIyMDEzLTAxLTE1IiwgIjIwMTMtMDQtMTUiLCAiMjAxMy0wNy0xNSIsICIyMDEzLTEwLTE1IiwNCiAgICAiMjAxNC0wMS0xNSINCiAgKSksDQogIHZhbG9yID0gYygNCiAgICA0MTUsIDQ2NSwgNDY1LCA0NjUsDQogICAgNTEwLCA1MTAsIDUxMCwgNTEwLA0KICAgIDU0MCwgNTQ1LCA1NDUsIDU0NSwNCiAgICA2MjIsIDYyMiwgNjIyLCA2MjIsDQogICAgNjc4LCA2NzgsIDY3OCwgNjc4LA0KICAgIDcyNA0KICApDQopICU+JQ0KICBtdXRhdGUoZGF0YV9tcyA9IGFzLm51bWVyaWMoYXMuUE9TSVhjdChkYXRhLCB0eiA9ICJVVEMiKSkgKiAxMDAwKQ0KZGFkb3Nfc2FsYXJpbyA8LSBzYWxhcmlvX3RyaW0gJT4lIHNlbGVjdCh0aW1lc3RhbXAgPSBkYXRhX21zLCB2YWxvcikNCg0KIyA9PT0gR1LDgUZJQ08gPT09DQpncmFmaWNvIDwtIGhpZ2hjaGFydCh0eXBlID0gInN0b2NrIikgJT4lDQogIGhjX2NoYXJ0KA0KICAgIGJhY2tncm91bmRDb2xvciA9ICIjRkZGRkZGIiwNCiAgICBzcGFjaW5nVG9wID0gMjAsIHNwYWNpbmdSaWdodCA9IDIwLA0KICAgIHNwYWNpbmdCb3R0b20gPSAyMCwgc3BhY2luZ0xlZnQgPSAyMCwNCiAgICBtYXJnaW5SaWdodCA9IDgwICAjIGV2aXRhIGNvcnRlIGRvIGVpeG8gZGlyZWl0byBuYSBleHBvcnRhw6fDo28NCiAgKSAlPiUNCiAgaGNfYWRkX3NlcmllcygNCiAgICBkYXRhID0gbGlzdF9wYXJzZTIoZGFkb3MpLA0KICAgIHR5cGUgPSAibGluZSIsDQogICAgbmFtZSA9ICJEZXNwZXNhIGRlIENvbnN1bW8gZGFzIEZhbcOtbGlhcyIsDQogICAgY29sb3IgPSAiIzAyMDIzQyIsDQogICAgbGluZVdpZHRoID0gMywNCiAgICB5QXhpcyA9IDAsDQogICAgbWFya2VyID0gbGlzdChlbmFibGVkID0gRkFMU0UpLA0KICAgIHRvb2x0aXAgPSBsaXN0KHZhbHVlRGVjaW1hbHMgPSAwLCB2YWx1ZVN1ZmZpeCA9ICIgUiQgbWkiKQ0KICApICU+JQ0KICBoY19hZGRfc2VyaWVzKA0KICAgIGRhdGEgPSBsaXN0X3BhcnNlMihkYWRvc19zYWxhcmlvKSwNCiAgICB0eXBlID0gImxpbmUiLA0KICAgIG5hbWUgPSAiU2Fsw6FyaW8gTcOtbmltbyIsDQogICAgY29sb3IgPSAiI0ZFQjAxNSIsDQogICAgbGluZVdpZHRoID0gMiwNCiAgICB5QXhpcyA9IDEsDQogICAgZGFzaFN0eWxlID0gIlNvbGlkIiwNCiAgICBtYXJrZXIgPSBsaXN0KGVuYWJsZWQgPSBGQUxTRSksDQogICAgdG9vbHRpcCA9IGxpc3QodmFsdWVEZWNpbWFscyA9IDAsIHZhbHVlUHJlZml4ID0gIlIkICIpDQogICkgJT4lDQogIGhjX3lBeGlzX211bHRpcGxlcygNCiAgICBsaXN0KA0KICAgICAgdGl0bGUgPSBsaXN0KHRleHQgPSAiUiQgbWlsaMO1ZXMgKHByZcOnb3MgY29ycmVudGVzKSIsDQogICAgICAgICAgICAgICAgICAgc3R5bGUgPSBsaXN0KGNvbG9yID0gIiM0NDQ0NDQiLCBmb250U2l6ZSA9ICIxMnB4IikpLA0KICAgICAgZ3JpZExpbmVDb2xvciA9ICIjRTZFNkU2IiwNCiAgICAgIGxhYmVscyA9IGxpc3Qoc3R5bGUgPSBsaXN0KGNvbG9yID0gIiM0NDQ0NDQiKSkNCiAgICApLA0KICAgIGxpc3QoDQogICAgICB0aXRsZSA9IGxpc3QodGV4dCA9ICJTYWzDoXJpbyBNw61uaW1vIChSJCkiLA0KICAgICAgICAgICAgICAgICAgIHN0eWxlID0gbGlzdChjb2xvciA9ICIjQzlBODRDIiwgZm9udFNpemUgPSAiMTJweCIpKSwNCiAgICAgIG9wcG9zaXRlID0gVFJVRSwNCiAgICAgIGdyaWRMaW5lV2lkdGggPSAwLA0KICAgICAgbGFiZWxzID0gbGlzdChzdHlsZSA9IGxpc3QoY29sb3IgPSAiI0M5QTg0QyIpKQ0KICAgICkNCiAgKSAlPiUNCiAgaGNfeEF4aXMoDQogICAgbGluZUNvbG9yID0gIiNEOUQ5RDkiLA0KICAgIHRpY2tDb2xvciA9ICIjRDlEOUQ5IiwNCiAgICBsYWJlbHMgPSBsaXN0KHN0eWxlID0gbGlzdChjb2xvciA9ICIjNDQ0NDQ0IikpDQogICkgJT4lDQogIGhjX3Bsb3RPcHRpb25zKA0KICAgIHNlcmllcyA9IGxpc3QoDQogICAgICBhbmltYXRpb24gPSBGQUxTRSwNCiAgICAgIHN0YXRlcyA9IGxpc3QoaW5hY3RpdmUgPSBsaXN0KG9wYWNpdHkgPSAxKSkNCiAgICApDQogICkgJT4lDQogIGhjX3RpdGxlKA0KICAgIHRleHQgPSAiRGVzcGVzYSBkZSBDb25zdW1vIGRhcyBGYW3DrWxpYXMgZSBTYWzDoXJpbyBNw61uaW1vIOKAlCBCcmFzaWwiLA0KICAgIHN0eWxlID0gbGlzdChmb250U2l6ZSA9ICIyMHB4IiwgZm9udFdlaWdodCA9ICJib2xkIiwgY29sb3IgPSAiIzExMTExMSIpDQogICkgJT4lDQogIGhjX3N1YnRpdGxlKA0KICAgIHRleHQgPSAiQ29uc3VtbyBlbSBSJCBtaWxow7VlcyAocHJlw6dvcyBjb3JyZW50ZXMpIHwgU2Fsw6FyaW8gbcOtbmltbyBlbSBSJCDigJQgMVQyMDA5IGEgNFQyMDE0IiwNCiAgICBzdHlsZSA9IGxpc3QoZm9udFNpemUgPSAiMTNweCIsIGNvbG9yID0gIiM2NjY2NjYiKQ0KICApICU+JQ0KICBoY190b29sdGlwKA0KICAgIHNoYXJlZCA9IFRSVUUsDQogICAgY3Jvc3NoYWlycyA9IFRSVUUsDQogICAgYmFja2dyb3VuZENvbG9yID0gIiNGRkZGRkYiLA0KICAgIGJvcmRlckNvbG9yID0gIiNEOUQ5RDkiLA0KICAgIGJvcmRlclJhZGl1cyA9IDgsDQogICAgc2hhZG93ID0gRkFMU0UsDQogICAgc3R5bGUgPSBsaXN0KGZvbnRTaXplID0gIjEycHgiKQ0KICApICU+JQ0KICBoY19sZWdlbmQoZW5hYmxlZCA9IFRSVUUpICU+JQ0KICBoY19yYW5nZVNlbGVjdG9yKGVuYWJsZWQgPSBGQUxTRSkgJT4lDQogIGhjX25hdmlnYXRvcihlbmFibGVkID0gRkFMU0UpICU+JQ0KICBoY19zY3JvbGxiYXIoZW5hYmxlZCA9IEZBTFNFKSAlPiUNCiAgaGNfY3JlZGl0cygNCiAgICBlbmFibGVkID0gVFJVRSwNCiAgICB0ZXh0ID0gIkZvbnRlOiBJQkdFL0NvbnRhcyBOYWNpb25haXM7IE1URS4gRWxhYm9yYcOnw6NvIHByw7NwcmlhIEliTWFjcm9CSC4iLA0KICAgIHN0eWxlID0gbGlzdChmb250U2l6ZSA9ICIxMHB4IiwgY29sb3IgPSAiIzc3Nzc3NyIpDQogICkNCmdyYWZpY28NCmBgYA0KDQpWYWxlIGRlc3RhY2FyLCBhaW5kYSwgcXVlIG8gc2Fsw6FyaW8gbcOtbmltbyBuw6NvIGltcGFjdGEgYXBlbmFzIG9zIHRyYWJhbGhhZG9yZXMgcXVlIHJlY2ViZW0gZGlyZXRhbWVudGUgbyBwaXNvLiBTZXVzIGVmZWl0b3Mgc2UgZXNwYWxoYW0gcGVsYSBlc3RydXR1cmEgc2FsYXJpYWwgZGUgZm9ybWEgbWFpcyBhbXBsYS4gQ2F0ZWdvcmlhcyBwcm9maXNzaW9uYWlzIGNvbSBwaXNvcyBkZWZpbmlkb3MgZW0gbcO6bHRpcGxvcyBkbyBTTSwgY29tbyBlbmdlbmhlaXJvcywgbcOpZGljb3MgZSBhZ3LDtG5vbW9zLCB0YW1iw6ltIHTDqm0gc2V1cyByZW5kaW1lbnRvcyByZWFqdXN0YWRvcyBxdWFuZG8gbyBwaXNvIGF1bWVudGEuIEFsw6ltIGRpc3NvLCBtZXNtbyB0cmFiYWxoYWRvcmVzIHNlbSB2w61uY3VsbyBmb3JtYWwgY29tIG8gU00gdGVuZGVtIGEgcmVpdmluZGljYXIgcmVhanVzdGVzIHF1YW5kbyBlbGUgc29iZSBlbSB0ZXJtb3MgcmVhaXMsIGrDoSBxdWUgbyB2YWxvciByZWxhdGl2byBkZSBzZXVzIHByw7NwcmlvcyBzYWzDoXJpb3MgZGltaW51aSBlbSBjb21wYXJhw6fDo28gYW8gcmVzdGFudGUgZGEgZXN0cnV0dXJhIHNhbGFyaWFsLiANCg0KRGVzc2EgZm9ybWEsIGVsZSBmdW5jaW9uYSBjb21vIHVtYSByZWZlcsOqbmNpYSBpbXBvcnRhbnRlIHBhcmEgb3Mgc2Fsw6FyaW9zIG5vIEJyYXNpbCwgcHJvZHV6aW5kbyBlZmVpdG9zIHF1ZSB2w6NvIG11aXRvIGFsw6ltIGRvIGdydXBvIHF1ZSBlZmV0aXZhbWVudGUgcmVjZWJlIG8gcGlzby4NClBvcsOpbSwgbyBhdW1lbnRvIGRvIGNvbnN1bW8gbsOjbyBwb2RlIHNlciBhdHJpYnXDrWRvIGludGVncmFsbWVudGUgYW8gc2Fsw6FyaW8gbcOtbmltby4gQ29tbyBzZSBvYnNlcnZhIG5vIGdyw6FmaWNvIDIsIGEgZGVzcGVzYSBkbyBjb25zdW1vIGNyZXNjZSBtYWlzIHF1ZSBvIFNNLCBzaW5hbCBkZSBxdWUgb3V0cm8gbW90b3IgZXN0w6Egb3BlcmFuZG8gZW0gcGFyYWxlbG8uIA0KDQpFc3NlIG1vdG9yIMOpIGEgZXhwYW5zw6NvIGRvIGNyw6lkaXRvLCBvYnNlcnZhZGEgbm8gZ3LDoWZpY28gMy4NCg0KKipHcsOhZmljbyAzOioqDQpgYGB7ciwgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCmNyZWRpdG9fcGliIDwtIGRhdGEuZnJhbWUoDQogIGRhdGEgPSBhcy5EYXRlKGMoDQogICAgIjIwMDgtMDEtMTUiLA0KICAgICIyMDA4LTEyLTE1IiwNCiAgICAiMjAwOS0xMi0xNSIsDQogICAgIjIwMTAtMTItMTUiLA0KICAgICIyMDExLTEyLTE1IiwNCiAgICAiMjAxMi0xMi0xNSIsDQogICAgIjIwMTMtMTItMTUiDQogICkpLA0KICB0b3RhbCA9IGMoMzUuNDcsIDQwLjcwLCA0My44NSwgNDUuNDMsIDQ5LjEwLCA1My44MCwgNTYuNTApLA0KICBwaiAgICA9IGMoMTkuMDgsIDIzLjA2LCAyNC40OSwgMjQuODQsIDI2LjkwLCAyOS40MCwgMzAuNTApLA0KICBwZiAgICA9IGMoMTYuMzksIDE3LjYzLCAxOS4zNiwgMjAuNTksIDIyLjIwLCAyNC40MCwgMjYuMDApDQopICU+JQ0KICBtdXRhdGUoZGF0YV9tcyA9IGFzLm51bWVyaWMoYXMuUE9TSVhjdChkYXRhLCB0eiA9ICJVVEMiKSkgKiAxMDAwKQ0KDQpkYWRvc190b3RhbCA8LSBjcmVkaXRvX3BpYiAlPiUgc2VsZWN0KHRpbWVzdGFtcCA9IGRhdGFfbXMsIHZhbG9yID0gdG90YWwpDQpkYWRvc19waiAgICA8LSBjcmVkaXRvX3BpYiAlPiUgc2VsZWN0KHRpbWVzdGFtcCA9IGRhdGFfbXMsIHZhbG9yID0gcGopDQpkYWRvc19wZiAgICA8LSBjcmVkaXRvX3BpYiAlPiUgc2VsZWN0KHRpbWVzdGFtcCA9IGRhdGFfbXMsIHZhbG9yID0gcGYpDQoNCmhpZ2hjaGFydCh0eXBlID0gInN0b2NrIikgJT4lDQogIGhjX2NoYXJ0KA0KICAgIGJhY2tncm91bmRDb2xvciA9ICIjRkZGRkZGIiwNCiAgICBzcGFjaW5nVG9wID0gMjAsIHNwYWNpbmdSaWdodCA9IDIwLA0KICAgIHNwYWNpbmdCb3R0b20gPSAyMCwgc3BhY2luZ0xlZnQgPSAyMA0KICApICU+JQ0KICBoY19hZGRfc2VyaWVzKA0KICAgIGRhdGEgPSBsaXN0X3BhcnNlMihkYWRvc190b3RhbCksDQogICAgdHlwZSA9ICJsaW5lIiwNCiAgICBuYW1lID0gIlRvdGFsIiwNCiAgICBjb2xvciA9ICIjMDIwMjNDIiwNCiAgICBsaW5lV2lkdGggPSAzLA0KICAgIG1hcmtlciA9IGxpc3QoZW5hYmxlZCA9IFRSVUUsIHJhZGl1cyA9IDQpLA0KICAgIHRvb2x0aXAgPSBsaXN0KHZhbHVlRGVjaW1hbHMgPSAxLCB2YWx1ZVN1ZmZpeCA9ICIlIGRvIFBJQiIpDQogICkgJT4lDQogIGhjX2FkZF9zZXJpZXMoDQogICAgZGF0YSA9IGxpc3RfcGFyc2UyKGRhZG9zX3BqKSwNCiAgICB0eXBlID0gImxpbmUiLA0KICAgIG5hbWUgPSAiUGVzc29hIEp1csOtZGljYSIsDQogICAgY29sb3IgPSAiI0ZFQjAxNSIsDQogICAgbGluZVdpZHRoID0gMiwNCiAgICBtYXJrZXIgPSBsaXN0KGVuYWJsZWQgPSBUUlVFLCByYWRpdXMgPSA0KSwNCiAgICB0b29sdGlwID0gbGlzdCh2YWx1ZURlY2ltYWxzID0gMSwgdmFsdWVTdWZmaXggPSAiJSBkbyBQSUIiKQ0KICApICU+JQ0KICBoY19hZGRfc2VyaWVzKA0KICAgIGRhdGEgPSBsaXN0X3BhcnNlMihkYWRvc19wZiksDQogICAgdHlwZSA9ICJsaW5lIiwNCiAgICBuYW1lID0gIlBlc3NvYSBGw61zaWNhIiwNCiAgICBjb2xvciA9ICIjNDZCMUUxIiwNCiAgICBsaW5lV2lkdGggPSAyLA0KICAgIG1hcmtlciA9IGxpc3QoZW5hYmxlZCA9IFRSVUUsIHJhZGl1cyA9IDQpLA0KICAgIHRvb2x0aXAgPSBsaXN0KHZhbHVlRGVjaW1hbHMgPSAxLCB2YWx1ZVN1ZmZpeCA9ICIlIGRvIFBJQiIpDQogICkgJT4lDQogIGhjX3lBeGlzKA0KICAgIHRpdGxlID0gbGlzdCgNCiAgICAgIHRleHQgPSAiQ3LDqWRpdG8vUElCICglKSIsDQogICAgICBzdHlsZSA9IGxpc3QoY29sb3IgPSAiIzQ0NDQ0NCIsIGZvbnRTaXplID0gIjEycHgiKQ0KICAgICksDQogICAgZ3JpZExpbmVDb2xvciA9ICIjRTZFNkU2IiwNCiAgICBsYWJlbHMgPSBsaXN0KA0KICAgICAgc3R5bGUgPSBsaXN0KGNvbG9yID0gIiM0NDQ0NDQiKSwNCiAgICAgIGZvcm1hdCA9ICJ7dmFsdWV9JSINCiAgICApLA0KICAgIG1pbiA9IDANCiAgKSAlPiUNCiAgaGNfeEF4aXMoDQogICAgbGluZUNvbG9yID0gIiNEOUQ5RDkiLA0KICAgIHRpY2tDb2xvciA9ICIjRDlEOUQ5IiwNCiAgICBsYWJlbHMgPSBsaXN0KHN0eWxlID0gbGlzdChjb2xvciA9ICIjNDQ0NDQ0IikpDQogICkgJT4lDQogIGhjX3Bsb3RPcHRpb25zKA0KICAgIHNlcmllcyA9IGxpc3QoDQogICAgICBhbmltYXRpb24gPSBGQUxTRSwNCiAgICAgIHN0YXRlcyA9IGxpc3QoaW5hY3RpdmUgPSBsaXN0KG9wYWNpdHkgPSAxKSkNCiAgICApDQogICkgJT4lDQogIGhjX3RpdGxlKA0KICAgIHRleHQgPSAiRXhwYW5zw6NvIGRvIENyw6lkaXRvIG5vIEJyYXNpbCIsDQogICAgc3R5bGUgPSBsaXN0KGZvbnRTaXplID0gIjIwcHgiLCBmb250V2VpZ2h0ID0gImJvbGQiLCBjb2xvciA9ICIjMTExMTExIikNCiAgKSAlPiUNCiAgaGNfc3VidGl0bGUoDQogICAgdGV4dCA9ICJTYWxkbyBkYXMgb3BlcmHDp8O1ZXMgZGUgY3LDqWRpdG8gZW0gcmVsYcOnw6NvIGFvIFBJQiAoJSkgLSBqYW4vMjAwOCBhIGRlei8yMDEzIiwNCiAgICBzdHlsZSA9IGxpc3QoZm9udFNpemUgPSAiMTNweCIsIGNvbG9yID0gIiM2NjY2NjYiKQ0KICApICU+JQ0KICBoY190b29sdGlwKA0KICAgIHNoYXJlZCA9IFRSVUUsDQogICAgY3Jvc3NoYWlycyA9IFRSVUUsDQogICAgYmFja2dyb3VuZENvbG9yID0gIiNGRkZGRkYiLA0KICAgIGJvcmRlckNvbG9yID0gIiNEOUQ5RDkiLA0KICAgIGJvcmRlclJhZGl1cyA9IDgsDQogICAgc2hhZG93ID0gRkFMU0UsDQogICAgc3R5bGUgPSBsaXN0KGZvbnRTaXplID0gIjEycHgiKQ0KICApICU+JQ0KICBoY19sZWdlbmQoDQogICAgZW5hYmxlZCA9IFRSVUUsDQogICAgYWxpZ24gPSAiY2VudGVyIiwNCiAgICB2ZXJ0aWNhbEFsaWduID0gImJvdHRvbSIsDQogICAgbGF5b3V0ID0gImhvcml6b250YWwiDQogICkgJT4lDQogIGhjX3JhbmdlU2VsZWN0b3IoZW5hYmxlZCA9IEZBTFNFKSAlPiUNCiAgaGNfbmF2aWdhdG9yKGVuYWJsZWQgPSBGQUxTRSkgJT4lDQogIGhjX3Njcm9sbGJhcihlbmFibGVkID0gRkFMU0UpICU+JQ0KICBoY19leHBvcnRpbmcoZW5hYmxlZCA9IFRSVUUpICU+JQ0KICBoY19jcmVkaXRzKA0KICAgIGVuYWJsZWQgPSBUUlVFLA0KICAgIHRleHQgPSAiRm9udGU6IERJRUVTRS9CYW5jbyBDZW50cmFsIGRvIEJyYXNpbC4gRWxhYm9yYcOnw6NvIHByw7NwcmlhIEliTWFjcm9CSC4iLA0KICAgIHN0eWxlID0gbGlzdChmb250U2l6ZSA9ICIxMHB4IiwgY29sb3IgPSAiIzc3Nzc3NyIpDQogICkNCmBgYA0KDQpDb21vIGV2aWRlbmNpYWRvIG5vIGdyw6FmaWNvIDMsIGEgcmVsYcOnw6NvIGNyw6lkaXRvL1BJQiB0b3RhbCAobGluaGEgYXp1bCBlc2N1cm8pIHBhc3NvdSBkZSAzNSw1JSBlbSAyMDA4IHBhcmEgNTYsNSUgZW0gZGV6ZW1icm8gZGUgMjAxMy4NCkNvbW8gZXZpZGVuY2lhZG8gbm8gZ3LDoWZpY28gMywgYSByZWxhw6fDo28gY3LDqWRpdG8vUElCIHRvdGFsIChsaW5oYSBhenVsLWVzY3VyYSkgcGFzc291IGRlIDM1LDUlIGVtIDIwMDggcGFyYSA1Niw1JSBlbSBkZXplbWJybyBkZSAyMDEzLiBBIGV4cGFuc8OjbyBkbyBjcsOpZGl0byBhIHBlc3NvYXMgZsOtc2ljYXMgb3Blcm91IHBvciBtZWlvIGRlIGluc3RydW1lbnRvcyBlc3BlY8OtZmljb3M6IG8gY3LDqWRpdG8gY29uc2lnbmFkbyBjb20gZGVzY29udG8gZGlyZXRvIGVtIGZvbGhhLCBvIGZpbmFuY2lhbWVudG8gZGUgdmXDrWN1bG9zIGNvbSBwcmF6byBhbG9uZ2FkbywgbyBmaW5hbmNpYW1lbnRvIGltb2JpbGnDoXJpbywgbyBjcsOpZGl0byBwZXNzb2FsIGUgbyBjYXJ0w6NvIGRlIGNyw6lkaXRvIGNvbSBwYXJjZWxhbWVudG8gc2VtIGp1cm9zLiBPIGVmZWl0byBkZXNzYXMgbWVkaWRhcyBmb2kgZmFjaWxpdGFyIG8gYWNlc3NvIGEgYmVucyBkdXLDoXZlaXMsIGVsZXRyb2RvbcOpc3RpY29zLCBhdXRvbcOzdmVpcywgZSBzZXJ2acOnb3MgYW50ZXMgcmVzdHJpdG9zIGEgZmFpeGFzIG1haXMgYWx0YXMgZGUgcmVuZGEuDQoNCkEgbGluaGEgZGUgY3LDqWRpdG8gYSBwZXNzb2FzIGp1csOtZGljYXMgKGxpbmhhIGFtYXJlbGEpIHRhbWLDqW0gYXZhbsOnYSBubyBwZXLDrW9kbywgZGUgY2VyY2EgZGUgMTksMSUgcGFyYSAzMCw1JSBkbyBQSUIuIFBhcnRlIGRlc3NhIGV4cGFuc8OjbyBzZSBkZXZldSDDoCBhdHVhw6fDo28gYW50aWPDrWNsaWNhIGRvcyBiYW5jb3MgcMO6YmxpY29zIGFww7NzIDIwMDgsIHF1YW5kbyBvcyBiYW5jb3MgcHJpdmFkb3Mgc2UgdG9ybmFyYW0gbWFpcyBjYXV0ZWxvc29zIGRpYW50ZSBkYSBjcmlzZSBpbnRlcm5hY2lvbmFsLg0KDQpPIHJlc3VsdGFkbyBjb25qdW50byBkZXNzZXMgbW90b3JlcyAtIHNhbMOhcmlvIG3DrW5pbW8gZW0gdmFsb3JpemHDp8OjbyByZWFsIGUgY3LDqWRpdG8gYW8gY29uc3VtaWRvciBlbSBmb3J0ZSBleHBhbnPDo28gLSBmb2kgYSBjb25zb2xpZGHDp8OjbyBkZSB1bSBtZXJjYWRvIGRlIGNvbnN1bW8gbm8gQnJhc2lsLiBGYW3DrWxpYXMgZGUgbWVub3IgcmVuZGEgcGFzc2FyYW0gYSBhY2Vzc2FyIGJlbnMgZSBzZXJ2acOnb3MgYW50ZXMgcmVzdHJpdG9zLCBmZW7DtG1lbm8gdGFtYsOpbSBjaGFtYWRvIGRlICJub3ZhIGNsYXNzZSBtw6lkaWEiLiBNYWlzIGRvIHF1ZSBvIGF1bWVudG8gZG8gY29uc3VtbyBhZ3JlZ2FkbywgbyBxdWUgb2NvcnJlIMOpIHVtYSBwZXJjZXDDp8OjbyBnZW5lcmFsaXphZGEgZGUgbWVsaG9yYSwgYSBzZW5zYcOnw6NvIHF1ZSBzdXN0ZW50YSBvIGNpY2xvIGUgcmVmb3LDp2EgYSB2aXPDo28sIG5hIMOpcG9jYSwgZGUgcXVlIG8gQnJhc2lsIHZpdmlhIHVtIHBlcsOtb2RvIGRlIHByb3NwZXJpZGFkZS4gRG8gcG9udG8gZGUgdmlzdGEgbWFjcm9lY29uw7RtaWNvLCBjb250dWRvLCBjYWJlIHVtYSByZXNzYWx2YTogdW0gY3Jlc2NpbWVudG8gc3VzdGVudGFkbyBwb3IgY3LDqWRpdG8gZSBjb25zdW1vIGZ1bmNpb25hIG5vIGN1cnRvIHByYXpvLCBtYXMgdGVtIGxpbWl0ZXMuDQoNCiMjIyMgMS4yLjIgTWVyY2FkbyBkZSB0cmFiYWxobw0KDQpPdXRybyBtb3RvciByZWxldmFudGUgZGEgZXhwYW5zw6NvIGZvaSBvIG1lcmNhZG8gZGUgdHJhYmFsaG8uIENvbW8gbW9zdHJhIG8gZ3LDoWZpY28gNCwgYSB0YXhhIGRlIGRlc29jdXBhw6fDo28gbWVkaWRhIHBlbGEgUE1FW14yXSBjYWl1IGRlIGZvcm1hIGNvbnNpc3RlbnRlIGFvIGxvbmdvIGRvIHBlcsOtb2RvLiBFbSB0ZXJtb3MgdGXDs3JpY29zLCB1bWEgcG9wdWxhw6fDo28gbWFpcyBlbXByZWdhZGEgYW1wbGlhIGEgbWFzc2EgZGUgcmVuZGEgZGlzcG9uw612ZWwgZSwgcG9ydGFudG8sIG8gZXNwYcOnbyBwYXJhIGNvbnN1bW8gLSByZWZvcsOnYW5kbyBhIHRlc2UgZGUgcXVlIGEgZGVtYW5kYSBkb23DqXN0aWNhIGZvaSBvIHByaW5jaXBhbCB2ZXRvciBkYSBleHBhbnPDo28uIA0KDQoqKkdyw6FmaWNvIDQ6KioNCg0KYGBge3IsIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQpwbWVfcmF3IDwtIHJlYWRfZXhjZWwoIkM6L1VzZXJzL3JvYmVyL09uZURyaXZlL0liTWFjcm8vdGF4YWRlc29jdXBhw6fDo28ueGxzeCIpDQoNCm1lc2VzIDwtIGFzLmNoYXJhY3RlcihwbWVfcmF3WzEsIC1jKDEsMiwzKV0pDQp2YWxvcmVzIDwtIGFzLm51bWVyaWMoZ3N1YigiLCIsICIuIiwgYXMuY2hhcmFjdGVyKHBtZV9yYXdbNSwgLWMoMSwyLDMpXSkpKQ0KDQpwbWUgPC0gZGF0YS5mcmFtZSgNCiAgbWVzID0gbWVzZXMsDQogIGRlc29jdXBhY2FvID0gdmFsb3Jlcw0KKSAlPiUNCiAgbXV0YXRlKA0KICAgIG1lc19udW0gPSBjYXNlX3doZW4oDQogICAgICBncmVwbCgiamFuZWlybyIsICAgbWVzKSB+IDEsDQogICAgICBncmVwbCgiZmV2ZXJlaXJvIiwgbWVzKSB+IDIsDQogICAgICBncmVwbCgibWFyw6dvIiwgICAgIG1lcykgfiAzLA0KICAgICAgZ3JlcGwoImFicmlsIiwgICAgIG1lcykgfiA0LA0KICAgICAgZ3JlcGwoIm1haW8iLCAgICAgIG1lcykgfiA1LA0KICAgICAgZ3JlcGwoImp1bmhvIiwgICAgIG1lcykgfiA2LA0KICAgICAgZ3JlcGwoImp1bGhvIiwgICAgIG1lcykgfiA3LA0KICAgICAgZ3JlcGwoImFnb3N0byIsICAgIG1lcykgfiA4LA0KICAgICAgZ3JlcGwoInNldGVtYnJvIiwgIG1lcykgfiA5LA0KICAgICAgZ3JlcGwoIm91dHVicm8iLCAgIG1lcykgfiAxMCwNCiAgICAgIGdyZXBsKCJub3ZlbWJybyIsICBtZXMpIH4gMTEsDQogICAgICBncmVwbCgiZGV6ZW1icm8iLCAgbWVzKSB+IDEyDQogICAgKSwNCiAgICBhbm8gPSBhcy5pbnRlZ2VyKHN1YnN0cihtZXMsIG5jaGFyKG1lcyktMywgbmNoYXIobWVzKSkpLA0KICAgIGRhdGEgPSBhcy5EYXRlKHBhc3RlMChhbm8sICItIiwgZm9ybWF0QyhtZXNfbnVtLCB3aWR0aD0yLCBmbGFnPSIwIiksICItMTUiKSksDQogICAgZGF0YV9tcyA9IGFzLm51bWVyaWMoYXMuUE9TSVhjdChkYXRhLCB0eiA9ICJVVEMiKSkgKiAxMDAwDQogICkgJT4lDQogIGZpbHRlcihkYXRhID49IGFzLkRhdGUoIjIwMDgtMDEtMTUiKSAmIGRhdGEgPD0gYXMuRGF0ZSgiMjAxNC0wMy0xNSIpKSAlPiUNCiAgYXJyYW5nZShkYXRhKSAlPiUNCiAgbXV0YXRlKG1tMTIgPSByb2xsbWVhbihkZXNvY3VwYWNhbywgayA9IDEyLCBmaWxsID0gTkEsIGFsaWduID0gInJpZ2h0IikpDQoNCmRhZG9zX3JlYWwgPC0gcG1lICU+JQ0KICBmaWx0ZXIoZGF0YSA+PSBhcy5EYXRlKCIyMDA5LTAxLTE1IikpICU+JQ0KICBzZWxlY3QodGltZXN0YW1wID0gZGF0YV9tcywgZGVzb2N1cGFjYW8pDQoNCmRhZG9zX21tMTIgPC0gcG1lICU+JQ0KICBmaWx0ZXIoIWlzLm5hKG1tMTIpICYgZGF0YSA+PSBhcy5EYXRlKCIyMDA5LTAxLTE1IikpICU+JQ0KICBzZWxlY3QodGltZXN0YW1wID0gZGF0YV9tcywgZGVzb2N1cGFjYW8gPSBtbTEyKQ0KDQpoaWdoY2hhcnQodHlwZSA9ICJzdG9jayIpICU+JQ0KICBoY19jaGFydChiYWNrZ3JvdW5kQ29sb3IgPSAiI0ZGRkZGRiIsIHNwYWNpbmdUb3AgPSAyMCwgc3BhY2luZ1JpZ2h0ID0gMjAsDQogICAgICAgICAgIHNwYWNpbmdCb3R0b20gPSAyMCwgc3BhY2luZ0xlZnQgPSAyMCkgJT4lDQogIGhjX2FkZF9zZXJpZXMoZGF0YSA9IGxpc3RfcGFyc2UyKGRhZG9zX3JlYWwpLCB0eXBlID0gImxpbmUiLCBuYW1lID0gIkRhZG8gb3JpZ2luYWwiLA0KICAgICAgICAgICAgICAgIGNvbG9yID0gIiNGRUIwMTUiLCBsaW5lV2lkdGggPSAxLjUsDQogICAgICAgICAgICAgICAgbWFya2VyID0gbGlzdChlbmFibGVkID0gRkFMU0UpLA0KICAgICAgICAgICAgICAgIHRvb2x0aXAgPSBsaXN0KHZhbHVlRGVjaW1hbHMgPSAxLCB2YWx1ZVN1ZmZpeCA9ICIlIikpICU+JQ0KICBoY19hZGRfc2VyaWVzKGRhdGEgPSBsaXN0X3BhcnNlMihkYWRvc19tbTEyKSwgdHlwZSA9ICJsaW5lIiwgbmFtZSA9ICJNw6lkaWEgbcOzdmVsIDEyIG1lc2VzIiwNCiAgICAgICAgICAgICAgICBjb2xvciA9ICIjMDIwMjNDIiwgbGluZVdpZHRoID0gMywNCiAgICAgICAgICAgICAgICBtYXJrZXIgPSBsaXN0KGVuYWJsZWQgPSBGQUxTRSksDQogICAgICAgICAgICAgICAgdG9vbHRpcCA9IGxpc3QodmFsdWVEZWNpbWFscyA9IDEsIHZhbHVlU3VmZml4ID0gIiUiKSkgJT4lDQogIGhjX3lBeGlzKHRpdGxlID0gbGlzdCh0ZXh0ID0gIlRheGEgZGUgZGVzb2N1cGHDp8OjbyAoJSkiLA0KICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGUgPSBsaXN0KGNvbG9yID0gIiM0NDQ0NDQiLCBmb250U2l6ZSA9ICIxMnB4IikpLA0KICAgICAgICAgICBncmlkTGluZUNvbG9yID0gIiNFNkU2RTYiLA0KICAgICAgICAgICBsYWJlbHMgPSBsaXN0KHN0eWxlID0gbGlzdChjb2xvciA9ICIjNDQ0NDQ0IiksIGZvcm1hdCA9ICJ7dmFsdWV9JSIpKSAlPiUNCiAgaGNfeEF4aXMobGluZUNvbG9yID0gIiNEOUQ5RDkiLCB0aWNrQ29sb3IgPSAiI0Q5RDlEOSIsDQogICAgICAgICAgIGxhYmVscyA9IGxpc3Qoc3R5bGUgPSBsaXN0KGNvbG9yID0gIiM0NDQ0NDQiKSkpICU+JQ0KICBoY19wbG90T3B0aW9ucyhzZXJpZXMgPSBsaXN0KGFuaW1hdGlvbiA9IEZBTFNFLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlcyA9IGxpc3QoaW5hY3RpdmUgPSBsaXN0KG9wYWNpdHkgPSAxKSkpKSAlPiUNCiAgaGNfdGl0bGUodGV4dCA9ICJUYXhhIGRlIERlc29jdXBhw6fDo28gLSBCcmFzaWwiLA0KICAgICAgICAgICBzdHlsZSA9IGxpc3QoZm9udFNpemUgPSAiMjBweCIsIGZvbnRXZWlnaHQgPSAiYm9sZCIsIGNvbG9yID0gIiMxMTExMTEiKSkgJT4lDQogIGhjX3N1YnRpdGxlKHRleHQgPSAiUmVnacO1ZXMgbWV0cm9wb2xpdGFuYXMg4oCUIGphbi8yMDA5IGEgbWFyLzIwMTQiLA0KICAgICAgICAgICAgICBzdHlsZSA9IGxpc3QoZm9udFNpemUgPSAiMTNweCIsIGNvbG9yID0gIiM2NjY2NjYiKSkgJT4lDQogIGhjX3Rvb2x0aXAoc2hhcmVkID0gVFJVRSwgY3Jvc3NoYWlycyA9IFRSVUUsIGJhY2tncm91bmRDb2xvciA9ICIjRkZGRkZGIiwNCiAgICAgICAgICAgICBib3JkZXJDb2xvciA9ICIjRDlEOUQ5IiwgYm9yZGVyUmFkaXVzID0gOCwgc2hhZG93ID0gRkFMU0UsDQogICAgICAgICAgICAgc3R5bGUgPSBsaXN0KGZvbnRTaXplID0gIjEycHgiKSkgJT4lDQogIGhjX2xlZ2VuZChlbmFibGVkID0gVFJVRSwgYWxpZ24gPSAiY2VudGVyIiwgdmVydGljYWxBbGlnbiA9ICJib3R0b20iLA0KICAgICAgICAgICAgbGF5b3V0ID0gImhvcml6b250YWwiKSAlPiUNCiAgaGNfcmFuZ2VTZWxlY3RvcihlbmFibGVkID0gRkFMU0UpICU+JQ0KICBoY19uYXZpZ2F0b3IoZW5hYmxlZCA9IEZBTFNFKSAlPiUNCiAgaGNfc2Nyb2xsYmFyKGVuYWJsZWQgPSBGQUxTRSkgJT4lDQogIGhjX2NyZWRpdHMoZW5hYmxlZCA9IFRSVUUsIHRleHQgPSAiRm9udGU6IElCR0UvUE1FLiBFbGFib3Jhw6fDo28gcHLDs3ByaWEgSWJNYWNyb0JILiIsDQogICAgICAgICAgICAgc3R5bGUgPSBsaXN0KGZvbnRTaXplID0gIjEwcHgiLCBjb2xvciA9ICIjNzc3Nzc3IikpDQpgYGANCg0KQSBzw6lyaWUgYnJ1dGEgKGxpbmhhIGFtYXJlbGEpLCBubyBlbnRhbnRvLCBhcHJlc2VudGEgdW0gcGFkcsOjbyBzYXpvbmFsIGluZGVwZW5kZW50ZSBkbyBjaWNsbzogcXVlZGEgbm8gZmltIGRvIGFubywgcHV4YWRhIHBvciBjb250cmF0YcOnw7VlcyB0ZW1wb3LDoXJpYXMgZSBwYWdhbWVudG8gZG8gMTPCuiwgc2VndWlkYSBkZSBhbHRhIGVtIGphbmVpcm8uIFBhcmEgYW5hbGlzYXIgYSB0ZW5kw6puY2lhLCB1dGlsaXpvdS1zZSBhIG3DqWRpYSBtw7N2ZWwgZGUgMTIgbWVzZXMgKGxpbmhhIGF6dWwpLg0KDQpBIG3DqWRpYSBtw7N2ZWwgZXZpZGVuY2lhIGR1YXMgZmFzZXMuIE5vcyBwcmltZWlyb3MgbWVzZXMgZGUgMjAwOSwgbyBkZXNlbXByZWdvIGFpbmRhIHNvYmUsIHJlZmxldGluZG8gYXMgZGVtaXNzw7VlcyBwdXhhZGFzIHBlbGEgY3Jpc2UgZmluYW5jZWlyYSBpbnRlcm5hY2lvbmFsIGVtIDIwMDguIEEgcGFydGlyIGRvIGluw61jaW8gZGUgMjAxMCwgYSBxdWVkYSDDqSBwcmF0aWNhbWVudGUgaW5pbnRlcnJ1cHRhIGF0w6kgbyBmaW0gZGEgZXhwYW5zw6NvLiBObyBkYWRvIGJydXRvLCBhIFBNRSBwYXJ0ZSBkZSA4LDIlIGVtIGphbmVpcm8gZGUgMjAwOSwgYXRpbmdlIG8gcGljbyBkZSA5JSBlbSBtYXLDp28gZG8gbWVzbW8gYW5vIGUgY2hlZ2EgYSA1JSBlbSBtYXLDp28gZGUgMjAxNC4NCg0KW14yXSBOb3RhOiBQZXNxdWlzYSBNZW5zYWwgZGUgRW1wcmVnbyAoUE1FKSwgcmVhbGl6YWRhIHBlbG8gSUJHRSBlbSBzZWlzIHJlZ2nDtWVzIG1ldHJvcG9saXRhbmFzIChCZWxvIEhvcml6b250ZSwgU8OjbyBQYXVsbywgUmlvIGRlIEphbmVpcm8sIFJlY2lmZSwgU2FsdmFkb3IsIGUgUG9ydG8gQWxlZ3JlKS4gQSBQTkFEIENvbnTDrW51YSAoUGVzcXVpc2EgTmFjaW9uYWwgcG9yIEFtb3N0cmEgZGUgRG9taWPDrWxpb3MgQ29udMOtbnVhKSwgaG9qZSBmb250ZSBkZSByZWZlcsOqbmNpYSBwYXJhIGEgdGF4YSBkZSBkZXNvY3VwYcOnw6NvLCBzw7MgZm9pIGluaWNpYWRhIGVtIDIwMTIsIHJhesOjbyBwZWxhIHF1YWwgc2Ugb3B0b3UgcGVsYSBQTUUgcGFyYSBjb2JyaXIgbyBwZXLDrW9kbyBhbmFsaXNhZG8gbmVzdGEgc2XDp8Ojby4NCg0KQSBxdWVkYSBkYSBkZXNvY3VwYcOnw6NvLCBjb250dWRvLCBjb250YSBhcGVuYXMgcGFydGUgZGEgaGlzdMOzcmlhLiBBIGZvcm1hbGl6YcOnw6NvIGRvIGVtcHJlZ28gdGFtYsOpbSB0ZXZlIHVtIHBhcGVsIGltcG9ydGFudGUgbmEgYW1wbGlhw6fDo28gZG8gY29uc3Vtby4NCg0KKipHcsOhZmljbyA1OioqDQoNCmBgYHtyLCBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KbWVyY2Fkb190cmFiYWxobyA8LSBkYXRhLmZyYW1lKA0KICBhbm8gPSAyMDAzOjIwMTQsDQogIGNvbV9jYXJ0ZWlyYSA9IGMoNDEuNiwgNDEuMCwgNDIuMCwgNDMuMiwgNDQuMiwgNDYuMCwgNDYuNSwgNDguMiwgNTAuNCwgNTEuMSwgNTIuMSwgNTIuNiksDQogIHNlbV9jYXJ0ZWlyYSA9IGMoMTcuMCwgMTcuNCwgMTcuMCwgMTYuMiwgMTUuNCwgMTQuOCwgMTQuMSwgMTMuNCwgMTIuNCwgMTEuOSwgMTEuMCwgOS44OCkNCikNCg0KaGlnaGNoYXJ0KCkgJT4lDQogIGhjX2NoYXJ0KA0KICAgIHR5cGUgPSAiY29sdW1uIiwNCiAgICBiYWNrZ3JvdW5kQ29sb3IgPSAiI0ZGRkZGRiIsDQogICAgc3BhY2luZ1RvcCA9IDIwLCBzcGFjaW5nUmlnaHQgPSAyMCwNCiAgICBzcGFjaW5nQm90dG9tID0gMjAsIHNwYWNpbmdMZWZ0ID0gMjANCiAgKSAlPiUNCiAgaGNfYWRkX3NlcmllcygNCiAgICBuYW1lID0gIkNvbSBjYXJ0ZWlyYSBhc3NpbmFkYSIsDQogICAgZGF0YSA9IG1lcmNhZG9fdHJhYmFsaG8kY29tX2NhcnRlaXJhLA0KICAgIGNvbG9yID0gIiMwMjAyM0MiDQogICkgJT4lDQogIGhjX2FkZF9zZXJpZXMoDQogICAgbmFtZSA9ICJTZW0gY2FydGVpcmEgYXNzaW5hZGEiLA0KICAgIGRhdGEgPSBtZXJjYWRvX3RyYWJhbGhvJHNlbV9jYXJ0ZWlyYSwNCiAgICBjb2xvciA9ICIjRkVCMDE1Ig0KICApICU+JQ0KICBoY194QXhpcygNCiAgICBjYXRlZ29yaWVzID0gYXMuY2hhcmFjdGVyKG1lcmNhZG9fdHJhYmFsaG8kYW5vKSwNCiAgICBsaW5lQ29sb3IgPSAiI0Q5RDlEOSIsDQogICAgdGlja0NvbG9yID0gIiNEOUQ5RDkiLA0KICAgIGxhYmVscyA9IGxpc3Qoc3R5bGUgPSBsaXN0KGNvbG9yID0gIiM0NDQ0NDQiKSkNCiAgKSAlPiUNCiAgaGNfeUF4aXMoDQogICAgdGl0bGUgPSBsaXN0KA0KICAgICAgdGV4dCA9ICIlIGRvIHRvdGFsIGRlIG9jdXBhZG9zIiwNCiAgICAgIHN0eWxlID0gbGlzdChjb2xvciA9ICIjNDQ0NDQ0IiwgZm9udFNpemUgPSAiMTJweCIpDQogICAgKSwNCiAgICBncmlkTGluZUNvbG9yID0gIiNFNkU2RTYiLA0KICAgIGxhYmVscyA9IGxpc3QoDQogICAgICBzdHlsZSA9IGxpc3QoY29sb3IgPSAiIzQ0NDQ0NCIpLA0KICAgICAgZm9ybWF0ID0gInt2YWx1ZX0lIg0KICAgICkNCiAgKSAlPiUNCiAgaGNfcGxvdE9wdGlvbnMoDQogICAgY29sdW1uID0gbGlzdCgNCiAgICAgIGJvcmRlcldpZHRoID0gMCwNCiAgICAgIGdyb3VwUGFkZGluZyA9IDAuMSwNCiAgICAgIHBvaW50UGFkZGluZyA9IDAuMDUNCiAgICApLA0KICAgIHNlcmllcyA9IGxpc3QoDQogICAgICBhbmltYXRpb24gPSBGQUxTRSwNCiAgICAgIHN0YXRlcyA9IGxpc3QoaW5hY3RpdmUgPSBsaXN0KG9wYWNpdHkgPSAxKSkNCiAgICApDQogICkgJT4lDQogIGhjX3RpdGxlKA0KICAgIHRleHQgPSAiRm9ybWFsaXphw6fDo28gZG8gTWVyY2FkbyBkZSBUcmFiYWxobyDigJQgQnJhc2lsIiwNCiAgICBzdHlsZSA9IGxpc3QoZm9udFNpemUgPSAiMjBweCIsIGZvbnRXZWlnaHQgPSAiYm9sZCIsIGNvbG9yID0gIiMxMTExMTEiKQ0KICApICU+JQ0KICBoY19zdWJ0aXRsZSgNCiAgICB0ZXh0ID0gIkRpc3RyaWJ1acOnw6NvIHBlcmNlbnR1YWwgZG9zIG9jdXBhZG9zIOKAlCByZWdpw7VlcyBtZXRyb3BvbGl0YW5hcyDigJQgMjAwMyBhIDIwMTQiLA0KICAgIHN0eWxlID0gbGlzdChmb250U2l6ZSA9ICIxM3B4IiwgY29sb3IgPSAiIzY2NjY2NiIpDQogICkgJT4lDQogIGhjX3Rvb2x0aXAoDQogICAgc2hhcmVkID0gVFJVRSwNCiAgICBjcm9zc2hhaXJzID0gVFJVRSwNCiAgICBiYWNrZ3JvdW5kQ29sb3IgPSAiI0ZGRkZGRiIsDQogICAgYm9yZGVyQ29sb3IgPSAiI0Q5RDlEOSIsDQogICAgYm9yZGVyUmFkaXVzID0gOCwNCiAgICBzaGFkb3cgPSBGQUxTRSwNCiAgICB2YWx1ZVN1ZmZpeCA9ICIlIiwNCiAgICBzdHlsZSA9IGxpc3QoZm9udFNpemUgPSAiMTJweCIpDQogICkgJT4lDQogIGhjX2xlZ2VuZCgNCiAgICBlbmFibGVkID0gVFJVRSwNCiAgICBhbGlnbiA9ICJjZW50ZXIiLA0KICAgIHZlcnRpY2FsQWxpZ24gPSAiYm90dG9tIiwNCiAgICBsYXlvdXQgPSAiaG9yaXpvbnRhbCINCiAgKSAlPiUNCiAgaGNfY3JlZGl0cygNCiAgICBlbmFibGVkID0gVFJVRSwNCiAgICB0ZXh0ID0gIkZvbnRlOiBJQkdFL1BNRSDigJQgUmV0cm9zcGVjdGl2YSAyMDAzLTIwMTQuIEVsYWJvcmHDp8OjbyBwcsOzcHJpYSBJYk1hY3JvQkguIiwNCiAgICBzdHlsZSA9IGxpc3QoZm9udFNpemUgPSAiMTBweCIsIGNvbG9yID0gIiM3Nzc3NzciKQ0KICApDQpgYGANCg0KQ29tbyBvYnNlcnZhZG8gbm8gZ3LDoWZpY28gNSwgYSBwYXJjZWxhIGRlIHRyYWJhbGhhZG9yZXMgY29tIGNhcnRlaXJhIGFzc2luYWRhIGluaWNpYSB0cmFqZXTDs3JpYSBkZSBleHBhbnPDo28gZW0gMjAwNCwgc2FpbmRvIGRlIDQxJSBlIGF0aW5naW5kbyA1Miw2JSBlbSAyMDE0LiBObyBtZXNtbyBwZXLDrW9kbywgbyB0cmFiYWxobyBzZW0gY2FydGVpcmEgcmVjdWEgZGUgMTcsNCUgcGFyYSA5LDklLg0KDQpBbMOpbSBkZSBnYXJhbnRpciBtYWlvciBlc3RhYmlsaWRhZGUgZGUgcmVuZGEsIGEgZm9ybWFsaXphw6fDo28gZG8gdHJhYmFsaG8gYW1wbGlhIG8gYWNlc3NvIGEgYmVuZWbDrWNpb3MgLSBjb21vIGNyw6lkaXRvIGNvbnNpZ25hZG8sIEZHVFMgcXVlIHZpYWJpbGl6YSBvIGZpbmFuY2lhbWVudG8gaGFiaXRhY2lvbmFsLCAxM8K6IHNhbMOhcmlvLCBlIGbDqXJpYXMgcmVtdW5lcmFkYXMuIEVzc2UgY29uanVudG8gcmVkdXogYSBpbnNlZ3VyYW7Dp2EgZGFzIGZhbcOtbGlhcywgYXVtZW50YW5kbyBhIHByb3BlbnPDo28gbWFyZ2luYWwgYSBjb25zdW1pci4NCg0KRW0gb3V0cmFzIHBhbGF2cmFzLCBhIG1haW9yIGVzdGFiaWxpZGFkZSBkYSByZW5kYSBlIGRhcyBjb25kacOnw7VlcyBkZSB2aWRhIGNvbnRyaWJ1aXUgcGFyYSBzdXN0ZW50YXIgYSBleHBhbnPDo28gZGEgZGVtYW5kYSBpbnRlcm5hIGFvIGxvbmdvIGRvIHBlcsOtb2RvLiANCg0KIyMjIyAxLjIuMyBEZXNlbXBlbmhvIHNldG9yaWFsDQoNCkEgYW7DoWxpc2UgZG8gUElCIGZ1bmNpb25hLCBhcXVpLCBjb21vIHVtYSBmb3JtYSBkZSBjb25zb2xpZGFyIG9zIG1vdmltZW50b3Mgb2JzZXJ2YWRvcyBhdMOpIGVudMOjby4gTyBQcm9kdXRvIEludGVybm8gQnJ1dG8gY3Jlc2NldSBkZSBmb3JtYSBzdXN0ZW50YWRhIGFvIGxvbmdvIGRlIHRvZG8gbyBjaWNsbywgbWFzIMOpIG5lY2Vzc8OhcmlvIGFuYWxpc2FyIG8gcXVlIGNyZXNjZXUuIE8gZ3LDoWZpY28gNiBkZXNhZ3JlZ2EgbyBwcm9kdXRvIHBvciBzZXRvci4gDQoNCioqR3LDoWZpY28gNjoqKg0KDQpgYGB7ciwgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCg0KcGliX3BsYW5pbGhhIDwtIHJlYWRfZXhjZWwoIkM6L1VzZXJzL3JvYmVyL09uZURyaXZlL0liTWFjcm8vUElCYXJlYS54bHN4Iiwgc2tpcCA9IDEpDQoNCnBpYiA8LSBwaWJfcGxhbmlsaGEgJT4lDQogIHNsaWNlKC0xLCAtMikgJT4lDQogIHJlbmFtZSh0cmltZXN0cmUgPSBCcmFzaWwsIHNldG9yID0gLi4uMiwgdmFsb3IgPSAuLi4zKSAlPiUNCiAgZmlsbCh0cmltZXN0cmUsIC5kaXJlY3Rpb24gPSAiZG93biIpICU+JSANCiAgZmlsdGVyKHNldG9yICVpbiUgYygiQWdyb3BlY3XDoXJpYSAtIHRvdGFsIiwgDQogICAgICAgICAgICAgICAgICAgICAgIkluZMO6c3RyaWEgLSB0b3RhbCIsIA0KICAgICAgICAgICAgICAgICAgICAgICJTZXJ2acOnb3MgLSB0b3RhbCIpKSAlPiUNCiAgbXV0YXRlKA0KICAgIGFubyA9IGFzLmludGVnZXIoc3Vic3RyKHRyaW1lc3RyZSwgbmNoYXIodHJpbWVzdHJlKS0zLCBuY2hhcih0cmltZXN0cmUpKSksDQogICAgdHJpbSA9IGNhc2Vfd2hlbigNCiAgICAgIGdyZXBsKCIxwroiLCB0cmltZXN0cmUpIH4gMSwNCiAgICAgIGdyZXBsKCIywroiLCB0cmltZXN0cmUpIH4gMiwNCiAgICAgIGdyZXBsKCIzwroiLCB0cmltZXN0cmUpIH4gMywNCiAgICAgIGdyZXBsKCI0wroiLCB0cmltZXN0cmUpIH4gNA0KICAgICksDQogICAgZGF0YSA9IGFzLkRhdGUocGFzdGUwKGFubywgIi0iLCB0cmltICogMyAtIDIsICItMDEiKSksDQogICAgZGF0YV9tcyA9IGFzLmRvdWJsZShkaWZmdGltZShkYXRhLCBhcy5EYXRlKCIxOTcwLTAxLTAxIiksIHVuaXRzID0gInNlY3MiKSkgKiAxMDAwLA0KICAgIHNldG9yID0gY2FzZV93aGVuKA0KICAgICAgZ3JlcGwoIkFncm8iLCBzZXRvcikgfiAiQWdyb3BlY3XDoXJpYSIsDQogICAgICBncmVwbCgiSW5kIiwgc2V0b3IpIH4gIkluZMO6c3RyaWEiLA0KICAgICAgZ3JlcGwoIlNlcnYiLCBzZXRvcikgfiAiU2VydmnDp29zIg0KICAgICkNCiAgKSAlPiUNCiAgZmlsdGVyKGRhdGEgPj0gYXMuRGF0ZSgiMjAwOS0wMS0wMSIpICYgZGF0YSA8PSBhcy5EYXRlKCIyMDE0LTAzLTAxIikpDQoNCmFncm8gPC0gcGliIHw+IGZpbHRlcihzZXRvciA9PSAiQWdyb3BlY3XDoXJpYSIpDQppbmQgIDwtIHBpYiB8PiBmaWx0ZXIoc2V0b3IgPT0gIkluZMO6c3RyaWEiKQ0Kc2VydiA8LSBwaWIgfD4gZmlsdGVyKHNldG9yID09ICJTZXJ2acOnb3MiKQ0KDQpncmFmaWNvX3BpYl9zZXRvciA8LSBoaWdoY2hhcnQoKSAlPiUNCiAgaGNfdGl0bGUodGV4dCA9ICJQSUIgcG9yIFNldG9yIC0gQnJhc2lsIiwgYWxpZ24gPSAiY2VudGVyIikgJT4lDQogIGhjX3N1YnRpdGxlKHRleHQgPSAiVmFsb3JlcyBhIHByZcOnb3MgY29ycmVudGVzIChSJCBtaWxow7VlcykgLSAxVDIwMDkgYSAxVDIwMTQiLCBhbGlnbiA9ICJjZW50ZXIiKSAlPiUNCiAgaGNfYWRkX3NlcmllcyhkYXRhID0gYWdybywgdHlwZSA9ICJsaW5lIiwgaGNhZXMoeCA9IGRhdGFfbXMsIHkgPSB2YWxvciksDQogICAgICAgICAgICAgICAgbmFtZSA9ICJBZ3JvcGVjdcOhcmlhIiwgY29sb3IgPSAiIzQ2QjFFMSIpICU+JQ0KICBoY19hZGRfc2VyaWVzKGRhdGEgPSBpbmQsIHR5cGUgPSAibGluZSIsIGhjYWVzKHggPSBkYXRhX21zLCB5ID0gdmFsb3IpLA0KICAgICAgICAgICAgICAgIG5hbWUgPSAiSW5kw7pzdHJpYSIsIGNvbG9yID0gIiNGRUIwMTUiKSAlPiUNCiAgaGNfYWRkX3NlcmllcyhkYXRhID0gc2VydiwgdHlwZSA9ICJsaW5lIiwgaGNhZXMoeCA9IGRhdGFfbXMsIHkgPSB2YWxvciksDQogICAgICAgICAgICAgICAgbmFtZSA9ICJTZXJ2acOnb3MiLCBjb2xvciA9ICIjMDIwMjNDIikgJT4lDQogIGhjX3hBeGlzKA0KICAgIHR5cGUgPSAiZGF0ZXRpbWUiLA0KICAgIHRpdGxlID0gbGlzdCh0ZXh0ID0gIlBlcsOtb2RvIiksDQogICAgbGFiZWxzID0gbGlzdCgNCiAgICAgIGZvcm1hdHRlciA9IEpTKCJmdW5jdGlvbigpIHsNCiAgICAgICAgdmFyIG1lc2VzID0gWydKYW4nLCAnRmV2JywgJ01hcicsICdBYnInLCAnTWFpJywgJ0p1bicsDQogICAgICAgICAgICAgICAgICAgICAnSnVsJywgJ0FnbycsICdTZXQnLCAnT3V0JywgJ05vdicsICdEZXonXTsNCiAgICAgICAgdmFyIGQgPSBuZXcgRGF0ZSh0aGlzLnZhbHVlKTsNCiAgICAgICAgcmV0dXJuIG1lc2VzW2QuZ2V0TW9udGgoKV0gKyAnIFxcJycgKyANCiAgICAgICAgICAgICAgIFN0cmluZyhkLmdldEZ1bGxZZWFyKCkpLnNsaWNlKDIpOw0KICAgICAgfSIpDQogICAgKQ0KICApICU+JQ0KICBoY19yYW5nZVNlbGVjdG9yKA0KICAgIHNlbGVjdGVkID0gNSwNCiAgICBidXR0b25zID0gbGlzdCgNCiAgICAgIGxpc3QodHlwZSA9ICJ5ZWFyIiwgY291bnQgPSAxLCB0ZXh0ID0gIjFhIiksDQogICAgICBsaXN0KHR5cGUgPSAieWVhciIsIGNvdW50ID0gMywgdGV4dCA9ICIzYSIpLA0KICAgICAgbGlzdCh0eXBlID0gInllYXIiLCBjb3VudCA9IDUsIHRleHQgPSAiNWEiKSwNCiAgICAgIGxpc3QodHlwZSA9ICJhbGwiLCB0ZXh0ID0gIlR1ZG8iKQ0KICAgICkNCiAgKSAlPiUNCiAgaGNfbmF2aWdhdG9yKGVuYWJsZWQgPSBUUlVFKSAlPiUNCiAgaGNfc2Nyb2xsYmFyKGVuYWJsZWQgPSBGQUxTRSkgJT4lDQogIGhjX3lBeGlzKHRpdGxlID0gbGlzdCh0ZXh0ID0gIlIkIG1pbGjDtWVzIikpICU+JQ0KICBoY190b29sdGlwKHZhbHVlU3VmZml4ID0gIiBtaSIsIHNoYXJlZCA9IFRSVUUpICU+JQ0KICBoY19jcmVkaXRzKGVuYWJsZWQgPSBUUlVFLA0KICAgICAgICAgICAgIHRleHQgPSAiRm9udGU6IElCR0UvQ29udGFzIE5hY2lvbmFpcy4gRWxhYm9yYcOnw6NvIHByw7NwcmlhIEliTWFjcm9CSC4iKQ0KDQpwcmludChncmFmaWNvX3BpYl9zZXRvcikNCmBgYA0KDQpTZXJ2acOnb3MgasOhIHJlc3BvbmRpYW0gcGVsYSBtYWlvciBmYXRpYSBkbyBQSUIgZW0gMjAwOSAoYXByb3hpbWFkYW1lbnRlIFJcJDQ1MyBiaWxow7VlcykgZSBxdWFzZSBkb2JyYXJhbSBhdMOpIG8gaW7DrWNpbyBkZSAyMDE0IChSXCQ4MzEgYmlsaMO1ZXMpLiBBIGluZMO6c3RyaWEgc2FpdSBkZSBSXCQxNTIgYmlsaMO1ZXMgcGFyYSBSXCQyODIgYmlsaMO1ZXMsIGVucXVhbnRvIGEgYWdyb3BlY3XDoXJpYSBwYXNzb3UgZGUgUlwkNDEgYmlsaMO1ZXMgcGFyYSBSJDc0IGJpbGjDtWVzLiBFbSB0ZXJtb3MgYWJzb2x1dG9zLCB0b2RvcyBvcyBzZXRvcmVzIGNyZXNjZXJhbS4NCk8gcG9udG8sIHBvcsOpbSwgZXN0w6EgbmFzIHBhcnRpY2lwYcOnw7VlcyByZWxhdGl2YXMuIEVtIDIwMDksIG9zIHNlcnZpw6dvcyByZXByZXNlbnRhdmFtIGFwcm94aW1hZGFtZW50ZSA3MCUgZG8gUElCLCBhIGluZMO6c3RyaWEgY2VyY2EgZGUgMjMlIGUgYSBhZ3JvcGVjdcOhcmlhIGFwcm94aW1hZGFtZW50ZSA2JS4gRW0gMjAxNCwgZXNzZXMgbsO6bWVyb3MgcGVybWFuZWNlcmFtIHByYXRpY2FtZW50ZSBpbmFsdGVyYWRvcy4gQSBlc3RydXR1cmEgcHJvZHV0aXZhIGJyYXNpbGVpcmEgbsOjbyBzZSB0cmFuc2Zvcm1vdSBhbyBsb25nbyBkZSBjaW5jbyBhbm9zIGRlIGV4cGFuc8OjbyBlY29uw7RtaWNhLg0KDQpNZXNtbyBlbSB1bSBwZXLDrW9kbyBkZSBjcmVzY2ltZW50bywgasOhIGVyYSBwb3Nzw612ZWwgaWRlbnRpZmljYXIgZnJhZ2lsaWRhZGVzIGVzdHJ1dHVyYWlzIGltcG9ydGFudGVzLiBPIGNpY2xvIGRlIGV4cGFuc8OjbyBzdXN0ZW50YWRvIHBvciBjcsOpZGl0bywgY29uc3VtbyBlIGZvcm1hbGl6YcOnw6NvIGRvIHRyYWJhbGhvIG7Do28gZm9pIGFjb21wYW5oYWRvIHBvciBtdWRhbsOnYXMgcmVsZXZhbnRlcyBuYSBjb21wb3Npw6fDo28gZGEgZWNvbm9taWEuIA0KDQojIyAxLjMgQXMgZnJhZ2lsaWRhZGVzIG9jdWx0YXMNCg0KTWVzbW8gZW0gcGVyw61vZG9zIGRlIGV4cGFuc8Ojbywgw6kgcG9zc8OtdmVsIGlkZW50aWZpY2FyIGZyYWdpbGlkYWRlcyBxdWUgZXZlbnR1YWxtZW50ZSBwb2RlbSBjb250cmlidWlyIHBhcmEgdW1hIGNyaXNlIGZ1dHVyYS4gQSB0ZW9yaWEgZG9zIGNpY2xvcyBlY29uw7RtaWNvcyBwYXJ0ZSBhIGlkZWlhIGRlIHF1ZSByZWNlc3PDtWVzIGUgZXhwYW5zw7VlcyBzw6NvIHJlY29ycmVudGVzLCBhaW5kYSBxdWUgbsOjbyBwZXJpw7NkaWNhcyAtIG91IHNlamEsIG7Do28gw6kgcG9zc8OtdmVsIHNhYmVyIHF1YW5kbyBjYWRhIGZhc2UgaXLDoSBjb21lw6dhciBvdSB0ZXJtaW5hciwgbWFzIHNhYmUtc2UgcXVlIGFtYmFzIHRlbmRlbSBhIHNlIGFsdGVybmFyIGFvIGxvbmdvIGRvIHRlbXBvLg0KTmVzc2Ugc2VudGlkbywgcGVyw61vZG9zIGRlIHByb3NwZXJpZGFkZSBuw6NvIGRldmVtIHNlciBhbmFsaXNhZG9zIGFwZW5hcyBwZWxvcyBzZXVzIHJlc3VsdGFkb3MgcG9zaXRpdm9zIGRlIGN1cnRvIHByYXpvLiBPIGNyZXNjaW1lbnRvIGVjb27DtG1pY28gcG9kZSBvY3VsdGFyIGRlc2VxdWlsw61icmlvcyBxdWUgc8OzIHNlIHRvcm5hbSBwbGVuYW1lbnRlIHZpc8OtdmVpcyBxdWFuZG8gbyBwYcOtcyBlbnRyYSBlbSByZWNlc3PDo28uIEFzc2ltLCBhbmFsaXNhciBhcyBmcmFnaWxpZGFkZXMgY29uc3RydcOtZGFzIGR1cmFudGUgYSBleHBhbnPDo28gYWp1ZGEgYSBjb21wcmVlbmRlciBuw6NvIGFwZW5hcyBvcyBmYXRvcmVzIHF1ZSBjb250cmlidcOtcmFtIHBhcmEgYSByZWNlc3PDo28gcG9zdGVyaW9yLCBtYXMgb3MgcHLDs3ByaW9zIGxpbWl0ZXMgZG8gY3Jlc2NpbWVudG8gZG8gcGHDrXMuDQoNCiMjIyMgMS4zLjEgSW52ZXN0aW1lbnRvIHByb2R1dGl2bw0KDQpVbSBpbmRpY2Fkb3IgZXh0cmVtYW1lbnRlIHJlbGV2YW50ZSBwYXJhIGFuYWxpc2FyIGEgc3VzdGVudGFiaWxpZGFkZSBkbyBjcmVzY2ltZW50byBlY29uw7RtaWNvIMOpIGEgRm9ybWHDp8OjbyBCcnV0YSBkZSBDYXBpdGFsIEZpeG8gKEZCQ0YpLCBxdWUgbWVkZSBvcyBpbnZlc3RpbWVudG9zIHJlYWxpemFkb3MgZW0gYXRpdm9zIHByb2R1dGl2b3MsIGNvbW8gbcOhcXVpbmFzLCBlcXVpcGFtZW50b3MsIGNvbnN0cnXDp8OjbywgZSBpbmZyYWVzdHJ1dHVyYS4gRW0gZ2VyYWwsIGVzc2UgaW5kaWNhZG9yIGZ1bmNpb25hIGNvbW8gdW1hIHNpbmFsaXphw6fDo28gZGEgY2FwYWNpZGFkZSBmdXR1cmEgZGUgZXhwYW5zw6NvIGRhIHByb2R1w6fDo28gZSBkbyBhdW1lbnRvIGRhIHByb2R1dGl2aWRhZGUgZGEgZWNvbm9taWEsIHBvZGVuZG8gc2VyIG9ic2VydmFkbyBubyBncsOhZmljbyA3LiANCg0KKipHcsOhZmljbyA3OioqDQoNCmBgYHtyLCBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KZmJjZiA8LSBkYXRhLmZyYW1lKA0KICBwZXJpb2RvID0gYygiMjAwOSBUMSIsICIyMDA5IFQyIiwgIjIwMDkgVDMiLCAiMjAwOSBUNCIsDQogICAgICAgICAgICAgICIyMDEwIFQxIiwgIjIwMTAgVDIiLCAiMjAxMCBUMyIsICIyMDEwIFQ0IiwNCiAgICAgICAgICAgICAgIjIwMTEgVDEiLCAiMjAxMSBUMiIsICIyMDExIFQzIiwgIjIwMTEgVDQiLA0KICAgICAgICAgICAgICAiMjAxMiBUMSIsICIyMDEyIFQyIiwgIjIwMTIgVDMiLCAiMjAxMiBUNCIsDQogICAgICAgICAgICAgICIyMDEzIFQxIiwgIjIwMTMgVDIiLCAiMjAxMyBUMyIsICIyMDEzIFQ0IiwNCiAgICAgICAgICAgICAgIjIwMTQgVDEiKSwNCiAgdmFyaWFjYW8gPSBjKC05LjQ5LCAtOC4yOSwgLTMuODYsIDEyLjk1LA0KICAgICAgICAgICAgICAgMjkuMDAsIDIyLjkyLCAxNS4yNiwgNy43OSwNCiAgICAgICAgICAgICAgIDguMjMsIDguMTMsIDUuNzYsIDUuNDYsDQogICAgICAgICAgICAgICAzLjE0LCAxLjExLCAtMS40OSwgMC42MSwNCiAgICAgICAgICAgICAgIDIuOTUsIDguNDksIDcuMzUsIDQuNDMsDQogICAgICAgICAgICAgICA0LjE2KQ0KKSAlPiUNCiAgbXV0YXRlKA0KICAgIGFubyA9IGFzLmludGVnZXIoc3Vic3RyKHBlcmlvZG8sIDEsIDQpKSwNCiAgICB0cmltID0gYXMuaW50ZWdlcihzdWJzdHIocGVyaW9kbywgNywgNykpLA0KICAgIGRhdGEgPSBhcy5EYXRlKHBhc3RlMChhbm8sICItIiwgZm9ybWF0Qyh0cmltICogMyAtIDIsIHdpZHRoID0gMiwgZmxhZyA9ICIwIiksICItMTUiKSksDQogICAgZGF0YV9tcyA9IGFzLm51bWVyaWMoYXMuUE9TSVhjdChkYXRhLCB0eiA9ICJVVEMiKSkgKiAxMDAwDQogICkNCg0KZGFkb3MgPC0gZmJjZiAlPiUNCiAgc2VsZWN0KHRpbWVzdGFtcCA9IGRhdGFfbXMsIHZhcmlhY2FvKQ0KDQpoaWdoY2hhcnQodHlwZSA9ICJzdG9jayIpICU+JQ0KICBoY19jaGFydCgNCiAgICBiYWNrZ3JvdW5kQ29sb3IgPSAiI0ZGRkZGRiIsDQogICAgc3BhY2luZ1RvcCA9IDIwLA0KICAgIHNwYWNpbmdSaWdodCA9IDIwLA0KICAgIHNwYWNpbmdCb3R0b20gPSAyMCwNCiAgICBzcGFjaW5nTGVmdCA9IDIwDQogICkgJT4lDQogIGhjX2FkZF9zZXJpZXMoDQogICAgZGF0YSA9IGxpc3RfcGFyc2UyKGRhZG9zKSwNCiAgICB0eXBlID0gImNvbHVtbiIsDQogICAgbmFtZSA9ICJGQkNGIC0gVmFyaWHDp8OjbyBhbnVhbCAoJSkuIiwNCiAgICBjb2xvciA9ICIjRkVCMDE1IiwNCiAgICBib3JkZXJDb2xvciA9ICIjRkVCMDE1IiwNCiAgICBwb2ludFBhZGRpbmcgPSAwLjA4LA0KICAgIGdyb3VwUGFkZGluZyA9IDAuMTAsDQogICAgdG9vbHRpcCA9IGxpc3QodmFsdWVEZWNpbWFscyA9IDIsIHZhbHVlU3VmZml4ID0gIiUiKQ0KICApICU+JQ0KICBoY195QXhpcygNCiAgICB0aXRsZSA9IGxpc3QoDQogICAgICB0ZXh0ID0gIlZhcmlhw6fDo28gYW51YWwgKCUpIiwNCiAgICAgIHN0eWxlID0gbGlzdChjb2xvciA9ICIjNDQ0NDQ0IiwgZm9udFNpemUgPSAiMTJweCIpDQogICAgKSwNCiAgICBncmlkTGluZUNvbG9yID0gIiNFNkU2RTYiLA0KICAgIGdyaWRMaW5lV2lkdGggPSAxLA0KICAgIGxhYmVscyA9IGxpc3Qoc3R5bGUgPSBsaXN0KGNvbG9yID0gIiM0NDQ0NDQiKSksDQogICAgcGxvdExpbmVzID0gbGlzdCgNCiAgICAgIGxpc3QoDQogICAgICAgIHZhbHVlID0gMCwNCiAgICAgICAgd2lkdGggPSAxLjUsDQogICAgICAgIGNvbG9yID0gIiM5RTlFOUUiLA0KICAgICAgICBkYXNoU3R5bGUgPSAiU2hvcnREYXNoIiwNCiAgICAgICAgekluZGV4ID0gNQ0KICAgICAgKQ0KICAgICkNCiAgKSAlPiUNCiAgaGNfeEF4aXMoDQogICAgbGluZUNvbG9yID0gIiNEOUQ5RDkiLA0KICAgIHRpY2tDb2xvciA9ICIjRDlEOUQ5IiwNCiAgICBsYWJlbHMgPSBsaXN0KHN0eWxlID0gbGlzdChjb2xvciA9ICIjNDQ0NDQ0IikpDQogICkgJT4lDQogIGhjX3Bsb3RPcHRpb25zKA0KICAgIHNlcmllcyA9IGxpc3QoDQogICAgICBhbmltYXRpb24gPSBGQUxTRSwNCiAgICAgIHN0YXRlcyA9IGxpc3QoaW5hY3RpdmUgPSBsaXN0KG9wYWNpdHkgPSAxKSkNCiAgICApLA0KICAgIGNvbHVtbiA9IGxpc3QoYm9yZGVyV2lkdGggPSAwKQ0KICApICU+JQ0KICBoY190aXRsZSgNCiAgICB0ZXh0ID0gIkZvcm1hw6fDo28gQnJ1dGEgZGUgQ2FwaXRhbCBGaXhvIG5vIEJyYXNpbCIsDQogICAgc3R5bGUgPSBsaXN0KA0KICAgICAgZm9udFNpemUgPSAiMjBweCIsDQogICAgICBmb250V2VpZ2h0ID0gImJvbGQiLA0KICAgICAgY29sb3IgPSAiIzExMTExMSINCiAgICApDQogICkgJT4lDQogIGhjX3N1YnRpdGxlKA0KICAgIHRleHQgPSAiVmFyaWHDp8OjbyBhbnVhbCAoJSkgLSAxVDIwMDkgYSAxVDIwMTQgLSBtw6lkaWEgMTk5NSA9IDEwMCIsDQogICAgc3R5bGUgPSBsaXN0KGZvbnRTaXplID0gIjEzcHgiLCBjb2xvciA9ICIjNjY2NjY2IikNCiAgKSAlPiUNCiAgaGNfdG9vbHRpcCgNCiAgICBzaGFyZWQgPSBUUlVFLA0KICAgIGNyb3NzaGFpcnMgPSBUUlVFLA0KICAgIGJhY2tncm91bmRDb2xvciA9ICIjRkZGRkZGIiwNCiAgICBib3JkZXJDb2xvciA9ICIjRDlEOUQ5IiwNCiAgICBib3JkZXJSYWRpdXMgPSA4LA0KICAgIHNoYWRvdyA9IEZBTFNFLA0KICAgIHN0eWxlID0gbGlzdChmb250U2l6ZSA9ICIxMnB4IikNCiAgKSAlPiUNCiAgaGNfbGVnZW5kKGVuYWJsZWQgPSBGQUxTRSkgfD4NCiAgaGNfcmFuZ2VTZWxlY3RvcihlbmFibGVkID0gRkFMU0UpIHw+DQogIGhjX25hdmlnYXRvcihlbmFibGVkID0gRkFMU0UpIHw+DQogIGhjX3Njcm9sbGJhcihlbmFibGVkID0gRkFMU0UpIHw+DQogIGhjX2NyZWRpdHMoDQogICAgZW5hYmxlZCA9IFRSVUUsDQogICAgdGV4dCA9ICJGb250ZTogSUJHRS9Db250YXMgTmFjaW9uYWlzLiBFbGFib3Jhw6fDo28gcHLDs3ByaWEgSWJNYWNyb0JILiIsDQogICAgc3R5bGUgPSBsaXN0KGZvbnRTaXplID0gIjEwcHgiLCBjb2xvciA9ICIjNzc3Nzc3IikNCiAgKQ0KYGBgDQoNCk8gZ3LDoWZpY28gNyBhcHJlc2VudGEgYSB2YXJpYcOnw6NvIHBlcmNlbnR1YWwgYW51YWwgZGEgRkJDRiBhbyBsb25nbyBkbyBwZXLDrW9kby4gQXDDs3MgYSBjcmlzZSBpbnRlcm5hY2lvbmFsIGRlIDIwMDgsIG9ic2VydmEtc2UgdW1hIGZvcnRlIHJlY3VwZXJhw6fDo28gZG8gaW52ZXN0aW1lbnRvLiBBIHRheGEsIHF1ZSBlc3RhdmEgcHLDs3hpbWEgZGUgLTMsOSUgZW0ganVsaG8gZGUgMjAwOSwgc2FsdG91IHBhcmEgdmFsb3JlcyBwb3NpdGl2b3MsIGF0aW5naW5kbyBjZXJjYSBkZSAyOSUgZW0gamFuZWlybyBkZSAyMDEwLiBQYXJ0ZSBkZXNzZSBtb3ZpbWVudG8gw6kgZXNwZXJhZGEsIGrDoSBxdWUgcGVyw61vZG9zIHDDs3MtY3Jpc2UgY29zdHVtYW0gYXByZXNlbnRhciByZWN1cGVyYcOnw7VlcyBwZXJjZW50dWFpcyBtYWlzIGZvcnRlcywgZXNwZWNpYWxtZW50ZSBwb3JxdWUgbyBpbnZlc3RpbWVudG8gdGVuZGUgYSBzZSByZXRyYWlyIGR1cmFudGUgbW9tZW50b3MgZGUgaW5zdGFiaWxpZGFkZSBlY29uw7RtaWNhLg0KDQpPIHByaW5jaXBhbCBwb250byBkZSBhbsOhbGlzZSwgcG9yw6ltLCBlc3TDoSBubyBjb21wb3J0YW1lbnRvIHBvc3Rlcmlvci4gRW1ib3JhIG8gY2ljbG8gZGUgZXhwYW5zw6NvIGJyYXNpbGVpcm8gdGVuaGEgc2UgZW5jZXJyYWRvIG9maWNpYWxtZW50ZSBlbSAyMDE0LCBvIHBpY28gZG8gaW52ZXN0aW1lbnRvIG9jb3JyZXUgYWluZGEgbm8gaW7DrWNpbyBkZSAyMDEwLiBBIHBhcnRpciBkZXNzZSBwb250bywgYSB0cmFqZXTDs3JpYSBkYSBGQkNGIHBhc3NhIGEgYXByZXNlbnRhciBkZXNhY2VsZXJhw6fDo28gZSBvc2NpbGHDp8O1ZXMgLSBhdGluZ2luZG8gaW5jbHVzaXZlIGNyZXNjaW1lbnRvIG5lZ2F0aXZvIGRlIC0xLDQ5JSAgZW0ganVsaG8gZGUgMjAxMiwgbWVzbW8gZGVudHJvIGRvIHBlcsOtb2RvIGRlIGV4cGFuc8Ojby4NCg0KSXNzbyBzdWdlcmUgYSBhdXPDqm5jaWEgZGUgdW0gcGFkcsOjbyBkZSBpbnZlc3RpbWVudG8gcHJvZHV0aXZvOiBtZXNtbyBlbSB1bSBjZW7DoXJpbyBkZSBjcmVzY2ltZW50byBlY29uw7RtaWNvLCBvIGludmVzdGltZW50byBuw6NvIGNvbnNlZ3VpdSBtYW50ZXIgdW1hIHRyYWpldMOzcmlhIGNvbnTDrW51YSBkZSBmb3J0YWxlY2ltZW50by4gRXNzZSBtb3ZpbWVudG8gw6kgcmVsZXZhbnRlLCBwb3JxdWUgbyBpbnZlc3RpbWVudG8gcHJvZHV0aXZvIMOpIHVtIGRvcyBwcmluY2lwYWlzIG1lY2FuaXNtb3MgY2FwYXplcyBkZSBhbXBsaWFyIGEgY2FwYWNpZGFkZSBwcm9kdXRpdmEgZSBlbGV2YXIgYSBwcm9kdXRpdmlkYWRlIGRhIGVjb25vbWlhIG5vIGxvbmdvIHByYXpvLg0KQXNzaW0sIGEgZGVzYWNlbGVyYcOnw6NvIGRhIEZvcm1hw6fDo28gQnJ1dGEgZGUgQ2FwaXRhbCBGaXhvIGFudGVzIG1lc21vIGRvIGVuY2VycmFtZW50byBvZmljaWFsIGRvIGNpY2xvIGRlIGV4cGFuc8OjbyBqw6Egc2luYWxpemF2YSBsaW1pdGHDp8O1ZXMgZXN0cnV0dXJhaXMgaW1wb3J0YW50ZXMgZGEgZWNvbm9taWEgYnJhc2lsZWlyYS4NCg0KDQojIyMjIDEuMy4yIFByb2R1dGl2aWRhZGUNCg0KRGVwb2lzIGRhIGFuw6FsaXNlIGRvIFBJQiwgZG8gZW1wcmVnbywgZG8gY29uc3VtbywgZSBkbyBpbnZlc3RpbWVudG8gcHJvZHV0aXZvLCBjYWJlIG9ic2VydmFyIHNlIG8gY3Jlc2NpbWVudG8gZG8gcGVyw61vZG8gZm9pIGFjb21wYW5oYWRvIHBvciBnYW5ob3MgZGUgZWZpY2nDqm5jaWEuIFBhcmEgaXNzbywgbyBncsOhZmljbyA4IGFwcmVzZW50YSBhIFByb2R1dGl2aWRhZGUgVG90YWwgZG9zIEZhdG9yZXMgKFBURikgZGVzZGUgMTk5NSwgY29tIG8gcGVyw61vZG8gZGUgZXhwYW5zw6NvIGVtIGRlc3RhcXVlLg0KDQoqKkdyw6FmaWNvIDg6KiogDQoNCmBgYHtyLCBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KcHRmIDwtIGRhdGEuZnJhbWUoDQogIGFubyA9IDE5OTU6MjAxNCwNCiAgY29tX2NoID0gYygxMDAuMCwgOTkuMiwgOTguNiwgOTYuNCwgOTUuOCwgOTQuNSwgOTIuNiwgOTIuOSwgOTAuOCwgOTIuNywNCiAgICAgICAgICAgICA5My4xLCA5Mi4zLCA5My44LCA5NC4xLCA5My4yLCA5NC45LCA5Ni4xLCA5NC4yLCA5My4zLCA5MS4yKSwNCiAgc2VtX2NoID0gYyg5Ni40LCA5Ny4zLCA5OC4zLCA5OC40LCA5OC40LCA5OC4xLCA5Ny4zLCA5OS4zLCA5OC43LCAxMDEuMSwNCiAgICAgICAgICAgICAxMDIuNiwgMTA0LjUsIDEwNy42LCAxMDkuNSwgMTEwLjQsIDExMy4zLCAxMTUuOCwgMTE1LjgsIDExNi4xLCAxMTUuMSkNCikgJT4lDQogIG11dGF0ZSgNCiAgICBjb21fY2hfaWR4ID0gY29tX2NoIC8gY29tX2NoW2FubyA9PSAyMDA4XSAqIDEwMCwNCiAgICBzZW1fY2hfaWR4ID0gc2VtX2NoIC8gc2VtX2NoW2FubyA9PSAyMDA4XSAqIDEwMCwNCiAgICBkYXRhID0gYXMuRGF0ZShwYXN0ZTAoYW5vLCAiLTAxLTAxIikpLA0KICAgIGRhdGFfbXMgPSBhcy5udW1lcmljKGFzLlBPU0lYY3QoZGF0YSwgdHogPSAiVVRDIikpICogMTAwMA0KICApDQoNCmRhZG9zX2NvbSA8LSBwdGYgJT4lIHNlbGVjdCh0aW1lc3RhbXAgPSBkYXRhX21zLCB2YWxvciA9IGNvbV9jaF9pZHgpDQpkYWRvc19zZW0gPC0gcHRmICU+JSBzZWxlY3QodGltZXN0YW1wID0gZGF0YV9tcywgdmFsb3IgPSBzZW1fY2hfaWR4KQ0KDQojIFRpbWVzdGFtcHMgcGFyYSBhIGJhbmRhIDIwMDgtMjAxNA0KdHNfMjAwOCA8LSBhcy5udW1lcmljKGFzLlBPU0lYY3QoIjIwMDgtMDEtMDEiLCB0eiA9ICJVVEMiKSkgKiAxMDAwDQp0c18yMDE0IDwtIGFzLm51bWVyaWMoYXMuUE9TSVhjdCgiMjAxNC0wMS0wMSIsIHR6ID0gIlVUQyIpKSAqIDEwMDANCg0KaGlnaGNoYXJ0KHR5cGUgPSAic3RvY2siKSAlPiUNCiAgaGNfY2hhcnQoDQogICAgYmFja2dyb3VuZENvbG9yID0gIiNGRkZGRkYiLA0KICAgIHNwYWNpbmdUb3AgPSAyMCwgc3BhY2luZ1JpZ2h0ID0gMjAsDQogICAgc3BhY2luZ0JvdHRvbSA9IDIwLCBzcGFjaW5nTGVmdCA9IDIwDQogICkgJT4lDQogIGhjX2FkZF9zZXJpZXMoDQogICAgZGF0YSA9IGxpc3RfcGFyc2UyKGRhZG9zX3NlbSksDQogICAgdHlwZSA9ICJsaW5lIiwNCiAgICBuYW1lID0gIlBURiBzZW0gYWp1c3RlIGRlIGNhcGl0YWwgaHVtYW5vIiwNCiAgICBjb2xvciA9ICIjRkVCMDE1IiwNCiAgICBsaW5lV2lkdGggPSAyLjUsDQogICAgbWFya2VyID0gbGlzdChlbmFibGVkID0gVFJVRSwgcmFkaXVzID0gMyksDQogICAgdG9vbHRpcCA9IGxpc3QodmFsdWVEZWNpbWFscyA9IDEpDQogICkgJT4lDQogIGhjX2FkZF9zZXJpZXMoDQogICAgZGF0YSA9IGxpc3RfcGFyc2UyKGRhZG9zX2NvbSksDQogICAgdHlwZSA9ICJsaW5lIiwNCiAgICBuYW1lID0gIlBURiBjb20gYWp1c3RlIGRlIGNhcGl0YWwgaHVtYW5vIiwNCiAgICBjb2xvciA9ICIjMDIwMjNDIiwNCiAgICBsaW5lV2lkdGggPSAyLjUsDQogICAgbWFya2VyID0gbGlzdChlbmFibGVkID0gVFJVRSwgcmFkaXVzID0gMyksDQogICAgdG9vbHRpcCA9IGxpc3QodmFsdWVEZWNpbWFscyA9IDEpDQogICkgJT4lDQogIGhjX3hBeGlzKA0KICAgIGxpbmVDb2xvciA9ICIjRDlEOUQ5IiwNCiAgICB0aWNrQ29sb3IgPSAiI0Q5RDlEOSIsDQogICAgbGFiZWxzID0gbGlzdChzdHlsZSA9IGxpc3QoY29sb3IgPSAiIzQ0NDQ0NCIpKSwNCiAgICBwbG90QmFuZHMgPSBsaXN0KA0KICAgICAgbGlzdCgNCiAgICAgICAgZnJvbSA9IHRzXzIwMDgsDQogICAgICAgIHRvID0gdHNfMjAxNCwNCiAgICAgICAgY29sb3IgPSAicmdiYSgyLCAyLCA2MCwgMC4wNikiLA0KICAgICAgICBsYWJlbCA9IGxpc3QoDQogICAgICAgICAgdGV4dCA9ICJQZXLDrW9kbyBkZSBleHBhbnPDo28iLA0KICAgICAgICAgIHN0eWxlID0gbGlzdChjb2xvciA9ICIjNDQ0NDQ0IiwgZm9udFNpemUgPSAiMTFweCIsIGZvbnRTdHlsZSA9ICJpdGFsaWMiKSwNCiAgICAgICAgICBhbGlnbiA9ICJjZW50ZXIiLA0KICAgICAgICAgIHZlcnRpY2FsQWxpZ24gPSAidG9wIiwNCiAgICAgICAgICB5ID0gMTUNCiAgICAgICAgKQ0KICAgICAgKQ0KICAgICkNCiAgKSAlPiUNCiAgaGNfeUF4aXMoDQogICAgdGl0bGUgPSBsaXN0KA0KICAgICAgdGV4dCA9ICLDjW5kaWNlICgyMDA4ID0gMTAwKSIsDQogICAgICBzdHlsZSA9IGxpc3QoY29sb3IgPSAiIzQ0NDQ0NCIsIGZvbnRTaXplID0gIjEycHgiKQ0KICAgICksDQogICAgZ3JpZExpbmVDb2xvciA9ICIjRTZFNkU2IiwNCiAgICBsYWJlbHMgPSBsaXN0KA0KICAgICAgc3R5bGUgPSBsaXN0KGNvbG9yID0gIiM0NDQ0NDQiKSwNCiAgICAgIGZvcm1hdCA9ICJ7dmFsdWV9Ig0KICAgICksDQogICAgcGxvdExpbmVzID0gbGlzdCgNCiAgICAgIGxpc3QoDQogICAgICAgIHZhbHVlID0gMTAwLA0KICAgICAgICB3aWR0aCA9IDEuNSwNCiAgICAgICAgY29sb3IgPSAiIzlFOUU5RSIsDQogICAgICAgIGRhc2hTdHlsZSA9ICJTaG9ydERhc2giLA0KICAgICAgICB6SW5kZXggPSA1DQogICAgICApDQogICAgKQ0KICApICU+JQ0KICBoY19wbG90T3B0aW9ucygNCiAgICBzZXJpZXMgPSBsaXN0KA0KICAgICAgYW5pbWF0aW9uID0gRkFMU0UsDQogICAgICBzdGF0ZXMgPSBsaXN0KGluYWN0aXZlID0gbGlzdChvcGFjaXR5ID0gMSkpDQogICAgKQ0KICApICU+JQ0KICBoY190aXRsZSgNCiAgICB0ZXh0ID0gIlByb2R1dGl2aWRhZGUgVG90YWwgZG9zIEZhdG9yZXMg4oCUIEJyYXNpbCIsDQogICAgc3R5bGUgPSBsaXN0KGZvbnRTaXplID0gIjIwcHgiLCBmb250V2VpZ2h0ID0gImJvbGQiLCBjb2xvciA9ICIjMTExMTExIikNCiAgKSAlPiUNCiAgaGNfc3VidGl0bGUoDQogICAgdGV4dCA9ICLDjW5kaWNlIHJlYmFzZWFkbyBlbSAyMDA4ID0gMTAwIOKAlCAxOTk1IGEgMjAxNCIsDQogICAgc3R5bGUgPSBsaXN0KGZvbnRTaXplID0gIjEzcHgiLCBjb2xvciA9ICIjNjY2NjY2IikNCiAgKSAlPiUNCiAgaGNfdG9vbHRpcCgNCiAgICBzaGFyZWQgPSBUUlVFLA0KICAgIGNyb3NzaGFpcnMgPSBUUlVFLA0KICAgIGJhY2tncm91bmRDb2xvciA9ICIjRkZGRkZGIiwNCiAgICBib3JkZXJDb2xvciA9ICIjRDlEOUQ5IiwNCiAgICBib3JkZXJSYWRpdXMgPSA4LA0KICAgIHNoYWRvdyA9IEZBTFNFLA0KICAgIHN0eWxlID0gbGlzdChmb250U2l6ZSA9ICIxMnB4IikNCiAgKSAlPiUNCiAgaGNfbGVnZW5kKA0KICAgIGVuYWJsZWQgPSBUUlVFLA0KICAgIGFsaWduID0gImNlbnRlciIsDQogICAgdmVydGljYWxBbGlnbiA9ICJib3R0b20iLA0KICAgIGxheW91dCA9ICJob3Jpem9udGFsIg0KICApICU+JQ0KICBoY19yYW5nZVNlbGVjdG9yKGVuYWJsZWQgPSBGQUxTRSkgJT4lDQogIGhjX25hdmlnYXRvcihlbmFibGVkID0gRkFMU0UpICU+JQ0KICBoY19zY3JvbGxiYXIoZW5hYmxlZCA9IEZBTFNFKSAlPiUNCiAgaGNfY3JlZGl0cygNCiAgICBlbmFibGVkID0gVFJVRSwNCiAgICB0ZXh0ID0gIkZvbnRlOiBGR1YvSUJSRSDigJQgT2JzZXJ2YXTDs3JpbyBkYSBQcm9kdXRpdmlkYWRlIFJlZ2lzIEJvbmVsbGkuIEVsYWJvcmHDp8OjbyBwcsOzcHJpYSBJYk1hY3JvQkguIiwNCiAgICBzdHlsZSA9IGxpc3QoZm9udFNpemUgPSAiMTBweCIsIGNvbG9yID0gIiM3Nzc3NzciKQ0KICApDQpgYGANCg0KQSBQVEYgw6kgZGVyaXZhZGEgZGUgdW1hIGZ1bsOnw6NvIGRlIHByb2R1w6fDo28sIHF1ZSByZWxhY2lvbmEgbyBwcm9kdXRvIGNvbSBvcyBmYXRvcmVzIHV0aWxpemFkb3MgbmEgcHJvZHXDp8OjbywgcXVlIHBvZGUgc2VyIHZpc3RvIG5hIGVxdWHDp8OjbyAxLg0KDQoqKkVxdWHDp8OjbyAxOioqDQokJA0KWV90ID0gQV90ICh1X3QgS190KV57XGFscGhhfSBMX3ReezEtXGFscGhhfQ0KJCQNCg0KRW0gcXVlLCANCi0gJFlfdCQgcmVwcmVzZW50YSBvIHByb2R1dG87DQotICRBX3QkIHJlcHJlc2VudGEgYSBQcm9kdXRpdmlkYWRlIFRvdGFsIGRvcyBGYXRvcmVzOw0KLSAkdV90IEtfdCQgcmVwcmVzZW50YSBvIGNhcGl0YWwgYWp1c3RhZG8gcGVsYSB1dGlsaXphw6fDo28gZGEgY2FwYWNpZGFkZSBpbnN0YWxhZGE7DQotICRMX3QkIHJlcHJlc2VudGEgbyBmYXRvciB0cmFiYWxobzsNCi0gJFxhbHBoYSQgcmVwcmVzZW50YSBhIHBhcnRpY2lwYcOnw6NvIGRvIGNhcGl0YWwgbmEgcHJvZHXDp8OjbzsNCi0gJDEtXGFscGhhJCByZXByZXNlbnRhIGEgcGFydGljaXBhw6fDo28gZG8gdHJhYmFsaG8gbmEgcHJvZHXDp8Ojby4NCg0KSXNvbGFuZG8gQSwgb2J0w6ltLXNlIGEgUFRGLCBuYSBlcXVhw6fDo28gMi4NCg0KKipFcXVhw6fDo28gMjoqKg0KJCQNCkFfdCA9IFxmcmFje1lfdH17KHVfdCBLX3QpXntcYWxwaGF9IExfdF57MS1cYWxwaGF9fQ0KJCQNCg0KTm8gZW50YW50bywgYSBpbnRlcnByZXRhw6fDo28gZGEgUFRGIG11ZGEgcXVhbmRvIHNlIGluY29ycG9yYSBvIGFqdXN0ZSBkZSBjYXBpdGFsIGh1bWFuby4gU2VtIGVzc2UgYWp1c3RlLCBwYXJ0ZSBkbyBnYW5obyBhc3NvY2lhZG8gw6AgbWFpb3IgZXNjb2xhcmlkYWRlIG91IHF1YWxpZmljYcOnw6NvIGRhIGZvcsOnYSBkZSB0cmFiYWxobyBwb2RlIGFwYXJlY2VyIGluZGV2aWRhbWVudGUgY29tbyBhdW1lbnRvIGRlIHByb2R1dGl2aWRhZGUuIFBhcmEgY29ycmlnaXIgaXNzbywgbyBmYXRvciB0cmFiYWxobyBwYXNzYSBhIHNlciBhanVzdGFkbyBwZWxvIMONbmRpY2UgZGUgQ2FwaXRhbCBIdW1hbm8gKElDSCksIGV2aWRlbmNpYWRvIG5hIGVxdWHDp8OjbyAzLg0KDQoqKkVxdWHDp8OjbyAzOioqDQokJA0KTF90ID0gSF90IFx0aW1lcyBcbGVmdChcZnJhY3tJQ0hfdH17MTAwfVxyaWdodCkNCiQkDQoNCkVtIHF1ZTogLSAkSF90JCByZXByZXNlbnRhIGFzIGhvcmFzIHRyYWJhbGhhZGFzOw0KLSAkSUNIX3QkIHJlcHJlc2VudGEgbyDDjW5kaWNlIGRlIENhcGl0YWwgSHVtYW5vLg0KVm9sdGFuZG8gYW8gZ3LDoWZpY28gOCwgYSBQVEYgc2VtIGFqdXN0ZSBkZSBjYXBpdGFsIGh1bWFubyAobGluaGEgYW1hcmVsYSkgYXByZXNlbnRhIHVtYSB0cmFqZXTDs3JpYSBkZSBjcmVzY2ltZW50byBwcmF0aWNhbWVudGUgY29udMOtbnVhIGRlc2RlIDE5OTUuIER1cmFudGUgbyBwZXLDrW9kbyBkZSBleHBhbnPDo28gZWNvbsO0bWljYSBpbmljaWFkbyBlbSAyMDA4LCBlc3NlIGNyZXNjaW1lbnRvIHNlIGludGVuc2lmaWNhLCBtYW50ZW5kby1zZSBlbGV2YWRvIGF0w6kgYXByb3hpbWFkYW1lbnRlIDIwMTEsIHF1YW5kbyBhIHPDqXJpZSBwYXNzYSBhIGFwcmVzZW50YXIgY2VydGEgZXN0YWduYcOnw6NvIGUsIHBvc3Rlcmlvcm1lbnRlLCBxdWVkYS4gT2JzZXJ2YW5kbyBhcGVuYXMgZXNzYSBzw6lyaWUsIHNlcmlhIHBvc3PDrXZlbCBjb25jbHVpciBxdWUgbyBwZXLDrW9kbyBmb2kgYWNvbXBhbmhhZG8gcG9yIGdhbmhvcyByZWxldmFudGVzIGRlIHByb2R1dGl2aWRhZGUuDQpObyBlbnRhbnRvLCBlc3NhIGludGVycHJldGHDp8OjbyBzZSBhbHRlcmEgcXVhbmRvIHNlIGFuYWxpc2EgYSBQVEYgY29tIGFqdXN0ZSBkZSBjYXBpdGFsIGh1bWFubyAobGluaGEgYXp1bCkuIEFvIGluY29ycG9yYXIgbyBJQ0ggYW8gZmF0b3IgdHJhYmFsaG8sIHBhcnRlIGRvIGNyZXNjaW1lbnRvIGFudGVyaW9ybWVudGUgYXRyaWJ1w61kbyDDoCBwcm9kdXRpdmlkYWRlIHBhc3NhIGEgc2VyIGV4cGxpY2FkYSBwZWxhIG1haW9yIHF1YWxpZmljYcOnw6NvIGRhIG3Do28gZGUgb2JyYS4gRHVyYW50ZSB0b2RvIG8gcGVyw61vZG8gZGUgZXhwYW5zw6NvLCBhIHPDqXJpZSBjb20gYWp1c3RlIHBlcm1hbmVjZXUgYWJhaXhvIGRhIHPDqXJpZSBzZW0gYWp1c3RlLCBpbmRpY2FuZG8gcXVlIG9zIGdhbmhvcyBlZmV0aXZvcyBkZSBwcm9kdXRpdmlkYWRlIGZvcmFtIGxpbWl0YWRvcy4gSXNzbyBzaWduaWZpY2EgcXVlIHBhcnRlIGltcG9ydGFudGUgZG8gY3Jlc2NpbWVudG8gb2JzZXJ2YWRvIG5vIHBlcsOtb2RvIGVzdGV2ZSBhc3NvY2lhZGEgYW8gYXVtZW50byBkYSBxdWFsaWZpY2HDp8OjbyBkb3MgdHJhYmFsaGFkb3JlcywgZSBuw6NvIGEgZ2FuaG9zIGVzdHJ1dHVyYWlzIGRlIGVmaWNpw6puY2lhIHByb2R1dGl2YS4gQXNzaW0sIGEgYW7DoWxpc2UgZGEgUFRGIHJlZm9yw6dhIHF1ZSBvIGNpY2xvIGRlIGV4cGFuc8OjbyBicmFzaWxlaXJvIG7Do28gZm9pIHN1c3RlbnRhZG8gcG9yIGF1bWVudG9zIGNvbnNpc3RlbnRlcyBkZSBwcm9kdXRpdmlkYWRlIG5vIGxvbmdvIHByYXpvLiBPIGNyZXNjaW1lbnRvIG9jb3JyZXUsIG1hcyBzZW0gdHJhbnNmb3JtYcOnw6NvIHN1ZmljaWVudGUgbmEgY2FwYWNpZGFkZSBkYSBlY29ub21pYSBkZSBwcm9kdXppciBtYWlzIHV0aWxpemFuZG8gb3MgbWVzbW9zIGZhdG9yZXMgZGUgcHJvZHXDp8Ojby4NCkVzc2UgcmVzdWx0YWRvIMOpIGNvZXJlbnRlIGNvbSBvcyBkZW1haXMgaW5kaWNhZG9yZXMgYW5hbGlzYWRvcyBhbnRlcmlvcm1lbnRlLiBBIGRlc2FjZWxlcmHDp8OjbyBkbyBpbnZlc3RpbWVudG8gcHJvZHV0aXZvIGUgYSBsaW1pdGHDp8OjbyBkb3MgZ2FuaG9zIGRlIHByb2R1dGl2aWRhZGUgc3VnZXJlbSBxdWUgbyBtb2RlbG8gZGUgY3Jlc2NpbWVudG8gZG8gcGVyw61vZG8gcG9zc3XDrWEgZnJhZ2lsaWRhZGVzIGVzdHJ1dHVyYWlzIGltcG9ydGFudGVzLCBzZW5kbyBzdXN0ZW50YWRvIHByaW5jaXBhbG1lbnRlIHBlbGEgZXhwYW5zw6NvIGRvIGNvbnN1bW8gZSBkbyBtZXJjYWRvIGludGVybm8uDQoNCiMjIyAxLjQgTyBlc2dvdGFtZW50byBkbyBjaWNsbw0KDQpUZW5kbyBlbSB2aXN0YSBvcyBmYXRvcmVzIGFuYWxpc2Fkb3MgYW50ZXJpb3JtZW50ZSAtIHRhbnRvIG9zIG1vdG9yZXMgZGEgZXhwYW5zw6NvIHF1YW50byBhcyBmcmFnaWxpZGFkZXMgZXN0cnV0dXJhaXMgYWN1bXVsYWRhcyBhbyBsb25nbyBkbyBwZXLDrW9kbyAtLCB0b3JuYS1zZSBwb3Nzw612ZWwgb2JzZXJ2YXIgbyBpbsOtY2lvIGRvIGVzZ290YW1lbnRvIGRvIGNpY2xvIGVjb27DtG1pY28gYnJhc2lsZWlyby4gTyBjcmVzY2ltZW50byBzdXN0ZW50YWRvIHByaW5jaXBhbG1lbnRlIHBlbGEgZXhwYW5zw6NvIGRhIGRlbWFuZGEgaW50ZXJuYSBlIGRvIGNvbnN1bW8gcGFzc291IGEgZW5jb250cmFyIGxpbWl0ZXMgZW0gdW0gY29udGV4dG8gZGUgZGVzYWNlbGVyYcOnw6NvIGRvIGludmVzdGltZW50byBwcm9kdXRpdm8gZSBkZSBnYW5ob3MgcmVzdHJpdG9zIGRlIHByb2R1dGl2aWRhZGUuDQpOZXNzZSBjb250ZXh0bywgbyBncsOhZmljbyA5IGFwcmVzZW50YSBhIGV2b2x1w6fDo28gZGEgTmVjZXNzaWRhZGUgZGUgRmluYW5jaWFtZW50byBkbyBTZXRvciBQw7pibGljbyAoTkZTUCkgZSBkYSBEw612aWRhIEJydXRhIGRvIEdvdmVybm8gR2VyYWwgZW50cmUgMjAwOCBlIDIwMTQuDQoNCioqR3LDoWZpY28gOToqKg0KDQpgYGB7ciwgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCmRhdGFfaW5pY2lvIDwtIGFzLkRhdGUoIjIwMDgtMDEtMDEiKQ0KZGF0YV9maW0gPC0gYXMuRGF0ZSgiMjAxNC0xMi0zMSIpDQoNCnJlc3VsdGFkb19wcmltYXJpbyA8LSBnYmNiZF9nZXRfc2VyaWVzKA0KICBpZCA9IGMoInJlc3VsdGFkb19wcmltYXJpbyIgPSA1NzkzKSwNCiAgZmlyc3QuZGF0ZSA9IGRhdGFfaW5pY2lvLA0KICBsYXN0LmRhdGUgPSBkYXRhX2ZpbSwNCiAgZm9ybWF0LmRhdGEgPSAid2lkZSINCikgJT4lDQogIG11dGF0ZShEYXRhID0gYXMuRGF0ZShyZWYuZGF0ZSkpDQoNCmRpdmlkYV9icnV0YSA8LSBnYmNiZF9nZXRfc2VyaWVzKA0KICBpZCA9IGMoImRpdmlkYV9icnV0YSIgPSAxMzc2MiksDQogIGZpcnN0LmRhdGUgPSBkYXRhX2luaWNpbywNCiAgbGFzdC5kYXRlID0gZGF0YV9maW0sDQogIGZvcm1hdC5kYXRhID0gIndpZGUiDQopICU+JQ0KICBtdXRhdGUoRGF0YSA9IGFzLkRhdGUocmVmLmRhdGUpKQ0KDQpkYWRvcyA8LSByZXN1bHRhZG9fcHJpbWFyaW8gJT4lDQogIHNlbGVjdChEYXRhLCByZXN1bHRhZG9fcHJpbWFyaW8pICU+JQ0KICBmdWxsX2pvaW4oDQogICAgZGl2aWRhX2JydXRhICU+JSBzZWxlY3QoRGF0YSwgZGl2aWRhX2JydXRhKSwNCiAgICBieSA9ICJEYXRhIg0KICApICU+JQ0KICBhcnJhbmdlKERhdGEpICU+JQ0KICBuYS5vbWl0KCkgJT4lDQogIG11dGF0ZSh0aW1lc3RhbXAgPSBhcy5udW1lcmljKGFzLlBPU0lYY3QoRGF0YSwgdHogPSAiVVRDIikpICogMTAwMCkNCg0KZ3JhZmljbyA8LSBoaWdoY2hhcnQodHlwZSA9ICJzdG9jayIpICU+JQ0KICBoY19jaGFydCgNCiAgICBiYWNrZ3JvdW5kQ29sb3IgPSAiI0ZGRkZGRiIsDQogICAgc3BhY2luZ1RvcCA9IDIwLCBzcGFjaW5nUmlnaHQgPSAyMCwNCiAgICBzcGFjaW5nQm90dG9tID0gMjAsIHNwYWNpbmdMZWZ0ID0gMjANCiAgKSAlPiUNCiAgaGNfYWRkX3NlcmllcygNCiAgICBkYXRhID0gbGFwcGx5KHNlcV9sZW4obnJvdyhkYWRvcykpLCBmdW5jdGlvbihpKSBsaXN0KGRhZG9zJHRpbWVzdGFtcFtpXSwgZGFkb3MkcmVzdWx0YWRvX3ByaW1hcmlvW2ldKSksDQogICAgdHlwZSA9ICJjb2x1bW4iLA0KICAgIG5hbWUgPSAiTkZTUCIsDQogICAgY29sb3IgPSAiI0ZFQjAxNSIsDQogICAgYm9yZGVyQ29sb3IgPSAiI0ZFQjAxNSIsDQogICAgcG9pbnRQYWRkaW5nID0gMC4wOCwNCiAgICBncm91cFBhZGRpbmcgPSAwLjEwLA0KICAgIHlBeGlzID0gMCwNCiAgICB0b29sdGlwID0gbGlzdCh2YWx1ZURlY2ltYWxzID0gMiwgdmFsdWVTdWZmaXggPSAiIHAucC4iKQ0KICApICU+JQ0KICBoY19hZGRfc2VyaWVzKA0KICAgIGRhdGEgPSBsYXBwbHkoc2VxX2xlbihucm93KGRhZG9zKSksIGZ1bmN0aW9uKGkpIGxpc3QoZGFkb3MkdGltZXN0YW1wW2ldLCBkYWRvcyRkaXZpZGFfYnJ1dGFbaV0pKSwNCiAgICB0eXBlID0gImxpbmUiLA0KICAgIG5hbWUgPSAiRMOtdmlkYSBCcnV0YSAoJSBkbyBQSUIpIiwNCiAgICBjb2xvciA9ICIjMDIwMjNDIiwNCiAgICBsaW5lV2lkdGggPSAzLA0KICAgIG1hcmtlciA9IGxpc3QoZW5hYmxlZCA9IEZBTFNFKSwNCiAgICB5QXhpcyA9IDEsDQogICAgdG9vbHRpcCA9IGxpc3QodmFsdWVEZWNpbWFscyA9IDIsIHZhbHVlU3VmZml4ID0gIiUiKQ0KICApICU+JQ0KICBoY195QXhpc19tdWx0aXBsZXMoDQogICAgbGlzdCgNCiAgICAgIHRpdGxlID0gbGlzdCgNCiAgICAgICAgdGV4dCA9ICJORlNQIC0gUmVzdWx0YWRvIFByaW3DoXJpbyAoJSBkbyBQSUIpIiwNCiAgICAgICAgc3R5bGUgPSBsaXN0KGNvbG9yID0gIiM0NDQ0NDQiLCBmb250U2l6ZSA9ICIxMnB4IikNCiAgICAgICksDQogICAgICBvcHBvc2l0ZSA9IEZBTFNFLA0KICAgICAgZ3JpZExpbmVDb2xvciA9ICIjRTZFNkU2IiwNCiAgICAgIGdyaWRMaW5lV2lkdGggPSAxLA0KICAgICAgbGFiZWxzID0gbGlzdChzdHlsZSA9IGxpc3QoY29sb3IgPSAiIzQ0NDQ0NCIpKSwNCiAgICAgIHBsb3RMaW5lcyA9IGxpc3QoDQogICAgICAgIGxpc3QoDQogICAgICAgICAgdmFsdWUgPSAwLA0KICAgICAgICAgIHdpZHRoID0gMS41LA0KICAgICAgICAgIGNvbG9yID0gIiM5RTlFOUUiLA0KICAgICAgICAgIGRhc2hTdHlsZSA9ICJTaG9ydERhc2giLA0KICAgICAgICAgIHpJbmRleCA9IDUNCiAgICAgICAgKQ0KICAgICAgKQ0KICAgICksDQogICAgbGlzdCgNCiAgICAgIHRpdGxlID0gbGlzdCgNCiAgICAgICAgdGV4dCA9ICJEw612aWRhIEJydXRhICglIGRvIFBJQikiLA0KICAgICAgICBzdHlsZSA9IGxpc3QoY29sb3IgPSAiIzQ0NDQ0NCIsIGZvbnRTaXplID0gIjEycHgiKQ0KICAgICAgKSwNCiAgICAgIG9wcG9zaXRlID0gVFJVRSwNCiAgICAgIGdyaWRMaW5lV2lkdGggPSAwLA0KICAgICAgbGFiZWxzID0gbGlzdChzdHlsZSA9IGxpc3QoY29sb3IgPSAiIzQ0NDQ0NCIpKQ0KICAgICkNCiAgKSAlPiUNCiAgaGNfeEF4aXMoDQogICAgbGluZUNvbG9yID0gIiNEOUQ5RDkiLA0KICAgIHRpY2tDb2xvciA9ICIjRDlEOUQ5IiwNCiAgICBsYWJlbHMgPSBsaXN0KHN0eWxlID0gbGlzdChjb2xvciA9ICIjNDQ0NDQ0IikpDQogICkgJT4lDQogIGhjX3Bsb3RPcHRpb25zKA0KICAgIHNlcmllcyA9IGxpc3QoDQogICAgICBhbmltYXRpb24gPSBGQUxTRSwNCiAgICAgIHN0YXRlcyA9IGxpc3QoaW5hY3RpdmUgPSBsaXN0KG9wYWNpdHkgPSAxKSkNCiAgICApLA0KICAgIGNvbHVtbiA9IGxpc3QoYm9yZGVyV2lkdGggPSAwKQ0KICApICU+JQ0KICBoY190aXRsZSgNCiAgICB0ZXh0ID0gIk5lY2Vzc2lkYWRlIGRlIEZpbmFuY2lhbWVudG8gZG8gU2V0b3IgUMO6YmxpY28gZSBEw612aWRhIEJydXRhIGRvIEdvdmVybm8gR2VyYWwiLA0KICAgIHN0eWxlID0gbGlzdChmb250U2l6ZSA9ICIyMHB4IiwgZm9udFdlaWdodCA9ICJib2xkIiwgY29sb3IgPSAiIzExMTExMSIpDQogICkgJT4lDQogIGhjX3N1YnRpdGxlKA0KICAgIHRleHQgPSAiRXZvbHXDp8OjbyBkYSBORlNQIGUgZG8gZW5kaXZpZGFtZW50byBww7pibGljbyBubyBCcmFzaWwgKDIwMDjigJMyMDE0KSIsDQogICAgc3R5bGUgPSBsaXN0KGZvbnRTaXplID0gIjEzcHgiLCBjb2xvciA9ICIjNjY2NjY2IikNCiAgKSAlPiUNCiAgaGNfdG9vbHRpcCgNCiAgICBzaGFyZWQgPSBUUlVFLA0KICAgIGNyb3NzaGFpcnMgPSBUUlVFLA0KICAgIGJhY2tncm91bmRDb2xvciA9ICIjRkZGRkZGIiwNCiAgICBib3JkZXJDb2xvciA9ICIjRDlEOUQ5IiwNCiAgICBib3JkZXJSYWRpdXMgPSA4LA0KICAgIHNoYWRvdyA9IEZBTFNFLA0KICAgIHN0eWxlID0gbGlzdChmb250U2l6ZSA9ICIxMnB4IikNCiAgKSAlPiUNCiAgaGNfbGVnZW5kKA0KICAgIGVuYWJsZWQgPSBUUlVFLA0KICAgIGFsaWduID0gImNlbnRlciIsDQogICAgdmVydGljYWxBbGlnbiA9ICJib3R0b20iLA0KICAgIGxheW91dCA9ICJob3Jpem9udGFsIiwNCiAgICBpdGVtU3R5bGUgPSBsaXN0KA0KICAgICAgY29sb3IgPSAiIzIyMjIyMiIsDQogICAgICBmb250V2VpZ2h0ID0gIm5vcm1hbCIsDQogICAgICBmb250U2l6ZSA9ICIxMnB4Ig0KICAgICkNCiAgKSAlPiUNCiAgaGNfcmFuZ2VTZWxlY3RvcigNCiAgICBlbmFibGVkID0gVFJVRSwNCiAgICBpbnB1dEVuYWJsZWQgPSBGQUxTRSwNCiAgICBzZWxlY3RlZCA9IDQsDQogICAgYnV0dG9ucyA9IGxpc3QoDQogICAgICBsaXN0KHR5cGUgPSAieWVhciIsIGNvdW50ID0gMSwgdGV4dCA9ICIxQSIpLA0KICAgICAgbGlzdCh0eXBlID0gInllYXIiLCBjb3VudCA9IDIsIHRleHQgPSAiMkEiKSwNCiAgICAgIGxpc3QodHlwZSA9ICJ5ZWFyIiwgY291bnQgPSAzLCB0ZXh0ID0gIjNBIiksDQogICAgICBsaXN0KHR5cGUgPSAiYWxsIiwgdGV4dCA9ICJUdWRvIikNCiAgICApDQogICkgJT4lDQogIGhjX25hdmlnYXRvcihlbmFibGVkID0gVFJVRSkgJT4lDQogIGhjX3Njcm9sbGJhcihlbmFibGVkID0gRkFMU0UpICU+JQ0KICBoY19jcmVkaXRzKA0KICAgIGVuYWJsZWQgPSBUUlVFLA0KICAgIHRleHQgPSAiRm9udGU6IEJhbmNvIENlbnRyYWwgZG8gQnJhc2lsLiBFbGFib3Jhw6fDo28gcHLDs3ByaWEgSWJNYWNyb0JILiIsDQogICAgc3R5bGUgPSBsaXN0KGZvbnRTaXplID0gIjEwcHgiLCBjb2xvciA9ICIjNzc3Nzc3IikNCiAgKQ0KDQpncmFmaWNvDQpgYGANCg0KQSBORlNQIHBlcm1hbmVjZXUgbmVnYXRpdmEgZHVyYW50ZSBncmFuZGUgcGFydGUgZG8gcGVyw61vZG8gYW5hbGlzYWRvLCBpbmRpY2FuZG8gYSBwcmVzZW7Dp2EgZGUgc3VwZXLDoXZpdHMgcHJpbcOhcmlvcy4gQW8gbG9uZ28gZG8gY2ljbG8sIHBvcsOpbSwgb2JzZXJ2YS1zZSB1bWEgcmVkdcOnw6NvIGRlc3NlcyBzdXBlcsOhdml0cy4gSXNzbyBzaWduaWZpY2EgcXVlLCBlbWJvcmEgbyBzZXRvciBww7pibGljbyBhaW5kYSBhcHJlc2VudGFzc2UgcmVzdWx0YWRvIHBvc2l0aXZvLCBzdWEgY2FwYWNpZGFkZSBkZSBwb3VwYW7Dp2EgZmlzY2FsIHZpbmhhIGRpbWludWluZG8uDQpBIGTDrXZpZGEgYnJ1dGEgZG8gZ292ZXJubyBnZXJhbCBhcHJlc2VudG91IG9zY2lsYcOnw7VlcyBhbyBsb25nbyBkbyBwZXLDrW9kbyBwb3N0ZXJpb3Igw6AgY3Jpc2UgZGUgMjAwOCwgYWx0ZXJuYW5kbyBtb21lbnRvcyBkZSByZWR1w6fDo28gZSBhdW1lbnRvLiBObyBlbnRhbnRvLCBhIHBhcnRpciBkZSBtYXLDp28gZGUgMjAxNCAtIG1hcmNvIHF1ZSBzaW5hbGl6YSBvIGVuY2VycmFtZW50byBvZmljaWFsIGRvIGNpY2xvIGRlIGV4cGFuc8OjbyAtLCBhIHRyYWpldMOzcmlhIGRhIGTDrXZpZGEgcGFzc2EgYSBhcHJlc2VudGFyIGNyZXNjaW1lbnRvIGNvbnTDrW51by4gTmVzc2UgbW9tZW50bywgYSBkw612aWRhIGJydXRhIGNvcnJlc3BvbmRpYSBhIGFwcm94aW1hZGFtZW50ZSA1MSw3OSUsIGFsY2Fuw6dhbmRvIGNlcmNhIGRlIDU2LDI4JSBlbSBkZXplbWJybyBkZSAyMDE0Lg0KTyBjb21wb3J0YW1lbnRvIGRhIE5GU1AgYWNvbXBhbmhhIGVzc2UgbW92aW1lbnRvLiBFbSBhYnJpbCBkZSAyMDE0LCBvIGluZGljYWRvciBhaW5kYSBzZSBlbmNvbnRyYXZhIGVtIGFwcm94aW1hZGFtZW50ZSAtMSw2OCUgZG8gUElCLCBpbmRpY2FuZG8gc3VwZXLDoXZpdCBwcmltw6FyaW8uIE5vIGVudGFudG8sIGFvIGxvbmdvIGRvcyBtZXNlcyBzZWd1aW50ZXMsIGEgbmVjZXNzaWRhZGUgZGUgZmluYW5jaWFtZW50byBwYXNzYSBhIGF1bWVudGFyIGNvbnRpbnVhbWVudGUsIGF0w6kgYXRpbmdpciAwLDU2JSBkbyBQSUIgZW0gZGV6ZW1icm8gZGUgMjAxNCAtIHByaW1laXJvIHZhbG9yIHBvc2l0aXZvIG9ic2VydmFkbyBlbSB0b2RvIG8gcGVyw61vZG8gYW5hbGlzYWRvLg0KRXNzZXMgbW92aW1lbnRvcyByZWZvcsOnYW0gYSBwZXJjZXDDp8OjbyBkZSBlc2dvdGFtZW50byBkbyBjaWNsbyBlY29uw7RtaWNvIGJyYXNpbGVpcm8uIE8gY3Jlc2NpbWVudG8gc3VzdGVudGFkbyBhbyBsb25nbyBkb3MgYW5vcyBhbnRlcmlvcmVzIHBhc3NvdSBhIGVuY29udHJhciBsaW1pdGVzIGVtIHVtIGNvbnRleHRvIG1hcmNhZG8gcGVsYSBkZXNhY2VsZXJhw6fDo28gZG8gaW52ZXN0aW1lbnRvIHByb2R1dGl2bywgcGVsYSBsaW1pdGHDp8OjbyBkb3MgZ2FuaG9zIGRlIHByb2R1dGl2aWRhZGUgZSBwZWxhIGRldGVyaW9yYcOnw6NvIGdyYWR1YWwgZGFzIGNvbnRhcyBww7pibGljYXMuIEFzc2ltLCBvcyBpbmRpY2Fkb3JlcyBmaXNjYWlzIHJlZm9yw6dhbSBhIGlkZWlhIGRlIHF1ZSBvIG1vZGVsbyBkZSBjcmVzY2ltZW50byBkbyBwZXLDrW9kbyBwb3NzdcOtYSBmcmFnaWxpZGFkZXMgZXN0cnV0dXJhaXMgaW1wb3J0YW50ZXMsIHN1c3RlbnRhbmRvLXNlIHByaW5jaXBhbG1lbnRlIHBlbGEgZXhwYW5zw6NvIGRvIGNvbnN1bW8gZSBkYSBkZW1hbmRhIGludGVybmEsIHNlbSBhdmFuw6dvcyBzdWZpY2llbnRlcyBlbSBwcm9kdXRpdmlkYWRlIGUgaW52ZXN0aW1lbnRvIGNhcGF6ZXMgZGUgZ2FyYW50aXIgc3VhIHN1c3RlbnRhw6fDo28gbm8gbG9uZ28gcHJhem8uDQoNCiMgMi4gQSBHcmFuZGUgUmVjZXNzw6NvICgyMDE04oCTMjAxNikNCg0KIyMgMi4xIENvbnRleHRvIGUgZGF0YcOnw6NvIG9maWNpYWwgZGEgcmVjZXNzw6NvDQoNCkNvbmZvcm1lIGrDoSBhcHJlc2VudGFkbyBuYSBpbnRyb2R1w6fDo28sIGEgcmVjZXNzw6NvIGJyYXNpbGVpcmEgcmVjZW50ZSBmb2kgZGF0YWRhIHBlbG8gQ09EQUNFIGVudHJlIG8gc2VndW5kbyB0cmltZXN0cmUgZGUgMjAxNCAocGljbykgZSBvIHF1YXJ0byB0cmltZXN0cmUgZGUgMjAxNiAodmFsZSksIHRvdGFsaXphbmRvIG9uemUgdHJpbWVzdHJlcyBjb25zZWN1dGl2b3MgZGUgY29udHJhw6fDo28gZGEgYXRpdmlkYWRlLiBFbSBkYXRhw6fDo28gbWVuc2FsLCBkaXZ1bGdhZGEgcG9zdGVyaW9ybWVudGUgcGVsbyBDb21pdMOqLCBvIHBpY28gb2NvcnJldSBlbSBtYXLDp28gZGUgMjAxNCBlIG8gdmFsZSBlbSBkZXplbWJybyBkZSAyMDE2LiBBIHF1ZWRhIGFjdW11bGFkYSBkbyBQSUIgbm8gcGVyw61vZG8sIG1lZGlkYSBwZWxhIHPDqXJpZSBkZXNzYXpvbmFsaXphZGEsIGZvaSBkYSBvcmRlbSBkZSA3IGEgOCUsIG1hZ25pdHVkZSBxdWUgc2UgYXByb3hpbWEgZGUgMTElIHF1YW5kbyBhdmFsaWFkYSBlbSB0ZXJtb3MgcGVyIGNhcGl0YS4NCg0KRW0gdGVybW9zIGRlIGNvbXBhcmHDp8OjbyBoaXN0w7NyaWNhLCB0cmF0YS1zZSBkZSB1bWEgZGFzIHJlY2Vzc8O1ZXMgbWFpcyBzZXZlcmFzIGrDoSByZWdpc3RyYWRhcyBubyBCcmFzaWwuIEZvaSBhIG1haXMgbG9uZ2EgZGVzZGUgbyBpbsOtY2lvIGRhIGRhdGHDp8OjbyB0cmltZXN0cmFsIGRvIENPREFDRSBlbSAxOTgwLCB1bWEgZGFzIG1haXMgcHJvZnVuZGFzIGRvcyDDumx0aW1vcyAxNTAgYW5vcyBkZSBoaXN0w7NyaWEgZWNvbsO0bWljYSBkbyBwYcOtcywgZSBmb2kgc2VndWlkYSBwZWxhIHJlY3VwZXJhw6fDo28gbWFpcyBsZW50YSBqw6EgZG9jdW1lbnRhZGEg4oCUIG8gbsOtdmVsIHByw6ktY3Jpc2UgZG8gUElCIHBlciBjYXBpdGEgc8OzIHNlcmlhIHJlY3VwZXJhZG8gYW5vcyBkZXBvaXMuDQoNCk5vIEdyw6FmaWNvIDEwLCDDqSBwb3Nzw612ZWwgdmlzdWFsaXphciBhIGludGVyYcOnw6NvIGVudHJlIG8gUElCLCBhIFNlbGljIGUgbyBJUENBIGFvIGxvbmdvIGRvIGNpY2xvIHJlY2Vzc2l2bzogYSDDoXJlYSBzb21icmVhZGEgZGVsaW1pdGEgbyBwZXLDrW9kbyBkYXRhZG8gcGVsbyBDT0RBQ0UgKDJULzIwMTQgYSA0VC8yMDE2KSwgZHVyYW50ZSBvIHF1YWwgbyBQSUIgcmVnaXN0cm91IHZhcmlhw6fDtWVzIG5lZ2F0aXZhcyBzdWNlc3NpdmFzIGVucXVhbnRvIGEgaW5mbGHDp8OjbyBhdGluZ2lhIDEwLDY3JSBlbSAyMDE1IGUgYSBTZWxpYyBlcmEgZWxldmFkYSBhdMOpIDE0LDI1JSBhbyBhbm8uDQoNCioqR3LDoWZpY28gMTAqKg0KDQpgYGB7cn0NCmxpYnJhcnkodGlkeXZlcnNlKQ0KbGlicmFyeShyZWFkeGwpDQpsaWJyYXJ5KGhpZ2hjaGFydGVyKQ0KbGlicmFyeShsdWJyaWRhdGUpDQpsaWJyYXJ5KHJiY2IpDQpsaWJyYXJ5KEdldEJDQkRhdGEpDQoNCiMgUGFsZXRhIGRhIExpZ2ENCkFNQVJFTE8gICAgIDwtICIjZmViNzEyIg0KQVpVTF9FU0NVUk8gPC0gIiMwMjAyM0MiDQpBWlVMX01FRElPICA8LSAiIzAwMmM1ZSINCkNJTlpBICAgICAgIDwtICIjYTZhNmE2Ig0KVEVYVE8gICAgICAgPC0gIiMzYTNhM2EiDQpBWlVMX0NMQVJPICA8LSAiIzQ2YjFlMSINCg0KIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCiMgMSkgUElCIFRSSU1FU1RSQUwNCiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQoNCmJydXRvIDwtIHJlYWRfZXhjZWwoZmlsZS5wYXRoKGRhZG9zX2RpciwgInRhYmVsYTU5MzItMy54bHN4IiksIHNoZWV0ID0gIlRhYmVsYSIsIGNvbF9uYW1lcyA9IEZBTFNFKQ0KDQp0cmltZXN0cmVzIDwtIGFzLmNoYXJhY3Rlcih1bmxpc3QoYnJ1dG9bNCwgLTFdKSkNCnZhbG9yZXMgICAgPC0gYXMubnVtZXJpYyh1bmxpc3QoYnJ1dG9bNiwgLTFdKSkNCg0KcGFyc2VfdHJpbWVzdHJlIDwtIGZ1bmN0aW9uKHgpIHsNCiAgcSA8LSBhcy5pbnRlZ2VyKHN1YnN0cih4LCAxLCAxKSkNCiAgeSA8LSBhcy5pbnRlZ2VyKHN1YnN0cih4LCBuY2hhcih4KSAtIDMsIG5jaGFyKHgpKSkNCiAgYXMuRGF0ZShzcHJpbnRmKCIlZC0lMDJkLTAxIiwgeSwgKHEgLSAxKSAqIDMgKyAxKSkNCn0NCg0Kcm90dWxvX2N1cnRvIDwtIGZ1bmN0aW9uKHgpIHsNCiAgcSA8LSBzdWJzdHIoeCwgMSwgMSkNCiAgeSA8LSBzdWJzdHIoeCwgbmNoYXIoeCkgLSAzLCBuY2hhcih4KSkNCiAgc3ByaW50ZigiVCVzLyVzIiwgcSwgeSkNCn0NCg0KcGliIDwtIHRpYmJsZSgNCiAgdHJpbWVzdHJlID0gdHJpbWVzdHJlcywNCiAgcm90dWxvICAgID0gc2FwcGx5KHRyaW1lc3RyZXMsIHJvdHVsb19jdXJ0byksDQogIGRhdGEgICAgICA9IHNhcHBseSh0cmltZXN0cmVzLCBwYXJzZV90cmltZXN0cmUpICU+JSBhcy5EYXRlKG9yaWdpbiA9ICIxOTcwLTAxLTAxIiksDQogIHBpYiAgICAgICA9IHZhbG9yZXMNCikgJT4lDQogIGZpbHRlcihkYXRhID49IGFzLkRhdGUoIjIwMTAtMDEtMDEiKSwNCiAgICAgICAgIGRhdGEgPD0gYXMuRGF0ZSgiMjAxNy0xMi0zMSIpKSAlPiUNCiAgbXV0YXRlKA0KICAgIGVtX3JlY2Vzc2FvID0gZGF0YSA+PSBhcy5EYXRlKCIyMDE0LTA0LTAxIikgJiBkYXRhIDw9IGFzLkRhdGUoIjIwMTYtMTAtMDEiKSwNCiAgICBjb3JfcGliICAgICA9IGlmX2Vsc2UoZW1fcmVjZXNzYW8sIEFaVUxfRVNDVVJPLCBBWlVMX0NMQVJPKQ0KICApDQoNCiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQojIDIpIElQQ0EgMTJNIE1FTlNBTA0KIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCg0KaXBjYSA8LSBnZXRfc2VyaWVzKA0KICAxMzUyMiwNCiAgc3RhcnRfZGF0ZSA9ICIyMDEwLTAxLTAxIiwNCiAgZW5kX2RhdGUgICA9ICIyMDE3LTEyLTMxIg0KKSAlPiUNCiAgcmVuYW1lKGlwY2EgPSBgMTM1MjJgKSAlPiUNCiAgbXV0YXRlKA0KICAgIGRhdGUgPSBhcy5EYXRlKGRhdGUpLA0KICAgIHRyaW1lc3RyZV9kYXRhID0gZmxvb3JfZGF0ZShkYXRlLCAicXVhcnRlciIpDQogICkNCg0KaXBjYV90cmkgPC0gaXBjYSAlPiUNCiAgYXJyYW5nZShkYXRlKSAlPiUNCiAgZ3JvdXBfYnkodHJpbWVzdHJlX2RhdGEpICU+JQ0KICBzdW1tYXJpc2UoDQogICAgaXBjYSA9IGxhc3QobmEub21pdChpcGNhKSksDQogICAgLmdyb3VwcyA9ICJkcm9wIg0KICApDQoNCiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQojIDMpIFNFTElDIE1FTlNBTA0KIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCg0KaW5pY2lvIDwtIGFzLkRhdGUoIjIwMTAtMDEtMDEiKQ0KZmltICAgIDwtIGFzLkRhdGUoIjIwMTctMTItMzEiKQ0KDQpzZXJpZXNfaWRzIDwtIGMoDQogIFNlbGljID0gNDMyDQopDQoNCmRhZG9zX2JjYiA8LSBnYmNiZF9nZXRfc2VyaWVzKA0KICBpZCA9IHNlcmllc19pZHMsDQogIGZpcnN0LmRhdGUgPSBpbmljaW8sDQogIGxhc3QuZGF0ZSAgPSBmaW0sDQogIGZvcm1hdC5kYXRhID0gIndpZGUiDQopDQoNCnNlbGljIDwtIGRhZG9zX2JjYiAlPiUNCiAgcmVuYW1lKA0KICAgIGRhdGUgPSByZWYuZGF0ZSwNCiAgICBzZWxpYyA9IFNlbGljDQogICkgJT4lDQogIG11dGF0ZSgNCiAgICBkYXRlID0gYXMuRGF0ZShkYXRlKSwNCiAgICB0cmltZXN0cmVfZGF0YSA9IGZsb29yX2RhdGUoZGF0ZSwgInF1YXJ0ZXIiKQ0KICApICU+JQ0KICBhcnJhbmdlKGRhdGUpDQoNCnNlbGljX3RyaSA8LSBzZWxpYyAlPiUNCiAgZ3JvdXBfYnkodHJpbWVzdHJlX2RhdGEpICU+JQ0KICBzdW1tYXJpc2UoDQogICAgc2VsaWMgPSBsYXN0KG5hLm9taXQoc2VsaWMpKSwNCiAgICAuZ3JvdXBzID0gImRyb3AiDQogICkNCg0KIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCiMgNCkgSlVOVEFSIFBJQiwgSVBDQSBFIFNFTElDDQojID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KDQpkZiA8LSBwaWIgJT4lDQogIGxlZnRfam9pbihpcGNhX3RyaSwgYnkgPSBjKCJkYXRhIiA9ICJ0cmltZXN0cmVfZGF0YSIpKSAlPiUNCiAgbGVmdF9qb2luKHNlbGljX3RyaSwgYnkgPSBjKCJkYXRhIiA9ICJ0cmltZXN0cmVfZGF0YSIpKQ0KDQojID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KIyA1KSBHUsOBRklDTw0KIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCg0KaGlnaGNoYXJ0KCkgJT4lDQogIA0KICBoY19jaGFydCgNCiAgICB6b29tVHlwZSA9ICJ4IiwNCiAgICBzdHlsZSA9IGxpc3QoZm9udEZhbWlseSA9ICJBcmlhbCwgc2Fucy1zZXJpZiIpDQogICkgJT4lDQogIA0KICBoY190aXRsZSgNCiAgICB0ZXh0ID0gIlBJQiwgU2VsaWMgZSBJUENBIG5vIGNpY2xvIHJlY2Vzc2l2byBicmFzaWxlaXJvIiwNCiAgICBzdHlsZSA9IGxpc3QoY29sb3IgPSBBWlVMX0VTQ1VSTywgZm9udFdlaWdodCA9ICJib2xkIikNCiAgKSAlPiUNCiAgDQogIGhjX3N1YnRpdGxlKA0KICAgIHRleHQgPSAiUElCIGVtIHZhcmlhw6fDo28gcmVhbCB0cmltZXN0cmFsIGNvbnRyYSBvIG1lc21vIHRyaW1lc3RyZSBhbnRlcmlvcjsgSVBDQSBhY3VtdWxhZG8gZW0gMTIgbWVzZXM7IFNlbGljIG1ldGEgYW8gZmltIGRvIHRyaW1lc3RyZSIsDQogICAgc3R5bGUgPSBsaXN0KGNvbG9yID0gVEVYVE8pDQogICkgJT4lDQogIA0KICBoY194QXhpcygNCiAgICBjYXRlZ29yaWVzID0gZGYkcm90dWxvLA0KICAgIHRpdGxlID0gbGlzdCh0ZXh0ID0gTlVMTCksDQogICAgbGFiZWxzID0gbGlzdChzdHlsZSA9IGxpc3QoY29sb3IgPSBURVhUTykpLA0KICAgIHBsb3RCYW5kcyA9IGxpc3QoDQogICAgICBsaXN0KA0KICAgICAgICBmcm9tICA9IHdoaWNoKGRmJHJvdHVsbyA9PSAiVDIvMjAxNCIpIC0gMS41LA0KICAgICAgICB0byAgICA9IHdoaWNoKGRmJHJvdHVsbyA9PSAiVDQvMjAxNiIpIC0gMC41LA0KICAgICAgICBjb2xvciA9ICJyZ2JhKDE2NiwgMTY2LCAxNjYsIDAuMTUpIg0KICAgICAgKQ0KICAgICkNCiAgKSAlPiUNCiAgDQogIGhjX3lBeGlzKA0KICAgIHRpdGxlID0gbGlzdCh0ZXh0ID0gIlZhcmlhw6fDo28gZSB0YXhhICglKSIpLA0KICAgIGxhYmVscyA9IGxpc3QoZm9ybWF0ID0gInt2YWx1ZX0lIiwgc3R5bGUgPSBsaXN0KGNvbG9yID0gVEVYVE8pKSwNCiAgICBwbG90TGluZXMgPSBsaXN0KA0KICAgICAgbGlzdCh2YWx1ZSA9IDAsIGNvbG9yID0gVEVYVE8sIHdpZHRoID0gMSwgekluZGV4ID0gNCkNCiAgICApLA0KICAgIGdyaWRMaW5lQ29sb3IgPSAiI2VlZWVlZSINCiAgKSAlPiUNCiAgDQogIGhjX2FkZF9zZXJpZXMoDQogICAgZGF0YSA9IGRmLA0KICAgIHR5cGUgPSAiY29sdW1uIiwNCiAgICBoY2Flcyh4ID0gcm90dWxvLCB5ID0gcGliLCBjb2xvciA9IGNvcl9waWIpLA0KICAgIG5hbWUgPSAiUElCIiwNCiAgICBjb2xvckJ5UG9pbnQgPSBUUlVFLA0KICAgIGJvcmRlcldpZHRoID0gMCwNCiAgICB6SW5kZXggPSAyDQogICkgJT4lDQogIA0KICBoY19hZGRfc2VyaWVzKA0KICAgIGRhdGEgPSBkZiwNCiAgICB0eXBlID0gImxpbmUiLA0KICAgIGhjYWVzKHggPSByb3R1bG8sIHkgPSBpcGNhKSwNCiAgICBuYW1lID0gIklQQ0EgMTJtIiwNCiAgICBjb2xvciA9IEFNQVJFTE8sDQogICAgbGluZVdpZHRoID0gMi41LA0KICAgIG1hcmtlciA9IGxpc3QoZW5hYmxlZCA9IEZBTFNFKSwNCiAgICB6SW5kZXggPSA1DQogICkgJT4lDQogIA0KICBoY19hZGRfc2VyaWVzKA0KICAgIGRhdGEgPSBkZiwNCiAgICB0eXBlID0gImxpbmUiLA0KICAgIGhjYWVzKHggPSByb3R1bG8sIHkgPSBzZWxpYyksDQogICAgbmFtZSA9ICJTZWxpYyIsDQogICAgY29sb3IgPSBBWlVMX0VTQ1VSTywNCiAgICBsaW5lV2lkdGggPSAyLjUsDQogICAgbWFya2VyID0gbGlzdChlbmFibGVkID0gRkFMU0UpLA0KICAgIHpJbmRleCA9IDYNCiAgKSAlPiUNCiAgDQogIGhjX3Rvb2x0aXAoDQogICAgc2hhcmVkID0gVFJVRSwNCiAgICBiYWNrZ3JvdW5kQ29sb3IgPSAid2hpdGUiLA0KICAgIGJvcmRlckNvbG9yID0gQVpVTF9FU0NVUk8sDQogICAgc3R5bGUgPSBsaXN0KGNvbG9yID0gVEVYVE8pLA0KICAgIHZhbHVlRGVjaW1hbHMgPSAyLA0KICAgIHZhbHVlU3VmZml4ID0gIiUiDQogICkgJT4lDQogIA0KICBoY19wbG90T3B0aW9ucygNCiAgICBjb2x1bW4gPSBsaXN0KA0KICAgICAgYm9yZGVyV2lkdGggPSAwLA0KICAgICAgZ3JvdXBQYWRkaW5nID0gMC4wNQ0KICAgICksDQogICAgc2VyaWVzID0gbGlzdCgNCiAgICAgIGNvbm5lY3ROdWxscyA9IEZBTFNFDQogICAgKQ0KICApICU+JQ0KICANCiAgaGNfbGVnZW5kKA0KICAgIGVuYWJsZWQgPSBUUlVFLA0KICAgIGFsaWduID0gImNlbnRlciIsDQogICAgdmVydGljYWxBbGlnbiA9ICJib3R0b20iDQogICkgJT4lDQogIA0KICBoY19jcmVkaXRzKA0KICAgIGVuYWJsZWQgPSBUUlVFLA0KICAgIHRleHQgPSAiRm9udGU6IElCR0UsIEJhbmNvIENlbnRyYWwgZG8gQnJhc2lsIGUgQ09EQUNFL0ZHViBJQlJFLiINCiAgKQ0KYGBgDQoNCiMjIDIuMiBPcyBmYXRvcmVzIHF1ZSBsZXZhcmFtIMOgIHJlY2Vzc8Ojbw0KDQpBIHJlY2Vzc8OjbyBkZSAyMDE04oCTMjAxNiBuw6NvIGZvaSByZXN1bHRhZG8gZGUgdW0gw7puaWNvIGNob3F1ZSwgbWFzIGRhIGNvbnZlcmfDqm5jaWEgZGUgdHLDqnMgdmV0b3JlcyBxdWUgc2UgcmVmb3LDp2FyYW0gbXV0dWFtZW50ZTogbyBlc2dvdGFtZW50byBkbyBjaWNsbyBleHBhbnNpdm8gYW50ZXJpb3IsIHVtIGNob3F1ZSBleHRlcm5vIGRlc2Zhdm9yw6F2ZWwgZSB1bWEgY3Jpc2UgZGUgY3JlZGliaWxpZGFkZSBkYSBwb2zDrXRpY2EgZWNvbsO0bWljYS4NCg0KTyBwcmltZWlybyB2ZXRvciBmb2kgYSBoZXJhbsOnYSBkbyBjaWNsbyAyMDA44oCTMjAxNCwgZGlzY3V0aWRhIG5hIHNlw6fDo28gYW50ZXJpb3IuIE8gbW9kZWxvIGRlIGNyZXNjaW1lbnRvIGJhc2VhZG8gZW0gY29uc3VtbywgY3LDqWRpdG8gc3Vic2lkaWFkbywgZGVzb25lcmHDp8O1ZXMgc2V0b3JpYWlzIGUgZXhwYW5zw6NvIGRvIGdhc3RvIHDDumJsaWNvIOKAlCBjb25zb2xpZGFkbyBhIHBhcnRpciBkZSAyMDEx4oCTMjAxMiBzb2IgbyByw7N0dWxvIGRlIE5vdmEgTWF0cml6IEVjb27DtG1pY2Eg4oCUIGRlaXhvdSBvIHBhw61zIGNvbSBkw6lmaWNpdHMgcHJpbcOhcmlvcyBjcmVzY2VudGVzLCBpbmZsYcOnw6NvIHJlcHJlc2FkYSBwb3IgcHJlw6dvcyBhZG1pbmlzdHJhZG9zIGUgbWFyZ2VucyBkZSBsdWNybyBkZXByaW1pZGFzIG5vIHNldG9yIHByaXZhZG8uIFF1YW5kbyBvIGNpY2xvIGNvbWXDp291IGEgZGVzYWNlbGVyYXIsIGVzc2VzIGRlc2VxdWlsw61icmlvcyBlc3RyZWl0YXJhbSBvIGVzcGHDp28gZGUgbWFub2JyYSBkYSBwb2zDrXRpY2EgZWNvbsO0bWljYS4NCg0KTyBzZWd1bmRvIHZldG9yIGZvaSBleHRlcm5vLiBBIHBhcnRpciBkZSAyMDExLCBlIGNvbSBtYWlzIGludGVuc2lkYWRlIGVtIDIwMTTigJMyMDE1LCBlbmNlcnJvdS1zZSBvIHN1cGVyY2ljbG8gZGFzIGNvbW1vZGl0aWVzIHF1ZSBoYXZpYSBzdXN0ZW50YWRvIHBhcnRlIGRvIGNyZXNjaW1lbnRvIGRvcyBhbm9zIDIwMDAuIEEgZGVzYWNlbGVyYcOnw6NvIGRhIGVjb25vbWlhIGNoaW5lc2EgZGVycnVib3Ugb3MgcHJlw6dvcyBpbnRlcm5hY2lvbmFpcyBlIGRldGVyaW9yb3Ugb3MgdGVybW9zIGRlIHRyb2NhIGJyYXNpbGVpcm9zLCBjb21wcmltaW5kbyBhIHJlY2VpdGEgZGUgZXhwb3J0YcOnw7VlcyBlIHJlZHV6aW5kbyBvIGludmVzdGltZW50byBubyBzZXRvciBleHRyYXRpdm8uIE8gY2hvcXVlIGV4dGVybm8gbsOjbyBleHBsaWNhIGlzb2xhZGFtZW50ZSBhIHByb2Z1bmRpZGFkZSBkYSByZWNlc3PDo28g4oCUIHBhw61zZXMgbGF0aW5vLWFtZXJpY2Fub3MgaWd1YWxtZW50ZSBleHBvc3RvcyBhbyBjaWNsbyBkZSBjb21tb2RpdGllcywgY29tbyBDaGlsZSBlIFBlcnUsIHNvZnJlcmFtIGRlc2FjZWxlcmHDp8O1ZXMgbXVpdG8gbWFpcyBicmFuZGFzIOKAlCBtYXMgYXR1b3UgY29tbyBhbXBsaWZpY2Fkb3IgZGFzIHZ1bG5lcmFiaWxpZGFkZXMgasOhIHByZXNlbnRlcy4NCg0KTyB0ZXJjZWlybyB2ZXRvciBmb2kgYSBwZXJkYSBkZSBjcmVkaWJpbGlkYWRlIGRhIHBvbMOtdGljYSBlY29uw7RtaWNhIGVtIDIwMTUuIEEgZGVzY29iZXJ0YSBkYXMgcGVkYWxhZGFzIGZpc2NhaXMgbWlub3UgYSBjb25maWFuw6dhIG5vcyBuw7ptZXJvcyBvZmljaWFpczsgbyBhanVzdGUgZmlzY2FsIGFudW5jaWFkbyBwb3IgSm9hcXVpbSBMZXZ5IGVtIHVtYSBlY29ub21pYSBqw6EgZW0gcXVlZGEgY29tYmlub3Utc2UgY29tIG8gcmVhbGluaGFtZW50byBkb3MgcHJlw6dvcyBhZG1pbmlzdHJhZG9zLCBvIHF1ZSBsZXZvdSBvIElQQ0EgYSAxMCw2NyUgZW0gMjAxNSBlIGZvcsOnb3UgYSBTZWxpYyBhIHN1YmlyIGF0w6kgMTQsMjUlLiBBIHBlcmRhIGRvIGdyYXUgZGUgaW52ZXN0aW1lbnRvIHBlbGEgU3RhbmRhcmQgJiBQb29yJ3MgZW0gc2V0ZW1icm8gZGUgMjAxNSwgc2VndWlkYSBwZWxhcyBkZW1haXMgYWfDqm5jaWFzLCBlbmNhcmVjZXUgbyBmaW5hbmNpYW1lbnRvIGUgZWxldm91IG8gcmlzY28tcGHDrXMuIFNvYnJlcG9zdG8gYSB0dWRvIGlzc28sIG8gYXZhbsOnbyBkYSBPcGVyYcOnw6NvIExhdmEgSmF0byBwYXJhbGlzb3UgaW52ZXN0aW1lbnRvcyBubyBzZXRvciBkZSDDs2xlbyBlIGfDoXMgZSBuYSBjb25zdHJ1w6fDo28sIGUgbyBwcm9jZXNzbyBkZSBpbXBlYWNobWVudCBpbmljaWFkbyBlbSBkZXplbWJybyBkZSAyMDE1IHBhcmFsaXNvdSBhIGFnZW5kYSBlY29uw7RtaWNhLg0KDQpBIGNvbWJpbmHDp8OjbyBkZXNzZXMgdHLDqnMgdmV0b3JlcyBwcm9kdXppdSBvIHF1ZSBhIGxpdGVyYXR1cmEgY29zdHVtYSBjaGFtYXIgZGUgYmFsYW5jZSBzaGVldCByZWNlc3Npb246IHVtYSBjb250cmHDp8OjbyBlbSBxdWUgZmFtw61saWFzLCBlbXByZXNhcyBlIHNldG9yIHDDumJsaWNvIHByZWNpc2FtIHJlZHV6aXIgZW5kaXZpZGFtZW50byBzaW11bHRhbmVhbWVudGUsIG8gcXVlIGFqdWRhIGEgZW50ZW5kZXIgdGFudG8gYSBwcm9mdW5kaWRhZGUgcXVhbnRvIGEgbGVudGlkw6NvIGRhIHJlY3VwZXJhw6fDo28gcG9zdGVyaW9yLg0KDQojIyAyLjMgTWVyY2FkbyBkZSB0cmFiYWxobywgaW52ZXN0aW1lbnRvIGUgcHJvZHV0aXZpZGFkZQ0KDQojIyMgMi4zLjEgTyBjb2xhcHNvIGRvIGludmVzdGltZW50bw0KDQpFbWJvcmEgbyBkZXNlbXByZWdvIHNlamEgYSBmYWNlIG1haXMgdmlzw612ZWwgZGUgdW1hIHJlY2Vzc8OjbywgZm9pIG8gaW52ZXN0aW1lbnRvIHF1ZSBsaWRlcm91IGEgcXVlZGEgZGEgYXRpdmlkYWRlIGVudHJlIDIwMTQgZSAyMDE2LCBlbSBzaW50b25pYSBjb20gbyBxdWUgc3VnZXJlIGEgdGVvcmlhIGRvcyBjaWNsb3M6IGEgRm9ybWHDp8OjbyBCcnV0YSBkZSBDYXBpdGFsIEZpeG8gKEZCQ0YpIMOpIHRpcGljYW1lbnRlIG8gY29tcG9uZW50ZSBtYWlzIHZvbMOhdGlsIGRvIFBJQiBlIG8gcHJpbWVpcm8gYSByZWFnaXIgw6AgZGV0ZXJpb3Jhw6fDo28gZGFzIGV4cGVjdGF0aXZhcy4NCg0KTmEgdmFyaWHDp8OjbyBhbnVhbCwgYSBGQkNGIGNvbWXDp291IGEgZGVzYWNlbGVyYXIgYWluZGEgZW0gMjAxNCwgcmVnaXN0cmFuZG8gY29udHJhw6fDo28gZGUgNCw0JSBubyBhbm8uIEEgcXVlZGEgYXByb2Z1bmRvdS1zZSBwYXJhIC0xMyw5JSBlbSAyMDE1IGUgbWFpcyAtMTIsMSUgZW0gMjAxNi4gT2xoYW5kbyBwYXJhIGEgZGluw6JtaWNhIHRyaW1lc3RyYWwsIGNvbmZvcm1lIG1vc3RyYSBvIEdyw6FmaWNvIDExLCBvIGNvbXBvbmVudGUgYWN1bXVsb3Ugb256ZSB0cmltZXN0cmVzIGNvbnNlY3V0aXZvcyBkZSBxdWVkYSwgY29tIHJlY3VvcyBxdWUgY2hlZ2FyYW0gYSAtNywwJSBlbSB1bSDDum5pY28gdHJpbWVzdHJlICgyVC8yMDE1KS4gTm8gYWN1bXVsYWRvIGRvIHBpY28gYW8gdmFsZSwgbyBpbnZlc3RpbWVudG8gcmVjdW91IGNlcmNhIGRlIDI3JSwgZSBhIHRheGEgZGUgaW52ZXN0aW1lbnRvIChGQkNGL1BJQikgY2FpdSBkZSAyMCw5JSBlbSAyMDEzIHBhcmEgMTYsNCUgZW0gMjAxNiDigJQgdW0gZG9zIG7DrXZlaXMgbWFpcyBiYWl4b3MgZGEgc8OpcmllIGhpc3TDs3JpY2EgZG8gaW5kaWNhZG9yLCBxdWUgY29udGludWFyaWEgY2FpbmRvIGF0w6kgMTQsNiUgZW0gMjAxNy4NCg0KQSBsw7NnaWNhIGVjb27DtG1pY2EgcG9yIHRyw6FzIGRlc3NlIGNvbGFwc28gY29uZWN0YS1zZSBkaXJldGFtZW50ZSBhb3MgcHJvYmxlbWFzIGFjdW11bGFkb3Mgbm8gY2ljbG8gYW50ZXJpb3IuIEEgcmVkdcOnw6NvIGRhcyBtYXJnZW5zIGRlIGx1Y3JvIGRhcyBlbXByZXNhcywgbnVtIGNvbnRleHRvIGRlIGVsZXZhw6fDo28gZG8gY3VzdG8gdW5pdMOhcmlvIGRvIHRyYWJhbGhvIGUgY8OibWJpbyBhcHJlY2lhZG8sIGrDoSB2aW5oYSBkZXNlc3RpbXVsYW5kbyBub3ZvcyBwcm9qZXRvcyBkZXNkZSAyMDEy4oCTMjAxMy4gUXVhbmRvIGEgZXNzZXMgZmF0b3JlcyBzZSBzb21hcmFtIGEgYWx0YSBkYSBTZWxpYywgYSBlbGV2YcOnw6NvIGRvIHJpc2NvLXBhw61zLCBhIHBhcmFsaXNhw6fDo28gZG9zIHByb2pldG9zIGRhIFBldHJvYnJhcyBwZWxhIE9wZXJhw6fDo28gTGF2YSBKYXRvIGUgbyBjb25nZWxhbWVudG8gZG9zIGRlc2VtYm9sc29zIGRvIEJOREVTIOKAlCBxdWUgaGF2aWEgc2lkbyBwZcOnYSBjZW50cmFsIGRvIGZpbmFuY2lhbWVudG8gZG8gaW52ZXN0aW1lbnRvIGR1cmFudGUgYSBleHBhbnPDo28g4oCULCBvIGludmVzdGltZW50byBlbnRyb3UgZW0gcXVlZGEgbGl2cmUuIE9zIGluZGljYWRvcmVzIGRlIHV0aWxpemHDp8OjbyBkYSBjYXBhY2lkYWRlIGluc3RhbGFkYSBkYSBpbmTDunN0cmlhLCBhcHJlc2VudGFkb3Mgbm8gR3LDoWZpY28gMTIsIGNhw61yYW0gcGFyYSBtw61uaW1vcyBoaXN0w7NyaWNvcywgc2luYWxpemFuZG8gcXVlIG7Do28gaGF2aWEgcmF6w6NvIGVjb27DtG1pY2EgcGFyYSBhbXBsaWFyIG8gZXN0b3F1ZSBkZSBjYXBpdGFsLg0KDQoqKkdyw6FmaWNvIDExKioNCg0KYGBge3J9DQoNCiMgLS0tLS0tLS0tLS0tLS0tLS0tIFBBQ09URVMgLS0tLS0tLS0tLS0tLS0tLS0tDQpsaWJyYXJ5KGRwbHlyKQ0KbGlicmFyeShyZWFkeGwpDQpsaWJyYXJ5KGhpZ2hjaGFydGVyKQ0KbGlicmFyeShsdWJyaWRhdGUpDQpsaWJyYXJ5KHN0cmluZ3IpDQoNCiMgLS0tLS0tLS0tLS0tLS0tLS0tIFBBTEVUQSBEQSBMSUdBIC0tLS0tLS0tLS0tLS0tLS0tLQ0KQU1BUkVMTyAgICAgPC0gIiNmZWI3MTIiDQpBWlVMX0VTQ1VSTyA8LSAiIzAyMDIzQyINCkFaVUxfTUVESU8gIDwtICIjMDAyYzVlIg0KQ0lOWkEgICAgICAgPC0gIiNhNmE2YTYiDQpURVhUTyAgICAgICA8LSAiIzNhM2EzYSINCkFaVUxfQ0xBUk8gIDwtICIjNDZiMWUxIg0KDQojIC0tLS0tLS0tLS0tLS0tLS0tLSAxKSBMRVIgQSBCQVNFIC0tLS0tLS0tLS0tLS0tLS0tLQ0KZmJjZl9yYXcgPC0gcmVhZF9leGNlbCgNCiAgZmlsZS5wYXRoKGRhZG9zX2RpciwgInhsc3gueGxzeCIpLA0KICBzaGVldCA9ICJUYWJlbGEiLA0KICBjb2xfbmFtZXMgPSBGQUxTRQ0KKQ0KDQojIC0tLS0tLS0tLS0tLS0tLS0tLSAyKSBFWFRSQUlSIFRSSU1FU1RSRVMgRSBWQUxPUkVTIC0tLS0tLS0tLS0tLS0tLS0tLQ0KdHJpbWVzdHJlcyA8LSBhcy5jaGFyYWN0ZXIodW5saXN0KGZiY2ZfcmF3WzQsIDI6bmNvbChmYmNmX3JhdyldKSkNCnZhbG9yZXMgPC0gYXMubnVtZXJpYyh1bmxpc3QoZmJjZl9yYXdbNiwgMjpuY29sKGZiY2ZfcmF3KV0pKQ0KDQojIC0tLS0tLS0tLS0tLS0tLS0tLSAzKSBGVU7Dh8OVRVMgUEFSQSBUUkFUQVIgVFJJTUVTVFJFUyAtLS0tLS0tLS0tLS0tLS0tLS0NCnBhcnNlX3RyaW1lc3RyZSA8LSBmdW5jdGlvbih4KSB7DQogIHRyaW0gPC0gYXMuaW50ZWdlcihzdHJfZXh0cmFjdCh4LCAiXlsxLTRdIikpDQogIGFubyA8LSBhcy5pbnRlZ2VyKHN0cl9leHRyYWN0KHgsICJcXGR7NH0kIikpDQogIG1lcyA8LSAodHJpbSAtIDEpICogMyArIDENCiAgDQogIGFzLkRhdGUocGFzdGUwKGFubywgIi0iLCBzcHJpbnRmKCIlMDJkIiwgbWVzKSwgIi0wMSIpKQ0KfQ0KDQpyb3R1bG9fdHJpbWVzdHJlIDwtIGZ1bmN0aW9uKHgpIHsNCiAgdHJpbSA8LSBzdHJfZXh0cmFjdCh4LCAiXlsxLTRdIikNCiAgYW5vIDwtIHN0cl9leHRyYWN0KHgsICJcXGR7NH0kIikNCiAgDQogIHBhc3RlMCh0cmltLCAiVC8iLCBhbm8pDQp9DQoNCiMgLS0tLS0tLS0tLS0tLS0tLS0tIDQpIE1PTlRBUiBCQVNFIEZJTkFMIC0tLS0tLS0tLS0tLS0tLS0tLQ0KZmJjZiA8LSB0aWJibGUoDQogIHRyaW1lc3RyZSA9IHRyaW1lc3RyZXMsDQogIGRhdGEgPSBwYXJzZV90cmltZXN0cmUodHJpbWVzdHJlcyksDQogIHJvdHVsbyA9IHJvdHVsb190cmltZXN0cmUodHJpbWVzdHJlcyksDQogIHZhcmlhY2FvID0gdmFsb3Jlcw0KKSAlPiUNCiAgZmlsdGVyKA0KICAgIGRhdGEgPj0gYXMuRGF0ZSgiMjAxNC0wMS0wMSIpLA0KICAgIGRhdGEgPD0gYXMuRGF0ZSgiMjAxNy0wMS0wMSIpDQogICkgJT4lDQogIG11dGF0ZSgNCiAgICBjb3IgPSBpZl9lbHNlKA0KICAgICAgdmFyaWFjYW8gPCAwLA0KICAgICAgQVpVTF9FU0NVUk8sDQogICAgICBBWlVMX0NMQVJPDQogICAgKQ0KICApDQoNCiMgLS0tLS0tLS0tLS0tLS0tLS0tIDUpIEdSw4FGSUNPIC0tLS0tLS0tLS0tLS0tLS0tLQ0KaGNoYXJ0KA0KICBmYmNmLA0KICB0eXBlID0gImNvbHVtbiIsDQogIGhjYWVzKHggPSByb3R1bG8sIHkgPSB2YXJpYWNhbywgY29sb3IgPSBjb3IpLA0KICBuYW1lID0gIkZCQ0YiDQopICU+JQ0KICBoY190aXRsZSgNCiAgICB0ZXh0ID0gIkZvcm1hw6fDo28gQnJ1dGEgZGUgQ2FwaXRhbCBGaXhvIiwNCiAgICBzdHlsZSA9IGxpc3QoDQogICAgICBjb2xvciA9IEFaVUxfRVNDVVJPLA0KICAgICAgZm9udFdlaWdodCA9ICJib2xkIg0KICAgICkNCiAgKSAlPiUNCiAgaGNfc3VidGl0bGUoDQogICAgdGV4dCA9ICJWYXJpYcOnw6NvIGNvbnRyYSBvIHRyaW1lc3RyZSBpbWVkaWF0YW1lbnRlIGFudGVyaW9yLCAyVC8yMDE0IGEgMVQvMjAxNyIsDQogICAgc3R5bGUgPSBsaXN0KGNvbG9yID0gVEVYVE8pDQogICkgJT4lDQogIGhjX3hBeGlzKA0KICAgIGNhdGVnb3JpZXMgPSBmYmNmJHJvdHVsbywNCiAgICB0aXRsZSA9IGxpc3QodGV4dCA9IE5VTEwpLA0KICAgIGxhYmVscyA9IGxpc3Qoc3R5bGUgPSBsaXN0KGNvbG9yID0gVEVYVE8pKQ0KICApICU+JQ0KICBoY195QXhpcygNCiAgICB0aXRsZSA9IGxpc3QodGV4dCA9ICJWYXJpYcOnw6NvIHRyaW1lc3RyYWwgKCUpIiksDQogICAgbGFiZWxzID0gbGlzdCgNCiAgICAgIGZvcm1hdCA9ICJ7dmFsdWV9JSIsDQogICAgICBzdHlsZSA9IGxpc3QoY29sb3IgPSBURVhUTykNCiAgICApLA0KICAgIHBsb3RMaW5lcyA9IGxpc3QoDQogICAgICBsaXN0KA0KICAgICAgICB2YWx1ZSA9IDAsDQogICAgICAgIGNvbG9yID0gVEVYVE8sDQogICAgICAgIHdpZHRoID0gMSwNCiAgICAgICAgekluZGV4ID0gNA0KICAgICAgKQ0KICAgICksDQogICAgZ3JpZExpbmVDb2xvciA9ICIjZWVlZWVlIg0KICApICU+JQ0KICBoY190b29sdGlwKA0KICAgIGhlYWRlckZvcm1hdCA9ICI8Yj57cG9pbnQua2V5fTwvYj48YnIvPiIsDQogICAgcG9pbnRGb3JtYXQgPSAiVmFyaWHDp8OjbzogPGI+e3BvaW50Lnk6LjFmfSU8L2I+IiwNCiAgICBiYWNrZ3JvdW5kQ29sb3IgPSAid2hpdGUiLA0KICAgIGJvcmRlckNvbG9yID0gQVpVTF9FU0NVUk8sDQogICAgc3R5bGUgPSBsaXN0KGNvbG9yID0gVEVYVE8pDQogICkgJT4lDQogIGhjX3Bsb3RPcHRpb25zKA0KICAgIGNvbHVtbiA9IGxpc3QoDQogICAgICBjb2xvckJ5UG9pbnQgPSBUUlVFLA0KICAgICAgYm9yZGVyV2lkdGggPSAwLA0KICAgICAgZ3JvdXBQYWRkaW5nID0gMC4wOCwNCiAgICAgIHBvaW50UGFkZGluZyA9IDAuMDQNCiAgICApDQogICkgJT4lDQogIGhjX2xlZ2VuZChlbmFibGVkID0gRkFMU0UpICU+JQ0KICBoY19jcmVkaXRzKA0KICAgIGVuYWJsZWQgPSBUUlVFLA0KICAgIHRleHQgPSAiRm9udGU6IElCR0UsIENvbnRhcyBOYWNpb25haXMgVHJpbWVzdHJhaXMsIFRhYmVsYSA1OTMyIFNJRFJBLiINCiAgKSAlPiUNCiAgaGNfY2hhcnQoDQogICAgc3R5bGUgPSBsaXN0KGZvbnRGYW1pbHkgPSAiQXJpYWwsIHNhbnMtc2VyaWYiKQ0KICApDQpgYGANCg0KKipHcsOhZmljbyAxMioqDQoNCmBgYHtyfQ0KDQojIC0tLS0tLS0tLS0tLS0tLS0tLSBQQUNPVEVTIC0tLS0tLS0tLS0tLS0tLS0tLQ0KbGlicmFyeShkcGx5cikNCmxpYnJhcnkocmVhZHhsKQ0KbGlicmFyeShoaWdoY2hhcnRlcikNCmxpYnJhcnkobHVicmlkYXRlKQ0KDQojIC0tLS0tLS0tLS0tLS0tLS0tLSBQQUxFVEEgREEgTElHQSAtLS0tLS0tLS0tLS0tLS0tLS0NCkFNQVJFTE8gICAgIDwtICIjZmViNzEyIg0KQVpVTF9FU0NVUk8gPC0gIiMwMjAyM0MiDQpBWlVMX01FRElPICA8LSAiIzAwMmM1ZSINCkNJTlpBICAgICAgIDwtICIjYTZhNmE2Ig0KVEVYVE8gICAgICAgPC0gIiMzYTNhM2EiDQpBWlVMX0NMQVJPICA8LSAiIzQ2YjFlMSINCg0KIyAtLS0tLS0tLS0tLS0tLS0tLS0gMSkgTEVSIEEgQkFTRSAtLS0tLS0tLS0tLS0tLS0tLS0NCm51Y2lfcmF3IDwtIHJlYWRfZXhjZWwoDQogIGZpbGUucGF0aChkYWRvc19kaXIsICJjaWNsby1kZS1jcmVzY2ltZW50byAoMikueGxzeCIpLA0KICBzaGVldCA9ICJiYXNlX3ZhcmlhdmVpcyINCikNCg0KIyAtLS0tLS0tLS0tLS0tLS0tLS0gMikgVFJBVEFSIEEgQkFTRSAtLS0tLS0tLS0tLS0tLS0tLS0NCm51Y2kgPC0gbnVjaV9yYXcgJT4lDQogIG11dGF0ZSgNCiAgICBkYXRhID0gYXMuRGF0ZShkYXRhKSwNCiAgICBOVUNJID0gYXMubnVtZXJpYyhOVUNJKQ0KICApICU+JQ0KICBmaWx0ZXIoDQogICAgZGF0YSA+PSBhcy5EYXRlKCIyMDE0LTEwLTAxIiksDQogICAgZGF0YSA8PSBhcy5EYXRlKCIyMDE3LTEyLTAxIikNCiAgKSAlPiUNCiAgYXJyYW5nZShkYXRhKQ0KDQojIC0tLS0tLS0tLS0tLS0tLS0tLSAzKSBHUsOBRklDTyAtLS0tLS0tLS0tLS0tLS0tLS0NCmhpZ2hjaGFydCh0eXBlID0gInN0b2NrIikgJT4lDQogIA0KICBoY19hZGRfc2VyaWVzKA0KICAgIG51Y2ksDQogICAgdHlwZSA9ICJsaW5lIiwNCiAgICBoY2Flcyh4ID0gZGF0YSwgeSA9IE5VQ0kpLA0KICAgIG5hbWUgPSAiTlVDSSIsDQogICAgY29sb3IgPSBBWlVMX0VTQ1VSTywNCiAgICBsaW5lV2lkdGggPSAyLjQsDQogICAgekluZGV4ID0gNQ0KICApICU+JQ0KICANCiAgaGNfdGl0bGUoDQogICAgdGV4dCA9ICJOw612ZWwgZGUgVXRpbGl6YcOnw6NvIGRhIENhcGFjaWRhZGUgSW5zdGFsYWRhIiwNCiAgICBzdHlsZSA9IGxpc3QoDQogICAgICBjb2xvciA9IEFaVUxfRVNDVVJPLA0KICAgICAgZm9udFdlaWdodCA9ICJib2xkIg0KICAgICkNCiAgKSAlPiUNCiAgDQogIGhjX3N1YnRpdGxlKA0KICAgIHRleHQgPSAiSW5kw7pzdHJpYSBkZSB0cmFuc2Zvcm1hw6fDo28sIG91dC8yMDE0IGEgZGV6LzIwMTciLA0KICAgIHN0eWxlID0gbGlzdChjb2xvciA9IFRFWFRPKQ0KICApICU+JQ0KICANCiAgaGNfeEF4aXMoDQogICAgdGl0bGUgPSBsaXN0KHRleHQgPSBOVUxMKSwNCiAgICBsYWJlbHMgPSBsaXN0KHN0eWxlID0gbGlzdChjb2xvciA9IFRFWFRPKSkNCiAgKSAlPiUNCiAgDQogIGhjX3lBeGlzKA0KICAgIHRpdGxlID0gbGlzdCh0ZXh0ID0gIk5VQ0kgKCUpIiksDQogICAgbGFiZWxzID0gbGlzdCgNCiAgICAgIGZvcm1hdCA9ICJ7dmFsdWV9JSIsDQogICAgICBzdHlsZSA9IGxpc3QoY29sb3IgPSBURVhUTykNCiAgICApLA0KICAgIGdyaWRMaW5lQ29sb3IgPSAiI2VlZWVlZSINCiAgKSAlPiUNCiAgDQogIGhjX3Rvb2x0aXAoDQogICAgc2hhcmVkID0gVFJVRSwNCiAgICBjcm9zc2hhaXJzID0gVFJVRSwNCiAgICB2YWx1ZURlY2ltYWxzID0gMSwNCiAgICB2YWx1ZVN1ZmZpeCA9ICIlIiwNCiAgICBiYWNrZ3JvdW5kQ29sb3IgPSAid2hpdGUiLA0KICAgIGJvcmRlckNvbG9yID0gQVpVTF9FU0NVUk8sDQogICAgc3R5bGUgPSBsaXN0KGNvbG9yID0gVEVYVE8pDQogICkgJT4lDQogIA0KICBoY19sZWdlbmQoZW5hYmxlZCA9IEZBTFNFKSAlPiUNCiAgDQogIGhjX3JhbmdlU2VsZWN0b3IoZW5hYmxlZCA9IEZBTFNFKSAlPiUNCiAgaGNfc2Nyb2xsYmFyKGVuYWJsZWQgPSBGQUxTRSkgJT4lDQogIGhjX25hdmlnYXRvcihlbmFibGVkID0gRkFMU0UpICU+JQ0KICANCiAgaGNfY3JlZGl0cygNCiAgICBlbmFibGVkID0gVFJVRSwNCiAgICB0ZXh0ID0gIkZvbnRlOiBGR1YvSUJSRSwgU29uZGFnZW0gZGEgSW5kw7pzdHJpYS4iDQogICkgJT4lDQogIA0KICBoY19jaGFydCgNCiAgICBzdHlsZSA9IGxpc3QoZm9udEZhbWlseSA9ICJBcmlhbCwgc2Fucy1zZXJpZiIpDQogICkNCmBgYA0KDQojIyMgMi4zLjIgTyBhanVzdGUgZG8gbWVyY2FkbyBkZSB0cmFiYWxobw0KDQpPIG1lcmNhZG8gZGUgdHJhYmFsaG8gY29uZmlybW91IG5hIHJlY2Vzc8OjbyB1bSBwYWRyw6NvIGNsw6Fzc2ljbyBkbyBjaWNsbyBlY29uw7RtaWNvOiBmb2kgYSDDumx0aW1hIHZhcmnDoXZlbCBhIGVudHJhciBlIGEgw7psdGltYSBhIHNhaXIgZGEgY3Jpc2UuIE5vIHByaW1laXJvIHRyaW1lc3RyZSBkZSAyMDE0LCBhIHRheGEgZGUgZGVzb2N1cGHDp8OjbyBtZWRpZGEgcGVsYSBQTkFEIENvbnTDrW51YSBlc3RhdmEgZW0gNywyJSwgcHLDs3hpbWEgZG8gbcOtbmltbyBoaXN0w7NyaWNvIGRhIHPDqXJpZS4gQSBwYXJ0aXIgZGUgbWVhZG9zIGRlIDIwMTQsIGNvbSBhIHF1ZWRhIGRvIGludmVzdGltZW50byBlIGEgZGVzYWNlbGVyYcOnw6NvIGRhIGluZMO6c3RyaWEsIG8gZGVzZW1wcmVnbyBjb21lw6dvdSBhIHN1YmlyLCBtYXMgaW5pY2lhbG1lbnRlIGRlIGZvcm1hIGxlbnRhLg0KDQpFc3NhIGxlbnRpZMOjbyBpbmljaWFsIHJlZmxldGUgbyBxdWUgYSBsaXRlcmF0dXJhIGNoYW1hIGRlIGxhYm9yIGhvYXJkaW5nOiBhcyBlbXByZXNhcyBzZWd1cmFyYW0gc3VhcyBlcXVpcGVzIG5hIGV4cGVjdGF0aXZhIGRlIHVtYSByZWN1cGVyYcOnw6NvIHLDoXBpZGEsIGFic29ydmVuZG8gbm8gY3VydG8gcHJhem8gYSBxdWVkYSBkYSBkZW1hbmRhIGNvbW8gcmVkdcOnw6NvIGRlIHByb2R1dGl2aWRhZGUgZSBob3JhcyB0cmFiYWxoYWRhcy4gUXVhbmRvIGZpY291IGNsYXJvIHF1ZSBhIHJlY2Vzc8OjbyBzZXJpYSBsb25nYSwgb3MgYWp1c3RlcyB2aWVyYW0gZGUgZm9ybWEgYWJydXB0YS4gQ29tbyBtb3N0cmEgbyBHcsOhZmljbyAxMywgYSB0YXhhIGRlIGRlc29jdXBhw6fDo28gc2FsdG91IHBhcmEgOSwxJSBubyDDumx0aW1vIHRyaW1lc3RyZSBkZSAyMDE1LCBhdGluZ2l1IDEyLDElIG5vIHF1YXJ0byB0cmltZXN0cmUgZGUgMjAxNiBlIGFsY2Fuw6dvdSBvIHBpY28gZGUgMTMsOSUgbm8gcHJpbWVpcm8gdHJpbWVzdHJlIGRlIDIwMTcg4oCUIGrDoSBmb3JhIGRvIHBlcsOtb2RvIHJlY2Vzc2l2byBvZmljaWFsLCBjb25maXJtYW5kbyBqdXN0YW1lbnRlIGEgZGVmYXNhZ2VtIGRvIG1lcmNhZG8gZGUgdHJhYmFsaG8gZW0gcmVsYcOnw6NvIGFvIGNpY2xvIGRvIFBJQi4NCg0KRG9pcyBhc3BlY3RvcyBkbyBhanVzdGUgbWVyZWNlbSBkZXN0YXF1ZSwgcG9pcyBhanVkYW0gYSBlbnRlbmRlciBsZWdhZG9zIGR1cmFkb3Vyb3MgZGEgY3Jpc2UuIE8gcHJpbWVpcm8gw6kgbyBhdW1lbnRvIGRhIGluZm9ybWFsaWRhZGU6IHBhcnRlIHNpZ25pZmljYXRpdmEgZGEgcmVjdXBlcmHDp8OjbyBwb3N0ZXJpb3IgZG8gZW1wcmVnbyBzZSBkZXUgcG9yIHbDrW5jdWxvcyBzZW0gY2FydGVpcmEgb3UgcG9yIGNvbnRhIHByw7NwcmlhLCBjb20gcmVtdW5lcmHDp8OjbyBtYWlzIGJhaXhhIGUgcHJvZHV0aXZpZGFkZSBtw6lkaWEgbWVub3IuIE8gc2VndW5kbyDDqSBhIHF1ZWRhIGRhIG1hc3NhIGRlIHJlbmRpbWVudG9zIHJlYWlzIOKAlCByZXN1bHRhZG8gY29tYmluYWRvIGRlIG1lbm9yIG9jdXBhw6fDo28gZSBkYSBpbmZsYcOnw6NvIGVsZXZhZGEgZGUgMjAxNeKAkzIwMTYsIHF1ZSBjb21wcmltaXUgbyBwb2RlciBkZSBjb21wcmEgZG9zIHNhbMOhcmlvcyBlIGFsaW1lbnRvdSB1bSBjaWNsbyByZWNlc3Npdm8gbm8gY29uc3VtbywgdGVtYSBkYSBwcsOzeGltYSBzZcOnw6NvLg0KDQoqKkdyw6FmaWNvIDEzKioNCg0KYGBge3J9DQoNCiMgLS0tLS0tLS0tLS0tLS0tLS0tIFBBQ09URVMgLS0tLS0tLS0tLS0tLS0tLS0tDQpsaWJyYXJ5KGRwbHlyKQ0KbGlicmFyeShyZWFkeGwpDQpsaWJyYXJ5KGhpZ2hjaGFydGVyKQ0KbGlicmFyeShsdWJyaWRhdGUpDQpsaWJyYXJ5KHN0cmluZ3IpDQoNCiMgLS0tLS0tLS0tLS0tLS0tLS0tIFBBTEVUQSBEQSBMSUdBIC0tLS0tLS0tLS0tLS0tLS0tLQ0KQU1BUkVMTyAgICAgPC0gIiNmZWI3MTIiDQpBWlVMX0VTQ1VSTyA8LSAiIzAyMDIzQyINCkFaVUxfTUVESU8gIDwtICIjMDAyYzVlIg0KQ0lOWkEgICAgICAgPC0gIiNhNmE2YTYiDQpURVhUTyAgICAgICA8LSAiIzNhM2EzYSINCkFaVUxfQ0xBUk8gIDwtICIjNDZiMWUxIg0KDQojIC0tLS0tLS0tLS0tLS0tLS0tLSAxKSBMRVIgQSBCQVNFIC0tLS0tLS0tLS0tLS0tLS0tLQ0KZGVzZW1wcmVnb19yYXcgPC0gcmVhZF9leGNlbCgNCiAgZmlsZS5wYXRoKGRhZG9zX2RpciwgIlRheGFkZWRlc29jdXBhY2FvLnhsc3giKSwNCiAgc2hlZXQgPSAiVGFiZWxhIiwNCiAgY29sX25hbWVzID0gRkFMU0UNCikNCg0KIyAtLS0tLS0tLS0tLS0tLS0tLS0gMikgRVhUUkFJUiBUUklNRVNUUkVTIEUgVkFMT1JFUyAtLS0tLS0tLS0tLS0tLS0tLS0NCnRyaW1lc3RyZXMgPC0gYXMuY2hhcmFjdGVyKHVubGlzdChkZXNlbXByZWdvX3Jhd1s0LCAyOm5jb2woZGVzZW1wcmVnb19yYXcpXSkpDQp2YWxvcmVzICAgIDwtIGFzLm51bWVyaWModW5saXN0KGRlc2VtcHJlZ29fcmF3WzUsIDI6bmNvbChkZXNlbXByZWdvX3JhdyldKSkNCg0KIyAtLS0tLS0tLS0tLS0tLS0tLS0gMykgRlVOw4fDlUVTIFBBUkEgVFJBVEFSIFRSSU1FU1RSRVMgLS0tLS0tLS0tLS0tLS0tLS0tDQpwYXJzZV90cmltZXN0cmUgPC0gZnVuY3Rpb24oeCkgew0KICB0cmltIDwtIGFzLmludGVnZXIoc3RyX2V4dHJhY3QoeCwgIl5bMS00XSIpKQ0KICBhbm8gIDwtIGFzLmludGVnZXIoc3RyX2V4dHJhY3QoeCwgIlxcZHs0fSQiKSkNCiAgbWVzICA8LSAodHJpbSAtIDEpICogMyArIDENCiAgDQogIGFzLkRhdGUocGFzdGUwKGFubywgIi0iLCBzcHJpbnRmKCIlMDJkIiwgbWVzKSwgIi0wMSIpKQ0KfQ0KDQpyb3R1bG9fdHJpbWVzdHJlIDwtIGZ1bmN0aW9uKHgpIHsNCiAgdHJpbSA8LSBzdHJfZXh0cmFjdCh4LCAiXlsxLTRdIikNCiAgYW5vICA8LSBzdHJfZXh0cmFjdCh4LCAiXFxkezR9JCIpDQogIA0KICBwYXN0ZTAodHJpbSwgIlQvIiwgYW5vKQ0KfQ0KDQojIC0tLS0tLS0tLS0tLS0tLS0tLSA0KSBNT05UQVIgQkFTRSBGSU5BTCAtLS0tLS0tLS0tLS0tLS0tLS0NCmRlc2VtcHJlZ28gPC0gdGliYmxlKA0KICB0cmltZXN0cmUgPSB0cmltZXN0cmVzLA0KICBkYXRhID0gcGFyc2VfdHJpbWVzdHJlKHRyaW1lc3RyZXMpLA0KICByb3R1bG8gPSByb3R1bG9fdHJpbWVzdHJlKHRyaW1lc3RyZXMpLA0KICB0YXhhID0gdmFsb3Jlcw0KKSAlPiUNCiAgZmlsdGVyKA0KICAgIGRhdGEgPj0gYXMuRGF0ZSgiMjAxNC0xMC0wMSIpLA0KICAgIGRhdGEgPD0gYXMuRGF0ZSgiMjAxNy0xMC0wMSIpDQogICkgJT4lDQogIGFycmFuZ2UoZGF0YSkNCg0KIyAtLS0tLS0tLS0tLS0tLS0tLS0gNSkgR1LDgUZJQ08gLS0tLS0tLS0tLS0tLS0tLS0tDQpoY2hhcnQoDQogIGRlc2VtcHJlZ28sDQogIHR5cGUgPSAibGluZSIsDQogIGhjYWVzKHggPSByb3R1bG8sIHkgPSB0YXhhKSwNCiAgbmFtZSA9ICJUYXhhIGRlIGRlc29jdXBhw6fDo28iLA0KICBjb2xvciA9IEFaVUxfRVNDVVJPLA0KICBsaW5lV2lkdGggPSAyLjYNCikgJT4lDQogIGhjX3RpdGxlKA0KICAgIHRleHQgPSAiVGF4YSBkZSBkZXNvY3VwYcOnw6NvIiwNCiAgICBzdHlsZSA9IGxpc3QoDQogICAgICBjb2xvciA9IEFaVUxfRVNDVVJPLA0KICAgICAgZm9udFdlaWdodCA9ICJib2xkIg0KICAgICkNCiAgKSAlPiUNCiAgaGNfc3VidGl0bGUoDQogICAgdGV4dCA9ICJQTkFEIENvbnTDrW51YSB0cmltZXN0cmFsLCA0VC8yMDE0IGEgNFQvMjAxNyIsDQogICAgc3R5bGUgPSBsaXN0KGNvbG9yID0gVEVYVE8pDQogICkgJT4lDQogIGhjX3hBeGlzKA0KICAgIGNhdGVnb3JpZXMgPSBkZXNlbXByZWdvJHJvdHVsbywNCiAgICB0aXRsZSA9IGxpc3QodGV4dCA9IE5VTEwpLA0KICAgIGxhYmVscyA9IGxpc3Qoc3R5bGUgPSBsaXN0KGNvbG9yID0gVEVYVE8pKQ0KICApICU+JQ0KICBoY195QXhpcygNCiAgICB0aXRsZSA9IGxpc3QodGV4dCA9ICJUYXhhIGRlIGRlc29jdXBhw6fDo28gKCUpIiksDQogICAgbGFiZWxzID0gbGlzdCgNCiAgICAgIGZvcm1hdCA9ICJ7dmFsdWV9JSIsDQogICAgICBzdHlsZSA9IGxpc3QoY29sb3IgPSBURVhUTykNCiAgICApLA0KICAgIGdyaWRMaW5lQ29sb3IgPSAiI2VlZWVlZSINCiAgKSAlPiUNCiAgaGNfdG9vbHRpcCgNCiAgICBoZWFkZXJGb3JtYXQgPSAiPGI+e3BvaW50LmtleX08L2I+PGJyLz4iLA0KICAgIHBvaW50Rm9ybWF0ID0gIlRheGEgZGUgZGVzb2N1cGHDp8OjbzogPGI+e3BvaW50Lnk6LjFmfSU8L2I+IiwNCiAgICBiYWNrZ3JvdW5kQ29sb3IgPSAid2hpdGUiLA0KICAgIGJvcmRlckNvbG9yID0gQVpVTF9FU0NVUk8sDQogICAgc3R5bGUgPSBsaXN0KGNvbG9yID0gVEVYVE8pDQogICkgJT4lDQogIGhjX3Bsb3RPcHRpb25zKA0KICAgIGxpbmUgPSBsaXN0KA0KICAgICAgbWFya2VyID0gbGlzdChlbmFibGVkID0gRkFMU0UpDQogICAgKQ0KICApICU+JQ0KICBoY19sZWdlbmQoZW5hYmxlZCA9IEZBTFNFKSAlPiUNCiAgaGNfY3JlZGl0cygNCiAgICBlbmFibGVkID0gVFJVRSwNCiAgICB0ZXh0ID0gIkZvbnRlOiBJQkdFLCBQTkFEIENvbnTDrW51YSwgVGFiZWxhIDQwOTkgU0lEUkEuIg0KICApICU+JQ0KICBoY19jaGFydCgNCiAgICBzdHlsZSA9IGxpc3QoZm9udEZhbWlseSA9ICJBcmlhbCwgc2Fucy1zZXJpZiIpDQogICkNCmBgYA0KDQojIyMgMi4zLjMgUHJvZHV0aXZpZGFkZTogbyBwcm9ibGVtYSBlc3RydXR1cmFsIHJldmVsYWRvIHBlbGEgcmVjZXNzw6NvDQoNCkEgcmVjZXNzw6NvIGV4cMO0cyB1bWEgZnJhZ2lsaWRhZGUgcXVlIGVzdGF2YSBwYXJjaWFsbWVudGUgbWFzY2FyYWRhIHBlbGEgZXhwYW5zw6NvIGFudGVyaW9yOiBhIGVzdGFnbmHDp8OjbyBkYSBwcm9kdXRpdmlkYWRlLiBPcyBpbmRpY2Fkb3JlcyBjb25zdHJ1w61kb3MgcGVsbyBPYnNlcnZhdMOzcmlvIGRhIFByb2R1dGl2aWRhZGUgUmVnaXMgQm9uZWxsaSAoRkdWL0lCUkUpIG1vc3RyYW0gcXVlLCBlbnRyZSAyMDEwIGUgMjAxNCwgZW5xdWFudG8gYSBwcm9kdXRpdmlkYWRlIHBvciBob3JhIHRyYWJhbGhhZGEgY3Jlc2NpYSBhIHVtIHJpdG1vIG1vZGVzdG8gZGUgY2VyY2EgZGUgMSw1JSBhbyBhbm8sIGEgUHJvZHV0aXZpZGFkZSBUb3RhbCBkb3MgRmF0b3JlcyAoUFRGKSBhdmFuw6dhdmEgYXBlbmFzIDAsNSUgYW8gYW5vIOKAlCBzaW5hbCBkZSBxdWUgbyBjcmVzY2ltZW50byBlc3RhdmEgc2VuZG8gc3VzdGVudGFkbyBtYWlzIHBvciBhY3VtdWxhw6fDo28gZGUgZmF0b3JlcyAoY2FwaXRhbCBlIHRyYWJhbGhvKSBkbyBxdWUgcG9yIGdhbmhvcyBkZSBlZmljacOqbmNpYS4NCg0KRHVyYW50ZSBhIHJlY2Vzc8OjbywgYSBQVEYgdGV2ZSBxdWVkYSBleHByZXNzaXZhLCB2aXPDrXZlbCBubyBHcsOhZmljbyAxNCBwZWxhIGluZmxleMOjbyBkbyDDrW5kaWNlIGEgcGFydGlyIGRlIDIwMTQgZSBwZWxvIHBvbnRvIHBhcnRpY3VsYXJtZW50ZSBzZXZlcm8gbm8gcXVhcnRvIHRyaW1lc3RyZSBkZSAyMDE1LiBBIHByb2R1dGl2aWRhZGUgcG9yIGhvcmEgdGFtYsOpbSByZWN1b3UuIE8gcG9udG8gYW5hbGl0aWNhbWVudGUgbWFpcyByZWxldmFudGUsIHBvcsOpbSwgw6kgbyBxdWUgdmVpbyBkZXBvaXM6IHBlbGEgcHJpbWVpcmEgdmV6IGVtIHN1YSBoaXN0w7NyaWEgcmVjZW50ZSwgbyBCcmFzaWwgc2FpdSBkZSB1bWEgcmVjZXNzw6NvIHByb2Z1bmRhIHNlbSByZWdpc3RyYXIgZ2FuaG9zIHNpZ25pZmljYXRpdm9zIGRlIHByb2R1dGl2aWRhZGUgbmEgcmVjdXBlcmHDp8Ojby4gRW0gY2ljbG9zIGFudGVyaW9yZXMsIGEgc2HDrWRhIGRhIGNyaXNlIGNvc3R1bWF2YSB2aXIgYWNvbXBhbmhhZGEgZGUgYXVtZW50byBkYSBlZmljacOqbmNpYSwgw6AgbWVkaWRhIHF1ZSBhcyBlbXByZXNhcyByZW9yZ2FuaXphdmFtIHByb2Nlc3NvcyBlIG8gY2FwaXRhbCBzZSByZWFsb2NhdmEgcGFyYSB1c29zIG1haXMgcHJvZHV0aXZvcy4gRGVzc2EgdmV6LCBpc3NvIG7Do28gb2NvcnJldS4NCg0KRXNzZSBjb21wb3J0YW1lbnRvIGFqdWRhIGEgZXhwbGljYXIgYSBmcnVzdHJhw6fDo28gY29tIG8gcml0bW8gZG8gY3Jlc2NpbWVudG8gcMOzcy0yMDE3IGUgZGlhbG9nYSBkaXJldGFtZW50ZSBjb20gYSBkaXNjdXNzw6NvIGRvIG1vbWVudG8gYXR1YWw6IHNlbSBnYW5ob3MgY29uc2lzdGVudGVzIGRlIHByb2R1dGl2aWRhZGUsIGEgZWNvbm9taWEgYnJhc2lsZWlyYSBwYXNzYSBhIGRlcGVuZGVyIGNhZGEgdmV6IG1haXMgZGEgYWN1bXVsYcOnw6NvIGRlIGZhdG9yZXMgcGFyYSBjcmVzY2VyLCBvIHF1ZSByZWZvcsOnYSBvcyBsaW1pdGVzIGVzdHJ1dHVyYWlzIGFvIGNpY2xvIGRlIGV4cGFuc8Ojby4NCg0KKipHcsOhZmljbyAxNCoqDQoNCmBgYHtyfQ0KDQojIC0tLS0tLS0tLS0tLS0tLS0tLSBQQUNPVEVTIC0tLS0tLS0tLS0tLS0tLS0tLQ0KbGlicmFyeShkcGx5cikNCmxpYnJhcnkocmVhZHhsKQ0KbGlicmFyeShoaWdoY2hhcnRlcikNCmxpYnJhcnkoc3RyaW5ncikNCg0KIyAtLS0tLS0tLS0tLS0tLS0tLS0gUEFMRVRBIERBIExJR0EgLS0tLS0tLS0tLS0tLS0tLS0tDQpBTUFSRUxPICAgICA8LSAiI2ZlYjcxMiINCkFaVUxfRVNDVVJPIDwtICIjMDIwMjNDIg0KQVpVTF9NRURJTyAgPC0gIiMwMDJjNWUiDQpDSU5aQSAgICAgICA8LSAiI2E2YTZhNiINClRFWFRPICAgICAgIDwtICIjM2EzYTNhIg0KQVpVTF9DTEFSTyAgPC0gIiM0NmIxZTEiDQoNCiMgLS0tLS0tLS0tLS0tLS0tLS0tIDEpIExFUiBBIEJBU0UgLS0tLS0tLS0tLS0tLS0tLS0tDQpwdGZfcmF3IDwtIHJlYWRfZXhjZWwoDQogIGZpbGUucGF0aChkYWRvc19kaXIsICJiYXNlX2RlX2RhZG9zXy1fcHRmX3RyaW1lc3RyYWxfcG9yX2hvcmFfdHJhYmFsaGFkYV80dDIwMjUueGxzeCIpLA0KICBzaGVldCA9ICJQVEYgY29tIGFqdXN0ZSBzYXpvbmFsIiwNCiAgc2tpcCA9IDgNCikNCg0KIyAtLS0tLS0tLS0tLS0tLS0tLS0gMikgVFJBVEFSIEEgQkFTRSAtLS0tLS0tLS0tLS0tLS0tLS0NCnB0ZiA8LSBwdGZfcmF3ICU+JQ0KICByZW5hbWUoDQogICAgdHJpbWVzdHJlID0gRGF0YSwNCiAgICBwdGZfaGFiaXR1YWlzID0gYFBURiAoSG9yYXMgSGFiaXR1YWlzKWAsDQogICAgcHRmX2VmZXRpdmFzICA9IGBQVEYgKEhvcmFzIEVmZXRpdmFzKWANCiAgKSAlPiUNCiAgZmlsdGVyKCFpcy5uYSh0cmltZXN0cmUpKSAlPiUNCiAgbXV0YXRlKA0KICAgIHRyaW1lc3RyZSA9IGFzLmNoYXJhY3Rlcih0cmltZXN0cmUpLA0KICAgIGFubyA9IGFzLmludGVnZXIoc3RyX2V4dHJhY3QodHJpbWVzdHJlLCAiXlxcZHs0fSIpKSwNCiAgICB0cmltID0gYXMuaW50ZWdlcihzdHJfZXh0cmFjdCh0cmltZXN0cmUsICIoPzw9cSlbMS00XSIpKSwNCiAgICBkYXRhID0gYXMuRGF0ZShwYXN0ZTAoYW5vLCAiLSIsIHNwcmludGYoIiUwMmQiLCAodHJpbSAtIDEpICogMyArIDEpLCAiLTAxIikpLA0KICAgIHJvdHVsbyA9IHBhc3RlMCh0cmltLCAiVC8iLCBhbm8pLA0KICAgIHB0Zl9lZmV0aXZhcyA9IGFzLm51bWVyaWMocHRmX2VmZXRpdmFzKQ0KICApICU+JQ0KICBmaWx0ZXIoDQogICAgZGF0YSA+PSBhcy5EYXRlKCIyMDE0LTAxLTAxIiksDQogICAgZGF0YSA8PSBhcy5EYXRlKCIyMDE4LTEwLTAxIikNCiAgKSAlPiUNCiAgYXJyYW5nZShkYXRhKQ0KDQojIC0tLS0tLS0tLS0tLS0tLS0tLSAzKSBHUsOBRklDTyAtLS0tLS0tLS0tLS0tLS0tLS0NCmhjaGFydCgNCiAgcHRmLA0KICB0eXBlID0gImxpbmUiLA0KICBoY2Flcyh4ID0gcm90dWxvLCB5ID0gcHRmX2VmZXRpdmFzKSwNCiAgbmFtZSA9ICJQVEYgcG9yIGhvcmFzIGVmZXRpdmFzIiwNCiAgY29sb3IgPSBBWlVMX0VTQ1VSTywNCiAgbGluZVdpZHRoID0gMi42DQopICU+JQ0KICBoY190aXRsZSgNCiAgICB0ZXh0ID0gIlByb2R1dGl2aWRhZGUgVG90YWwgZG9zIEZhdG9yZXMiLA0KICAgIHN0eWxlID0gbGlzdCgNCiAgICAgIGNvbG9yID0gQVpVTF9FU0NVUk8sDQogICAgICBmb250V2VpZ2h0ID0gImJvbGQiDQogICAgKQ0KICApICU+JQ0KICBoY19zdWJ0aXRsZSgNCiAgICB0ZXh0ID0gIlBURiBwb3IgaG9yYXMgZWZldGl2YXMsIGNvbSBhanVzdGUgc2F6b25hbCwgMjAxNCBhIDIwMTgiLA0KICAgIHN0eWxlID0gbGlzdChjb2xvciA9IFRFWFRPKQ0KICApICU+JQ0KICBoY194QXhpcygNCiAgICBjYXRlZ29yaWVzID0gcHRmJHJvdHVsbywNCiAgICB0aXRsZSA9IGxpc3QodGV4dCA9IE5VTEwpLA0KICAgIGxhYmVscyA9IGxpc3Qoc3R5bGUgPSBsaXN0KGNvbG9yID0gVEVYVE8pKQ0KICApICU+JQ0KICBoY195QXhpcygNCiAgICB0aXRsZSA9IGxpc3QodGV4dCA9ICLDjW5kaWNlLCAyVC8yMDEyID0gMTAwIiksDQogICAgbGFiZWxzID0gbGlzdChzdHlsZSA9IGxpc3QoY29sb3IgPSBURVhUTykpLA0KICAgIGdyaWRMaW5lQ29sb3IgPSAiI2VlZWVlZSINCiAgKSAlPiUNCiAgaGNfdG9vbHRpcCgNCiAgICBoZWFkZXJGb3JtYXQgPSAiPGI+e3BvaW50LmtleX08L2I+PGJyLz4iLA0KICAgIHBvaW50Rm9ybWF0ID0gIlBURjogPGI+e3BvaW50Lnk6LjFmfTwvYj4iLA0KICAgIGJhY2tncm91bmRDb2xvciA9ICJ3aGl0ZSIsDQogICAgYm9yZGVyQ29sb3IgPSBBWlVMX0VTQ1VSTywNCiAgICBzdHlsZSA9IGxpc3QoY29sb3IgPSBURVhUTykNCiAgKSAlPiUNCiAgaGNfcGxvdE9wdGlvbnMoDQogICAgbGluZSA9IGxpc3QoDQogICAgICBtYXJrZXIgPSBsaXN0KGVuYWJsZWQgPSBGQUxTRSkNCiAgICApDQogICkgJT4lDQogIGhjX2xlZ2VuZChlbmFibGVkID0gRkFMU0UpICU+JQ0KICBoY19jcmVkaXRzKA0KICAgIGVuYWJsZWQgPSBUUlVFLA0KICAgIHRleHQgPSAiRm9udGU6IEZHVi9JQlJFLCBPYnNlcnZhdMOzcmlvIGRhIFByb2R1dGl2aWRhZGUgUmVnaXMgQm9uZWxsaS4iDQogICkgJT4lDQogIGhjX2NoYXJ0KA0KICAgIHN0eWxlID0gbGlzdChmb250RmFtaWx5ID0gIkFyaWFsLCBzYW5zLXNlcmlmIikNCiAgKQ0KYGBgDQoNCiMjIDIuNCBDb25zdW1vLCBjcsOpZGl0byBlIGNvbmZpYW7Dp2ENCg0KIyMjIDIuNC4xIEEgcmV2ZXJzw6NvIGRvIGNvbnN1bW8gZGFzIGZhbcOtbGlhcw0KDQpPIGNvbnN1bW8gZGFzIGZhbcOtbGlhcywgcXVlIGhhdmlhIHNpZG8gbyBtb3RvciBkbyBjaWNsbyBleHBhbnNpdm8gZGUgMjAwOOKAkzIwMTQsIHNvZnJldSB1bWEgcmV2ZXJzw6NvIGV4cHJlc3NpdmEgZHVyYW50ZSBhIHJlY2Vzc8Ojby4gQ29tbyBldmlkZW5jaWEgbyBHcsOhZmljbyAxNSwgcGVsYSBzw6lyaWUgdHJpbWVzdHJhbCBkZXNzYXpvbmFsaXphZGEsIG8gYWdyZWdhZG8gcmVnaXN0cm91IHNldGUgcXVlZGFzIGNvbnNlY3V0aXZhcyBlbnRyZSBvIDHCuiB0cmltZXN0cmUgZGUgMjAxNSBlIG8gM8K6IHRyaW1lc3RyZSBkZSAyMDE2LiBPcyByZWN1b3MgY2hlZ2FyYW0gYSAxLDklIGVtIHVtIMO6bmljbyB0cmltZXN0cmUsIG5vIDLCuiB0cmltZXN0cmUgZGUgMjAxNSwgZSBhIHF1ZWRhIGFjdW11bGFkYSBubyBwZXLDrW9kbyBmb2kgZGUgYXByb3hpbWFkYW1lbnRlIDYlLCBjb25maWd1cmFuZG8gYSBjb250cmHDp8OjbyBtYWlzIGxvbmdhIGUgaW50ZW5zYSBkbyBjb25zdW1vIGRhcyBmYW3DrWxpYXMgbmEgc8OpcmllIGhpc3TDs3JpY2EgcmVjZW50ZS4NCg0KQSBtYWduaXR1ZGUgZGVzc2UgbW92aW1lbnRvIMOpIG1hY3JvZWNvbm9taWNhbWVudGUgZGVjaXNpdmEgcG9ycXVlIG8gY29uc3VtbyBkYXMgZmFtw61saWFzIHJlc3BvbmRlIHBvciBhcHJveGltYWRhbWVudGUgZG9pcyB0ZXLDp29zIGRvIFBJQiBwZWxhIMOzdGljYSBkYSBkZXNwZXNhLiBRdWFuZG8gZXNzZSBjb21wb25lbnRlIGVudHJhIGVtIHF1ZWRhLCBkaWZpY2lsbWVudGUgb3V0cm9zIGFncmVnYWRvcyBjb25zZWd1ZW0gY29tcGVuc2FyLCBlIGEgY29udHJhw6fDo28gc2UgZ2VuZXJhbGl6YS4NCg0KQSByZXZlcnPDo28gZm9pIHJlc3VsdGFkbyBkYSBjb21iaW5hw6fDo28gZGUgZmF0b3JlcyBkaXNjdXRpZG9zIG5hcyBzZcOnw7VlcyBhbnRlcmlvcmVzLiBBIHF1ZWRhIGRhIHJlbmRhIHJlYWwgZG8gdHJhYmFsaG8sIGRlY29ycmVudGUgZG8gYXVtZW50byBkbyBkZXNlbXByZWdvIGUgZGEgaW5mbGHDp8OjbyBkZSBkb2lzIGTDrWdpdG9zIGVtIDIwMTUsIGNvbXByaW1pdSBvIHBvZGVyIGRlIGNvbXByYS4gQSBlbGV2YcOnw6NvIGRhIFNlbGljIGVuY2FyZWNldSBvIGNyw6lkaXRvIGFvIGNvbnN1bWlkb3IsIHF1ZSBzZXLDoSBhbmFsaXNhZG8gbmEgcHLDs3hpbWEgc3Vic2XDp8Ojby4gRSBvIGVuZGl2aWRhbWVudG8gZWxldmFkbyBkYXMgZmFtw61saWFzIOKAlCBoZXJhbsOnYSBkbyBjaWNsbyBkZSBjcsOpZGl0byBkYSBkw6ljYWRhIGFudGVyaW9yIOKAlCBsaW1pdG91IGEgY2FwYWNpZGFkZSBkZSBhYnNvcsOnw6NvIGRvIGNob3F1ZSBwb3IgbWVpbyBkZSBub3ZvcyBlbXByw6lzdGltb3MuIE8gcmVzdWx0YWRvIGZvaSB1bSBjaWNsbyByZWNlc3Npdm8gbm8gY29uc3VtbyBxdWUgc2UgcmV0cm9hbGltZW50b3U6IHF1ZWRhIGRvIGVtcHJlZ28gY29tcHJpbWUgYSByZW5kYSwgcXVlIGNvbXByaW1lIG8gY29uc3VtbywgcXVlIGNvbXByaW1lIGEgcHJvZHXDp8OjbyBlIG8gZW1wcmVnbyBub3ZhbWVudGUuDQoNCioqR3LDoWZpY28gMTUqKg0KDQpgYGB7cn0NCmxpYnJhcnkoZHBseXIpDQpsaWJyYXJ5KHJlYWR4bCkNCmxpYnJhcnkoaGlnaGNoYXJ0ZXIpDQpsaWJyYXJ5KGx1YnJpZGF0ZSkNCmxpYnJhcnkoc3RyaW5ncikNCg0KIyAtLS0tLS0tLS0tLS0tLS0tLS0gUEFMRVRBIERBIExJR0EgLS0tLS0tLS0tLS0tLS0tLS0tDQpBTUFSRUxPICAgICA8LSAiI2ZlYjcxMiINCkFaVUxfRVNDVVJPIDwtICIjMDIwMjNDIg0KQVpVTF9NRURJTyAgPC0gIiMwMDJjNWUiDQpDSU5aQSAgICAgICA8LSAiI2E2YTZhNiINClRFWFRPICAgICAgIDwtICIjM2EzYTNhIg0KQVpVTF9DTEFSTyAgPC0gIiM0NmIxZTEiDQoNCiMgLS0tLS0tLS0tLS0tLS0tLS0tIDEpIExFUiBBIEJBU0UgLS0tLS0tLS0tLS0tLS0tLS0tDQpjb25zdW1vX3JhdyA8LSByZWFkX2V4Y2VsKA0KICBmaWxlLnBhdGgoZGFkb3NfZGlyLCAiVmFyaWFjYW9jb25zZmFtLnhsc3giKSwNCiAgc2hlZXQgPSAiVGFiZWxhIiwNCiAgY29sX25hbWVzID0gRkFMU0UNCikNCg0KIyAtLS0tLS0tLS0tLS0tLS0tLS0gMikgRVhUUkFJUiBUUklNRVNUUkVTIEUgVkFMT1JFUyAtLS0tLS0tLS0tLS0tLS0tLS0NCnRyaW1lc3RyZXMgPC0gYXMuY2hhcmFjdGVyKHVubGlzdChjb25zdW1vX3Jhd1s0LCAyOm5jb2woY29uc3Vtb19yYXcpXSkpDQp2YWxvcmVzICAgIDwtIGFzLm51bWVyaWModW5saXN0KGNvbnN1bW9fcmF3WzYsIDI6bmNvbChjb25zdW1vX3JhdyldKSkNCg0KIyAtLS0tLS0tLS0tLS0tLS0tLS0gMykgRlVOw4fDlUVTIFBBUkEgVFJBVEFSIFRSSU1FU1RSRVMgLS0tLS0tLS0tLS0tLS0tLS0tDQpwYXJzZV90cmltZXN0cmUgPC0gZnVuY3Rpb24oeCkgew0KICB0cmltIDwtIGFzLmludGVnZXIoc3RyX2V4dHJhY3QoeCwgIl5bMS00XSIpKQ0KICBhbm8gIDwtIGFzLmludGVnZXIoc3RyX2V4dHJhY3QoeCwgIlxcZHs0fSQiKSkNCiAgbWVzICA8LSAodHJpbSAtIDEpICogMyArIDENCiAgDQogIGFzLkRhdGUocGFzdGUwKGFubywgIi0iLCBzcHJpbnRmKCIlMDJkIiwgbWVzKSwgIi0wMSIpKQ0KfQ0KDQpyb3R1bG9fdHJpbWVzdHJlIDwtIGZ1bmN0aW9uKHgpIHsNCiAgdHJpbSA8LSBzdHJfZXh0cmFjdCh4LCAiXlsxLTRdIikNCiAgYW5vICA8LSBzdHJfZXh0cmFjdCh4LCAiXFxkezR9JCIpDQogIA0KICBwYXN0ZTAodHJpbSwgIlQvIiwgYW5vKQ0KfQ0KDQojIC0tLS0tLS0tLS0tLS0tLS0tLSA0KSBNT05UQVIgQkFTRSBGSU5BTCAtLS0tLS0tLS0tLS0tLS0tLS0NCmNvbnN1bW8gPC0gdGliYmxlKA0KICB0cmltZXN0cmUgPSB0cmltZXN0cmVzLA0KICBkYXRhID0gcGFyc2VfdHJpbWVzdHJlKHRyaW1lc3RyZXMpLA0KICByb3R1bG8gPSByb3R1bG9fdHJpbWVzdHJlKHRyaW1lc3RyZXMpLA0KICB2YXJpYWNhbyA9IHZhbG9yZXMNCikgJT4lDQogIGZpbHRlcigNCiAgICBkYXRhID49IGFzLkRhdGUoIjIwMTQtMDEtMDEiKSwNCiAgICBkYXRhIDw9IGFzLkRhdGUoIjIwMTctMTAtMDEiKQ0KICApICU+JQ0KICBhcnJhbmdlKGRhdGEpICU+JQ0KICBtdXRhdGUoDQogICAgY29yID0gaWZfZWxzZSh2YXJpYWNhbyA8IDAsIEFaVUxfRVNDVVJPLCBBWlVMX0NMQVJPKQ0KICApDQoNCiMgLS0tLS0tLS0tLS0tLS0tLS0tIDUpIEdSw4FGSUNPIC0tLS0tLS0tLS0tLS0tLS0tLQ0KaGlnaGNoYXJ0KCkgJT4lDQogIA0KICBoY19hZGRfc2VyaWVzKA0KICAgIGNvbnN1bW8sDQogICAgdHlwZSA9ICJjb2x1bW4iLA0KICAgIGhjYWVzKHggPSByb3R1bG8sIHkgPSB2YXJpYWNhbywgY29sb3IgPSBjb3IpLA0KICAgIG5hbWUgPSAiVmFyaWHDp8OjbyB0cmltZXN0cmFsIg0KICApICU+JQ0KICANCiAgaGNfdGl0bGUoDQogICAgdGV4dCA9ICJDb25zdW1vIGRhcyBmYW3DrWxpYXMiLA0KICAgIHN0eWxlID0gbGlzdCgNCiAgICAgIGNvbG9yID0gQVpVTF9FU0NVUk8sDQogICAgICBmb250V2VpZ2h0ID0gImJvbGQiDQogICAgKQ0KICApICU+JQ0KICANCiAgaGNfc3VidGl0bGUoDQogICAgdGV4dCA9ICJWYXJpYcOnw6NvIHRyaW1lc3RyYWwsIDIwMTQgYSAyMDE3IiwNCiAgICBzdHlsZSA9IGxpc3QoY29sb3IgPSBURVhUTykNCiAgKSAlPiUNCiAgDQogIGhjX3hBeGlzKA0KICAgIGNhdGVnb3JpZXMgPSBjb25zdW1vJHJvdHVsbywNCiAgICB0aXRsZSA9IGxpc3QodGV4dCA9IE5VTEwpLA0KICAgIGxhYmVscyA9IGxpc3Qoc3R5bGUgPSBsaXN0KGNvbG9yID0gVEVYVE8pKQ0KICApICU+JQ0KICANCiAgaGNfeUF4aXMoDQogICAgdGl0bGUgPSBsaXN0KHRleHQgPSAiVmFyaWHDp8OjbyB0cmltZXN0cmFsICglKSIpLA0KICAgIGxhYmVscyA9IGxpc3QoDQogICAgICBmb3JtYXQgPSAie3ZhbHVlfSUiLA0KICAgICAgc3R5bGUgPSBsaXN0KGNvbG9yID0gVEVYVE8pDQogICAgKSwNCiAgICBwbG90TGluZXMgPSBsaXN0KA0KICAgICAgbGlzdCgNCiAgICAgICAgdmFsdWUgPSAwLA0KICAgICAgICBjb2xvciA9IFRFWFRPLA0KICAgICAgICB3aWR0aCA9IDEsDQogICAgICAgIHpJbmRleCA9IDQNCiAgICAgICkNCiAgICApLA0KICAgIGdyaWRMaW5lQ29sb3IgPSAiI2VlZWVlZSINCiAgKSAlPiUNCiAgDQogIGhjX3Rvb2x0aXAoDQogICAgaGVhZGVyRm9ybWF0ID0gIjxiPntwb2ludC5rZXl9PC9iPjxici8+IiwNCiAgICBwb2ludEZvcm1hdCA9ICJWYXJpYcOnw6NvIHRyaW1lc3RyYWw6IDxiPntwb2ludC55Oi4xZn0lPC9iPiIsDQogICAgYmFja2dyb3VuZENvbG9yID0gIndoaXRlIiwNCiAgICBib3JkZXJDb2xvciA9IEFaVUxfRVNDVVJPLA0KICAgIHN0eWxlID0gbGlzdChjb2xvciA9IFRFWFRPKQ0KICApICU+JQ0KICANCiAgaGNfcGxvdE9wdGlvbnMoDQogICAgY29sdW1uID0gbGlzdCgNCiAgICAgIGNvbG9yQnlQb2ludCA9IFRSVUUsDQogICAgICBib3JkZXJXaWR0aCA9IDAsDQogICAgICBncm91cFBhZGRpbmcgPSAwLjA4LA0KICAgICAgcG9pbnRQYWRkaW5nID0gMC4wNA0KICAgICkNCiAgKSAlPiUNCiAgDQogIGhjX2xlZ2VuZChlbmFibGVkID0gRkFMU0UpICU+JQ0KICANCiAgaGNfY3JlZGl0cygNCiAgICBlbmFibGVkID0gVFJVRSwNCiAgICB0ZXh0ID0gIkZvbnRlOiBJQkdFLCBDb250YXMgTmFjaW9uYWlzIFRyaW1lc3RyYWlzLCBUYWJlbGEgNTkzMiBTSURSQS4iDQogICkgJT4lDQogIA0KICBoY19jaGFydCgNCiAgICBzdHlsZSA9IGxpc3QoZm9udEZhbWlseSA9ICJBcmlhbCwgc2Fucy1zZXJpZiIpDQogICkNCmBgYA0KDQojIyMgMi40LjIgQSByZXRyYcOnw6NvIGRvIGNyw6lkaXRvDQoNCk8gY3LDqWRpdG8sIHF1ZSBoYXZpYSBmdW5jaW9uYWRvIGNvbW8gY29tYnVzdMOtdmVsIGRhIGV4cGFuc8OjbyBhbnRlcmlvciwgY29tcG9ydG91LXNlIG5hIHJlY2Vzc8OjbyBjb21vIGFtcGxpZmljYWRvciBkYSBxdWVkYS4gQ29uZm9ybWUgc2Ugb2JzZXJ2YSBubyBHcsOhZmljbyAxNiwgbyBlc3RvcXVlIHRvdGFsIGRlIGNyw6lkaXRvIGRvIFNpc3RlbWEgRmluYW5jZWlybyBOYWNpb25hbCwgcXVlIHZpbmhhIGNyZXNjZW5kbyBjb250aW51YW1lbnRlIGRlc2RlIG1lYWRvcyBkb3MgYW5vcyAyMDAwLCByZWN1b3UgZW0gdGVybW9zIHJlYWlzIGUgY2FpdSBjb21vIHByb3BvcsOnw6NvIGRvIFBJQiDigJQgZGUgY2VyY2EgZGUgNTMsNyUgbm8gZmltIGRlIDIwMTUgcGFyYSA0OSwzJSBubyBmaW0gZGUgMjAxNi4NCg0KVHLDqnMgZmF0b3JlcyBleHBsaWNhbSBlc3NhIHJldmVyc8Ojby4gTyBwcmltZWlybyDDqSBhIGFsdGEgZGEgU2VsaWMsIHF1ZSBlbGV2b3UgYXMgdGF4YXMgZGUganVyb3MgYW8gdG9tYWRvciBmaW5hbCBhIHBhdGFtYXJlcyBwcm9pYml0aXZvczogb3MganVyb3MgbcOpZGlvcyBkbyBjcsOpZGl0byBsaXZyZSBwYXJhIHBlc3NvYSBmw61zaWNhIGNoZWdhcmFtIGEgY2VyY2EgZGUgNzEsNSUgYW8gYW5vIGVtIDIwMTYuIE8gc2VndW5kbyDDqSBhIGRldGVyaW9yYcOnw6NvIGRhIHBlcmNlcMOnw6NvIGRlIHJpc2NvIGRvIHNpc3RlbWEgZmluYW5jZWlybyBkaWFudGUgZGEgcXVlZGEgZGEgYXRpdmlkYWRlIGUgZG8gYXVtZW50byBkYSBpbmFkaW1wbMOqbmNpYSwgc29icmV0dWRvIGVudHJlIGVtcHJlc2FzLiBPIHRlcmNlaXJvIMOpIGEgcmV0cmHDp8OjbyBkbyBjcsOpZGl0byBkaXJlY2lvbmFkbywgcGFydGljdWxhcm1lbnRlIGRvIEJOREVTLCBxdWUgcmV2ZXJ0ZXUgbyBmb3J0ZSBjcmVzY2ltZW50byBkb3MgZGVzZW1ib2xzb3Mgb2JzZXJ2YWRvIG5vIGNpY2xvIGFudGVyaW9yIOKAlCBtb3ZpbWVudG8gYXNzb2NpYWRvIHRhbnRvIGFvIGFqdXN0ZSBmaXNjYWwgcXVhbnRvIMOgIHJlb3JpZW50YcOnw6NvIGRhIHBvbMOtdGljYSBkZSBjcsOpZGl0byBhIHBhcnRpciBkZSAyMDE1Lg0KDQpPIGVmZWl0byBjb21iaW5hZG8gZm9pIHVtIHByb2Nlc3NvIGRlIGRlc2FsYXZhbmNhZ2VtIHNpbXVsdMOibmVhIGRlIGZhbcOtbGlhcyBlIGVtcHJlc2FzLCBxdWUgc2UgcHJvbG9uZ291IHBlbG9zIGFub3Mgc2VndWludGVzIGFvIGZpbSBkYSByZWNlc3PDo28gZSBhanVkYSBhIGV4cGxpY2FyIGEgbGVudGlkw6NvIGRhIHJldG9tYWRhLiBFbSB1bWEgZWNvbm9taWEgZW0gcXVlIG8gY3LDqWRpdG8gaGF2aWEgc2lkbyB1bSBjb21wb25lbnRlIGNlbnRyYWwgZG8gY3Jlc2NpbWVudG8sIGEgc3VhIHJldmVyc8OjbyBlbGltaW5vdSB1bSBkb3MgcHJpbmNpcGFpcyBjYW5haXMgZGUgZmluYW5jaWFtZW50byBkYSBkZW1hbmRhIGFncmVnYWRhLg0KDQoqKkdyw6FmaWNvIDE2KioNCg0KYGBge3J9DQoNCiMgUEFDT1RFUw0KbGlicmFyeShkcGx5cikNCmxpYnJhcnkobHVicmlkYXRlKQ0KbGlicmFyeShoaWdoY2hhcnRlcikNCmxpYnJhcnkoR2V0QkNCRGF0YSkNCmxpYnJhcnkodGlkeXIpDQoNCiMgUEFMRVRBIERBIExJR0ENCkFNQVJFTE8gICAgIDwtICIjZmViNzEyIg0KQVpVTF9FU0NVUk8gPC0gIiMwMjAyM0MiDQpBWlVMX01FRElPICA8LSAiIzAwMmM1ZSINCkNJTlpBICAgICAgIDwtICIjYTZhNmE2Ig0KVEVYVE8gICAgICAgPC0gIiMzYTNhM2EiDQpBWlVMX0NMQVJPICA8LSAiIzQ2YjFlMSINCg0KIyBQRVLDjU9ETw0KaW5pY2lvIDwtIGFzLkRhdGUoIjIwMDgtMDEtMDEiKQ0KZmltICAgIDwtIGFzLkRhdGUoIjIwMTctMTItMzEiKQ0KDQojIFPDiVJJRVMgU0dTDQpzZXJpZXNfaWRzIDwtIGMoDQogIENyZWRpdG9fVG90YWwgICAgICAgPSAyMDYyMiwNCiAgQ3JlZGl0b19MaXZyZSAgICAgICA9IDIwNjI1LA0KICBDcmVkaXRvX0RpcmVjaW9uYWRvID0gMjA2MjgNCikNCg0KZGFkb3NfYmNiIDwtIGdiY2JkX2dldF9zZXJpZXMoDQogIGlkID0gc2VyaWVzX2lkcywNCiAgZmlyc3QuZGF0ZSA9IGluaWNpbywNCiAgbGFzdC5kYXRlICA9IGZpbSwNCiAgZm9ybWF0LmRhdGEgPSAid2lkZSINCikNCg0KIyBUUkFUQVIgQkFTRQ0KY3JlZGl0byA8LSBkYWRvc19iY2IgJT4lDQogIHJlbmFtZSgNCiAgICBkYXRhID0gcmVmLmRhdGUsDQogICAgdG90YWwgPSBDcmVkaXRvX1RvdGFsLA0KICAgIGxpdnJlID0gQ3JlZGl0b19MaXZyZSwNCiAgICBkaXJlY2lvbmFkbyA9IENyZWRpdG9fRGlyZWNpb25hZG8NCiAgKSAlPiUNCiAgbXV0YXRlKA0KICAgIGRhdGEgPSBhcy5EYXRlKGRhdGEpLA0KICAgIGRhdGEgPSBmbG9vcl9kYXRlKGRhdGEsICJtb250aCIpDQogICkgJT4lDQogIGFycmFuZ2UoZGF0YSkNCg0KIyBHUsOBRklDTw0KaGlnaGNoYXJ0KHR5cGUgPSAic3RvY2siKSAlPiUNCiAgDQogIGhjX2FkZF9zZXJpZXMoDQogICAgY3JlZGl0bywNCiAgICB0eXBlID0gImxpbmUiLA0KICAgIGhjYWVzKHggPSBkYXRhLCB5ID0gdG90YWwpLA0KICAgIG5hbWUgPSAiQ3LDqWRpdG8gdG90YWwiLA0KICAgIGNvbG9yID0gQVpVTF9FU0NVUk8sDQogICAgbGluZVdpZHRoID0gMi44LA0KICAgIHpJbmRleCA9IDUNCiAgKSAlPiUNCiAgDQogIGhjX2FkZF9zZXJpZXMoDQogICAgY3JlZGl0bywNCiAgICB0eXBlID0gImxpbmUiLA0KICAgIGhjYWVzKHggPSBkYXRhLCB5ID0gbGl2cmUpLA0KICAgIG5hbWUgPSAiQ3LDqWRpdG8gbGl2cmUiLA0KICAgIGNvbG9yID0gQVpVTF9DTEFSTywNCiAgICBsaW5lV2lkdGggPSAyLjIsDQogICAgekluZGV4ID0gNA0KICApICU+JQ0KICANCiAgaGNfYWRkX3NlcmllcygNCiAgICBjcmVkaXRvLA0KICAgIHR5cGUgPSAibGluZSIsDQogICAgaGNhZXMoeCA9IGRhdGEsIHkgPSBkaXJlY2lvbmFkbyksDQogICAgbmFtZSA9ICJDcsOpZGl0byBkaXJlY2lvbmFkbyIsDQogICAgY29sb3IgPSBBTUFSRUxPLA0KICAgIGxpbmVXaWR0aCA9IDIuMiwNCiAgICB6SW5kZXggPSA0DQogICkgJT4lDQogIA0KICBoY190aXRsZSgNCiAgICB0ZXh0ID0gIkVzdG9xdWUgZGUgY3LDqWRpdG8gZG8gU0ZOIiwNCiAgICBzdHlsZSA9IGxpc3QoDQogICAgICBjb2xvciA9IEFaVUxfRVNDVVJPLA0KICAgICAgZm9udFdlaWdodCA9ICJib2xkIg0KICAgICkNCiAgKSAlPiUNCiAgDQogIGhjX3N1YnRpdGxlKA0KICAgIHRleHQgPSAiQ3LDqWRpdG8gdG90YWwsIGxpdnJlIGUgZGlyZWNpb25hZG8gY29tbyBwZXJjZW50dWFsIGRvIFBJQiwgMjAwOCBhIDIwMTciLA0KICAgIHN0eWxlID0gbGlzdChjb2xvciA9IFRFWFRPKQ0KICApICU+JQ0KICANCiAgaGNfeEF4aXMoDQogICAgdGl0bGUgPSBsaXN0KHRleHQgPSBOVUxMKSwNCiAgICBsYWJlbHMgPSBsaXN0KHN0eWxlID0gbGlzdChjb2xvciA9IFRFWFRPKSkNCiAgKSAlPiUNCiAgDQogIGhjX3lBeGlzKA0KICAgIHRpdGxlID0gbGlzdCh0ZXh0ID0gIlBlcmNlbnR1YWwgZG8gUElCICglKSIpLA0KICAgIGxhYmVscyA9IGxpc3QoDQogICAgICBmb3JtYXQgPSAie3ZhbHVlfSUiLA0KICAgICAgc3R5bGUgPSBsaXN0KGNvbG9yID0gVEVYVE8pDQogICAgKSwNCiAgICBncmlkTGluZUNvbG9yID0gIiNlZWVlZWUiDQogICkgJT4lDQogIA0KICBoY190b29sdGlwKA0KICAgIHNoYXJlZCA9IFRSVUUsDQogICAgY3Jvc3NoYWlycyA9IFRSVUUsDQogICAgdmFsdWVEZWNpbWFscyA9IDEsDQogICAgdmFsdWVTdWZmaXggPSAiJSIsDQogICAgYmFja2dyb3VuZENvbG9yID0gIndoaXRlIiwNCiAgICBib3JkZXJDb2xvciA9IEFaVUxfRVNDVVJPLA0KICAgIHN0eWxlID0gbGlzdChjb2xvciA9IFRFWFRPKQ0KICApICU+JQ0KICANCiAgaGNfbGVnZW5kKA0KICAgIGVuYWJsZWQgPSBUUlVFLA0KICAgIGFsaWduID0gImNlbnRlciIsDQogICAgdmVydGljYWxBbGlnbiA9ICJib3R0b20iDQogICkgJT4lDQogIA0KICBoY19yYW5nZVNlbGVjdG9yKGVuYWJsZWQgPSBGQUxTRSkgJT4lDQogIGhjX3Njcm9sbGJhcihlbmFibGVkID0gRkFMU0UpICU+JQ0KICBoY19uYXZpZ2F0b3IoZW5hYmxlZCA9IFRSVUUpICU+JQ0KICANCiAgaGNfY3JlZGl0cygNCiAgICBlbmFibGVkID0gVFJVRSwNCiAgICB0ZXh0ID0gIkZvbnRlOiBCYW5jbyBDZW50cmFsIGRvIEJyYXNpbCwgU0dTLiINCiAgKSAlPiUNCiAgDQogIGhjX2NoYXJ0KA0KICAgIHN0eWxlID0gbGlzdChmb250RmFtaWx5ID0gIkFyaWFsLCBzYW5zLXNlcmlmIikNCiAgKQ0KYGBgDQoNCiMjIyAyLjQuMyBDb25maWFuw6dhIGUgaW5jZXJ0ZXphDQoNClVtIGFzcGVjdG8gZGlzdGludGl2byBkYSByZWNlc3PDo28gZGUgMjAxNOKAkzIwMTYsIGVtIGNvbXBhcmHDp8OjbyBjb20gZXBpc8OzZGlvcyBhbnRlcmlvcmVzLCDDqSBvIHBhcGVsIGNlbnRyYWwgZGFzIGV4cGVjdGF0aXZhcyBlIGRhIGluY2VydGV6YS4gQ29tbyBpbHVzdHJhIG8gR3LDoWZpY28gMTcsIG9zIGluZGljYWRvcmVzIGRlIGNvbmZpYW7Dp2EgZGEgRkdWL0lCUkUg4oCUIGVtIHBhcnRpY3VsYXIgbyDDjW5kaWNlIGRlIENvbmZpYW7Dp2EgRW1wcmVzYXJpYWwgKElDRSkgZSBvIMONbmRpY2UgZGUgQ29uZmlhbsOnYSBkbyBDb25zdW1pZG9yIChJQ0MpIOKAlCBhdGluZ2lyYW0gbcOtbmltb3MgaGlzdMOzcmljb3MgZW50cmUgbyBmaW5hbCBkZSAyMDE1IGUgbyBpbsOtY2lvIGRlIDIwMTYsIGVtIG7DrXZlaXMgaW5mZXJpb3JlcyBhb3Mgb2JzZXJ2YWRvcyBubyBhdWdlIGRhIGNyaXNlIGludGVybmFjaW9uYWwgZGUgMjAwOOKAkzIwMDkuIEluZGljYWRvcmVzIGRlIGluY2VydGV6YSwgY29tbyBvIEluZGljYWRvciBkZSBJbmNlcnRlemEgZGEgRWNvbm9taWEgKElJRS1CcikgZGEgRkdWLCB0YW1iw6ltIHJlZ2lzdHJhcmFtIG7DrXZlaXMgcmVjb3JkZXMgbm8gbWVzbW8gcGVyw61vZG8sIGNvbSBwaWNvIGVtIHNldGVtYnJvIGRlIDIwMTUuDQoNCkEgZGV0ZXJpb3Jhw6fDo28gZGFzIGV4cGVjdGF0aXZhcyDDqSBtYWNyb2Vjb25vbWljYW1lbnRlIHJlbGV2YW50ZSBwb3JxdWUgY3JpYSB1bSBjYW5hbCBwcsOzcHJpbyBkZSB0cmFuc21pc3PDo28gZGEgY3Jpc2UuIERpYW50ZSBkZSBjZW7DoXJpb3MgaW5jZXJ0b3MsIGVtcHJlc2FzIHBvc3RlcmdhbSBkZWNpc8O1ZXMgZGUgaW52ZXN0aW1lbnRvIGUgZmFtw61saWFzIGF1bWVudGFtIGEgcG91cGFuw6dhIHByZWNhdWNpb27DoXJpYSwgY29tcHJpbWluZG8gc2ltdWx0YW5lYW1lbnRlIGEgRkJDRiBlIG8gY29uc3VtbyDigJQgb3Ugc2VqYSwgYW1wbGlhbmRvIG8gZWZlaXRvIHJlY2Vzc2l2byBkb3MgZGVtYWlzIGNob3F1ZXMgcGVsYSB2aWEgZXhwZWN0YWNpb25hbC4NCg0KQSBwZXJkYSBkZSBjcmVkaWJpbGlkYWRlIGRhIHBvbMOtdGljYSBlY29uw7RtaWNhIGVtIDIwMTUgYWxpbWVudG91IGRpcmV0YW1lbnRlIGVzc2VzIGluZGljYWRvcmVzLiBBIHJldmlzw6NvIGRhIG1ldGEgZGUgc3VwZXLDoXZpdCBwcmltw6FyaW8gcGFyYSBkw6lmaWNpdCwgYSBzdWNlc3PDo28gZGUgdHJvY2FzIG5vIGNvbWFuZG8gZG8gTWluaXN0w6lyaW8gZGEgRmF6ZW5kYSAoTGV2eSDihpIgTmVsc29uIEJhcmJvc2Eg4oaSIEhlbnJpcXVlIE1laXJlbGxlcykgZSBhcyBpbmNlcnRlemFzIGRvIHByb2Nlc3NvIGRlIGltcGVhY2htZW50IGZ1bmNpb25hcmFtIGNvbW8gcnXDrWRvcyBjb250w61udW9zIHF1ZSBkaWZpY3VsdGF2YW0gYSBmb3JtYcOnw6NvIGRlIGV4cGVjdGF0aXZhcyBlc3TDoXZlaXMuIEFzc2ltLCBhIGNyaXNlIHBvbMOtdGljYSBuw6NvIGF0dW91IGFwZW5hcyBjb21vIHVtIHBhbm8gZGUgZnVuZG8gZGEgcmVjZXNzw6NvLCBtYXMgY29tbyB1bSB2ZXRvciBjb25jcmV0byBkZSB0cmFuc21pc3PDo28gZG9zIHByb2JsZW1hcyBwYXJhIGEgYXRpdmlkYWRlIGVjb27DtG1pY2EgcmVhbC4NCg0KKipHcsOhZmljbyAxNyoqDQoNCmBgYHtyfQ0KDQojIC0tLS0tLS0tLS0tLS0tLS0tLSBQQUNPVEVTIC0tLS0tLS0tLS0tLS0tLS0tLQ0KbGlicmFyeShkcGx5cikNCmxpYnJhcnkocmVhZHhsKQ0KbGlicmFyeShoaWdoY2hhcnRlcikNCmxpYnJhcnkobHVicmlkYXRlKQ0KDQojIC0tLS0tLS0tLS0tLS0tLS0tLSBQQUxFVEEgREEgTElHQSAtLS0tLS0tLS0tLS0tLS0tLS0NCkFNQVJFTE8gICAgIDwtICIjZmViNzEyIg0KQVpVTF9FU0NVUk8gPC0gIiMwMjAyM0MiDQpBWlVMX01FRElPICA8LSAiIzAwMmM1ZSINCkNJTlpBICAgICAgIDwtICIjYTZhNmE2Ig0KVEVYVE8gICAgICAgPC0gIiMzYTNhM2EiDQpBWlVMX0NMQVJPICA8LSAiIzQ2YjFlMSINCg0KIyAtLS0tLS0tLS0tLS0tLS0tLS0gMSkgTEVSIEEgQkFTRSAtLS0tLS0tLS0tLS0tLS0tLS0NCmNvbmZfcmF3IDwtIHJlYWRfZXhjZWwoDQogIGZpbGUucGF0aChkYWRvc19kaXIsICJjaWNsby1kZS1jcmVzY2ltZW50byAoMikueGxzeCIpLA0KICBzaGVldCA9ICJiYXNlX3ZhcmlhdmVpcyINCikNCg0KIyAtLS0tLS0tLS0tLS0tLS0tLS0gMikgVFJBVEFSIEEgQkFTRSAtLS0tLS0tLS0tLS0tLS0tLS0NCmNvbmYgPC0gY29uZl9yYXcgJT4lDQogIG11dGF0ZSgNCiAgICBkYXRhID0gYXMuRGF0ZShkYXRhKSwNCiAgICBJQ0MgPSBhcy5udW1lcmljKElDQyksDQogICAgSUNFID0gYXMubnVtZXJpYyhJQ0UpDQogICkgJT4lDQogIGZpbHRlcigNCiAgICBkYXRhID49IGFzLkRhdGUoIjIwMTQtMDEtMDEiKSwNCiAgICBkYXRhIDw9IGFzLkRhdGUoIjIwMTctMTItMzEiKQ0KICApICU+JQ0KICBhcnJhbmdlKGRhdGEpDQoNCiMgLS0tLS0tLS0tLS0tLS0tLS0tIDMpIEdSw4FGSUNPIC0tLS0tLS0tLS0tLS0tLS0tLQ0KaGlnaGNoYXJ0KHR5cGUgPSAic3RvY2siKSAlPiUNCiAgDQogIGhjX2FkZF9zZXJpZXMoDQogICAgY29uZiwNCiAgICB0eXBlID0gImxpbmUiLA0KICAgIGhjYWVzKHggPSBkYXRhLCB5ID0gSUNDKSwNCiAgICBuYW1lID0gIklDQyIsDQogICAgY29sb3IgPSBBTUFSRUxPLA0KICAgIGxpbmVXaWR0aCA9IDIuNCwNCiAgICB6SW5kZXggPSA1DQogICkgJT4lDQogIA0KICBoY19hZGRfc2VyaWVzKA0KICAgIGNvbmYsDQogICAgdHlwZSA9ICJsaW5lIiwNCiAgICBoY2Flcyh4ID0gZGF0YSwgeSA9IElDRSksDQogICAgbmFtZSA9ICJJQ0UiLA0KICAgIGNvbG9yID0gQVpVTF9FU0NVUk8sDQogICAgbGluZVdpZHRoID0gMi40LA0KICAgIHpJbmRleCA9IDUNCiAgKSAlPiUNCiAgDQogIGhjX3RpdGxlKA0KICAgIHRleHQgPSAiSW5kaWNhZG9yZXMgZGUgY29uZmlhbsOnYSIsDQogICAgc3R5bGUgPSBsaXN0KA0KICAgICAgY29sb3IgPSBBWlVMX0VTQ1VSTywNCiAgICAgIGZvbnRXZWlnaHQgPSAiYm9sZCINCiAgICApDQogICkgJT4lDQogIA0KICBoY19zdWJ0aXRsZSgNCiAgICB0ZXh0ID0gIsONbmRpY2UgZGUgQ29uZmlhbsOnYSBkbyBDb25zdW1pZG9yIGUgw41uZGljZSBkZSBDb25maWFuw6dhIEVtcHJlc2FyaWFsLCAyMDE0IGEgMjAxNyIsDQogICAgc3R5bGUgPSBsaXN0KGNvbG9yID0gVEVYVE8pDQogICkgJT4lDQogIA0KICBoY194QXhpcygNCiAgICB0aXRsZSA9IGxpc3QodGV4dCA9IE5VTEwpLA0KICAgIGxhYmVscyA9IGxpc3Qoc3R5bGUgPSBsaXN0KGNvbG9yID0gVEVYVE8pKQ0KICApICU+JQ0KICANCiAgaGNfeUF4aXMoDQogICAgdGl0bGUgPSBsaXN0KHRleHQgPSAiw41uZGljZSIpLA0KICAgIGxhYmVscyA9IGxpc3Qoc3R5bGUgPSBsaXN0KGNvbG9yID0gVEVYVE8pKSwNCiAgICBncmlkTGluZUNvbG9yID0gIiNlZWVlZWUiDQogICkgJT4lDQogIA0KICBoY190b29sdGlwKA0KICAgIHNoYXJlZCA9IFRSVUUsDQogICAgY3Jvc3NoYWlycyA9IFRSVUUsDQogICAgdmFsdWVEZWNpbWFscyA9IDEsDQogICAgYmFja2dyb3VuZENvbG9yID0gIndoaXRlIiwNCiAgICBib3JkZXJDb2xvciA9IEFaVUxfRVNDVVJPLA0KICAgIHN0eWxlID0gbGlzdChjb2xvciA9IFRFWFRPKQ0KICApICU+JQ0KICANCiAgaGNfcGxvdE9wdGlvbnMoDQogICAgbGluZSA9IGxpc3QoDQogICAgICBtYXJrZXIgPSBsaXN0KGVuYWJsZWQgPSBGQUxTRSkNCiAgICApDQogICkgJT4lDQogIA0KICBoY19sZWdlbmQoDQogICAgZW5hYmxlZCA9IFRSVUUsDQogICAgYWxpZ24gPSAiY2VudGVyIiwNCiAgICB2ZXJ0aWNhbEFsaWduID0gImJvdHRvbSINCiAgKSAlPiUNCiAgDQogIGhjX3JhbmdlU2VsZWN0b3IoZW5hYmxlZCA9IEZBTFNFKSAlPiUNCiAgaGNfc2Nyb2xsYmFyKGVuYWJsZWQgPSBGQUxTRSkgJT4lDQogIGhjX25hdmlnYXRvcihlbmFibGVkID0gRkFMU0UpICU+JQ0KICANCiAgaGNfY3JlZGl0cygNCiAgICBlbmFibGVkID0gVFJVRSwNCiAgICB0ZXh0ID0gIkZvbnRlOiBGR1YvSUJSRSwgU29uZGFnZW0gZG8gQ29uc3VtaWRvciBlIFNvbmRhZ2VtIEVtcHJlc2FyaWFsLiINCiAgKSAlPiUNCiAgDQogIGhjX2NoYXJ0KA0KICAgIHN0eWxlID0gbGlzdChmb250RmFtaWx5ID0gIkFyaWFsLCBzYW5zLXNlcmlmIikNCiAgKQ0KYGBgDQoNCiMjIDIuNSBQSUIgZSBhIHByb2Z1bmRpZGFkZSBkYSBxdWVkYSBkYSBhdGl2aWRhZGUNCg0KQSBzw61udGVzZSBkZSB0b2RvcyBvcyBtb3ZpbWVudG9zIGFuYWxpc2Fkb3MgbmFzIHNlw6fDtWVzIGFudGVyaW9yZXMgYXBhcmVjZSBuYXMgQ29udGFzIE5hY2lvbmFpcy4gTyBQSUIgYnJhc2lsZWlybyByZWdpc3Ryb3UgdmFyaWHDp8O1ZXMgYW51YWlzIGRlICswLDUlIGVtIDIwMTQsIC0zLDUlIGVtIDIwMTUgZSAtMyw2JSBlbSAyMDE2LCBjb20gYSBlY29ub21pYSBlbmNvbGhlbmRvIHBvciBvbnplIHRyaW1lc3RyZXMgY29uc2VjdXRpdm9zIHF1YW5kbyBzZSBleGFtaW5hIGEgc8OpcmllIGRlc3Nhem9uYWxpemFkYS4gTyBHcsOhZmljbyAxOCB0b3JuYSB2aXPDrXZlbCBlc3NhIHNlcXXDqm5jaWE6IGFzIGNvbHVuYXMgZXNjdXJhcyBkZWxpbWl0YW0gZXhhdGFtZW50ZSBvcyBvbnplIHRyaW1lc3RyZXMgY29uc2VjdXRpdm9zIGRlIGNvbnRyYcOnw6NvIGVudHJlIG8gMlQvMjAxNCBlIG8gNFQvMjAxNiBkYXRhZG9zIHBlbG8gQ09EQUNFLg0KDQpQZWxhIMOzdGljYSBkYSBkZXNwZXNhLCBhIGNvbnRyYcOnw6NvIGZvaSBsaWRlcmFkYSBwZWxhIEZCQ0Yg4oCUIGN1amEgY29udHJpYnVpw6fDo28gbmVnYXRpdmEgcGFyYSBvIFBJQiBjaGVnb3UgYSBjZXJjYSBkZSAtMiw3IHBvbnRvcyBwZXJjZW50dWFpcyBlbSAyMDE1IOKAlCBlIHBlbG8gY29uc3VtbyBkYXMgZmFtw61saWFzLiBBcGVuYXMgYXMgZXhwb3J0YcOnw7VlcyBsw61xdWlkYXMgZSBvIGNvbnN1bW8gZG8gZ292ZXJubyBhcHJlc2VudGFyYW0gY29udHJpYnVpw6fDtWVzIG7Do28gbmVnYXRpdmFzIGVtIGFsZ3VucyB0cmltZXN0cmVzLCBzZW5kbyBhcyBleHBvcnRhw6fDtWVzIGJlbmVmaWNpYWRhcyBwZWxhIGRlcHJlY2lhw6fDo28gY2FtYmlhbCBlIG8gY29uc3VtbyBkbyBnb3Zlcm5vIGxpbWl0YWRvIHBlbG8gYXBlcnRvIGZpc2NhbCBkZSAyMDE1LiBQZWxhIMOzdGljYSBkYSBvZmVydGEsIGEgcXVlZGEgZm9pIHB1eGFkYSBwZWxhIGluZMO6c3RyaWEsIGNvbSBkZXN0YXF1ZSBwYXJhIGEgaW5kw7pzdHJpYSBkZSB0cmFuc2Zvcm1hw6fDo28gZSBhIGNvbnN0cnXDp8OjbyBjaXZpbCDigJQgZXN0YSDDumx0aW1hIGVzcGVjaWFsbWVudGUgYWZldGFkYSBwZWxhIHBhcmFsaXNhw6fDo28gZGUgb2JyYXMgdmluY3VsYWRhcyDDoCBPcGVyYcOnw6NvIExhdmEgSmF0by4NCg0KRW0gdGVybW9zIHBlciBjYXBpdGEsIGEgcXVlZGEgZm9pIGFpbmRhIG1haXMgc2V2ZXJhLCBhcHJveGltYW5kby1zZSBkZSAxMSUgYWN1bXVsYWRvcyBxdWFuZG8gZGVzY29udGFkbyBvIGNyZXNjaW1lbnRvIHBvcHVsYWNpb25hbC4gTyBjaG9xdWUgZm9pIHN1ZmljaWVudGUgcGFyYSBmYXplciBvIFBJQiBwZXIgY2FwaXRhIGJyYXNpbGVpcm8gcmV0cm9jZWRlciBhbyBuw612ZWwgb2JzZXJ2YWRvIHBvciB2b2x0YSBkZSAyMDA4IOKAlCBvdSBzZWphLCBhIHJlY2Vzc8OjbyBhbnVsb3UgcXVhc2UgdG9kbyBvIGF2YW7Dp28gZGUgYmVtLWVzdGFyIGFncmVnYWRvIGNvbnF1aXN0YWRvIGR1cmFudGUgbyBjaWNsbyBleHBhbnNpdm8gZGlzY3V0aWRvIG5hIHNlw6fDo28gYW50ZXJpb3IuDQoNCioqR3LDoWZpY28gMTgqKg0KDQpgYGB7cn0NCmxpYnJhcnkodGlkeXZlcnNlKQ0KbGlicmFyeShyZWFkeGwpDQpsaWJyYXJ5KGhpZ2hjaGFydGVyKQ0KDQojIFBhbGV0YSBkYSBMaWdhDQpBTUFSRUxPICAgICA8LSAiI2ZlYjcxMiINCkFaVUxfRVNDVVJPIDwtICIjMDIwMjNDIg0KQVpVTF9NRURJTyAgPC0gIiMwMDJjNWUiDQpDSU5aQSAgICAgICA8LSAiI2E2YTZhNiINClRFWFRPICAgICAgIDwtICIjM2EzYTNhIg0KQVpVTF9DTEFSTyAgPC0gIiM0NmIxZTEiDQoNCiMgVGFiZWxhIDU5MzIgLSBTSURSQS9JQkdFOiB2YXJpYcOnw6NvIHJlYWwgZG8gUElCIHRyaW1lc3RyYWwNCiMgKGVtIHJlbGHDp8OjbyBhbyBtZXNtbyBwZXLDrW9kbyBkbyBhbm8gYW50ZXJpb3IsIGVtICUpDQpicnV0byA8LSByZWFkX2V4Y2VsKGZpbGUucGF0aChkYWRvc19kaXIsICJ0YWJlbGE1OTMyLTMueGxzeCIpLCBzaGVldCA9ICJUYWJlbGEiLCBjb2xfbmFtZXMgPSBGQUxTRSkNCg0KIyBUcmltZXN0cmVzIG5hIGxpbmhhIDQsIHZhbG9yZXMgbmEgbGluaGEgNg0KdHJpbWVzdHJlcyA8LSBhcy5jaGFyYWN0ZXIodW5saXN0KGJydXRvWzQsIC0xXSkpDQp2YWxvcmVzICAgIDwtIGFzLm51bWVyaWModW5saXN0KGJydXRvWzYsIC0xXSkpDQoNCiMgQ29udmVydGVyICIxwrogdHJpbWVzdHJlIDIwMTQiIC0+IGRhdGEgZG8gcHJpbWVpcm8gbcOqcyBkbyB0cmltZXN0cmUNCnBhcnNlX3RyaW1lc3RyZSA8LSBmdW5jdGlvbih4KSB7DQogIHEgPC0gYXMuaW50ZWdlcihzdWJzdHIoeCwgMSwgMSkpDQogIHkgPC0gYXMuaW50ZWdlcihzdWJzdHIoeCwgbmNoYXIoeCkgLSAzLCBuY2hhcih4KSkpDQogIGFzLkRhdGUoc3ByaW50ZigiJWQtJTAyZC0wMSIsIHksIChxIC0gMSkgKiAzICsgMSkpDQp9DQoNCiMgUsOzdHVsbyBjdXJ0byBwYXJhIG8gZWl4byBYIChleC46ICJUMS8yMDE0IikNCnJvdHVsb19jdXJ0byA8LSBmdW5jdGlvbih4KSB7DQogIHEgPC0gc3Vic3RyKHgsIDEsIDEpDQogIHkgPC0gc3Vic3RyKHgsIG5jaGFyKHgpIC0gMywgbmNoYXIoeCkpDQogIHNwcmludGYoIlQlcy8lcyIsIHEsIHkpDQp9DQoNCnBpYiA8LSB0aWJibGUoDQogIHRyaW1lc3RyZSAgID0gdHJpbWVzdHJlcywNCiAgcm90dWxvICAgICAgPSBzYXBwbHkodHJpbWVzdHJlcywgcm90dWxvX2N1cnRvKSwNCiAgZGF0YSAgICAgICAgPSBzYXBwbHkodHJpbWVzdHJlcywgcGFyc2VfdHJpbWVzdHJlKSAlPiUgYXMuRGF0ZShvcmlnaW4gPSAiMTk3MC0wMS0wMSIpLA0KICB2YXJpYWNhbyAgICA9IHZhbG9yZXMNCikgJT4lDQogIG11dGF0ZSgNCiAgICBlbV9yZWNlc3NhbyA9IGRhdGEgPj0gYXMuRGF0ZSgiMjAxNC0wNC0wMSIpICYgZGF0YSA8PSBhcy5EYXRlKCIyMDE2LTEwLTAxIiksDQogICAgY29yICAgICAgICAgPSBpZl9lbHNlKGVtX3JlY2Vzc2FvLCBBWlVMX0VTQ1VSTywgQVpVTF9DTEFSTykNCiAgKQ0KDQojIENvbnN0cnVpciBvIGdyw6FmaWNvIGRlIGNvbHVuYXMgY29tIGhpZ2hjaGFydGVyDQpoY2hhcnQoDQogIHBpYiwNCiAgdHlwZSAgID0gImNvbHVtbiIsDQogIGhjYWVzKHggPSByb3R1bG8sIHkgPSB2YXJpYWNhbywgY29sb3IgPSBjb3IpLA0KICBuYW1lICAgPSAiUElCIGJyYXNpbGVpcm86IHZhcmlhw6fDo28gcmVhbCB0cmltZXN0cmFsICINCikgJT4lDQogIGhjX3RpdGxlKA0KICAgIHRleHQgID0gIlBJQiBicmFzaWxlaXJvOiB2YXJpYcOnw6NvIHJlYWwgdHJpbWVzdHJhbCIsDQogICAgc3R5bGUgPSBsaXN0KGNvbG9yID0gQVpVTF9FU0NVUk8sIGZvbnRXZWlnaHQgPSAiYm9sZCIpDQogICkgJT4lDQogIGhjX3N1YnRpdGxlKA0KICAgIHRleHQgID0gIk9uemUgdHJpbWVzdHJlcyBjb25zZWN1dGl2b3MgZGUgY29udHJhw6fDo28gZW50cmUgMlQvMjAxNCBlIDRULzIwMTYiLA0KICAgIHN0eWxlID0gbGlzdChjb2xvciA9IFRFWFRPKQ0KICApICU+JQ0KICBoY194QXhpcygNCiAgICBjYXRlZ29yaWVzID0gcGliJHJvdHVsbywNCiAgICB0aXRsZSAgICAgID0gbGlzdCh0ZXh0ID0gTlVMTCksDQogICAgbGFiZWxzICAgICA9IGxpc3Qoc3R5bGUgPSBsaXN0KGNvbG9yID0gVEVYVE8pKSwNCnBsb3RCYW5kcyAgPSBsaXN0KA0KDQogIGxpc3QoDQoNCiAgICBmcm9tICA9IHdoaWNoKHBpYiRyb3R1bG8gPT0gIlQyLzIwMTQiKSAtIDEuNSwNCg0KICAgIHRvICAgID0gd2hpY2gocGliJHJvdHVsbyA9PSAiVDQvMjAxNiIpIC0gMC41LA0KDQogICAgY29sb3IgPSAicmdiYSgxNjYsIDE2NiwgMTY2LCAwLjE1KSINCg0KICApDQoNCikNCiAgKSAlPiUNCiAgaGNfeUF4aXMoDQogICAgdGl0bGUgICAgICAgICA9IGxpc3QodGV4dCA9IE5VTEwpLA0KICAgIGxhYmVscyAgICAgICAgPSBsaXN0KGZvcm1hdCA9ICJ7dmFsdWV9JSIsIHN0eWxlID0gbGlzdChjb2xvciA9IFRFWFRPKSksDQogICAgcGxvdExpbmVzICAgICA9IGxpc3QobGlzdCh2YWx1ZSA9IDAsIGNvbG9yID0gVEVYVE8sIHdpZHRoID0gMSwgekluZGV4ID0gNCkpLA0KICAgIGdyaWRMaW5lQ29sb3IgPSAiI2VlZWVlZSINCiAgKSAlPiUNCiAgaGNfdG9vbHRpcCgNCiAgICBoZWFkZXJGb3JtYXQgICAgPSAiPGI+e3BvaW50LmtleX08L2I+PGJyLz4iLA0KICAgIHBvaW50Rm9ybWF0ICAgICA9ICJWYXJpYcOnw6NvOiA8Yj57cG9pbnQueTorLjFmfSU8L2I+IiwNCiAgICBiYWNrZ3JvdW5kQ29sb3IgPSAid2hpdGUiLA0KICAgIGJvcmRlckNvbG9yICAgICA9IEFaVUxfRVNDVVJPLA0KICAgIHN0eWxlICAgICAgICAgICA9IGxpc3QoY29sb3IgPSBURVhUTykNCiAgKSAlPiUNCiAgaGNfcGxvdE9wdGlvbnMoDQogICAgY29sdW1uID0gbGlzdCgNCiAgICAgIGNvbG9yQnlQb2ludCA9IFRSVUUsDQogICAgICBib3JkZXJXaWR0aCAgPSAwLA0KICAgICAgZ3JvdXBQYWRkaW5nID0gMC4wNQ0KICAgICkNCiAgKSAlPiUNCiAgaGNfbGVnZW5kKGVuYWJsZWQgPSBGQUxTRSkgJT4lDQogIGhjX2NyZWRpdHMoDQogICAgZW5hYmxlZCA9IFRSVUUsDQogICAgdGV4dCAgICA9ICJGb250ZTogSUJHRSDigJQgQ29udGFzIE5hY2lvbmFpcyBUcmltZXN0cmFpcyAoVGFiZWxhIDU5MzIvU0lEUkEpLiBEYXRhw6fDo286IENPREFDRS9GR1YtSUJSRS4iDQogICkgJT4lDQogIGhjX2NoYXJ0KHN0eWxlID0gbGlzdChmb250RmFtaWx5ID0gIkFyaWFsLCBzYW5zLXNlcmlmIikpDQpgYGANCg0KIyMgMi42IFRyYW5zacOnw6NvIHBhcmEgYSByZWN1cGVyYcOnw6NvIGxlbnRhDQoNClRlY25pY2FtZW50ZSwgYSByZWNlc3PDo28gdGVybWlub3Ugbm8gcXVhcnRvIHRyaW1lc3RyZSBkZSAyMDE2LCBjb20gbyB2YWxlIGlkZW50aWZpY2FkbyBwZWxvIENPREFDRSBlbSBkZXplbWJybyBkYXF1ZWxlIGFuby4gTWFzLCBjb21vIG9jb3JyZSBlbSByZWNlc3PDtWVzIHByb2Z1bmRhcyBlIGRlIG5hdHVyZXphIGVzdHJ1dHVyYWwsIG8gZmltIGRhIGNvbnRyYcOnw6NvIG7Do28gc2lnbmlmaWNvdSBvIGZpbSBkYSBjcmlzZS4gQSByZWN1cGVyYcOnw6NvIHF1ZSBzZSBpbmljaW91IGVtIDIwMTcgbW9zdHJvdS1zZSBhIG1haXMgbGVudGEgZGEgaGlzdMOzcmlhIGVjb27DtG1pY2EgYnJhc2lsZWlyYSByZWNlbnRlOiBvIGNyZXNjaW1lbnRvIG3DqWRpbyBkbyBQSUIgbm9zIGFub3Mgc2VndWludGVzIGZpY291IGVtIHRvcm5vIGRlIDEsMyUgYW8gYW5vLCByaXRtbyBjbGFyYW1lbnRlIGluc3VmaWNpZW50ZSBwYXJhIHJlY29tcG9yIGFzIHBlcmRhcy4NCg0KUXVhdHJvIGZhdG9yZXMgYWp1ZGFtIGEgZXhwbGljYXIgZXNzYSBsZW50aWTDo28uIE8gcHJpbWVpcm8gw6kgbyBjYXLDoXRlciBkZSBiYWxhbmNlIHNoZWV0IHJlY2Vzc2lvbjogY29tbyB2aXN0byBuYXMgc2XDp8O1ZXMgYW50ZXJpb3JlcywgZmFtw61saWFzLCBlbXByZXNhcyBlIHNldG9yIHDDumJsaWNvIGVudHJhcmFtIHNpbXVsdGFuZWFtZW50ZSBlbSBwcm9jZXNzbyBkZSByZWR1w6fDo28gZGUgZW5kaXZpZGFtZW50bywgbyBxdWUgcHJvbG9uZ291IG8gY2ljbG8gZGUgZGVzYWxhdmFuY2FnZW0gcG9yIGFub3MgZSBsaW1pdG91IGEgcmVhw6fDo28gZGEgZGVtYW5kYSBhZ3JlZ2FkYS4gTyBzZWd1bmRvIMOpIGEgZnJhZ2lsaWRhZGUgZmlzY2FsLCBxdWUgcmVzdHJpbmdpdSBvIHVzbyBkZSBlc3TDrW11bG9zIHZpYSBnYXN0byBww7pibGljbyBlLCBhbyBjb250csOhcmlvLCBleGlnaXUgcmVmb3JtYXMgY29tbyBhIEVtZW5kYSBDb25zdGl0dWNpb25hbCBkbyBUZXRvIGRlIEdhc3RvcyAoRUMgOTUvMjAxNikgZSBhIFJlZm9ybWEgVHJhYmFsaGlzdGEgKDIwMTcpIGFwZW5hcyBwYXJhIGNvbnRlciBhIGRldGVyaW9yYcOnw6NvIGVzdHJ1dHVyYWwuIE8gdGVyY2Vpcm8gc8OjbyBhcyBjaWNhdHJpemVzIChzY2FycykgZGVpeGFkYXMgcGVsYSByZWNlc3PDo28gc29icmUgbyBjYXBpdGFsIGh1bWFubyBlIG8gZXN0b3F1ZSBkZSBjYXBpdGFsIGbDrXNpY286IHRyYWJhbGhhZG9yZXMgZGVzb2N1cGFkb3MgcG9yIGxvbmdvcyBwZXLDrW9kb3MgcGVyZGVtIHByb2R1dGl2aWRhZGUgZSBlbXByZWdhYmlsaWRhZGUsIGUgaW52ZXN0aW1lbnRvcyBuw6NvIHJlYWxpemFkb3MgbsOjbyBzw6NvIGZhY2lsbWVudGUgcmVjdXBlcmFkb3MgZW0gY2ljbG9zIHN1YnNlcXVlbnRlcyDigJQgcG9udG8gcXVlIGRpYWxvZ2EgZGlyZXRhbWVudGUgY29tIGEgZXN0YWduYcOnw6NvIGRhIHByb2R1dGl2aWRhZGUgZGlzY3V0aWRhIGVtIDIuMy4zLiBPIHF1YXJ0byBzw6NvIGFzIGluc3RhYmlsaWRhZGVzIHBvc3RlcmlvcmVzIHF1ZSBpbnRlcnJvbXBlcmFtIGEgcmV0b21hZGEgYW50ZXMgcXVlIGVsYSBzZSBjb25zb2xpZGFzc2U6IGEgZ3JldmUgZG9zIGNhbWluaG9uZWlyb3MgZW0gMjAxOCwgYSB0cmFuc2nDp8OjbyBwb2zDrXRpY2EgZGFxdWVsZSBhbm8gZSwgbWFpcyDDoCBmcmVudGUsIG8gY2hvcXVlIGRhIHBhbmRlbWlhIGVtIDIwMjAuDQoNCkEgcmVjZXNzw6NvIGRlIDIwMTTigJMyMDE2IGRlaXhhLCBhc3NpbSwgbGnDp8O1ZXMgaW1wb3J0YW50ZXMgcGFyYSBhIGxlaXR1cmEgZG9zIGNpY2xvcyBlY29uw7RtaWNvcyBicmFzaWxlaXJvcy4gQSBwcmltZWlyYSDDqSBxdWUgZXhwYW5zw7VlcyBwdXhhZGFzIHBvciBjb25zdW1vIGUgY3LDqWRpdG8sIHN1c3RlbnRhZGFzIHBvciBlc3TDrW11bG9zIGZpc2NhaXMgZSBwYXJhZmlzY2FpcywgdGVuZGVtIGEgZXNnb3Rhci1zZSBxdWFuZG8gb3MgZnVuZGFtZW50b3MgZGUgcHJvZHV0aXZpZGFkZSBuw6NvIGFjb21wYW5oYW0gbyByaXRtbyBkYSBkZW1hbmRhLiBBIHNlZ3VuZGEgw6kgcXVlIGNob3F1ZXMgZXh0ZXJub3MgbsOjbyBzw6NvLCBzb3ppbmhvcywgZGV0ZXJtaW5hbnRlcyDigJQgZWxlcyBhbXBsaWZpY2FtIHZ1bG5lcmFiaWxpZGFkZXMgaW50ZXJuYXMgcHLDqS1leGlzdGVudGVzLiBBIHRlcmNlaXJhIMOpIHF1ZSBhIGNyZWRpYmlsaWRhZGUgZGEgcG9sw610aWNhIGVjb27DtG1pY2Egw6kgdW0gaW5zdW1vIG1hY3JvZWNvbsO0bWljbyByZWxldmFudGU6IHN1YSBwZXJkYSBlbGV2YSBhIGluY2VydGV6YSwgZGVwcmltZSBleHBlY3RhdGl2YXMgZSB0cmFuc2Zvcm1hIG8gcXVlIHNlcmlhIHVtYSBkZXNhY2VsZXJhw6fDo28gZW0gcmVjZXNzw6NvIHByb2Z1bmRhLg0KDQpFc3NhcyBsacOnw7VlcyBzZXJ2ZW0gZGUgcGFubyBkZSBmdW5kbyBwYXJhIGEgcHLDs3hpbWEgc2XDp8OjbywgZW0gcXVlIHNlcsOhIGV4YW1pbmFkbyBvIG1vbWVudG8gYXR1YWwgZGEgZWNvbm9taWEgYnJhc2lsZWlyYSDigJQgYnVzY2FuZG8gYXZhbGlhciBlbSBxdWUgbWVkaWRhIG9zIGFycmFuam9zIGluc3RpdHVjaW9uYWlzIGUgb3MgZnVuZGFtZW50b3MgbWFjcm9lY29uw7RtaWNvcyBww7NzLXJlY2Vzc8OjbyBhbHRlcmFyYW0gYSBkaW7Dom1pY2EgY8OtY2xpY2EgZG8gcGHDrXMsIGUgcXVhaXMgZG9zIGxlZ2Fkb3MgZGUgMjAxNOKAkzIwMTYgYWluZGEgY29uZGljaW9uYW0gbyBjaWNsbyBwcmVzZW50ZS4NCg0KIyAzLiBCcmFzaWwgYXR1YWwNCg0KRGUgYWNvcmRvIGNvbSBhcyBkYXRhcyBvZmljaWFpcyBkbyBDT0RBQ0UsIG8gw7psdGltbyBjaWNsbyBlY29uw7RtaWNvIGJyYXNpbGVpcm8gLSBjYXJhY3Rlcml6YWRvIGNvbW8gdW1hIHJlY2Vzc8OjbyAtIGZvaSBlbmNlcnJhZG8gbm8gc2VndW5kbyB0cmltZXN0cmUgZGUgMjAyMC4gQXTDqSBvIG1vbWVudG8gZGEgcHVibGljYcOnw6NvIGRlc3RlIHJlbGF0w7NyaW8sIG7Do28gaG91dmUgZGl2dWxnYcOnw6NvIG9maWNpYWwgc29icmUgbyBwZXLDrW9kbyBzdWJzZXF1ZW50ZSwgZGUgbW9kbyBxdWUgbsOjbyBzZSBzYWJlIGZvcm1hbG1lbnRlIHNlIGEgZWNvbm9taWEgYnJhc2lsZWlyYSBzZSBlbmNvbnRyYSBlbSB1bWEgZmFzZSBkZSBleHBhbnPDo28gb3UgcmVjZXNzw6NvLg0KTm8gZW50YW50bywgY29tbyBkaXNjdXRpZG8gYW50ZXJpb3JtZW50ZSwgaW5kZXBlbmRlbnRlbWVudGUgZGEgZmFzZSBkbyBjaWNsbyBlY29uw7RtaWNvLCDDqSBwb3Nzw612ZWwgaWRlbnRpZmljYXIgcGFkcsO1ZXMsIHBvbnRvcyBmb3J0ZXMgZSBkZXNlcXVpbMOtYnJpb3MgZXN0cnV0dXJhaXMgbmEgZWNvbm9taWEuIEFzc2ltLCBlc3RhIHNlw6fDo28gYnVzY2EgYW5hbGlzYXIgYWxndW5zIGluZGljYWRvcmVzIGRvIEJyYXNpbCBhdHVhbCDDoCBsdXogZG8gaGlzdMOzcmljbyBhcHJlc2VudGFkbyBhbyBsb25nbyBkbyByZWxhdMOzcmlvLCBvYnNlcnZhbmRvIHF1YWlzIGZyYWdpbGlkYWRlcyBwZXJzaXN0ZW0gZSBxdWFpcyB0cmFuc2Zvcm1hw6fDtWVzIHBvZGVtIHNlciBwZXJjZWJpZGFzIG5hIGVjb25vbWlhIGJyYXNpbGVpcmEuDQoNCiMjIDMuMSBFc3RydXR1cmEgcHJvZHV0aXZhIGUgaW52ZXN0aW1lbnRvDQoNCkEgYW7DoWxpc2UgZG8gY2ljbG8gYXR1YWwgY29tZcOnYSBwZWxhIGNvbXBvc2nDp8OjbyBzZXRvcmlhbCBkbyBwcm9kdXRvLiBPIHJpdG1vIGRhIGV4cGFuc8OjbyBpbXBvcnRhLCBtYXMgbyBxdWUgZGVmaW5lIHNlIGVsYSDDqSBzdXN0ZW50w6F2ZWwgbm8gbG9uZ28gcHJhem8gw6kgYSBlc3RydXR1cmEgcG9yIHRyw6FzOiBxdWFpcyBzZXRvcmVzIGVzdMOjbyBwdXhhbmRvIG8gY3Jlc2NpbWVudG8sIGVtIHF1ZSBwcm9wb3LDp8OjbywgZSBzZSBlc3NhIHByb3BvcsOnw6NvIHNlIGFsdGVyYSBhbyBsb25nbyBkbyB0ZW1wby4gQXNzaW0sIGEgcXVlc3TDo28gY2VudHJhbCDDqSBvYnNlcnZhciBzZSBhIGVjb25vbWlhIGJyYXNpbGVpcmEgZXN0w6EgcGFzc2FuZG8gcG9yIHVtYSB0cmFuc2Zvcm1hw6fDo28gZXN0cnV0dXJhbCBvdSBzZSBjb250aW51YSBjcmVzY2VuZG8gZGVudHJvIGRvIG1lc21vIHBhZHLDo28gb2JzZXJ2YWRvIGVtIGNpY2xvcyBhbnRlcmlvcmVzLg0KDQoqKkdyw6FmaWNvIDE5OioqDQoNCmBgYHtyLCBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KbGlicmFyeShkcGx5cikNCmxpYnJhcnkoc3RyaW5ncikNCmxpYnJhcnkoaGlnaGNoYXJ0ZXIpDQoNCm1hdHJpel9waWIgPC0gbWF0cml4KA0KICBjKA0KICAgICIzwrogdHJpbWVzdHJlIDIwMjAiLCAiQWdyb3BlY3XDoXJpYSIsICIxMDA0ODMiLA0KICAgICIzwrogdHJpbWVzdHJlIDIwMjAiLCAiSW5kw7pzdHJpYSIsICI0MDUyNDgiLA0KICAgICIzwrogdHJpbWVzdHJlIDIwMjAiLCAiU2VydmnDp29zIiwgIjExNTUzMDYiLA0KICAgICI0wrogdHJpbWVzdHJlIDIwMjAiLCAiQWdyb3BlY3XDoXJpYSIsICI3Njk2NSIsDQogICAgIjTCuiB0cmltZXN0cmUgMjAyMCIsICJJbmTDunN0cmlhIiwgIjM5OTQwMyIsDQogICAgIjTCuiB0cmltZXN0cmUgMjAyMCIsICJTZXJ2acOnb3MiLCAiMTI3MzA3NSIsDQogICAgIjHCuiB0cmltZXN0cmUgMjAyMSIsICJBZ3JvcGVjdcOhcmlhIiwgIjI0NDA2OCIsDQogICAgIjHCuiB0cmltZXN0cmUgMjAyMSIsICJJbmTDunN0cmlhIiwgIjQyNjgyMiIsDQogICAgIjHCuiB0cmltZXN0cmUgMjAyMSIsICJTZXJ2acOnb3MiLCAiMTE4NDMwMyIsDQogICAgIjLCuiB0cmltZXN0cmUgMjAyMSIsICJBZ3JvcGVjdcOhcmlhIiwgIjE2OTA2NCIsDQogICAgIjLCuiB0cmltZXN0cmUgMjAyMSIsICJJbmTDunN0cmlhIiwgIjQ5MzA0MCIsDQogICAgIjLCuiB0cmltZXN0cmUgMjAyMSIsICJTZXJ2acOnb3MiLCAiMTI0Mzk0OSIsDQogICAgIjPCuiB0cmltZXN0cmUgMjAyMSIsICJBZ3JvcGVjdcOhcmlhIiwgIjEwNjg4NiIsDQogICAgIjPCuiB0cmltZXN0cmUgMjAyMSIsICJJbmTDunN0cmlhIiwgIjU1NTc2OSIsDQogICAgIjPCuiB0cmltZXN0cmUgMjAyMSIsICJTZXJ2acOnb3MiLCAiMTI5MzY4MiIsDQogICAgIjTCuiB0cmltZXN0cmUgMjAyMSIsICJBZ3JvcGVjdcOhcmlhIiwgIjcxMDY3IiwNCiAgICAiNMK6IHRyaW1lc3RyZSAyMDIxIiwgIkluZMO6c3RyaWEiLCAiNTE4MTY4IiwNCiAgICAiNMK6IHRyaW1lc3RyZSAyMDIxIiwgIlNlcnZpw6dvcyIsICIxNDA3MTgwIiwNCiAgICAiMcK6IHRyaW1lc3RyZSAyMDIyIiwgIkFncm9wZWN1w6FyaWEiLCAiMTcwNDA4IiwNCiAgICAiMcK6IHRyaW1lc3RyZSAyMDIyIiwgIkluZMO6c3RyaWEiLCAiNDk0MTcwIiwNCiAgICAiMcK6IHRyaW1lc3RyZSAyMDIyIiwgIlNlcnZpw6dvcyIsICIxMzE4NjAzIiwNCiAgICAiMsK6IHRyaW1lc3RyZSAyMDIyIiwgIkFncm9wZWN1w6FyaWEiLCAiMTYyNDg1IiwNCiAgICAiMsK6IHRyaW1lc3RyZSAyMDIyIiwgIkluZMO6c3RyaWEiLCAiNTk0OTcwIiwNCiAgICAiMsK6IHRyaW1lc3RyZSAyMDIyIiwgIlNlcnZpw6dvcyIsICIxNDI4MDIyIiwNCiAgICAiM8K6IHRyaW1lc3RyZSAyMDIyIiwgIkFncm9wZWN1w6FyaWEiLCAiMTQ1NzA1IiwNCiAgICAiM8K6IHRyaW1lc3RyZSAyMDIyIiwgIkluZMO6c3RyaWEiLCAiNjE3MDk4IiwNCiAgICAiM8K6IHRyaW1lc3RyZSAyMDIyIiwgIlNlcnZpw6dvcyIsICIxNDk2NzE3IiwNCiAgICAiNMK6IHRyaW1lc3RyZSAyMDIyIiwgIkFncm9wZWN1w6FyaWEiLCAiMTAyNzQ1IiwNCiAgICAiNMK6IHRyaW1lc3RyZSAyMDIyIiwgIkluZMO6c3RyaWEiLCAiNTkzODg5IiwNCiAgICAiNMK6IHRyaW1lc3RyZSAyMDIyIiwgIlNlcnZpw6dvcyIsICIxNjExNjYzIiwNCiAgICAiMcK6IHRyaW1lc3RyZSAyMDIzIiwgIkFncm9wZWN1w6FyaWEiLCAiMTk2NDg2IiwNCiAgICAiMcK6IHRyaW1lc3RyZSAyMDIzIiwgIkluZMO6c3RyaWEiLCAiNTYyOTc3IiwNCiAgICAiMcK6IHRyaW1lc3RyZSAyMDIzIiwgIlNlcnZpw6dvcyIsICIxNTAxMjQwIiwNCiAgICAiMsK6IHRyaW1lc3RyZSAyMDIzIiwgIkFncm9wZWN1w6FyaWEiLCAiMTk0MzI3IiwNCiAgICAiMsK6IHRyaW1lc3RyZSAyMDIzIiwgIkluZMO6c3RyaWEiLCAiNjAzMTQ0IiwNCiAgICAiMsK6IHRyaW1lc3RyZSAyMDIzIiwgIlNlcnZpw6dvcyIsICIxNTkyNzM3IiwNCiAgICAiM8K6IHRyaW1lc3RyZSAyMDIzIiwgIkFncm9wZWN1w6FyaWEiLCAiMTU3MTQ5IiwNCiAgICAiM8K6IHRyaW1lc3RyZSAyMDIzIiwgIkluZMO6c3RyaWEiLCAiNjIwMjI2IiwNCiAgICAiM8K6IHRyaW1lc3RyZSAyMDIzIiwgIlNlcnZpw6dvcyIsICIxNjI5MDYwIiwNCiAgICAiNMK6IHRyaW1lc3RyZSAyMDIzIiwgIkFncm9wZWN1w6FyaWEiLCAiMTExMTYyIiwNCiAgICAiNMK6IHRyaW1lc3RyZSAyMDIzIiwgIkluZMO6c3RyaWEiLCAiNjM2OTY2IiwNCiAgICAiNMK6IHRyaW1lc3RyZSAyMDIzIiwgIlNlcnZpw6dvcyIsICIxNzUzMTE4IiwNCiAgICAiMcK6IHRyaW1lc3RyZSAyMDI0IiwgIkFncm9wZWN1w6FyaWEiLCAiMTkwNzQ5IiwNCiAgICAiMcK6IHRyaW1lc3RyZSAyMDI0IiwgIkluZMO6c3RyaWEiLCAiNTcyMzE1IiwNCiAgICAiMcK6IHRyaW1lc3RyZSAyMDI0IiwgIlNlcnZpw6dvcyIsICIxNjE5MTc1IiwNCiAgICAiMsK6IHRyaW1lc3RyZSAyMDI0IiwgIkFncm9wZWN1w6FyaWEiLCAiMjAzNjg0IiwNCiAgICAiMsK6IHRyaW1lc3RyZSAyMDI0IiwgIkluZMO6c3RyaWEiLCAiNjE5MDU3IiwNCiAgICAiMsK6IHRyaW1lc3RyZSAyMDI0IiwgIlNlcnZpw6dvcyIsICIxNzA4MTE3IiwNCiAgICAiM8K6IHRyaW1lc3RyZSAyMDI0IiwgIkFncm9wZWN1w6FyaWEiLCAiMTcwODc0IiwNCiAgICAiM8K6IHRyaW1lc3RyZSAyMDI0IiwgIkluZMO6c3RyaWEiLCAiNjQzOTcxIiwNCiAgICAiM8K6IHRyaW1lc3RyZSAyMDI0IiwgIlNlcnZpw6dvcyIsICIxNzY3MjExIiwNCiAgICAiNMK6IHRyaW1lc3RyZSAyMDI0IiwgIkFncm9wZWN1w6FyaWEiLCAiMTEyMjY4IiwNCiAgICAiNMK6IHRyaW1lc3RyZSAyMDI0IiwgIkluZMO6c3RyaWEiLCAiNjMxMzEzIiwNCiAgICAiNMK6IHRyaW1lc3RyZSAyMDI0IiwgIlNlcnZpw6dvcyIsICIxODc1MzY4IiwNCiAgICAiMcK6IHRyaW1lc3RyZSAyMDI1IiwgIkFncm9wZWN1w6FyaWEiLCAiMjQ1NTgyIiwNCiAgICAiMcK6IHRyaW1lc3RyZSAyMDI1IiwgIkluZMO6c3RyaWEiLCAiNTkyNjI0IiwNCiAgICAiMcK6IHRyaW1lc3RyZSAyMDI1IiwgIlNlcnZpw6dvcyIsICIxNzYxMzUxIiwNCiAgICAiMsK6IHRyaW1lc3RyZSAyMDI1IiwgIkFncm9wZWN1w6FyaWEiLCAiMjUxOTc2IiwNCiAgICAiMsK6IHRyaW1lc3RyZSAyMDI1IiwgIkluZMO6c3RyaWEiLCAiNjQzNjA0IiwNCiAgICAiMsK6IHRyaW1lc3RyZSAyMDI1IiwgIlNlcnZpw6dvcyIsICIxODc2MTM3IiwNCiAgICAiM8K6IHRyaW1lc3RyZSAyMDI1IiwgIkFncm9wZWN1w6FyaWEiLCAiMTc2MTkxIiwNCiAgICAiM8K6IHRyaW1lc3RyZSAyMDI1IiwgIkluZMO6c3RyaWEiLCAiNjgyMTU1IiwNCiAgICAiM8K6IHRyaW1lc3RyZSAyMDI1IiwgIlNlcnZpw6dvcyIsICIxOTI4MDEyIiwNCiAgICAiNMK6IHRyaW1lc3RyZSAyMDI1IiwgIkFncm9wZWN1w6FyaWEiLCAiMTAxNTQ4IiwNCiAgICAiNMK6IHRyaW1lc3RyZSAyMDI1IiwgIkluZMO6c3RyaWEiLCAiNjQ4NDMxIiwNCiAgICAiNMK6IHRyaW1lc3RyZSAyMDI1IiwgIlNlcnZpw6dvcyIsICIyMDQ0MzcwIg0KICApLA0KICBuY29sID0gMywNCiAgYnlyb3cgPSBUUlVFDQopDQoNCmNvbG5hbWVzKG1hdHJpel9waWIpIDwtIGMoInRyaW1lc3RyZSIsICJzZXRvciIsICJ2YWxvciIpDQoNCnBpYjIgPC0gYXMuZGF0YS5mcmFtZShtYXRyaXpfcGliKSAlPiUNCiAgbXV0YXRlKA0KICAgIHZhbG9yID0gYXMubnVtZXJpYyh2YWxvciksDQogICAgYW5vID0gYXMuaW50ZWdlcihzdHJfZXh0cmFjdCh0cmltZXN0cmUsICJcXGR7NH0iKSksDQogICAgdHJpbSA9IGFzLmludGVnZXIoc3RyX2V4dHJhY3QodHJpbWVzdHJlLCAiXlxcZCIpKSwNCiAgICBtZXMgPSBjYXNlX3doZW4oDQogICAgICB0cmltID09IDEgfiAiMDEiLA0KICAgICAgdHJpbSA9PSAyIH4gIjA0IiwNCiAgICAgIHRyaW0gPT0gMyB+ICIwNyIsDQogICAgICB0cmltID09IDQgfiAiMTAiDQogICAgKSwNCiAgICBkYXRhID0gYXMuRGF0ZShwYXN0ZTAoYW5vLCAiLSIsIG1lcywgIi0wMSIpKSwNCiAgICBkYXRhX21zID0gZGF0ZXRpbWVfdG9fdGltZXN0YW1wKGRhdGEpDQogICkNCg0KZ3JhZmljb19waWJfc2V0b3IgPC0gaGlnaGNoYXJ0KCkgJT4lDQogIGhjX3RpdGxlKA0KICAgIHRleHQgPSAiUElCIHBvciBTZXRvciDigJQgQnJhc2lsIiwNCiAgICBhbGlnbiA9ICJjZW50ZXIiLA0KICAgIHN0eWxlID0gbGlzdChmb250U2l6ZSA9ICIyMHB4IiwgZm9udFdlaWdodCA9ICJib2xkIiwgY29sb3IgPSAiIzExMTExMSIpDQogICkgJT4lDQogIGhjX3N1YnRpdGxlKA0KICAgIHRleHQgPSAiVmFsb3JlcyBhIHByZcOnb3MgY29ycmVudGVzIChSJCBtaWxow7Vlcykg4oCUIDNUMjAyMCBhIDRUMjAyNSIsDQogICAgYWxpZ24gPSAiY2VudGVyIiwNCiAgICBzdHlsZSA9IGxpc3QoZm9udFNpemUgPSAiMTNweCIsIGNvbG9yID0gIiM2NjY2NjYiKQ0KICApICU+JQ0KICBoY19hZGRfc2VyaWVzKA0KICAgIGRhdGEgPSBwaWIyICU+JSBmaWx0ZXIoc2V0b3IgPT0gIkFncm9wZWN1w6FyaWEiKSwNCiAgICB0eXBlID0gImxpbmUiLA0KICAgIGhjYWVzKHggPSBkYXRhX21zLCB5ID0gdmFsb3IpLA0KICAgIG5hbWUgPSAiQWdyb3BlY3XDoXJpYSIsDQogICAgY29sb3IgPSAiIzQ2QjFFMSIsDQogICAgbGluZVdpZHRoID0gMi41LA0KICAgIG1hcmtlciA9IGxpc3QoZW5hYmxlZCA9IEZBTFNFKQ0KICApICU+JQ0KICBoY19hZGRfc2VyaWVzKA0KICAgIGRhdGEgPSBwaWIyICU+JSBmaWx0ZXIoc2V0b3IgPT0gIkluZMO6c3RyaWEiKSwNCiAgICB0eXBlID0gImxpbmUiLA0KICAgIGhjYWVzKHggPSBkYXRhX21zLCB5ID0gdmFsb3IpLA0KICAgIG5hbWUgPSAiSW5kw7pzdHJpYSIsDQogICAgY29sb3IgPSAiI0ZFQjAxNSIsDQogICAgbGluZVdpZHRoID0gMi41LA0KICAgIG1hcmtlciA9IGxpc3QoZW5hYmxlZCA9IEZBTFNFKQ0KICApICU+JQ0KICBoY19hZGRfc2VyaWVzKA0KICAgIGRhdGEgPSBwaWIyICU+JSBmaWx0ZXIoc2V0b3IgPT0gIlNlcnZpw6dvcyIpLA0KICAgIHR5cGUgPSAibGluZSIsDQogICAgaGNhZXMoeCA9IGRhdGFfbXMsIHkgPSB2YWxvciksDQogICAgbmFtZSA9ICJTZXJ2acOnb3MiLA0KICAgIGNvbG9yID0gIiMwMjAyM0MiLA0KICAgIGxpbmVXaWR0aCA9IDMsDQogICAgbWFya2VyID0gbGlzdChlbmFibGVkID0gRkFMU0UpDQogICkgJT4lDQogIGhjX3hBeGlzKA0KICAgIHR5cGUgPSAiZGF0ZXRpbWUiLA0KICAgIHRpdGxlID0gbGlzdCh0ZXh0ID0gTlVMTCksDQogICAgbGluZUNvbG9yID0gIiNEOUQ5RDkiLA0KICAgIHRpY2tDb2xvciA9ICIjRDlEOUQ5IiwNCiAgICBsYWJlbHMgPSBsaXN0KHN0eWxlID0gbGlzdChjb2xvciA9ICIjNDQ0NDQ0IikpDQogICkgJT4lDQogIGhjX3lBeGlzKA0KICAgIHRpdGxlID0gbGlzdCh0ZXh0ID0gIlIkIG1pbGjDtWVzIiwgc3R5bGUgPSBsaXN0KGNvbG9yID0gIiM0NDQ0NDQiKSksDQogICAgZ3JpZExpbmVDb2xvciA9ICIjRTZFNkU2IiwNCiAgICBsYWJlbHMgPSBsaXN0KHN0eWxlID0gbGlzdChjb2xvciA9ICIjNDQ0NDQ0IikpDQogICkgJT4lDQogIGhjX3Rvb2x0aXAoDQogICAgc2hhcmVkID0gVFJVRSwNCiAgICBjcm9zc2hhaXJzID0gVFJVRSwNCiAgICB2YWx1ZVN1ZmZpeCA9ICIgbWkiLA0KICAgIHZhbHVlRGVjaW1hbHMgPSAwLA0KICAgIGJhY2tncm91bmRDb2xvciA9ICIjRkZGRkZGIiwNCiAgICBib3JkZXJDb2xvciA9ICIjRDlEOUQ5IiwNCiAgICBib3JkZXJSYWRpdXMgPSA4LA0KICAgIHNoYWRvdyA9IEZBTFNFDQogICkgJT4lDQogIGhjX2xlZ2VuZCgNCiAgICBlbmFibGVkID0gVFJVRSwNCiAgICBhbGlnbiA9ICJjZW50ZXIiLA0KICAgIHZlcnRpY2FsQWxpZ24gPSAiYm90dG9tIiwNCiAgICBsYXlvdXQgPSAiaG9yaXpvbnRhbCINCiAgKSAlPiUNCiAgaGNfcGxvdE9wdGlvbnMoDQogICAgc2VyaWVzID0gbGlzdCgNCiAgICAgIGFuaW1hdGlvbiA9IEZBTFNFLA0KICAgICAgc3RhdGVzID0gbGlzdChpbmFjdGl2ZSA9IGxpc3Qob3BhY2l0eSA9IDEpKQ0KICAgICkNCiAgKSAlPiUNCiAgaGNfY2hhcnQoDQogICAgYmFja2dyb3VuZENvbG9yID0gIiNGRkZGRkYiLA0KICAgIHNwYWNpbmdUb3AgPSAyMCwNCiAgICBzcGFjaW5nUmlnaHQgPSAyMCwNCiAgICBzcGFjaW5nQm90dG9tID0gMjAsDQogICAgc3BhY2luZ0xlZnQgPSAyMA0KICApICU+JQ0KICBoY19jcmVkaXRzKA0KICAgIGVuYWJsZWQgPSBUUlVFLA0KICAgIHRleHQgPSAiRm9udGU6IElCR0UvQ29udGFzIE5hY2lvbmFpcy4gRWxhYm9yYcOnw6NvIHByw7NwcmlhIEliTWFjcm9CSC4iDQogICkNCg0KZ3JhZmljb19waWJfc2V0b3INCmBgYA0KDQoNCkNvbW8gb2JzZXJ2YWRvIG5vIGdyw6FmaWNvIFgsIG5vIHRlcmNlaXJvIHRyaW1lc3RyZSBkZSAyMDIwLCBvIHNldG9yIGRlIHNlcnZpw6dvcyAobGluaGEgYXp1bCBlc2N1cmEpIHJlc3BvbmRpYSBwb3IgYXByb3hpbWFkYW1lbnRlIFJcJCAxLDE1IHRyaWxow6NvIGRvIFBJQiBicmFzaWxlaXJvLCBlbnF1YW50byBhIGluZMO6c3RyaWEgKGxpbmhhIGFtYXJlbGEpIHJlcHJlc2VudGF2YSBjZXJjYSBkZSBSXCQgNDA1IGJpbGjDtWVzIGUgYSBhZ3JvcGVjdcOhcmlhIChsaW5oYSBhenVsIGNsYXJhKSBhcHJveGltYWRhbWVudGUgUlwkIDEwMCBiaWxow7Vlcy4gTm8gcGVyw61vZG8gbWFpcyByZWNlbnRlIGRhIHPDqXJpZSwgY29ycmVzcG9uZGVudGUgYW8gcXVhcnRvIHRyaW1lc3RyZSBkZSAyMDI1LCBvcyBzZXJ2acOnb3MgcGFzc2FyYW0gcGFyYSBhcHJveGltYWRhbWVudGUgUlwkMiwwNCB0cmlsaMO1ZXMsIGVucXVhbnRvIGEgaW5kw7pzdHJpYSBhdGluZ2l1IGNlcmNhIGRlIFJcJDY0OCBiaWxow7Vlcy4gQSBhZ3JvcGVjdcOhcmlhLCBwb3Igc3VhIHZleiwgcGVybWFuZWNldSBwcsOzeGltYSBkZSBSJDEwMCBiaWxow7VlcywgZW1ib3JhIGVzc2EgY29tcGFyYcOnw6NvIGRldmUgY29uc2lkZXJhciBvcyBlZmVpdG9zIGRlIHNhem9uYWxpZGFkZSBjYXJhY3RlcsOtc3RpY29zIGRvIHNldG9yLg0KDQpFbSB0ZXJtb3MgYWJzb2x1dG9zLCB0b2RvcyBvcyBzZXRvcmVzIGNyZXNjZXJhbSBhbyBsb25nbyBkbyBwZXLDrW9kbyBhbmFsaXNhZG8uIE8gbWFpcyByZWxldmFudGUsIHBvcsOpbSwgZXN0w6EgbmEgY29tcG9zacOnw6NvIHJlbGF0aXZhIGRvIFBJQi4gTyBzZXRvciBkZSBzZXJ2acOnb3MgY29udGludWEgY29uY2VudHJhbmRvIG1haXMgZGUgNjAlIGRhIGF0aXZpZGFkZSBlY29uw7RtaWNhIGJyYXNpbGVpcmEgZSBhbXBsaW91IGFpbmRhIG1haXMgc3VhIHBhcnRpY2lwYcOnw6NvIGFvIGxvbmdvIGRhIHPDqXJpZSwgZW5xdWFudG8gYSBpbmTDunN0cmlhIHBlcm1hbmVjZSByZWxhdGl2YW1lbnRlIGVzdGFnbmFkYSBlbSB0ZXJtb3MgcGVyY2VudHVhaXMuDQpPIHByb2JsZW1hIGJyYXNpbGVpcm8sIGVudMOjbywgbsOjbyDDqSBzaW1wbGVzbWVudGUgYSBwcmVkb21pbsOibmNpYSBkbyBzZXRvciBkZSBzZXJ2acOnb3MgLSBjYXJhY3RlcsOtc3RpY2EgY29tdW0gdGFtYsOpbSBhIHbDoXJpYXMgZWNvbm9taWFzLCBpbmNsdXNpdmUgZGVzZW52b2x2aWRhcy4gTyBwcm9ibGVtYSBlc3TDoSBuYSBhdXPDqm5jaWEgZGUgYXZhbsOnbyByZWxhdGl2byBkYSBpbmTDunN0cmlhIGUgbmEgbGltaXRhZGEgdHJhbnNmb3JtYcOnw6NvIGVzdHJ1dHVyYWwgZGEgZWNvbm9taWEuIEFzc2ltIGNvbW8gb2JzZXJ2YWRvIG5vIGNpY2xvIGRlIGV4cGFuc8OjbyBkZSAyMDA44oCTMjAxNCwgbyBjcmVzY2ltZW50byByZWNlbnRlIGRhIGVjb25vbWlhIGJyYXNpbGVpcmEgY29udGludWEgY29uY2VudHJhZG8gZW0gc2V0b3JlcyBxdWUgasOhIGVyYW0gcHJlZG9taW5hbnRlcyBhbnRlcmlvcm1lbnRlLCBzZW0gbXVkYW7Dp2FzIHNpZ25pZmljYXRpdmFzIG5hIGNvbXBvc2nDp8OjbyBwcm9kdXRpdmEgZG8gcGHDrXMuDQoNCkEgY29tcG9zacOnw6NvIHNldG9yaWFsIGRhIGVjb25vbWlhIGFqdWRhIGEgZW50ZW5kZXIgY29tbyBvIHBhw61zIGNyZXNjZS4gTyBpbnZlc3RpbWVudG8sIHBvciBvdXRybyBsYWRvLCBhanVkYSBhIGVudGVuZGVyIHNlIGVzc2UgY3Jlc2NpbWVudG8gcG9zc3VpIGNhcGFjaWRhZGUgZGUgc3VzdGVudGHDp8OjbyBubyBsb25nbyBwcmF6by4gTmVzc2Ugc2VudGlkbywgbyBncsOhZmljbyBYIGFwcmVzZW50YSBhIGV2b2x1w6fDo28gZGEgRm9ybWHDp8OjbyBCcnV0YSBkZSBDYXBpdGFsIEZpeG8gKEZCQ0YpIGVtIGNvbmp1bnRvIGNvbSBhIHRheGEgU2VsaWMgZW50cmUgMjAyMCBlIDIwMjUuDQoNCioqR3LDoWZpY28gMjA6KioNCg0KYGBge3IsIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQpsaWJyYXJ5KEdldEJDQkRhdGEpDQpsaWJyYXJ5KGRwbHlyKQ0KbGlicmFyeShsdWJyaWRhdGUpDQpsaWJyYXJ5KGhpZ2hjaGFydGVyKQ0KDQpmYmNmMiA8LSBkYXRhLmZyYW1lKA0KICBwZXJpb2RvID0gYygNCiAgICAiMjAyMCBUMyIsICIyMDIwIFQ0IiwNCiAgICAiMjAyMSBUMSIsICIyMDIxIFQyIiwgIjIwMjEgVDMiLCAiMjAyMSBUNCIsDQogICAgIjIwMjIgVDEiLCAiMjAyMiBUMiIsICIyMDIyIFQzIiwgIjIwMjIgVDQiLA0KICAgICIyMDIzIFQxIiwgIjIwMjMgVDIiLCAiMjAyMyBUMyIsICIyMDIzIFQ0IiwNCiAgICAiMjAyNCBUMSIsICIyMDI0IFQyIiwgIjIwMjQgVDMiLCAiMjAyNCBUNCIsDQogICAgIjIwMjUgVDEiLCAiMjAyNSBUMiIsICIyMDI1IFQzIiwgIjIwMjUgVDQiDQogICksDQogIHZhcmlhY2FvID0gYygNCiAgICAtOC44MiwgMTAuNDMsDQogICAgMTEuNjgsIDI2LjY1LCAxNC44MCwgMS43MSwNCiAgICAtNS45MSwgMS45OSwgNS4wNywgMy4yMywNCiAgICAxLjQ1LCAtMS41NSwgLTYuODQsIC00LjQyLA0KICAgIDIuNTcsIDUuMjMsIDEwLjI3LCA5LjIxLA0KICAgIDkuMDEsIDQuMTEsIDIuMzIsIC0zLjEyDQogICkNCikgJT4lDQogIG11dGF0ZSgNCiAgICBhbm8gPSBhcy5pbnRlZ2VyKHN1YnN0cihwZXJpb2RvLCAxLCA0KSksDQogICAgdHJpbSA9IGFzLmludGVnZXIoc3Vic3RyKHBlcmlvZG8sIDcsIDcpKSwNCiAgICBkYXRhID0gYXMuRGF0ZShwYXN0ZTAoYW5vLCAiLSIsIGZvcm1hdEModHJpbSAqIDMgLSAyLCB3aWR0aCA9IDIsIGZsYWcgPSAiMCIpLCAiLTE1IikpLA0KICAgIGRhdGFfbXMgPSBhcy5udW1lcmljKGFzLlBPU0lYY3QoZGF0YSwgdHogPSAiVVRDIikpICogMTAwMA0KICApDQoNCnNlbGljX3JhdyA8LSBnYmNiZF9nZXRfc2VyaWVzKA0KICBpZCA9IGMoU2VsaWMgPSA0MzIpLA0KICBmaXJzdC5kYXRlID0gIjIwMjAtMDctMDEiLA0KICBsYXN0LmRhdGUgID0gIjIwMjUtMTItMzEiLA0KICBmb3JtYXQuZGF0YSA9ICJ3aWRlIg0KKSAlPiUNCiAgcmVuYW1lKGRhdGUgPSByZWYuZGF0ZSwgc2VsaWMgPSBTZWxpYykgJT4lDQogIG11dGF0ZSh0cmltZXN0cmUgPSBmbG9vcl9kYXRlKGFzLkRhdGUoZGF0ZSksICJxdWFydGVyIikpICU+JQ0KICBncm91cF9ieSh0cmltZXN0cmUpICU+JQ0KICBzdW1tYXJpc2Uoc2VsaWMgPSBsYXN0KG5hLm9taXQoc2VsaWMpKSwgLmdyb3VwcyA9ICJkcm9wIikgJT4lDQogIG11dGF0ZShkYXRhX21zID0gYXMubnVtZXJpYyhhcy5QT1NJWGN0KHRyaW1lc3RyZSwgdHogPSAiVVRDIikpICogMTAwMCkNCg0KZGFkb3NfZmJjZiAgPC0gZmJjZjIgJT4lIHNlbGVjdCh0aW1lc3RhbXAgPSBkYXRhX21zLCB2YXJpYWNhbykNCmRhZG9zX3NlbGljIDwtIHNlbGljX3JhdyAlPiUgc2VsZWN0KHRpbWVzdGFtcCA9IGRhdGFfbXMsIHNlbGljKQ0KDQpncmFmaWNvX2ZiY2Zfc2VsaWMgPC0gaGlnaGNoYXJ0KCkgJT4lDQogIGhjX2NoYXJ0KA0KICAgIGJhY2tncm91bmRDb2xvciA9ICIjRkZGRkZGIiwNCiAgICBzcGFjaW5nVG9wID0gMjAsDQogICAgc3BhY2luZ1JpZ2h0ID0gMjAsDQogICAgc3BhY2luZ0JvdHRvbSA9IDIwLA0KICAgIHNwYWNpbmdMZWZ0ID0gMjANCiAgKSAlPiUNCiAgaGNfdGl0bGUoDQogICAgdGV4dCA9ICJGb3JtYcOnw6NvIEJydXRhIGRlIENhcGl0YWwgRml4byBlIFRheGEgU2VsaWMgLSBCcmFzaWwiLA0KICAgIGFsaWduID0gImNlbnRlciIsDQogICAgc3R5bGUgPSBsaXN0KGZvbnRTaXplID0gIjE4cHgiLCBmb250V2VpZ2h0ID0gImJvbGQiLCBjb2xvciA9ICIjMDIwMjNDIikNCiAgKSAlPiUNCiAgaGNfc3VidGl0bGUoDQogICAgdGV4dCA9ICJGQkNGOiB2YXJpYcOnw6NvIGFudWFsICglKSB8IFNlbGljOiAlIGEuYS4tIDNUMjAyMCBhIDRUMjAyNSIsDQogICAgYWxpZ24gPSAiY2VudGVyIiwNCiAgICBzdHlsZSA9IGxpc3QoZm9udFNpemUgPSAiMTJweCIsIGNvbG9yID0gIiM2NjY2NjYiKQ0KICApICU+JQ0KICBoY19hZGRfc2VyaWVzKA0KICAgIGRhdGEgPSBsaXN0X3BhcnNlMihkYWRvc19mYmNmKSwNCiAgICB0eXBlID0gImNvbHVtbiIsDQogICAgbmFtZSA9ICJGQkNGIFZhcmlhw6fDo28gYW51YWwgKCUpIiwNCiAgICBjb2xvciA9ICIjRkVCMDE1IiwNCiAgICB5QXhpcyA9IDAsDQogICAgcG9pbnRQYWRkaW5nID0gMC4wNSwNCiAgICBncm91cFBhZGRpbmcgPSAwLjA4LA0KICAgIGJvcmRlcldpZHRoID0gMA0KICApICU+JQ0KICBoY19hZGRfc2VyaWVzKA0KICAgIGRhdGEgPSBsaXN0X3BhcnNlMihkYWRvc19zZWxpYyksDQogICAgdHlwZSA9ICJzcGxpbmUiLA0KICAgIG5hbWUgPSAiU2VsaWMgKCUgYS5hLikiLA0KICAgIGNvbG9yID0gIiMwMjAyM0MiLA0KICAgIGxpbmVXaWR0aCA9IDMsDQogICAgbWFya2VyID0gbGlzdChlbmFibGVkID0gRkFMU0UpLA0KICAgIHlBeGlzID0gMQ0KICApICU+JQ0KICBoY194QXhpcygNCiAgICB0eXBlID0gImRhdGV0aW1lIiwNCiAgICB0aXRsZSA9IGxpc3QodGV4dCA9IE5VTEwpLA0KICAgIGxpbmVDb2xvciA9ICIjRDlEOUQ5IiwNCiAgICB0aWNrQ29sb3IgPSAiI0Q5RDlEOSIsDQogICAgdGlja0xlbmd0aCA9IDAsDQogICAgbGFiZWxzID0gbGlzdChzdHlsZSA9IGxpc3QoY29sb3IgPSAiIzQ0NDQ0NCIsIGZvbnRTaXplID0gIjExcHgiKSkNCiAgKSAlPiUNCiAgaGNfeUF4aXNfbXVsdGlwbGVzKA0KICAgIGxpc3QoDQogICAgICB0aXRsZSA9IGxpc3QodGV4dCA9ICJGQkNGIFZhcmlhw6fDo28gYW51YWwgKCUpIiwNCiAgICAgICAgICAgICAgICAgICBzdHlsZSA9IGxpc3QoY29sb3IgPSAiIzQ0NDQ0NCIsIGZvbnRTaXplID0gIjExcHgiKSksDQogICAgICBsYWJlbHMgPSBsaXN0KHN0eWxlID0gbGlzdChjb2xvciA9ICIjNDQ0NDQ0IiksIGZvcm1hdCA9ICJ7dmFsdWV9IiksDQogICAgICBvcHBvc2l0ZSA9IEZBTFNFLA0KICAgICAgZ3JpZExpbmVDb2xvciA9ICIjRUVFRUVFIiwNCiAgICAgIHBsb3RMaW5lcyA9IGxpc3QoDQogICAgICAgIGxpc3QodmFsdWUgPSAwLCBjb2xvciA9ICIjOUU5RTlFIiwgd2lkdGggPSAxLCB6SW5kZXggPSA1LCBkYXNoU3R5bGUgPSAiU2hvcnREYXNoIikNCiAgICAgICkNCiAgICApLA0KICAgIGxpc3QoDQogICAgICB0aXRsZSA9IGxpc3QodGV4dCA9ICJTZWxpYyAoJSBhLmEuKSIsDQogICAgICAgICAgICAgICAgICAgc3R5bGUgPSBsaXN0KGNvbG9yID0gIiM0NDQ0NDQiLCBmb250U2l6ZSA9ICIxMXB4IikpLA0KICAgICAgbGFiZWxzID0gbGlzdChzdHlsZSA9IGxpc3QoY29sb3IgPSAiIzQ0NDQ0NCIpLCBmb3JtYXQgPSAie3ZhbHVlfSIpLA0KICAgICAgb3Bwb3NpdGUgPSBUUlVFLA0KICAgICAgZ3JpZExpbmVXaWR0aCA9IDAsDQogICAgICBtaW4gPSAwLA0KICAgICAgbWF4ID0gMTgNCiAgICApDQogICkgJT4lDQogIGhjX3Rvb2x0aXAoDQogICAgc2hhcmVkID0gVFJVRSwNCiAgICB2YWx1ZURlY2ltYWxzID0gMiwNCiAgICB2YWx1ZVN1ZmZpeCA9ICIlIiwNCiAgICBiYWNrZ3JvdW5kQ29sb3IgPSAiI0ZGRkZGRiIsDQogICAgYm9yZGVyQ29sb3IgPSAiI0Q5RDlEOSIsDQogICAgYm9yZGVyUmFkaXVzID0gOCwNCiAgICBzaGFkb3cgPSBGQUxTRSwNCiAgICBzdHlsZSA9IGxpc3QoZm9udFNpemUgPSAiMTJweCIpDQogICkgJT4lDQogIGhjX2xlZ2VuZCgNCiAgICBlbmFibGVkID0gVFJVRSwNCiAgICBhbGlnbiA9ICJjZW50ZXIiLA0KICAgIHZlcnRpY2FsQWxpZ24gPSAiYm90dG9tIiwNCiAgICBsYXlvdXQgPSAiaG9yaXpvbnRhbCIsDQogICAgaXRlbVN0eWxlID0gbGlzdChjb2xvciA9ICIjNDQ0NDQ0IiwgZm9udFdlaWdodCA9ICJub3JtYWwiLCBmb250U2l6ZSA9ICIxMnB4IikNCiAgKSAlPiUNCiAgaGNfcGxvdE9wdGlvbnMoDQogICAgc2VyaWVzID0gbGlzdCgNCiAgICAgIGFuaW1hdGlvbiA9IEZBTFNFLA0KICAgICAgc3RhdGVzID0gbGlzdChpbmFjdGl2ZSA9IGxpc3Qob3BhY2l0eSA9IDEpKQ0KICAgICkNCiAgKSAlPiUNCiAgaGNfY3JlZGl0cygNCiAgICBlbmFibGVkID0gVFJVRSwNCiAgICB0ZXh0ID0gIkZvbnRlOiBJQkdFL0NvbnRhcyBOYWNpb25haXM7IEJDQiAoU0dTIDQzMikuIEVsYWJvcmHDp28gcHLDs3ByaWEgSWJNYWNyb0JILiIsDQogICAgc3R5bGUgPSBsaXN0KGZvbnRTaXplID0gIjEwcHgiLCBjb2xvciA9ICIjNzc3Nzc3IikNCiAgKQ0KDQpncmFmaWNvX2ZiY2Zfc2VsaWMNCmBgYA0KDQpDb21vIG9ic2VydmFkbyBubyBncsOhZmljbyBYLCBhIEZCQ0YgY29udGludWEgYXByZXNlbnRhbmRvIGZvcnRlIG9zY2lsYcOnw6NvIGFvIGxvbmdvIGRvIHBlcsOtb2RvLCBzZW0gZXN0YWJlbGVjZXIgdW1hIHRyYWpldMOzcmlhIGNvbnNpc3RlbnRlIGRlIGNyZXNjaW1lbnRvLiBNZXNtbyBub3MgbW9tZW50b3MgZGUgcmVjdXBlcmHDp8OjbyBkbyBpbnZlc3RpbWVudG8sIG8gbW92aW1lbnRvIG7Do28gc2Ugc3VzdGVudGEgcG9yIGxvbmdvcyBwZXLDrW9kb3MsIHJlcHJvZHV6aW5kbyB1bSBwYWRyw6NvIGrDoSBvYnNlcnZhZG8gZW0gY2ljbG9zIGFudGVyaW9yZXMgZGEgZWNvbm9taWEgYnJhc2lsZWlyYS4NCg0KTyBwaWNvIGRhIHPDqXJpZSBvY29ycmV1IGVtIGFicmlsIGRlIDIwMjEsIHF1YW5kbyBhIHZhcmlhw6fDo28gYW51YWwgZGEgRkJDRiBhdGluZ2l1IGFwcm94aW1hZGFtZW50ZSAyNiwyNSUuIE5vIGVudGFudG8sIG8gbW92aW1lbnRvIHBlcmRldSBmb3LDp2EgcmFwaWRhbWVudGUsIGNoZWdhbmRvIGEgLTYsODQlIGVtIGp1bmhvIGRlIDIwMjMuIE1lc21vIG5vcyBkYWRvcyBtYWlzIHJlY2VudGVzLCBhIGluc3RhYmlsaWRhZGUgcGVybWFuZWNlIGV2aWRlbnRlOiBlbSBqdWxobyBkZSAyMDI1LCBhIEZCQ0YgcmVnaXN0cmF2YSBjcmVzY2ltZW50byBkZSBhcHJveGltYWRhbWVudGUgMiwzMiUsIG1hcyB2b2x0b3UgcGFyYSAtMywxMiUgZW0gb3V0dWJybyBkbyBtZXNtbyBhbm8uIEFzc2ltLCBhIHByaW5jaXBhbCBjYXJhY3RlcsOtc3RpY2Egb2JzZXJ2YWRhIG5hIHPDqXJpZSDDqSBqdXN0YW1lbnRlIGEgYXVzw6puY2lhIGRlIHVtYSB0cmFqZXTDs3JpYSBzdXN0ZW50YWRhIGRlIGludmVzdGltZW50by4gQSBGQkNGIGFwcmVzZW50YSBtb21lbnRvcyBwb250dWFpcyBkZSByZWN1cGVyYcOnw6NvLCBtYXMgc2VtIGNvbnRpbnVpZGFkZSBzdWZpY2llbnRlIHBhcmEgY29uc29saWRhciB1bSBjaWNsbyBjb25zaXN0ZW50ZSBkZSBleHBhbnPDo28gZG8gaW52ZXN0aW1lbnRvIHByb2R1dGl2byBubyBwYcOtcy4NCg0KUGFydGUgZGVzc2EgZGluw6JtaWNhIHBvZGUgc2VyIGFzc29jaWFkYSBhbyBwYXRhbWFyIGVsZXZhZG8gZGEgdGF4YSBTZWxpYyBubyBCcmFzaWwuIEVtIGFsZ3VucyBtb21lbnRvcyBkbyBncsOhZmljbywgw6kgcG9zc8OtdmVsIG9ic2VydmFyIHF1ZSBhIHJlZHXDp8OjbyBkb3MganVyb3Mgw6kgYWNvbXBhbmhhZGEgcG9yIG1lbGhvcmEgZGEgRm9ybWHDp8OjbyBCcnV0YSBkZSBDYXBpdGFsIEZpeG8uIE5vIGVudGFudG8sIG1lc21vIGR1cmFudGUgZXNzZXMgcGVyw61vZG9zIGRlIHF1ZWRhLCBhIHRheGEgYsOhc2ljYSBkZSBqdXJvcyBwZXJtYW5lY2UgZW0gbsOtdmVpcyBlbGV2YWRvcy4gRW0gb3V0cmFzIHBhbGF2cmFzLCBtdWl0YXMgdmV6ZXMgYSBTZWxpYyByZWR1eiBkZSAxNSUgcGFyYSAxNCUsIG1hcyBjb250aW51YSByZXByZXNlbnRhbmRvIHVtIGN1c3RvIGFsdG8gcGFyYSBkZWNpc8O1ZXMgZGUgaW52ZXN0aW1lbnRvIHByb2R1dGl2by4NCg0KU29tYWRvIGEgaXNzbywgbyBhbWJpZW50ZSBkZSBpbmNlcnRlemEgZmlzY2FsIGUgZWNvbsO0bWljYSByZWR1eiBhaW5kYSBtYWlzIG9zIGluY2VudGl2b3MgYW8gaW52ZXN0aW1lbnRvLiBPIHJlc3VsdGFkbyDDqSB1bWEgdHJhamV0w7NyaWEgZGUgaW52ZXN0aW1lbnRvIGluc3TDoXZlbCBlIG1hcmNhZGEgcG9yIGZvcnRlcyBvc2NpbGHDp8O1ZXMsIHJlcHJvZHV6aW5kbyB1bSBwYWRyw6NvIHNlbWVsaGFudGUgYW8gb2JzZXJ2YWRvIG5vIGNpY2xvIGRlIGV4cGFuc8OjbyBkZSAyMDA44oCTMjAxNC4NCg0KIyMgMy4yIE1lcmNhZG8gZGUgdHJhYmFsaG8gZSBwcm9kdXRpdmlkYWRlDQoNCkEgYW7DoWxpc2UgZG8gbWVyY2FkbyBkZSB0cmFiYWxobyBubyBjaWNsbyBhdHVhbCBleGlnZSB1bSBvbGhhciBwYXJhIGFsw6ltIGRhIHRheGEgZGUgZGVzb2N1cGHDp8Ojby4gRW1ib3JhIGVzc2Egc2VqYSBhIG3DqXRyaWNhIG1haXMgY29uaGVjaWRhIGUgdXRpbGl6YWRhLCBzdWEgcXVlZGEgaXNvbGFkYW1lbnRlIG7Do28gw6kgc3VmaWNpZW50ZSBwYXJhIGluZGljYXIsIHBvciBzaSBzw7MsIHVtIG1lcmNhZG8gZGUgdHJhYmFsaG8gc2F1ZMOhdmVsIG91IHN1c3RlbnTDoXZlbC4gUG9yIGlzc28sIMOpIGltcG9ydGFudGUgYW5hbGlzw6EtbGEgZW0gY29uanVudG8gY29tIGEgdGF4YSBkZSBzdWJ1dGlsaXphw6fDo28sIHF1ZSBvZmVyZWNlIHVtYSBsZWl0dXJhIG1haXMgYW1wbGEgZGFzIGNvbmRpw6fDtWVzIGVmZXRpdmFzIGRhIGVjb25vbWlhLiANCg0KQSB0YXhhIGRlIHN1YnV0aWxpemHDp8OjbyBlbmdsb2JhIG7Do28gYXBlbmFzIGFzIHBlc3NvYXMgZGVzb2N1cGFkYXMsIG1hcyB0YW1iw6ltIGFxdWVsYXMgcXVlIHRyYWJhbGhhbSBtZW5vcyBob3JhcyBkbyBxdWUgZ29zdGFyaWFtIC0gYSBjaGFtYWRhIHN1Ym9jdXBhw6fDo28gcG9yIGluc3VmaWNpw6puY2lhIGRlIGhvcmFzIC0gZSBhIGZvcsOnYSBkZSB0cmFiYWxobyBwb3RlbmNpYWwsIGNvbXBvc3RhIHBvciBwZXNzb2FzIHF1ZSBnb3N0YXJpYW0gZGUgdHJhYmFsaGFyLCBtYXMgbsOjbyBwcm9jdXJhcmFtIGVtcHJlZ28gcG9yIGRpZmVyZW50ZXMgbW90aXZvcywgY29tbyBkaWZpY3VsZGFkZXMgZGUgZGVzbG9jYW1lbnRvLCBhdXPDqm5jaWEgZGUgY3JlY2hlIHBhcmEgb3MgZmlsaG9zIG91IGluY29tcGF0aWJpbGlkYWRlIGRlIGhvcsOhcmlvcyBjb20gYSBmYWN1bGRhZGUuIFBvciByZXVuaXIgZXNzYXMgdHLDqnMgZGltZW5zw7VlcywgYSB0YXhhIGRlIHN1YnV0aWxpemHDp8OjbyBmdW5jaW9uYSBjb21vIHVtIHRlcm3DtG1ldHJvIG1haXMgc2Vuc8OtdmVsIGRhcyBjb25kacOnw7VlcyBkbyBtZXJjYWRvIGRlIHRyYWJhbGhvLg0KDQpBIGFuw6FsaXNlIGNvbmp1bnRhIGRvcyBkb2lzIGluZGljYWRvcmVzIMOpIGltcG9ydGFudGUgcG9ycXVlIGRpZmVyZW50ZXMgY29tYmluYcOnw7VlcyBlbnRyZSBlbGVzIHJldmVsYW0gZXN0YWRvcyBkaXN0aW50b3MgZGEgZWNvbm9taWEuIEVtIGFsZ3VucyBwZXLDrW9kb3MgZGUgcmVjZXNzw6NvLCBwb3IgZXhlbXBsbywgYSB0YXhhIGRlIGRlc29jdXBhw6fDo28gcG9kZSBwZXJtYW5lY2VyIHJlbGF0aXZhbWVudGUgYmFpeGEsIHRyYW5zbWl0aW5kbyBhIGltcHJlc3PDo28gZGUgdW0gbWVyY2FkbyBkZSB0cmFiYWxobyBhcXVlY2lkby4gRW50cmV0YW50bywgc2UgYSBzdWJ1dGlsaXphw6fDo28gcGVybWFuZWNlciBlbGV2YWRhLCBvIHF1YWRybyByZWFsIGFpbmRhIGluZGljYSBhIGV4aXN0w6puY2lhIGRlIHRyYWJhbGhhZG9yZXMgc3Vib2N1cGFkb3Mgb3UgZm9yYSBkYSBmb3LDp2EgZGUgdHJhYmFsaG8sIG1hcyBhaW5kYSBkaXNwb27DrXZlaXMgcGFyYSB0cmFiYWxoYXIuDQoNCioqR3LDoWZpY28gMjE6KioNCg0KYGBge3IsIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQpsaWJyYXJ5KHJlYWR4bCkNCmxpYnJhcnkoZHBseXIpDQpsaWJyYXJ5KHN0cmluZ3IpDQpsaWJyYXJ5KGhpZ2hjaGFydGVyKQ0KDQpyYXdfZGVzb2MgPC0gcmVhZF9leGNlbCgiQzovVXNlcnMvcm9iZXIvT25lRHJpdmUvSWJNYWNyby90YWJlbGE0MDk5Lnhsc3giKQ0KdHJpbWVzdHJlc19kZXNvYyA8LSBhcy5jaGFyYWN0ZXIocmF3X2Rlc29jWzMsIC0xXSkNCnZhbG9yZXNfZGVzb2MgPC0gYXMubnVtZXJpYyhnc3ViKCIsIiwgIi4iLCBhcy5jaGFyYWN0ZXIocmF3X2Rlc29jWzQsIC0xXSkpKQ0KDQpkZXNvYyA8LSBkYXRhLmZyYW1lKA0KICB0cmltZXN0cmUgPSB0cmltZXN0cmVzX2Rlc29jLA0KICB2YWxvciA9IHZhbG9yZXNfZGVzb2MNCikgJT4lDQogIGZpbHRlcighaXMubmEodmFsb3IpKSAlPiUNCiAgbXV0YXRlKA0KICAgIGFubyAgPSBhcy5pbnRlZ2VyKHN0cl9leHRyYWN0KHRyaW1lc3RyZSwgIlxcZHs0fSIpKSwNCiAgICB0cmltID0gYXMuaW50ZWdlcihzdHJfZXh0cmFjdCh0cmltZXN0cmUsICJeXFxkIikpDQogICkgJT4lDQogIGZpbHRlcighaXMubmEoYW5vKSwgIWlzLm5hKHRyaW0pLCB0cmltID49IDEsIHRyaW0gPD0gNCkgJT4lDQogIG11dGF0ZSgNCiAgICBkYXRhID0gYXMuRGF0ZShwYXN0ZTAoYW5vLCAiLSIsIGZvcm1hdEModHJpbSAqIDMgLSAyLCB3aWR0aCA9IDIsIGZsYWcgPSAiMCIpLCAiLTE1IikpLA0KICAgIGRhdGFfbXMgPSBhcy5udW1lcmljKGFzLlBPU0lYY3QoZGF0YSwgdHogPSAiVVRDIikpICogMTAwMA0KICApICU+JQ0KICBhcnJhbmdlKGRhdGEpDQoNCnJhd19zdWJ1dGlsIDwtIHJlYWRfZXhjZWwoIkM6L1VzZXJzL3JvYmVyL09uZURyaXZlL0liTWFjcm8vZGVzb2N1cC54bHN4IikNCnRyaW1lc3RyZXNfc3ViIDwtIGFzLmNoYXJhY3RlcihyYXdfc3VidXRpbFszLCAtMV0pDQp2YWxvcmVzX3N1YiA8LSBhcy5udW1lcmljKGdzdWIoIiwiLCAiLiIsIGFzLmNoYXJhY3RlcihyYXdfc3VidXRpbFs0LCAtMV0pKSkNCg0Kc3VidXRpbCA8LSBkYXRhLmZyYW1lKA0KICB0cmltZXN0cmUgPSB0cmltZXN0cmVzX3N1YiwNCiAgdmFsb3IgPSB2YWxvcmVzX3N1Yg0KKSAlPiUNCiAgZmlsdGVyKCFpcy5uYSh2YWxvcikpICU+JQ0KICBtdXRhdGUoDQogICAgYW5vICA9IGFzLmludGVnZXIoc3RyX2V4dHJhY3QodHJpbWVzdHJlLCAiXFxkezR9IikpLA0KICAgIHRyaW0gPSBhcy5pbnRlZ2VyKHN0cl9leHRyYWN0KHRyaW1lc3RyZSwgIl5cXGQiKSkNCiAgKSAlPiUNCiAgZmlsdGVyKCFpcy5uYShhbm8pLCAhaXMubmEodHJpbSksIHRyaW0gPj0gMSwgdHJpbSA8PSA0KSAlPiUNCiAgbXV0YXRlKA0KICAgIGRhdGEgPSBhcy5EYXRlKHBhc3RlMChhbm8sICItIiwgZm9ybWF0Qyh0cmltICogMyAtIDIsIHdpZHRoID0gMiwgZmxhZyA9ICIwIiksICItMTUiKSksDQogICAgZGF0YV9tcyA9IGFzLm51bWVyaWMoYXMuUE9TSVhjdChkYXRhLCB0eiA9ICJVVEMiKSkgKiAxMDAwDQogICkgJT4lDQogIGFycmFuZ2UoZGF0YSkNCg0KZGFkb3NfZGVzb2MgPC0gZGVzb2MgJT4lIHNlbGVjdCh0aW1lc3RhbXAgPSBkYXRhX21zLCB2YWxvcikNCmRhZG9zX3N1YiAgIDwtIHN1YnV0aWwgJT4lIHNlbGVjdCh0aW1lc3RhbXAgPSBkYXRhX21zLCB2YWxvcikNCg0KZ3JhZmljb190cmFiYWxobyA8LSBoaWdoY2hhcnQoKSAlPiUNCiAgaGNfY2hhcnQoDQogICAgYmFja2dyb3VuZENvbG9yID0gIiNGRkZGRkYiLA0KICAgIHNwYWNpbmdUb3AgPSAyMCwgc3BhY2luZ1JpZ2h0ID0gMjAsDQogICAgc3BhY2luZ0JvdHRvbSA9IDIwLCBzcGFjaW5nTGVmdCA9IDIwDQogICkgJT4lDQogIGhjX3RpdGxlKA0KICAgIHRleHQgPSAiTWVyY2FkbyBkZSBUcmFiYWxobyDigJQgQnJhc2lsIiwNCiAgICBhbGlnbiA9ICJjZW50ZXIiLA0KICAgIHN0eWxlID0gbGlzdChmb250U2l6ZSA9ICIxOHB4IiwgZm9udFdlaWdodCA9ICJib2xkIiwgY29sb3IgPSAiIzAyMDIzQyIpDQogICkgJT4lDQogIGhjX3N1YnRpdGxlKA0KICAgIHRleHQgPSAiVGF4YSBkZSBkZXNvY3VwYcOnw6NvIGUgdGF4YSBkZSBzdWJ1dGlsaXphw6fDo28g4oCUIFBOQUQgQ29udMOtbnVhIHRyaW1lc3RyYWwiLA0KICAgIGFsaWduID0gImNlbnRlciIsDQogICAgc3R5bGUgPSBsaXN0KGZvbnRTaXplID0gIjEycHgiLCBjb2xvciA9ICIjNjY2NjY2IikNCiAgKSAlPiUNCiAgaGNfYWRkX3NlcmllcygNCiAgICBkYXRhID0gbGlzdF9wYXJzZTIoZGFkb3NfZGVzb2MpLA0KICAgIHR5cGUgPSAibGluZSIsDQogICAgbmFtZSA9ICJUYXhhIGRlIGRlc29jdXBhw6fDo28iLA0KICAgIGNvbG9yID0gIiMwMjAyM0MiLA0KICAgIGxpbmVXaWR0aCA9IDMsDQogICAgbWFya2VyID0gbGlzdChlbmFibGVkID0gRkFMU0UpLA0KICAgIHRvb2x0aXAgPSBsaXN0KHZhbHVlRGVjaW1hbHMgPSAxLCB2YWx1ZVN1ZmZpeCA9ICIlIikNCiAgKSAlPiUNCiAgaGNfYWRkX3NlcmllcygNCiAgICBkYXRhID0gbGlzdF9wYXJzZTIoZGFkb3Nfc3ViKSwNCiAgICB0eXBlID0gImxpbmUiLA0KICAgIG5hbWUgPSAiVGF4YSBkZSBzdWJ1dGlsaXphw6fDo28iLA0KICAgIGNvbG9yID0gIiNGRUIwMTUiLA0KICAgIGxpbmVXaWR0aCA9IDMsDQogICAgbWFya2VyID0gbGlzdChlbmFibGVkID0gRkFMU0UpLA0KICAgIHRvb2x0aXAgPSBsaXN0KHZhbHVlRGVjaW1hbHMgPSAxLCB2YWx1ZVN1ZmZpeCA9ICIlIikNCiAgKSAlPiUNCiAgaGNfeEF4aXMoDQogICAgdHlwZSA9ICJkYXRldGltZSIsDQogICAgdGl0bGUgPSBsaXN0KHRleHQgPSBOVUxMKSwNCiAgICBsaW5lQ29sb3IgPSAiI0Q5RDlEOSIsDQogICAgdGlja0NvbG9yID0gIiNEOUQ5RDkiLA0KICAgIHRpY2tMZW5ndGggPSAwLA0KICAgIGxhYmVscyA9IGxpc3Qoc3R5bGUgPSBsaXN0KGNvbG9yID0gIiM0NDQ0NDQiLCBmb250U2l6ZSA9ICIxMXB4IikpDQogICkgJT4lDQogIGhjX3lBeGlzKA0KICAgIHRpdGxlID0gbGlzdCh0ZXh0ID0gIiglKSIsDQogICAgICAgICAgICAgICAgIHN0eWxlID0gbGlzdChjb2xvciA9ICIjNDQ0NDQ0IiwgZm9udFNpemUgPSAiMTFweCIpKSwNCiAgICBncmlkTGluZUNvbG9yID0gIiNFRUVFRUUiLA0KICAgIGxhYmVscyA9IGxpc3Qoc3R5bGUgPSBsaXN0KGNvbG9yID0gIiM0NDQ0NDQiKSwgZm9ybWF0ID0gInt2YWx1ZX0lIikNCiAgKSAlPiUNCiAgaGNfdG9vbHRpcCgNCiAgICBzaGFyZWQgPSBUUlVFLA0KICAgIGNyb3NzaGFpcnMgPSBUUlVFLA0KICAgIGJhY2tncm91bmRDb2xvciA9ICIjRkZGRkZGIiwNCiAgICBib3JkZXJDb2xvciA9ICIjRDlEOUQ5IiwNCiAgICBib3JkZXJSYWRpdXMgPSA4LA0KICAgIHNoYWRvdyA9IEZBTFNFLA0KICAgIHN0eWxlID0gbGlzdChmb250U2l6ZSA9ICIxMnB4IikNCiAgKSAlPiUNCiAgaGNfbGVnZW5kKA0KICAgIGVuYWJsZWQgPSBUUlVFLA0KICAgIGFsaWduID0gImNlbnRlciIsDQogICAgdmVydGljYWxBbGlnbiA9ICJib3R0b20iLA0KICAgIGxheW91dCA9ICJob3Jpem9udGFsIiwNCiAgICBpdGVtU3R5bGUgPSBsaXN0KGNvbG9yID0gIiM0NDQ0NDQiLCBmb250V2VpZ2h0ID0gIm5vcm1hbCIsIGZvbnRTaXplID0gIjEycHgiKQ0KICApICU+JQ0KICBoY19wbG90T3B0aW9ucygNCiAgICBzZXJpZXMgPSBsaXN0KA0KICAgICAgYW5pbWF0aW9uID0gRkFMU0UsDQogICAgICBzdGF0ZXMgPSBsaXN0KGluYWN0aXZlID0gbGlzdChvcGFjaXR5ID0gMSkpDQogICAgKQ0KICApICU+JQ0KICBoY19jcmVkaXRzKA0KICAgIGVuYWJsZWQgPSBUUlVFLA0KICAgIHRleHQgPSAiRm9udGU6IElCR0UvUE5BRCBDb250w61udWEuIEVsYWJvcmHDp8OjbyBwcsOzcHJpYSBJYk1hY3JvQkguIiwNCiAgICBzdHlsZSA9IGxpc3QoZm9udFNpemUgPSAiMTBweCIsIGNvbG9yID0gIiM3Nzc3NzciKQ0KICApDQoNCmdyYWZpY29fdHJhYmFsaG8NCmBgYA0KDQoNCk5vIGNhc28gYnJhc2lsZWlybyByZWNlbnRlLCBwb3LDqW0sIG8gbW92aW1lbnRvIG9ic2VydmFkbyBmb2kgZGUgcXVlZGEgc2ltdWx0w6JuZWEgdGFudG8gZGEgdGF4YSBkZSBkZXNvY3VwYcOnw6NvIHF1YW50byBkYSB0YXhhIGRlIHN1YnV0aWxpemHDp8Ojby4gRW0ganVsaG8gZGUgMjAyMCwgYSB0YXhhIGRlIGRlc29jdXBhw6fDo28gZW5jb250cmF2YS1zZSBlbSAxNCw5JSwgZW5xdWFudG8gYSB0YXhhIGRlIHN1YnV0aWxpemHDp8OjbyBhdGluZ2lhIDMwLDQlLiBFbSBvdXR1YnJvIGRlIDIwMjUsIGFtYm9zIG9zIGluZGljYWRvcmVzIGhhdmlhbSByZWN1YWRvIGRlIGZvcm1hIGV4cHJlc3NpdmE6IGEgZGVzb2N1cGHDp8OjbyBjaGVnb3UgYSA1LDElIGUgYSBzdWJ1dGlsaXphw6fDo28gYSAxMyw0JS4NCg0KQSB0cmFqZXTDs3JpYSBkZSBxdWVkYSDDqSBldmlkZW50ZSBuYXMgZHVhcyBzw6lyaWVzLCByZWZsZXRpbmRvIHVtYSByZWR1w6fDo28gY29uc2lzdGVudGUgZG8gZGVzZW1wcmVnbyBlIGRhIGZvcsOnYSBkZSB0cmFiYWxobyBzdWJ1dGlsaXphZGEgYW8gbG9uZ28gZG8gcGVyw61vZG8uIEVudHJldGFudG8sIG5vIGNhc28gYnJhc2lsZWlybyBhdHVhbCwgZXNzYSBjb25maWd1cmHDp8OjbyBuw6NvIMOpIG5lY2Vzc2FyaWFtZW50ZSBwb3NpdGl2YS4gQXMgZHVhcyB0YXhhcyBlbmNvbnRyYW0tc2Ugc2ltdWx0YW5lYW1lbnRlIGVtIG7DrXZlaXMgbXVpdG8gYmFpeG9zLCBpbmRpY2FuZG8gcXVlIGjDoSBwb3VjYSBmb2xnYSBkaXNwb27DrXZlbCBubyBtZXJjYWRvIGRlIHRyYWJhbGhvLiBFbSBvdXRyYXMgcGFsYXZyYXMsIGdyYW5kZSBwYXJ0ZSBkYXMgcGVzc29hcyBxdWUgcG9kZXJpYW0gc2VyIGluY29ycG9yYWRhcyBhbyBtZXJjYWRvIGrDoSBzZSBlbmNvbnRyYSBvY3VwYWRhIG91IHByb2N1cmFuZG8gZW1wcmVnbyBhdGl2YW1lbnRlLg0KDQpFc3NlIGNlbsOhcmlvIHRlbmRlIGEgZ2VyYXIgcHJlc3PDtWVzIHNhbGFyaWFpcywgcXVlIHBvc3Rlcmlvcm1lbnRlIHBvZGVtIHNlIHRyYWR1emlyIGVtIHByZXNzw7VlcyBpbmZsYWNpb27DoXJpYXMsIGRpZmljdWx0YW5kbyBhIGNvbmR1w6fDo28gZGEgcG9sw610aWNhIG1vbmV0w6FyaWEgZSBpbXBvbmRvIGxpbWl0ZXMgYWRpY2lvbmFpcyBhbyBjcmVzY2ltZW50byBlY29uw7RtaWNvLiBFbSBlY29ub21pYXMgY29tIGdhbmhvcyByb2J1c3RvcyBkZSBwcm9kdXRpdmlkYWRlLCB1bSBtZXJjYWRvIGRlIHRyYWJhbGhvIGFxdWVjaWRvIHBvZGUgc2VyIHN1c3RlbnRhZG8gcG9yIGF1bWVudG9zIGRhIGNhcGFjaWRhZGUgcHJvZHV0aXZhLiBObyBjYXNvIGJyYXNpbGVpcm8sIGNvbnR1ZG8sIGVzc2EgcHJlb2N1cGHDp8OjbyBzZSB0b3JuYSBtYWlzIHJlbGV2YW50ZSBqdXN0YW1lbnRlIHBvcnF1ZSBvIGRlc2VtcGVuaG8gZGEgcHJvZHV0aXZpZGFkZSBwZXJtYW5lY2UgbGltaXRhZG8uDQoNCk5lc3NlIHNlbnRpZG8sIG8gZ3LDoWZpY28gMjIgYXByZXNlbnRhIGEgZXZvbHXDp8OjbyByZWNlbnRlIGRhIFByb2R1dGl2aWRhZGUgVG90YWwgZG9zIEZhdG9yZXMgKFBURikuDQoNCioqR3LDoWZpY28gMjI6KioNCg0KYGBge3IsIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQpsaWJyYXJ5KGRwbHlyKQ0KbGlicmFyeShoaWdoY2hhcnRlcikNCg0KcHRmX3RyaW0gPC0gZGF0YS5mcmFtZSgNCiAgcGVyaW9kbyA9IGMoDQogICAgIjIwMjBxMyIsIjIwMjBxNCIsDQogICAgIjIwMjFxMSIsIjIwMjFxMiIsIjIwMjFxMyIsIjIwMjFxNCIsDQogICAgIjIwMjJxMSIsIjIwMjJxMiIsIjIwMjJxMyIsIjIwMjJxNCIsDQogICAgIjIwMjNxMSIsIjIwMjNxMiIsIjIwMjNxMyIsIjIwMjNxNCIsDQogICAgIjIwMjRxMSIsIjIwMjRxMiIsIjIwMjRxMyIsIjIwMjRxNCIsDQogICAgIjIwMjVxMSIsIjIwMjVxMiIsIjIwMjVxMyIsIjIwMjVxNCINCiAgKSwNCiAgZWZldGl2YXMgPSBjKA0KICAgIDkyLjAsIDg4LjQsDQogICAgODcuNSwgODcuMywgODUuNSwgODQuNCwNCiAgICA4NC42LCA4NC40LCA4NC4zLCA4NS4wLA0KICAgIDg2LjEsIDg1LjcsIDg1LjQsIDg0LjksDQogICAgODQuMywgODQuNSwgODQuNCwgODMuOCwNCiAgICA4NC45LCA4My44LCA4My44LCA4My45DQogICkNCikgJT4lDQogIG11dGF0ZSgNCiAgICBhbm8gPSBhcy5pbnRlZ2VyKHN1YnN0cihwZXJpb2RvLCAxLCA0KSksDQogICAgdHJpbSA9IGFzLmludGVnZXIoc3Vic3RyKHBlcmlvZG8sIDYsIDYpKSwNCiAgICBkYXRhID0gYXMuRGF0ZShwYXN0ZTAoYW5vLCAiLSIsIGZvcm1hdEModHJpbSAqIDMgLSAyLCB3aWR0aCA9IDIsIGZsYWcgPSAiMCIpLCAiLTE1IikpLA0KICAgIGRhdGFfbXMgPSBhcy5udW1lcmljKGFzLlBPU0lYY3QoZGF0YSwgdHogPSAiVVRDIikpICogMTAwMA0KICApDQoNCnB0Zl90cmltIDwtIHB0Zl90cmltICU+JQ0KICBhcnJhbmdlKGRhdGEpICU+JQ0KICBtdXRhdGUoDQogICAgbW00ID0gem9vOjpyb2xsbWVhbihlZmV0aXZhcywgayA9IDQsIGZpbGwgPSBOQSwgYWxpZ24gPSAicmlnaHQiKQ0KICApDQoNCmRhZG9zX3B0ZiA8LSBwdGZfdHJpbSAlPiUNCiAgc2VsZWN0KHRpbWVzdGFtcCA9IGRhdGFfbXMsIGVmZXRpdmFzKQ0KDQpkYWRvc19tbTQgPC0gcHRmX3RyaW0gJT4lDQogIHNlbGVjdCh0aW1lc3RhbXAgPSBkYXRhX21zLCBtbTQpDQoNCmdyYWZpY29fcHRmIDwtIGhpZ2hjaGFydCh0eXBlID0gInN0b2NrIikgJT4lDQogIGhjX2NoYXJ0KA0KICAgIGJhY2tncm91bmRDb2xvciA9ICIjRkZGRkZGIiwNCiAgICBzcGFjaW5nVG9wID0gMjAsDQogICAgc3BhY2luZ1JpZ2h0ID0gMjAsDQogICAgc3BhY2luZ0JvdHRvbSA9IDIwLA0KICAgIHNwYWNpbmdMZWZ0ID0gMjANCiAgKSAlPiUNCiAgaGNfYWRkX3NlcmllcygNCiAgICBkYXRhID0gbGlzdF9wYXJzZTIoZGFkb3NfcHRmKSwNCiAgICB0eXBlID0gImxpbmUiLA0KICAgIG5hbWUgPSAiUFRGIChIb3JhcyBFZmV0aXZhcykiLA0KICAgIGNvbG9yID0gIiMwMjAyM0MiLA0KICAgIGxpbmVXaWR0aCA9IDMsDQogICAgbWFya2VyID0gbGlzdChlbmFibGVkID0gVFJVRSwgcmFkaXVzID0gNCkNCiAgKSAlPiUNCiAgaGNfYWRkX3NlcmllcygNCiAgICBkYXRhID0gbGlzdF9wYXJzZTIoZGFkb3NfbW00KSwNCiAgICB0eXBlID0gImxpbmUiLA0KICAgIG5hbWUgPSAiTcOpZGlhIG3Ds3ZlbCAoNCB0cmltZXN0cmVzKSIsDQogICAgY29sb3IgPSAiI0ZFQjAxNSIsDQogICAgbGluZVdpZHRoID0gMi41LA0KICAgIG1hcmtlciA9IGxpc3QoZW5hYmxlZCA9IEZBTFNFKQ0KICApICU+JQ0KICBoY195QXhpcygNCiAgICB0aXRsZSA9IGxpc3QodGV4dCA9ICLDjW5kaWNlICgyMDEyVDIgPSAxMDApIiksDQogICAgZ3JpZExpbmVDb2xvciA9ICIjRTZFNkU2Ig0KICApICU+JQ0KICBoY194QXhpcygNCiAgICBsaW5lQ29sb3IgPSAiI0Q5RDlEOSIsDQogICAgdGlja0NvbG9yID0gIiNEOUQ5RDkiDQogICkgJT4lDQogIGhjX3RpdGxlKA0KICAgIHRleHQgPSAiUHJvZHV0aXZpZGFkZSBUb3RhbCBkb3MgRmF0b3JlcyAtIEJyYXNpbCIsDQogICAgYWxpZ24gPSAiY2VudGVyIg0KICApICU+JQ0KICBoY19zdWJ0aXRsZSgNCiAgICB0ZXh0ID0gIlBURiBhanVzdGFkYSBwb3IgaG9yYXMgZWZldGl2YXMgLSAzVDIwMjAgYSA0VDIwMjUiLA0KICAgIGFsaWduID0gImNlbnRlciINCiAgKSAlPiUNCiAgaGNfdG9vbHRpcCgNCiAgICBzaGFyZWQgPSBUUlVFLA0KICAgIHZhbHVlRGVjaW1hbHMgPSAxDQogICkgJT4lDQogIGhjX2xlZ2VuZCgNCiAgICBlbmFibGVkID0gVFJVRSwNCiAgICBhbGlnbiA9ICJjZW50ZXIiLA0KICAgIHZlcnRpY2FsQWxpZ24gPSAiYm90dG9tIg0KICApICU+JQ0KICBoY19uYXZpZ2F0b3IoZW5hYmxlZCA9IEZBTFNFKSAlPiUNCiAgaGNfc2Nyb2xsYmFyKGVuYWJsZWQgPSBGQUxTRSkgJT4lDQogIGhjX3JhbmdlU2VsZWN0b3IoZW5hYmxlZCA9IEZBTFNFKSAlPiUNCiAgaGNfY3JlZGl0cygNCiAgICBlbmFibGVkID0gVFJVRSwNCiAgICB0ZXh0ID0gIkZvbnRlOiBPYnNlcnZhdMOzcmlvIGRhIFByb2R1dGl2aWRhZGUgUmVnaXMgQm9uZWxsaS9GR1YgSUJSRS4gRWxhYm9yYcOnw6NvIHByw7NwcmlhIEliTWFjcm9CSC4iDQogICkNCg0KZ3JhZmljb19wdGYNCmBgYA0KDQpDb21vIG9ic2VydmFkbyBubyBncsOhZmljbyAyMiwgYSBQVEYgYXByZXNlbnRhZGEgasOhIGluY29ycG9yYSBvIGFqdXN0ZSBwb3IgY2FwaXRhbCBodW1hbm8gLSBjdWphIGltcG9ydMOibmNpYSBmb2kgZGlzY3V0aWRhIGFudGVyaW9ybWVudGUgLSwgZ2FyYW50aW5kbyBxdWUgb3MgbW92aW1lbnRvcyBvYnNlcnZhZG9zIHJlZmxpdGFtIGdhbmhvcyBlZmV0aXZvcyBkZSBlZmljacOqbmNpYSBwcm9kdXRpdmEsIGUgbsOjbyBzaW1wbGVzbWVudGUgbyBhdW1lbnRvIGRhIGVzY29sYXJpZGFkZSBvdSBkYSBxdWFsaWZpY2HDp8OjbyBkYSBmb3LDp2EgZGUgdHJhYmFsaG8uIEFsw6ltIGRpc3NvLCBhZGljaW9ub3Utc2UgdW1hIG3DqWRpYSBtw7N2ZWwgZGUgcXVhdHJvIHRyaW1lc3RyZXMgKGxpbmhhIGFtYXJlbGEpLCBxdWUgcGVybWl0ZSB2aXN1YWxpemFyIGEgdGVuZMOqbmNpYSBkYSBzw6lyaWUgYW8gc3Vhdml6YXIgb3NjaWxhw6fDtWVzIHBvbnR1YWlzLiANCg0KQSBzw6lyaWUgaW5pY2lhIGVtIGp1bGhvIGRlIDIwMjAgZW0gdW0gcGF0YW1hciBlbGV2YWRvLCBkZSBhcHJveGltYWRhbWVudGUgOTIgcG9udG9zLCB2YWxvciBxdWUgcG9kZSBzZXIgYXNzb2NpYWRvIGFvIGNvbnRleHRvIHDDs3MtcGFuZMOqbWljbywgbWFyY2FkbyBwZWxvIHJldG9ybm8gZ3JhZHVhbCBkYSBhdGl2aWRhZGUgZWNvbsO0bWljYSBlIHBvciBwYWRyw7VlcyBhdMOtcGljb3MgZGUgdHJhYmFsaG8uIEEgcGFydGlyIGRlc3NlIHBvbnRvLCBhIFBURiBhcHJlc2VudGEgdW1hIHF1ZWRhIHNpZ25pZmljYXRpdmEsIGF0aW5naW5kbyA4NywzIGrDoSBlbSBhYnJpbCBkZSAyMDIxLCBzaW5hbGl6YW5kbyBxdWUgbyBuw612ZWwgZWxldmFkbyBvYnNlcnZhZG8gbm8gaW7DrWNpbyBkYSBzw6lyaWUgbsOjbyBzZSBzdXN0ZW50b3UuDQoNCkFvIGxvbmdvIGRvIHBlcsOtb2RvLCBvYnNlcnZhbS1zZSBhbGd1bWFzIHJlY3VwZXJhw6fDtWVzIHBvbnR1YWlzLCBjb21vIGVudHJlIGp1bGhvIGRlIDIwMjIgZSBqYW5laXJvIGRlIDIwMjMsIGUgZW50cmUgb3V0dWJybyBkZSAyMDIzIGUgamFuZWlybyBkZSAyMDI0LiBFbnRyZXRhbnRvLCB0YW50byBhIG3DqWRpYSBtw7N2ZWwgcXVhbnRvIGEgcHLDs3ByaWEgc8OpcmllIGV2aWRlbmNpYW0gcXVlLCBhcGVzYXIgZGVzc2VzIG1vdmltZW50b3MgaW50ZXJtZWRpw6FyaW9zLCBhIHRlbmTDqm5jaWEgZ2VyYWwgZGEgUFRGIGFvIGxvbmdvIGRvIHBlcsOtb2RvIGZvaSBkZSBxdWVkYS4gTyBkYWRvIG1haXMgcmVjZW50ZSwgcmVmZXJlbnRlIGFvIHF1YXJ0byB0cmltZXN0cmUgZGUgMjAyNSwgcmVnaXN0cmEgYSBQVEYgZW0gODMsOSwgcGF0YW1hciBzaWduaWZpY2F0aXZhbWVudGUgaW5mZXJpb3IgYW9zIDkyIG9ic2VydmFkb3Mgbm8gaW7DrWNpbyBkYSBzw6lyaWUgYW5hbGlzYWRhLg0KDQpFc3NlIHJlc3VsdGFkbyDDqSBwYXJ0aWN1bGFybWVudGUgcHJlb2N1cGFudGUgcXVhbmRvIGNvbWJpbmFkbyBjb20gbyBxdWFkcm8gZG8gbWVyY2FkbyBkZSB0cmFiYWxobyBkaXNjdXRpZG8gYW50ZXJpb3JtZW50ZS4gQSBlY29ub21pYSBicmFzaWxlaXJhIGVuY29udHJhLXNlIGVtIHVtYSBzaXR1YcOnw6NvIGVtIHF1ZSBwcmF0aWNhbWVudGUgdG9kYXMgYXMgcGVzc29hcyBxdWUgcG9kZXJpYW0gZXN0YXIgdHJhYmFsaGFuZG8gasOhIHNlIGVuY29udHJhbSBvY3VwYWRhcywgbWFzLCBhbyBtZXNtbyB0ZW1wbywgZXNzYXMgcGVzc29hcyBuw6NvIGVzdMOjbyBzZSB0b3JuYW5kbyBtYWlzIHByb2R1dGl2YXMgYW8gbG9uZ28gZG8gdGVtcG8uIEVtIG91dHJhcyBwYWxhdnJhcywgbyBwYcOtcyBhdGluZ2l1IG8gbGltaXRlIGRhIGFjdW11bGHDp8OjbyBkZSBmYXRvcmVzIG5vIG1lcmNhZG8gZGUgdHJhYmFsaG8gc2VtIHF1ZSBpc3NvIGZvc3NlIGFjb21wYW5oYWRvIHBvciBnYW5ob3MgZGUgZWZpY2nDqm5jaWEgcHJvZHV0aXZhLg0KRXNzZSBjZW7DoXJpbyBpbXDDtWUgcmVzdHJpw6fDtWVzIGltcG9ydGFudGVzIGFvIGNyZXNjaW1lbnRvIGRlIGxvbmdvIHByYXpvLiBTZW0gYXVtZW50b3MgY29uc2lzdGVudGVzIGRlIHByb2R1dGl2aWRhZGUsIGEgZWNvbm9taWEgcGVyZGUgYSBjYXBhY2lkYWRlIGRlIHByb2R1emlyIG1haXMgdXRpbGl6YW5kbyBvcyBtZXNtb3MgcmVjdXJzb3MsIHJlcHJvZHV6aW5kbywgZSBhZ3JhdmFuZG8sIHVtYSBkYXMgcHJpbmNpcGFpcyBmcmFnaWxpZGFkZXMgZXN0cnV0dXJhaXMgasOhIGlkZW50aWZpY2FkYXMgbm8gY2ljbG8gZGUgZXhwYW5zw6NvIGRlIDIwMDjigJMyMDE0Lg0KDQojIyAzLjMgQ29uZmlhbsOnYSwgaW5jZXJ0ZXphIGUgbGltaXRlcyBkbyBjcmVzY2ltZW50byANCg0KUGFyYSBhbMOpbSBkb3MgaW5kaWNhZG9yZXMgZGUgYXRpdmlkYWRlLCBtZXJjYWRvIGRlIHRyYWJhbGhvIGUgcHJvZHV0aXZpZGFkZSwgYSBhbsOhbGlzZSBkbyBjaWNsbyBhdHVhbCBzZSBiZW5lZmljaWEgZGEgb2JzZXJ2YcOnw6NvIGRlIGluZGljYWRvcmVzIHF1YWxpdGF0aXZvcyBxdWUgY2FwdGFtIGEgcGVyY2Vww6fDo28gZGUgZW1wcmVzw6FyaW9zIGUgY29uc3VtaWRvcmVzIHNvYnJlIG8gZXN0YWRvIGRhIGVjb25vbWlhLiBPIGdyw6FmaWNvIDIzIGFwcmVzZW50YSBvIMONbmRpY2UgZGUgQ29uZmlhbsOnYSBFbXByZXNhcmlhbCAoSUNFKSBlIG8gw41uZGljZSBkZSBDb25maWFuw6dhIGRvIENvbnN1bWlkb3IgKElDQyksIGFtYm9zIGNhbGN1bGFkb3MgcGVsYSBGR1YvSUJSRSwgZW0gY29uanVudG8gY29tIG8gTsOtdmVsIGRlIFV0aWxpemHDp8OjbyBkYSBDYXBhY2lkYWRlIEluc3RhbGFkYSAoTlVDSSksIHF1ZSBtZWRlIG8gcXVhbnRvIGEgaW5kw7pzdHJpYSBlc3TDoSBlZmV0aXZhbWVudGUgb3BlcmFuZG8gZW0gcmVsYcOnw6NvIGFvIHNldSBwb3RlbmNpYWwgZGUgcHJvZHXDp8Ojby4gDQoNCioqR3LDoWZpY28gMjM6KioNCg0KYGBge3IsIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQpsaWJyYXJ5KGRwbHlyKQ0KbGlicmFyeShsdWJyaWRhdGUpDQpsaWJyYXJ5KGhpZ2hjaGFydGVyKQ0KDQpjaWNsb19hdHVhbCA8LSBkYXRhLmZyYW1lKA0KICBkYXRhID0gc2VxKGFzLkRhdGUoIjIwMjAtMDctMDEiKSwgYXMuRGF0ZSgiMjAyNi0wNC0wMSIpLCBieSA9ICJtb250aCIpLA0KICBJQ0UgPSBjKA0KICAgIDgyLjAsIDg5LjksIDk0LjgsIDk3LjgsIDk3LjcsIDk4LjIsDQogICAgOTYuMCwgOTQuNywgODcuNywgOTAuMywgOTQuMSwgOTcuMCwgOTkuNywgMTAwLjUsIDk3LjUsIDk5LjcsIDk4LjQsIDk3LjUsDQogICAgOTMuOSwgOTMuMCwgOTMuNCwgOTUuNywgOTcuMSwgOTcuNSwgOTYuNywgOTkuMCwgOTkuMSwgOTcuNCwgOTMuMSwgOTMuNSwNCiAgICA5MS41LCA5Mi40LCA5My4xLCA5MS4zLCA5MC4zLCA5Mi4yLCA5MS42LCA5Mi42LCA5Mi42LCA5Mi41LCA5My45LCA5NC4yLA0KICAgIDk1LjAsIDk0LjEsIDk1LjEsIDk1LjUsIDk1LjAsIDk1LjMsIDk2LjUsIDk4LjAsIDk2LjgsIDk3LjcsIDk2LjksIDk2LjQsDQogICAgOTMuOSwgOTMuMiwgOTIuOSwgOTMuMywgOTMuNywgOTEuNSwgOTAuMiwgODguMCwgODkuMywgODkuNiwgOTAuMiwgOTEuNSwNCiAgICA5Mi40LCA5Mi4xLCA5MS42LCA5MC42DQogICksDQogIElDQyA9IGMoDQogICAgNzguMSwgNzguNywgODEuNiwgODAuOSwgODAuMiwgNzcuNCwNCiAgICA3Ni4wLCA3OC45LCA3MC4yLCA3NC40LCA3OC4yLCA4MS4yLCA4MS40LCA4MC4xLCA3My40LCA3NC4zLCA3My4wLCA3NC40LA0KICAgIDc0LjUsIDc4LjgsIDc2LjcsIDgwLjIsIDc3LjQsIDc5LjAsIDc4LjUsIDgxLjcsIDg2LjksIDg2LjgsIDgzLjUsIDg2LjksDQogICAgODYuNiwgODUuNSwgODkuMSwgODguNCwgOTAuMywgOTIuMywgOTMuOCwgOTQuOSwgOTQuOCwgOTEuNSwgOTEuMCwgOTIuNCwNCiAgICA5MS4wLCA4OS42LCA5Mi45LCA5NC41LCA5MC42LCA5MS43LCA5Mi40LCA5Mi43LCA5Mi44LCA5MS41LCA5NC4wLCA5MC45LA0KICAgIDg2LjUsIDg1LjEsIDg0LjgsIDg2LjYsIDg3LjksIDg2LjIsIDg1LjgsIDg1LjUsIDg2LjQsIDg3LjAsIDg4LjgsIDg5LjEsDQogICAgODcuMywgODYuMSwgODguMSwgODkuMQ0KICApLA0KICBOVUNJID0gYygNCiAgICA3Mi4wLCA3NC45LCA3Ny45LCA3OS43LCA3OS45LCA3OS41LA0KICAgIDgwLjIsIDc5LjYsIDc4LjYsIDc2LjcsIDc3LjcsIDc5LjAsIDc5LjYsIDc5LjMsIDc5LjksIDgxLjIsIDgxLjAsIDgwLjAsDQogICAgODEuMCwgODAuNSwgODAuNSwgNzkuOCwgODAuNywgODEuMCwgODEuOCwgODEuNywgODAuNCwgODAuNiwgODAuMSwgNzkuOSwNCiAgICA3OS4xLCA3OS4zLCA3OS40LCA4MC43LCA4MC4wLCA4MC4wLCA4MC41LCA4MC4zLCA4MS4zLCA4MC43LCA4MS4yLCA4MS41LA0KICAgIDgxLjQsIDgxLjIsIDgxLjYsIDgyLjIsIDgxLjcsIDgyLjMsIDgzLjAsIDgzLjAsIDgzLjEsIDgyLjUsIDgxLjksIDgxLjUsDQogICAgODEuOSwgODEuMywgODEuNywgODIuOSwgODMuNSwgODMuNiwgODIuMiwgODIuNCwgODIuMywgODEuOSwgNzkuOSwgODAuMCwNCiAgICA4MS4zLCA4MS42LCA4Mi40LCA4My4yDQogICkNCikgJT4lDQogIG11dGF0ZShkYXRhX21zID0gYXMubnVtZXJpYyhhcy5QT1NJWGN0KGRhdGEsIHR6ID0gIlVUQyIpKSAqIDEwMDApDQoNCmRhZG9zX2ljZSAgPC0gY2ljbG9fYXR1YWwgJT4lIHNlbGVjdCh0aW1lc3RhbXAgPSBkYXRhX21zLCB2YWxvciA9IElDRSkNCmRhZG9zX2ljYyAgPC0gY2ljbG9fYXR1YWwgJT4lIHNlbGVjdCh0aW1lc3RhbXAgPSBkYXRhX21zLCB2YWxvciA9IElDQykNCmRhZG9zX251Y2kgPC0gY2ljbG9fYXR1YWwgJT4lIHNlbGVjdCh0aW1lc3RhbXAgPSBkYXRhX21zLCB2YWxvciA9IE5VQ0kpDQoNCmhpZ2hjaGFydCh0eXBlID0gInN0b2NrIikgJT4lDQogIGhjX2NoYXJ0KGJhY2tncm91bmRDb2xvciA9ICIjRkZGRkZGIiwgc3BhY2luZ1RvcCA9IDIwLCBzcGFjaW5nUmlnaHQgPSAyMCwNCiAgICAgICAgICAgc3BhY2luZ0JvdHRvbSA9IDIwLCBzcGFjaW5nTGVmdCA9IDIwKSAlPiUNCiAgaGNfYWRkX3NlcmllcygNCiAgICBkYXRhID0gbGlzdF9wYXJzZTIoZGFkb3NfaWNlKSwNCiAgICB0eXBlID0gImxpbmUiLCBuYW1lID0gIklDRSDigJQgQ29uZmlhbsOnYSBFbXByZXNhcmlhbCIsDQogICAgY29sb3IgPSAiI0ZFQjAxNSIsIGxpbmVXaWR0aCA9IDIsDQogICAgbWFya2VyID0gbGlzdChlbmFibGVkID0gRkFMU0UpLA0KICAgIHRvb2x0aXAgPSBsaXN0KHZhbHVlRGVjaW1hbHMgPSAxKQ0KICApICU+JQ0KICBoY19hZGRfc2VyaWVzKA0KICAgIGRhdGEgPSBsaXN0X3BhcnNlMihkYWRvc19pY2MpLA0KICAgIHR5cGUgPSAibGluZSIsIG5hbWUgPSAiSUNDIOKAlCBDb25maWFuw6dhIGRvIENvbnN1bWlkb3IiLA0KICAgIGNvbG9yID0gIiMwMjAyM0MiLCBsaW5lV2lkdGggPSAyLA0KICAgIG1hcmtlciA9IGxpc3QoZW5hYmxlZCA9IEZBTFNFKSwNCiAgICB0b29sdGlwID0gbGlzdCh2YWx1ZURlY2ltYWxzID0gMSkNCiAgKSAlPiUNCiAgaGNfYWRkX3NlcmllcygNCiAgICBkYXRhID0gbGlzdF9wYXJzZTIoZGFkb3NfbnVjaSksDQogICAgdHlwZSA9ICJsaW5lIiwgbmFtZSA9ICJOVUNJICglKSIsDQogICAgY29sb3IgPSAiIzQ2QjFFMSIsIGxpbmVXaWR0aCA9IDIsDQogICAgbWFya2VyID0gbGlzdChlbmFibGVkID0gRkFMU0UpLA0KICAgIHRvb2x0aXAgPSBsaXN0KHZhbHVlRGVjaW1hbHMgPSAxLCB2YWx1ZVN1ZmZpeCA9ICIlIikNCiAgKSAlPiUNCiAgaGNfeUF4aXMoDQogICAgdGl0bGUgPSBsaXN0KHRleHQgPSAiw41uZGljZSAvICUiLA0KICAgICAgICAgICAgICAgICBzdHlsZSA9IGxpc3QoY29sb3IgPSAiIzQ0NDQ0NCIsIGZvbnRTaXplID0gIjEycHgiKSksDQogICAgZ3JpZExpbmVDb2xvciA9ICIjRTZFNkU2IiwNCiAgICBsYWJlbHMgPSBsaXN0KHN0eWxlID0gbGlzdChjb2xvciA9ICIjNDQ0NDQ0IikpDQogICkgJT4lDQogIGhjX3hBeGlzKA0KICAgIGxpbmVDb2xvciA9ICIjRDlEOUQ5IiwgdGlja0NvbG9yID0gIiNEOUQ5RDkiLA0KICAgIGxhYmVscyA9IGxpc3Qoc3R5bGUgPSBsaXN0KGNvbG9yID0gIiM0NDQ0NDQiKSkNCiAgKSAlPiUNCiAgaGNfcGxvdE9wdGlvbnMoDQogICAgc2VyaWVzID0gbGlzdChhbmltYXRpb24gPSBGQUxTRSwNCiAgICAgICAgICAgICAgICAgIHN0YXRlcyA9IGxpc3QoaW5hY3RpdmUgPSBsaXN0KG9wYWNpdHkgPSAxKSkpDQogICkgJT4lDQogIGhjX3RpdGxlKA0KICAgIHRleHQgPSAiQ29uZmlhbsOnYSBlIENhcGFjaWRhZGUgSW5zdGFsYWRhIOKAlCBCcmFzaWwiLA0KICAgIHN0eWxlID0gbGlzdChmb250U2l6ZSA9ICIyMHB4IiwgZm9udFdlaWdodCA9ICJib2xkIiwgY29sb3IgPSAiIzExMTExMSIpDQogICkgJT4lDQogIGhjX3N1YnRpdGxlKA0KICAgIHRleHQgPSAiSUNFLCBJQ0MgZSBOVUNJIOKAlCBqdWwvMjAyMCBhbyBtYWlzIHJlY2VudGUiLA0KICAgIHN0eWxlID0gbGlzdChmb250U2l6ZSA9ICIxM3B4IiwgY29sb3IgPSAiIzY2NjY2NiIpDQogICkgJT4lDQogIGhjX3Rvb2x0aXAoDQogICAgc2hhcmVkID0gVFJVRSwgY3Jvc3NoYWlycyA9IFRSVUUsDQogICAgYmFja2dyb3VuZENvbG9yID0gIiNGRkZGRkYiLCBib3JkZXJDb2xvciA9ICIjRDlEOUQ5IiwNCiAgICBib3JkZXJSYWRpdXMgPSA4LCBzaGFkb3cgPSBGQUxTRSwNCiAgICBzdHlsZSA9IGxpc3QoZm9udFNpemUgPSAiMTJweCIpDQogICkgJT4lDQogIGhjX2xlZ2VuZCgNCiAgICBlbmFibGVkID0gVFJVRSwgYWxpZ24gPSAiY2VudGVyIiwNCiAgICB2ZXJ0aWNhbEFsaWduID0gImJvdHRvbSIsIGxheW91dCA9ICJob3Jpem9udGFsIg0KICApICU+JQ0KICBoY19yYW5nZVNlbGVjdG9yKGVuYWJsZWQgPSBGQUxTRSkgJT4lDQogIGhjX25hdmlnYXRvcihlbmFibGVkID0gRkFMU0UpICU+JQ0KICBoY19zY3JvbGxiYXIoZW5hYmxlZCA9IEZBTFNFKSAlPiUNCiAgaGNfY3JlZGl0cygNCiAgICBlbmFibGVkID0gVFJVRSwNCiAgICB0ZXh0ID0gIkZvbnRlOiBGR1YvSUJSRS4gRWxhYm9yYcOnw6NvIHByw7NwcmlhIEliTWFjcm9CSC4iLA0KICAgIHN0eWxlID0gbGlzdChmb250U2l6ZSA9ICIxMHB4IiwgY29sb3IgPSAiIzc3Nzc3NyIpDQogICkNCmBgYA0KDQpDb21vIG9ic2VydmFkbyBubyBncsOhZmljbyAyMywgbyBOVUNJIChsaW5oYSBhenVsIGNsYXJhKSBtYW50w6ltLXNlIGVtIHBhdGFtYXJlcyByZWxhdGl2YW1lbnRlIGVsZXZhZG9zIGFvIGxvbmdvIGRlIHRvZG8gbyBwZXLDrW9kbywgbyBxdWUgaW5kaWNhIGJhaXhhIG9jaW9zaWRhZGUgbmEgaW5kw7pzdHJpYS4gRXNzZSBjb21wb3J0YW1lbnRvIHBvZGUgcGFyZWNlciBwb3NpdGl2byDDoCBwcmltZWlyYSB2aXN0YSwgbWFzIGRldmUgc2VyIGxpZG8gY29tIGNhdXRlbGE6IHVtYSBpbmTDunN0cmlhIG9wZXJhbmRvIHByw7N4aW1hIGRvIHNldSBsaW1pdGUgZGUgY2FwYWNpZGFkZSBwb2RlIGdlcmFyIHByZXNzw6NvIGRlIHByZcOnb3MgcGVsbyBsYWRvIGRhIGRlbWFuZGEsIGRhZG8gcXVlIHF1YWxxdWVyIGF1bWVudG8gZG8gY29uc3VtbyBlbmNvbnRyYSBkaWZpY3VsZGFkZXMgZGUgc2VyIGFic29ydmlkbyBwZWxhIHByb2R1w6fDo28gY29ycmVudGUuIEVtIG91dHJhcyBwYWxhdnJhcywgbyBOVUNJIGVsZXZhZG8gbsOjbyBzaWduaWZpY2EsIGF1dG9tYXRpY2FtZW50ZSwgdW1hIGluZMO6c3RyaWEgZW0gZXhwYW5zw6NvIC0gc2lnbmlmaWNhIGFwZW5hcyBxdWUgbsOjbyBow6EgZm9sZ2EgcHJvZHV0aXZhIHBhcmEgYWJzb3J2ZXIgY2hvcXVlcyBkZSBkZW1hbmRhLg0KDQpPIElDRSAobGluaGEgYW1hcmVsYSksIHF1ZSBtZWRlIGEgY29uZmlhbsOnYSBlbXByZXNhcmlhbCwgc2VndWUgZW0gbsOtdmVpcyBmcmFjb3MsIHByaW5jaXBhbG1lbnRlIG5vIHF1ZSBkaXogcmVzcGVpdG8gw6BzIGV4cGVjdGF0aXZhcyBmdXR1cmFzIGRvcyBlbXByZXPDoXJpb3MuIEVzc2UgY29tcG9ydGFtZW50byDDqSBtYWNyb2Vjb25vbWljYW1lbnRlIHJlbGV2YW50ZSBwb3JxdWUgYSBjb25maWFuw6dhIGVtcHJlc2FyaWFsIMOpIHVtIGRvcyBwcmluY2lwYWlzIGRldGVybWluYW50ZXMgZGFzIGRlY2lzw7VlcyBkZSBpbnZlc3RpbWVudG8gZSBjb250cmF0YcOnw6NvLiBRdWFuZG8gb3MgZW1wcmVzw6FyaW9zIG7Do28gZW54ZXJnYW0gdW0gaG9yaXpvbnRlIGNsYXJvIGRlIGV4cGFuc8OjbyBkYSBkZW1hbmRhLCBlbGVzIHRlbmRlbSBhIHBvc3RlcmdhciBwcm9qZXRvcywgbGltaXRhciBhIGV4cGFuc8OjbyBkYSBwcm9kdcOnw6NvIGUgbWFudGVyIHF1YWRyb3MgZGUgcGVzc29hbCBtYWlzIGVueHV0b3MgLSByZWZvcsOnYW5kbywgbmEgcHLDoXRpY2EsIGEgZnJhZ2lsaWRhZGUgZG8gaW52ZXN0aW1lbnRvIGrDoSBvYnNlcnZhZGEgYW50ZXJpb3JtZW50ZS4NCg0KTyBJQ0MgKGxpbmhhIGF6dWwgZXNjdXJhKSwgcG9yIHN1YSB2ZXosIGFwcmVzZW50YSB0cmFqZXTDs3JpYSBkZSByZWN1cGVyYcOnw6NvIGFvIGxvbmdvIGRvIHBlcsOtb2RvLiBPIG1vdmltZW50byDDqSBjb25zaXN0ZW50ZSBjb20gYSBtZWxob3JhIGRvIG1lcmNhZG8gZGUgdHJhYmFsaG8gZGlzY3V0aWRhIGVtIDMuMiwgcXVlIGFtcGxpb3UgdGFudG8gYSBvY3VwYcOnw6NvIHF1YW50byBhIHJlbmRhIGRhcyBmYW3DrWxpYXMuIEFwZXNhciBkZXNzYSByZWN1cGVyYcOnw6NvLCBjb250dWRvLCBvIMOtbmRpY2UgcGVybWFuZWNlIGFiYWl4byBkZSAxMDAgcG9udG9zIC0gcGF0YW1hciBjb25zaWRlcmFkbyBuZXV0cm8gLSwgc2luYWxpemFuZG8gcXVlIG8gY29uc3VtaWRvciBicmFzaWxlaXJvIHNlZ3VlIGNhdXRlbG9zbyBxdWFudG8gw6BzIHBlcnNwZWN0aXZhcyBmdXR1cmFzLCBtZXNtbyBkaWFudGUgZGUgdW1hIHNpdHVhw6fDo28gY29ycmVudGUgbWFpcyBmYXZvcsOhdmVsLg0KDQpBIGxlaXR1cmEgY29uanVudGEgZG9zIHRyw6pzIGluZGljYWRvcmVzIHJldmVsYSB1bWEgY29udHJhZGnDp8OjbyBpbXBvcnRhbnRlIGRvIGNpY2xvIGF0dWFsOiBhIGVjb25vbWlhIG1vc3RyYSByZXNpbGnDqm5jaWEgbm8gcHJlc2VudGUsIHJlZmxldGlkYSBuYSB1dGlsaXphw6fDo28gZGEgY2FwYWNpZGFkZSBpbnN0YWxhZGEgZSBuYSBtZWxob3JhIGRvIGNvbnN1bW8sIG1hcyBvcGVyYSBjb20gYmFpeGEgY29uZmlhbsOnYSBlbSByZWxhw6fDo28gYW8gZnV0dXJvLiBFc3NlIGRlc2NvbXBhc3NvIGVudHJlIG8gZGVzZW1wZW5obyBjb3JyZW50ZSBlIGFzIGV4cGVjdGF0aXZhcyBmdXR1cmFzIGltcMO1ZSB1bSBsaW1pdGUgYWRpY2lvbmFsIGFvIGNyZXNjaW1lbnRvLCBwb2lzIHJlZHV6IG9zIGluY2VudGl2b3MgcGFyYSBxdWUgZW1wcmVzYXMgYW1wbGllbSBzZXVzIGludmVzdGltZW50b3MgZSBwYXJhIHF1ZSBmYW3DrWxpYXMgYXVtZW50ZW0gbyBjb25zdW1vIGRlIGJlbnMgZHVyw6F2ZWlzIC0gcGVycGV0dWFuZG8sIGFzc2ltLCBhcyBmcmFnaWxpZGFkZXMgZXN0cnV0dXJhaXMgasOhIGlkZW50aWZpY2FkYXMgYW8gbG9uZ28gZGVzdGEgc2XDp8Ojby4NCg0KIyMgMy40IFNpdHVhw6fDo28gZmlzY2FsIGUgZMOtdmlkYSBww7pibGljYQ0KDQpBdHVhbG1lbnRlLCBuw6NvIMOpIHBvc3PDrXZlbCBhbmFsaXNhciBhIHNpdHVhw6fDo28gZWNvbsO0bWljYSBicmFzaWxlaXJhIHNlbSBwYXNzYXIgcGVsYSBxdWVzdMOjbyBkYSBkw612aWRhIHDDumJsaWNhLiBPIGVuZGl2aWRhbWVudG8gZG8gZ292ZXJubyBnZXJhbCBlbmNvbnRyYS1zZSBlbSB1bSBwYXRhbWFyIGVsZXZhZG8sIHByw7N4aW1vIGRlIDgwJSBkbyBQSUIsIGUgYSB0cmFqZXTDs3JpYSBkb3MgaW5kaWNhZG9yZXMgZmlzY2FpcyBub3Mgw7psdGltb3MgYW5vcyByZWZvcsOnYSBhIHByZW9jdXBhw6fDo28gY29tIGEgc3VzdGVudGFiaWxpZGFkZSBkYXMgY29udGFzIHDDumJsaWNhcy4gTyBncsOhZmljbyAyNCBhcHJlc2VudGEgYSBldm9sdcOnw6NvIGRhIE5lY2Vzc2lkYWRlIGRlIEZpbmFuY2lhbWVudG8gZG8gU2V0b3IgUMO6YmxpY28gKE5GU1ApIGUgZGEgRMOtdmlkYSBCcnV0YSBkbyBHb3Zlcm5vIEdlcmFsIGVudHJlIDIwMjAgZSAyMDI1LiANCg0KKipHcsOhZmljbyAyNDoqKg0KDQpgYGB7ciwgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCmxpYnJhcnkoR2V0QkNCRGF0YSkNCmxpYnJhcnkoZHBseXIpDQpsaWJyYXJ5KGx1YnJpZGF0ZSkNCmxpYnJhcnkoaGlnaGNoYXJ0ZXIpDQoNCmRhdGFfaW5pY2lvIDwtIGFzLkRhdGUoIjIwMjAtMDctMDEiKQ0KZGF0YV9maW0gPC0gYXMuRGF0ZSgiMjAyNS0xMi0zMSIpDQoNCnJlc3VsdGFkb19wcmltYXJpbyA8LSBnYmNiZF9nZXRfc2VyaWVzKA0KICBpZCA9IGMoInJlc3VsdGFkb19wcmltYXJpbyIgPSA1NzkzKSwNCiAgZmlyc3QuZGF0ZSA9IGRhdGFfaW5pY2lvLA0KICBsYXN0LmRhdGUgPSBkYXRhX2ZpbSwNCiAgZm9ybWF0LmRhdGEgPSAid2lkZSINCikgJT4lDQogIG11dGF0ZShEYXRhID0gYXMuRGF0ZShyZWYuZGF0ZSkpDQoNCmRpdmlkYV9icnV0YSA8LSBnYmNiZF9nZXRfc2VyaWVzKA0KICBpZCA9IGMoImRpdmlkYV9icnV0YSIgPSAxMzc2MiksDQogIGZpcnN0LmRhdGUgPSBkYXRhX2luaWNpbywNCiAgbGFzdC5kYXRlID0gZGF0YV9maW0sDQogIGZvcm1hdC5kYXRhID0gIndpZGUiDQopICU+JQ0KICBtdXRhdGUoRGF0YSA9IGFzLkRhdGUocmVmLmRhdGUpKQ0KDQpkYWRvcyA8LSByZXN1bHRhZG9fcHJpbWFyaW8gJT4lDQogIHNlbGVjdChEYXRhLCByZXN1bHRhZG9fcHJpbWFyaW8pICU+JQ0KICBmdWxsX2pvaW4oDQogICAgZGl2aWRhX2JydXRhICU+JSBzZWxlY3QoRGF0YSwgZGl2aWRhX2JydXRhKSwNCiAgICBieSA9ICJEYXRhIg0KICApICU+JQ0KICBhcnJhbmdlKERhdGEpICU+JQ0KICBuYS5vbWl0KCkgJT4lDQogIG11dGF0ZSh0aW1lc3RhbXAgPSBhcy5udW1lcmljKGFzLlBPU0lYY3QoRGF0YSwgdHogPSAiVVRDIikpICogMTAwMCkNCg0KZ3JhZmljbyA8LSBoaWdoY2hhcnQodHlwZSA9ICJzdG9jayIpICU+JQ0KICBoY19jaGFydCgNCiAgICBiYWNrZ3JvdW5kQ29sb3IgPSAiI0ZGRkZGRiIsDQogICAgc3BhY2luZ1RvcCA9IDIwLCBzcGFjaW5nUmlnaHQgPSAyMCwNCiAgICBzcGFjaW5nQm90dG9tID0gMjAsIHNwYWNpbmdMZWZ0ID0gMjANCiAgKSAlPiUNCiAgaGNfYWRkX3NlcmllcygNCiAgICBkYXRhID0gbGFwcGx5KHNlcV9sZW4obnJvdyhkYWRvcykpLCBmdW5jdGlvbihpKSBsaXN0KGRhZG9zJHRpbWVzdGFtcFtpXSwgZGFkb3MkcmVzdWx0YWRvX3ByaW1hcmlvW2ldKSksDQogICAgdHlwZSA9ICJjb2x1bW4iLA0KICAgIG5hbWUgPSAiTkZTUCIsDQogICAgY29sb3IgPSAiI0ZFQjAxNSIsDQogICAgYm9yZGVyQ29sb3IgPSAiI0ZFQjAxNSIsDQogICAgcG9pbnRQYWRkaW5nID0gMC4wOCwNCiAgICBncm91cFBhZGRpbmcgPSAwLjEwLA0KICAgIHlBeGlzID0gMCwNCiAgICB0b29sdGlwID0gbGlzdCh2YWx1ZURlY2ltYWxzID0gMiwgdmFsdWVTdWZmaXggPSAiIHAucC4iKQ0KICApICU+JQ0KICBoY19hZGRfc2VyaWVzKA0KICAgIGRhdGEgPSBsYXBwbHkoc2VxX2xlbihucm93KGRhZG9zKSksIGZ1bmN0aW9uKGkpIGxpc3QoZGFkb3MkdGltZXN0YW1wW2ldLCBkYWRvcyRkaXZpZGFfYnJ1dGFbaV0pKSwNCiAgICB0eXBlID0gImxpbmUiLA0KICAgIG5hbWUgPSAiRMOtdmlkYSBCcnV0YSAoJSBkbyBQSUIpIiwNCiAgICBjb2xvciA9ICIjMDIwMjNDIiwNCiAgICBsaW5lV2lkdGggPSAzLA0KICAgIG1hcmtlciA9IGxpc3QoZW5hYmxlZCA9IEZBTFNFKSwNCiAgICB5QXhpcyA9IDEsDQogICAgdG9vbHRpcCA9IGxpc3QodmFsdWVEZWNpbWFscyA9IDIsIHZhbHVlU3VmZml4ID0gIiUiKQ0KICApICU+JQ0KICBoY195QXhpc19tdWx0aXBsZXMoDQogICAgbGlzdCgNCiAgICAgIHRpdGxlID0gbGlzdCgNCiAgICAgICAgdGV4dCA9ICJORlNQIC0gUmVzdWx0YWRvIFByaW3DoXJpbyAoJSBkbyBQSUIpIiwNCiAgICAgICAgc3R5bGUgPSBsaXN0KGNvbG9yID0gIiM0NDQ0NDQiLCBmb250U2l6ZSA9ICIxMnB4IikNCiAgICAgICksDQogICAgICBvcHBvc2l0ZSA9IEZBTFNFLA0KICAgICAgZ3JpZExpbmVDb2xvciA9ICIjRTZFNkU2IiwNCiAgICAgIGdyaWRMaW5lV2lkdGggPSAxLA0KICAgICAgbGFiZWxzID0gbGlzdChzdHlsZSA9IGxpc3QoY29sb3IgPSAiIzQ0NDQ0NCIpKSwNCiAgICAgIHBsb3RMaW5lcyA9IGxpc3QoDQogICAgICAgIGxpc3QoDQogICAgICAgICAgdmFsdWUgPSAwLA0KICAgICAgICAgIHdpZHRoID0gMS41LA0KICAgICAgICAgIGNvbG9yID0gIiM5RTlFOUUiLA0KICAgICAgICAgIGRhc2hTdHlsZSA9ICJTaG9ydERhc2giLA0KICAgICAgICAgIHpJbmRleCA9IDUNCiAgICAgICAgKQ0KICAgICAgKQ0KICAgICksDQogICAgbGlzdCgNCiAgICAgIHRpdGxlID0gbGlzdCgNCiAgICAgICAgdGV4dCA9ICJEw612aWRhIEJydXRhICglIGRvIFBJQikiLA0KICAgICAgICBzdHlsZSA9IGxpc3QoY29sb3IgPSAiIzQ0NDQ0NCIsIGZvbnRTaXplID0gIjEycHgiKQ0KICAgICAgKSwNCiAgICAgIG9wcG9zaXRlID0gVFJVRSwNCiAgICAgIGdyaWRMaW5lV2lkdGggPSAwLA0KICAgICAgbGFiZWxzID0gbGlzdChzdHlsZSA9IGxpc3QoY29sb3IgPSAiIzQ0NDQ0NCIpKQ0KICAgICkNCiAgKSAlPiUNCiAgaGNfeEF4aXMoDQogICAgbGluZUNvbG9yID0gIiNEOUQ5RDkiLA0KICAgIHRpY2tDb2xvciA9ICIjRDlEOUQ5IiwNCiAgICBsYWJlbHMgPSBsaXN0KHN0eWxlID0gbGlzdChjb2xvciA9ICIjNDQ0NDQ0IikpDQogICkgJT4lDQogIGhjX3Bsb3RPcHRpb25zKA0KICAgIHNlcmllcyA9IGxpc3QoDQogICAgICBhbmltYXRpb24gPSBGQUxTRSwNCiAgICAgIHN0YXRlcyA9IGxpc3QoaW5hY3RpdmUgPSBsaXN0KG9wYWNpdHkgPSAxKSkNCiAgICApLA0KICAgIGNvbHVtbiA9IGxpc3QoYm9yZGVyV2lkdGggPSAwKQ0KICApICU+JQ0KICBoY190aXRsZSgNCiAgICB0ZXh0ID0gIk5lY2Vzc2lkYWRlIGRlIEZpbmFuY2lhbWVudG8gZG8gU2V0b3IgUMO6YmxpY28gZSBEw612aWRhIEJydXRhIGRvIEdvdmVybm8gR2VyYWwiLA0KICAgIHN0eWxlID0gbGlzdChmb250U2l6ZSA9ICIyMHB4IiwgZm9udFdlaWdodCA9ICJib2xkIiwgY29sb3IgPSAiIzExMTExMSIpDQogICkgJT4lDQogIGhjX3N1YnRpdGxlKA0KICAgIHRleHQgPSAiRXZvbHXDp8OjbyBkYSBORlNQIGUgZG8gZW5kaXZpZGFtZW50byBww7pibGljbyBubyBCcmFzaWwgKDIwMjDigJMyMDI1KSIsDQogICAgc3R5bGUgPSBsaXN0KGZvbnRTaXplID0gIjEzcHgiLCBjb2xvciA9ICIjNjY2NjY2IikNCiAgKSAlPiUNCiAgaGNfdG9vbHRpcCgNCiAgICBzaGFyZWQgPSBUUlVFLA0KICAgIGNyb3NzaGFpcnMgPSBUUlVFLA0KICAgIGJhY2tncm91bmRDb2xvciA9ICIjRkZGRkZGIiwNCiAgICBib3JkZXJDb2xvciA9ICIjRDlEOUQ5IiwNCiAgICBib3JkZXJSYWRpdXMgPSA4LA0KICAgIHNoYWRvdyA9IEZBTFNFLA0KICAgIHN0eWxlID0gbGlzdChmb250U2l6ZSA9ICIxMnB4IikNCiAgKSAlPiUNCiAgaGNfbGVnZW5kKA0KICAgIGVuYWJsZWQgPSBUUlVFLA0KICAgIGFsaWduID0gImNlbnRlciIsDQogICAgdmVydGljYWxBbGlnbiA9ICJib3R0b20iLA0KICAgIGxheW91dCA9ICJob3Jpem9udGFsIiwNCiAgICBpdGVtU3R5bGUgPSBsaXN0KA0KICAgICAgY29sb3IgPSAiIzIyMjIyMiIsDQogICAgICBmb250V2VpZ2h0ID0gIm5vcm1hbCIsDQogICAgICBmb250U2l6ZSA9ICIxMnB4Ig0KICAgICkNCiAgKSAlPiUNCiAgaGNfcmFuZ2VTZWxlY3RvcigNCiAgICBlbmFibGVkID0gVFJVRSwNCiAgICBpbnB1dEVuYWJsZWQgPSBGQUxTRSwNCiAgICBzZWxlY3RlZCA9IDQsDQogICAgYnV0dG9ucyA9IGxpc3QoDQogICAgICBsaXN0KHR5cGUgPSAieWVhciIsIGNvdW50ID0gMSwgdGV4dCA9ICIxQSIpLA0KICAgICAgbGlzdCh0eXBlID0gInllYXIiLCBjb3VudCA9IDIsIHRleHQgPSAiMkEiKSwNCiAgICAgIGxpc3QodHlwZSA9ICJ5ZWFyIiwgY291bnQgPSAzLCB0ZXh0ID0gIjNBIiksDQogICAgICBsaXN0KHR5cGUgPSAiYWxsIiwgdGV4dCA9ICJUdWRvIikNCiAgICApDQogICkgJT4lDQogIGhjX25hdmlnYXRvcihlbmFibGVkID0gVFJVRSkgJT4lDQogIGhjX3Njcm9sbGJhcihlbmFibGVkID0gRkFMU0UpICU+JQ0KICBoY19jcmVkaXRzKA0KICAgIGVuYWJsZWQgPSBUUlVFLA0KICAgIHRleHQgPSAiRm9udGU6IEJhbmNvIENlbnRyYWwgZG8gQnJhc2lsLiBFbGFib3Jhw6fDo28gcHLDs3ByaWEgSWJNYWNyb0JILiIsDQogICAgc3R5bGUgPSBsaXN0KGZvbnRTaXplID0gIjEwcHgiLCBjb2xvciA9ICIjNzc3Nzc3IikNCiAgKQ0KDQpncmFmaWNvDQpgYGANCg0KQ29tbyBvYnNlcnZhZG8gbm8gZ3LDoWZpY28gMjQsIGFzIGJhcnJhcyBhbWFyZWxhcyByZXByZXNlbnRhbSBhIE5GU1AgLSBzZW5kbyBxdWUgdmFsb3JlcyBwb3NpdGl2b3MgY29ycmVzcG9uZGVtIGEgZMOpZmljaXRzIHByaW3DoXJpb3MgZG8gZ292ZXJubywgZSB2YWxvcmVzIG5lZ2F0aXZvcyBhIHN1cGVyw6F2aXRzLiBBIGxpbmhhIGF6dWwgZXNjdXJhLCBwb3Igc3VhIHZleiwgbW9zdHJhIGEgZXZvbHXDp8OjbyBkYSBkw612aWRhIGJydXRhIGRvIGdvdmVybm8gZ2VyYWwgY29tbyBwZXJjZW50dWFsIGRvIFBJQi4gRGVzZGUganVsaG8gZGUgMjAyMywgbyBCcmFzaWwgdGVtIHJlZ2lzdHJhZG8gZMOpZmljaXRzIHByaW3DoXJpb3MgcHJhdGljYW1lbnRlIGNvbnTDrW51b3MsIG8gcXVlIHNpZ25pZmljYSBxdWUgYXMgcmVjZWl0YXMgZG8gZ292ZXJubyBuw6NvIHTDqm0gc2lkbyBzdWZpY2llbnRlcyBwYXJhIGNvYnJpciBzZXVzIGdhc3RvcyBjb3JyZW50ZXMsIGV4Y2x1w61kb3Mgb3MganVyb3MgZGEgZMOtdmlkYS4gRW50cmUgbm92ZW1icm8gZSBkZXplbWJybyBkZSAyMDI0LCBvYnNlcnZhLXNlIHVtYSByZWR1w6fDo28gZG8gdGFtYW5obyBkZXNzZXMgZMOpZmljaXRzLCBlIGFvIGxvbmdvIGRlIDIwMjUgb3MgZMOpZmljaXRzIHTDqm0gc2UgbWFudGlkbyBlbSBuw612ZWlzIG1haXMgYmFpeG9zLiBBaW5kYSBhc3NpbSwgYSBzaXR1YcOnw6NvIGZpc2NhbCBicmFzaWxlaXJhIHBlcm1hbmVjZSBwcmVvY3VwYW50ZS4NCg0KQSByZWR1w6fDo28gZG8gZMOpZmljaXQgw6ksIHNlbSBkw7p2aWRhLCB1bSBtb3ZpbWVudG8gcG9zaXRpdm8uIE5vIGVudGFudG8sIMOpIGltcG9ydGFudGUgbm90YXIgcXVlIGEgZMOtdmlkYSBww7pibGljYSBicmFzaWxlaXJhIGrDoSBzZSBlbmNvbnRyYSBlbSBwYXRhbWFyIGVsZXZhZG8gLSBjaGVnYW5kbyBlbSBxdWFzZSA4MCUgZG8gUElCIGNvbW8gcG9kZSBzZXIgdmlzdG8gbmEgbGluaGEgYXp1bCAtLCBlIGlzc28gZmF6IGNvbSBxdWUgZWxhIGFwcmVzZW50ZSB1bWEgZGluw6JtaWNhIGRlIGNyZXNjaW1lbnRvIHByYXRpY2FtZW50ZSBhdXTDtG5vbWEuIE1lc21vIHF1ZSBvIGdvdmVybm8gY29uc2VndWlzc2UgemVyYXIgY29tcGxldGFtZW50ZSBzZXVzIGdhc3RvcyBkaXNjcmljaW9uw6FyaW9zLCBhIGTDrXZpZGEgY29udGludWFyaWEgYSBjcmVzY2VyLCBpbXB1bHNpb25hZGEgcGVsYSBjb21iaW5hw6fDo28gZW50cmUgdW0gY3Jlc2NpbWVudG8gZWNvbsO0bWljbyBiYWl4byBlIGp1cm9zIGVzdHJ1dHVyYWxtZW50ZSBlbGV2YWRvcy4gRW0gb3V0cmFzIHBhbGF2cmFzLCBvIHJlc3VsdGFkbyBwcmltw6FyaW8gZGVpeGEgZGUgc2VyIHN1ZmljaWVudGUsIGlzb2xhZGFtZW50ZSwgcGFyYSBlc3RhYmlsaXphciBhIHRyYWpldMOzcmlhIGRhIGTDrXZpZGEgcXVhbmRvIG8gZGlmZXJlbmNpYWwgZW50cmUgYSB0YXhhIGRlIGp1cm9zIGUgYSB0YXhhIGRlIGNyZXNjaW1lbnRvIGRhIGVjb25vbWlhIMOpIGFtcGxvIGUgcGVyc2lzdGVudGUuDQoNCkVzc2UgcXVhZHJvIGZpc2NhbCBwcmVjaXNhIHNlciBsaWRvIGVtIGNvbmp1bnRvIGNvbSBvcyBpbmRpY2Fkb3JlcyBkaXNjdXRpZG9zIG5hcyBzZcOnw7VlcyBhbnRlcmlvcmVzLiBBIGVjb25vbWlhIGJyYXNpbGVpcmEgZW5jb250cmEtc2UgZW0gdW1hIHNpdHVhw6fDo28gbmEgcXVhbCBhIGVzdHJ1dHVyYSBwcm9kdXRpdmEgbsOjbyBzZSB0cmFuc2Zvcm1vdSwgbyBpbnZlc3RpbWVudG8gcGVybWFuZWNlIGluc3TDoXZlbCwgbyBtZXJjYWRvIGRlIHRyYWJhbGhvIGVzdMOhIGFxdWVjaWRvIHNlbSByZXNlcnZhcyBkZSBtw6NvIGRlIG9icmEgZGlzcG9uw612ZWwsIGUgYSBwcm9kdXRpdmlkYWRlIHNlZ3VlIGVtIHRyYWpldMOzcmlhIGRlIHF1ZWRhLiBFc3NlIGNvbmp1bnRvIGRlIGZyYWdpbGlkYWRlcyBlc3RydXR1cmFpcyBsaW1pdGEgYSBjYXBhY2lkYWRlIGRlIGNyZXNjaW1lbnRvIGRvIHBhw61zIG5vIGxvbmdvIHByYXpvIC0gZSwganVzdGFtZW50ZSBwb3IgaXNzbywgcmV0cm9hbGltZW50YSBhIGRldGVyaW9yYcOnw6NvIGZpc2NhbDogc2VtIGNyZXNjaW1lbnRvIHJvYnVzdG8sIGEgcmVsYcOnw6NvIGTDrXZpZGEvUElCIHRlbmRlIGEgc2UgZWxldmFyIG1lc21vIG5hIGF1c8OqbmNpYSBkZSBub3ZvcyBkw6lmaWNpdHMgZXhwcmVzc2l2b3MuIA0KDQpPIHJlc3VsdGFkbyDDqSB1bSBjZW7DoXJpbyBlbSBxdWUgYXMgY29udGFzIHDDumJsaWNhcyBzZSBkZXRlcmlvcmFtIG7Do28gYXBlbmFzIHBlbG8gbGFkbyBkbyBnYXN0bywgbWFzIHRhbWLDqW0gcGVsYSBwcsOzcHJpYSBmcmFnaWxpZGFkZSBlc3RydXR1cmFsIGRhIGVjb25vbWlhIGJyYXNpbGVpcmEgZW0gZ2VyYXIgY3Jlc2NpbWVudG8gc3VzdGVudGFkby4NCg0KIyMgQ29uY2x1c8Ojbw0KQSBhbsOhbGlzZSBoaXN0w7NyaWNhIGRvcyBjaWNsb3MgZWNvbsO0bWljb3MgYnJhc2lsZWlyb3Mgc2UgbW9zdHJhIGZ1bmRhbWVudGFsIHBhcmEgYSBjb21wcmVlbnPDo28gZG8gbW9tZW50byBhdHVhbCBkYSBlY29ub21pYS4gQW8gbG9uZ28gZGVzdGUgcmVsYXTDs3JpbywgZm9yYW0gZXhhbWluYWRvcyBvIGNpY2xvIGRlIGV4cGFuc8OjbyBkZSAyMDA44oCTMjAxNCwgYSByZWNlc3PDo28gZGUgMjAxNOKAkzIwMTYgZSBhIGZhc2UgaW5pY2lhZGEgYXDDs3MgbyBzZWd1bmRvIHRyaW1lc3RyZSBkZSAyMDIwLCBidXNjYW5kbyBpZGVudGlmaWNhciBuw6NvIGFwZW5hcyBvcyBtb3ZpbWVudG9zIGRlIGNhZGEgcGVyw61vZG8sIG1hcywgc29icmV0dWRvLCBvcyBwYWRyw7VlcyBlc3RydXR1cmFpcyBxdWUgc2UgcmVwZXRlbSBhbyBsb25nbyBkbyB0ZW1wby4gRXNzYSBhYm9yZGFnZW0gcGVybWl0ZSBvYnNlcnZhciBxdWUgbXVpdGFzIGRhcyBmcmFnaWxpZGFkZXMgaWRlbnRpZmljYWRhcyBuYSBlY29ub21pYSBicmFzaWxlaXJhIGF0dWFsIHTDqm0gcmHDrXplcyBlbSBjaWNsb3MgYW50ZXJpb3JlcywgZSBxdWUgc3VhIHBlcnNpc3TDqm5jaWEgaW1ww7VlIGxpbWl0ZXMgaW1wb3J0YW50ZXMgYW8gY3Jlc2NpbWVudG8gZGUgbG9uZ28gcHJhem8uDQoNCkEgc2l0dWHDp8OjbyBhdHVhbCBkYSBlY29ub21pYSBicmFzaWxlaXJhIMOpIHByZW9jdXBhbnRlLiBPIGNyZXNjaW1lbnRvIHBlcm1hbmVjZSBlbSByaXRtbyBiYWl4bywgYSBpbmTDunN0cmlhIG9wZXJhIHByw7N4aW1hIGRvIGxpbWl0ZSBkYSBjYXBhY2lkYWRlIGluc3RhbGFkYSwgbyBtZXJjYWRvIGRlIHRyYWJhbGhvIGVuY29udHJhLXNlIGFxdWVjaWRvLCBjb20gdGF4YXMgZGUgZGVzb2N1cGHDp8OjbyBlIHN1YnV0aWxpemHDp8OjbyBlbSBuw612ZWlzIG3DrW5pbW9zLCBlIGEgcHJvZHV0aXZpZGFkZSB0b3RhbCBkb3MgZmF0b3JlcyBzZWd1ZSBlbSB0cmFqZXTDs3JpYSBkZSBxdWVkYS4gRXNzZSBjb25qdW50byBkZSBpbmRpY2Fkb3JlcyBhcG9udGEgcGFyYSB1bWEgZWNvbm9taWEgcXVlLCBlbWJvcmEgYXByZXNlbnRlIHJlc2lsacOqbmNpYSBubyBjdXJ0byBwcmF6bywgZW5jb250cmEtc2UgZXN0YWduYWRhIGVtIHRlcm1vcyBlc3RydXR1cmFpcyDigJQgY29tIHBvdWNhIGZvbGdhIGRlIGNhcGFjaWRhZGUgcHJvZHV0aXZhLCBzZW0gZ2FuaG9zIGNvbnNpc3RlbnRlcyBkZSBlZmljacOqbmNpYSBlIGNvbSBmcmFnaWxpZGFkZXMgZmlzY2FpcyBwZXJzaXN0ZW50ZXMuIE8gQnJhc2lsIHByZWNpc2EsIHBvcnRhbnRvLCBlbmNvbnRyYXIgbWVjYW5pc21vcyBwYXJhIGNyZXNjZXIgZGUgZm9ybWEgc3VzdGVudMOhdmVsLCBvIHF1ZSBleGlnZSwgbmVjZXNzYXJpYW1lbnRlLCB1bWEgcGVyc3BlY3RpdmEgZGUgbG9uZ28gcHJhem8gdm9sdGFkYSBhbyBhdW1lbnRvIGRhIHByb2R1dGl2aWRhZGUsIMOgIHRyYW5zZm9ybWHDp8OjbyBlc3RydXR1cmFsIGRhIGVjb25vbWlhIGUgw6AgYW1wbGlhw6fDo28gZG8gaW52ZXN0aW1lbnRvIHByb2R1dGl2by4NCg0KUXVhbnRvIMOgIGZhc2UgZW0gcXVlIGEgZWNvbm9taWEgYnJhc2lsZWlyYSBlZmV0aXZhbWVudGUgc2UgZW5jb250cmEsIGFpbmRhIG7Do28gaMOhIGRlZmluacOnw6NvIG9maWNpYWwuIE8gw7psdGltbyBjaWNsbyBkYXRhZG8gcGVsbyBDT0RBQ0UgZm9pIGVuY2VycmFkbyBubyBzZWd1bmRvIHRyaW1lc3RyZSBkZSAyMDIwIGUsIGF0w6kgbyBtb21lbnRvIGRhIHB1YmxpY2HDp8OjbyBkZXN0ZSByZWxhdMOzcmlvLCBlbSBtYWlvIGRlIDIwMjYsIG7Do28gaG91dmUgZGl2dWxnYcOnw6NvIGRlIG5vdmFzIGRhdGFzIC0gZGUgbW9kbyBxdWUgbsOjbyDDqSBwb3Nzw612ZWwgYWZpcm1hciBmb3JtYWxtZW50ZSBzZSBvIHBhw61zIHNlZ3VlIGVtIGV4cGFuc8OjbyBvdSBzZSBqw6EgdHJhbnNpdG91IHBhcmEgdW1hIG5vdmEgZmFzZSByZWNlc3NpdmEuIEluZGVwZW5kZW50ZW1lbnRlIGRhIGRhdGHDp8OjbywgY29udHVkbywgbyBwb250byBjZW50cmFsIGRhIGFuw6FsaXNlIHBlcm1hbmVjZSBvIG1lc21vLiBTZSBvIEJyYXNpbCBhaW5kYSBzZSBlbmNvbnRyYSBlbSBleHBhbnPDo28sIGFzIGZyYWdpbGlkYWRlcyBvYnNlcnZhZGFzIHPDo28gZXhhdGFtZW50ZSBhcyBtZXNtYXMgcXVlIHByZWNlZGVyYW0gYSByZWNlc3PDo28gZGUgMjAxNOKAkzIwMTY6IGJhaXhhIHByb2R1dGl2aWRhZGUsIGludmVzdGltZW50byBpbnN0w6F2ZWwsIGVzdHJ1dHVyYSBwcm9kdXRpdmEgcG91Y28gYWx0ZXJhZGEgZSBjb250YXMgcMO6YmxpY2FzIGZyYWdpbGl6YWRhcy4gU2UgdW1hIG5vdmEgcmVjZXNzw6NvIGrDoSBlc3RpdmVyIGVtIGN1cnNvLCBlc3NhcyBtZXNtYXMgZnJhZ2lsaWRhZGVzIGVzdMOjbyBlbnRyZSBzdWFzIHByaW5jaXBhaXMgY2F1c2FzLg0KDQpFbSBxdWFscXVlciBkYXMgaGlww7N0ZXNlcywgYSBjb25jbHVzw6NvIMOpIGEgbWVzbWEuIE9zIHByb2JsZW1hcyBlc3RydXR1cmFpcyBxdWUgbGltaXRhbSBvIGNyZXNjaW1lbnRvIGRhIGVjb25vbWlhIGJyYXNpbGVpcmEgbsOjbyBzw6NvIG5vdm9zOiBmb3JhbSBpZGVudGlmaWNhZG9zIG5vIGNpY2xvIGRlIGV4cGFuc8OjbyBkZSAyMDA44oCTMjAxNCwgZXhwb3N0b3MgY29tIG5pdGlkZXogcGVsYSByZWNlc3PDo28gZGUgMjAxNOKAkzIwMTYgZSBzZWd1ZW0gcHJlc2VudGVzIG5vIGNpY2xvIGF0dWFsLiBFbnF1YW50byBlc3NhcyBxdWVzdMO1ZXMgZXN0cnV0dXJhaXMgbsOjbyBmb3JlbSBlZmV0aXZhbWVudGUgZW5mcmVudGFkYXMgLSBzb2JyZXR1ZG8gbm8gcXVlIGRpeiByZXNwZWl0byDDoCBwcm9kdXRpdmlkYWRlIGUgYW8gaW52ZXN0aW1lbnRvIHByb2R1dGl2byAtIGEgZWNvbm9taWEgYnJhc2lsZWlyYSB0ZW5kZSBhIHBlcm1hbmVjZXIgcHJlc2EgZW0gY2ljbG9zIGN1cnRvcyBkZSBjcmVzY2ltZW50byBtb2RlcmFkbyBzZWd1aWRvcyBwb3IgcmVjZXNzw7VlcyBwcm9mdW5kYXMsIHNlbSBjb25zZWd1aXIgY29uc29saWRhciB1bWEgdHJhamV0w7NyaWEgZGUgZXhwYW5zw6NvIHN1c3RlbnTDoXZlbCBubyBsb25nbyBwcmF6by4NCg0KIyMgUmVmZXLDqm5jaWFzDQoNCkFCRUwsIEFuZHJldyBCLjsgQkVSTkFOS0UsIEJlbiBTLjsgQ1JPVVNIT1JFLCBEZWFuLiBNYWNyb2Vjb25vbWlhLiA2LiBlZC4gU8OjbyBQYXVsbzogUGVhcnNvbiBBZGRpc29uIFdlc2xleSwgMjAwOC5BR8OKTkNJQSBCUkFTSUwuIEZpdGNoIHJlYmFpeGEgbm90YSBlIEJyYXNpbCBwZXJkZSBncmF1IGRlIGludmVzdGltZW50by4gQnJhc8OtbGlhOiBFQkMsIDIwMTUuIERpc3BvbsOtdmVsIGVtOiBodHRwczovL2FnZW5jaWFicmFzaWwuZWJjLmNvbS5ici9lY29ub21pYS9ub3RpY2lhLzIwMTUtMTIvZml0Y2gtcmViYWl4YS1icmFzaWwtZS1wYWlzLXBlcmRlLWdyYXUtZGUtaW52ZXN0aW1lbnRvLiBBY2Vzc28gZW06IDI1IG1haW8gMjAyNi5CQUxBU1NJQU5PLCBNYXJjZWwuIFJlY2Vzc8OjbyBicmFzaWxlaXJhICgyMDE0LTIwMTYpOiB1bWEgYW7DoWxpc2UgcG9yIG1laW8gZG8gbcOpdG9kbyBkbyBjb250cm9sZSBzaW50w6l0aWNvIGRvIFBJQiwgUElCIHBlciBjYXBpdGEsIHRheGEgZGUgaW52ZXN0aW1lbnRvIGUgdGF4YSBkZSBkZXNlbXByZWdvLiBCbG9nIGRvIElCUkUsIDIwMTguIERpc3BvbsOtdmVsIGVtOiBodHRwczovL2Jsb2dkb2licmUuZmd2LmJyL3Bvc3RzL3JlY2Vzc2FvLWJyYXNpbGVpcmEtMjAxNC0yMDE2LXVtYS1hbmFsaXNlLXBvci1tZWlvLWRvLW1ldG9kby1kby1jb250cm9sZS1zaW50ZXRpY28tZG8tcGliLXBpYi4gQWNlc3NvIGVtOiAyNSBtYWlvIDIwMjYuQkFOQ08gQ0VOVFJBTCBETyBCUkFTSUwuIFNpc3RlbWEgR2VyZW5jaWFkb3IgZGUgU8OpcmllcyBUZW1wb3JhaXMgKFNHUyk6IHPDqXJpZXMgZGUgY3LDqWRpdG8sIFNlbGljIGUgaW5kaWNhZG9yZXMgbW9uZXTDoXJpb3MuIEJyYXPDrWxpYTogQkNCLCAyMDI0LiBEaXNwb27DrXZlbCBlbTogaHR0cHM6Ly93d3czLmJjYi5nb3YuYnIvc2dzcHViLy4gQWNlc3NvIGVtOiAyNSBtYWlvIDIwMjYuQkFSUkVUTywgRmzDoXZpbyBBdGFsaWJhOyBBVkVMSU5PLCBQZWRybzsgRlJBTsOHQSwgSm/Do28gTcOhcmlvIFNhbnRvcyBkZS4gTm92YXMgZXZpZMOqbmNpYXMgc29icmUgbyBwZXNvIGRvIGNyw6lkaXRvIG5hcyBmYW3DrWxpYXMgYnJhc2lsZWlyYXMuIEJsb2cgZG8gSUJSRSwgMjAyNi4gRGlzcG9uw612ZWwgZW06IGh0dHBzOi8vYmxvZ2RvaWJyZS5mZ3YuYnIvcG9zdHMvbm92YXMtZXZpZGVuY2lhcy1zb2JyZS1vLXBlc28tZG8tY3JlZGl0by1uYXMtZmFtaWxpYXMtYnJhc2lsZWlyYXMuIEFjZXNzbyBlbTogMjUgbWFpbyAyMDI2LkNPTUlUw4ogREUgREFUQcOHw4NPIERFIENJQ0xPUyBFQ09Ow5RNSUNPUyAoQ09EQUNFKS4gQ3Jvbm9sb2dpYSBkZSBDaWNsb3MgZGEgRWNvbm9taWEgQnJhc2lsZWlyYS4gUmlvIGRlIEphbmVpcm86IEZHViBJQlJFLCAyMDI0LiBEaXNwb27DrXZlbCBlbTogaHR0cHM6Ly9wb3J0YWxpYnJlLmZndi5ici9jb2RhY2UtY3Jvbm9sb2dpYS4gQWNlc3NvIGVtOiAyNSBtYWlvIDIwMjYuQ1JJU0UgZWNvbsO0bWljYSBicmFzaWxlaXJhIGRlIDIwMTQuIEluOiBXSUtJUMOJRElBOiBhIGVuY2ljbG9ww6lkaWEgbGl2cmUuIFtTLiBsLl0sIDIwMjUuIERpc3BvbsOtdmVsIGVtOiBodHRwczovL3B0Lndpa2lwZWRpYS5vcmcvd2lraS9DcmlzZV9lY29uJUMzJUI0bWljYV9icmFzaWxlaXJhX2RlXzIwMTQuIEFjZXNzbyBlbTogMjUgbWFpbyAyMDI2LkRFUEFSVEFNRU5UTyBJTlRFUlNJTkRJQ0FMIERFIEVTVEFUw41TVElDQSBFIEVTVFVET1MgU09DSU9FQ09Ow5RNSUNPUy4gTm90YSB0w6ljbmljYSBuwrogNzk6IHBvbMOtdGljYSBkZSB2YWxvcml6YcOnw6NvIGRvIHNhbMOhcmlvIG3DrW5pbW8g4oCUIHZhbG9yIHBhcmEgMjAwOS4gU8OjbyBQYXVsbzogRElFRVNFLCAyMDA5LiBEaXNwb27DrXZlbCBlbTogaHR0cHM6Ly93d3cuZGllZXNlLm9yZy5ici9ub3RhdGVjbmljYS8yMDA5L25vdGF0ZWM3OVNhbE1pbjIwMDkuaHRtbC4gQWNlc3NvIGVtOiAyNSBtYWlvIDIwMjYuREVQQVJUQU1FTlRPIElOVEVSU0lORElDQUwgREUgRVNUQVTDjVNUSUNBIEUgRVNUVURPUyBTT0NJT0VDT07DlE1JQ09TLiBOb3RhIHTDqWNuaWNhIG7CuiAxMzU6IGEgZXZvbHXDp8OjbyBkbyBjcsOpZGl0byBuYSBlY29ub21pYSBicmFzaWxlaXJhIDIwMDjigJMyMDE0LiBTw6NvIFBhdWxvOiBESUVFU0UsIDIwMTQuIERpc3BvbsOtdmVsIGVtOiBodHRwczovL3d3dy5kaWVlc2Uub3JnLmJyL25vdGF0ZWNuaWNhLzIwMTQvbm90YVRlYzEzNUNyZWRpdG8ucGRmLiBBY2Vzc28gZW06IDI1IG1haW8gMjAyNi5FLUPDgUxDVUxPUy4gSGlzdMOzcmljbyBkbyBzYWzDoXJpbyBtw61uaW1vLiBbcy5sLjogcy5uLiwgcy5kLl0uIERpc3BvbsOtdmVsIGVtOiBodHRwczovL3d3dy5lY2FsY3Vsb3MuY29tLmJyL3V0aWxpdGFyaW9zL2hpc3Rvcmljby1zYWxhcmlvLW1pbmltby5waHAuIEFjZXNzbyBlbTogMjUgbWFpbyAyMDI2LkZVTkRBw4fDg08gR0VUVUxJTyBWQVJHQVMuIEluc3RpdHV0byBCcmFzaWxlaXJvIGRlIEVjb25vbWlhIChGR1YgSUJSRSkuIEluZGljYWRvcmVzIHRyaW1lc3RyYWlzIGRlIFBURjogNMK6IHRyaW1lc3RyZSBkZSAyMDI1LiBSaW8gZGUgSmFuZWlybzogRkdWIElCUkUsIDIwMjYuIERpc3BvbsOtdmVsIGVtOiBodHRwczovL2licmUuZmd2LmJyL3NpdGVzL2licmUuZmd2LmJyL2ZpbGVzL2FycXVpdm9zL3U2NS9pbmRpY2Fkb3Jlc190cmltZXN0cmFpc19kZV9wdGZfLV80dDIwMjUucGRmLiBBY2Vzc28gZW06IDI1IG1haW8gMjAyNi5GVU5EQcOHw4NPIEdFVFVMSU8gVkFSR0FTLiBJbnN0aXR1dG8gQnJhc2lsZWlybyBkZSBFY29ub21pYSAoRkdWIElCUkUpLiBPYnNlcnZhdMOzcmlvIGRhIFByb2R1dGl2aWRhZGUgUmVnaXMgQm9uZWxsaS4gUmlvIGRlIEphbmVpcm86IEZHViBJQlJFLCAyMDI0LiBEaXNwb27DrXZlbCBlbTogaHR0cHM6Ly9pYnJlLmZndi5ici9vYnNlcnZhdG9yaW8tcHJvZHV0aXZpZGFkZS4gQWNlc3NvIGVtOiAyNSBtYWlvIDIwMjYuRlVOREHDh8ODTyBHRVRVTElPIFZBUkdBUy4gSW5zdGl0dXRvIEJyYXNpbGVpcm8gZGUgRWNvbm9taWEgKEZHViBJQlJFKS4gUG9ydGFsIGRvIENpY2xvIEVjb27DtG1pY28uIFJpbyBkZSBKYW5laXJvOiBGR1YgSUJSRSwgMjAyNC4gRGlzcG9uw612ZWwgZW06IGh0dHBzOi8vY2ljbG8tZWNvbm9taWNvLWlicmUuZmd2LmJyLy4gQWNlc3NvIGVtOiAyNSBtYWlvIDIwMjYuRlVOREHDh8ODTyBHRVRVTElPIFZBUkdBUy4gSW5zdGl0dXRvIEJyYXNpbGVpcm8gZGUgRWNvbm9taWEgKEZHViBJQlJFKS4gUmVzdWx0YWRvcyBkb3MgaW5kaWNhZG9yZXMgZGUgcHJvZHV0aXZpZGFkZSBkbyB0cmFiYWxobyBubyBxdWFydG8gdHJpbWVzdHJlIGRlIDIwMjUuIEJsb2cgZG8gSUJSRSwgMjAyNi4gRGlzcG9uw612ZWwgZW06IGh0dHBzOi8vYmxvZ2RvaWJyZS5mZ3YuYnIvcG9zdHMvcmVzdWx0YWRvcy1kb3MtaW5kaWNhZG9yZXMtZGUtcHJvZHV0aXZpZGFkZS1kby10cmFiYWxoby1uby1xdWFydG8tdHJpbWVzdHJlLWRlLTIwMjUuIEFjZXNzbyBlbTogMjUgbWFpbyAyMDI2LkZVTkRBw4fDg08gR0VUVUxJTyBWQVJHQVMuIEluc3RpdHV0byBCcmFzaWxlaXJvIGRlIEVjb25vbWlhIChGR1YgSUJSRSkuIFNvYnJlIGNpY2xvcyBlY29uw7RtaWNvcy4gUmlvIGRlIEphbmVpcm86IEZHViBJQlJFLCAyMDI0LiBEaXNwb27DrXZlbCBlbTogaHR0cHM6Ly9wb3J0YWxpYnJlLmZndi5ici9zb2JyZS1jaWNsb3MtZWNvbm9taWNvcy4gQWNlc3NvIGVtOiAyNSBtYWlvIDIwMjYuRlVOREHDh8ODTyBHRVRVTElPIFZBUkdBUy4gSW5zdGl0dXRvIEJyYXNpbGVpcm8gZGUgRWNvbm9taWEgKEZHViBJQlJFKS4gU29uZGFnZW5zLCDDjW5kaWNlcyBkZSBDb25maWFuw6dhIGUgSW5kaWNhZG9yZXMgZGUgQXRpdmlkYWRlLiBSaW8gZGUgSmFuZWlybzogRkdWIElCUkUsIFsyMDI2XS4gRGlzcG9uw612ZWwgZW06IGh0dHBzOi8vcG9ydGFsaWJyZS5mZ3YuYnIuIEFjZXNzbyBlbTogMjUgbWFpbyAyMDI2LklOU1RJVFVUTyBCUkFTSUxFSVJPIERFIEdFT0dSQUZJQSBFIEVTVEFUw41TVElDQS4gQ29udGFzIE5hY2lvbmFpcyBUcmltZXN0cmFpcy4gUmlvIGRlIEphbmVpcm86IElCR0UsIDIwMjQuIERpc3BvbsOtdmVsIGVtOiBodHRwczovL3d3dy5pYmdlLmdvdi5ici9lc3RhdGlzdGljYXMvZWNvbm9taWNhcy9jb250YXMtbmFjaW9uYWlzLzkzMDAtY29udGFzLW5hY2lvbmFpcy10cmltZXN0cmFpcy5odG1sLiBBY2Vzc28gZW06IDI1IG1haW8gMjAyNi5JTlNUSVRVVE8gQlJBU0lMRUlSTyBERSBHRU9HUkFGSUEgRSBFU1RBVMONU1RJQ0EuIEV2b2x1w6fDo28gZG8gTWVyY2FkbyBkZSBUcmFiYWxobzogcmV0cm9zcGVjdGl2YSAyMDAz4oCTMjAxNC4gUmlvIGRlIEphbmVpcm86IElCR0UsIDIwMTUuIERpc3BvbsOtdmVsIGVtOiBodHRwczovL2Z0cC5pYmdlLmdvdi5ici9UcmFiYWxob19lX1JlbmRpbWVudG8vUGVzcXVpc2FfTWVuc2FsX2RlX0VtcHJlZ28vRXZvbHVjYW9fTWVyY2Fkb19UcmFiYWxoby9yZXRyb3NwZWN0aXZhMjAwM18yMDE0LnBkZi4gQWNlc3NvIGVtOiAyNSBtYWlvIDIwMjYuSU5TVElUVVRPIEJSQVNJTEVJUk8gREUgR0VPR1JBRklBIEUgRVNUQVTDjVNUSUNBLiDDjW5kaWNlIE5hY2lvbmFsIGRlIFByZcOnb3MgYW8gQ29uc3VtaWRvciAoSU5QQykuIFJpbyBkZSBKYW5laXJvOiBJQkdFLCBbMjAyNl0uIERpc3BvbsOtdmVsIGVtOiBodHRwczovL3d3dy5pYmdlLmdvdi5ici9lc3RhdGlzdGljYXMvZWNvbm9taWNhcy9wcmVjb3MtZS1jdXN0b3MvOTI1OC1pbmRpY2UtbmFjaW9uYWwtZGUtcHJlY29zLWFvLWNvbnN1bWlkb3IuaHRtbC4gQWNlc3NvIGVtOiAyNSBtYWlvIDIwMjYuSU5TVElUVVRPIEJSQVNJTEVJUk8gREUgR0VPR1JBRklBIEUgRVNUQVTDjVNUSUNBLiBQZXNxdWlzYSBNZW5zYWwgZGUgRW1wcmVnbyAoUE1FKS4gUmlvIGRlIEphbmVpcm86IElCR0UsIFsyMDI2XS4gRGlzcG9uw612ZWwgZW06IGh0dHBzOi8vd3d3LmliZ2UuZ292LmJyL2VzdGF0aXN0aWNhcy9zb2NpYWlzL3RyYWJhbGhvLzkxODAtcGVzcXVpc2EtbWVuc2FsLWRlLWVtcHJlZ28uaHRtbC4gQWNlc3NvIGVtOiAyNSBtYWlvIDIwMjYuSU5TVElUVVRPIEJSQVNJTEVJUk8gREUgR0VPR1JBRklBIEUgRVNUQVTDjVNUSUNBLiBQZXNxdWlzYSBOYWNpb25hbCBwb3IgQW1vc3RyYSBkZSBEb21pY8OtbGlvcyBDb250w61udWEgKFBOQUQgQ29udMOtbnVhKS4gUmlvIGRlIEphbmVpcm86IElCR0UsIFsyMDI2XS4gRGlzcG9uw612ZWwgZW06IGh0dHBzOi8vc2lkcmEuaWJnZS5nb3YuYnIvVGFiZWxhLzE4NDYuIEFjZXNzbyBlbTogMjUgbWFpbyAyMDI2LklOU1RJVFVUTyBCUkFTSUxFSVJPIERFIEdFT0dSQUZJQSBFIEVTVEFUw41TVElDQS4gU2lzdGVtYSBJQkdFIGRlIFJlY3VwZXJhw6fDo28gQXV0b23DoXRpY2EgKFNJRFJBKTogVGFiZWxhcyA1OTMyIChDb250YXMgTmFjaW9uYWlzIFRyaW1lc3RyYWlzKSBlIDQwOTkgKFBOQUQgQ29udMOtbnVhKS4gUmlvIGRlIEphbmVpcm86IElCR0UsIDIwMjQuIERpc3BvbsOtdmVsIGVtOiBodHRwczovL3NpZHJhLmliZ2UuZ292LmJyLy4gQWNlc3NvIGVtOiAyNSBtYWlvIDIwMjYuUkFORE8sIEltaXJhIFRhaXJhLiBPIEJyYXNpbCBlIGEgY3Jpc2UgZmluYW5jZWlyYTogcG9sw610aWNhcyBlY29uw7RtaWNhcyAoMjAwOOKAkzIwMTQpLiBUcmFiYWxobyBkZSBjb25jbHVzw6NvIGRlIGN1cnNvIOKAlCBGYWN1bGRhZGUgZGUgQ2nDqm5jaWFzIGUgTGV0cmFzLCBVbml2ZXJzaWRhZGUgRXN0YWR1YWwgUGF1bGlzdGEgIkrDumxpbyBkZSBNZXNxdWl0YSBGaWxobyIsIENhbXB1cyBkZSBBcmFyYXF1YXJhLCBbcy5kLl0uIERpc3BvbsOtdmVsIGVtOiBodHRwczovL3JlcG9zaXRvcmlvLnVuZXNwLmJyL3NlcnZlci9hcGkvY29yZS9iaXRzdHJlYW1zL2JmNzg4MTYxLWM0YzgtNGRiMy05MDVlLTA3OTFlYzhlNGU1NS9jb250ZW50LiBBY2Vzc28gZW06IDI1IG1haW8gMjAyNi5WRUxPU08sIEZlcm5hbmRvOyBGRUlKw5MsIEphbmHDrW5hOyBCQVJCT1NBIEZJTEhPLCBGZXJuYW5kbyBkZSBIb2xhbmRhOyBSVUhFLCBBbmEgUGF1bGEuIMONbmRpY2UgZGUgQ2FwaXRhbCBIdW1hbm8gKElDSCkgQW51YWwuIFJpbyBkZSBKYW5laXJvOiBGR1YgSUJSRSwganVuLiAyMDIzLiBEaXNwb27DrXZlbCBlbTogaHR0cHM6Ly9pYnJlLmZndi5ici9zaXRlcy9pYnJlLmZndi5ici9maWxlcy9hcnF1aXZvcy91NjUvaWNoX2FudWFsX2ZpbmFsLnBkZi4gQWNlc3NvIGVtOiAyNSBtYWlvIDIwMjYu