Todos los años alrededor de noviembre, miles de estudiantes del nivel de educación primaria en la provincia de Mendoza postulan a una vacante para ingresar a algunas de las 5 escuelas secundarias que posee la Universidad Nacional de Cuyo (UNCuyo) en el Gran Mendoza. Estos colegios son Colegio Universitario Central “José de San Martín” (CUC), Departamento de Aplicación Docente (DAD), Liceo Agrícola y Enológico “Domingo F. Sarmiento” (LAE), Escuela del Magisterio (MAG) y Escuela de Comercio “Martín Zapata” (MZ). A su vez, cada colegio ofrece diferentes orientaciones como en Economía, Ciencias Sociales, Ciencias Naturales, Informática, entre otras. Los 5 colegios ofrecen 8 orientaciones en total. Cabe mencionar que el LAE hace su selección de ingreso antes y por separado del resto de los 4 colegios restantes. De todas formas, se ha decidido incluirlo en este análisis.
Los ingresantes a las escuelas de nivel secundario de la UNCuyo se dividen en dos grupos bien definidos.
Por un lado están los ingresantes por orden de mérito que compiten con un promedio que se forma al tomar las notas de cuarto a sexto grado de Lengua, Matemáticas, Ciencias Sociales, Ciencias Naturales, Educación Física y Educación Artística. Para el ingreso de este año, 2022, solo se tomaron las notas de cuarto y quinto grados, ya que sexto grado se desarrolló durante el año 2020, en plena pandemia, y se decidió no considerar las notas de ese año por ser un año atípico. Además, los postulantes deben determinar el orden de preferencia de las 13 ofertas de escuela y orientación, de mayor a menor (ver tabla 3). Así, mientras mayor sea su promedio, más probable será obtener un banco en el colegio y orientación deseados, según el orden asignado.
Por otro lado, los egresados de la escuela de nivel primario Carmen Vera Arena (CVA), la cual es la única escuela de nivel primario administrada por la UNCuyo, pueden ingresar a los colegios de nivel secundario de la UNCuyo sin postular con un promedio de notas. Por el solo hecho de ser egresados del CVA, tienen asegurado un banco en alguno de los colegios de nivel secundario de la UNCuyo. Se les asignan 5 plazas como máximo de un total de 30 por división. En otras palabras, el 16% de las vacantes son ofrecidas en primer término a los alumnos de séptimo grado de la CVA. Las vacantes restantes serán tomadas por los ingresantes por orden de mérito.
El objetivo de este informe es el de analizar cómo se distribuyen los promedios de los ingresantes por orden de mérito, para de esta manera ver las notas máximas y notas de corte por orientación, qué colegios y orientaciones son los más competitivos y cuáles menos. Adicionalmente, se revelan las preferencias de ingreso de los egresados de la escuela Carmen Vera Arena.
Todo el código de programación utilizado en este informe puede ser bajado del siguiente link.
Análisis de los datos
Total de ingresantes por orden de mérito
La UNCuyo ofreció un total de 1.020 vacantes para los colegios secundarios del Gran Mendoza.
De un total de 1.020 vacantes, se otorgaron 971 plazas a los ingresantes por orden de mérito. Las restantes 49 vacantes fueron previamente ocupadas por los alumnos del Carmen Vera Arena (CVA).
Ingresantes por escuela
En la tabla 1 se muestra cómo se distribuyen por colegio los ingresantes por orden de mérito y los ingresantes del CVA. Además se muestra el porcentaje de ingresos del CVA, según el total de ingresantes de esta escuela (49). La tabla se ordena por la cantidad de ingresos del CVA, de mayor a menor.
Tabla 1: Distribución de los ingresantes por escuela.
| Escuela |
Vacantes |
Ingresantes |
CVA |
CVA_% |
| CUC |
180 |
160 |
20 |
40.82 |
| MZ |
240 |
229 |
11 |
22.45 |
| DAD |
360 |
350 |
10 |
20.41 |
| MAG |
150 |
145 |
5 |
10.20 |
| LAE |
90 |
87 |
3 |
6.12 |
Se observa que el 40% de los egresados de CVA ha elegido ingresar al CUC. Le siguen MZ con un 22% y DAD con un 20%. Esto es un adelanto de las preferencias de los ingresantes por órden de mérito que se observarán en las siguientes secciones.
Ingresantes por orientación
En la tabla 2 se unifican las 8 orientaciones que ofrecen los 5 colegios y se expone cómo se distribuyen por orientación los ingresantes por orden de mérito y los ingresantes del CVA. Además se muestra el porcentaje de ingresantes del CVA, según el total de ingresantes de esta escuela (49). La tabla se ordena por la cantidad de ingresos del CVA, de mayor a menor.
Tabla 2: Distribución de los ingresantes por orientación.
| Orientacion |
Vacantes |
Ingresantes |
CVA |
CVA_% |
| Ciencias Naturales |
210 |
195 |
15 |
30.61 |
| Arte |
60 |
50 |
10 |
20.41 |
| Informática |
60 |
51 |
9 |
18.37 |
| Ciencias Sociales |
330 |
326 |
4 |
8.16 |
| Lenguas |
120 |
116 |
4 |
8.16 |
| Tecnología Alimentaria |
90 |
87 |
3 |
6.12 |
| Comunicación |
30 |
28 |
2 |
4.08 |
| Economía |
120 |
118 |
2 |
4.08 |
Ingresantes por escuela y orientación
En la tabla 3 se muestran cómo se distribuyen por escuela y por orientación los ingresantes por orden de mérito y los ingresantes del CVA. Además, se muestra el porcentaje de ingresos del CVA y el porcentaje de vacantes efectivas, esto es, las vacantes que no fueron tomadas por los alumnos del CVA. La tabla se ordena por el porcentaje de vacantes efectivas, de menor a mayor.
Tabla 3: Distribución de los ingresantes por escuela y orientación.
| Escuela |
Orientacion |
Vacantes |
Ingresantes |
CVA |
CVA_% |
Vacantes_ef_% |
| CUC |
Arte |
60 |
50 |
10 |
20.41 |
83.3 |
| MZ |
Informática |
60 |
51 |
9 |
18.37 |
85.0 |
| CUC |
Ciencias Naturales |
60 |
53 |
7 |
14.29 |
88.3 |
| MAG |
Ciencias Naturales |
30 |
27 |
3 |
6.12 |
90.0 |
| MAG |
Comunicación |
30 |
28 |
2 |
4.08 |
93.3 |
| CUC |
Ciencias Sociales |
60 |
57 |
3 |
6.12 |
95.0 |
| DAD |
Ciencias Naturales |
120 |
115 |
5 |
10.20 |
95.8 |
| DAD |
Lenguas |
120 |
116 |
4 |
8.16 |
96.7 |
| LAE |
Tecnología Alimentaria |
90 |
87 |
3 |
6.12 |
96.7 |
| MZ |
Economía |
120 |
118 |
2 |
4.08 |
98.3 |
| DAD |
Ciencias Sociales |
120 |
119 |
1 |
2.04 |
99.2 |
| MAG |
Ciencias Sociales |
90 |
90 |
0 |
0.00 |
100.0 |
| MZ |
Ciencias Sociales |
60 |
60 |
0 |
0.00 |
100.0 |
Se observa que los alumnos del CVA prefieren un 20% Artes del CUC, un 18% Informática del MZ y un 14% Ciencias Naturales del CUC. Adicionalmente, en el caso de Arte, se ve que se han tomado el máximo de vacantes disponibles para este grupo de ingresantes, 5 vacantes por división, es decir, 10 vacantes en total.
Debido a que estas 3 orientaciones solo tienen 60 vacantes cada una, esto produce que se ofrezcan relativamente menos plazas para los ingresantes por orden de mérito en dichas orientaciones. Esto se observa en los porcentajes de vacantes efectivas con 83%, 85% y 88%, respectivamente para las 3 orientaciones arriba mencionadas. Al final de la tabla se observa que solo 1 alumno del CVA ha elegido ingresar a Ciencias Sociales del DAD. El resto de las Ciencias Sociales de MAG y MZ no han recibido alumnos del CVA, por lo que las vacantes efectivas de estas dos últimas orientaciones son del 100%.
Análisis estadístico por escuela y orientación
En esta sección se expone el análisis estadístico de los promedios de los ingresantes por orden de mérito (sin CVA), lo que deriva en obtener los mejores promedios y promedios de corte por escuela y orientación. La siguiente tabla muestra por escuela y orientación: el promedio más alto (Maximo), el promedio de corte o mínimo promedio (Corte) y la mediana de los promedios (Mediana), todos ordenados por el promedio de corte, de mayor a menor.
Tabla 4: Análisis estadístico por escuela y orientación.
| Escuela |
Orientacion |
Maximo |
Corte |
Mediana |
| CUC |
Ciencias Naturales |
10 |
9.957 |
10.000 |
| MZ |
Informática |
10 |
9.944 |
9.985 |
| CUC |
Arte |
10 |
9.929 |
9.985 |
| CUC |
Ciencias Sociales |
10 |
9.929 |
9.985 |
| MAG |
Ciencias Naturales |
10 |
9.915 |
9.957 |
| MZ |
Economía |
10 |
9.915 |
9.957 |
| MZ |
Ciencias Sociales |
10 |
9.900 |
9.943 |
| MAG |
Ciencias Sociales |
10 |
9.859 |
9.887 |
| MAG |
Comunicación |
10 |
9.859 |
9.900 |
| DAD |
Ciencias Sociales |
10 |
9.818 |
9.860 |
| LAE |
Tecnología Alimentaria |
10 |
9.818 |
9.930 |
| DAD |
Ciencias Naturales |
10 |
9.817 |
9.874 |
| DAD |
Lenguas |
10 |
9.789 |
9.804 |
Se advierte que las mayores notas de cortes están en Ciencias Naturales del CUC, Informática del MZ y Artes y Ciencias Sociales, ambas del CUC. Esto quiere decir que los ingresantes con mejores promedios han postulado a algunas de estas 4 combinaciones. En el otro extremo, Lenguas del DAD presenta la nota de corte más baja. Cabe destacar que la mediana de Ciencias Naturales del CUC es de 10, lo que indica que al menos la mitad de los ingresantes en esta orientación tiene un promedio igual a 10.
¿A qué escuelas y orientaciones van los 10?
Se analiza a continuación a qué escuela y orientación postulan aquellos ingresantes que tienen un promedio igual a 10, es decir, los ingresantes con los promedios más altos. Los datos se ordenan por el porcentaje de dieces, de mayor a menor.
Tabla 5: Distribución por escuela de los promedios iguales a 10.
| Escuela |
Ingresantes |
Dieces |
Dieces_% |
| CUC |
160 |
76 |
47.50 |
| MZ |
229 |
57 |
24.89 |
| LAE |
87 |
14 |
16.09 |
| MAG |
145 |
14 |
9.65 |
| DAD |
350 |
22 |
6.29 |
Tabla 6: Distribución por escuela y orientación de los promedios iguales a 10.
| Escuela |
Orientacion |
Ingresantes |
Dieces |
Dieces_% |
| CUC |
Ciencias Naturales |
53 |
29 |
54.72 |
| CUC |
Arte |
50 |
23 |
46.00 |
| CUC |
Ciencias Sociales |
57 |
24 |
42.10 |
| MZ |
Informática |
51 |
20 |
39.22 |
| MAG |
Ciencias Naturales |
27 |
6 |
22.22 |
| MZ |
Economía |
118 |
26 |
22.03 |
| MZ |
Ciencias Sociales |
60 |
11 |
18.33 |
| LAE |
Tecnología Alimentaria |
87 |
14 |
16.09 |
| MAG |
Comunicación |
28 |
3 |
10.71 |
| DAD |
Ciencias Naturales |
115 |
9 |
7.83 |
| DAD |
Ciencias Sociales |
119 |
7 |
5.88 |
| MAG |
Ciencias Sociales |
90 |
5 |
5.56 |
| DAD |
Lenguas |
116 |
6 |
5.17 |
La tabla 5 muestra el total de promedios igual a 10 que recibe cada escuela. Se observa que el CUC es la escuela que más dieces recibe con 76, un 47% del total de vacantes. Le sigue el MZ con 57, con casi 25% del total del total de vacantes. Más lejos se encuentran LAE, MAG Y DAD con 16%, 9% y 6%, respectivamente. Cabe destacar que de un total de 971 ingresantes por orden de mérito, 183 poseen un promedio igual a 10, esto es, casi un 19% del total de ingresantes poseen los promedios más altos posibles.
En la tabla 6 claramente se ve que el CUC es el colegio que más demanda tiene por los ingresantes con promedio 10, con 54%, 46% y 42% de dieces para Ciencias Naturales, Arte y Ciencias Sociales, respectivamente, según las vacantes ofrecidas por cada orientación. Le sigue Informática del MZ con 39%. Se confirma que, con un 54%, al menos la mitad de los ingresantes a Ciencias Naturales del CUC tienen promedio igual a 10. Al final de la tabla aparece Lenguas del DAD, lo cual es esperable ya que es la orientación que tiene menor nota de corte (ver tabla 4).
¿Cómo se distribuyen los promedios de los ingresantes por orden de mérito?
En las siguientes figuras se dividen los promedios de los ingresantes por orden de mérito en 5 rangos, llamados R1, R2, R3, etc. La tabla 7 muestra los rangos de promedios (Rangos), las etiquetas correspondientes (Etiqueta) y la cantidad de ingresantes por rango (Ingresantes).
Se muestra cómo se distribuyen estos promedios por colegio y por orientación en un gráfico aluvional. El eje y de las figuras representa la cantidad de ingresantes por orden de mérito. Las alturas de las cajas para los rangos R1, R2, R3, etc., representan la proporción de ingresantes que se encuentran en cada una de estas categorías.
Tabla 7: Rangos de promedios.
| Etiqueta |
Rangos |
Ingresantes |
| R1 |
(9.999,10] |
183 |
| R2 |
(9.95,9.999] |
204 |
| R3 |
(9.9,9.95] |
214 |
| R4 |
(9.85,9.9] |
171 |
| R5 |
(9.7,9.85] |
199 |
La figura 1 expone que el CUC solo recibe promedios de los rangos R1, R2 y R3. Se verifica que Ciencias Naturales solo admite los mejores promedios, los que están en los rangos R1 y R2.
La figura 2 muestra que el MZ recibe promedios de los rangos R1, R2, R3 y una pequeña parte de R4. Informática está compuesta mayoritariamente por promedios de los rangos R1 y R2. Economía capta promedios de los rangos R1, R2 y R3. Finalmente, Ciencias Sociales recibe promedios de R1, R2, R3 y la pequeña parte de R4.
Según la figura 3, como en el caso del CUC, Ciencias Naturales del MAG también recibe los mejores promedios. Le siguen las orientaciones de Comunicación y Ciencias Sociales.
En la figura 4 se ve que la única orientación que ofrece el LAE recibe promedios de los 5 rangos.

