1 Collecting shared data in RNA/TN sequencing of S.pyogenes.

2 Genome annotation input

There are a few methods of importing annotation data into R. The following are a few ways.

2.1 Read a genbank accession directly

mgas_data <- sm(gbk2txdb(accession="CP008776"))
genome_size <- GenomicRanges::width(mgas_data$seq)  ## This fails on travis?
mgas_cds <- as.data.frame(mgas_data$cds)
## Get rid of amino acid sequence
mgas_cds <- mgas_cds[-15]
## And EC_number because wtf is that?
mgas_cds <- mgas_cds[-16]
rownames(mgas_cds) <- mgas_cds[["locus_tag"]]
summary(mgas_data)
##            Length Class        Mode
## others       82   GRanges      S4  
## exons      1723   GRanges      S4  
## cds        1723   GRanges      S4  
## intergenic 1496   GRanges      S4  
## genes      1814   GRanges      S4  
## txdb          1   TxDb         S4  
## seq           1   DNAStringSet S4

2.2 Microbesonline

microbe_ids <- sm(get_microbesonline_ids("5005"))
mgas_df <- get_microbesonline_annotation(microbe_ids$taxonomyId)
## $`Streptococcus pyogenes MGAS5005`
## [1] 293653
mgas_df <- mgas_df[[1]]

2.3 Read a gff file

In contrast, it is possible to load most annotations of interest directly from the gff files used in the alignments. More in-depth information for the human transcriptome may be extracted from biomart.

## The old way of getting genome/annotation data
sp_gff <- "reference/mgas_5448.gff"
sp_fasta <- "reference/mgas_5448.fasta"
sp_annotations <- gff2df(sp_gff, type="gene")
## Trying attempt: rtracklayer::import.gff3(gff, sequenceRegionsAsSeqinfo=TRUE)
## Trying attempt: rtracklayer::import.gff3(gff, sequenceRegionsAsSeqinfo=FALSE)
## Had a successful gff import with rtracklayer::import.gff3(gff, sequenceRegionsAsSeqinfo=FALSE)
## Returning a df with 14 columns and 1814 rows.

2.4 Biomart

Biomart does not yet work with bacteria, but they have a REST api which might work. Look into this as necessary.

3 Create expt

We have some annotations and will now create an expt containing the annotations and count data.

