R Notebook: Provides reproducible analysis for Soil Chemistry data in the following manuscript:

Citation: Romanowicz KJ and Kling GW. (In Press) Summer thaw duration is a strong predictor of the soil microbiome and its response to permafrost thaw in arctic tundra. Environmental Microbiology. https://doi.org/10.1111/1462-2920.16218

GitHub Repository: https://github.com/kromanowicz/2022-Annual-Thaw-Microbes

NCBI BioProject: https://www.ncbi.nlm.nih.gov/bioproject/?term=PRJNA794857

Accepted for Publication: 22 September 2022 Environmental Microbiology

Experiment

This R Notebook provides complete reproducibility of the data analysis presented in “Summer thaw duration is a strong predictor of the soil microbiome and its response to permafrost thaw in arctic tundra” by Romanowicz and Kling.

This pipeline processes soil chemistry data related to the soil samples from which 16S rRNA gene sequences were generated using the Illumina MiSeq platform.

# Make a vector of required packages
required.packages <- c("corrr","data.table","devtools","dplyr","forcats","ggalluvial","ggdendro","ggplot2","ggpubr","grid","gridExtra","knitr","magrittr","microeco","patchwork","pheatmap","pvclust","qiime2R","RColorBrewer","tidyr","UpSetR","vegan")

# Load required packages
lapply(required.packages, library, character.only = TRUE)

Soil Chemistry

Import the metadata metrics

# Load in the environmental metadata (qualitative and quantitative data)
asv.env <- read.csv("QIIME/R_Data/metadata.csv")

# Convert first column to row names
rownames(asv.env)<-asv.env[,1]
asv.env<-asv.env[,-1]

# Make dataframe
asv.env <- as.data.frame(asv.env)

pH Plotting

chem.plot<-asv.env

chem.plot$Increment<-factor(chem.plot$Increment, levels = c("90-100","80-90","70-80","60-70","50-60","40-50","30-40","20-30","10-20","0-10"))

pH.plot<-ggplot(data=chem.plot, aes(x=Increment, y=pH, group=site_tundra)) + geom_line(aes(linetype=site_tundra)) + geom_point(size=5, aes(shape=Tundra, fill=Site)) + scale_shape_manual("Tundra", values=c(21,24)) + coord_flip() + xlab("Soil Depth (cm)") + ylab("Soil pH") + theme_minimal() + theme(axis.line = element_line(colour = 'black', size = 1), axis.ticks = element_line(colour = "black", size = 2), axis.text.x = element_text(size = 14), axis.text.y = element_text(size = 14), panel.background = element_blank(), axis.title.x = element_text(size = 16), axis.title.y = element_text(size = 16), panel.grid.major = element_blank(), panel.grid.minor = element_blank(), legend.position = "none") + scale_y_continuous(expand = c(0, 0), limits = c(4.0, 7.1), position = "right") + guides(linetype = FALSE)
Warning: `guides(<scale> = FALSE)` is deprecated. Please use `guides(<scale> = "none")` instead.
pH.plot


# Save as .png width=400, height=650 ("chem.pH.png")

EC Plotting

chem.plot$Increment<-factor(chem.plot$Increment, levels = c("90-100","80-90","70-80","60-70","50-60","40-50","30-40","20-30","10-20","0-10"))

EC.plot<-ggplot(data=chem.plot, aes(x=Increment, y=EC, group=site_tundra)) + geom_line(aes(linetype=site_tundra)) + geom_point(size=5, aes(shape=Tundra, fill=Site)) + scale_shape_manual("Tundra", values=c(21,24)) + coord_flip() + xlab("Soil Depth (cm)") + ylab("EC (uS/cm)") + theme_minimal() + theme(axis.line = element_line(colour = 'black', size = 1), axis.ticks = element_line(colour = "black", size = 2), axis.text.x = element_text(size = 14), axis.text.y = element_blank(), panel.background = element_blank(), axis.title.x = element_text(size = 16), axis.title.y = element_blank(), panel.grid.major = element_blank(), panel.grid.minor = element_blank(), legend.position = "none") + scale_y_continuous(expand = c(0, 0), limits = c(0, 205), position = "right")

EC.plot


# Save as .png width=350, height=650 ("chem.EC.png")

GWC Plotting

chem.plot$Increment<-factor(chem.plot$Increment, levels = c("90-100","80-90","70-80","60-70","50-60","40-50","30-40","20-30","10-20","0-10"))

GWC.plot<-ggplot(data=chem.plot, aes(x=Increment, y=GWC, group=site_tundra)) + geom_line(aes(linetype=site_tundra)) + geom_point(size=5, aes(shape=Tundra, fill=Site)) + scale_shape_manual("Tundra", values=c(21,24)) + coord_flip() + xlab("Soil Depth (cm)") + ylab("GWC (%)") + theme_minimal() + theme(axis.line = element_line(colour = 'black', size = 1), axis.ticks = element_line(colour = "black", size = 2), axis.text.x = element_text(size = 14), axis.text.y = element_blank(), panel.background = element_blank(), axis.title.x = element_text(size = 16), axis.title.y = element_blank(), panel.grid.major = element_blank(), panel.grid.minor = element_blank(), legend.position = "none") + scale_y_continuous(expand = c(0, 0), limits = c(0, 105), position = "right")

GWC.plot


# Save as .png width=350, height=650 ("chem.GWC.png")

OC Plotting

chem.plot$Increment<-factor(chem.plot$Increment, levels = c("90-100","80-90","70-80","60-70","50-60","40-50","30-40","20-30","10-20","0-10"))

OC.plot<-ggplot(data=chem.plot, aes(x=Increment, y=OC, group=site_tundra)) + geom_line(aes(linetype=site_tundra)) + geom_point(size=5, aes(shape=Tundra, fill=Site)) + scale_shape_manual("Tundra", values=c(21,24)) + coord_flip() + xlab("Soil Depth (cm)") + ylab("OC (%)") + theme_minimal() + theme(axis.line = element_line(colour = 'black', size = 1), axis.ticks = element_line(colour = "black", size = 2), axis.text.x = element_text(size = 14), axis.text.y = element_blank(), panel.background = element_blank(), axis.title.x = element_text(size = 16), axis.title.y = element_blank(), panel.grid.major = element_blank(), panel.grid.minor = element_blank(), legend.text = element_text(size=14), legend.title = element_text(size=16)) + scale_y_continuous(expand = c(0, 0), limits = c(0, 52), position = "right") + guides(linetype = FALSE)
Warning: `guides(<scale> = FALSE)` is deprecated. Please use `guides(<scale> = "none")` instead.
OC.plot


# Save as .png width=450, height=650 ("chem.OC.png")

Save the soil chemistry plots together

soil.chem.plot <- (pH.plot | EC.plot | GWC.plot | OC.plot) + plot_annotation(tag_levels = "A")
soil.chem.plot


# Save as .eps image (width = 1000, height = 500; "soil.chem.eps")

Statistics

Metadata Stats

Statistics on Environmental Differences Across Sites

#Create matrix of numeric columns
env.bind.mat<-as.matrix(cbind(asv.env[,8:12]))

# MANOVA
env.manova<-manova(env.bind.mat~site_tundra, data=asv.env)
env.man.sum<-summary.aov(env.manova)
env.man.sum
 Response pH :
            Df  Sum Sq Mean Sq F value    Pr(>F)    
site_tundra  5 14.7356 2.94712  21.959 4.521e-11 ***
Residuals   45  6.0396 0.13421                      
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

 Response EC :
            Df Sum Sq Mean Sq F value   Pr(>F)   
