1 Bibliotecas

library(tidyverse)
library(janitor)
library(infer)
library(ggplot2)
library(ggpubr)
library(car)

2 Punto 1

En una encuesta realizada en Colombia a 128 sistemas de producción de aguacate, se encontró que 47 de ellos usan fertilización orgánica y el restante utilizan fertilización química. Construya un intervalo de confianza del 99% para la proporción del uso de fertilizante orgánico en este tipo de sistemas de producción. Interprete sus resultados.

  • x = proporción que usa fertilizante orgánico
  • n = número total de encuestados
  • nc = nivel de confianza
  • xgorro = porcentaje de proporcion
  • se = error estandar
  • f = valor establecido para un nc de 99%
  • Icprop = vector que contiene los intervalos de confianza
Icprop = function(x,n,nc = 0.99)
  { xgorro = x/n 
se = sqrt((xgorro * (1 - xgorro))/n)
f = qnorm((1 + nc)/2)
Icprop = c(xgorro - (f * se), xgorro, xgorro + (f*se))
return(Icprop)
}
x = 47
n = 128
nc = 0.99
Icprop(x,n,nc)
## [1] 0.2574403 0.3671875 0.4769347

2.1 Interpretación

Según la encuesta la proporción que usaba fertilizante orgánico era de un 36.7% osea 47 sistemas, pero en realidad la proporción real se encuentra dentro de un intervalo de 25.7% a 47.7% del total de sistemas.

3 Punto 2

  • Ingrediente de interés = Buffel - Cenchrus ciliaris - Hoja, Tallo
  • Departamentos = Antioquia y Cesar
  • Variable respuesta de interés = edad de corte
alimentro <- read_csv("Alimentro-Depurada.csv")
alimentro %>% head

3.1 Datos punto 2

datosp2 <- alimentro %>% 
  filter(ingrediente == "Buffel - Cenchrus ciliaris - Hoja, Tallo") %>% 
  filter(departamento %in% c("Antioquia","Cesar"))

3.2 Exploratorio

3.2.1 Promedio

datosp2 %>% 
group_by(ingrediente, departamento) %>%
  summarise(promedio = mean(edad_corte_d))

3.3 Juego de hipótesis

\[H_0: edad \ corte \ Antioquia = edad \ corte \ Cesar \\ H_1 : edad \ corte \ Antioquia \neq edad\ corte\ Cesar\]

3.3.1 Nivel de significancia

En este caso usaremos un nivel de significancia del 5% (0.05)

3.4 Prueba de shapiro wilk

shapiro.test(x = datosp2$edad_corte_d) 
## 
##  Shapiro-Wilk normality test
## 
## data:  datosp2$edad_corte_d
## W = 0.73847, p-value < 2.2e-16

3.5 Solución

  • Vamos a usar la función var.test() con los siguientes argumentos:
    • formula: y ~ x. En este caso “y” es la variable edad de corte y el “x” es el departamento.
    • ratio: es el resultado del cociente de las dos varianzas. En este caso asumimos en la hipótesis nula el valor de “1”.
    • alternative: tipo de prueba. En este es bilateral (“two.sided”)
    • conf.level: nivel de confianza. En este caso es 0.95 (1 - 0.5)
  var.test(datosp2$edad_corte_d ~ datosp2$departamento,
         ratio = 1,
         alternative = "two.sided",
         conf.level = 0.95)
## 
##  F test to compare two variances
## 
## data:  datosp2$edad_corte_d by datosp2$departamento
## F = 9.5607, num df = 189, denom df = 993, p-value < 2.2e-16
## alternative hypothesis: true ratio of variances is not equal to 1
## 95 percent confidence interval:
##   7.733251 12.019476
## sample estimates:
## ratio of variances 
##            9.56071

3.6 Conclusión

  • Como el valor p (2.2e-16) es menor que el nivel de significancia (0.05), si existe evidencia para rechazar la hipótesis, es decir, que el promedio de la edad de corte del departamento de Antioquia es diferente al promedio de la edad de corte del departamento del Cesar.
  • Como el intervalo de confianza (LI: 7.733251, LS: 12.019476) no contiene el valor de referencia (“1”), si existe evidencia para rechazar la hipótesis.

4 Punto 3

Usted fue asignado (a) para probar a través de métodos estadísticos si en promedio la grasa dorsal (mm) de dos líneas genéticas de porcinos presentan diferencias estadísticas y ¿cuál sería el rango de valores esperados para la diferencia de esas dos líneas genéticas? ¿Cuál línea genética recomendaría?

linea_a <- c(13.94, 15.30, 16.92, 14.89, 17.34, 17.43, 16.83, 15.61,
             16.95, 17.69, 15.16, 16.53, 17.22, 15.17, 16.63)

linea_b <-c(15.62, 13.84, 14.25, 12.79, 17.01, 16.92, 11.13, 13.72,
            14.26, 14.55, 14.11, 18.04, 12.17, 13.59, 13.81)

4.1 Juego de hipótesis

\[H_0: promedio \ grasa \ dorsal \ linea \ a = promedio \ grasa \ dorsal \ linea \ b \\ H_1 : promedio \ grasa \ dorsal \ linea \ a \neq promedio \ grasa \ dorsal \ linea \ b \]

4.1.1 Nivel de significancia

En este caso usaremos un nivel de significancia del 5% (0.05)

4.2 Diferencia de medias

diferencia <- linea_a - linea_b
diferencia
##  [1] -1.68  1.46  2.67  2.10  0.33  0.51  5.70  1.89  2.69  3.14  1.05 -1.51
## [13]  5.05  1.58  2.82

4.3 Normalidad

Gráfico

ggqqplot(data = diferencia)

  • Podemos concluir que si se cumple la normalidad, ya que los datos se encuentran dentro de la banda de confianza

