Load Data/Packages


Experiment 1 data from McManus et al. (2021) should be loaded into R: https://osf.io/kv6sw/. Additionally, analyses from that experiment should be conducted using the .Rmd file from the paper’s OSF page: https://osf.io/6mtg9/. Then, this script can be run.

options(scipen = 99) # removes scientific notation

Reorganizing Data

# Select E1a-b long datasets, select variables of interest, widen data, create new vars

E1ab_wide <- E1_all_long  %>%
  filter(BSs_cond != "CUZ vs SIB") %>% # removes dataset which compares judgments of helping family to other family
  select(ResponseId,
         BSs_cond, Relation, `Choice Context`,
         moral) %>% # selects only relevant vars
  pivot_wider(names_from = c(`Choice Context`, Relation), values_from = moral) %>% # creates dataset with four within-subj conditions per participant (similar to how data would be structured in SPSS) 
  mutate(NoChoice_Moral_Diff = (`No Choice_Distant` - `No Choice_Close`)) %>%
  mutate(Choice_Moral_Diff = (Choice_Distant - Choice_Close)) %>% # creates person-level difference scores for each simple effect of interest
  mutate(Int_Moral = (NoChoice_Moral_Diff - Choice_Moral_Diff)) # creates person-level interaction score

Creating All Possible 2x2 Person-Level Patterns

E1ab_wide <- E1ab_wide %>%
  mutate(`2x2_Pattern` = case_when(
    (NoChoice_Moral_Diff == 0 & Choice_Moral_Diff == 0) ~ "Zero, Zero, Zero",
    (NoChoice_Moral_Diff == 0 & Choice_Moral_Diff < 0) ~ "Zero, Neg, Pos",
    (NoChoice_Moral_Diff == 0 & Choice_Moral_Diff > 0) ~ "Zero, Pos, Neg",
    (NoChoice_Moral_Diff < 0 & Choice_Moral_Diff == 0) ~ "Neg, Zero, Neg",
    (NoChoice_Moral_Diff < 0 & Choice_Moral_Diff < 0 & NoChoice_Moral_Diff == Choice_Moral_Diff) ~ "Neg, Neg, Zero",
    (NoChoice_Moral_Diff < 0 & Choice_Moral_Diff > 0) ~ "Neg, Pos, Neg",
    (NoChoice_Moral_Diff < 0 & Choice_Moral_Diff < 0 & NoChoice_Moral_Diff > Choice_Moral_Diff) ~ "Neg, Neg, Pos",
    (NoChoice_Moral_Diff < 0 & Choice_Moral_Diff < 0 & NoChoice_Moral_Diff < Choice_Moral_Diff) ~ "Neg, Neg, Neg",
    (NoChoice_Moral_Diff > 0 & Choice_Moral_Diff == 0) ~ "Pos, Zero, Pos",
    (NoChoice_Moral_Diff > 0 & Choice_Moral_Diff < 0) ~ "Pos, Neg, Pos", # predicted effect
    (NoChoice_Moral_Diff > 0 & Choice_Moral_Diff > 0 & NoChoice_Moral_Diff == Choice_Moral_Diff) ~ "Pos, Pos, Zero",
    (NoChoice_Moral_Diff > 0 & Choice_Moral_Diff > 0 & NoChoice_Moral_Diff < Choice_Moral_Diff) ~ "Pos, Pos, Neg",
    (NoChoice_Moral_Diff > 0 & Choice_Moral_Diff > 0 & NoChoice_Moral_Diff > Choice_Moral_Diff) ~ "Pos, Pos, Pos"))

# make variable a factor
E1ab_wide$`2x2_Pattern` <- as.factor(E1ab_wide$`2x2_Pattern`)

Plotting Persons-as-Effect-Sizes

E1a (STR vs SIB)

