El conjunto de datos 401KSUBS.RAW contiene informacón de la situación financiera neta (nettfa), edad (age), renta familiar anual (inc), tamaño de la familia (fsize), y participación en cierto tipo de planes de pensiones en USA. Lo sdatos de la riqueza financiera y la renta se miden en miles de dólares. Para esta pregunta vamos a usar sólo hogares con un individuo (fsize=1).


1. Indica el número de hogares con fsize=1.

datos <- filter(datos, fsize==1)

El número de hogares con fsize=1 es:

[1] 2017

2. Estima por MCO el modelo \[ nettfa = \beta_0 + \beta_1 inc + \beta_2 age + u \] Interpreta los coeficientes.

mod1 <- lm(nettfa ~ inc + age)
mod1.s <- summary(mod1)
mod1.s

Call:
lm(formula = nettfa ~ inc + age)

Residuals:
    Min      1Q  Median      3Q     Max 
-179.95  -14.16   -3.42    6.03 1113.94 

Coefficients:
             Estimate Std. Error t value Pr(>|t|)    
(Intercept) -43.03981    4.08039 -10.548   <2e-16 ***
inc           0.79932    0.05973  13.382   <2e-16 ***
age           0.84266    0.09202   9.158   <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 44.68 on 2014 degrees of freedom
Multiple R-squared:  0.1193,    Adjusted R-squared:  0.1185 
F-statistic: 136.5 on 2 and 2014 DF,  p-value: < 2.2e-16

En este modelo todos los coeficientes son significativos y por tanto inc y age tienen influencia sobre la variable nettfa.

El coeficiente β2 = 0.79932 indica el cambio en la variable nettfa cuando la variable inc aumenta una unidad.

El coeficiente β3 = 0.84266 indica el cambio en la variable nettfa cuando la variable age aumenta una unidad.

En ambos casos los coeficientes son positivos por lo que a mayor edad o mayores ingresos mayor será el valor que tome la variable nettfa


3. Indica la interpretación que tiene en este caso el término independiente.

El término independiente nos indica el valor que toma la variable respuesta cuando todas las varibles independientes toman el valor 0. En este caso no nos proporciona ninguna información ya que tomar una persona con edad 0 es absurdo, se verá más adelante que la edad minima de la base de datos es de 25 años por lo que tomar edad 0 es además una extrapolación muy alejada.


4. Calcula el p-valor del contraste H0: β2 = 1 frente a H1: β2 < 1 y la conclusión con una significatividad del 1%.

El p-valor es de:

B2 <- as.numeric(mod1$coefficients[3])
se.B2 <- mod1.s$coefficients[3,2]
t <- (B2-1)/se.B2
pvalor <- pnorm(t)
pvalor
[1] 0.04363812

Para un nivel de significación del 1% rechazaríamos la H0: β2 = 1 y por tanto concluimos que β2 < 1 para ese nivel de significación.


5. Realiza la regresión simple de nettfa sobre inc y comprueba las diferencias.

mod2 <- lm(nettfa ~ inc)
mod2.s <- summary(mod2)
mod2.s

Call:
lm(formula = nettfa ~ inc)

Residuals:
    Min      1Q  Median      3Q     Max 
-185.12  -12.85   -4.85    1.78 1112.66 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept) -10.5709     2.0607   -5.13 3.18e-07 ***
inc           0.8207     0.0609   13.48  < 2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 45.59 on 2015 degrees of freedom
Multiple R-squared:  0.08267,   Adjusted R-squared:  0.08222 
F-statistic: 181.6 on 1 and 2015 DF,  p-value: < 2.2e-16

La significatividad global de los modelos sigue siendo la misma p-value: < 2.2e-16 y también todos los coeficientes son significativos en este modelo, sin embargo al quitar age del modelo hemos perdido la información proporcionada por esa variable.

El R2 ajustado es de 0.08222 comparado con 0.1185 del modelo anterior debido a esta pérdida de información. El modelo más adecuado es el inicial que incluye la variable age.


6. Indica la edad mínima de los individuos y el número de los que tienen dicha edad.

Edad minima:

min(age)
[1] 25

Número de individuos con 25 años:

sum(age==min(age))
[1] 99

7. En el modelo \[ nettfa = \beta_0 + \beta_1 inc + \beta_2 age + \beta_3 age^2 + u \] indica la interpretación de β2 y si es interesante.

En este caso no nos indica el cambio de la variable nettfa cuando a la variable age aumenta una unidad ya que es imposible mantener agesq constante cuando cambia la variable age, los cambios producidos en nettfa vienen dados por β2 y β3 por lo que β2 individualmente no es muy útil.


8. Estima el modelo anterior e indica si tiene importancia el signo de β2.

mod3 <- lm(nettfa ~ inc + age + agesq)
mod3.s <- summary(mod3)
mod3.s

Call:
lm(formula = nettfa ~ inc + age + agesq)

Residuals:
    Min      1Q  Median      3Q     Max 
-179.36  -13.58   -2.97    5.67 1116.45 

Coefficients:
             Estimate Std. Error t value Pr(>|t|)    
(Intercept) -1.204212  15.280666  -0.079  0.93719    
inc          0.824816   0.060298  13.679  < 2e-16 ***
age         -1.321815   0.767496  -1.722  0.08518 .  
agesq        0.025562   0.008999   2.841  0.00455 ** 
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 44.6 on 2013 degrees of freedom
Multiple R-squared:  0.1229,    Adjusted R-squared:  0.1216 
F-statistic: 93.99 on 3 and 2013 DF,  p-value: < 2.2e-16

