turismo <- read.csv("/Users/benjaminreyessanchez/Downloads/Base de datos turismo limpia")

library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.1     ✔ readr     2.1.4
## ✔ forcats   1.0.0     ✔ stringr   1.5.0
## ✔ ggplot2   3.4.1     ✔ tibble    3.2.1
## ✔ lubridate 1.9.2     ✔ tidyr     1.3.0
## ✔ purrr     1.0.1     
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(dplyr)
library(ggplot2)

Análisis Descriprivo

Conocimiento Sobre el Turismo Responsable Por Edades

tab_edad <- table(turismo$Q2,turismo$Q12_1)
tab_edad
##    
##       1   2   3   4   5
##   1 164  91  96  52  36
##   2 102  46  53  42  47
barplot(tab_edad, main = "Conocimiento Turismo Responsable", xlab = "Edades", ylab = "Frecuencia", names.arg=c("< 25","25 - 40", "40 - 55", "55 - 65", "> 65"))
legend(x="topright", legend=c("Sí", "No"), fill = c("Black","Grey"))

Aspectos Importantes del Turismo Responsable

op3.1 <- count(turismo, Q3_1)
op3.2 <- count(turismo, Q3_2)
op3.3 <- count(turismo, Q3_3)

op3.1
##   Q3_1   n
## 1    1 356
## 2    2 255
## 3    3 118
names(op3.1) <- c("R", "Acciones y Normativas")
names(op3.2) <- c("R", "Alteración Entorno Social")
names(op3.3) <- c("R", "Equidad/Justicia Laboral")

op3.1
##   R Acciones y Normativas
## 1 1                   356
## 2 2                   255
## 3 3                   118
op3.2
##   R Alteración Entorno Social
## 1 1                       235
## 2 2                       225
## 3 3                       269
op3.3
##   R Equidad/Justicia Laboral
## 1 1                      138
## 2 2                      249
## 3 3                      342
resultadoQ3 <- merge(op3.1, op3.2, by = "R", all = TRUE) # Unir df1 y df2
resultadoQ3 <- merge(resultadoQ3, op3.3, by = "R", all = TRUE) # Unir df3 al resultado anterior
resultadoQ3$R <- as.factor(resultadoQ3$R)
barplot(as.matrix(resultadoQ3[, 2:4]), beside = TRUE, col = c("dodgerblue3", "darkorchid3", "darkorange2"),
        legend.text = rownames(df), ylim = c(0, 400),
        main = "Aspectos del Turismo Responsable", xlab = "Categorías", ylab = "Valores")
legend(x="bottomright", legend=c("1", "2", "3"), fill = c("dodgerblue3","darkorchid3", "darkorange2"))

Aspectos en Cuenta para Organizar un Viaje

p4.1 <- sum(turismo$Q4_1)
p4.2 <- sum(turismo$Q4_2)
p4.3 <- sum(turismo$Q4_3)
p4.4 <- sum(turismo$Q4_4)
p4.5 <- sum(turismo$Q4_5)
p4.6 <- sum(turismo$Q4_6)
p4.7 <- sum(turismo$Q4_7)
p4.8 <- sum(turismo$Q4_8)
p4.9 <- sum(turismo$Q4_9)
p4.10 <- sum(turismo$Q4_10)
p4.11 <- sum(turismo$Q4_11)
p4.12 <- sum(turismo$Q4_12)

p4.1
## [1] 641
p4.2
## [1] 557
p4.3
## [1] 437
p4.4
## [1] 291
p4.5
## [1] 310
p4.6
## [1] 395
p4.7
## [1] 467
p4.8
## [1] 392
p4.9
## [1] 362
p4.10
## [1] 392
p4.11
## [1] 193
p4.12
## [1] 429
df_valores <- data.frame(Categoria = c("Costo", "Seguridad", "Oferta Turística", "Nº Desplazamientos", "T Desplazamientos", "Transporte Disponible", "Conocer Cultura", "Conocer Parajes", "Gastronomía", "Recomendaciones", "Exclusividad", "Temporada Año"), Suma = c(p4.1, p4.2, p4.3, p4.4, p4.5, p4.6, p4.7, p4.8, p4.9, p4.10, p4.11, p4.12))
ggplot(df_valores, aes(x = Categoria, y = Suma)) +
  geom_bar(stat = "identity", fill = "blue") +
  geom_text(aes(label = Suma), vjust = -0.3, size = 3) +
  labs(title = "Aspectos en Cuenta para Organizar un Viaje", x = "Categoría", y = "Frecuencia") +
  theme_minimal() +
  theme(axis.text.x = element_text(size = 10, angle = 30, hjust = 1))

Afirmaciones Relacionadas a su Modo de Actuar

Preocupación por la Sostenibilidad

plot(x = factor(turismo$Q12_1), y = turismo$Q6_1, main = "Preocupación por la Sostenibilidad", xlab = "Rango de Edad", ylab = "Nivel de Preocupación", col = c("cadetblue2", "cadetblue3", "cadetblue4", "cadetblue2", "cadetblue3"))
legend(x="bottomleft", legend=c("< 25","25 - 40", "40 - 55", "55 - 65", "> 65"), fill = c("cadetblue2", "cadetblue3", "cadetblue4", "cadetblue2", "cadetblue3"))

Consciencia de Riesgos al Viajar

plot(x = factor(turismo$Q11), y = turismo$Q6_2, main = "Consciencia de Riesgos al Viajar", xlab = "Sexo", ylab = "Nivel de Consciencia", col = c("chartreuse4", "chocolate"),names.arg=c("Hombre","Mujer"))
legend(x="bottomleft", legend=c("Hombre", "Mujer"), fill = c("chartreuse4","chocolate"))

Fomento del Desarrollo Local

plot(x = factor(turismo$Q13), y = turismo$Q6_4, main = "Fomento del Desarrollo Local", xlab = "Nacionalidad", ylab = "Nivel de Afirmación", col = c("darkcyan", "darkgoldenrod"),names.arg=c("Hombre","Mujer"))
legend(x="bottomleft", legend=c("México", "España"), fill = c("darkcyan","darkgoldenrod"))