print(E1a_MMY_Moral_Person <- ggplot(data = E1ab_wide %>% filter(BSs_cond == "STR vs SIB"), aes(x = `2x2_Pattern`, 
                                                  fill = `2x2_Pattern`)) +
  geom_bar(position = "dodge", size = 0.5) +
        scale_y_continuous(labels = function(x) paste0(round(x/203*100), "%"), breaks = seq(0,101.5,20.3)) +
        coord_cartesian(ylim = c(1,101.5)) +
        scale_x_discrete(drop = FALSE) +
        scale_fill_manual(drop = FALSE, values = c(
                                     "lightgrey", 
                                     "azure4",
                                     "lightgrey",
                                     "lightgrey",
                                     "lightgrey",
                                     "black", # group-level pattern
                                     "lightgrey",
                                     "azure4",
                                     "lightgrey",
                                     "azure4",
                                     "azure4",
                                     "lightgrey",
                                     "lightgrey"))+
        theme_classic() +
        theme(legend.position = "none") + 
        xlab("\n2x2 Direction (Simple Effects = Stranger - Sibling; Interaction = No Choice Simple - Choice Simple)") +
        ylab("Perentage of Participants\n") +  
        theme(axis.title.x = element_text(size = 18), 
              axis.title.y = element_text(size = 20),
              axis.text.x = element_text(color = "black", size = 13, angle = 60, vjust = 0.5, hjust=0.5),
              axis.text.y = element_text(color = "black", size = 20),
              strip.text.x = element_text(color = "black", size = 20),
              legend.title = element_text(color = "black", size = 18),
              legend.text = element_text(color = "black", size = 16)))


ggsave("E1a_MMY_Moral_Person.png")
Saving 14 x 9 in image

E1b (STR vs CUZ) - Tutorial Figure

print(E1b_MMY_Moral_Person <- ggplot(data = E1ab_wide %>% filter(BSs_cond == "STR vs CUZ"), aes(x = `2x2_Pattern`, 
                                                  fill = `2x2_Pattern`)) +
  geom_bar(position = "dodge", size = 0.5) +
        scale_y_continuous(labels = function(x) paste0(round(x/203*100), "%"), breaks = seq(0,101.5,20.3)) +
        coord_cartesian(ylim = c(1,101.5)) +
        scale_x_discrete(drop = FALSE) +
        scale_fill_manual(drop = FALSE, values = c(
                                     "lightgrey", 
                                     "azure4",
                                     "lightgrey",
                                     "lightgrey",
                                     "lightgrey",
                                     "black", # group-level pattern
                                     "lightgrey",
                                     "azure4",
                                     "lightgrey",
                                     "azure4",
                                     "azure4",
                                     "lightgrey",
                                     "lightgrey"))+
        theme_classic() +
        theme(legend.position = "none") + 
        xlab("\n2x2 Direction (Simple Effects = Stranger - Cousin; Interaction = No Choice Simple - Choice Simple)") +
        ylab("Perentage of Participants\n") +  
        theme(axis.title.x = element_text(size = 18), 
              axis.title.y = element_text(size = 20),
              axis.text.x = element_text(color = "black", size = 13, angle = 60, vjust = 0.5, hjust=0.5),
              axis.text.y = element_text(color = "black", size = 20),
              strip.text.x = element_text(color = "black", size = 20),
              legend.title = element_text(color = "black", size = 18),
              legend.text = element_text(color = "black", size = 16)))


ggsave("E1b_MMY_Moral_Person.png")
Saving 14 x 9 in image

Tabulating Raw Frequencies

E1ab_wide %>% 
  group_by(BSs_cond, `2x2_Pattern`) %>% 
  dplyr::summarize(`2x2_pattern` = n())
