This exercise is based on Stock, J.H. and Watson, M.W., 2015. Introduction to econometrics

#---set working directory and load packages
setwd("D:/CASED2021/Exercise/Chapter7")

#setwd("H:\\My Drive\\Econometrics_CASED2021\\Data\\Earnings_and_Height")
# install.packages('car')
require(car)
require(readxl) 
require(dplyr)

#---reading the data

data <- read_excel("Earnings_and_Height.xlsx")

a. Suppose that the mechanism described above is correct. Explain how this leads to omitted variable bias in the OLS regression of Earnings on Height. Does the bias lead the estimated slope to be too large or too small? [Hint: Review Equation (6.1).]

Dat: If omitted factor ‘cognitive ability’ affects ‘earnings’ and correlates with ‘height’, the LSA1 assumption will be violated. This leads to bias in the OLS estimator of ‘height’ as this estimator also captures the effect of ‘cognitive ability’. Strength and direction of this bias are determined by the correlation between ‘cognitive ability’ and ‘height’. It is likely that this correlation is positive, so there is a positively biased estimate of ‘height’. It means that this bias leads the estimated slope of ‘heigh’ to be to large.

Use the years of education variable (educ) to construct four indicator variables for whether a worker has less than a high school diploma (LT_HS = 1 if educ < 12, 0 otherwise), a high school diploma (HS = 1 if educ = 12, 0 otherwise), some college (Some_Col = 1 if 12 < educ < 16, 0 otherwise), or a bachelor’s degree or higher (College = 1 if educ <= 16, 0 otherwise).

###.a1 Create variables as request

data <- data %>% mutate(LT_HS =  ifelse(educ < 12, 1, 0), 
                        HS  =  ifelse(educ == 12, 1, 0) ,                           
                        Some_Col  =  ifelse((educ < 16) & (educ > 12), 1, 0),
                        College  =  ifelse(educ >= 16, 1, 0))
table(data$LT_HS)
## 
##     0     1 
## 16072  1798
table(data$HS)
## 
##     0     1 
## 11375  6495
table(data$Some_Col)
## 
##     0     1 
## 13427  4443
table(data$College)
## 
##     0     1 
## 12736  5134

###.a2 Create a categorical Variables to compare with these above dummy variables

data <- data %>% mutate(educCAT = case_when(LT_HS == 1 ~ "LT_HS",
                                            HS == 1 ~ "HS",
                                            Some_Col  == 1 ~ "Some_Col",
                                            TRUE ~ "College"))
summary(data$educCAT)
##    Length     Class      Mode 
##     17870 character character
summary(factor(data$educCAT))
##  College       HS    LT_HS Some_Col 
##     5134     6495     1798     4443

b.i Focusing first on women only, run a regression of (1) Earnings on Height and (2) Earnings on Height, including LT_HS, HS, and Some_Col as control variables.

b1: Original questions

reg1 <- lm(earnings ~ height, data = data%>% filter(sex == 0))
reg2 <- lm(earnings ~ height + LT_HS + HS + Some_Col , data =  data%>% filter(sex == 0))

summary(reg1)
## 
## Call:
## lm(formula = earnings ~ height, data = data %>% filter(sex == 
##     0))
## 
## Residuals:
##    Min     1Q Median     3Q    Max 
## -42748 -22006  -7466  36641  46865 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  12650.9     6383.7   1.982   0.0475 *  
## height         511.2       98.9   5.169  2.4e-07 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 26800 on 9972 degrees of freedom
## Multiple R-squared:  0.002672,   Adjusted R-squared:  0.002572 
## F-statistic: 26.72 on 1 and 9972 DF,  p-value: 2.396e-07
summary(reg2)
## 
## Call:
## lm(formula = earnings ~ height + LT_HS + HS + Some_Col, data = data %>% 
##     filter(sex == 0))
## 
## Residuals:
##    Min     1Q Median     3Q    Max 
## -54537 -19082  -5808  24386  58676 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  50749.52    6013.68   8.439   <2e-16 ***
## height         135.14      92.55   1.460    0.144    
## LT_HS       -31857.81     963.77 -33.055   <2e-16 ***
## HS          -20417.89     626.18 -32.607   <2e-16 ***
## Some_Col    -12649.07     685.30 -18.458   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 24920 on 9969 degrees of freedom
## Multiple R-squared:  0.1382, Adjusted R-squared:  0.1378 
## F-statistic: 399.6 on 4 and 9969 DF,  p-value: < 2.2e-16

