Context

We will be using the data from the following study (Döbert et al. 2017):

Döbert, T.F., Webber, B.L., Sugau, J.B., Dickinson, K.J.M. and Didham, R.K. (2017), Logging increases the functional and phylogenetic dispersion of understorey plant communities in tropical lowland rain forest. J Ecol, 105: 1235-1245. https://doi.org/10.1111/1365-2745.12794

Logging is the major cause of forest degradation in the Tropics. The effect of logging on taxonomic diversity is well known but more rarely studied on other facets of biodiversity such as functional diversity and phylogenetic diversity. Functional diversity and phylogenetic diversity should better reflect the impact of logging on ecosystem. For example logging can decrease the functional “redundancy” observed in ecosystems, meaning that some functional traits could be lost.

The tropical lowland rain forests on the island of Borneo are floristically among the most diverse systems on the planet, yet large-scale timber extraction and conversion to commercial tree plantations continue to drive their rapid degradation and loss. As is the case for the majority of tropical forests, the effects of logging on habitat quality in these forests have rarely been assessed, despite the critical implications for biodiversity conservation. Moreover, studies investigating the effects of logging on plant community dynamics across both tropical and temperate forest ecosystems have rarely focused on the understorey, despite its crucial relevance for successional trajectories.

Our goal with this tutorial is to reproduce the analyses from the paper and analyze how logging impacts the different facets of the diversity of the understorey vegetation, and to reveal to what extent similar facets give similar answers. The general goal is to familiarize yourself with the data and functions needed to compute diversity indices. As well the general principles behind them.

Associated slides

This practical session comes with some slides that cover the general context of the study as well as some basic facts regarding functional diversity indices.

downloadthis::download_link(
  link = "https://github.com/Rekyt/biodiversity_facets_tutorial/raw/main/biodiversity_facets_presentation.odp",
  button_label = "Download Context Slides",
  button_type = "danger",
  has_icon = TRUE,
  icon = "fa fa-save"
)

Loading the data

Fortunately for us, the authors of the study have shared openly the data they used in their article (Döbert et al. 2018). They are available through the Dryad platform at the following link: https://doi.org/10.5061/dryad.f77p7

Döbert, Timm F. et al. (2018), Data from: Logging increases the functional and phylogenetic dispersion of understorey plant communities in tropical lowland rainforest, Dryad, Dataset, https://doi.org/10.5061/dryad.f77p7

The fact that these data researchers provided the full dataset including all data and meta-data will help us reproduce the exact same analyses as well as additional analyses not in their paper.

Getting the data

To get the data you can follow the above-mentioned link https://doi.org/10.5061/dryad.f77p7 and click on the “Download Dataset” button available on the top right of the webpage. It will download a .zip file that you can unzip in the folder you created for the project. This will create a folder named doi_10.5061_dryad.f77p7__v1 that contains all needed data files.

Summarizing the data

The zip file contains 4 files (also available in the data/doi_10.5061_dryad.f77p7__v1/ folder):

  • README.txt which is a text file that describes the content of the other files with great precision. It details all the columns available in the other files.
  • PlotData.csv is a comma-separated file that describes characteristics for each of the sampled vegetation plots including logging metrics, environmental variables as well as taxonomic, functional and phylogenetic diversity indices (to which we’ll compare the indices we compute ourselves).
  • PlotSpeciesData.csv is a comma-separated file that contains a matrix of biomass values for the plant taxa sampled across the sampled vegetation plots.
  • SpeciesTraitData.csv contains the complete list of species sampled across all vegetation plots, with their associated traits both continuous and discrete.

We will load each of the file (apart from the phylogenetic tree) in your workspace now with the read.csv() function:

plot_data         = read.csv("data/doi_10.5061_dryad.f77p7__v1/PlotData.csv",
                             na.strings = c("NA", "na"),
                             stringsAsFactors = TRUE)
plot_species_data = read.csv("data/doi_10.5061_dryad.f77p7__v1/PlotSpeciesData.csv")
species_traits    = read.csv("data/doi_10.5061_dryad.f77p7__v1/SpeciesTraitData.csv",
                             na.strings = c("NA", "na"), stringsAsFactors = TRUE)

To describe the data we will use the str(), summary(), and dim() functions.

str(plot_data)
summary(plot_data)

str(plot_species_data[, 1:5])
summary(head(plot_species_data)[,1:5])
dim(plot_species_data)

# Transform one column for further analyses
species_traits$seed = ordered(species_traits$seed)
str(species_traits)
summary(species_traits)