`summarise()` regrouping output by 'BSs_cond' (override with `.groups` argument)
LS0tDQp0aXRsZTogIlR1dG9yaWFsIG9mIEdyb3VwLXRvLVBlcnNvbiBHZW5lcmFsaXphYmlsaXR5IFByb2JsZW0gKE1jTWFudXMgZXQgYWwuIDIwMjEpIg0KYXV0aG9yOiAiUnlhbiBNY01hbnVzIg0KZGF0ZTogJ2ByIGZvcm1hdChTeXMudGltZSgpLCAiJUIgJWQsICVZIilgJw0Kb3V0cHV0OiANCiAgaHRtbF9ub3RlYm9vazoNCiAgICBjb2RlX2ZvbGRpbmc6IGhpZGUNCiAgICBoaWdobGlnaHQ6IHRhbmdvDQogICAgdGhlbWU6IGRhcmtseQ0KICAgIHRvYzogeWVzDQogICAgdG9jX2RlcHRoOiA1DQogICAgdG9jX2Zsb2F0OiB5ZXMNCi0tLQ0KDQojIExvYWQgRGF0YS9QYWNrYWdlcw0KDQo8YnI+DQpFeHBlcmltZW50IDEgZGF0YSBmcm9tIE1jTWFudXMgZXQgYWwuICgyMDIxKSBzaG91bGQgYmUgbG9hZGVkIGludG8gUjogaHR0cHM6Ly9vc2YuaW8va3Y2c3cvLiBBZGRpdGlvbmFsbHksIGFuYWx5c2VzIGZyb20gdGhhdCBleHBlcmltZW50IHNob3VsZCBiZSBjb25kdWN0ZWQgdXNpbmcgdGhlIC5SbWQgZmlsZSBmcm9tIHRoZSBwYXBlcidzIE9TRiBwYWdlOiBodHRwczovL29zZi5pby82bXRnOS8uIFRoZW4sIHRoaXMgc2NyaXB0IGNhbiBiZSBydW4uDQo8YnI+DQoNCmBgYHtyfQ0Kb3B0aW9ucyhzY2lwZW4gPSA5OSkgIyByZW1vdmVzIHNjaWVudGlmaWMgbm90YXRpb24NCmBgYA0KDQojIFJlb3JnYW5pemluZyBEYXRhIHsudGFic2V0fQ0KYGBge3J9DQojIFNlbGVjdCBFMWEtYiBsb25nIGRhdGFzZXRzLCBzZWxlY3QgdmFyaWFibGVzIG9mIGludGVyZXN0LCB3aWRlbiBkYXRhLCBjcmVhdGUgbmV3IHZhcnMNCg0KRTFhYl93aWRlIDwtIEUxX2FsbF9sb25nICAlPiUNCiAgZmlsdGVyKEJTc19jb25kICE9ICJDVVogdnMgU0lCIikgJT4lICMgcmVtb3ZlcyBkYXRhc2V0IHdoaWNoIGNvbXBhcmVzIGp1ZGdtZW50cyBvZiBoZWxwaW5nIGZhbWlseSB0byBvdGhlciBmYW1pbHkNCiAgc2VsZWN0KFJlc3BvbnNlSWQsDQogICAgICAgICBCU3NfY29uZCwgUmVsYXRpb24sIGBDaG9pY2UgQ29udGV4dGAsDQogICAgICAgICBtb3JhbCkgJT4lICMgc2VsZWN0cyBvbmx5IHJlbGV2YW50IHZhcnMNCiAgcGl2b3Rfd2lkZXIobmFtZXNfZnJvbSA9IGMoYENob2ljZSBDb250ZXh0YCwgUmVsYXRpb24pLCB2YWx1ZXNfZnJvbSA9IG1vcmFsKSAlPiUgIyBjcmVhdGVzIGRhdGFzZXQgd2l0aCBmb3VyIHdpdGhpbi1zdWJqIGNvbmRpdGlvbnMgcGVyIHBhcnRpY2lwYW50IChzaW1pbGFyIHRvIGhvdyBkYXRhIHdvdWxkIGJlIHN0cnVjdHVyZWQgaW4gU1BTUykgDQogIG11dGF0ZShOb0Nob2ljZV9Nb3JhbF9EaWZmID0gKGBObyBDaG9pY2VfRGlzdGFudGAgLSBgTm8gQ2hvaWNlX0Nsb3NlYCkpICU+JQ0KICBtdXRhdGUoQ2hvaWNlX01vcmFsX0RpZmYgPSAoQ2hvaWNlX0Rpc3RhbnQgLSBDaG9pY2VfQ2xvc2UpKSAlPiUgIyBjcmVhdGVzIHBlcnNvbi1sZXZlbCBkaWZmZXJlbmNlIHNjb3JlcyBmb3IgZWFjaCBzaW1wbGUgZWZmZWN0IG9mIGludGVyZXN0DQogIG11dGF0ZShJbnRfTW9yYWwgPSAoTm9DaG9pY2VfTW9yYWxfRGlmZiAtIENob2ljZV9Nb3JhbF9EaWZmKSkgIyBjcmVhdGVzIHBlcnNvbi1sZXZlbCBpbnRlcmFjdGlvbiBzY29yZQ0KYGBgDQoNCiMgQ3JlYXRpbmcgQWxsIFBvc3NpYmxlIDJ4MiBQZXJzb24tTGV2ZWwgUGF0dGVybnMNCmBgYHtyfQ0KRTFhYl93aWRlIDwtIEUxYWJfd2lkZSAlPiUNCiAgbXV0YXRlKGAyeDJfUGF0dGVybmAgPSBjYXNlX3doZW4oDQogICAgKE5vQ2hvaWNlX01vcmFsX0RpZmYgPT0gMCAmIENob2ljZV9Nb3JhbF9EaWZmID09IDApIH4gIlplcm8sIFplcm8sIFplcm8iLA0KICAgIChOb0Nob2ljZV9Nb3JhbF9EaWZmID09IDAgJiBDaG9pY2VfTW9yYWxfRGlmZiA8IDApIH4gIlplcm8sIE5lZywgUG9zIiwNCiAgICAoTm9DaG9pY2VfTW9yYWxfRGlmZiA9PSAwICYgQ2hvaWNlX01vcmFsX0RpZmYgPiAwKSB+ICJaZXJvLCBQb3MsIE5lZyIsDQogICAgKE5vQ2hvaWNlX01vcmFsX0RpZmYgPCAwICYgQ2hvaWNlX01vcmFsX0RpZmYgPT0gMCkgfiAiTmVnLCBaZXJvLCBOZWciLA0KICAgIChOb0Nob2ljZV9Nb3JhbF9EaWZmIDwgMCAmIENob2ljZV9Nb3JhbF9EaWZmIDwgMCAmIE5vQ2hvaWNlX01vcmFsX0RpZmYgPT0gQ2hvaWNlX01vcmFsX0RpZmYpIH4gIk5lZywgTmVnLCBaZXJvIiwNCiAgICAoTm9DaG9pY2VfTW9yYWxfRGlmZiA8IDAgJiBDaG9pY2VfTW9yYWxfRGlmZiA+IDApIH4gIk5lZywgUG9zLCBOZWciLA0KICAgIChOb0Nob2ljZV9Nb3JhbF9EaWZmIDwgMCAmIENob2ljZV9Nb3JhbF9EaWZmIDwgMCAmIE5vQ2hvaWNlX01vcmFsX0RpZmYgPiBDaG9pY2VfTW9yYWxfRGlmZikgfiAiTmVnLCBOZWcsIFBvcyIsDQogICAgKE5vQ2hvaWNlX01vcmFsX0RpZmYgPCAwICYgQ2hvaWNlX01vcmFsX0RpZmYgPCAwICYgTm9DaG9pY2VfTW9yYWxfRGlmZiA8IENob2ljZV9Nb3JhbF9EaWZmKSB+ICJOZWcsIE5lZywgTmVnIiwNCiAgICAoTm9DaG9pY2VfTW9yYWxfRGlmZiA+IDAgJiBDaG9pY2VfTW9yYWxfRGlmZiA9PSAwKSB+ICJQb3MsIFplcm8sIFBvcyIsDQogICAgKE5vQ2hvaWNlX01vcmFsX0RpZmYgPiAwICYgQ2hvaWNlX01vcmFsX0RpZmYgPCAwKSB+ICJQb3MsIE5lZywgUG9zIiwgIyBwcmVkaWN0ZWQgZWZmZWN0DQogICAgKE5vQ2hvaWNlX01vcmFsX0RpZmYgPiAwICYgQ2hvaWNlX01vcmFsX0RpZmYgPiAwICYgTm9DaG9pY2VfTW9yYWxfRGlmZiA9PSBDaG9pY2VfTW9yYWxfRGlmZikgfiAiUG9zLCBQb3MsIFplcm8iLA0KICAgIChOb0Nob2ljZV9Nb3JhbF9EaWZmID4gMCAmIENob2ljZV9Nb3JhbF9EaWZmID4gMCAmIE5vQ2hvaWNlX01vcmFsX0RpZmYgPCBDaG9pY2VfTW9yYWxfRGlmZikgfiAiUG9zLCBQb3MsIE5lZyIsDQogICAgKE5vQ2hvaWNlX01vcmFsX0RpZmYgPiAwICYgQ2hvaWNlX01vcmFsX0RpZmYgPiAwICYgTm9DaG9pY2VfTW9yYWxfRGlmZiA+IENob2ljZV9Nb3JhbF9EaWZmKSB+ICJQb3MsIFBvcywgUG9zIikpDQoNCiMgbWFrZSB2YXJpYWJsZSBhIGZhY3Rvcg0KRTFhYl93aWRlJGAyeDJfUGF0dGVybmAgPC0gYXMuZmFjdG9yKEUxYWJfd2lkZSRgMngyX1BhdHRlcm5gKQ0KYGBgDQoNCiMgUGxvdHRpbmcgUGVyc29ucy1hcy1FZmZlY3QtU2l6ZXMgey50YWJzZXR9DQoNCiMjIEUxYSAoU1RSIHZzIFNJQikNCmBgYHtyLCBmaWcud2lkdGggPSAxNCwgZmlnLmhlaWdodCA9IDksIG91dC53aWR0aCA9ICI3NSUiLCBvdXQuaGVpZ2h0ID0gIjc1JSJ9DQpwcmludChFMWFfTU1ZX01vcmFsX1BlcnNvbiA8LSBnZ3Bsb3QoZGF0YSA9IEUxYWJfd2lkZSAlPiUgZmlsdGVyKEJTc19jb25kID09ICJTVFIgdnMgU0lCIiksIGFlcyh4ID0gYDJ4Ml9QYXR0ZXJuYCwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGwgPSBgMngyX1BhdHRlcm5gKSkgKw0KICBnZW9tX2Jhcihwb3NpdGlvbiA9ICJkb2RnZSIsIHNpemUgPSAwLjUpICsNCiAgICAgICAgc2NhbGVfeV9jb250aW51b3VzKGxhYmVscyA9IGZ1bmN0aW9uKHgpIHBhc3RlMChyb3VuZCh4LzIwMyoxMDApLCAiJSIpLCBicmVha3MgPSBzZXEoMCwxMDEuNSwyMC4zKSkgKw0KICAgICAgICBjb29yZF9jYXJ0ZXNpYW4oeWxpbSA9IGMoMSwxMDEuNSkpICsNCiAgICAgICAgc2NhbGVfeF9kaXNjcmV0ZShkcm9wID0gRkFMU0UpICsNCiAgICAgICAgc2NhbGVfZmlsbF9tYW51YWwoZHJvcCA9IEZBTFNFLCB2YWx1ZXMgPSBjKA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaWdodGdyZXkiLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYXp1cmU0IiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGlnaHRncmV5IiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGlnaHRncmV5IiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGlnaHRncmV5IiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYmxhY2siLCAjIGdyb3VwLWxldmVsIHBhdHRlcm4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGlnaHRncmV5IiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYXp1cmU0IiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGlnaHRncmV5IiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYXp1cmU0IiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYXp1cmU0IiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGlnaHRncmV5IiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGlnaHRncmV5IikpKw0KICAgICAgICB0aGVtZV9jbGFzc2ljKCkgKw0KICAgICAgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpICsgDQogICAgICAgIHhsYWIoIlxuMngyIERpcmVjdGlvbiAoU2ltcGxlIEVmZmVjdHMgPSBTdHJhbmdlciAtIFNpYmxpbmc7IEludGVyYWN0aW9uID0gTm8gQ2hvaWNlIFNpbXBsZSAtIENob2ljZSBTaW1wbGUpIikgKw0KICAgICAgICB5bGFiKCJQZXJlbnRhZ2Ugb2YgUGFydGljaXBhbnRzXG4iKSArICANCiAgICAgICAgdGhlbWUoYXhpcy50aXRsZS54ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxOCksIA0KICAgICAgICAgICAgICBheGlzLnRpdGxlLnkgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDIwKSwNCiAgICAgICAgICAgICAgYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoY29sb3IgPSAiYmxhY2siLCBzaXplID0gMTMsIGFuZ2xlID0gNjAsIHZqdXN0ID0gMC41LCBoanVzdD0wLjUpLA0KICAgICAgICAgICAgICBheGlzLnRleHQueSA9IGVsZW1lbnRfdGV4dChjb2xvciA9ICJibGFjayIsIHNpemUgPSAyMCksDQogICAgICAgICAgICAgIHN0cmlwLnRleHQueCA9IGVsZW1lbnRfdGV4dChjb2xvciA9ICJibGFjayIsIHNpemUgPSAyMCksDQogICAgICAgICAgICAgIGxlZ2VuZC50aXRsZSA9IGVsZW1lbnRfdGV4dChjb2xvciA9ICJibGFjayIsIHNpemUgPSAxOCksDQogICAgICAgICAgICAgIGxlZ2VuZC50ZXh0ID0gZWxlbWVudF90ZXh0KGNvbG9yID0gImJsYWNrIiwgc2l6ZSA9IDE2KSkpDQoNCmdnc2F2ZSgiRTFhX01NWV9Nb3JhbF9QZXJzb24ucG5nIikNCmBgYA0KIyMgRTFiIChTVFIgdnMgQ1VaKSAtIFR1dG9yaWFsIEZpZ3VyZQ0KYGBge3IsIGZpZy53aWR0aCA9IDE0LCBmaWcuaGVpZ2h0ID0gOSwgb3V0LndpZHRoID0gIjc1JSIsIG91dC5oZWlnaHQgPSAiNzUlIn0NCnByaW50KEUxYl9NTVlfTW9yYWxfUGVyc29uIDwtIGdncGxvdChkYXRhID0gRTFhYl93aWRlICU+JSBmaWx0ZXIoQlNzX2NvbmQgPT0gIlNUUiB2cyBDVVoiKSwgYWVzKHggPSBgMngyX1BhdHRlcm5gLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbCA9IGAyeDJfUGF0dGVybmApKSArDQogIGdlb21fYmFyKHBvc2l0aW9uID0gImRvZGdlIiwgc2l6ZSA9IDAuNSkgKw0KICAgICAgICBzY2FsZV95X2NvbnRpbnVvdXMobGFiZWxzID0gZnVuY3Rpb24oeCkgcGFzdGUwKHJvdW5kKHgvMjAzKjEwMCksICIlIiksIGJyZWFrcyA9IHNlcSgwLDEwMS41LDIwLjMpKSArDQogICAgICAgIGNvb3JkX2NhcnRlc2lhbih5bGltID0gYygxLDEwMS41KSkgKw0KICAgICAgICBzY2FsZV94X2Rpc2NyZXRlKGRyb3AgPSBGQUxTRSkgKw0KICAgICAgICBzY2FsZV9maWxsX21hbnVhbChkcm9wID0gRkFMU0UsIHZhbHVlcyA9IGMoDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxpZ2h0Z3JleSIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhenVyZTQiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaWdodGdyZXkiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaWdodGdyZXkiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaWdodGdyZXkiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJibGFjayIsICMgZ3JvdXAtbGV2ZWwgcGF0dGVybg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaWdodGdyZXkiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhenVyZTQiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaWdodGdyZXkiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhenVyZTQiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhenVyZTQiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaWdodGdyZXkiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaWdodGdyZXkiKSkrDQogICAgICAgIHRoZW1lX2NsYXNzaWMoKSArDQogICAgICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIikgKyANCiAgICAgICAgeGxhYigiXG4yeDIgRGlyZWN0aW9uIChTaW1wbGUgRWZmZWN0cyA9IFN0cmFuZ2VyIC0gQ291c2luOyBJbnRlcmFjdGlvbiA9IE5vIENob2ljZSBTaW1wbGUgLSBDaG9pY2UgU2ltcGxlKSIpICsNCiAgICAgICAgeWxhYigiUGVyZW50YWdlIG9mIFBhcnRpY2lwYW50c1xuIikgKyAgDQogICAgICAgIHRoZW1lKGF4aXMudGl0bGUueCA9IGVsZW1lbnRfdGV4dChzaXplID0gMTgpLCANCiAgICAgICAgICAgICAgYXhpcy50aXRsZS55ID0gZWxlbWVudF90ZXh0KHNpemUgPSAyMCksDQogICAgICAgICAgICAgIGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGNvbG9yID0gImJsYWNrIiwgc2l6ZSA9IDEzLCBhbmdsZSA9IDYwLCB2anVzdCA9IDAuNSwgaGp1c3Q9MC41KSwNCiAgICAgICAgICAgICAgYXhpcy50ZXh0LnkgPSBlbGVtZW50X3RleHQoY29sb3IgPSAiYmxhY2siLCBzaXplID0gMjApLA0KICAgICAgICAgICAgICBzdHJpcC50ZXh0LnggPSBlbGVtZW50X3RleHQoY29sb3IgPSAiYmxhY2siLCBzaXplID0gMjApLA0KICAgICAgICAgICAgICBsZWdlbmQudGl0bGUgPSBlbGVtZW50X3RleHQoY29sb3IgPSAiYmxhY2siLCBzaXplID0gMTgpLA0KICAgICAgICAgICAgICBsZWdlbmQudGV4dCA9IGVsZW1lbnRfdGV4dChjb2xvciA9ICJibGFjayIsIHNpemUgPSAxNikpKQ0KDQpnZ3NhdmUoIkUxYl9NTVlfTW9yYWxfUGVyc29uLnBuZyIpDQpgYGANCg0KIyBUYWJ1bGF0aW5nIFJhdyBGcmVxdWVuY2llcw0KYGBge3J9DQpFMWFiX3dpZGUgJT4lIA0KICBncm91cF9ieShCU3NfY29uZCwgYDJ4Ml9QYXR0ZXJuYCkgJT4lIA0KICBkcGx5cjo6c3VtbWFyaXplKGAyeDJfcGF0dGVybmAgPSBuKCkpDQpgYGANCg0K