library(dplyr)
library(ggplot2)
library(Amelia)
train <- read.csv("~/Desktop/house/train.csv", stringsAsFactors = FALSE)
test <- read.csv("~/Desktop/house/test.csv", stringsAsFactors = FALSE)
missmap(train)

missmap(test)

table(train$PoolQC)

Ex Fa Gd 
 2  2  3 
table(test$PoolQC)

Ex Gd 
 2  1 
table(train$MiscVal)

    0    54   350   400   450   480   500   560   600   620   700   800  1150 
 1408     1     1    11     4     2     8     1     4     1     5     1     1 
 1200  1300  1400  2000  2500  3500  8300 15500 
    2     1     1     4     1     1     1     1 
table(test$MiscVal)

    0    80   300   400   420   450   455   460   490   500   600   650   700 
 1408     1     1     7     1     5     1     1     1     5     4     3     2 
  750   900  1000  1200  1500  1512  2000  2500  3000  4500  6500 12500 17000 
    1     1     1     1     3     1     3     1     2     2     1     1     1 
table(train$Fireplaces)

  0   1   2   3 
690 650 115   5 
table(test$LotFrontage)

 21  22  24  25  26  28  30  31  32  33  34  35  36  37  38  39  40  41  42  43 
 27   1  30   1   3   1   5   1   3   2   6  10   2   2   3   5   4   8   8  11 
 44  45  46  47  48  49  50  51  52  53  54  55  56  57  58  59  60  61  62  63 
 10   7   2   3  10   1  60  12  14  14   4   7  14  14  10  14 133   9  22  30 
 64  65  66  67  68  69  70  71  72  73  74  75  76  77  78  79  80  81  82  83 
 24  49  11  10  25   9  63   7  22  15  24  52  14   6  21  11  68  12  16   8 
 84  85  86  87  88  89  90  91  92  93  94  95  96  97  98  99 100 101 102 103 
  9  36   5   6  12   4  23   8   5   5   6   8   6   3   4   3  12   1   6   3 
104 105 106 107 108 109 110 112 113 114 115 117 118 119 120 121 123 124 125 126 
  2   6   3   4   3   2   9   3   3   3   1   1   2   1   7   1   1   2   3   1 
128 129 130 131 133 134 135 136 140 149 150 155 160 195 200 
  2   2   2   1   1   1   1   1   1   1   1   1   2   1   1 

Garage

train$GarageCond <- ifelse(is.na(train$GarageCond), yes=0, no=train$GarageCond)
train$GarageCond <- ifelse(train$GarageCond == "Ex", yes=5, no=train$GarageCond)
train$GarageCond <- ifelse(train$GarageCond == "Gd", yes=4, no=train$GarageCond)
train$GarageCond <- ifelse(train$GarageCond == "TA", yes=3, no=train$GarageCond)
train$GarageCond <- ifelse(train$GarageCond == "Fa", yes=2, no=train$GarageCond)
train$GarageCond <- ifelse(train$GarageCond == "Po", yes=1, no=train$GarageCond)
test$GarageCond <- ifelse(is.na(test$GarageCond), yes=0, no=test$GarageCond)
test$GarageCond <- ifelse(test$GarageCond == "Ex", yes=5, no=test$GarageCond)
test$GarageCond <- ifelse(test$GarageCond == "Gd", yes=4, no=test$GarageCond)
test$GarageCond <- ifelse(test$GarageCond == "TA", yes=3, no=test$GarageCond)
test$GarageCond <- ifelse(test$GarageCond == "Fa", yes=2, no=test$GarageCond)
test$GarageCond <- ifelse(test$GarageCond == "Po", yes=1, no=test$GarageCond)
train$GarageQual <- ifelse(is.na(train$GarageQual), yes=0, no=train$GarageQual)
train$GarageQual <- ifelse(train$GarageQual == "Ex", yes=5, no=train$GarageQual)
train$GarageQual <- ifelse(train$GarageQual == "Gd", yes=4, no=train$GarageQual)
train$GarageQual <- ifelse(train$GarageQual == "TA", yes=3, no=train$GarageQual)
train$GarageQual <- ifelse(train$GarageQual == "Fa", yes=2, no=train$GarageQual)
train$GarageQual <- ifelse(train$GarageQual == "Po", yes=1, no=train$GarageQual)
test$GarageQual <- ifelse(is.na(test$GarageQual), yes=0, no=test$GarageQual)
test$GarageQual <- ifelse(test$GarageQual == "Ex", yes=5, no=test$GarageQual)
test$GarageQual <- ifelse(test$GarageQual == "Gd", yes=4, no=test$GarageQual)
test$GarageQual <- ifelse(test$GarageQual == "TA", yes=3, no=test$GarageQual)
test$GarageQual <- ifelse(test$GarageQual == "Fa", yes=2, no=test$GarageQual)
test$GarageQual <- ifelse(test$GarageQual == "Po", yes=1, no=test$GarageQual)
train$GarageFinish <- ifelse(is.na(train$GarageFinish), yes=0, no=train$GarageFinish)
train$GarageFinish <- ifelse(train$GarageFinish == "Fin", yes=3, no=train$GarageFinish)
train$GarageFinish <- ifelse(train$GarageFinish == "RFn", yes=2, no=train$GarageFinish)
train$GarageFinish <- ifelse(train$GarageFinish == "Unf", yes=1, no=train$GarageFinish)
test$GarageFinish <- ifelse(is.na(test$GarageFinish), yes=0, no=test$GarageFinish)
test$GarageFinish <- ifelse(test$GarageFinish == "Fin", yes=3, no=test$GarageFinish)
test$GarageFinish <- ifelse(test$GarageFinish == "RFn", yes=2, no=test$GarageFinish)
test$GarageFinish <- ifelse(test$GarageFinish == "Unf", yes=1, no=test$GarageFinish)
test$GarageCars <- ifelse(is.na(test$GarageCars), yes=0, no=test$GarageCars)
garlm <- lm(data = train, formula = GarageArea ~ GarageCars)
pgar <- predict(object = garlm, newdata = test)
test$GarageArea <- ifelse(is.na(test$GarageArea), yes=pgar, no=test$GarageArea)

