This code depends on the database (G_macrocephalus_IDmapping_2024_04_17.tab) of G.macrocephalus transcript IDs and associated GO terms generated in 03-transcriptome-annotation.Rmd, AND on lists of differentially expressed genes (DEGs) generated in 07-cod-RNAseq-DESeq2.Rmd.

This code identifies overrepresented gene ontology (GO) terms in G.macrocephalus RNA sequencing data

Inputs: - transcript ID/GO term database (G_macrocephalus_rna_IDmapping_2024_04_17.tab) - DEGs

In 03-transcriptome-annotation.Rmd we used BLAST and Uniprot/SwissProt to obtain UniProt Accession numbers for each transcript in the G. macrocephalus transcriptome. We then used those Accession numbers to obtain GO terms for each transcript, functionally creating a database which matches G.macrocephalus transcripts with associated GO terms.

In 07-cod-RNAseq-DESeq2.Rmd we identified sets of significantly differentially expressed genes (DEGs) between pairs of treatments (e.g., Liver tissue for 9C vs. 16C).

Now we want to use the database to identify GO terms associated with our lists of DEGs, and to evaluate which GO terms are overrepresented.

https://wikis.utexas.edu/display/bioiteam/GO+Enrichment+using+goseq#:~:text=goseq%20is%20an%20R%20package,in%20our%20differentially%20expressed%20genes. https://bioconductor.org/packages/devel/bioc/vignettes/goseq/inst/doc/goseq.pdf

# List of packages we want to install (run every time)
library(tidyverse)
library(dplyr)
library(magrittr)
library(knitr)
library(ggvenn)
gmac_idmap <- read.csv("../output/03-transcriptome-annotation/G_macrocephalus_rna_IDmapping_2024_04_17.tab", sep='\t') %>%
  subset(select=-X) # remove superflous column containing rowIDs

DEGs_L.9.0 <- read.csv("../output/07-cod-RNAseq-DESeq2/Gmac_DEGs_sig_L.9.0_norm.tab", sep='\t') %>%
  subset(select=-X) # remove superflous column containing rowIDs
DEGs_L.9.5 <- read.csv("../output/07-cod-RNAseq-DESeq2/Gmac_DEGs_sig_L.9.5_norm.tab", sep='\t') %>%
  subset(select=-X) # remove superflous column containing rowIDs
DEGs_L.9.16 <- read.csv("../output/07-cod-RNAseq-DESeq2/Gmac_DEGs_sig_L.9.16_norm.tab", sep='\t') %>%
  subset(select=-X) # remove superflous column containing rowIDs

kallisto_counts_matrix <- read.csv("../output/06-cod-RNAseq-alignment/kallisto/kallisto.isoform.counts.matrix", sep='\t')
kallisto_counts_matrix[,-1] <- round(kallisto_counts_matrix[,-1], digits = 0) # round counts to integers

1 Annotate DEGs using GO terms

# All DEGs
DEGs_GO_L.9.0 <- left_join(DEGs_L.9.0, gmac_idmap, by=c("gene" = "V1"))
DEGs_GO_L.9.5 <- left_join(DEGs_L.9.5, gmac_idmap, by=c("gene" = "V1"))
DEGs_GO_L.9.16 <- left_join(DEGs_L.9.16, gmac_idmap, by=c("gene" = "V1"))

# Unique DEGs
DEGs_GO_L.9.0_unique <- DEGs_GO_L.9.0 %>% distinct(gene, .keep_all = TRUE)
DEGs_GO_L.9.5_unique <- DEGs_GO_L.9.5 %>% distinct(gene, .keep_all = TRUE)
DEGs_GO_L.9.16_unique <- DEGs_GO_L.9.16 %>% distinct(gene, .keep_all = TRUE)

# summarize counts
print(paste("All DEGs:", nrow(DEGs_GO_L.9.0), "(9C v 0C),", nrow(DEGs_GO_L.9.5), "(9C v 5C),", nrow(DEGs_GO_L.9.16), "(9C v 16C)"))
[1] "All DEGs: 5415 (9C v 0C), 1212 (9C v 5C), 3612 (9C v 16C)"
print(paste("Unique DEGs:", nrow(DEGs_GO_L.9.0_unique), "(9C v 0C),", nrow(DEGs_GO_L.9.5_unique), "(9C v 5C),", nrow(DEGs_GO_L.9.16_unique), "(9C v 16C)"))
[1] "Unique DEGs: 4674 (9C v 0C), 1091 (9C v 5C), 3007 (9C v 16C)"
# Save
write.table(DEGs_GO_L.9.0_unique, "../output/08-cod-RNAseq-GO-annotation/Gmac_DEGs_GO_L.9.0_unique.tab", sep = "\t", row.names = TRUE, col.names = NA)
write.table(DEGs_GO_L.9.5_unique, "../output/08-cod-RNAseq-GO-annotation/Gmac_DEGs_GO_L.9.5_unique.tab", sep = "\t", row.names = TRUE, col.names = NA)
write.table(DEGs_GO_L.9.16_unique, "../output/08-cod-RNAseq-GO-annotation/Gmac_DEGs_GO_L.9.16_unique.tab", sep = "\t", row.names = TRUE, col.names = NA)

1.1 Venn diagram of DEG counts accross treatments

# Make list
deg_counts_unique <- list(
  "9C v 0C" = unique(DEGs_GO_L.9.0$gene),
  "9C v 5C" = unique(DEGs_GO_L.9.5$gene),
  "9C v 16C" = unique(DEGs_GO_L.9.16$gene)
)

# Make venn diagrams
ggvenn(deg_counts_unique,
       fill_color = c("blue", "yellow", "red"))

1.2 DEG bar plots

# Create a data frame with extracted columns
combined_unique_DEG_counts <- data.frame(
  DEGs_count = c(length(unique(DEGs_GO_L.9.0$gene)), 
                 length(unique(DEGs_GO_L.9.5$gene)), 
                 length(unique(DEGs_GO_L.9.16$gene))),
  treatment = factor(c("9C v 0C", "9C v 5C", "9C v 16C"), 
                     levels=c("9C v 0C", "9C v 5C", "9C v 16C")))

# Assign colors
custom_colors <- c("9C v 0C"="blue", "9C v 5C"="yellow", "9C v 16C"="red")

# Create a bar plot
ggplot(combined_unique_DEG_counts, aes(x = treatment, y = DEGs_count, fill = treatment)) +
  geom_col() +
  labs(title = "Bar Plot of Unique DEGs across Treatments",
       x = "DEGs",
       y = "Count") +
  scale_fill_manual(values = custom_colors) +
  geom_text(aes(label = DEGs_count), vjust = -0.5) +
  theme_minimal()

1.3 GO Enrichment

First, isolate lists of Uniprot Accession numbers from each set off significant DEGs.

uniprotAcessions_DEGs_L.9.0 <- na.omit(DEGs_GO_L.9.0_unique$V3)
write.table(uniprotAcessions_DEGs_L.9.0, "../output/08-cod-RNAseq-GO-annotation/Gmac_uniprotAcessions_DEGs_L.9.0.txt")
uniprotAcessions_DEGs_L.9.5 <- na.omit(DEGs_GO_L.9.5_unique$V3)
write.table(uniprotAcessions_DEGs_L.9.5, "../output/08-cod-RNAseq-GO-annotation/Gmac_uniprotAcessions_DEGs_L.9.5.txt")
uniprotAcessions_DEGs_L.9.16 <- na.omit(DEGs_GO_L.9.16_unique$V3)
write.table(uniprotAcessions_DEGs_L.9.16, "../output/08-cod-RNAseq-GO-annotation/Gmac_uniprotAcessions_DEGs_L.9.16.txt")

And reformat to get rid of superfluous characters

# We need to 1) remove the first line, 2) get rid of the row numbers, and 3) remove extra " characters
sed '1d' ../output/08-cod-RNAseq-GO-annotation/Gmac_uniprotAcessions_DEGs_L.9.0.txt | \
  awk '{print $2}' | \
  tr -d '"' \
  > ../output/08-cod-RNAseq-GO-annotation/Gmac_uniprotAcessions_DEGs_L.9.0_formatted.txt
  
sed '1d' ../output/08-cod-RNAseq-GO-annotation/Gmac_uniprotAcessions_DEGs_L.9.5.txt | \
  awk '{print $2}' | \
  tr -d '"' \
  > ../output/08-cod-RNAseq-GO-annotation/Gmac_uniprotAcessions_DEGs_L.9.5_formatted.txt
  
sed '1d' ../output/08-cod-RNAseq-GO-annotation/Gmac_uniprotAcessions_DEGs_L.9.16.txt | \
  awk '{print $2}' | \
  tr -d '"' \
  > ../output/08-cod-RNAseq-GO-annotation/Gmac_uniprotAcessions_DEGs_L.9.16_formatted.txt

We also want to get a list of Uniprot Accession numbers for our “background”. This is a reference of all transcripts we would expect to find in our samples. We could just use IDs from our full reference transcriptome, but this may include transcripts we would not actually expect to find in our samples (e.g. the transcriptome may contain gonad-specific transcripts that would not appear in our liver tissue samples). To filter for only transcripts found in our samples, we can 1) filter our kallisto count matrix to retain only transcripts present in at least one sample, and then 2) join this filtered count matrix with our transcript/Uniprot ID database.

# Remove any transcripts that do not appear in any sample
kallisto_counts_filtered <- kallisto_counts_matrix[rowSums(kallisto_counts_matrix[, -1] != 0) > 0, ]
og_num <- nrow (kallisto_counts_matrix)
filtered_num <- nrow(kallisto_counts_filtered)

paste("Filtered kallisto counts matrix from ", og_num, "transcripts to ", filtered_num, "transcripts")
[1] "Filtered kallisto counts matrix from  49417 transcripts to  46634 transcripts"
# Join the filtered counts matrix and the transcript/Uniprot database
counts_GO <- left_join(kallisto_counts_filtered, gmac_idmap, by=c("X" = "V1"))

# Reorder columns to have gene name, GO annotation, and Uniprot ID next to each other
counts_GO <- counts_GO[, c("Gene.Ontology..biological.process.", setdiff(names(counts_GO), "Gene.Ontology..biological.process."))]
counts_GO <- counts_GO[, c("V3", setdiff(names(counts_GO), "V3"))]
uniprotAcessions_transcriptome_rna <- na.omit(counts_GO$V3)
write.table(uniprotAcessions_transcriptome_rna, "../output/08-cod-RNAseq-GO-annotation/Gmac_uniprotAcessions_transcriptome_rna.txt")
# We need to 1) remove the first line, 2) get rid of the row numbers, and 3) remove extra " characters
sed '1d' ../output/08-cod-RNAseq-GO-annotation/Gmac_uniprotAcessions_transcriptome_rna.txt | \
  awk '{print $2}' | \
  tr -d '"' \
  > ../output/08-cod-RNAseq-GO-annotation/Gmac_uniprotAcessions_transcriptome_rna_formatted.txt

Now we can download these formatted lists of accession numbers and run them through DAVID to obtain lists of associated Uniprot keywords. Unfortunately I don’t think this can be done from command line though, so I’ll be using the online tool: https://david.ncifcrf.gov/tools.jsp

I upload my three DEG lists (Gmac_uniprotAcessions_DEGs_L.9.0_formatted.txt, Gmac_uniprotAcessions_DEGs_L.9.5_formatted.txt, Gmac_uniprotAcessions_DEGs_L.9.16_formatted.txt) as “Gene Lists” and upload the filtered transcripts list (Gmac_uniprotAcessions_transcriptome_rna_formatted.txt) as the “Background”, selecting “UNIPROT_ACCESSION” as the identifier for each. I analyzed each DEG list using the “Functional Annotation” tool, and dowloaded the Functional Annotation Table and Functional Annotation Chart for each (below)

curl https://david.ncifcrf.gov/data/download/tr_EDDFE74F4DD11715194057713.txt > ../output/08-cod-RNAseq-GO-annotation/Gmac_DAVID_FAtable_L.9.0.tab
curl https://david.ncifcrf.gov/data/download/chart_EDDFE74F4DD11715195127232.txt > ../output/08-cod-RNAseq-GO-annotation/Gmac_DAVID_FAchart_L.9.0.tab

curl https://david.ncifcrf.gov/data/download/tr_EDDFE74F4DD11715194461132.txt > ../output/08-cod-RNAseq-GO-annotation/Gmac_DAVID_FAtable_L.9.5.tab
curl https://david.ncifcrf.gov/data/download/chart_EDDFE74F4DD11715194590902.txt > ../output/08-cod-RNAseq-GO-annotation/Gmac_DAVID_FAchart_L.9.5.tab

