Teoría

Primero recordamos las formas funcionales de los modelos de regresion y su interpretacion

  1. Log-Log (Lo usamos para medir la elasticidad. Al aumentar 1% X Y se modifica en \(\beta_2\)%)

  2. Log-Lin Un cambio relativo en Y ante un cambio absoluto en X. Al aumentar X en una unidad Y se modifica en (\(\beta_2\) *100) %.

  3. Lin-Log Cambio absuluto en Y ante un cambio relativo en X. Al aumentar 1% en X Y se modifica en \(\beta_2\)/100 unidades.

  4. Lin-Lin Un incremento de X en una unidad produce una modificacion de \(\beta_2\) unidades en Y.

Para una regresion lineal con variables dicotómicas (dummies) la fórma es:

\[ Yi=\beta_0+\beta_1 * Xi+\beta_2 * D_1+ \beta_3 * D_1* Xi+u_i \] Si dividimos la ecuacion en dos (cuando \(D_1\) es cero y cuando es uno) nos queda:

\[ Yi=\beta_0+\beta_1 * Xi+u_i \] \[ Yi=\beta_2 * D_1+ \beta_3 * D_1* Xi+u_i \] Aquí podemos observar 4 formas:

  1. Que los interceptores y pendientes coincidan. Coincidentes
  2. Que no coincidan los interceptores y si la pendiente. Paralelas
  3. Que coincidan los intecepto y no la pendiente. Concurrente
  4. Que NO coincidan ni el intercepto ni la pendiente. Disímbolas

Esto da lugar a 4 formas diferentes de la ecuación:

  1. \(Yi=\beta_0+\beta_1 * Xi+u_i\) En este caso la regresión es coincidente en su interceptor y pendiente con regresiȯn sin variables dicotómicas.

  2. \(Yi=\beta_0+\beta_1 * Xi+\beta_2 * D_1+u_i\) Aqui \(D_1\) es 1 y no tenemos \(\beta_3\). En este caso \(\beta_2 * D_1\) es un número y lo podríamos agrupar con el intercepto quedando. \[ Yi=(\beta_0+\beta_2)+\beta_1 * Xi+u_i \] Bien se puede ver aca que esta forma de la regresión es paralela con la anterior. Este tipo de forma se llama paralela

  3. \(Yi=\beta_0+\beta_1 * Xi+\beta_3 * D_1 * X_i+u_i\) Aqui \(D_1\) es 1 y no tenemos \(\beta_2\). En este caso \(\beta_3 * D_1\) forma parte de la pendiente y podemos sacar factor común con \(X_i\) \[ Yi=\beta_0+(\beta_1+\beta_3) * Xi+u_i \]

  4. \(Yi=\beta_0+\beta_1 * Xi+\beta_2 * D_1+ \beta_3 * D_1* Xi+u_i\) Aqui \(D_1\) es 1 y tenemos \(\beta_3\) es significativo. En este caso \(\beta_3 * D_1\) forma parte de la pendiente y \(\beta_1\) del interceptor, entonces agrupando y sacando factor común tenemos.

\[ Yi=(\beta_0+\beta_2)+(beta_1+\beta_3) * Xi+i+u_i \]

Resumen.

En términos prácticos podemos correr una regresión con todos los parámetros \(Yi=\beta_0+\beta_1 * Xi+\beta_2 * D_1+ \beta_3 * D_1* Xi+u_i\) y luego quedarnos con aquella que tenga un maryo \(R^2\) ajustado.

Concidente

Tanto los regresores como el intercepto son iguales.

Paralela

Esta es cuando hay variables dicotomicas, entonces los regresores son iguales pero el intercepto es difference.

Concurrente

Aqui los interceptores son iguales, pero son difernetes las pendientes.

Disimbolas

Interceptores y pendientes son diferentes.

Punto 2

Utilice la base de datos Wage2 del paquete Wooldridge y realice las 4 tipos de regresiones vista en clases (reincidente, coincidente, paralela y concurrente). Utilice como variable dicotomica la variable “black”. ¿Hay discriminacion laboral?.

Aca usamos una regresion log-lin. El ejercicio no lo pide ni lo explica. Pero la idea es tomar el salario=Y y edad=X, luego usar la variable black (si es negro) para ver si hay discriminación. Cuando hablamos de salarios se suele usar el modelo log-lin para explicar que por cada unidad que varia X el salario varia en b2 *100 %

