library(gridExtra)
library(ggplot2)
a3$type<-"glmnet200"
a4$type<-"glmnet250"
a5$type<-"glmnet350"
a6$type<-"glmnet500"
x1$type<-"svr200"
x2$type<-"svr250"
x3$type<-"svr300"
x4$type<-"svr500"

z4$type<-"pls500"
z3$type<-"pls350"
z2$type<-"pls250"
z1$type<-"pls200"

heatmap <-rbind(a3,a4,a5,a6,
                
                x1,x2,x3,x4,
                z1,z2,z3,z4)

 

Heatmap per cell (Pearson)

#library(ggplotify)
#par(mfrow=c(2,1))
pattern="DS"

heatmap %>% group_by(type,cells) %>%  summarise(pearson=mean(pearson)) %>% reshape2::acast(type ~cells) %>% as.matrix() %>% d3heatmap::d3heatmap(colors = "Blues")

Heatmap per cell rnaseq (Pearson)


heatmap %>% filter(datasets %in% c("DS446395","DS500","CIAS4","CIVA3")) %>% group_by(type,cells) %>%  summarise(pearson=mean(pearson)) %>% reshape2::acast(type ~cells) %>% as.matrix() %>% d3heatmap::d3heatmap(colors = "Blues")

Heatmap per cell (Spearman)

heatmap %>% group_by(type,cells) %>% summarise(spearman=mean(spearman)) %>% reshape2::acast(type ~cells) %>% as.matrix() %>% d3heatmap::d3heatmap(colors = "Reds")

Heatmap per cell rnaseq (Spearman)

heatmap  %>% filter(datasets %in% c("DS446395","DS500","CIAS4","CIVA3")) %>% group_by(type,cells) %>% summarise(spearman=mean(spearman)) %>% reshape2::acast(type ~cells) %>% as.matrix() %>% d3heatmap::d3heatmap(colors = "Reds")

Heatmap per dataset (Pearson)

#library(ggplotify)
#par(mfrow=c(2,1))
pattern="DS"

heatmap %>% group_by(type,datasets) %>%  summarise(pearson=mean(pearson)) %>% reshape2::acast(type ~datasets) %>% as.matrix() %>% d3heatmap::d3heatmap(colors = "Blues")

Heatmap per dataset rnaseq (Pearson)


heatmap %>% filter(datasets %in% c("DS446395","DS500","CIAS4","CIVA3")) %>% group_by(type,datasets) %>%  summarise(pearson=mean(pearson)) %>% reshape2::acast(type ~datasets) %>% as.matrix() %>% d3heatmap::d3heatmap(colors = "Blues")

Heatmap per dataset (Spearman)

heatmap %>% group_by(type,datasets) %>% summarise(spearman=mean(spearman)) %>% reshape2::acast(type ~datasets) %>% as.matrix() %>% d3heatmap::d3heatmap(colors = "Reds")

Heatmap per dataset rnaseq (Spearman)

heatmap  %>% filter(datasets %in% c("DS446395","DS500","CIAS4","CIVA3")) %>% group_by(type,datasets) %>% summarise(spearman=mean(spearman)) %>% reshape2::acast(type ~datasets) %>% as.matrix() %>% d3heatmap::d3heatmap(colors = "Reds")

a3 [glmnet200] Results for glmnet 200 features over 20000 (RF2)

filename<-"./devcon_challenge.glmnet_results_noscale_rf_selected_features_200_20000_newmix_spearson.csv"
#readr::write_csv(RESULTS,path = filename)
a3<-readr::read_csv(filename) %>% filter(!is.na(pearson)) 
a3
readr::read_csv(filename) %>% filter(!is.na(pearson)) %>%  summarise(pearson_mean=mean(pearson),spearman_mean=mean(spearman))
readr::read_csv(filename) %>% filter(!is.na(pearson))  %>% filter( datasets %in% c("DS446395","DS500","CIAS4","CIVA3")) %>%  summarise(pearson_mean=mean(pearson),spearman_mean=mean(spearman))

a4 [glmnet250] Results for glmnet 250 features over 20000 (RF2)

filename<-"./devcon_challenge.glmnet_results_noscale_rf_selected_features_250_20000_newmix_spearson.csv"
#readr::write_csv(RESULTS,path = filename)
a4<-readr::read_csv(filename) %>% filter(!is.na(pearson)) 
a4
readr::read_csv(filename) %>% filter(!is.na(pearson)) %>%  summarise(pearson_mean=mean(pearson),spearman_mean=mean(spearman))
readr::read_csv(filename) %>% filter(!is.na(pearson))  %>% filter( datasets %in% c("DS446395","DS500","CIAS4","CIVA3")) %>%  summarise(pearson_mean=mean(pearson),spearman_mean=mean(spearman))

a5 [glmnet350] Results for glmnet 350 features over 20000 (RF2)

filename<-"./devcon_challenge.glmnet_results_noscale_rf_selected_features_350_20000_newmix_spearson.csv"
#readr::write_csv(RESULTS,path = filename)
a5<-readr::read_csv(filename) %>% filter(!is.na(pearson)) 
a5
readr::read_csv(filename) %>% filter(!is.na(pearson)) %>%  summarise(pearson_mean=mean(pearson),spearman_mean=mean(spearman))
readr::read_csv(filename) %>% filter(!is.na(pearson))  %>% filter( datasets %in% c("DS446395","DS500","CIAS4","CIVA3")) %>%  summarise(pearson_mean=mean(pearson),spearman_mean=mean(spearman))

a6 [glmnet500] Results for glmnet 500 features over 20000 (RF2)