PoolQC to Numbers

train$PoolQC <- ifelse(is.na(train$PoolQC), yes=0, no=train$PoolQC)
train$PoolQC <- ifelse(train$PoolQC == "Ex", yes=10, no=train$PoolQC)
train$PoolQC <- ifelse(train$PoolQC == "Gd", yes=8, no=train$PoolQC)
train$PoolQC <- ifelse(train$PoolQC == "Fa", yes=3, no=train$PoolQC)
test$PoolQC <- ifelse(is.na(test$PoolQC), yes=0, no=test$PoolQC)
test$PoolQC <- ifelse(test$PoolQC == "Ex", yes=10, no=test$PoolQC)
test$PoolQC <- ifelse(test$PoolQC == "Gd", yes=8, no=test$PoolQC)

Fence to Numbers

train$Fence <- ifelse(is.na(train$Fence), yes=0, no=train$Fence)
train$Fence <- ifelse(train$Fence == "MnWw", yes=1, no=train$Fence)
train$Fence <- ifelse(train$Fence == "GdWo", yes=2, no=train$Fence)
train$Fence <- ifelse(train$Fence == "MnPrv", yes=3, no=train$Fence)
train$Fence <- ifelse(train$Fence == "GdPrv", yes=4, no=train$Fence)
test$Fence <- ifelse(is.na(test$Fence), yes=0, no=test$Fence)
test$Fence <- ifelse(test$Fence == "MnWw", yes=1, no=test$Fence)
test$Fence <- ifelse(test$Fence == "GdWo", yes=2, no=test$Fence)
test$Fence <- ifelse(test$Fence == "MnPrv", yes=3, no=test$Fence)
test$Fence <- ifelse(test$Fence == "GdPrv", yes=4, no=test$Fence)

Alley and Street to Numbers

train$Alley <- ifelse(is.na(train$Alley), yes=0, no=train$Alley)
train$Alley <- ifelse(train$Alley == "Grvl", yes=1, no=train$Alley)
train$Alley <- ifelse(train$Alley == "Pave", yes=2, no=train$Alley)
test$Alley <- ifelse(is.na(test$Alley), yes=0, no=test$Alley)
test$Alley <- ifelse(test$Alley == "Grvl", yes=1, no=test$Alley)
test$Alley <- ifelse(test$Alley == "Pave", yes=2, no=test$Alley)
train$Street <- ifelse(train$Street == "Grvl", yes=1, no=train$Street)
train$Street <- ifelse(train$Street == "Pave", yes=2, no=train$Street)
test$Street <- ifelse(test$Street == "Grvl", yes=1, no=test$Street)
test$Street <- ifelse(test$Street == "Pave", yes=2, no=test$Street)

Fireplace

