Q12. Which of the following actions do you take to avoid getting sick?
# subset question data, rename columns, gather into single column
q12_df <- df %>%
select(CaseID, PPGENDER, PPAGE, ppagecat, ppagect4, PPETHM, PPINCIMP, PPEDUC, PPEDUCAT,
work, PPWORK, marital, PPMARIT, PPMSACAT, ppreg9, PPSTATEN, PPHOUSE, PPRENT, PPNET, Q12_1:Q12_15, weight) %>%
rename("Q12_1_Avoid.touching.my.eyes" = Q12_1,
"Q12_2_Avoid.touching.my.nose" = Q12_2,
"Q12_3_Avoid.touching.my.mouth" = Q12_3,
"Q12_4_Wash.my.hands.with.soap.more.often"= Q12_4,
"Q12_5_Use.hand.sanitizers" = Q12_5,
"Q12_6_Clean.the.surfaces.in.my.home" = Q12_6,
"Q12_7_Clean.the.surfaces.at.work" = Q12_7,
"Q12_8_Eat.nutritious.food" = Q12_8,
"Q12_9_Get.adequate.rest" = Q12_9,
"Q12_10_Get.recommended.vaccine" = Q12_10,
"Q12_11_Take.preventive.medicine" = Q12_11,
"Q12_12_Cover.my.nose.and.mouth.with.a.surgical.mask" = Q12_12,
"Q12_13_Avoid.contact.with.people.who.are.sick" = Q12_13,
"Q12_14_Avoid.crowded.places" = Q12_14,
"Q12_15_Other" = Q12_15) %>%
gather(Q12_q, Q12_r, Q12_1_Avoid.touching.my.eyes:Q12_15_Other, na.rm = T) %>%
mutate(Q12_r = factor(Q12_r, levels = c("Always", "Sometimes", "Never")))
# relevel
label = c("Q12_1_Avoid.touching.my.eyes",
"Q12_2_Avoid.touching.my.nose",
"Q12_3_Avoid.touching.my.mouth",
"Q12_4_Wash.my.hands.with.soap.more.often",
"Q12_5_Use.hand.sanitizers",
"Q12_6_Clean.the.surfaces.in.my.home",
"Q12_7_Clean.the.surfaces.at.work",
"Q12_8_Eat.nutritious.food",
"Q12_9_Get.adequate.rest",
"Q12_10_Get.recommended.vaccine",
"Q12_11_Take.preventive.medicine",
"Q12_12_Cover.my.nose.and.mouth.with.a.surgical.mask",
"Q12_13_Avoid.contact.with.people.who.are.sick",
"Q12_14_Avoid.crowded.places",
"Q12_15_Other")
q12_df <- q12_df %>%
mutate(Q12_q = factor(Q12_q, levels = label))
# survey design
options(digits = 4)
options(survey.lonely.psu = "adjust")
des12 <- svydesign(ids = ~1, weights = ~weight, data = q12_df[is.na(q12_df$weight)==F, ])
# weighted data frame
q12 <- data.frame(svytable(~Q12_q + Q12_r + PPGENDER + ppagecat + ppagect4 + PPETHM + PPINCIMP, des12, round = T))
# plot templates
title <- ggtitle("Which of the following actions do you take to avoid getting sick?")
# descending order of labels
plabel <- scale_x_discrete(limits = rev(levels(q12$Q12_q)))
## main plot
p <- ggplot(q12, aes(Q12_q, weight = Freq)) + plabel + ptext
p + geom_bar(position = "fill") + aes(fill = Q12_r) + title + coord_flip()

Gender
# p2
p2 <- ggplot(q12, aes(Q12_q, weight = Freq)) + ptext
# gender
p2 + geom_bar(position = "fill") + aes(Q12_q, fill = PPGENDER) + facet_wrap(~Q12_r) + ggtitle("By gender") + coord_flip() + plabel

p2 + geom_bar(position = "dodge") + aes(Q12_q, fill = PPGENDER) + facet_wrap(~Q12_r) + ggtitle("By gender") + coord_flip() + plabel

p2 + geom_bar(position = "fill") + aes(PPGENDER, fill = Q12_r) + facet_wrap(~Q12_q) + coord_flip()

Age group
# by age group
p2 + geom_bar(position = "fill") + aes(Q12_q, fill = ppagect4) + facet_wrap(~Q12_r) + ggtitle("By age group") + plabel + coord_flip()

