1. First we will re-implement the computations described on pages 5.2-5.18 of the lecture slides, which used the Zelig 4 compatibility syntax, using the Zelig 5 syntax.

In the second part of this assignment we will conduct

library(tidyverse)
library(Zelig)
library(pander)
library(texreg)
library(visreg)
library(lmtest)
library(sjmisc)
library(radiant.data)

Recoding Titanic Data Set using Zelig5

data("titanic")
titanic1 <- titanic%>%
  mutate(survival1 = as.integer(survived))%>%
         mutate(survival = factor(ifelse(survival1 == 1,1,0)),
         age = as.integer(age))%>%
         select(pclass, survived, age,survival, sex, pclass, fare)
head(titanic1)
z5tit <- zlogit$new()
z5tit$zelig(survival ~ age + sex*pclass + fare, data = titanic1)
summary(z5tit)
Model: 

Call:
z5tit$zelig(formula = survival ~ age + sex * pclass + fare, data = titanic1)

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-3.0628  -0.6636  -0.4941   0.4337   2.4940  

Coefficients:
                    Estimate Std. Error z value            Pr(>|z|)
(Intercept)        4.8959649  0.6128145   7.989 0.00000000000000136
age               -0.0386781  0.0067926  -5.694 0.00000001239977237
sexmale           -3.9001038  0.5015680  -7.776 0.00000000000000750
pclass2nd         -1.5922712  0.6024689  -2.643             0.00822
pclass3rd         -4.1381922  0.5601346  -7.388 0.00000000000014922
fare              -0.0009074  0.0020510  -0.442             0.65820
sexmale:pclass2nd -0.0603255  0.6373047  -0.095             0.92459
sexmale:pclass3rd  2.5016703  0.5479814   4.565 0.00000498908018340

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 1409.99  on 1042  degrees of freedom
Residual deviance:  931.42  on 1035  degrees of freedom
AIC: 947.42

Number of Fisher Scoring iterations: 5

Next step: Use 'setx' method

Age Effect Using Zelig5

z5tit$setrange(age = min(titanic1$age):max(titanic1$age))
z5tit$sim()
ci.plot(z5tit)

Fare Effect Using Zelig5

z5fare <- zlogit$new()
z5fare$zelig(survival ~ age + sex*pclass + fare, data = titanic1)
z5fare$setrange(fare = min(titanic1$fare):max(titanic1$fare))
z5fare$sim()
ci.plot(z5fare)

Difference in Sex Using Zelig5

z5sex <- zlogit$new()
z5sex$zelig(survival ~ age + sex*pclass + fare, data = titanic1)
z5sex$setx(sex = "male") 
z5sex$setx1(sex = "female")
z5sex$sim()
summary(z5sex)

 sim x :
 -----
ev
         mean         sd       50%      2.5%     97.5%
[1,] 0.138858 0.01877611 0.1379595 0.1052475 0.1762027
pv
         0     1
[1,] 0.885 0.115

 sim x1 :
 -----
ev
         mean         sd       50%      2.5%     97.5%
[1,] 0.396046 0.04263319 0.3947367 0.3124353 0.4832082
pv
         0     1
[1,] 0.619 0.381
fd
         mean         sd       50%      2.5%     97.5%
[1,] 0.257188 0.04284021 0.2571369 0.1723735 0.3377271
plot(z5sex)

fd <- z5sex$get_qi(xvalue="x1", qi="fd")
summary(fd)
       V1        
 Min.   :0.1354  
 1st Qu.:0.2285  
 Median :0.2571  
 Mean   :0.2572  
 3rd Qu.:0.2862  
 Max.   :0.3903  

Difference in Class Using Zelig5

z5sex1 <- zlogit$new()
z5sex1$zelig(survival ~ age + sex*pclass + fare, data = titanic1)
z5sex1$setx(sex = "male", pclass = "1st") 
z5sex1$setx1(sex = "female", pclass = "1st")
z5sex1$sim()
plot(z5sex1)

