library(rio)
data=import("datos_abiertos_vigilancia_dengue.csv")
Warning in (function (input = "", file = NULL, text = NULL, cmd = NULL,  :
  Stopped early on line 87871. Expected 14 fields but found 16. Consider fill=TRUE and comment.char=. First discarded non-empty line: <<PIURA,TALARA,PARIѐAS,ENACE I\,II\,III,DENGUE SIN SEÑALES DE ALARMA,2009,9,A97.0,31,200701,2007010008,23,A,F>>
summary(data$edad)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
      0      15      25      28      38      98 
str(data)
'data.frame':   87869 obs. of  14 variables:
 $ departamento: chr  "HUANUCO" "HUANUCO" "HUANUCO" "HUANUCO" ...
 $ provincia   : chr  "LEONCIO PRADO" "LEONCIO PRADO" "LEONCIO PRADO" "LEONCIO PRADO" ...
 $ distrito    : chr  "LUYANDO" "LUYANDO" "JOSE CRESPO Y CASTILLO" "JOSE CRESPO Y CASTILLO" ...
 $ localidad   : chr  "" "" "" "" ...
 $ enfermedad  : chr  "DENGUE SIN SEÑALES DE ALARMA" "DENGUE SIN SEÑALES DE ALARMA" "DENGUE SIN SEÑALES DE ALARMA" "DENGUE SIN SEÑALES DE ALARMA" ...
 $ ano         : int  2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 ...
 $ semana      : int  47 40 48 37 42 40 34 47 47 45 ...
 $ diagnostic  : chr  "A97.0" "A97.0" "A97.0" "A97.0" ...
 $ diresa      : int  10 10 10 10 10 10 10 10 10 10 ...
 $ ubigeo      : int  100605 100605 100604 100604 100606 100605 100604 100606 100604 100601 ...
 $ localcod    : chr  "" "" "" "" ...
 $ edad        : int  9 18 32 40 16 7 39 31 13 10 ...
 $ tipo_edad   : chr  "A" "A" "A" "A" ...
 $ sexo        : chr  "M" "F" "F" "F" ...
library(dplyr)
table(data$enfermedad)

                DENGUE GRAVE DENGUE SIN SEÑALES DE ALARMA 
                         411                        87458 
data$enfermedad <- gsub("DENGUE CON SEÑALES DE ALARMA", "con", data$enfermedad)
data$enfermedad <- gsub("DENGUE SIN SEÑALES DE ALARMA", "sin", data$enfermedad)
data$enfermedad <- gsub("DENGUE GRAVE", "grave", data$enfermedad)
table(data$enfermedad)

grave   sin 
  411 87458 

En base a la población muestral podemos determinar que en la mayoría de casos (87458) sin señales de alarma, mientras que solo 411 son de condición grave. Por otro lado, cabe resaltar que no se ha encontrado ningún caso con señales de alarma.

summary(data$edad)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
      0      15      25      28      38      98 

Pregunta 1

library(lsr)
  EdadxYear = data |>
  group_by(ano) |>
  summarise(media = mean(edad, na.rm=T))
EdadxYear

Gráfico

library(ggplot2)
library(ggthemes)
library(ggplot2)

EdadxYear$ano <- factor(EdadxYear$ano)

ggplot(EdadxYear, aes(x = ano, y = media, group = 1)) +
  geom_line(color = "black", size = 1.5) +
  geom_point(color = "pink", size = 3) +  # Añadir puntos para resaltar los valores
  labs(title = "Edad promedio de personas contagiadas de dengue por año",
       x = "Año",
       y = "Edad") +
  theme_minimal(base_size = 15) +  # Usar un tema minimalista con un tamaño de fuente base de 15
  theme(
    legend.key.size = unit(1, "lines"),
    plot.title = element_text(hjust = 0.5, face = "bold"),  # Centrar y poner en negrita el título
    axis.title = element_text(face = "bold")  # Poner en negrita los títulos de los ejes
  )
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.

Pregunta 2

pregunta2 <- data %>%
  group_by(ano) %>%
  summarise(
    total_casos = n(),
    graves = sum(enfermedad == "grave"),
    sin_señales = sum(enfermedad == "sin"),
    con_señales = sum(enfermedad == "con")
  ) 

Grafico

library(ggplot2)

pregunta2$ano <- factor(pregunta2$ano)

grafico_total <- ggplot(pregunta2, aes(x = ano, y = total_casos, group = 1)) +
  geom_line() +
  labs(title = "Total de casos de Dengue a lo largo de los años",
       x = "Año",
       y = "Total de casos") +
  theme_minimal()

grafico_con_alarma <- ggplot(pregunta2, aes(x = ano, y = con_señales, group = 1)) +
  geom_line() +
  labs(title = "Casos de Dengue con Alarma a lo largo de los años",
       x = "Año",
       y = "Casos con Alarma") +
  theme_minimal()

grafico_sin_alarma <- ggplot(pregunta2, aes(x = ano, y = sin_señales, group = 1)) +
  geom_line() +
  labs(title = "Casos de Dengue sin Alarma a lo largo de los años",
       x = "Año",
       y = "Casos sin Alarma") +
  theme_minimal()

grafico_graves <- ggplot(pregunta2, aes(x = ano, y = graves, group = 1)) +
  geom_line() +
  labs(title = "Casos de Dengue Graves a lo largo de los años",
       x = "Año",
       y = "Casos Graves") +
  theme_minimal()

# Mostrar los gráficos por separado
print(grafico_total)

print(grafico_con_alarma)

print(grafico_sin_alarma)

print(grafico_graves)

NA
NA

Pregunta 4


pregunta4 <- data %>%
  group_by(departamento, provincia, ano) %>%
  summarize(
    con_alarma = sum(enfermedad == "con"),
    sin_alarma = sum(enfermedad == "sin"),
    graves = sum(enfermedad == "graves")
  )
`summarise()` has grouped output by 'departamento', 'provincia'. You can override using the `.groups`
argument.
# Mostrar los primeros registros de la base de datos resumida
head(pregunta4)

Ahora añadiré el total

pregunta4 <- pregunta4 %>%
  mutate(total_contagios = con_alarma + sin_alarma + graves)
head(pregunta4)

Data nueva completa ahora sí todo

provyear <- pregunta4 %>%
  group_by(departamento, provincia) %>%
  summarise(total_historico = sum(total_contagios))
`summarise()` has grouped output by 'departamento'. You can override using the `.groups` argument.
summary(provyear$total_historico)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
      1      71     238    1388    1262   20420 

Puesto que la media es 1138, los datos que estén por encima de dicha media serán consideradas muy altas

provyear=filter(provyear, total_historico>4499.2)

Gráfico de puntos

library(ggplot2)

# Crear el gráfico de puntos
grafico <- ggplot(provyear, aes(x = departamento, y = total_historico, label = provincia)) +
  geom_point(color = "red", size = 3) +  # Puntos rojos
  geom_text(size = 4, vjust = -0.5) +  # Etiquetas con un tamaño y alineación vertical adecuados
  labs(title = "Provincias con mayor número de casos de dengue",  # Título del gráfico
       x = "Departamentos", y = "Total de casos") +  # Etiquetas de los ejes
  theme_gray() +  # Estilo gris
  theme(plot.title = element_text(hjust = 0.5, face = "bold"),  # Alinear título al centro y en negrita
        plot.margin = unit(c(0.8, 0.8, 0.8, 0.8), "cm"))  # Márgenes del gráfico

print(grafico)

Pregunta 5

A continuación se realizará una suma de todos los datos de los departamentos para realizar el gráfico de calor

table(data$departamento)

          \\N      AMAZONAS        ANCASH     CAJAMARCA         CUSCO       HUANUCO         JUNIN 
            6          2933          1151          4646             4          1451          1500 
  LA LIBERTAD    LAMBAYEQUE          LIMA        LORETO MADRE DE DIOS         PASCO         PIURA 
         9630          5733           549         23389          1376            91         19585 
   SAN MARTIN        TUMBES       UCAYALI 
         3063          4989          7773 

Según los datos registrados, se tienen los datos de 22 departamentos y el resto son valores desconocidos

Procederemos a limpiar para después crear

pregunta5 <- data %>% filter_all(all_vars(. != "\\N"))
table(pregunta5$departamento)

     AMAZONAS        ANCASH     CAJAMARCA         CUSCO       HUANUCO         JUNIN   LA LIBERTAD 
         2933          1151          4646             4          1448          1480          8145 
   LAMBAYEQUE          LIMA        LORETO MADRE DE DIOS         PASCO         PIURA    SAN MARTIN 
         5727           542         23166          1376            91         19565          3008 
       TUMBES       UCAYALI 
         4988          7696 

Creación de la data

pregunta5 <- pregunta5 %>%
  group_by(departamento) %>%
  summarise(
    total_casos = n(),
    graves = sum(enfermedad == "grave"),
    sin_señales = sum(enfermedad == "sin"),
    con_señales = sum(enfermedad == "con")
  ) 
head(pregunta5)

Analizamos la relación entre los casos alarmantes no graves y los asintomaticos segun departamento a lo largo de los años. Para ello se debe tener en cuenta que en la base de datos significa la variable es entre los “con” y entre los “sin”

pregunta5 <- pregunta5 %>%
  mutate(relacion = con_señales/sin_señales)
pregunta5=select(pregunta5, c(1,6))
head(pregunta5)

Como no existen los casos con alarmas no graves, la relación con lo asintomáticos es de 0

DQotLS0NCnRpdGxlOiAiVGFyZWEgMSINCk5vbWJyZTogIlhpbWVuYSBZbmdhIEhlbGd1ZXJvIg0KQ8OzZGlnbzogMjAxOTA3MzMNCm91dHB1dDogaHRtbF9ub3RlYm9vaw0KLS0tDQoNCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQ0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBUUlVFKQ0KYGBgDQoNCg0KYGBge3J9DQpsaWJyYXJ5KHJpbykNCmRhdGE9aW1wb3J0KCJkYXRvc19hYmllcnRvc192aWdpbGFuY2lhX2Rlbmd1ZS5jc3YiKQ0KYGBgDQoNCmBgYHtyfQ0Kc3VtbWFyeShkYXRhJGVkYWQpDQpgYGANCmBgYHtyfQ0Kc3RyKGRhdGEpDQpgYGANCmBgYHtyfQ0KbGlicmFyeShkcGx5cikNCnRhYmxlKGRhdGEkZW5mZXJtZWRhZCkNCmBgYA0KDQoNCmBgYHtyfQ0KZGF0YSRlbmZlcm1lZGFkIDwtIGdzdWIoIkRFTkdVRSBDT04gU0XDkUFMRVMgREUgQUxBUk1BIiwgImNvbiIsIGRhdGEkZW5mZXJtZWRhZCkNCmRhdGEkZW5mZXJtZWRhZCA8LSBnc3ViKCJERU5HVUUgU0lOIFNFw5FBTEVTIERFIEFMQVJNQSIsICJzaW4iLCBkYXRhJGVuZmVybWVkYWQpDQpkYXRhJGVuZmVybWVkYWQgPC0gZ3N1YigiREVOR1VFIEdSQVZFIiwgImdyYXZlIiwgZGF0YSRlbmZlcm1lZGFkKQ0KYGBgDQoNCg0KYGBge3J9DQp0YWJsZShkYXRhJGVuZmVybWVkYWQpDQpgYGANCg0KRW4gYmFzZSBhIGxhIHBvYmxhY2nDs24gbXVlc3RyYWwgcG9kZW1vcyBkZXRlcm1pbmFyIHF1ZSBlbiBsYSBtYXlvcsOtYSBkZSBjYXNvcyAoODc0NTgpIHNpbiBzZcOxYWxlcyBkZSBhbGFybWEsIG1pZW50cmFzIHF1ZSBzb2xvIDQxMSBzb24gZGUgY29uZGljacOzbiBncmF2ZS4gUG9yIG90cm8gbGFkbywgY2FiZSByZXNhbHRhciBxdWUgbm8gc2UgaGEgZW5jb250cmFkbyBuaW5nw7puIGNhc28gY29uIHNlw7FhbGVzIGRlIGFsYXJtYS4NCg0KDQpgYGB7cn0NCnN1bW1hcnkoZGF0YSRlZGFkKQ0KYGBgDQoNClByZWd1bnRhIDENCmBgYHtyfQ0KbGlicmFyeShsc3IpDQogIEVkYWR4WWVhciA9IGRhdGEgfD4NCiAgZ3JvdXBfYnkoYW5vKSB8Pg0KICBzdW1tYXJpc2UobWVkaWEgPSBtZWFuKGVkYWQsIG5hLnJtPVQpKQ0KRWRhZHhZZWFyDQpgYGANCg0KR3LDoWZpY28NCg0KYGBge3J9DQpsaWJyYXJ5KGdncGxvdDIpDQpsaWJyYXJ5KGdndGhlbWVzKQ0KbGlicmFyeShnZ3Bsb3QyKQ0KDQpFZGFkeFllYXIkYW5vIDwtIGZhY3RvcihFZGFkeFllYXIkYW5vKQ0KDQpnZ3Bsb3QoRWRhZHhZZWFyLCBhZXMoeCA9IGFubywgeSA9IG1lZGlhLCBncm91cCA9IDEpKSArDQogIGdlb21fbGluZShjb2xvciA9ICJibGFjayIsIHNpemUgPSAxLjUpICsNCiAgZ2VvbV9wb2ludChjb2xvciA9ICJwaW5rIiwgc2l6ZSA9IDMpICsgICMgQcOxYWRpciBwdW50b3MgcGFyYSByZXNhbHRhciBsb3MgdmFsb3Jlcw0KICBsYWJzKHRpdGxlID0gIkVkYWQgcHJvbWVkaW8gZGUgcGVyc29uYXMgY29udGFnaWFkYXMgZGUgZGVuZ3VlIHBvciBhw7FvIiwNCiAgICAgICB4ID0gIkHDsW8iLA0KICAgICAgIHkgPSAiRWRhZCIpICsNCiAgdGhlbWVfbWluaW1hbChiYXNlX3NpemUgPSAxNSkgKyAgIyBVc2FyIHVuIHRlbWEgbWluaW1hbGlzdGEgY29uIHVuIHRhbWHDsW8gZGUgZnVlbnRlIGJhc2UgZGUgMTUNCiAgdGhlbWUoDQogICAgbGVnZW5kLmtleS5zaXplID0gdW5pdCgxLCAibGluZXMiKSwNCiAgICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41LCBmYWNlID0gImJvbGQiKSwgICMgQ2VudHJhciB5IHBvbmVyIGVuIG5lZ3JpdGEgZWwgdMOtdHVsbw0KICAgIGF4aXMudGl0bGUgPSBlbGVtZW50X3RleHQoZmFjZSA9ICJib2xkIikgICMgUG9uZXIgZW4gbmVncml0YSBsb3MgdMOtdHVsb3MgZGUgbG9zIGVqZXMNCiAgKQ0KDQpgYGANCg0KDQoNClByZWd1bnRhIDINCg0KYGBge3J9DQpwcmVndW50YTIgPC0gZGF0YSAlPiUNCiAgZ3JvdXBfYnkoYW5vKSAlPiUNCiAgc3VtbWFyaXNlKA0KICAgIHRvdGFsX2Nhc29zID0gbigpLA0KICAgIGdyYXZlcyA9IHN1bShlbmZlcm1lZGFkID09ICJncmF2ZSIpLA0KICAgIHNpbl9zZcOxYWxlcyA9IHN1bShlbmZlcm1lZGFkID09ICJzaW4iKSwNCiAgICBjb25fc2XDsWFsZXMgPSBzdW0oZW5mZXJtZWRhZCA9PSAiY29uIikNCiAgKSANCmBgYA0KDQoNCkdyYWZpY28NCg0KYGBge3J9DQpsaWJyYXJ5KGdncGxvdDIpDQoNCnByZWd1bnRhMiRhbm8gPC0gZmFjdG9yKHByZWd1bnRhMiRhbm8pDQoNCmdyYWZpY29fdG90YWwgPC0gZ2dwbG90KHByZWd1bnRhMiwgYWVzKHggPSBhbm8sIHkgPSB0b3RhbF9jYXNvcywgZ3JvdXAgPSAxKSkgKw0KICBnZW9tX2xpbmUoKSArDQogIGxhYnModGl0bGUgPSAiVG90YWwgZGUgY2Fzb3MgZGUgRGVuZ3VlIGEgbG8gbGFyZ28gZGUgbG9zIGHDsW9zIiwNCiAgICAgICB4ID0gIkHDsW8iLA0KICAgICAgIHkgPSAiVG90YWwgZGUgY2Fzb3MiKSArDQogIHRoZW1lX21pbmltYWwoKQ0KDQpncmFmaWNvX2Nvbl9hbGFybWEgPC0gZ2dwbG90KHByZWd1bnRhMiwgYWVzKHggPSBhbm8sIHkgPSBjb25fc2XDsWFsZXMsIGdyb3VwID0gMSkpICsNCiAgZ2VvbV9saW5lKCkgKw0KICBsYWJzKHRpdGxlID0gIkNhc29zIGRlIERlbmd1ZSBjb24gQWxhcm1hIGEgbG8gbGFyZ28gZGUgbG9zIGHDsW9zIiwNCiAgICAgICB4ID0gIkHDsW8iLA0KICAgICAgIHkgPSAiQ2Fzb3MgY29uIEFsYXJtYSIpICsNCiAgdGhlbWVfbWluaW1hbCgpDQoNCmdyYWZpY29fc2luX2FsYXJtYSA8LSBnZ3Bsb3QocHJlZ3VudGEyLCBhZXMoeCA9IGFubywgeSA9IHNpbl9zZcOxYWxlcywgZ3JvdXAgPSAxKSkgKw0KICBnZW9tX2xpbmUoKSArDQogIGxhYnModGl0bGUgPSAiQ2Fzb3MgZGUgRGVuZ3VlIHNpbiBBbGFybWEgYSBsbyBsYXJnbyBkZSBsb3MgYcOxb3MiLA0KICAgICAgIHggPSAiQcOxbyIsDQogICAgICAgeSA9ICJDYXNvcyBzaW4gQWxhcm1hIikgKw0KICB0aGVtZV9taW5pbWFsKCkNCg0KZ3JhZmljb19ncmF2ZXMgPC0gZ2dwbG90KHByZWd1bnRhMiwgYWVzKHggPSBhbm8sIHkgPSBncmF2ZXMsIGdyb3VwID0gMSkpICsNCiAgZ2VvbV9saW5lKCkgKw0KICBsYWJzKHRpdGxlID0gIkNhc29zIGRlIERlbmd1ZSBHcmF2ZXMgYSBsbyBsYXJnbyBkZSBsb3MgYcOxb3MiLA0KICAgICAgIHggPSAiQcOxbyIsDQogICAgICAgeSA9ICJDYXNvcyBHcmF2ZXMiKSArDQogIHRoZW1lX21pbmltYWwoKQ0KDQojIE1vc3RyYXIgbG9zIGdyw6FmaWNvcyBwb3Igc2VwYXJhZG8NCnByaW50KGdyYWZpY29fdG90YWwpDQpwcmludChncmFmaWNvX2Nvbl9hbGFybWEpDQpwcmludChncmFmaWNvX3Npbl9hbGFybWEpDQpwcmludChncmFmaWNvX2dyYXZlcykNCg0KDQpgYGANCg0KUHJlZ3VudGEgNA0KDQpgYGB7cn0NCg0KcHJlZ3VudGE0IDwtIGRhdGEgJT4lDQogIGdyb3VwX2J5KGRlcGFydGFtZW50bywgcHJvdmluY2lhLCBhbm8pICU+JQ0KICBzdW1tYXJpemUoDQogICAgY29uX2FsYXJtYSA9IHN1bShlbmZlcm1lZGFkID09ICJjb24iKSwNCiAgICBzaW5fYWxhcm1hID0gc3VtKGVuZmVybWVkYWQgPT0gInNpbiIpLA0KICAgIGdyYXZlcyA9IHN1bShlbmZlcm1lZGFkID09ICJncmF2ZXMiKQ0KICApDQoNCiMgTW9zdHJhciBsb3MgcHJpbWVyb3MgcmVnaXN0cm9zIGRlIGxhIGJhc2UgZGUgZGF0b3MgcmVzdW1pZGENCmhlYWQocHJlZ3VudGE0KQ0KYGBgDQoNCkFob3JhIGHDsWFkaXLDqSBlbCB0b3RhbA0KYGBge3J9DQpwcmVndW50YTQgPC0gcHJlZ3VudGE0ICU+JQ0KICBtdXRhdGUodG90YWxfY29udGFnaW9zID0gY29uX2FsYXJtYSArIHNpbl9hbGFybWEgKyBncmF2ZXMpDQpoZWFkKHByZWd1bnRhNCkNCmBgYA0KDQpEYXRhIG51ZXZhIGNvbXBsZXRhIGFob3JhIHPDrSB0b2RvDQoNCmBgYHtyfQ0KcHJvdnllYXIgPC0gcHJlZ3VudGE0ICU+JQ0KICBncm91cF9ieShkZXBhcnRhbWVudG8sIHByb3ZpbmNpYSkgJT4lDQogIHN1bW1hcmlzZSh0b3RhbF9oaXN0b3JpY28gPSBzdW0odG90YWxfY29udGFnaW9zKSkNCmBgYA0KDQpgYGB7cn0NCnN1bW1hcnkocHJvdnllYXIkdG90YWxfaGlzdG9yaWNvKQ0KYGBgDQoNClB1ZXN0byBxdWUgbGEgbWVkaWEgZXMgMTEzOCwgbG9zIGRhdG9zIHF1ZSBlc3TDqW4gcG9yIGVuY2ltYSBkZSBkaWNoYSBtZWRpYSBzZXLDoW4NCmNvbnNpZGVyYWRhcyBtdXkgYWx0YXMNCg0KYGBge3J9DQpwcm92eWVhcj1maWx0ZXIocHJvdnllYXIsIHRvdGFsX2hpc3Rvcmljbz40NDk5LjIpDQpgYGANCg0KR3LDoWZpY28gZGUgcHVudG9zDQpgYGB7cn0NCmxpYnJhcnkoZ2dwbG90MikNCg0KIyBDcmVhciBlbCBncsOhZmljbyBkZSBwdW50b3MNCmdyYWZpY28gPC0gZ2dwbG90KHByb3Z5ZWFyLCBhZXMoeCA9IGRlcGFydGFtZW50bywgeSA9IHRvdGFsX2hpc3RvcmljbywgbGFiZWwgPSBwcm92aW5jaWEpKSArDQogIGdlb21fcG9pbnQoY29sb3IgPSAicmVkIiwgc2l6ZSA9IDMpICsgICMgUHVudG9zIHJvam9zDQogIGdlb21fdGV4dChzaXplID0gNCwgdmp1c3QgPSAtMC41KSArICAjIEV0aXF1ZXRhcyBjb24gdW4gdGFtYcOxbyB5IGFsaW5lYWNpw7NuIHZlcnRpY2FsIGFkZWN1YWRvcw0KICBsYWJzKHRpdGxlID0gIlByb3ZpbmNpYXMgY29uIG1heW9yIG7Dum1lcm8gZGUgY2Fzb3MgZGUgZGVuZ3VlIiwgICMgVMOtdHVsbyBkZWwgZ3LDoWZpY28NCiAgICAgICB4ID0gIkRlcGFydGFtZW50b3MiLCB5ID0gIlRvdGFsIGRlIGNhc29zIikgKyAgIyBFdGlxdWV0YXMgZGUgbG9zIGVqZXMNCiAgdGhlbWVfZ3JheSgpICsgICMgRXN0aWxvIGdyaXMNCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSwgZmFjZSA9ICJib2xkIiksICAjIEFsaW5lYXIgdMOtdHVsbyBhbCBjZW50cm8geSBlbiBuZWdyaXRhDQogICAgICAgIHBsb3QubWFyZ2luID0gdW5pdChjKDAuOCwgMC44LCAwLjgsIDAuOCksICJjbSIpKSAgIyBNw6FyZ2VuZXMgZGVsIGdyw6FmaWNvDQoNCnByaW50KGdyYWZpY28pDQoNCmBgYA0KDQpQcmVndW50YSA1DQoNCkEgY29udGludWFjacOzbiBzZSByZWFsaXphcsOhIHVuYSBzdW1hIGRlIHRvZG9zIGxvcyBkYXRvcyBkZSBsb3MgZGVwYXJ0YW1lbnRvcyBwYXJhIHJlYWxpemFyIGVsIGdyw6FmaWNvIGRlIGNhbG9yIA0KYGBge3J9DQp0YWJsZShkYXRhJGRlcGFydGFtZW50bykNCmBgYA0KU2Vnw7puIGxvcyBkYXRvcyByZWdpc3RyYWRvcywgc2UgdGllbmVuIGxvcyBkYXRvcyBkZSAyMiBkZXBhcnRhbWVudG9zIHkgZWwgcmVzdG8gc29uIHZhbG9yZXMgZGVzY29ub2NpZG9zDQoNClByb2NlZGVyZW1vcyBhIGxpbXBpYXIgcGFyYSBkZXNwdcOpcyBjcmVhcg0KYGBge3J9DQpwcmVndW50YTUgPC0gZGF0YSAlPiUgZmlsdGVyX2FsbChhbGxfdmFycyguICE9ICJcXE4iKSkNCnRhYmxlKHByZWd1bnRhNSRkZXBhcnRhbWVudG8pDQpgYGANCg0KQ3JlYWNpw7NuIGRlIGxhIGRhdGENCmBgYHtyfQ0KcHJlZ3VudGE1IDwtIHByZWd1bnRhNSAlPiUNCiAgZ3JvdXBfYnkoZGVwYXJ0YW1lbnRvKSAlPiUNCiAgc3VtbWFyaXNlKA0KICAgIHRvdGFsX2Nhc29zID0gbigpLA0KICAgIGdyYXZlcyA9IHN1bShlbmZlcm1lZGFkID09ICJncmF2ZSIpLA0KICAgIHNpbl9zZcOxYWxlcyA9IHN1bShlbmZlcm1lZGFkID09ICJzaW4iKSwNCiAgICBjb25fc2XDsWFsZXMgPSBzdW0oZW5mZXJtZWRhZCA9PSAiY29uIikNCiAgKSANCmhlYWQocHJlZ3VudGE1KQ0KYGBgDQoNCkFuYWxpemFtb3MgbGEgcmVsYWNpw7NuIGVudHJlIGxvcyBjYXNvcyBhbGFybWFudGVzIG5vIGdyYXZlcyB5IGxvcyBhc2ludG9tYXRpY29zIHNlZ3VuIGRlcGFydGFtZW50byBhIGxvIGxhcmdvIGRlIGxvcyBhw7Fvcy4gUGFyYSBlbGxvIHNlIGRlYmUgdGVuZXIgZW4gY3VlbnRhIHF1ZSBlbiBsYSBiYXNlIGRlIGRhdG9zIHNpZ25pZmljYSBsYSB2YXJpYWJsZSBlcyBlbnRyZSBsb3MgImNvbiIgeSBlbnRyZSBsb3MgInNpbiINCg0KYGBge3J9DQpwcmVndW50YTUgPC0gcHJlZ3VudGE1ICU+JQ0KICBtdXRhdGUocmVsYWNpb24gPSBjb25fc2XDsWFsZXMvc2luX3Nlw7FhbGVzKQ0KcHJlZ3VudGE1PXNlbGVjdChwcmVndW50YTUsIGMoMSw2KSkNCmhlYWQocHJlZ3VudGE1KQ0KYGBgDQoNCkNvbW8gbm8gZXhpc3RlbiBsb3MgY2Fzb3MgY29uIGFsYXJtYXMgbm8gZ3JhdmVzLCBsYSByZWxhY2nDs24gY29uIGxvIGFzaW50b23DoXRpY29zIGVzIGRlIDANCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0K