1 Testing seurat

## Warning: Feature names cannot have underscores ('_'), replacing with dashes
## ('-')
## Warning: Feature names cannot have underscores ('_'), replacing with dashes
## ('-')
## Warning: Feature names cannot have underscores ('_'), replacing with dashes
## ('-')
## Warning: Feature names cannot have underscores ('_'), replacing with dashes
## ('-')
## Warning in CheckDuplicateCellNames(object.list = objects): Some cell names are
## duplicated across objects provided. Renaming to enforce unique cell names.
## Warning in CheckDuplicateCellNames(object.list = objects): Some cell names are
## duplicated across objects provided. Renaming to enforce unique cell names.

## Centering and scaling data matrix
## PC_ 1 
## Positive:  PLIN2, SGK1, DAB2, GLRX, RAP2B, MBP, ZFYVE16, ZFP36L2, SQSTM1, ZFP36L1 
##     ZMIZ1, BRI3, KIAA0930, MAP3K2, HMOX1, CALM2, EVI2B, JAKMIP2, NCEH1, CD84 
##     CYP1B1, NOP10, FABP5, HS3ST2, ARHGAP18, CNBP, DDI2, H2AFY, CORO1C, RAB11FIP1 
## Negative:  IL1B, ISG15, CCL4, EREG, SOD2, CCL3, PTGS2, IFIT3, GBP1, TNFAIP6 
##     ISG20, IL8, MT2A, MX1, TNIP3, CCL20, SERPINB9, IL1RN, BTG1, IER3 
##     INHBA, NAMPT, IL7R, TNFAIP3, MARCKS, SAMD9, SAMD9L, IFI44, ZC3HAV1, DDX58 
## PC_ 2 
## Positive:  FTL, TMSB10, RPS8, LGALS1, CSTB, LGALS3, DBI, RPL26, CD63, SRGN 
##     SH3BGRL3, TXN, PRDX1, NACA, S100A9, CTSD, CTSZ, TSPO, LIPA, GM2A 
##     BRI3, ACP5, DYNLL1, MARCKS, CYP1B1, IGSF6, NCF2, CALM2, TXNRD1, C5AR1 
## Negative:  MCOLN2, KCNQ1OT1, RP11-561O23.5, MIR29A, BX255923.3, RP11-214O1.3, LL22NC03-2H8.5, AKAP12, ATP8B4, PAPLN 
##     AC005477.1, N4BP2L1, HSPA6, ITGA1, FAM65C, RAVER2, AIRN, NABP1, RBPMS, MS4A1 
##     TMC5, MIR503HG, GATA2, STX19, KB-1507C5.4, EXTL3-AS1, RP11-30L15.6, COBL, RP11-665N17.4, LINC01125 
## PC_ 3 
## Positive:  CREM, THBS1, ATP1B3, THAP2, CD300E, BNIP3L, G0S2, ATP1B1, DUSP4, SAMSN1 
##     INHBA, VEGFA, HES4, TIMP1, MMP19, GK, ELL2, OLR1, TFPI, CXCR4 
##     LYPD3, CHMP1B, CSRP2, SATB1, DUSP2, PLAUR, STK4, ID2, TFRC, TMEM2 
## Negative:  CCL2, NBN, TNF, BHLHE41, NCF2, SNX10, RDX, CCL8, NCF1, SLAMF7 
##     SGTB, DDX21, P2RX7, PLEK, CXCL10, KLF6, AK4, IL8, CCL4, CCL3 
##     IRF8, ACSL1, CDC42EP3, CSF1, TBC1D9, TNFAIP2, PSTPIP2, IL1A, RIPK2, FAM129A 
## PC_ 4 
## Positive:  CD52, FBP1, CCL20, CHI3L1, CD63, TSPO, RP11-20G13.3, IGSF6, APOC1, CIR1 
##     PRDX1, TXN, EIF1B, DBI, ACAT2, OLR1, CLEC4E, HCST, G0S2, TMSB10 
##     IL23A, CSTB, RPL26, TIMP1, CYCS, NACA, DYNLL1, LGALS2, PHLDA2, SELK 
## Negative:  RNASE1, FUCA1, SEPP1, STAB1, CXCL10, KCTD12, LACC1, IRG1, TGFBI, MPEG1 
##     CTSZ, CXCL11, FPR3, RIN2, MS4A6A, MMP9, FCN1, ARL4C, CD163, MAFB 
##     LMNA, GBP4, RSAD2, FGL2, CD14, RGL1, CTSD, LHFPL2, SLCO2B1, CTSC 
## PC_ 5 
## Positive:  CXCL3, CXCL2, SERPINB2, CXCL1, IL1A, CCL3L3, DUSP6, CCL3, IL8, CCL20 
##     PHLDA1, INHBA, IER3, MAFB, CSF3, CCL2, PTGS2, MLTK, IL1R1, CXCL5 
##     CCL4, FCN1, PLAUR, CTSD, PNP, GJB2, HBEGF, IL10, CCL4L1, F3 
## Negative:  TNFSF13B, TNFSF10, CXCL10, IFIT2, CCR7, IDO1, CXCL11, GBP4, SAMD9L, HERC5 
##     NUB1, NT5C3A, WARS, A2M, IFIT1, RSAD2, RABGAP1L, LIPA, ATF3, RP11-20G13.3 
##     TNFAIP2, CD38, APOC1, CIR1, TCF4, IL27, GBP5, SAT1, REL, GBP1
## Computing nearest neighbor graph
## Computing SNN
## Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck
## 
## Number of nodes: 17306
## Number of edges: 530664
## 
## Running Louvain algorithm...
## Maximum modularity in 10 random starts: 0.8296
## Number of communities: 10
## Elapsed time: 3 seconds
## Warning: The default method for RunUMAP has changed from calling Python UMAP via reticulate to the R-native UWOT using the cosine metric
## To use Python UMAP via reticulate, set umap.method to 'umap-learn' and metric to 'correlation'
## This message will be shown once per session
## 21:28:26 UMAP embedding parameters a = 0.9922 b = 1.112
## 21:28:27 Read 17306 rows and found 20 numeric columns
## 21:28:27 Using Annoy for neighbor search, n_neighbors = 30
## 21:28:27 Building Annoy index with metric = cosine, n_trees = 50
## 0%   10   20   30   40   50   60   70   80   90   100%
## [----|----|----|----|----|----|----|----|----|----|
## **************************************************|
## 21:28:30 Writing NN index file to temp file /tmp/RtmpqaZ083/file5f1363c1e92f1
## 21:28:30 Searching Annoy index using 1 thread, search_k = 3000
## 21:28:36 Annoy recall = 100%
## 21:28:37 Commencing smooth kNN distance calibration using 1 thread
## 21:28:39 Initializing from normalized Laplacian + noise
## 21:28:39 Commencing optimization for 200 epochs, with 759148 positive edges
## 21:28:49 Optimization finished

## Warning: Using `as.character()` on a quosure is deprecated as of rlang 0.3.0.
## Please use `as_label()` or `as_name()` instead.
## This warning is displayed once per session.

## When using repel, set xnudge and ynudge to 0 for optimal results
## Warning: Transformation introduced infinite values in continuous x-axis

