Load data
# Read
file_names <- dir(path = wd, pattern = "\\.txt")
file_names <- file.path(wd, file_names)
names(file_names) <- file_names
Data <- plyr::ldply(.data = file_names, .fun = read.table, colClasses = "character", sep = ";", fill = TRUE, header = FALSE, .id = "FileName")
## Same with data.table for test
# list_of_files <- list.files(path = wd, recursive = FALSE,
# pattern = "\\.txt$",
# full.names = TRUE)
# Data_test <- data.table::rbindlist(sapply(list_of_files, data.table::fread, simplify = FALSE),
# use.names = TRUE, idcol = "FileName")
Clean data
# simple
ggplot(Data_zpg, aes(x = Cond, y = HelpingScore)) +
geom_boxplot() +
stat_summary(fun.data = mean_se, colour = "darkred") +
xlab("") +
theme(axis.text.x = element_text(angle = 90, hjust = 1)) +
ggpubr::stat_compare_means(method = "t.test",
label = "p.format", # formated p-values
# paired = TRUE,
comparisons = list(c("CTRL", "ES"),
c("ES", "JRAD"),
c("CTRL", "JRAD")))
# by trial type
ggplot(Data_zpg, aes(x = Cond, y = HelpingScore)) +
facet_wrap(~V4) +
geom_boxplot() +
stat_summary(fun.data = mean_se, colour = "darkred") +
xlab("") +
theme(axis.text.x = element_text(angle = 90, hjust = 1)) +
ggpubr::stat_compare_means(method = "t.test",
label = "p.format", # formated p-values
# paired = TRUE,
comparisons = list(c("CTRL", "ES"),
c("ES", "JRAD"),
c("CTRL", "JRAD")))
Session Info
R version 3.6.1 (2019-07-05)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 8.1 x64 (build 9600)
Matrix products: default
locale:
[1] LC_COLLATE=Romanian_Romania.1250 LC_CTYPE=Romanian_Romania.1250 LC_MONETARY=Romanian_Romania.1250 LC_NUMERIC=C
[5] LC_TIME=Romanian_Romania.1250
attached base packages:
[1] grid stats graphics grDevices utils datasets methods base
other attached packages:
[1] plyr_1.8.4 gridExtra_2.3 plotly_4.9.0 summarytools_0.8.8 DT_0.5 ggpubr_0.2.5 magrittr_1.5 broom_0.5.2
[9] papaja_0.1.0.9842 psych_1.8.12 forcats_0.4.0 stringr_1.4.0 dplyr_0.8.3 purrr_0.3.2 readr_1.3.1 tidyr_1.0.0
[17] tibble_2.1.3 ggplot2_3.2.1 tidyverse_1.2.1 pacman_0.5.1
loaded via a namespace (and not attached):
[1] Rcpp_1.0.2 lubridate_1.7.4 lattice_0.20-38 assertthat_0.2.1 zeallot_0.1.0 digest_0.6.21 R6_2.4.0 cellranger_1.1.0
[9] backports_1.1.4 httr_1.4.0 pillar_1.4.2 rlang_0.4.0 lazyeval_0.2.2 readxl_1.1.0 data.table_1.11.8 rstudioapi_0.8
[17] labeling_0.3 foreign_0.8-71 pander_0.6.3 htmlwidgets_1.3 RCurl_1.95-4.11 munsell_0.5.0 compiler_3.6.1 modelr_0.1.5
[25] xfun_0.9 pkgconfig_2.0.3 mnormt_1.5-5 htmltools_0.3.6 tidyselect_0.2.5 codetools_0.2-16 matrixStats_0.54.0 viridisLite_0.3.0
[33] crayon_1.3.4 withr_2.1.2 bitops_1.0-6 nlme_3.1-140 jsonlite_1.6 gtable_0.3.0 lifecycle_0.1.0 scales_1.0.0
[41] cli_1.1.0 stringi_1.4.3 ggsignif_0.4.0 pryr_0.1.4 xml2_1.2.0 ellipsis_0.3.0 rapportools_1.0 generics_0.0.2
[49] vctrs_0.2.0 tools_3.6.1 glue_1.3.1 hms_0.5.1 parallel_3.6.1 colorspace_1.4-1 rvest_0.3.2 knitr_1.25
[57] haven_2.1.1
A work by Claudiu Papasteri
claudiu.papasteri@gmail.com
LS0tDQp0aXRsZTogIjxicj4gTzFCIFJlcG9ydCAtIFpQRyIgDQpzdWJ0aXRsZTogIlpQRyBBbmFseXNlcyINCmF1dGhvcjogIjxicj4gQ2xhdWRpdSBQYXBhc3RlcmkiDQpkYXRlOiAiYHIgZm9ybWF0KFN5cy50aW1lKCksICclZCAlbSAlWScpYCINCm91dHB1dDogDQogICAgaHRtbF9ub3RlYm9vazoNCiAgICAgICAgICAgIGNvZGVfZm9sZGluZzogaGlkZQ0KICAgICAgICAgICAgdG9jOiB0cnVlDQogICAgICAgICAgICB0b2NfZGVwdGg6IDINCiAgICAgICAgICAgIG51bWJlcl9zZWN0aW9uczogdHJ1ZQ0KICAgICAgICAgICAgdGhlbWU6IHNwYWNlbGFiDQogICAgICAgICAgICBoaWdobGlnaHQ6IHRhbmdvDQogICAgICAgICAgICBmb250LWZhbWlseTogQXJpYWwNCiAgICAgICAgICAgIGZpZ193aWR0aDogMTANCiAgICAgICAgICAgIGZpZ19oZWlnaHQ6IDkNCiAgICBwZGZfZG9jdW1lbnQ6IA0KICAgICAgICAgICAgdG9jOiB0cnVlDQogICAgICAgICAgICB0b2NfZGVwdGg6IDINCiAgICAgICAgICAgIG51bWJlcl9zZWN0aW9uczogdHJ1ZQ0KICAgICAgICAgICAgIyBmb250c2l6ZTogMTFwdA0KICAgICAgICAgICAgIyBnZW9tZXRyeTogbWFyZ2luPTFpbg0KICAgICAgICAgICAgIyBmaWdfd2lkdGg6IDcNCiAgICAgICAgICAgICMgZmlnX2hlaWdodDogNg0KICAgICAgICAgICAgIyBmaWdfY2FwdGlvbjogdHJ1ZQ0KICAgICMgZ2l0aHViX2RvY3VtZW50OiANCiAgICAgICAgICAgICMgdG9jOiB0cnVlDQogICAgICAgICAgICAjIHRvY19kZXB0aDogMg0KICAgICAgICAgICAgIyBodG1sX3ByZXZpZXc6IGZhbHNlDQogICAgICAgICAgICAjIGZpZ193aWR0aDogNQ0KICAgICAgICAgICAgIyBmaWdfaGVpZ2h0OiA1DQogICAgICAgICAgICAjIGRldjoganBlZw0KLS0tDQoNCg0KPCEtLSBTZXR1cCAtLT4NCg0KDQpgYGB7ciBzZXR1cCwgaW5jbHVkZSA9IEZBTFNFfQ0KIyBraW50ciBvcHRpb25zDQprbml0cjo6b3B0c19jaHVuayRzZXQoDQogIGNvbW1lbnQgPSAiIyIsDQogIGNvbGxhcHNlID0gVFJVRSwNCiAgZWNobyA9IFRSVUUsIHdhcm5pbmcgPSBUUlVFLCBtZXNzYWdlID0gVFJVRSwgY2FjaGUgPSBUUlVFICAgICAgICMgZWNobyA9IEZhbHNlIGZvciBnaXRodWJfZG9jdW1lbnQsIGJ1dCB3aWxsIGJlIGZvbGRlZCBpbiBodG1sX25vdGVib29rDQopDQoNCiMgR2VuZXJhbCBSIG9wdGlvbnMgYW5kIGluZm8NCnNldC5zZWVkKDExMSkgICAgICAgICAgICAgICAjIGluIGNhc2Ugd2UgdXNlIHJhbmRvbWl6ZWQgcHJvY2VkdXJlcyAgICAgICANCm9wdGlvbnMoc2NpcGVuID0gOTk5KSAgICAgICAjIHBvc2l0aXZlIHZhbHVlcyBiaWFzIHRvd2FyZHMgZml4ZWQgYW5kIG5lZ2F0aXZlIHRvd2FyZHMgc2NpZW50aWZpYyBub3RhdGlvbg0KDQojIExvYWQgcGFja2FnZXMNCmlmICghcmVxdWlyZSgicGFjbWFuIikpIGluc3RhbGwucGFja2FnZXMoInBhY21hbiIpDQpwYWNrYWdlcyA8LSBjKA0KICAidGlkeXZlcnNlIiwgICAgICAjIGJlc3QgdGhpbmcgdGhhdCBoYXBwZW5kIHRvIG1lDQogICJwc3ljaCIsICAgICAgICAgICMgZ2VuZXJhbCBwdXJwb3NlIHRvb2xib3ggZm9yIHBlcnNvbmFsaXR5LCBwc3ljaG9tZXRyaWMgdGhlb3J5IGFuZCBleHBlcmltZW50YWwgcHN5Y2hvbG9neQ0KICAicGFwYWphIiwgICAgICAgICAjIGZvciBBUEEgc3R5bGUNCiAgImJyb29tIiwgICAgICAgICAgIyBmb3IgdGlkeSBtb2RlbGxpbmcNCiAgImdncGxvdDIiLCAgICAgICAgIyBiZXN0IHBsb3RzDQogICJnZ3B1YnIiLCAgICAgICAgICMgZ2dwbG90MiB0byBwdWJsaWNhdGlvbiBxdWFsaXR5DQogICJEVCIsICAgICAgICAgICAgICMgbmljZSBzZWFyY2hhYmxlIGFuZCBkb3dubG9hZGFibGUgdGFibGVzDQogICJzdW1tYXJ5dG9vbHMiLA0KICAicGxvdGx5IiwNCiAgImdyaWRFeHRyYSIsDQogICJncmlkIiwNCiAgInBseXIiDQogICMgLCAuLi4NCikNCmlmICghcmVxdWlyZSgicGFjbWFuIikpIGluc3RhbGwucGFja2FnZXMoInBhY21hbiIpDQpwYWNtYW46OnBfbG9hZChjaGFyID0gcGFja2FnZXMpDQoNCiMgVGhlbWVzIGZvciBnZ3Bsb3QyIHBsb3RpbmcgKGhlcmUgdXNlZCBBUEEgc3R5bGUpDQp0aGVtZV9zZXQodGhlbWVfYXBhKCkpDQpgYGANCg0KYGBge3Igd29ya2luZ19kaXJlY3RvcnksIGluY2x1ZGUgPSBGQUxTRX0NCiMgaWYgbmVlZGVkDQp3ZCA8LSAiRTovQ2luZXRpYyBpZGVpIG5vaS9EYXRlIFpQRyBzaSBFQS9aUEcgZGF0ZSBjb3JlY3RhdGUgQWxleGFuZHJhIg0KIyBzZXR3ZCh3ZCkNCiMga25pdHI6Om9wdHNfa25pdCRzZXQocm9vdC5kaXIgPSB3ZCkgICAjIG5ldyB3YXkgb2Ygc2V0d2QgZm9yIG1hcmRvd24NCmBgYA0KDQoNCjwhLS0gUmVwb3J0IC0tPg0KDQoNCiMgTG9hZCBkYXRhDQoNCmBgYHtyIHJhd19kYXRhLCByZXN1bHRzID0gJ2hpZGUnLCBjYWNoZS5leHRyYSA9IGZpbGUuaW5mbygiZGlhbW9uZHMuY3N2Iil9DQojIFJlYWQNCmZpbGVfbmFtZXMgPC0gZGlyKHBhdGggPSB3ZCwgcGF0dGVybiA9ICJcXC50eHQiKQ0KZmlsZV9uYW1lcyA8LSBmaWxlLnBhdGgod2QsIGZpbGVfbmFtZXMpDQpuYW1lcyhmaWxlX25hbWVzKSA8LSBmaWxlX25hbWVzDQpEYXRhIDwtIHBseXI6OmxkcGx5KC5kYXRhID0gZmlsZV9uYW1lcywgLmZ1biA9IHJlYWQudGFibGUsIGNvbENsYXNzZXMgPSAiY2hhcmFjdGVyIiwgc2VwID0gIjsiLCBmaWxsID0gVFJVRSwgaGVhZGVyID0gRkFMU0UsIC5pZCA9ICJGaWxlTmFtZSIpDQoNCiMjIFNhbWUgd2l0aCBkYXRhLnRhYmxlIGZvciB0ZXN0DQojIGxpc3Rfb2ZfZmlsZXMgPC0gbGlzdC5maWxlcyhwYXRoID0gd2QsIHJlY3Vyc2l2ZSA9IEZBTFNFLA0KIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0dGVybiA9ICJcXC50eHQkIiwNCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bGwubmFtZXMgPSBUUlVFKQ0KIyBEYXRhX3Rlc3QgPC0gZGF0YS50YWJsZTo6cmJpbmRsaXN0KHNhcHBseShsaXN0X29mX2ZpbGVzLCBkYXRhLnRhYmxlOjpmcmVhZCwgc2ltcGxpZnkgPSBGQUxTRSksICANCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZS5uYW1lcyA9IFRSVUUsIGlkY29sID0gIkZpbGVOYW1lIikNCmBgYA0KDQoNCiMjIENsZWFuIGRhdGENCg0KYGBge3IgY2xlYW5fZGF0YSwgZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRX0NCiMgMS4gU3ViamVjdElEDQojIDIuIFRyaWFsbnVtYmVyICAgICAgICAgICAgICAgICAgICAgID0gVjINCiMgMy4gVHJpYWx0eXBlICAgICAgICAgICAgICAgICAgICAgICAgPSBWMw0KIyA0LiBHYXRlc2VxdWVuY2UgICAgICAgICAgICAgICAgICAgICA9IFY0DQojIDUuIERpc3RyZXNzICgxID0geWVzLCAwID0gbm8pICAgICAgID0gVjUNCiMgNi4gSGVscGluZyAoMSA9IHllcywgMCA9IG5vKSAgICAgICAgPSBWNg0KIyA3LiBUaW1ldG9oZWxwICAgICAgICAgICAgICAgICAgICAgICA9IFY3DQojIDguIERpZXdpdGhLZXkgKDg4OCkg74OgIHNlbGRvbWx5IHBhY21hbiBpcyBraWxsZWQgaW4gZnJvbnQgb2YgYSBnYXRlIGFsdGhvdWdoIHN1YmplY3Qgc3RpbGwgaGFzIHRoZSBrZXkgKGlmIG9wcG9uZW504oCZcyBwYWNtYW4gYWxyZWFkeSByZWFjaGVkIHRoZSBuZXh0IHRyaWdnZXIgcG9pbnQpIO+DoCB0aGlzIHZhcmlhYmxlIG5vdGVzIHRoZXNlIGluc3RhbmNlcyBzbyB0aGF0IHRoaXMgdHJpYWwgc2hvdWxkIGJlIHRha2VuIG91dCBvZiB0aGUgYW5hbHlzaXMNCiMgOS4gVHJlYXN1cmVSZWFjaGVkICgxID0geWVzLCAwID0gbm8pDQojIDEwLiBUaW1ldG9SZWFjaFRyZWFzdXJlDQojIDExLiBTdGFyYXBwZWFyZWQgKDEgPSB5ZXMsIDAgPSBubykNCiMgMTIuIFN0YXJ0YWtlbiAoLTEgPSBvdGhlciBwbGF5ZXIsIDAgPSBubyBvbmUsIDEgPSBzZWxmKQ0KIyAxMy4gVGltZXRvdGFrZVN0YXINCiMgMTQuIENvbXBldGl0aW9uU3RhciAoMSA9IHllcywgMCA9IG5vKSDvg6Agc3RhciBpcyBjb21wZXRpdGlvbiBzdGFyIGlmIG9wcG9ydHVuaXR5IHRvIGhlbHAgYW5kIG9wcG9ydHVuaXR5IHRvIHRha2Ugc3RhciBvY2N1ciBhdCB0aGUgc2FtZSB0aW1lIO+DoCBzbyBmYXIgdGhpcyBvY2N1cnMgaW4gNTAlIG9mIHRoZSByZWNpcHJvY2l0eSB1bmZhaXIgdHJpYWxzDQojIDE1LiBUcmlhbHRpbWUg74OgIGNhbGN1bGF0ZWQgYXMgYXZlcmFnZSBvZiBwcmFjdGljZSB0cmlhbHMgcGx1cyA1IHNlY29uZHMNCg0KRGF0YSA8LQ0KICBEYXRhICU+JQ0KICBkcGx5cjo6c2VsZWN0KC1WMSkgJT4lDQogIGRwbHlyOjptdXRhdGUoTmFtZSA9IHN0cmluZ3I6OnN0cl9yZW1vdmVfYWxsKEZpbGVOYW1lLCBwYXN0ZTAod2QsIi8iKSkpICU+JQ0KICBkcGx5cjo6bXV0YXRlKE5hbWUgPSBzdHJpbmdyOjpzdHJfcmVtb3ZlX2FsbChOYW1lLCAiLnR4dCIpKSAlPiUNCiAgZHBseXI6Om11dGF0ZShOYW1lID0gc3RyaW5ncjo6c3RyX3JlbW92ZV9hbGwoTmFtZSwgInppMSIpKSAlPiUNCiAgZHBseXI6Om11dGF0ZShOYW1lID0gc3RyaW5ncjo6c3RyX3JlbW92ZV9hbGwoTmFtZSwgInppMiIpKSAlPiUNCiAgZHBseXI6Om11dGF0ZShOYW1lID0gc3RyaW5ncjo6c3RyX3JlbW92ZV9hbGwoTmFtZSwgInppMyIpKSAlPiUNCiAgZHBseXI6Om11dGF0ZShOYW1lID0gc3RyaW5ncjo6c3RyX3JlbW92ZV9hbGwoTmFtZSwgInByZSIpKSAlPiUNCiAgdGlkeXI6OnNlcGFyYXRlKE5hbWUsIGludG8gPSBjKCJJRCIsICJDb25kIiksICIoPzw9WzAtOV0pKD89W2EtekEtWl0pIikgJT4lDQogIGRwbHlyOjptdXRhdGUoQ29uZCA9IGlmZWxzZShpcy5uYShDb25kKSwgIkNUUkwiLCBDb25kKSkgJT4lDQogIGRwbHlyOjptdXRhdGUoQ29uZCA9IGlmZWxzZShDb25kID09ICJKUkFkIiwgIkpSQUQiLCBDb25kKSkgJT4lDQogIGRwbHlyOjptdXRhdGUoQ29uZCA9IGFzLmZhY3RvcihDb25kKSkgJT4lDQogIGRwbHlyOjptdXRhdGVfYXQodmFycygtRmlsZU5hbWUsIC1JRCwgLUNvbmQsIC1WNCksIGFzLm51bWVyaWMpICU+JQ0KICBkcGx5cjo6c2VsZWN0KEZpbGVOYW1lLCBJRCwgQ29uZCwgZHBseXI6OmV2ZXJ5dGhpbmcoKSkgJT4lDQogIGRwbHlyOjpyZW5hbWUoSGVscGluZyA9IFY1LCBEaXN0cmVzcyA9IFY2LCBUaW1ldG9oZWxwID0gVjcsIERpZXdpdGhLZXkgPSBWOCkgDQogIA0KDQpEYXRhICU+JQ0KICBkcGx5cjo6Y291bnQoRmlsZU5hbWUpICU+JSAgICAgICAgICAgIyA3emkzSlJBRC50eHQgaGFzIDMzLCAxMHppMkpSQUQudHh0IGhhcyAyMg0KICBwcmludChuID0gSW5mKQ0KDQojIHN0cnVjdHVyZSBwZiBaUEcgdHJpYWxzDQojICAgICB0cmFpbCAgICAgICAgICAgICBuDQojIDEgIiAxWDNPMVgxTzNPMU8iICAgICAyDQojIDIgIiAxWDNPMVgxTzNPNE8iICAgICAyDQojIDMgIiAxWDNYMU8zTzNPNE8iICAgICAxDQojIDQgIiAxWDRPMVgzTzRPM08iICAgICAxDQojIDUgIiAyTzFYNFgzTzFPM08iICAgICAxDQojIDYgIiAzTzFPMlg0WDNPMU8iICAgICAxDQojIDcgIiAzTzJYMk80TzFYM08iICAgICAxDQojIDggIiAzWDFPNFgxTzNPMk8iICAgICAxDQojIDkgIiA0TzJPMVgzTzFYM08iICAgICAxDQoNCkRhdGEgPC0NCiAgRGF0YSAlPiUNCiAgIGdyb3VwX2J5KEZpbGVOYW1lKSAlPiUgDQogICBzbGljZSh0YWlsKHJvd19udW1iZXIoKSwgMTEpKSAgJT4lICAgICAjIGtlZXAgb25seSBsYXN0IDExIHJvd3MgZm9yIGVhY2ggc3ViamVjdA0KICAgdW5ncm91cCgpDQogIA0KRGF0YSAlPiUNCiAgZHBseXI6OmNvdW50KEZpbGVOYW1lKSAlPiUgICAgICAgICAgIA0KICBwcmludChuID0gSW5mKQ0KDQojIENyZWF0ZSBkaWNob3Rtb3VzIEhlbHBpbmdTY29yZSAoSGVscGluZyB2YXIgaW4gZGF0YSBpcyByZWxhdGVkIHRvIHRyaWFsIG5vdCBiZWhhdmlvcikNCkRhdGFfenBnIDwtIA0KICBEYXRhICU+JQ0KICBkcGx5cjo6ZmlsdGVyKERpZXdpdGhLZXkgIT0gODg4KSAlPiUgDQogIGRwbHlyOjptdXRhdGUoSGVscGluZ1Njb3JlID0gaWZlbHNlKFRpbWV0b2hlbHAgPj0gMCwgMSwgMCkpDQoNCg0KIyB0YWJsZShEYXRhJEhlbHBpbmcsIERhdGEkVjQpDQoNCiMgcHN5Y2g6OmRlc2NyaWJlQnkoRGF0YSRIZWxwaW5nLCBncm91cCA9IERhdGEkQ29uZCkgICMgZXhhY3RseSB0aGUgc2FtZSBieSBDb25kDQojIGFnZ3JlZ2F0ZShIZWxwaW5nIH4gSUQsIGRhdGEgPSBEYXRhLCBGVU4gPSBtZWFuKSAgICAgIyBleGFjdGx5IHRoZSBzYW1lIGJ5IElEDQojIA0KIyBwc3ljaDo6ZGVzY3JpYmVCeShEYXRhJFRpbWV0b2hlbHAsIGdyb3VwID0gRGF0YSRDb25kKSAgIyBOb3QgZXhhY3RseSB0aGUgc2FtZSBieSBDb25kDQojIGFnZ3JlZ2F0ZShUaW1ldG9oZWxwIH4gSUQsIGRhdGEgPSBEYXRhLCBGVU4gPSBtZWFuKSAgICAgIyBOb3QgZXhhY3RseSB0aGUgc2FtZSBieSBJRA0KYGBgDQoNCmBgYHtyIHRfdGVzdH0NCg0KZ2dwdWJyOjpjb21wYXJlX21lYW5zKEhlbHBpbmdTY29yZSB+IENvbmQsIGRhdGEgPSBEYXRhX3pwZywgbWV0aG9kID0gInQudGVzdCIsIHBhaXJlZCA9IEZBTFNFKQ0KDQojIHNpbXBsZQ0KZ2dwbG90KERhdGFfenBnLCBhZXMoeCA9IENvbmQsIHkgPSBIZWxwaW5nU2NvcmUpKSArDQogIGdlb21fYm94cGxvdCgpICsNCiAgc3RhdF9zdW1tYXJ5KGZ1bi5kYXRhID0gbWVhbl9zZSwgIGNvbG91ciA9ICJkYXJrcmVkIikgKw0KICB4bGFiKCIiKSArDQogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTAsIGhqdXN0ID0gMSkpICsNCiAgZ2dwdWJyOjpzdGF0X2NvbXBhcmVfbWVhbnMobWV0aG9kID0gInQudGVzdCIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsID0gInAuZm9ybWF0IiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgZm9ybWF0ZWQgcC12YWx1ZXMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBwYWlyZWQgPSBUUlVFLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGFyaXNvbnMgPSBsaXN0KGMoIkNUUkwiLCAiRVMiKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMoIkVTIiwgIkpSQUQiKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMoIkNUUkwiLCAiSlJBRCIpKSkgDQoNCg0KYGBgDQoNCg0KYGBge3IgdF90ZXN0MiwgZmlnLmhlaWdodD0xMSwgZmlnLndpZHRoPTl9DQojIGJ5IHRyaWFsIHR5cGUNCmdncGxvdChEYXRhX3pwZywgYWVzKHggPSBDb25kLCB5ID0gSGVscGluZ1Njb3JlKSkgKw0KICBmYWNldF93cmFwKH5WNCkgKw0KICBnZW9tX2JveHBsb3QoKSArDQogIHN0YXRfc3VtbWFyeShmdW4uZGF0YSA9IG1lYW5fc2UsICBjb2xvdXIgPSAiZGFya3JlZCIpICsNCiAgeGxhYigiIikgKw0KICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwLCBoanVzdCA9IDEpKSArDQogIGdncHVicjo6c3RhdF9jb21wYXJlX21lYW5zKG1ldGhvZCA9ICJ0LnRlc3QiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbCA9ICJwLmZvcm1hdCIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGZvcm1hdGVkIHAtdmFsdWVzDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgcGFpcmVkID0gVFJVRSwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBhcmlzb25zID0gbGlzdChjKCJDVFJMIiwgIkVTIiksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjKCJFUyIsICJKUkFEIiksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjKCJDVFJMIiwgIkpSQUQiKSkpDQpgYGANCg0KDQoNCg0KPGJyPg0KPGJyPg0KDQo8IS0tIFNlc3Npb24gSW5mbyBhbmQgTGljZW5zZSAtLT4NCg0KPGJyPg0KDQojIFNlc3Npb24gSW5mbw0KYGBge3Igc2Vzc2lvbl9pbmZvLCBlY2hvID0gRkFMU0UsIHJlc3VsdHMgPSAnbWFya3VwJ30NCnNlc3Npb25JbmZvKCkgICAgDQpgYGANCg0KPCEtLSBGb290ZXIgLS0+DQombmJzcDsNCjxociAvPg0KPHAgc3R5bGU9InRleHQtYWxpZ246IGNlbnRlcjsiPkEgd29yayBieSA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vQ2xhdWRpdVBhcGFzdGVyaS8iPkNsYXVkaXUgUGFwYXN0ZXJpPC9hPjwvcD4NCjxwIHN0eWxlPSJ0ZXh0LWFsaWduOiBjZW50ZXI7Ij48c3BhbiBzdHlsZT0iY29sb3I6ICM4MDgwODA7Ij48ZW0+Y2xhdWRpdS5wYXBhc3RlcmlAZ21haWwuY29tPC9lbT48L3NwYW4+PC9wPg0KJm5ic3A7DQo=