filename<-"./devcon_challenge.glmnet_results_noscale_rf_selected_features_500_20000_newmix_spearson.csv"
#readr::write_csv(RESULTS,path = filename)
a6<-readr::read_csv(filename) %>% filter(!is.na(pearson)) 
a6
readr::read_csv(filename) %>% filter(!is.na(pearson)) %>%  summarise(pearson_mean=mean(pearson),spearman_mean=mean(spearman))
readr::read_csv(filename) %>% filter(!is.na(pearson))  %>% filter( datasets %in% c("DS446395","DS500","CIAS4","CIVA3")) %>%  summarise(pearson_mean=mean(pearson),spearman_mean=mean(spearman))
NA

x1 [svr200] Results for svr radial noscale 200 features over 20000 (RF2)

filename<-"./devcon_challenge.svr_results_rf_selected_features_200_20000_noscale_newmix_spearson.csv"
#readr::write_csv(RESULTS,path = filename)
x1<-readr::read_csv(filename) %>% filter(!is.na(pearson)) 
x1
readr::read_csv(filename) %>% filter(!is.na(pearson)) %>%  summarise(pearson_mean=mean(pearson),spearman_mean=mean(spearman))
readr::read_csv(filename) %>% filter(!is.na(pearson))  %>% filter( datasets %in% c("DS446395","DS500","CIAS4","CIVA3")) %>%  summarise(pearson_mean=mean(pearson),spearman_mean=mean(spearman))

x2 [svr250] Results for svr radial noscale 250 features over 20000 (RF2)

filename<-"./devcon_challenge.svr_results_rf_selected_features_250_20000_noscale_newmix_spearson.csv"
#readr::write_csv(RESULTS,path = filename)
x2<-readr::read_csv(filename) %>% filter(!is.na(pearson)) 
x2
readr::read_csv(filename) %>% filter(!is.na(pearson)) %>%  summarise(pearson_mean=mean(pearson),spearman_mean=mean(spearman))
readr::read_csv(filename) %>% filter(!is.na(pearson))  %>% filter( datasets %in% c("DS446395","DS500","CIAS4","CIVA3")) %>%  summarise(pearson_mean=mean(pearson),spearman_mean=mean(spearman))

x3 [svr350] Results for svr radial noscale 350 features over 20000 (RF2)

filename<-"./devcon_challenge.svr_results_rf_selected_features_350_20000_noscale_newmix_spearson.csv"
#readr::write_csv(RESULTS,path = filename)
x3<-readr::read_csv(filename) %>% filter(!is.na(pearson)) 
x3
readr::read_csv(filename) %>% filter(!is.na(pearson)) %>%  summarise(pearson_mean=mean(pearson),spearman_mean=mean(spearman))
readr::read_csv(filename) %>% filter(!is.na(pearson))  %>% filter( datasets %in% c("DS446395","DS500","CIAS4","CIVA3")) %>%  summarise(pearson_mean=mean(pearson),spearman_mean=mean(spearman))

x4 [svr500] Results for svr radial noscale 500 features over 20000 (RF2)

filename<-"./devcon_challenge.svr_results_rf_selected_features_500_20000_noscale_newmix_spearson.csv"
#readr::write_csv(RESULTS,path = filename)
x4<-readr::read_csv(filename) %>% filter(!is.na(pearson)) 
x4
readr::read_csv(filename) %>% filter(!is.na(pearson)) %>%  summarise(pearson_mean=mean(pearson),spearman_mean=mean(spearman))
readr::read_csv(filename) %>% filter(!is.na(pearson))  %>% filter( datasets %in% c("DS446395","DS500","CIAS4","CIVA3")) %>%  summarise(pearson_mean=mean(pearson),spearman_mean=mean(spearman))

z4 [pls500] Results for pls 500 features (RF)

filename<-"./devcon_challenge.pls_results_rf_selected_features_500_20000_noscale_newmix_spearson.csv"
#readr::write_csv(RESULTS,path = filename)
z4<-readr::read_csv(filename) %>% filter(!is.na(pearson)) 
z4
readr::read_csv(filename) %>% filter(!is.na(pearson)) %>%  summarise(pearson_mean=mean(pearson),spearman_mean=mean(spearman))
readr::read_csv(filename) %>% filter(!is.na(pearson))  %>% filter( datasets %in% c("DS446395","DS500","CIAS4","CIVA3")) %>%  summarise(pearson_mean=mean(pearson),spearman_mean=mean(spearman))

z3 [pls350] Results for pls 350 features (RF)

filename<-"./devcon_challenge.pls_results_rf_selected_features_350_20000_noscale_newmix_spearson.csv"
#readr::write_csv(RESULTS,path = filename)
z3<-readr::read_csv(filename) %>% filter(!is.na(pearson)) 
z3
readr::read_csv(filename) %>% filter(!is.na(pearson)) %>%  summarise(pearson_mean=mean(pearson),spearman_mean=mean(spearman))
readr::read_csv(filename) %>% filter(!is.na(pearson))  %>% filter( datasets %in% c("DS446395","DS500","CIAS4","CIVA3")) %>%  summarise(pearson_mean=mean(pearson),spearman_mean=mean(spearman))

z2 [pls250] Results for pls 250 features (RF)

filename<-"./devcon_challenge.pls_results_rf_selected_features_250_20000_noscale_newmix_spearson.csv"
#readr::write_csv(RESULTS,path = filename)
z2<-readr::read_csv(filename) %>% filter(!is.na(pearson)) 
z2
readr::read_csv(filename) %>% filter(!is.na(pearson)) %>%  summarise(pearson_mean=mean(pearson),spearman_mean=mean(spearman))
readr::read_csv(filename) %>% filter(!is.na(pearson))  %>% filter( datasets %in% c("DS446395","DS500","CIAS4","CIVA3")) %>%  summarise(pearson_mean=mean(pearson),spearman_mean=mean(spearman))

z1 [pls200] Results for pls 200 features (RF)