4.4 Igualdad de varianza

var.test(x = linea_a, y = linea_b,
         ratio = 1, alternative = "two.sided")
## 
##  F test to compare two variances
## 
## data:  linea_a and linea_b
## F = 0.37318, num df = 14, denom df = 14, p-value = 0.07551
## alternative hypothesis: true ratio of variances is not equal to 1
## 95 percent confidence interval:
##  0.125286 1.111535
## sample estimates:
## ratio of variances 
##          0.3731753

4.5 Prueba t-student

t.test(x = linea_a, y = linea_b,
       alternative = "two.sided",
       conf.level = 0.95,
       paired = TRUE,
       var.equal = TRUE)
## 
##  Paired t-test
## 
## data:  linea_a and linea_b
## t = 3.5317, df = 14, p-value = 0.003319
## alternative hypothesis: true mean difference is not equal to 0
## 95 percent confidence interval:
##  0.7278099 2.9788568
## sample estimates:
## mean difference 
##        1.853333

4.6 Conclusion

  • Como el valor p (0.0003319) es menor que el nivel de significancia, existe evidencia para rechazar la hipótesis nula, es decir, que el promedio de la “linea a” es diferente al promedio para de la “linea b”.
  • Como el intervalo de confianza no contiene al cero ([0.7278099, 2.9788568]), existe evidencia para rechazar la hipótesis nula. Además, el promedio de la “linea a” podría estar desde 0.72 hasta 2.97 puntos por encima dela “linea b”

4.7 ¿Cuál sería el rango de valores esperados para la diferencia de esas dos líneas genéticas?

  • El rango de diferencia que podemos esperar esta entre (0.7278099 - 2.9788568)

4.8 ¿Cuál línea genética recomendaría?

  • Nosotras recomendaríamos la línea genética A, porque está por encima de la linea b, y es recomendable que los cerdos tengan un mayor porcentaje de grasa dorsal ya que es un indicador importante para una buena productividad.

5 Punto 4

Con la misma base de datos ALIMENTRO del punto 2 y usando la misma información (ingrediente de interés, departamentos y variable respuesta), responda lo siguiente:

5.1 ¿Cuál de los dos departamentos presenta mayor variabilidad para la variable de interés?

5.1.1 Densidades

datosp2 %>% 
  ggplot(aes(x = edad_corte_d, color = departamento)) +
  geom_density() +
  scale_x_log10()

5.1.2 Respuesta

Presenta mayor variabilidad el departamento del Cesar con respecto a la edad de corte del pasto Buffel - Cenchrus ciliaris, puesto que al analizar el grafico de densidad podemos observar que presenta mas oscilaciones, esto debido a que el departamento del Cesar presenta mas datos para este pasto

5.2 ¿Es diferente estadísticamente la variabilidad de ambos departamentos?

Si la prueba estadística se lo permite, construya un intervalo de confianza del 95% para complementar sus respuestas.

5.2.1 Normalidad

ggqqplot(data = datosp2$edad_corte_d)

  • De este gráfico podemos inferir que la distribucción no es normal, puestos que los datos de la variedad estan alejados de la diagonal y se salen de la banda de confianza

5.2.2 Prueba de Levene

leveneTest(datosp2$edad_corte_d ~ datosp2$departamento)

5.2.3 Respuesta

Como el valor P (< 2.2e-16) es inferior a nuestro nivel de significancia (0.05) podemos concluir que si existe una diferencia significativa entre las varianzas de los dos departamentos comparados.

6 Punto 5

Se realizaron 30 experimentos independientes en donde se evaluó la afección de una plaga en hojas de cítricos, en cada uno de ellos se calculó el promedio del área afectada (en porcentaje) de las hojas bajo análisis. Utilizando técnicas de Bootstrapping construya un intervalo de confianza (com ambos métodos: error estándar y percentil) del 95% para el promedio del área afectada.

area <- c(29.2, 17.0, 28.9, 17.3, 13.8, 5.8, 27.5, 18.2, 27.6, 30.9,
          32.8, 22.6, 15.3, 23.3, 12.4, 30.0, 19.5, 17.0, 18.7, 20.4,
          18.6, 44.1, 17.9, 17.9, 30.0, 25.1, 24.3, 22.1, 21.8, 21.9)

6.1 Promedio muestra

promedio_area <- mean(area)
promedio_area
## [1] 22.39667

6.2 Remuestreo

datosp5 <- data.frame(area) 
set.seed(2022)
remuestreo_p5 <- datosp5 %>% 
  specify(response = area) %>% 
  generate(reps = 1000, type = "bootstrap") %>% 
  calculate(stat = "mean")

remuestreo_p5

6.2.1 media del remuestreo

promedio_remuestreo <- remuestreo_p5$stat %>% mean()
promedio_remuestreo
## [1] 22.37907

6.2.2 Gráfico de remuestreo

remuestreo_p5 %>% 
  visualize()

6.3 Intervalo de confianza con percentiles (95%):

ic_p5_percentil <-
  remuestreo_p5 %>%
  get_confidence_interval(level = 0.95, type = "percentile")
ic_p5_percentil

6.3.1 Graficamos los intervalos de confianza con el método de percentiles

remuestreo_p5 %>% 
  visualize() +
  shade_confidence_interval(endpoints = ic_p5_percentil)

6.4 Calculamos el intervalo de confianza por el método de error estándar:

proporcion_muestral <-
  prop.table(table(area))

ic_errorestandar <- remuestreo_p5 %>%
  get_confidence_interval(level = 0.95,
                          type = "se",
                          point_estimate = promedio_area)

ic_errorestandar

6.4.1 Graficamos los intervalos de confianza con el método de error estándar

remuestreo_p5 %>% 
  visualize() +
  shade_confidence_interval(endpoints = ic_errorestandar)

6.5 Gráfico de los dos intervalos de confianza

remuestreo_p5 %>%
  visualize() +
  shade_confidence_interval(endpoints = ic_p5_percentil,
                            color = "forestgreen",
                            fill = "white") +
  shade_confidence_interval(endpoints = ic_errorestandar,
                            color = "dodgerblue",
                            fill = "white") +
  geom_vline(xintercept = promedio_area, color = "red", lty = 2, size = 1.5) +
  geom_vline(xintercept = promedio_remuestreo, color = "black", lty = 2, size = 1.5) 

6.6 Conclusión

  • Podemos concluir que el promedio del remuestreo es casi igual al de la muestra inicial, lo que quiere decir que si hacemos nuevos remuestreos obtendremos los mismos intervalos de confianza.
  • También podemos concluir que con ambos métodos el intervalo de confianza va a incluir el valor real del promedio del área afectada
LS0tDQp0aXRsZTogIkFjdGl2aWRhZCAjMiINCmF1dGhvcjogIkF5bGluIENyaXN0aW5hIEVjaGF2YXJyaWEgeSBTYXJhIE1lbGlzYSBQYWxhY2lvIFJlZ2lubyINCmRhdGU6ICIyMDIzLTA1LTExIg0Kb3V0cHV0OiANCiAgaHRtbF9kb2N1bWVudDoNCiAgICB0b2M6IHRydWUNCiAgICB0b2NfZGVwdGg6IDUNCiAgICB0b2NfZmxvYXQ6IHRydWUNCiAgICBudW1iZXJfc2VjdGlvbnM6IHRydWUNCiAgICB0aGVtZTogY29zbW8NCiAgICBoaWdobGlnaHQ6IGJyZWV6ZWRhcmsNCiAgICBkZl9wcmludDogcGFnZWQNCiAgICBjb2RlX2ZvbGRpbmc6IGhpZGUNCiAgICBjb2RlX2Rvd25sb2FkOiB0cnVlDQotLS0NCg0KYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9DQprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IFRSVUUsd2FybmluZyA9IEZBTFNFLG1lc3NhZ2UgPSBGQUxTRSkNCmBgYA0KDQojIEJpYmxpb3RlY2FzIA0KDQpgYGB7cn0NCmxpYnJhcnkodGlkeXZlcnNlKQ0KbGlicmFyeShqYW5pdG9yKQ0KbGlicmFyeShpbmZlcikNCmxpYnJhcnkoZ2dwbG90MikNCmxpYnJhcnkoZ2dwdWJyKQ0KbGlicmFyeShjYXIpDQpgYGANCg0KIyBQdW50byAxDQoNCkVuIHVuYSBlbmN1ZXN0YSByZWFsaXphZGEgZW4gQ29sb21iaWEgYSAxMjggc2lzdGVtYXMgZGUgcHJvZHVjY2nDs24gZGUgYWd1YWNhdGUsIHNlIGVuY29udHLDsyBxdWUgNDcgZGUgZWxsb3MgdXNhbiBmZXJ0aWxpemFjacOzbiBvcmfDoW5pY2EgeSBlbCByZXN0YW50ZSB1dGlsaXphbiBmZXJ0aWxpemFjacOzbiBxdcOtbWljYS4gQ29uc3RydXlhIHVuIGludGVydmFsbyBkZSBjb25maWFuemEgZGVsIDk5JSBwYXJhIGxhIHByb3BvcmNpw7NuIGRlbCB1c28gZGUgZmVydGlsaXphbnRlIG9yZ8OhbmljbyBlbiBlc3RlIHRpcG8gZGUgc2lzdGVtYXMgZGUgcHJvZHVjY2nDs24uIEludGVycHJldGUgc3VzIHJlc3VsdGFkb3MuDQoNCi0geCA9IHByb3BvcmNpw7NuIHF1ZSB1c2EgZmVydGlsaXphbnRlIG9yZ8OhbmljbyAgDQotIG4gPSBuw7ptZXJvIHRvdGFsIGRlIGVuY3Vlc3RhZG9zDQotIG5jID0gbml2ZWwgZGUgY29uZmlhbnphDQotIHhnb3JybyA9IHBvcmNlbnRhamUgZGUgcHJvcG9yY2lvbg0KLSBzZSA9IGVycm9yIGVzdGFuZGFyDQotIGYgPSB2YWxvciBlc3RhYmxlY2lkbyBwYXJhIHVuIG5jIGRlIDk5JQ0KLSBJY3Byb3AgPSB2ZWN0b3IgcXVlIGNvbnRpZW5lIGxvcyBpbnRlcnZhbG9zIGRlIGNvbmZpYW56YQ0KDQoNCmBgYHtyfQ0KSWNwcm9wID0gZnVuY3Rpb24oeCxuLG5jID0gMC45OSkNCiAgeyB4Z29ycm8gPSB4L24gDQpzZSA9IHNxcnQoKHhnb3JybyAqICgxIC0geGdvcnJvKSkvbikNCmYgPSBxbm9ybSgoMSArIG5jKS8yKQ0KSWNwcm9wID0gYyh4Z29ycm8gLSAoZiAqIHNlKSwgeGdvcnJvLCB4Z29ycm8gKyAoZipzZSkpDQpyZXR1cm4oSWNwcm9wKQ0KfQ0KDQpgYGANCmBgYHtyfQ0KeCA9IDQ3DQpuID0gMTI4DQpuYyA9IDAuOTkNCkljcHJvcCh4LG4sbmMpDQpgYGANCg0KIyMgSW50ZXJwcmV0YWNpw7NuDQoNClNlZ8O6biBsYSBlbmN1ZXN0YSBsYSBwcm9wb3JjacOzbiBxdWUgdXNhYmEgZmVydGlsaXphbnRlIG9yZ8OhbmljbyBlcmEgZGUgdW4gMzYuNyUgb3NlYSA0NyBzaXN0ZW1hcywgcGVybyBlbiByZWFsaWRhZCBsYSBwcm9wb3JjacOzbiByZWFsIHNlIGVuY3VlbnRyYSBkZW50cm8gZGUgdW4gaW50ZXJ2YWxvIGRlIDI1LjclIGEgNDcuNyUgZGVsIHRvdGFsIGRlIHNpc3RlbWFzLg0KDQoNCiMgUHVudG8gMg0KDQotIEluZ3JlZGllbnRlIGRlIGludGVyw6lzID0gQnVmZmVsIC0gQ2VuY2hydXMgY2lsaWFyaXMgLSBIb2phLCBUYWxsbw0KLSBEZXBhcnRhbWVudG9zID0gQW50aW9xdWlhIHkgQ2VzYXINCi0gVmFyaWFibGUgcmVzcHVlc3RhIGRlIGludGVyw6lzID0gZWRhZCBkZSBjb3J0ZQ0KDQpgYGB7cn0NCmFsaW1lbnRybyA8LSByZWFkX2NzdigiQWxpbWVudHJvLURlcHVyYWRhLmNzdiIpDQphbGltZW50cm8gJT4lIGhlYWQNCg0KYGBgDQoNCiMjIERhdG9zIHB1bnRvIDINCg0KYGBge3J9DQpkYXRvc3AyIDwtIGFsaW1lbnRybyAlPiUgDQogIGZpbHRlcihpbmdyZWRpZW50ZSA9PSAiQnVmZmVsIC0gQ2VuY2hydXMgY2lsaWFyaXMgLSBIb2phLCBUYWxsbyIpICU+JSANCiAgZmlsdGVyKGRlcGFydGFtZW50byAlaW4lIGMoIkFudGlvcXVpYSIsIkNlc2FyIikpDQpgYGANCg0KDQojIyBFeHBsb3JhdG9yaW8NCg0KDQojIyMgUHJvbWVkaW8NCg0KYGBge3J9DQpkYXRvc3AyICU+JSANCmdyb3VwX2J5KGluZ3JlZGllbnRlLCBkZXBhcnRhbWVudG8pICU+JQ0KICBzdW1tYXJpc2UocHJvbWVkaW8gPSBtZWFuKGVkYWRfY29ydGVfZCkpDQoNCmBgYA0KDQoNCiMjIEp1ZWdvIGRlIGhpcMOzdGVzaXMgDQoNCiQkSF8wOiBlZGFkIFwgY29ydGUgXCBBbnRpb3F1aWEgPSBlZGFkIFwgY29ydGUgXCBDZXNhciBcXA0KSF8xIDogZWRhZCBcIGNvcnRlIFwgQW50aW9xdWlhIFxuZXEgZWRhZFwgY29ydGVcIENlc2FyJCQNCg0KIyMjIE5pdmVsIGRlIHNpZ25pZmljYW5jaWEgDQoNCkVuIGVzdGUgY2FzbyB1c2FyZW1vcyB1biBuaXZlbCBkZSBzaWduaWZpY2FuY2lhIGRlbCA1JSAoMC4wNSkNCg0KIyMgUHJ1ZWJhIGRlIHNoYXBpcm8gd2lsaw0KDQpgYGB7cn0NCnNoYXBpcm8udGVzdCh4ID0gZGF0b3NwMiRlZGFkX2NvcnRlX2QpIA0KYGBgDQoNCiMjIFNvbHVjacOzbiAgDQoNCi0gVmFtb3MgYSB1c2FyIGxhIGZ1bmNpw7NuIHZhci50ZXN0KCkgY29uIGxvcyBzaWd1aWVudGVzIGFyZ3VtZW50b3M6DQogIC0gZm9ybXVsYTogeSB+IHguIEVuIGVzdGUgY2FzbyDigJx54oCdIGVzIGxhIHZhcmlhYmxlIGVkYWQgZGUgY29ydGUgeSBlbCDigJx44oCdIGVzIGVsIGRlcGFydGFtZW50by4NCiAgLSByYXRpbzogZXMgZWwgcmVzdWx0YWRvIGRlbCBjb2NpZW50ZSBkZSBsYXMgZG9zIHZhcmlhbnphcy4gRW4gZXN0ZSBjYXNvIGFzdW1pbW9zIGVuIGxhIGhpcMOzdGVzaXMgbnVsYSBlbCB2YWxvciBkZSDigJwx4oCdLg0KICAtIGFsdGVybmF0aXZlOiB0aXBvIGRlIHBydWViYS4gRW4gZXN0ZSBlcyBiaWxhdGVyYWwgKOKAnHR3by5zaWRlZOKAnSkNCiAgLSBjb25mLmxldmVsOiBuaXZlbCBkZSBjb25maWFuemEuIEVuIGVzdGUgY2FzbyBlcyAwLjk1ICgxIC0gMC41KQ0KDQpgYGB7cn0NCiAgdmFyLnRlc3QoZGF0b3NwMiRlZGFkX2NvcnRlX2QgfiBkYXRvc3AyJGRlcGFydGFtZW50bywNCiAgICAgICAgIHJhdGlvID0gMSwNCiAgICAgICAgIGFsdGVybmF0aXZlID0gInR3by5zaWRlZCIsDQogICAgICAgICBjb25mLmxldmVsID0gMC45NSkNCmBgYA0KIyMgQ29uY2x1c2nDs24NCg0KDQotIENvbW8gZWwgdmFsb3IgcCAoMi4yZS0xNikgZXMgbWVub3IgcXVlIGVsIG5pdmVsIGRlIHNpZ25pZmljYW5jaWEgKDAuMDUpLCBzaSBleGlzdGUgZXZpZGVuY2lhIHBhcmEgcmVjaGF6YXIgbGEgaGlww7N0ZXNpcywgZXMgZGVjaXIsIHF1ZSBlbCBwcm9tZWRpbyBkZSBsYSBlZGFkIGRlIGNvcnRlIGRlbCBkZXBhcnRhbWVudG8gZGUgQW50aW9xdWlhIGVzIGRpZmVyZW50ZSBhbCBwcm9tZWRpbyBkZSBsYSBlZGFkIGRlIGNvcnRlIGRlbCBkZXBhcnRhbWVudG8gZGVsIENlc2FyLg0KLSBDb21vIGVsIGludGVydmFsbyBkZSBjb25maWFuemEgKExJOiA3LjczMzI1MSwgTFM6IDEyLjAxOTQ3Nikgbm8gY29udGllbmUgZWwgdmFsb3IgZGUgcmVmZXJlbmNpYSAo4oCcMeKAnSksIHNpIGV4aXN0ZSBldmlkZW5jaWEgcGFyYSByZWNoYXphciBsYSBoaXDDs3Rlc2lzLg0KDQojIFB1bnRvIDMNCg0KVXN0ZWQgZnVlIGFzaWduYWRvIChhKSBwYXJhIHByb2JhciBhIHRyYXbDqXMgZGUgbcOpdG9kb3MgZXN0YWTDrXN0aWNvcyBzaSBlbiBwcm9tZWRpbyBsYSBncmFzYSBkb3JzYWwgKG1tKSBkZSBkb3MgbMOtbmVhcyBnZW7DqXRpY2FzIGRlIHBvcmNpbm9zIHByZXNlbnRhbiBkaWZlcmVuY2lhcyBlc3RhZMOtc3RpY2FzIHkgwr9jdcOhbCBzZXLDrWEgZWwgcmFuZ28gZGUgdmFsb3JlcyBlc3BlcmFkb3MgcGFyYSBsYSBkaWZlcmVuY2lhIGRlIGVzYXMgZG9zIGzDrW5lYXMgZ2Vuw6l0aWNhcz8gwr9DdcOhbCBsw61uZWEgZ2Vuw6l0aWNhIHJlY29tZW5kYXLDrWE/DQoNCmBgYHtyfQ0KbGluZWFfYSA8LSBjKDEzLjk0LCAxNS4zMCwgMTYuOTIsIDE0Ljg5LCAxNy4zNCwgMTcuNDMsIDE2LjgzLCAxNS42MSwNCiAgICAgICAgICAgICAxNi45NSwgMTcuNjksIDE1LjE2LCAxNi41MywgMTcuMjIsIDE1LjE3LCAxNi42MykNCg0KbGluZWFfYiA8LWMoMTUuNjIsIDEzLjg0LCAxNC4yNSwgMTIuNzksIDE3LjAxLCAxNi45MiwgMTEuMTMsIDEzLjcyLA0KICAgICAgICAgICAgMTQuMjYsIDE0LjU1LCAxNC4xMSwgMTguMDQsIDEyLjE3LCAxMy41OSwgMTMuODEpDQoNCiAgDQpgYGANCiMjIEp1ZWdvIGRlIGhpcMOzdGVzaXMgDQoNCiQkSF8wOiBwcm9tZWRpbyBcIGdyYXNhIFwgZG9yc2FsIFwgbGluZWEgXCAgYSA9IHByb21lZGlvIFwgZ3Jhc2EgXCBkb3JzYWwgXCBsaW5lYSBcICBiIFxcDQpIXzEgOiBwcm9tZWRpbyBcIGdyYXNhIFwgZG9yc2FsIFwgbGluZWEgXCAgYSBcbmVxIHByb21lZGlvIFwgZ3Jhc2EgXCBkb3JzYWwgXCBsaW5lYSBcICBiICQkDQoNCiMjIyBOaXZlbCBkZSBzaWduaWZpY2FuY2lhIA0KDQpFbiBlc3RlIGNhc28gdXNhcmVtb3MgdW4gbml2ZWwgZGUgc2lnbmlmaWNhbmNpYSBkZWwgNSUgKDAuMDUpDQoNCg0KIyMgRGlmZXJlbmNpYSBkZSBtZWRpYXMNCg0KDQpgYGB7cn0NCmRpZmVyZW5jaWEgPC0gbGluZWFfYSAtIGxpbmVhX2INCmRpZmVyZW5jaWENCmBgYA0KIyMgTm9ybWFsaWRhZA0KDQpHcsOhZmljbw0KDQpgYGB7cn0NCmdncXFwbG90KGRhdGEgPSBkaWZlcmVuY2lhKQ0KYGBgDQoNCi0gUG9kZW1vcyBjb25jbHVpciBxdWUgc2kgc2UgY3VtcGxlIGxhIG5vcm1hbGlkYWQsIHlhIHF1ZSBsb3MgZGF0b3Mgc2UgZW5jdWVudHJhbiBkZW50cm8gZGUgbGEgYmFuZGEgZGUgY29uZmlhbnphDQoNCiMjIElndWFsZGFkIGRlIHZhcmlhbnphDQoNCmBgYHtyfQ0KdmFyLnRlc3QoeCA9IGxpbmVhX2EsIHkgPSBsaW5lYV9iLA0KICAgICAgICAgcmF0aW8gPSAxLCBhbHRlcm5hdGl2ZSA9ICJ0d28uc2lkZWQiKQ0KYGBgDQoNCiMjIFBydWViYSB0LXN0dWRlbnQNCg0KYGBge3J9DQp0LnRlc3QoeCA9IGxpbmVhX2EsIHkgPSBsaW5lYV9iLA0KICAgICAgIGFsdGVybmF0aXZlID0gInR3by5zaWRlZCIsDQogICAgICAgY29uZi5sZXZlbCA9IDAuOTUsDQogICAgICAgcGFpcmVkID0gVFJVRSwNCiAgICAgICB2YXIuZXF1YWwgPSBUUlVFKQ0KYGBgDQojIyBDb25jbHVzaW9uDQoNCi0gQ29tbyBlbCB2YWxvciBwICgwLjAwMDMzMTkpIGVzIG1lbm9yIHF1ZSBlbCBuaXZlbCBkZSBzaWduaWZpY2FuY2lhLCBleGlzdGUgZXZpZGVuY2lhIHBhcmEgcmVjaGF6YXIgbGEgaGlww7N0ZXNpcyBudWxhLCBlcyBkZWNpciwgcXVlIGVsIHByb21lZGlvIGRlIGxhICJsaW5lYSBhIiBlcyBkaWZlcmVudGUgYWwgcHJvbWVkaW8gcGFyYSBkZSBsYSAibGluZWEgYiIuDQotIENvbW8gZWwgaW50ZXJ2YWxvIGRlIGNvbmZpYW56YSBubyBjb250aWVuZSBhbCBjZXJvIChbMC43Mjc4MDk5LCAyLjk3ODg1NjhdKSwgZXhpc3RlIGV2aWRlbmNpYSBwYXJhIHJlY2hhemFyIGxhIGhpcMOzdGVzaXMgbnVsYS4gQWRlbcOhcywgZWwgcHJvbWVkaW8gZGUgbGEgImxpbmVhIGEiIHBvZHLDrWEgZXN0YXIgZGVzZGUgMC43MiBoYXN0YSAyLjk3IHB1bnRvcyBwb3IgZW5jaW1hIGRlbGEgImxpbmVhIGIiDQoNCg0KIyMgwr9DdcOhbCBzZXLDrWEgZWwgcmFuZ28gZGUgdmFsb3JlcyBlc3BlcmFkb3MgcGFyYSBsYSBkaWZlcmVuY2lhIGRlIGVzYXMgZG9zIGzDrW5lYXMgZ2Vuw6l0aWNhcz8gDQoNCi0gRWwgcmFuZ28gZGUgZGlmZXJlbmNpYSBxdWUgcG9kZW1vcyBlc3BlcmFyIGVzdGEgZW50cmUgKDAuNzI3ODA5OSAtIDIuOTc4ODU2OCkNCg0KIyMgwr9DdcOhbCBsw61uZWEgZ2Vuw6l0aWNhIHJlY29tZW5kYXLDrWE/DQoNCi0gTm9zb3RyYXMgcmVjb21lbmRhcsOtYW1vcyBsYSBsw61uZWEgZ2Vuw6l0aWNhIEEsIHBvcnF1ZSBlc3TDoSBwb3IgZW5jaW1hIGRlIGxhIGxpbmVhIGIsIHkgZXMgcmVjb21lbmRhYmxlIHF1ZSBsb3MgY2VyZG9zIHRlbmdhbiB1biBtYXlvciBwb3JjZW50YWplIGRlIGdyYXNhIGRvcnNhbCB5YSBxdWUgZXMgdW4gaW5kaWNhZG9yIGltcG9ydGFudGUgcGFyYSB1bmEgYnVlbmEgcHJvZHVjdGl2aWRhZC4NCg0KDQojIFB1bnRvIDQNCg0KDQpDb24gbGEgbWlzbWEgYmFzZSBkZSBkYXRvcyBBTElNRU5UUk8gZGVsIHB1bnRvIDIgeSB1c2FuZG8gbGEgbWlzbWEgaW5mb3JtYWNpw7NuIChpbmdyZWRpZW50ZSBkZSBpbnRlcsOpcywgZGVwYXJ0YW1lbnRvcyB5IHZhcmlhYmxlIHJlc3B1ZXN0YSksIHJlc3BvbmRhIGxvIHNpZ3VpZW50ZToNCg0KIyMgwr9DdcOhbCBkZSBsb3MgZG9zIGRlcGFydGFtZW50b3MgcHJlc2VudGEgbWF5b3IgdmFyaWFiaWxpZGFkIHBhcmEgbGEgdmFyaWFibGUgZGUgaW50ZXLDqXM/DQoNCg0KIyMjIERlbnNpZGFkZXMNCg0KDQpgYGB7cn0NCmRhdG9zcDIgJT4lIA0KICBnZ3Bsb3QoYWVzKHggPSBlZGFkX2NvcnRlX2QsIGNvbG9yID0gZGVwYXJ0YW1lbnRvKSkgKw0KICBnZW9tX2RlbnNpdHkoKSArDQogIHNjYWxlX3hfbG9nMTAoKQ0KYGBgDQoNCg0KIyMjIFJlc3B1ZXN0YQ0KDQpQcmVzZW50YSBtYXlvciB2YXJpYWJpbGlkYWQgZWwgZGVwYXJ0YW1lbnRvIGRlbCBDZXNhciBjb24gcmVzcGVjdG8gYSBsYSBlZGFkIGRlIGNvcnRlIGRlbCBwYXN0byBCdWZmZWwgLSBDZW5jaHJ1cyBjaWxpYXJpcywgcHVlc3RvIHF1ZSBhbCBhbmFsaXphciBlbCBncmFmaWNvIGRlIGRlbnNpZGFkIHBvZGVtb3Mgb2JzZXJ2YXIgcXVlIHByZXNlbnRhIG1hcyBvc2NpbGFjaW9uZXMsIGVzdG8gZGViaWRvIGEgcXVlIGVsIGRlcGFydGFtZW50byBkZWwgQ2VzYXIgcHJlc2VudGEgbWFzIGRhdG9zIHBhcmEgZXN0ZSBwYXN0bw0KDQojIyDCv0VzIGRpZmVyZW50ZSBlc3RhZMOtc3RpY2FtZW50ZSBsYSB2YXJpYWJpbGlkYWQgZGUgYW1ib3MgZGVwYXJ0YW1lbnRvcz8NClNpIGxhIHBydWViYSBlc3RhZMOtc3RpY2Egc2UgbG8gcGVybWl0ZSwgY29uc3RydXlhIHVuIGludGVydmFsbyBkZSBjb25maWFuemEgZGVsIDk1JSBwYXJhIGNvbXBsZW1lbnRhciBzdXMgcmVzcHVlc3Rhcy4NCg0KDQojIyMgTm9ybWFsaWRhZA0KDQpgYGB7cn0NCmdncXFwbG90KGRhdGEgPSBkYXRvc3AyJGVkYWRfY29ydGVfZCkNCmBgYA0KDQotIERlIGVzdGUgZ3LDoWZpY28gcG9kZW1vcyBpbmZlcmlyIHF1ZSBsYSBkaXN0cmlidWNjacOzbiBubyBlcyBub3JtYWwsIHB1ZXN0b3MgcXVlIGxvcyBkYXRvcyAgZGUgbGEgdmFyaWVkYWQgZXN0YW4gYWxlamFkb3MgZGUgbGEgZGlhZ29uYWwgeSBzZSBzYWxlbiBkZSBsYSBiYW5kYSBkZSBjb25maWFuemENCg0KDQojIyMgIFBydWViYSBkZSBMZXZlbmUNCg0KYGBge3J9DQpsZXZlbmVUZXN0KGRhdG9zcDIkZWRhZF9jb3J0ZV9kIH4gZGF0b3NwMiRkZXBhcnRhbWVudG8pDQpgYGANCiMjIyBSZXNwdWVzdGEgDQoNCkNvbW8gZWwgdmFsb3IgUCAoPCAyLjJlLTE2KSBlcyBpbmZlcmlvciBhIG51ZXN0cm8gbml2ZWwgZGUgc2lnbmlmaWNhbmNpYSAoMC4wNSkgcG9kZW1vcyBjb25jbHVpciBxdWUgc2kgZXhpc3RlIHVuYSBkaWZlcmVuY2lhIHNpZ25pZmljYXRpdmEgZW50cmUgbGFzIHZhcmlhbnphcyBkZSBsb3MgZG9zIGRlcGFydGFtZW50b3MgY29tcGFyYWRvcy4NCg0KIyBQdW50byA1DQoNClNlIHJlYWxpemFyb24gMzAgZXhwZXJpbWVudG9zIGluZGVwZW5kaWVudGVzIGVuIGRvbmRlIHNlIGV2YWx1w7MgbGEgYWZlY2Npw7NuIGRlIHVuYSBwbGFnYSBlbiBob2phcyBkZSBjw610cmljb3MsIGVuIGNhZGEgdW5vIGRlIGVsbG9zIHNlIGNhbGN1bMOzIGVsIHByb21lZGlvIGRlbCDDoXJlYSBhZmVjdGFkYSAoZW4gcG9yY2VudGFqZSkgZGUgbGFzIGhvamFzIGJham8gYW7DoWxpc2lzLiBVdGlsaXphbmRvIHTDqWNuaWNhcyBkZSBCb290c3RyYXBwaW5nIGNvbnN0cnV5YSB1biBpbnRlcnZhbG8gZGUgY29uZmlhbnphIChjb20gYW1ib3MgbcOpdG9kb3M6IGVycm9yIGVzdMOhbmRhciB5IHBlcmNlbnRpbCkgZGVsIDk1JSBwYXJhIGVsIHByb21lZGlvIGRlbCDDoXJlYSBhZmVjdGFkYS4NCg0KDQpgYGB7cn0NCmFyZWEgPC0gYygyOS4yLCAxNy4wLCAyOC45LCAxNy4zLCAxMy44LCA1LjgsIDI3LjUsIDE4LjIsIDI3LjYsIDMwLjksDQogICAgICAgICAgMzIuOCwgMjIuNiwgMTUuMywgMjMuMywgMTIuNCwgMzAuMCwgMTkuNSwgMTcuMCwgMTguNywgMjAuNCwNCiAgICAgICAgICAxOC42LCA0NC4xLCAxNy45LCAxNy45LCAzMC4wLCAyNS4xLCAyNC4zLCAyMi4xLCAyMS44LCAyMS45KQ0KDQpgYGANCiMjIFByb21lZGlvIG11ZXN0cmENCg0KYGBge3J9DQpwcm9tZWRpb19hcmVhIDwtIG1lYW4oYXJlYSkNCnByb21lZGlvX2FyZWENCmBgYA0KDQojIyBSZW11ZXN0cmVvDQoNCmBgYHtyfQ0KZGF0b3NwNSA8LSBkYXRhLmZyYW1lKGFyZWEpIA0Kc2V0LnNlZWQoMjAyMikNCnJlbXVlc3RyZW9fcDUgPC0gZGF0b3NwNSAlPiUgDQogIHNwZWNpZnkocmVzcG9uc2UgPSBhcmVhKSAlPiUgDQogIGdlbmVyYXRlKHJlcHMgPSAxMDAwLCB0eXBlID0gImJvb3RzdHJhcCIpICU+JSANCiAgY2FsY3VsYXRlKHN0YXQgPSAibWVhbiIpDQoNCnJlbXVlc3RyZW9fcDUNCmBgYA0KDQojIyMgbWVkaWEgZGVsIHJlbXVlc3RyZW8NCg0KYGBge3J9DQpwcm9tZWRpb19yZW11ZXN0cmVvIDwtIHJlbXVlc3RyZW9fcDUkc3RhdCAlPiUgbWVhbigpDQpwcm9tZWRpb19yZW11ZXN0cmVvDQpgYGANCg0KDQojIyMgR3LDoWZpY28gZGUgcmVtdWVzdHJlbw0KDQpgYGB7cn0NCnJlbXVlc3RyZW9fcDUgJT4lIA0KICB2aXN1YWxpemUoKQ0KYGBgDQoNCiMjIEludGVydmFsbyBkZSBjb25maWFuemEgY29uIHBlcmNlbnRpbGVzICg5NSUpOg0KDQpgYGB7cn0NCmljX3A1X3BlcmNlbnRpbCA8LQ0KICByZW11ZXN0cmVvX3A1ICU+JQ0KICBnZXRfY29uZmlkZW5jZV9pbnRlcnZhbChsZXZlbCA9IDAuOTUsIHR5cGUgPSAicGVyY2VudGlsZSIpDQppY19wNV9wZXJjZW50aWwNCmBgYA0KIyMjIEdyYWZpY2Ftb3MgbG9zIGludGVydmFsb3MgZGUgY29uZmlhbnphIGNvbiBlbCBtw6l0b2RvIGRlIHBlcmNlbnRpbGVzDQoNCmBgYHtyfQ0KcmVtdWVzdHJlb19wNSAlPiUgDQogIHZpc3VhbGl6ZSgpICsNCiAgc2hhZGVfY29uZmlkZW5jZV9pbnRlcnZhbChlbmRwb2ludHMgPSBpY19wNV9wZXJjZW50aWwpDQoNCmBgYA0KDQojIyBDYWxjdWxhbW9zIGVsIGludGVydmFsbyBkZSBjb25maWFuemEgcG9yIGVsIG3DqXRvZG8gZGUgZXJyb3IgZXN0w6FuZGFyOg0KDQpgYGB7cn0NCnByb3BvcmNpb25fbXVlc3RyYWwgPC0NCiAgcHJvcC50YWJsZSh0YWJsZShhcmVhKSkNCg0KaWNfZXJyb3Jlc3RhbmRhciA8LSByZW11ZXN0cmVvX3A1ICU+JQ0KICBnZXRfY29uZmlkZW5jZV9pbnRlcnZhbChsZXZlbCA9IDAuOTUsDQogICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPSAic2UiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludF9lc3RpbWF0ZSA9IHByb21lZGlvX2FyZWEpDQoNCmljX2Vycm9yZXN0YW5kYXINCg0KDQpgYGANCiMjIyBHcmFmaWNhbW9zIGxvcyBpbnRlcnZhbG9zIGRlIGNvbmZpYW56YSBjb24gZWwgbcOpdG9kbyBkZSBlcnJvciBlc3TDoW5kYXINCg0KDQpgYGB7cn0NCnJlbXVlc3RyZW9fcDUgJT4lIA0KICB2aXN1YWxpemUoKSArDQogIHNoYWRlX2NvbmZpZGVuY2VfaW50ZXJ2YWwoZW5kcG9pbnRzID0gaWNfZXJyb3Jlc3RhbmRhcikNCmBgYA0KDQoNCiMjIEdyw6FmaWNvIGRlIGxvcyBkb3MgaW50ZXJ2YWxvcyBkZSBjb25maWFuemENCg0KYGBge3J9DQpyZW11ZXN0cmVvX3A1ICU+JQ0KICB2aXN1YWxpemUoKSArDQogIHNoYWRlX2NvbmZpZGVuY2VfaW50ZXJ2YWwoZW5kcG9pbnRzID0gaWNfcDVfcGVyY2VudGlsLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yID0gImZvcmVzdGdyZWVuIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsID0gIndoaXRlIikgKw0KICBzaGFkZV9jb25maWRlbmNlX2ludGVydmFsKGVuZHBvaW50cyA9IGljX2Vycm9yZXN0YW5kYXIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3IgPSAiZG9kZ2VyYmx1ZSIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbCA9ICJ3aGl0ZSIpICsNCiAgZ2VvbV92bGluZSh4aW50ZXJjZXB0ID0gcHJvbWVkaW9fYXJlYSwgY29sb3IgPSAicmVkIiwgbHR5ID0gMiwgc2l6ZSA9IDEuNSkgKw0KICBnZW9tX3ZsaW5lKHhpbnRlcmNlcHQgPSBwcm9tZWRpb19yZW11ZXN0cmVvLCBjb2xvciA9ICJibGFjayIsIGx0eSA9IDIsIHNpemUgPSAxLjUpIA0KYGBgDQoNCiMjIENvbmNsdXNpw7NuDQoNCi0gIFBvZGVtb3MgY29uY2x1aXIgcXVlIGVsIHByb21lZGlvIGRlbCByZW11ZXN0cmVvIGVzIGNhc2kgaWd1YWwgYWwgZGUgbGEgbXVlc3RyYSBpbmljaWFsLCBsbyBxdWUgcXVpZXJlIGRlY2lyIHF1ZSBzaSBoYWNlbW9zIG51ZXZvcyByZW11ZXN0cmVvcyBvYnRlbmRyZW1vcyBsb3MgbWlzbW9zIGludGVydmFsb3MgZGUgY29uZmlhbnphLg0KLSBUYW1iacOpbiBwb2RlbW9zIGNvbmNsdWlyIHF1ZSBjb24gYW1ib3MgbcOpdG9kb3MgZWwgaW50ZXJ2YWxvIGRlIGNvbmZpYW56YSB2YSBhIGluY2x1aXIgZWwgdmFsb3IgcmVhbCBkZWwgcHJvbWVkaW8gZGVsIMOhcmVhIGFmZWN0YWRhDQoNCg0KDQoNCg0KDQo=