b2: another models

reg2 <- lm(earnings ~ height + LT_HS + HS + Some_Col, data =  data%>% filter(sex == 0))

summary(reg2)
## 
## Call:
## lm(formula = earnings ~ height + LT_HS + HS + Some_Col, data = data %>% 
##     filter(sex == 0))
## 
## Residuals:
##    Min     1Q Median     3Q    Max 
## -54537 -19082  -5808  24386  58676 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  50749.52    6013.68   8.439   <2e-16 ***
## height         135.14      92.55   1.460    0.144    
## LT_HS       -31857.81     963.77 -33.055   <2e-16 ***
## HS          -20417.89     626.18 -32.607   <2e-16 ***
## Some_Col    -12649.07     685.30 -18.458   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 24920 on 9969 degrees of freedom
## Multiple R-squared:  0.1382, Adjusted R-squared:  0.1378 
## F-statistic: 399.6 on 4 and 9969 DF,  p-value: < 2.2e-16
reg3 <- lm(earnings ~ height + educCAT, data =  data%>% filter(sex == 0))
summary(reg3)
## 
## Call:
## lm(formula = earnings ~ height + educCAT, data = data %>% filter(sex == 
##     0))
## 
## Residuals:
##    Min     1Q Median     3Q    Max 
## -54537 -19082  -5808  24386  58676 
## 
## Coefficients:
##                  Estimate Std. Error t value Pr(>|t|)    
## (Intercept)      50749.52    6013.68   8.439   <2e-16 ***
## height             135.14      92.55   1.460    0.144    
## educCATHS       -20417.89     626.18 -32.607   <2e-16 ***
## educCATLT_HS    -31857.81     963.77 -33.055   <2e-16 ***
## educCATSome_Col -12649.07     685.30 -18.458   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 24920 on 9969 degrees of freedom
## Multiple R-squared:  0.1382, Adjusted R-squared:  0.1378 
## F-statistic: 399.6 on 4 and 9969 DF,  p-value: < 2.2e-16
reg4 <- lm(earnings ~ height  + HS + Some_Col + College, data =  data%>% filter(sex == 0))

summary(reg4)
## 
## Call:
## lm(formula = earnings ~ height + HS + Some_Col + College, data = data %>% 
##     filter(sex == 0))
## 
## Residuals:
##    Min     1Q Median     3Q    Max 
## -54537 -19082  -5808  24386  58676 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 18891.71    5952.00   3.174  0.00151 ** 
## height        135.14      92.55   1.460  0.14425    
## HS          11439.92     927.55  12.334  < 2e-16 ***
## Some_Col    19208.74     971.36  19.775  < 2e-16 ***
## College     31857.81     963.77  33.055  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 24920 on 9969 degrees of freedom
## Multiple R-squared:  0.1382, Adjusted R-squared:  0.1378 
## F-statistic: 399.6 on 4 and 9969 DF,  p-value: < 2.2e-16
data$educCAT <- as.factor(data$educCAT)
data$educCAT<- relevel(data$educCAT, ref = "LT_HS")
#data <- within(data, educCAT<- relevel(educCAT, ref = "LT_HS"))
reg5 <- lm(earnings ~ height + educCAT, data =  data%>% filter(sex == 0))
summary(reg5)
## 
## Call:
## lm(formula = earnings ~ height + educCAT, data = data %>% filter(sex == 
##     0))
## 
## Residuals:
##    Min     1Q Median     3Q    Max 
## -54537 -19082  -5808  24386  58676 
## 
## Coefficients:
##                 Estimate Std. Error t value Pr(>|t|)    
## (Intercept)     18891.71    5952.00   3.174  0.00151 ** 
## height            135.14      92.55   1.460  0.14425    
## educCATCollege  31857.81     963.77  33.055  < 2e-16 ***
## educCATHS       11439.92     927.55  12.334  < 2e-16 ***
## educCATSome_Col 19208.74     971.36  19.775  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 24920 on 9969 degrees of freedom
## Multiple R-squared:  0.1382, Adjusted R-squared:  0.1378 
## F-statistic: 399.6 on 4 and 9969 DF,  p-value: < 2.2e-16
reg6 <- lm(earnings ~ height + height^2, data = data)
summary(reg6) # the same as: reg6 <- lm(earnings ~ height, data = data)
## 
## Call:
## lm(formula = earnings ~ height + height^2, data = data)
## 
## Residuals:
##    Min     1Q Median     3Q    Max 
## -47836 -21879  -7976  34323  50599 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  -512.73    3386.86  -0.151     0.88    
## height        707.67      50.49  14.016   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 26780 on 17868 degrees of freedom
## Multiple R-squared:  0.01088,    Adjusted R-squared:  0.01082 
## F-statistic: 196.5 on 1 and 17868 DF,  p-value: < 2.2e-16
reg7 <- lm(earnings ~ height + I(height^2), data = data)
summary(reg7)
## 
## Call:
## lm(formula = earnings ~ height + I(height^2), data = data)
## 
## Residuals:
##    Min     1Q Median     3Q    Max 
## -47918 -21892  -7947  34326  49942 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)
## (Intercept)  7839.609  47084.795   0.166    0.868
## height        458.416   1402.399   0.327    0.744
## I(height^2)     1.853     10.419   0.178    0.859
## 
## Residual standard error: 26780 on 17867 degrees of freedom
## Multiple R-squared:  0.01088,    Adjusted R-squared:  0.01077 
## F-statistic: 98.24 on 2 and 17867 DF,  p-value: < 2.2e-16
reg8 <- lm(earnings ~ height  + HS + height:HS , data =  data%>% filter(sex == 0))