filename<-"./devcon_challenge.pls_results_rf_selected_features_200_20000_noscale_newmix_spearson.csv"
#readr::write_csv(RESULTS,path = filename)
z1<-readr::read_csv(filename) %>% filter(!is.na(pearson)) 
z1
readr::read_csv(filename) %>% filter(!is.na(pearson)) %>%  summarise(pearson_mean=mean(pearson),spearman_mean=mean(spearman))
readr::read_csv(filename) %>% filter(!is.na(pearson))  %>% filter( datasets %in% c("DS446395","DS500","CIAS4","CIVA3")) %>%  summarise(pearson_mean=mean(pearson),spearman_mean=mean(spearman))
load("results_glmnet_devcon_bestmodels_fgdata_cps_20000_2_selected_features_250_test_added.rdata")
glmnet250<-results_final_models

load("results_svr_radial_devcon_bestmodels_fgdata_cps_20000_2_noscale_selected_features_200_newgama_test_added.rdata")
svr200<-results_final_models

glmnet250[['cancer']]$nzero
 s0  s1  s2  s3  s4  s5  s6  s7  s8  s9 s10 s11 s12 s13 s14 s15 s16 s17 s18 s19 s20 s21 s22 s23 s24 s25 s26 
  0   1   1   2   4   7  12  17  19  19  21  24  25  30  32  38  39  40  41  43  43  44  47  48  48  48  51 
s27 s28 s29 s30 s31 s32 s33 s34 s35 s36 s37 s38 s39 s40 s41 s42 s43 s44 s45 s46 s47 s48 s49 s50 s51 s52 s53 
 51  51  53  53  53  54  55  57  57  58  57  57  54  55  56  56  56  58  58  55  58  60  65  68  71  72  78 
s54 s55 s56 s57 s58 s59 s60 s61 s62 s63 s64 s65 s66 s67 s68 s69 s70 s71 s72 s73 s74 s75 s76 s77 s78 
 81  85  89  98 103 110 116 124 127 138 140 145 154 167 173 183 187 191 192 200 206 212 213 221 219 