El signo negativo en β2 nos indica que cuando aumenta la edad la variable nettfa disminuye, sin embargo, este efecto se ve reducido por la variable agesq que al ser de signo positivo hace que cuando aumente la edad la disminución de nettfa sea cada vez menor, llegando a un punto en el que el aumento de la edad provoca un aumento en nettfa (a los 25 años aproximadamente).

En caso de que tanto el signo de β2 y β2 fuesen positivos un cambio en la edad provocaría un aumento en nettfa independientemente de la edad que sea.


9. Realiza un contraste para comprobar si la edad tiene infuencia en nettfa.

mod7 <- lm(nettfa ~ age)
mod7.s <- summary(mod7)
mod7.s

Call:
lm(formula = nettfa ~ age)

Residuals:
    Min      1Q  Median      3Q     Max 
-152.39  -15.60   -6.10    1.71 1121.64 

Coefficients:
             Estimate Std. Error t value Pr(>|t|)    
(Intercept) -21.39210    3.90806  -5.474 4.95e-08 ***
age           0.89075    0.09592   9.286  < 2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 46.62 on 2015 degrees of freedom
Multiple R-squared:  0.04104,   Adjusted R-squared:  0.04056 
F-statistic: 86.23 on 1 and 2015 DF,  p-value: < 2.2e-16

La variable age tiene un p-valor de < 2e-16 que es claramente significativo y por tanto la edad tiene influencia sobre la variable nettfa.


10. Debido a que los más jóvenes de la muestra tienen 25 años, tiene sentido pensar que, para un determinado nivel de renta, el nivel medio mínimo de riqueza se va a dar a los 25 años. El efecto parcial de la edad sobre la riqueza a los 25 años es β2 + 50β3. Llama a esta cantidad θ2. Calcula el estimador de θ2 y el p-valor bilateral para contrastar la hipótesis H0: θ2 = 0.

MÉTODO 1

#Estimacion de theta
o2 <- as.numeric(mod3$coefficients[3] + 50 * mod3$coefficients[4])
#Matriz de covarianzas
covs <- mod3.s$sigma^2*mod3.s$cov.unscaled
#Estimación del error estándar
se.o2 <- sqrt(covs[3,3]+50^2*covs[4,4]+100*covs[3,4])
t <- o2/se.o2
pvalor <- 2*min(pnorm(t),1-pnorm(t))
pvalor
[1] 0.8931385

MÉTODO 2

θ2 = β2 + 50β3

Despejando:

β2 = θ2 - 50 β3

Substituyendo en \[ nettfa = \beta_0 + \beta_1 inc + \beta_2 age + \beta_3 age^2 + u \] obtenemos: \[ nettfa = \beta_0 + \beta_1 inc + (\theta_2-50\beta_3) age + \beta_3 age^2 + u \] \[ nettfa = \beta_0 + \beta_1 inc + \theta_2 age + \beta_3 (age^2 -50age)+ u \] Con esto solo bastaría estimar los coeficientes del modelo y ver la significatividad de θ2

mod4 <- lm(nettfa ~ inc + age + I(agesq-50*age))
mod4.s <- summary(mod4)
mod4.s

Call:
lm(formula = nettfa ~ inc + age + I(agesq - 50 * age))

Residuals:
    Min      1Q  Median      3Q     Max 
-179.36  -13.58   -2.97    5.67 1116.45 

Coefficients:
                     Estimate Std. Error t value Pr(>|t|)    
(Intercept)         -1.204212  15.280666  -0.079  0.93719    
inc                  0.824816   0.060298  13.679  < 2e-16 ***
age                 -0.043695   0.325270  -0.134  0.89315    
I(agesq - 50 * age)  0.025562   0.008999   2.841  0.00455 ** 
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 44.6 on 2013 degrees of freedom
Multiple R-squared:  0.1229,    Adjusted R-squared:  0.1216 
F-statistic: 93.99 on 3 and 2013 DF,  p-value: < 2.2e-16

Como vemos en ambos métodos el p-valor es aproximadamente el mismo: 0.8931, no podemos rechazar la H0 claramente y por tanto concluimos que el efecto parcial de la edad sobre nettfa a los 25 años es 0, o bien que no influye en el modelo.


11. Dado que la evidencia frente a H0: θ2 = 0 es muy débil, lo igualamos a cero y estimamos el modelo \[ nettfa = \alpha_0 + \beta_1 inc + \beta_3 (age - 25)^2 + u \] Indica si este modelo es mejor que el del apartado 7.

mod5 <- lm(nettfa ~ inc + I((age-25)^2))
mod5.s <- summary(mod5)
mod5.s

Call:
lm(formula = nettfa ~ inc + I((age - 25)^2))

Residuals:
    Min      1Q  Median      3Q     Max 
-179.37  -13.61   -3.01    5.63 1116.34 

Coefficients:
                  Estimate Std. Error t value Pr(>|t|)    
(Intercept)     -18.488105   2.177584  -8.490   <2e-16 ***
inc               0.823571   0.059567  13.826   <2e-16 ***
I((age - 25)^2)   0.024403   0.002541   9.605   <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 44.59 on 2014 degrees of freedom
Multiple R-squared:  0.1229,    Adjusted R-squared:  0.122 
F-statistic:   141 on 2 and 2014 DF,  p-value: < 2.2e-16