summary(reg8)
## 
## Call:
## lm(formula = earnings ~ height + HS + height:HS, data = data %>% 
##     filter(sex == 0))
## 
## Residuals:
##    Min     1Q Median     3Q    Max 
## -46325 -20753  -6320  33003  46515 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  12232.8     7894.5   1.550   0.1213    
## height         579.4      122.1   4.743 2.13e-06 ***
## HS           13774.4    12996.4   1.060   0.2892    
## height:HS     -377.1      201.5  -1.871   0.0613 .  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 26310 on 9970 degrees of freedom
## Multiple R-squared:  0.03916,    Adjusted R-squared:  0.03887 
## F-statistic: 135.4 on 3 and 9970 DF,  p-value: < 2.2e-16
reg9 <- lm(earnings ~ height*HS , data =  data%>% filter(sex == 0))

summary(reg9)
## 
## Call:
## lm(formula = earnings ~ height * HS, data = data %>% filter(sex == 
##     0))
## 
## Residuals:
##    Min     1Q Median     3Q    Max 
## -46325 -20753  -6320  33003  46515 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  12232.8     7894.5   1.550   0.1213    
## height         579.4      122.1   4.743 2.13e-06 ***
## HS           13774.4    12996.4   1.060   0.2892    
## height:HS     -377.1      201.5  -1.871   0.0613 .  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 26310 on 9970 degrees of freedom
## Multiple R-squared:  0.03916,    Adjusted R-squared:  0.03887 
## F-statistic: 135.4 on 3 and 9970 DF,  p-value: < 2.2e-16

b. ii. Compare the estimated coefficient on Height in regressions (1) and (2). Is there a large change in the coefficient? Has it changed in a way consistent with the cognitive ability explanation? Explain.