train$FireplaceQu <- ifelse(is.na(train$FireplaceQu), yes=0, no=train$FireplaceQu)
train$FireplaceQu <- ifelse(train$FireplaceQu == "Ex", yes=5, no=train$FireplaceQu)
train$FireplaceQu <- ifelse(train$FireplaceQu == "Gd", yes=4, no=train$FireplaceQu)
train$FireplaceQu <- ifelse(train$FireplaceQu == "TA", yes=3, no=train$FireplaceQu)
train$FireplaceQu <- ifelse(train$FireplaceQu == "Fa", yes=2, no=train$FireplaceQu)
train$FireplaceQu <- ifelse(train$FireplaceQu == "Po", yes=1, no=train$FireplaceQu)
test$FireplaceQu <- ifelse(is.na(test$FireplaceQu), yes=0, no=test$FireplaceQu)
test$FireplaceQu <- ifelse(test$FireplaceQu == "Ex", yes=5, no=test$FireplaceQu)
test$FireplaceQu <- ifelse(test$FireplaceQu == "Gd", yes=4, no=test$FireplaceQu)
test$FireplaceQu <- ifelse(test$FireplaceQu == "TA", yes=3, no=test$FireplaceQu)
test$FireplaceQu <- ifelse(test$FireplaceQu == "Fa", yes=2, no=test$FireplaceQu)
test$FireplaceQu <- ifelse(test$FireplaceQu == "Po", yes=1, no=test$FireplaceQu)

Varios

train$LotFrontage <- ifelse(is.na(train$LotFrontage), 
                            yes = mean(train$LotFrontage, na.rm = TRUE),
                            no = train$LotFrontage)
test$LotFrontage <- ifelse(is.na(test$LotFrontage), 
                            yes = mean(test$LotFrontage, na.rm = TRUE),
                            no = test$LotFrontage)
test$Utilities <- ifelse(is.na(test$Utilities), yes="AllPub", no=test$Utilities)
test$MSZoning <- ifelse(is.na(test$MSZoning), yes="C", no=test$MSZoning)
test$MSZoning <- ifelse(test$MSZoning == "C (all)", yes="C", no=test$MSZoning)
train$MSZoning <- ifelse(train$MSZoning == "C (all)", yes="C", no=train$MSZoning)
table(test$Utilities)

AllPub 
  1459 
