1 Annotation

We take the annotation data from ensembl’s biomart instance. The genome which was used to map the data was hg38 revision 100. My default when using biomart is to load the data from 1 year before the current date.

hs_annot <- sm(load_biomart_annotations(year = "2020"))
hs_annot <- hs_annot[["annotation"]]
hs_annot[["transcript"]] <- paste0(rownames(hs_annot), ".", hs_annot[["version"]])
rownames(hs_annot) <- make.names(hs_annot[["ensembl_gene_id"]], unique = TRUE)
tx_gene_map <- hs_annot[, c("transcript", "ensembl_gene_id")]

summary(hs_annot)
##  ensembl_transcript_id ensembl_gene_id       version     transcript_version
##  Length:227921         Length:227921      Min.   : 1.0   Min.   : 1.00     
##  Class :character      Class :character   1st Qu.: 6.0   1st Qu.: 1.00     
##  Mode  :character      Mode  :character   Median :12.0   Median : 1.00     
##                                           Mean   :10.7   Mean   : 3.08     
##                                           3rd Qu.:16.0   3rd Qu.: 5.00     
##                                           Max.   :29.0   Max.   :17.00     
##                                                                            
##  hgnc_symbol        description        gene_biotype         cds_length    
##  Length:227921      Length:227921      Length:227921      Min.   :     3  
##  Class :character   Class :character   Class :character   1st Qu.:   357  
##  Mode  :character   Mode  :character   Mode  :character   Median :   694  
##                                                           Mean   :  1139  
##                                                           3rd Qu.:  1446  
##                                                           Max.   :107976  
##                                                           NA's   :127343  
##  chromosome_name       strand          start_position      end_position     
##  Length:227921      Length:227921      Min.   :5.77e+02   Min.   :6.47e+02  
##  Class :character   Class :character   1st Qu.:3.11e+07   1st Qu.:3.12e+07  
##  Mode  :character   Mode  :character   Median :6.04e+07   Median :6.06e+07  
##                                        Mean   :7.41e+07   Mean   :7.42e+07  
##                                        3rd Qu.:1.09e+08   3rd Qu.:1.09e+08  
##                                        Max.   :2.49e+08   Max.   :2.49e+08  
##                                                                             
##   transcript       
##  Length:227921     
##  Class :character  
##  Mode  :character  
##                    
##                    
##                    
## 
hs_go <- sm(load_biomart_go()[["go"]])
hs_length <- hs_annot[, c("ensembl_gene_id", "cds_length")]
colnames(hs_length) <- c("ID", "length")

2 Introduction

This document is intended to provide an overview of TMRC3 samples which have been sequenced. It includes some plots and analyses showing the relationships among the samples as well as some differential analyses when possible.

3 Sample Estimation

3.1 Generate expressionsets

The sample sheet is copied from our shared online sheet and updated with each release of sequencing data.

samplesheet <- "sample_sheets/tmrc3_samples_20210512.xlsx"

3.1.1 Hisat2 expressionsets

The first thing to note is the large range in coverage. There are multiple samples with coverage which is too low to use. These will be removed shortly.

In the following block I immediately exclude any non-coding reads as well.

## Create the expressionset and immediately pass it to a filter
## removing the non protein coding genes.
sanitize_columns <- c("visitnumber", "clinicaloutcome", "donor",
                      "typeofcells", "clinicalpresentation",
                      "condition", "batch")
hs_expt <- create_expt(samplesheet,
                       file_column = "hg38100hisatfile",
                       savefile = glue::glue("rda/hs_expt_all-v{ver}.rda"),
                       gene_info = hs_annot) %>%
  exclude_genes_expt(column = "gene_biotype", method = "keep",
                     pattern = "protein_coding", meta_column = "ncrna_lost") %>%
  sanitize_expt_metadata(columns = sanitize_columns) %>%
  set_expt_factors(columns = sanitize_columns, class = "factor")
## Reading the sample metadata.
## Dropped 113 rows from the sample metadata because they were blank.
## The sample definitions comprises: 131 rows(samples) and 80 columns(metadata fields).
## Warning in create_expt(samplesheet, file_column = "hg38100hisatfile", savefile =
## glue::glue("rda/hs_expt_all-v{ver}.rda"), : Some samples were removed when cross
## referencing the samples against the count data.
## Matched 21452 annotations and counts.
## Bringing together the count matrix and gene information.
## Some annotations were lost in merging, setting them to 'undefined'.
## The final expressionset has 21481 rows and 119 columns.
## Before removal, there were 21481 genes, now there are 19941.
## There are 13 samples which kept less than 90 percent counts.
## TMRC30015 TMRC30017 TMRC30019 TMRC30044 TMRC30045 TMRC30097 TMRC30075 TMRC30087 
##     79.24     85.72     89.75     80.34     73.33     89.90     86.97     83.63 
## TMRC30101 TMRC30104 TMRC30114 TMRC30131 TMRC30073 
##     88.41     80.29     87.62     86.82     89.26
levels(pData(hs_expt[["expressionset"]])[["visitnumber"]]) <- list(
    '0' = "notapplicable", '1' = 1, '2' = 2, '3' = 3)

Split this data into CDS and lncRNA. Oh crap in order to do that I need to recount the data. Running now (20210518)

## lnc_expt <- create_expt(samplesheet,
##                         file_column = "hg38100lncfile",
##                         gene_info = hs_annot)

3.1.1.1 Initial metrics

Once the data was loaded, there are a couple of metrics which may be plotted immediately.

nonzero <- plot_nonzero(hs_expt)
nonzero$plot
## Warning: ggrepel: 89 unlabeled data points (too many overlaps). Consider
## increasing max.overlaps

ncrna_lost_df <- as.data.frame(pData(hs_expt)[["ncrna_lost"]])
rownames(ncrna_lost_df) <- rownames(pData(hs_expt))
colnames(ncrna_lost_df) <- "ncrna_lost"

tmpdf <- merge(nonzero$table, ncrna_lost_df, by = "row.names")
rownames(tmpdf) <- tmpdf[["Row.names"]]
tmpdf[["Row.names"]] <- NULL