site_tundra  5  28901  5780.2  4.3622 0.002538 **
Residuals   45  59628  1325.1                    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

 Response GWC :
            Df Sum Sq Mean Sq F value    Pr(>F)    
site_tundra  5  11724 2344.80  9.5988 2.765e-06 ***
Residuals   45  10993  244.28                      
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

 Response OM :
            Df Sum Sq Mean Sq F value    Pr(>F)    
site_tundra  5  22945  4589.0  12.941 8.072e-08 ***
Residuals   45  15957   354.6                      
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

 Response OC :
            Df Sum Sq Mean Sq F value    Pr(>F)    
site_tundra  5 4599.6  919.91   15.71 6.187e-09 ***
Residuals   45 2635.1   58.56                      
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Run individual ANOVA on environmental factors with significant site differences to get at Post-hoc analysis

# pH ANOVA with Post-Hoc for Site Differences
env.pH<-aov(pH~Site*Tundra, data=asv.env)
TukeyHSD(env.pH)
  Tukey multiple comparisons of means
    95% family-wise confidence level

Fit: aov(formula = pH ~ Site * Tundra, data = asv.env)

$Site
                      diff         lwr        upr     p adj
Sagwon-Imnavait  1.1269853  0.81771910  1.4362515 0.0000000
Toolik-Imnavait  0.2732353 -0.02704943  0.5735200 0.0811416
Toolik-Sagwon   -0.8537500 -1.15882256 -0.5486774 0.0000001

$Tundra
             diff        lwr         upr     p adj
WS-MAT -0.2521673 -0.4588512 -0.04548337 0.0179161

$`Site:Tundra`
                                diff        lwr         upr     p adj
Sagwon:MAT-Imnavait:MAT   0.95285714  0.4034225  1.50229179 0.0000754
Toolik:MAT-Imnavait:MAT  -0.29380952 -0.8432442  0.25562512 0.6083047
Imnavait:WS-Imnavait:MAT -0.67214286 -1.2094242 -0.13486151 0.0067958
Sagwon:WS-Imnavait:MAT    0.44714286 -0.1356206  1.02990631 0.2221141
Toolik:WS-Imnavait:MAT    0.04952381 -0.4999108  0.59895846 0.9997983
Toolik:MAT-Sagwon:MAT    -1.24666667 -1.7606157 -0.73271761 0.0000001
Imnavait:WS-Sagwon:MAT   -1.62500000 -2.1259356 -1.12406443 0.0000000
Sagwon:WS-Sagwon:MAT     -0.50571429 -1.0551489  0.04372036 0.0871509
Toolik:WS-Sagwon:MAT     -0.90333333 -1.4172824 -0.38938428 0.0000599
Imnavait:WS-Toolik:MAT   -0.37833333 -0.8792689  0.12260224 0.2370564
Sagwon:WS-Toolik:MAT      0.74095238  0.1915177  1.29038703 0.0028931
Toolik:WS-Toolik:MAT      0.34333333 -0.1706157  0.85728239 0.3650193
Sagwon:WS-Imnavait:WS     1.11928571  0.5820044  1.65656707 0.0000023
Toolik:WS-Imnavait:WS     0.72166667  0.2207311  1.22260224 0.0012536
Toolik:WS-Sagwon:WS      -0.39761905 -0.9470537  0.15181560 0.2794650
# EC ANOVA with Post-Hoc for Site Differences
env.EC<-aov(EC~Site*Tundra, data=asv.env)
TukeyHSD(env.EC)
  Tukey multiple comparisons of means
    95% family-wise confidence level

Fit: aov(formula = EC ~ Site * Tundra, data = asv.env)

$Site
                      diff       lwr       upr     p adj
Sagwon-Imnavait  48.040074  17.31060  78.76954 0.0012762
Toolik-Imnavait   2.108824 -27.72823  31.94587 0.9839596
Toolik-Sagwon   -45.931250 -76.24403 -15.61847 0.0018069

$Tundra
            diff       lwr      upr     p adj
WS-MAT -13.84301 -34.37965 6.693628 0.1813492

$`Site:Tundra`
                                diff         lwr        upr     p adj
Sagwon:MAT-Imnavait:MAT   62.4365079    7.843293 117.029723 0.0166027
Toolik:MAT-Imnavait:MAT    8.5809524  -46.012263  63.174167 0.9970249
Imnavait:WS-Imnavait:MAT   0.7742857  -52.611347  54.159919 1.0000000
Sagwon:WS-Imnavait:MAT    30.5714286  -27.333420  88.476277 0.6211644
Toolik:WS-Imnavait:MAT    -3.4523810  -58.045596  51.140834 0.9999649
Toolik:MAT-Sagwon:MAT    -53.8555556 -104.922832  -2.788279 0.0333490
Imnavait:WS-Sagwon:MAT   -61.6622222 -111.436446 -11.887998 0.0075396
Sagwon:WS-Sagwon:MAT     -31.8650794  -86.458294  22.728136 0.5154641
Toolik:WS-Sagwon:MAT     -65.8888889 -116.956165 -14.821612 0.0048420
Imnavait:WS-Toolik:MAT    -7.8066667  -57.580891  41.967558 0.9970551
Sagwon:WS-Toolik:MAT      21.9904762  -32.602739  76.583691 0.8351243
Toolik:WS-Toolik:MAT     -12.0333333  -63.100610  39.033943 0.9808473
Sagwon:WS-Imnavait:WS     29.7971429  -23.588490  83.182776 0.5638103
Toolik:WS-Imnavait:WS     -4.2266667  -54.000891  45.547558 0.9998495
Toolik:WS-Sagwon:WS      -34.0238095  -88.617025  20.569405 0.4425236
# GWC ANOVA with Post-Hoc for Site Differences
env.GWC<-aov(GWC~Site*Tundra, data=asv.env)
TukeyHSD(env.GWC)
  Tukey multiple comparisons of means
    95% family-wise confidence level

Fit: aov(formula = GWC ~ Site * Tundra, data = asv.env)

$Site
                    diff        lwr      upr     p adj
Sagwon-Imnavait 1.203432 -11.990711 14.39757 0.9734369
Toolik-Imnavait 7.346686  -5.464283 20.15765 0.3546789
Toolik-Sagwon   6.143254  -6.871977 19.15848 0.4925096

$Tundra
           diff      lwr      upr p adj
WS-MAT 28.94202 20.12432 37.75972     0

$`Site:Tundra`
                               diff         lwr      upr     p adj
Sagwon:MAT-Imnavait:MAT   7.3913179 -16.0490695 30.83171 0.9342732
Toolik:MAT-Imnavait:MAT  16.2975075  -7.1428798 39.73789 0.3214960
Imnavait:WS-Imnavait:MAT 34.3479734  11.4260789 57.26987 0.0007318
Sagwon:WS-Imnavait:MAT   39.4297275  14.5674422 64.29201 0.0003192
Toolik:WS-Imnavait:MAT   38.8052440  15.3648566 62.24563 0.0001631
Toolik:MAT-Sagwon:MAT     8.9061897 -13.0202850 30.83266 0.8302900
Imnavait:WS-Sagwon:MAT   26.9566555   5.5853716 48.32794 0.0062186
Sagwon:WS-Sagwon:MAT     32.0384096   8.5980222 55.47880 0.0024569
Toolik:WS-Sagwon:MAT     31.4139261   9.4874515 53.34040 0.0013488
Imnavait:WS-Toolik:MAT   18.0504658  -3.3208181 39.42175 0.1418070
Sagwon:WS-Toolik:MAT     23.1322200  -0.3081674 46.57261 0.0549681
Toolik:WS-Toolik:MAT     22.5077364   0.5812618 44.43421 0.0411684
Sagwon:WS-Imnavait:WS     5.0817541 -17.8401403 28.00365 0.9854035
Toolik:WS-Imnavait:WS     4.4572706 -16.9140133 25.82855 0.9889215
Toolik:WS-Sagwon:WS      -0.6244835 -24.0648709 22.81590 0.9999995
# OM ANOVA with Post-Hoc for Site Differences
env.OM<-aov(OM~Site*Tundra, data=asv.env)
TukeyHSD(env.OM)
  Tukey multiple comparisons of means
    95% family-wise confidence level