curl https://david.ncifcrf.gov/data/download/tr_EDDFE74F4DD11715193943129.txt > ../output/08-cod-RNAseq-GO-annotation/Gmac_DAVID_FAtable_L.9.16.tab
curl https://david.ncifcrf.gov/data/download/chart_EDDFE74F4DD11715195175792.txt > ../output/08-cod-RNAseq-GO-annotation/Gmac_DAVID_FAchart_L.9.16.tab
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0100  203k    0  203k    0     0   396k      0 --:--:-- --:--:-- --:--:--  395k100 4419k    0 4419k    0     0  5511k      0 --:--:-- --:--:-- --:--:-- 5504k
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0100  298k    0  298k    0     0   567k      0 --:--:-- --:--:-- --:--:--  567k
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0100 1038k    0 1038k    0     0  1582k      0 --:--:-- --:--:-- --:--:-- 1580k
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0100  109k    0  109k    0     0   247k      0 --:--:-- --:--:-- --:--:--  247k
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0100 2881k    0 2881k    0     0  3852k      0 --:--:-- --:--:-- --:--:-- 3847k
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0100 13123    0 13123    0     0  43167      0 --:--:-- --:--:-- --:--:-- 43167100  242k    0  242k    0     0   471k      0 --:--:-- --:--:-- --:--:--  470k
DEGs_DAVID_FAtable_L.9.0 <- read.delim("../output/08-cod-RNAseq-GO-annotation/Gmac_DAVID_FAtable_L.9.0.tab", sep="\t")
DEGs_DAVID_FAtable_L.9.5 <- read.delim("../output/08-cod-RNAseq-GO-annotation/Gmac_DAVID_FAtable_L.9.5.tab", sep="\t")
DEGs_DAVID_FAtable_L.9.16 <- read.delim("../output/08-cod-RNAseq-GO-annotation/Gmac_DAVID_FAtable_L.9.16.tab", sep="\t")

DEGs_DAVID_FAchart_L.9.0 <- read.delim("../output/08-cod-RNAseq-GO-annotation/Gmac_DAVID_FAchart_L.9.0.tab", sep="\t")
DEGs_DAVID_FAchart_L.9.5 <- read.delim("../output/08-cod-RNAseq-GO-annotation/Gmac_DAVID_FAchart_L.9.5.tab", sep="\t")
DEGs_DAVID_FAchart_L.9.16 <- read.delim("../output/08-cod-RNAseq-GO-annotation/Gmac_DAVID_FAchart_L.9.16.tab", sep="\t")

Now we can also make datasets that include differential expression stats (e.g., padj) AND high-level Uniprot keywords.

DEGs_DAVID_FAtable_GO_L.9.0 <- left_join(DEGs_GO_L.9.0_unique, DEGs_DAVID_FAtable_L.9.0, by=c("V3" = "ID"))
DEGs_DAVID_FAtable_GO_L.9.5 <- left_join(DEGs_GO_L.9.5_unique, DEGs_DAVID_FAtable_L.9.5, by=c("V3" = "ID"))
DEGs_DAVID_FAtable_GO_L.9.16 <- left_join(DEGs_GO_L.9.16_unique, DEGs_DAVID_FAtable_L.9.16, by=c("V3" = "ID"))

1.3.1 View top DEGs and annotations

First we can look at the biological processes associated with our most significantly differentially expressed genes – note that this is NOT making use of our enrichment analysis, it’s just the GO terms associated with the top 25 DEGs

top_25_DEGs_L.9.0 <- head(na.omit(DEGs_DAVID_FAtable_GO_L.9.0[order(DEGs_DAVID_FAtable_GO_L.9.0$padj), ]), 25)
top_25_DEGs_L.9.0$padj <- as.character(top_25_DEGs_L.9.0$padj) # prevents kable from auto-rounding our padj values
kable(top_25_DEGs_L.9.0[, c("gene", "padj", "Gene.Ontology..biological.process.")],
      row.names = FALSE,
      caption = "Top 25 DEGs for 9C v 0C (based on adjusted p-value)")  
Table 1.1: Top 25 DEGs for 9C v 0C (based on adjusted p-value)
gene padj Gene.Ontology..biological.process.
XM_060037653.1 2.65059340718516e-116 fatty acid biosynthetic process [GO:0006633]; lactate metabolic process [GO:0006089]; positive regulation of appetite [GO:0032100]
XM_060049763.1 9.12527523202844e-94 androgen receptor signaling pathway [GO:0030521]; ceramide metabolic process [GO:0006672]; intracellular steroid hormone receptor signaling pathway [GO:0030518]; negative regulation of cell population proliferation [GO:0008285]; phospholipid dephosphorylation [GO:0046839]; phospholipid metabolic process [GO:0006644]; protein kinase C-activating G protein-coupled receptor signaling pathway [GO:0007205]; regulation of lipid metabolic process [GO:0019216]; signal transduction [GO:0007165]; sphingolipid biosynthetic process [GO:0030148]; sphingosine metabolic process [GO:0006670]
XM_060060166.1 1.42450720228371e-85 single fertilization [GO:0007338]
XM_060035971.1 8.66449260549534e-84 mRNA processing [GO:0006397]; RNA splicing [GO:0008380]
XM_060057750.1 6.38418170589001e-74
XM_060038917.1 7.42028388386766e-73 positive regulation by host of viral genome replication [GO:0044829]; positive regulation of protein targeting to membrane [GO:0090314]; positive regulation of viral process [GO:0048524]; regulation of acid-sensing ion channel activity [GO:1901585]; regulation of ion transmembrane transport [GO:0034765]
XM_060041837.1 1.67320958843222e-71
XM_060049740.1 4.86364826911051e-67 autophagosome assembly [GO:0000045]; calcium ion transmembrane transport [GO:0070588]; calcium ion transport [GO:0006816]; cellular calcium ion homeostasis [GO:0006874]; ion transmembrane transport [GO:0034220]; response to xenobiotic stimulus [GO:0009410]
XM_060049939.1 3.45402241606145e-66 tetrahydrobiopterin biosynthetic process [GO:0006729]
XM_060068071.1 4.61565129576928e-65
XM_060060171.1 5.85829856535501e-65 binding of sperm to zona pellucida [GO:0007339]; egg coat formation [GO:0035803]; positive regulation of acrosome reaction [GO:2000344]; response to progesterone [GO:0032570]; response to testosterone [GO:0033574]
XM_060056708.1 3.51183573584622e-64 cell migration [GO:0016477]; embryo development ending in birth or egg hatching [GO:0009792]; gastrulation [GO:0007369]; mRNA stabilization [GO:0048255]; negative regulation of nuclear-transcribed mRNA poly(A) tail shortening [GO:0060212]; neurogenesis [GO:0022008]; positive regulation of translation [GO:0045727]; pronephros development [GO:0048793]; response to cold [GO:0009409]
XM_060045462.1 1.0273894884123e-63 microtubule cytoskeleton organization [GO:0000226]; mitotic cell cycle [GO:0000278]
XM_060036042.1 1.82056756959209e-62 glycine biosynthetic process [GO:0006545]; threonine catabolic process [GO:0006567]
XM_060061635.1 3.0894711535196e-59 glycolytic process [GO:0006096]; tricarboxylic acid cycle [GO:0006099]
XM_060067933.1 4.53686815697762e-58 mRNA stabilization [GO:0048255]; positive regulation of translation [GO:0045727]; response to UV [GO:0009411]; stress granule assembly [GO:0034063]
XM_060061319.1 6.08606636149451e-58 cuticle development [GO:0042335]; cytokine-mediated signaling pathway [GO:0019221]; defense response [GO:0006952]; hormone biosynthetic process [GO:0042446]; hydrogen peroxide catabolic process [GO:0042744]; response to cAMP [GO:0051591]; response to oxidative stress [GO:0006979]; superoxide anion generation [GO:0042554]; thyroid hormone generation [GO:0006590]
XM_060038697.1 7.49314138927052e-55 phosphatidylethanolamine biosynthetic process [GO:0006646]; phosphorylation [GO:0016310]
XM_060060130.1 2.16442886447122e-53 inositol catabolic process [GO:0019310]
XM_060056417.1 3.17006572189851e-52 chaperone-mediated protein complex assembly [GO:0051131]; protein folding [GO:0006457]; protein insertion into mitochondrial outer membrane [GO:0045040]; response to unfolded protein [GO:0006986]
XM_060073306.1 1.66155359670683e-47 cell population proliferation [GO:0008283]; cerebral cortex development [GO:0021987]; microtubule cytoskeleton organization [GO:0000226]; mitotic spindle organization [GO:0007052]
XM_060047018.1 9.40093229797643e-47 cell differentiation [GO:0030154]; transcription initiation at RNA polymerase II promoter [GO:0006367]
XR_009527059.1 8.79962417234868e-46 mRNA processing [GO:0006397]; regulation of circadian rhythm [GO:0042752]; regulation of protein stability [GO:0031647]; rhythmic process [GO:0048511]; RNA splicing [GO:0008380]
XM_060069367.1 1.66189858596371e-43 eukaryotic translation initiation factor 4F complex assembly [GO:0097010]; formation of translation preinitiation complex [GO:0001731]; regulation of translational initiation [GO:0006446]
XM_060040146.1 3.18308161023476e-42 chondroitin sulfate biosynthetic process [GO:0030206]
top_25_DEGs_L.9.5 <- head(na.omit(DEGs_DAVID_FAtable_GO_L.9.5[order(DEGs_DAVID_FAtable_GO_L.9.5$padj), ]), 25)
top_25_DEGs_L.9.5$padj <- as.character(top_25_DEGs_L.9.5$padj) # prevents kable from auto-rounding our padj values
kable(top_25_DEGs_L.9.5[, c("gene", "padj", "Gene.Ontology..biological.process.")],
      row.names = FALSE,
      caption = "Top 25 DEGs for 9C v 5C (based on adjusted p-value)")  