La figura 5 expone que alrededor de la mitad de los ingresantes al DAD están en el rango R5. Y es Lenguas la que recibe la mayor parte de este rango.
Conclusiones
En este reporte se analizan los datos provistos por la UNCuyo para el ingreso de alumnos de nivel primario a las escuelas de nivel secundario dependientes de la UNCuyo en el año 2022. Luego de todo lo expuesto en este análisis, se llegan a las siguientes conclusiones.
Una primera conclusión que se puede sacar es que CUC es el rey. Es el colegio con mayor demanda por parte de los alumnos del CVA. Asimismo, es la escuela que alberga más ingresantes por orden de mérito con promedio igual a 10 y posee las notas de corte más altas para sus 3 orientaciones. En consecuencia, es más difícil ingresar al CUC que al resto de los 4 colegios secundarios. Si se ordenan los colegios por notas de corte de mayor a menor, el colegio MZ le sigue de cerca al CUC; luego vienen MAG, LAE y finalmente el DAD.
Por el lado de las orientaciones, se observa una gran demanda en Artes e Informática. Ambas orientaciones ofrecen 60 plazas cada una, pero los alumnos del CVA tomaron 10 y 9 plazas respectivamente, siendo estas orientaciones las más demandadas por los egresados del CVA, luego de Ciencias Naturales con 15 plazas y pero con 210 vacantes (ver tabla 2). En consecuencia, las vacantes efectivas fueron de 50 para Arte y de 51 para Informática. Esta alta demanda también se observa en los ingresantes por orden de mérito ya que Informática solo recibe ingresantes de los grupos R1, R2 y una pequeña porción de R3 (ver figura 2), y Artes solo recibe de los grupos R1, R2 y R3 (ver figura 1). El resto de las orientaciones reciben ingresantes de los 5 grupos de promedios. Si bien Ciencias Naturales del CUC es la escuela y orientación con mayor nota de corte y mayor cantidad de ingresantes con promedio igual a 10, esta orientación también se encuentra en las escuelas MAG y DAD, lo que produce que globalmente sea una orientación relativamente accesible para su ingreso.
En el otro extremo se encuentra Lenguas. Esta orientación ofrece 120 vacantes y solo 4 alumnos del CVA la han elegido. Esta orientación recibe su gran mayoría de ingresantes por orden de mérito del grupo R5, lo que produce que sea la orientación con la menor nota de corte.
A la luz de estos resultados, es evidente que la demanda por ingresar a Artes e Informática es alta, tanto de los ingresantes por orden de mérito como por los egresados del CVA. Una solución para mitigar esta situación es la crear nuevas divisiones para estas 2 orientaciones, tal vez en diferentes colegios si no están dadas las condiciones edilicias en MZ o CUC. De esta manera se podría satisfacer de mejor manera la actual demanda que tienen estas 2 orientaciones. Por otro lado, se podría reevaluar si Lenguas realmente necesita ofrecer 120 vacantes.
En tercer lugar, cabe dedicar algunas palabras a los ingresantes por orden de mérito con promedio igual a 10. De un total de 971 ingresantes por orden de mérito, 183 tienen el más alto promedio. Esto representa un 19% de los ingresantes por orden de mérito. Esto se traduce en que el 19% de los ingresantes solo obtuvieron notas iguales a 10 en cuarto y quinto grados. Si bien esta cifra parece bastante alta, sería conveniente conocer el total de postulantes, los que ingresaron y los que no, para llegar a una respuesta concluyente. Por otra parte, como este año solo se tomaron las notas de cuarto y quinto grados, esto pudo producir un aumento notable de ingresantes por orden de mérito con promedio igual a 10. Por ello, sería conveniente verificar si este alto porcentaje también se observa en años anteriores.
Finalmente, queremos compartir que durante la elaboración de este informe técnico, al tratar este tema con diferentes personas, siempre surgió la pregunta de que si el sistema de ingreso basado en postular con un promedio de notas del nivel primario es un sistema justo, o al menos más justo que el sistema anterior, el cual estaba basado en tomar un examen de ingreso. Queremos destacar esto porque, al parecer, es una pregunta que se hace mucha gente. El sistema actual de ingreso se basa en la hipótesis de que todas las escuelas del nivel inicial de la provincia de Mendoza tienen el mismo nivel de exigencia. En principio, esta parece una hipótesis muy fuerte. Está claro que esta hipótesis no puede ser ni aceptada ni rechazada con los datos que se usaron durante este trabajo. Para ello, a nuestro entender, deberíamos tener datos del desempeño de los ingresantes durante su primer año de secundaria. De esta forma se podría saber si alumnos que ingresaron con un promedio alto luego tuvieron un desempeño satisfactorio según los estándares de las escuelas de nivel secundario de la UNCuyo, o no. Y en consecuencia, poder saber si el sistema de ingreso por promedio de notas garantiza que ingresen los mejores alumnos.
Agradecimiento
Los autores agradecen los comentarios y correcciones de la Prof. María Elena Armendariz, Psicopedagoga y Profesora en Ciencias Psicopedagógicas, los cuales han ayudado a enriquecer este reporte.
LS0tCnRpdGxlOiBBbsOhbGlzaXMgZGUgZGF0b3MgZGUgbG9zIGluZ3Jlc2FudGVzIGEgbG9zIGNvbGVnaW9zIGRlIGxhIFVuaXZlcnNpZGFkIE5hY2lvbmFsIGRlIEN1eW8gcGFyYSBlbCBhw7FvIDIwMjIuCmF1dGhvcjogIlJvZHJpZ28gR29uemFsZXogeSBDYXJsb3MgQS4gQ2F0YW5pYSIKZGF0ZTogImByIGZvcm1hdCggU3lzLnRpbWUoKSwgJyVkLyVtLyVZJylgIgpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sKLS0tCgo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoKYm9keXsKZm9udC1zaXplOiAxNHB0Owp9CgovKiBIZWFkZXJzICovcwpoMXsKZm9udC1zaXplOiAyNHB0Owp9Cmgyewpmb250LXNpemU6IDIycHQ7Cn0KaDN7CmZvbnQtc2l6ZTogMjBwdDsKfQpoNHsKZm9udC1zaXplOiAxOHB0Owp9Cgo8L3N0eWxlPgoKVG9kb3MgbG9zIGHDsW9zIGFscmVkZWRvciBkZSBub3ZpZW1icmUsIG1pbGVzIGRlIGVzdHVkaWFudGVzIGRlbCBuaXZlbCBkZSBlZHVjYWNpw7NuIHByaW1hcmlhIGVuIGxhIHByb3ZpbmNpYSBkZSBNZW5kb3phIHBvc3R1bGFuIGEgdW5hIHZhY2FudGUgcGFyYSBpbmdyZXNhciBhIGFsZ3VuYXMgZGUgbGFzIDUgZXNjdWVsYXMgc2VjdW5kYXJpYXMgcXVlIHBvc2VlIGxhIFtVbml2ZXJzaWRhZCBOYWNpb25hbCBkZSBDdXlvXShodHRwczovL3d3dy51bmN1eW8uZWR1LmFyL3NlY3VuZGFyaW9zKSAoVU5DdXlvKSBlbiBlbCBHcmFuIE1lbmRvemEuIEVzdG9zIGNvbGVnaW9zIHNvbiBDb2xlZ2lvIFVuaXZlcnNpdGFyaW8gQ2VudHJhbCAiSm9zw6kgZGUgU2FuIE1hcnTDrW4iIChDVUMpLCBEZXBhcnRhbWVudG8gZGUgQXBsaWNhY2nDs24gRG9jZW50ZSAoREFEKSwgTGljZW8gQWdyw61jb2xhIHkgRW5vbMOzZ2ljbyAiRG9taW5nbyBGLiBTYXJtaWVudG8iIChMQUUpLCBFc2N1ZWxhIGRlbCBNYWdpc3RlcmlvIChNQUcpIHkgRXNjdWVsYSBkZSBDb21lcmNpbyAiTWFydMOtbiBaYXBhdGEiIChNWikuIEEgc3UgdmV6LCBjYWRhIGNvbGVnaW8gb2ZyZWNlIGRpZmVyZW50ZXMgb3JpZW50YWNpb25lcyBjb21vIGVuIEVjb25vbcOtYSwgQ2llbmNpYXMgU29jaWFsZXMsIENpZW5jaWFzIE5hdHVyYWxlcywgSW5mb3Jtw6F0aWNhLCBlbnRyZSBvdHJhcy4gTG9zIDUgY29sZWdpb3Mgb2ZyZWNlbiA4IG9yaWVudGFjaW9uZXMgZW4gdG90YWwuIENhYmUgbWVuY2lvbmFyIHF1ZSBlbCBMQUUgaGFjZSBzdSBzZWxlY2Npw7NuIGRlIGluZ3Jlc28gYW50ZXMgeSBwb3Igc2VwYXJhZG8gZGVsIHJlc3RvIGRlIGxvcyA0IGNvbGVnaW9zIHJlc3RhbnRlcy4gRGUgdG9kYXMgZm9ybWFzLCBzZSBoYSBkZWNpZGlkbyBpbmNsdWlybG8gZW4gZXN0ZSBhbsOhbGlzaXMuCgpMb3MgaW5ncmVzYW50ZXMgYSBsYXMgZXNjdWVsYXMgZGUgbml2ZWwgc2VjdW5kYXJpbyBkZSBsYSBVTkN1eW8gc2UgZGl2aWRlbiBlbiBkb3MgZ3J1cG9zIGJpZW4gZGVmaW5pZG9zLgoKUG9yIHVuIGxhZG8gZXN0w6FuIGxvcyBpbmdyZXNhbnRlcyBwb3Igb3JkZW4gZGUgbcOpcml0byBxdWUgY29tcGl0ZW4gY29uIHVuIHByb21lZGlvIHF1ZSBzZSBmb3JtYSBhbCB0b21hciBsYXMgbm90YXMgZGUgY3VhcnRvIGEgc2V4dG8gZ3JhZG8gZGUgTGVuZ3VhLCBNYXRlbcOhdGljYXMsIENpZW5jaWFzIFNvY2lhbGVzLCBDaWVuY2lhcyBOYXR1cmFsZXMsIEVkdWNhY2nDs24gRsOtc2ljYSB5IEVkdWNhY2nDs24gQXJ0w61zdGljYS4gUGFyYSBlbCBpbmdyZXNvIGRlIGVzdGUgYcOxbywgMjAyMiwgc29sbyBzZSB0b21hcm9uIGxhcyBub3RhcyBkZSBjdWFydG8geSBxdWludG8gZ3JhZG9zLCB5YSBxdWUgc2V4dG8gZ3JhZG8gc2UgZGVzYXJyb2xsw7MgZHVyYW50ZSBlbCBhw7FvIDIwMjAsIGVuIHBsZW5hIHBhbmRlbWlhLCB5IHNlIGRlY2lkacOzIG5vIGNvbnNpZGVyYXIgbGFzIG5vdGFzIGRlIGVzZSBhw7FvIHBvciBzZXIgdW4gYcOxbyBhdMOtcGljby4gQWRlbcOhcywgbG9zIHBvc3R1bGFudGVzIGRlYmVuIGRldGVybWluYXIgZWwgb3JkZW4gZGUgcHJlZmVyZW5jaWEgZGUgbGFzIDEzIG9mZXJ0YXMgZGUgZXNjdWVsYSB5IG9yaWVudGFjacOzbiwgZGUgbWF5b3IgYSBtZW5vciAodmVyIHRhYmxhIDMpLiBBc8OtLCBtaWVudHJhcyBtYXlvciBzZWEgc3UgcHJvbWVkaW8sIG3DoXMgcHJvYmFibGUgc2Vyw6Egb2J0ZW5lciB1biBiYW5jbyBlbiBlbCBjb2xlZ2lvIHkgb3JpZW50YWNpw7NuIGRlc2VhZG9zLCBzZWfDum4gZWwgb3JkZW4gYXNpZ25hZG8uCgpQb3Igb3RybyBsYWRvLCBsb3MgZWdyZXNhZG9zIGRlIGxhIGVzY3VlbGEgZGUgbml2ZWwgcHJpbWFyaW8gQ2FybWVuIFZlcmEgQXJlbmEgKENWQSksIGxhIGN1YWwgZXMgbGEgw7puaWNhIGVzY3VlbGEgZGUgbml2ZWwgcHJpbWFyaW8gYWRtaW5pc3RyYWRhIHBvciBsYSBVTkN1eW8sIHB1ZWRlbiBpbmdyZXNhciBhIGxvcyBjb2xlZ2lvcyBkZSBuaXZlbCBzZWN1bmRhcmlvIGRlIGxhIFVOQ3V5byBzaW4gcG9zdHVsYXIgY29uIHVuIHByb21lZGlvIGRlIG5vdGFzLiBQb3IgZWwgc29sbyBoZWNobyBkZSBzZXIgZWdyZXNhZG9zIGRlbCBDVkEsIHRpZW5lbiBhc2VndXJhZG8gdW4gYmFuY28gZW4gYWxndW5vIGRlIGxvcyBjb2xlZ2lvcyBkZSBuaXZlbCBzZWN1bmRhcmlvIGRlIGxhIFVOQ3V5by4gU2UgbGVzIGFzaWduYW4gNSBwbGF6YXMgY29tbyBtw6F4aW1vIGRlIHVuIHRvdGFsIGRlIDMwIHBvciBkaXZpc2nDs24uIEVuIG90cmFzIHBhbGFicmFzLCBlbCAxNiUgZGUgbGFzIHZhY2FudGVzIHNvbiBvZnJlY2lkYXMgZW4gcHJpbWVyIHTDqXJtaW5vIGEgbG9zIGFsdW1ub3MgZGUgc8OpcHRpbW8gZ3JhZG8gZGUgbGEgQ1ZBLiBMYXMgdmFjYW50ZXMgcmVzdGFudGVzIHNlcsOhbiB0b21hZGFzIHBvciBsb3MgaW5ncmVzYW50ZXMgcG9yIG9yZGVuIGRlIG3DqXJpdG8uCgpFbCBvYmpldGl2byBkZSBlc3RlIGluZm9ybWUgZXMgZWwgZGUgYW5hbGl6YXIgY8OzbW8gc2UgZGlzdHJpYnV5ZW4gbG9zIHByb21lZGlvcyBkZSBsb3MgaW5ncmVzYW50ZXMgcG9yIG9yZGVuIGRlIG3DqXJpdG8sIHBhcmEgZGUgZXN0YSBtYW5lcmEgdmVyIGxhcyBub3RhcyBtw6F4aW1hcyB5IG5vdGFzIGRlIGNvcnRlIHBvciBvcmllbnRhY2nDs24sIHF1w6kgY29sZWdpb3MgeSBvcmllbnRhY2lvbmVzIHNvbiBsb3MgbcOhcyBjb21wZXRpdGl2b3MgeSBjdcOhbGVzIG1lbm9zLiBBZGljaW9uYWxtZW50ZSwgc2UgcmV2ZWxhbiBsYXMgcHJlZmVyZW5jaWFzIGRlIGluZ3Jlc28gZGUgbG9zIGVncmVzYWRvcyBkZSBsYSBlc2N1ZWxhIENhcm1lbiBWZXJhIEFyZW5hLgoKVG9kbyBlbCBjw7NkaWdvIGRlIHByb2dyYW1hY2nDs24gdXRpbGl6YWRvIGVuIGVzdGUgaW5mb3JtZSBwdWVkZSBzZXIgYmFqYWRvIGRlbCBzaWd1aWVudGUgW2xpbmtdKGh0dHBzOi8vZ2l0aHViLmNvbS9yb2RyYWxlei91bmN1eW8taW5ncmVzbykuCgojIyBFeHRyYWNjacOzbiBkZSBkYXRvcwoKTG9zIHJlc3VsdGFkb3MgZGUgbGEgY29udm9jYXRvcmlhIGZ1ZXJvbiBwdWJsaWNhZG9zIHBvciBsYSBVTkN1eW8gZW4gZXN0ZSBbZG9jdW1lbnRvXShodHRwczovL3d3dy51bmN1eW8uZWR1LmFyL2FjYWRlbWljYS91cGxvYWQvaW5mb3JtZS0xLWluZ3Jlc2FudGVzLTIwMjItb3JpZW50YWRhcy1wb3ItbnVtaW5zYzEucGRmKSBwYXJhIGxvcyBjb2xlZ2lvcyBDVUMsIERBRCwgTUFHIHkgTVosIHkgZW4gZXN0ZSBbZG9jdW1lbnRvXShodHRwczovL2xhZS51bmN1eW8uZWR1LmFyL3VwbG9hZC8xLWxpc3RhZG8tb3JkZW4tZGUtbWVyaXRvLWxhZS0yMDIyLnBkZikgcGFyYSBlbCBMQUUsIGFtYm9zIGVuIGZvcm1hdG8gcGRmLiBEaWNob3MgZG9jdW1lbnRvcyBjb250aWVuZW4gdW5hIHRhYmxhIGNvbiBlbCBuw7ptZXJvIGRlIGluc2NyaXBjacOzbiwgZWwgcHJvbWVkaW8gZGVsIGluZ3Jlc2FudGUgeSBlbCBjb2xlZ2lvIHkgb3JpZW50YWNpw7NuIGEgbGEgcXVlIGhhIGFjY2VkaWRvLiBGdWUgbmVjZXNhcmlvIGV4dHJhZXIgZXN0b3MgZGF0b3MgeSB0cmFuc2Zvcm1hcmxvcyBhIHVuIGZvcm1hdG8gbcOhcyBhcHJvcGlhZG8gcGFyYSBmYWNpbGl0YXIgc3UgYW7DoWxpc2lzLgoKPCEtLSBQcmV2aWFtZW50ZSBsb3MgZG9jdW1lbnRvcyBzZSBzZXBhcmFuIGVuIHDDoWdpbmFzIGluZGl2aWR1YWxlcyBwYXJhIGZhY2lsaXRhciBsYSBleHRyYWNjacOzbiBkZSBsb3MgZGF0b3MuIEVzdG8gc2UgbG9ncmEgYWwgZWplY3V0YXIgZW4gY29uc29sYSBkZSBMaW51eCBlbCBjb21hbmRvLCAtLT4KCjwhLS0gYGBgIC0tPgo8IS0tICQgcGRmdGsgaW4ucGRmIGJ1cnN0IC0tPgo8IS0tIGBgYCAtLT4KCjwhLS0gTG9zIGRhdG9zIHNlIHBhc2FuIGEgdGV4dG8gcGxhbm8uIFNlIG9idGllbmVuIGRhdG9zIHRhYnVsYWRvcyBjb24gdW5hIGNsYXJhIHJlZ3VsYXJpZGFkLiBTZSB1dGlsaXphbiBsYXMgYmlibGlvdGVjYXMgYGBwZGZ0b29sc2BgIHkgYGByZWFkcmBgIHBhcmEgcGFzYXIgbG9zIGRhdG9zIGRlIHBkZiBhIHRleHRvIHBsYW5vIHkgZGUgdGV4dG8gcGxhbm8gYWwgZm9ybWF0byBgYGRhdGFmcmFtZWBgLiDCoC0tPgoKPCEtLSBMYXMgZnVuY2lvbmVzIGBgdW5jdV8yX2RmYGAgeSBgYGxhZV8yX2RmYGAgc2UgcHJvdmVlbiBhbCBmaW5hbCBkZSBlc3RlIGluZm9ybWUsIGVuIGxhIHNlY2Npw7NuIEFuZXhvLiAtLT4KCjwhLS0gQmlibGlvdGVjYXMgLS0+CgpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBlY2hvPUZBTFNFfQpsaWJyYXJ5KHBkZnRvb2xzKQpsaWJyYXJ5KHJlYWRyKQpsaWJyYXJ5KGRwbHlyKQpsaWJyYXJ5KHRpZHlyKQpsaWJyYXJ5KHN0cmluZ3IpCmxpYnJhcnkodGliYmxlKQpsaWJyYXJ5KGthYmxlRXh0cmEpCmxpYnJhcnkoRFQpCmxpYnJhcnkodGlkeXIpCgpgYGAKCgpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBlY2hvPUZBTFNFfQoKIyBEYXRvcyBkZWwgQ1VDLCBEQUQsIE1BRywgTVoKCm5fcGFnIDwtIDE4ICMgTnVtZXJvcyBkZSBwYWdpbmFzIGVuIGVsIHBkZgoKZGYgPC0gdmVjdG9yKG1vZGUgPSAibGlzdCIsIGxlbmd0aCA9IG5fcGFnKQoKZm9yIChpZHggaW4gMTpuX3BhZykKewogIHBkZl9maWxlIDwtIHNwcmludGYoIi4vcGdfMDAlMDJkLnBkZiIsIGlkeCkKICAKICB0ZXh0IDwtIHBkZl90ZXh0KHBkZl9maWxlKQogIAogIGRhdGEgPC0gdW5jdV8yX2RmKHRleHQpCiAgCiAgZGZbW2lkeF1dIDwtIGRhdGEKfQoKIyBIYWNlciB1biBzb2xvIGRmCmZvciAoaWR4IGluIDE6bl9wYWcpCnsKICBpZihpZHggPT0gMSkKICB7CiAgICBkYXRhX3VuY3UgPC0gZGZbW2lkeF1dCiAgfSAKICBlbHNlCiAgewogICAgZGF0YV91bmN1IDwtcmJpbmQoZGF0YV91bmN1LCBkZltbaWR4XV0pCiAgfQp9CgojIERhdG9zIGRlbCBMQUUKCm5fcGFnIDwtIDIgICMgTnVtZXJvcyBkZSBwYWdpbmFzIGVuIGVsIHBkZgoKZGYgPC0gdmVjdG9yKG1vZGUgPSAibGlzdCIsIGxlbmd0aCA9IG5fcGFnKQoKZm9yIChpZHggaW4gMTpuX3BhZykKewogIHBkZl9maWxlIDwtIHNwcmludGYoIi4vbGFlLSVkLnBkZiIsIGlkeCkKICAKICB0ZXh0IDwtIHBkZl90ZXh0KHBkZl9maWxlKQogIAogIGRhdGEgPC0gbGFlXzJfZGYodGV4dCkKICAKICBkZltbaWR4XV0gPC0gZGF0YQp9CgojIEhhY2VyIHVuIHNvbG8gZGYKZm9yIChpZHggaW4gMTpuX3BhZykKewogIGlmKGlkeCA9PSAxKQogIHsKICAgIGRhdGFfbGFlIDwtIGRmW1tpZHhdXQogIH0gCiAgZWxzZQogIHsKICAgIGRhdGFfbGFlIDwtcmJpbmQoZGF0YV9sYWUsIGRmW1tpZHhdXSkKICB9Cn0KCmBgYAoKIyMgQW7DoWxpc2lzIGRlIGxvcyBkYXRvcwoKPCEtLSBDb21vIGxvcyBkYXRvcyBkZSBMQUUgc2UgdG9tYW4gcG9yIHNlcGFyYWRvLCBzZSB1bmVuIGxvcyBkYXRhZnJhbWVzIGRlIHRvZG9zIGxvcyBjb2xlZ2lvcyBwYXJhIHVuaWZpY2FyIGVsIGFuw6FsaXNpcy4gU29sbyBpbnRlcmVzYW4gbGEgZXNjdWVsYSwgb3JpZW50YWNpw7NuIHkgcHJvbWVkaW8gZGUgY2FkYSBpbmdyZXNhbnRlLiAtLT4KCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGVjaG89RkFMU0V9CgojIFNlIHNlbGVjY2lvbmFuIGFsZ3VuYXMgY29sdW1uYXMKZGF0YV91bmN1X3NtIDwtIGRhdGFfdW5jdSAlPiUgc2VsZWN0KEVzY3VlbGEsIE9yaWVudGFjaW9uLCBQcm9tZWRpbykKCiMgU2UgdW5lbiBsb3MgZG9zIGRhdGFzZXRzCmRhdGFfc20gPC0gcmJpbmQoZGF0YV91bmN1X3NtLCBkYXRhX2xhZSkKYGBgCgojIyMgVG90YWwgZGUgaW5ncmVzYW50ZXMgcG9yIG9yZGVuIGRlIG3DqXJpdG8KCkxhIFVOQ3V5byBvZnJlY2nDsyB1biB0b3RhbCBkZSAxLjAyMCB2YWNhbnRlcyBwYXJhIGxvcyBjb2xlZ2lvcyBzZWN1bmRhcmlvcyBkZWwgR3JhbiBNZW5kb3phLgoKYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgZWNobz1GQUxTRSwgcmVzdWx0cz0naGlkZSd9CgojIFRvdGFsIGRlIHZhY2FudGVzIGVuIENVQywgREFELCBMQUUsIE1BRywgTVoKdmFjYW50ZXNfYyA8LSBjKCA2MCozLCAxMjAqMywgOTAsIDMwKzkwKzMwLCAxMjArNjArNjApCgpzdW0odmFjYW50ZXNfYykKYGBgCgpEZSB1biB0b3RhbCBkZSAxLjAyMCB2YWNhbnRlcywgc2Ugb3Rvcmdhcm9uIDk3MSBwbGF6YXMgYSBsb3MgaW5ncmVzYW50ZXMgcG9yIG9yZGVuIGRlIG3DqXJpdG8uIExhcyByZXN0YW50ZXMgNDkgdmFjYW50ZXMgZnVlcm9uIHByZXZpYW1lbnRlIG9jdXBhZGFzIHBvciBsb3MgYWx1bW5vcyBkZWwgQ2FybWVuIFZlcmEgQXJlbmEgKENWQSkuCgpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBlY2hvPUZBTFNFLCByZXN1bHRzPSdoaWRlJ30KCiMgVG90YWwgZGUgaW5ncmVzYW50ZXMKaW5ncmVzYW50ZXMgPC0gbnJvdyAoZGF0YV9zbSkKCmluZ3Jlc2FudGVzCgpjdmEgPC0gdmFjYW50ZXNfYyAtIGluZ3Jlc2FudGVzCmBgYAoKIyMjIEluZ3Jlc2FudGVzIHBvciBlc2N1ZWxhCgpFbiBsYSB0YWJsYSAxIHNlIG11ZXN0cmEgY8OzbW8gc2UgZGlzdHJpYnV5ZW4gcG9yIGNvbGVnaW8gbG9zIGluZ3Jlc2FudGVzIHBvciBvcmRlbiBkZSBtw6lyaXRvIHkgbG9zIGluZ3Jlc2FudGVzIGRlbCBDVkEuIEFkZW3DoXMgc2UgbXVlc3RyYSBlbCBwb3JjZW50YWplIGRlIGluZ3Jlc29zIGRlbCBDVkEsIHNlZ8O6biBlbCB0b3RhbCBkZSBpbmdyZXNhbnRlcyBkZSBlc3RhIGVzY3VlbGEgKDQ5KS4gTGEgdGFibGEgc2Ugb3JkZW5hIHBvciBsYSBjYW50aWRhZCBkZSBpbmdyZXNvcyBkZWwgQ1ZBLCBkZSBtYXlvciBhIG1lbm9yLgoKYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgZWNobz1GQUxTRSwgcmVzdWx0cz0naGlkZSd9CgpkYXRhX2MgPC0gZGF0YV9zbSAlPiUgZ3JvdXBfYnkoRXNjdWVsYSkgJT4lCiAgc3VtbWFyaXNlKCBJbmdyZXNhbnRlcyA9IG4oKSApICU+JQogIGFkZF9jb2x1bW4oVmFjYW50ZXMgPSB2YWNhbnRlc19jLCAuYWZ0ZXIgPSAiRXNjdWVsYSIpICU+JQogIG11dGF0ZShDVkEgPSBWYWNhbnRlcyAtIEluZ3Jlc2FudGVzKSAlPiUKICBtdXRhdGUoYENWQV8lYCA9IENWQSAvIDQ5ICogMTAwKSAjJT4lCiNtdXRhdGUoYENWQV8lYD0gY2VsbF9zcGVjKCdDVkFfJScsICJodG1sIiwgY29sb3IgPSBpZmVsc2UoYENWQV8lYCA+IDIwLCAicmVkIiwgImJsdWUiKSkpCgpvcHRpb25zKGRpZ2l0cyA9IDMpCgpkYXRhX2MgJT4lCiAgYXJyYW5nZShkZXNjKENWQSkpICU+JQogIHByaW50LmRhdGEuZnJhbWUoKSAlPiUKICBrYmwoY2FwdGlvbiA9ICJUYWJsYSAxOiBEaXN0cmlidWNpw7NuIGRlIGxvcyBpbmdyZXNhbnRlcyBwb3IgZXNjdWVsYS4iKSAlPiUKICBrYWJsZV9jbGFzc2ljKGZ1bGxfd2lkdGggPSBGLCBodG1sX2ZvbnQgPSAiQ2FtYnJpYSIsICkgJT4lCiAga2FibGVfc3R5bGluZyhib290c3RyYXBfb3B0aW9ucyA9IGMoInN0cmlwZWQiLCAiaG92ZXIiLCAiY29uZGVuc2VkIiwgInJlc3BvbnNpdmUiKSkKCiMgZGF0YV9jIMKgJT4lCiMgwqAgYXJyYW5nZShkZXNjKENWQSkpICU+JQojIMKgIHByaW50LmRhdGEuZnJhbWUoKSAlPiUKIyDCoCBkYXRhdGFibGUoY2xhc3MgPSAiZGlzcGxheSIpCgojICU+JQojIGNvbHVtbl9zcGVjKDUsIGNvbG9yID0gaWZlbHNlKGRhdGFfYyRgQ1ZBXyVgID4gMjAsICJyZWQiLCAiYmx1ZSIpKSDCoCDCoAojIGNvbHVtbl9zcGVjKDUsIGJvbGQgPSBpZmVsc2UoZGF0YV9jJGBDVkFfJWA+IDIwLCBULCBGKSApCmBgYAoKU2Ugb2JzZXJ2YSBxdWUgZWwgNDAlIGRlIGxvcyBlZ3Jlc2Fkb3MgZGUgQ1ZBIGhhIGVsZWdpZG8gaW5ncmVzYXIgYWwgQ1VDLiBMZSBzaWd1ZW4gTVogY29uIHVuIDIyJSB5IERBRCBjb24gdW4gMjAlLiBFc3RvIGVzIHVuIGFkZWxhbnRvIGRlIGxhcyBwcmVmZXJlbmNpYXMgZGUgbG9zIGluZ3Jlc2FudGVzIHBvciDDs3JkZW4gZGUgbcOpcml0byBxdWUgc2Ugb2JzZXJ2YXLDoW4gZW4gbGFzIHNpZ3VpZW50ZXMgc2VjY2lvbmVzLgoKIyMjIEluZ3Jlc2FudGVzIHBvciBvcmllbnRhY2nDs24KCkVuIGxhIHRhYmxhIDIgc2UgdW5pZmljYW4gbGFzIDggb3JpZW50YWNpb25lcyBxdWUgb2ZyZWNlbiBsb3MgNSBjb2xlZ2lvcyB5IHNlIGV4cG9uZSBjw7NtbyBzZSBkaXN0cmlidXllbiBwb3Igb3JpZW50YWNpw7NuIGxvcyBpbmdyZXNhbnRlcyBwb3Igb3JkZW4gZGUgbcOpcml0byB5IGxvcyBpbmdyZXNhbnRlcyBkZWwgQ1ZBLiBBZGVtw6FzIHNlIG11ZXN0cmEgZWwgcG9yY2VudGFqZSBkZSBpbmdyZXNhbnRlcyBkZWwgQ1ZBLCBzZWfDum4gZWwgdG90YWwgZGUgaW5ncmVzYW50ZXMgZGUgZXN0YSBlc2N1ZWxhICg0OSkuIExhIHRhYmxhIHNlIG9yZGVuYSBwb3IgbGEgY2FudGlkYWQgZGUgaW5ncmVzb3MgZGVsIENWQSwgZGUgbWF5b3IgYSBtZW5vci4KCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGVjaG89RkFMU0UsIHJlc3VsdHM9J2hpZGUnfQoKIyBUb3RhbCBkZSB2YWNhbnRlcyBwb3Igb3JpZW50YWNpb24KdmFjYW50ZXNfb3IgPC0gYyggNjAsICMgQXJ0ZXMKICAgICAgICAgICAgICAgICAgMzArNjArMTIwLCAjIENpZW5jaWFzIE5hdHVyYWxlcwogICAgICAgICAgICAgICAgICA2MCs5MCs2MCsxMjAsICMgQ2llbmNpYXMgU29jaWFsZXMKICAgICAgICAgICAgICAgICAgMzAsICMgQ29tdW5pY2FjacOzbgogICAgICAgICAgICAgICAgICAxMjAsICMgRWNvbm9tw61hCiAgICAgICAgICAgICAgICAgIDYwLCAjIEluZm9ybcOhdGljYQogICAgICAgICAgICAgICAgICAxMjAsICMgTGVuZ3VhcwogICAgICAgICAgICAgICAgICA5MCAjIFRlY25vbG9nw61hIEFsaW1lbnRhcmlhCikKZGF0YV9vciA8LSBkYXRhX3NtICU+JSBncm91cF9ieShPcmllbnRhY2lvbikgJT4lCiAgc3VtbWFyaXNlKCBJbmdyZXNhbnRlcyA9IG4oKSApICU+JQogIGFkZF9jb2x1bW4oVmFjYW50ZXMgPSB2YWNhbnRlc19vciwgLmFmdGVyID0gIk9yaWVudGFjaW9uIikgJT4lCiAgbXV0YXRlKENWQSA9IFZhY2FudGVzIC0gSW5ncmVzYW50ZXMpICU+JQogIG11dGF0ZSgnQ1ZBXyUnID0gQ1ZBIC8gNDkgKiAxMDApCgpvcHRpb25zKGRpZ2l0cyA9IDMpCgpkYXRhX29yICU+JSAgYXJyYW5nZShkZXNjKENWQSkpICU+JSAgcHJpbnQuZGF0YS5mcmFtZSgpICU+JQogIGtibChjYXB0aW9uID0gIlRhYmxhIDI6IERpc3RyaWJ1Y2nDs24gZGUgbG9zIGluZ3Jlc2FudGVzIHBvciBvcmllbnRhY2nDs24uIikgJT4lCiAga2FibGVfY2xhc3NpYyhmdWxsX3dpZHRoID0gRiwgaHRtbF9mb250ID0gIkNhbWJyaWEiKSAlPiUKICBrYWJsZV9zdHlsaW5nKGJvb3RzdHJhcF9vcHRpb25zID0gYygic3RyaXBlZCIsICJob3ZlciIsICJjb25kZW5zZWQiLCAicmVzcG9uc2l2ZSIpKQpgYGAKCiMjIyBJbmdyZXNhbnRlcyBwb3IgZXNjdWVsYSB5IG9yaWVudGFjacOzbgoKRW4gbGEgdGFibGEgMyBzZSBtdWVzdHJhbiBjw7NtbyBzZSBkaXN0cmlidXllbiBwb3IgZXNjdWVsYSB5IHBvciBvcmllbnRhY2nDs24gbG9zIGluZ3Jlc2FudGVzIHBvciBvcmRlbiBkZSBtw6lyaXRvIHkgbG9zIGluZ3Jlc2FudGVzIGRlbCBDVkEuIEFkZW3DoXMsIHNlIG11ZXN0cmEgZWwgcG9yY2VudGFqZSBkZSBpbmdyZXNvcyBkZWwgQ1ZBIHkgZWwgcG9yY2VudGFqZSBkZSB2YWNhbnRlcyBlZmVjdGl2YXMsIGVzdG8gZXMsIGxhcyB2YWNhbnRlcyBxdWUgbm8gZnVlcm9uIHRvbWFkYXMgcG9yIGxvcyBhbHVtbm9zIGRlbCBDVkEuIExhIHRhYmxhIHNlIG9yZGVuYSBwb3IgZWwgcG9yY2VudGFqZSBkZSB2YWNhbnRlcyBlZmVjdGl2YXMsIGRlIG1lbm9yIGEgbWF5b3IuCgpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBlY2hvPUZBTFNFLCByZXN1bHRzPSdoaWRlJ30KCiMgVmFjYW50ZXMgZW4gQ1VDLCBEQUQsIExBRSwgTUFHLCBNWgp2YWNhbnRlc19vIDwtIGMoIDYwLCA2MCwgNjAsCiAgICAgICAgICAgICAgICAgMTIwLCAxMjAsIDEyMCwKICAgICAgICAgICAgICAgICA5MCwKICAgICAgICAgICAgICAgICAzMCwgOTAsIDMwLAogICAgICAgICAgICAgICAgIDYwLCAxMjAsIDYwKQoKZGF0YV9vIDwtIGRhdGFfc20gJT4lIGdyb3VwX2J5KEVzY3VlbGEsIE9yaWVudGFjaW9uKSAlPiUKICBzdW1tYXJpc2UoSW5ncmVzYW50ZXMgPSBuKCkgKSAlPiUKICBhZGRfY29sdW1uKFZhY2FudGVzID0gdmFjYW50ZXNfbywgLmFmdGVyID0gIk9yaWVudGFjaW9uIikgJT4lCiAgbXV0YXRlKENWQSA9IFZhY2FudGVzIC0gSW5ncmVzYW50ZXMpICU+JQogIG11dGF0ZSgnQ1ZBXyUnID0gQ1ZBIC8gNDkgKiAxMDApICU+JQogIG11dGF0ZSgnVmFjYW50ZXNfZWZfJScgPSAoVmFjYW50ZXMgLSBDVkEpIC8gVmFjYW50ZXMgKiAxMDApCgpkYXRhX28gJT4lCiAgYXJyYW5nZV9hdCgnVmFjYW50ZXNfZWZfJScpICU+JQogIHByaW50LmRhdGEuZnJhbWUoKSAlPiUKICBrYmwoY2FwdGlvbiA9ICJUYWJsYSAzOiBEaXN0cmlidWNpw7NuIGRlIGxvcyBpbmdyZXNhbnRlcyBwb3IgZXNjdWVsYSB5IG9yaWVudGFjacOzbi4iKSAlPiUKICBrYWJsZV9jbGFzc2ljKGZ1bGxfd2lkdGggPSBGLCBodG1sX2ZvbnQgPSAiQ2FtYnJpYSIpICU+JQogIGthYmxlX3N0eWxpbmcoYm9vdHN0cmFwX29wdGlvbnMgPSBjKCJzdHJpcGVkIiwgImhvdmVyIiwgImNvbmRlbnNlZCIsICJyZXNwb25zaXZlIikpCiMgJT4lCiMgwqAgY29sdW1uX3NwZWMoNywgwqBjb2xvciA9ICJ3aGl0ZSIsCiMgwqAgwqAgYmFja2dyb3VuZCA9IHNwZWNfY29sb3IoMToxMywgZW5kID0gMC43NSkpCiMgY29sdW1uX3NwZWMoNywgY29sb3IgPSAid2hpdGUiLAojIGJhY2tncm91bmQgPSBzcGVjX2NvbG9yKGRhdGFfbyRgVmFjYW50ZXNfZWZfJWBbMToxMl0sIGVuZCA9IDAuOSksCiMgcG9wb3ZlciA9IHBhc3RlKCJhbToiLCBkYXRhX28kYFZhY2FudGVzX2VmXyVgWzE6MTJdKSkKYGBgCgpTZSBvYnNlcnZhIHF1ZSBsb3MgYWx1bW5vcyBkZWwgQ1ZBIHByZWZpZXJlbiB1biAyMCUgQXJ0ZXMgZGVsIENVQywgdW4gMTglIEluZm9ybcOhdGljYSBkZWwgTVogeSB1biAxNCUgQ2llbmNpYXMgTmF0dXJhbGVzIGRlbCBDVUMuIEFkaWNpb25hbG1lbnRlLCBlbiBlbCBjYXNvIGRlIEFydGUsIHNlIHZlIHF1ZSBzZSBoYW4gdG9tYWRvIGVsIG3DoXhpbW8gZGUgdmFjYW50ZXMgZGlzcG9uaWJsZXMgcGFyYSBlc3RlIGdydXBvIGRlIGluZ3Jlc2FudGVzLCA1IHZhY2FudGVzIHBvciBkaXZpc2nDs24sIGVzIGRlY2lyLCAxMCB2YWNhbnRlcyBlbiB0b3RhbC4KCkRlYmlkbyBhIHF1ZSBlc3RhcyAzIG9yaWVudGFjaW9uZXMgc29sbyB0aWVuZW4gNjAgdmFjYW50ZXMgY2FkYSB1bmEsIGVzdG8gcHJvZHVjZSBxdWUgc2Ugb2ZyZXpjYW4gcmVsYXRpdmFtZW50ZSBtZW5vcyBwbGF6YXMgcGFyYSBsb3MgaW5ncmVzYW50ZXMgcG9yIG9yZGVuIGRlIG3DqXJpdG8gZW4gZGljaGFzIG9yaWVudGFjaW9uZXMuIEVzdG8gc2Ugb2JzZXJ2YSBlbiBsb3MgcG9yY2VudGFqZXMgZGUgdmFjYW50ZXMgZWZlY3RpdmFzIGNvbiA4MyUsIDg1JSB5IDg4JSwgcmVzcGVjdGl2YW1lbnRlIHBhcmEgbGFzIDMgb3JpZW50YWNpb25lcyBhcnJpYmEgbWVuY2lvbmFkYXMuIEFsIGZpbmFsIGRlIGxhIHRhYmxhIHNlIG9ic2VydmEgcXVlIHNvbG8gMSBhbHVtbm8gZGVsIENWQSBoYSBlbGVnaWRvIGluZ3Jlc2FyIGEgQ2llbmNpYXMgU29jaWFsZXMgZGVsIERBRC4gRWwgcmVzdG8gZGUgbGFzIENpZW5jaWFzIFNvY2lhbGVzIGRlIE1BRyB5IE1aIG5vIGhhbiByZWNpYmlkbyBhbHVtbm9zIGRlbCBDVkEsIHBvciBsbyBxdWUgbGFzIHZhY2FudGVzIGVmZWN0aXZhcyBkZSBlc3RhcyBkb3Mgw7psdGltYXMgb3JpZW50YWNpb25lcyBzb24gZGVsIDEwMCUuCgojIyMgQW7DoWxpc2lzIGVzdGFkw61zdGljbyBwb3IgZXNjdWVsYSB5IG9yaWVudGFjacOzbgoKRW4gZXN0YSBzZWNjacOzbiBzZSBleHBvbmUgZWwgYW7DoWxpc2lzIGVzdGFkw61zdGljbyBkZSBsb3MgcHJvbWVkaW9zIGRlIGxvcyBpbmdyZXNhbnRlcyBwb3Igb3JkZW4gZGUgbcOpcml0byAoc2luIENWQSksIGxvIHF1ZSBkZXJpdmEgZW4gb2J0ZW5lciBsb3MgbWVqb3JlcyBwcm9tZWRpb3MgeSBwcm9tZWRpb3MgZGUgY29ydGUgcG9yIGVzY3VlbGEgeSBvcmllbnRhY2nDs24uIExhIHNpZ3VpZW50ZSB0YWJsYSBtdWVzdHJhIHBvciBlc2N1ZWxhIHkgb3JpZW50YWNpw7NuOiBlbCBwcm9tZWRpbyBtw6FzIGFsdG8gKE1heGltbyksIGVsIHByb21lZGlvIGRlIGNvcnRlIG8gbcOtbmltbyBwcm9tZWRpbyAoQ29ydGUpIHkgbGEgwqBbbWVkaWFuYV0oaHR0cHM6Ly9lcy53aWtpcGVkaWEub3JnL3dpa2kvTWVkaWFuYV8oZXN0YWQlQzMlQURzdGljYSkpIGRlIGxvcyBwcm9tZWRpb3MgKE1lZGlhbmEpLCB0b2RvcyBvcmRlbmFkb3MgcG9yIGVsIHByb21lZGlvIGRlIGNvcnRlLCBkZSBtYXlvciBhIG1lbm9yLgoKYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgZWNobz1GQUxTRSwgcmVzdWx0cz0naGlkZSd9CgpkYXRhX3N0YSA8LSBkYXRhX3NtICU+JSBncm91cF9ieShFc2N1ZWxhLCBPcmllbnRhY2lvbikgJT4lCiAgc3VtbWFyaXNlKE1heGltbyA9IG1heChQcm9tZWRpbyksCiAgICAgICAgICAgIENvcnRlID0gbWluKFByb21lZGlvKSwKICAgICAgICAgICAgTWVkaWFuYSA9IG1lZGlhbihQcm9tZWRpbyksCiAgKQoKb3B0aW9ucyhkaWdpdHMgPSA0KQoKZGF0YV9zdGEgJT4lIGFycmFuZ2UoZGVzYyhDb3J0ZSkpICU+JSBwcmludC5kYXRhLmZyYW1lKCkgJT4lCiAga2JsKGNhcHRpb24gPSAiVGFibGEgNDogQW7DoWxpc2lzIGVzdGFkw61zdGljbyBwb3IgZXNjdWVsYSB5IG9yaWVudGFjacOzbi4iKSAlPiUKICBrYWJsZV9jbGFzc2ljKGZ1bGxfd2lkdGggPSBGLCBodG1sX2ZvbnQgPSAiQ2FtYnJpYSIpICU+JQogIGthYmxlX3N0eWxpbmcoYm9vdHN0cmFwX29wdGlvbnMgPSBjKCJzdHJpcGVkIiwgImhvdmVyIiwgImNvbmRlbnNlZCIsICJyZXNwb25zaXZlIikpCmBgYAoKU2UgYWR2aWVydGUgcXVlIGxhcyBtYXlvcmVzIG5vdGFzIGRlIGNvcnRlcyBlc3TDoW4gZW4gQ2llbmNpYXMgTmF0dXJhbGVzIGRlbCBDVUMsIEluZm9ybcOhdGljYSBkZWwgTVogeSBBcnRlcyB5IENpZW5jaWFzIFNvY2lhbGVzLCBhbWJhcyBkZWwgQ1VDLiBFc3RvIHF1aWVyZSBkZWNpciBxdWUgbG9zIGluZ3Jlc2FudGVzIGNvbiBtZWpvcmVzIHByb21lZGlvcyBoYW4gcG9zdHVsYWRvIGEgYWxndW5hcyBkZSBlc3RhcyA0IGNvbWJpbmFjaW9uZXMuIEVuIGVsIG90cm8gZXh0cmVtbywgTGVuZ3VhcyBkZWwgREFEIHByZXNlbnRhIGxhIG5vdGEgZGUgY29ydGUgbcOhcyBiYWphLiBDYWJlIGRlc3RhY2FyIHF1ZSBsYSBtZWRpYW5hIGRlIENpZW5jaWFzIE5hdHVyYWxlcyBkZWwgQ1VDIGVzIGRlIDEwLCBsbyBxdWUgaW5kaWNhIHF1ZSBhbCBtZW5vcyBsYSBtaXRhZCBkZSBsb3MgaW5ncmVzYW50ZXMgZW4gZXN0YSBvcmllbnRhY2nDs24gdGllbmUgdW4gcHJvbWVkaW8gaWd1YWwgYSAxMC4KCiMjIyDCv0EgcXXDqSBlc2N1ZWxhcyB5IG9yaWVudGFjaW9uZXMgdmFuIGxvcyAxMD8KClNlIGFuYWxpemEgYSBjb250aW51YWNpw7NuIGEgcXXDqSBlc2N1ZWxhIHkgb3JpZW50YWNpw7NuIHBvc3R1bGFuIGFxdWVsbG9zIGluZ3Jlc2FudGVzIHF1ZSB0aWVuZW4gdW4gcHJvbWVkaW8gaWd1YWwgYSAxMCwgZXMgZGVjaXIsIGxvcyBpbmdyZXNhbnRlcyBjb24gbG9zIHByb21lZGlvcyBtw6FzIGFsdG9zLiBMb3MgZGF0b3Mgc2Ugb3JkZW5hbiBwb3IgZWwgcG9yY2VudGFqZSBkZSBkaWVjZXMsIGRlIG1heW9yIGEgbWVub3IuCgpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBlY2hvPUZBTFNFLCByZXN1bHRzPSdoaWRlJ30KCmRhdGFfZCA8LSBkYXRhX3NtICU+JSBncm91cF9ieShFc2N1ZWxhLCBPcmllbnRhY2lvbikgJT4lCiAgZmlsdGVyIChQcm9tZWRpbyA9PSAxMC4wMDApICU+JQogIHN1bW1hcmlzZShEaWVjZXMgPSBuKCkpICU+JQogIGFkZF9jb2x1bW4oSW5ncmVzYW50ZXMgPSBkYXRhX28kSW5ncmVzYW50ZXMsIC5hZnRlciA9ICJPcmllbnRhY2lvbiIpICU+JQogIG11dGF0ZShgRGllY2VzXyVgID0gRGllY2VzL0luZ3Jlc2FudGVzKjEwMCkKCmRhdGFfZF9zIDwtIGRhdGFfZCAlPiUgc3VtbWFyaXNlKERpZWNlcyA9IHN1bShEaWVjZXMpKSAlPiUKICBhZGRfY29sdW1uKEluZ3Jlc2FudGVzID0gZGF0YV9jJEluZ3Jlc2FudGVzLCAuYWZ0ZXIgPSAiRXNjdWVsYSIpICU+JQogIG11dGF0ZShgRGllY2VzXyVgID0gRGllY2VzL0luZ3Jlc2FudGVzKjEwMCkKCm9wdGlvbnMoZGlnaXRzID0gMykKCmFycmFuZ2UoZGF0YV9kX3MsIGRlc2MoYERpZWNlc18lYCkpICU+JSBwcmludC5kYXRhLmZyYW1lKCkgJT4lCiAga2JsKGNhcHRpb24gPSAiVGFibGEgNTogRGlzdHJpYnVjacOzbiBwb3IgZXNjdWVsYSBkZSBsb3MgcHJvbWVkaW9zIGlndWFsZXMgYSAxMC4iKSAlPiUKICBrYWJsZV9jbGFzc2ljKGZ1bGxfd2lkdGggPSBGLCBodG1sX2ZvbnQgPSAiQ2FtYnJpYSIpICU+JQogIGthYmxlX3N0eWxpbmcoYm9vdHN0cmFwX29wdGlvbnMgPSBjKCJzdHJpcGVkIiwgImhvdmVyIiwgImNvbmRlbnNlZCIsICJyZXNwb25zaXZlIikpCgphcnJhbmdlKGRhdGFfZCwgZGVzYyhgRGllY2VzXyVgKSkgJT4lIHByaW50LmRhdGEuZnJhbWUoKSAlPiUKICBrYmwoY2FwdGlvbiA9ICJUYWJsYSA2OiBEaXN0cmlidWNpw7NuIHBvciBlc2N1ZWxhIHkgb3JpZW50YWNpw7NuIGRlIGxvcyBwcm9tZWRpb3MgaWd1YWxlcyBhIDEwLiIpICU+JQogIGthYmxlX2NsYXNzaWMoZnVsbF93aWR0aCA9IEYsIGh0bWxfZm9udCA9ICJDYW1icmlhIikgJT4lCiAga2FibGVfc3R5bGluZyhib290c3RyYXBfb3B0aW9ucyA9IGMoInN0cmlwZWQiLCAiaG92ZXIiLCAiY29uZGVuc2VkIiwgInJlc3BvbnNpdmUiKSkKYGBgCgpMYSB0YWJsYSA1IG11ZXN0cmEgZWwgdG90YWwgZGUgcHJvbWVkaW9zIGlndWFsIGEgMTAgcXVlIHJlY2liZSBjYWRhIGVzY3VlbGEuIFNlIG9ic2VydmEgcXVlIGVsIENVQyBlcyBsYSBlc2N1ZWxhIHF1ZSBtw6FzIGRpZWNlcyByZWNpYmUgY29uIDc2LCB1biA0NyUgZGVsIHRvdGFsIGRlIHZhY2FudGVzLiBMZSBzaWd1ZSBlbCBNWiBjb24gNTcsIGNvbiBjYXNpIDI1JSBkZWwgdG90YWwgZGVsIHRvdGFsIGRlIHZhY2FudGVzLiBNw6FzIGxlam9zIHNlIGVuY3VlbnRyYW4gTEFFLCBNQUcgWSBEQUQgY29uIDE2JSwgOSUgeSA2JSwgcmVzcGVjdGl2YW1lbnRlLiBDYWJlIGRlc3RhY2FyIHF1ZSBkZSB1biB0b3RhbCBkZSA5NzEgaW5ncmVzYW50ZXMgcG9yIG9yZGVuIGRlIG3DqXJpdG8sIDE4MyBwb3NlZW4gdW4gcHJvbWVkaW8gaWd1YWwgYSAxMCwgZXN0byBlcywgY2FzaSB1biAxOSUgZGVsIHRvdGFsIGRlIGluZ3Jlc2FudGVzIHBvc2VlbiBsb3MgcHJvbWVkaW9zIG3DoXMgYWx0b3MgcG9zaWJsZXMuCgpFbiBsYSB0YWJsYSA2IGNsYXJhbWVudGUgc2UgdmUgcXVlIGVsIENVQyBlcyBlbCBjb2xlZ2lvIHF1ZSBtw6FzIGRlbWFuZGEgdGllbmUgcG9yIGxvcyBpbmdyZXNhbnRlcyBjb24gcHJvbWVkaW8gMTAsIGNvbiA1NCUsIDQ2JSB5IDQyJSBkZSBkaWVjZXMgcGFyYSBDaWVuY2lhcyBOYXR1cmFsZXMsIEFydGUgeSBDaWVuY2lhcyBTb2NpYWxlcywgcmVzcGVjdGl2YW1lbnRlLCBzZWfDum4gbGFzIHZhY2FudGVzIG9mcmVjaWRhcyBwb3IgY2FkYSBvcmllbnRhY2nDs24uIExlIHNpZ3VlIEluZm9ybcOhdGljYSBkZWwgTVogY29uIDM5JS4gU2UgY29uZmlybWEgcXVlLCBjb24gdW4gNTQlLCBhbCBtZW5vcyBsYSBtaXRhZCBkZSBsb3MgaW5ncmVzYW50ZXMgYSBDaWVuY2lhcyBOYXR1cmFsZXMgZGVsIENVQyB0aWVuZW4gcHJvbWVkaW8gaWd1YWwgYSAxMC4gQWwgZmluYWwgZGUgbGEgdGFibGEgYXBhcmVjZSBMZW5ndWFzIGRlbCBEQUQsIGxvIGN1YWwgZXMgZXNwZXJhYmxlIHlhIHF1ZSBlcyBsYSBvcmllbnRhY2nDs24gcXVlIHRpZW5lIG1lbm9yIG5vdGEgZGUgY29ydGUgKHZlciB0YWJsYSA0KS4KCiMjIMK/Q8OzbW8gc2UgZGlzdHJpYnV5ZW4gbG9zIHByb21lZGlvcyBkZSBsb3MgaW5ncmVzYW50ZXMgcG9yIG9yZGVuIGRlIG3DqXJpdG8/CgpFbiBsYXMgc2lndWllbnRlcyBmaWd1cmFzIHNlIGRpdmlkZW4gbG9zIHByb21lZGlvcyBkZSBsb3MgaW5ncmVzYW50ZXMgcG9yIG9yZGVuIGRlIG3DqXJpdG8gZW4gNSByYW5nb3MsIGxsYW1hZG9zIFIxLCBSMiwgUjMsIGV0Yy4gTGEgdGFibGEgNyBtdWVzdHJhIGxvcyByYW5nb3MgZGUgcHJvbWVkaW9zIChSYW5nb3MpLCBsYXMgZXRpcXVldGFzIGNvcnJlc3BvbmRpZW50ZXMgKEV0aXF1ZXRhKSB5IGxhIGNhbnRpZGFkIGRlIGluZ3Jlc2FudGVzIHBvciByYW5nbyAoSW5ncmVzYW50ZXMpLgoKU2UgbXVlc3RyYSBjw7NtbyBzZSBkaXN0cmlidXllbiBlc3RvcyBwcm9tZWRpb3MgcG9yIGNvbGVnaW8geSBwb3Igb3JpZW50YWNpw7NuIGVuIHVuIGdyw6FmaWNvIGFsdXZpb25hbC4gRWwgZWplIF95XyBkZSBsYXMgZmlndXJhcyByZXByZXNlbnRhIGxhIGNhbnRpZGFkIGRlIGluZ3Jlc2FudGVzIHBvciBvcmRlbiBkZSBtw6lyaXRvLiBMYXMgYWx0dXJhcyBkZSBsYXMgY2FqYXMgcGFyYSBsb3MgcmFuZ29zIFIxLCBSMiwgUjMsIGV0Yy4sIHJlcHJlc2VudGFuIGxhIHByb3BvcmNpw7NuIGRlIGluZ3Jlc2FudGVzIHF1ZSBzZSBlbmN1ZW50cmFuIGVuIGNhZGEgdW5hIGRlIGVzdGFzIGNhdGVnb3LDrWFzLgoKYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgZWNobz1GQUxTRSwgcmVzdWx0cz0naGlkZSd9CgpsaWJyYXJ5KGdnYWxsdXZpYWwpCmxpYnJhcnkoInZpcmlkaXMiKSAKbGlicmFyeShnZ2ZvcmNlKQpsaWJyYXJ5KGZvcmNhdHMpCmxpYnJhcnkoZ2dyZXBlbCkKCiMgU2UgY3JlYSB1biBudWV2byBkYXRhZnJhbWUgcGFyYSBncmFmaWNhciBsb3MgcmFuZ29zIGRlIG5vdGFzCmRhdGFfYWx1IDwtIGRhdGFfc20gJT4lIHVuZ3JvdXAoKSAlPiUKICBtdXRhdGUoSW5ncmVzYW50ZXMgPSByb3dfbnVtYmVyKCksIC5iZWZvcmUgPSAiRXNjdWVsYSIpICU+JQogIGdyb3VwX2J5KFJhbmdvcyA9IGN1dChQcm9tZWRpbywgYnJlYWtzID0gYyg5LjcwLCA5Ljg1LCA5LjkwLCA5Ljk1LCA5Ljk5OSwgMTAuMDApICkgKSAlPiUKICBncm91cF9ieShFdGlxdWV0YSA9IGN1dChQcm9tZWRpbywgYnJlYWtzID0gYyg5LjcwLCA5Ljg1LCA5LjkwLCA5Ljk1LCA5Ljk5OSwgMTAuMDApICkgKSAlPiUKICBtdXRhdGUoLiAsIEV0aXF1ZXRhID0gZmN0X3JlY29kZShFdGlxdWV0YSAsICJSMSIgPSAiKDkuOTk5LDEwXSIgKSkgJT4lCiAgbXV0YXRlKC4gLCBFdGlxdWV0YSA9IGZjdF9yZWNvZGUoRXRpcXVldGEgLCAiUjIiID0gIig5Ljk1LDkuOTk5XSIgKSkgJT4lCiAgbXV0YXRlKC4gLCBFdGlxdWV0YSA9IGZjdF9yZWNvZGUoRXRpcXVldGEgLCAiUjMiID0gIig5LjksOS45NV0iICkpICU+JQogIG11dGF0ZSguICwgRXRpcXVldGEgPSBmY3RfcmVjb2RlKEV0aXF1ZXRhICwgIlI0IiA9ICIoOS44NSw5LjldIiApKSAlPiUKICBtdXRhdGUoLiAsIEV0aXF1ZXRhID0gZmN0X3JlY29kZShFdGlxdWV0YSAsICJSNSIgPSAiKDkuNyw5Ljg1XSIgKSkgJT4lCiAgZ3JvdXBfYnkoT3JpZW50YWNpb24sIEVzY3VlbGEsIFByb21lZGlvKQoKZGF0YV9hbHUgJT4lIHVuZ3JvdXAoKSAlPiUKICBzZWxlY3QoUmFuZ29zLCBFdGlxdWV0YSkgJT4lIAogIGdyb3VwX2J5KEV0aXF1ZXRhLFJhbmdvcykgJT4lCiAgc3VtbWFyaXplKCBJbmdyZXNhbnRlcyA9IG4oKSApICU+JQogIGFycmFuZ2UoZGVzYyhFdGlxdWV0YSkpICU+JQogIHByaW50LmRhdGEuZnJhbWUoKSAlPiUKICBrYmwoY2FwdGlvbiA9ICJUYWJsYSA3OiBSYW5nb3MgZGUgcHJvbWVkaW9zLiIpICU+JQogIGthYmxlX2NsYXNzaWMoZnVsbF93aWR0aCA9IEYsIGh0bWxfZm9udCA9ICJDYW1icmlhIikgJT4lCiAga2FibGVfc3R5bGluZyhib290c3RyYXBfb3B0aW9ucyA9IGMoInN0cmlwZWQiLCAiaG92ZXIiLCAiY29uZGVuc2VkIiwgInJlc3BvbnNpdmUiKSkKCiMgR3JhZmljbyBBbHV2aW9uYWwgMQpnMSA8LSBkYXRhX2FsdSAlPiUgZmlsdGVyKEVzY3VlbGEgPT0gIkNVQyIpICU+JSBwbG90X2FsdV9lKC4sIHRleHRfY2FwPSJGaWd1cmEgMTogRGlzdHJpYnVjacOzbiBkZSBwcm9tZWRpb3MgcG9yIHJhbmdvcyBlbiBDVUMuIikKCmcyIDwtIGRhdGFfYWx1ICU+JSBmaWx0ZXIoRXNjdWVsYSA9PSAiTVoiKSAlPiUgcGxvdF9hbHVfZSguLCB0ZXh0X2NhcD0iRmlndXJhIDI6IERpc3RyaWJ1Y2nDs24gZGUgcHJvbWVkaW9zIHBvciByYW5nb3MgZW4gTVouIikKCmczIDwtIGRhdGFfYWx1ICU+JSBmaWx0ZXIoRXNjdWVsYSA9PSAiTUFHIikgJT4lIAogIHBsb3RfYWx1X2UoLiwgdGV4dF9jYXA9IkZpZ3VyYSAzOiBEaXN0cmlidWNpw7NuIGRlIHByb21lZGlvcyBwb3IgcmFuZ29zIGVuIE1BRy4iKQoKZzQgPC0gZGF0YV9hbHUgJT4lIGZpbHRlcihFc2N1ZWxhID09ICJMQUUiKSAlPiUgCiAgcGxvdF9hbHVfZSguLCB0ZXh0X2NhcD0iRmlndXJhIDQ6IERpc3RyaWJ1Y2nDs24gZGUgcHJvbWVkaW9zIHBvciByYW5nb3MgZW4gTEFFLiIpCgpnNSA8LSBkYXRhX2FsdSAlPiUgZmlsdGVyKEVzY3VlbGEgPT0gIkRBRCIpICU+JSAKICBwbG90X2FsdV9lKC4sIHRleHRfY2FwPSJGaWd1cmEgNTogRGlzdHJpYnVjacOzbiBkZSBwcm9tZWRpb3MgcG9yIHJhbmdvcyBlbiBEQUQuIikKCiMgZzYgPC0gZGF0YV9hbHUgJT4lIHBsb3RfYWx1X2UoLiwgdGV4dF9jYXA9IkZpZ3VyYSA2OiBEaXN0cmlidWNpw7NuIGRlIHByb21lZGlvcyBwb3IgcmFuZ29zIHkgb3JpZW50YWNpb25lcy4iKQoKIyBTYXZlIGZpbGVzCgphc3BlY3RfcmF0aW8gPC0gMS43NQpoZSA8LSA2CndlIDwtIDYKZ2dzYXZlKCIuL3VuY3VfYWx1XzEucG5nIiwgZzEsIGhlaWdodCA9IGhlICwgd2lkdGggPSB3ZSAqIGFzcGVjdF9yYXRpbykKZ2dzYXZlKCIuL3VuY3VfYWx1XzIucG5nIiwgZzIsIGhlaWdodCA9IGhlICwgd2lkdGggPSB3ZSAqIGFzcGVjdF9yYXRpbykKZ2dzYXZlKCIuL3VuY3VfYWx1XzMucG5nIiwgZzMsIGhlaWdodCA9IGhlICwgd2lkdGggPSB3ZSAqIGFzcGVjdF9yYXRpbykKZ2dzYXZlKCIuL3VuY3VfYWx1XzQucG5nIiwgZzQsIGhlaWdodCA9IGhlICwgd2lkdGggPSB3ZSAqIGFzcGVjdF9yYXRpbykKZ2dzYXZlKCIuL3VuY3VfYWx1XzUucG5nIiwgZzUsIGhlaWdodCA9IGhlICwgd2lkdGggPSB3ZSAqIGFzcGVjdF9yYXRpbykKIyBnZ3NhdmUoIi4vdW5jdV9hbHVfNi5wbmciLCBnNiwgaGVpZ2h0ID0gaGUgLCB3aWR0aCA9IHdlICogYXNwZWN0X3JhdGlvKQoKCmBgYAoKIVtdKC4vdW5jdV9hbHVfMS5wbmcpCkxhIGZpZ3VyYSAxIGV4cG9uZSBxdWUgZWwgQ1VDIHNvbG8gcmVjaWJlIHByb21lZGlvcyBkZSBsb3MgcmFuZ29zIFIxLCBSMiB5IFIzLiBTZSB2ZXJpZmljYSBxdWUgQ2llbmNpYXMgTmF0dXJhbGVzIHNvbG8gYWRtaXRlIGxvcyBtZWpvcmVzIHByb21lZGlvcywgbG9zIHF1ZSBlc3TDoW4gZW4gbG9zIHJhbmdvcyBSMSB5IFIyLgoKCiFbXSguL3VuY3VfYWx1XzIucG5nKQpMYSBmaWd1cmEgMiBtdWVzdHJhIHF1ZSBlbCBNWiByZWNpYmUgcHJvbWVkaW9zIGRlIGxvcyByYW5nb3MgUjEsIFIyLCBSMyB5IHVuYSBwZXF1ZcOxYSBwYXJ0ZSBkZSBSNC4gSW5mb3Jtw6F0aWNhIGVzdMOhIGNvbXB1ZXN0YSBtYXlvcml0YXJpYW1lbnRlIHBvciBwcm9tZWRpb3MgZGUgbG9zIHJhbmdvcyBSMSB5IFIyLiBFY29ub23DrWEgY2FwdGEgcHJvbWVkaW9zIGRlIGxvcyByYW5nb3MgUjEsIFIyIHkgUjMuIEZpbmFsbWVudGUsIENpZW5jaWFzIFNvY2lhbGVzIHJlY2liZSBwcm9tZWRpb3MgZGUgUjEsIFIyLCBSMyB5IGxhIHBlcXVlw7FhIHBhcnRlIGRlIFI0LgoKIVtdKC4vdW5jdV9hbHVfMy5wbmcpClNlZ8O6biBsYSBmaWd1cmEgMywgY29tbyBlbiBlbCBjYXNvIGRlbCBDVUMsIENpZW5jaWFzIE5hdHVyYWxlcyBkZWwgTUFHIHRhbWJpw6luIHJlY2liZSBsb3MgbWVqb3JlcyBwcm9tZWRpb3MuIExlIHNpZ3VlbiBsYXMgb3JpZW50YWNpb25lcyBkZSBDb211bmljYWNpw7NuIHkgQ2llbmNpYXMgU29jaWFsZXMuCgoKIVtdKC4vdW5jdV9hbHVfNC5wbmcpCkVuIGxhIGZpZ3VyYSA0IHNlIHZlIHF1ZSBsYSDDum5pY2Egb3JpZW50YWNpw7NuIHF1ZSBvZnJlY2UgZWwgTEFFIHJlY2liZSBwcm9tZWRpb3MgZGUgbG9zIDUgcmFuZ29zLgoKIVtdKC4vdW5jdV9hbHVfNS5wbmcpCgpMYSBmaWd1cmEgNSBleHBvbmUgcXVlIGFscmVkZWRvciBkZSBsYSBtaXRhZCBkZSBsb3MgaW5ncmVzYW50ZXMgYWwgREFEIGVzdMOhbiBlbiBlbCByYW5nbyBSNS4gWSBlcyBMZW5ndWFzIGxhIHF1ZSByZWNpYmUgbGEgbWF5b3IgcGFydGUgZGUgZXN0ZSByYW5nby4KCjwhLS0gIVtdKC4vdW5jdV9hbHVfNi5wbmcpIC0tPgoKIyMgQ29uY2x1c2lvbmVzCgpFbiBlc3RlIHJlcG9ydGUgc2UgYW5hbGl6YW4gbG9zIGRhdG9zIHByb3Zpc3RvcyBwb3IgbGEgVU5DdXlvIHBhcmEgZWwgaW5ncmVzbyBkZSBhbHVtbm9zIGRlIG5pdmVsIHByaW1hcmlvIGEgbGFzIGVzY3VlbGFzIGRlIG5pdmVsIHNlY3VuZGFyaW8gZGVwZW5kaWVudGVzIGRlIGxhIFVOQ3V5byBlbiBlbCBhw7FvIDIwMjIuIEx1ZWdvIGRlIHRvZG8gbG8gZXhwdWVzdG8gZW4gZXN0ZSBhbsOhbGlzaXMsIHNlIGxsZWdhbiBhIGxhcyBzaWd1aWVudGVzIGNvbmNsdXNpb25lcy4KClVuYSBwcmltZXJhIGNvbmNsdXNpw7NuIHF1ZSBzZSBwdWVkZSBzYWNhciBlcyBxdWUgQ1VDIGVzIGVsIHJleS4gRXMgZWwgY29sZWdpbyBjb24gbWF5b3IgZGVtYW5kYSBwb3IgcGFydGUgZGUgbG9zIGFsdW1ub3MgZGVsIENWQS4gQXNpbWlzbW8sIGVzIGxhIGVzY3VlbGEgcXVlIGFsYmVyZ2EgbcOhcyBpbmdyZXNhbnRlcyBwb3Igb3JkZW4gZGUgbcOpcml0byBjb24gcHJvbWVkaW8gaWd1YWwgYSAxMCB5IHBvc2VlIGxhcyBub3RhcyBkZSBjb3J0ZSBtw6FzIGFsdGFzIHBhcmEgc3VzIDMgb3JpZW50YWNpb25lcy4gRW4gY29uc2VjdWVuY2lhLCBlcyBtw6FzIGRpZsOtY2lsIGluZ3Jlc2FyIGFsIENVQyBxdWUgYWwgcmVzdG8gZGUgbG9zIDQgY29sZWdpb3Mgc2VjdW5kYXJpb3MuIFNpIHNlIG9yZGVuYW4gbG9zIGNvbGVnaW9zIHBvciBub3RhcyBkZSBjb3J0ZSBkZSBtYXlvciBhIG1lbm9yLCBlbCBjb2xlZ2lvIE1aIGxlIHNpZ3VlIGRlIGNlcmNhIGFsIENVQzsgbHVlZ28gdmllbmVuIE1BRywgTEFFIHkgZmluYWxtZW50ZSBlbCBEQUQuCgpQb3IgZWwgbGFkbyBkZSBsYXMgb3JpZW50YWNpb25lcywgc2Ugb2JzZXJ2YSB1bmEgZ3JhbiBkZW1hbmRhIGVuIEFydGVzIGUgSW5mb3Jtw6F0aWNhLiBBbWJhcyBvcmllbnRhY2lvbmVzIG9mcmVjZW4gNjAgcGxhemFzIGNhZGEgdW5hLCBwZXJvIGxvcyBhbHVtbm9zIGRlbCBDVkEgdG9tYXJvbiAxMCB5IDkgcGxhemFzIHJlc3BlY3RpdmFtZW50ZSwgc2llbmRvIGVzdGFzIG9yaWVudGFjaW9uZXMgbGFzIG3DoXMgZGVtYW5kYWRhcyBwb3IgbG9zIGVncmVzYWRvcyBkZWwgQ1ZBLCBsdWVnbyBkZSBDaWVuY2lhcyBOYXR1cmFsZXMgY29uIDE1IHBsYXphcyB5IHBlcm8gY29uIDIxMCB2YWNhbnRlcyAodmVyIHRhYmxhIDIpLiBFbiBjb25zZWN1ZW5jaWEsIGxhcyB2YWNhbnRlcyBlZmVjdGl2YXMgZnVlcm9uIGRlIDUwIHBhcmEgQXJ0ZSB5IGRlIDUxIHBhcmEgSW5mb3Jtw6F0aWNhLiBFc3RhIGFsdGEgZGVtYW5kYSB0YW1iacOpbiBzZSBvYnNlcnZhIGVuIGxvcyBpbmdyZXNhbnRlcyBwb3Igb3JkZW4gZGUgbcOpcml0byB5YSBxdWUgSW5mb3Jtw6F0aWNhIHNvbG8gcmVjaWJlIGluZ3Jlc2FudGVzIGRlIGxvcyBncnVwb3MgUjEsIFIyIHkgdW5hIHBlcXVlw7FhIHBvcmNpw7NuIGRlIFIzICh2ZXIgZmlndXJhIDIpLCB5IEFydGVzIHNvbG8gcmVjaWJlIGRlIGxvcyBncnVwb3MgUjEsIFIyIHkgUjMgKHZlciBmaWd1cmEgMSkuIEVsIHJlc3RvIGRlIGxhcyBvcmllbnRhY2lvbmVzIHJlY2liZW4gaW5ncmVzYW50ZXMgZGUgbG9zIDUgZ3J1cG9zIGRlIHByb21lZGlvcy4gU2kgYmllbiBDaWVuY2lhcyBOYXR1cmFsZXMgZGVsIENVQyBlcyBsYSBlc2N1ZWxhIHkgb3JpZW50YWNpw7NuIGNvbiBtYXlvciBub3RhIGRlIGNvcnRlIHkgbWF5b3IgY2FudGlkYWQgZGUgaW5ncmVzYW50ZXMgY29uIHByb21lZGlvIGlndWFsIGEgMTAsIGVzdGEgb3JpZW50YWNpw7NuIHRhbWJpw6luIHNlIGVuY3VlbnRyYSBlbiBsYXMgZXNjdWVsYXMgTUFHIHkgREFELCBsbyBxdWUgcHJvZHVjZSBxdWUgZ2xvYmFsbWVudGUgc2VhIHVuYSBvcmllbnRhY2nDs24gcmVsYXRpdmFtZW50ZSBhY2Nlc2libGUgcGFyYSBzdSBpbmdyZXNvLgoKRW4gZWwgb3RybyBleHRyZW1vIHNlIGVuY3VlbnRyYSBMZW5ndWFzLiBFc3RhIG9yaWVudGFjacOzbiBvZnJlY2UgMTIwIHZhY2FudGVzIHkgc29sbyA0IGFsdW1ub3MgZGVsIENWQSBsYSBoYW4gZWxlZ2lkby4gRXN0YSBvcmllbnRhY2nDs24gcmVjaWJlIHN1IGdyYW4gbWF5b3LDrWEgZGUgaW5ncmVzYW50ZXMgcG9yIG9yZGVuIGRlIG3DqXJpdG8gZGVsIGdydXBvIFI1LCBsbyBxdWUgcHJvZHVjZSBxdWUgc2VhIGxhIG9yaWVudGFjacOzbiBjb24gbGEgbWVub3Igbm90YSBkZSBjb3J0ZS4KCkEgbGEgbHV6IGRlIGVzdG9zIHJlc3VsdGFkb3MsIGVzIGV2aWRlbnRlIHF1ZSBsYSBkZW1hbmRhIHBvciBpbmdyZXNhciBhIEFydGVzIGUgSW5mb3Jtw6F0aWNhIGVzIGFsdGEsIHRhbnRvIGRlIGxvcyBpbmdyZXNhbnRlcyBwb3Igb3JkZW4gZGUgbcOpcml0byBjb21vIHBvciBsb3MgZWdyZXNhZG9zIGRlbCBDVkEuIFVuYSBzb2x1Y2nDs24gcGFyYSBtaXRpZ2FyIGVzdGEgc2l0dWFjacOzbiBlcyBsYSBjcmVhciBudWV2YXMgZGl2aXNpb25lcyBwYXJhIGVzdGFzIDIgb3JpZW50YWNpb25lcywgdGFsIHZleiBlbiBkaWZlcmVudGVzIGNvbGVnaW9zIHNpIG5vIGVzdMOhbiBkYWRhcyBsYXMgY29uZGljaW9uZXMgZWRpbGljaWFzIGVuIE1aIG8gQ1VDLiBEZSBlc3RhIG1hbmVyYSBzZSBwb2Ryw61hIHNhdGlzZmFjZXIgZGUgbWVqb3IgbWFuZXJhIGxhIGFjdHVhbCBkZW1hbmRhIHF1ZSB0aWVuZW4gZXN0YXMgMiBvcmllbnRhY2lvbmVzLiBQb3Igb3RybyBsYWRvLCBzZSBwb2Ryw61hIHJlZXZhbHVhciBzaSBMZW5ndWFzIHJlYWxtZW50ZSBuZWNlc2l0YSBvZnJlY2VyIDEyMCB2YWNhbnRlcy4KCkVuIHRlcmNlciBsdWdhciwgY2FiZSBkZWRpY2FyIGFsZ3VuYXMgcGFsYWJyYXMgYSBsb3MgaW5ncmVzYW50ZXMgcG9yIG9yZGVuIGRlIG3DqXJpdG8gY29uIHByb21lZGlvIGlndWFsIGEgMTAuIERlIHVuIHRvdGFsIGRlIDk3MSBpbmdyZXNhbnRlcyBwb3Igb3JkZW4gZGUgbcOpcml0bywgMTgzIHRpZW5lbiBlbCBtw6FzIGFsdG8gcHJvbWVkaW8uIEVzdG8gcmVwcmVzZW50YSB1biAxOSUgZGUgbG9zIGluZ3Jlc2FudGVzIHBvciBvcmRlbiBkZSBtw6lyaXRvLiBFc3RvIHNlIHRyYWR1Y2UgZW4gcXVlIGVsIDE5JSBkZSBsb3MgaW5ncmVzYW50ZXMgc29sbyBvYnR1dmllcm9uIG5vdGFzIGlndWFsZXMgYSAxMCBlbiBjdWFydG8geSBxdWludG8gZ3JhZG9zLiBTaSBiaWVuIGVzdGEgY2lmcmEgcGFyZWNlIGJhc3RhbnRlIGFsdGEsIHNlcsOtYSBjb252ZW5pZW50ZSBjb25vY2VyIGVsIHRvdGFsIGRlIHBvc3R1bGFudGVzLCBsb3MgcXVlIGluZ3Jlc2Fyb24geSBsb3MgcXVlIG5vLCBwYXJhIGxsZWdhciBhIHVuYSByZXNwdWVzdGEgY29uY2x1eWVudGUuIFBvciBvdHJhIHBhcnRlLCBjb21vIGVzdGUgYcOxbyBzb2xvIHNlIHRvbWFyb24gbGFzIG5vdGFzIGRlIGN1YXJ0byB5IHF1aW50byBncmFkb3MsIGVzdG8gcHVkbyBwcm9kdWNpciB1biBhdW1lbnRvIG5vdGFibGUgZGUgaW5ncmVzYW50ZXMgcG9yIG9yZGVuIGRlIG3DqXJpdG8gY29uIHByb21lZGlvIGlndWFsIGEgMTAuIFBvciBlbGxvLCBzZXLDrWEgY29udmVuaWVudGUgdmVyaWZpY2FyIHNpIGVzdGUgYWx0byBwb3JjZW50YWplIHRhbWJpw6luIHNlIG9ic2VydmEgZW4gYcOxb3MgYW50ZXJpb3Jlcy4KCkZpbmFsbWVudGUsIHF1ZXJlbW9zIGNvbXBhcnRpciBxdWUgZHVyYW50ZSBsYSBlbGFib3JhY2nDs24gZGUgZXN0ZSBpbmZvcm1lIHTDqWNuaWNvLCBhbCB0cmF0YXIgZXN0ZSB0ZW1hIGNvbiBkaWZlcmVudGVzIHBlcnNvbmFzLCBzaWVtcHJlIHN1cmdpw7MgbGEgcHJlZ3VudGEgZGUgcXVlIHNpIGVsIHNpc3RlbWEgZGUgaW5ncmVzbyBiYXNhZG8gZW4gcG9zdHVsYXIgY29uIHVuIHByb21lZGlvIGRlIG5vdGFzIGRlbCBuaXZlbCBwcmltYXJpbyBlcyB1biBzaXN0ZW1hIGp1c3RvLCBvIGFsIG1lbm9zIG3DoXMganVzdG8gcXVlIGVsIHNpc3RlbWEgYW50ZXJpb3IsIGVsIGN1YWwgZXN0YWJhIGJhc2FkbyBlbiB0b21hciB1biBleGFtZW4gZGUgaW5ncmVzby4gUXVlcmVtb3MgZGVzdGFjYXIgZXN0byBwb3JxdWUsIGFsIHBhcmVjZXIsIGVzIHVuYSBwcmVndW50YSBxdWUgc2UgaGFjZSBtdWNoYSBnZW50ZS4gRWwgc2lzdGVtYSBhY3R1YWwgZGUgaW5ncmVzbyBzZSBiYXNhIGVuIGxhIGhpcMOzdGVzaXMgZGUgcXVlIHRvZGFzIGxhcyBlc2N1ZWxhcyBkZWwgbml2ZWwgaW5pY2lhbCBkZSBsYSBwcm92aW5jaWEgZGUgTWVuZG96YSB0aWVuZW4gZWwgbWlzbW8gbml2ZWwgZGUgZXhpZ2VuY2lhLiBFbiBwcmluY2lwaW8sIGVzdGEgcGFyZWNlIHVuYSBoaXDDs3Rlc2lzIG11eSBmdWVydGUuIEVzdMOhIGNsYXJvIHF1ZSBlc3RhIGhpcMOzdGVzaXMgbm8gcHVlZGUgc2VyIG5pIGFjZXB0YWRhIG5pIHJlY2hhemFkYSBjb24gbG9zIGRhdG9zIHF1ZSBzZSB1c2Fyb24gZHVyYW50ZSBlc3RlIHRyYWJham8uIFBhcmEgZWxsbywgYSBudWVzdHJvIGVudGVuZGVyLCBkZWJlcsOtYW1vcyB0ZW5lciBkYXRvcyBkZWwgZGVzZW1wZcOxbyBkZSBsb3MgaW5ncmVzYW50ZXMgZHVyYW50ZSBzdSBwcmltZXIgYcOxbyBkZSBzZWN1bmRhcmlhLiBEZSBlc3RhIGZvcm1hIHNlIHBvZHLDrWEgc2FiZXIgc2kgYWx1bW5vcyBxdWUgaW5ncmVzYXJvbiBjb24gdW4gcHJvbWVkaW8gYWx0byBsdWVnbyB0dXZpZXJvbiB1biBkZXNlbXBlw7FvIHNhdGlzZmFjdG9yaW8gc2Vnw7puIGxvcyBlc3TDoW5kYXJlcyBkZSBsYXMgZXNjdWVsYXMgZGUgbml2ZWwgc2VjdW5kYXJpbyBkZSBsYSBVTkN1eW8sIG8gbm8uIFkgZW4gY29uc2VjdWVuY2lhLCBwb2RlciBzYWJlciBzaSBlbCBzaXN0ZW1hIGRlIGluZ3Jlc28gcG9yIHByb21lZGlvIGRlIG5vdGFzIGdhcmFudGl6YSBxdWUgaW5ncmVzZW4gbG9zIG1lam9yZXMgYWx1bW5vcy4KCgojIyBBZ3JhZGVjaW1pZW50bwoKTG9zIGF1dG9yZXMgYWdyYWRlY2VuIGxvcyBjb21lbnRhcmlvcyB5IGNvcnJlY2Npb25lcyBkZSBsYSBQcm9mLiBNYXLDrWEgRWxlbmEgQXJtZW5kYXJpeiwgUHNpY29wZWRhZ29nYSB5IFByb2Zlc29yYSBlbiBDaWVuY2lhcyBQc2ljb3BlZGFnw7NnaWNhcywgbG9zIGN1YWxlcyBoYW4gYXl1ZGFkbyBhIGVucmlxdWVjZXIgZXN0ZSByZXBvcnRlLgoKCjwhLS0gIyMgQW5leG86IGZ1bmNpb25lcyBhdXhpbGlhcmVzIC0tPgoKPCEtLSBGdW5jacOzbiBgYHVuY3VfMl9kZmBgLiAtLT4KCgpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBlY2hvPUZBTFNFfQoKdW5jdV8yX2RmIDwtIGZ1bmN0aW9uKHRleHQpCnsKICB3cml0ZS5jc3YoIHRleHQsIGZpbGU9Ii4vdGV4dC50eHQiLAogICAgICAgICAgICAgY29sLm5hbWVzID0gRkFMU0UsCiAgICAgICAgICAgICByb3cubmFtZXMgPSBGQUxTRSApCiAgZGF0YSA8LSByZWFkcjo6cmVhZF9md2YoCiAgICBmaWxlID0gIi4vdGV4dC50eHQiLAogICAgY29sX3Bvc2l0aW9ucyA9IGZ3Zl93aWR0aHMoIGMoMjEsIDUwLCAzNiwgMjIsIDE1KSAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sX25hbWVzID0gYygiUHJlaW5zY3JpcGNpb24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkVzY3VlbGEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk9yaWVudGFjaW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcm9tZWRpbyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQWxlYXRvcmlvIikKICAgICksCiAgICBjb2xfdHlwZXMgPSBjKCJpIiwgImMiLCAiYyIsICJkIiwgImkiKSAsCiAgICBza2lwID0gNSwKICApCiAgZGF0YSA8LSBkYXRhICU+JSBmaWx0ZXIgKCFpcy5uYShQcmVpbnNjcmlwY2lvbikpCiAgCiAgZGF0YSA8LSBkYXRhICU+JQogICAgbXV0YXRlX2F0KCJQcm9tZWRpbyIsIHN0cl9yZXBsYWNlLCAiLCIgLCAiLiIpICU+JQogICAgbXV0YXRlX2F0KCJFc2N1ZWxhIiwgc3RyX3JlcGxhY2UsCiAgICAgICAgICAgICAgIkNvbGVnaW8gVW5pdmVyc2l0YXJpbyBDZW50cmFsIEpvc8OpIGRlIFNhbiBNYXJ0aW4iICwgIkNVQyIpICU+JQogICAgbXV0YXRlX2F0KCJFc2N1ZWxhIiwgc3RyX3JlcGxhY2UsCiAgICAgICAgICAgICAgIkRlcGFydGFtZW50byBkZSBBcGxpY2FjacOzbiBEb2NlbnRlIiAsICJEQUQiKSAlPiUKICAgIG11dGF0ZV9hdCgiRXNjdWVsYSIsIHN0cl9yZXBsYWNlLAogICAgICAgICAgICAgICJFc2N1ZWxhIGRlIENvbWVyY2lvIE1hcnTDrW4gWmFwYXRhIiAsICJNWiIpICU+JQogICAgbXV0YXRlX2F0KCJFc2N1ZWxhIiwgc3RyX3JlcGxhY2UsCiAgICAgICAgICAgICAgIkVzY3VlbGEgZGVsIE1hZ2lzdGVyaW8iICwgIk1BRyIpICU+JQogICAgbXV0YXRlX2F0KCJPcmllbnRhY2lvbiIsIHN0cl9yZXBsYWNlLAogICAgICAgICAgICAgICJDaWVuY2lhcyBTb2NpYWxlcyB5IEh1bWFuaWRhZGVzIiAsICJDaWVuY2lhcyBTb2NpYWxlcyIpICU+JQogICAgbXV0YXRlX2F0KCJPcmllbnRhY2lvbiIsIHN0cl9yZXBsYWNlLAogICAgICAgICAgICAgICJBcnRlIE11bHRpbWVkaWEiICwgIkFydGUiKSAlPiUKICAgIG11dGF0ZV9hdCgiT3JpZW50YWNpb24iLCBzdHJfcmVwbGFjZSwKICAgICAgICAgICAgICAiRWNvbm9tw61hIHkgQWRtaW5pc3RyYWNpw7NuIiAsICJFY29ub23DrWEiKSAlPiUKICAgIGFycmFuZ2UoIG1hdGNoKEVzY3VlbGEsIGMoIkNVQyIsICJNWiIsICJNQUciLCAiREFEIikgKSApCiAgCiAgb3B0aW9ucyhkaWdpdHMgPSA2KQogIGRhdGEgPC0gZGF0YSAlPiUgbXV0YXRlICggUHJvbWVkaW8gPSBhcy5kb3VibGUoUHJvbWVkaW8pKQogIAogIHN5c3RlbSgicm0gLi90ZXh0LnR4dCIpCiAgcmV0dXJuKGRhdGEpCn0KCmBgYAoKPCEtLSBGdW5jacOzbiBgYGxhZV8yX2RmYGAuIC0tPgoKYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgZWNobz1GQUxTRX0KCmxhZV8yX2RmIDwtIGZ1bmN0aW9uKHRleHQpCnsKICB3cml0ZS5jc3YoIHRleHQsIGZpbGU9Ii4vdGV4dC50eHQiLAogICAgICAgICAgICAgY29sLm5hbWVzID0gRkFMU0UsCiAgICAgICAgICAgICByb3cubmFtZXMgPSBGQUxTRSApCiAgZGF0YSA8LSByZWFkcjo6cmVhZF9md2YoCiAgICBmaWxlID0gIi4vdGV4dC50eHQiLAogICAgY29sX3Bvc2l0aW9ucyA9IGZ3Zl93aWR0aHMoIGMoMjgsIDIwLCA4KSAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sX25hbWVzID0gYygiT3JkZW4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByZWluc2NyaXBjaW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcm9tZWRpbyIpCiAgICApLAogICAgY29sX3R5cGVzID0gYygiaSIsICJpIiwgImQiKSAsCiAgICBza2lwID0gMywKICApCiAgZGF0YSA8LSBkYXRhICU+JSBmaWx0ZXIgKCFpcy5uYShQcmVpbnNjcmlwY2lvbikpCiAgCiAgZGF0YSA8LSBkYXRhICU+JQogICAgbXV0YXRlX2F0KCJQcm9tZWRpbyIsIHN0cl9yZXBsYWNlLCAiLCIgLCAiLiIpICU+JQogICAgYWRkX2NvbHVtbihFc2N1ZWxhID0gIkxBRSIsIC5iZWZvcmUgPSAiUHJvbWVkaW8iKSAlPiUKICAgIGFkZF9jb2x1bW4oT3JpZW50YWNpb24gPSAiVGVjbm9sb2fDrWEgQWxpbWVudGFyaWEiLCAuYmVmb3JlID0gIlByb21lZGlvIikgJT4lCiAgICBzZWxlY3QoRXNjdWVsYSwgT3JpZW50YWNpb24sIFByb21lZGlvKQogIAogIG9wdGlvbnMoZGlnaXRzID0gNikKICBkYXRhIDwtIGRhdGEgJT4lIG11dGF0ZSAoIFByb21lZGlvID0gYXMuZG91YmxlKFByb21lZGlvKSkKICAKICBzeXN0ZW0oInJtIC4vdGV4dC50eHQiKQogIAogIHJldHVybihkYXRhKQp9CmBgYAoKPCEtLSBGdW5jacOzbiBgYHBsb3RfYWx1X2VgYC4gLS0+CgpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBlY2hvPUZBTFNFfQoKcGxvdF9hbHVfZSA8LSBmdW5jdGlvbihkYXRhLCB0ZXh0X2NhcCkKewogIGRhdGEgJT4lCiAgICAKICAgIGdncGxvdCggYWVzKAogICAgICBheGlzMSA9IEV0aXF1ZXRhLAogICAgICBheGlzMiA9IE9yaWVudGFjaW9uLCApLAogICAgKSArICMKICAgICMgZ2VvbV9hbGx1dml1bSggYWVzKGZpbGwgPSBSYW5nb3MsIGNvbG9yID0gUmFuZ29zICksCiAgICAjIHdpZHRoID0gMS8xMiAsCiAgICAjIGFscGhhID0gMC4zNSAsCiAgICAjIHJldmVyc2UgPSBGQUxTRSwKICAgICMgKSArCiAgICBnZW9tX2Zsb3coYWVzKGZpbGwgPSBSYW5nb3MsIGNvbG9yID0gUmFuZ29zICksCiAgICAgICAgICAgICAgY3VydmVfdHlwZSA9ICJzaWdtb2lkIiwKICAgICAgICAgICAgICB3aWR0aCA9IDEvMTAsCiAgICAgICAgICAgICAgYWxwaGEgPSAwLjc1LAogICAgICAgICAgICAgIHJldmVyc2UgPSBGQUxTRSwpICsgCiAgICBnZW9tX3N0cmF0dW0od2lkdGggPSAxLzYgLCBmaWxsID0gIndoaXRlIiwKICAgICAgICAgICAgICAgICBjb2xvciA9ICJibGFjayIsCiAgICAgICAgICAgICAgICAgcmV2ZXJzZSA9IEZBTFNFLAogICAgICAgICAgICAgICAgICMgcG9zaXRpb24gPSAxLAogICAgKSArCiAgICAjIGdlb21fbGFiZWwoc3RhdCA9ICJzdHJhdHVtIiwKICAgICMgwqAgwqAgwqAgwqAgwqAgwqBhZXMobGFiZWwgPSBhZnRlcl9zdGF0KHN0cmF0dW0pKSwKICAgICMgwqAgwqAgwqAgwqAgwqAgwqByZXZlcnNlID0gRkFMU0UsCiAgICAjIMKgIMKgIMKgIMKgIMKgIMKgc2l6ZSA9IDMsCiAgICAjIMKgIMKgIMKgIMKgIMKgIMKgY29sb3IgPSAiYmxhY2siLAogICAgIyDCoCDCoCDCoCDCoCDCoCDCoCkgKwogICAgc2NhbGVfeF9kaXNjcmV0ZShsaW1pdHMgPSBjKCJSYW5nb3MiLCAiT3JpZW50YWNpb24iKSwKICAgICAgICAgICAgICAgICAgICAgZXhwYW5kID0gYygwLjIgLCAwLjIpICkgKwogICAgc2NhbGVfY29sb3JfdmlyaWRpcyhkaXNjcmV0ZSA9IFRSVUUsIG9wdGlvbiA9ICJEIikgKwogICAgc2NhbGVfZmlsbF92aXJpZGlzKCBkaXNjcmV0ZSA9IFRSVUUsIG9wdGlvbiA9ICJEIikgKwogICAgIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogIGdncmVwZWw6Omdlb21fdGV4dF9yZXBlbCgKICAgIGFlcyhsYWJlbCA9IGlmZWxzZShhZnRlcl9zdGF0KHgpID09IDEsIGFzLmNoYXJhY3RlcihhZnRlcl9zdGF0KHN0cmF0dW0pKSwgTkEpKSwKICAgIHN0YXQgPSAic3RyYXR1bSIsIHNpemUgPSAzLjY1LCBkaXJlY3Rpb24gPSAieSIsIG51ZGdlX3ggPSAwLCByZXZlcnNlID0gRkFMU0UsCiAgKSArIGdncmVwZWw6Omdlb21fdGV4dF9yZXBlbCgKICAgIGFlcyhsYWJlbCA9IGlmZWxzZShhZnRlcl9zdGF0KHgpID09IDIsIGFzLmNoYXJhY3RlcihhZnRlcl9zdGF0KHN0cmF0dW0pKSwgTkEpKSwKICAgIHN0YXQgPSAic3RyYXR1bSIsIHNpemUgPSAzLjY1LCBkaXJlY3Rpb24gPSAieSIsIG51ZGdlX3ggPSArLjM1LCByZXZlcnNlID0gRkFMU0UsCiAgKSArCiAgICAjPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgdGhlbWVfYncoKSArCiAgICB0aGVtZSh0ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMywgZmFtaWx5ID0gJ0FyaWFsJykpICsKICAgIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEzLCBmYW1pbHkgPSAnQXJpYWwnKSkgKwogICAgZ2d0aXRsZSh0ZXh0X2NhcCkKICAKfQoKIyDCoCAjPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiMgwqBnZ3JlcGVsOjpnZW9tX3RleHRfcmVwZWwoCiMgwqAgYWVzKGxhYmVsID0gaWZlbHNlKGFmdGVyX3N0YXQoeCkgPT0gMSwgYXMuY2hhcmFjdGVyKGFmdGVyX3N0YXQoc3RyYXR1bSkpLCBOQSkpLAojIMKgIHN0YXQgPSAic3RyYXR1bSIsIHNpemUgPSAzLjY1LCBkaXJlY3Rpb24gPSAieSIsIG51ZGdlX3ggPSAwLCByZXZlcnNlID0gRkFMU0UsCiMgKSArIMKgZ2dyZXBlbDo6Z2VvbV90ZXh0X3JlcGVsKAojIMKgIGFlcyhsYWJlbCA9IGlmZWxzZShhZnRlcl9zdGF0KHgpID09IDIsIGFzLmNoYXJhY3RlcihhZnRlcl9zdGF0KHN0cmF0dW0pKSwgTkEpKSwKIyDCoCBzdGF0ID0gInN0cmF0dW0iLCBzaXplID0gMy42NSwgZGlyZWN0aW9uID0gInkiLCBudWRnZV94ID0gKy4zNSwgcmV2ZXJzZSA9IEZBTFNFLAojICkgKwojIMKgICM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCmBgYAo8L2JyPgo8L2JyPgo8L2JyPgo=