sp_expt <- sm(create_expt(metadata="sample_sheets/rnaseq_tnseq_samples.xlsx", gene_info=mgas_cds))
head(Biobase::fData(sp_expt$expressionset))
##              seqnames start  end width strand type    locus_tag
## SP5448_00005     5448   232 1587  1356      +  CDS SP5448_00005
## SP5448_00010     5448  1742 2878  1137      +  CDS SP5448_00010
## SP5448_00015     5448  2953 3150   198      +  CDS SP5448_00015
## SP5448_00020     5448  3480 4595  1116      +  CDS SP5448_00020
## SP5448_00025     5448  4665 5234   570      +  CDS SP5448_00025
## SP5448_00030     5448  5237 8740  3504      +  CDS SP5448_00030
##                                                           inference
## SP5448_00005    EXISTENCE: similar to AAsequence:SwissProt:C0M7C0.1
## SP5448_00010 EXISTENCE: similar to AAsequence:RefSeq:WP_002981935.1
## SP5448_00015 EXISTENCE: similar to AAsequence:RefSeq:WP_003048966.1
## SP5448_00020 EXISTENCE: similar to AAsequence:RefSeq:WP_000244522.1
## SP5448_00025    EXISTENCE: similar to AAsequence:SwissProt:P0DD50.1
## SP5448_00030 EXISTENCE: similar to AAsequence:RefSeq:WP_010921764.1
##                                                                                                    note
## SP5448_00005 Derived by automated computational analysis usinggene prediction method: Protein Homology.
## SP5448_00010 Derived by automated computational analysis usinggene prediction method: Protein Homology.
## SP5448_00015 Derived by automated computational analysis usinggene prediction method: Protein Homology.
## SP5448_00020 Derived by automated computational analysis usinggene prediction method: Protein Homology.
## SP5448_00025 Derived by automated computational analysis usinggene prediction method: Protein Homology.
## SP5448_00030 Derived by automated computational analysis usinggene prediction method: Protein Homology.
##              codon_start transl_table                                        product
## SP5448_00005           1           11 chromosomal replication initiator protein DnaA
## SP5448_00010           1           11                DNA polymerase III subunit beta
## SP5448_00015           1           11                           hypothetical protein
## SP5448_00020           1           11                            GTP-binding protein
## SP5448_00025           1           11                        peptidyl-tRNA hydrolase
## SP5448_00030           1           11           transcription-repair coupling factor
##              protein_id
## SP5448_00005 AKK69518.1
## SP5448_00010 AKK69519.1
## SP5448_00015 AKK69520.1
## SP5448_00020 AKK69521.1
## SP5448_00025 AKK69522.1
## SP5448_00030 AKK69523.1
##                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  translation
## SP5448_00005                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             MTENEQIFWNRVLELAQSQLKQATYEFFVHDARLLKVDKHIATIYLDQMKELFWEKNLKDVILTAGFEVYNAQISVDYVFEEDLMIEQNQTKINQKPKQQALNSLPTVTSDLNSKYSFENFIQGDENRWAVAASIAVANTPGTTYNPLFIWGGPGLGKTHLLNAIGNSVLLENPNARIKYITAENFINEFVIHIRLDTMDELKEKFRNLDLLLIDDIQSLAKKTLSGTQEEFFNTFNALHNNNKQIVLTSDRTPDHLNDLEDRLVTRFKWGLTVNITPPDFETRVAILTNKIQEYNFIFPQDTIEYLAGQFDSNVRDLEGALKDISLVANFKQIDTITVDIAAEAIRARKQDGPKMTVIPIEEIQAQVGKFYGVTVKEIKATKRTQNIVLARQVAMFLAREMTDNSLPKIGKEFGGRDHSTVLHAYNKIKNMISQDESLRIEIETIKNKIK
## SP5448_00010                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      MIQFSINRTLFIHALNTTKRAISTKNAIPILSSIKIEVTSTGVTLTGSNGQISIENTIPVSNENAGLLITSPGAILLEASFFINIISSLPDISINVKEIEQHQVVLTSGKSEITLKGKDVDQYPRLQEVSTENPLILKTKLLKSIIAETAFAASLQESRPILTGVHIVLSNHKDFKAVATDSHRMSQRLITLDNTSADFDVVIPSKSLREFSAVFTDDIETVEVFFSPSQILFRSEHISFYTRLLEGNYPDTDRLLMTEFETEVVFNTQSLRHAMERAFLISNATQNGTVKLEITQNHISAHVNSPEVGKVNEDLDIVSQSGSDLTISFNPTYLIESLKAIKSETVKIHFLSPVRPFTLTPGDEEESFIQLITPVRTN
## SP5448_00015                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               MYQIGSFVEMKKPHACVIKETGKKANQWKVLRVGADIKIQCTNCQHVIMMSRYDFERKLKKVLQP
## SP5448_00020                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             MALTAGIVGLPNVGKSTLFNAITKAGAEAANYPFATIDPNVGMVEVPDERLQKLTELITPKKTVPTTFEFTDIAGIVKGASRGEGLGNKFLANIREIDAIVHVVRAFDDENVMREQGREDAFVDPIADIDTINLELILADLESINKRYARVEKMARTQKDKESVAEFNVLQKIKPVLEDGKSARTIEFTEDEAKVVKGLFLLTTKPVLYVANVDEDKVANPDGIDYVKQIRDFAATENAEVVVISARAEEEISELDDEDKEEFLEAIGLTESGVDKLTRAAYHLLGLGTYFTAGEKEVRAWTFKRGIKAPQAAGIIHSDFERGFIRAVTMSYDDLMTYGSEKAVKEAGRLREEGKEYVVQDGDIMEFRFNV
## SP5448_00025                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   MVKMIVGLGNPGSKYEKTKHNIGFMAIDNIVKNLDVTFTDDKNFKAQIGSTFINHEKVYFVKPTTFMNNSGIAVKALLTYYNIDITDLIVIYDDLDMEVSKLRLRSKGSAGGHNGIKSIIAHIGTQEFNRIKVGIGRPLKGMTVINHVMGQFNTEDNIAISLTLDRVVNAVKFYLQENDFEKTMQKFNG
## SP5448_00030 MDILELFSQNKKVQSWHSGLTTLGRQLVMGLSGSSKTLAIASAYLDDQKKIVVVTSTQNEVEKLASDLSSLLDEELVFQFFADDVAAAEFIFASMDKALSRIETLQFLRNPKSQGVLIVSLSGLRILLPNPDVFTKSQIQLTVGEDYDSDTLTKQLMTIGYQKVSQVISPGEFSRRGDILDIYEITQELPYRLEFFGDDIDSIRQFHPETQKSFEQLEGIFINPASDLIFEVSDFQRGIEQLEKALQTAQDDKKSYLEDVLAVSKNGFKHKDIRKFQSLFYEKEWSLLDYIPKGTPIFFDDFQKLVDKNARFDLEIANLLTEDLQQGKALSNLNYFTDNYRELRHYKPATFFSNFHKGLGNIKFDQMHQLTQYAMQEFFNQFPLLIDEIKRYQKNQTTVIVQVESQYAYERLEKSFQDYQFRLPLVSANQIVSRESQIVIGAISSGFYFADEKLALITEHEIYHKKIKRRARRSNISNAERLKDYNELAVGDYVVHNVHGIGRFLGIETIQIQGIHRDYVTIQYQNSDRISLPIDQISSLSKYVSADGKEPKINKLNDGRFQKTKQKVARQVEDIADDLLKLYAERSQQKGFSFSPDDDLQRAFDDDFAFVETEDQLRSIKEIKADMESMQPMDRLLVGDVGFGKTEVAMRAAFKAVNDHKQVAVLVPTTVLAQQHYENFKARFENYPVEVDVLSRFRSKKEQAETLERVRKGQIDIIIGTHRLLSKDVVFSDLGLIVIDEEQRFGVKHKETLKELKTKVDVLTLTATPIPRTLHMSMLGIRDLSVIETPPTNRYPVQTYVLENNPGLVREAIIREMDRGGQIFYVYNKVDTIEKKVAELQELVPEASIGFVHGQMSEIQLENTLIDFINGDYDVLVATTIIETGVDISNVNTLFIENADHMGLSTLYQLRGRVGRSNRIAYAYLMYRPDKVLTEVSEKRLEAIKGFTELGSGFKIAMRDLSIRGAGNILGASQSGFIDSVGFEMYSQLLEQAIASKQGKTTVRQKGNTEINLQIDAYLPDDYIADERQKIDIYKRIREIQSREDYLNLQDELMDRFGEYPDQVAYLLEIALLKHYMDNAFAELVERKNNQVIVRFEVTSLTYFLTQDYFEALSKTHLKAKISEHQGKIDIVFDVRHQKDYRILEELMLFGERLSEIKIRKNNSVFK
##                 EC_number gene_synonym      gene_id  transcript_id
## SP5448_00005 character(0) character(0) SP5448_00005 SP5448_00005.1
## SP5448_00010 character(0) character(0) SP5448_00010 SP5448_00010.1
## SP5448_00015 character(0) character(0) SP5448_00015 SP5448_00015.1
## SP5448_00020 character(0) character(0) SP5448_00020 SP5448_00020.1
## SP5448_00025 character(0) character(0) SP5448_00025 SP5448_00025.1
## SP5448_00030 character(0) character(0) SP5448_00030 SP5448_00030.1
thyexpress <- expt_subset(expt=sp_expt, subset="type=='RNASeq'&batch!='z'")
thytnseq <- expt_subset(expt=sp_expt, subset="condition=='thyd0'|condition=='thyd1'|condition=='thyd2'|condition=='thyd3'")
thyrnatn <- expt_subset(expt=sp_expt, subset="batch!='z'&(type=='RNASeq'|condition=='thyd0'|condition=='thyd1'|condition=='thyd2'|condition=='thyd3')")
subcu <- expt_subset(expt=sp_expt, subset="media=='mouse_skin'|condition=='subcut0'")
pmnexp1 <- expt_subset(expt=sp_expt, subset="batch=='k'|batch=='l'")
pmnexp2 <- expt_subset(expt=sp_expt, subset="batch=='m'|batch=='n'|batch=='o'")
abscess <- expt_subset(expt=sp_expt, subset="media=='rabbit_abscess'")
rpoe <- expt_subset(expt=sp_expt, subset="batch=='z'")
cpsy <- expt_subset(expt=sp_expt, subset="experiment=='rnaseq_cpsy'")
new_pmn <- expt_subset(expt=sp_expt, subset="experiment=='pmn_infection'")
tmp <- sm(saveme(filename=this_save))
LS0tCnRpdGxlOiAiQW5ub3RhdGlvbiBkYXRhIGZvciBSTkFzZXEvVE5TZXEgb2YgUy5weW9nZW5lcyIKYXV0aG9yOiAiYXRiIGFiZWxld0BnbWFpbC5jb20iCmRhdGU6ICJgciBTeXMuRGF0ZSgpYCIKb3V0cHV0OgogaHRtbF9kb2N1bWVudDoKICBjb2RlX2Rvd25sb2FkOiB0cnVlCiAgY29kZV9mb2xkaW5nOiBzaG93CiAgZmlnX2NhcHRpb246IHRydWUKICBmaWdfaGVpZ2h0OiA3CiAgZmlnX3dpZHRoOiA3CiAgaGlnaGxpZ2h0OiBkZWZhdWx0CiAga2VlcF9tZDogZmFsc2UKICBtb2RlOiBzZWxmY29udGFpbmVkCiAgbnVtYmVyX3NlY3Rpb25zOiB0cnVlCiAgc2VsZl9jb250YWluZWQ6IHRydWUKICB0aGVtZTogcmVhZGFibGUKICB0b2M6IHRydWUKICB0b2NfZmxvYXQ6CiAgICBjb2xsYXBzZWQ6IGZhbHNlCiAgICBzbW9vdGhfc2Nyb2xsOiBmYWxzZQotLS0KCjxzdHlsZT4KICA8IS0tIERvY3VtZW50IHByZWx1ZGUgcmV2aXNpb24gMjAxNy0wMiAtLT4KICBib2R5IC5tYWluLWNvbnRhaW5lciB7CiAgICBtYXgtd2lkdGg6IDE2MDBweDsKfQo8L3N0eWxlPgoKCmBgYHtyIG9wdGlvbnMsIGluY2x1ZGU9RkFMU0V9CiMjIFRoZXNlIGFyZSB0aGUgb3B0aW9ucyBJIHRlbmQgdG8gZmF2b3IKbGlicmFyeSgiaHBnbHRvb2xzIikKdHQgPC0gZGV2dG9vbHM6OmxvYWRfYWxsKCJ+L2hwZ2x0b29scyIpCmtuaXRyOjpvcHRzX2tuaXQkc2V0KAogICAgcHJvZ3Jlc3MgPSBUUlVFLAogICAgdmVyYm9zZSA9IFRSVUUsCiAgICB3aWR0aCA9IDkwLAogICAgZWNobyA9IFRSVUUpCmtuaXRyOjpvcHRzX2NodW5rJHNldCgKICAgIGVycm9yID0gVFJVRSwKICAgIGZpZy53aWR0aCA9IDgsCiAgICBmaWcuaGVpZ2h0ID0gOCwKICAgIGRwaSA9IDk2KQpvcHRpb25zKAogICAgZGlnaXRzID0gNCwKICAgIHN0cmluZ3NBc0ZhY3RvcnMgPSBGQUxTRSwKICAgIGtuaXRyLmR1cGxpY2F0ZS5sYWJlbCA9ICJhbGxvdyIpCmdncGxvdDI6OnRoZW1lX3NldChnZ3Bsb3QyOjp0aGVtZV9idyhiYXNlX3NpemU9MTApKQpzZXQuc2VlZCgxKQp2ZXIgPC0gIjIwMTcwNjA1IgpwcmV2aW91c19maWxlIDwtICJpbmRleC5SbWQiCmBgYAoKYGBge3IgbG9hZG1lLCBpbmNsdWRlPUZBTFNFfQp0bXAgPC0gdHJ5KHNtKGxvYWRtZShmaWxlbmFtZT1wYXN0ZTAoZ3N1YihwYXR0ZXJuPSJcXC5SbWQiLCByZXBsYWNlPSIiLCB4PXByZXZpb3VzX2ZpbGUpLCAiLXYiLCB2ZXIsICIucmRhLnh6IikpKSkKYGBgCgpgYGB7ciByZW5kZXIsIGV2YWw9RkFMU0UsIGluY2x1ZGU9RkFMU0V9CnJtZF9maWxlIDwtICJzdWJjdS5SbWQiCnRoaXNfc2F2ZSA8LSBwYXN0ZTAoZ3N1YihwYXR0ZXJuPSJcXC5SbWQiLCByZXBsYWNlPSIiLCB4PXJtZF9maWxlKSwgIi12IiwgdmVyLCAiLnJkYS54eiIpCgpybWFya2Rvd246OnJlbmRlcihybWRfZmlsZSkKCiMjIEFuIGV4dHJhIHJlbmRlcmVyIGZvciBwZGYgb3V0cHV0CnJtYXJrZG93bjo6cmVuZGVyKHJtZF9maWxlLCBvdXRwdXRfZm9ybWF0PSJwZGZfZG9jdW1lbnQiLCBvdXRwdXRfb3B0aW9ucz1jKCJza2lwX2h0bWwiKSkKYGBgCgpDb2xsZWN0aW5nIHNoYXJlZCBkYXRhIGluIFJOQS9UTiBzZXF1ZW5jaW5nIG9mIFMucHlvZ2VuZXMuCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiMgR2Vub21lIGFubm90YXRpb24gaW5wdXQKClRoZXJlIGFyZSBhIGZldyBtZXRob2RzIG9mIGltcG9ydGluZyBhbm5vdGF0aW9uIGRhdGEgaW50byBSLiAgVGhlIGZvbGxvd2luZyBhcmUgYSBmZXcgd2F5cy4KCiMjIFJlYWQgYSBnZW5iYW5rIGFjY2Vzc2lvbiBkaXJlY3RseQoKYGBge3IgZ2JrMnR4ZGJ9Cm1nYXNfZGF0YSA8LSBzbShnYmsydHhkYihhY2Nlc3Npb249IkNQMDA4Nzc2IikpCmdlbm9tZV9zaXplIDwtIEdlbm9taWNSYW5nZXM6OndpZHRoKG1nYXNfZGF0YSRzZXEpICAjIyBUaGlzIGZhaWxzIG9uIHRyYXZpcz8KbWdhc19jZHMgPC0gYXMuZGF0YS5mcmFtZShtZ2FzX2RhdGEkY2RzKQojIyBHZXQgcmlkIG9mIGFtaW5vIGFjaWQgc2VxdWVuY2UKbWdhc19jZHMgPC0gbWdhc19jZHNbLTE1XQojIyBBbmQgRUNfbnVtYmVyIGJlY2F1c2Ugd3RmIGlzIHRoYXQ/Cm1nYXNfY2RzIDwtIG1nYXNfY2RzWy0xNl0Kcm93bmFtZXMobWdhc19jZHMpIDwtIG1nYXNfY2RzW1sibG9jdXNfdGFnIl1dCnN1bW1hcnkobWdhc19kYXRhKQpgYGAKCiMjIE1pY3JvYmVzb25saW5lCgpgYGB7ciBtaWNyb2Jlc29ubGluZX0KbWljcm9iZV9pZHMgPC0gc20oZ2V0X21pY3JvYmVzb25saW5lX2lkcygiNTAwNSIpKQptZ2FzX2RmIDwtIGdldF9taWNyb2Jlc29ubGluZV9hbm5vdGF0aW9uKG1pY3JvYmVfaWRzJHRheG9ub215SWQpCm1nYXNfZGYgPC0gbWdhc19kZltbMV1dCmBgYAoKIyMgUmVhZCBhIGdmZiBmaWxlCgpJbiBjb250cmFzdCwgaXQgaXMgcG9zc2libGUgdG8gbG9hZCBtb3N0IGFubm90YXRpb25zIG9mIGludGVyZXN0IGRpcmVjdGx5IGZyb20gdGhlIGdmZiBmaWxlcyB1c2VkIGluCnRoZSBhbGlnbm1lbnRzLiAgTW9yZSBpbi1kZXB0aCBpbmZvcm1hdGlvbiBmb3IgdGhlIGh1bWFuIHRyYW5zY3JpcHRvbWUgbWF5IGJlIGV4dHJhY3RlZCBmcm9tIGJpb21hcnQuCgpgYGB7ciBnZW5vbWVfaW5wdXR9CiMjIFRoZSBvbGQgd2F5IG9mIGdldHRpbmcgZ2Vub21lL2Fubm90YXRpb24gZGF0YQpzcF9nZmYgPC0gInJlZmVyZW5jZS9tZ2FzXzU0NDguZ2ZmIgpzcF9mYXN0YSA8LSAicmVmZXJlbmNlL21nYXNfNTQ0OC5mYXN0YSIKc3BfYW5ub3RhdGlvbnMgPC0gZ2ZmMmRmKHNwX2dmZiwgdHlwZT0iZ2VuZSIpCmBgYAoKIyMgQmlvbWFydAoKQmlvbWFydCBkb2VzIG5vdCB5ZXQgd29yayB3aXRoIGJhY3RlcmlhLCBidXQgdGhleSBoYXZlIGEgUkVTVCBhcGkgd2hpY2ggbWlnaHQgd29yay4gIExvb2sgaW50byB0aGlzCmFzIG5lY2Vzc2FyeS4KCiMgQ3JlYXRlIGV4cHQKCldlIGhhdmUgc29tZSBhbm5vdGF0aW9ucyBhbmQgd2lsbCBub3cgY3JlYXRlIGFuIGV4cHQgY29udGFpbmluZyB0aGUgYW5ub3RhdGlvbnMgYW5kIGNvdW50IGRhdGEuCgpgYGB7ciBjcmVhdGVfZXhwdH0Kc3BfZXhwdCA8LSBzbShjcmVhdGVfZXhwdChtZXRhZGF0YT0ic2FtcGxlX3NoZWV0cy9ybmFzZXFfdG5zZXFfc2FtcGxlcy54bHN4IiwgZ2VuZV9pbmZvPW1nYXNfY2RzKSkKaGVhZChCaW9iYXNlOjpmRGF0YShzcF9leHB0JGV4cHJlc3Npb25zZXQpKQoKdGh5ZXhwcmVzcyA8LSBleHB0X3N1YnNldChleHB0PXNwX2V4cHQsIHN1YnNldD0idHlwZT09J1JOQVNlcScmYmF0Y2ghPSd6JyIpCnRoeXRuc2VxIDwtIGV4cHRfc3Vic2V0KGV4cHQ9c3BfZXhwdCwgc3Vic2V0PSJjb25kaXRpb249PSd0aHlkMCd8Y29uZGl0aW9uPT0ndGh5ZDEnfGNvbmRpdGlvbj09J3RoeWQyJ3xjb25kaXRpb249PSd0aHlkMyciKQp0aHlybmF0biA8LSBleHB0X3N1YnNldChleHB0PXNwX2V4cHQsIHN1YnNldD0iYmF0Y2ghPSd6JyYodHlwZT09J1JOQVNlcSd8Y29uZGl0aW9uPT0ndGh5ZDAnfGNvbmRpdGlvbj09J3RoeWQxJ3xjb25kaXRpb249PSd0aHlkMid8Y29uZGl0aW9uPT0ndGh5ZDMnKSIpCnN1YmN1IDwtIGV4cHRfc3Vic2V0KGV4cHQ9c3BfZXhwdCwgc3Vic2V0PSJtZWRpYT09J21vdXNlX3NraW4nfGNvbmRpdGlvbj09J3N1YmN1dDAnIikKcG1uZXhwMSA8LSBleHB0X3N1YnNldChleHB0PXNwX2V4cHQsIHN1YnNldD0iYmF0Y2g9PSdrJ3xiYXRjaD09J2wnIikKcG1uZXhwMiA8LSBleHB0X3N1YnNldChleHB0PXNwX2V4cHQsIHN1YnNldD0iYmF0Y2g9PSdtJ3xiYXRjaD09J24nfGJhdGNoPT0nbyciKQphYnNjZXNzIDwtIGV4cHRfc3Vic2V0KGV4cHQ9c3BfZXhwdCwgc3Vic2V0PSJtZWRpYT09J3JhYmJpdF9hYnNjZXNzJyIpCnJwb2UgPC0gZXhwdF9zdWJzZXQoZXhwdD1zcF9leHB0LCBzdWJzZXQ9ImJhdGNoPT0neiciKQpjcHN5IDwtIGV4cHRfc3Vic2V0KGV4cHQ9c3BfZXhwdCwgc3Vic2V0PSJleHBlcmltZW50PT0ncm5hc2VxX2Nwc3knIikKbmV3X3BtbiA8LSBleHB0X3N1YnNldChleHB0PXNwX2V4cHQsIHN1YnNldD0iZXhwZXJpbWVudD09J3Btbl9pbmZlY3Rpb24nIikKYGBgCgpgYGB7ciBzYXZlbWV9CnRtcCA8LSBzbShzYXZlbWUoZmlsZW5hbWU9dGhpc19zYXZlKSkKYGBgCgoK