Cálculo de la Huella de Carbono de su Viaje

plot(x = factor(turismo$Q13), y = turismo$Q6_11, main = "Cálculo de la Huella de Carbono de su Viaje", xlab = "Nacionalidad", ylab = "Nivel de Responsabilidad", col = c("purple", "green3"),names.arg=c("Hombre","Mujer"))
legend(x="topleft", legend=c("México", "España"), fill = c("purple","green3"))

Participación en Redes y Actividades relacionadas al Turismo Sostenible

plot(x = factor(turismo$Q12_1), y = turismo$Q6_15, main = "Participación en Redes y Actividades Relacionadas", xlab = "Rango de Edad", ylab = "Nivel de Participación", col = c("antiquewhite2", "antiquewhite3", "antiquewhite4", "antiquewhite3", "antiquewhite2"))
legend(x="topright", legend=c("< 25","25 - 40", "40 - 55", "55 - 65", "> 65"), fill = c("antiquewhite2", "antiquewhite3", "antiquewhite4", "antiquewhite3", "antiquewhite2"))

Comportamiento hacia aspectos del medio ambiente

p6.6 <- mean(turismo$Q6_6)
p6.7 <- mean(turismo$Q6_7)
p6.9 <- mean(turismo$Q6_9)
p6.10 <- mean(turismo$Q6_10)
p6.13 <- mean(turismo$Q6_13)

p6.6
## [1] 5.567901
p6.7
## [1] 4.739369
p6.9
## [1] 4.566529
p6.10
## [1] 4.825789
p6.13
## [1] 4.304527
df_valores <- data.frame(Categoria = c("Prevención daño ambiental/social","Conservación-protección ecoaistemas","Productos bajo impacto ambiental", "Reducir consumo y emisiones","Tecnología e innovción sostenible"), Prom = c(p6.6, p6.7, p6.9, p6.10,p6.13))
ggplot(df_valores, aes(x = Categoria, y = Prom)) +
  geom_bar(stat = "identity", fill = "green4") +
  geom_text(aes(label = Prom), vjust = -0.3, size = 3) +
  labs(title = "Comportamiento hacia el medio ambiente", x = "Acciones", y = "Promedio") +
  theme_minimal() +
  theme(axis.text.x = element_text(size = 10, angle = 30, hjust = 1))

Comportamiento hacia la comunidad y su cultura

p6.5 <- mean(turismo$Q6_5)
p6.8 <- mean(turismo$Q6_8)
p6.12 <- mean(turismo$Q6_12)
p6.14 <- mean(turismo$Q6_14)

p6.5
## [1] 5.460905
p6.8
## [1] 5.94513
p6.12
## [1] 4.925926
p6.14
## [1] 3.993141
df_valores <- data.frame(Categoria = c("Comparto y aprendo sobre la comunidad","Respeto diversidad","Conservación del patrimonio","Condiciones laborales dignas"), Prom = c(p6.5, p6.8, p6.12, p6.14))
ggplot(df_valores, aes(x = Categoria, y = Prom)) +
  geom_bar(stat = "identity", fill = "orange") +
  geom_text(aes(label = Prom), position = position_stack(vjust = 0.5,)
            , size = 3) +
  labs(title = "Comportamiento hacia la comunidad y cultura", x = "Acciones", y = "Promedio") +
  theme_minimal() +
  coord_flip() +
  theme(axis.text.x = element_text(size = 10, angle = 30, hjust = 1))

Se considera “Turista Responsable”

turismo$Q13 <- factor(turismo$Q13)

ggplot(turismo, aes(x = Q12, y = Q6_16, color=Q13)) +
  geom_point() +
   labs(title = "Turista Responsable", x = "Eades", y = "Nivel de Relación") +
  scale_color_discrete(name = "País")

Disposición a pagar un mayor precio por un viaje más responsable.

turismo$Q12_1 <- factor(turismo$Q12_1)
media_p6.17 <- mean(turismo$Q6_17)
ggplot(turismo, aes(x = Q12_1, y = Q6_17)) +
  geom_violin(fill = "lightblue", color = "blue", alpha = 0.7) +
  labs(title = "Disposición a pagar un mayor precio por un viaje más responsable", x = "Rango de Edad", y = "Nivel de Disposición") +
  scale_x_discrete(labels = c("1" = "< 25", "2" = "25 - 40", "3" = "40 - 55", "4" = "55 - 65", "5" = "> 65")) + geom_hline(yintercept = media_p6.17, color = "red", linetype = "dashed", size = 1) +
  annotate("text", x = 3, y = media_p6.17, label = paste("Media =", round(media_p6.17, 2)), vjust = -0.5, color = "red")
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.

Nivel de Preocupación en su país por desarrollar Turismo Responsable

ggplot(turismo, aes(x = Q13, fill = Q6_18)) +
geom_bar(position="dodge") +
  labs(title = "Nivel de Preocupación en su país por desarrollar Turismo Responsable", x = "País") +
  scale_x_discrete(labels = c("1" = "México", "2" = "España")) +
  scale_fill_discrete(name = "Valor") 
## Warning: The following aesthetics were dropped during statistical transformation: fill
## ℹ This can happen when ggplot fails to infer the correct grouping structure in
##   the data.
## ℹ Did you forget to specify a `group` aesthetic or to convert a numerical
##   variable into a factor?

Número de viajes realizados en el último año, Razones y Planificación

hist(x = turismo$Q7, main = "Histograma - Nº de Viajes del Último Año", col = "forestgreen", xlab = "Nº de Viajes", ylab = "Frecuencia", xlim = c(0, 30))

turismo$Q9 <- as.factor(turismo$Q9)
turismo$Q12_1 <- as.factor(turismo$Q12_1)
turismo$Q10 <- as.factor(turismo$Q10)

