Secciones

Introducción


Introducción



El presente informe tiene como objetivo visibilizar las condiciones de trabajo, ingresos, y principales características de las trabajadoras que prestan servicio doméstico en hogares particulares. Para ello se presentan diversos indicadores, cuadros y gráficos de elaboración propia respondiendo a preguntas como ¿Cuántas personas se dedican a brindar servicios domésticos en hogares?, ¿Qué tan feminizado se encuentra el sector?, ¿Tienen jornadas completas de trabajo?, ¿Cuánto cobran por mes?¿Y por hora?, ¿Qué tanto se respetan sus derechos laborales?, ¿También son quienes realizan las tareas domésticas en su propio hogar?, ¿Son el principal sostén económico de sus hogares?, y también se realiza una comparación con otras ramas de ocupaciones.

Para realizar los cálculos se utilizan bases de datos publicadas por la Encuesta Permanente de Hogares del INDEC, en este caso referidas al 3er trimestre de 2020. Esta encuesta releva características demográficas, sociales, económicas, con especial atención a las formas de participación en el mercado laboral, entre hogares y personas de 31 aglomerados urbanos (pensémoslo como las grandes ciudades del país).

Respecto del impacto de la pandemia por COVID-19 y el aislamiento social preventivo y obligatorio (ASPO), tanto sobre los resultados como sobre la calidad de los datos, cabe aclarar que la encuesta pasó de la modalidad presencial a la telefónica para contactar y realizar la entrevista a los hogares. El propio INDEC advierte que ciertos datos no cuentan con la calidad con la que habitualmente la EPH presenta sus resultados.

El documento se realizó utilizando el lenguaje de programación R, y para les curioses todo el código se encuentra disponible para su descarga.

Este reporte puede volverse un poco técnico por momentos, pero desde EcoFeminita realizamos también otras notas de carácter divulgatorio. Obviamente, estás invitade a utilizar estos datos en notas, reflexiones, trabajos, infografías, etc. Además, si te gusta lo que hacemos podés apoyarnos potenciando nuestros proyectos, haciéndote socie del #ClubEcofeminita o realizando una donación.

Si necesitás citarnos en un trabajo, podés hacerlo como: “Shokida Natsumi, Serpa Daiana, Domenech Laia, Moure Julieta, Fernández Erlauer Micaela, Espiñeira Lucía, & Santellán Celina. (2021). Ecofeminita/EcoFemiData: informes ecofemidata. Zenodo. http://doi.org/10.5281/zenodo.4540185

Trabajadoras de servicio doméstico


Trabajadoras de servicio doméstico



El interés por analizar distintas características de las trabajadoras de servicio doméstico radica principalmente en la magnitud que dicha ocupación presenta, en su estrecho vínculo con la división sexual del trabajo y la feminización de este sector y, como veremos luego, por las particularmente diferenciadas condiciones, acceso a derechos y bajos ingresos que perciben a cambio de su trabajo. Entre las grandes ciudades del país, pueden contarse casi 660 mil personas que componen al sector, lo cual representa una drástica disminución respecto de las cifras habitualmente observadas. A su vez, la tasa de feminidad del sector es del 98%. Es decir que casi en su totalidad se trata de trabajadoras mujeres. Es por esto que, a lo largo de todo el informe, utilizaremos pronombres femeninos a la hora de generalizar, aunque muchas veces estemos hablando del conjunto de les trabajadores que se dedican a esta actividad. A su vez, cabe destacar que el ejercicio debe ser realizado en términos cis-binarios por falta de información respecto de las identidades trans-travesti en las estadísticas oficiales.

Las trabajadoras que realizan tareas domésticas y de cuidado en hogares particulares representan un 14% dentro del total de ocupadas mujeres. Esto significa que una de cada 7 ocupadas en Argentina trabaja en este sector de la economía. Al mismo tiempo, estas trabajadoras representan un 18,6% dentro del total de ocupadas-asalariadas. O sea que dentro de las mujeres que trabajan en relación de dependencia, alrededor de 1 de cada 5 tiene como ocupación principal el trabajo en hogares particulares. Como veremos más adelante, se trata de la ocupación más popular entre las mujeres. Hay que tener en cuenta que estos indicadores también responden al contexto pandémico del trimestre estudiado.


Cantidad de personas que se dedican al servicio doméstico

658.360

Porcentaje de mujeres y de varones en el sector

Sexo Porcentaje
Mujeres 97,9
Varones 2,1

Porcentaje de la ocupación dentro de las ocupadas mujeres

¿Se dedica al servicio doméstico? Porcentaje
No 86,0
14,0

Porcentaje de la ocupación dentro de las asalariadas mujeres

¿Se dedica al servicio doméstico? Porcentaje
No 81,4
18,6

Características


Algunas características de las trabajadoras de servicio doméstico



En esta sección se presentan algunas métricas respecto a la distribución etaria, el lugar de nacimiento y características educativas de las trabajadoras del sector de servicio doméstico. Se destaca la sobrerrepresentación de migrantes en el sector.


Edad


Mientras que un 43,2% de estas trabajadoras tienen entre 30 y 49 años, un 36,3% tiene entre 50 y 64 años. Por su parte, hay un 2,8% que continúa trabajando a pesar de haber superar los 65 años, y un 17,7% está compuesto por jóvenes que no llegan a los 30 años.


Composicion por edad de las trabajadoras del servicio doméstico

Edad Cantidad Porcentaje
de 14 a 29 años 116.621 17,7
de 30 a 49 años 284.278 43,2
de 50 a 64 años 239.120 36,3
65 años y más 18.341 2,8
Lugar de nacimiento


Considerando a la población en general, un 11,3% se encuentra viviendo en una provincia distinta a la que tiene como lugar de nacimiento, y un 3,4% proviene de un país limítrofe. Por su parte, en el caso de las trabajadoras de servicio doméstico, un 16% ha migrado de provincia y más del 10% proviene de un país limítrofe, es decir que las personas migrantes se encuentran sobrerrepresentadas en dicho sector de la economía. Puede observarse entonces que la ocupación está estrechamente relacionada con los fenómenos migratorios.


Lugar de nacimiento de las trabajadoras de servicio doméstico y del total de la población


                  En esta localidad En otra localidad de esta provincia                   En otra provincia 
                                716                                 120                                 128 
               En un país limítrofe                        En otro país                               NS/NR 
                                 41                                   6                                   1 
Trabajadoras de Servicio Doméstico
Población general
¿Dónde nació? 1. Cantidad 1. Porcentaje 2. Cantidad 2. Porcentaje
En esta localidad 437.431 66,4 22.376.775 78,5
En otra localidad de esta provincia 36.591 5,6 1.549.818 5,4
En otra provincia 105.262 16,0 3.207.445 11,3
En un país limítrofe 68.644 10,4 959.839 3,4

Nota: Las estimaciones correspondientes a aquellas personas que han nacido en otro país (no limítrofe) y aquellas que NS/NR la pregunta, no cuentan con suficientes casos muestrales como para garantizar significatividad del dato, por lo que se ha retirado del cuadro las categorías. En este trimestre en particular, la categoría “En un país limítrofe” para el caso de las Trabajadoras de Servicio Doméstico cuenta con 41 casos muestrales.

Educación


Más de la mitad de las trabajadoras del sector finalizó el nivel primario de escolaridad, a lo que se suma un 37,8% que cuenta también con el nivel secundario, en tanto un 8,3% no posee instrucción formal.


Composicion por nivel educativo de las trabajadoras del servicio doméstico

Nivel educativo Cantidad Porcentaje
Sin Instrucción 54.452 8,3
Primaria 345.425 52,5
Secundaria 249.061 37,8

Nota: La estimación correspondiente a aquellas que han finalizado un nivel superior de formación no cuenta con suficientes casos muestrales como para garantizar significatividad del dato, por lo que se ha retirado del cuadro la categoría.

Intensidad del trabajo


Intensidad del trabajo de las trabajadoras de servicio doméstico



En relación a la cantidad de horas que trabajan semanalmente las empleadas domésticas, un 50,1% son ocupadas “plenas”, es decir que trabajan entre 35 y 45 horas semanales, o están conformes con la cantidad de horas que trabajan. Al mismo tiempo un 29% se encuentra sub-ocupada, trabaja menos de 35 horas semanales por causas involuntarias, estando dispuestas a trabajar más horas. Por su parte, un 6,6% está sobre-ocupada, trabaja más de 45 horas por semana. Sin embargo, este trimestre se destaca porque un 14,3% son ocupadas que no se encontraban trabajando en la semana de referencia de la entrevista.

En cuanto a la cantidad de hogares en que se desempeñan, un 86,2% trabaja habitualmente en una sola casa, por lo que al mismo tiempo casi un 14% de ellas suele trabajar en más de una vivienda. Mientras que las que son contratadas por un sólo hogar trabajaron cerca de 23 horas semanales (jornada part-time), aquellas que trabajan en más de una casa trabajaron en promedio menos de 17 horas por semana en la ocupación principal, acercándose a las 20 o 24 horas semanales con las ocupaciones secundarias.


Trabajadoras de servicio doméstico según intensidad del trabajo

Intensidad Cantidad Porcentaje
Ocupada que no trabajó en la semana 94.329 14,3
Ocupadas plenas 329.807 50,1
Sobreocupadas 43.191 6,6
Subocupadas por insuficiencia horaria 191.033 29,0

Nota: La estimación correspondiente a aquellas que no trabajaron en la semana de referencia de la encuesta generalmente no cuenta con suficientes casos muestrales como para garantizar significatividad del dato, por lo que se suele retirar del cuadro la categoría. Este trimestre, la categoría cuenta con sólo 64 casos muestrales, pero se muestra a fines de comparar con el trimestre anterior.


Trabajadoras del servicio doméstico según la cantidad de hogares en los que trabajan

Cantidad de hogares en que trabaja Cantidad Porcentaje hs/sem en ocup. princ. hs/sem con ocup. secund.
1 484.419 85,9 22,5 22,8
2 53.313 9,5 14,0 20,5
3 o más 26.299 4,7 16,5 24,1

Derechos laborales


Derechos laborales de las trabajadoras de servicio doméstico



Dentro del conjunto de asalariades, un 28,7% no se encuentra registrade en la seguridad social. El mismo indicador asciende al 29,2% cuando hablamos de las asalariadas mujeres (estas tasas fueron del 35,8% y del 37,5% en el primer trimestre del año, respectivamente).
Pero también puede observarse que la problemática es particularmente incisiva entre las trabajadoras domésticas: un 65,2% de ellas no percibe descuento jubilatorio. Asociado a esto, un 59,8% de estas trabajadoras no cuenta con vacaciones pagas, un 60,8% no percibe aguinaldos, un 61,9% no percibe el pago en caso de enfermedad, y un 64,3% no cuenta con cobertura de salud mediante obra social.


En ese trabajo tiene…

Indicador No
¿Tiene descuento jubilatorio? 34,8 65,2
¿Tiene vacaciones pagas? 40,2 59,8
¿Tiene aguinaldo? 39,2 60,8
¿Tiene días pagos por enfermedad? 38,1 61,9
¿Tiene obra social? 35,7 64,3

Ingresos


Ingresos de las trabajadoras de servicio doméstico



Las trabajadoras del sector perciben ingresos que, en promedio, rondan los $9.700 pesos mensuales por su ocupación principal. Al mismo tiempo, un 50% de ellas cobra menos de $9.000 por mes por dicho trabajo. Esto equivale a que en promedio cobran unos $132 por hora, y el 50% cobra menos de $117 por hora. En el primer cuadro también pueden apreciarse los ingresos mensuales totales de fuente laboral (incluyendo ingresos de ocupaciones secundarias), los totales individuales (incluyendo ingresos que no provienen de una fuente laboral), los ingresos totales familiares que tienen en promedio los hogares de estas trabajadoras, y el ingreso per cápita familiar de estos mismos hogares.

En el segundo cuadro puede apreciarse que hay una amplia diferencia entre los ingresos que perciben en promedio las trabajadoras que se encuentran registradas respecto de aquellas que no, tanto en términos mensuales como por hora trabajada. Además, aquellas que tienen descuento jubilatorio trabajan más horas en su ocupación principal respecto que aquellas que no.

Si ordenamos al total de las personas ocupadas de acuerdo al nivel de ingresos que perciben por su ocupación principal, y las agrupamos en 10 grupos de igual tamaño, obtenemos los denominados deciles de ingreso. En el gráfico se muestra claramente que aquellas personas que trabajan en el sector de servicio doméstico se encuentran concentradas en los deciles de menores ingresos.

Ojo! Debe tenerse en cuenta que todos los montos están expresados en pesos del 3er trimestre de 2020.


Promedio y mediana de los ingresos de las trabajadoras de servicio doméstico y sus familias

Ingresos Ingreso promedio 50% cobra menos de
Mensuales, de la ocupación principal $10.602,76 $9.000,00
Por hora, de la ocupación principal $132,91 $116,67
Mensuales, total de fuente laboral $12.326,14 $10.000,00
Mensuales, ingreso total individual $19.276,75 $18.360,68
Mensuales, ingreso total familiar $48.835,82 $44.600,00
Mensuales, ingreso per cápita familiar $13.060,63 $10.865,27

Trabajadoras de servicio doméstico según si tienen descuento jubilatorio, sus ingresos y horas de trabajo promedio

¿Tiene descuento jubilatorio? Ingreso mensual promedio Ingreso por hora promedio hs/sem en ocup. princ.
$15.179,47 $167,36 24,6
No $8.673,70 $118,39 20,1

Trabajadoras de servicio domśtico según deciles de ingreso de la ocupación principal

Hogares


Algunas características referidas a los hogares de las trabajadoras de servicio doméstico



Si esta vez ordenamos al total de las personas de acuerdo a sus ingresos per cápita familiares (aquellos que surgen de dividir el total de ingresos de la familia por la cantidad de miembros de la misma), de menor a mayor, y las agrupamos en 10 grupos de igual tamaño, obtenemos otra escala de deciles. En este caso también se puede apreciar que las trabajadoras de servicio doméstico se concentran en los primeros deciles. Cabe destacar que los primeros tres deciles de esta escala suelen estar altamente relacionados con la situación de pobreza de los hogares (tomando como referencia la metodología oficial de cálculo de la misma).

Al mismo tiempo, mientras que un 51,6% no es el primer sostén económico del hogar, un 48,4% sí lo es. En ambos casos, la mayoría de ellas realizan las tareas domésticas en su hogar. Esto es así porque un 83,3% de quienes trabajan de forma remunerada realizando trabajo doméstico también están a cargo de la realización de este trabajo en sus hogares de manera no-asalariada, y por tanto no remunerada.


Trabajadoras de servicio domśtico según deciles de ingreso per cápita familiar


Trabajadoras de servicio doméstico según si perciben el ingreso principal de su grupo familiar y si son quienes realizan las tareas domésticas en su hogar

Comparación con otras ramas de la ocupación


Comparación con otras ramas de la ocupación



Es útil contextualizar muchos de los indicadores presentados realizando una comparación con otras ramas de ocupación. En esta sección se presenta una serie de gráficos que permiten realizar este ejercicio. En todos los casos se considera a la población asalariada, es decir a las personas que se desempeñan en el mercado laboral con una relación de dependencia, y teniendo en cuenta las características de la ocupación principal de estas personas.

Se destaca que el sector de servicio doméstico es uno de los más importantes del mercado laboral (aunque ha descendido en el “ranking” a la luz de una mayor ponderación de actividades como la administración pública o los servicios sociales y de salud en el marco de la crisis por COVID-19). También se trata de la rama más feminizada, una de las que más proporción ocupa dentro de las trabajadoras mujeres y la menos popular entre los varones. También es una de las ramas con tasa de no-registro más altas, y los ingresos promedios más bajos, tanto de bolsillo como por hora trabajada.


Cantidad de trabajadores

Tasa de feminización

Proporción entre las asalariadas mujeres

Proporción entre los asalariados varones

Tasa de no registro de la relación laboral

Ingresos mensuales promedio

Ingresos por hora promedio

