Results for glmnet 50 features over 20000 (RF2)

Results per dataset, person and spearman means, rnaseq means

filename<-"./devcon_challenge.glmnet_results_noscale_rf_selected_features_50_20000_all_lines.csv"
#readr::write_csv(RESULTS,path = filename)
a0<-readr::read_csv(filename) %>% filter(!is.na(pearson)) 
a0
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))

Results for glmnet 100 features over 20000 (RF2)

filename<-"./devcon_challenge.glmnet_results_noscale_rf_selected_features_100_20000_all_lines.csv"
#readr::write_csv(RESULTS,path = filename)
a1<-readr::read_csv(filename) %>% filter(!is.na(pearson)) 
a1

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))

Results for glmnet 150 features over 20000 (RF2)

filename<-"./devcon_challenge.glmnet_results_noscale_rf_selected_features_150_20000_all_lines.csv"
#readr::write_csv(RESULTS,path = filename)
a2<-readr::read_csv(filename) %>% filter(!is.na(pearson)) 
a2
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))

Results for glmnet 200 features over 20000 (RF2)

filename<-"./devcon_challenge.glmnet_results_noscale_rf_selected_features_200_20000_all_lines.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))

Results for glmnet 250 features over 20000 (RF2)

filename<-"./devcon_challenge.glmnet_results_noscale_rf_selected_features_250_20000_all_lines.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))

Results for glmnet 350 features over 20000 (RF2)

filename<-"./devcon_challenge.glmnet_results_noscale_rf_selected_features_350_20000_all_lines.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))

Results for liblinear 50 features over 20000 (RF2) (13)

filename<-"./devcon_challenge.liblinear13_results_noscale_rf_selected_features_50_20000_all_lines.csv"
#readr::write_csv(RESULTS,path = filename)
s1<-readr::read_csv(filename) %>% filter(!is.na(pearson)) 
s1
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))

Results for liblinear 100 features over 20000 (RF2) (13)

filename<-"./devcon_challenge.liblinear13_results_noscale_rf_selected_features_100_20000_all_lines.csv"
readr::write_csv(RESULTS,path = filename)
s2<-readr::read_csv(filename) %>% filter(!is.na(pearson)) 
s2
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))

Results for liblinear 150 features over 20000 (RF2) (13)

filename<-"./devcon_challenge.liblinear13_results_noscale_rf_selected_features_150_20000_all_lines.csv"
readr::write_csv(RESULTS,path = filename)
s3<-readr::read_csv(filename) %>% filter(!is.na(pearson)) 
s3
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))

Results for liblinear 200 features over 20000 (RF2) (13)

filename<-"./devcon_challenge.liblinear13_results_noscale_rf_selected_features_200_20000_all_lines.csv"
readr::write_csv(RESULTS,path = filename)
s4<-readr::read_csv(filename) %>% filter(!is.na(pearson)) 
s4
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))

Results for liblinear 250 features over 20000 (RF2) (13)

filename<-"./devcon_challenge.liblinear13_results_noscale_rf_selected_features_250_20000_all_lines.csv"
#readr::write_csv(RESULTS,path = filename)
s5<-readr::read_csv(filename) %>% filter(!is.na(pearson)) 
s5
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))

Results for liblinear 350 features over 20000 (RF2) (13)

filename<-"./devcon_challenge.liblinear13_results_noscale_rf_selected_features_350_20000_all_lines.csv"
readr::write_csv(RESULTS,path = filename)
s6<-readr::read_csv(filename) %>% filter(!is.na(pearson)) 
s6
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))

Results for svr radial 50 features over 20000 (RF2)

filename<-"./devcon_challenge.svr_results_noscale_rf_selected_features_50_20000_all_lines.csv"
readr::write_csv(RESULTS,path = filename)
r1<-readr::read_csv(filename) %>% filter(!is.na(pearson)) 
r1
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))

Results for svr radial 100 features over 20000 (RF2)

filename<-"./devcon_challenge.svr_results_noscale_rf_selected_features_100_20000_all_lines.csv"
readr::write_csv(RESULTS,path = filename)
r2<-readr::read_csv(filename) %>% filter(!is.na(pearson)) 
r2
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))

Results for svr radial 150 features over 20000 (RF2)

filename<-"./devcon_challenge.svr_results_noscale_rf_selected_features_150_20000_all_lines.csv"
readr::write_csv(RESULTS,path = filename)
r3<-readr::read_csv(filename) %>% filter(!is.na(pearson)) 
r3
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))

Results for svr radial 200 features over 20000 (RF2)

filename<-"./devcon_challenge.svr_results_noscale_rf_selected_features_200_20000_all_lines.csv"
#readr::write_csv(RESULTS,path = filename)
r4<-readr::read_csv(filename) %>% filter(!is.na(pearson)) 
r4
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))

Results for svr radial 250 features over 20000 (RF2)

filename<-"./devcon_challenge.svr_results_noscale_rf_selected_features_250_20000_all_lines.csv"
#readr::write_csv(RESULTS,path = filename)
r5<-readr::read_csv(filename) %>% filter(!is.na(pearson)) 
r5
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))

Results for svr radial 350 features over 20000 (RF2)

filename<-"./devcon_challenge.svr_results_noscale_rf_selected_features_350_20000_all_lines.csv"
#readr::write_csv(RESULTS,path = filename)
r6<-readr::read_csv(filename) %>% filter(!is.na(pearson)) 
r6
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))

Results for svr radial noscale 50 features over 20000 (RF2)

filename<-"./devcon_challenge.svr_results_rf_selected_features_50_20000_noscale_all_lines.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))

Results for svr radial noscale 100 features over 20000 (RF2)

filename<-"./devcon_challenge.svr_results_rf_selected_features_100_20000_noscale_all_lines.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))

Results for svr radial noscale 150 features over 20000 (RF2)

filename<-"./devcon_challenge.svr_results_rf_selected_features_150_20000_noscale_all_lines.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))

Results for svr radial noscale 200 features over 20000 (RF2)

filename<-"./devcon_challenge.svr_results_rf_selected_features_200_20000_noscale_all_lines.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))

Results for svr radial noscale 250 features over 20000 (RF2)

filename<-"./devcon_challenge.svr_results_rf_selected_features_250_20000_noscale_all_lines.csv"
readr::write_csv(RESULTS,path = filename)
x5<-readr::read_csv(filename) %>% filter(!is.na(pearson)) 
x5
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))

Results for svr radial noscale 350 features over 20000 (RF2)

filename<-"./devcon_challenge.svr_results_rf_selected_features_350_20000_noscale_all_lines.csv"
readr::write_csv(RESULTS,path = filename)
x6<-readr::read_csv(filename) %>% filter(!is.na(pearson)) 
x6
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))

Heatmap results per dataset

library(gridExtra)
a0$type<-"glmnet50"
a1$type<-"glmnet100"
a2$type<-"glmnet150"
a3$type<-"glmnet200"
a4$type<-"glmnet250"
a5$type<-"glmnet350"
s1$type<-"liblinear50"
s2$type<-"liblinear100"
s3$type<-"liblinear150"
s4$type<-"liblinear200" 
s5$type<-"liblinear250" 
s6$type<-"liblinear350"
x1$type<-"svr50"
x2$type<-"svr100"
x3$type<-"svr150"
x4$type<-"svr200"
x5$type<-"svr250"
x6$type<-"svr350"

heatmap <-rbind(a0,a1,a2,a3,a4,a5,
                s1,s2,s3,s4,s5,
                x1,x2,x3,x4,x5,x6) 

plot2<- heatmap  %>% group_by(type,datasets) %>% summarise(pearson=mean(pearson)) %>% arrange(pearson) %>%
  ggplot()+
  geom_tile(aes(x=type,y=datasets,fill=pearson))+
  scale_fill_gradient(low = "red", high = "white",limits=c(0.4, 1),)+
  theme(axis.text.x=element_text(angle=45,hjust=1))
  
  