Table 1.1: Top 25 DEGs for 9C v 5C (based on adjusted p-value)
gene padj Gene.Ontology..biological.process.
XM_060035971.1 7.98182203996108e-25 mRNA processing [GO:0006397]; RNA splicing [GO:0008380]
XM_060056708.1 5.51070147655825e-17 cell migration [GO:0016477]; embryo development ending in birth or egg hatching [GO:0009792]; gastrulation [GO:0007369]; mRNA stabilization [GO:0048255]; negative regulation of nuclear-transcribed mRNA poly(A) tail shortening [GO:0060212]; neurogenesis [GO:0022008]; positive regulation of translation [GO:0045727]; pronephros development [GO:0048793]; response to cold [GO:0009409]
XM_060067933.1 6.63135038511177e-17 mRNA stabilization [GO:0048255]; positive regulation of translation [GO:0045727]; response to UV [GO:0009411]; stress granule assembly [GO:0034063]
XM_060048079.1 2.86886992285965e-11 cytoplasmic translation [GO:0002181]; translation [GO:0006412]; translation at postsynapse [GO:0140242]; translation at presynapse [GO:0140236]
XM_060046801.1 4.88332021457905e-11 defense response to Gram-negative bacterium [GO:0050829]; defense response to Gram-positive bacterium [GO:0050830]; DNA geometric change [GO:0032392]; DNA recombination [GO:0006310]; inflammatory response to antigenic stimulus [GO:0002437]; innate immune response [GO:0045087]; regulation of transcription by RNA polymerase II [GO:0006357]; response to lipopolysaccharide [GO:0032496]
XM_060059453.1 5.85108708439188e-11 cell migration [GO:0016477]; embryo development ending in birth or egg hatching [GO:0009792]; gastrulation [GO:0007369]; mRNA stabilization [GO:0048255]; negative regulation of nuclear-transcribed mRNA poly(A) tail shortening [GO:0060212]; neurogenesis [GO:0022008]; positive regulation of translation [GO:0045727]; pronephros development [GO:0048793]; response to cold [GO:0009409]
XM_060038917.1 9.71444383807465e-11 positive regulation by host of viral genome replication [GO:0044829]; positive regulation of protein targeting to membrane [GO:0090314]; positive regulation of viral process [GO:0048524]; regulation of acid-sensing ion channel activity [GO:1901585]; regulation of ion transmembrane transport [GO:0034765]
XM_060072201.1 1.16398952181429e-09 antiviral innate immune response [GO:0140374]; cytosolic pattern recognition receptor signaling pathway [GO:0002753]; negative regulation of innate immune response [GO:0045824]; negative regulation of MDA-5 signaling pathway [GO:0039534]; negative regulation of RIG-I signaling pathway [GO:0039536]; negative regulation of type I interferon production [GO:0032480]; positive regulation of MDA-5 signaling pathway [GO:1900245]; positive regulation of RIG-I signaling pathway [GO:1900246]; positive regulation of type I interferon production [GO:0032481]; regulation of innate immune response [GO:0045088]; response to bacterium [GO:0009617]; response to virus [GO:0009615]
XM_060069281.1 2.71579719203814e-09 activation of innate immune response [GO:0002218]; defense response to bacterium [GO:0042742]; defense response to virus [GO:0051607]; innate immune response [GO:0045087]; negative regulation of viral genome replication [GO:0045071]; RNA-mediated heterochromatin formation [GO:0031048]
XM_060069936.1 5.2895760703378e-09 cellular response to DNA damage stimulus [GO:0006974]; protein modification by small protein conjugation [GO:0032446]; protein ubiquitination [GO:0016567]; ubiquitin-dependent protein catabolic process [GO:0006511]
XM_060038661.1 1.03080201969747e-08
XM_060053374.1 1.47130354758428e-08
XM_060076665.1 1.55169394761084e-08 astral microtubule organization [GO:0030953]; cell division [GO:0051301]; cell migration [GO:0016477]; establishment of cell polarity [GO:0030010]; establishment of mitotic spindle localization [GO:0040001]; establishment of spindle orientation [GO:0051294]; exit from mitosis [GO:0010458]; Golgi organization [GO:0007030]; microtubule anchoring [GO:0034453]; microtubule bundle formation [GO:0001578]; microtubule cytoskeleton organization [GO:0000226]; microtubule nucleation [GO:0007020]; microtubule organizing center organization [GO:0031023]; mitotic spindle assembly [GO:0090307]; mitotic spindle organization [GO:0007052]; negative regulation of microtubule depolymerization [GO:0007026]; negative regulation of microtubule polymerization or depolymerization [GO:0031111]; negative regulation of stress fiber assembly [GO:0051497]; negative regulation of wound healing, spreading of epidermal cells [GO:1903690]; positive regulation of basement membrane assembly involved in embryonic body morphogenesis [GO:1904261]; positive regulation of epithelial cell migration [GO:0010634]; positive regulation of exocytosis [GO:0045921]; positive regulation of extracellular matrix disassembly [GO:0090091]; regulation of epithelial to mesenchymal transition [GO:0010717]; regulation of focal adhesion assembly [GO:0051893]; regulation of gastrulation [GO:0010470]; regulation of microtubule cytoskeleton organization [GO:0070507]; vesicle targeting [GO:0006903]
XM_060052059.1 2.87494723884798e-08 blood coagulation [GO:0007596]; myeloid cell development [GO:0061515]; regulation of mRNA stability [GO:0043488]; RNA catabolic process [GO:0006401]; RNA processing [GO:0006396]; translation [GO:0006412]
XM_060069277.1 2.87494723884798e-08 activation of innate immune response [GO:0002218]; defense response to bacterium [GO:0042742]; defense response to virus [GO:0051607]; innate immune response [GO:0045087]; negative regulation of viral genome replication [GO:0045071]; RNA-mediated heterochromatin formation [GO:0031048]
XM_060068061.1 3.44303976784469e-08 hematopoietic progenitor cell differentiation [GO:0002244]; protein ubiquitination [GO:0016567]; response to bacterium [GO:0009617]; ubiquitin-dependent protein catabolic process [GO:0006511]
XM_060050173.1 4.13791667888411e-08 negative regulation of cell cycle G1/S phase transition [GO:1902807]; negative regulation of cell division [GO:0051782]
XM_060060887.1 5.18446434464799e-08
XM_060060887.1 5.18446434464799e-08
XM_060056417.1 6.49622256621704e-08 chaperone-mediated protein complex assembly [GO:0051131]; protein folding [GO:0006457]; protein insertion into mitochondrial outer membrane [GO:0045040]; response to unfolded protein [GO:0006986]
XM_060037177.1 6.7743914689955e-08 hormone-mediated signaling pathway [GO:0009755]; positive regulation of DNA-templated transcription [GO:0045893]; regulation of transcription by RNA polymerase II [GO:0006357]; tissue development [GO:0009888]
XM_060075851.1 8.76137658495863e-08 blood coagulation [GO:0007596]; positive regulation of protein kinase B signaling [GO:0051897]; proteolysis [GO:0006508]
XM_060052126.1 1.21561119079485e-07 cell surface receptor signaling pathway [GO:0007166]; G2/M transition of mitotic cell cycle [GO:0000086]; mRNA processing [GO:0006397]; negative regulation of DNA-templated transcription [GO:0045892]; negative regulation of transcription by RNA polymerase II [GO:0000122]; positive regulation of RNA export from nucleus [GO:0046833]; positive regulation of translational initiation [GO:0045948]; regulation of alternative mRNA splicing, via spliceosome [GO:0000381]; regulation of mRNA splicing, via spliceosome [GO:0048024]; regulation of RNA export from nucleus [GO:0046831]; regulation of signal transduction [GO:0009966]; spermatogenesis [GO:0007283]; T cell receptor signaling pathway [GO:0050852]
XM_060044075.1 1.24248617352416e-07 actin filament bundle assembly [GO:0051017]; actin filament reorganization [GO:0090527]; activation of GTPase activity [GO:0090630]; cell adhesion [GO:0007155]; cell cycle [GO:0007049]; cell division [GO:0051301]; cell migration [GO:0016477]; cilium disassembly [GO:0061523]; cytoskeleton organization [GO:0007010]; integrin-mediated signaling pathway [GO:0007229]; learning or memory [GO:0007611]; lymphocyte migration into lymphoid organs [GO:0097021]; negative regulation of cell migration [GO:0030336]; positive regulation of cell migration [GO:0030335]; positive regulation of dendritic spine maintenance [GO:1902952]; positive regulation of immunological synapse formation [GO:2000522]; positive regulation of lymphocyte chemotaxis [GO:0140131]; positive regulation of osteoclast differentiation [GO:0045672]; positive regulation of protein localization [GO:1903829]; positive regulation of protein tyrosine kinase activity [GO:0061098]; positive regulation of substrate adhesion-dependent cell spreading [GO:1900026]; regulation of actin cytoskeleton organization [GO:0032956]; signal transduction [GO:0007165]; transmembrane receptor protein tyrosine kinase signaling pathway [GO:0007169]
XM_060061319.1 1.49045711783832e-07 cuticle development [GO:0042335]; cytokine-mediated signaling pathway [GO:0019221]; defense response [GO:0006952]; hormone biosynthetic process [GO:0042446]; hydrogen peroxide catabolic process [GO:0042744]; response to cAMP [GO:0051591]; response to oxidative stress [GO:0006979]; superoxide anion generation [GO:0042554]; thyroid hormone generation [GO:0006590]
top_25_DEGs_L.9.16 <- head(na.omit(DEGs_DAVID_FAtable_GO_L.9.16[order(DEGs_DAVID_FAtable_GO_L.9.16$padj), ]), 25)
top_25_DEGs_L.9.16$padj <- as.character(top_25_DEGs_L.9.16$padj) # prevents kable from auto-rounding our padj values
kable(top_25_DEGs_L.9.16[, c("gene", "padj", "Gene.Ontology..biological.process.")],
      row.names = FALSE,
      caption = "Top 25 DEGs for 9C v 16C (based on adjusted p-value)")  
Table 1.1: Top 25 DEGs for 9C v 16C (based on adjusted p-value)
gene padj Gene.Ontology..biological.process.
XM_060067933.1 3.34339884448267e-131 mRNA stabilization [GO:0048255]; positive regulation of translation [GO:0045727]; response to UV [GO:0009411]; stress granule assembly [GO:0034063]
XM_060035618.1 4.56825944864665e-39 cellular response to external biotic stimulus [GO:0071217]; CMP catabolic process [GO:0006248]; cytidine deamination [GO:0009972]; dCMP catabolic process [GO:0006249]; negative regulation of cell growth [GO:0030308]; negative regulation of nucleotide metabolic process [GO:0045980]; response to cycloheximide [GO:0046898]; UMP salvage [GO:0044206]
XM_060038070.1 9.4474915720096e-34 Golgi organization [GO:0007030]; ion transmembrane transport [GO:0034220]; phospholipid translocation [GO:0045332]
XM_060055200.1 2.24810444952908e-33 axon guidance [GO:0007411]; axon regeneration [GO:0031103]; brain development [GO:0007420]; cartilage morphogenesis [GO:0060536]; cell-cell adhesion [GO:0098609]; nervous system development [GO:0007399]; positive regulation of axon extension [GO:0045773]; positive regulation of gene expression [GO:0010628]
XM_060074499.1 3.37674667521652e-33
XM_060044415.1 2.23973084206205e-28 negative regulation of transcription by RNA polymerase II [GO:0000122]
XM_060059917.1 2.36351348255791e-27 cell cycle [GO:0007049]; cellular response to lipopolysaccharide [GO:0071222]; endodermal cell fate commitment [GO:0001711]; histone H2B ubiquitination [GO:0033523]; histone monoubiquitination [GO:0010390]; mRNA polyadenylation [GO:0006378]; negative regulation of apoptotic process [GO:0043066]; negative regulation of cell population proliferation [GO:0008285]; negative regulation of epithelial cell proliferation [GO:0050680]; negative regulation of fibroblast proliferation [GO:0048147]; negative regulation of G1/S transition of mitotic cell cycle [GO:2000134]; negative regulation of myeloid cell differentiation [GO:0045638]; negative regulation of transcription by RNA polymerase II [GO:0000122]; positive regulation of cell cycle G1/S phase transition [GO:1902808]; positive regulation of mRNA 3’-end processing [GO:0031442]; positive regulation of transcription elongation by RNA polymerase II [GO:0032968]; positive regulation of Wnt signaling pathway [GO:0030177]; protein destabilization [GO:0031648]; recruitment of 3’-end processing factors to RNA polymerase II holoenzyme complex [GO:0034402]; regulation of cell growth [GO:0001558]; regulation of transcription by RNA polymerase II [GO:0006357]; stem cell population maintenance [GO:0019827]; transcription elongation by RNA polymerase II promoter [GO:0006368]; Wnt signaling pathway [GO:0016055]
XM_060060459.1 5.7025219583369e-24 B cell differentiation [GO:0030183]; negative regulation of IRE1-mediated unfolded protein response [GO:1903895]; positive regulation of immunoglobulin production [GO:0002639]; response to endoplasmic reticulum stress [GO:0034976]; response to unfolded protein [GO:0006986]; ubiquitin-dependent ERAD pathway [GO:0030433]
XM_060035971.1 4.07619559044959e-23 mRNA processing [GO:0006397]; RNA splicing [GO:0008380]
XM_060069449.1 5.6638831038487e-23
XM_060071156.1 1.09590320360766e-22 fatty acid metabolic process [GO:0006631]
XM_060062807.1 1.12188038617635e-21 cellular response to interleukin-7 [GO:0098761]; mRNA processing [GO:0006397]; regulation of RNA splicing [GO:0043484]; RNA splicing [GO:0008380]
XM_060076847.1 2.19962301278613e-21 fatty acid elongation [GO:0030497]; sphingolipid biosynthetic process [GO:0030148]; very long-chain fatty acid biosynthetic process [GO:0042761]
XM_060046540.1 1.57081807452208e-20 telomere capping [GO:0016233]; telomere maintenance [GO:0000723]; telomere maintenance via telomere lengthening [GO:0010833]; vasculature development [GO:0001944]
XM_060069363.1 2.22712416434098e-20 eukaryotic translation initiation factor 4F complex assembly [GO:0097010]; formation of translation preinitiation complex [GO:0001731]; regulation of translational initiation [GO:0006446]
XM_060058017.1 2.55845315056141e-20
XM_060059787.1 5.41557921560011e-20 bile acid and bile salt transport [GO:0015721]; bile acid biosynthetic process [GO:0006699]; bile acid signaling pathway [GO:0038183]; cellular response to cholesterol [GO:0071397]; cellular response to glucose stimulus [GO:0071333]; cholesterol catabolic process [GO:0006707]; cholesterol homeostasis [GO:0042632]; negative regulation of collagen biosynthetic process [GO:0032966]; negative regulation of fatty acid biosynthetic process [GO:0045717]; positive regulation of cholesterol biosynthetic process [GO:0045542]; regulation of bile acid biosynthetic process [GO:0070857]; regulation of gene expression [GO:0010468]; response to ethanol [GO:0045471]; sterol metabolic process [GO:0016125]
XM_060060095.1 1.5961486946803e-19 cell chemotaxis [GO:0060326]; cell morphogenesis [GO:0000902]; cellular response to hepatocyte growth factor stimulus [GO:0035729]; epithelial cell proliferation [GO:0050673]; hepatocyte growth factor receptor signaling pathway [GO:0048012]; liver development [GO:0001889]; myoblast proliferation [GO:0051450]; negative regulation of apoptotic process [GO:0043066]; negative regulation of cysteine-type endopeptidase activity involved in apoptotic process [GO:0043154]; negative regulation of extrinsic apoptotic signaling pathway via death domain receptors [GO:1902042]; negative regulation of hydrogen peroxide-mediated programmed cell death [GO:1901299]; negative regulation of inflammatory response [GO:0050728]; negative regulation of interleukin-6 production [GO:0032715]; negative regulation of peptidyl-serine phosphorylation [GO:0033137]; negative regulation of release of cytochrome c from mitochondria [GO:0090201]; positive regulation of cell migration [GO:0030335]; positive regulation of DNA biosynthetic process [GO:2000573]; positive regulation of interleukin-10 production [GO:0032733]; positive regulation of MAPK cascade [GO:0043410]; positive regulation of peptidyl-tyrosine phosphorylation [GO:0050731]; positive regulation of phosphatidylinositol 3-kinase signaling [GO:0014068]; positive regulation of protein phosphorylation [GO:0001934]; proteolysis [GO:0006508]; regulation of branching involved in salivary gland morphogenesis by mesenchymal-epithelial signaling [GO:0060665]; regulation of p38MAPK cascade [GO:1900744]; regulation of tau-protein kinase activity [GO:1902947]; skeletal muscle cell proliferation [GO:0014856]
XM_060060095.1 1.5961486946803e-19 cell chemotaxis [GO:0060326]; cell morphogenesis [GO:0000902]; cellular response to hepatocyte growth factor stimulus [GO:0035729]; epithelial cell proliferation [GO:0050673]; hepatocyte growth factor receptor signaling pathway [GO:0048012]; liver development [GO:0001889]; myoblast proliferation [GO:0051450]; negative regulation of apoptotic process [GO:0043066]; negative regulation of cysteine-type endopeptidase activity involved in apoptotic process [GO:0043154]; negative regulation of extrinsic apoptotic signaling pathway via death domain receptors [GO:1902042]; negative regulation of hydrogen peroxide-mediated programmed cell death [GO:1901299]; negative regulation of inflammatory response [GO:0050728]; negative regulation of interleukin-6 production [GO:0032715]; negative regulation of peptidyl-serine phosphorylation [GO:0033137]; negative regulation of release of cytochrome c from mitochondria [GO:0090201]; positive regulation of cell migration [GO:0030335]; positive regulation of DNA biosynthetic process [GO:2000573]; positive regulation of interleukin-10 production [GO:0032733]; positive regulation of MAPK cascade [GO:0043410]; positive regulation of peptidyl-tyrosine phosphorylation [GO:0050731]; positive regulation of phosphatidylinositol 3-kinase signaling [GO:0014068]; positive regulation of protein phosphorylation [GO:0001934]; proteolysis [GO:0006508]; regulation of branching involved in salivary gland morphogenesis by mesenchymal-epithelial signaling [GO:0060665]; regulation of p38MAPK cascade [GO:1900744]; regulation of tau-protein kinase activity [GO:1902947]; skeletal muscle cell proliferation [GO:0014856]
XM_060043501.1 2.73868167705382e-19 angiogenesis [GO:0001525]; body fluid secretion [GO:0007589]; collagen fibril organization [GO:0030199]; fibrinolysis [GO:0042730]; membrane raft assembly [GO:0001765]; mRNA transcription by RNA polymerase II [GO:0042789]; negative regulation of low-density lipoprotein particle receptor catabolic process [GO:0032804]; negative regulation of receptor internalization [GO:0002091]; osteoclast development [GO:0036035]; positive regulation of binding [GO:0051099]; positive regulation of exocytosis [GO:0045921]; positive regulation of fibroblast proliferation [GO:0048146]; positive regulation of low-density lipoprotein particle clearance [GO:1905581]; positive regulation of low-density lipoprotein particle receptor binding [GO:1905597]; positive regulation of low-density lipoprotein receptor activity [GO:1905599]; positive regulation of plasma membrane repair [GO:1905686]; positive regulation of plasminogen activation [GO:0010756]; positive regulation of protein phosphorylation [GO:0001934]; positive regulation of receptor recycling [GO:0001921]; positive regulation of receptor-mediated endocytosis involved in cholesterol transport [GO:1905602]; positive regulation of transcription by RNA polymerase II [GO:0045944]; positive regulation of vacuole organization [GO:0044090]; positive regulation of vesicle fusion [GO:0031340]; protein localization to plasma membrane [GO:0072659]; regulation of neurogenesis [GO:0050767]; vesicle budding from membrane [GO:0006900]
XM_060064095.1 1.25760400894235e-18 microtubule cytoskeleton organization [GO:0000226]; mitotic cell cycle [GO:0000278]
XM_060036420.1 6.41686755963648e-18 cell division [GO:0051301]; chromosome segregation [GO:0007059]; negative regulation of apoptotic process [GO:0043066]; negative regulation of DNA-templated transcription [GO:0045892]; protein phosphorylation [GO:0006468]; vasculature development [GO:0001944]
XM_060048785.1 1.49379466840533e-17
XM_060074056.1 1.01658426074323e-16 cell differentiation [GO:0030154]; negative regulation of smoothened signaling pathway [GO:0045879]; protein ubiquitination [GO:0016567]; spermatogenesis [GO:0007283]; ubiquitin-dependent protein catabolic process [GO:0006511]
XM_060044104.1 1.11749934262127e-16