LS0tCnRpdGxlOiAiTGFzIHRyYWJhamFkb3JhcyBkZSBzZXJ2aWNpbyBkb23DqXN0aWNvIGVuIEFyZ2VudGluYSIKc3VidGl0bGU6ICIzZXIgdHJpbWVzdHJlIGRlIDIwMjAiCmF1dGhvcjogIiNFY29GZW1pRGF0YSwgZXF1aXBvIGRlIGRhdG9zIGRlIEVjb25vbcOtYSBGZW1pbml0YSAtIE1hcnpvIGRlIDIwMjEiCm91dHB1dDogCiAgaHRtbF9ub3RlYm9vazoKICAgIHRoZW1lOiBmbGF0bHkKdXJsY29sb3I6ICNGRTE3NjQKLS0tCgo8c3R5bGU+Ci5uYXY+bGk+YSB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBkaXNwbGF5OiBibG9jazsKICAgIHBhZGRpbmc6IDEwcHggMTVweDsKICAgIGNvbG9yOiAjRkUxNzY0Owp9CgogLm5hdi1waWxscz5saS5hY3RpdmU+YSwgLm5hdi1waWxscz5saS5hY3RpdmU+YTpob3ZlciwgLm5hdi1waWxscz5saS5hY3RpdmU+YTpmb2N1cyB7CiAgICBjb2xvcjogI2ZmZmZmZjsKICAgIGJhY2tncm91bmQtY29sb3I6ICNGRTE3NjQ7Cn0KPC9zdHlsZT4KCi0tLQoKYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgaW5jbHVkZT1GQUxTRX0KZGF0ZSA8LSAiM2VyIHRyaW1lc3RyZSBkZSAyMDIwIiAgICAgICAgICAgICAgICAgICAgICAgICMgPC0tLS0tLS0tLS0tLS0tLS0tCmNhcHRpb24gPC0gIiNFY29GZW1pRGF0YSB5IEVjb0ZlbWluaXRhIGVuIGJhc2UgYSBFUEgtSU5ERUMiCmBgYAoKIyMgU2VjY2lvbmVzIHsudGFic2V0IC50YWJzZXQtZmFkZSAudGFic2V0LXBpbGxzfQoKIyMjIEludHJvZHVjY2nDs24KCi0tLQoKIyMjIyBJbnRyb2R1Y2Npw7NuCjxicj48YnI+CkVsIHByZXNlbnRlIGluZm9ybWUgdGllbmUgY29tbyBvYmpldGl2byB2aXNpYmlsaXphciBsYXMgY29uZGljaW9uZXMgZGUgdHJhYmFqbywgaW5ncmVzb3MsIHkgcHJpbmNpcGFsZXMgY2FyYWN0ZXLDrXN0aWNhcyBkZSBsYXMgdHJhYmFqYWRvcmFzIHF1ZSBwcmVzdGFuIHNlcnZpY2lvIGRvbcOpc3RpY28gZW4gaG9nYXJlcyBwYXJ0aWN1bGFyZXMuIFBhcmEgZWxsbyBzZSBwcmVzZW50YW4gZGl2ZXJzb3MgaW5kaWNhZG9yZXMsIGN1YWRyb3MgeSBncsOhZmljb3MgZGUgZWxhYm9yYWNpw7NuIHByb3BpYSByZXNwb25kaWVuZG8gYSBwcmVndW50YXMgY29tbyBfX8K/Q3XDoW50YXMgcGVyc29uYXMgc2UgZGVkaWNhbiBhIGJyaW5kYXIgc2VydmljaW9zIGRvbcOpc3RpY29zIGVuIGhvZ2FyZXM/LCDCv1F1w6kgdGFuIGZlbWluaXphZG8gc2UgZW5jdWVudHJhIGVsIHNlY3Rvcj8sIMK/VGllbmVuIGpvcm5hZGFzIGNvbXBsZXRhcyBkZSB0cmFiYWpvPywgwr9DdcOhbnRvIGNvYnJhbiBwb3IgbWVzP8K/WSBwb3IgaG9yYT8sIMK/UXXDqSB0YW50byBzZSByZXNwZXRhbiBzdXMgZGVyZWNob3MgbGFib3JhbGVzPywgwr9UYW1iacOpbiBzb24gcXVpZW5lcyByZWFsaXphbiBsYXMgdGFyZWFzIGRvbcOpc3RpY2FzIGVuIHN1IHByb3BpbyBob2dhcj8sIMK/U29uIGVsIHByaW5jaXBhbCBzb3N0w6luIGVjb27Ds21pY28gZGUgc3VzIGhvZ2FyZXM/LCB5IHRhbWJpw6luIHNlIHJlYWxpemEgdW5hIGNvbXBhcmFjacOzbiBjb24gb3RyYXMgcmFtYXMgZGUgb2N1cGFjaW9uZXNfXy4KPGJyPjxicj4KUGFyYSByZWFsaXphciBsb3MgY8OhbGN1bG9zIHNlIHV0aWxpemFuIGJhc2VzIGRlIGRhdG9zIHB1YmxpY2FkYXMgcG9yIGxhIEVuY3Vlc3RhIFBlcm1hbmVudGUgZGUgSG9nYXJlcyBkZWwgSU5ERUMsIGVuIGVzdGUgY2FzbyByZWZlcmlkYXMgYWwgYHIgZGF0ZWAuIEVzdGEgZW5jdWVzdGEgcmVsZXZhIGNhcmFjdGVyw61zdGljYXMgZGVtb2dyw6FmaWNhcywgc29jaWFsZXMsIGVjb27Ds21pY2FzLCBjb24gZXNwZWNpYWwgYXRlbmNpw7NuIGEgbGFzIGZvcm1hcyBkZSBwYXJ0aWNpcGFjacOzbiBlbiBlbCBtZXJjYWRvIGxhYm9yYWwsIGVudHJlIGhvZ2FyZXMgeSBwZXJzb25hcyBkZSAzMSBhZ2xvbWVyYWRvcyB1cmJhbm9zIChwZW5zw6ltb3NsbyBjb21vIGxhcyBncmFuZGVzIGNpdWRhZGVzIGRlbCBwYcOtcykuCjxicj48YnI+ClJlc3BlY3RvIGRlbCBpbXBhY3RvIGRlIGxhIHBhbmRlbWlhIHBvciBDT1ZJRC0xOSB5IGVsIGFpc2xhbWllbnRvIHNvY2lhbCBwcmV2ZW50aXZvIHkgb2JsaWdhdG9yaW8gKEFTUE8pLCB0YW50byBzb2JyZSBsb3MgcmVzdWx0YWRvcyBjb21vIHNvYnJlIGxhIGNhbGlkYWQgZGUgbG9zIGRhdG9zLCBjYWJlIGFjbGFyYXIgcXVlIGxhIGVuY3Vlc3RhIHBhc8OzIGRlIGxhIG1vZGFsaWRhZCBwcmVzZW5jaWFsIGEgbGEgdGVsZWbDs25pY2EgcGFyYSBjb250YWN0YXIgeSByZWFsaXphciBsYSBlbnRyZXZpc3RhIGEgbG9zIGhvZ2FyZXMuIEVsIHByb3BpbyBJTkRFQyBhZHZpZXJ0ZSBxdWUgY2llcnRvcyBkYXRvcyBubyBjdWVudGFuIGNvbiBsYSBjYWxpZGFkIGNvbiBsYSBxdWUgaGFiaXR1YWxtZW50ZSBsYSBFUEggcHJlc2VudGEgc3VzIHJlc3VsdGFkb3MuCjxicj48YnI+CkVsIGRvY3VtZW50byBzZSByZWFsaXrDsyB1dGlsaXphbmRvIGVsIGxlbmd1YWplIGRlIHByb2dyYW1hY2nDs24gUiwgeSBwYXJhIGxlcyBjdXJpb3NlcyB0b2RvIGVsIGPDs2RpZ28gc2UgZW5jdWVudHJhIGRpc3BvbmlibGUgcGFyYSBzdSBkZXNjYXJnYS4KPGJyPjxicj4KRXN0ZSByZXBvcnRlIHB1ZWRlIHZvbHZlcnNlIHVuIHBvY28gdMOpY25pY28gcG9yIG1vbWVudG9zLCBwZXJvIGRlc2RlIFtFY29GZW1pbml0YV0oaHR0cDovL2Vjb25vbWlhZmVtaW5pdGEuY29tLykgcmVhbGl6YW1vcyB0YW1iacOpbiBvdHJhcyBub3RhcyBkZSBjYXLDoWN0ZXIgZGl2dWxnYXRvcmlvLiBPYnZpYW1lbnRlLCBlc3TDoXMgaW52aXRhZGUgYSB1dGlsaXphciBlc3RvcyBkYXRvcyBlbiBub3RhcywgcmVmbGV4aW9uZXMsIHRyYWJham9zLCBpbmZvZ3JhZsOtYXMsIGV0Yy4gQWRlbcOhcywgc2kgdGUgZ3VzdGEgbG8gcXVlIGhhY2Vtb3MgcG9kw6lzIGFwb3lhcm5vcyBwb3RlbmNpYW5kbyBudWVzdHJvcyBwcm95ZWN0b3MsIGhhY2nDqW5kb3RlIHNvY2llIGRlbCBbI0NsdWJFY29mZW1pbml0YSBvIHJlYWxpemFuZG8gdW5hIGRvbmFjacOzbl0oaHR0cHM6Ly9kb25hcm9ubGluZS5vcmcvZWNvbm9taWEtZmVtaW5pLXMtdGEvY2x1Yi1lY29mZW1pbml0YSkuCjxicj48YnI+ClNpIG5lY2VzaXTDoXMgY2l0YXJub3MgZW4gdW4gdHJhYmFqbywgcG9kw6lzIGhhY2VybG8gY29tbzogIlNob2tpZGEgTmF0c3VtaSwgU2VycGEgRGFpYW5hLCBEb21lbmVjaCBMYWlhLCBNb3VyZSBKdWxpZXRhLCBGZXJuw6FuZGV6IEVybGF1ZXIgTWljYWVsYSwgRXNwacOxZWlyYSBMdWPDrWEsICYgU2FudGVsbMOhbiBDZWxpbmEuICgyMDIxKS4gRWNvZmVtaW5pdGEvRWNvRmVtaURhdGE6IGluZm9ybWVzIGVjb2ZlbWlkYXRhLiBaZW5vZG8uIGh0dHA6Ly9kb2kub3JnLzEwLjUyODEvemVub2RvLjQ1NDAxODUiCgpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQojIFNlIGNhcmdhbiBsaWJyZXLDrWFzIMO6dGlsZXMKbGlicmFyeSh0aWR5dmVyc2UpCmxpYnJhcnkoaHR0cikKbGlicmFyeShzdHJpbmdyKQojIGxpYnJhcnkob3Blbnhsc3gpCmxpYnJhcnkoaGF2ZW4pCiMgbGlicmFyeShyZWFkeGwpCmxpYnJhcnkoZ2d0aGVtZXMpCmxpYnJhcnkoc2NhbGVzKQpsaWJyYXJ5KGtuaXRyKQpsaWJyYXJ5KGdnYWx0KQpsaWJyYXJ5KGthYmxlRXh0cmEpCmxpYnJhcnkoZm9ybWF0dGFibGUpCmxpYnJhcnkocXVlc3Rpb25yKQpsaWJyYXJ5KGhyYnJ0aGVtZXMpCmxpYnJhcnkoZXBoKSAjIFVuIHBhcXVldGUgcGFyYSB0cmFiYWphciBjb24gbGFzIGJhc2VzIGRlIGxhIEVuY3Vlc3RhIHBlcm1hbmVudGUgZGUgSG9nYXJlcyEKIyBDb21vIGZ1ZW50ZSB0b21hbW9zIHVuIHNjcmlwdCBjb24gZnVuY2lvbmVzIGRlIGZvcm1hdG8gcGFyYSBsb3MgZGF0b3MuCiMgc291cmNlKCIuLi8uLi9SL2Z1bmNpb25lcyByYW1hLlIiKSAKc291cmNlKCIuLi8uLi9SL2Z1bmNpb25lcyBmb3JtYXRvLlIiKQpgYGAKCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGluY2x1ZGU9RkFMU0V9CiMgQ2FyZ28gYmFzZSBkZSBFUEggY29uIGVsIHBhcXVldGUgZXBoCmJhc2VfaW5kaXZpZHVhbCA8LSBlcGg6OmdldF9taWNyb2RhdGEoeWVhciA9IDIwMjAsIHRyaW1lc3RlciA9IDMsIHR5cGUgPSAgImluZGl2aWR1YWwiKSAjIDwtLS0tLS0tLS0tLS0tLS0tLQpiYXNlX2hvZ2FyIDwtIGVwaDo6Z2V0X21pY3JvZGF0YSh5ZWFyID0gMjAyMCwgdHJpbWVzdGVyID0gMywgdHlwZSA9ICAiaG9nYXIiKSAgICAgICAgICAgIyA8LS0tLS0tLS0tLS0tLS0tLS0KYGBgCgpgYGB7ciwgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0KIyBNb2RpZmljYWNpb25lcyBlbiBsYSBiYXNlIGRlIGluZGl2aWR1b3MKYmFzZV9pbmRpdmlkdWFsIDwtIGJhc2VfaW5kaXZpZHVhbCAlPiUgCiAgbXV0YXRlKFNleG8gPSBhcy5jaGFyYWN0ZXIoQ0gwNCksCiAgICAgICAgIFNleG8gPSBjYXNlX3doZW4oU2V4bz09IjEiIH4gIlZhcm9uZXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgIFNleG89PSIyIiB+ICJNdWplcmVzIiksCiAgICAgICAgIE5JVkVMX0VEVUNBVElWTyA9IGNhc2Vfd2hlbihOSVZFTF9FRCAlaW4lIGMoMSwgNykgfiAiU2luIEluc3RydWNjacOzbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOSVZFTF9FRCAlaW4lIGMoMiwgMykgfiAiUHJpbWFyaWEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTklWRUxfRUQgJWluJSBjKDQsIDUpIH4gIlNlY3VuZGFyaWEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTklWRUxfRUQgPT0gNiAgICAgICAgIH4gIlN1cGVyaW9yIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5JVkVMX0VEID09IDkgICAgICAgICB+ICJOUy9OUiIpLAogICAgICAgICBOSVZFTF9FRFVDQVRJVk8gPSBmYWN0b3IoTklWRUxfRURVQ0FUSVZPLCBsZXZlbHMgPSBjKCJTaW4gSW5zdHJ1Y2Npw7NuIiwgIlByaW1hcmlhIiwgIlNlY3VuZGFyaWEiLCAiU3VwZXJpb3IiKSksCiAgICAgICAgIEdSVVBPX0VEQUQgPSBjYXNlX3doZW4oQ0gwNiA+PSAxNCAmIENIMDYgPD0gMjkgfiAiZGUgMTQgYSAyOSBhw7FvcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0gwNiA+PSAzMCAmIENIMDYgPD0gNDkgfiAiZGUgMzAgYSA0OSBhw7FvcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0gwNiA+PSA1MCAmIENIMDYgPD0gNjQgfiAiZGUgNTAgYSA2NCBhw7FvcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0gwNiA+PSA2NSAgICAgICAgICAgICAgfiAiNjUgYcOxb3MgeSBtw6FzIiksCiAgICAgICAgIEdSVVBPX0VEQUQgPSBmYWN0b3IoR1JVUE9fRURBRCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygiZGUgMTQgYSAyOSBhw7FvcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGUgMzAgYSA0OSBhw7FvcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGUgNTAgYSA2NCBhw7FvcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiNjUgYcOxb3MgeSBtw6FzIikpLAogICAgICAgICBET05ERV9OQUNJTyA9IGNhc2Vfd2hlbihDSDE1ID09IDEgfiAiRW4gZXN0YSBsb2NhbGlkYWQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSDE1ID09IDIgfiAiRW4gb3RyYSBsb2NhbGlkYWQgZGUgZXN0YSBwcm92aW5jaWEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSDE1ID09IDMgfiAiRW4gb3RyYSBwcm92aW5jaWEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSDE1ID09IDQgfiAiRW4gdW4gcGHDrXMgbGltw610cm9mZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIMTUgPT0gNSB+ICJFbiBvdHJvIHBhw61zIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0gxNSA9PSA5IH4gIk5TL05SIiksCiAgICAgICAgIERPTkRFX05BQ0lPID0gZmFjdG9yKERPTkRFX05BQ0lPLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCJFbiBlc3RhIGxvY2FsaWRhZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkVuIG90cmEgbG9jYWxpZGFkIGRlIGVzdGEgcHJvdmluY2lhIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRW4gb3RyYSBwcm92aW5jaWEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJFbiB1biBwYcOtcyBsaW3DrXRyb2ZlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRW4gb3RybyBwYcOtcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5TL05SIikpLAogICAgICAgICBWYWNhY2lvbmVzX3BhZ2FzID0gY2FzZV93aGVuKFBQMDdHMSA9PSAxIH4gIlPDrSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFAwN0cxID09IDIgfiAiTm8iKSwKICAgICAgICAgQWd1aW5hbGRvID0gY2FzZV93aGVuKFBQMDdHMiA9PSAxIH4gIlPDrSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUDA3RzIgPT0gMiB+ICJObyIpLAogICAgICAgICBEaWFzX2VuZmVybWVkYWQgPSBjYXNlX3doZW4oUFAwN0czID09IDEgfiAiU8OtIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBQMDdHMyA9PSAyIH4gIk5vIiksCiAgICAgICAgIE9icmFfc29jaWFsID0gY2FzZV93aGVuKFBQMDdHNCA9PSAxIH4gIlPDrSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBQMDdHNCA9PSAyIH4gIk5vIiksCiAgICAgICAgIERlc2N1ZW50b19qdWJpbGF0b3JpbyA9IGNhc2Vfd2hlbihQUDA3SCA9PSAxIH4gIlPDrSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUDA3SCA9PSAyIH4gIk5vIikpCgojIGNvbG9yZXMgPSBjKCIjYWExNjVhIiwiIzE2YWE2NiIpCmNvbG9yZXMgPSBjKCIjRkUxNzY0IiwgIiMwMEJERDYiKQpgYGAKCiMjIyBUcmFiYWphZG9yYXMgZGUgc2VydmljaW8gZG9tw6lzdGljbyAKCi0tLQoKIyMjIyBUcmFiYWphZG9yYXMgZGUgc2VydmljaW8gZG9tw6lzdGljbyAKPGJyPjxicj4KRWwgaW50ZXLDqXMgcG9yIGFuYWxpemFyIGRpc3RpbnRhcyBjYXJhY3RlcsOtc3RpY2FzIGRlIGxhcyB0cmFiYWphZG9yYXMgZGUgc2VydmljaW8gZG9tw6lzdGljbyByYWRpY2EgcHJpbmNpcGFsbWVudGUgZW4gbGEgbWFnbml0dWQgcXVlIGRpY2hhIG9jdXBhY2nDs24gcHJlc2VudGEsIGVuIHN1IGVzdHJlY2hvIHbDrW5jdWxvIGNvbiBsYSBkaXZpc2nDs24gc2V4dWFsIGRlbCB0cmFiYWpvIHkgbGEgZmVtaW5pemFjacOzbiBkZSBlc3RlIHNlY3RvciB5LCBjb21vIHZlcmVtb3MgbHVlZ28sIHBvciBsYXMgcGFydGljdWxhcm1lbnRlIGRpZmVyZW5jaWFkYXMgY29uZGljaW9uZXMsIGFjY2VzbyBhIGRlcmVjaG9zIHkgYmFqb3MgaW5ncmVzb3MgcXVlIHBlcmNpYmVuIGEgY2FtYmlvIGRlIHN1IHRyYWJham8uIEVudHJlIGxhcyBncmFuZGVzIGNpdWRhZGVzIGRlbCBwYcOtcywgcHVlZGVuIGNvbnRhcnNlIF9fY2FzaSA2NjAgbWlsIHBlcnNvbmFzIHF1ZSBjb21wb25lbiBhbCBzZWN0b3JfXywgbG8gY3VhbCByZXByZXNlbnRhIHVuYSBkcsOhc3RpY2EgZGlzbWludWNpw7NuIHJlc3BlY3RvIGRlIGxhcyBjaWZyYXMgaGFiaXR1YWxtZW50ZSBvYnNlcnZhZGFzLiBBIHN1IHZleiwgbGEgdGFzYSBkZSBmZW1pbmlkYWQgZGVsIHNlY3RvciBlcyBkZWwgOTglLiBFcyBkZWNpciBxdWUgX19jYXNpIGVuIHN1IHRvdGFsaWRhZCBzZSB0cmF0YSBkZSB0cmFiYWphZG9yYXMgbXVqZXJlc19fLiBFcyBwb3IgZXN0byBxdWUsIGEgbG8gbGFyZ28gZGUgdG9kbyBlbCBpbmZvcm1lLCB1dGlsaXphcmVtb3MgcHJvbm9tYnJlcyBmZW1lbmlub3MgYSBsYSBob3JhIGRlIGdlbmVyYWxpemFyLCBhdW5xdWUgbXVjaGFzIHZlY2VzIGVzdGVtb3MgaGFibGFuZG8gZGVsIGNvbmp1bnRvIGRlIGxlcyB0cmFiYWphZG9yZXMgcXVlIHNlIGRlZGljYW4gYSBlc3RhIGFjdGl2aWRhZC4gQSBzdSB2ZXosIGNhYmUgZGVzdGFjYXIgcXVlIGVsIGVqZXJjaWNpbyBkZWJlIHNlciByZWFsaXphZG8gZW4gdMOpcm1pbm9zIGNpcy1iaW5hcmlvcyBwb3IgZmFsdGEgZGUgaW5mb3JtYWNpw7NuIHJlc3BlY3RvIGRlIGxhcyBpZGVudGlkYWRlcyB0cmFucy10cmF2ZXN0aSBlbiBsYXMgZXN0YWTDrXN0aWNhcyBvZmljaWFsZXMuCjxicj48YnI+CkxhcyB0cmFiYWphZG9yYXMgcXVlIHJlYWxpemFuIHRhcmVhcyBkb23DqXN0aWNhcyB5IGRlIGN1aWRhZG8gZW4gaG9nYXJlcyBwYXJ0aWN1bGFyZXMgcmVwcmVzZW50YW4gdW4gMTQlIGRlbnRybyBkZWwgdG90YWwgZGUgb2N1cGFkYXMgbXVqZXJlcy4gRXN0byBzaWduaWZpY2EgcXVlIF9fdW5hIGRlIGNhZGEgNyBvY3VwYWRhcyBlbiBBcmdlbnRpbmEgdHJhYmFqYSBlbiBlc3RlIHNlY3RvciBkZSBsYSBlY29ub23DrWFfXy4gQWwgbWlzbW8gdGllbXBvLCBlc3RhcyB0cmFiYWphZG9yYXMgcmVwcmVzZW50YW4gdW4gMTgsNiUgZGVudHJvIGRlbCB0b3RhbCBkZSBvY3VwYWRhcy1hc2FsYXJpYWRhcy4gTyBzZWEgcXVlIGRlbnRybyBkZSBsYXMgbXVqZXJlcyBxdWUgdHJhYmFqYW4gZW4gcmVsYWNpw7NuIGRlIGRlcGVuZGVuY2lhLCBhbHJlZGVkb3IgZGUgMSBkZSBjYWRhIDUgdGllbmUgY29tbyBvY3VwYWNpw7NuIHByaW5jaXBhbCBlbCB0cmFiYWpvIGVuIGhvZ2FyZXMgcGFydGljdWxhcmVzLiBDb21vIHZlcmVtb3MgbcOhcyBhZGVsYW50ZSwgc2UgdHJhdGEgZGUgX19sYSBvY3VwYWNpw7NuIG3DoXMgcG9wdWxhciBlbnRyZSBsYXMgbXVqZXJlc19fLiBIYXkgcXVlIHRlbmVyIGVuIGN1ZW50YSBxdWUgZXN0b3MgaW5kaWNhZG9yZXMgdGFtYmnDqW4gcmVzcG9uZGVuIGFsIGNvbnRleHRvIHBhbmTDqW1pY28gZGVsIHRyaW1lc3RyZSBlc3R1ZGlhZG8uCgotLS0KCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGluY2x1ZGU9RkFMU0V9CiMgQXJtYW1vcyB1bmEgbWluaSBiYXNlIGRlIHNlcnZpY2lvIGRvbcOpc3RpY28gdXRpbGl6YW5kbyBsYSBwcmVndW50YSBQUDA0QjEsIHF1ZSBpZGVudGlmaWNhIGEgbGFzIHBlcnNvbmFzIHF1ZSBwcmVzdGFuIHNlcnZpY2lvIGRvbcOpc3RpY28gZW4gaG9nYXJlcyBwYXJ0aWN1bGFyZXMuIAoKc2Vydi5kb20gPC0gYmFzZV9pbmRpdmlkdWFsICU+JSAKICBmaWx0ZXIoUFAwNEIxID09IDEpCiMgQ29udGFtb3MgY29uIDEwMTIgY2Fzb3MgbXVlc3RyYWxlcwojIEx1ZWdvLCBhIGxhIGhvcmEgZGUgdHJhYmFqYXIgY29uIGVsIGNsYXNpZmljYWRvciBkZSBhY3RpdmlkYWRlcywgc2UgZW5jdWVudHJhbiBtw6FzIGNhc29zIGVuICJBY3RpdmlkYWRlcyBkZSBsb3MgaG9nYXJlcyBjb21vIGVtcGxlYWRvcmVzIGRlIHBlcnNvbmFsIGRvbcOpc3RpY28iLCBwZXJvIHNlIHZlcsOhIHF1ZSBzZSB0cmF0YSBkZSBjYXNvcyBxdWUgbm8gcmVzcG9uZGllcm9uIGVuIGN1w6FudGFzIGNhc2FzIHRyYWJhamFuLgoKdGFibGUoc2Vydi5kb20kRVNUQURPLCBzZXJ2LmRvbSRDQVRfT0NVUCwgZXhjbHVkZSA9IE5VTEwpCiMgVG9kYXMgb2N1cGFkYXMgLSBhc2FsYXJpYWRhcy4gCmBgYAoKPHAgc3R5bGU9ImNvbG9yOiNGRTE3NjQiPl9fQ2FudGlkYWQgZGUgcGVyc29uYXMgcXVlIHNlIGRlZGljYW4gYWwgc2VydmljaW8gZG9tw6lzdGljb19fPC9wPgpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQpzZXJ2LmRvbSAlPiUgCiAgc3VtbWFyaXNlKENhbnRpZGFkID0gZm9ybWF0b19jYW50aWRhZChzdW0oUE9OREVSQSkpKSAlPiUgCiAga2FibGUoYWxpZ24gPSAiYyIsICBjb2wubmFtZXMgPSBOVUxMKSAlPiUgCiAga2FibGVfc3R5bGluZyhjKCJzdHJpcGVkIiwgImhvdmVyIiwgImNvbmRlbnNlZCIsICJyZXNwb25zaXZlIiksCiAgICAgICAgICAgICAgICBmaXhlZF90aGVhZCA9IFQsIGZvbnRfc2l6ZSA9IDUwKSAlPiUgCiAgcm93X3NwZWMocm93ID0gMSwgYm9sZCA9IFQsIGNvbG9yID0gIndoaXRlIiwgYmFja2dyb3VuZCA9ICIjMDBCREQ2IikKYGBgCgotLS0KCjxwIHN0eWxlPSJjb2xvcjojRkUxNzY0Ij5fX1BvcmNlbnRhamUgZGUgbXVqZXJlcyB5IGRlIHZhcm9uZXMgZW4gZWwgc2VjdG9yX188L3A+CmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CnNlcnYuZG9tICU+JSAKICBtdXRhdGUoVG90YWwgPSBzdW0oUE9OREVSQSkpICU+JSAKICBncm91cF9ieShTZXhvKSAlPiUgCiAgc3VtbWFyaXNlKFBvcmNlbnRhamUgPSBmb3JtYXRvX3BvcmMoc3VtKFBPTkRFUkEpL3VuaXF1ZShUb3RhbCkqMTAwKSkgJT4lIAogIGthYmxlKGFsaWduID0gImMiKSAlPiUgCiAga2FibGVfc3R5bGluZyhjKCJzdHJpcGVkIiwgImhvdmVyIiwgImNvbmRlbnNlZCIsICJyZXNwb25zaXZlIiksCiAgICAgICAgICAgICAgICBmaXhlZF90aGVhZCA9IFQsIGZvbnRfc2l6ZSA9IDIwKSAlPiUgCiAgcm93X3NwZWMoMCwgYm9sZCA9IFQsIGNvbG9yID0gIndoaXRlIiwgYmFja2dyb3VuZCA9ICIjRkUxNzY0IikKYGBgCgotLS0KCjxwIHN0eWxlPSJjb2xvcjojRkUxNzY0Ij5fX1BvcmNlbnRhamUgZGUgbGEgb2N1cGFjacOzbiBkZW50cm8gZGUgbGFzIG9jdXBhZGFzIG11amVyZXNfXzwvcD4KYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0KYmFzZV9pbmRpdmlkdWFsICU+JSAKICBmaWx0ZXIoRVNUQURPID09IDEsCiAgICAgICAgIFNleG8gPT0gIk11amVyZXMiKSAlPiUgCiAgbXV0YXRlKFNlcnZpY2lvX2RvbWVzdGljbyA9IGNhc2Vfd2hlbihQUDA0QjEgPT0gMSB+ICJTw60iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFAwNEIxICE9IDEgfiAiTm8iKSkgJT4lIAogIGdyb3VwX2J5KFNlcnZpY2lvX2RvbWVzdGljbykgJT4lIAogIHN1bW1hcmlzZShDYW50aWRhZCA9IHN1bShQT05ERVJBKSkgJT4lIAogIG11dGF0ZShQb3JjZW50YWplID0gZm9ybWF0b19wb3JjKENhbnRpZGFkL3N1bShDYW50aWRhZCkqMTAwKSkgJT4lIAogIHNlbGVjdCgiwr9TZSBkZWRpY2EgYWwgc2VydmljaW8gZG9tw6lzdGljbz8iID0gU2VydmljaW9fZG9tZXN0aWNvLAogICAgICAgICBQb3JjZW50YWplKSAlPiUgCiAga2FibGUoYWxpZ24gPSAiYyIpICU+JSAKICBrYWJsZV9zdHlsaW5nKGMoInN0cmlwZWQiLCAiaG92ZXIiLCAiY29uZGVuc2VkIiwgInJlc3BvbnNpdmUiKSwKICAgICAgICAgICAgICAgIGZpeGVkX3RoZWFkID0gVCwgZm9udF9zaXplID0gMjApICU+JSAKICByb3dfc3BlYygwLCBib2xkID0gVCwgY29sb3IgPSAid2hpdGUiLCBiYWNrZ3JvdW5kID0gIiNGRTE3NjQiKQpgYGAKCi0tLQoKPHAgc3R5bGU9ImNvbG9yOiNGRTE3NjQiPl9fUG9yY2VudGFqZSBkZSBsYSBvY3VwYWNpw7NuIGRlbnRybyBkZSBsYXMgYXNhbGFyaWFkYXMgbXVqZXJlc19fPC9wPgpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQpiYXNlX2luZGl2aWR1YWwgJT4lIAogIGZpbHRlcihFU1RBRE8gPT0gMSwKICAgICAgICAgQ0FUX09DVVAgPT0gMywKICAgICAgICAgU2V4byA9PSAiTXVqZXJlcyIpICU+JSAKICBtdXRhdGUoU2VydmljaW9fZG9tZXN0aWNvID0gY2FzZV93aGVuKFBQMDRCMSA9PSAxIH4gIlPDrSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUDA0QjEgIT0gMSB+ICJObyIpKSAlPiUgCiAgZ3JvdXBfYnkoU2VydmljaW9fZG9tZXN0aWNvKSAlPiUgCiAgc3VtbWFyaXNlKENhbnRpZGFkID0gc3VtKFBPTkRFUkEpKSAlPiUgCiAgbXV0YXRlKFBvcmNlbnRhamUgPSBmb3JtYXRvX3BvcmMoQ2FudGlkYWQvc3VtKENhbnRpZGFkKSoxMDApKSAlPiUgCiAgc2VsZWN0KCLCv1NlIGRlZGljYSBhbCBzZXJ2aWNpbyBkb23DqXN0aWNvPyIgPSBTZXJ2aWNpb19kb21lc3RpY28sCiAgICAgICAgIFBvcmNlbnRhamUpICU+JSAKICBrYWJsZShhbGlnbiA9ICJjIikgJT4lIAogIGthYmxlX3N0eWxpbmcoYygic3RyaXBlZCIsICJob3ZlciIsICJjb25kZW5zZWQiLCAicmVzcG9uc2l2ZSIpLAogICAgICAgICAgICAgICAgZml4ZWRfdGhlYWQgPSBULCBmb250X3NpemUgPSAyMCkgJT4lIAogIHJvd19zcGVjKDAsIGJvbGQgPSBULCBjb2xvciA9ICJ3aGl0ZSIsIGJhY2tncm91bmQgPSAiI0ZFMTc2NCIpCmBgYAoKIyMjIENhcmFjdGVyw61zdGljYXMgCgotLS0KCiMjIyMgQWxndW5hcyBjYXJhY3RlcsOtc3RpY2FzIGRlIGxhcyB0cmFiYWphZG9yYXMgZGUgc2VydmljaW8gZG9tw6lzdGljbyB7LnRhYnNldCAudGFic2V0LWZhZGUgLnRhYnNldC1waWxsc30KPGJyPjxicj4KRW4gZXN0YSBzZWNjacOzbiBzZSBwcmVzZW50YW4gYWxndW5hcyBtw6l0cmljYXMgcmVzcGVjdG8gYSBsYSBkaXN0cmlidWNpw7NuIGV0YXJpYSwgZWwgbHVnYXIgZGUgbmFjaW1pZW50byB5IGNhcmFjdGVyw61zdGljYXMgZWR1Y2F0aXZhcyBkZSBsYXMgdHJhYmFqYWRvcmFzIGRlbCBzZWN0b3IgZGUgc2VydmljaW8gZG9tw6lzdGljby4gU2UgZGVzdGFjYSBsYSBzb2JyZXJyZXByZXNlbnRhY2nDs24gZGUgbWlncmFudGVzIGVuIGVsIHNlY3Rvci4KCi0tLQoKIyMjIyMgRWRhZAo8YnI+Ck1pZW50cmFzIHF1ZSB1biA0MywyJSBkZSBlc3RhcyB0cmFiYWphZG9yYXMgdGllbmVuIGVudHJlIDMwIHkgNDkgYcOxb3MsIHVuIDM2LDMlIHRpZW5lIGVudHJlIDUwIHkgNjQgYcOxb3MuIFBvciBzdSBwYXJ0ZSwgaGF5IHVuIDIsOCUgcXVlIGNvbnRpbsO6YSB0cmFiYWphbmRvIGEgcGVzYXIgZGUgaGFiZXIgc3VwZXJhciBsb3MgNjUgYcOxb3MsIHkgdW4gMTcsNyUgZXN0w6EgY29tcHVlc3RvIHBvciBqw7N2ZW5lcyBxdWUgbm8gbGxlZ2FuIGEgbG9zIDMwIGHDsW9zLgoKLS0tCgo8cCBzdHlsZT0iY29sb3I6I0ZFMTc2NCI+X19Db21wb3NpY2lvbiBwb3IgZWRhZCBkZSBsYXMgdHJhYmFqYWRvcmFzIGRlbCBzZXJ2aWNpbyBkb23DqXN0aWNvX188L3A+CmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CnNlcnYuZG9tICU+JSAKICBncm91cF9ieShHUlVQT19FREFEKSAlPiUgCiAgc3VtbWFyaXNlKENhbnRpZGFkID0gc3VtKFBPTkRFUkEpKSAlPiUgCiAgbXV0YXRlKFBvcmNlbnRhamUgPSBmb3JtYXRvX3BvcmMoQ2FudGlkYWQvc3VtKENhbnRpZGFkKSoxMDApLAogICAgICAgICBDYW50aWRhZCA9IGZvcm1hdG9fY2FudGlkYWQoQ2FudGlkYWQpKSAlPiUKICBzZWxlY3QoRWRhZCA9IEdSVVBPX0VEQUQsIENhbnRpZGFkLCBQb3JjZW50YWplKSAlPiUgCiAga2FibGUoYWxpZ24gPSAiYyIpICU+JSAKICBrYWJsZV9zdHlsaW5nKGMoInN0cmlwZWQiLCAiaG92ZXIiLCAiY29uZGVuc2VkIiwgInJlc3BvbnNpdmUiKSwKICAgICAgICAgICAgICAgIGZpeGVkX3RoZWFkID0gVCwgZm9udF9zaXplID0gMjApICU+JSAKICByb3dfc3BlYygwLCBib2xkID0gVCwgY29sb3IgPSAid2hpdGUiLCBiYWNrZ3JvdW5kID0gIiNGRTE3NjQiKQpgYGAKCiMjIyMjIEx1Z2FyIGRlIG5hY2ltaWVudG8KPGJyPgpDb25zaWRlcmFuZG8gYSBsYSBwb2JsYWNpw7NuIGVuIGdlbmVyYWwsIHVuIDExLDMlIHNlIGVuY3VlbnRyYSB2aXZpZW5kbyBlbiB1bmEgcHJvdmluY2lhIGRpc3RpbnRhIGEgbGEgcXVlIHRpZW5lIGNvbW8gbHVnYXIgZGUgbmFjaW1pZW50bywgeSB1biAzLDQlIHByb3ZpZW5lIGRlIHVuIHBhw61zIGxpbcOtdHJvZmUuIFBvciBzdSBwYXJ0ZSwgX19lbiBlbCBjYXNvIGRlIGxhcyB0cmFiYWphZG9yYXMgZGUgc2VydmljaW8gZG9tw6lzdGljb19fLCB1biAxNiUgaGEgbWlncmFkbyBkZSBwcm92aW5jaWEgeSBtw6FzIGRlbCAxMCUgcHJvdmllbmUgZGUgdW4gcGHDrXMgbGltw610cm9mZSwgZXMgZGVjaXIgcXVlIF9fbGFzIHBlcnNvbmFzIG1pZ3JhbnRlcyBzZSBlbmN1ZW50cmFuIHNvYnJlcnJlcHJlc2VudGFkYXMgZW4gZGljaG8gc2VjdG9yIGRlIGxhIGVjb25vbcOtYV9fLiBQdWVkZSBvYnNlcnZhcnNlIGVudG9uY2VzIHF1ZSBsYSBvY3VwYWNpw7NuIGVzdMOhIGVzdHJlY2hhbWVudGUgcmVsYWNpb25hZGEgY29uIGxvcyBmZW7Ds21lbm9zIG1pZ3JhdG9yaW9zLgoKLS0tCgo8cCBzdHlsZT0iY29sb3I6I0ZFMTc2NCI+X19MdWdhciBkZSBuYWNpbWllbnRvIGRlIGxhcyB0cmFiYWphZG9yYXMgZGUgc2VydmljaW8gZG9tw6lzdGljbyB5IGRlbCB0b3RhbCBkZSBsYSBwb2JsYWNpw7NuX188L3A+CmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CiMgVGFibGEgaW50ZXJtZWRpYS4gQ2Fzb3MgZGUgc2VydmljaW8gZG9tw6lzdGljby4gQ2hlcXVlbyBjYW50aWRhZGVzIG11ZXN0cmFsZXMuCnRhYmxhMSA8LSBzZXJ2LmRvbSAlPiUgCiAgZ3JvdXBfYnkoRE9OREVfTkFDSU8pICU+JSAKICBzdW1tYXJpc2Uobj1uKCksCiAgICAgICAgICAgIENhbnRpZGFkID0gc3VtKFBPTkRFUkEpKSAlPiUgCiAgbXV0YXRlKFBvcmNlbnRhamUgPSBmb3JtYXRvX3BvcmMoQ2FudGlkYWQvc3VtKENhbnRpZGFkKSoxMDApLAogICAgICAgICBDYW50aWRhZCA9IGZvcm1hdG9fY2FudGlkYWQoQ2FudGlkYWQpKSAlPiUgCiAgc2VsZWN0KERPTkRFX05BQ0lPLCBDYW50aWRhZCwgUG9yY2VudGFqZSkKCiMgVGFibGEgaW50ZXJtZWRpYS4gVG9kb3MgbG9zIGNhc29zLiBDaGVxdWVvIGNhbnRpZGFkZXMgbXVlc3RyYWxlcy4KdGFibGEyIDwtIGJhc2VfaW5kaXZpZHVhbCAlPiUgCiAgZ3JvdXBfYnkoRE9OREVfTkFDSU8pICU+JSAKICBzdW1tYXJpc2Uobj1uKCksCiAgICAgICAgICAgIENhbnRpZGFkID0gc3VtKFBPTkRFUkEpKSAlPiUgCiAgbXV0YXRlKFBvcmNlbnRhamUgPSBmb3JtYXRvX3BvcmMoQ2FudGlkYWQvc3VtKENhbnRpZGFkKSoxMDApLAogICAgICAgICBDYW50aWRhZCA9IGZvcm1hdG9fY2FudGlkYWQoQ2FudGlkYWQpKSAlPiUgCiAgc2VsZWN0KERPTkRFX05BQ0lPLCBDYW50aWRhZCwgUG9yY2VudGFqZSkKCnRhYmxlKHNlcnYuZG9tJERPTkRFX05BQ0lPLCBleGNsdWRlID0gTlVMTCkKCmxlZnRfam9pbih0YWJsYTEsIHRhYmxhMiwgYnkgPSAiRE9OREVfTkFDSU8iKSAlPiUgCiAgZmlsdGVyKERPTkRFX05BQ0lPICE9ICJFbiBvdHJvIHBhw61zIiwKICAgICAgICAgRE9OREVfTkFDSU8gIT0gIk5TL05SIikgJT4lIAogIHNlbGVjdCgiwr9Ew7NuZGUgbmFjacOzPyIgPSBET05ERV9OQUNJTywKICAgICAgICAgIjEuIENhbnRpZGFkIiA9IENhbnRpZGFkLngsCiAgICAgICAgICIxLiBQb3JjZW50YWplIiA9IFBvcmNlbnRhamUueCwKICAgICAgICAgIjIuIENhbnRpZGFkIiA9IENhbnRpZGFkLnksCiAgICAgICAgICIyLiBQb3JjZW50YWplIiA9IFBvcmNlbnRhamUueSkgJT4lIAogIGthYmxlKGFsaWduID0gImMiKSAlPiUgCiAgYWRkX2hlYWRlcl9hYm92ZShjKCIgICAgICAiID0gMSwgIlRyYWJhamFkb3JhcyBkZSBTZXJ2aWNpbyBEb23DqXN0aWNvIiA9IDIsICJQb2JsYWNpw7NuIGdlbmVyYWwiID0gMiksIAogICAgICAgICAgICAgICAgICAgYm9sZCA9IFQsIGNvbG9yID0gIndoaXRlIiwgYmFja2dyb3VuZCA9ICIjRkUxNzY0IikgJT4lIAogIGthYmxlX3N0eWxpbmcoYygic3RyaXBlZCIsICJob3ZlciIsICJjb25kZW5zZWQiLCAicmVzcG9uc2l2ZSIpLAogICAgICAgICAgICAgICAgZml4ZWRfdGhlYWQgPSBULCBmb250X3NpemUgPSAyMCkgJT4lIAogIHJvd19zcGVjKDAsIGJvbGQgPSBULCBjb2xvciA9ICJ3aGl0ZSIsIGJhY2tncm91bmQgPSAiI0ZFMTc2NCIpCmBgYAoKX05vdGE6IExhcyBlc3RpbWFjaW9uZXMgY29ycmVzcG9uZGllbnRlcyBhIGFxdWVsbGFzIHBlcnNvbmFzIHF1ZSBoYW4gbmFjaWRvIGVuIG90cm8gcGHDrXMgKG5vIGxpbcOtdHJvZmUpIHkgYXF1ZWxsYXMgcXVlIE5TL05SIGxhIHByZWd1bnRhLCBubyBjdWVudGFuIGNvbiBzdWZpY2llbnRlcyBjYXNvcyBtdWVzdHJhbGVzIGNvbW8gcGFyYSBnYXJhbnRpemFyIHNpZ25pZmljYXRpdmlkYWQgZGVsIGRhdG8sIHBvciBsbyBxdWUgc2UgaGEgcmV0aXJhZG8gZGVsIGN1YWRybyBsYXMgY2F0ZWdvcsOtYXMuIEVuIGVzdGUgdHJpbWVzdHJlIGVuIHBhcnRpY3VsYXIsIGxhIGNhdGVnb3LDrWEgIkVuIHVuIHBhw61zIGxpbcOtdHJvZmUiIHBhcmEgZWwgY2FzbyBkZSBsYXMgVHJhYmFqYWRvcmFzIGRlIFNlcnZpY2lvIERvbcOpc3RpY28gY3VlbnRhIGNvbiA0MSBjYXNvcyBtdWVzdHJhbGVzLl8gICAgIAoKYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgaW5jbHVkZT1GQUxTRX0Kcm0odGFibGExLCB0YWJsYTIpCmBgYAoKIyMjIyMgRWR1Y2FjacOzbgo8YnI+Ck3DoXMgZGUgbGEgbWl0YWQgZGUgbGFzIHRyYWJhamFkb3JhcyBkZWwgc2VjdG9yIGZpbmFsaXrDsyBlbCBuaXZlbCBwcmltYXJpbyBkZSBlc2NvbGFyaWRhZCwgYSBsbyBxdWUgc2Ugc3VtYSB1biAzNyw4JSBxdWUgY3VlbnRhIHRhbWJpw6luIGNvbiBlbCBuaXZlbCBzZWN1bmRhcmlvLCBlbiB0YW50byB1biA4LDMlIG5vIHBvc2VlIGluc3RydWNjacOzbiBmb3JtYWwuCgotLS0KCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGluY2x1ZGU9RkFMU0V9CnRhYmxlKHNlcnYuZG9tJE5JVkVMX0VEVUNBVElWTykKYGBgCgoKPHAgc3R5bGU9ImNvbG9yOiNGRTE3NjQiPl9fQ29tcG9zaWNpb24gcG9yIG5pdmVsIGVkdWNhdGl2byBkZSBsYXMgdHJhYmFqYWRvcmFzIGRlbCBzZXJ2aWNpbyBkb23DqXN0aWNvX188L3A+CmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CnNlcnYuZG9tICU+JSAKICBncm91cF9ieShOSVZFTF9FRFVDQVRJVk8pICU+JSAKICBzdW1tYXJpc2UoQ2FudGlkYWQgPSBzdW0oUE9OREVSQSkpICU+JSAKICBtdXRhdGUoUG9yY2VudGFqZSA9IGZvcm1hdG9fcG9yYyhDYW50aWRhZC9zdW0oQ2FudGlkYWQpKjEwMCksCiAgICAgICAgIENhbnRpZGFkID0gZm9ybWF0b19jYW50aWRhZChDYW50aWRhZCkpICU+JQogIGZpbHRlcihOSVZFTF9FRFVDQVRJVk8gIT0gIlN1cGVyaW9yIikgJT4lIAogIHNlbGVjdCgiTml2ZWwgZWR1Y2F0aXZvIiA9IE5JVkVMX0VEVUNBVElWTywgQ2FudGlkYWQsIFBvcmNlbnRhamUpICU+JSAKICBrYWJsZShhbGlnbiA9ICJjIikgJT4lIAogIGthYmxlX3N0eWxpbmcoYygic3RyaXBlZCIsICJob3ZlciIsICJjb25kZW5zZWQiLCAicmVzcG9uc2l2ZSIpLAogICAgICAgICAgICAgICAgZml4ZWRfdGhlYWQgPSBULCBmb250X3NpemUgPSAyMCkgJT4lIAogIHJvd19zcGVjKDAsIGJvbGQgPSBULCBjb2xvciA9ICJ3aGl0ZSIsIGJhY2tncm91bmQgPSAiI0ZFMTc2NCIpCmBgYAoKX05vdGE6IExhIGVzdGltYWNpw7NuIGNvcnJlc3BvbmRpZW50ZSBhIGFxdWVsbGFzIHF1ZSBoYW4gZmluYWxpemFkbyB1biBuaXZlbCBzdXBlcmlvciBkZSBmb3JtYWNpw7NuIG5vIGN1ZW50YSBjb24gc3VmaWNpZW50ZXMgY2Fzb3MgbXVlc3RyYWxlcyBjb21vIHBhcmEgZ2FyYW50aXphciBzaWduaWZpY2F0aXZpZGFkIGRlbCBkYXRvLCBwb3IgbG8gcXVlIHNlIGhhIHJldGlyYWRvIGRlbCBjdWFkcm8gbGEgY2F0ZWdvcsOtYS5fCgojIyMgSW50ZW5zaWRhZCBkZWwgdHJhYmFqbwoKLS0tCgojIyMjIEludGVuc2lkYWQgZGVsIHRyYWJham8gZGUgbGFzIHRyYWJhamFkb3JhcyBkZSBzZXJ2aWNpbyBkb23DqXN0aWNvCjxicj48YnI+CkVuIHJlbGFjacOzbiBhIGxhIGNhbnRpZGFkIGRlIGhvcmFzIHF1ZSB0cmFiYWphbiBzZW1hbmFsbWVudGUgbGFzIGVtcGxlYWRhcyBkb23DqXN0aWNhcywgdW4gNTAsMSUgc29uIG9jdXBhZGFzICJwbGVuYXMiLCBlcyBkZWNpciBxdWUgdHJhYmFqYW4gZW50cmUgMzUgeSA0NSBob3JhcyBzZW1hbmFsZXMsIG8gZXN0w6FuIGNvbmZvcm1lcyBjb24gbGEgY2FudGlkYWQgZGUgaG9yYXMgcXVlIHRyYWJhamFuLiBBbCBtaXNtbyB0aWVtcG8gX191biAyOSUgc2UgZW5jdWVudHJhIHN1Yi1vY3VwYWRhX18sIHRyYWJhamEgbWVub3MgZGUgMzUgaG9yYXMgc2VtYW5hbGVzIHBvciBjYXVzYXMgaW52b2x1bnRhcmlhcywgZXN0YW5kbyBkaXNwdWVzdGFzIGEgdHJhYmFqYXIgbcOhcyBob3Jhcy4gUG9yIHN1IHBhcnRlLCBfX3VuIDYsNiUgZXN0w6Egc29icmUtb2N1cGFkYV9fLCB0cmFiYWphIG3DoXMgZGUgNDUgaG9yYXMgcG9yIHNlbWFuYS4gU2luIGVtYmFyZ28sIGVzdGUgdHJpbWVzdHJlIHNlIGRlc3RhY2EgcG9ycXVlIF9fdW4gMTQsMyUgc29uIG9jdXBhZGFzIHF1ZSBubyBzZSBlbmNvbnRyYWJhbiB0cmFiYWphbmRvIGVuIGxhIHNlbWFuYSBkZSByZWZlcmVuY2lhIGRlIGxhIGVudHJldmlzdGEuX18KPGJyPjxicj4KRW4gY3VhbnRvIGEgbGEgY2FudGlkYWQgZGUgaG9nYXJlcyBlbiBxdWUgc2UgZGVzZW1wZcOxYW4sIHVuIDg2LDIlIHRyYWJhamEgaGFiaXR1YWxtZW50ZSBlbiB1bmEgc29sYSBjYXNhLCBwb3IgbG8gcXVlIGFsIG1pc21vIHRpZW1wbyBjYXNpIHVuIDE0JSBkZSBlbGxhcyBzdWVsZSB0cmFiYWphciBlbiBtw6FzIGRlIHVuYSB2aXZpZW5kYS4gX19NaWVudHJhcyBxdWUgbGFzIHF1ZSBzb24gY29udHJhdGFkYXMgcG9yIHVuIHPDs2xvIGhvZ2FyIHRyYWJhamFyb24gY2VyY2EgZGUgMjMgaG9yYXMgc2VtYW5hbGVzIChqb3JuYWRhIHBhcnQtdGltZSksIGFxdWVsbGFzIHF1ZSB0cmFiYWphbiBlbiBtw6FzIGRlIHVuYSBjYXNhIHRyYWJhamFyb24gZW4gcHJvbWVkaW8gbWVub3MgZGUgMTcgaG9yYXMgcG9yIHNlbWFuYSBlbiBsYSBvY3VwYWNpw7NuIHByaW5jaXBhbCwgYWNlcmPDoW5kb3NlIGEgbGFzIDIwIG8gMjQgaG9yYXMgc2VtYW5hbGVzIGNvbiBsYXMgb2N1cGFjaW9uZXMgc2VjdW5kYXJpYXNfXy4KCi0tLQoKYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgaW5jbHVkZT1GQUxTRX0Kc2Vydi5kb20gJT4lIAogIG11dGF0ZShJbnRlbnNpZGFkID0gY2FzZV93aGVuKElOVEVOU0kgPT0gMSB+ICJTdWJvY3VwYWRhcyBwb3IgaW5zdWZpY2llbmNpYSBob3JhcmlhIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTlRFTlNJID09IDIgfiAiT2N1cGFkYXMgcGxlbmFzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTlRFTlNJID09IDMgfiAiU29icmVvY3VwYWRhcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5URU5TSSA9PSA0IH4gIk9jdXBhZGEgcXVlIG5vIHRyYWJhasOzIGVuIGxhIHNlbWFuYSIpKSAlPiUgCiAgZ3JvdXBfYnkoSW50ZW5zaWRhZCkgJT4lIAogIHN1bW1hcmlzZShuID0gbigpLAogICAgICAgICAgICBDYW50aWRhZCA9IHN1bShQT05ERVJBKSkKYGBgCgoKPHAgc3R5bGU9ImNvbG9yOiNGRTE3NjQiPl9fVHJhYmFqYWRvcmFzIGRlIHNlcnZpY2lvIGRvbcOpc3RpY28gc2Vnw7puIGludGVuc2lkYWQgZGVsIHRyYWJham9fXzwvcD4KYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0Kc2Vydi5kb20gJT4lIAogIG11dGF0ZShJbnRlbnNpZGFkID0gY2FzZV93aGVuKElOVEVOU0kgPT0gMSB+ICJTdWJvY3VwYWRhcyBwb3IgaW5zdWZpY2llbmNpYSBob3JhcmlhIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTlRFTlNJID09IDIgfiAiT2N1cGFkYXMgcGxlbmFzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTlRFTlNJID09IDMgfiAiU29icmVvY3VwYWRhcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5URU5TSSA9PSA0IH4gIk9jdXBhZGEgcXVlIG5vIHRyYWJhasOzIGVuIGxhIHNlbWFuYSIpKSAlPiUgCiAgZ3JvdXBfYnkoSW50ZW5zaWRhZCkgJT4lIAogIHN1bW1hcmlzZShuID0gbigpLAogICAgICAgICAgICBDYW50aWRhZCA9IHN1bShQT05ERVJBKSkgJT4lIAogIG11dGF0ZShQb3JjZW50YWplID0gZm9ybWF0b19wb3JjKENhbnRpZGFkL3N1bShDYW50aWRhZCkqMTAwKSwKICAgICAgICAgQ2FudGlkYWQgPSBmb3JtYXRvX2NhbnRpZGFkKENhbnRpZGFkKSkgJT4lIAogIHNlbGVjdChJbnRlbnNpZGFkLCBDYW50aWRhZCwgUG9yY2VudGFqZSkgJT4lIAogIGthYmxlKGFsaWduID0gImMiKSAlPiUgCiAga2FibGVfc3R5bGluZyhjKCJzdHJpcGVkIiwgImhvdmVyIiwgImNvbmRlbnNlZCIsICJyZXNwb25zaXZlIiksCiAgICAgICAgICAgICAgICBmaXhlZF90aGVhZCA9IFQsIGZvbnRfc2l6ZSA9IDIwKSAlPiUgCiAgcm93X3NwZWMoMCwgYm9sZCA9IFQsIGNvbG9yID0gIndoaXRlIiwgYmFja2dyb3VuZCA9ICIjRkUxNzY0IikKYGBgCgpfTm90YTogTGEgZXN0aW1hY2nDs24gY29ycmVzcG9uZGllbnRlIGEgYXF1ZWxsYXMgcXVlIG5vIHRyYWJhamFyb24gZW4gbGEgc2VtYW5hIGRlIHJlZmVyZW5jaWEgZGUgbGEgZW5jdWVzdGEgZ2VuZXJhbG1lbnRlIG5vIGN1ZW50YSBjb24gc3VmaWNpZW50ZXMgY2Fzb3MgbXVlc3RyYWxlcyBjb21vIHBhcmEgZ2FyYW50aXphciBzaWduaWZpY2F0aXZpZGFkIGRlbCBkYXRvLCBwb3IgbG8gcXVlIHNlIHN1ZWxlIHJldGlyYXIgZGVsIGN1YWRybyBsYSBjYXRlZ29yw61hLiBFc3RlIHRyaW1lc3RyZSwgbGEgY2F0ZWdvcsOtYSBjdWVudGEgY29uIHPDs2xvIDY0IGNhc29zIG11ZXN0cmFsZXMsIHBlcm8gc2UgbXVlc3RyYSBhIGZpbmVzIGRlIGNvbXBhcmFyIGNvbiBlbCB0cmltZXN0cmUgYW50ZXJpb3IuXyAKCi0tLQoKPHAgc3R5bGU9ImNvbG9yOiNGRTE3NjQiPl9fVHJhYmFqYWRvcmFzIGRlbCBzZXJ2aWNpbyBkb23DqXN0aWNvIHNlZ8O6biBsYSBjYW50aWRhZCBkZSBob2dhcmVzIGVuIGxvcyBxdWUgdHJhYmFqYW5fXzwvcD4KYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0Kc2Vydi5kb20gJT4lIAogIGZpbHRlcihQUDNFX1RPVCA+IDAsICMgSG9yYXMgdHJhYmFqYWRhcyBwb3NpdGl2YXMKICAgICAgICAgUFAzRV9UT1QgIT0gOTk5LAogICAgICAgICBQUDNGX1RPVCAhPSA5OTkpICU+JSAKICBtdXRhdGUoY2FudGlkYWRfaG9nYXJlcyA9IGNhc2Vfd2hlbihQUDA0QjIgPT0gMSB+ICIxIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUDA0QjIgPT0gMiB+ICIyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUDA0QjIgPj0gMyB+ICIzIG8gbcOhcyIpKSAlPiUgCiAgZ3JvdXBfYnkoY2FudGlkYWRfaG9nYXJlcykgJT4lIAogIHN1bW1hcmlzZShuID0gbigpLAogICAgICAgICAgICBDYW50aWRhZCA9IHN1bShQT05ERVJBKSwKICAgICAgICAgICAgaHNfb2N1cF9wcmluYyA9IGZvcm1hdG9fcG9yYyh3ZWlnaHRlZC5tZWFuKFBQM0VfVE9ULCBQT05ERVJBKSksCiAgICAgICAgICAgIGhzX3RvdGFsZXMgPSBmb3JtYXRvX3BvcmMod2VpZ2h0ZWQubWVhbihQUDNFX1RPVCArIFBQM0ZfVE9ULCBQT05ERVJBKSkpICU+JSAKICBtdXRhdGUoUG9yY2VudGFqZSA9IGZvcm1hdG9fcG9yYyhDYW50aWRhZC9zdW0oQ2FudGlkYWQpKjEwMCksCiAgICAgICAgIENhbnRpZGFkID0gZm9ybWF0b19jYW50aWRhZChDYW50aWRhZCkpICU+JSAKICBzZWxlY3QoIkNhbnRpZGFkIGRlIGhvZ2FyZXMgZW4gcXVlIHRyYWJhamEiID0gY2FudGlkYWRfaG9nYXJlcywKICAgICAgICAgQ2FudGlkYWQsIFBvcmNlbnRhamUsIAogICAgICAgICAiaHMvc2VtIGVuIG9jdXAuIHByaW5jLiIgPSBoc19vY3VwX3ByaW5jLCAKICAgICAgICAgImhzL3NlbSBjb24gb2N1cC4gc2VjdW5kLiIgPSBoc190b3RhbGVzKSAlPiUgCiAga2FibGUoYWxpZ24gPSAiYyIpICU+JSAKICBrYWJsZV9zdHlsaW5nKGMoInN0cmlwZWQiLCAiaG92ZXIiLCAiY29uZGVuc2VkIiwgInJlc3BvbnNpdmUiKSwKICAgICAgICAgICAgICAgIGZpeGVkX3RoZWFkID0gVCwgZm9udF9zaXplID0gMjApICU+JSAKICByb3dfc3BlYygwLCBib2xkID0gVCwgY29sb3IgPSAid2hpdGUiLCBiYWNrZ3JvdW5kID0gIiNGRTE3NjQiKQpgYGAKCiMjIyBEZXJlY2hvcyBsYWJvcmFsZXMKCi0tLQoKIyMjIyBEZXJlY2hvcyBsYWJvcmFsZXMgZGUgbGFzIHRyYWJhamFkb3JhcyBkZSBzZXJ2aWNpbyBkb23DqXN0aWNvCjxicj48YnI+CkRlbnRybyBkZWwgY29uanVudG8gZGUgYXNhbGFyaWFkZXMsIHVuIDI4LDclIG5vIHNlIGVuY3VlbnRyYSByZWdpc3RyYWRlIGVuIGxhIHNlZ3VyaWRhZCBzb2NpYWwuIEVsIG1pc21vIGluZGljYWRvciBhc2NpZW5kZSBhbCAyOSwyJSBjdWFuZG8gaGFibGFtb3MgZGUgbGFzIGFzYWxhcmlhZGFzIG11amVyZXMgKGVzdGFzIHRhc2FzIGZ1ZXJvbiBkZWwgMzUsOCUgeSBkZWwgMzcsNSUgZW4gZWwgcHJpbWVyIHRyaW1lc3RyZSBkZWwgYcOxbywgcmVzcGVjdGl2YW1lbnRlKS4gICAKUGVybyB0YW1iacOpbiBwdWVkZSBvYnNlcnZhcnNlIHF1ZSBsYSBwcm9ibGVtw6F0aWNhIGVzIHBhcnRpY3VsYXJtZW50ZSBpbmNpc2l2YSBlbnRyZSBsYXMgdHJhYmFqYWRvcmFzIGRvbcOpc3RpY2FzOiBfX3VuIDY1LDIlIGRlIGVsbGFzIG5vIHBlcmNpYmUgZGVzY3VlbnRvIGp1YmlsYXRvcmlvLiBBc29jaWFkbyBhIGVzdG8sIHVuIDU5LDglIGRlIGVzdGFzIHRyYWJhamFkb3JhcyBubyBjdWVudGEgY29uIHZhY2FjaW9uZXMgcGFnYXMsIHVuIDYwLDglIG5vIHBlcmNpYmUgYWd1aW5hbGRvcywgdW4gNjEsOSUgbm8gcGVyY2liZSBlbCBwYWdvIGVuIGNhc28gZGUgZW5mZXJtZWRhZCwgeSB1biA2NCwzJSBubyBjdWVudGEgY29uIGNvYmVydHVyYSBkZSBzYWx1ZCBtZWRpYW50ZSBvYnJhIHNvY2lhbF9fLgoKYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgaW5jbHVkZT1GQUxTRX0KIyBUb3RhbCBkZSBhc2FsYXJpYWRlcy4gRW1wbGVvIHNpbiBkZXNjdWVudG8ganViaWxhdG9yaW8KYmFzZV9pbmRpdmlkdWFsICU+JSAKICBmaWx0ZXIoRVNUQURPID09IDEsCiAgICAgICAgIENBVF9PQ1VQPT0zKSAlPiUgCiAgc3VtbWFyaXNlKCJUYXNhIGRlIG5vIHJlZ2lzdHJvIiA9IGZvcm1hdG9fcG9yYyhzdW0oUE9OREVSQVtQUDA3SD09Ml0pL3N1bShQT05ERVJBKSoxMDApKQoKIyBUb3RhbCBkZSBhc2FsYXJpYWRlcy4gRW1wbGVvIHNpbiBkZXNjdWVudG8ganViaWxhdG9yaW8gcG9yIHNleG8KYmFzZV9pbmRpdmlkdWFsICU+JSAKICBmaWx0ZXIoRVNUQURPPT0xLAogICAgICAgICBDQVRfT0NVUD09MykgJT4lIAogIGdyb3VwX2J5KFNleG8pICU+JSAKICBzdW1tYXJpc2UoIlRhc2EgZGUgbm8gcmVnaXN0cm8iID0gZm9ybWF0b19wb3JjKHN1bShQT05ERVJBW1BQMDdIPT0yXSkvc3VtKFBPTkRFUkEpKjEwMCkpCmBgYAoKLS0tCgpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBpbmNsdWRlPUZBTFNFfQp0YWJsYTEgPC0gc2Vydi5kb20gJT4lIAogIGdyb3VwX2J5KERlc2N1ZW50b19qdWJpbGF0b3JpbykgJT4lIAogIHN1bW1hcmlzZShDYW50aWRhZCA9IHN1bShQT05ERVJBKSkgJT4lIAogIG11dGF0ZShQb3JjZW50YWplID0gZm9ybWF0b19wb3JjKENhbnRpZGFkL3N1bShDYW50aWRhZCkqMTAwKSkgJT4lIAogIHNlbGVjdChEZXNjdWVudG9fanViaWxhdG9yaW8sIFBvcmNlbnRhamUpICU+JSAKICBwaXZvdF93aWRlcihuYW1lc19mcm9tID0gRGVzY3VlbnRvX2p1YmlsYXRvcmlvLCB2YWx1ZXNfZnJvbSA9IFBvcmNlbnRhamUpICU+JSAKICBtdXRhdGUoSW5kaWNhZG9yID0gIsK/VGllbmUgZGVzY3VlbnRvIGp1YmlsYXRvcmlvPyIpCgp0YWJsYTIgPC0gc2Vydi5kb20gJT4lIAogIGdyb3VwX2J5KFZhY2FjaW9uZXNfcGFnYXMpICU+JSAKICBzdW1tYXJpc2UoQ2FudGlkYWQgPSBzdW0oUE9OREVSQSkpICU+JSAKICBtdXRhdGUoUG9yY2VudGFqZSA9IGZvcm1hdG9fcG9yYyhDYW50aWRhZC9zdW0oQ2FudGlkYWQpKjEwMCkpICU+JSAKICBzZWxlY3QoVmFjYWNpb25lc19wYWdhcywgUG9yY2VudGFqZSkgJT4lIAogIHBpdm90X3dpZGVyKG5hbWVzX2Zyb20gPSBWYWNhY2lvbmVzX3BhZ2FzLCB2YWx1ZXNfZnJvbSA9IFBvcmNlbnRhamUpICU+JSAKICBtdXRhdGUoSW5kaWNhZG9yID0gIsK/VGllbmUgdmFjYWNpb25lcyBwYWdhcz8iKQoKdGFibGEzIDwtIHNlcnYuZG9tICU+JSAKICBncm91cF9ieShBZ3VpbmFsZG8pICU+JSAKICBzdW1tYXJpc2UoQ2FudGlkYWQgPSBzdW0oUE9OREVSQSkpICU+JSAKICBtdXRhdGUoUG9yY2VudGFqZSA9IGZvcm1hdG9fcG9yYyhDYW50aWRhZC9zdW0oQ2FudGlkYWQpKjEwMCkpICU+JSAKICBzZWxlY3QoQWd1aW5hbGRvLCBQb3JjZW50YWplKSAlPiUgCiAgcGl2b3Rfd2lkZXIobmFtZXNfZnJvbSA9IEFndWluYWxkbywgdmFsdWVzX2Zyb20gPSBQb3JjZW50YWplKSAlPiUgCiAgbXV0YXRlKEluZGljYWRvciA9ICLCv1RpZW5lIGFndWluYWxkbz8iKQoKdGFibGE0IDwtIHNlcnYuZG9tICU+JSAKICBncm91cF9ieShEaWFzX2VuZmVybWVkYWQpICU+JSAKICBzdW1tYXJpc2UoQ2FudGlkYWQgPSBzdW0oUE9OREVSQSkpICU+JSAKICBtdXRhdGUoUG9yY2VudGFqZSA9IGZvcm1hdG9fcG9yYyhDYW50aWRhZC9zdW0oQ2FudGlkYWQpKjEwMCkpICU+JSAKICBzZWxlY3QoRGlhc19lbmZlcm1lZGFkLCBQb3JjZW50YWplKSAlPiUgCiAgcGl2b3Rfd2lkZXIobmFtZXNfZnJvbSA9IERpYXNfZW5mZXJtZWRhZCwgdmFsdWVzX2Zyb20gPSBQb3JjZW50YWplKSAlPiUgCiAgbXV0YXRlKEluZGljYWRvciA9ICLCv1RpZW5lIGTDrWFzIHBhZ29zIHBvciBlbmZlcm1lZGFkPyIpCgp0YWJsYTUgPC0gc2Vydi5kb20gJT4lIAogIGdyb3VwX2J5KE9icmFfc29jaWFsKSAlPiUgCiAgc3VtbWFyaXNlKENhbnRpZGFkID0gc3VtKFBPTkRFUkEpKSAlPiUgCiAgbXV0YXRlKFBvcmNlbnRhamUgPSBmb3JtYXRvX3BvcmMoQ2FudGlkYWQvc3VtKENhbnRpZGFkKSoxMDApKSAlPiUgCiAgc2VsZWN0KE9icmFfc29jaWFsLCBQb3JjZW50YWplKSAlPiUgCiAgcGl2b3Rfd2lkZXIobmFtZXNfZnJvbSA9IE9icmFfc29jaWFsLCB2YWx1ZXNfZnJvbSA9IFBvcmNlbnRhamUpICU+JSAKICBtdXRhdGUoSW5kaWNhZG9yID0gIsK/VGllbmUgb2JyYSBzb2NpYWw/IikKYGBgCgo8cCBzdHlsZT0iY29sb3I6I0ZFMTc2NCI+X19FbiBlc2UgdHJhYmFqbyB0aWVuZS4uLl9fPC9wPiAgICAgCgpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQpiaW5kX3Jvd3ModGFibGExLCB0YWJsYTIsIHRhYmxhMywgdGFibGE0LCB0YWJsYTUpICU+JSAKICBzZWxlY3QoSW5kaWNhZG9yLCBTw60sIE5vKSAlPiUgCiAga2FibGUoYWxpZ24gPSAiYyIpICU+JSAKICBrYWJsZV9zdHlsaW5nKGMoInN0cmlwZWQiLCAiaG92ZXIiLCAiY29uZGVuc2VkIiwgInJlc3BvbnNpdmUiKSwKICAgICAgICAgICAgICAgIGZpeGVkX3RoZWFkID0gVCwgZm9udF9zaXplID0gMjApICU+JSAKICByb3dfc3BlYygwLCBib2xkID0gVCwgY29sb3IgPSAid2hpdGUiLCBiYWNrZ3JvdW5kID0gIiNGRTE3NjQiKQpgYGAKCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGluY2x1ZGU9RkFMU0V9CnJtKHRhYmxhMSwgdGFibGEyLCB0YWJsYTMsIHRhYmxhNCwgdGFibGE1KQpgYGAKICAKIyMjIEluZ3Jlc29zCgotLS0KCiMjIyMgSW5ncmVzb3MgZGUgbGFzIHRyYWJhamFkb3JhcyBkZSBzZXJ2aWNpbyBkb23DqXN0aWNvCjxicj48YnI+CkxhcyB0cmFiYWphZG9yYXMgZGVsIHNlY3RvciBwZXJjaWJlbiBpbmdyZXNvcyBxdWUsIGVuIHByb21lZGlvLCByb25kYW4gbG9zIF8kOS43MDBfIHBlc29zIG1lbnN1YWxlcyBwb3Igc3Ugb2N1cGFjacOzbiBwcmluY2lwYWwuIEFsIG1pc21vIHRpZW1wbywgdW4gNTAlIGRlIGVsbGFzIGNvYnJhIG1lbm9zIGRlIF8kOS4wMDBfIHBvciBtZXMgcG9yIGRpY2hvIHRyYWJham8uIEVzdG8gZXF1aXZhbGUgYSBxdWUgZW4gcHJvbWVkaW8gY29icmFuIHVub3MgXyQxMzJfIHBvciBob3JhLCB5IGVsIDUwJSBjb2JyYSBtZW5vcyBkZSBfJDExN18gcG9yIGhvcmEuIEVuIGVsIHByaW1lciBjdWFkcm8gdGFtYmnDqW4gcHVlZGVuIGFwcmVjaWFyc2UgbG9zIGluZ3Jlc29zIG1lbnN1YWxlcyB0b3RhbGVzIGRlIGZ1ZW50ZSBsYWJvcmFsIChpbmNsdXllbmRvIGluZ3Jlc29zIGRlIG9jdXBhY2lvbmVzIHNlY3VuZGFyaWFzKSwgbG9zIHRvdGFsZXMgaW5kaXZpZHVhbGVzIChpbmNsdXllbmRvIGluZ3Jlc29zIHF1ZSBubyBwcm92aWVuZW4gZGUgdW5hIGZ1ZW50ZSBsYWJvcmFsKSwgbG9zIGluZ3Jlc29zIHRvdGFsZXMgZmFtaWxpYXJlcyBxdWUgdGllbmVuIGVuIHByb21lZGlvIGxvcyBob2dhcmVzIGRlIGVzdGFzIHRyYWJhamFkb3JhcywgeSBlbCBpbmdyZXNvIHBlciBjw6FwaXRhIGZhbWlsaWFyIGRlIGVzdG9zIG1pc21vcyBob2dhcmVzLgo8YnI+PGJyPgpFbiBlbCBzZWd1bmRvIGN1YWRybyBwdWVkZSBhcHJlY2lhcnNlIHF1ZSBoYXkgdW5hIGFtcGxpYSBkaWZlcmVuY2lhIGVudHJlIGxvcyBpbmdyZXNvcyBxdWUgcGVyY2liZW4gZW4gcHJvbWVkaW8gbGFzIHRyYWJhamFkb3JhcyBxdWUgc2UgZW5jdWVudHJhbiByZWdpc3RyYWRhcyByZXNwZWN0byBkZSBhcXVlbGxhcyBxdWUgbm8sIHRhbnRvIGVuIHTDqXJtaW5vcyBtZW5zdWFsZXMgY29tbyBwb3IgaG9yYSB0cmFiYWphZGEuIEFkZW3DoXMsIGFxdWVsbGFzIHF1ZSB0aWVuZW4gZGVzY3VlbnRvIGp1YmlsYXRvcmlvIHRyYWJhamFuIG3DoXMgaG9yYXMgZW4gc3Ugb2N1cGFjacOzbiBwcmluY2lwYWwgcmVzcGVjdG8gcXVlIGFxdWVsbGFzIHF1ZSBuby4KPGJyPjxicj4KU2kgb3JkZW5hbW9zIGFsIHRvdGFsIGRlIGxhcyBwZXJzb25hcyBvY3VwYWRhcyBkZSBhY3VlcmRvIGFsIG5pdmVsIGRlIGluZ3Jlc29zIHF1ZSBwZXJjaWJlbiBwb3Igc3Ugb2N1cGFjacOzbiBwcmluY2lwYWwsIHkgbGFzIGFncnVwYW1vcyBlbiAxMCBncnVwb3MgZGUgaWd1YWwgdGFtYcOxbywgb2J0ZW5lbW9zIGxvcyBkZW5vbWluYWRvcyBkZWNpbGVzIGRlIGluZ3Jlc28uIEVuIGVsIGdyw6FmaWNvIHNlIG11ZXN0cmEgY2xhcmFtZW50ZSBxdWUgYXF1ZWxsYXMgcGVyc29uYXMgcXVlIHRyYWJhamFuIGVuIGVsIHNlY3RvciBkZSBzZXJ2aWNpbyBkb23DqXN0aWNvIHNlIGVuY3VlbnRyYW4gY29uY2VudHJhZGFzIGVuIGxvcyBkZWNpbGVzIGRlIG1lbm9yZXMgaW5ncmVzb3MuCjxicj48YnI+Ck9qbyEgRGViZSB0ZW5lcnNlIGVuIGN1ZW50YSBxdWUgdG9kb3MgbG9zIG1vbnRvcyBlc3TDoW4gZXhwcmVzYWRvcyBlbiBwZXNvcyBkZWwgYHIgZGF0ZWAuIAoKLS0tCgpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQojIEluZ3Jlc29zIG1lbnN1YWxlcywgZGUgbGEgb2N1cGFjacOzbiBwcmluY2lwYWwKdGFibGExIDwtIHNlcnYuZG9tICU+JSAKICBmaWx0ZXIoUFAzRV9UT1QgPiAwLCAjIEhvcmFzIHRyYWJhamFkYXMgcG9zaXRpdmFzCiAgICAgICAgIFBQM0VfVE9UICE9IDk5OSkgJT4lIAogIHN1bW1hcmlzZSgiSW5ncmVzbyBwcm9tZWRpbyIgPSBmb3JtYXRvX3Blc29zKHdlaWdodGVkLm1lYW4oUDIxLCBQT05ESUlPKSksCiAgICAgICAgICAgICI1MCUgY29icmEgbWVub3MgZGUiID0gZm9ybWF0b19wZXNvcyhzcGF0c3RhdDo6d2VpZ2h0ZWQubWVkaWFuKFAyMSwgUE9ORElJTykpKSAlPiUgCiAgbXV0YXRlKEluZ3Jlc29zID0gICJNZW5zdWFsZXMsIGRlIGxhIG9jdXBhY2nDs24gcHJpbmNpcGFsIikKCiMgSW5ncmVzb3MgcG9yIGhvcmEsIGRlIGxhIG9jdXBhY2nDs24gcHJpbmNpcGFsCnRhYmxhMiA8LSBzZXJ2LmRvbSAlPiUgCiAgZmlsdGVyKFBQM0VfVE9UID4gMCwgIyBIb3JhcyB0cmFiYWphZGFzIHBvc2l0aXZhcwogICAgICAgICBQUDNFX1RPVCAhPSA5OTkpICU+JSAKICBzdW1tYXJpc2UoIkluZ3Jlc28gcHJvbWVkaW8iID0gZm9ybWF0b19wZXNvcyh3ZWlnaHRlZC5tZWFuKFAyMS8oUFAzRV9UT1QgKiAzMCAvIDcpLCBQT05ESUlPKSksCiAgICAgICAgICAgICI1MCUgY29icmEgbWVub3MgZGUiID0gZm9ybWF0b19wZXNvcyhzcGF0c3RhdDo6d2VpZ2h0ZWQubWVkaWFuKFAyMS8oUFAzRV9UT1QgKiAzMCAvIDcpLCBQT05ESUlPKSkpICU+JSAKICBtdXRhdGUoSW5ncmVzb3MgPSAgIlBvciBob3JhLCBkZSBsYSBvY3VwYWNpw7NuIHByaW5jaXBhbCIpCgojIEluZ3Jlc29zIG1lbnN1YWxlcywgdG90YWwgZGUgZnVlbnRlIGxhYm9yYWwKdGFibGEzIDwtIHNlcnYuZG9tICU+JSAKICBzdW1tYXJpc2UoIkluZ3Jlc28gcHJvbWVkaW8iID0gZm9ybWF0b19wZXNvcyh3ZWlnaHRlZC5tZWFuKFA0N1QgLSBUX1ZJLCBQT05ESUkpKSwKICAgICAgICAgICAgIjUwJSBjb2JyYSBtZW5vcyBkZSIgPSBmb3JtYXRvX3Blc29zKHNwYXRzdGF0Ojp3ZWlnaHRlZC5tZWRpYW4oUDQ3VCAtIFRfVkksIFBPTkRJSSkpKSAlPiUgCiAgbXV0YXRlKEluZ3Jlc29zID0gICJNZW5zdWFsZXMsIHRvdGFsIGRlIGZ1ZW50ZSBsYWJvcmFsIikKICAKIyBJbmdyZXNvcyBtZW5zdWFsZXMsIHRvdGFsZXMgaW5kaXZpZHVhbGVzCnRhYmxhNCA8LSBzZXJ2LmRvbSAlPiUgCiAgc3VtbWFyaXNlKCJJbmdyZXNvIHByb21lZGlvIiA9IGZvcm1hdG9fcGVzb3Mod2VpZ2h0ZWQubWVhbihQNDdULCBQT05ESUkpKSwKICAgICAgICAgICAgIjUwJSBjb2JyYSBtZW5vcyBkZSIgPSBmb3JtYXRvX3Blc29zKHNwYXRzdGF0Ojp3ZWlnaHRlZC5tZWRpYW4oUDQ3VCwgUE9ORElJKSkpICU+JSAKICBtdXRhdGUoSW5ncmVzb3MgPSAgIk1lbnN1YWxlcywgaW5ncmVzbyB0b3RhbCBpbmRpdmlkdWFsIikKCiMgSW5ncmVzb3MgbWVuc3VhbGVzLCB0b3RhbGVzIGZhbWlsaWFyZXMKdGFibGE1IDwtIHNlcnYuZG9tICU+JSAKICBzdW1tYXJpc2UoIkluZ3Jlc28gcHJvbWVkaW8iID0gZm9ybWF0b19wZXNvcyh3ZWlnaHRlZC5tZWFuKElURiwgUE9ORElIKSksCiAgICAgICAgICAgICI1MCUgY29icmEgbWVub3MgZGUiID0gZm9ybWF0b19wZXNvcyhzcGF0c3RhdDo6d2VpZ2h0ZWQubWVkaWFuKElURiwgUE9ORElIKSkpICU+JSAKICBtdXRhdGUoSW5ncmVzb3MgPSAgIk1lbnN1YWxlcywgaW5ncmVzbyB0b3RhbCBmYW1pbGlhciIpCgojIEluZ3Jlc29zIG1lbnN1YWxlcywgcGVyIGNhcGl0YSBmYW1pbGlhcgp0YWJsYTYgPC0gc2Vydi5kb20gJT4lIAogIHN1bW1hcmlzZSgiSW5ncmVzbyBwcm9tZWRpbyIgPSBmb3JtYXRvX3Blc29zKHdlaWdodGVkLm1lYW4oSVBDRiwgUE9ORElIKSksCiAgICAgICAgICAgICI1MCUgY29icmEgbWVub3MgZGUiID0gZm9ybWF0b19wZXNvcyhzcGF0c3RhdDo6d2VpZ2h0ZWQubWVkaWFuKElQQ0YsIFBPTkRJSCkpKSAlPiUgCiAgbXV0YXRlKEluZ3Jlc29zID0gICJNZW5zdWFsZXMsIGluZ3Jlc28gcGVyIGPDoXBpdGEgZmFtaWxpYXIiKQpgYGAKCjxwIHN0eWxlPSJjb2xvcjojRkUxNzY0Ij5fX1Byb21lZGlvIHkgbWVkaWFuYSBkZSBsb3MgaW5ncmVzb3MgZGUgbGFzIHRyYWJhamFkb3JhcyBkZSBzZXJ2aWNpbyBkb23DqXN0aWNvIHkgc3VzIGZhbWlsaWFzX188L3A+IApgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQpiaW5kX3Jvd3ModGFibGExLCB0YWJsYTIsIHRhYmxhMywgdGFibGE0LCB0YWJsYTUsIHRhYmxhNikgJT4lIAogIHNlbGVjdChJbmdyZXNvcywgZXZlcnl0aGluZygpKSAlPiUgCiAga2FibGUoYWxpZ24gPSAiYyIpICU+JSAKICBrYWJsZV9zdHlsaW5nKGMoInN0cmlwZWQiLCAiaG92ZXIiLCAiY29uZGVuc2VkIiwgInJlc3BvbnNpdmUiKSwKICAgICAgICAgICAgICAgIGZpeGVkX3RoZWFkID0gVCwgZm9udF9zaXplID0gMjApICU+JSAKICByb3dfc3BlYygwLCBib2xkID0gVCwgY29sb3IgPSAid2hpdGUiLCBiYWNrZ3JvdW5kID0gIiNGRTE3NjQiKQpgYGAKCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGluY2x1ZGU9RkFMU0V9CnJtKHRhYmxhMSwgdGFibGEyLCB0YWJsYTMsIHRhYmxhNCwgdGFibGE1LCB0YWJsYTYpCmBgYAoKLS0tCiAgIAo8cCBzdHlsZT0iY29sb3I6I0ZFMTc2NCI+X19UcmFiYWphZG9yYXMgZGUgc2VydmljaW8gZG9tw6lzdGljbyBzZWfDum4gc2kgdGllbmVuIGRlc2N1ZW50byBqdWJpbGF0b3Jpbywgc3VzIGluZ3Jlc29zIHkgaG9yYXMgZGUgdHJhYmFqbyBwcm9tZWRpb19fPC9wPiAKYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0KIyBJbmdyZXNvcyBtZW5zdWFsZXMgeSBwb3IgaG9yYSwgZGUgbGEgb2N1cGFjacOzbiBwcmluY2lwYWwKc2Vydi5kb20gJT4lIAogIGZpbHRlcihQUDNFX1RPVCA+IDAsICMgSG9yYXMgdHJhYmFqYWRhcyBwb3NpdGl2YXMKICAgICAgICAgUFAzRV9UT1QgIT0gOTk5KSAlPiUgCiAgZ3JvdXBfYnkoRGVzY3VlbnRvX2p1YmlsYXRvcmlvKSAlPiUgCiAgc3VtbWFyaXNlKEluZ3Jlc29zID0gZm9ybWF0b19wZXNvcyh3ZWlnaHRlZC5tZWFuKFAyMSwgUE9ORElJTykpLAogICAgICAgICAgICBJbmdyZXNvc19ocyA9IGZvcm1hdG9fcGVzb3Mod2VpZ2h0ZWQubWVhbihQMjEvKFBQM0VfVE9UICogMzAgLyA3KSwgUE9ORElJTykpLAogICAgICAgICAgICBoc19vY3VwX3ByaW5jID0gZm9ybWF0b19wb3JjKHdlaWdodGVkLm1lYW4oUFAzRV9UT1QsIFBPTkRFUkEpKSkgJT4lIAogIGFycmFuZ2UoSW5ncmVzb3MpICU+JSAKICBzZWxlY3QoIsK/VGllbmUgZGVzY3VlbnRvIGp1YmlsYXRvcmlvPyIgPSBEZXNjdWVudG9fanViaWxhdG9yaW8sCiAgICAgICAgICJJbmdyZXNvIG1lbnN1YWwgcHJvbWVkaW8iID0gSW5ncmVzb3MsCiAgICAgICAgICJJbmdyZXNvIHBvciBob3JhIHByb21lZGlvIiA9IEluZ3Jlc29zX2hzLAogICAgICAgICAiaHMvc2VtIGVuIG9jdXAuIHByaW5jLiIgPSBoc19vY3VwX3ByaW5jKSAlPiUgCiAga2FibGUoYWxpZ24gPSAiYyIpICU+JSAKICBrYWJsZV9zdHlsaW5nKGMoInN0cmlwZWQiLCAiaG92ZXIiLCAiY29uZGVuc2VkIiwgInJlc3BvbnNpdmUiKSwKICAgICAgICAgICAgICAgIGZpeGVkX3RoZWFkID0gVCwgZm9udF9zaXplID0gMjApICU+JSAKICByb3dfc3BlYygwLCBib2xkID0gVCwgY29sb3IgPSAid2hpdGUiLCBiYWNrZ3JvdW5kID0gIiNGRTE3NjQiKQpgYGAKCi0tLQoKPHAgc3R5bGU9ImNvbG9yOiNGRTE3NjQiPl9fVHJhYmFqYWRvcmFzIGRlIHNlcnZpY2lvIGRvbcWbdGljbyBzZWfDum4gZGVjaWxlcyBkZSBpbmdyZXNvIGRlIGxhIG9jdXBhY2nDs24gcHJpbmNpcGFsX188L3A+IApgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQpvcHRpb25zKHNjaXBlbj05OTk5OTkpCgojIERlY2lsZXMgZGUgSW5ncmVzbyBkZSBsYSBPY3VwIFByaW5jaXBhbApzZXJ2LmRvbSAlPiUgCiAgbXV0YXRlKERFQ09DVVIgPSBhcy5pbnRlZ2VyKERFQ09DVVIpKSAlPiUgCiAgZmlsdGVyKERFQ09DVVIgJWluJSBjKDE6MTApKSAlPiUgCiAgZ3JvdXBfYnkoREVDT0NVUikgJT4lIAogIHN1bW1hcmlzZShDYW50aWRhZCA9IHN1bShQT05ESUgpKSAlPiUgCiAgZ2dwbG90KC4sIGFlcyh4ID0gREVDT0NVUiwgeSA9IENhbnRpZGFkKSkgKwogIGdlb21fY29sKGZpbGwgPSAiI0ZFMTc2NCIpICsKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gMToxMCkgKwogIGxhYnModGl0bGUgPSAiVHJhYmFqYWRvcmFzIGRlIHNlcnZpY2lvIGRvbcOpc3RpY28gc2Vnw7puIGRlY2lsZXMiLAogICAgICAgc3VidGl0bGUgPSBwYXN0ZTAoIkRlY2lsZXMgZGUgaW5ncmVzbyBkZSBsYSBvY3VwYWNpw7NuIHByaW5jaXBhbC4gIiwgZGF0ZSksCiAgICAgICBjYXB0aW9uID0gIkZ1ZW50ZTogTmF0c3VtaSBTaG9raWRhIGVuIGJhc2UgYSBFUEgtSU5ERUMiKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICB0aGVtZShheGlzLnRpdGxlLnkgPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgYXhpcy50aXRsZS54ID0gZWxlbWVudF9ibGFuaygpKQpgYGAKCiMjIyBIb2dhcmVzCgotLS0KCiMjIyMgQWxndW5hcyBjYXJhY3RlcsOtc3RpY2FzIHJlZmVyaWRhcyBhIGxvcyBob2dhcmVzIGRlIGxhcyB0cmFiYWphZG9yYXMgZGUgc2VydmljaW8gZG9tw6lzdGljbwo8YnI+PGJyPgpTaSBlc3RhIHZleiBvcmRlbmFtb3MgYWwgdG90YWwgZGUgbGFzIHBlcnNvbmFzIGRlIGFjdWVyZG8gYSBzdXMgaW5ncmVzb3MgcGVyIGPDoXBpdGEgZmFtaWxpYXJlcyAoYXF1ZWxsb3MgcXVlIHN1cmdlbiBkZSBkaXZpZGlyIGVsIHRvdGFsIGRlIGluZ3Jlc29zIGRlIGxhIGZhbWlsaWEgcG9yIGxhIGNhbnRpZGFkIGRlIG1pZW1icm9zIGRlIGxhIG1pc21hKSwgZGUgbWVub3IgYSBtYXlvciwgeSBsYXMgYWdydXBhbW9zIGVuIDEwIGdydXBvcyBkZSBpZ3VhbCB0YW1hw7FvLCBvYnRlbmVtb3Mgb3RyYSBlc2NhbGEgZGUgZGVjaWxlcy4gRW4gZXN0ZSBjYXNvIHRhbWJpw6luIHNlIHB1ZWRlIGFwcmVjaWFyIHF1ZSBfX2xhcyB0cmFiYWphZG9yYXMgZGUgc2VydmljaW8gZG9tw6lzdGljbyBzZSBjb25jZW50cmFuIGVuIGxvcyBwcmltZXJvcyBkZWNpbGVzLiBDYWJlIGRlc3RhY2FyIHF1ZSBsb3MgcHJpbWVyb3MgdHJlcyBkZWNpbGVzIGRlIGVzdGEgZXNjYWxhIHN1ZWxlbiBlc3RhciBhbHRhbWVudGUgcmVsYWNpb25hZG9zIGNvbiBsYSBzaXR1YWNpw7NuIGRlIHBvYnJlemEgZGUgbG9zIGhvZ2FyZXNfXyAodG9tYW5kbyBjb21vIHJlZmVyZW5jaWEgbGEgbWV0b2RvbG9nw61hIG9maWNpYWwgZGUgY8OhbGN1bG8gZGUgbGEgbWlzbWEpLgo8YnI+PGJyPgpBbCBtaXNtbyB0aWVtcG8sIG1pZW50cmFzIHF1ZSBfX3VuIDUxLDYlIG5vIGVzIGVsIHByaW1lciBzb3N0w6luIGVjb27Ds21pY28gZGVsIGhvZ2FyLCB1biA0OCw0JSBzw60gbG8gZXNfXy4gRW4gYW1ib3MgY2Fzb3MsIGxhIG1heW9yw61hIGRlIGVsbGFzIHJlYWxpemFuIGxhcyB0YXJlYXMgZG9tw6lzdGljYXMgZW4gc3UgaG9nYXIuIEVzdG8gZXMgYXPDrSBwb3JxdWUgX191biA4MywzJSBkZSBxdWllbmVzIHRyYWJhamFuIGRlIGZvcm1hIHJlbXVuZXJhZGEgcmVhbGl6YW5kbyB0cmFiYWpvIGRvbcOpc3RpY28gdGFtYmnDqW4gZXN0w6FuIGEgY2FyZ28gZGUgbGEgcmVhbGl6YWNpw7NuIGRlIGVzdGUgdHJhYmFqbyBlbiBzdXMgaG9nYXJlc19fIGRlIG1hbmVyYSBuby1hc2FsYXJpYWRhLCB5IHBvciB0YW50byBubyByZW11bmVyYWRhLgoKLS0tCgo8cCBzdHlsZT0iY29sb3I6I0ZFMTc2NCI+Cl9fVHJhYmFqYWRvcmFzIGRlIHNlcnZpY2lvIGRvbcWbdGljbyBzZWfDum4gZGVjaWxlcyBkZSBpbmdyZXNvIHBlciBjw6FwaXRhIGZhbWlsaWFyX18KPC9wPiAKYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0Kb3B0aW9ucyhzY2lwZW49OTk5OTk5KQoKIyBEZWNpbGVzIGRlIEluZ3Jlc28gUGVyIENhcGl0YSBGYW1pbGlhcgpzZXJ2LmRvbSAlPiUgCiAgbXV0YXRlKERFQ0NGUiA9IGFzLmludGVnZXIoREVDQ0ZSKSkgJT4lIAogIGZpbHRlcihERUNDRlIgJWluJSBjKDE6MTApKSAlPiUgCiAgZ3JvdXBfYnkoREVDQ0ZSKSAlPiUgCiAgc3VtbWFyaXNlKENhbnRpZGFkID0gc3VtKFBPTkRJSCkpICU+JSAKICBnZ3Bsb3QoLiwgYWVzKHggPSBERUNDRlIsIHkgPSBDYW50aWRhZCkpICsKICBnZW9tX2NvbChmaWxsID0gIiNGRTE3NjQiKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IDE6MTApICsKICBsYWJzKHRpdGxlID0gIlRyYWJhamFkb3JhcyBkZSBzZXJ2aWNpbyBkb23DqXN0aWNvIHNlZ8O6biBkZWNpbGVzIiwKICAgICAgIHN1YnRpdGxlID0gcGFzdGUwKCJEZWNpbGVzIGRlIGluZ3Jlc28gcGVyIGPDoXBpdGEgZmFtaWxpYXIuICIsIGRhdGUpLAogICAgICAgY2FwdGlvbiA9ICJGdWVudGU6IE5hdHN1bWkgU2hva2lkYSBlbiBiYXNlIGEgRVBILUlOREVDIikgKwogIHRoZW1lX21pbmltYWwoKSArCiAgdGhlbWUoYXhpcy50aXRsZS55ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIGF4aXMudGl0bGUueCA9IGVsZW1lbnRfYmxhbmsoKSkKYGBgCgotLS0KCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGluY2x1ZGU9RkFMU0V9CiMgU29uIGVsIGluZ3Jlc28gcHJpbmNpcGFsIGRlbCBob2dhcj8KaW5ncmVzb3NfcHJpbmNpcGFsZXMgPC0gYmFzZV9pbmRpdmlkdWFsICU+JQogIGdyb3VwX2J5KENPRFVTVSwgTlJPX0hPR0FSKSAlPiUgCiAgbXV0YXRlKGVzX3ByaW5jaXBhbCA9IGNhc2Vfd2hlbihQNDdUID09IG1heChQNDdUKSB+ICAiU8OtIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRSVUUgfiAiTm8iKSkgJT4lIAogIHNlbGVjdChDT0RVU1UsIE5ST19IT0dBUiwgQ09NUE9ORU5URSwgZXNfcHJpbmNpcGFsKQoKc2Vydi5kb20gPC0gbGVmdF9qb2luKHNlcnYuZG9tLCBpbmdyZXNvc19wcmluY2lwYWxlcywgYnkgPSBjKCJDT0RVU1UiLCAiTlJPX0hPR0FSIiwgIkNPTVBPTkVOVEUiKSkKCnNlcnYuZG9tICU+JSAKICBncm91cF9ieShlc19wcmluY2lwYWwpICU+JSAKICBzdW1tYXJpc2UobiA9IG4oKSwKICAgICAgICAgICAgQ2FudGlkYWQgPSBzdW0oUE9OREVSQSkpICU+JSAKICBtdXRhdGUoUG9yY2VudGFqZSA9IENhbnRpZGFkL3N1bShDYW50aWRhZCkqMTAwKQpgYGAKCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGluY2x1ZGU9RkFMU0V9CiMgUmVhbGl6YWNpw7NuIGRlIGxhcyB0YXJlYXMgZGUgbGEgY2FzYQpzZXJ2LmRvbSA8LSBzZXJ2LmRvbSAlPiUgCiAgbGVmdF9qb2luKC4sIGJhc2VfaG9nYXIgJT4lIAogICAgICAgICAgICAgIHNlbGVjdChDT0RVU1UsIE5ST19IT0dBUiwgVklJMV8xLCBWSUkxXzIpLCBieSA9IGMoIkNPRFVTVSIsICJOUk9fSE9HQVIiKSkgJT4lIAogIG11dGF0ZShyZWFsaXphID0gY2FzZV93aGVuKFZJSTFfMSA9PSBDT01QT05FTlRFIHwgVklJMV8yID09IENPTVBPTkVOVEUgfiAiU8OtIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFJVRSB+ICJObyIpKSAKCnNlcnYuZG9tICU+JSAKICBncm91cF9ieShyZWFsaXphKSAlPiUgCiAgc3VtbWFyaXNlKG4gPSBuKCksCiAgICAgICAgICAgIENhbnRpZGFkID0gc3VtKFBPTkRFUkEpKSAlPiUgCiAgbXV0YXRlKFBvcmNlbnRhamUgPSBDYW50aWRhZC9zdW0oQ2FudGlkYWQpKjEwMCkKYGBgCgpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBpbmNsdWRlPUZBTFNFfQptYXRyaXogPC0gc2Vydi5kb20gJT4lIAogIGdyb3VwX2J5KGVzX3ByaW5jaXBhbCwgcmVhbGl6YSkgJT4lIAogIHN1bW1hcmlzZShuID0gbigpLAogICAgICAgICAgICBDYW50aWRhZCA9IHN1bShQT05ERVJBKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgbXV0YXRlKFBvcmNlbnRhamUgPSBDYW50aWRhZC9zdW0oQ2FudGlkYWQpKjEwMCkgJT4lIAogIHNlbGVjdChlc19wcmluY2lwYWwsIHJlYWxpemEsIFBvcmNlbnRhamUpICU+JSAKICBhcnJhbmdlKC1Qb3JjZW50YWplKQpgYGAKCjxwIHN0eWxlPSJjb2xvcjojRkUxNzY0Ij4KX19UcmFiYWphZG9yYXMgZGUgc2VydmljaW8gZG9tw6lzdGljbyBzZWfDum4gc2kgcGVyY2liZW4gZWwgaW5ncmVzbyBwcmluY2lwYWwgZGUgc3UgZ3J1cG8gZmFtaWxpYXIgeSBzaSBzb24gcXVpZW5lcyByZWFsaXphbiBsYXMgdGFyZWFzIGRvbcOpc3RpY2FzIGVuIHN1IGhvZ2FyX18KPC9wPiAKCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CmdncGxvdChtYXRyaXosIGFlcyhlc19wcmluY2lwYWwsIHJlYWxpemEsIGZpbGwgPSBQb3JjZW50YWplKSkgKwogIGdlb21fdGlsZSgpICsKICBnZW9tX3RleHQoYWVzKGxhYmVsID0gc3RyX2Mocm91bmQoUG9yY2VudGFqZSwgMSksICIlIikpLCBzaXplID0gOCkgKwogIHNjYWxlX2ZpbGxfZ3JhZGllbnQobG93ID0gIndoaXRlIiwgaGlnaCA9ICIjRkUxNzY0IikgKwogIHNjYWxlX3hfZGlzY3JldGUocG9zaXRpb24gPSAidG9wIikgKwogIGdlb21fdGlsZShjb2xvciA9ICJibGFjayIsIGZpbGwgPSAiYmxhY2siLCBhbHBoYSA9IDApICsKICB0aGVtZV9taW5pbWFsKCkgKwogIHRoZW1lKCkgKwogIGxhYnMoeCA9ICfCv1BlcmNpYmUgZWwgaW5ncmVzbyBwcmluY2lwYWwgZGVsIGhvZ2FyPycsCiAgICAgICB5ID0gJ8K/UmVhbGl6YSBsYXMgdGFyZWFzIGRvbcOpc3RpY2FzIGVuIHN1IGhvZ2FyPycsCiAgICAgICB0aXRsZSA9IHBhc3RlMCgiVHJhYmFqYWRvcmFzIGRlIHNlcnZpY2lvIGRvbcOpc3RpY28uICIsIGRhdGUpLAogICAgICAgY2FwdGlvbiA9ICJGdWVudGU6IE5hdHN1bWkgU2hva2lkYSBlbiBiYXNlIGEgRVBILUlOREVDIikgKwogIGd1aWRlcyhmaWxsID0gRkFMU0UpCmBgYAoKIyMjIENvbXBhcmFjacOzbiBjb24gb3RyYXMgcmFtYXMgZGUgbGEgb2N1cGFjacOzbgoKLS0tCgojIyMjIENvbXBhcmFjacOzbiBjb24gb3RyYXMgcmFtYXMgZGUgbGEgb2N1cGFjacOzbiB7LnRhYnNldCAudGFic2V0LWZhZGUgLnRhYnNldC1waWxsc30KPGJyPjxicj4KRXMgw7p0aWwgY29udGV4dHVhbGl6YXIgbXVjaG9zIGRlIGxvcyBpbmRpY2Fkb3JlcyBwcmVzZW50YWRvcyByZWFsaXphbmRvIHVuYSBjb21wYXJhY2nDs24gY29uIG90cmFzIHJhbWFzIGRlIG9jdXBhY2nDs24uIEVuIGVzdGEgc2VjY2nDs24gc2UgcHJlc2VudGEgdW5hIHNlcmllIGRlIGdyw6FmaWNvcyBxdWUgcGVybWl0ZW4gcmVhbGl6YXIgZXN0ZSBlamVyY2ljaW8uIEVuIHRvZG9zIGxvcyBjYXNvcyBzZSBjb25zaWRlcmEgYSBsYSBwb2JsYWNpw7NuIGFzYWxhcmlhZGEsIGVzIGRlY2lyIGEgbGFzIHBlcnNvbmFzIHF1ZSBzZSBkZXNlbXBlw7FhbiBlbiBlbCBtZXJjYWRvIGxhYm9yYWwgY29uIHVuYSByZWxhY2nDs24gZGUgZGVwZW5kZW5jaWEsIHkgdGVuaWVuZG8gZW4gY3VlbnRhIGxhcyBjYXJhY3RlcsOtc3RpY2FzIGRlIGxhIG9jdXBhY2nDs24gcHJpbmNpcGFsIGRlIGVzdGFzIHBlcnNvbmFzLgo8YnI+PGJyPgpTZSBkZXN0YWNhIHF1ZSBfX2VsIHNlY3RvciBkZSBzZXJ2aWNpbyBkb23DqXN0aWNvIGVzIHVubyBkZSBsb3MgbcOhcyBpbXBvcnRhbnRlcyBkZWwgbWVyY2FkbyBsYWJvcmFsIChhdW5xdWUgaGEgZGVzY2VuZGlkbyBlbiBlbCAicmFua2luZyIgYSBsYSBsdXogZGUgdW5hIG1heW9yIHBvbmRlcmFjacOzbiBkZSBhY3RpdmlkYWRlcyBjb21vIGxhIGFkbWluaXN0cmFjacOzbiBww7pibGljYSBvIGxvcyBzZXJ2aWNpb3Mgc29jaWFsZXMgeSBkZSBzYWx1ZCBlbiBlbCBtYXJjbyBkZSBsYSBjcmlzaXMgcG9yIENPVklELTE5KS4gVGFtYmnDqW4gc2UgdHJhdGEgZGUgbGEgcmFtYSBtw6FzIGZlbWluaXphZGEsIHVuYSBkZSBsYXMgcXVlIG3DoXMgcHJvcG9yY2nDs24gb2N1cGEgZGVudHJvIGRlIGxhcyB0cmFiYWphZG9yYXMgbXVqZXJlcyB5IGxhIG1lbm9zIHBvcHVsYXIgZW50cmUgbG9zIHZhcm9uZXMuIFRhbWJpw6luIGVzIHVuYSBkZSBsYXMgcmFtYXMgY29uIHRhc2EgZGUgbm8tcmVnaXN0cm8gbcOhcyBhbHRhcywgeSBsb3MgaW5ncmVzb3MgcHJvbWVkaW9zIG3DoXMgYmFqb3MsIHRhbnRvIGRlIGJvbHNpbGxvIGNvbW8gcG9yIGhvcmEgdHJhYmFqYWRhX18uCgotLS0KCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CiMgVXNvIGxhIGZ1bmNpw7NuIHF1ZSBjb25zdHJ1eWUgbGEgcmFtYSBFUEggY29uIG5vbWJyZXMgZGVzY3JpcHRpdm9zCmJhc2VfaW5kaXZpZHVhbCA8LSBvcmdhbml6ZV9jYWVzKGJhc2VfaW5kaXZpZHVhbCkgJT4lIAogIG11dGF0ZShyYW1hLm5vbWJyZSA9IGNhZXNfZXBoX2xhYmVsKQoKI2Jhc2VfaW5kaXZpZHVhbCA8LSBiYXNlX2luZGl2aWR1YWwgJT4lCiMgIG11dGF0ZShyYW1hLm5vbWJyZSA9IGVudHJhLmN1Y2hpbGxvLnNhbGVuLmxhcy5yYW1hcyhQUDA0Ql9DT0QpKQpgYGAKCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGluY2x1ZGU9RkFMU0V9CiMgQXNhbGFyaWFkZXMKYXNhbGFyaWFkZXMgPC0gYmFzZV9pbmRpdmlkdWFsICU+JQogIGZpbHRlcihFU1RBRE8gPT0gMSwKICAgICAgICAgQ0FUX09DVVAgPT0gMykKCmFzYWxhcmlhZGVzICU+JSAKICBncm91cF9ieShyYW1hLm5vbWJyZSkgJT4lIAogIHN1bW1hcmlzZShuID0gbigpLAogICAgICAgICAgICBDYW50aWRhZCA9IHN1bShQT05ERVJBKSkKCnRhYmxlKGFzYWxhcmlhZGVzJHJhbWEubm9tYnJlLCBhc2FsYXJpYWRlcyRQUDA0QjEsIGV4Y2x1ZGUgPSBOVUxMKQojIEhheSBjYXNvcyBkZSBTZXJ2aWNpbyBkb21lc3RpY28gZW4gbGEgcmFtYSBwZXJvIHF1ZSBubyB0aWVuZW4gbWFyY2FkYSBsYSB2YXJpYWJsZSBxdWUgbGFzIGlkZW50aWZpY2EgY29tbyBwcmVzdGFkb3JhcyBkZSBzZXJ2aWNpbyBkb23DqXN0aWNvIGVuIGhvZ2FyZXMsIHNvbiAyNyBjYXNvcyBtdWVzdHJhbGVzCgpwcnVlYmEgPC0gYXNhbGFyaWFkZXMgJT4lIAogIGZpbHRlcihyYW1hLm5vbWJyZSA9PSAiU2VydmljaW8gZG9tZXN0aWNvIiwgCiAgICAgICAgIFBQMDRCMSA9PSAyKQoKdGFibGUocHJ1ZWJhJFBQMDRCX0NPRCwgZXhjbHVkZSA9IE5VTEwpCnRhYmxlKHBydWViYSRQUDA0QjIsIGV4Y2x1ZGUgPSBOVUxMKQojIExvcyAyMSBjYXNvcyB0aWVuZW4gcmFtYSAiOTcwMCIsIHF1ZSBlbiBDQUVTIE1lcmNvc3VyIGVzICJBY3RpdmlkYWRlcyBkZSBsb3MgaG9nYXJlcyBjb21vIGVtcGxlYWRvcmVzIGRlIHBlcnNvbmFsIGRvbcOpc3RpY28iLCBsYSBtaXNtYSByYW1hIHF1ZSBlbCByZXN0bywgcGVybyByZXNwb25kZW4gdHJhYmFqYXIgZW4gIjAgY2FzYXMiIHkgcG9yIGVzbyBubyBzZSB0aWVuZW4gZW4gY3VlbnRhIGhhc3RhIGFob3JhLCBlbiBsYSBiYXNlIHNlcnYuZG9tLgpgYGAKCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGluY2x1ZGU9RkFMU0V9CmFzYWwucmFtYXMgPC0gYXNhbGFyaWFkZXMgJT4lIAogIG11dGF0ZSh0b3RhbCA9IHN1bShQT05ERVJBKSwKICAgICAgICAgdG90YWxfbXVqZXJlcyA9IHN1bShQT05ERVJBW1NleG8gPT0gIk11amVyZXMiXSksCiAgICAgICAgIHRvdGFsX3Zhcm9uZXMgPSBzdW0oUE9OREVSQVtTZXhvID09ICJWYXJvbmVzIl0pKSAlPiUgCiAgZ3JvdXBfYnkoIlJhbWEiID0gcmFtYS5ub21icmUpICU+JSAKICBzdW1tYXJpc2UoQ2FudGlkYWQgPSBzdW0oUE9OREVSQSksCiAgICAgICAgICAgIFByb3BvcmNpb24gPSByb3VuZChzdW0oUE9OREVSQSkvdW5pcXVlKHRvdGFsKSoxMDAsIDEpLAogICAgICAgICAgICB0YXNhX2ZlbWluaXphY2lvbiA9IHJvdW5kKHN1bShQT05ERVJBW1NleG8gPT0gIk11amVyZXMiXSkvc3VtKFBPTkRFUkEpKjEwMCwgMSksCiAgICAgICAgICAgIHByb3BfZW5fbXVqZXJlcyA9IHJvdW5kKHN1bShQT05ERVJBW1NleG8gPT0gIk11amVyZXMiXSkvdW5pcXVlKHRvdGFsX211amVyZXMpKjEwMCwgMSksCiAgICAgICAgICAgIHByb3BfZW5fdmFyb25lcyA9IHJvdW5kKHN1bShQT05ERVJBW1NleG8gPT0gIlZhcm9uZXMiXSkvdW5pcXVlKHRvdGFsX3Zhcm9uZXMpKjEwMCwgMSksCiAgICAgICAgICAgIHRhc2Ffbm9fcmVnaXN0cm8gPSByb3VuZChzdW0oUE9OREVSQVtQUDA3SCA9PSAyXSkvc3VtKFBPTkRFUkEpKjEwMCwgMSksCiAgICAgICAgICAgIGluZ3Jlc29fbWVuc3VhbCA9IHdlaWdodGVkLm1lYW4oUDIxLCBQT05ESUlPKSkKCmFzYWwucmFtYXMyIDwtIGFzYWxhcmlhZGVzICU+JSAKICBmaWx0ZXIoUFAzRV9UT1QgPiAwLCAjIEhvcmFzIHRyYWJhamFkYXMgcG9zaXRpdmFzCiAgICAgICAgIFBQM0VfVE9UICE9IDk5OSkgJT4lIAogIGdyb3VwX2J5KCJSYW1hIiA9IHJhbWEubm9tYnJlKSAlPiUgCiAgc3VtbWFyaXNlKGluZ3Jlc29faHIgPSB3ZWlnaHRlZC5tZWFuKFAyMS8oUFAzRV9UT1QgKiAzMCAvIDcpLCBQT05ESUlPKSkKCmFzYWwucmFtYXMgPC0gYXNhbC5yYW1hcyAlPiUgCiAgbGVmdF9qb2luKC4sIGFzYWwucmFtYXMyLCBieSA9ICJSYW1hIikKCnJtKGFzYWwucmFtYXMyKQpgYGAKCiMjIyMjIENhbnRpZGFkIGRlIHRyYWJhamFkb3JlcwoKYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0KIyBSZW9yZGVyIHRoZSBkYXRhCmRhdGEgPC0gYXNhbC5yYW1hcyAlPiUKICBzZWxlY3QoeD1SYW1hLCB5PUNhbnRpZGFkKSAlPiUgCiAgYXJyYW5nZSh5KSAlPiUKICBtdXRhdGUoeD1mYWN0b3IoeCx4KSkKICAKIyBQbG90CmdncGxvdChkYXRhLCBhZXMoeD14LCB5PXkpKSArCiAgZ2VvbV9zZWdtZW50KGFlcyh4PXgsIHhlbmQ9eCwgeT0wLCB5ZW5kPXkpLCAKICAgICAgICAgICAgICAgY29sb3I9aWZlbHNlKGRhdGEkeCAlaW4lIGMoIlNlcnZpY2lvIGRvbWVzdGljbyIpLCAiIzAwQkRENiIsICIjRkUxNzY0IiksIAogICAgICAgICAgICAgICBzaXplPWlmZWxzZShkYXRhJHggJWluJSBjKCJTZXJ2aWNpbyBkb21lc3RpY28iKSwgMS4zLCAwLjcpICkgKwogIGdlb21fcG9pbnQoY29sb3I9aWZlbHNlKGRhdGEkeCAlaW4lIGMoIlNlcnZpY2lvIGRvbWVzdGljbyIpLCAiIzAwQkRENiIsICIjRkUxNzY0IiksIAogICAgICAgICAgICAgc2l6ZT1pZmVsc2UoZGF0YSR4ICVpbiUgYygiU2VydmljaW8gZG9tZXN0aWNvIiksIDUsIDIpICkgKwogIHRoZW1lX2lwc3VtKCkgKwogIGNvb3JkX2ZsaXAoKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uPSJub25lIikgKwogIGdndGl0bGUoIkNhbnRpZGFkIGRlIHRyYWJhamFkb3JlcyIpICsKICB4bGFiKCIiKSArCiAgeWxhYigiIikgKwogIGxhYnMoc3VidGl0bGUgPSBwYXN0ZTAoIlBvYmxhY2nDs24gYXNhbGFyaWFkYSBwb3IgcmFtYS4gIiwgZGF0ZSksCiAgICAgICBjYXB0aW9uID0gY2FwdGlvbikKYGBgCgojIyMjIyBUYXNhIGRlIGZlbWluaXphY2nDs24KCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CiMgUmVvcmRlciB0aGUgZGF0YQpkYXRhIDwtIGFzYWwucmFtYXMgJT4lCiAgc2VsZWN0KHg9UmFtYSwgeT10YXNhX2ZlbWluaXphY2lvbikgJT4lIAogIGFycmFuZ2UoeSkgJT4lCiAgbXV0YXRlKHg9ZmFjdG9yKHgseCkpCiAgCiMgUGxvdApnZ3Bsb3QoZGF0YSwgYWVzKHg9eCwgeT15KSkgKwogIGdlb21fc2VnbWVudChhZXMoeD14LCB4ZW5kPXgsIHk9MCwgeWVuZD15KSwgCiAgICAgICAgICAgICAgIGNvbG9yPWlmZWxzZShkYXRhJHggJWluJSBjKCJTZXJ2aWNpbyBkb21lc3RpY28iKSwgIiMwMEJERDYiLCAiI0ZFMTc2NCIpLCAKICAgICAgICAgICAgICAgc2l6ZT1pZmVsc2UoZGF0YSR4ICVpbiUgYygiU2VydmljaW8gZG9tZXN0aWNvIiksIDEuMywgMC43KSApICsKICBnZW9tX3BvaW50KGNvbG9yPWlmZWxzZShkYXRhJHggJWluJSBjKCJTZXJ2aWNpbyBkb21lc3RpY28iKSwgIiMwMEJERDYiLCAiI0ZFMTc2NCIpLCAKICAgICAgICAgICAgIHNpemU9aWZlbHNlKGRhdGEkeCAlaW4lIGMoIlNlcnZpY2lvIGRvbWVzdGljbyIpLCA1LCAyKSApICsKICB0aGVtZV9pcHN1bSgpICsKICBjb29yZF9mbGlwKCkgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbj0ibm9uZSIpICsKICBnZ3RpdGxlKCJUYXNhIGRlIGZlbWluaXphY2nDs24iKSArCiAgeGxhYigiIikgKwogIHlsYWIoIlBvcmNlbnRhamUiKSArCiAgbGFicyhzdWJ0aXRsZSA9IHBhc3RlMCgiUG9ibGFjacOzbiBhc2FsYXJpYWRhIHBvciByYW1hLiAiLCBkYXRlKSwKICAgICAgIGNhcHRpb24gPSBjYXB0aW9uKQpgYGAKCiMjIyMjIFByb3BvcmNpw7NuIGVudHJlIGxhcyBhc2FsYXJpYWRhcyBtdWplcmVzCgpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQojIFJlb3JkZXIgdGhlIGRhdGEKZGF0YSA8LSBhc2FsLnJhbWFzICU+JQogIHNlbGVjdCh4PVJhbWEsIHk9cHJvcF9lbl9tdWplcmVzKSAlPiUgCiAgYXJyYW5nZSh5KSAlPiUKICBtdXRhdGUoeD1mYWN0b3IoeCx4KSkKICAKIyBQbG90CmdncGxvdChkYXRhLCBhZXMoeD14LCB5PXkpKSArCiAgZ2VvbV9zZWdtZW50KGFlcyh4PXgsIHhlbmQ9eCwgeT0wLCB5ZW5kPXkpLCAKICAgICAgICAgICAgICAgY29sb3I9aWZlbHNlKGRhdGEkeCAlaW4lIGMoIlNlcnZpY2lvIGRvbWVzdGljbyIpLCAiIzAwQkRENiIsICIjRkUxNzY0IiksIAogICAgICAgICAgICAgICBzaXplPWlmZWxzZShkYXRhJHggJWluJSBjKCJTZXJ2aWNpbyBkb21lc3RpY28iKSwgMS4zLCAwLjcpICkgKwogIGdlb21fcG9pbnQoY29sb3I9aWZlbHNlKGRhdGEkeCAlaW4lIGMoIlNlcnZpY2lvIGRvbWVzdGljbyIpLCAiIzAwQkRENiIsICIjRkUxNzY0IiksIAogICAgICAgICAgICAgc2l6ZT1pZmVsc2UoZGF0YSR4ICVpbiUgYygiU2VydmljaW8gZG9tZXN0aWNvIiksIDUsIDIpICkgKwogIHRoZW1lX2lwc3VtKCkgKwogIGNvb3JkX2ZsaXAoKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uPSJub25lIikgKwogIGdndGl0bGUoIlByb3BvcmNpw7NuIGVudHJlIG11amVyZXMiKSArCiAgeGxhYigiIikgKwogIHlsYWIoIlBvcmNlbnRhamUiKSArCiAgbGFicyhzdWJ0aXRsZSA9IHBhc3RlMCgiUG9ibGFjacOzbiBhc2FsYXJpYWRhIHBvciByYW1hLiAiLCBkYXRlKSwKICAgICAgIGNhcHRpb24gPSBjYXB0aW9uKQpgYGAKCiMjIyMjIFByb3BvcmNpw7NuIGVudHJlIGxvcyBhc2FsYXJpYWRvcyB2YXJvbmVzCgpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQojIFJlb3JkZXIgdGhlIGRhdGEKZGF0YSA8LSBhc2FsLnJhbWFzICU+JQogIHNlbGVjdCh4PVJhbWEsIHk9cHJvcF9lbl92YXJvbmVzKSAlPiUgCiAgYXJyYW5nZSh5KSAlPiUKICBtdXRhdGUoeD1mYWN0b3IoeCx4KSkKICAKIyBQbG90CmdncGxvdChkYXRhLCBhZXMoeD14LCB5PXkpKSArCiAgZ2VvbV9zZWdtZW50KGFlcyh4PXgsIHhlbmQ9eCwgeT0wLCB5ZW5kPXkpLCAKICAgICAgICAgICAgICAgY29sb3I9aWZlbHNlKGRhdGEkeCAlaW4lIGMoIlNlcnZpY2lvIGRvbWVzdGljbyIpLCAiIzAwQkRENiIsICIjRkUxNzY0IiksIAogICAgICAgICAgICAgICBzaXplPWlmZWxzZShkYXRhJHggJWluJSBjKCJTZXJ2aWNpbyBkb21lc3RpY28iKSwgMS4zLCAwLjcpICkgKwogIGdlb21fcG9pbnQoY29sb3I9aWZlbHNlKGRhdGEkeCAlaW4lIGMoIlNlcnZpY2lvIGRvbWVzdGljbyIpLCAiIzAwQkRENiIsICIjRkUxNzY0IiksIAogICAgICAgICAgICAgc2l6ZT1pZmVsc2UoZGF0YSR4ICVpbiUgYygiU2VydmljaW8gZG9tZXN0aWNvIiksIDUsIDIpICkgKwogIHRoZW1lX2lwc3VtKCkgKwogIGNvb3JkX2ZsaXAoKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uPSJub25lIikgKwogIGdndGl0bGUoIlByb3BvcmNpw7NuIGVudHJlIHZhcm9uZXMiKSArCiAgeGxhYigiIikgKwogIHlsYWIoIlBvcmNlbnRhamUiKSArCiAgbGFicyhzdWJ0aXRsZSA9IHBhc3RlMCgiUG9ibGFjacOzbiBhc2FsYXJpYWRhIHBvciByYW1hLiAiLCBkYXRlKSwKICAgICAgIGNhcHRpb24gPSBjYXB0aW9uKQpgYGAKCiMjIyMjIFRhc2EgZGUgbm8gcmVnaXN0cm8gZGUgbGEgcmVsYWNpw7NuIGxhYm9yYWwKCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CiMgUmVvcmRlciB0aGUgZGF0YQpkYXRhIDwtIGFzYWwucmFtYXMgJT4lCiAgc2VsZWN0KHg9UmFtYSwgeT10YXNhX25vX3JlZ2lzdHJvKSAlPiUgCiAgYXJyYW5nZSh5KSAlPiUKICBtdXRhdGUoeD1mYWN0b3IoeCx4KSkKICAKIyBQbG90CmdncGxvdChkYXRhLCBhZXMoeD14LCB5PXkpKSArCiAgZ2VvbV9zZWdtZW50KGFlcyh4PXgsIHhlbmQ9eCwgeT0wLCB5ZW5kPXkpLCAKICAgICAgICAgICAgICAgY29sb3I9aWZlbHNlKGRhdGEkeCAlaW4lIGMoIlNlcnZpY2lvIGRvbWVzdGljbyIpLCAiIzAwQkRENiIsICIjRkUxNzY0IiksIAogICAgICAgICAgICAgICBzaXplPWlmZWxzZShkYXRhJHggJWluJSBjKCJTZXJ2aWNpbyBkb21lc3RpY28iKSwgMS4zLCAwLjcpICkgKwogIGdlb21fcG9pbnQoY29sb3I9aWZlbHNlKGRhdGEkeCAlaW4lIGMoIlNlcnZpY2lvIGRvbWVzdGljbyIpLCAiIzAwQkRENiIsICIjRkUxNzY0IiksIAogICAgICAgICAgICAgc2l6ZT1pZmVsc2UoZGF0YSR4ICVpbiUgYygiU2VydmljaW8gZG9tZXN0aWNvIiksIDUsIDIpICkgKwogIHRoZW1lX2lwc3VtKCkgKwogIGNvb3JkX2ZsaXAoKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uPSJub25lIikgKwogIGdndGl0bGUoIk5vIHJlZ2lzdHJvIGRlIGxhIHJlbGFjacOzbiBsYWJvcmFsIikgKwogIHhsYWIoIiIpICsKICB5bGFiKCJQb3JjZW50YWplIikgKwogIGxhYnMoc3VidGl0bGUgPSBwYXN0ZTAoIlBvYmxhY2nDs24gYXNhbGFyaWFkYSBwb3IgcmFtYS4gIiwgZGF0ZSksCiAgICAgICBjYXB0aW9uID0gY2FwdGlvbikKYGBgCgojIyMjIyBJbmdyZXNvcyBtZW5zdWFsZXMgcHJvbWVkaW8KCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CiMgUmVvcmRlciB0aGUgZGF0YQpkYXRhIDwtIGFzYWwucmFtYXMgJT4lCiAgc2VsZWN0KHg9UmFtYSwgeT1pbmdyZXNvX21lbnN1YWwpICU+JSAKICBhcnJhbmdlKHkpICU+JQogIG11dGF0ZSh4PWZhY3Rvcih4LHgpKQogIAojIFBsb3QKZ2dwbG90KGRhdGEsIGFlcyh4PXgsIHk9eSkpICsKICBnZW9tX3NlZ21lbnQoYWVzKHg9eCwgeGVuZD14LCB5PTAsIHllbmQ9eSksIAogICAgICAgICAgICAgICBjb2xvcj1pZmVsc2UoZGF0YSR4ICVpbiUgYygiU2VydmljaW8gZG9tZXN0aWNvIiksICIjMDBCREQ2IiwgIiNGRTE3NjQiKSwgCiAgICAgICAgICAgICAgIHNpemU9aWZlbHNlKGRhdGEkeCAlaW4lIGMoIlNlcnZpY2lvIGRvbWVzdGljbyIpLCAxLjMsIDAuNykgKSArCiAgZ2VvbV9wb2ludChjb2xvcj1pZmVsc2UoZGF0YSR4ICVpbiUgYygiU2VydmljaW8gZG9tZXN0aWNvIiksICIjMDBCREQ2IiwgIiNGRTE3NjQiKSwgCiAgICAgICAgICAgICBzaXplPWlmZWxzZShkYXRhJHggJWluJSBjKCJTZXJ2aWNpbyBkb21lc3RpY28iKSwgNSwgMikgKSArCiAgdGhlbWVfaXBzdW0oKSArCiAgY29vcmRfZmxpcCgpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb249Im5vbmUiKSArCiAgZ2d0aXRsZSgiSW5ncmVzb3MgbWVuc3VhbGVzIHByb21lZGlvIikgKwogIHhsYWIoIiIpICsKICB5bGFiKCJQZXNvcyIpICsKICBsYWJzKHN1YnRpdGxlID0gcGFzdGUwKCJQb2JsYWNpw7NuIGFzYWxhcmlhZGEgcG9yIHJhbWEuICIsIGRhdGUpLAogICAgICAgY2FwdGlvbiA9IGNhcHRpb24pCmBgYAoKIyMjIyMgSW5ncmVzb3MgcG9yIGhvcmEgcHJvbWVkaW8KCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CiMgUmVvcmRlciB0aGUgZGF0YQpkYXRhIDwtIGFzYWwucmFtYXMgJT4lCiAgc2VsZWN0KHg9UmFtYSwgeT1pbmdyZXNvX2hyKSAlPiUgCiAgYXJyYW5nZSh5KSAlPiUKICBtdXRhdGUoeD1mYWN0b3IoeCx4KSkKICAKIyBQbG90CmdncGxvdChkYXRhLCBhZXMoeD14LCB5PXkpKSArCiAgZ2VvbV9zZWdtZW50KGFlcyh4PXgsIHhlbmQ9eCwgeT0wLCB5ZW5kPXkpLCAKICAgICAgICAgICAgICAgY29sb3I9aWZlbHNlKGRhdGEkeCAlaW4lIGMoIlNlcnZpY2lvIGRvbWVzdGljbyIpLCAiIzAwQkRENiIsICIjRkUxNzY0IiksIAogICAgICAgICAgICAgICBzaXplPWlmZWxzZShkYXRhJHggJWluJSBjKCJTZXJ2aWNpbyBkb21lc3RpY28iKSwgMS4zLCAwLjcpICkgKwogIGdlb21fcG9pbnQoY29sb3I9aWZlbHNlKGRhdGEkeCAlaW4lIGMoIlNlcnZpY2lvIGRvbWVzdGljbyIpLCAiIzAwQkRENiIsICIjRkUxNzY0IiksIAogICAgICAgICAgICAgc2l6ZT1pZmVsc2UoZGF0YSR4ICVpbiUgYygiU2VydmljaW8gZG9tZXN0aWNvIiksIDUsIDIpICkgKwogIHRoZW1lX2lwc3VtKCkgKwogIGNvb3JkX2ZsaXAoKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uPSJub25lIikgKwogIGdndGl0bGUoIkluZ3Jlc29zIHBvciBob3JhIHByb21lZGlvIikgKwogIHhsYWIoIiIpICsKICB5bGFiKCJQZXNvcyIpICsKICBsYWJzKHN1YnRpdGxlID0gcGFzdGUwKCJQb2JsYWNpw7NuIGFzYWxhcmlhZGEgcG9yIHJhbWEuICIsIGRhdGUpLAogICAgICAgY2FwdGlvbiA9IGNhcHRpb24pCmBgYAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgo=