Tema 4. T student

## Sesion 3
pago <- c(107,92,97,95,105,101,91,99,95,104)
t.test(pago,y=NULL,alternative="two.sided",mu=100,paired=FALSE,var.equal=FALSE,conf.level=0.90)
##
## One Sample t-test
##
## data: pago
## t = -0.79888, df = 9, p-value = 0.4449
## alternative hypothesis: true mean is not equal to 100
## 90 percent confidence interval:
## 95.38755 101.81245
## sample estimates:
## mean of x
## 98.6
# Si es de una cola, alternativa puede ser: less o greater
# si es p value es mayor a 0.10 no se rechaza H0.
# Conclusion: No se rechaza H0.
# Intervalo de confianza: Entre 95 y 101 dolares
# 8-70
### Drive-a-Lemon, renta automóviles en buenas condiciones mecánicas, pero más antiguos que aquellos que rentan las grandes cadenas nacionales de renta de coches. Como resultado, anuncia que sus tarifas son considerablemente más bajas que las de sus grandes competidores. Una encuesta en la industria estableció que el cargo total promedio por renta en una de las mayores compañías es de $77.38 dólares. Una muestra aleatoria de 18 transacciones realizadas por Drive-a-
### Lemon mostró un cargo total promedio de $87.61, con una desviación estándar de la muestra de $19.48. Verifique que, con un nivel de significancia de 0.025, el cargo total promedio de Drive-a- Lemon es más alto que el de las grandes compañías. ¿Indica este resultado que las tarifas de Drive- a-Lemon, no son más bajas que las de las grandes cadenas nacionales? Justifique su respuesta.
# Respuesta
# Paso 1: Plantear hipotesis
## H0: µ = x bar
## H1:µ > x bar
# Paso 2. Nivel de significancia y grados de Libertad
# = 0.025
# GL = 17
# Paso 3.Zona de Aceptacion/Rechazo
# t de tablas = 2.110
# Paso 4. Funcion
t <- (87.61-77.38)/(19.48/sqrt(18))
t
## [1] 2.22804
# Paso 5. CONCLUSION
# se Rechaza H0
# t = 2.28 (xbar= 87.61), tU = 2.110 (xbarU = 87.07), de modo que se rechazala hipotesis nula.
Tema 5. Anova

#install.packages("stats")
library(stats)
#Ejercicio 1
#file.choose()
resistencia <- read.csv("C:\\Users\\sebastian\\Downloads\\ANOVA Mezclas.csv")
resistencia$Mezcla <- as.factor(resistencia$Mezcla)
qr(.95,df1=3,df=20)
## $qr
## [,1]
## [1,] 0.95
##
## $rank
## [1] 1
##
## $qraux
## [1] 0.95
##
## $pivot
## [1] 1
##
## attr(,"class")
## [1] "qr"
anova1 <- aov(Valor~Mezcla, data=resistencia)
summary(anova1)
## Df Sum Sq Mean Sq F value Pr(>F)
## Mezcla 3 127375 42458 25.09 5.53e-07 ***
## Residuals 20 33839 1692
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#Ejercicio 2
file.choose()
## [1] "C:\\Users\\sebastian\\Documents\\TEC universidad\\Tec cuarto semestre LIT\\Diagnóstico para líneas de acción\\Modulo de RAUL\\WORSHOP2.Rmd"
resistencia <- read.csv("C:\\Users\\sebastian\\Downloads\\ANOVA Mezclas.csv")
resistencia$Mezcla <- as.factor(resistencia$Mezcla)
qr(.99,df1=2,df=12)
## $qr
## [,1]
## [1,] 0.99
##
## $rank
## [1] 1
##
## $qraux
## [1] 0.99
##
## $pivot
## [1] 1
##
## attr(,"class")
## [1] "qr"
anova2 <- aov(Valor~Mezcla, data=resistencia)
summary(anova2)
## Df Sum Sq Mean Sq F value Pr(>F)
## Mezcla 3 127375 42458 25.09 5.53e-07 ***
## Residuals 20 33839 1692
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Tema 6. Regresion lineal simpple

#Regresion lineal simple
#Ejercicio 1
x <- c(0.2,0.5,1,2,3)
y <-c(8,10,18,25,60)
re <- lm(x~y)
summary(re)
##
## Call:
## lm(formula = x ~ y)
##
## Residuals:
## 1 2 3 4 5
## -0.30077 -0.10438 -0.01881 0.61856 -0.19459
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.086340 0.303196 0.285 0.7943
## y 0.051804 0.009876 5.246 0.0135 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.4172 on 3 degrees of freedom
## Multiple R-squared: 0.9017, Adjusted R-squared: 0.8689
## F-statistic: 27.52 on 1 and 3 DF, p-value: 0.01349
plot(x,y,pch = 16, cex = 1.3, col="blue", main = "Ejercicio 1")
abline(lm(x~y))





#Ejercicio 2
a <- c(-6,-3,0,3,6,9,12,15,20,25)
b <-c(2,2.8,3.9,4.2,5.8,6.2,7.5,8.2,9.3,10.9)
regresion1 <- lm(a~b)
summary(regresion1)
##
## Call:
## lm(formula = a ~ b)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1.13408 -0.53806 0.09497 0.43261 1.38547
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -12.87430 0.64642 -19.92 4.21e-08 ***
## b 3.44972 0.09684 35.62 4.22e-10 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.8437 on 8 degrees of freedom
## Multiple R-squared: 0.9937, Adjusted R-squared: 0.993
## F-statistic: 1269 on 1 and 8 DF, p-value: 4.223e-10
plot(a,b,pch = 16, cex = 1.3, col="blue", main = "Ejercicio 2")
abline(lm(b~a))





Ejercicio del mundo

11-26
Un estudio compara el número de horas de alivio que proporcionan
cinco marcas de antiácidos administrados a 25 personas diferentes, cada
una con acidez estomacal considerada fuerte. Los resultados son los
siguientes:
| 4.4 |
5.8 |
4.8 |
2.9 |
4.6 |
| 4.6 |
5.2 |
5.9 |
2.7 |
4.3 |
| 4.5 |
4.9 |
4.9 |
2.9 |
3.8 |
| 4.1 |
4.7 |
4.6 |
3.9 |
5.2 |
| 3.8 |
4.6 |
4.3 |
4.3 |
4.4 |
a)Calcule el cociente F. Para un nivel de significancia de 0.05, ¿las
marcas producen cantidades significativamente diferentes de alivio a las
personas con acidez estomacal fuerte?
#a)
antiacidos <-read.csv("C:\\Users\\sebastian\\Downloads\\antiacidos.csv")
antiacidos$marca <- as.factor(antiacidos$marca)
qf(.95,df1=4,df2=20)
## [1] 2.866081
anova3 <-aov(horas ~ marca, data=antiacidos)
summary(anova3)
## Df Sum Sq Mean Sq F value Pr(>F)
## marca 4 9.006 2.2514 7.653 0.000655 ***
## Residuals 20 5.884 0.2942
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## F 7.65, Fu 2.87, de forma que rechazamos H0.
## Las marcas producen una cantidad de alivio significativamente diferente.
11-38
En la ciudad de Villagrande, una cadena de comida rápida está
adquiriendo una mala reputación debido a que tardan mucho en servirle a
los clientes. Como la cadena tiene 4 restaurantes en esta ciudad, se
tiene la preocupación si los 4 restaurantes tienen el mismo tiempo
promedio de servicio. Uno de los dueños de la cadena ha decidido visitar
cada uno de los locales y registrar el tiempo de servicio para 5
clientes escogidos al azar. En sus 4 visitas vespertinas registró los
siguientes tiempos de servicio en minutos:
| 3 |
4 |
5.5 |
3.5 |
| 3 |
3.5 |
4.5 |
4 |
| 2 |
3.5 |
5 6. |
5 |
| 3 |
4 5 |
.5 2. |
5 |
Utilizando un nivel de significancia de 0.05, ¿todos los
restaurantes tienen el mismo tiempo promedio de servicio?
Basándose en los resultados, ¿deberá el dueño hacer algunas
recomendaciones a cualquierade los administradores de los
restaurantes?
restaurante<-read.csv("C:\\Users\\sebastian\\Downloads\\restaurante.csv")
restaurante$restaurante <- as.factor(restaurante$restaurante)
qf(.95,df1=3,df2=16)
## [1] 3.238872
anova4 <- aov(tiempo ~ restaurante, data=restaurante)
summary(anova4)
## Df Sum Sq Mean Sq F value Pr(>F)
## restaurante 3 2.538 0.8458 0.509 0.682
## Residuals 16 26.600 1.6625
##a) F 0.51, Fu 3.24, no rechazamos H0. Los tiempos medios de servicio no son significativamente diferentes.
##b) Debido a que ningún restaurante es peor que los otros, cualquier recomendación tendría que hacerse a todos los administradores.
12-64
Un arrendador está interesado en ver si las rentas de sus
departamentos son las típicas. Para esto tomó una muestra aleatoria de
11 rentas y tamaños de departamentos en complejos de departamentos
similares. Los datos son los siguientes:
| 230 |
2 |
| 190 |
1 |
| 450 |
3 |
| 310 |
2 |
| 218 |
2 |
| 185 |
2 |
| 340 |
2 |
| 245 |
1 |
| 125 |
1 |
| 350 |
2 |
| 280 |
2 |
- Desarrolle la ecuación de estimación que mejor describa estos
datos.
- Calcule el coeficiente de determinación.
- Pronostique la renta para un departamento de dos recámaras.
# a)
renta <- c(230,190,450,310,218,185,340,245,125,350,280)
recamaras <- c(2,1,3,2,2,2,2,1,1,2,2)
regresion3 <- lm(renta~recamaras)
summary(regresion3)
##
## Call:
## lm(formula = renta ~ recamaras)
##
## Residuals:
## Min 1Q Median 3Q Max
## -101.80 -51.35 19.10 50.25 74.10
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 55.00 63.19 0.870 0.40667
## recamaras 115.90 33.13 3.498 0.00675 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 63.19 on 9 degrees of freedom
## Multiple R-squared: 0.5762, Adjusted R-squared: 0.5291
## F-statistic: 12.23 on 1 and 9 DF, p-value: 0.006746
# Renta = 55.00 + 115.90*Recamaras
# b)
# r2= 0.5762
# c)
recamaras1 <- 2
renta1 <- 55+155.90*recamaras1
renta1
## [1] 366.8
- F 0.51, Fu 3.24, no rechazamos H0. Los tiempos medios de servicio
no son significativamente diferentes.
- Debido a que ningún restaurante es peor que los otros, cualquier
recomendación tendría que hacerse a todos los administradores.
LS0tDQp0aXRsZTogIldPUktTSE9QIDIiDQphdXRob3I6ICJTZWJhc3RpYW4gRXNwaW5vemEgQTAwODMzNzA0Ig0KZGF0ZTogIjIwMjMtMDUtMTgiDQpvdXRwdXQ6IA0KICBodG1sX2RvY3VtZW50Og0KICAgIHRvYzogVFJVRQ0KICAgIHRvY19mbG9hdDogVFJVRQ0KICAgIGNvZGVfZG93bmxvYWQ6IFRSVUUNCiAgICB0aGVtZTogdW5pdGVkDQogICAgaGlnaGxpZ2h0OiB0YW5nbw0KLS0tDQoNCg0KIyA8c3BhbiBzdHlsZSA9ImNvbG9yOiBncmVlbjsiPlRlbWEgNC4gVCBzdHVkZW50IDwvc3Bhbj4NCg0KIVtdKEM6XFxVc2Vyc1xcc2ViYXN0aWFuXFxEb3dubG9hZHNcXGU1MjdkNmVjNWU3Nzk2ZjJkMTlkODdhOTQ5Y2VkZmE3LmdpZikNCg0KYGBge3J9DQojIyBTZXNpb24gMw0KDQpwYWdvIDwtIGMoMTA3LDkyLDk3LDk1LDEwNSwxMDEsOTEsOTksOTUsMTA0KQ0KdC50ZXN0KHBhZ28seT1OVUxMLGFsdGVybmF0aXZlPSJ0d28uc2lkZWQiLG11PTEwMCxwYWlyZWQ9RkFMU0UsdmFyLmVxdWFsPUZBTFNFLGNvbmYubGV2ZWw9MC45MCkNCiMgU2kgZXMgZGUgdW5hIGNvbGEsIGFsdGVybmF0aXZhIHB1ZWRlIHNlcjogbGVzcyBvIGdyZWF0ZXINCiMgc2kgZXMgcCB2YWx1ZSBlcyBtYXlvciBhIDAuMTAgbm8gc2UgcmVjaGF6YSBIMC4NCg0KIyBDb25jbHVzaW9uOiBObyBzZSByZWNoYXphIEgwLg0KIyBJbnRlcnZhbG8gZGUgY29uZmlhbnphOiBFbnRyZSA5NSB5IDEwMSBkb2xhcmVzDQoNCg0KIyA4LTcwDQojIyMgRHJpdmUtYS1MZW1vbiwgcmVudGEgYXV0b23Ds3ZpbGVzIGVuIGJ1ZW5hcyBjb25kaWNpb25lcyBtZWPDoW5pY2FzLCBwZXJvIG3DoXMgYW50aWd1b3MgcXVlIGFxdWVsbG9zIHF1ZSByZW50YW4gbGFzIGdyYW5kZXMgY2FkZW5hcyBuYWNpb25hbGVzIGRlIHJlbnRhIGRlIGNvY2hlcy4gQ29tbyByZXN1bHRhZG8sIGFudW5jaWEgcXVlIHN1cyB0YXJpZmFzIHNvbiBjb25zaWRlcmFibGVtZW50ZSBtw6FzIGJhamFzIHF1ZSBsYXMgZGUgc3VzIGdyYW5kZXMgY29tcGV0aWRvcmVzLiBVbmEgZW5jdWVzdGEgZW4gbGEgaW5kdXN0cmlhIGVzdGFibGVjacOzIHF1ZSBlbCBjYXJnbyB0b3RhbCBwcm9tZWRpbyBwb3IgcmVudGEgZW4gdW5hIGRlIGxhcyBtYXlvcmVzIGNvbXBhw7HDrWFzIGVzIGRlICQ3Ny4zOCBkw7NsYXJlcy4gVW5hIG11ZXN0cmEgYWxlYXRvcmlhIGRlIDE4IHRyYW5zYWNjaW9uZXMgcmVhbGl6YWRhcyBwb3IgRHJpdmUtYS0NCiMjIyBMZW1vbiBtb3N0csOzIHVuIGNhcmdvIHRvdGFsIHByb21lZGlvIGRlICQ4Ny42MSwgY29uIHVuYSBkZXN2aWFjacOzbiBlc3TDoW5kYXIgZGUgbGEgbXVlc3RyYSBkZSAkMTkuNDguIFZlcmlmaXF1ZSBxdWUsIGNvbiB1biBuaXZlbCBkZSBzaWduaWZpY2FuY2lhIGRlIDAuMDI1LCBlbCBjYXJnbyB0b3RhbCBwcm9tZWRpbyBkZSBEcml2ZS1hLSBMZW1vbiBlcyBtw6FzIGFsdG8gcXVlIGVsIGRlIGxhcyBncmFuZGVzIGNvbXBhw7HDrWFzLiDCv0luZGljYSBlc3RlIHJlc3VsdGFkbyBxdWUgbGFzIHRhcmlmYXMgZGUgRHJpdmUtIGEtTGVtb24sIG5vIHNvbiBtw6FzIGJhamFzIHF1ZSBsYXMgZGUgbGFzIGdyYW5kZXMgY2FkZW5hcyBuYWNpb25hbGVzPyBKdXN0aWZpcXVlIHN1IHJlc3B1ZXN0YS4NCg0KIyBSZXNwdWVzdGENCg0KIyBQYXNvIDE6IFBsYW50ZWFyIGhpcG90ZXNpcw0KIyMgSDA6IMK1ID0geCBiYXINCiMjIEgxOsK1ID4geCBiYXINCg0KIyBQYXNvIDIuIE5pdmVsIGRlIHNpZ25pZmljYW5jaWEgeSBncmFkb3MgZGUgTGliZXJ0YWQNCiMgPSAwLjAyNQ0KIyBHTCA9IDE3DQoNCiMgUGFzbyAzLlpvbmEgZGUgQWNlcHRhY2lvbi9SZWNoYXpvDQojICB0IGRlIHRhYmxhcyA9IDIuMTEwDQoNCiMgUGFzbyA0LiBGdW5jaW9uDQogdCA8LSAoODcuNjEtNzcuMzgpLygxOS40OC9zcXJ0KDE4KSkNCiB0DQogDQogIyBQYXNvIDUuIENPTkNMVVNJT04gDQogIyAgc2UgUmVjaGF6YSBIMA0KICMgdCA9IDIuMjggKHhiYXI9IDg3LjYxKSwgdFUgPSAyLjExMCAoeGJhclUgPSA4Ny4wNyksIGRlIG1vZG8gcXVlIHNlIHJlY2hhemFsYSBoaXBvdGVzaXMgbnVsYS4NCmBgYA0KDQojIDxzcGFuIHN0eWxlID0iY29sb3I6IGdyZWVuOyI+VGVtYSA1LiBBbm92YTwvc3Bhbj4NCg0KIVtdKEM6XFxVc2Vyc1xcc2ViYXN0aWFuXFxEb3dubG9hZHNcXEEzd21OYi5naWYpDQpgYGB7cn0NCiNpbnN0YWxsLnBhY2thZ2VzKCJzdGF0cyIpDQpsaWJyYXJ5KHN0YXRzKQ0KDQojRWplcmNpY2lvIDENCiNmaWxlLmNob29zZSgpDQpyZXNpc3RlbmNpYSA8LSByZWFkLmNzdigiQzpcXFVzZXJzXFxzZWJhc3RpYW5cXERvd25sb2Fkc1xcQU5PVkEgTWV6Y2xhcy5jc3YiKQ0KcmVzaXN0ZW5jaWEkTWV6Y2xhIDwtIGFzLmZhY3RvcihyZXNpc3RlbmNpYSRNZXpjbGEpDQpxciguOTUsZGYxPTMsZGY9MjApDQphbm92YTEgPC0gYW92KFZhbG9yfk1lemNsYSwgZGF0YT1yZXNpc3RlbmNpYSkNCnN1bW1hcnkoYW5vdmExKQ0KDQojRWplcmNpY2lvIDINCmZpbGUuY2hvb3NlKCkNCnJlc2lzdGVuY2lhIDwtIHJlYWQuY3N2KCJDOlxcVXNlcnNcXHNlYmFzdGlhblxcRG93bmxvYWRzXFxBTk9WQSBNZXpjbGFzLmNzdiIpDQpyZXNpc3RlbmNpYSRNZXpjbGEgPC0gYXMuZmFjdG9yKHJlc2lzdGVuY2lhJE1lemNsYSkNCnFyKC45OSxkZjE9MixkZj0xMikNCmFub3ZhMiA8LSBhb3YoVmFsb3J+TWV6Y2xhLCBkYXRhPXJlc2lzdGVuY2lhKQ0Kc3VtbWFyeShhbm92YTIpDQoNCmBgYA0KDQoNCiMgPHNwYW4gc3R5bGUgPSJjb2xvcjogZ3JlZW47Ij5UZW1hIDYuIFJlZ3Jlc2lvbiBsaW5lYWwgc2ltcHBsZQ0KIVtdKEM6XFxVc2Vyc1xcc2ViYXN0aWFuXFxEb3dubG9hZHNcXGdpcGh5LTIwMi5naWYpDQpgYGB7cn0NCiNSZWdyZXNpb24gbGluZWFsIHNpbXBsZQ0KI0VqZXJjaWNpbyAxDQoNCnggPC0gYygwLjIsMC41LDEsMiwzKQ0KeSA8LWMoOCwxMCwxOCwyNSw2MCkNCg0KcmUgPC0gbG0oeH55KQ0Kc3VtbWFyeShyZSkNCnBsb3QoeCx5LHBjaCA9IDE2LCBjZXggPSAxLjMsIGNvbD0iYmx1ZSIsIG1haW4gPSAiRWplcmNpY2lvIDEiKQ0KYWJsaW5lKGxtKHh+eSkpDQpwbG90KHJlKQ0KDQojRWplcmNpY2lvIDINCmEgPC0gYygtNiwtMywwLDMsNiw5LDEyLDE1LDIwLDI1KQ0KYiA8LWMoMiwyLjgsMy45LDQuMiw1LjgsNi4yLDcuNSw4LjIsOS4zLDEwLjkpDQoNCnJlZ3Jlc2lvbjEgPC0gbG0oYX5iKQ0Kc3VtbWFyeShyZWdyZXNpb24xKQ0KcGxvdChhLGIscGNoID0gMTYsIGNleCA9IDEuMywgY29sPSJibHVlIiwgbWFpbiA9ICJFamVyY2ljaW8gMiIpDQphYmxpbmUobG0oYn5hKSkNCnBsb3QocmVncmVzaW9uMSkNCmBgYA0KDQojIDxzcGFuIHN0eWxlID0iY29sb3I6IGdyZWVuOyI+IEVqZXJjaWNpbyBkZWwgbXVuZG8gPC9zcGFuPg0KDQohW10oQzpcXFVzZXJzXFxzZWJhc3RpYW5cXERvd25sb2Fkc1xcaW1hZ2VzLmpwZWcpDQoNCiMjICoqMTEtMjYqKg0KVW4gZXN0dWRpbyBjb21wYXJhIGVsIG7Dum1lcm8gZGUgaG9yYXMgZGUgYWxpdmlvIHF1ZSBwcm9wb3JjaW9uYW4gY2luY28gbWFyY2FzIGRlIGFudGnDoWNpZG9zIGFkbWluaXN0cmFkb3MgYSAyNSBwZXJzb25hcyBkaWZlcmVudGVzLCBjYWRhIHVuYSBjb24gYWNpZGV6IGVzdG9tYWNhbCBjb25zaWRlcmFkYSBmdWVydGUuIExvcyByZXN1bHRhZG9zIHNvbiBsb3MNCnNpZ3VpZW50ZXM6DQoNCkEgfCBCIHwgQyB8IEQgfCBFDQo6LS0tLS0tLS0tLS0tLS06fDotLS0tLS0tLS0tLS0tLTp8Oi0tLS0tLS0tLS0tLS0tOnw6LS0tLS0tLS0tLS0tLS06fDotLS0tLS0tLS0tLS0tLToNCjQuNCB8IDUuOCB8IDQuOCB8IDIuOSB8IDQuNg0KNC42IHwgNS4yIHwgNS45IHwgMi43IHwgNC4zDQo0LjUgfCA0LjkgfCA0LjkgfCAyLjkgfCAzLjgNCjQuMSB8IDQuNyB8IDQuNiB8IDMuOSB8IDUuMg0KMy44IHwgNC42IHwgNC4zIHwgNC4zIHwgNC40DQoNCmEpQ2FsY3VsZSBlbCBjb2NpZW50ZSBGLiBQYXJhIHVuIG5pdmVsIGRlIHNpZ25pZmljYW5jaWEgZGUgMC4wNSwgwr9sYXMgbWFyY2FzIHByb2R1Y2VuIGNhbnRpZGFkZXMgc2lnbmlmaWNhdGl2YW1lbnRlIGRpZmVyZW50ZXMgZGUgYWxpdmlvIGEgbGFzIHBlcnNvbmFzIGNvbiBhY2lkZXogZXN0b21hY2FsIGZ1ZXJ0ZT8NCg0KYGBge3J9DQojYSkNCmFudGlhY2lkb3MgPC1yZWFkLmNzdigiQzpcXFVzZXJzXFxzZWJhc3RpYW5cXERvd25sb2Fkc1xcYW50aWFjaWRvcy5jc3YiKQ0KYW50aWFjaWRvcyRtYXJjYSA8LSBhcy5mYWN0b3IoYW50aWFjaWRvcyRtYXJjYSkNCnFmKC45NSxkZjE9NCxkZjI9MjApDQphbm92YTMgPC1hb3YoaG9yYXMgfiBtYXJjYSwgZGF0YT1hbnRpYWNpZG9zKQ0Kc3VtbWFyeShhbm92YTMpDQojIyBGICA3LjY1LCBGdSAgMi44NywgZGUgZm9ybWEgcXVlIHJlY2hhemFtb3MgSDAuIA0KIyMgTGFzIG1hcmNhcyBwcm9kdWNlbiB1bmEgY2FudGlkYWQgZGUgYWxpdmlvIHNpZ25pZmljYXRpdmFtZW50ZSBkaWZlcmVudGUuIA0KYGBgDQoNCiMjICoqMTEtMzgqKg0KRW4gbGEgY2l1ZGFkIGRlIFZpbGxhZ3JhbmRlLCB1bmEgY2FkZW5hIGRlIGNvbWlkYSByw6FwaWRhIGVzdMOhIGFkcXVpcmllbmRvIHVuYSBtYWxhIHJlcHV0YWNpw7NuIGRlYmlkbyBhIHF1ZSB0YXJkYW4gbXVjaG8gZW4gc2VydmlybGUgYSBsb3MgY2xpZW50ZXMuIENvbW8gbGEgY2FkZW5hIHRpZW5lIDQgcmVzdGF1cmFudGVzIGVuIGVzdGEgY2l1ZGFkLCBzZSB0aWVuZSBsYSBwcmVvY3VwYWNpw7NuIHNpIGxvcyA0IHJlc3RhdXJhbnRlcyB0aWVuZW4gZWwgbWlzbW8gdGllbXBvIHByb21lZGlvIGRlIHNlcnZpY2lvLiBVbm8gZGUgbG9zIGR1ZcOxb3MgZGUgbGEgY2FkZW5hIGhhIGRlY2lkaWRvIHZpc2l0YXIgY2FkYSB1bm8gZGUgbG9zIGxvY2FsZXMgeSByZWdpc3RyYXIgZWwgdGllbXBvIGRlIHNlcnZpY2lvIHBhcmEgNSBjbGllbnRlcyBlc2NvZ2lkb3MgYWwgYXphci4gRW4gc3VzIDQgdmlzaXRhcyB2ZXNwZXJ0aW5hcyByZWdpc3Ryw7MgbG9zIHNpZ3VpZW50ZXMgdGllbXBvcyBkZSBzZXJ2aWNpbyBlbiBtaW51dG9zOg0KDQpSZXN0YXVyYW50ZSB8IFJlc3RhdXJhbnRlIDIgfCBSZXN0YXVyYW50ZSAzIHwgUmVzdGF1cmFudGUgNA0KOi0tLS0tLS0tLS0tLS0tOnw6LS0tLS0tLS0tLS0tLS06fDotLS0tLS0tLS0tLS0tLTp8Oi0tLS0tLS0tLS0tLS0tOnwNCjMgfCA0IHwgNS41IHwzLjV8IDQNCjMgfDMuNXwgNC41IHwgNCB8IDUuNQ0KMiB8My41fCA1IDYufDUgIHw2DQozIHw0IDV8LjUgMi58NSAgfDMNCg0KYSkgVXRpbGl6YW5kbyB1biBuaXZlbCBkZSBzaWduaWZpY2FuY2lhIGRlIDAuMDUsIMK/dG9kb3MgbG9zIHJlc3RhdXJhbnRlcyB0aWVuZW4gZWwgbWlzbW8gdGllbXBvIHByb21lZGlvIGRlIHNlcnZpY2lvPw0KDQpiKSBCYXPDoW5kb3NlIGVuIGxvcyByZXN1bHRhZG9zLCDCv2RlYmVyw6EgZWwgZHVlw7FvIGhhY2VyIGFsZ3VuYXMgcmVjb21lbmRhY2lvbmVzIGEgY3VhbHF1aWVyYWRlIGxvcyBhZG1pbmlzdHJhZG9yZXMgZGUgbG9zIHJlc3RhdXJhbnRlcz8NCmBgYHtyfQ0KcmVzdGF1cmFudGU8LXJlYWQuY3N2KCJDOlxcVXNlcnNcXHNlYmFzdGlhblxcRG93bmxvYWRzXFxyZXN0YXVyYW50ZS5jc3YiKQ0KDQpyZXN0YXVyYW50ZSRyZXN0YXVyYW50ZSA8LSBhcy5mYWN0b3IocmVzdGF1cmFudGUkcmVzdGF1cmFudGUpDQpxZiguOTUsZGYxPTMsZGYyPTE2KQ0KYW5vdmE0IDwtIGFvdih0aWVtcG8gfiByZXN0YXVyYW50ZSwgZGF0YT1yZXN0YXVyYW50ZSkNCnN1bW1hcnkoYW5vdmE0KQ0KDQojI2EpIEYgIDAuNTEsIEZ1ICAzLjI0LCBubyByZWNoYXphbW9zIEgwLiBMb3MgdGllbXBvcyBtZWRpb3MgZGUgc2VydmljaW8gbm8gc29uIHNpZ25pZmljYXRpdmFtZW50ZSBkaWZlcmVudGVzLg0KDQojI2IpIERlYmlkbyBhIHF1ZSBuaW5nw7puIHJlc3RhdXJhbnRlIGVzIHBlb3IgcXVlIGxvcyBvdHJvcywgY3VhbHF1aWVyIHJlY29tZW5kYWNpw7NuIHRlbmRyw61hIHF1ZSBoYWNlcnNlIGEgdG9kb3MgbG9zIGFkbWluaXN0cmFkb3Jlcy4NCmBgYA0KDQojIyAqKjEyLTY0KioNCg0KVW4gYXJyZW5kYWRvciBlc3TDoSBpbnRlcmVzYWRvIGVuIHZlciBzaSBsYXMgcmVudGFzIGRlIHN1cyBkZXBhcnRhbWVudG9zIHNvbiBsYXMgdMOtcGljYXMuIFBhcmEgZXN0byB0b23DsyB1bmEgbXVlc3RyYSBhbGVhdG9yaWEgZGUgMTEgcmVudGFzIHkgdGFtYcOxb3MgZGUgZGVwYXJ0YW1lbnRvcyBlbiBjb21wbGVqb3MgZGUgZGVwYXJ0YW1lbnRvcyBzaW1pbGFyZXMuIExvcyBkYXRvcyBzb24gbG9zIHNpZ3VpZW50ZXM6DQoNClJlbnRhIChkw7NsYXJlcykgfCBOby5SZWPDoW1hcmFzDQo6LS0tLS0tLS0tLS0tLS06fDotLS0tLS0tLS0tLS0tLToNCjIzMCB8IDINCjE5MCB8IDENCjQ1MCB8IDMgDQozMTAgfCAyDQoyMTggfCAyDQoxODUgfCAyDQozNDAgfCAyDQoyNDUgfCAxDQoxMjUgfCAxDQozNTAgfCAyDQoyODAgfCAyDQoNCmEpIERlc2Fycm9sbGUgbGEgZWN1YWNpw7NuIGRlIGVzdGltYWNpw7NuIHF1ZSBtZWpvciBkZXNjcmliYSBlc3RvcyBkYXRvcy4NCmIpIENhbGN1bGUgZWwgY29lZmljaWVudGUgZGUgZGV0ZXJtaW5hY2nDs24uDQpjKSBQcm9ub3N0aXF1ZSBsYSByZW50YSBwYXJhIHVuIGRlcGFydGFtZW50byBkZcKgZG9zwqByZWPDoW1hcmFzLg0KYGBge3J9DQoNCiMgYSkNCnJlbnRhIDwtIGMoMjMwLDE5MCw0NTAsMzEwLDIxOCwxODUsMzQwLDI0NSwxMjUsMzUwLDI4MCkNCnJlY2FtYXJhcyA8LSBjKDIsMSwzLDIsMiwyLDIsMSwxLDIsMikNCg0KcmVncmVzaW9uMyA8LSBsbShyZW50YX5yZWNhbWFyYXMpDQpzdW1tYXJ5KHJlZ3Jlc2lvbjMpDQojIFJlbnRhID0gNTUuMDAgKyAxMTUuOTAqUmVjYW1hcmFzDQoNCiMgYikgDQojIHIyPSAwLjU3NjINCg0KIyBjKQ0KcmVjYW1hcmFzMSA8LSAyDQpyZW50YTEgPC0gNTUrMTU1LjkwKnJlY2FtYXJhczENCnJlbnRhMQ0KIyAkMjg2LjgwDQpgYGANCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQphKSBGIAcgMC41MSwgRnUgByAzLjI0LCBubyByZWNoYXphbW9zIEgwLiBMb3MgdGllbXBvcyBtZWRpb3MgZGUgc2VydmljaW8gbm8gc29uIHNpZ25pZmljYXRpdmFtZW50ZQ0KZGlmZXJlbnRlcy4NCmIpIERlYmlkbyBhIHF1ZSBuaW5nw7puIHJlc3RhdXJhbnRlIGVzIHBlb3IgcXVlIGxvcyBvdHJvcywgY3VhbHF1aWVyIHJlY29tZW5kYWNpw7NuIHRlbmRyw61hIHF1ZSBoYWNlcnNlDQphIHRvZG9zIGxvcyBhZG1pbmlzdHJhZG9yZXMuDQo=