ggplot(turismo, aes(x = Q12_1, fill = Q10)) +
  geom_bar(position = "stack") +
  facet_wrap(~ Q9, labeller = labeller(Q9 = c("1" = "Yo", "2" = "Otros", "3" = "Yo y Otros"))) +
  labs(title = "Planificación del Viaje Relacionado a la Razón del Viaje y Edad",
       x = "Rango de Edad", y = "Cantidad") +
  scale_fill_manual(values = c("steelblue4", "royalblue1", "skyblue3", "royalblue4"),
                    name = "Razón Viaje", labels = c("1" = "Ocio o Visita", "2" = "Estudio", "3" = "Trabajo", "4" = "Otro")) +
  scale_x_discrete(name = "Rango de Edad", labels = c("1" = "< 25", "2" = "25 - 40", "3" = "40 - 55", "4" = "55 - 65", "5" = "> 65")) +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

Hipótesis

base <- turismo
españa <- base[base$Q13 == 2,]
mexico <- base[base$Q13 == 1,]

Hipotesis 1; Hipotesis Alterna

q9 <- as.numeric(españa$Q9)

q9data <- sum(q9 == 1) / length(q9)

hipotesis1 <- 0.866

##res1 <- t.test(q9data, alternative = "two.sided", conf.level = 0.95, mu = hipotesis1)

Hipotesis 2; Hipotesis Alterna

q6 <- as.numeric(mexico$Q6_4)

q6data <- mean(q6)
hipotesis2 <- .50
res2 <- t.test(q6, alternative = "less", conf.level = 0.95, mu = hipotesis2)
res2
## 
##  One Sample t-test
## 
## data:  q6
## t = 58.055, df = 441, p-value = 1
## alternative hypothesis: true mean is less than 0.5
## 95 percent confidence interval:
##      -Inf 5.111478
## sample estimates:
## mean of x 
##  4.984163

Hipotesis 3; Hipotesis Alterna

q611 <- as.numeric(españa$Q6_11)

q6media <- mean(q611)

hipotesis3 <- 0.55

res3 <- t.test(q611, alternative = "less", conf.level = 0.95, mu = hipotesis3)
res3
## 
##  One Sample t-test
## 
## data:  q611
## t = 17.828, df = 286, p-value = 1
## alternative hypothesis: true mean is less than 0.55
## 95 percent confidence interval:
##      -Inf 2.667168
## sample estimates:
## mean of x 
##  2.487805

Hipotesis4; Hipotesis Alterna

vmex <- mexico$Q7
vesp <- españa$Q7

res4 <- t.test(vmex, vesp)
res4
## 
##  Welch Two Sample t-test
## 
## data:  vmex and vesp
## t = 0.2395, df = 457.41, p-value = 0.8108
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
##  -0.6081497  0.7769579
## sample estimates:
## mean of x mean of y 
##  3.753394  3.668990

Hipotesis 5; Hipotesis Alterna

q12 <- as.numeric(mexico$Q12)

hipotesis5 <- c(25, 36)

res5 <- t.test(q12, mu = mean(hipotesis5), conf.level = 0.95)
res5
## 
##  One Sample t-test
## 
## data:  q12
## t = 11.309, df = 441, p-value < 2.2e-16
## alternative hypothesis: true mean is not equal to 30.5
## 95 percent confidence interval:
##  39.19774 42.85656
## sample estimates:
## mean of x 
##  41.02715

Hipotesis6; Hipotesis Alterna

q12 <- as.numeric(españa$Q12)

hipotesis6 <- c(15,29)

