We select 776 genomes from a big data set containing thousands of them. We enforce that there must be one genome per group of organisms. We use different criteria: GC closest to the mean of the group, genome with the largest size in the group, genome with the lowest amount of contamination, most complete genome, genome closest to the parent node of the group. We also use two compound measures, that weigh each variable the same: one that includes all of them, and one that includes all of them except GC. Finally I compare the sampled genomes with each of those approaches to all genomes in the data set, and to a random sample of genomes.

setwd("~/Data/TransferRelated/datingWithTransfers/TOL_Dating_From_Literature/Bacteria")
d0 <- read.table("Data/bac_metadata_r86.tsv", h=T, sep="\t", fill=T, na.strings = c("none", "na", "NA"), colClasses = "character", quote="")
d = d0
d$gc_percentage <- as.numeric(d$gc_percentage)
d$genome_size <- as.numeric(d$genome_size)
d$checkm_completeness <- as.numeric(d$checkm_completeness)
d$checkm_contamination <- as.numeric(d$checkm_contamination)
# Some contamination values are above 100!
d[d$checkm_contamination > 100,]$checkm_contamination <- 100
d$genome_size <- as.numeric(d$genome_size)
summary(d)
  accession         scaffold_count       gc_count         longest_scaffold   gc_percentage   total_gap_length    genome_size       
 Length:125243      Length:125243      Length:125243      Length:125243      Min.   :15.39   Length:125243      Min.   :   263431  
 Class :character   Class :character   Class :character   Class :character   1st Qu.:38.70   Class :character   1st Qu.:  2367357  
 Mode  :character   Mode  :character   Mode  :character   Mode  :character   Median :50.10   Mode  :character   Median :  3972280  
                                                                             Mean   :48.33                      Mean   :  3861036  
                                                                             3rd Qu.:57.23                      3rd Qu.:  5015665  
                                                                             Max.   :76.64                      Max.   :153722611  
 n50_contigs        n50_scaffolds      l50_scaffolds      contig_count       ambiguous_bases    longest_contig    
 Length:125243      Length:125243      Length:125243      Length:125243      Length:125243      Length:125243     
 Class :character   Class :character   Class :character   Class :character   Class :character   Class :character  
 Mode  :character   Mode  :character   Mode  :character   Mode  :character   Mode  :character   Mode  :character  
                                                                                                                  
                                                                                                                  
                                                                                                                  
 l50_contigs        mean_scaffold_length mean_contig_length trna_aa_count      trna_selenocysteine_count  trna_count       
 Length:125243      Length:125243        Length:125243      Length:125243      Length:125243             Length:125243     
 Class :character   Class :character     Class :character   Class :character   Class :character          Class :character  
 Mode  :character   Mode  :character     Mode  :character   Mode  :character   Mode  :character          Mode  :character  
                                                                                                                           
                                                                                                                           
                                                                                                                           
 checkm_completeness checkm_contamination protein_count      coding_bases       coding_density      ssu_count        
 Min.   :  0.57      Min.   :  0.0000     Length:125243      Length:125243      Length:125243      Length:125243     
 1st Qu.: 99.06      1st Qu.:  0.0400     Class :character   Class :character   Class :character   Class :character  
 Median : 99.55      Median :  0.2500     Mode  :character   Mode  :character   Mode  :character   Mode  :character  
 Mean   : 96.94      Mean   :  0.8041                                                                                
 3rd Qu.: 99.94      3rd Qu.:  0.7200                                                                                
 Max.   :100.00      Max.   :100.0000                                                                                
 checkm_marker_count checkm_marker_lineage checkm_marker_set_count checkm_strain_heterogeneity lsu_5s_count       ncbi_taxonomy     
 Length:125243       Length:125243         Length:125243           Length:125243               Length:125243      Length:125243     
 Class :character    Class :character      Class :character        Class :character            Class :character   Class :character  
 Mode  :character    Mode  :character      Mode  :character        Mode  :character            Mode  :character   Mode  :character  
                                                                                                                                    
                                                                                                                                    
                                                                                                                                    
 gtdb_genome_representative gtdb_representative ncbi_taxonomy_unfiltered ncbi_type_material ncbi_biosample     ncbi_total_gap_length
 Length:125243              Length:125243       Length:125243            Length:125243      Length:125243      Length:125243        
 Class :character           Class :character    Class :character         Class :character   Class :character   Class :character     
 Mode  :character           Mode  :character    Mode  :character         Mode  :character   Mode  :character   Mode  :character     
                                                                                                                                    
                                                                                                                                    
                                                                                                                                    
 ncbi_molecule_count  ncbi_date         ncbi_submitter     ncbi_ncrna_count   ncbi_scaffold_n50  ncbi_assembly_name
 Length:125243       Length:125243      Length:125243      Length:125243      Length:125243      Length:125243     
 Class :character    Class :character   Class :character   Class :character   Class :character   Class :character  
 Mode  :character    Mode  :character   Mode  :character   Mode  :character   Mode  :character   Mode  :character  
                                                                                                                   
                                                                                                                   
                                                                                                                   
 ncbi_scaffold_n75  ncbi_protein_count ncbi_assembly_type ncbi_rrna_count    ncbi_genbank_assembly_accession ncbi_total_length 
 Length:125243      Length:125243      Length:125243      Length:125243      Length:125243                   Length:125243     
 Class :character   Class :character   Class :character   Class :character   Class :character                Class :character  
 Mode  :character   Mode  :character   Mode  :character   Mode  :character   Mode  :character                Mode  :character  
                                                                                                                               
                                                                                                                               
                                                                                                                               
 ncbi_unspanned_gaps  ncbi_taxid        ncbi_trna_count    ncbi_genome_representation ncbi_spanned_gaps  ncbi_translation_table
 Length:125243       Length:125243      Length:125243      Length:125243              Length:125243      Length:125243         
 Class :character    Class :character   Class :character   Class :character           Class :character   Class :character      
 Mode  :character    Mode  :character   Mode  :character   Mode  :character           Mode  :character   Mode  :character      
                                                                                                                               
                                                                                                                               
                                                                                                                               
 ncbi_scaffold_n90  ncbi_contig_count  ncbi_organism_name ncbi_contig_n50    ncbi_ungapped_length ncbi_scaffold_l50 
 Length:125243      Length:125243      Length:125243      Length:125243      Length:125243        Length:125243     
 Class :character   Class :character   Class :character   Class :character   Class :character     Class :character  
 Mode  :character   Mode  :character   Mode  :character   Mode  :character   Mode  :character     Mode  :character  
                                                                                                                    
                                                                                                                    
                                                                                                                    
 ncbi_ssu_count     ncbi_scaffold_count ncbi_assembly_level ncbi_refseq_category ncbi_species_taxid ncbi_isolate      
 Length:125243      Length:125243       Length:125243       Length:125243        Length:125243      Length:125243     
 Class :character   Class :character    Class :character    Class :character     Class :character   Class :character  
 Mode  :character   Mode  :character    Mode  :character    Mode  :character     Mode  :character   Mode  :character  
                                                                                                                      
                                                                                                                      
                                                                                                                      
 ncbi_wgs_master    ncbi_bioproject    ncbi_seq_rel_date  ncbi_isolation_source ncbi_country       ncbi_lat_lon      
 Length:125243      Length:125243      Length:125243      Length:125243         Length:125243      Length:125243     
 Class :character   Class :character   Class :character   Class :character      Class :character   Class :character  
 Mode  :character   Mode  :character   Mode  :character   Mode  :character      Mode  :character   Mode  :character  
                                                                                                                     
                                                                                                                     
                                                                                                                     
 ncbi_strain_identifiers ssu_gg_taxonomy    ssu_gg_blast_bitscore ssu_gg_blast_subject_id ssu_gg_blast_perc_identity
 Length:125243           Length:125243      Length:125243         Length:125243           Length:125243             
 Class :character        Class :character   Class :character      Class :character        Class :character          
 Mode  :character        Mode  :character   Mode  :character      Mode  :character        Mode  :character          
                                                                                                                    
                                                                                                                    
                                                                                                                    
 ssu_gg_blast_evalue ssu_gg_blast_align_len ssu_gg_query_id    ssu_gg_length      ssu_silva_blast_bitscore ssu_silva_taxonomy
 Length:125243       Length:125243          Length:125243      Length:125243      Length:125243            Length:125243     
 Class :character    Class :character       Class :character   Class :character   Class :character         Class :character  
 Mode  :character    Mode  :character       Mode  :character   Mode  :character   Mode  :character         Mode  :character  
                                                                                                                             
                                                                                                                             
                                                                                                                             
 ssu_silva_blast_subject_id ssu_silva_blast_align_len ssu_silva_blast_evalue ssu_silva_blast_perc_identity lsu_5s_query_id   
 Length:125243              Length:125243             Length:125243          Length:125243                 Length:125243     
 Class :character           Class :character          Class :character       Class :character              Class :character  
 Mode  :character           Mode  :character          Mode  :character       Mode  :character              Mode  :character  
                                                                                                                             
                                                                                                                             
                                                                                                                             
 lsu_5s_length      lsu_5s_contig_len  gtdb_taxonomy      mimag_high_quality gtdb_cluster_size  gtdb_clustered_genomes
 Length:125243      Length:125243      Length:125243      Length:125243      Length:125243      Length:125243         
 Class :character   Class :character   Class :character   Class :character   Class :character   Class :character      
 Mode  :character   Mode  :character   Mode  :character   Mode  :character   Mode  :character   Mode  :character      
                                                                                                                      
                                                                                                                      
                                                                                                                      
 gtdb_type_material
 Length:125243     
 Class :character  
 Mode  :character  
                   
                   
                   