En este modelo todas las variables son significativas incluyendo la constante. Además el R2 ajustado mejorá de 0.1216 a 0122

mtable(mod3, mod5)

Calls:
mod3: lm(formula = nettfa ~ inc + age + agesq)
mod5: lm(formula = nettfa ~ inc + I((age - 25)^2))

===========================================
                      mod3        mod5     
-------------------------------------------
  (Intercept)       -1.204     -18.488***  
                   (15.281)     (2.178)    
  inc                0.825***    0.824***  
                    (0.060)     (0.060)    
  age               -1.322                 
                    (0.767)                
  agesq              0.026**               
                    (0.009)                
  I((age - 25)^2)                0.024***  
                                (0.003)    
-------------------------------------------
  R-squared              0.1         0.1   
  adj. R-squared         0.1         0.1   
  sigma                 44.6        44.6   
  F                     94.0       141.0   
  p                      0.0         0.0   
  Log-likelihood    -10520.2    -10520.2   
  Deviance         4004994.3   4005030.2   
  AIC                21050.5     21048.5   
  BIC                21078.5     21070.9   
  N                   2017        2017     
===========================================

Otros estadísticos como el AIC y el BIC también mejoran ligeramente por lo que es preferible este modelo al del apartado 7.

anova(mod3, mod5)
Analysis of Variance Table

Model 1: nettfa ~ inc + age + agesq
Model 2: nettfa ~ inc + I((age - 25)^2)
  Res.Df     RSS Df Sum of Sq     F Pr(>F)
1   2013 4004994                          
2   2014 4005030 -1   -35.903 0.018 0.8932

Vemos que si comparamos ambos modelos son significativamente iguales con la única diferencia del termino θ2 que hemos quitado y de ahi el p-valor de 0.8932, sin embargo, por lo comentado en este apartado es preferible quedarse con el segundo modelo.


12. Compruebe si es necesario incluir el término cuadrático de inc.

mod6 <- lm(nettfa ~ inc +  I((age - 25)^2) + incsq)
mod6.s <- summary(mod6)
mod6.s

Call:
lm(formula = nettfa ~ inc + I((age - 25)^2) + incsq)

Residuals:
    Min      1Q  Median      3Q     Max 
-179.46  -13.66   -3.00    5.76 1116.08 

Coefficients:
                  Estimate Std. Error t value Pr(>|t|)    
(Intercept)     -1.930e+01  3.688e+00  -5.234 1.83e-07 ***
inc              8.722e-01  1.877e-01   4.648 3.57e-06 ***
I((age - 25)^2)  2.440e-02  2.541e-03   9.603  < 2e-16 ***
incsq           -5.405e-04  1.978e-03  -0.273    0.785    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 44.6 on 2013 degrees of freedom
Multiple R-squared:  0.1229,    Adjusted R-squared:  0.1216 
F-statistic: 94.01 on 3 and 2013 DF,  p-value: < 2.2e-16
waldtest(mod5, mod6)
Wald test

Model 1: nettfa ~ inc + I((age - 25)^2)
Model 2: nettfa ~ inc + I((age - 25)^2) + incsq
  Res.Df Df      F Pr(>F)
1   2014                 
2   2013  1 0.0747 0.7847

En este caso el termino incsq no es significativo para el modelo con un p-valor de 0.7847 y por tanto no tiene sentido incluirlo en el modelo.

