Secciones

Introducción


Introducción



El objetivo de este informe es visibilizar las diferencias que, de acuerdo al género de las personas, pueden encontrarse en el ámbito del mercado de trabajo, como los ingresos que perciben, la cantidad de horas que trabajan semanalmente, y la distribución de las tareas domésticas. También se indaga sobre la expresión de estos mismos fenómenos en la distribución del ingreso a nivel social. Para ello se presenta una serie de indicadores, cuadros y gráficos de elaboración propia, que intentan responder distintos tipos de preguntas. Entre ellas se encuentran las siguientes: ¿cómo se compone el mercado de trabajo de acuerdo al género de las personas?, ¿hay diferencia entre varones y mujeres cuando hablamos de trabajo informal?, ¿y cuando hablamos de cargos jerárquicos?, ¿qué tanta diferencia hay entre los ingresos de los varones y de las mujeres?, ¿los varones cobran más por cada hora trabajada?, ¿trabajan las mujeres menos horas que los varones?, ¿qué pasa si consideramos trabajo no sólo a lo que se remunera sino también al trabajo doméstico?.

Para realizar los cálculos se utilizan bases de datos publicadas por la Encuesta Permanente de Hogares del INDEC. 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.

Respecto del impacto de la pandemia por COVID-19, 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.

Los indicadores presentados se encuentran desagregados según la variable disponible, que indica el sexo declarado por las personas respondentes de la encuesta, de acuerdo a una distinción binaria. Bregamos por la incorporación definitiva de una pregunta que nos permita tener información sobre la identidad de género de las personas en el próximo censo nacional, además de la referida al sexo asignado al nacer. La población trans-travesti históricamente ha sido excluida mediante violencia física, simbólica, psicológica, sexual y económica del sistema educativo, de salud y del trabajo formal. Dada la situación de vulnerabilidad a la que muches se enfrentan, resulta fundamental que estén presentes en las estadísticas oficiales.

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

Obviamente, estás invitade a utilizar estos datos en notas, reflexiones, trabajos, infografías, etc2. Además, si te gusta lo que hacemos podés apoyarnos potenciando nuestros proyectos, haciéndote socie del #ClubEcofeminita o realizando una donación.


1 Presionando en_ Code > Download Rmd _se accede a la descarga de la sintaxis completa de este informe.

2 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, Pradier Carolina, Lee Justina. (2022). Ecofeminita/EcoFemiData: informes ecofemidata. Zenodo. http://doi.org/10.5281/zenodo.4540185

Mercado de Trabajo


Sobre la composición del Mercado de Trabajo



En esta sección se intenta mostrar las asimetrías que existen en el mercado de trabajo en cuanto a su composición. Para esto se utilizan las tasas de actividad, empleo, desempleo y subocupación según el sexo de las personas. El objetivo es ver qué tan masculinizado se encuentra el mercado laboral y ver si las mujeres encuentran más problemas a la hora de conseguir un empleo. También se analizan estos indicadores teniendo en cuenta la edad de las personas y se examina la incidencia de la informalidad en las relaciones de dependencia de asalariados y asalariadas. A su vez, se grafica la diferencia en acceso a cargos jerárquicos y la estructura de las diferentes ramas de ocupación, vinculando estos datos a las ideas de segregación vertical y horizontal en el mercado de trabajo.


Tasas básicas


En primer lugar se presentan algunos indicadores clásicos (utilizados a nivel internacional) que caracterizan la composición del mercado de trabajo, desagregados según el sexo.

La tasa de actividad es la relación entre aquellos que participan en el mercado de trabajo (ya sea como ocupados o como desocupados) y la población total. En este caso, dicha tasa es ampliamente mayor entre los varones (la diferencia ronda los 19 puntos porcentuales). Esta discrepancia podría ser explicada por múltiples causas. Una de ellas es que una importante porción de las mujeres en edad laboral dediquen su tiempo a realizar tareas domésticas no remuneradas, en lugar de tener una actividad en el mercado de trabajo. Otra razón posible podría ser el hecho de que las mujeres tiendan, en promedio, a educarse más que sus pares varones. La tasa de empleo, por su parte, exhibe la proporción de ocupados entre la población total. La diferencia entre varones y mujeres en este caso ronda los 18 puntos, denotando el mismo fenómeno anteriormente mencionado.

Es importante aclarar que estas tasas expresan el comportamiento agregado de la población, y que las diferencias entre varones y mujeres sufren variaciones si se tienen en cuenta otras variables, como pueden ser los grupos de edad, el nivel educativo, la presencia de niñes en el hogar o el nivel de ingresos.

Figura 1.


A diferencia de las tasas anteriores, las tasas de desocupación y subocupación expresan la proporción que estos grupos representan en la Población Económicamente Activa. Usualmente, ambas tasas son mayores para las mujeres que para los varones, señalando que, incluso siendo minoría en el mercado de trabajo, las mujeres tendrían más dificultades para conseguir trabajo y/o para trabajar una jornada completa.

En su conjunto, los cuatro indicadores presentados en esta sección muestran una primera imagen de la problemática que enfrentan las mujeres en el mercado de trabajo argentino.

Figura 2.

Por grupos de edad


A continuación se exponen los mismos indicadores, pero desagregados por grupos de edad además de por sexo.

En este caso, llama la atención que son las mujeres más jóvenes las que presentan las mayores tasas de desocupación y subocupación. Para dar un ejemplo, un 18.0% de las mujeres de 14 a 29 años está desocupada, es decir que, no teniendo ocupación, están buscando activamente un trabajo y no lo consiguen. En cambio, en el caso de los varones jóvenes, el porcentaje de desocupados es de más del 17%.

Asimismo, se observa una sustancial diferencia en la tasa de actividad y empleo entre las mujeres y hombres de entre 30 y 64 años.

Figura 3.

Principales Tasas del Mercado de Trabajo, por grupos de edad y sexo

Población de 14 a 64 años. Total de aglomerados urbanos. 3er trimestre 2021

de 14 a 29 años
de 30 a 64 años
Indicadores 1. Mujeres 1. Varones 2. Mujeres 2. Varones
Tasa Actividad 41.4% 49.8% 68.7% 91.4%
Tasa Empleo 34.0% 41.5% 64.6% 86.9%
Tasa Desocupación 18.0% 16.6% 6.1% 4.9%
Tasa Subocupación 19.1% 12.0% 14.1% 9.1%

#Ecofemidata y EcoFeminita en base a EPH-INDEC

Empleo no registrado


La falta de descuento jubilatorio suele ser un indicador que aproxima la falta de registro de la relación laboral asalariada. Como puede verse en el siguiente cuadro, la incidencia de esta problemática es mayor entre las asalariadas mujeres. En concreto, hay un 36.0% de las asalariadas que por su trabajo realizado no posee descuentos jubilatorios, mientras que para los asalariados varones dicha tasa es del 30.6%.

Figura 4.

Empleo sin descuento jubilatorio por sexo

Ocupadas/os asalariadas/os. Total de aglomerados urbanos. 3er trimestre 2021
Sexo Sin descuento jubilatorio
Mujeres 36.0%
Varones 30.6%

#Ecofemidata y EcoFeminita en base a EPH-INDEC

Cargos jerárquicos


Además de tener una participación más restringida en el mercado de trabajo, las ocupadas encuentran más obstáculos para acceder a cargos jerárquicos: mientras que un 10.0% de los ocupados varones tienen cargos de dirección o son jefes, solo un 5.4% de las ocupadas ejercen puestos de esas características.

Esta problemática es conocida como techo de Cristal o segregación vertical del mercado de trabajo, y hace referencia a la dificultad que poseen las mujeres para ascender profesionalmente en el mercado laboral. Si se tiene en cuenta que el mercado de trabajo en general se encuentra masculinizado, estos porcentajes indican que hay muchas más probabilidades de tener un jefe o director varón en los espacios de trabajo.

Figura 5.

Ramas de la ocupación


La siguiente tabla representa a ocupadas y ocupados, según la rama de ocupación en la que se desempeñan. La tasa de feminización indica el porcentaje de mujeres que hay en cada una de ellas y, como puede observarse, las mujeres se encuentran sobrerrepresentadas en aquellos sectores vinculados al cuidado y las tareas de reproducción, como son el servicio doméstico, la enseñanza y los servicios sociales y de salud. Por su parte, sectores como la construcción, transporte y comunicaciones, las actividades primarias e incluso la industria manufacturera se encuentran masculinizadas.

Este fenómeno se conoce como Paredes de Cristal o segregación horizontal, y hace referencia a los muros invisibles que segmentan el mercado de trabajo de acuerdo a los estereotipos de género aún vigentes.

Figura 6.

Indicadores por ramas de la ocupación (seleccionadas)

Ocupadas/os. Tasa de feminización, ingreso mensual promedio, ingreso horario. Total de aglomerados urbanos. 3er trimestre 2021
Rama de la ocupación Tasa de feminización Ingreso mensual promedio Ingreso horario
Servicio domestico 98.0% $15.400 $214
Ensenanza 74.2% $45.900 $474
Servicios sociales y de salud 72.8% $56.700 $457
Industria manufacturera 26.5% $51.800 $309
Transporte, almacenamiento y comunicaciones 16.5% $68.500 $415
Actividades primarias 13.4% $82.100 $463
Construccion 3.1% $36.400 $245

#Ecofemidata y EcoFeminita en base a EPH-INDEC

Ingresos


Ingresos



En esta sección se coloca el foco en las diferencias de montos de ingresos que perciben los varones y las mujeres. Estos ingresos pueden provenir de diversas fuentes y al mismo tiempo pueden desagregarse según características adicionales de las personas o los puestos que desempeñan. A su vez, pueden distinguirse los ingresos mensuales y los ingresos por hora trabajada.

Para dimensionar estas diferencias hacemos uso del concepto de “brecha”, que en este caso se calcula como la diferencia entre los ingresos promedios de los varones y las mujeres, expresada en términos del ingreso más alto. Es decir, que puede leerse como “las mujeres perciben ingresos que, en promedio, son un …% menores que los de los varones”.


Ingresos mensuales

Brechas de ingresos mensuales


Como se ve en el siguiente cuadro, para el caso de todas las personas perceptoras de ingresos, la brecha entre mujeres y varones respecto al ingreso total individual es de 28.4%. Es decir, contemplando todos los ingresos que se perciben, sean de origen laboral o no laboral (como jubilaciones y pensiones, cuotas alimentarias, subsidios, etc.), las mujeres perciben ingresos que, en promedio, son un 28.4% menores que los de los varones.

Simultáneamente, en el mercado de trabajo, las mujeres ganan en promedio un 26.0% menos que los varones ($39.400 vs. $53.200). Estos datos corresponden a la totalidad de ocupadas/os, cualquiera sea su categoría ocupacional, calificación o jerarquía, y observando en este caso los ingresos provenientes de su ocupación principal.

Si tomamos en cuenta únicamente a aquellas personas que no poseen descuentos jubilatorios, se observa cómo las mujeres ganan en promedio un 38.5% menos que sus pares. Es decir que la brecha de ingresos entre las y los trabajadores se amplía cuando vemos a aquellas/os asalariadas/os que tienen peores condiciones de trabajo.

Finalmente, puede observarse que también existe una brecha, aunque mucho menor, entre las jubilaciones que perciben las mujeres y los varones.

Figura 7.

Brechas de ingresos mensuales

Por poblaciones y tipos de ingresos. Total de aglomerados urbanos. 3er trimestre 2021

Media del ingreso
Población Ingreso Brecha Mujeres Varones
Perceptores de ingresos Ingreso Total Individual 28.4% $43.200 $60.300
Ocupadas/os Ingreso de la Ocupación Principal 26.0% $39.400 $53.200
Asalariadas/os sin desc. jubil. Ingreso de la Ocupación Principal 38.5% $19.900 $32.300
Perceptores de jubilación Jubilación 17.0% $30.900 $37.200

#Ecofemidata y EcoFeminita en base a EPH-INDEC

Brecha de ingresos mensuales por calificación del puesto de trabajo


El siguiente gráfico señala cómo la brecha de ingresos mensuales de las/os ocupadas/os se mantiene incluso a iguales niveles de calificación del puesto de trabajo. Por ejemplo, mientras que los varones que trabajan en ocupaciones profesionales tienen un ingreso medio de $115.600, las mujeres ocupadas en ese mismo segmento perciben un ingreso medio de $79.900, es decir, un 30.8% menos que los varones.
En los puestos no calificados, los varones ganan $28.600 en promedio, al tiempo que las mujeres ganan alrededor de $19.600. Esta brecha es del 31.3%.

Figura 8.


Brecha de ingresos mensuales por nivel educativo


Como puede observarse en el cuadro siguiente, el porcentaje de personas que cuentan con un nivel educativo superior es notablemente mayor entre las ocupadas mujeres, en comparación a los ocupados varones.

Sin embargo, a igual nivel educativo, los ingresos laborales de las mujeres trabajadoras son inferiores a los de los varones. Esta diferencia de ingresos es del 31.3% para las de nivel universitario/superior, y del 51.4% para las que cuentan con nivel primario.

Figura 9.

Nivel educativo de mujeres y varones

Porcentaje por columnas. Ocupadas/os. Total de aglomerados urbanos. 3er trimestre 2021
Nivel Educativo Mujeres Varones
Sin Instrucción 2.3% 4.2%
Primaria 20.3% 31.4%
Secundaria 41.9% 44.7%
Superior 35.4% 19.7%

#Ecofemidata y EcoFeminita en base a EPH-INDEC



Figura 10.

Ingresos horarios

Brechas de ingresos horarios


Si en lugar de comparar ingresos mensuales tomamos el ingreso por hora trabajada que perciben las personas, la historia es un poco diferente. En este caso, la brecha disminuye considerablemente. Que las brechas sean más amplias comparando ingresos mensuales de bolsillo, y que sean más estrechas cuando se toman los ingresos por hora, sugiere que las mujeres venden en el mercado de trabajo, por lo general, menos horas que los varones. Como se verá más adelante, esto está ligado al trabajo que las mismas suelen realizar al interior de los hogares.

Figura 11.

Brechas de ingresos horarios

Total de aglomerados urbanos. 3er trimestre 2021

Media del ingreso horario

Población Mujeres Varones Brecha
Ocupadas/os $332 $341 2.7%
Asalariadas/os $347 $340 -2.1%
Asalariadas/os sin desc. jubil. $230 $204 -12.8%

#Ecofemidata y EcoFeminita en base a EPH-INDEC

Brecha de ingresos horarios por nivel educativo


Tal como se analizó en el caso anterior, si se observa la brecha de ingresos horarios por nivel educativo alcanzado, la misma se reduce significativamente, aunque sigue presente en algunas categorías.

Figura 12.

Horas trabajadas


Horas trabajadas



La idea de la “brecha” también puede aplicarse para comparar las horas que trabajan en promedio mujeres y varones en el mercado de trabajo, de forma remunerada. De aquí se desprende que, en promedio, las mujeres trabajan menos horas que los varones, y esto explica una parte importante (aunque no toda) de la brecha de ingresos mensuales.

Cabe cuestionarse entonces respecto al por qué de la diferencia de horas trabajadas por mujeres y por varones. ¿Existe una falta de voluntad de las mujeres para trabajar? ¿Son más “vagas”? ¿O en realidad existe otro motivo por el cual las mujeres deben relegar sus trabajos, del cual los varones están exentos? Como veremos más adelante, los datos sugieren una estrecha relación con la distribución de las tareas domésticas hacia el interior de los hogares.

Figura 13.

Brechas de horas trabajadas

Total de aglomerados urbanos. 3er trimestre 2021

Horas semanales (media)

Población Mujeres Varones Brecha
Ocupadas/os 31.3 40.2 22.3%
Asalariadas/os 30.7 41.4 25.9%
Asalariadas/os sin desc. jubil. 25.5 39.9 36.1%

#Ecofemidata y EcoFeminita en base a EPH-INDEC


Tareas del hogar


Distribución de las tareas domésticas



El trabajo doméstico suele recaer más en las mujeres que en los varones. Es decir, es más probable que sean ellas las encargadas de realizar tareas de cuidado y reproducción para otros miembros de su hogar. En estos casos, el trabajo no se comercia en el mercado, se realiza entre quienes tienen un vínculo personal, y por lo tanto, no se remunera.

A modo ilustrativo, se señala que: del total de personas que realizan tareas domésticas, un 72% son mujeres y un 28% son varones. Esto sucede si tenemos en cuenta el total de los hogares, y seguramente la diferencia se agravaría si quitáramos los hogares unipersonales del conteo y/o incluyéramos a las trabajadoras de servicio doméstico.

Este reparto desigual de las tareas domésticas entre varones y mujeres podría asociarse a las desigualdades vistas anteriormente en la composición del mercado de trabajo (obstáculos en el acceso a cargos jerárquicos, precarización laboral, etc ) y responde a un conjunto de normas sociales y estereotipos de género que asignan mandatos diferenciales a varones y mujeres.

Dicha feminización de las tareas de cuidado penaliza a estas últimas, haciendo que enfrenten extensas cargas de trabajo en el hogar y, por ende, imponiendo una fuerte restricción temporal y afectando el acceso al mercado de trabajo y a la trayectoria laboral.

Figura 14.

A esto se suma el hecho de que prácticamente todas las personas que se dedican al servicio doméstico (es decir, que sí venden este trabajo en el mercado) son mujeres, un 98.2%. Asimismo, del total de mujeres ocupadas, un 13.4% se dedica a esta ocupación, conformando entonces una salida laboral popular. Para más información, podés consultar el informe Las trabajadoras de servicio doméstico en Argentina.


Distribución del ingreso


Distribución del Ingreso



Por último, podemos analizar las brechas de género en la distribución de los ingresos. En primer lugar, se ordena por deciles a las personas según su ingreso per cápita familiar (el ingreso total del hogar dividido por la cantidad de personas que lo componen). Es decir, se forman diez grupos de individuos, de igual tamaño, ordenados según el nivel de ingresos que le corresponden por el hogar al que pertenece. En el siguiente gráfico se puede observar la proporción de mujeres y de varones que finalmente componen cada decil.

En este caso, no hay diferencias destacables más allá de una leve preponderancia de las mujeres en todos los deciles, explicable por cuestiones demográficas (hay más mujeres que varones en la población general).

Figura 15.

En segundo lugar, se separa a la población en deciles según el ingreso total individual. Es decir, se ordena en base al nivel de ingresos que percibe cada individuo, no el hogar (caso anterior). En este caso puede verse que los deciles más bajos de ingresos están compuestos mayoritariamente por mujeres y, en paralelo, los deciles de mayores ingresos se componen mayoritariamente por varones. Decimos entonces que los estratos de menores ingresos están feminizados, al tiempo que los estratos de mayores ingresos se encuentran masculinizados. ¿Cuál es la diferencia respecto del gráfico anterior?

Figura 16.

En la figura 15, las unidades de análisis son los hogares, sólo que luego se distribuyeron de forma “pareja” sus ingresos entre los miembros. De esta forma, la composición por sexo de los estratos de menores ingresos no tiene mayores diferencias respecto a la de los estratos de mayores ingresos. En cambio, en la figura 16 vemos lo que pasa a nivel individual, lo cual es una forma de “abrir” hacia el interior de los hogares. La unidad familiar parece resolver la diferencia entre sexos, pero dentro de la se mantiene la diferencia: los varones tienen más probabilidades de ganar más que las mujeres del mismo hogar. La distribución de los ingresos de las mujeres, sesgada hacia los menores ingresos, se compensa en la estructura familiar con la distribución de los ingresos de los varones, sesgada hacia los mayores ingresos. Entonces, la familia como unidad de reproducción esconde y resuelve debajo de la superficie (la distribución aparentemente equitativa según los ingresos per cápita) la inequitativa distribución de las tareas de reproducción y las dificultades asociadas que tienen las mujeres para participar de forma plena en el mercado de trabajo y por tanto percibir ingresos semejantes a los de los varones.