samp <- read.table("Data/representant", h=F, colClasses = "character")$V1
summary(samp)
   Length     Class      Mode 
      776 character character 
subd <- d[which(d$accession%in%samp),]
sampRand <- read.table("Data/representantRandom", h=F, colClasses = "character")$V1
summary(sampRand)
   Length     Class      Mode 
     7760 character character 
subdRand <- d[which(d$accession%in%sampRand),]
sampGC <- read.table("Data/representantBestGC", h=F, colClasses = "character")$V1
summary(sampGC)
   Length     Class      Mode 
      776 character character 
subdGC <- d[which(d$accession%in%sampGC),]
sampContamination <- read.table("Data/representantBestContamination", h=F, colClasses = "character")$V1
summary(sampContamination)
   Length     Class      Mode 
      776 character character 
subdContamination <- d[which(d$accession%in%sampContamination),]
sampCompleteness <- read.table("Data/representantBestCompleteness", h=F, colClasses = "character")$V1
summary(sampCompleteness)
   Length     Class      Mode 
      776 character character 
subdCompleteness <- d[which(d$accession%in%sampCompleteness),]
sampDistance <- read.table("Data/representantBestDistance", h=F, colClasses = "character")$V1
summary(sampDistance)
   Length     Class      Mode 
      776 character character 