res6 <- t.test(q12, mu = mean(hipotesis6), conf.level = 0.95)
res6
## 
##  One Sample t-test
## 
## data:  q12
## t = 14.223, df = 286, p-value < 2.2e-16
## alternative hypothesis: true mean is not equal to 22
## 95 percent confidence interval:
##  34.58792 38.63159
## sample estimates:
## mean of x 
##  36.60976
LS0tCnRpdGxlOiAiQ2FzbyBUdXJpc21vIgphdXRob3I6ICJFUVVJUE8gNSIKZGF0ZTogIjIwMjMtMDgtMzEiCm91dHB1dDoKICBodG1sX2RvY3VtZW50OgogICAgdG9jOiBUUlVFCiAgICB0b2NfZmxvYXQ6IFRSVUUKICAgIGNvZGVfZG93bmxvYWQ6IFRSVUUKICAKLS0tCgpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBUUlVFKQpgYGAKCmBgYHtyfQp0dXJpc21vIDwtIHJlYWQuY3N2KCIvVXNlcnMvYmVuamFtaW5yZXllc3NhbmNoZXovRG93bmxvYWRzL0Jhc2UgZGUgZGF0b3MgdHVyaXNtbyBsaW1waWEiKQoKbGlicmFyeSh0aWR5dmVyc2UpCmxpYnJhcnkoZHBseXIpCmxpYnJhcnkoZ2dwbG90MikKCmBgYAojIEFuw6FsaXNpcyBEZXNjcmlwcml2bwoKIyMjIENvbm9jaW1pZW50byBTb2JyZSBlbCBUdXJpc21vIFJlc3BvbnNhYmxlIFBvciBFZGFkZXMKCmBgYHtyfQp0YWJfZWRhZCA8LSB0YWJsZSh0dXJpc21vJFEyLHR1cmlzbW8kUTEyXzEpCnRhYl9lZGFkCmBgYApgYGB7cn0KYmFycGxvdCh0YWJfZWRhZCwgbWFpbiA9ICJDb25vY2ltaWVudG8gVHVyaXNtbyBSZXNwb25zYWJsZSIsIHhsYWIgPSAiRWRhZGVzIiwgeWxhYiA9ICJGcmVjdWVuY2lhIiwgbmFtZXMuYXJnPWMoIjwgMjUiLCIyNSAtIDQwIiwgIjQwIC0gNTUiLCAiNTUgLSA2NSIsICI+IDY1IikpCmxlZ2VuZCh4PSJ0b3ByaWdodCIsIGxlZ2VuZD1jKCJTw60iLCAiTm8iKSwgZmlsbCA9IGMoIkJsYWNrIiwiR3JleSIpKQpgYGAKCiMjIyBBc3BlY3RvcyBJbXBvcnRhbnRlcyBkZWwgVHVyaXNtbyBSZXNwb25zYWJsZQpgYGB7cn0Kb3AzLjEgPC0gY291bnQodHVyaXNtbywgUTNfMSkKb3AzLjIgPC0gY291bnQodHVyaXNtbywgUTNfMikKb3AzLjMgPC0gY291bnQodHVyaXNtbywgUTNfMykKCm9wMy4xCgpuYW1lcyhvcDMuMSkgPC0gYygiUiIsICJBY2Npb25lcyB5IE5vcm1hdGl2YXMiKQpuYW1lcyhvcDMuMikgPC0gYygiUiIsICJBbHRlcmFjacOzbiBFbnRvcm5vIFNvY2lhbCIpCm5hbWVzKG9wMy4zKSA8LSBjKCJSIiwgIkVxdWlkYWQvSnVzdGljaWEgTGFib3JhbCIpCgpvcDMuMQpvcDMuMgpvcDMuMwpgYGAKCmBgYHtyfQpyZXN1bHRhZG9RMyA8LSBtZXJnZShvcDMuMSwgb3AzLjIsIGJ5ID0gIlIiLCBhbGwgPSBUUlVFKSAjIFVuaXIgZGYxIHkgZGYyCnJlc3VsdGFkb1EzIDwtIG1lcmdlKHJlc3VsdGFkb1EzLCBvcDMuMywgYnkgPSAiUiIsIGFsbCA9IFRSVUUpICMgVW5pciBkZjMgYWwgcmVzdWx0YWRvIGFudGVyaW9yCnJlc3VsdGFkb1EzJFIgPC0gYXMuZmFjdG9yKHJlc3VsdGFkb1EzJFIpCmBgYApgYGB7cn0KYmFycGxvdChhcy5tYXRyaXgocmVzdWx0YWRvUTNbLCAyOjRdKSwgYmVzaWRlID0gVFJVRSwgY29sID0gYygiZG9kZ2VyYmx1ZTMiLCAiZGFya29yY2hpZDMiLCAiZGFya29yYW5nZTIiKSwKICAgICAgICBsZWdlbmQudGV4dCA9IHJvd25hbWVzKGRmKSwgeWxpbSA9IGMoMCwgNDAwKSwKICAgICAgICBtYWluID0gIkFzcGVjdG9zIGRlbCBUdXJpc21vIFJlc3BvbnNhYmxlIiwgeGxhYiA9ICJDYXRlZ29yw61hcyIsIHlsYWIgPSAiVmFsb3JlcyIpCmxlZ2VuZCh4PSJib3R0b21yaWdodCIsIGxlZ2VuZD1jKCIxIiwgIjIiLCAiMyIpLCBmaWxsID0gYygiZG9kZ2VyYmx1ZTMiLCJkYXJrb3JjaGlkMyIsICJkYXJrb3JhbmdlMiIpKQpgYGAKCiMjIyBBc3BlY3RvcyBlbiBDdWVudGEgcGFyYSBPcmdhbml6YXIgdW4gVmlhamUKYGBge3J9CnA0LjEgPC0gc3VtKHR1cmlzbW8kUTRfMSkKcDQuMiA8LSBzdW0odHVyaXNtbyRRNF8yKQpwNC4zIDwtIHN1bSh0dXJpc21vJFE0XzMpCnA0LjQgPC0gc3VtKHR1cmlzbW8kUTRfNCkKcDQuNSA8LSBzdW0odHVyaXNtbyRRNF81KQpwNC42IDwtIHN1bSh0dXJpc21vJFE0XzYpCnA0LjcgPC0gc3VtKHR1cmlzbW8kUTRfNykKcDQuOCA8LSBzdW0odHVyaXNtbyRRNF84KQpwNC45IDwtIHN1bSh0dXJpc21vJFE0XzkpCnA0LjEwIDwtIHN1bSh0dXJpc21vJFE0XzEwKQpwNC4xMSA8LSBzdW0odHVyaXNtbyRRNF8xMSkKcDQuMTIgPC0gc3VtKHR1cmlzbW8kUTRfMTIpCgpwNC4xCnA0LjIKcDQuMwpwNC40CnA0LjUKcDQuNgpwNC43CnA0LjgKcDQuOQpwNC4xMApwNC4xMQpwNC4xMgpgYGAKCmBgYHtyfQpkZl92YWxvcmVzIDwtIGRhdGEuZnJhbWUoQ2F0ZWdvcmlhID0gYygiQ29zdG8iLCAiU2VndXJpZGFkIiwgIk9mZXJ0YSBUdXLDrXN0aWNhIiwgIk7CuiBEZXNwbGF6YW1pZW50b3MiLCAiVCBEZXNwbGF6YW1pZW50b3MiLCAiVHJhbnNwb3J0ZSBEaXNwb25pYmxlIiwgIkNvbm9jZXIgQ3VsdHVyYSIsICJDb25vY2VyIFBhcmFqZXMiLCAiR2FzdHJvbm9tw61hIiwgIlJlY29tZW5kYWNpb25lcyIsICJFeGNsdXNpdmlkYWQiLCAiVGVtcG9yYWRhIEHDsW8iKSwgU3VtYSA9IGMocDQuMSwgcDQuMiwgcDQuMywgcDQuNCwgcDQuNSwgcDQuNiwgcDQuNywgcDQuOCwgcDQuOSwgcDQuMTAsIHA0LjExLCBwNC4xMikpCmdncGxvdChkZl92YWxvcmVzLCBhZXMoeCA9IENhdGVnb3JpYSwgeSA9IFN1bWEpKSArCiAgZ2VvbV9iYXIoc3RhdCA9ICJpZGVudGl0eSIsIGZpbGwgPSAiYmx1ZSIpICsKICBnZW9tX3RleHQoYWVzKGxhYmVsID0gU3VtYSksIHZqdXN0ID0gLTAuMywgc2l6ZSA9IDMpICsKICBsYWJzKHRpdGxlID0gIkFzcGVjdG9zIGVuIEN1ZW50YSBwYXJhIE9yZ2FuaXphciB1biBWaWFqZSIsIHggPSAiQ2F0ZWdvcsOtYSIsIHkgPSAiRnJlY3VlbmNpYSIpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMCwgYW5nbGUgPSAzMCwgaGp1c3QgPSAxKSkKYGBgCgojIyMgQWZpcm1hY2lvbmVzIFJlbGFjaW9uYWRhcyBhIHN1IE1vZG8gZGUgQWN0dWFyCiMjIyMgUHJlb2N1cGFjacOzbiBwb3IgbGEgU29zdGVuaWJpbGlkYWQKYGBge3J9CnBsb3QoeCA9IGZhY3Rvcih0dXJpc21vJFExMl8xKSwgeSA9IHR1cmlzbW8kUTZfMSwgbWFpbiA9ICJQcmVvY3VwYWNpw7NuIHBvciBsYSBTb3N0ZW5pYmlsaWRhZCIsIHhsYWIgPSAiUmFuZ28gZGUgRWRhZCIsIHlsYWIgPSAiTml2ZWwgZGUgUHJlb2N1cGFjacOzbiIsIGNvbCA9IGMoImNhZGV0Ymx1ZTIiLCAiY2FkZXRibHVlMyIsICJjYWRldGJsdWU0IiwgImNhZGV0Ymx1ZTIiLCAiY2FkZXRibHVlMyIpKQpsZWdlbmQoeD0iYm90dG9tbGVmdCIsIGxlZ2VuZD1jKCI8IDI1IiwiMjUgLSA0MCIsICI0MCAtIDU1IiwgIjU1IC0gNjUiLCAiPiA2NSIpLCBmaWxsID0gYygiY2FkZXRibHVlMiIsICJjYWRldGJsdWUzIiwgImNhZGV0Ymx1ZTQiLCAiY2FkZXRibHVlMiIsICJjYWRldGJsdWUzIikpCmBgYAoKCiMjIyMgQ29uc2NpZW5jaWEgZGUgUmllc2dvcyBhbCBWaWFqYXIKYGBge3J9CnBsb3QoeCA9IGZhY3Rvcih0dXJpc21vJFExMSksIHkgPSB0dXJpc21vJFE2XzIsIG1haW4gPSAiQ29uc2NpZW5jaWEgZGUgUmllc2dvcyBhbCBWaWFqYXIiLCB4bGFiID0gIlNleG8iLCB5bGFiID0gIk5pdmVsIGRlIENvbnNjaWVuY2lhIiwgY29sID0gYygiY2hhcnRyZXVzZTQiLCAiY2hvY29sYXRlIiksbmFtZXMuYXJnPWMoIkhvbWJyZSIsIk11amVyIikpCmxlZ2VuZCh4PSJib3R0b21sZWZ0IiwgbGVnZW5kPWMoIkhvbWJyZSIsICJNdWplciIpLCBmaWxsID0gYygiY2hhcnRyZXVzZTQiLCJjaG9jb2xhdGUiKSkKYGBgCgojIyMjIEZvbWVudG8gZGVsIERlc2Fycm9sbG8gTG9jYWwKYGBge3J9CnBsb3QoeCA9IGZhY3Rvcih0dXJpc21vJFExMyksIHkgPSB0dXJpc21vJFE2XzQsIG1haW4gPSAiRm9tZW50byBkZWwgRGVzYXJyb2xsbyBMb2NhbCIsIHhsYWIgPSAiTmFjaW9uYWxpZGFkIiwgeWxhYiA9ICJOaXZlbCBkZSBBZmlybWFjacOzbiIsIGNvbCA9IGMoImRhcmtjeWFuIiwgImRhcmtnb2xkZW5yb2QiKSxuYW1lcy5hcmc9YygiSG9tYnJlIiwiTXVqZXIiKSkKbGVnZW5kKHg9ImJvdHRvbWxlZnQiLCBsZWdlbmQ9YygiTcOpeGljbyIsICJFc3Bhw7FhIiksIGZpbGwgPSBjKCJkYXJrY3lhbiIsImRhcmtnb2xkZW5yb2QiKSkKYGBgCgoKIyMjIyBDw6FsY3VsbyBkZSBsYSBIdWVsbGEgZGUgQ2FyYm9ubyBkZSBzdSBWaWFqZQoKYGBge3J9CnBsb3QoeCA9IGZhY3Rvcih0dXJpc21vJFExMyksIHkgPSB0dXJpc21vJFE2XzExLCBtYWluID0gIkPDoWxjdWxvIGRlIGxhIEh1ZWxsYSBkZSBDYXJib25vIGRlIHN1IFZpYWplIiwgeGxhYiA9ICJOYWNpb25hbGlkYWQiLCB5bGFiID0gIk5pdmVsIGRlIFJlc3BvbnNhYmlsaWRhZCIsIGNvbCA9IGMoInB1cnBsZSIsICJncmVlbjMiKSxuYW1lcy5hcmc9YygiSG9tYnJlIiwiTXVqZXIiKSkKbGVnZW5kKHg9InRvcGxlZnQiLCBsZWdlbmQ9YygiTcOpeGljbyIsICJFc3Bhw7FhIiksIGZpbGwgPSBjKCJwdXJwbGUiLCJncmVlbjMiKSkKYGBgCgoKIyMjIyBQYXJ0aWNpcGFjacOzbiBlbiBSZWRlcyB5IEFjdGl2aWRhZGVzIHJlbGFjaW9uYWRhcyBhbCBUdXJpc21vIFNvc3RlbmlibGUKCmBgYHtyfQpwbG90KHggPSBmYWN0b3IodHVyaXNtbyRRMTJfMSksIHkgPSB0dXJpc21vJFE2XzE1LCBtYWluID0gIlBhcnRpY2lwYWNpw7NuIGVuIFJlZGVzIHkgQWN0aXZpZGFkZXMgUmVsYWNpb25hZGFzIiwgeGxhYiA9ICJSYW5nbyBkZSBFZGFkIiwgeWxhYiA9ICJOaXZlbCBkZSBQYXJ0aWNpcGFjacOzbiIsIGNvbCA9IGMoImFudGlxdWV3aGl0ZTIiLCAiYW50aXF1ZXdoaXRlMyIsICJhbnRpcXVld2hpdGU0IiwgImFudGlxdWV3aGl0ZTMiLCAiYW50aXF1ZXdoaXRlMiIpKQpsZWdlbmQoeD0idG9wcmlnaHQiLCBsZWdlbmQ9YygiPCAyNSIsIjI1IC0gNDAiLCAiNDAgLSA1NSIsICI1NSAtIDY1IiwgIj4gNjUiKSwgZmlsbCA9IGMoImFudGlxdWV3aGl0ZTIiLCAiYW50aXF1ZXdoaXRlMyIsICJhbnRpcXVld2hpdGU0IiwgImFudGlxdWV3aGl0ZTMiLCAiYW50aXF1ZXdoaXRlMiIpKQpgYGAKCiMjIyMgQ29tcG9ydGFtaWVudG8gaGFjaWEgYXNwZWN0b3MgZGVsIG1lZGlvIGFtYmllbnRlCgpgYGB7cn0KcDYuNiA8LSBtZWFuKHR1cmlzbW8kUTZfNikKcDYuNyA8LSBtZWFuKHR1cmlzbW8kUTZfNykKcDYuOSA8LSBtZWFuKHR1cmlzbW8kUTZfOSkKcDYuMTAgPC0gbWVhbih0dXJpc21vJFE2XzEwKQpwNi4xMyA8LSBtZWFuKHR1cmlzbW8kUTZfMTMpCgpwNi42CnA2LjcKcDYuOQpwNi4xMApwNi4xMwpgYGAKIAoKYGBge3J9CmRmX3ZhbG9yZXMgPC0gZGF0YS5mcmFtZShDYXRlZ29yaWEgPSBjKCJQcmV2ZW5jacOzbiBkYcOxbyBhbWJpZW50YWwvc29jaWFsIiwiQ29uc2VydmFjacOzbi1wcm90ZWNjacOzbiBlY29haXN0ZW1hcyIsIlByb2R1Y3RvcyBiYWpvIGltcGFjdG8gYW1iaWVudGFsIiwgIlJlZHVjaXIgY29uc3VtbyB5IGVtaXNpb25lcyIsIlRlY25vbG9nw61hIGUgaW5ub3ZjacOzbiBzb3N0ZW5pYmxlIiksIFByb20gPSBjKHA2LjYsIHA2LjcsIHA2LjksIHA2LjEwLHA2LjEzKSkKZ2dwbG90KGRmX3ZhbG9yZXMsIGFlcyh4ID0gQ2F0ZWdvcmlhLCB5ID0gUHJvbSkpICsKICBnZW9tX2JhcihzdGF0ID0gImlkZW50aXR5IiwgZmlsbCA9ICJncmVlbjQiKSArCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IFByb20pLCB2anVzdCA9IC0wLjMsIHNpemUgPSAzKSArCiAgbGFicyh0aXRsZSA9ICJDb21wb3J0YW1pZW50byBoYWNpYSBlbCBtZWRpbyBhbWJpZW50ZSIsIHggPSAiQWNjaW9uZXMiLCB5ID0gIlByb21lZGlvIikgKwogIHRoZW1lX21pbmltYWwoKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEwLCBhbmdsZSA9IDMwLCBoanVzdCA9IDEpKQpgYGAKCiMjIyMgQ29tcG9ydGFtaWVudG8gaGFjaWEgbGEgY29tdW5pZGFkIHkgc3UgY3VsdHVyYQoKYGBge3J9CnA2LjUgPC0gbWVhbih0dXJpc21vJFE2XzUpCnA2LjggPC0gbWVhbih0dXJpc21vJFE2XzgpCnA2LjEyIDwtIG1lYW4odHVyaXNtbyRRNl8xMikKcDYuMTQgPC0gbWVhbih0dXJpc21vJFE2XzE0KQoKcDYuNQpwNi44CnA2LjEyCnA2LjE0CmBgYApgYGB7cn0KZGZfdmFsb3JlcyA8LSBkYXRhLmZyYW1lKENhdGVnb3JpYSA9IGMoIkNvbXBhcnRvIHkgYXByZW5kbyBzb2JyZSBsYSBjb211bmlkYWQiLCJSZXNwZXRvIGRpdmVyc2lkYWQiLCJDb25zZXJ2YWNpw7NuIGRlbCBwYXRyaW1vbmlvIiwiQ29uZGljaW9uZXMgbGFib3JhbGVzIGRpZ25hcyIpLCBQcm9tID0gYyhwNi41LCBwNi44LCBwNi4xMiwgcDYuMTQpKQpnZ3Bsb3QoZGZfdmFsb3JlcywgYWVzKHggPSBDYXRlZ29yaWEsIHkgPSBQcm9tKSkgKwogIGdlb21fYmFyKHN0YXQgPSAiaWRlbnRpdHkiLCBmaWxsID0gIm9yYW5nZSIpICsKICBnZW9tX3RleHQoYWVzKGxhYmVsID0gUHJvbSksIHBvc2l0aW9uID0gcG9zaXRpb25fc3RhY2sodmp1c3QgPSAwLjUsKQogICAgICAgICAgICAsIHNpemUgPSAzKSArCiAgbGFicyh0aXRsZSA9ICJDb21wb3J0YW1pZW50byBoYWNpYSBsYSBjb211bmlkYWQgeSBjdWx0dXJhIiwgeCA9ICJBY2Npb25lcyIsIHkgPSAiUHJvbWVkaW8iKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICBjb29yZF9mbGlwKCkgKwogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMCwgYW5nbGUgPSAzMCwgaGp1c3QgPSAxKSkKYGBgCgoKCiMjIyMgU2UgY29uc2lkZXJhICJUdXJpc3RhIFJlc3BvbnNhYmxlIgoKYGBge3J9CnR1cmlzbW8kUTEzIDwtIGZhY3Rvcih0dXJpc21vJFExMykKCmdncGxvdCh0dXJpc21vLCBhZXMoeCA9IFExMiwgeSA9IFE2XzE2LCBjb2xvcj1RMTMpKSArCiAgZ2VvbV9wb2ludCgpICsKICAgbGFicyh0aXRsZSA9ICJUdXJpc3RhIFJlc3BvbnNhYmxlIiwgeCA9ICJFYWRlcyIsIHkgPSAiTml2ZWwgZGUgUmVsYWNpw7NuIikgKwogIHNjYWxlX2NvbG9yX2Rpc2NyZXRlKG5hbWUgPSAiUGHDrXMiKQogIApgYGAKCgoKCiMjIyMgRGlzcG9zaWNpw7NuIGEgcGFnYXIgdW4gbWF5b3IgcHJlY2lvIHBvciB1biB2aWFqZSBtw6FzIHJlc3BvbnNhYmxlLgoKYGBge3J9CnR1cmlzbW8kUTEyXzEgPC0gZmFjdG9yKHR1cmlzbW8kUTEyXzEpCm1lZGlhX3A2LjE3IDwtIG1lYW4odHVyaXNtbyRRNl8xNykKZ2dwbG90KHR1cmlzbW8sIGFlcyh4ID0gUTEyXzEsIHkgPSBRNl8xNykpICsKICBnZW9tX3Zpb2xpbihmaWxsID0gImxpZ2h0Ymx1ZSIsIGNvbG9yID0gImJsdWUiLCBhbHBoYSA9IDAuNykgKwogIGxhYnModGl0bGUgPSAiRGlzcG9zaWNpw7NuIGEgcGFnYXIgdW4gbWF5b3IgcHJlY2lvIHBvciB1biB2aWFqZSBtw6FzIHJlc3BvbnNhYmxlIiwgeCA9ICJSYW5nbyBkZSBFZGFkIiwgeSA9ICJOaXZlbCBkZSBEaXNwb3NpY2nDs24iKSArCiAgc2NhbGVfeF9kaXNjcmV0ZShsYWJlbHMgPSBjKCIxIiA9ICI8IDI1IiwgIjIiID0gIjI1IC0gNDAiLCAiMyIgPSAiNDAgLSA1NSIsICI0IiA9ICI1NSAtIDY1IiwgIjUiID0gIj4gNjUiKSkgKyBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSBtZWRpYV9wNi4xNywgY29sb3IgPSAicmVkIiwgbGluZXR5cGUgPSAiZGFzaGVkIiwgc2l6ZSA9IDEpICsKICBhbm5vdGF0ZSgidGV4dCIsIHggPSAzLCB5ID0gbWVkaWFfcDYuMTcsIGxhYmVsID0gcGFzdGUoIk1lZGlhID0iLCByb3VuZChtZWRpYV9wNi4xNywgMikpLCB2anVzdCA9IC0wLjUsIGNvbG9yID0gInJlZCIpCiAgCmBgYAoKIyMjIyBOaXZlbCBkZSBQcmVvY3VwYWNpw7NuIGVuIHN1IHBhw61zIHBvciBkZXNhcnJvbGxhciBUdXJpc21vIFJlc3BvbnNhYmxlCgoKYGBge3J9CgpnZ3Bsb3QodHVyaXNtbywgYWVzKHggPSBRMTMsIGZpbGwgPSBRNl8xOCkpICsKZ2VvbV9iYXIocG9zaXRpb249ImRvZGdlIikgKwogIGxhYnModGl0bGUgPSAiTml2ZWwgZGUgUHJlb2N1cGFjacOzbiBlbiBzdSBwYcOtcyBwb3IgZGVzYXJyb2xsYXIgVHVyaXNtbyBSZXNwb25zYWJsZSIsIHggPSAiUGHDrXMiKSArCiAgc2NhbGVfeF9kaXNjcmV0ZShsYWJlbHMgPSBjKCIxIiA9ICJNw6l4aWNvIiwgIjIiID0gIkVzcGHDsWEiKSkgKwogIHNjYWxlX2ZpbGxfZGlzY3JldGUobmFtZSA9ICJWYWxvciIpIAoKYGBgCgoKIyMjIE7Dum1lcm8gZGUgdmlhamVzIHJlYWxpemFkb3MgZW4gZWwgw7psdGltbyBhw7FvLCBSYXpvbmVzIHkgUGxhbmlmaWNhY2nDs24KYGBge3J9Cmhpc3QoeCA9IHR1cmlzbW8kUTcsIG1haW4gPSAiSGlzdG9ncmFtYSAtIE7CuiBkZSBWaWFqZXMgZGVsIMOabHRpbW8gQcOxbyIsIGNvbCA9ICJmb3Jlc3RncmVlbiIsIHhsYWIgPSAiTsK6IGRlIFZpYWplcyIsIHlsYWIgPSAiRnJlY3VlbmNpYSIsIHhsaW0gPSBjKDAsIDMwKSkKYGBgCgoKYGBge3J9CnR1cmlzbW8kUTkgPC0gYXMuZmFjdG9yKHR1cmlzbW8kUTkpCnR1cmlzbW8kUTEyXzEgPC0gYXMuZmFjdG9yKHR1cmlzbW8kUTEyXzEpCnR1cmlzbW8kUTEwIDwtIGFzLmZhY3Rvcih0dXJpc21vJFExMCkKCmdncGxvdCh0dXJpc21vLCBhZXMoeCA9IFExMl8xLCBmaWxsID0gUTEwKSkgKwogIGdlb21fYmFyKHBvc2l0aW9uID0gInN0YWNrIikgKwogIGZhY2V0X3dyYXAofiBROSwgbGFiZWxsZXIgPSBsYWJlbGxlcihROSA9IGMoIjEiID0gIllvIiwgIjIiID0gIk90cm9zIiwgIjMiID0gIllvIHkgT3Ryb3MiKSkpICsKICBsYWJzKHRpdGxlID0gIlBsYW5pZmljYWNpw7NuIGRlbCBWaWFqZSBSZWxhY2lvbmFkbyBhIGxhIFJhesOzbiBkZWwgVmlhamUgeSBFZGFkIiwKICAgICAgIHggPSAiUmFuZ28gZGUgRWRhZCIsIHkgPSAiQ2FudGlkYWQiKSArCiAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzID0gYygic3RlZWxibHVlNCIsICJyb3lhbGJsdWUxIiwgInNreWJsdWUzIiwgInJveWFsYmx1ZTQiKSwKICAgICAgICAgICAgICAgICAgICBuYW1lID0gIlJhesOzbiBWaWFqZSIsIGxhYmVscyA9IGMoIjEiID0gIk9jaW8gbyBWaXNpdGEiLCAiMiIgPSAiRXN0dWRpbyIsICIzIiA9ICJUcmFiYWpvIiwgIjQiID0gIk90cm8iKSkgKwogIHNjYWxlX3hfZGlzY3JldGUobmFtZSA9ICJSYW5nbyBkZSBFZGFkIiwgbGFiZWxzID0gYygiMSIgPSAiPCAyNSIsICIyIiA9ICIyNSAtIDQwIiwgIjMiID0gIjQwIC0gNTUiLCAiNCIgPSAiNTUgLSA2NSIsICI1IiA9ICI+IDY1IikpICsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDQ1LCBoanVzdCA9IDEpKQpgYGAKCgojIEhpcMOzdGVzaXMKCmBgYHtyfQpiYXNlIDwtIHR1cmlzbW8KZXNwYcOxYSA8LSBiYXNlW2Jhc2UkUTEzID09IDIsXQptZXhpY28gPC0gYmFzZVtiYXNlJFExMyA9PSAxLF0KYGBgCgoKIyMjIyBIaXBvdGVzaXMgMTsgSGlwb3Rlc2lzIEFsdGVybmEKYGBge3J9CnE5IDwtIGFzLm51bWVyaWMoZXNwYcOxYSRROSkKCnE5ZGF0YSA8LSBzdW0ocTkgPT0gMSkgLyBsZW5ndGgocTkpCgpoaXBvdGVzaXMxIDwtIDAuODY2CgojI3JlczEgPC0gdC50ZXN0KHE5ZGF0YSwgYWx0ZXJuYXRpdmUgPSAidHdvLnNpZGVkIiwgY29uZi5sZXZlbCA9IDAuOTUsIG11ID0gaGlwb3Rlc2lzMSkKYGBgCgojIyMjIEhpcG90ZXNpcyAyOyBIaXBvdGVzaXMgQWx0ZXJuYQpgYGB7cn0KcTYgPC0gYXMubnVtZXJpYyhtZXhpY28kUTZfNCkKCnE2ZGF0YSA8LSBtZWFuKHE2KQpoaXBvdGVzaXMyIDwtIC41MApyZXMyIDwtIHQudGVzdChxNiwgYWx0ZXJuYXRpdmUgPSAibGVzcyIsIGNvbmYubGV2ZWwgPSAwLjk1LCBtdSA9IGhpcG90ZXNpczIpCnJlczIKYGBgCgojIyMjIEhpcG90ZXNpcyAzOyBIaXBvdGVzaXMgQWx0ZXJuYQpgYGB7cn0KcTYxMSA8LSBhcy5udW1lcmljKGVzcGHDsWEkUTZfMTEpCgpxNm1lZGlhIDwtIG1lYW4ocTYxMSkKCmhpcG90ZXNpczMgPC0gMC41NQoKcmVzMyA8LSB0LnRlc3QocTYxMSwgYWx0ZXJuYXRpdmUgPSAibGVzcyIsIGNvbmYubGV2ZWwgPSAwLjk1LCBtdSA9IGhpcG90ZXNpczMpCnJlczMKYGBgCgojIyMjIEhpcG90ZXNpczQ7IEhpcG90ZXNpcyBBbHRlcm5hCmBgYHtyfQp2bWV4IDwtIG1leGljbyRRNwp2ZXNwIDwtIGVzcGHDsWEkUTcKCnJlczQgPC0gdC50ZXN0KHZtZXgsIHZlc3ApCnJlczQKYGBgCgojIyMjIEhpcG90ZXNpcyA1OyBIaXBvdGVzaXMgQWx0ZXJuYQpgYGB7cn0KcTEyIDwtIGFzLm51bWVyaWMobWV4aWNvJFExMikKCmhpcG90ZXNpczUgPC0gYygyNSwgMzYpCgpyZXM1IDwtIHQudGVzdChxMTIsIG11ID0gbWVhbihoaXBvdGVzaXM1KSwgY29uZi5sZXZlbCA9IDAuOTUpCnJlczUKCmBgYAoKIyMjIyBIaXBvdGVzaXM2OyBIaXBvdGVzaXMgQWx0ZXJuYQpgYGB7cn0KcTEyIDwtIGFzLm51bWVyaWMoZXNwYcOxYSRRMTIpCgpoaXBvdGVzaXM2IDwtIGMoMTUsMjkpCgpyZXM2IDwtIHQudGVzdChxMTIsIG11ID0gbWVhbihoaXBvdGVzaXM2KSwgY29uZi5sZXZlbCA9IDAuOTUpCnJlczYKCmBgYAoKCgoKCgo=