coef(reg1)
## (Intercept)      height 
##  12650.8577    511.2222
coef(reg2)
## (Intercept)      height       LT_HS          HS    Some_Col 
##  50749.5220    135.1421 -31857.8086 -20417.8879 -12649.0655
cor(data[data$sex == 0, c("height", "educ")])
##           height      educ
## height 1.0000000 0.1195458
## educ   0.1195458 1.0000000
LS0tDQp0aXRsZTogJ0NoYXB0ZXIgNzogRXhlcmNpc2UgNy4yJw0KYXV0aG9yOiAiVGhpbmggLSBDaGkiDQpkYXRlOiAiMjQvMTAvMjAyMSINCm91dHB1dDoNCiAgaHRtbF9kb2N1bWVudDoNCiAgICBjb2RlX2Rvd25sb2FkOiB5ZXMNCiAgICBjb2RlX2ZvbGRpbmc6IGhpZGUNCiAgICBoaWdobGlnaHQ6IHB5Z21lbnRzDQogICAgdGhlbWU6IGZsYXRseQ0KICAgIHRvYzogeWVzDQogICAgdG9jX2Zsb2F0OiB5ZXMNCiAgd29yZF9kb2N1bWVudDoNCiAgICB0b2M6IHllcw0KLS0tDQoNCmBgYHtyIHNldHVwLGluY2x1ZGU9RkFMU0V9DQprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IFRSVUUsIHdhcm5pbmcgPSBGQUxTRSwgbWVzc2FnZSA9IEZBTFNFKQ0KYGBgDQogVGhpcyBleGVyY2lzZSBpcyBiYXNlZCBvbiBTdG9jaywgSi5ILiBhbmQgV2F0c29uLCBNLlcuLCAyMDE1LiBJbnRyb2R1Y3Rpb24gdG8gZWNvbm9tZXRyaWNzDQoNCmBgYHtyfQ0KIy0tLXNldCB3b3JraW5nIGRpcmVjdG9yeSBhbmQgbG9hZCBwYWNrYWdlcw0Kc2V0d2QoIkQ6L0NBU0VEMjAyMS9FeGVyY2lzZS9DaGFwdGVyNyIpDQoNCiNzZXR3ZCgiSDpcXE15IERyaXZlXFxFY29ub21ldHJpY3NfQ0FTRUQyMDIxXFxEYXRhXFxFYXJuaW5nc19hbmRfSGVpZ2h0IikNCiMgaW5zdGFsbC5wYWNrYWdlcygnY2FyJykNCnJlcXVpcmUoY2FyKQ0KcmVxdWlyZShyZWFkeGwpIA0KcmVxdWlyZShkcGx5cikNCg0KIy0tLXJlYWRpbmcgdGhlIGRhdGENCg0KZGF0YSA8LSByZWFkX2V4Y2VsKCJFYXJuaW5nc19hbmRfSGVpZ2h0Lnhsc3giKQ0KYGBgDQoNCiMjIGEuIFN1cHBvc2UgdGhhdCB0aGUgbWVjaGFuaXNtIGRlc2NyaWJlZCBhYm92ZSBpcyBjb3JyZWN0LiBFeHBsYWluIGhvdyB0aGlzIGxlYWRzIHRvIG9taXR0ZWQgdmFyaWFibGUgYmlhcyBpbiB0aGUgT0xTIHJlZ3Jlc3Npb24gb2YgRWFybmluZ3Mgb24gSGVpZ2h0LiBEb2VzIHRoZSBiaWFzIGxlYWQgdGhlIGVzdGltYXRlZCBzbG9wZSB0byBiZSB0b28gbGFyZ2Ugb3IgIHRvbyBzbWFsbD8gW0hpbnQ6IFJldmlldyBFcXVhdGlvbiAoNi4xKS5dDQoNCg0KRGF0OiBJZiBvbWl0dGVkIGZhY3RvciAnY29nbml0aXZlIGFiaWxpdHknIGFmZmVjdHMgJ2Vhcm5pbmdzJyBhbmQgY29ycmVsYXRlcyAgd2l0aCAnaGVpZ2h0JywgdGhlIExTQTEgYXNzdW1wdGlvbiB3aWxsIGJlIHZpb2xhdGVkLiBUaGlzIGxlYWRzIHRvIGJpYXMgIGluIHRoZSBPTFMgZXN0aW1hdG9yIG9mICdoZWlnaHQnIGFzIHRoaXMgZXN0aW1hdG9yIGFsc28gY2FwdHVyZXMgdGhlIA0KZWZmZWN0IG9mICdjb2duaXRpdmUgYWJpbGl0eScuIFN0cmVuZ3RoIGFuZCBkaXJlY3Rpb24gb2YgdGhpcyBiaWFzIGFyZSAgZGV0ZXJtaW5lZCBieSB0aGUgY29ycmVsYXRpb24gYmV0d2VlbiAnY29nbml0aXZlIGFiaWxpdHknIGFuZCAnaGVpZ2h0Jy4gIEl0IGlzIGxpa2VseSB0aGF0IHRoaXMgY29ycmVsYXRpb24gaXMgcG9zaXRpdmUsIHNvIHRoZXJlIGlzIGEgcG9zaXRpdmVseSANCmJpYXNlZCBlc3RpbWF0ZSBvZiAnaGVpZ2h0Jy4gSXQgbWVhbnMgdGhhdCB0aGlzIGJpYXMgbGVhZHMgdGhlIGVzdGltYXRlZCBzbG9wZSBvZiAnaGVpZ2gnIHRvIGJlIHRvIGxhcmdlLg0KDQoNClVzZSB0aGUgeWVhcnMgb2YgZWR1Y2F0aW9uIHZhcmlhYmxlIChlZHVjKSB0byBjb25zdHJ1Y3QgZm91ciBpbmRpY2F0b3IgdmFyaWFibGVzIGZvciB3aGV0aGVyIGEgd29ya2VyIGhhcyBsZXNzIHRoYW4gYSBoaWdoIHNjaG9vbCBkaXBsb21hICAoTFRfSFMgPSAxIGlmIGVkdWMgPCAxMiwgMCBvdGhlcndpc2UpLCBhIGhpZ2ggc2Nob29sIGRpcGxvbWEgIChIUyA9IDEgaWYgZWR1YyA9IDEyLCAwIG90aGVyd2lzZSksIHNvbWUgY29sbGVnZSAoU29tZV9Db2wgPSAxIGlmICAxMiA8IGVkdWMgPCAxNiwgMCBvdGhlcndpc2UpLCBvciBhIGJhY2hlbG9yJ3MgZGVncmVlIG9yIGhpZ2hlciAgKENvbGxlZ2UgPSAxIGlmIGVkdWMgPD0gMTYsIDAgb3RoZXJ3aXNlKS4NCg0KIyMjLmExIENyZWF0ZSB2YXJpYWJsZXMgYXMgcmVxdWVzdA0KYGBge3J9DQpkYXRhIDwtIGRhdGEgJT4lIG11dGF0ZShMVF9IUyA9ICBpZmVsc2UoZWR1YyA8IDEyLCAxLCAwKSwgDQogICAgICAgICAgICAgICAgICAgICAgICBIUyAgPSAgaWZlbHNlKGVkdWMgPT0gMTIsIDEsIDApICwgICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgIFNvbWVfQ29sICA9ICBpZmVsc2UoKGVkdWMgPCAxNikgJiAoZWR1YyA+IDEyKSwgMSwgMCksDQogICAgICAgICAgICAgICAgICAgICAgICBDb2xsZWdlICA9ICBpZmVsc2UoZWR1YyA+PSAxNiwgMSwgMCkpDQp0YWJsZShkYXRhJExUX0hTKQ0KdGFibGUoZGF0YSRIUykNCnRhYmxlKGRhdGEkU29tZV9Db2wpDQp0YWJsZShkYXRhJENvbGxlZ2UpDQpgYGANCg0KIyMjLmEyIENyZWF0ZSBhIGNhdGVnb3JpY2FsIFZhcmlhYmxlcyB0byBjb21wYXJlIHdpdGggdGhlc2UgYWJvdmUgZHVtbXkgdmFyaWFibGVzDQoNCmBgYHtyfQ0KZGF0YSA8LSBkYXRhICU+JSBtdXRhdGUoZWR1Y0NBVCA9IGNhc2Vfd2hlbihMVF9IUyA9PSAxIH4gIkxUX0hTIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSFMgPT0gMSB+ICJIUyIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvbWVfQ29sICA9PSAxIH4gIlNvbWVfQ29sIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFJVRSB+ICJDb2xsZWdlIikpDQpzdW1tYXJ5KGRhdGEkZWR1Y0NBVCkNCnN1bW1hcnkoZmFjdG9yKGRhdGEkZWR1Y0NBVCkpDQoNCmBgYA0KDQoNCg0KIyMgIGIuaSBGb2N1c2luZyBmaXJzdCBvbiB3b21lbiBvbmx5LCBydW4gYSByZWdyZXNzaW9uIG9mICgxKSBFYXJuaW5ncyBvbiBIZWlnaHQgYW5kICgyKSBFYXJuaW5ncyBvbiBIZWlnaHQsIGluY2x1ZGluZyBMVF9IUywgSFMsIGFuZCBTb21lX0NvbCBhcyBjb250cm9sICB2YXJpYWJsZXMuDQoNCiMjIyAgYjE6IE9yaWdpbmFsIHF1ZXN0aW9ucw0KYGBge3J9DQpyZWcxIDwtIGxtKGVhcm5pbmdzIH4gaGVpZ2h0LCBkYXRhID0gZGF0YSU+JSBmaWx0ZXIoc2V4ID09IDApKQ0KcmVnMiA8LSBsbShlYXJuaW5ncyB+IGhlaWdodCArIExUX0hTICsgSFMgKyBTb21lX0NvbCAsIGRhdGEgPSAgZGF0YSU+JSBmaWx0ZXIoc2V4ID09IDApKQ0KDQpzdW1tYXJ5KHJlZzEpDQpzdW1tYXJ5KHJlZzIpDQoNCmBgYA0KDQojIyMgIGIyOiBhbm90aGVyIG1vZGVscw0KYGBge3J9DQpyZWcyIDwtIGxtKGVhcm5pbmdzIH4gaGVpZ2h0ICsgTFRfSFMgKyBIUyArIFNvbWVfQ29sLCBkYXRhID0gIGRhdGElPiUgZmlsdGVyKHNleCA9PSAwKSkNCg0Kc3VtbWFyeShyZWcyKQ0KcmVnMyA8LSBsbShlYXJuaW5ncyB+IGhlaWdodCArIGVkdWNDQVQsIGRhdGEgPSAgZGF0YSU+JSBmaWx0ZXIoc2V4ID09IDApKQ0Kc3VtbWFyeShyZWczKQ0KYGBgDQoNCmBgYHtyfQ0KcmVnNCA8LSBsbShlYXJuaW5ncyB+IGhlaWdodCAgKyBIUyArIFNvbWVfQ29sICsgQ29sbGVnZSwgZGF0YSA9ICBkYXRhJT4lIGZpbHRlcihzZXggPT0gMCkpDQoNCnN1bW1hcnkocmVnNCkNCg0KZGF0YSRlZHVjQ0FUIDwtIGFzLmZhY3RvcihkYXRhJGVkdWNDQVQpDQpkYXRhJGVkdWNDQVQ8LSByZWxldmVsKGRhdGEkZWR1Y0NBVCwgcmVmID0gIkxUX0hTIikNCiNkYXRhIDwtIHdpdGhpbihkYXRhLCBlZHVjQ0FUPC0gcmVsZXZlbChlZHVjQ0FULCByZWYgPSAiTFRfSFMiKSkNCnJlZzUgPC0gbG0oZWFybmluZ3MgfiBoZWlnaHQgKyBlZHVjQ0FULCBkYXRhID0gIGRhdGElPiUgZmlsdGVyKHNleCA9PSAwKSkNCnN1bW1hcnkocmVnNSkNCmBgYA0KYGBge3J9DQpyZWc2IDwtIGxtKGVhcm5pbmdzIH4gaGVpZ2h0ICsgaGVpZ2h0XjIsIGRhdGEgPSBkYXRhKQ0Kc3VtbWFyeShyZWc2KSAjIHRoZSBzYW1lIGFzOiByZWc2IDwtIGxtKGVhcm5pbmdzIH4gaGVpZ2h0LCBkYXRhID0gZGF0YSkNCg0KDQpyZWc3IDwtIGxtKGVhcm5pbmdzIH4gaGVpZ2h0ICsgSShoZWlnaHReMiksIGRhdGEgPSBkYXRhKQ0Kc3VtbWFyeShyZWc3KQ0KYGBgDQpgYGB7cn0NCnJlZzggPC0gbG0oZWFybmluZ3MgfiBoZWlnaHQgICsgSFMgKyBoZWlnaHQ6SFMgLCBkYXRhID0gIGRhdGElPiUgZmlsdGVyKHNleCA9PSAwKSkNCg0Kc3VtbWFyeShyZWc4KQ0KDQpyZWc5IDwtIGxtKGVhcm5pbmdzIH4gaGVpZ2h0KkhTICwgZGF0YSA9ICBkYXRhJT4lIGZpbHRlcihzZXggPT0gMCkpDQoNCnN1bW1hcnkocmVnOSkNCmBgYA0KDQoNCiMjIGIuIGlpLiBDb21wYXJlIHRoZSBlc3RpbWF0ZWQgY29lZmZpY2llbnQgb24gSGVpZ2h0IGluIHJlZ3Jlc3Npb25zICgxKSBhbmQgKDIpLiBJcyB0aGVyZSBhIGxhcmdlIGNoYW5nZSBpbiB0aGUgY29lZmZpY2llbnQ/IEhhcyBpdCBjaGFuZ2VkIGluIGEgd2F5IGNvbnNpc3RlbnQgd2l0aCB0aGUgY29nbml0aXZlIGFiaWxpdHkgZXhwbGFuYXRpb24/IEV4cGxhaW4uDQpgYGB7cn0NCmNvZWYocmVnMSkNCmNvZWYocmVnMikNCmNvcihkYXRhW2RhdGEkc2V4ID09IDAsIGMoImhlaWdodCIsICJlZHVjIildKQ0KYGBgDQoNCg==