Init dataeggs website
diff --git a/404.html b/404.html
new file mode 100644
index 0000000..c8d5ef7
--- /dev/null
+++ b/404.html
@@ -0,0 +1,192 @@
+<!DOCTYPE html>
+<html lang='en' dir='auto'><head>
+  <meta charset='utf-8'>
+<meta name='viewport' content='width=device-width, initial-scale=1'>
+<meta name='description' content=''>
+<meta name='theme-color' content='#ffcd00'>
+
+<meta property='og:title' content='Nothing&#39;s here! • Eclipse DataEggs'>
+<meta property='og:description' content=''>
+<meta property='og:url' content='https://download.eclipse.org/dataeggs/404.html'>
+<meta property='og:site_name' content='Eclipse DataEggs'>
+<meta property='og:type' content='website'><meta name='twitter:card' content='summary'>
+
+<meta name="generator" content="Hugo 0.83.1" />
+
+  <title>Nothing&#39;s here! • Eclipse DataEggs</title>
+  <link rel='canonical' href='https://download.eclipse.org/dataeggs/404.html'>
+  
+  
+  <link rel='icon' href='/dataeggs/favicon.ico'>
+<link rel='stylesheet' href='/dataeggs/assets/css/main.ab98e12b.css'><link rel='stylesheet' href='/dataeggs/css/custom.css'><style>
+:root{--color-accent:#ffcd00;}
+</style>
+
+<script type="application/javascript">
+var doNotTrack = false;
+if (!doNotTrack) {
+	window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)};ga.l=+new Date;
+	ga('create', 'UA-3675452-15', 'auto');
+	
+	ga('send', 'pageview');
+}
+</script>
+<script async src='https://www.google-analytics.com/analytics.js'></script>
+
+  
+
+</head>
+<body class='error404 type-page has-sidebar'>
+
+  <div class='site'><div id='sidebar' class='sidebar'>
+  <a class='screen-reader-text' href='#main-menu'>Skip to Main Menu</a>
+
+  <div class='container'><section class='widget widget-about sep-after'>
+  <header>
+    
+    <div class='logo'>
+      <a href='/dataeggs/'>
+        <img src='/dataeggs/images/dataeggs-menu.png'>
+      </a>
+    </div>
+    
+    <div class='desc'>
+    Open. Safe. Easy.
+    </div>
+  </header>
+
+</section>
+<section class='widget widget-search sep-after'>
+  <header>
+    <h4 class='title widget-title'>Search</h4>
+  </header>
+
+  <form action='/dataeggs/search' id='search-form' class='search-form'>
+    <label>
+      <span class='screen-reader-text'>Search</span>
+      <input id='search-term' class='search-term' type='search' name='q' placeholder='Search&hellip;'>
+    </label></form>
+
+</section>
+<section class='widget widget-sidebar_menu sep-after'><nav id='sidebar-menu' class='menu sidebar-menu' aria-label='Sidebar Menu'>
+    <div class='container'>
+      <ul><li class='item'>
+  <a href='/dataeggs/'>Home</a></li><li class='item'>
+  <a href='/dataeggs/privacy/'>Privacy</a></li><li class='item'>
+  <a href='/dataeggs/aeri_stacktraces/'>AERI</a></li><li class='item'>
+  <a href='/dataeggs/eclipse_mls/'>MLS</a></li></ul>
+    </div>
+  </nav>
+
+</section><section class='widget widget-social_menu sep-after'><nav aria-label='Social Menu'>
+    <ul><li>
+        <a href='https://gitlab.eclipse.org/dataeggs/dataeggs' target='_blank' rel='noopener me'>
+          <span class='screen-reader-text'>Open Gitlab account in new tab</span><svg class='icon' xmlns='http://www.w3.org/2000/svg' viewbox='0 0 24 24' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' aria-hidden='true'>
+    
+    <title>GitLab icon</title>  <path d="M22.65 14.39L12 22.13 1.35 14.39a.84.84 0 0 1-.3-.94l1.22-3.78 2.44-7.51A.42.42 0 0 1 4.82 2a.43.43 0 0 1 .58 0 .42.42 0 0 1 .11.18l2.44 7.49h8.1l2.44-7.51A.42.42 0 0 1 18.6 2a.43.43 0 0 1 .58 0 .42.42 0 0 1 .11.18l2.44 7.51L23 13.45a.84.84 0 0 1-.35.94z"/>
+</svg>
+</a>
+      </li><li>
+        <a href='mailto:boris@chrysalice.org' target='_blank' rel='noopener me'>
+          <span class='screen-reader-text'>Contact via Email</span><svg class='icon' xmlns='http://www.w3.org/2000/svg' viewbox='0 0 24 24' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' aria-hidden='true'>
+    
+    <path d="M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z"></path><polyline points="22,6 12,13 2,6"></polyline>
+</svg>
+</a>
+      </li></ul>
+  </nav>
+</section></div>
+
+  <div class='sidebar-overlay'></div>
+</div><div class='main'><a class='screen-reader-text' href='#content'>Skip to Content</a>
+
+<button id='sidebar-toggler' class='sidebar-toggler' aria-controls='sidebar'>
+  <span class='screen-reader-text'>Toggle Sidebar</span>
+  <span class='open'><svg class='icon' xmlns='http://www.w3.org/2000/svg' viewbox='0 0 24 24' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' aria-hidden='true'>
+    
+    
+  <line x1="3" y1="12" x2="21" y2="12" />
+  <line x1="3" y1="6" x2="21" y2="6" />
+  <line x1="3" y1="18" x2="21" y2="18" />
+
+</svg>
+</span>
+  <span class='close'><svg class='icon' xmlns='http://www.w3.org/2000/svg' viewbox='0 0 24 24' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' aria-hidden='true'>
+    
+    
+  <line x1="18" y1="6" x2="6" y2="18" />
+  <line x1="6" y1="6" x2="18" y2="18" />
+
+</svg>
+</span>
+</button><div class='header-widgets'>
+        <div class='container'>
+    <style>.widget-breadcrumbs li:after{content:'\2f '}</style>
+  <section class='widget widget-breadcrumbs sep-after'>
+    <nav id='breadcrumbs'>
+      <ol><li><a href='/dataeggs/'>Home</a></li><li><span>404 Page not found</span></li></ol>
+    </nav>
+  </section></div>
+      </div>
+
+      <header id='header' class='header site-header'>
+        <div class='container sep-after'>
+          <div class='header-info'><p class='site-title title'>Eclipse DataEggs</p><p class='desc site-desc'></p>
+          </div>
+        </div>
+      </header>
+
+      <main id='content'>
+
+
+<div class='entry'>
+  <div class='container entry-content'>
+    <span class='screen-reader-text'>Nothing&#39;s here!</span>
+    <figure class='gopher'>
+      <a href='/dataeggs/'>
+        <img src='/dataeggs/assets/gopher.png' alt='Gopher'/>
+        <span class='screen-reader-text'>Go Home...</span>
+      </a>
+      <figcaption>
+        <h1 class='title'>
+          <a href='/dataeggs/'>Nothing&#39;s here!</a>
+        </h1>
+      </figcaption>
+    </figure>
+  </div>
+</div>
+
+      </main>
+
+      <footer id='footer' class='footer'>
+        <div class='container sep-before'><div class="row">
+	    <div class="column">
+	      <a href="http://www.eclipse.org/"  target="_blank"><img src="/dataeggs/images/logo-eclipse-foundation.png" alt="Eclipse Foundation logo"></a>
+	    </div>	  
+	    <div class="column">
+	      <p></p>
+	      <p id="copyright">Copyright © 2021 Eclipse Foundation, Inc.<br>All Rights Reserved.</p>
+	    </div>
+	  </div>
+	  <div class="row">
+	    <p><a href="http://www.eclipse.org/legal/privacy.php" target="_blank">Privacy Policy</a> /
+	      <a href="http://eclipse.org/" target="_blank">Eclipse</a> /
+	      <a href="http://www.eclipse.org/legal/termsofuse.php" target="_blank">Terms of Use</a> /
+	      <a href="http://www.eclipse.org/legal/copyright.php" target="_blank">Copyright Agent</a> /
+	      <a href="http://www.eclipse.org/legal/" target="_blank">Legal</a> /
+	      <a href="http://www.eclipse.org/org/foundation/contact.php" target="_blank"> Contact Us</a></p>
+	  </div>
+	  
+        </div>
+      </footer>
+
+    </div>
+  </div><script>window.__assets_js_src="/dataeggs/assets/js/"</script>
+
+<script src='/dataeggs/assets/js/main.c3bcf2df.js'></script><script src='/dataeggs/js/custom.js'></script>
+
+
+</body>
+
+</html>
+
diff --git a/_projectCommon.php b/_projectCommon.php
deleted file mode 100644
index 0fe02c9..0000000
--- a/_projectCommon.php
+++ /dev/null
@@ -1,23 +0,0 @@
-<?php
-/*******************************************************************************
- * Copyright (c) 2014 Eclipse Foundation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *    Christopher Guindon (Eclipse Foundation) - Initial implementation
- *******************************************************************************/
-
-  # Set the theme for your project's web pages.
-  # See the Committer Tools "Phoenix" secion in the How Do I? for list of themes
-  # https://dev.eclipse.org/committers/
-  $theme = "solstice";
-
-  # Define your project-wide Nav bars here.
-  # Format is Link text, link URL (can be http://www.someothersite.com/), target (_self, _blank).
-  $Nav->addNavSeparator("Solstice",   "/eclipse.org-common/themes/solstice/docs/");
-  $Nav->addCustomNav("Documentation", "/eclipse.org-common/themes/solstice/docs/", "_self", NULL);
-  $Nav->addCustomNav("Source code", "http://git.eclipse.org/c/www.eclipse.org/eclipse.org-common.git/tree/themes/solstice/", "_self", NULL);
-  $Nav->addCustomNav("Using Phoenix", "http://wiki.eclipse.org/Using_Phoenix", "_self", NULL);
diff --git a/aeri_stacktraces/incidents_analysis.Rmd b/aeri_stacktraces/incidents_analysis.Rmd
new file mode 100644
index 0000000..c08e3fc
--- /dev/null
+++ b/aeri_stacktraces/incidents_analysis.Rmd
@@ -0,0 +1,581 @@
+---
+title: "StackTraces -- Incidents"
+subtitle: "R Analysis document"
+author: "Boris Baldassari -- Castalia Solutions"
+output:
+  pdf_document:
+    toc: yes
+    toc_depth: 3
+    keep_tex: true
+    extra_dependencies:
+      - grffile
+  html_document:
+    toc: yes
+    toc_depth: 2
+  word_document:
+    toc: yes
+    toc_depth: '2'
+---
+
+```{r init, message=FALSE, echo=FALSE, cache=FALSE}
+library(ggplot2)
+library(ggthemes)
+library(knitr)
+
+library(kableExtra)
+options(knitr.table.format = "latex")
+
+library(parsedate)
+library(magrittr)
+
+require(xts)
+```
+
+```{r init.read, message=FALSE, echo=FALSE, cache=TRUE}
+# Read csv file
+file.in <- "incidents_extract.csv"
+myincidents <- read.csv(file.in, header=T, quote='"')
+file.in.bundles <- "incidents_bundles_extract.csv"
+mybundles <- read.csv(file.in.bundles, header=T, quote='"')
+
+# Create xts object
+myincidents <- myincidents[myincidents$timestamp != '',]
+myincidents <- myincidents[myincidents$savedOn != '',]
+myp.xts <- xts(x = myincidents, order.by = parse_iso_8601(myincidents$timestamp))
+```
+
+# Introduction
+
+## About this dataset
+
+The [Automated Error Reporting](https://wiki.eclipse.org/EPP/Logging) (AERI) system retrieves [information about exceptions](https://www.codetrails.com/error-analytics/manual/). It is installed by default in the [Eclipse IDE](http://www.eclipse.org/ide/) and has helped hundreds of projects better support their users and resolve bugs.  
+
+This dataset is a dump of all records over a couple of years, with useful information about the exceptions and environment.
+
+* **Generated date**: `r date()`
+* **First date**: `r first(index(myp.xts))`
+* **Last date**: `r last(index(myp.xts))`
+* **Number of incidents**: `r nrow(myp.xts)`
+* **Number of attributes**: `r ncol(myp.xts)`
+
+## Terminology
+
+* **Incidents** When an exception occurs and is trapped by the AERI system, it constitutes an incident (or error report). An incident can be reported by several different people, can be reported multiple times, and can be linked to different environments.
+* **Problems** As soon as an error report arrives on the server, it will be analyzed and subsequently assigned to one or more problems. A problem thus represents a set of (similar) error reports which usually have the same root cause – for example a bug in your software. (Extract from the [AERI system documentation](https://www.codetrails.com/error-analytics/manual/concepts/error-reports-problems-bugs-projects.html))
+
+This dataset targets only the Incidents of the AERI dataset. There is another dedicated document for the Problems.
+
+## Privacy concerns
+
+We value privacy and intend to make everything we can to prevent misuse of the dataset. If you think we failed somewhere in the process, please [let us know](https://www.crossminer.org/contact) so we can do better.
+
+The AERI system itself doesn't gather much private information, and takes a great care of it. Ths dataset goes a step further and removes all identifiable information. 
+
+* There is **no email address** in this dataset, **nor any UUID**. 
+* People not willing to share their traces to the AERI system can tick the private option. This choice has been respected, and all classes that do not belong to public hierarchy have been hidden thanks to an anonymisation mechanism.
+
+The anonymisation technique used basically encrypts information and then throws away the private key. Please refer to the [documentation published on github](https://github.com/borisbaldassari/data-anonymiser) for more details.
+
+
+## About this document
+
+This document is a [R Markdown document](http://rmarkdown.rstudio.com) and is composed of both text (like this one) and dynamically computed information (mostly in the Anaysis section below) executed on the data itself. This ensures that the information is always synchronised with the data, and serves as a test suite for the dataset.
+
+
+# Structure of data
+
+The plugin collects a [lot of useful information](https://www.codetrails.com/error-analytics/manual/misc/sent-data.html). We only use a subset of it, as required by research interest and privacy protection concerns. 
+
+The Incidents dataset comes in two flavours: `All incidents`, in JSON format, and `incidents extract`, in CSV format. There is also a list of bundles discovered in the data dump with their version and number of attached incidents.
+
+
+## All incidents (JSON)
+
+**All incidents** is the most complete dataset, with all attributes, stacktraces and bundles. Since the stacktraces and bundles structures are too complex for CSV, only the JSON export contains them. The dataset comes as a quite large compressed archive, with one JSON file per incident This represents a total of `r nrow(myincidents)` files (incidents).
+
+
+The structure of an incident file is examplified below: 
+
+    {
+      "eclipseBuildId": "4.6.1.M20160907-1200",
+      "eclipseProduct": "org.eclipse.epp.package.jee.product",
+      "fingerprint": "cd03d068798d141412b1d1605892fbec",
+      "fingerprint2": "12166d864efb7adcccc187034deb7dbf",
+      "javaRuntimeVersion": "1.8.0_112-b15",
+      "kind": "NORMAL",
+      "osgiArch": "x86_64",
+      "osgiOs": "Windows7",
+      "osgiOsVersion": "6.1.0",
+      "osgiWs": "win32",
+      "presentBundles": [
+        [ "bundle" ]
+      ],
+      "savedOn": "2016-11-08T10:23:01.914Z",
+      "severity": "UNKNOWN",
+      "stacktraces": [
+        [ "stacktrace" ]
+      ],
+      "status": {
+        "code": 0,
+        "fingerprint": "98631af2ddb2d197ebdca532f19d082b",
+        "message": "Failed to retrieve default libraries for C:\\Program Files\\Java\\jre1.8.0_111",
+        "pluginId": "org.eclipse.jdt.launching",
+        "pluginVersion": "3.8.100.v20160505-0636",
+        "severity": 4
+      },
+      "timestamp": "2016-11-08T10:22:59.204Z"
+    }
+    
+The structure used in the mongodb for stacktraces has been kept as is: it is composed of fields with all information relevant to each line of the stacktrace. Each stacktrace is an array of objects as shown below:
+
+    [
+      {
+        "cN": "sun.net.www.http.HttpClient",
+        "mN": "parseHTTPHeader",
+        "fN": "HttpClient.java",
+        "lN": 786,
+      }
+    ]
+
+Bundles have the following format:
+
+    {
+      "name": "org.eclipse.egit.core",
+      "version": "4.1.1.201511131810-r"
+    }
+
+
+## Incidents extract (CSV)
+
+The **Incidents extract** CSV dataset provides the same information as the full JSON dataset, excluding complex structures that cannot be easily formatted in CSV: stacktraces, bundles, products.
+
+Attributes are: ``r names(myincidents)``.
+
+Examples are provided at the end of this file to demonstrate how to use it in R.
+
+
+## Bundles extract (CSV)
+
+The **Bundles extract** CSV dataset lists the Eclipse bundles and versions associated to incidents, with the number of incidents for each pair. 
+
+```{r bundles.table, message=FALSE, echo=FALSE, warning=FALSE, results='asis', cache=TRUE}
+#library(DT)
+#datatable(mybundles[seq(1,10),], options=list(paging=F))
+kable(mybundles[seq(1,30),])
+```
+
+# Attributes
+
+## Message
+
+* Description: A short text summarising the error.
+* Type: String
+
+## Code
+
+* Description: The numeric status code logged with the error.
+* Type: Integer
+
+```{r attr.code.init, warning=FALSE, echo=FALSE, cache=TRUE}
+mysum <- summary(myincidents$code)
+```
+
+Statistical summary:
+
+* Range [ `r format(mysum[[1]], scientific = FALSE)` : `r format(mysum[[6]], scientific = FALSE)` ]
+* 1st Quartile `r mysum[[2]]`
+* Median `r mysum[[3]]`
+* Mean `r format(mysum[[4]], scientific = FALSE)`
+* 3rd Quartile `r format(mysum[[5]], scientific = FALSE)`
+
+## Severity
+
+* Description: An estimate by the user reporting the error about its perceived severity.
+* Type: Factors
+
+```{r attr.severity.init, warning=FALSE, echo=FALSE, cache=TRUE}
+mysum <- summary(myincidents$severity)
+```
+
+Distribution:
+
+* CRITICAL `r mysum[[c('CRITICAL')]]`
+* MAJOR `r mysum[[c('MAJOR')]]`
+* MINOR `r mysum[[c('MINOR')]]`
+* NO_BUG `r mysum[[c('NO_BUG')]]`
+* TRIVIAL `r mysum[[c('TRIVIAL')]]`
+* UNKNOWN `r mysum[[c('UNKNOWN')]]`
+
+
+## Kind {#attr_kind}
+
+* Description: The type of error recorded, as identified by the AERI system.
+* Type: Factors
+
+The possible values found in the dataset for this attributes are:
+
+```{r attr.kind, message=FALSE, echo=FALSE, warning=FALSE, results='asis', cache=TRUE}
+kinds <- table(myincidents$kind)
+kinds <- kinds[kinds != 0]
+kinds <- kinds[order(kinds, decreasing = TRUE)]
+t <- lapply(names(kinds), function(x) paste('* ', x, ' (count: ', kinds[[x]], ")", sep=''))
+t <- paste(t, collapse="\n")
+cat(t)
+```
+
+**Notes**
+
+There are different kinds of incidents described in the [official documentation](https://www.codetrails.com/error-analytics/manual/concepts/incident-kinds.html):
+
+* Normal Error: Normal errors are all exceptions that were reported by a client but that are not of kind defined below. Common examples of a normal error are a `NullPointerException` or `IllegalArgumentException`.
+  - An `OutOfMemoryError` is a special kind of exception. Unlike for normal errors, the stack frame (implicitly) throwing the exception is only sometimes indicative of the root cause of the problem.
+  - A `StackOverflowError` is a special kind of exception, whose unique characteristic is a repeating pattern of stack frames near the top of the stack trace.
+* UI Freeze: A UI freeze is caused by a long-running operation or even a deadlock on the UI thread. 
+* Third-Party Error: Third-party errors are reports that were received by the Codetrails Error Analytics Server, which deemed neither the configured projects nor their dependencies at fault. 
+* Third-Party UI Freeze: Third-Party UI Freezes are UI freezes that were received by the Codetrails Error Analytics Server, which deemed neither the configured projects nor their dependencies at fault. 
+
+## Plugin ID {#attr_plugin_id}
+
+* Description: The ID of the Eclipse plugin that threw the exception.
+* Type: Factors
+
+The possible values found in the dataset for this attributes are:
+
+```{r attr.plugin.id, message=FALSE, echo=FALSE, warning=FALSE, results='asis', cache=TRUE}
+occurences.max.pi <- 500
+pis <- data.frame(table(myincidents$pluginId))
+pis <- pis[order(-pis$Freq),]
+pis.top <- pis[pis[,c('Freq')] >= occurences.max.pi,]
+t <- lapply(pis.top$Var1, function(x) paste('* ', x, ' (count: ', pis.top[pis.top$Var1 == x,c("Freq")], ")", sep=''))
+t <- paste(t, collapse="\n")
+cat(t)
+```
+
+Visualisation of the most used Eclipse Build IDs in the dataset:
+
+```{r attr.plugin.id.plot, echo=FALSE, cache=TRUE}
+ggplot(pis.top[seq(1,30),], aes(x=reorder(Var1, Freq), y=Freq)) + geom_bar(stat='identity') + coord_flip() + 
+  theme_tufte() + xlab("Plugin IDs") + ggtitle("Repartition of most impacted plugin IDs in dataset")
+```
+
+
+## Plugin version {#attr_plugin_version}
+
+* Description: The ID of the Eclipse plugin that threw the exception.
+* Type: Factors
+
+```{r attr.pluginversion.init, echo=F, cache=TRUE}
+occurences.max.pv <- 500
+mypvs <- data.frame(table(myincidents$pluginVersion))
+mypvs <- mypvs[order(-mypvs$Freq),]
+mypvs.top <- mypvs[mypvs[,c('Freq')] >= occurences.max.pv,]
+```
+
+There are `r nrow(mypvs)` different values found in the dataset for this attribute. The following bar plot only displays the values with more than `r occurences.max.pv` occurrences:
+
+```{r attr.pluginversion.plot, echo=FALSE, message=FALSE, cache=TRUE}
+mypvs.df <- as.data.frame(mypvs.top)
+ggplot(mypvs.df[seq(1,30),], aes(x=reorder(Var1, Freq), y=Freq)) + geom_bar(stat='identity') + coord_flip() + 
+  theme_tufte() + xlab("Plugin version") + ggtitle("Repartition of top Eclipse plugin versions in dataset")
+```
+
+
+
+## Status fingerprint {#attr_status_fingerprint}
+
+* Description: An identifier for the status of the incident. Used for [duplicates detection](https://www.codetrails.com/error-analytics/manual/features/server/duplicate-detection.html).
+* Type: String
+
+
+## Incident fingerprint {#attr_fingerprint}
+
+* Description: An identifier for the incident. Used for [duplicates detection](https://www.codetrails.com/error-analytics/manual/features/server/duplicate-detection.html).
+* Type: String
+
+
+## Incident fingerprint2 {#attr_fingerprint2}
+
+* Description: An identifier for the incident. Used for [duplicates detection](https://www.codetrails.com/error-analytics/manual/features/server/duplicate-detection.html).
+* Type: String
+
+
+## Timestamp {#timestamp}
+
+* Description: The time of creation of the incident.
+* Type: Date (ISO8601)
+
+```{r attr.ts, echo=FALSE, cache=TRUE}
+myp.xts.ts <- xts(x = data.frame(c <- rep.int(1,nrow(myincidents))), order.by = parse_iso_8601(myincidents$timestamp))
+```
+
+Dates range from `r first(index(myp.xts.ts))` to `r last(index(myp.xts.ts))`.
+
+```{r attr.ts.plot, echo=FALSE, cache=TRUE}
+#xts.ts <- as.xts(apply.weekly(myp.xts.ts, sum))
+xts.ts <- apply.weekly(myp.xts.ts, sum)
+autoplot(xts.ts, geom='line') + 
+  theme_bw() + ylab("Incidents Timestamp") + ggtitle("Weekly number of Incidents timestamp")
+```
+
+
+## Saved On {#attr_saved_on}
+
+* Description: The time of last save of the problem.
+* Type: Date (ISO8601)
+
+```{r attr.savedOn, echo=FALSE, cache=TRUE}
+myp.xts.savedOn <- xts(x = data.frame(c <- rep.int(1,nrow(myincidents))), order.by = parse_iso_8601(myincidents$savedOn))
+```
+
+Dates range from `r first(index(myp.xts.savedOn))` to `r last(index(myp.xts.savedOn))`.
+
+```{r attr.savedOn.plot, echo=FALSE, cache=TRUE}
+xts.savedOn <- as.xts(apply.weekly(myp.xts.savedOn, sum))
+autoplot(xts.savedOn, geom='line') + 
+  theme_bw() + ylab("Problems SavedOn") + ggtitle("Weekly number of Problems SavedOn")
+```
+
+
+## OSGi Architecture {#attr_osgi_arch}
+
+* Description: The architecture of the host, as specified in the OSGi bundle definition.
+* Type: Factors
+
+Possible values found in the dataset for this attribute are:
+  
+```{r attr.osgi.arch, message=FALSE, echo=FALSE, warning=FALSE, results='asis', cache=TRUE}
+archs <- table(myincidents$osgiArch)
+archs <- archs[order(archs, decreasing = TRUE)]
+t <- lapply(names(archs), function(x) paste('* ', x, ' (count: ', archs[[x]], ")", sep=''))
+t <- paste(t, collapse="\n")
+cat(t)
+```
+
+Repartition of architectures:
+
+```{r osgiArch, echo=FALSE, message=FALSE, cache=TRUE}
+archs.df <- as.data.frame(archs)
+ggplot(archs.df[seq(1,30),], aes(x=reorder(Var1, Freq), y=Freq)) + geom_bar(stat='identity') + coord_flip() + 
+  theme_tufte() + xlab("OSGi Architecture") + ggtitle("Repartition of OSGi Architectures in dataset")
+```
+
+
+## OSGi OS {#attr_osgi_os}
+
+* Description: The host operating system, as reported in OSGi.
+* Type: Factors
+
+The possible values found in the dataset for this attributes are:
+
+```{r attr.osgi.os, message=FALSE, echo=FALSE, warning=FALSE, results='asis', cache=TRUE}
+oses <- table(myincidents$osgiOs)
+oses <- oses[order(oses, decreasing = TRUE)]
+t <- lapply(names(oses), function(x) paste('* ', x, ' (count: ', oses[[x]], ")", sep=''))
+t <- paste(t, collapse="\n")
+cat(t)
+```
+
+Visualisation of the various operating systems used in the dataset:
+
+```{r attr.osgi.os.plot, echo=FALSE, cache=TRUE}
+oses.df <- as.data.frame(oses)
+ggplot(oses.df[seq(1,30),], aes(x=reorder(Var1, Freq), y=Freq)) + geom_bar(stat='identity') + coord_flip() + 
+  theme_tufte() + xlab("OSGi Operating System") + ggtitle("Repartition of OSGi OS in dataset")
+```
+
+
+## OSGi OS Version {#attr_osgi_os_version}
+
+* Description: The host operating system version, as reported in OSGi.
+* Type: Factors
+
+The possible values found in the dataset for this attributes are:
+
+```{r attr.osgi.os.version, message=FALSE, echo=FALSE, warning=FALSE, results='asis', cache=TRUE}
+occurences.max.osv <- 500
+oses <- data.frame(table(myincidents$osgiOsVersion))
+oses <- oses[order(-oses$Freq),]
+oses.top <- oses[oses[,c('Freq')] >= occurences.max.osv,]
+t <- lapply(oses.top$Var1, function(x) paste('* ', x, ' (count: ', oses.top[oses.top$Var1 == x,c("Freq")], ")", sep=''))
+t <- paste(t, collapse="\n")
+cat(t)
+```
+
+Visualisation of the various operating system versions used in the dataset:
+
+```{r attr.osgi.os.version.plot, echo=FALSE, cache=TRUE}
+ggplot(oses.top[seq(1,30),], aes(x=reorder(Var1, Freq), y=Freq)) + geom_bar(stat='identity') + coord_flip() + 
+  theme_tufte() + xlab("OSGi Operating System Version") + ggtitle("Repartition of most used OSGi OS versions in dataset")
+```
+
+
+## OSGi Window Manager {#attr_osgi_ws}
+
+* Description: The Window Manager used by the host, as reported in OSGi.
+* Type: Factors
+
+The possible values found in the dataset for this attributes are:
+
+```{r attr.osgi.ws, message=FALSE, echo=FALSE, warning=FALSE, results='asis', cache=TRUE}
+oses <- table(myincidents$osgiWs)
+
+# We don't want an empty col name.
+names(oses)[names(oses) == ''] <- 'UNKNOWN'
+
+oses <- oses[order(oses, decreasing = TRUE)]
+t <- lapply(names(oses), function(x) paste('* ', x, ' (count: ', oses[[x]], ")", sep=''))
+t <- paste(t, collapse="\n")
+cat(t)
+```
+
+Visualisation of the various Window managers used in the dataset:
+
+```{r attr.osgi.ws.plot, echo=FALSE, cache=TRUE}
+oses.df <- as.data.frame(oses)
+ggplot(oses.df[seq(1,30),], aes(x=reorder(Var1, Freq), y=Freq)) + geom_bar(stat='identity') + coord_flip() + 
+  theme_tufte() + xlab("OSGi Window Managers") + ggtitle("Repartition of OSGi Window managers in dataset")
+```
+
+## Eclipse Build ID {#attr_eclipse_build_id}
+
+* Description: The Build ID of the Eclipse instance running when the exception occurred.
+* Type: Factors
+
+The possible values found in the dataset for this attributes are:
+
+```{r attr.eb.id, message=FALSE, echo=FALSE, warning=FALSE, results='asis', cache=TRUE}
+occurences.max.ebi <- 500
+ebis <- data.frame(table(myincidents$eclipseBuildId))
+ebis <- ebis[order(-ebis$Freq),]
+ebis.top <- ebis[ebis[,c('Freq')] >= occurences.max.ebi,]
+t <- lapply(ebis.top$Var1, function(x) paste('* ', x, ' (count: ', ebis.top[ebis.top$Var1 == x,c("Freq")], ")", sep=''))
+t <- paste(t, collapse="\n")
+cat(t)
+```
+
+Visualisation of the most used Eclipse Build IDs in the dataset:
+
+```{r attr.eb.id.plot, echo=FALSE, cache=TRUE}
+ggplot(ebis.top[seq(1,30),], aes(x=reorder(Var1, Freq), y=Freq)) + geom_bar(stat='identity') + coord_flip() + 
+  theme_tufte() + xlab("Eclipse Builds") + ggtitle("Repartition of most used Eclipse Build IDs in dataset")
+```
+
+## Eclipse Product {#attr_eclipse_product}
+
+* Description: The Eclipse product impacted by the exception.
+* Type: Factors
+
+The possible values found in the dataset for this attributes are:
+
+```{r attr.ep, message=FALSE, echo=FALSE, warning=FALSE, results='asis', cache=TRUE}
+occurences.max.eps <- 500
+eps <- data.frame(table(myincidents$eclipseBuildId))
+eps <- eps[order(-eps$Freq),]
+```
+
+There are `r nrow(eps)` different values found in the dataset for this attribute. The following table and bar plot only display the values with more than `r occurences.max.eps` occurrences:
+
+```{r attr.ep.table, message=FALSE, echo=FALSE, warning=FALSE, results='asis', cache=TRUE}
+eps.top <- eps[eps[,c('Freq')] >= occurences.max.eps,]
+t <- lapply(eps.top$Var1, function(x) paste('* ', x, ' (count: ', eps.top[eps.top$Var1 == x,c("Freq")], ")", sep=''))
+t <- paste(t, collapse="\n")
+cat(t)
+```
+
+Visualisation of the most used Eclipse Build IDs in the dataset:
+
+```{r attr.ep.plot, echo=FALSE, cache=TRUE}
+ggplot(eps.top[seq(1,30),], aes(x=reorder(Var1, Freq), y=Freq)) + geom_bar(stat='identity') + coord_flip() + 
+  theme_tufte() + xlab("Eclipse Products") + ggtitle("Repartition of most used Eclipse Products in dataset")
+```
+
+
+
+## Java runtime version {#attr_javaruntime}
+
+* Description: The Java runtime of the host.
+* Type: Factors
+
+```{r jrv.kable.init, echo=F, cache=TRUE}
+occurences.max.jrv <- 500
+myjrvs <- data.frame(table(myincidents$javaRuntimeVersion))
+myjrvs <- myjrvs[order(-myjrvs$Freq),]
+myjrvs.top <- myjrvs[myjrvs[,c('Freq')] >= occurences.max.jrv,]
+```
+
+There are `r nrow(myjrvs)` different values found in the dataset for this attribute. The following bar plot only displays the values with more than `r occurences.max.jrv` occurrences:
+
+```{r jrv.kable, eval=FALSE, include=FALSE, results='asis', cache=TRUE}
+kable(data.frame(myjrvs.top), row.names = F) %>% 
+  kable_styling(full_width = T, latex_options = c("striped", "hold_position"))
+```
+
+```{r jrv.plot, echo=FALSE, message=FALSE, cache=TRUE}
+myjrvs.df <- as.data.frame(myjrvs.top)
+ggplot(myjrvs.df[seq(1,30),], aes(x=reorder(Var1, Freq), y=Freq)) + geom_bar(stat='identity') + coord_flip() + 
+  theme_tufte() + xlab("Java runtime version") + ggtitle("Repartition of top Java runtime versions in dataset")
+```
+
+## Comment Quality
+
+* Description: An estimate of the user comment's quality (throughfulness). User comments help people better understand the context of the exception.
+* Type: Factors
+
+```{r attr.cq.init, warning=FALSE, echo=FALSE, cache=TRUE}
+mysum <- summary(myincidents$commentQuality)
+```
+
+Distribution:
+
+* HIGH `r mysum[[c('HIGH')]]`
+* MEDIUM `r mysum[[c('MEDIUM')]]`
+* LOW `r mysum[[c('LOW')]]`
+* UNKNOWN `r mysum[[c('UNKNOWN')]]`
+
+
+# Using the dataset
+
+## Reading CSV file
+
+Reading file from `r file.in`. 
+
+```
+myincidents <- read.csv(file.in, header=T)
+myincidents[,c("bug", "status")] <- NULL
+```
+
+There are ``r ncol(myincidents)`` columns and ``r nrow(myincidents)`` entries in this dataset:
+
+```{r examples.ncol, echo=T}
+ncol(myincidents)
+```
+
+```{r examples.nrow, echo=T}
+nrow(myincidents)
+```
+
+Names of columns: 
+
+```{r examples.names, echo=T}
+names(myincidents)
+```
+
+
+## Using time series (xts)
+
+The dataset needs to be converted to a `xts` object. We can use one of the 2 dates: `timestamp` or `savedOn`.
+
+```
+require(xts)
+myp.xts <- xts(x = myincidents, order.by = parse_iso_8601(myincidents$savedOn))
+```
+
+## Plot time series
+
+Plot the number of weekly saves (attribute savedOn).
+
+```{r use.ts.plot, echo=FALSE, cache=TRUE}
+autoplot(xts.ts, geom='line') + 
+  theme_bw() + ylab("Incidents Timestamp") + ggtitle("Weekly number of Incidents timestamp")
+```
+
diff --git a/aeri_stacktraces/incidents_analysis.pdf b/aeri_stacktraces/incidents_analysis.pdf
new file mode 100644
index 0000000..bea9ad3
--- /dev/null
+++ b/aeri_stacktraces/incidents_analysis.pdf
Binary files differ
diff --git a/aeri_stacktraces/incidents_analysis.rmd b/aeri_stacktraces/incidents_analysis.rmd
new file mode 100644
index 0000000..c08e3fc
--- /dev/null
+++ b/aeri_stacktraces/incidents_analysis.rmd
@@ -0,0 +1,581 @@
+---
+title: "StackTraces -- Incidents"
+subtitle: "R Analysis document"
+author: "Boris Baldassari -- Castalia Solutions"
+output:
+  pdf_document:
+    toc: yes
+    toc_depth: 3
+    keep_tex: true
+    extra_dependencies:
+      - grffile
+  html_document:
+    toc: yes
+    toc_depth: 2
+  word_document:
+    toc: yes
+    toc_depth: '2'
+---
+
+```{r init, message=FALSE, echo=FALSE, cache=FALSE}
+library(ggplot2)
+library(ggthemes)
+library(knitr)
+
+library(kableExtra)
+options(knitr.table.format = "latex")
+
+library(parsedate)
+library(magrittr)
+
+require(xts)
+```
+
+```{r init.read, message=FALSE, echo=FALSE, cache=TRUE}
+# Read csv file
+file.in <- "incidents_extract.csv"
+myincidents <- read.csv(file.in, header=T, quote='"')
+file.in.bundles <- "incidents_bundles_extract.csv"
+mybundles <- read.csv(file.in.bundles, header=T, quote='"')
+
+# Create xts object
+myincidents <- myincidents[myincidents$timestamp != '',]
+myincidents <- myincidents[myincidents$savedOn != '',]
+myp.xts <- xts(x = myincidents, order.by = parse_iso_8601(myincidents$timestamp))
+```
+
+# Introduction
+
+## About this dataset
+
+The [Automated Error Reporting](https://wiki.eclipse.org/EPP/Logging) (AERI) system retrieves [information about exceptions](https://www.codetrails.com/error-analytics/manual/). It is installed by default in the [Eclipse IDE](http://www.eclipse.org/ide/) and has helped hundreds of projects better support their users and resolve bugs.  
+
+This dataset is a dump of all records over a couple of years, with useful information about the exceptions and environment.
+
+* **Generated date**: `r date()`
+* **First date**: `r first(index(myp.xts))`
+* **Last date**: `r last(index(myp.xts))`
+* **Number of incidents**: `r nrow(myp.xts)`
+* **Number of attributes**: `r ncol(myp.xts)`
+
+## Terminology
+
+* **Incidents** When an exception occurs and is trapped by the AERI system, it constitutes an incident (or error report). An incident can be reported by several different people, can be reported multiple times, and can be linked to different environments.
+* **Problems** As soon as an error report arrives on the server, it will be analyzed and subsequently assigned to one or more problems. A problem thus represents a set of (similar) error reports which usually have the same root cause – for example a bug in your software. (Extract from the [AERI system documentation](https://www.codetrails.com/error-analytics/manual/concepts/error-reports-problems-bugs-projects.html))
+
+This dataset targets only the Incidents of the AERI dataset. There is another dedicated document for the Problems.
+
+## Privacy concerns
+
+We value privacy and intend to make everything we can to prevent misuse of the dataset. If you think we failed somewhere in the process, please [let us know](https://www.crossminer.org/contact) so we can do better.
+
+The AERI system itself doesn't gather much private information, and takes a great care of it. Ths dataset goes a step further and removes all identifiable information. 
+
+* There is **no email address** in this dataset, **nor any UUID**. 
+* People not willing to share their traces to the AERI system can tick the private option. This choice has been respected, and all classes that do not belong to public hierarchy have been hidden thanks to an anonymisation mechanism.
+
+The anonymisation technique used basically encrypts information and then throws away the private key. Please refer to the [documentation published on github](https://github.com/borisbaldassari/data-anonymiser) for more details.
+
+
+## About this document
+
+This document is a [R Markdown document](http://rmarkdown.rstudio.com) and is composed of both text (like this one) and dynamically computed information (mostly in the Anaysis section below) executed on the data itself. This ensures that the information is always synchronised with the data, and serves as a test suite for the dataset.
+
+
+# Structure of data
+
+The plugin collects a [lot of useful information](https://www.codetrails.com/error-analytics/manual/misc/sent-data.html). We only use a subset of it, as required by research interest and privacy protection concerns. 
+
+The Incidents dataset comes in two flavours: `All incidents`, in JSON format, and `incidents extract`, in CSV format. There is also a list of bundles discovered in the data dump with their version and number of attached incidents.
+
+
+## All incidents (JSON)
+
+**All incidents** is the most complete dataset, with all attributes, stacktraces and bundles. Since the stacktraces and bundles structures are too complex for CSV, only the JSON export contains them. The dataset comes as a quite large compressed archive, with one JSON file per incident This represents a total of `r nrow(myincidents)` files (incidents).
+
+
+The structure of an incident file is examplified below: 
+
+    {
+      "eclipseBuildId": "4.6.1.M20160907-1200",
+      "eclipseProduct": "org.eclipse.epp.package.jee.product",
+      "fingerprint": "cd03d068798d141412b1d1605892fbec",
+      "fingerprint2": "12166d864efb7adcccc187034deb7dbf",
+      "javaRuntimeVersion": "1.8.0_112-b15",
+      "kind": "NORMAL",
+      "osgiArch": "x86_64",
+      "osgiOs": "Windows7",
+      "osgiOsVersion": "6.1.0",
+      "osgiWs": "win32",
+      "presentBundles": [
+        [ "bundle" ]
+      ],
+      "savedOn": "2016-11-08T10:23:01.914Z",
+      "severity": "UNKNOWN",
+      "stacktraces": [
+        [ "stacktrace" ]
+      ],
+      "status": {
+        "code": 0,
+        "fingerprint": "98631af2ddb2d197ebdca532f19d082b",
+        "message": "Failed to retrieve default libraries for C:\\Program Files\\Java\\jre1.8.0_111",
+        "pluginId": "org.eclipse.jdt.launching",
+        "pluginVersion": "3.8.100.v20160505-0636",
+        "severity": 4
+      },
+      "timestamp": "2016-11-08T10:22:59.204Z"
+    }
+    
+The structure used in the mongodb for stacktraces has been kept as is: it is composed of fields with all information relevant to each line of the stacktrace. Each stacktrace is an array of objects as shown below:
+
+    [
+      {
+        "cN": "sun.net.www.http.HttpClient",
+        "mN": "parseHTTPHeader",
+        "fN": "HttpClient.java",
+        "lN": 786,
+      }
+    ]
+
+Bundles have the following format:
+
+    {
+      "name": "org.eclipse.egit.core",
+      "version": "4.1.1.201511131810-r"
+    }
+
+
+## Incidents extract (CSV)
+
+The **Incidents extract** CSV dataset provides the same information as the full JSON dataset, excluding complex structures that cannot be easily formatted in CSV: stacktraces, bundles, products.
+
+Attributes are: ``r names(myincidents)``.
+
+Examples are provided at the end of this file to demonstrate how to use it in R.
+
+
+## Bundles extract (CSV)
+
+The **Bundles extract** CSV dataset lists the Eclipse bundles and versions associated to incidents, with the number of incidents for each pair. 
+
+```{r bundles.table, message=FALSE, echo=FALSE, warning=FALSE, results='asis', cache=TRUE}
+#library(DT)
+#datatable(mybundles[seq(1,10),], options=list(paging=F))
+kable(mybundles[seq(1,30),])
+```
+
+# Attributes
+
+## Message
+
+* Description: A short text summarising the error.
+* Type: String
+
+## Code
+
+* Description: The numeric status code logged with the error.
+* Type: Integer
+
+```{r attr.code.init, warning=FALSE, echo=FALSE, cache=TRUE}
+mysum <- summary(myincidents$code)
+```
+
+Statistical summary:
+
+* Range [ `r format(mysum[[1]], scientific = FALSE)` : `r format(mysum[[6]], scientific = FALSE)` ]
+* 1st Quartile `r mysum[[2]]`
+* Median `r mysum[[3]]`
+* Mean `r format(mysum[[4]], scientific = FALSE)`
+* 3rd Quartile `r format(mysum[[5]], scientific = FALSE)`
+
+## Severity
+
+* Description: An estimate by the user reporting the error about its perceived severity.
+* Type: Factors
+
+```{r attr.severity.init, warning=FALSE, echo=FALSE, cache=TRUE}
+mysum <- summary(myincidents$severity)
+```
+
+Distribution:
+
+* CRITICAL `r mysum[[c('CRITICAL')]]`
+* MAJOR `r mysum[[c('MAJOR')]]`
+* MINOR `r mysum[[c('MINOR')]]`
+* NO_BUG `r mysum[[c('NO_BUG')]]`
+* TRIVIAL `r mysum[[c('TRIVIAL')]]`
+* UNKNOWN `r mysum[[c('UNKNOWN')]]`
+
+
+## Kind {#attr_kind}
+
+* Description: The type of error recorded, as identified by the AERI system.
+* Type: Factors
+
+The possible values found in the dataset for this attributes are:
+
+```{r attr.kind, message=FALSE, echo=FALSE, warning=FALSE, results='asis', cache=TRUE}
+kinds <- table(myincidents$kind)
+kinds <- kinds[kinds != 0]
+kinds <- kinds[order(kinds, decreasing = TRUE)]
+t <- lapply(names(kinds), function(x) paste('* ', x, ' (count: ', kinds[[x]], ")", sep=''))
+t <- paste(t, collapse="\n")
+cat(t)
+```
+
+**Notes**
+
+There are different kinds of incidents described in the [official documentation](https://www.codetrails.com/error-analytics/manual/concepts/incident-kinds.html):
+
+* Normal Error: Normal errors are all exceptions that were reported by a client but that are not of kind defined below. Common examples of a normal error are a `NullPointerException` or `IllegalArgumentException`.
+  - An `OutOfMemoryError` is a special kind of exception. Unlike for normal errors, the stack frame (implicitly) throwing the exception is only sometimes indicative of the root cause of the problem.
+  - A `StackOverflowError` is a special kind of exception, whose unique characteristic is a repeating pattern of stack frames near the top of the stack trace.
+* UI Freeze: A UI freeze is caused by a long-running operation or even a deadlock on the UI thread. 
+* Third-Party Error: Third-party errors are reports that were received by the Codetrails Error Analytics Server, which deemed neither the configured projects nor their dependencies at fault. 
+* Third-Party UI Freeze: Third-Party UI Freezes are UI freezes that were received by the Codetrails Error Analytics Server, which deemed neither the configured projects nor their dependencies at fault. 
+
+## Plugin ID {#attr_plugin_id}
+
+* Description: The ID of the Eclipse plugin that threw the exception.
+* Type: Factors
+
+The possible values found in the dataset for this attributes are:
+
+```{r attr.plugin.id, message=FALSE, echo=FALSE, warning=FALSE, results='asis', cache=TRUE}
+occurences.max.pi <- 500
+pis <- data.frame(table(myincidents$pluginId))
+pis <- pis[order(-pis$Freq),]
+pis.top <- pis[pis[,c('Freq')] >= occurences.max.pi,]
+t <- lapply(pis.top$Var1, function(x) paste('* ', x, ' (count: ', pis.top[pis.top$Var1 == x,c("Freq")], ")", sep=''))
+t <- paste(t, collapse="\n")
+cat(t)
+```
+
+Visualisation of the most used Eclipse Build IDs in the dataset:
+
+```{r attr.plugin.id.plot, echo=FALSE, cache=TRUE}
+ggplot(pis.top[seq(1,30),], aes(x=reorder(Var1, Freq), y=Freq)) + geom_bar(stat='identity') + coord_flip() + 
+  theme_tufte() + xlab("Plugin IDs") + ggtitle("Repartition of most impacted plugin IDs in dataset")
+```
+
+
+## Plugin version {#attr_plugin_version}
+
+* Description: The ID of the Eclipse plugin that threw the exception.
+* Type: Factors
+
+```{r attr.pluginversion.init, echo=F, cache=TRUE}
+occurences.max.pv <- 500
+mypvs <- data.frame(table(myincidents$pluginVersion))
+mypvs <- mypvs[order(-mypvs$Freq),]
+mypvs.top <- mypvs[mypvs[,c('Freq')] >= occurences.max.pv,]
+```
+
+There are `r nrow(mypvs)` different values found in the dataset for this attribute. The following bar plot only displays the values with more than `r occurences.max.pv` occurrences:
+
+```{r attr.pluginversion.plot, echo=FALSE, message=FALSE, cache=TRUE}
+mypvs.df <- as.data.frame(mypvs.top)
+ggplot(mypvs.df[seq(1,30),], aes(x=reorder(Var1, Freq), y=Freq)) + geom_bar(stat='identity') + coord_flip() + 
+  theme_tufte() + xlab("Plugin version") + ggtitle("Repartition of top Eclipse plugin versions in dataset")
+```
+
+
+
+## Status fingerprint {#attr_status_fingerprint}
+
+* Description: An identifier for the status of the incident. Used for [duplicates detection](https://www.codetrails.com/error-analytics/manual/features/server/duplicate-detection.html).
+* Type: String
+
+
+## Incident fingerprint {#attr_fingerprint}
+
+* Description: An identifier for the incident. Used for [duplicates detection](https://www.codetrails.com/error-analytics/manual/features/server/duplicate-detection.html).
+* Type: String
+
+
+## Incident fingerprint2 {#attr_fingerprint2}
+
+* Description: An identifier for the incident. Used for [duplicates detection](https://www.codetrails.com/error-analytics/manual/features/server/duplicate-detection.html).
+* Type: String
+
+
+## Timestamp {#timestamp}
+
+* Description: The time of creation of the incident.
+* Type: Date (ISO8601)
+
+```{r attr.ts, echo=FALSE, cache=TRUE}
+myp.xts.ts <- xts(x = data.frame(c <- rep.int(1,nrow(myincidents))), order.by = parse_iso_8601(myincidents$timestamp))
+```
+
+Dates range from `r first(index(myp.xts.ts))` to `r last(index(myp.xts.ts))`.
+
+```{r attr.ts.plot, echo=FALSE, cache=TRUE}
+#xts.ts <- as.xts(apply.weekly(myp.xts.ts, sum))
+xts.ts <- apply.weekly(myp.xts.ts, sum)
+autoplot(xts.ts, geom='line') + 
+  theme_bw() + ylab("Incidents Timestamp") + ggtitle("Weekly number of Incidents timestamp")
+```
+
+
+## Saved On {#attr_saved_on}
+
+* Description: The time of last save of the problem.
+* Type: Date (ISO8601)
+
+```{r attr.savedOn, echo=FALSE, cache=TRUE}
+myp.xts.savedOn <- xts(x = data.frame(c <- rep.int(1,nrow(myincidents))), order.by = parse_iso_8601(myincidents$savedOn))
+```
+
+Dates range from `r first(index(myp.xts.savedOn))` to `r last(index(myp.xts.savedOn))`.
+
+```{r attr.savedOn.plot, echo=FALSE, cache=TRUE}
+xts.savedOn <- as.xts(apply.weekly(myp.xts.savedOn, sum))
+autoplot(xts.savedOn, geom='line') + 
+  theme_bw() + ylab("Problems SavedOn") + ggtitle("Weekly number of Problems SavedOn")
+```
+
+
+## OSGi Architecture {#attr_osgi_arch}
+
+* Description: The architecture of the host, as specified in the OSGi bundle definition.
+* Type: Factors
+
+Possible values found in the dataset for this attribute are:
+  
+```{r attr.osgi.arch, message=FALSE, echo=FALSE, warning=FALSE, results='asis', cache=TRUE}
+archs <- table(myincidents$osgiArch)
+archs <- archs[order(archs, decreasing = TRUE)]
+t <- lapply(names(archs), function(x) paste('* ', x, ' (count: ', archs[[x]], ")", sep=''))
+t <- paste(t, collapse="\n")
+cat(t)
+```
+
+Repartition of architectures:
+
+```{r osgiArch, echo=FALSE, message=FALSE, cache=TRUE}
+archs.df <- as.data.frame(archs)
+ggplot(archs.df[seq(1,30),], aes(x=reorder(Var1, Freq), y=Freq)) + geom_bar(stat='identity') + coord_flip() + 
+  theme_tufte() + xlab("OSGi Architecture") + ggtitle("Repartition of OSGi Architectures in dataset")
+```
+
+
+## OSGi OS {#attr_osgi_os}
+
+* Description: The host operating system, as reported in OSGi.
+* Type: Factors
+
+The possible values found in the dataset for this attributes are:
+
+```{r attr.osgi.os, message=FALSE, echo=FALSE, warning=FALSE, results='asis', cache=TRUE}
+oses <- table(myincidents$osgiOs)
+oses <- oses[order(oses, decreasing = TRUE)]
+t <- lapply(names(oses), function(x) paste('* ', x, ' (count: ', oses[[x]], ")", sep=''))
+t <- paste(t, collapse="\n")
+cat(t)
+```
+
+Visualisation of the various operating systems used in the dataset:
+
+```{r attr.osgi.os.plot, echo=FALSE, cache=TRUE}
+oses.df <- as.data.frame(oses)
+ggplot(oses.df[seq(1,30),], aes(x=reorder(Var1, Freq), y=Freq)) + geom_bar(stat='identity') + coord_flip() + 
+  theme_tufte() + xlab("OSGi Operating System") + ggtitle("Repartition of OSGi OS in dataset")
+```
+
+
+## OSGi OS Version {#attr_osgi_os_version}
+
+* Description: The host operating system version, as reported in OSGi.
+* Type: Factors
+
+The possible values found in the dataset for this attributes are:
+
+```{r attr.osgi.os.version, message=FALSE, echo=FALSE, warning=FALSE, results='asis', cache=TRUE}
+occurences.max.osv <- 500
+oses <- data.frame(table(myincidents$osgiOsVersion))
+oses <- oses[order(-oses$Freq),]
+oses.top <- oses[oses[,c('Freq')] >= occurences.max.osv,]
+t <- lapply(oses.top$Var1, function(x) paste('* ', x, ' (count: ', oses.top[oses.top$Var1 == x,c("Freq")], ")", sep=''))
+t <- paste(t, collapse="\n")
+cat(t)
+```
+
+Visualisation of the various operating system versions used in the dataset:
+
+```{r attr.osgi.os.version.plot, echo=FALSE, cache=TRUE}
+ggplot(oses.top[seq(1,30),], aes(x=reorder(Var1, Freq), y=Freq)) + geom_bar(stat='identity') + coord_flip() + 
+  theme_tufte() + xlab("OSGi Operating System Version") + ggtitle("Repartition of most used OSGi OS versions in dataset")
+```
+
+
+## OSGi Window Manager {#attr_osgi_ws}
+
+* Description: The Window Manager used by the host, as reported in OSGi.
+* Type: Factors
+
+The possible values found in the dataset for this attributes are:
+
+```{r attr.osgi.ws, message=FALSE, echo=FALSE, warning=FALSE, results='asis', cache=TRUE}
+oses <- table(myincidents$osgiWs)
+
+# We don't want an empty col name.
+names(oses)[names(oses) == ''] <- 'UNKNOWN'
+
+oses <- oses[order(oses, decreasing = TRUE)]
+t <- lapply(names(oses), function(x) paste('* ', x, ' (count: ', oses[[x]], ")", sep=''))
+t <- paste(t, collapse="\n")
+cat(t)
+```
+
+Visualisation of the various Window managers used in the dataset:
+
+```{r attr.osgi.ws.plot, echo=FALSE, cache=TRUE}
+oses.df <- as.data.frame(oses)
+ggplot(oses.df[seq(1,30),], aes(x=reorder(Var1, Freq), y=Freq)) + geom_bar(stat='identity') + coord_flip() + 
+  theme_tufte() + xlab("OSGi Window Managers") + ggtitle("Repartition of OSGi Window managers in dataset")
+```
+
+## Eclipse Build ID {#attr_eclipse_build_id}
+
+* Description: The Build ID of the Eclipse instance running when the exception occurred.
+* Type: Factors
+
+The possible values found in the dataset for this attributes are:
+
+```{r attr.eb.id, message=FALSE, echo=FALSE, warning=FALSE, results='asis', cache=TRUE}
+occurences.max.ebi <- 500
+ebis <- data.frame(table(myincidents$eclipseBuildId))
+ebis <- ebis[order(-ebis$Freq),]
+ebis.top <- ebis[ebis[,c('Freq')] >= occurences.max.ebi,]
+t <- lapply(ebis.top$Var1, function(x) paste('* ', x, ' (count: ', ebis.top[ebis.top$Var1 == x,c("Freq")], ")", sep=''))
+t <- paste(t, collapse="\n")
+cat(t)
+```
+
+Visualisation of the most used Eclipse Build IDs in the dataset:
+
+```{r attr.eb.id.plot, echo=FALSE, cache=TRUE}
+ggplot(ebis.top[seq(1,30),], aes(x=reorder(Var1, Freq), y=Freq)) + geom_bar(stat='identity') + coord_flip() + 
+  theme_tufte() + xlab("Eclipse Builds") + ggtitle("Repartition of most used Eclipse Build IDs in dataset")
+```
+
+## Eclipse Product {#attr_eclipse_product}
+
+* Description: The Eclipse product impacted by the exception.
+* Type: Factors
+
+The possible values found in the dataset for this attributes are:
+
+```{r attr.ep, message=FALSE, echo=FALSE, warning=FALSE, results='asis', cache=TRUE}
+occurences.max.eps <- 500
+eps <- data.frame(table(myincidents$eclipseBuildId))
+eps <- eps[order(-eps$Freq),]
+```
+
+There are `r nrow(eps)` different values found in the dataset for this attribute. The following table and bar plot only display the values with more than `r occurences.max.eps` occurrences:
+
+```{r attr.ep.table, message=FALSE, echo=FALSE, warning=FALSE, results='asis', cache=TRUE}
+eps.top <- eps[eps[,c('Freq')] >= occurences.max.eps,]
+t <- lapply(eps.top$Var1, function(x) paste('* ', x, ' (count: ', eps.top[eps.top$Var1 == x,c("Freq")], ")", sep=''))
+t <- paste(t, collapse="\n")
+cat(t)
+```
+
+Visualisation of the most used Eclipse Build IDs in the dataset:
+
+```{r attr.ep.plot, echo=FALSE, cache=TRUE}
+ggplot(eps.top[seq(1,30),], aes(x=reorder(Var1, Freq), y=Freq)) + geom_bar(stat='identity') + coord_flip() + 
+  theme_tufte() + xlab("Eclipse Products") + ggtitle("Repartition of most used Eclipse Products in dataset")
+```
+
+
+
+## Java runtime version {#attr_javaruntime}
+
+* Description: The Java runtime of the host.
+* Type: Factors
+
+```{r jrv.kable.init, echo=F, cache=TRUE}
+occurences.max.jrv <- 500
+myjrvs <- data.frame(table(myincidents$javaRuntimeVersion))
+myjrvs <- myjrvs[order(-myjrvs$Freq),]
+myjrvs.top <- myjrvs[myjrvs[,c('Freq')] >= occurences.max.jrv,]
+```
+
+There are `r nrow(myjrvs)` different values found in the dataset for this attribute. The following bar plot only displays the values with more than `r occurences.max.jrv` occurrences:
+
+```{r jrv.kable, eval=FALSE, include=FALSE, results='asis', cache=TRUE}
+kable(data.frame(myjrvs.top), row.names = F) %>% 
+  kable_styling(full_width = T, latex_options = c("striped", "hold_position"))
+```
+
+```{r jrv.plot, echo=FALSE, message=FALSE, cache=TRUE}
+myjrvs.df <- as.data.frame(myjrvs.top)
+ggplot(myjrvs.df[seq(1,30),], aes(x=reorder(Var1, Freq), y=Freq)) + geom_bar(stat='identity') + coord_flip() + 
+  theme_tufte() + xlab("Java runtime version") + ggtitle("Repartition of top Java runtime versions in dataset")
+```
+
+## Comment Quality
+
+* Description: An estimate of the user comment's quality (throughfulness). User comments help people better understand the context of the exception.
+* Type: Factors
+
+```{r attr.cq.init, warning=FALSE, echo=FALSE, cache=TRUE}
+mysum <- summary(myincidents$commentQuality)
+```
+
+Distribution:
+
+* HIGH `r mysum[[c('HIGH')]]`
+* MEDIUM `r mysum[[c('MEDIUM')]]`
+* LOW `r mysum[[c('LOW')]]`
+* UNKNOWN `r mysum[[c('UNKNOWN')]]`
+
+
+# Using the dataset
+
+## Reading CSV file
+
+Reading file from `r file.in`. 
+
+```
+myincidents <- read.csv(file.in, header=T)
+myincidents[,c("bug", "status")] <- NULL
+```
+
+There are ``r ncol(myincidents)`` columns and ``r nrow(myincidents)`` entries in this dataset:
+
+```{r examples.ncol, echo=T}
+ncol(myincidents)
+```
+
+```{r examples.nrow, echo=T}
+nrow(myincidents)
+```
+
+Names of columns: 
+
+```{r examples.names, echo=T}
+names(myincidents)
+```
+
+
+## Using time series (xts)
+
+The dataset needs to be converted to a `xts` object. We can use one of the 2 dates: `timestamp` or `savedOn`.
+
+```
+require(xts)
+myp.xts <- xts(x = myincidents, order.by = parse_iso_8601(myincidents$savedOn))
+```
+
+## Plot time series
+
+Plot the number of weekly saves (attribute savedOn).
+
+```{r use.ts.plot, echo=FALSE, cache=TRUE}
+autoplot(xts.ts, geom='line') + 
+  theme_bw() + ylab("Incidents Timestamp") + ggtitle("Weekly number of Incidents timestamp")
+```
+
diff --git a/aeri_stacktraces/index.html b/aeri_stacktraces/index.html
new file mode 100644
index 0000000..e9db715
--- /dev/null
+++ b/aeri_stacktraces/index.html
@@ -0,0 +1,313 @@
+<!DOCTYPE html>
+<html lang='en' dir='auto'><head>
+  <meta charset='utf-8'>
+<meta name='viewport' content='width=device-width, initial-scale=1'>
+<meta name='description' content=''>
+<meta name='theme-color' content='#ffcd00'>
+
+<meta property='og:title' content='AERI Stacktraces • Eclipse DataEggs'>
+<meta property='og:description' content=''>
+<meta property='og:url' content='https://download.eclipse.org/dataeggs/aeri_stacktraces/'>
+<meta property='og:site_name' content='Eclipse DataEggs'>
+<meta property='og:type' content='website'><meta name='twitter:card' content='summary'>
+
+<meta name="generator" content="Hugo 0.83.1" />
+
+  <title>AERI Stacktraces • Eclipse DataEggs</title>
+  <link rel='canonical' href='https://download.eclipse.org/dataeggs/aeri_stacktraces/'>
+  
+    <link href="https://download.eclipse.org/dataeggs/aeri_stacktraces/index.xml" rel="alternate" type="application/rss+xml" title="Eclipse DataEggs" />
+  
+  
+  <link rel='icon' href='/dataeggs/favicon.ico'>
+<link rel='stylesheet' href='/dataeggs/assets/css/main.ab98e12b.css'><link rel='stylesheet' href='/dataeggs/css/custom.css'><style>
+:root{--color-accent:#ffcd00;}
+</style>
+
+<script type="application/javascript">
+var doNotTrack = false;
+if (!doNotTrack) {
+	window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)};ga.l=+new Date;
+	ga('create', 'UA-3675452-15', 'auto');
+	
+	ga('send', 'pageview');
+}
+</script>
+<script async src='https://www.google-analytics.com/analytics.js'></script>
+
+  
+
+</head>
+<body class='section type-aeri_stacktraces has-sidebar'>
+
+  <div class='site'><div id='sidebar' class='sidebar'>
+  <a class='screen-reader-text' href='#main-menu'>Skip to Main Menu</a>
+
+  <div class='container'><section class='widget widget-about sep-after'>
+  <header>
+    
+    <div class='logo'>
+      <a href='/dataeggs/'>
+        <img src='/dataeggs/images/dataeggs-menu.png'>
+      </a>
+    </div>
+    
+    <div class='desc'>
+    Open. Safe. Easy.
+    </div>
+  </header>
+
+</section>
+<section class='widget widget-search sep-after'>
+  <header>
+    <h4 class='title widget-title'>Search</h4>
+  </header>
+
+  <form action='/dataeggs/search' id='search-form' class='search-form'>
+    <label>
+      <span class='screen-reader-text'>Search</span>
+      <input id='search-term' class='search-term' type='search' name='q' placeholder='Search&hellip;'>
+    </label></form>
+
+</section>
+<section class='widget widget-sidebar_menu sep-after'><nav id='sidebar-menu' class='menu sidebar-menu' aria-label='Sidebar Menu'>
+    <div class='container'>
+      <ul><li class='item'>
+  <a href='/dataeggs/'>Home</a></li><li class='item'>
+  <a href='/dataeggs/privacy/'>Privacy</a></li><li class='item current'>
+  <a aria-current='page' href='/dataeggs/aeri_stacktraces/'>AERI</a></li><li class='item'>
+  <a href='/dataeggs/eclipse_mls/'>MLS</a></li></ul>
+    </div>
+  </nav>
+
+</section><section class='widget widget-social_menu sep-after'><nav aria-label='Social Menu'>
+    <ul><li>
+        <a href='https://gitlab.eclipse.org/dataeggs/dataeggs' target='_blank' rel='noopener me'>
+          <span class='screen-reader-text'>Open Gitlab account in new tab</span><svg class='icon' xmlns='http://www.w3.org/2000/svg' viewbox='0 0 24 24' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' aria-hidden='true'>
+    
+    <title>GitLab icon</title>  <path d="M22.65 14.39L12 22.13 1.35 14.39a.84.84 0 0 1-.3-.94l1.22-3.78 2.44-7.51A.42.42 0 0 1 4.82 2a.43.43 0 0 1 .58 0 .42.42 0 0 1 .11.18l2.44 7.49h8.1l2.44-7.51A.42.42 0 0 1 18.6 2a.43.43 0 0 1 .58 0 .42.42 0 0 1 .11.18l2.44 7.51L23 13.45a.84.84 0 0 1-.35.94z"/>
+</svg>
+</a>
+      </li><li>
+        <a href='mailto:boris@chrysalice.org' target='_blank' rel='noopener me'>
+          <span class='screen-reader-text'>Contact via Email</span><svg class='icon' xmlns='http://www.w3.org/2000/svg' viewbox='0 0 24 24' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' aria-hidden='true'>
+    
+    <path d="M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z"></path><polyline points="22,6 12,13 2,6"></polyline>
+</svg>
+</a>
+      </li></ul>
+  </nav>
+</section></div>
+
+  <div class='sidebar-overlay'></div>
+</div><div class='main'><a class='screen-reader-text' href='#content'>Skip to Content</a>
+
+<button id='sidebar-toggler' class='sidebar-toggler' aria-controls='sidebar'>
+  <span class='screen-reader-text'>Toggle Sidebar</span>
+  <span class='open'><svg class='icon' xmlns='http://www.w3.org/2000/svg' viewbox='0 0 24 24' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' aria-hidden='true'>
+    
+    
+  <line x1="3" y1="12" x2="21" y2="12" />
+  <line x1="3" y1="6" x2="21" y2="6" />
+  <line x1="3" y1="18" x2="21" y2="18" />
+
+</svg>
+</span>
+  <span class='close'><svg class='icon' xmlns='http://www.w3.org/2000/svg' viewbox='0 0 24 24' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' aria-hidden='true'>
+    
+    
+  <line x1="18" y1="6" x2="6" y2="18" />
+  <line x1="6" y1="6" x2="18" y2="18" />
+
+</svg>
+</span>
+</button><div class='header-widgets'>
+        <div class='container'>
+    <style>.widget-breadcrumbs li:after{content:'\2f '}</style>
+  <section class='widget widget-breadcrumbs sep-after'>
+    <nav id='breadcrumbs'>
+      <ol><li><a href='/dataeggs/'>Home</a></li><li><span>AERI</span></li></ol>
+    </nav>
+  </section></div>
+      </div>
+
+      <header id='header' class='header site-header'>
+        <div class='container sep-after'>
+          <div class='header-info'><p class='site-title title'>Eclipse DataEggs</p><p class='desc site-desc'></p>
+          </div>
+        </div>
+      </header>
+
+      <main id='content'>
+
+
+<header class='header'>
+  <div class='container sep-after'>
+    <div class='header-info'>
+      <h1 class='title'>AERI Stacktraces</h1>
+
+      
+
+    </div>
+  </div>
+</header>
+
+
+
+<div class='entry'>
+  <div class='container entry-content'>
+  <p>The <strong>AERI stacktraces dataset</strong> is a list of exceptions encountered by users in the Eclipse IDE, as retrieved by the AERI system. The <a href="https://wiki.eclipse.org/EPP/Logging">Automated Error Reporting</a> (AERI) system has been developed by the people at <a href="https://www.codetrails.com/">Code Trails</a> and retrieves information about exceptions. It was installed by default in the Eclipse IDE and has helped hundreds of projects better support their users and resolve bugs. This dataset is a dump of all records over a couple of years, with useful information about the exceptions and environment.
+Last update of the dataset occured on 2018-02-11.</p>
+<p>Structure:</p>
+<ul>
+<li><strong>Incidents</strong> When an exception occurs and is trapped by the AERI system, it constitutes an incident (or error report). An incident can be reported by several different people, can be reported multiple times, and can be linked to different environments.</li>
+<li><strong>Problems</strong> As soon as an error report arrives on the server, it will be analyzed and subsequently assigned to one or more problems. A problem thus represents a set of (similar) error reports which usually have the same root cause – for example a bug in your software. (Extract from the now-AERI system documentation)</li>
+</ul>
+<p>This dataset is published under the <a href="https://creativecommons.org/licenses/by-sa/4.0/">Creative Commons BY-Attribution-Share Alike 4.0 (International) licence</a>.</p>
+<h2 id="downloads">Downloads</h2>
+<ul>
+<li><strong>Problems full</strong> [ <a href="https://download.eclipse.org/dataeggs/aeri_stacktraces/problems_full.tar.bz2">Download JSON</a> ] &ndash; A list of all problems, exported as JSON (one problem per file).
+<ul>
+<li>Content: 125250 entries, 22 attributes</li>
+<li>Size: 38M compressed, 904M raw</li>
+</ul>
+</li>
+<li><strong>Problems extract</strong> [ <a href="https://download.eclipse.org/dataeggs/aeri_stacktraces/problems_extract.csv.bz2">Download CSV</a> ] &ndash; A list of all problems, exported as CSV (one big file).
+<ul>
+<li>Content: 125250 entries, 22 attributes</li>
+<li>Size: 1.5M compressed, 14M raw</li>
+</ul>
+</li>
+<li><strong>Incidents full</strong> [ <a href="https://download.eclipse.org/dataeggs/aeri_stacktraces/incidents_full.tar.bz2">Download JSON</a> ] &ndash; A list of all incidents, exported as JSON (one incident per file).
+<ul>
+<li>Content: 2084363 entries, 22 attributes</li>
+<li>Size: 820M compressed, 19G raw</li>
+</ul>
+</li>
+<li><strong>Incidents extract</strong> [ <a href="https://download.eclipse.org/dataeggs/aeri_stacktraces/incidents_extract.csv.bz2">Download CSV</a> ] &ndash; A list of all incidents, exported as CSV (one big file).
+<ul>
+<li>Content: 2084045 entries, 20 attributes</li>
+<li>Size: 141M compressed, 778M raw</li>
+</ul>
+</li>
+<li><strong>Incidents Bundles</strong> [ <a href="https://download.eclipse.org/dataeggs/aeri_stacktraces/incidents_bundles_extract.csv.bz2">Download CSV</a> ] &ndash; A list of all bundles found in incidents, exported as CSV. Attributes are bundle_name, bundle_version, and number of occurrences.
+<ul>
+<li>Content: 29709 entries, 3 attributes</li>
+<li>Size: 220K compressed, 1.5M raw</li>
+</ul>
+</li>
+</ul>
+<h2 id="documentation">Documentation</h2>
+<ul>
+<li><strong>Stacktraces Problems analysis document</strong> [ <a href="problems_analysis.pdf">Download PDF</a> | <a href="problems_analysis.rmd">Download Rmd</a> ] &ndash; A R Markdown document to analyse the Stacktraces problem dataset, with description of the actual content and examples of usage.</li>
+<li><strong>Stacktraces Incidents analysis document</strong> [ <a href="incidents_analysis.pdf">Download PDF</a> | <a href="incidents_analysis.rmd">Download Rmd</a> ] &ndash; A R Markdown document to analyse the Stacktraces incidents dataset, with description of the actual content and examples of usage.</li>
+</ul>
+<h2 id="privacy-concerns">Privacy concerns</h2>
+<p>See also the documentation about <a href="../privacy">privacy in our datasets</a>.</p>
+<p>The result contains no email address, user id or machine id. Rather than removing the information (we are not sure that we remove all required information) we decided to simply pick relevant information from the file and push it into the output.</p>
+<p>End users have an option to keep their own class names private. We have presently no simple means to know what stacktraces in the database extraction should be kept private, so we decided to play it safe and hide class names whose packages don&rsquo;t start with known prefixes [1]. All private classnames have been replaced by the HIDDEN keyword.</p>
+<p>[1] <code>&quot;ch.qos.*&quot;, &quot;com.cforcoding.*&quot;, &quot;com.google.*&quot;, &quot;com.gradleware.tooling.*&quot;, &quot;com.mountainminds.eclemma.*&quot;, &quot;com.naef.*&quot;, &quot;com.sun.*&quot;, &quot;java.*&quot;, &quot;javafx.*&quot;, &quot;javax.*&quot;, &quot;org.apache.*&quot;, &quot;org.eclipse.*&quot;, &quot;org.fordiac.*&quot;, &quot;org.gradle.*&quot;, &quot;org.jacoco.*&quot;, &quot;org.osgi.*&quot;, &quot;org.slf4j.*&quot;, &quot;sun.*&quot; </code></p>
+<h2 id="format-problems">Format: problems</h2>
+<pre><code>{
+  &quot;summary&quot;: &quot;&quot;,
+  &quot;osgiArch&quot;: &quot;&quot;,
+  &quot;osgiOs&quot;: &quot;&quot;,
+  &quot;osgiOsVersion&quot;: &quot;&quot;,
+  &quot;osgiWs&quot;: &quot;&quot;,
+  &quot;eclipseBuildId&quot;: &quot;&quot;,
+  &quot;eclipseProduct&quot;: &quot;&quot;,
+  &quot;javaRuntimeVersion&quot;: &quot;&quot;,
+  &quot;numberOfIncidents&quot;: 0,
+  &quot;numberOfReporters&quot;: 74,
+  &quot;stacktraces&quot;: [
+    [ &quot;stacktrace for incident&quot; ],
+    [ &quot;stacktrace for cause&quot; ],
+    [ &quot;stacktrace for exception&quot; ]
+  ]
+}
+</code></pre>
+<h2 id="format-incidents">Format: incidents</h2>
+<pre><code>{
+  &quot;eclipseBuildId&quot;:&quot;4.6.1.M20160907-1200&quot;,
+  &quot;eclipseProduct&quot;:&quot;org.eclipse.epp.package.jee.product&quot;,
+  &quot;javaRuntimeVersion&quot;:&quot;1.8.0_112-b15&quot;,
+  &quot;osgiArch&quot;:&quot;x86_64&quot;,
+  &quot;osgiOs&quot;:&quot;Windows7&quot;,
+  &quot;osgiOsVersion&quot;:&quot;6.1.0&quot;,
+  &quot;osgiWs&quot;:&quot;win32&quot;,
+  &quot;stacktraces&quot;:[
+    [ &quot;stacktrace&quot; ]
+  ],
+  &quot;summary&quot;: &quot;Failed to retrieve default libraries for jre1.8.0_111&quot;
+}
+</code></pre>
+<h2 id="format-stacktraces">Format: Stacktraces</h2>
+<p>The structure used in the mongodb for stacktraces has been kept as is: it is composed of fields with all information relevant to each line of the stacktrace. Each stacktrace is an array of objects as shown below:</p>
+<pre><code>[
+  {
+    &quot;cN&quot;: &quot;sun.net.www.http.HttpClient&quot;,
+    &quot;mN&quot;: &quot;parseHTTPHeader&quot;,
+    &quot;fN&quot;: &quot;HttpClient.java&quot;,
+    &quot;lN&quot;: 786,
+  }
+]
+</code></pre>
+<h2 id="generation">Generation</h2>
+<p>The database dump is composed of several mongodb tables and uses the bson format. Only two tables contain stack traces: <code>problems</code> and <code>incidents</code>.</p>
+<p>The bson files can be read using the bsondump utility, provided with the mongodb client package (mongodb-clients on Debian).</p>
+<pre><code>bsondump problems.bson --type json &gt; problems.json
+</code></pre><p>After conversion the two files are quite big: 37GB for incidents and 2.1 GB for problems.</p>
+<p>Unfortunately the utility adds some progress information in the UI that needs to be removed from the output:</p>
+<pre><code>grep -v 'Progress: ' problems.json &gt; problems_clean.json
+</code></pre><p>We also had to remove a few (approx. a dozen of) lines because they embed unparseable source code, characters or asian/binary/utf8/16/256 text. The script tries to JSON-decode all lines one by one, and on failure simply goes to the next line.</p>
+<p>For <code>problems</code> (the file is reasonably small) the script generates for each line a separate JSON file with only information related to that line. The script for problems extraction is <code>parse_json_problems.pl</code>. Output is 820MB and processing time is roughly 45mn.</p>
+<p>For <code>incidents</code> (file is 37GB) the script generates for each line a separate JSON file with only information related to that line. For the records, trying to generate a single file requires at least twice the size of the file in RAM/SWAP (i.e. roughly 74GB). There are 2084328 files in the output for 17GB. The script for incidents extraction is <code>parse_json_incidents.pl</code>. To get an idea of the resources required to process that, the final incidents extraction took roughly 16h on a quite powerful box.</p>
+
+</div>
+
+</div>
+
+
+<div class='container list-container'>
+  <ul class='list'>
+    
+  </ul>
+
+  
+
+</div>
+
+      </main>
+
+      <footer id='footer' class='footer'>
+        <div class='container sep-before'><div class="row">
+	    <div class="column">
+	      <a href="http://www.eclipse.org/"  target="_blank"><img src="/dataeggs/images/logo-eclipse-foundation.png" alt="Eclipse Foundation logo"></a>
+	    </div>	  
+	    <div class="column">
+	      <p></p>
+	      <p id="copyright">Copyright © 2021 Eclipse Foundation, Inc.<br>All Rights Reserved.</p>
+	    </div>
+	  </div>
+	  <div class="row">
+	    <p><a href="http://www.eclipse.org/legal/privacy.php" target="_blank">Privacy Policy</a> /
+	      <a href="http://eclipse.org/" target="_blank">Eclipse</a> /
+	      <a href="http://www.eclipse.org/legal/termsofuse.php" target="_blank">Terms of Use</a> /
+	      <a href="http://www.eclipse.org/legal/copyright.php" target="_blank">Copyright Agent</a> /
+	      <a href="http://www.eclipse.org/legal/" target="_blank">Legal</a> /
+	      <a href="http://www.eclipse.org/org/foundation/contact.php" target="_blank"> Contact Us</a></p>
+	  </div>
+	  
+        </div>
+      </footer>
+
+    </div>
+  </div><script>window.__assets_js_src="/dataeggs/assets/js/"</script>
+
+<script src='/dataeggs/assets/js/main.c3bcf2df.js'></script><script src='/dataeggs/js/custom.js'></script>
+
+
+</body>
+
+</html>
+
diff --git a/aeri_stacktraces/index.xml b/aeri_stacktraces/index.xml
new file mode 100644
index 0000000..ed5a893
--- /dev/null
+++ b/aeri_stacktraces/index.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
+  <channel>
+    <title>AERI Stacktraces on Eclipse DataEggs</title>
+    <link>https://download.eclipse.org/dataeggs/aeri_stacktraces/</link>
+    <description>Recent content in AERI Stacktraces on Eclipse DataEggs</description>
+    <generator>Hugo -- gohugo.io</generator><atom:link href="https://download.eclipse.org/dataeggs/aeri_stacktraces/index.xml" rel="self" type="application/rss+xml" />
+  </channel>
+</rss>
diff --git a/aeri_stacktraces/page/1/index.html b/aeri_stacktraces/page/1/index.html
new file mode 100644
index 0000000..4379335
--- /dev/null
+++ b/aeri_stacktraces/page/1/index.html
@@ -0,0 +1 @@
+<!DOCTYPE html><html><head><title>https://download.eclipse.org/dataeggs/aeri_stacktraces/</title><link rel="canonical" href="https://download.eclipse.org/dataeggs/aeri_stacktraces/"/><meta name="robots" content="noindex"><meta charset="utf-8" /><meta http-equiv="refresh" content="0; url=https://download.eclipse.org/dataeggs/aeri_stacktraces/" /></head></html>
\ No newline at end of file
diff --git a/aeri_stacktraces/problems_analysis.Rmd b/aeri_stacktraces/problems_analysis.Rmd
new file mode 100644
index 0000000..987aee1
--- /dev/null
+++ b/aeri_stacktraces/problems_analysis.Rmd
@@ -0,0 +1,571 @@
+---
+title: "StackTraces -- Problems"
+subtitle: "R Analysis document"
+author: "Boris Baldassari -- Castalia Solutions"
+output:
+  pdf_document:
+    toc: yes
+    toc_depth: 3
+    keep_tex: true
+    extra_dependencies:
+      - grffile
+  html_document:
+    toc: yes
+    toc_depth: 2
+  word_document:
+    toc: yes
+    toc_depth: '2'
+---
+
+```{r init, message=FALSE, echo=FALSE}
+library(ggplot2)
+library(ggthemes)
+library(knitr)
+library(kableExtra)
+library(parsedate)
+library(magrittr)
+
+# Read csv file
+file.in <- "../problems_extract.csv"
+myproblems <- read.csv(file.in, header=T)
+
+# Create xts object
+require(xts)
+myp.xts <- xts(x = myproblems, order.by = parse_iso_8601(myproblems$createdOn))
+```
+
+# Introduction
+
+## About this dataset
+
+The [Automated Error Reporting](https://wiki.eclipse.org/EPP/Logging) (AERI) system retrieves [information about exceptions](https://www.codetrails.com/error-analytics/manual/). It is installed by default in the [Eclipse IDE](http://www.eclipse.org/ide/) and has helped hundreds of projects better support their users and resolve bugs.  
+
+This dataset is a dump of all records over a couple of years, with useful information about the exceptions and environment.
+
+* **Generated date**: `r date()`
+* **First date**: `r first(index(myp.xts))`
+* **Last date**: `r last(index(myp.xts))`
+* **Number of problems**: `r nrow(myp.xts)`
+* **Number of attributes**: `r ncol(myp.xts)`
+
+## Terminology
+
+* **Incidents** When an exception occurs and is trapped by the AERI system, it constitutes an incident (or error report). An incident can be reported by several different people, can be reported multiple times, and can be linked to different environments.
+* **Problems** As soon as an error report arrives on the server, it will be analyzed and subsequently assigned to one or more problems. A problem thus represents a set of (similar) error reports which usually have the same root cause – for example a bug in your software. (Extract from the [AERI system documentation](https://www.codetrails.com/error-analytics/manual/concepts/error-reports-problems-bugs-projects.html))
+
+This dataset targets only the Problems of the AERI dataset. There is another dedicated document for the Incidents.
+
+## Privacy concerns
+
+We value privacy and intend to make everything we can to prevent misuse of the dataset. If you think we failed somewhere in the process, please [let us know](https://www.crossminer.org/contact) so we can do better.
+
+The AERI system itself doesn't gather much private information, and takes a great care of it. Ths dataset goes a step further and removes all identifiable information. 
+
+* There is **no email address** in this dataset, **nor any UUID**. 
+* People not willing to share their traces to the AERI system can tick the private option. This choice has been respected, and all classes that do not belong to public hierarchy have been hidden thanks to an anonymisation mechanism.
+
+The anonymisation technique used basically encrypts information and then throws away the private key. Please refer to the [documentation published on github](https://github.com/borisbaldassari/data-anonymiser) for more details.
+
+
+## About this document
+
+This document is a [R Markdown document](http://rmarkdown.rstudio.com) and is composed of both text (like this one) and dynamically computed information (mostly in the Anaysis section below) executed on the data itself. This ensures that the documentation is always synchronised with the data, and serves as a test suite for the dataset.
+
+
+# Structure of data
+
+The plugin collects a [lot of useful information](https://www.codetrails.com/error-analytics/manual/misc/sent-data.html). We only use a subset of it, as required by research interest and privacy protection concerns. 
+
+The Problems dataset comes in two flavours: `All problems`, in JSON format, and `Problems extract`, in CSV format.
+
+## All problems (JSON)
+
+**All problems** is the most complete dataset, with all attributes, stacktraces and bundles. Since the stacktraces and bundles structures are too complex for CSV, only the JSON export contains them. The dataset comes as a quite large compressed archive, with one JSON file per problem. This represents a total of `r nrow(myproblems)` files (problems).
+
+The structure of a problem file is examplified below:
+
+    {
+      "summary": "NoStackTrace in RedeliveryErrorHandler.logFailedDelivery",
+      "kind": "NORMAL",
+      "v1status",
+      "osgiArch": "x86_64",
+      "osgiOs": "MacOSX",
+      "osgiOsVersion": "10.9.4",
+      "osgiWs": "cocoa",
+      "createdOn": "2014-09-14T05:39:21.554Z",
+      "modifiedOn": "2014-09-14T05:39:21.554Z",
+      "savedOn": "2016-05-23T07:22:10.479Z",
+      "eclipseBuildId": "4.4.0.I20140606-1215",
+      "eclipseProduct": "org.eclipse.epp.package.standard.product",
+      "javaRuntimeVersion": "1.8.0-b132",
+      "numberOfIncidents": 0,
+      "numberOfReporters": 74,
+      "products": [
+        { product },
+        { product }
+      ],
+      "bundles": [
+        { bundle },
+        { bundle }
+      ],
+      "stacktraces": [
+        [ "stacktrace for incident" ],
+        [ "stacktrace for cause" ],
+        [ "stacktrace for exception" ]
+      ]
+    }
+
+The structure used in the mongodb for stacktraces has been kept as is: it is composed of fields with all information relevant to each line of the stacktrace. Each stacktrace is an array of objects as shown below:
+
+    [
+      {
+        "cN": "sun.net.www.http.HttpClient",
+        "mN": "parseHTTPHeader",
+        "fN": "HttpClient.java",
+        "lN": 786,
+      }
+    ]
+
+Bundles have the following format:
+
+    {
+      "bundleFrequency": 1,
+      "bundleName": "org.eclipse.egit.core",
+      "bundleVersion": "4.1.1.201511131810-r"
+    },
+
+Products have the following format:
+
+    {
+      "buildId": "4.5.2.M20160212-1500",
+      "frequency": 3,
+      "productId": "org.eclipse.epp.package.jee.product"
+    }
+
+
+## Problems extract (CSV)
+
+The **Problems extract** CSV dataset provides the same information as the full JSON dataset, excluding complex structures that cannot be easily formatted in CSV: stacktraces, bundles, products.
+
+Attributes are: ``r names(myproblems)``.
+
+Examples are provided at the end of this file to demonstrate how to use it in R.
+
+
+# Attributes
+
+## Summary
+
+* Description: A short text summarising the error.
+* Type: String
+
+## Number of reporters {#attr_number_of_reporters}
+
+* Description: The number of people who reported this incident or problem.
+* Type: integer
+
+```{r numberRep.init, warning=FALSE, echo=FALSE}
+mysum <- summary(myproblems$numberOfReporters)
+```
+
+Statistical summary:
+
+* Range [ `r mysum[[1]]` : `r format(mysum[[6]], scientific = FALSE)` ]
+* 1st Quartile `r mysum[[2]]`
+* Median `r mysum[[3]]`
+* Mean `r format(mysum[[4]], scientific = FALSE)`
+* 3rd Quartile `r format(mysum[[5]], scientific = FALSE)`
+
+
+## Number of incidents {#attr_number_of_incidents}
+
+* Description: The number of times this problem was identified in incidents.
+* Type: Integer
+
+```{r numberInc.init, warning=FALSE, echo=FALSE}
+mysum <- summary(myproblems$numberOfIncidents)
+```
+
+Statistical summary:
+
+* Range [ `r mysum[[1]]` : `r format(mysum[[6]], scientific = FALSE)` ]
+* 1st Quartile `r mysum[[2]]`
+* Median `r mysum[[3]]`
+* Mean `r format(mysum[[4]], scientific = FALSE)`
+* 3rd Quartile `r format(mysum[[5]], scientific = FALSE)`
+* NAs `r mysum[[7]]`
+
+## V1 Status {#attr_status}
+
+* Description: The status of the problem attached to the error report.
+* Type: Factors
+
+The possible values found in the dataset for this attributes are:
+
+```{r attr.status, message=FALSE, echo=FALSE, warning=FALSE, results='asis'}
+statuses <- table(myproblems$v1status)
+t <- lapply(names(statuses), function(x) paste('* ', x, ' (count: ', statuses[[x]], ")", sep=''))
+t <- paste(t, collapse="\n")
+cat(t)
+```
+
+Note: The name of this attribute in the original file is `v1status`.
+
+## Kind {#attr_kind}
+
+* Description: The type of error recorded, as identified by the AERI system.
+* Type: Factors
+
+The possible values found in the dataset for this attributes are:
+
+```{r attr.kind, message=FALSE, echo=FALSE, warning=FALSE, results='asis'}
+kinds <- table(myproblems$kind)
+t <- lapply(names(kinds), function(x) paste('* ', x, ' (count: ', kinds[[x]], ")", sep=''))
+t <- paste(t, collapse="\n")
+cat(t)
+```
+
+**Notes**
+
+There are different kinds of incidents described in the [official documentation](https://www.codetrails.com/error-analytics/manual/concepts/incident-kinds.html):
+
+* Normal Error: Normal errors are all exceptions that were reported by a client but that are not of kind defined below. Common examples of a normal error are a `NullPointerException` or `IllegalArgumentException`.
+  - An `OutOfMemoryError` is a special kind of exception. Unlike for normal errors, the stack frame (implicitly) throwing the exception is only sometimes indicative of the root cause of the problem.
+  - A `StackOverflowError` is a special kind of exception, whose unique characteristic is a repeating pattern of stack frames near the top of the stack trace.
+* UI Freeze: A UI freeze is caused by a long-running operation or even a deadlock on the UI thread. 
+* Third-Party Error: Third-party errors are reports that were received by the Codetrails Error Analytics Server, which deemed neither the configured projects nor their dependencies at fault. 
+* Third-Party UI Freeze: Third-Party UI Freezes are UI freezes that were received by the Codetrails Error Analytics Server, which deemed neither the configured projects nor their dependencies at fault. 
+
+
+## Created On {#attr_created_on}
+
+* Description: The time of first appearance of the problem in an incident.
+* Type: Date (ISO8601)
+
+```{r attr.createdOn, echo=FALSE}
+myp.xts.createdOn <- xts(x = data.frame(c <- rep.int(1,nrow(myproblems))), order.by = parse_iso_8601(myproblems$createdOn))
+```
+
+Dates range from `r first(index(myp.xts.createdOn))` to `r last(index(myp.xts.createdOn))`.
+
+```{r attr.createdOn.plot}
+xts.createdOn <- as.xts(apply.weekly(myp.xts.createdOn, sum))
+autoplot(xts.createdOn, geom='line') + 
+  theme_bw() + ylab("Problems CreatedOn") + ggtitle("Weekly number of Problems CreatedOn")
+```
+
+
+## Modified On {#attr_modified_on}
+
+* Description: The time of last update of the problem in an incident.
+* Type: Date (ISO8601)
+
+```{r attr.modifiedOn, echo=FALSE}
+myp.xts.modifiedOn <- xts(x = data.frame(c <- rep.int(1,nrow(myproblems))), order.by = parse_iso_8601(myproblems$modifiedOn))
+```
+
+Dates range from `r first(index(myp.xts.modifiedOn))` to `r last(index(myp.xts.modifiedOn))`.
+
+```{r attr.modifiedOn.plot}
+xts.modifiedOn <- as.xts(apply.weekly(myp.xts.modifiedOn, sum))
+autoplot(xts.modifiedOn, geom='line') + 
+  theme_bw() + ylab("Problems ModifiedOn") + ggtitle("Weekly number of Problems ModifiedOn")
+```
+
+
+## Saved On {#attr_saved_on}
+
+* Description: The time of last save of the problem.
+* Type: Date (ISO8601)
+
+```{r attr.savedOn, echo=FALSE}
+myp.xts.savedOn <- xts(x = data.frame(c <- rep.int(1,nrow(myproblems))), order.by = parse_iso_8601(myproblems$savedOn))
+```
+
+Dates range from `r first(index(myp.xts.savedOn))` to `r last(index(myp.xts.savedOn))`.
+
+```{r attr.savedOn.plot}
+xts.savedOn <- as.xts(apply.weekly(myp.xts.savedOn, sum))
+autoplot(xts.savedOn, geom='line') + 
+  theme_bw() + ylab("Problems SavedOn") + ggtitle("Weekly number of Problems SavedOn")
+```
+
+
+## OSGi Architecture {#attr_osgi_arch}
+
+* Description: The architecture of the host, as specified in the OSGi bundle definition.
+* Type: Factors
+
+Possible values found in the dataset for this attribute are:
+  
+```{r attr.osgi.arch, message=FALSE, echo=FALSE, warning=FALSE, results='asis'}
+archs <- table(myproblems$osgiArch)
+t <- lapply(names(archs), function(x) paste('* ', x, ' (count: ', archs[[x]], ")", sep=''))
+t <- paste(t, collapse="\n")
+cat(t)
+```
+
+Repartition of architectures:
+
+```{r osgiArch, echo=FALSE, message=FALSE}
+archs.df <- as.data.frame(archs)
+ggplot(archs.df, aes(x=reorder(Var1, Freq), y=Freq)) + geom_bar(stat='identity') + coord_flip() + 
+  theme_minimal() + xlab("OSGi Architecture") + ggtitle("Repartition of OSGi Architectures in dataset")
+```
+
+
+## OSGi OS {#attr_osgi_os}
+
+* Description: The host operating system, as reported in OSGi.
+* Type: Factors
+
+The possible values found in the dataset for this attributes are:
+
+```{r attr.osgi.os, message=FALSE, echo=FALSE, warning=FALSE, results='asis'}
+oses <- table(myproblems$osgiOs)
+oses <- oses[order(oses, decreasing = TRUE)]
+t <- lapply(names(oses), function(x) paste('* ', x, ' (count: ', oses[[x]], ")", sep=''))
+t <- paste(t, collapse="\n")
+cat(t)
+```
+
+Visualisation of the various operating systems used in the dataset:
+
+```{r attr.osgi.os.plot, echo=FALSE}
+oses.df <- as.data.frame(oses)
+ggplot(oses.df, aes(x=reorder(Var1, Freq), y=Freq)) + geom_bar(stat='identity') + coord_flip() + 
+  theme_minimal() + xlab("OSGi Operating System") + ggtitle("Repartition of OSGi OS in dataset")
+```
+
+
+## OSGi OS Version {#attr_osgi_os_version}
+
+* Description: The host operating system version, as reported in OSGi.
+* Type: Factors
+
+The possible values found in the dataset for this attributes are:
+
+```{r attr.osgi.os.version, message=FALSE, echo=FALSE, warning=FALSE, results='asis'}
+occurences.max.osv <- 500
+oses <- data.frame(table(myproblems$osgiOsVersion))
+oses <- oses[order(-oses$Freq),]
+oses.top <- oses[oses[,c('Freq')] >= occurences.max.osv,]
+t <- lapply(oses.top$Var1, function(x) paste('* ', x, ' (count: ', oses.top[oses.top$Var1 == x,c("Freq")], ")", sep=''))
+t <- paste(t, collapse="\n")
+cat(t)
+```
+
+Visualisation of the various operating system versions used in the dataset:
+
+```{r attr.osgi.os.version.plot, echo=FALSE}
+ggplot(oses.top, aes(x=reorder(Var1, Freq), y=Freq)) + geom_bar(stat='identity') + coord_flip() + 
+  theme_minimal() + xlab("OSGi Operating System Version") + ggtitle("Repartition of most used OSGi OS versions in dataset")
+```
+
+
+## OSGi Window Manager {#attr_osgi_ws}
+
+* Description: The Window Manager used by the host, as reported in OSGi.
+* Type: Factors
+
+The possible values found in the dataset for this attributes are:
+
+```{r attr.osgi.ws, message=FALSE, echo=FALSE, warning=FALSE, results='asis'}
+oses <- table(myproblems$osgiWs)
+oses <- oses[order(oses, decreasing = TRUE)]
+t <- lapply(names(oses), function(x) paste('* ', x, ' (count: ', oses[[x]], ")", sep=''))
+t <- paste(t, collapse="\n")
+cat(t)
+```
+
+Visualisation of the various Window managers used in the dataset:
+
+```{r attr.osgi.ws.plot, echo=FALSE}
+oses.df <- as.data.frame(oses)
+ggplot(oses.df, aes(x=reorder(Var1, Freq), y=Freq)) + geom_bar(stat='identity') + coord_flip() + 
+  theme_minimal() + xlab("OSGi Window Managers") + ggtitle("Repartition of OSGi Window managers in dataset")
+```
+
+
+## Eclipse Product {#attr_eclipse_product}
+
+* Description: The Eclipse product impacted by the exception.
+* Type: Factors
+
+```{r attr.ep.init, message=FALSE, echo=FALSE, warning=FALSE, results='asis'}
+occurences.max.ep <- 500
+eps <- data.frame(table(myproblems$eclipseProduct))
+eps <- eps[order(-eps$Freq),]
+```
+
+There are `r nrow(eps)` different values found in the dataset for this attribute. The following table and bar plot only display the values with more than `r occurences.max.ep` occurrences:
+
+```{r attr.ep, message=FALSE, echo=FALSE, warning=FALSE, results='asis'}
+eps.top <- eps[eps[,c('Freq')] >= occurences.max.osv,]
+t <- lapply(eps.top$Var1, function(x) paste('* ', x, ' (count: ', eps.top[eps.top$Var1 == x,c("Freq")], ")", sep=''))
+t <- paste(t, collapse="\n")
+cat(t)
+```
+
+```{r attr.ep.plot, echo=FALSE}
+ggplot(eps.top, aes(x=reorder(Var1, Freq), y=Freq)) + geom_bar(stat='identity') + coord_flip() + 
+  theme_minimal() + xlab("Eclipse Products") + ggtitle("Repartition of most used Eclipse Products in dataset")
+```
+
+
+## Eclipse Build ID {#attr_eclipse_build_id}
+
+* Description: The Build ID of the Eclipse instance running when the exception occurred.
+* Type: Factors
+
+```{r attr.eb.id.init, message=FALSE, echo=FALSE, warning=FALSE, results='asis'}
+occurences.max.ebi <- 500
+ebis <- data.frame(table(myproblems$eclipseBuildId))
+ebis <- ebis[order(-ebis$Freq),]
+```
+
+There are `r nrow(ebis)` different values found in the dataset for this attribute. The following table and bar plot only display the values with more than `r occurences.max.ebi` occurrences:
+
+```{r attr.eb.id, message=FALSE, echo=FALSE, warning=FALSE, results='asis'}
+ebis.top <- ebis[ebis[,c('Freq')] >= occurences.max.osv,]
+t <- lapply(ebis.top$Var1, function(x) paste('* ', x, ' (count: ', ebis.top[ebis.top$Var1 == x,c("Freq")], ")", sep=''))
+t <- paste(t, collapse="\n")
+cat(t)
+```
+
+```{r attr.eb.id.plot, echo=FALSE}
+ggplot(ebis.top, aes(x=reorder(Var1, Freq), y=Freq)) + geom_bar(stat='identity') + coord_flip() + 
+  theme_minimal() + xlab("Eclipse Builds") + ggtitle("Repartition of most used Eclipse Build IDs in dataset")
+```
+
+
+## Java runtime version {#attr_javaruntime}
+
+* Description: The Java runtime of the host.
+* Type: Factors
+
+```{r jrv.kable.init}
+occurences.max.jrv <- 500
+myjrvs <- data.frame(table(myproblems$javaRuntimeVersion))
+myjrvs <- myjrvs[order(-myjrvs$Freq),]
+myjrvs.top <- myjrvs[myjrvs[,c('Freq')] >= occurences.max.jrv,]
+```
+
+There are `r nrow(myjrvs)` different values found in the dataset for this attribute. The following bar plot only displays the values with more than `r occurences.max.jrv` occurrences:
+
+```{r jrv.kable, eval=FALSE, include=FALSE, results='asis'}
+kable(data.frame(myjrvs.top), row.names = F) %>% 
+  kable_styling(full_width = T, latex_options = c("striped", "hold_position"))
+```
+
+```{r jrv.plot, echo=FALSE, message=FALSE}
+myjrvs.df <- as.data.frame(myjrvs.top)
+ggplot(myjrvs.df, aes(x=reorder(Var1, Freq), y=Freq)) + geom_bar(stat='identity') + coord_flip() + 
+  theme_minimal() + xlab("Java runtime version") + ggtitle("Repartition of top Java runtime versions in dataset")
+```
+
+
+# Using the dataset
+
+## Reading CSV file
+
+Reading file from `r file.in`. 
+
+```{r examples.init, echo=T}
+myproblems <- read.csv(file.in, header=T)
+myproblems[,c("bug", "status")] <- NULL
+```
+
+There are ``r ncol(myproblems)`` columns and ``r nrow(myproblems)`` entries in this dataset:
+
+```{r examples.ncol, echo=T}
+ncol(myproblems)
+```
+
+```{r examples.nrow, echo=T}
+nrow(myproblems)
+```
+
+Names of columns: 
+
+```{r examples.names, echo=T}
+names(myproblems)
+```
+
+
+## Using time series (xts)
+
+The dataset needs to be converted to a `xts` object. We can use one of the 3 dates
+
+```
+require(xts)
+myp.xts <- xts(x = myproblems, order.by = parse_iso_8601(myproblems$createdOn))
+```
+
+
+## Raw Reporters
+
+Let's plot the number of reporters for each error report on a timeline.
+
+```{r xts.plot.reporters}
+xts.reporters <- xts(as.integer(myp.xts[,c("numberOfReporters")]), order.by = index(myp.xts))
+autoplot(xts.reporters, geom='line') + 
+  theme_minimal() + ylab("Number of Reporters") + xlab("Time") + ggtitle("Raw number of distinct reporters")
+```
+
+## Weekly reporters
+
+The previous plots used the `xts` object as it is, which is there is one point for each error report. When considering the timeline of the dataset, it can be misleading when there several submissions on a short period of time, compared to sparse time ranges. We'll use the `apply.weekly` function from `xts` to normalise the total number of weekly submissions.
+
+Applied to the `numberOfReporters` attribute summed up with a week range, we get the following plot:
+
+```{r xts.weekly.reporters}
+xts.reporters.weekly <- as.xts(apply.weekly(xts.reporters, sum))
+autoplot(xts.reporters.weekly, geom='line') + 
+  theme_minimal() + ylab("Number of Reporters") + xlab("Time") + ggtitle("Weekly number of distinct reporters")
+```
+
+## Raw Number of Incidents
+
+Let's plot the number of incidents for each error report on a timeline.
+
+```{r xts.plot.incidents}
+xts.incidents <- xts(as.integer(myp.xts[,c("numberOfIncidents")]), order.by = index(myp.xts))
+autoplot(xts.incidents, geom='line') + 
+  theme_minimal() + ylab("Number of Incidents") + xlab("Time") + ggtitle("Raw number of reported incidents")
+```
+
+
+## Weelky Number of Incidents
+
+The previous plots used the `xts` object as it is, which is there is one point for each error report. When considering the timeline of the dataset, it can be misleading when there several submissions on a short period of time, compared to sparse time ranges. We'll use the `apply.weekly` function from `xts` to normalise the total number of weekly submissions.
+
+Applied to the `numberOfIncidents` attribute summed up with a week range, we get the following plot:
+
+```{r xts.weekly.incidents}
+xts.incidents.weekly <- as.xts(apply.weekly(xts.incidents, sum))
+autoplot(xts.incidents.weekly, geom='line') + 
+  theme_minimal() + ylab("Number of Incidents") + xlab("Time") + ggtitle("Weekly number of reported incidents")
+```
+
+
+## Scatter plot 
+
+A scatter plot that compares the number of incidents reported and the number of distinct reporters.
+
+```{r numberInc.qplot, warning=FALSE}
+qplot(myproblems$numberOfReporters, myproblems$numberOfIncidents) + 
+  theme_minimal() + ylab("Number of Incidents") + 
+  xlab("Number of Reporters") + ggtitle("Number of Reporters vs. Number of Incidents reported to AERI")
+```
+
+
+
+
+
+
+
+
+
+
+
diff --git a/aeri_stacktraces/problems_analysis.pdf b/aeri_stacktraces/problems_analysis.pdf
new file mode 100644
index 0000000..76aedb4
--- /dev/null
+++ b/aeri_stacktraces/problems_analysis.pdf
Binary files differ
diff --git a/aeri_stacktraces/problems_analysis.rmd b/aeri_stacktraces/problems_analysis.rmd
new file mode 100644
index 0000000..987aee1
--- /dev/null
+++ b/aeri_stacktraces/problems_analysis.rmd
@@ -0,0 +1,571 @@
+---
+title: "StackTraces -- Problems"
+subtitle: "R Analysis document"
+author: "Boris Baldassari -- Castalia Solutions"
+output:
+  pdf_document:
+    toc: yes
+    toc_depth: 3
+    keep_tex: true
+    extra_dependencies:
+      - grffile
+  html_document:
+    toc: yes
+    toc_depth: 2
+  word_document:
+    toc: yes
+    toc_depth: '2'
+---
+
+```{r init, message=FALSE, echo=FALSE}
+library(ggplot2)
+library(ggthemes)
+library(knitr)
+library(kableExtra)
+library(parsedate)
+library(magrittr)
+
+# Read csv file
+file.in <- "../problems_extract.csv"
+myproblems <- read.csv(file.in, header=T)
+
+# Create xts object
+require(xts)
+myp.xts <- xts(x = myproblems, order.by = parse_iso_8601(myproblems$createdOn))
+```
+
+# Introduction
+
+## About this dataset
+
+The [Automated Error Reporting](https://wiki.eclipse.org/EPP/Logging) (AERI) system retrieves [information about exceptions](https://www.codetrails.com/error-analytics/manual/). It is installed by default in the [Eclipse IDE](http://www.eclipse.org/ide/) and has helped hundreds of projects better support their users and resolve bugs.  
+
+This dataset is a dump of all records over a couple of years, with useful information about the exceptions and environment.
+
+* **Generated date**: `r date()`
+* **First date**: `r first(index(myp.xts))`
+* **Last date**: `r last(index(myp.xts))`
+* **Number of problems**: `r nrow(myp.xts)`
+* **Number of attributes**: `r ncol(myp.xts)`
+
+## Terminology
+
+* **Incidents** When an exception occurs and is trapped by the AERI system, it constitutes an incident (or error report). An incident can be reported by several different people, can be reported multiple times, and can be linked to different environments.
+* **Problems** As soon as an error report arrives on the server, it will be analyzed and subsequently assigned to one or more problems. A problem thus represents a set of (similar) error reports which usually have the same root cause – for example a bug in your software. (Extract from the [AERI system documentation](https://www.codetrails.com/error-analytics/manual/concepts/error-reports-problems-bugs-projects.html))
+
+This dataset targets only the Problems of the AERI dataset. There is another dedicated document for the Incidents.
+
+## Privacy concerns
+
+We value privacy and intend to make everything we can to prevent misuse of the dataset. If you think we failed somewhere in the process, please [let us know](https://www.crossminer.org/contact) so we can do better.
+
+The AERI system itself doesn't gather much private information, and takes a great care of it. Ths dataset goes a step further and removes all identifiable information. 
+
+* There is **no email address** in this dataset, **nor any UUID**. 
+* People not willing to share their traces to the AERI system can tick the private option. This choice has been respected, and all classes that do not belong to public hierarchy have been hidden thanks to an anonymisation mechanism.
+
+The anonymisation technique used basically encrypts information and then throws away the private key. Please refer to the [documentation published on github](https://github.com/borisbaldassari/data-anonymiser) for more details.
+
+
+## About this document
+
+This document is a [R Markdown document](http://rmarkdown.rstudio.com) and is composed of both text (like this one) and dynamically computed information (mostly in the Anaysis section below) executed on the data itself. This ensures that the documentation is always synchronised with the data, and serves as a test suite for the dataset.
+
+
+# Structure of data
+
+The plugin collects a [lot of useful information](https://www.codetrails.com/error-analytics/manual/misc/sent-data.html). We only use a subset of it, as required by research interest and privacy protection concerns. 
+
+The Problems dataset comes in two flavours: `All problems`, in JSON format, and `Problems extract`, in CSV format.
+
+## All problems (JSON)
+
+**All problems** is the most complete dataset, with all attributes, stacktraces and bundles. Since the stacktraces and bundles structures are too complex for CSV, only the JSON export contains them. The dataset comes as a quite large compressed archive, with one JSON file per problem. This represents a total of `r nrow(myproblems)` files (problems).
+
+The structure of a problem file is examplified below:
+
+    {
+      "summary": "NoStackTrace in RedeliveryErrorHandler.logFailedDelivery",
+      "kind": "NORMAL",
+      "v1status",
+      "osgiArch": "x86_64",
+      "osgiOs": "MacOSX",
+      "osgiOsVersion": "10.9.4",
+      "osgiWs": "cocoa",
+      "createdOn": "2014-09-14T05:39:21.554Z",
+      "modifiedOn": "2014-09-14T05:39:21.554Z",
+      "savedOn": "2016-05-23T07:22:10.479Z",
+      "eclipseBuildId": "4.4.0.I20140606-1215",
+      "eclipseProduct": "org.eclipse.epp.package.standard.product",
+      "javaRuntimeVersion": "1.8.0-b132",
+      "numberOfIncidents": 0,
+      "numberOfReporters": 74,
+      "products": [
+        { product },
+        { product }
+      ],
+      "bundles": [
+        { bundle },
+        { bundle }
+      ],
+      "stacktraces": [
+        [ "stacktrace for incident" ],
+        [ "stacktrace for cause" ],
+        [ "stacktrace for exception" ]
+      ]
+    }
+
+The structure used in the mongodb for stacktraces has been kept as is: it is composed of fields with all information relevant to each line of the stacktrace. Each stacktrace is an array of objects as shown below:
+
+    [
+      {
+        "cN": "sun.net.www.http.HttpClient",
+        "mN": "parseHTTPHeader",
+        "fN": "HttpClient.java",
+        "lN": 786,
+      }
+    ]
+
+Bundles have the following format:
+
+    {
+      "bundleFrequency": 1,
+      "bundleName": "org.eclipse.egit.core",
+      "bundleVersion": "4.1.1.201511131810-r"
+    },
+
+Products have the following format:
+
+    {
+      "buildId": "4.5.2.M20160212-1500",
+      "frequency": 3,
+      "productId": "org.eclipse.epp.package.jee.product"
+    }
+
+
+## Problems extract (CSV)
+
+The **Problems extract** CSV dataset provides the same information as the full JSON dataset, excluding complex structures that cannot be easily formatted in CSV: stacktraces, bundles, products.
+
+Attributes are: ``r names(myproblems)``.
+
+Examples are provided at the end of this file to demonstrate how to use it in R.
+
+
+# Attributes
+
+## Summary
+
+* Description: A short text summarising the error.
+* Type: String
+
+## Number of reporters {#attr_number_of_reporters}
+
+* Description: The number of people who reported this incident or problem.
+* Type: integer
+
+```{r numberRep.init, warning=FALSE, echo=FALSE}
+mysum <- summary(myproblems$numberOfReporters)
+```
+
+Statistical summary:
+
+* Range [ `r mysum[[1]]` : `r format(mysum[[6]], scientific = FALSE)` ]
+* 1st Quartile `r mysum[[2]]`
+* Median `r mysum[[3]]`
+* Mean `r format(mysum[[4]], scientific = FALSE)`
+* 3rd Quartile `r format(mysum[[5]], scientific = FALSE)`
+
+
+## Number of incidents {#attr_number_of_incidents}
+
+* Description: The number of times this problem was identified in incidents.
+* Type: Integer
+
+```{r numberInc.init, warning=FALSE, echo=FALSE}
+mysum <- summary(myproblems$numberOfIncidents)
+```
+
+Statistical summary:
+
+* Range [ `r mysum[[1]]` : `r format(mysum[[6]], scientific = FALSE)` ]
+* 1st Quartile `r mysum[[2]]`
+* Median `r mysum[[3]]`
+* Mean `r format(mysum[[4]], scientific = FALSE)`
+* 3rd Quartile `r format(mysum[[5]], scientific = FALSE)`
+* NAs `r mysum[[7]]`
+
+## V1 Status {#attr_status}
+
+* Description: The status of the problem attached to the error report.
+* Type: Factors
+
+The possible values found in the dataset for this attributes are:
+
+```{r attr.status, message=FALSE, echo=FALSE, warning=FALSE, results='asis'}
+statuses <- table(myproblems$v1status)
+t <- lapply(names(statuses), function(x) paste('* ', x, ' (count: ', statuses[[x]], ")", sep=''))
+t <- paste(t, collapse="\n")
+cat(t)
+```
+
+Note: The name of this attribute in the original file is `v1status`.
+
+## Kind {#attr_kind}
+
+* Description: The type of error recorded, as identified by the AERI system.
+* Type: Factors
+
+The possible values found in the dataset for this attributes are:
+
+```{r attr.kind, message=FALSE, echo=FALSE, warning=FALSE, results='asis'}
+kinds <- table(myproblems$kind)
+t <- lapply(names(kinds), function(x) paste('* ', x, ' (count: ', kinds[[x]], ")", sep=''))
+t <- paste(t, collapse="\n")
+cat(t)
+```
+
+**Notes**
+
+There are different kinds of incidents described in the [official documentation](https://www.codetrails.com/error-analytics/manual/concepts/incident-kinds.html):
+
+* Normal Error: Normal errors are all exceptions that were reported by a client but that are not of kind defined below. Common examples of a normal error are a `NullPointerException` or `IllegalArgumentException`.
+  - An `OutOfMemoryError` is a special kind of exception. Unlike for normal errors, the stack frame (implicitly) throwing the exception is only sometimes indicative of the root cause of the problem.
+  - A `StackOverflowError` is a special kind of exception, whose unique characteristic is a repeating pattern of stack frames near the top of the stack trace.
+* UI Freeze: A UI freeze is caused by a long-running operation or even a deadlock on the UI thread. 
+* Third-Party Error: Third-party errors are reports that were received by the Codetrails Error Analytics Server, which deemed neither the configured projects nor their dependencies at fault. 
+* Third-Party UI Freeze: Third-Party UI Freezes are UI freezes that were received by the Codetrails Error Analytics Server, which deemed neither the configured projects nor their dependencies at fault. 
+
+
+## Created On {#attr_created_on}
+
+* Description: The time of first appearance of the problem in an incident.
+* Type: Date (ISO8601)
+
+```{r attr.createdOn, echo=FALSE}
+myp.xts.createdOn <- xts(x = data.frame(c <- rep.int(1,nrow(myproblems))), order.by = parse_iso_8601(myproblems$createdOn))
+```
+
+Dates range from `r first(index(myp.xts.createdOn))` to `r last(index(myp.xts.createdOn))`.
+
+```{r attr.createdOn.plot}
+xts.createdOn <- as.xts(apply.weekly(myp.xts.createdOn, sum))
+autoplot(xts.createdOn, geom='line') + 
+  theme_bw() + ylab("Problems CreatedOn") + ggtitle("Weekly number of Problems CreatedOn")
+```
+
+
+## Modified On {#attr_modified_on}
+
+* Description: The time of last update of the problem in an incident.
+* Type: Date (ISO8601)
+
+```{r attr.modifiedOn, echo=FALSE}
+myp.xts.modifiedOn <- xts(x = data.frame(c <- rep.int(1,nrow(myproblems))), order.by = parse_iso_8601(myproblems$modifiedOn))
+```
+
+Dates range from `r first(index(myp.xts.modifiedOn))` to `r last(index(myp.xts.modifiedOn))`.
+
+```{r attr.modifiedOn.plot}
+xts.modifiedOn <- as.xts(apply.weekly(myp.xts.modifiedOn, sum))
+autoplot(xts.modifiedOn, geom='line') + 
+  theme_bw() + ylab("Problems ModifiedOn") + ggtitle("Weekly number of Problems ModifiedOn")
+```
+
+
+## Saved On {#attr_saved_on}
+
+* Description: The time of last save of the problem.
+* Type: Date (ISO8601)
+
+```{r attr.savedOn, echo=FALSE}
+myp.xts.savedOn <- xts(x = data.frame(c <- rep.int(1,nrow(myproblems))), order.by = parse_iso_8601(myproblems$savedOn))
+```
+
+Dates range from `r first(index(myp.xts.savedOn))` to `r last(index(myp.xts.savedOn))`.
+
+```{r attr.savedOn.plot}
+xts.savedOn <- as.xts(apply.weekly(myp.xts.savedOn, sum))
+autoplot(xts.savedOn, geom='line') + 
+  theme_bw() + ylab("Problems SavedOn") + ggtitle("Weekly number of Problems SavedOn")
+```
+
+
+## OSGi Architecture {#attr_osgi_arch}
+
+* Description: The architecture of the host, as specified in the OSGi bundle definition.
+* Type: Factors
+
+Possible values found in the dataset for this attribute are:
+  
+```{r attr.osgi.arch, message=FALSE, echo=FALSE, warning=FALSE, results='asis'}
+archs <- table(myproblems$osgiArch)
+t <- lapply(names(archs), function(x) paste('* ', x, ' (count: ', archs[[x]], ")", sep=''))
+t <- paste(t, collapse="\n")
+cat(t)
+```
+
+Repartition of architectures:
+
+```{r osgiArch, echo=FALSE, message=FALSE}
+archs.df <- as.data.frame(archs)
+ggplot(archs.df, aes(x=reorder(Var1, Freq), y=Freq)) + geom_bar(stat='identity') + coord_flip() + 
+  theme_minimal() + xlab("OSGi Architecture") + ggtitle("Repartition of OSGi Architectures in dataset")
+```
+
+
+## OSGi OS {#attr_osgi_os}
+
+* Description: The host operating system, as reported in OSGi.
+* Type: Factors
+
+The possible values found in the dataset for this attributes are:
+
+```{r attr.osgi.os, message=FALSE, echo=FALSE, warning=FALSE, results='asis'}
+oses <- table(myproblems$osgiOs)
+oses <- oses[order(oses, decreasing = TRUE)]
+t <- lapply(names(oses), function(x) paste('* ', x, ' (count: ', oses[[x]], ")", sep=''))
+t <- paste(t, collapse="\n")
+cat(t)
+```
+
+Visualisation of the various operating systems used in the dataset:
+
+```{r attr.osgi.os.plot, echo=FALSE}
+oses.df <- as.data.frame(oses)
+ggplot(oses.df, aes(x=reorder(Var1, Freq), y=Freq)) + geom_bar(stat='identity') + coord_flip() + 
+  theme_minimal() + xlab("OSGi Operating System") + ggtitle("Repartition of OSGi OS in dataset")
+```
+
+
+## OSGi OS Version {#attr_osgi_os_version}
+
+* Description: The host operating system version, as reported in OSGi.
+* Type: Factors
+
+The possible values found in the dataset for this attributes are:
+
+```{r attr.osgi.os.version, message=FALSE, echo=FALSE, warning=FALSE, results='asis'}
+occurences.max.osv <- 500
+oses <- data.frame(table(myproblems$osgiOsVersion))
+oses <- oses[order(-oses$Freq),]
+oses.top <- oses[oses[,c('Freq')] >= occurences.max.osv,]
+t <- lapply(oses.top$Var1, function(x) paste('* ', x, ' (count: ', oses.top[oses.top$Var1 == x,c("Freq")], ")", sep=''))
+t <- paste(t, collapse="\n")
+cat(t)
+```
+
+Visualisation of the various operating system versions used in the dataset:
+
+```{r attr.osgi.os.version.plot, echo=FALSE}
+ggplot(oses.top, aes(x=reorder(Var1, Freq), y=Freq)) + geom_bar(stat='identity') + coord_flip() + 
+  theme_minimal() + xlab("OSGi Operating System Version") + ggtitle("Repartition of most used OSGi OS versions in dataset")
+```
+
+
+## OSGi Window Manager {#attr_osgi_ws}
+
+* Description: The Window Manager used by the host, as reported in OSGi.
+* Type: Factors
+
+The possible values found in the dataset for this attributes are:
+
+```{r attr.osgi.ws, message=FALSE, echo=FALSE, warning=FALSE, results='asis'}
+oses <- table(myproblems$osgiWs)
+oses <- oses[order(oses, decreasing = TRUE)]
+t <- lapply(names(oses), function(x) paste('* ', x, ' (count: ', oses[[x]], ")", sep=''))
+t <- paste(t, collapse="\n")
+cat(t)
+```
+
+Visualisation of the various Window managers used in the dataset:
+
+```{r attr.osgi.ws.plot, echo=FALSE}
+oses.df <- as.data.frame(oses)
+ggplot(oses.df, aes(x=reorder(Var1, Freq), y=Freq)) + geom_bar(stat='identity') + coord_flip() + 
+  theme_minimal() + xlab("OSGi Window Managers") + ggtitle("Repartition of OSGi Window managers in dataset")
+```
+
+
+## Eclipse Product {#attr_eclipse_product}
+
+* Description: The Eclipse product impacted by the exception.
+* Type: Factors
+
+```{r attr.ep.init, message=FALSE, echo=FALSE, warning=FALSE, results='asis'}
+occurences.max.ep <- 500
+eps <- data.frame(table(myproblems$eclipseProduct))
+eps <- eps[order(-eps$Freq),]
+```
+
+There are `r nrow(eps)` different values found in the dataset for this attribute. The following table and bar plot only display the values with more than `r occurences.max.ep` occurrences:
+
+```{r attr.ep, message=FALSE, echo=FALSE, warning=FALSE, results='asis'}
+eps.top <- eps[eps[,c('Freq')] >= occurences.max.osv,]
+t <- lapply(eps.top$Var1, function(x) paste('* ', x, ' (count: ', eps.top[eps.top$Var1 == x,c("Freq")], ")", sep=''))
+t <- paste(t, collapse="\n")
+cat(t)
+```
+
+```{r attr.ep.plot, echo=FALSE}
+ggplot(eps.top, aes(x=reorder(Var1, Freq), y=Freq)) + geom_bar(stat='identity') + coord_flip() + 
+  theme_minimal() + xlab("Eclipse Products") + ggtitle("Repartition of most used Eclipse Products in dataset")
+```
+
+
+## Eclipse Build ID {#attr_eclipse_build_id}
+
+* Description: The Build ID of the Eclipse instance running when the exception occurred.
+* Type: Factors
+
+```{r attr.eb.id.init, message=FALSE, echo=FALSE, warning=FALSE, results='asis'}
+occurences.max.ebi <- 500
+ebis <- data.frame(table(myproblems$eclipseBuildId))
+ebis <- ebis[order(-ebis$Freq),]
+```
+
+There are `r nrow(ebis)` different values found in the dataset for this attribute. The following table and bar plot only display the values with more than `r occurences.max.ebi` occurrences:
+
+```{r attr.eb.id, message=FALSE, echo=FALSE, warning=FALSE, results='asis'}
+ebis.top <- ebis[ebis[,c('Freq')] >= occurences.max.osv,]
+t <- lapply(ebis.top$Var1, function(x) paste('* ', x, ' (count: ', ebis.top[ebis.top$Var1 == x,c("Freq")], ")", sep=''))
+t <- paste(t, collapse="\n")
+cat(t)
+```
+
+```{r attr.eb.id.plot, echo=FALSE}
+ggplot(ebis.top, aes(x=reorder(Var1, Freq), y=Freq)) + geom_bar(stat='identity') + coord_flip() + 
+  theme_minimal() + xlab("Eclipse Builds") + ggtitle("Repartition of most used Eclipse Build IDs in dataset")
+```
+
+
+## Java runtime version {#attr_javaruntime}
+
+* Description: The Java runtime of the host.
+* Type: Factors
+
+```{r jrv.kable.init}
+occurences.max.jrv <- 500
+myjrvs <- data.frame(table(myproblems$javaRuntimeVersion))
+myjrvs <- myjrvs[order(-myjrvs$Freq),]
+myjrvs.top <- myjrvs[myjrvs[,c('Freq')] >= occurences.max.jrv,]
+```
+
+There are `r nrow(myjrvs)` different values found in the dataset for this attribute. The following bar plot only displays the values with more than `r occurences.max.jrv` occurrences:
+
+```{r jrv.kable, eval=FALSE, include=FALSE, results='asis'}
+kable(data.frame(myjrvs.top), row.names = F) %>% 
+  kable_styling(full_width = T, latex_options = c("striped", "hold_position"))
+```
+
+```{r jrv.plot, echo=FALSE, message=FALSE}
+myjrvs.df <- as.data.frame(myjrvs.top)
+ggplot(myjrvs.df, aes(x=reorder(Var1, Freq), y=Freq)) + geom_bar(stat='identity') + coord_flip() + 
+  theme_minimal() + xlab("Java runtime version") + ggtitle("Repartition of top Java runtime versions in dataset")
+```
+
+
+# Using the dataset
+
+## Reading CSV file
+
+Reading file from `r file.in`. 
+
+```{r examples.init, echo=T}
+myproblems <- read.csv(file.in, header=T)
+myproblems[,c("bug", "status")] <- NULL
+```
+
+There are ``r ncol(myproblems)`` columns and ``r nrow(myproblems)`` entries in this dataset:
+
+```{r examples.ncol, echo=T}
+ncol(myproblems)
+```
+
+```{r examples.nrow, echo=T}
+nrow(myproblems)
+```
+
+Names of columns: 
+
+```{r examples.names, echo=T}
+names(myproblems)
+```
+
+
+## Using time series (xts)
+
+The dataset needs to be converted to a `xts` object. We can use one of the 3 dates
+
+```
+require(xts)
+myp.xts <- xts(x = myproblems, order.by = parse_iso_8601(myproblems$createdOn))
+```
+
+
+## Raw Reporters
+
+Let's plot the number of reporters for each error report on a timeline.
+
+```{r xts.plot.reporters}
+xts.reporters <- xts(as.integer(myp.xts[,c("numberOfReporters")]), order.by = index(myp.xts))
+autoplot(xts.reporters, geom='line') + 
+  theme_minimal() + ylab("Number of Reporters") + xlab("Time") + ggtitle("Raw number of distinct reporters")
+```
+
+## Weekly reporters
+
+The previous plots used the `xts` object as it is, which is there is one point for each error report. When considering the timeline of the dataset, it can be misleading when there several submissions on a short period of time, compared to sparse time ranges. We'll use the `apply.weekly` function from `xts` to normalise the total number of weekly submissions.
+
+Applied to the `numberOfReporters` attribute summed up with a week range, we get the following plot:
+
+```{r xts.weekly.reporters}
+xts.reporters.weekly <- as.xts(apply.weekly(xts.reporters, sum))
+autoplot(xts.reporters.weekly, geom='line') + 
+  theme_minimal() + ylab("Number of Reporters") + xlab("Time") + ggtitle("Weekly number of distinct reporters")
+```
+
+## Raw Number of Incidents
+
+Let's plot the number of incidents for each error report on a timeline.
+
+```{r xts.plot.incidents}
+xts.incidents <- xts(as.integer(myp.xts[,c("numberOfIncidents")]), order.by = index(myp.xts))
+autoplot(xts.incidents, geom='line') + 
+  theme_minimal() + ylab("Number of Incidents") + xlab("Time") + ggtitle("Raw number of reported incidents")
+```
+
+
+## Weelky Number of Incidents
+
+The previous plots used the `xts` object as it is, which is there is one point for each error report. When considering the timeline of the dataset, it can be misleading when there several submissions on a short period of time, compared to sparse time ranges. We'll use the `apply.weekly` function from `xts` to normalise the total number of weekly submissions.
+
+Applied to the `numberOfIncidents` attribute summed up with a week range, we get the following plot:
+
+```{r xts.weekly.incidents}
+xts.incidents.weekly <- as.xts(apply.weekly(xts.incidents, sum))
+autoplot(xts.incidents.weekly, geom='line') + 
+  theme_minimal() + ylab("Number of Incidents") + xlab("Time") + ggtitle("Weekly number of reported incidents")
+```
+
+
+## Scatter plot 
+
+A scatter plot that compares the number of incidents reported and the number of distinct reporters.
+
+```{r numberInc.qplot, warning=FALSE}
+qplot(myproblems$numberOfReporters, myproblems$numberOfIncidents) + 
+  theme_minimal() + ylab("Number of Incidents") + 
+  xlab("Number of Reporters") + ggtitle("Number of Reporters vs. Number of Incidents reported to AERI")
+```
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/css/main.ab98e12b.css b/assets/css/main.ab98e12b.css
new file mode 100644
index 0000000..0770c5d
--- /dev/null
+++ b/assets/css/main.ab98e12b.css
@@ -0,0 +1,6 @@
+/*! normalize.css v8.0.0 | MIT License | github.com/necolas/normalize.css */html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0}h1{font-size:2em;margin:.67em 0}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}summary{display:list-item}[hidden],template{display:none}
+@charset "UTF-8";
+/*!
+ * Theme Name: Minimo
+ * Author: Munif Tanjim
+ */body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Open Sans,Helvetica Neue,sans-serif;font-size:1em;line-height:1.5;color:#37474f;word-wrap:break-word}@media screen and (min-width:480px){body{font-size:1.125em}}.title,h1,h2,h3,h4,h5,h6{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Open Sans,Helvetica Neue,sans-serif;font-weight:700;line-height:1.2;color:#263238;margin:0 0 .625em}.comment-content h2,.comment-content h3,.comment-content h4,.comment-content h5,.comment-content h6,.entry-content h2,.entry-content h3,.entry-content h4,.entry-content h5,.entry-content h6{margin-top:1.5em}.comment-content h2:first-child,.comment-content h3:first-child,.comment-content h4:first-child,.comment-content h5:first-child,.comment-content h6:first-child,.entry-content h2:first-child,.entry-content h3:first-child,.entry-content h4:first-child,.entry-content h5:first-child,.entry-content h6:first-child{margin-top:0}.site-title,h1{font-size:2em}h2{font-size:1.75em}h3{font-size:1.5em}h4{font-size:1.375em}h5{font-size:1.25em}h6{font-size:1.125em}p{margin:0 0 1.5em}p:last-child{margin:0}blockquote,cite,dfn,em,i{font-style:italic}blockquote{font-size:1.125em;padding-left:1em;border-left:.2em solid #bdbdbd}address,blockquote{margin:0 0 1.5em}code,kbd,pre,samp,var{font-family:Menlo,Consolas,Monaco,Ubuntu Mono,Liberation Mono,Lucida Console,monospace;background:#eee;color:#212121;border:1px solid #dcdcdc;border-radius:.25em;padding:.1em .25em}pre{overflow:auto;word-wrap:normal;text-align:initial;margin-bottom:1.5em;padding:.75em 1em}pre code,pre kbd,pre samp,pre var{background:none;color:inherit;border:0;padding:0}code,kbd,samp,var{font-size:.9375em}.highlight pre{border:0;margin:0}.comment-content .highlight,.entry-content .highlight{margin-bottom:1.5em}abbr,acronym{border-bottom:1px dotted #212121;cursor:help}ins,mark{background:#212121;text-decoration:none}big{font-size:125%}.desc{font-style:italic}html{box-sizing:border-box}*,:after,:before{box-sizing:inherit}blockquote,q{quotes:"" ""}blockquote:after,blockquote:before,q:after,q:before{content:""}blockquote :last-child,q :last-child{margin-bottom:0}hr{border:0;height:1px;margin:2em 0;background-color:#bdbdbd}img{max-width:100%;height:auto}figure{margin:1em 0}a{color:#212121;text-decoration:none;transition:color .1s ease-in-out}a:focus{outline-color:#ffcd00;outline-color:var(--color-accent)}a:active,a:hover{outline:0}a:active,a:focus,a:hover{color:#37474f}a.button{display:inline-block}ol,ul{padding:0;margin:0 0 1.5em 1.5em}ul.task-list{list-style:none}ul.task-list label{font-weight:inherit}ul.task-list input{width:auto;margin-left:-1.5em}li ol,li ul{margin-bottom:0;margin-left:1.5em}dt{font-weight:700}dd{margin:0 1.5em 1.5em}table,td,th{border:1px solid #bdbdbd}table{width:100%;margin:0 0 1.5em;table-layout:fixed;border-collapse:separate;border-spacing:0;border-width:1px 0 0 1px}caption,td,th{font-weight:400;text-align:left}th{font-weight:700}td,th{border-width:0 1px 1px 0}td,th{padding:.375em}.button,button,input[type=button],input[type=reset],input[type=submit]{width:auto;padding:.5em .75em;border:1px solid #bdbdbd;border-radius:.2em;background:#fff;color:#37474f;font-size:1em;font-weight:700;line-height:1.15;text-align:center;letter-spacing:1px;white-space:nowrap;text-transform:uppercase;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:pointer;transition:.1s ease-in-out}.button:focus,button:focus,input[type=button]:focus,input[type=reset]:focus,input[type=submit]:focus{outline-color:#ffcd00;outline-color:var(--color-accent)}.button:active,.button:hover,button:active,button:hover,input[type=button]:active,input[type=button]:hover,input[type=reset]:active,input[type=reset]:hover,input[type=submit]:active,input[type=submit]:hover{outline:0}.button:active,.button:focus,.button:hover,button:active,button:focus,button:hover,input[type=button]:active,input[type=button]:focus,input[type=button]:hover,input[type=reset]:active,input[type=reset]:focus,input[type=reset]:hover,input[type=submit]:active,input[type=submit]:focus,input[type=submit]:hover{background:#37474f;color:#fff}input,select,textarea{width:100%;padding:.625em .875em;border:1px solid #bdbdbd;border-radius:.2em;color:#37474f;transition:.1s ease-in-out}input:focus,select:focus,textarea:focus{border-color:#ffcd00;border-color:var(--color-accent);outline-color:transparent}input[type=checkbox],input[type=radio]{width:auto}label{font-weight:700;letter-spacing:1px}.menu ul{list-style:none;margin:0}.menu li{text-transform:uppercase}.menu li.current>a{font-weight:700;pointer-events:none}.main-menu>div{display:flex;align-items:center}.main-menu li{display:inline-block;margin-right:.625em}.main-menu li:last-child{margin-right:0}.sidebar-menu .item{display:flex;flex-flow:row wrap;justify-content:flex-end}.sidebar-menu .has-current>a{font-style:italic}.sidebar-menu .sub-menu{display:none;padding-left:0;flex:100%;flex-shrink:0}.sidebar-menu .sub-menu .item:not(.has-children){padding-right:1.2em}.sub-menu-toggler{border:0;padding:0;margin-left:.2em;font-weight:400;width:1em}.sub-menu-toggler:active,.sub-menu-toggler:focus,.sub-menu-toggler:hover{background:none}.sub-menu-toggler>.sign{position:relative;top:-2px}.sub-menu-toggler>.sign:after{content:"+"}.toggled>.sub-menu{display:block}.toggled>.sub-menu-toggler>.sign:after{content:"–"}.menu a,.sidebar-toggler span,.sub-menu-toggler,.widget-social_menu a{color:#455a64}.menu a:focus,.menu a:hover,.sidebar-toggler span:focus,.sidebar-toggler span:hover,.sub-menu-toggler:focus,.sub-menu-toggler:hover,.widget-social_menu a:focus,.widget-social_menu a:hover{color:#263238}.entry-nav .sep-before:nth-child(2):before{width:2em;margin:1em 0}.entry-nav div a{display:block;font-style:italic}.entry-nav div span{display:block;font-style:normal;font-size:.875em}.page-links{margin-top:2em}.page-link{display:inline-block;padding:.25em .625em}.page-link:first-child{padding-left:0}.page-link:last-child{padding-right:0}.page-link.current{font-weight:700}.page-link.dots{padding:0}body{background:#fff}.site{overflow-x:hidden}.main{width:100%;padding:2em 0;transition:margin-left .2s}.sidebar.toggled~.main{margin-left:300px}@media screen and (min-width:920px){.main{width:auto}.has-sidebar .main{float:left;width:calc(100% - 300px);margin-left:300px;padding-left:2em}}.container{width:100%;max-width:740px;padding:0 20px;margin:0 auto}.has-sidebar .container{margin-left:0}.sep-after:after,.sep-before:before{content:"";display:block;width:4em;margin-top:2.5em;margin-bottom:2.5em;border-bottom:.125em solid #bdbdbd}.sidebar{visibility:hidden;float:left;left:-300px;position:absolute;width:300px;max-width:100%;min-height:100%;padding:2em 0;margin-right:-100%;outline:0;z-index:99999;transition:left .2s;text-align:right;background:#fff}.sidebar.toggled{visibility:visible;left:0}.sidebar .sep-after:after{margin-left:auto}@media screen and (min-width:920px){.sidebar{visibility:visible;left:0}}.sidebar-toggler{background:none;border:0}.sidebar-toggler .icon{font-size:1.25em}.sidebar-toggler:active,.sidebar-toggler:focus,.sidebar-toggler:hover{background:none}.main .sidebar-toggler{padding:0;position:absolute;right:20px}.main .sidebar-toggler .close,.main .sidebar-toggler[aria-expanded=true]{display:none}.main-menu .sidebar-toggler{position:static;margin-right:.75em}.main-menu .sidebar-toggler[aria-expanded=true]{display:inline-block}.sidebar .sidebar-toggler{position:absolute;top:.5em;left:.5em;z-index:2027}.sidebar .sidebar-toggler .open{display:none}@media screen and (min-width:920px){.sidebar-toggler{display:none}}.sidebar-overlay{display:none}.sidebar.toggled .sidebar-overlay{display:block}.sidebar.toggled .sidebar-overlay:after{content:"";display:block;position:fixed;top:0;right:0;bottom:0;left:0;z-index:-2027;background:#fff;opacity:.75}@media screen and (min-width:920px){.sidebar.toggled .sidebar-overlay{display:none}}.header .sep-after:after{border-bottom-color:#ffcd00;border-bottom-color:var(--color-accent)}.has-cover .header .sep-after:after,.site-header{display:none}.error404 .site-header,.home .site-header{display:flex}.header-info{margin-top:1.5em}.header-info .title{margin-bottom:0}.header-info .desc{margin:.5em 0 0}.header-info .taxonomy-name{font-size:.875em;margin-right:.25em;font-style:italic}.entry-meta{margin-top:.75em}.entry-meta span{font-size:.9375em;margin-right:.75em;font-style:italic}.entry-meta .icon{margin-right:.25em}.entry-cover figure{margin-top:2em;margin-bottom:2.5em}.entry-cover img{display:block}.entry-cover figcaption{text-align:center;margin:.25em auto 0;padding:0}.entry-cover figcaption span{font-size:.875em}.cover-wide{padding:0;max-width:1080px}.cover-full{padding:0;max-width:100%}.cover-full img{width:100%}details,summary{display:block}summary{cursor:pointer}.no-details details:not([open])>:not(summary){display:none}.no-details details>summary:before{content:"\25BC";display:inline-block;margin-right:.25em;transition:.1s;-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}.no-details details[open]>summary:before{-webkit-transform:rotate(0deg);transform:rotate(0deg)}.entry-toc{margin-bottom:2.5em}.entry-toc ul{list-style:none}.entry-toc nav>ul{margin:0}.comment-content>:last-child,.comment-content>:last-child>:last-child,.entry-content>:last-child,.entry-content>:last-child>:last-child{margin-bottom:0}.comment-content a,.entry-content a{border-bottom:.125em dashed #bdbdbd}.comment-content a:focus,.comment-content a:hover,.entry-content a:focus,.entry-content a:hover{border-bottom-color:#ffcd00;border-bottom-color:var(--color-accent)}.comment-content a.footnote-return,.entry-content a.footnote-return{border-bottom:none}.entry-footer .container>div{margin-top:.5em}.entry-footer .container>div:first-child{margin-top:2.5em}.entry-footer .icon{margin-right:.375em}.comments ol{list-style:none}.comments ol.comment-list{margin:0}.comments-title{font-size:1.25em;margin-bottom:1.5em}.comment{position:relative;margin:1em 0}.comment-header{min-height:3em}.comment .avatar{float:left;height:3em;width:3em;border-radius:.25em;margin-right:.75em}.comment-meta{font-size:.875em}.comment .fn{display:inline-block;margin-top:.1em}.comment .reply{position:absolute;right:0;margin-top:-2em}.comment .reply,.comment .reply a{display:inline-block}.comment-content{margin-top:.75em;border-radius:.25em;border:1px solid #bdbdbd;padding:1em 1em 2em}.comment-respond{margin:1.5em 0}.comment-reply-title small{display:inline-block;font-size:.5em;margin-left:1em}.comment-form label{display:inline-block;margin-bottom:.25em}.comment-form>div{margin-top:1em}.comment-submission-feedback{display:none;position:relative;border-radius:.25em;border:1px solid #bdbdbd;padding:1.5em;margin-bottom:1.5em}.comment-submission-feedback a{position:absolute;top:1.5em;right:1.5em;font-size:.875em}.comment-submission-feedback:target{display:block}.list{margin:0 auto;list-style:none}.entry+.list-container{margin-top:2.5em}.list .item{display:flex;width:100%;margin-top:1em}.list .item:first-of-type{margin-top:0}.list .item .meta{flex:0 0 6em}.list .item .meta span{font-size:.875em}.list .item-header{flex:1}.list .item-title{font-size:1em;font-weight:400;margin-bottom:0;line-height:inherit}.list .item .icon{margin-right:.25em}.taxonomy-cloud{display:flex;flex-wrap:wrap;align-items:center}.taxonomy-cloud li{max-width:100%;padding:0 1.5em .5em 0;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.footer .sep-before:before{border-bottom-color:#ffcd00;border-bottom-color:var(--color-accent)}.footer a{font-style:italic}.footer .container>div,.footer .container>section{width:100%;margin-top:1em}.footer .container>div:first-child,.footer .container>section:first-child{margin-top:0}.error404 .gopher{margin:0}.error404 .gopher img{width:17.5em}.error404 .gopher a{display:block;border:0}.error404 .gopher figcaption{margin-top:1em}.error404 .gopher .title{margin-bottom:0}.home-widgets .sep-before:before{display:none}.entry+.home-widgets .sep-before:before{display:block}.icon{display:inline-block;stroke:currentColor;fill:none;position:relative;top:2px}.icon,img.emoji{height:1em;width:1em}img.emoji{margin:0 .05em 0 .1em;vertical-align:-.1em}.layout-archive .list .item{padding-left:1em}.layout-archive .list .item .meta{flex:0 0 3.5em}.archive-group.sep-after:last-child:after{display:none}.search-results li{height:2.5em;line-height:2em;border:1px solid #bdbdbd;border-top:0 solid #bdbdbd}.search-results li:last-child{border-radius:0 0 .2em .2em}.search-results li.results-empty,.search-results li.searching{font-style:italic}.search-results li a{display:block;padding:.25em .875em}.widget-title{margin-bottom:1em}.widget.sep-after:after{margin-top:1.5em;margin-bottom:1.5em}.widget.sep-after:last-of-type:after{display:none}.sidebar .widget-title{margin-bottom:.5em;font-size:1.25em}.sidebar .widget .container{padding:0}.main-menu+.header-widgets{margin-top:1em}.widget-about .logo{max-width:5em}.widget-about .logo a{display:block;line-height:0}.sidebar .widget-about .logo{margin-left:auto}.widget-about .site-title{margin-bottom:0;font-size:1.75em}.sidebar .widget-about.sep-after:after{border-bottom-color:#ffcd00;border-bottom-color:var(--color-accent)}.widget-breadcrumbs ol{list-style:none;margin:0}.widget-breadcrumbs li{display:inline-block}.widget-breadcrumbs li:after{display:inline-block;padding:0 .25em;speak:none}.widget-breadcrumbs li:last-child:after{display:none}.widget-breadcrumbs li span{font-weight:700}.sidebar .widget-recent_posts .meta{display:none}.sidebar .widget-recent_posts .item{margin-top:0}.widget-search .search-form{position:relative}.widget-search .search-submit{position:absolute;top:0;right:0;height:2.5em;width:2.5em;border-radius:0 .2em .2em 0}.layout-search .widget-search header{display:none}.layout-search .widget-search .search-term{height:2.5em;padding-right:3em;border-radius:.2em .2em 0 0}.widget-social_menu ul{list-style:none;margin:0}.widget-social_menu li{display:inline-block;margin-right:.625em}.widget-social_menu li:last-child{margin-right:0}.widget-social_menu li a{font-size:1.125em}.sidebar .widget-social_menu li{margin-right:0;margin-left:.625em}.sidebar .widget-taxonomy_cloud .taxonomy-cloud{justify-content:flex-end;font-size:.875em}.sidebar .widget-taxonomy_cloud li{padding:0 0 .4em .8em}.comment .says,.screen-reader-text{position:absolute;clip:rect(1px,1px,1px,1px);-webkit-clip-path:inset(50%);clip-path:inset(50%);height:1px;width:1px;margin:-1px;padding:0;border:0;overflow:hidden;word-wrap:normal!important}.comment .says:focus,.screen-reader-text:focus{display:block;left:.5em;top:.5em;clip:auto;-webkit-clip-path:none;clip-path:none;height:auto;width:auto;padding:1em;border-radius:.25em;font-size:.875em;font-weight:700;line-height:normal;text-decoration:none;background:#212121;color:#fafafa!important;z-index:100000}.align-center{text-align:center}.align-center>blockquote{display:inline-block}.align-center>ol,.align-center>ul{display:inline-block;text-align:initial}.align-center li{word-wrap:normal}.convo ol{display:table;list-style:none;margin:0}.convo li{display:table-row}.convo li>div{display:table-cell;padding-bottom:1.5em}.convo .person{font-size:.9em;font-style:italic;text-align:right}.convo .sep{padding-left:.75em;padding-right:.5em}.text-shortcode *{color:inherit;font-size:1em}
diff --git a/assets/css/rtl.bf9d5394.css b/assets/css/rtl.bf9d5394.css
new file mode 100644
index 0000000..cbef49f
--- /dev/null
+++ b/assets/css/rtl.bf9d5394.css
@@ -0,0 +1 @@
+blockquote{padding-left:0;padding-right:1em;border-left:0;border-right:.2em solid #bdbdbd}body{direction:rtl}ol,ul{margin:0 2em 1.5em 0}li>ol,li>ul{padding-left:0;padding-right:1.5em;margin-left:0;margin-right:.5em}caption,td,th{text-align:right}.main-menu li{margin-right:0;margin-left:.625em}.main-menu li:last-child{margin-left:0}.sidebar-menu .sub-menu{padding-right:0}.sidebar-menu .sub-menu .item:not(.has-children){padding-right:0;padding-left:1.2em}.sub-menu-toggler{margin-left:0;margin-right:.2em}.page-link:first-child{padding-left:.625em;padding-right:0}.page-link:last-child{padding-left:0;padding-right:.625em}.page-link.next .icon,.page-link.prev .icon{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.main{transition:margin-right .2s}.sidebar.toggled~.main{margin-left:0;margin-right:300px}@media screen and (min-width:920px){.has-sidebar .main{float:right;margin-left:0;margin-right:300px;padding-left:0;padding-right:2em}}.has-sidebar .container{margin-left:auto;margin-right:0}.sidebar{float:right;left:auto;right:-300px;margin-right:0;margin-left:-100%;transition:right .2s;text-align:left}.sidebar.toggled{right:0}.sidebar .sep-after:after{margin-left:0;margin-right:auto}@media screen and (min-width:920px){.sidebar{left:auto;right:0}}.main .sidebar-toggler{right:auto;left:20px}.main-menu .sidebar-toggler{margin-right:0;margin-left:.75em}.sidebar .sidebar-toggler{left:auto;right:.5em}.header-info .taxonomy-name{margin-right:0;margin-left:.25em}.entry-meta>span{display:inline-block}.entry-meta span{margin-right:0;margin-left:.75em}.entry-meta .icon,.no-details details>summary:before{margin-right:0;margin-left:.25em}.entry-footer .icon{margin-right:0;margin-left:.375em}.comment .avatar{float:right;margin-right:0;margin-left:.75em}.comment .reply{right:auto;left:0}.comment-reply-title small{margin-left:0;margin-right:1em}.comment-submission-feedback a{right:auto;left:1.5em}.list .item .icon{margin-right:0;margin-left:.25em}.taxonomy-cloud li{padding:0 0 .5em 1.5em}img.emoji{margin:0 .1em 0 .05em}.layout-archive .list .item{padding-left:0;padding-right:1em}.sidebar .widget-about .logo{margin-left:0;margin-right:auto}.widget-search .search-submit{right:auto;left:0;border-radius:.2em 0 0 0}.layout-search .widget-search .search-term{padding-right:.875em;padding-left:3em}.widget-social_menu li{margin-right:0;margin-left:.625em}.widget-social_menu li:last-child{margin-left:0}.sidebar .widget-social_menu li{margin-left:0;margin-right:.625em}.sidebar .widget-taxonomy_cloud li{padding:0 .8em .4em 0}.screen-reader-text:focus{left:auto;right:.5em}.convo .sep{padding-left:.5em;padding-right:.75em}
diff --git a/assets/gopher.png b/assets/gopher.png
new file mode 100644
index 0000000..7b5adc1
--- /dev/null
+++ b/assets/gopher.png
Binary files differ
diff --git a/assets/js/algolia_search.d220ba26.js b/assets/js/algolia_search.d220ba26.js
new file mode 100644
index 0000000..797c0aa
--- /dev/null
+++ b/assets/js/algolia_search.d220ba26.js
@@ -0,0 +1,8 @@
+!function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=18)}([function(e,t,r){"use strict";r.d(t,"a",function(){return n}),r.d(t,"d",function(){return o}),r.d(t,"c",function(){return a}),r.d(t,"b",function(){return i});var n=function(e,t){0===e.length?t.innerHTML="<li class='results-empty'>\n      <a href='#search-term'>".concat(t.dataset.resultsEmpty,"</a>\n    </li>"):t.innerHTML=e.reduce(function(e,t){var r=t.href,n=t.title;return"".concat(e,"<li><a href='").concat(r,"'>").concat(n,"</a></li>")},"")},o=function(e){e.innerHTML="<li class='searching'>\n    <a href='#search-results'>".concat(e.dataset.searching,"&hellip;</a>\n  </li>")},a=function(e){if("URLSearchParams"in window)return new URLSearchParams(window.location.search).get(e);e=e.replace(/[\[]/,"\\[").replace(/[\]]/,"\\]");var t=new RegExp("[\\?&]"+e+"=([^&#]*)").exec(location.search);return null===t?"":decodeURIComponent(t[1].replace(/\+/g," "))},i=function(e,t){var r=new XMLHttpRequest;r.open("GET",e,!0),r.onload=function(){if(r.status>=200&&r.status<400){var e=JSON.parse(r.responseText);t(null,e)}else t(new Error(r.statusText))},r.onerror=function(){t(new Error("Failed to get JSON! ".concat(r.statusText)))},r.send()}},function(e,t){var r=Object.prototype.hasOwnProperty,n=Object.prototype.toString;e.exports=function(e,t,o){if("[object Function]"!==n.call(t))throw new TypeError("iterator must be a function");var a=e.length;if(a===+a)for(var i=0;i<a;i++)t.call(o,e[i],i,e);else for(var s in e)r.call(e,s)&&t.call(o,e[s],s,e)}},function(e,t){e.exports=function(e){return JSON.parse(JSON.stringify(e))}},function(e,t,r){"use strict";var n=r(9);function o(e,t){var n=r(1),o=this;"function"==typeof Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):o.stack=(new Error).stack||"Cannot get a stacktrace, browser is too old",this.name="AlgoliaSearchError",this.message=e||"Unknown error",t&&n(t,function(e,t){o[t]=e})}function a(e,t){function r(){var r=Array.prototype.slice.call(arguments,0);"string"!=typeof r[0]&&r.unshift(t),o.apply(this,r),this.name="AlgoliaSearch"+e+"Error"}return n(r,o),r}n(o,Error),e.exports={AlgoliaSearchError:o,UnparsableJSON:a("UnparsableJSON","Could not parse the incoming response as JSON, see err.more for details"),RequestTimeout:a("RequestTimeout","Request timedout before getting a response"),Network:a("Network","Network issue, see err.more for details"),JSONPScriptFail:a("JSONPScriptFail","<script> was loaded but did not call our provided callback"),JSONPScriptError:a("JSONPScriptError","<script> unable to load due to an `error` event on it"),Unknown:a("Unknown","Unknown error occured")}},function(e,t){var r={}.toString;e.exports=Array.isArray||function(e){return"[object Array]"==r.call(e)}},function(e,t,r){var n=r(1);e.exports=function(e,t){var r=[];return n(e,function(n,o){r.push(t(n,o,e))}),r}},function(e,t,r){(function(n){function o(){var e;try{e=t.storage.debug}catch(e){}return!e&&void 0!==n&&"env"in n&&(e=n.env.DEBUG),e}(t=e.exports=r(28)).log=function(){return"object"==typeof console&&console.log&&Function.prototype.apply.call(console.log,console,arguments)},t.formatArgs=function(e){var r=this.useColors;if(e[0]=(r?"%c":"")+this.namespace+(r?" %c":" ")+e[0]+(r?"%c ":" ")+"+"+t.humanize(this.diff),!r)return;var n="color: "+this.color;e.splice(1,0,n,"color: inherit");var o=0,a=0;e[0].replace(/%[a-zA-Z%]/g,function(e){"%%"!==e&&(o++,"%c"===e&&(a=o))}),e.splice(a,0,n)},t.save=function(e){try{null==e?t.storage.removeItem("debug"):t.storage.debug=e}catch(e){}},t.load=o,t.useColors=function(){if("undefined"!=typeof window&&window.process&&"renderer"===window.process.type)return!0;return"undefined"!=typeof document&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||"undefined"!=typeof window&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)&&parseInt(RegExp.$1,10)>=31||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)},t.storage="undefined"!=typeof chrome&&void 0!==chrome.storage?chrome.storage.local:function(){try{return window.localStorage}catch(e){}}(),t.colors=["lightseagreen","forestgreen","goldenrod","dodgerblue","darkorchid","crimson"],t.formatters.j=function(e){try{return JSON.stringify(e)}catch(e){return"[UnexpectedJSONParseError]: "+e.message}},t.enable(o())}).call(this,r(8))},function(e,t){var r;r=function(){return this}();try{r=r||new Function("return this")()}catch(e){"object"==typeof window&&(r=window)}e.exports=r},function(e,t){var r,n,o=e.exports={};function a(){throw new Error("setTimeout has not been defined")}function i(){throw new Error("clearTimeout has not been defined")}function s(e){if(r===setTimeout)return setTimeout(e,0);if((r===a||!r)&&setTimeout)return r=setTimeout,setTimeout(e,0);try{return r(e,0)}catch(t){try{return r.call(null,e,0)}catch(t){return r.call(this,e,0)}}}!function(){try{r="function"==typeof setTimeout?setTimeout:a}catch(e){r=a}try{n="function"==typeof clearTimeout?clearTimeout:i}catch(e){n=i}}();var c,u=[],l=!1,p=-1;function f(){l&&c&&(l=!1,c.length?u=c.concat(u):p=-1,u.length&&h())}function h(){if(!l){var e=s(f);l=!0;for(var t=u.length;t;){for(c=u,u=[];++p<t;)c&&c[p].run();p=-1,t=u.length}c=null,l=!1,function(e){if(n===clearTimeout)return clearTimeout(e);if((n===i||!n)&&clearTimeout)return n=clearTimeout,clearTimeout(e);try{n(e)}catch(t){try{return n.call(null,e)}catch(t){return n.call(this,e)}}}(e)}}function d(e,t){this.fun=e,this.array=t}function y(){}o.nextTick=function(e){var t=new Array(arguments.length-1);if(arguments.length>1)for(var r=1;r<arguments.length;r++)t[r-1]=arguments[r];u.push(new d(e,t)),1!==u.length||l||s(h)},d.prototype.run=function(){this.fun.apply(null,this.array)},o.title="browser",o.browser=!0,o.env={},o.argv=[],o.version="",o.versions={},o.on=y,o.addListener=y,o.once=y,o.off=y,o.removeListener=y,o.removeAllListeners=y,o.emit=y,o.prependListener=y,o.prependOnceListener=y,o.listeners=function(e){return[]},o.binding=function(e){throw new Error("process.binding is not supported")},o.cwd=function(){return"/"},o.chdir=function(e){throw new Error("process.chdir is not supported")},o.umask=function(){return 0}},function(e,t){"function"==typeof Object.create?e.exports=function(e,t){e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}})}:e.exports=function(e,t){e.super_=t;var r=function(){};r.prototype=t.prototype,e.prototype=new r,e.prototype.constructor=e}},function(e,t,r){e.exports=function(e,t){return function(r,o,a){if("function"==typeof r&&"object"==typeof o||"object"==typeof a)throw new n.AlgoliaSearchError("index.search usage is index.search(query, params, cb)");0===arguments.length||"function"==typeof r?(a=r,r=""):1!==arguments.length&&"function"!=typeof o||(a=o,o=void 0),"object"==typeof r&&null!==r?(o=r,r=void 0):null==r&&(r="");var i,s="";return void 0!==r&&(s+=e+"="+encodeURIComponent(r)),void 0!==o&&(o.additionalUA&&(i=o.additionalUA,delete o.additionalUA),s=this.as._getSearchParams(o,s)),this._search(s,t,a,i)}};var n=r(3)},function(e,t,r){e.exports=function(e,t){var n=r(25),o=r(1),a={};return o(n(e),function(r){!0!==t(r)&&(a[r]=e[r])}),a}},,function(e,t,r){"use strict";var n=r(19),o=r(30);e.exports=o(n,"(lite) ")},,,,,function(e,t,r){"use strict";r.r(t);var n=r(13),o=r.n(n),a=r(0),i=window.algolia,s=i.appId,c=i.indexName,u=i.searchApiKey,l=o()(s,u).initIndex("".concat(c).concat(window.location.pathname.replace("/search/",""))),p=function(e,t){Object(a.d)(t),e?l.search(e,{attributesToRetrieve:["title","href"],hitsPerPage:10},function(e,r){e?console.error(e):Object(a.a)(r.hits,t)}):Object(a.a)([],t)},f=document.getElementById("search-form"),h=document.getElementById("search-term"),d=document.getElementById("search-results"),y=Object(a.c)("q");h.value=y,h.focus(),p(y,d),f.addEventListener("submit",function(e){e.preventDefault(),p(h.value,d)})},function(e,t,r){(function(t){e.exports=c;var n=r(3),o=r(20),a=r(21),i=r(27),s=t.env.RESET_APP_DATA_TIMER&&parseInt(t.env.RESET_APP_DATA_TIMER,10)||12e4;function c(e,t,o){var a=r(6)("algoliasearch"),i=r(2),s=r(4),c=r(5),l="Usage: algoliasearch(applicationID, apiKey, opts)";if(!0!==o._allowEmptyCredentials&&!e)throw new n.AlgoliaSearchError("Please provide an application ID. "+l);if(!0!==o._allowEmptyCredentials&&!t)throw new n.AlgoliaSearchError("Please provide an API key. "+l);this.applicationID=e,this.apiKey=t,this.hosts={read:[],write:[]},o=o||{},this._timeouts=o.timeouts||{connect:1e3,read:2e3,write:3e4},o.timeout&&(this._timeouts.connect=this._timeouts.read=this._timeouts.write=o.timeout);var p=o.protocol||"https:";if(/:$/.test(p)||(p+=":"),"http:"!==p&&"https:"!==p)throw new n.AlgoliaSearchError("protocol must be `http:` or `https:` (was `"+o.protocol+"`)");if(this._checkAppIdData(),o.hosts)s(o.hosts)?(this.hosts.read=i(o.hosts),this.hosts.write=i(o.hosts)):(this.hosts.read=i(o.hosts.read),this.hosts.write=i(o.hosts.write));else{var f=c(this._shuffleResult,function(t){return e+"-"+t+".algolianet.com"}),h=(!1===o.dsn?"":"-dsn")+".algolia.net";this.hosts.read=[this.applicationID+h].concat(f),this.hosts.write=[this.applicationID+".algolia.net"].concat(f)}this.hosts.read=c(this.hosts.read,u(p)),this.hosts.write=c(this.hosts.write,u(p)),this.extraHeaders={},this.cache=o._cache||{},this._ua=o._ua,this._useCache=!(void 0!==o._useCache&&!o._cache)||o._useCache,this._useRequestCache=this._useCache&&o._useRequestCache,this._useFallback=void 0===o.useFallback||o.useFallback,this._setTimeout=o._setTimeout,a("init done, %j",this)}function u(e){return function(t){return e+"//"+t.toLowerCase()}}function l(e){if(void 0===Array.prototype.toJSON)return JSON.stringify(e);var t=Array.prototype.toJSON;delete Array.prototype.toJSON;var r=JSON.stringify(e);return Array.prototype.toJSON=t,r}function p(e){var t={};for(var r in e){var n;if(Object.prototype.hasOwnProperty.call(e,r))n="x-algolia-api-key"===r||"x-algolia-application-id"===r?"**hidden for security purposes**":e[r],t[r]=n}return t}c.prototype.initIndex=function(e){return new a(this,e)},c.prototype.setExtraHeader=function(e,t){this.extraHeaders[e.toLowerCase()]=t},c.prototype.getExtraHeader=function(e){return this.extraHeaders[e.toLowerCase()]},c.prototype.unsetExtraHeader=function(e){delete this.extraHeaders[e.toLowerCase()]},c.prototype.addAlgoliaAgent=function(e){-1===this._ua.indexOf(";"+e)&&(this._ua+=";"+e)},c.prototype._jsonRequest=function(e){this._checkAppIdData();var t,a,i,s=r(6)("algoliasearch:"+e.url),c=e.additionalUA||"",u=e.cache,f=this,h=0,d=!1,y=f._useFallback&&f._request.fallback&&e.fallback;this.apiKey.length>500&&void 0!==e.body&&(void 0!==e.body.params||void 0!==e.body.requests)?(e.body.apiKey=this.apiKey,i=this._computeRequestHeaders({additionalUA:c,withApiKey:!1,headers:e.headers})):i=this._computeRequestHeaders({additionalUA:c,headers:e.headers}),void 0!==e.body&&(t=l(e.body)),s("request start");var m=[];function g(e,t,r){return f._useCache&&e&&t&&void 0!==t[r]}function v(t,r){if(g(f._useRequestCache,u,a)&&t.catch(function(){delete u[a]}),"function"!=typeof e.callback)return t.then(r);t.then(function(t){o(function(){e.callback(null,r(t))},f._setTimeout||setTimeout)},function(t){o(function(){e.callback(t)},f._setTimeout||setTimeout)})}if(f._useCache&&f._useRequestCache&&(a=e.url),f._useCache&&f._useRequestCache&&t&&(a+="_body_"+t),g(f._useRequestCache,u,a)){s("serving request from cache");var b=u[a];return v("function"!=typeof b.then?f._promise.resolve({responseText:b}):b,function(e){return JSON.parse(e.responseText)})}var w=function r(o,v){f._checkAppIdData();var b=new Date;if(f._useCache&&!f._useRequestCache&&(a=e.url),f._useCache&&!f._useRequestCache&&t&&(a+="_body_"+v.body),g(!f._useRequestCache,u,a)){s("serving response from cache");var w=u[a];return f._promise.resolve({body:JSON.parse(w),responseText:w})}if(h>=f.hosts[e.hostType].length)return!y||d?(s("could not get any response"),f._promise.reject(new n.AlgoliaSearchError("Cannot connect to the AlgoliaSearch API. Send an email to support@algolia.com to report and resolve the issue. Application id was: "+f.applicationID,{debugData:m}))):(s("switching to fallback"),h=0,v.method=e.fallback.method,v.url=e.fallback.url,v.jsonBody=e.fallback.body,v.jsonBody&&(v.body=l(v.jsonBody)),i=f._computeRequestHeaders({additionalUA:c,headers:e.headers}),v.timeouts=f._getTimeoutsForRequest(e.hostType),f._setHostIndexByType(0,e.hostType),d=!0,r(f._request.fallback,v));var _=f._getHostByType(e.hostType),x=_+v.url,T={body:v.body,jsonBody:v.jsonBody,method:v.method,headers:i,timeouts:v.timeouts,debug:s,forceAuthHeaders:v.forceAuthHeaders};return s("method: %s, url: %s, headers: %j, timeouts: %d",T.method,x,T.headers,T.timeouts),o===f._request.fallback&&s("using fallback"),o.call(f,x,T).then(function(e){var r=e&&e.body&&e.body.message&&e.body.status||e.statusCode||e&&e.body&&200;s("received response: statusCode: %s, computed statusCode: %d, headers: %j",e.statusCode,r,e.headers);var o=2===Math.floor(r/100),c=new Date;if(m.push({currentHost:_,headers:p(i),content:t||null,contentLength:void 0!==t?t.length:null,method:v.method,timeouts:v.timeouts,url:v.url,startTime:b,endTime:c,duration:c-b,statusCode:r}),o)return f._useCache&&!f._useRequestCache&&u&&(u[a]=e.responseText),{responseText:e.responseText,body:e.body};if(4!==Math.floor(r/100))return h+=1,S();s("unrecoverable error");var l=new n.AlgoliaSearchError(e.body&&e.body.message,{debugData:m,statusCode:r});return f._promise.reject(l)},function(a){s("error: %s, stack: %s",a.message,a.stack);var c=new Date;return m.push({currentHost:_,headers:p(i),content:t||null,contentLength:void 0!==t?t.length:null,method:v.method,timeouts:v.timeouts,url:v.url,startTime:b,endTime:c,duration:c-b}),a instanceof n.AlgoliaSearchError||(a=new n.Unknown(a&&a.message,a)),h+=1,a instanceof n.Unknown||a instanceof n.UnparsableJSON||h>=f.hosts[e.hostType].length&&(d||!y)?(a.debugData=m,f._promise.reject(a)):a instanceof n.RequestTimeout?(s("retrying request with higher timeout"),f._incrementHostIndex(e.hostType),f._incrementTimeoutMultipler(),v.timeouts=f._getTimeoutsForRequest(e.hostType),r(o,v)):S()});function S(){return s("retrying request"),f._incrementHostIndex(e.hostType),r(o,v)}}(f._request,{url:e.url,method:e.method,body:t,jsonBody:e.body,timeouts:f._getTimeoutsForRequest(e.hostType),forceAuthHeaders:e.forceAuthHeaders});return f._useCache&&f._useRequestCache&&u&&(u[a]=w),v(w,function(e){return e.body})},c.prototype._getSearchParams=function(e,t){if(null==e)return t;for(var r in e)null!==r&&void 0!==e[r]&&e.hasOwnProperty(r)&&(t+=""===t?"":"&",t+=r+"="+encodeURIComponent("[object Array]"===Object.prototype.toString.call(e[r])?l(e[r]):e[r]));return t},c.prototype._computeRequestHeaders=function(e){var t=r(1),n={"x-algolia-agent":e.additionalUA?this._ua+";"+e.additionalUA:this._ua,"x-algolia-application-id":this.applicationID};return!1!==e.withApiKey&&(n["x-algolia-api-key"]=this.apiKey),this.userToken&&(n["x-algolia-usertoken"]=this.userToken),this.securityTags&&(n["x-algolia-tagfilters"]=this.securityTags),t(this.extraHeaders,function(e,t){n[t]=e}),e.headers&&t(e.headers,function(e,t){n[t]=e}),n},c.prototype.search=function(e,t,n){var o=r(4),a=r(5);if(!o(e))throw new Error("Usage: client.search(arrayOfQueries[, callback])");"function"==typeof t?(n=t,t={}):void 0===t&&(t={});var i=this,s={requests:a(e,function(e){var t="";return void 0!==e.query&&(t+="query="+encodeURIComponent(e.query)),{indexName:e.indexName,params:i._getSearchParams(e.params,t)}})},c=a(s.requests,function(e,t){return t+"="+encodeURIComponent("/1/indexes/"+encodeURIComponent(e.indexName)+"?"+e.params)}).join("&"),u="/1/indexes/*/queries";return void 0!==t.strategy&&(u+="?strategy="+t.strategy),this._jsonRequest({cache:this.cache,method:"POST",url:u,body:s,hostType:"read",fallback:{method:"GET",url:"/1/indexes/*",body:{params:c}},callback:n})},c.prototype.searchForFacetValues=function(e){var t=r(4),n=r(5),o="Usage: client.searchForFacetValues([{indexName, params: {facetName, facetQuery, ...params}}, ...queries])";if(!t(e))throw new Error(o);var a=this;return a._promise.all(n(e,function(e){if(!e||void 0===e.indexName||void 0===e.params.facetName||void 0===e.params.facetQuery)throw new Error(o);var t=r(2),n=r(11),i=e.indexName,s=e.params,c=s.facetName,u=n(t(s),function(e){return"facetName"===e}),l=a._getSearchParams(u,"");return a._jsonRequest({cache:a.cache,method:"POST",url:"/1/indexes/"+encodeURIComponent(i)+"/facets/"+encodeURIComponent(c)+"/query",hostType:"read",body:{params:l}})}))},c.prototype.setSecurityTags=function(e){if("[object Array]"===Object.prototype.toString.call(e)){for(var t=[],r=0;r<e.length;++r)if("[object Array]"===Object.prototype.toString.call(e[r])){for(var n=[],o=0;o<e[r].length;++o)n.push(e[r][o]);t.push("("+n.join(",")+")")}else t.push(e[r]);e=t.join(",")}this.securityTags=e},c.prototype.setUserToken=function(e){this.userToken=e},c.prototype.clearCache=function(){this.cache={}},c.prototype.setRequestTimeout=function(e){e&&(this._timeouts.connect=this._timeouts.read=this._timeouts.write=e)},c.prototype.setTimeouts=function(e){this._timeouts=e},c.prototype.getTimeouts=function(){return this._timeouts},c.prototype._getAppIdData=function(){var e=i.get(this.applicationID);return null!==e&&this._cacheAppIdData(e),e},c.prototype._setAppIdData=function(e){return e.lastChange=(new Date).getTime(),this._cacheAppIdData(e),i.set(this.applicationID,e)},c.prototype._checkAppIdData=function(){var e=this._getAppIdData(),t=(new Date).getTime();return null===e||t-e.lastChange>s?this._resetInitialAppIdData(e):e},c.prototype._resetInitialAppIdData=function(e){var t=e||{};return t.hostIndexes={read:0,write:0},t.timeoutMultiplier=1,t.shuffleResult=t.shuffleResult||function(e){var t,r,n=e.length;for(;0!==n;)r=Math.floor(Math.random()*n),t=e[n-=1],e[n]=e[r],e[r]=t;return e}([1,2,3]),this._setAppIdData(t)},c.prototype._cacheAppIdData=function(e){this._hostIndexes=e.hostIndexes,this._timeoutMultiplier=e.timeoutMultiplier,this._shuffleResult=e.shuffleResult},c.prototype._partialAppIdDataUpdate=function(e){var t=r(1),n=this._getAppIdData();return t(e,function(e,t){n[t]=e}),this._setAppIdData(n)},c.prototype._getHostByType=function(e){return this.hosts[e][this._getHostIndexByType(e)]},c.prototype._getTimeoutMultiplier=function(){return this._timeoutMultiplier},c.prototype._getHostIndexByType=function(e){return this._hostIndexes[e]},c.prototype._setHostIndexByType=function(e,t){var n=r(2)(this._hostIndexes);return n[t]=e,this._partialAppIdDataUpdate({hostIndexes:n}),e},c.prototype._incrementHostIndex=function(e){return this._setHostIndexByType((this._getHostIndexByType(e)+1)%this.hosts[e].length,e)},c.prototype._incrementTimeoutMultipler=function(){var e=Math.max(this._timeoutMultiplier+1,4);return this._partialAppIdDataUpdate({timeoutMultiplier:e})},c.prototype._getTimeoutsForRequest=function(e){return{connect:this._timeouts.connect*this._timeoutMultiplier,complete:this._timeouts[e]*this._timeoutMultiplier}}}).call(this,r(8))},function(e,t){e.exports=function(e,t){t(e,0)}},function(e,t,r){var n=r(10),o=r(22),a=r(23);function i(e,t){this.indexName=t,this.as=e,this.typeAheadArgs=null,this.typeAheadValueOption=null,this.cache={}}e.exports=i,i.prototype.clearCache=function(){this.cache={}},i.prototype.search=n("query"),i.prototype.similarSearch=n("similarQuery"),i.prototype.browse=function(e,t,n){var o,a,i=r(24);0===arguments.length||1===arguments.length&&"function"==typeof arguments[0]?(o=0,n=arguments[0],e=void 0):"number"==typeof arguments[0]?(o=arguments[0],"number"==typeof arguments[1]?a=arguments[1]:"function"==typeof arguments[1]&&(n=arguments[1],a=void 0),e=void 0,t=void 0):"object"==typeof arguments[0]?("function"==typeof arguments[1]&&(n=arguments[1]),t=arguments[0],e=void 0):"string"==typeof arguments[0]&&"function"==typeof arguments[1]&&(n=arguments[1],t=void 0),t=i({},t||{},{page:o,hitsPerPage:a,query:e});var s=this.as._getSearchParams(t,"");return this.as._jsonRequest({method:"POST",url:"/1/indexes/"+encodeURIComponent(this.indexName)+"/browse",body:{params:s},hostType:"read",callback:n})},i.prototype.browseFrom=function(e,t){return this.as._jsonRequest({method:"POST",url:"/1/indexes/"+encodeURIComponent(this.indexName)+"/browse",body:{cursor:e},hostType:"read",callback:t})},i.prototype.searchForFacetValues=function(e,t){var n=r(2),o=r(11);if(void 0===e.facetName||void 0===e.facetQuery)throw new Error("Usage: index.searchForFacetValues({facetName, facetQuery, ...params}[, callback])");var a=e.facetName,i=o(n(e),function(e){return"facetName"===e}),s=this.as._getSearchParams(i,"");return this.as._jsonRequest({method:"POST",url:"/1/indexes/"+encodeURIComponent(this.indexName)+"/facets/"+encodeURIComponent(a)+"/query",hostType:"read",body:{params:s},callback:t})},i.prototype.searchFacet=o(function(e,t){return this.searchForFacetValues(e,t)},a("index.searchFacet(params[, callback])","index.searchForFacetValues(params[, callback])")),i.prototype._search=function(e,t,r,n){return this.as._jsonRequest({cache:this.cache,method:"POST",url:t||"/1/indexes/"+encodeURIComponent(this.indexName)+"/query",body:{params:e},hostType:"read",fallback:{method:"GET",url:"/1/indexes/"+encodeURIComponent(this.indexName),body:{params:e}},callback:r,additionalUA:n})},i.prototype.getObject=function(e,t,r){1!==arguments.length&&"function"!=typeof t||(r=t,t=void 0);var n="";if(void 0!==t){n="?attributes=";for(var o=0;o<t.length;++o)0!==o&&(n+=","),n+=t[o]}return this.as._jsonRequest({method:"GET",url:"/1/indexes/"+encodeURIComponent(this.indexName)+"/"+encodeURIComponent(e)+n,hostType:"read",callback:r})},i.prototype.getObjects=function(e,t,n){var o=r(4),a=r(5);if(!o(e))throw new Error("Usage: index.getObjects(arrayOfObjectIDs[, callback])");var i=this;1!==arguments.length&&"function"!=typeof t||(n=t,t=void 0);var s={requests:a(e,function(e){var r={indexName:i.indexName,objectID:e};return t&&(r.attributesToRetrieve=t.join(",")),r})};return this.as._jsonRequest({method:"POST",url:"/1/indexes/*/objects",hostType:"read",body:s,callback:n})},i.prototype.as=null,i.prototype.indexName=null,i.prototype.typeAheadArgs=null,i.prototype.typeAheadValueOption=null},function(e,t){e.exports=function(e,t){var r=!1;return function(){return r||(console.warn(t),r=!0),e.apply(this,arguments)}}},function(e,t){e.exports=function(e,t){var r=e.toLowerCase().replace(/[\.\(\)]/g,"");return"algoliasearch: `"+e+"` was replaced by `"+t+"`. Please see https://github.com/algolia/algoliasearch-client-javascript/wiki/Deprecated#"+r}},function(e,t,r){var n=r(1);e.exports=function e(t){var r=Array.prototype.slice.call(arguments);return n(r,function(r){for(var n in r)r.hasOwnProperty(n)&&("object"==typeof t[n]&&"object"==typeof r[n]?t[n]=e({},t[n],r[n]):void 0!==r[n]&&(t[n]=r[n]))}),t}},function(e,t,r){"use strict";var n=Object.prototype.hasOwnProperty,o=Object.prototype.toString,a=Array.prototype.slice,i=r(26),s=Object.prototype.propertyIsEnumerable,c=!s.call({toString:null},"toString"),u=s.call(function(){},"prototype"),l=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],p=function(e){var t=e.constructor;return t&&t.prototype===e},f={$applicationCache:!0,$console:!0,$external:!0,$frame:!0,$frameElement:!0,$frames:!0,$innerHeight:!0,$innerWidth:!0,$outerHeight:!0,$outerWidth:!0,$pageXOffset:!0,$pageYOffset:!0,$parent:!0,$scrollLeft:!0,$scrollTop:!0,$scrollX:!0,$scrollY:!0,$self:!0,$webkitIndexedDB:!0,$webkitStorageInfo:!0,$window:!0},h=function(){if("undefined"==typeof window)return!1;for(var e in window)try{if(!f["$"+e]&&n.call(window,e)&&null!==window[e]&&"object"==typeof window[e])try{p(window[e])}catch(e){return!0}}catch(e){return!0}return!1}(),d=function(e){var t=null!==e&&"object"==typeof e,r="[object Function]"===o.call(e),a=i(e),s=t&&"[object String]"===o.call(e),f=[];if(!t&&!r&&!a)throw new TypeError("Object.keys called on a non-object");var d=u&&r;if(s&&e.length>0&&!n.call(e,0))for(var y=0;y<e.length;++y)f.push(String(y));if(a&&e.length>0)for(var m=0;m<e.length;++m)f.push(String(m));else for(var g in e)d&&"prototype"===g||!n.call(e,g)||f.push(String(g));if(c)for(var v=function(e){if("undefined"==typeof window||!h)return p(e);try{return p(e)}catch(e){return!1}}(e),b=0;b<l.length;++b)v&&"constructor"===l[b]||!n.call(e,l[b])||f.push(l[b]);return f};d.shim=function(){if(Object.keys){if(!function(){return 2===(Object.keys(arguments)||"").length}(1,2)){var e=Object.keys;Object.keys=function(t){return i(t)?e(a.call(t)):e(t)}}}else Object.keys=d;return Object.keys||d},e.exports=d},function(e,t,r){"use strict";var n=Object.prototype.toString;e.exports=function(e){var t=n.call(e),r="[object Arguments]"===t;return r||(r="[object Array]"!==t&&null!==e&&"object"==typeof e&&"number"==typeof e.length&&e.length>=0&&"[object Function]"===n.call(e.callee)),r}},function(e,t,r){(function(t){var n,o=r(6)("algoliasearch:src/hostIndexState.js"),a="algoliasearch-client-js",i={state:{},set:function(e,t){return this.state[e]=t,this.state[e]},get:function(e){return this.state[e]||null}},s={set:function(e,r){i.set(e,r);try{var n=JSON.parse(t.localStorage[a]);return n[e]=r,t.localStorage[a]=JSON.stringify(n),n[e]}catch(t){return c(e,t)}},get:function(e){try{return JSON.parse(t.localStorage[a])[e]||null}catch(t){return c(e,t)}}};function c(e,r){return o("localStorage failed with",r),function(){try{t.localStorage.removeItem(a)}catch(e){}}(),(n=i).get(e)}function u(e,t){return 1===arguments.length?n.get(e):n.set(e,t)}function l(){try{return"localStorage"in t&&null!==t.localStorage&&(t.localStorage[a]||t.localStorage.setItem(a,JSON.stringify({})),!0)}catch(e){return!1}}n=l()?s:i,e.exports={get:u,set:u,supportsLocalStorage:l}}).call(this,r(7))},function(e,t,r){var n;function o(e){function r(){if(r.enabled){var e=r,o=+new Date,a=o-(n||o);e.diff=a,e.prev=n,e.curr=o,n=o;for(var i=new Array(arguments.length),s=0;s<i.length;s++)i[s]=arguments[s];i[0]=t.coerce(i[0]),"string"!=typeof i[0]&&i.unshift("%O");var c=0;i[0]=i[0].replace(/%([a-zA-Z%])/g,function(r,n){if("%%"===r)return r;c++;var o=t.formatters[n];if("function"==typeof o){var a=i[c];r=o.call(e,a),i.splice(c,1),c--}return r}),t.formatArgs.call(e,i),(r.log||t.log||console.log.bind(console)).apply(e,i)}}return r.namespace=e,r.enabled=t.enabled(e),r.useColors=t.useColors(),r.color=function(e){var r,n=0;for(r in e)n=(n<<5)-n+e.charCodeAt(r),n|=0;return t.colors[Math.abs(n)%t.colors.length]}(e),"function"==typeof t.init&&t.init(r),r}(t=e.exports=o.debug=o.default=o).coerce=function(e){return e instanceof Error?e.stack||e.message:e},t.disable=function(){t.enable("")},t.enable=function(e){t.save(e),t.names=[],t.skips=[];for(var r=("string"==typeof e?e:"").split(/[\s,]+/),n=r.length,o=0;o<n;o++)r[o]&&("-"===(e=r[o].replace(/\*/g,".*?"))[0]?t.skips.push(new RegExp("^"+e.substr(1)+"$")):t.names.push(new RegExp("^"+e+"$")))},t.enabled=function(e){var r,n;for(r=0,n=t.skips.length;r<n;r++)if(t.skips[r].test(e))return!1;for(r=0,n=t.names.length;r<n;r++)if(t.names[r].test(e))return!0;return!1},t.humanize=r(29),t.names=[],t.skips=[],t.formatters={}},function(e,t){var r=1e3,n=60*r,o=60*n,a=24*o,i=365.25*a;function s(e,t,r){if(!(e<t))return e<1.5*t?Math.floor(e/t)+" "+r:Math.ceil(e/t)+" "+r+"s"}e.exports=function(e,t){t=t||{};var c,u=typeof e;if("string"===u&&e.length>0)return function(e){if((e=String(e)).length>100)return;var t=/^((?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(e);if(!t)return;var s=parseFloat(t[1]);switch((t[2]||"ms").toLowerCase()){case"years":case"year":case"yrs":case"yr":case"y":return s*i;case"days":case"day":case"d":return s*a;case"hours":case"hour":case"hrs":case"hr":case"h":return s*o;case"minutes":case"minute":case"mins":case"min":case"m":return s*n;case"seconds":case"second":case"secs":case"sec":case"s":return s*r;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return s;default:return}}(e);if("number"===u&&!1===isNaN(e))return t.long?s(c=e,a,"day")||s(c,o,"hour")||s(c,n,"minute")||s(c,r,"second")||c+" ms":function(e){if(e>=a)return Math.round(e/a)+"d";if(e>=o)return Math.round(e/o)+"h";if(e>=n)return Math.round(e/n)+"m";if(e>=r)return Math.round(e/r)+"s";return e+"ms"}(e);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(e))}},function(e,t,r){"use strict";var n=r(31),o=n.Promise||r(32).Promise;e.exports=function(e,t){var a=r(9),i=r(3),s=r(33),c=r(35),u=r(36);function l(e,t,n){return(n=r(2)(n||{}))._ua=n._ua||l.ua,new f(e,t,n)}t=t||"",l.version=r(37),l.ua="Algolia for vanilla JavaScript "+t+l.version,l.initPlaces=u(l),n.__algolia={debug:r(6),algoliasearch:l};var p={hasXMLHttpRequest:"XMLHttpRequest"in n,hasXDomainRequest:"XDomainRequest"in n};function f(){e.apply(this,arguments)}return p.hasXMLHttpRequest&&(p.cors="withCredentials"in new XMLHttpRequest),a(f,e),f.prototype._request=function(e,t){return new o(function(r,n){if(p.cors||p.hasXDomainRequest){e=s(e,t.headers);var o,a,c=t.body,u=p.cors?new XMLHttpRequest:new XDomainRequest,l=!1;o=setTimeout(f,t.timeouts.connect),u.onprogress=function(){l||h()},"onreadystatechange"in u&&(u.onreadystatechange=function(){!l&&u.readyState>1&&h()}),u.onload=function(){if(a)return;var e;clearTimeout(o);try{e={body:JSON.parse(u.responseText),responseText:u.responseText,statusCode:u.status,headers:u.getAllResponseHeaders&&u.getAllResponseHeaders()||{}}}catch(t){e=new i.UnparsableJSON({more:u.responseText})}e instanceof i.UnparsableJSON?n(e):r(e)},u.onerror=function(e){if(a)return;clearTimeout(o),n(new i.Network({more:e}))},u instanceof XMLHttpRequest?(u.open(t.method,e,!0),t.forceAuthHeaders&&(u.setRequestHeader("x-algolia-application-id",t.headers["x-algolia-application-id"]),u.setRequestHeader("x-algolia-api-key",t.headers["x-algolia-api-key"]))):u.open(t.method,e),p.cors&&(c&&("POST"===t.method?u.setRequestHeader("content-type","application/x-www-form-urlencoded"):u.setRequestHeader("content-type","application/json")),u.setRequestHeader("accept","application/json")),c?u.send(c):u.send()}else n(new i.Network("CORS not supported"));function f(){a=!0,u.abort(),n(new i.RequestTimeout)}function h(){l=!0,clearTimeout(o),o=setTimeout(f,t.timeouts.complete)}})},f.prototype._request.fallback=function(e,t){return e=s(e,t.headers),new o(function(r,n){c(e,t,function(e,t){e?n(e):r(t)})})},f.prototype._promise={reject:function(e){return o.reject(e)},resolve:function(e){return o.resolve(e)},delay:function(e){return new o(function(t){setTimeout(t,e)})},all:function(e){return o.all(e)}},l}},function(e,t,r){(function(t){var r;r="undefined"!=typeof window?window:void 0!==t?t:"undefined"!=typeof self?self:{},e.exports=r}).call(this,r(7))},function(e,t,r){(function(t,r){
+/*!
+ * @overview es6-promise - a tiny implementation of Promises/A+.
+ * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)
+ * @license   Licensed under MIT license
+ *            See https://raw.githubusercontent.com/stefanpenner/es6-promise/master/LICENSE
+ * @version   v4.2.4+314e4831
+ */var n;n=function(){"use strict";function e(e){return"function"==typeof e}var n=Array.isArray?Array.isArray:function(e){return"[object Array]"===Object.prototype.toString.call(e)},o=0,a=void 0,i=void 0,s=function(e,t){d[o]=e,d[o+1]=t,2===(o+=2)&&(i?i(y):w())},c="undefined"!=typeof window?window:void 0,u=c||{},l=u.MutationObserver||u.WebKitMutationObserver,p="undefined"==typeof self&&void 0!==t&&"[object process]"==={}.toString.call(t),f="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel;function h(){var e=setTimeout;return function(){return e(y,1)}}var d=new Array(1e3);function y(){for(var e=0;e<o;e+=2){(0,d[e])(d[e+1]),d[e]=void 0,d[e+1]=void 0}o=0}var m,g,v,b,w=void 0;function _(e,t){var r=this,n=new this.constructor(S);void 0===n[T]&&M(n);var o=r._state;if(o){var a=arguments[o-1];s(function(){return D(o,n,a,r._result)})}else P(r,n,e,t);return n}function x(e){if(e&&"object"==typeof e&&e.constructor===this)return e;var t=new this(S);return C(t,e),t}p?w=function(){return t.nextTick(y)}:l?(g=0,v=new l(y),b=document.createTextNode(""),v.observe(b,{characterData:!0}),w=function(){b.data=g=++g%2}):f?((m=new MessageChannel).port1.onmessage=y,w=function(){return m.port2.postMessage(0)}):w=void 0===c?function(){try{var e=Function("return this")().require("vertx");return void 0!==(a=e.runOnLoop||e.runOnContext)?function(){a(y)}:h()}catch(e){return h()}}():h();var T=Math.random().toString(36).substring(2);function S(){}var A=void 0,j=1,O=2,R={error:null};function k(e){try{return e.then}catch(e){return R.error=e,R}}function I(t,r,n){r.constructor===t.constructor&&n===_&&r.constructor.resolve===x?function(e,t){t._state===j?E(e,t._result):t._state===O?N(e,t._result):P(t,void 0,function(t){return C(e,t)},function(t){return N(e,t)})}(t,r):n===R?(N(t,R.error),R.error=null):void 0===n?E(t,r):e(n)?function(e,t,r){s(function(e){var n=!1,o=function(e,t,r,n){try{e.call(t,r,n)}catch(e){return e}}(r,t,function(r){n||(n=!0,t!==r?C(e,r):E(e,r))},function(t){n||(n=!0,N(e,t))},e._label);!n&&o&&(n=!0,N(e,o))},e)}(t,r,n):E(t,r)}function C(e,t){var r,n;e===t?N(e,new TypeError("You cannot resolve a promise with itself")):(n=typeof(r=t),null===r||"object"!==n&&"function"!==n?E(e,t):I(e,t,k(t)))}function q(e){e._onerror&&e._onerror(e._result),U(e)}function E(e,t){e._state===A&&(e._result=t,e._state=j,0!==e._subscribers.length&&s(U,e))}function N(e,t){e._state===A&&(e._state=O,e._result=t,s(q,e))}function P(e,t,r,n){var o=e._subscribers,a=o.length;e._onerror=null,o[a]=t,o[a+j]=r,o[a+O]=n,0===a&&e._state&&s(U,e)}function U(e){var t=e._subscribers,r=e._state;if(0!==t.length){for(var n=void 0,o=void 0,a=e._result,i=0;i<t.length;i+=3)n=t[i],o=t[i+r],n?D(r,n,o,a):o(a);e._subscribers.length=0}}function D(t,r,n,o){var a=e(n),i=void 0,s=void 0,c=void 0,u=void 0;if(a){if((i=function(e,t){try{return e(t)}catch(e){return R.error=e,R}}(n,o))===R?(u=!0,s=i.error,i.error=null):c=!0,r===i)return void N(r,new TypeError("A promises callback cannot return that same promise."))}else i=o,c=!0;r._state!==A||(a&&c?C(r,i):u?N(r,s):t===j?E(r,i):t===O&&N(r,i))}var H=0;function M(e){e[T]=H++,e._state=void 0,e._result=void 0,e._subscribers=[]}var J=function(){function e(e,t){this._instanceConstructor=e,this.promise=new e(S),this.promise[T]||M(this.promise),n(t)?(this.length=t.length,this._remaining=t.length,this._result=new Array(this.length),0===this.length?E(this.promise,this._result):(this.length=this.length||0,this._enumerate(t),0===this._remaining&&E(this.promise,this._result))):N(this.promise,new Error("Array Methods must be provided an Array"))}return e.prototype._enumerate=function(e){for(var t=0;this._state===A&&t<e.length;t++)this._eachEntry(e[t],t)},e.prototype._eachEntry=function(e,t){var r=this._instanceConstructor,n=r.resolve;if(n===x){var o=k(e);if(o===_&&e._state!==A)this._settledAt(e._state,t,e._result);else if("function"!=typeof o)this._remaining--,this._result[t]=e;else if(r===F){var a=new r(S);I(a,e,o),this._willSettleAt(a,t)}else this._willSettleAt(new r(function(t){return t(e)}),t)}else this._willSettleAt(n(e),t)},e.prototype._settledAt=function(e,t,r){var n=this.promise;n._state===A&&(this._remaining--,e===O?N(n,r):this._result[t]=r),0===this._remaining&&E(n,this._result)},e.prototype._willSettleAt=function(e,t){var r=this;P(e,void 0,function(e){return r._settledAt(j,t,e)},function(e){return r._settledAt(O,t,e)})},e}(),F=function(){function e(t){this[T]=H++,this._result=this._state=void 0,this._subscribers=[],S!==t&&("function"!=typeof t&&function(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}(),this instanceof e?function(e,t){try{t(function(t){C(e,t)},function(t){N(e,t)})}catch(t){N(e,t)}}(this,t):function(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")}())}return e.prototype.catch=function(e){return this.then(null,e)},e.prototype.finally=function(e){var t=this.constructor;return this.then(function(r){return t.resolve(e()).then(function(){return r})},function(r){return t.resolve(e()).then(function(){throw r})})},e}();return F.prototype.then=_,F.all=function(e){return new J(this,e).promise},F.race=function(e){var t=this;return n(e)?new t(function(r,n){for(var o=e.length,a=0;a<o;a++)t.resolve(e[a]).then(r,n)}):new t(function(e,t){return t(new TypeError("You must pass an array to race."))})},F.resolve=x,F.reject=function(e){var t=new this(S);return N(t,e),t},F._setScheduler=function(e){i=e},F._setAsap=function(e){s=e},F._asap=s,F.polyfill=function(){var e=void 0;if(void 0!==r)e=r;else if("undefined"!=typeof self)e=self;else try{e=Function("return this")()}catch(e){throw new Error("polyfill failed because global object is unavailable in this environment")}var t=e.Promise;if(t){var n=null;try{n=Object.prototype.toString.call(t.resolve())}catch(e){}if("[object Promise]"===n&&!t.cast)return}e.Promise=F},F.Promise=F,F},e.exports=n()}).call(this,r(8),r(7))},function(e,t,r){"use strict";e.exports=function(e,t){/\?/.test(e)?e+="&":e+="?";return e+n(t)};var n=r(34)},function(e,t,r){"use strict";var n=function(e){switch(typeof e){case"string":return e;case"boolean":return e?"true":"false";case"number":return isFinite(e)?e:"";default:return""}};e.exports=function(e,t,r,s){return t=t||"&",r=r||"=",null===e&&(e=void 0),"object"==typeof e?a(i(e),function(i){var s=encodeURIComponent(n(i))+r;return o(e[i])?a(e[i],function(e){return s+encodeURIComponent(n(e))}).join(t):s+encodeURIComponent(n(e[i]))}).join(t):s?encodeURIComponent(n(s))+r+encodeURIComponent(n(e)):""};var o=Array.isArray||function(e){return"[object Array]"===Object.prototype.toString.call(e)};function a(e,t){if(e.map)return e.map(t);for(var r=[],n=0;n<e.length;n++)r.push(t(e[n],n));return r}var i=Object.keys||function(e){var t=[];for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.push(r);return t}},function(e,t,r){"use strict";e.exports=function(e,t,r){if("GET"!==t.method)return void r(new Error("Method "+t.method+" "+e+" is not supported by JSONP."));t.debug("JSONP: start");var a=!1,i=!1;o+=1;var s=document.getElementsByTagName("head")[0],c=document.createElement("script"),u="algoliaJSONP_"+o,l=!1;window[u]=function(e){!function(){try{delete window[u],delete window[u+"_loaded"]}catch(e){window[u]=window[u+"_loaded"]=void 0}}(),i?t.debug("JSONP: Late answer, ignoring"):(a=!0,h(),r(null,{body:e,responseText:JSON.stringify(e)}))},e+="&callback="+u,t.jsonBody&&t.jsonBody.params&&(e+="&"+t.jsonBody.params);var p=setTimeout(function(){t.debug("JSONP: Script timeout"),i=!0,h(),r(new n.RequestTimeout)},t.timeouts.complete);function f(){t.debug("JSONP: success"),l||i||(l=!0,a||(t.debug("JSONP: Fail. Script loaded but did not call the callback"),h(),r(new n.JSONPScriptFail)))}function h(){clearTimeout(p),c.onload=null,c.onreadystatechange=null,c.onerror=null,s.removeChild(c)}c.onreadystatechange=function(){"loaded"!==this.readyState&&"complete"!==this.readyState||f()},c.onload=f,c.onerror=function(){if(t.debug("JSONP: Script error"),l||i)return;h(),r(new n.JSONPScriptError)},c.async=!0,c.defer=!0,c.src=e,s.appendChild(c)};var n=r(3),o=0},function(e,t,r){e.exports=function(e){return function(t,o,a){var i=r(2);(a=a&&i(a)||{}).hosts=a.hosts||["places-dsn.algolia.net","places-1.algolianet.com","places-2.algolianet.com","places-3.algolianet.com"],0!==arguments.length&&"object"!=typeof t&&void 0!==t||(t="",o="",a._allowEmptyCredentials=!0);var s=e(t,o,a),c=s.initIndex("places");return c.search=n("query","/1/places/query"),c.getObject=function(e,t){return this.as._jsonRequest({method:"GET",url:"/1/places/"+encodeURIComponent(e),hostType:"read",callback:t})},c}};var n=r(10)},function(e,t,r){"use strict";e.exports="3.29.0"}]);
\ No newline at end of file
diff --git a/assets/js/comments.57223579.js b/assets/js/comments.57223579.js
new file mode 100644
index 0000000..a423023
--- /dev/null
+++ b/assets/js/comments.57223579.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[1],{45:function(e,n,t){"use strict";t.r(n),t.d(n,"initComments",function(){return a});var o=document.querySelector(".comment-list"),r=document.querySelector("#respond"),c=r.querySelector("form"),i=r.querySelector("#cancel-comment-reply-link"),l=r.querySelector('[name="fields[parent_id]"]'),u=function(e){if(e){var n=o.querySelector("#comment-".concat(e," article"));return l.value=e,n.parentNode.insertBefore(r,n.nextSibling),i.style.display="",c.querySelector("textarea").focus(),!1}},a=function(){i.style.display="none",i.addEventListener("click",function(e){e.preventDefault(),l.value="",o.parentNode.appendChild(r),i.style.display="none"}),window.moveRespondBlock=u}}}]);
\ No newline at end of file
diff --git a/assets/js/details-polyfill.45606d79.js b/assets/js/details-polyfill.45606d79.js
new file mode 100644
index 0000000..0c54cb9
--- /dev/null
+++ b/assets/js/details-polyfill.45606d79.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[2],{42:function(e,n,t){"use strict";t.r(n),t.d(n,"detailsPolyfill",function(){return i});var o=document.body,i=function(e){(function(){var e=document.createElement("details");if(!("open"in e))return!1;e.innerHTML="<summary>a</summary>b",o.appendChild(e);var n=e.offsetHeight;e.open=!0;var t=n!=e.offsetHeight;return o.removeChild(e),t})()||(o.classList.add("no-details"),e.forEach(function(e){e.querySelector("summary").addEventListener("click",function(){e.getAttribute("open")?(e.open=!1,e.removeAttribute("open")):(e.open=!0,e.setAttribute("open","open"))})}))}}}]);
\ No newline at end of file
diff --git a/assets/js/fuse_search.1ada4bca.js b/assets/js/fuse_search.1ada4bca.js
new file mode 100644
index 0000000..5a0f5c8
--- /dev/null
+++ b/assets/js/fuse_search.1ada4bca.js
@@ -0,0 +1,10 @@
+!function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=38)}({0:function(e,t,n){"use strict";n.d(t,"a",function(){return r}),n.d(t,"d",function(){return o}),n.d(t,"c",function(){return i}),n.d(t,"b",function(){return a});var r=function(e,t){0===e.length?t.innerHTML="<li class='results-empty'>\n      <a href='#search-term'>".concat(t.dataset.resultsEmpty,"</a>\n    </li>"):t.innerHTML=e.reduce(function(e,t){var n=t.href,r=t.title;return"".concat(e,"<li><a href='").concat(n,"'>").concat(r,"</a></li>")},"")},o=function(e){e.innerHTML="<li class='searching'>\n    <a href='#search-results'>".concat(e.dataset.searching,"&hellip;</a>\n  </li>")},i=function(e){if("URLSearchParams"in window)return new URLSearchParams(window.location.search).get(e);e=e.replace(/[\[]/,"\\[").replace(/[\]]/,"\\]");var t=new RegExp("[\\?&]"+e+"=([^&#]*)").exec(location.search);return null===t?"":decodeURIComponent(t[1].replace(/\+/g," "))},a=function(e,t){var n=new XMLHttpRequest;n.open("GET",e,!0),n.onload=function(){if(n.status>=200&&n.status<400){var e=JSON.parse(n.responseText);t(null,e)}else t(new Error(n.statusText))},n.onerror=function(){t(new Error("Failed to get JSON! ".concat(n.statusText)))},n.send()}},14:function(e,t,n){
+/*!
+ * Fuse.js v3.2.1 - Lightweight fuzzy-search (http://fusejs.io)
+ * 
+ * Copyright (c) 2012-2017 Kirollos Risk (http://kiro.me)
+ * All Rights Reserved. Apache Software License 2.0
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ */
+var r;r=function(){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=e,n.c=t,n.i=function(e){return e},n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:r})},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=8)}([function(e,t,n){"use strict";e.exports=function(e){return Array.isArray?Array.isArray(e):"[object Array]"===Object.prototype.toString.call(e)}},function(e,t,n){"use strict";var r=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}();var o=n(5),i=n(7),a=n(4),s=function(){function e(t,n){var r=n.location,o=void 0===r?0:r,i=n.distance,s=void 0===i?100:i,c=n.threshold,u=void 0===c?.6:c,l=n.maxPatternLength,h=void 0===l?32:l,f=n.isCaseSensitive,d=void 0!==f&&f,v=n.tokenSeparator,p=void 0===v?/ +/g:v,g=n.findAllMatches,y=void 0!==g&&g,m=n.minMatchCharLength,x=void 0===m?1:m;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.options={location:o,distance:s,threshold:u,maxPatternLength:h,isCaseSensitive:d,tokenSeparator:p,findAllMatches:y,minMatchCharLength:x},this.pattern=this.options.isCaseSensitive?t:t.toLowerCase(),this.pattern.length<=h&&(this.patternAlphabet=a(this.pattern))}return r(e,[{key:"search",value:function(e){if(this.options.isCaseSensitive||(e=e.toLowerCase()),this.pattern===e)return{isMatch:!0,score:0,matchedIndices:[[0,e.length-1]]};var t=this.options,n=t.maxPatternLength,r=t.tokenSeparator;if(this.pattern.length>n)return o(e,this.pattern,r);var a=this.options,s=a.location,c=a.distance,u=a.threshold,l=a.findAllMatches,h=a.minMatchCharLength;return i(e,this.pattern,this.patternAlphabet,{location:s,distance:c,threshold:u,findAllMatches:l,minMatchCharLength:h})}}]),e}();e.exports=s},function(e,t,n){"use strict";var r=n(0);e.exports=function(e,t){return function e(t,n,o){if(n){var i=n.indexOf("."),a=n,s=null;-1!==i&&(a=n.slice(0,i),s=n.slice(i+1));var c=t[a];if(null!=c)if(s||"string"!=typeof c&&"number"!=typeof c)if(r(c))for(var u=0,l=c.length;u<l;u+=1)e(c[u],s,o);else s&&e(c,s,o);else o.push(c.toString())}else o.push(t);return o}(e,t,[])}},function(e,t,n){"use strict";e.exports=function(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,n=[],r=-1,o=-1,i=0,a=e.length;i<a;i+=1){var s=e[i];s&&-1===r?r=i:s||-1===r||((o=i-1)-r+1>=t&&n.push([r,o]),r=-1)}return e[i-1]&&i-r>=t&&n.push([r,i-1]),n}},function(e,t,n){"use strict";e.exports=function(e){for(var t={},n=e.length,r=0;r<n;r+=1)t[e.charAt(r)]=0;for(var o=0;o<n;o+=1)t[e.charAt(o)]|=1<<n-o-1;return t}},function(e,t,n){"use strict";var r=/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g;e.exports=function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:/ +/g,o=new RegExp(t.replace(r,"\\$&").replace(n,"|")),i=e.match(o),a=!!i,s=[];if(a)for(var c=0,u=i.length;c<u;c+=1){var l=i[c];s.push([e.indexOf(l),l.length-1])}return{score:a?.5:1,isMatch:a,matchedIndices:s}}},function(e,t,n){"use strict";e.exports=function(e,t){var n=t.errors,r=void 0===n?0:n,o=t.currentLocation,i=void 0===o?0:o,a=t.expectedLocation,s=void 0===a?0:a,c=t.distance,u=void 0===c?100:c,l=r/e.length,h=Math.abs(s-i);return u?l+h/u:h?1:l}},function(e,t,n){"use strict";var r=n(6),o=n(3);e.exports=function(e,t,n,i){for(var a=i.location,s=void 0===a?0:a,c=i.distance,u=void 0===c?100:c,l=i.threshold,h=void 0===l?.6:l,f=i.findAllMatches,d=void 0!==f&&f,v=i.minMatchCharLength,p=void 0===v?1:v,g=s,y=e.length,m=h,x=e.indexOf(t,g),k=t.length,S=[],b=0;b<y;b+=1)S[b]=0;if(-1!==x){var M=r(t,{errors:0,currentLocation:x,expectedLocation:g,distance:u});if(m=Math.min(M,m),-1!==(x=e.lastIndexOf(t,g+k))){var w=r(t,{errors:0,currentLocation:x,expectedLocation:g,distance:u});m=Math.min(w,m)}}x=-1;for(var L=[],_=1,O=k+y,A=1<<k-1,C=0;C<k;C+=1){for(var I=0,j=O;I<j;){r(t,{errors:C,currentLocation:g+j,expectedLocation:g,distance:u})<=m?I=j:O=j,j=Math.floor((O-I)/2+I)}O=j;var P=Math.max(1,g-j+1),T=d?y:Math.min(g+j,y)+k,E=Array(T+2);E[T+1]=(1<<C)-1;for(var z=T;z>=P;z-=1){var F=z-1,R=n[e.charAt(F)];if(R&&(S[F]=1),E[z]=(E[z+1]<<1|1)&R,0!==C&&(E[z]|=(L[z+1]|L[z])<<1|1|L[z+1]),E[z]&A&&(_=r(t,{errors:C,currentLocation:F,expectedLocation:g,distance:u}))<=m){if(m=_,(x=F)<=g)break;P=Math.max(1,2*g-x)}}if(r(t,{errors:C+1,currentLocation:g,expectedLocation:g,distance:u})>m)break;L=E}return{isMatch:x>=0,score:0===_?.001:_,matchedIndices:o(S,p)}}},function(e,t,n){"use strict";var r=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}();var o=n(1),i=n(2),a=n(0),s=function(){function e(t,n){var r=n.location,o=void 0===r?0:r,a=n.distance,s=void 0===a?100:a,c=n.threshold,u=void 0===c?.6:c,l=n.maxPatternLength,h=void 0===l?32:l,f=n.caseSensitive,d=void 0!==f&&f,v=n.tokenSeparator,p=void 0===v?/ +/g:v,g=n.findAllMatches,y=void 0!==g&&g,m=n.minMatchCharLength,x=void 0===m?1:m,k=n.id,S=void 0===k?null:k,b=n.keys,M=void 0===b?[]:b,w=n.shouldSort,L=void 0===w||w,_=n.getFn,O=void 0===_?i:_,A=n.sortFn,C=void 0===A?function(e,t){return e.score-t.score}:A,I=n.tokenize,j=void 0!==I&&I,P=n.matchAllTokens,T=void 0!==P&&P,E=n.includeMatches,z=void 0!==E&&E,F=n.includeScore,R=void 0!==F&&F,H=n.verbose,J=void 0!==H&&H;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.options={location:o,distance:s,threshold:u,maxPatternLength:h,isCaseSensitive:d,tokenSeparator:p,findAllMatches:y,minMatchCharLength:x,id:S,keys:M,includeMatches:z,includeScore:R,shouldSort:L,getFn:O,sortFn:C,verbose:J,tokenize:j,matchAllTokens:T},this.setCollection(t)}return r(e,[{key:"setCollection",value:function(e){return this.list=e,e}},{key:"search",value:function(e){this._log('---------\nSearch pattern: "'+e+'"');var t=this._prepareSearchers(e),n=t.tokenSearchers,r=t.fullSearcher,o=this._search(n,r),i=o.weights,a=o.results;return this._computeScore(i,a),this.options.shouldSort&&this._sort(a),this._format(a)}},{key:"_prepareSearchers",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=[];if(this.options.tokenize)for(var n=e.split(this.options.tokenSeparator),r=0,i=n.length;r<i;r+=1)t.push(new o(n[r],this.options));return{tokenSearchers:t,fullSearcher:new o(e,this.options)}}},{key:"_search",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments[1],n=this.list,r={},o=[];if("string"==typeof n[0]){for(var i=0,a=n.length;i<a;i+=1)this._analyze({key:"",value:n[i],record:i,index:i},{resultMap:r,results:o,tokenSearchers:e,fullSearcher:t});return{weights:null,results:o}}for(var s={},c=0,u=n.length;c<u;c+=1)for(var l=n[c],h=0,f=this.options.keys.length;h<f;h+=1){var d=this.options.keys[h];if("string"!=typeof d){if(s[d.name]={weight:1-d.weight||1},d.weight<=0||d.weight>1)throw new Error("Key weight has to be > 0 and <= 1");d=d.name}else s[d]={weight:1};this._analyze({key:d,value:this.options.getFn(l,d),record:l,index:c},{resultMap:r,results:o,tokenSearchers:e,fullSearcher:t})}return{weights:s,results:o}}},{key:"_analyze",value:function(e,t){var n=e.key,r=e.arrayIndex,o=void 0===r?-1:r,i=e.value,s=e.record,c=e.index,u=t.tokenSearchers,l=void 0===u?[]:u,h=t.fullSearcher,f=void 0===h?[]:h,d=t.resultMap,v=void 0===d?{}:d,p=t.results,g=void 0===p?[]:p;if(null!=i){var y=!1,m=-1,x=0;if("string"==typeof i){this._log("\nKey: "+(""===n?"-":n));var k=f.search(i);if(this._log('Full text: "'+i+'", score: '+k.score),this.options.tokenize){for(var S=i.split(this.options.tokenSeparator),b=[],M=0;M<l.length;M+=1){var w=l[M];this._log('\nPattern: "'+w.pattern+'"');for(var L=!1,_=0;_<S.length;_+=1){var O=S[_],A=w.search(O),C={};A.isMatch?(C[O]=A.score,y=!0,L=!0,b.push(A.score)):(C[O]=1,this.options.matchAllTokens||b.push(1)),this._log('Token: "'+O+'", score: '+C[O])}L&&(x+=1)}m=b[0];for(var I=b.length,j=1;j<I;j+=1)m+=b[j];m/=I,this._log("Token score average:",m)}var P=k.score;m>-1&&(P=(P+m)/2),this._log("Score average:",P);var T=!this.options.tokenize||!this.options.matchAllTokens||x>=l.length;if(this._log("\nCheck Matches: "+T),(y||k.isMatch)&&T){var E=v[c];E?E.output.push({key:n,arrayIndex:o,value:i,score:P,matchedIndices:k.matchedIndices}):(v[c]={item:s,output:[{key:n,arrayIndex:o,value:i,score:P,matchedIndices:k.matchedIndices}]},g.push(v[c]))}}else if(a(i))for(var z=0,F=i.length;z<F;z+=1)this._analyze({key:n,arrayIndex:z,value:i[z],record:s,index:c},{resultMap:v,results:g,tokenSearchers:l,fullSearcher:f})}}},{key:"_computeScore",value:function(e,t){this._log("\n\nComputing score:\n");for(var n=0,r=t.length;n<r;n+=1){for(var o=t[n].output,i=o.length,a=1,s=1,c=0;c<i;c+=1){var u=e?e[o[c].key].weight:1,l=(1===u?o[c].score:o[c].score||.001)*u;1!==u?s=Math.min(s,l):(o[c].nScore=l,a*=l)}t[n].score=1===s?a:s,this._log(t[n])}}},{key:"_sort",value:function(e){this._log("\n\nSorting...."),e.sort(this.options.sortFn)}},{key:"_format",value:function(e){var t=[];this.options.verbose&&this._log("\n\nOutput:\n\n",JSON.stringify(e));var n=[];this.options.includeMatches&&n.push(function(e,t){var n=e.output;t.matches=[];for(var r=0,o=n.length;r<o;r+=1){var i=n[r];if(0!==i.matchedIndices.length){var a={indices:i.matchedIndices,value:i.value};i.key&&(a.key=i.key),i.hasOwnProperty("arrayIndex")&&i.arrayIndex>-1&&(a.arrayIndex=i.arrayIndex),t.matches.push(a)}}}),this.options.includeScore&&n.push(function(e,t){t.score=e.score});for(var r=0,o=e.length;r<o;r+=1){var i=e[r];if(this.options.id&&(i.item=this.options.getFn(i.item,this.options.id)[0]),n.length){for(var a={item:i.item},s=0,c=n.length;s<c;s+=1)n[s](i,a);t.push(a)}else t.push(i.item)}return t}},{key:"_log",value:function(){var e;this.options.verbose&&(e=console).log.apply(e,arguments)}}]),e}();e.exports=s}])},e.exports=r()},38:function(e,t,n){"use strict";n.r(t);var r=n(14),o=n.n(r),i=n(0),a=function(e,t,n){Object(i.d)(n);var r=e?t.search(e).map(function(e){return{href:e.href,title:e.title}}):[];Object(i.a)(r,n)},s={shouldSort:!0,threshold:.5,location:0,distance:500,maxPatternLength:32,minMatchCharLength:1,keys:[{name:"title",weight:.7},{name:"content",weight:.3}]},c=document.getElementById("search-term"),u=document.getElementById("search-results"),l=Object(i.c)("q");c.value=l,c.focus(),Object(i.d)(u),Object(i.b)("".concat(window.location.pathname,"index.json"),function(e,t){if(e)console.error(e);else{var n=new o.a(t,s);a(l,n,u),c.addEventListener("input",function(e){a(e.target.value,n,u)})}})}});
\ No newline at end of file
diff --git a/assets/js/lunr_search.d90858c3.js b/assets/js/lunr_search.d90858c3.js
new file mode 100644
index 0000000..c2a0183
--- /dev/null
+++ b/assets/js/lunr_search.d90858c3.js
@@ -0,0 +1,51 @@
+!function(e){var t={};function r(n){if(t[n])return t[n].exports;var i=t[n]={i:n,l:!1,exports:{}};return e[n].call(i.exports,i,i.exports,r),i.l=!0,i.exports}r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)r.d(n,i,function(t){return e[t]}.bind(null,i));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=39)}({0:function(e,t,r){"use strict";r.d(t,"a",function(){return n}),r.d(t,"d",function(){return i}),r.d(t,"c",function(){return s}),r.d(t,"b",function(){return o});var n=function(e,t){0===e.length?t.innerHTML="<li class='results-empty'>\n      <a href='#search-term'>".concat(t.dataset.resultsEmpty,"</a>\n    </li>"):t.innerHTML=e.reduce(function(e,t){var r=t.href,n=t.title;return"".concat(e,"<li><a href='").concat(r,"'>").concat(n,"</a></li>")},"")},i=function(e){e.innerHTML="<li class='searching'>\n    <a href='#search-results'>".concat(e.dataset.searching,"&hellip;</a>\n  </li>")},s=function(e){if("URLSearchParams"in window)return new URLSearchParams(window.location.search).get(e);e=e.replace(/[\[]/,"\\[").replace(/[\]]/,"\\]");var t=new RegExp("[\\?&]"+e+"=([^&#]*)").exec(location.search);return null===t?"":decodeURIComponent(t[1].replace(/\+/g," "))},o=function(e,t){var r=new XMLHttpRequest;r.open("GET",e,!0),r.onload=function(){if(r.status>=200&&r.status<400){var e=JSON.parse(r.responseText);t(null,e)}else t(new Error(r.statusText))},r.onerror=function(){t(new Error("Failed to get JSON! ".concat(r.statusText)))},r.send()}},15:function(e,t,r){var n,i;
+/**
+ * lunr - http://lunrjs.com - A bit like Solr, but much smaller and not as bright - 2.3.0
+ * Copyright (C) 2018 Oliver Nightingale
+ * @license MIT
+ */!function(){var s,o,a,u,l,c,d,h,f,p,y,m,g,x,v,w,Q,k,S,b,E,L,T,P,O,I,R=function(e){var t=new R.Builder;return t.pipeline.add(R.trimmer,R.stopWordFilter,R.stemmer),t.searchPipeline.add(R.stemmer),e.call(t,t),t.build()};R.version="2.3.0"
+/*!
+ * lunr.utils
+ * Copyright (C) 2018 Oliver Nightingale
+ */,R.utils={},R.utils.warn=(s=this,function(e){s.console&&console.warn&&console.warn(e)}),R.utils.asString=function(e){return null==e?"":e.toString()},R.utils.clone=function(e){if(null==e)return e;for(var t=Object.create(null),r=Object.keys(e),n=0;n<r.length;n++){var i=r[n],s=e[i];if(Array.isArray(s))t[i]=s.slice();else{if("string"!=typeof s&&"number"!=typeof s&&"boolean"!=typeof s)throw new TypeError("clone is not deep and does not support nested objects");t[i]=s}}return t},R.FieldRef=function(e,t,r){this.docRef=e,this.fieldName=t,this._stringValue=r},R.FieldRef.joiner="/",R.FieldRef.fromString=function(e){var t=e.indexOf(R.FieldRef.joiner);if(-1===t)throw"malformed field ref string";var r=e.slice(0,t),n=e.slice(t+1);return new R.FieldRef(n,r,e)},R.FieldRef.prototype.toString=function(){return null==this._stringValue&&(this._stringValue=this.fieldName+R.FieldRef.joiner+this.docRef),this._stringValue}
+/*!
+ * lunr.Set
+ * Copyright (C) 2018 Oliver Nightingale
+ */,R.Set=function(e){if(this.elements=Object.create(null),e){this.length=e.length;for(var t=0;t<this.length;t++)this.elements[e[t]]=!0}else this.length=0},R.Set.complete={intersect:function(e){return e},union:function(e){return e},contains:function(){return!0}},R.Set.empty={intersect:function(){return this},union:function(e){return e},contains:function(){return!1}},R.Set.prototype.contains=function(e){return!!this.elements[e]},R.Set.prototype.intersect=function(e){var t,r,n,i=[];this.length<e.length?(t=this,r=e):(t=e,r=this),n=Object.keys(t.elements);for(var s=0;s<n.length;s++){var o=n[s];o in r.elements&&i.push(o)}return new R.Set(i)},R.Set.prototype.union=function(e){return new R.Set(Object.keys(this.elements).concat(Object.keys(e.elements)))},R.idf=function(e,t){var r=0;for(var n in e)"_index"!=n&&(r+=Object.keys(e[n]).length);var i=(t-r+.5)/(r+.5);return Math.log(1+Math.abs(i))},R.Token=function(e,t){this.str=e||"",this.metadata=t||{}},R.Token.prototype.toString=function(){return this.str},R.Token.prototype.update=function(e){return this.str=e(this.str,this.metadata),this},R.Token.prototype.clone=function(e){return e=e||function(e){return e},new R.Token(e(this.str,this.metadata),this.metadata)}
+/*!
+ * lunr.tokenizer
+ * Copyright (C) 2018 Oliver Nightingale
+ */,R.tokenizer=function(e,t){if(null==e||null==e)return[];if(Array.isArray(e))return e.map(function(e){return new R.Token(R.utils.asString(e).toLowerCase(),R.utils.clone(t))});for(var r=e.toString().trim().toLowerCase(),n=r.length,i=[],s=0,o=0;s<=n;s++){var a=s-o;if(r.charAt(s).match(R.tokenizer.separator)||s==n){if(a>0){var u=R.utils.clone(t)||{};u.position=[o,a],u.index=i.length,i.push(new R.Token(r.slice(o,s),u))}o=s+1}}return i},R.tokenizer.separator=/[\s\-]+/
+/*!
+ * lunr.Pipeline
+ * Copyright (C) 2018 Oliver Nightingale
+ */,R.Pipeline=function(){this._stack=[]},R.Pipeline.registeredFunctions=Object.create(null),R.Pipeline.registerFunction=function(e,t){t in this.registeredFunctions&&R.utils.warn("Overwriting existing registered function: "+t),e.label=t,R.Pipeline.registeredFunctions[e.label]=e},R.Pipeline.warnIfFunctionNotRegistered=function(e){e.label&&e.label in this.registeredFunctions||R.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",e)},R.Pipeline.load=function(e){var t=new R.Pipeline;return e.forEach(function(e){var r=R.Pipeline.registeredFunctions[e];if(!r)throw new Error("Cannot load unregistered function: "+e);t.add(r)}),t},R.Pipeline.prototype.add=function(){Array.prototype.slice.call(arguments).forEach(function(e){R.Pipeline.warnIfFunctionNotRegistered(e),this._stack.push(e)},this)},R.Pipeline.prototype.after=function(e,t){R.Pipeline.warnIfFunctionNotRegistered(t);var r=this._stack.indexOf(e);if(-1==r)throw new Error("Cannot find existingFn");r+=1,this._stack.splice(r,0,t)},R.Pipeline.prototype.before=function(e,t){R.Pipeline.warnIfFunctionNotRegistered(t);var r=this._stack.indexOf(e);if(-1==r)throw new Error("Cannot find existingFn");this._stack.splice(r,0,t)},R.Pipeline.prototype.remove=function(e){var t=this._stack.indexOf(e);-1!=t&&this._stack.splice(t,1)},R.Pipeline.prototype.run=function(e){for(var t=this._stack.length,r=0;r<t;r++){for(var n=this._stack[r],i=[],s=0;s<e.length;s++){var o=n(e[s],s,e);if(void 0!==o&&""!==o)if(o instanceof Array)for(var a=0;a<o.length;a++)i.push(o[a]);else i.push(o)}e=i}return e},R.Pipeline.prototype.runString=function(e,t){var r=new R.Token(e,t);return this.run([r]).map(function(e){return e.toString()})},R.Pipeline.prototype.reset=function(){this._stack=[]},R.Pipeline.prototype.toJSON=function(){return this._stack.map(function(e){return R.Pipeline.warnIfFunctionNotRegistered(e),e.label})}
+/*!
+ * lunr.Vector
+ * Copyright (C) 2018 Oliver Nightingale
+ */,R.Vector=function(e){this._magnitude=0,this.elements=e||[]},R.Vector.prototype.positionForIndex=function(e){if(0==this.elements.length)return 0;for(var t=0,r=this.elements.length/2,n=r-t,i=Math.floor(n/2),s=this.elements[2*i];n>1&&(s<e&&(t=i),s>e&&(r=i),s!=e);)n=r-t,i=t+Math.floor(n/2),s=this.elements[2*i];return s==e?2*i:s>e?2*i:s<e?2*(i+1):void 0},R.Vector.prototype.insert=function(e,t){this.upsert(e,t,function(){throw"duplicate index"})},R.Vector.prototype.upsert=function(e,t,r){this._magnitude=0;var n=this.positionForIndex(e);this.elements[n]==e?this.elements[n+1]=r(this.elements[n+1],t):this.elements.splice(n,0,e,t)},R.Vector.prototype.magnitude=function(){if(this._magnitude)return this._magnitude;for(var e=0,t=this.elements.length,r=1;r<t;r+=2){var n=this.elements[r];e+=n*n}return this._magnitude=Math.sqrt(e)},R.Vector.prototype.dot=function(e){for(var t=0,r=this.elements,n=e.elements,i=r.length,s=n.length,o=0,a=0,u=0,l=0;u<i&&l<s;)(o=r[u])<(a=n[l])?u+=2:o>a?l+=2:o==a&&(t+=r[u+1]*n[l+1],u+=2,l+=2);return t},R.Vector.prototype.similarity=function(e){return this.dot(e)/this.magnitude()||0},R.Vector.prototype.toArray=function(){for(var e=new Array(this.elements.length/2),t=1,r=0;t<this.elements.length;t+=2,r++)e[r]=this.elements[t];return e},R.Vector.prototype.toJSON=function(){return this.elements}
+/*!
+ * lunr.stemmer
+ * Copyright (C) 2018 Oliver Nightingale
+ * Includes code from - http://tartarus.org/~martin/PorterStemmer/js.txt
+ */,R.stemmer=(o={ational:"ate",tional:"tion",enci:"ence",anci:"ance",izer:"ize",bli:"ble",alli:"al",entli:"ent",eli:"e",ousli:"ous",ization:"ize",ation:"ate",ator:"ate",alism:"al",iveness:"ive",fulness:"ful",ousness:"ous",aliti:"al",iviti:"ive",biliti:"ble",logi:"log"},a={icate:"ic",ative:"",alize:"al",iciti:"ic",ical:"ic",ful:"",ness:""},u="[aeiouy]",l="[^aeiou][^aeiouy]*",c=new RegExp("^([^aeiou][^aeiouy]*)?[aeiouy][aeiou]*[^aeiou][^aeiouy]*"),d=new RegExp("^([^aeiou][^aeiouy]*)?[aeiouy][aeiou]*[^aeiou][^aeiouy]*[aeiouy][aeiou]*[^aeiou][^aeiouy]*"),h=new RegExp("^([^aeiou][^aeiouy]*)?[aeiouy][aeiou]*[^aeiou][^aeiouy]*([aeiouy][aeiou]*)?$"),f=new RegExp("^([^aeiou][^aeiouy]*)?[aeiouy]"),p=/^(.+?)(ss|i)es$/,y=/^(.+?)([^s])s$/,m=/^(.+?)eed$/,g=/^(.+?)(ed|ing)$/,x=/.$/,v=/(at|bl|iz)$/,w=new RegExp("([^aeiouylsz])\\1$"),Q=new RegExp("^"+l+u+"[^aeiouwxy]$"),k=/^(.+?[^aeiou])y$/,S=/^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/,b=/^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/,E=/^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/,L=/^(.+?)(s|t)(ion)$/,T=/^(.+?)e$/,P=/ll$/,O=new RegExp("^"+l+u+"[^aeiouwxy]$"),I=function(e){var t,r,n,i,s,u,l;if(e.length<3)return e;if("y"==(n=e.substr(0,1))&&(e=n.toUpperCase()+e.substr(1)),s=y,(i=p).test(e)?e=e.replace(i,"$1$2"):s.test(e)&&(e=e.replace(s,"$1$2")),s=g,(i=m).test(e)){var I=i.exec(e);(i=c).test(I[1])&&(i=x,e=e.replace(i,""))}else if(s.test(e)){t=(I=s.exec(e))[1],(s=f).test(t)&&(u=w,l=Q,(s=v).test(e=t)?e+="e":u.test(e)?(i=x,e=e.replace(i,"")):l.test(e)&&(e+="e"))}if((i=k).test(e)&&(e=(t=(I=i.exec(e))[1])+"i"),(i=S).test(e)&&(t=(I=i.exec(e))[1],r=I[2],(i=c).test(t)&&(e=t+o[r])),(i=b).test(e)&&(t=(I=i.exec(e))[1],r=I[2],(i=c).test(t)&&(e=t+a[r])),s=L,(i=E).test(e))t=(I=i.exec(e))[1],(i=d).test(t)&&(e=t);else if(s.test(e)){t=(I=s.exec(e))[1]+I[2],(s=d).test(t)&&(e=t)}return(i=T).test(e)&&(t=(I=i.exec(e))[1],s=h,u=O,((i=d).test(t)||s.test(t)&&!u.test(t))&&(e=t)),s=d,(i=P).test(e)&&s.test(e)&&(i=x,e=e.replace(i,"")),"y"==n&&(e=n.toLowerCase()+e.substr(1)),e},function(e){return e.update(I)}),R.Pipeline.registerFunction(R.stemmer,"stemmer")
+/*!
+ * lunr.stopWordFilter
+ * Copyright (C) 2018 Oliver Nightingale
+ */,R.generateStopWordFilter=function(e){var t=e.reduce(function(e,t){return e[t]=t,e},{});return function(e){if(e&&t[e.toString()]!==e.toString())return e}},R.stopWordFilter=R.generateStopWordFilter(["a","able","about","across","after","all","almost","also","am","among","an","and","any","are","as","at","be","because","been","but","by","can","cannot","could","dear","did","do","does","either","else","ever","every","for","from","get","got","had","has","have","he","her","hers","him","his","how","however","i","if","in","into","is","it","its","just","least","let","like","likely","may","me","might","most","must","my","neither","no","nor","not","of","off","often","on","only","or","other","our","own","rather","said","say","says","she","should","since","so","some","than","that","the","their","them","then","there","these","they","this","tis","to","too","twas","us","wants","was","we","were","what","when","where","which","while","who","whom","why","will","with","would","yet","you","your"]),R.Pipeline.registerFunction(R.stopWordFilter,"stopWordFilter")
+/*!
+ * lunr.trimmer
+ * Copyright (C) 2018 Oliver Nightingale
+ */,R.trimmer=function(e){return e.update(function(e){return e.replace(/^\W+/,"").replace(/\W+$/,"")})},R.Pipeline.registerFunction(R.trimmer,"trimmer")
+/*!
+ * lunr.TokenSet
+ * Copyright (C) 2018 Oliver Nightingale
+ */,R.TokenSet=function(){this.final=!1,this.edges={},this.id=R.TokenSet._nextId,R.TokenSet._nextId+=1},R.TokenSet._nextId=1,R.TokenSet.fromArray=function(e){for(var t=new R.TokenSet.Builder,r=0,n=e.length;r<n;r++)t.insert(e[r]);return t.finish(),t.root},R.TokenSet.fromClause=function(e){return"editDistance"in e?R.TokenSet.fromFuzzyString(e.term,e.editDistance):R.TokenSet.fromString(e.term)},R.TokenSet.fromFuzzyString=function(e,t){for(var r=new R.TokenSet,n=[{node:r,editsRemaining:t,str:e}];n.length;){var i,s,o,a=n.pop();if(a.str.length>0)(s=a.str.charAt(0))in a.node.edges?i=a.node.edges[s]:(i=new R.TokenSet,a.node.edges[s]=i),1==a.str.length?i.final=!0:n.push({node:i,editsRemaining:a.editsRemaining,str:a.str.slice(1)});if(a.editsRemaining>0&&a.str.length>1)(s=a.str.charAt(1))in a.node.edges?o=a.node.edges[s]:(o=new R.TokenSet,a.node.edges[s]=o),a.str.length<=2?o.final=!0:n.push({node:o,editsRemaining:a.editsRemaining-1,str:a.str.slice(2)});if(a.editsRemaining>0&&1==a.str.length&&(a.node.final=!0),a.editsRemaining>0&&a.str.length>=1){if("*"in a.node.edges)var u=a.node.edges["*"];else{u=new R.TokenSet;a.node.edges["*"]=u}1==a.str.length?u.final=!0:n.push({node:u,editsRemaining:a.editsRemaining-1,str:a.str.slice(1)})}if(a.editsRemaining>0){if("*"in a.node.edges)var l=a.node.edges["*"];else{l=new R.TokenSet;a.node.edges["*"]=l}0==a.str.length?l.final=!0:n.push({node:l,editsRemaining:a.editsRemaining-1,str:a.str})}if(a.editsRemaining>0&&a.str.length>1){var c,d=a.str.charAt(0),h=a.str.charAt(1);h in a.node.edges?c=a.node.edges[h]:(c=new R.TokenSet,a.node.edges[h]=c),1==a.str.length?c.final=!0:n.push({node:c,editsRemaining:a.editsRemaining-1,str:d+a.str.slice(2)})}}return r},R.TokenSet.fromString=function(e){for(var t=new R.TokenSet,r=t,n=!1,i=0,s=e.length;i<s;i++){var o=e[i],a=i==s-1;if("*"==o)n=!0,t.edges[o]=t,t.final=a;else{var u=new R.TokenSet;u.final=a,t.edges[o]=u,t=u,n&&(t.edges["*"]=r)}}return r},R.TokenSet.prototype.toArray=function(){for(var e=[],t=[{prefix:"",node:this}];t.length;){var r=t.pop(),n=Object.keys(r.node.edges),i=n.length;r.node.final&&e.push(r.prefix);for(var s=0;s<i;s++){var o=n[s];t.push({prefix:r.prefix.concat(o),node:r.node.edges[o]})}}return e},R.TokenSet.prototype.toString=function(){if(this._str)return this._str;for(var e=this.final?"1":"0",t=Object.keys(this.edges).sort(),r=t.length,n=0;n<r;n++){var i=t[n];e=e+i+this.edges[i].id}return e},R.TokenSet.prototype.intersect=function(e){for(var t=new R.TokenSet,r=void 0,n=[{qNode:e,output:t,node:this}];n.length;){r=n.pop();for(var i=Object.keys(r.qNode.edges),s=i.length,o=Object.keys(r.node.edges),a=o.length,u=0;u<s;u++)for(var l=i[u],c=0;c<a;c++){var d=o[c];if(d==l||"*"==l){var h=r.node.edges[d],f=r.qNode.edges[l],p=h.final&&f.final,y=void 0;d in r.output.edges?(y=r.output.edges[d]).final=y.final||p:((y=new R.TokenSet).final=p,r.output.edges[d]=y),n.push({qNode:f,output:y,node:h})}}}return t},R.TokenSet.Builder=function(){this.previousWord="",this.root=new R.TokenSet,this.uncheckedNodes=[],this.minimizedNodes={}},R.TokenSet.Builder.prototype.insert=function(e){var t,r=0;if(e<this.previousWord)throw new Error("Out of order word insertion");for(var n=0;n<e.length&&n<this.previousWord.length&&e[n]==this.previousWord[n];n++)r++;this.minimize(r),t=0==this.uncheckedNodes.length?this.root:this.uncheckedNodes[this.uncheckedNodes.length-1].child;for(n=r;n<e.length;n++){var i=new R.TokenSet,s=e[n];t.edges[s]=i,this.uncheckedNodes.push({parent:t,char:s,child:i}),t=i}t.final=!0,this.previousWord=e},R.TokenSet.Builder.prototype.finish=function(){this.minimize(0)},R.TokenSet.Builder.prototype.minimize=function(e){for(var t=this.uncheckedNodes.length-1;t>=e;t--){var r=this.uncheckedNodes[t],n=r.child.toString();n in this.minimizedNodes?r.parent.edges[r.char]=this.minimizedNodes[n]:(r.child._str=n,this.minimizedNodes[n]=r.child),this.uncheckedNodes.pop()}}
+/*!
+ * lunr.Index
+ * Copyright (C) 2018 Oliver Nightingale
+ */,R.Index=function(e){this.invertedIndex=e.invertedIndex,this.fieldVectors=e.fieldVectors,this.tokenSet=e.tokenSet,this.fields=e.fields,this.pipeline=e.pipeline},R.Index.prototype.search=function(e){return this.query(function(t){new R.QueryParser(e,t).parse()})},R.Index.prototype.query=function(e){for(var t=new R.Query(this.fields),r=Object.create(null),n=Object.create(null),i=Object.create(null),s=Object.create(null),o=Object.create(null),a=0;a<this.fields.length;a++)n[this.fields[a]]=new R.Vector;e.call(t,t);for(a=0;a<t.clauses.length;a++){var u=t.clauses[a],l=null,c=R.Set.complete;l=u.usePipeline?this.pipeline.runString(u.term,{fields:u.fields}):[u.term];for(var d=0;d<l.length;d++){var h=l[d];u.term=h;var f=R.TokenSet.fromClause(u),p=this.tokenSet.intersect(f).toArray();if(0===p.length&&u.presence===R.Query.presence.REQUIRED){for(var y=0;y<u.fields.length;y++){s[F=u.fields[y]]=R.Set.empty}break}for(var m=0;m<p.length;m++){var g=p[m],x=this.invertedIndex[g],v=x._index;for(y=0;y<u.fields.length;y++){var w=x[F=u.fields[y]],Q=Object.keys(w),k=g+"/"+F,S=new R.Set(Q);if(u.presence==R.Query.presence.REQUIRED&&(c=c.union(S),void 0===s[F]&&(s[F]=R.Set.complete)),u.presence!=R.Query.presence.PROHIBITED){if(n[F].upsert(v,u.boost,function(e,t){return e+t}),!i[k]){for(var b=0;b<Q.length;b++){var E,L=Q[b],T=new R.FieldRef(L,F),P=w[L];void 0===(E=r[T])?r[T]=new R.MatchData(g,F,P):E.add(g,F,P)}i[k]=!0}}else void 0===o[F]&&(o[F]=R.Set.empty),o[F]=o[F].union(S)}}}if(u.presence===R.Query.presence.REQUIRED)for(y=0;y<u.fields.length;y++){s[F=u.fields[y]]=s[F].intersect(c)}}var O=R.Set.complete,I=R.Set.empty;for(a=0;a<this.fields.length;a++){var F;s[F=this.fields[a]]&&(O=O.intersect(s[F])),o[F]&&(I=I.union(o[F]))}var j=Object.keys(r),_=[],N=Object.create(null);if(t.isNegated()){j=Object.keys(this.fieldVectors);for(a=0;a<j.length;a++){T=j[a];var C=R.FieldRef.fromString(T);r[T]=new R.MatchData}}for(a=0;a<j.length;a++){var D=(C=R.FieldRef.fromString(j[a])).docRef;if(O.contains(D)&&!I.contains(D)){var A,B=this.fieldVectors[C],M=n[C.fieldName].similarity(B);if(void 0!==(A=N[D]))A.score+=M,A.matchData.combine(r[C]);else{var V={ref:D,score:M,matchData:r[C]};N[D]=V,_.push(V)}}}return _.sort(function(e,t){return t.score-e.score})},R.Index.prototype.toJSON=function(){var e=Object.keys(this.invertedIndex).sort().map(function(e){return[e,this.invertedIndex[e]]},this),t=Object.keys(this.fieldVectors).map(function(e){return[e,this.fieldVectors[e].toJSON()]},this);return{version:R.version,fields:this.fields,fieldVectors:t,invertedIndex:e,pipeline:this.pipeline.toJSON()}},R.Index.load=function(e){var t={},r={},n=e.fieldVectors,i={},s=e.invertedIndex,o=new R.TokenSet.Builder,a=R.Pipeline.load(e.pipeline);e.version!=R.version&&R.utils.warn("Version mismatch when loading serialised index. Current version of lunr '"+R.version+"' does not match serialized index '"+e.version+"'");for(var u=0;u<n.length;u++){var l=(d=n[u])[0],c=d[1];r[l]=new R.Vector(c)}for(u=0;u<s.length;u++){var d,h=(d=s[u])[0],f=d[1];o.insert(h),i[h]=f}return o.finish(),t.fields=e.fields,t.fieldVectors=r,t.invertedIndex=i,t.tokenSet=o.root,t.pipeline=a,new R.Index(t)}
+/*!
+ * lunr.Builder
+ * Copyright (C) 2018 Oliver Nightingale
+ */,R.Builder=function(){this._ref="id",this._fields=Object.create(null),this._documents=Object.create(null),this.invertedIndex=Object.create(null),this.fieldTermFrequencies={},this.fieldLengths={},this.tokenizer=R.tokenizer,this.pipeline=new R.Pipeline,this.searchPipeline=new R.Pipeline,this.documentCount=0,this._b=.75,this._k1=1.2,this.termIndex=0,this.metadataWhitelist=[]},R.Builder.prototype.ref=function(e){this._ref=e},R.Builder.prototype.field=function(e,t){if(/\//.test(e))throw new RangeError("Field '"+e+"' contains illegal character '/'");this._fields[e]=t||{}},R.Builder.prototype.b=function(e){this._b=e<0?0:e>1?1:e},R.Builder.prototype.k1=function(e){this._k1=e},R.Builder.prototype.add=function(e,t){var r=e[this._ref],n=Object.keys(this._fields);this._documents[r]=t||{},this.documentCount+=1;for(var i=0;i<n.length;i++){var s=n[i],o=this._fields[s].extractor,a=o?o(e):e[s],u=this.tokenizer(a,{fields:[s]}),l=this.pipeline.run(u),c=new R.FieldRef(r,s),d=Object.create(null);this.fieldTermFrequencies[c]=d,this.fieldLengths[c]=0,this.fieldLengths[c]+=l.length;for(var h=0;h<l.length;h++){var f=l[h];if(null==d[f]&&(d[f]=0),d[f]+=1,null==this.invertedIndex[f]){var p=Object.create(null);p._index=this.termIndex,this.termIndex+=1;for(var y=0;y<n.length;y++)p[n[y]]=Object.create(null);this.invertedIndex[f]=p}null==this.invertedIndex[f][s][r]&&(this.invertedIndex[f][s][r]=Object.create(null));for(var m=0;m<this.metadataWhitelist.length;m++){var g=this.metadataWhitelist[m],x=f.metadata[g];null==this.invertedIndex[f][s][r][g]&&(this.invertedIndex[f][s][r][g]=[]),this.invertedIndex[f][s][r][g].push(x)}}}},R.Builder.prototype.calculateAverageFieldLengths=function(){for(var e=Object.keys(this.fieldLengths),t=e.length,r={},n={},i=0;i<t;i++){var s=R.FieldRef.fromString(e[i]),o=s.fieldName;n[o]||(n[o]=0),n[o]+=1,r[o]||(r[o]=0),r[o]+=this.fieldLengths[s]}var a=Object.keys(this._fields);for(i=0;i<a.length;i++){var u=a[i];r[u]=r[u]/n[u]}this.averageFieldLength=r},R.Builder.prototype.createFieldVectors=function(){for(var e={},t=Object.keys(this.fieldTermFrequencies),r=t.length,n=Object.create(null),i=0;i<r;i++){for(var s=R.FieldRef.fromString(t[i]),o=s.fieldName,a=this.fieldLengths[s],u=new R.Vector,l=this.fieldTermFrequencies[s],c=Object.keys(l),d=c.length,h=this._fields[o].boost||1,f=this._documents[s.docRef].boost||1,p=0;p<d;p++){var y,m,g,x=c[p],v=l[x],w=this.invertedIndex[x]._index;void 0===n[x]?(y=R.idf(this.invertedIndex[x],this.documentCount),n[x]=y):y=n[x],m=y*((this._k1+1)*v)/(this._k1*(1-this._b+this._b*(a/this.averageFieldLength[o]))+v),m*=h,m*=f,g=Math.round(1e3*m)/1e3,u.insert(w,g)}e[s]=u}this.fieldVectors=e},R.Builder.prototype.createTokenSet=function(){this.tokenSet=R.TokenSet.fromArray(Object.keys(this.invertedIndex).sort())},R.Builder.prototype.build=function(){return this.calculateAverageFieldLengths(),this.createFieldVectors(),this.createTokenSet(),new R.Index({invertedIndex:this.invertedIndex,fieldVectors:this.fieldVectors,tokenSet:this.tokenSet,fields:Object.keys(this._fields),pipeline:this.searchPipeline})},R.Builder.prototype.use=function(e){var t=Array.prototype.slice.call(arguments,1);t.unshift(this),e.apply(this,t)},R.MatchData=function(e,t,r){for(var n=Object.create(null),i=Object.keys(r||{}),s=0;s<i.length;s++){var o=i[s];n[o]=r[o].slice()}this.metadata=Object.create(null),void 0!==e&&(this.metadata[e]=Object.create(null),this.metadata[e][t]=n)},R.MatchData.prototype.combine=function(e){for(var t=Object.keys(e.metadata),r=0;r<t.length;r++){var n=t[r],i=Object.keys(e.metadata[n]);null==this.metadata[n]&&(this.metadata[n]=Object.create(null));for(var s=0;s<i.length;s++){var o=i[s],a=Object.keys(e.metadata[n][o]);null==this.metadata[n][o]&&(this.metadata[n][o]=Object.create(null));for(var u=0;u<a.length;u++){var l=a[u];null==this.metadata[n][o][l]?this.metadata[n][o][l]=e.metadata[n][o][l]:this.metadata[n][o][l]=this.metadata[n][o][l].concat(e.metadata[n][o][l])}}}},R.MatchData.prototype.add=function(e,t,r){if(!(e in this.metadata))return this.metadata[e]=Object.create(null),void(this.metadata[e][t]=r);if(t in this.metadata[e])for(var n=Object.keys(r),i=0;i<n.length;i++){var s=n[i];s in this.metadata[e][t]?this.metadata[e][t][s]=this.metadata[e][t][s].concat(r[s]):this.metadata[e][t][s]=r[s]}else this.metadata[e][t]=r},R.Query=function(e){this.clauses=[],this.allFields=e},R.Query.wildcard=new String("*"),R.Query.wildcard.NONE=0,R.Query.wildcard.LEADING=1,R.Query.wildcard.TRAILING=2,R.Query.presence={OPTIONAL:1,REQUIRED:2,PROHIBITED:3},R.Query.prototype.clause=function(e){return"fields"in e||(e.fields=this.allFields),"boost"in e||(e.boost=1),"usePipeline"in e||(e.usePipeline=!0),"wildcard"in e||(e.wildcard=R.Query.wildcard.NONE),e.wildcard&R.Query.wildcard.LEADING&&e.term.charAt(0)!=R.Query.wildcard&&(e.term="*"+e.term),e.wildcard&R.Query.wildcard.TRAILING&&e.term.slice(-1)!=R.Query.wildcard&&(e.term=e.term+"*"),"presence"in e||(e.presence=R.Query.presence.OPTIONAL),this.clauses.push(e),this},R.Query.prototype.isNegated=function(){for(var e=0;e<this.clauses.length;e++)if(this.clauses[e].presence!=R.Query.presence.PROHIBITED)return!1;return!0},R.Query.prototype.term=function(e,t){if(Array.isArray(e))return e.forEach(function(e){this.term(e,R.utils.clone(t))},this),this;var r=t||{};return r.term=e.toString(),this.clause(r),this},R.QueryParseError=function(e,t,r){this.name="QueryParseError",this.message=e,this.start=t,this.end=r},R.QueryParseError.prototype=new Error,R.QueryLexer=function(e){this.lexemes=[],this.str=e,this.length=e.length,this.pos=0,this.start=0,this.escapeCharPositions=[]},R.QueryLexer.prototype.run=function(){for(var e=R.QueryLexer.lexText;e;)e=e(this)},R.QueryLexer.prototype.sliceString=function(){for(var e=[],t=this.start,r=this.pos,n=0;n<this.escapeCharPositions.length;n++)r=this.escapeCharPositions[n],e.push(this.str.slice(t,r)),t=r+1;return e.push(this.str.slice(t,this.pos)),this.escapeCharPositions.length=0,e.join("")},R.QueryLexer.prototype.emit=function(e){this.lexemes.push({type:e,str:this.sliceString(),start:this.start,end:this.pos}),this.start=this.pos},R.QueryLexer.prototype.escapeCharacter=function(){this.escapeCharPositions.push(this.pos-1),this.pos+=1},R.QueryLexer.prototype.next=function(){if(this.pos>=this.length)return R.QueryLexer.EOS;var e=this.str.charAt(this.pos);return this.pos+=1,e},R.QueryLexer.prototype.width=function(){return this.pos-this.start},R.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},R.QueryLexer.prototype.backup=function(){this.pos-=1},R.QueryLexer.prototype.acceptDigitRun=function(){var e,t;do{t=(e=this.next()).charCodeAt(0)}while(t>47&&t<58);e!=R.QueryLexer.EOS&&this.backup()},R.QueryLexer.prototype.more=function(){return this.pos<this.length},R.QueryLexer.EOS="EOS",R.QueryLexer.FIELD="FIELD",R.QueryLexer.TERM="TERM",R.QueryLexer.EDIT_DISTANCE="EDIT_DISTANCE",R.QueryLexer.BOOST="BOOST",R.QueryLexer.PRESENCE="PRESENCE",R.QueryLexer.lexField=function(e){return e.backup(),e.emit(R.QueryLexer.FIELD),e.ignore(),R.QueryLexer.lexText},R.QueryLexer.lexTerm=function(e){if(e.width()>1&&(e.backup(),e.emit(R.QueryLexer.TERM)),e.ignore(),e.more())return R.QueryLexer.lexText},R.QueryLexer.lexEditDistance=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(R.QueryLexer.EDIT_DISTANCE),R.QueryLexer.lexText},R.QueryLexer.lexBoost=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(R.QueryLexer.BOOST),R.QueryLexer.lexText},R.QueryLexer.lexEOS=function(e){e.width()>0&&e.emit(R.QueryLexer.TERM)},R.QueryLexer.termSeparator=R.tokenizer.separator,R.QueryLexer.lexText=function(e){for(;;){var t=e.next();if(t==R.QueryLexer.EOS)return R.QueryLexer.lexEOS;if(92!=t.charCodeAt(0)){if(":"==t)return R.QueryLexer.lexField;if("~"==t)return e.backup(),e.width()>0&&e.emit(R.QueryLexer.TERM),R.QueryLexer.lexEditDistance;if("^"==t)return e.backup(),e.width()>0&&e.emit(R.QueryLexer.TERM),R.QueryLexer.lexBoost;if("+"==t&&1===e.width())return e.emit(R.QueryLexer.PRESENCE),R.QueryLexer.lexText;if("-"==t&&1===e.width())return e.emit(R.QueryLexer.PRESENCE),R.QueryLexer.lexText;if(t.match(R.QueryLexer.termSeparator))return R.QueryLexer.lexTerm}else e.escapeCharacter()}},R.QueryParser=function(e,t){this.lexer=new R.QueryLexer(e),this.query=t,this.currentClause={},this.lexemeIdx=0},R.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var e=R.QueryParser.parseClause;e;)e=e(this);return this.query},R.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},R.QueryParser.prototype.consumeLexeme=function(){var e=this.peekLexeme();return this.lexemeIdx+=1,e},R.QueryParser.prototype.nextClause=function(){var e=this.currentClause;this.query.clause(e),this.currentClause={}},R.QueryParser.parseClause=function(e){var t=e.peekLexeme();if(null!=t)switch(t.type){case R.QueryLexer.PRESENCE:return R.QueryParser.parsePresence;case R.QueryLexer.FIELD:return R.QueryParser.parseField;case R.QueryLexer.TERM:return R.QueryParser.parseTerm;default:var r="expected either a field or a term, found "+t.type;throw t.str.length>=1&&(r+=" with value '"+t.str+"'"),new R.QueryParseError(r,t.start,t.end)}},R.QueryParser.parsePresence=function(e){var t=e.consumeLexeme();if(null!=t){switch(t.str){case"-":e.currentClause.presence=R.Query.presence.PROHIBITED;break;case"+":e.currentClause.presence=R.Query.presence.REQUIRED;break;default:var r="unrecognised presence operator'"+t.str+"'";throw new R.QueryParseError(r,t.start,t.end)}var n=e.peekLexeme();if(null==n){r="expecting term or field, found nothing";throw new R.QueryParseError(r,t.start,t.end)}switch(n.type){case R.QueryLexer.FIELD:return R.QueryParser.parseField;case R.QueryLexer.TERM:return R.QueryParser.parseTerm;default:r="expecting term or field, found '"+n.type+"'";throw new R.QueryParseError(r,n.start,n.end)}}},R.QueryParser.parseField=function(e){var t=e.consumeLexeme();if(null!=t){if(-1==e.query.allFields.indexOf(t.str)){var r=e.query.allFields.map(function(e){return"'"+e+"'"}).join(", "),n="unrecognised field '"+t.str+"', possible fields: "+r;throw new R.QueryParseError(n,t.start,t.end)}e.currentClause.fields=[t.str];var i=e.peekLexeme();if(null==i){n="expecting term, found nothing";throw new R.QueryParseError(n,t.start,t.end)}switch(i.type){case R.QueryLexer.TERM:return R.QueryParser.parseTerm;default:n="expecting term, found '"+i.type+"'";throw new R.QueryParseError(n,i.start,i.end)}}},R.QueryParser.parseTerm=function(e){var t=e.consumeLexeme();if(null!=t){e.currentClause.term=t.str.toLowerCase(),-1!=t.str.indexOf("*")&&(e.currentClause.usePipeline=!1);var r=e.peekLexeme();if(null!=r)switch(r.type){case R.QueryLexer.TERM:return e.nextClause(),R.QueryParser.parseTerm;case R.QueryLexer.FIELD:return e.nextClause(),R.QueryParser.parseField;case R.QueryLexer.EDIT_DISTANCE:return R.QueryParser.parseEditDistance;case R.QueryLexer.BOOST:return R.QueryParser.parseBoost;case R.QueryLexer.PRESENCE:return e.nextClause(),R.QueryParser.parsePresence;default:var n="Unexpected lexeme type '"+r.type+"'";throw new R.QueryParseError(n,r.start,r.end)}else e.nextClause()}},R.QueryParser.parseEditDistance=function(e){var t=e.consumeLexeme();if(null!=t){var r=parseInt(t.str,10);if(isNaN(r)){var n="edit distance must be numeric";throw new R.QueryParseError(n,t.start,t.end)}e.currentClause.editDistance=r;var i=e.peekLexeme();if(null!=i)switch(i.type){case R.QueryLexer.TERM:return e.nextClause(),R.QueryParser.parseTerm;case R.QueryLexer.FIELD:return e.nextClause(),R.QueryParser.parseField;case R.QueryLexer.EDIT_DISTANCE:return R.QueryParser.parseEditDistance;case R.QueryLexer.BOOST:return R.QueryParser.parseBoost;default:n="Unexpected lexeme type '"+i.type+"'";throw new R.QueryParseError(n,i.start,i.end)}else e.nextClause()}},R.QueryParser.parseBoost=function(e){var t=e.consumeLexeme();if(null!=t){var r=parseInt(t.str,10);if(isNaN(r)){var n="boost must be numeric";throw new R.QueryParseError(n,t.start,t.end)}e.currentClause.boost=r;var i=e.peekLexeme();if(null!=i)switch(i.type){case R.QueryLexer.TERM:return e.nextClause(),R.QueryParser.parseTerm;case R.QueryLexer.FIELD:return e.nextClause(),R.QueryParser.parseField;case R.QueryLexer.EDIT_DISTANCE:return R.QueryParser.parseEditDistance;case R.QueryLexer.BOOST:return R.QueryParser.parseBoost;default:n="Unexpected lexeme type '"+i.type+"'";throw new R.QueryParseError(n,i.start,i.end)}else e.nextClause()}},void 0===(i="function"==typeof(n=function(){return R})?n.call(t,r,t,e):n)||(e.exports=i)}()},39:function(e,t,r){"use strict";r.r(t);var n=r(15),i=r.n(n),s=r(0),o=function(e,t,r,n){Object(s.d)(n);var i=e?t.search(e).map(function(e){return{href:e.ref,title:r[e.ref]}}):[];Object(s.a)(i,n)},a=i.a.Index.load(window.lunr_idx),u=window.page_titles,l=document.getElementById("search-term"),c=document.getElementById("search-results"),d=Object(s.c)("q");l.value=d,l.focus(),o(d,a,u,c),l.addEventListener("input",function(e){o(e.target.value,a,u,c)})}});
\ No newline at end of file
diff --git a/assets/js/main.c3bcf2df.js b/assets/js/main.c3bcf2df.js
new file mode 100644
index 0000000..dce495e
--- /dev/null
+++ b/assets/js/main.c3bcf2df.js
@@ -0,0 +1 @@
+!function(e){function t(t){for(var n,o,i=t[0],u=t[1],a=0,c=[];a<i.length;a++)o=i[a],r[o]&&c.push(r[o][0]),r[o]=0;for(n in u)Object.prototype.hasOwnProperty.call(u,n)&&(e[n]=u[n]);for(l&&l(t);c.length;)c.shift()()}var n={},r={5:0};function o(t){if(n[t])return n[t].exports;var r=n[t]={i:t,l:!1,exports:{}};return e[t].call(r.exports,r,r.exports,o),r.l=!0,r.exports}o.e=function(e){var t=[],n=r[e];if(0!==n)if(n)t.push(n[2]);else{var i=new Promise(function(t,o){n=r[e]=[t,o]});t.push(n[2]=i);var u,a=document.createElement("script");a.charset="utf-8",a.timeout=120,o.nc&&a.setAttribute("nonce",o.nc),a.src=function(e){return o.p+""+({1:"comments",2:"details-polyfill",7:"sidebar",8:"twemoji"}[e]||e)+"."+{1:"57223579",2:"45606d79",7:"9ea42a6e",8:"79bd873e"}[e]+".js"}(e);var l=new Error;u=function(t){a.onerror=a.onload=null,clearTimeout(c);var n=r[e];if(0!==n){if(n){var o=t&&("load"===t.type?"missing":t.type),i=t&&t.target&&t.target.src;l.message="Loading chunk "+e+" failed.\n("+o+": "+i+")",l.type=o,l.request=i,n[1](l)}r[e]=void 0}};var c=setTimeout(function(){u({type:"timeout",target:a})},12e4);a.onerror=a.onload=u,document.head.appendChild(a)}return Promise.all(t)},o.m=e,o.c=n,o.d=function(e,t,n){o.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},o.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},o.t=function(e,t){if(1&t&&(e=o(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(o.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)o.d(n,r,function(t){return e[t]}.bind(null,r));return n},o.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return o.d(t,"a",t),t},o.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},o.p="",o.oe=function(e){throw console.error(e),e};var i=window.webpackJsonp=window.webpackJsonp||[],u=i.push.bind(i);i.push=t,i=i.slice();for(var a=0;a<i.length;a++)t(i[a]);var l=u;o(o.s=41)}({12:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){function t(){document.removeEventListener("DOMContentLoaded",t,!1),window.removeEventListener("load",t,!1),e()}"complete"===document.readyState?setTimeout(e):(document.addEventListener("DOMContentLoaded",t,!1),window.addEventListener("load",t,!1))},e.exports=t.default},16:function(e,t,n){n.p=window.__assets_js_src},17:function(e,t,n){},41:function(e,t,n){"use strict";n.r(t);n(16),n(17);var r=n(12);function o(e){return function(e){if(Array.isArray(e)){for(var t=0,n=new Array(e.length);t<e.length;t++)n[t]=e[t];return n}}(e)||function(e){if(Symbol.iterator in Object(e)||"[object Arguments]"===Object.prototype.toString.call(e))return Array.from(e)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance")}()}n.n(r)()(function(){var e=document.body,t=e.querySelectorAll(".taxonomy-cloud:not(.no-shuffle)");t.length&&t.forEach(function(e){(function(e){for(var t,n,r=o(e),i=e.length;i;)n=Math.floor(Math.random()*i),t=r[--i],r[i]=r[n],r[n]=t;return r})(e.querySelectorAll("li")).forEach(function(e){return e.parentElement.appendChild(e)})});var r=e.querySelectorAll("details");if(r.length&&n.e(2).then(n.bind(null,42)).then(function(e){return(0,e.detailsPolyfill)(r)}),e.classList.contains("has-emoji")){var i=e.querySelector(".entry");n.e(8).then(n.t.bind(null,43,7)).then(function(e){return e.parse(i)})}e.classList.contains("has-sidebar")&&n.e(7).then(n.bind(null,44)).then(function(e){return(0,e.initSidebar)()}),e.querySelector("#comment-form")&&n.e(1).then(n.bind(null,45)).then(function(e){return(0,e.initComments)()})})}});
\ No newline at end of file
diff --git a/assets/js/rtl.e532543e.js b/assets/js/rtl.e532543e.js
new file mode 100644
index 0000000..b9d04d7
--- /dev/null
+++ b/assets/js/rtl.e532543e.js
@@ -0,0 +1 @@
+!function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=40)}({40:function(e,t,r){}});
\ No newline at end of file
diff --git a/assets/js/sidebar.9ea42a6e.js b/assets/js/sidebar.9ea42a6e.js
new file mode 100644
index 0000000..c0f8471
--- /dev/null
+++ b/assets/js/sidebar.9ea42a6e.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[7],{44:function(t,e,i){"use strict";i.r(e),i.d(e,"initSidebar",function(){return E});var n=document.body,o=n.querySelector("#sidebar"),r=n.querySelector("#sidebar-toggler"),s=n.querySelector(".sidebar-overlay"),c=n.querySelector("#sidebar-menu"),d=r.cloneNode(!0);d.setAttribute("id","#sidebar-collapse");var u,l,a,f,b,p,w=function(t,e){t.forEach(function(t){return t.setAttribute("aria-expanded",e)})},g=function(){o.classList.remove("toggled"),w([o,r,d],!1)},y=function(){o.classList.add("toggled"),w([o,r,d],!0),o.focus()},v=0,h=!1,A=!1,L=0,m=function(){f=window.scrollY,l=n.offsetHeight,a=o.offsetHeight,b=Math.round(f+o.getBoundingClientRect().top),a>u?f>v?h?(h=!1,L=b>0?b:0,o.setAttribute("style","top: ".concat(L,"px;"))):!A&&f+u>a+b&&a<l&&(A=!0,o.setAttribute("style","position: fixed; bottom: 0;")):f<v?A?(A=!1,L=b>0?b:0,o.setAttribute("style","top: ".concat(L,"px;"))):!h&&f<b&&(h=!0,o.setAttribute("style","position: fixed;")):(h=A=!1,L=b||0,o.setAttribute("style","top: ".concat(L,"px;"))):h||(h=!0,o.setAttribute("style","position: fixed;")),v=f},x=function(){window.innerWidth,u=window.innerHeight,m()},E=function(){o.setAttribute("tabindex","-1"),o.insertBefore(d,o.children[1]),w([o,r,d],!1),r.addEventListener("click",y),d.addEventListener("click",g),s.addEventListener("click",g),window.addEventListener("scroll",m),window.addEventListener("resize",function(){clearTimeout(p),p=setTimeout(x,500)}),x(),c&&c.querySelectorAll(".item.has-children").forEach(function(t){var e=t.querySelector("button"),i=t.querySelector(".sub-menu");w([i,e],!1),e.addEventListener("click",function(){var n=t.classList.contains("toggled");t.classList[n?"remove":"add"]("toggled"),w([i,e],!n)})})}}}]);
\ No newline at end of file
diff --git a/assets/js/twemoji.79bd873e.js b/assets/js/twemoji.79bd873e.js
new file mode 100644
index 0000000..f41ac00
--- /dev/null
+++ b/assets/js/twemoji.79bd873e.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[8],{43:function(d,u,e){(function(u){var e=u.location||{},c=function(){"use strict";var d={base:"https://twemoji.maxcdn.com/2/",ext:".png",size:"72x72",className:"emoji",convert:{fromCodePoint:function(d){var u="string"==typeof d?parseInt(d,16):d;if(u<65536)return n(u);return n(55296+((u-=65536)>>10),56320+(1023&u))},toCodePoint:p},onerror:function(){this.parentNode&&this.parentNode.replaceChild(r(this.alt,!1),this)},parse:function(u,c){c&&"function"!=typeof c||(c={callback:c});return("string"==typeof u?function(d,u){return l(d,function(d){var e,c,f=d,t=b(d),n=u.callback(t,u);if(n){for(c in f="<img ".concat('class="',u.className,'" ','draggable="false" ','alt="',d,'"',' src="',n,'"'),e=u.attributes(d,t))e.hasOwnProperty(c)&&0!==c.indexOf("on")&&-1===f.indexOf(" "+c+"=")&&(f=f.concat(" ",c,'="',e[c].replace(a,i),'"'));f=f.concat("/>")}return f})}:function(d,u){var c,f,a,n,o,i,s,l,p,h,m,g,x,w=function d(u,e){var c,f,a=u.childNodes,n=a.length;for(;n--;)c=a[n],3===(f=c.nodeType)?e.push(c):1!==f||"ownerSVGElement"in c||t.test(c.nodeName.toLowerCase())||d(c,e);return e}(d,[]),C=w.length;for(;C--;){for(a=!1,n=document.createDocumentFragment(),o=w[C],i=o.nodeValue,l=0;s=e.exec(i);){if((p=s.index)!==l&&n.appendChild(r(i.slice(l,p),!0)),m=s[0],g=b(m),l=p+m.length,x=u.callback(g,u)){for(f in(h=new Image).onerror=u.onerror,h.setAttribute("draggable","false"),c=u.attributes(m,g))c.hasOwnProperty(f)&&0!==f.indexOf("on")&&!h.hasAttribute(f)&&h.setAttribute(f,c[f]);h.className=u.className,h.alt=m,h.src=x,a=!0,n.appendChild(h)}h||n.appendChild(r(m,!1)),h=null}a&&(l<i.length&&n.appendChild(r(i.slice(l),!0)),o.parentNode.replaceChild(n,o))}return d})(u,{callback:c.callback||o,attributes:"function"==typeof c.attributes?c.attributes:s,base:"string"==typeof c.base?c.base:d.base,ext:c.ext||d.ext,size:c.folder||(f=c.size||d.size,"number"==typeof f?f+"x"+f:f),className:c.className||d.className,onerror:c.onerror||d.onerror});var f},replace:l,test:function(d){e.lastIndex=0;var u=e.test(d);return e.lastIndex=0,u}},u={"&":"&amp;","<":"&lt;",">":"&gt;","'":"&#39;",'"':"&quot;"},e=/\ud83d[\udc68-\udc69](?:\ud83c[\udffb-\udfff])?\u200d(?:\u2695\ufe0f|\u2696\ufe0f|\u2708\ufe0f|\ud83c[\udf3e\udf73\udf93\udfa4\udfa8\udfeb\udfed]|\ud83d[\udcbb\udcbc\udd27\udd2c\ude80\ude92])|(?:\ud83c[\udfcb\udfcc]|\ud83d[\udd74\udd75]|\u26f9)(?:\ufe0f|\ud83c[\udffb-\udfff])\u200d[\u2640\u2642]\ufe0f|(?:\ud83c[\udfc3\udfc4\udfca]|\ud83d[\udc6e\udc71\udc73\udc77\udc81\udc82\udc86\udc87\ude45-\ude47\ude4b\ude4d\ude4e\udea3\udeb4-\udeb6]|\ud83e[\udd26\udd35\udd37-\udd39\udd3d\udd3e\uddd6-\udddd])(?:\ud83c[\udffb-\udfff])?\u200d[\u2640\u2642]\ufe0f|\ud83d\udc68\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68|\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d[\udc68\udc69]|\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\u2764\ufe0f\u200d\ud83d\udc68|\ud83d\udc68\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\u2764\ufe0f\u200d\ud83d[\udc68\udc69]|\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d[\udc66\udc67]|\ud83c\udff3\ufe0f\u200d\ud83c\udf08|\ud83c\udff4\u200d\u2620\ufe0f|\ud83d\udc41\u200d\ud83d\udde8|\ud83d\udc68\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\ud83d[\udc66\udc67]|\ud83d\udc6f\u200d\u2640\ufe0f|\ud83d\udc6f\u200d\u2642\ufe0f|\ud83e\udd3c\u200d\u2640\ufe0f|\ud83e\udd3c\u200d\u2642\ufe0f|\ud83e\uddde\u200d\u2640\ufe0f|\ud83e\uddde\u200d\u2642\ufe0f|\ud83e\udddf\u200d\u2640\ufe0f|\ud83e\udddf\u200d\u2642\ufe0f|(?:\u002a)\ufe0f?\u20e3|(?:\ud83c[\udf85\udfc2-\udfc4\udfc7\udfca-\udfcc]|\ud83d[\udc42\udc43\udc46-\udc50\udc66-\udc69\udc6e\udc70-\udc78\udc7c\udc81-\udc83\udc85-\udc87\udcaa\udd74\udd75\udd7a\udd90\udd95\udd96\ude45-\ude47\ude4b-\ude4f\udea3\udeb4-\udeb6\udec0\udecc]|\ud83e[\udd18-\udd1c\udd1e\udd1f\udd26\udd30-\udd39\udd3d\udd3e\uddd1-\udddd]|[\u261d\u26f7\u26f9\u270a-\u270d])(?:\ud83c[\udffb-\udfff]|)|\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc65\udb40\udc6e\udb40\udc67\udb40\udc7f|\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc73\udb40\udc63\udb40\udc74\udb40\udc7f|\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc77\udb40\udc6c\udb40\udc73\udb40\udc7f|\ud83c\udde6\ud83c[\udde8-\uddec\uddee\uddf1\uddf2\uddf4\uddf6-\uddfa\uddfc\uddfd\uddff]|\ud83c\udde7\ud83c[\udde6\udde7\udde9-\uddef\uddf1-\uddf4\uddf6-\uddf9\uddfb\uddfc\uddfe\uddff]|\ud83c\udde8\ud83c[\udde6\udde8\udde9\uddeb-\uddee\uddf0-\uddf5\uddf7\uddfa-\uddff]|\ud83c\udde9\ud83c[\uddea\uddec\uddef\uddf0\uddf2\uddf4\uddff]|\ud83c\uddea\ud83c[\udde6\udde8\uddea\uddec\udded\uddf7-\uddfa]|\ud83c\uddeb\ud83c[\uddee-\uddf0\uddf2\uddf4\uddf7]|\ud83c\uddec\ud83c[\udde6\udde7\udde9-\uddee\uddf1-\uddf3\uddf5-\uddfa\uddfc\uddfe]|\ud83c\udded\ud83c[\uddf0\uddf2\uddf3\uddf7\uddf9\uddfa]|\ud83c\uddee\ud83c[\udde8-\uddea\uddf1-\uddf4\uddf6-\uddf9]|\ud83c\uddef\ud83c[\uddea\uddf2\uddf4\uddf5]|\ud83c\uddf0\ud83c[\uddea\uddec-\uddee\uddf2\uddf3\uddf5\uddf7\uddfc\uddfe\uddff]|\ud83c\uddf1\ud83c[\udde6-\udde8\uddee\uddf0\uddf7-\uddfb\uddfe]|\ud83c\uddf2\ud83c[\udde6\udde8-\udded\uddf0-\uddff]|\ud83c\uddf3\ud83c[\udde6\udde8\uddea-\uddec\uddee\uddf1\uddf4\uddf5\uddf7\uddfa\uddff]|\ud83c\uddf4\ud83c\uddf2|\ud83c\uddf5\ud83c[\udde6\uddea-\udded\uddf0-\uddf3\uddf7-\uddf9\uddfc\uddfe]|\ud83c\uddf6\ud83c\udde6|\ud83c\uddf7\ud83c[\uddea\uddf4\uddf8\uddfa\uddfc]|\ud83c\uddf8\ud83c[\udde6-\uddea\uddec-\uddf4\uddf7-\uddf9\uddfb\uddfd-\uddff]|\ud83c\uddf9\ud83c[\udde6\udde8\udde9\uddeb-\udded\uddef-\uddf4\uddf7\uddf9\uddfb\uddfc\uddff]|\ud83c\uddfa\ud83c[\udde6\uddec\uddf2\uddf3\uddf8\uddfe\uddff]|\ud83c\uddfb\ud83c[\udde6\udde8\uddea\uddec\uddee\uddf3\uddfa]|\ud83c\uddfc\ud83c[\uddeb\uddf8]|\ud83c\uddfd\ud83c\uddf0|\ud83c\uddfe\ud83c[\uddea\uddf9]|\ud83c\uddff\ud83c[\udde6\uddf2\uddfc]|\u0023\u20e3|\u0030\u20e3|\u0031\u20e3|\u0032\u20e3|\u0033\u20e3|\u0034\u20e3|\u0035\u20e3|\u0036\u20e3|\u0037\u20e3|\u0038\u20e3|\u0039\u20e3|\ud800\udc00|\ud83c[\udc04\udccf\udd70\udd71\udd7e\udd7f\udd8e\udd91-\udd9a\udde6-\uddff\ude01\ude02\ude1a\ude2f\ude32-\ude3a\ude50\ude51\udf00-\udf21\udf24-\udf84\udf86-\udf93\udf96\udf97\udf99-\udf9b\udf9e-\udfc1\udfc5\udfc6\udfc8\udfc9\udfcd-\udff0\udff3-\udff5\udff7-\udfff]|\ud83d[\udc00-\udc41\udc44\udc45\udc51-\udc65\udc6a-\udc6d\udc6f\udc79-\udc7b\udc7d-\udc80\udc84\udc88-\udca9\udcab-\udcfd\udcff-\udd3d\udd49-\udd4e\udd50-\udd67\udd6f\udd70\udd73\udd76-\udd79\udd87\udd8a-\udd8d\udda4\udda5\udda8\uddb1\uddb2\uddbc\uddc2-\uddc4\uddd1-\uddd3\udddc-\uddde\udde1\udde3\udde8\uddef\uddf3\uddfa-\ude44\ude48-\ude4a\ude80-\udea2\udea4-\udeb3\udeb7-\udebf\udec1-\udec5\udecb\udecd-\uded2\udee0-\udee5\udee9\udeeb\udeec\udef0\udef3-\udef8]|\ud83e[\udd10-\udd17\udd1d\udd20-\udd25\udd27-\udd2f\udd3a\udd3c\udd40-\udd45\udd47-\udd4c\udd50-\udd6b\udd80-\udd97\uddc0\uddd0\uddde-\udde6]|[\u00a9\u00ae\u203c\u2049\u2122\u2139\u2194-\u2199\u21a9\u21aa\u231a\u231b\u2328\u23cf\u23e9-\u23f3\u23f8-\u23fa\u24c2\u25aa\u25ab\u25b6\u25c0\u25fb-\u25fe\u2600-\u2604\u260e\u2611\u2614\u2615\u2618\u2620\u2622\u2623\u2626\u262a\u262e\u262f\u2638\u263a\u2640\u2642\u2648-\u2653\u2660\u2663\u2665\u2666\u2668\u267b\u267f\u2692-\u2697\u2699\u269b\u269c\u26a0\u26a1\u26aa\u26ab\u26b0\u26b1\u26bd\u26be\u26c4\u26c5\u26c8\u26ce\u26cf\u26d1\u26d3\u26d4\u26e9\u26ea\u26f0-\u26f5\u26f8\u26fa\u26fd\u2702\u2705\u2708\u2709\u270f\u2712\u2714\u2716\u271d\u2721\u2728\u2733\u2734\u2744\u2747\u274c\u274e\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27a1\u27b0\u27bf\u2934\u2935\u2b05-\u2b07\u2b1b\u2b1c\u2b50\u2b55\u3030\u303d\u3297\u3299\ue50a]|(?:\u2639)(?:\ufe0f|(?!\ufe0e))/g,c=/\uFE0F/g,f=String.fromCharCode(8205),a=/[&<>'"]/g,t=/^(?:iframe|noframes|noscript|script|select|style|textarea)$/,n=String.fromCharCode;return d;function r(d,u){return document.createTextNode(u?d.replace(c,""):d)}function o(d,u){return"".concat(u.base,u.size,"/",d,u.ext)}function b(d){return p(d.indexOf(f)<0?d.replace(c,""):d)}function i(d){return u[d]}function s(){return null}function l(d,u){return String(d).replace(e,u)}function p(d,u){for(var e=[],c=0,f=0,a=0;a<d.length;)c=d.charCodeAt(a++),f?(e.push((65536+(f-55296<<10)+(c-56320)).toString(16)),f=0):55296<=c&&c<=56319?f=c:e.push(c.toString(16));return e.join(u||"-")}}();e.protocol||(c.base=c.base.replace(/^http:/,"")),d.exports=c}).call(this,e(7))},7:function(d,u){var e;e=function(){return this}();try{e=e||new Function("return this")()}catch(d){"object"==typeof window&&(e=window)}d.exports=e}}]);
\ No newline at end of file
diff --git a/categories/index.html b/categories/index.html
new file mode 100644
index 0000000..14ccc1a
--- /dev/null
+++ b/categories/index.html
@@ -0,0 +1,194 @@
+<!DOCTYPE html>
+<html lang='en' dir='auto'><head>
+  <meta charset='utf-8'>
+<meta name='viewport' content='width=device-width, initial-scale=1'>
+<meta name='description' content=''>
+<meta name='theme-color' content='#ffcd00'>
+
+<meta property='og:title' content='Categories • Eclipse DataEggs'>
+<meta property='og:description' content=''>
+<meta property='og:url' content='https://download.eclipse.org/dataeggs/categories/'>
+<meta property='og:site_name' content='Eclipse DataEggs'>
+<meta property='og:type' content='website'><meta name='twitter:card' content='summary'>
+
+<meta name="generator" content="Hugo 0.83.1" />
+
+  <title>Categories • Eclipse DataEggs</title>
+  <link rel='canonical' href='https://download.eclipse.org/dataeggs/categories/'>
+  
+    <link href="https://download.eclipse.org/dataeggs/categories/index.xml" rel="alternate" type="application/rss+xml" title="Eclipse DataEggs" />
+  
+  
+  <link rel='icon' href='/dataeggs/favicon.ico'>
+<link rel='stylesheet' href='/dataeggs/assets/css/main.ab98e12b.css'><link rel='stylesheet' href='/dataeggs/css/custom.css'><style>
+:root{--color-accent:#ffcd00;}
+</style>
+
+<script type="application/javascript">
+var doNotTrack = false;
+if (!doNotTrack) {
+	window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)};ga.l=+new Date;
+	ga('create', 'UA-3675452-15', 'auto');
+	
+	ga('send', 'pageview');
+}
+</script>
+<script async src='https://www.google-analytics.com/analytics.js'></script>
+
+  
+
+</head>
+<body class='taxonomy type-categories taxonomy-category has-sidebar'>
+
+  <div class='site'><div id='sidebar' class='sidebar'>
+  <a class='screen-reader-text' href='#main-menu'>Skip to Main Menu</a>
+
+  <div class='container'><section class='widget widget-about sep-after'>
+  <header>
+    
+    <div class='logo'>
+      <a href='/dataeggs/'>
+        <img src='/dataeggs/images/dataeggs-menu.png'>
+      </a>
+    </div>
+    
+    <div class='desc'>
+    Open. Safe. Easy.
+    </div>
+  </header>
+
+</section>
+<section class='widget widget-search sep-after'>
+  <header>
+    <h4 class='title widget-title'>Search</h4>
+  </header>
+
+  <form action='/dataeggs/search' id='search-form' class='search-form'>
+    <label>
+      <span class='screen-reader-text'>Search</span>
+      <input id='search-term' class='search-term' type='search' name='q' placeholder='Search&hellip;'>
+    </label></form>
+
+</section>
+<section class='widget widget-sidebar_menu sep-after'><nav id='sidebar-menu' class='menu sidebar-menu' aria-label='Sidebar Menu'>
+    <div class='container'>
+      <ul><li class='item'>
+  <a href='/dataeggs/'>Home</a></li><li class='item'>
+  <a href='/dataeggs/privacy/'>Privacy</a></li><li class='item'>
+  <a href='/dataeggs/aeri_stacktraces/'>AERI</a></li><li class='item'>
+  <a href='/dataeggs/eclipse_mls/'>MLS</a></li></ul>
+    </div>
+  </nav>
+
+</section><section class='widget widget-social_menu sep-after'><nav aria-label='Social Menu'>
+    <ul><li>
+        <a href='https://gitlab.eclipse.org/dataeggs/dataeggs' target='_blank' rel='noopener me'>
+          <span class='screen-reader-text'>Open Gitlab account in new tab</span><svg class='icon' xmlns='http://www.w3.org/2000/svg' viewbox='0 0 24 24' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' aria-hidden='true'>
+    
+    <title>GitLab icon</title>  <path d="M22.65 14.39L12 22.13 1.35 14.39a.84.84 0 0 1-.3-.94l1.22-3.78 2.44-7.51A.42.42 0 0 1 4.82 2a.43.43 0 0 1 .58 0 .42.42 0 0 1 .11.18l2.44 7.49h8.1l2.44-7.51A.42.42 0 0 1 18.6 2a.43.43 0 0 1 .58 0 .42.42 0 0 1 .11.18l2.44 7.51L23 13.45a.84.84 0 0 1-.35.94z"/>
+</svg>
+</a>
+      </li><li>
+        <a href='mailto:boris@chrysalice.org' target='_blank' rel='noopener me'>
+          <span class='screen-reader-text'>Contact via Email</span><svg class='icon' xmlns='http://www.w3.org/2000/svg' viewbox='0 0 24 24' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' aria-hidden='true'>
+    
+    <path d="M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z"></path><polyline points="22,6 12,13 2,6"></polyline>
+</svg>
+</a>
+      </li></ul>
+  </nav>
+</section></div>
+
+  <div class='sidebar-overlay'></div>
+</div><div class='main'><a class='screen-reader-text' href='#content'>Skip to Content</a>
+
+<button id='sidebar-toggler' class='sidebar-toggler' aria-controls='sidebar'>
+  <span class='screen-reader-text'>Toggle Sidebar</span>
+  <span class='open'><svg class='icon' xmlns='http://www.w3.org/2000/svg' viewbox='0 0 24 24' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' aria-hidden='true'>
+    
+    
+  <line x1="3" y1="12" x2="21" y2="12" />
+  <line x1="3" y1="6" x2="21" y2="6" />
+  <line x1="3" y1="18" x2="21" y2="18" />
+
+</svg>
+</span>
+  <span class='close'><svg class='icon' xmlns='http://www.w3.org/2000/svg' viewbox='0 0 24 24' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' aria-hidden='true'>
+    
+    
+  <line x1="18" y1="6" x2="6" y2="18" />
+  <line x1="6" y1="6" x2="18" y2="18" />
+
+</svg>
+</span>
+</button><div class='header-widgets'>
+        <div class='container'>
+    <style>.widget-breadcrumbs li:after{content:'\2f '}</style>
+  <section class='widget widget-breadcrumbs sep-after'>
+    <nav id='breadcrumbs'>
+      <ol><li><a href='/dataeggs/'>Home</a></li><li><span>Categories</span></li></ol>
+    </nav>
+  </section></div>
+      </div>
+
+      <header id='header' class='header site-header'>
+        <div class='container sep-after'>
+          <div class='header-info'><p class='site-title title'>Eclipse DataEggs</p><p class='desc site-desc'></p>
+          </div>
+        </div>
+      </header>
+
+      <main id='content'>
+
+
+<header class='header'>
+  <div class='container sep-after'>
+    <div class='header-info'>
+      <h1 class='title'>Categories</h1>
+
+      
+
+    </div>
+  </div>
+</header>
+
+
+<div class='container list-container'>
+  <ul class='list taxonomy-cloud'><span>Not a single Category!</span></ul>
+</div>
+
+
+      </main>
+
+      <footer id='footer' class='footer'>
+        <div class='container sep-before'><div class="row">
+	    <div class="column">
+	      <a href="http://www.eclipse.org/"  target="_blank"><img src="/dataeggs/images/logo-eclipse-foundation.png" alt="Eclipse Foundation logo"></a>
+	    </div>	  
+	    <div class="column">
+	      <p></p>
+	      <p id="copyright">Copyright © 2021 Eclipse Foundation, Inc.<br>All Rights Reserved.</p>
+	    </div>
+	  </div>
+	  <div class="row">
+	    <p><a href="http://www.eclipse.org/legal/privacy.php" target="_blank">Privacy Policy</a> /
+	      <a href="http://eclipse.org/" target="_blank">Eclipse</a> /
+	      <a href="http://www.eclipse.org/legal/termsofuse.php" target="_blank">Terms of Use</a> /
+	      <a href="http://www.eclipse.org/legal/copyright.php" target="_blank">Copyright Agent</a> /
+	      <a href="http://www.eclipse.org/legal/" target="_blank">Legal</a> /
+	      <a href="http://www.eclipse.org/org/foundation/contact.php" target="_blank"> Contact Us</a></p>
+	  </div>
+	  
+        </div>
+      </footer>
+
+    </div>
+  </div><script>window.__assets_js_src="/dataeggs/assets/js/"</script>
+
+<script src='/dataeggs/assets/js/main.c3bcf2df.js'></script><script src='/dataeggs/js/custom.js'></script>
+
+
+</body>
+
+</html>
+
diff --git a/categories/index.xml b/categories/index.xml
new file mode 100644
index 0000000..254cfd0
--- /dev/null
+++ b/categories/index.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
+  <channel>
+    <title>Categories on Eclipse DataEggs</title>
+    <link>https://download.eclipse.org/dataeggs/categories/</link>
+    <description>Recent content in Categories on Eclipse DataEggs</description>
+    <generator>Hugo -- gohugo.io</generator><atom:link href="https://download.eclipse.org/dataeggs/categories/index.xml" rel="self" type="application/rss+xml" />
+  </channel>
+</rss>
diff --git a/content/en_index.php b/content/en_index.php
deleted file mode 100644
index f4e6422..0000000
--- a/content/en_index.php
+++ /dev/null
@@ -1,30 +0,0 @@
-<?php
-/*******************************************************************************
- * Copyright (c) 2014 Eclipse Foundation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *    Christopher Guindon (Eclipse Foundation) - Initial implementation
- *******************************************************************************/
-?>
-
-<!-- Main content area -->
-<div id="midcolumn">
-  <h1><?php print $pageTitle;?></h1>
-  <p><a href="solstice-starterkit.zip" class="btn btn-warning">Download Starterkit</a></p>
-</div>
-<!-- ./end  #midcolumn -->
-
-<!-- Start of the right column -->
-<div id="rightcolumn">
-  <div class="sideitem">
-    <h2>Related Links</h2>
-    <ul>
-      <li><a target="_self" href="/eclipse.org-common/themes/solstice/docs/">Documentation</a></li>
-    </ul>
-  </div>
-</div>
-<!-- ./end  #rightcolumn -->
diff --git a/description.html b/description.html
deleted file mode 100644
index 10edabc..0000000
--- a/description.html
+++ /dev/null
@@ -1 +0,0 @@
-This project was just provisioned, so there isn't much to see here. You can find links to the propsal on this page.  Stay tuned for great things. 
\ No newline at end of file
diff --git a/eclipse_mls/index.html b/eclipse_mls/index.html
new file mode 100644
index 0000000..13d288c
--- /dev/null
+++ b/eclipse_mls/index.html
@@ -0,0 +1,642 @@
+<!DOCTYPE html>
+<html lang='en' dir='auto'><head>
+  <meta charset='utf-8'>
+<meta name='viewport' content='width=device-width, initial-scale=1'>
+<meta name='description' content=''>
+<meta name='theme-color' content='#ffcd00'>
+
+<meta property='og:title' content='Eclipse mailing lists • Eclipse DataEggs'>
+<meta property='og:description' content=''>
+<meta property='og:url' content='https://download.eclipse.org/dataeggs/eclipse_mls/'>
+<meta property='og:site_name' content='Eclipse DataEggs'>
+<meta property='og:type' content='website'><meta name='twitter:card' content='summary'>
+
+<meta name="generator" content="Hugo 0.83.1" />
+
+  <title>Eclipse mailing lists • Eclipse DataEggs</title>
+  <link rel='canonical' href='https://download.eclipse.org/dataeggs/eclipse_mls/'>
+  
+    <link href="https://download.eclipse.org/dataeggs/eclipse_mls/index.xml" rel="alternate" type="application/rss+xml" title="Eclipse DataEggs" />
+  
+  
+  <link rel='icon' href='/dataeggs/favicon.ico'>
+<link rel='stylesheet' href='/dataeggs/assets/css/main.ab98e12b.css'><link rel='stylesheet' href='/dataeggs/css/custom.css'><style>
+:root{--color-accent:#ffcd00;}
+</style>
+
+<script type="application/javascript">
+var doNotTrack = false;
+if (!doNotTrack) {
+	window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)};ga.l=+new Date;
+	ga('create', 'UA-3675452-15', 'auto');
+	
+	ga('send', 'pageview');
+}
+</script>
+<script async src='https://www.google-analytics.com/analytics.js'></script>
+
+  
+
+</head>
+<body class='section type-eclipse_mls has-sidebar'>
+
+  <div class='site'><div id='sidebar' class='sidebar'>
+  <a class='screen-reader-text' href='#main-menu'>Skip to Main Menu</a>
+
+  <div class='container'><section class='widget widget-about sep-after'>
+  <header>
+    
+    <div class='logo'>
+      <a href='/dataeggs/'>
+        <img src='/dataeggs/images/dataeggs-menu.png'>
+      </a>
+    </div>
+    
+    <div class='desc'>
+    Open. Safe. Easy.
+    </div>
+  </header>
+
+</section>
+<section class='widget widget-search sep-after'>
+  <header>
+    <h4 class='title widget-title'>Search</h4>
+  </header>
+
+  <form action='/dataeggs/search' id='search-form' class='search-form'>
+    <label>
+      <span class='screen-reader-text'>Search</span>
+      <input id='search-term' class='search-term' type='search' name='q' placeholder='Search&hellip;'>
+    </label></form>
+
+</section>
+<section class='widget widget-sidebar_menu sep-after'><nav id='sidebar-menu' class='menu sidebar-menu' aria-label='Sidebar Menu'>
+    <div class='container'>
+      <ul><li class='item'>
+  <a href='/dataeggs/'>Home</a></li><li class='item'>
+  <a href='/dataeggs/privacy/'>Privacy</a></li><li class='item'>
+  <a href='/dataeggs/aeri_stacktraces/'>AERI</a></li><li class='item current'>
+  <a aria-current='page' href='/dataeggs/eclipse_mls/'>MLS</a></li></ul>
+    </div>
+  </nav>
+
+</section><section class='widget widget-social_menu sep-after'><nav aria-label='Social Menu'>
+    <ul><li>
+        <a href='https://gitlab.eclipse.org/dataeggs/dataeggs' target='_blank' rel='noopener me'>
+          <span class='screen-reader-text'>Open Gitlab account in new tab</span><svg class='icon' xmlns='http://www.w3.org/2000/svg' viewbox='0 0 24 24' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' aria-hidden='true'>
+    
+    <title>GitLab icon</title>  <path d="M22.65 14.39L12 22.13 1.35 14.39a.84.84 0 0 1-.3-.94l1.22-3.78 2.44-7.51A.42.42 0 0 1 4.82 2a.43.43 0 0 1 .58 0 .42.42 0 0 1 .11.18l2.44 7.49h8.1l2.44-7.51A.42.42 0 0 1 18.6 2a.43.43 0 0 1 .58 0 .42.42 0 0 1 .11.18l2.44 7.51L23 13.45a.84.84 0 0 1-.35.94z"/>
+</svg>
+</a>
+      </li><li>
+        <a href='mailto:boris@chrysalice.org' target='_blank' rel='noopener me'>
+          <span class='screen-reader-text'>Contact via Email</span><svg class='icon' xmlns='http://www.w3.org/2000/svg' viewbox='0 0 24 24' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' aria-hidden='true'>
+    
+    <path d="M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z"></path><polyline points="22,6 12,13 2,6"></polyline>
+</svg>
+</a>
+      </li></ul>
+  </nav>
+</section></div>
+
+  <div class='sidebar-overlay'></div>
+</div><div class='main'><a class='screen-reader-text' href='#content'>Skip to Content</a>
+
+<button id='sidebar-toggler' class='sidebar-toggler' aria-controls='sidebar'>
+  <span class='screen-reader-text'>Toggle Sidebar</span>
+  <span class='open'><svg class='icon' xmlns='http://www.w3.org/2000/svg' viewbox='0 0 24 24' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' aria-hidden='true'>
+    
+    
+  <line x1="3" y1="12" x2="21" y2="12" />
+  <line x1="3" y1="6" x2="21" y2="6" />
+  <line x1="3" y1="18" x2="21" y2="18" />
+
+</svg>
+</span>
+  <span class='close'><svg class='icon' xmlns='http://www.w3.org/2000/svg' viewbox='0 0 24 24' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' aria-hidden='true'>
+    
+    
+  <line x1="18" y1="6" x2="6" y2="18" />
+  <line x1="6" y1="6" x2="18" y2="18" />
+
+</svg>
+</span>
+</button><div class='header-widgets'>
+        <div class='container'>
+    <style>.widget-breadcrumbs li:after{content:'\2f '}</style>
+  <section class='widget widget-breadcrumbs sep-after'>
+    <nav id='breadcrumbs'>
+      <ol><li><a href='/dataeggs/'>Home</a></li><li><span>MailingLists</span></li></ol>
+    </nav>
+  </section></div>
+      </div>
+
+      <header id='header' class='header site-header'>
+        <div class='container sep-after'>
+          <div class='header-info'><p class='site-title title'>Eclipse DataEggs</p><p class='desc site-desc'></p>
+          </div>
+        </div>
+      </header>
+
+      <main id='content'>
+
+
+<header class='header'>
+  <div class='container sep-after'>
+    <div class='header-info'>
+      <h1 class='title'>Eclipse mailing lists</h1>
+
+      
+
+    </div>
+  </div>
+</header>
+
+
+
+<div class='entry'>
+  <div class='container entry-content'>
+  <p>The Eclipse Mailing lists dump is an extract of all emails posted on the <a href="https://accounts.eclipse.org/mailing-list">Eclipse mailing lists</a>, as a single CSV file or as per-project mboxes.</p>
+<ul>
+<li>Download the <strong>Eclipse mailing lists dataset</strong> [ <a href="https://download.eclipse.org/dataeggs/eclipse_mls/eclipse_mls.gz">CSV</a> ].</li>
+<li>Check the <strong>documentation</strong> for the dataset <a href="https://download.eclipse.org/dataeggs/eclipse_mls/mbox_csv_analysis">here (HTML)</a>. For reproducibility we also provide the <a href="https://download.eclipse.org/dataeggs/eclipse_mls/mbox_csv_analysis.Rmd">R Markdown document</a> for the dataset analysis and documentation.</li>
+<li>Download the <strong>mbox files</strong> [ <a href="#project-mboxes">see the list</a> ]</li>
+</ul>
+<p>These datasets are published under the <a href="https://creativecommons.org/licenses/by-sa/4.0/">Creative Commons BY-Attribution-Share Alike 4.0 (International) licence</a>.</p>
+<h2 id="the-csv-extract">The CSV extract</h2>
+<p>This dataset is a dump of all posts sent on all mailing lists hosted at the Eclipse Forge. It only includes the list name, post ID, sent date, author name and address, and post subject. the body of messages is dismissed.</p>
+<p>Although this is public data (the mailing lists can be browsed on the <a href="https://accounts.eclipse.org/mailing-list">official mailman page</a>) all data has been anonymised to prevent any misuse.
+The privacy issues identified, along with the anonymisation process, have been covered in a <a href="../privacy/">dedicated document</a>.</p>
+<p><strong>Downloads</strong></p>
+<ul>
+<li><strong>Download the Eclipse mailing lists dataset</strong> <a href="https://download.eclipse.org/dataeggs/eclipse_mls/eclipse_mls.gz">here</a>.
+<ul>
+<li>Content: roughly 400K entries, 6 attributes</li>
+<li>Size: 12M compressed, 63M raw</li>
+</ul>
+</li>
+<li>Check the <strong>documentation</strong> for the dataset <a href="https://download.eclipse.org/dataeggs/eclipse_mls/mbox_csv_analysis.html">here</a>. For reproducibility we also provide the <a href="https://download.eclipse.org/dataeggs/eclipse_mls/mbox_csv_analysis.Rmd">R Markdown document</a> for the dataset analysis and documentation.</li>
+</ul>
+<h2 id="project-mboxes">Project mboxes</h2>
+<p>This dataset provides all Eclipse mailing lists as mboxes, compressed using gzip. Exhaustive list of downloads is as follows:</p>
+<ul>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/4diac-dev.mbox.gz">4diac-dev</a> (size: 6,0M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/acceleo-dev.mbox.gz">acceleo-dev</a> (size: 340K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/actf-dev.mbox.gz">actf-dev</a> (size: 9,8M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/acute-dev.mbox.gz">acute-dev</a> (size: 20K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/aether-build.mbox.gz">aether-build</a> (size: 100K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/aether-dev.mbox.gz">aether-dev</a> (size: 152K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/aether-users.mbox.gz">aether-users</a> (size: 652K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/agail-dev.mbox.gz">agail-dev</a> (size: 124K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/ajdt-dev.mbox.gz">ajdt-dev</a> (size: 5,0M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/albireo-dev.mbox.gz">albireo-dev</a> (size: 884K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/alf-dev.mbox.gz">alf-dev</a> (size: 3,5M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/alf-events.mbox.gz">alf-events</a> (size: 148K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/alf-req.mbox.gz">alf-req</a> (size: 192K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/amalgam-dev.mbox.gz">amalgam-dev</a> (size: 200K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/amalgam-releng.mbox.gz">amalgam-releng</a> (size: 4,0K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/amp-dev.mbox.gz">amp-dev</a> (size: 344K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/andmore-dev.mbox.gz">andmore-dev</a> (size: 1,8M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/antenna-dev.mbox.gz">antenna-dev</a> (size: 76K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/aperi-dev.mbox.gz">aperi-dev</a> (size: 22M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/aperi-news.mbox.gz">aperi-news</a> (size: 184K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/aperi-survey.mbox.gz">aperi-survey</a> (size: 8,0K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/apogee-dev.mbox.gz">apogee-dev</a> (size: 16K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/apogy-dev.mbox.gz">apogy-dev</a> (size: 8,0K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/app4mc-dev.mbox.gz">app4mc-dev</a> (size: 36K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/apricot-dev.mbox.gz">apricot-dev</a> (size: 16K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/apricot-users.mbox.gz">apricot-users</a> (size: 8,0K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/articles_editor.mbox.gz">articles_editor</a> (size: 4,0K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/aspectj-announce.mbox.gz">aspectj-announce</a> (size: 428K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/aspectj-dev.mbox.gz">aspectj-dev</a> (size: 11M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/aspectj-users.mbox.gz">aspectj-users</a> (size: 53M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/atf-dev.mbox.gz">atf-dev</a> (size: 1,9M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/athena-dev.mbox.gz">athena-dev</a> (size: 4,0K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/austin-ec.mbox.gz">austin-ec</a> (size: 28K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/auto-iwg.mbox.gz">auto-iwg</a> (size: 35M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/avsys-dev.mbox.gz">avsys-dev</a> (size: 4,0K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/b3-dev.mbox.gz">b3-dev</a> (size: 60K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/b3.mbox.gz">b3</a> (size: 16K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/babel-dev.mbox.gz">babel-dev</a> (size: 5,6M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/basyx-dev.mbox.gz">basyx-dev</a> (size: 8,0K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/bayarea-ec.mbox.gz">bayarea-ec</a> (size: 36K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/belgium-ec.mbox.gz">belgium-ec</a> (size: 16K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/birt-charting-dev.mbox.gz">birt-charting-dev</a> (size: 13M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/birt-dev.mbox.gz">birt-dev</a> (size: 23M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/birt-news.mbox.gz">birt-news</a> (size: 1,1M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/birt-pmc.mbox.gz">birt-pmc</a> (size: 6,0M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/birt-proposal.mbox.gz">birt-proposal</a> (size: 16K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/birt-report-designer-dev.mbox.gz">birt-report-designer-dev</a> (size: 444K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/birt-report-engine-dev.mbox.gz">birt-report-engine-dev</a> (size: 380K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/blinki-dev.mbox.gz">blinki-dev</a> (size: 12K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/bpel-dev.mbox.gz">bpel-dev</a> (size: 12M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/bpmn2-modeler-dev.mbox.gz">bpmn2-modeler-dev</a> (size: 1,6M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/bpmn-dev.mbox.gz">bpmn-dev</a> (size: 88K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/bpmn-user.mbox.gz">bpmn-user</a> (size: 6,6M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/brazil-ec.mbox.gz">brazil-ec</a> (size: 8,0K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/bridgeiot-dev.mbox.gz">bridgeiot-dev</a> (size: 4,0K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/buckminster-dev.mbox.gz">buckminster-dev</a> (size: 7,8M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/budapest-ec.mbox.gz">budapest-ec</a> (size: 12K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/buildship-dev.mbox.gz">buildship-dev</a> (size: 296K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/bulgaria-ec.mbox.gz">bulgaria-ec</a> (size: 12K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/bulgaria-ec-news.mbox.gz">bulgaria-ec-news</a> (size: 32K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/ca-dev.mbox.gz">ca-dev</a> (size: 12K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/camf-dev.mbox.gz">camf-dev</a> (size: 1,1M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/camf-users.mbox.gz">camf-users</a> (size: 8,0K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/capra-dev.mbox.gz">capra-dev</a> (size: 92K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/cbi-dev.mbox.gz">cbi-dev</a> (size: 6,0M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/cdt-build-inbox.mbox.gz">cdt-build-inbox</a> (size: 4,0K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/cdt-contrib-dev.mbox.gz">cdt-contrib-dev</a> (size: 60K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/cdt-core-dev.mbox.gz">cdt-core-dev</a> (size: 1,2M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/cdt-cpp-extensions-dev.mbox.gz">cdt-cpp-extensions-dev</a> (size: 8,0K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/cdt-cppunit-inbox.mbox.gz">cdt-cppunit-inbox</a> (size: 104K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/cdt-cvs.mbox.gz">cdt-cvs</a> (size: 108K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/cdt-debug-dev.mbox.gz">cdt-debug-dev</a> (size: 2,7M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/cdt-dev.mbox.gz">cdt-dev</a> (size: 124M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/cdt-doc-dev.mbox.gz">cdt-doc-dev</a> (size: 260K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/cdt-doc-inbox.mbox.gz">cdt-doc-inbox</a> (size: 2,6M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/cdt-generic-extensions-dev.mbox.gz">cdt-generic-extensions-dev</a> (size: 8,0K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/cdtk-dev.mbox.gz">cdtk-dev</a> (size: 8,0K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/cdt-launch-inbox.mbox.gz">cdt-launch-inbox</a> (size: 136K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/cdt-lpex-dev.mbox.gz">cdt-lpex-dev</a> (size: 8,0K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/cdt-patch.mbox.gz">cdt-patch</a> (size: 26M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/cdt-releng-inbox.mbox.gz">cdt-releng-inbox</a> (size: 168K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/cdt-test-dev.mbox.gz">cdt-test-dev</a> (size: 1,6M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/cdt-ui-dev.mbox.gz">cdt-ui-dev</a> (size: 320K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/ceylon-dev.mbox.gz">ceylon-dev</a> (size: 4,0K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/cf-dev.mbox.gz">cf-dev</a> (size: 5,6M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/cft-dev.mbox.gz">cft-dev</a> (size: 220K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/che-dev.mbox.gz">che-dev</a> (size: 26M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/chemclipse-dev.mbox.gz">chemclipse-dev</a> (size: 14M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/chicago-ec.mbox.gz">chicago-ec</a> (size: 8,0K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/cloud-dev.mbox.gz">cloud-dev</a> (size: 3,7M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/cloudfree-dev.mbox.gz">cloudfree-dev</a> (size: 188K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/cme-dev.mbox.gz">cme-dev</a> (size: 184K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/cme-users.mbox.gz">cme-users</a> (size: 236K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/cobol-dev.mbox.gz">cobol-dev</a> (size: 1,1M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/cognicrypt-dev.mbox.gz">cognicrypt-dev</a> (size: 8,0K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/collections-dev.mbox.gz">collections-dev</a> (size: 176K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/community-outreach.mbox.gz">community-outreach</a> (size: 16K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/concierge-dev.mbox.gz">concierge-dev</a> (size: 768K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/configjsr-discuss.mbox.gz">configjsr-discuss</a> (size: 44K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/configjsr-experts.mbox.gz">configjsr-experts</a> (size: 356K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/context-dev.mbox.gz">context-dev</a> (size: 4,0K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/corona-dev.mbox.gz">corona-dev</a> (size: 3,8M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/corona-req.mbox.gz">corona-req</a> (size: 4,0K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/corrosion-dev.mbox.gz">corrosion-dev</a> (size: 28K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/cosmos-dev.mbox.gz">cosmos-dev</a> (size: 17M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/cosmos-mgmt.mbox.gz">cosmos-mgmt</a> (size: 128K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/cosmos-pmc.mbox.gz">cosmos-pmc</a> (size: 16K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/crossmeter-dev.mbox.gz">crossmeter-dev</a> (size: 28K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/cross-project-issues-dev.mbox.gz">cross-project-issues-dev</a> (size: 87M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/cu-dev.mbox.gz">cu-dev</a> (size: 16K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/cyclonedds-dev.mbox.gz">cyclonedds-dev</a> (size: 116K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/dali-dev.mbox.gz">dali-dev</a> (size: 3,2M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/damos-dev.mbox.gz">damos-dev</a> (size: 20K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/dash-dev.mbox.gz">dash-dev</a> (size: 2,5M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/dawnsci-dev.mbox.gz">dawnsci-dev</a> (size: 8,0K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/deeplearning4j-dev.mbox.gz">deeplearning4j-dev</a> (size: 12K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/detroit-ec.mbox.gz">detroit-ec</a> (size: 4,0K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/diffmerge-dev.mbox.gz">diffmerge-dev</a> (size: 44K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/dirigible-dev.mbox.gz">dirigible-dev</a> (size: 1,1M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/distro-program.mbox.gz">distro-program</a> (size: 4,0K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/ditto-dev.mbox.gz">ditto-dev</a> (size: 72K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/dltk-dev.mbox.gz">dltk-dev</a> (size: 4,6M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/doc2model-dev.mbox.gz">doc2model-dev</a> (size: 8,0K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/dsdp-dd-dev.mbox.gz">dsdp-dd-dev</a> (size: 3,8M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/dsdp-dev.mbox.gz">dsdp-dev</a> (size: 2,5M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/dsdp-ercp-dev.mbox.gz">dsdp-ercp-dev</a> (size: 8,7M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/dsdp-japan-wg.mbox.gz">dsdp-japan-wg</a> (size: 8,0K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/dsdp-mtj-dev.mbox.gz">dsdp-mtj-dev</a> (size: 6,7M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/dsdp-nab-dev-jp.mbox.gz">dsdp-nab-dev-jp</a> (size: 8,0K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/dsdp-nab-dev.mbox.gz">dsdp-nab-dev</a> (size: 36K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/dsdp-pmc.mbox.gz">dsdp-pmc</a> (size: 18M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/dsdp-rtsc-dev.mbox.gz">dsdp-rtsc-dev</a> (size: 4,0K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/dsdp-sequoyah-dev.mbox.gz">dsdp-sequoyah-dev</a> (size: 4,0K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/dsdp-tcf-dev.mbox.gz">dsdp-tcf-dev</a> (size: 452K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/dsdp-tm-dev.mbox.gz">dsdp-tm-dev</a> (size: 8,7M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/dsdp-tml-dev.mbox.gz">dsdp-tml-dev</a> (size: 392K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/dtp-arch.mbox.gz">dtp-arch</a> (size: 4,0K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/dtp-connect-dev.mbox.gz">dtp-connect-dev</a> (size: 492K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/dtp-dev.mbox.gz">dtp-dev</a> (size: 14M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/dtp-incubator-dev.mbox.gz">dtp-incubator-dev</a> (size: 4,0K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/dtp-models-dev.mbox.gz">dtp-models-dev</a> (size: 20K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/dtp-plan.mbox.gz">dtp-plan</a> (size: 4,0K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/dtp-pmc.mbox.gz">dtp-pmc</a> (size: 2,9M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/dtp-reqs.mbox.gz">dtp-reqs</a> (size: 4,0K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/dtp-sqldevtools-dev.mbox.gz">dtp-sqldevtools-dev</a> (size: 1,7M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/duttile-dev.mbox.gz">duttile-dev</a> (size: 4,0K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/e4-dev.mbox.gz">e4-dev</a> (size: 31M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/ease-dev.mbox.gz">ease-dev</a> (size: 3,3M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/eatop-dev.mbox.gz">eatop-dev</a> (size: 92K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/eavp-dev.mbox.gz">eavp-dev</a> (size: 3,5M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/ebam-dev.mbox.gz">ebam-dev</a> (size: 24K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/ebam-user.mbox.gz">ebam-user</a> (size: 228K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/ebpm-dev.mbox.gz">ebpm-dev</a> (size: 32K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/ebpm-user.mbox.gz">ebpm-user</a> (size: 24K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/ebr-dev.mbox.gz">ebr-dev</a> (size: 172K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/ecd-pmc.mbox.gz">ecd-pmc</a> (size: 948K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/ecd-tools-wg.mbox.gz">ecd-tools-wg</a> (size: 8,0K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/ecesis-dev.mbox.gz">ecesis-dev</a> (size: 24K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/ecf-build.mbox.gz">ecf-build</a> (size: 3,6M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/ecf-def.mbox.gz">ecf-def</a> (size: 4,0K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/ecf-dev.mbox.gz">ecf-dev</a> (size: 23M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/eclemma-dev.mbox.gz">eclemma-dev</a> (size: 580K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/eclipse-announce-europe.mbox.gz">eclipse-announce-europe</a> (size: 88K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/eclipsecon2011announce.mbox.gz">eclipsecon2011announce</a> (size: 4,0K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/eclipse-dev.mbox.gz">eclipse-dev</a> (size: 19M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/eclipse-ide-dev.mbox.gz">eclipse-ide-dev</a> (size: 4,0K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/eclipse-incubator-e4-dev.mbox.gz">eclipse-incubator-e4-dev</a> (size: 5,5M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/eclipselink-dev.mbox.gz">eclipselink-dev</a> (size: 20M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/eclipselink-users.mbox.gz">eclipselink-users</a> (size: 31M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/eclipse-live.mbox.gz">eclipse-live</a> (size: 76K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/eclipse-mirrors.mbox.gz">eclipse-mirrors</a> (size: 1,3M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/eclipse.org-architecture-council.mbox.gz">eclipse.org-architecture-council</a> (size: 22M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/eclipse.org-committers.mbox.gz">eclipse.org-committers</a> (size: 9,0M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/eclipse.org-feep-stakeholders.mbox.gz">eclipse.org-feep-stakeholders</a> (size: 128K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/eclipse.org-member-marketing.mbox.gz">eclipse.org-member-marketing</a> (size: 28M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/eclipse.org-members-committers.mbox.gz">eclipse.org-members-committers</a> (size: 5,3M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/eclipse.org-migration.mbox.gz">eclipse.org-migration</a> (size: 1,5M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/eclipse.org-planning-council.mbox.gz">eclipse.org-planning-council</a> (size: 14M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/eclipse.org-prc.mbox.gz">eclipse.org-prc</a> (size: 3,7M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/eclipse.org-project-leadership.mbox.gz">eclipse.org-project-leadership</a> (size: 788K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/eclipse.org-project-leads.mbox.gz">eclipse.org-project-leads</a> (size: 92K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/eclipse.org-requirements-council.mbox.gz">eclipse.org-requirements-council</a> (size: 3,8M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/eclipse.org-strategic-consumer.mbox.gz">eclipse.org-strategic-consumer</a> (size: 4,0K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/eclipse.org-strategic-developer.mbox.gz">eclipse.org-strategic-developer</a> (size: 4,0K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/eclipse.org-sustaining-members.mbox.gz">eclipse.org-sustaining-members</a> (size: 8,0K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/eclipse.org-test.mbox.gz">eclipse.org-test</a> (size: 4,0K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/eclipse.org-unaffiliated-committer.mbox.gz">eclipse.org-unaffiliated-committer</a> (size: 4,0K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/eclipse-pmc.mbox.gz">eclipse-pmc</a> (size: 9,8M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/eclipse-scripting-dev.mbox.gz">eclipse-scripting-dev</a> (size: 928K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/eclipse-soc.mbox.gz">eclipse-soc</a> (size: 4,0K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/eclipse-tools-announce.mbox.gz">eclipse-tools-announce</a> (size: 4,0K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/eclipsezilla-business.mbox.gz">eclipsezilla-business</a> (size: 8,0K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/eclipsezilla-developer.mbox.gz">eclipsezilla-developer</a> (size: 112K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/eclipsezilla-special.mbox.gz">eclipsezilla-special</a> (size: 4,0K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/eclipsezilla-user.mbox.gz">eclipsezilla-user</a> (size: 12K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/edapt-dev.mbox.gz">edapt-dev</a> (size: 64K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/edje-dev.mbox.gz">edje-dev</a> (size: 32K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/edt-dev.mbox.gz">edt-dev</a> (size: 460K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/ee4j-build.mbox.gz">ee4j-build</a> (size: 4,7M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/ee4j-community.mbox.gz">ee4j-community</a> (size: 14M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/ee4j-dev.mbox.gz">ee4j-dev</a> (size: 20K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/ee4j-pmc.mbox.gz">ee4j-pmc</a> (size: 5,9M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/ee.next-wg.mbox.gz">ee.next-wg</a> (size: 28K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/efm-dev.mbox.gz">efm-dev</a> (size: 4,0K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/efxclipse-dev.mbox.gz">efxclipse-dev</a> (size: 20K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/egerrit-dev.mbox.gz">egerrit-dev</a> (size: 304K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/egf-dev.mbox.gz">egf-dev</a> (size: 8,0K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/egit-build.mbox.gz">egit-build</a> (size: 3,4M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/egit-dev.mbox.gz">egit-dev</a> (size: 16M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/ejb-dev.mbox.gz">ejb-dev</a> (size: 8,0K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/el-dev.mbox.gz">el-dev</a> (size: 20K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/elk-dev.mbox.gz">elk-dev</a> (size: 408K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/elogbook-dev.mbox.gz">elogbook-dev</a> (size: 12K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/emfcompare-build.mbox.gz">emfcompare-build</a> (size: 6,8M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/emf-compare-dev.mbox.gz">emf-compare-dev</a> (size: 68K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/emfcp-dev.mbox.gz">emfcp-dev</a> (size: 484K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/emf-dev.mbox.gz">emf-dev</a> (size: 6,0M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/emf.index-dev.mbox.gz">emf.index-dev</a> (size: 4,0K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/emfindex-dev.mbox.gz">emfindex-dev</a> (size: 92K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/emfparsley-dev.mbox.gz">emfparsley-dev</a> (size: 24K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/emfrefactor-dev.mbox.gz">emfrefactor-dev</a> (size: 48K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/emfstore-dev.mbox.gz">emfstore-dev</a> (size: 1,2M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/emft-dev.mbox.gz">emft-dev</a> (size: 2,8M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/epf-dev.mbox.gz">epf-dev</a> (size: 96M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/epf-dev-pt.mbox.gz">epf-dev-pt</a> (size: 108K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/epl-discuss.mbox.gz">epl-discuss</a> (size: 4,5M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/epp-dev.mbox.gz">epp-dev</a> (size: 19M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/epsilon-dev.mbox.gz">epsilon-dev</a> (size: 748K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/equinox-dev.mbox.gz">equinox-dev</a> (size: 31M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/ercp-dev.mbox.gz">ercp-dev</a> (size: 336K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/es-dev.mbox.gz">es-dev</a> (size: 256K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/esl-dev.mbox.gz">esl-dev</a> (size: 12K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/etrice-dev.mbox.gz">etrice-dev</a> (size: 840K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/etrice-users.mbox.gz">etrice-users</a> (size: 76K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/europa-build-workshop.mbox.gz">europa-build-workshop</a> (size: 1,2M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/evangelists.mbox.gz">evangelists</a> (size: 12K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/examples-dev.mbox.gz">examples-dev</a> (size: 36K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/facet-dev.mbox.gz">facet-dev</a> (size: 16K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/fairfax-ec.mbox.gz">fairfax-ec</a> (size: 4,0K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/featuremodel-dev.mbox.gz">featuremodel-dev</a> (size: 40K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/flux-dev.mbox.gz">flux-dev</a> (size: 972K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/flux-releng.mbox.gz">flux-releng</a> (size: 4,0K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/fmc-dev.mbox.gz">fmc-dev</a> (size: 28K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/fog05-dev.mbox.gz">fog05-dev</a> (size: 28K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/forum-admins.mbox.gz">forum-admins</a> (size: 12K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/forums-admin.mbox.gz">forums-admin</a> (size: 4,0K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/fproj-dev.mbox.gz">fproj-dev</a> (size: 16K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/franca-dev.mbox.gz">franca-dev</a> (size: 4,0K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/france-ec.mbox.gz">france-ec</a> (size: 364K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/france-southwest-ec.mbox.gz">france-southwest-ec</a> (size: 4,0K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/geclipse-dev.mbox.gz">geclipse-dev</a> (size: 8,5M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/geclipse-user.mbox.gz">geclipse-user</a> (size: 344K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/gef3d-dev.mbox.gz">gef3d-dev</a> (size: 476K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/gef-dev.mbox.gz">gef-dev</a> (size: 4,8M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/gemini-dev.mbox.gz">gemini-dev</a> (size: 7,0M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/gemoc-dev.mbox.gz">gemoc-dev</a> (size: 468K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/gemoc-rc.mbox.gz">gemoc-rc</a> (size: 8,0K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/gemoc-users.mbox.gz">gemoc-users</a> (size: 8,0K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/gendoc-dev.mbox.gz">gendoc-dev</a> (size: 116K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/gendoc-users.mbox.gz">gendoc-users</a> (size: 20K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/geoperil-dev.mbox.gz">geoperil-dev</a> (size: 4,0K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/germany-north-ec.mbox.gz">germany-north-ec</a> (size: 8,0K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/germany-south-ec.mbox.gz">germany-south-ec</a> (size: 8,0K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/git.mbox.gz">git</a> (size: 124K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/glassfish-dev.mbox.gz">glassfish-dev</a> (size: 72K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/glassfish-tools-dev.mbox.gz">glassfish-tools-dev</a> (size: 4,0K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/glimmer-dev.mbox.gz">glimmer-dev</a> (size: 20K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/gmf-dev.mbox.gz">gmf-dev</a> (size: 8,5M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/gmf-releng.mbox.gz">gmf-releng</a> (size: 108M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/gmt-dev.mbox.gz">gmt-dev</a> (size: 1,3M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/golo-dev.mbox.gz">golo-dev</a> (size: 436K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/graphiti-dev.mbox.gz">graphiti-dev</a> (size: 656K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/handly-dev.mbox.gz">handly-dev</a> (size: 740K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/henshin-user.mbox.gz">henshin-user</a> (size: 1,7M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/hono-dev.mbox.gz">hono-dev</a> (size: 6,2M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/ice-build.mbox.gz">ice-build</a> (size: 11M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/ide-dev.mbox.gz">ide-dev</a> (size: 20M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/iot-kapua-sp.mbox.gz">iot-kapua-sp</a> (size: 8,0K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/iot-pmc.mbox.gz">iot-pmc</a> (size: 37M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/iot-sc.mbox.gz">iot-sc</a> (size: 7,2M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/iot-wg-integration.mbox.gz">iot-wg-integration</a> (size: 492K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/iot-wg.mbox.gz">iot-wg</a> (size: 88M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/jakarta.ee-community.mbox.gz">jakarta.ee-community</a> (size: 17M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/jakartaee-tck-dev.mbox.gz">jakartaee-tck-dev</a> (size: 1,2M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/jakarta.ee-wg.mbox.gz">jakarta.ee-wg</a> (size: 9,5M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/javamail-dev.mbox.gz">javamail-dev</a> (size: 40K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/jaxrs-dev.mbox.gz">jaxrs-dev</a> (size: 3,1M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/jdt-core-dev.mbox.gz">jdt-core-dev</a> (size: 3,8M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/jdt-dev.mbox.gz">jdt-dev</a> (size: 4,7M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/jemo-dev.mbox.gz">jemo-dev</a> (size: 4,0K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/jersey-dev.mbox.gz">jersey-dev</a> (size: 264K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/jetty-announce.mbox.gz">jetty-announce</a> (size: 5,4M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/jetty-dev.mbox.gz">jetty-dev</a> (size: 23M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/jetty-users.mbox.gz">jetty-users</a> (size: 33M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/jgit-build.mbox.gz">jgit-build</a> (size: 2,0M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/jgit-dev.mbox.gz">jgit-dev</a> (size: 8,0M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/jms-dev.mbox.gz">jms-dev</a> (size: 128K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/jnosql-dev.mbox.gz">jnosql-dev</a> (size: 5,5M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/jsonp-dev.mbox.gz">jsonp-dev</a> (size: 4,0K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/kapua-dev.mbox.gz">kapua-dev</a> (size: 14M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/kura-commit.mbox.gz">kura-commit</a> (size: 2,2M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/kura-dev.mbox.gz">kura-dev</a> (size: 26M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/ldt-dev.mbox.gz">ldt-dev</a> (size: 300K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/leshan-commit.mbox.gz">leshan-commit</a> (size: 448K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/leshan-dev.mbox.gz">leshan-dev</a> (size: 6,6M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/linuxtools-dev.mbox.gz">linuxtools-dev</a> (size: 11M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/lsp4e-dev.mbox.gz">lsp4e-dev</a> (size: 732K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/lsp4j-dev.mbox.gz">lsp4j-dev</a> (size: 64K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/lsphub-dev.mbox.gz">lsphub-dev</a> (size: 8,0K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/lts-iwg.mbox.gz">lts-iwg</a> (size: 6,0M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/lyo-dev.mbox.gz">lyo-dev</a> (size: 13M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/m2e-dev.mbox.gz">m2e-dev</a> (size: 6,5M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/m2e-users.mbox.gz">m2e-users</a> (size: 23M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/m2t-dev.mbox.gz">m2t-dev</a> (size: 2,1M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/mat-dev.mbox.gz">mat-dev</a> (size: 3,0M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/mdmbl-dev.mbox.gz">mdmbl-dev</a> (size: 1,3M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/mdt-ocl.dev.mbox.gz">mdt-ocl.dev</a> (size: 5,0M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/mdt-papyrus.dev.mbox.gz">mdt-papyrus.dev</a> (size: 58M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/microprofile-dev.mbox.gz">microprofile-dev</a> (size: 1,6M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/milo-dev.mbox.gz">milo-dev</a> (size: 2,2M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/modeling-pmc.mbox.gz">modeling-pmc</a> (size: 29M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/modisco-dev.mbox.gz">modisco-dev</a> (size: 76K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/mojarra-dev.mbox.gz">mojarra-dev</a> (size: 48K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/mosquitto-dev.mbox.gz">mosquitto-dev</a> (size: 8,0M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/mylyn-dev.mbox.gz">mylyn-dev</a> (size: 7,8M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/mylyn-docs-dev.mbox.gz">mylyn-docs-dev</a> (size: 940K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/mylyn-pmc.mbox.gz">mylyn-pmc</a> (size: 1,4M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/nattable-dev.mbox.gz">nattable-dev</a> (size: 624K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/nebula-dev.mbox.gz">nebula-dev</a> (size: 17M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/omr-dev.mbox.gz">omr-dev</a> (size: 284K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/oomph-dev.mbox.gz">oomph-dev</a> (size: 668K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/openadx.mbox.gz">openadx</a> (size: 1,4M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/opengenesis-wg.mbox.gz">opengenesis-wg</a> (size: 72K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/openmdm-wg-members.mbox.gz">openmdm-wg-members</a> (size: 1,9M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/open-measured-data-wg.mbox.gz">open-measured-data-wg</a> (size: 62M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/openmobility.mbox.gz">openmobility</a> (size: 1,5M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/openpass-wg.mbox.gz">openpass-wg</a> (size: 1,1M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/orb-dev.mbox.gz">orb-dev</a> (size: 8,0K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/orbit-dev.mbox.gz">orbit-dev</a> (size: 7,4M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/orion-releng.mbox.gz">orion-releng</a> (size: 315M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/osbea-wg.mbox.gz">osbea-wg</a> (size: 16K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/p2-dev.mbox.gz">p2-dev</a> (size: 19M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/paho-dev.mbox.gz">paho-dev</a> (size: 36M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/papyrus-ic.mbox.gz">papyrus-ic</a> (size: 11M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/passage-dev.mbox.gz">passage-dev</a> (size: 44K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/pde-dev.mbox.gz">pde-dev</a> (size: 8,5M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/photran.mbox.gz">photran</a> (size: 11M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/platform-dev.mbox.gz">platform-dev</a> (size: 3,2M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/platform-releng-dev.mbox.gz">platform-releng-dev</a> (size: 30M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/platform-swt-dev.mbox.gz">platform-swt-dev</a> (size: 31M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/platform-ui-dev.mbox.gz">platform-ui-dev</a> (size: 27M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/ptp-dev.mbox.gz">ptp-dev</a> (size: 44M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/ptp-user.mbox.gz">ptp-user</a> (size: 36M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/qvto-dev.mbox.gz">qvto-dev</a> (size: 9,1M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/rap-dev.mbox.gz">rap-dev</a> (size: 6,6M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/rdf4j-dev.mbox.gz">rdf4j-dev</a> (size: 9,4M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/recommenders-dev.mbox.gz">recommenders-dev</a> (size: 38M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/reddeer-dev.mbox.gz">reddeer-dev</a> (size: 28K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/scada-dev.mbox.gz">scada-dev</a> (size: 508K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/scava-dev.mbox.gz">scava-dev</a> (size: 352K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/science-iwg.mbox.gz">science-iwg</a> (size: 58M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/science-pmc.mbox.gz">science-pmc</a> (size: 1,3M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/scout-dev.mbox.gz">scout-dev</a> (size: 464K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/simopenpass-dev.mbox.gz">simopenpass-dev</a> (size: 4,0K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/sirius-dev.mbox.gz">sirius-dev</a> (size: 332K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/smarthome-dev.mbox.gz">smarthome-dev</a> (size: 192K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/soa-pmc.mbox.gz">soa-pmc</a> (size: 58M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/soc-dev.mbox.gz">soc-dev</a> (size: 9,2M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/sparkplug-wg.mbox.gz">sparkplug-wg</a> (size: 4,0K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/sphinx-dev.mbox.gz">sphinx-dev</a> (size: 20K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/sprotty-dev.mbox.gz">sprotty-dev</a> (size: 8,0K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/statet-dev.mbox.gz">statet-dev</a> (size: 12K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/statet-users.mbox.gz">statet-users</a> (size: 36K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/stem-dev.mbox.gz">stem-dev</a> (size: 19M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/sumo-announce.mbox.gz">sumo-announce</a> (size: 28K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/sumo-dev.mbox.gz">sumo-dev</a> (size: 3,8M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/sumo-user.mbox.gz">sumo-user</a> (size: 118M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/sw360-dev.mbox.gz">sw360-dev</a> (size: 14M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/sw360-users.mbox.gz">sw360-users</a> (size: 8,0K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/swtchart-dev.mbox.gz">swtchart-dev</a> (size: 140K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/tcf-dev.mbox.gz">tcf-dev</a> (size: 5,3M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/technology-pmc.mbox.gz">technology-pmc</a> (size: 24M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/thingweb-dev.mbox.gz">thingweb-dev</a> (size: 20K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/tinydtls-dev.mbox.gz">tinydtls-dev</a> (size: 784K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/tm4e-dev.mbox.gz">tm4e-dev</a> (size: 84K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/tm-dev.mbox.gz">tm-dev</a> (size: 5,1M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/tools-pmc.mbox.gz">tools-pmc</a> (size: 16M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/tracecompass-dev.mbox.gz">tracecompass-dev</a> (size: 12M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/tycho-dev.mbox.gz">tycho-dev</a> (size: 2,1M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/tycho-user.mbox.gz">tycho-user</a> (size: 34M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/unide-dev.mbox.gz">unide-dev</a> (size: 1,6M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/usssdk-dev.mbox.gz">usssdk-dev</a> (size: 20K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/viatra-dev.mbox.gz">viatra-dev</a> (size: 2,3M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/wakaama-dev.mbox.gz">wakaama-dev</a> (size: 4,9M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/websocket-dev.mbox.gz">websocket-dev</a> (size: 24K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/wildwebdeveloper-dev.mbox.gz">wildwebdeveloper-dev</a> (size: 16K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/winery-dev.mbox.gz">winery-dev</a> (size: 468K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/wtp-dev.mbox.gz">wtp-dev</a> (size: 48M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/wtp-pmc.mbox.gz">wtp-pmc</a> (size: 19M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/wtp-releng.mbox.gz">wtp-releng</a> (size: 19M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/xacc-dev.mbox.gz">xacc-dev</a> (size: 140K)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/xtext-dev.mbox.gz">xtext-dev</a> (size: 3,8M)</li>
+<li><a href="https://download.eclipse.org/dataeggs/eclipse_mls/mboxes/yasson-dev.mbox.gz">yasson-dev</a> (size: 32K)</li>
+</ul>
+<hr>
+<p>Note: list obtained through the following command:</p>
+<pre><code>for i in `ls`; do
+     s=`du -sh $i | cut -f1`;
+     echo &quot;* [${i%%.mbox.gz}](https://download.eclipse.org/dataeggs/eclipse_mls/$i) (size: $s)&quot; &gt;&gt; list.txt;
+done
+</code></pre>
+
+</div>
+
+</div>
+
+
+<div class='container list-container'>
+  <ul class='list'>
+    
+  </ul>
+
+  
+
+</div>
+
+      </main>
+
+      <footer id='footer' class='footer'>
+        <div class='container sep-before'><div class="row">
+	    <div class="column">
+	      <a href="http://www.eclipse.org/"  target="_blank"><img src="/dataeggs/images/logo-eclipse-foundation.png" alt="Eclipse Foundation logo"></a>
+	    </div>	  
+	    <div class="column">
+	      <p></p>
+	      <p id="copyright">Copyright © 2021 Eclipse Foundation, Inc.<br>All Rights Reserved.</p>
+	    </div>
+	  </div>
+	  <div class="row">
+	    <p><a href="http://www.eclipse.org/legal/privacy.php" target="_blank">Privacy Policy</a> /
+	      <a href="http://eclipse.org/" target="_blank">Eclipse</a> /
+	      <a href="http://www.eclipse.org/legal/termsofuse.php" target="_blank">Terms of Use</a> /
+	      <a href="http://www.eclipse.org/legal/copyright.php" target="_blank">Copyright Agent</a> /
+	      <a href="http://www.eclipse.org/legal/" target="_blank">Legal</a> /
+	      <a href="http://www.eclipse.org/org/foundation/contact.php" target="_blank"> Contact Us</a></p>
+	  </div>
+	  
+        </div>
+      </footer>
+
+    </div>
+  </div><script>window.__assets_js_src="/dataeggs/assets/js/"</script>
+
+<script src='/dataeggs/assets/js/main.c3bcf2df.js'></script><script src='/dataeggs/js/custom.js'></script>
+
+
+</body>
+
+</html>
+
diff --git a/eclipse_mls/index.xml b/eclipse_mls/index.xml
new file mode 100644
index 0000000..992c690
--- /dev/null
+++ b/eclipse_mls/index.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
+  <channel>
+    <title>Eclipse mailing lists on Eclipse DataEggs</title>
+    <link>https://download.eclipse.org/dataeggs/eclipse_mls/</link>
+    <description>Recent content in Eclipse mailing lists on Eclipse DataEggs</description>
+    <generator>Hugo -- gohugo.io</generator><atom:link href="https://download.eclipse.org/dataeggs/eclipse_mls/index.xml" rel="self" type="application/rss+xml" />
+  </channel>
+</rss>
diff --git a/eclipse_mls/mbox_csv_analysis.Rmarkdown b/eclipse_mls/mbox_csv_analysis.Rmarkdown
new file mode 100644
index 0000000..063eb6e
--- /dev/null
+++ b/eclipse_mls/mbox_csv_analysis.Rmarkdown
@@ -0,0 +1,300 @@
+---
+title: Mbox Analysis
+output:
+  blogdown::html_page:
+    toc: true
+    autoCollapseToc: false
+params:
+  project: eclipse_mls_full.csv
+slug: mbox_csv_analysis
+---
+
+```{r init, message=FALSE, echo=FALSE}
+library(ggplot2)
+library(plotly)
+library(ggthemes)
+library(knitr)
+library(kableExtra)
+library(parsedate)
+library(magrittr)
+
+# Read csv file
+file.in <- paste( params$project, sep="")
+project.csv <- read.csv(file.in, header=T)
+names.orig <- names(project.csv)
+project.csv$Company <- substr(x = project.csv$sender_addr, 18, 33)
+
+# Create xts object
+require(xts)
+require(parsedate)
+project.xts <- xts(x = project.csv, order.by = parse_iso_8601(project.csv$sent_at))
+
+# Initialise plotly
+Sys.setenv("plotly_username"="BorisBaldassari")
+Sys.setenv("plotly_api_key"="uewufFf4T6NTGwbU6uS5")
+```
+
+
+## About this dataset
+
+This dataset is a dump of all posts sent on all mailing lists hosted at the Eclipse Forge. Although this is public data (the mailing lists can be browsed on the [official mailman page](https://accounts.eclipse.org/mailing-list)) all data has been anonymised to prevent any misuse. The privacy issues identified, along with the anonymisation process, have been covered in a [dedicated document](../../privacy/).
+
+These files are published under the [Creative Commons BY-Attribution-Share Alike 4.0 (International) licence](https://creativecommons.org/licenses/by-sa/4.0/).
+
+The dataset is composed of two parts:
+
+* **eclipse_mls_full.csv** contains an extract of all the messages exchanged on the various mailing lists. The present document uses this CSV as input data.
+* The **full list of mboxes**, one file per mailing list. They are listed in the [dataset main page](../#project-mboxes) and can be downloaded directly from the [mboxes subdirectory](../mboxes/).
+
+All of them are updated weekly at 2am on Sunday.
+
+
+## Privacy concerns
+
+We value privacy and intend to make everything we can to prevent misuse of the dataset. If you think we failed somewhere in the process, please [let us know](mailto:boris@chrysalice.org) so we can do better.
+
+All personally identifiable information has been scrambled using the [data anonymiser](https://github.com/borisbaldassari/data-anonymiser) Perl module. As a result there is **no clear email address** in this dataset, **nor any UUID or name**. However all identical information produces the same encrypted string, which means that one can still identify identical data without knowing what it actually is. As an example email addresses are split (name, company) and encoded separately, which enables one to e.g. identify posters from the same company without knowing the company.
+
+The anonymisation technique used basically encrypts information and then throws away the private key. Please refer to the [documentation published on github](https://github.com/borisbaldassari/data-anonymiser) for more details.
+
+
+## About this document
+
+This document is a [R Markdown document](http://rmarkdown.rstudio.com) and is composed of both text (like this one) and dynamically computed information (mostly in the sections below) executed on the data itself. This ensures that the documentation is always synchronised with the data, and serves as a test suite for the dataset.
+
+
+## Basic summary
+
+* **Generated date**: `r date()`
+* **First date**: `r first(index(project.xts))`
+* **Last date**: `r last(index(project.xts))`
+* **Number of posts**: `r nrow(project.xts)`
+* **Number of attributes**: `r ncol(project.xts)`
+
+
+# Structure of data
+
+This dataset is composed of a single big CSV file. Attributes are: ``r names.orig``.
+
+Examples are provided at the end of this file to demonstrate how to use it in R.
+
+## list {#list}
+
+* Description: The mailing list and project of the post.
+* Type: String
+
+Examples: 
+```{r list.sample, warning=FALSE, echo=F, results='asis'}
+extract <- sample(unique(project.csv$list), size=5)
+kable( extract, caption="Sample of list names", col.names = c('Project list names'))
+```
+
+## messageId {#message_id}
+
+* Description: A unique identifier for the post.
+* Type: String (Scrambled Base64)
+
+Examples: 
+```{r messageid.sample, warning=FALSE, echo=FALSE, results='asis'}
+extract <- sample(unique(project.csv$messageid), size=5)
+kable( extract, caption="Sample of message IDs", col.names = c('Message ID'))
+```
+
+## Subject {#subject}
+
+* Description: The subject of the post as sent on the mailing list.
+* Type: String 
+
+Examples: 
+```{r subject.sample, warning=FALSE, echo=FALSE, results='asis'}
+extract <- sample(unique(project.csv$subject), size=5)
+kable( extract, caption="Sample of email subjects", col.names = c('Subject'))
+```
+
+## Sent at {#sent_at}
+
+* Description: The time of sending for the post.
+* Type: Date (ISO 8601)
+
+Main characteristics:
+
+* **First date**: `r first(index(project.xts))`
+* **Last date**: `r last(index(project.xts))`
+
+Examples: 
+```{r sentat.sample, warning=FALSE, echo=FALSE, results='asis'}
+extract <- sample(project.csv$sent_at, size=5)
+kable( extract, caption="Sample of sent dates", col.names = c('Sent date'))
+```
+
+
+## Sender name
+
+* Description: The name of the sender of the post.
+* Type: String (Scrambled Base64)
+* Number of unique entries: `r length(unique(project.csv$sender_name))`
+
+Examples: 
+```{r sendername.sample, warning=FALSE, echo=FALSE, results='asis'}
+extract <- sample(project.csv$sender_name, size=5)
+kable( extract, caption="Sample of sender names", col.names = c('Sender names'))
+```
+
+Note: A single name repeated several times will always result in the same scrambled ID. This way it is possible to identify same-author posts without actually knowing the name of the sender.
+
+## Sender address
+
+* Description: The email address of the sender, encoded.
+* Type: String (Scrambled Base64)
+* Number of unique entries: `r length(unique(project.csv$sender_addr))`
+
+Examples: 
+```{r senderaddr.sample, warning=FALSE, echo=FALSE, results='asis'}
+extract <- sample(project.csv$sender_addr, size=5)
+kable( extract, caption="Sample of sender addresses", col.names = c('Sender addresses'))
+```
+
+Note: A single email address repeated several times will always result in the same scrambled email address. Furthermore both parts of the email (name, company) are individually scrambled, which means that one can identify email addresses from the same company without actually knowing the real company or name of the sender.
+
+# Using the dataset
+
+## Reading CSV file
+
+Reading file from `r file.in`. 
+
+```{r examples.init, echo=T}
+project.csv <- read.csv(file.in, header=T)
+```
+
+We add a column for the Company, which we extract from the email address (i.e. the domain name):
+
+```{r examples.init.comp, echo=T}
+project.csv$Company <- substr(x = project.csv$sender_addr, 18, 33)
+```
+
+Number of columns in this dataset:
+
+```{r examples.ncol, echo=T}
+ncol(project.csv)
+```
+
+Number of entries in this dataset:
+
+```{r examples.nrow, echo=T}
+nrow(project.csv)
+```
+
+Names of columns: 
+
+```{r examples.names, echo=T}
+names(project.csv)
+```
+
+
+## Using time series (xts)
+
+The dataset needs to be converted to a `xts` object. We can use the `sent_at` attribute as a time index.
+
+```{r examples.xts, echo=T}
+require(xts)
+project.xts <- xts(x = project.csv, order.by = parse_iso_8601(project.csv$sent_at))
+```
+
+## Plotting number of monthly posts
+
+When considering the timeline of the dataset, it can be misleading when there several submissions on a short period of time, compared to sparse time ranges. We'll use the `apply.monthly` function from `xts` to normalise the total number of monthly submissions.
+
+```{r examples.xts.plot}
+project.monthly <- apply.monthly(x=project.xts$sent_at, FUN=nrow)
+
+autoplot(project.monthly, geom='line') + 
+  theme_minimal() + ylab("Number of posts") + xlab("Time") + ggtitle("Number of monthly posts")
+```
+
+## Plotting number of monthly reporters
+
+One author can post several emails on the mailing list. Let's plot the monthly number of distinct authors on the mailing list. For this we need to count the number of unique occurrences of the email address (attribute `sender_attr`).
+
+```{r xts.monthly.reporters}
+count_unique <- function(x) { length(unique(x)) }
+project.monthly <- apply.monthly(x=project.xts$sender_addr, FUN=count_unique)
+
+autoplot(project.monthly, geom='line') + 
+  theme_minimal() + ylab("Number of authors") + xlab("Time") + ggtitle("Number of monthly distinct authors")
+```
+
+
+## Plotting activity of authors
+
+We want to plot the number of emails sent by each author regardless of the mailing list they were sent on. We display only the 10 top posters:
+
+```{r reporters.sample, warning=FALSE, echo=FALSE, results='asis'}
+authors <- sort(x = table(project.csv$sender_addr), decreasing = TRUE)
+authors.10 <- head( authors, n = 10)
+authors.subset.df <- as.data.frame(authors.10)
+authors.subset.df$Company <- substr(x = authors.subset.df$Var1, 18, 33)
+
+kable( authors.subset.df, caption="Top 10 senders on mailing lists", col.names = c('Sender address', 'Number of posts', 'Company'))
+```
+
+```{r reporters.plot.init, echo=F}
+n <- 50
+```
+
+Now plot these `r n` top posters with ggplot and use the company (i.e. second part of the email address) for the colour:
+
+```{r reporters.plot}
+authors.subset <- head( authors, n = n)
+
+authors.subset.df <- as.data.frame(authors.subset)
+names(authors.subset.df) <- c('ID', 'Posts')
+authors.subset.df$Author <- substr(x = authors.subset.df$ID, 1, 16)
+authors.subset.df$Company <- substr(x = authors.subset.df$ID, 18, 33)
+
+p <- ggplot(data=authors.subset.df, aes(x=reorder(Author, -Posts), y = Posts, fill = Company)) + 
+  geom_bar(stat="identity") + 
+  theme_minimal() + ylab("Number of posts") + xlab('Posters') + 
+  ggtitle(paste(n, " overall top posters on Eclipse mailing lists", sep="")) +
+  theme( axis.text.x = element_text(angle=60, size = 7, hjust = 1))
+g <- ggplotly(p)
+g
+#api_create(g, filename = "r-eclipse_mls_authors")
+```
+
+
+## Posts by Company
+
+We want to know what companies posted the most messages in mailing listsacross years. To that end we select the 20 companies that have the larger number of posts and plot the number of messages by company year after year.
+
+```{r comp.init}
+comps_list <- head( sort( x = table(project.csv$Company), decreasing = T ), n=20 )
+df <- data.frame(Company=character(), 
+                 Year=character(),
+                 Posts=integer(), 
+                 stringsAsFactors=FALSE) 
+for (i in seq_along(1:20)) {
+  project.comp.xts <- project.xts[project.xts$Company == names(comps_list)[[i]],]
+  project.comp.yearly <- apply.yearly(x=project.comp.xts$Company, FUN=nrow)
+  for (j in seq_along(1:nrow(project.comp.yearly))) {
+    year <- format(index(project.comp.yearly)[[j]],"%Y")
+    comp <- as.data.frame(t(c(names(comps_list)[[i]], year, as.integer(project.comp.yearly[[j]]))))
+    names(comp) <- c("Company", "Year", "Posts")
+    df <- rbind(df, comp)
+  }
+}
+
+df$Company <- as.character(df$Company)
+df <- df[order(df$Company),]
+
+p <- ggplot(data=df, aes(x=Year, y = Posts, fill = Company)) + geom_bar(stat="identity") + 
+  theme_minimal() + ylab("Number of posts") + xlab('Years') + 
+  ggtitle("Top 20 Companies involved in Eclipse mailing lists across years") +
+  theme( axis.text.x = element_text(angle=60, size = 7, hjust = 1))
+
+g <- ggplotly(p)
+g
+#api_create(g, filename = "r-eclipse_mls_companies")
+```
+
+
+
diff --git a/eclipse_mls/page/1/index.html b/eclipse_mls/page/1/index.html
new file mode 100644
index 0000000..d22568a
--- /dev/null
+++ b/eclipse_mls/page/1/index.html
@@ -0,0 +1 @@
+<!DOCTYPE html><html><head><title>https://download.eclipse.org/dataeggs/eclipse_mls/</title><link rel="canonical" href="https://download.eclipse.org/dataeggs/eclipse_mls/"/><meta name="robots" content="noindex"><meta charset="utf-8" /><meta http-equiv="refresh" content="0; url=https://download.eclipse.org/dataeggs/eclipse_mls/" /></head></html>
\ No newline at end of file
diff --git a/favicon-16x16.png b/favicon-16x16.png
new file mode 100644
index 0000000..1037e6e
--- /dev/null
+++ b/favicon-16x16.png
Binary files differ
diff --git a/favicon-32x32.png b/favicon-32x32.png
new file mode 100644
index 0000000..ab383d8
--- /dev/null
+++ b/favicon-32x32.png
Binary files differ
diff --git a/favicon-96x96.png b/favicon-96x96.png
new file mode 100644
index 0000000..bb8709f
--- /dev/null
+++ b/favicon-96x96.png
Binary files differ
diff --git a/favicon.ico b/favicon.ico
new file mode 100644
index 0000000..e3c0bbc
--- /dev/null
+++ b/favicon.ico
Binary files differ
diff --git a/favicon.png b/favicon.png
new file mode 100644
index 0000000..acde088
--- /dev/null
+++ b/favicon.png
Binary files differ
diff --git a/images/data_transformation.png b/images/data_transformation.png
new file mode 100644
index 0000000..f204f11
--- /dev/null
+++ b/images/data_transformation.png
Binary files differ
diff --git a/images/dataeggs-header.png b/images/dataeggs-header.png
new file mode 100644
index 0000000..6c79add
--- /dev/null
+++ b/images/dataeggs-header.png
Binary files differ
diff --git a/images/dataeggs-logo.png b/images/dataeggs-logo.png
new file mode 100644
index 0000000..ff2e338
--- /dev/null
+++ b/images/dataeggs-logo.png
Binary files differ
diff --git a/images/dataeggs-menu.png b/images/dataeggs-menu.png
new file mode 100644
index 0000000..ff2e338
--- /dev/null
+++ b/images/dataeggs-menu.png
Binary files differ
diff --git a/images/logo-eclipse-foundation.png b/images/logo-eclipse-foundation.png
new file mode 100644
index 0000000..bfd8633
--- /dev/null
+++ b/images/logo-eclipse-foundation.png
Binary files differ
diff --git a/images/logo.png b/images/logo.png
new file mode 100644
index 0000000..7d21219
--- /dev/null
+++ b/images/logo.png
Binary files differ
diff --git a/index.html b/index.html
new file mode 100644
index 0000000..aa34b0c
--- /dev/null
+++ b/index.html
@@ -0,0 +1,218 @@
+<!DOCTYPE html>
+<html lang='en' dir='auto'><head>
+  <meta charset='utf-8'>
+<meta name='viewport' content='width=device-width, initial-scale=1'>
+<meta name='description' content=''>
+<meta name='theme-color' content='#ffcd00'>
+
+<meta property='og:title' content='Eclipse DataEggs'>
+<meta property='og:description' content=''>
+<meta property='og:url' content='https://download.eclipse.org/dataeggs/'>
+<meta property='og:site_name' content='Eclipse DataEggs'>
+<meta property='og:type' content='website'><meta property='og:image' content='https://download.eclipse.org/dataeggs/images/dataeggs-header.png'><meta name='twitter:card' content='summary_large_image'><meta property='twitter:image' content='https://download.eclipse.org/dataeggs/images/dataeggs-header.png'>
+
+<meta name="generator" content="Hugo 0.83.1" />
+
+  <title>Eclipse DataEggs</title>
+  <link rel='canonical' href='https://download.eclipse.org/dataeggs/'>
+  
+    <link href="https://download.eclipse.org/dataeggs/index.xml" rel="alternate" type="application/rss+xml" title="Eclipse DataEggs" />
+  
+  
+  <link rel='icon' href='/dataeggs/favicon.ico'>
+<link rel='stylesheet' href='/dataeggs/assets/css/main.ab98e12b.css'><link rel='stylesheet' href='/dataeggs/css/custom.css'><style>
+:root{--color-accent:#ffcd00;}
+</style>
+
+<script type="application/javascript">
+var doNotTrack = false;
+if (!doNotTrack) {
+	window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)};ga.l=+new Date;
+	ga('create', 'UA-3675452-15', 'auto');
+	
+	ga('send', 'pageview');
+}
+</script>
+<script async src='https://www.google-analytics.com/analytics.js'></script>
+
+  
+
+</head>
+<body class='home type-page has-cover has-sidebar'>
+
+  <div class='site'><div id='sidebar' class='sidebar'>
+  <a class='screen-reader-text' href='#main-menu'>Skip to Main Menu</a>
+
+  <div class='container'><section class='widget widget-about sep-after'>
+  <header>
+    
+    <div class='logo'>
+      <a href='/dataeggs/'>
+        <img src='/dataeggs/images/dataeggs-menu.png'>
+      </a>
+    </div>
+    
+    <div class='desc'>
+    Open. Safe. Easy.
+    </div>
+  </header>
+
+</section>
+<section class='widget widget-search sep-after'>
+  <header>
+    <h4 class='title widget-title'>Search</h4>
+  </header>
+
+  <form action='/dataeggs/search' id='search-form' class='search-form'>
+    <label>
+      <span class='screen-reader-text'>Search</span>
+      <input id='search-term' class='search-term' type='search' name='q' placeholder='Search&hellip;'>
+    </label></form>
+
+</section>
+<section class='widget widget-sidebar_menu sep-after'><nav id='sidebar-menu' class='menu sidebar-menu' aria-label='Sidebar Menu'>
+    <div class='container'>
+      <ul><li class='item current'>
+  <a aria-current='page' href='/dataeggs/'>Home</a></li><li class='item'>
+  <a href='/dataeggs/privacy/'>Privacy</a></li><li class='item'>
+  <a href='/dataeggs/aeri_stacktraces/'>AERI</a></li><li class='item'>
+  <a href='/dataeggs/eclipse_mls/'>MLS</a></li></ul>
+    </div>
+  </nav>
+
+</section><section class='widget widget-social_menu sep-after'><nav aria-label='Social Menu'>
+    <ul><li>
+        <a href='https://gitlab.eclipse.org/dataeggs/dataeggs' target='_blank' rel='noopener me'>
+          <span class='screen-reader-text'>Open Gitlab account in new tab</span><svg class='icon' xmlns='http://www.w3.org/2000/svg' viewbox='0 0 24 24' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' aria-hidden='true'>
+    
+    <title>GitLab icon</title>  <path d="M22.65 14.39L12 22.13 1.35 14.39a.84.84 0 0 1-.3-.94l1.22-3.78 2.44-7.51A.42.42 0 0 1 4.82 2a.43.43 0 0 1 .58 0 .42.42 0 0 1 .11.18l2.44 7.49h8.1l2.44-7.51A.42.42 0 0 1 18.6 2a.43.43 0 0 1 .58 0 .42.42 0 0 1 .11.18l2.44 7.51L23 13.45a.84.84 0 0 1-.35.94z"/>
+</svg>
+</a>
+      </li><li>
+        <a href='mailto:boris@chrysalice.org' target='_blank' rel='noopener me'>
+          <span class='screen-reader-text'>Contact via Email</span><svg class='icon' xmlns='http://www.w3.org/2000/svg' viewbox='0 0 24 24' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' aria-hidden='true'>
+    
+    <path d="M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z"></path><polyline points="22,6 12,13 2,6"></polyline>
+</svg>
+</a>
+      </li></ul>
+  </nav>
+</section></div>
+
+  <div class='sidebar-overlay'></div>
+</div><div class='main'><a class='screen-reader-text' href='#content'>Skip to Content</a>
+
+<button id='sidebar-toggler' class='sidebar-toggler' aria-controls='sidebar'>
+  <span class='screen-reader-text'>Toggle Sidebar</span>
+  <span class='open'><svg class='icon' xmlns='http://www.w3.org/2000/svg' viewbox='0 0 24 24' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' aria-hidden='true'>
+    
+    
+  <line x1="3" y1="12" x2="21" y2="12" />
+  <line x1="3" y1="6" x2="21" y2="6" />
+  <line x1="3" y1="18" x2="21" y2="18" />
+
+</svg>
+</span>
+  <span class='close'><svg class='icon' xmlns='http://www.w3.org/2000/svg' viewbox='0 0 24 24' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' aria-hidden='true'>
+    
+    
+  <line x1="18" y1="6" x2="6" y2="18" />
+  <line x1="6" y1="6" x2="18" y2="18" />
+
+</svg>
+</span>
+</button><div class='header-widgets'>
+        <div class='container'><style>.widget-breadcrumbs li:after{content:'\2f '}</style>
+  <section class='widget widget-breadcrumbs sep-after'>
+    <nav id='breadcrumbs'>
+      <ol><li><span>Home</span></li></ol>
+    </nav>
+  </section></div>
+      </div>
+
+      <header id='header' class='header site-header'>
+        <div class='container sep-after'>
+          <div class='header-info'><p class='desc site-desc'></p>
+          </div>
+        </div>
+      </header>
+
+      <main id='content'>
+
+
+
+<div class='entry'>
+  <div class='entry-cover'>
+  <figure class='container cover-normal'>
+    <img src='images/dataeggs-header.png'/>
+    
+  </figure>
+</div>
+  <div class='container entry-content'>
+  <p><a href="https://www.eclipse.org/dataeggs">Eclipse DataEggs</a> provides datasets related to the development of Eclipse projects, mainly for software practitionners and researchers.</p>
+<p>The datasets include various pieces of data retrieved from the Eclipse forge: <strong>Mailing lists</strong>, <strong>Project development data</strong>, and <strong>AERI stacktraces</strong>, all in handy CSV and JSON formats. Each dataset comes with R Markdown documents describing its content and providing hints about how to use it. Examples provided mainly use the <a href="https://r-project.org">R statistical analysis software</a>.</p>
+<h2 id="content">Content</h2>
+<p>The datasets provided include:</p>
+<ul>
+<li><a href="eclipse_mls">Mailing lists</a> (full mboxes and csv extracts) hosted at the Eclipse forge with their <a href="eclipse_mls/mbox_csv_analysis">documentation and examples</a>.</li>
+<li><a href="aeri_stacktraces">AERI exception stacktraces</a> (not updated anymore, historical data only) includes 2 datasets: problems (see <a href="aeri_stacktraces/problems_analysis.pdf">documentation</a>) and incidents (see <a href="aeri_stacktraces/problems_incidents.pdf">documentation</a>).</li>
+<li><a href="projects/">Development data</a> from Eclipse projects. Depending on data sources available for each project, the following information is provided:
+<ul>
+<li>SCM (git).</li>
+<li>ITS (Bugzilla, GitHub issues, GitLab issues).</li>
+<li>CI (Jenkins).</li>
+<li>PMI checks.</li>
+<li>Stack Overflow statistics.</li>
+<li>Scancode analysis (executed on our server).</li>
+</ul>
+</li>
+</ul>
+<p>Privacy has been a major concern from the beginning. Once extracted, data is anonymised using <a href="https://github.com/borisbaldassari/data-anonymiser">data-anonymiser</a> and published in the downloads section of the project. See <a href="privacy/">our documentation for more details</a></p>
+<p>All data related to projects is retrieved from the <strong>Eclipse Alambic instance</strong> at <a href="https://eclipse.alambic.io">https://eclipse.alambic.io</a>. <strong>Alambic</strong> is <strong>an open-source framework for development data extraction and processing</strong>, for more information see <a href="https://alambic.io">https://alambic.io</a>.</p>
+<h2 id="contributing">Contributing</h2>
+<p>All work on the Eclipse DataEggs project is handled transparently at <a href="https://gitlab.eclipse.org/eclipse/dataeggs/">https://gitlab.eclipse.org/eclipse/dataeggs/</a> .</p>
+<p>We&rsquo;re open: if you&rsquo;d like to contribute, please join us! You can:</p>
+<ul>
+<li>Get the code and propose merge requests on the <a href="https://gitlab.eclipse.org/eclipse/dataeggs/dataeggs">DataEggs repository</a>.</li>
+<li>Should you have any problem, request or question, please fill an issue in the <a href="https://gitlab.eclipse.org/eclipse/dataeggs/dataeggs/-/issues">Eclipse GitLab project</a> page.</li>
+</ul>
+<h2 id="licencing">Licencing</h2>
+<p>All datasets are published under the <a href="https://creativecommons.org/licenses/by-sa/4.0/">Creative Commons BY-Attribution-Share Alike 4.0 (International)</a>.</p>
+
+</div>
+
+</div>
+      </main>
+
+      <footer id='footer' class='footer'>
+        <div class='container sep-before'><div class="row">
+	    <div class="column">
+	      <a href="http://www.eclipse.org/"  target="_blank"><img src="/dataeggs/images/logo-eclipse-foundation.png" alt="Eclipse Foundation logo"></a>
+	    </div>	  
+	    <div class="column">
+	      <p></p>
+	      <p id="copyright">Copyright © 2021 Eclipse Foundation, Inc.<br>All Rights Reserved.</p>
+	    </div>
+	  </div>
+	  <div class="row">
+	    <p><a href="http://www.eclipse.org/legal/privacy.php" target="_blank">Privacy Policy</a> /
+	      <a href="http://eclipse.org/" target="_blank">Eclipse</a> /
+	      <a href="http://www.eclipse.org/legal/termsofuse.php" target="_blank">Terms of Use</a> /
+	      <a href="http://www.eclipse.org/legal/copyright.php" target="_blank">Copyright Agent</a> /
+	      <a href="http://www.eclipse.org/legal/" target="_blank">Legal</a> /
+	      <a href="http://www.eclipse.org/org/foundation/contact.php" target="_blank"> Contact Us</a></p>
+	  </div>
+	  
+        </div>
+      </footer>
+
+    </div>
+  </div><script>window.__assets_js_src="/dataeggs/assets/js/"</script>
+
+<script src='/dataeggs/assets/js/main.c3bcf2df.js'></script><script src='/dataeggs/js/custom.js'></script>
+
+
+</body>
+
+</html>
+
diff --git a/index.php b/index.php
deleted file mode 100644
index b07853d..0000000
--- a/index.php
+++ /dev/null
@@ -1 +0,0 @@
-<?php header('Location: http://eclipse.org/projects/project.php?id=technology.dataeggs'); ?>
\ No newline at end of file
diff --git a/index.xml b/index.xml
new file mode 100644
index 0000000..584d004
--- /dev/null
+++ b/index.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
+  <channel>
+    <title>Home on Eclipse DataEggs</title>
+    <link>https://download.eclipse.org/dataeggs/</link>
+    <description>Recent content in Home on Eclipse DataEggs</description>
+    <generator>Hugo -- gohugo.io</generator><atom:link href="https://download.eclipse.org/dataeggs/index.xml" rel="self" type="application/rss+xml" />
+    <item>
+      <title>Datasets Privacy</title>
+      <link>https://download.eclipse.org/dataeggs/privacy/</link>
+      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
+      
+      <guid>https://download.eclipse.org/dataeggs/privacy/</guid>
+      <description>Introduction This document presents the datasets generated for Eclipse DataEggs, discusses the implications it has regarding privacy, and describes what has been achieved to ensure data is safe.
+All datasets are anonymised: fields that could be used to identify individuals or companies either directly or indirectly have been transformed using the Anonymise::Utility Perl module.
+The intended audience of the datasets is composed of:
+ Research laboratories, mainly in the field of software engineering.</description>
+    </item>
+    
+  </channel>
+</rss>
diff --git a/index_for_custom_site.php b/index_for_custom_site.php
deleted file mode 100644
index a3739bb..0000000
--- a/index_for_custom_site.php
+++ /dev/null
@@ -1,66 +0,0 @@
-<?php
-/*******************************************************************************
- * Copyright (c) 2014 Eclipse Foundation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *    Christopher Guindon (Eclipse Foundation) - Initial implementation
- *******************************************************************************/
-
-  require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/app.class.php");
-  require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/nav.class.php");
-  require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/menu.class.php");
-
-  $App   = new App();
-  $Nav  = new Nav();
-  $Menu   = new Menu();
-
-  # Shared variables/configs for all pages of your website.
-  require_once('_projectCommon.php');
-
-  # Begin: page-specific settings.  Change these.
-  $pageTitle = "Starterkit Template";
-  $pageKeywords = "Add maximal 20 keywords and seperate them from each other by a comma en a space.";
-  $pageAuthor = "Christopher Guindon";
-
-  # Initialize custom solstice $variables.
-  $variables = array();
-
-  # Add classes to <body>. (String)
-  $variables['body_classes'] = '';
-
-  # Insert custom HTML in the breadcrumb region. (String)
-  $variables['breadcrumbs_html'] = "";
-
-  # Hide the breadcrumbs. (Bool)
-  $variables['hide_breadcrumbs'] = FALSE;
-
-  # Insert HTML before the left nav. (String)
-  $variables['leftnav_html'] = '';
-
-  # Update the main container class (String)
-  $variables['main_container_classes'] = 'container';
-
-  # Insert HTML after opening the main content container, before the left sidebar. (String)
-  $variables['main_container_html'] = '';
-
-  # Set Solstice theme variables. (Array)
-  $App->setThemeVariables($variables);
-
-  # Place your html content in a file called content/en_pagename.php
-  ob_start();
-  include("content/en_" . $App->getScriptName());
-  $html = ob_get_clean();
-
-  # Insert extra html before closing </head> tag.
-  //$App->AddExtraHtmlHeader('<link rel="stylesheet" type="text/css" href="style.css" media="screen" />');
-
-  # Insert script/html before closing </body> tag.
-  //$App->AddExtraJSFooter('<script type="text/javascript" src="script.min.js"></script>');
-
-  # Generate the web page
-  $App->generatePage($theme, $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html);
-
diff --git a/page/index.html b/page/index.html
new file mode 100644
index 0000000..b648fe2
--- /dev/null
+++ b/page/index.html
@@ -0,0 +1,216 @@
+<!DOCTYPE html>
+<html lang='en' dir='auto'><head>
+  <meta charset='utf-8'>
+<meta name='viewport' content='width=device-width, initial-scale=1'>
+<meta name='description' content=''>
+<meta name='theme-color' content='#ffcd00'>
+
+<meta property='og:title' content='Pages • Eclipse DataEggs'>
+<meta property='og:description' content=''>
+<meta property='og:url' content='https://download.eclipse.org/dataeggs/page/'>
+<meta property='og:site_name' content='Eclipse DataEggs'>
+<meta property='og:type' content='website'><meta name='twitter:card' content='summary'>
+
+<meta name="generator" content="Hugo 0.83.1" />
+
+  <title>Pages • Eclipse DataEggs</title>
+  <link rel='canonical' href='https://download.eclipse.org/dataeggs/page/'>
+  
+    <link href="https://download.eclipse.org/dataeggs/page/index.xml" rel="alternate" type="application/rss+xml" title="Eclipse DataEggs" />
+  
+  
+  <link rel='icon' href='/dataeggs/favicon.ico'>
+<link rel='stylesheet' href='/dataeggs/assets/css/main.ab98e12b.css'><link rel='stylesheet' href='/dataeggs/css/custom.css'><style>
+:root{--color-accent:#ffcd00;}
+</style>
+
+<script type="application/javascript">
+var doNotTrack = false;
+if (!doNotTrack) {
+	window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)};ga.l=+new Date;
+	ga('create', 'UA-3675452-15', 'auto');
+	
+	ga('send', 'pageview');
+}
+</script>
+<script async src='https://www.google-analytics.com/analytics.js'></script>
+
+  
+
+</head>
+<body class='section type-page has-sidebar'>
+
+  <div class='site'><div id='sidebar' class='sidebar'>
+  <a class='screen-reader-text' href='#main-menu'>Skip to Main Menu</a>
+
+  <div class='container'><section class='widget widget-about sep-after'>
+  <header>
+    
+    <div class='logo'>
+      <a href='/dataeggs/'>
+        <img src='/dataeggs/images/dataeggs-menu.png'>
+      </a>
+    </div>
+    
+    <div class='desc'>
+    Open. Safe. Easy.
+    </div>
+  </header>
+
+</section>
+<section class='widget widget-search sep-after'>
+  <header>
+    <h4 class='title widget-title'>Search</h4>
+  </header>
+
+  <form action='/dataeggs/search' id='search-form' class='search-form'>
+    <label>
+      <span class='screen-reader-text'>Search</span>
+      <input id='search-term' class='search-term' type='search' name='q' placeholder='Search&hellip;'>
+    </label></form>
+
+</section>
+<section class='widget widget-sidebar_menu sep-after'><nav id='sidebar-menu' class='menu sidebar-menu' aria-label='Sidebar Menu'>
+    <div class='container'>
+      <ul><li class='item'>
+  <a href='/dataeggs/'>Home</a></li><li class='item'>
+  <a href='/dataeggs/privacy/'>Privacy</a></li><li class='item'>
+  <a href='/dataeggs/aeri_stacktraces/'>AERI</a></li><li class='item'>
+  <a href='/dataeggs/eclipse_mls/'>MLS</a></li></ul>
+    </div>
+  </nav>
+
+</section><section class='widget widget-social_menu sep-after'><nav aria-label='Social Menu'>
+    <ul><li>
+        <a href='https://gitlab.eclipse.org/dataeggs/dataeggs' target='_blank' rel='noopener me'>
+          <span class='screen-reader-text'>Open Gitlab account in new tab</span><svg class='icon' xmlns='http://www.w3.org/2000/svg' viewbox='0 0 24 24' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' aria-hidden='true'>
+    
+    <title>GitLab icon</title>  <path d="M22.65 14.39L12 22.13 1.35 14.39a.84.84 0 0 1-.3-.94l1.22-3.78 2.44-7.51A.42.42 0 0 1 4.82 2a.43.43 0 0 1 .58 0 .42.42 0 0 1 .11.18l2.44 7.49h8.1l2.44-7.51A.42.42 0 0 1 18.6 2a.43.43 0 0 1 .58 0 .42.42 0 0 1 .11.18l2.44 7.51L23 13.45a.84.84 0 0 1-.35.94z"/>
+</svg>
+</a>
+      </li><li>
+        <a href='mailto:boris@chrysalice.org' target='_blank' rel='noopener me'>
+          <span class='screen-reader-text'>Contact via Email</span><svg class='icon' xmlns='http://www.w3.org/2000/svg' viewbox='0 0 24 24' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' aria-hidden='true'>
+    
+    <path d="M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z"></path><polyline points="22,6 12,13 2,6"></polyline>
+</svg>
+</a>
+      </li></ul>
+  </nav>
+</section></div>
+
+  <div class='sidebar-overlay'></div>
+</div><div class='main'><a class='screen-reader-text' href='#content'>Skip to Content</a>
+
+<button id='sidebar-toggler' class='sidebar-toggler' aria-controls='sidebar'>
+  <span class='screen-reader-text'>Toggle Sidebar</span>
+  <span class='open'><svg class='icon' xmlns='http://www.w3.org/2000/svg' viewbox='0 0 24 24' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' aria-hidden='true'>
+    
+    
+  <line x1="3" y1="12" x2="21" y2="12" />
+  <line x1="3" y1="6" x2="21" y2="6" />
+  <line x1="3" y1="18" x2="21" y2="18" />
+
+</svg>
+</span>
+  <span class='close'><svg class='icon' xmlns='http://www.w3.org/2000/svg' viewbox='0 0 24 24' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' aria-hidden='true'>
+    
+    
+  <line x1="18" y1="6" x2="6" y2="18" />
+  <line x1="6" y1="6" x2="18" y2="18" />
+
+</svg>
+</span>
+</button><div class='header-widgets'>
+        <div class='container'>
+    <style>.widget-breadcrumbs li:after{content:'\2f '}</style>
+  <section class='widget widget-breadcrumbs sep-after'>
+    <nav id='breadcrumbs'>
+      <ol><li><a href='/dataeggs/'>Home</a></li><li><span>Pages</span></li></ol>
+    </nav>
+  </section></div>
+      </div>
+
+      <header id='header' class='header site-header'>
+        <div class='container sep-after'>
+          <div class='header-info'><p class='site-title title'>Eclipse DataEggs</p><p class='desc site-desc'></p>
+          </div>
+        </div>
+      </header>
+
+      <main id='content'>
+
+
+<header class='header'>
+  <div class='container sep-after'>
+    <div class='header-info'>
+      <h1 class='title'>Pages</h1>
+
+      
+
+    </div>
+  </div>
+</header>
+
+
+
+
+<div class='container list-container'>
+  <ul class='list'>
+    
+      <li class='item'>
+  <div class='meta'>
+    <span>
+  <span class='screen-reader-text'>Posted on </span>
+  <time datetime='0001-01-01T00:00:00Z'>0001, Jan 01</time>
+</span>
+
+  </div>
+  <header class='item-header'>
+    <h3 class='item-title'>
+      <a href='/dataeggs/privacy/'>Datasets Privacy</a>
+    </h3>
+  </header>
+</li>
+
+    
+  </ul>
+
+  
+
+</div>
+
+      </main>
+
+      <footer id='footer' class='footer'>
+        <div class='container sep-before'><div class="row">
+	    <div class="column">
+	      <a href="http://www.eclipse.org/"  target="_blank"><img src="/dataeggs/images/logo-eclipse-foundation.png" alt="Eclipse Foundation logo"></a>
+	    </div>	  
+	    <div class="column">
+	      <p></p>
+	      <p id="copyright">Copyright © 2021 Eclipse Foundation, Inc.<br>All Rights Reserved.</p>
+	    </div>
+	  </div>
+	  <div class="row">
+	    <p><a href="http://www.eclipse.org/legal/privacy.php" target="_blank">Privacy Policy</a> /
+	      <a href="http://eclipse.org/" target="_blank">Eclipse</a> /
+	      <a href="http://www.eclipse.org/legal/termsofuse.php" target="_blank">Terms of Use</a> /
+	      <a href="http://www.eclipse.org/legal/copyright.php" target="_blank">Copyright Agent</a> /
+	      <a href="http://www.eclipse.org/legal/" target="_blank">Legal</a> /
+	      <a href="http://www.eclipse.org/org/foundation/contact.php" target="_blank"> Contact Us</a></p>
+	  </div>
+	  
+        </div>
+      </footer>
+
+    </div>
+  </div><script>window.__assets_js_src="/dataeggs/assets/js/"</script>
+
+<script src='/dataeggs/assets/js/main.c3bcf2df.js'></script><script src='/dataeggs/js/custom.js'></script>
+
+
+</body>
+
+</html>
+
diff --git a/page/index.xml b/page/index.xml
new file mode 100644
index 0000000..e7ff495
--- /dev/null
+++ b/page/index.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
+  <channel>
+    <title>Pages on Eclipse DataEggs</title>
+    <link>https://download.eclipse.org/dataeggs/page/</link>
+    <description>Recent content in Pages on Eclipse DataEggs</description>
+    <generator>Hugo -- gohugo.io</generator><atom:link href="https://download.eclipse.org/dataeggs/page/index.xml" rel="self" type="application/rss+xml" />
+    <item>
+      <title>Datasets Privacy</title>
+      <link>https://download.eclipse.org/dataeggs/privacy/</link>
+      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
+      
+      <guid>https://download.eclipse.org/dataeggs/privacy/</guid>
+      <description>Introduction This document presents the datasets generated for Eclipse DataEggs, discusses the implications it has regarding privacy, and describes what has been achieved to ensure data is safe.
+All datasets are anonymised: fields that could be used to identify individuals or companies either directly or indirectly have been transformed using the Anonymise::Utility Perl module.
+The intended audience of the datasets is composed of:
+ Research laboratories, mainly in the field of software engineering.</description>
+    </item>
+    
+  </channel>
+</rss>
diff --git a/page/page/1/index.html b/page/page/1/index.html
new file mode 100644
index 0000000..abd0b30
--- /dev/null
+++ b/page/page/1/index.html
@@ -0,0 +1 @@
+<!DOCTYPE html><html><head><title>https://download.eclipse.org/dataeggs/page/</title><link rel="canonical" href="https://download.eclipse.org/dataeggs/page/"/><meta name="robots" content="noindex"><meta charset="utf-8" /><meta http-equiv="refresh" content="0; url=https://download.eclipse.org/dataeggs/page/" /></head></html>
\ No newline at end of file
diff --git a/privacy/index.html b/privacy/index.html
new file mode 100644
index 0000000..4356eed
--- /dev/null
+++ b/privacy/index.html
@@ -0,0 +1,349 @@
+<!DOCTYPE html>
+<html lang='en' dir='auto'><head>
+  <meta charset='utf-8'>
+<meta name='viewport' content='width=device-width, initial-scale=1'>
+<meta name='description' content='Introduction This document presents the datasets generated for Eclipse DataEggs, discusses the implications it has regarding privacy, and describes what has been achieved to ensure data is safe.
+All datasets are anonymised: fields that could be used to identify individuals or companies either directly or indirectly have been transformed using the Anonymise::Utility Perl module.
+The intended audience of the datasets is composed of:
+ Research laboratories, mainly in the field of software engineering.'>
+<meta name='theme-color' content='#ffcd00'>
+
+<meta property='og:title' content='Datasets Privacy • Eclipse DataEggs'>
+<meta property='og:description' content='Introduction This document presents the datasets generated for Eclipse DataEggs, discusses the implications it has regarding privacy, and describes what has been achieved to ensure data is safe.
+All datasets are anonymised: fields that could be used to identify individuals or companies either directly or indirectly have been transformed using the Anonymise::Utility Perl module.
+The intended audience of the datasets is composed of:
+ Research laboratories, mainly in the field of software engineering.'>
+<meta property='og:url' content='https://download.eclipse.org/dataeggs/privacy/'>
+<meta property='og:site_name' content='Eclipse DataEggs'>
+<meta property='og:type' content='article'><meta property='article:section' content='page'><meta name='twitter:card' content='summary'>
+
+<meta name="generator" content="Hugo 0.83.1" />
+
+  <title>Datasets Privacy • Eclipse DataEggs</title>
+  <link rel='canonical' href='https://download.eclipse.org/dataeggs/privacy/'>
+  
+  
+  <link rel='icon' href='/dataeggs/favicon.ico'>
+<link rel='stylesheet' href='/dataeggs/assets/css/main.ab98e12b.css'><link rel='stylesheet' href='/dataeggs/css/custom.css'><style>
+:root{--color-accent:#ffcd00;}
+</style>
+
+<script type="application/javascript">
+var doNotTrack = false;
+if (!doNotTrack) {
+	window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)};ga.l=+new Date;
+	ga('create', 'UA-3675452-15', 'auto');
+	
+	ga('send', 'pageview');
+}
+</script>
+<script async src='https://www.google-analytics.com/analytics.js'></script>
+
+  
+
+</head>
+<body class='page type-page has-sidebar has-emoji'>
+
+  <div class='site'><div id='sidebar' class='sidebar'>
+  <a class='screen-reader-text' href='#main-menu'>Skip to Main Menu</a>
+
+  <div class='container'><section class='widget widget-about sep-after'>
+  <header>
+    
+    <div class='logo'>
+      <a href='/dataeggs/'>
+        <img src='/dataeggs/images/dataeggs-menu.png'>
+      </a>
+    </div>
+    
+    <div class='desc'>
+    Open. Safe. Easy.
+    </div>
+  </header>
+
+</section>
+<section class='widget widget-search sep-after'>
+  <header>
+    <h4 class='title widget-title'>Search</h4>
+  </header>
+
+  <form action='/dataeggs/search' id='search-form' class='search-form'>
+    <label>
+      <span class='screen-reader-text'>Search</span>
+      <input id='search-term' class='search-term' type='search' name='q' placeholder='Search&hellip;'>
+    </label></form>
+
+</section>
+<section class='widget widget-sidebar_menu sep-after'><nav id='sidebar-menu' class='menu sidebar-menu' aria-label='Sidebar Menu'>
+    <div class='container'>
+      <ul><li class='item'>
+  <a href='/dataeggs/'>Home</a></li><li class='item current'>
+  <a aria-current='page' href='/dataeggs/privacy/'>Privacy</a></li><li class='item'>
+  <a href='/dataeggs/aeri_stacktraces/'>AERI</a></li><li class='item'>
+  <a href='/dataeggs/eclipse_mls/'>MLS</a></li></ul>
+    </div>
+  </nav>
+
+</section><section class='widget widget-social_menu sep-after'><nav aria-label='Social Menu'>
+    <ul><li>
+        <a href='https://gitlab.eclipse.org/dataeggs/dataeggs' target='_blank' rel='noopener me'>
+          <span class='screen-reader-text'>Open Gitlab account in new tab</span><svg class='icon' xmlns='http://www.w3.org/2000/svg' viewbox='0 0 24 24' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' aria-hidden='true'>
+    
+    <title>GitLab icon</title>  <path d="M22.65 14.39L12 22.13 1.35 14.39a.84.84 0 0 1-.3-.94l1.22-3.78 2.44-7.51A.42.42 0 0 1 4.82 2a.43.43 0 0 1 .58 0 .42.42 0 0 1 .11.18l2.44 7.49h8.1l2.44-7.51A.42.42 0 0 1 18.6 2a.43.43 0 0 1 .58 0 .42.42 0 0 1 .11.18l2.44 7.51L23 13.45a.84.84 0 0 1-.35.94z"/>
+</svg>
+</a>
+      </li><li>
+        <a href='mailto:boris@chrysalice.org' target='_blank' rel='noopener me'>
+          <span class='screen-reader-text'>Contact via Email</span><svg class='icon' xmlns='http://www.w3.org/2000/svg' viewbox='0 0 24 24' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' aria-hidden='true'>
+    
+    <path d="M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z"></path><polyline points="22,6 12,13 2,6"></polyline>
+</svg>
+</a>
+      </li></ul>
+  </nav>
+</section></div>
+
+  <div class='sidebar-overlay'></div>
+</div><div class='main'><a class='screen-reader-text' href='#content'>Skip to Content</a>
+
+<button id='sidebar-toggler' class='sidebar-toggler' aria-controls='sidebar'>
+  <span class='screen-reader-text'>Toggle Sidebar</span>
+  <span class='open'><svg class='icon' xmlns='http://www.w3.org/2000/svg' viewbox='0 0 24 24' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' aria-hidden='true'>
+    
+    
+  <line x1="3" y1="12" x2="21" y2="12" />
+  <line x1="3" y1="6" x2="21" y2="6" />
+  <line x1="3" y1="18" x2="21" y2="18" />
+
+</svg>
+</span>
+  <span class='close'><svg class='icon' xmlns='http://www.w3.org/2000/svg' viewbox='0 0 24 24' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' aria-hidden='true'>
+    
+    
+  <line x1="18" y1="6" x2="6" y2="18" />
+  <line x1="6" y1="6" x2="18" y2="18" />
+
+</svg>
+</span>
+</button><div class='header-widgets'>
+        <div class='container'>
+    
+    <style>.widget-breadcrumbs li:after{content:'\2f '}</style>
+  <section class='widget widget-breadcrumbs sep-after'>
+    <nav id='breadcrumbs'>
+      <ol><li><a href='/dataeggs/'>Home</a></li><li><span>Privacy</span></li></ol>
+    </nav>
+  </section></div>
+      </div>
+
+      <header id='header' class='header site-header'>
+        <div class='container sep-after'>
+          <div class='header-info'><p class='site-title title'>Eclipse DataEggs</p><p class='desc site-desc'></p>
+          </div>
+        </div>
+      </header>
+
+      <main id='content'>
+
+
+<article lang='en' class='entry'>
+  <header class='header entry-header'>
+  <div class='container sep-after'>
+    <div class='header-info'>
+      <h1 class='title'>Datasets Privacy</h1>
+      
+
+    </div>
+    
+
+  </div>
+</header>
+
+  
+  
+
+  <div class='container entry-content'>
+  <h2 id="introduction">Introduction</h2>
+<p>This document presents the datasets generated for Eclipse DataEggs, discusses the implications it has regarding privacy, and describes what has been achieved to ensure data is safe.</p>
+<p>All datasets are anonymised: fields that could be used to identify individuals or companies either directly or indirectly have been transformed using the <a href="https://github.com/borisbaldassari/data-anonymiser">Anonymise::Utility Perl module</a>.</p>
+<p>The intended audience of the datasets is composed of:</p>
+<ul>
+<li>Research laboratories, mainly in the field of software engineering.</li>
+<li>Software engineering practitioners, who may find useful to have real-world examples of software development projects.</li>
+</ul>
+<p>Should one have questions or remarks on the datasets, please <a href="mailto:boris@chrysalice.org">feel free to contact us</a>. All cases related to privacy will be handled with utmost diligence.</p>
+<h2 id="description-of-the-datasets">Description of the datasets</h2>
+<p>There are three types of datasets generated, each with its specific schema and attributes. The first step to preserve privacy is to describe the various datasets and their attributes, and identify what field could pose a threat.</p>
+<h3 id="aeri-stacktraces">AERI stacktraces</h3>
+<p>The <a href="../aeri_stacktraces/">AERI stacktraces dataset</a> contains information about exceptions encountered by users in the Eclipse IDE. It includes data about the exception itself, and the environment where it happened.</p>
+<p>The <a href="../aeri_stacktraces#format-incidents">incidents dataset</a> offers the following attributes:</p>
+<ul>
+<li><strong>Message</strong> (String) A short text summarising the error.</li>
+<li><strong>Code</strong> (Integer) The numeric status code logged with the error.</li>
+<li><strong>Severity</strong> (Factors) An estimate by the user reporting the error about its perceived severity.</li>
+<li><strong>Kind</strong> (Factors) The type of error recorded, as identified by the AERI system.</li>
+<li><strong>Plugin ID</strong> (String) The ID of the Eclipse plugin that threw the exception.</li>
+<li><strong>Plugin Version</strong> (String) The ID of the Eclipse plugin that threw the exception.</li>
+<li><strong>Status fingerprint</strong> (String) An identifier for the status of the incident. Used for duplicates detection.</li>
+<li><strong>Incident fingerprint</strong> (String) An identifier for the incident. Used for duplicates detection.</li>
+<li><strong>Incident fingerprint2</strong> (String) An identifier for the incident. Used for duplicates detection.</li>
+<li><strong>Timestamp</strong> (Date ISO 8601) The time of creation of the incident.</li>
+<li><strong>Saved On</strong> (Date ISO 8601) The time of last save of the problem.</li>
+<li><strong>OSGi Architecture</strong> (Factors) The architecture of the host, as specified in the OSGi bundle definition.</li>
+<li><strong>OSGi OS</strong> (Factors) The host operating system, as reported in OSGi.</li>
+<li><strong>OSGi OS Version</strong> (Factors) The host operating system version, as reported in OSGi.</li>
+<li><strong>OSGi Window Manager</strong> (Factors) The Window Manager used by the host, as reported in OSGi.</li>
+<li><strong>Eclipse Build ID</strong> (String) The Build ID of the Eclipse instance running when the exception occurred.</li>
+<li><strong>Eclipse Product</strong> (String) The Eclipse product impacted by the exception.</li>
+<li><strong>Java runtime version</strong> (String) The Java runtime of the host.</li>
+<li><strong>Comment Quality</strong> (Factors) An estimate of the user comment’s quality (throughfulness). User comments help people better understand the context of the exception.</li>
+</ul>
+<p>The [problems dataset](../aeri_stacktraces&quot; &gt;}}#format-problems) offers the following attributes:</p>
+<ul>
+<li><strong>Summary</strong> (String) A short text summarising the error.</li>
+<li><strong>Number of reporters</strong> (Integer) The number of people who reported this incident or problem.</li>
+<li><strong>Number of incidents</strong> (integer) The number of times this problem was identified in incidents.</li>
+<li><strong>V1 Status</strong> (Factors) The status of the problem attached to the error report.</li>
+<li><strong>Kind</strong> (Factors) The type of error recorded, as identified by the AERI system.</li>
+<li><strong>Created On</strong> (Date ISO 8601) The time of first appearance of the problem in an incident.</li>
+<li><strong>Modified On</strong> (Date ISO 8601) The time of last update of the problem in an incident.</li>
+<li><strong>Saved On</strong> (Date ISO 8601) The time of last save of the problem.</li>
+<li><strong>OSGi Architecture</strong> (Factors) The architecture of the host, as specified in the OSGi bundle definition.</li>
+<li><strong>OSGi OS</strong> (Factors) The host operating system, as reported in OSGi.</li>
+<li><strong>OSGi OS Version</strong> (Factors) The host operating system version, as reported in OSGi.</li>
+<li><strong>OSGi Window Manager</strong> (Factors) The Window Manager used by the host, as reported in OSGi.</li>
+<li><strong>Eclipse Build ID</strong> (String) The Build ID of the Eclipse instance running when the exception occurred.</li>
+<li><strong>Eclipse Product</strong> (String) The Eclipse product impacted by the exception.</li>
+<li><strong>Java runtime version</strong> (String) The Java runtime of the host.</li>
+</ul>
+<p>The <a href="https://download.eclipse.org/dataeggs/aeri_stacktraces//incidents_bundles_extract.csv.bz2">incidents bundle</a> offers the following attributes:</p>
+<ul>
+<li><strong>Bundle name</strong> (String) The name of the bundle impacted by the exception.</li>
+<li><strong>Bundle version</strong> (String) The version of the bundle impacted by the exception.</li>
+<li><strong>Value</strong> (Integer) The number of times the exception appeared for this bundle (name + version).</li>
+</ul>
+<h3 id="eclipse-mailing-lists">Eclipse Mailing lists</h3>
+<p>The <a href="../eclipse_mls/mbox_analysis.html">Eclipse mailing lists dataset</a> offers the following attributes:</p>
+<ul>
+<li><strong>List</strong> (String) The mailing list and project of the post.</li>
+<li><strong>messageId</strong> (String) A unique identifier for the post.</li>
+<li><strong>Subject</strong> (String) The subject of the post as sent on the mailing list.</li>
+<li><strong>Sent at</strong> (Date ISO 8601) The time of sending for the post.</li>
+<li><span style="font-size:120%"> ☣ </span> <strong>Sender name</strong> (String) The name of the sender of the post. Names are obfuscated, e.g. <code>HKmwHIC4dREThJRj</code>.</li>
+<li><span style="font-size:120%"> ☣ </span> <strong>Sender address</strong> (String) The email address of the sender of the post. Email address is obfuscated, e.g. <code>xzrEaN24LhYew151@HAYhBP6A1UVpXiHt</code>.</li>
+</ul>
+<h3 id="eclipse-projects-extracts">Eclipse projects extracts</h3>
+<p>The <a href="../projects/eclipse_projects.html">Eclipse projects extracts</a> have different sets of data depending on the sources available for each project. We list thereafter the full list of extracts, highlighting attributes that include privacy-related information.</p>
+<ul>
+<li>Git (Software Configuration Management)
+<ul>
+<li><strong>git_commits_evol.csv</strong> contains the daily number of commits and distinct authors.</li>
+<li><span style="font-size:120%"> ☣ </span> <strong>git_log.txt</strong> contains the retranscription of the <code>git log</code>command, including the name and email of commit authors. Name is replaced by XXX&rsquo;s and email address is obfuscated, e.g. <code>xzrEaN24LhYew151@HAYhBP6A1UVpXiHt</code>.</li>
+</ul>
+</li>
+<li>Bugzilla (Issue tracking)
+<ul>
+<li><strong>bugzilla_components.csv</strong> contains the number of issues submitted against each component.</li>
+<li><strong>bugzilla_evol.csv</strong> contains the daily number of issues submitted and distinct authors.</li>
+<li><span style="font-size:120%"> ☣ </span> <strong>bugzilla_issues.csv</strong> contains the list of issues for the project, including the emails of the author and the assignee for each submitteed issue. Emails are obfuscated, e.g. <code>xzrEaN24LhYew151@HAYhBP6A1UVpXiHt</code>.</li>
+<li><span style="font-size:120%"> ☣ </span> <strong>bugzilla_issues_open.csv</strong> contains the list of open issues for the project, including the emails of the author and the assignee for each submitteed issue. Emails are obfuscated, e.g. <code>xzrEaN24LhYew151@HAYhBP6A1UVpXiHt</code>.</li>
+</ul>
+</li>
+<li>Forums (User-oriented communication)
+<ul>
+<li><strong>eclipse_forums_posts.csv</strong> contains the full list of posts on the project&rsquo;s forum. It includes an Integer representation of the author of the post as returned by the API (no obfuscation needed).</li>
+<li><strong>eclipse_forums_threads.csv</strong> contains the full list of posts on the project&rsquo;s forum. It includes an Integer representation of the first and last author of the thread, as returned by the API (no obfuscation needed).</li>
+</ul>
+</li>
+<li>PMI (project metadata)
+<ul>
+<li><strong>eclipse_pmi_checks.csv</strong> contains a list of checks (values, usefulness, consistency) applied to the Project Management Infrastructure record for the project.</li>
+</ul>
+</li>
+<li>SonarQube (code analysis)
+<ul>
+<li><strong>sq_issues_blocker.csv</strong> contains the list of SonarQube issues with severity set to blocker.</li>
+<li><strong>sq_issues_blocker.csv</strong> contains the list of SonarQube issues with severity set to critical.</li>
+<li><strong>sq_issues_blocker.csv</strong> contains the list of SonarQube issues with severity set to major.</li>
+<li><strong>sq_metrics.csv</strong> contains the list of metrics computed by Sonarqube.</li>
+</ul>
+</li>
+</ul>
+<h2 id="anonymisation">Anonymisation</h2>
+<p>The mechanism used to anonymise the data is the <a href="https://github.com/borisbaldassari/data-anonymiser">Anonymise::Utility Perl module</a>. It basically uses asymmetric encryption to generate a one-off mapping between clear IDs and obfuscated strings.</p>
+<p><img src="../images/data_transformation.png" alt="Data transformation"></p>
+<p>The private key is thrown away, preventing any recovering of the encrypted IDs. This technique has several advantages:</p>
+<ul>
+<li>Identical clear-text strings are translated to the same obfuscated string. This enables researchers and analysts to identify same occurrences of an item without any information about its actual content.</li>
+<li>The private key is thrown away immediately, making it impossible for an attacker to use it to decrypt the dataset. The algorithm used is the <a href="https://metacpan.org/pod/Crypt::PK::RSA">Perl implementation of RSA</a>, which is considered reasonably strong for our purpose.</li>
+<li>The public key is re-generated for each session, making it impossible for an attacker to rebuild the mapping or use rainbow tables.</li>
+</ul>
+<p><strong>The resulting datasets contain no email address, names, user id or machine id.</strong></p>
+<h2 id="privacy-compliance">Privacy compliance</h2>
+<p>The management and publication of data in the European Union is regulated by the <strong>General Data Protection Regulation</strong> (GDPR) directive, which also addresses the export of data outside the EU and EEA areas. Since we are EU citizens &ndash; and considering also that the Crossminer project is funded by the H2020 EU research program &ndash; we are to abide by this regulation. Besides the legal implications of publishing open datasets, we are willing to make sure that everybody, individuals or companies, involved in the data is safe.</p>
+<p>In the case of software engineering data, there is a <a href="https://github.com/dspinellis/awesome-msr">huge amount of public information</a> readily available without any restrictions. Most, if not all, tools used in the open-source world provide information about who did what and when &ndash; which is undoubtely useful for collaboration and community. It is also mandatory regarding intellectual property processes: when one contributes a file to an open-source project, it is at the very least good practice to put her name (and maybe email address) in the header of the file along the licence used. When Intellectual Property is an important concern, like for the Eclipse Foundation, it simply is <em>required</em> since we need to know who that work belongs to in the case of IP issues and legal lawsuite cases.</p>
+<p>The publication of open data in this context, i.e. with the original data being already publicly available from public tools, is a specific case of the GDPR and it is hard to find any reliable information about how it should be conducted. As a result we relied on similar studies and articles and proceeded on a best-effort basis to provide datasets to our users which are as useful and safe as possible.</p>
+<p>Considering that:</p>
+<ul>
+<li><strong>Original data is already publicly available</strong> through the tools themselves (Git, Bugzilla, Mailing lists and forums) and their APIs.</li>
+<li>We provide a <strong>complete description</strong> of the content of the datasets, <strong>identifying the risks</strong> and <strong>describing the mitigation steps</strong> we went through to ensure that the data is safe.</li>
+<li>To the best of our knowledge <strong>there is now way to decrypt or reverse-engineer the obfuscated information</strong>. The method used for anonymisation is so strong that only knowing the original data could help re-identifying it.</li>
+</ul>
+<p>Considering also that:</p>
+<ul>
+<li>The goal of this processing is to provide <strong>free and open resources to help scientific research</strong>, which is in the <strong>public interest</strong> as defined in <a href="https://gdpr-info.eu/art-6-gdpr/">Article 6.1 (e)</a>.</li>
+<li>The Eclipse forge hosts open source and collaborative projects only, and all contributions are made under a <strong>required signed agreement</strong> known as the <a href="https://www.eclipse.org/legal/ECA.php">Eclipse Contributor Agreement</a>: people explicitely and knowingly give their consent to make their contribution public.</li>
+</ul>
+<p>We assume that both the <strong>data itself and its publication are safe</strong>, regarding both the users and the current regulation.</p>
+<h2 id="references">References</h2>
+<ul>
+<li><a href="https://eur-lex.europa.eu/legal-content/EN/TXT/HTML/?uri=CELEX:32016R0679&amp;from=EN">GDPR official text (HTML)</a></li>
+<li><a href="https://eur-lex.europa.eu/legal-content/EN/TXT/PDF/?uri=CELEX:32016R0679&amp;from=EN">GDPR official text (PDF)</a></li>
+<li><a href="https://blogs.openaire.eu/?p=3248">GDPR and the research process: What you need to know</a></li>
+<li><a href="https://blog.infinigate.co.uk/gdpr-personal-data-public-domain">GDPR &amp; Personal Data in the Public Domain</a></li>
+<li><a href="https://www.europeandataportal.eu/en/highlights/how-address-privacy-concerns-when-opening-data">How to address privacy concerns when openin data</a></li>
+</ul>
+
+</div>
+
+  
+
+</article>
+
+
+
+
+      </main>
+
+      <footer id='footer' class='footer'>
+        <div class='container sep-before'><div class="row">
+	    <div class="column">
+	      <a href="http://www.eclipse.org/"  target="_blank"><img src="/dataeggs/images/logo-eclipse-foundation.png" alt="Eclipse Foundation logo"></a>
+	    </div>	  
+	    <div class="column">
+	      <p></p>
+	      <p id="copyright">Copyright © 2021 Eclipse Foundation, Inc.<br>All Rights Reserved.</p>
+	    </div>
+	  </div>
+	  <div class="row">
+	    <p><a href="http://www.eclipse.org/legal/privacy.php" target="_blank">Privacy Policy</a> /
+	      <a href="http://eclipse.org/" target="_blank">Eclipse</a> /
+	      <a href="http://www.eclipse.org/legal/termsofuse.php" target="_blank">Terms of Use</a> /
+	      <a href="http://www.eclipse.org/legal/copyright.php" target="_blank">Copyright Agent</a> /
+	      <a href="http://www.eclipse.org/legal/" target="_blank">Legal</a> /
+	      <a href="http://www.eclipse.org/org/foundation/contact.php" target="_blank"> Contact Us</a></p>
+	  </div>
+	  
+        </div>
+      </footer>
+
+    </div>
+  </div><script>window.__assets_js_src="/dataeggs/assets/js/"</script>
+
+<script src='/dataeggs/assets/js/main.c3bcf2df.js'></script><script src='/dataeggs/js/custom.js'></script>
+
+
+</body>
+
+</html>
+
diff --git a/robots.txt b/robots.txt
new file mode 100644
index 0000000..eb05362
--- /dev/null
+++ b/robots.txt
@@ -0,0 +1,2 @@
+User-agent: *
+Disallow:
diff --git a/sitemap.xml b/sitemap.xml
new file mode 100644
index 0000000..641caf2
--- /dev/null
+++ b/sitemap.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
+  xmlns:xhtml="http://www.w3.org/1999/xhtml">
+  <url>
+    <loc>https://download.eclipse.org/dataeggs/</loc>
+  </url><url>
+    <loc>https://download.eclipse.org/dataeggs/privacy/</loc>
+  </url><url>
+    <loc>https://download.eclipse.org/dataeggs/aeri_stacktraces/</loc>
+  </url><url>
+    <loc>https://download.eclipse.org/dataeggs/eclipse_mls/</loc>
+  </url><url>
+    <loc>https://download.eclipse.org/dataeggs/categories/</loc>
+  </url><url>
+    <loc>https://download.eclipse.org/dataeggs/page/</loc>
+  </url><url>
+    <loc>https://download.eclipse.org/dataeggs/tags/</loc>
+  </url>
+</urlset>
diff --git a/tags/index.html b/tags/index.html
new file mode 100644
index 0000000..3cc2abd
--- /dev/null
+++ b/tags/index.html
@@ -0,0 +1,194 @@
+<!DOCTYPE html>
+<html lang='en' dir='auto'><head>
+  <meta charset='utf-8'>
+<meta name='viewport' content='width=device-width, initial-scale=1'>
+<meta name='description' content=''>
+<meta name='theme-color' content='#ffcd00'>
+
+<meta property='og:title' content='Tags • Eclipse DataEggs'>
+<meta property='og:description' content=''>
+<meta property='og:url' content='https://download.eclipse.org/dataeggs/tags/'>
+<meta property='og:site_name' content='Eclipse DataEggs'>
+<meta property='og:type' content='website'><meta name='twitter:card' content='summary'>
+
+<meta name="generator" content="Hugo 0.83.1" />
+
+  <title>Tags • Eclipse DataEggs</title>
+  <link rel='canonical' href='https://download.eclipse.org/dataeggs/tags/'>
+  
+    <link href="https://download.eclipse.org/dataeggs/tags/index.xml" rel="alternate" type="application/rss+xml" title="Eclipse DataEggs" />
+  
+  
+  <link rel='icon' href='/dataeggs/favicon.ico'>
+<link rel='stylesheet' href='/dataeggs/assets/css/main.ab98e12b.css'><link rel='stylesheet' href='/dataeggs/css/custom.css'><style>
+:root{--color-accent:#ffcd00;}
+</style>
+
+<script type="application/javascript">
+var doNotTrack = false;
+if (!doNotTrack) {
+	window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)};ga.l=+new Date;
+	ga('create', 'UA-3675452-15', 'auto');
+	
+	ga('send', 'pageview');
+}
+</script>
+<script async src='https://www.google-analytics.com/analytics.js'></script>
+
+  
+
+</head>
+<body class='taxonomy type-tags taxonomy-tag has-sidebar'>
+
+  <div class='site'><div id='sidebar' class='sidebar'>
+  <a class='screen-reader-text' href='#main-menu'>Skip to Main Menu</a>
+
+  <div class='container'><section class='widget widget-about sep-after'>
+  <header>
+    
+    <div class='logo'>
+      <a href='/dataeggs/'>
+        <img src='/dataeggs/images/dataeggs-menu.png'>
+      </a>
+    </div>
+    
+    <div class='desc'>
+    Open. Safe. Easy.
+    </div>
+  </header>
+
+</section>
+<section class='widget widget-search sep-after'>
+  <header>
+    <h4 class='title widget-title'>Search</h4>
+  </header>
+
+  <form action='/dataeggs/search' id='search-form' class='search-form'>
+    <label>
+      <span class='screen-reader-text'>Search</span>
+      <input id='search-term' class='search-term' type='search' name='q' placeholder='Search&hellip;'>
+    </label></form>
+
+</section>
+<section class='widget widget-sidebar_menu sep-after'><nav id='sidebar-menu' class='menu sidebar-menu' aria-label='Sidebar Menu'>
+    <div class='container'>
+      <ul><li class='item'>
+  <a href='/dataeggs/'>Home</a></li><li class='item'>
+  <a href='/dataeggs/privacy/'>Privacy</a></li><li class='item'>
+  <a href='/dataeggs/aeri_stacktraces/'>AERI</a></li><li class='item'>
+  <a href='/dataeggs/eclipse_mls/'>MLS</a></li></ul>
+    </div>
+  </nav>
+
+</section><section class='widget widget-social_menu sep-after'><nav aria-label='Social Menu'>
+    <ul><li>
+        <a href='https://gitlab.eclipse.org/dataeggs/dataeggs' target='_blank' rel='noopener me'>
+          <span class='screen-reader-text'>Open Gitlab account in new tab</span><svg class='icon' xmlns='http://www.w3.org/2000/svg' viewbox='0 0 24 24' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' aria-hidden='true'>
+    
+    <title>GitLab icon</title>  <path d="M22.65 14.39L12 22.13 1.35 14.39a.84.84 0 0 1-.3-.94l1.22-3.78 2.44-7.51A.42.42 0 0 1 4.82 2a.43.43 0 0 1 .58 0 .42.42 0 0 1 .11.18l2.44 7.49h8.1l2.44-7.51A.42.42 0 0 1 18.6 2a.43.43 0 0 1 .58 0 .42.42 0 0 1 .11.18l2.44 7.51L23 13.45a.84.84 0 0 1-.35.94z"/>
+</svg>
+</a>
+      </li><li>
+        <a href='mailto:boris@chrysalice.org' target='_blank' rel='noopener me'>
+          <span class='screen-reader-text'>Contact via Email</span><svg class='icon' xmlns='http://www.w3.org/2000/svg' viewbox='0 0 24 24' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' aria-hidden='true'>
+    
+    <path d="M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z"></path><polyline points="22,6 12,13 2,6"></polyline>
+</svg>
+</a>
+      </li></ul>
+  </nav>
+</section></div>
+
+  <div class='sidebar-overlay'></div>
+</div><div class='main'><a class='screen-reader-text' href='#content'>Skip to Content</a>
+
+<button id='sidebar-toggler' class='sidebar-toggler' aria-controls='sidebar'>
+  <span class='screen-reader-text'>Toggle Sidebar</span>
+  <span class='open'><svg class='icon' xmlns='http://www.w3.org/2000/svg' viewbox='0 0 24 24' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' aria-hidden='true'>
+    
+    
+  <line x1="3" y1="12" x2="21" y2="12" />
+  <line x1="3" y1="6" x2="21" y2="6" />
+  <line x1="3" y1="18" x2="21" y2="18" />
+
+</svg>
+</span>
+  <span class='close'><svg class='icon' xmlns='http://www.w3.org/2000/svg' viewbox='0 0 24 24' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' aria-hidden='true'>
+    
+    
+  <line x1="18" y1="6" x2="6" y2="18" />
+  <line x1="6" y1="6" x2="18" y2="18" />
+
+</svg>
+</span>
+</button><div class='header-widgets'>
+        <div class='container'>
+    <style>.widget-breadcrumbs li:after{content:'\2f '}</style>
+  <section class='widget widget-breadcrumbs sep-after'>
+    <nav id='breadcrumbs'>
+      <ol><li><a href='/dataeggs/'>Home</a></li><li><span>Tags</span></li></ol>
+    </nav>
+  </section></div>
+      </div>
+
+      <header id='header' class='header site-header'>
+        <div class='container sep-after'>
+          <div class='header-info'><p class='site-title title'>Eclipse DataEggs</p><p class='desc site-desc'></p>
+          </div>
+        </div>
+      </header>
+
+      <main id='content'>
+
+
+<header class='header'>
+  <div class='container sep-after'>
+    <div class='header-info'>
+      <h1 class='title'>Tags</h1>
+
+      
+
+    </div>
+  </div>
+</header>
+
+
+<div class='container list-container'>
+  <ul class='list taxonomy-cloud'><span>Not a single Tag!</span></ul>
+</div>
+
+
+      </main>
+
+      <footer id='footer' class='footer'>
+        <div class='container sep-before'><div class="row">
+	    <div class="column">
+	      <a href="http://www.eclipse.org/"  target="_blank"><img src="/dataeggs/images/logo-eclipse-foundation.png" alt="Eclipse Foundation logo"></a>
+	    </div>	  
+	    <div class="column">
+	      <p></p>
+	      <p id="copyright">Copyright © 2021 Eclipse Foundation, Inc.<br>All Rights Reserved.</p>
+	    </div>
+	  </div>
+	  <div class="row">
+	    <p><a href="http://www.eclipse.org/legal/privacy.php" target="_blank">Privacy Policy</a> /
+	      <a href="http://eclipse.org/" target="_blank">Eclipse</a> /
+	      <a href="http://www.eclipse.org/legal/termsofuse.php" target="_blank">Terms of Use</a> /
+	      <a href="http://www.eclipse.org/legal/copyright.php" target="_blank">Copyright Agent</a> /
+	      <a href="http://www.eclipse.org/legal/" target="_blank">Legal</a> /
+	      <a href="http://www.eclipse.org/org/foundation/contact.php" target="_blank"> Contact Us</a></p>
+	  </div>
+	  
+        </div>
+      </footer>
+
+    </div>
+  </div><script>window.__assets_js_src="/dataeggs/assets/js/"</script>
+
+<script src='/dataeggs/assets/js/main.c3bcf2df.js'></script><script src='/dataeggs/js/custom.js'></script>
+
+
+</body>
+
+</html>
+
diff --git a/tags/index.xml b/tags/index.xml
new file mode 100644
index 0000000..e945d1d
--- /dev/null
+++ b/tags/index.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
+  <channel>
+    <title>Tags on Eclipse DataEggs</title>
+    <link>https://download.eclipse.org/dataeggs/tags/</link>
+    <description>Recent content in Tags on Eclipse DataEggs</description>
+    <generator>Hugo -- gohugo.io</generator><atom:link href="https://download.eclipse.org/dataeggs/tags/index.xml" rel="self" type="application/rss+xml" />
+  </channel>
+</rss>