LS0tDQp0aXRsZTogIkxhIGRlc2lndWFsZGFkIGRlIGfDqW5lcm8gc2UgcHVlZGUgbWVkaXIiDQphdXRob3I6ICJFcXVpcG8gZGUgI0Vjb2ZlbWlkYXRhLCBlbCBlcXVpcG8gZGUgZGF0b3MgZGUgRWNvRmVtaW5pdGEiDQpkYXRlOiAiRmVicmVybyBkZSAyMDIyIg0Kb3V0cHV0Og0KICBodG1sX25vdGVib29rOg0KICAgIHRoZW1lOiBmbGF0bHkNCiAgaHRtbF9kb2N1bWVudDoNCiAgICBkZl9wcmludDogcGFnZWQNCnN1YnRpdGxlOiBEYXRvcyBkZSBsYSBFbmN1ZXN0YSBQZXJtYW5lbnRlIGRlIEhvZ2FyZXMuIDNlciB0cmltZXN0cmUgZGUgMjAyMS4NCnVybGNvbG9yOiBudWxsDQotLS0NCg0KPHN0eWxlPg0KLm5hdj5saT5hIHsNCiAgICBwb3NpdGlvbjogcmVsYXRpdmU7DQogICAgZGlzcGxheTogYmxvY2s7DQogICAgcGFkZGluZzogMTBweCAxNXB4Ow0KICAgIGNvbG9yOiAjRTU2MTZFOw0KfQ0KDQogLm5hdi1waWxscz5saS5hY3RpdmU+YSwgLm5hdi1waWxscz5saS5hY3RpdmU+YTpmb2N1cywgLm5hdi1waWxscz5saS5hY3RpdmU+YTpob3ZlciB7DQogICAgY29sb3I6ICNmZmZmZmY7DQogICAgYmFja2dyb3VuZC1jb2xvcjogI0U1NjE2RTsNCn0NCjwvc3R5bGU+DQoNCi0tLQ0KDQpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBpbmNsdWRlPUZBTFNFfQ0KZGF0ZSA8LSAiM2VyIHRyaW1lc3RyZSAyMDIxIg0KYWdsb19kYXRlIDwtIHBhc3RlMCgiVG90YWwgZGUgYWdsb21lcmFkb3MgdXJiYW5vcy4gIiwgZGF0ZSkNCmZ1ZW50ZSA8LSAiI0Vjb2ZlbWlkYXRhIHkgRWNvRmVtaW5pdGEgZW4gYmFzZSBhIEVQSC1JTkRFQyINCmBgYA0KDQojIFNlY2Npb25lcyB7LnRhYnNldCAudGFic2V0LWZhZGUgLnRhYnNldC1waWxsc30NCg0KIyMgSW50cm9kdWNjacOzbg0KDQotLS0NCg0KIyMjIEludHJvZHVjY2nDs24NCjxicj48YnI+DQpFbCBvYmpldGl2byBkZSBlc3RlIGluZm9ybWUgZXMgdmlzaWJpbGl6YXIgbGFzIGRpZmVyZW5jaWFzIHF1ZSwgZGUgYWN1ZXJkbyBhbCBnw6luZXJvIGRlIGxhcyBwZXJzb25hcywgcHVlZGVuIGVuY29udHJhcnNlIGVuIGVsIMOhbWJpdG8gZGVsIG1lcmNhZG8gZGUgdHJhYmFqbywgY29tbyBsb3MgaW5ncmVzb3MgcXVlIHBlcmNpYmVuLCBsYSBjYW50aWRhZCBkZSBob3JhcyBxdWUgdHJhYmFqYW4gc2VtYW5hbG1lbnRlLCB5IGxhIGRpc3RyaWJ1Y2nDs24gZGUgbGFzIHRhcmVhcyBkb23DqXN0aWNhcy4gVGFtYmnDqW4gc2UgaW5kYWdhIHNvYnJlIGxhIGV4cHJlc2nDs24gZGUgZXN0b3MgbWlzbW9zIGZlbsOzbWVub3MgZW4gbGEgZGlzdHJpYnVjacOzbiBkZWwgaW5ncmVzbyBhIG5pdmVsIHNvY2lhbC4gUGFyYSBlbGxvIHNlIHByZXNlbnRhIHVuYSBzZXJpZSBkZSBpbmRpY2Fkb3JlcywgY3VhZHJvcyB5IGdyw6FmaWNvcyBkZSBlbGFib3JhY2nDs24gcHJvcGlhLCBxdWUgaW50ZW50YW4gcmVzcG9uZGVyIGRpc3RpbnRvcyB0aXBvcyBkZSBwcmVndW50YXMuIEVudHJlIGVsbGFzIHNlIGVuY3VlbnRyYW4gbGFzIHNpZ3VpZW50ZXM6IF9fwr9jw7NtbyBzZSBjb21wb25lIGVsIG1lcmNhZG8gZGUgdHJhYmFqbyBkZSBhY3VlcmRvIGFsIGfDqW5lcm8gZGUgbGFzIHBlcnNvbmFzPywgIMK/aGF5IGRpZmVyZW5jaWEgZW50cmUgdmFyb25lcyB5IG11amVyZXMgY3VhbmRvIGhhYmxhbW9zIGRlIHRyYWJham8gaW5mb3JtYWw/LCAgwr95IGN1YW5kbyBoYWJsYW1vcyBkZSBjYXJnb3MgamVyw6FycXVpY29zPywgIMK/cXXDqSB0YW50YSBkaWZlcmVuY2lhIGhheSBlbnRyZSBsb3MgaW5ncmVzb3MgZGUgbG9zIHZhcm9uZXMgeSBkZSBsYXMgbXVqZXJlcz8sICDCv2xvcyB2YXJvbmVzIGNvYnJhbiBtw6FzIHBvciBjYWRhIGhvcmEgdHJhYmFqYWRhPywgIMK/dHJhYmFqYW4gbGFzIG11amVyZXMgbWVub3MgaG9yYXMgcXVlIGxvcyB2YXJvbmVzPywgIMK/cXXDqSBwYXNhIHNpIGNvbnNpZGVyYW1vcyB0cmFiYWpvIG5vIHPDs2xvIGEgbG8gcXVlIHNlIHJlbXVuZXJhIHNpbm8gdGFtYmnDqW4gYWwgdHJhYmFqbyBkb23DqXN0aWNvP19fLg0KPGJyPjxicj4NClBhcmEgcmVhbGl6YXIgbG9zIGPDoWxjdWxvcyBzZSB1dGlsaXphbiBiYXNlcyBkZSBkYXRvcyBwdWJsaWNhZGFzIHBvciBsYSBfX0VuY3Vlc3RhIFBlcm1hbmVudGUgZGUgSG9nYXJlcyBkZWwgSU5ERUNfXy4gRXN0YSBlbmN1ZXN0YSByZWxldmEgY2FyYWN0ZXLDrXN0aWNhcyBkZW1vZ3LDoWZpY2FzLCBzb2NpYWxlcywgZWNvbsOzbWljYXMsIGNvbiBlc3BlY2lhbCBhdGVuY2nDs24gYSBsYXMgZm9ybWFzIGRlIHBhcnRpY2lwYWNpw7NuIGVuIGVsIG1lcmNhZG8gbGFib3JhbCwgZW50cmUgaG9nYXJlcyB5IHBlcnNvbmFzIGRlIDMxIGFnbG9tZXJhZG9zIHVyYmFub3MuIA0KPGJyPjxicj4NClJlc3BlY3RvIGRlbCBfX2ltcGFjdG8gZGUgbGEgcGFuZGVtaWEgcG9yIENPVklELTE5X18sIHRhbnRvIHNvYnJlIGxvcyByZXN1bHRhZG9zIGNvbW8gc29icmUgbGEgY2FsaWRhZCBkZSBsb3MgZGF0b3MsIGNhYmUgYWNsYXJhciBxdWUgbGEgZW5jdWVzdGEgcGFzw7MgZGUgbGEgbW9kYWxpZGFkIHByZXNlbmNpYWwgYSBsYSB0ZWxlZsOzbmljYSBwYXJhIGNvbnRhY3RhciB5IHJlYWxpemFyIGxhIGVudHJldmlzdGEgYSBsb3MgaG9nYXJlcy4gRWwgcHJvcGlvIElOREVDIGFkdmllcnRlIHF1ZSBjaWVydG9zIGRhdG9zIG5vIGN1ZW50YW4gY29uIGxhIGNhbGlkYWQgY29uIGxhIHF1ZSBoYWJpdHVhbG1lbnRlIGxhIEVQSCBwcmVzZW50YSBzdXMgcmVzdWx0YWRvcy4NCjxicj48YnI+DQpMb3MgaW5kaWNhZG9yZXMgcHJlc2VudGFkb3Mgc2UgZW5jdWVudHJhbiBkZXNhZ3JlZ2Fkb3Mgc2Vnw7puIGxhIHZhcmlhYmxlIGRpc3BvbmlibGUsIHF1ZSBpbmRpY2EgZWwgX3NleG9fIGRlY2xhcmFkbyBwb3IgbGFzIHBlcnNvbmFzIHJlc3BvbmRlbnRlcyBkZSBsYSBlbmN1ZXN0YSwgZGUgYWN1ZXJkbyBhIHVuYSBkaXN0aW5jacOzbiBfYmluYXJpYV8uIEJyZWdhbW9zIHBvciBsYSBpbmNvcnBvcmFjacOzbiBkZWZpbml0aXZhIGRlIHVuYSBwcmVndW50YSBxdWUgbm9zIHBlcm1pdGEgdGVuZXIgaW5mb3JtYWNpw7NuIHNvYnJlIGxhIGlkZW50aWRhZCBkZSBnw6luZXJvIGRlIGxhcyBwZXJzb25hcyBlbiBlbCBwcsOzeGltbyBjZW5zbyBuYWNpb25hbCwgYWRlbcOhcyBkZSBsYSByZWZlcmlkYSBhbCBzZXhvIGFzaWduYWRvIGFsIG5hY2VyLiBMYSBwb2JsYWNpw7NuIHRyYW5zLXRyYXZlc3RpIGhpc3TDs3JpY2FtZW50ZSBoYSBzaWRvIGV4Y2x1aWRhIG1lZGlhbnRlIHZpb2xlbmNpYSBmw61zaWNhLCBzaW1iw7NsaWNhLCBwc2ljb2zDs2dpY2EsIHNleHVhbCB5IGVjb27Ds21pY2EgZGVsIHNpc3RlbWEgZWR1Y2F0aXZvLCBkZSBzYWx1ZCB5IGRlbCB0cmFiYWpvIGZvcm1hbC4gRGFkYSBsYSBzaXR1YWNpw7NuIGRlIHZ1bG5lcmFiaWxpZGFkIGEgbGEgcXVlIG11Y2hlcyBzZSBlbmZyZW50YW4sIHJlc3VsdGEgZnVuZGFtZW50YWwgcXVlIGVzdMOpbiBwcmVzZW50ZXMgZW4gbGFzIGVzdGFkw61zdGljYXMgb2ZpY2lhbGVzLg0KPGJyPjxicj4NCkVsIGRvY3VtZW50byBzZSByZWFsaXrDsyB1dGlsaXphbmRvIGVsIGxlbmd1YWplIGRlIHByb2dyYW1hY2nDs24gUi4gUGFyYSBsZXMgY3VyaW9zZXMsIHRvZG8gZWwgY8OzZGlnbyBzZSBlbmN1ZW50cmEgZGlzcG9uaWJsZSBwYXJhIHN1IGRlc2NhcmdhXjFeLiANCjxicj48YnI+DQpPYnZpYW1lbnRlLCBlc3TDoXMgaW52aXRhZGUgYSB1dGlsaXphciBlc3RvcyBkYXRvcyBlbiBub3RhcywgcmVmbGV4aW9uZXMsIHRyYWJham9zLCBpbmZvZ3JhZsOtYXMsIGV0Y14yXi4gQWRlbcOhcywgc2kgdGUgZ3VzdGEgbG8gcXVlIGhhY2Vtb3MgcG9kw6lzIGFwb3lhcm5vcyBwb3RlbmNpYW5kbyBudWVzdHJvcyBwcm95ZWN0b3MsIGhhY2nDqW5kb3RlIHNvY2llIGRlbCBbI0NsdWJFY29mZW1pbml0YSBvIHJlYWxpemFuZG8gdW5hIGRvbmFjacOzbl0oaHR0cHM6Ly9kb25hcm9ubGluZS5vcmcvZWNvbm9taWEtZmVtaW5pLXMtdGEvY2x1Yi1lY29mZW1pbml0YSkuDQoNCi0tLQ0KDQpeMV4gUHJlc2lvbmFuZG8gZW5fICBfX0NvZGUgPiBEb3dubG9hZCBSbWRfXyBfc2UgYWNjZWRlIGEgbGEgZGVzY2FyZ2EgZGUgbGEgc2ludGF4aXMgY29tcGxldGEgZGUgZXN0ZSBpbmZvcm1lLg0KPGJyPjxicj4NCl4yXiBTaSBuZWNlc2l0w6FzIGNpdGFybm9zIGVuIHVuIHRyYWJham8sIHBvZMOpcyBoYWNlcmxvIGNvbW86ICJTaG9raWRhIE5hdHN1bWksIFNlcnBhIERhaWFuYSwgRG9tZW5lY2ggTGFpYSwgTW91cmUgSnVsaWV0YSwgRmVybsOhbmRleiBFcmxhdWVyIE1pY2FlbGEsIEVzcGnDsWVpcmEgTHVjw61hLCBTYW50ZWxsw6FuIENlbGluYSwgUHJhZGllciBDYXJvbGluYSwgTGVlIEp1c3RpbmEuICgyMDIyKS4gRWNvZmVtaW5pdGEvRWNvRmVtaURhdGE6IGluZm9ybWVzIGVjb2ZlbWlkYXRhLiBaZW5vZG8uIGh0dHA6Ly9kb2kub3JnLzEwLjUyODEvemVub2RvLjQ1NDAxODUiDQoNCmBgYHtyLCBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KIyBTZSBsaW1waWEgbGEgbWVtb3JpYSB5IHNlIGNhcmdhbiBsaWJyZXLDrWFzIMO6dGlsZXMNCiMgUmVpbmljaWFyIFINCmxpYnJhcnkodGlkeXZlcnNlKQ0KbGlicmFyeShodHRyKQ0KbGlicmFyeShzdHJpbmdyKQ0KbGlicmFyeShnZ3RoZW1lcykNCmxpYnJhcnkoc2NhbGVzKQ0KbGlicmFyeShrbml0cikNCmxpYnJhcnkoZ2dhbHQpDQpsaWJyYXJ5KGthYmxlRXh0cmEpDQpsaWJyYXJ5KGZvcm1hdHRhYmxlKQ0KbGlicmFyeShvcGVueGxzeCkNCmxpYnJhcnkoZ3JpZEV4dHJhKQ0KbGlicmFyeShtYWdyaXR0cikNCmxpYnJhcnkoRFQpDQpsaWJyYXJ5KGVwaCkgIyBVbiBwYXF1ZXRlIHBhcmEgdHJhYmFqYXIgY29uIGxhcyBiYXNlcyBkZSBsYSBFbmN1ZXN0YSBwZXJtYW5lbnRlIGRlIEhvZ2FyZXMhDQojIENvbW8gZnVlbnRlIHRvbWFtb3MgdW4gc2NyaXB0IGNvbiBlbCBjw7NkaWdvIHF1ZSBwZXJtaXRlIGNvbnN0cnVpciBsYXMgcmFtYXMgZGUgbGEgb2N1cGFjacOzbiBkZSBhY3VlcmRvIGFsIG5vbWVuY2xhZG9yLCB5IG90cm8gY29uIGZ1bmNpb25lcyBkZSBmb3JtYXRvIHBhcmEgbG9zIGRhdG9zLg0KI3NvdXJjZSgiLi4vLi4vUi9mdW5jaW9uZXMgcmFtYS5SIikgTm8gbmVjZXNpdGFtb3MgbWFzIGVzdG8gcG9ycXVlIHNlIGluY29ycG9ybyBhbCBwYXF1ZXRlIGVwaCA7KQ0Kc291cmNlKCIuLi8uLi9SL2Z1bmNpb25lcyBmb3JtYXRvLlIiKQ0KYGBgDQoNCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGluY2x1ZGU9RkFMU0V9DQojIFNlIGxldmFudGFuIGxhcyBiYXNlcyB1c3VhcmlhcyBkZSBsYSBFUEggZGVsIHRyaW1lc3RyZSBjb3JyZXNwb25kaWVudGUNCiMgKGZ1bmNpb25lcyBkZWwgcGFxdWV0ZSAnZXBoJykNCmJhc2VfaW5kaXZpZHVhbCA8LSBnZXRfbWljcm9kYXRhKHllYXIgPSAyMDIxLCB0cmltZXN0ZXIgPSAzLCB0eXBlID0gImluZGl2aWR1YWwiKQ0KYmFzZV9ob2dhciA8LSBnZXRfbWljcm9kYXRhKHllYXIgPSAyMDIxLCB0cmltZXN0ZXIgPSAzLCB0eXBlID0gImhvZ2FyIikNCmBgYA0KDQpgYGB7ciwgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCiMgTW9kaWZpY2FjaW9uZXMgZW4gbGEgYmFzZQ0KYmFzZV9pbmRpdmlkdWFsIDwtIGJhc2VfaW5kaXZpZHVhbCAlPiUgDQogIG11dGF0ZShTZXhvID0gYXMuY2hhcmFjdGVyKENIMDQpLA0KICAgICAgICAgU2V4byA9IGNhc2Vfd2hlbihTZXhvPT0iMSIgfiAiVmFyb25lcyIsDQogICAgICAgICAgICAgICAgICAgICAgICAgIFNleG89PSIyIiB+ICJNdWplcmVzIiksDQogICAgICAgICBQUDA0RF9DT0QgPSBhcy5jaGFyYWN0ZXIoUFAwNERfQ09EKSwNCiAgICAgICAgIFBQMDREX0NPRCA9IGNhc2Vfd2hlbihuY2hhcihQUDA0RF9DT0QpID09IDUgfiBQUDA0RF9DT0QsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmNoYXIoUFAwNERfQ09EKSA9PSA0IH4gcGFzdGUwKCIwIiwgUFAwNERfQ09EKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuY2hhcihQUDA0RF9DT0QpID09IDMgfiBwYXN0ZTAoIjAwIiwgUFAwNERfQ09EKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuY2hhcihQUDA0RF9DT0QpID09IDIgfiBwYXN0ZTAoIjAwMCIsIFBQMDREX0NPRCksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmNoYXIoUFAwNERfQ09EKSA9PSAxIH4gcGFzdGUwKCIwMDAwIiwgUFAwNERfQ09EKSksDQogICAgICAgICBDQUxJRklDQUNJT04gPSBzdWJzdHIoUFAwNERfQ09ELCA1LCA1KSwNCiAgICAgICAgIENBTElGSUNBQ0lPTiA9IGNhc2Vfd2hlbihDQUxJRklDQUNJT049PSIxIiB+ICJQcm9mZXNpb25hbGVzIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQUxJRklDQUNJT049PSIyIiB+ICJUw6ljbmljb3MiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENBTElGSUNBQ0lPTj09IjMiIH4gIk9wZXJhdGl2b3MiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENBTElGSUNBQ0lPTj09IjQiIH4gIk5vIENhbGlmaWNhZG9zIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUlVFIH4gIjAiKSwNCiAgICAgICAgIENBTElGSUNBQ0lPTiA9IGZhY3RvcihDQUxJRklDQUNJT04sIGMoIk5vIENhbGlmaWNhZG9zIiwgIk9wZXJhdGl2b3MiLCAiVMOpY25pY29zIiwgIlByb2Zlc2lvbmFsZXMiKSksDQogICAgICAgICBKRVJBUlFVSUEgPSBzdWJzdHIoUFAwNERfQ09ELCAzLCAzKSwNCiAgICAgICAgIEpFUkFSUVVJQSA9IGNhc2Vfd2hlbihKRVJBUlFVSUEgJWluJSBjKCIwIiwgIjIiKSB+ICJEaXJlY2Npw7NuIG8gSmVmZXMiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpFUkFSUVVJQT09IjEiIH4gIkN1ZW50YXByb3BpYSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSkVSQVJRVUlBPT0iMyIgfiAiVHJhYmFqYWRvcmVzIEFzYWxhcmlhZG9zIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUlVFIH4gIjAiKSwNCiAgICAgICAgIEpFUkFSUVVJQSA9IGZhY3RvcihKRVJBUlFVSUEsIGMoIkRpcmVjY2nDs24gbyBKZWZlcyIsICJUcmFiYWphZG9yZXMgQXNhbGFyaWFkb3MiLCAiQ3VlbnRhcHJvcGlhIikpLA0KICAgICAgICAgTklWRUxfRURVQ0FUSVZPID0gY2FzZV93aGVuKE5JVkVMX0VEICVpbiUgYygxLCA3KSB+ICJTaW4gSW5zdHJ1Y2Npw7NuIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOSVZFTF9FRCAlaW4lIGMoMiwgMykgfiAiUHJpbWFyaWEiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5JVkVMX0VEICVpbiUgYyg0LCA1KSB+ICJTZWN1bmRhcmlhIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOSVZFTF9FRCA9PSA2ICAgICAgICAgfiAiU3VwZXJpb3IiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5JVkVMX0VEID09IDkgICAgICAgICB+ICJOUy9OUiIpLA0KICAgICAgICAgTklWRUxfRURVQ0FUSVZPID0gZmFjdG9yKE5JVkVMX0VEVUNBVElWTywgbGV2ZWxzID0gYygiU2luIEluc3RydWNjacOzbiIsICJQcmltYXJpYSIsICJTZWN1bmRhcmlhIiwgIlN1cGVyaW9yIikpLA0KICAgICAgICAgR1JVUE9fRURBRCA9IGNhc2Vfd2hlbihDSDA2ID49IDE0ICYgQ0gwNiA8PSAyOSB+ICJkZSAxNCBhIDI5IGHDsW9zIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0gwNiA+PSAzMCAmIENIMDYgPD0gNjQgfiAiZGUgMzAgYSA2NCBhw7FvcyIpKQ0KDQojIGNvbG9yZXMgPSBjKCIjYWExNjVhIiwiIzE2YWE2NiIpDQpjb2xvcmVzID0gYygiI0U1NjE2RSIsICIjYzljOWM5IikNCmBgYA0KDQojIyBNZXJjYWRvIGRlIFRyYWJham8NCg0KLS0tDQoNCiMjIyBTb2JyZSBsYSBjb21wb3NpY2nDs24gZGVsIE1lcmNhZG8gZGUgVHJhYmFqbyB7LnRhYnNldCAudGFic2V0LWZhZGUgLnRhYnNldC1waWxsc30NCjxicj48YnI+DQpFbiBlc3RhIHNlY2Npw7NuIHNlIGludGVudGEgbW9zdHJhciBsYXMgYXNpbWV0csOtYXMgcXVlIGV4aXN0ZW4gZW4gZWwgbWVyY2FkbyBkZSB0cmFiYWpvIGVuIGN1YW50byBhIHN1IGNvbXBvc2ljacOzbi4gUGFyYSBlc3RvIHNlIHV0aWxpemFuIGxhcyB0YXNhcyBkZSBhY3RpdmlkYWQsIGVtcGxlbywgZGVzZW1wbGVvIHkgc3Vib2N1cGFjacOzbiBzZWfDum4gZWwgc2V4byBkZSBsYXMgcGVyc29uYXMuIEVsIG9iamV0aXZvIGVzIHZlciBxdcOpIHRhbiBtYXNjdWxpbml6YWRvIHNlIGVuY3VlbnRyYSBlbCBtZXJjYWRvIGxhYm9yYWwgeSB2ZXIgc2kgbGFzIG11amVyZXMgZW5jdWVudHJhbiBtw6FzIHByb2JsZW1hcyBhIGxhIGhvcmEgZGUgY29uc2VndWlyIHVuIGVtcGxlby4gVGFtYmnDqW4gc2UgYW5hbGl6YW4gZXN0b3MgaW5kaWNhZG9yZXMgdGVuaWVuZG8gZW4gY3VlbnRhIGxhIGVkYWQgZGUgbGFzIHBlcnNvbmFzIHkgc2UgZXhhbWluYSBsYSBpbmNpZGVuY2lhIGRlIGxhIGluZm9ybWFsaWRhZCBlbiBsYXMgcmVsYWNpb25lcyBkZSBkZXBlbmRlbmNpYSBkZSBhc2FsYXJpYWRvcyB5IGFzYWxhcmlhZGFzLiBBIHN1IHZleiwgc2UgZ3JhZmljYSBsYSBkaWZlcmVuY2lhIGVuIGFjY2VzbyBhIGNhcmdvcyBqZXLDoXJxdWljb3MgeSBsYSBlc3RydWN0dXJhIGRlIGxhcyBkaWZlcmVudGVzIHJhbWFzIGRlIG9jdXBhY2nDs24sIHZpbmN1bGFuZG8gZXN0b3MgZGF0b3MgYSBsYXMgaWRlYXMgZGUgc2VncmVnYWNpw7NuIHZlcnRpY2FsIHkgaG9yaXpvbnRhbCBlbiBlbCBtZXJjYWRvIGRlIHRyYWJham8uDQoNCi0tLQ0KDQojIyMjIFRhc2FzIGLDoXNpY2FzDQo8YnI+DQoNCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGluY2x1ZGU9RkFMU0V9DQp0YWJsYTEgPC0gYmFzZV9pbmRpdmlkdWFsICU+JSANCiAgZmlsdGVyKENIMDYgPj0gMTQpICU+JSANCiAgZ3JvdXBfYnkoU2V4bykgJT4lIA0KICBzdW1tYXJpc2UoUG9ibGFjaW9uICAgICAgICAgPSBzdW0oUE9OREVSQSksDQogICAgICAgICAgICBPY3VwYWRvcyAgICAgICAgICA9IHN1bShQT05ERVJBW0VTVEFETyA9PSAxXSksDQogICAgICAgICAgICBEZXNvY3VwYWRvcyAgICAgICA9IHN1bShQT05ERVJBW0VTVEFETyA9PSAyXSksDQogICAgICAgICAgICBQRUEgICAgICAgICAgICAgICA9IE9jdXBhZG9zICsgRGVzb2N1cGFkb3MsDQogICAgICAgICAgICBPY3VwYWRvc19kZW1hbmQgICA9IHN1bShQT05ERVJBW0VTVEFETyA9PSAxICYgUFAwM0ogPT0xXSksDQogICAgICAgICAgICBTdWJvY19kZW1hbmRhbnRlICA9IHN1bShQT05ERVJBW0VTVEFETyA9PSAxICYgSU5URU5TSSA9PTEgJiBQUDAzSj09MV0pLA0KICAgICAgICAgICAgU3Vib2Nfbm9fZGVtYW5kICAgPSBzdW0oUE9OREVSQVtFU1RBRE8gPT0gMSAmIElOVEVOU0kgPT0xICYgUFAwM0ogJWluJSBjKDIsOSldKSwNCiAgICAgICAgICAgIFN1Ym9jdXBhZG9zICAgICAgID0gU3Vib2NfZGVtYW5kYW50ZSArIFN1Ym9jX25vX2RlbWFuZCwNCiAgICAgICAgICAgICdUYXNhIEFjdGl2aWRhZCcgICAgICAgICAgICAgICAgICA9IHJvdW5kKFBFQS9Qb2JsYWNpb24sIDMpLA0KICAgICAgICAgICAgJ1Rhc2EgRW1wbGVvJyAgICAgICAgICAgICAgICAgICAgID0gcm91bmQoT2N1cGFkb3MvUG9ibGFjaW9uLCAzKSwNCiAgICAgICAgICAgICdUYXNhIERlc29jdXBhY2nDs24nICAgICAgICAgICAgICAgPSByb3VuZChEZXNvY3VwYWRvcy9QRUEsIDMpLA0KICAgICAgICAgICAgJ1Rhc2EgT2N1cGFkb3MgRGVtYW5kYW50ZXMnICAgICAgID0gcm91bmQoT2N1cGFkb3NfZGVtYW5kL1BFQSwgMyksDQogICAgICAgICAgICAnVGFzYSBTdWJvY3VwYWNpw7NuJyAgICAgICAgICAgICAgID0gcm91bmQoU3Vib2N1cGFkb3MvUEVBLCAzKSwNCiAgICAgICAgICAgICdUYXNhIFN1Ym9jdXBhY2nDs24gZGVtYW5kYW50ZScgICAgPSByb3VuZChTdWJvY19kZW1hbmRhbnRlL1BFQSwgMyksDQogICAgICAgICAgICAnVGFzYSBTdWJvY3VwYWNpw7NuIG5vIGRlbWFuZGFudGUnID0gcm91bmQoU3Vib2Nfbm9fZGVtYW5kL1BFQSwgMykpICU+JSANCiAgc2VsZWN0KC1jKDI6OSkpICU+JSANCiAgcGl2b3RfbG9uZ2VyKC4sIGNvbHMgPSAyOjgsIG5hbWVzX3RvID0gIkluZGljYWRvcmVzIiwgdmFsdWVzX3RvID0gIlZhbG9yIikgJT4lIA0KICBwaXZvdF93aWRlciguLCBuYW1lc19mcm9tID0gU2V4bywgdmFsdWVzX2Zyb20gPSBWYWxvcikNCg0KaW5saW5lXzEgPC0gdGFibGExICU+JSANCiAgZmlsdGVyKEluZGljYWRvcmVzID09ICJUYXNhIEFjdGl2aWRhZCIpICU+JSANCiAgdHJhbnNtdXRlKGRpZmVyZW5jaWEgPSByb3VuZCgoVmFyb25lcy1NdWplcmVzKSoxMDAsIDApKSAlPiUgDQogIHB1bGwoZGlmZXJlbmNpYSkNCg0KaW5saW5lXzIgPC0gdGFibGExICU+JSANCiAgZmlsdGVyKEluZGljYWRvcmVzID09ICJUYXNhIEVtcGxlbyIpICU+JSANCiAgdHJhbnNtdXRlKGRpZmVyZW5jaWEgPSByb3VuZCgoVmFyb25lcy1NdWplcmVzKSoxMDAsIDApKSAlPiUgDQogIHB1bGwoZGlmZXJlbmNpYSkNCmBgYA0KDQpFbiBwcmltZXIgbHVnYXIgc2UgcHJlc2VudGFuIGFsZ3Vub3MgaW5kaWNhZG9yZXMgY2zDoXNpY29zICh1dGlsaXphZG9zIGEgbml2ZWwgaW50ZXJuYWNpb25hbCkgcXVlIGNhcmFjdGVyaXphbiBsYSBjb21wb3NpY2nDs24gZGVsIG1lcmNhZG8gZGUgdHJhYmFqbywgZGVzYWdyZWdhZG9zIHNlZ8O6biBlbCBzZXhvLg0KPGJyPjxicj4NCkxhIF9fdGFzYSBkZSBhY3RpdmlkYWRfXyBlcyBsYSByZWxhY2nDs24gZW50cmUgYXF1ZWxsb3MgcXVlIHBhcnRpY2lwYW4gZW4gZWwgbWVyY2FkbyBkZSB0cmFiYWpvICh5YSBzZWEgY29tbyBvY3VwYWRvcyBvIGNvbW8gZGVzb2N1cGFkb3MpIHkgbGEgcG9ibGFjacOzbiB0b3RhbC4gRW4gZXN0ZSBjYXNvLCBkaWNoYSB0YXNhIGVzIGFtcGxpYW1lbnRlIG1heW9yIGVudHJlIGxvcyB2YXJvbmVzIChsYSBkaWZlcmVuY2lhIHJvbmRhIGxvcyBgciBpbmxpbmVfMWAgcHVudG9zIHBvcmNlbnR1YWxlcykuIEVzdGEgZGlzY3JlcGFuY2lhIHBvZHLDrWEgc2VyIGV4cGxpY2FkYSBwb3IgbcO6bHRpcGxlcyBjYXVzYXMuIFVuYSBkZSBlbGxhcyBlcyBxdWUgdW5hIGltcG9ydGFudGUgcG9yY2nDs24gZGUgbGFzIG11amVyZXMgZW4gZWRhZCBsYWJvcmFsIGRlZGlxdWVuIHN1IHRpZW1wbyBhIHJlYWxpemFyIHRhcmVhcyBkb23DqXN0aWNhcyBubyByZW11bmVyYWRhcywgZW4gbHVnYXIgZGUgdGVuZXIgdW5hIGFjdGl2aWRhZCBlbiBlbCBtZXJjYWRvIGRlIHRyYWJham8uIE90cmEgcmF6w7NuIHBvc2libGUgcG9kcsOtYSBzZXIgZWwgaGVjaG8gZGUgcXVlIGxhcyBtdWplcmVzIHRpZW5kYW4sIGVuIHByb21lZGlvLCBhIGVkdWNhcnNlIG3DoXMgcXVlIHN1cyBwYXJlcyB2YXJvbmVzLiBMYSBfX3Rhc2EgZGUgZW1wbGVvX18sIHBvciBzdSBwYXJ0ZSwgZXhoaWJlIGxhIHByb3BvcmNpw7NuIGRlIG9jdXBhZG9zIGVudHJlIGxhIHBvYmxhY2nDs24gdG90YWwuIExhIGRpZmVyZW5jaWEgZW50cmUgdmFyb25lcyB5IG11amVyZXMgZW4gZXN0ZSBjYXNvIHJvbmRhIGxvcyBgciBpbmxpbmVfMmAgcHVudG9zLCBkZW5vdGFuZG8gZWwgbWlzbW8gZmVuw7NtZW5vIGFudGVyaW9ybWVudGUgbWVuY2lvbmFkby4NCjxicj48YnI+DQpFcyBpbXBvcnRhbnRlIGFjbGFyYXIgcXVlIGVzdGFzIHRhc2FzIGV4cHJlc2FuIGVsIGNvbXBvcnRhbWllbnRvIGFncmVnYWRvIGRlIGxhIHBvYmxhY2nDs24sIHkgcXVlIGxhcyBkaWZlcmVuY2lhcyBlbnRyZSB2YXJvbmVzIHkgbXVqZXJlcyBzdWZyZW4gdmFyaWFjaW9uZXMgc2kgc2UgdGllbmVuIGVuIGN1ZW50YSBvdHJhcyB2YXJpYWJsZXMsIGNvbW8gcHVlZGVuIHNlciBsb3MgZ3J1cG9zIGRlIGVkYWQsIGVsIG5pdmVsIGVkdWNhdGl2bywgbGEgcHJlc2VuY2lhIGRlIG5pw7FlcyBlbiBlbCBob2dhciBvIGVsIG5pdmVsIGRlIGluZ3Jlc29zLg0KPGJyPjxicj4NCg0KX19GaWd1cmEgMS5fXw0KYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCnRhYmxhMV9ncmFmMSA8LSB0YWJsYTEgJT4lIA0KICBmaWx0ZXIoSW5kaWNhZG9yZXMgJWluJSBjKCJUYXNhIEFjdGl2aWRhZCIsICJUYXNhIEVtcGxlbyIpKSAlPiUgDQogIGdhdGhlciguLCBTZXhvLCBwcm9wb3JjaW9uLCAyOjMpDQoNCmdncGxvdCh0YWJsYTFfZ3JhZjEsIGFlcyh4ID0gJycsIHByb3BvcmNpb24sIGZpbGwgPSBTZXhvLCBncm91cCA9IFNleG8sIA0KICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbCA9IHBlcmNlbnQocHJvcG9yY2lvbiwgZGlnaXRzID0gMSkpKSArDQogIGdlb21fY29sKHBvc2l0aW9uID0gImRvZGdlIikgKw0KICBnZW9tX3RleHQocG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IC45KSwgdmp1c3QgPTIsIHNpemUgPSA2KSArDQogIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGNvbG9yZXMpICsNCiAgZmFjZXRfd3JhcCh+SW5kaWNhZG9yZXMsIHN0cmlwLnBvc2l0aW9uID0gImJvdHRvbSIpICsNCiAgbGFicyh0aXRsZSA9ICJUYXNhcyBkZSBBY3RpdmlkYWQgeSBkZSBFbXBsZW8gcG9yIHNleG8iLA0KICAgICAgIHN1YnRpdGxlID0gcGFzdGUwKCJQb2JsYWNpw7NuIGRlIDE0IGHDsW9zIHkgbcOhcy4gIiwgYWdsb19kYXRlKSwNCiAgICAgICBjYXB0aW9uID0gZnVlbnRlKSArDQogIHRoZW1lX21pbmltYWwoKSArDQogIHRoZW1lKGF4aXMudGl0bGUueSA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgYXhpcy50aXRsZS54ID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICBheGlzLnRleHQueSA9IGVsZW1lbnRfYmxhbmsoKSkNCmBgYA0KDQpgYGB7ciwgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCiMgQXF1w60gaGF5IHF1ZSBjYW1iaWFyIGVsIGRpcmVjdG9yaW8gZW4gcXVlIHNlIHZhIGEgZ3VhcmRhciBlbCBncsOhZmljby4NCiNnZ3NhdmUoIkZpZ3VyYTEucG5nIiwgc2NhbGUgPSAwLjcsIGRwaSA9IDMwMCwgd2lkdGggPSAxMCwgaGVpZ2h0ID0gNywgYmcgPSAiI2ZmZmZmZiIpDQpgYGANCg0KLS0tDQoNCkEgZGlmZXJlbmNpYSBkZSBsYXMgdGFzYXMgYW50ZXJpb3JlcywgbGFzIF9fdGFzYXMgZGUgZGVzb2N1cGFjacOzbiB5IHN1Ym9jdXBhY2nDs25fXyBleHByZXNhbiBsYSBwcm9wb3JjacOzbiBxdWUgZXN0b3MgZ3J1cG9zIHJlcHJlc2VudGFuIGVuIGxhIFBvYmxhY2nDs24gRWNvbsOzbWljYW1lbnRlIEFjdGl2YS4gVXN1YWxtZW50ZSwgYW1iYXMgdGFzYXMgc29uIG1heW9yZXMgcGFyYSBsYXMgbXVqZXJlcyBxdWUgcGFyYSBsb3MgdmFyb25lcywgc2XDsWFsYW5kbyBxdWUsIGluY2x1c28gc2llbmRvIG1pbm9yw61hIGVuIGVsIG1lcmNhZG8gZGUgdHJhYmFqbywgbGFzIG11amVyZXMgdGVuZHLDrWFuIG3DoXMgZGlmaWN1bHRhZGVzIHBhcmEgY29uc2VndWlyIHRyYWJham8geS9vIHBhcmEgdHJhYmFqYXIgdW5hIGpvcm5hZGEgY29tcGxldGEuIA0KPGJyPjxicj4NCkVuIHN1IGNvbmp1bnRvLCBsb3MgY3VhdHJvIGluZGljYWRvcmVzIHByZXNlbnRhZG9zIGVuIGVzdGEgc2VjY2nDs24gbXVlc3RyYW4gdW5hIHByaW1lcmEgaW1hZ2VuIGRlIGxhIHByb2JsZW3DoXRpY2EgcXVlIGVuZnJlbnRhbiBsYXMgbXVqZXJlcyBlbiBlbCBtZXJjYWRvIGRlIHRyYWJham8gYXJnZW50aW5vLg0KPGJyPjxicj4NCg0KX19GaWd1cmEgMi5fXw0KYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCnRhYmxhMV9ncmFmMiA8LSB0YWJsYTEgJT4lIA0KICBmaWx0ZXIoSW5kaWNhZG9yZXMgJWluJSBjKCJUYXNhIERlc29jdXBhY2nDs24iLCAiVGFzYSBTdWJvY3VwYWNpw7NuIikpICU+JSANCiAgZ2F0aGVyKC4sIFNleG8sIHByb3BvcmNpb24sIDI6MykNCg0KZ2dwbG90KHRhYmxhMV9ncmFmMiwgYWVzKHggPSAnJywgcHJvcG9yY2lvbiwgZmlsbCA9IFNleG8sIGdyb3VwID0gU2V4bywgDQogICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsID0gcGVyY2VudChwcm9wb3JjaW9uLCBkaWdpdHMgPSAxKSkpICsNCiAgZ2VvbV9jb2wocG9zaXRpb24gPSAiZG9kZ2UiKSArDQogIGdlb21fdGV4dChwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gLjkpLCB2anVzdCA9Miwgc2l6ZSA9IDYpICsNCiAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzID0gY29sb3JlcykgKw0KICBmYWNldF93cmFwKH5JbmRpY2Fkb3Jlcywgc3RyaXAucG9zaXRpb24gPSAiYm90dG9tIikgKw0KICBsYWJzKHRpdGxlID0gIlRhc2FzIGRlIERlc29jdXBhY2nDs24geSBkZSBTdWJvY3VwYWNpw7NuIHBvciBzZXhvIiwNCiAgICAgICBzdWJ0aXRsZSA9IHBhc3RlMCgiUG9ibGFjacOzbiBkZSAxNCBhw7FvcyB5IG3DoXMuICIsIGFnbG9fZGF0ZSksDQogICAgICAgY2FwdGlvbiA9IGZ1ZW50ZSkgKw0KICB0aGVtZV9taW5pbWFsKCkgKw0KICB0aGVtZShheGlzLnRpdGxlLnkgPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgIGF4aXMudGl0bGUueCA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgYXhpcy50ZXh0LnkgPSBlbGVtZW50X2JsYW5rKCkpDQpgYGANCg0KYGBge3IsIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQojIEFxdcOtIGhheSBxdWUgY2FtYmlhciBlbCBkaXJlY3RvcmlvIGVuIHF1ZSBzZSB2YSBhIGd1YXJkYXIgZWwgZ3LDoWZpY28uDQojZ2dzYXZlKCJGaWd1cmEyLnBuZyIsIHNjYWxlID0gMC43LCBkcGkgPSAzMDAsIHdpZHRoID0gMTAsIGhlaWdodCA9IDcsIGJnID0gIiNmZmZmZmYiKQ0KYGBgDQoNCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGluY2x1ZGU9RkFMU0V9DQpybSh0YWJsYTEsIHRhYmxhMV9ncmFmMSwgdGFibGExX2dyYWYyKQ0KYGBgDQoNCiMjIyMgUG9yIGdydXBvcyBkZSBlZGFkDQo8YnI+DQoNCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGluY2x1ZGU9RkFMU0V9DQp0YWJsYTIgPC0gYmFzZV9pbmRpdmlkdWFsICU+JSANCiAgZmlsdGVyKENIMDYgPj0gMTQpICU+JSANCiAgZ3JvdXBfYnkoU2V4bywgR1JVUE9fRURBRCkgJT4lIA0KICBzdW1tYXJpc2UoUG9ibGFjaW9uICAgICAgICAgPSBzdW0oUE9OREVSQSksDQogICAgICAgICAgICBPY3VwYWRvcyAgICAgICAgICA9IHN1bShQT05ERVJBW0VTVEFETyA9PSAxXSksDQogICAgICAgICAgICBEZXNvY3VwYWRvcyAgICAgICA9IHN1bShQT05ERVJBW0VTVEFETyA9PSAyXSksDQogICAgICAgICAgICBQRUEgICAgICAgICAgICAgICA9IE9jdXBhZG9zICsgRGVzb2N1cGFkb3MsDQogICAgICAgICAgICBPY3VwYWRvc19kZW1hbmQgICA9IHN1bShQT05ERVJBW0VTVEFETyA9PSAxICYgUFAwM0ogPT0xXSksDQogICAgICAgICAgICBTdWJvY19kZW1hbmRhbnRlICA9IHN1bShQT05ERVJBW0VTVEFETyA9PSAxICYgSU5URU5TSSA9PTEgJiBQUDAzSj09MV0pLA0KICAgICAgICAgICAgU3Vib2Nfbm9fZGVtYW5kICAgPSBzdW0oUE9OREVSQVtFU1RBRE8gPT0gMSAmIElOVEVOU0kgPT0xICYgUFAwM0ogJWluJSBjKDIsOSldKSwNCiAgICAgICAgICAgIFN1Ym9jdXBhZG9zICAgICAgID0gU3Vib2NfZGVtYW5kYW50ZSArIFN1Ym9jX25vX2RlbWFuZCwNCiAgICAgICAgICAgICdUYXNhIEFjdGl2aWRhZCcgICAgICAgICAgICAgICAgICA9IHBlcmNlbnQoUEVBL1BvYmxhY2lvbiwgMSksDQogICAgICAgICAgICAnVGFzYSBFbXBsZW8nICAgICAgICAgICAgICAgICAgICAgPSBwZXJjZW50KE9jdXBhZG9zL1BvYmxhY2lvbiwgMSksDQogICAgICAgICAgICAnVGFzYSBEZXNvY3VwYWNpw7NuJyAgICAgICAgICAgICAgID0gcGVyY2VudChEZXNvY3VwYWRvcy9QRUEsIDEpLA0KICAgICAgICAgICAgJ1Rhc2EgU3Vib2N1cGFjacOzbicgICAgICAgICAgICAgICA9IHBlcmNlbnQoU3Vib2N1cGFkb3MvUEVBLCAxKSkgJT4lIA0KICBzZWxlY3QoLWMoMzoxMCkpICU+JSANCiAgZmlsdGVyKCFpcy5uYShHUlVQT19FREFEKSkgJT4lIA0KICBnYXRoZXIoSW5kaWNhZG9yZXMsIFZhbG9yLCAzOjYpICU+JSANCiAgc3ByZWFkKC4sIFNleG8sIFZhbG9yKSAlPiUgDQogIG11dGF0ZShJbmRpY2Fkb3JlcyA9IGZhY3RvcihJbmRpY2Fkb3JlcywgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCJUYXNhIEFjdGl2aWRhZCIsICJUYXNhIEVtcGxlbyIsICJUYXNhIERlc29jdXBhY2nDs24iLCAiVGFzYSBTdWJvY3VwYWNpw7NuIikpKSAlPiUgDQogIGFycmFuZ2UoSW5kaWNhZG9yZXMpDQoNCnRhYmxhMm0gPC0gdGFibGEyICU+JSANCiAgc2VsZWN0KC1WYXJvbmVzKSAlPiUgDQogIHNwcmVhZCguLCBHUlVQT19FREFELCBNdWplcmVzKQ0KDQp0YWJsYTJ2IDwtIHRhYmxhMiAlPiUgDQogIHNlbGVjdCgtTXVqZXJlcykgJT4lIA0KICBzcHJlYWQoLiwgR1JVUE9fRURBRCwgVmFyb25lcykNCg0KdGFibGEzIDwtIGxlZnRfam9pbih0YWJsYTJtLCB0YWJsYTJ2LCBieSA9ICJJbmRpY2Fkb3JlcyIpICU+JSANCiAgc2VsZWN0KEluZGljYWRvcmVzLCBgMS4gTXVqZXJlc2AgPSBgZGUgMTQgYSAyOSBhw7Fvcy54YCwgYDEuIFZhcm9uZXNgID0gYGRlIDE0IGEgMjkgYcOxb3MueWAsDQogICAgICAgICBgMi4gTXVqZXJlc2AgPSBgZGUgMzAgYSA2NCBhw7Fvcy54YCwgYDIuIFZhcm9uZXNgID0gYGRlIDMwIGEgNjQgYcOxb3MueWApDQoNCmlubGluZV8zIDwtIHRhYmxhMm0gJT4lIA0KICBmaWx0ZXIoSW5kaWNhZG9yZXMgPT0gIlRhc2EgRGVzb2N1cGFjacOzbiIpICU+JSANCiAgcHVsbChgZGUgMTQgYSAyOSBhw7Fvc2ApDQoNCmlubGluZV80IDwtIHRhYmxhMnYgJT4lIA0KICBmaWx0ZXIoSW5kaWNhZG9yZXMgPT0gIlRhc2EgRGVzb2N1cGFjacOzbiIpICU+JSANCiAgcHVsbChgZGUgMTQgYSAyOSBhw7Fvc2ApICU+JSANCiAgcGVyY2VudCguLCAwKQ0KYGBgDQoNCkEgY29udGludWFjacOzbiBzZSBleHBvbmVuIGxvcyBtaXNtb3MgaW5kaWNhZG9yZXMsIHBlcm8gZGVzYWdyZWdhZG9zIHBvciBncnVwb3MgZGUgZWRhZCBhZGVtw6FzIGRlIHBvciBzZXhvLg0KPGJyPjxicj4NCkVuIGVzdGUgY2FzbywgbGxhbWEgbGEgYXRlbmNpw7NuIHF1ZSBzb24gbGFzIG11amVyZXMgbcOhcyBqw7N2ZW5lcyBsYXMgcXVlIHByZXNlbnRhbiBsYXMgbWF5b3JlcyB0YXNhcyBkZSBkZXNvY3VwYWNpw7NuIHkgc3Vib2N1cGFjacOzbi4gUGFyYSBkYXIgdW4gZWplbXBsbywgX191biBgciBpbmxpbmVfM2AgZGUgbGFzIG11amVyZXMgZGUgMTQgYSAyOSBhw7FvcyBlc3TDoSBkZXNvY3VwYWRhX18sIGVzIGRlY2lyIHF1ZSwgbm8gdGVuaWVuZG8gb2N1cGFjacOzbiwgZXN0w6FuIGJ1c2NhbmRvIGFjdGl2YW1lbnRlIHVuIHRyYWJham8geSBubyBsbyBjb25zaWd1ZW4uIEVuIGNhbWJpbywgZW4gZWwgY2FzbyBkZSBsb3MgdmFyb25lcyBqw7N2ZW5lcywgZWwgcG9yY2VudGFqZSBkZSBkZXNvY3VwYWRvcyBlcyBkZSBtw6FzIGRlbCBfX2ByIGlubGluZV80YC5fXw0KPGJyPjxicj4NCkFzaW1pc21vLCBzZSBvYnNlcnZhIHVuYSBzdXN0YW5jaWFsIGRpZmVyZW5jaWEgZW4gbGEgdGFzYSBkZSBhY3RpdmlkYWQgeSBlbXBsZW8gZW50cmUgbGFzIG11amVyZXMgeSBob21icmVzIGRlIGVudHJlIDMwIHkgNjQgYcOxb3MuDQo8YnI+PGJyPg0KDQpfX0ZpZ3VyYSAzLl9fDQo8YnI+DQo8cCBzdHlsZT0iY29sb3I6I0U1NjE2RSI+X19QcmluY2lwYWxlcyBUYXNhcyBkZWwgTWVyY2FkbyBkZSBUcmFiYWpvLCBwb3IgZ3J1cG9zIGRlIGVkYWQgeSBzZXhvX188L3A+DQpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KdGFibGEzICU+JSANCiAga2FibGUoYWxpZ24gPSAibGNjY2MiLA0KICAgICAgICBjYXB0aW9uID0gcGFzdGUwKCJQb2JsYWNpw7NuIGRlIDE0IGEgNjQgYcOxb3MuICIsIGFnbG9fZGF0ZSkpICU+JQ0KICBrYWJsZV9zdHlsaW5nKGMoInN0cmlwZWQiLCAiaG92ZXIiLCAiY29uZGVuc2VkIiwgInJlc3BvbnNpdmUiKSwgDQogICAgICAgICAgICAgICAgI2Z1bGxfd2lkdGggPSBGLCBwb3NpdGlvbiA9ICJsZWZ0IiwNCiAgICAgICAgICAgICAgICBmaXhlZF90aGVhZCA9IFQsIGZvbnRfc2l6ZSA9IDIwKSAlPiUNCiAgYWRkX2hlYWRlcl9hYm92ZShjKCJcbiIgPSAxLCAiZGUgMTQgYSAyOSBhw7FvcyIgPSAyLCAiZGUgMzAgYSA2NCBhw7FvcyIgPSAyKSwNCiAgICAgICAgICAgICAgICAgICBjb2xvciA9ICJ3aGl0ZSIsIGJhY2tncm91bmQgPSBjb2xvcmVzWzFdKSAlPiUgDQogIGZvb3Rub3RlKGdlbmVyYWwgPSBmdWVudGUsDQogICAgICAgICAgIGdlbmVyYWxfdGl0bGUgPSAiXG4iKSAlPiUNCiAgY29sdW1uX3NwZWMoMSwgd2lkdGggPSAiNGNtIikgJT4lIA0KICBjb2x1bW5fc3BlYygyLCBib2xkID0gVFJVRSwgd2lkdGggPSAiM2NtIikgJT4lIA0KICBjb2x1bW5fc3BlYygzLCB3aWR0aCA9ICIzY20iKSAlPiUgDQogIGNvbHVtbl9zcGVjKDQsIHdpZHRoID0gIjNjbSIpICU+JQ0KICBjb2x1bW5fc3BlYyg1LCB3aWR0aCA9ICIzY20iKSAlPiUgDQogIHJvd19zcGVjKDAsIGJvbGQgPSBULCBjb2xvciA9ICJ3aGl0ZSIsIGJhY2tncm91bmQgPSBjb2xvcmVzWzFdKQ0KYGBgDQoNCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGluY2x1ZGU9RkFMU0V9DQpybSh0YWJsYTIsIHRhYmxhMm0sIHRhYmxhMnYsIHRhYmxhMykNCmBgYA0KDQojIyMjIEVtcGxlbyBubyByZWdpc3RyYWRvDQo8YnI+DQoNCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGluY2x1ZGU9RkFMU0V9DQp0YWJsYTQgPC0gYmFzZV9pbmRpdmlkdWFsICU+JSANCiAgZmlsdGVyKEVTVEFETz09MSwNCiAgICAgICAgIENBVF9PQ1VQPT0zKSAlPiUgDQogIGdyb3VwX2J5KFNleG8pICU+JSANCiAgc3VtbWFyaXNlKCJTaW4gZGVzY3VlbnRvIGp1YmlsYXRvcmlvIiA9IHBlcmNlbnQoc3VtKFBPTkRFUkFbUFAwN0g9PTJdKS9zdW0oUE9OREVSQSksIDEpKQ0KDQppbmxpbmVfNSA8LSB0YWJsYTQgJT4lIA0KICBmaWx0ZXIoU2V4byA9PSAiTXVqZXJlcyIpICU+JSANCiAgcHVsbChgU2luIGRlc2N1ZW50byBqdWJpbGF0b3Jpb2ApDQoNCmlubGluZV82IDwtIHRhYmxhNCAlPiUgDQogIGZpbHRlcihTZXhvID09ICJWYXJvbmVzIikgJT4lIA0KICBwdWxsKGBTaW4gZGVzY3VlbnRvIGp1YmlsYXRvcmlvYCkNCmBgYA0KDQpMYSBmYWx0YSBkZSBkZXNjdWVudG8ganViaWxhdG9yaW8gc3VlbGUgc2VyIHVuIGluZGljYWRvciBxdWUgYXByb3hpbWEgbGEgZmFsdGEgZGUgcmVnaXN0cm8gZGUgbGEgcmVsYWNpw7NuIGxhYm9yYWwgYXNhbGFyaWFkYS4gQ29tbyBwdWVkZSB2ZXJzZSBlbiBlbCBzaWd1aWVudGUgY3VhZHJvLCBsYSBpbmNpZGVuY2lhIGRlIGVzdGEgcHJvYmxlbcOhdGljYSBlcyBtYXlvciBlbnRyZSBsYXMgYXNhbGFyaWFkYXMgbXVqZXJlcy4gRW4gY29uY3JldG8sIGhheSB1biBfX2ByIGlubGluZV81YF9fIGRlIGxhcyBhc2FsYXJpYWRhcyBxdWUgcG9yIHN1IHRyYWJham8gcmVhbGl6YWRvIG5vIHBvc2VlIGRlc2N1ZW50b3MganViaWxhdG9yaW9zLCBtaWVudHJhcyBxdWUgcGFyYSBsb3MgYXNhbGFyaWFkb3MgdmFyb25lcyBkaWNoYSB0YXNhIGVzIGRlbCBfX2ByIGlubGluZV82YC5fXw0KPGJyPjxicj4NCg0KX19GaWd1cmEgNC5fXw0KPGJyPg0KPHAgc3R5bGU9ImNvbG9yOiNFNTYxNkUiPl9fRW1wbGVvIHNpbiBkZXNjdWVudG8ganViaWxhdG9yaW8gcG9yIHNleG9fXzwvcD4NCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQp0YWJsYTQgJT4lIA0KICBrYWJsZShjYXB0aW9uID0gcGFzdGUoIk9jdXBhZGFzL29zIGFzYWxhcmlhZGFzL29zLiAiLCBhZ2xvX2RhdGUpLA0KICAgICAgICBhbGlnbiA9ICJjIikgJT4lIA0KICBrYWJsZV9zdHlsaW5nKGMoInN0cmlwZWQiLCAiaG92ZXIiLCAiY29uZGVuc2VkIiwgInJlc3BvbnNpdmUiKSwgDQogICAgICAgICAgICAgICAgI2Z1bGxfd2lkdGggPSBGLCBwb3NpdGlvbiA9ICJsZWZ0IiwNCiAgICAgICAgICAgICAgICBmaXhlZF90aGVhZCA9IFQsIGZvbnRfc2l6ZSA9IDIwKSAlPiUNCiAgZm9vdG5vdGUoZ2VuZXJhbCA9IGZ1ZW50ZSwNCiAgICAgICAgICAgZ2VuZXJhbF90aXRsZSA9ICJcbiIpICU+JQ0KICBjb2x1bW5fc3BlYygxLCB3aWR0aCA9ICI1Y20iKSAlPiUgDQogIGNvbHVtbl9zcGVjKDIsIHdpZHRoID0gIjdjbSIpICU+JSANCiAgcm93X3NwZWMoMCwgYm9sZCA9IFQsIGNvbG9yID0gIndoaXRlIiwgYmFja2dyb3VuZCA9IGNvbG9yZXNbMV0pDQpgYGANCg0KYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgaW5jbHVkZT1GQUxTRX0NCnJtKHRhYmxhNCkNCmBgYA0KDQojIyMjIENhcmdvcyBqZXLDoXJxdWljb3MNCjxicj4NCg0KYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgaW5jbHVkZT1GQUxTRX0NCnRhYmxhNSA8LSBiYXNlX2luZGl2aWR1YWwgJT4lIA0KICBmaWx0ZXIoSkVSQVJRVUlBICE9ICIwIiwNCiAgICAgICAgIEVTVEFETyA9PSAxKSAlPiUNCiAgZ3JvdXBfYnkoU2V4bykgJT4lIA0KICBtdXRhdGUoRnJlY3VlbmNpYSA9IHN1bShQT05ERVJBKSkgJT4lIA0KICBncm91cF9ieShTZXhvLCBKRVJBUlFVSUEpICU+JSANCiAgc3VtbWFyaXNlKHByb3BvcmNpb24gPSByb3VuZChzdW0oUE9OREVSQSkvdW5pcXVlKEZyZWN1ZW5jaWEpLCAzKSwNCiAgICAgICAgICAgIGNhbnRpZGFkID0gc3VtKFBPTkRFUkEpKQ0KDQppbmxpbmVfNyA8LSB0YWJsYTUgJT4lIA0KICBmaWx0ZXIoSkVSQVJRVUlBICVpbiUgYygiRGlyZWNjacOzbiBvIEplZmVzIikgJg0KICAgICAgICAgICBTZXhvID09ICJWYXJvbmVzIikgJT4lIA0KICBwdWxsKHByb3BvcmNpb24pICU+JSANCiAgcGVyY2VudCguLCAxKQ0KDQppbmxpbmVfOCA8LSB0YWJsYTUgJT4lIA0KICBmaWx0ZXIoSkVSQVJRVUlBICVpbiUgYygiRGlyZWNjacOzbiBvIEplZmVzIikgJiANCiAgICAgICAgICAgU2V4byA9PSAiTXVqZXJlcyIpICU+JSANCiAgcHVsbChwcm9wb3JjaW9uKSAlPiUgDQogIHBlcmNlbnQoLiwgMSkNCmBgYA0KDQpBZGVtw6FzIGRlIHRlbmVyIHVuYSBwYXJ0aWNpcGFjacOzbiBtw6FzIHJlc3RyaW5naWRhIGVuIGVsIG1lcmNhZG8gZGUgdHJhYmFqbywgbGFzIG9jdXBhZGFzIGVuY3VlbnRyYW4gbcOhcyBvYnN0w6FjdWxvcyBwYXJhIGFjY2VkZXIgYSBjYXJnb3MgamVyw6FycXVpY29zOiAgbWllbnRyYXMgcXVlIHVuIF9fYHIgaW5saW5lXzdgX18gZGUgbG9zIG9jdXBhZG9zIHZhcm9uZXMgdGllbmVuIGNhcmdvcyBkZSBkaXJlY2Npw7NuIG8gc29uIGplZmVzLCBzb2xvIHVuIF9fYHIgaW5saW5lXzhgX18gZGUgbGFzIG9jdXBhZGFzIGVqZXJjZW4gcHVlc3RvcyBkZSBlc2FzIGNhcmFjdGVyw61zdGljYXMuDQo8YnI+PGJyPg0KRXN0YSBwcm9ibGVtw6F0aWNhIGVzIGNvbm9jaWRhIGNvbW8gX190ZWNobyBkZSBDcmlzdGFsX18gbyBfX3NlZ3JlZ2FjacOzbiB2ZXJ0aWNhbF9fIGRlbCBtZXJjYWRvIGRlIHRyYWJham8sIHkgaGFjZSByZWZlcmVuY2lhIGEgbGEgZGlmaWN1bHRhZCBxdWUgcG9zZWVuIGxhcyBtdWplcmVzIHBhcmEgYXNjZW5kZXIgcHJvZmVzaW9uYWxtZW50ZSBlbiBlbCBtZXJjYWRvIGxhYm9yYWwuIFNpIHNlIHRpZW5lIGVuIGN1ZW50YSBxdWUgZWwgbWVyY2FkbyBkZSB0cmFiYWpvIGVuIGdlbmVyYWwgc2UgZW5jdWVudHJhIG1hc2N1bGluaXphZG8sIGVzdG9zIHBvcmNlbnRhamVzIGluZGljYW4gcXVlIGhheSBtdWNoYXMgbcOhcyBwcm9iYWJpbGlkYWRlcyBkZSB0ZW5lciB1biBqZWZlIG8gZGlyZWN0b3IgdmFyw7NuIGVuIGxvcyBlc3BhY2lvcyBkZSB0cmFiYWpvLg0KPGJyPjxicj4NCg0KX19GaWd1cmEgNS5fXyAgICAgICANCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQpnZ3Bsb3QodGFibGE1ICU+JSBmaWx0ZXIoSkVSQVJRVUlBID09ICJEaXJlY2Npw7NuIG8gSmVmZXMiKSwgDQogICAgICAgYWVzKHggPSAnJywgcHJvcG9yY2lvbiwgZmlsbCA9IFNleG8sIGdyb3VwID0gU2V4bywgDQogICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsID0gcGVyY2VudChwcm9wb3JjaW9uLCBkaWdpdHMgPSAxKSkpICsNCiAgZ2VvbV9jb2wocG9zaXRpb24gPSAiZG9kZ2UiKSArDQogIGdlb21fdGV4dChwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKHdpZHRoID0gLjkpLCB2anVzdCA9Miwgc2l6ZSA9IDYpICsNCiAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzID0gY29sb3JlcykgKw0KICBsYWJzKHRpdGxlID0gIk11amVyZXMgeSBWYXJvbmVzIGVuIGNhcmdvcyBkZSBkaXJlY2Npw7NuIHkgamVmYXR1cmEuIiwNCiAgICAgICBzdWJ0aXRsZSA9IHBhc3RlMCgiUG9yY2VudGFqZSBkZSBjYXJnb3MgamVyw6FycXVpY29zIGVudHJlIG9jdXBhZGFzL29zLiAiLCBhZ2xvX2RhdGUpLA0KICAgICAgIGNhcHRpb24gPSBmdWVudGUpICsNCiAgdGhlbWVfbWluaW1hbCgpICsNCiAgdGhlbWUoYXhpcy50aXRsZS55ID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICBheGlzLnRpdGxlLnggPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgIGF4aXMudGV4dC55ID0gZWxlbWVudF9ibGFuaygpKQ0KYGBgDQogICAgICAgDQpgYGB7ciwgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCiMgQXF1w60gaGF5IHF1ZSBjYW1iaWFyIGVsIGRpcmVjdG9yaW8gZW4gcXVlIHNlIHZhIGEgZ3VhcmRhciBlbCBncsOhZmljby4NCiNnZ3NhdmUoIkZpZ3VyYTUucG5nIiwgc2NhbGUgPSAwLjcsIGRwaSA9IDMwMCwgd2lkdGggPSAxMCwgaGVpZ2h0ID0gNywgYmcgPSAiI2ZmZmZmZiIpDQpgYGANCg0KYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgaW5jbHVkZT1GQUxTRX0NCnJtKHRhYmxhNSkNCmBgYA0KDQojIyMjIFJhbWFzIGRlIGxhIG9jdXBhY2nDs24NCjxicj4NCg0KYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCnRhYmxhNiA8LSBvcmdhbml6ZV9jYWVzKGJhc2VfaW5kaXZpZHVhbCkgJT4lIA0KICBtdXRhdGUoUmFtYSA9IGNhZXNfZXBoX2xhYmVsKSAlPiUgDQogIGZpbHRlcihFU1RBRE8gPT0gMSwNCiAgICAgICAgIFBQM0VfVE9UID4gMCwgIyBIb3JhcyB0cmFiYWphZGFzIHBvc2l0aXZhcw0KICAgICAgICAgUFAzRV9UT1QgIT0gOTk5LA0KICAgICAgICAgUDIxID4gMCwNCiAgICAgICAgIFBPTkRJSU8gPiAwKSAlPiUgICMgSW5ncmVzb3MgcG9zaXRpdm9zDQogIGdyb3VwX2J5KFJhbWEpICU+JSANCiAgbXV0YXRlKFBQM0VfVE9UID0gYXMubnVtZXJpYyhnc3ViKCIsIiwgI2NhbWJpbyAiLiIgcG9yICJjb21hcyIsIiBlbiBsb3MgZGVjaW1hbGVzIHBhcmEgcG9kZXIgb3BlcmFyDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLiIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUDNFX1RPVCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpeGVkID0gVFJVRSkpKSAlPiUgDQogIHN1bW1hcmlzZSh0YXNhX2ZlbWluaXphY2lvbiA9IHBlcmNlbnQoc3VtKFBPTkRFUkFbU2V4byA9PSAiTXVqZXJlcyJdKS9zdW0oUE9OREVSQSksIDEpLA0KICAgICAgICAgICAgaW5ncmVzb19wcm9tZWRpbyA9IHdlaWdodGVkLm1lYW4oUDIxLCBQT05ESUlPL3N1bShQT05ESUlPKSksDQogICAgICAgICAgICBpbmdyZXNvX2hvciA9IHJvdW5kKHdlaWdodGVkLm1lYW4oUDIxLyhQUDNFX1RPVCAqIDMwIC8gNyksIFBPTkRJSU8pLCAyKSkgJT4lIA0KICBhcnJhbmdlKC10YXNhX2ZlbWluaXphY2lvbikgJT4lIA0KICBmaWx0ZXIoUmFtYSAlaW4lIGMoIlNlcnZpY2lvIGRvbWVzdGljbyIsICJFbnNlbmFuemEiLCAiU2VydmljaW9zIHNvY2lhbGVzIHkgZGUgc2FsdWQiLCANCiAgIkluZHVzdHJpYSBtYW51ZmFjdHVyZXJhIiwgIkFjdGl2aWRhZGVzIHByaW1hcmlhcyIsICJUcmFuc3BvcnRlLCBhbG1hY2VuYW1pZW50byB5IGNvbXVuaWNhY2lvbmVzIiwNCiAgIkNvbnN0cnVjY2lvbiIpKSAlPiUgDQogIHRyYW5zbXV0ZSgiUmFtYSBkZSBsYSBvY3VwYWNpw7NuIiA9IFJhbWEsDQogICAgICAgICAgICAiVGFzYSBkZSBmZW1pbml6YWNpw7NuIiA9IHRhc2FfZmVtaW5pemFjaW9uLA0KICAgICAgICAgICAgIkluZ3Jlc28gbWVuc3VhbCBwcm9tZWRpbyIgPSBmb3JtYXRvX3Blc29zKHJvdW5kKGluZ3Jlc29fcHJvbWVkaW8sIC0yKSwgMCksDQogICAgICAgICAgICAiSW5ncmVzbyBob3JhcmlvIiA9IGZvcm1hdG9fcGVzb3Mocm91bmQoaW5ncmVzb19ob3IpLCAwKSkNCmBgYA0KDQpMYSBzaWd1aWVudGUgdGFibGEgcmVwcmVzZW50YSBhIG9jdXBhZGFzIHkgb2N1cGFkb3MsIHNlZ8O6biBsYSByYW1hIGRlIG9jdXBhY2nDs24gZW4gbGEgcXVlIHNlIGRlc2VtcGXDsWFuLiBMYSB0YXNhIGRlIGZlbWluaXphY2nDs24gaW5kaWNhIGVsIHBvcmNlbnRhamUgZGUgbXVqZXJlcyBxdWUgaGF5IGVuIGNhZGEgdW5hIGRlIGVsbGFzIHksIGNvbW8gcHVlZGUgb2JzZXJ2YXJzZSwgbGFzIG11amVyZXMgc2UgZW5jdWVudHJhbiBzb2JyZXJyZXByZXNlbnRhZGFzIGVuIGFxdWVsbG9zIHNlY3RvcmVzIHZpbmN1bGFkb3MgYWwgY3VpZGFkbyB5IGxhcyB0YXJlYXMgZGUgcmVwcm9kdWNjacOzbiwgY29tbyBzb24gZWwgc2VydmljaW8gZG9tw6lzdGljbywgbGEgZW5zZcOxYW56YSB5IGxvcyBzZXJ2aWNpb3Mgc29jaWFsZXMgeSBkZSBzYWx1ZC4gUG9yIHN1IHBhcnRlLCBzZWN0b3JlcyBjb21vIGxhIGNvbnN0cnVjY2nDs24sIHRyYW5zcG9ydGUgeSBjb211bmljYWNpb25lcywgbGFzIGFjdGl2aWRhZGVzIHByaW1hcmlhcyBlIGluY2x1c28gbGEgaW5kdXN0cmlhIG1hbnVmYWN0dXJlcmEgc2UgZW5jdWVudHJhbiBtYXNjdWxpbml6YWRhcy4NCjxicj48YnI+DQpFc3RlIGZlbsOzbWVubyBzZSBjb25vY2UgY29tbyBfX1BhcmVkZXMgZGUgQ3Jpc3RhbF9fIG8gX19zZWdyZWdhY2nDs24gaG9yaXpvbnRhbF9fLCB5IGhhY2UgcmVmZXJlbmNpYSBhIGxvcyBtdXJvcyBpbnZpc2libGVzIHF1ZSBzZWdtZW50YW4gZWwgbWVyY2FkbyBkZSB0cmFiYWpvIGRlIGFjdWVyZG8gYSBsb3MgZXN0ZXJlb3RpcG9zIGRlIGfDqW5lcm8gYcO6biB2aWdlbnRlcy4gDQo8YnI+PGJyPg0KDQpfX0ZpZ3VyYSA2Ll9fDQo8YnI+DQo8cCBzdHlsZT0iY29sb3I6I0U1NjE2RSI+X19JbmRpY2Fkb3JlcyBwb3IgcmFtYXMgZGUgbGEgb2N1cGFjacOzbiAoc2VsZWNjaW9uYWRhcylfXzwvcD4NCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQp0YWJsYTYgJT4lIA0KICBrYWJsZShhbGlnbiA9ICdscnJyJywgDQogICAgICAgIGNhcHRpb24gPSBwYXN0ZSgiT2N1cGFkYXMvb3MuIFRhc2EgZGUgZmVtaW5pemFjacOzbiwgaW5ncmVzbyBtZW5zdWFsIHByb21lZGlvLCBpbmdyZXNvIGhvcmFyaW8uICIsIGFnbG9fZGF0ZSkpICU+JQ0KICBrYWJsZV9zdHlsaW5nKGMoInN0cmlwZWQiLCAiaG92ZXIiLCAiY29uZGVuc2VkIiwgInJlc3BvbnNpdmUiKSwgDQogICAgICAgICAgICAgICAgI2Z1bGxfd2lkdGggPSBGLCBwb3NpdGlvbiA9ICJsZWZ0IiwNCiAgICAgICAgICAgICAgICBmaXhlZF90aGVhZCA9IFQsIGZvbnRfc2l6ZSA9IDIwKSAlPiUNCiAgZm9vdG5vdGUoZ2VuZXJhbCA9IGZ1ZW50ZSwNCiAgICAgICAgICAgZ2VuZXJhbF90aXRsZSA9ICJcbiIpICU+JSANCiAgY29sdW1uX3NwZWMoMiwgd2lkdGggPSAiNmNtIikgJT4lIA0KICByb3dfc3BlYygwLCBib2xkID0gVCwgY29sb3IgPSAid2hpdGUiLCBiYWNrZ3JvdW5kID0gY29sb3Jlc1sxXSkNCmBgYA0KDQpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBpbmNsdWRlPUZBTFNFfQ0Kcm0odGFibGE2KQ0KYGBgDQoNCiMjIEluZ3Jlc29zDQoNCi0tLQ0KDQojIyMgSW5ncmVzb3Mgey50YWJzZXQgLnRhYnNldC1mYWRlIC50YWJzZXQtcGlsbHN9DQo8YnI+PGJyPg0KRW4gZXN0YSBzZWNjacOzbiBzZSBjb2xvY2EgZWwgZm9jbyBlbiBsYXMgZGlmZXJlbmNpYXMgZGUgbW9udG9zIGRlIGluZ3Jlc29zIHF1ZSBwZXJjaWJlbiBsb3MgdmFyb25lcyB5IGxhcyBtdWplcmVzLiBFc3RvcyBpbmdyZXNvcyBwdWVkZW4gcHJvdmVuaXIgZGUgZGl2ZXJzYXMgZnVlbnRlcyB5IGFsIG1pc21vIHRpZW1wbyBwdWVkZW4gZGVzYWdyZWdhcnNlIHNlZ8O6biBjYXJhY3RlcsOtc3RpY2FzIGFkaWNpb25hbGVzIGRlIGxhcyBwZXJzb25hcyBvIGxvcyBwdWVzdG9zIHF1ZSBkZXNlbXBlw7Fhbi4gQSBzdSB2ZXosIHB1ZWRlbiBkaXN0aW5ndWlyc2UgbG9zIGluZ3Jlc29zIG1lbnN1YWxlcyB5IGxvcyBpbmdyZXNvcyBwb3IgaG9yYSB0cmFiYWphZGEuDQo8YnI+PGJyPg0KUGFyYSBkaW1lbnNpb25hciBlc3RhcyBkaWZlcmVuY2lhcyBoYWNlbW9zIHVzbyBkZWwgY29uY2VwdG8gZGUgImJyZWNoYSIsIHF1ZSBlbiBlc3RlIGNhc28gc2UgY2FsY3VsYSBjb21vIGxhIGRpZmVyZW5jaWEgZW50cmUgbG9zIGluZ3Jlc29zIHByb21lZGlvcyBkZSBsb3MgdmFyb25lcyB5IGxhcyBtdWplcmVzLCBleHByZXNhZGEgZW4gdMOpcm1pbm9zIGRlbCBpbmdyZXNvIG3DoXMgYWx0by4gRXMgZGVjaXIsIHF1ZSBwdWVkZSBsZWVyc2UgY29tbyBfImxhcyBtdWplcmVzIHBlcmNpYmVuIGluZ3Jlc29zIHF1ZSwgZW4gcHJvbWVkaW8sIHNvbiB1biAuLi4lIG1lbm9yZXMgcXVlIGxvcyBkZSBsb3MgdmFyb25lcyIuXw0KDQotLS0NCg0KIyMjIyBJbmdyZXNvcyBtZW5zdWFsZXMNCg0KIyMjIyMgX19CcmVjaGFzIGRlIGluZ3Jlc29zIG1lbnN1YWxlc19fDQo8YnI+DQoNCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGluY2x1ZGU9RkFMU0V9DQojIEluZ3Jlc28gVG90YWwgSW5kaXZpZHVhbA0KIyBhcy5udW1lcmljIHBvcnF1ZSBzYWxpYSBjb21vIE5BIHBvciBzZXIgaW50ZWdlciBkZW1hc2lhZG8gZ3JhbmRlLCBtYXlvciBkZSBsbyBxdWUgc2UgcHVlZGUgcmVwcmVzZW50YXIgZW4gUg0KdGFibGE3LjEgPC0gYmFzZV9pbmRpdmlkdWFsICU+JSANCiAgZmlsdGVyKFA0N1QgPiAwKSAlPiUgDQogIGdyb3VwX2J5KFNleG8pICU+JSANCiAgc3VtbWFyaXNlKCBNZWRpYS5JVEkgPSByb3VuZCh3ZWlnaHRlZC5tZWFuKGFzLm51bWVyaWMoUDQ3VCkgLCBhcy5udW1lcmljKFBPTkRJSSkpKSkgJT4lIA0KICBzcHJlYWQoLiwgU2V4bywgTWVkaWEuSVRJKSAlPiUgDQogIG11dGF0ZShQb2JsYWNpw7NuID0gIlBlcmNlcHRvcmVzIGRlIGluZ3Jlc29zIiwNCiAgICAgICAgIEluZ3Jlc28gPSAiSW5ncmVzbyBUb3RhbCBJbmRpdmlkdWFsIikNCg0KIyBJbmdyZXNvIGRlIGxhIE9jdXBhY2nDs24gUHJpbmNpcGFsDQp0YWJsYTcuMiA8LSBiYXNlX2luZGl2aWR1YWwgJT4lIA0KICBmaWx0ZXIoRVNUQURPID09IDEpICU+JSANCiAgZ3JvdXBfYnkoU2V4bykgJT4lIA0KICBzdW1tYXJpc2UoTWVkaWEuSU9QID0gcm91bmQod2VpZ2h0ZWQubWVhbihQMjEsIFBPTkRJSU8vc3VtKFBPTkRJSU8pKSkpICU+JSANCiAgc3ByZWFkKC4sIFNleG8sIE1lZGlhLklPUCkgJT4lIA0KICBtdXRhdGUoUG9ibGFjacOzbiA9ICJPY3VwYWRhcy9vcyIsDQogICAgICAgICBJbmdyZXNvID0gIkluZ3Jlc28gZGUgbGEgT2N1cGFjacOzbiBQcmluY2lwYWwiKQ0KDQojIEFzYWwuIHNpbiBkZXNjdWVudG8ganViaWxhdG9yaW8uIEluZ3Jlc28gZGUgbGEgT2N1cGFjacOzbiBQcmluY2lwYWwNCnRhYmxhNy4zIDwtIGJhc2VfaW5kaXZpZHVhbCAlPiUgDQogIGZpbHRlcihFU1RBRE8gPT0gMSAmIENBVF9PQ1VQID09IDMgJiBQUDA3SCA9PSAyKSAlPiUgDQogIGdyb3VwX2J5KFNleG8pICU+JSANCiAgc3VtbWFyaXNlKE1lZGlhLklPUCA9IHJvdW5kKHdlaWdodGVkLm1lYW4oUDIxLCBQT05ESUlPKSkpICU+JSANCiAgc3ByZWFkKC4sIFNleG8sIE1lZGlhLklPUCkgJT4lIA0KICBtdXRhdGUoUG9ibGFjacOzbiA9ICJBc2FsYXJpYWRhcy9vcyBzaW4gZGVzYy4ganViaWwuIiwNCiAgICAgICAgIEluZ3Jlc28gPSAiSW5ncmVzbyBkZSBsYSBPY3VwYWNpw7NuIFByaW5jaXBhbCIpDQoNCiMgSnViaWxhY2lvbmVzDQp0YWJsYTcuNCA8LSBiYXNlX2luZGl2aWR1YWwgJT4lIA0KICBmaWx0ZXIoVjJfTSA+IDApICU+JSANCiAgZ3JvdXBfYnkoU2V4bykgJT4lIA0KICBzdW1tYXJpc2UoTWVkaWEuSlVCID0gcm91bmQod2VpZ2h0ZWQubWVhbihWMl9NLCBQT05ESUkpKSkgJT4lIA0KICBzcHJlYWQoLiwgU2V4bywgTWVkaWEuSlVCKSAlPiUgDQogIG11dGF0ZShQb2JsYWNpw7NuID0gIlBlcmNlcHRvcmVzIGRlIGp1YmlsYWNpw7NuIiwNCiAgICAgICAgIEluZ3Jlc28gPSAiSnViaWxhY2nDs24iKQ0KYGBgDQoNCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGluY2x1ZGU9RkFMU0V9DQp0YWJsYTcgPC0gYmluZF9yb3dzKHRhYmxhNy4xLCB0YWJsYTcuMiwgdGFibGE3LjMsIHRhYmxhNy40KSAlPiUgDQogIG11dGF0ZShCcmVjaGEgPSBwZXJjZW50KCgoVmFyb25lcy1NdWplcmVzKS9WYXJvbmVzKSwgMSksDQogICAgICAgICBNdWplcmVzID0gZm9ybWF0b19wZXNvcyhyb3VuZChNdWplcmVzLCAtMiksIDApLA0KICAgICAgICAgVmFyb25lcyA9IGZvcm1hdG9fcGVzb3Mocm91bmQoVmFyb25lcywgLTIpLCAwKSkgJT4lIA0KICBzZWxlY3QoUG9ibGFjacOzbiwgSW5ncmVzbywgTXVqZXJlcywgVmFyb25lcywgQnJlY2hhKQ0KDQppbmxpbmVfOSA8LSB0YWJsYTcgJT4lIA0KICBmaWx0ZXIoUG9ibGFjacOzbiA9PSAiUGVyY2VwdG9yZXMgZGUgaW5ncmVzb3MiKSAlPiUgDQogIHB1bGwoQnJlY2hhKQ0KDQppbmxpbmVfMTAgPC0gdGFibGE3ICU+JSANCiAgZmlsdGVyKFBvYmxhY2nDs24gPT0gIk9jdXBhZGFzL29zIikgJT4lIA0KICBwdWxsKEJyZWNoYSkNCg0KaW5saW5lXzExIDwtIHRhYmxhNyAlPiUgDQogIGZpbHRlcihQb2JsYWNpw7NuID09ICJPY3VwYWRhcy9vcyIpICU+JSANCiAgcHVsbChNdWplcmVzKQ0KDQppbmxpbmVfMTIgPC0gdGFibGE3ICU+JSANCiAgZmlsdGVyKFBvYmxhY2nDs24gPT0gIk9jdXBhZGFzL29zIikgJT4lIA0KICBwdWxsKFZhcm9uZXMpDQoNCmlubGluZV8xMyA8LSB0YWJsYTcgJT4lIA0KICBmaWx0ZXIoUG9ibGFjacOzbiA9PSAiQXNhbGFyaWFkYXMvb3Mgc2luIGRlc2MuIGp1YmlsLiIpICU+JSANCiAgcHVsbChCcmVjaGEpDQpgYGANCg0KQ29tbyBzZSB2ZSBlbiBlbCBzaWd1aWVudGUgY3VhZHJvLCBwYXJhIGVsIGNhc28gZGUgdG9kYXMgbGFzIHBlcnNvbmFzIHBlcmNlcHRvcmFzIGRlIGluZ3Jlc29zLCBsYSBicmVjaGEgZW50cmUgbXVqZXJlcyB5IHZhcm9uZXMgcmVzcGVjdG8gYWwgaW5ncmVzbyB0b3RhbCBpbmRpdmlkdWFsIGVzIGRlIF9fYHIgaW5saW5lXzlgX18uIEVzIGRlY2lyLCBjb250ZW1wbGFuZG8gdG9kb3MgbG9zIGluZ3Jlc29zIHF1ZSBzZSBwZXJjaWJlbiwgc2VhbiBkZSBvcmlnZW4gbGFib3JhbCBvIG5vIGxhYm9yYWwgKGNvbW8ganViaWxhY2lvbmVzIHkgcGVuc2lvbmVzLCBjdW90YXMgYWxpbWVudGFyaWFzLCBzdWJzaWRpb3MsIGV0Yy4pLCBsYXMgbXVqZXJlcyBwZXJjaWJlbiBpbmdyZXNvcyBxdWUsIGVuIHByb21lZGlvLCBzb24gdW4gYHIgaW5saW5lXzlgIG1lbm9yZXMgcXVlIGxvcyBkZSBsb3MgdmFyb25lcy4NCjxicj48YnI+DQpTaW11bHTDoW5lYW1lbnRlLCBlbiBlbCBtZXJjYWRvIGRlIHRyYWJham8sIGxhcyBtdWplcmVzIGdhbmFuIGVuIHByb21lZGlvIHVuIF9fYHIgaW5saW5lXzEwYF9fIG1lbm9zIHF1ZSBsb3MgdmFyb25lcyAoX2ByIGlubGluZV8xMWBfIHZzLiBfYHIgaW5saW5lXzEyYF8pLiBFc3RvcyBkYXRvcyBjb3JyZXNwb25kZW4gYSBsYSB0b3RhbGlkYWQgZGUgb2N1cGFkYXMvb3MsIGN1YWxxdWllcmEgc2VhIHN1IGNhdGVnb3LDrWEgb2N1cGFjaW9uYWwsIGNhbGlmaWNhY2nDs24gbyBqZXJhcnF1w61hLCB5IG9ic2VydmFuZG8gZW4gZXN0ZSBjYXNvIGxvcyBpbmdyZXNvcyBwcm92ZW5pZW50ZXMgZGUgc3Ugb2N1cGFjacOzbiBwcmluY2lwYWwuDQo8YnI+PGJyPg0KU2kgdG9tYW1vcyBlbiBjdWVudGEgw7puaWNhbWVudGUgYSBhcXVlbGxhcyBwZXJzb25hcyBxdWUgbm8gcG9zZWVuIGRlc2N1ZW50b3MganViaWxhdG9yaW9zLCBzZSBvYnNlcnZhIGPDs21vIGxhcyBtdWplcmVzIGdhbmFuIGVuIHByb21lZGlvIHVuIF9fYHIgaW5saW5lXzEzYF9fIG1lbm9zIHF1ZSBzdXMgcGFyZXMuIEVzIGRlY2lyIHF1ZSBsYSBicmVjaGEgZGUgaW5ncmVzb3MgZW50cmUgbGFzIHkgbG9zIHRyYWJhamFkb3JlcyBzZSBhbXBsw61hIGN1YW5kbyB2ZW1vcyBhIGFxdWVsbGFzL29zIGFzYWxhcmlhZGFzL29zIHF1ZSB0aWVuZW4gcGVvcmVzIGNvbmRpY2lvbmVzIGRlIHRyYWJham8uDQo8YnI+PGJyPg0KRmluYWxtZW50ZSwgcHVlZGUgb2JzZXJ2YXJzZSBxdWUgdGFtYmnDqW4gZXhpc3RlIHVuYSBicmVjaGEsIGF1bnF1ZSBtdWNobyBtZW5vciwgZW50cmUgbGFzIGp1YmlsYWNpb25lcyBxdWUgcGVyY2liZW4gbGFzIG11amVyZXMgeSBsb3MgdmFyb25lcy4NCjxicj48YnI+DQoNCl9fRmlndXJhIDcuX18NCjxicj4NCjxwIHN0eWxlPSJjb2xvcjojRTU2MTZFIj5fX0JyZWNoYXMgZGUgaW5ncmVzb3MgbWVuc3VhbGVzX188L3A+DQpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KdGFibGE3ICU+JSANCiAgc2VsZWN0KFBvYmxhY2nDs24sIEluZ3Jlc28sIEJyZWNoYSwgTXVqZXJlcywgVmFyb25lcykgJT4lIA0KICBrYWJsZShhbGlnbiA9ICdsbHJycicsIA0KICAgICAgICBjYXB0aW9uID0gcGFzdGUoIlBvciBwb2JsYWNpb25lcyB5IHRpcG9zIGRlIGluZ3Jlc29zLiAiLCBhZ2xvX2RhdGUpKSAlPiUNCiAga2FibGVfc3R5bGluZyhjKCJzdHJpcGVkIiwgImhvdmVyIiwgImNvbmRlbnNlZCIsICJyZXNwb25zaXZlIiksIA0KICAgICAgICAgICAgICAgICNmdWxsX3dpZHRoID0gRiwgcG9zaXRpb24gPSAibGVmdCIsDQogICAgICAgICAgICAgICAgZml4ZWRfdGhlYWQgPSBULCBmb250X3NpemUgPSAyMCkgJT4lDQogIGFkZF9oZWFkZXJfYWJvdmUoYygiXG4iID0gMywgIk1lZGlhIGRlbCBpbmdyZXNvIiA9IDIpLCANCiAgICAgICAgICAgICAgICAgICBjb2xvciA9ICJ3aGl0ZSIsIGJhY2tncm91bmQgPSBjb2xvcmVzWzFdKSAlPiUgDQogIGZvb3Rub3RlKGdlbmVyYWwgPSBmdWVudGUsDQogICAgICAgICAgIGdlbmVyYWxfdGl0bGUgPSAiXG4iKSAlPiUgDQogIGNvbHVtbl9zcGVjKDIsIHdpZHRoID0gIjZjbSIpICU+JSANCiAgY29sdW1uX3NwZWMoMywgYm9sZCA9IFRSVUUsIHdpZHRoID0gIjJjbSIpICU+JSANCiAgcm93X3NwZWMoMCwgYm9sZCA9IFQsIGNvbG9yID0gIndoaXRlIiwgYmFja2dyb3VuZCA9IGNvbG9yZXNbMV0pDQoNCiMgRW4gZXN0ZSBjdWFkcm8gbGEgYnJlY2hhIG1hbnRpZW5lIGNvbXBhcmFiaWxpZGFkIGNvbiB0cmltZXN0cmVzIGFudGVyaW9yZXMgcG9ycXVlIHNlIGNhbGN1bGEgc29icmUgbG9zIHZhbG9yZXMgc2luIHJlZG9uZGVhcg0KYGBgDQoNCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGluY2x1ZGU9RkFMU0V9DQpybSh0YWJsYTcsIHRhYmxhNy4xLCB0YWJsYTcuMiwgdGFibGE3LjMsIHRhYmxhNy40KQ0KYGBgDQoNCi0tLQ0KDQojIyMjIyBfX0JyZWNoYSBkZSBpbmdyZXNvcyBtZW5zdWFsZXMgcG9yIGNhbGlmaWNhY2nDs24gZGVsIHB1ZXN0byBkZSB0cmFiYWpvX18NCjxicj4NCg0KYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgaW5jbHVkZT1GQUxTRX0NCiMgT2N1cGFkZXMNCnRhYmxhOCA8LSBiYXNlX2luZGl2aWR1YWwgJT4lIA0KICBmaWx0ZXIoQ0FMSUZJQ0FDSU9OICE9ICIwIiwNCiAgICAgICAgIEVTVEFETyA9PSAxLA0KICAgICAgICAgUDIxID49IDAsDQogICAgICAgICBQT05ESUlPID49IDApICU+JSAgIyBJbmdyZXNvcyBwb3NpdGl2b3MpICU+JSANCiAgZ3JvdXBfYnkoU2V4bywgQ0FMSUZJQ0FDSU9OKSAlPiUgDQogIHN1bW1hcmlzZShJT1BfbWVuc3VhbCAgPSByb3VuZCh3ZWlnaHRlZC5tZWFuKFAyMSwgUE9ORElJTy9zdW0oUE9ORElJTykpLCAyKSkgDQpgYGANCg0KYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgaW5jbHVkZT1GQUxTRX0NCmlubGluZV8xNCA8LSB0YWJsYTggJT4lIA0KICBmaWx0ZXIoU2V4byA9PSAiVmFyb25lcyIsIA0KICAgICAgICAgQ0FMSUZJQ0FDSU9OID09ICJQcm9mZXNpb25hbGVzIikgJT4lIA0KICBwdWxsKElPUF9tZW5zdWFsKSAlPiUgDQogIHJvdW5kKC4sIC0yKSAlPiUgDQogIGZvcm1hdG9fcGVzb3MoLiwgMCkNCg0KaW5saW5lXzE1IDwtIHRhYmxhOCAlPiUgDQogIGZpbHRlcihTZXhvID09ICJNdWplcmVzIiwNCiAgICAgICAgIENBTElGSUNBQ0lPTiA9PSAiUHJvZmVzaW9uYWxlcyIpICU+JSANCiAgcHVsbChJT1BfbWVuc3VhbCkgJT4lIA0KICByb3VuZCguLCAtMikgJT4lIA0KICBmb3JtYXRvX3Blc29zKC4sIDApDQoNCmlubGluZV8xNiA8LSB0YWJsYTggJT4lIA0KICBmaWx0ZXIoQ0FMSUZJQ0FDSU9OID09ICJQcm9mZXNpb25hbGVzIikgJT4lIA0KICBwaXZvdF93aWRlcihuYW1lc19mcm9tID0gU2V4bywgdmFsdWVzX2Zyb20gPSBJT1BfbWVuc3VhbCkgJT4lIA0KICBtdXRhdGUoYnJlY2hhID0gKFZhcm9uZXMtTXVqZXJlcykvVmFyb25lcykgJT4lIA0KICBwdWxsKGJyZWNoYSkgJT4lIA0KICBwZXJjZW50KC4sIDEpDQogIA0KaW5saW5lXzE3IDwtIHRhYmxhOCAlPiUgDQogIGZpbHRlcihTZXhvID09ICJWYXJvbmVzIiwNCiAgICAgICAgIENBTElGSUNBQ0lPTiA9PSAiTm8gQ2FsaWZpY2Fkb3MiKSAlPiUgDQogIHB1bGwoSU9QX21lbnN1YWwpICU+JSANCiAgcm91bmQoLiwgLTIpICU+JSANCiAgZm9ybWF0b19wZXNvcyguLCAwKQ0KDQppbmxpbmVfMTggPC0gdGFibGE4ICU+JSANCiAgZmlsdGVyKFNleG8gPT0gIk11amVyZXMiLA0KICAgICAgICAgQ0FMSUZJQ0FDSU9OID09ICJObyBDYWxpZmljYWRvcyIpICU+JQ0KICBwdWxsKElPUF9tZW5zdWFsKSAlPiUgDQogIHJvdW5kKC4sIC0yKSAlPiUgDQogIGZvcm1hdG9fcGVzb3MoLiwgMCkNCg0KaW5saW5lXzE5IDwtIHRhYmxhOCAlPiUgDQogIGZpbHRlcihDQUxJRklDQUNJT04gPT0gIk5vIENhbGlmaWNhZG9zIikgJT4lIA0KICBwaXZvdF93aWRlcihuYW1lc19mcm9tID0gU2V4bywgdmFsdWVzX2Zyb20gPSBJT1BfbWVuc3VhbCkgJT4lIA0KICBtdXRhdGUoYnJlY2hhID0gKFZhcm9uZXMtTXVqZXJlcykvVmFyb25lcykgJT4lIA0KICBwdWxsKGJyZWNoYSkgJT4lIA0KICBwZXJjZW50KC4sIDEpDQpgYGANCg0KRWwgc2lndWllbnRlIGdyw6FmaWNvIHNlw7FhbGEgY8OzbW8gbGEgYnJlY2hhIGRlIGluZ3Jlc29zIG1lbnN1YWxlcyBkZSBsYXMvb3Mgb2N1cGFkYXMvb3Mgc2UgbWFudGllbmUgaW5jbHVzbyBhIGlndWFsZXMgbml2ZWxlcyBkZSBjYWxpZmljYWNpw7NuIGRlbCBwdWVzdG8gZGUgdHJhYmFqby4gUG9yIGVqZW1wbG8sIG1pZW50cmFzIHF1ZSBsb3MgdmFyb25lcyBxdWUgdHJhYmFqYW4gZW4gb2N1cGFjaW9uZXMgcHJvZmVzaW9uYWxlcyB0aWVuZW4gdW4gaW5ncmVzbyBtZWRpbyBkZSBfYHIgaW5saW5lXzE0YF8sIGxhcyBtdWplcmVzIG9jdXBhZGFzIGVuIGVzZSBtaXNtbyBzZWdtZW50byBwZXJjaWJlbiB1biBpbmdyZXNvIG1lZGlvIGRlIF9gciBpbmxpbmVfMTVgXywgZXMgZGVjaXIsIHVuIF9fYHIgaW5saW5lXzE2YF9fIG1lbm9zIHF1ZSBsb3MgdmFyb25lcy4gICAgDQpFbiBsb3MgcHVlc3RvcyBubyBjYWxpZmljYWRvcywgbG9zIHZhcm9uZXMgZ2FuYW4gX2ByIGlubGluZV8xN2BfIGVuIHByb21lZGlvLCBhbCB0aWVtcG8gcXVlIGxhcyBtdWplcmVzIGdhbmFuIGFscmVkZWRvciBkZSBfYHIgaW5saW5lXzE4YF8uIEVzdGEgYnJlY2hhIGVzIGRlbCBfX2ByIGlubGluZV8xOWBfXy4NCjxicj48YnI+DQoNCl9fRmlndXJhIDguX18NCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQp0YWJsYThfZ3JhZiA8LSB0YWJsYTggJT4lIA0KICBwaXZvdF93aWRlciguLCBuYW1lc19mcm9tID0gU2V4bywgdmFsdWVzX2Zyb20gPSBJT1BfbWVuc3VhbCkgJT4lIA0KICBtdXRhdGUoYnJlY2hhID0gcGVyY2VudCgoVmFyb25lcy1NdWplcmVzKS9WYXJvbmVzLCAxKSwNCiAgICAgICAgIHggPSAoVmFyb25lcytNdWplcmVzKS8yKQ0KDQpnZ3Bsb3QodGFibGE4X2dyYWYsIA0KICAgICAgIGFlcyh4ID0gTXVqZXJlcywgeGVuZCA9IFZhcm9uZXMsIHkgPSBDQUxJRklDQUNJT04sIA0KICAgICAgICAgICBncm91cCA9IENBTElGSUNBQ0lPTiwgbGFiZWwgPSBicmVjaGEpKSArDQogIGdlb21fZHVtYmJlbGwoY29sb3IgPSAiIzgwODA4MCIsDQogICAgICAgICAgICAgICAgc2l6ZV94ID0gMywgc2l6ZV94ZW5kID0gMywNCiAgICAgICAgICAgICAgICBjb2xvdXJfeCA9IGNvbG9yZXNbMV0sDQogICAgICAgICAgICAgICAgY29sb3VyX3hlbmQgPSBjb2xvcmVzWzJdKSArDQogIGdlb21fdGV4dChkYXRhID0gdGFibGE4X2dyYWYsIA0KICAgICAgICAgICAgYWVzKHgsIENBTElGSUNBQ0lPTiwgbGFiZWwgPSBicmVjaGEpLCBudWRnZV95ID0gLjIpICsNCiAgbGFicyh0aXRsZSA9ICJCcmVjaGEgZGUgaW5ncmVzb3MgZGUgbGEgb2N1cGFjacOzbiBwcmluY2lwYWwNCiAgICAgICBwb3Igc2V4byB5IGNhbGlmaWNhY2nDs24gb2N1cGFjaW9uYWwiLA0KICAgICAgIHN1YnRpdGxlID0gcGFzdGUwKCJPY3VwYWRhcy9vcy4gIiwgYWdsb19kYXRlKSwNCiAgICAgICB4ID0gIkluZ3Jlc28gTWVuc3VhbCIsDQogICAgICAgeSA9IE5VTEwsIA0KICAgICAgIGNhcHRpb24gPSBmdWVudGUpICsNCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGNvbG9yZXMpICsNCiAgdGhlbWVfbWluaW1hbCgpDQpgYGANCg0KYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCiMgQXF1w60gaGF5IHF1ZSBjYW1iaWFyIGVsIGRpcmVjdG9yaW8gZW4gcXVlIHNlIHZhIGEgZ3VhcmRhciBlbCBncsOhZmljby4NCiNnZ3NhdmUoIkZpZ3VyYTgucG5nIiwgc2NhbGUgPSAwLjcsIGRwaSA9IDMwMCwgd2lkdGggPSAxMCwgaGVpZ2h0ID0gNywgYmcgPSAiI2ZmZmZmZiIpDQpgYGANCg0KYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgaW5jbHVkZT1GQUxTRX0NCnJtKHRhYmxhOCwgdGFibGE4X2dyYWYpDQpgYGANCg0KLS0tDQoNCiMjIyMjIF9fQnJlY2hhIGRlIGluZ3Jlc29zIG1lbnN1YWxlcyBwb3Igbml2ZWwgZWR1Y2F0aXZvX18gDQo8YnI+DQoNCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGluY2x1ZGU9RkFMU0V9DQp0YWJsYTkuMSA8LSBiYXNlX2luZGl2aWR1YWwgJT4lIA0KICBmaWx0ZXIoRVNUQURPID09IDEsIA0KICAgICAgICAgIWlzLm5hKE5JVkVMX0VEVUNBVElWTykpICU+JSANCiAgZ3JvdXBfYnkoU2V4bykgJT4lDQogIG11dGF0ZShGcmVjdWVuY2lhID0gc3VtKFBPTkRFUkEpKSAlPiUgDQogIGdyb3VwX2J5KFNleG8sIE5JVkVMX0VEVUNBVElWTykgJT4lIA0KICBzdW1tYXJpc2UoVGFzYSA9IHBlcmNlbnQoc3VtKFBPTkRFUkEpL3VuaXF1ZShGcmVjdWVuY2lhKSwgMSkpICU+JSANCiAgcGl2b3Rfd2lkZXIoLiwgbmFtZXNfZnJvbSA9IFNleG8sIHZhbHVlc19mcm9tID0gVGFzYSkgJT4lIA0KICByZW5hbWUoIk5pdmVsIEVkdWNhdGl2byIgPSBOSVZFTF9FRFVDQVRJVk8pDQoNCnRhYmxhOS4yIDwtIGJhc2VfaW5kaXZpZHVhbCAlPiUgDQogIGZpbHRlcihFU1RBRE8gPT0gMSwgDQogICAgICAgICAhaXMubmEoTklWRUxfRURVQ0FUSVZPKSwNCiAgICAgICAgIFAyMT49MCwNCiAgICAgICAgIFBPTkRJSU8+PTApICU+JSANCiAgZ3JvdXBfYnkoU2V4bywgTklWRUxfRURVQ0FUSVZPKSAlPiUgDQogIHN1bW1hcmlzZShJT1BfbWVuc3VhbCAgPSByb3VuZCh3ZWlnaHRlZC5tZWFuKFAyMSwgUE9ORElJTy9zdW0oUE9ORElJTykpLCAyKSkgDQpgYGANCg0KYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgaW5jbHVkZT1GQUxTRX0NCmlubGluZV8yMCA8LSB0YWJsYTkuMiAlPiUgDQogIGZpbHRlcihOSVZFTF9FRFVDQVRJVk8gPT0gIlN1cGVyaW9yIikgJT4lIA0KICBwaXZvdF93aWRlciguLCBuYW1lc19mcm9tID0gU2V4bywgdmFsdWVzX2Zyb20gPSBJT1BfbWVuc3VhbCkgJT4lIA0KICBtdXRhdGUoYnJlY2hhID0gKFZhcm9uZXMtTXVqZXJlcykvVmFyb25lcykgJT4lIA0KICBwdWxsKGJyZWNoYSkgJT4lIA0KICBwZXJjZW50KC4sIDEpDQoNCmlubGluZV8yMSA8LSB0YWJsYTkuMiAlPiUgDQogIGZpbHRlcihOSVZFTF9FRFVDQVRJVk8gPT0gIlByaW1hcmlhIikgJT4lIA0KICBwaXZvdF93aWRlciguLCBuYW1lc19mcm9tID0gU2V4bywgdmFsdWVzX2Zyb20gPSBJT1BfbWVuc3VhbCkgJT4lIA0KICBtdXRhdGUoYnJlY2hhID0gKFZhcm9uZXMtTXVqZXJlcykvVmFyb25lcykgJT4lIA0KICBwdWxsKGJyZWNoYSkgJT4lIA0KICBwZXJjZW50KC4sIDEpDQpgYGANCg0KQ29tbyBwdWVkZSBvYnNlcnZhcnNlIGVuIGVsIGN1YWRybyBzaWd1aWVudGUsIGVsIHBvcmNlbnRhamUgZGUgcGVyc29uYXMgcXVlIGN1ZW50YW4gY29uIHVuIG5pdmVsIGVkdWNhdGl2byBzdXBlcmlvciBlcyBub3RhYmxlbWVudGUgbWF5b3IgZW50cmUgbGFzIG9jdXBhZGFzIG11amVyZXMsIGVuIGNvbXBhcmFjacOzbiBhIGxvcyBvY3VwYWRvcyB2YXJvbmVzLg0KPGJyPjxicj4NClNpbiBlbWJhcmdvLCBhIGlndWFsIG5pdmVsIGVkdWNhdGl2bywgbG9zIGluZ3Jlc29zIGxhYm9yYWxlcyBkZSBsYXMgbXVqZXJlcyB0cmFiYWphZG9yYXMgc29uIGluZmVyaW9yZXMgYSBsb3MgZGUgbG9zIHZhcm9uZXMuIEVzdGEgZGlmZXJlbmNpYSBkZSBpbmdyZXNvcyBlcyBkZWwgX19gciBpbmxpbmVfMjBgX18gcGFyYSBsYXMgZGUgbml2ZWwgdW5pdmVyc2l0YXJpby9zdXBlcmlvciwgeSBkZWwgX19gciBpbmxpbmVfMjFgX18gcGFyYSBsYXMgcXVlIGN1ZW50YW4gY29uIG5pdmVsIHByaW1hcmlvLg0KPGJyPjxicj4NCg0KX19GaWd1cmEgOS5fXw0KPGJyPg0KPHAgc3R5bGU9ImNvbG9yOiNFNTYxNkUiPl9fTml2ZWwgZWR1Y2F0aXZvIGRlIG11amVyZXMgeSB2YXJvbmVzX188L3A+DQpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KdGFibGE5LjEgJT4lIA0KICBtdXRhdGUoTXVqZXJlcyA9IGNvbG9yX3RpbGUoIiNmN2NmZDMiLCBjb2xvcmVzWzFdKSgoTXVqZXJlcykpLA0KICAgICAgICAgVmFyb25lcyA9IGNvbG9yX3RpbGUoIiNFREVERUQiLCBjb2xvcmVzWzJdKSgoVmFyb25lcykpKSAlPiUgDQogIHNlbGVjdCgnTml2ZWwgRWR1Y2F0aXZvJywgTXVqZXJlcywgVmFyb25lcykgJT4lIA0KICBrYWJsZShlc2NhcGUgPSBGQUxTRSwgZGlnaXRzID0gMSwgYWxpZ24gPSAnbHJyJywNCiAgICAgICAgY2FwdGlvbiA9IHBhc3RlKCJQb3JjZW50YWplIHBvciBjb2x1bW5hcy4gT2N1cGFkYXMvb3MuICIsIGFnbG9fZGF0ZSkpICU+JSANCiAga2FibGVfc3R5bGluZyhjKCJzdHJpcGVkIiwgImhvdmVyIiwgImNvbmRlbnNlZCIsICJyZXNwb25zaXZlIiksIA0KICAgICAgICAgICAgICAgICNmdWxsX3dpZHRoID0gRiwgcG9zaXRpb24gPSAibGVmdCIsDQogICAgICAgICAgICAgICAgZml4ZWRfdGhlYWQgPSBULCBmb250X3NpemUgPSAyMCkgJT4lIA0KICBmb290bm90ZShnZW5lcmFsID0gZnVlbnRlLA0KICAgICAgICAgICBnZW5lcmFsX3RpdGxlID0gIlxuIikgJT4lIA0KICBjb2x1bW5fc3BlYygxLCB3aWR0aCA9ICI3Y20iKSAlPiUgDQogIGNvbHVtbl9zcGVjKDIsIGNvbG9yID0gImJsYWNrIiwgd2lkdGggPSAiNGNtIikgJT4lIA0KICBjb2x1bW5fc3BlYygzLCBjb2xvciA9ICJibGFjayIsIHdpZHRoID0gIjRjbSIpICU+JSANCiAgcm93X3NwZWMoMCwgYm9sZCA9IFQsIGNvbG9yID0gIndoaXRlIiwgYmFja2dyb3VuZCA9IGNvbG9yZXNbMV0pDQpgYGANCg0KYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgaW5jbHVkZT1GQUxTRX0NCnRhYmxhOS4yX2dyYWYgPC0gdGFibGE5LjIgJT4lIA0KICBwaXZvdF93aWRlciguLCBuYW1lc19mcm9tID0gU2V4bywgdmFsdWVzX2Zyb20gPSBJT1BfbWVuc3VhbCkgJT4lDQogIG11dGF0ZShicmVjaGEgPSBwZXJjZW50KChWYXJvbmVzLU11amVyZXMpL1Zhcm9uZXMsIDEpLA0KICAgICAgICAgeCA9IChWYXJvbmVzK011amVyZXMpLzIpDQpgYGANCg0KPGJyPjxicj4NCg0KX19GaWd1cmEgMTAuX18NCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQpnZ3Bsb3QodGFibGE5LjJfZ3JhZiwgDQogICAgICAgYWVzKHggPSBNdWplcmVzLCB4ZW5kID0gVmFyb25lcywgeSA9IE5JVkVMX0VEVUNBVElWTywgDQogICAgICAgICAgIGdyb3VwID0gTklWRUxfRURVQ0FUSVZPLCBsYWJlbCA9IGJyZWNoYSkpICsNCiAgZ2VvbV9kdW1iYmVsbChjb2xvciA9ICIjODA4MDgwIiwNCiAgICAgICAgICAgICAgICBzaXplX3ggPSAzLCBzaXplX3hlbmQgPSAzLA0KICAgICAgICAgICAgICAgIGNvbG91cl94ID0gY29sb3Jlc1sxXSwNCiAgICAgICAgICAgICAgICBjb2xvdXJfeGVuZCA9IGNvbG9yZXNbMl0pICsNCiAgZ2VvbV90ZXh0KGRhdGEgPSB0YWJsYTkuMl9ncmFmLCANCiAgICAgICAgICAgIGFlcyh4LCBOSVZFTF9FRFVDQVRJVk8sIGxhYmVsID0gYnJlY2hhKSwgbnVkZ2VfeSA9IC4yKSArDQogIGxhYnModGl0bGUgPSAiQnJlY2hhIGRlIGluZ3Jlc29zIGRlIGxhIG9jdXBhY2nDs24gcHJpbmNpcGFsDQogICAgICAgcG9yIHNleG8geSBuaXZlbCBlZHVjYXRpdm8iLA0KICAgICAgIHN1YnRpdGxlID0gcGFzdGUwKCJPY3VwYWRhcy9vcy4gIiwgYWdsb19kYXRlKSwNCiAgICAgICB4ID0gIkluZ3Jlc28gTWVuc3VhbCIsDQogICAgICAgeSA9IE5VTEwsIA0KICAgICAgIGNhcHRpb24gPSBmdWVudGUpKw0KICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gY29sb3JlcykrDQogIHRoZW1lX21pbmltYWwoKQ0KYGBgDQoNCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQojIEFxdcOtIGhheSBxdWUgY2FtYmlhciBlbCBkaXJlY3RvcmlvIGVuIHF1ZSBzZSB2YSBhIGd1YXJkYXIgZWwgZ3LDoWZpY28uDQojZ2dzYXZlKCJGaWd1cmExMC5wbmciLCBzY2FsZSA9IDAuNywgZHBpID0gMzAwLCB3aWR0aCA9IDEwLCBoZWlnaHQgPSA3LCBiZyA9ICIjZmZmZmZmIikNCmBgYA0KDQpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBpbmNsdWRlPUZBTFNFfQ0Kcm0odGFibGE5LjEsIHRhYmxhOS4yLCB0YWJsYTkuMl9ncmFmKQ0KYGBgDQoNCiMjIyMgSW5ncmVzb3MgaG9yYXJpb3MNCg0KIyMjIyMgX19CcmVjaGFzIGRlIGluZ3Jlc29zIGhvcmFyaW9zX18NCjxicj4NCg0KYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgaW5jbHVkZT1GQUxTRX0NCiMgT2N1cGFkZXMuIEluZ3Jlc28gZGUgbGEgT2N1cGFjacOzbiBQcmluY2lwYWwNCnRhYmxhMTAuMSA8LSBiYXNlX2luZGl2aWR1YWwgJT4lIA0KICBmaWx0ZXIoRVNUQURPID09IDEsDQogICAgICAgICBQUDNFX1RPVCA+IDAsICMgSG9yYXMgdHJhYmFqYWRhcyBwb3NpdGl2YXMNCiAgICAgICAgIFBQM0VfVE9UICE9IDk5OSkgJT4lIA0KICBncm91cF9ieShTZXhvKSAlPiUgDQogICAgbXV0YXRlKFBQM0VfVE9UID0gYXMubnVtZXJpYyhnc3ViKCIsIiwgI2NhbWJpbyAiLiIgcG9yICJjb21hcyIsIiBlbiBsb3MgZGVjaW1hbGVzIHBhcmEgcG9kZXIgb3BlcmFyDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLiIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUDNFX1RPVCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpeGVkID0gVFJVRSkpKSAlPiUgDQogIHN1bW1hcmlzZShJT1BfaHIgPSB3ZWlnaHRlZC5tZWFuKFAyMS8oUFAzRV9UT1QgKiAzMCAvIDcpLCBQT05ESUlPKSkgJT4lIA0KICBwaXZvdF93aWRlciguLCBuYW1lc19mcm9tID0gU2V4bywgdmFsdWVzX2Zyb20gPSBJT1BfaHIpICU+JSANCiAgbXV0YXRlKFBvYmxhY2nDs24gPSAiT2N1cGFkYXMvb3MiKQ0KDQojIEFzYWxhcmlhZGVzLiBJbmdyZXNvIGRlIGxhIE9jdXBhY2nDs24gUHJpbmNpcGFsDQp0YWJsYTEwLjIgPC0gYmFzZV9pbmRpdmlkdWFsICU+JSANCiAgZmlsdGVyKEVTVEFETyA9PSAxLA0KICAgICAgICAgQ0FUX09DVVAgPT0gMywNCiAgICAgICAgIFBQM0VfVE9UID4gMCwgIyBIb3JhcyB0cmFiYWphZGFzIHBvc2l0aXZhcw0KICAgICAgICAgUFAzRV9UT1QgIT0gOTk5KSAlPiUgDQogIGdyb3VwX2J5KFNleG8pICU+JSANCiAgICBtdXRhdGUoUFAzRV9UT1QgPSBhcy5udW1lcmljKGdzdWIoIiwiLCAjY2FtYmlvICIuIiBwb3IgImNvbWFzIiwiIGVuIGxvcyBkZWNpbWFsZXMgcGFyYSBwb2RlciBvcGVyYXINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIuIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBQM0VfVE9ULA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZml4ZWQgPSBUUlVFKSkpICU+JSANCiAgc3VtbWFyaXNlKElPUF9ociA9IHdlaWdodGVkLm1lYW4oUDIxLyhQUDNFX1RPVCAqIDMwIC8gNyksIFBPTkRJSU8pKSAlPiUgDQogIHBpdm90X3dpZGVyKC4sIG5hbWVzX2Zyb20gPSBTZXhvLCB2YWx1ZXNfZnJvbSA9IElPUF9ocikgJT4lIA0KICBtdXRhdGUoUG9ibGFjacOzbiA9ICJBc2FsYXJpYWRhcy9vcyIpDQoNCiMgQXNhbC4gc2luIGRlc2N1ZW50byBqdWJpbGF0b3Jpby4gSW5ncmVzbyBkZSBsYSBPY3VwYWNpw7NuIFByaW5jaXBhbA0KdGFibGExMC4zIDwtIGJhc2VfaW5kaXZpZHVhbCAlPiUgDQogIGZpbHRlcihFU1RBRE8gPT0gMSwgDQogICAgICAgICBDQVRfT0NVUCA9PSAzLA0KICAgICAgICAgUFAwN0ggPT0gMiwNCiAgICAgICAgIFBQM0VfVE9UID4gMCwgIyBIb3JhcyB0cmFiYWphZGFzIHBvc2l0aXZhcw0KICAgICAgICAgUFAzRV9UT1QgIT0gOTk5KSAlPiUgDQogIGdyb3VwX2J5KFNleG8pICU+JSANCiAgICBtdXRhdGUoUFAzRV9UT1QgPSBhcy5udW1lcmljKGdzdWIoIiwiLCAjY2FtYmlvICIuIiBwb3IgImNvbWFzIiwiIGVuIGxvcyBkZWNpbWFsZXMgcGFyYSBwb2RlciBvcGVyYXINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIuIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBQM0VfVE9ULA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZml4ZWQgPSBUUlVFKSkpICU+JSANCiAgc3VtbWFyaXNlKElPUF9ociA9IHdlaWdodGVkLm1lYW4oUDIxLyhQUDNFX1RPVCAqIDMwIC8gNyksIFBPTkRJSU8pKSAlPiUgDQogIHBpdm90X3dpZGVyKC4sIG5hbWVzX2Zyb20gPSBTZXhvLCB2YWx1ZXNfZnJvbSA9IElPUF9ocikgJT4lIA0KICBtdXRhdGUoUG9ibGFjacOzbiA9ICJBc2FsYXJpYWRhcy9vcyBzaW4gZGVzYy4ganViaWwuIikNCg0KdGFibGExMCA8LSBiaW5kX3Jvd3ModGFibGExMC4xLCB0YWJsYTEwLjIsIHRhYmxhMTAuMykgJT4lIA0KICBtdXRhdGUoQnJlY2hhID0gcGVyY2VudCgoKFZhcm9uZXMtTXVqZXJlcykvVmFyb25lcyksIDEpLA0KICAgICAgICAgTXVqZXJlcyA9IGZvcm1hdG9fcGVzb3MoTXVqZXJlcywgMCksDQogICAgICAgICBWYXJvbmVzID0gZm9ybWF0b19wZXNvcyhWYXJvbmVzLCAwKSkgJT4lIA0KICBzZWxlY3QoUG9ibGFjacOzbiwgTXVqZXJlcywgVmFyb25lcywgQnJlY2hhKQ0KYGBgDQoNClNpIGVuIGx1Z2FyIGRlIGNvbXBhcmFyIGluZ3Jlc29zIG1lbnN1YWxlcyB0b21hbW9zIGVsIGluZ3Jlc28gcG9yIGhvcmEgdHJhYmFqYWRhIHF1ZSBwZXJjaWJlbiBsYXMgcGVyc29uYXMsIGxhIGhpc3RvcmlhIGVzIHVuIHBvY28gZGlmZXJlbnRlLiBFbiBlc3RlIGNhc28sIGxhIGJyZWNoYSBkaXNtaW51eWUgY29uc2lkZXJhYmxlbWVudGUuIFF1ZSBsYXMgYnJlY2hhcyBzZWFuIG3DoXMgYW1wbGlhcyBjb21wYXJhbmRvIGluZ3Jlc29zIG1lbnN1YWxlcyBkZSBib2xzaWxsbywgeSBxdWUgc2VhbiBtw6FzIGVzdHJlY2hhcyBjdWFuZG8gc2UgdG9tYW4gbG9zIGluZ3Jlc29zIHBvciBob3JhLCBzdWdpZXJlIHF1ZSBsYXMgbXVqZXJlcyB2ZW5kZW4gZW4gZWwgbWVyY2FkbyBkZSB0cmFiYWpvLCBwb3IgbG8gZ2VuZXJhbCwgbWVub3MgaG9yYXMgcXVlIGxvcyB2YXJvbmVzLiBDb21vIHNlIHZlcsOhIG3DoXMgYWRlbGFudGUsIGVzdG8gZXN0w6EgbGlnYWRvIGFsIHRyYWJham8gcXVlIGxhcyBtaXNtYXMgc3VlbGVuIHJlYWxpemFyIGFsIGludGVyaW9yIGRlIGxvcyBob2dhcmVzLg0KPGJyPjxicj4NCg0KX19GaWd1cmEgMTEuX18NCjxicj4NCjxwIHN0eWxlPSJjb2xvcjA6I0U1NjE2RSI+X19CcmVjaGFzIGRlIGluZ3Jlc29zIGhvcmFyaW9zX188L3A+DQpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0Ka2FibGUodGFibGExMCwgZGlnaXRzID0gMSwgYWxpZ24gPSAnbGNjYycsIA0KICAgICAgY2FwdGlvbiA9IGFnbG9fZGF0ZSkgJT4lDQogIGthYmxlX3N0eWxpbmcoYygic3RyaXBlZCIsICJob3ZlciIsICJjb25kZW5zZWQiLCAicmVzcG9uc2l2ZSIpLCANCiAgICAgICAgICAgICAgICAjZnVsbF93aWR0aCA9IEYsIHBvc2l0aW9uID0gImxlZnQiLA0KICAgICAgICAgICAgICAgIGZpeGVkX3RoZWFkID0gVCwgZm9udF9zaXplID0gMjApICU+JQ0KICBhZGRfaGVhZGVyX2Fib3ZlKGMoIlxuIiA9IDEsICJNZWRpYSBkZWwgaW5ncmVzbyBob3JhcmlvIiA9IDIsICJcbiIgPSAxKSwNCiAgICAgICAgICAgICAgICAgICBjb2xvciA9ICJ3aGl0ZSIsIGJhY2tncm91bmQgPSBjb2xvcmVzWzFdKSAlPiUgDQogIGZvb3Rub3RlKGdlbmVyYWwgPSBmdWVudGUsDQogICAgICAgICAgIGdlbmVyYWxfdGl0bGUgPSAiXG4iKSAlPiUgDQogIGNvbHVtbl9zcGVjKDEsIHdpZHRoID0gIjhjbSIpICU+JSANCiAgY29sdW1uX3NwZWMoNCwgYm9sZCA9IFRSVUUsIHdpZHRoID0gIjRjbSIpICU+JSANCiAgcm93X3NwZWMoMCwgYm9sZCA9IFQsIGNvbG9yID0gIndoaXRlIiwgYmFja2dyb3VuZCA9IGNvbG9yZXNbMV0pDQpgYGANCg0KYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgaW5jbHVkZT1GQUxTRX0NCnJtKHRhYmxhMTAuMSwgdGFibGExMC4yLCB0YWJsYTEwLjMsIHRhYmxhMTApDQpgYGANCg0KLS0tDQoNCiMjIyMjIF9fQnJlY2hhIGRlIGluZ3Jlc29zIGhvcmFyaW9zIHBvciBuaXZlbCBlZHVjYXRpdm9fXw0KPGJyPg0KDQpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBpbmNsdWRlPUZBTFNFfQ0KdGFibGExMSA8LSBiYXNlX2luZGl2aWR1YWwgJT4lIA0KICBmaWx0ZXIoRVNUQURPID09IDEsIA0KICAgICAgICAgUFAzRV9UT1QgPiAwLA0KICAgICAgICAgUFAzRV9UT1QgIT0gOTk5LA0KICAgICAgICAgIWlzLm5hKE5JVkVMX0VEVUNBVElWTykpICU+JSANCiAgZ3JvdXBfYnkoU2V4bywgTklWRUxfRURVQ0FUSVZPKSAlPiUgDQogICAgbXV0YXRlKFBQM0VfVE9UID0gYXMubnVtZXJpYyhnc3ViKCIsIiwgI2NhbWJpbyAiLiIgcG9yICJjb21hcyIsIiBlbiBsb3MgZGVjaW1hbGVzIHBhcmEgcG9kZXIgb3BlcmFyDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLiIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUDNFX1RPVCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpeGVkID0gVFJVRSkpKSAlPiUgDQogIHN1bW1hcmlzZShJT1BfaHIgPSByb3VuZCh3ZWlnaHRlZC5tZWFuKFAyMS8oUFAzRV9UT1QgKiAzMCAvIDcpLCBQT05ESUlPKSwgMiksDQogICAgICAgICAgICBJT1BfbWVuc3VhbCAgPSByb3VuZCh3ZWlnaHRlZC5tZWFuKFAyMSwgUE9ORElJTyksIDIpKQ0KDQp0YWJsYTExX2dyYWYgPC0gdGFibGExMSAlPiUgDQogIHNlbGVjdCgtSU9QX21lbnN1YWwpICU+JSANCiAgcGl2b3Rfd2lkZXIoLiwgbmFtZXNfZnJvbSA9IFNleG8sIHZhbHVlc19mcm9tID0gSU9QX2hyKSAlPiUgDQogIG11dGF0ZShicmVjaGEgPSBwZXJjZW50KChWYXJvbmVzLU11amVyZXMpL1Zhcm9uZXMsIDEpLA0KICAgICAgICAgeCA9IChWYXJvbmVzK011amVyZXMpLzIpDQpgYGANCg0KVGFsIGNvbW8gc2UgYW5hbGl6w7MgZW4gZWwgY2FzbyBhbnRlcmlvciwgc2kgc2Ugb2JzZXJ2YSBsYSBicmVjaGEgZGUgaW5ncmVzb3MgaG9yYXJpb3MgcG9yIG5pdmVsIGVkdWNhdGl2byBhbGNhbnphZG8sIGxhIG1pc21hIHNlIHJlZHVjZSBzaWduaWZpY2F0aXZhbWVudGUsIGF1bnF1ZSBzaWd1ZSBwcmVzZW50ZSBlbiBhbGd1bmFzIGNhdGVnb3LDrWFzLg0KPGJyPjxicj4NCg0KX19GaWd1cmEgMTIuX18gDQpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KZ2dwbG90KHRhYmxhMTFfZ3JhZiwgDQogICAgICAgYWVzKHggPSBNdWplcmVzLCB4ZW5kID0gVmFyb25lcywgeSA9IE5JVkVMX0VEVUNBVElWTywgDQogICAgICAgICAgIGdyb3VwID0gTklWRUxfRURVQ0FUSVZPLCBsYWJlbCA9IGJyZWNoYSkpICsNCiAgZ2VvbV9kdW1iYmVsbChjb2xvcj0gIiM4MDgwODAiLA0KICAgICAgICAgICAgICAgIHNpemVfeCA9IDMsIHNpemVfeGVuZCA9IDMsDQogICAgICAgICAgICAgICAgY29sb3VyX3ggPSBjb2xvcmVzWzFdLA0KICAgICAgICAgICAgICAgIGNvbG91cl94ZW5kID0gY29sb3Jlc1syXSkgKw0KICBnZW9tX3RleHQoZGF0YSA9IHRhYmxhMTFfZ3JhZiwNCiAgICAgICAgICAgIGFlcyh4LCBOSVZFTF9FRFVDQVRJVk8sIGxhYmVsID0gYnJlY2hhKSwgbnVkZ2VfeSA9IC4yKSArDQogIGxhYnModGl0bGUgPSAiQnJlY2hhIGRlIGluZ3Jlc29zIGhvcmFyaW9zIGRlIGxhIG9jdXBhY2nDs24gcHJpbmNpcGFsDQogICAgICAgcG9yIHNleG8geSBuaXZlbCBlZHVjYXRpdm8iLA0KICAgICAgIHN1YnRpdGxlID0gcGFzdGUwKCJPY3VwYWRhcy9vcy4gIiwgYWdsb19kYXRlKSwNCiAgICAgICB4PSJJbmdyZXNvIEhvcmFyaW8iLA0KICAgICAgIHk9TlVMTCwgDQogICAgICAgY2FwdGlvbiA9IGZ1ZW50ZSkrDQogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjb2xvcmVzKSsNCiAgdGhlbWVfbWluaW1hbCgpDQpgYGANCg0KYGBge3IgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCiMgQXF1w60gaGF5IHF1ZSBjYW1iaWFyIGVsIGRpcmVjdG9yaW8gZW4gcXVlIHNlIHZhIGEgZ3VhcmRhciBlbCBncsOhZmljby4NCiNnZ3NhdmUoIkZpZ3VyYTEzLnBuZyIsIHNjYWxlID0gMC43LCBkcGkgPSAzMDAsIHdpZHRoID0gMTAsIGhlaWdodCA9IDcsIGJnID0gIiNmZmZmZmYiKQ0KYGBgDQoNCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGluY2x1ZGU9RkFMU0V9DQpybSh0YWJsYTExLCB0YWJsYTExX2dyYWYpDQpgYGANCg0KIyMgSG9yYXMgdHJhYmFqYWRhcw0KDQotLS0NCg0KIyMjIEhvcmFzIHRyYWJhamFkYXMNCjxicj48YnI+DQoNCkxhIGlkZWEgZGUgbGEgImJyZWNoYSIgdGFtYmnDqW4gcHVlZGUgYXBsaWNhcnNlIHBhcmEgY29tcGFyYXIgbGFzIGhvcmFzIHF1ZSB0cmFiYWphbiBlbiBwcm9tZWRpbyBtdWplcmVzIHkgdmFyb25lcyBlbiBlbCBtZXJjYWRvIGRlIHRyYWJham8sIGRlIGZvcm1hIHJlbXVuZXJhZGEuIERlIGFxdcOtIHNlIGRlc3ByZW5kZSBxdWUsIGVuIHByb21lZGlvLCBsYXMgbXVqZXJlcyB0cmFiYWphbiBtZW5vcyBob3JhcyBxdWUgbG9zIHZhcm9uZXMsIHkgZXN0byBleHBsaWNhIHVuYSBwYXJ0ZSBpbXBvcnRhbnRlIChhdW5xdWUgbm8gdG9kYSkgZGUgbGEgYnJlY2hhIGRlIGluZ3Jlc29zIG1lbnN1YWxlcy4NCjxicj48YnI+DQpDYWJlIGN1ZXN0aW9uYXJzZSBlbnRvbmNlcyByZXNwZWN0byBhbCBwb3IgcXXDqSBkZSBsYSBkaWZlcmVuY2lhIGRlIGhvcmFzIHRyYWJhamFkYXMgcG9yIG11amVyZXMgeSBwb3IgdmFyb25lcy4gwr9FeGlzdGUgdW5hIGZhbHRhIGRlIHZvbHVudGFkIGRlIGxhcyBtdWplcmVzIHBhcmEgdHJhYmFqYXI/IMK/U29uIG3DoXMgInZhZ2FzIj8gwr9PIGVuIHJlYWxpZGFkIGV4aXN0ZSBvdHJvIG1vdGl2byBwb3IgZWwgY3VhbCBsYXMgbXVqZXJlcyBkZWJlbiByZWxlZ2FyIHN1cyB0cmFiYWpvcywgZGVsIGN1YWwgbG9zIHZhcm9uZXMgZXN0w6FuIGV4ZW50b3M/IENvbW8gdmVyZW1vcyBtw6FzIGFkZWxhbnRlLCBsb3MgZGF0b3Mgc3VnaWVyZW4gdW5hIGVzdHJlY2hhIHJlbGFjacOzbiBjb24gbGEgZGlzdHJpYnVjacOzbiBkZSBsYXMgdGFyZWFzIGRvbcOpc3RpY2FzIGhhY2lhIGVsIGludGVyaW9yIGRlIGxvcyBob2dhcmVzLg0KPGJyPjxicj4NCg0KYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgaW5jbHVkZT1GQUxTRX0NCiMgT2N1cGFkZXMNCnRhYmxhMTIuMSA8LSBiYXNlX2luZGl2aWR1YWwgJT4lIA0KICBmaWx0ZXIoRVNUQURPID09IDEsDQogICAgICAgICBQUDNFX1RPVCA+IDAsICMgSG9yYXMgdHJhYmFqYWRhcyBwb3NpdGl2YXMNCiAgICAgICAgIFBQM0VfVE9UICE9IDk5OSkgJT4lIA0KICBncm91cF9ieShTZXhvKSAlPiUgDQogICAgbXV0YXRlKFBQM0VfVE9UID0gYXMubnVtZXJpYyhnc3ViKCIsIiwgI2NhbWJpbyAiLiIgcG9yICJjb21hcyIsIiBlbiBsb3MgZGVjaW1hbGVzIHBhcmEgcG9kZXIgb3BlcmFyDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLiIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUDNFX1RPVCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpeGVkID0gVFJVRSkpKSAlPiUgDQogIHN1bW1hcmlzZShIb3JhcyA9IHdlaWdodGVkLm1lYW4oUFAzRV9UT1QsIFBPTkRFUkEpKSAlPiUgDQogIHBpdm90X3dpZGVyKC4sIG5hbWVzX2Zyb20gPSBTZXhvLCB2YWx1ZXNfZnJvbSA9IEhvcmFzKSAlPiUgDQogIG11dGF0ZShQb2JsYWNpw7NuID0gIk9jdXBhZGFzL29zIikNCg0KIyBBc2FsYXJpYWRlcw0KdGFibGExMi4yIDwtIGJhc2VfaW5kaXZpZHVhbCAlPiUgDQogIGZpbHRlcihFU1RBRE8gPT0gMSwNCiAgICAgICAgIENBVF9PQ1VQID09IDMsDQogICAgICAgICBQUDNFX1RPVCA+IDAsICMgSG9yYXMgdHJhYmFqYWRhcyBwb3NpdGl2YXMNCiAgICAgICAgIFBQM0VfVE9UICE9IDk5OSkgJT4lIA0KICBncm91cF9ieShTZXhvKSAlPiUgDQogICAgbXV0YXRlKFBQM0VfVE9UID0gYXMubnVtZXJpYyhnc3ViKCIsIiwgI2NhbWJpbyAiLiIgcG9yICJjb21hcyIsIiBlbiBsb3MgZGVjaW1hbGVzIHBhcmEgcG9kZXIgb3BlcmFyDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLiIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUDNFX1RPVCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpeGVkID0gVFJVRSkpKSAlPiUgDQogIHN1bW1hcmlzZShIb3JhcyA9IHdlaWdodGVkLm1lYW4oUFAzRV9UT1QsIFBPTkRFUkEpKSAlPiUgDQogIHBpdm90X3dpZGVyKC4sIG5hbWVzX2Zyb20gPSBTZXhvLCB2YWx1ZXNfZnJvbSA9IEhvcmFzKSAlPiUgDQogIG11dGF0ZShQb2JsYWNpw7NuID0gIkFzYWxhcmlhZGFzL29zIikNCg0KIyBBc2FsLiBzaW4gZGVzY3VlbnRvIGp1YmlsYXRvcmlvDQp0YWJsYTEyLjMgPC0gYmFzZV9pbmRpdmlkdWFsICU+JSANCiAgZmlsdGVyKEVTVEFETyA9PSAxLCANCiAgICAgICAgIENBVF9PQ1VQID09IDMsDQogICAgICAgICBQUDA3SCA9PSAyLA0KICAgICAgICAgUFAzRV9UT1QgPiAwLCAjIEhvcmFzIHRyYWJhamFkYXMgcG9zaXRpdmFzDQogICAgICAgICBQUDNFX1RPVCAhPSA5OTkpICU+JSANCiAgZ3JvdXBfYnkoU2V4bykgJT4lIA0KICAgIG11dGF0ZShQUDNFX1RPVCA9IGFzLm51bWVyaWMoZ3N1YigiLCIsICNjYW1iaW8gIi4iIHBvciAiY29tYXMiLCIgZW4gbG9zIGRlY2ltYWxlcyBwYXJhIHBvZGVyIG9wZXJhcg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi4iLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFAzRV9UT1QsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXhlZCA9IFRSVUUpKSkgJT4lIA0KICBzdW1tYXJpc2UoSG9yYXMgPSB3ZWlnaHRlZC5tZWFuKFBQM0VfVE9ULCBQT05ERVJBKSkgJT4lIA0KICBwaXZvdF93aWRlciguLCBuYW1lc19mcm9tID0gU2V4bywgdmFsdWVzX2Zyb20gPSBIb3JhcykgJT4lIA0KICBtdXRhdGUoUG9ibGFjacOzbiA9ICJBc2FsYXJpYWRhcy9vcyBzaW4gZGVzYy4ganViaWwuIikNCg0KdGFibGExMiA8LSBiaW5kX3Jvd3ModGFibGExMi4xLCB0YWJsYTEyLjIsIHRhYmxhMTIuMykgJT4lIA0KICBtdXRhdGUoQnJlY2hhID0gcGVyY2VudCgoKFZhcm9uZXMtTXVqZXJlcykvVmFyb25lcyksIDEpLA0KICAgICAgICAgTXVqZXJlcyA9IChNdWplcmVzKSwNCiAgICAgICAgIFZhcm9uZXMgPSAoVmFyb25lcykpICU+JSANCiAgc2VsZWN0KFBvYmxhY2nDs24sIE11amVyZXMsIFZhcm9uZXMsIEJyZWNoYSkNCmBgYA0KDQpfX0ZpZ3VyYSAxMy5fXw0KPGJyPg0KPHAgc3R5bGU9ImNvbG9yOiNFNTYxNkUiPl9fQnJlY2hhcyBkZSBob3JhcyB0cmFiYWphZGFzX188L3A+DQpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0Ka2FibGUodGFibGExMiwgZGlnaXRzID0gMSwgYWxpZ24gPSAnbGNjYycsIA0KICAgICAgY2FwdGlvbiA9IGFnbG9fZGF0ZSkgJT4lDQogIGthYmxlX3N0eWxpbmcoYygic3RyaXBlZCIsICJob3ZlciIsICJjb25kZW5zZWQiLCAicmVzcG9uc2l2ZSIpLCANCiAgICAgICAgICAgICAgICAjZnVsbF93aWR0aCA9IEYsIHBvc2l0aW9uID0gImxlZnQiLA0KICAgICAgICAgICAgICAgIGZpeGVkX3RoZWFkID0gVCwgZm9udF9zaXplID0gMjApICU+JQ0KICBhZGRfaGVhZGVyX2Fib3ZlKGMoIlxuIiA9IDEsICJIb3JhcyBzZW1hbmFsZXMgKG1lZGlhKSIgPSAyLCAiXG4iID0gMSksDQogICAgICAgICAgICAgICAgICAgY29sb3IgPSAid2hpdGUiLCBiYWNrZ3JvdW5kID0gY29sb3Jlc1sxXSkgJT4lIA0KICBmb290bm90ZShnZW5lcmFsID0gZnVlbnRlLA0KICAgICAgICAgICBnZW5lcmFsX3RpdGxlID0gIlxuIikgJT4lIA0KICBjb2x1bW5fc3BlYygxLCB3aWR0aCA9ICI4Y20iKSAlPiUgDQogIGNvbHVtbl9zcGVjKDQsIGJvbGQgPSBUUlVFLCB3aWR0aCA9ICI0Y20iKSAlPiUgDQogIHJvd19zcGVjKDAsIGJvbGQgPSBULCBjb2xvciA9ICJ3aGl0ZSIsIGJhY2tncm91bmQgPSBjb2xvcmVzWzFdKQ0KYGBgDQoNCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGluY2x1ZGU9RkFMU0V9DQpybSh0YWJsYTEyLjEsIHRhYmxhMTIuMiwgdGFibGExMi4zLCB0YWJsYTEyKQ0KYGBgDQoNCjxicj4NCg0KIyMgVGFyZWFzIGRlbCBob2dhcg0KDQotLS0NCg0KIyMjIERpc3RyaWJ1Y2nDs24gZGUgbGFzIHRhcmVhcyBkb23DqXN0aWNhcw0KPGJyPjxicj4NCg0KYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgaW5jbHVkZT1GQUxTRX0NCnRhYmxhMTNfZ3JhZiA8LSBiYXNlX2luZGl2aWR1YWwgJT4lIA0KICBsZWZ0X2pvaW4oLiwgYmFzZV9ob2dhciAlPiUgDQogICAgICAgICAgICAgIHNlbGVjdChDT0RVU1UsIE5ST19IT0dBUiwgVklJMV8xLCBWSUkxXzIpLCANCiAgICAgICAgICAgIGJ5ID0gYygiQ09EVVNVIiwgIk5ST19IT0dBUiIpKSAlPiUgDQogIG11dGF0ZShwcm9wb3JjaW9uID0gY2FzZV93aGVuKFZJSTFfMSA9PSBDT01QT05FTlRFIHwgVklJMV8yID09IENPTVBPTkVOVEUgfiAxLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUlVFIH4gMCkpICU+JSANCiAgc2VsZWN0KFNleG8sIHByb3BvcmNpb24sIFBPTkRFUkEpICU+JSANCiAgZ3JvdXBfYnkoU2V4bykgJT4lIA0KICBzdW1tYXJpc2UocHJvcG9yY2lvbiA9IHN1bShwcm9wb3JjaW9uKlBPTkRFUkEpKSAlPiUgDQogIG11dGF0ZShwcm9wb3JjaW9uID0gcm91bmQocHJvcG9yY2lvbi9zdW0ocHJvcG9yY2lvbikqMTAwLCAwKSkNCg0KaW5saW5lXzIyIDwtIHRhYmxhMTNfZ3JhZiAlPiUgDQogIGZpbHRlcihTZXhvID09ICJNdWplcmVzIikgJT4lIA0KICBwdWxsKHByb3BvcmNpb24pDQogIA0KaW5saW5lXzIzIDwtIHRhYmxhMTNfZ3JhZiAlPiUgDQogIGZpbHRlcihTZXhvID09ICJWYXJvbmVzIikgJT4lIA0KICBwdWxsKHByb3BvcmNpb24pDQpgYGANCg0KRWwgdHJhYmFqbyBkb23DqXN0aWNvIHN1ZWxlIHJlY2FlciBtw6FzIGVuIGxhcyBtdWplcmVzIHF1ZSBlbiBsb3MgdmFyb25lcy4gRXMgZGVjaXIsIGVzIG3DoXMgcHJvYmFibGUgcXVlIHNlYW4gZWxsYXMgbGFzIGVuY2FyZ2FkYXMgZGUgcmVhbGl6YXIgdGFyZWFzIGRlIGN1aWRhZG8geSByZXByb2R1Y2Npw7NuIHBhcmEgb3Ryb3MgbWllbWJyb3MgZGUgc3UgaG9nYXIuIEVuIGVzdG9zIGNhc29zLCBlbCB0cmFiYWpvIG5vIHNlIGNvbWVyY2lhIGVuIGVsIG1lcmNhZG8sIHNlIHJlYWxpemEgZW50cmUgcXVpZW5lcyB0aWVuZW4gdW4gdsOtbmN1bG8gcGVyc29uYWwsIHkgcG9yIGxvIHRhbnRvLCBubyBzZSByZW11bmVyYS4NCjxicj48YnI+DQpBIG1vZG8gaWx1c3RyYXRpdm8sIHNlIHNlw7FhbGEgcXVlOiBfX2RlbCB0b3RhbCBkZSBwZXJzb25hcyBxdWUgcmVhbGl6YW4gdGFyZWFzIGRvbcOpc3RpY2FzLCB1biBgciBpbmxpbmVfMjJgJSBzb24gbXVqZXJlcyB5IHVuIGByIGlubGluZV8yM2AlIHNvbiB2YXJvbmVzLl9fIEVzdG8gc3VjZWRlIHNpIHRlbmVtb3MgZW4gY3VlbnRhIGVsIHRvdGFsIGRlIGxvcyBob2dhcmVzLCB5IHNlZ3VyYW1lbnRlIGxhIGRpZmVyZW5jaWEgc2UgYWdyYXZhcsOtYSBzaSBxdWl0w6FyYW1vcyBsb3MgaG9nYXJlcyB1bmlwZXJzb25hbGVzIGRlbCBjb250ZW8geS9vIGluY2x1ecOpcmFtb3MgYSBsYXMgdHJhYmFqYWRvcmFzIGRlIHNlcnZpY2lvIGRvbcOpc3RpY28uICAgIA0KICANCkVzdGUgcmVwYXJ0byBkZXNpZ3VhbCBkZSBsYXMgdGFyZWFzIGRvbcOpc3RpY2FzIGVudHJlIHZhcm9uZXMgeSBtdWplcmVzIHBvZHLDrWEgYXNvY2lhcnNlIGEgbGFzIGRlc2lndWFsZGFkZXMgdmlzdGFzIGFudGVyaW9ybWVudGUgZW4gbGEgY29tcG9zaWNpw7NuIGRlbCBtZXJjYWRvIGRlIHRyYWJham8gKG9ic3TDoWN1bG9zIGVuIGVsIGFjY2VzbyBhIGNhcmdvcyBqZXLDoXJxdWljb3MsIHByZWNhcml6YWNpw7NuIGxhYm9yYWwsIGV0YyApIHkgcmVzcG9uZGUgYSB1biBjb25qdW50byBkZSBub3JtYXMgc29jaWFsZXMgeSBlc3RlcmVvdGlwb3MgZGUgZ8OpbmVybyBxdWUgYXNpZ25hbiBtYW5kYXRvcyBkaWZlcmVuY2lhbGVzIGEgdmFyb25lcyB5IG11amVyZXMuDQoNCkRpY2hhIGZlbWluaXphY2nDs24gZGUgbGFzIHRhcmVhcyBkZSBjdWlkYWRvIHBlbmFsaXphIGEgZXN0YXMgw7psdGltYXMsIGhhY2llbmRvIHF1ZSBlbmZyZW50ZW4gZXh0ZW5zYXMgY2FyZ2FzIGRlIHRyYWJham8gZW4gZWwgaG9nYXIgeSwgcG9yIGVuZGUsIGltcG9uaWVuZG8gdW5hIGZ1ZXJ0ZSByZXN0cmljY2nDs24gdGVtcG9yYWwgeSBhZmVjdGFuZG8gZWwgYWNjZXNvIGFsIG1lcmNhZG8gZGUgdHJhYmFqbyB5IGEgbGEgdHJheWVjdG9yaWEgbGFib3JhbC4gDQo8YnI+PGJyPg0KDQpfX0ZpZ3VyYSAxNC5fXyANCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQojIyBQcmVwIGRhdGEgKG5vdGhpbmcgdG8gY2hhbmdlIGhlcmUpDQpucm93cyA8LSAxMA0KZGYgPC0gZXhwYW5kLmdyaWQoeCA9IDE6bnJvd3MsIHkgPSAxOm5yb3dzKQ0KZGYkU2V4byA8LSBmYWN0b3IocmVwKHRhYmxhMTNfZ3JhZiRTZXhvLCB0YWJsYTEzX2dyYWYkcHJvcG9yY2lvbikpICANCiMjIFBsb3QNCmdncGxvdChkZiwgYWVzKHggPSB4LCB5ID0geSwgZmlsbCA9IFNleG8pKSArIA0KICBnZW9tX3RpbGUoY29sb3IgPSAiYmxhY2siLCBzaXplID0gMC41KSArDQogIHNjYWxlX3hfY29udGludW91cyhleHBhbmQgPSBjKDAsIDApKSArDQogIHNjYWxlX3lfY29udGludW91cyhleHBhbmQgPSBjKDAsIDApLCB0cmFucyA9ICdyZXZlcnNlJykgKw0KICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBjb2xvcmVzKSArDQogIGxhYnModGl0bGUgPSAiUGVyc29uYXMgcXVlIHJlYWxpemFuIGxhcyB0YXJlYXMgZG9tw6lzdGljYXMgZGVsIGhvZ2FyIHNlZ8O6biBzZXhvIiwNCiAgICAgICBzdWJ0aXRsZSA9IHBhc3RlMCgiTm8gaW5jbHV5ZSB0cmFiYWphZG9yYXMgZGUgc2VydmljaW8gZG9tw6lzdGljby4gIiwgYWdsb19kYXRlKSwNCiAgICAgICBjYXB0aW9uID0gZnVlbnRlLA0KICAgICAgIHggPSBOVUxMLA0KICAgICAgIHkgPSBOVUxMKSArDQogIHRoZW1lX21pbmltYWwoKSArDQogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICBheGlzLnRleHQueSA9IGVsZW1lbnRfYmxhbmsoKSkNCmBgYA0KDQpgYGB7ciwgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCiMgZ2dzYXZlKCJHcmFmaWNvcy9GaWd1cmExNC5wbmciLCBzY2FsZSA9IDMpDQoNCiMgQXF1w60gaGF5IHF1ZSBjYW1iaWFyIGVsIGRpcmVjdG9yaW8gZW4gcXVlIHNlIHZhIGEgZ3VhcmRhciBlbCBncsOhZmljby4NCiNnZ3NhdmUoIkZpZ3VyYTE0LnBuZyIsIHNjYWxlID0gMC43LCBkcGkgPSAzMDAsIHdpZHRoID0gMTAsIGhlaWdodCA9IDcsIGJnID0gIiNmZmZmZmYiKQ0KYGBgDQoNCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGluY2x1ZGU9RkFMU0V9DQpybSh0YWJsYTEzX2dyYWYsIGRmKQ0KYGBgDQoNCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGluY2x1ZGU9RkFMU0V9DQp0YWJsYTE0LjEgPC0gYmFzZV9pbmRpdmlkdWFsICU+JSANCiAgZmlsdGVyKFBQMDRCMSA9PSAxKSAlPiUgDQogIG11dGF0ZShUb3RhbCA9IHN1bShQT05ERVJBKSkgJT4lIA0KICBncm91cF9ieShTZXhvKSAlPiUgDQogIHN1bW1hcmlzZShQcm9wb3JjaW9uID0gcGVyY2VudChzdW0oUE9OREVSQSkvdW5pcXVlKFRvdGFsKSwgMSkpDQoNCnRhYmxhMTQuMiA8LSBiYXNlX2luZGl2aWR1YWwgJT4lIA0KICBmaWx0ZXIoRVNUQURPID09IDEsDQogICAgICAgICBTZXhvID09ICJNdWplcmVzIikgJT4lIA0KICBtdXRhdGUoc2VydmljaW8uZG9tZXN0aWNvID0gY2FzZV93aGVuKFBQMDRCMSA9PSAxIH4gIlPDrSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFAwNEIxICE9IDEgfiAiTm8iKSkgJT4lIA0KICBncm91cF9ieShzZXJ2aWNpby5kb21lc3RpY28pICU+JSANCiAgc3VtbWFyaXNlKGZyZWN1ZW5jaWEgPSBzdW0oUE9OREVSQSkpICU+JSANCiAgbXV0YXRlKHByb3BvcmNpb24gPSBwZXJjZW50KGZyZWN1ZW5jaWEvc3VtKGZyZWN1ZW5jaWEpLCAxKSkNCg0KaW5saW5lXzI0IDwtIHRhYmxhMTQuMSAlPiUgDQogIGZpbHRlcihTZXhvID09ICJNdWplcmVzIikgJT4lIA0KICBwdWxsKFByb3BvcmNpb24pDQoNCmlubGluZV8yNSA8LSB0YWJsYTE0LjIgJT4lIA0KICBmaWx0ZXIoc2VydmljaW8uZG9tZXN0aWNvID09ICJTw60iKSAlPiUgDQogIHB1bGwocHJvcG9yY2lvbikNCmBgYA0KDQpBIGVzdG8gc2Ugc3VtYSBlbCBoZWNobyBkZSBxdWUgcHLDoWN0aWNhbWVudGUgdG9kYXMgbGFzIHBlcnNvbmFzIHF1ZSBzZSBkZWRpY2FuIGFsIHNlcnZpY2lvIGRvbcOpc3RpY28gKGVzIGRlY2lyLCBxdWUgc8OtIHZlbmRlbiBlc3RlIHRyYWJham8gZW4gZWwgbWVyY2Fkbykgc29uIG11amVyZXMsIHVuIF9fYHIgaW5saW5lXzI0YC5fXyBBc2ltaXNtbywgZGVsIHRvdGFsIGRlIG11amVyZXMgb2N1cGFkYXMsIHVuIF9fYHIgaW5saW5lXzI1YF9fIHNlIGRlZGljYSBhIGVzdGEgb2N1cGFjacOzbiwgY29uZm9ybWFuZG8gZW50b25jZXMgdW5hIHNhbGlkYSBsYWJvcmFsIHBvcHVsYXIuIFBhcmEgbcOhcyBpbmZvcm1hY2nDs24sIHBvZMOpcyBjb25zdWx0YXIgZWwgaW5mb3JtZSBbTGFzIHRyYWJhamFkb3JhcyBkZSBzZXJ2aWNpbyBkb23DqXN0aWNvIGVuIEFyZ2VudGluYV0oaHR0cDovL2Vjb25vbWlhZmVtaW5pdGEuY29tL2luZm9ybWUtc2VydmljaW8tZG9tZXN0aWNvLykuDQoNCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGluY2x1ZGU9RkFMU0V9DQpybSh0YWJsYTE0LjEsIHRhYmxhMTQuMikNCmBgYA0KDQo8YnI+DQoNCiMjIERpc3RyaWJ1Y2nDs24gZGVsIGluZ3Jlc28NCg0KLS0tDQoNCiMjIyBEaXN0cmlidWNpw7NuIGRlbCBJbmdyZXNvDQo8YnI+PGJyPg0KDQpQb3Igw7psdGltbywgcG9kZW1vcyBhbmFsaXphciBsYXMgYnJlY2hhcyBkZSBnw6luZXJvIGVuIGxhIGRpc3RyaWJ1Y2nDs24gZGUgbG9zIGluZ3Jlc29zLiBFbiBwcmltZXIgbHVnYXIsIHNlIG9yZGVuYSBwb3IgZGVjaWxlcyBhIGxhcyBwZXJzb25hcyBzZWfDum4gc3UgaW5ncmVzbyBwZXIgY8OhcGl0YSBmYW1pbGlhciAoZWwgaW5ncmVzbyB0b3RhbCBkZWwgaG9nYXIgZGl2aWRpZG8gcG9yIGxhIGNhbnRpZGFkIGRlIHBlcnNvbmFzIHF1ZSBsbyBjb21wb25lbikuIEVzIGRlY2lyLCBzZSBmb3JtYW4gZGlleiBncnVwb3MgZGUgaW5kaXZpZHVvcywgZGUgaWd1YWwgdGFtYcOxbywgb3JkZW5hZG9zIHNlZ8O6biBlbCBuaXZlbCBkZSBpbmdyZXNvcyBxdWUgbGUgY29ycmVzcG9uZGVuIHBvciBlbCBob2dhciBhbCBxdWUgcGVydGVuZWNlLiBFbiBlbCBzaWd1aWVudGUgZ3LDoWZpY28gc2UgcHVlZGUgb2JzZXJ2YXIgbGEgcHJvcG9yY2nDs24gZGUgbXVqZXJlcyB5IGRlIHZhcm9uZXMgcXVlIGZpbmFsbWVudGUgY29tcG9uZW4gY2FkYSBkZWNpbC4gDQoNCkVuIGVzdGUgY2Fzbywgbm8gaGF5IGRpZmVyZW5jaWFzIGRlc3RhY2FibGVzIG3DoXMgYWxsw6EgZGUgdW5hIGxldmUgcHJlcG9uZGVyYW5jaWEgZGUgbGFzIG11amVyZXMgZW4gdG9kb3MgbG9zIGRlY2lsZXMsIGV4cGxpY2FibGUgcG9yIGN1ZXN0aW9uZXMgZGVtb2dyw6FmaWNhcyAoaGF5IG3DoXMgbXVqZXJlcyBxdWUgdmFyb25lcyBlbiBsYSBwb2JsYWNpw7NuIGdlbmVyYWwpLg0KIA0KX19GaWd1cmEgMTUuX18gDQpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KdGFibGExNV9ncmFmIDwtYmFzZV9pbmRpdmlkdWFsICU+JSANCiAgc2VsZWN0KERFQ0NGUiwgSVBDRiwgUE9ORElILCBTZXhvKSAlPiUgDQogIG11dGF0ZShERUNDRlIgPSBhcy5udW1lcmljKERFQ0NGUikpICU+JSANCiAgZmlsdGVyKERFQ0NGUiAlaW4lIGMoMToxMCkpICU+JSANCiAgZ3JvdXBfYnkoREVDQ0ZSKSAlPiUgDQogIG11dGF0ZShQb2IgPSBzdW0oUE9ORElIKSkgJT4lIA0KICBncm91cF9ieShERUNDRlIsIFNleG8pICU+JQ0KICBzdW1tYXJpc2UoUHJvcCA9IHN1bShQT05ESUgpL3VuaXF1ZShQb2IpKQ0KDQpnZ3Bsb3QodGFibGExNV9ncmFmLCBhZXMoeCA9IGFzLm51bWVyaWMoREVDQ0ZSKSwgUHJvcCwgZmlsbCA9IFNleG8sIGdyb3VwID0gU2V4bywgbGFiZWwgPSBwZXJjZW50KFByb3AsIDApKSkgKw0KICBnZW9tX2NvbChwb3NpdGlvbiA9ICJkb2RnZSIpICsNCiAgZ2VvbV90ZXh0KHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAuOSksIHZqdXN0ID0tLjEsIHNpemUgPSAyLjUpICsNCiAgbGFicyh5ID0gJycpICsNCiAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzID0gY29sb3JlcykgKw0KICBzY2FsZV94X2NvbnRpbnVvdXMoIkRlY2lsIGRlbCBpbmdyZXNvIHBlciBjw6FwaXRhIGZhbWlsaWFyIiwgYnJlYWtzID0gYygxOjEwKSkgKw0KICBsYWJzKHRpdGxlID0gIkNvbXBvc2ljacOzbiBzZWfDum4gc2V4byBkZSBsb3MgZGVjaWxlcyBkZWwgaW5ncmVzbyBwZXIgY8OhcGl0YSBmYW1pbGlhci4iLA0KICAgICAgIHN1YnRpdGxlID0gcGFzdGUwKCJUb3RhbCBkZSBsYSBwb2JsYWNpw7NuLiAiLCBhZ2xvX2RhdGUpLA0KICAgICAgIGNhcHRpb24gPSBmdWVudGUpICsNCiAgdGhlbWVfbWluaW1hbCgpICsNCiAgdGhlbWUoYXhpcy50ZXh0LnkgPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgIGF4aXMudGlja3MueSA9IGVsZW1lbnRfYmxhbmsoKSkNCmBgYA0KICAgICAgICAgICAgIA0KYGBge3IsIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQojIGdnc2F2ZSgiR3JhZmljb3MvRmlndXJhMTUucG5nIiwgc2NhbGUgPSAxKQ0KDQojIEFxdcOtIGhheSBxdWUgY2FtYmlhciBlbCBkaXJlY3RvcmlvIGVuIHF1ZSBzZSB2YSBhIGd1YXJkYXIgZWwgZ3LDoWZpY28uDQojZ2dzYXZlKCJGaWd1cmExNS5wbmciLCBzY2FsZSA9IDAuNywgZHBpID0gMzAwLCB3aWR0aCA9IDEwLCBoZWlnaHQgPSA3LCBiZyA9ICIjZmZmZmZmIikNCmBgYA0KDQpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBpbmNsdWRlPUZBTFNFfQ0Kcm0odGFibGExNV9ncmFmKQ0KYGBgDQoNCkVuIHNlZ3VuZG8gbHVnYXIsIHNlIHNlcGFyYSBhIGxhIHBvYmxhY2nDs24gZW4gZGVjaWxlcyBzZWfDum4gZWwgaW5ncmVzbyB0b3RhbCBpbmRpdmlkdWFsLiBFcyBkZWNpciwgc2Ugb3JkZW5hIGVuIGJhc2UgYWwgbml2ZWwgZGUgaW5ncmVzb3MgcXVlIHBlcmNpYmUgY2FkYSBpbmRpdmlkdW8sIG5vIGVsIGhvZ2FyIChjYXNvIGFudGVyaW9yKS4gRW4gZXN0ZSBjYXNvIHB1ZWRlIHZlcnNlIHF1ZSBsb3MgZGVjaWxlcyBtw6FzIGJham9zIGRlIGluZ3Jlc29zIGVzdMOhbiBjb21wdWVzdG9zIG1heW9yaXRhcmlhbWVudGUgcG9yIG11amVyZXMgeSwgZW4gcGFyYWxlbG8sIGxvcyBkZWNpbGVzIGRlIG1heW9yZXMgaW5ncmVzb3Mgc2UgY29tcG9uZW4gbWF5b3JpdGFyaWFtZW50ZSBwb3IgdmFyb25lcy4gDQpEZWNpbW9zIGVudG9uY2VzIHF1ZSBsb3MgZXN0cmF0b3MgZGUgbWVub3JlcyBpbmdyZXNvcyBlc3TDoW4gZmVtaW5pemFkb3MsIGFsIHRpZW1wbyBxdWUgbG9zIGVzdHJhdG9zIGRlIG1heW9yZXMgaW5ncmVzb3Mgc2UgZW5jdWVudHJhbiBtYXNjdWxpbml6YWRvcy4gwr9DdcOhbCBlcyBsYSBkaWZlcmVuY2lhIHJlc3BlY3RvIGRlbCBncsOhZmljbyBhbnRlcmlvcj8NCg0KX19GaWd1cmEgMTYuX18gDQpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KdGFibGExNl9ncmFmIDwtYmFzZV9pbmRpdmlkdWFsICU+JSANCiAgc2VsZWN0KERFQ0lORFIsIFA0N1QsIFBPTkRJSSwgU2V4bykgJT4lIA0KICBtdXRhdGUoREVDSU5EUiA9IGFzLm51bWVyaWMoREVDSU5EUikpICU+JSANCiAgZmlsdGVyKERFQ0lORFIgJWluJSBjKDE6MTApKSAlPiUgDQogIGdyb3VwX2J5KERFQ0lORFIpICU+JSANCiAgbXV0YXRlKFBvYiA9IHN1bShQT05ESUkpKSAlPiUgDQogIGdyb3VwX2J5KERFQ0lORFIsIFNleG8pICU+JQ0KICBzdW1tYXJpc2UoUHJvcCA9IHN1bShQT05ESUkpL3VuaXF1ZShQb2IpKQ0KDQpnZ3Bsb3QodGFibGExNl9ncmFmLCBhZXMoeCA9IGFzLm51bWVyaWMoREVDSU5EUiksIFByb3AsIGZpbGwgPSBTZXhvLCBncm91cD0gU2V4bywgbGFiZWwgPSBwZXJjZW50KFByb3AsIDApKSkgKw0KICBnZW9tX2NvbChwb3NpdGlvbiA9ICJkb2RnZSIpKw0KICBnZW9tX3RleHQocG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IC45KSwgdmp1c3QgPS0uMSwgc2l6ZSA9IDIuNSkrDQogIHRoZW1lX21pbmltYWwoKSsNCiAgdGhlbWUoYXhpcy50ZXh0LnkgPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgIGF4aXMudGlja3MueSA9IGVsZW1lbnRfYmxhbmsoKSkgKw0KICBsYWJzKHkgPSAnJykgKw0KICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBjb2xvcmVzKSArDQogIHNjYWxlX3hfY29udGludW91cygiRGVjaWwgZGUgaW5ncmVzbyB0b3RhbCBpbmRpdmlkdWFsIiwgYnJlYWtzID1jKDE6MTApKSArDQogIGxhYnModGl0bGUgPSAiQ29tcG9zaWNpw7NuIHNlZ8O6biBzZXhvIGRlIGxvcyBkZWNpbGVzIGRlIGluZ3Jlc29zIHRvdGFsZXMgaW5kaXZpZHVhbGVzIiwNCiAgICAgICBzdWJ0aXRsZSA9IHBhc3RlMCgiUG9ibGFjacOzbiBwZXJjZXB0b3JhIGRlIGluZ3Jlc29zLiAiLCBhZ2xvX2RhdGUpLA0KICAgICAgIGNhcHRpb24gPSBmdWVudGUpDQpgYGANCg0KYGBge3IsIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQojIGdnc2F2ZSgiR3JhZmljb3MvRmlndXJhMTYucG5nIiwgc2NhbGUgPSAxKQ0KDQojIEFxdcOtIGhheSBxdWUgY2FtYmlhciBlbCBkaXJlY3RvcmlvIGVuIHF1ZSBzZSB2YSBhIGd1YXJkYXIgZWwgZ3LDoWZpY28uDQojZ2dzYXZlKCJGaWd1cmExNi5wbmciLCBzY2FsZSA9IDAuNywgZHBpID0gMzAwLCB3aWR0aCA9IDEwLCBoZWlnaHQgPSA3LCBiZyA9ICIjZmZmZmZmIikNCmBgYA0KDQpFbiBsYSBmaWd1cmEgMTUsIGxhcyB1bmlkYWRlcyBkZSBhbsOhbGlzaXMgc29uIGxvcyBob2dhcmVzLCBzw7NsbyBxdWUgbHVlZ28gc2UgZGlzdHJpYnV5ZXJvbiBkZSBmb3JtYSAicGFyZWphIiBzdXMgaW5ncmVzb3MgZW50cmUgbG9zIG1pZW1icm9zLiBEZSBlc3RhIGZvcm1hLCBsYSBjb21wb3NpY2nDs24gcG9yIHNleG8gZGUgbG9zIGVzdHJhdG9zIGRlIG1lbm9yZXMgaW5ncmVzb3Mgbm8gdGllbmUgbWF5b3JlcyBkaWZlcmVuY2lhcyByZXNwZWN0byBhIGxhIGRlIGxvcyBlc3RyYXRvcyBkZSBtYXlvcmVzIGluZ3Jlc29zLiBFbiBjYW1iaW8sIGVuIGxhIGZpZ3VyYSAxNiB2ZW1vcyBsbyBxdWUgcGFzYSBhIG5pdmVsIGluZGl2aWR1YWwsIGxvIGN1YWwgZXMgdW5hIGZvcm1hIGRlICJhYnJpciIgaGFjaWEgZWwgaW50ZXJpb3IgZGUgbG9zIGhvZ2FyZXMuIExhIHVuaWRhZCBmYW1pbGlhciBwYXJlY2UgcmVzb2x2ZXIgbGEgZGlmZXJlbmNpYSBlbnRyZSBzZXhvcywgcGVybyBkZW50cm8gZGUgbGEgc2UgbWFudGllbmUgbGEgZGlmZXJlbmNpYTogbG9zIHZhcm9uZXMgdGllbmVuIG3DoXMgcHJvYmFiaWxpZGFkZXMgZGUgZ2FuYXIgbcOhcyBxdWUgbGFzIG11amVyZXMgZGVsIG1pc21vIGhvZ2FyLiBMYSBkaXN0cmlidWNpw7NuIGRlIGxvcyBpbmdyZXNvcyBkZSBsYXMgbXVqZXJlcywgc2VzZ2FkYSBoYWNpYSBsb3MgbWVub3JlcyBpbmdyZXNvcywgc2UgY29tcGVuc2EgZW4gbGEgZXN0cnVjdHVyYSBmYW1pbGlhciBjb24gbGEgZGlzdHJpYnVjacOzbiBkZSBsb3MgaW5ncmVzb3MgZGUgbG9zIHZhcm9uZXMsIHNlc2dhZGEgaGFjaWEgbG9zIG1heW9yZXMgaW5ncmVzb3MuDQpFbnRvbmNlcywgX2xhIGZhbWlsaWEgY29tbyB1bmlkYWQgZGUgcmVwcm9kdWNjacOzbiBlc2NvbmRlIHkgcmVzdWVsdmUgZGViYWpvIGRlIGxhIHN1cGVyZmljaWUgKGxhIGRpc3RyaWJ1Y2nDs24gYXBhcmVudGVtZW50ZSBlcXVpdGF0aXZhIHNlZ8O6biBsb3MgaW5ncmVzb3MgcGVyIGPDoXBpdGEpIGxhIGluZXF1aXRhdGl2YSBkaXN0cmlidWNpw7NuIGRlIGxhcyB0YXJlYXMgZGUgcmVwcm9kdWNjacOzbiB5IGxhcyBkaWZpY3VsdGFkZXMgYXNvY2lhZGFzIHF1ZSB0aWVuZW4gbGFzIG11amVyZXMgcGFyYSBwYXJ0aWNpcGFyIGRlIGZvcm1hIHBsZW5hIGVuIGVsIG1lcmNhZG8gZGUgdHJhYmFqbyB5IHBvciB0YW50byBwZXJjaWJpciBpbmdyZXNvcyBzZW1lamFudGVzIGEgbG9zIGRlIGxvcyB2YXJvbmVzLl8gDQogICAgICANCg0KDQoNCg==