Questions to you

  • Q1: How many plots were sampled?
  • Q2: How many species are there in the dataset?
  • Q3: How many traits are available?
  • Q4: How many of them are continuous? How many of them are discrete?
  • Q5: What is the most numerous family among all observed species?
  • Q6: What is the most numerous genus?

Environment variables

Forest loss proportion is one of the main driver variable. The data has been acquired across different block with different proportion of logging and compared to unlogged forest.

boxplot(forestloss17 ~ block, data = plot_data,
        xlab = "Block of plot", ylab = "Forest loss (%)",
        main = "Forest loss in funciton of block of data")

References

Döbert, Timm F., Bruce L. Webber, John B. Sugau, Katharine J. M. Dickinson, and Raphael K. Didham. 2017. “Logging Increases the Functional and Phylogenetic Dispersion of Understorey Plant Communities in Tropical Lowland Rain Forest.” Journal of Ecology 105 (5): 1235–45. https://doi.org/10.1111/1365-2745.12794.
———. 2018. “Data from: Logging Increases the Functional and Phylogenetic Dispersion of Understorey Plant Communities in Tropical Lowland Rainforest.” Dryad. https://doi.org/10.5061/DRYAD.F77P7.
LS0tCnRpdGxlOiAiQ29udGV4dCBhbmQgRGF0YSBEZXNjcmlwdGlvbiIKb3V0cHV0OiBodG1sX2RvY3VtZW50CmJpYmxpb2dyYXBoeTogYmlibGlvZ3JhcGh5LmJpYgotLS0KCmBgYHtyIHNldHVwLCBpbmNsdWRlID0gRkFMU0V9CmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvID0gVFJVRSwgZXZhbCA9IEZBTFNFKQpgYGAKCgojIyBDb250ZXh0CgpXZSB3aWxsIGJlIHVzaW5nIHRoZSBkYXRhIGZyb20gdGhlIGZvbGxvd2luZyBzdHVkeSBbQERvYmVydF9Mb2dnaW5nXzIwMTddOgoKPiBEw7ZiZXJ0LCBULkYuLCBXZWJiZXIsIEIuTC4sIFN1Z2F1LCBKLkIuLCBEaWNraW5zb24sIEsuSi5NLiBhbmQgRGlkaGFtLCBSLksuICgyMDE3KSwgTG9nZ2luZyBpbmNyZWFzZXMgdGhlIGZ1bmN0aW9uYWwgYW5kIHBoeWxvZ2VuZXRpYyBkaXNwZXJzaW9uIG9mIHVuZGVyc3RvcmV5IHBsYW50IGNvbW11bml0aWVzIGluIHRyb3BpY2FsIGxvd2xhbmQgcmFpbiBmb3Jlc3QuIEogRWNvbCwgMTA1OiAxMjM1LTEyNDUuIGh0dHBzOi8vZG9pLm9yZy8xMC4xMTExLzEzNjUtMjc0NS4xMjc5NAoKTG9nZ2luZyBpcyB0aGUgbWFqb3IgY2F1c2Ugb2YgZm9yZXN0IGRlZ3JhZGF0aW9uIGluIHRoZSBUcm9waWNzLiBUaGUgZWZmZWN0IG9mIGxvZ2dpbmcgb24gdGF4b25vbWljIGRpdmVyc2l0eSBpcyB3ZWxsIGtub3duIGJ1dCBtb3JlIHJhcmVseSBzdHVkaWVkIG9uIG90aGVyIGZhY2V0cyBvZiBiaW9kaXZlcnNpdHkgc3VjaCBhcyBmdW5jdGlvbmFsIGRpdmVyc2l0eSBhbmQgcGh5bG9nZW5ldGljIGRpdmVyc2l0eS4gRnVuY3Rpb25hbCBkaXZlcnNpdHkgYW5kIHBoeWxvZ2VuZXRpYyBkaXZlcnNpdHkgc2hvdWxkIGJldHRlciByZWZsZWN0IHRoZSBpbXBhY3Qgb2YgbG9nZ2luZyBvbiBlY29zeXN0ZW0uIEZvciBleGFtcGxlIGxvZ2dpbmcgY2FuIGRlY3JlYXNlIHRoZSBmdW5jdGlvbmFsICJyZWR1bmRhbmN5IiBvYnNlcnZlZCBpbiBlY29zeXN0ZW1zLCBtZWFuaW5nIHRoYXQgc29tZSBmdW5jdGlvbmFsIHRyYWl0cyBjb3VsZCBiZSBsb3N0LgoKVGhlIHRyb3BpY2FsIGxvd2xhbmQgcmFpbiBmb3Jlc3RzIG9uIHRoZSBpc2xhbmQgb2YgQm9ybmVvIGFyZSBmbG9yaXN0aWNhbGx5IGFtb25nIHRoZSBtb3N0IGRpdmVyc2Ugc3lzdGVtcyBvbiB0aGUgcGxhbmV0LCB5ZXQgbGFyZ2Utc2NhbGUgdGltYmVyIGV4dHJhY3Rpb24gYW5kIGNvbnZlcnNpb24gdG8gY29tbWVyY2lhbCB0cmVlIHBsYW50YXRpb25zIGNvbnRpbnVlIHRvIGRyaXZlIHRoZWlyIHJhcGlkIGRlZ3JhZGF0aW9uIGFuZCBsb3NzLiBBcyBpcyB0aGUgY2FzZSBmb3IgdGhlIG1ham9yaXR5IG9mIHRyb3BpY2FsIGZvcmVzdHMsIHRoZSBlZmZlY3RzIG9mIGxvZ2dpbmcgb24gaGFiaXRhdCBxdWFsaXR5IGluIHRoZXNlIGZvcmVzdHMgaGF2ZSByYXJlbHkgYmVlbiBhc3Nlc3NlZCwgZGVzcGl0ZSB0aGUgY3JpdGljYWwgaW1wbGljYXRpb25zIGZvciBiaW9kaXZlcnNpdHkgY29uc2VydmF0aW9uLiBNb3Jlb3Zlciwgc3R1ZGllcyBpbnZlc3RpZ2F0aW5nIHRoZSBlZmZlY3RzIG9mIGxvZ2dpbmcgb24gcGxhbnQgY29tbXVuaXR5IGR5bmFtaWNzIGFjcm9zcyBib3RoIHRyb3BpY2FsIGFuZCB0ZW1wZXJhdGUgZm9yZXN0IGVjb3N5c3RlbXMgaGF2ZSByYXJlbHkgZm9jdXNlZCBvbiB0aGUgdW5kZXJzdG9yZXksIGRlc3BpdGUgaXRzIGNydWNpYWwgcmVsZXZhbmNlIGZvciBzdWNjZXNzaW9uYWwgdHJhamVjdG9yaWVzLgoKT3VyIGdvYWwgd2l0aCB0aGlzIHR1dG9yaWFsIGlzIHRvIHJlcHJvZHVjZSB0aGUgYW5hbHlzZXMgZnJvbSB0aGUgcGFwZXIgYW5kIGFuYWx5emUgaG93IGxvZ2dpbmcgaW1wYWN0cyB0aGUgZGlmZmVyZW50IGZhY2V0cyBvZiB0aGUgZGl2ZXJzaXR5IG9mIHRoZSB1bmRlcnN0b3JleSB2ZWdldGF0aW9uLCBhbmQgdG8gcmV2ZWFsIHRvIHdoYXQgZXh0ZW50IHNpbWlsYXIgZmFjZXRzIGdpdmUgc2ltaWxhciBhbnN3ZXJzLiBUaGUgZ2VuZXJhbCBnb2FsIGlzIHRvIGZhbWlsaWFyaXplIHlvdXJzZWxmIHdpdGggdGhlIGRhdGEgYW5kIGZ1bmN0aW9ucyBuZWVkZWQgdG8gY29tcHV0ZSBkaXZlcnNpdHkgaW5kaWNlcy4gQXMgd2VsbCB0aGUgZ2VuZXJhbCBwcmluY2lwbGVzIGJlaGluZCB0aGVtLgoKCiMjIEFzc29jaWF0ZWQgc2xpZGVzCgpUaGlzIHByYWN0aWNhbCBzZXNzaW9uIGNvbWVzIHdpdGggc29tZSBzbGlkZXMgdGhhdCBjb3ZlciB0aGUgZ2VuZXJhbCBjb250ZXh0IG9mCnRoZSBzdHVkeSBhcyB3ZWxsIGFzIHNvbWUgYmFzaWMgZmFjdHMgcmVnYXJkaW5nIGZ1bmN0aW9uYWwgZGl2ZXJzaXR5IGluZGljZXMuCgoKYGBge3IgZG93bmxvYWQtc2xpZGVzLCBldmFsID0gVFJVRX0KZG93bmxvYWR0aGlzOjpkb3dubG9hZF9saW5rKAogIGxpbmsgPSAiaHR0cHM6Ly9naXRodWIuY29tL1Jla3l0L2Jpb2RpdmVyc2l0eV9mYWNldHNfdHV0b3JpYWwvcmF3L21haW4vYmlvZGl2ZXJzaXR5X2ZhY2V0c19wcmVzZW50YXRpb24ub2RwIiwKICBidXR0b25fbGFiZWwgPSAiRG93bmxvYWQgQ29udGV4dCBTbGlkZXMiLAogIGJ1dHRvbl90eXBlID0gImRhbmdlciIsCiAgaGFzX2ljb24gPSBUUlVFLAogIGljb24gPSAiZmEgZmEtc2F2ZSIKKQpgYGAKCgojIyBMb2FkaW5nIHRoZSBkYXRhCgpGb3J0dW5hdGVseSBmb3IgdXMsIHRoZSBhdXRob3JzIG9mIHRoZSBzdHVkeSBoYXZlIHNoYXJlZCBvcGVubHkgdGhlIGRhdGEgdGhleSB1c2VkIGluIHRoZWlyIGFydGljbGUgW0BEb2JlcnRfRGF0YV8yMDE4XS4gVGhleSBhcmUgYXZhaWxhYmxlIHRocm91Z2ggdGhlIERyeWFkIHBsYXRmb3JtIGF0IHRoZSBmb2xsb3dpbmcgbGluazogaHR0cHM6Ly9kb2kub3JnLzEwLjUwNjEvZHJ5YWQuZjc3cDcKCj4gRMO2YmVydCwgVGltbSBGLiBldCBhbC4gKDIwMTgpLCBEYXRhIGZyb206IExvZ2dpbmcgaW5jcmVhc2VzIHRoZSBmdW5jdGlvbmFsIGFuZCBwaHlsb2dlbmV0aWMgZGlzcGVyc2lvbiBvZiB1bmRlcnN0b3JleSBwbGFudCBjb21tdW5pdGllcyBpbiB0cm9waWNhbCBsb3dsYW5kIHJhaW5mb3Jlc3QsIERyeWFkLCBEYXRhc2V0LCBodHRwczovL2RvaS5vcmcvMTAuNTA2MS9kcnlhZC5mNzdwNwoKVGhlIGZhY3QgdGhhdCB0aGVzZSBkYXRhIHJlc2VhcmNoZXJzIHByb3ZpZGVkIHRoZSBmdWxsIGRhdGFzZXQgaW5jbHVkaW5nIGFsbCBkYXRhIGFuZCBtZXRhLWRhdGEgd2lsbCBoZWxwIHVzIHJlcHJvZHVjZSB0aGUgZXhhY3Qgc2FtZSBhbmFseXNlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgYW5hbHlzZXMgbm90IGluIHRoZWlyIHBhcGVyLgoKIyMjIEdldHRpbmcgdGhlIGRhdGEKClRvIGdldCB0aGUgZGF0YSB5b3UgY2FuIGZvbGxvdyB0aGUgYWJvdmUtbWVudGlvbmVkIGxpbmsgaHR0cHM6Ly9kb2kub3JnLzEwLjUwNjEvZHJ5YWQuZjc3cDcgYW5kIGNsaWNrIG9uIHRoZSAiRG93bmxvYWQgRGF0YXNldCIgYnV0dG9uIGF2YWlsYWJsZSBvbiB0aGUgdG9wIHJpZ2h0IG9mIHRoZSB3ZWJwYWdlLiBJdCB3aWxsIGRvd25sb2FkIGEgLnppcCBmaWxlIHRoYXQgeW91IGNhbiB1bnppcCBpbiB0aGUgZm9sZGVyIHlvdSBjcmVhdGVkIGZvciB0aGUgcHJvamVjdC4gVGhpcyB3aWxsIGNyZWF0ZSBhIGZvbGRlciBuYW1lZCBgZG9pXzEwLjUwNjFfZHJ5YWQuZjc3cDdfX3YxYCB0aGF0IGNvbnRhaW5zIGFsbCBuZWVkZWQgZGF0YSBmaWxlcy4KCmBgYHtyIGRvd25sb2FkLWRhdGEsIGVjaG8gPSBGQUxTRSwgZXZhbCA9IFRSVUV9CmRvd25sb2FkdGhpczo6ZG93bmxvYWRfbGluaygKICBsaW5rID0gImh0dHBzOi8vZGF0YWRyeWFkLm9yZy9zdGFzaC9kb3dubG9hZHMvZG93bmxvYWRfcmVzb3VyY2UvNTE3OSIsCiAgYnV0dG9uX2xhYmVsID0gIkRvd25sb2FkIE9yaWdpbmFsIERhdGEgRmlsZXMiLAogIGJ1dHRvbl90eXBlID0gImRhbmdlciIsCiAgaGFzX2ljb24gPSBUUlVFLAogIGljb24gPSAiZmEgZmEtc2F2ZSIsCiAgc2VsZl9jb250YWluZWQgPSBGQUxTRQopCmBgYAoKCiMjIyBTdW1tYXJpemluZyB0aGUgZGF0YQoKVGhlIHppcCBmaWxlIGNvbnRhaW5zIDQgZmlsZXMgKGFsc28gYXZhaWxhYmxlIGluIHRoZSBgZGF0YS9kb2lfMTAuNTA2MV9kcnlhZC5mNzdwN19fdjEvYCBmb2xkZXIpOgoKKiBgUkVBRE1FLnR4dGAgd2hpY2ggaXMgYSB0ZXh0IGZpbGUgdGhhdCBkZXNjcmliZXMgdGhlIGNvbnRlbnQgb2YgdGhlIG90aGVyIGZpbGVzIHdpdGggZ3JlYXQgcHJlY2lzaW9uLiBJdCBkZXRhaWxzIGFsbCB0aGUgY29sdW1ucyBhdmFpbGFibGUgaW4gdGhlIG90aGVyIGZpbGVzLgoqIGBQbG90RGF0YS5jc3ZgIGlzIGEgY29tbWEtc2VwYXJhdGVkIGZpbGUgdGhhdCBkZXNjcmliZXMgY2hhcmFjdGVyaXN0aWNzIGZvciBlYWNoIG9mIHRoZSBzYW1wbGVkIHZlZ2V0YXRpb24gcGxvdHMgaW5jbHVkaW5nIGxvZ2dpbmcgbWV0cmljcywgZW52aXJvbm1lbnRhbCB2YXJpYWJsZXMgYXMgd2VsbCBhcyB0YXhvbm9taWMsIGZ1bmN0aW9uYWwgYW5kIHBoeWxvZ2VuZXRpYyBkaXZlcnNpdHkgaW5kaWNlcyAodG8gd2hpY2ggd2UnbGwgY29tcGFyZSB0aGUgaW5kaWNlcyB3ZSBjb21wdXRlIG91cnNlbHZlcykuCiogYFBsb3RTcGVjaWVzRGF0YS5jc3ZgIGlzIGEgY29tbWEtc2VwYXJhdGVkIGZpbGUgdGhhdCBjb250YWlucyBhIG1hdHJpeCBvZiBiaW9tYXNzIHZhbHVlcyBmb3IgdGhlIHBsYW50IHRheGEgc2FtcGxlZCBhY3Jvc3MgdGhlIHNhbXBsZWQgdmVnZXRhdGlvbiBwbG90cy4KKiBgU3BlY2llc1RyYWl0RGF0YS5jc3ZgIGNvbnRhaW5zIHRoZSBjb21wbGV0ZSBsaXN0IG9mIHNwZWNpZXMgIHNhbXBsZWQgYWNyb3NzIGFsbCB2ZWdldGF0aW9uIHBsb3RzLCB3aXRoIHRoZWlyIGFzc29jaWF0ZWQgdHJhaXRzIGJvdGggY29udGludW91cyBhbmQgZGlzY3JldGUuCgpXZSB3aWxsIGxvYWQgZWFjaCBvZiB0aGUgZmlsZSAoYXBhcnQgZnJvbSB0aGUgcGh5bG9nZW5ldGljIHRyZWUpIGluIHlvdXIgd29ya3NwYWNlIG5vdyB3aXRoIHRoZSBgcmVhZC5jc3YoKWAgZnVuY3Rpb246CgpgYGB7ciBsb2FkaW5nLWRhdGF9CnBsb3RfZGF0YSAgICAgICAgID0gcmVhZC5jc3YoImRhdGEvZG9pXzEwLjUwNjFfZHJ5YWQuZjc3cDdfX3YxL1Bsb3REYXRhLmNzdiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmEuc3RyaW5ncyA9IGMoIk5BIiwgIm5hIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nc0FzRmFjdG9ycyA9IFRSVUUpCnBsb3Rfc3BlY2llc19kYXRhID0gcmVhZC5jc3YoImRhdGEvZG9pXzEwLjUwNjFfZHJ5YWQuZjc3cDdfX3YxL1Bsb3RTcGVjaWVzRGF0YS5jc3YiKQpzcGVjaWVzX3RyYWl0cyAgICA9IHJlYWQuY3N2KCJkYXRhL2RvaV8xMC41MDYxX2RyeWFkLmY3N3A3X192MS9TcGVjaWVzVHJhaXREYXRhLmNzdiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmEuc3RyaW5ncyA9IGMoIk5BIiwgIm5hIiksIHN0cmluZ3NBc0ZhY3RvcnMgPSBUUlVFKQpgYGAKClRvIGRlc2NyaWJlIHRoZSBkYXRhIHdlIHdpbGwgdXNlIHRoZSBgc3RyKClgLCBgc3VtbWFyeSgpYCwgYW5kIGBkaW0oKWAgZnVuY3Rpb25zLgoKYGBge3Igc3RyLXN1bW1hcnktZGF0YX0Kc3RyKHBsb3RfZGF0YSkKc3VtbWFyeShwbG90X2RhdGEpCgpzdHIocGxvdF9zcGVjaWVzX2RhdGFbLCAxOjVdKQpzdW1tYXJ5KGhlYWQocGxvdF9zcGVjaWVzX2RhdGEpWywxOjVdKQpkaW0ocGxvdF9zcGVjaWVzX2RhdGEpCgojIFRyYW5zZm9ybSBvbmUgY29sdW1uIGZvciBmdXJ0aGVyIGFuYWx5c2VzCnNwZWNpZXNfdHJhaXRzJHNlZWQgPSBvcmRlcmVkKHNwZWNpZXNfdHJhaXRzJHNlZWQpCnN0cihzcGVjaWVzX3RyYWl0cykKc3VtbWFyeShzcGVjaWVzX3RyYWl0cykKYGBgCgo6Ojo6IHsucXVlc3Rpb25zfQojIyMjIFF1ZXN0aW9ucyB0byB5b3UKCiogKipRMSoqOiBIb3cgbWFueSBwbG90cyB3ZXJlIHNhbXBsZWQ/CiogKipRMioqOiBIb3cgbWFueSBzcGVjaWVzIGFyZSB0aGVyZSBpbiB0aGUgZGF0YXNldD8KKiAqKlEzKio6IEhvdyBtYW55IHRyYWl0cyBhcmUgYXZhaWxhYmxlPwoqICoqUTQqKjogSG93IG1hbnkgb2YgdGhlbSBhcmUgY29udGludW91cz8gSG93IG1hbnkgb2YgdGhlbSBhcmUgZGlzY3JldGU/CiogKipRNSoqOiBXaGF0IGlzIHRoZSBtb3N0IG51bWVyb3VzIGZhbWlseSBhbW9uZyBhbGwgb2JzZXJ2ZWQgc3BlY2llcz8KKiAqKlE2Kio6IFdoYXQgaXMgdGhlIG1vc3QgbnVtZXJvdXMgZ2VudXM/Cjo6OjoKCiMjIyBFbnZpcm9ubWVudCB2YXJpYWJsZXMKCkZvcmVzdCBsb3NzIHByb3BvcnRpb24gaXMgb25lIG9mIHRoZSBtYWluIGRyaXZlciB2YXJpYWJsZS4gVGhlIGRhdGEgaGFzIGJlZW4gYWNxdWlyZWQgYWNyb3NzIGRpZmZlcmVudCBibG9jayB3aXRoIGRpZmZlcmVudCBwcm9wb3J0aW9uIG9mIGxvZ2dpbmcgYW5kIGNvbXBhcmVkIHRvIHVubG9nZ2VkIGZvcmVzdC4KCmBgYHtyIGZvcmVzdC1ibG9ja30KYm94cGxvdChmb3Jlc3Rsb3NzMTcgfiBibG9jaywgZGF0YSA9IHBsb3RfZGF0YSwKICAgICAgICB4bGFiID0gIkJsb2NrIG9mIHBsb3QiLCB5bGFiID0gIkZvcmVzdCBsb3NzICglKSIsCiAgICAgICAgbWFpbiA9ICJGb3Jlc3QgbG9zcyBpbiBmdW5jaXRvbiBvZiBibG9jayBvZiBkYXRhIikKYGBgCgoKIyMgUmVmZXJlbmNlcwo=


License: Matthias Grenié & Marten Winter CC-BY 4.0