lm <- lm(data = train, formula = SalePrice ~ YrSold + MiscVal + Fence + MSSubClass + MSZoning + LotArea + Utilities + Neighborhood + HouseStyle + OverallQual + OverallCond + YearBuilt + Foundation + GarageArea + PoolArea + MiscVal + SaleCondition + Condition1 + Condition2)
predicted_price <- predict(object = lm, newdata = test)
price <- data.frame(Id = test$Id, SalePrice = round(predicted_price,0))
price$SalePrice <- ifelse (price$SalePrice<0, yes=mean(price$SalePrice), no=price$SalePrice)
write.csv(price, file="prices.csv", row.names = FALSE)
LS0tCnRpdGxlOiAiSG91c2UgUHJpY2VzIgpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sKLS0tCgpgYGB7cn0KbGlicmFyeShkcGx5cikKbGlicmFyeShnZ3Bsb3QyKQpsaWJyYXJ5KEFtZWxpYSkKYGBgCgoKYGBge3J9CnRyYWluIDwtIHJlYWQuY3N2KCJ+L0Rlc2t0b3AvaG91c2UvdHJhaW4uY3N2Iiwgc3RyaW5nc0FzRmFjdG9ycyA9IEZBTFNFKQp0ZXN0IDwtIHJlYWQuY3N2KCJ+L0Rlc2t0b3AvaG91c2UvdGVzdC5jc3YiLCBzdHJpbmdzQXNGYWN0b3JzID0gRkFMU0UpCmBgYAoKYGBge3J9Cm1pc3NtYXAodHJhaW4pCm1pc3NtYXAodGVzdCkKCnRhYmxlKHRyYWluJFBvb2xRQykKdGFibGUodGVzdCRQb29sUUMpCgp0YWJsZSh0cmFpbiRNaXNjVmFsKQp0YWJsZSh0ZXN0JE1pc2NWYWwpCgp0YWJsZSh0cmFpbiRGaXJlcGxhY2VzKQp0YWJsZSh0ZXN0JExvdEZyb250YWdlKQpgYGAKCkdhcmFnZQoKYGBge3J9CnRyYWluJEdhcmFnZUNvbmQgPC0gaWZlbHNlKGlzLm5hKHRyYWluJEdhcmFnZUNvbmQpLCB5ZXM9MCwgbm89dHJhaW4kR2FyYWdlQ29uZCkKdHJhaW4kR2FyYWdlQ29uZCA8LSBpZmVsc2UodHJhaW4kR2FyYWdlQ29uZCA9PSAiRXgiLCB5ZXM9NSwgbm89dHJhaW4kR2FyYWdlQ29uZCkKdHJhaW4kR2FyYWdlQ29uZCA8LSBpZmVsc2UodHJhaW4kR2FyYWdlQ29uZCA9PSAiR2QiLCB5ZXM9NCwgbm89dHJhaW4kR2FyYWdlQ29uZCkKdHJhaW4kR2FyYWdlQ29uZCA8LSBpZmVsc2UodHJhaW4kR2FyYWdlQ29uZCA9PSAiVEEiLCB5ZXM9Mywgbm89dHJhaW4kR2FyYWdlQ29uZCkKdHJhaW4kR2FyYWdlQ29uZCA8LSBpZmVsc2UodHJhaW4kR2FyYWdlQ29uZCA9PSAiRmEiLCB5ZXM9Miwgbm89dHJhaW4kR2FyYWdlQ29uZCkKdHJhaW4kR2FyYWdlQ29uZCA8LSBpZmVsc2UodHJhaW4kR2FyYWdlQ29uZCA9PSAiUG8iLCB5ZXM9MSwgbm89dHJhaW4kR2FyYWdlQ29uZCkKCnRlc3QkR2FyYWdlQ29uZCA8LSBpZmVsc2UoaXMubmEodGVzdCRHYXJhZ2VDb25kKSwgeWVzPTAsIG5vPXRlc3QkR2FyYWdlQ29uZCkKdGVzdCRHYXJhZ2VDb25kIDwtIGlmZWxzZSh0ZXN0JEdhcmFnZUNvbmQgPT0gIkV4IiwgeWVzPTUsIG5vPXRlc3QkR2FyYWdlQ29uZCkKdGVzdCRHYXJhZ2VDb25kIDwtIGlmZWxzZSh0ZXN0JEdhcmFnZUNvbmQgPT0gIkdkIiwgeWVzPTQsIG5vPXRlc3QkR2FyYWdlQ29uZCkKdGVzdCRHYXJhZ2VDb25kIDwtIGlmZWxzZSh0ZXN0JEdhcmFnZUNvbmQgPT0gIlRBIiwgeWVzPTMsIG5vPXRlc3QkR2FyYWdlQ29uZCkKdGVzdCRHYXJhZ2VDb25kIDwtIGlmZWxzZSh0ZXN0JEdhcmFnZUNvbmQgPT0gIkZhIiwgeWVzPTIsIG5vPXRlc3QkR2FyYWdlQ29uZCkKdGVzdCRHYXJhZ2VDb25kIDwtIGlmZWxzZSh0ZXN0JEdhcmFnZUNvbmQgPT0gIlBvIiwgeWVzPTEsIG5vPXRlc3QkR2FyYWdlQ29uZCkKCnRyYWluJEdhcmFnZVF1YWwgPC0gaWZlbHNlKGlzLm5hKHRyYWluJEdhcmFnZVF1YWwpLCB5ZXM9MCwgbm89dHJhaW4kR2FyYWdlUXVhbCkKdHJhaW4kR2FyYWdlUXVhbCA8LSBpZmVsc2UodHJhaW4kR2FyYWdlUXVhbCA9PSAiRXgiLCB5ZXM9NSwgbm89dHJhaW4kR2FyYWdlUXVhbCkKdHJhaW4kR2FyYWdlUXVhbCA8LSBpZmVsc2UodHJhaW4kR2FyYWdlUXVhbCA9PSAiR2QiLCB5ZXM9NCwgbm89dHJhaW4kR2FyYWdlUXVhbCkKdHJhaW4kR2FyYWdlUXVhbCA8LSBpZmVsc2UodHJhaW4kR2FyYWdlUXVhbCA9PSAiVEEiLCB5ZXM9Mywgbm89dHJhaW4kR2FyYWdlUXVhbCkKdHJhaW4kR2FyYWdlUXVhbCA8LSBpZmVsc2UodHJhaW4kR2FyYWdlUXVhbCA9PSAiRmEiLCB5ZXM9Miwgbm89dHJhaW4kR2FyYWdlUXVhbCkKdHJhaW4kR2FyYWdlUXVhbCA8LSBpZmVsc2UodHJhaW4kR2FyYWdlUXVhbCA9PSAiUG8iLCB5ZXM9MSwgbm89dHJhaW4kR2FyYWdlUXVhbCkKCnRlc3QkR2FyYWdlUXVhbCA8LSBpZmVsc2UoaXMubmEodGVzdCRHYXJhZ2VRdWFsKSwgeWVzPTAsIG5vPXRlc3QkR2FyYWdlUXVhbCkKdGVzdCRHYXJhZ2VRdWFsIDwtIGlmZWxzZSh0ZXN0JEdhcmFnZVF1YWwgPT0gIkV4IiwgeWVzPTUsIG5vPXRlc3QkR2FyYWdlUXVhbCkKdGVzdCRHYXJhZ2VRdWFsIDwtIGlmZWxzZSh0ZXN0JEdhcmFnZVF1YWwgPT0gIkdkIiwgeWVzPTQsIG5vPXRlc3QkR2FyYWdlUXVhbCkKdGVzdCRHYXJhZ2VRdWFsIDwtIGlmZWxzZSh0ZXN0JEdhcmFnZVF1YWwgPT0gIlRBIiwgeWVzPTMsIG5vPXRlc3QkR2FyYWdlUXVhbCkKdGVzdCRHYXJhZ2VRdWFsIDwtIGlmZWxzZSh0ZXN0JEdhcmFnZVF1YWwgPT0gIkZhIiwgeWVzPTIsIG5vPXRlc3QkR2FyYWdlUXVhbCkKdGVzdCRHYXJhZ2VRdWFsIDwtIGlmZWxzZSh0ZXN0JEdhcmFnZVF1YWwgPT0gIlBvIiwgeWVzPTEsIG5vPXRlc3QkR2FyYWdlUXVhbCkKCnRyYWluJEdhcmFnZUZpbmlzaCA8LSBpZmVsc2UoaXMubmEodHJhaW4kR2FyYWdlRmluaXNoKSwgeWVzPTAsIG5vPXRyYWluJEdhcmFnZUZpbmlzaCkKdHJhaW4kR2FyYWdlRmluaXNoIDwtIGlmZWxzZSh0cmFpbiRHYXJhZ2VGaW5pc2ggPT0gIkZpbiIsIHllcz0zLCBubz10cmFpbiRHYXJhZ2VGaW5pc2gpCnRyYWluJEdhcmFnZUZpbmlzaCA8LSBpZmVsc2UodHJhaW4kR2FyYWdlRmluaXNoID09ICJSRm4iLCB5ZXM9Miwgbm89dHJhaW4kR2FyYWdlRmluaXNoKQp0cmFpbiRHYXJhZ2VGaW5pc2ggPC0gaWZlbHNlKHRyYWluJEdhcmFnZUZpbmlzaCA9PSAiVW5mIiwgeWVzPTEsIG5vPXRyYWluJEdhcmFnZUZpbmlzaCkKCnRlc3QkR2FyYWdlRmluaXNoIDwtIGlmZWxzZShpcy5uYSh0ZXN0JEdhcmFnZUZpbmlzaCksIHllcz0wLCBubz10ZXN0JEdhcmFnZUZpbmlzaCkKdGVzdCRHYXJhZ2VGaW5pc2ggPC0gaWZlbHNlKHRlc3QkR2FyYWdlRmluaXNoID09ICJGaW4iLCB5ZXM9Mywgbm89dGVzdCRHYXJhZ2VGaW5pc2gpCnRlc3QkR2FyYWdlRmluaXNoIDwtIGlmZWxzZSh0ZXN0JEdhcmFnZUZpbmlzaCA9PSAiUkZuIiwgeWVzPTIsIG5vPXRlc3QkR2FyYWdlRmluaXNoKQp0ZXN0JEdhcmFnZUZpbmlzaCA8LSBpZmVsc2UodGVzdCRHYXJhZ2VGaW5pc2ggPT0gIlVuZiIsIHllcz0xLCBubz10ZXN0JEdhcmFnZUZpbmlzaCkKCnRlc3QkR2FyYWdlQ2FycyA8LSBpZmVsc2UoaXMubmEodGVzdCRHYXJhZ2VDYXJzKSwgeWVzPTAsIG5vPXRlc3QkR2FyYWdlQ2FycykKCmdhcmxtIDwtIGxtKGRhdGEgPSB0cmFpbiwgZm9ybXVsYSA9IEdhcmFnZUFyZWEgfiBHYXJhZ2VDYXJzKQpwZ2FyIDwtIHByZWRpY3Qob2JqZWN0ID0gZ2FybG0sIG5ld2RhdGEgPSB0ZXN0KQp0ZXN0JEdhcmFnZUFyZWEgPC0gaWZlbHNlKGlzLm5hKHRlc3QkR2FyYWdlQXJlYSksIHllcz1wZ2FyLCBubz10ZXN0JEdhcmFnZUFyZWEpCmBgYAoKClBvb2xRQyB0byBOdW1iZXJzCgpgYGB7cn0KdHJhaW4kUG9vbFFDIDwtIGlmZWxzZShpcy5uYSh0cmFpbiRQb29sUUMpLCB5ZXM9MCwgbm89dHJhaW4kUG9vbFFDKQp0cmFpbiRQb29sUUMgPC0gaWZlbHNlKHRyYWluJFBvb2xRQyA9PSAiRXgiLCB5ZXM9MTAsIG5vPXRyYWluJFBvb2xRQykKdHJhaW4kUG9vbFFDIDwtIGlmZWxzZSh0cmFpbiRQb29sUUMgPT0gIkdkIiwgeWVzPTgsIG5vPXRyYWluJFBvb2xRQykKdHJhaW4kUG9vbFFDIDwtIGlmZWxzZSh0cmFpbiRQb29sUUMgPT0gIkZhIiwgeWVzPTMsIG5vPXRyYWluJFBvb2xRQykKCnRlc3QkUG9vbFFDIDwtIGlmZWxzZShpcy5uYSh0ZXN0JFBvb2xRQyksIHllcz0wLCBubz10ZXN0JFBvb2xRQykKdGVzdCRQb29sUUMgPC0gaWZlbHNlKHRlc3QkUG9vbFFDID09ICJFeCIsIHllcz0xMCwgbm89dGVzdCRQb29sUUMpCnRlc3QkUG9vbFFDIDwtIGlmZWxzZSh0ZXN0JFBvb2xRQyA9PSAiR2QiLCB5ZXM9OCwgbm89dGVzdCRQb29sUUMpCmBgYAoKRmVuY2UgIHRvIE51bWJlcnMKCmBgYHtyfQp0cmFpbiRGZW5jZSA8LSBpZmVsc2UoaXMubmEodHJhaW4kRmVuY2UpLCB5ZXM9MCwgbm89dHJhaW4kRmVuY2UpCnRyYWluJEZlbmNlIDwtIGlmZWxzZSh0cmFpbiRGZW5jZSA9PSAiTW5XdyIsIHllcz0xLCBubz10cmFpbiRGZW5jZSkKdHJhaW4kRmVuY2UgPC0gaWZlbHNlKHRyYWluJEZlbmNlID09ICJHZFdvIiwgeWVzPTIsIG5vPXRyYWluJEZlbmNlKQp0cmFpbiRGZW5jZSA8LSBpZmVsc2UodHJhaW4kRmVuY2UgPT0gIk1uUHJ2IiwgeWVzPTMsIG5vPXRyYWluJEZlbmNlKQp0cmFpbiRGZW5jZSA8LSBpZmVsc2UodHJhaW4kRmVuY2UgPT0gIkdkUHJ2IiwgeWVzPTQsIG5vPXRyYWluJEZlbmNlKQoKdGVzdCRGZW5jZSA8LSBpZmVsc2UoaXMubmEodGVzdCRGZW5jZSksIHllcz0wLCBubz10ZXN0JEZlbmNlKQp0ZXN0JEZlbmNlIDwtIGlmZWxzZSh0ZXN0JEZlbmNlID09ICJNbld3IiwgeWVzPTEsIG5vPXRlc3QkRmVuY2UpCnRlc3QkRmVuY2UgPC0gaWZlbHNlKHRlc3QkRmVuY2UgPT0gIkdkV28iLCB5ZXM9Miwgbm89dGVzdCRGZW5jZSkKdGVzdCRGZW5jZSA8LSBpZmVsc2UodGVzdCRGZW5jZSA9PSAiTW5QcnYiLCB5ZXM9Mywgbm89dGVzdCRGZW5jZSkKdGVzdCRGZW5jZSA8LSBpZmVsc2UodGVzdCRGZW5jZSA9PSAiR2RQcnYiLCB5ZXM9NCwgbm89dGVzdCRGZW5jZSkKCmBgYAoKQWxsZXkgYW5kIFN0cmVldCB0byBOdW1iZXJzCgpgYGB7cn0KdHJhaW4kQWxsZXkgPC0gaWZlbHNlKGlzLm5hKHRyYWluJEFsbGV5KSwgeWVzPTAsIG5vPXRyYWluJEFsbGV5KQp0cmFpbiRBbGxleSA8LSBpZmVsc2UodHJhaW4kQWxsZXkgPT0gIkdydmwiLCB5ZXM9MSwgbm89dHJhaW4kQWxsZXkpCnRyYWluJEFsbGV5IDwtIGlmZWxzZSh0cmFpbiRBbGxleSA9PSAiUGF2ZSIsIHllcz0yLCBubz10cmFpbiRBbGxleSkKCnRlc3QkQWxsZXkgPC0gaWZlbHNlKGlzLm5hKHRlc3QkQWxsZXkpLCB5ZXM9MCwgbm89dGVzdCRBbGxleSkKdGVzdCRBbGxleSA8LSBpZmVsc2UodGVzdCRBbGxleSA9PSAiR3J2bCIsIHllcz0xLCBubz10ZXN0JEFsbGV5KQp0ZXN0JEFsbGV5IDwtIGlmZWxzZSh0ZXN0JEFsbGV5ID09ICJQYXZlIiwgeWVzPTIsIG5vPXRlc3QkQWxsZXkpCgp0cmFpbiRTdHJlZXQgPC0gaWZlbHNlKHRyYWluJFN0cmVldCA9PSAiR3J2bCIsIHllcz0xLCBubz10cmFpbiRTdHJlZXQpCnRyYWluJFN0cmVldCA8LSBpZmVsc2UodHJhaW4kU3RyZWV0ID09ICJQYXZlIiwgeWVzPTIsIG5vPXRyYWluJFN0cmVldCkKCnRlc3QkU3RyZWV0IDwtIGlmZWxzZSh0ZXN0JFN0cmVldCA9PSAiR3J2bCIsIHllcz0xLCBubz10ZXN0JFN0cmVldCkKdGVzdCRTdHJlZXQgPC0gaWZlbHNlKHRlc3QkU3RyZWV0ID09ICJQYXZlIiwgeWVzPTIsIG5vPXRlc3QkU3RyZWV0KQpgYGAKCkZpcmVwbGFjZQpgYGB7cn0KdHJhaW4kRmlyZXBsYWNlUXUgPC0gaWZlbHNlKGlzLm5hKHRyYWluJEZpcmVwbGFjZVF1KSwgeWVzPTAsIG5vPXRyYWluJEZpcmVwbGFjZVF1KQp0cmFpbiRGaXJlcGxhY2VRdSA8LSBpZmVsc2UodHJhaW4kRmlyZXBsYWNlUXUgPT0gIkV4IiwgeWVzPTUsIG5vPXRyYWluJEZpcmVwbGFjZVF1KQp0cmFpbiRGaXJlcGxhY2VRdSA8LSBpZmVsc2UodHJhaW4kRmlyZXBsYWNlUXUgPT0gIkdkIiwgeWVzPTQsIG5vPXRyYWluJEZpcmVwbGFjZVF1KQp0cmFpbiRGaXJlcGxhY2VRdSA8LSBpZmVsc2UodHJhaW4kRmlyZXBsYWNlUXUgPT0gIlRBIiwgeWVzPTMsIG5vPXRyYWluJEZpcmVwbGFjZVF1KQp0cmFpbiRGaXJlcGxhY2VRdSA8LSBpZmVsc2UodHJhaW4kRmlyZXBsYWNlUXUgPT0gIkZhIiwgeWVzPTIsIG5vPXRyYWluJEZpcmVwbGFjZVF1KQp0cmFpbiRGaXJlcGxhY2VRdSA8LSBpZmVsc2UodHJhaW4kRmlyZXBsYWNlUXUgPT0gIlBvIiwgeWVzPTEsIG5vPXRyYWluJEZpcmVwbGFjZVF1KQoKdGVzdCRGaXJlcGxhY2VRdSA8LSBpZmVsc2UoaXMubmEodGVzdCRGaXJlcGxhY2VRdSksIHllcz0wLCBubz10ZXN0JEZpcmVwbGFjZVF1KQp0ZXN0JEZpcmVwbGFjZVF1IDwtIGlmZWxzZSh0ZXN0JEZpcmVwbGFjZVF1ID09ICJFeCIsIHllcz01LCBubz10ZXN0JEZpcmVwbGFjZVF1KQp0ZXN0JEZpcmVwbGFjZVF1IDwtIGlmZWxzZSh0ZXN0JEZpcmVwbGFjZVF1ID09ICJHZCIsIHllcz00LCBubz10ZXN0JEZpcmVwbGFjZVF1KQp0ZXN0JEZpcmVwbGFjZVF1IDwtIGlmZWxzZSh0ZXN0JEZpcmVwbGFjZVF1ID09ICJUQSIsIHllcz0zLCBubz10ZXN0JEZpcmVwbGFjZVF1KQp0ZXN0JEZpcmVwbGFjZVF1IDwtIGlmZWxzZSh0ZXN0JEZpcmVwbGFjZVF1ID09ICJGYSIsIHllcz0yLCBubz10ZXN0JEZpcmVwbGFjZVF1KQp0ZXN0JEZpcmVwbGFjZVF1IDwtIGlmZWxzZSh0ZXN0JEZpcmVwbGFjZVF1ID09ICJQbyIsIHllcz0xLCBubz10ZXN0JEZpcmVwbGFjZVF1KQpgYGAKClZhcmlvcwpgYGB7cn0KdHJhaW4kTG90RnJvbnRhZ2UgPC0gaWZlbHNlKGlzLm5hKHRyYWluJExvdEZyb250YWdlKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ZXMgPSBtZWFuKHRyYWluJExvdEZyb250YWdlLCBuYS5ybSA9IFRSVUUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbm8gPSB0cmFpbiRMb3RGcm9udGFnZSkKdGVzdCRMb3RGcm9udGFnZSA8LSBpZmVsc2UoaXMubmEodGVzdCRMb3RGcm9udGFnZSksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgeWVzID0gbWVhbih0ZXN0JExvdEZyb250YWdlLCBuYS5ybSA9IFRSVUUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbm8gPSB0ZXN0JExvdEZyb250YWdlKQp0ZXN0JFV0aWxpdGllcyA8LSBpZmVsc2UoaXMubmEodGVzdCRVdGlsaXRpZXMpLCB5ZXM9IkFsbFB1YiIsIG5vPXRlc3QkVXRpbGl0aWVzKQp0ZXN0JE1TWm9uaW5nIDwtIGlmZWxzZShpcy5uYSh0ZXN0JE1TWm9uaW5nKSwgeWVzPSJDIiwgbm89dGVzdCRNU1pvbmluZykKdGVzdCRNU1pvbmluZyA8LSBpZmVsc2UodGVzdCRNU1pvbmluZyA9PSAiQyAoYWxsKSIsIHllcz0iQyIsIG5vPXRlc3QkTVNab25pbmcpCnRyYWluJE1TWm9uaW5nIDwtIGlmZWxzZSh0cmFpbiRNU1pvbmluZyA9PSAiQyAoYWxsKSIsIHllcz0iQyIsIG5vPXRyYWluJE1TWm9uaW5nKQoKdGFibGUodGVzdCRVdGlsaXRpZXMpCmBgYAoKCmBgYHtyfQpsbSA8LSBsbShkYXRhID0gdHJhaW4sIGZvcm11bGEgPSBTYWxlUHJpY2UgfiBZclNvbGQgKyBNaXNjVmFsICsgRmVuY2UgKyBNU1N1YkNsYXNzICsgTVNab25pbmcgKyBMb3RBcmVhICsgVXRpbGl0aWVzICsgTmVpZ2hib3Job29kICsgSG91c2VTdHlsZSArIE92ZXJhbGxRdWFsICsgT3ZlcmFsbENvbmQgKyBZZWFyQnVpbHQgKyBGb3VuZGF0aW9uICsgR2FyYWdlQXJlYSArIFBvb2xBcmVhICsgTWlzY1ZhbCArIFNhbGVDb25kaXRpb24gKyBDb25kaXRpb24xICsgQ29uZGl0aW9uMikKcHJlZGljdGVkX3ByaWNlIDwtIHByZWRpY3Qob2JqZWN0ID0gbG0sIG5ld2RhdGEgPSB0ZXN0KQpwcmljZSA8LSBkYXRhLmZyYW1lKElkID0gdGVzdCRJZCwgU2FsZVByaWNlID0gcm91bmQocHJlZGljdGVkX3ByaWNlLDApKQpwcmljZSRTYWxlUHJpY2UgPC0gaWZlbHNlIChwcmljZSRTYWxlUHJpY2U8MCwgeWVzPW1lYW4ocHJpY2UkU2FsZVByaWNlKSwgbm89cHJpY2UkU2FsZVByaWNlKQp3cml0ZS5jc3YocHJpY2UsIGZpbGU9InByaWNlcy5jc3YiLCByb3cubmFtZXMgPSBGQUxTRSkKCmBgYAoK