Regresor coincidente

\[ \hat Y= \hat\beta_0+\hat\beta_1 *X \]

library(wooldridge)
regresor_concidente<-lm(log(wage2$wage)~wage2$age,data = wage2)
plot(x=wage2$age,y=log(wage2$wage))
abline(regresor_concidente)

Si vemos el summary:

summary(regresor_concidente)

Call:
lm(formula = log(wage2$wage) ~ wage2$age, data = wage2)

Residuals:
     Min       1Q   Median       3Q      Max 
-1.94460 -0.27905  0.02934  0.27405  1.34251 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept) 6.053593   0.145462  41.616  < 2e-16 ***
wage2$age   0.021929   0.004378   5.009 6.55e-07 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.4158 on 933 degrees of freedom
Multiple R-squared:  0.02619,   Adjusted R-squared:  0.02514 
F-statistic: 25.09 on 1 and 933 DF,  p-value: 6.546e-07

Podemos observar que cuando la dedad no aumenta el salario es de 605 (sin el %). Si se incrementa la edad en uno, el salario aumenta en 2,19%. Podemos ver que tanto el interceptor como el parametro son significativos. Los codigos nos indican que son significativos al 10%, 5% y 1%.

significance code p-value
*** [0, 0.001]
** (0.001, 0.01]
* (0.01, 0.05]
. (0.05, 0.1]
empty (0.1, 1]

p-value< 0.05, entonces es significativo al 5%. como tiene *** entonces esta en el intervalo [0, 0.001] por lo tanto es significativo al 0,1%.

Veamos ahora que sucede si utilizamos la variable dicotómica black

Regresor paralelo

\[ \hat Y= \hat\beta_0+ \hat\beta_1 * D_1 + \hat\beta_2 *X \] En términos de nuestro problema vamos a llamar a B1, black, asi la ecuacion quedaría:

\[ \hat Y= \hat\beta_0+ \hat black * D_1 + \hat\beta_2 *X \]

regresor_paralelo=lm (log(wage)~age+factor(black),data=wage2)
plot(x=wage2$age,y=log(wage2$wage))
abline(regresor_paralelo)
only using the first two of 3 regression coefficients

 summary(regresor_paralelo)

Call:
lm(formula = log(wage) ~ age + factor(black), data = wage2)

Residuals:
    Min      1Q  Median      3Q     Max 
-1.9857 -0.2575  0.0113  0.2801  1.3014 

Coefficients:
                Estimate Std. Error t value Pr(>|t|)    
(Intercept)     6.126398   0.142017  43.139  < 2e-16 ***
age             0.020834   0.004266   4.884 1.23e-06 ***
factor(black)1 -0.285155   0.039619  -7.197 1.26e-12 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.4049 on 932 degrees of freedom
Multiple R-squared:  0.07746,   Adjusted R-squared:  0.07548 
F-statistic: 39.13 on 2 and 932 DF,  p-value: < 2.2e-16

Aqui podemos ver que el coeficiente black, el estimador, es significativo, ademas es negativo, con lo cual podríamos decir que existe discriminacion.

Regresor Concurrente

\[ Y_i=\beta_0 +\beta_1 D_1 X_i+\beta_2X_i+U_I \] Entonces nuestro estimador tendra la forma:

\[ \hat Y_i=\hat\beta_0 +\hat\beta_1 D_1 X_i+\hat\beta_2X_i \]

Esto implica que la variable D1*X1 tendria que ser una variable nueva. Asi que la podemos crear directamente en el data frame

#wage2$black_age=wage2$black*wage2$age
#regresor_concurrente<-

Punto 8

Considere el siguiente modelo: \[ ln(wi)=3.2 + 0.06 Ed-0.15 Sx + 0.11 Hijo + ui \]

  1. proponga el modelo para el sexo masculno si tiene hijo.
  2. Proponga el modelo para el sexo masculino si NO tiene hijo
  3. Proponga el modelo para el sexo femenino si tiene hijo. Explíquelo
  4. Proponga el modelo para el sexo femenino si no tiene hijo. Explíquelo.

