PROYECTO FINAL: PRESENTACIÓN CONDICIONES DE VIDA
INTRODUCCIÓN
El siguiente trabajo muestra probabilidades de las condiciones de vida de la población de Guatemala en ámbitos como la alimentación, educación, condiciones de vivienda, pobreza e identidad. Así también se hacen observaciones de cómo está la situación en las distintas áreas y estados de pobreza del país y generar conclusiones de la vida que llevan las personas y sus proyecciones de futuro.
DESARROLLO Y OBTENCIÓN DE DATOS DE PROBABILIDADES
Este análisis se basará en probabilidades de un grupo de la población, las mujeres para ver sus condiciones de vida en el país. Además de esto se visualizará la información de ellas en los departamentos de Guatemala, Alta Verapaz y Jutiapa para ver en qué circunstancias se encuentran las personas.
El desarrollo de este proyecto gira entorno en conocer la situación de vida de tres personas Lucía, Ana y Sofía de los departamentos de Guatemala, Alta Verapaz y Jutiapa respectivamente y ellas pertenecen al área urbana. A continuación se obtienen los resultados que corresponden a una serie de preguntas a analizar de las condiciones de vida de estas tres personas.
Para este analisis se necesitan información de ENCOVI 2014 en la información de personas, vivienda, y alimentos. https://www.ine.gob.gt/index.php/encuestas-de-hogares-y-personas/condiciones-de-vida
1. ¿Cuál es la probabilidad de que tengan una casa con techo y paredes de block?
library(haven)
library(dplyr)
Personas <- read_sav("R DATA/Personas.sav")
Personas <- select(Personas, NUMHOG, DEPTO, AREA, POBREZA, PPA02, PPA03, P04A11A, P06B01, P06B25A, P06B25B)
names(Personas) <- c("ID_Casa", "Departamento", "Area", "Pobreza", "Sexo", "Edad", "Etnia", "LeerEscribir", "Nivel", "Grado")
Personas <-Personas[complete.cases(Personas),]
Hogar <- read_sav("R DATA/Hogares.sav")
Hogar <- select(Hogar, NUMHOG, P01A01, P01A02, P01A03, P01A04, P01A05A:P01A05F, P01D19A, P01D19B, P01D19C, P01D19D, P01D21, P01D27, P01D28)
names(Hogar) <- c("ID_Casa", "TipoVivienda", "Pared", "Techo", "Piso", "Agua", "Drenaje", "Energia.electrica", "Red.telefonia", "Contador.de.agua", "Contador.de.electricidad", "TelefonoFijo", "TelefonoCelular", "Internet", "TVCable", "EliminarBasura", "UsaLenia", "ObtenerLenia")
Hogar <- Hogar[complete.cases(Hogar),]
Super <- read_sav("R DATA/Super.sav")
Super <- select(Super, NUMHOG, P12A12)
names(Super) <- c("ID_Casa", "Frecuencia_Compra")
Poblacion <- merge(Personas, Hogar)
Poblacion <- merge(Poblacion, Super)
Poblacion$Departamento <- as.factor(Poblacion$Departamento)
Poblacion$Area <- as.factor(Poblacion$Area)
Poblacion$Pobreza <- as.factor(Poblacion$Pobreza)
levels(Poblacion$Departamento)<- c("Guatemala", "El Progreso", "Sacatepequez", "Chimaltenango", "Escuintla", "Santa Rosa", "Solola", "Totonicapan", "Quetzaltenango", "Suchitepequez", "Retalhuleu", "San Marcos", "Huehuetenango", "Quiche", "Baja Verapaz", "Alta Verapaz", "Peten", "Izabal", "Zacapa", "Chiquimula", "Jalapa", "Jutiapa")
levels(Poblacion$Area)<- c("Urbana", "Rural")
levels(Poblacion$Pobreza) <- c ("Pobre extremo", "Pobre no extremo", "No pobre")
Poblacion$Sexo <- as.character(Poblacion$Sexo)
Poblacion$Sexo[Poblacion$Sexo == 1] <- "Hombre"
Poblacion$Sexo[Poblacion$Sexo == 2] <- "Mujer"
Tot_Dep <- Poblacion %>%
select(Departamento) %>%
group_by(Departamento) %>%
summarise(Total= n()) %>%
filter(Departamento=="Guatemala" | Departamento== "Alta Verapaz" | Departamento== "Jutiapa")
Pregunta1 <- Poblacion %>%
select(Departamento, Area, Sexo, Techo, Pared) %>%
group_by(Departamento, Area, Sexo, Techo, Pared) %>%
summarise(cantidad= n()) %>%
filter(Departamento=="Guatemala" | Departamento== "Alta Verapaz" | Departamento== "Jutiapa", Area== "Urbana", Sexo== "Mujer", Techo==2, Pared == 2)
Pregunta2 <- Poblacion %>%
select(Departamento, Area, Sexo, TipoVivienda, Piso) %>%
group_by(Departamento, Area, Sexo, TipoVivienda, Piso) %>%
summarise(cantidad= n()) %>%
filter(Departamento=="Guatemala" | Departamento== "Alta Verapaz" | Departamento== "Jutiapa", Area== "Urbana", Sexo== "Mujer", TipoVivienda==1, Piso == 4)
Pregunta3 <- Poblacion %>%
select(Departamento, Area, Sexo, Frecuencia_Compra) %>%
group_by(Departamento, Area, Sexo, Frecuencia_Compra) %>%
summarise(cantidad= n())
filter(Departamento=="Guatemala" | Departamento== "Alta Verapaz" | Departamento== "Jutiapa", Area== "Urbana", Sexo== "Mujer", Frecuencia_Compra==2 | Frecuencia_Compra==3
Basados en los datos de las tablas de análisis de Encovi tenemos:
Probabilidad que Lucía tenga una casa con techo y paredes de block:
155/1018*100
[1] 15.22593
Probabilidad que Ana tenga una casa con techo y paredes de block:
85/1156 *100
[1] 7.352941
Probabilidad que Sofía tenga una casa con techo y paredes de block:
69/1700 *100
[1] 4.058824
En el departamento de Guatemala hay más probabilidades de tener una casa con techo y paredes de block.
3. ¿Cuál es la probabilidad que compre semanalmente o quincenalmente su comida en el súper?
Probabilidad que Lucía compre semanalmente o quincenalmente su comida en el súper:
154/1018*100
[1] 15.1277
Probabilidad que Ana compre semanalmente o quincenalmente su comida en el súper:
3/1156 *100
[1] 0.2595156
Probabilidad que Sofía compre semanalmente o quincenalmente su comida en el súper:
0/1700
[1] 0
Se puede observar que en el departamento de Jutiapa la probabilidad es 0% y la más alta es en Guatemala por Lucía de 0.69%.
4. ¿Cuál es la probabilidad de que sean beneficiarias de una donación de alimentos o materiales?
donaciones <- read_sav("~/Data Science/trabajo ENCOVIDonaciones.sav")
hogares_donacion <- donaciones %>% select(REGION, DEPTO, AREA, POBREZA, ID_DONACIONES, P01F01, P01F02A, P01F02B, P01F02C, P01F02D, P01F02E)
names(hogares_donacion) <- c("Región", "Departamento", "Area", "Pobreza", "Donadores", "Especie", "Alimentos", "Vestuario", "Medicinas", "Materiales", "Otro")
hogares_donacion <- hogares_donacion[complete.cases(hogares_donacion),]
hogares_donacion$Departamento <- as.factor(hogares_donacion$Departamento)
hogares_donacion$Area <- as.factor(hogares_donacion$Area)
hogares_donacion$Pobreza <- as.factor(hogares_donacion$Pobreza)
hogares_donacion$Donadores <- as.numeric(hogares_donacion$Donadores)
levels(hogares_donacion$Departamento)<- c("Guatemala", "El Progreso", "Sacatepequez", "Chimaltenango", "Escuintla", "Santa Rosa", "Solola", "Totonicapan", "Quetzaltenango", "Suchitepequez", "Retalhuleu", "San Marcos", "Huehuetenango", "Quiche", "Baja Verapaz", "Alta Verapaz", "Peten", "Izabal", "Zacapa", "Chiquimula", "Jalapa", "Jutiapa")
levels(hogares_donacion$Area) <- c("Urbana", "Rural")
levels(hogares_donacion$Pobreza) <- c ("Pobre extremo", "Pobre no extremo", "No pobre")
hogares_donacion$Especie <- ifelse(hogares_donacion$Especie == 1, TRUE, FALSE)
hogares_donacion$Alimentos <- ifelse(hogares_donacion$Alimentos == 1, TRUE, FALSE)
hogares_donacion$vestuario <- ifelse(hogares_donacion$Vestuario == 1, TRUE, FALSE)
hogares_donacion$Medicinas <- ifelse(hogares_donacion$Medicinas == 1, TRUE, FALSE)
hogares_donacion$Materiales <- ifelse(hogares_donacion$Materiales == 1, TRUE, FALSE)
hogares_donacion$Otro <- ifelse(hogares_donacion$Otro == 1, TRUE, FALSE)
hogares_donacion %>% summarise(Donacion_Especie = sum(hogares_donacion$Especie, na.rm = TRUE)/n(), Donacion_Alimentos = sum(hogares_donacion$Alimentos, na.rm = TRUE)/n(), Donacion_Vestuario = sum(hogares_donacion$Vestuario, na.rm = TRUE)/n(), Donacion_Medicinas = sum(hogares_donacion$Medicinas, na.rm = TRUE)/n(), Donacion_Materiales = sum(hogares_donacion$Materiales, na.rm = TRUE)/n(),
Donacion_Otro = sum(hogares_donacion$Otro, na.rm = TRUE)/n())
hogares_donacion %>% group_by(Departamento) %>% summarise(Donacion_Especie = sum(hogares_donacion$Especie, na.rm = TRUE)/n(), Donacion_Alimentos = sum(hogares_donacion$Alimentos, na.rm = TRUE)/n(), Donacion_Vestuario = sum(hogares_donacion$Vestuario, na.rm = TRUE)/n(), Donacion_Medicinas = sum(hogares_donacion$Medicinas, na.rm = TRUE)/n(), Donacion_Materiales = sum(hogares_donacion$Materiales, na.rm = TRUE)/n(),
Donacion_Otro = sum(hogares_donacion$Otro, na.rm = TRUE)/n())
Cálculos relacionados
POBLACIÓN FEMININA DONACIÓN DE ALIMENTOS DONACIÓN DE MATERIALES Guatemala = 52.7% 8.0000% 0.3972%
Jutiapa = 50.6% 8.5897% 0.5043% Alta Verapaz = 50.4% 10.156% 0.4264%
Probabilidad que Lucía sea beneficiaria de una donación de alimentos o materiales:
0.1593397 * 100
[1] 15.93397
Probabilidad que Sofía sea beneficiaria de una donación de alimentos o materiales:
0.1797233 * 100
[1] 17.97233
Probabilidad que Ana sea beneficiaria de una donación de alimentos o materiales:
0.2099683 * 100
[1] 20.99683
Podemos observar que las probabilidades que Lucía reciba donaciones ya sea de alimentos o materiales es de 15% y menor al de las otras chicas dado que ellas viven en el interior del país.
5. ¿Cuál es la probabilidad de que tengan Red de Energía Eléctrica y Red telefónica?
vivienda <- read_sav("~/Data Science/trabajo ENCOVI/hogares.sav")
Warning: Unknown column 'Agua'
Warning: Unknown column 'Drenaje'
Warning: Unknown column 'Energia.electrica'
Warning: Unknown column 'Red.telefonia'
Warning: Unknown column 'Contador.de.agua'
Warning: Unknown column 'Contador.de.electricidad'
Warning: Unknown column 'Agua'
Warning: Unknown column 'Energia.electrica'
vivienda <- select(vivienda, DEPTO, AREA, POBREZA, P01A05A:P01A05F)
names(vivienda) <- c("Departamento", "Area", "Pobreza", "Agua", "Drenaje", "Energia.electrica", "Red.telefonia", "Contador.de.agua", "Contador.de.electricidad")
vivienda$Departamento <- as.factor(vivienda$Departamento)
vivienda$Area <- as.factor(vivienda$Area)
vivienda$Pobreza <- as.factor(vivienda$Pobreza)
levels(vivienda$Departamento)<- c("Guatemala", "El Progreso", "Sacatepequez", "Chimaltenango", "Escuintla", "Santa Rosa", "Solola", "Totonicapan", "Quetzaltenango", "Suchitepequez", "Retalhuleu", "San Marcos", "Huehuetenango", "Quiche", "Baja Verapaz", "Alta Verapaz", "Peten", "Izabal", "Zacapa", "Chiquimula", "Jalapa", "Jutiapa")
levels(vivienda$Area)<- c("Urbana", "Rural")
levels(vivienda$Pobreza) <- c ("Pobre extremo", "Pobre no extremo", "No pobre")
vivienda$Agua <- as.numeric(vivienda$Agua)
vivienda$Agua[vivienda$Agua == 2] <- 0
vivienda$Drenaje <- as.numeric(vivienda$Drenaje)
vivienda$Drenaje[vivienda$Drenaje ==2] <-0
vivienda$Energia.electrica <- as.numeric(vivienda$Energia.electrica)
vivienda$Energia.electrica[vivienda$Energia.electrica==2] <-0
vivienda$Red.telefonia <- as.numeric(vivienda$Red.telefonia)
vivienda$Red.telefonia[vivienda$Red.telefonia==2] <- 0
vivienda$Contador.de.agua <- as.numeric(vivienda$Contador.de.agua)
vivienda$Contador.de.agua[vivienda$Contador.de.agua == 2] <- 0
vivienda$Contador.de.electricidad <- as.numeric(vivienda$Contador.de.electricidad)
vivienda$Contador.de.electricidad[vivienda$Contador.de.electricidad == 2] <- 0
Redes.Departamento <- vivienda %>%
group_by(Departamento) %>%
summarise(Agua= sum(Agua)/n()*100, Drenaje= sum(Drenaje)/n()*100, Energia_eletrica = sum(Energia.electrica)/n()*100, Red_telefonia= sum(Red.telefonia)/n()*100, Contador_Agua= sum(Contador.de.agua)/n()*100, Contador_Electricidad= sum(Contador.de.electricidad)/n()*100)
Redes.Area <- vivienda %>% group_by(Area)%>% summarise(Agua= sum(Agua)/n()*100, Drenaje= sum(Drenaje)/n()*100, Energia_eletrica = sum(Energia.electrica)/n()*100, Red_telefonia= sum(Red.telefonia)/n()*100, Contador_Agua= sum(Contador.de.agua)/n()*100, Contador_Electricidad= sum(Contador.de.electricidad)/n()*100)
Redes.Departamento
Redes.Area
Cálculos Relacionados:
POBLACIÓN FEMININA RED ELECTRICA RED TELEFONICA Guatemala = 52.7% 92.72% 22.41%
Jutiapa = 50.6% 83.20% 05.44% Alta Verapaz = 50.4% 38.22% 02.35%
Probabilidad de que Lucía tenga luz eléctrica y red telefónica:
0.3942799 * 100
[1] 39.42799
Probabilidad de que Sofía tenga luz eléctrica y red telefónica:
0.08944822 * 100
[1] 8.944822
Probabilidad de que Ana tenga luz eléctrica y red telefónica:
0.0178962 * 100
[1] 1.78962
Lucía tiene la probabilidad más alta de tener luz eléctrica y red telefónica dado que vive en Guatemala y las condiciones de este tipo de servicios es más accesible. Sofía que está en Jutiapa tiene un 8% de tener estos dos servicios y Ana tiene el menor que es un 2% demostrando así que las condiciones de luz y telefonía para las mujeres en Alta Verapaz es muy poco accesible.
6. ¿Cuál es la probabilidad que siendo pobre o no pobre pueda estudiar en la universidad?
Tomando los datos de la tabla No1 y la tabla extra de educación:
Probabilidades de que las personas siendo pobres puedan estudiar en la universidad en los departamentos de Guatemala, Alta Verapaz y Jutiapa respectivamente.
library(dplyr)
Attaching package: <U+393C><U+3E31>dplyr<U+393C><U+3E32>
The following objects are masked from <U+393C><U+3E31>package:stats<U+393C><U+3E32>:
filter, lag
The following objects are masked from <U+393C><U+3E31>package:base<U+393C><U+3E32>:
intersect, setdiff, setequal, union
library(ggplot2)
library(tidyverse)
package <U+393C><U+3E31>tidyverse<U+393C><U+3E32> was built under R version 3.3.3Loading tidyverse: tibble
Loading tidyverse: tidyr
Loading tidyverse: readr
Loading tidyverse: purrr
package <U+393C><U+3E31>readr<U+393C><U+3E32> was built under R version 3.3.3package <U+393C><U+3E31>purrr<U+393C><U+3E32> was built under R version 3.3.3Conflicts with tidy packages ------------------------------------------------------------------------
filter(): dplyr, stats
lag(): dplyr, stats
library(haven)
package <U+393C><U+3E31>haven<U+393C><U+3E32> was built under R version 3.3.3
encovi_edu <- read_sav("~/Data Science/trabajo ENCOVI/personas.sav")
encovi_edu1 <- encovi_edu %>% select(DEPTO, AREA, POBREZA, PPA02, P06B01, P06B02A, P06B25A)
colnames(encovi_edu1)<- c("DEPTO", "AREA" ,"POBREZA","SEXO", "P06B01","P06B02A","Nivel_de_educacion")
encovi_edu1$Sabe.escribir.leer <- ifelse(encovi_edu1$P06B01 == 1, TRUE, FALSE)
encovi_edu1$Sabe.escribir.leer.idioma.indigena <- ifelse(encovi_edu1$P06B02A == 1, TRUE, FALSE)
encovi_edu1$Ninguno <- ifelse(encovi_edu1$Nivel_de_educacion == 0, TRUE, FALSE)
encovi_edu1$Preprimaria <- ifelse(encovi_edu1$Nivel_de_educacion == 1, TRUE, FALSE)
encovi_edu1$Primaria <- ifelse(encovi_edu1$Nivel_de_educacion == 2, TRUE, FALSE)
encovi_edu1$Basicos <- ifelse(encovi_edu1$Nivel_de_educacion== 3, TRUE, FALSE)
encovi_edu1$Diversificado <- ifelse(encovi_edu1$Nivel_de_educacion == 4, TRUE, FALSE)
encovi_edu1$Universitario <- ifelse(encovi_edu1$Nivel_de_educacion == 5, TRUE, FALSE)
encovi_edu1$Maestria <- ifelse(encovi_edu1$Nivel_de_educacion == 6, TRUE, FALSE)
encovi_edu1$Doctorado<- ifelse(encovi_edu1$Nivel_de_educacion == 7, TRUE, FALSE)
encovi_edu1 %>% summarise(Sabe.escribir.leer_total = sum(Sabe.escribir.leer, na.rm = TRUE)/n(), Sabe.escribir.leer.idioma.indigena_total = sum(Sabe.escribir.leer.idioma.indigena, na.rm = TRUE)/n(), Ninguno_total = sum(Ninguno, na.rm = TRUE)/n(), Preprimaria_total = sum(Preprimaria, na.rm = TRUE)/n(), Primaria_total = sum(Primaria, na.rm = TRUE)/n(), Basicos_total = sum(Basicos, na.rm = TRUE)/n(), Diversificado_total = sum(Diversificado, na.rm = TRUE)/n(), Universitario_total = sum(Universitario, na.rm = TRUE)/n(), Maestria_total = sum(Maestria, na.rm = TRUE)/n(), Doctorado_total = sum(Doctorado, na.rm = TRUE)/n())
DEPARTAMENTO <- encovi_edu1%>% group_by(as_factor(DEPTO), as_factor(SEXO), as_factor(AREA),as_factor(POBREZA)) %>% summarise(Sabe.escribir.leer_total = sum(Sabe.escribir.leer, na.rm = TRUE)/n(), Sabe.escribir.leer.idioma.indigena_total = sum(Sabe.escribir.leer.idioma.indigena, na.rm = TRUE)/n(), Ninguno_total = sum(Ninguno, na.rm = TRUE)/n(), Preprimaria_total = sum(Preprimaria, na.rm = TRUE)/n(), Primaria_total = sum(Primaria, na.rm = TRUE)/n(), Basicos_total = sum(Basicos, na.rm = TRUE)/n(), Diversificado_total = sum(Diversificado, na.rm = TRUE)/n(), Universitario_total = sum(Universitario, na.rm = TRUE)/n(), Maestria_total = sum(Maestria, na.rm = TRUE)/n(), Doctorado_total = sum(Doctorado, na.rm = TRUE)/n())
colnames(DEPARTAMENTO)<- c("Departamento", "Sexo","Area","Pobreza", "Sabe leer y escribir", "Sabe leer y escribir en un idioma indigena","No ha aprobado ningun nivel", "Aprobado nivel Preprimario", "Aprobado nivel Primario", "Aprobado nivel Basico", "Aprobado nivel Diversificado", "Aprobado nivel Universitario", "Aprobado nivel Maestria", "Aprovado nivel Doctorado ")
Según los datos de está tabla tenemos las siguientes probabilidades: De qué Lucía de Guatemala siendo pobre o no pobre pueda estudiar la universidad:
(0.006263048 + 0.096098266)*100
[1] 10.23613
De qué Ana de Alta Verapaz siendo pobre o no pobre pueda estudiar la universidad:
(0.022727273 + 0.141414141)*100
[1] 16.41414
De qué Sofía de Jutiapa siendo pobre o no pobre pueda estudiar la universidad:
6.6350711 + 1.3513514
[1] 7.986422
Podemos observar que la probabilidad de que Lucía de Guatemala entre a la universidad es de 10.2% dado que los hombres predominan en haber aprobado la universidad. Alta Verapaz muestra un número alto de un 16% de probabilidad dado que aquí las mujeres son las que más oportunidades de estudio poseen ya que los hombres trabajan y Sofía de Jutiapa muestra un índice bajo con un 7.9% de probabilidad que apruebe la universidad.
7. ¿Cuál es la probabilidad que sean indígenas y hablen un idioma indígena?
library(dplyr)
library(ggplot2)
library(tidyverse)
library(haven)
encovi_edu <- read_sav("~/Data Science/trabajo ENCOVI/personas.sav")
encovi_edu2 <- encovi_edu %>% select(DEPTO, AREA, POBREZA, PPA02, P06B02A, P04A11A)
colnames(encovi_edu2)<- c("DEPTO", "AREA" ,"POBREZA","SEXO","P06B02A", "Etnia")
encovi_edu2$Sabeescribirleeridiomaindigena <- ifelse(encovi_edu2$P06B02A ==1, TRUE, FALSE)
encovi_edu2$Etnia1 <- ifelse(encovi_edu2$Etnia == 29, FALSE, TRUE)& ifelse(encovi_edu2$Etnia == 99, FALSE, TRUE) & ifelse(encovi_edu2$Etnia == 23, FALSE, TRUE) & ifelse(encovi_edu2$Etnia == 97, FALSE, TRUE) & ifelse(encovi_edu2$Etnia == 30, FALSE, TRUE) & ifelse(encovi_edu2$Etnia == 24, FALSE, TRUE)
encovi_edu2 %>% summarise(Sabeescribirleeridiomaindigena_total = sum(Sabeescribirleeridiomaindigena, na.rm = TRUE)/n(), Etnia1_total = sum(Etnia1, na.rm = TRUE)/n())
DEPARTAMENTO1 <- encovi_edu2%>% group_by(as_factor(DEPTO), as_factor(SEXO), as_factor(AREA)) %>% summarise(Sabeescribirleeridiomaindigena_total = sum(Sabeescribirleeridiomaindigena, na.rm = TRUE)/n(), Etnia1_total = sum(Etnia1, na.rm = TRUE)/n())
colnames(DEPARTAMENTO1)<- c("Departamento", "Sexo","Area","Sabe leer y escribir en un idioma indigena", "Etnia")
Segun los datos de la tabla obtenemos las siguientes probabilidades: Qué Lucía de Guatemala sea indígena y sepa hablar y escribir un idioma indígena:
0.011752683 * 0.101175268 *100
[1] 0.1189081
Qué Ana de Alta Verapaz sea indígena y sepa hablar y escribir un idioma indígena:
(0.079681275 * 0.800796813 )*100
[1] 6.380851
Qué Sofía de Jutiapa sea indígena y sepa hablar y escribir un idioma indígena:
0.002398082 * 0.000000000 *100
[1] 0
Con esto queda demostrado que aunque sean un número grande de personas de origen indígena como Alta Verapaz el hecho de saber y escribir su idioma es sumamente bajo, pero Ana de Alta Verapaz muestra la probabilidad más alta de estos tres departamentos son 6.38% seguido de Lucía en Guatemala con un 0.11% y por último Sofía de Jutiapa que la probabilidad llega a un 0% donde la cultura indígena es casi nula.
8. ¿Cuál es la probabilidad de que tengan menos de 20 años o más de 60 años?
#Tomado del trabajo hecho en el tab 1
library(haven)
library(dplyr)
library(tidyr)
Poblacion <- read_sav("~/Data Science/trabajo ENCOVII/personas.sav")
Poblacion <- select(Poblacion, DEPTO, AREA, POBREZA, PPA02, PPA03, P04A11A)
names(Poblacion) <- c("Departamento", "Area", "Pobreza", "Sexo", "Edad", "Etnia")
Poblacion <-Poblacion[complete.cases(Poblacion),]
Poblacion$Departamento <- as.factor(Poblacion$Departamento)
Poblacion$Area <- as.factor(Poblacion$Area)
Poblacion$Pobreza <- as.factor(Poblacion$Pobreza)
levels(Poblacion$Departamento)<- c("Guatemala", "El Progreso", "Sacatepequez", "Chimaltenango", "Escuintla", "Santa Rosa", "Solola", "Totonicapan", "Quetzaltenango", "Suchitepequez", "Retalhuleu", "San Marcos", "Huehuetenango", "Quiche", "Baja Verapaz", "Alta Verapaz", "Peten", "Izabal", "Zacapa", "Chiquimula", "Jalapa", "Jutiapa")
levels(Poblacion$Area)<- c("Urbana", "Rural")
levels(Poblacion$Pobreza) <- c ("Pobre extremo", "Pobre no extremo", "No pobre")
Poblacion$Sexo <- as.character(Poblacion$Sexo)
Poblacion$Sexo[Poblacion$Sexo == 1] <- "Hombre"
Poblacion$Sexo[Poblacion$Sexo == 2] <- "Mujer"
#Se Filtro el Data set
Poblacion <- filter(Poblacion, Sexo=="Mujer", Area=="Urbana")
#Se sacó la probabilidad de que tengan menos de 20 o más de 60
edad1 <- pnorm(20, mean(Poblacion$Edad), sd(Poblacion$Edad))
edad2 <- 1 - pnorm(60, mean(Poblacion$Edad), sd(Poblacion$Edad))
edad1 + edad2
La probabilidad de que suceda es de un 40%
9. ¿Cuál es a probabilidad de que tengan al menos 12 años de escolaridad si tienen 20 años? (12 años de escolaridad es más o menos haber completado el colegio)
#Tomado de lo trabajado en el tab 2
Educacion <- read_sav("~/Data Science/trabajo ENCOVI/personas.sav")
Educacion <- select(Educacion, DEPTO, AREA, POBREZA, PPA03, P06B01, P06B25A, P06B25B)
names(Educacion) <- c("Departamento", "Area", "Pobreza", "Edad", "LeerEscribir", "Nivel", "Grado")
Educacion <-Educacion[complete.cases(Educacion),]
Educacion$Departamento <- as.factor(Educacion$Departamento)
Educacion$Area <- as.factor(Educacion$Area)
Educacion$Pobreza <- as.factor(Educacion$Pobreza)
levels(Educacion$Departamento)<- c("Guatemala", "El Progreso", "Sacatepequez", "Chimaltenango", "Escuintla", "Santa Rosa", "Solola", "Totonicapan", "Quetzaltenango", "Suchitepequez", "Retalhuleu", "San Marcos", "Huehuetenango", "Quiche", "Baja Verapaz", "Alta Verapaz", "Peten", "Izabal", "Zacapa", "Chiquimula", "Jalapa", "Jutiapa")
levels(Educacion$Area)<- c("Urbana", "Rural")
levels(Educacion$Pobreza) <- c ("Pobre extremo", "Pobre no extremo", "No pobre")
Educacion <- Educacion %>%
mutate(AniosEscolaridad = ifelse(Nivel==1,1,ifelse(Nivel==2, 1+Grado, ifelse(Nivel==3 | Nivel==4, 7+Grado, ifelse(Nivel==5, 12+Grado, ifelse(Nivel==6, 17+Grado, ifelse(Nivel==7,19+Grado,0))))))) %>%
mutate(Alfabetismo = ifelse(LeerEscribir==1,1,0)) %>%
select(Departamento, Area, Pobreza, Edad, AniosEscolaridad, Alfabetismo)
#Se filtraron los datos de acuero a las condiciones
EducacionGuatemala <- filter(Educacion, Edad=="20", Departamento=="Guatemala", Area=="Urbana")
EducacionAltaVerapaz <- filter(Educacion, Edad=="20", Departamento=="Alta Verapaz", Area=="Urbana")
EducacionJutiapa <- filter(Educacion, Edad=="20", Departamento=="Jutiapa", Area=="Urbana")
#Probabilidades
#Se multiplica por la probabilidad que sean mujeres según su departamento (del tab 1)
ProbGuatemala <- (1 - pnorm(12, mean(EducacionGuatemala$AniosEscolaridad), sd(EducacionGuatemala$AniosEscolaridad))) * 0.5227
ProbGuatemala
ProbAltaVerapaz <- (1 -pnorm(12, mean(EducacionAltaVerapaz$AniosEscolaridad), sd(EducacionAltaVerapaz$AniosEscolaridad))) * 0.5051
ProbAltaVerapaz
ProbJutiapa <- (1 - pnorm(12, mean(EducacionJutiapa$AniosEscolaridad), sd(EducacionJutiapa$AniosEscolaridad))) * 0.5059
ProbJutiapa
La probabilidad de que Lucía haya completado el colegio es de 15%, de Ana es de 12% y de Sofía es de 12%. Dado que se asumió que las tres personas viven en el área urbana, las probabilidades quedaron muy parecidas.
10. ¿Cuál es la probabilidad de que tengan acceso a agua y energía eléctrica?
#Tomado del tab 4
vivienda <- read_sav("~/Data Science/trabajo ENCOVI/hogares.sav")
vivienda <- select(vivienda, DEPTO, AREA, POBREZA, P01A05A, P01A05C)
names(vivienda) <- c("Departamento", "Area", "Pobreza", "Agua", "Energia.electrica")
vivienda$Departamento <- as.factor(vivienda$Departamento)
vivienda$Area <- as.factor(vivienda$Area)
vivienda$Pobreza <- as.factor(vivienda$Pobreza)
levels(vivienda$Departamento)<- c("Guatemala", "El Progreso", "Sacatepequez", "Chimaltenango", "Escuintla", "Santa Rosa", "Solola", "Totonicapan", "Quetzaltenango", "Suchitepequez", "Retalhuleu", "San Marcos", "Huehuetenango", "Quiche", "Baja Verapaz", "Alta Verapaz", "Peten", "Izabal", "Zacapa", "Chiquimula", "Jalapa", "Jutiapa")
levels(vivienda$Area)<- c("Urbana", "Rural")
levels(vivienda$Pobreza) <- c ("Pobre extremo", "Pobre no extremo", "No pobre")
vivienda$Agua <- as.numeric(vivienda$Agua)
vivienda$Agua[vivienda$Agua == 2] <- 0
vivienda$Energia.electrica <- as.numeric(vivienda$Energia.electrica)
vivienda$Energia.electrica[vivienda$Energia.electrica==2] <-0
vivienda <- filter(vivienda, Area=="Urbana", Departamento=="Guatemala"| Departamento=="Jutiapa"| Departamento=="Alta Verapaz")
redes <- vivienda %>%
group_by(Departamento) %>%
summarise(Agua= sum(Agua)/n()*100, Energia_electrica = sum(Energia.electrica)/n()*100)
redes
#probabilidades
ProbAgua <- 0.9444*0.8864*0.9026
ProbEnergia <- 0.9378*0.7386*0.9385
ProbRed <- ProbAgua + ProbEnergia - (ProbAgua*ProbEnergia)
ProbRed
La probabilidad de que las casas de Ana, Lucía y Sofía estén conectadas a agua o energía eléctrica es de 91%. Es muy probable ya que son casas del área urbana.
Aquí se presentó un análisis y visualización de datos de la población femenina en tres departamentos mostrando sus condiciones de vida, sus proyecciones de futuro en educación, sus viviendas, los servicios que sus casas requieren, los alimentos y parte de su identidad.
LS0tDQp0aXRsZTogIlByb2JhYmlsaWRhZGVzIEVuY292aSAyMDE0Ig0KYXV0aG9yOiAiU2hhcmlzIEJhcnJpb3MsIFNpdSBMaW5nIENoYW5nLCBSb2RvbGZvIFJvamFzLCBKaW1lbmEgU+FuY2hleiwgU3VjZWx5IFRleXVsIg0Kb3V0cHV0OiBodG1sX25vdGVib29rDQotLS0NCg0KI1BST1lFQ1RPIEZJTkFMOiBQUkVTRU5UQUNJ004gQ09ORElDSU9ORVMgREUgVklEQQ0KDQojIyNJTlRST0RVQ0NJ004NCkVsIHNpZ3VpZW50ZSB0cmFiYWpvIG11ZXN0cmEgcHJvYmFiaWxpZGFkZXMgZGUgbGFzIGNvbmRpY2lvbmVzIGRlIHZpZGEgZGUgbGEgcG9ibGFjafNuIGRlIEd1YXRlbWFsYSBlbiDhbWJpdG9zIGNvbW8gbGEgYWxpbWVudGFjafNuLCBlZHVjYWNp824sIGNvbmRpY2lvbmVzIGRlIHZpdmllbmRhLCBwb2JyZXphIGUgaWRlbnRpZGFkLiBBc+0gdGFtYmnpbiBzZSBoYWNlbiBvYnNlcnZhY2lvbmVzIGRlIGPzbW8gZXN04SBsYSBzaXR1YWNp824gZW4gbGFzIGRpc3RpbnRhcyDhcmVhcyB5IGVzdGFkb3MgZGUgcG9icmV6YSBkZWwgcGHtcyB5IGdlbmVyYXIgY29uY2x1c2lvbmVzIGRlIGxhIHZpZGEgcXVlIGxsZXZhbiBsYXMgcGVyc29uYXMgeSBzdXMgcHJveWVjY2lvbmVzIGRlIGZ1dHVyby4gDQoNCiMjI0RFU0FSUk9MTE8gWSBPQlRFTkNJ004gREUgREFUT1MgREUgUFJPQkFCSUxJREFERVMgDQoNCkVzdGUgYW7hbGlzaXMgc2UgYmFzYXLhIGVuIHByb2JhYmlsaWRhZGVzIGRlIHVuIGdydXBvIGRlIGxhIHBvYmxhY2nzbiwgbGFzIG11amVyZXMgcGFyYSB2ZXIgc3VzIGNvbmRpY2lvbmVzIGRlIHZpZGEgZW4gZWwgcGHtcy4gQWRlbeFzIGRlIGVzdG8gc2UgdmlzdWFsaXphcuEgbGEgaW5mb3JtYWNp824gZGUgZWxsYXMgZW4gbG9zIGRlcGFydGFtZW50b3MgZGUgR3VhdGVtYWxhLCBBbHRhIFZlcmFwYXogeSBKdXRpYXBhIHBhcmEgdmVyIGVuIHF16SBjaXJjdW5zdGFuY2lhcyBzZSBlbmN1ZW50cmFuIGxhcyBwZXJzb25hcy4gDQoNCkVsIGRlc2Fycm9sbG8gZGUgZXN0ZSBwcm95ZWN0byBnaXJhIGVudG9ybm8gZW4gY29ub2NlciBsYSBzaXR1YWNp824gZGUgdmlkYSBkZSB0cmVzIHBlcnNvbmFzIEx1Y+1hLCBBbmEgeSBTb2btYSBkZSBsb3MgZGVwYXJ0YW1lbnRvcyBkZSBHdWF0ZW1hbGEsIEFsdGEgVmVyYXBheiB5IEp1dGlhcGEgcmVzcGVjdGl2YW1lbnRlIHkgZWxsYXMgcGVydGVuZWNlbiBhbCDhcmVhIHVyYmFuYS4gQSBjb250aW51YWNp824gc2Ugb2J0aWVuZW4gbG9zIHJlc3VsdGFkb3MgcXVlIGNvcnJlc3BvbmRlbiBhIHVuYSBzZXJpZSBkZSAgcHJlZ3VudGFzIGEgYW5hbGl6YXIgZGUgbGFzIGNvbmRpY2lvbmVzIGRlIHZpZGEgZGUgZXN0YXMgdHJlcyBwZXJzb25hcy4NCg0KUGFyYSBlc3RlIGFuYWxpc2lzIHNlIG5lY2VzaXRhbiBpbmZvcm1hY2nzbiBkZSBFTkNPVkkgMjAxNCBlbiBsYSBpbmZvcm1hY2nzbiBkZSBwZXJzb25hcywgdml2aWVuZGEsIHkgYWxpbWVudG9zLiBodHRwczovL3d3dy5pbmUuZ29iLmd0L2luZGV4LnBocC9lbmN1ZXN0YXMtZGUtaG9nYXJlcy15LXBlcnNvbmFzL2NvbmRpY2lvbmVzLWRlLXZpZGENCg0KDQojIyMxLiAJv0N14WwgZXMgbGEgcHJvYmFiaWxpZGFkIGRlIHF1ZSAgdGVuZ2FuIHVuYSBjYXNhIGNvbiB0ZWNobyB5IHBhcmVkZXMgZGUgYmxvY2s/DQpgYGB7cn0NCmxpYnJhcnkoaGF2ZW4pDQpsaWJyYXJ5KGRwbHlyKQ0KDQpQZXJzb25hcyA8LSByZWFkX3NhdigiUiBEQVRBL1BlcnNvbmFzLnNhdiIpDQoNCg0KUGVyc29uYXMgIDwtIHNlbGVjdChQZXJzb25hcywgTlVNSE9HLCBERVBUTywgQVJFQSwgUE9CUkVaQSwgUFBBMDIsIFBQQTAzLCBQMDRBMTFBLCBQMDZCMDEsIFAwNkIyNUEsIFAwNkIyNUIpDQpuYW1lcyhQZXJzb25hcykgPC0gYygiSURfQ2FzYSIsICJEZXBhcnRhbWVudG8iLCAiQXJlYSIsICJQb2JyZXphIiwgIlNleG8iLCAiRWRhZCIsICJFdG5pYSIsICJMZWVyRXNjcmliaXIiLCAiTml2ZWwiLCAiR3JhZG8iKQ0KUGVyc29uYXMgPC1QZXJzb25hc1tjb21wbGV0ZS5jYXNlcyhQZXJzb25hcyksXQ0KDQpIb2dhciA8LSByZWFkX3NhdigiUiBEQVRBL0hvZ2FyZXMuc2F2IikNCg0KSG9nYXIgIDwtIHNlbGVjdChIb2dhciwgTlVNSE9HLCBQMDFBMDEsIFAwMUEwMiwgUDAxQTAzLCBQMDFBMDQsIFAwMUEwNUE6UDAxQTA1RiwgUDAxRDE5QSwgUDAxRDE5QiwgUDAxRDE5QywgUDAxRDE5RCwgUDAxRDIxLCBQMDFEMjcsIFAwMUQyOCkNCm5hbWVzKEhvZ2FyKSA8LSBjKCJJRF9DYXNhIiwgIlRpcG9WaXZpZW5kYSIsICJQYXJlZCIsICJUZWNobyIsICJQaXNvIiwgIkFndWEiLCAiRHJlbmFqZSIsICJFbmVyZ2lhLmVsZWN0cmljYSIsICJSZWQudGVsZWZvbmlhIiwgIkNvbnRhZG9yLmRlLmFndWEiLCAiQ29udGFkb3IuZGUuZWxlY3RyaWNpZGFkIiwgIlRlbGVmb25vRmlqbyIsICJUZWxlZm9ub0NlbHVsYXIiLCAiSW50ZXJuZXQiLCAiVFZDYWJsZSIsICJFbGltaW5hckJhc3VyYSIsICJVc2FMZW5pYSIsICJPYnRlbmVyTGVuaWEiKQ0KSG9nYXIgPC0gSG9nYXJbY29tcGxldGUuY2FzZXMoSG9nYXIpLF0NCg0KU3VwZXIgPC0gcmVhZF9zYXYoIlIgREFUQS9TdXBlci5zYXYiKQ0KDQpTdXBlciAgPC0gc2VsZWN0KFN1cGVyLCBOVU1IT0csIFAxMkExMikNCm5hbWVzKFN1cGVyKSA8LSBjKCJJRF9DYXNhIiwgIkZyZWN1ZW5jaWFfQ29tcHJhIikNCg0KUG9ibGFjaW9uIDwtIG1lcmdlKFBlcnNvbmFzLCBIb2dhcikNClBvYmxhY2lvbiA8LSBtZXJnZShQb2JsYWNpb24sIFN1cGVyKQ0KDQoNClBvYmxhY2lvbiREZXBhcnRhbWVudG8gPC0gYXMuZmFjdG9yKFBvYmxhY2lvbiREZXBhcnRhbWVudG8pDQpQb2JsYWNpb24kQXJlYSAgPC0gYXMuZmFjdG9yKFBvYmxhY2lvbiRBcmVhKQ0KUG9ibGFjaW9uJFBvYnJlemEgIDwtIGFzLmZhY3RvcihQb2JsYWNpb24kUG9icmV6YSkNCg0KbGV2ZWxzKFBvYmxhY2lvbiREZXBhcnRhbWVudG8pPC0gYygiR3VhdGVtYWxhIiwgIkVsIFByb2dyZXNvIiwgIlNhY2F0ZXBlcXVleiIsICJDaGltYWx0ZW5hbmdvIiwgIkVzY3VpbnRsYSIsICJTYW50YSBSb3NhIiwgIlNvbG9sYSIsICJUb3RvbmljYXBhbiIsICJRdWV0emFsdGVuYW5nbyIsICJTdWNoaXRlcGVxdWV6IiwgIlJldGFsaHVsZXUiLCAiU2FuIE1hcmNvcyIsICJIdWVodWV0ZW5hbmdvIiwgIlF1aWNoZSIsICJCYWphIFZlcmFwYXoiLCAiQWx0YSBWZXJhcGF6IiwgIlBldGVuIiwgIkl6YWJhbCIsICJaYWNhcGEiLCAiQ2hpcXVpbXVsYSIsICJKYWxhcGEiLCAiSnV0aWFwYSIpDQpsZXZlbHMoUG9ibGFjaW9uJEFyZWEpPC0gYygiVXJiYW5hIiwgIlJ1cmFsIikNCmxldmVscyhQb2JsYWNpb24kUG9icmV6YSkgPC0gYyAoIlBvYnJlIGV4dHJlbW8iLCAiUG9icmUgbm8gZXh0cmVtbyIsICJObyBwb2JyZSIpDQoNClBvYmxhY2lvbiRTZXhvIDwtIGFzLmNoYXJhY3RlcihQb2JsYWNpb24kU2V4bykNClBvYmxhY2lvbiRTZXhvW1BvYmxhY2lvbiRTZXhvID09IDFdIDwtICJIb21icmUiDQpQb2JsYWNpb24kU2V4b1tQb2JsYWNpb24kU2V4byA9PSAyXSA8LSAiTXVqZXIiDQoNClRvdF9EZXAgPC0gUG9ibGFjaW9uICU+JQ0KICBzZWxlY3QoRGVwYXJ0YW1lbnRvKSAlPiUNCiAgZ3JvdXBfYnkoRGVwYXJ0YW1lbnRvKSAlPiUNCiAgc3VtbWFyaXNlKFRvdGFsPSBuKCkpICU+JQ0KICBmaWx0ZXIoRGVwYXJ0YW1lbnRvPT0iR3VhdGVtYWxhIiB8IERlcGFydGFtZW50bz09ICJBbHRhIFZlcmFwYXoiIHwgRGVwYXJ0YW1lbnRvPT0gIkp1dGlhcGEiKQ0KDQpQcmVndW50YTEgPC0gUG9ibGFjaW9uICU+JQ0KICBzZWxlY3QoRGVwYXJ0YW1lbnRvLCBBcmVhLCBTZXhvLCBUZWNobywgUGFyZWQpICU+JQ0KICBncm91cF9ieShEZXBhcnRhbWVudG8sIEFyZWEsIFNleG8sIFRlY2hvLCBQYXJlZCkgJT4lDQogIHN1bW1hcmlzZShjYW50aWRhZD0gbigpKSAlPiUNCiAgZmlsdGVyKERlcGFydGFtZW50bz09Ikd1YXRlbWFsYSIgfCBEZXBhcnRhbWVudG89PSAiQWx0YSBWZXJhcGF6IiB8IERlcGFydGFtZW50bz09ICJKdXRpYXBhIiwgQXJlYT09ICJVcmJhbmEiLCBTZXhvPT0gIk11amVyIiwgVGVjaG89PTIsIFBhcmVkID09IDIpDQogIA0KUHJlZ3VudGEyIDwtIFBvYmxhY2lvbiAlPiUNCiAgc2VsZWN0KERlcGFydGFtZW50bywgQXJlYSwgU2V4bywgVGlwb1ZpdmllbmRhLCBQaXNvKSAlPiUNCiAgZ3JvdXBfYnkoRGVwYXJ0YW1lbnRvLCBBcmVhLCBTZXhvLCBUaXBvVml2aWVuZGEsIFBpc28pICU+JQ0KICBzdW1tYXJpc2UoY2FudGlkYWQ9IG4oKSkgJT4lDQogIGZpbHRlcihEZXBhcnRhbWVudG89PSJHdWF0ZW1hbGEiIHwgRGVwYXJ0YW1lbnRvPT0gIkFsdGEgVmVyYXBheiIgfCBEZXBhcnRhbWVudG89PSAiSnV0aWFwYSIsIEFyZWE9PSAiVXJiYW5hIiwgU2V4bz09ICJNdWplciIsIFRpcG9WaXZpZW5kYT09MSwgUGlzbyA9PSA0KQ0KDQpQcmVndW50YTMgPC0gUG9ibGFjaW9uICU+JQ0KICBzZWxlY3QoRGVwYXJ0YW1lbnRvLCBBcmVhLCBTZXhvLCBGcmVjdWVuY2lhX0NvbXByYSkgJT4lDQogIGdyb3VwX2J5KERlcGFydGFtZW50bywgQXJlYSwgU2V4bywgRnJlY3VlbmNpYV9Db21wcmEpICU+JQ0KICBzdW1tYXJpc2UoY2FudGlkYWQ9IG4oKSkNCiAgZmlsdGVyKERlcGFydGFtZW50bz09Ikd1YXRlbWFsYSIgfCBEZXBhcnRhbWVudG89PSAiQWx0YSBWZXJhcGF6IiB8IERlcGFydGFtZW50bz09ICJKdXRpYXBhIiwgQXJlYT09ICJVcmJhbmEiLCBTZXhvPT0gIk11amVyIiwgRnJlY3VlbmNpYV9Db21wcmE9PTIgfCBGcmVjdWVuY2lhX0NvbXByYT09Mw0KYGBgDQoNCg0KQmFzYWRvcyBlbiBsb3MgZGF0b3MgZGUgbGFzIHRhYmxhcyBkZSBhbuFsaXNpcyBkZSBFbmNvdmkgdGVuZW1vczoNCg0KUHJvYmFiaWxpZGFkIHF1ZSBMdWPtYSB0ZW5nYSB1bmEgY2FzYSBjb24gdGVjaG8geSBwYXJlZGVzIGRlIGJsb2NrOg0KYGBge3J9DQoxNTUvMTAxOCoxMDANCmBgYA0KDQpQcm9iYWJpbGlkYWQgcXVlIEFuYSB0ZW5nYSB1bmEgY2FzYSBjb24gdGVjaG8geSBwYXJlZGVzIGRlIGJsb2NrOg0KYGBge3J9DQo4NS8xMTU2ICoxMDANCmBgYA0KDQpQcm9iYWJpbGlkYWQgcXVlIFNvZu1hIHRlbmdhIHVuYSBjYXNhIGNvbiB0ZWNobyB5IHBhcmVkZXMgZGUgYmxvY2s6DQpgYGB7cn0NCjY5LzE3MDAgKjEwMA0KYGBgDQpFbiBlbCBkZXBhcnRhbWVudG8gZGUgR3VhdGVtYWxhIGhheSBt4XMgcHJvYmFiaWxpZGFkZXMgZGUgdGVuZXIgdW5hIGNhc2EgY29uIHRlY2hvIHkgcGFyZWRlcyBkZSBibG9jay4gDQoNCiMjIzIuCb9DdeFsIGVzIGxhIHByb2JhYmlsaWRhZCBxdWUgdGVuZ2FuIHVuYSBjYXNhIGZvcm1hbCB5IHRlbmdhbiB1biBwaXNvIGRlIGNlbWVudG8/DQpQcm9iYWJpbGlkYWQgcXVlIEx1Y+1hIHRlbmdhIHVuYSBjYXNhIGZvcm1hbCB5IHVuIHBpc28gZGUgY2VtZW50bzoNCmBgYHtyfQ0KMTU0LzEwMTgqMTAwDQpgYGANCg0KUHJvYmFiaWxpZGFkIHF1ZSBBbmEgdGVuZ2EgdW5hIGNhc2EgZm9ybWFsIHkgdW4gcGlzbyBkZSBjZW1lbnRvOg0KYGBge3J9DQo3NS8xMTU2ICoxMDANCmBgYA0KDQpQcm9iYWJpbGlkYWQgcXVlIFNvZu1hIHRlbmdhIHVuYSBjYXNhIGZvcm1hbCB5IHVuIHBpc28gZGUgY2VtZW50bzoNCmBgYHtyfQ0KNjcvMTcwMCAqMTAwDQpgYGANCkVuIGVsIGRlcGFydGFtZW50byBkZSBHdWF0ZW1hbGEgaGF5IG3hcyBwcm9iYWJpbGlkYWRlcyBkZSB0ZW5lciB1bmEgY2FzYSBmb3JtYWwgeSB1biBwaXNvIGRlIGNlbWVudG8uDQoNCiMjIzMuCb9DdeFsIGVzIGxhIHByb2JhYmlsaWRhZCBxdWUgY29tcHJlIHNlbWFuYWxtZW50ZSBvIHF1aW5jZW5hbG1lbnRlIHN1IGNvbWlkYSBlbiBlbCBz+nBlcj8NClByb2JhYmlsaWRhZCBxdWUgTHVj7WEgY29tcHJlIHNlbWFuYWxtZW50ZSBvIHF1aW5jZW5hbG1lbnRlIHN1IGNvbWlkYSBlbiBlbCBz+nBlcjoNCmBgYHtyfQ0KNy8xMDE4KjEwMA0KYGBgDQoNClByb2JhYmlsaWRhZCBxdWUgQW5hICBjb21wcmUgc2VtYW5hbG1lbnRlIG8gcXVpbmNlbmFsbWVudGUgc3UgY29taWRhIGVuIGVsIHP6cGVyOg0KYGBge3J9DQozLzExNTYgKjEwMA0KYGBgDQoNClByb2JhYmlsaWRhZCBxdWUgU29m7WEgY29tcHJlIHNlbWFuYWxtZW50ZSBvIHF1aW5jZW5hbG1lbnRlIHN1IGNvbWlkYSBlbiBlbCBz+nBlcjoNCmBgYHtyfQ0KMC8xNzAwDQpgYGANClNlIHB1ZWRlIG9ic2VydmFyIHF1ZSBlbiBlbCBkZXBhcnRhbWVudG8gZGUgSnV0aWFwYSBsYSBwcm9iYWJpbGlkYWQgZXMgMCUgeSBsYSBt4XMgYWx0YSBlcyBlbiBHdWF0ZW1hbGEgcG9yIEx1Y+1hIGRlIDAuNjklLiANCg0KIyMjNC4Jv0N14WwgZXMgbGEgcHJvYmFiaWxpZGFkIGRlIHF1ZSBzZWFuIGJlbmVmaWNpYXJpYXMgZGUgdW5hIGRvbmFjafNuIGRlICBhbGltZW50b3MgbyBtYXRlcmlhbGVzPw0KDQpgYGB7cn0NCmRvbmFjaW9uZXMgPC0gcmVhZF9zYXYoIn4vRGF0YSBTY2llbmNlL3RyYWJham8gRU5DT1ZJRG9uYWNpb25lcy5zYXYiKQ0KDQpob2dhcmVzX2RvbmFjaW9uIDwtIGRvbmFjaW9uZXMgJT4lIHNlbGVjdChSRUdJT04sIERFUFRPLCBBUkVBLCBQT0JSRVpBLCBJRF9ET05BQ0lPTkVTLCBQMDFGMDEsIFAwMUYwMkEsIFAwMUYwMkIsIFAwMUYwMkMsIFAwMUYwMkQsICBQMDFGMDJFKQ0KDQpuYW1lcyhob2dhcmVzX2RvbmFjaW9uKSA8LSBjKCJSZWdp824iLCAiRGVwYXJ0YW1lbnRvIiwgIkFyZWEiLCAiUG9icmV6YSIsICJEb25hZG9yZXMiLCAiRXNwZWNpZSIsICJBbGltZW50b3MiLCAiVmVzdHVhcmlvIiwgIk1lZGljaW5hcyIsICJNYXRlcmlhbGVzIiwgIk90cm8iKQ0KaG9nYXJlc19kb25hY2lvbiA8LSBob2dhcmVzX2RvbmFjaW9uW2NvbXBsZXRlLmNhc2VzKGhvZ2FyZXNfZG9uYWNpb24pLF0NCmBgYA0KDQpgYGB7cn0NCmhvZ2FyZXNfZG9uYWNpb24kRGVwYXJ0YW1lbnRvIDwtIGFzLmZhY3Rvcihob2dhcmVzX2RvbmFjaW9uJERlcGFydGFtZW50bykNCmhvZ2FyZXNfZG9uYWNpb24kQXJlYSAgPC0gYXMuZmFjdG9yKGhvZ2FyZXNfZG9uYWNpb24kQXJlYSkNCmhvZ2FyZXNfZG9uYWNpb24kUG9icmV6YSAgPC0gYXMuZmFjdG9yKGhvZ2FyZXNfZG9uYWNpb24kUG9icmV6YSkNCmhvZ2FyZXNfZG9uYWNpb24kRG9uYWRvcmVzIDwtIGFzLm51bWVyaWMoaG9nYXJlc19kb25hY2lvbiREb25hZG9yZXMpDQoNCmxldmVscyhob2dhcmVzX2RvbmFjaW9uJERlcGFydGFtZW50byk8LSBjKCJHdWF0ZW1hbGEiLCAiRWwgUHJvZ3Jlc28iLCAiU2FjYXRlcGVxdWV6IiwgIkNoaW1hbHRlbmFuZ28iLCAiRXNjdWludGxhIiwgIlNhbnRhIFJvc2EiLCAiU29sb2xhIiwgIlRvdG9uaWNhcGFuIiwgIlF1ZXR6YWx0ZW5hbmdvIiwgIlN1Y2hpdGVwZXF1ZXoiLCAiUmV0YWxodWxldSIsICJTYW4gTWFyY29zIiwgIkh1ZWh1ZXRlbmFuZ28iLCAiUXVpY2hlIiwgIkJhamEgVmVyYXBheiIsICJBbHRhIFZlcmFwYXoiLCAiUGV0ZW4iLCAiSXphYmFsIiwgIlphY2FwYSIsICJDaGlxdWltdWxhIiwgIkphbGFwYSIsICJKdXRpYXBhIikNCmxldmVscyhob2dhcmVzX2RvbmFjaW9uJEFyZWEpIDwtIGMoIlVyYmFuYSIsICJSdXJhbCIpDQpsZXZlbHMoaG9nYXJlc19kb25hY2lvbiRQb2JyZXphKSA8LSBjICgiUG9icmUgZXh0cmVtbyIsICJQb2JyZSBubyBleHRyZW1vIiwgIk5vIHBvYnJlIikNCg0KaG9nYXJlc19kb25hY2lvbiRFc3BlY2llIDwtIGlmZWxzZShob2dhcmVzX2RvbmFjaW9uJEVzcGVjaWUgPT0gMSwgVFJVRSwgRkFMU0UpDQpob2dhcmVzX2RvbmFjaW9uJEFsaW1lbnRvcyA8LSBpZmVsc2UoaG9nYXJlc19kb25hY2lvbiRBbGltZW50b3MgPT0gMSwgVFJVRSwgRkFMU0UpDQpob2dhcmVzX2RvbmFjaW9uJHZlc3R1YXJpbyA8LSBpZmVsc2UoaG9nYXJlc19kb25hY2lvbiRWZXN0dWFyaW8gPT0gMSwgVFJVRSwgRkFMU0UpDQpob2dhcmVzX2RvbmFjaW9uJE1lZGljaW5hcyA8LSBpZmVsc2UoaG9nYXJlc19kb25hY2lvbiRNZWRpY2luYXMgPT0gMSwgVFJVRSwgRkFMU0UpDQpob2dhcmVzX2RvbmFjaW9uJE1hdGVyaWFsZXMgPC0gaWZlbHNlKGhvZ2FyZXNfZG9uYWNpb24kTWF0ZXJpYWxlcyA9PSAxLCBUUlVFLCBGQUxTRSkNCmhvZ2FyZXNfZG9uYWNpb24kT3RybyA8LSBpZmVsc2UoaG9nYXJlc19kb25hY2lvbiRPdHJvID09IDEsIFRSVUUsIEZBTFNFKQ0KYGBgDQoNCmBgYHtyfQ0KaG9nYXJlc19kb25hY2lvbiAlPiUgc3VtbWFyaXNlKERvbmFjaW9uX0VzcGVjaWUgPSBzdW0oaG9nYXJlc19kb25hY2lvbiRFc3BlY2llLCBuYS5ybSA9IFRSVUUpL24oKSwgRG9uYWNpb25fQWxpbWVudG9zID0gc3VtKGhvZ2FyZXNfZG9uYWNpb24kQWxpbWVudG9zLCBuYS5ybSA9IFRSVUUpL24oKSwgRG9uYWNpb25fVmVzdHVhcmlvID0gc3VtKGhvZ2FyZXNfZG9uYWNpb24kVmVzdHVhcmlvLCBuYS5ybSA9IFRSVUUpL24oKSwgRG9uYWNpb25fTWVkaWNpbmFzID0gc3VtKGhvZ2FyZXNfZG9uYWNpb24kTWVkaWNpbmFzLCBuYS5ybSA9IFRSVUUpL24oKSwgRG9uYWNpb25fTWF0ZXJpYWxlcyA9IHN1bShob2dhcmVzX2RvbmFjaW9uJE1hdGVyaWFsZXMsIG5hLnJtID0gVFJVRSkvbigpLA0KRG9uYWNpb25fT3RybyA9IHN1bShob2dhcmVzX2RvbmFjaW9uJE90cm8sIG5hLnJtID0gVFJVRSkvbigpKQ0KDQpob2dhcmVzX2RvbmFjaW9uICU+JSBncm91cF9ieShEZXBhcnRhbWVudG8pICU+JSBzdW1tYXJpc2UoRG9uYWNpb25fRXNwZWNpZSA9IHN1bShob2dhcmVzX2RvbmFjaW9uJEVzcGVjaWUsIG5hLnJtID0gVFJVRSkvbigpLCBEb25hY2lvbl9BbGltZW50b3MgPSBzdW0oaG9nYXJlc19kb25hY2lvbiRBbGltZW50b3MsIG5hLnJtID0gVFJVRSkvbigpLCBEb25hY2lvbl9WZXN0dWFyaW8gPSBzdW0oaG9nYXJlc19kb25hY2lvbiRWZXN0dWFyaW8sIG5hLnJtID0gVFJVRSkvbigpLCBEb25hY2lvbl9NZWRpY2luYXMgPSBzdW0oaG9nYXJlc19kb25hY2lvbiRNZWRpY2luYXMsIG5hLnJtID0gVFJVRSkvbigpLCBEb25hY2lvbl9NYXRlcmlhbGVzID0gc3VtKGhvZ2FyZXNfZG9uYWNpb24kTWF0ZXJpYWxlcywgbmEucm0gPSBUUlVFKS9uKCksDQpEb25hY2lvbl9PdHJvID0gc3VtKGhvZ2FyZXNfZG9uYWNpb24kT3RybywgbmEucm0gPSBUUlVFKS9uKCkpDQpgYGANCg0KQ+FsY3Vsb3MgcmVsYWNpb25hZG9zDQoNClBPQkxBQ0nTTiBGRU1JTklOQSAgICAgICAgICAgICBET05BQ0nTTiBERSBBTElNRU5UT1MgICAgICAgRE9OQUNJ004gREUgTUFURVJJQUxFUw0KR3VhdGVtYWxhID0gNTIuNyUgICAgICAgICAgICAgICAgICAgICAgICA4LjAwMDAlICAgICAgICAgICAgICAgICAgICAgICAgMC4zOTcyJSAgICAgICAgICAgICANCkp1dGlhcGEgICA9IDUwLjYlICAgICAgICAgICAgICAgICAgICAgICAgOC41ODk3JSAgICAgICAgICAgICAgICAgICAgICAgIDAuNTA0MyUNCkFsdGEgVmVyYXBheiA9IDUwLjQlICAgICAgICAgICAgICAgICAgICAgMTAuMTU2JSAgICAgICAgICAgICAgICAgICAgICAgIDAuNDI2NCUNCg0KDQpQcm9iYWJpbGlkYWQgcXVlIEx1Y+1hIHNlYSBiZW5lZmljaWFyaWEgZGUgdW5hIGRvbmFjafNuIGRlIGFsaW1lbnRvcyBvIG1hdGVyaWFsZXM6DQpgYGB7cn0NCjAuMTU5MzM5NyAqIDEwMA0KYGBgDQoNClByb2JhYmlsaWRhZCBxdWUgU29m7WEgc2VhIGJlbmVmaWNpYXJpYSBkZSB1bmEgZG9uYWNp824gZGUgYWxpbWVudG9zIG8gbWF0ZXJpYWxlczoNCmBgYHtyfQ0KMC4xNzk3MjMzICogMTAwDQpgYGANCg0KUHJvYmFiaWxpZGFkIHF1ZSBBbmEgc2VhIGJlbmVmaWNpYXJpYSBkZSB1bmEgZG9uYWNp824gZGUgYWxpbWVudG9zIG8gbWF0ZXJpYWxlczoNCmBgYHtyfQ0KMC4yMDk5NjgzICogMTAwDQpgYGANClBvZGVtb3Mgb2JzZXJ2YXIgcXVlIGxhcyBwcm9iYWJpbGlkYWRlcyBxdWUgTHVj7WEgcmVjaWJhIGRvbmFjaW9uZXMgeWEgc2VhIGRlIGFsaW1lbnRvcyBvIG1hdGVyaWFsZXMgZXMgZGUgMTUlIHkgbWVub3IgYWwgZGUgbGFzIG90cmFzIGNoaWNhcyBkYWRvIHF1ZSBlbGxhcyB2aXZlbiBlbiBlbCBpbnRlcmlvciBkZWwgcGHtcy4gIA0KDQoNCiMjIyA1Lgm/Q3XhbCBlcyBsYSBwcm9iYWJpbGlkYWQgZGUgcXVlIHRlbmdhbiBSZWQgZGUgRW5lcmftYSBFbOljdHJpY2EgeSBSZWQgdGVsZWbzbmljYT8NCmBgYHtyfQ0Kdml2aWVuZGEgPC0gcmVhZF9zYXYoIn4vRGF0YSBTY2llbmNlL3RyYWJham8gRU5DT1ZJL2hvZ2FyZXMuc2F2IikNCnZpdmllbmRhIDwtIHNlbGVjdCh2aXZpZW5kYSwgREVQVE8sIEFSRUEsIFBPQlJFWkEsIFAwMUEwNUE6UDAxQTA1RikNCm5hbWVzKHZpdmllbmRhKSA8LSBjKCJEZXBhcnRhbWVudG8iLCAiQXJlYSIsICJQb2JyZXphIiwgIkFndWEiLCAiRHJlbmFqZSIsICJFbmVyZ2lhLmVsZWN0cmljYSIsICJSZWQudGVsZWZvbmlhIiwgIkNvbnRhZG9yLmRlLmFndWEiLCAiQ29udGFkb3IuZGUuZWxlY3RyaWNpZGFkIikNCmBgYA0KDQpgYGB7cn0NCnZpdmllbmRhJERlcGFydGFtZW50byA8LSBhcy5mYWN0b3Iodml2aWVuZGEkRGVwYXJ0YW1lbnRvKQ0Kdml2aWVuZGEkQXJlYSAgPC0gYXMuZmFjdG9yKHZpdmllbmRhJEFyZWEpDQp2aXZpZW5kYSRQb2JyZXphICA8LSBhcy5mYWN0b3Iodml2aWVuZGEkUG9icmV6YSkNCmBgYA0KDQpgYGB7cn0NCmxldmVscyh2aXZpZW5kYSREZXBhcnRhbWVudG8pPC0gYygiR3VhdGVtYWxhIiwgIkVsIFByb2dyZXNvIiwgIlNhY2F0ZXBlcXVleiIsICJDaGltYWx0ZW5hbmdvIiwgIkVzY3VpbnRsYSIsICJTYW50YSBSb3NhIiwgIlNvbG9sYSIsICJUb3RvbmljYXBhbiIsICJRdWV0emFsdGVuYW5nbyIsICJTdWNoaXRlcGVxdWV6IiwgIlJldGFsaHVsZXUiLCAiU2FuIE1hcmNvcyIsICJIdWVodWV0ZW5hbmdvIiwgIlF1aWNoZSIsICJCYWphIFZlcmFwYXoiLCAiQWx0YSBWZXJhcGF6IiwgIlBldGVuIiwgIkl6YWJhbCIsICJaYWNhcGEiLCAiQ2hpcXVpbXVsYSIsICJKYWxhcGEiLCAiSnV0aWFwYSIpDQpsZXZlbHModml2aWVuZGEkQXJlYSk8LSBjKCJVcmJhbmEiLCAiUnVyYWwiKQ0KbGV2ZWxzKHZpdmllbmRhJFBvYnJlemEpIDwtIGMgKCJQb2JyZSBleHRyZW1vIiwgIlBvYnJlIG5vIGV4dHJlbW8iLCAiTm8gcG9icmUiKQ0KDQp2aXZpZW5kYSRBZ3VhIDwtIGFzLm51bWVyaWModml2aWVuZGEkQWd1YSkNCnZpdmllbmRhJEFndWFbdml2aWVuZGEkQWd1YSA9PSAyXSA8LSAwDQp2aXZpZW5kYSREcmVuYWplICA8LSBhcy5udW1lcmljKHZpdmllbmRhJERyZW5hamUpDQp2aXZpZW5kYSREcmVuYWplW3ZpdmllbmRhJERyZW5hamUgPT0yXSA8LTANCnZpdmllbmRhJEVuZXJnaWEuZWxlY3RyaWNhICA8LSBhcy5udW1lcmljKHZpdmllbmRhJEVuZXJnaWEuZWxlY3RyaWNhKQ0Kdml2aWVuZGEkRW5lcmdpYS5lbGVjdHJpY2Fbdml2aWVuZGEkRW5lcmdpYS5lbGVjdHJpY2E9PTJdIDwtMA0Kdml2aWVuZGEkUmVkLnRlbGVmb25pYSAgPC0gYXMubnVtZXJpYyh2aXZpZW5kYSRSZWQudGVsZWZvbmlhKQ0Kdml2aWVuZGEkUmVkLnRlbGVmb25pYVt2aXZpZW5kYSRSZWQudGVsZWZvbmlhPT0yXSA8LSAwDQp2aXZpZW5kYSRDb250YWRvci5kZS5hZ3VhICA8LSBhcy5udW1lcmljKHZpdmllbmRhJENvbnRhZG9yLmRlLmFndWEpDQp2aXZpZW5kYSRDb250YWRvci5kZS5hZ3VhW3ZpdmllbmRhJENvbnRhZG9yLmRlLmFndWEgPT0gMl0gPC0gMA0Kdml2aWVuZGEkQ29udGFkb3IuZGUuZWxlY3RyaWNpZGFkICA8LSBhcy5udW1lcmljKHZpdmllbmRhJENvbnRhZG9yLmRlLmVsZWN0cmljaWRhZCkNCnZpdmllbmRhJENvbnRhZG9yLmRlLmVsZWN0cmljaWRhZFt2aXZpZW5kYSRDb250YWRvci5kZS5lbGVjdHJpY2lkYWQgPT0gMl0gPC0gMA0KYGBgDQoNCmBgYHtyfQ0KUmVkZXMuRGVwYXJ0YW1lbnRvIDwtIHZpdmllbmRhICU+JQ0KICBncm91cF9ieShEZXBhcnRhbWVudG8pICU+JQ0KICBzdW1tYXJpc2UoQWd1YT0gc3VtKEFndWEpL24oKSoxMDAsIERyZW5hamU9IHN1bShEcmVuYWplKS9uKCkqMTAwLCBFbmVyZ2lhX2VsZXRyaWNhID0gc3VtKEVuZXJnaWEuZWxlY3RyaWNhKS9uKCkqMTAwLCBSZWRfdGVsZWZvbmlhPSBzdW0oUmVkLnRlbGVmb25pYSkvbigpKjEwMCwgQ29udGFkb3JfQWd1YT0gc3VtKENvbnRhZG9yLmRlLmFndWEpL24oKSoxMDAsIENvbnRhZG9yX0VsZWN0cmljaWRhZD0gc3VtKENvbnRhZG9yLmRlLmVsZWN0cmljaWRhZCkvbigpKjEwMCkNCg0KUmVkZXMuQXJlYSA8LSB2aXZpZW5kYSAlPiUgZ3JvdXBfYnkoQXJlYSklPiUgc3VtbWFyaXNlKEFndWE9IHN1bShBZ3VhKS9uKCkqMTAwLCBEcmVuYWplPSBzdW0oRHJlbmFqZSkvbigpKjEwMCwgRW5lcmdpYV9lbGV0cmljYSA9IHN1bShFbmVyZ2lhLmVsZWN0cmljYSkvbigpKjEwMCwgUmVkX3RlbGVmb25pYT0gc3VtKFJlZC50ZWxlZm9uaWEpL24oKSoxMDAsIENvbnRhZG9yX0FndWE9IHN1bShDb250YWRvci5kZS5hZ3VhKS9uKCkqMTAwLCBDb250YWRvcl9FbGVjdHJpY2lkYWQ9IHN1bShDb250YWRvci5kZS5lbGVjdHJpY2lkYWQpL24oKSoxMDApDQpgYGANCg0KYGBge3J9DQpSZWRlcy5EZXBhcnRhbWVudG8NClJlZGVzLkFyZWENCmBgYA0KDQpD4WxjdWxvcyBSZWxhY2lvbmFkb3M6IA0KDQpQT0JMQUNJ004gRkVNSU5JTkEgICAgICAgICAgICAgICAgICAgICAgUkVEIEVMRUNUUklDQSAgICAgICAgICAgICAgICAgUkVEIFRFTEVGT05JQ0EgDQpHdWF0ZW1hbGEgPSA1Mi43JSAgICAgICAgICAgICAgICAgICAgICAgIDkyLjcyJSAgICAgICAgICAgICAgICAgICAgICAgICAyMi40MSUgICAgICAgICAgICAgDQpKdXRpYXBhICAgPSA1MC42JSAgICAgICAgICAgICAgICAgICAgICAgIDgzLjIwJSAgICAgICAgICAgICAgICAgICAgICAgICAwNS40NCUNCkFsdGEgVmVyYXBheiA9IDUwLjQlICAgICAgICAgICAgICAgICAgICAgMzguMjIlICAgICAgICAgICAgICAgICAgICAgICAgIDAyLjM1JQ0KDQoNClByb2JhYmlsaWRhZCBkZSBxdWUgTHVj7WEgdGVuZ2EgbHV6IGVs6WN0cmljYSB5IHJlZCB0ZWxlZvNuaWNhOg0KYGBge3J9DQowLjM5NDI3OTkgKiAxMDANCmBgYA0KDQpQcm9iYWJpbGlkYWQgZGUgcXVlIFNvZu1hIHRlbmdhIGx1eiBlbOljdHJpY2EgeSByZWQgdGVsZWbzbmljYToNCmBgYHtyfQ0KMC4wODk0NDgyMiAqIDEwMA0KYGBgDQoNClByb2JhYmlsaWRhZCBkZSBxdWUgQW5hIHRlbmdhIGx1eiBlbOljdHJpY2EgeSByZWQgdGVsZWbzbmljYToNCmBgYHtyfQ0KMC4wMTc4OTYyICogMTAwDQpgYGANCkx1Y+1hIHRpZW5lIGxhIHByb2JhYmlsaWRhZCBt4XMgYWx0YSBkZSB0ZW5lciBsdXogZWzpY3RyaWNhIHkgcmVkIHRlbGVm825pY2EgZGFkbyBxdWUgdml2ZSBlbiBHdWF0ZW1hbGEgeSBsYXMgY29uZGljaW9uZXMgZGUgZXN0ZSB0aXBvIGRlIHNlcnZpY2lvcyBlcyBt4XMgYWNjZXNpYmxlLiBTb2btYSBxdWUgZXN04SBlbiBKdXRpYXBhIHRpZW5lIHVuIDglIGRlIHRlbmVyIGVzdG9zIGRvcyBzZXJ2aWNpb3MgeSBBbmEgdGllbmUgZWwgbWVub3IgcXVlIGVzIHVuIDIlIGRlbW9zdHJhbmRvIGFz7SBxdWUgbGFzIGNvbmRpY2lvbmVzIGRlIGx1eiB5IHRlbGVmb27tYSBwYXJhIGxhcyBtdWplcmVzIGVuIEFsdGEgVmVyYXBheiBlcyBtdXkgcG9jbyBhY2Nlc2libGUuIA0KDQoNCiMjIyA2Lgm/Q3XhbCBlcyBsYSBwcm9iYWJpbGlkYWQgcXVlIHNpZW5kbyBwb2JyZSBvIG5vIHBvYnJlIHB1ZWRhIGVzdHVkaWFyIGVuIGxhIHVuaXZlcnNpZGFkPw0KDQpUb21hbmRvIGxvcyBkYXRvcyBkZSBsYSB0YWJsYSBObzEgeSBsYSB0YWJsYSBleHRyYSBkZSBlZHVjYWNp8246DQoNClByb2JhYmlsaWRhZGVzIGRlIHF1ZSBsYXMgcGVyc29uYXMgc2llbmRvIHBvYnJlcyBwdWVkYW4gZXN0dWRpYXIgZW4gbGEgdW5pdmVyc2lkYWQgZW4gbG9zIGRlcGFydGFtZW50b3MgZGUgR3VhdGVtYWxhLCBBbHRhIFZlcmFwYXogeSBKdXRpYXBhIHJlc3BlY3RpdmFtZW50ZS4gDQpgYGB7cn0NCmxpYnJhcnkoZHBseXIpDQpsaWJyYXJ5KGdncGxvdDIpDQpsaWJyYXJ5KHRpZHl2ZXJzZSkNCmxpYnJhcnkoaGF2ZW4pDQoNCmVuY292aV9lZHUgPC0gcmVhZF9zYXYoIn4vRGF0YSBTY2llbmNlL3RyYWJham8gRU5DT1ZJL3BlcnNvbmFzLnNhdiIpDQpgYGANCmBgYHtyfQ0KZW5jb3ZpX2VkdTEgPC0gZW5jb3ZpX2VkdSAlPiUgc2VsZWN0KERFUFRPLCBBUkVBLCBQT0JSRVpBLCBQUEEwMiwgUDA2QjAxLCBQMDZCMDJBLCBQMDZCMjVBKQ0KY29sbmFtZXMoZW5jb3ZpX2VkdTEpPC0gYygiREVQVE8iLCAiQVJFQSIgLCJQT0JSRVpBIiwiU0VYTyIsICAiUDA2QjAxIiwiUDA2QjAyQSIsIk5pdmVsX2RlX2VkdWNhY2lvbiIpDQpgYGANCmBgYHtyfQ0KZW5jb3ZpX2VkdTEkU2FiZS5lc2NyaWJpci5sZWVyIDwtIGlmZWxzZShlbmNvdmlfZWR1MSRQMDZCMDEgPT0gMSwgVFJVRSwgRkFMU0UpDQplbmNvdmlfZWR1MSRTYWJlLmVzY3JpYmlyLmxlZXIuaWRpb21hLmluZGlnZW5hIDwtIGlmZWxzZShlbmNvdmlfZWR1MSRQMDZCMDJBID09IDEsIFRSVUUsIEZBTFNFKQ0KZW5jb3ZpX2VkdTEkTmluZ3VubyA8LSBpZmVsc2UoZW5jb3ZpX2VkdTEkTml2ZWxfZGVfZWR1Y2FjaW9uID09IDAsIFRSVUUsIEZBTFNFKQ0KZW5jb3ZpX2VkdTEkUHJlcHJpbWFyaWEgPC0gaWZlbHNlKGVuY292aV9lZHUxJE5pdmVsX2RlX2VkdWNhY2lvbiA9PSAxLCBUUlVFLCBGQUxTRSkNCmVuY292aV9lZHUxJFByaW1hcmlhIDwtIGlmZWxzZShlbmNvdmlfZWR1MSROaXZlbF9kZV9lZHVjYWNpb24gPT0gMiwgVFJVRSwgRkFMU0UpDQplbmNvdmlfZWR1MSRCYXNpY29zIDwtIGlmZWxzZShlbmNvdmlfZWR1MSROaXZlbF9kZV9lZHVjYWNpb249PSAzLCBUUlVFLCBGQUxTRSkNCmVuY292aV9lZHUxJERpdmVyc2lmaWNhZG8gPC0gaWZlbHNlKGVuY292aV9lZHUxJE5pdmVsX2RlX2VkdWNhY2lvbiA9PSA0LCBUUlVFLCBGQUxTRSkNCmVuY292aV9lZHUxJFVuaXZlcnNpdGFyaW8gPC0gaWZlbHNlKGVuY292aV9lZHUxJE5pdmVsX2RlX2VkdWNhY2lvbiA9PSA1LCBUUlVFLCBGQUxTRSkNCmVuY292aV9lZHUxJE1hZXN0cmlhIDwtIGlmZWxzZShlbmNvdmlfZWR1MSROaXZlbF9kZV9lZHVjYWNpb24gPT0gNiwgVFJVRSwgRkFMU0UpDQplbmNvdmlfZWR1MSREb2N0b3JhZG88LSBpZmVsc2UoZW5jb3ZpX2VkdTEkTml2ZWxfZGVfZWR1Y2FjaW9uID09IDcsIFRSVUUsIEZBTFNFKQ0KYGBgDQpgYGB7cn0NCmVuY292aV9lZHUxICU+JSBzdW1tYXJpc2UoU2FiZS5lc2NyaWJpci5sZWVyX3RvdGFsID0gc3VtKFNhYmUuZXNjcmliaXIubGVlciwgbmEucm0gPSBUUlVFKS9uKCksIFNhYmUuZXNjcmliaXIubGVlci5pZGlvbWEuaW5kaWdlbmFfdG90YWwgPSBzdW0oU2FiZS5lc2NyaWJpci5sZWVyLmlkaW9tYS5pbmRpZ2VuYSwgbmEucm0gPSBUUlVFKS9uKCksIE5pbmd1bm9fdG90YWwgPSBzdW0oTmluZ3VubywgbmEucm0gPSBUUlVFKS9uKCksIFByZXByaW1hcmlhX3RvdGFsID0gc3VtKFByZXByaW1hcmlhLCBuYS5ybSA9IFRSVUUpL24oKSwgUHJpbWFyaWFfdG90YWwgPSBzdW0oUHJpbWFyaWEsIG5hLnJtID0gVFJVRSkvbigpLCBCYXNpY29zX3RvdGFsID0gc3VtKEJhc2ljb3MsIG5hLnJtID0gVFJVRSkvbigpLCBEaXZlcnNpZmljYWRvX3RvdGFsID0gc3VtKERpdmVyc2lmaWNhZG8sIG5hLnJtID0gVFJVRSkvbigpLCBVbml2ZXJzaXRhcmlvX3RvdGFsID0gc3VtKFVuaXZlcnNpdGFyaW8sIG5hLnJtID0gVFJVRSkvbigpLCBNYWVzdHJpYV90b3RhbCA9IHN1bShNYWVzdHJpYSwgbmEucm0gPSBUUlVFKS9uKCksIERvY3RvcmFkb190b3RhbCA9IHN1bShEb2N0b3JhZG8sIG5hLnJtID0gVFJVRSkvbigpKQ0KYGBgDQpgYGB7cn0NCkRFUEFSVEFNRU5UTyA8LSBlbmNvdmlfZWR1MSU+JSBncm91cF9ieShhc19mYWN0b3IoREVQVE8pLCBhc19mYWN0b3IoU0VYTyksIGFzX2ZhY3RvcihBUkVBKSxhc19mYWN0b3IoUE9CUkVaQSkpICU+JSBzdW1tYXJpc2UoU2FiZS5lc2NyaWJpci5sZWVyX3RvdGFsID0gc3VtKFNhYmUuZXNjcmliaXIubGVlciwgbmEucm0gPSBUUlVFKS9uKCksIFNhYmUuZXNjcmliaXIubGVlci5pZGlvbWEuaW5kaWdlbmFfdG90YWwgPSBzdW0oU2FiZS5lc2NyaWJpci5sZWVyLmlkaW9tYS5pbmRpZ2VuYSwgbmEucm0gPSBUUlVFKS9uKCksIE5pbmd1bm9fdG90YWwgPSBzdW0oTmluZ3VubywgbmEucm0gPSBUUlVFKS9uKCksIFByZXByaW1hcmlhX3RvdGFsID0gc3VtKFByZXByaW1hcmlhLCBuYS5ybSA9IFRSVUUpL24oKSwgUHJpbWFyaWFfdG90YWwgPSBzdW0oUHJpbWFyaWEsIG5hLnJtID0gVFJVRSkvbigpLCBCYXNpY29zX3RvdGFsID0gc3VtKEJhc2ljb3MsIG5hLnJtID0gVFJVRSkvbigpLCBEaXZlcnNpZmljYWRvX3RvdGFsID0gc3VtKERpdmVyc2lmaWNhZG8sIG5hLnJtID0gVFJVRSkvbigpLCBVbml2ZXJzaXRhcmlvX3RvdGFsID0gc3VtKFVuaXZlcnNpdGFyaW8sIG5hLnJtID0gVFJVRSkvbigpLCBNYWVzdHJpYV90b3RhbCA9IHN1bShNYWVzdHJpYSwgbmEucm0gPSBUUlVFKS9uKCksIERvY3RvcmFkb190b3RhbCA9IHN1bShEb2N0b3JhZG8sIG5hLnJtID0gVFJVRSkvbigpKQ0KDQoNCmNvbG5hbWVzKERFUEFSVEFNRU5UTyk8LSBjKCJEZXBhcnRhbWVudG8iLCAiU2V4byIsIkFyZWEiLCJQb2JyZXphIiwgIlNhYmUgbGVlciB5IGVzY3JpYmlyIiwgIlNhYmUgbGVlciB5IGVzY3JpYmlyIGVuIHVuIGlkaW9tYSBpbmRpZ2VuYSIsIk5vIGhhIGFwcm9iYWRvIG5pbmd1biBuaXZlbCIsICJBcHJvYmFkbyBuaXZlbCBQcmVwcmltYXJpbyIsICJBcHJvYmFkbyBuaXZlbCBQcmltYXJpbyIsICJBcHJvYmFkbyBuaXZlbCBCYXNpY28iLCAiQXByb2JhZG8gbml2ZWwgRGl2ZXJzaWZpY2FkbyIsICJBcHJvYmFkbyBuaXZlbCBVbml2ZXJzaXRhcmlvIiwgIkFwcm9iYWRvIG5pdmVsIE1hZXN0cmlhIiwgIkFwcm92YWRvIG5pdmVsIERvY3RvcmFkbyAiKQ0KYGBgDQoNClNlZ/puIGxvcyBkYXRvcyBkZSBlc3ThIHRhYmxhIHRlbmVtb3MgbGFzIHNpZ3VpZW50ZXMgcHJvYmFiaWxpZGFkZXM6IA0KRGUgcXXpIEx1Y+1hIGRlIEd1YXRlbWFsYSBzaWVuZG8gcG9icmUgbyBubyBwb2JyZSBwdWVkYSBlc3R1ZGlhciBsYSB1bml2ZXJzaWRhZDoNCmBgYHtyfQ0KKDAuMDA2MjYzMDQ4ICsgMC4wOTYwOTgyNjYpKjEwMA0KYGBgDQoNCkRlIHF16SBBbmEgZGUgQWx0YSBWZXJhcGF6IHNpZW5kbyBwb2JyZSBvIG5vIHBvYnJlIHB1ZWRhIGVzdHVkaWFyIGxhIHVuaXZlcnNpZGFkOg0KYGBge3J9DQooMC4wMjI3MjcyNzMgKyAwLjE0MTQxNDE0MSkqMTAwDQpgYGANCkRlIHF16SBTb2btYSBkZSBKdXRpYXBhIHNpZW5kbyBwb2JyZSBvIG5vIHBvYnJlIHB1ZWRhIGVzdHVkaWFyIGxhIHVuaXZlcnNpZGFkOg0KYGBge3J9DQo2LjYzNTA3MTEgKyAxLjM1MTM1MTQNCmBgYA0KUG9kZW1vcyBvYnNlcnZhciBxdWUgbGEgcHJvYmFiaWxpZGFkIGRlIHF1ZSBMdWPtYSBkZSBHdWF0ZW1hbGEgZW50cmUgYSBsYSB1bml2ZXJzaWRhZCBlcyBkZSAxMC4yJSBkYWRvIHF1ZSBsb3MgaG9tYnJlcyBwcmVkb21pbmFuIGVuIGhhYmVyIGFwcm9iYWRvIGxhIHVuaXZlcnNpZGFkLiBBbHRhIFZlcmFwYXogbXVlc3RyYSB1biBu+m1lcm8gYWx0byBkZSB1biAxNiUgZGUgcHJvYmFiaWxpZGFkIGRhZG8gcXVlIGFxde0gbGFzIG11amVyZXMgc29uIGxhcyBxdWUgbeFzIG9wb3J0dW5pZGFkZXMgZGUgZXN0dWRpbyBwb3NlZW4geWEgcXVlIGxvcyBob21icmVzIHRyYWJhamFuIHkgU29m7WEgZGUgSnV0aWFwYSBtdWVzdHJhIHVuIO1uZGljZSBiYWpvIGNvbiB1biA3LjklIGRlIHByb2JhYmlsaWRhZCBxdWUgYXBydWViZSBsYSB1bml2ZXJzaWRhZC4gDQoNCiMjIyA3Lgm/Q3XhbCBlcyBsYSBwcm9iYWJpbGlkYWQgcXVlIHNlYW4gaW5k7WdlbmFzIHkgaGFibGVuIHVuIGlkaW9tYSBpbmTtZ2VuYT8NCmBgYHtyfQ0KbGlicmFyeShkcGx5cikNCmxpYnJhcnkoZ2dwbG90MikNCmxpYnJhcnkodGlkeXZlcnNlKQ0KbGlicmFyeShoYXZlbikNCg0KZW5jb3ZpX2VkdSA8LSByZWFkX3Nhdigifi9EYXRhIFNjaWVuY2UvdHJhYmFqbyBFTkNPVkkvcGVyc29uYXMuc2F2IikNCmBgYA0KYGBge3J9DQplbmNvdmlfZWR1MiA8LSBlbmNvdmlfZWR1ICU+JSBzZWxlY3QoREVQVE8sIEFSRUEsIFBPQlJFWkEsIFBQQTAyLCBQMDZCMDJBLCBQMDRBMTFBKQ0KY29sbmFtZXMoZW5jb3ZpX2VkdTIpPC0gYygiREVQVE8iLCAiQVJFQSIgLCJQT0JSRVpBIiwiU0VYTyIsIlAwNkIwMkEiLCAiRXRuaWEiKQ0KYGBgDQpgYGB7cn0NCmVuY292aV9lZHUyJFNhYmVlc2NyaWJpcmxlZXJpZGlvbWFpbmRpZ2VuYSA8LSBpZmVsc2UoZW5jb3ZpX2VkdTIkUDA2QjAyQSA9PTEsIFRSVUUsIEZBTFNFKQ0KZW5jb3ZpX2VkdTIkRXRuaWExIDwtIGlmZWxzZShlbmNvdmlfZWR1MiRFdG5pYSA9PSAyOSwgRkFMU0UsIFRSVUUpJiBpZmVsc2UoZW5jb3ZpX2VkdTIkRXRuaWEgPT0gOTksIEZBTFNFLCBUUlVFKSAmIGlmZWxzZShlbmNvdmlfZWR1MiRFdG5pYSA9PSAyMywgRkFMU0UsIFRSVUUpICAmIGlmZWxzZShlbmNvdmlfZWR1MiRFdG5pYSA9PSA5NywgRkFMU0UsIFRSVUUpICYgaWZlbHNlKGVuY292aV9lZHUyJEV0bmlhID09IDMwLCBGQUxTRSwgVFJVRSkgJiBpZmVsc2UoZW5jb3ZpX2VkdTIkRXRuaWEgPT0gMjQsIEZBTFNFLCBUUlVFKQ0KDQpgYGANCmBgYHtyfQ0KZW5jb3ZpX2VkdTIgJT4lIHN1bW1hcmlzZShTYWJlZXNjcmliaXJsZWVyaWRpb21haW5kaWdlbmFfdG90YWwgPSBzdW0oU2FiZWVzY3JpYmlybGVlcmlkaW9tYWluZGlnZW5hLCBuYS5ybSA9IFRSVUUpL24oKSwgRXRuaWExX3RvdGFsID0gc3VtKEV0bmlhMSwgbmEucm0gPSBUUlVFKS9uKCkpDQoNCkRFUEFSVEFNRU5UTzEgPC0gZW5jb3ZpX2VkdTIlPiUgZ3JvdXBfYnkoYXNfZmFjdG9yKERFUFRPKSwgYXNfZmFjdG9yKFNFWE8pLCBhc19mYWN0b3IoQVJFQSkpICU+JSBzdW1tYXJpc2UoU2FiZWVzY3JpYmlybGVlcmlkaW9tYWluZGlnZW5hX3RvdGFsID0gc3VtKFNhYmVlc2NyaWJpcmxlZXJpZGlvbWFpbmRpZ2VuYSwgbmEucm0gPSBUUlVFKS9uKCksIEV0bmlhMV90b3RhbCA9IHN1bShFdG5pYTEsIG5hLnJtID0gVFJVRSkvbigpKQ0KDQoNCmNvbG5hbWVzKERFUEFSVEFNRU5UTzEpPC0gYygiRGVwYXJ0YW1lbnRvIiwgIlNleG8iLCJBcmVhIiwiU2FiZSBsZWVyIHkgZXNjcmliaXIgZW4gdW4gaWRpb21hIGluZGlnZW5hIiwgIkV0bmlhIikNCmBgYA0KDQpTZWd1biBsb3MgZGF0b3MgZGUgbGEgdGFibGEgb2J0ZW5lbW9zIGxhcyBzaWd1aWVudGVzIHByb2JhYmlsaWRhZGVzOg0KUXXpIEx1Y+1hIGRlIEd1YXRlbWFsYSBzZWEgaW5k7WdlbmEgeSBzZXBhIGhhYmxhciB5IGVzY3JpYmlyIHVuIGlkaW9tYSBpbmTtZ2VuYToNCmBgYHtyfQ0KMC4wMTE3NTI2ODMgKiAJMC4xMDExNzUyNjggKjEwMA0KYGBgDQoNClF16SBBbmEgZGUgQWx0YSBWZXJhcGF6IHNlYSBpbmTtZ2VuYSB5IHNlcGEgaGFibGFyIHkgZXNjcmliaXIgdW4gaWRpb21hIGluZO1nZW5hOg0KYGBge3J9DQooMC4wNzk2ODEyNzUgKiAwLjgwMDc5NjgxMyApKjEwMA0KYGBgDQpRdekgU29m7WEgZGUgSnV0aWFwYSBzZWEgaW5k7WdlbmEgeSBzZXBhIGhhYmxhciB5IGVzY3JpYmlyIHVuIGlkaW9tYSBpbmTtZ2VuYToNCmBgYHtyfQ0KMC4wMDIzOTgwODIgKiAwLjAwMDAwMDAwMCAqMTAwDQpgYGANCkNvbiBlc3RvIHF1ZWRhIGRlbW9zdHJhZG8gcXVlIGF1bnF1ZSBzZWFuIHVuIG76bWVybyBncmFuZGUgZGUgcGVyc29uYXMgZGUgb3JpZ2VuIGluZO1nZW5hIGNvbW8gQWx0YSBWZXJhcGF6IGVsIGhlY2hvIGRlIHNhYmVyIHkgZXNjcmliaXIgc3UgaWRpb21hIGVzIHN1bWFtZW50ZSBiYWpvLCBwZXJvIEFuYSBkZSBBbHRhIFZlcmFwYXogbXVlc3RyYSBsYSBwcm9iYWJpbGlkYWQgbeFzIGFsdGEgZGUgZXN0b3MgdHJlcyBkZXBhcnRhbWVudG9zIHNvbiA2LjM4JSBzZWd1aWRvIGRlIEx1Y+1hIGVuIEd1YXRlbWFsYSBjb24gdW4gMC4xMSUgeSBwb3Ig+mx0aW1vIFNvZu1hIGRlIEp1dGlhcGEgcXVlIGxhIHByb2JhYmlsaWRhZCBsbGVnYSBhIHVuIDAlIGRvbmRlIGxhIGN1bHR1cmEgaW5k7WdlbmEgZXMgY2FzaSBudWxhLg0KDQojIyMgOC4gv0N14WwgZXMgbGEgcHJvYmFiaWxpZGFkIGRlIHF1ZSB0ZW5nYW4gbWVub3MgZGUgMjAgYfFvcyBvIG3hcyBkZSA2MCBh8W9zPw0KYGBge3J9DQojVG9tYWRvIGRlbCB0cmFiYWpvIGhlY2hvIGVuIGVsIHRhYiAxDQpsaWJyYXJ5KGhhdmVuKQ0KbGlicmFyeShkcGx5cikNCmxpYnJhcnkodGlkeXIpDQoNClBvYmxhY2lvbiA8LSByZWFkX3Nhdigifi9EYXRhIFNjaWVuY2UvdHJhYmFqbyBFTkNPVklJL3BlcnNvbmFzLnNhdiIpDQoNClBvYmxhY2lvbiAgPC0gc2VsZWN0KFBvYmxhY2lvbiwgREVQVE8sIEFSRUEsIFBPQlJFWkEsIFBQQTAyLCBQUEEwMywgUDA0QTExQSkNCm5hbWVzKFBvYmxhY2lvbikgPC0gYygiRGVwYXJ0YW1lbnRvIiwgIkFyZWEiLCAiUG9icmV6YSIsICJTZXhvIiwgIkVkYWQiLCAiRXRuaWEiKQ0KUG9ibGFjaW9uIDwtUG9ibGFjaW9uW2NvbXBsZXRlLmNhc2VzKFBvYmxhY2lvbiksXQ0KDQpQb2JsYWNpb24kRGVwYXJ0YW1lbnRvIDwtIGFzLmZhY3RvcihQb2JsYWNpb24kRGVwYXJ0YW1lbnRvKQ0KUG9ibGFjaW9uJEFyZWEgIDwtIGFzLmZhY3RvcihQb2JsYWNpb24kQXJlYSkNClBvYmxhY2lvbiRQb2JyZXphICA8LSBhcy5mYWN0b3IoUG9ibGFjaW9uJFBvYnJlemEpDQoNCmxldmVscyhQb2JsYWNpb24kRGVwYXJ0YW1lbnRvKTwtIGMoIkd1YXRlbWFsYSIsICJFbCBQcm9ncmVzbyIsICJTYWNhdGVwZXF1ZXoiLCAiQ2hpbWFsdGVuYW5nbyIsICJFc2N1aW50bGEiLCAiU2FudGEgUm9zYSIsICJTb2xvbGEiLCAiVG90b25pY2FwYW4iLCAiUXVldHphbHRlbmFuZ28iLCAiU3VjaGl0ZXBlcXVleiIsICJSZXRhbGh1bGV1IiwgIlNhbiBNYXJjb3MiLCAiSHVlaHVldGVuYW5nbyIsICJRdWljaGUiLCAiQmFqYSBWZXJhcGF6IiwgIkFsdGEgVmVyYXBheiIsICJQZXRlbiIsICJJemFiYWwiLCAiWmFjYXBhIiwgIkNoaXF1aW11bGEiLCAiSmFsYXBhIiwgIkp1dGlhcGEiKQ0KbGV2ZWxzKFBvYmxhY2lvbiRBcmVhKTwtIGMoIlVyYmFuYSIsICJSdXJhbCIpDQpsZXZlbHMoUG9ibGFjaW9uJFBvYnJlemEpIDwtIGMgKCJQb2JyZSBleHRyZW1vIiwgIlBvYnJlIG5vIGV4dHJlbW8iLCAiTm8gcG9icmUiKQ0KDQpQb2JsYWNpb24kU2V4byA8LSBhcy5jaGFyYWN0ZXIoUG9ibGFjaW9uJFNleG8pDQpQb2JsYWNpb24kU2V4b1tQb2JsYWNpb24kU2V4byA9PSAxXSA8LSAiSG9tYnJlIg0KUG9ibGFjaW9uJFNleG9bUG9ibGFjaW9uJFNleG8gPT0gMl0gPC0gIk11amVyIg0KDQojU2UgRmlsdHJvIGVsIERhdGEgc2V0IA0KUG9ibGFjaW9uIDwtIGZpbHRlcihQb2JsYWNpb24sIFNleG89PSJNdWplciIsIEFyZWE9PSJVcmJhbmEiKQ0KDQojU2Ugc2Fj8yBsYSBwcm9iYWJpbGlkYWQgZGUgcXVlIHRlbmdhbiBtZW5vcyBkZSAyMCBvIG3hcyBkZSA2MA0KZWRhZDEgPC0gcG5vcm0oMjAsIG1lYW4oUG9ibGFjaW9uJEVkYWQpLCBzZChQb2JsYWNpb24kRWRhZCkpDQplZGFkMiA8LSAxIC0gcG5vcm0oNjAsIG1lYW4oUG9ibGFjaW9uJEVkYWQpLCBzZChQb2JsYWNpb24kRWRhZCkpDQplZGFkMSArIGVkYWQyDQpgYGANCkxhIHByb2JhYmlsaWRhZCBkZSBxdWUgc3VjZWRhIGVzIGRlIHVuIDQwJQ0KDQojIyMgOS4gv0N14WwgZXMgYSBwcm9iYWJpbGlkYWQgZGUgcXVlIHRlbmdhbiBhbCBtZW5vcyAxMiBh8W9zIGRlIGVzY29sYXJpZGFkIHNpIHRpZW5lbiAyMCBh8W9zPyAoMTIgYfFvcyBkZSBlc2NvbGFyaWRhZCBlcyBt4XMgbyBtZW5vcyBoYWJlciBjb21wbGV0YWRvIGVsIGNvbGVnaW8pDQpgYGB7cn0NCiNUb21hZG8gZGUgbG8gdHJhYmFqYWRvIGVuIGVsIHRhYiAyDQpFZHVjYWNpb24gPC0gcmVhZF9zYXYoIn4vRGF0YSBTY2llbmNlL3RyYWJham8gRU5DT1ZJL3BlcnNvbmFzLnNhdiIpDQoNCkVkdWNhY2lvbiAgPC0gc2VsZWN0KEVkdWNhY2lvbiwgREVQVE8sIEFSRUEsIFBPQlJFWkEsIFBQQTAzLCBQMDZCMDEsIFAwNkIyNUEsIFAwNkIyNUIpDQpuYW1lcyhFZHVjYWNpb24pIDwtIGMoIkRlcGFydGFtZW50byIsICJBcmVhIiwgIlBvYnJlemEiLCAiRWRhZCIsICJMZWVyRXNjcmliaXIiLCAiTml2ZWwiLCAiR3JhZG8iKQ0KRWR1Y2FjaW9uIDwtRWR1Y2FjaW9uW2NvbXBsZXRlLmNhc2VzKEVkdWNhY2lvbiksXQ0KDQpFZHVjYWNpb24kRGVwYXJ0YW1lbnRvIDwtIGFzLmZhY3RvcihFZHVjYWNpb24kRGVwYXJ0YW1lbnRvKQ0KRWR1Y2FjaW9uJEFyZWEgIDwtIGFzLmZhY3RvcihFZHVjYWNpb24kQXJlYSkNCkVkdWNhY2lvbiRQb2JyZXphICA8LSBhcy5mYWN0b3IoRWR1Y2FjaW9uJFBvYnJlemEpDQoNCmxldmVscyhFZHVjYWNpb24kRGVwYXJ0YW1lbnRvKTwtIGMoIkd1YXRlbWFsYSIsICJFbCBQcm9ncmVzbyIsICJTYWNhdGVwZXF1ZXoiLCAiQ2hpbWFsdGVuYW5nbyIsICJFc2N1aW50bGEiLCAiU2FudGEgUm9zYSIsICJTb2xvbGEiLCAiVG90b25pY2FwYW4iLCAiUXVldHphbHRlbmFuZ28iLCAiU3VjaGl0ZXBlcXVleiIsICJSZXRhbGh1bGV1IiwgIlNhbiBNYXJjb3MiLCAiSHVlaHVldGVuYW5nbyIsICJRdWljaGUiLCAiQmFqYSBWZXJhcGF6IiwgIkFsdGEgVmVyYXBheiIsICJQZXRlbiIsICJJemFiYWwiLCAiWmFjYXBhIiwgIkNoaXF1aW11bGEiLCAiSmFsYXBhIiwgIkp1dGlhcGEiKQ0KbGV2ZWxzKEVkdWNhY2lvbiRBcmVhKTwtIGMoIlVyYmFuYSIsICJSdXJhbCIpDQpsZXZlbHMoRWR1Y2FjaW9uJFBvYnJlemEpIDwtIGMgKCJQb2JyZSBleHRyZW1vIiwgIlBvYnJlIG5vIGV4dHJlbW8iLCAiTm8gcG9icmUiKQ0KDQpFZHVjYWNpb24gPC0gRWR1Y2FjaW9uICU+JQ0KICBtdXRhdGUoQW5pb3NFc2NvbGFyaWRhZCA9IGlmZWxzZShOaXZlbD09MSwxLGlmZWxzZShOaXZlbD09MiwgMStHcmFkbywgaWZlbHNlKE5pdmVsPT0zIHwgTml2ZWw9PTQsIDcrR3JhZG8sIGlmZWxzZShOaXZlbD09NSwgMTIrR3JhZG8sIGlmZWxzZShOaXZlbD09NiwgMTcrR3JhZG8sIGlmZWxzZShOaXZlbD09NywxOStHcmFkbywwKSkpKSkpKSAlPiUNCiAgbXV0YXRlKEFsZmFiZXRpc21vID0gaWZlbHNlKExlZXJFc2NyaWJpcj09MSwxLDApKSAlPiUNCiAgc2VsZWN0KERlcGFydGFtZW50bywgQXJlYSwgUG9icmV6YSwgRWRhZCwgQW5pb3NFc2NvbGFyaWRhZCwgQWxmYWJldGlzbW8pDQoNCiNTZSBmaWx0cmFyb24gbG9zIGRhdG9zIGRlIGFjdWVybyBhIGxhcyBjb25kaWNpb25lcw0KRWR1Y2FjaW9uR3VhdGVtYWxhIDwtIGZpbHRlcihFZHVjYWNpb24sIEVkYWQ9PSIyMCIsIERlcGFydGFtZW50bz09Ikd1YXRlbWFsYSIsIEFyZWE9PSJVcmJhbmEiKQ0KRWR1Y2FjaW9uQWx0YVZlcmFwYXogPC0gZmlsdGVyKEVkdWNhY2lvbiwgRWRhZD09IjIwIiwgRGVwYXJ0YW1lbnRvPT0iQWx0YSBWZXJhcGF6IiwgQXJlYT09IlVyYmFuYSIpDQpFZHVjYWNpb25KdXRpYXBhIDwtIGZpbHRlcihFZHVjYWNpb24sIEVkYWQ9PSIyMCIsIERlcGFydGFtZW50bz09Ikp1dGlhcGEiLCBBcmVhPT0iVXJiYW5hIikNCg0KI1Byb2JhYmlsaWRhZGVzIA0KI1NlIG11bHRpcGxpY2EgcG9yIGxhIHByb2JhYmlsaWRhZCBxdWUgc2VhbiBtdWplcmVzIHNlZ/puIHN1IGRlcGFydGFtZW50byAoZGVsIHRhYiAxKQ0KUHJvYkd1YXRlbWFsYSA8LSAoMSAtIHBub3JtKDEyLCBtZWFuKEVkdWNhY2lvbkd1YXRlbWFsYSRBbmlvc0VzY29sYXJpZGFkKSwgc2QoRWR1Y2FjaW9uR3VhdGVtYWxhJEFuaW9zRXNjb2xhcmlkYWQpKSkgKiAwLjUyMjcNClByb2JHdWF0ZW1hbGENClByb2JBbHRhVmVyYXBheiA8LSAoMSAtcG5vcm0oMTIsIG1lYW4oRWR1Y2FjaW9uQWx0YVZlcmFwYXokQW5pb3NFc2NvbGFyaWRhZCksIHNkKEVkdWNhY2lvbkFsdGFWZXJhcGF6JEFuaW9zRXNjb2xhcmlkYWQpKSkgKiAwLjUwNTENClByb2JBbHRhVmVyYXBheg0KUHJvYkp1dGlhcGEgPC0gKDEgLSBwbm9ybSgxMiwgbWVhbihFZHVjYWNpb25KdXRpYXBhJEFuaW9zRXNjb2xhcmlkYWQpLCBzZChFZHVjYWNpb25KdXRpYXBhJEFuaW9zRXNjb2xhcmlkYWQpKSkgKiAwLjUwNTkNClByb2JKdXRpYXBhDQpgYGANCkxhIHByb2JhYmlsaWRhZCBkZSBxdWUgTHVj7WEgaGF5YSBjb21wbGV0YWRvIGVsIGNvbGVnaW8gZXMgZGUgMTUlLCBkZSBBbmEgZXMgZGUgMTIlIHkgZGUgU29m7WEgZXMgZGUgMTIlLiBEYWRvIHF1ZSBzZSBhc3VtafMgcXVlIGxhcyB0cmVzIHBlcnNvbmFzIHZpdmVuIGVuIGVsIOFyZWEgdXJiYW5hLCBsYXMgcHJvYmFiaWxpZGFkZXMgcXVlZGFyb24gbXV5IHBhcmVjaWRhcy4NCg0KDQojIyMgMTAuIL9DdeFsIGVzIGxhIHByb2JhYmlsaWRhZCBkZSBxdWUgdGVuZ2FuIGFjY2VzbyBhIGFndWEgeSBlbmVyZ+1hIGVs6WN0cmljYT8NCmBgYHtyfQ0KI1RvbWFkbyBkZWwgdGFiIDQNCnZpdmllbmRhIDwtIHJlYWRfc2F2KCJ+L0RhdGEgU2NpZW5jZS90cmFiYWpvIEVOQ09WSS9ob2dhcmVzLnNhdiIpDQp2aXZpZW5kYSA8LSBzZWxlY3Qodml2aWVuZGEsIERFUFRPLCBBUkVBLCBQT0JSRVpBLCBQMDFBMDVBLCBQMDFBMDVDKQ0KbmFtZXModml2aWVuZGEpIDwtIGMoIkRlcGFydGFtZW50byIsICJBcmVhIiwgIlBvYnJlemEiLCAiQWd1YSIsICJFbmVyZ2lhLmVsZWN0cmljYSIpDQoNCnZpdmllbmRhJERlcGFydGFtZW50byA8LSBhcy5mYWN0b3Iodml2aWVuZGEkRGVwYXJ0YW1lbnRvKQ0Kdml2aWVuZGEkQXJlYSAgPC0gYXMuZmFjdG9yKHZpdmllbmRhJEFyZWEpDQp2aXZpZW5kYSRQb2JyZXphICA8LSBhcy5mYWN0b3Iodml2aWVuZGEkUG9icmV6YSkNCg0KbGV2ZWxzKHZpdmllbmRhJERlcGFydGFtZW50byk8LSBjKCJHdWF0ZW1hbGEiLCAiRWwgUHJvZ3Jlc28iLCAiU2FjYXRlcGVxdWV6IiwgIkNoaW1hbHRlbmFuZ28iLCAiRXNjdWludGxhIiwgIlNhbnRhIFJvc2EiLCAiU29sb2xhIiwgIlRvdG9uaWNhcGFuIiwgIlF1ZXR6YWx0ZW5hbmdvIiwgIlN1Y2hpdGVwZXF1ZXoiLCAiUmV0YWxodWxldSIsICJTYW4gTWFyY29zIiwgIkh1ZWh1ZXRlbmFuZ28iLCAiUXVpY2hlIiwgIkJhamEgVmVyYXBheiIsICJBbHRhIFZlcmFwYXoiLCAiUGV0ZW4iLCAiSXphYmFsIiwgIlphY2FwYSIsICJDaGlxdWltdWxhIiwgIkphbGFwYSIsICJKdXRpYXBhIikNCmxldmVscyh2aXZpZW5kYSRBcmVhKTwtIGMoIlVyYmFuYSIsICJSdXJhbCIpDQpsZXZlbHModml2aWVuZGEkUG9icmV6YSkgPC0gYyAoIlBvYnJlIGV4dHJlbW8iLCAiUG9icmUgbm8gZXh0cmVtbyIsICJObyBwb2JyZSIpDQoNCnZpdmllbmRhJEFndWEgPC0gYXMubnVtZXJpYyh2aXZpZW5kYSRBZ3VhKQ0Kdml2aWVuZGEkQWd1YVt2aXZpZW5kYSRBZ3VhID09IDJdIDwtIDANCnZpdmllbmRhJEVuZXJnaWEuZWxlY3RyaWNhICA8LSBhcy5udW1lcmljKHZpdmllbmRhJEVuZXJnaWEuZWxlY3RyaWNhKQ0Kdml2aWVuZGEkRW5lcmdpYS5lbGVjdHJpY2Fbdml2aWVuZGEkRW5lcmdpYS5lbGVjdHJpY2E9PTJdIDwtMA0KDQp2aXZpZW5kYSA8LSBmaWx0ZXIodml2aWVuZGEsIEFyZWE9PSJVcmJhbmEiLCBEZXBhcnRhbWVudG89PSJHdWF0ZW1hbGEifCBEZXBhcnRhbWVudG89PSJKdXRpYXBhInwgRGVwYXJ0YW1lbnRvPT0iQWx0YSBWZXJhcGF6IikNCg0KcmVkZXMgPC0gdml2aWVuZGEgJT4lDQogIGdyb3VwX2J5KERlcGFydGFtZW50bykgJT4lDQogIHN1bW1hcmlzZShBZ3VhPSBzdW0oQWd1YSkvbigpKjEwMCwgRW5lcmdpYV9lbGVjdHJpY2EgPSBzdW0oRW5lcmdpYS5lbGVjdHJpY2EpL24oKSoxMDApDQpyZWRlcw0KDQojcHJvYmFiaWxpZGFkZXMNClByb2JBZ3VhIDwtIDAuOTQ0NCowLjg4NjQqMC45MDI2DQpQcm9iRW5lcmdpYSA8LSAwLjkzNzgqMC43Mzg2KjAuOTM4NQ0KUHJvYlJlZCA8LSBQcm9iQWd1YSArIFByb2JFbmVyZ2lhIC0gKFByb2JBZ3VhKlByb2JFbmVyZ2lhKQ0KUHJvYlJlZA0KDQpgYGANCkxhIHByb2JhYmlsaWRhZCBkZSBxdWUgbGFzIGNhc2FzIGRlIEFuYSwgTHVj7WEgeSBTb2btYSBlc3TpbiBjb25lY3RhZGFzIGEgYWd1YSBvIGVuZXJn7WEgZWzpY3RyaWNhIGVzIGRlIDkxJS4gRXMgbXV5IHByb2JhYmxlIHlhIHF1ZSBzb24gY2FzYXMgZGVsIOFyZWEgdXJiYW5hLiANCg0KQXF17SBzZSBwcmVzZW508yB1biBhbuFsaXNpcyB5IHZpc3VhbGl6YWNp824gZGUgZGF0b3MgZGUgbGEgcG9ibGFjafNuIGZlbWVuaW5hIGVuIHRyZXMgZGVwYXJ0YW1lbnRvcyBtb3N0cmFuZG8gc3VzIGNvbmRpY2lvbmVzIGRlIHZpZGEsIHN1cyBwcm95ZWNjaW9uZXMgZGUgZnV0dXJvIGVuIGVkdWNhY2nzbiwgc3VzIHZpdmllbmRhcywgbG9zIHNlcnZpY2lvcyBxdWUgc3VzIGNhc2FzIHJlcXVpZXJlbiwgbG9zIGFsaW1lbnRvcyB5IHBhcnRlIGRlIHN1IGlkZW50aWRhZC4NCg==