Descripción

  • Nota importante: todos los ejercicios deben ser resueltos a través de código, no son válidas las soluciones manuales.
  • Descarga y ejecución: para responder cada pregunta del taller se recomienda descargar el documento .Rmd y editarlo desde su computador. También es posible hacerlo desde la página web, sin embargo, tenga paciencia porque puede ser lenta la ejecución.
  • Entregable: documento .Rmd con solución a cada pregunta. Enviar este documento a mi correo.
  • Fecha de entrega: máximo el lunes 14 de noviembre de 2022

Activación de R

Clic en Activate para activar el kernel de R y poder ejecutar (run) cada fragmento de código desde el navegador. Tenga paciencia ⌛⌛⌛

Bibliotecas

library(tidyverse)
library(lubridate)

Pregunta 1

  • Complete el siguiente fragmento ingresando su nombre en la variable texto2 y corrija el código…🤯🤯🤯
    • Rta: "Hola, mi nombre es Edimer"
texto1 <- "Hola, mi nombre es"
texto2 <- " Estefani"
str_c(texto1, texto2)

Pregunta 2

  • Use la función mean() para calcular el promedio del siguiente vector 🤔🤔🤔:
    • Rta: 53.968
numeros <- c(23, 12.2, "13,5", 11L, 210.14)

numeros_1 <- str_replace_all(string = numeros, pattern = ",", replacement = ".") %>% as.numeric()
class(numeros_1)

mean(numeros_1, na.rm = TRUE)

Pregunta 3

  • Construya una base de datos con los siguientes vectores y obtenga el promedio de los números impares al cuadrado (v3) 😨😨😨:
    • Rta: 11.66667
v1 <- c(1, 2, 3, 4, 5, 6)
v2 <- c("Impar", "Par", "Impar", "Par", "Impar")
v3 <- c(1, 4, 9, 16, 25, 36)

# Solucion 
v2_c <- c(v2, "Par")

dtf <- data.frame(
  v2_c,
  v1,
  v3
)

# se extrae V3

impar_v3 <- impar[,3]
impar_v3

mean(impar_v3)

Pregunta 4

  • En la base de datos PlantGrowth hay información de peso para tres grupos de plantas (control, tratamiento 1 y tratamiento 2). ¿Cuántos registros superan el promedio general (media_p4) de peso (weight) para el tratamiento 1? 💡💡💡
    • Rta: 2 registros
head(PlantGrowth)
# tener en cuenta para arreglos mas grandes y conocer el nombre de las entradas

entradas <- PlantGrowth %>% 
  select(c(group)) %>% 
filter(!duplicated(group))
entradas 
media_p4 <- PlantGrowth %>% 
  pull(weight) %>% 
  mean()
media_p4

trat_1 <- PlantGrowth %>% 
  filter(group == "trt1", weight > media_p4) 
trat_1 %>% 
  count()

Pregunta 5

  • Los siguientes vectores poseen información de fechas iniciales y fechas finales para ciclos hipotéticos de cultivos. Obtenga el vector con la diferencia de días para cada cultivo y calcule el promedio de días. 🔂🔂🔂
    • Rta: 101.5
fecha_inicial <- c("2010-01-01", "2020-01-01", "2021-01-01", "2022-01-01")
fecha_final <- c("2010-03-25", "2020-04-17", "2021-03-10", "2022-05-29")

# Se establecen como fechas
fecha_inicial <- c("2010-01-01", "2020-01-01", "2021-01-01", "2022-01-01") %>% as.Date()
fecha_final <- c("2010-03-25", "2020-04-17", "2021-03-10", "2022-05-29") %>% as.Date()

# Se crea una data.frame 

tabla_fechas <- data.frame(
  fecha_final, 
  fecha_inicial
  )

# Se muta el data.frame y se operan con diferencia entre los vectores 

tabla_diferencia <- tabla1 %>% mutate(
  difere = fecha_final - fecha_inicial
  )
tabla_diferencia

# Promedio 