## Centering and scaling data matrix
## PC_ 1 
## Positive:  PLIN2, SGK1, GLRX, DAB2, CYP1B1, BRI3, ZFYVE16, MBP, SQSTM1, FTL 
##     RAP2B, ZFP36L2, CALM2, ZFP36L1, KIAA0930, ZMIZ1, MAP3K2, NOP10, CSTB, HMOX1 
##     CD84, JAKMIP2, FABP5, EVI2B, NCEH1, FBP1, CNBP, H2AFY, ARHGAP18, DDI2 
## Negative:  ISG15, IL1B, CCL4, EREG, SOD2, IFIT3, CCL3, PARP14, PTGS2, GBP1 
##     ISG20, TNFAIP6, MARCKS, IL8, MT2A, MX1, TNIP3, BTG1, SERPINB9, IER3 
##     SRGN, IL1RN, CCL20, XAF1, CD44, C15orf48, NAMPT, WTAP, SAMD9L, TNFAIP3 
## PC_ 2 
## Positive:  CREM, THBS1, ATP1B3, THAP2, CD300E, BNIP3L, G0S2, ATP1B1, SAMSN1, DUSP4 
##     FTL, VEGFA, INHBA, TIMP1, HES4, GK, OLR1, ELL2, MMP19, TFPI 
##     PLAUR, PRDX1, LYPD3, SATB1, STK4, ID2, CHMP1B, DUSP2, CSRP2, CXCR4 
## Negative:  CCL2, NCF2, NBN, SNX10, RDX, BHLHE41, TNF, NCF1, CYP1B1, SGTB 
##     SLAMF7, CCL8, PLEK, DDX21, P2RX7, KLF6, ACSL1, IL8, TNFAIP2, AK4 
##     CDC42EP3, CXCL10, CSF1, TBC1D9, IRF8, PSTPIP2, CCL4, CCL3, FAM129A, PTPRE 
## PC_ 3 
## Positive:  CXCL3, CCL20, CXCL1, CXCL2, TNFAIP6, SERPINB2, TIMP1, FPR1, IL1B, IL8 
##     S100A8, C15orf48, HCST, CCL7, IL1A, MT1X, CCL4, RETN, CCL3, ALOX5AP 
##     CLEC4E, FPR2, CSF3, LIPN, CAMP, PHLDA2, C19orf59, GAPT, TNFRSF4, MT1F 
## Negative:  RNASE1, CTSZ, LIPA, GM2A, FUCA1, CTSD, LGMN, FNIP2, NABP1, CCR7 
##     APOE, MACF1, LMNA, MMP9, A2M, SCD, ACP5, EMP1, MALAT1, SEPP1 
##     SAMD4A, RSAD2, ADAMDEC1, GBP4, WARS, IFIT2, APOL6, CXCL10, ANXA1, OGFRL1 
## PC_ 4 
## Positive:  RNASE1, FUCA1, FCN1, CTSD, LACC1, KCTD12, SEPP1, TGFBI, MAFB, MPEG1 
##     CCL2, STAB1, MS4A6A, IRG1, CD14, FPR3, TNFRSF1B, RIN2, ARL4C, FGL2 
##     CXCL10, CTSZ, RGL1, CD163, WIPF1, MMP9, LHFPL2, SLCO2B1, CXCL11, RASSF2 
## Negative:  CD63, FBP1, CD52, TXN, RP11-20G13.3, CSTB, CHI3L1, PRDX1, CIR1, APOC1 
##     PSD3, TXNRD1, LGALS3, SPP1, REL, IGSF6, APOE, GLRX, MT-ND6, TMEM14C 
##     ACAT2, BCL2A1, EIF1B, TMEM14B, FABP5, CHIT1, CDK5RAP2, ATP1B1, CES1, CCL20 
## PC_ 5 
## Positive:  TNFSF13B, TNFSF10, CXCL10, IFIT2, HERC5, MT2A, CXCL11, IDO1, GBP4, NT5C3A 
##     NCF1, GBP5, IFIT1, LILRB2, TCF4, S100A9, CD86, RABGAP1L, NUB1, LILRB1 
##     RSAD2, CD38, IFITM3, MNDA, RNF213, LYSMD2, APOL6, SAMD9L, FAM26F, WARS 
## Negative:  CXCL2, SERPINB2, CXCL3, IL1A, CTSL, DUSP6, CCL3L3, INHBA, TNF, CCL3 
##     CXCL1, PHLDA1, IL8, MLTK, EMP1, ASPH, CSF2, FNIP2, F3, INSIG1 
##     IL1R1, IL10, CCL20, NRIP3, MIR155HG, RGCC, IER3, TNFSF14, TSC22D1, CTSD

## Warning: Removed 21000 rows containing missing values (geom_point).

## Computing nearest neighbor graph
## Computing SNN
## Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck
## 
## Number of nodes: 12893
## Number of edges: 388733
## 
## Running Louvain algorithm...
## Maximum modularity in 10 random starts: 0.7907
## Number of communities: 9
## Elapsed time: 2 seconds
## 21:39:11 UMAP embedding parameters a = 0.9922 b = 1.112
## 21:39:11 Read 12893 rows and found 20 numeric columns
## 21:39:11 Using Annoy for neighbor search, n_neighbors = 30
## 21:39:11 Building Annoy index with metric = cosine, n_trees = 50
## 0%   10   20   30   40   50   60   70   80   90   100%
## [----|----|----|----|----|----|----|----|----|----|
## **************************************************|
## 21:39:13 Writing NN index file to temp file /tmp/RtmpqaZ083/file5f1364e54ecc0
## 21:39:13 Searching Annoy index using 1 thread, search_k = 3000
## 21:39:17 Annoy recall = 100%
## 21:39:18 Commencing smooth kNN distance calibration using 1 thread
## 21:39:20 Initializing from normalized Laplacian + noise
## 21:39:21 Commencing optimization for 200 epochs, with 544078 positive edges
## 21:39:28 Optimization finished