subdDistance <- d[which(d$accession%in%sampDistance),]
sampSize <- read.table("Data/representantBestSize", h=F, colClasses = "character")$V1
summary(sampSize)
   Length     Class      Mode 
      776 character character 
subdSize <- d[which(d$accession%in%sampSize),]
sampNoGC <- read.table("Data/representantNoGC", h=F, colClasses = "character")$V1
summary(sampNoGC)
   Length     Class      Mode 
      776 character character 
subdNoGC <- d[which(d$accession%in%sampNoGC),]
names = c("all", "selected", "selected without GC", "best GC", "best size", "best Contamination", "best Completeness", "best Distance", "Random 10")
colors = c("white", "red", "pink", "orange", "darkgreen", "blue", "purple", "grey", "brown")
par(pin=c(7.2,3))
par(mar = c(7, 4, 2, 2) + 0.2) #add room for the rotated labels
end_point = length(names)
boxplot(d$gc_percentage, subd$gc_percentage, subdNoGC$gc_percentage, subdGC$gc_percentage, subdSize$gc_percentage, subdContamination$gc_percentage, subdCompleteness$gc_percentage, subdDistance$gc_percentage, subdRand$gc_percentage, col=colors, main="GC content in all and sampled genomes", names=names, cex.axis=0.7, xaxt="n", space=1)
text(seq(1,end_point,by=1), par("usr")[3]-0.25, 
     srt = 60, adj= 1, xpd = TRUE,
     labels = names, cex=0.65)

#par(mfrow=c(1,2))
#plot(density(as.numeric(as.character(d$genome_size)), na.rm = T), lwd=2, xlim=c(0,10000000), ylim=c(0,0.000001), main="Genome size in all and sampled genomes")
#lines(density(as.numeric(as.character(subd$genome_size)), na.rm = T), lwd=2, col="red")
boxplot(d$genome_size, subd$genome_size, subdNoGC$genome_size, subdGC$genome_size, subdSize$genome_size, subdContamination$genome_size, subdCompleteness$genome_size, subdDistance$genome_size, subdRand$genome_size, log="y", col=colors, main="Genome size in all and sampled genomes", names=names, cex.axis=0.7, xaxt="n", space=1)
text(seq(1,end_point,by=1), par("usr")[3]-0.25, 
     srt = 60, adj= 1, xpd = TRUE,
     labels = names, cex=0.65)

#par(mfrow=c(1,2))
#plot(density(as.numeric(as.character(d$checkm_completeness)), na.rm = T), lwd=2, xlim=c(0,100), ylim=c(0,0.1), main="Completeness in all and sampled genomes")
#lines(density(as.numeric(as.character(subd$checkm_completeness)), na.rm = T), lwd=2, col="red")
boxplot(d$checkm_completeness, subd$checkm_completeness, subdNoGC$checkm_completeness, subdGC$checkm_completeness, subdSize$checkm_completeness, subdContamination$checkm_completeness, subdCompleteness$checkm_completeness, subdDistance$checkm_completeness, subdRand$checkm_completeness, col=colors, main="Completeness in all and sampled genomes", names=names, cex.axis=0.7, xaxt="n", space=1)
text(seq(1,end_point,by=1), par("usr")[3]-0.25, 
     srt = 60, adj= 1, xpd = TRUE,
     labels = names, cex=0.65)

boxplot(d$checkm_contamination, subd$checkm_contamination, subdNoGC$checkm_contamination, subdGC$checkm_contamination, subdSize$checkm_contamination, subdContamination$checkm_contamination, subdCompleteness$checkm_contamination, subdDistance$checkm_contamination, subdRand$checkm_contamination, ylim=c(0,20), col=colors, main="Contamination in all and sampled genomes", names=names, cex.axis=0.7, xaxt="n", space=1)
text(seq(1,end_point,by=1), par("usr")[3]-0.25, 
     srt = 60, adj= 1, xpd = TRUE,
     labels = names, cex=0.65)