LS0tDQp0aXRsZTogIkVqZXJjaWNpb3MgZGUgUmVncmVzacOzbiBNw7psdGlwbGUiDQphdXRob3I6ICJBcnRpZWwgUGFsb21hciBDb2xsIg0KZGF0ZTogIjE3LzAzLzIwMTciDQpvdXRwdXQ6DQogIGh0bWxfbm90ZWJvb2s6IGRlZmF1bHQNCiAgaHRtbF9kb2N1bWVudDogZGVmYXVsdA0KLS0tDQo8Zm9udCBzaXplPTM+DQpFbCBjb25qdW50byBkZSBkYXRvcyA0MDFLU1VCUy5SQVcgY29udGllbmUgaW5mb3JtYWPDs24gZGUgbGEgc2l0dWFjacOzbiBmaW5hbmNpZXJhIG5ldGEgKCpuZXR0ZmEqKSwgZWRhZCAoKmFnZSopLCByZW50YSBmYW1pbGlhciBhbnVhbCAoKmluYyopLCB0YW1hw7FvIGRlIGxhIGZhbWlsaWEgKCpmc2l6ZSopLCB5IHBhcnRpY2lwYWNpw7NuIGVuIGNpZXJ0byB0aXBvIGRlIHBsYW5lcyBkZSBwZW5zaW9uZXMgZW4gVVNBLiBMbyBzZGF0b3MgZGUgbGEgcmlxdWV6YSBmaW5hbmNpZXJhIHkgbGEgcmVudGEgc2UgbWlkZW4gZW4gbWlsZXMgZGUgZMOzbGFyZXMuIFBhcmEgZXN0YSBwcmVndW50YSB2YW1vcyBhIHVzYXIgc8OzbG8gaG9nYXJlcyBjb24gdW4gaW5kaXZpZHVvICgqZnNpemU9MSopLjwvZm9udCBzaXplPTM+DQpgYGB7ciwgaW5jbHVkZT1GQUxTRX0NCmxpYnJhcnkoZHBseXIpDQpsaWJyYXJ5KGxtdGVzdCkNCmxpYnJhcnkobWVtaXNjKQ0KDQpzZXR3ZCgiQzovVXNlcnMvQWRtaW5pc3RyYWRvci9Eb3dubG9hZHMiKQ0KDQoNCmRhdG9zIDwtIHJlYWQudGFibGUoIjQwMWtzdWJzLnJhdyIpDQpuYW1lcyhkYXRvcykgPC0gYygiZTQwMWsiLCJpbmMiLCAibWFyciIsICJtYWxlIiwgImFnZSIsICJmc2l6ZSIsICJuZXR0ZmEiLCAicDQwMWsiLCAicGlyYSIsICJpbmNzcSIsICJhZ2VzcSIpDQpgYGANCg0KPEhSPioqMS4gSW5kaWNhIGVsIG7Dum1lcm8gZGUgaG9nYXJlcyBjb24gKmZzaXplPTEqLioqDQoNCmBgYHtyfQ0KZGF0b3MgPC0gZmlsdGVyKGRhdG9zLCBmc2l6ZT09MSkNCmBgYA0KRWwgbsO6bWVybyBkZSBob2dhcmVzIGNvbiAqZnNpemUqPTEgZXM6DQpgYGB7ciwgZWNobz1GQUxTRX0NCmRpbShkYXRvcylbMV0NCmBgYA0KDQoNCjxIUj4qKjIuIEVzdGltYSBwb3IgTUNPIGVsIG1vZGVsbyoqDQokJA0KICAgIG5ldHRmYSA9IFxiZXRhXzAgKyBcYmV0YV8xIGluYyArIFxiZXRhXzIgYWdlICsgdQ0KJCQNCioqSW50ZXJwcmV0YSBsb3MgY29lZmljaWVudGVzLioqDQpgYGB7ciwgaW5jbHVkZT1GQUxTRX0NCmF0dGFjaChkYXRvcykNCmBgYA0KYGBge3J9DQptb2QxIDwtIGxtKG5ldHRmYSB+IGluYyArIGFnZSkNCm1vZDEucyA8LSBzdW1tYXJ5KG1vZDEpDQoNCm1vZDEucw0KYGBgDQoNCkVuIGVzdGUgbW9kZWxvIHRvZG9zIGxvcyBjb2VmaWNpZW50ZXMgc29uIHNpZ25pZmljYXRpdm9zIHkgcG9yIHRhbnRvICppbmMqIHkgKmFnZSogdGllbmVuIGluZmx1ZW5jaWEgc29icmUgbGEgdmFyaWFibGUgKm5ldHRmYSouDQoNCkVsIGNvZWZpY2llbnRlICZiZXRhOzxzdWI+Mjwvc3ViPiA9IDAuNzk5MzIgaW5kaWNhIGVsIGNhbWJpbyBlbiBsYSB2YXJpYWJsZSAqbmV0dGZhKiBjdWFuZG8gbGEgdmFyaWFibGUgKmluYyogYXVtZW50YSB1bmEgdW5pZGFkLg0KDQpFbCBjb2VmaWNpZW50ZSAmYmV0YTs8c3ViPjM8L3N1Yj4gPSAwLjg0MjY2IGluZGljYSBlbCBjYW1iaW8gZW4gbGEgdmFyaWFibGUgKm5ldHRmYSogY3VhbmRvIGxhIHZhcmlhYmxlICphZ2UqIGF1bWVudGEgdW5hIHVuaWRhZC4NCg0KRW4gYW1ib3MgY2Fzb3MgbG9zIGNvZWZpY2llbnRlcyBzb24gcG9zaXRpdm9zIHBvciBsbyBxdWUgYSBtYXlvciBlZGFkIG8gbWF5b3JlcyBpbmdyZXNvcyBtYXlvciBzZXLDoSBlbCB2YWxvciBxdWUgdG9tZSBsYSB2YXJpYWJsZSAqbmV0dGZhKg0KDQo8SFI+KiozLiBJbmRpY2EgbGEgaW50ZXJwcmV0YWNpw7NuIHF1ZSB0aWVuZSBlbiBlc3RlIGNhc28gZWwgdMOpcm1pbm8gaW5kZXBlbmRpZW50ZS4qKg0KDQpFbCB0w6lybWlubyBpbmRlcGVuZGllbnRlIG5vcyBpbmRpY2EgZWwgdmFsb3IgcXVlIHRvbWEgbGEgdmFyaWFibGUgcmVzcHVlc3RhIGN1YW5kbyB0b2RhcyBsYXMgdmFyaWJsZXMgaW5kZXBlbmRpZW50ZXMgdG9tYW4gZWwgdmFsb3IgMC4gRW4gZXN0ZSBjYXNvIG5vIG5vcyBwcm9wb3JjaW9uYSBuaW5ndW5hIGluZm9ybWFjacOzbiB5YSBxdWUgdG9tYXIgdW5hIHBlcnNvbmEgY29uIGVkYWQgMCBlcyBhYnN1cmRvLCBzZSB2ZXLDoSBtw6FzIGFkZWxhbnRlIHF1ZSBsYSBlZGFkIG1pbmltYSBkZSBsYSBiYXNlIGRlIGRhdG9zIGVzIGRlIDI1IGHDsW9zIHBvciBsbyBxdWUgdG9tYXIgZWRhZCAwIGVzIGFkZW3DoXMgdW5hIGV4dHJhcG9sYWNpw7NuIG11eSBhbGVqYWRhLg0KDQo8SFI+Kio0LiBDYWxjdWxhIGVsICpwKi12YWxvciBkZWwgY29udHJhc3RlIEg8c3ViPjA8L3N1Yj46ICZiZXRhOzxzdWI+Mjwvc3ViPiA9IDEgZnJlbnRlIGEgSDxzdWI+MTwvc3ViPjogJmJldGE7PHN1Yj4yPC9zdWI+IDwgMSB5IGxhIGNvbmNsdXNpw7NuIGNvbiB1bmEgc2lnbmlmaWNhdGl2aWRhZCBkZWwgMSUuKioNCg0KRWwgKnAqLXZhbG9yIGVzIGRlOg0KYGBge3J9DQpCMiA8LSBhcy5udW1lcmljKG1vZDEkY29lZmZpY2llbnRzWzNdKQ0Kc2UuQjIgPC0gbW9kMS5zJGNvZWZmaWNpZW50c1szLDJdDQoNCnQgPC0gKEIyLTEpL3NlLkIyDQoNCnB2YWxvciA8LSBwbm9ybSh0KQ0KcHZhbG9yDQpgYGANClBhcmEgdW4gbml2ZWwgZGUgc2lnbmlmaWNhY2nDs24gZGVsIDElIHJlY2hhemFyw61hbW9zIGxhIEg8c3ViPjA8L3N1Yj46ICZiZXRhOzxzdWI+Mjwvc3ViPiA9IDEgeSBwb3IgdGFudG8gY29uY2x1aW1vcyBxdWUgJmJldGE7PHN1Yj4yPC9zdWI+IDwgMSBwYXJhIGVzZSBuaXZlbCBkZSBzaWduaWZpY2FjacOzbi4NCg0KPEhSPioqNS4gUmVhbGl6YSBsYSByZWdyZXNpw7NuIHNpbXBsZSBkZSAqbmV0dGZhKiBzb2JyZSAqaW5jKiB5IGNvbXBydWViYSBsYXMgZGlmZXJlbmNpYXMuKioNCg0KYGBge3J9DQptb2QyIDwtIGxtKG5ldHRmYSB+IGluYykNCm1vZDIucyA8LSBzdW1tYXJ5KG1vZDIpDQptb2QyLnMNCmBgYA0KDQpMYSBzaWduaWZpY2F0aXZpZGFkIGdsb2JhbCBkZSBsb3MgbW9kZWxvcyBzaWd1ZSBzaWVuZG8gbGEgbWlzbWEgKnAqLXZhbHVlOiA8IDIuMmUtMTYgeSB0YW1iacOpbiB0b2RvcyBsb3MgY29lZmljaWVudGVzIHNvbiBzaWduaWZpY2F0aXZvcyBlbiBlc3RlIG1vZGVsbywgc2luIGVtYmFyZ28gYWwgcXVpdGFyICphZ2UqIGRlbCBtb2RlbG8gaGVtb3MgcGVyZGlkbyBsYSBpbmZvcm1hY2nDs24gcHJvcG9yY2lvbmFkYSBwb3IgZXNhIHZhcmlhYmxlLg0KDQpFbCBSPHN1cD4yPC9zdXA+IGFqdXN0YWRvIGVzIGRlIDAuMDgyMjIgY29tcGFyYWRvIGNvbiAwLjExODUgZGVsIG1vZGVsbyBhbnRlcmlvciBkZWJpZG8gYSBlc3RhIHDDqXJkaWRhIGRlIGluZm9ybWFjacOzbi4gRWwgbW9kZWxvIG3DoXMgYWRlY3VhZG8gZXMgZWwgaW5pY2lhbCBxdWUgaW5jbHV5ZSBsYSB2YXJpYWJsZSAqYWdlKi4NCg0KPEhSPioqNi4gSW5kaWNhIGxhIGVkYWQgbcOtbmltYSBkZSBsb3MgaW5kaXZpZHVvcyB5IGVsIG7Dum1lcm8gZGUgbG9zIHF1ZSB0aWVuZW4gZGljaGEgZWRhZC4qKg0KDQpFZGFkIG1pbmltYToNCmBgYHtyfQ0KbWluKGFnZSkNCmBgYA0KTsO6bWVybyBkZSBpbmRpdmlkdW9zIGNvbiAyNSBhw7FvczoNCmBgYHtyfQ0Kc3VtKGFnZT09bWluKGFnZSkpDQpgYGANCg0KPEhSPioqNy4gRW4gZWwgbW9kZWxvKioNCiQkDQogICAgbmV0dGZhID0gXGJldGFfMCArIFxiZXRhXzEgaW5jICsgXGJldGFfMiBhZ2UgKyBcYmV0YV8zIGFnZV4yICsgdQ0KJCQNCioqaW5kaWNhIGxhIGludGVycHJldGFjacOzbiBkZSAmYmV0YTs8c3ViPjI8L3N1Yj4geSBzaSBlcyBpbnRlcmVzYW50ZS4qKg0KDQpFbiBlc3RlIGNhc28gbm8gbm9zIGluZGljYSBlbCBjYW1iaW8gZGUgbGEgdmFyaWFibGUgKm5ldHRmYSogY3VhbmRvIGEgbGEgdmFyaWFibGUgKmFnZSogYXVtZW50YSB1bmEgdW5pZGFkIHlhIHF1ZSBlcyBpbXBvc2libGUgbWFudGVuZXIgKmFnZXNxKiBjb25zdGFudGUgY3VhbmRvIGNhbWJpYSBsYSB2YXJpYWJsZSAqYWdlKiwgbG9zIGNhbWJpb3MgcHJvZHVjaWRvcyBlbiAqbmV0dGZhKiB2aWVuZW4gZGFkb3MgcG9yICZiZXRhOzxzdWI+Mjwvc3ViPiB5ICZiZXRhOzxzdWI+Mzwvc3ViPiBwb3IgbG8gcXVlICZiZXRhOzxzdWI+Mjwvc3ViPiBpbmRpdmlkdWFsbWVudGUgbm8gZXMgbXV5IMO6dGlsLg0KDQoNCg0KPEhSPioqOC4gRXN0aW1hIGVsIG1vZGVsbyBhbnRlcmlvciBlIGluZGljYSBzaSB0aWVuZSBpbXBvcnRhbmNpYSBlbCBzaWdubyBkZSAmYmV0YTs8c3ViPjI8L3N1Yj4uKioNCg0KYGBge3J9DQptb2QzIDwtIGxtKG5ldHRmYSB+IGluYyArIGFnZSArIGFnZXNxKQ0KbW9kMy5zIDwtIHN1bW1hcnkobW9kMykNCm1vZDMucw0KYGBgDQoNCkVsIHNpZ25vIG5lZ2F0aXZvIGVuICZiZXRhOzxzdWI+Mjwvc3ViPiBub3MgaW5kaWNhIHF1ZSBjdWFuZG8gYXVtZW50YSBsYSBlZGFkIGxhIHZhcmlhYmxlICpuZXR0ZmEqIGRpc21pbnV5ZSwgc2luIGVtYmFyZ28sIGVzdGUgZWZlY3RvIHNlIHZlIHJlZHVjaWRvIHBvciBsYSB2YXJpYWJsZSAqYWdlc3EqIHF1ZSBhbCBzZXIgZGUgc2lnbm8gcG9zaXRpdm8gaGFjZSBxdWUgY3VhbmRvIGF1bWVudGUgbGEgZWRhZCBsYSBkaXNtaW51Y2nDs24gZGUgKm5ldHRmYSogc2VhIGNhZGEgdmV6IG1lbm9yLCBsbGVnYW5kbyBhIHVuIHB1bnRvIGVuIGVsIHF1ZSBlbCBhdW1lbnRvIGRlIGxhIGVkYWQgcHJvdm9jYSB1biBhdW1lbnRvIGVuICpuZXR0ZmEqIChhIGxvcyAyNSBhw7FvcyBhcHJveGltYWRhbWVudGUpLg0KDQpFbiBjYXNvIGRlIHF1ZSB0YW50byBlbCBzaWdubyBkZSAmYmV0YTs8c3ViPjI8L3N1Yj4geSAmYmV0YTs8c3ViPjI8L3N1Yj4gZnVlc2VuIHBvc2l0aXZvcyB1biBjYW1iaW8gZW4gbGEgZWRhZCBwcm92b2NhcsOtYSB1biBhdW1lbnRvIGVuICpuZXR0ZmEqIGluZGVwZW5kaWVudGVtZW50ZSBkZSBsYSBlZGFkIHF1ZSBzZWEuDQoNCjxIUj4qKjkuIFJlYWxpemEgdW4gY29udHJhc3RlIHBhcmEgY29tcHJvYmFyIHNpIGxhIGVkYWQgdGllbmUgaW5mdWVuY2lhIGVuICpuZXR0ZmEqLioqDQoNCmBgYHtyfQ0KbW9kNyA8LSBsbShuZXR0ZmEgfiBhZ2UpDQptb2Q3LnMgPC0gc3VtbWFyeShtb2Q3KQ0KbW9kNy5zDQpgYGANCg0KTGEgdmFyaWFibGUgKmFnZSogdGllbmUgdW4gKnAqLXZhbG9yIGRlIDwgMmUtMTYgcXVlIGVzIGNsYXJhbWVudGUgc2lnbmlmaWNhdGl2byB5IHBvciB0YW50byBsYSBlZGFkIHRpZW5lIGluZmx1ZW5jaWEgc29icmUgbGEgdmFyaWFibGUgKm5ldHRmYSouDQoNCmBgYHtyLCBpbmNsdWRlPUZBTFNFfQ0KI05vIHNhYsOtYSBzaSBzZSByZWZlcsOtYSBleGNsdXNpdmFtZW50ZSBhIGxhIGVkYWQgbyBhIGxhIGVkYWQgZGVudHJvIGRlbCBtb2RlbG8gYW50ZXJpb3IuDQojRW4gY2FzbyBkZSBzZXIgcmVzcGVjdG8gYWwgbW9kZWxvIGFudGVyaW9yIGVzdGUgc2Vyw61hIGVsIGNvZGlnbyB5IGxhcyBjb25jbHVzaW9uZXMgI2NhbWJpYXJpYW4uDQojDQojbW9kNyA8LSBsbShuZXR0ZmEgfiBpbmMgKyBhZ2VzcSkNCiNtb2Q3LnMgPC0gc3VtbWFyeShtb2Q3KQ0KI3dhbGR0ZXN0KG1vZDcsIG1vZDMpDQojDQojYWdlIHNlcsOtYSBubyBzaWduaWZpY2F0aXZhIHBhcmEgdmFsb3JlcyBkZSBjb25maWFuemEgaW5mZXJpb3JlcyBhIDAsMDg1MTggeSBzaWduaWZpY2F0aXZhICNwYXJhIG5pdmVsZXMgZGUgY29uZmlhbnphIG1heW9yZXMuDQpgYGANCg0KDQoNCjxIUj4qKjEwLiBEZWJpZG8gYSBxdWUgbG9zIG3DoXMgasOzdmVuZXMgZGUgbGEgbXVlc3RyYSB0aWVuZW4gMjUgYcOxb3MsIHRpZW5lIHNlbnRpZG8gcGVuc2FyIHF1ZSwgcGFyYSB1biBkZXRlcm1pbmFkbyBuaXZlbCBkZSByZW50YSwgZWwgbml2ZWwgbWVkaW8gbcOtbmltbyBkZSByaXF1ZXphIHNlIHZhIGEgZGFyIGEgbG9zIDI1IGHDsW9zLiBFbCBlZmVjdG8gcGFyY2lhbCBkZSBsYSBlZGFkIHNvYnJlIGxhIHJpcXVlemEgYSBsb3MgMjUgYcOxb3MgZXMgJmJldGE7PHN1Yj4yPC9zdWI+ICsgNTAmYmV0YTs8c3ViPjM8L3N1Yj4uIExsYW1hIGEgZXN0YSBjYW50aWRhZCAmdGhldGE7PHN1Yj4yPC9zdWI+LiBDYWxjdWxhIGVsIGVzdGltYWRvciBkZSAmdGhldGE7PHN1Yj4yPC9zdWI+IHkgZWwgKnAqLXZhbG9yIGJpbGF0ZXJhbCBwYXJhIGNvbnRyYXN0YXIgbGEgaGlww7N0ZXNpcyBIPHN1Yj4wPC9zdWI+OiAmdGhldGE7PHN1Yj4yPC9zdWI+ID0gMC4qKg0KDQoqKipNw4lUT0RPIDEqKioNCg0KYGBge3J9DQojRXN0aW1hY2lvbiBkZSB0aGV0YQ0KbzIgPC0gYXMubnVtZXJpYyhtb2QzJGNvZWZmaWNpZW50c1szXSArIDUwICogbW9kMyRjb2VmZmljaWVudHNbNF0pDQoNCiNNYXRyaXogZGUgY292YXJpYW56YXMNCmNvdnMgPC0gbW9kMy5zJHNpZ21hXjIqbW9kMy5zJGNvdi51bnNjYWxlZA0KDQojRXN0aW1hY2nDs24gZGVsIGVycm9yIGVzdMOhbmRhcg0Kc2UubzIgPC0gc3FydChjb3ZzWzMsM10rNTBeMipjb3ZzWzQsNF0rMTAwKmNvdnNbMyw0XSkNCg0KdCA8LSBvMi9zZS5vMg0KDQpwdmFsb3IgPC0gMiptaW4ocG5vcm0odCksMS1wbm9ybSh0KSkNCnB2YWxvcg0KYGBgDQoNCioqKk3DiVRPRE8gMioqKg0KDQomdGhldGE7PHN1Yj4yPC9zdWI+ID0gJmJldGE7PHN1Yj4yPC9zdWI+ICsgNTAmYmV0YTs8c3ViPjM8L3N1Yj4NCg0KRGVzcGVqYW5kbzoNCg0KJmJldGE7PHN1Yj4yPC9zdWI+ID0gJnRoZXRhOzxzdWI+Mjwvc3ViPiAtIDUwICZiZXRhOzxzdWI+Mzwvc3ViPg0KDQpTdWJzdGl0dXllbmRvIGVuDQokJA0KICAgIG5ldHRmYSA9IFxiZXRhXzAgKyBcYmV0YV8xIGluYyArIFxiZXRhXzIgYWdlICsgXGJldGFfMyBhZ2VeMiArIHUNCiQkDQpvYnRlbmVtb3M6DQokJA0KICAgIG5ldHRmYSA9IFxiZXRhXzAgKyBcYmV0YV8xIGluYyArIChcdGhldGFfMi01MFxiZXRhXzMpIGFnZSArIFxiZXRhXzMgYWdlXjIgKyB1DQokJA0KJCQNCiAgICBuZXR0ZmEgPSBcYmV0YV8wICsgXGJldGFfMSBpbmMgKyBcdGhldGFfMiBhZ2UgKyBcYmV0YV8zIChhZ2VeMiAtNTBhZ2UpKyB1DQokJA0KQ29uIGVzdG8gc29sbyBiYXN0YXLDrWEgZXN0aW1hciBsb3MgY29lZmljaWVudGVzIGRlbCBtb2RlbG8geSB2ZXIgbGEgc2lnbmlmaWNhdGl2aWRhZCBkZSAmdGhldGE7PHN1Yj4yPC9zdWI+DQpgYGB7cn0NCm1vZDQgPC0gbG0obmV0dGZhIH4gaW5jICsgYWdlICsgSShhZ2VzcS01MCphZ2UpKQ0KbW9kNC5zIDwtIHN1bW1hcnkobW9kNCkNCm1vZDQucw0KYGBgDQo8SFI+Q29tbyB2ZW1vcyBlbiBhbWJvcyBtw6l0b2RvcyBlbCAqcCotdmFsb3IgZXMgYXByb3hpbWFkYW1lbnRlIGVsIG1pc21vOiAwLjg5MzEsIG5vIHBvZGVtb3MgcmVjaGF6YXIgbGEgSDxzdWI+MDwvc3ViPiBjbGFyYW1lbnRlIHkgcG9yIHRhbnRvIGNvbmNsdWltb3MgcXVlIGVsIGVmZWN0byBwYXJjaWFsIGRlIGxhIGVkYWQgc29icmUgKm5ldHRmYSogYSBsb3MgMjUgYcOxb3MgZXMgMCwgbyBiaWVuIHF1ZSBubyBpbmZsdXllIGVuIGVsIG1vZGVsby4NCg0KPEhSPioqMTEuIERhZG8gcXVlIGxhIGV2aWRlbmNpYSBmcmVudGUgYSBIPHN1Yj4wPC9zdWI+OiAmdGhldGE7PHN1Yj4yPC9zdWI+ID0gMCBlcyBtdXkgZMOpYmlsLCBsbyBpZ3VhbGFtb3MgYSBjZXJvIHkgZXN0aW1hbW9zIGVsIG1vZGVsbyoqDQokJA0KICAgIG5ldHRmYSA9IFxhbHBoYV8wICsgXGJldGFfMSBpbmMgKyBcYmV0YV8zIChhZ2UgLSAyNSleMiArIHUNCiQkDQoqKkluZGljYSBzaSBlc3RlIG1vZGVsbyBlcyBtZWpvciBxdWUgZWwgZGVsIGFwYXJ0YWRvIDcuKioNCg0KYGBge3J9DQptb2Q1IDwtIGxtKG5ldHRmYSB+IGluYyArIEkoKGFnZS0yNSleMikpDQptb2Q1LnMgPC0gc3VtbWFyeShtb2Q1KQ0KbW9kNS5zDQpgYGANCkVuIGVzdGUgbW9kZWxvIHRvZGFzIGxhcyB2YXJpYWJsZXMgc29uIHNpZ25pZmljYXRpdmFzIGluY2x1eWVuZG8gbGEgY29uc3RhbnRlLg0KQWRlbcOhcyBlbCBSPHN1cD4yPC9zdXA+IGFqdXN0YWRvIG1lam9yw6EgZGUgMC4xMjE2IGEgMDEyMg0KDQpgYGB7cn0NCm10YWJsZShtb2QzLCBtb2Q1KQ0KYGBgDQpPdHJvcyBlc3RhZMOtc3RpY29zIGNvbW8gZWwgQUlDIHkgZWwgQklDIHRhbWJpw6luIG1lam9yYW4gbGlnZXJhbWVudGUgcG9yIGxvIHF1ZSBlcyBwcmVmZXJpYmxlIGVzdGUgbW9kZWxvIGFsIGRlbCBhcGFydGFkbyA3Lg0KDQpgYGB7cn0NCmFub3ZhKG1vZDMsIG1vZDUpDQpgYGANClZlbW9zIHF1ZSBzaSBjb21wYXJhbW9zIGFtYm9zIG1vZGVsb3Mgc29uIHNpZ25pZmljYXRpdmFtZW50ZSBpZ3VhbGVzIGNvbiBsYSDDum5pY2EgZGlmZXJlbmNpYSBkZWwgdGVybWlubyAmdGhldGE7PHN1Yj4yPC9zdWI+IHF1ZSBoZW1vcyBxdWl0YWRvIHkgZGUgYWhpIGVsIHAtdmFsb3IgZGUgMC44OTMyLCBzaW4gZW1iYXJnbywgcG9yIGxvIGNvbWVudGFkbyBlbiBlc3RlIGFwYXJ0YWRvIGVzIHByZWZlcmlibGUgcXVlZGFyc2UgY29uIGVsIHNlZ3VuZG8gbW9kZWxvLg0KDQo8SFI+KioxMi4gQ29tcHJ1ZWJlIHNpIGVzIG5lY2VzYXJpbyBpbmNsdWlyIGVsIHTDqXJtaW5vIGN1YWRyw6F0aWNvIGRlIGluYy4qKg0KDQpgYGB7cn0NCm1vZDYgPC0gbG0obmV0dGZhIH4gaW5jICsgIEkoKGFnZSAtIDI1KV4yKSArIGluY3NxKQ0KbW9kNi5zIDwtIHN1bW1hcnkobW9kNikNCm1vZDYucw0KDQp3YWxkdGVzdChtb2Q1LCBtb2Q2KQ0KYGBgDQoNCkVuIGVzdGUgY2FzbyBlbCB0ZXJtaW5vICppbmNzcSogbm8gZXMgc2lnbmlmaWNhdGl2byBwYXJhIGVsIG1vZGVsbyBjb24gdW4gKnAqLXZhbG9yIGRlIDAuNzg0NyB5IHBvciB0YW50byBubyB0aWVuZSBzZW50aWRvIGluY2x1aXJsbyBlbiBlbCBtb2RlbG8u