## Warning: Identity: 4 not present in group LPS. Skipping LPS
## Warning: Identity: 4 not present in group L+Ado. Skipping L+Ado
## Testing group L+PGE2: (4) vs (2_L+PGE2, 1_L+PGE2, 3_L+PGE2, 5_L+PGE2, 0_L+PGE2, 7_L+PGE2, 8_L+PGE2, 6_L+PGE2)
## Testing group Unstimulated: (4) vs (6, 8, 7, 1, 3, 0)
##         p_val avg_logFC pct.1 pct.2 p_val_adj
## CCL4        0     4.072 0.997 0.063         0
## CCL3        0     3.693 0.995 0.131         0
## IL1B        0     3.379 0.993 0.215         0
## TNFAIP6     0     2.866 0.920 0.034         0
## PTGS2       0     2.840 0.851 0.037         0
## CCL20       0     2.711 0.761 0.020         0
## ISG15       0     2.690 0.956 0.097         0
## IFIT3       0     2.565 0.963 0.052         0
## IL8         0     2.457 0.999 0.833         0
## CXCL1       0     2.450 0.531 0.020         0
## GBP1        0     2.377 0.916 0.063         0
## RSAD2       0     2.363 0.737 0.012         0
## EREG        0     2.334 0.968 0.237         0
## CCL5        0     2.333 0.712 0.015         0
## CXCL10      0     2.270 0.408 0.002         0
## TNIP3       0     2.228 0.868 0.043         0
## SOD2        0     2.212 0.999 0.822         0
## IL1A        0     2.192 0.702 0.026         0
## IFIT2       0     2.017 0.764 0.013         0
## SLAMF7      0     1.969 0.941 0.209         0
##         p_val avg_logFC pct.1 pct.2 p_val_adj
## ISG15       0     4.042 0.995 0.097         0
## CCL20       0     3.617 0.921 0.020         0
## CCL4        0     3.449 0.980 0.063         0
## EREG        0     3.413 0.997 0.237         0
## CCL3        0     3.300 0.968 0.131         0
## INHBA       0     3.213 0.866 0.008         0
## IL1B        0     3.208 0.984 0.215         0
## PTGS2       0     3.074 0.922 0.037         0
## G0S2        0     2.941 0.839 0.055         0
## THBS1       0     2.931 0.889 0.059         0
## TNFAIP6     0     2.856 0.931 0.034         0
## IL1RN       0     2.630 0.922 0.111         0
## MT2A        0     2.566 0.954 0.260         0
## ISG20       0     2.517 0.931 0.022         0
## TNIP3       0     2.509 0.900 0.043         0
## IFIT3       0     2.479 0.949 0.052         0
## GBP1        0     2.299 0.920 0.063         0
## CXCL1       0     2.249 0.448 0.020         0
## SOD2        0     2.218 1.000 0.822         0
## CXCL3       0     2.188 0.817 0.359         0
##         p_val avg_logFC pct.1 pct.2 p_val_adj
## IL1B        0     3.138 0.992 0.215         0
## ISG15       0     3.078 0.977 0.097         0
## CCL4        0     2.973 0.959 0.063         0
## EREG        0     2.912 0.984 0.237         0
## CCL20       0     2.728 0.792 0.020         0
## CCL3        0     2.633 0.938 0.131         0
## PTGS2       0     2.589 0.858 0.037         0
## TNFAIP6     0     2.583 0.903 0.034         0
## INHBA       0     2.334 0.619 0.008         0
## MT2A        0     2.293 0.957 0.260         0
## G0S2        0     2.275 0.744 0.055         0
## IFIT3       0     2.257 0.929 0.052         0
## THBS1       0     2.171 0.712 0.059         0
## ISG20       0     2.133 0.847 0.022         0
## GBP1        0     2.124 0.885 0.063         0
## CCL5        0     2.116 0.638 0.015         0
## RSAD2       0     2.107 0.683 0.012         0
## CXCL1       0     2.102 0.489 0.020         0
## SOD2        0     2.086 0.999 0.822         0
## IL7R        0     2.013 0.698 0.020         0
##              p_val avg_logFC pct.1 pct.2  p_val_adj
## THBS1    0.000e+00    2.2714 0.889 0.181  0.000e+00
## G0S2     0.000e+00    1.9418 0.839 0.315  0.000e+00
## CREM     0.000e+00    1.8509 0.892 0.200  0.000e+00
## INHBA    0.000e+00    1.5476 0.866 0.366  0.000e+00
## ATP1B3   0.000e+00    1.4492 0.926 0.569  0.000e+00
## CD300E   0.000e+00    1.3897 0.700 0.160  0.000e+00
## TIMP1    0.000e+00    1.3845 0.945 0.745  0.000e+00
## ISG15    0.000e+00    1.3525 0.995 0.956  0.000e+00
## PLAUR    0.000e+00    1.1642 0.936 0.675  0.000e+00
## EREG     0.000e+00    1.0787 0.997 0.968  0.000e+00
## SAMSN1   0.000e+00    1.0552 0.832 0.369  0.000e+00
## BTG1     0.000e+00    0.8131 0.980 0.866  0.000e+00
## PRDX1    0.000e+00    0.7540 0.981 0.930  0.000e+00
## FTH1     0.000e+00    0.4474 1.000 1.000  0.000e+00
## NCF2     0.000e+00   -0.9195 0.644 0.933  0.000e+00
## CYP1B1   0.000e+00   -0.9657 0.892 0.991  0.000e+00
## CCL2     0.000e+00   -1.5774 0.523 0.923  0.000e+00
## BHLHE41 3.782e-292   -1.1658 0.061 0.495 1.238e-287
## NBN     1.461e-275   -0.8257 0.602 0.899 4.784e-271
## REL     2.826e-268    0.8714 0.919 0.750 9.251e-264
##               p_val avg_logFC pct.1 pct.2  p_val_adj
## THBS1     0.000e+00    1.5116 0.712 0.181  0.000e+00
## FTH1      0.000e+00    0.3905 1.000 1.000  0.000e+00
## CCL3      0.000e+00   -1.0606 0.938 0.995  0.000e+00
## CCL4      0.000e+00   -1.0991 0.959 0.997  0.000e+00
## TNF      2.071e-289   -1.4675 0.088 0.493 6.781e-285
## G0S2     2.485e-283    1.2761 0.744 0.315 8.134e-279
## IL8      2.055e-252   -0.5784 0.996 0.999 6.728e-248
## FTL      4.242e-217    0.3096 1.000 1.000 1.389e-212
## SLAMF7   1.680e-212   -0.6433 0.762 0.941 5.499e-208
## NBN      3.916e-197   -0.6211 0.691 0.899 1.282e-192
## PRDX1    2.295e-191    0.4720 0.978 0.930 7.514e-187
## TIMP1    1.439e-176    0.7003 0.905 0.745 4.711e-172
## PLEK     1.671e-175   -0.7291 0.392 0.708 5.472e-171
## EREG     2.041e-173    0.5781 0.984 0.968 6.681e-169
## CYBA     2.862e-172    0.4637 0.953 0.857 9.370e-168
## PTX3     1.792e-171   -1.1279 0.287 0.620 5.866e-167
## RPS2     1.041e-164    0.4049 0.977 0.924 3.408e-160
## FNIP2    1.925e-162   -0.6648 0.511 0.783 6.300e-158
## MIR155HG 1.778e-150   -0.6839 0.358 0.668 5.820e-146
## CD300E   7.293e-144    0.8286 0.466 0.160 2.388e-139

1.1 Figure 2A

This looks to me like a bar plot of the top 10 up/down genes. But I have no clue where these numbers are coming from, a range of -5 < x < 5 logFC just does not seem to me to exist in this data. The range of logFCs on my sheet goes from -1.5 < x < 1.7. In addition, I do not see where in the Seurat data structures the error bars are coming from.

## converting counts to integer mode
## gene-wise dispersion estimates
## mean-dispersion relationship
## final dispersion estimates

1.4 Figure 5A

R version 3.6.1 (2019-07-05)

Platform: x86_64-pc-linux-gnu (64-bit)

locale: LC_CTYPE=en_US.UTF-8, LC_NUMERIC=C, LC_TIME=en_US.UTF-8, LC_COLLATE=en_US.UTF-8, LC_MONETARY=en_US.UTF-8, LC_MESSAGES=en_US.UTF-8, LC_PAPER=en_US.UTF-8, LC_NAME=C, LC_ADDRESS=C, LC_TELEPHONE=C, LC_MEASUREMENT=en_US.UTF-8 and LC_IDENTIFICATION=C

attached base packages: parallel, stats, graphics, grDevices, utils, datasets, methods and base

other attached packages: Vennerable(v.3.1.0.9000), Seurat(v.3.1.4), hpgltools(v.1.0), Biobase(v.2.46.0) and BiocGenerics(v.0.32.0)