Fit: aov(formula = OM ~ Site * Tundra, data = asv.env)

$Site
                      diff       lwr      upr     p adj
Sagwon-Imnavait  4.8052099 -11.09141 20.70183 0.7455468
Toolik-Imnavait  4.0444377 -11.39052 19.47940 0.8016619
Toolik-Sagwon   -0.7607722 -16.44183 14.92029 0.9924080

$Tundra
           diff      lwr      upr p adj
WS-MAT 40.37454 29.75077 50.99832     0

$`Site:Tundra`
                                diff         lwr      upr     p adj
Sagwon:MAT-Imnavait:MAT   -0.4904492 -28.7319864 27.75109 0.9999999
Toolik:MAT-Imnavait:MAT    7.7258999 -20.5156373 35.96744 0.9634286
Imnavait:WS-Imnavait:MAT  34.0033835   6.3865389 61.62023 0.0080412
Sagwon:WS-Imnavait:MAT    57.3327492  27.3780756 87.28742 0.0000126
Toolik:WS-Imnavait:MAT    40.3669560  12.1254188 68.60849 0.0013909
Toolik:MAT-Sagwon:MAT      8.2163491 -18.2011899 34.63389 0.9378073
Imnavait:WS-Sagwon:MAT    34.4938327   8.7452006 60.24246 0.0031331
Sagwon:WS-Sagwon:MAT      57.8231984  29.5816613 86.06474 0.0000033
Toolik:WS-Sagwon:MAT      40.8574052  14.4398661 67.27494 0.0004646
Imnavait:WS-Toolik:MAT    26.2774836   0.5288515 52.02612 0.0430269
Sagwon:WS-Toolik:MAT      49.6068493  21.3653122 77.84839 0.0000606
Toolik:WS-Toolik:MAT      32.6410561   6.2235170 59.05860 0.0077512
Sagwon:WS-Imnavait:WS     23.3293658  -4.2874788 50.94621 0.1416870
Toolik:WS-Imnavait:WS      6.3635725 -19.3850595 32.11220 0.9763816
Toolik:WS-Sagwon:WS      -16.9657933 -45.2073304 11.27574 0.4836118
# OC ANOVA with Post-Hoc for Site Differences
env.OC<-aov(OC~Site*Tundra, data=asv.env)
TukeyHSD(env.OC)
  Tukey multiple comparisons of means
    95% family-wise confidence level

Fit: aov(formula = OC ~ Site * Tundra, data = asv.env)

$Site
                       diff       lwr      upr     p adj
Sagwon-Imnavait -0.02693466 -6.486824 6.432954 0.9999437
Toolik-Imnavait -0.22250958 -6.494796 6.049776 0.9959332
Toolik-Sagwon   -0.19557492 -6.567868 6.176718 0.9969544

$Tundra
           diff      lwr      upr p adj
WS-MAT 18.28222 13.96504 22.59939     0

$`Site:Tundra`
                               diff        lwr       upr     p adj
Sagwon:MAT-Imnavait:MAT  -2.7665803 -14.243059  8.709899 0.9788234
Toolik:MAT-Imnavait:MAT  -0.2301445 -11.706623 11.246334 0.9999999
Imnavait:WS-Imnavait:MAT 14.1632508   2.940628 25.385874 0.0061824
Sagwon:WS-Imnavait:MAT   22.5384932  10.365849 34.711137 0.0000236
Toolik:WS-Imnavait:MAT   16.4477734   4.971295 27.924252 0.0013429
Toolik:MAT-Sagwon:MAT     2.5364358  -8.198827 13.271699 0.9806182
Imnavait:WS-Sagwon:MAT   16.9298311   6.466391 27.393271 0.0002345
Sagwon:WS-Sagwon:MAT     25.3050734  13.828595 36.781552 0.0000007
Toolik:WS-Sagwon:MAT     19.2143536   8.479091 29.949617 0.0000436
Imnavait:WS-Toolik:MAT   14.3933953   3.929955 24.856835 0.0022699
Sagwon:WS-Toolik:MAT     22.7686377  11.292159 34.245116 0.0000062
Toolik:WS-Toolik:MAT     16.6779179   5.942655 27.413181 0.0004348
Sagwon:WS-Imnavait:WS     8.3752423  -2.847381 19.597866 0.2486409
Toolik:WS-Imnavait:WS     2.2845225  -8.178917 12.747963 0.9863730
Toolik:WS-Sagwon:WS      -6.0907198 -17.567199  5.385759 0.6159537

Statistics on Environmental Differences by Soil Type (Org vs. Min)

# MANOVA by Soil Type
env.manova.2<-manova(env.bind.mat~Soil, data=asv.env)
env.man.sum.2<-summary.aov(env.manova.2)
env.man.sum.2
 Response pH :
            Df  Sum Sq Mean Sq F value  Pr(>F)  
Soil         1  1.8816 1.88163    4.88 0.03188 *
Residuals   49 18.8935 0.38558                  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

 Response EC :
            Df Sum Sq Mean Sq F value Pr(>F)
Soil         1   4179  4178.8  2.4275 0.1257
Residuals   49  84350  1721.4               

 Response GWC :
            Df Sum Sq Mean Sq F value    Pr(>F)    
Soil         1  11690   11690  51.945 3.169e-09 ***
Residuals   49  11027     225                      
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

 Response OM :
            Df Sum Sq Mean Sq F value   Pr(>F)    
Soil         1  23705 23705.3  76.434 1.43e-11 ***
Residuals   49  15197   310.1                     
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

 Response OC :
            Df Sum Sq Mean Sq F value    Pr(>F)    
Soil         1 4616.8  4616.8  86.414 2.145e-12 ***
Residuals   49 2617.9    53.4                      
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Reproducibility

The session information is provided for full reproducibility.

devtools::session_info()
─ Session info ────────────────────────────────────────────────────────────────────
 setting  value
 version  R version 4.2.1 (2022-06-23)
 os       macOS Monterey 12.6
 system   x86_64, darwin17.0
 ui       RStudio
 language (EN)
 collate  en_US.UTF-8
 ctype    en_US.UTF-8
 tz       America/Los_Angeles
 date     2022-09-22
 rstudio  2022.07.1+554 Spotted Wakerobin (desktop)
 pandoc   2.18 @ /Applications/RStudio.app/Contents/MacOS/quarto/bin/tools/ (via rmarkdown)