1.3.2 View over-represented (enriched) processes

1.3.2.1 GO terms

First, let’s grab just the GO terms for biological processes, and sort and filter by the Bonferroni-adjusted p-value

DEGs_DAVID_FAchart_L.9.0_enrichedGOBP <- DEGs_DAVID_FAchart_L.9.0 %>% 
  filter(Category == "GOTERM_BP_DIRECT") %>%
  filter(Bonferroni < 0.05) %>%
  arrange(Bonferroni)
DEGs_DAVID_FAchart_L.9.5_enrichedGOBP <- DEGs_DAVID_FAchart_L.9.5 %>% 
  filter(Category == "GOTERM_BP_DIRECT") %>%
  filter(Bonferroni < 0.05) %>%
  arrange(Bonferroni)
DEGs_DAVID_FAchart_L.9.16_enrichedGOBP <- DEGs_DAVID_FAchart_L.9.16 %>% 
  filter(Category == "GOTERM_BP_DIRECT") %>%
  filter(Bonferroni < 0.05) %>%
  arrange(Bonferroni)
DEGs_DAVID_FAchart_L.9.0_enrichedGOBP$Bonferroni <- as.character(DEGs_DAVID_FAchart_L.9.0_enrichedGOBP$Bonferroni) # prevents kable from auto-rounding our padj values
kable(DEGs_DAVID_FAchart_L.9.0_enrichedGOBP[, c("Term", "Bonferroni")],
      row.names = FALSE,
      caption = "Enriched GO Biological Processes for 9C v 0C (based on adjusted p-value)")
Table 1.2: Enriched GO Biological Processes for 9C v 0C (based on adjusted p-value)
Term Bonferroni
GO:0006334~nucleosome assembly 8.80938655356545e-11
GO:0000398~mRNA splicing, via spliceosome 4.109024835941e-07
GO:0006397~mRNA processing 8.19662548501299e-07
GO:0008380~RNA splicing 1.56335007539532e-06
GO:0042742~defense response to bacterium 0.000670834509616358
GO:0000387~spliceosomal snRNP assembly 0.0279648979525878
DEGs_DAVID_FAchart_L.9.5_enrichedGOBP$Bonferroni <- as.character(DEGs_DAVID_FAchart_L.9.5_enrichedGOBP$Bonferroni) # prevents kable from auto-rounding our padj values
kable(DEGs_DAVID_FAchart_L.9.5_enrichedGOBP[, c("Term", "Bonferroni")],
      row.names = FALSE,
      caption = "Enriched GO Biological Processes for 9C v 5C (based on adjusted p-value)")
Table 1.2: Enriched GO Biological Processes for 9C v 5C (based on adjusted p-value)
Term Bonferroni
GO:0051301~cell division 1.89957214585812e-05
GO:0006260~DNA replication 0.0235737394986572
GO:0007049~cell cycle 0.0262123687761406
DEGs_DAVID_FAchart_L.9.16_enrichedGOBP$Bonferroni <- as.character(DEGs_DAVID_FAchart_L.9.16_enrichedGOBP$Bonferroni) # prevents kable from auto-rounding our padj values
kable(DEGs_DAVID_FAchart_L.9.16_enrichedGOBP[, c("Term", "Bonferroni")],
      row.names = FALSE,
      caption = "Enriched GO Biological Processes for 9C v 16C (based on adjusted p-value)") 
Table 1.2: Enriched GO Biological Processes for 9C v 16C (based on adjusted p-value)
Term Bonferroni
GO:0051301~cell division 0.00392696398105574
GO:0007049~cell cycle 0.0169894770671077

1.3.2.2 Uniprot Keywords

First, let’s grab just the Uniprot keywords for biological processes, and sort and filter by the Bonferroni-adjusted p-value

DEGs_DAVID_FAchart_L.9.0_enrichedKWBP <- DEGs_DAVID_FAchart_L.9.0 %>% 
  filter(Category == "UP_KW_BIOLOGICAL_PROCESS") %>%
  filter(Bonferroni < 0.05) %>%
  arrange(Bonferroni)
DEGs_DAVID_FAchart_L.9.5_enrichedKWBP <- DEGs_DAVID_FAchart_L.9.5 %>% 
  filter(Category == "UP_KW_BIOLOGICAL_PROCESS") %>%
  filter(Bonferroni < 0.05) %>%
  arrange(Bonferroni)
DEGs_DAVID_FAchart_L.9.16_enrichedKWBP <- DEGs_DAVID_FAchart_L.9.16 %>% 
  filter(Category == "UP_KW_BIOLOGICAL_PROCESS") %>%
  filter(Bonferroni < 0.05) %>%
  arrange(Bonferroni)
DEGs_DAVID_FAchart_L.9.0_enrichedKWBP$Bonferroni <- as.character(DEGs_DAVID_FAchart_L.9.0_enrichedKWBP$Bonferroni) # prevents kable from auto-rounding our padj values
kable(DEGs_DAVID_FAchart_L.9.0_enrichedKWBP[, c("Term", "Bonferroni")],
      row.names = FALSE,
      caption = "Enriched Biological Processes for 9C v 0C (based on adjusted p-value)")
Table 1.3: Enriched Biological Processes for 9C v 0C (based on adjusted p-value)
Term Bonferroni
KW-0507~mRNA processing 1.97841742988203e-12
KW-0508~mRNA splicing 4.5173864648973e-11
KW-0443~Lipid metabolism 2.05127739505429e-06
KW-0276~Fatty acid metabolism 5.35712030302893e-06
KW-0698~rRNA processing 0.000819548815968574
KW-0648~Protein biosynthesis 0.00106775940410841
KW-0819~tRNA processing 0.00220819268854755
KW-0753~Steroid metabolism 0.0065230502138125
KW-0235~DNA replication 0.019886097155714
KW-0153~Cholesterol metabolism 0.0260874815857324
KW-1207~Sterol metabolism 0.0311175727594913
DEGs_DAVID_FAchart_L.9.5_enrichedKWBP$Bonferroni <- as.character(DEGs_DAVID_FAchart_L.9.5_enrichedKWBP$Bonferroni) # prevents kable from auto-rounding our padj values
kable(DEGs_DAVID_FAchart_L.9.5_enrichedKWBP[, c("Term", "Bonferroni")],
      row.names = FALSE,
      caption = "Enriched Biological Processes for 9C v 5C (based on adjusted p-value)")
Table 1.3: Enriched Biological Processes for 9C v 5C (based on adjusted p-value)
Term Bonferroni
KW-0498~Mitosis 1.40384365354684e-07
KW-0131~Cell cycle 3.58079999429606e-07
KW-0132~Cell division 1.77332990702883e-06
KW-0235~DNA replication 0.000334698790933508
DEGs_DAVID_FAchart_L.9.16_enrichedKWBP$Bonferroni <- as.character(DEGs_DAVID_FAchart_L.9.16_enrichedKWBP$Bonferroni) # prevents kable from auto-rounding our padj values
kable(DEGs_DAVID_FAchart_L.9.16_enrichedKWBP[, c("Term", "Bonferroni")],
      row.names = FALSE,
      caption = "Enriched Biological Processes for 9C v 16C (based on adjusted p-value)") 