p2 + geom_bar(position = "fill") + aes(Q12_q, fill = ppagect4) + facet_grid(Q12_r ~ .) + coord_flip() + plabel

p2 + geom_bar(position = "fill") + aes(ppagecat, fill = Q12_r) + facet_wrap(~Q12_q)

Ethnicity
# by ethnic group
p2 + geom_bar(position = "fill") + aes(Q12_q, fill = PPETHM) + facet_wrap(~Q12_r) + ggtitle("By ethnic group") + plabel + coord_flip()

p2 + geom_bar(position = "fill") + aes(Q12_q, fill = PPETHM) + facet_grid(Q12_r ~ .) + coord_flip() + plabel

p2 + geom_bar(position = "fill") + aes(PPETHM, fill = Q12_r) + facet_wrap(~Q12_q)

Income
# by income group
p2 + geom_bar(position = "fill") + aes(Q12_q, fill = PPINCIMP) + facet_wrap(~Q12_r) + ggtitle("By income group") + plabel + coord_flip() + ptext3

p2 + geom_bar(position = "fill") + aes(Q12_q, fill = PPINCIMP) + facet_grid(Q12_r ~ .) + coord_flip() + plabel + ptext3

p2 + geom_bar(position = "fill") + aes(PPINCIMP, fill = Q12_r) + facet_wrap(~Q12_q) + ptext2

# update weighted data frame
q12.2 <- data.frame(svytable(~Q12_q + Q12_r + PPEDUC + PPEDUCAT + work + PPWORK + marital + PPMARIT, des12, round = T))
# restate plots
p3 <- ggplot(q12.2, aes(Q12_q, weight = Freq)) + ptext
# descending order of labels
plabel <- scale_x_discrete(limits = rev(levels(q12.2$Q12_q)))
Education
# by education
p3 + geom_bar(position = "fill") + aes(Q12_q, fill = PPEDUCAT) + facet_wrap(~Q12_r) + ggtitle("By education") + plabel + coord_flip()

p3 + geom_bar(position = "fill") + aes(Q12_q, fill = PPEDUCAT) + facet_grid(Q12_r ~ .) + coord_flip() + plabel #+ ptext3

p3 + geom_bar(position = "fill") + aes(PPEDUCAT, fill = Q12_r) + facet_wrap(~Q12_q) + ptext2 + ggtitle("By education")

