Para esta parte tomar como referencia el libro “An Introduction
to Statistics and Data Analysis Using Stata” de Daniels y
Minot.
Capítulo 4: Ejercicio 1
A veinticinco estudiantes universitarios se les hicieron cuatro
preguntas sobre sus hábitos de ver televisión y películas:
- ¿Qué servicio de televisión usa con más frecuencia para ver
programas de televisión y películas?
table(tablita$TV_Source)
AmazonPrime Cable HuluPlus iTunes Netflix
3 2 3 9 8
iTunes es el servicio más utilizado.
- ¿Cuántas horas a la semana dedica a ver televisión o películas?
table(tablita$Hours_per_Week)
2 5 7 8 10 12 13 14 15 17 18 19 20 21 22 23 24 30
1 1 1 2 3 2 1 3 1 1 2 1 1 1 1 1 1 1
sum(tablita$Hours_per_Week)
[1] 366
Los encuestados dedicaron un total de 366 horas a ver TV en una
semana.
hist(tablita$Hours_per_Week, xlab="Horas por semana", main = "Distribución de horas dedicadas a ver TV")

- ¿Con qué frecuencia ve televisión en exceso (viendo más de tres
episodios seguidos del mismo programa)? Podían elegir entre (a) nada,
(b) a veces, de una a tres veces por semana, y (c) con frecuencia, más
de tres veces por semana.
table(tablita$Binge_Frequency)
Frequently Not_at_all Sometimes
11 2 12
- Ingrese los datos para cada una de las cuatro variables. Para las
tres variables categóricas, cree un código numérico para cada respuesta.
Por ejemplo, para TV Source, 1 = Amazon Prime, 2 = Cable, 3 = Hulu Plus,
4 = iTunes y 5 = Netflix.
tablita$TV_Source[tablita$TV_Source=="AmazonPrime"] <- 1
tablita$TV_Source[tablita$TV_Source=="Cable"] <- 2
tablita$TV_Source[tablita$TV_Source=="HuluPlus"] <- 3
tablita$TV_Source[tablita$TV_Source=="iTunes"] <- 4
tablita$TV_Source[tablita$TV_Source=="Netflix"] <- 5
knitr::kable(tablita)
| 1 |
3 |
14 |
Not_at_all |
Male |
| 2 |
1 |
18 |
Sometimes |
Female |
| 3 |
3 |
20 |
Frequently |
Female |
| 4 |
5 |
5 |
Frequently |
Male |
| 5 |
5 |
12 |
Frequently |
Male |
| 6 |
4 |
10 |
Not_at_all |
Female |
| 7 |
4 |
8 |
Frequently |
Female |
| 8 |
4 |
7 |
Sometimes |
Male |
| 9 |
2 |
24 |
Frequently |
Male |
| 10 |
3 |
30 |
Sometimes |
Female |
| 11 |
5 |
10 |
Sometimes |
Male |
| 12 |
5 |
15 |
Frequently |
Female |
| 13 |
4 |
12 |
Sometimes |
Male |
| 14 |
4 |
14 |
Sometimes |
Female |
| 15 |
1 |
2 |
Sometimes |
Female |
| 16 |
5 |
8 |
Frequently |
Male |
| 17 |
4 |
10 |
Frequently |
Male |
| 18 |
2 |
19 |
Sometimes |
Female |
| 19 |
5 |
18 |
Sometimes |
Female |
| 20 |
4 |
21 |
Frequently |
Male |
| 21 |
4 |
22 |
Sometimes |
Male |
| 22 |
4 |
23 |
Frequently |
Female |
| 23 |
5 |
17 |
Frequently |
Female |
| 24 |
5 |
14 |
Sometimes |
Male |
| 25 |
1 |
13 |
Sometimes |
Female |
NA
- ¿Qué porcentaje de la muestra se identifica como hombre y
mujer?
prop.table(table(tablita$Gender))*100
Female Male
52 48
52% hombres y 48% mujeres.
- ¿Qué tipo de servicio de TV se usa con más frecuencia?
table(tablita$TV_Source)
1 2 3 4 5
3 2 3 9 8
iTunes (4) con una frecuencia de 9 estudiantes.
- Qué porcentaje de estudiantes se dan un atracón de televisión con
frecuencia?
prop.table(table(tablita$Binge_Frequency))*100
Frequently Not_at_all Sometimes
44 8 48
44% de los estudiantes ven TV con frecuencia.
Capítulo 5: Ejercicio 2
Use el conjunto de datos GSS2016 para completar los siguientes
ejercicios que generan una variable categórica a partir de una variable
continua.
- Genere una tabla de cuántos hijos tiene un encuestado
(childs).
table(GSS2016$childs)
0 1 2 3 4 5 6 7 8
797 459 733 467 213 92 51 25 22
- Genere una nueva variable que sea igual a 1 si el encuestado tiene
hijos y 2 si el encuestado no tiene hijos.
GSS2016$Hijos[GSS2016$childs == 0] <- 2
GSS2016$Hijos[GSS2016$childs >= 1] <- 1
head(GSS2016$Hijos, 10)
[1] "1" "2" "1" "1" "1" "1" "1" "1" "1" "1"
- Cree una etiqueta de variable “Respondent has children” y aplíquela
a su nueva variable.
GSS2016$Hijos2 <- ifelse(GSS2016$Hijos == 1, "Respondent has children", "Not")
head(GSS2016$Hijos2, 10)
[1] "Respondent has children" "Not" "Respondent has children"
[4] "Respondent has children" "Respondent has children" "Respondent has children"
[7] "Respondent has children" "Respondent has children" "Respondent has children"
[10] "Respondent has children"
- Cree etiquetas de valor para que 1 sea “Yes” y 2 sea “No”.
GSS2016$Hijos[GSS2016$Hijos == 1] <- "Yes"
GSS2016$Hijos[GSS2016$Hijos == 2] <- "No"
head(GSS2016$Hijos, 10)
[1] "Yes" "No" "Yes" "Yes" "Yes" "Yes" "Yes" "Yes" "Yes" "Yes"
- Genere una tabla de su nueva variable.
table(GSS2016$Hijos)
No Yes
797 2062
- (Cap. 5 - ejercicio 3)
- Utilice el comando egen para generar una variable que sea el valor
mediano del ingreso real (realinc) de todos los encuestados en el
conjunto de datos.
mediana_realinc <- median(GSS2016$realinc)
print(mediana_realinc)
[1] 25740
- Genere una nueva variable que sea la diferencia entre el ingreso
real de un individuo (realinc) y el ingreso medio de todos los
individuos.
GSS2016$dif_ingresos <- GSS2016$realinc-mediana_realinc
head(GSS2016$dif_ingresos, 10)
[1] 105936.7 0.0 12870.0 105936.7 105936.7 5850.0 105936.7 -10530.0 5850.0 5850.0
- Genere una nueva variable que sea igual a 1 si un individuo gana por
encima del ingreso medio y 0 si el individuo gana por debajo del ingreso
medio.
GSS2016$cat_ingresos <- ifelse(GSS2016$realinc>mediana_realinc,1,0)
head(GSS2016$cat_ingresos, 10)
[1] 1 0 1 1 1 1 1 0 1 1
- Defina y aplique etiquetas de valor a la variable que creó en la
Parte “c”.
Se definió la etiqueta “alto” para quienes tienen un ingreso mayor
que el ingreso medio y la etiqueta “bajo” para quienes no.
GSS2016$cat_ingresos2 <- ifelse(GSS2016$cat_ingresos==1,"Alto","Bajo")
head(GSS2016$cat_ingresos2, 10)
[1] "Alto" "Bajo" "Alto" "Alto" "Alto" "Alto" "Alto" "Bajo" "Alto" "Alto"
- Cree una tabla que muestre la región de los Estados Unidos en las
filas y la variable que creó en la Parte “c” en las columnas. Haga que
esta tabla se agregue a través de las filas y no incluya
frecuencias.
t <- table(GSS2016$region,GSS2016$cat_ingresos)
prop.table(t, margin=1)*100
0 1
1 45.91195 54.08805
2 54.31655 45.68345
3 56.39913 43.60087
4 66.66667 33.33333
5 57.37705 42.62295
6 63.78378 36.21622
7 63.73626 36.26374
8 58.74439 41.25561
9 53.97727 46.02273
Conclusión: Se observo que el 54% de los encuestados
que viven en la region de New England tienen ingresos por encima de la
mediana de ingresos muestral. Es el estado con ingresos mas altos. En
contraste, el 66,7% de los encuestados que viven en la region de west
north central tienen ingresos por debajo de la mediana de ingresos
muestral.
Capítulo 6: Ejercicio 4
- Genere una tabla sin ponderaciones que muestre el género en las
filas (sex) y si el encuestado experimentó discriminación en el trabajo
en los últimos 5 años (discwk5). Muestre solo los porcentajes y decida
si desea utilizar porcentajes de fila o de columna.
Se decidió muestrar los porcentajes condicionados por filas para
mostrar cómo se distribuyen los niveles de discriminación dado el
sexo.
tabla1 <- table(GSS2016$sex, GSS2016$discwk5)
prop.table(tabla1, margin =1)*100
1 2 3
1 19.136691 76.978417 3.884892
2 17.871222 73.455979 8.672799
- Genere la misma tabla que en la Parte “a”, pero aplique los pesos
(wtss) a la tabla.
library(survey)
design <- svydesign(ids = ~1, data = GSS2016, weights = ~wtss)
# Crea la tabla de contingencia utilizando los pesos del muestreo
tabla2 <- svytable(~sex + discwk5, design)
prop.table(tabla2, margin =1)*100
discwk5
sex 1 2 3
1 19.327549 76.363896 4.308555
2 16.670950 76.142740 7.186310
LS0tCnRpdGxlOiAiUHJpbWVyIFRyYWJham8gRXNjcml0byAtIFBBUlRFIElJIgpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sKLS0tCgpQYXJhIGVzdGEgcGFydGUgdG9tYXIgY29tbyByZWZlcmVuY2lhIGVsIGxpYnJvICrigJxBbiBJbnRyb2R1Y3Rpb24gdG8gU3RhdGlzdGljcyBhbmQgRGF0YSBBbmFseXNpcwpVc2luZyBTdGF0YeKAnSogZGUgRGFuaWVscyB5IE1pbm90LiAKCiMjIENhcMOtdHVsbyA0OiBFamVyY2ljaW8gMQpBIHZlaW50aWNpbmNvIGVzdHVkaWFudGVzIHVuaXZlcnNpdGFyaW9zIHNlIGxlcyBoaWNpZXJvbiBjdWF0cm8gcHJlZ3VudGFzIHNvYnJlIHN1cyBow6FiaXRvcyBkZSB2ZXIgdGVsZXZpc2nDs24geSBwZWzDrWN1bGFzOgoKYS4gwr9RdcOpIHNlcnZpY2lvIGRlIHRlbGV2aXNpw7NuIHVzYSBjb24gbcOhcyBmcmVjdWVuY2lhIHBhcmEgdmVyIHByb2dyYW1hcyBkZSB0ZWxldmlzacOzbiB5IHBlbMOtY3VsYXM/CgpgYGB7cn0KdGFibGUodGFibGl0YSRUVl9Tb3VyY2UpCmBgYAppVHVuZXMgZXMgZWwgc2VydmljaW8gbcOhcyB1dGlsaXphZG8uCgpiLiDCv0N1w6FudGFzIGhvcmFzIGEgbGEgc2VtYW5hIGRlZGljYSBhIHZlciB0ZWxldmlzacOzbiBvIHBlbMOtY3VsYXM/CgpgYGB7cn0KdGFibGUodGFibGl0YSRIb3Vyc19wZXJfV2VlaykKc3VtKHRhYmxpdGEkSG91cnNfcGVyX1dlZWspCmBgYApMb3MgZW5jdWVzdGFkb3MgZGVkaWNhcm9uIHVuIHRvdGFsIGRlIDM2NiBob3JhcyBhIHZlciBUViBlbiB1bmEgc2VtYW5hLgoKYGBge3J9Cmhpc3QodGFibGl0YSRIb3Vyc19wZXJfV2VlaywgeGxhYj0iSG9yYXMgcG9yIHNlbWFuYSIsIG1haW4gPSAiRGlzdHJpYnVjacOzbiBkZSBob3JhcyBkZWRpY2FkYXMgYSB2ZXIgVFYiKQpgYGAKYy4gwr9Db24gcXXDqSBmcmVjdWVuY2lhIHZlIHRlbGV2aXNpw7NuIGVuIGV4Y2VzbyAodmllbmRvIG3DoXMgZGUgdHJlcyBlcGlzb2Rpb3Mgc2VndWlkb3MgZGVsIG1pc21vIHByb2dyYW1hKT8gUG9kw61hbiBlbGVnaXIgZW50cmUgKGEpIG5hZGEsIChiKSBhIHZlY2VzLCBkZSB1bmEgYSB0cmVzIHZlY2VzIHBvciBzZW1hbmEsIHkgKGMpIGNvbiBmcmVjdWVuY2lhLCBtw6FzIGRlIHRyZXMgdmVjZXMgcG9yIHNlbWFuYS4KCmBgYHtyfQp0YWJsZSh0YWJsaXRhJEJpbmdlX0ZyZXF1ZW5jeSkKYGBgCgpkLiBJbmdyZXNlIGxvcyBkYXRvcyBwYXJhIGNhZGEgdW5hIGRlIGxhcyBjdWF0cm8gdmFyaWFibGVzLiBQYXJhIGxhcyB0cmVzIHZhcmlhYmxlcyBjYXRlZ8OzcmljYXMsIGNyZWUgdW4gY8OzZGlnbyBudW3DqXJpY28gcGFyYSBjYWRhIHJlc3B1ZXN0YS4gUG9yIGVqZW1wbG8sIHBhcmEgVFYgU291cmNlLCAxID0gQW1hem9uIFByaW1lLCAyID0gQ2FibGUsIDMgPSBIdWx1IFBsdXMsIDQgPSBpVHVuZXMgeSA1ID0gTmV0ZmxpeC4KCmBgYHtyfQp0YWJsaXRhJFRWX1NvdXJjZVt0YWJsaXRhJFRWX1NvdXJjZT09IkFtYXpvblByaW1lIl0gPC0gMQp0YWJsaXRhJFRWX1NvdXJjZTFbdGFibGl0YSRUVl9Tb3VyY2U9PSJDYWJsZSJdIDwtIDIKdGFibGl0YSRUVl9Tb3VyY2VbdGFibGl0YSRUVl9Tb3VyY2U9PSJIdWx1UGx1cyJdIDwtIDMKdGFibGl0YSRUVl9Tb3VyY2VbdGFibGl0YSRUVl9Tb3VyY2U9PSJpVHVuZXMiXSA8LSA0CnRhYmxpdGEkVFZfU291cmNlW3RhYmxpdGEkVFZfU291cmNlPT0iTmV0ZmxpeCJdIDwtIDUKCmtuaXRyOjprYWJsZSh0YWJsaXRhKQoKYGBgCiogwr9RdcOpIHBvcmNlbnRhamUgZGUgbGEgbXVlc3RyYSBzZSBpZGVudGlmaWNhIGNvbW8gaG9tYnJlIHkgbXVqZXI/CgpgYGB7cn0KcHJvcC50YWJsZSh0YWJsZSh0YWJsaXRhJEdlbmRlcikpKjEwMApgYGAKNTIlIGhvbWJyZXMgeSA0OCUgbXVqZXJlcy4KCiogwr9RdcOpIHRpcG8gZGUgc2VydmljaW8gZGUgVFYgc2UgdXNhIGNvbiBtw6FzIGZyZWN1ZW5jaWE/CmBgYHtyfQp0YWJsZSh0YWJsaXRhJFRWX1NvdXJjZSkKYGBgCmlUdW5lcyAoNCkgY29uIHVuYSBmcmVjdWVuY2lhIGRlIDkgZXN0dWRpYW50ZXMuCgoqIFF1w6kgcG9yY2VudGFqZSBkZSBlc3R1ZGlhbnRlcyBzZSBkYW4gdW4gYXRyYWPDs24gZGUgdGVsZXZpc2nDs24gY29uIGZyZWN1ZW5jaWE/CmBgYHtyfQpwcm9wLnRhYmxlKHRhYmxlKHRhYmxpdGEkQmluZ2VfRnJlcXVlbmN5KSkqMTAwCmBgYAo0NCUgZGUgbG9zIGVzdHVkaWFudGVzIHZlbiBUViBjb24gZnJlY3VlbmNpYS4KCgoKIyMgQ2Fww610dWxvIDU6IEVqZXJjaWNpbyAyClVzZSBlbCBjb25qdW50byBkZSBkYXRvcyBHU1MyMDE2IHBhcmEgY29tcGxldGFyIGxvcyBzaWd1aWVudGVzIGVqZXJjaWNpb3MgcXVlIGdlbmVyYW4gdW5hIHZhcmlhYmxlIGNhdGVnw7NyaWNhIGEgcGFydGlyIGRlIHVuYSB2YXJpYWJsZSBjb250aW51YS4KCmEuIEdlbmVyZSB1bmEgdGFibGEgZGUgY3XDoW50b3MgaGlqb3MgdGllbmUgdW4gZW5jdWVzdGFkbyAoKmNoaWxkcyopLgoKYGBge3J9CnRhYmxlKEdTUzIwMTYkY2hpbGRzKQpgYGAKYi4gR2VuZXJlIHVuYSBudWV2YSB2YXJpYWJsZSBxdWUgc2VhIGlndWFsIGEgMSBzaSBlbCBlbmN1ZXN0YWRvIHRpZW5lIGhpam9zIHkgMiBzaSBlbCBlbmN1ZXN0YWRvIG5vIHRpZW5lIGhpam9zLgoKYGBge3J9CkdTUzIwMTYkSGlqb3NbR1NTMjAxNiRjaGlsZHMgPT0gMF0gPC0gMgpHU1MyMDE2JEhpam9zW0dTUzIwMTYkY2hpbGRzID49IDFdIDwtIDEKaGVhZChHU1MyMDE2JEhpam9zLCAxMCkKYGBgCmMuIENyZWUgdW5hIGV0aXF1ZXRhIGRlIHZhcmlhYmxlICJSZXNwb25kZW50IGhhcyBjaGlsZHJlbiIgeSBhcGzDrXF1ZWxhIGEgc3UgbnVldmEgdmFyaWFibGUuCgpgYGB7cn0KR1NTMjAxNiRIaWpvczIgPC0gaWZlbHNlKEdTUzIwMTYkSGlqb3MgPT0gMSwgIlJlc3BvbmRlbnQgaGFzIGNoaWxkcmVuIiwgIk5vdCIpCmhlYWQoR1NTMjAxNiRIaWpvczIsIDEwKQpgYGAKZC4gIENyZWUgZXRpcXVldGFzIGRlIHZhbG9yIHBhcmEgcXVlIDEgc2VhICJZZXMiIHkgMiBzZWEgIk5vIi4KCmBgYHtyfQpHU1MyMDE2JEhpam9zW0dTUzIwMTYkSGlqb3MgPT0gMV0gPC0gIlllcyIKR1NTMjAxNiRIaWpvc1tHU1MyMDE2JEhpam9zID09IDJdIDwtICJObyIKaGVhZChHU1MyMDE2JEhpam9zLCAxMCkKYGBgCmUuIEdlbmVyZSB1bmEgdGFibGEgZGUgc3UgbnVldmEgdmFyaWFibGUuCgpgYGB7cn0KdGFibGUoR1NTMjAxNiRIaWpvcykKYGBgCgozLiAoQ2FwLiA1IC0gZWplcmNpY2lvIDMpIAoKYS4gVXRpbGljZSBlbCBjb21hbmRvIGVnZW4gcGFyYSBnZW5lcmFyIHVuYSB2YXJpYWJsZSBxdWUgc2VhIGVsIHZhbG9yIG1lZGlhbm8gZGVsIGluZ3Jlc28gcmVhbCAocmVhbGluYykgZGUgdG9kb3MgbG9zIGVuY3Vlc3RhZG9zIGVuIGVsIGNvbmp1bnRvIGRlIGRhdG9zLgoKYGBge3J9Cm1lZGlhbmFfcmVhbGluYyA8LSBtZWRpYW4oR1NTMjAxNiRyZWFsaW5jKSAjIE1lZGlhbmEgCnByaW50KG1lZGlhbmFfcmVhbGluYykKYGBgCgpiLiBHZW5lcmUgdW5hIG51ZXZhIHZhcmlhYmxlIHF1ZSBzZWEgbGEgZGlmZXJlbmNpYSBlbnRyZSBlbCBpbmdyZXNvIHJlYWwgZGUgdW4gaW5kaXZpZHVvIChyZWFsaW5jKSB5IGVsIGluZ3Jlc28gbWVkaW8gZGUgdG9kb3MgbG9zIGluZGl2aWR1b3MuCgpgYGB7cn0KR1NTMjAxNiRkaWZfaW5ncmVzb3MgPC0gR1NTMjAxNiRyZWFsaW5jLW1lZGlhbmFfcmVhbGluYyAjIE51ZXZhIHZhcmlhYmxlIGRpZl9pbmdyZXNvcwpoZWFkKEdTUzIwMTYkZGlmX2luZ3Jlc29zLCAxMCkgIyBNdWVzdHJhIGxvcyBwcmltZXJvcyB2YWxvcmVzIGRlIGxhIG51ZXZhIHZhcmlhYmxlCmBgYApjLiBHZW5lcmUgdW5hIG51ZXZhIHZhcmlhYmxlIHF1ZSBzZWEgaWd1YWwgYSAxIHNpIHVuIGluZGl2aWR1byBnYW5hIHBvciBlbmNpbWEgZGVsIGluZ3Jlc28gbWVkaW8geSAwIHNpIGVsIGluZGl2aWR1byBnYW5hIHBvciBkZWJham8gZGVsIGluZ3Jlc28gbWVkaW8uCgpgYGB7cn0KR1NTMjAxNiRjYXRfaW5ncmVzb3MgPC0gaWZlbHNlKEdTUzIwMTYkcmVhbGluYz5tZWRpYW5hX3JlYWxpbmMsMSwwKQpoZWFkKEdTUzIwMTYkY2F0X2luZ3Jlc29zLCAxMCkKYGBgCiBkLiBEZWZpbmEgeSBhcGxpcXVlIGV0aXF1ZXRhcyBkZSB2YWxvciBhIGxhIHZhcmlhYmxlIHF1ZSBjcmXDsyBlbiBsYSBQYXJ0ZSAiYyIuCiAKIFNlIGRlZmluacOzIGxhIGV0aXF1ZXRhICJhbHRvIiBwYXJhIHF1aWVuZXMgdGllbmVuIHVuIGluZ3Jlc28gbWF5b3IgcXVlIGVsIGluZ3Jlc28gbWVkaW8geSBsYSBldGlxdWV0YSAiYmFqbyIgcGFyYSBxdWllbmVzIG5vLgogCmBgYHtyfQpHU1MyMDE2JGNhdF9pbmdyZXNvczIgPC0gaWZlbHNlKEdTUzIwMTYkY2F0X2luZ3Jlc29zPT0xLCJBbHRvIiwiQmFqbyIpCmhlYWQoR1NTMjAxNiRjYXRfaW5ncmVzb3MyLCAxMCkKYGBgCiAgZS4gQ3JlZSB1bmEgdGFibGEgcXVlIG11ZXN0cmUgbGEgcmVnacOzbiBkZSBsb3MgRXN0YWRvcyBVbmlkb3MgZW4gbGFzIGZpbGFzIHkgbGEgdmFyaWFibGUgcXVlIGNyZcOzIGVuIGxhIFBhcnRlICJjIiBlbiBsYXMgY29sdW1uYXMuIEhhZ2EgcXVlIGVzdGEgdGFibGEgc2UgYWdyZWd1ZSBhIHRyYXbDqXMgZGUgbGFzIGZpbGFzIHkgbm8gaW5jbHV5YSBmcmVjdWVuY2lhcy4KICAKYGBge3J9CnQgPC0gdGFibGUoR1NTMjAxNiRyZWdpb24sR1NTMjAxNiRjYXRfaW5ncmVzb3MpCnByb3AudGFibGUodCwgbWFyZ2luPTEpKjEwMAoKYGBgCiAgCioqQ29uY2x1c2nDs246KiogU2Ugb2JzZXJ2byBxdWUgZWwgNTQlIGRlIGxvcyBlbmN1ZXN0YWRvcyBxdWUgdml2ZW4gZW4gbGEgcmVnaW9uIGRlIE5ldyBFbmdsYW5kIAp0aWVuZW4gaW5ncmVzb3MgcG9yIGVuY2ltYSBkZSBsYSBtZWRpYW5hIGRlIGluZ3Jlc29zIG11ZXN0cmFsLiBFcyBlbCBlc3RhZG8gY29uIGluZ3Jlc29zIG1hcyBhbHRvcy4gCkVuIGNvbnRyYXN0ZSwgZWwgNjYsNyUgZGUgbG9zIGVuY3Vlc3RhZG9zIHF1ZSB2aXZlbiBlbiBsYSByZWdpb24gZGUgd2VzdCBub3J0aCBjZW50cmFsIHRpZW5lbgppbmdyZXNvcyBwb3IgZGViYWpvIGRlIGxhIG1lZGlhbmEgZGUgaW5ncmVzb3MgbXVlc3RyYWwuCgoKIyBDYXDDrXR1bG8gNjogRWplcmNpY2lvIDQKCmEuIEdlbmVyZSB1bmEgdGFibGEgc2luIHBvbmRlcmFjaW9uZXMgcXVlIG11ZXN0cmUgZWwgZ8OpbmVybyBlbiBsYXMgZmlsYXMgKHNleCkgeSBzaSBlbCBlbmN1ZXN0YWRvIGV4cGVyaW1lbnTDsyBkaXNjcmltaW5hY2nDs24gZW4gZWwgdHJhYmFqbyBlbiBsb3Mgw7psdGltb3MgNSBhw7FvcyAoZGlzY3drNSkuIE11ZXN0cmUgc29sbyBsb3MgcG9yY2VudGFqZXMgeSBkZWNpZGEgc2kgZGVzZWEgdXRpbGl6YXIgcG9yY2VudGFqZXMgZGUgZmlsYSBvIGRlIGNvbHVtbmEuCgpTZSBkZWNpZGnDsyBtdWVzdHJhciBsb3MgcG9yY2VudGFqZXMgY29uZGljaW9uYWRvcyBwb3IgZmlsYXMgcGFyYSBtb3N0cmFyIGPDs21vIHNlIGRpc3RyaWJ1eWVuIGxvcyBuaXZlbGVzIGRlIGRpc2NyaW1pbmFjacOzbiBkYWRvIGVsIHNleG8uCgpgYGB7cn0KdGFibGExIDwtIHRhYmxlKEdTUzIwMTYkc2V4LCBHU1MyMDE2JGRpc2N3azUpCnByb3AudGFibGUodGFibGExLCBtYXJnaW4gPTEpKjEwMApgYGAKCmIuIEdlbmVyZSBsYSBtaXNtYSB0YWJsYSBxdWUgZW4gbGEgUGFydGUgImEiLCBwZXJvIGFwbGlxdWUgbG9zIHBlc29zICh3dHNzKSBhIGxhIHRhYmxhLgoKYGBge3J9CmxpYnJhcnkoc3VydmV5KQpkZXNpZ24gPC0gc3Z5ZGVzaWduKGlkcyA9IH4xLCBkYXRhID0gR1NTMjAxNiwgd2VpZ2h0cyA9IH53dHNzKQojIENyZWEgbGEgdGFibGEgZGUgY29udGluZ2VuY2lhIHV0aWxpemFuZG8gbG9zIHBlc29zIGRlbCBtdWVzdHJlbwp0YWJsYTIgPC0gc3Z5dGFibGUofnNleCArIGRpc2N3azUsIGRlc2lnbikKcHJvcC50YWJsZSh0YWJsYTIsIG1hcmdpbiA9MSkqMTAwCgpgYGAKCg==