Table 1.3: Enriched Biological Processes for 9C v 16C (based on adjusted p-value)
Term Bonferroni
KW-0498~Mitosis 2.10964893443411e-07
KW-0131~Cell cycle 1.58084021739668e-06
KW-0132~Cell division 5.98592580525192e-06
KW-0545~Nucleotide biosynthesis 0.013511927773769
KW-0275~Fatty acid biosynthesis 0.015650085219496
KW-0276~Fatty acid metabolism 0.0314108212860802
LS0tCnRpdGxlOiAiMDgtY29kLVJOQXNlcS1HTy1hbm5vdGF0aW9uIgphdXRob3I6ICJLYXRobGVlbiBEdXJraW4iCmRhdGU6ICIyMDI0LTA0LTE1IgphbHdheXNfYWxsb3dfaHRtbDogdHJ1ZQpvdXRwdXQ6IAogIGJvb2tkb3duOjpodG1sX2RvY3VtZW50MjoKICAgIHRoZW1lOiBjb3NtbwogICAgdG9jOiB0cnVlCiAgICB0b2NfZmxvYXQ6IHRydWUKICAgIG51bWJlcl9zZWN0aW9uczogdHJ1ZQogICAgY29kZV9mb2xkaW5nOiBzaG93CiAgICBjb2RlX2Rvd25sb2FkOiB0cnVlCiAgZ2l0aHViX2RvY3VtZW50OgogICAgdG9jOiB0cnVlCiAgICB0b2NfZGVwdGg6IDMKICAgIG51bWJlcl9zZWN0aW9uczogdHJ1ZQogICAgaHRtbF9wcmV2aWV3OiB0cnVlIAotLS0KCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQpsaWJyYXJ5KGtuaXRyKQprbml0cjo6b3B0c19jaHVuayRzZXQoCiAgZWNobyA9IFRSVUUsICAgICAgICAgIyBEaXNwbGF5IGNvZGUgY2h1bmtzCiAgZXZhbCA9IFRSVUUsICAgICAgICAjIEV2YWx1YXRlIGNvZGUgY2h1bmtzCiAgd2FybmluZyA9IEZBTFNFLCAgICAgIyBIaWRlIHdhcm5pbmdzCiAgbWVzc2FnZSA9IEZBTFNFLCAgICAgIyBIaWRlIG1lc3NhZ2VzCiAgY29tbWVudCA9ICIiICAgICAgICAgIyBQcmV2ZW50cyBhcHBlbmRpbmcgJyMjJyB0byBiZWdpbm5pbmcgb2YgbGluZXMgaW4gY29kZSBvdXRwdXQKKQpgYGAKClRoaXMgY29kZSBkZXBlbmRzIG9uIHRoZSBkYXRhYmFzZSAoYEdfbWFjcm9jZXBoYWx1c19JRG1hcHBpbmdfMjAyNF8wNF8xNy50YWJgKSBvZiAqRy5tYWNyb2NlcGhhbHVzKiB0cmFuc2NyaXB0IElEcyBhbmQgYXNzb2NpYXRlZCBHTyB0ZXJtcyBnZW5lcmF0ZWQgaW4gMDMtdHJhbnNjcmlwdG9tZS1hbm5vdGF0aW9uLlJtZCwgQU5EIG9uIGxpc3RzIG9mIGRpZmZlcmVudGlhbGx5IGV4cHJlc3NlZCBnZW5lcyAoREVHcykgZ2VuZXJhdGVkIGluIDA3LWNvZC1STkFzZXEtREVTZXEyLlJtZC4KClRoaXMgY29kZSBpZGVudGlmaWVzIG92ZXJyZXByZXNlbnRlZCBnZW5lIG9udG9sb2d5IChHTykgdGVybXMgaW4gKkcubWFjcm9jZXBoYWx1cyogUk5BIHNlcXVlbmNpbmcgZGF0YQoKSW5wdXRzOiAtIHRyYW5zY3JpcHQgSUQvR08gdGVybSBkYXRhYmFzZSAoYEdfbWFjcm9jZXBoYWx1c19ybmFfSURtYXBwaW5nXzIwMjRfMDRfMTcudGFiYCkgLSBERUdzCgpJbiAwMy10cmFuc2NyaXB0b21lLWFubm90YXRpb24uUm1kIHdlIHVzZWQgQkxBU1QgYW5kIFVuaXByb3QvU3dpc3NQcm90IHRvIG9idGFpbiBVbmlQcm90IEFjY2Vzc2lvbiBudW1iZXJzIGZvciBlYWNoIHRyYW5zY3JpcHQgaW4gdGhlICpHLiBtYWNyb2NlcGhhbHVzKiB0cmFuc2NyaXB0b21lLiBXZSB0aGVuIHVzZWQgdGhvc2UgQWNjZXNzaW9uIG51bWJlcnMgdG8gb2J0YWluIEdPIHRlcm1zIGZvciBlYWNoIHRyYW5zY3JpcHQsIGZ1bmN0aW9uYWxseSBjcmVhdGluZyBhIGRhdGFiYXNlIHdoaWNoIG1hdGNoZXMgKkcubWFjcm9jZXBoYWx1cyogdHJhbnNjcmlwdHMgd2l0aCBhc3NvY2lhdGVkIEdPIHRlcm1zLgoKSW4gMDctY29kLVJOQXNlcS1ERVNlcTIuUm1kIHdlIGlkZW50aWZpZWQgc2V0cyBvZiBzaWduaWZpY2FudGx5IGRpZmZlcmVudGlhbGx5IGV4cHJlc3NlZCBnZW5lcyAoREVHcykgYmV0d2VlbiBwYWlycyBvZiB0cmVhdG1lbnRzIChlLmcuLCBMaXZlciB0aXNzdWUgZm9yIDlDIHZzLiAxNkMpLgoKTm93IHdlIHdhbnQgdG8gdXNlIHRoZSBkYXRhYmFzZSB0byBpZGVudGlmeSBHTyB0ZXJtcyBhc3NvY2lhdGVkIHdpdGggb3VyIGxpc3RzIG9mIERFR3MsIGFuZCB0byBldmFsdWF0ZSB3aGljaCBHTyB0ZXJtcyBhcmUgb3ZlcnJlcHJlc2VudGVkLgoKaHR0cHM6Ly93aWtpcy51dGV4YXMuZWR1L2Rpc3BsYXkvYmlvaXRlYW0vR08rRW5yaWNobWVudCt1c2luZytnb3NlcSM6fjp0ZXh0PWdvc2VxJTIwaXMlMjBhbiUyMFIlMjBwYWNrYWdlLGluJTIwb3VyJTIwZGlmZmVyZW50aWFsbHklMjBleHByZXNzZWQlMjBnZW5lcy4KaHR0cHM6Ly9iaW9jb25kdWN0b3Iub3JnL3BhY2thZ2VzL2RldmVsL2Jpb2MvdmlnbmV0dGVzL2dvc2VxL2luc3QvZG9jL2dvc2VxLnBkZgoKCmBgYHtyIGxvYWQtcGFja2FnZXMsIGV2YWw9VFJVRX0KIyBMaXN0IG9mIHBhY2thZ2VzIHdlIHdhbnQgdG8gaW5zdGFsbCAocnVuIGV2ZXJ5IHRpbWUpCmxpYnJhcnkodGlkeXZlcnNlKQpsaWJyYXJ5KGRwbHlyKQpsaWJyYXJ5KG1hZ3JpdHRyKQpsaWJyYXJ5KGtuaXRyKQpsaWJyYXJ5KGdndmVubikKCmBgYAoKYGBge3IgbG9hZC1kYXRhfQpnbWFjX2lkbWFwIDwtIHJlYWQuY3N2KCIuLi9vdXRwdXQvMDMtdHJhbnNjcmlwdG9tZS1hbm5vdGF0aW9uL0dfbWFjcm9jZXBoYWx1c19ybmFfSURtYXBwaW5nXzIwMjRfMDRfMTcudGFiIiwgc2VwPSdcdCcpICU+JQogIHN1YnNldChzZWxlY3Q9LVgpICMgcmVtb3ZlIHN1cGVyZmxvdXMgY29sdW1uIGNvbnRhaW5pbmcgcm93SURzCgpERUdzX0wuOS4wIDwtIHJlYWQuY3N2KCIuLi9vdXRwdXQvMDctY29kLVJOQXNlcS1ERVNlcTIvR21hY19ERUdzX3NpZ19MLjkuMF9ub3JtLnRhYiIsIHNlcD0nXHQnKSAlPiUKICBzdWJzZXQoc2VsZWN0PS1YKSAjIHJlbW92ZSBzdXBlcmZsb3VzIGNvbHVtbiBjb250YWluaW5nIHJvd0lEcwpERUdzX0wuOS41IDwtIHJlYWQuY3N2KCIuLi9vdXRwdXQvMDctY29kLVJOQXNlcS1ERVNlcTIvR21hY19ERUdzX3NpZ19MLjkuNV9ub3JtLnRhYiIsIHNlcD0nXHQnKSAlPiUKICBzdWJzZXQoc2VsZWN0PS1YKSAjIHJlbW92ZSBzdXBlcmZsb3VzIGNvbHVtbiBjb250YWluaW5nIHJvd0lEcwpERUdzX0wuOS4xNiA8LSByZWFkLmNzdigiLi4vb3V0cHV0LzA3LWNvZC1STkFzZXEtREVTZXEyL0dtYWNfREVHc19zaWdfTC45LjE2X25vcm0udGFiIiwgc2VwPSdcdCcpICU+JQogIHN1YnNldChzZWxlY3Q9LVgpICMgcmVtb3ZlIHN1cGVyZmxvdXMgY29sdW1uIGNvbnRhaW5pbmcgcm93SURzCgprYWxsaXN0b19jb3VudHNfbWF0cml4IDwtIHJlYWQuY3N2KCIuLi9vdXRwdXQvMDYtY29kLVJOQXNlcS1hbGlnbm1lbnQva2FsbGlzdG8va2FsbGlzdG8uaXNvZm9ybS5jb3VudHMubWF0cml4Iiwgc2VwPSdcdCcpCmthbGxpc3RvX2NvdW50c19tYXRyaXhbLC0xXSA8LSByb3VuZChrYWxsaXN0b19jb3VudHNfbWF0cml4WywtMV0sIGRpZ2l0cyA9IDApICMgcm91bmQgY291bnRzIHRvIGludGVnZXJzCmBgYAoKIyBBbm5vdGF0ZSBERUdzIHVzaW5nIEdPIHRlcm1zCgpgYGB7ciBqb2luLURFRy1HTy1kYXRhfQojIEFsbCBERUdzCkRFR3NfR09fTC45LjAgPC0gbGVmdF9qb2luKERFR3NfTC45LjAsIGdtYWNfaWRtYXAsIGJ5PWMoImdlbmUiID0gIlYxIikpCkRFR3NfR09fTC45LjUgPC0gbGVmdF9qb2luKERFR3NfTC45LjUsIGdtYWNfaWRtYXAsIGJ5PWMoImdlbmUiID0gIlYxIikpCkRFR3NfR09fTC45LjE2IDwtIGxlZnRfam9pbihERUdzX0wuOS4xNiwgZ21hY19pZG1hcCwgYnk9YygiZ2VuZSIgPSAiVjEiKSkKCiMgVW5pcXVlIERFR3MKREVHc19HT19MLjkuMF91bmlxdWUgPC0gREVHc19HT19MLjkuMCAlPiUgZGlzdGluY3QoZ2VuZSwgLmtlZXBfYWxsID0gVFJVRSkKREVHc19HT19MLjkuNV91bmlxdWUgPC0gREVHc19HT19MLjkuNSAlPiUgZGlzdGluY3QoZ2VuZSwgLmtlZXBfYWxsID0gVFJVRSkKREVHc19HT19MLjkuMTZfdW5pcXVlIDwtIERFR3NfR09fTC45LjE2ICU+JSBkaXN0aW5jdChnZW5lLCAua2VlcF9hbGwgPSBUUlVFKQoKIyBzdW1tYXJpemUgY291bnRzCnByaW50KHBhc3RlKCJBbGwgREVHczoiLCBucm93KERFR3NfR09fTC45LjApLCAiKDlDIHYgMEMpLCIsIG5yb3coREVHc19HT19MLjkuNSksICIoOUMgdiA1QyksIiwgbnJvdyhERUdzX0dPX0wuOS4xNiksICIoOUMgdiAxNkMpIikpCnByaW50KHBhc3RlKCJVbmlxdWUgREVHczoiLCBucm93KERFR3NfR09fTC45LjBfdW5pcXVlKSwgIig5QyB2IDBDKSwiLCBucm93KERFR3NfR09fTC45LjVfdW5pcXVlKSwgIig5QyB2IDVDKSwiLCBucm93KERFR3NfR09fTC45LjE2X3VuaXF1ZSksICIoOUMgdiAxNkMpIikpCgojIFNhdmUKd3JpdGUudGFibGUoREVHc19HT19MLjkuMF91bmlxdWUsICIuLi9vdXRwdXQvMDgtY29kLVJOQXNlcS1HTy1hbm5vdGF0aW9uL0dtYWNfREVHc19HT19MLjkuMF91bmlxdWUudGFiIiwgc2VwID0gIlx0Iiwgcm93Lm5hbWVzID0gVFJVRSwgY29sLm5hbWVzID0gTkEpCndyaXRlLnRhYmxlKERFR3NfR09fTC45LjVfdW5pcXVlLCAiLi4vb3V0cHV0LzA4LWNvZC1STkFzZXEtR08tYW5ub3RhdGlvbi9HbWFjX0RFR3NfR09fTC45LjVfdW5pcXVlLnRhYiIsIHNlcCA9ICJcdCIsIHJvdy5uYW1lcyA9IFRSVUUsIGNvbC5uYW1lcyA9IE5BKQp3cml0ZS50YWJsZShERUdzX0dPX0wuOS4xNl91bmlxdWUsICIuLi9vdXRwdXQvMDgtY29kLVJOQXNlcS1HTy1hbm5vdGF0aW9uL0dtYWNfREVHc19HT19MLjkuMTZfdW5pcXVlLnRhYiIsIHNlcCA9ICJcdCIsIHJvdy5uYW1lcyA9IFRSVUUsIGNvbC5uYW1lcyA9IE5BKQpgYGAKCiMjIFZlbm4gZGlhZ3JhbSBvZiBERUcgY291bnRzIGFjY3Jvc3MgdHJlYXRtZW50cwpgYGB7cn0KIyBNYWtlIGxpc3QKZGVnX2NvdW50c191bmlxdWUgPC0gbGlzdCgKICAiOUMgdiAwQyIgPSB1bmlxdWUoREVHc19HT19MLjkuMCRnZW5lKSwKICAiOUMgdiA1QyIgPSB1bmlxdWUoREVHc19HT19MLjkuNSRnZW5lKSwKICAiOUMgdiAxNkMiID0gdW5pcXVlKERFR3NfR09fTC45LjE2JGdlbmUpCikKCiMgTWFrZSB2ZW5uIGRpYWdyYW1zCmdndmVubihkZWdfY291bnRzX3VuaXF1ZSwKICAgICAgIGZpbGxfY29sb3IgPSBjKCJibHVlIiwgInllbGxvdyIsICJyZWQiKSkKCmBgYAoKIyMgREVHIGJhciBwbG90cwoKYGBge3J9CiMgQ3JlYXRlIGEgZGF0YSBmcmFtZSB3aXRoIGV4dHJhY3RlZCBjb2x1bW5zCmNvbWJpbmVkX3VuaXF1ZV9ERUdfY291bnRzIDwtIGRhdGEuZnJhbWUoCiAgREVHc19jb3VudCA9IGMobGVuZ3RoKHVuaXF1ZShERUdzX0dPX0wuOS4wJGdlbmUpKSwgCiAgICAgICAgICAgICAgICAgbGVuZ3RoKHVuaXF1ZShERUdzX0dPX0wuOS41JGdlbmUpKSwgCiAgICAgICAgICAgICAgICAgbGVuZ3RoKHVuaXF1ZShERUdzX0dPX0wuOS4xNiRnZW5lKSkpLAogIHRyZWF0bWVudCA9IGZhY3RvcihjKCI5QyB2IDBDIiwgIjlDIHYgNUMiLCAiOUMgdiAxNkMiKSwgCiAgICAgICAgICAgICAgICAgICAgIGxldmVscz1jKCI5QyB2IDBDIiwgIjlDIHYgNUMiLCAiOUMgdiAxNkMiKSkpCgojIEFzc2lnbiBjb2xvcnMKY3VzdG9tX2NvbG9ycyA8LSBjKCI5QyB2IDBDIj0iYmx1ZSIsICI5QyB2IDVDIj0ieWVsbG93IiwgIjlDIHYgMTZDIj0icmVkIikKCiMgQ3JlYXRlIGEgYmFyIHBsb3QKZ2dwbG90KGNvbWJpbmVkX3VuaXF1ZV9ERUdfY291bnRzLCBhZXMoeCA9IHRyZWF0bWVudCwgeSA9IERFR3NfY291bnQsIGZpbGwgPSB0cmVhdG1lbnQpKSArCiAgZ2VvbV9jb2woKSArCiAgbGFicyh0aXRsZSA9ICJCYXIgUGxvdCBvZiBVbmlxdWUgREVHcyBhY3Jvc3MgVHJlYXRtZW50cyIsCiAgICAgICB4ID0gIkRFR3MiLAogICAgICAgeSA9ICJDb3VudCIpICsKICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBjdXN0b21fY29sb3JzKSArCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IERFR3NfY291bnQpLCB2anVzdCA9IC0wLjUpICsKICB0aGVtZV9taW5pbWFsKCkKYGBgCgoKIyMgR08gRW5yaWNobWVudAoKRmlyc3QsIGlzb2xhdGUgbGlzdHMgb2YgVW5pcHJvdCBBY2Nlc3Npb24gbnVtYmVycyBmcm9tIGVhY2ggc2V0IG9mZiBzaWduaWZpY2FudCBERUdzLgpgYGB7ciBnZXQtdW5pcHJvdC1hY2Vzc2lvbi1udW1zLURFR3N9CnVuaXByb3RBY2Vzc2lvbnNfREVHc19MLjkuMCA8LSBuYS5vbWl0KERFR3NfR09fTC45LjBfdW5pcXVlJFYzKQp3cml0ZS50YWJsZSh1bmlwcm90QWNlc3Npb25zX0RFR3NfTC45LjAsICIuLi9vdXRwdXQvMDgtY29kLVJOQXNlcS1HTy1hbm5vdGF0aW9uL0dtYWNfdW5pcHJvdEFjZXNzaW9uc19ERUdzX0wuOS4wLnR4dCIpCnVuaXByb3RBY2Vzc2lvbnNfREVHc19MLjkuNSA8LSBuYS5vbWl0KERFR3NfR09fTC45LjVfdW5pcXVlJFYzKQp3cml0ZS50YWJsZSh1bmlwcm90QWNlc3Npb25zX0RFR3NfTC45LjUsICIuLi9vdXRwdXQvMDgtY29kLVJOQXNlcS1HTy1hbm5vdGF0aW9uL0dtYWNfdW5pcHJvdEFjZXNzaW9uc19ERUdzX0wuOS41LnR4dCIpCnVuaXByb3RBY2Vzc2lvbnNfREVHc19MLjkuMTYgPC0gbmEub21pdChERUdzX0dPX0wuOS4xNl91bmlxdWUkVjMpCndyaXRlLnRhYmxlKHVuaXByb3RBY2Vzc2lvbnNfREVHc19MLjkuMTYsICIuLi9vdXRwdXQvMDgtY29kLVJOQXNlcS1HTy1hbm5vdGF0aW9uL0dtYWNfdW5pcHJvdEFjZXNzaW9uc19ERUdzX0wuOS4xNi50eHQiKQpgYGAKCkFuZCByZWZvcm1hdCB0byBnZXQgcmlkIG9mIHN1cGVyZmx1b3VzIGNoYXJhY3RlcnMKYGBge3IgZm9ybWF0LWFjZXNzaW9uLW51bXMtREVHcywgZW5naW5lPSdiYXNoJ30KIyBXZSBuZWVkIHRvIDEpIHJlbW92ZSB0aGUgZmlyc3QgbGluZSwgMikgZ2V0IHJpZCBvZiB0aGUgcm93IG51bWJlcnMsIGFuZCAzKSByZW1vdmUgZXh0cmEgIiBjaGFyYWN0ZXJzCnNlZCAnMWQnIC4uL291dHB1dC8wOC1jb2QtUk5Bc2VxLUdPLWFubm90YXRpb24vR21hY191bmlwcm90QWNlc3Npb25zX0RFR3NfTC45LjAudHh0IHwgXAogIGF3ayAne3ByaW50ICQyfScgfCBcCiAgdHIgLWQgJyInIFwKICA+IC4uL291dHB1dC8wOC1jb2QtUk5Bc2VxLUdPLWFubm90YXRpb24vR21hY191bmlwcm90QWNlc3Npb25zX0RFR3NfTC45LjBfZm9ybWF0dGVkLnR4dAogIApzZWQgJzFkJyAuLi9vdXRwdXQvMDgtY29kLVJOQXNlcS1HTy1hbm5vdGF0aW9uL0dtYWNfdW5pcHJvdEFjZXNzaW9uc19ERUdzX0wuOS41LnR4dCB8IFwKICBhd2sgJ3twcmludCAkMn0nIHwgXAogIHRyIC1kICciJyBcCiAgPiAuLi9vdXRwdXQvMDgtY29kLVJOQXNlcS1HTy1hbm5vdGF0aW9uL0dtYWNfdW5pcHJvdEFjZXNzaW9uc19ERUdzX0wuOS41X2Zvcm1hdHRlZC50eHQKICAKc2VkICcxZCcgLi4vb3V0cHV0LzA4LWNvZC1STkFzZXEtR08tYW5ub3RhdGlvbi9HbWFjX3VuaXByb3RBY2Vzc2lvbnNfREVHc19MLjkuMTYudHh0IHwgXAogIGF3ayAne3ByaW50ICQyfScgfCBcCiAgdHIgLWQgJyInIFwKICA+IC4uL291dHB1dC8wOC1jb2QtUk5Bc2VxLUdPLWFubm90YXRpb24vR21hY191bmlwcm90QWNlc3Npb25zX0RFR3NfTC45LjE2X2Zvcm1hdHRlZC50eHQKYGBgCgpXZSBhbHNvIHdhbnQgdG8gZ2V0IGEgbGlzdCBvZiBVbmlwcm90IEFjY2Vzc2lvbiBudW1iZXJzIGZvciBvdXIgImJhY2tncm91bmQiLiBUaGlzIGlzIGEgcmVmZXJlbmNlIG9mIGFsbCB0cmFuc2NyaXB0cyB3ZSB3b3VsZCBleHBlY3QgdG8gZmluZCBpbiBvdXIgc2FtcGxlcy4gV2UgY291bGQganVzdCB1c2UgSURzIGZyb20gb3VyIGZ1bGwgcmVmZXJlbmNlIHRyYW5zY3JpcHRvbWUsIGJ1dCB0aGlzIG1heSBpbmNsdWRlIHRyYW5zY3JpcHRzIHdlIHdvdWxkIG5vdCBhY3R1YWxseSBleHBlY3QgdG8gZmluZCBpbiBvdXIgc2FtcGxlcyAoZS5nLiB0aGUgdHJhbnNjcmlwdG9tZSBtYXkgY29udGFpbiBnb25hZC1zcGVjaWZpYyB0cmFuc2NyaXB0cyB0aGF0IHdvdWxkIG5vdCBhcHBlYXIgaW4gb3VyIGxpdmVyIHRpc3N1ZSBzYW1wbGVzKS4gVG8gZmlsdGVyIGZvciBvbmx5IHRyYW5zY3JpcHRzIGZvdW5kIGluIG91ciBzYW1wbGVzLCB3ZSBjYW4gMSkgZmlsdGVyIG91ciBrYWxsaXN0byBjb3VudCBtYXRyaXggdG8gcmV0YWluIG9ubHkgdHJhbnNjcmlwdHMgcHJlc2VudCBpbiBhdCBsZWFzdCBvbmUgc2FtcGxlLCBhbmQgdGhlbiAyKSBqb2luIHRoaXMgZmlsdGVyZWQgY291bnQgbWF0cml4IHdpdGggb3VyIHRyYW5zY3JpcHQvVW5pcHJvdCBJRCBkYXRhYmFzZS4KCmBgYHtyIGNvbWJpbmUtY291bnRzLWFuZC1JRG1hcH0KIyBSZW1vdmUgYW55IHRyYW5zY3JpcHRzIHRoYXQgZG8gbm90IGFwcGVhciBpbiBhbnkgc2FtcGxlCmthbGxpc3RvX2NvdW50c19maWx0ZXJlZCA8LSBrYWxsaXN0b19jb3VudHNfbWF0cml4W3Jvd1N1bXMoa2FsbGlzdG9fY291bnRzX21hdHJpeFssIC0xXSAhPSAwKSA+IDAsIF0Kb2dfbnVtIDwtIG5yb3cgKGthbGxpc3RvX2NvdW50c19tYXRyaXgpCmZpbHRlcmVkX251bSA8LSBucm93KGthbGxpc3RvX2NvdW50c19maWx0ZXJlZCkKCnBhc3RlKCJGaWx0ZXJlZCBrYWxsaXN0byBjb3VudHMgbWF0cml4IGZyb20gIiwgb2dfbnVtLCAidHJhbnNjcmlwdHMgdG8gIiwgZmlsdGVyZWRfbnVtLCAidHJhbnNjcmlwdHMiKQoKIyBKb2luIHRoZSBmaWx0ZXJlZCBjb3VudHMgbWF0cml4IGFuZCB0aGUgdHJhbnNjcmlwdC9Vbmlwcm90IGRhdGFiYXNlCmNvdW50c19HTyA8LSBsZWZ0X2pvaW4oa2FsbGlzdG9fY291bnRzX2ZpbHRlcmVkLCBnbWFjX2lkbWFwLCBieT1jKCJYIiA9ICJWMSIpKQoKIyBSZW9yZGVyIGNvbHVtbnMgdG8gaGF2ZSBnZW5lIG5hbWUsIEdPIGFubm90YXRpb24sIGFuZCBVbmlwcm90IElEIG5leHQgdG8gZWFjaCBvdGhlcgpjb3VudHNfR08gPC0gY291bnRzX0dPWywgYygiR2VuZS5PbnRvbG9neS4uYmlvbG9naWNhbC5wcm9jZXNzLiIsIHNldGRpZmYobmFtZXMoY291bnRzX0dPKSwgIkdlbmUuT250b2xvZ3kuLmJpb2xvZ2ljYWwucHJvY2Vzcy4iKSldCmNvdW50c19HTyA8LSBjb3VudHNfR09bLCBjKCJWMyIsIHNldGRpZmYobmFtZXMoY291bnRzX0dPKSwgIlYzIikpXQoKYGBgCgpgYGB7ciBnZXQtdW5pcHJvdC1hY2Vzc2lvbi1udW1zLXJlZn0KdW5pcHJvdEFjZXNzaW9uc190cmFuc2NyaXB0b21lX3JuYSA8LSBuYS5vbWl0KGNvdW50c19HTyRWMykKd3JpdGUudGFibGUodW5pcHJvdEFjZXNzaW9uc190cmFuc2NyaXB0b21lX3JuYSwgIi4uL291dHB1dC8wOC1jb2QtUk5Bc2VxLUdPLWFubm90YXRpb24vR21hY191bmlwcm90QWNlc3Npb25zX3RyYW5zY3JpcHRvbWVfcm5hLnR4dCIpCmBgYAoKYGBge3IgZm9ybWF0LWFjZXNzaW9uLW51bXMtcmVmLCBlbmdpbmU9J2Jhc2gnfQojIFdlIG5lZWQgdG8gMSkgcmVtb3ZlIHRoZSBmaXJzdCBsaW5lLCAyKSBnZXQgcmlkIG9mIHRoZSByb3cgbnVtYmVycywgYW5kIDMpIHJlbW92ZSBleHRyYSAiIGNoYXJhY3RlcnMKc2VkICcxZCcgLi4vb3V0cHV0LzA4LWNvZC1STkFzZXEtR08tYW5ub3RhdGlvbi9HbWFjX3VuaXByb3RBY2Vzc2lvbnNfdHJhbnNjcmlwdG9tZV9ybmEudHh0IHwgXAogIGF3ayAne3ByaW50ICQyfScgfCBcCiAgdHIgLWQgJyInIFwKICA+IC4uL291dHB1dC8wOC1jb2QtUk5Bc2VxLUdPLWFubm90YXRpb24vR21hY191bmlwcm90QWNlc3Npb25zX3RyYW5zY3JpcHRvbWVfcm5hX2Zvcm1hdHRlZC50eHQKYGBgCgpOb3cgd2UgY2FuIGRvd25sb2FkIHRoZXNlIGZvcm1hdHRlZCBsaXN0cyBvZiBhY2Nlc3Npb24gbnVtYmVycyBhbmQgcnVuIHRoZW0gdGhyb3VnaCBEQVZJRCB0byBvYnRhaW4gbGlzdHMgb2YgYXNzb2NpYXRlZCBVbmlwcm90IGtleXdvcmRzLiBVbmZvcnR1bmF0ZWx5IEkgZG9uJ3QgdGhpbmsgdGhpcyBjYW4gYmUgZG9uZSBmcm9tIGNvbW1hbmQgbGluZSB0aG91Z2gsIHNvIEknbGwgYmUgdXNpbmcgdGhlIG9ubGluZSB0b29sOiBodHRwczovL2RhdmlkLm5jaWZjcmYuZ292L3Rvb2xzLmpzcAoKSSB1cGxvYWQgbXkgdGhyZWUgREVHIGxpc3RzIChgR21hY191bmlwcm90QWNlc3Npb25zX0RFR3NfTC45LjBfZm9ybWF0dGVkLnR4dGAsIGBHbWFjX3VuaXByb3RBY2Vzc2lvbnNfREVHc19MLjkuNV9mb3JtYXR0ZWQudHh0YCwgYEdtYWNfdW5pcHJvdEFjZXNzaW9uc19ERUdzX0wuOS4xNl9mb3JtYXR0ZWQudHh0YCkgYXMgIkdlbmUgTGlzdHMiIGFuZCB1cGxvYWQgdGhlIGZpbHRlcmVkIHRyYW5zY3JpcHRzIGxpc3QgKGBHbWFjX3VuaXByb3RBY2Vzc2lvbnNfdHJhbnNjcmlwdG9tZV9ybmFfZm9ybWF0dGVkLnR4dGApIGFzIHRoZSAiQmFja2dyb3VuZCIsIHNlbGVjdGluZyAiVU5JUFJPVF9BQ0NFU1NJT04iIGFzIHRoZSBpZGVudGlmaWVyIGZvciBlYWNoLiBJIGFuYWx5emVkIGVhY2ggREVHIGxpc3QgdXNpbmcgdGhlICJGdW5jdGlvbmFsIEFubm90YXRpb24iIHRvb2wsIGFuZCBkb3dsb2FkZWQgdGhlIEZ1bmN0aW9uYWwgQW5ub3RhdGlvbiBUYWJsZSBhbmQgRnVuY3Rpb25hbCBBbm5vdGF0aW9uIENoYXJ0IGZvciBlYWNoIChiZWxvdykKCmBgYHtyIGxvYWQtREFWSUQtZmlsZXMsIGVuZ2luZT0nYmFzaCd9CmN1cmwgaHR0cHM6Ly9kYXZpZC5uY2lmY3JmLmdvdi9kYXRhL2Rvd25sb2FkL3RyX0VEREZFNzRGNEREMTE3MTUxOTQwNTc3MTMudHh0ID4gLi4vb3V0cHV0LzA4LWNvZC1STkFzZXEtR08tYW5ub3RhdGlvbi9HbWFjX0RBVklEX0ZBdGFibGVfTC45LjAudGFiCmN1cmwgaHR0cHM6Ly9kYXZpZC5uY2lmY3JmLmdvdi9kYXRhL2Rvd25sb2FkL2NoYXJ0X0VEREZFNzRGNEREMTE3MTUxOTUxMjcyMzIudHh0ID4gLi4vb3V0cHV0LzA4LWNvZC1STkFzZXEtR08tYW5ub3RhdGlvbi9HbWFjX0RBVklEX0ZBY2hhcnRfTC45LjAudGFiCgpjdXJsIGh0dHBzOi8vZGF2aWQubmNpZmNyZi5nb3YvZGF0YS9kb3dubG9hZC90cl9FRERGRTc0RjRERDExNzE1MTk0NDYxMTMyLnR4dCA+IC4uL291dHB1dC8wOC1jb2QtUk5Bc2VxLUdPLWFubm90YXRpb24vR21hY19EQVZJRF9GQXRhYmxlX0wuOS41LnRhYgpjdXJsIGh0dHBzOi8vZGF2aWQubmNpZmNyZi5nb3YvZGF0YS9kb3dubG9hZC9jaGFydF9FRERGRTc0RjRERDExNzE1MTk0NTkwOTAyLnR4dCA+IC4uL291dHB1dC8wOC1jb2QtUk5Bc2VxLUdPLWFubm90YXRpb24vR21hY19EQVZJRF9GQWNoYXJ0X0wuOS41LnRhYgoKY3VybCBodHRwczovL2RhdmlkLm5jaWZjcmYuZ292L2RhdGEvZG93bmxvYWQvdHJfRURERkU3NEY0REQxMTcxNTE5Mzk0MzEyOS50eHQgPiAuLi9vdXRwdXQvMDgtY29kLVJOQXNlcS1HTy1hbm5vdGF0aW9uL0dtYWNfREFWSURfRkF0YWJsZV9MLjkuMTYudGFiCmN1cmwgaHR0cHM6Ly9kYXZpZC5uY2lmY3JmLmdvdi9kYXRhL2Rvd25sb2FkL2NoYXJ0X0VEREZFNzRGNEREMTE3MTUxOTUxNzU3OTIudHh0ID4gLi4vb3V0cHV0LzA4LWNvZC1STkFzZXEtR08tYW5ub3RhdGlvbi9HbWFjX0RBVklEX0ZBY2hhcnRfTC45LjE2LnRhYgpgYGAKCmBgYHtyIGxvYWQtRGF2aWQtZmlsZXMtaW4tUn0KREVHc19EQVZJRF9GQXRhYmxlX0wuOS4wIDwtIHJlYWQuZGVsaW0oIi4uL291dHB1dC8wOC1jb2QtUk5Bc2VxLUdPLWFubm90YXRpb24vR21hY19EQVZJRF9GQXRhYmxlX0wuOS4wLnRhYiIsIHNlcD0iXHQiKQpERUdzX0RBVklEX0ZBdGFibGVfTC45LjUgPC0gcmVhZC5kZWxpbSgiLi4vb3V0cHV0LzA4LWNvZC1STkFzZXEtR08tYW5ub3RhdGlvbi9HbWFjX0RBVklEX0ZBdGFibGVfTC45LjUudGFiIiwgc2VwPSJcdCIpCkRFR3NfREFWSURfRkF0YWJsZV9MLjkuMTYgPC0gcmVhZC5kZWxpbSgiLi4vb3V0cHV0LzA4LWNvZC1STkFzZXEtR08tYW5ub3RhdGlvbi9HbWFjX0RBVklEX0ZBdGFibGVfTC45LjE2LnRhYiIsIHNlcD0iXHQiKQoKREVHc19EQVZJRF9GQWNoYXJ0X0wuOS4wIDwtIHJlYWQuZGVsaW0oIi4uL291dHB1dC8wOC1jb2QtUk5Bc2VxLUdPLWFubm90YXRpb24vR21hY19EQVZJRF9GQWNoYXJ0X0wuOS4wLnRhYiIsIHNlcD0iXHQiKQpERUdzX0RBVklEX0ZBY2hhcnRfTC45LjUgPC0gcmVhZC5kZWxpbSgiLi4vb3V0cHV0LzA4LWNvZC1STkFzZXEtR08tYW5ub3RhdGlvbi9HbWFjX0RBVklEX0ZBY2hhcnRfTC45LjUudGFiIiwgc2VwPSJcdCIpCkRFR3NfREFWSURfRkFjaGFydF9MLjkuMTYgPC0gcmVhZC5kZWxpbSgiLi4vb3V0cHV0LzA4LWNvZC1STkFzZXEtR08tYW5ub3RhdGlvbi9HbWFjX0RBVklEX0ZBY2hhcnRfTC45LjE2LnRhYiIsIHNlcD0iXHQiKQpgYGAKCk5vdyB3ZSBjYW4gYWxzbyBtYWtlIGRhdGFzZXRzIHRoYXQgaW5jbHVkZSBkaWZmZXJlbnRpYWwgZXhwcmVzc2lvbiBzdGF0cyAoZS5nLiwgYHBhZGpgKSBBTkQgaGlnaC1sZXZlbCBVbmlwcm90IGtleXdvcmRzLgpgYGB7ciBqb2luLURBVklELWFuZC1ERUd9CkRFR3NfREFWSURfRkF0YWJsZV9HT19MLjkuMCA8LSBsZWZ0X2pvaW4oREVHc19HT19MLjkuMF91bmlxdWUsIERFR3NfREFWSURfRkF0YWJsZV9MLjkuMCwgYnk9YygiVjMiID0gIklEIikpCkRFR3NfREFWSURfRkF0YWJsZV9HT19MLjkuNSA8LSBsZWZ0X2pvaW4oREVHc19HT19MLjkuNV91bmlxdWUsIERFR3NfREFWSURfRkF0YWJsZV9MLjkuNSwgYnk9YygiVjMiID0gIklEIikpCkRFR3NfREFWSURfRkF0YWJsZV9HT19MLjkuMTYgPC0gbGVmdF9qb2luKERFR3NfR09fTC45LjE2X3VuaXF1ZSwgREVHc19EQVZJRF9GQXRhYmxlX0wuOS4xNiwgYnk9YygiVjMiID0gIklEIikpCmBgYAoKIyMjIFZpZXcgdG9wIERFR3MgYW5kIGFubm90YXRpb25zCgpGaXJzdCB3ZSBjYW4gbG9vayBhdCB0aGUgYmlvbG9naWNhbCBwcm9jZXNzZXMgYXNzb2NpYXRlZCB3aXRoIG91ciBtb3N0IHNpZ25pZmljYW50bHkgZGlmZmVyZW50aWFsbHkgZXhwcmVzc2VkIGdlbmVzIC0tIG5vdGUgdGhhdCB0aGlzIGlzICpOT1QqIG1ha2luZyB1c2Ugb2Ygb3VyIGVucmljaG1lbnQgYW5hbHlzaXMsIGl0J3MganVzdCB0aGUgR08gdGVybXMgYXNzb2NpYXRlZCB3aXRoIHRoZSB0b3AgMjUgREVHcwpgYGB7ciB2aWV3LXRvcC1ERUctR099CnRvcF8yNV9ERUdzX0wuOS4wIDwtIGhlYWQobmEub21pdChERUdzX0RBVklEX0ZBdGFibGVfR09fTC45LjBbb3JkZXIoREVHc19EQVZJRF9GQXRhYmxlX0dPX0wuOS4wJHBhZGopLCBdKSwgMjUpCnRvcF8yNV9ERUdzX0wuOS4wJHBhZGogPC0gYXMuY2hhcmFjdGVyKHRvcF8yNV9ERUdzX0wuOS4wJHBhZGopICMgcHJldmVudHMga2FibGUgZnJvbSBhdXRvLXJvdW5kaW5nIG91ciBwYWRqIHZhbHVlcwprYWJsZSh0b3BfMjVfREVHc19MLjkuMFssIGMoImdlbmUiLCAicGFkaiIsICJHZW5lLk9udG9sb2d5Li5iaW9sb2dpY2FsLnByb2Nlc3MuIildLAogICAgICByb3cubmFtZXMgPSBGQUxTRSwKICAgICAgY2FwdGlvbiA9ICJUb3AgMjUgREVHcyBmb3IgOUMgdiAwQyAoYmFzZWQgb24gYWRqdXN0ZWQgcC12YWx1ZSkiKSAgCgp0b3BfMjVfREVHc19MLjkuNSA8LSBoZWFkKG5hLm9taXQoREVHc19EQVZJRF9GQXRhYmxlX0dPX0wuOS41W29yZGVyKERFR3NfREFWSURfRkF0YWJsZV9HT19MLjkuNSRwYWRqKSwgXSksIDI1KQp0b3BfMjVfREVHc19MLjkuNSRwYWRqIDwtIGFzLmNoYXJhY3Rlcih0b3BfMjVfREVHc19MLjkuNSRwYWRqKSAjIHByZXZlbnRzIGthYmxlIGZyb20gYXV0by1yb3VuZGluZyBvdXIgcGFkaiB2YWx1ZXMKa2FibGUodG9wXzI1X0RFR3NfTC45LjVbLCBjKCJnZW5lIiwgInBhZGoiLCAiR2VuZS5PbnRvbG9neS4uYmlvbG9naWNhbC5wcm9jZXNzLiIpXSwKICAgICAgcm93Lm5hbWVzID0gRkFMU0UsCiAgICAgIGNhcHRpb24gPSAiVG9wIDI1IERFR3MgZm9yIDlDIHYgNUMgKGJhc2VkIG9uIGFkanVzdGVkIHAtdmFsdWUpIikgIAoKdG9wXzI1X0RFR3NfTC45LjE2IDwtIGhlYWQobmEub21pdChERUdzX0RBVklEX0ZBdGFibGVfR09fTC45LjE2W29yZGVyKERFR3NfREFWSURfRkF0YWJsZV9HT19MLjkuMTYkcGFkaiksIF0pLCAyNSkKdG9wXzI1X0RFR3NfTC45LjE2JHBhZGogPC0gYXMuY2hhcmFjdGVyKHRvcF8yNV9ERUdzX0wuOS4xNiRwYWRqKSAjIHByZXZlbnRzIGthYmxlIGZyb20gYXV0by1yb3VuZGluZyBvdXIgcGFkaiB2YWx1ZXMKa2FibGUodG9wXzI1X0RFR3NfTC45LjE2WywgYygiZ2VuZSIsICJwYWRqIiwgIkdlbmUuT250b2xvZ3kuLmJpb2xvZ2ljYWwucHJvY2Vzcy4iKV0sCiAgICAgIHJvdy5uYW1lcyA9IEZBTFNFLAogICAgICBjYXB0aW9uID0gIlRvcCAyNSBERUdzIGZvciA5QyB2IDE2QyAoYmFzZWQgb24gYWRqdXN0ZWQgcC12YWx1ZSkiKSAgCmBgYAoKCiMjIyBWaWV3IG92ZXItcmVwcmVzZW50ZWQgKGVucmljaGVkKSBwcm9jZXNzZXMKCiMjIyMgR08gdGVybXMKCkZpcnN0LCBsZXQncyBncmFiIGp1c3QgdGhlIEdPIHRlcm1zIGZvciBiaW9sb2dpY2FsIHByb2Nlc3NlcywgYW5kIHNvcnQgYW5kIGZpbHRlciBieSB0aGUgQm9uZmVycm9uaS1hZGp1c3RlZCBwLXZhbHVlCmBgYHtyIHNlbGVjdC1lbnJpY2hlZC1HT0JQfQpERUdzX0RBVklEX0ZBY2hhcnRfTC45LjBfZW5yaWNoZWRHT0JQIDwtIERFR3NfREFWSURfRkFjaGFydF9MLjkuMCAlPiUgCiAgZmlsdGVyKENhdGVnb3J5ID09ICJHT1RFUk1fQlBfRElSRUNUIikgJT4lCiAgZmlsdGVyKEJvbmZlcnJvbmkgPCAwLjA1KSAlPiUKICBhcnJhbmdlKEJvbmZlcnJvbmkpCkRFR3NfREFWSURfRkFjaGFydF9MLjkuNV9lbnJpY2hlZEdPQlAgPC0gREVHc19EQVZJRF9GQWNoYXJ0X0wuOS41ICU+JSAKICBmaWx0ZXIoQ2F0ZWdvcnkgPT0gIkdPVEVSTV9CUF9ESVJFQ1QiKSAlPiUKICBmaWx0ZXIoQm9uZmVycm9uaSA8IDAuMDUpICU+JQogIGFycmFuZ2UoQm9uZmVycm9uaSkKREVHc19EQVZJRF9GQWNoYXJ0X0wuOS4xNl9lbnJpY2hlZEdPQlAgPC0gREVHc19EQVZJRF9GQWNoYXJ0X0wuOS4xNiAlPiUgCiAgZmlsdGVyKENhdGVnb3J5ID09ICJHT1RFUk1fQlBfRElSRUNUIikgJT4lCiAgZmlsdGVyKEJvbmZlcnJvbmkgPCAwLjA1KSAlPiUKICBhcnJhbmdlKEJvbmZlcnJvbmkpCmBgYAoKYGBge3Igdmlldy1lbnJpY2hlZC1HT0JQfQpERUdzX0RBVklEX0ZBY2hhcnRfTC45LjBfZW5yaWNoZWRHT0JQJEJvbmZlcnJvbmkgPC0gYXMuY2hhcmFjdGVyKERFR3NfREFWSURfRkFjaGFydF9MLjkuMF9lbnJpY2hlZEdPQlAkQm9uZmVycm9uaSkgIyBwcmV2ZW50cyBrYWJsZSBmcm9tIGF1dG8tcm91bmRpbmcgb3VyIHBhZGogdmFsdWVzCmthYmxlKERFR3NfREFWSURfRkFjaGFydF9MLjkuMF9lbnJpY2hlZEdPQlBbLCBjKCJUZXJtIiwgIkJvbmZlcnJvbmkiKV0sCiAgICAgIHJvdy5uYW1lcyA9IEZBTFNFLAogICAgICBjYXB0aW9uID0gIkVucmljaGVkIEdPIEJpb2xvZ2ljYWwgUHJvY2Vzc2VzIGZvciA5QyB2IDBDIChiYXNlZCBvbiBhZGp1c3RlZCBwLXZhbHVlKSIpCgpERUdzX0RBVklEX0ZBY2hhcnRfTC45LjVfZW5yaWNoZWRHT0JQJEJvbmZlcnJvbmkgPC0gYXMuY2hhcmFjdGVyKERFR3NfREFWSURfRkFjaGFydF9MLjkuNV9lbnJpY2hlZEdPQlAkQm9uZmVycm9uaSkgIyBwcmV2ZW50cyBrYWJsZSBmcm9tIGF1dG8tcm91bmRpbmcgb3VyIHBhZGogdmFsdWVzCmthYmxlKERFR3NfREFWSURfRkFjaGFydF9MLjkuNV9lbnJpY2hlZEdPQlBbLCBjKCJUZXJtIiwgIkJvbmZlcnJvbmkiKV0sCiAgICAgIHJvdy5uYW1lcyA9IEZBTFNFLAogICAgICBjYXB0aW9uID0gIkVucmljaGVkIEdPIEJpb2xvZ2ljYWwgUHJvY2Vzc2VzIGZvciA5QyB2IDVDIChiYXNlZCBvbiBhZGp1c3RlZCBwLXZhbHVlKSIpCgpERUdzX0RBVklEX0ZBY2hhcnRfTC45LjE2X2VucmljaGVkR09CUCRCb25mZXJyb25pIDwtIGFzLmNoYXJhY3RlcihERUdzX0RBVklEX0ZBY2hhcnRfTC45LjE2X2VucmljaGVkR09CUCRCb25mZXJyb25pKSAjIHByZXZlbnRzIGthYmxlIGZyb20gYXV0by1yb3VuZGluZyBvdXIgcGFkaiB2YWx1ZXMKa2FibGUoREVHc19EQVZJRF9GQWNoYXJ0X0wuOS4xNl9lbnJpY2hlZEdPQlBbLCBjKCJUZXJtIiwgIkJvbmZlcnJvbmkiKV0sCiAgICAgIHJvdy5uYW1lcyA9IEZBTFNFLAogICAgICBjYXB0aW9uID0gIkVucmljaGVkIEdPIEJpb2xvZ2ljYWwgUHJvY2Vzc2VzIGZvciA5QyB2IDE2QyAoYmFzZWQgb24gYWRqdXN0ZWQgcC12YWx1ZSkiKSAKYGBgCgojIyMjIFVuaXByb3QgS2V5d29yZHMKCkZpcnN0LCBsZXQncyBncmFiIGp1c3QgdGhlIFVuaXByb3Qga2V5d29yZHMgZm9yIGJpb2xvZ2ljYWwgcHJvY2Vzc2VzLCBhbmQgc29ydCBhbmQgZmlsdGVyIGJ5IHRoZSBCb25mZXJyb25pLWFkanVzdGVkIHAtdmFsdWUKYGBge3Igc2VsZWN0LWVucmljaGVkLUtXQlB9CkRFR3NfREFWSURfRkFjaGFydF9MLjkuMF9lbnJpY2hlZEtXQlAgPC0gREVHc19EQVZJRF9GQWNoYXJ0X0wuOS4wICU+JSAKICBmaWx0ZXIoQ2F0ZWdvcnkgPT0gIlVQX0tXX0JJT0xPR0lDQUxfUFJPQ0VTUyIpICU+JQogIGZpbHRlcihCb25mZXJyb25pIDwgMC4wNSkgJT4lCiAgYXJyYW5nZShCb25mZXJyb25pKQpERUdzX0RBVklEX0ZBY2hhcnRfTC45LjVfZW5yaWNoZWRLV0JQIDwtIERFR3NfREFWSURfRkFjaGFydF9MLjkuNSAlPiUgCiAgZmlsdGVyKENhdGVnb3J5ID09ICJVUF9LV19CSU9MT0dJQ0FMX1BST0NFU1MiKSAlPiUKICBmaWx0ZXIoQm9uZmVycm9uaSA8IDAuMDUpICU+JQogIGFycmFuZ2UoQm9uZmVycm9uaSkKREVHc19EQVZJRF9GQWNoYXJ0X0wuOS4xNl9lbnJpY2hlZEtXQlAgPC0gREVHc19EQVZJRF9GQWNoYXJ0X0wuOS4xNiAlPiUgCiAgZmlsdGVyKENhdGVnb3J5ID09ICJVUF9LV19CSU9MT0dJQ0FMX1BST0NFU1MiKSAlPiUKICBmaWx0ZXIoQm9uZmVycm9uaSA8IDAuMDUpICU+JQogIGFycmFuZ2UoQm9uZmVycm9uaSkKYGBgCgpgYGB7ciB2aWV3LWVucmljaGVkLUtXQlB9CkRFR3NfREFWSURfRkFjaGFydF9MLjkuMF9lbnJpY2hlZEtXQlAkQm9uZmVycm9uaSA8LSBhcy5jaGFyYWN0ZXIoREVHc19EQVZJRF9GQWNoYXJ0X0wuOS4wX2VucmljaGVkS1dCUCRCb25mZXJyb25pKSAjIHByZXZlbnRzIGthYmxlIGZyb20gYXV0by1yb3VuZGluZyBvdXIgcGFkaiB2YWx1ZXMKa2FibGUoREVHc19EQVZJRF9GQWNoYXJ0X0wuOS4wX2VucmljaGVkS1dCUFssIGMoIlRlcm0iLCAiQm9uZmVycm9uaSIpXSwKICAgICAgcm93Lm5hbWVzID0gRkFMU0UsCiAgICAgIGNhcHRpb24gPSAiRW5yaWNoZWQgQmlvbG9naWNhbCBQcm9jZXNzZXMgZm9yIDlDIHYgMEMgKGJhc2VkIG9uIGFkanVzdGVkIHAtdmFsdWUpIikKCkRFR3NfREFWSURfRkFjaGFydF9MLjkuNV9lbnJpY2hlZEtXQlAkQm9uZmVycm9uaSA8LSBhcy5jaGFyYWN0ZXIoREVHc19EQVZJRF9GQWNoYXJ0X0wuOS41X2VucmljaGVkS1dCUCRCb25mZXJyb25pKSAjIHByZXZlbnRzIGthYmxlIGZyb20gYXV0by1yb3VuZGluZyBvdXIgcGFkaiB2YWx1ZXMKa2FibGUoREVHc19EQVZJRF9GQWNoYXJ0X0wuOS41X2VucmljaGVkS1dCUFssIGMoIlRlcm0iLCAiQm9uZmVycm9uaSIpXSwKICAgICAgcm93Lm5hbWVzID0gRkFMU0UsCiAgICAgIGNhcHRpb24gPSAiRW5yaWNoZWQgQmlvbG9naWNhbCBQcm9jZXNzZXMgZm9yIDlDIHYgNUMgKGJhc2VkIG9uIGFkanVzdGVkIHAtdmFsdWUpIikKCkRFR3NfREFWSURfRkFjaGFydF9MLjkuMTZfZW5yaWNoZWRLV0JQJEJvbmZlcnJvbmkgPC0gYXMuY2hhcmFjdGVyKERFR3NfREFWSURfRkFjaGFydF9MLjkuMTZfZW5yaWNoZWRLV0JQJEJvbmZlcnJvbmkpICMgcHJldmVudHMga2FibGUgZnJvbSBhdXRvLXJvdW5kaW5nIG91ciBwYWRqIHZhbHVlcwprYWJsZShERUdzX0RBVklEX0ZBY2hhcnRfTC45LjE2X2VucmljaGVkS1dCUFssIGMoIlRlcm0iLCAiQm9uZmVycm9uaSIpXSwKICAgICAgcm93Lm5hbWVzID0gRkFMU0UsCiAgICAgIGNhcHRpb24gPSAiRW5yaWNoZWQgQmlvbG9naWNhbCBQcm9jZXNzZXMgZm9yIDlDIHYgMTZDIChiYXNlZCBvbiBhZGp1c3RlZCBwLXZhbHVlKSIpIApgYGAKCgo=