Modelos

  1. \(ln(wi)=3.2 + 0.06 Ed + 0.11 Hijo + ui\)
  2. \(ln(wi)=3.2 + 0.06 Ed + ui\)
  3. \(ln(wi)=3.2 + 0.06 Ed-0.15 * Sx + 0.11 Hijo + ui\)
  4. \(ln(wi)=3.2 + 0.06 Ed-0.15 * Sx+ ui\)
masculino_hijo = function(x){3.2+0.11+ (0.06 * x)}
masculino_sin_hijo = function(x){3.2+(0.06 * x)}
femenino_hijo = function(x){3.2-0.15+0.11+ (0.06 * x)}
femenino_sin_hijo = function(x){3.2-0.15+(0.06 * x)}
matplot(x,cbind(masculino_hijo(x),masculino_sin_hijo(x),femenino_hijo(x),femenino_sin_hijo(x))
        ,type="l",col=c("blue","green","red","orange"),ylab = "ln(salario)",xlab = "edad")
Error in matplot(x, cbind(masculino_hijo(x), masculino_sin_hijo(x), femenino_hijo(x),  : 
  object 'x' not found
LS0tCnRpdGxlOiAiUHJvYmxlbSBzZXQgNiIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKIyBUZW9yw61hCgpQcmltZXJvIHJlY29yZGFtb3MgbGFzIGZvcm1hcyBmdW5jaW9uYWxlcyBkZSBsb3MgbW9kZWxvcyBkZSByZWdyZXNpb24geSBzdSBpbnRlcnByZXRhY2lvbgoKMS4gICBMb2ctTG9nIChMbyB1c2Ftb3MgcGFyYSBtZWRpciBsYSBlbGFzdGljaWRhZC4gQWwgYXVtZW50YXIgIDElIFggWSBzZSBtb2RpZmljYSBlbiAkXGJldGFfMiQlKQoKMi4gIExvZy1MaW4KICBVbiBjYW1iaW8gcmVsYXRpdm8gZW4gWSBhbnRlIHVuIGNhbWJpbyBhYnNvbHV0byBlbiBYLiBBbCBhdW1lbnRhciBYIGVuIHVuYSB1bmlkYWQgWSBzZSBtb2RpZmljYSBlbiAoJFxiZXRhXzIkICoxMDApICUuCiAgCjMuICBMaW4tTG9nCiAgQ2FtYmlvIGFic3VsdXRvIGVuIFkgYW50ZSB1biBjYW1iaW8gcmVsYXRpdm8gZW4gWC4gQWwgYXVtZW50YXIgMSUgZW4gWCBZIHNlIG1vZGlmaWNhIGVuICRcYmV0YV8yJC8xMDAgdW5pZGFkZXMuCiAgCjQuICBMaW4tTGluCiAgVW4gaW5jcmVtZW50byBkZSBYIGVuIHVuYSB1bmlkYWQgcHJvZHVjZSB1bmEgbW9kaWZpY2FjaW9uIGRlICRcYmV0YV8yJCB1bmlkYWRlcyBlbiBZLiAKCgpQYXJhIHVuYSByZWdyZXNpb24gbGluZWFsIGNvbiB2YXJpYWJsZXMgZGljb3TDs21pY2FzIChkdW1taWVzKSBsYSBmw7NybWEgZXM6IAoKJCQKICAgIFlpPVxiZXRhXzArXGJldGFfMSAqIFhpK1xiZXRhXzIgKiBEXzErIFxiZXRhXzMgKiBEXzEqIFhpK3VfaQokJAogU2kgZGl2aWRpbW9zIGxhIGVjdWFjaW9uIGVuIGRvcyAoY3VhbmRvICREXzEkIGVzIGNlcm8geSBjdWFuZG8gZXMgdW5vKSBub3MgcXVlZGE6IAogCiQkCiAgICBZaT1cYmV0YV8wK1xiZXRhXzEgKiBYaSt1X2kKJCQKJCQKICAgIFlpPVxiZXRhXzIgKiBEXzErIFxiZXRhXzMgKiBEXzEqIFhpK3VfaQokJApBcXXDrSBwb2RlbW9zIG9ic2VydmFyIDQgZm9ybWFzOiAKCjEuIFF1ZSBsb3MgaW50ZXJjZXB0b3JlcyB5IHBlbmRpZW50ZXMgY29pbmNpZGFuLiAqKkNvaW5jaWRlbnRlcyoqCjIuIFF1ZSBubyBjb2luY2lkYW4gbG9zIGludGVyY2VwdG9yZXMgeSBzaSBsYSBwZW5kaWVudGUuICoqUGFyYWxlbGFzKioKMy4gUXVlIGNvaW5jaWRhbiBsb3MgaW50ZWNlcHRvIHkgbm8gbGEgcGVuZGllbnRlLiAqKkNvbmN1cnJlbnRlKioKNC4gUXVlIE5PIGNvaW5jaWRhbiBuaSBlbCBpbnRlcmNlcHRvIG5pIGxhIHBlbmRpZW50ZS4gKipEaXPDrW1ib2xhcyoqCgoKRXN0byBkYSBsdWdhciBhIDQgZm9ybWFzIGRpZmVyZW50ZXMgZGUgbGEgZWN1YWNpw7NuOiAKCjEuICAkWWk9XGJldGFfMCtcYmV0YV8xICogWGkrdV9pJCAqKkVuIGVzdGUgY2FzbyBsYSByZWdyZXNpw7NuIGVzIGNvaW5jaWRlbnRlIGVuIHN1IGludGVyY2VwdG9yIHkgcGVuZGllbnRlIGNvbiByZWdyZXNpyK9uIHNpbiB2YXJpYWJsZXMgZGljb3TDs21pY2FzKiouIAoKMi4gJFlpPVxiZXRhXzArXGJldGFfMSAqIFhpK1xiZXRhXzIgKiBEXzErdV9pJCAgQXF1aSAkRF8xJCBlcyAxIHkgbm8gdGVuZW1vcyAkXGJldGFfMyQuCkVuIGVzdGUgY2FzbyAkXGJldGFfMiAqIERfMSQgZXMgdW4gbsO6bWVybyB5IGxvIHBvZHLDrWFtb3MgYWdydXBhciBjb24gZWwgaW50ZXJjZXB0byBxdWVkYW5kby4gCiQkCiAgWWk9KFxiZXRhXzArXGJldGFfMikrXGJldGFfMSAqIFhpK3VfaQokJApCaWVuIHNlIHB1ZWRlIHZlciBhY2EgcXVlIGVzdGEgZm9ybWEgZGUgbGEgcmVncmVzacOzbiBlcyBwYXJhbGVsYSBjb24gbGEgYW50ZXJpb3IuIEVzdGUgdGlwbyBkZSBmb3JtYSBzZSBsbGFtYSBwYXJhbGVsYQoKMy4gJFlpPVxiZXRhXzArXGJldGFfMSAqIFhpK1xiZXRhXzMgKiBEXzEgKiBYX2krdV9pJCAgQXF1aSAkRF8xJCBlcyAxIHkgbm8gdGVuZW1vcyAkXGJldGFfMiQuCkVuIGVzdGUgY2FzbyAkXGJldGFfMyAqIERfMSQgZm9ybWEgcGFydGUgZGUgbGEgcGVuZGllbnRlIHkgcG9kZW1vcyBzYWNhciBmYWN0b3IgY29tw7puIGNvbiAkWF9pJCAKJCQKICBZaT1cYmV0YV8wKyhcYmV0YV8xK1xiZXRhXzMpICogWGkrdV9pCiQkCgoKNC4gJFlpPVxiZXRhXzArXGJldGFfMSAqIFhpK1xiZXRhXzIgKiBEXzErIFxiZXRhXzMgKiBEXzEqIFhpK3VfaSQgIEFxdWkgJERfMSQgZXMgMSB5IHRlbmVtb3MgJFxiZXRhXzMkIGVzIHNpZ25pZmljYXRpdm8uCkVuIGVzdGUgY2FzbyAkXGJldGFfMyAqIERfMSQgZm9ybWEgcGFydGUgZGUgbGEgcGVuZGllbnRlICB5ICRcYmV0YV8xJCBkZWwgaW50ZXJjZXB0b3IsIGVudG9uY2VzIGFncnVwYW5kbyB5IHNhY2FuZG8gZmFjdG9yIGNvbcO6biB0ZW5lbW9zLiAKCiQkCiAgIFlpPShcYmV0YV8wK1xiZXRhXzIpKyhiZXRhXzErXGJldGFfMykgKiBYaStpK3VfaQokJAoKIyMgUmVzdW1lbi4gCgpFbiB0w6lybWlub3MgcHLDoWN0aWNvcyBwb2RlbW9zIGNvcnJlciB1bmEgcmVncmVzacOzbiBjb24gdG9kb3MgbG9zIHBhcsOhbWV0cm9zICRZaT1cYmV0YV8wK1xiZXRhXzEgKiBYaStcYmV0YV8yICogRF8xKyBcYmV0YV8zICogRF8xKiBYaSt1X2kkIHkgbHVlZ28gcXVlZGFybm9zIGNvbiBhcXVlbGxhIHF1ZSB0ZW5nYSB1biBtYXJ5byAkUl4yJCBhanVzdGFkby4KCgojIyMjIENvbmNpZGVudGUKClRhbnRvIGxvcyByZWdyZXNvcmVzIGNvbW8gZWwgaW50ZXJjZXB0byBzb24gaWd1YWxlcy4KCiMjIyMgUGFyYWxlbGEKCkVzdGEgZXMgY3VhbmRvIGhheSB2YXJpYWJsZXMgZGljb3RvbWljYXMsIGVudG9uY2VzIGxvcyByZWdyZXNvcmVzIHNvbiBpZ3VhbGVzIHBlcm8gZWwgaW50ZXJjZXB0byBlcyBkaWZmZXJlbmNlLgoKIyMjIyBDb25jdXJyZW50ZSAKQXF1aSBsb3MgaW50ZXJjZXB0b3JlcyBzb24gaWd1YWxlcywgcGVybyBzb24gZGlmZXJuZXRlcyBsYXMgcGVuZGllbnRlcy4gCgojIyMjIERpc2ltYm9sYXMKSW50ZXJjZXB0b3JlcyB5IHBlbmRpZW50ZXMgc29uIGRpZmVyZW50ZXMuIAoKCiMjIyMgUHVudG8gMgoKVXRpbGljZSBsYSBiYXNlIGRlIGRhdG9zIFdhZ2UyIGRlbCBwYXF1ZXRlIFdvb2xkcmlkZ2UgeSByZWFsaWNlIGxhcyA0IHRpcG9zIGRlIHJlZ3Jlc2lvbmVzIHZpc3RhIGVuIGNsYXNlcyAocmVpbmNpZGVudGUsIGNvaW5jaWRlbnRlLCBwYXJhbGVsYSB5IGNvbmN1cnJlbnRlKS4gVXRpbGljZSBjb21vIHZhcmlhYmxlIGRpY290b21pY2EgbGEgdmFyaWFibGUgImJsYWNrIi4gwr9IYXkgZGlzY3JpbWluYWNpb24gbGFib3JhbD8uCgpBY2EgdXNhbW9zIHVuYSByZWdyZXNpb24gbG9nLWxpbi4gRWwgZWplcmNpY2lvIG5vIGxvIHBpZGUgbmkgbG8gZXhwbGljYS4gUGVybyBsYSBpZGVhIGVzIHRvbWFyIGVsIHNhbGFyaW89WSB5IGVkYWQ9WCwgbHVlZ28gdXNhciBsYSB2YXJpYWJsZSBibGFjayAoc2kgZXMgbmVncm8pIHBhcmEgdmVyIHNpIGhheSBkaXNjcmltaW5hY2nDs24uIEN1YW5kbyBoYWJsYW1vcyBkZSBzYWxhcmlvcyBzZSBzdWVsZSB1c2FyIGVsIG1vZGVsbyBsb2ctbGluIHBhcmEgZXhwbGljYXIgcXVlIHBvciBjYWRhIHVuaWRhZCBxdWUgdmFyaWEgWCBlbCBzYWxhcmlvIHZhcmlhIGVuIGIyICoxMDAgJQoKCgojIyMjIyBSZWdyZXNvciBjb2luY2lkZW50ZQokJAogXGhhdCBZPSBcaGF0XGJldGFfMCtcaGF0XGJldGFfMSAqWCAKJCQKCgpgYGB7cn0KbGlicmFyeSh3b29sZHJpZGdlKQpyZWdyZXNvcl9jb25jaWRlbnRlPC1sbShsb2cod2FnZTIkd2FnZSl+d2FnZTIkYWdlLGRhdGEgPSB3YWdlMikKcGxvdCh4PXdhZ2UyJGFnZSx5PWxvZyh3YWdlMiR3YWdlKSkKYWJsaW5lKHJlZ3Jlc29yX2NvbmNpZGVudGUpCmBgYApTaSB2ZW1vcyBlbCBzdW1tYXJ5OiAKYGBge3J9CnN1bW1hcnkocmVncmVzb3JfY29uY2lkZW50ZSkKYGBgClBvZGVtb3Mgb2JzZXJ2YXIgcXVlIGN1YW5kbyBsYSBkZWRhZCBubyBhdW1lbnRhIGVsIHNhbGFyaW8gZXMgZGUgNjA1IChzaW4gZWwgJSkuClNpIHNlIGluY3JlbWVudGEgbGEgZWRhZCBlbiB1bm8sIGVsIHNhbGFyaW8gYXVtZW50YSBlbiAyLDE5JS4gClBvZGVtb3MgdmVyIHF1ZSB0YW50byBlbCBpbnRlcmNlcHRvciBjb21vIGVsIHBhcmFtZXRybyBzb24gc2lnbmlmaWNhdGl2b3MuIApMb3MgY29kaWdvcyBub3MgaW5kaWNhbiBxdWUgc29uIHNpZ25pZmljYXRpdm9zIGFsIDEwJSwgNSUgeSAxJS4gCgpzaWduaWZpY2FuY2UgY29kZSB8ICAgICBwLXZhbHVlCi0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tCiAgICoqKiAgICAgICAgICAgIHwgICAgIFswLCAwLjAwMV0KICAgICoqICAgICAgICAgICAgfCAgKDAuMDAxLCAwLjAxXQogICAgICogICAgICAgICAgICB8ICAgKDAuMDEsIDAuMDVdCiAgICAgLiAgICAgICAgICAgIHwgICAgKDAuMDUsIDAuMV0KICAgIGVtcHR5ICAgICAgICAgfCAgICAgICAoMC4xLCAxXQogICAgICAgICAgICAgICAgICAKcC12YWx1ZTwgMC4wNSwgZW50b25jZXMgZXMgc2lnbmlmaWNhdGl2byBhbCA1JS4gCmNvbW8gdGllbmUgKioqIGVudG9uY2VzIGVzdGEgZW4gZWwgaW50ZXJ2YWxvIFswLCAwLjAwMV0gcG9yIGxvIHRhbnRvIGVzIHNpZ25pZmljYXRpdm8gYWwgMCwxJS4KClZlYW1vcyBhaG9yYSBxdWUgc3VjZWRlIHNpIHV0aWxpemFtb3MgbGEgdmFyaWFibGUgZGljb3TDs21pY2EgKipibGFjayoqIAoKIyMjIyBSZWdyZXNvciBwYXJhbGVsbwokJAogICBcaGF0IFk9IFxoYXRcYmV0YV8wKyBcaGF0XGJldGFfMSAqIERfMSAgKyBcaGF0XGJldGFfMiAqWAokJApFbiB0w6lybWlub3MgZGUgbnVlc3RybyBwcm9ibGVtYSB2YW1vcyBhIGxsYW1hciBhIEIxLCBibGFjaywgYXNpIGxhIGVjdWFjaW9uIHF1ZWRhcsOtYTogCgokJAogICBcaGF0IFk9IFxoYXRcYmV0YV8wKyBcaGF0IGJsYWNrICogRF8xICArIFxoYXRcYmV0YV8yICpYCiQkCmBgYHtyfQpyZWdyZXNvcl9wYXJhbGVsbz1sbSAobG9nKHdhZ2UpfmFnZStmYWN0b3IoYmxhY2spLGRhdGE9d2FnZTIpCnBsb3QoeD13YWdlMiRhZ2UseT1sb2cod2FnZTIkd2FnZSkpCmFibGluZShyZWdyZXNvcl9wYXJhbGVsbykKYGBgCgoKYGBge3J9CiBzdW1tYXJ5KHJlZ3Jlc29yX3BhcmFsZWxvKQpgYGAKQXF1aSBwb2RlbW9zIHZlciBxdWUgZWwgY29lZmljaWVudGUgKipibGFjayoqLCBlbCBlc3RpbWFkb3IsIGVzIHNpZ25pZmljYXRpdm8sIGFkZW1hcyBlcyBuZWdhdGl2bywgY29uIGxvIGN1YWwgcG9kcsOtYW1vcyBkZWNpciBxdWUgZXhpc3RlIGRpc2NyaW1pbmFjaW9uLiAKCgojIyMjIFJlZ3Jlc29yIENvbmN1cnJlbnRlCgokJAogICAgWV9pPVxiZXRhXzAgK1xiZXRhXzEgIERfMSBYX2krXGJldGFfMlhfaStVX0kKJCQKRW50b25jZXMgbnVlc3RybyBlc3RpbWFkb3IgdGVuZHJhIGxhIGZvcm1hOgoKJCQKICBcaGF0IFlfaT1caGF0XGJldGFfMCArXGhhdFxiZXRhXzEgIERfMSBYX2krXGhhdFxiZXRhXzJYX2kgICAKJCQKCkVzdG8gaW1wbGljYSBxdWUgbGEgdmFyaWFibGUgRDEqWDEgdGVuZHJpYSBxdWUgc2VyIHVuYSB2YXJpYWJsZSBudWV2YS4gCkFzaSBxdWUgbGEgcG9kZW1vcyBjcmVhciBkaXJlY3RhbWVudGUgZW4gZWwgZGF0YSBmcmFtZQoKYGBge3J9CiN3YWdlMiRibGFja19hZ2U9d2FnZTIkYmxhY2sqd2FnZTIkYWdlCiNyZWdyZXNvcl9jb25jdXJyZW50ZTwtCmBgYAoKIyMjIyBQdW50byA4CkNvbnNpZGVyZSBlbCBzaWd1aWVudGUgbW9kZWxvOiAKJCQKICBsbih3aSk9My4yICsgMC4wNiBFZC0wLjE1IFN4ICsgMC4xMSBIaWpvICsgdWkKJCQKCmEpIHByb3BvbmdhIGVsIG1vZGVsbyBwYXJhIGVsIHNleG8gbWFzY3Vsbm8gc2kgdGllbmUgaGlqby4gCmIpIFByb3BvbmdhIGVsIG1vZGVsbyBwYXJhIGVsIHNleG8gbWFzY3VsaW5vIHNpIE5PIHRpZW5lIGhpam8KYykgUHJvcG9uZ2EgZWwgbW9kZWxvIHBhcmEgZWwgc2V4byBmZW1lbmlubyBzaSB0aWVuZSBoaWpvLiBFeHBsw61xdWVsbwpkKSBQcm9wb25nYSBlbCBtb2RlbG8gcGFyYSBlbCBzZXhvIGZlbWVuaW5vIHNpIG5vIHRpZW5lIGhpam8uIEV4cGzDrXF1ZWxvLgoKIApNb2RlbG9zIAoKYSkgJGxuKHdpKT0zLjIgKyAwLjA2IEVkICsgMC4xMSBIaWpvICsgdWkkIApiKSAkbG4od2kpPTMuMiArIDAuMDYgRWQgKyB1aSQKYykgJGxuKHdpKT0zLjIgKyAwLjA2IEVkLTAuMTUgKiBTeCArIDAuMTEgSGlqbyArIHVpJApkKSAkbG4od2kpPTMuMiArIDAuMDYgRWQtMC4xNSAqICBTeCsgdWkkCgpgYGB7cn0KbWFzY3VsaW5vX2hpam8gPSBmdW5jdGlvbih4KXszLjIrMC4xMSsgKDAuMDYgKiB4KX0KbWFzY3VsaW5vX3Npbl9oaWpvID0gZnVuY3Rpb24oeCl7My4yKygwLjA2ICogeCl9CmZlbWVuaW5vX2hpam8gPSBmdW5jdGlvbih4KXszLjItMC4xNSswLjExKyAoMC4wNiAqIHgpfQpmZW1lbmlub19zaW5faGlqbyA9IGZ1bmN0aW9uKHgpezMuMi0wLjE1KygwLjA2ICogeCl9Cm1hdHBsb3QoeCxjYmluZChtYXNjdWxpbm9faGlqbyh4KSxtYXNjdWxpbm9fc2luX2hpam8oeCksZmVtZW5pbm9faGlqbyh4KSxmZW1lbmlub19zaW5faGlqbyh4KSkKICAgICAgICAsdHlwZT0ibCIsY29sPWMoImJsdWUiLCJncmVlbiIsInJlZCIsIm9yYW5nZSIpLHlsYWIgPSAibG4oc2FsYXJpbykiLHhsYWIgPSAiZWRhZCIpCgpgYGAKCgoKCg==