LS0tCnRpdGxlOiAiUTEyIgpvdXRwdXQ6CiAgaHRtbF9ub3RlYm9vazoKICAgIHRoZW1lOiBwYXBlcgogICAgdG9jOiB5ZXMKICAgIHRvY19kZXB0aDogMgogIGh0bWxfZG9jdW1lbnQ6CiAgICBrZWVwX21kOiB5ZXMKICAgIHRoZW1lOiBwYXBlcgogICAgdG9jOiB5ZXMKICAgIHRvY19kZXB0aDogMgotLS0KCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZ9CiMjIFNldHVwLgprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IFQsIGNhY2hlID0gVCwgY2FjaGUuY29tbWVudHMgPSBGLCB3YXJuaW5nID0gRiwgbWVzc2FnZSA9IEYpCnJtKGxpc3QgPSBscyhhbGwubmFtZXMgPSBUKSkKbGlicmFyeShybWFya2Rvd24pOyBsaWJyYXJ5KGtuaXRyKTsgbGlicmFyeShncmlkRXh0cmEpCmxpYnJhcnkodGlkeXIpOyBsaWJyYXJ5KGRwbHlyKTsgbGlicmFyeShnZ3Bsb3QyKTsgbGlicmFyeShzdXJ2ZXkpCmBgYAoKYGBge3IgbG9hZC1kYXRhLCBpbmNsdWRlPUZ9CiMjIExvYWQgZGF0YS4KbG9hZCgifi9naXQvZmx1LXN1cnZleS9kYXRhL2NsZWFuaW5nMi5SRGF0YSIpCmxvYWQoIn4vZ2l0L2ZsdS1zdXJ2ZXkvZGF0YS9yZWNvZGluZy5SRGF0YSIpICAjIGxvYWQgImRhdGFyIgpkZiA8LSBkYXRhciAgIyByZWNvZGVkIHZhcmlhYmxlcwpgYGAKCmBgYHtyIGdyb3VwLWRhdGEsIGluY2x1ZGU9Rn0KIyMgUmVncm91cCB2YXJpYWJsZXMuCiMgaW5jb21lCmluY29tZS5tYXAgPC0gYyhyZXAoInVuZGVyICQxMGsiLCAzKSwgcmVwKCIkMTBrIHRvICQyNWsiLCA0KSwKICAgICAgICAgICAgICAgIHJlcCgiJDI1ayB0byAkNTBrIiwgNCksIHJlcCgiJDUwayB0byAkNzVrIiwgMiksCiAgICAgICAgICAgICAgICByZXAoIiQ3NWsgdG8gJDEwMGsiLCAyKSwgcmVwKCIkMTAwayB0byAkMTUwayIsIDIpLAogICAgICAgICAgICAgICAgcmVwKCJvdmVyICQxNTBrIiwgMikpCmRmJGluY29tZSA8LSBjb2RlKGRhdGFyJFBQSU5DSU1QLCBpbmNvbWUubWFwLCAidW5kZXIgJDEwayIpCmluY29tZS5sYWIgPC0gYygidW5kZXIgJDEwayIsICIkMTBrIHRvICQyNWsiLCAiJDI1ayB0byAkNTBrIiwKICAgICAgICAgICAgICAgICIkNTBrIHRvICQ3NWsiLCAiJDc1ayB0byAkMTAwayIsICIkMTAwayB0byAkMTUwayIsCiAgICAgICAgICAgICAgICAib3ZlciAkMTUwayIpCmRmJGluY29tZSA8LSBmYWN0b3IoZGYkaW5jb21lLCBsZXZlbHMgPSBpbmNvbWUubGFiKQoKIyBtYXJpdGFsIHN0YXVzCm1hcml0YWwubWFwIDwtIGMoInNpbmdsZSIsICJwYXJ0bmVyZWQiLCAicGFydG5lcmVkIiwgInNpbmdsZSIsICJzaW5nbGUiLCAic2luZ2xlIikKZGYkbWFyaXRhbCA8LSBjb2RlKGRhdGFmJFBQTUFSSVQsIG1hcml0YWwubWFwLCAic2luZ2xlIikKCiMgd29yayBzdGF0dXMKd29yay5tYXAgPC0gYyhyZXAoInVuZW1wbG95ZWQiLCA1KSwKICAgICAgICAgICAgICByZXAoImVtcGxveWVkIiwgMikpCmRmJHdvcmsgPC0gY29kZShkYXRhZiRQUFdPUkssIHdvcmsubWFwLCAidW5lbXBsb3llZCIpCmBgYAoKYGBge3IgZGVzLXN1cnZleX0KIyMgQ3JlYXRlIHN1cnZleSBvYmplY3QuCm9wdGlvbnMoZGlnaXRzID0gNCkKb3B0aW9ucyhzdXJ2ZXkubG9uZWx5LnBzdSA9ICJhZGp1c3QiKQoKZGVzIDwtIHN2eWRlc2lnbihpZHMgPSB+MSwgd2VpZ2h0cyA9IH53ZWlnaHQsIGRhdGEgPSBkZltpcy5uYShkZiR3ZWlnaHQpPT1GLCBdKQpgYGAKCmBgYHtyIHBsb3QtdGVtcCwgaW5jbHVkZT1GfQojIyBDcmVhdGUgZ2dwbG90IHRlbXBsYXRlcy4KIyBzbWFsbGVyIHRleHQKcHRleHQgPC0gdGhlbWUoYXhpcy50ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSByZWwoMC44KSksCiAgICAgICAgICAgICAgIGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNDUsIGhqdXN0ID0gMSksCiAgICAgICAgICAgICAgIGxlZ2VuZC50aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0gcmVsKDAuOCkpLAogICAgICAgICAgICAgICBsZWdlbmQudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gcmVsKDAuOCkpKQojIHJlbW92ZSB4LWF4aXMgbGFiZWxzCnB0ZXh0MiA8LSBwdGV4dCArIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF9ibGFuaygpKQojIHJlbW92ZSBsZWdlbmQKcHRleHQzIDwtIGd1aWRlcyhmaWxsID0gRkFMU0UpCmBgYAoKCiMjIFExMi4gV2hpY2ggb2YgdGhlIGZvbGxvd2luZyBhY3Rpb25zIGRvIHlvdSB0YWtlIHRvIGF2b2lkIGdldHRpbmcgc2ljaz8KCgpgYGB7ciBxMTItZGF0YX0KIyBzdWJzZXQgcXVlc3Rpb24gZGF0YSwgcmVuYW1lIGNvbHVtbnMsIGdhdGhlciBpbnRvIHNpbmdsZSBjb2x1bW4KcTEyX2RmIDwtIGRmICU+JQogIHNlbGVjdChDYXNlSUQsIFBQR0VOREVSLCBQUEFHRSwgcHBhZ2VjYXQsIHBwYWdlY3Q0LCBQUEVUSE0sIFBQSU5DSU1QLCBQUEVEVUMsIFBQRURVQ0FULAogICAgICAgICB3b3JrLCBQUFdPUkssIG1hcml0YWwsIFBQTUFSSVQsIFBQTVNBQ0FULCBwcHJlZzksIFBQU1RBVEVOLCBQUEhPVVNFLCBQUFJFTlQsIFBQTkVULCBRMTJfMTpRMTJfMTUsIHdlaWdodCkgJT4lCiAgICByZW5hbWUoIlExMl8xX0F2b2lkLnRvdWNoaW5nLm15LmV5ZXMiID0gUTEyXzEsCiAgICAgICAgICJRMTJfMl9Bdm9pZC50b3VjaGluZy5teS5ub3NlIiA9IFExMl8yLAogICAgICAgICAiUTEyXzNfQXZvaWQudG91Y2hpbmcubXkubW91dGgiID0JUTEyXzMsCiAgICAgICAgICJRMTJfNF9XYXNoLm15LmhhbmRzLndpdGguc29hcC5tb3JlLm9mdGVuIj0gUTEyXzQsCiAgICAgICAgICJRMTJfNV9Vc2UuaGFuZC5zYW5pdGl6ZXJzIiA9IFExMl81LAogICAgICAgICAiUTEyXzZfQ2xlYW4udGhlLnN1cmZhY2VzLmluLm15LmhvbWUiID0JUTEyXzYsCiAgICAgICAgICJRMTJfN19DbGVhbi50aGUuc3VyZmFjZXMuYXQud29yayIgPSBRMTJfNywKICAgICAgICAgIlExMl84X0VhdC5udXRyaXRpb3VzLmZvb2QiID0gUTEyXzgsCiAgICAgICAgICJRMTJfOV9HZXQuYWRlcXVhdGUucmVzdCIgPSBRMTJfOSwKICAgICAgICAgIlExMl8xMF9HZXQucmVjb21tZW5kZWQudmFjY2luZSIgPQlRMTJfMTAsCiAgICAgICAgICJRMTJfMTFfVGFrZS5wcmV2ZW50aXZlLm1lZGljaW5lIiA9IFExMl8xMSwKICAgICAgICAgIlExMl8xMl9Db3Zlci5teS5ub3NlLmFuZC5tb3V0aC53aXRoLmEuc3VyZ2ljYWwubWFzayIgPSBRMTJfMTIsCiAgICAgICAgICJRMTJfMTNfQXZvaWQuY29udGFjdC53aXRoLnBlb3BsZS53aG8uYXJlLnNpY2siID0gUTEyXzEzLAogICAgICAgICAiUTEyXzE0X0F2b2lkLmNyb3dkZWQucGxhY2VzIiA9IFExMl8xNCwKICAgICAgICAgIlExMl8xNV9PdGhlciIgPSBRMTJfMTUpICU+JQogIGdhdGhlcihRMTJfcSwgUTEyX3IsIFExMl8xX0F2b2lkLnRvdWNoaW5nLm15LmV5ZXM6UTEyXzE1X090aGVyLCBuYS5ybSA9IFQpICU+JQogIG11dGF0ZShRMTJfciA9IGZhY3RvcihRMTJfciwgbGV2ZWxzID0gYygiQWx3YXlzIiwgIlNvbWV0aW1lcyIsICJOZXZlciIpKSkKCiMgcmVsZXZlbApsYWJlbCA9IGMoIlExMl8xX0F2b2lkLnRvdWNoaW5nLm15LmV5ZXMiLCAKICAgICAgICAgIlExMl8yX0F2b2lkLnRvdWNoaW5nLm15Lm5vc2UiLCAKICAgICAgICAgIlExMl8zX0F2b2lkLnRvdWNoaW5nLm15Lm1vdXRoIiwgCiAgICAgICAgICJRMTJfNF9XYXNoLm15LmhhbmRzLndpdGguc29hcC5tb3JlLm9mdGVuIiwKICAgICAgICAgIlExMl81X1VzZS5oYW5kLnNhbml0aXplcnMiLAogICAgICAgICAiUTEyXzZfQ2xlYW4udGhlLnN1cmZhY2VzLmluLm15LmhvbWUiLAogICAgICAgICAiUTEyXzdfQ2xlYW4udGhlLnN1cmZhY2VzLmF0LndvcmsiLAogICAgICAgICAiUTEyXzhfRWF0Lm51dHJpdGlvdXMuZm9vZCIsCiAgICAgICAgICJRMTJfOV9HZXQuYWRlcXVhdGUucmVzdCIsCiAgICAgICAgICJRMTJfMTBfR2V0LnJlY29tbWVuZGVkLnZhY2NpbmUiLAogICAgICAgICAiUTEyXzExX1Rha2UucHJldmVudGl2ZS5tZWRpY2luZSIsCiAgICAgICAgICJRMTJfMTJfQ292ZXIubXkubm9zZS5hbmQubW91dGgud2l0aC5hLnN1cmdpY2FsLm1hc2siLAogICAgICAgICAiUTEyXzEzX0F2b2lkLmNvbnRhY3Qud2l0aC5wZW9wbGUud2hvLmFyZS5zaWNrIiwKICAgICAgICAgIlExMl8xNF9Bdm9pZC5jcm93ZGVkLnBsYWNlcyIsCiAgICAgICAgICJRMTJfMTVfT3RoZXIiKQoKcTEyX2RmIDwtIHExMl9kZiAlPiUKICAgIG11dGF0ZShRMTJfcSA9IGZhY3RvcihRMTJfcSwgbGV2ZWxzID0gbGFiZWwpKQoKIyBzdXJ2ZXkgZGVzaWduCm9wdGlvbnMoZGlnaXRzID0gNCkKb3B0aW9ucyhzdXJ2ZXkubG9uZWx5LnBzdSA9ICJhZGp1c3QiKQpkZXMxMiA8LSBzdnlkZXNpZ24oaWRzID0gfjEsIHdlaWdodHMgPSB+d2VpZ2h0LCBkYXRhID0gcTEyX2RmW2lzLm5hKHExMl9kZiR3ZWlnaHQpPT1GLCBdKQpgYGAKCmBgYHtyIHExMi1wbG90LTEsICBmaWcuaGVpZ2h0PTQsIGZpZy53aWR0aD04fQojIHdlaWdodGVkIGRhdGEgZnJhbWUKcTEyIDwtIGRhdGEuZnJhbWUoc3Z5dGFibGUoflExMl9xICsgUTEyX3IgKyBQUEdFTkRFUiArIHBwYWdlY2F0ICsgcHBhZ2VjdDQgKyBQUEVUSE0gKyBQUElOQ0lNUCwgZGVzMTIsIHJvdW5kID0gVCkpCgojIHBsb3QgdGVtcGxhdGVzCnRpdGxlIDwtIGdndGl0bGUoIldoaWNoIG9mIHRoZSBmb2xsb3dpbmcgYWN0aW9ucyBkbyB5b3UgdGFrZSB0byBhdm9pZCBnZXR0aW5nIHNpY2s/IikKIyBkZXNjZW5kaW5nIG9yZGVyIG9mIGxhYmVscwpwbGFiZWwgPC0gc2NhbGVfeF9kaXNjcmV0ZShsaW1pdHMgPSByZXYobGV2ZWxzKHExMiRRMTJfcSkpKQoKIyMgbWFpbiBwbG90CnAgPC0gZ2dwbG90KHExMiwgYWVzKFExMl9xLCB3ZWlnaHQgPSBGcmVxKSkgKyBwbGFiZWwgKyBwdGV4dApwICsgZ2VvbV9iYXIocG9zaXRpb24gPSAiZmlsbCIpICsgYWVzKGZpbGwgPSBRMTJfcikgKyB0aXRsZSArIGNvb3JkX2ZsaXAoKQpgYGAKCiMjIyBHZW5kZXIKYGBge3IgcTEyLXBsb3QtMWIsICBmaWcuaGVpZ2h0PTQsIGZpZy53aWR0aD04fQojIHAyCnAyIDwtIGdncGxvdChxMTIsIGFlcyhRMTJfcSwgd2VpZ2h0ID0gRnJlcSkpICsgcHRleHQKCiMgZ2VuZGVyCnAyICsgZ2VvbV9iYXIocG9zaXRpb24gPSAiZmlsbCIpICsgYWVzKFExMl9xLCBmaWxsID0gUFBHRU5ERVIpICsgZmFjZXRfd3JhcCh+UTEyX3IpICsgZ2d0aXRsZSgiQnkgZ2VuZGVyIikgKyBjb29yZF9mbGlwKCkgKyBwbGFiZWwKcDIgKyBnZW9tX2Jhcihwb3NpdGlvbiA9ICJkb2RnZSIpICsgYWVzKFExMl9xLCBmaWxsID0gUFBHRU5ERVIpICsgZmFjZXRfd3JhcCh+UTEyX3IpICsgZ2d0aXRsZSgiQnkgZ2VuZGVyIikgKyBjb29yZF9mbGlwKCkgKyBwbGFiZWwKCnAyICsgZ2VvbV9iYXIocG9zaXRpb24gPSAiZmlsbCIpICsgYWVzKFBQR0VOREVSLCBmaWxsID0gUTEyX3IpICsgZmFjZXRfd3JhcCh+UTEyX3EpICsgY29vcmRfZmxpcCgpCmBgYAoKIyMjIEFnZSBncm91cApgYGB7ciwgZmlnLmhlaWdodD00LCBmaWcud2lkdGg9OH0KIyBieSBhZ2UgZ3JvdXAKcDIgKyBnZW9tX2Jhcihwb3NpdGlvbiA9ICJmaWxsIikgKyBhZXMoUTEyX3EsIGZpbGwgPSBwcGFnZWN0NCkgKyBmYWNldF93cmFwKH5RMTJfcikgKyBnZ3RpdGxlKCJCeSBhZ2UgZ3JvdXAiKSArIHBsYWJlbCArIGNvb3JkX2ZsaXAoKQpgYGAKCmBgYHtyLCBmaWcuaGVpZ2h0PTYsIGZpZy53aWR0aD04fQpwMiArIGdlb21fYmFyKHBvc2l0aW9uID0gImZpbGwiKSArIGFlcyhRMTJfcSwgZmlsbCA9IHBwYWdlY3Q0KSArIGZhY2V0X2dyaWQoUTEyX3IgfiAuKSArIGNvb3JkX2ZsaXAoKSArIHBsYWJlbApwMiArIGdlb21fYmFyKHBvc2l0aW9uID0gImZpbGwiKSArIGFlcyhwcGFnZWNhdCwgZmlsbCA9IFExMl9yKSArIGZhY2V0X3dyYXAoflExMl9xKSAKYGBgCgojIyMgRXRobmljaXR5CmBgYHtyLCBmaWcuaGVpZ2h0PTQsIGZpZy53aWR0aD04fQojIGJ5IGV0aG5pYyBncm91cApwMiArIGdlb21fYmFyKHBvc2l0aW9uID0gImZpbGwiKSArIGFlcyhRMTJfcSwgZmlsbCA9IFBQRVRITSkgKyBmYWNldF93cmFwKH5RMTJfcikgKyBnZ3RpdGxlKCJCeSBldGhuaWMgZ3JvdXAiKSArIHBsYWJlbCArIGNvb3JkX2ZsaXAoKQpgYGAKCmBgYHtyLCBmaWcuaGVpZ2h0PTYsIGZpZy53aWR0aD04fQpwMiArIGdlb21fYmFyKHBvc2l0aW9uID0gImZpbGwiKSArIGFlcyhRMTJfcSwgZmlsbCA9IFBQRVRITSkgKyBmYWNldF9ncmlkKFExMl9yIH4gLikgKyBjb29yZF9mbGlwKCkgKyBwbGFiZWwKcDIgKyBnZW9tX2Jhcihwb3NpdGlvbiA9ICJmaWxsIikgKyBhZXMoUFBFVEhNLCBmaWxsID0gUTEyX3IpICsgZmFjZXRfd3JhcCh+UTEyX3EpIApgYGAKCiMjIyBJbmNvbWUKYGBge3IsIGZpZy5oZWlnaHQ9NCwgZmlnLndpZHRoPTh9CiMgYnkgaW5jb21lIGdyb3VwCnAyICsgZ2VvbV9iYXIocG9zaXRpb24gPSAiZmlsbCIpICsgYWVzKFExMl9xLCBmaWxsID0gUFBJTkNJTVApICsgZmFjZXRfd3JhcCh+UTEyX3IpICsgZ2d0aXRsZSgiQnkgaW5jb21lIGdyb3VwIikgKyBwbGFiZWwgKyBjb29yZF9mbGlwKCkgKyBwdGV4dDMKYGBgCgpgYGB7ciwgZmlnLmhlaWdodD02LCBmaWcud2lkdGg9OH0KcDIgKyBnZW9tX2Jhcihwb3NpdGlvbiA9ICJmaWxsIikgKyBhZXMoUTEyX3EsIGZpbGwgPSBQUElOQ0lNUCkgKyBmYWNldF9ncmlkKFExMl9yIH4gLikgKyBjb29yZF9mbGlwKCkgKyBwbGFiZWwgKyBwdGV4dDMKCnAyICsgZ2VvbV9iYXIocG9zaXRpb24gPSAiZmlsbCIpICsgYWVzKFBQSU5DSU1QLCBmaWxsID0gUTEyX3IpICsgZmFjZXRfd3JhcCh+UTEyX3EpICsgcHRleHQyCmBgYAoKCmBgYHtyIHExMi1wbG90LTJ9CiMgdXBkYXRlIHdlaWdodGVkIGRhdGEgZnJhbWUKcTEyLjIgPC0gZGF0YS5mcmFtZShzdnl0YWJsZSh+UTEyX3EgKyBRMTJfciArIFBQRURVQyArIFBQRURVQ0FUICsgd29yayArIFBQV09SSyArIG1hcml0YWwgKyBQUE1BUklULCBkZXMxMiwgcm91bmQgPSBUKSkKCiMgcmVzdGF0ZSBwbG90cwpwMyA8LSBnZ3Bsb3QocTEyLjIsIGFlcyhRMTJfcSwgd2VpZ2h0ID0gRnJlcSkpICsgcHRleHQKCiMgZGVzY2VuZGluZyBvcmRlciBvZiBsYWJlbHMKcGxhYmVsIDwtIHNjYWxlX3hfZGlzY3JldGUobGltaXRzID0gcmV2KGxldmVscyhxMTIuMiRRMTJfcSkpKQpgYGAKCiMjIyBFZHVjYXRpb24KYGBge3IgcTEyLXBsb3QtMmIsIGZpZy5oZWlnaHQ9NCwgZmlnLndpZHRoPTh9CiMgYnkgZWR1Y2F0aW9uCnAzICsgZ2VvbV9iYXIocG9zaXRpb24gPSAiZmlsbCIpICsgYWVzKFExMl9xLCBmaWxsID0gUFBFRFVDQVQpICsgZmFjZXRfd3JhcCh+UTEyX3IpICsgZ2d0aXRsZSgiQnkgZWR1Y2F0aW9uIikgKyBwbGFiZWwgKyBjb29yZF9mbGlwKCkKYGBgCgpgYGB7ciwgZmlnLmhlaWdodD02LCBmaWcud2lkdGg9OH0KcDMgKyBnZW9tX2Jhcihwb3NpdGlvbiA9ICJmaWxsIikgKyBhZXMoUTEyX3EsIGZpbGwgPSBQUEVEVUNBVCkgKyBmYWNldF9ncmlkKFExMl9yIH4gLikgKyBjb29yZF9mbGlwKCkgKyBwbGFiZWwgIysgcHRleHQzCgpwMyArIGdlb21fYmFyKHBvc2l0aW9uID0gImZpbGwiKSArIGFlcyhQUEVEVUNBVCwgZmlsbCA9IFExMl9yKSArIGZhY2V0X3dyYXAoflExMl9xKSArIHB0ZXh0MiArIGdndGl0bGUoIkJ5IGVkdWNhdGlvbiIpCmBgYAoKCgoKCgoK