─ Packages ────────────────────────────────────────────────────────────────────────
 package          * version  date (UTC) lib source
 abind              1.4-5    2016-07-21 [1] CRAN (R 4.2.0)
 ade4               1.7-19   2022-04-19 [1] CRAN (R 4.2.0)
 agricolae        * 1.3-5    2021-06-06 [1] CRAN (R 4.2.0)
 AlgDesign          1.2.1    2022-05-25 [1] CRAN (R 4.2.0)
 ape                5.6-2    2022-03-02 [1] CRAN (R 4.2.0)
 backports          1.4.1    2021-12-13 [1] CRAN (R 4.2.0)
 base64enc          0.1-3    2015-07-28 [1] CRAN (R 4.2.0)
 Biobase            2.56.0   2022-04-26 [1] Bioconductor
 BiocGenerics       0.42.0   2022-04-26 [1] Bioconductor
 biomformat         1.24.0   2022-04-26 [1] Bioconductor
 Biostrings         2.64.1   2022-08-18 [1] Bioconductor
 bitops             1.0-7    2021-04-24 [1] CRAN (R 4.2.0)
 broom              1.0.0    2022-07-01 [1] CRAN (R 4.2.0)
 bslib              0.4.0    2022-07-16 [1] CRAN (R 4.2.0)
 cachem             1.0.6    2021-08-19 [1] CRAN (R 4.2.0)
 callr              3.7.2    2022-08-22 [1] CRAN (R 4.2.0)
 car                3.1-0    2022-06-15 [1] CRAN (R 4.2.0)
 carData            3.0-5    2022-01-06 [1] CRAN (R 4.2.0)
 checkmate          2.1.0    2022-04-21 [1] CRAN (R 4.2.0)
 cli                3.3.0    2022-04-25 [1] CRAN (R 4.2.0)
 cluster            2.1.3    2022-03-28 [1] CRAN (R 4.2.1)
 codetools          0.2-18   2020-11-04 [1] CRAN (R 4.2.1)
 colorspace         2.0-3    2022-02-21 [1] CRAN (R 4.2.0)
 combinat           0.0-8    2012-10-29 [1] CRAN (R 4.2.0)
 corrr            * 0.4.4    2022-08-16 [1] CRAN (R 4.2.0)
 crayon             1.5.1    2022-03-26 [1] CRAN (R 4.2.0)
 data.table       * 1.14.2   2021-09-27 [1] CRAN (R 4.2.0)
 deldir             1.0-6    2021-10-23 [1] CRAN (R 4.2.0)
 devtools         * 2.4.4    2022-07-20 [1] CRAN (R 4.2.0)
 digest             0.6.29   2021-12-01 [1] CRAN (R 4.2.0)
 dplyr            * 1.0.9    2022-04-28 [1] CRAN (R 4.2.0)
 DT                 0.24     2022-08-09 [1] CRAN (R 4.2.0)
 ellipsis           0.3.2    2021-04-29 [1] CRAN (R 4.2.0)
 evaluate           0.16     2022-08-09 [1] CRAN (R 4.2.0)
 fansi              1.0.3    2022-03-24 [1] CRAN (R 4.2.0)
 farver             2.1.1    2022-07-06 [1] CRAN (R 4.2.0)
 fastmap            1.1.0    2021-01-25 [1] CRAN (R 4.2.0)
 forcats          * 0.5.2    2022-08-19 [1] CRAN (R 4.2.0)
 foreach            1.5.2    2022-02-02 [1] CRAN (R 4.2.0)
 foreign            0.8-82   2022-01-16 [1] CRAN (R 4.2.1)
 Formula            1.2-4    2020-10-16 [1] CRAN (R 4.2.0)
 fs                 1.5.2    2021-12-08 [1] CRAN (R 4.2.0)
 generics           0.1.3    2022-07-05 [1] CRAN (R 4.2.0)
 GenomeInfoDb       1.32.3   2022-08-09 [1] Bioconductor
 GenomeInfoDbData   1.2.8    2022-08-29 [1] Bioconductor
 ggalluvial       * 0.12.3   2020-12-05 [1] CRAN (R 4.2.0)
 ggdendro         * 0.1.23   2022-02-16 [1] CRAN (R 4.2.0)
 ggplot2          * 3.3.6    2022-05-03 [1] CRAN (R 4.2.0)
 ggpubr           * 0.4.0    2020-06-27 [1] CRAN (R 4.2.0)
 ggsignif           0.6.3    2021-09-09 [1] CRAN (R 4.2.0)
 glue               1.6.2    2022-02-24 [1] CRAN (R 4.2.0)
 gridExtra        * 2.3      2017-09-09 [1] CRAN (R 4.2.0)
 gtable             0.3.0    2019-03-25 [1] CRAN (R 4.2.0)
 haven              2.5.1    2022-08-22 [1] CRAN (R 4.2.0)
 highr              0.9      2021-04-16 [1] CRAN (R 4.2.0)
 Hmisc              4.7-1    2022-08-15 [1] CRAN (R 4.2.0)
 hms                1.1.2    2022-08-19 [1] CRAN (R 4.2.0)
 htmlTable          2.4.1    2022-07-07 [1] CRAN (R 4.2.0)
 htmltools          0.5.3    2022-07-18 [1] CRAN (R 4.2.0)
 htmlwidgets        1.5.4    2021-09-08 [1] CRAN (R 4.2.0)
 httpuv             1.6.5    2022-01-05 [1] CRAN (R 4.2.0)
 igraph             1.3.4    2022-07-19 [1] CRAN (R 4.2.0)
 interp             1.1-3    2022-07-13 [1] CRAN (R 4.2.0)
 IRanges            2.30.1   2022-08-18 [1] Bioconductor
 iterators          1.0.14   2022-02-05 [1] CRAN (R 4.2.0)
 jpeg               0.1-9    2021-07-24 [1] CRAN (R 4.2.0)
 jquerylib          0.1.4    2021-04-26 [1] CRAN (R 4.2.0)
 jsonlite           1.8.0    2022-02-22 [1] CRAN (R 4.2.0)
 klaR               1.7-1    2022-06-27 [1] CRAN (R 4.2.0)
 knitr            * 1.40     2022-08-24 [1] CRAN (R 4.2.0)
 labeling           0.4.2    2020-10-20 [1] CRAN (R 4.2.0)
 labelled           2.9.1    2022-05-05 [1] CRAN (R 4.2.0)
 later              1.3.0    2021-08-18 [1] CRAN (R 4.2.0)
 lattice          * 0.20-45  2021-09-22 [1] CRAN (R 4.2.1)
 latticeExtra       0.6-30   2022-07-04 [1] CRAN (R 4.2.0)
 lifecycle          1.0.1    2021-09-24 [1] CRAN (R 4.2.0)
 magrittr         * 2.0.3    2022-03-30 [1] CRAN (R 4.2.0)
 MASS               7.3-57   2022-04-22 [1] CRAN (R 4.2.1)
 Matrix             1.4-1    2022-03-23 [1] CRAN (R 4.2.1)
 memoise            2.0.1    2021-11-26 [1] CRAN (R 4.2.0)
 mgcv               1.8-40   2022-03-29 [1] CRAN (R 4.2.1)
 microeco         * 0.11.0   2022-06-22 [1] CRAN (R 4.2.0)
 mime               0.12     2021-09-28 [1] CRAN (R 4.2.0)
 miniUI             0.1.1.1  2018-05-18 [1] CRAN (R 4.2.0)
 multtest           2.52.0   2022-04-26 [1] Bioconductor
 munsell            0.5.0    2018-06-12 [1] CRAN (R 4.2.0)
 NADA               1.6-1.1  2020-03-22 [1] CRAN (R 4.2.0)
 nlme               3.1-157  2022-03-25 [1] CRAN (R 4.2.1)
 nnet               7.3-17   2022-01-16 [1] CRAN (R 4.2.1)
 patchwork        * 1.1.2    2022-08-19 [1] CRAN (R 4.2.0)
 permute          * 0.9-7    2022-01-27 [1] CRAN (R 4.2.0)
 pheatmap         * 1.0.12   2019-01-04 [1] CRAN (R 4.2.0)
 phyloseq           1.40.0   2022-04-26 [1] Bioconductor
 pillar             1.8.1    2022-08-19 [1] CRAN (R 4.2.0)
 pkgbuild           1.3.1    2021-12-20 [1] CRAN (R 4.2.0)
 pkgconfig          2.0.3    2019-09-22 [1] CRAN (R 4.2.0)
 pkgload            1.3.0    2022-06-27 [1] CRAN (R 4.2.0)
 plyr               1.8.7    2022-03-24 [1] CRAN (R 4.2.0)
 png                0.1-7    2013-12-03 [1] CRAN (R 4.2.0)
 prettyunits        1.1.1    2020-01-24 [1] CRAN (R 4.2.0)
 processx           3.7.0    2022-07-07 [1] CRAN (R 4.2.0)
 profvis            0.3.7    2020-11-02 [1] CRAN (R 4.2.0)
 promises           1.2.0.1  2021-02-11 [1] CRAN (R 4.2.0)
 ps                 1.7.1    2022-06-18 [1] CRAN (R 4.2.0)
 purrr              0.3.4    2020-04-17 [1] CRAN (R 4.2.0)
 pvclust          * 2.2-0    2019-11-19 [1] CRAN (R 4.2.0)
 qiime2R          * 0.99.6   2022-08-29 [1] Github (jbisanz/qiime2R@2a3cee1)
 questionr          0.7.7    2022-01-31 [1] CRAN (R 4.2.0)
 R6                 2.5.1    2021-08-19 [1] CRAN (R 4.2.0)
 RColorBrewer     * 1.1-3    2022-04-03 [1] CRAN (R 4.2.0)
 Rcpp               1.0.9    2022-07-08 [1] CRAN (R 4.2.0)
 RCurl              1.98-1.8 2022-07-30 [1] CRAN (R 4.2.0)
 remotes            2.4.2    2021-11-30 [1] CRAN (R 4.2.0)
 reshape2           1.4.4    2020-04-09 [1] CRAN (R 4.2.0)
 rhdf5              2.40.0   2022-04-26 [1] Bioconductor
 rhdf5filters       1.8.0    2022-04-26 [1] Bioconductor
 Rhdf5lib           1.18.2   2022-05-17 [1] Bioconductor
 rlang              1.0.4    2022-07-12 [1] CRAN (R 4.2.0)
 rmarkdown          2.16     2022-08-24 [1] CRAN (R 4.2.0)
 rpart              4.1.16   2022-01-24 [1] CRAN (R 4.2.1)
 rsconnect          0.8.27   2022-07-12 [1] CRAN (R 4.2.1)
 rstatix            0.7.0    2021-02-13 [1] CRAN (R 4.2.0)
 rstudioapi         0.14     2022-08-22 [1] CRAN (R 4.2.0)
 S4Vectors          0.34.0   2022-04-26 [1] Bioconductor
 sass               0.4.2    2022-07-16 [1] CRAN (R 4.2.0)
 scales             1.2.1    2022-08-20 [1] CRAN (R 4.2.0)
 sessioninfo        1.2.2    2021-12-06 [1] CRAN (R 4.2.0)
 shiny              1.7.2    2022-07-19 [1] CRAN (R 4.2.0)
 stringi            1.7.8    2022-07-11 [1] CRAN (R 4.2.0)
 stringr            1.4.1    2022-08-20 [1] CRAN (R 4.2.0)
 survival           3.3-1    2022-03-03 [1] CRAN (R 4.2.1)
 tibble             3.1.8    2022-07-22 [1] CRAN (R 4.2.0)
 tidyr            * 1.2.0    2022-02-01 [1] CRAN (R 4.2.0)
 tidyselect         1.1.2    2022-02-21 [1] CRAN (R 4.2.0)
 truncnorm          1.0-8    2018-02-27 [1] CRAN (R 4.2.0)
 UpSetR           * 1.4.0    2019-05-22 [1] CRAN (R 4.2.0)
 urlchecker         1.0.1    2021-11-30 [1] CRAN (R 4.2.0)
 usethis          * 2.1.6    2022-05-25 [1] CRAN (R 4.2.0)
 utf8               1.2.2    2021-07-24 [1] CRAN (R 4.2.0)
 vctrs              0.4.1    2022-04-13 [1] CRAN (R 4.2.0)
 vegan            * 2.6-2    2022-04-17 [1] CRAN (R 4.2.0)
 withr              2.5.0    2022-03-03 [1] CRAN (R 4.2.0)
 xfun               0.32     2022-08-10 [1] CRAN (R 4.2.0)
 xtable             1.8-4    2019-04-21 [1] CRAN (R 4.2.0)
 XVector            0.36.0   2022-04-26 [1] Bioconductor
 yaml               2.3.5    2022-02-21 [1] CRAN (R 4.2.0)
 zCompositions      1.4.0-1  2022-03-26 [1] CRAN (R 4.2.0)
 zlibbioc           1.42.0   2022-04-26 [1] Bioconductor

 [1] /Library/Frameworks/R.framework/Versions/4.2/Resources/library