plot1<- heatmap %>% group_by(type,datasets) %>% summarise(spearman=mean(spearman)) %>% arrange(spearman) %>%
  ggplot()+
  geom_tile(aes(x=type,y=datasets,fill=spearman))+
  scale_fill_gradient(low = "red", high = "white",limits=c(0.4, 1),)+
  theme(axis.text.x=element_text(angle=45,hjust=1))


plot3<- heatmap %>% filter( datasets %in% c("DS446395","DS500","CIAS4","CIVA3")) %>% group_by(type,datasets) %>% summarise(pearson=mean(pearson)) %>% arrange(pearson) %>%
  ggplot()+
  geom_tile(aes(x=type,y=datasets,fill=pearson))+
  scale_fill_gradient(low = "red", high = "white",limits=c(0.4, 1),)+
  theme(axis.text.x=element_text(angle=45,hjust=1))
  
  
plot4<-heatmap %>% filter( datasets %in% c("DS446395","DS500","CIAS4","CIVA3")) %>% group_by(type,datasets) %>% summarise(spearman=mean(spearman)) %>% arrange(spearman) %>%
  ggplot()+
  geom_tile(aes(x=type,y=datasets,fill=spearman))+
  scale_fill_gradient(low = "red", high = "white",limits=c(0.4, 1),)+
  theme(axis.text.x=element_text(angle=45,hjust=1))




gridExtra::grid.arrange(plot2,plot1,plot3,plot4,ncol=2) 

Heatmap per dataset (Pearson)