z5sex2 <- zlogit$new()
z5sex2$zelig(survival ~ age + sex*pclass + fare, data = titanic1)
z5sex2$setx(sex = "male", pclass = "2nd") 
z5sex2$setx1(sex = "female", pclass = "2nd")
z5sex2$sim()
plot(z5sex2)

z5sex3 <- zlogit$new()
z5sex3$zelig(survival ~ age + sex*pclass + fare, data = titanic1)
z5sex3$setx(sex = "male", pclass = "1st") 
z5sex3$setx1(sex = "female", pclass = "1st")
z5sex3$sim()
plot(z5sex3)

d1 <- z5sex1$get_qi(xvalue="x1", qi="fd")
d2 <- z5sex2$get_qi(xvalue="x1", qi="fd")
d3 <- z5sex3$get_qi(xvalue="x1", qi="fd")
dfd <- as.data.frame(cbind(d1, d2, d3))
head(dfd)
tidd <- dfd %>% 
  gather(class, simv, 1:3)
head(tidd)
tidd %>% 
  group_by(class) %>%
  summarise(mean = mean(simv), sd = sd(simv))
ggplot(tidd, aes(simv)) + geom_histogram() + facet_grid(~class)

Assignment 2 Fairs extramarital Affairs Data Using Zelig4

Infidelity data, known as Fair’s Affairs. Cross-section data from a survey conducted by Psychology Today in 1969.

The purpose of this study is to examine the variables that influence those who have had an affair. More specifically, this study will seek to understand whether gender, yearsmarried, rating, and children have an effect on whether and if so how many affairs a participant had based on these independent variables.

library(Zelig)
data(Affairs)
data set ‘Affairs’ not found
head(Affairs)

Piping to recode variables and select the variables to analyze

Affairs1 <- Affairs%>%
  select(affairs, children, gender, rating)%>%
  mutate(children = as.factor(ifelse(children == 2, "yes", "no")),
         gender = as.factor(ifelse(gender == 1, "female", "male")))
         
head(Affairs1)

Childrens effect on affairs

Those with children are more likely to have an affair than those who have no children.

A3 <- Affairs%>%
  group_by(children)%>%
  summarize(avg = mean(affairs))
ggplot(A3)+
  geom_col(aes(x = children, y = avg, fill = avg))

Affairs based on gender we can see that gender has almost no effect on whether or not a person will chose to have an affair.

A2 <- Affairs%>%
  group_by(gender)%>%
  summarize(avg = mean(affairs))
ggplot(A2)+
  geom_col(aes(x = gender, y = avg, fill = avg))

Affairs based on self rating of marriage with 1 = very unhappy to 5 = very happy in marriage.

Respondents who were unhappy in their marriage were more than double likely to have an affair than those who were reporting being happy in their marriage.

A4 <- Affairs%>%
  group_by(rating)%>%
  summarize(avg = mean(affairs))
ggplot(A4)+
  geom_col(aes(x = rating, y = avg, fill = avg))

Years married effect on affair

Based on the respondents the longer a person is married the more affairs that person is likely to have.

A5 <- Affairs%>%
  group_by(yearsmarried)%>%
  summarize(avg = mean(affairs))
ggplot(A5)+
  geom_col(aes(x = yearsmarried, y = avg, fill = avg))

model1 <- zelig(affairs ~ yearsmarried + rating + gender + children, model = "ls", data = Affairs, cite = F)
summary(model1)
Model: 

Call:
z5$zelig(formula = affairs ~ yearsmarried + rating + gender + 
    children, data = Affairs)

Residuals:
    Min      1Q  Median      3Q     Max 
-4.3830 -1.7110 -0.8957 -0.1511 12.0412 

Coefficients:
             Estimate Std. Error t value       Pr(>|t|)
(Intercept)   3.83211    0.59825   6.405 0.000000000304
yearsmarried  0.08338    0.02855   2.920        0.00363
rating       -0.74871    0.12053  -6.212 0.000000000982
gendermale    0.04890    0.25800   0.190        0.84973
childrenyes  -0.19225    0.34916  -0.551        0.58210