meandife <- tabla_diferencia[,3]
meandife

mean(meandife)

Pregunta 6

arboles <- read_csv("_rboles_plantados_en_el_municipio_de_Cota.csv")
arboles

head(arboles)

# por cantidad 

 arboles %>% 
  filter (Cantidad > 187) %>% 
   count()

Pregunta 7

arboles <- read_csv("_rboles_plantados_en_el_municipio_de_Cota.csv")

arboles <- read_csv("_rboles_plantados_en_el_municipio_de_Cota.csv")

arb_2021 <- arboles %>% 
  mutate(fecha2 = dmy_hms(Fecha),
         anual = year(fecha2)) %>% 
  filter(anual == 2021)

sum(arboles_2021$Cantidad)

Pregunta 8

  • ¿Cuál es el día con mayor número de registros en el siguiente vector de fechas?
    • Rta: lunes: 15
vector_year <- seq(from = 1990, to = 2021, by = 2)
vector_mes <- rep(1:12, each = 5)
vector_dia <- rep(1:30, each = 3)

vector_fechas <- str_c(vector_year, "-", vector_mes, "-", vector_dia) %>% as.Date()
vector_fechas
LS0tDQp0aXRsZTogIkVqZXJjaWNpb3MgZGUgY2xhc2UiDQpzdWJ0aXRsZTogIkZ1bmRhbWVudG9zIGRlIFIiDQphdXRob3I6ICJFc3RlZmFuaSBDYXJkZW5hcyINCmRhdGU6ICIyNy8xMC8yMDIyIg0Kb3V0cHV0OiANCiAgaHRtbF9kb2N1bWVudDoNCiAgICBjb2RlX2Rvd25sb2FkOiB0cnVlDQogICAgdG9jOiB0cnVlDQogICAgdG9jX2Zsb2F0Og0KICAgICAgY29sbGFwc2VkOiBmYWxzZQ0KICAgICAgc21vb3RoX3Njcm9sbDogZmFsc2UNCiAgICBoaWdobGlnaHQ6IGthdGUNCi0tLQ0KDQo8IS0tIFNvbWUgc3R1ZmYgZnJvbSB0aGViZWxhYiByZXF1aXJlZCBmb3IgdGhlIG1hZ2ljIC0tPg0KPCEtLSBDb25maWd1cmUgYW5kIGxvYWQgVGhlYmUgIS0tPg0KPHNjcmlwdCB0eXBlPSJ0ZXh0L3gtdGhlYmUtY29uZmlnIj4NCiAgew0KICAgIHJlcXVlc3RLZXJuZWw6IHRydWUsDQogICAgYmluZGVyT3B0aW9uczogew0KICAgICAgcmVwbzogImJpbmRlci1leGFtcGxlcy9yIiwNCiAgICB9LA0KICAgIGtlcm5lbE9wdGlvbnM6IHsNCiAgICAgIG5hbWU6ICJSIiwNCiAgICAgIGtlcm5lbE5hbWU6ICJpciIsDQogICAgfSwNCiAgfQ0KPC9zY3JpcHQ+DQoNCjwhLS0gc2NyaXB0IGZvciB0aGViZWxhYiAtLT4NCjxzY3JpcHQgc3JjPSJodHRwczovL3VucGtnLmNvbS90aGViZWxhYkBsYXRlc3QvbGliL2luZGV4LmpzIj48L3NjcmlwdD4NCg0KYGBge3Igc2V0dXAsIGluY2x1ZGUgPSBGQUxTRX0NCmtuaXRyOjpvcHRzX2NodW5rJHNldChldmFsID0gRkFMU0UsIHdhcm5pbmcgPSBGQUxTRSwgbWVzc2FnZSA9IEZBTFNFKQ0KYGBgDQoNCiMgRGVzY3JpcGNpw7NuDQoNCi0gKipOb3RhIGltcG9ydGFudGU6KiogdG9kb3MgbG9zIGVqZXJjaWNpb3MgZGViZW4gc2VyIHJlc3VlbHRvcyBhIHRyYXbDqXMgZGUgY8OzZGlnbywgKipubyBzb24gdsOhbGlkYXMgbGFzICBzb2x1Y2lvbmVzIG1hbnVhbGVzKiouDQotICoqRGVzY2FyZ2EgeSBlamVjdWNpw7NuOioqIHBhcmEgcmVzcG9uZGVyIGNhZGEgcHJlZ3VudGEgZGVsIHRhbGxlciBzZSByZWNvbWllbmRhIGRlc2NhcmdhciBlbCBkb2N1bWVudG8gKi5SbWQqIHkgZWRpdGFybG8gZGVzZGUgc3UgY29tcHV0YWRvci4gVGFtYmnDqW4gZXMgcG9zaWJsZSBoYWNlcmxvIGRlc2RlIGxhIHDDoWdpbmEgd2ViLCBzaW4gZW1iYXJnbywgdGVuZ2EgcGFjaWVuY2lhIHBvcnF1ZSBwdWVkZSBzZXIgKipsZW50YSoqIGxhIGVqZWN1Y2nDs24uDQotICoqRW50cmVnYWJsZToqKiBkb2N1bWVudG8gKi5SbWQqIGNvbiBzb2x1Y2nDs24gYSBjYWRhIHByZWd1bnRhLiBFbnZpYXIgZXN0ZSBkb2N1bWVudG8gYSBtaSBjb3JyZW8uDQotICoqRmVjaGEgZGUgZW50cmVnYToqKiBtw6F4aW1vIGVsICoqbHVuZXMgMTQgZGUgbm92aWVtYnJlIGRlIDIwMjIqKg0KDQoNCjxjZW50ZXI+DQo8aW1nIHNyYyA9ICJodHRwczovL2dpdGh1Yi5jb20vd2ViLWVkaW1lci9ycHJvamVjdF91ZGVhL2Jsb2IvZ2gtcGFnZXMvdGVtYXMvR3VpZGVzL2ltZy9pbWcxLlBORz9yYXc9dHJ1ZSIgLz4NCjwvY2VudGVyPg0KDQojIEFjdGl2YWNpw7NuIGRlIFINCg0KPiBDbGljIGVuICoqYEFjdGl2YXRlYCoqIHBhcmEgYWN0aXZhciBlbCAqa2VybmVsKiBkZSBSIHkgcG9kZXIgZWplY3V0YXIgKGBydW5gKSBjYWRhIGZyYWdtZW50byBkZSBjw7NkaWdvIGRlc2RlIGVsIG5hdmVnYWRvci4gVGVuZ2EgcGFjaWVuY2lhIOKMm+KMm+KMmw0KDQpgYGB7ciwgZXZhbCA9IFRSVUUsIGVjaG8gPSBGQUxTRX0NCiMgYWQgYSBidXR0b24NCmh0bWx0b29sczo6dGFncyRidXR0b24oDQogIGlkID0gImFjdGl2YXRlQnV0dG9uIiwNCiAgc3R5bGU9IndpZHRoOiA4MDBweDsgaGVpZ2h0OiA1MHB4OyBmb250LXNpemU6IDIuNWVtOyIsIA0KICAiQWN0aXZhdGUiDQopDQpgYGANCg0KYGBge2pzLCBldmFsPVRSVUUsIGVjaG8gPSBGQUxTRX0NCi8vIHRoZWJlbGFiIGpzIHNjcmlwdA0KdmFyIGJvb3RzdHJhcFRoZWJlID0gZnVuY3Rpb24oKSB7DQogICAgdGhlYmVsYWIuYm9vdHN0cmFwKCk7DQp9DQpkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIjYWN0aXZhdGVCdXR0b24iKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGJvb3RzdHJhcFRoZWJlKQ0KYGBgDQoNCiMgQmlibGlvdGVjYXMNCg0KYGBge3IsIGF0dHIuc291cmNlID0gYygnZGF0YS1leGVjdXRhYmxlPSJ0cnVlIicsICdkYXRhLWxhbmd1YWdlPSJyIicpfQ0KbGlicmFyeSh0aWR5dmVyc2UpDQpsaWJyYXJ5KGx1YnJpZGF0ZSkNCmBgYA0KDQojIFByZWd1bnRhIDENCg0KLSBDb21wbGV0ZSBlbCBzaWd1aWVudGUgZnJhZ21lbnRvIGluZ3Jlc2FuZG8gc3Ugbm9tYnJlIGVuIGxhIHZhcmlhYmxlIGB0ZXh0bzJgIHkgY29ycmlqYSBlbCBjw7NkaWdvLi4u8J+kr/CfpK/wn6SvDQogIC0gKipSdGE6KiogYCJIb2xhLCBtaSBub21icmUgZXMgRWRpbWVyImANCg0KYGBge3IsIGF0dHIuc291cmNlID0gYygnZGF0YS1leGVjdXRhYmxlPSJ0cnVlIicsICdkYXRhLWxhbmd1YWdlPSJyIicpfQ0KdGV4dG8xIDwtICJIb2xhLCBtaSBub21icmUgZXMiDQp0ZXh0bzIgPC0gIiBFc3RlZmFuaSINCnN0cl9jKHRleHRvMSwgdGV4dG8yKQ0KYGBgDQoNCiMgUHJlZ3VudGEgMg0KDQotIFVzZSBsYSBmdW5jacOzbiBgbWVhbigpYCBwYXJhIGNhbGN1bGFyIGVsIHByb21lZGlvIGRlbCBzaWd1aWVudGUgdmVjdG9yIPCfpJTwn6SU8J+klDoNCiAgLSAqKlJ0YToqKiBgNTMuOTY4YA0KDQpgYGB7ciwgYXR0ci5zb3VyY2UgPSBjKCdkYXRhLWV4ZWN1dGFibGU9InRydWUiJywgJ2RhdGEtbGFuZ3VhZ2U9InIiJyl9DQoNCm51bWVyb3MgPC0gYygyMywgMTIuMiwgIjEzLDUiLCAxMUwsIDIxMC4xNCkNCg0KbnVtZXJvc18xIDwtIHN0cl9yZXBsYWNlX2FsbChzdHJpbmcgPSBudW1lcm9zLCBwYXR0ZXJuID0gIiwiLCByZXBsYWNlbWVudCA9ICIuIikgJT4lIGFzLm51bWVyaWMoKQ0KY2xhc3MobnVtZXJvc18xKQ0KDQptZWFuKG51bWVyb3NfMSwgbmEucm0gPSBUUlVFKQ0KDQpgYGANCg0KIyBQcmVndW50YSAzDQoNCi0gQ29uc3RydXlhIHVuYSBiYXNlIGRlIGRhdG9zICBjb24gbG9zIHNpZ3VpZW50ZXMgdmVjdG9yZXMgeSBvYnRlbmdhIGVsIHByb21lZGlvIGRlIGxvcyBuw7ptZXJvcyBpbXBhcmVzIGFsIGN1YWRyYWRvIChgdjNgKSDwn5io8J+YqPCfmKg6DQogIC0gKipSdGE6KiogYDExLjY2NjY3YA0KDQpgYGB7ciwgYXR0ci5zb3VyY2UgPSBjKCdkYXRhLWV4ZWN1dGFibGU9InRydWUiJywgJ2RhdGEtbGFuZ3VhZ2U9InIiJyl9DQp2MSA8LSBjKDEsIDIsIDMsIDQsIDUsIDYpDQp2MiA8LSBjKCJJbXBhciIsICJQYXIiLCAiSW1wYXIiLCAiUGFyIiwgIkltcGFyIikNCnYzIDwtIGMoMSwgNCwgOSwgMTYsIDI1LCAzNikNCg0KIyBTb2x1Y2lvbiANCnYyX2MgPC0gYyh2MiwgIlBhciIpDQoNCmR0ZiA8LSBkYXRhLmZyYW1lKA0KICB2Ml9jLA0KICB2MSwNCiAgdjMNCikNCg0KIyBzZSBleHRyYWUgVjMNCg0KaW1wYXJfdjMgPC0gaW1wYXJbLDNdDQppbXBhcl92Mw0KDQptZWFuKGltcGFyX3YzKQ0KDQpgYGANCg0KIyBQcmVndW50YSA0DQoNCi0gRW4gbGEgYmFzZSBkZSBkYXRvcyBgUGxhbnRHcm93dGhgIGhheSBpbmZvcm1hY2nDs24gZGUgcGVzbyBwYXJhIHRyZXMgZ3J1cG9zIGRlIHBsYW50YXMgKGNvbnRyb2wsIHRyYXRhbWllbnRvIDEgeSB0cmF0YW1pZW50byAyKS4gwr9DdcOhbnRvcyByZWdpc3Ryb3Mgc3VwZXJhbiBlbCBwcm9tZWRpbyBnZW5lcmFsIChgbWVkaWFfcDRgKSBkZSBwZXNvIChgd2VpZ2h0YCkgcGFyYSBlbCB0cmF0YW1pZW50byAxPyDwn5Kh8J+SofCfkqENCiAgLSAqKlJ0YToqKiBgMiByZWdpc3Ryb3NgDQoNCmBgYHtyfQ0KaGVhZChQbGFudEdyb3d0aCkNCmBgYA0KDQpgYGB7cn0NCiMgdGVuZXIgZW4gY3VlbnRhIHBhcmEgYXJyZWdsb3MgbWFzIGdyYW5kZXMgeSBjb25vY2VyIGVsIG5vbWJyZSBkZSBsYXMgZW50cmFkYXMNCg0KZW50cmFkYXMgPC0gUGxhbnRHcm93dGggJT4lIA0KICBzZWxlY3QoYyhncm91cCkpICU+JSANCmZpbHRlcighZHVwbGljYXRlZChncm91cCkpDQplbnRyYWRhcyANCg0KYGBgDQoNCmBgYHtyLCBhdHRyLnNvdXJjZSA9IGMoJ2RhdGEtZXhlY3V0YWJsZT0idHJ1ZSInLCAnZGF0YS1sYW5ndWFnZT0iciInKX0NCm1lZGlhX3A0IDwtIFBsYW50R3Jvd3RoICU+JSANCiAgcHVsbCh3ZWlnaHQpICU+JSANCiAgbWVhbigpDQptZWRpYV9wNA0KDQp0cmF0XzEgPC0gUGxhbnRHcm93dGggJT4lIA0KICBmaWx0ZXIoZ3JvdXAgPT0gInRydDEiLCB3ZWlnaHQgPiBtZWRpYV9wNCkgDQp0cmF0XzEgJT4lIA0KICBjb3VudCgpDQoNCmBgYA0KDQojIFByZWd1bnRhIDUNCg0KLSBMb3Mgc2lndWllbnRlcyB2ZWN0b3JlcyBwb3NlZW4gaW5mb3JtYWNpw7NuIGRlIGZlY2hhcyBpbmljaWFsZXMgeSBmZWNoYXMgZmluYWxlcyBwYXJhIGNpY2xvcyBoaXBvdMOpdGljb3MgZGUgY3VsdGl2b3MuIE9idGVuZ2EgZWwgdmVjdG9yIGNvbiBsYSBkaWZlcmVuY2lhIGRlIGTDrWFzIHBhcmEgY2FkYSBjdWx0aXZvIHkgY2FsY3VsZSBlbCBwcm9tZWRpbyBkZSBkw61hcy4g8J+UgvCflILwn5SCDQogIC0gKipSdGE6KiogYDEwMS41YA0KDQpgYGB7ciwgYXR0ci5zb3VyY2UgPSBjKCdkYXRhLWV4ZWN1dGFibGU9InRydWUiJywgJ2RhdGEtbGFuZ3VhZ2U9InIiJyl9DQpmZWNoYV9pbmljaWFsIDwtIGMoIjIwMTAtMDEtMDEiLCAiMjAyMC0wMS0wMSIsICIyMDIxLTAxLTAxIiwgIjIwMjItMDEtMDEiKQ0KZmVjaGFfZmluYWwgPC0gYygiMjAxMC0wMy0yNSIsICIyMDIwLTA0LTE3IiwgIjIwMjEtMDMtMTAiLCAiMjAyMi0wNS0yOSIpDQoNCiMgU2UgZXN0YWJsZWNlbiBjb21vIGZlY2hhcw0KZmVjaGFfaW5pY2lhbCA8LSBjKCIyMDEwLTAxLTAxIiwgIjIwMjAtMDEtMDEiLCAiMjAyMS0wMS0wMSIsICIyMDIyLTAxLTAxIikgJT4lIGFzLkRhdGUoKQ0KZmVjaGFfZmluYWwgPC0gYygiMjAxMC0wMy0yNSIsICIyMDIwLTA0LTE3IiwgIjIwMjEtMDMtMTAiLCAiMjAyMi0wNS0yOSIpICU+JSBhcy5EYXRlKCkNCg0KIyBTZSBjcmVhIHVuYSBkYXRhLmZyYW1lIA0KDQp0YWJsYV9mZWNoYXMgPC0gZGF0YS5mcmFtZSgNCiAgZmVjaGFfZmluYWwsIA0KICBmZWNoYV9pbmljaWFsDQogICkNCg0KIyBTZSBtdXRhIGVsIGRhdGEuZnJhbWUgeSBzZSBvcGVyYW4gY29uIGRpZmVyZW5jaWEgZW50cmUgbG9zIHZlY3RvcmVzIA0KDQp0YWJsYV9kaWZlcmVuY2lhIDwtIHRhYmxhMSAlPiUgbXV0YXRlKA0KICBkaWZlcmUgPSBmZWNoYV9maW5hbCAtIGZlY2hhX2luaWNpYWwNCiAgKQ0KdGFibGFfZGlmZXJlbmNpYQ0KDQojIFByb21lZGlvIA0KDQptZWFuZGlmZSA8LSB0YWJsYV9kaWZlcmVuY2lhWywzXQ0KbWVhbmRpZmUNCg0KbWVhbihtZWFuZGlmZSkNCg0KYGBgDQoNCiMgUHJlZ3VudGEgNg0KDQotIENvbiBsYSBiYXNlIGRlIGRhdG9zIGRlIFvDoXJib2xlcyBwbGFudGFkb3MgZW4gZWwgbXVuaWNpcGlvIGRlIENvdGEgMjAyMC0yMDIyXShodHRwczovL3d3dy5kYXRvcy5nb3YuY28vQWdyaWN1bHR1cmEteS1EZXNhcnJvbGxvLVJ1cmFsLy1yYm9sZXMtcGxhbnRhZG9zLWVuLWVsLW11bmljaXBpby1kZS1Db3RhLzZoaGgtdHA0cikgcmVzcG9uZGEgwr9jdcOhbnRvcyBwcmVkaW9zIHN1cGVyYW4gbG9zIDE4NyDDoXJib2xlcyBwbGFudGFkb3M/DQogIC0gKipSdGE6KiogYDQ3YA0KDQpgYGB7ciwgYXR0ci5zb3VyY2UgPSBjKCdkYXRhLWV4ZWN1dGFibGU9InRydWUiJywgJ2RhdGEtbGFuZ3VhZ2U9InIiJyl9DQphcmJvbGVzIDwtIHJlYWRfY3N2KCJfcmJvbGVzX3BsYW50YWRvc19lbl9lbF9tdW5pY2lwaW9fZGVfQ290YS5jc3YiKQ0KYXJib2xlcw0KDQpoZWFkKGFyYm9sZXMpDQoNCiMgcG9yIGNhbnRpZGFkIA0KDQogYXJib2xlcyAlPiUgDQogIGZpbHRlciAoQ2FudGlkYWQgPiAxODcpICU+JSANCiAgIGNvdW50KCkNCg0KYGBgDQoNCg0KDQojIFByZWd1bnRhIDcNCg0KLSBDb24gbGEgYmFzZSBkZSBkYXRvcyBkZSBbw6FyYm9sZXMgcGxhbnRhZG9zIGVuIGVsIG11bmljaXBpbyBkZSBDb3RhIDIwMjAtMjAyMl0oaHR0cHM6Ly93d3cuZGF0b3MuZ292LmNvL0FncmljdWx0dXJhLXktRGVzYXJyb2xsby1SdXJhbC8tcmJvbGVzLXBsYW50YWRvcy1lbi1lbC1tdW5pY2lwaW8tZGUtQ290YS82aGhoLXRwNHIpIHJlc3BvbmRhIMK/Y3XDoW50b3Mgw6FyYm9sZXMgZnVlcm9uIHBsYW50YWRvcyBlbiBlbCAyMDIxPw0KICAtICoqUnRhOioqIGAxNjM2NWANCiAgDQpgYGB7ciwgYXR0ci5zb3VyY2UgPSBjKCdkYXRhLWV4ZWN1dGFibGU9InRydWUiJywgJ2RhdGEtbGFuZ3VhZ2U9InIiJyl9DQphcmJvbGVzIDwtIHJlYWRfY3N2KCJfcmJvbGVzX3BsYW50YWRvc19lbl9lbF9tdW5pY2lwaW9fZGVfQ290YS5jc3YiKQ0KDQphcmJvbGVzIDwtIHJlYWRfY3N2KCJfcmJvbGVzX3BsYW50YWRvc19lbl9lbF9tdW5pY2lwaW9fZGVfQ290YS5jc3YiKQ0KDQphcmJfMjAyMSA8LSBhcmJvbGVzICU+JSANCiAgbXV0YXRlKGZlY2hhMiA9IGRteV9obXMoRmVjaGEpLA0KICAgICAgICAgYW51YWwgPSB5ZWFyKGZlY2hhMikpICU+JSANCiAgZmlsdGVyKGFudWFsID09IDIwMjEpDQoNCnN1bShhcmJvbGVzXzIwMjEkQ2FudGlkYWQpDQpgYGAgIA0KDQojIFByZWd1bnRhIDgNCg0KLSDCv0N1w6FsIGVzIGVsIGTDrWEgY29uIG1heW9yIG7Dum1lcm8gZGUgcmVnaXN0cm9zIGVuIGVsIHNpZ3VpZW50ZSB2ZWN0b3IgZGUgZmVjaGFzPw0KICAtICoqUnRhOioqIGBsdW5lczogMTVgDQoNCmBgYHtyLCBhdHRyLnNvdXJjZSA9IGMoJ2RhdGEtZXhlY3V0YWJsZT0idHJ1ZSInLCAnZGF0YS1sYW5ndWFnZT0iciInKX0NCnZlY3Rvcl95ZWFyIDwtIHNlcShmcm9tID0gMTk5MCwgdG8gPSAyMDIxLCBieSA9IDIpDQp2ZWN0b3JfbWVzIDwtIHJlcCgxOjEyLCBlYWNoID0gNSkNCnZlY3Rvcl9kaWEgPC0gcmVwKDE6MzAsIGVhY2ggPSAzKQ0KDQp2ZWN0b3JfZmVjaGFzIDwtIHN0cl9jKHZlY3Rvcl95ZWFyLCAiLSIsIHZlY3Rvcl9tZXMsICItIiwgdmVjdG9yX2RpYSkgJT4lIGFzLkRhdGUoKQ0KdmVjdG9yX2ZlY2hhcw0KDQoNCg0KDQpgYGAgDQoNCg==