#library(ggplotify)
par(mfrow=c(2,1))
heatmap %>% 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")
LS0tCnRpdGxlOiAiRGVjb252IEZpbmFsIFBoYXNlIHBhcnRpYWwgcmVzdWx0cyAoRmVhdHVyZSBTZWxlY3Rpb24pIgpvdXRwdXQ6IAogIGh0bWxfbm90ZWJvb2s6IAogICAgY29kZV9mb2xkaW5nOiBoaWRlCiAgICB0b2M6IHllcwotLS0KCgoKIyBSZXN1bHRzIGZvciBnbG1uZXQgNTAgZmVhdHVyZXMgb3ZlciAyMDAwMCAoUkYyKQpSZXN1bHRzIHBlciBkYXRhc2V0LCBwZXJzb24gYW5kIHNwZWFybWFuIG1lYW5zLCBybmFzZXEgbWVhbnMKYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0KZmlsZW5hbWU8LSIuL2RldmNvbl9jaGFsbGVuZ2UuZ2xtbmV0X3Jlc3VsdHNfbm9zY2FsZV9yZl9zZWxlY3RlZF9mZWF0dXJlc181MF8yMDAwMF9hbGxfbGluZXMuY3N2IgojcmVhZHI6OndyaXRlX2NzdihSRVNVTFRTLHBhdGggPSBmaWxlbmFtZSkKYTA8LXJlYWRyOjpyZWFkX2NzdihmaWxlbmFtZSkgJT4lIGZpbHRlcighaXMubmEocGVhcnNvbikpIAphMApyZWFkcjo6cmVhZF9jc3YoZmlsZW5hbWUpICU+JSBmaWx0ZXIoIWlzLm5hKHBlYXJzb24pKSAlPiUgIHN1bW1hcmlzZShwZWFyc29uX21lYW49bWVhbihwZWFyc29uKSxzcGVhcm1hbl9tZWFuPW1lYW4oc3BlYXJtYW4pKQpyZWFkcjo6cmVhZF9jc3YoZmlsZW5hbWUpICU+JSBmaWx0ZXIoIWlzLm5hKHBlYXJzb24pKSAgJT4lIGZpbHRlciggZGF0YXNldHMgJWluJSBjKCJEUzQ0NjM5NSIsIkRTNTAwIiwiQ0lBUzQiLCJDSVZBMyIpKSAlPiUgIHN1bW1hcmlzZShwZWFyc29uX21lYW49bWVhbihwZWFyc29uKSxzcGVhcm1hbl9tZWFuPW1lYW4oc3BlYXJtYW4pKQpgYGAKCiMgUmVzdWx0cyBmb3IgZ2xtbmV0IDEwMCBmZWF0dXJlcyBvdmVyIDIwMDAwIChSRjIpCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CmZpbGVuYW1lPC0iLi9kZXZjb25fY2hhbGxlbmdlLmdsbW5ldF9yZXN1bHRzX25vc2NhbGVfcmZfc2VsZWN0ZWRfZmVhdHVyZXNfMTAwXzIwMDAwX2FsbF9saW5lcy5jc3YiCiNyZWFkcjo6d3JpdGVfY3N2KFJFU1VMVFMscGF0aCA9IGZpbGVuYW1lKQphMTwtcmVhZHI6OnJlYWRfY3N2KGZpbGVuYW1lKSAlPiUgZmlsdGVyKCFpcy5uYShwZWFyc29uKSkgCmExCgpyZWFkcjo6cmVhZF9jc3YoZmlsZW5hbWUpICU+JSBmaWx0ZXIoIWlzLm5hKHBlYXJzb24pKSAlPiUgIHN1bW1hcmlzZShwZWFyc29uX21lYW49bWVhbihwZWFyc29uKSxzcGVhcm1hbl9tZWFuPW1lYW4oc3BlYXJtYW4pKQpyZWFkcjo6cmVhZF9jc3YoZmlsZW5hbWUpICU+JSBmaWx0ZXIoIWlzLm5hKHBlYXJzb24pKSAgJT4lIGZpbHRlciggZGF0YXNldHMgJWluJSBjKCJEUzQ0NjM5NSIsIkRTNTAwIiwiQ0lBUzQiLCJDSVZBMyIpKSAlPiUgIHN1bW1hcmlzZShwZWFyc29uX21lYW49bWVhbihwZWFyc29uKSxzcGVhcm1hbl9tZWFuPW1lYW4oc3BlYXJtYW4pKQpgYGAKCgoKIyBSZXN1bHRzIGZvciBnbG1uZXQgMTUwIGZlYXR1cmVzIG92ZXIgMjAwMDAgKFJGMikKYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0KZmlsZW5hbWU8LSIuL2RldmNvbl9jaGFsbGVuZ2UuZ2xtbmV0X3Jlc3VsdHNfbm9zY2FsZV9yZl9zZWxlY3RlZF9mZWF0dXJlc18xNTBfMjAwMDBfYWxsX2xpbmVzLmNzdiIKI3JlYWRyOjp3cml0ZV9jc3YoUkVTVUxUUyxwYXRoID0gZmlsZW5hbWUpCmEyPC1yZWFkcjo6cmVhZF9jc3YoZmlsZW5hbWUpICU+JSBmaWx0ZXIoIWlzLm5hKHBlYXJzb24pKSAKYTIKcmVhZHI6OnJlYWRfY3N2KGZpbGVuYW1lKSAlPiUgZmlsdGVyKCFpcy5uYShwZWFyc29uKSkgJT4lICBzdW1tYXJpc2UocGVhcnNvbl9tZWFuPW1lYW4ocGVhcnNvbiksc3BlYXJtYW5fbWVhbj1tZWFuKHNwZWFybWFuKSkKcmVhZHI6OnJlYWRfY3N2KGZpbGVuYW1lKSAlPiUgZmlsdGVyKCFpcy5uYShwZWFyc29uKSkgICU+JSBmaWx0ZXIoIGRhdGFzZXRzICVpbiUgYygiRFM0NDYzOTUiLCJEUzUwMCIsIkNJQVM0IiwiQ0lWQTMiKSkgJT4lICBzdW1tYXJpc2UocGVhcnNvbl9tZWFuPW1lYW4ocGVhcnNvbiksc3BlYXJtYW5fbWVhbj1tZWFuKHNwZWFybWFuKSkKYGBgCgoKIyBSZXN1bHRzIGZvciBnbG1uZXQgMjAwIGZlYXR1cmVzIG92ZXIgMjAwMDAgKFJGMikKYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0KZmlsZW5hbWU8LSIuL2RldmNvbl9jaGFsbGVuZ2UuZ2xtbmV0X3Jlc3VsdHNfbm9zY2FsZV9yZl9zZWxlY3RlZF9mZWF0dXJlc18yMDBfMjAwMDBfYWxsX2xpbmVzLmNzdiIKI3JlYWRyOjp3cml0ZV9jc3YoUkVTVUxUUyxwYXRoID0gZmlsZW5hbWUpCmEzPC1yZWFkcjo6cmVhZF9jc3YoZmlsZW5hbWUpICU+JSBmaWx0ZXIoIWlzLm5hKHBlYXJzb24pKSAKYTMKcmVhZHI6OnJlYWRfY3N2KGZpbGVuYW1lKSAlPiUgZmlsdGVyKCFpcy5uYShwZWFyc29uKSkgJT4lICBzdW1tYXJpc2UocGVhcnNvbl9tZWFuPW1lYW4ocGVhcnNvbiksc3BlYXJtYW5fbWVhbj1tZWFuKHNwZWFybWFuKSkKcmVhZHI6OnJlYWRfY3N2KGZpbGVuYW1lKSAlPiUgZmlsdGVyKCFpcy5uYShwZWFyc29uKSkgICU+JSBmaWx0ZXIoIGRhdGFzZXRzICVpbiUgYygiRFM0NDYzOTUiLCJEUzUwMCIsIkNJQVM0IiwiQ0lWQTMiKSkgJT4lICBzdW1tYXJpc2UocGVhcnNvbl9tZWFuPW1lYW4ocGVhcnNvbiksc3BlYXJtYW5fbWVhbj1tZWFuKHNwZWFybWFuKSkKYGBgCgoKIyBSZXN1bHRzIGZvciBnbG1uZXQgMjUwIGZlYXR1cmVzIG92ZXIgMjAwMDAgKFJGMikKYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0KZmlsZW5hbWU8LSIuL2RldmNvbl9jaGFsbGVuZ2UuZ2xtbmV0X3Jlc3VsdHNfbm9zY2FsZV9yZl9zZWxlY3RlZF9mZWF0dXJlc18yNTBfMjAwMDBfYWxsX2xpbmVzLmNzdiIKI3JlYWRyOjp3cml0ZV9jc3YoUkVTVUxUUyxwYXRoID0gZmlsZW5hbWUpCmE0PC1yZWFkcjo6cmVhZF9jc3YoZmlsZW5hbWUpICU+JSBmaWx0ZXIoIWlzLm5hKHBlYXJzb24pKSAKYTQKcmVhZHI6OnJlYWRfY3N2KGZpbGVuYW1lKSAlPiUgZmlsdGVyKCFpcy5uYShwZWFyc29uKSkgJT4lICBzdW1tYXJpc2UocGVhcnNvbl9tZWFuPW1lYW4ocGVhcnNvbiksc3BlYXJtYW5fbWVhbj1tZWFuKHNwZWFybWFuKSkKcmVhZHI6OnJlYWRfY3N2KGZpbGVuYW1lKSAlPiUgZmlsdGVyKCFpcy5uYShwZWFyc29uKSkgICU+JSBmaWx0ZXIoIGRhdGFzZXRzICVpbiUgYygiRFM0NDYzOTUiLCJEUzUwMCIsIkNJQVM0IiwiQ0lWQTMiKSkgJT4lICBzdW1tYXJpc2UocGVhcnNvbl9tZWFuPW1lYW4ocGVhcnNvbiksc3BlYXJtYW5fbWVhbj1tZWFuKHNwZWFybWFuKSkKYGBgCgojIFJlc3VsdHMgZm9yIGdsbW5ldCAzNTAgZmVhdHVyZXMgb3ZlciAyMDAwMCAoUkYyKQpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQpmaWxlbmFtZTwtIi4vZGV2Y29uX2NoYWxsZW5nZS5nbG1uZXRfcmVzdWx0c19ub3NjYWxlX3JmX3NlbGVjdGVkX2ZlYXR1cmVzXzM1MF8yMDAwMF9hbGxfbGluZXMuY3N2IgpyZWFkcjo6d3JpdGVfY3N2KFJFU1VMVFMscGF0aCA9IGZpbGVuYW1lKQphNTwtcmVhZHI6OnJlYWRfY3N2KGZpbGVuYW1lKSAlPiUgZmlsdGVyKCFpcy5uYShwZWFyc29uKSkgCmE1CnJlYWRyOjpyZWFkX2NzdihmaWxlbmFtZSkgJT4lIGZpbHRlcighaXMubmEocGVhcnNvbikpICU+JSAgc3VtbWFyaXNlKHBlYXJzb25fbWVhbj1tZWFuKHBlYXJzb24pLHNwZWFybWFuX21lYW49bWVhbihzcGVhcm1hbikpCnJlYWRyOjpyZWFkX2NzdihmaWxlbmFtZSkgJT4lIGZpbHRlcighaXMubmEocGVhcnNvbikpICAlPiUgZmlsdGVyKCBkYXRhc2V0cyAlaW4lIGMoIkRTNDQ2Mzk1IiwiRFM1MDAiLCJDSUFTNCIsIkNJVkEzIikpICU+JSAgc3VtbWFyaXNlKHBlYXJzb25fbWVhbj1tZWFuKHBlYXJzb24pLHNwZWFybWFuX21lYW49bWVhbihzcGVhcm1hbikpCmBgYAoKCgojIFJlc3VsdHMgZm9yIGxpYmxpbmVhciA1MCBmZWF0dXJlcyBvdmVyIDIwMDAwIChSRjIpICgxMykKYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0KZmlsZW5hbWU8LSIuL2RldmNvbl9jaGFsbGVuZ2UubGlibGluZWFyMTNfcmVzdWx0c19ub3NjYWxlX3JmX3NlbGVjdGVkX2ZlYXR1cmVzXzUwXzIwMDAwX2FsbF9saW5lcy5jc3YiCiNyZWFkcjo6d3JpdGVfY3N2KFJFU1VMVFMscGF0aCA9IGZpbGVuYW1lKQpzMTwtcmVhZHI6OnJlYWRfY3N2KGZpbGVuYW1lKSAlPiUgZmlsdGVyKCFpcy5uYShwZWFyc29uKSkgCnMxCnJlYWRyOjpyZWFkX2NzdihmaWxlbmFtZSkgJT4lIGZpbHRlcighaXMubmEocGVhcnNvbikpICU+JSAgc3VtbWFyaXNlKHBlYXJzb25fbWVhbj1tZWFuKHBlYXJzb24pLHNwZWFybWFuX21lYW49bWVhbihzcGVhcm1hbikpCnJlYWRyOjpyZWFkX2NzdihmaWxlbmFtZSkgJT4lIGZpbHRlcighaXMubmEocGVhcnNvbikpICAlPiUgZmlsdGVyKCBkYXRhc2V0cyAlaW4lIGMoIkRTNDQ2Mzk1IiwiRFM1MDAiLCJDSUFTNCIsIkNJVkEzIikpICU+JSAgc3VtbWFyaXNlKHBlYXJzb25fbWVhbj1tZWFuKHBlYXJzb24pLHNwZWFybWFuX21lYW49bWVhbihzcGVhcm1hbikpCmBgYAoKIyBSZXN1bHRzIGZvciBsaWJsaW5lYXIgMTAwIGZlYXR1cmVzIG92ZXIgMjAwMDAgKFJGMikgKDEzKQpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQpmaWxlbmFtZTwtIi4vZGV2Y29uX2NoYWxsZW5nZS5saWJsaW5lYXIxM19yZXN1bHRzX25vc2NhbGVfcmZfc2VsZWN0ZWRfZmVhdHVyZXNfMTAwXzIwMDAwX2FsbF9saW5lcy5jc3YiCiNyZWFkcjo6d3JpdGVfY3N2KFJFU1VMVFMscGF0aCA9IGZpbGVuYW1lKQpzMjwtcmVhZHI6OnJlYWRfY3N2KGZpbGVuYW1lKSAlPiUgZmlsdGVyKCFpcy5uYShwZWFyc29uKSkgCnMyCnJlYWRyOjpyZWFkX2NzdihmaWxlbmFtZSkgJT4lIGZpbHRlcighaXMubmEocGVhcnNvbikpICU+JSAgc3VtbWFyaXNlKHBlYXJzb25fbWVhbj1tZWFuKHBlYXJzb24pLHNwZWFybWFuX21lYW49bWVhbihzcGVhcm1hbikpCnJlYWRyOjpyZWFkX2NzdihmaWxlbmFtZSkgJT4lIGZpbHRlcighaXMubmEocGVhcnNvbikpICAlPiUgZmlsdGVyKCBkYXRhc2V0cyAlaW4lIGMoIkRTNDQ2Mzk1IiwiRFM1MDAiLCJDSUFTNCIsIkNJVkEzIikpICU+JSAgc3VtbWFyaXNlKHBlYXJzb25fbWVhbj1tZWFuKHBlYXJzb24pLHNwZWFybWFuX21lYW49bWVhbihzcGVhcm1hbikpCmBgYAoKIyBSZXN1bHRzIGZvciBsaWJsaW5lYXIgMTUwIGZlYXR1cmVzIG92ZXIgMjAwMDAgKFJGMikgKDEzKQpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQpmaWxlbmFtZTwtIi4vZGV2Y29uX2NoYWxsZW5nZS5saWJsaW5lYXIxM19yZXN1bHRzX25vc2NhbGVfcmZfc2VsZWN0ZWRfZmVhdHVyZXNfMTUwXzIwMDAwX2FsbF9saW5lcy5jc3YiCiNyZWFkcjo6d3JpdGVfY3N2KFJFU1VMVFMscGF0aCA9IGZpbGVuYW1lKQpzMzwtcmVhZHI6OnJlYWRfY3N2KGZpbGVuYW1lKSAlPiUgZmlsdGVyKCFpcy5uYShwZWFyc29uKSkgCnMzCnJlYWRyOjpyZWFkX2NzdihmaWxlbmFtZSkgJT4lIGZpbHRlcighaXMubmEocGVhcnNvbikpICU+JSAgc3VtbWFyaXNlKHBlYXJzb25fbWVhbj1tZWFuKHBlYXJzb24pLHNwZWFybWFuX21lYW49bWVhbihzcGVhcm1hbikpCnJlYWRyOjpyZWFkX2NzdihmaWxlbmFtZSkgJT4lIGZpbHRlcighaXMubmEocGVhcnNvbikpICAlPiUgZmlsdGVyKCBkYXRhc2V0cyAlaW4lIGMoIkRTNDQ2Mzk1IiwiRFM1MDAiLCJDSUFTNCIsIkNJVkEzIikpICU+JSAgc3VtbWFyaXNlKHBlYXJzb25fbWVhbj1tZWFuKHBlYXJzb24pLHNwZWFybWFuX21lYW49bWVhbihzcGVhcm1hbikpCmBgYAoKIyBSZXN1bHRzIGZvciBsaWJsaW5lYXIgMjAwIGZlYXR1cmVzIG92ZXIgMjAwMDAgKFJGMikgKDEzKQpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQpmaWxlbmFtZTwtIi4vZGV2Y29uX2NoYWxsZW5nZS5saWJsaW5lYXIxM19yZXN1bHRzX25vc2NhbGVfcmZfc2VsZWN0ZWRfZmVhdHVyZXNfMjAwXzIwMDAwX2FsbF9saW5lcy5jc3YiCnJlYWRyOjp3cml0ZV9jc3YoUkVTVUxUUyxwYXRoID0gZmlsZW5hbWUpCnM0PC1yZWFkcjo6cmVhZF9jc3YoZmlsZW5hbWUpICU+JSBmaWx0ZXIoIWlzLm5hKHBlYXJzb24pKSAKczQKcmVhZHI6OnJlYWRfY3N2KGZpbGVuYW1lKSAlPiUgZmlsdGVyKCFpcy5uYShwZWFyc29uKSkgJT4lICBzdW1tYXJpc2UocGVhcnNvbl9tZWFuPW1lYW4ocGVhcnNvbiksc3BlYXJtYW5fbWVhbj1tZWFuKHNwZWFybWFuKSkKcmVhZHI6OnJlYWRfY3N2KGZpbGVuYW1lKSAlPiUgZmlsdGVyKCFpcy5uYShwZWFyc29uKSkgICU+JSBmaWx0ZXIoIGRhdGFzZXRzICVpbiUgYygiRFM0NDYzOTUiLCJEUzUwMCIsIkNJQVM0IiwiQ0lWQTMiKSkgJT4lICBzdW1tYXJpc2UocGVhcnNvbl9tZWFuPW1lYW4ocGVhcnNvbiksc3BlYXJtYW5fbWVhbj1tZWFuKHNwZWFybWFuKSkKYGBgCgojIFJlc3VsdHMgZm9yIGxpYmxpbmVhciAyNTAgZmVhdHVyZXMgb3ZlciAyMDAwMCAoUkYyKSAoMTMpCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CmZpbGVuYW1lPC0iLi9kZXZjb25fY2hhbGxlbmdlLmxpYmxpbmVhcjEzX3Jlc3VsdHNfbm9zY2FsZV9yZl9zZWxlY3RlZF9mZWF0dXJlc18yNTBfMjAwMDBfYWxsX2xpbmVzLmNzdiIKI3JlYWRyOjp3cml0ZV9jc3YoUkVTVUxUUyxwYXRoID0gZmlsZW5hbWUpCnM1PC1yZWFkcjo6cmVhZF9jc3YoZmlsZW5hbWUpICU+JSBmaWx0ZXIoIWlzLm5hKHBlYXJzb24pKSAKczUKcmVhZHI6OnJlYWRfY3N2KGZpbGVuYW1lKSAlPiUgZmlsdGVyKCFpcy5uYShwZWFyc29uKSkgJT4lICBzdW1tYXJpc2UocGVhcnNvbl9tZWFuPW1lYW4ocGVhcnNvbiksc3BlYXJtYW5fbWVhbj1tZWFuKHNwZWFybWFuKSkKcmVhZHI6OnJlYWRfY3N2KGZpbGVuYW1lKSAlPiUgZmlsdGVyKCFpcy5uYShwZWFyc29uKSkgICU+JSBmaWx0ZXIoIGRhdGFzZXRzICVpbiUgYygiRFM0NDYzOTUiLCJEUzUwMCIsIkNJQVM0IiwiQ0lWQTMiKSkgJT4lICBzdW1tYXJpc2UocGVhcnNvbl9tZWFuPW1lYW4ocGVhcnNvbiksc3BlYXJtYW5fbWVhbj1tZWFuKHNwZWFybWFuKSkKYGBgCgojIFJlc3VsdHMgZm9yIGxpYmxpbmVhciAzNTAgZmVhdHVyZXMgb3ZlciAyMDAwMCAoUkYyKSAoMTMpCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CmZpbGVuYW1lPC0iLi9kZXZjb25fY2hhbGxlbmdlLmxpYmxpbmVhcjEzX3Jlc3VsdHNfbm9zY2FsZV9yZl9zZWxlY3RlZF9mZWF0dXJlc18zNTBfMjAwMDBfYWxsX2xpbmVzLmNzdiIKI3JlYWRyOjp3cml0ZV9jc3YoUkVTVUxUUyxwYXRoID0gZmlsZW5hbWUpCnM2PC1yZWFkcjo6cmVhZF9jc3YoZmlsZW5hbWUpICU+JSBmaWx0ZXIoIWlzLm5hKHBlYXJzb24pKSAKczYKcmVhZHI6OnJlYWRfY3N2KGZpbGVuYW1lKSAlPiUgZmlsdGVyKCFpcy5uYShwZWFyc29uKSkgJT4lICBzdW1tYXJpc2UocGVhcnNvbl9tZWFuPW1lYW4ocGVhcnNvbiksc3BlYXJtYW5fbWVhbj1tZWFuKHNwZWFybWFuKSkKcmVhZHI6OnJlYWRfY3N2KGZpbGVuYW1lKSAlPiUgZmlsdGVyKCFpcy5uYShwZWFyc29uKSkgICU+JSBmaWx0ZXIoIGRhdGFzZXRzICVpbiUgYygiRFM0NDYzOTUiLCJEUzUwMCIsIkNJQVM0IiwiQ0lWQTMiKSkgJT4lICBzdW1tYXJpc2UocGVhcnNvbl9tZWFuPW1lYW4ocGVhcnNvbiksc3BlYXJtYW5fbWVhbj1tZWFuKHNwZWFybWFuKSkKYGBgCgoKIyBSZXN1bHRzIGZvciBzdnIgcmFkaWFsIDUwIGZlYXR1cmVzIG92ZXIgMjAwMDAgKFJGMikgCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CmZpbGVuYW1lPC0iLi9kZXZjb25fY2hhbGxlbmdlLnN2cl9yZXN1bHRzX25vc2NhbGVfcmZfc2VsZWN0ZWRfZmVhdHVyZXNfNTBfMjAwMDBfYWxsX2xpbmVzLmNzdiIKI3JlYWRyOjp3cml0ZV9jc3YoUkVTVUxUUyxwYXRoID0gZmlsZW5hbWUpCnIxPC1yZWFkcjo6cmVhZF9jc3YoZmlsZW5hbWUpICU+JSBmaWx0ZXIoIWlzLm5hKHBlYXJzb24pKSAKcjEKcmVhZHI6OnJlYWRfY3N2KGZpbGVuYW1lKSAlPiUgZmlsdGVyKCFpcy5uYShwZWFyc29uKSkgJT4lICBzdW1tYXJpc2UocGVhcnNvbl9tZWFuPW1lYW4ocGVhcnNvbiksc3BlYXJtYW5fbWVhbj1tZWFuKHNwZWFybWFuKSkKcmVhZHI6OnJlYWRfY3N2KGZpbGVuYW1lKSAlPiUgZmlsdGVyKCFpcy5uYShwZWFyc29uKSkgICU+JSBmaWx0ZXIoIGRhdGFzZXRzICVpbiUgYygiRFM0NDYzOTUiLCJEUzUwMCIsIkNJQVM0IiwiQ0lWQTMiKSkgJT4lICBzdW1tYXJpc2UocGVhcnNvbl9tZWFuPW1lYW4ocGVhcnNvbiksc3BlYXJtYW5fbWVhbj1tZWFuKHNwZWFybWFuKSkKYGBgCgojIFJlc3VsdHMgZm9yIHN2ciByYWRpYWwgMTAwIGZlYXR1cmVzIG92ZXIgMjAwMDAgKFJGMikgCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CmZpbGVuYW1lPC0iLi9kZXZjb25fY2hhbGxlbmdlLnN2cl9yZXN1bHRzX25vc2NhbGVfcmZfc2VsZWN0ZWRfZmVhdHVyZXNfMTAwXzIwMDAwX2FsbF9saW5lcy5jc3YiCiNyZWFkcjo6d3JpdGVfY3N2KFJFU1VMVFMscGF0aCA9IGZpbGVuYW1lKQpyMjwtcmVhZHI6OnJlYWRfY3N2KGZpbGVuYW1lKSAlPiUgZmlsdGVyKCFpcy5uYShwZWFyc29uKSkgCnIyCnJlYWRyOjpyZWFkX2NzdihmaWxlbmFtZSkgJT4lIGZpbHRlcighaXMubmEocGVhcnNvbikpICU+JSAgc3VtbWFyaXNlKHBlYXJzb25fbWVhbj1tZWFuKHBlYXJzb24pLHNwZWFybWFuX21lYW49bWVhbihzcGVhcm1hbikpCnJlYWRyOjpyZWFkX2NzdihmaWxlbmFtZSkgJT4lIGZpbHRlcighaXMubmEocGVhcnNvbikpICAlPiUgZmlsdGVyKCBkYXRhc2V0cyAlaW4lIGMoIkRTNDQ2Mzk1IiwiRFM1MDAiLCJDSUFTNCIsIkNJVkEzIikpICU+JSAgc3VtbWFyaXNlKHBlYXJzb25fbWVhbj1tZWFuKHBlYXJzb24pLHNwZWFybWFuX21lYW49bWVhbihzcGVhcm1hbikpCmBgYAoKCgojIFJlc3VsdHMgZm9yIHN2ciByYWRpYWwgMTUwIGZlYXR1cmVzIG92ZXIgMjAwMDAgKFJGMikgCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CmZpbGVuYW1lPC0iLi9kZXZjb25fY2hhbGxlbmdlLnN2cl9yZXN1bHRzX25vc2NhbGVfcmZfc2VsZWN0ZWRfZmVhdHVyZXNfMTUwXzIwMDAwX2FsbF9saW5lcy5jc3YiCiNyZWFkcjo6d3JpdGVfY3N2KFJFU1VMVFMscGF0aCA9IGZpbGVuYW1lKQpyMzwtcmVhZHI6OnJlYWRfY3N2KGZpbGVuYW1lKSAlPiUgZmlsdGVyKCFpcy5uYShwZWFyc29uKSkgCnIzCnJlYWRyOjpyZWFkX2NzdihmaWxlbmFtZSkgJT4lIGZpbHRlcighaXMubmEocGVhcnNvbikpICU+JSAgc3VtbWFyaXNlKHBlYXJzb25fbWVhbj1tZWFuKHBlYXJzb24pLHNwZWFybWFuX21lYW49bWVhbihzcGVhcm1hbikpCnJlYWRyOjpyZWFkX2NzdihmaWxlbmFtZSkgJT4lIGZpbHRlcighaXMubmEocGVhcnNvbikpICAlPiUgZmlsdGVyKCBkYXRhc2V0cyAlaW4lIGMoIkRTNDQ2Mzk1IiwiRFM1MDAiLCJDSUFTNCIsIkNJVkEzIikpICU+JSAgc3VtbWFyaXNlKHBlYXJzb25fbWVhbj1tZWFuKHBlYXJzb24pLHNwZWFybWFuX21lYW49bWVhbihzcGVhcm1hbikpCmBgYAoKCgojIFJlc3VsdHMgZm9yIHN2ciByYWRpYWwgMjAwIGZlYXR1cmVzIG92ZXIgMjAwMDAgKFJGMikgCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CmZpbGVuYW1lPC0iLi9kZXZjb25fY2hhbGxlbmdlLnN2cl9yZXN1bHRzX25vc2NhbGVfcmZfc2VsZWN0ZWRfZmVhdHVyZXNfMjAwXzIwMDAwX2FsbF9saW5lcy5jc3YiCiNyZWFkcjo6d3JpdGVfY3N2KFJFU1VMVFMscGF0aCA9IGZpbGVuYW1lKQpyNDwtcmVhZHI6OnJlYWRfY3N2KGZpbGVuYW1lKSAlPiUgZmlsdGVyKCFpcy5uYShwZWFyc29uKSkgCnI0CnJlYWRyOjpyZWFkX2NzdihmaWxlbmFtZSkgJT4lIGZpbHRlcighaXMubmEocGVhcnNvbikpICU+JSAgc3VtbWFyaXNlKHBlYXJzb25fbWVhbj1tZWFuKHBlYXJzb24pLHNwZWFybWFuX21lYW49bWVhbihzcGVhcm1hbikpCnJlYWRyOjpyZWFkX2NzdihmaWxlbmFtZSkgJT4lIGZpbHRlcighaXMubmEocGVhcnNvbikpICAlPiUgZmlsdGVyKCBkYXRhc2V0cyAlaW4lIGMoIkRTNDQ2Mzk1IiwiRFM1MDAiLCJDSUFTNCIsIkNJVkEzIikpICU+JSAgc3VtbWFyaXNlKHBlYXJzb25fbWVhbj1tZWFuKHBlYXJzb24pLHNwZWFybWFuX21lYW49bWVhbihzcGVhcm1hbikpCmBgYAoKCgojIFJlc3VsdHMgZm9yIHN2ciByYWRpYWwgMjUwIGZlYXR1cmVzIG92ZXIgMjAwMDAgKFJGMikgCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CmZpbGVuYW1lPC0iLi9kZXZjb25fY2hhbGxlbmdlLnN2cl9yZXN1bHRzX25vc2NhbGVfcmZfc2VsZWN0ZWRfZmVhdHVyZXNfMjUwXzIwMDAwX2FsbF9saW5lcy5jc3YiCiNyZWFkcjo6d3JpdGVfY3N2KFJFU1VMVFMscGF0aCA9IGZpbGVuYW1lKQpyNTwtcmVhZHI6OnJlYWRfY3N2KGZpbGVuYW1lKSAlPiUgZmlsdGVyKCFpcy5uYShwZWFyc29uKSkgCnI1CnJlYWRyOjpyZWFkX2NzdihmaWxlbmFtZSkgJT4lIGZpbHRlcighaXMubmEocGVhcnNvbikpICU+JSAgc3VtbWFyaXNlKHBlYXJzb25fbWVhbj1tZWFuKHBlYXJzb24pLHNwZWFybWFuX21lYW49bWVhbihzcGVhcm1hbikpCnJlYWRyOjpyZWFkX2NzdihmaWxlbmFtZSkgJT4lIGZpbHRlcighaXMubmEocGVhcnNvbikpICAlPiUgZmlsdGVyKCBkYXRhc2V0cyAlaW4lIGMoIkRTNDQ2Mzk1IiwiRFM1MDAiLCJDSUFTNCIsIkNJVkEzIikpICU+JSAgc3VtbWFyaXNlKHBlYXJzb25fbWVhbj1tZWFuKHBlYXJzb24pLHNwZWFybWFuX21lYW49bWVhbihzcGVhcm1hbikpCmBgYAoKIyBSZXN1bHRzIGZvciBzdnIgcmFkaWFsIDM1MCBmZWF0dXJlcyBvdmVyIDIwMDAwIChSRjIpIApgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQpmaWxlbmFtZTwtIi4vZGV2Y29uX2NoYWxsZW5nZS5zdnJfcmVzdWx0c19ub3NjYWxlX3JmX3NlbGVjdGVkX2ZlYXR1cmVzXzM1MF8yMDAwMF9hbGxfbGluZXMuY3N2IgojcmVhZHI6OndyaXRlX2NzdihSRVNVTFRTLHBhdGggPSBmaWxlbmFtZSkKcjY8LXJlYWRyOjpyZWFkX2NzdihmaWxlbmFtZSkgJT4lIGZpbHRlcighaXMubmEocGVhcnNvbikpIApyNgpyZWFkcjo6cmVhZF9jc3YoZmlsZW5hbWUpICU+JSBmaWx0ZXIoIWlzLm5hKHBlYXJzb24pKSAlPiUgIHN1bW1hcmlzZShwZWFyc29uX21lYW49bWVhbihwZWFyc29uKSxzcGVhcm1hbl9tZWFuPW1lYW4oc3BlYXJtYW4pKQpyZWFkcjo6cmVhZF9jc3YoZmlsZW5hbWUpICU+JSBmaWx0ZXIoIWlzLm5hKHBlYXJzb24pKSAgJT4lIGZpbHRlciggZGF0YXNldHMgJWluJSBjKCJEUzQ0NjM5NSIsIkRTNTAwIiwiQ0lBUzQiLCJDSVZBMyIpKSAlPiUgIHN1bW1hcmlzZShwZWFyc29uX21lYW49bWVhbihwZWFyc29uKSxzcGVhcm1hbl9tZWFuPW1lYW4oc3BlYXJtYW4pKQpgYGAKCiMgUmVzdWx0cyBmb3Igc3ZyIHJhZGlhbCBub3NjYWxlIDUwIGZlYXR1cmVzIG92ZXIgMjAwMDAgKFJGMikgCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CmZpbGVuYW1lPC0iLi9kZXZjb25fY2hhbGxlbmdlLnN2cl9yZXN1bHRzX3JmX3NlbGVjdGVkX2ZlYXR1cmVzXzUwXzIwMDAwX25vc2NhbGVfYWxsX2xpbmVzLmNzdiIKcmVhZHI6OndyaXRlX2NzdihSRVNVTFRTLHBhdGggPSBmaWxlbmFtZSkKeDE8LXJlYWRyOjpyZWFkX2NzdihmaWxlbmFtZSkgJT4lIGZpbHRlcighaXMubmEocGVhcnNvbikpIAp4MQpyZWFkcjo6cmVhZF9jc3YoZmlsZW5hbWUpICU+JSBmaWx0ZXIoIWlzLm5hKHBlYXJzb24pKSAlPiUgIHN1bW1hcmlzZShwZWFyc29uX21lYW49bWVhbihwZWFyc29uKSxzcGVhcm1hbl9tZWFuPW1lYW4oc3BlYXJtYW4pKQpyZWFkcjo6cmVhZF9jc3YoZmlsZW5hbWUpICU+JSBmaWx0ZXIoIWlzLm5hKHBlYXJzb24pKSAgJT4lIGZpbHRlciggZGF0YXNldHMgJWluJSBjKCJEUzQ0NjM5NSIsIkRTNTAwIiwiQ0lBUzQiLCJDSVZBMyIpKSAlPiUgIHN1bW1hcmlzZShwZWFyc29uX21lYW49bWVhbihwZWFyc29uKSxzcGVhcm1hbl9tZWFuPW1lYW4oc3BlYXJtYW4pKQpgYGAKCgojIFJlc3VsdHMgZm9yIHN2ciByYWRpYWwgbm9zY2FsZSAxMDAgZmVhdHVyZXMgb3ZlciAyMDAwMCAoUkYyKSAKYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0KZmlsZW5hbWU8LSIuL2RldmNvbl9jaGFsbGVuZ2Uuc3ZyX3Jlc3VsdHNfcmZfc2VsZWN0ZWRfZmVhdHVyZXNfMTAwXzIwMDAwX25vc2NhbGVfYWxsX2xpbmVzLmNzdiIKI3JlYWRyOjp3cml0ZV9jc3YoUkVTVUxUUyxwYXRoID0gZmlsZW5hbWUpCngyPC1yZWFkcjo6cmVhZF9jc3YoZmlsZW5hbWUpICU+JSBmaWx0ZXIoIWlzLm5hKHBlYXJzb24pKSAKeDIKcmVhZHI6OnJlYWRfY3N2KGZpbGVuYW1lKSAlPiUgZmlsdGVyKCFpcy5uYShwZWFyc29uKSkgJT4lICBzdW1tYXJpc2UocGVhcnNvbl9tZWFuPW1lYW4ocGVhcnNvbiksc3BlYXJtYW5fbWVhbj1tZWFuKHNwZWFybWFuKSkKcmVhZHI6OnJlYWRfY3N2KGZpbGVuYW1lKSAlPiUgZmlsdGVyKCFpcy5uYShwZWFyc29uKSkgICU+JSBmaWx0ZXIoIGRhdGFzZXRzICVpbiUgYygiRFM0NDYzOTUiLCJEUzUwMCIsIkNJQVM0IiwiQ0lWQTMiKSkgJT4lICBzdW1tYXJpc2UocGVhcnNvbl9tZWFuPW1lYW4ocGVhcnNvbiksc3BlYXJtYW5fbWVhbj1tZWFuKHNwZWFybWFuKSkKYGBgCgojIFJlc3VsdHMgZm9yIHN2ciByYWRpYWwgbm9zY2FsZSAxNTAgZmVhdHVyZXMgb3ZlciAyMDAwMCAoUkYyKSAKYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0KZmlsZW5hbWU8LSIuL2RldmNvbl9jaGFsbGVuZ2Uuc3ZyX3Jlc3VsdHNfcmZfc2VsZWN0ZWRfZmVhdHVyZXNfMTUwXzIwMDAwX25vc2NhbGVfYWxsX2xpbmVzLmNzdiIKI3JlYWRyOjp3cml0ZV9jc3YoUkVTVUxUUyxwYXRoID0gZmlsZW5hbWUpCngzPC1yZWFkcjo6cmVhZF9jc3YoZmlsZW5hbWUpICU+JSBmaWx0ZXIoIWlzLm5hKHBlYXJzb24pKSAKeDMKcmVhZHI6OnJlYWRfY3N2KGZpbGVuYW1lKSAlPiUgZmlsdGVyKCFpcy5uYShwZWFyc29uKSkgJT4lICBzdW1tYXJpc2UocGVhcnNvbl9tZWFuPW1lYW4ocGVhcnNvbiksc3BlYXJtYW5fbWVhbj1tZWFuKHNwZWFybWFuKSkKcmVhZHI6OnJlYWRfY3N2KGZpbGVuYW1lKSAlPiUgZmlsdGVyKCFpcy5uYShwZWFyc29uKSkgICU+JSBmaWx0ZXIoIGRhdGFzZXRzICVpbiUgYygiRFM0NDYzOTUiLCJEUzUwMCIsIkNJQVM0IiwiQ0lWQTMiKSkgJT4lICBzdW1tYXJpc2UocGVhcnNvbl9tZWFuPW1lYW4ocGVhcnNvbiksc3BlYXJtYW5fbWVhbj1tZWFuKHNwZWFybWFuKSkKYGBgCgojIFJlc3VsdHMgZm9yIHN2ciByYWRpYWwgbm9zY2FsZSAyMDAgZmVhdHVyZXMgb3ZlciAyMDAwMCAoUkYyKSAKYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0KZmlsZW5hbWU8LSIuL2RldmNvbl9jaGFsbGVuZ2Uuc3ZyX3Jlc3VsdHNfcmZfc2VsZWN0ZWRfZmVhdHVyZXNfMjAwXzIwMDAwX25vc2NhbGVfYWxsX2xpbmVzLmNzdiIKI3JlYWRyOjp3cml0ZV9jc3YoUkVTVUxUUyxwYXRoID0gZmlsZW5hbWUpCng0PC1yZWFkcjo6cmVhZF9jc3YoZmlsZW5hbWUpICU+JSBmaWx0ZXIoIWlzLm5hKHBlYXJzb24pKSAKeDQKcmVhZHI6OnJlYWRfY3N2KGZpbGVuYW1lKSAlPiUgZmlsdGVyKCFpcy5uYShwZWFyc29uKSkgJT4lICBzdW1tYXJpc2UocGVhcnNvbl9tZWFuPW1lYW4ocGVhcnNvbiksc3BlYXJtYW5fbWVhbj1tZWFuKHNwZWFybWFuKSkKcmVhZHI6OnJlYWRfY3N2KGZpbGVuYW1lKSAlPiUgZmlsdGVyKCFpcy5uYShwZWFyc29uKSkgICU+JSBmaWx0ZXIoIGRhdGFzZXRzICVpbiUgYygiRFM0NDYzOTUiLCJEUzUwMCIsIkNJQVM0IiwiQ0lWQTMiKSkgJT4lICBzdW1tYXJpc2UocGVhcnNvbl9tZWFuPW1lYW4ocGVhcnNvbiksc3BlYXJtYW5fbWVhbj1tZWFuKHNwZWFybWFuKSkKYGBgCgoKCiMgUmVzdWx0cyBmb3Igc3ZyIHJhZGlhbCBub3NjYWxlIDI1MCBmZWF0dXJlcyBvdmVyIDIwMDAwIChSRjIpIApgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQpmaWxlbmFtZTwtIi4vZGV2Y29uX2NoYWxsZW5nZS5zdnJfcmVzdWx0c19yZl9zZWxlY3RlZF9mZWF0dXJlc18yNTBfMjAwMDBfbm9zY2FsZV9hbGxfbGluZXMuY3N2IgojcmVhZHI6OndyaXRlX2NzdihSRVNVTFRTLHBhdGggPSBmaWxlbmFtZSkKeDU8LXJlYWRyOjpyZWFkX2NzdihmaWxlbmFtZSkgJT4lIGZpbHRlcighaXMubmEocGVhcnNvbikpIAp4NQpyZWFkcjo6cmVhZF9jc3YoZmlsZW5hbWUpICU+JSBmaWx0ZXIoIWlzLm5hKHBlYXJzb24pKSAlPiUgIHN1bW1hcmlzZShwZWFyc29uX21lYW49bWVhbihwZWFyc29uKSxzcGVhcm1hbl9tZWFuPW1lYW4oc3BlYXJtYW4pKQpyZWFkcjo6cmVhZF9jc3YoZmlsZW5hbWUpICU+JSBmaWx0ZXIoIWlzLm5hKHBlYXJzb24pKSAgJT4lIGZpbHRlciggZGF0YXNldHMgJWluJSBjKCJEUzQ0NjM5NSIsIkRTNTAwIiwiQ0lBUzQiLCJDSVZBMyIpKSAlPiUgIHN1bW1hcmlzZShwZWFyc29uX21lYW49bWVhbihwZWFyc29uKSxzcGVhcm1hbl9tZWFuPW1lYW4oc3BlYXJtYW4pKQpgYGAKCgojIFJlc3VsdHMgZm9yIHN2ciByYWRpYWwgbm9zY2FsZSAzNTAgZmVhdHVyZXMgb3ZlciAyMDAwMCAoUkYyKSAKYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0KZmlsZW5hbWU8LSIuL2RldmNvbl9jaGFsbGVuZ2Uuc3ZyX3Jlc3VsdHNfcmZfc2VsZWN0ZWRfZmVhdHVyZXNfMzUwXzIwMDAwX25vc2NhbGVfYWxsX2xpbmVzLmNzdiIKI3JlYWRyOjp3cml0ZV9jc3YoUkVTVUxUUyxwYXRoID0gZmlsZW5hbWUpCng2PC1yZWFkcjo6cmVhZF9jc3YoZmlsZW5hbWUpICU+JSBmaWx0ZXIoIWlzLm5hKHBlYXJzb24pKSAKeDYKcmVhZHI6OnJlYWRfY3N2KGZpbGVuYW1lKSAlPiUgZmlsdGVyKCFpcy5uYShwZWFyc29uKSkgJT4lICBzdW1tYXJpc2UocGVhcnNvbl9tZWFuPW1lYW4ocGVhcnNvbiksc3BlYXJtYW5fbWVhbj1tZWFuKHNwZWFybWFuKSkKcmVhZHI6OnJlYWRfY3N2KGZpbGVuYW1lKSAlPiUgZmlsdGVyKCFpcy5uYShwZWFyc29uKSkgICU+JSBmaWx0ZXIoIGRhdGFzZXRzICVpbiUgYygiRFM0NDYzOTUiLCJEUzUwMCIsIkNJQVM0IiwiQ0lWQTMiKSkgJT4lICBzdW1tYXJpc2UocGVhcnNvbl9tZWFuPW1lYW4ocGVhcnNvbiksc3BlYXJtYW5fbWVhbj1tZWFuKHNwZWFybWFuKSkKYGBgCgojIEhlYXRtYXAgcmVzdWx0cyBwZXIgZGF0YXNldCAKCmBgYHtyIGZpZy5oZWlnaHQ9OCwgZmlnLndpZHRoPTh9CmxpYnJhcnkoZ3JpZEV4dHJhKQphMCR0eXBlPC0iZ2xtbmV0NTAiCmExJHR5cGU8LSJnbG1uZXQxMDAiCmEyJHR5cGU8LSJnbG1uZXQxNTAiCmEzJHR5cGU8LSJnbG1uZXQyMDAiCmE0JHR5cGU8LSJnbG1uZXQyNTAiCmE1JHR5cGU8LSJnbG1uZXQzNTAiCnMxJHR5cGU8LSJsaWJsaW5lYXI1MCIKczIkdHlwZTwtImxpYmxpbmVhcjEwMCIKczMkdHlwZTwtImxpYmxpbmVhcjE1MCIKczQkdHlwZTwtImxpYmxpbmVhcjIwMCIgCnM1JHR5cGU8LSJsaWJsaW5lYXIyNTAiIApzNiR0eXBlPC0ibGlibGluZWFyMzUwIgp4MSR0eXBlPC0ic3ZyNTAiCngyJHR5cGU8LSJzdnIxMDAiCngzJHR5cGU8LSJzdnIxNTAiCng0JHR5cGU8LSJzdnIyMDAiCng1JHR5cGU8LSJzdnIyNTAiCng2JHR5cGU8LSJzdnIzNTAiCgpoZWF0bWFwIDwtcmJpbmQoYTAsYTEsYTIsYTMsYTQsYTUsCiAgICAgICAgICAgICAgICBzMSxzMixzMyxzNCxzNSwKICAgICAgICAgICAgICAgIHgxLHgyLHgzLHg0LHg1LHg2KSAKCnBsb3QyPC0gaGVhdG1hcCAgJT4lIGdyb3VwX2J5KHR5cGUsZGF0YXNldHMpICU+JSBzdW1tYXJpc2UocGVhcnNvbj1tZWFuKHBlYXJzb24pKSAlPiUgYXJyYW5nZShwZWFyc29uKSAlPiUKICBnZ3Bsb3QoKSsKICBnZW9tX3RpbGUoYWVzKHg9dHlwZSx5PWRhdGFzZXRzLGZpbGw9cGVhcnNvbikpKwogIHNjYWxlX2ZpbGxfZ3JhZGllbnQobG93ID0gInJlZCIsIGhpZ2ggPSAid2hpdGUiLGxpbWl0cz1jKDAuNCwgMSksKSsKICB0aGVtZShheGlzLnRleHQueD1lbGVtZW50X3RleHQoYW5nbGU9NDUsaGp1c3Q9MSkpCiAgCiAgCnBsb3QxPC0gaGVhdG1hcCAlPiUgZ3JvdXBfYnkodHlwZSxkYXRhc2V0cykgJT4lIHN1bW1hcmlzZShzcGVhcm1hbj1tZWFuKHNwZWFybWFuKSkgJT4lIGFycmFuZ2Uoc3BlYXJtYW4pICU+JQogIGdncGxvdCgpKwogIGdlb21fdGlsZShhZXMoeD10eXBlLHk9ZGF0YXNldHMsZmlsbD1zcGVhcm1hbikpKwogIHNjYWxlX2ZpbGxfZ3JhZGllbnQobG93ID0gInJlZCIsIGhpZ2ggPSAid2hpdGUiLGxpbWl0cz1jKDAuNCwgMSksKSsKICB0aGVtZShheGlzLnRleHQueD1lbGVtZW50X3RleHQoYW5nbGU9NDUsaGp1c3Q9MSkpCgoKcGxvdDM8LSBoZWF0bWFwICU+JSBmaWx0ZXIoIGRhdGFzZXRzICVpbiUgYygiRFM0NDYzOTUiLCJEUzUwMCIsIkNJQVM0IiwiQ0lWQTMiKSkgJT4lIGdyb3VwX2J5KHR5cGUsZGF0YXNldHMpICU+JSBzdW1tYXJpc2UocGVhcnNvbj1tZWFuKHBlYXJzb24pKSAlPiUgYXJyYW5nZShwZWFyc29uKSAlPiUKICBnZ3Bsb3QoKSsKICBnZW9tX3RpbGUoYWVzKHg9dHlwZSx5PWRhdGFzZXRzLGZpbGw9cGVhcnNvbikpKwogIHNjYWxlX2ZpbGxfZ3JhZGllbnQobG93ID0gInJlZCIsIGhpZ2ggPSAid2hpdGUiLGxpbWl0cz1jKDAuNCwgMSksKSsKICB0aGVtZShheGlzLnRleHQueD1lbGVtZW50X3RleHQoYW5nbGU9NDUsaGp1c3Q9MSkpCiAgCiAgCnBsb3Q0PC1oZWF0bWFwICU+JSBmaWx0ZXIoIGRhdGFzZXRzICVpbiUgYygiRFM0NDYzOTUiLCJEUzUwMCIsIkNJQVM0IiwiQ0lWQTMiKSkgJT4lIGdyb3VwX2J5KHR5cGUsZGF0YXNldHMpICU+JSBzdW1tYXJpc2Uoc3BlYXJtYW49bWVhbihzcGVhcm1hbikpICU+JSBhcnJhbmdlKHNwZWFybWFuKSAlPiUKICBnZ3Bsb3QoKSsKICBnZW9tX3RpbGUoYWVzKHg9dHlwZSx5PWRhdGFzZXRzLGZpbGw9c3BlYXJtYW4pKSsKICBzY2FsZV9maWxsX2dyYWRpZW50KGxvdyA9ICJyZWQiLCBoaWdoID0gIndoaXRlIixsaW1pdHM9YygwLjQsIDEpLCkrCiAgdGhlbWUoYXhpcy50ZXh0Lng9ZWxlbWVudF90ZXh0KGFuZ2xlPTQ1LGhqdXN0PTEpKQoKZ3JpZEV4dHJhOjpncmlkLmFycmFuZ2UocGxvdDIscGxvdDEscGxvdDMscGxvdDQsbmNvbD0yKSAKYGBgCgoKIyBIZWF0bWFwIHBlciBkYXRhc2V0IChQZWFyc29uKQpgYGB7ciBmaWcud2lkdGg9NywgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0KI2xpYnJhcnkoZ2dwbG90aWZ5KQpwYXIobWZyb3c9YygyLDEpKQpoZWF0bWFwICU+JSBncm91cF9ieSh0eXBlLGRhdGFzZXRzKSAlPiUgc3VtbWFyaXNlKHBlYXJzb249bWVhbihwZWFyc29uKSkgJT4lIHJlc2hhcGUyOjphY2FzdCh0eXBlIH5kYXRhc2V0cykgJT4lIGFzLm1hdHJpeCgpICU+JSBkM2hlYXRtYXA6OmQzaGVhdG1hcChjb2xvcnMgPSAiQmx1ZXMiKQpgYGAKCiMgSGVhdG1hcCBwZXIgZGF0YXNldCAoU3BlYXJtYW4pCmBgYHtyIGZpZy53aWR0aD03LCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQpoZWF0bWFwICU+JSBncm91cF9ieSh0eXBlLGRhdGFzZXRzKSAlPiUgc3VtbWFyaXNlKHNwZWFybWFuPW1lYW4oc3BlYXJtYW4pKSAlPiUgcmVzaGFwZTI6OmFjYXN0KHR5cGUgfmRhdGFzZXRzKSAlPiUgYXMubWF0cml4KCkgJT4lIGQzaGVhdG1hcDo6ZDNoZWF0bWFwKGNvbG9ycyA9ICJSZWRzIikKYGBgCgo=