Residual standard error: 3.151 on 596 degrees of freedom
Multiple R-squared:  0.09365,   Adjusted R-squared:  0.08756 
F-statistic:  15.4 on 4 and 596 DF,  p-value: 0.000000000005441

Next step: Use 'setx' method
model2 <- zelig(affairs ~ yearsmarried + rating*gender + children, model = "ls", data = Affairs, cite = F)
summary(model2)
Model: 

Call:
z5$zelig(formula = affairs ~ yearsmarried + rating * gender + 
    children, data = Affairs)

Residuals:
    Min      1Q  Median      3Q     Max 
-4.5554 -1.7438 -0.8820 -0.1875 11.9889 

Coefficients:
                  Estimate Std. Error t value   Pr(>|t|)
(Intercept)        3.63161    0.73921   4.913 0.00000116
yearsmarried       0.08369    0.02858   2.929    0.00354
rating            -0.70017    0.15990  -4.379 0.00001410
gendermale         0.47792    0.96316   0.496    0.61994
childrenyes       -0.18241    0.35004  -0.521    0.60247
rating:gendermale -0.10933    0.23648  -0.462    0.64401

Residual standard error: 3.153 on 595 degrees of freedom
Multiple R-squared:  0.09397,   Adjusted R-squared:  0.08636 
F-statistic: 12.34 on 5 and 595 DF,  p-value: 0.00000000002086

Next step: Use 'setx' method

The simulation illustration below shows that those who had children were more likely to have an affair

C <- setx(model1, children = "yes")
C1 <- setx1(model1, children = "no")
CH <- sim(model1, x = C, x1 = C1)
summary(CH)

 sim x :
 -----
ev
      mean        sd      50%      2.5%    97.5%
1 1.374363 0.2119047 1.379075 0.9509012 1.755278
pv
         mean       sd      50%      2.5%    97.5%
[1,] 1.292174 3.021392 1.306768 -4.642168 7.188486

 sim x1 :
 -----
ev
      mean        sd      50%      2.5%    97.5%
1 1.571395 0.3022732 1.577708 0.9818904 2.188667
pv
         mean       sd      50%      2.5%   97.5%
[1,] 1.650209 3.170288 1.618075 -4.404932 8.01561
fd
      mean        sd       50%       2.5%     97.5%
1 0.197032 0.3466742 0.1959629 -0.4550392 0.8748012
plot(CH)

The gender difference of those who have or have not had an affair is almost identical.

library(tidyr)
tidd <- dfd %>% 
  gather(gender, simv, 1:1)
head(tidd)

Plotting graph using GGplot2

library(ggplot2)
ggplot(tidd, aes(simv)) + geom_histogram() + facet_grid(~gender)