───────────────────────────────────────────────────────────────────────────────────
LS0tCnRpdGxlOiAiTWljcm9iaWFsIFJlc3BvbnNlIHRvIEludGVybWl0dGVudCBQZXJtYWZyb3N0IFRoYXcgLS0gU29pbCBDaGVtaXN0cnkiCmF1dGhvcjogJ0F1dGhvcnM6IFtLYXJsIEouIFJvbWFub3dpY3pdKGh0dHBzOi8va3JvbWFub3dpY3ouZ2l0aHViLmlvLykgYW5kIEdlb3JnZSBXLiBLbGluZycKb3V0cHV0OgogIGh0bWxfbm90ZWJvb2s6CiAgICB0aGVtZTogc3BhY2VsYWIKICAgIHRvYzogeWVzCiAgICB0b2NfZGVwdGg6IDUKICAgIHRvY19mbG9hdDoKICAgICAgY29sbGFwc2VkOiB5ZXMKICAgICAgc21vb3RoX3Njcm9sbDogeWVzCiAgaHRtbF9kb2N1bWVudDoKICAgIHRvYzogeWVzCiAgICB0b2NfZGVwdGg6ICc1JwogICAgZGZfcHJpbnQ6IHBhZ2VkCiAgcGRmX2RvY3VtZW50OgogICAgdG9jOiB5ZXMKICAgIHRvY19kZXB0aDogJzUnCi0tLQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KCioqUiBOb3RlYm9vazoqKiA8Zm9udCBjb2xvcj0iZ3JlZW4iPlByb3ZpZGVzIHJlcHJvZHVjaWJsZSBhbmFseXNpcyBmb3IgKipTb2lsIENoZW1pc3RyeSoqIGRhdGEgaW4gdGhlIGZvbGxvd2luZyBtYW51c2NyaXB0OjwvZm9udD4KCioqQ2l0YXRpb246KiogUm9tYW5vd2ljeiBLSiBhbmQgS2xpbmcgR1cuICgqKipJbiBQcmVzcyoqKikgU3VtbWVyIHRoYXcgZHVyYXRpb24gaXMgYSBzdHJvbmcgcHJlZGljdG9yIG9mIHRoZSBzb2lsIG1pY3JvYmlvbWUgYW5kIGl0cyByZXNwb25zZSB0byBwZXJtYWZyb3N0IHRoYXcgaW4gYXJjdGljIHR1bmRyYS4gKioqRW52aXJvbm1lbnRhbCBNaWNyb2Jpb2xvZ3kqKiouIFtodHRwczovL2RvaS5vcmcvMTAuMTExMS8xNDYyLTI5MjAuMTYyMThdKGh0dHBzOi8vZG9pLm9yZy8xMC4xMTExLzE0NjItMjkyMC4xNjIxOCkKCioqR2l0SHViIFJlcG9zaXRvcnk6KiogW2h0dHBzOi8vZ2l0aHViLmNvbS9rcm9tYW5vd2ljei8yMDIyLUFubnVhbC1UaGF3LU1pY3JvYmVzXShodHRwczovL2dpdGh1Yi5jb20va3JvbWFub3dpY3ovMjAyMi1Bbm51YWwtVGhhdy1NaWNyb2JlcykKCioqTkNCSSBCaW9Qcm9qZWN0OioqIFtodHRwczovL3d3dy5uY2JpLm5sbS5uaWguZ292L2Jpb3Byb2plY3QvP3Rlcm09UFJKTkE3OTQ4NTddKGh0dHBzOi8vd3d3Lm5jYmkubmxtLm5paC5nb3YvYmlvcHJvamVjdC8/dGVybT1QUkpOQTc5NDg1NykKCioqQWNjZXB0ZWQgZm9yIFB1YmxpY2F0aW9uOioqIDxmb250IGNvbG9yPSJncmVlbiI+MjIgU2VwdGVtYmVyIDIwMjI8L2ZvbnQ+ICpFbnZpcm9ubWVudGFsIE1pY3JvYmlvbG9neSoKCiMgRXhwZXJpbWVudAoKVGhpcyBSIE5vdGVib29rIHByb3ZpZGVzIGNvbXBsZXRlIHJlcHJvZHVjaWJpbGl0eSBvZiB0aGUgZGF0YSBhbmFseXNpcyBwcmVzZW50ZWQgaW4gKioqIlN1bW1lciB0aGF3IGR1cmF0aW9uIGlzIGEgc3Ryb25nIHByZWRpY3RvciBvZiB0aGUgc29pbCBtaWNyb2Jpb21lIGFuZCBpdHMgcmVzcG9uc2UgdG8gcGVybWFmcm9zdCB0aGF3IGluIGFyY3RpYyB0dW5kcmEiKioqIGJ5IFJvbWFub3dpY3ogYW5kIEtsaW5nLgoKPGZvbnQgY29sb3I9ImdyZWVuIj5UaGlzIHBpcGVsaW5lIHByb2Nlc3NlcyBzb2lsIGNoZW1pc3RyeSBkYXRhIHJlbGF0ZWQgdG8gdGhlIHNvaWwgc2FtcGxlcyBmcm9tIHdoaWNoIDE2UyByUk5BIGdlbmUgc2VxdWVuY2VzIHdlcmUgZ2VuZXJhdGVkIHVzaW5nIHRoZSBJbGx1bWluYSBNaVNlcSBwbGF0Zm9ybS48L2ZvbnQ+CgpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0KIyBTZXQgZ2xvYmFsIG9wdGlvbnMgZm9yIG5vdGVib29rCmtuaXRyOjpvcHRzX2tuaXQkc2V0KHJvb3QuZGlyID0gbm9ybWFsaXplUGF0aCgifi9EZXNrdG9wL1R1bmRyYVBybzE4IikpCmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvID0gVFJVRSkKYGBgCgpgYGB7ciBtZXNzYWdlPUZBTFNFLCByZXN1bHRzPSdoaWRlJywgd2FybmluZz1GQUxTRX0KIyBNYWtlIGEgdmVjdG9yIG9mIHJlcXVpcmVkIHBhY2thZ2VzCnJlcXVpcmVkLnBhY2thZ2VzIDwtIGMoImNvcnJyIiwiZGF0YS50YWJsZSIsImRldnRvb2xzIiwiZHBseXIiLCJmb3JjYXRzIiwiZ2dhbGx1dmlhbCIsImdnZGVuZHJvIiwiZ2dwbG90MiIsImdncHViciIsImdyaWQiLCJncmlkRXh0cmEiLCJrbml0ciIsIm1hZ3JpdHRyIiwibWljcm9lY28iLCJwYXRjaHdvcmsiLCJwaGVhdG1hcCIsInB2Y2x1c3QiLCJxaWltZTJSIiwiUkNvbG9yQnJld2VyIiwidGlkeXIiLCJVcFNldFIiLCJ2ZWdhbiIpCgojIExvYWQgcmVxdWlyZWQgcGFja2FnZXMKbGFwcGx5KHJlcXVpcmVkLnBhY2thZ2VzLCBsaWJyYXJ5LCBjaGFyYWN0ZXIub25seSA9IFRSVUUpCmBgYAoKYGBge3IgaW5jbHVkZT1GQUxTRX0KIyBzZXQuc2VlZCBpcyB1c2VkIHRvIGZpeCB0aGUgcmFuZG9tIG51bWJlciBnZW5lcmF0aW9uIHRvIG1ha2UgdGhlIHJlc3VsdHMgcmVwZWF0YWJsZQpzZXQuc2VlZCgxMjMpCmBgYAoKIyBTb2lsIENoZW1pc3RyeQoKSW1wb3J0IHRoZSBtZXRhZGF0YSBtZXRyaWNzCmBgYHtyfQojIExvYWQgaW4gdGhlIGVudmlyb25tZW50YWwgbWV0YWRhdGEgKHF1YWxpdGF0aXZlIGFuZCBxdWFudGl0YXRpdmUgZGF0YSkKYXN2LmVudiA8LSByZWFkLmNzdigiUUlJTUUvUl9EYXRhL21ldGFkYXRhLmNzdiIpCgojIENvbnZlcnQgZmlyc3QgY29sdW1uIHRvIHJvdyBuYW1lcwpyb3duYW1lcyhhc3YuZW52KTwtYXN2LmVudlssMV0KYXN2LmVudjwtYXN2LmVudlssLTFdCgojIE1ha2UgZGF0YWZyYW1lCmFzdi5lbnYgPC0gYXMuZGF0YS5mcmFtZShhc3YuZW52KQpgYGAKCiMjIHBIIFBsb3R0aW5nCmBgYHtyfQpjaGVtLnBsb3Q8LWFzdi5lbnYKCmNoZW0ucGxvdCRJbmNyZW1lbnQ8LWZhY3RvcihjaGVtLnBsb3QkSW5jcmVtZW50LCBsZXZlbHMgPSBjKCI5MC0xMDAiLCI4MC05MCIsIjcwLTgwIiwiNjAtNzAiLCI1MC02MCIsIjQwLTUwIiwiMzAtNDAiLCIyMC0zMCIsIjEwLTIwIiwiMC0xMCIpKQoKcEgucGxvdDwtZ2dwbG90KGRhdGE9Y2hlbS5wbG90LCBhZXMoeD1JbmNyZW1lbnQsIHk9cEgsIGdyb3VwPXNpdGVfdHVuZHJhKSkgKyBnZW9tX2xpbmUoYWVzKGxpbmV0eXBlPXNpdGVfdHVuZHJhKSkgKyBnZW9tX3BvaW50KHNpemU9NSwgYWVzKHNoYXBlPVR1bmRyYSwgZmlsbD1TaXRlKSkgKyBzY2FsZV9zaGFwZV9tYW51YWwoIlR1bmRyYSIsIHZhbHVlcz1jKDIxLDI0KSkgKyBjb29yZF9mbGlwKCkgKyB4bGFiKCJTb2lsIERlcHRoIChjbSkiKSArIHlsYWIoIlNvaWwgcEgiKSArIHRoZW1lX21pbmltYWwoKSArIHRoZW1lKGF4aXMubGluZSA9IGVsZW1lbnRfbGluZShjb2xvdXIgPSAnYmxhY2snLCBzaXplID0gMSksIGF4aXMudGlja3MgPSBlbGVtZW50X2xpbmUoY29sb3VyID0gImJsYWNrIiwgc2l6ZSA9IDIpLCBheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChzaXplID0gMTQpLCBheGlzLnRleHQueSA9IGVsZW1lbnRfdGV4dChzaXplID0gMTQpLCBwYW5lbC5iYWNrZ3JvdW5kID0gZWxlbWVudF9ibGFuaygpLCBheGlzLnRpdGxlLnggPSBlbGVtZW50X3RleHQoc2l6ZSA9IDE2KSwgYXhpcy50aXRsZS55ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxNiksIHBhbmVsLmdyaWQubWFqb3IgPSBlbGVtZW50X2JsYW5rKCksIHBhbmVsLmdyaWQubWlub3IgPSBlbGVtZW50X2JsYW5rKCksIGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIikgKyBzY2FsZV95X2NvbnRpbnVvdXMoZXhwYW5kID0gYygwLCAwKSwgbGltaXRzID0gYyg0LjAsIDcuMSksIHBvc2l0aW9uID0gInJpZ2h0IikgKyBndWlkZXMobGluZXR5cGUgPSBGQUxTRSkKCnBILnBsb3QKCiMgU2F2ZSBhcyAucG5nIHdpZHRoPTQwMCwgaGVpZ2h0PTY1MCAoImNoZW0ucEgucG5nIikKYGBgCgojIyBFQyBQbG90dGluZwpgYGB7cn0KY2hlbS5wbG90JEluY3JlbWVudDwtZmFjdG9yKGNoZW0ucGxvdCRJbmNyZW1lbnQsIGxldmVscyA9IGMoIjkwLTEwMCIsIjgwLTkwIiwiNzAtODAiLCI2MC03MCIsIjUwLTYwIiwiNDAtNTAiLCIzMC00MCIsIjIwLTMwIiwiMTAtMjAiLCIwLTEwIikpCgpFQy5wbG90PC1nZ3Bsb3QoZGF0YT1jaGVtLnBsb3QsIGFlcyh4PUluY3JlbWVudCwgeT1FQywgZ3JvdXA9c2l0ZV90dW5kcmEpKSArIGdlb21fbGluZShhZXMobGluZXR5cGU9c2l0ZV90dW5kcmEpKSArIGdlb21fcG9pbnQoc2l6ZT01LCBhZXMoc2hhcGU9VHVuZHJhLCBmaWxsPVNpdGUpKSArIHNjYWxlX3NoYXBlX21hbnVhbCgiVHVuZHJhIiwgdmFsdWVzPWMoMjEsMjQpKSArIGNvb3JkX2ZsaXAoKSArIHhsYWIoIlNvaWwgRGVwdGggKGNtKSIpICsgeWxhYigiRUMgKHVTL2NtKSIpICsgdGhlbWVfbWluaW1hbCgpICsgdGhlbWUoYXhpcy5saW5lID0gZWxlbWVudF9saW5lKGNvbG91ciA9ICdibGFjaycsIHNpemUgPSAxKSwgYXhpcy50aWNrcyA9IGVsZW1lbnRfbGluZShjb2xvdXIgPSAiYmxhY2siLCBzaXplID0gMiksIGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxNCksIGF4aXMudGV4dC55ID0gZWxlbWVudF9ibGFuaygpLCBwYW5lbC5iYWNrZ3JvdW5kID0gZWxlbWVudF9ibGFuaygpLCBheGlzLnRpdGxlLnggPSBlbGVtZW50X3RleHQoc2l6ZSA9IDE2KSwgYXhpcy50aXRsZS55ID0gZWxlbWVudF9ibGFuaygpLCBwYW5lbC5ncmlkLm1ham9yID0gZWxlbWVudF9ibGFuaygpLCBwYW5lbC5ncmlkLm1pbm9yID0gZWxlbWVudF9ibGFuaygpLCBsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpICsgc2NhbGVfeV9jb250aW51b3VzKGV4cGFuZCA9IGMoMCwgMCksIGxpbWl0cyA9IGMoMCwgMjA1KSwgcG9zaXRpb24gPSAicmlnaHQiKQoKRUMucGxvdAoKIyBTYXZlIGFzIC5wbmcgd2lkdGg9MzUwLCBoZWlnaHQ9NjUwICgiY2hlbS5FQy5wbmciKQpgYGAKCiMjIEdXQyBQbG90dGluZwpgYGB7cn0KY2hlbS5wbG90JEluY3JlbWVudDwtZmFjdG9yKGNoZW0ucGxvdCRJbmNyZW1lbnQsIGxldmVscyA9IGMoIjkwLTEwMCIsIjgwLTkwIiwiNzAtODAiLCI2MC03MCIsIjUwLTYwIiwiNDAtNTAiLCIzMC00MCIsIjIwLTMwIiwiMTAtMjAiLCIwLTEwIikpCgpHV0MucGxvdDwtZ2dwbG90KGRhdGE9Y2hlbS5wbG90LCBhZXMoeD1JbmNyZW1lbnQsIHk9R1dDLCBncm91cD1zaXRlX3R1bmRyYSkpICsgZ2VvbV9saW5lKGFlcyhsaW5ldHlwZT1zaXRlX3R1bmRyYSkpICsgZ2VvbV9wb2ludChzaXplPTUsIGFlcyhzaGFwZT1UdW5kcmEsIGZpbGw9U2l0ZSkpICsgc2NhbGVfc2hhcGVfbWFudWFsKCJUdW5kcmEiLCB2YWx1ZXM9YygyMSwyNCkpICsgY29vcmRfZmxpcCgpICsgeGxhYigiU29pbCBEZXB0aCAoY20pIikgKyB5bGFiKCJHV0MgKCUpIikgKyB0aGVtZV9taW5pbWFsKCkgKyB0aGVtZShheGlzLmxpbmUgPSBlbGVtZW50X2xpbmUoY29sb3VyID0gJ2JsYWNrJywgc2l6ZSA9IDEpLCBheGlzLnRpY2tzID0gZWxlbWVudF9saW5lKGNvbG91ciA9ICJibGFjayIsIHNpemUgPSAyKSwgYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoc2l6ZSA9IDE0KSwgYXhpcy50ZXh0LnkgPSBlbGVtZW50X2JsYW5rKCksIHBhbmVsLmJhY2tncm91bmQgPSBlbGVtZW50X2JsYW5rKCksIGF4aXMudGl0bGUueCA9IGVsZW1lbnRfdGV4dChzaXplID0gMTYpLCBheGlzLnRpdGxlLnkgPSBlbGVtZW50X2JsYW5rKCksIHBhbmVsLmdyaWQubWFqb3IgPSBlbGVtZW50X2JsYW5rKCksIHBhbmVsLmdyaWQubWlub3IgPSBlbGVtZW50X2JsYW5rKCksIGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIikgKyBzY2FsZV95X2NvbnRpbnVvdXMoZXhwYW5kID0gYygwLCAwKSwgbGltaXRzID0gYygwLCAxMDUpLCBwb3NpdGlvbiA9ICJyaWdodCIpCgpHV0MucGxvdAoKIyBTYXZlIGFzIC5wbmcgd2lkdGg9MzUwLCBoZWlnaHQ9NjUwICgiY2hlbS5HV0MucG5nIikKYGBgCgojIyBPQyBQbG90dGluZwpgYGB7cn0KY2hlbS5wbG90JEluY3JlbWVudDwtZmFjdG9yKGNoZW0ucGxvdCRJbmNyZW1lbnQsIGxldmVscyA9IGMoIjkwLTEwMCIsIjgwLTkwIiwiNzAtODAiLCI2MC03MCIsIjUwLTYwIiwiNDAtNTAiLCIzMC00MCIsIjIwLTMwIiwiMTAtMjAiLCIwLTEwIikpCgpPQy5wbG90PC1nZ3Bsb3QoZGF0YT1jaGVtLnBsb3QsIGFlcyh4PUluY3JlbWVudCwgeT1PQywgZ3JvdXA9c2l0ZV90dW5kcmEpKSArIGdlb21fbGluZShhZXMobGluZXR5cGU9c2l0ZV90dW5kcmEpKSArIGdlb21fcG9pbnQoc2l6ZT01LCBhZXMoc2hhcGU9VHVuZHJhLCBmaWxsPVNpdGUpKSArIHNjYWxlX3NoYXBlX21hbnVhbCgiVHVuZHJhIiwgdmFsdWVzPWMoMjEsMjQpKSArIGNvb3JkX2ZsaXAoKSArIHhsYWIoIlNvaWwgRGVwdGggKGNtKSIpICsgeWxhYigiT0MgKCUpIikgKyB0aGVtZV9taW5pbWFsKCkgKyB0aGVtZShheGlzLmxpbmUgPSBlbGVtZW50X2xpbmUoY29sb3VyID0gJ2JsYWNrJywgc2l6ZSA9IDEpLCBheGlzLnRpY2tzID0gZWxlbWVudF9saW5lKGNvbG91ciA9ICJibGFjayIsIHNpemUgPSAyKSwgYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoc2l6ZSA9IDE0KSwgYXhpcy50ZXh0LnkgPSBlbGVtZW50X2JsYW5rKCksIHBhbmVsLmJhY2tncm91bmQgPSBlbGVtZW50X2JsYW5rKCksIGF4aXMudGl0bGUueCA9IGVsZW1lbnRfdGV4dChzaXplID0gMTYpLCBheGlzLnRpdGxlLnkgPSBlbGVtZW50X2JsYW5rKCksIHBhbmVsLmdyaWQubWFqb3IgPSBlbGVtZW50X2JsYW5rKCksIHBhbmVsLmdyaWQubWlub3IgPSBlbGVtZW50X2JsYW5rKCksIGxlZ2VuZC50ZXh0ID0gZWxlbWVudF90ZXh0KHNpemU9MTQpLCBsZWdlbmQudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZT0xNikpICsgc2NhbGVfeV9jb250aW51b3VzKGV4cGFuZCA9IGMoMCwgMCksIGxpbWl0cyA9IGMoMCwgNTIpLCBwb3NpdGlvbiA9ICJyaWdodCIpICsgZ3VpZGVzKGxpbmV0eXBlID0gRkFMU0UpCgpPQy5wbG90CgojIFNhdmUgYXMgLnBuZyB3aWR0aD00NTAsIGhlaWdodD02NTAgKCJjaGVtLk9DLnBuZyIpCmBgYAoKU2F2ZSB0aGUgc29pbCBjaGVtaXN0cnkgcGxvdHMgdG9nZXRoZXIKYGBge3J9CnNvaWwuY2hlbS5wbG90IDwtIChwSC5wbG90IHwgRUMucGxvdCB8IEdXQy5wbG90IHwgT0MucGxvdCkgKyBwbG90X2Fubm90YXRpb24odGFnX2xldmVscyA9ICJBIikKc29pbC5jaGVtLnBsb3QKCiMgU2F2ZSBhcyAuZXBzIGltYWdlICh3aWR0aCA9IDEwMDAsIGhlaWdodCA9IDUwMDsgInNvaWwuY2hlbS5lcHMiKQpgYGAKCiMgU3RhdGlzdGljcwoKIyMgTWV0YWRhdGEgU3RhdHMKClN0YXRpc3RpY3Mgb24gRW52aXJvbm1lbnRhbCBEaWZmZXJlbmNlcyBBY3Jvc3MgU2l0ZXMKYGBge3J9CiNDcmVhdGUgbWF0cml4IG9mIG51bWVyaWMgY29sdW1ucwplbnYuYmluZC5tYXQ8LWFzLm1hdHJpeChjYmluZChhc3YuZW52Wyw4OjEyXSkpCgojIE1BTk9WQQplbnYubWFub3ZhPC1tYW5vdmEoZW52LmJpbmQubWF0fnNpdGVfdHVuZHJhLCBkYXRhPWFzdi5lbnYpCmVudi5tYW4uc3VtPC1zdW1tYXJ5LmFvdihlbnYubWFub3ZhKQplbnYubWFuLnN1bQpgYGAKClJ1biBpbmRpdmlkdWFsIEFOT1ZBIG9uICBlbnZpcm9ubWVudGFsIGZhY3RvcnMgd2l0aCBzaWduaWZpY2FudCBzaXRlIGRpZmZlcmVuY2VzIHRvIGdldCBhdCBQb3N0LWhvYyBhbmFseXNpcwpgYGB7cn0KIyBwSCBBTk9WQSB3aXRoIFBvc3QtSG9jIGZvciBTaXRlIERpZmZlcmVuY2VzCmVudi5wSDwtYW92KHBIflNpdGUqVHVuZHJhLCBkYXRhPWFzdi5lbnYpClR1a2V5SFNEKGVudi5wSCkKYGBgCgpgYGB7cn0KIyBFQyBBTk9WQSB3aXRoIFBvc3QtSG9jIGZvciBTaXRlIERpZmZlcmVuY2VzCmVudi5FQzwtYW92KEVDflNpdGUqVHVuZHJhLCBkYXRhPWFzdi5lbnYpClR1a2V5SFNEKGVudi5FQykKYGBgCgpgYGB7cn0KIyBHV0MgQU5PVkEgd2l0aCBQb3N0LUhvYyBmb3IgU2l0ZSBEaWZmZXJlbmNlcwplbnYuR1dDPC1hb3YoR1dDflNpdGUqVHVuZHJhLCBkYXRhPWFzdi5lbnYpClR1a2V5SFNEKGVudi5HV0MpCmBgYAoKYGBge3J9CiMgT00gQU5PVkEgd2l0aCBQb3N0LUhvYyBmb3IgU2l0ZSBEaWZmZXJlbmNlcwplbnYuT008LWFvdihPTX5TaXRlKlR1bmRyYSwgZGF0YT1hc3YuZW52KQpUdWtleUhTRChlbnYuT00pCmBgYAoKYGBge3J9CiMgT0MgQU5PVkEgd2l0aCBQb3N0LUhvYyBmb3IgU2l0ZSBEaWZmZXJlbmNlcwplbnYuT0M8LWFvdihPQ35TaXRlKlR1bmRyYSwgZGF0YT1hc3YuZW52KQpUdWtleUhTRChlbnYuT0MpCmBgYAoKU3RhdGlzdGljcyBvbiBFbnZpcm9ubWVudGFsIERpZmZlcmVuY2VzIGJ5IFNvaWwgVHlwZSAoT3JnIHZzLiBNaW4pCmBgYHtyfQojIE1BTk9WQSBieSBTb2lsIFR5cGUKZW52Lm1hbm92YS4yPC1tYW5vdmEoZW52LmJpbmQubWF0flNvaWwsIGRhdGE9YXN2LmVudikKZW52Lm1hbi5zdW0uMjwtc3VtbWFyeS5hb3YoZW52Lm1hbm92YS4yKQplbnYubWFuLnN1bS4yCmBgYAoKIyBSZXByb2R1Y2liaWxpdHkKClRoZSBzZXNzaW9uIGluZm9ybWF0aW9uIGlzIHByb3ZpZGVkIGZvciBmdWxsIHJlcHJvZHVjaWJpbGl0eS4KYGBge3J9CmRldnRvb2xzOjpzZXNzaW9uX2luZm8oKQpgYGA=