Additional material

plot(density(as.numeric(as.character(d$gc_percentage)), na.rm = T), lwd=2, xlim=c(0,100), ylim=c(0,0.1), main="GC content in all and sampled genomes")
lines(density(as.numeric(as.character(subd$gc_percentage)), na.rm = T), lwd=2, col="red")
lines(density(as.numeric(as.character(subdGC$gc_percentage)), na.rm = T), lwd=2, col="orange")
lines(density(as.numeric(as.character(subdContamination$gc_percentage)), na.rm = T), lwd=2, col="darkgreen")
lines(density(as.numeric(as.character(subdCompleteness$gc_percentage)), na.rm = T), lwd=2, col="blue")
lines(density(as.numeric(as.character(subdDistance$gc_percentage)), na.rm = T), lwd=2, col="purple")
lines(density(as.numeric(as.character(subdRand$gc_percentage)), na.rm = T), lwd=2, col="grey")
legend(legend=names, col=c("black", "red", "orange", "darkgreen", "blue", "purple", "grey"), "topright", lwd=1)

hist(d$gc_percentage, nc=50, freq=FALSE, main="GC content in all and sampled genomes")
hist(subd$gc_percentage, nc=20, add=T, col=rgb(1,0,0,0.5), freq=FALSE)

par(mfrow=c(1,2))
plot(density(as.numeric(as.character(d$checkm_contamination)), na.rm = T), lwd=2, xlim=c(0,100), ylim=c(0,1), main="Contamination in all and sampled genomes")
lines(density(as.numeric(as.character(subd$checkm_contamination)), na.rm = T), lwd=2, col="red")
boxplot(d$checkm_contamination, subd$checkm_contamination, col=c("white", "red"), ylim=c(0,100))

