Qué se estudió
Pregunta de investigación: ¿cambia la comprensión
promedio del paciente sobre su cirugía de reemplazo total de rodilla
según el formato de consentimiento, considerando las diferencias
iniciales entre bloques?
Se comparan 18 pacientes distribuidos en seis bloques de
tres. Cada bloque reúne a personas con alfabetización en salud
inicial semejante. Dentro de cada bloque, una persona recibe T1, otra T2
y otra T3 mediante el sorteo que representa este ejemplo.
| T1 · Control |
Formato tradicional legal y textual. |
| T2 |
Documento simplificado con infografías físicas
impresas. |
| T3 |
Consentimiento digital con infografías y firma
electrónica. |
La respuesta es un puntaje post-consentimiento de 0 a
100. Un valor mayor representa mayor comprensión. Todos los
datos son ficticios: no proceden del BICEP ni de otro cuestionario
aplicado. En una investigación real debe utilizarse un instrumento
validado para el idioma, población y contexto quirúrgico, con sus reglas
de puntuación.
Resultado principal del ejemplo. Al considerar los
bloques, el ANOVA detecta diferencias entre tratamientos: F = 80,357 y p
< 0,001. La magnitud de cada diferencia se presenta mediante
intervalos de Tukey. Esto describe el ejemplo y no demuestra eficacia
clínica real.
Por qué se utilizaron
bloques
Una persona familiarizada con información de salud podría obtener un
puntaje alto con cualquiera de los formatos. Si esas diferencias
iniciales se mezclan con las modalidades, puede ser más difícil
distinguir el efecto del formato. El DBCA organiza la comparación entre
personas inicialmente semejantes y separa estadísticamente la variación
entre bloques.
Los bloques se forman antes de presentar el
consentimiento, usando una característica inicial, no el
puntaje final. En este ejemplo, B1 reúne puntajes iniciales de 34 a 37 y
B6 de 83 a 86. La escala inicial es ficticia y no debe interpretarse
como un instrumento validado ni como una categoría clínica.
Tabla 1. Cada fila contiene tres pacientes distintos, uno por
modalidad.
| B1 |
34 |
37 |
58.0 |
65.5 |
73.0 |
| B2 |
43 |
46 |
62.5 |
73.0 |
79.5 |
| B3 |
53 |
56 |
68.0 |
79.5 |
80.0 |
| B4 |
63 |
66 |
74.5 |
80.5 |
89.0 |
| B5 |
73 |
76 |
80.0 |
88.0 |
90.5 |
| B6 |
83 |
86 |
82.5 |
91.5 |
94.0 |
No es un estudio en el que la misma persona prueba tres
consentimientos. Las comparaciones se relacionan por pertenecer
al mismo bloque, no por corresponder al mismo paciente.
Cómo se distribuyeron
los puntajes
Tabla 2. Descripción de los puntajes sin retirar el efecto del
bloque.
| T1 · Texto legal |
6 |
70.92 |
9.75 |
71.25 |
58.0 |
82.5 |
| T2 · Infografía impresa |
6 |
79.67 |
9.54 |
80.00 |
65.5 |
91.5 |
| T3 · Digital y firma |
6 |
84.33 |
8.05 |
84.50 |
73.0 |
94.0 |
La media es el promedio de cada modalidad. La
mediana es el centro de sus puntajes ordenados. La
desviación estándar resume la dispersión entre
pacientes, incluida aquí la variación relacionada con los bloques. Por
eso, la dispersión de esta tabla no equivale al error residual del
modelo ajustado.
Cómo leer el gráfico. Cada punto es una persona. La
línea central de cada caja es la mediana y la caja contiene la mitad
central de los puntajes. Los bigotes llegan a los valores observados
dentro de 1,5 rangos intercuartílicos de la caja; todos los puntos
siguen visibles.
Qué aportan las líneas. Permiten seguir a cada
bloque a través de T1, T2 y T3. Una línea ascendente indica que las
personas de ese bloque obtuvieron puntajes mayores con las modalidades
situadas a la derecha. No representa la mejoría de una misma persona ni
una evolución en el tiempo.
Qué se observa. En estos datos, los seis bloques
mantienen el orden T3 > T2 > T1. También hay diferencias
verticales entre bloques. Aunque las cajas se superponen, la comparación
dentro de cada bloque es consistente. Por eso se utiliza el análisis
ajustado y no se decide el resultado solamente mirando las cajas.
Qué diferencias detectó
el análisis
Comparación global
con ANOVA
El modelo separa la comprensión observada en nivel general,
efecto del bloque, efecto del tratamiento y error restante. La
hipótesis principal plantea que las tres medias de tratamiento son
iguales después de considerar los bloques.
Tabla 3. ANOVA del DBCA. La pregunta principal corresponde a la
fila Tratamiento.
| Bloque |
5 |
1220.24 |
244.05 |
70,455 |
< 0,001 |
| Tratamiento |
2 |
556.69 |
278.35 |
80,357 |
< 0,001 |
| Error residual |
10 |
34.64 |
3.46 |
— |
— |
El ANOVA aporta evidencia de diferencias entre tratamientos en este
escenario. El valor p no indica cuántos puntos se gana ni representa la
probabilidad de que un tratamiento sea el mejor. Además, los bloques se
mantienen en el modelo por el diseño, sin decidir retirarlos según su
valor p.
Como medida complementaria, eta cuadrado parcial del tratamiento es
0,941. Describe la proporción de variación atribuible al tratamiento
respecto a tratamiento más error, una vez considerado el bloque.
No es un porcentaje de pacientes beneficiados ni una
medida de comprensión individual.
El diseño tiene una persona por combinación de bloque y tratamiento.
En consecuencia, el modelo supone aditividad: no puede estimar por
separado una interacción tratamiento por bloque y el error. Las líneas
de la figura ayudan a explorar el patrón, pero no resuelven esa
limitación.
Comparaciones de
Tukey
Tukey compara cada par de modalidades utilizando el error residual
del DBCA e intervalos simultáneos del 95 %. En este diseño completo y
equilibrado, las diferencias de medias coinciden con las diferencias
ajustadas por bloques; la precisión se obtiene del modelo con
bloques.
Tabla 4. Diferencias en puntos de comprensión. T2–T1 significa
T2 menos T1.
| T2-T1 |
8.75 |
5.80 |
11.70 |
< 0,001 |
Diferencia detectada |
| T3-T1 |
13.42 |
10.47 |
16.36 |
< 0,001 |
Diferencia detectada |
| T3-T2 |
4.67 |
1.72 |
7.61 |
0,0038 |
Diferencia detectada |
Cómo leerlo. El punto marca la diferencia estimada y
la línea horizontal muestra su incertidumbre. Si el intervalo completo
queda por encima de cero, la primera modalidad tiene una media mayor que
la segunda bajo el modelo. Si incluye cero, no existe evidencia
suficiente para distinguir ese par al nivel elegido; eso no demuestra
equivalencia.
T2 frente a T1: 8,75 puntos más, con intervalo de
5,80 a 11,70.
T3 frente a T1: 13,42 puntos más, con intervalo de
10,47 a 16,36.
T3 frente a T2: 4,67 puntos más, con intervalo de
1,72 a 7,61.
En el ejemplo original los tres intervalos quedan por encima de cero.
La decisión clínica exige definir previamente qué diferencia sería
importante para el paciente, además de valorar su significación
estadística.
Qué comprobamos en los
residuos
Un residuo es la parte del puntaje que el modelo no explica después
de considerar tanto la modalidad como el bloque. Un
residuo de +2 indica que la persona obtuvo dos puntos más de lo estimado
para su combinación de bloque y tratamiento.
El ANOVA supone errores independientes entre pacientes, varianza
aproximadamente común y normalidad razonable de los errores. La
independencia procede del diseño, no de una prueba de normalidad.
Tabla 5. Los valores p no demuestran el cumplimiento de los
supuestos.
| Shapiro–Wilk de residuos |
0,2652 |
Diagnóstico de normalidad junto con el gráfico QQ |
| Bartlett sobre residuos |
0,5107 |
Exploratorio; residuos relacionados por el ajuste |
| Levene-mediana sobre residuos |
0,1243 |
Exploratorio; residuos relacionados por el ajuste |
Precaución específica del DBCA. Los residuos están
relacionados por el ajuste. Por eso, Bartlett y Levene calculados sobre
ellos no conservan exactamente la calibración de pruebas entre muestras
independientes. Se presentan como exploración, sin usarlos como semáforo
automático para elegir el análisis. Aplicarlos solo a los puntajes
brutos tampoco aislaría la variación residual.
Cómo leerlo. Una cercanía razonable de los puntos a
la línea es compatible con normalidad aproximada. Una curva pronunciada
o puntos muy alejados en los extremos justificarían revisar el modelo y
los registros. Shapiro–Wilk da p = 0,2652; no detecta un alejamiento al
nivel de 0,05, pero con una muestra pequeña puede pasar por alto
problemas relevantes.
Cómo leerlo. Se busca una nube alrededor de cero sin
una forma de abanico clara. Una amplitud que aumente al avanzar
horizontalmente sugeriría variación no constante; una curva sugeriría
una estructura no explicada. Con 18 puntos, la figura es orientativa. Un
punto extremo exige comprobar el registro y valorar su influencia, no
borrarlo automáticamente.
Qué aportan Friedman y
la aleatorización
Friedman conserva la
comparación por bloques
Friedman ordena los tres puntajes dentro de cada
bloque y evalúa si una modalidad tiende a ocupar posiciones
diferentes. No requiere normalidad, pero sí bloques independientes,
completos y respuestas comparables. Su hipótesis por rangos no es
idéntica a la igualdad de medias del ANOVA. Kruskal–Wallis ignoraría los
bloques y no es la alternativa utilizada aquí.
El estadístico de Friedman es 12,000, con p = 0,0025 según su
aproximación chi cuadrado. Kendall W es 1,000: en estos datos, el orden
entre modalidades es completamente concordante en los seis bloques.
W = 1 no significa comprensión del 100 % ni garantiza que se
repita el patrón en otros pacientes. Con solo seis bloques debe
reconocerse el carácter aproximado de la prueba global.
Aleatorización dentro
de cada bloque
La prueba complementaria conserva los tres puntajes de cada bloque y
cambia aleatoriamente sus etiquetas T1, T2 y T3. Repite ese sorteo
9999 veces y compara los estadísticos F simulados con
el observado. No mezcla pacientes entre bloques.
En la ejecución reproducible, se obtuvieron 2 resultados tan extremos
como el observado entre 9999 sorteos. Con la corrección que evita
informar p = 0, el valor Monte Carlo es 0,0003. No es
una enumeración exacta: cambiar la semilla o el número de repeticiones
puede modificarlo ligeramente. Una semilla fija permite repetir el mismo
cálculo con la misma configuración de R.
Su validez en un estudio real exige que la asignación se haya
sorteado dentro de cada bloque. Contrasta una hipótesis de ausencia de
efecto individual bajo el esquema de aleatorización; no debe confundirse
automáticamente con cualquier hipótesis de igualdad de medias.
Interpretación para la
pregunta de investigación
Con los datos ficticios y el modelo aditivo, el ANOVA y Tukey
distinguen los tres formatos, con mayor comprensión promedio en T3,
seguido por T2 y T1. La comparación se realiza considerando los niveles
iniciales agrupados en bloques.
Friedman también detecta diferencias globales. Sin embargo, las
comparaciones Wilcoxon por bloques con ajuste Holm no distinguen
pares al nivel de 0,05 en este ejemplo. Esa diferencia de
resultados se informa: las pruebas utilizan información y supuestos
distintos, y seis bloques ofrecen poca resolución para comparaciones
múltiples por rangos. No debe seleccionarse el método que arroje el
menor valor p.
Para responder en pacientes reales se necesitan una muestra
calculada, un instrumento de comprensión válido y condiciones
equivalentes de información y aclaración de dudas. Los formatos no deben
omitir contenido clínico esencial. T3 combina infografías, soporte
digital y firma electrónica: el diseño compara ese paquete y no
aísla el efecto de la firma.
Detalles y
reproducibilidad
Ver las 18 observaciones y la comprobación de bloques completos
Una observación por combinación de bloque y
tratamiento.
| DBCA_P01 |
B1 |
34 |
T2 |
65.5 |
| DBCA_P02 |
B1 |
35 |
T1 |
58.0 |
| DBCA_P03 |
B1 |
37 |
T3 |
73.0 |
| DBCA_P04 |
B2 |
43 |
T3 |
79.5 |
| DBCA_P05 |
B2 |
45 |
T2 |
73.0 |
| DBCA_P06 |
B2 |
46 |
T1 |
62.5 |
| DBCA_P07 |
B3 |
53 |
T1 |
68.0 |
| DBCA_P08 |
B3 |
55 |
T3 |
80.0 |
| DBCA_P09 |
B3 |
56 |
T2 |
79.5 |
| DBCA_P10 |
B4 |
63 |
T2 |
80.5 |
| DBCA_P11 |
B4 |
65 |
T3 |
89.0 |
| DBCA_P12 |
B4 |
66 |
T1 |
74.5 |
| DBCA_P13 |
B5 |
73 |
T3 |
90.5 |
| DBCA_P14 |
B5 |
75 |
T1 |
80.0 |
| DBCA_P15 |
B5 |
76 |
T2 |
88.0 |
| DBCA_P16 |
B6 |
83 |
T1 |
82.5 |
| DBCA_P17 |
B6 |
85 |
T2 |
91.5 |
| DBCA_P18 |
B6 |
86 |
T3 |
94.0 |
| B1 |
1 |
1 |
1 |
| B2 |
1 |
1 |
1 |
| B3 |
1 |
1 |
1 |
| B4 |
1 |
1 |
1 |
| B5 |
1 |
1 |
1 |
| B6 |
1 |
1 |
1 |
Ver las comparaciones Wilcoxon relacionadas por bloque
Las diferencias se calculan entre personas del mismo bloque. Wilcoxon
de rangos con signo utiliza esa relación y requiere simetría de las
diferencias para una interpretación de localización. Se usa aproximación
normal con corrección de continuidad para admitir empates; el ajuste
Holm considera las tres comparaciones.
| T1 menos T2 |
-8.50 |
0,1066 |
| T1 menos T3 |
-13.25 |
0,1066 |
| T2 menos T3 |
-4.50 |
0,1066 |
Una mediana de diferencias no es necesariamente igual a la diferencia
de medianas. No detectar significación después del ajuste no demuestra
equivalencia entre formatos.
Ver observaciones potencialmente influyentes
La distancia de Cook orienta sobre cuánto podría influir una
observación en el modelo. La referencia 4/n es exploratoria y no
autoriza eliminar pacientes. Se revisan los registros y, si corresponde,
se informa un análisis de sensibilidad.
| DBCA_P09 |
B3 |
1.662 |
0.276 |
Revisar registro |
| DBCA_P10 |
B4 |
-1.582 |
0.250 |
Revisar registro |
| DBCA_P08 |
B3 |
-1.342 |
0.180 |
Sin señal según esta referencia |
| DBCA_P04 |
B2 |
1.302 |
0.169 |
Sin señal según esta referencia |
| DBCA_P06 |
B2 |
-1.282 |
0.164 |
Sin señal según esta referencia |
| DBCA_P13 |
B5 |
-1.221 |
0.149 |
Sin señal según esta referencia |
| DBCA_P11 |
B4 |
1.181 |
0.140 |
Sin señal según esta referencia |
| DBCA_P03 |
B1 |
1.061 |
0.113 |
Sin señal según esta referencia |
| DBCA_P18 |
B6 |
-0.981 |
0.096 |
Sin señal según esta referencia |
| DBCA_P01 |
B1 |
-0.981 |
0.096 |
Sin señal según esta referencia |
| DBCA_P14 |
B5 |
0.881 |
0.078 |
Sin señal según esta referencia |
| DBCA_P17 |
B6 |
0.581 |
0.034 |
Sin señal según esta referencia |
| DBCA_P12 |
B4 |
0.400 |
0.016 |
Sin señal según esta referencia |
| DBCA_P16 |
B6 |
0.400 |
0.016 |
Sin señal según esta referencia |
| DBCA_P15 |
B5 |
0.340 |
0.012 |
Sin señal según esta referencia |
| DBCA_P07 |
B3 |
-0.320 |
0.010 |
Sin señal según esta referencia |
| DBCA_P02 |
B1 |
-0.080 |
0.001 |
Sin señal según esta referencia |
| DBCA_P05 |
B2 |
-0.020 |
0.000 |
Sin señal según esta referencia |
Ver el código de aleatorización y la configuración de R
set.seed(20261030)
B <- 9999L
F_permutado <- replicate(B, {
m <- matriz
for (j in seq_len(nrow(m))) m[j, ] <- sample(m[j, ])
estadistico_F(m)
})
p_perm <- (1 + sum(F_permutado >= F_observado - 1e-10)) / (B + 1)
## R version 4.6.1 (2026-06-24 ucrt)
## Platform: x86_64-w64-mingw32/x64
## Running under: Windows 11 x64 (build 26200)
##
## Matrix products: default
## LAPACK version 3.12.1
##
## locale:
## [1] LC_COLLATE=Spanish_Panama.utf8 LC_CTYPE=Spanish_Panama.utf8
## [3] LC_MONETARY=Spanish_Panama.utf8 LC_NUMERIC=C
## [5] LC_TIME=Spanish_Panama.utf8
##
## time zone: America/Panama
## tzcode source: internal
##
## attached base packages:
## [1] stats graphics grDevices utils datasets methods base
##
## loaded via a namespace (and not attached):
## [1] vctrs_0.7.3 cli_3.6.6 knitr_1.52 rlang_1.3.0
## [5] xfun_0.62 generics_0.1.4 S7_0.2.2 jsonlite_2.0.0
## [9] labeling_0.4.3 glue_1.8.1 htmltools_0.5.9 sass_0.4.10
## [13] scales_1.4.0 rmarkdown_2.32 grid_4.6.1 tibble_3.3.1
## [17] evaluate_1.0.5 jquerylib_0.1.4 fastmap_1.2.0 yaml_2.3.12
## [21] lifecycle_1.0.5 compiler_4.6.1 dplyr_1.2.1 RColorBrewer_1.1-3
## [25] pkgconfig_2.0.3 rstudioapi_0.19.0 farver_2.1.2 digest_0.6.39
## [29] R6_2.6.1 tidyselect_1.2.1 pillar_1.11.1 magrittr_2.0.5
## [33] bslib_0.12.0 withr_3.0.3 tools_4.6.1 gtable_0.3.6
## [37] ggplot2_4.0.3 cachem_1.1.0
Este informe conserva los 18 registros y los procedimientos de
Analisis_DBCA_Consentimiento.R, presentados en un
formato resumido con explicaciones. Se recalcula al pulsar
Knit y no necesita el script original ni una base
externa. El código completo se consulta abriendo el archivo
.rmd o mediante la descarga de código del HTML. Los
resultados son didácticos y no demuestran eficacia clínica de ninguna
modalidad.
LS0tCnRpdGxlOiAiQ29tcHJlbnNpw7NuIGRlbCBjb25zZW50aW1pZW50byBpbmZvcm1hZG8iCnN1YnRpdGxlOiAiVHJlcyBmb3JtYXRvcyBkZSBwcmVzZW50YWNpw7NuIGNvbXBhcmFkb3MgZW50cmUgcGFjaWVudGVzIGFncnVwYWRvcyBlbiBibG9xdWVzIgpkYXRlOiAiRWplbXBsbyBkaWTDoWN0aWNvIGNvbiBkYXRvcyBmaWN0aWNpb3MiCmxhbmc6IGVzCm91dHB1dDoKICBodG1sX2RvY3VtZW50OgogICAgdGhlbWU6IGZsYXRseQogICAgaGlnaGxpZ2h0OiB0YW5nbwogICAgdG9jOiB0cnVlCiAgICB0b2NfZGVwdGg6IDIKICAgIHRvY19mbG9hdDoKICAgICAgY29sbGFwc2VkOiBmYWxzZQogICAgICBzbW9vdGhfc2Nyb2xsOiB0cnVlCiAgICBudW1iZXJfc2VjdGlvbnM6IHRydWUKICAgIGNvZGVfZm9sZGluZzogaGlkZQogICAgY29kZV9kb3dubG9hZDogdHJ1ZQogICAgc2VsZl9jb250YWluZWQ6IHRydWUKICAgIGZpZ19jYXB0aW9uOiB0cnVlCiAgICBkZl9wcmludDoga2FibGUKICAgIG1hdGhqYXg6IG51bGwKLS0tCgo8IS0tCkFSQ0hJVk8gQVVUw5NOT01POiBubyBuZWNlc2l0YSBlbCBzY3JpcHQgLlIgbmkgYXJjaGl2b3MgZGUgZGF0b3MgZXh0ZXJub3MuCkd1YXJkZSBlbiBVVEYtOC4gQWJyYSBlbiBSU3R1ZGlvIHkgcHVsc2UgS25pdCA+IEtuaXQgdG8gSFRNTC4KClBSSU1FUiBVU086IGFudGVzIGRlIEtuaXQsIGVqZWN1dGUgZW4gbGEgY29uc29sYSBkZSBSOgpwYXF1ZXRlcyA8LSBjKCJybWFya2Rvd24iLCAia25pdHIiLCAiZ2dwbG90MiIpCmZhbHRhbnRlcyA8LSBwYXF1ZXRlc1shdmFwcGx5KHBhcXVldGVzLCByZXF1aXJlTmFtZXNwYWNlLCBsb2dpY2FsKDEpLCBxdWlldGx5ID0gVFJVRSldCmlmIChsZW5ndGgoZmFsdGFudGVzKSkgaW5zdGFsbC5wYWNrYWdlcyhmYWx0YW50ZXMsIHJlcG9zID0gImh0dHBzOi8vY2xvdWQuci1wcm9qZWN0Lm9yZyIpCgpEZXNwdcOpcyBwdWxzZSBLbml0LiBUYW1iacOpbiBwdWVkZSBlamVjdXRhcjoKcm1hcmtkb3duOjpyZW5kZXIoIkluZm9ybWVfREJDQV9Db25zZW50aW1pZW50by5ybWQiLCBlbmNvZGluZyA9ICJVVEYtOCIpCgpSU3R1ZGlvIG5vcm1hbG1lbnRlIGluY2x1eWUgUGFuZG9jLiBQYXJhIGNvbXByb2JhcmxvOgpybWFya2Rvd246OnBhbmRvY19hdmFpbGFibGUoKQotLT4KCmBgYHtyIGNvbmZpZ3VyYWNpb24sIGluY2x1ZGU9RkFMU0V9CnBhcXVldGVzIDwtIGMoImtuaXRyIiwgImdncGxvdDIiKQpmb3IgKHAgaW4gcGFxdWV0ZXMpIHsKICBpZiAoIXJlcXVpcmVOYW1lc3BhY2UocCwgcXVpZXRseSA9IFRSVUUpKSB7CiAgICB0cnlDYXRjaCgKICAgICAgdXRpbHM6Omluc3RhbGwucGFja2FnZXMocCwgcmVwb3MgPSAiaHR0cHM6Ly9jbG91ZC5yLXByb2plY3Qub3JnIiksCiAgICAgIGVycm9yID0gZnVuY3Rpb24oZSkgbWVzc2FnZShjb25kaXRpb25NZXNzYWdlKGUpKQogICAgKQogIH0KICBpZiAoIXJlcXVpcmVOYW1lc3BhY2UocCwgcXVpZXRseSA9IFRSVUUpKSB7CiAgICBzdG9wKCJGYWx0YSBlbCBwYXF1ZXRlICIsIHAsCiAgICAgICAgICIuIFJldmlzZSBJbnRlcm5ldCwgcGVybWlzb3MgZGUgaW5zdGFsYWNpw7NuIHkgdmVyc2nDs24gZGUgUi4iKQogIH0KfQprbml0cjo6b3B0c19jaHVuayRzZXQoCiAgZWNobyA9IEZBTFNFLCBtZXNzYWdlID0gRkFMU0UsIHdhcm5pbmcgPSBUUlVFLCBlcnJvciA9IEZBTFNFLAogIGZpZy53aWR0aCA9IDgsIGZpZy5oZWlnaHQgPSA0LjgsIGRwaSA9IDE2MCwKICBmaWcuYWxpZ24gPSAiY2VudGVyIiwgb3V0LndpZHRoID0gIjEwMCUiLCBjYWNoZSA9IEZBTFNFCikKb3B0aW9ucyh3aWR0aCA9IDk1KQphbHBoYSA8LSAwLjA1CmZtdCA8LSBmdW5jdGlvbih4LCBkID0gMikgZm9ybWF0Qyh4LCBmb3JtYXQgPSAiZiIsIGRpZ2l0cyA9IGQsIGRlY2ltYWwubWFyayA9ICIsIikKZnAgPC0gZnVuY3Rpb24oeCkgaWZlbHNlKHggPCAwLjAwMSwgIjwgMCwwMDEiLCBmbXQoeCwgNCkpCmNvbG9yZXMgPC0gYyhUMSA9ICIjNjM3NThBIiwgVDIgPSAiIzE1OUE5NCIsIFQzID0gIiM1MzY5QjAiKQpldGlxdWV0YXMgPC0gYyhUMSA9ICJUMSDCtyBUZXh0byBsZWdhbCIsIFQyID0gIlQyIMK3IEluZm9ncmFmw61hIGltcHJlc2EiLAogICAgICAgICAgICAgICBUMyA9ICJUMyDCtyBEaWdpdGFsIHkgZmlybWEiKQp0ZW1hIDwtIGdncGxvdDI6OnRoZW1lX21pbmltYWwoYmFzZV9zaXplID0gMTIpICsKICBnZ3Bsb3QyOjp0aGVtZSgKICAgIHBhbmVsLmdyaWQubWlub3IgPSBnZ3Bsb3QyOjplbGVtZW50X2JsYW5rKCksCiAgICBwbG90LnRpdGxlID0gZ2dwbG90Mjo6ZWxlbWVudF90ZXh0KGZhY2UgPSAiYm9sZCIsIHNpemUgPSAxNSwgY29sb3VyID0gIiMxODMzNDkiKSwKICAgIHBsb3Quc3VidGl0bGUgPSBnZ3Bsb3QyOjplbGVtZW50X3RleHQoc2l6ZSA9IDEwLCBjb2xvdXIgPSAiIzUyNjQ3NyIpLAogICAgYXhpcy50aXRsZSA9IGdncGxvdDI6OmVsZW1lbnRfdGV4dChjb2xvdXIgPSAiIzMzNDg1QyIpLAogICAgbGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiLAogICAgcGxvdC5tYXJnaW4gPSBnZ3Bsb3QyOjptYXJnaW4oMTIsIDE2LCAxMiwgMTApCiAgKQpgYGAKCjxzdHlsZT4KYm9keSB7IGNvbG9yOiAjMjYzYjRkOyBiYWNrZ3JvdW5kOiAjZmZmOyBmb250LWZhbWlseTogIlNlZ29lIFVJIiwgQXJpYWwsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTZweDsgbGluZS1oZWlnaHQ6IDEuNzsgfQoubWFpbi1jb250YWluZXIgeyBtYXgtd2lkdGg6IDExMjBweDsgfQpoMSwgaDIsIGgzIHsgY29sb3I6ICMxODMzNDk7IGZvbnQtd2VpZ2h0OiA2NTA7IGxpbmUtaGVpZ2h0OiAxLjI1OyB9CmgxLnRpdGxlIHsgZm9udC1zaXplOiAzN3B4OyBtYXJnaW4tdG9wOiAyOHB4OyBsZXR0ZXItc3BhY2luZzogLS44cHg7IH0KaDIgeyBmb250LXNpemU6IDI1cHg7IG1hcmdpbi10b3A6IDM2cHg7IH0KaDMgeyBmb250LXNpemU6IDIwcHg7IG1hcmdpbi10b3A6IDI0cHg7IH0KLnN1YnRpdGxlIHsgY29sb3I6ICM1MjY0Nzc7IGZvbnQtc2l6ZTogMTlweDsgbGluZS1oZWlnaHQ6IDEuNDU7IH0KLmRhdGUgeyBjb2xvcjogIzY1Nzg4OTsgZm9udC1zaXplOiAxNHB4OyB9CnAgeyBtYXJnaW4tYm90dG9tOiAxNnB4OyB9CmEgeyBjb2xvcjogIzExN2U3OTsgfQoudGFibGUgeyB3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDAgMjRweDsgZm9udC1zaXplOiAxNHB4OyB9Ci50YWJsZSB0aCB7IGJhY2tncm91bmQ6ICMxODMzNDk7IGNvbG9yOiAjZmZmOyBwYWRkaW5nOiAxMnB4ICFpbXBvcnRhbnQ7IGJvcmRlcjogbm9uZSAhaW1wb3J0YW50OyB9Ci50YWJsZSB0ZCB7IHBhZGRpbmc6IDExcHggMTJweCAhaW1wb3J0YW50OyBib3JkZXItdG9wOiAxcHggc29saWQgI2U0ZWFmMCAhaW1wb3J0YW50OyB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlICFpbXBvcnRhbnQ7IH0KLnRhYmxlIHRib2R5IHRyOm50aC1jaGlsZChldmVuKSB7IGJhY2tncm91bmQ6ICNmM2Y3ZmE7IH0KLmNhcHRpb24geyBjb2xvcjogIzY1Nzg4OTsgZm9udC1zaXplOiAxM3B4OyBtYXJnaW4tdG9wOiA4cHg7IH0KLnRvY2lmeSB7IGZvbnQtc2l6ZTogMTNweDsgYm9yZGVyLWNvbG9yOiAjZTRlYWYwOyBib3JkZXItcmFkaXVzOiA2cHg7IH0KLnRvY2lmeSAuYWN0aXZlIHsgYmFja2dyb3VuZDogIzExN2U3OTsgfQpwcmUgeyBib3JkZXI6IDFweCBzb2xpZCAjZTRlYWYwOyBiYWNrZ3JvdW5kOiAjZjZmOGZhOyBib3JkZXItcmFkaXVzOiA1cHg7IGZvbnQtc2l6ZTogMTJweDsgfQpkZXRhaWxzIHsgbWFyZ2luOiAyMHB4IDA7IHBhZGRpbmc6IDE1cHggMDsgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNkZmU3ZWQ7IH0Kc3VtbWFyeSB7IGN1cnNvcjogcG9pbnRlcjsgZm9udC13ZWlnaHQ6IDYwMDsgY29sb3I6ICMxMTdlNzk7IH0KQG1lZGlhIHByaW50IHsgI1RPQywgLmNvZGUtZm9sZGluZy1idG4sIC5jb2RlLXRvb2xzIHsgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OyB9IGJvZHkgeyBmb250LXNpemU6IDExcHQ7IH0gfQo8L3N0eWxlPgoKYGBge3IgZGF0b3MteS1hbmFsaXNpcywgaW5jbHVkZT1GQUxTRX0KZGF0b3NfZGJjYSA8LSBkYXRhLmZyYW1lKAogIHBhY2llbnRlID0gc3ByaW50ZigiREJDQV9QJTAyZCIsIDE6MTgpLAogIGJsb3F1ZSA9IGZhY3RvcihyZXAocGFzdGUwKCJCIiwgMTo2KSwgZWFjaCA9IDMpKSwKICBhbGZhYmV0aXphY2lvbl9pbmljaWFsID0gYygzNCwzNSwzNyw0Myw0NSw0Niw1Myw1NSw1NiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjMsNjUsNjYsNzMsNzUsNzYsODMsODUsODYpLAogIHRyYXRhbWllbnRvID0gZmFjdG9yKGMoIlQyIiwiVDEiLCJUMyIsIlQzIiwiVDIiLCJUMSIsCiAgICAiVDEiLCJUMyIsIlQyIiwiVDIiLCJUMyIsIlQxIiwiVDMiLCJUMSIsIlQyIiwiVDEiLCJUMiIsIlQzIiksCiAgICBsZXZlbHMgPSBjKCJUMSIsIlQyIiwiVDMiKSksCiAgY29tcHJlbnNpb24gPSBjKDY1LjUsNTgsNzMsNzkuNSw3Myw2Mi41LDY4LDgwLDc5LjUsCiAgICAgICAgICAgICAgICAgIDgwLjUsODksNzQuNSw5MC41LDgwLDg4LDgyLjUsOTEuNSw5NCkKKQpzdG9waWZub3QobnJvdyhkYXRvc19kYmNhKSA9PSAxOCwgIWFueU5BKGRhdG9zX2RiY2EpLAogICFhbnlEdXBsaWNhdGVkKGRhdG9zX2RiY2EkcGFjaWVudGUpLAogIGFsbCh3aXRoKGRhdG9zX2RiY2EsIHRhYmxlKGJsb3F1ZSwgdHJhdGFtaWVudG8pKSA9PSAxKSwKICBhbGwoZGF0b3NfZGJjYSRjb21wcmVuc2lvbiA+PSAwICYgZGF0b3NfZGJjYSRjb21wcmVuc2lvbiA8PSAxMDApKQptb2RlbG8gPC0gc3RhdHM6OmFvdihjb21wcmVuc2lvbiB+IGJsb3F1ZSArIHRyYXRhbWllbnRvLCBkYXRhID0gZGF0b3NfZGJjYSkKYW4gPC0gc3VtbWFyeShtb2RlbG8pW1sxXV0Kcm93bmFtZXMoYW4pIDwtIHRyaW13cyhyb3duYW1lcyhhbikpCnJlcyA8LSBzdGF0czo6cmVzaWR1YWxzKG1vZGVsbykKc2ggPC0gc3RhdHM6OnNoYXBpcm8udGVzdChyZXMpCmRhdG9zX2RiY2EkcmVzaWR1b19tb2RlbG8gPC0gcmVzCiMgRXN0b3MgZG9zIGRpYWduw7NzdGljb3Mgc29uIGV4cGxvcmF0b3Jpb3M6IGVsIGFqdXN0ZSByZWxhY2lvbmEgbG9zIHJlc2lkdW9zLgpiYSA8LSBzdGF0czo6YmFydGxldHQudGVzdChyZXNpZHVvX21vZGVsbyB+IHRyYXRhbWllbnRvLCBkYXRhID0gZGF0b3NfZGJjYSkKeiA8LSB3aXRoKGRhdG9zX2RiY2EsIGFicyhyZXNpZHVvX21vZGVsbyAtCiAgYXZlKHJlc2lkdW9fbW9kZWxvLCB0cmF0YW1pZW50bywgRlVOID0gc3RhdHM6Om1lZGlhbikpKQpsZXYgPC0gc3RhdHM6OmFub3ZhKHN0YXRzOjpsbSh6IH4gdHJhdGFtaWVudG8sIGRhdGEgPSBkYXRvc19kYmNhKSkKdHUgPC0gc3RhdHM6OlR1a2V5SFNEKG1vZGVsbywgInRyYXRhbWllbnRvIiwgY29uZi5sZXZlbCA9IDAuOTUpJHRyYXRhbWllbnRvCmZyIDwtIHN0YXRzOjpmcmllZG1hbi50ZXN0KGNvbXByZW5zaW9uIH4gdHJhdGFtaWVudG8gfCBibG9xdWUsIGRhdGEgPSBkYXRvc19kYmNhKQptYXRyaXogPC0gd2l0aChkYXRvc19kYmNhLCB0YXBwbHkoY29tcHJlbnNpb24sIGxpc3QoYmxvcXVlLCB0cmF0YW1pZW50byksIG1lYW4pKQpzdG9waWZub3QoYWxsKGRpbShtYXRyaXopID09IGMoNiwgMykpLCAhYW55TkEobWF0cml6KSkKVyA8LSB1bm5hbWUoZnIkc3RhdGlzdGljKSAvIChucm93KG1hdHJpeikgKiAobmNvbChtYXRyaXopIC0gMSkpClNTX3RyIDwtIGFuWyJ0cmF0YW1pZW50byIsICJTdW0gU3EiXQpTU19lIDwtIGFuWyJSZXNpZHVhbHMiLCAiU3VtIFNxIl0KZXRhX3BhcmNpYWwgPC0gU1NfdHIgLyAoU1NfdHIgKyBTU19lKQpyZXN1bWVuIDwtIGRvLmNhbGwocmJpbmQsIGxhcHBseShsZXZlbHMoZGF0b3NfZGJjYSR0cmF0YW1pZW50byksIGZ1bmN0aW9uKHQpIHsKICB4IDwtIGRhdG9zX2RiY2EkY29tcHJlbnNpb25bZGF0b3NfZGJjYSR0cmF0YW1pZW50byA9PSB0XQogIGRhdGEuZnJhbWUoVHJhdGFtaWVudG8gPSB1bm5hbWUoZXRpcXVldGFzW3RdKSwgbiA9IGxlbmd0aCh4KSwKICAgIE1lZGlhID0gbWVhbih4KSwgREUgPSBzdGF0czo6c2QoeCksIE1lZGlhbmEgPSBzdGF0czo6bWVkaWFuKHgpLAogICAgTWluaW1vID0gbWluKHgpLCBNYXhpbW8gPSBtYXgoeCkpCn0pKQpjb21wYXJhY2lvbmVzIDwtIGRhdGEuZnJhbWUoQ29tcGFyYWNpb24gPSByb3duYW1lcyh0dSksCiAgRGlmZXJlbmNpYSA9IHR1WywgImRpZmYiXSwgTEkgPSB0dVssICJsd3IiXSwgTFMgPSB0dVssICJ1cHIiXSwKICBwX2FqdXN0YWRvID0gdHVbLCAicCBhZGoiXSwgcm93Lm5hbWVzID0gTlVMTCkKY29tcGFyYWNpb25lcyRSZXN1bHRhZG8gPC0gaWZlbHNlKGNvbXBhcmFjaW9uZXMkcF9hanVzdGFkbyA8IGFscGhhLAogICJEaWZlcmVuY2lhIGRldGVjdGFkYSIsICJTaW4gZXZpZGVuY2lhIHN1ZmljaWVudGUiKQpkaWFnIDwtIGRhdGEuZnJhbWUoQWp1c3RhZG8gPSBzdGF0czo6Zml0dGVkKG1vZGVsbyksIFJlc2lkdW8gPSByZXMsCiAgRXN0YW5kYXJpemFkbyA9IHN0YXRzOjpyc3RhbmRhcmQobW9kZWxvKSwgQ29vayA9IHN0YXRzOjpjb29rcy5kaXN0YW5jZShtb2RlbG8pKQpwYXJlcyA8LSBjb21ibihjb2xuYW1lcyhtYXRyaXopLCAyLCBzaW1wbGlmeSA9IEZBTFNFKQpwb3N0X2ZyIDwtIGRvLmNhbGwocmJpbmQsIGxhcHBseShwYXJlcywgZnVuY3Rpb24ocCkgewogIGRpZmVyZW5jaWEgPC0gbWF0cml6WywgcFsxXV0gLSBtYXRyaXpbLCBwWzJdXQogIHRlc3QgPC0gc3RhdHM6OndpbGNveC50ZXN0KGRpZmVyZW5jaWEsIG11ID0gMCwgZXhhY3QgPSBGQUxTRSwgY29ycmVjdCA9IFRSVUUpCiAgZGF0YS5mcmFtZShDb21wYXJhY2lvbiA9IHBhc3RlKHAsIGNvbGxhcHNlID0gIiBtZW5vcyAiKSwKICAgIE1lZGlhbmFfZGlmZXJlbmNpYSA9IHN0YXRzOjptZWRpYW4oZGlmZXJlbmNpYSksIHAgPSB0ZXN0JHAudmFsdWUpCn0pKQpwb3N0X2ZyJHBfSG9sbSA8LSBzdGF0czo6cC5hZGp1c3QocG9zdF9mciRwLCBtZXRob2QgPSAiaG9sbSIpCmVzdGFkaXN0aWNvX0YgPC0gZnVuY3Rpb24obSkgewogIGIgPC0gbnJvdyhtKTsgayA8LSBuY29sKG0pOyBtZWRpYSA8LSBtZWFuKG0pCiAgc3NfdHIgPC0gYiAqIHN1bSgoY29sTWVhbnMobSkgLSBtZWRpYSleMikKICBzc19ibCA8LSBrICogc3VtKChyb3dNZWFucyhtKSAtIG1lZGlhKV4yKQogIHNzX3RvdGFsIDwtIHN1bSgobSAtIG1lZGlhKV4yKQogIHNzX2Vycm9yIDwtIG1heCgwLCBzc190b3RhbCAtIHNzX3RyIC0gc3NfYmwpCiAgaWYgKHNzX2Vycm9yIDwgMWUtMTIpIHJldHVybihJbmYpCiAgKHNzX3RyIC8gKGsgLSAxKSkgLyAoc3NfZXJyb3IgLyAoKGIgLSAxKSAqIChrIC0gMSkpKQp9CkZfb2JzZXJ2YWRvIDwtIGVzdGFkaXN0aWNvX0YobWF0cml6KQpzdG9waWZub3QoaXNUUlVFKGFsbC5lcXVhbCh1bm5hbWUoRl9vYnNlcnZhZG8pLAogIHVubmFtZShhblsidHJhdGFtaWVudG8iLCAiRiB2YWx1ZSJdKSwgdG9sZXJhbmNlID0gMWUtOCkpKQpzZXQuc2VlZCgyMDI2MTAzMCkKQiA8LSA5OTk5TApGX3Blcm11dGFkbyA8LSByZXBsaWNhdGUoQiwgewogIG0gPC0gbWF0cml6CiAgZm9yIChqIGluIHNlcV9sZW4obnJvdyhtKSkpIG1baiwgXSA8LSBzYW1wbGUobVtqLCBdKQogIGVzdGFkaXN0aWNvX0YobSkKfSkKZXh0cmVtb3MgPC0gc3VtKEZfcGVybXV0YWRvID49IEZfb2JzZXJ2YWRvIC0gMWUtMTApCnBfcGVybSA8LSAoMSArIGV4dHJlbW9zKSAvIChCICsgMSkKYGBgCgojIFF1w6kgc2UgZXN0dWRpw7MKCioqUHJlZ3VudGEgZGUgaW52ZXN0aWdhY2nDs246Kiogwr9jYW1iaWEgbGEgY29tcHJlbnNpw7NuIHByb21lZGlvIGRlbCBwYWNpZW50ZSBzb2JyZSBzdSBjaXJ1Z8OtYSBkZSByZWVtcGxhem8gdG90YWwgZGUgcm9kaWxsYSBzZWfDum4gZWwgZm9ybWF0byBkZSBjb25zZW50aW1pZW50bywgY29uc2lkZXJhbmRvIGxhcyBkaWZlcmVuY2lhcyBpbmljaWFsZXMgZW50cmUgYmxvcXVlcz8KClNlIGNvbXBhcmFuICoqMTggcGFjaWVudGVzIGRpc3RyaWJ1aWRvcyBlbiBzZWlzIGJsb3F1ZXMgZGUgdHJlcyoqLiBDYWRhIGJsb3F1ZSByZcO6bmUgYSBwZXJzb25hcyBjb24gYWxmYWJldGl6YWNpw7NuIGVuIHNhbHVkIGluaWNpYWwgc2VtZWphbnRlLiBEZW50cm8gZGUgY2FkYSBibG9xdWUsIHVuYSBwZXJzb25hIHJlY2liZSBUMSwgb3RyYSBUMiB5IG90cmEgVDMgbWVkaWFudGUgZWwgc29ydGVvIHF1ZSByZXByZXNlbnRhIGVzdGUgZWplbXBsby4KCnwgVHJhdGFtaWVudG8gfCBNb2RhbGlkYWQgfAp8Oi0tfDotLXwKfCAqKlQxIMK3IENvbnRyb2wqKiB8IEZvcm1hdG8gdHJhZGljaW9uYWwgbGVnYWwgeSB0ZXh0dWFsLiB8CnwgKipUMioqIHwgRG9jdW1lbnRvIHNpbXBsaWZpY2FkbyBjb24gaW5mb2dyYWbDrWFzIGbDrXNpY2FzIGltcHJlc2FzLiB8CnwgKipUMyoqIHwgQ29uc2VudGltaWVudG8gZGlnaXRhbCBjb24gaW5mb2dyYWbDrWFzIHkgZmlybWEgZWxlY3Ryw7NuaWNhLiB8CgpMYSByZXNwdWVzdGEgZXMgdW4gcHVudGFqZSBwb3N0LWNvbnNlbnRpbWllbnRvIGRlICoqMCBhIDEwMCoqLiBVbiB2YWxvciBtYXlvciByZXByZXNlbnRhIG1heW9yIGNvbXByZW5zacOzbi4gVG9kb3MgbG9zIGRhdG9zIHNvbiBmaWN0aWNpb3M6IG5vIHByb2NlZGVuIGRlbCBCSUNFUCBuaSBkZSBvdHJvIGN1ZXN0aW9uYXJpbyBhcGxpY2Fkby4gRW4gdW5hIGludmVzdGlnYWNpw7NuIHJlYWwgZGViZSB1dGlsaXphcnNlIHVuIGluc3RydW1lbnRvIHZhbGlkYWRvIHBhcmEgZWwgaWRpb21hLCBwb2JsYWNpw7NuIHkgY29udGV4dG8gcXVpcsO6cmdpY28sIGNvbiBzdXMgcmVnbGFzIGRlIHB1bnR1YWNpw7NuLgoKKipSZXN1bHRhZG8gcHJpbmNpcGFsIGRlbCBlamVtcGxvLioqIEFsIGNvbnNpZGVyYXIgbG9zIGJsb3F1ZXMsIGVsIEFOT1ZBIGByIGlmIChhblsidHJhdGFtaWVudG8iLCAiUHIoPkYpIl0gPCBhbHBoYSkgImRldGVjdGEgZGlmZXJlbmNpYXMiIGVsc2UgIm5vIGRldGVjdGEgZGlmZXJlbmNpYXMiYCBlbnRyZSB0cmF0YW1pZW50b3M6IEYgPSBgciBmbXQoYW5bInRyYXRhbWllbnRvIiwgIkYgdmFsdWUiXSwgMylgIHkgcCBgciBpZiAoYW5bInRyYXRhbWllbnRvIiwgIlByKD5GKSJdIDwgMC4wMDEpICI8IDAsMDAxIiBlbHNlIHBhc3RlKCI9IiwgZnAoYW5bInRyYXRhbWllbnRvIiwgIlByKD5GKSJdKSlgLiBMYSBtYWduaXR1ZCBkZSBjYWRhIGRpZmVyZW5jaWEgc2UgcHJlc2VudGEgbWVkaWFudGUgaW50ZXJ2YWxvcyBkZSBUdWtleS4gRXN0byBkZXNjcmliZSBlbCBlamVtcGxvIHkgbm8gZGVtdWVzdHJhIGVmaWNhY2lhIGNsw61uaWNhIHJlYWwuCgojIFBvciBxdcOpIHNlIHV0aWxpemFyb24gYmxvcXVlcwoKVW5hIHBlcnNvbmEgZmFtaWxpYXJpemFkYSBjb24gaW5mb3JtYWNpw7NuIGRlIHNhbHVkIHBvZHLDrWEgb2J0ZW5lciB1biBwdW50YWplIGFsdG8gY29uIGN1YWxxdWllcmEgZGUgbG9zIGZvcm1hdG9zLiBTaSBlc2FzIGRpZmVyZW5jaWFzIGluaWNpYWxlcyBzZSBtZXpjbGFuIGNvbiBsYXMgbW9kYWxpZGFkZXMsIHB1ZWRlIHNlciBtw6FzIGRpZsOtY2lsIGRpc3Rpbmd1aXIgZWwgZWZlY3RvIGRlbCBmb3JtYXRvLiBFbCBEQkNBIG9yZ2FuaXphIGxhIGNvbXBhcmFjacOzbiBlbnRyZSBwZXJzb25hcyBpbmljaWFsbWVudGUgc2VtZWphbnRlcyB5IHNlcGFyYSBlc3RhZMOtc3RpY2FtZW50ZSBsYSB2YXJpYWNpw7NuIGVudHJlIGJsb3F1ZXMuCgoqKkxvcyBibG9xdWVzIHNlIGZvcm1hbiBhbnRlcyBkZSBwcmVzZW50YXIgZWwgY29uc2VudGltaWVudG8qKiwgdXNhbmRvIHVuYSBjYXJhY3RlcsOtc3RpY2EgaW5pY2lhbCwgbm8gZWwgcHVudGFqZSBmaW5hbC4gRW4gZXN0ZSBlamVtcGxvLCBCMSByZcO6bmUgcHVudGFqZXMgaW5pY2lhbGVzIGRlIDM0IGEgMzcgeSBCNiBkZSA4MyBhIDg2LiBMYSBlc2NhbGEgaW5pY2lhbCBlcyBmaWN0aWNpYSB5IG5vIGRlYmUgaW50ZXJwcmV0YXJzZSBjb21vIHVuIGluc3RydW1lbnRvIHZhbGlkYWRvIG5pIGNvbW8gdW5hIGNhdGVnb3LDrWEgY2zDrW5pY2EuCgpgYGB7ciB0YWJsYS1ibG9xdWVzfQp0YWJsYV9ibG9xdWVzIDwtIGRhdGEuZnJhbWUoCiAgQmxvcXVlID0gcm93bmFtZXMobWF0cml6KSwKICBBbGZhYmV0aXphY2lvbl9taW5pbWEgPSBhcy5udW1lcmljKHRhcHBseShkYXRvc19kYmNhJGFsZmFiZXRpemFjaW9uX2luaWNpYWwsIGRhdG9zX2RiY2EkYmxvcXVlLCBtaW4pKSwKICBBbGZhYmV0aXphY2lvbl9tYXhpbWEgPSBhcy5udW1lcmljKHRhcHBseShkYXRvc19kYmNhJGFsZmFiZXRpemFjaW9uX2luaWNpYWwsIGRhdG9zX2RiY2EkYmxvcXVlLCBtYXgpKSwKICBUMSA9IG1hdHJpelssICJUMSJdLCBUMiA9IG1hdHJpelssICJUMiJdLCBUMyA9IG1hdHJpelssICJUMyJdLCByb3cubmFtZXMgPSBOVUxMKQprbml0cjo6a2FibGUodGFibGFfYmxvcXVlcywgZGlnaXRzID0gMSwgcm93Lm5hbWVzID0gRkFMU0UsCiAgY29sLm5hbWVzID0gYygiQmxvcXVlIiwgIkluaWNpYWwgbcOtbmltbyIsICJJbmljaWFsIG3DoXhpbW8iLCAiQ29tcHJlbnNpw7NuIFQxIiwgIkNvbXByZW5zacOzbiBUMiIsICJDb21wcmVuc2nDs24gVDMiKSwKICBjYXB0aW9uID0gIlRhYmxhIDEuIENhZGEgZmlsYSBjb250aWVuZSB0cmVzIHBhY2llbnRlcyBkaXN0aW50b3MsIHVubyBwb3IgbW9kYWxpZGFkLiIpCmBgYAoKTm8gZXMgdW4gZXN0dWRpbyBlbiBlbCBxdWUgbGEgbWlzbWEgcGVyc29uYSBwcnVlYmEgdHJlcyBjb25zZW50aW1pZW50b3MuIExhcyBjb21wYXJhY2lvbmVzIHNlIHJlbGFjaW9uYW4gKipwb3IgcGVydGVuZWNlciBhbCBtaXNtbyBibG9xdWUqKiwgbm8gcG9yIGNvcnJlc3BvbmRlciBhbCBtaXNtbyBwYWNpZW50ZS4KCiMgQ8OzbW8gc2UgZGlzdHJpYnV5ZXJvbiBsb3MgcHVudGFqZXMKCmBgYHtyIHRhYmxhLWRlc2NyaXB0aXZhfQprbml0cjo6a2FibGUocmVzdW1lbiwgZGlnaXRzID0gMiwgcm93Lm5hbWVzID0gRkFMU0UsCiAgY29sLm5hbWVzID0gYygiTW9kYWxpZGFkIiwgIlBhY2llbnRlcyIsICJNZWRpYSIsICJEZXN2LiBlc3TDoW5kYXIiLCAiTWVkaWFuYSIsICJNw61uaW1vIiwgIk3DoXhpbW8iKSwKICBjYXB0aW9uID0gIlRhYmxhIDIuIERlc2NyaXBjacOzbiBkZSBsb3MgcHVudGFqZXMgc2luIHJldGlyYXIgZWwgZWZlY3RvIGRlbCBibG9xdWUuIikKYGBgCgpMYSAqKm1lZGlhKiogZXMgZWwgcHJvbWVkaW8gZGUgY2FkYSBtb2RhbGlkYWQuIExhICoqbWVkaWFuYSoqIGVzIGVsIGNlbnRybyBkZSBzdXMgcHVudGFqZXMgb3JkZW5hZG9zLiBMYSAqKmRlc3ZpYWNpw7NuIGVzdMOhbmRhcioqIHJlc3VtZSBsYSBkaXNwZXJzacOzbiBlbnRyZSBwYWNpZW50ZXMsIGluY2x1aWRhIGFxdcOtIGxhIHZhcmlhY2nDs24gcmVsYWNpb25hZGEgY29uIGxvcyBibG9xdWVzLiBQb3IgZXNvLCBsYSBkaXNwZXJzacOzbiBkZSBlc3RhIHRhYmxhIG5vIGVxdWl2YWxlIGFsIGVycm9yIHJlc2lkdWFsIGRlbCBtb2RlbG8gYWp1c3RhZG8uCgpgYGB7ciBib3hwbG90LWJsb3F1ZXMsIGZpZy5jYXA9IkZpZ3VyYSAxLiBQdW50YWplcyBwb3IgbW9kYWxpZGFkLiBMYXMgbMOtbmVhcyB5IGNvbG9yZXMgdW5lbiBhIHRyZXMgcGFjaWVudGVzIGRpZmVyZW50ZXMgZGVsIG1pc21vIGJsb3F1ZS4iLCBmaWcuaGVpZ2h0PTUuM30KZ2dwbG90Mjo6Z2dwbG90KGRhdG9zX2RiY2EsIGdncGxvdDI6OmFlcyh0cmF0YW1pZW50bywgY29tcHJlbnNpb24pKSArCiAgZ2dwbG90Mjo6Z2VvbV9ib3hwbG90KGdncGxvdDI6OmFlcyhmaWxsID0gdHJhdGFtaWVudG8pLAogICAgd2lkdGggPSAwLjQ4LCBhbHBoYSA9IDAuMjUsIG91dGxpZXIuc2hhcGUgPSBOQSkgKwogIGdncGxvdDI6Omdlb21fbGluZShnZ3Bsb3QyOjphZXMoZ3JvdXAgPSBibG9xdWUsIGNvbG91ciA9IGJsb3F1ZSksIGFscGhhID0gMC43MikgKwogIGdncGxvdDI6Omdlb21fcG9pbnQoZ2dwbG90Mjo6YWVzKGNvbG91ciA9IGJsb3F1ZSksIHNpemUgPSAyLjgpICsKICBnZ3Bsb3QyOjpzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBjb2xvcmVzKSArCiAgZ2dwbG90Mjo6c2NhbGVfY29sb3VyX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGdncGxvdDI6OnNjYWxlX3hfZGlzY3JldGUobGFiZWxzID0gZXRpcXVldGFzKSArCiAgZ2dwbG90Mjo6Y29vcmRfY2FydGVzaWFuKHlsaW0gPSBjKDAsIDEwMCkpICsgdGVtYSArCiAgZ2dwbG90Mjo6dGhlbWUobGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIpICsKICBnZ3Bsb3QyOjpndWlkZXMoZmlsbCA9ICJub25lIikgKwogIGdncGxvdDI6OmxhYnModGl0bGUgPSAiQ29tcGFyYXIgZm9ybWF0b3MgZW50cmUgcGFjaWVudGVzIGRlIG5pdmVsIGluaWNpYWwgcGFyZWNpZG8iLAogICAgc3VidGl0bGUgPSAiTGFzIGNhamFzIHJlc3VtZW4gbW9kYWxpZGFkZXM7IGxhcyBsw61uZWFzIG11ZXN0cmFuIGxhIGNvbXBhcmFjacOzbiBwb3IgYmxvcXVlIiwKICAgIHggPSBOVUxMLCB5ID0gIkNvbXByZW5zacOzbiBkZSAwIGEgMTAwIiwgY29sb3VyID0gIkJsb3F1ZSIpCmBgYAoKKipDw7NtbyBsZWVyIGVsIGdyw6FmaWNvLioqIENhZGEgcHVudG8gZXMgdW5hIHBlcnNvbmEuIExhIGzDrW5lYSBjZW50cmFsIGRlIGNhZGEgY2FqYSBlcyBsYSBtZWRpYW5hIHkgbGEgY2FqYSBjb250aWVuZSBsYSBtaXRhZCBjZW50cmFsIGRlIGxvcyBwdW50YWplcy4gTG9zIGJpZ290ZXMgbGxlZ2FuIGEgbG9zIHZhbG9yZXMgb2JzZXJ2YWRvcyBkZW50cm8gZGUgMSw1IHJhbmdvcyBpbnRlcmN1YXJ0w61saWNvcyBkZSBsYSBjYWphOyB0b2RvcyBsb3MgcHVudG9zIHNpZ3VlbiB2aXNpYmxlcy4KCioqUXXDqSBhcG9ydGFuIGxhcyBsw61uZWFzLioqIFBlcm1pdGVuIHNlZ3VpciBhIGNhZGEgYmxvcXVlIGEgdHJhdsOpcyBkZSBUMSwgVDIgeSBUMy4gVW5hIGzDrW5lYSBhc2NlbmRlbnRlIGluZGljYSBxdWUgbGFzIHBlcnNvbmFzIGRlIGVzZSBibG9xdWUgb2J0dXZpZXJvbiBwdW50YWplcyBtYXlvcmVzIGNvbiBsYXMgbW9kYWxpZGFkZXMgc2l0dWFkYXMgYSBsYSBkZXJlY2hhLiBObyByZXByZXNlbnRhIGxhIG1lam9yw61hIGRlIHVuYSBtaXNtYSBwZXJzb25hIG5pIHVuYSBldm9sdWNpw7NuIGVuIGVsIHRpZW1wby4KCioqUXXDqSBzZSBvYnNlcnZhLioqIEVuIGVzdG9zIGRhdG9zLCBsb3Mgc2VpcyBibG9xdWVzIG1hbnRpZW5lbiBlbCBvcmRlbiBUMyA+IFQyID4gVDEuIFRhbWJpw6luIGhheSBkaWZlcmVuY2lhcyB2ZXJ0aWNhbGVzIGVudHJlIGJsb3F1ZXMuIEF1bnF1ZSBsYXMgY2FqYXMgc2Ugc3VwZXJwb25lbiwgbGEgY29tcGFyYWNpw7NuIGRlbnRybyBkZSBjYWRhIGJsb3F1ZSBlcyBjb25zaXN0ZW50ZS4gUG9yIGVzbyBzZSB1dGlsaXphIGVsIGFuw6FsaXNpcyBhanVzdGFkbyB5IG5vIHNlIGRlY2lkZSBlbCByZXN1bHRhZG8gc29sYW1lbnRlIG1pcmFuZG8gbGFzIGNhamFzLgoKIyBRdcOpIGRpZmVyZW5jaWFzIGRldGVjdMOzIGVsIGFuw6FsaXNpcwoKIyMgQ29tcGFyYWNpw7NuIGdsb2JhbCBjb24gQU5PVkEKCkVsIG1vZGVsbyBzZXBhcmEgbGEgY29tcHJlbnNpw7NuIG9ic2VydmFkYSBlbiAqKm5pdmVsIGdlbmVyYWwsIGVmZWN0byBkZWwgYmxvcXVlLCBlZmVjdG8gZGVsIHRyYXRhbWllbnRvIHkgZXJyb3IgcmVzdGFudGUqKi4gTGEgaGlww7N0ZXNpcyBwcmluY2lwYWwgcGxhbnRlYSBxdWUgbGFzIHRyZXMgbWVkaWFzIGRlIHRyYXRhbWllbnRvIHNvbiBpZ3VhbGVzIGRlc3B1w6lzIGRlIGNvbnNpZGVyYXIgbG9zIGJsb3F1ZXMuCgpgYGB7ciB0YWJsYS1hbm92YX0KdGFibGFfYW5vdmEgPC0gZGF0YS5mcmFtZSgKICBGdWVudGUgPSBjKCJCbG9xdWUiLCAiVHJhdGFtaWVudG8iLCAiRXJyb3IgcmVzaWR1YWwiKSwKICBnbCA9IGFuJERmLCBTQyA9IGFuJGBTdW0gU3FgLCBDTSA9IGFuJGBNZWFuIFNxYCwKICBGID0gYyhmbXQoYW5bImJsb3F1ZSIsICJGIHZhbHVlIl0sIDMpLCBmbXQoYW5bInRyYXRhbWllbnRvIiwgIkYgdmFsdWUiXSwgMyksICLigJQiKSwKICBwID0gYyhmcChhblsiYmxvcXVlIiwgIlByKD5GKSJdKSwgZnAoYW5bInRyYXRhbWllbnRvIiwgIlByKD5GKSJdKSwgIuKAlCIpKQprbml0cjo6a2FibGUodGFibGFfYW5vdmEsIGRpZ2l0cyA9IDIsIHJvdy5uYW1lcyA9IEZBTFNFLAogIGNvbC5uYW1lcyA9IGMoIkZ1ZW50ZSIsICJnbCIsICJTdW1hIGRlIGN1YWRyYWRvcyIsICJDdWFkcmFkbyBtZWRpbyIsICJGIiwgInAiKSwKICBjYXB0aW9uID0gIlRhYmxhIDMuIEFOT1ZBIGRlbCBEQkNBLiBMYSBwcmVndW50YSBwcmluY2lwYWwgY29ycmVzcG9uZGUgYSBsYSBmaWxhIFRyYXRhbWllbnRvLiIpCmBgYAoKRWwgQU5PVkEgYXBvcnRhIGV2aWRlbmNpYSBkZSBkaWZlcmVuY2lhcyBlbnRyZSB0cmF0YW1pZW50b3MgZW4gZXN0ZSBlc2NlbmFyaW8uIEVsIHZhbG9yIHAgbm8gaW5kaWNhIGN1w6FudG9zIHB1bnRvcyBzZSBnYW5hIG5pIHJlcHJlc2VudGEgbGEgcHJvYmFiaWxpZGFkIGRlIHF1ZSB1biB0cmF0YW1pZW50byBzZWEgZWwgbWVqb3IuIEFkZW3DoXMsIGxvcyBibG9xdWVzIHNlIG1hbnRpZW5lbiBlbiBlbCBtb2RlbG8gcG9yIGVsIGRpc2XDsW8sIHNpbiBkZWNpZGlyIHJldGlyYXJsb3Mgc2Vnw7puIHN1IHZhbG9yIHAuCgpDb21vIG1lZGlkYSBjb21wbGVtZW50YXJpYSwgZXRhIGN1YWRyYWRvIHBhcmNpYWwgZGVsIHRyYXRhbWllbnRvIGVzIGByIGZtdChldGFfcGFyY2lhbCwgMylgLiBEZXNjcmliZSBsYSBwcm9wb3JjacOzbiBkZSB2YXJpYWNpw7NuIGF0cmlidWlibGUgYWwgdHJhdGFtaWVudG8gcmVzcGVjdG8gYSB0cmF0YW1pZW50byBtw6FzIGVycm9yLCB1bmEgdmV6IGNvbnNpZGVyYWRvIGVsIGJsb3F1ZS4gKipObyBlcyB1biBwb3JjZW50YWplIGRlIHBhY2llbnRlcyBiZW5lZmljaWFkb3MqKiBuaSB1bmEgbWVkaWRhIGRlIGNvbXByZW5zacOzbiBpbmRpdmlkdWFsLgoKRWwgZGlzZcOxbyB0aWVuZSB1bmEgcGVyc29uYSBwb3IgY29tYmluYWNpw7NuIGRlIGJsb3F1ZSB5IHRyYXRhbWllbnRvLiBFbiBjb25zZWN1ZW5jaWEsIGVsIG1vZGVsbyBzdXBvbmUgYWRpdGl2aWRhZDogbm8gcHVlZGUgZXN0aW1hciBwb3Igc2VwYXJhZG8gdW5hIGludGVyYWNjacOzbiB0cmF0YW1pZW50byBwb3IgYmxvcXVlIHkgZWwgZXJyb3IuIExhcyBsw61uZWFzIGRlIGxhIGZpZ3VyYSBheXVkYW4gYSBleHBsb3JhciBlbCBwYXRyw7NuLCBwZXJvIG5vIHJlc3VlbHZlbiBlc2EgbGltaXRhY2nDs24uCgojIyBDb21wYXJhY2lvbmVzIGRlIFR1a2V5CgpUdWtleSBjb21wYXJhIGNhZGEgcGFyIGRlIG1vZGFsaWRhZGVzIHV0aWxpemFuZG8gZWwgZXJyb3IgcmVzaWR1YWwgZGVsIERCQ0EgZSBpbnRlcnZhbG9zIHNpbXVsdMOhbmVvcyBkZWwgOTUgJS4gRW4gZXN0ZSBkaXNlw7FvIGNvbXBsZXRvIHkgZXF1aWxpYnJhZG8sIGxhcyBkaWZlcmVuY2lhcyBkZSBtZWRpYXMgY29pbmNpZGVuIGNvbiBsYXMgZGlmZXJlbmNpYXMgYWp1c3RhZGFzIHBvciBibG9xdWVzOyBsYSBwcmVjaXNpw7NuIHNlIG9idGllbmUgZGVsIG1vZGVsbyBjb24gYmxvcXVlcy4KCmBgYHtyIHRhYmxhLXR1a2V5fQp0YWJsYV90dWtleSA8LSBjb21wYXJhY2lvbmVzCnRhYmxhX3R1a2V5JHBfYWp1c3RhZG8gPC0gZnAodGFibGFfdHVrZXkkcF9hanVzdGFkbykKa25pdHI6OmthYmxlKHRhYmxhX3R1a2V5LCBkaWdpdHMgPSAyLCByb3cubmFtZXMgPSBGQUxTRSwKICBjb2wubmFtZXMgPSBjKCJDb21wYXJhY2nDs24iLCAiRGlmZXJlbmNpYSIsICJMw61taXRlIGluZmVyaW9yIiwgIkzDrW1pdGUgc3VwZXJpb3IiLCAicCBhanVzdGFkbyIsICJMZWN0dXJhIiksCiAgY2FwdGlvbiA9ICJUYWJsYSA0LiBEaWZlcmVuY2lhcyBlbiBwdW50b3MgZGUgY29tcHJlbnNpw7NuLiBUMuKAk1QxIHNpZ25pZmljYSBUMiBtZW5vcyBUMS4iKQpgYGAKCmBgYHtyIGludGVydmFsb3MtdHVrZXksIGZpZy5jYXA9IkZpZ3VyYSAyLiBEaWZlcmVuY2lhcyBlIGludGVydmFsb3Mgc2ltdWx0w6FuZW9zIGRlbCA5NSAlIGRlIFR1a2V5LCBjb25zaWRlcmFuZG8gZWwgYmxvcXVlLiJ9CmdncGxvdDI6OmdncGxvdChjb21wYXJhY2lvbmVzLCBnZ3Bsb3QyOjphZXMoQ29tcGFyYWNpb24sIERpZmVyZW5jaWEpKSArCiAgZ2dwbG90Mjo6Z2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMCwgbGluZXR5cGUgPSAiZGFzaGVkIiwgY29sb3VyID0gIiM2Mzc1OEEiKSArCiAgZ2dwbG90Mjo6Z2VvbV9lcnJvcmJhcihnZ3Bsb3QyOjphZXMoeW1pbiA9IExJLCB5bWF4ID0gTFMpLAogICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCA9IDAuMTQsIGNvbG91ciA9ICIjMTE3RTc5IiwgbGluZXdpZHRoID0gMC44NSkgKwogIGdncGxvdDI6Omdlb21fcG9pbnQoc2l6ZSA9IDMuNSwgY29sb3VyID0gIiMxODMzNDkiKSArCiAgZ2dwbG90Mjo6Y29vcmRfZmxpcCgpICsgdGVtYSArCiAgZ2dwbG90Mjo6bGFicyh0aXRsZSA9ICJDdcOhbnRvIGRpZmllcmVuIGxhcyBtb2RhbGlkYWRlcyBhbCBjb25zaWRlcmFyIGxvcyBibG9xdWVzIiwKICAgIHN1YnRpdGxlID0gIkxhIHJlZmVyZW5jaWEgZGUgZGlmZXJlbmNpYSBjZXJvIHBlcm1pdGUgdmFsb3JhciBjYWRhIGludGVydmFsbyIsCiAgICB4ID0gTlVMTCwgeSA9ICJEaWZlcmVuY2lhIGRlIGNvbXByZW5zacOzbiBlbiBwdW50b3MiKQpgYGAKCioqQ8OzbW8gbGVlcmxvLioqIEVsIHB1bnRvIG1hcmNhIGxhIGRpZmVyZW5jaWEgZXN0aW1hZGEgeSBsYSBsw61uZWEgaG9yaXpvbnRhbCBtdWVzdHJhIHN1IGluY2VydGlkdW1icmUuIFNpIGVsIGludGVydmFsbyBjb21wbGV0byBxdWVkYSBwb3IgZW5jaW1hIGRlIGNlcm8sIGxhIHByaW1lcmEgbW9kYWxpZGFkIHRpZW5lIHVuYSBtZWRpYSBtYXlvciBxdWUgbGEgc2VndW5kYSBiYWpvIGVsIG1vZGVsby4gU2kgaW5jbHV5ZSBjZXJvLCBubyBleGlzdGUgZXZpZGVuY2lhIHN1ZmljaWVudGUgcGFyYSBkaXN0aW5ndWlyIGVzZSBwYXIgYWwgbml2ZWwgZWxlZ2lkbzsgZXNvIG5vIGRlbXVlc3RyYSBlcXVpdmFsZW5jaWEuCgoqKlQyIGZyZW50ZSBhIFQxOioqIGByIGZtdCh0dVsiVDItVDEiLCAiZGlmZiJdKWAgcHVudG9zIG3DoXMsIGNvbiBpbnRlcnZhbG8gZGUgYHIgZm10KHR1WyJUMi1UMSIsICJsd3IiXSlgIGEgYHIgZm10KHR1WyJUMi1UMSIsICJ1cHIiXSlgLgoKKipUMyBmcmVudGUgYSBUMToqKiBgciBmbXQodHVbIlQzLVQxIiwgImRpZmYiXSlgIHB1bnRvcyBtw6FzLCBjb24gaW50ZXJ2YWxvIGRlIGByIGZtdCh0dVsiVDMtVDEiLCAibHdyIl0pYCBhIGByIGZtdCh0dVsiVDMtVDEiLCAidXByIl0pYC4KCioqVDMgZnJlbnRlIGEgVDI6KiogYHIgZm10KHR1WyJUMy1UMiIsICJkaWZmIl0pYCBwdW50b3MgbcOhcywgY29uIGludGVydmFsbyBkZSBgciBmbXQodHVbIlQzLVQyIiwgImx3ciJdKWAgYSBgciBmbXQodHVbIlQzLVQyIiwgInVwciJdKWAuCgpFbiBlbCBlamVtcGxvIG9yaWdpbmFsIGxvcyB0cmVzIGludGVydmFsb3MgcXVlZGFuIHBvciBlbmNpbWEgZGUgY2Vyby4gTGEgZGVjaXNpw7NuIGNsw61uaWNhIGV4aWdlIGRlZmluaXIgcHJldmlhbWVudGUgcXXDqSBkaWZlcmVuY2lhIHNlcsOtYSBpbXBvcnRhbnRlIHBhcmEgZWwgcGFjaWVudGUsIGFkZW3DoXMgZGUgdmFsb3JhciBzdSBzaWduaWZpY2FjacOzbiBlc3RhZMOtc3RpY2EuCgojIFF1w6kgY29tcHJvYmFtb3MgZW4gbG9zIHJlc2lkdW9zCgpVbiByZXNpZHVvIGVzIGxhIHBhcnRlIGRlbCBwdW50YWplIHF1ZSBlbCBtb2RlbG8gbm8gZXhwbGljYSBkZXNwdcOpcyBkZSBjb25zaWRlcmFyICoqdGFudG8gbGEgbW9kYWxpZGFkIGNvbW8gZWwgYmxvcXVlKiouIFVuIHJlc2lkdW8gZGUgKzIgaW5kaWNhIHF1ZSBsYSBwZXJzb25hIG9idHV2byBkb3MgcHVudG9zIG3DoXMgZGUgbG8gZXN0aW1hZG8gcGFyYSBzdSBjb21iaW5hY2nDs24gZGUgYmxvcXVlIHkgdHJhdGFtaWVudG8uCgpFbCBBTk9WQSBzdXBvbmUgZXJyb3JlcyBpbmRlcGVuZGllbnRlcyBlbnRyZSBwYWNpZW50ZXMsIHZhcmlhbnphIGFwcm94aW1hZGFtZW50ZSBjb23Dum4geSBub3JtYWxpZGFkIHJhem9uYWJsZSBkZSBsb3MgZXJyb3Jlcy4gTGEgaW5kZXBlbmRlbmNpYSBwcm9jZWRlIGRlbCBkaXNlw7FvLCBubyBkZSB1bmEgcHJ1ZWJhIGRlIG5vcm1hbGlkYWQuCgpgYGB7ciB0YWJsYS1zdXB1ZXN0b3N9CmRpYWdub3N0aWNvcyA8LSBkYXRhLmZyYW1lKAogIFByb2NlZGltaWVudG8gPSBjKCJTaGFwaXJv4oCTV2lsayBkZSByZXNpZHVvcyIsICJCYXJ0bGV0dCBzb2JyZSByZXNpZHVvcyIsICJMZXZlbmUtbWVkaWFuYSBzb2JyZSByZXNpZHVvcyIpLAogIHAgPSBjKGZwKHNoJHAudmFsdWUpLCBmcChiYSRwLnZhbHVlKSwgZnAobGV2WzEsICJQcig+RikiXSkpLAogIEFsY2FuY2UgPSBjKCJEaWFnbsOzc3RpY28gZGUgbm9ybWFsaWRhZCBqdW50byBjb24gZWwgZ3LDoWZpY28gUVEiLAogICAgICAgICAgICAgICJFeHBsb3JhdG9yaW87IHJlc2lkdW9zIHJlbGFjaW9uYWRvcyBwb3IgZWwgYWp1c3RlIiwKICAgICAgICAgICAgICAiRXhwbG9yYXRvcmlvOyByZXNpZHVvcyByZWxhY2lvbmFkb3MgcG9yIGVsIGFqdXN0ZSIpKQprbml0cjo6a2FibGUoZGlhZ25vc3RpY29zLCByb3cubmFtZXMgPSBGQUxTRSwKICBjYXB0aW9uID0gIlRhYmxhIDUuIExvcyB2YWxvcmVzIHAgbm8gZGVtdWVzdHJhbiBlbCBjdW1wbGltaWVudG8gZGUgbG9zIHN1cHVlc3Rvcy4iKQpgYGAKCioqUHJlY2F1Y2nDs24gZXNwZWPDrWZpY2EgZGVsIERCQ0EuKiogTG9zIHJlc2lkdW9zIGVzdMOhbiByZWxhY2lvbmFkb3MgcG9yIGVsIGFqdXN0ZS4gUG9yIGVzbywgQmFydGxldHQgeSBMZXZlbmUgY2FsY3VsYWRvcyBzb2JyZSBlbGxvcyBubyBjb25zZXJ2YW4gZXhhY3RhbWVudGUgbGEgY2FsaWJyYWNpw7NuIGRlIHBydWViYXMgZW50cmUgbXVlc3RyYXMgaW5kZXBlbmRpZW50ZXMuIFNlIHByZXNlbnRhbiBjb21vIGV4cGxvcmFjacOzbiwgc2luIHVzYXJsb3MgY29tbyBzZW3DoWZvcm8gYXV0b23DoXRpY28gcGFyYSBlbGVnaXIgZWwgYW7DoWxpc2lzLiBBcGxpY2FybG9zIHNvbG8gYSBsb3MgcHVudGFqZXMgYnJ1dG9zIHRhbXBvY28gYWlzbGFyw61hIGxhIHZhcmlhY2nDs24gcmVzaWR1YWwuCgpgYGB7ciBxcS1yZXNpZHVvcywgZmlnLmNhcD0iRmlndXJhIDMuIEdyw6FmaWNvIFFRIGRlIHJlc2lkdW9zIGVzdGFuZGFyaXphZG9zIGRlbCBtb2RlbG8gY29uIGJsb3F1ZSB5IHRyYXRhbWllbnRvLiJ9CmdncGxvdDI6OmdncGxvdChkaWFnLCBnZ3Bsb3QyOjphZXMoc2FtcGxlID0gRXN0YW5kYXJpemFkbykpICsKICBnZ3Bsb3QyOjpzdGF0X3FxKGNvbG91ciA9ICIjMTU5QTk0Iiwgc2l6ZSA9IDIuNSkgKwogIGdncGxvdDI6OnN0YXRfcXFfbGluZShjb2xvdXIgPSAiIzE4MzM0OSIsIGxpbmV0eXBlID0gImRhc2hlZCIpICsgdGVtYSArCiAgZ2dwbG90Mjo6bGFicyh0aXRsZSA9ICLCv0xvcyBlcnJvcmVzIHJlc3RhbnRlcyB0aWVuZW4gdW5hIGZvcm1hIGFwcm94aW1hZGFtZW50ZSBub3JtYWw/IiwKICAgIHN1YnRpdGxlID0gIllhIHNlIGhhIGNvbnNpZGVyYWRvIGxhIHZhcmlhY2nDs24gZW50cmUgYmxvcXVlcyB5IG1vZGFsaWRhZGVzIiwKICAgIHggPSAiQ3VhbnRpbGVzIGRlIHJlZmVyZW5jaWEgbm9ybWFsIiwgeSA9ICJSZXNpZHVvcyBlc3RhbmRhcml6YWRvcyIpCmBgYAoKKipDw7NtbyBsZWVybG8uKiogVW5hIGNlcmNhbsOtYSByYXpvbmFibGUgZGUgbG9zIHB1bnRvcyBhIGxhIGzDrW5lYSBlcyBjb21wYXRpYmxlIGNvbiBub3JtYWxpZGFkIGFwcm94aW1hZGEuIFVuYSBjdXJ2YSBwcm9udW5jaWFkYSBvIHB1bnRvcyBtdXkgYWxlamFkb3MgZW4gbG9zIGV4dHJlbW9zIGp1c3RpZmljYXLDrWFuIHJldmlzYXIgZWwgbW9kZWxvIHkgbG9zIHJlZ2lzdHJvcy4gU2hhcGlyb+KAk1dpbGsgZGEgcCA9IGByIGZwKHNoJHAudmFsdWUpYDsgbm8gZGV0ZWN0YSB1biBhbGVqYW1pZW50byBhbCBuaXZlbCBkZSAwLDA1LCBwZXJvIGNvbiB1bmEgbXVlc3RyYSBwZXF1ZcOxYSBwdWVkZSBwYXNhciBwb3IgYWx0byBwcm9ibGVtYXMgcmVsZXZhbnRlcy4KCmBgYHtyIHJlc2lkdW9zLWFqdXN0YWRvcywgZmlnLmNhcD0iRmlndXJhIDQuIFJlc2lkdW9zIGZyZW50ZSBhIGNvbXByZW5zacOzbiBhanVzdGFkYSBwb3IgYmxvcXVlIHkgdHJhdGFtaWVudG8uIn0KZ2dwbG90Mjo6Z2dwbG90KGRpYWcsIGdncGxvdDI6OmFlcyhBanVzdGFkbywgUmVzaWR1bykpICsKICBnZ3Bsb3QyOjpnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAwLCBsaW5ldHlwZSA9ICJkYXNoZWQiLCBjb2xvdXIgPSAiIzYzNzU4QSIpICsKICBnZ3Bsb3QyOjpnZW9tX3BvaW50KGNvbG91ciA9ICIjNTM2OUIwIiwgc2l6ZSA9IDIuNykgKyB0ZW1hICsKICBnZ3Bsb3QyOjpsYWJzKHRpdGxlID0gIsK/TGEgZGlzcGVyc2nDs24gZGUgbG9zIGVycm9yZXMgY2FtYmlhIGNvbiBlbCBuaXZlbCBlc3RpbWFkbz8iLAogICAgc3VidGl0bGUgPSAiQnVzY2FyIGFtcGxpdHVkZXMgc2VtZWphbnRlcyB5IHBvc2libGVzIG9ic2VydmFjaW9uZXMgZXh0cmVtYXMiLAogICAgeCA9ICJDb21wcmVuc2nDs24gZXN0aW1hZGEgcG9yIGVsIG1vZGVsbyIsIHkgPSAiUmVzaWR1byBlbiBwdW50b3MiKQpgYGAKCioqQ8OzbW8gbGVlcmxvLioqIFNlIGJ1c2NhIHVuYSBudWJlIGFscmVkZWRvciBkZSBjZXJvIHNpbiB1bmEgZm9ybWEgZGUgYWJhbmljbyBjbGFyYS4gVW5hIGFtcGxpdHVkIHF1ZSBhdW1lbnRlIGFsIGF2YW56YXIgaG9yaXpvbnRhbG1lbnRlIHN1Z2VyaXLDrWEgdmFyaWFjacOzbiBubyBjb25zdGFudGU7IHVuYSBjdXJ2YSBzdWdlcmlyw61hIHVuYSBlc3RydWN0dXJhIG5vIGV4cGxpY2FkYS4gQ29uIDE4IHB1bnRvcywgbGEgZmlndXJhIGVzIG9yaWVudGF0aXZhLiBVbiBwdW50byBleHRyZW1vIGV4aWdlIGNvbXByb2JhciBlbCByZWdpc3RybyB5IHZhbG9yYXIgc3UgaW5mbHVlbmNpYSwgbm8gYm9ycmFybG8gYXV0b23DoXRpY2FtZW50ZS4KCiMgUXXDqSBhcG9ydGFuIEZyaWVkbWFuIHkgbGEgYWxlYXRvcml6YWNpw7NuCgojIyBGcmllZG1hbiBjb25zZXJ2YSBsYSBjb21wYXJhY2nDs24gcG9yIGJsb3F1ZXMKCkZyaWVkbWFuIG9yZGVuYSBsb3MgdHJlcyBwdW50YWplcyAqKmRlbnRybyBkZSBjYWRhIGJsb3F1ZSoqIHkgZXZhbMO6YSBzaSB1bmEgbW9kYWxpZGFkIHRpZW5kZSBhIG9jdXBhciBwb3NpY2lvbmVzIGRpZmVyZW50ZXMuIE5vIHJlcXVpZXJlIG5vcm1hbGlkYWQsIHBlcm8gc8OtIGJsb3F1ZXMgaW5kZXBlbmRpZW50ZXMsIGNvbXBsZXRvcyB5IHJlc3B1ZXN0YXMgY29tcGFyYWJsZXMuIFN1IGhpcMOzdGVzaXMgcG9yIHJhbmdvcyBubyBlcyBpZMOpbnRpY2EgYSBsYSBpZ3VhbGRhZCBkZSBtZWRpYXMgZGVsIEFOT1ZBLiBLcnVza2Fs4oCTV2FsbGlzIGlnbm9yYXLDrWEgbG9zIGJsb3F1ZXMgeSBubyBlcyBsYSBhbHRlcm5hdGl2YSB1dGlsaXphZGEgYXF1w60uCgpFbCBlc3RhZMOtc3RpY28gZGUgRnJpZWRtYW4gZXMgYHIgZm10KHVubmFtZShmciRzdGF0aXN0aWMpLCAzKWAsIGNvbiBwID0gYHIgZnAoZnIkcC52YWx1ZSlgIHNlZ8O6biBzdSBhcHJveGltYWNpw7NuIGNoaSBjdWFkcmFkby4gS2VuZGFsbCBXIGVzIGByIGZtdChXLCAzKWA6IGVuIGVzdG9zIGRhdG9zLCBlbCBvcmRlbiBlbnRyZSBtb2RhbGlkYWRlcyBlcyBjb21wbGV0YW1lbnRlIGNvbmNvcmRhbnRlIGVuIGxvcyBzZWlzIGJsb3F1ZXMuICoqVyA9IDEgbm8gc2lnbmlmaWNhIGNvbXByZW5zacOzbiBkZWwgMTAwICUgbmkgZ2FyYW50aXphIHF1ZSBzZSByZXBpdGEgZWwgcGF0csOzbiBlbiBvdHJvcyBwYWNpZW50ZXMuKiogQ29uIHNvbG8gc2VpcyBibG9xdWVzIGRlYmUgcmVjb25vY2Vyc2UgZWwgY2Fyw6FjdGVyIGFwcm94aW1hZG8gZGUgbGEgcHJ1ZWJhIGdsb2JhbC4KCiMjIEFsZWF0b3JpemFjacOzbiBkZW50cm8gZGUgY2FkYSBibG9xdWUKCkxhIHBydWViYSBjb21wbGVtZW50YXJpYSBjb25zZXJ2YSBsb3MgdHJlcyBwdW50YWplcyBkZSBjYWRhIGJsb3F1ZSB5IGNhbWJpYSBhbGVhdG9yaWFtZW50ZSBzdXMgZXRpcXVldGFzIFQxLCBUMiB5IFQzLiBSZXBpdGUgZXNlIHNvcnRlbyAqKmByIEJgIHZlY2VzKiogeSBjb21wYXJhIGxvcyBlc3RhZMOtc3RpY29zIEYgc2ltdWxhZG9zIGNvbiBlbCBvYnNlcnZhZG8uIE5vIG1lemNsYSBwYWNpZW50ZXMgZW50cmUgYmxvcXVlcy4KCkVuIGxhIGVqZWN1Y2nDs24gcmVwcm9kdWNpYmxlLCBzZSBvYnR1dmllcm9uIGByIGV4dHJlbW9zYCByZXN1bHRhZG9zIHRhbiBleHRyZW1vcyBjb21vIGVsIG9ic2VydmFkbyBlbnRyZSBgciBCYCBzb3J0ZW9zLiBDb24gbGEgY29ycmVjY2nDs24gcXVlIGV2aXRhIGluZm9ybWFyIHAgPSAwLCBlbCB2YWxvciBNb250ZSBDYXJsbyBlcyAqKmByIGZtdChwX3Blcm0sIDQpYCoqLiBObyBlcyB1bmEgZW51bWVyYWNpw7NuIGV4YWN0YTogY2FtYmlhciBsYSBzZW1pbGxhIG8gZWwgbsO6bWVybyBkZSByZXBldGljaW9uZXMgcHVlZGUgbW9kaWZpY2FybG8gbGlnZXJhbWVudGUuIFVuYSBzZW1pbGxhIGZpamEgcGVybWl0ZSByZXBldGlyIGVsIG1pc21vIGPDoWxjdWxvIGNvbiBsYSBtaXNtYSBjb25maWd1cmFjacOzbiBkZSBSLgoKU3UgdmFsaWRleiBlbiB1biBlc3R1ZGlvIHJlYWwgZXhpZ2UgcXVlIGxhIGFzaWduYWNpw7NuIHNlIGhheWEgc29ydGVhZG8gZGVudHJvIGRlIGNhZGEgYmxvcXVlLiBDb250cmFzdGEgdW5hIGhpcMOzdGVzaXMgZGUgYXVzZW5jaWEgZGUgZWZlY3RvIGluZGl2aWR1YWwgYmFqbyBlbCBlc3F1ZW1hIGRlIGFsZWF0b3JpemFjacOzbjsgbm8gZGViZSBjb25mdW5kaXJzZSBhdXRvbcOhdGljYW1lbnRlIGNvbiBjdWFscXVpZXIgaGlww7N0ZXNpcyBkZSBpZ3VhbGRhZCBkZSBtZWRpYXMuCgojIEludGVycHJldGFjacOzbiBwYXJhIGxhIHByZWd1bnRhIGRlIGludmVzdGlnYWNpw7NuCgpDb24gbG9zIGRhdG9zIGZpY3RpY2lvcyB5IGVsIG1vZGVsbyBhZGl0aXZvLCBlbCBBTk9WQSB5IFR1a2V5IGRpc3Rpbmd1ZW4gbG9zIHRyZXMgZm9ybWF0b3MsIGNvbiBtYXlvciBjb21wcmVuc2nDs24gcHJvbWVkaW8gZW4gVDMsIHNlZ3VpZG8gcG9yIFQyIHkgVDEuIExhIGNvbXBhcmFjacOzbiBzZSByZWFsaXphIGNvbnNpZGVyYW5kbyBsb3Mgbml2ZWxlcyBpbmljaWFsZXMgYWdydXBhZG9zIGVuIGJsb3F1ZXMuCgpGcmllZG1hbiB0YW1iacOpbiBkZXRlY3RhIGRpZmVyZW5jaWFzIGdsb2JhbGVzLiBTaW4gZW1iYXJnbywgbGFzIGNvbXBhcmFjaW9uZXMgV2lsY294b24gcG9yIGJsb3F1ZXMgY29uIGFqdXN0ZSBIb2xtICoqbm8gZGlzdGluZ3VlbiBwYXJlcyBhbCBuaXZlbCBkZSAwLDA1KiogZW4gZXN0ZSBlamVtcGxvLiBFc2EgZGlmZXJlbmNpYSBkZSByZXN1bHRhZG9zIHNlIGluZm9ybWE6IGxhcyBwcnVlYmFzIHV0aWxpemFuIGluZm9ybWFjacOzbiB5IHN1cHVlc3RvcyBkaXN0aW50b3MsIHkgc2VpcyBibG9xdWVzIG9mcmVjZW4gcG9jYSByZXNvbHVjacOzbiBwYXJhIGNvbXBhcmFjaW9uZXMgbcO6bHRpcGxlcyBwb3IgcmFuZ29zLiBObyBkZWJlIHNlbGVjY2lvbmFyc2UgZWwgbcOpdG9kbyBxdWUgYXJyb2plIGVsIG1lbm9yIHZhbG9yIHAuCgpQYXJhIHJlc3BvbmRlciBlbiBwYWNpZW50ZXMgcmVhbGVzIHNlIG5lY2VzaXRhbiB1bmEgbXVlc3RyYSBjYWxjdWxhZGEsIHVuIGluc3RydW1lbnRvIGRlIGNvbXByZW5zacOzbiB2w6FsaWRvIHkgY29uZGljaW9uZXMgZXF1aXZhbGVudGVzIGRlIGluZm9ybWFjacOzbiB5IGFjbGFyYWNpw7NuIGRlIGR1ZGFzLiBMb3MgZm9ybWF0b3Mgbm8gZGViZW4gb21pdGlyIGNvbnRlbmlkbyBjbMOtbmljbyBlc2VuY2lhbC4gVDMgY29tYmluYSBpbmZvZ3JhZsOtYXMsIHNvcG9ydGUgZGlnaXRhbCB5IGZpcm1hIGVsZWN0csOzbmljYTogZWwgZGlzZcOxbyBjb21wYXJhIGVzZSBwYXF1ZXRlIHkgKipubyBhw61zbGEgZWwgZWZlY3RvIGRlIGxhIGZpcm1hKiouCgojIERldGFsbGVzIHkgcmVwcm9kdWNpYmlsaWRhZAoKPGRldGFpbHM+CjxzdW1tYXJ5PlZlciBsYXMgMTggb2JzZXJ2YWNpb25lcyB5IGxhIGNvbXByb2JhY2nDs24gZGUgYmxvcXVlcyBjb21wbGV0b3M8L3N1bW1hcnk+CgpgYGB7ciBkYXRvcy1jb21wbGV0b3N9CmtuaXRyOjprYWJsZShkYXRvc19kYmNhWywgYygicGFjaWVudGUiLCAiYmxvcXVlIiwgImFsZmFiZXRpemFjaW9uX2luaWNpYWwiLCAidHJhdGFtaWVudG8iLCAiY29tcHJlbnNpb24iKV0sCiAgcm93Lm5hbWVzID0gRkFMU0UsCiAgY29sLm5hbWVzID0gYygiUGFjaWVudGUiLCAiQmxvcXVlIiwgIkFsZmFiZXRpemFjacOzbiBpbmljaWFsIiwgIlRyYXRhbWllbnRvIiwgIkNvbXByZW5zacOzbiIpKQprbml0cjo6a2FibGUoYXMuZGF0YS5mcmFtZS5tYXRyaXgod2l0aChkYXRvc19kYmNhLCB0YWJsZShibG9xdWUsIHRyYXRhbWllbnRvKSkpLAogIGNhcHRpb24gPSAiVW5hIG9ic2VydmFjacOzbiBwb3IgY29tYmluYWNpw7NuIGRlIGJsb3F1ZSB5IHRyYXRhbWllbnRvLiIpCmBgYAoKPC9kZXRhaWxzPgoKPGRldGFpbHM+CjxzdW1tYXJ5PlZlciBsYXMgY29tcGFyYWNpb25lcyBXaWxjb3hvbiByZWxhY2lvbmFkYXMgcG9yIGJsb3F1ZTwvc3VtbWFyeT4KCkxhcyBkaWZlcmVuY2lhcyBzZSBjYWxjdWxhbiBlbnRyZSBwZXJzb25hcyBkZWwgbWlzbW8gYmxvcXVlLiBXaWxjb3hvbiBkZSByYW5nb3MgY29uIHNpZ25vIHV0aWxpemEgZXNhIHJlbGFjacOzbiB5IHJlcXVpZXJlIHNpbWV0csOtYSBkZSBsYXMgZGlmZXJlbmNpYXMgcGFyYSB1bmEgaW50ZXJwcmV0YWNpw7NuIGRlIGxvY2FsaXphY2nDs24uIFNlIHVzYSBhcHJveGltYWNpw7NuIG5vcm1hbCBjb24gY29ycmVjY2nDs24gZGUgY29udGludWlkYWQgcGFyYSBhZG1pdGlyIGVtcGF0ZXM7IGVsIGFqdXN0ZSBIb2xtIGNvbnNpZGVyYSBsYXMgdHJlcyBjb21wYXJhY2lvbmVzLgoKYGBge3IgcGFyZXMtZnJpZWRtYW59CnRhYmxhX3Bvc3QgPC0gcG9zdF9mclssIGMoIkNvbXBhcmFjaW9uIiwgIk1lZGlhbmFfZGlmZXJlbmNpYSIsICJwX0hvbG0iKV0KdGFibGFfcG9zdCRwX0hvbG0gPC0gZnAodGFibGFfcG9zdCRwX0hvbG0pCmtuaXRyOjprYWJsZSh0YWJsYV9wb3N0LCBkaWdpdHMgPSAyLCByb3cubmFtZXMgPSBGQUxTRSwKICBjb2wubmFtZXMgPSBjKCJDb21wYXJhY2nDs24iLCAiTWVkaWFuYSBkZSBkaWZlcmVuY2lhcyBwb3IgYmxvcXVlIiwgInAgYWp1c3RhZG8gSG9sbSIpKQpgYGAKClVuYSBtZWRpYW5hIGRlIGRpZmVyZW5jaWFzIG5vIGVzIG5lY2VzYXJpYW1lbnRlIGlndWFsIGEgbGEgZGlmZXJlbmNpYSBkZSBtZWRpYW5hcy4gTm8gZGV0ZWN0YXIgc2lnbmlmaWNhY2nDs24gZGVzcHXDqXMgZGVsIGFqdXN0ZSBubyBkZW11ZXN0cmEgZXF1aXZhbGVuY2lhIGVudHJlIGZvcm1hdG9zLgoKPC9kZXRhaWxzPgoKPGRldGFpbHM+CjxzdW1tYXJ5PlZlciBvYnNlcnZhY2lvbmVzIHBvdGVuY2lhbG1lbnRlIGluZmx1eWVudGVzPC9zdW1tYXJ5PgoKTGEgZGlzdGFuY2lhIGRlIENvb2sgb3JpZW50YSBzb2JyZSBjdcOhbnRvIHBvZHLDrWEgaW5mbHVpciB1bmEgb2JzZXJ2YWNpw7NuIGVuIGVsIG1vZGVsby4gTGEgcmVmZXJlbmNpYSA0L24gZXMgZXhwbG9yYXRvcmlhIHkgbm8gYXV0b3JpemEgZWxpbWluYXIgcGFjaWVudGVzLiBTZSByZXZpc2FuIGxvcyByZWdpc3Ryb3MgeSwgc2kgY29ycmVzcG9uZGUsIHNlIGluZm9ybWEgdW4gYW7DoWxpc2lzIGRlIHNlbnNpYmlsaWRhZC4KCmBgYHtyIGluZmx1ZW5jaWF9CmluZmx1ZW5jaWEgPC0gZGF0YS5mcmFtZShQYWNpZW50ZSA9IGRhdG9zX2RiY2EkcGFjaWVudGUsIEJsb3F1ZSA9IGRhdG9zX2RiY2EkYmxvcXVlLAogIFJlc2lkdW9fZXN0YW5kYXJpemFkbyA9IGRpYWckRXN0YW5kYXJpemFkbywgQ29vayA9IGRpYWckQ29vaywKICBSZXZpc2FyID0gaWZlbHNlKGRpYWckQ29vayA+IDQgLyBucm93KGRhdG9zX2RiY2EpLCAiUmV2aXNhciByZWdpc3RybyIsICJTaW4gc2XDsWFsIHNlZ8O6biBlc3RhIHJlZmVyZW5jaWEiKSkKa25pdHI6OmthYmxlKGluZmx1ZW5jaWFbb3JkZXIoLWluZmx1ZW5jaWEkQ29vayksIF0sIGRpZ2l0cyA9IDMsIHJvdy5uYW1lcyA9IEZBTFNFKQpgYGAKCjwvZGV0YWlscz4KCjxkZXRhaWxzPgo8c3VtbWFyeT5WZXIgZWwgY8OzZGlnbyBkZSBhbGVhdG9yaXphY2nDs24geSBsYSBjb25maWd1cmFjacOzbiBkZSBSPC9zdW1tYXJ5PgoKYGBge3IgY29kaWdvLXBlcm11dGFjaW9uLCBlY2hvPVRSVUUsIGV2YWw9RkFMU0V9CnNldC5zZWVkKDIwMjYxMDMwKQpCIDwtIDk5OTlMCkZfcGVybXV0YWRvIDwtIHJlcGxpY2F0ZShCLCB7CiAgbSA8LSBtYXRyaXoKICBmb3IgKGogaW4gc2VxX2xlbihucm93KG0pKSkgbVtqLCBdIDwtIHNhbXBsZShtW2osIF0pCiAgZXN0YWRpc3RpY29fRihtKQp9KQpwX3Blcm0gPC0gKDEgKyBzdW0oRl9wZXJtdXRhZG8gPj0gRl9vYnNlcnZhZG8gLSAxZS0xMCkpIC8gKEIgKyAxKQpgYGAKCmBgYHtyIHNlc2lvbn0Kc2Vzc2lvbkluZm8oKQpgYGAKCjwvZGV0YWlscz4KCkVzdGUgaW5mb3JtZSBjb25zZXJ2YSBsb3MgMTggcmVnaXN0cm9zIHkgbG9zIHByb2NlZGltaWVudG9zIGRlICoqQW5hbGlzaXNfREJDQV9Db25zZW50aW1pZW50by5SKiosIHByZXNlbnRhZG9zIGVuIHVuIGZvcm1hdG8gcmVzdW1pZG8gY29uIGV4cGxpY2FjaW9uZXMuIFNlIHJlY2FsY3VsYSBhbCBwdWxzYXIgKipLbml0KiogeSBubyBuZWNlc2l0YSBlbCBzY3JpcHQgb3JpZ2luYWwgbmkgdW5hIGJhc2UgZXh0ZXJuYS4gRWwgY8OzZGlnbyBjb21wbGV0byBzZSBjb25zdWx0YSBhYnJpZW5kbyBlbCBhcmNoaXZvIGAucm1kYCBvIG1lZGlhbnRlIGxhIGRlc2NhcmdhIGRlIGPDs2RpZ28gZGVsIEhUTUwuIExvcyByZXN1bHRhZG9zIHNvbiBkaWTDoWN0aWNvcyB5IG5vIGRlbXVlc3RyYW4gZWZpY2FjaWEgY2zDrW5pY2EgZGUgbmluZ3VuYSBtb2RhbGlkYWQuCgo=