ggplot(tmpdf, aes(x=ncrna_lost, y=nonzero_genes)) +
  ggplot2::geom_point() +
  ggplot2::ggtitle("Nonzero genes with respect to percent counts 
lost when ncRNA was removed.")

Najib doesn’t want this plot, but I am using it to check new samples, so will hide it from general use.

libsize <- plot_libsize(hs_expt)
libsize$plot

3.2 Minimum coverage sample filtering

I arbitrarily chose 11,000 non-zero genes as a minimum. We may want this to be higher.

hs_valid <- subset_expt(hs_expt, nonzero = 11000)
## The samples (and read coverage) removed when filtering 11000 non-zero genes are:
## TMRC30010 TMRC30050 TMRC30052 
##     52471    808149   3087347
## subset_expt(): There were 119, now there are 116 samples.
valid_write <- sm(write_expt(hs_valid, excel = glue("excel/hs_valid-v{ver}.xlsx")))

4 Project Aims

The project seeks to determine the relationship of the innate immune response and inflammatory signaling to the clinical outcome of antileishmanial drug treatment. We will test the hypothesis that the profile of innate immune cell activation and their dynamics through the course of treatment differ between CL patients with prospectively determined therapeutic cure or failure.

This will be achieved through the characterization of the in vivo dynamics of blood-derived monocyte, neutrophil and eosinophil transcriptome before, during and at the end of treatment in CL patients. Cell-type specific transcriptomes, composite signatures and time-response expression profiles will be contrasted among patients with therapeutic cure or failure.

4.1 Preparation

To address these, I added to the end of the sample sheet columns named ‘condition’, ‘batch’, ‘donor’, and ‘time’. These are filled in with shorthand values according to the above.

4.2 Global view

Before addressing the questions explicitly by subsetting the data, I want to get a look at the samples as they are.

new_names <- pData(hs_valid)[["samplename"]]
hs_valid <- hs_valid %>%
  set_expt_batches(fact = "cellssource") %>%
  set_expt_conditions(fact = "typeofcells") %>%
  set_expt_samplenames(newnames = new_names)

all_norm <- sm(normalize_expt(hs_valid, transform = "log2", norm = "quant",
                              convert = "cpm", filter = TRUE))

all_pca <- plot_pca(all_norm, plot_labels = FALSE,
                    plot_title = "PCA - Cell type", size_column = "visitnumber")
pp(file = glue("images/tmrc3_pca_nolabels-v{ver}.png"), image = all_pca$plot)

write.csv(all_pca$table, file = "coords/hs_donor_pca_coords.csv")
plot_corheat(all_norm, plot_title = "Heirarchical clustering:
         cell types")$plot

4.3 Examine samples relevant to clinical outcome

Now let us consider only the samples for which we have a clinical outcome. These fall primarily into either ‘cured’ or ‘failed’, but some people have not yet returned to the clinic after the first or second visit. These are deemed ‘lost’.

hs_clinical <- hs_valid %>%
  set_expt_conditions(fact = "clinicaloutcome") %>%
  set_expt_batches(fact = "typeofcells") %>%
  subset_expt(subset = "typeofcells!='pbmcs'&typeofcells!='macrophages'")
## subset_expt(): There were 116, now there are 98 samples.
chosen_colors <- c("#D95F02", "#7570B3", "#1B9E77", "#FF0000")
names(chosen_colors) <- c("cure", "failure", "lost", "null")
hs_clinical <- set_expt_colors(hs_clinical, colors = chosen_colors)

newnames <- pData(hs_clinical)[["samplename"]]
hs_clinical <- set_expt_samplenames(hs_clinical, newnames = newnames)

hs_clinical_norm <- sm(normalize_expt(hs_clinical, filter = TRUE, transform = "log2",
                                      convert = "cpm", norm = "quant"))
clinical_pca <- plot_pca(hs_clinical_norm, plot_labels = FALSE,
                         size_column = "visitnumber", cis = NULL,
                         plot_title = "PCA - clinical samples")
pp(file = glue("images/all_clinical_nobatch_pca-v{ver}.png"), image = clinical_pca$plot,
   height = 8, width = 20)

4.3.1 Repeat without the biopsy samples

hs_clinical_nobiop <- hs_clinical %>%
  subset_expt(subset = "typeofcells!='biopsy'")
## subset_expt(): There were 98, now there are 58 samples.
hs_clinical_nobiop_norm <- sm(normalize_expt(hs_clinical_nobiop, filter = TRUE, transform = "log2",
                                             convert = "cpm", norm = "quant"))
clinical_nobiop_pca <- plot_pca(hs_clinical_nobiop_norm, plot_labels = FALSE, cis = NULL,
                                plot_title = "PCA - clinical samples without biopsies")
pp(file = glue("images/all_clinical_nobiop_nobatch_pca-v{ver}.png"),
   image = clinical_nobiop_pca$plot)

4.3.2 Attempt to correct for the surrogate variables

At this time we have two primary data structures of interest: hs_clinical and hs_clinical_nobiop

hs_clinical_nb <- normalize_expt(hs_clinical, filter = TRUE, batch = "svaseq",
                                 transform = "log2", convert = "cpm")
## Removing 5350 low-count genes (14591 remaining).
## batch_counts: Before batch/surrogate estimation, 84389 entries are x==0: 6%.
## batch_counts: Before batch/surrogate estimation, 245396 entries are 0<x<1: 17%.
## Setting 18721 low elements to zero.
## transform_counts: Found 18721 values equal to 0, adding 1 to the matrix.
clinical_batch_pca <- plot_pca(hs_clinical_nb, plot_labels = FALSE, cis = NULL,
                               size_column = "visitnumber", plot_title = "PCA - clinical samples")
clinical_batch_pca$plot

hs_clinical_nobiop_nb <- sm(normalize_expt(hs_clinical_nobiop, filter = TRUE, batch = "svaseq",
                                           transform = "log2", convert = "cpm"))
clinical_nobiop_batch_pca <- plot_pca(hs_clinical_nobiop_nb,
                                      plot_title = "PCA - clinical samples without biopsies",
                                      plot_labels = FALSE)
pp(file = "images/clinical_batch.png", image = clinical_nobiop_batch_pca$plot)

test <- plot_pca(hs_clinical_nobiop_nb, size_column = "visitnumber",
                 plot_title = "PCA - clinical samples without biopsies",
                 plot_labels = FALSE)
test$plot

clinical_nobiop_batch_tsne <- plot_tsne(hs_clinical_nobiop_nb,
                                        plot_title = "tSNE - clinical samples without biopsies",
                                        plot_labels = FALSE)
clinical_nobiop_batch_tsne$plot

4.3.2.1 Look at remaining variance with variancePartition

test <- simple_varpart(hs_clinical_nobiop)
## 
## Total:117 s
test$partition_plot

4.4 Perform DE of the clinical samples cure vs. fail

individual_celltypes <- subset_expt(hs_clinical_nobiop, subset="condition!='lost'")
## subset_expt(): There were 58, now there are 43 samples.
hs_clinic_de <- sm(all_pairwise(individual_celltypes, model_batch = "svaseq", filter = TRUE))
## Going to attempt to install: Error in e$fun(obj, substitute(ex), parent.frame(), e$data) : 
##   worker initialization failed: there is no package called ‘hpgltools’
## Bioconductor version 3.12 (BiocManager 1.30.10), R 4.0.3 (2020-10-10)
## Installing package(s) 'Error in e$fun(obj, substitute(ex), parent.frame(),
##   e$data) : worker initialization failed: there is no package called
##   ‘hpgltools’'
## Warning: package 'Error in e$fun(obj, substitute(ex), parent.frame(), e$data) : 
##   worker initialization failed: there is no package called ‘hpgltools’' is not available for this version of R
## 
## A version of this package for your version of R might be available elsewhere,
## see the ideas at
## https://cran.r-project.org/doc/manuals/r-patched/R-admin.html#Installing-packages
## Error in e$fun(obj, substitute(ex), parent.frame(), e$data): worker initialization failed: there is no package called ‘hpgltools’
hs_clinic_table <- sm(combine_de_tables(
    hs_clinic_de,
    excel = glue::glue("excel/individual_celltypes_table-v{ver}.xlsx")))
## Error in combine_de_tables(hs_clinic_de, excel = glue::glue("excel/individual_celltypes_table-v{ver}.xlsx")): object 'hs_clinic_de' not found
hs_clinic_sig <- sm(extract_significant_genes(
    hs_clinic_table,
    excel = glue::glue("excel/individual_celltypes_sig-v{ver}.xlsx")))
## Error in extract_significant_genes(hs_clinic_table, excel = glue::glue("excel/individual_celltypes_sig-v{ver}.xlsx")): object 'hs_clinic_table' not found
hs_clinic_sig[["summary_df"]]
## Error in eval(expr, envir, enclos): object 'hs_clinic_sig' not found
hs_clinic_de[["comparison"]][["heat"]]
## Error in eval(expr, envir, enclos): object 'hs_clinic_de' not found

4.4.1 Perform LRT with the clinical samples

I am not sure if we have enough samples across the three visit to completely work as well as we would like, but there is only 1 way to find out! Now that I think about it, one thing which might be awesome is to use cell type as an interacting factor…

4.4.1.1 With biopsy samples

I figure this might be a place where the biopsy samples might prove useful.

clinical_nolost <- subset_expt(hs_clinical, subset="condition!='lost'")
## subset_expt(): There were 98, now there are 81 samples.
lrt_visit_clinical_test <- deseq_lrt(clinical_nolost, transform = "vst",
                                     interactor_column = "visitnumber",
                                     interest_column = "clinicaloutcome")
## converting counts to integer mode
## estimating size factors
## estimating dispersions
## gene-wise dispersion estimates
## mean-dispersion relationship
## final dispersion estimates
## fitting model and testing
## -- replacing outliers and refitting for 473 genes
## -- DESeq argument 'minReplicatesForReplace' = 7 
## -- original counts are preserved in counts(dds)
## estimating dispersions
## fitting model and testing
## Working with 13 genes.
## Warning: `distinct_()` was deprecated in dplyr 0.7.0.
## Please use `distinct()` instead.
## See vignette('programming') for more help
## Working with 10 genes after filtering: minc > 3
## Joining, by = "merge"
## Joining, by = "merge"

lrt_visit_clinical_test[["favorite_genes"]]
##                           genes cluster
## ENSG00000103355 ENSG00000103355       1
## ENSG00000105205 ENSG00000105205       1
## ENSG00000105366 ENSG00000105366       2
## ENSG00000112053 ENSG00000112053       1
## ENSG00000130433 ENSG00000130433       1
## ENSG00000133317 ENSG00000133317       1
## ENSG00000161905 ENSG00000161905       2
## ENSG00000183134 ENSG00000183134       2
## ENSG00000188897 ENSG00000188897       1
## ENSG00000213759 ENSG00000213759       2
lrt_celltype_clinical_test <- deseq_lrt(clinical_nolost, transform = "vst",
                                        interactor_column = "typeofcells",
                                        interest_column = "clinicaloutcome")
## converting counts to integer mode
## estimating size factors
## estimating dispersions
## gene-wise dispersion estimates
## mean-dispersion relationship
## final dispersion estimates
## fitting model and testing
## -- replacing outliers and refitting for 61 genes
## -- DESeq argument 'minReplicatesForReplace' = 7 
## -- original counts are preserved in counts(dds)
## estimating dispersions
## fitting model and testing
## Working with 2051 genes.
## Working with 2051 genes after filtering: minc > 3
## Joining, by = "merge"
## Joining, by = "merge"

lrt_celltype_clinical_test[["favorite_genes"]]
##                           genes cluster
## ENSG00000001497 ENSG00000001497       1
## ENSG00000002016 ENSG00000002016       2
## ENSG00000003137 ENSG00000003137       3
## ENSG00000004455 ENSG00000004455       1
## ENSG00000004777 ENSG00000004777       4
## ENSG00000004846 ENSG00000004846       5
## ENSG00000004961 ENSG00000004961       6
## ENSG00000005020 ENSG00000005020       7
## ENSG00000005022 ENSG00000005022       8
## ENSG00000005075 ENSG00000005075       9
## ENSG00000005238 ENSG00000005238       9
## ENSG00000005302 ENSG00000005302      10
## ENSG00000005486 ENSG00000005486      11
## ENSG00000005801 ENSG00000005801       1
## ENSG00000005884 ENSG00000005884       6
## ENSG00000006007 ENSG00000006007      12
## ENSG00000006607 ENSG00000006607      13
## ENSG00000006652 ENSG00000006652      10
## ENSG00000006747 ENSG00000006747      14
## ENSG00000006788 ENSG00000006788      14
## ENSG00000006831 ENSG00000006831      15
## ENSG00000007047 ENSG00000007047       9
## ENSG00000007264 ENSG00000007264       6
## ENSG00000007341 ENSG00000007341      16
## ENSG00000007392 ENSG00000007392      13
## ENSG00000007923 ENSG00000007923       8
## ENSG00000007944 ENSG00000007944      17
## ENSG00000007952 ENSG00000007952       1
## ENSG00000008018 ENSG00000008018       5
## ENSG00000008056 ENSG00000008056      18
## ENSG00000008086 ENSG00000008086      10
## ENSG00000008405 ENSG00000008405      19
## ENSG00000008710 ENSG00000008710       8
## ENSG00000010278 ENSG00000010278      13
## ENSG00000010704 ENSG00000010704      12
## ENSG00000010818 ENSG00000010818      12
## ENSG00000010932 ENSG00000010932       5
## ENSG00000011028 ENSG00000011028       5
## ENSG00000011105 ENSG00000011105       1
## ENSG00000011143 ENSG00000011143       1
## ENSG00000011422 ENSG00000011422      17
## ENSG00000011426 ENSG00000011426      19
## ENSG00000011465 ENSG00000011465       3
## ENSG00000011523 ENSG00000011523      10
## ENSG00000012963 ENSG00000012963       5
## ENSG00000013306 ENSG00000013306       1
## ENSG00000013392 ENSG00000013392       1
## ENSG00000013503 ENSG00000013503      13
## ENSG00000013583 ENSG00000013583      20
## ENSG00000013725 ENSG00000013725       6
## ENSG00000013810 ENSG00000013810      17
## ENSG00000018610 ENSG00000018610       8
## ENSG00000019144 ENSG00000019144       1
## ENSG00000019485 ENSG00000019485      21
## ENSG00000019991 ENSG00000019991      20
## ENSG00000020129 ENSG00000020129       1
## ENSG00000020256 ENSG00000020256      22
## ENSG00000020577 ENSG00000020577       6
## ENSG00000020633 ENSG00000020633      23
## ENSG00000021355 ENSG00000021355      24
## ENSG00000022976 ENSG00000022976      10
## ENSG00000023171 ENSG00000023171      25
## ENSG00000023516 ENSG00000023516       1
## ENSG00000024048 ENSG00000024048      17
## ENSG00000024526 ENSG00000024526      19
## ENSG00000026950 ENSG00000026950      10
## ENSG00000027847 ENSG00000027847      21
## ENSG00000028203 ENSG00000028203       1
## ENSG00000030066 ENSG00000030066      13
## ENSG00000035115 ENSG00000035115       1
## ENSG00000035720 ENSG00000035720      13
## ENSG00000038274 ENSG00000038274      26
## ENSG00000038945 ENSG00000038945       6
## ENSG00000039560 ENSG00000039560       3
## ENSG00000040199 ENSG00000040199       1
## ENSG00000041802 ENSG00000041802      21
## ENSG00000042062 ENSG00000042062      19
## ENSG00000042088 ENSG00000042088       1
## ENSG00000042445 ENSG00000042445       3
## ENSG00000044459 ENSG00000044459      20
## ENSG00000046647 ENSG00000046647       1
## ENSG00000047315 ENSG00000047315       5
## ENSG00000047365 ENSG00000047365       8
## ENSG00000048342 ENSG00000048342      17
## ENSG00000048828 ENSG00000048828       7
## ENSG00000049541 ENSG00000049541      27
## ENSG00000050327 ENSG00000050327       5
## ENSG00000051825 ENSG00000051825       1
## ENSG00000053900 ENSG00000053900      13
## ENSG00000054118 ENSG00000054118      28
## ENSG00000054277 ENSG00000054277       8
## ENSG00000054282 ENSG00000054282      21
## ENSG00000054392 ENSG00000054392       1
## ENSG00000054965 ENSG00000054965      17
## ENSG00000055130 ENSG00000055130       8
## ENSG00000055208 ENSG00000055208      24
## ENSG00000055332 ENSG00000055332      10
## ENSG00000055483 ENSG00000055483      21
## ENSG00000057704 ENSG00000057704      17
## ENSG00000057935 ENSG00000057935       1
## ENSG00000058600 ENSG00000058600       1
## ENSG00000059573 ENSG00000059573       1
## ENSG00000059588 ENSG00000059588       1
## ENSG00000060138 ENSG00000060138       8
## ENSG00000060558 ENSG00000060558      29
## ENSG00000060566 ENSG00000060566      11
## ENSG00000060762 ENSG00000060762      18
## ENSG00000060982 ENSG00000060982       6
## ENSG00000061918 ENSG00000061918       1
## ENSG00000062038 ENSG00000062038       5
## ENSG00000062598 ENSG00000062598      10
## ENSG00000063761 ENSG00000063761      21
## ENSG00000064313 ENSG00000064313      11
## ENSG00000064763 ENSG00000064763      10
## ENSG00000065060 ENSG00000065060      21
## ENSG00000065150 ENSG00000065150       1
## ENSG00000065809 ENSG00000065809      11
## ENSG00000065882 ENSG00000065882      17
## ENSG00000065989 ENSG00000065989      21
## ENSG00000066032 ENSG00000066032      18
## ENSG00000066279 ENSG00000066279      19
## ENSG00000066294 ENSG00000066294      21
## ENSG00000066379 ENSG00000066379       5
## ENSG00000066427 ENSG00000066427       7
## ENSG00000066455 ENSG00000066455      19
## ENSG00000066651 ENSG00000066651       1
## ENSG00000066926 ENSG00000066926       1
## ENSG00000067533 ENSG00000067533       1
## ENSG00000067560 ENSG00000067560       9
## ENSG00000068305 ENSG00000068305       9
## ENSG00000068784 ENSG00000068784       4
## ENSG00000069020 ENSG00000069020      19
## ENSG00000069248 ENSG00000069248       1
## ENSG00000069345 ENSG00000069345      11
## ENSG00000069998 ENSG00000069998       8
## ENSG00000070010 ENSG00000070010      17
## ENSG00000070087 ENSG00000070087      27
## ENSG00000070269 ENSG00000070269      10
## ENSG00000070495 ENSG00000070495      17
## ENSG00000070614 ENSG00000070614       9
## ENSG00000070785 ENSG00000070785       1
## ENSG00000070814 ENSG00000070814      29
## ENSG00000071054 ENSG00000071054      12
## ENSG00000071073 ENSG00000071073      30
## ENSG00000071242 ENSG00000071242       4
## ENSG00000071462 ENSG00000071462       8
## ENSG00000071575 ENSG00000071575      19
## ENSG00000071655 ENSG00000071655       8
## ENSG00000072506 ENSG00000072506       1
## ENSG00000072657 ENSG00000072657       2
## ENSG00000072694 ENSG00000072694      16
## ENSG00000072858 ENSG00000072858      22
## ENSG00000073150 ENSG00000073150      17
## ENSG00000073417 ENSG00000073417      21
## ENSG00000073614 ENSG00000073614      17
## ENSG00000073737 ENSG00000073737      10
## ENSG00000073754 ENSG00000073754       2
## ENSG00000073792 ENSG00000073792       8
## ENSG00000073969 ENSG00000073969       6
## ENSG00000074319 ENSG00000074319      28
## ENSG00000074416 ENSG00000074416       1
## ENSG00000074603 ENSG00000074603      25
## ENSG00000074660 ENSG00000074660      12
## ENSG00000074800 ENSG00000074800       8
## ENSG00000074842 ENSG00000074842       1
## ENSG00000074935 ENSG00000074935       1
## ENSG00000075223 ENSG00000075223       6
## ENSG00000075340 ENSG00000075340       1
## ENSG00000075539 ENSG00000075539      10
## ENSG00000075643 ENSG00000075643       1
## ENSG00000075785 ENSG00000075785      12
## ENSG00000075856 ENSG00000075856      15
## ENSG00000075914 ENSG00000075914       1
## ENSG00000076242 ENSG00000076242       1
## ENSG00000076351 ENSG00000076351       6
## ENSG00000076716 ENSG00000076716       6
## ENSG00000076984 ENSG00000076984       9
## ENSG00000077152 ENSG00000077152      19
## ENSG00000077420 ENSG00000077420       9
## ENSG00000077616 ENSG00000077616      22
## ENSG00000077782 ENSG00000077782       3
## ENSG00000077935 ENSG00000077935      31
## ENSG00000078053 ENSG00000078053       6
## ENSG00000078098 ENSG00000078098       3
## ENSG00000078114 ENSG00000078114       3
## ENSG00000078269 ENSG00000078269      31
## ENSG00000078369 ENSG00000078369       9
## ENSG00000078403 ENSG00000078403      32
## ENSG00000078487 ENSG00000078487       7
## ENSG00000078589 ENSG00000078589       4
## ENSG00000079134 ENSG00000079134       1
## ENSG00000079215 ENSG00000079215       1
## ENSG00000079308 ENSG00000079308       1
## ENSG00000079337 ENSG00000079337      16
## ENSG00000079459 ENSG00000079459       5
## ENSG00000079482 ENSG00000079482      14
## ENSG00000079616 ENSG00000079616      13
## ENSG00000079841 ENSG00000079841       4
## ENSG00000079974 ENSG00000079974      21
## ENSG00000080200 ENSG00000080200       1
## ENSG00000081059 ENSG00000081059      13
## ENSG00000081386 ENSG00000081386       1
## ENSG00000081913 ENSG00000081913      27
## ENSG00000082146 ENSG00000082146       1
## ENSG00000082458 ENSG00000082458      19
## ENSG00000082512 ENSG00000082512       1
## ENSG00000082516 ENSG00000082516       1
## ENSG00000082701 ENSG00000082701      17
## ENSG00000082898 ENSG00000082898       2
## ENSG00000083099 ENSG00000083099       1
## ENSG00000083290 ENSG00000083290       8
## ENSG00000083307 ENSG00000083307       5
## ENSG00000083457 ENSG00000083457      30
## ENSG00000083812 ENSG00000083812      10
## ENSG00000083828 ENSG00000083828      17
## ENSG00000083845 ENSG00000083845       1
## ENSG00000084090 ENSG00000084090       1
## ENSG00000084112 ENSG00000084112      11
## ENSG00000084207 ENSG00000084207       8
## ENSG00000084463 ENSG00000084463       9
## ENSG00000084623 ENSG00000084623       8
## ENSG00000084652 ENSG00000084652       6
## ENSG00000085265 ENSG00000085265      18
## ENSG00000085365 ENSG00000085365       2
## ENSG00000085415 ENSG00000085415       1
## ENSG00000085719 ENSG00000085719       2
## ENSG00000085760 ENSG00000085760       1
## ENSG00000085840 ENSG00000085840      13
## ENSG00000085871 ENSG00000085871      28
## ENSG00000085978 ENSG00000085978      11
## ENSG00000085982 ENSG00000085982       1
## ENSG00000085999 ENSG00000085999       1
## ENSG00000086102 ENSG00000086102      13
## ENSG00000086205 ENSG00000086205       5
## ENSG00000086589 ENSG00000086589      17
## ENSG00000086730 ENSG00000086730      24
## ENSG00000087253 ENSG00000087253      25
## ENSG00000087269 ENSG00000087269       1
## ENSG00000087448 ENSG00000087448       1
## ENSG00000088325 ENSG00000088325      19
## ENSG00000088726 ENSG00000088726       1
## ENSG00000088827 ENSG00000088827      20
## ENSG00000088992 ENSG00000088992      29
## ENSG00000089012 ENSG00000089012       2
## ENSG00000089048 ENSG00000089048       1
## ENSG00000089123 ENSG00000089123       1
## ENSG00000089127 ENSG00000089127      33
## ENSG00000089159 ENSG00000089159      17
## ENSG00000089195 ENSG00000089195       8
## ENSG00000089199 ENSG00000089199      19
## ENSG00000089234 ENSG00000089234      17
## ENSG00000089280 ENSG00000089280      17
## ENSG00000089558 ENSG00000089558       9
## ENSG00000089818 ENSG00000089818      17
## ENSG00000090013 ENSG00000090013      20
## ENSG00000090530 ENSG00000090530       6
## ENSG00000090674 ENSG00000090674      11
## ENSG00000090857 ENSG00000090857      23
## ENSG00000090889 ENSG00000090889      19
## ENSG00000091127 ENSG00000091127       6
## ENSG00000091409 ENSG00000091409      19
## ENSG00000091640 ENSG00000091640       8
## ENSG00000091844 ENSG00000091844       5
## ENSG00000091972 ENSG00000091972       5
## ENSG00000091986 ENSG00000091986       2
## ENSG00000092067 ENSG00000092067      11
## ENSG00000092847 ENSG00000092847      11
## ENSG00000092871 ENSG00000092871      17
## ENSG00000093000 ENSG00000093000      25
## ENSG00000093217 ENSG00000093217       6
## ENSG00000094841 ENSG00000094841       1
## ENSG00000095319 ENSG00000095319       1
## ENSG00000097021 ENSG00000097021       1
## ENSG00000099139 ENSG00000099139       8
## ENSG00000099194 ENSG00000099194       1
## ENSG00000099341 ENSG00000099341       8
## ENSG00000099381 ENSG00000099381      21
## ENSG00000099715 ENSG00000099715      31
## ENSG00000099783 ENSG00000099783      29
## ENSG00000099800 ENSG00000099800       1
## ENSG00000100029 ENSG00000100029       1
## ENSG00000100036 ENSG00000100036       8
## ENSG00000100060 ENSG00000100060      11
## ENSG00000100065 ENSG00000100065       1
## ENSG00000100068 ENSG00000100068      23
## ENSG00000100097 ENSG00000100097       8
## ENSG00000100124 ENSG00000100124      19
## ENSG00000100138 ENSG00000100138       1
## ENSG00000100151 ENSG00000100151      11
## ENSG00000100167 ENSG00000100167      19
## ENSG00000100211 ENSG00000100211      19
## ENSG00000100216 ENSG00000100216       1
## ENSG00000100281 ENSG00000100281      29
## ENSG00000100288 ENSG00000100288       1
## ENSG00000100292 ENSG00000100292       8
## ENSG00000100294 ENSG00000100294      12
## ENSG00000100320 ENSG00000100320       1
## ENSG00000100335 ENSG00000100335      21
## ENSG00000100353 ENSG00000100353       8
## ENSG00000100354 ENSG00000100354      17
## ENSG00000100376 ENSG00000100376       8
## ENSG00000100413 ENSG00000100413      21
## ENSG00000100426 ENSG00000100426      21
## ENSG00000100558 ENSG00000100558       1
## ENSG00000100577 ENSG00000100577       1
## ENSG00000100596 ENSG00000100596       7
## ENSG00000100600 ENSG00000100600       6
## ENSG00000100652 ENSG00000100652      10
## ENSG00000100767 ENSG00000100767      16
## ENSG00000100842 ENSG00000100842       2
## ENSG00000100941 ENSG00000100941      11
## ENSG00000100997 ENSG00000100997       1
## ENSG00000101000 ENSG00000101000       3
## ENSG00000101019 ENSG00000101019      22
## ENSG00000101040 ENSG00000101040       4
## ENSG00000101082 ENSG00000101082      19
## ENSG00000101096 ENSG00000101096      13
## ENSG00000101146 ENSG00000101146      11
## ENSG00000101182 ENSG00000101182       8
## ENSG00000101188 ENSG00000101188      12
## ENSG00000101189 ENSG00000101189      29
## ENSG00000101255 ENSG00000101255      18
## ENSG00000101342 ENSG00000101342      33
## ENSG00000101347 ENSG00000101347      12
## ENSG00000101350 ENSG00000101350      30
## ENSG00000101365 ENSG00000101365      29
## ENSG00000101384 ENSG00000101384      13
## ENSG00000101391 ENSG00000101391       8
## ENSG00000101421 ENSG00000101421      18
## ENSG00000101445 ENSG00000101445      13
## ENSG00000101447 ENSG00000101447       1
## ENSG00000101542 ENSG00000101542       1
## ENSG00000101608 ENSG00000101608       3
## ENSG00000101665 ENSG00000101665      23
## ENSG00000101844 ENSG00000101844      19
## ENSG00000101974 ENSG00000101974      13
## ENSG00000102007 ENSG00000102007       9
## ENSG00000102034 ENSG00000102034      11
## ENSG00000102043 ENSG00000102043       1
## ENSG00000102048 ENSG00000102048       6
## ENSG00000102057 ENSG00000102057      17
## ENSG00000102144 ENSG00000102144      18
## ENSG00000102221 ENSG00000102221       6
## ENSG00000102290 ENSG00000102290       8
## ENSG00000102317 ENSG00000102317       1
## ENSG00000102384 ENSG00000102384      19
## ENSG00000102409 ENSG00000102409       1
## ENSG00000102531 ENSG00000102531      16
## ENSG00000102572 ENSG00000102572       9
## ENSG00000102606 ENSG00000102606      21
## ENSG00000102738 ENSG00000102738       1
## ENSG00000102743 ENSG00000102743       1
## ENSG00000102753 ENSG00000102753       1
## ENSG00000102893 ENSG00000102893      32
## ENSG00000102967 ENSG00000102967      12
## ENSG00000102978 ENSG00000102978      24
## ENSG00000103035 ENSG00000103035      14
## ENSG00000103042 ENSG00000103042       8
## ENSG00000103047 ENSG00000103047       8
## ENSG00000103148 ENSG00000103148       8
## ENSG00000103257 ENSG00000103257      14
## ENSG00000103274 ENSG00000103274       8
## ENSG00000103319 ENSG00000103319      22
## ENSG00000103351 ENSG00000103351      19
## ENSG00000103365 ENSG00000103365      21
## ENSG00000103423 ENSG00000103423       1
## ENSG00000103429 ENSG00000103429       8
## ENSG00000103512 ENSG00000103512      21
## ENSG00000103522 ENSG00000103522       6
## ENSG00000103855 ENSG00000103855       6
## ENSG00000103876 ENSG00000103876      30
## ENSG00000103966 ENSG00000103966       8
## ENSG00000104067 ENSG00000104067       2
## ENSG00000104133 ENSG00000104133      17
## ENSG00000104154 ENSG00000104154       1
## ENSG00000104218 ENSG00000104218       1
## ENSG00000104321 ENSG00000104321       3
## ENSG00000104450 ENSG00000104450      10
## ENSG00000104522 ENSG00000104522       5
## ENSG00000104611 ENSG00000104611      28
## ENSG00000104689 ENSG00000104689       8
## ENSG00000104691 ENSG00000104691       6
## ENSG00000104731 ENSG00000104731       1
## ENSG00000104881 ENSG00000104881       1
## ENSG00000104885 ENSG00000104885      29
## ENSG00000104969 ENSG00000104969       9
## ENSG00000104980 ENSG00000104980       1
## ENSG00000104998 ENSG00000104998       8
## ENSG00000105127 ENSG00000105127      17
## ENSG00000105137 ENSG00000105137       2
## ENSG00000105146 ENSG00000105146      19
## ENSG00000105173 ENSG00000105173       1
## ENSG00000105186 ENSG00000105186       4
## ENSG00000105202 ENSG00000105202       1
## ENSG00000105245 ENSG00000105245      26
## ENSG00000105278 ENSG00000105278      16
## ENSG00000105366 ENSG00000105366      13
## ENSG00000105374 ENSG00000105374       1
## ENSG00000105483 ENSG00000105483      10
## ENSG00000105499 ENSG00000105499       6
## ENSG00000105552 ENSG00000105552       1
## ENSG00000105576 ENSG00000105576      19
## ENSG00000105612 ENSG00000105612       8
## ENSG00000105656 ENSG00000105656       9
## ENSG00000105668 ENSG00000105668       2
## ENSG00000105792 ENSG00000105792      19
## ENSG00000105939 ENSG00000105939      10
## ENSG00000105948 ENSG00000105948      16
## ENSG00000105967 ENSG00000105967      20
## ENSG00000105968 ENSG00000105968      30
## ENSG00000105996 ENSG00000105996      17
## ENSG00000105997 ENSG00000105997      16
## ENSG00000106025 ENSG00000106025      19
## ENSG00000106034 ENSG00000106034       6
## ENSG00000106100 ENSG00000106100      25
## ENSG00000106153 ENSG00000106153       8
## ENSG00000106245 ENSG00000106245      17
## ENSG00000106305 ENSG00000106305       1
## ENSG00000106366 ENSG00000106366       1
## ENSG00000106404 ENSG00000106404      25
## ENSG00000106560 ENSG00000106560       6
## ENSG00000106603 ENSG00000106603      17
## ENSG00000106609 ENSG00000106609      30
## ENSG00000106617 ENSG00000106617       9
## ENSG00000106628 ENSG00000106628       1
## ENSG00000106635 ENSG00000106635      29
## ENSG00000106638 ENSG00000106638       1
## ENSG00000106804 ENSG00000106804      33
## ENSG00000106991 ENSG00000106991       8
## ENSG00000107130 ENSG00000107130       5
## ENSG00000107164 ENSG00000107164       8
## ENSG00000107175 ENSG00000107175      27
## ENSG00000107185 ENSG00000107185      17
## ENSG00000107223 ENSG00000107223       1
## ENSG00000107341 ENSG00000107341       9
## ENSG00000107438 ENSG00000107438      13
## ENSG00000107669 ENSG00000107669      22
## ENSG00000107719 ENSG00000107719      14
## ENSG00000107731 ENSG00000107731       1
## ENSG00000107742 ENSG00000107742       5
## ENSG00000107758 ENSG00000107758       1
## ENSG00000107798 ENSG00000107798       6
## ENSG00000107816 ENSG00000107816       1
## ENSG00000107864 ENSG00000107864      25
## ENSG00000107937 ENSG00000107937       1
## ENSG00000107959 ENSG00000107959       1
## ENSG00000108039 ENSG00000108039       8
## ENSG00000108179 ENSG00000108179      18
## ENSG00000108219 ENSG00000108219      29
## ENSG00000108389 ENSG00000108389      10
## ENSG00000108395 ENSG00000108395      13
## ENSG00000108423 ENSG00000108423      16
## ENSG00000108439 ENSG00000108439       1
## ENSG00000108468 ENSG00000108468       3
## ENSG00000108557 ENSG00000108557      21
## ENSG00000108599 ENSG00000108599      17
## ENSG00000108671 ENSG00000108671       1
## ENSG00000108679 ENSG00000108679       6
## ENSG00000108684 ENSG00000108684      11
## ENSG00000108700 ENSG00000108700       3
## ENSG00000108771 ENSG00000108771      10
## ENSG00000108773 ENSG00000108773      20
## ENSG00000108774 ENSG00000108774       7
## ENSG00000108798 ENSG00000108798      18
## ENSG00000108946 ENSG00000108946      16
## ENSG00000108960 ENSG00000108960      13
## ENSG00000108963 ENSG00000108963       8
## ENSG00000109111 ENSG00000109111      11
## ENSG00000109113 ENSG00000109113       8
## ENSG00000109182 ENSG00000109182      14
## ENSG00000109472 ENSG00000109472       6
## ENSG00000109501 ENSG00000109501       1
## ENSG00000109685 ENSG00000109685      13
## ENSG00000109814 ENSG00000109814       1
## ENSG00000109917 ENSG00000109917      21
## ENSG00000109919 ENSG00000109919       1
## ENSG00000109920 ENSG00000109920      21
## ENSG00000109944 ENSG00000109944       1
## ENSG00000109971 ENSG00000109971       1
## ENSG00000110046 ENSG00000110046      17
## ENSG00000110048 ENSG00000110048       4
## ENSG00000110092 ENSG00000110092       1
## ENSG00000110171 ENSG00000110171      21
## ENSG00000110200 ENSG00000110200      21
## ENSG00000110203 ENSG00000110203       9
## ENSG00000110218 ENSG00000110218       1
## ENSG00000110237 ENSG00000110237       6
## ENSG00000110514 ENSG00000110514      21
## ENSG00000110660 ENSG00000110660       1
## ENSG00000110665 ENSG00000110665      25
## ENSG00000110713 ENSG00000110713      17
## ENSG00000110844 ENSG00000110844       1
## ENSG00000110851 ENSG00000110851      13
## ENSG00000110880 ENSG00000110880      18
## ENSG00000110906 ENSG00000110906      11
## ENSG00000111057 ENSG00000111057       5
## ENSG00000111144 ENSG00000111144      12
## ENSG00000111145 ENSG00000111145      12
## ENSG00000111331 ENSG00000111331       7
## ENSG00000111335 ENSG00000111335       3
## ENSG00000111361 ENSG00000111361       1
## ENSG00000111424 ENSG00000111424      18
## ENSG00000111450 ENSG00000111450      30
## ENSG00000111481 ENSG00000111481       1
## ENSG00000111640 ENSG00000111640       8
## ENSG00000111696 ENSG00000111696       3
## ENSG00000111725 ENSG00000111725      11
## ENSG00000111785 ENSG00000111785       1
## ENSG00000111801 ENSG00000111801       2
## ENSG00000111817 ENSG00000111817      18
## ENSG00000111850 ENSG00000111850      16
## ENSG00000111863 ENSG00000111863       1
## ENSG00000111877 ENSG00000111877      25
## ENSG00000111886 ENSG00000111886      17
## ENSG00000111911 ENSG00000111911       3
## ENSG00000112033 ENSG00000112033       9
## ENSG00000112079 ENSG00000112079      17
## ENSG00000112130 ENSG00000112130       1
## ENSG00000112139 ENSG00000112139       3
## ENSG00000112144 ENSG00000112144       1
## ENSG00000112234 ENSG00000112234      26
## ENSG00000112242 ENSG00000112242       9
## ENSG00000112245 ENSG00000112245       8
## ENSG00000112299 ENSG00000112299      12
## ENSG00000112367 ENSG00000112367      17
## ENSG00000112419 ENSG00000112419      25
## ENSG00000112599 ENSG00000112599      17
## ENSG00000112655 ENSG00000112655      19
## ENSG00000112715 ENSG00000112715      11
## ENSG00000112773 ENSG00000112773      25
## ENSG00000113048 ENSG00000113048       1
## ENSG00000113108 ENSG00000113108      12
## ENSG00000113194 ENSG00000113194      28
## ENSG00000113272 ENSG00000113272       1
## ENSG00000113273 ENSG00000113273      23
## ENSG00000113360 ENSG00000113360       1
## ENSG00000113384 ENSG00000113384      20
## ENSG00000113430 ENSG00000113430       6
## ENSG00000113569 ENSG00000113569      13
## ENSG00000113645 ENSG00000113645      19
## ENSG00000113649 ENSG00000113649       8
## ENSG00000113716 ENSG00000113716      21
## ENSG00000113758 ENSG00000113758      16
## ENSG00000113761 ENSG00000113761      17
## ENSG00000114423 ENSG00000114423      13
## ENSG00000114439 ENSG00000114439       4
## ENSG00000114450 ENSG00000114450       3
## ENSG00000114544 ENSG00000114544       8
## ENSG00000114554 ENSG00000114554       1
## ENSG00000114739 ENSG00000114739       1
## ENSG00000114861 ENSG00000114861      16
## ENSG00000114982 ENSG00000114982      11
## ENSG00000115109 ENSG00000115109      16
## ENSG00000115155 ENSG00000115155       7
## ENSG00000115159 ENSG00000115159       2
## ENSG00000115170 ENSG00000115170       1
## ENSG00000115204 ENSG00000115204       8
## ENSG00000115232 ENSG00000115232      23
## ENSG00000115414 ENSG00000115414       6
## ENSG00000115421 ENSG00000115421      10
## ENSG00000115423 ENSG00000115423      31
## ENSG00000115446 ENSG00000115446      13
## ENSG00000115459 ENSG00000115459      23
## ENSG00000115592 ENSG00000115592      12
## ENSG00000115598 ENSG00000115598       3
## ENSG00000115648 ENSG00000115648       2
## ENSG00000115718 ENSG00000115718      12
## ENSG00000115738 ENSG00000115738      30
## ENSG00000115761 ENSG00000115761       1
## ENSG00000115762 ENSG00000115762      18
## ENSG00000115828 ENSG00000115828      12
## ENSG00000115904 ENSG00000115904       2
## ENSG00000115919 ENSG00000115919      20
## ENSG00000115963 ENSG00000115963       2
## ENSG00000116120 ENSG00000116120       1
## ENSG00000116127 ENSG00000116127      13
## ENSG00000116132 ENSG00000116132       3
## ENSG00000116141 ENSG00000116141       5
## ENSG00000116157 ENSG00000116157       1
## ENSG00000116478 ENSG00000116478       4
## ENSG00000116497 ENSG00000116497      26
## ENSG00000116514 ENSG00000116514       9
## ENSG00000116649 ENSG00000116649       1
## ENSG00000116678 ENSG00000116678       2
## ENSG00000116688 ENSG00000116688      24
## ENSG00000116729 ENSG00000116729      12
## ENSG00000116761 ENSG00000116761       2
## ENSG00000116791 ENSG00000116791       1
## ENSG00000116815 ENSG00000116815      17
## ENSG00000116871 ENSG00000116871       9
## ENSG00000116874 ENSG00000116874       1
## ENSG00000116898 ENSG00000116898       6
## ENSG00000116984 ENSG00000116984      22
## ENSG00000117118 ENSG00000117118      27
## ENSG00000117226 ENSG00000117226       3
## ENSG00000117228 ENSG00000117228      12
## ENSG00000117298 ENSG00000117298       9
## ENSG00000117362 ENSG00000117362      29
## ENSG00000117399 ENSG00000117399       5
## ENSG00000117448 ENSG00000117448       1
## ENSG00000117481 ENSG00000117481      30
## ENSG00000117501 ENSG00000117501       2
## ENSG00000117505 ENSG00000117505      11
## ENSG00000117595 ENSG00000117595      19
## ENSG00000117597 ENSG00000117597       1
## ENSG00000117632 ENSG00000117632       1
## ENSG00000117643 ENSG00000117643       1
## ENSG00000117697 ENSG00000117697       2
## ENSG00000117724 ENSG00000117724       1
## ENSG00000117751 ENSG00000117751       6
## ENSG00000117834 ENSG00000117834      25
## ENSG00000118004 ENSG00000118004      14
## ENSG00000118412 ENSG00000118412       2
## ENSG00000118513 ENSG00000118513      13
## ENSG00000118680 ENSG00000118680      28
## ENSG00000118946 ENSG00000118946      19
## ENSG00000118961 ENSG00000118961       1
## ENSG00000119203 ENSG00000119203       1
## ENSG00000119231 ENSG00000119231      24
## ENSG00000119397 ENSG00000119397      25
## ENSG00000119471 ENSG00000119471      16
## ENSG00000119523 ENSG00000119523       1
## ENSG00000119669 ENSG00000119669      18
## ENSG00000119682 ENSG00000119682      17
## ENSG00000119698 ENSG00000119698      27
## ENSG00000119714 ENSG00000119714      26
## ENSG00000119865 ENSG00000119865       2
## ENSG00000119915 ENSG00000119915       6
## ENSG00000120008 ENSG00000120008       8
## ENSG00000120053 ENSG00000120053       1
## ENSG00000120055 ENSG00000120055       1
## ENSG00000120158 ENSG00000120158      14
## ENSG00000120162 ENSG00000120162       3
## ENSG00000120254 ENSG00000120254       6
## ENSG00000120262 ENSG00000120262      25
## ENSG00000120278 ENSG00000120278       6
## ENSG00000120675 ENSG00000120675       1
## ENSG00000120690 ENSG00000120690      17
## ENSG00000120696 ENSG00000120696      16
## ENSG00000120798 ENSG00000120798      13
## ENSG00000120833 ENSG00000120833      22
## ENSG00000120868 ENSG00000120868      17
## ENSG00000120907 ENSG00000120907       5
## ENSG00000120949 ENSG00000120949      18
## ENSG00000121022 ENSG00000121022      19
## ENSG00000121057 ENSG00000121057       1
## ENSG00000121060 ENSG00000121060       7
## ENSG00000121152 ENSG00000121152      19
## ENSG00000121410 ENSG00000121410       1
## ENSG00000121454 ENSG00000121454      24
## ENSG00000121653 ENSG00000121653      29
## ENSG00000121691 ENSG00000121691      25
## ENSG00000121774 ENSG00000121774       9
## ENSG00000121807 ENSG00000121807       8
## ENSG00000121897 ENSG00000121897       1
## ENSG00000122224 ENSG00000122224      22
## ENSG00000122299 ENSG00000122299       9
## ENSG00000122386 ENSG00000122386       1
## ENSG00000122483 ENSG00000122483      25
## ENSG00000122543 ENSG00000122543      23
## ENSG00000122557 ENSG00000122557      11
## ENSG00000122642 ENSG00000122642       2
## ENSG00000122705 ENSG00000122705       6
## ENSG00000122729 ENSG00000122729      16
## ENSG00000122965 ENSG00000122965       8
## ENSG00000123159 ENSG00000123159       6
## ENSG00000123213 ENSG00000123213      20
## ENSG00000123384 ENSG00000123384       8
## ENSG00000123595 ENSG00000123595       1
## ENSG00000123607 ENSG00000123607      33
## ENSG00000123643 ENSG00000123643       9
## ENSG00000123838 ENSG00000123838      12
## ENSG00000124145 ENSG00000124145       1
## ENSG00000124151 ENSG00000124151       9
## ENSG00000124177 ENSG00000124177      21
## ENSG00000124181 ENSG00000124181       1
## ENSG00000124225 ENSG00000124225       1
## ENSG00000124313 ENSG00000124313      21
## ENSG00000124357 ENSG00000124357       7
## ENSG00000124374 ENSG00000124374      19
## ENSG00000124380 ENSG00000124380       1
## ENSG00000124486 ENSG00000124486      28
## ENSG00000124571 ENSG00000124571       1
## ENSG00000124762 ENSG00000124762       8
## ENSG00000124766 ENSG00000124766       1
## ENSG00000124780 ENSG00000124780      13
## ENSG00000124784 ENSG00000124784       1
## ENSG00000124785 ENSG00000124785       3
## ENSG00000124789 ENSG00000124789      17
## ENSG00000124882 ENSG00000124882      22
## ENSG00000125037 ENSG00000125037      27
## ENSG00000125247 ENSG00000125247       1
## ENSG00000125375 ENSG00000125375      30
## ENSG00000125434 ENSG00000125434      21
## ENSG00000125551 ENSG00000125551      10
## ENSG00000125630 ENSG00000125630       1
## ENSG00000125650 ENSG00000125650       3
## ENSG00000125703 ENSG00000125703       1
## ENSG00000125731 ENSG00000125731       2
## ENSG00000125733 ENSG00000125733       6
## ENSG00000125735 ENSG00000125735      17
## ENSG00000125741 ENSG00000125741       7
## ENSG00000125753 ENSG00000125753       9
## ENSG00000125772 ENSG00000125772       9
## ENSG00000125779 ENSG00000125779      17
## ENSG00000125812 ENSG00000125812       9
## ENSG00000125817 ENSG00000125817       8
## ENSG00000125821 ENSG00000125821       6
## ENSG00000125841 ENSG00000125841       1
## ENSG00000125845 ENSG00000125845       5
## ENSG00000125846 ENSG00000125846       1
## ENSG00000125863 ENSG00000125863       3
## ENSG00000125952 ENSG00000125952      25
## ENSG00000125968 ENSG00000125968       8
## ENSG00000126231 ENSG00000126231      19
## ENSG00000126353 ENSG00000126353       6
## ENSG00000126457 ENSG00000126457       1
## ENSG00000126581 ENSG00000126581      18
## ENSG00000126787 ENSG00000126787      19
## ENSG00000126858 ENSG00000126858       7
## ENSG00000126870 ENSG00000126870       1
## ENSG00000127124 ENSG00000127124       8
## ENSG00000128000 ENSG00000128000       2
## ENSG00000128059 ENSG00000128059      19
## ENSG00000128191 ENSG00000128191      22
## ENSG00000128245 ENSG00000128245       8
## ENSG00000128272 ENSG00000128272      23
## ENSG00000128274 ENSG00000128274       6
## ENSG00000128276 ENSG00000128276      32
## ENSG00000128342 ENSG00000128342       5
## ENSG00000128408 ENSG00000128408       1
## ENSG00000128581 ENSG00000128581       1
## ENSG00000128731 ENSG00000128731      13
## ENSG00000128872 ENSG00000128872      25
## ENSG00000128908 ENSG00000128908      21
## ENSG00000128923 ENSG00000128923      25
## ENSG00000129071 ENSG00000129071      17
## ENSG00000129351 ENSG00000129351      21
## ENSG00000129450 ENSG00000129450      18
## ENSG00000129484 ENSG00000129484       1
## ENSG00000129493 ENSG00000129493      25
## ENSG00000129657 ENSG00000129657      17
## ENSG00000129675 ENSG00000129675      25
## ENSG00000129691 ENSG00000129691      13
## ENSG00000129696 ENSG00000129696      28
## ENSG00000130147 ENSG00000130147       1
## ENSG00000130167 ENSG00000130167      17
## ENSG00000130202 ENSG00000130202      33
## ENSG00000130203 ENSG00000130203       6
## ENSG00000130204 ENSG00000130204       8
## ENSG00000130208 ENSG00000130208       6
## ENSG00000130255 ENSG00000130255       1
## ENSG00000130300 ENSG00000130300       3
## ENSG00000130338 ENSG00000130338       8
## ENSG00000130382 ENSG00000130382       7
## ENSG00000130414 ENSG00000130414       8
## ENSG00000130479 ENSG00000130479       9
## ENSG00000130517 ENSG00000130517      11
## ENSG00000130520 ENSG00000130520       8
## ENSG00000130559 ENSG00000130559      21
## ENSG00000130584 ENSG00000130584       6
## ENSG00000130638 ENSG00000130638       1
## ENSG00000130649 ENSG00000130649      19
## ENSG00000130653 ENSG00000130653       1
## ENSG00000130713 ENSG00000130713       1
## ENSG00000130725 ENSG00000130725       9
## ENSG00000130768 ENSG00000130768       4
## ENSG00000130997 ENSG00000130997      22
## ENSG00000131019 ENSG00000131019       1
## ENSG00000131042 ENSG00000131042       9
## ENSG00000131100 ENSG00000131100       5
## ENSG00000131143 ENSG00000131143       8
## ENSG00000131236 ENSG00000131236      17
## ENSG00000131238 ENSG00000131238       7
## ENSG00000131374 ENSG00000131374      23
## ENSG00000131389 ENSG00000131389      17
## ENSG00000131398 ENSG00000131398       8
## ENSG00000131446 ENSG00000131446      18
## ENSG00000131508 ENSG00000131508      27
## ENSG00000131711 ENSG00000131711      19
## ENSG00000131747 ENSG00000131747      19
## ENSG00000131828 ENSG00000131828       1
## ENSG00000131844 ENSG00000131844       1
## ENSG00000131845 ENSG00000131845       1
## ENSG00000131871 ENSG00000131871       1
## ENSG00000131873 ENSG00000131873      17
## ENSG00000131943 ENSG00000131943       6
## ENSG00000131944 ENSG00000131944      28
## ENSG00000132128 ENSG00000132128       1
## ENSG00000132199 ENSG00000132199       1
## ENSG00000132254 ENSG00000132254       1
## ENSG00000132256 ENSG00000132256      16
## ENSG00000132300 ENSG00000132300       1
## ENSG00000132305 ENSG00000132305       1
## ENSG00000132361 ENSG00000132361       8
## ENSG00000132382 ENSG00000132382       1
## ENSG00000132386 ENSG00000132386       1
## ENSG00000132470 ENSG00000132470       5
## ENSG00000132478 ENSG00000132478      10
## ENSG00000132530 ENSG00000132530      10
## ENSG00000132549 ENSG00000132549      17
## ENSG00000132718 ENSG00000132718       6
## ENSG00000132746 ENSG00000132746      19
## ENSG00000132792 ENSG00000132792      21
## ENSG00000132879 ENSG00000132879       1
## ENSG00000132952 ENSG00000132952      11
## ENSG00000132953 ENSG00000132953       1
## ENSG00000132965 ENSG00000132965      11
## ENSG00000132972 ENSG00000132972      28
## ENSG00000133056 ENSG00000133056      19
## ENSG00000133106 ENSG00000133106      10
## ENSG00000133119 ENSG00000133119      13
## ENSG00000133398 ENSG00000133398      21
## ENSG00000133422 ENSG00000133422       1
## ENSG00000133612 ENSG00000133612       8
## ENSG00000133627 ENSG00000133627      10
## ENSG00000133789 ENSG00000133789      13
## ENSG00000133805 ENSG00000133805      11
## ENSG00000133943 ENSG00000133943      17
## ENSG00000133997 ENSG00000133997       4
## ENSG00000134057 ENSG00000134057      19
## ENSG00000134070 ENSG00000134070      18
## ENSG00000134077 ENSG00000134077      13
## ENSG00000134086 ENSG00000134086      29
## ENSG00000134107 ENSG00000134107      11
## ENSG00000134146 ENSG00000134146       6
## ENSG00000134183 ENSG00000134183      10
## ENSG00000134186 ENSG00000134186       4
## ENSG00000134207 ENSG00000134207       1
## ENSG00000134222 ENSG00000134222      18
## ENSG00000134245 ENSG00000134245       1
## ENSG00000134318 ENSG00000134318      25
## ENSG00000134324 ENSG00000134324      13
## ENSG00000134333 ENSG00000134333       6
## ENSG00000134369 ENSG00000134369       1
## ENSG00000134440 ENSG00000134440       1
## ENSG00000134453 ENSG00000134453      21
## ENSG00000134533 ENSG00000134533      19
## ENSG00000134594 ENSG00000134594      13
## ENSG00000134684 ENSG00000134684       1
## ENSG00000134686 ENSG00000134686       9
## ENSG00000134697 ENSG00000134697       1
## ENSG00000134748 ENSG00000134748      28
## ENSG00000134759 ENSG00000134759       1
## ENSG00000134802 ENSG00000134802       8
## ENSG00000134809 ENSG00000134809       3
## ENSG00000134824 ENSG00000134824      22
## ENSG00000134874 ENSG00000134874      14
## ENSG00000134900 ENSG00000134900      23
## ENSG00000135018 ENSG00000135018      18
## ENSG00000135040 ENSG00000135040      13
## ENSG00000135047 ENSG00000135047       6
## ENSG00000135077 ENSG00000135077       8
## ENSG00000135083 ENSG00000135083      28
## ENSG00000135094 ENSG00000135094       8
## ENSG00000135111 ENSG00000135111       1
## ENSG00000135116 ENSG00000135116      13
## ENSG00000135205 ENSG00000135205      10
## ENSG00000135245 ENSG00000135245      19
## ENSG00000135314 ENSG00000135314       5
## ENSG00000135315 ENSG00000135315      26
## ENSG00000135316 ENSG00000135316       1
## ENSG00000135318 ENSG00000135318       2
## ENSG00000135362 ENSG00000135362       4
## ENSG00000135363 ENSG00000135363       9
## ENSG00000135372 ENSG00000135372       1
## ENSG00000135378 ENSG00000135378      12
## ENSG00000135424 ENSG00000135424       1
## ENSG00000135457 ENSG00000135457       1
## ENSG00000135473 ENSG00000135473      32
## ENSG00000135503 ENSG00000135503      23
## ENSG00000135622 ENSG00000135622       1
## ENSG00000135723 ENSG00000135723       9
## ENSG00000135823 ENSG00000135823      27
## ENSG00000135828 ENSG00000135828      16
## ENSG00000135912 ENSG00000135912      12
## ENSG00000135913 ENSG00000135913      13
## ENSG00000135916 ENSG00000135916      13
## ENSG00000135924 ENSG00000135924      22
## ENSG00000135929 ENSG00000135929      12
## ENSG00000136011 ENSG00000136011       3
## ENSG00000136045 ENSG00000136045       1
## ENSG00000136068 ENSG00000136068      13
## ENSG00000136104 ENSG00000136104       1
## ENSG00000136158 ENSG00000136158      22
## ENSG00000136235 ENSG00000136235       6
## ENSG00000136247 ENSG00000136247       1
## ENSG00000136379 ENSG00000136379       3
## ENSG00000136514 ENSG00000136514       3
## ENSG00000136521 ENSG00000136521       1
## ENSG00000136541 ENSG00000136541      11
## ENSG00000136603 ENSG00000136603      18
## ENSG00000136628 ENSG00000136628       1
## ENSG00000136715 ENSG00000136715      17
## ENSG00000136717 ENSG00000136717       8
## ENSG00000136732 ENSG00000136732       6
## ENSG00000136807 ENSG00000136807      11
## ENSG00000136811 ENSG00000136811      21
## ENSG00000136826 ENSG00000136826      12
## ENSG00000136827 ENSG00000136827       9
## ENSG00000136830 ENSG00000136830       8
## ENSG00000136840 ENSG00000136840       8
## ENSG00000136861 ENSG00000136861       4
## ENSG00000136874 ENSG00000136874      26
## ENSG00000136875 ENSG00000136875       5
## ENSG00000136925 ENSG00000136925      13
## ENSG00000136930 ENSG00000136930      23
## ENSG00000136932 ENSG00000136932      11
## ENSG00000136938 ENSG00000136938      30
## ENSG00000136942 ENSG00000136942       1
## ENSG00000137054 ENSG00000137054       1
## ENSG00000137074 ENSG00000137074       6
## ENSG00000137094 ENSG00000137094       6
## ENSG00000137166 ENSG00000137166      21
## ENSG00000137168 ENSG00000137168       1
## ENSG00000137309 ENSG00000137309       8
## ENSG00000137312 ENSG00000137312      17
## ENSG00000137331 ENSG00000137331      24
## ENSG00000137343 ENSG00000137343      32
## ENSG00000137509 ENSG00000137509       3
## ENSG00000137522 ENSG00000137522      13
## ENSG00000137547 ENSG00000137547       1
## ENSG00000137571 ENSG00000137571      27
## ENSG00000137628 ENSG00000137628       3
## ENSG00000137656 ENSG00000137656       4
## ENSG00000137672 ENSG00000137672      13
## ENSG00000137806 ENSG00000137806       2
## ENSG00000137807 ENSG00000137807      19
## ENSG00000137812 ENSG00000137812       1
## ENSG00000137824 ENSG00000137824       1
## ENSG00000137834 ENSG00000137834       8
## ENSG00000137871 ENSG00000137871       1
## ENSG00000137936 ENSG00000137936      13
## ENSG00000137959 ENSG00000137959       3
## ENSG00000137965 ENSG00000137965       7
## ENSG00000138031 ENSG00000138031       1
## ENSG00000138061 ENSG00000138061      20
## ENSG00000138074 ENSG00000138074       1
## ENSG00000138095 ENSG00000138095       1
## ENSG00000138131 ENSG00000138131      25
## ENSG00000138180 ENSG00000138180      19
## ENSG00000138246 ENSG00000138246      26
## ENSG00000138279 ENSG00000138279      18
## ENSG00000138303 ENSG00000138303      19
## ENSG00000138363 ENSG00000138363       1
## ENSG00000138375 ENSG00000138375      22
## ENSG00000138413 ENSG00000138413       6
## ENSG00000138442 ENSG00000138442       1
## ENSG00000138646 ENSG00000138646      10
## ENSG00000138658 ENSG00000138658       4
## ENSG00000138709 ENSG00000138709       1
## ENSG00000138738 ENSG00000138738       4
## ENSG00000138760 ENSG00000138760       1
## ENSG00000138768 ENSG00000138768       2
## ENSG00000138778 ENSG00000138778      19
## ENSG00000138795 ENSG00000138795       6
## ENSG00000138796 ENSG00000138796       1
## ENSG00000139112 ENSG00000139112      17
## ENSG00000139160 ENSG00000139160      16
## ENSG00000139190 ENSG00000139190      10
## ENSG00000139211 ENSG00000139211       6
## ENSG00000139437 ENSG00000139437      32
## ENSG00000139514 ENSG00000139514       1
## ENSG00000139579 ENSG00000139579       1
## ENSG00000139597 ENSG00000139597      33
## ENSG00000139631 ENSG00000139631      17
## ENSG00000139684 ENSG00000139684       1
## ENSG00000139722 ENSG00000139722       9
## ENSG00000139726 ENSG00000139726       2
## ENSG00000139734 ENSG00000139734      19
## ENSG00000139842 ENSG00000139842      21
## ENSG00000139970 ENSG00000139970      20
## ENSG00000140044 ENSG00000140044      11
## ENSG00000140090 ENSG00000140090      12
## ENSG00000140350 ENSG00000140350      17
## ENSG00000140374 ENSG00000140374       1
## ENSG00000140400 ENSG00000140400      21
## ENSG00000140403 ENSG00000140403      32
## ENSG00000140455 ENSG00000140455      12
## ENSG00000140525 ENSG00000140525      19
## ENSG00000140526 ENSG00000140526      11
## ENSG00000140564 ENSG00000140564      11
## ENSG00000140577 ENSG00000140577      21
## ENSG00000140650 ENSG00000140650      33
## ENSG00000140743 ENSG00000140743       1
## ENSG00000140859 ENSG00000140859       5
## ENSG00000140968 ENSG00000140968       8
## ENSG00000141219 ENSG00000141219       5
## ENSG00000141258 ENSG00000141258      23
## ENSG00000141384 ENSG00000141384       1
## ENSG00000141456 ENSG00000141456       1
## ENSG00000141458 ENSG00000141458       6
## ENSG00000141540 ENSG00000141540       8
## ENSG00000141574 ENSG00000141574      12
## ENSG00000141576 ENSG00000141576      30
## ENSG00000141655 ENSG00000141655       3
## ENSG00000141664 ENSG00000141664      17
## ENSG00000141837 ENSG00000141837      16
## ENSG00000141858 ENSG00000141858      30
## ENSG00000141905 ENSG00000141905      12
## ENSG00000142188 ENSG00000142188      32
## ENSG00000142528 ENSG00000142528      12
## ENSG00000142621 ENSG00000142621       8
## ENSG00000142627 ENSG00000142627       1
## ENSG00000142655 ENSG00000142655      21
## ENSG00000142687 ENSG00000142687      25
## ENSG00000142794 ENSG00000142794      22
## ENSG00000142910 ENSG00000142910       1
## ENSG00000142920 ENSG00000142920       5
## ENSG00000143013 ENSG00000143013       1
## ENSG00000143033 ENSG00000143033      13
## ENSG00000143079 ENSG00000143079       6
## ENSG00000143127 ENSG00000143127       1
## ENSG00000143178 ENSG00000143178      10
## ENSG00000143321 ENSG00000143321       8
## ENSG00000143333 ENSG00000143333      19
## ENSG00000143376 ENSG00000143376      12
## ENSG00000143416 ENSG00000143416       2
## ENSG00000143420 ENSG00000143420      28
## ENSG00000143437 ENSG00000143437      25
## ENSG00000143457 ENSG00000143457      16
## ENSG00000143458 ENSG00000143458      22
## ENSG00000143476 ENSG00000143476       1
## ENSG00000143486 ENSG00000143486      27
## ENSG00000143612 ENSG00000143612       6
## ENSG00000143622 ENSG00000143622       9
## ENSG00000143624 ENSG00000143624      10
## ENSG00000143643 ENSG00000143643      32
## ENSG00000143669 ENSG00000143669      17
## ENSG00000143740 ENSG00000143740       1
## ENSG00000143761 ENSG00000143761       9
## ENSG00000143786 ENSG00000143786      16
## ENSG00000143851 ENSG00000143851      15
## ENSG00000143862 ENSG00000143862      11
## ENSG00000143889 ENSG00000143889      28
## ENSG00000143924 ENSG00000143924       4
## ENSG00000144115 ENSG00000144115       2
## ENSG00000144134 ENSG00000144134       1
## ENSG00000144331 ENSG00000144331       2
## ENSG00000144354 ENSG00000144354       1
## ENSG00000144445 ENSG00000144445      10
## ENSG00000144504 ENSG00000144504      23
## ENSG00000144559 ENSG00000144559       1
## ENSG00000144580 ENSG00000144580       1
## ENSG00000144647 ENSG00000144647       8
## ENSG00000144659 ENSG00000144659      13
## ENSG00000144681 ENSG00000144681      13
## ENSG00000144741 ENSG00000144741       8
## ENSG00000144746 ENSG00000144746       6
## ENSG00000144802 ENSG00000144802       7
## ENSG00000144815 ENSG00000144815      21
## ENSG00000145014 ENSG00000145014      22
## ENSG00000145040 ENSG00000145040       6
## ENSG00000145041 ENSG00000145041      30
## ENSG00000145103 ENSG00000145103       1
## ENSG00000145191 ENSG00000145191       1
## ENSG00000145244 ENSG00000145244       3
## ENSG00000145246 ENSG00000145246       6
## ENSG00000145247 ENSG00000145247      19
## ENSG00000145332 ENSG00000145332      12
## ENSG00000145348 ENSG00000145348      32
## ENSG00000145362 ENSG00000145362       3
## ENSG00000145375 ENSG00000145375       1
## ENSG00000145416 ENSG00000145416      21
## ENSG00000145439 ENSG00000145439      19
## ENSG00000145685 ENSG00000145685       8
## ENSG00000145730 ENSG00000145730       6
## ENSG00000145779 ENSG00000145779      19
## ENSG00000145911 ENSG00000145911       5
## ENSG00000146021 ENSG00000146021      13
## ENSG00000146192 ENSG00000146192      21
## ENSG00000146205 ENSG00000146205      25
## ENSG00000146243 ENSG00000146243       2
## ENSG00000146281 ENSG00000146281      16
## ENSG00000146416 ENSG00000146416      16
## ENSG00000146463 ENSG00000146463       1
## ENSG00000146476 ENSG00000146476       2
## ENSG00000146701 ENSG00000146701       8
## ENSG00000146733 ENSG00000146733       1
## ENSG00000146909 ENSG00000146909       8
## ENSG00000146918 ENSG00000146918       1
## ENSG00000146950 ENSG00000146950      19
## ENSG00000147010 ENSG00000147010       9
## ENSG00000147138 ENSG00000147138       1
## ENSG00000147168 ENSG00000147168      10
## ENSG00000147174 ENSG00000147174      16
## ENSG00000147257 ENSG00000147257       1
## ENSG00000147324 ENSG00000147324       1
## ENSG00000147383 ENSG00000147383       1
## ENSG00000147408 ENSG00000147408      16
## ENSG00000147454 ENSG00000147454       9
## ENSG00000147471 ENSG00000147471       1
## ENSG00000147548 ENSG00000147548      25
## ENSG00000147592 ENSG00000147592       1
## ENSG00000147614 ENSG00000147614       2
## ENSG00000147647 ENSG00000147647       1
## ENSG00000147677 ENSG00000147677       8
## ENSG00000147684 ENSG00000147684       1
## ENSG00000147905 ENSG00000147905      16
## ENSG00000148187 ENSG00000148187       1
## ENSG00000148200 ENSG00000148200      17
## ENSG00000148219 ENSG00000148219      14
## ENSG00000148225 ENSG00000148225       2
## ENSG00000148248 ENSG00000148248      30
## ENSG00000148296 ENSG00000148296      15
## ENSG00000148334 ENSG00000148334       8
## ENSG00000148335 ENSG00000148335      21
## ENSG00000148344 ENSG00000148344       5
## ENSG00000148396 ENSG00000148396      11
## ENSG00000148450 ENSG00000148450      12
## ENSG00000148513 ENSG00000148513      26
## ENSG00000148606 ENSG00000148606       1
## ENSG00000148690 ENSG00000148690       1
## ENSG00000148719 ENSG00000148719       9
## ENSG00000148737 ENSG00000148737      12
## ENSG00000148814 ENSG00000148814       1
## ENSG00000148834 ENSG00000148834       8
## ENSG00000148840 ENSG00000148840       8
## ENSG00000148843 ENSG00000148843       1
## ENSG00000149115 ENSG00000149115       1
## ENSG00000149292 ENSG00000149292      19
## ENSG00000149311 ENSG00000149311      25
## ENSG00000149346 ENSG00000149346      10
## ENSG00000149418 ENSG00000149418      30
## ENSG00000149633 ENSG00000149633      19
## ENSG00000149639 ENSG00000149639       8
## ENSG00000149679 ENSG00000149679       9
## ENSG00000149716 ENSG00000149716       4
## ENSG00000149972 ENSG00000149972      16
## ENSG00000150048 ENSG00000150048      12
## ENSG00000150347 ENSG00000150347       6
## ENSG00000150556 ENSG00000150556       5
## ENSG00000150630 ENSG00000150630      19
## ENSG00000150768 ENSG00000150768       1
## ENSG00000150867 ENSG00000150867      11
## ENSG00000150967 ENSG00000150967       6
## ENSG00000150990 ENSG00000150990       8
## ENSG00000151148 ENSG00000151148      10
## ENSG00000151150 ENSG00000151150      19
## ENSG00000151208 ENSG00000151208       2
## ENSG00000151229 ENSG00000151229      11
## ENSG00000151292 ENSG00000151292       3
## ENSG00000151320 ENSG00000151320      14
## ENSG00000151413 ENSG00000151413       1
## ENSG00000151466 ENSG00000151466      17
## ENSG00000151490 ENSG00000151490      20
## ENSG00000151503 ENSG00000151503       1
## ENSG00000151532 ENSG00000151532      17
## ENSG00000151576 ENSG00000151576      12
## ENSG00000151689 ENSG00000151689      13
## ENSG00000151692 ENSG00000151692       4
## ENSG00000151693 ENSG00000151693       1
## ENSG00000151702 ENSG00000151702      17
## ENSG00000151726 ENSG00000151726      12
## ENSG00000151778 ENSG00000151778      19
## ENSG00000151789 ENSG00000151789       3
## ENSG00000151790 ENSG00000151790       5
## ENSG00000151835 ENSG00000151835       1
## ENSG00000152056 ENSG00000152056       3
## ENSG00000152104 ENSG00000152104       5
## ENSG00000152137 ENSG00000152137      14
## ENSG00000152147 ENSG00000152147       6
## ENSG00000152253 ENSG00000152253      19
## ENSG00000152443 ENSG00000152443       4
## ENSG00000152465 ENSG00000152465      22
## ENSG00000152492 ENSG00000152492       1
## ENSG00000152503 ENSG00000152503      21
## ENSG00000152672 ENSG00000152672      20
## ENSG00000152767 ENSG00000152767       3
## ENSG00000152804 ENSG00000152804      23
## ENSG00000152952 ENSG00000152952      19
## ENSG00000153044 ENSG00000153044       1
## ENSG00000153066 ENSG00000153066      29
## ENSG00000153086 ENSG00000153086      16
## ENSG00000153157 ENSG00000153157      13
## ENSG00000153395 ENSG00000153395       9
## ENSG00000153563 ENSG00000153563       6
## ENSG00000153823 ENSG00000153823       8
## ENSG00000153976 ENSG00000153976       5
## ENSG00000153982 ENSG00000153982      19
## ENSG00000154122 ENSG00000154122       2
## ENSG00000154153 ENSG00000154153       5
## ENSG00000154240 ENSG00000154240       5
## ENSG00000154305 ENSG00000154305      10
## ENSG00000154309 ENSG00000154309       2
## ENSG00000154310 ENSG00000154310      13
## ENSG00000154330 ENSG00000154330       3
## ENSG00000154447 ENSG00000154447      20
## ENSG00000154451 ENSG00000154451      12
## ENSG00000154589 ENSG00000154589      12
## ENSG00000154620 ENSG00000154620      30
## ENSG00000154723 ENSG00000154723       1
## ENSG00000154760 ENSG00000154760      13
## ENSG00000154781 ENSG00000154781      17
## ENSG00000154814 ENSG00000154814      19
## ENSG00000154822 ENSG00000154822      25
## ENSG00000155016 ENSG00000155016       1
## ENSG00000155026 ENSG00000155026      10
## ENSG00000155090 ENSG00000155090      29
## ENSG00000155093 ENSG00000155093      11
## ENSG00000155158 ENSG00000155158       2
## ENSG00000155189 ENSG00000155189       1
## ENSG00000155252 ENSG00000155252       8
## ENSG00000155275 ENSG00000155275      21
## ENSG00000155363 ENSG00000155363      12
## ENSG00000155380 ENSG00000155380       6
## ENSG00000155438 ENSG00000155438       1
## ENSG00000155463 ENSG00000155463       8
## ENSG00000155592 ENSG00000155592      21
## ENSG00000155760 ENSG00000155760      22
## ENSG00000155893 ENSG00000155893      25
## ENSG00000155906 ENSG00000155906      22
## ENSG00000156030 ENSG00000156030       9
## ENSG00000156042 ENSG00000156042      10
## ENSG00000156049 ENSG00000156049      22
## ENSG00000156239 ENSG00000156239       1
## ENSG00000156345 ENSG00000156345       1
## ENSG00000156398 ENSG00000156398       6
## ENSG00000156471 ENSG00000156471      30
## ENSG00000156500 ENSG00000156500      25
## ENSG00000156502 ENSG00000156502       1
## ENSG00000156711 ENSG00000156711      10
## ENSG00000156795 ENSG00000156795       1
## ENSG00000156802 ENSG00000156802      13
## ENSG00000156804 ENSG00000156804       1
## ENSG00000156958 ENSG00000156958      22
## ENSG00000156970 ENSG00000156970      19
## ENSG00000157036 ENSG00000157036       1
## ENSG00000157107 ENSG00000157107      10
## ENSG00000157110 ENSG00000157110       2
## ENSG00000157227 ENSG00000157227       6
## ENSG00000157456 ENSG00000157456       1
## ENSG00000157540 ENSG00000157540      17
## ENSG00000157542 ENSG00000157542      16
## ENSG00000157617 ENSG00000157617       6
## ENSG00000157654 ENSG00000157654       1
## ENSG00000157657 ENSG00000157657      22
## ENSG00000157881 ENSG00000157881      17
## ENSG00000157890 ENSG00000157890      10
## ENSG00000157933 ENSG00000157933      11
## ENSG00000157985 ENSG00000157985      14
## ENSG00000158006 ENSG00000158006      13
## ENSG00000158062 ENSG00000158062       8
## ENSG00000158292 ENSG00000158292      13
## ENSG00000158321 ENSG00000158321       6
## ENSG00000158373 ENSG00000158373      16
## ENSG00000158406 ENSG00000158406      16
## ENSG00000158417 ENSG00000158417       1
## ENSG00000158691 ENSG00000158691      13
## ENSG00000158710 ENSG00000158710      17
## ENSG00000158715 ENSG00000158715      21
## ENSG00000158815 ENSG00000158815      25
## ENSG00000159023 ENSG00000159023      17
## ENSG00000159199 ENSG00000159199       1
## ENSG00000159216 ENSG00000159216      21
## ENSG00000159261 ENSG00000159261       5
## ENSG00000159307 ENSG00000159307      13
## ENSG00000159335 ENSG00000159335       1
## ENSG00000159346 ENSG00000159346      17
## ENSG00000159348 ENSG00000159348       6
## ENSG00000159363 ENSG00000159363       8
## ENSG00000159423 ENSG00000159423       8
## ENSG00000159445 ENSG00000159445       1
## ENSG00000159479 ENSG00000159479       5
## ENSG00000159733 ENSG00000159733       1
## ENSG00000159784 ENSG00000159784      31
## ENSG00000159905 ENSG00000159905       2
## ENSG00000160097 ENSG00000160097       2
## ENSG00000160113 ENSG00000160113       1
## ENSG00000160124 ENSG00000160124       3
## ENSG00000160191 ENSG00000160191      16
## ENSG00000160194 ENSG00000160194       1
## ENSG00000160201 ENSG00000160201      10
## ENSG00000160214 ENSG00000160214       8
## ENSG00000160271 ENSG00000160271      30
## ENSG00000160299 ENSG00000160299      21
## ENSG00000160307 ENSG00000160307       1
## ENSG00000160679 ENSG00000160679      17
## ENSG00000160753 ENSG00000160753      32
## ENSG00000160785 ENSG00000160785      17
## ENSG00000160789 ENSG00000160789       1
## ENSG00000160791 ENSG00000160791       6
## ENSG00000160799 ENSG00000160799      30
## ENSG00000160803 ENSG00000160803       1
## ENSG00000160856 ENSG00000160856       3
## ENSG00000160867 ENSG00000160867      16
## ENSG00000160932 ENSG00000160932       7
## ENSG00000161638 ENSG00000161638      18
## ENSG00000161640 ENSG00000161640      29
## ENSG00000161653 ENSG00000161653       6
## ENSG00000161791 ENSG00000161791      21
## ENSG00000161888 ENSG00000161888      19
## ENSG00000161960 ENSG00000161960       1
## ENSG00000162063 ENSG00000162063      19
## ENSG00000162104 ENSG00000162104       8
## ENSG00000162129 ENSG00000162129       8
## ENSG00000162139 ENSG00000162139       8
## ENSG00000162267 ENSG00000162267      21
## ENSG00000162377 ENSG00000162377       6
## ENSG00000162385 ENSG00000162385      27
## ENSG00000162390 ENSG00000162390      13
## ENSG00000162408 ENSG00000162408      21
## ENSG00000162419 ENSG00000162419       9
## ENSG00000162433 ENSG00000162433       6
## ENSG00000162511 ENSG00000162511       9
## ENSG00000162639 ENSG00000162639      13
## ENSG00000162669 ENSG00000162669      27
## ENSG00000162694 ENSG00000162694       1
## ENSG00000162722 ENSG00000162722      21
## ENSG00000162729 ENSG00000162729       1
## ENSG00000162739 ENSG00000162739      19
## ENSG00000162757 ENSG00000162757       5
## ENSG00000162869 ENSG00000162869      10
## ENSG00000162877 ENSG00000162877       2
## ENSG00000162909 ENSG00000162909       8
## ENSG00000162928 ENSG00000162928       1
## ENSG00000162929 ENSG00000162929      25
## ENSG00000162944 ENSG00000162944       2
## ENSG00000163029 ENSG00000163029      19
## ENSG00000163191 ENSG00000163191      18
## ENSG00000163251 ENSG00000163251       6
## ENSG00000163297 ENSG00000163297      10
## ENSG00000163328 ENSG00000163328      12
## ENSG00000163362 ENSG00000163362      19
## ENSG00000163399 ENSG00000163399       8
## ENSG00000163406 ENSG00000163406      25
## ENSG00000163466 ENSG00000163466      17
## ENSG00000163482 ENSG00000163482      32
## ENSG00000163513 ENSG00000163513       4
## ENSG00000163521 ENSG00000163521       8
## ENSG00000163528 ENSG00000163528       6
## ENSG00000163536 ENSG00000163536      19
## ENSG00000163563 ENSG00000163563      24
## ENSG00000163644 ENSG00000163644      22
## ENSG00000163666 ENSG00000163666       6
## ENSG00000163683 ENSG00000163683       3
## ENSG00000163719 ENSG00000163719       9
## ENSG00000163746 ENSG00000163746      16
## ENSG00000163755 ENSG00000163755      20
## ENSG00000163798 ENSG00000163798       6
## ENSG00000163866 ENSG00000163866      13
## ENSG00000163872 ENSG00000163872       1
## ENSG00000163950 ENSG00000163950      28
## ENSG00000163995 ENSG00000163995       5
## ENSG00000164048 ENSG00000164048       1
## ENSG00000164056 ENSG00000164056       1
## ENSG00000164091 ENSG00000164091      11
## ENSG00000164104 ENSG00000164104      13
## ENSG00000164105 ENSG00000164105       8
## ENSG00000164109 ENSG00000164109      19
## ENSG00000164111 ENSG00000164111       8
## ENSG00000164116 ENSG00000164116       1
## ENSG00000164136 ENSG00000164136      20
## ENSG00000164182 ENSG00000164182       6
## ENSG00000164187 ENSG00000164187       2
## ENSG00000164291 ENSG00000164291      19
## ENSG00000164292 ENSG00000164292      25
## ENSG00000164296 ENSG00000164296       1
## ENSG00000164379 ENSG00000164379       5
## ENSG00000164403 ENSG00000164403       8
## ENSG00000164406 ENSG00000164406       1
## ENSG00000164414 ENSG00000164414       1
## ENSG00000164442 ENSG00000164442      23
## ENSG00000164543 ENSG00000164543       4
## ENSG00000164649 ENSG00000164649      13
## ENSG00000164741 ENSG00000164741       6
## ENSG00000164754 ENSG00000164754      17
## ENSG00000164818 ENSG00000164818       1
## ENSG00000164828 ENSG00000164828       1
## ENSG00000164867 ENSG00000164867       1
## ENSG00000164975 ENSG00000164975       1
## ENSG00000164985 ENSG00000164985      10
## ENSG00000165055 ENSG00000165055       1
## ENSG00000165097 ENSG00000165097      10
## ENSG00000165102 ENSG00000165102      21
## ENSG00000165138 ENSG00000165138       1
## ENSG00000165181 ENSG00000165181      16
## ENSG00000165185 ENSG00000165185       7
## ENSG00000165259 ENSG00000165259       8
## ENSG00000165280 ENSG00000165280      18
## ENSG00000165283 ENSG00000165283       1
## ENSG00000165304 ENSG00000165304      19
## ENSG00000165406 ENSG00000165406      17
## ENSG00000165449 ENSG00000165449      19
## ENSG00000165527 ENSG00000165527      29
## ENSG00000165568 ENSG00000165568      13
## ENSG00000165661 ENSG00000165661      23
## ENSG00000165685 ENSG00000165685       8
## ENSG00000165733 ENSG00000165733       1
## ENSG00000165804 ENSG00000165804      14
## ENSG00000165895 ENSG00000165895      19
## ENSG00000165898 ENSG00000165898       6
## ENSG00000165916 ENSG00000165916       1
## ENSG00000165934 ENSG00000165934       6
## ENSG00000165943 ENSG00000165943      11
## ENSG00000165949 ENSG00000165949       6
## ENSG00000165966 ENSG00000165966      14
## ENSG00000166016 ENSG00000166016      25
## ENSG00000166123 ENSG00000166123       1
## ENSG00000166140 ENSG00000166140      32
## ENSG00000166164 ENSG00000166164      33
## ENSG00000166197 ENSG00000166197       1
## ENSG00000166199 ENSG00000166199       1
## ENSG00000166224 ENSG00000166224       1
## ENSG00000166257 ENSG00000166257       2
## ENSG00000166289 ENSG00000166289       1
## ENSG00000166343 ENSG00000166343      25
## ENSG00000166398 ENSG00000166398       3
## ENSG00000166432 ENSG00000166432      25
## ENSG00000166478 ENSG00000166478      17
## ENSG00000166484 ENSG00000166484      29
## ENSG00000166503 ENSG00000166503       1
## ENSG00000166508 ENSG00000166508       4
## ENSG00000166526 ENSG00000166526      15
## ENSG00000166527 ENSG00000166527      12
## ENSG00000166529 ENSG00000166529      13
## ENSG00000166592 ENSG00000166592       8
## ENSG00000166750 ENSG00000166750       2
## ENSG00000166788 ENSG00000166788       1
## ENSG00000166801 ENSG00000166801       3
## ENSG00000166816 ENSG00000166816      21
## ENSG00000166881 ENSG00000166881      19
## ENSG00000166949 ENSG00000166949      21
## ENSG00000167014 ENSG00000167014      25
## ENSG00000167077 ENSG00000167077      13
## ENSG00000167083 ENSG00000167083      31
## ENSG00000167193 ENSG00000167193      27
## ENSG00000167291 ENSG00000167291       6
## ENSG00000167528 ENSG00000167528      25
## ENSG00000167543 ENSG00000167543      21
## ENSG00000167562 ENSG00000167562      10
## ENSG00000167565 ENSG00000167565      11
## ENSG00000167566 ENSG00000167566      18
## ENSG00000167595 ENSG00000167595      17
## ENSG00000167634 ENSG00000167634       2
## ENSG00000167680 ENSG00000167680      31
## ENSG00000167699 ENSG00000167699       1
## ENSG00000167703 ENSG00000167703       9
## ENSG00000167720 ENSG00000167720       1
## ENSG00000167721 ENSG00000167721       1
## ENSG00000167769 ENSG00000167769       5
## ENSG00000167772 ENSG00000167772       6
## ENSG00000167925 ENSG00000167925      29
## ENSG00000167977 ENSG00000167977       8
## ENSG00000167994 ENSG00000167994       6
## ENSG00000167995 ENSG00000167995      24
## ENSG00000168002 ENSG00000168002      30
## ENSG00000168005 ENSG00000168005      13
## ENSG00000168016 ENSG00000168016      10
## ENSG00000168040 ENSG00000168040       6
## ENSG00000168209 ENSG00000168209      11
## ENSG00000168256 ENSG00000168256      20
## ENSG00000168259 ENSG00000168259       1
## ENSG00000168264 ENSG00000168264      29
## ENSG00000168268 ENSG00000168268       1
## ENSG00000168273 ENSG00000168273       1
## ENSG00000168303 ENSG00000168303       6
## ENSG00000168389 ENSG00000168389       1
## ENSG00000168439 ENSG00000168439       6
## ENSG00000168542 ENSG00000168542       3
## ENSG00000168569 ENSG00000168569       1
## ENSG00000168589 ENSG00000168589       5
## ENSG00000168672 ENSG00000168672      22
## ENSG00000168679 ENSG00000168679      22
## ENSG00000168701 ENSG00000168701       6
## ENSG00000168792 ENSG00000168792      30
## ENSG00000168795 ENSG00000168795       1
## ENSG00000168883 ENSG00000168883      11
## ENSG00000168904 ENSG00000168904      13
## ENSG00000168924 ENSG00000168924       1
## ENSG00000168944 ENSG00000168944      13
## ENSG00000169020 ENSG00000169020       1
## ENSG00000169047 ENSG00000169047       1
## ENSG00000169122 ENSG00000169122      13
## ENSG00000169231 ENSG00000169231      10
## ENSG00000169239 ENSG00000169239      29
## ENSG00000169375 ENSG00000169375       4
## ENSG00000169402 ENSG00000169402      10
## ENSG00000169432 ENSG00000169432       3
## ENSG00000169499 ENSG00000169499      25
## ENSG00000169583 ENSG00000169583      14
## ENSG00000169607 ENSG00000169607      19
## ENSG00000169621 ENSG00000169621      22
## ENSG00000169641 ENSG00000169641       1
## ENSG00000169696 ENSG00000169696      21
## ENSG00000169750 ENSG00000169750       1
## ENSG00000169813 ENSG00000169813       5
## ENSG00000169860 ENSG00000169860       1
## ENSG00000169871 ENSG00000169871      16
## ENSG00000169908 ENSG00000169908      19
## ENSG00000169919 ENSG00000169919      21
## ENSG00000169926 ENSG00000169926      11
## ENSG00000170011 ENSG00000170011      10
## ENSG00000170027 ENSG00000170027       6
## ENSG00000170035 ENSG00000170035      23
## ENSG00000170037 ENSG00000170037      21
## ENSG00000170044 ENSG00000170044      19
## ENSG00000170085 ENSG00000170085      21
## ENSG00000170113 ENSG00000170113       1
## ENSG00000170175 ENSG00000170175       2
## ENSG00000170190 ENSG00000170190       9
## ENSG00000170214 ENSG00000170214      31
## ENSG00000170248 ENSG00000170248      33
## ENSG00000170298 ENSG00000170298      15
## ENSG00000170312 ENSG00000170312      19
## ENSG00000170322 ENSG00000170322      11
## ENSG00000170348 ENSG00000170348       1
## ENSG00000170381 ENSG00000170381       5
## ENSG00000170464 ENSG00000170464       1
## ENSG00000170473 ENSG00000170473       1
## ENSG00000170500 ENSG00000170500      11
## ENSG00000170502 ENSG00000170502       1
## ENSG00000170542 ENSG00000170542      18
## ENSG00000170581 ENSG00000170581       7
## ENSG00000170632 ENSG00000170632       1
## ENSG00000170634 ENSG00000170634       4
## ENSG00000170653 ENSG00000170653      33
## ENSG00000170677 ENSG00000170677       1
## ENSG00000170776 ENSG00000170776      25
## ENSG00000170779 ENSG00000170779      30
## ENSG00000170906 ENSG00000170906       1
## ENSG00000171051 ENSG00000171051      24
## ENSG00000171100 ENSG00000171100      25
## ENSG00000171208 ENSG00000171208       8
## ENSG00000171262 ENSG00000171262       1
## ENSG00000171307 ENSG00000171307       1
## ENSG00000171365 ENSG00000171365      20
## ENSG00000171448 ENSG00000171448      28
## ENSG00000171453 ENSG00000171453       1
## ENSG00000171530 ENSG00000171530      31
## ENSG00000171566 ENSG00000171566       6
## ENSG00000171612 ENSG00000171612      21
## ENSG00000171617 ENSG00000171617      21
## ENSG00000171729 ENSG00000171729       8
## ENSG00000171735 ENSG00000171735      30
## ENSG00000171811 ENSG00000171811       5
## ENSG00000171843 ENSG00000171843       1
## ENSG00000171847 ENSG00000171847      20
## ENSG00000171867 ENSG00000171867       8
## ENSG00000171877 ENSG00000171877       5
## ENSG00000171940 ENSG00000171940      28
## ENSG00000171943 ENSG00000171943      12
## ENSG00000171960 ENSG00000171960       1
## ENSG00000171962 ENSG00000171962       8
## ENSG00000171984 ENSG00000171984      13
## ENSG00000172123 ENSG00000172123      25
## ENSG00000172159 ENSG00000172159      12
## ENSG00000172216 ENSG00000172216       9
## ENSG00000172247 ENSG00000172247      22
## ENSG00000172273 ENSG00000172273      19
## ENSG00000172331 ENSG00000172331      27
## ENSG00000172345 ENSG00000172345      25
## ENSG00000172403 ENSG00000172403       2
## ENSG00000172428 ENSG00000172428       1
## ENSG00000172493 ENSG00000172493      10
## ENSG00000172534 ENSG00000172534      21
## ENSG00000172543 ENSG00000172543      14
## ENSG00000172578 ENSG00000172578       4
## ENSG00000172586 ENSG00000172586       6
## ENSG00000172590 ENSG00000172590       1
## ENSG00000172594 ENSG00000172594       1
## ENSG00000172716 ENSG00000172716       1
## ENSG00000172748 ENSG00000172748       2
## ENSG00000172757 ENSG00000172757      10
## ENSG00000172794 ENSG00000172794      25
## ENSG00000172809 ENSG00000172809       1
## ENSG00000172888 ENSG00000172888      22
## ENSG00000172893 ENSG00000172893       1
## ENSG00000172927 ENSG00000172927      28
## ENSG00000173083 ENSG00000173083      18
## ENSG00000173124 ENSG00000173124       2
## ENSG00000173153 ENSG00000173153      11
## ENSG00000173156 ENSG00000173156       6
## ENSG00000173166 ENSG00000173166       8
## ENSG00000173175 ENSG00000173175      19
## ENSG00000173198 ENSG00000173198      25
## ENSG00000173214 ENSG00000173214      22
## ENSG00000173227 ENSG00000173227       5
## ENSG00000173262 ENSG00000173262      27
## ENSG00000173391 ENSG00000173391       1
## ENSG00000173457 ENSG00000173457       1
## ENSG00000173511 ENSG00000173511       1
## ENSG00000173530 ENSG00000173530       8
## ENSG00000173545 ENSG00000173545      24
## ENSG00000173546 ENSG00000173546       1
## ENSG00000173548 ENSG00000173548       1
## ENSG00000173575 ENSG00000173575      17
## ENSG00000173801 ENSG00000173801       1
## ENSG00000173818 ENSG00000173818      21
## ENSG00000173846 ENSG00000173846       9
## ENSG00000173917 ENSG00000173917       6
## ENSG00000173950 ENSG00000173950      30
## ENSG00000174177 ENSG00000174177      21
## ENSG00000174197 ENSG00000174197      13
## ENSG00000174231 ENSG00000174231      11
## ENSG00000174236 ENSG00000174236       1
## ENSG00000174371 ENSG00000174371       1
## ENSG00000174437 ENSG00000174437       8
## ENSG00000174442 ENSG00000174442       1
## ENSG00000174456 ENSG00000174456      10
## ENSG00000174482 ENSG00000174482      27
## ENSG00000174705 ENSG00000174705       6
## ENSG00000174827 ENSG00000174827       1
## ENSG00000174989 ENSG00000174989      32
## ENSG00000175130 ENSG00000175130      11
## ENSG00000175164 ENSG00000175164      21
## ENSG00000175183 ENSG00000175183       2
## ENSG00000175265 ENSG00000175265       1
## ENSG00000175414 ENSG00000175414       1
## ENSG00000175445 ENSG00000175445       1
## ENSG00000175513 ENSG00000175513      23
## ENSG00000175544 ENSG00000175544       1
## ENSG00000175591 ENSG00000175591      23
## ENSG00000175691 ENSG00000175691       1
## ENSG00000175899 ENSG00000175899       6
## ENSG00000176014 ENSG00000176014       1
## ENSG00000176105 ENSG00000176105      19
## ENSG00000176125 ENSG00000176125       2
## ENSG00000176390 ENSG00000176390      17
## ENSG00000176490 ENSG00000176490      22
## ENSG00000176531 ENSG00000176531       1
## ENSG00000176619 ENSG00000176619       1
## ENSG00000176641 ENSG00000176641       3
## ENSG00000176834 ENSG00000176834      22
## ENSG00000176973 ENSG00000176973      18
## ENSG00000177076 ENSG00000177076       1
## ENSG00000177119 ENSG00000177119       8
## ENSG00000177138 ENSG00000177138      16
## ENSG00000177189 ENSG00000177189       4
## ENSG00000177192 ENSG00000177192       8
## ENSG00000177272 ENSG00000177272       8
## ENSG00000177294 ENSG00000177294      10
## ENSG00000177311 ENSG00000177311       1
## ENSG00000177374 ENSG00000177374      23
## ENSG00000177409 ENSG00000177409      26
## ENSG00000177426 ENSG00000177426       8
## ENSG00000177469 ENSG00000177469       1
## ENSG00000177479 ENSG00000177479      29
## ENSG00000177700 ENSG00000177700       1
## ENSG00000177917 ENSG00000177917      25
## ENSG00000177932 ENSG00000177932       1
## ENSG00000177989 ENSG00000177989       7
## ENSG00000178104 ENSG00000178104       2
## ENSG00000178105 ENSG00000178105       1
## ENSG00000178199 ENSG00000178199       1
## ENSG00000178209 ENSG00000178209      29
## ENSG00000178338 ENSG00000178338       1
## ENSG00000178409 ENSG00000178409       1
## ENSG00000178573 ENSG00000178573       6
## ENSG00000178685 ENSG00000178685      10
## ENSG00000178700 ENSG00000178700       3
## ENSG00000178741 ENSG00000178741       8
## ENSG00000178852 ENSG00000178852      22
## ENSG00000178882 ENSG00000178882       6
## ENSG00000178896 ENSG00000178896      27
## ENSG00000178904 ENSG00000178904       4
## ENSG00000178921 ENSG00000178921      20
## ENSG00000178951 ENSG00000178951      29
## ENSG00000178966 ENSG00000178966       2
## ENSG00000178982 ENSG00000178982       8
## ENSG00000178988 ENSG00000178988      19
## ENSG00000178996 ENSG00000178996      24
## ENSG00000179044 ENSG00000179044      12
## ENSG00000179051 ENSG00000179051      21
## ENSG00000179091 ENSG00000179091       8
## ENSG00000179240 ENSG00000179240      19
## ENSG00000179262 ENSG00000179262      21
## ENSG00000179271 ENSG00000179271       1
## ENSG00000179348 ENSG00000179348       1
## ENSG00000179388 ENSG00000179388      16
## ENSG00000179409 ENSG00000179409       1
## ENSG00000179528 ENSG00000179528       1
## ENSG00000179776 ENSG00000179776       6
## ENSG00000179833 ENSG00000179833      11
## ENSG00000179889 ENSG00000179889      13
## ENSG00000179912 ENSG00000179912      17
## ENSG00000179915 ENSG00000179915      16
## ENSG00000179933 ENSG00000179933       5
## ENSG00000179941 ENSG00000179941       2
## ENSG00000179950 ENSG00000179950      21
## ENSG00000179988 ENSG00000179988      22
## ENSG00000180182 ENSG00000180182      11
## ENSG00000180198 ENSG00000180198      31
## ENSG00000180370 ENSG00000180370      17
## ENSG00000180549 ENSG00000180549      18
## ENSG00000180992 ENSG00000180992       1
## ENSG00000181007 ENSG00000181007       1
## ENSG00000181045 ENSG00000181045       8
## ENSG00000181192 ENSG00000181192      10
## ENSG00000181350 ENSG00000181350       1
## ENSG00000181381 ENSG00000181381      17
## ENSG00000181392 ENSG00000181392      25
## ENSG00000181481 ENSG00000181481      12
## ENSG00000181610 ENSG00000181610       1
## ENSG00000181666 ENSG00000181666       1
## ENSG00000181754 ENSG00000181754      19
## ENSG00000181852 ENSG00000181852      23
## ENSG00000181873 ENSG00000181873       1
## ENSG00000181915 ENSG00000181915       1
## ENSG00000182118 ENSG00000182118       6
## ENSG00000182154 ENSG00000182154       1
## ENSG00000182158 ENSG00000182158      13
## ENSG00000182162 ENSG00000182162      11
## ENSG00000182183 ENSG00000182183       4
## ENSG00000182263 ENSG00000182263       5
## ENSG00000182326 ENSG00000182326      19
## ENSG00000182378 ENSG00000182378       1
## ENSG00000182379 ENSG00000182379       6
## ENSG00000182389 ENSG00000182389      17
## ENSG00000182504 ENSG00000182504      26
## ENSG00000182578 ENSG00000182578       8
## ENSG00000182704 ENSG00000182704       5
## ENSG00000182809 ENSG00000182809       1
## ENSG00000182885 ENSG00000182885      17
## ENSG00000182901 ENSG00000182901      27
## ENSG00000182923 ENSG00000182923      10
## ENSG00000182952 ENSG00000182952       3
## ENSG00000182973 ENSG00000182973      10
## ENSG00000183011 ENSG00000183011      31
## ENSG00000183023 ENSG00000183023      12
## ENSG00000183044 ENSG00000183044      17
## ENSG00000183087 ENSG00000183087       1
## ENSG00000183092 ENSG00000183092      21
## ENSG00000183117 ENSG00000183117      20
## ENSG00000183172 ENSG00000183172       8
## ENSG00000183185 ENSG00000183185      14
## ENSG00000183283 ENSG00000183283      17
## ENSG00000183323 ENSG00000183323       4
## ENSG00000183337 ENSG00000183337      11
## ENSG00000183340 ENSG00000183340       2
## ENSG00000183431 ENSG00000183431      15
## ENSG00000183474 ENSG00000183474       3
## ENSG00000183520 ENSG00000183520       6
## ENSG00000183530 ENSG00000183530      25
## ENSG00000183576 ENSG00000183576      30
## ENSG00000183578 ENSG00000183578       6
## ENSG00000183617 ENSG00000183617       8
## ENSG00000183665 ENSG00000183665       2
## ENSG00000183763 ENSG00000183763       1
## ENSG00000183765 ENSG00000183765       1
## ENSG00000183785 ENSG00000183785      25
## ENSG00000183801 ENSG00000183801       2
## ENSG00000183813 ENSG00000183813       1
## ENSG00000183853 ENSG00000183853       5
## ENSG00000183955 ENSG00000183955      11
## ENSG00000184007 ENSG00000184007      11
## ENSG00000184009 ENSG00000184009       8
## ENSG00000184083 ENSG00000184083       1
## ENSG00000184232 ENSG00000184232       8
## ENSG00000184292 ENSG00000184292      19
## ENSG00000184384 ENSG00000184384      12
## ENSG00000184402 ENSG00000184402       4
## ENSG00000184432 ENSG00000184432       3
## ENSG00000184545 ENSG00000184545       5
## ENSG00000184602 ENSG00000184602       9
## ENSG00000184787 ENSG00000184787       8
## ENSG00000184792 ENSG00000184792       1
## ENSG00000184898 ENSG00000184898       2
## ENSG00000184900 ENSG00000184900       8
## ENSG00000184924 ENSG00000184924       1
## ENSG00000184979 ENSG00000184979      32
## ENSG00000185033 ENSG00000185033      12
## ENSG00000185043 ENSG00000185043      11
## ENSG00000185049 ENSG00000185049      21
## ENSG00000185055 ENSG00000185055      30
## ENSG00000185158 ENSG00000185158      25
## ENSG00000185271 ENSG00000185271       5
## ENSG00000185272 ENSG00000185272      16
## ENSG00000185480 ENSG00000185480       1
## ENSG00000185561 ENSG00000185561       5
## ENSG00000185619 ENSG00000185619      17
## ENSG00000185627 ENSG00000185627      27
## ENSG00000185669 ENSG00000185669      11
## ENSG00000185686 ENSG00000185686       5
## ENSG00000185736 ENSG00000185736       5
## ENSG00000185813 ENSG00000185813      32
## ENSG00000185825 ENSG00000185825      18
## ENSG00000185880 ENSG00000185880       3
## ENSG00000185920 ENSG00000185920      19
## ENSG00000186001 ENSG00000186001      25
## ENSG00000186026 ENSG00000186026      19
## ENSG00000186073 ENSG00000186073       5
## ENSG00000186132 ENSG00000186132       3
## ENSG00000186174 ENSG00000186174      21
## ENSG00000186193 ENSG00000186193      30
## ENSG00000186197 ENSG00000186197       6
## ENSG00000186280 ENSG00000186280       6
## ENSG00000186281 ENSG00000186281       1
## ENSG00000186298 ENSG00000186298       1
## ENSG00000186318 ENSG00000186318       1
## ENSG00000186376 ENSG00000186376       4
## ENSG00000186446 ENSG00000186446      19
## ENSG00000186448 ENSG00000186448       1
## ENSG00000186470 ENSG00000186470       2
## ENSG00000186645 ENSG00000186645      10
## ENSG00000186654 ENSG00000186654       3
## ENSG00000186665 ENSG00000186665       1
## ENSG00000186812 ENSG00000186812      16
## ENSG00000186818 ENSG00000186818       8
## ENSG00000186951 ENSG00000186951      21
## ENSG00000187105 ENSG00000187105      22
## ENSG00000187116 ENSG00000187116      18
## ENSG00000187134 ENSG00000187134      19
## ENSG00000187147 ENSG00000187147      23
## ENSG00000187164 ENSG00000187164       8
## ENSG00000187166 ENSG00000187166       7
## ENSG00000187187 ENSG00000187187       1
## ENSG00000187231 ENSG00000187231      12
## ENSG00000187554 ENSG00000187554      12
## ENSG00000187566 ENSG00000187566       1
## ENSG00000187569 ENSG00000187569       2
## ENSG00000187601 ENSG00000187601       1
## ENSG00000187676 ENSG00000187676      13
## ENSG00000187726 ENSG00000187726      29
## ENSG00000187758 ENSG00000187758       1
## ENSG00000187792 ENSG00000187792      22
## ENSG00000187800 ENSG00000187800       1
## ENSG00000187824 ENSG00000187824       2
## ENSG00000188000 ENSG00000188000      31
## ENSG00000188033 ENSG00000188033      11
## ENSG00000188037 ENSG00000188037      18
## ENSG00000188177 ENSG00000188177      26
## ENSG00000188211 ENSG00000188211       8
## ENSG00000188234 ENSG00000188234      10
## ENSG00000188343 ENSG00000188343       3
## ENSG00000188375 ENSG00000188375      17
## ENSG00000188419 ENSG00000188419       1
## ENSG00000188452 ENSG00000188452      32
## ENSG00000188636 ENSG00000188636       8
## ENSG00000188725 ENSG00000188725       6
## ENSG00000188735 ENSG00000188735       4
## ENSG00000188886 ENSG00000188886      12
## ENSG00000188921 ENSG00000188921      25
## ENSG00000188938 ENSG00000188938      12
## ENSG00000189067 ENSG00000189067      27
## ENSG00000189077 ENSG00000189077      17
## ENSG00000189144 ENSG00000189144      28
## ENSG00000189159 ENSG00000189159       4
## ENSG00000189164 ENSG00000189164       1
## ENSG00000189195 ENSG00000189195      26
## ENSG00000189337 ENSG00000189337      16
## ENSG00000189430 ENSG00000189430      16
## ENSG00000196072 ENSG00000196072      17
## ENSG00000196123 ENSG00000196123       1
## ENSG00000196126 ENSG00000196126       8
## ENSG00000196141 ENSG00000196141       2
## ENSG00000196199 ENSG00000196199      10
## ENSG00000196227 ENSG00000196227      11
## ENSG00000196230 ENSG00000196230       1
## ENSG00000196247 ENSG00000196247      28
## ENSG00000196305 ENSG00000196305       1
## ENSG00000196358 ENSG00000196358      17
## ENSG00000196363 ENSG00000196363       8
## ENSG00000196365 ENSG00000196365       8
## ENSG00000196369 ENSG00000196369      12
## ENSG00000196378 ENSG00000196378      21
## ENSG00000196388 ENSG00000196388       1
## ENSG00000196405 ENSG00000196405      13
## ENSG00000196419 ENSG00000196419       1
## ENSG00000196436 ENSG00000196436      22
## ENSG00000196465 ENSG00000196465       1
## ENSG00000196526 ENSG00000196526       5
## ENSG00000196584 ENSG00000196584      19
## ENSG00000196652 ENSG00000196652      28
## ENSG00000196653 ENSG00000196653       1
## ENSG00000196743 ENSG00000196743       6
## ENSG00000196747 ENSG00000196747      25
## ENSG00000196782 ENSG00000196782      17
## ENSG00000196872 ENSG00000196872      16
## ENSG00000196923 ENSG00000196923      17
## ENSG00000196943 ENSG00000196943      21
## ENSG00000196976 ENSG00000196976       1
## ENSG00000197016 ENSG00000197016      19
## ENSG00000197063 ENSG00000197063      29
## ENSG00000197093 ENSG00000197093      16
## ENSG00000197279 ENSG00000197279      28
## ENSG00000197283 ENSG00000197283      22
## ENSG00000197302 ENSG00000197302       2
## ENSG00000197312 ENSG00000197312       1
## ENSG00000197442 ENSG00000197442      17
## ENSG00000197451 ENSG00000197451       8
## ENSG00000197461 ENSG00000197461       1
## ENSG00000197566 ENSG00000197566       1
## ENSG00000197568 ENSG00000197568       1
## ENSG00000197620 ENSG00000197620      12
## ENSG00000197641 ENSG00000197641       5
## ENSG00000197747 ENSG00000197747       8
## ENSG00000197771 ENSG00000197771       3
## ENSG00000197776 ENSG00000197776      22
## ENSG00000197782 ENSG00000197782      19
## ENSG00000197785 ENSG00000197785       1
## ENSG00000197857 ENSG00000197857       4
## ENSG00000197935 ENSG00000197935      19
## ENSG00000197937 ENSG00000197937      19
## ENSG00000197956 ENSG00000197956      18
## ENSG00000197977 ENSG00000197977      22
## ENSG00000197978 ENSG00000197978      19
## ENSG00000197992 ENSG00000197992      26
## ENSG00000198178 ENSG00000198178      26
## ENSG00000198286 ENSG00000198286       1
## ENSG00000198324 ENSG00000198324      30
## ENSG00000198336 ENSG00000198336       2
## ENSG00000198353 ENSG00000198353       6
## ENSG00000198431 ENSG00000198431      18
## ENSG00000198455 ENSG00000198455      32
## ENSG00000198502 ENSG00000198502       8
## ENSG00000198624 ENSG00000198624      29
## ENSG00000198673 ENSG00000198673      25
## ENSG00000198700 ENSG00000198700       1
## ENSG00000198730 ENSG00000198730       5
## ENSG00000198838 ENSG00000198838      22
## ENSG00000198848 ENSG00000198848      20
## ENSG00000198870 ENSG00000198870       8
## ENSG00000198876 ENSG00000198876      16
## ENSG00000198945 ENSG00000198945      21
## ENSG00000198959 ENSG00000198959       6
## ENSG00000198964 ENSG00000198964      25
## ENSG00000203546 ENSG00000203546       1
## ENSG00000203667 ENSG00000203667      25
## ENSG00000203705 ENSG00000203705      26
## ENSG00000203814 ENSG00000203814      26
## ENSG00000204104 ENSG00000204104       1
## ENSG00000204131 ENSG00000204131      17
## ENSG00000204161 ENSG00000204161       4
## ENSG00000204178 ENSG00000204178       4
## ENSG00000204271 ENSG00000204271       1
## ENSG00000204291 ENSG00000204291      19
## ENSG00000204388 ENSG00000204388       3
## ENSG00000204389 ENSG00000204389      16
## ENSG00000204574 ENSG00000204574       3
## ENSG00000204583 ENSG00000204583      19
## ENSG00000204590 ENSG00000204590      12
## ENSG00000204815 ENSG00000204815      29
## ENSG00000204909 ENSG00000204909      16
## ENSG00000204923 ENSG00000204923       2
## ENSG00000204991 ENSG00000204991       2
## ENSG00000205038 ENSG00000205038       1
## ENSG00000205236 ENSG00000205236      10
## ENSG00000205339 ENSG00000205339       1
## ENSG00000205362 ENSG00000205362       2
## ENSG00000205517 ENSG00000205517      16
## ENSG00000205571 ENSG00000205571      32
## ENSG00000205639 ENSG00000205639      21
## ENSG00000205730 ENSG00000205730       8
## ENSG00000205937 ENSG00000205937      29
## ENSG00000206562 ENSG00000206562       1
## ENSG00000211448 ENSG00000211448      19
## ENSG00000213214 ENSG00000213214      19
## ENSG00000213380 ENSG00000213380       6
## ENSG00000213588 ENSG00000213588      19
## ENSG00000213694 ENSG00000213694       8
## ENSG00000213719 ENSG00000213719      18
## ENSG00000213859 ENSG00000213859       1
## ENSG00000213918 ENSG00000213918      25
## ENSG00000213923 ENSG00000213923       5
## ENSG00000213988 ENSG00000213988       6
## ENSG00000214226 ENSG00000214226       3
## ENSG00000214300 ENSG00000214300       1
## ENSG00000214706 ENSG00000214706       1
## ENSG00000214872 ENSG00000214872      17
## ENSG00000214941 ENSG00000214941       1
## ENSG00000215009 ENSG00000215009      22
## ENSG00000215784 ENSG00000215784       3
## ENSG00000215790 ENSG00000215790      16
## ENSG00000215817 ENSG00000215817      17
## ENSG00000219481 ENSG00000219481      32
## ENSG00000219626 ENSG00000219626      10
## ENSG00000221821 ENSG00000221821      21
## ENSG00000221994 ENSG00000221994      25
## ENSG00000223865 ENSG00000223865       1
## ENSG00000226479 ENSG00000226479      16
## ENSG00000227124 ENSG00000227124       1
## ENSG00000232040 ENSG00000232040      19
## ENSG00000232434 ENSG00000232434       1
## ENSG00000233608 ENSG00000233608       1
## ENSG00000236320 ENSG00000236320      19
## ENSG00000239388 ENSG00000239388      22
## ENSG00000239887 ENSG00000239887       3
## ENSG00000239920 ENSG00000239920      10
## ENSG00000240445 ENSG00000240445      27
## ENSG00000242612 ENSG00000242612       1
## ENSG00000243772 ENSG00000243772       3
## ENSG00000244165 ENSG00000244165       8
## ENSG00000244242 ENSG00000244242      29
## ENSG00000244405 ENSG00000244405       6
## ENSG00000245848 ENSG00000245848       8
## ENSG00000248405 ENSG00000248405       7
## ENSG00000248993 ENSG00000248993       8
## ENSG00000249242 ENSG00000249242       1
## ENSG00000250264 ENSG00000250264      17
## ENSG00000254979 ENSG00000254979      29
## ENSG00000254999 ENSG00000254999       8
## ENSG00000255872 ENSG00000255872      28
## ENSG00000256229 ENSG00000256229      16
## ENSG00000256235 ENSG00000256235      21
## ENSG00000256566 ENSG00000256566       1
## ENSG00000257207 ENSG00000257207      14
## ENSG00000257335 ENSG00000257335      17
## ENSG00000258643 ENSG00000258643       1
## ENSG00000258890 ENSG00000258890      13
## ENSG00000259330 ENSG00000259330      15
## ENSG00000260861 ENSG00000260861      17
## ENSG00000261052 ENSG00000261052      25
## ENSG00000261652 ENSG00000261652       2
## ENSG00000261832 ENSG00000261832      25
## ENSG00000262633 ENSG00000262633      22
## ENSG00000263001 ENSG00000263001      21
## ENSG00000263528 ENSG00000263528       8
## ENSG00000263715 ENSG00000263715      19
## ENSG00000264364 ENSG00000264364      17
## ENSG00000266028 ENSG00000266028      12
## ENSG00000266302 ENSG00000266302       2
## ENSG00000266338 ENSG00000266338      19
## ENSG00000266412 ENSG00000266412      12
## ENSG00000266524 ENSG00000266524       1
## ENSG00000267127 ENSG00000267127       2
## ENSG00000267179 ENSG00000267179      16
## ENSG00000267561 ENSG00000267561      19
## ENSG00000268043 ENSG00000268043      25
## ENSG00000268350 ENSG00000268350      27
## ENSG00000268861 ENSG00000268861       4
## ENSG00000269028 ENSG00000269028      27
## ENSG00000271503 ENSG00000271503       1
## ENSG00000272325 ENSG00000272325      15
## ENSG00000272886 ENSG00000272886      11
## ENSG00000273213 ENSG00000273213      33
## ENSG00000273559 ENSG00000273559      17
## ENSG00000274290 ENSG00000274290      16
## ENSG00000274810 ENSG00000274810      19
## ENSG00000275395 ENSG00000275395       6
## ENSG00000275713 ENSG00000275713       2
## ENSG00000276070 ENSG00000276070      13
## ENSG00000276085 ENSG00000276085      28
## ENSG00000276234 ENSG00000276234       1
## ENSG00000277117 ENSG00000277117       8
## ENSG00000277224 ENSG00000277224      10
## ENSG00000277443 ENSG00000277443      12
## ENSG00000277632 ENSG00000277632       3
## ENSG00000277791 ENSG00000277791      27
## ENSG00000278828 ENSG00000278828       4
## ENSG00000280433 ENSG00000280433      11
## ENSG00000280670 ENSG00000280670      22
## ENSG00000280969 ENSG00000280969      16
## ENSG00000282988 ENSG00000282988      16
## ENSG00000283149 ENSG00000283149      31
## ENSG00000283977 ENSG00000283977      23
## ENSG00000285000 ENSG00000285000      19
## ENSG00000285130 ENSG00000285130       8
## ENSG00000285446 ENSG00000285446      31
## ENSG00000285708 ENSG00000285708      17
## ENSG00000285816 ENSG00000285816      12

4.4.2 Look at only the differential genes

A good suggestion from Theresa was to examine only the most variant genes from failure vs. cure and see how they change the clustering/etc results. This is my attempt to address this query.

hs_clinic_topn <- sm(extract_significant_genes(hs_clinic_table, n = 100))
## Error in extract_significant_genes(hs_clinic_table, n = 100): object 'hs_clinic_table' not found
table <- "failure_vs_cure"
wanted <- rbind(hs_clinic_topn[["deseq"]][["ups"]][[table]],
                hs_clinic_topn[["deseq"]][["downs"]][[table]])
## Error in eval(quote(list(...)), env): object 'hs_clinic_topn' not found
small_expt <- exclude_genes_expt(hs_clinical_nobiop, ids = rownames(wanted), method = "keep")
## Error in h(simpleError(msg, call)): error in evaluating the argument 'x' in selecting a method for function 'rownames': object 'wanted' not found
small_norm <- sm(normalize_expt(small_expt, transform = "log2", convert = "cpm",
                                norm = "quant", filter = TRUE))
## Error in normalize_expt(small_expt, transform = "log2", convert = "cpm", : object 'small_expt' not found
plot_pca(small_norm)$plot
## Error in plot_pca(small_norm): object 'small_norm' not found
small_nb <- normalize_expt(small_expt, transform = "log2", convert = "cpm",
                           batch = "svaseq", norm = "quant", filter = TRUE)
## Error in normalize_expt(small_expt, transform = "log2", convert = "cpm", : object 'small_expt' not found
plot_pca(small_nb)$plot
## Error in plot_pca(small_nb): object 'small_nb' not found
## DESeq2 MA plot of failure / cure
hs_clinic_table[["plots"]][["failure_vs_cure"]][["deseq_ma_plots"]]$plot
## Error in eval(expr, envir, enclos): object 'hs_clinic_table' not found
## DESeq2 Volcano plot of failure / cure
hs_clinic_table[["plots"]][["failure_vs_cure"]][["deseq_vol_plots"]]$plot
## Error in eval(expr, envir, enclos): object 'hs_clinic_table' not found

4.4.3 g:Profiler results using the significant up and down genes

ups <- hs_clinic_sig[["deseq"]][["ups"]][[1]]
## Error in eval(expr, envir, enclos): object 'hs_clinic_sig' not found
downs <- hs_clinic_sig[["deseq"]][["downs"]][[1]]
## Error in eval(expr, envir, enclos): object 'hs_clinic_sig' not found
hs_clinic_gprofiler_ups <- simple_gprofiler(ups)
## Error in simple_gprofiler(ups): object 'ups' not found
hs_clinic_gprofiler_ups[["pvalue_plots"]][["bpp_plot_over"]]
## Error in eval(expr, envir, enclos): object 'hs_clinic_gprofiler_ups' not found
hs_clinic_gprofiler_ups[["pvalue_plots"]][["mfp_plot_over"]]
## Error in eval(expr, envir, enclos): object 'hs_clinic_gprofiler_ups' not found
hs_clinic_gprofiler_ups[["pvalue_plots"]][["reactome_plot_over"]]
## Error in eval(expr, envir, enclos): object 'hs_clinic_gprofiler_ups' not found
##hs_try2 <- simple_gprofiler2(ups)

hs_clinic_gprofiler_downs <- simple_gprofiler(downs)
## Error in simple_gprofiler(downs): object 'downs' not found
hs_clinic_gprofiler_downs[["pvalue_plots"]][["bpp_plot_over"]]
## Error in eval(expr, envir, enclos): object 'hs_clinic_gprofiler_downs' not found
hs_clinic_gprofiler_downs[["pvalue_plots"]][["mfp_plot_over"]]
## Error in eval(expr, envir, enclos): object 'hs_clinic_gprofiler_downs' not found
hs_clinic_gprofiler_downs[["pvalue_plots"]][["reactome_plot_over"]]
## Error in eval(expr, envir, enclos): object 'hs_clinic_gprofiler_downs' not found

4.5 Perform GSVA on the clinical samples

hs_celltype_gsva_c2 <- sm(simple_gsva(individual_celltypes))
hs_celltype_gsva_c2_sig <- sm(get_sig_gsva_categories(
    hs_celltype_gsva_c2,
    excel = "excel/individual_celltypes_gsva_c2.xlsx"))

broad_c7 <- GSEABase::getGmt("reference/msigdb/c7.all.v7.2.entrez.gmt",
                             collectionType = GSEABase::BroadCollection(category = "c7"),
                             geneIdType = GSEABase::EntrezIdentifier())
hs_celltype_gsva_c7 <- sm(simple_gsva(individual_celltypes, signatures = broad_c7,
                                      msig_xml = "reference/msigdb_v7.2.xml", cores = 10))
hs_celltype_gsva_c7_sig <- sm(get_sig_gsva_categories(
    hs_celltype_gsva_c7,
    excel = "excel/individual_celltypes_gsva_c7.xlsx"))

5 Individual Cell types

The following blocks split the samples into a few groups by sample type and look at the distributions between them.

5.1 Implementation details

Get top/bottom n genes for each cell type, using clinical outcome as the factor of interest. For the moment, use sva for the DE analysis. Provide cpms for the top/bottom n genes.

Start with top/bottom 200. Perform default logFC and p-value as well.

5.1.1 Shared contrasts

Here is the contrast we will use throughput, I am leaving open the option to add more.

keepers <- list(
  "fail_vs_cure" = c("failure", "cure"))

5.2 Monocytes

5.2.1 Evaluate Monocyte samples

mono <- subset_expt(hs_valid, subset = "typeofcells=='monocytes'") %>%
  set_expt_conditions(fact = "clinicaloutcome") %>%
  set_expt_batches(fact = "donor") %>%
  set_expt_colors(colors = chosen_colors)
## subset_expt(): There were 116, now there are 22 samples.
## FIXME set_expt_colors should speak up if there are mismatches here!!!

save_result <- save(mono, file = "rda/monocyte_expt.rda")
mono_norm <- normalize_expt(mono, convert = "cpm", filter = TRUE,
                            transform = "log2", norm = "quant")
## Removing 8966 low-count genes (10975 remaining).
## transform_counts: Found 9 values equal to 0, adding 1 to the matrix.
plt <- plot_pca(mono_norm, plot_labels = FALSE)$plot
pp(file = glue("images/mono_pca_normalized-v{ver}.pdf"), image = plt)

mono_nb <- normalize_expt(mono, convert = "cpm", filter = TRUE,
                          transform = "log2", batch = "svaseq")
## Removing 8966 low-count genes (10975 remaining).
## batch_counts: Before batch/surrogate estimation, 1202 entries are x==0: 0%.
## batch_counts: Before batch/surrogate estimation, 13643 entries are 0<x<1: 6%.
## Setting 423 low elements to zero.
## transform_counts: Found 423 values equal to 0, adding 1 to the matrix.
plt <- plot_pca(mono_nb, plot_labels = FALSE)$plot
pp(file = glue("images/mono_pca_normalized_batch-v{ver}.pdf"), image = plt)

5.2.2 DE of Monocyte samples

5.2.2.1 Without sva

mono_de <- sm(all_pairwise(mono, model_batch = FALSE, filter = TRUE))
mono_tables <- sm(combine_de_tables(
    mono_de, keepers = keepers,
    excel = glue::glue("excel/monocyte_clinical_all_tables-v{ver}.xlsx")))
written <- write_xlsx(data = mono_tables[["data"]][[1]],
                      excel = glue::glue("excel/monocyte_clinical_table-v{ver}.xlsx"))
mono_sig <- sm(extract_significant_genes(mono_tables, according_to = "deseq"))
written <- write_xlsx(data = mono_sig[["deseq"]][["ups"]][[1]],
                      excel = glue::glue("excel/monocyte_clinical_sigup-v{ver}.xlsx"))
written <- write_xlsx(data = mono_sig[["deseq"]][["downs"]][[1]],
                      excel = glue::glue("excel/monocyte_clinical_sigdown-v{ver}.xlsx"))

mono_pct_sig <- sm(extract_significant_genes(mono_tables, n = 200,
                                             lfc = NULL, p = NULL, according_to = "deseq"))
written <- write_xlsx(data = mono_pct_sig[["deseq"]][["ups"]][[1]],
                      excel = glue::glue("excel/monocyte_clinical_sigup_pct-v{ver}.xlsx"))
written <- write_xlsx(data = mono_pct_sig[["deseq"]][["downs"]][[1]],
                      excel = glue::glue("excel/monocyte_clinical_sigdown_pct-v{ver}.xlsx"))
mono_sig$summary_df
## data frame with 0 columns and 1 row
## Print out a table of the cpm values for other explorations.
mono_cpm <- sm(normalize_expt(mono, convert = "cpm"))
written <- write_xlsx(data = exprs(mono_cpm),
                      excel = glue::glue("excel/monocyte_cpm_before_batch-v{ver}.xlsx"))
mono_bcpm <- sm(normalize_expt(mono, filter = TRUE, convert = "cpm", batch = "svaseq"))
written <- write_xlsx(data = exprs(mono_bcpm),
                      excel = glue::glue("excel/monocyte_cpm_after_batch-v{ver}.xlsx"))

5.2.2.2 With sva

mono_de_sva <- sm(all_pairwise(mono, model_batch = "svaseq", filter = TRUE))
mono_tables_sva <- sm(combine_de_tables(
    mono_de_sva, keepers = keepers,
    excel = glue::glue("excel/monocyte_clinical_all_tables_sva-v{ver}.xlsx")))
mono_sig_sva <- sm(extract_significant_genes(
    mono_tables_sva,
    excel = glue::glue("excel/monocyte_clinical_sig_tables_sva-v{ver}.xlsx"),
    according_to = "deseq"))

5.2.2.3 Monocyte DE plots

First print out the DE plots without and then with sva estimates.

## DESeq2 MA plot of failure / cure
mono_tables[["plots"]][["fail_vs_cure"]][["deseq_ma_plots"]]$plot

## DESeq2 Volcano plot of failure / cure
mono_tables[["plots"]][["fail_vs_cure"]][["deseq_vol_plots"]]$plot

## DESeq2 MA plot of failure / cure with svaseq
mono_tables_sva[["plots"]][["fail_vs_cure"]][["deseq_ma_plots"]]$plot

## DESeq2 Volcano plot of failure / cure with svaseq
mono_tables_sva[["plots"]][["fail_vs_cure"]][["deseq_vol_plots"]]$plot

5.2.2.5 Monocyte MSigDB query

broad_c7 <- GSEABase::getGmt("reference/msigdb/c7.all.v7.2.entrez.gmt",
                             collectionType = GSEABase::BroadCollection(category = "c7"),
                             geneIdType = GSEABase::EntrezIdentifier())

mono_up_goseq_msig <- goseq_msigdb(sig_genes = ups, signatures = broad_c7,
                                   signature_category = "c7", length_db = hs_length)
## Before conversion: 153, after conversion: 151.
## Before conversion: 227921, after conversion: 35341.
## Found 136 go_db genes and 151 length_db genes out of 151.
mono_down_goseq_msig <- goseq_msigdb(sig_genes = downs, signatures = broad_c7,
                                     signature_category = "c7", length_db = hs_length)
## Before conversion: 293, after conversion: 290.
## Before conversion: 227921, after conversion: 35341.
## Found 278 go_db genes and 290 length_db genes out of 290.

5.2.2.6 Plot of similar experiments

## Monocyte genes with increased expression in the failed samples
## share genes with the following experiments
mono_up_goseq_msig[["pvalue_plots"]][["mfp_plot_over"]]

## Monocyte genes with increased expression in the cured samples
## share genes with the following experiments
mono_down_goseq_msig[["pvalue_plots"]][["mfp_plot_over"]]

5.2.3 Evaluate Neutrophil samples

neut <- subset_expt(hs_valid, subset = "typeofcells=='neutrophils'") %>%
  set_expt_conditions(fact = "clinicaloutcome") %>%
  set_expt_batches(fact = "donor") %>%
  set_expt_colors(colors = chosen_colors)
## subset_expt(): There were 116, now there are 21 samples.
save_result <- save(neut, file = "rda/neutrophil_expt.rda")
neut_norm <- sm(normalize_expt(neut, convert = "cpm", filter = TRUE, transform = "log2"))
plt <- plot_pca(neut_norm, plot_labels = FALSE)$plot
pp(file = glue("images/neut_pca_normalized-v{ver}.pdf"), image = plt)

neut_nb <- sm(normalize_expt(neut, convert = "cpm", filter = TRUE,
                             transform = "log2", batch = "svaseq"))
plt <- plot_pca(neut_nb, plot_labels = FALSE)$plot
pp(file = glue("images/neut_pca_normalized_svaseq-v{ver}.pdf"), image = plt)

5.2.4 DE of Netrophil samples

5.2.4.1 Without sva

neut_de <- sm(all_pairwise(neut, model_batch = FALSE, filter = TRUE))
neut_tables <- sm(combine_de_tables(
    neut_de, keepers = keepers,
    excel = glue::glue("excel/neutrophil_clinical_all_tables-v{ver}.xlsx")))
written <- write_xlsx(data = neut_tables[["data"]][[1]],
                      excel = glue::glue("excel/neutrophil_clinical_table-v{ver}.xlsx"))
neut_sig <- sm(extract_significant_genes(neut_tables, according_to = "deseq"))
written <- write_xlsx(data = neut_sig[["deseq"]][["ups"]][[1]],
                      excel = glue::glue("excel/neutrophil_clinical_sigup-v{ver}.xlsx"))
written <- write_xlsx(data = neut_sig[["deseq"]][["downs"]][[1]],
                      excel = glue::glue("excel/neutrophil_clinical_sigdown-v{ver}.xlsx"))

neut_pct_sig <- sm(extract_significant_genes(neut_tables, n = 200, lfc = NULL,
                                             p = NULL, according_to = "deseq"))
written <- write_xlsx(data = neut_sig[["deseq"]][["ups"]][[1]],
                      excel = glue::glue("excel/neutrophil_clinical_sigup_pct-v{ver}.xlsx"))
written <- write_xlsx(data = neut_sig[["deseq"]][["downs"]][[1]],
                      excel = glue::glue("excel/neutrophil_clinical_sigdown_pct-v{ver}.xlsx"))
neut_cpm <- sm(normalize_expt(neut, convert = "cpm"))
written <- write_xlsx(data = exprs(neut_cpm),
                      excel = glue::glue("excel/neutrophil_cpm_before_batch-v{ver}.xlsx"))
neut_bcpm <- sm(normalize_expt(neut, filter = TRUE, batch = "svaseq", convert = "cpm"))
written <- write_xlsx(data = exprs(neut_bcpm),
                      excel = glue::glue("excel/neutrophil_cpm_after_batch-v{ver}.xlsx"))

5.2.4.2 With sva

neut_de_sva <- sm(all_pairwise(neut, model_batch = "svaseq", filter = TRUE))
neut_tables_sva <- sm(combine_de_tables(
    neut_de_sva, keepers = keepers,
    excel = glue::glue("excel/neutrophil_clinical_all_tables_sva-v{ver}.xlsx")))
neut_sig_sva <- sm(extract_significant_genes(
    neut_tables_sva,
    excel = glue::glue("excel/neutrophil_clinical_sig_tables_sva-v{ver}.xlsx"),
    according_to = "deseq"))

5.2.4.3 Neutrophil DE plots

## DESeq2 MA plot of failure / cure
neut_tables[["plots"]][["fail_vs_cure"]][["deseq_ma_plots"]]$plot

## DESeq2 Volcano plot of failure / cure
neut_tables[["plots"]][["fail_vs_cure"]][["deseq_vol_plots"]]$plot

## DESeq2 MA plot of failure / cure with sva
neut_tables_sva[["plots"]][["fail_vs_cure"]][["deseq_ma_plots"]]$plot

## DESeq2 Volcano plot of failure / cure with sva
neut_tables_sva[["plots"]][["fail_vs_cure"]][["deseq_vol_plots"]]$plot

5.2.4.5 Neutrophil GSVA query

neut_up_goseq_msig <- goseq_msigdb(sig_genes = ups, signatures = broad_c7,
                                   signature_category = "c7", length_db = hs_length)
## Before conversion: 327, after conversion: 322.
## Before conversion: 227921, after conversion: 35341.
## Found 305 go_db genes and 322 length_db genes out of 322.
neut_down_goseq_msig <- goseq_msigdb(sig_genes = downs, signatures = broad_c7,
                                     signature_category = "c7", length_db = hs_length)
## Before conversion: 297, after conversion: 290.
## Before conversion: 227921, after conversion: 35341.
## Found 283 go_db genes and 290 length_db genes out of 290.

5.2.4.6 Plot of similar experiments

## Neutrophil genes with increased expression in the failed samples
## share genes with the following experiments
neut_up_goseq_msig[["pvalue_plots"]][["mfp_plot_over"]]

## Neutrophil genes with increased expression in the cured samples
## share genes with the following experiments
neut_down_goseq_msig[["pvalue_plots"]][["mfp_plot_over"]]

5.3 Eosinophils

5.3.1 Evaluate Eosinophil samples

eo <- subset_expt(hs_valid, subset = "typeofcells=='eosinophils'") %>%
  set_expt_conditions(fact = "clinicaloutcome") %>%
  set_expt_batches(fact = "donor") %>%
  set_expt_colors(colors = chosen_colors)
## subset_expt(): There were 116, now there are 15 samples.
save_result <- save(eo, file = "rda/eosinophil_expt.rda")
eo_norm <- sm(normalize_expt(eo, convert = "cpm", transform = "log2",
                             norm = "quant", filter = TRUE))
plt <- plot_pca(eo_norm, plot_labels = FALSE)$plot
pp(file = glue("images/eo_pca_normalized-v{ver}.pdf"), image = plt)

eo_nb <- sm(normalize_expt(eo, convert = "cpm", transform = "log2",
                           filter = TRUE, batch = "svaseq"))
plot_pca(eo_nb)$plot

5.3.2 DE of Eosinophil samples

5.3.2.1 Withouth sva

eo_de <- sm(all_pairwise(eo, model_batch = FALSE, filter = TRUE))
eo_tables <- sm(combine_de_tables(
    eo_de, keepers = keepers,
    excel = glue::glue("excel/eosinophil_clinical_all_tables-v{ver}.xlsx")))
written <- write_xlsx(data = eo_tables[["data"]][[1]],
                      excel = glue::glue("excel/eosinophil_clinical_table-v{ver}.xlsx"))
eo_sig <- sm(extract_significant_genes(eo_tables, according_to = "deseq"))
written <- write_xlsx(data = eo_sig[["deseq"]][["ups"]][[1]],
                      excel = glue::glue("excel/eosinophil_clinical_sigup-v{ver}.xlsx"))
written <- write_xlsx(data = eo_sig[["deseq"]][["downs"]][[1]],
                      excel = glue::glue("excel/eosinophil_clinical_sigdown-v{ver}.xlsx"))

eo_pct_sig <- sm(extract_significant_genes(eo_tables, n = 200,
                                           lfc = NULL, p = NULL, according_to = "deseq"))
written <- write_xlsx(data = eo_pct_sig[["deseq"]][["ups"]][[1]],
                      excel = glue::glue("excel/eosinophil_clinical_sigup_pct-v{ver}.xlsx"))
written <- write_xlsx(data = eo_pct_sig[["deseq"]][["downs"]][[1]],
                      excel = glue::glue("excel/eosinophil_clinical_sigdown_pct-v{ver}.xlsx"))

eo_cpm <- sm(normalize_expt(eo, convert = "cpm"))
written <- write_xlsx(data = exprs(eo_cpm),
                      excel = glue::glue("excel/eosinophil_cpm_before_batch-v{ver}.xlsx"))
eo_bcpm <- sm(normalize_expt(eo, filter = TRUE, batch = "svaseq", convert = "cpm"))
written <- write_xlsx(data = exprs(eo_bcpm),
                      excel = glue::glue("excel/eosinophil_cpm_after_batch-v{ver}.xlsx"))

5.3.2.2 With sva

eo_de_sva <- sm(all_pairwise(eo, model_batch = "svaseq", filter = TRUE))
eo_tables_sva <- sm(combine_de_tables(
    eo_de_sva, keepers = keepers,
    excel = glue::glue("excel/eosinophil_clinical_all_tables_sva-v{ver}.xlsx")))
eo_sig_sva <- sm(extract_significant_genes(
    eo_tables_sva,
    excel = glue::glue("excel/eosinophil_clinical_sig_tables_sva-v{ver}.xlsx"),
    according_to = "deseq"))

5.3.2.3 Eosinophil DE plots

## DESeq2 MA plot of failure / cure
eo_tables[["plots"]][["fail_vs_cure"]][["deseq_ma_plots"]]$plot

## DESeq2 Volcano plot of failure / cure
eo_tables[["plots"]][["fail_vs_cure"]][["deseq_vol_plots"]]$plot

## DESeq2 MA plot of failure / cure with sva
eo_tables_sva[["plots"]][["fail_vs_cure"]][["deseq_ma_plots"]]$plot

## DESeq2 Volcano plot of failure / cure with sva
eo_tables_sva[["plots"]][["fail_vs_cure"]][["deseq_vol_plots"]]$plot

5.3.2.5 Eosinophil MSigDB query

eo_up_goseq_msig <- goseq_msigdb(sig_genes = ups, signatures = broad_c7,
                                 signature_category = "c7", length_db = hs_length)
## Before conversion: 240, after conversion: 237.
## Before conversion: 227921, after conversion: 35341.
## Found 222 go_db genes and 237 length_db genes out of 237.
eo_down_goseq_msig <- goseq_msigdb(sig_genes = downs, signatures = broad_c7,
                                   signature_category = "c7", length_db = hs_length)
## Before conversion: 208, after conversion: 207.
## Before conversion: 227921, after conversion: 35341.
## Found 196 go_db genes and 207 length_db genes out of 207.

5.3.2.6 Plot of similar experiments

## Eosinophil genes with increased expression in the failed samples
## share genes with the following experiments
eo_up_goseq_msig[["pvalue_plots"]][["mfp_plot_over"]]

## Eosinophil genes with increased expression in the cured samples
## share genes with the following experiments
eo_down_goseq_msig[["pvalue_plots"]][["mfp_plot_over"]]

5.4 Biopsies

5.4.1 Evaluate Biopsy samples

biop <- subset_expt(hs_valid, subset = "typeofcells=='biopsy'") %>%
  set_expt_conditions(fact = "clinicaloutcome") %>%
  set_expt_batches(fact = "donor") %>%
  set_expt_colors(colors = chosen_colors)
## subset_expt(): There were 116, now there are 40 samples.
save_result <- save(biop, file = "rda/biopsy_expt.rda")
biop_norm <- normalize_expt(biop, filter = TRUE, convert = "cpm",
                            transform = "log2", norm = "quant")
## Removing 5816 low-count genes (14125 remaining).
## transform_counts: Found 5 values equal to 0, adding 1 to the matrix.
plt <- plot_pca(biop_norm, plot_labels = FALSE)$plot
pp(file = glue("images/biop_pca_normalized-v{ver}.pdf"), image = plt)

biop_nb <- sm(normalize_expt(biop, convert = "cpm", filter = TRUE,
                             transform = "log2", batch = "svaseq"))
plt <- plot_pca(biop_nb, plot_labels = FALSE)$plot
pp(file = glue("images/biop_pca_normalized_svaseq-v{ver}.pdf"), image = plt)

5.4.2 DE of Biopsy samples

5.4.2.1 Without sva

biop_de <- sm(all_pairwise(biop, model_batch = FALSE, filter = TRUE))
biop_tables <- combine_de_tables(biop_de, keepers = keepers,
                                 excel = glue::glue("excel/biopsy_clinical_all_tables-v{ver}.xlsx"))
## Deleting the file excel/biopsy_clinical_all_tables-v202105.xlsx before writing the tables.
written <- write_xlsx(data = biop_tables[["data"]][[1]],
                      excel = glue::glue("excel/biopsy_clinical_table-v{ver}.xlsx"))
biop_sig <- extract_significant_genes(biop_tables, according_to = "deseq")
##written <- write_xlsx(data = biop_sig[["deseq"]][["ups"]][[1]],
##                      excel = glue::glue("excel/biopsy_clinical_sigup-v{ver}.xlsx"))
written <- write_xlsx(data = biop_sig[["deseq"]][["downs"]][[1]],
                      excel = glue::glue("excel/biopsy_clinical_sigdown-v{ver}.xlsx"))
biop_pct_sig <- extract_significant_genes(biop_tables, n = 200, lfc = NULL, p = NULL, according_to = "deseq")
## Getting the top and bottom 200 genes.
written <- write_xlsx(data = biop_pct_sig[["deseq"]][["ups"]][[1]],
                      excel = glue::glue("excel/biopsy_clinical_sigup_pct-v{ver}.xlsx"))
written <- write_xlsx(data = biop_pct_sig[["deseq"]][["downs"]][[1]],
                      excel = glue::glue("excel/biopsy_clinical_sigdown_pct-v{ver}.xlsx"))

biop_cpm <- sm(normalize_expt(biop, convert = "cpm"))
written <- write_xlsx(data = exprs(biop_cpm),
                      excel = glue::glue("excel/biopsy_cpm_before_batch-v{ver}.xlsx"))
biop_bcpm <- sm(normalize_expt(biop, filter = TRUE, batch = "svaseq", convert = "cpm"))
written <- write_xlsx(data = exprs(biop_bcpm),
                      excel = glue::glue("excel/biopsy_cpm_after_batch-v{ver}.xlsx"))

5.4.2.2 with sva

biop_de_sva <- sm(all_pairwise(biop, model_batch = "svaseq", filter = TRUE))
biop_tables_sva <- sm(combine_de_tables(
    biop_de_sva, keepers = keepers,
    excel = glue::glue("excel/biopsy_clinical_all_tables_sva-v{ver}.xlsx")))
biop_sig_sva <- sm(extract_significant_genes(
    biop_tables_sva,
    excel = glue::glue("excel/biopsy_clinical_sig_tables_sva-v{ver}.xlsx"),
    according_to = "deseq"))

5.4.2.3 Biopsy DE plots

## DESeq2 MA plot of failure / cure
biop_tables[["plots"]][["fail_vs_cure"]][["deseq_ma_plots"]]$plot

## DESeq2 Volcano plot of failure / cure
biop_tables[["plots"]][["fail_vs_cure"]][["deseq_vol_plots"]]$plot

## DESeq2 MA plot of failure / cure
biop_tables_sva[["plots"]][["fail_vs_cure"]][["deseq_ma_plots"]]$plot

## DESeq2 Volcano plot of failure / cure
biop_tables_sva[["plots"]][["fail_vs_cure"]][["deseq_vol_plots"]]$plot

6 Look for shared genes among Monocytes/Neutrophils/Eosinophils

We have three variables containing the ‘significant’ DE genes for the three cell types. For this I am choosing (for the moment) to use the sva data.

## mono_sig_sva, neut_sig_sva, eo_sig_sva
sig_vectors <- list(
    "monocytes" = c(rownames(mono_sig_sva[["deseq"]][["ups"]][["fail_vs_cure"]]),
                    rownames(mono_sig_sva[["deseq"]][["downs"]][["fail_vs_cure"]])),
    "neutrophils" = c(rownames(neut_sig_sva[["deseq"]][["ups"]][["fail_vs_cure"]]),
                      rownames(neut_sig_sva[["deseq"]][["downs"]][["fail_vs_cure"]])),
    "eosinophils" =  c(rownames(eo_sig_sva[["deseq"]][["ups"]][["fail_vs_cure"]]),
                       rownames(eo_sig_sva[["deseq"]][["downs"]][["fail_vs_cure"]])))

shared_vector <- Vennerable::Venn(Sets = sig_vectors)
Vennerable::plot(shared_vector, doWeights = FALSE)

shared_ids <- shared_vector@IntersectionSets[["111"]]
shared_expt <- exclude_genes_expt(hs_expt, ids = shared_ids, method = "keep")
## Before removal, there were 19941 genes, now there are 62.
## There are 119 samples which kept less than 90 percent counts.
## TMRC30001 TMRC30002 TMRC30003 TMRC30004 TMRC30005 TMRC30006 TMRC30007 TMRC30008 
##    0.1334    0.1321    0.1452    0.1312    0.1357    0.1327    0.1900    0.1366 
## TMRC30009 TMRC30010 TMRC30015 TMRC30011 TMRC30012 TMRC30013 TMRC30016 TMRC30017 
##    0.2988    0.1772    0.4525    0.3133    0.1456    0.1502    0.3791    0.3362 
## TMRC30050 TMRC30052 TMRC30071 TMRC30056 TMRC30058 TMRC30105 TMRC30094 TMRC30080 
##    0.1630    0.1376    0.1310    0.1523    0.1479    0.1785    0.1916    0.3487 
## TMRC30103 TMRC30018 TMRC30107 TMRC30083 TMRC30019 TMRC30082 TMRC30093 TMRC30113 
##    0.2849    0.3281    0.1099    0.1274    0.3455    0.4193    0.3785    0.4528 
## TMRC30096 TMRC30014 TMRC30021 TMRC30029 TMRC30020 TMRC30038 TMRC30039 TMRC30023 
##    0.2930    0.3490    0.2797    0.3413    0.3265    0.3067    0.2177    0.2704 
## TMRC30025 TMRC30022 TMRC30046 TMRC30047 TMRC30048 TMRC30026 TMRC30030 TMRC30031 
##    0.3093    0.3647    0.1282    0.1514    0.1759    0.4086    0.1588    0.2189 
## TMRC30032 TMRC30024 TMRC30040 TMRC30033 TMRC30049 TMRC30053 TMRC30054 TMRC30115 
##    0.1938    0.1435    0.1941    0.1604    0.1020    0.2105    0.1537    0.1208 
## TMRC30037 TMRC30027 TMRC30028 TMRC30034 TMRC30035 TMRC30036 TMRC30044 TMRC30055 
##    0.1993    0.2707    0.1876    0.1591    0.2358    0.1726    0.2872    0.1184 
## TMRC30068 TMRC30070 TMRC30041 TMRC30042 TMRC30043 TMRC30045 TMRC30059 TMRC30060 
##    0.1634    0.1487    0.2329    0.2351    0.2951    0.2449    1.1027    1.2064 
## TMRC30061 TMRC30062 TMRC30063 TMRC30051 TMRC30064 TMRC30065 TMRC30066 TMRC30067 
##    0.7306    1.1148    0.7890    0.7236    0.7793    0.8492    0.6197    0.6485 
## TMRC30057 TMRC30069 TMRC30116 TMRC30074 TMRC30072 TMRC30076 TMRC30077 TMRC30078 
##    0.6029    0.5541    0.2304    0.1749    0.1353    0.2308    0.1538    0.1184 
## TMRC30088 TMRC30079 TMRC30097 TMRC30075 TMRC30085 TMRC30086 TMRC30087 TMRC30101 
##    0.2728    0.1735    0.3129    0.2026    0.1554    0.2878    0.3052    0.1835 
## TMRC30089 TMRC30090 TMRC30081 TMRC30092 TMRC30104 TMRC30106 TMRC30114 TMRC30095 
##    0.2529    0.1765    0.1700    0.2561    0.1738    0.2750    0.2140    0.2314 
## TMRC30108 TMRC30130 TMRC30124 TMRC30131 TMRC30109 TMRC30084 TMRC30098 TMRC30099 
##    0.3124    0.2999    0.2175    0.2350    0.2103    0.3192    0.2143    0.2616 
## TMRC30100 TMRC30110 TMRC30111 TMRC30102 TMRC30091 TMRC30112 TMRC30073 
##    0.1296    0.1444    0.2192    0.1893    0.1869    0.2077    0.2045
shared_written <- sm(write_expt(shared_expt, excel="excel/genes_shared_across_celltypes.xlsx"))
## Error in princomp.default(x = data, cor = cor) : 
##   'princomp' can only be used with more units than variables
## Error in plot.window(...) : need finite 'ylim' values
## Error in princomp.default(x = data, cor = cor) : 
##   'princomp' can only be used with more units than variables
## Error in plot.window(...) : need finite 'ylim' values

7 Monocytes by visit

  1. Can you please share with us a PCA (SVA and non-SVA) of the monocytes of the TMRC3 project, but labeling them based on the visit (V1, V2, V3)?
  2. Can you please share DE lists of V1 vs V2, V1 vs V3, V1 vs. V2+V3 and V2 vs V3?
visit_colors <- chosen_colors <- c("#D95F02", "#7570B3", "#1B9E77")
names(visit_colors) <- c(1, 2, 3)
mono_visit <- subset_expt(hs_valid, subset = "typeofcells=='monocytes'") %>%
  set_expt_conditions(fact = "visitnumber") %>%
  set_expt_batches(fact = "clinicaloutcome") %>%
  set_expt_colors(colors = chosen_colors)
## subset_expt(): There were 116, now there are 22 samples.
mono_visit_norm <- normalize_expt(mono_visit, filter = TRUE, norm = "quant", convert = "cpm",
                                  transform = "log2")
## Removing 8966 low-count genes (10975 remaining).
## transform_counts: Found 9 values equal to 0, adding 1 to the matrix.
mono_visit_pca <- plot_pca(mono_visit_norm)
pp(file = "images/monocyte_by_visit.png", image = mono_visit_pca$plot)

mono_visit_nb <- normalize_expt(mono_visit, filter = TRUE, convert = "cpm",
                                batch = "svaseq", transform = "log2")
## Removing 8966 low-count genes (10975 remaining).
## batch_counts: Before batch/surrogate estimation, 1202 entries are x==0: 0%.
## batch_counts: Before batch/surrogate estimation, 13643 entries are 0<x<1: 6%.
## Setting 333 low elements to zero.
## transform_counts: Found 333 values equal to 0, adding 1 to the matrix.
mono_visit_nb_pca <- plot_pca(mono_visit_nb)
pp(file = "images/monocyte_by_visit_nb.png", image = mono_visit_nb_pca$plot)

table(pData(mono_visit_norm)$batch)
## 
##    cure failure    lost 
##       6      10       6
keepers <- list(
    "second_vs_first" = c("c2", "c1"),
    "third_vs_second" = c("c3", "c2"),
    "third_vs_first" = c("c3", "c1"))
mono_visit_de <- all_pairwise(mono_visit, model_batch = "svaseq", filter = TRUE)
## batch_counts: Before batch/surrogate estimation, 1202 entries are x==0: 0%.
## Plotting a PCA before surrogate/batch inclusion.
## Using svaseq to visualize before/after batch inclusion.
## Performing a test normalization with: raw
## Removing 0 low-count genes (10975 remaining).
## batch_counts: Before batch/surrogate estimation, 1202 entries are x==0: 0%.
## batch_counts: Before batch/surrogate estimation, 13643 entries are 0<x<1: 6%.
## Setting 333 low elements to zero.
## transform_counts: Found 333 values equal to 0, adding 1 to the matrix.
## Finished running DE analyses, collecting outputs.
## Comparing analyses.
mono_visit_tables <- combine_de_tables(
    mono_visit_de,
    keepers = keepers,
    excel = glue::glue("excel/mono_visit_tables-v{ver}.xlsx"))
## Deleting the file excel/mono_visit_tables-v202105.xlsx before writing the tables.
new_factor <- pData(mono_visit)[["visitnumber"]]
not_one_idx <- new_factor != 1
new_factor[not_one_idx] <- "not_1"
## Warning in `[<-.factor`(`*tmp*`, not_one_idx, value = "not_1"): invalid factor
## level, NA generated
mono_one_vs <- set_expt_conditions(mono_visit, new_factor)

mono_one_vs_de <- all_pairwise(mono_one_vs, model_batch = "svaseq", filter = TRUE)
## batch_counts: Before batch/surrogate estimation, 1202 entries are x==0: 0%.
## Error in `contrasts<-`(`*tmp*`, value = contr.funs[1 + isOF[nn]]): contrasts can be applied only to factors with 2 or more levels
mono_one_vs_tables <- combine_de_tables(
    mono_one_vs_de,
    excel = glue::glue("excel/mono_one_vs_tables-v{ver}.xlsx"))
## Error in combine_de_tables(mono_one_vs_de, excel = glue::glue("excel/mono_one_vs_tables-v{ver}.xlsx")): object 'mono_one_vs_de' not found

8 Test TSP

In writing the following, I quickly realized that tspair was not joking when it said it is intended for small numbers of genes. For a full expressionset of human data it is struggling. I like the idea, it may prove worth while to spend some time optimizing the package so that it is more usable.

expt <- hs_clinical_nobiop

simple_tsp <- function(expt, column = "condition") {
  facts <- levels(as.factor(pData(expt)[[column]]))
  retlist <- list()
  if (length(facts) < 2) {
    stop("This requires factors with at least 2 levels.")
  } else if (length(facts) == 2) {
    retlist <- simple_tsp_pair(expt, column = column)
  } else {
    for (first in 1:(length(facts) - 1)) {
      for (second in 2:(length(facts))) {
        if (first < second) {
          name <- glue::glue("{facts[first]}_vs_{facts[second]}")
          message("Starting ", name, ".")
          substring <- glue::glue("{column}=='{facts[first]}'|{column}=='{facts[second]}'")
          subby <- subset_expt(expt, subset=as.character(substring))
          retlist[[name]] <- simple_tsp_pair(subby, column = column)
        }
      }
    }
  }
}

simple_tsp_pair <- function(subby, column = "condition", repetitions = 50) {
  tsp_input <- subby[["expressionset"]]
  tsp_output <- tspcalc(tsp_input, column)
  tsp_scores <- tspsig(tsp_input, column, B = repetitions)
}

tsp1 <- tspcalc(tsp_input, "condition")
if (!isTRUE(get0("skip_load"))) {
  pander::pander(sessionInfo())
  message(paste0("This is hpgltools commit: ", get_git_commit()))
  message(paste0("Saving to ", savefile))
  tmp <- sm(saveme(filename = savefile))
}
## If you wish to reproduce this exact build of hpgltools, invoke the following:
## > git clone http://github.com/abelew/hpgltools.git
## > git reset 68b1ce610bf0c750d9a3ed2f6bd2a529b1744c29
## This is hpgltools commit: Thu May 27 17:01:01 2021 -0400: 68b1ce610bf0c750d9a3ed2f6bd2a529b1744c29
## Saving to tmrc3_02sample_estimation_v202105.rda.xz
tmp <- loadme(filename = savefile)
LS0tCnRpdGxlOiAiVE1SQzMgQ29tcHJlaGVuc2l2ZSBEYXRhIEFuYWx5c2lzOiAyMDIxMDUiCmF1dGhvcjogImF0YiBhYmVsZXdAZ21haWwuY29tIgpkYXRlOiAiYHIgU3lzLkRhdGUoKWAiCm91dHB1dDoKIGh0bWxfZG9jdW1lbnQ6CiAgY29kZV9kb3dubG9hZDogdHJ1ZQogIGNvZGVfZm9sZGluZzogc2hvdwogIGZpZ19jYXB0aW9uOiB0cnVlCiAgZmlnX2hlaWdodDogNwogIGZpZ193aWR0aDogNwogIGhpZ2hsaWdodDogZGVmYXVsdAogIGtlZXBfbWQ6IGZhbHNlCiAgbW9kZTogc2VsZmNvbnRhaW5lZAogIG51bWJlcl9zZWN0aW9uczogdHJ1ZQogIHNlbGZfY29udGFpbmVkOiB0cnVlCiAgdGhlbWU6IHJlYWRhYmxlCiAgdG9jOiB0cnVlCiAgdG9jX2Zsb2F0OgogICBjb2xsYXBzZWQ6IGZhbHNlCiAgIHNtb290aF9zY3JvbGw6IGZhbHNlCi0tLQoKPHN0eWxlPgogIGJvZHkgLm1haW4tY29udGFpbmVyIHsKICAgIG1heC13aWR0aDogMTYwMHB4OwogIH0KPC9zdHlsZT4KCmBgYHtyIG9wdGlvbnMsIGluY2x1ZGUgPSBGQUxTRX0KbGlicmFyeShocGdsdG9vbHMpCnR0IDwtIHNtKGRldnRvb2xzOjpsb2FkX2FsbCgifi9ocGdsdG9vbHMiKSkKa25pdHI6Om9wdHNfa25pdCRzZXQocHJvZ3Jlc3MgPSBUUlVFLAogICAgICAgICAgICAgICAgICAgICB2ZXJib3NlID0gVFJVRSwKICAgICAgICAgICAgICAgICAgICAgd2lkdGggPSAxMjAsCiAgICAgICAgICAgICAgICAgICAgIGVjaG8gPSBUUlVFKQprbml0cjo6b3B0c19jaHVuayRzZXQoZXJyb3IgPSBUUlVFLAogICAgICAgICAgICAgICAgICAgICAgZmlnLndpZHRoID0gMTIsCiAgICAgICAgICAgICAgICAgICAgICBmaWcuaGVpZ2h0ID0gMTIsCiAgICAgICAgICAgICAgICAgICAgICBkcGkgPSA5NikKb2xkX29wdGlvbnMgPC0gb3B0aW9ucyhkaWdpdHMgPSA0LAogICAgICAgICAgICAgICAgICAgICAgIHN0cmluZ3NBc0ZhY3RvcnMgPSBGQUxTRSwKICAgICAgICAgICAgICAgICAgICAgICBrbml0ci5kdXBsaWNhdGUubGFiZWwgPSAiYWxsb3ciKQpnZ3Bsb3QyOjp0aGVtZV9zZXQoZ2dwbG90Mjo6dGhlbWVfYncoYmFzZV9zaXplID0gMTIpKQp2ZXIgPC0gIjIwMjEwNSIKcnVuZGF0ZSA8LSBmb3JtYXQoU3lzLkRhdGUoKSwgZm9ybWF0ID0gIiVZJW0lZCIpCgpybWRfZmlsZSA8LSBnbHVlOjpnbHVlKCJ0bXJjM18wMnNhbXBsZV9lc3RpbWF0aW9uX3Z7dmVyfS5SbWQiKQpzYXZlZmlsZSA8LSBnc3ViKHBhdHRlcm4gPSAiXFwuUm1kIiwgcmVwbGFjZSA9ICJcXC5yZGFcXC54eiIsIHggPSBybWRfZmlsZSkKYGBgCgojIEFubm90YXRpb24KCldlIHRha2UgdGhlIGFubm90YXRpb24gZGF0YSBmcm9tIGVuc2VtYmwncyBiaW9tYXJ0IGluc3RhbmNlLiAgVGhlIGdlbm9tZSB3aGljaAp3YXMgdXNlZCB0byBtYXAgdGhlIGRhdGEgd2FzIGhnMzggcmV2aXNpb24gMTAwLiAgTXkgZGVmYXVsdCB3aGVuIHVzaW5nIGJpb21hcnQgaXMKdG8gbG9hZCB0aGUgZGF0YSBmcm9tIDEgeWVhciBiZWZvcmUgdGhlIGN1cnJlbnQgZGF0ZS4KCmBgYHtyIGhzX2Fubm90fQpoc19hbm5vdCA8LSBzbShsb2FkX2Jpb21hcnRfYW5ub3RhdGlvbnMoeWVhciA9ICIyMDIwIikpCmhzX2Fubm90IDwtIGhzX2Fubm90W1siYW5ub3RhdGlvbiJdXQpoc19hbm5vdFtbInRyYW5zY3JpcHQiXV0gPC0gcGFzdGUwKHJvd25hbWVzKGhzX2Fubm90KSwgIi4iLCBoc19hbm5vdFtbInZlcnNpb24iXV0pCnJvd25hbWVzKGhzX2Fubm90KSA8LSBtYWtlLm5hbWVzKGhzX2Fubm90W1siZW5zZW1ibF9nZW5lX2lkIl1dLCB1bmlxdWUgPSBUUlVFKQp0eF9nZW5lX21hcCA8LSBoc19hbm5vdFssIGMoInRyYW5zY3JpcHQiLCAiZW5zZW1ibF9nZW5lX2lkIildCgpzdW1tYXJ5KGhzX2Fubm90KQpgYGAKCmBgYHtyIGhzX2dvfQpoc19nbyA8LSBzbShsb2FkX2Jpb21hcnRfZ28oKVtbImdvIl1dKQpoc19sZW5ndGggPC0gaHNfYW5ub3RbLCBjKCJlbnNlbWJsX2dlbmVfaWQiLCAiY2RzX2xlbmd0aCIpXQpjb2xuYW1lcyhoc19sZW5ndGgpIDwtIGMoIklEIiwgImxlbmd0aCIpCmBgYAoKIyBJbnRyb2R1Y3Rpb24KClRoaXMgZG9jdW1lbnQgaXMgaW50ZW5kZWQgdG8gcHJvdmlkZSBhbiBvdmVydmlldyBvZiBUTVJDMyBzYW1wbGVzIHdoaWNoIGhhdmUKYmVlbiBzZXF1ZW5jZWQuICBJdCBpbmNsdWRlcyBzb21lIHBsb3RzIGFuZCBhbmFseXNlcyBzaG93aW5nIHRoZSByZWxhdGlvbnNoaXBzCmFtb25nIHRoZSBzYW1wbGVzIGFzIHdlbGwgYXMgc29tZSBkaWZmZXJlbnRpYWwgYW5hbHlzZXMgd2hlbiBwb3NzaWJsZS4KCiMgU2FtcGxlIEVzdGltYXRpb24KCiMjIEdlbmVyYXRlIGV4cHJlc3Npb25zZXRzCgpUaGUgc2FtcGxlIHNoZWV0IGlzIGNvcGllZCBmcm9tIG91ciBzaGFyZWQgb25saW5lIHNoZWV0IGFuZCB1cGRhdGVkIHdpdGggZWFjaCByZWxlYXNlCm9mIHNlcXVlbmNpbmcgZGF0YS4KCmBgYHtyIHNhbXBsZXNoZWV0fQpzYW1wbGVzaGVldCA8LSAic2FtcGxlX3NoZWV0cy90bXJjM19zYW1wbGVzXzIwMjEwNTEyLnhsc3giCmBgYAoKIyMjIEhpc2F0MiBleHByZXNzaW9uc2V0cwoKVGhlIGZpcnN0IHRoaW5nIHRvIG5vdGUgaXMgdGhlIGxhcmdlIHJhbmdlIGluIGNvdmVyYWdlLiAgVGhlcmUgYXJlIG11bHRpcGxlCnNhbXBsZXMgd2l0aCBjb3ZlcmFnZSB3aGljaCBpcyB0b28gbG93IHRvIHVzZS4gIFRoZXNlIHdpbGwgYmUgcmVtb3ZlZCBzaG9ydGx5LgoKSW4gdGhlIGZvbGxvd2luZyBibG9jayBJIGltbWVkaWF0ZWx5IGV4Y2x1ZGUgYW55IG5vbi1jb2RpbmcgcmVhZHMgYXMgd2VsbC4KCmBgYHtyIGFsbF9uZXdfaGlzYXQyfQojIyBDcmVhdGUgdGhlIGV4cHJlc3Npb25zZXQgYW5kIGltbWVkaWF0ZWx5IHBhc3MgaXQgdG8gYSBmaWx0ZXIKIyMgcmVtb3ZpbmcgdGhlIG5vbiBwcm90ZWluIGNvZGluZyBnZW5lcy4Kc2FuaXRpemVfY29sdW1ucyA8LSBjKCJ2aXNpdG51bWJlciIsICJjbGluaWNhbG91dGNvbWUiLCAiZG9ub3IiLAogICAgICAgICAgICAgICAgICAgICAgInR5cGVvZmNlbGxzIiwgImNsaW5pY2FscHJlc2VudGF0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgICJjb25kaXRpb24iLCAiYmF0Y2giKQpoc19leHB0IDwtIGNyZWF0ZV9leHB0KHNhbXBsZXNoZWV0LAogICAgICAgICAgICAgICAgICAgICAgIGZpbGVfY29sdW1uID0gImhnMzgxMDBoaXNhdGZpbGUiLAogICAgICAgICAgICAgICAgICAgICAgIHNhdmVmaWxlID0gZ2x1ZTo6Z2x1ZSgicmRhL2hzX2V4cHRfYWxsLXZ7dmVyfS5yZGEiKSwKICAgICAgICAgICAgICAgICAgICAgICBnZW5lX2luZm8gPSBoc19hbm5vdCkgJT4lCiAgZXhjbHVkZV9nZW5lc19leHB0KGNvbHVtbiA9ICJnZW5lX2Jpb3R5cGUiLCBtZXRob2QgPSAia2VlcCIsCiAgICAgICAgICAgICAgICAgICAgIHBhdHRlcm4gPSAicHJvdGVpbl9jb2RpbmciLCBtZXRhX2NvbHVtbiA9ICJuY3JuYV9sb3N0IikgJT4lCiAgc2FuaXRpemVfZXhwdF9tZXRhZGF0YShjb2x1bW5zID0gc2FuaXRpemVfY29sdW1ucykgJT4lCiAgc2V0X2V4cHRfZmFjdG9ycyhjb2x1bW5zID0gc2FuaXRpemVfY29sdW1ucywgY2xhc3MgPSAiZmFjdG9yIikKCmxldmVscyhwRGF0YShoc19leHB0W1siZXhwcmVzc2lvbnNldCJdXSlbWyJ2aXNpdG51bWJlciJdXSkgPC0gbGlzdCgKICAgICcwJyA9ICJub3RhcHBsaWNhYmxlIiwgJzEnID0gMSwgJzInID0gMiwgJzMnID0gMykKYGBgCgpTcGxpdCB0aGlzIGRhdGEgaW50byBDRFMgYW5kIGxuY1JOQS4gIE9oIGNyYXAgaW4gb3JkZXIgdG8gZG8gdGhhdCBJIG5lZWQgdG8gcmVjb3VudCB0aGUgZGF0YS4KUnVubmluZyBub3cgKDIwMjEwNTE4KQoKYGBge3IgbG5jX2Nkc30KIyMgbG5jX2V4cHQgPC0gY3JlYXRlX2V4cHQoc2FtcGxlc2hlZXQsCiMjICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfY29sdW1uID0gImhnMzgxMDBsbmNmaWxlIiwKIyMgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZV9pbmZvID0gaHNfYW5ub3QpCmBgYAoKIyMjIyBJbml0aWFsIG1ldHJpY3MKCk9uY2UgdGhlIGRhdGEgd2FzIGxvYWRlZCwgdGhlcmUgYXJlIGEgY291cGxlIG9mIG1ldHJpY3Mgd2hpY2ggbWF5IGJlIHBsb3R0ZWQgaW1tZWRpYXRlbHkuCgpgYGB7ciBpbml0aWFsX21ldHJpY3N9Cm5vbnplcm8gPC0gcGxvdF9ub256ZXJvKGhzX2V4cHQpCm5vbnplcm8kcGxvdAoKbmNybmFfbG9zdF9kZiA8LSBhcy5kYXRhLmZyYW1lKHBEYXRhKGhzX2V4cHQpW1sibmNybmFfbG9zdCJdXSkKcm93bmFtZXMobmNybmFfbG9zdF9kZikgPC0gcm93bmFtZXMocERhdGEoaHNfZXhwdCkpCmNvbG5hbWVzKG5jcm5hX2xvc3RfZGYpIDwtICJuY3JuYV9sb3N0IgoKdG1wZGYgPC0gbWVyZ2Uobm9uemVybyR0YWJsZSwgbmNybmFfbG9zdF9kZiwgYnkgPSAicm93Lm5hbWVzIikKcm93bmFtZXModG1wZGYpIDwtIHRtcGRmW1siUm93Lm5hbWVzIl1dCnRtcGRmW1siUm93Lm5hbWVzIl1dIDwtIE5VTEwKCmdncGxvdCh0bXBkZiwgYWVzKHg9bmNybmFfbG9zdCwgeT1ub256ZXJvX2dlbmVzKSkgKwogIGdncGxvdDI6Omdlb21fcG9pbnQoKSArCiAgZ2dwbG90Mjo6Z2d0aXRsZSgiTm9uemVybyBnZW5lcyB3aXRoIHJlc3BlY3QgdG8gcGVyY2VudCBjb3VudHMgCmxvc3Qgd2hlbiBuY1JOQSB3YXMgcmVtb3ZlZC4iKQpgYGAKCk5hamliIGRvZXNuJ3Qgd2FudCB0aGlzIHBsb3QsIGJ1dCBJIGFtIHVzaW5nIGl0IHRvIGNoZWNrIG5ldyBzYW1wbGVzLApzbyB3aWxsIGhpZGUgaXQgZnJvbSBnZW5lcmFsIHVzZS4KCmBgYHtyIGxpYnNpemV9CmxpYnNpemUgPC0gcGxvdF9saWJzaXplKGhzX2V4cHQpCmxpYnNpemUkcGxvdApgYGAKCiMjIE1pbmltdW0gY292ZXJhZ2Ugc2FtcGxlIGZpbHRlcmluZwoKSSBhcmJpdHJhcmlseSBjaG9zZSAxMSwwMDAgbm9uLXplcm8gZ2VuZXMgYXMgYSBtaW5pbXVtLiAgV2UgbWF5CndhbnQgdGhpcyB0byBiZSBoaWdoZXIuCgpgYGB7ciBoaXNhdDJfd3JpdGUsIGZpZy5zaG93ID0gImhpZGUifQpoc192YWxpZCA8LSBzdWJzZXRfZXhwdChoc19leHB0LCBub256ZXJvID0gMTEwMDApCgp2YWxpZF93cml0ZSA8LSBzbSh3cml0ZV9leHB0KGhzX3ZhbGlkLCBleGNlbCA9IGdsdWUoImV4Y2VsL2hzX3ZhbGlkLXZ7dmVyfS54bHN4IikpKQpgYGAKCiMgUHJvamVjdCBBaW1zCgpUaGUgcHJvamVjdCBzZWVrcyB0byBkZXRlcm1pbmUgdGhlIHJlbGF0aW9uc2hpcCBvZiB0aGUgaW5uYXRlIGltbXVuZSByZXNwb25zZQphbmQgaW5mbGFtbWF0b3J5IHNpZ25hbGluZyB0byB0aGUgY2xpbmljYWwgb3V0Y29tZSBvZiBhbnRpbGVpc2htYW5pYWwgZHJ1Zwp0cmVhdG1lbnQuIFdlIHdpbGwgdGVzdCB0aGUgaHlwb3RoZXNpcyB0aGF0IHRoZSBwcm9maWxlIG9mIGlubmF0ZSBpbW11bmUgY2VsbAphY3RpdmF0aW9uIGFuZCB0aGVpciBkeW5hbWljcyB0aHJvdWdoIHRoZSBjb3Vyc2Ugb2YgdHJlYXRtZW50IGRpZmZlciBiZXR3ZWVuIENMCnBhdGllbnRzIHdpdGggcHJvc3BlY3RpdmVseSBkZXRlcm1pbmVkIHRoZXJhcGV1dGljIGN1cmUgb3IgZmFpbHVyZS4KClRoaXMgd2lsbCBiZSBhY2hpZXZlZCB0aHJvdWdoIHRoZSBjaGFyYWN0ZXJpemF0aW9uIG9mIHRoZSBpbiB2aXZvIGR5bmFtaWNzIG9mCmJsb29kLWRlcml2ZWQgbW9ub2N5dGUsIG5ldXRyb3BoaWwgYW5kIGVvc2lub3BoaWwgdHJhbnNjcmlwdG9tZSBiZWZvcmUsIGR1cmluZwphbmQgYXQgdGhlIGVuZCBvZiB0cmVhdG1lbnQgaW4gQ0wgcGF0aWVudHMuIENlbGwtdHlwZSBzcGVjaWZpYyB0cmFuc2NyaXB0b21lcywKY29tcG9zaXRlIHNpZ25hdHVyZXMgYW5kIHRpbWUtcmVzcG9uc2UgZXhwcmVzc2lvbiBwcm9maWxlcyB3aWxsIGJlIGNvbnRyYXN0ZWQKYW1vbmcgcGF0aWVudHMgd2l0aCB0aGVyYXBldXRpYyBjdXJlIG9yIGZhaWx1cmUuCgojIyBQcmVwYXJhdGlvbgoKVG8gYWRkcmVzcyB0aGVzZSwgSSBhZGRlZCB0byB0aGUgZW5kIG9mIHRoZSBzYW1wbGUgc2hlZXQgY29sdW1ucyBuYW1lZAonY29uZGl0aW9uJywgJ2JhdGNoJywgJ2Rvbm9yJywgYW5kICd0aW1lJy4gIFRoZXNlIGFyZSBmaWxsZWQgaW4gd2l0aCBzaG9ydGhhbmQKdmFsdWVzIGFjY29yZGluZyB0byB0aGUgYWJvdmUuCgojIyBHbG9iYWwgdmlldwoKQmVmb3JlIGFkZHJlc3NpbmcgdGhlIHF1ZXN0aW9ucyBleHBsaWNpdGx5IGJ5IHN1YnNldHRpbmcgdGhlIGRhdGEsIEkgd2FudCB0byBnZXQKYSBsb29rIGF0IHRoZSBzYW1wbGVzIGFzIHRoZXkgYXJlLgoKYGBge3IgcHJlX3F1ZXN0aW9uc30KbmV3X25hbWVzIDwtIHBEYXRhKGhzX3ZhbGlkKVtbInNhbXBsZW5hbWUiXV0KaHNfdmFsaWQgPC0gaHNfdmFsaWQgJT4lCiAgc2V0X2V4cHRfYmF0Y2hlcyhmYWN0ID0gImNlbGxzc291cmNlIikgJT4lCiAgc2V0X2V4cHRfY29uZGl0aW9ucyhmYWN0ID0gInR5cGVvZmNlbGxzIikgJT4lCiAgc2V0X2V4cHRfc2FtcGxlbmFtZXMobmV3bmFtZXMgPSBuZXdfbmFtZXMpCgphbGxfbm9ybSA8LSBzbShub3JtYWxpemVfZXhwdChoc192YWxpZCwgdHJhbnNmb3JtID0gImxvZzIiLCBub3JtID0gInF1YW50IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udmVydCA9ICJjcG0iLCBmaWx0ZXIgPSBUUlVFKSkKCmFsbF9wY2EgPC0gcGxvdF9wY2EoYWxsX25vcm0sIHBsb3RfbGFiZWxzID0gRkFMU0UsCiAgICAgICAgICAgICAgICAgICAgcGxvdF90aXRsZSA9ICJQQ0EgLSBDZWxsIHR5cGUiLCBzaXplX2NvbHVtbiA9ICJ2aXNpdG51bWJlciIpCnBwKGZpbGUgPSBnbHVlKCJpbWFnZXMvdG1yYzNfcGNhX25vbGFiZWxzLXZ7dmVyfS5wbmciKSwgaW1hZ2UgPSBhbGxfcGNhJHBsb3QpCgp3cml0ZS5jc3YoYWxsX3BjYSR0YWJsZSwgZmlsZSA9ICJjb29yZHMvaHNfZG9ub3JfcGNhX2Nvb3Jkcy5jc3YiKQpwbG90X2NvcmhlYXQoYWxsX25vcm0sIHBsb3RfdGl0bGUgPSAiSGVpcmFyY2hpY2FsIGNsdXN0ZXJpbmc6CiAgICAgICAgIGNlbGwgdHlwZXMiKSRwbG90CmBgYAoKIyMgRXhhbWluZSBzYW1wbGVzIHJlbGV2YW50IHRvIGNsaW5pY2FsIG91dGNvbWUKCk5vdyBsZXQgdXMgY29uc2lkZXIgb25seSB0aGUgc2FtcGxlcyBmb3Igd2hpY2ggd2UgaGF2ZSBhIGNsaW5pY2FsIG91dGNvbWUuClRoZXNlIGZhbGwgcHJpbWFyaWx5IGludG8gZWl0aGVyICdjdXJlZCcgb3IgJ2ZhaWxlZCcsIGJ1dCBzb21lIHBlb3BsZSBoYXZlIG5vdAp5ZXQgcmV0dXJuZWQgdG8gdGhlIGNsaW5pYyBhZnRlciB0aGUgZmlyc3Qgb3Igc2Vjb25kIHZpc2l0LiAgVGhlc2UgYXJlIGRlZW1lZAonbG9zdCcuCgpgYGB7ciBhbGxfY2xpbmljYWx9CmhzX2NsaW5pY2FsIDwtIGhzX3ZhbGlkICU+JQogIHNldF9leHB0X2NvbmRpdGlvbnMoZmFjdCA9ICJjbGluaWNhbG91dGNvbWUiKSAlPiUKICBzZXRfZXhwdF9iYXRjaGVzKGZhY3QgPSAidHlwZW9mY2VsbHMiKSAlPiUKICBzdWJzZXRfZXhwdChzdWJzZXQgPSAidHlwZW9mY2VsbHMhPSdwYm1jcycmdHlwZW9mY2VsbHMhPSdtYWNyb3BoYWdlcyciKQoKY2hvc2VuX2NvbG9ycyA8LSBjKCIjRDk1RjAyIiwgIiM3NTcwQjMiLCAiIzFCOUU3NyIsICIjRkYwMDAwIikKbmFtZXMoY2hvc2VuX2NvbG9ycykgPC0gYygiY3VyZSIsICJmYWlsdXJlIiwgImxvc3QiLCAibnVsbCIpCmhzX2NsaW5pY2FsIDwtIHNldF9leHB0X2NvbG9ycyhoc19jbGluaWNhbCwgY29sb3JzID0gY2hvc2VuX2NvbG9ycykKCm5ld25hbWVzIDwtIHBEYXRhKGhzX2NsaW5pY2FsKVtbInNhbXBsZW5hbWUiXV0KaHNfY2xpbmljYWwgPC0gc2V0X2V4cHRfc2FtcGxlbmFtZXMoaHNfY2xpbmljYWwsIG5ld25hbWVzID0gbmV3bmFtZXMpCgpoc19jbGluaWNhbF9ub3JtIDwtIHNtKG5vcm1hbGl6ZV9leHB0KGhzX2NsaW5pY2FsLCBmaWx0ZXIgPSBUUlVFLCB0cmFuc2Zvcm0gPSAibG9nMiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udmVydCA9ICJjcG0iLCBub3JtID0gInF1YW50IikpCmNsaW5pY2FsX3BjYSA8LSBwbG90X3BjYShoc19jbGluaWNhbF9ub3JtLCBwbG90X2xhYmVscyA9IEZBTFNFLAogICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV9jb2x1bW4gPSAidmlzaXRudW1iZXIiLCBjaXMgPSBOVUxMLAogICAgICAgICAgICAgICAgICAgICAgICAgcGxvdF90aXRsZSA9ICJQQ0EgLSBjbGluaWNhbCBzYW1wbGVzIikKcHAoZmlsZSA9IGdsdWUoImltYWdlcy9hbGxfY2xpbmljYWxfbm9iYXRjaF9wY2Etdnt2ZXJ9LnBuZyIpLCBpbWFnZSA9IGNsaW5pY2FsX3BjYSRwbG90LAogICBoZWlnaHQgPSA4LCB3aWR0aCA9IDIwKQpgYGAKCiMjIyBSZXBlYXQgd2l0aG91dCB0aGUgYmlvcHN5IHNhbXBsZXMKCmBgYHtyIGliaWRfbm9iaW9wc3l9CmhzX2NsaW5pY2FsX25vYmlvcCA8LSBoc19jbGluaWNhbCAlPiUKICBzdWJzZXRfZXhwdChzdWJzZXQgPSAidHlwZW9mY2VsbHMhPSdiaW9wc3knIikKCmhzX2NsaW5pY2FsX25vYmlvcF9ub3JtIDwtIHNtKG5vcm1hbGl6ZV9leHB0KGhzX2NsaW5pY2FsX25vYmlvcCwgZmlsdGVyID0gVFJVRSwgdHJhbnNmb3JtID0gImxvZzIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb252ZXJ0ID0gImNwbSIsIG5vcm0gPSAicXVhbnQiKSkKY2xpbmljYWxfbm9iaW9wX3BjYSA8LSBwbG90X3BjYShoc19jbGluaWNhbF9ub2Jpb3Bfbm9ybSwgcGxvdF9sYWJlbHMgPSBGQUxTRSwgY2lzID0gTlVMTCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbG90X3RpdGxlID0gIlBDQSAtIGNsaW5pY2FsIHNhbXBsZXMgd2l0aG91dCBiaW9wc2llcyIpCnBwKGZpbGUgPSBnbHVlKCJpbWFnZXMvYWxsX2NsaW5pY2FsX25vYmlvcF9ub2JhdGNoX3BjYS12e3Zlcn0ucG5nIiksCiAgIGltYWdlID0gY2xpbmljYWxfbm9iaW9wX3BjYSRwbG90KQpgYGAKCiMjIyBBdHRlbXB0IHRvIGNvcnJlY3QgZm9yIHRoZSBzdXJyb2dhdGUgdmFyaWFibGVzCgpBdCB0aGlzIHRpbWUgd2UgaGF2ZSB0d28gcHJpbWFyeSBkYXRhIHN0cnVjdHVyZXMgb2YgaW50ZXJlc3Q6IGhzX2NsaW5pY2FsIGFuZCBoc19jbGluaWNhbF9ub2Jpb3AKCmBgYHtyIGNsaW5pY2FsX3N2YX0KaHNfY2xpbmljYWxfbmIgPC0gbm9ybWFsaXplX2V4cHQoaHNfY2xpbmljYWwsIGZpbHRlciA9IFRSVUUsIGJhdGNoID0gInN2YXNlcSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybSA9ICJsb2cyIiwgY29udmVydCA9ICJjcG0iKQpjbGluaWNhbF9iYXRjaF9wY2EgPC0gcGxvdF9wY2EoaHNfY2xpbmljYWxfbmIsIHBsb3RfbGFiZWxzID0gRkFMU0UsIGNpcyA9IE5VTEwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX2NvbHVtbiA9ICJ2aXNpdG51bWJlciIsIHBsb3RfdGl0bGUgPSAiUENBIC0gY2xpbmljYWwgc2FtcGxlcyIpCmNsaW5pY2FsX2JhdGNoX3BjYSRwbG90Cgpoc19jbGluaWNhbF9ub2Jpb3BfbmIgPC0gc20obm9ybWFsaXplX2V4cHQoaHNfY2xpbmljYWxfbm9iaW9wLCBmaWx0ZXIgPSBUUlVFLCBiYXRjaCA9ICJzdmFzZXEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtID0gImxvZzIiLCBjb252ZXJ0ID0gImNwbSIpKQpjbGluaWNhbF9ub2Jpb3BfYmF0Y2hfcGNhIDwtIHBsb3RfcGNhKGhzX2NsaW5pY2FsX25vYmlvcF9uYiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbG90X3RpdGxlID0gIlBDQSAtIGNsaW5pY2FsIHNhbXBsZXMgd2l0aG91dCBiaW9wc2llcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxvdF9sYWJlbHMgPSBGQUxTRSkKcHAoZmlsZSA9ICJpbWFnZXMvY2xpbmljYWxfYmF0Y2gucG5nIiwgaW1hZ2UgPSBjbGluaWNhbF9ub2Jpb3BfYmF0Y2hfcGNhJHBsb3QpCnRlc3QgPC0gcGxvdF9wY2EoaHNfY2xpbmljYWxfbm9iaW9wX25iLCBzaXplX2NvbHVtbiA9ICJ2aXNpdG51bWJlciIsCiAgICAgICAgICAgICAgICAgcGxvdF90aXRsZSA9ICJQQ0EgLSBjbGluaWNhbCBzYW1wbGVzIHdpdGhvdXQgYmlvcHNpZXMiLAogICAgICAgICAgICAgICAgIHBsb3RfbGFiZWxzID0gRkFMU0UpCnRlc3QkcGxvdAoKY2xpbmljYWxfbm9iaW9wX2JhdGNoX3RzbmUgPC0gcGxvdF90c25lKGhzX2NsaW5pY2FsX25vYmlvcF9uYiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsb3RfdGl0bGUgPSAidFNORSAtIGNsaW5pY2FsIHNhbXBsZXMgd2l0aG91dCBiaW9wc2llcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbG90X2xhYmVscyA9IEZBTFNFKQpjbGluaWNhbF9ub2Jpb3BfYmF0Y2hfdHNuZSRwbG90CmBgYAoKIyMjIyBMb29rIGF0IHJlbWFpbmluZyB2YXJpYW5jZSB3aXRoIHZhcmlhbmNlUGFydGl0aW9uCgpgYGB7ciB2YXJpYW5jZV9wYXJ0aXRpb259CnRlc3QgPC0gc2ltcGxlX3ZhcnBhcnQoaHNfY2xpbmljYWxfbm9iaW9wKQp0ZXN0JHBhcnRpdGlvbl9wbG90CmBgYAoKIyMgUGVyZm9ybSBERSBvZiB0aGUgY2xpbmljYWwgc2FtcGxlcyBjdXJlIHZzLiBmYWlsCgpgYGB7ciBjbGluaWNhbF9kZSwgZmlnLnNob3c9ImhpZGUifQppbmRpdmlkdWFsX2NlbGx0eXBlcyA8LSBzdWJzZXRfZXhwdChoc19jbGluaWNhbF9ub2Jpb3AsIHN1YnNldD0iY29uZGl0aW9uIT0nbG9zdCciKQpoc19jbGluaWNfZGUgPC0gc20oYWxsX3BhaXJ3aXNlKGluZGl2aWR1YWxfY2VsbHR5cGVzLCBtb2RlbF9iYXRjaCA9ICJzdmFzZXEiLCBmaWx0ZXIgPSBUUlVFKSkKCmhzX2NsaW5pY190YWJsZSA8LSBzbShjb21iaW5lX2RlX3RhYmxlcygKICAgIGhzX2NsaW5pY19kZSwKICAgIGV4Y2VsID0gZ2x1ZTo6Z2x1ZSgiZXhjZWwvaW5kaXZpZHVhbF9jZWxsdHlwZXNfdGFibGUtdnt2ZXJ9Lnhsc3giKSkpCgpoc19jbGluaWNfc2lnIDwtIHNtKGV4dHJhY3Rfc2lnbmlmaWNhbnRfZ2VuZXMoCiAgICBoc19jbGluaWNfdGFibGUsCiAgICBleGNlbCA9IGdsdWU6OmdsdWUoImV4Y2VsL2luZGl2aWR1YWxfY2VsbHR5cGVzX3NpZy12e3Zlcn0ueGxzeCIpKSkKCmhzX2NsaW5pY19zaWdbWyJzdW1tYXJ5X2RmIl1dCmBgYAoKYGBge3IgZGVfaGVhdG1hcH0KaHNfY2xpbmljX2RlW1siY29tcGFyaXNvbiJdXVtbImhlYXQiXV0KYGBgCgojIyMgUGVyZm9ybSBMUlQgd2l0aCB0aGUgY2xpbmljYWwgc2FtcGxlcwoKSSBhbSBub3Qgc3VyZSBpZiB3ZSBoYXZlIGVub3VnaCBzYW1wbGVzIGFjcm9zcyB0aGUgdGhyZWUgdmlzaXQgdG8KY29tcGxldGVseSB3b3JrIGFzIHdlbGwgYXMgd2Ugd291bGQgbGlrZSwgYnV0IHRoZXJlIGlzIG9ubHkgMSB3YXkgdG8KZmluZCBvdXQhICBOb3cgdGhhdCBJIHRoaW5rIGFib3V0IGl0LCBvbmUgdGhpbmcgd2hpY2ggbWlnaHQgYmUgYXdlc29tZQppcyB0byB1c2UgY2VsbCB0eXBlIGFzIGFuIGludGVyYWN0aW5nIGZhY3Rvci4uLgoKIyMjIyBXaXRoIGJpb3BzeSBzYW1wbGVzCgpJIGZpZ3VyZSB0aGlzIG1pZ2h0IGJlIGEgcGxhY2Ugd2hlcmUgdGhlIGJpb3BzeSBzYW1wbGVzIG1pZ2h0IHByb3ZlIHVzZWZ1bC4KCmBgYHtyIGxydF90ZXN0fQpjbGluaWNhbF9ub2xvc3QgPC0gc3Vic2V0X2V4cHQoaHNfY2xpbmljYWwsIHN1YnNldD0iY29uZGl0aW9uIT0nbG9zdCciKQpscnRfdmlzaXRfY2xpbmljYWxfdGVzdCA8LSBkZXNlcV9scnQoY2xpbmljYWxfbm9sb3N0LCB0cmFuc2Zvcm0gPSAidnN0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVyYWN0b3JfY29sdW1uID0gInZpc2l0bnVtYmVyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVyZXN0X2NvbHVtbiA9ICJjbGluaWNhbG91dGNvbWUiKQpscnRfdmlzaXRfY2xpbmljYWxfdGVzdFtbImZhdm9yaXRlX2dlbmVzIl1dCgpscnRfY2VsbHR5cGVfY2xpbmljYWxfdGVzdCA8LSBkZXNlcV9scnQoY2xpbmljYWxfbm9sb3N0LCB0cmFuc2Zvcm0gPSAidnN0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVyYWN0b3JfY29sdW1uID0gInR5cGVvZmNlbGxzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVyZXN0X2NvbHVtbiA9ICJjbGluaWNhbG91dGNvbWUiKQpscnRfY2VsbHR5cGVfY2xpbmljYWxfdGVzdFtbImZhdm9yaXRlX2dlbmVzIl1dCmBgYAoKIyMjIExvb2sgYXQgb25seSB0aGUgZGlmZmVyZW50aWFsIGdlbmVzCgpBIGdvb2Qgc3VnZ2VzdGlvbiBmcm9tIFRoZXJlc2Egd2FzIHRvIGV4YW1pbmUgb25seSB0aGUgbW9zdCB2YXJpYW50CmdlbmVzIGZyb20gZmFpbHVyZSB2cy4gY3VyZSBhbmQgc2VlIGhvdyB0aGV5IGNoYW5nZSB0aGUgY2x1c3RlcmluZy9ldGMKcmVzdWx0cy4gIFRoaXMgaXMgbXkgYXR0ZW1wdCB0byBhZGRyZXNzIHRoaXMgcXVlcnkuCgpgYGB7ciBzbWFsbF9leHBsb3JlfQpoc19jbGluaWNfdG9wbiA8LSBzbShleHRyYWN0X3NpZ25pZmljYW50X2dlbmVzKGhzX2NsaW5pY190YWJsZSwgbiA9IDEwMCkpCnRhYmxlIDwtICJmYWlsdXJlX3ZzX2N1cmUiCndhbnRlZCA8LSByYmluZChoc19jbGluaWNfdG9wbltbImRlc2VxIl1dW1sidXBzIl1dW1t0YWJsZV1dLAogICAgICAgICAgICAgICAgaHNfY2xpbmljX3RvcG5bWyJkZXNlcSJdXVtbImRvd25zIl1dW1t0YWJsZV1dKQoKc21hbGxfZXhwdCA8LSBleGNsdWRlX2dlbmVzX2V4cHQoaHNfY2xpbmljYWxfbm9iaW9wLCBpZHMgPSByb3duYW1lcyh3YW50ZWQpLCBtZXRob2QgPSAia2VlcCIpCnNtYWxsX25vcm0gPC0gc20obm9ybWFsaXplX2V4cHQoc21hbGxfZXhwdCwgdHJhbnNmb3JtID0gImxvZzIiLCBjb252ZXJ0ID0gImNwbSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9ybSA9ICJxdWFudCIsIGZpbHRlciA9IFRSVUUpKQpwbG90X3BjYShzbWFsbF9ub3JtKSRwbG90CgpzbWFsbF9uYiA8LSBub3JtYWxpemVfZXhwdChzbWFsbF9leHB0LCB0cmFuc2Zvcm0gPSAibG9nMiIsIGNvbnZlcnQgPSAiY3BtIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgYmF0Y2ggPSAic3Zhc2VxIiwgbm9ybSA9ICJxdWFudCIsIGZpbHRlciA9IFRSVUUpCnBsb3RfcGNhKHNtYWxsX25iKSRwbG90CmBgYAoKYGBge3IgY2xpbmljYWxfcGxvdH0KIyMgREVTZXEyIE1BIHBsb3Qgb2YgZmFpbHVyZSAvIGN1cmUKaHNfY2xpbmljX3RhYmxlW1sicGxvdHMiXV1bWyJmYWlsdXJlX3ZzX2N1cmUiXV1bWyJkZXNlcV9tYV9wbG90cyJdXSRwbG90CgojIyBERVNlcTIgVm9sY2FubyBwbG90IG9mIGZhaWx1cmUgLyBjdXJlCmhzX2NsaW5pY190YWJsZVtbInBsb3RzIl1dW1siZmFpbHVyZV92c19jdXJlIl1dW1siZGVzZXFfdm9sX3Bsb3RzIl1dJHBsb3QKYGBgCgojIyMgZzpQcm9maWxlciByZXN1bHRzIHVzaW5nIHRoZSBzaWduaWZpY2FudCB1cCBhbmQgZG93biBnZW5lcwoKYGBge3IgcGVyZm9ybV9ncHJvZmlsZXJ9CnVwcyA8LSBoc19jbGluaWNfc2lnW1siZGVzZXEiXV1bWyJ1cHMiXV1bWzFdXQpkb3ducyA8LSBoc19jbGluaWNfc2lnW1siZGVzZXEiXV1bWyJkb3ducyJdXVtbMV1dCgpoc19jbGluaWNfZ3Byb2ZpbGVyX3VwcyA8LSBzaW1wbGVfZ3Byb2ZpbGVyKHVwcykKaHNfY2xpbmljX2dwcm9maWxlcl91cHNbWyJwdmFsdWVfcGxvdHMiXV1bWyJicHBfcGxvdF9vdmVyIl1dCmhzX2NsaW5pY19ncHJvZmlsZXJfdXBzW1sicHZhbHVlX3Bsb3RzIl1dW1sibWZwX3Bsb3Rfb3ZlciJdXQpoc19jbGluaWNfZ3Byb2ZpbGVyX3Vwc1tbInB2YWx1ZV9wbG90cyJdXVtbInJlYWN0b21lX3Bsb3Rfb3ZlciJdXQoKIyNoc190cnkyIDwtIHNpbXBsZV9ncHJvZmlsZXIyKHVwcykKCmhzX2NsaW5pY19ncHJvZmlsZXJfZG93bnMgPC0gc2ltcGxlX2dwcm9maWxlcihkb3ducykKaHNfY2xpbmljX2dwcm9maWxlcl9kb3duc1tbInB2YWx1ZV9wbG90cyJdXVtbImJwcF9wbG90X292ZXIiXV0KaHNfY2xpbmljX2dwcm9maWxlcl9kb3duc1tbInB2YWx1ZV9wbG90cyJdXVtbIm1mcF9wbG90X292ZXIiXV0KaHNfY2xpbmljX2dwcm9maWxlcl9kb3duc1tbInB2YWx1ZV9wbG90cyJdXVtbInJlYWN0b21lX3Bsb3Rfb3ZlciJdXQpgYGAKCiMjIFBlcmZvcm0gR1NWQSBvbiB0aGUgY2xpbmljYWwgc2FtcGxlcwoKYGBge3IgZ3N2YSwgZmlnLnNob3cgPSAiaGlkZSJ9CmhzX2NlbGx0eXBlX2dzdmFfYzIgPC0gc20oc2ltcGxlX2dzdmEoaW5kaXZpZHVhbF9jZWxsdHlwZXMpKQpoc19jZWxsdHlwZV9nc3ZhX2MyX3NpZyA8LSBzbShnZXRfc2lnX2dzdmFfY2F0ZWdvcmllcygKICAgIGhzX2NlbGx0eXBlX2dzdmFfYzIsCiAgICBleGNlbCA9ICJleGNlbC9pbmRpdmlkdWFsX2NlbGx0eXBlc19nc3ZhX2MyLnhsc3giKSkKCmJyb2FkX2M3IDwtIEdTRUFCYXNlOjpnZXRHbXQoInJlZmVyZW5jZS9tc2lnZGIvYzcuYWxsLnY3LjIuZW50cmV6LmdtdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sbGVjdGlvblR5cGUgPSBHU0VBQmFzZTo6QnJvYWRDb2xsZWN0aW9uKGNhdGVnb3J5ID0gImM3IiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZUlkVHlwZSA9IEdTRUFCYXNlOjpFbnRyZXpJZGVudGlmaWVyKCkpCmhzX2NlbGx0eXBlX2dzdmFfYzcgPC0gc20oc2ltcGxlX2dzdmEoaW5kaXZpZHVhbF9jZWxsdHlwZXMsIHNpZ25hdHVyZXMgPSBicm9hZF9jNywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2lnX3htbCA9ICJyZWZlcmVuY2UvbXNpZ2RiX3Y3LjIueG1sIiwgY29yZXMgPSAxMCkpCmhzX2NlbGx0eXBlX2dzdmFfYzdfc2lnIDwtIHNtKGdldF9zaWdfZ3N2YV9jYXRlZ29yaWVzKAogICAgaHNfY2VsbHR5cGVfZ3N2YV9jNywKICAgIGV4Y2VsID0gImV4Y2VsL2luZGl2aWR1YWxfY2VsbHR5cGVzX2dzdmFfYzcueGxzeCIpKQpgYGAKCiMjIyBQcmludCBzb21lIHBsb3RzIG9mIHRoZSBHU1ZBIG91dHB1dHMKCmBgYHtyIGdzdmFfcGxvdHN9CiMjIFRoZSByYXcgaGVhdG1hcCBvZiB0aGUgQzIgdmFsdWVzCmhzX2NlbGx0eXBlX2dzdmFfYzJfc2lnW1sicmF3X3Bsb3QiXV0KIyMgVGhlICdzaWduaWZpY2FuY2UnIHNjb3JlcyBvZiB0aGUgQzIgdmFsdWVzCmhzX2NlbGx0eXBlX2dzdmFfYzJfc2lnW1sic2NvcmVfcGxvdCJdXQojIyBUaGUgc3Vic2V0IG9mIHNjb3JlcyBmb3IgY2F0ZWdvcmllcyBkZWVtZWQgc2lnbmlmaWNhbnRseSBkaWZmZXJlbnQuCmhzX2NlbGx0eXBlX2dzdmFfYzJfc2lnW1sic3Vic2V0X3Bsb3QiXV0KCiMjIFRoZSByYXcgaGVhdG1hcCBvZiB0aGUgQzcgdmFsdWVzCmhzX2NlbGx0eXBlX2dzdmFfYzdfc2lnW1sicmF3X3Bsb3QiXV0KIyMgVGhlICdzaWduaWZpY2FuY2UnIHNjb3JlcyBvZiB0aGUgQzcgdmFsdWVzCmhzX2NlbGx0eXBlX2dzdmFfYzdfc2lnW1sic2NvcmVfcGxvdCJdXQojIyBUaGUgc3Vic2V0IG9mIHNjb3JlcyBmb3IgY2F0ZWdvcmllcyBkZWVtZWQgc2lnbmlmaWNhbnRseSBkaWZmZXJlbnQuCmhzX2NlbGx0eXBlX2dzdmFfYzdfc2lnW1sic3Vic2V0X3Bsb3QiXV0KYGBgCgojIEluZGl2aWR1YWwgQ2VsbCB0eXBlcwoKVGhlIGZvbGxvd2luZyBibG9ja3Mgc3BsaXQgdGhlIHNhbXBsZXMgaW50byBhIGZldyBncm91cHMgYnkgc2FtcGxlIHR5cGUgYW5kIGxvb2sKYXQgdGhlIGRpc3RyaWJ1dGlvbnMgYmV0d2VlbiB0aGVtLgoKIyMgSW1wbGVtZW50YXRpb24gZGV0YWlscwoKR2V0IHRvcC9ib3R0b20gbiBnZW5lcyBmb3IgZWFjaCBjZWxsIHR5cGUsIHVzaW5nIGNsaW5pY2FsIG91dGNvbWUgYXMgdGhlIGZhY3RvciBvZiBpbnRlcmVzdC4KRm9yIHRoZSBtb21lbnQsIHVzZSBzdmEgZm9yIHRoZSBERSBhbmFseXNpcy4KUHJvdmlkZSBjcG1zIGZvciB0aGUgdG9wL2JvdHRvbSBuIGdlbmVzLgoKU3RhcnQgd2l0aCB0b3AvYm90dG9tIDIwMC4KUGVyZm9ybSBkZWZhdWx0IGxvZ0ZDIGFuZCBwLXZhbHVlIGFzIHdlbGwuCgojIyMgU2hhcmVkIGNvbnRyYXN0cwoKSGVyZSBpcyB0aGUgY29udHJhc3Qgd2Ugd2lsbCB1c2UgdGhyb3VnaHB1dCwgSSBhbSBsZWF2aW5nIG9wZW4gdGhlIG9wdGlvbiB0byBhZGQgbW9yZS4KCmBgYHtyIGtlZXBlcnN9CmtlZXBlcnMgPC0gbGlzdCgKICAiZmFpbF92c19jdXJlIiA9IGMoImZhaWx1cmUiLCAiY3VyZSIpKQpgYGAKCiMjIE1vbm9jeXRlcwoKIyMjIEV2YWx1YXRlIE1vbm9jeXRlIHNhbXBsZXMKCmBgYHtyIG1vbm9jeXRlc30KbW9ubyA8LSBzdWJzZXRfZXhwdChoc192YWxpZCwgc3Vic2V0ID0gInR5cGVvZmNlbGxzPT0nbW9ub2N5dGVzJyIpICU+JQogIHNldF9leHB0X2NvbmRpdGlvbnMoZmFjdCA9ICJjbGluaWNhbG91dGNvbWUiKSAlPiUKICBzZXRfZXhwdF9iYXRjaGVzKGZhY3QgPSAiZG9ub3IiKSAlPiUKICBzZXRfZXhwdF9jb2xvcnMoY29sb3JzID0gY2hvc2VuX2NvbG9ycykKIyMgRklYTUUgc2V0X2V4cHRfY29sb3JzIHNob3VsZCBzcGVhayB1cCBpZiB0aGVyZSBhcmUgbWlzbWF0Y2hlcyBoZXJlISEhCgpzYXZlX3Jlc3VsdCA8LSBzYXZlKG1vbm8sIGZpbGUgPSAicmRhL21vbm9jeXRlX2V4cHQucmRhIikKbW9ub19ub3JtIDwtIG5vcm1hbGl6ZV9leHB0KG1vbm8sIGNvbnZlcnQgPSAiY3BtIiwgZmlsdGVyID0gVFJVRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybSA9ICJsb2cyIiwgbm9ybSA9ICJxdWFudCIpCnBsdCA8LSBwbG90X3BjYShtb25vX25vcm0sIHBsb3RfbGFiZWxzID0gRkFMU0UpJHBsb3QKcHAoZmlsZSA9IGdsdWUoImltYWdlcy9tb25vX3BjYV9ub3JtYWxpemVkLXZ7dmVyfS5wZGYiKSwgaW1hZ2UgPSBwbHQpCgptb25vX25iIDwtIG5vcm1hbGl6ZV9leHB0KG1vbm8sIGNvbnZlcnQgPSAiY3BtIiwgZmlsdGVyID0gVFJVRSwKICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0gPSAibG9nMiIsIGJhdGNoID0gInN2YXNlcSIpCnBsdCA8LSBwbG90X3BjYShtb25vX25iLCBwbG90X2xhYmVscyA9IEZBTFNFKSRwbG90CnBwKGZpbGUgPSBnbHVlKCJpbWFnZXMvbW9ub19wY2Ffbm9ybWFsaXplZF9iYXRjaC12e3Zlcn0ucGRmIiksIGltYWdlID0gcGx0KQpgYGAKCiMjIyBERSBvZiBNb25vY3l0ZSBzYW1wbGVzCgojIyMjIFdpdGhvdXQgc3ZhCgpgYGB7ciBkZV9tb25vY3l0ZSwgZmlnLnNob3cgPSAiaGlkZSJ9Cm1vbm9fZGUgPC0gc20oYWxsX3BhaXJ3aXNlKG1vbm8sIG1vZGVsX2JhdGNoID0gRkFMU0UsIGZpbHRlciA9IFRSVUUpKQptb25vX3RhYmxlcyA8LSBzbShjb21iaW5lX2RlX3RhYmxlcygKICAgIG1vbm9fZGUsIGtlZXBlcnMgPSBrZWVwZXJzLAogICAgZXhjZWwgPSBnbHVlOjpnbHVlKCJleGNlbC9tb25vY3l0ZV9jbGluaWNhbF9hbGxfdGFibGVzLXZ7dmVyfS54bHN4IikpKQp3cml0dGVuIDwtIHdyaXRlX3hsc3goZGF0YSA9IG1vbm9fdGFibGVzW1siZGF0YSJdXVtbMV1dLAogICAgICAgICAgICAgICAgICAgICAgZXhjZWwgPSBnbHVlOjpnbHVlKCJleGNlbC9tb25vY3l0ZV9jbGluaWNhbF90YWJsZS12e3Zlcn0ueGxzeCIpKQptb25vX3NpZyA8LSBzbShleHRyYWN0X3NpZ25pZmljYW50X2dlbmVzKG1vbm9fdGFibGVzLCBhY2NvcmRpbmdfdG8gPSAiZGVzZXEiKSkKd3JpdHRlbiA8LSB3cml0ZV94bHN4KGRhdGEgPSBtb25vX3NpZ1tbImRlc2VxIl1dW1sidXBzIl1dW1sxXV0sCiAgICAgICAgICAgICAgICAgICAgICBleGNlbCA9IGdsdWU6OmdsdWUoImV4Y2VsL21vbm9jeXRlX2NsaW5pY2FsX3NpZ3VwLXZ7dmVyfS54bHN4IikpCndyaXR0ZW4gPC0gd3JpdGVfeGxzeChkYXRhID0gbW9ub19zaWdbWyJkZXNlcSJdXVtbImRvd25zIl1dW1sxXV0sCiAgICAgICAgICAgICAgICAgICAgICBleGNlbCA9IGdsdWU6OmdsdWUoImV4Y2VsL21vbm9jeXRlX2NsaW5pY2FsX3NpZ2Rvd24tdnt2ZXJ9Lnhsc3giKSkKCm1vbm9fcGN0X3NpZyA8LSBzbShleHRyYWN0X3NpZ25pZmljYW50X2dlbmVzKG1vbm9fdGFibGVzLCBuID0gMjAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZmMgPSBOVUxMLCBwID0gTlVMTCwgYWNjb3JkaW5nX3RvID0gImRlc2VxIikpCndyaXR0ZW4gPC0gd3JpdGVfeGxzeChkYXRhID0gbW9ub19wY3Rfc2lnW1siZGVzZXEiXV1bWyJ1cHMiXV1bWzFdXSwKICAgICAgICAgICAgICAgICAgICAgIGV4Y2VsID0gZ2x1ZTo6Z2x1ZSgiZXhjZWwvbW9ub2N5dGVfY2xpbmljYWxfc2lndXBfcGN0LXZ7dmVyfS54bHN4IikpCndyaXR0ZW4gPC0gd3JpdGVfeGxzeChkYXRhID0gbW9ub19wY3Rfc2lnW1siZGVzZXEiXV1bWyJkb3ducyJdXVtbMV1dLAogICAgICAgICAgICAgICAgICAgICAgZXhjZWwgPSBnbHVlOjpnbHVlKCJleGNlbC9tb25vY3l0ZV9jbGluaWNhbF9zaWdkb3duX3BjdC12e3Zlcn0ueGxzeCIpKQptb25vX3NpZyRzdW1tYXJ5X2RmCgojIyBQcmludCBvdXQgYSB0YWJsZSBvZiB0aGUgY3BtIHZhbHVlcyBmb3Igb3RoZXIgZXhwbG9yYXRpb25zLgptb25vX2NwbSA8LSBzbShub3JtYWxpemVfZXhwdChtb25vLCBjb252ZXJ0ID0gImNwbSIpKQp3cml0dGVuIDwtIHdyaXRlX3hsc3goZGF0YSA9IGV4cHJzKG1vbm9fY3BtKSwKICAgICAgICAgICAgICAgICAgICAgIGV4Y2VsID0gZ2x1ZTo6Z2x1ZSgiZXhjZWwvbW9ub2N5dGVfY3BtX2JlZm9yZV9iYXRjaC12e3Zlcn0ueGxzeCIpKQptb25vX2JjcG0gPC0gc20obm9ybWFsaXplX2V4cHQobW9ubywgZmlsdGVyID0gVFJVRSwgY29udmVydCA9ICJjcG0iLCBiYXRjaCA9ICJzdmFzZXEiKSkKd3JpdHRlbiA8LSB3cml0ZV94bHN4KGRhdGEgPSBleHBycyhtb25vX2JjcG0pLAogICAgICAgICAgICAgICAgICAgICAgZXhjZWwgPSBnbHVlOjpnbHVlKCJleGNlbC9tb25vY3l0ZV9jcG1fYWZ0ZXJfYmF0Y2gtdnt2ZXJ9Lnhsc3giKSkKYGBgCgojIyMjIFdpdGggc3ZhCgpgYGB7ciBkZV9tb25vX3N2YSwgZmlnLnNob3cgPSAiaGlkZSJ9Cm1vbm9fZGVfc3ZhIDwtIHNtKGFsbF9wYWlyd2lzZShtb25vLCBtb2RlbF9iYXRjaCA9ICJzdmFzZXEiLCBmaWx0ZXIgPSBUUlVFKSkKbW9ub190YWJsZXNfc3ZhIDwtIHNtKGNvbWJpbmVfZGVfdGFibGVzKAogICAgbW9ub19kZV9zdmEsIGtlZXBlcnMgPSBrZWVwZXJzLAogICAgZXhjZWwgPSBnbHVlOjpnbHVlKCJleGNlbC9tb25vY3l0ZV9jbGluaWNhbF9hbGxfdGFibGVzX3N2YS12e3Zlcn0ueGxzeCIpKSkKbW9ub19zaWdfc3ZhIDwtIHNtKGV4dHJhY3Rfc2lnbmlmaWNhbnRfZ2VuZXMoCiAgICBtb25vX3RhYmxlc19zdmEsCiAgICBleGNlbCA9IGdsdWU6OmdsdWUoImV4Y2VsL21vbm9jeXRlX2NsaW5pY2FsX3NpZ190YWJsZXNfc3ZhLXZ7dmVyfS54bHN4IiksCiAgICBhY2NvcmRpbmdfdG8gPSAiZGVzZXEiKSkKYGBgCgojIyMjIE1vbm9jeXRlIERFIHBsb3RzCgpGaXJzdCBwcmludCBvdXQgdGhlIERFIHBsb3RzIHdpdGhvdXQgYW5kIHRoZW4gd2l0aCBzdmEgZXN0aW1hdGVzLgoKYGBge3IgbW9ub19kZV9wbG90c30KIyMgREVTZXEyIE1BIHBsb3Qgb2YgZmFpbHVyZSAvIGN1cmUKbW9ub190YWJsZXNbWyJwbG90cyJdXVtbImZhaWxfdnNfY3VyZSJdXVtbImRlc2VxX21hX3Bsb3RzIl1dJHBsb3QKCiMjIERFU2VxMiBWb2xjYW5vIHBsb3Qgb2YgZmFpbHVyZSAvIGN1cmUKbW9ub190YWJsZXNbWyJwbG90cyJdXVtbImZhaWxfdnNfY3VyZSJdXVtbImRlc2VxX3ZvbF9wbG90cyJdXSRwbG90CgojIyBERVNlcTIgTUEgcGxvdCBvZiBmYWlsdXJlIC8gY3VyZSB3aXRoIHN2YXNlcQptb25vX3RhYmxlc19zdmFbWyJwbG90cyJdXVtbImZhaWxfdnNfY3VyZSJdXVtbImRlc2VxX21hX3Bsb3RzIl1dJHBsb3QKCiMjIERFU2VxMiBWb2xjYW5vIHBsb3Qgb2YgZmFpbHVyZSAvIGN1cmUgd2l0aCBzdmFzZXEKbW9ub190YWJsZXNfc3ZhW1sicGxvdHMiXV1bWyJmYWlsX3ZzX2N1cmUiXV1bWyJkZXNlcV92b2xfcGxvdHMiXV0kcGxvdApgYGAKCiMjIyMgTW9ub2N5dGUgb250b2xvZ3kgc2VhcmNoCgpgYGB7ciBtb25vX2dwcm9maWxlcn0KdXBzIDwtIG1vbm9fc2lnW1siZGVzZXEiXV1bWyJ1cHMiXV1bWyJmYWlsX3ZzX2N1cmUiXV0KZG93bnMgPC0gbW9ub19zaWdbWyJkZXNlcSJdXVtbImRvd25zIl1dW1siZmFpbF92c19jdXJlIl1dCgptb25vX3VwX2dwIDwtIHNpbXBsZV9ncHJvZmlsZXIoc2lnX2dlbmVzID0gdXBzKQptb25vX3VwX2dwW1sicHZhbHVlX3Bsb3RzIl1dW1siYnBwX3Bsb3Rfb3ZlciJdXQptb25vX3VwX2dwW1sicHZhbHVlX3Bsb3RzIl1dW1sibWZwX3Bsb3Rfb3ZlciJdXQptb25vX3VwX2dwW1sicHZhbHVlX3Bsb3RzIl1dW1sicmVhY3RvbWVfcGxvdF9vdmVyIl1dCgptb25vX2Rvd25fZ3AgPC0gc2ltcGxlX2dwcm9maWxlcihzaWdfZ2VuZXMgPSBkb3ducykKbW9ub19kb3duX2dwW1sicHZhbHVlX3Bsb3RzIl1dW1siYnBwX3Bsb3Rfb3ZlciJdXQptb25vX2Rvd25fZ3BbWyJwdmFsdWVfcGxvdHMiXV1bWyJtZnBfcGxvdF9vdmVyIl1dCm1vbm9fZG93bl9ncFtbInB2YWx1ZV9wbG90cyJdXVtbInJlYWN0b21lX3Bsb3Rfb3ZlciJdXQpgYGAKCiMjIyMgTW9ub2N5dGUgTVNpZ0RCIHF1ZXJ5CgpgYGB7ciBtc2lnX21vbm9fZ29zZXEsIGZpZy5zaG93ID0gImhpZGUifQpicm9hZF9jNyA8LSBHU0VBQmFzZTo6Z2V0R210KCJyZWZlcmVuY2UvbXNpZ2RiL2M3LmFsbC52Ny4yLmVudHJlei5nbXQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxlY3Rpb25UeXBlID0gR1NFQUJhc2U6OkJyb2FkQ29sbGVjdGlvbihjYXRlZ29yeSA9ICJjNyIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVJZFR5cGUgPSBHU0VBQmFzZTo6RW50cmV6SWRlbnRpZmllcigpKQoKbW9ub191cF9nb3NlcV9tc2lnIDwtIGdvc2VxX21zaWdkYihzaWdfZ2VuZXMgPSB1cHMsIHNpZ25hdHVyZXMgPSBicm9hZF9jNywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduYXR1cmVfY2F0ZWdvcnkgPSAiYzciLCBsZW5ndGhfZGIgPSBoc19sZW5ndGgpCgptb25vX2Rvd25fZ29zZXFfbXNpZyA8LSBnb3NlcV9tc2lnZGIoc2lnX2dlbmVzID0gZG93bnMsIHNpZ25hdHVyZXMgPSBicm9hZF9jNywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25hdHVyZV9jYXRlZ29yeSA9ICJjNyIsIGxlbmd0aF9kYiA9IGhzX2xlbmd0aCkKYGBgCgojIyMjIFBsb3Qgb2Ygc2ltaWxhciBleHBlcmltZW50cwoKYGBge3IgbXNpZ19wbG90c30KIyMgTW9ub2N5dGUgZ2VuZXMgd2l0aCBpbmNyZWFzZWQgZXhwcmVzc2lvbiBpbiB0aGUgZmFpbGVkIHNhbXBsZXMKIyMgc2hhcmUgZ2VuZXMgd2l0aCB0aGUgZm9sbG93aW5nIGV4cGVyaW1lbnRzCm1vbm9fdXBfZ29zZXFfbXNpZ1tbInB2YWx1ZV9wbG90cyJdXVtbIm1mcF9wbG90X292ZXIiXV0KCiMjIE1vbm9jeXRlIGdlbmVzIHdpdGggaW5jcmVhc2VkIGV4cHJlc3Npb24gaW4gdGhlIGN1cmVkIHNhbXBsZXMKIyMgc2hhcmUgZ2VuZXMgd2l0aCB0aGUgZm9sbG93aW5nIGV4cGVyaW1lbnRzCm1vbm9fZG93bl9nb3NlcV9tc2lnW1sicHZhbHVlX3Bsb3RzIl1dW1sibWZwX3Bsb3Rfb3ZlciJdXQpgYGAKCiMjIyBFdmFsdWF0ZSBOZXV0cm9waGlsIHNhbXBsZXMKCmBgYHtyIG5ldXRyb3BoaWxzfQpuZXV0IDwtIHN1YnNldF9leHB0KGhzX3ZhbGlkLCBzdWJzZXQgPSAidHlwZW9mY2VsbHM9PSduZXV0cm9waGlscyciKSAlPiUKICBzZXRfZXhwdF9jb25kaXRpb25zKGZhY3QgPSAiY2xpbmljYWxvdXRjb21lIikgJT4lCiAgc2V0X2V4cHRfYmF0Y2hlcyhmYWN0ID0gImRvbm9yIikgJT4lCiAgc2V0X2V4cHRfY29sb3JzKGNvbG9ycyA9IGNob3Nlbl9jb2xvcnMpCgpzYXZlX3Jlc3VsdCA8LSBzYXZlKG5ldXQsIGZpbGUgPSAicmRhL25ldXRyb3BoaWxfZXhwdC5yZGEiKQpuZXV0X25vcm0gPC0gc20obm9ybWFsaXplX2V4cHQobmV1dCwgY29udmVydCA9ICJjcG0iLCBmaWx0ZXIgPSBUUlVFLCB0cmFuc2Zvcm0gPSAibG9nMiIpKQpwbHQgPC0gcGxvdF9wY2EobmV1dF9ub3JtLCBwbG90X2xhYmVscyA9IEZBTFNFKSRwbG90CnBwKGZpbGUgPSBnbHVlKCJpbWFnZXMvbmV1dF9wY2Ffbm9ybWFsaXplZC12e3Zlcn0ucGRmIiksIGltYWdlID0gcGx0KQoKbmV1dF9uYiA8LSBzbShub3JtYWxpemVfZXhwdChuZXV0LCBjb252ZXJ0ID0gImNwbSIsIGZpbHRlciA9IFRSVUUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtID0gImxvZzIiLCBiYXRjaCA9ICJzdmFzZXEiKSkKcGx0IDwtIHBsb3RfcGNhKG5ldXRfbmIsIHBsb3RfbGFiZWxzID0gRkFMU0UpJHBsb3QKcHAoZmlsZSA9IGdsdWUoImltYWdlcy9uZXV0X3BjYV9ub3JtYWxpemVkX3N2YXNlcS12e3Zlcn0ucGRmIiksIGltYWdlID0gcGx0KQpgYGAKCiMjIyBERSBvZiBOZXRyb3BoaWwgc2FtcGxlcwoKIyMjIyBXaXRob3V0IHN2YQoKYGBge3IgbmV1dHJvcGhpbF9kZSwgZmlnLnNob3cgPSAiaGlkZSJ9Cm5ldXRfZGUgPC0gc20oYWxsX3BhaXJ3aXNlKG5ldXQsIG1vZGVsX2JhdGNoID0gRkFMU0UsIGZpbHRlciA9IFRSVUUpKQpuZXV0X3RhYmxlcyA8LSBzbShjb21iaW5lX2RlX3RhYmxlcygKICAgIG5ldXRfZGUsIGtlZXBlcnMgPSBrZWVwZXJzLAogICAgZXhjZWwgPSBnbHVlOjpnbHVlKCJleGNlbC9uZXV0cm9waGlsX2NsaW5pY2FsX2FsbF90YWJsZXMtdnt2ZXJ9Lnhsc3giKSkpCndyaXR0ZW4gPC0gd3JpdGVfeGxzeChkYXRhID0gbmV1dF90YWJsZXNbWyJkYXRhIl1dW1sxXV0sCiAgICAgICAgICAgICAgICAgICAgICBleGNlbCA9IGdsdWU6OmdsdWUoImV4Y2VsL25ldXRyb3BoaWxfY2xpbmljYWxfdGFibGUtdnt2ZXJ9Lnhsc3giKSkKbmV1dF9zaWcgPC0gc20oZXh0cmFjdF9zaWduaWZpY2FudF9nZW5lcyhuZXV0X3RhYmxlcywgYWNjb3JkaW5nX3RvID0gImRlc2VxIikpCndyaXR0ZW4gPC0gd3JpdGVfeGxzeChkYXRhID0gbmV1dF9zaWdbWyJkZXNlcSJdXVtbInVwcyJdXVtbMV1dLAogICAgICAgICAgICAgICAgICAgICAgZXhjZWwgPSBnbHVlOjpnbHVlKCJleGNlbC9uZXV0cm9waGlsX2NsaW5pY2FsX3NpZ3VwLXZ7dmVyfS54bHN4IikpCndyaXR0ZW4gPC0gd3JpdGVfeGxzeChkYXRhID0gbmV1dF9zaWdbWyJkZXNlcSJdXVtbImRvd25zIl1dW1sxXV0sCiAgICAgICAgICAgICAgICAgICAgICBleGNlbCA9IGdsdWU6OmdsdWUoImV4Y2VsL25ldXRyb3BoaWxfY2xpbmljYWxfc2lnZG93bi12e3Zlcn0ueGxzeCIpKQoKbmV1dF9wY3Rfc2lnIDwtIHNtKGV4dHJhY3Rfc2lnbmlmaWNhbnRfZ2VuZXMobmV1dF90YWJsZXMsIG4gPSAyMDAsIGxmYyA9IE5VTEwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAgPSBOVUxMLCBhY2NvcmRpbmdfdG8gPSAiZGVzZXEiKSkKd3JpdHRlbiA8LSB3cml0ZV94bHN4KGRhdGEgPSBuZXV0X3NpZ1tbImRlc2VxIl1dW1sidXBzIl1dW1sxXV0sCiAgICAgICAgICAgICAgICAgICAgICBleGNlbCA9IGdsdWU6OmdsdWUoImV4Y2VsL25ldXRyb3BoaWxfY2xpbmljYWxfc2lndXBfcGN0LXZ7dmVyfS54bHN4IikpCndyaXR0ZW4gPC0gd3JpdGVfeGxzeChkYXRhID0gbmV1dF9zaWdbWyJkZXNlcSJdXVtbImRvd25zIl1dW1sxXV0sCiAgICAgICAgICAgICAgICAgICAgICBleGNlbCA9IGdsdWU6OmdsdWUoImV4Y2VsL25ldXRyb3BoaWxfY2xpbmljYWxfc2lnZG93bl9wY3Qtdnt2ZXJ9Lnhsc3giKSkKbmV1dF9jcG0gPC0gc20obm9ybWFsaXplX2V4cHQobmV1dCwgY29udmVydCA9ICJjcG0iKSkKd3JpdHRlbiA8LSB3cml0ZV94bHN4KGRhdGEgPSBleHBycyhuZXV0X2NwbSksCiAgICAgICAgICAgICAgICAgICAgICBleGNlbCA9IGdsdWU6OmdsdWUoImV4Y2VsL25ldXRyb3BoaWxfY3BtX2JlZm9yZV9iYXRjaC12e3Zlcn0ueGxzeCIpKQpuZXV0X2JjcG0gPC0gc20obm9ybWFsaXplX2V4cHQobmV1dCwgZmlsdGVyID0gVFJVRSwgYmF0Y2ggPSAic3Zhc2VxIiwgY29udmVydCA9ICJjcG0iKSkKd3JpdHRlbiA8LSB3cml0ZV94bHN4KGRhdGEgPSBleHBycyhuZXV0X2JjcG0pLAogICAgICAgICAgICAgICAgICAgICAgZXhjZWwgPSBnbHVlOjpnbHVlKCJleGNlbC9uZXV0cm9waGlsX2NwbV9hZnRlcl9iYXRjaC12e3Zlcn0ueGxzeCIpKQpgYGAKCiMjIyMgV2l0aCBzdmEKCmBgYHtyIGRlX25ldXRfc3ZhLCBmaWcuc2hvdyA9ICJoaWRlIn0KbmV1dF9kZV9zdmEgPC0gc20oYWxsX3BhaXJ3aXNlKG5ldXQsIG1vZGVsX2JhdGNoID0gInN2YXNlcSIsIGZpbHRlciA9IFRSVUUpKQpuZXV0X3RhYmxlc19zdmEgPC0gc20oY29tYmluZV9kZV90YWJsZXMoCiAgICBuZXV0X2RlX3N2YSwga2VlcGVycyA9IGtlZXBlcnMsCiAgICBleGNlbCA9IGdsdWU6OmdsdWUoImV4Y2VsL25ldXRyb3BoaWxfY2xpbmljYWxfYWxsX3RhYmxlc19zdmEtdnt2ZXJ9Lnhsc3giKSkpCm5ldXRfc2lnX3N2YSA8LSBzbShleHRyYWN0X3NpZ25pZmljYW50X2dlbmVzKAogICAgbmV1dF90YWJsZXNfc3ZhLAogICAgZXhjZWwgPSBnbHVlOjpnbHVlKCJleGNlbC9uZXV0cm9waGlsX2NsaW5pY2FsX3NpZ190YWJsZXNfc3ZhLXZ7dmVyfS54bHN4IiksCiAgICBhY2NvcmRpbmdfdG8gPSAiZGVzZXEiKSkKYGBgCgojIyMjIE5ldXRyb3BoaWwgREUgcGxvdHMKCmBgYHtyIG5ldXRfZGVfcGxvdHN9CiMjIERFU2VxMiBNQSBwbG90IG9mIGZhaWx1cmUgLyBjdXJlCm5ldXRfdGFibGVzW1sicGxvdHMiXV1bWyJmYWlsX3ZzX2N1cmUiXV1bWyJkZXNlcV9tYV9wbG90cyJdXSRwbG90CgojIyBERVNlcTIgVm9sY2FubyBwbG90IG9mIGZhaWx1cmUgLyBjdXJlCm5ldXRfdGFibGVzW1sicGxvdHMiXV1bWyJmYWlsX3ZzX2N1cmUiXV1bWyJkZXNlcV92b2xfcGxvdHMiXV0kcGxvdAoKIyMgREVTZXEyIE1BIHBsb3Qgb2YgZmFpbHVyZSAvIGN1cmUgd2l0aCBzdmEKbmV1dF90YWJsZXNfc3ZhW1sicGxvdHMiXV1bWyJmYWlsX3ZzX2N1cmUiXV1bWyJkZXNlcV9tYV9wbG90cyJdXSRwbG90CgojIyBERVNlcTIgVm9sY2FubyBwbG90IG9mIGZhaWx1cmUgLyBjdXJlIHdpdGggc3ZhCm5ldXRfdGFibGVzX3N2YVtbInBsb3RzIl1dW1siZmFpbF92c19jdXJlIl1dW1siZGVzZXFfdm9sX3Bsb3RzIl1dJHBsb3QKYGBgCgojIyMjIE5ldXRyb3BoaWwgb250b2xvZ3kgc2VhcmNoCgpgYGB7ciBuZXV0X2dwfQp1cHMgPC0gbmV1dF9zaWdbWyJkZXNlcSJdXVtbInVwcyJdXVtbImZhaWxfdnNfY3VyZSJdXQpkb3ducyA8LSBuZXV0X3NpZ1tbImRlc2VxIl1dW1siZG93bnMiXV1bWyJmYWlsX3ZzX2N1cmUiXV0KCm5ldXRfdXBfZ3AgPC0gc2ltcGxlX2dwcm9maWxlcihzaWdfZ2VuZXMgPSB1cHMpCm5ldXRfdXBfZ3BbWyJwdmFsdWVfcGxvdHMiXV1bWyJicHBfcGxvdF9vdmVyIl1dCm5ldXRfdXBfZ3BbWyJwdmFsdWVfcGxvdHMiXV1bWyJtZnBfcGxvdF9vdmVyIl1dCm5ldXRfdXBfZ3BbWyJwdmFsdWVfcGxvdHMiXV1bWyJyZWFjdG9tZV9wbG90X292ZXIiXV0KCm5ldXRfZG93bl9ncCA8LSBzaW1wbGVfZ3Byb2ZpbGVyKGRvd25zKQpuZXV0X2Rvd25fZ3BbWyJwdmFsdWVfcGxvdHMiXV1bWyJicHBfcGxvdF9vdmVyIl1dCm5ldXRfZG93bl9ncFtbInB2YWx1ZV9wbG90cyJdXVtbIm1mcF9wbG90X292ZXIiXV0KbmV1dF9kb3duX2dwW1sicHZhbHVlX3Bsb3RzIl1dW1sicmVhY3RvbWVfcGxvdF9vdmVyIl1dCmBgYAoKIyMjIyBOZXV0cm9waGlsIEdTVkEgcXVlcnkKCmBgYHtyIG1zaWdfbmV1dF9nb3NlcSwgZmlnLnNob3cgPSAiaGlkZSJ9Cm5ldXRfdXBfZ29zZXFfbXNpZyA8LSBnb3NlcV9tc2lnZGIoc2lnX2dlbmVzID0gdXBzLCBzaWduYXR1cmVzID0gYnJvYWRfYzcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmF0dXJlX2NhdGVnb3J5ID0gImM3IiwgbGVuZ3RoX2RiID0gaHNfbGVuZ3RoKQoKbmV1dF9kb3duX2dvc2VxX21zaWcgPC0gZ29zZXFfbXNpZ2RiKHNpZ19nZW5lcyA9IGRvd25zLCBzaWduYXR1cmVzID0gYnJvYWRfYzcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduYXR1cmVfY2F0ZWdvcnkgPSAiYzciLCBsZW5ndGhfZGIgPSBoc19sZW5ndGgpCmBgYAoKIyMjIyBQbG90IG9mIHNpbWlsYXIgZXhwZXJpbWVudHMKCmBgYHtyIG1zaWdfcGxvdHNfbmV1dH0KIyMgTmV1dHJvcGhpbCBnZW5lcyB3aXRoIGluY3JlYXNlZCBleHByZXNzaW9uIGluIHRoZSBmYWlsZWQgc2FtcGxlcwojIyBzaGFyZSBnZW5lcyB3aXRoIHRoZSBmb2xsb3dpbmcgZXhwZXJpbWVudHMKbmV1dF91cF9nb3NlcV9tc2lnW1sicHZhbHVlX3Bsb3RzIl1dW1sibWZwX3Bsb3Rfb3ZlciJdXQoKIyMgTmV1dHJvcGhpbCBnZW5lcyB3aXRoIGluY3JlYXNlZCBleHByZXNzaW9uIGluIHRoZSBjdXJlZCBzYW1wbGVzCiMjIHNoYXJlIGdlbmVzIHdpdGggdGhlIGZvbGxvd2luZyBleHBlcmltZW50cwpuZXV0X2Rvd25fZ29zZXFfbXNpZ1tbInB2YWx1ZV9wbG90cyJdXVtbIm1mcF9wbG90X292ZXIiXV0KYGBgCgojIyBFb3Npbm9waGlscwoKIyMjIEV2YWx1YXRlIEVvc2lub3BoaWwgc2FtcGxlcwoKYGBge3IgZW9zaW5vcGhpbHN9CmVvIDwtIHN1YnNldF9leHB0KGhzX3ZhbGlkLCBzdWJzZXQgPSAidHlwZW9mY2VsbHM9PSdlb3Npbm9waGlscyciKSAlPiUKICBzZXRfZXhwdF9jb25kaXRpb25zKGZhY3QgPSAiY2xpbmljYWxvdXRjb21lIikgJT4lCiAgc2V0X2V4cHRfYmF0Y2hlcyhmYWN0ID0gImRvbm9yIikgJT4lCiAgc2V0X2V4cHRfY29sb3JzKGNvbG9ycyA9IGNob3Nlbl9jb2xvcnMpCgpzYXZlX3Jlc3VsdCA8LSBzYXZlKGVvLCBmaWxlID0gInJkYS9lb3Npbm9waGlsX2V4cHQucmRhIikKZW9fbm9ybSA8LSBzbShub3JtYWxpemVfZXhwdChlbywgY29udmVydCA9ICJjcG0iLCB0cmFuc2Zvcm0gPSAibG9nMiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9ybSA9ICJxdWFudCIsIGZpbHRlciA9IFRSVUUpKQpwbHQgPC0gcGxvdF9wY2EoZW9fbm9ybSwgcGxvdF9sYWJlbHMgPSBGQUxTRSkkcGxvdApwcChmaWxlID0gZ2x1ZSgiaW1hZ2VzL2VvX3BjYV9ub3JtYWxpemVkLXZ7dmVyfS5wZGYiKSwgaW1hZ2UgPSBwbHQpCgplb19uYiA8LSBzbShub3JtYWxpemVfZXhwdChlbywgY29udmVydCA9ICJjcG0iLCB0cmFuc2Zvcm0gPSAibG9nMiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlciA9IFRSVUUsIGJhdGNoID0gInN2YXNlcSIpKQpwbG90X3BjYShlb19uYikkcGxvdApgYGAKCiMjIyBERSBvZiBFb3Npbm9waGlsIHNhbXBsZXMKCiMjIyMgV2l0aG91dGggc3ZhCgpgYGB7ciBlb3Npbm9waGlsX2RlLCBmaWcuc2hvdyA9ICJoaWRlIn0KZW9fZGUgPC0gc20oYWxsX3BhaXJ3aXNlKGVvLCBtb2RlbF9iYXRjaCA9IEZBTFNFLCBmaWx0ZXIgPSBUUlVFKSkKZW9fdGFibGVzIDwtIHNtKGNvbWJpbmVfZGVfdGFibGVzKAogICAgZW9fZGUsIGtlZXBlcnMgPSBrZWVwZXJzLAogICAgZXhjZWwgPSBnbHVlOjpnbHVlKCJleGNlbC9lb3Npbm9waGlsX2NsaW5pY2FsX2FsbF90YWJsZXMtdnt2ZXJ9Lnhsc3giKSkpCndyaXR0ZW4gPC0gd3JpdGVfeGxzeChkYXRhID0gZW9fdGFibGVzW1siZGF0YSJdXVtbMV1dLAogICAgICAgICAgICAgICAgICAgICAgZXhjZWwgPSBnbHVlOjpnbHVlKCJleGNlbC9lb3Npbm9waGlsX2NsaW5pY2FsX3RhYmxlLXZ7dmVyfS54bHN4IikpCmVvX3NpZyA8LSBzbShleHRyYWN0X3NpZ25pZmljYW50X2dlbmVzKGVvX3RhYmxlcywgYWNjb3JkaW5nX3RvID0gImRlc2VxIikpCndyaXR0ZW4gPC0gd3JpdGVfeGxzeChkYXRhID0gZW9fc2lnW1siZGVzZXEiXV1bWyJ1cHMiXV1bWzFdXSwKICAgICAgICAgICAgICAgICAgICAgIGV4Y2VsID0gZ2x1ZTo6Z2x1ZSgiZXhjZWwvZW9zaW5vcGhpbF9jbGluaWNhbF9zaWd1cC12e3Zlcn0ueGxzeCIpKQp3cml0dGVuIDwtIHdyaXRlX3hsc3goZGF0YSA9IGVvX3NpZ1tbImRlc2VxIl1dW1siZG93bnMiXV1bWzFdXSwKICAgICAgICAgICAgICAgICAgICAgIGV4Y2VsID0gZ2x1ZTo6Z2x1ZSgiZXhjZWwvZW9zaW5vcGhpbF9jbGluaWNhbF9zaWdkb3duLXZ7dmVyfS54bHN4IikpCgplb19wY3Rfc2lnIDwtIHNtKGV4dHJhY3Rfc2lnbmlmaWNhbnRfZ2VuZXMoZW9fdGFibGVzLCBuID0gMjAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGZjID0gTlVMTCwgcCA9IE5VTEwsIGFjY29yZGluZ190byA9ICJkZXNlcSIpKQp3cml0dGVuIDwtIHdyaXRlX3hsc3goZGF0YSA9IGVvX3BjdF9zaWdbWyJkZXNlcSJdXVtbInVwcyJdXVtbMV1dLAogICAgICAgICAgICAgICAgICAgICAgZXhjZWwgPSBnbHVlOjpnbHVlKCJleGNlbC9lb3Npbm9waGlsX2NsaW5pY2FsX3NpZ3VwX3BjdC12e3Zlcn0ueGxzeCIpKQp3cml0dGVuIDwtIHdyaXRlX3hsc3goZGF0YSA9IGVvX3BjdF9zaWdbWyJkZXNlcSJdXVtbImRvd25zIl1dW1sxXV0sCiAgICAgICAgICAgICAgICAgICAgICBleGNlbCA9IGdsdWU6OmdsdWUoImV4Y2VsL2Vvc2lub3BoaWxfY2xpbmljYWxfc2lnZG93bl9wY3Qtdnt2ZXJ9Lnhsc3giKSkKCmVvX2NwbSA8LSBzbShub3JtYWxpemVfZXhwdChlbywgY29udmVydCA9ICJjcG0iKSkKd3JpdHRlbiA8LSB3cml0ZV94bHN4KGRhdGEgPSBleHBycyhlb19jcG0pLAogICAgICAgICAgICAgICAgICAgICAgZXhjZWwgPSBnbHVlOjpnbHVlKCJleGNlbC9lb3Npbm9waGlsX2NwbV9iZWZvcmVfYmF0Y2gtdnt2ZXJ9Lnhsc3giKSkKZW9fYmNwbSA8LSBzbShub3JtYWxpemVfZXhwdChlbywgZmlsdGVyID0gVFJVRSwgYmF0Y2ggPSAic3Zhc2VxIiwgY29udmVydCA9ICJjcG0iKSkKd3JpdHRlbiA8LSB3cml0ZV94bHN4KGRhdGEgPSBleHBycyhlb19iY3BtKSwKICAgICAgICAgICAgICAgICAgICAgIGV4Y2VsID0gZ2x1ZTo6Z2x1ZSgiZXhjZWwvZW9zaW5vcGhpbF9jcG1fYWZ0ZXJfYmF0Y2gtdnt2ZXJ9Lnhsc3giKSkKYGBgCgojIyMjIFdpdGggc3ZhCgpgYGB7ciBkZV9lb19zdmEsIGZpZy5zaG93ID0gImhpZGUifQplb19kZV9zdmEgPC0gc20oYWxsX3BhaXJ3aXNlKGVvLCBtb2RlbF9iYXRjaCA9ICJzdmFzZXEiLCBmaWx0ZXIgPSBUUlVFKSkKZW9fdGFibGVzX3N2YSA8LSBzbShjb21iaW5lX2RlX3RhYmxlcygKICAgIGVvX2RlX3N2YSwga2VlcGVycyA9IGtlZXBlcnMsCiAgICBleGNlbCA9IGdsdWU6OmdsdWUoImV4Y2VsL2Vvc2lub3BoaWxfY2xpbmljYWxfYWxsX3RhYmxlc19zdmEtdnt2ZXJ9Lnhsc3giKSkpCmVvX3NpZ19zdmEgPC0gc20oZXh0cmFjdF9zaWduaWZpY2FudF9nZW5lcygKICAgIGVvX3RhYmxlc19zdmEsCiAgICBleGNlbCA9IGdsdWU6OmdsdWUoImV4Y2VsL2Vvc2lub3BoaWxfY2xpbmljYWxfc2lnX3RhYmxlc19zdmEtdnt2ZXJ9Lnhsc3giKSwKICAgIGFjY29yZGluZ190byA9ICJkZXNlcSIpKQpgYGAKCiMjIyMgRW9zaW5vcGhpbCBERSBwbG90cwoKYGBge3IgZW9fZGVfcGxvdHN9CiMjIERFU2VxMiBNQSBwbG90IG9mIGZhaWx1cmUgLyBjdXJlCmVvX3RhYmxlc1tbInBsb3RzIl1dW1siZmFpbF92c19jdXJlIl1dW1siZGVzZXFfbWFfcGxvdHMiXV0kcGxvdAoKIyMgREVTZXEyIFZvbGNhbm8gcGxvdCBvZiBmYWlsdXJlIC8gY3VyZQplb190YWJsZXNbWyJwbG90cyJdXVtbImZhaWxfdnNfY3VyZSJdXVtbImRlc2VxX3ZvbF9wbG90cyJdXSRwbG90CgojIyBERVNlcTIgTUEgcGxvdCBvZiBmYWlsdXJlIC8gY3VyZSB3aXRoIHN2YQplb190YWJsZXNfc3ZhW1sicGxvdHMiXV1bWyJmYWlsX3ZzX2N1cmUiXV1bWyJkZXNlcV9tYV9wbG90cyJdXSRwbG90CgojIyBERVNlcTIgVm9sY2FubyBwbG90IG9mIGZhaWx1cmUgLyBjdXJlIHdpdGggc3ZhCmVvX3RhYmxlc19zdmFbWyJwbG90cyJdXVtbImZhaWxfdnNfY3VyZSJdXVtbImRlc2VxX3ZvbF9wbG90cyJdXSRwbG90CmBgYAoKIyMjIyBFb3Npbm9waGlsIG9udG9sb2d5IHNlYXJjaAoKYGBge3IgZW9fZ3Byb2ZpbGVyfQp1cHMgPC0gZW9fc2lnW1siZGVzZXEiXV1bWyJ1cHMiXV1bWyJmYWlsX3ZzX2N1cmUiXV0KZG93bnMgPC0gZW9fc2lnW1siZGVzZXEiXV1bWyJkb3ducyJdXVtbImZhaWxfdnNfY3VyZSJdXQoKZW9fdXBfZ3AgPC0gc2ltcGxlX2dwcm9maWxlcihzaWdfZ2VuZXMgPSB1cHMpCmVvX3VwX2dwW1sicHZhbHVlX3Bsb3RzIl1dW1siYnBwX3Bsb3Rfb3ZlciJdXQplb191cF9ncFtbInB2YWx1ZV9wbG90cyJdXVtbIm1mcF9wbG90X292ZXIiXV0KZW9fdXBfZ3BbWyJwdmFsdWVfcGxvdHMiXV1bWyJyZWFjdG9tZV9wbG90X292ZXIiXV0KCmVvX2Rvd25fZ3AgPC0gc2ltcGxlX2dwcm9maWxlcihkb3ducykKZW9fZG93bl9ncFtbInB2YWx1ZV9wbG90cyJdXVtbImJwcF9wbG90X292ZXIiXV0KZW9fZG93bl9ncFtbInB2YWx1ZV9wbG90cyJdXVtbIm1mcF9wbG90X292ZXIiXV0KZW9fZG93bl9ncFtbInB2YWx1ZV9wbG90cyJdXVtbInJlYWN0b21lX3Bsb3Rfb3ZlciJdXQpgYGAKCiMjIyMgRW9zaW5vcGhpbCBNU2lnREIgcXVlcnkKCmBgYHtyIG1zaWdfZW9fZ29zZXEsIGZpZy5zaG93ID0gImhpZGUifQplb191cF9nb3NlcV9tc2lnIDwtIGdvc2VxX21zaWdkYihzaWdfZ2VuZXMgPSB1cHMsIHNpZ25hdHVyZXMgPSBicm9hZF9jNywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmF0dXJlX2NhdGVnb3J5ID0gImM3IiwgbGVuZ3RoX2RiID0gaHNfbGVuZ3RoKQoKZW9fZG93bl9nb3NlcV9tc2lnIDwtIGdvc2VxX21zaWdkYihzaWdfZ2VuZXMgPSBkb3ducywgc2lnbmF0dXJlcyA9IGJyb2FkX2M3LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25hdHVyZV9jYXRlZ29yeSA9ICJjNyIsIGxlbmd0aF9kYiA9IGhzX2xlbmd0aCkKYGBgCgojIyMjIFBsb3Qgb2Ygc2ltaWxhciBleHBlcmltZW50cwoKYGBge3IgbXNpZ19wbG90c19lb30KIyMgRW9zaW5vcGhpbCBnZW5lcyB3aXRoIGluY3JlYXNlZCBleHByZXNzaW9uIGluIHRoZSBmYWlsZWQgc2FtcGxlcwojIyBzaGFyZSBnZW5lcyB3aXRoIHRoZSBmb2xsb3dpbmcgZXhwZXJpbWVudHMKZW9fdXBfZ29zZXFfbXNpZ1tbInB2YWx1ZV9wbG90cyJdXVtbIm1mcF9wbG90X292ZXIiXV0KCiMjIEVvc2lub3BoaWwgZ2VuZXMgd2l0aCBpbmNyZWFzZWQgZXhwcmVzc2lvbiBpbiB0aGUgY3VyZWQgc2FtcGxlcwojIyBzaGFyZSBnZW5lcyB3aXRoIHRoZSBmb2xsb3dpbmcgZXhwZXJpbWVudHMKZW9fZG93bl9nb3NlcV9tc2lnW1sicHZhbHVlX3Bsb3RzIl1dW1sibWZwX3Bsb3Rfb3ZlciJdXQpgYGAKCiMjIEJpb3BzaWVzCgojIyMgRXZhbHVhdGUgQmlvcHN5IHNhbXBsZXMKCmBgYHtyIGJpb3BzaWVzfQpiaW9wIDwtIHN1YnNldF9leHB0KGhzX3ZhbGlkLCBzdWJzZXQgPSAidHlwZW9mY2VsbHM9PSdiaW9wc3knIikgJT4lCiAgc2V0X2V4cHRfY29uZGl0aW9ucyhmYWN0ID0gImNsaW5pY2Fsb3V0Y29tZSIpICU+JQogIHNldF9leHB0X2JhdGNoZXMoZmFjdCA9ICJkb25vciIpICU+JQogIHNldF9leHB0X2NvbG9ycyhjb2xvcnMgPSBjaG9zZW5fY29sb3JzKQoKc2F2ZV9yZXN1bHQgPC0gc2F2ZShiaW9wLCBmaWxlID0gInJkYS9iaW9wc3lfZXhwdC5yZGEiKQpiaW9wX25vcm0gPC0gbm9ybWFsaXplX2V4cHQoYmlvcCwgZmlsdGVyID0gVFJVRSwgY29udmVydCA9ICJjcG0iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtID0gImxvZzIiLCBub3JtID0gInF1YW50IikKcGx0IDwtIHBsb3RfcGNhKGJpb3Bfbm9ybSwgcGxvdF9sYWJlbHMgPSBGQUxTRSkkcGxvdApwcChmaWxlID0gZ2x1ZSgiaW1hZ2VzL2Jpb3BfcGNhX25vcm1hbGl6ZWQtdnt2ZXJ9LnBkZiIpLCBpbWFnZSA9IHBsdCkKCmJpb3BfbmIgPC0gc20obm9ybWFsaXplX2V4cHQoYmlvcCwgY29udmVydCA9ICJjcG0iLCBmaWx0ZXIgPSBUUlVFLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybSA9ICJsb2cyIiwgYmF0Y2ggPSAic3Zhc2VxIikpCnBsdCA8LSBwbG90X3BjYShiaW9wX25iLCBwbG90X2xhYmVscyA9IEZBTFNFKSRwbG90CnBwKGZpbGUgPSBnbHVlKCJpbWFnZXMvYmlvcF9wY2Ffbm9ybWFsaXplZF9zdmFzZXEtdnt2ZXJ9LnBkZiIpLCBpbWFnZSA9IHBsdCkKYGBgCgojIyMgREUgb2YgQmlvcHN5IHNhbXBsZXMKCiMjIyMgV2l0aG91dCBzdmEKCmBgYHtyIGRlX2Jpb3BzeSwgZmlnLnNob3cgPSAiaGlkZSJ9CmJpb3BfZGUgPC0gc20oYWxsX3BhaXJ3aXNlKGJpb3AsIG1vZGVsX2JhdGNoID0gRkFMU0UsIGZpbHRlciA9IFRSVUUpKQpiaW9wX3RhYmxlcyA8LSBjb21iaW5lX2RlX3RhYmxlcyhiaW9wX2RlLCBrZWVwZXJzID0ga2VlcGVycywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjZWwgPSBnbHVlOjpnbHVlKCJleGNlbC9iaW9wc3lfY2xpbmljYWxfYWxsX3RhYmxlcy12e3Zlcn0ueGxzeCIpKQp3cml0dGVuIDwtIHdyaXRlX3hsc3goZGF0YSA9IGJpb3BfdGFibGVzW1siZGF0YSJdXVtbMV1dLAogICAgICAgICAgICAgICAgICAgICAgZXhjZWwgPSBnbHVlOjpnbHVlKCJleGNlbC9iaW9wc3lfY2xpbmljYWxfdGFibGUtdnt2ZXJ9Lnhsc3giKSkKYmlvcF9zaWcgPC0gZXh0cmFjdF9zaWduaWZpY2FudF9nZW5lcyhiaW9wX3RhYmxlcywgYWNjb3JkaW5nX3RvID0gImRlc2VxIikKIyN3cml0dGVuIDwtIHdyaXRlX3hsc3goZGF0YSA9IGJpb3Bfc2lnW1siZGVzZXEiXV1bWyJ1cHMiXV1bWzFdXSwKIyMgICAgICAgICAgICAgICAgICAgICAgZXhjZWwgPSBnbHVlOjpnbHVlKCJleGNlbC9iaW9wc3lfY2xpbmljYWxfc2lndXAtdnt2ZXJ9Lnhsc3giKSkKd3JpdHRlbiA8LSB3cml0ZV94bHN4KGRhdGEgPSBiaW9wX3NpZ1tbImRlc2VxIl1dW1siZG93bnMiXV1bWzFdXSwKICAgICAgICAgICAgICAgICAgICAgIGV4Y2VsID0gZ2x1ZTo6Z2x1ZSgiZXhjZWwvYmlvcHN5X2NsaW5pY2FsX3NpZ2Rvd24tdnt2ZXJ9Lnhsc3giKSkKYmlvcF9wY3Rfc2lnIDwtIGV4dHJhY3Rfc2lnbmlmaWNhbnRfZ2VuZXMoYmlvcF90YWJsZXMsIG4gPSAyMDAsIGxmYyA9IE5VTEwsIHAgPSBOVUxMLCBhY2NvcmRpbmdfdG8gPSAiZGVzZXEiKQp3cml0dGVuIDwtIHdyaXRlX3hsc3goZGF0YSA9IGJpb3BfcGN0X3NpZ1tbImRlc2VxIl1dW1sidXBzIl1dW1sxXV0sCiAgICAgICAgICAgICAgICAgICAgICBleGNlbCA9IGdsdWU6OmdsdWUoImV4Y2VsL2Jpb3BzeV9jbGluaWNhbF9zaWd1cF9wY3Qtdnt2ZXJ9Lnhsc3giKSkKd3JpdHRlbiA8LSB3cml0ZV94bHN4KGRhdGEgPSBiaW9wX3BjdF9zaWdbWyJkZXNlcSJdXVtbImRvd25zIl1dW1sxXV0sCiAgICAgICAgICAgICAgICAgICAgICBleGNlbCA9IGdsdWU6OmdsdWUoImV4Y2VsL2Jpb3BzeV9jbGluaWNhbF9zaWdkb3duX3BjdC12e3Zlcn0ueGxzeCIpKQoKYmlvcF9jcG0gPC0gc20obm9ybWFsaXplX2V4cHQoYmlvcCwgY29udmVydCA9ICJjcG0iKSkKd3JpdHRlbiA8LSB3cml0ZV94bHN4KGRhdGEgPSBleHBycyhiaW9wX2NwbSksCiAgICAgICAgICAgICAgICAgICAgICBleGNlbCA9IGdsdWU6OmdsdWUoImV4Y2VsL2Jpb3BzeV9jcG1fYmVmb3JlX2JhdGNoLXZ7dmVyfS54bHN4IikpCmJpb3BfYmNwbSA8LSBzbShub3JtYWxpemVfZXhwdChiaW9wLCBmaWx0ZXIgPSBUUlVFLCBiYXRjaCA9ICJzdmFzZXEiLCBjb252ZXJ0ID0gImNwbSIpKQp3cml0dGVuIDwtIHdyaXRlX3hsc3goZGF0YSA9IGV4cHJzKGJpb3BfYmNwbSksCiAgICAgICAgICAgICAgICAgICAgICBleGNlbCA9IGdsdWU6OmdsdWUoImV4Y2VsL2Jpb3BzeV9jcG1fYWZ0ZXJfYmF0Y2gtdnt2ZXJ9Lnhsc3giKSkKYGBgCgojIyMjIHdpdGggc3ZhCgpgYGB7ciBkZV9iaW9wc3lfc3ZhLCBmaWcuc2hvdyA9ICJoaWRlIn0KYmlvcF9kZV9zdmEgPC0gc20oYWxsX3BhaXJ3aXNlKGJpb3AsIG1vZGVsX2JhdGNoID0gInN2YXNlcSIsIGZpbHRlciA9IFRSVUUpKQpiaW9wX3RhYmxlc19zdmEgPC0gc20oY29tYmluZV9kZV90YWJsZXMoCiAgICBiaW9wX2RlX3N2YSwga2VlcGVycyA9IGtlZXBlcnMsCiAgICBleGNlbCA9IGdsdWU6OmdsdWUoImV4Y2VsL2Jpb3BzeV9jbGluaWNhbF9hbGxfdGFibGVzX3N2YS12e3Zlcn0ueGxzeCIpKSkKYmlvcF9zaWdfc3ZhIDwtIHNtKGV4dHJhY3Rfc2lnbmlmaWNhbnRfZ2VuZXMoCiAgICBiaW9wX3RhYmxlc19zdmEsCiAgICBleGNlbCA9IGdsdWU6OmdsdWUoImV4Y2VsL2Jpb3BzeV9jbGluaWNhbF9zaWdfdGFibGVzX3N2YS12e3Zlcn0ueGxzeCIpLAogICAgYWNjb3JkaW5nX3RvID0gImRlc2VxIikpCmBgYAoKIyMjIyBCaW9wc3kgREUgcGxvdHMKCmBgYHtyIGJpb3BfZGVfcGxvdHN9CiMjIERFU2VxMiBNQSBwbG90IG9mIGZhaWx1cmUgLyBjdXJlCmJpb3BfdGFibGVzW1sicGxvdHMiXV1bWyJmYWlsX3ZzX2N1cmUiXV1bWyJkZXNlcV9tYV9wbG90cyJdXSRwbG90CgojIyBERVNlcTIgVm9sY2FubyBwbG90IG9mIGZhaWx1cmUgLyBjdXJlCmJpb3BfdGFibGVzW1sicGxvdHMiXV1bWyJmYWlsX3ZzX2N1cmUiXV1bWyJkZXNlcV92b2xfcGxvdHMiXV0kcGxvdAoKIyMgREVTZXEyIE1BIHBsb3Qgb2YgZmFpbHVyZSAvIGN1cmUKYmlvcF90YWJsZXNfc3ZhW1sicGxvdHMiXV1bWyJmYWlsX3ZzX2N1cmUiXV1bWyJkZXNlcV9tYV9wbG90cyJdXSRwbG90CgojIyBERVNlcTIgVm9sY2FubyBwbG90IG9mIGZhaWx1cmUgLyBjdXJlCmJpb3BfdGFibGVzX3N2YVtbInBsb3RzIl1dW1siZmFpbF92c19jdXJlIl1dW1siZGVzZXFfdm9sX3Bsb3RzIl1dJHBsb3QKYGBgCgojIExvb2sgZm9yIHNoYXJlZCBnZW5lcyBhbW9uZyBNb25vY3l0ZXMvTmV1dHJvcGhpbHMvRW9zaW5vcGhpbHMKCldlIGhhdmUgdGhyZWUgdmFyaWFibGVzIGNvbnRhaW5pbmcgdGhlICdzaWduaWZpY2FudCcgREUgZ2VuZXMgZm9yIHRoZQp0aHJlZSBjZWxsIHR5cGVzLiAgRm9yIHRoaXMgSSBhbSBjaG9vc2luZyAoZm9yIHRoZSBtb21lbnQpIHRvIHVzZSB0aGUKc3ZhIGRhdGEuCgpgYGB7ciBzaGFyZWRfYnlfdHlwZX0KIyMgbW9ub19zaWdfc3ZhLCBuZXV0X3NpZ19zdmEsIGVvX3NpZ19zdmEKc2lnX3ZlY3RvcnMgPC0gbGlzdCgKICAgICJtb25vY3l0ZXMiID0gYyhyb3duYW1lcyhtb25vX3NpZ19zdmFbWyJkZXNlcSJdXVtbInVwcyJdXVtbImZhaWxfdnNfY3VyZSJdXSksCiAgICAgICAgICAgICAgICAgICAgcm93bmFtZXMobW9ub19zaWdfc3ZhW1siZGVzZXEiXV1bWyJkb3ducyJdXVtbImZhaWxfdnNfY3VyZSJdXSkpLAogICAgIm5ldXRyb3BoaWxzIiA9IGMocm93bmFtZXMobmV1dF9zaWdfc3ZhW1siZGVzZXEiXV1bWyJ1cHMiXV1bWyJmYWlsX3ZzX2N1cmUiXV0pLAogICAgICAgICAgICAgICAgICAgICAgcm93bmFtZXMobmV1dF9zaWdfc3ZhW1siZGVzZXEiXV1bWyJkb3ducyJdXVtbImZhaWxfdnNfY3VyZSJdXSkpLAogICAgImVvc2lub3BoaWxzIiA9ICBjKHJvd25hbWVzKGVvX3NpZ19zdmFbWyJkZXNlcSJdXVtbInVwcyJdXVtbImZhaWxfdnNfY3VyZSJdXSksCiAgICAgICAgICAgICAgICAgICAgICAgcm93bmFtZXMoZW9fc2lnX3N2YVtbImRlc2VxIl1dW1siZG93bnMiXV1bWyJmYWlsX3ZzX2N1cmUiXV0pKSkKCnNoYXJlZF92ZWN0b3IgPC0gVmVubmVyYWJsZTo6VmVubihTZXRzID0gc2lnX3ZlY3RvcnMpClZlbm5lcmFibGU6OnBsb3Qoc2hhcmVkX3ZlY3RvciwgZG9XZWlnaHRzID0gRkFMU0UpCgpzaGFyZWRfaWRzIDwtIHNoYXJlZF92ZWN0b3JASW50ZXJzZWN0aW9uU2V0c1tbIjExMSJdXQpzaGFyZWRfZXhwdCA8LSBleGNsdWRlX2dlbmVzX2V4cHQoaHNfZXhwdCwgaWRzID0gc2hhcmVkX2lkcywgbWV0aG9kID0gImtlZXAiKQpzaGFyZWRfd3JpdHRlbiA8LSBzbSh3cml0ZV9leHB0KHNoYXJlZF9leHB0LCBleGNlbD0iZXhjZWwvZ2VuZXNfc2hhcmVkX2Fjcm9zc19jZWxsdHlwZXMueGxzeCIpKQpgYGAKCiMgTW9ub2N5dGVzIGJ5IHZpc2l0CgogMS4gQ2FuIHlvdSBwbGVhc2Ugc2hhcmUgd2l0aCB1cyBhIFBDQSAoU1ZBIGFuZCBub24tU1ZBKSBvZiB0aGUKICAgIG1vbm9jeXRlcyBvZiB0aGUgVE1SQzMgcHJvamVjdCwgYnV0IGxhYmVsaW5nIHRoZW0gYmFzZWQgb24gdGhlIHZpc2l0CiAgICAoVjEsIFYyLCBWMyk/CiAyLiBDYW4geW91IHBsZWFzZSBzaGFyZSBERSBsaXN0cyBvZiBWMSB2cyBWMiwgVjEgdnMgVjMsIFYxIHZzLiBWMitWMwogICAgYW5kIFYyIHZzIFYzPwoKYGBge3IgbW9ub2N5dGVzX2J5X3Zpc2l0fQp2aXNpdF9jb2xvcnMgPC0gY2hvc2VuX2NvbG9ycyA8LSBjKCIjRDk1RjAyIiwgIiM3NTcwQjMiLCAiIzFCOUU3NyIpCm5hbWVzKHZpc2l0X2NvbG9ycykgPC0gYygxLCAyLCAzKQptb25vX3Zpc2l0IDwtIHN1YnNldF9leHB0KGhzX3ZhbGlkLCBzdWJzZXQgPSAidHlwZW9mY2VsbHM9PSdtb25vY3l0ZXMnIikgJT4lCiAgc2V0X2V4cHRfY29uZGl0aW9ucyhmYWN0ID0gInZpc2l0bnVtYmVyIikgJT4lCiAgc2V0X2V4cHRfYmF0Y2hlcyhmYWN0ID0gImNsaW5pY2Fsb3V0Y29tZSIpICU+JQogIHNldF9leHB0X2NvbG9ycyhjb2xvcnMgPSBjaG9zZW5fY29sb3JzKQoKbW9ub192aXNpdF9ub3JtIDwtIG5vcm1hbGl6ZV9leHB0KG1vbm9fdmlzaXQsIGZpbHRlciA9IFRSVUUsIG5vcm0gPSAicXVhbnQiLCBjb252ZXJ0ID0gImNwbSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0gPSAibG9nMiIpCm1vbm9fdmlzaXRfcGNhIDwtIHBsb3RfcGNhKG1vbm9fdmlzaXRfbm9ybSkKcHAoZmlsZSA9ICJpbWFnZXMvbW9ub2N5dGVfYnlfdmlzaXQucG5nIiwgaW1hZ2UgPSBtb25vX3Zpc2l0X3BjYSRwbG90KQoKbW9ub192aXNpdF9uYiA8LSBub3JtYWxpemVfZXhwdChtb25vX3Zpc2l0LCBmaWx0ZXIgPSBUUlVFLCBjb252ZXJ0ID0gImNwbSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmF0Y2ggPSAic3Zhc2VxIiwgdHJhbnNmb3JtID0gImxvZzIiKQptb25vX3Zpc2l0X25iX3BjYSA8LSBwbG90X3BjYShtb25vX3Zpc2l0X25iKQpwcChmaWxlID0gImltYWdlcy9tb25vY3l0ZV9ieV92aXNpdF9uYi5wbmciLCBpbWFnZSA9IG1vbm9fdmlzaXRfbmJfcGNhJHBsb3QpCgp0YWJsZShwRGF0YShtb25vX3Zpc2l0X25vcm0pJGJhdGNoKQpgYGAKCmBgYHtyIG1vbm9fdmlzaXRfZGUsIGZpZy5zaG93ID0gImhpZGUifQprZWVwZXJzIDwtIGxpc3QoCiAgICAic2Vjb25kX3ZzX2ZpcnN0IiA9IGMoImMyIiwgImMxIiksCiAgICAidGhpcmRfdnNfc2Vjb25kIiA9IGMoImMzIiwgImMyIiksCiAgICAidGhpcmRfdnNfZmlyc3QiID0gYygiYzMiLCAiYzEiKSkKbW9ub192aXNpdF9kZSA8LSBhbGxfcGFpcndpc2UobW9ub192aXNpdCwgbW9kZWxfYmF0Y2ggPSAic3Zhc2VxIiwgZmlsdGVyID0gVFJVRSkKCm1vbm9fdmlzaXRfdGFibGVzIDwtIGNvbWJpbmVfZGVfdGFibGVzKAogICAgbW9ub192aXNpdF9kZSwKICAgIGtlZXBlcnMgPSBrZWVwZXJzLAogICAgZXhjZWwgPSBnbHVlOjpnbHVlKCJleGNlbC9tb25vX3Zpc2l0X3RhYmxlcy12e3Zlcn0ueGxzeCIpKQpgYGAKCmBgYHtyIHYxX3ZzX2FsbH0KbmV3X2ZhY3RvciA8LSBwRGF0YShtb25vX3Zpc2l0KVtbInZpc2l0bnVtYmVyIl1dCm5vdF9vbmVfaWR4IDwtIG5ld19mYWN0b3IgIT0gMQpuZXdfZmFjdG9yW25vdF9vbmVfaWR4XSA8LSAibm90XzEiCm1vbm9fb25lX3ZzIDwtIHNldF9leHB0X2NvbmRpdGlvbnMobW9ub192aXNpdCwgbmV3X2ZhY3RvcikKCm1vbm9fb25lX3ZzX2RlIDwtIGFsbF9wYWlyd2lzZShtb25vX29uZV92cywgbW9kZWxfYmF0Y2ggPSAic3Zhc2VxIiwgZmlsdGVyID0gVFJVRSkKCm1vbm9fb25lX3ZzX3RhYmxlcyA8LSBjb21iaW5lX2RlX3RhYmxlcygKICAgIG1vbm9fb25lX3ZzX2RlLAogICAgZXhjZWwgPSBnbHVlOjpnbHVlKCJleGNlbC9tb25vX29uZV92c190YWJsZXMtdnt2ZXJ9Lnhsc3giKSkKYGBgCgojIFRlc3QgVFNQCgpJbiB3cml0aW5nIHRoZSBmb2xsb3dpbmcsIEkgcXVpY2tseSByZWFsaXplZCB0aGF0IHRzcGFpciB3YXMgbm90Cmpva2luZyB3aGVuIGl0IHNhaWQgaXQgaXMgaW50ZW5kZWQgZm9yIHNtYWxsIG51bWJlcnMgb2YgZ2VuZXMuICBGb3IgYQpmdWxsIGV4cHJlc3Npb25zZXQgb2YgaHVtYW4gZGF0YSBpdCBpcyBzdHJ1Z2dsaW5nLiAgSSBsaWtlIHRoZSBpZGVhLAppdCBtYXkgcHJvdmUgd29ydGggd2hpbGUgdG8gc3BlbmQgc29tZSB0aW1lIG9wdGltaXppbmcgdGhlIHBhY2thZ2Ugc28KdGhhdCBpdCBpcyBtb3JlIHVzYWJsZS4KCmBgYHtyIHRzcCwgZXZhbCA9IEZBTFNFfQpleHB0IDwtIGhzX2NsaW5pY2FsX25vYmlvcAoKc2ltcGxlX3RzcCA8LSBmdW5jdGlvbihleHB0LCBjb2x1bW4gPSAiY29uZGl0aW9uIikgewogIGZhY3RzIDwtIGxldmVscyhhcy5mYWN0b3IocERhdGEoZXhwdClbW2NvbHVtbl1dKSkKICByZXRsaXN0IDwtIGxpc3QoKQogIGlmIChsZW5ndGgoZmFjdHMpIDwgMikgewogICAgc3RvcCgiVGhpcyByZXF1aXJlcyBmYWN0b3JzIHdpdGggYXQgbGVhc3QgMiBsZXZlbHMuIikKICB9IGVsc2UgaWYgKGxlbmd0aChmYWN0cykgPT0gMikgewogICAgcmV0bGlzdCA8LSBzaW1wbGVfdHNwX3BhaXIoZXhwdCwgY29sdW1uID0gY29sdW1uKQogIH0gZWxzZSB7CiAgICBmb3IgKGZpcnN0IGluIDE6KGxlbmd0aChmYWN0cykgLSAxKSkgewogICAgICBmb3IgKHNlY29uZCBpbiAyOihsZW5ndGgoZmFjdHMpKSkgewogICAgICAgIGlmIChmaXJzdCA8IHNlY29uZCkgewogICAgICAgICAgbmFtZSA8LSBnbHVlOjpnbHVlKCJ7ZmFjdHNbZmlyc3RdfV92c197ZmFjdHNbc2Vjb25kXX0iKQogICAgICAgICAgbWVzc2FnZSgiU3RhcnRpbmcgIiwgbmFtZSwgIi4iKQogICAgICAgICAgc3Vic3RyaW5nIDwtIGdsdWU6OmdsdWUoIntjb2x1bW59PT0ne2ZhY3RzW2ZpcnN0XX0nfHtjb2x1bW59PT0ne2ZhY3RzW3NlY29uZF19JyIpCiAgICAgICAgICBzdWJieSA8LSBzdWJzZXRfZXhwdChleHB0LCBzdWJzZXQ9YXMuY2hhcmFjdGVyKHN1YnN0cmluZykpCiAgICAgICAgICByZXRsaXN0W1tuYW1lXV0gPC0gc2ltcGxlX3RzcF9wYWlyKHN1YmJ5LCBjb2x1bW4gPSBjb2x1bW4pCiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfQp9CgpzaW1wbGVfdHNwX3BhaXIgPC0gZnVuY3Rpb24oc3ViYnksIGNvbHVtbiA9ICJjb25kaXRpb24iLCByZXBldGl0aW9ucyA9IDUwKSB7CiAgdHNwX2lucHV0IDwtIHN1YmJ5W1siZXhwcmVzc2lvbnNldCJdXQogIHRzcF9vdXRwdXQgPC0gdHNwY2FsYyh0c3BfaW5wdXQsIGNvbHVtbikKICB0c3Bfc2NvcmVzIDwtIHRzcHNpZyh0c3BfaW5wdXQsIGNvbHVtbiwgQiA9IHJlcGV0aXRpb25zKQp9Cgp0c3AxIDwtIHRzcGNhbGModHNwX2lucHV0LCAiY29uZGl0aW9uIikKCmBgYAoKYGBge3Igc2F2ZW1lfQppZiAoIWlzVFJVRShnZXQwKCJza2lwX2xvYWQiKSkpIHsKICBwYW5kZXI6OnBhbmRlcihzZXNzaW9uSW5mbygpKQogIG1lc3NhZ2UocGFzdGUwKCJUaGlzIGlzIGhwZ2x0b29scyBjb21taXQ6ICIsIGdldF9naXRfY29tbWl0KCkpKQogIG1lc3NhZ2UocGFzdGUwKCJTYXZpbmcgdG8gIiwgc2F2ZWZpbGUpKQogIHRtcCA8LSBzbShzYXZlbWUoZmlsZW5hbWUgPSBzYXZlZmlsZSkpCn0KYGBgCgpgYGB7ciBsb2FkbWVfYWZ0ZXIsIGV2YWwgPSBGQUxTRX0KdG1wIDwtIGxvYWRtZShmaWxlbmFtZSA9IHNhdmVmaWxlKQpgYGAK