loaded via a namespace (and not attached): rappdirs(v.0.3.1), rtracklayer(v.1.46.0), tidyr(v.1.0.2), acepack(v.1.4.1), ggplot2(v.3.3.0), bit64(v.0.9-7), knitr(v.1.28), irlba(v.2.3.3), multcomp(v.1.4-13), DelayedArray(v.0.12.3), rpart(v.4.1-15), data.table(v.1.12.8), RCurl(v.1.98-1.1), doParallel(v.1.0.15), metap(v.1.3), GenomicFeatures(v.1.38.2), callr(v.3.4.3), cowplot(v.1.0.0), TH.data(v.1.0-10), usethis(v.1.6.0), RSQLite(v.2.2.0), RANN(v.2.6.1), europepmc(v.0.3), future(v.1.16.0), bit(v.1.1-15.2), enrichplot(v.1.6.1), mutoss(v.0.1-12), xml2(v.1.3.1), SummarizedExperiment(v.1.16.1), assertthat(v.0.2.1), viridis(v.0.5.1), xfun(v.0.12), hms(v.0.5.3), evaluate(v.0.14), fansi(v.0.4.1), progress(v.1.2.2), caTools(v.1.18.0), dbplyr(v.1.4.2), geneplotter(v.1.64.0), igraph(v.1.2.5), DBI(v.1.1.0), htmlwidgets(v.1.5.1), stats4(v.3.6.1), purrr(v.0.3.3), ellipsis(v.0.3.0), RSpectra(v.0.16-0), dplyr(v.0.8.5), backports(v.1.1.6), annotate(v.1.64.0), gbRd(v.0.4-11), biomaRt(v.2.42.1), vctrs(v.0.2.4), remotes(v.2.1.1), ROCR(v.1.0-7), withr(v.2.1.2), ggforce(v.0.3.1), triebeard(v.0.3.0), checkmate(v.2.0.0), sctransform(v.0.2.1), GenomicAlignments(v.1.22.1), prettyunits(v.1.1.1), mnormt(v.1.5-6), cluster(v.2.1.0), DOSE(v.3.12.0), lazyeval(v.0.2.2), ape(v.5.3), crayon(v.1.3.4), genefilter(v.1.68.0), labeling(v.0.3), pkgconfig(v.2.0.3), tweenr(v.1.0.1), GenomeInfoDb(v.1.22.1), nlme(v.3.1-145), pkgload(v.1.0.2), nnet(v.7.3-13), devtools(v.2.3.0), rlang(v.0.4.5), globals(v.0.12.5), lifecycle(v.0.2.0), sandwich(v.2.5-1), BiocFileCache(v.1.10.2), rsvd(v.1.0.3), rprojroot(v.1.3-2), polyclip(v.1.10-0), matrixStats(v.0.56.0), lmtest(v.0.9-37), graph(v.1.64.0), Matrix(v.1.2-18), urltools(v.1.7.3), boot(v.1.3-24), zoo(v.1.8-7), base64enc(v.0.1-3), ggridges(v.0.5.2), processx(v.3.4.2), png(v.0.1-7), viridisLite(v.0.3.0), bitops(v.1.0-6), KernSmooth(v.2.23-16), pander(v.0.6.3), Biostrings(v.2.54.0), blob(v.1.2.1), stringr(v.1.4.0), qvalue(v.2.18.0), jpeg(v.0.1-8.1), gridGraphics(v.0.5-0), S4Vectors(v.0.24.4), scales(v.1.1.0), memoise(v.1.1.0), magrittr(v.1.5), plyr(v.1.8.6), ica(v.1.0-2), gplots(v.3.0.3), bibtex(v.0.4.2.2), gdata(v.2.18.0), zlibbioc(v.1.32.0), compiler(v.3.6.1), lsei(v.1.2-0), RColorBrewer(v.1.1-2), plotrix(v.3.7-7), lme4(v.1.1-23), DESeq2(v.1.26.0), fitdistrplus(v.1.0-14), Rsamtools(v.2.2.3), cli(v.2.0.2), XVector(v.0.26.0), listenv(v.0.8.0), patchwork(v.1.0.0), pbapply(v.1.4-2), ps(v.1.3.2), htmlTable(v.1.13.3), Formula(v.1.2-3), MASS(v.7.3-51.5), mgcv(v.1.8-31), tidyselect(v.1.0.0), stringi(v.1.4.6), yaml(v.2.2.1), GOSemSim(v.2.12.1), locfit(v.1.5-9.4), askpass(v.1.1), latticeExtra(v.0.6-29), ggrepel(v.0.8.2), grid(v.3.6.1), fastmatch(v.1.1-0), tools(v.3.6.1), future.apply(v.1.4.0), rstudioapi(v.0.11), foreign(v.0.8-76), foreach(v.1.5.0), gridExtra(v.2.3), farver(v.2.0.3), Rtsne(v.0.15), ggraph(v.2.0.2), digest(v.0.6.25), rvcheck(v.0.1.8), BiocManager(v.1.30.10), Rcpp(v.1.0.4.6), GenomicRanges(v.1.38.0), RcppAnnoy(v.0.0.16), httr(v.1.4.1), AnnotationDbi(v.1.48.0), npsurv(v.0.4-0), Rdpack(v.0.11-1), colorspace(v.1.4-1), XML(v.3.99-0.3), fs(v.1.4.1), reticulate(v.1.15), IRanges(v.2.20.2), splines(v.3.6.1), RBGL(v.1.62.1), uwot(v.0.1.8), statmod(v.1.4.34), sn(v.1.6-1), graphlayouts(v.0.6.0), multtest(v.2.42.0), ggplotify(v.0.0.5), plotly(v.4.9.2.1), sessioninfo(v.1.1.1), xtable(v.1.8-4), jsonlite(v.1.6.1), nloptr(v.1.2.2.1), tidygraph(v.1.1.2), testthat(v.2.3.2), R6(v.2.4.1), Hmisc(v.4.4-0), TFisher(v.0.2.0), pillar(v.1.4.3), htmltools(v.0.4.0), glue(v.1.4.0), minqa(v.1.2.4), clusterProfiler(v.3.14.3), BiocParallel(v.1.20.1), codetools(v.0.2-16), fgsea(v.1.12.0), tsne(v.0.1-3), pkgbuild(v.1.0.6), mvtnorm(v.1.1-0), lattice(v.0.20-41), tibble(v.3.0.0), sva(v.3.34.0), numDeriv(v.2016.8-1.1), pbkrtest(v.0.4-8.6), curl(v.4.3), leiden(v.0.3.3), colorRamps(v.2.3), gtools(v.3.8.2), GO.db(v.3.10.0), openssl(v.1.4.1), survival(v.3.1-12), limma(v.3.42.2), rmarkdown(v.2.1), desc(v.1.2.0), munsell(v.0.5.0), DO.db(v.2.9), GenomeInfoDbData(v.1.2.2), iterators(v.1.0.12), variancePartition(v.1.16.1), reshape2(v.1.4.4) and gtable(v.0.3.0)