svr200[['cancer']]$
Error: Incomplete expression: svr200[['cancer']]$
LS0tCnRpdGxlOiAiREVDT05WIERSRUFNIENoYWxsZW5lZ2UgMjAyMCAoNSkiCm91dHB1dDogCiAgaHRtbF9ub3RlYm9vazogCiAgICBjb2RlX2ZvbGRpbmc6IGhpZGUKICAgIHRvYzogeWVzCi0tLQoKCgpgYGB7ciBmaWcuaGVpZ2h0PTgsIGZpZy53aWR0aD04fQpsaWJyYXJ5KGdyaWRFeHRyYSkKbGlicmFyeShnZ3Bsb3QyKQphMyR0eXBlPC0iZ2xtbmV0MjAwIgphNCR0eXBlPC0iZ2xtbmV0MjUwIgphNSR0eXBlPC0iZ2xtbmV0MzUwIgphNiR0eXBlPC0iZ2xtbmV0NTAwIgp4MSR0eXBlPC0ic3ZyMjAwIgp4MiR0eXBlPC0ic3ZyMjUwIgp4MyR0eXBlPC0ic3ZyMzAwIgp4NCR0eXBlPC0ic3ZyNTAwIgoKejQkdHlwZTwtInBsczUwMCIKejMkdHlwZTwtInBsczM1MCIKejIkdHlwZTwtInBsczI1MCIKejEkdHlwZTwtInBsczIwMCIKCmhlYXRtYXAgPC1yYmluZChhMyxhNCxhNSxhNiwKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgeDEseDIseDMseDQsCiAgICAgICAgICAgICAgICB6MSx6Mix6Myx6NCkKCiAKYGBgCgoKIyMgSGVhdG1hcCBwZXIgY2VsbCAoUGVhcnNvbikKYGBge3IgZmlnLndpZHRoPTcsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CiNsaWJyYXJ5KGdncGxvdGlmeSkKI3BhcihtZnJvdz1jKDIsMSkpCnBhdHRlcm49IkRTIgoKaGVhdG1hcCAlPiUgZ3JvdXBfYnkodHlwZSxjZWxscykgJT4lICBzdW1tYXJpc2UocGVhcnNvbj1tZWFuKHBlYXJzb24pKSAlPiUgcmVzaGFwZTI6OmFjYXN0KHR5cGUgfmNlbGxzKSAlPiUgYXMubWF0cml4KCkgJT4lIGQzaGVhdG1hcDo6ZDNoZWF0bWFwKGNvbG9ycyA9ICJCbHVlcyIpCmBgYAojIyBIZWF0bWFwIHBlciBjZWxsIHJuYXNlcSAoUGVhcnNvbikKYGBge3IgZmlnLndpZHRoPTcsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CgpoZWF0bWFwICU+JSBmaWx0ZXIoZGF0YXNldHMgJWluJSBjKCJEUzQ0NjM5NSIsIkRTNTAwIiwiQ0lBUzQiLCJDSVZBMyIpKSAlPiUgZ3JvdXBfYnkodHlwZSxjZWxscykgJT4lICBzdW1tYXJpc2UocGVhcnNvbj1tZWFuKHBlYXJzb24pKSAlPiUgcmVzaGFwZTI6OmFjYXN0KHR5cGUgfmNlbGxzKSAlPiUgYXMubWF0cml4KCkgJT4lIGQzaGVhdG1hcDo6ZDNoZWF0bWFwKGNvbG9ycyA9ICJCbHVlcyIpCmBgYAoKIyMgSGVhdG1hcCBwZXIgY2VsbCAoU3BlYXJtYW4pCmBgYHtyIGZpZy53aWR0aD03LCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQpoZWF0bWFwICU+JSBncm91cF9ieSh0eXBlLGNlbGxzKSAlPiUgc3VtbWFyaXNlKHNwZWFybWFuPW1lYW4oc3BlYXJtYW4pKSAlPiUgcmVzaGFwZTI6OmFjYXN0KHR5cGUgfmNlbGxzKSAlPiUgYXMubWF0cml4KCkgJT4lIGQzaGVhdG1hcDo6ZDNoZWF0bWFwKGNvbG9ycyA9ICJSZWRzIikKYGBgCgojIyBIZWF0bWFwIHBlciBjZWxsIHJuYXNlcSAoU3BlYXJtYW4pCmBgYHtyIGZpZy53aWR0aD03LCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQpoZWF0bWFwICAlPiUgZmlsdGVyKGRhdGFzZXRzICVpbiUgYygiRFM0NDYzOTUiLCJEUzUwMCIsIkNJQVM0IiwiQ0lWQTMiKSkgJT4lIGdyb3VwX2J5KHR5cGUsY2VsbHMpICU+JSBzdW1tYXJpc2Uoc3BlYXJtYW49bWVhbihzcGVhcm1hbikpICU+JSByZXNoYXBlMjo6YWNhc3QodHlwZSB+Y2VsbHMpICU+JSBhcy5tYXRyaXgoKSAlPiUgZDNoZWF0bWFwOjpkM2hlYXRtYXAoY29sb3JzID0gIlJlZHMiKQpgYGAKCgoKCiMjIEhlYXRtYXAgcGVyIGRhdGFzZXQgKFBlYXJzb24pCmBgYHtyIGZpZy53aWR0aD03LCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQojbGlicmFyeShnZ3Bsb3RpZnkpCiNwYXIobWZyb3c9YygyLDEpKQpwYXR0ZXJuPSJEUyIKCmhlYXRtYXAgJT4lIGdyb3VwX2J5KHR5cGUsZGF0YXNldHMpICU+JSAgc3VtbWFyaXNlKHBlYXJzb249bWVhbihwZWFyc29uKSkgJT4lIHJlc2hhcGUyOjphY2FzdCh0eXBlIH5kYXRhc2V0cykgJT4lIGFzLm1hdHJpeCgpICU+JSBkM2hlYXRtYXA6OmQzaGVhdG1hcChjb2xvcnMgPSAiQmx1ZXMiKQpgYGAKIyMgSGVhdG1hcCBwZXIgZGF0YXNldCBybmFzZXEgKFBlYXJzb24pCmBgYHtyIGZpZy53aWR0aD03LCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQoKaGVhdG1hcCAlPiUgZmlsdGVyKGRhdGFzZXRzICVpbiUgYygiRFM0NDYzOTUiLCJEUzUwMCIsIkNJQVM0IiwiQ0lWQTMiKSkgJT4lIGdyb3VwX2J5KHR5cGUsZGF0YXNldHMpICU+JSAgc3VtbWFyaXNlKHBlYXJzb249bWVhbihwZWFyc29uKSkgJT4lIHJlc2hhcGUyOjphY2FzdCh0eXBlIH5kYXRhc2V0cykgJT4lIGFzLm1hdHJpeCgpICU+JSBkM2hlYXRtYXA6OmQzaGVhdG1hcChjb2xvcnMgPSAiQmx1ZXMiKQpgYGAKCiMjIEhlYXRtYXAgcGVyIGRhdGFzZXQgKFNwZWFybWFuKQpgYGB7ciBmaWcud2lkdGg9NywgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0KaGVhdG1hcCAlPiUgZ3JvdXBfYnkodHlwZSxkYXRhc2V0cykgJT4lIHN1bW1hcmlzZShzcGVhcm1hbj1tZWFuKHNwZWFybWFuKSkgJT4lIHJlc2hhcGUyOjphY2FzdCh0eXBlIH5kYXRhc2V0cykgJT4lIGFzLm1hdHJpeCgpICU+JSBkM2hlYXRtYXA6OmQzaGVhdG1hcChjb2xvcnMgPSAiUmVkcyIpCmBgYAoKIyMgSGVhdG1hcCBwZXIgZGF0YXNldCBybmFzZXEgKFNwZWFybWFuKQpgYGB7ciBmaWcud2lkdGg9NywgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0KaGVhdG1hcCAgJT4lIGZpbHRlcihkYXRhc2V0cyAlaW4lIGMoIkRTNDQ2Mzk1IiwiRFM1MDAiLCJDSUFTNCIsIkNJVkEzIikpICU+JSBncm91cF9ieSh0eXBlLGRhdGFzZXRzKSAlPiUgc3VtbWFyaXNlKHNwZWFybWFuPW1lYW4oc3BlYXJtYW4pKSAlPiUgcmVzaGFwZTI6OmFjYXN0KHR5cGUgfmRhdGFzZXRzKSAlPiUgYXMubWF0cml4KCkgJT4lIGQzaGVhdG1hcDo6ZDNoZWF0bWFwKGNvbG9ycyA9ICJSZWRzIikKYGBgCgoKCgoKIyMgYTMgW2dsbW5ldDIwMF0gUmVzdWx0cyBmb3IgZ2xtbmV0IDIwMCBmZWF0dXJlcyBvdmVyIDIwMDAwIChSRjIpCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CmZpbGVuYW1lPC0iLi9kZXZjb25fY2hhbGxlbmdlLmdsbW5ldF9yZXN1bHRzX25vc2NhbGVfcmZfc2VsZWN0ZWRfZmVhdHVyZXNfMjAwXzIwMDAwX25ld21peF9zcGVhcnNvbi5jc3YiCiNyZWFkcjo6d3JpdGVfY3N2KFJFU1VMVFMscGF0aCA9IGZpbGVuYW1lKQphMzwtcmVhZHI6OnJlYWRfY3N2KGZpbGVuYW1lKSAlPiUgZmlsdGVyKCFpcy5uYShwZWFyc29uKSkgCmEzCnJlYWRyOjpyZWFkX2NzdihmaWxlbmFtZSkgJT4lIGZpbHRlcighaXMubmEocGVhcnNvbikpICU+JSAgc3VtbWFyaXNlKHBlYXJzb25fbWVhbj1tZWFuKHBlYXJzb24pLHNwZWFybWFuX21lYW49bWVhbihzcGVhcm1hbikpCnJlYWRyOjpyZWFkX2NzdihmaWxlbmFtZSkgJT4lIGZpbHRlcighaXMubmEocGVhcnNvbikpICAlPiUgZmlsdGVyKCBkYXRhc2V0cyAlaW4lIGMoIkRTNDQ2Mzk1IiwiRFM1MDAiLCJDSUFTNCIsIkNJVkEzIikpICU+JSAgc3VtbWFyaXNlKHBlYXJzb25fbWVhbj1tZWFuKHBlYXJzb24pLHNwZWFybWFuX21lYW49bWVhbihzcGVhcm1hbikpCmBgYAoKCiMjIGE0IFtnbG1uZXQyNTBdIFJlc3VsdHMgZm9yIGdsbW5ldCAyNTAgZmVhdHVyZXMgb3ZlciAyMDAwMCAoUkYyKQpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQpmaWxlbmFtZTwtIi4vZGV2Y29uX2NoYWxsZW5nZS5nbG1uZXRfcmVzdWx0c19ub3NjYWxlX3JmX3NlbGVjdGVkX2ZlYXR1cmVzXzI1MF8yMDAwMF9uZXdtaXhfc3BlYXJzb24uY3N2IgojcmVhZHI6OndyaXRlX2NzdihSRVNVTFRTLHBhdGggPSBmaWxlbmFtZSkKYTQ8LXJlYWRyOjpyZWFkX2NzdihmaWxlbmFtZSkgJT4lIGZpbHRlcighaXMubmEocGVhcnNvbikpIAphNApyZWFkcjo6cmVhZF9jc3YoZmlsZW5hbWUpICU+JSBmaWx0ZXIoIWlzLm5hKHBlYXJzb24pKSAlPiUgIHN1bW1hcmlzZShwZWFyc29uX21lYW49bWVhbihwZWFyc29uKSxzcGVhcm1hbl9tZWFuPW1lYW4oc3BlYXJtYW4pKQpyZWFkcjo6cmVhZF9jc3YoZmlsZW5hbWUpICU+JSBmaWx0ZXIoIWlzLm5hKHBlYXJzb24pKSAgJT4lIGZpbHRlciggZGF0YXNldHMgJWluJSBjKCJEUzQ0NjM5NSIsIkRTNTAwIiwiQ0lBUzQiLCJDSVZBMyIpKSAlPiUgIHN1bW1hcmlzZShwZWFyc29uX21lYW49bWVhbihwZWFyc29uKSxzcGVhcm1hbl9tZWFuPW1lYW4oc3BlYXJtYW4pKQpgYGAKCiMjIGE1IFtnbG1uZXQzNTBdIFJlc3VsdHMgZm9yIGdsbW5ldCAzNTAgZmVhdHVyZXMgb3ZlciAyMDAwMCAoUkYyKQpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQpmaWxlbmFtZTwtIi4vZGV2Y29uX2NoYWxsZW5nZS5nbG1uZXRfcmVzdWx0c19ub3NjYWxlX3JmX3NlbGVjdGVkX2ZlYXR1cmVzXzM1MF8yMDAwMF9uZXdtaXhfc3BlYXJzb24uY3N2IgojcmVhZHI6OndyaXRlX2NzdihSRVNVTFRTLHBhdGggPSBmaWxlbmFtZSkKYTU8LXJlYWRyOjpyZWFkX2NzdihmaWxlbmFtZSkgJT4lIGZpbHRlcighaXMubmEocGVhcnNvbikpIAphNQpyZWFkcjo6cmVhZF9jc3YoZmlsZW5hbWUpICU+JSBmaWx0ZXIoIWlzLm5hKHBlYXJzb24pKSAlPiUgIHN1bW1hcmlzZShwZWFyc29uX21lYW49bWVhbihwZWFyc29uKSxzcGVhcm1hbl9tZWFuPW1lYW4oc3BlYXJtYW4pKQpyZWFkcjo6cmVhZF9jc3YoZmlsZW5hbWUpICU+JSBmaWx0ZXIoIWlzLm5hKHBlYXJzb24pKSAgJT4lIGZpbHRlciggZGF0YXNldHMgJWluJSBjKCJEUzQ0NjM5NSIsIkRTNTAwIiwiQ0lBUzQiLCJDSVZBMyIpKSAlPiUgIHN1bW1hcmlzZShwZWFyc29uX21lYW49bWVhbihwZWFyc29uKSxzcGVhcm1hbl9tZWFuPW1lYW4oc3BlYXJtYW4pKQpgYGAKCiMjIGE2IFtnbG1uZXQ1MDBdIFJlc3VsdHMgZm9yIGdsbW5ldCA1MDAgZmVhdHVyZXMgb3ZlciAyMDAwMCAoUkYyKQpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQpmaWxlbmFtZTwtIi4vZGV2Y29uX2NoYWxsZW5nZS5nbG1uZXRfcmVzdWx0c19ub3NjYWxlX3JmX3NlbGVjdGVkX2ZlYXR1cmVzXzUwMF8yMDAwMF9uZXdtaXhfc3BlYXJzb24uY3N2IgojcmVhZHI6OndyaXRlX2NzdihSRVNVTFRTLHBhdGggPSBmaWxlbmFtZSkKYTY8LXJlYWRyOjpyZWFkX2NzdihmaWxlbmFtZSkgJT4lIGZpbHRlcighaXMubmEocGVhcnNvbikpIAphNgpyZWFkcjo6cmVhZF9jc3YoZmlsZW5hbWUpICU+JSBmaWx0ZXIoIWlzLm5hKHBlYXJzb24pKSAlPiUgIHN1bW1hcmlzZShwZWFyc29uX21lYW49bWVhbihwZWFyc29uKSxzcGVhcm1hbl9tZWFuPW1lYW4oc3BlYXJtYW4pKQpyZWFkcjo6cmVhZF9jc3YoZmlsZW5hbWUpICU+JSBmaWx0ZXIoIWlzLm5hKHBlYXJzb24pKSAgJT4lIGZpbHRlciggZGF0YXNldHMgJWluJSBjKCJEUzQ0NjM5NSIsIkRTNTAwIiwiQ0lBUzQiLCJDSVZBMyIpKSAlPiUgIHN1bW1hcmlzZShwZWFyc29uX21lYW49bWVhbihwZWFyc29uKSxzcGVhcm1hbl9tZWFuPW1lYW4oc3BlYXJtYW4pKQoKYGBgCiMjIHgxIFtzdnIyMDBdIFJlc3VsdHMgZm9yIHN2ciByYWRpYWwgbm9zY2FsZSAyMDAgZmVhdHVyZXMgb3ZlciAyMDAwMCAoUkYyKSAKYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0KZmlsZW5hbWU8LSIuL2RldmNvbl9jaGFsbGVuZ2Uuc3ZyX3Jlc3VsdHNfcmZfc2VsZWN0ZWRfZmVhdHVyZXNfMjAwXzIwMDAwX25vc2NhbGVfbmV3bWl4X3NwZWFyc29uLmNzdiIKI3JlYWRyOjp3cml0ZV9jc3YoUkVTVUxUUyxwYXRoID0gZmlsZW5hbWUpCngxPC1yZWFkcjo6cmVhZF9jc3YoZmlsZW5hbWUpICU+JSBmaWx0ZXIoIWlzLm5hKHBlYXJzb24pKSAKeDEKcmVhZHI6OnJlYWRfY3N2KGZpbGVuYW1lKSAlPiUgZmlsdGVyKCFpcy5uYShwZWFyc29uKSkgJT4lICBzdW1tYXJpc2UocGVhcnNvbl9tZWFuPW1lYW4ocGVhcnNvbiksc3BlYXJtYW5fbWVhbj1tZWFuKHNwZWFybWFuKSkKcmVhZHI6OnJlYWRfY3N2KGZpbGVuYW1lKSAlPiUgZmlsdGVyKCFpcy5uYShwZWFyc29uKSkgICU+JSBmaWx0ZXIoIGRhdGFzZXRzICVpbiUgYygiRFM0NDYzOTUiLCJEUzUwMCIsIkNJQVM0IiwiQ0lWQTMiKSkgJT4lICBzdW1tYXJpc2UocGVhcnNvbl9tZWFuPW1lYW4ocGVhcnNvbiksc3BlYXJtYW5fbWVhbj1tZWFuKHNwZWFybWFuKSkKYGBgCgoKCiMjIHgyIFtzdnIyNTBdIFJlc3VsdHMgZm9yIHN2ciByYWRpYWwgbm9zY2FsZSAyNTAgZmVhdHVyZXMgb3ZlciAyMDAwMCAoUkYyKSAKYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0KZmlsZW5hbWU8LSIuL2RldmNvbl9jaGFsbGVuZ2Uuc3ZyX3Jlc3VsdHNfcmZfc2VsZWN0ZWRfZmVhdHVyZXNfMjUwXzIwMDAwX25vc2NhbGVfbmV3bWl4X3NwZWFyc29uLmNzdiIKI3JlYWRyOjp3cml0ZV9jc3YoUkVTVUxUUyxwYXRoID0gZmlsZW5hbWUpCngyPC1yZWFkcjo6cmVhZF9jc3YoZmlsZW5hbWUpICU+JSBmaWx0ZXIoIWlzLm5hKHBlYXJzb24pKSAKeDIKcmVhZHI6OnJlYWRfY3N2KGZpbGVuYW1lKSAlPiUgZmlsdGVyKCFpcy5uYShwZWFyc29uKSkgJT4lICBzdW1tYXJpc2UocGVhcnNvbl9tZWFuPW1lYW4ocGVhcnNvbiksc3BlYXJtYW5fbWVhbj1tZWFuKHNwZWFybWFuKSkKcmVhZHI6OnJlYWRfY3N2KGZpbGVuYW1lKSAlPiUgZmlsdGVyKCFpcy5uYShwZWFyc29uKSkgICU+JSBmaWx0ZXIoIGRhdGFzZXRzICVpbiUgYygiRFM0NDYzOTUiLCJEUzUwMCIsIkNJQVM0IiwiQ0lWQTMiKSkgJT4lICBzdW1tYXJpc2UocGVhcnNvbl9tZWFuPW1lYW4ocGVhcnNvbiksc3BlYXJtYW5fbWVhbj1tZWFuKHNwZWFybWFuKSkKYGBgCgoKIyMgeDMgW3N2cjM1MF0gUmVzdWx0cyBmb3Igc3ZyIHJhZGlhbCBub3NjYWxlIDM1MCBmZWF0dXJlcyBvdmVyIDIwMDAwIChSRjIpIApgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQpmaWxlbmFtZTwtIi4vZGV2Y29uX2NoYWxsZW5nZS5zdnJfcmVzdWx0c19yZl9zZWxlY3RlZF9mZWF0dXJlc18zNTBfMjAwMDBfbm9zY2FsZV9uZXdtaXhfc3BlYXJzb24uY3N2IgojcmVhZHI6OndyaXRlX2NzdihSRVNVTFRTLHBhdGggPSBmaWxlbmFtZSkKeDM8LXJlYWRyOjpyZWFkX2NzdihmaWxlbmFtZSkgJT4lIGZpbHRlcighaXMubmEocGVhcnNvbikpIAp4MwpyZWFkcjo6cmVhZF9jc3YoZmlsZW5hbWUpICU+JSBmaWx0ZXIoIWlzLm5hKHBlYXJzb24pKSAlPiUgIHN1bW1hcmlzZShwZWFyc29uX21lYW49bWVhbihwZWFyc29uKSxzcGVhcm1hbl9tZWFuPW1lYW4oc3BlYXJtYW4pKQpyZWFkcjo6cmVhZF9jc3YoZmlsZW5hbWUpICU+JSBmaWx0ZXIoIWlzLm5hKHBlYXJzb24pKSAgJT4lIGZpbHRlciggZGF0YXNldHMgJWluJSBjKCJEUzQ0NjM5NSIsIkRTNTAwIiwiQ0lBUzQiLCJDSVZBMyIpKSAlPiUgIHN1bW1hcmlzZShwZWFyc29uX21lYW49bWVhbihwZWFyc29uKSxzcGVhcm1hbl9tZWFuPW1lYW4oc3BlYXJtYW4pKQpgYGAKCgojIyB4NCBbc3ZyNTAwXSBSZXN1bHRzIGZvciBzdnIgcmFkaWFsIG5vc2NhbGUgNTAwIGZlYXR1cmVzIG92ZXIgMjAwMDAgKFJGMikgCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CmZpbGVuYW1lPC0iLi9kZXZjb25fY2hhbGxlbmdlLnN2cl9yZXN1bHRzX3JmX3NlbGVjdGVkX2ZlYXR1cmVzXzUwMF8yMDAwMF9ub3NjYWxlX25ld21peF9zcGVhcnNvbi5jc3YiCiNyZWFkcjo6d3JpdGVfY3N2KFJFU1VMVFMscGF0aCA9IGZpbGVuYW1lKQp4NDwtcmVhZHI6OnJlYWRfY3N2KGZpbGVuYW1lKSAlPiUgZmlsdGVyKCFpcy5uYShwZWFyc29uKSkgCng0CnJlYWRyOjpyZWFkX2NzdihmaWxlbmFtZSkgJT4lIGZpbHRlcighaXMubmEocGVhcnNvbikpICU+JSAgc3VtbWFyaXNlKHBlYXJzb25fbWVhbj1tZWFuKHBlYXJzb24pLHNwZWFybWFuX21lYW49bWVhbihzcGVhcm1hbikpCnJlYWRyOjpyZWFkX2NzdihmaWxlbmFtZSkgJT4lIGZpbHRlcighaXMubmEocGVhcnNvbikpICAlPiUgZmlsdGVyKCBkYXRhc2V0cyAlaW4lIGMoIkRTNDQ2Mzk1IiwiRFM1MDAiLCJDSUFTNCIsIkNJVkEzIikpICU+JSAgc3VtbWFyaXNlKHBlYXJzb25fbWVhbj1tZWFuKHBlYXJzb24pLHNwZWFybWFuX21lYW49bWVhbihzcGVhcm1hbikpCmBgYAoKIyMgejQgW3BsczUwMF0gUmVzdWx0cyBmb3IgcGxzIDUwMCBmZWF0dXJlcyAoUkYpCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CmZpbGVuYW1lPC0iLi9kZXZjb25fY2hhbGxlbmdlLnBsc19yZXN1bHRzX3JmX3NlbGVjdGVkX2ZlYXR1cmVzXzUwMF8yMDAwMF9ub3NjYWxlX25ld21peF9zcGVhcnNvbi5jc3YiCiNyZWFkcjo6d3JpdGVfY3N2KFJFU1VMVFMscGF0aCA9IGZpbGVuYW1lKQp6NDwtcmVhZHI6OnJlYWRfY3N2KGZpbGVuYW1lKSAlPiUgZmlsdGVyKCFpcy5uYShwZWFyc29uKSkgCno0CnJlYWRyOjpyZWFkX2NzdihmaWxlbmFtZSkgJT4lIGZpbHRlcighaXMubmEocGVhcnNvbikpICU+JSAgc3VtbWFyaXNlKHBlYXJzb25fbWVhbj1tZWFuKHBlYXJzb24pLHNwZWFybWFuX21lYW49bWVhbihzcGVhcm1hbikpCnJlYWRyOjpyZWFkX2NzdihmaWxlbmFtZSkgJT4lIGZpbHRlcighaXMubmEocGVhcnNvbikpICAlPiUgZmlsdGVyKCBkYXRhc2V0cyAlaW4lIGMoIkRTNDQ2Mzk1IiwiRFM1MDAiLCJDSUFTNCIsIkNJVkEzIikpICU+JSAgc3VtbWFyaXNlKHBlYXJzb25fbWVhbj1tZWFuKHBlYXJzb24pLHNwZWFybWFuX21lYW49bWVhbihzcGVhcm1hbikpCmBgYAojIyB6MyBbcGxzMzUwXSBSZXN1bHRzIGZvciBwbHMgMzUwIGZlYXR1cmVzIChSRikKYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0KZmlsZW5hbWU8LSIuL2RldmNvbl9jaGFsbGVuZ2UucGxzX3Jlc3VsdHNfcmZfc2VsZWN0ZWRfZmVhdHVyZXNfMzUwXzIwMDAwX25vc2NhbGVfbmV3bWl4X3NwZWFyc29uLmNzdiIKI3JlYWRyOjp3cml0ZV9jc3YoUkVTVUxUUyxwYXRoID0gZmlsZW5hbWUpCnozPC1yZWFkcjo6cmVhZF9jc3YoZmlsZW5hbWUpICU+JSBmaWx0ZXIoIWlzLm5hKHBlYXJzb24pKSAKejMKcmVhZHI6OnJlYWRfY3N2KGZpbGVuYW1lKSAlPiUgZmlsdGVyKCFpcy5uYShwZWFyc29uKSkgJT4lICBzdW1tYXJpc2UocGVhcnNvbl9tZWFuPW1lYW4ocGVhcnNvbiksc3BlYXJtYW5fbWVhbj1tZWFuKHNwZWFybWFuKSkKcmVhZHI6OnJlYWRfY3N2KGZpbGVuYW1lKSAlPiUgZmlsdGVyKCFpcy5uYShwZWFyc29uKSkgICU+JSBmaWx0ZXIoIGRhdGFzZXRzICVpbiUgYygiRFM0NDYzOTUiLCJEUzUwMCIsIkNJQVM0IiwiQ0lWQTMiKSkgJT4lICBzdW1tYXJpc2UocGVhcnNvbl9tZWFuPW1lYW4ocGVhcnNvbiksc3BlYXJtYW5fbWVhbj1tZWFuKHNwZWFybWFuKSkKYGBgCiMjIHoyIFtwbHMyNTBdIFJlc3VsdHMgZm9yIHBscyAyNTAgZmVhdHVyZXMgKFJGKQpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQpmaWxlbmFtZTwtIi4vZGV2Y29uX2NoYWxsZW5nZS5wbHNfcmVzdWx0c19yZl9zZWxlY3RlZF9mZWF0dXJlc18yNTBfMjAwMDBfbm9zY2FsZV9uZXdtaXhfc3BlYXJzb24uY3N2IgojcmVhZHI6OndyaXRlX2NzdihSRVNVTFRTLHBhdGggPSBmaWxlbmFtZSkKejI8LXJlYWRyOjpyZWFkX2NzdihmaWxlbmFtZSkgJT4lIGZpbHRlcighaXMubmEocGVhcnNvbikpIAp6MgpyZWFkcjo6cmVhZF9jc3YoZmlsZW5hbWUpICU+JSBmaWx0ZXIoIWlzLm5hKHBlYXJzb24pKSAlPiUgIHN1bW1hcmlzZShwZWFyc29uX21lYW49bWVhbihwZWFyc29uKSxzcGVhcm1hbl9tZWFuPW1lYW4oc3BlYXJtYW4pKQpyZWFkcjo6cmVhZF9jc3YoZmlsZW5hbWUpICU+JSBmaWx0ZXIoIWlzLm5hKHBlYXJzb24pKSAgJT4lIGZpbHRlciggZGF0YXNldHMgJWluJSBjKCJEUzQ0NjM5NSIsIkRTNTAwIiwiQ0lBUzQiLCJDSVZBMyIpKSAlPiUgIHN1bW1hcmlzZShwZWFyc29uX21lYW49bWVhbihwZWFyc29uKSxzcGVhcm1hbl9tZWFuPW1lYW4oc3BlYXJtYW4pKQpgYGAKCiMjIHoxIFtwbHMyMDBdIFJlc3VsdHMgZm9yIHBscyAyMDAgZmVhdHVyZXMgKFJGKQpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQpmaWxlbmFtZTwtIi4vZGV2Y29uX2NoYWxsZW5nZS5wbHNfcmVzdWx0c19yZl9zZWxlY3RlZF9mZWF0dXJlc18yMDBfMjAwMDBfbm9zY2FsZV9uZXdtaXhfc3BlYXJzb24uY3N2IgojcmVhZHI6OndyaXRlX2NzdihSRVNVTFRTLHBhdGggPSBmaWxlbmFtZSkKejE8LXJlYWRyOjpyZWFkX2NzdihmaWxlbmFtZSkgJT4lIGZpbHRlcighaXMubmEocGVhcnNvbikpIAp6MQpyZWFkcjo6cmVhZF9jc3YoZmlsZW5hbWUpICU+JSBmaWx0ZXIoIWlzLm5hKHBlYXJzb24pKSAlPiUgIHN1bW1hcmlzZShwZWFyc29uX21lYW49bWVhbihwZWFyc29uKSxzcGVhcm1hbl9tZWFuPW1lYW4oc3BlYXJtYW4pKQpyZWFkcjo6cmVhZF9jc3YoZmlsZW5hbWUpICU+JSBmaWx0ZXIoIWlzLm5hKHBlYXJzb24pKSAgJT4lIGZpbHRlciggZGF0YXNldHMgJWluJSBjKCJEUzQ0NjM5NSIsIkRTNTAwIiwiQ0lBUzQiLCJDSVZBMyIpKSAlPiUgIHN1bW1hcmlzZShwZWFyc29uX21lYW49bWVhbihwZWFyc29uKSxzcGVhcm1hbl9tZWFuPW1lYW4oc3BlYXJtYW4pKQpgYGAKYGBge3J9CmxvYWQoInJlc3VsdHNfZ2xtbmV0X2RldmNvbl9iZXN0bW9kZWxzX2ZnZGF0YV9jcHNfMjAwMDBfMl9zZWxlY3RlZF9mZWF0dXJlc18yNTBfdGVzdF9hZGRlZC5yZGF0YSIpCmdsbW5ldDI1MDwtcmVzdWx0c19maW5hbF9tb2RlbHMKCmxvYWQoInJlc3VsdHNfc3ZyX3JhZGlhbF9kZXZjb25fYmVzdG1vZGVsc19mZ2RhdGFfY3BzXzIwMDAwXzJfbm9zY2FsZV9zZWxlY3RlZF9mZWF0dXJlc18yMDBfbmV3Z2FtYV90ZXN0X2FkZGVkLnJkYXRhIikKc3ZyMjAwPC1yZXN1bHRzX2ZpbmFsX21vZGVscwoKZ2xtbmV0MjUwW1snY2FuY2VyJ11dJG56ZXJvCnN2cjIwMFtbJ2NhbmNlciddXSQKYGBgCgo=