LS0tCnRpdGxlOiAiQW5hbHlzaXMgb2Ygc2VsZWN0ZWQgZ2Vub21lcyIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKIyMjIFdlIHNlbGVjdCA3NzYgZ2Vub21lcyBmcm9tIGEgYmlnIGRhdGEgc2V0IGNvbnRhaW5pbmcgdGhvdXNhbmRzIG9mIHRoZW0uIFdlIGVuZm9yY2UgdGhhdCB0aGVyZSBtdXN0IGJlIG9uZSBnZW5vbWUgcGVyIGdyb3VwIG9mIG9yZ2FuaXNtcy4gV2UgdXNlIGRpZmZlcmVudCBjcml0ZXJpYTogR0MgY2xvc2VzdCB0byB0aGUgbWVhbiBvZiB0aGUgZ3JvdXAsIGdlbm9tZSB3aXRoIHRoZSBsYXJnZXN0IHNpemUgaW4gdGhlIGdyb3VwLCBnZW5vbWUgd2l0aCB0aGUgbG93ZXN0IGFtb3VudCBvZiBjb250YW1pbmF0aW9uLCBtb3N0IGNvbXBsZXRlIGdlbm9tZSwgZ2Vub21lIGNsb3Nlc3QgdG8gdGhlIHBhcmVudCBub2RlIG9mIHRoZSBncm91cC4gV2UgYWxzbyB1c2UgdHdvIGNvbXBvdW5kIG1lYXN1cmVzLCB0aGF0IHdlaWdoIGVhY2ggdmFyaWFibGUgdGhlIHNhbWU6IG9uZSB0aGF0IGluY2x1ZGVzIGFsbCBvZiB0aGVtLCBhbmQgb25lIHRoYXQgaW5jbHVkZXMgYWxsIG9mIHRoZW0gZXhjZXB0IEdDLiBGaW5hbGx5IEkgY29tcGFyZSB0aGUgc2FtcGxlZCBnZW5vbWVzIHdpdGggZWFjaCBvZiB0aG9zZSBhcHByb2FjaGVzIHRvIGFsbCBnZW5vbWVzIGluIHRoZSBkYXRhIHNldCwgYW5kIHRvIGEgcmFuZG9tIHNhbXBsZSBvZiBnZW5vbWVzLgoKYGBge3IsIGNhY2hlPVR9CnNldHdkKCJ+L0RhdGEvVHJhbnNmZXJSZWxhdGVkL2RhdGluZ1dpdGhUcmFuc2ZlcnMvVE9MX0RhdGluZ19Gcm9tX0xpdGVyYXR1cmUvQmFjdGVyaWEiKQpkMCA8LSByZWFkLnRhYmxlKCJEYXRhL2JhY19tZXRhZGF0YV9yODYudHN2IiwgaD1ULCBzZXA9Ilx0IiwgZmlsbD1ULCBuYS5zdHJpbmdzID0gYygibm9uZSIsICJuYSIsICJOQSIpLCBjb2xDbGFzc2VzID0gImNoYXJhY3RlciIsIHF1b3RlPSIiKQpgYGAKCgoKYGBge3IsIGNhY2hlPVR9CmQgPSBkMApkJGdjX3BlcmNlbnRhZ2UgPC0gYXMubnVtZXJpYyhkJGdjX3BlcmNlbnRhZ2UpCgpkJGdlbm9tZV9zaXplIDwtIGFzLm51bWVyaWMoZCRnZW5vbWVfc2l6ZSkKCmQkY2hlY2ttX2NvbXBsZXRlbmVzcyA8LSBhcy5udW1lcmljKGQkY2hlY2ttX2NvbXBsZXRlbmVzcykKCmQkY2hlY2ttX2NvbnRhbWluYXRpb24gPC0gYXMubnVtZXJpYyhkJGNoZWNrbV9jb250YW1pbmF0aW9uKQoKIyBTb21lIGNvbnRhbWluYXRpb24gdmFsdWVzIGFyZSBhYm92ZSAxMDAhCmRbZCRjaGVja21fY29udGFtaW5hdGlvbiA+IDEwMCxdJGNoZWNrbV9jb250YW1pbmF0aW9uIDwtIDEwMAoKCmQkZ2Vub21lX3NpemUgPC0gYXMubnVtZXJpYyhkJGdlbm9tZV9zaXplKQoKc3VtbWFyeShkKQpgYGAKCgpgYGB7cn0Kc2FtcCA8LSByZWFkLnRhYmxlKCJEYXRhL3JlcHJlc2VudGFudCIsIGg9RiwgY29sQ2xhc3NlcyA9ICJjaGFyYWN0ZXIiKSRWMQpzdW1tYXJ5KHNhbXApCnN1YmQgPC0gZFt3aGljaChkJGFjY2Vzc2lvbiVpbiVzYW1wKSxdCgpgYGAKCmBgYHtyfQpzYW1wUmFuZCA8LSByZWFkLnRhYmxlKCJEYXRhL3JlcHJlc2VudGFudFJhbmRvbSIsIGg9RiwgY29sQ2xhc3NlcyA9ICJjaGFyYWN0ZXIiKSRWMQpzdW1tYXJ5KHNhbXBSYW5kKQpzdWJkUmFuZCA8LSBkW3doaWNoKGQkYWNjZXNzaW9uJWluJXNhbXBSYW5kKSxdCgpgYGAKCgpgYGB7cn0Kc2FtcEdDIDwtIHJlYWQudGFibGUoIkRhdGEvcmVwcmVzZW50YW50QmVzdEdDIiwgaD1GLCBjb2xDbGFzc2VzID0gImNoYXJhY3RlciIpJFYxCnN1bW1hcnkoc2FtcEdDKQpzdWJkR0MgPC0gZFt3aGljaChkJGFjY2Vzc2lvbiVpbiVzYW1wR0MpLF0KYGBgCgoKYGBge3J9CnNhbXBDb250YW1pbmF0aW9uIDwtIHJlYWQudGFibGUoIkRhdGEvcmVwcmVzZW50YW50QmVzdENvbnRhbWluYXRpb24iLCBoPUYsIGNvbENsYXNzZXMgPSAiY2hhcmFjdGVyIikkVjEKc3VtbWFyeShzYW1wQ29udGFtaW5hdGlvbikKc3ViZENvbnRhbWluYXRpb24gPC0gZFt3aGljaChkJGFjY2Vzc2lvbiVpbiVzYW1wQ29udGFtaW5hdGlvbiksXQoKYGBgCgoKYGBge3J9CnNhbXBDb21wbGV0ZW5lc3MgPC0gcmVhZC50YWJsZSgiRGF0YS9yZXByZXNlbnRhbnRCZXN0Q29tcGxldGVuZXNzIiwgaD1GLCBjb2xDbGFzc2VzID0gImNoYXJhY3RlciIpJFYxCnN1bW1hcnkoc2FtcENvbXBsZXRlbmVzcykKc3ViZENvbXBsZXRlbmVzcyA8LSBkW3doaWNoKGQkYWNjZXNzaW9uJWluJXNhbXBDb21wbGV0ZW5lc3MpLF0KCmBgYAoKCmBgYHtyfQpzYW1wRGlzdGFuY2UgPC0gcmVhZC50YWJsZSgiRGF0YS9yZXByZXNlbnRhbnRCZXN0RGlzdGFuY2UiLCBoPUYsIGNvbENsYXNzZXMgPSAiY2hhcmFjdGVyIikkVjEKc3VtbWFyeShzYW1wRGlzdGFuY2UpCnN1YmREaXN0YW5jZSA8LSBkW3doaWNoKGQkYWNjZXNzaW9uJWluJXNhbXBEaXN0YW5jZSksXQoKYGBgCgpgYGB7cn0Kc2FtcFNpemUgPC0gcmVhZC50YWJsZSgiRGF0YS9yZXByZXNlbnRhbnRCZXN0U2l6ZSIsIGg9RiwgY29sQ2xhc3NlcyA9ICJjaGFyYWN0ZXIiKSRWMQpzdW1tYXJ5KHNhbXBTaXplKQpzdWJkU2l6ZSA8LSBkW3doaWNoKGQkYWNjZXNzaW9uJWluJXNhbXBTaXplKSxdCgpgYGAKCgpgYGB7cn0Kc2FtcE5vR0MgPC0gcmVhZC50YWJsZSgiRGF0YS9yZXByZXNlbnRhbnROb0dDIiwgaD1GLCBjb2xDbGFzc2VzID0gImNoYXJhY3RlciIpJFYxCnN1bW1hcnkoc2FtcE5vR0MpCnN1YmROb0dDIDwtIGRbd2hpY2goZCRhY2Nlc3Npb24laW4lc2FtcE5vR0MpLF0KCmBgYAoKCgpgYGB7cn0KbmFtZXMgPSBjKCJhbGwiLCAic2VsZWN0ZWQiLCAic2VsZWN0ZWQgd2l0aG91dCBHQyIsICJiZXN0IEdDIiwgImJlc3Qgc2l6ZSIsICJiZXN0IENvbnRhbWluYXRpb24iLCAiYmVzdCBDb21wbGV0ZW5lc3MiLCAiYmVzdCBEaXN0YW5jZSIsICJSYW5kb20gMTAiKQpjb2xvcnMgPSBjKCJ3aGl0ZSIsICJyZWQiLCAicGluayIsICJvcmFuZ2UiLCAiZGFya2dyZWVuIiwgImJsdWUiLCAicHVycGxlIiwgImdyZXkiLCAiYnJvd24iKQpwYXIocGluPWMoNy4yLDMpKQpwYXIobWFyID0gYyg3LCA0LCAyLCAyKSArIDAuMikgI2FkZCByb29tIGZvciB0aGUgcm90YXRlZCBsYWJlbHMKZW5kX3BvaW50ID0gbGVuZ3RoKG5hbWVzKQoKYGBgCgoKCgpgYGB7cn0KCmJveHBsb3QoZCRnY19wZXJjZW50YWdlLCBzdWJkJGdjX3BlcmNlbnRhZ2UsIHN1YmROb0dDJGdjX3BlcmNlbnRhZ2UsIHN1YmRHQyRnY19wZXJjZW50YWdlLCBzdWJkU2l6ZSRnY19wZXJjZW50YWdlLCBzdWJkQ29udGFtaW5hdGlvbiRnY19wZXJjZW50YWdlLCBzdWJkQ29tcGxldGVuZXNzJGdjX3BlcmNlbnRhZ2UsIHN1YmREaXN0YW5jZSRnY19wZXJjZW50YWdlLCBzdWJkUmFuZCRnY19wZXJjZW50YWdlLCBjb2w9Y29sb3JzLCBtYWluPSJHQyBjb250ZW50IGluIGFsbCBhbmQgc2FtcGxlZCBnZW5vbWVzIiwgbmFtZXM9bmFtZXMsIGNleC5heGlzPTAuNywgeGF4dD0ibiIsIHNwYWNlPTEpCnRleHQoc2VxKDEsZW5kX3BvaW50LGJ5PTEpLCBwYXIoInVzciIpWzNdLTAuMjUsIAogICAgIHNydCA9IDYwLCBhZGo9IDEsIHhwZCA9IFRSVUUsCiAgICAgbGFiZWxzID0gbmFtZXMsIGNleD0wLjY1KQpgYGAKCgpgYGB7cn0KI3BhcihtZnJvdz1jKDEsMikpCiNwbG90KGRlbnNpdHkoYXMubnVtZXJpYyhhcy5jaGFyYWN0ZXIoZCRnZW5vbWVfc2l6ZSkpLCBuYS5ybSA9IFQpLCBsd2Q9MiwgeGxpbT1jKDAsMTAwMDAwMDApLCB5bGltPWMoMCwwLjAwMDAwMSksIG1haW49Ikdlbm9tZSBzaXplIGluIGFsbCBhbmQgc2FtcGxlZCBnZW5vbWVzIikKI2xpbmVzKGRlbnNpdHkoYXMubnVtZXJpYyhhcy5jaGFyYWN0ZXIoc3ViZCRnZW5vbWVfc2l6ZSkpLCBuYS5ybSA9IFQpLCBsd2Q9MiwgY29sPSJyZWQiKQoKYm94cGxvdChkJGdlbm9tZV9zaXplLCBzdWJkJGdlbm9tZV9zaXplLCBzdWJkTm9HQyRnZW5vbWVfc2l6ZSwgc3ViZEdDJGdlbm9tZV9zaXplLCBzdWJkU2l6ZSRnZW5vbWVfc2l6ZSwgc3ViZENvbnRhbWluYXRpb24kZ2Vub21lX3NpemUsIHN1YmRDb21wbGV0ZW5lc3MkZ2Vub21lX3NpemUsIHN1YmREaXN0YW5jZSRnZW5vbWVfc2l6ZSwgc3ViZFJhbmQkZ2Vub21lX3NpemUsIGxvZz0ieSIsIGNvbD1jb2xvcnMsIG1haW49Ikdlbm9tZSBzaXplIGluIGFsbCBhbmQgc2FtcGxlZCBnZW5vbWVzIiwgbmFtZXM9bmFtZXMsIGNleC5heGlzPTAuNywgeGF4dD0ibiIsIHNwYWNlPTEpCnRleHQoc2VxKDEsZW5kX3BvaW50LGJ5PTEpLCBwYXIoInVzciIpWzNdLTAuMjUsIAogICAgIHNydCA9IDYwLCBhZGo9IDEsIHhwZCA9IFRSVUUsCiAgICAgbGFiZWxzID0gbmFtZXMsIGNleD0wLjY1KQoKYGBgCgpgYGB7cn0KI3BhcihtZnJvdz1jKDEsMikpCiNwbG90KGRlbnNpdHkoYXMubnVtZXJpYyhhcy5jaGFyYWN0ZXIoZCRjaGVja21fY29tcGxldGVuZXNzKSksIG5hLnJtID0gVCksIGx3ZD0yLCB4bGltPWMoMCwxMDApLCB5bGltPWMoMCwwLjEpLCBtYWluPSJDb21wbGV0ZW5lc3MgaW4gYWxsIGFuZCBzYW1wbGVkIGdlbm9tZXMiKQojbGluZXMoZGVuc2l0eShhcy5udW1lcmljKGFzLmNoYXJhY3RlcihzdWJkJGNoZWNrbV9jb21wbGV0ZW5lc3MpKSwgbmEucm0gPSBUKSwgbHdkPTIsIGNvbD0icmVkIikKYm94cGxvdChkJGNoZWNrbV9jb21wbGV0ZW5lc3MsIHN1YmQkY2hlY2ttX2NvbXBsZXRlbmVzcywgc3ViZE5vR0MkY2hlY2ttX2NvbXBsZXRlbmVzcywgc3ViZEdDJGNoZWNrbV9jb21wbGV0ZW5lc3MsIHN1YmRTaXplJGNoZWNrbV9jb21wbGV0ZW5lc3MsIHN1YmRDb250YW1pbmF0aW9uJGNoZWNrbV9jb21wbGV0ZW5lc3MsIHN1YmRDb21wbGV0ZW5lc3MkY2hlY2ttX2NvbXBsZXRlbmVzcywgc3ViZERpc3RhbmNlJGNoZWNrbV9jb21wbGV0ZW5lc3MsIHN1YmRSYW5kJGNoZWNrbV9jb21wbGV0ZW5lc3MsIGNvbD1jb2xvcnMsIG1haW49IkNvbXBsZXRlbmVzcyBpbiBhbGwgYW5kIHNhbXBsZWQgZ2Vub21lcyIsIG5hbWVzPW5hbWVzLCBjZXguYXhpcz0wLjcsIHhheHQ9Im4iLCBzcGFjZT0xKQp0ZXh0KHNlcSgxLGVuZF9wb2ludCxieT0xKSwgcGFyKCJ1c3IiKVszXS0wLjI1LCAKICAgICBzcnQgPSA2MCwgYWRqPSAxLCB4cGQgPSBUUlVFLAogICAgIGxhYmVscyA9IG5hbWVzLCBjZXg9MC42NSkKCmBgYAoKCmBgYHtyfQpib3hwbG90KGQkY2hlY2ttX2NvbnRhbWluYXRpb24sIHN1YmQkY2hlY2ttX2NvbnRhbWluYXRpb24sIHN1YmROb0dDJGNoZWNrbV9jb250YW1pbmF0aW9uLCBzdWJkR0MkY2hlY2ttX2NvbnRhbWluYXRpb24sIHN1YmRTaXplJGNoZWNrbV9jb250YW1pbmF0aW9uLCBzdWJkQ29udGFtaW5hdGlvbiRjaGVja21fY29udGFtaW5hdGlvbiwgc3ViZENvbXBsZXRlbmVzcyRjaGVja21fY29udGFtaW5hdGlvbiwgc3ViZERpc3RhbmNlJGNoZWNrbV9jb250YW1pbmF0aW9uLCBzdWJkUmFuZCRjaGVja21fY29udGFtaW5hdGlvbiwgeWxpbT1jKDAsMjApLCBjb2w9Y29sb3JzLCBtYWluPSJDb250YW1pbmF0aW9uIGluIGFsbCBhbmQgc2FtcGxlZCBnZW5vbWVzIiwgbmFtZXM9bmFtZXMsIGNleC5heGlzPTAuNywgeGF4dD0ibiIsIHNwYWNlPTEpCnRleHQoc2VxKDEsZW5kX3BvaW50LGJ5PTEpLCBwYXIoInVzciIpWzNdLTAuMjUsIAogICAgIHNydCA9IDYwLCBhZGo9IDEsIHhwZCA9IFRSVUUsCiAgICAgbGFiZWxzID0gbmFtZXMsIGNleD0wLjY1KQpgYGAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIEFkZGl0aW9uYWwgbWF0ZXJpYWwgCgoKYGBge3J9CnBsb3QoZGVuc2l0eShhcy5udW1lcmljKGFzLmNoYXJhY3RlcihkJGdjX3BlcmNlbnRhZ2UpKSwgbmEucm0gPSBUKSwgbHdkPTIsIHhsaW09YygwLDEwMCksIHlsaW09YygwLDAuMSksIG1haW49IkdDIGNvbnRlbnQgaW4gYWxsIGFuZCBzYW1wbGVkIGdlbm9tZXMiKQpsaW5lcyhkZW5zaXR5KGFzLm51bWVyaWMoYXMuY2hhcmFjdGVyKHN1YmQkZ2NfcGVyY2VudGFnZSkpLCBuYS5ybSA9IFQpLCBsd2Q9MiwgY29sPSJyZWQiKQpsaW5lcyhkZW5zaXR5KGFzLm51bWVyaWMoYXMuY2hhcmFjdGVyKHN1YmRHQyRnY19wZXJjZW50YWdlKSksIG5hLnJtID0gVCksIGx3ZD0yLCBjb2w9Im9yYW5nZSIpCmxpbmVzKGRlbnNpdHkoYXMubnVtZXJpYyhhcy5jaGFyYWN0ZXIoc3ViZENvbnRhbWluYXRpb24kZ2NfcGVyY2VudGFnZSkpLCBuYS5ybSA9IFQpLCBsd2Q9MiwgY29sPSJkYXJrZ3JlZW4iKQpsaW5lcyhkZW5zaXR5KGFzLm51bWVyaWMoYXMuY2hhcmFjdGVyKHN1YmRDb21wbGV0ZW5lc3MkZ2NfcGVyY2VudGFnZSkpLCBuYS5ybSA9IFQpLCBsd2Q9MiwgY29sPSJibHVlIikKbGluZXMoZGVuc2l0eShhcy5udW1lcmljKGFzLmNoYXJhY3RlcihzdWJkRGlzdGFuY2UkZ2NfcGVyY2VudGFnZSkpLCBuYS5ybSA9IFQpLCBsd2Q9MiwgY29sPSJwdXJwbGUiKQpsaW5lcyhkZW5zaXR5KGFzLm51bWVyaWMoYXMuY2hhcmFjdGVyKHN1YmRSYW5kJGdjX3BlcmNlbnRhZ2UpKSwgbmEucm0gPSBUKSwgbHdkPTIsIGNvbD0iZ3JleSIpCmxlZ2VuZChsZWdlbmQ9bmFtZXMsIGNvbD1jKCJibGFjayIsICJyZWQiLCAib3JhbmdlIiwgImRhcmtncmVlbiIsICJibHVlIiwgInB1cnBsZSIsICJncmV5IiksICJ0b3ByaWdodCIsIGx3ZD0xKQpgYGAKCgoKYGBge3J9Cmhpc3QoZCRnY19wZXJjZW50YWdlLCBuYz01MCwgZnJlcT1GQUxTRSwgbWFpbj0iR0MgY29udGVudCBpbiBhbGwgYW5kIHNhbXBsZWQgZ2Vub21lcyIpCmhpc3Qoc3ViZCRnY19wZXJjZW50YWdlLCBuYz0yMCwgYWRkPVQsIGNvbD1yZ2IoMSwwLDAsMC41KSwgZnJlcT1GQUxTRSkKYGBgCgpgYGB7cn0KcGFyKG1mcm93PWMoMSwyKSkKcGxvdChkZW5zaXR5KGFzLm51bWVyaWMoYXMuY2hhcmFjdGVyKGQkY2hlY2ttX2NvbnRhbWluYXRpb24pKSwgbmEucm0gPSBUKSwgbHdkPTIsIHhsaW09YygwLDEwMCksIHlsaW09YygwLDEpLCBtYWluPSJDb250YW1pbmF0aW9uIGluIGFsbCBhbmQgc2FtcGxlZCBnZW5vbWVzIikKbGluZXMoZGVuc2l0eShhcy5udW1lcmljKGFzLmNoYXJhY3RlcihzdWJkJGNoZWNrbV9jb250YW1pbmF0aW9uKSksIG5hLnJtID0gVCksIGx3ZD0yLCBjb2w9InJlZCIpCmJveHBsb3QoZCRjaGVja21fY29udGFtaW5hdGlvbiwgc3ViZCRjaGVja21fY29udGFtaW5hdGlvbiwgY29sPWMoIndoaXRlIiwgInJlZCIpLCB5bGltPWMoMCwxMDApKQpgYGAKCgoKCgoK