## If you wish to reproduce this exact build of hpgltools, invoke the following:
## > git clone http://github.com/abelew/hpgltools.git
## > git reset e0b7cae0257816079fa8e67c59028a10d066fd10
## This is hpgltools commit: Thu Apr 9 14:19:47 2020 -0400: e0b7cae0257816079fa8e67c59028a10d066fd10
## Saving to scrnaseq_analyses-v202004.rda.xz
LS0tCnRpdGxlOiAiRXhwZXJpbWVudGluZyB3aXRoIHNvbWUgc2NSTkFTZXEgZGF0YS4iCmF1dGhvcjogImF0YiBhYmVsZXdAZ21haWwuY29tIgpkYXRlOiAiYHIgU3lzLkRhdGUoKWAiCm91dHB1dDoKICBodG1sX2RvY3VtZW50OgogICAgY29kZV9kb3dubG9hZDogdHJ1ZQogICAgY29kZV9mb2xkaW5nOiBzaG93CiAgICBmaWdfY2FwdGlvbjogdHJ1ZQogICAgZmlnX2hlaWdodDogNwogICAgZmlnX3dpZHRoOiA3CiAgICBoaWdobGlnaHQ6IHRhbmdvCiAgICBrZWVwX21kOiBmYWxzZQogICAgbW9kZTogc2VsZmNvbnRhaW5lZAogICAgbnVtYmVyX3NlY3Rpb25zOiB0cnVlCiAgICBzZWxmX2NvbnRhaW5lZDogdHJ1ZQogICAgdGhlbWU6IHJlYWRhYmxlCiAgICB0b2M6IHRydWUKICAgIHRvY19mbG9hdDoKICAgICAgY29sbGFwc2VkOiBmYWxzZQogICAgICBzbW9vdGhfc2Nyb2xsOiBmYWxzZQogIHJtZGZvcm1hdHM6OnJlYWR0aGVkb3duOgogICAgY29kZV9kb3dubG9hZDogdHJ1ZQogICAgY29kZV9mb2xkaW5nOiBzaG93CiAgICBkZl9wcmludDogcGFnZWQKICAgIGZpZ19jYXB0aW9uOiB0cnVlCiAgICBmaWdfaGVpZ2h0OiA3CiAgICBmaWdfd2lkdGg6IDcKICAgIGhpZ2hsaWdodDogdGFuZ28KICAgIHdpZHRoOiAzMDAKICAgIGtlZXBfbWQ6IGZhbHNlCiAgICBtb2RlOiBzZWxmY29udGFpbmVkCiAgICB0b2NfZmxvYXQ6IHRydWUKICBCaW9jU3R5bGU6Omh0bWxfZG9jdW1lbnQ6CiAgICBjb2RlX2Rvd25sb2FkOiB0cnVlCiAgICBjb2RlX2ZvbGRpbmc6IHNob3cKICAgIGZpZ19jYXB0aW9uOiB0cnVlCiAgICBmaWdfaGVpZ2h0OiA3CiAgICBmaWdfd2lkdGg6IDcKICAgIGhpZ2hsaWdodDogdGFuZ28KICAgIGtlZXBfbWQ6IGZhbHNlCiAgICBtb2RlOiBzZWxmY29udGFpbmVkCiAgICB0b2NfZmxvYXQ6IHRydWUKLS0tCgo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgpib2R5LCB0ZCB7CiAgZm9udC1zaXplOiAxNnB4Owp9CmNvZGUucnsKICBmb250LXNpemU6IDE2cHg7Cn0KcHJlIHsKIGZvbnQtc2l6ZTogMTZweAp9Cjwvc3R5bGU+CgpgYGB7ciBvcHRpb25zLCBpbmNsdWRlPUZBTFNFfQpsaWJyYXJ5KCJocGdsdG9vbHMiKQp0dCA8LSBkZXZ0b29sczo6bG9hZF9hbGwoIi9kYXRhL2hwZ2x0b29scyIpCmtuaXRyOjpvcHRzX2tuaXQkc2V0KHdpZHRoPTEyMCwKICAgICAgICAgICAgICAgICAgICAgcHJvZ3Jlc3M9VFJVRSwKICAgICAgICAgICAgICAgICAgICAgdmVyYm9zZT1UUlVFLAogICAgICAgICAgICAgICAgICAgICBlY2hvPVRSVUUpCmtuaXRyOjpvcHRzX2NodW5rJHNldChlcnJvcj1UUlVFLAogICAgICAgICAgICAgICAgICAgICAgZHBpPTk2KQpvbGRfb3B0aW9ucyA8LSBvcHRpb25zKGRpZ2l0cz00LAogICAgICAgICAgICAgICAgICAgICAgIHN0cmluZ3NBc0ZhY3RvcnM9RkFMU0UsCiAgICAgICAgICAgICAgICAgICAgICAga25pdHIuZHVwbGljYXRlLmxhYmVsPSJhbGxvdyIpCmdncGxvdDI6OnRoZW1lX3NldChnZ3Bsb3QyOjp0aGVtZV9idyhiYXNlX3NpemU9MTApKQpydW5kYXRlIDwtIGZvcm1hdChTeXMuRGF0ZSgpLCBmb3JtYXQ9IiVZJW0lZCIpCnByZXZpb3VzX2ZpbGUgPC0gImluZGV4LlJtZCIKdmVyIDwtICIyMDIwMDQiCgojI3RtcCA8LSBzbShsb2FkbWUoZmlsZW5hbWU9cGFzdGUwKGdzdWIocGF0dGVybj0iXFwuUm1kIiwgcmVwbGFjZT0iIiwgeD1wcmV2aW91c19maWxlKSwgIi12IiwgdmVyLCAiLnJkYS54eiIpKSkKcm1kX2ZpbGUgPC0gInNjcm5hc2VxX2FuYWx5c2VzLlJtZCIKYGBgCgojIFRlc3Rpbmcgc2V1cmF0CgpgYGB7ciBzZXVyYXRfbG9hZGluZ30KbGlicmFyeShTZXVyYXQpCiMjIGxpYnJhcnkoU2V1cmF0RGF0YSkKIyMgVGhlIFNldXJhdCB2aWduZXR0ZXMgc2hvdyBob3cgdG8gbG9hZCBoZGY1IGZpbGVzIGFuZCB0aGUgbWV0YWRhdGEgcmVxdWlyZWQuCiMjIFRoZXkgYXJlIHVzaW5nIGEgcGFjcmVhcyBkYXRhc2V0LCBJIHByZXN1bWUgaXQgaXMgdGhlICdwYW5jOCcgZGF0YSBpbiBTZXVyYXREYXRhLgojIyBUaHVzIEkgd2lsbCBwb2tlIGF0IHRoYXQgdG8gc2VlIGlmIEkgY2FuIGxlYXJuIGFib3V0IGhvdyB0aGV5IGhhbmRsZSB0aGUgbWV0YWRhdGEuCgpsYV9kYXRhIDwtIFNldXJhdDo6UmVhZDEwWCgia2hhbWlkemFfMTU4OTc0L0tIX0xBL291dHMvZmlsdGVyZWRfZmVhdHVyZV9iY19tYXRyaXgiKQpscF9kYXRhIDwtIFNldXJhdDo6UmVhZDEwWCgia2hhbWlkemFfMTU4OTc0L0tIX0xQL291dHMvZmlsdGVyZWRfZmVhdHVyZV9iY19tYXRyaXgiKQpscHNfZGF0YSA8LSBTZXVyYXQ6OlJlYWQxMFgoImtoYW1pZHphXzE1ODk3NC9LSF9MUFMvb3V0cy9maWx0ZXJlZF9mZWF0dXJlX2JjX21hdHJpeCIpCm5zX2RhdGEgPC0gU2V1cmF0OjpSZWFkMTBYKCJraGFtaWR6YV8xNTg5NzQvS0hfTlMvb3V0cy9maWx0ZXJlZF9mZWF0dXJlX2JjX21hdHJpeCIpCgpsYSA8LSBTZXVyYXQ6OkNyZWF0ZVNldXJhdE9iamVjdChsYV9kYXRhLCBwcm9qZWN0PSJsYSIpCmxwIDwtIFNldXJhdDo6Q3JlYXRlU2V1cmF0T2JqZWN0KGxwX2RhdGEsIHByb2plY3Q9ImxwIikKbHBzIDwtIFNldXJhdDo6Q3JlYXRlU2V1cmF0T2JqZWN0KGxwc19kYXRhLCBwcm9qZWN0PSJscHMiKQpucyA8LSBTZXVyYXQ6OkNyZWF0ZVNldXJhdE9iamVjdChuc19kYXRhLCBwcm9qZWN0PSJucyIpCgphbGwgPC0gbWVyZ2UobGEsIGxwKQphbGwgPC0gbWVyZ2UoYWxsLCBscHMpCmFsbCA8LSBtZXJnZShhbGwsIG5zKQoKIyMgSSB0aGluayB0aGlzIGlzIHJlZHVuZGFudCwgYnV0IGludGVyZXN0aW5nIGZvciBtZSB0byB1bmRlcnN0YW5kIHNjIG1ldGFkYXRhCmNsdXN0ZXJfbGV0dGVycyA8LSBhcy5mYWN0b3IoTEVUVEVSU1tJZGVudHMob2JqZWN0PWFsbCldKQpuYW1lcyhjbHVzdGVyX2xldHRlcnMpIDwtIGNvbG5hbWVzKHg9YWxsKQoKc3RpbXVsYXRlZCA8LSBhcy5jaGFyYWN0ZXIoY2x1c3Rlcl9sZXR0ZXJzKQpuc19pZHggPC0gc3RpbXVsYXRlZCA9PSAiRCIKc3RpbXVsYXRlZFtuc19pZHhdIDwtICJ1bnN0aW11bGF0ZWQiCnN0aW11bGF0ZWRbIW5zX2lkeF0gPC0gInN0aW11bGF0ZWQiCnN0aW11bGF0ZWQgPC0gYXMuZmFjdG9yKHN0aW11bGF0ZWQpCgpzdGltdWxhdGlvbiA8LSBhcy5jaGFyYWN0ZXIoY2x1c3Rlcl9sZXR0ZXJzKQpuc19pZHggPC0gc3RpbXVsYXRpb24gPT0gIkQiCnN0aW11bGF0aW9uW25zX2lkeF0gPC0gIlVuc3RpbXVsYXRlZCIKbGFfaWR4IDwtIHN0aW11bGF0aW9uID09ICJBIgpzdGltdWxhdGlvbltsYV9pZHhdIDwtICJMK0FkbyIKbHBfaWR4IDwtIHN0aW11bGF0aW9uID09ICJCIgpzdGltdWxhdGlvbltscF9pZHhdIDwtICJMK1BHRTIiCmxwc19pZHggPC0gc3RpbXVsYXRpb24gPT0gIkMiCnN0aW11bGF0aW9uW2xwc19pZHhdIDwtICJMUFMiCnN0aW11bGF0aW9uIDwtIGFzLmZhY3RvcihzdGltdWxhdGlvbikKCmFsbCA8LSBBZGRNZXRhRGF0YSgKICBvYmplY3Q9YWxsLAogIG1ldGFkYXRhPWNsdXN0ZXJfbGV0dGVycywKICBjb2wubmFtZT0iY2x1c3Rlcl9sZXR0ZXJzIikKYWxsIDwtIEFkZE1ldGFEYXRhKAogICAgb2JqZWN0PWFsbCwKICAgIG1ldGFkYXRhPXN0aW11bGF0ZWQsCiAgICBjb2wubmFtZT0ic3RpbXVsYXRlZHAiKQphbGwgPC0gQWRkTWV0YURhdGEoCiAgICBvYmplY3Q9YWxsLAogICAgbWV0YWRhdGE9c3RpbXVsYXRpb24sCiAgICBjb2wubmFtZT0ic3RpbXVsYXRpb24iKQoKYWxsW1sicGVyY2VudF9tdCJdXSA8LSBQZXJjZW50YWdlRmVhdHVyZVNldChhbGwsIHBhdHRlcm49Il5NVC0iKQpWbG5QbG90KGFsbCwgZmVhdHVyZXM9Im5GZWF0dXJlX1JOQSIsIHB0LnNpemU9MC4xKQpWbG5QbG90KGFsbCwgZmVhdHVyZXM9InBlcmNlbnRfbXQiLCBwdC5zaXplPTAuMSkKVmxuUGxvdChhbGwsIGZlYXR1cmVzPSJuQ291bnRfUk5BIiwgcHQuc2l6ZT0wLjEpCgphbGwgPC0gTm9ybWFsaXplRGF0YShvYmplY3Q9YWxsKQphbGwgPC0gRmluZFZhcmlhYmxlRmVhdHVyZXMob2JqZWN0PWFsbCkKYWxsIDwtIFNjYWxlRGF0YShvYmplY3Q9YWxsKQphbGwgPC0gUnVuUENBKG9iamVjdD1hbGwpCmFsbCA8LSBGaW5kTmVpZ2hib3JzKG9iamVjdD1hbGwpCmFsbCA8LSBGaW5kQ2x1c3RlcnMob2JqZWN0PWFsbCkKYWxsIDwtIFJ1blRTTkUob2JqZWN0PWFsbCkKYWxsIDwtIFJ1blVNQVAoYWxsLCByZWR1Y3Rpb249InBjYSIsIGRpbXM9MToyMCkKRGltUGxvdChvYmplY3Q9YWxsLCByZWR1Y3Rpb249InRzbmUiKQpwbG90dGVkIDwtIERpbVBsb3QoYWxsLCByZWR1Y3Rpb249InVtYXAiLCBncm91cC5ieT0iY2x1c3Rlcl9sZXR0ZXJzIiwgbGFiZWw9VFJVRSkKcGxvdHRlZAoKIyMgVHJ5IHRvIHNldCBzb21lIG1ldHJpY3MgdG8gZHJvcCBjcmFwcHkgc3R1ZmYuCkZlYXR1cmVTY2F0dGVyKGFsbCwgZmVhdHVyZTE9Im5Db3VudF9STkEiLCBmZWF0dXJlMj0icGVyY2VudF9tdCIpCiMjIFN1Z2dlc3RzIHRoYXQgd2Ugd2FudCB+ICA8IDE1JSBtdAojIyBTdWdnZXN0cyB3ZSB3YW50ID4gMTAwMCBuQ291bnRzCkZlYXR1cmVTY2F0dGVyKGFsbCwgZmVhdHVyZTE9Im5Db3VudF9STkEiLCBmZWF0dXJlMj0ibkZlYXR1cmVfUk5BIikKIyMgU3VnZ2VzdHMgd2Ugd2FudCA+IDIwMCBuRmVhdHVyZQpGZWF0dXJlU2NhdHRlcihhbGwsIGZlYXR1cmUxPSJwZXJjZW50X210IiwgZmVhdHVyZTI9Im5GZWF0dXJlX1JOQSIpCmFsbF9zdWIgPC0gc3Vic2V0KGFsbCwKICAgICAgICAgICAgICAgICAgc3Vic2V0PW5GZWF0dXJlX1JOQSA+IDIwMCAmIHBlcmNlbnRfbXQgPCAxNSkKYWxsX3N1YiA8LSBOb3JtYWxpemVEYXRhKG9iamVjdD1hbGxfc3ViKQphbGxfc3ViIDwtIEZpbmRWYXJpYWJsZUZlYXR1cmVzKG9iamVjdD1hbGxfc3ViKQptb3N0X3ZhciA8LSBoZWFkKFZhcmlhYmxlRmVhdHVyZXMoYWxsX3N1YiksIDMwKQp2YXJpYWJsZV9wbG90IDwtIFZhcmlhYmxlRmVhdHVyZVBsb3QoYWxsX3N1YikKdmFyaWFibGVfcGxvdCA8LSBMYWJlbFBvaW50cyhwbG90PXZhcmlhYmxlX3Bsb3QsIHBvaW50cz1tb3N0X3ZhciwgcmVwZWw9VFJVRSkKdmFyaWFibGVfcGxvdAphbGxfc3ViIDwtIFNjYWxlRGF0YShvYmplY3Q9YWxsX3N1YikKYWxsX3N1YiA8LSBSdW5QQ0Eob2JqZWN0PWFsbF9zdWIpClZpekRpbUxvYWRpbmdzKGFsbF9zdWIsIGRpbXM9MToyLCByZWR1Y3Rpb249InBjYSIpCmFsbF9zdWIgPC0gSmFja1N0cmF3KGFsbF9zdWIsIG51bS5yZXBsaWNhdGU9MTAwKQphbGxfc3ViIDwtIFNjb3JlSmFja1N0cmF3KGFsbF9zdWIsIGRpbXM9MToyMCkKSmFja1N0cmF3UGxvdChhbGxfc3ViLCBkaW1zPTE6MTUpCkVsYm93UGxvdChhbGxfc3ViKQphbGxfc3ViIDwtIEZpbmROZWlnaGJvcnMob2JqZWN0PWFsbF9zdWIpCmFsbF9zdWIgPC0gRmluZENsdXN0ZXJzKG9iamVjdD1hbGxfc3ViKQphbGxfc3ViIDwtIFJ1blRTTkUob2JqZWN0PWFsbF9zdWIpCmFsbF9zdWIgPC0gUnVuVU1BUChhbGxfc3ViLCByZWR1Y3Rpb249InBjYSIsIGRpbXM9MToyMCkKRGltUGxvdChvYmplY3Q9YWxsX3N1YiwgcmVkdWN0aW9uPSJ0c25lIikKcGxvdHRlZCA8LSBEaW1QbG90KGFsbF9zdWIsIHJlZHVjdGlvbj0idW1hcCIsIGdyb3VwLmJ5PSJzdGltdWxhdGlvbiIsIGxhYmVsPVRSVUUpCnBsb3R0ZWQKcGxvdHRlZCA8LSBEaW1QbG90KGFsbF9zdWIsIHJlZHVjdGlvbj0icGNhIiwgbGFiZWw9VFJVRSkKcGxvdHRlZApgYGAKCmBgYHtyIG1hcmtlcnN9CkRlZmF1bHRBc3NheShhbGwpIDwtICJSTkEiCm1hcmtlcnMgPC0gRmluZENvbnNlcnZlZE1hcmtlcnMoYWxsX3N1YiwgaWRlbnQuMT00LCBncm91cGluZy52YXI9InN0aW11bGF0aW9uIiwgdmVyYm9zZT1UUlVFKQoKIyMgTm90ZSB0aGF0IEkgcmVuYW1lZCB0aGVtIGFjY29yZGluZyB0byBEYXZlJ3Mgc3VnZ2VzdGlvbi4KbHBzX3ZzX3Vuc3RpbSA8LSBGaW5kTWFya2VycyhhbGxfc3ViLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkZW50LjE9IkxQUyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWRlbnQuMj0iVW5zdGltdWxhdGVkIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cC5ieT0ic3RpbXVsYXRpb24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbi5wY3Q9MC4yNSkKaGVhZChscHNfdnNfdW5zdGltLCBuPTIwKQphZGVfdnNfdW5zdGltIDwtIEZpbmRNYXJrZXJzKGFsbF9zdWIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWRlbnQuMT0iTCtBZG8iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkZW50LjI9IlVuc3RpbXVsYXRlZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXAuYnk9InN0aW11bGF0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW4ucGN0PTAuMjUpCmhlYWQoYWRlX3ZzX3Vuc3RpbSwgbj0yMCkKcGdlX3ZzX3Vuc3RpbSA8LSBGaW5kTWFya2VycyhhbGxfc3ViLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkZW50LjE9IkwrUEdFMiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWRlbnQuMj0iVW5zdGltdWxhdGVkIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cC5ieT0ic3RpbXVsYXRpb24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbi5wY3Q9MC4yNSkKaGVhZChwZ2VfdnNfdW5zdGltLCBuPTIwKQoKYWRvX2xwcyA8LSBGaW5kTWFya2VycyhhbGxfc3ViLAogICAgICAgICAgICAgICAgICAgICAgIGlkZW50LjE9IkwrQWRvIiwKICAgICAgICAgICAgICAgICAgICAgICBpZGVudC4yPSJMUFMiLAogICAgICAgICAgICAgICAgICAgICAgIGdyb3VwLmJ5PSJzdGltdWxhdGlvbiIsIG1pbi5wY3Q9MC4yNSkKaGVhZChhZG9fbHBzLCBuPTIwKQoKcGdlMl9scHMgPC0gRmluZE1hcmtlcnMoYWxsX3N1YiwKICAgICAgICAgICAgICAgICAgICAgICAgaWRlbnQuMT0iTCtQR0UyIiwKICAgICAgICAgICAgICAgICAgICAgICAgaWRlbnQuMj0iTFBTIiwKICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXAuYnk9InN0aW11bGF0aW9uIiwgbWluLnBjdD0wLjI1KQpoZWFkKHBnZTJfbHBzLCBuPTIwKQpgYGAKCmBgYHtyIGZlYXR1cmVzfQpGZWF0dXJlUGxvdChhbGxfc3ViLCBmZWF0dXJlcz1jKCJUSEJTMSIpLAogICAgICAgICAgICBzcGxpdC5ieT0ic3RpbXVsYXRpb24iLCBtYXguY3V0b2ZmPTMsIGNvbHM9YygiZGFya2dyZWVuIiwgImRhcmtyZWQiKSkKRmVhdHVyZVBsb3QoYWxsX3N1YiwgZmVhdHVyZXM9YygiUExFSyIpLAogICAgICAgICAgICBzcGxpdC5ieT0ic3RpbXVsYXRpb24iLCBtYXguY3V0b2ZmPTMsIGNvbHM9YygiZGFya2dyZWVuIiwgImRhcmtyZWQiKSkKRmVhdHVyZVBsb3QoYWxsX3N1YiwgZmVhdHVyZXM9YygiRk5JUDIiKSwKICAgICAgICAgICAgc3BsaXQuYnk9InN0aW11bGF0aW9uIiwgbWF4LmN1dG9mZj0zLCBjb2xzPWMoImRhcmtncmVlbiIsICJkYXJrcmVkIikpCkZlYXR1cmVQbG90KGFsbF9zdWIsIGZlYXR1cmVzPWMoIkcwUzIiKSwKICAgICAgICAgICAgc3BsaXQuYnk9InN0aW11bGF0aW9uIiwgbWF4LmN1dG9mZj0zLCBjb2xzPWMoImRhcmtncmVlbiIsICJkYXJrcmVkIikpCmBgYAoKIyMgRmlndXJlIDJBCgpUaGlzIGxvb2tzIHRvIG1lIGxpa2UgYSBiYXIgcGxvdCBvZiB0aGUgdG9wIDEwIHVwL2Rvd24gZ2VuZXMuICBCdXQgSSBoYXZlIG5vCmNsdWUgd2hlcmUgdGhlc2UgbnVtYmVycyBhcmUgY29taW5nIGZyb20sIGEgcmFuZ2Ugb2YgLTUgPCB4IDwgNSBsb2dGQyBqdXN0IGRvZXMKbm90IHNlZW0gdG8gbWUgdG8gZXhpc3QgaW4gdGhpcyBkYXRhLiAgVGhlIHJhbmdlIG9mIGxvZ0ZDcyBvbiBteSBzaGVldCBnb2VzIGZyb20KLTEuNSA8IHggPCAxLjcuICBJbiBhZGRpdGlvbiwgSSBkbyBub3Qgc2VlIHdoZXJlIGluIHRoZSBTZXVyYXQgZGF0YSBzdHJ1Y3R1cmVzCnRoZSBlcnJvciBiYXJzIGFyZSBjb21pbmcgZnJvbS4KCmBgYHtyIGZpZzJhfQphZG9fbHBzIDwtIEZpbmRNYXJrZXJzKGFsbF9zdWIsIHRlc3QudXNlPSJERVNlcTIiLAogICAgICAgICAgICAgICAgICAgICAgIGlkZW50LjE9IkwrQWRvIiwKICAgICAgICAgICAgICAgICAgICAgICBpZGVudC4yPSJMUFMiLAogICAgICAgICAgICAgICAgICAgICAgIGdyb3VwLmJ5PSJzdGltdWxhdGlvbiIsIG1pbi5wY3Q9MC4yNSkKCmBgYAoKIyMgRmlndXJlIDJCCgpSZWFkaW5nIGZyb20gdGhlIHRleHQsIHRoaXMgYXBwZWFycyB0byBtZSB0byBiZSBmcm9tIHRoZSB0b3RhbCBjZWxsIFJOQVNlcT8gIE5vLAp0aGF0IGNhbm5vdCBiZSB0cnVlLCB0aGUgYnVsayBkYXRhIGRpZCBub3QgY29tcGFyZSB0aGVzZSB0aGluZ3MuICBJdCBtdXN0IGJlCnRoaXMgZGF0YS4KCkkgZGlkIGdlbmVyYXRlIGEgY291cGxlIG9mIFZlbm5zIHVzaW5nIHRoZSBzY1JOQSBkYXRhIGFuZCBnb3Qgc2ltaWxhciBudW1iZXJzIGluCnRoZSBvcHBvc2l0ZSBvcmllbnRhdGlvbi4KCmBgYHtyIHZlbm59CmFkbyA8LSByb3duYW1lcyhhZG9fbHBzKQphZG9fdXAgPC0gYWRvW2Fkb19scHNbWyJhdmdfbG9nRkMiXV0gPiAwXQphZG9fZG93biA8LSBhZG9bYWRvX2xwc1tbImF2Z19sb2dGQyJdXSA8IDBdCnBnZTIgPC0gcm93bmFtZXMocGdlMl9scHMpCnBnZV91cCA8LSBwZ2UyW3BnZTJfbHBzW1siYXZnX2xvZ0ZDIl1dID4gMF0KcGdlX2Rvd24gPC0gcGdlMltwZ2UyX2xwc1tbImF2Z19sb2dGQyJdXSA8IDBdCgpsaWJyYXJ5KFZlbm5lcmFibGUpCnVwcyA8LSBsaXN0KGFkb191cCwgcGdlX3VwKQp1cF9kYXRhIDwtIFZlbm4odXBzLCBTZXROYW1lcz1jKCJMUFMrQWRvIiwgIkxQUytQR0UyIiksIG51bWJlck9mU2V0cz0yKQpwbG90KHVwX2RhdGEsIGRvV2VpZ2h0cz1GQUxTRSkKCmRvd25zIDwtIGxpc3QoYWRvX2Rvd24sIHBnZV9kb3duKQp2X2RhdGEgPC0gVmVubihkb3ducywgU2V0TmFtZXM9YygiTFBTK0FkbyIsICJMUFMrUEdFMiIpLCBudW1iZXJPZlNldHM9MikKcGxvdCh2X2RhdGEsIGRvV2VpZ2h0cz1GQUxTRSkKYGBgCgojIyBGaWd1cmUgMkMKCmBgYHtyIGZpZzJjfQpwbG90dGVkIDwtIERpbVBsb3QoYWxsX3N1YiwgcmVkdWN0aW9uPSJ1bWFwIiwgZ3JvdXAuYnk9InN0aW11bGF0aW9uIiwgbGFiZWw9VFJVRSkKcGxvdHRlZApgYGAKCiMjIEZpZ3VyZSA1QQoKYGBge3IgZmlnNWF9ClZsblBsb3QoYWxsLCBmZWF0dXJlcz0iVEhCUzEiLCBncm91cC5ieT0ic3RpbXVsYXRpb24iLCBwdC5zaXplPTAuMSkKVmxuUGxvdChhbGwsIGZlYXR1cmVzPSJWRUdGQSIsIGdyb3VwLmJ5PSJzdGltdWxhdGlvbiIsIHB0LnNpemU9MC4xKQpWbG5QbG90KGFsbCwgZmVhdHVyZXM9IkNEMzAwRSIsIGdyb3VwLmJ5PSJzdGltdWxhdGlvbiIsIHB0LnNpemU9MC4xKQpWbG5QbG90KGFsbCwgZmVhdHVyZXM9IlBMQVVSIiwgZ3JvdXAuYnk9InN0aW11bGF0aW9uIiwgcHQuc2l6ZT0wLjEpCmBgYAoKYGBge3Igc2F2ZW1lfQpwYW5kZXI6OnBhbmRlcihzZXNzaW9uSW5mbygpKQptZXNzYWdlKHBhc3RlMCgiVGhpcyBpcyBocGdsdG9vbHMgY29tbWl0OiAiLCBnZXRfZ2l0X2NvbW1pdCgpKSkKdGhpc19zYXZlIDwtIHBhc3RlMChnc3ViKHBhdHRlcm49IlxcLlJtZCIsIHJlcGxhY2U9IiIsIHg9cm1kX2ZpbGUpLCAiLXYiLCB2ZXIsICIucmRhLnh6IikKbWVzc2FnZShwYXN0ZTAoIlNhdmluZyB0byAiLCB0aGlzX3NhdmUpKQp0bXAgPC0gc20oc2F2ZW1lKGZpbGVuYW1lPXRoaXNfc2F2ZSkpCmBgYAoKYGBge3IgbG9hZG1lLCBldmFsPUZBTFNFfQp0aGlzX3NhdmUgPC0gcGFzdGUwKGdzdWIocGF0dGVybj0iXFwuUm1kIiwgcmVwbGFjZT0iIiwgeD1ybWRfZmlsZSksICItdiIsIHZlciwgIi5yZGEueHoiKQpsb2FkZWQgPC0gbG9hZG1lKGZpbGVuYW1lPXRoaXNfc2F2ZSkKYGBgCg==