LS0tCnRpdGxlOiAiSG9tZXdvcmsgNiIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoxLiBGaXJzdCB3ZSB3aWxsIHJlLWltcGxlbWVudCB0aGUgY29tcHV0YXRpb25zIGRlc2NyaWJlZCBvbiBwYWdlcyA1LjItNS4xOCBvZiB0aGUgbGVjdHVyZSBzbGlkZXMsIHdoaWNoIHVzZWQgdGhlIFplbGlnIDQgY29tcGF0aWJpbGl0eSBzeW50YXgsIHVzaW5nIHRoZSBaZWxpZyA1IHN5bnRheC4gCgpJbiB0aGUgc2Vjb25kIHBhcnQgb2YgdGhpcyBhc3NpZ25tZW50IHdlIHdpbGwgY29uZHVjdCAKCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQpsaWJyYXJ5KHRpZHl2ZXJzZSkKbGlicmFyeShaZWxpZykKbGlicmFyeShwYW5kZXIpCmxpYnJhcnkodGV4cmVnKQpsaWJyYXJ5KHZpc3JlZykKbGlicmFyeShsbXRlc3QpCmxpYnJhcnkoc2ptaXNjKQpsaWJyYXJ5KHJhZGlhbnQuZGF0YSkKYGBgClJlY29kaW5nIFRpdGFuaWMgRGF0YSBTZXQgdXNpbmcgWmVsaWc1CmBgYHtyfQpkYXRhKCJ0aXRhbmljIikKdGl0YW5pYzEgPC0gdGl0YW5pYyU+JQogIG11dGF0ZShzdXJ2aXZhbDEgPSBhcy5pbnRlZ2VyKHN1cnZpdmVkKSklPiUKICAgICAgICAgbXV0YXRlKHN1cnZpdmFsID0gZmFjdG9yKGlmZWxzZShzdXJ2aXZhbDEgPT0gMSwxLDApKSwKICAgICAgICAgYWdlID0gYXMuaW50ZWdlcihhZ2UpKSU+JQogICAgICAgICBzZWxlY3QocGNsYXNzLCBzdXJ2aXZlZCwgYWdlLHN1cnZpdmFsLCBzZXgsIHBjbGFzcywgZmFyZSkKaGVhZCh0aXRhbmljMSkKYGBgCgpgYGB7cn0KejV0aXQgPC0gemxvZ2l0JG5ldygpCno1dGl0JHplbGlnKHN1cnZpdmFsIH4gYWdlICsgc2V4KnBjbGFzcyArIGZhcmUsIGRhdGEgPSB0aXRhbmljMSkKc3VtbWFyeSh6NXRpdCkKYGBgCkFnZSBFZmZlY3QgVXNpbmcgWmVsaWc1IApgYGB7ciwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0KejV0aXQkc2V0cmFuZ2UoYWdlID0gbWluKHRpdGFuaWMxJGFnZSk6bWF4KHRpdGFuaWMxJGFnZSkpCno1dGl0JHNpbSgpCmNpLnBsb3QoejV0aXQpCmBgYApGYXJlIEVmZmVjdCBVc2luZyBaZWxpZzUgCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQp6NWZhcmUgPC0gemxvZ2l0JG5ldygpCno1ZmFyZSR6ZWxpZyhzdXJ2aXZhbCB+IGFnZSArIHNleCpwY2xhc3MgKyBmYXJlLCBkYXRhID0gdGl0YW5pYzEpCno1ZmFyZSRzZXRyYW5nZShmYXJlID0gbWluKHRpdGFuaWMxJGZhcmUpOm1heCh0aXRhbmljMSRmYXJlKSkKejVmYXJlJHNpbSgpCmNpLnBsb3QoejVmYXJlKQpgYGAKRGlmZmVyZW5jZSBpbiBTZXggVXNpbmcgWmVsaWc1CmBgYHtyLCB3YXJuaW5nPUZBTFNFfQp6NXNleCA8LSB6bG9naXQkbmV3KCkKejVzZXgkemVsaWcoc3Vydml2YWwgfiBhZ2UgKyBzZXgqcGNsYXNzICsgZmFyZSwgZGF0YSA9IHRpdGFuaWMxKQp6NXNleCRzZXR4KHNleCA9ICJtYWxlIikgCno1c2V4JHNldHgxKHNleCA9ICJmZW1hbGUiKQp6NXNleCRzaW0oKQpzdW1tYXJ5KHo1c2V4KQpgYGAKCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQpwbG90KHo1c2V4KQpgYGAKYGBge3J9CmZkIDwtIHo1c2V4JGdldF9xaSh4dmFsdWU9IngxIiwgcWk9ImZkIikKc3VtbWFyeShmZCkKYGBgCkRpZmZlcmVuY2UgaW4gQ2xhc3MgVXNpbmcgWmVsaWc1CmBgYHtyLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQp6NXNleDEgPC0gemxvZ2l0JG5ldygpCno1c2V4MSR6ZWxpZyhzdXJ2aXZhbCB+IGFnZSArIHNleCpwY2xhc3MgKyBmYXJlLCBkYXRhID0gdGl0YW5pYzEpCno1c2V4MSRzZXR4KHNleCA9ICJtYWxlIiwgcGNsYXNzID0gIjFzdCIpIAp6NXNleDEkc2V0eDEoc2V4ID0gImZlbWFsZSIsIHBjbGFzcyA9ICIxc3QiKQp6NXNleDEkc2ltKCkKcGxvdCh6NXNleDEpCgpgYGAKCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQp6NXNleDIgPC0gemxvZ2l0JG5ldygpCno1c2V4MiR6ZWxpZyhzdXJ2aXZhbCB+IGFnZSArIHNleCpwY2xhc3MgKyBmYXJlLCBkYXRhID0gdGl0YW5pYzEpCno1c2V4MiRzZXR4KHNleCA9ICJtYWxlIiwgcGNsYXNzID0gIjJuZCIpIAp6NXNleDIkc2V0eDEoc2V4ID0gImZlbWFsZSIsIHBjbGFzcyA9ICIybmQiKQp6NXNleDIkc2ltKCkKcGxvdCh6NXNleDIpCmBgYAoKYGBge3IsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9Cno1c2V4MyA8LSB6bG9naXQkbmV3KCkKejVzZXgzJHplbGlnKHN1cnZpdmFsIH4gYWdlICsgc2V4KnBjbGFzcyArIGZhcmUsIGRhdGEgPSB0aXRhbmljMSkKejVzZXgzJHNldHgoc2V4ID0gIm1hbGUiLCBwY2xhc3MgPSAiMXN0IikgCno1c2V4MyRzZXR4MShzZXggPSAiZmVtYWxlIiwgcGNsYXNzID0gIjFzdCIpCno1c2V4MyRzaW0oKQpwbG90KHo1c2V4MykKYGBgCgpgYGB7ciwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0KZDEgPC0gejVzZXgxJGdldF9xaSh4dmFsdWU9IngxIiwgcWk9ImZkIikKZDIgPC0gejVzZXgyJGdldF9xaSh4dmFsdWU9IngxIiwgcWk9ImZkIikKZDMgPC0gejVzZXgzJGdldF9xaSh4dmFsdWU9IngxIiwgcWk9ImZkIikKZGZkIDwtIGFzLmRhdGEuZnJhbWUoY2JpbmQoZDEsIGQyLCBkMykpCmhlYWQoZGZkKQpgYGAKCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQp0aWRkIDwtIGRmZCAlPiUgCiAgZ2F0aGVyKGNsYXNzLCBzaW12LCAxOjMpCmhlYWQodGlkZCkKYGBgCgpgYGB7ciwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0KdGlkZCAlPiUgCiAgZ3JvdXBfYnkoY2xhc3MpICU+JQogIHN1bW1hcmlzZShtZWFuID0gbWVhbihzaW12KSwgc2QgPSBzZChzaW12KSkKYGBgCgpgYGB7ciwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0KZ2dwbG90KHRpZGQsIGFlcyhzaW12KSkgKyBnZW9tX2hpc3RvZ3JhbSgpICsgZmFjZXRfZ3JpZCh+Y2xhc3MpCmBgYAoKIyNBc3NpZ25tZW50IDIgRmFpcnMgZXh0cmFtYXJpdGFsIEFmZmFpcnMgRGF0YSBVc2luZyBaZWxpZzQKIyMjI0luZmlkZWxpdHkgZGF0YSwga25vd24gYXMgRmFpcidzIEFmZmFpcnMuIENyb3NzLXNlY3Rpb24gZGF0YSBmcm9tIGEgc3VydmV5IGNvbmR1Y3RlZCBieSBQc3ljaG9sb2d5IFRvZGF5IGluIDE5NjkuClRoZSBwdXJwb3NlIG9mIHRoaXMgc3R1ZHkgaXMgdG8gZXhhbWluZSB0aGUgdmFyaWFibGVzIHRoYXQgaW5mbHVlbmNlIHRob3NlIHdobyBoYXZlIGhhZCBhbiBhZmZhaXIuIE1vcmUgc3BlY2lmaWNhbGx5LCB0aGlzIHN0dWR5IHdpbGwgc2VlayB0byB1bmRlcnN0YW5kIHdoZXRoZXIgZ2VuZGVyLCB5ZWFyc21hcnJpZWQsIHJhdGluZywgYW5kIGNoaWxkcmVuIGhhdmUgYW4gZWZmZWN0IG9uIHdoZXRoZXIgYW5kIGlmIHNvIGhvdyBtYW55IGFmZmFpcnMgYSBwYXJ0aWNpcGFudCBoYWQgYmFzZWQgb24gdGhlc2UgaW5kZXBlbmRlbnQgdmFyaWFibGVzLiAKYGBge3J9CmxpYnJhcnkoWmVsaWcpCmRhdGEoQWZmYWlycykKaGVhZChBZmZhaXJzKQpgYGAKIyMjIFBpcGluZyB0byByZWNvZGUgdmFyaWFibGVzIGFuZCBzZWxlY3QgdGhlIHZhcmlhYmxlcyB0byBhbmFseXplIApgYGB7cn0KQWZmYWlyczEgPC0gQWZmYWlycyU+JQogIHNlbGVjdChhZmZhaXJzLCBjaGlsZHJlbiwgZ2VuZGVyLCByYXRpbmcpJT4lCiAgbXV0YXRlKGNoaWxkcmVuID0gYXMuZmFjdG9yKGlmZWxzZShjaGlsZHJlbiA9PSAyLCAieWVzIiwgIm5vIikpLAogICAgICAgICBnZW5kZXIgPSBhcy5mYWN0b3IoaWZlbHNlKGdlbmRlciA9PSAxLCAiZmVtYWxlIiwgIm1hbGUiKSkpCiAgICAgICAgIApoZWFkKEFmZmFpcnMxKQpgYGAKIyMjIENoaWxkcmVucyBlZmZlY3Qgb24gYWZmYWlycwoKVGhvc2Ugd2l0aCBjaGlsZHJlbiBhcmUgbW9yZSBsaWtlbHkgdG8gaGF2ZSBhbiBhZmZhaXIgdGhhbiB0aG9zZSB3aG8gaGF2ZSBubyBjaGlsZHJlbi4gCmBgYHtyfQpBMyA8LSBBZmZhaXJzJT4lCiAgZ3JvdXBfYnkoY2hpbGRyZW4pJT4lCiAgc3VtbWFyaXplKGF2ZyA9IG1lYW4oYWZmYWlycykpCmdncGxvdChBMykrCiAgZ2VvbV9jb2woYWVzKHggPSBjaGlsZHJlbiwgeSA9IGF2ZywgZmlsbCA9IGF2ZykpCmBgYApBZmZhaXJzIGJhc2VkIG9uIGdlbmRlciB3ZSBjYW4gc2VlIHRoYXQgZ2VuZGVyIGhhcyBhbG1vc3Qgbm8gZWZmZWN0IG9uIHdoZXRoZXIgb3Igbm90IGEgcGVyc29uIHdpbGwgY2hvc2UgdG8gaGF2ZSBhbiBhZmZhaXIuIApgYGB7cn0KQTIgPC0gQWZmYWlycyU+JQogIGdyb3VwX2J5KGdlbmRlciklPiUKICBzdW1tYXJpemUoYXZnID0gbWVhbihhZmZhaXJzKSkKZ2dwbG90KEEyKSsKICBnZW9tX2NvbChhZXMoeCA9IGdlbmRlciwgeSA9IGF2ZywgZmlsbCA9IGF2ZykpCmBgYAojI0FmZmFpcnMgYmFzZWQgb24gc2VsZiByYXRpbmcgb2YgbWFycmlhZ2Ugd2l0aCAxID0gdmVyeSB1bmhhcHB5IHRvIDUgPSB2ZXJ5IGhhcHB5IGluIG1hcnJpYWdlLiAKUmVzcG9uZGVudHMgd2hvIHdlcmUgdW5oYXBweSBpbiB0aGVpciBtYXJyaWFnZSB3ZXJlIG1vcmUgdGhhbiBkb3VibGUgbGlrZWx5IHRvIGhhdmUgYW4gYWZmYWlyIHRoYW4gdGhvc2Ugd2hvIHdlcmUgcmVwb3J0aW5nIGJlaW5nIGhhcHB5IGluIHRoZWlyIG1hcnJpYWdlLiAKYGBge3J9CkE0IDwtIEFmZmFpcnMlPiUKICBncm91cF9ieShyYXRpbmcpJT4lCiAgc3VtbWFyaXplKGF2ZyA9IG1lYW4oYWZmYWlycykpCmdncGxvdChBNCkrCiAgZ2VvbV9jb2woYWVzKHggPSByYXRpbmcsIHkgPSBhdmcsIGZpbGwgPSBhdmcpKQpgYGAKIyNZZWFycyBtYXJyaWVkIGVmZmVjdCBvbiBhZmZhaXIKCkJhc2VkIG9uIHRoZSByZXNwb25kZW50cyB0aGUgbG9uZ2VyIGEgcGVyc29uIGlzIG1hcnJpZWQgdGhlIG1vcmUgYWZmYWlycyB0aGF0IHBlcnNvbiBpcyBsaWtlbHkgdG8gaGF2ZS4gCmBgYHtyfQpBNSA8LSBBZmZhaXJzJT4lCiAgZ3JvdXBfYnkoeWVhcnNtYXJyaWVkKSU+JQogIHN1bW1hcml6ZShhdmcgPSBtZWFuKGFmZmFpcnMpKQpnZ3Bsb3QoQTUpKwogIGdlb21fY29sKGFlcyh4ID0geWVhcnNtYXJyaWVkLCB5ID0gYXZnLCBmaWxsID0gYXZnKSkKYGBgCgpgYGB7cn0KbW9kZWwxIDwtIHplbGlnKGFmZmFpcnMgfiB5ZWFyc21hcnJpZWQgKyByYXRpbmcgKyBnZW5kZXIgKyBjaGlsZHJlbiwgbW9kZWwgPSAibHMiLCBkYXRhID0gQWZmYWlycywgY2l0ZSA9IEYpCnN1bW1hcnkobW9kZWwxKQoKbW9kZWwyIDwtIHplbGlnKGFmZmFpcnMgfiB5ZWFyc21hcnJpZWQgKyByYXRpbmcqZ2VuZGVyICsgY2hpbGRyZW4sIG1vZGVsID0gImxzIiwgZGF0YSA9IEFmZmFpcnMsIGNpdGUgPSBGKQpzdW1tYXJ5KG1vZGVsMikKYGBgClRoZSBzaW11bGF0aW9uIGlsbHVzdHJhdGlvbiBiZWxvdyBzaG93cyB0aGF0IHRob3NlIHdobyBoYWQgY2hpbGRyZW4gd2VyZSBtb3JlIGxpa2VseSB0byBoYXZlIGFuIGFmZmFpciAKYGBge3J9CkMgPC0gc2V0eChtb2RlbDEsIGNoaWxkcmVuID0gInllcyIpCkMxIDwtIHNldHgxKG1vZGVsMSwgY2hpbGRyZW4gPSAibm8iKQpDSCA8LSBzaW0obW9kZWwxLCB4ID0gQywgeDEgPSBDMSkKc3VtbWFyeShDSCkKYGBgCmBgYHtyfQpwbG90KENIKQpgYGAKVGhlIGdlbmRlciBkaWZmZXJlbmNlIG9mIHRob3NlIHdobyBoYXZlIG9yIGhhdmUgbm90IGhhZCBhbiBhZmZhaXIgaXMgYWxtb3N0IGlkZW50aWNhbC4gCmBgYHtyfQpsaWJyYXJ5KHRpZHlyKQp0aWRkIDwtIGRmZCAlPiUgCiAgZ2F0aGVyKGdlbmRlciwgc2ltdiwgMToxKQpoZWFkKHRpZGQpCmBgYAojI1Bsb3R0aW5nIGdyYXBoIHVzaW5nIEdHcGxvdDIKCmBgYHtyfQpsaWJyYXJ5KGdncGxvdDIpCgpnZ3Bsb3QodGlkZCwgYWVzKHNpbXYpKSArIGdlb21faGlzdG9ncmFtKCkgKyBmYWNldF9ncmlkKH5nZW5kZXIpCmBgYAoKCgoKCgoKCgoKCgoKCgoK