summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrew Maguire <andrewm4894@gmail.com>2022-03-24 20:17:18 +0000
committerGitHub <noreply@github.com>2022-03-24 16:17:18 -0400
commit2fbd9cfc3725689538843ed02fdd28d7330e8aeb (patch)
tree3fb273dab84c6a65ed0f235753bb92da0b6ad287
parentf791ba196511ebb86366c672bb1945531efbe84d (diff)
Add ml notebooks (#12313)
* initial setting up of notebook * add open in colab button * draft work * first version of notebook * fix open in colab button * Update ml/notebooks/README.md Co-authored-by: Tina Luedtke <kickoke@users.noreply.github.com> * use underscores in filename * add one final visualization approach using scatter plots * get a better random sample for plots * small text update * fix link * Update ml/notebooks/netdata_anomaly_detection_deepdive.ipynb Co-authored-by: Tina Luedtke <kickoke@users.noreply.github.com> * Update ml/notebooks/netdata_anomaly_detection_deepdive.ipynb Co-authored-by: Tina Luedtke <kickoke@users.noreply.github.com> * Update ml/notebooks/netdata_anomaly_detection_deepdive.ipynb Co-authored-by: Tina Luedtke <kickoke@users.noreply.github.com> * Update ml/notebooks/netdata_anomaly_detection_deepdive.ipynb Co-authored-by: Tina Luedtke <kickoke@users.noreply.github.com> * Update ml/notebooks/netdata_anomaly_detection_deepdive.ipynb Co-authored-by: Tina Luedtke <kickoke@users.noreply.github.com> * Update ml/notebooks/netdata_anomaly_detection_deepdive.ipynb Co-authored-by: Tina Luedtke <kickoke@users.noreply.github.com> * address review comments * add ipynb files to dockerignore Co-authored-by: Tina Luedtke <kickoke@users.noreply.github.com>
l---------.dockerignore7
-rw-r--r--.gitignore3
-rw-r--r--ml/notebooks/README.md5
-rw-r--r--ml/notebooks/netdata_anomaly_detection_deepdive.ipynb1712
4 files changed, 1726 insertions, 1 deletions
diff --git a/.dockerignore b/.dockerignore
index 3e4e48b0b5..60ea3668fc 120000
--- a/.dockerignore
+++ b/.dockerignore
@@ -1 +1,6 @@
-.gitignore \ No newline at end of file
+.gitignore
+
+# Jupyter notebook checkpoints
+.ipynb_checkpoints
+# Jupyter notebooks
+.ipynb \ No newline at end of file
diff --git a/.gitignore b/.gitignore
index 6b5423cff1..ab19032c92 100644
--- a/.gitignore
+++ b/.gitignore
@@ -227,3 +227,6 @@ Session.*.vim
# Special exceptions
!packaging/repoconfig/Makefile
+
+# Jupyter notebook checkpoints
+.ipynb_checkpoints
diff --git a/ml/notebooks/README.md b/ml/notebooks/README.md
new file mode 100644
index 0000000000..5e9db6dee8
--- /dev/null
+++ b/ml/notebooks/README.md
@@ -0,0 +1,5 @@
+## Machine Learning Notebooks
+
+This folder is a home for any documentation supporting machine learning related notebooks.
+
+- [Netdata anomaly detection deepdive](netdata_anomaly_detection_deepdive.ipynb): This is a starter notebook to help users understand how anomaly detection works in the Netdata agent and go a little deeper if they want. \ No newline at end of file
diff --git a/ml/notebooks/netdata_anomaly_detection_deepdive.ipynb b/ml/notebooks/netdata_anomaly_detection_deepdive.ipynb
new file mode 100644
index 0000000000..8d0c0c7e59
--- /dev/null
+++ b/ml/notebooks/netdata_anomaly_detection_deepdive.ipynb
@@ -0,0 +1,1712 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "pycharm": {
+ "name": "#%% md\n"
+ }
+ },
+ "source": [
+ "## Netdata Anomaly Detection Deepdive"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "pycharm": {
+ "name": "#%% md\n"
+ }
+ },
+ "source": [
+ "[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/netdata/netdata/blob/master/ml/notebooks/netdata_anomaly_detection_deepdive.ipynb)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "pycharm": {
+ "name": "#%% md\n"
+ }
+ },
+ "source": [
+ "This notebook will walk through a simplified python based implementation of the C & C++ code in [`netdata/netdata/ml/`](https://github.com/netdata/netdata/tree/master/ml) used to power the [anomaly detection capabilities](https://github.com/netdata/netdata/blob/master/ml/README.md) of the Netdata agent.\n",
+ "\n",
+ "The main goal here is to help interested users learn more about how the machine learning works under the hood. If you just want to get started by enabling ml on your agent you can check out these [simple configuration steps](https://learn.netdata.cloud/docs/agent/ml#configuration). \n",
+ "\n",
+ "🚧 **Note**: This functionality is still under active development and considered experimental. Changes might cause the feature to break. We dogfood it internally and among early adopters within the Netdata community to build the feature. If you would like to get involved and help us with some feedback, email us at analytics-ml-team@netdata.cloud or come join us in the [🤖-ml-powered-monitoring](https://discord.gg/4eRSEUpJnc) channel of the Netdata discord. Alternativley, if GitHub is more of your thing, feel free to create a [GitHub discussion](https://github.com/netdata/netdata/discussions?discussions_q=label%3Aarea%2Fml).\n",
+ "\n",
+ "In this notebook we will:\n",
+ "\n",
+ "1. [**Get raw data**](#get-raw-data): Pull some recent data from one of our demo agents.\n",
+ "2. [**Add some anomalous data**](#add-some-anomalous-data): Be evil and mess up the tail end of the data to make it obviously \"anomalous\".\n",
+ "3. [**Lets do some ML!**](#lets-do-some-ml): Implement an unsupervised clustering based approach to anomaly detection.\n",
+ "4. [**Lets visualize all this!**](#lets-visualize-all-this): Plot and explore all this visually.\n",
+ "5. [**So, how does it _actually_ work?**](#so-how-does-it-actually-work): Dig a little deeper on what's going on under the hood."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "pycharm": {
+ "name": "#%% md\n"
+ }
+ },
+ "source": [
+ "### Imports & Helper Functions"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "pycharm": {
+ "name": "#%% md\n"
+ }
+ },
+ "source": [
+ "Uncomment and run the next cell to install [netdata-pandas](https://github.com/netdata/netdata-pandas) which we will use to easily pull data from the [Netdata agent REST API](https://learn.netdata.cloud/docs/agent/web/api) into a nice clean [Pandas](https://pandas.pydata.org/) [DataFrame](https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.html) where it will be easier to work with. \n",
+ "\n",
+ "Once you have [netdata-pandas](https://github.com/netdata/netdata-pandas) installed you can comment it back out and rerun the cell to clear the output."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "metadata": {
+ "id": "aL4gm-jUffEx",
+ "pycharm": {
+ "is_executing": true
+ }
+ },
+ "outputs": [],
+ "source": [
+ "# uncomment the line below (when running in google colab) to install the netdata-pandas library, comment it again when done.\n",
+ "#!pip install netdata-pandas"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {
+ "id": "EMZBHjG4mOQh",
+ "pycharm": {
+ "is_executing": true
+ }
+ },
+ "outputs": [],
+ "source": [
+ "from datetime import datetime, timedelta\n",
+ "import itertools\n",
+ "import random\n",
+ "import pandas as pd\n",
+ "import numpy as np\n",
+ "import matplotlib.pyplot as plt\n",
+ "import seaborn as sns\n",
+ "import matplotlib.patches as mpatches\n",
+ "from sklearn.cluster import KMeans\n",
+ "from scipy.spatial.distance import cdist\n",
+ "from netdata_pandas.data import get_data\n",
+ "\n",
+ "# helper functions\n",
+ "\n",
+ "\n",
+ "def preprocess_df(df, lags_n, diffs_n, smooth_n):\n",
+ " \"\"\"Given a pandas dataframe preprocess it to take differences, add smoothing, lags and abs values. \n",
+ " \"\"\"\n",
+ " if diffs_n >= 1:\n",
+ " # take differences\n",
+ " df = df.diff(diffs_n).dropna()\n",
+ " if smooth_n >= 2:\n",
+ " # apply a rolling average to smooth out the data a bit\n",
+ " df = df.rolling(smooth_n).mean().dropna()\n",
+ " if lags_n >= 1:\n",
+ " # for each dimension add a new columns for each of lags_n lags of the differenced and smoothed values for that dimension\n",
+ " df_columns_new = [f'{col}_lag{n}' for n in range(lags_n+1) for col in df.columns]\n",
+ " df = pd.concat([df.shift(n) for n in range(lags_n + 1)], axis=1).dropna()\n",
+ " df.columns = df_columns_new\n",
+ " # sort columns to have lagged values next to each other for clarity when looking at the feature vectors\n",
+ " df = df.reindex(sorted(df.columns), axis=1)\n",
+ " \n",
+ " # take absolute values as last step\n",
+ " df = abs(df)\n",
+ " \n",
+ " return df\n",
+ "\n",
+ "\n",
+ "def add_shading_to_plot(ax, a, b, t, c='y', alpha=0.2):\n",
+ " \"\"\"Helper function to add shading to plot and add legend item.\n",
+ " \"\"\"\n",
+ " plt.axvspan(a, b, color=c, alpha=alpha, lw=0)\n",
+ " handles, labels = ax.get_legend_handles_labels()\n",
+ " patch = mpatches.Patch(color=c, label=t, alpha=alpha)\n",
+ " handles.append(patch) \n",
+ " plt.legend(handles=handles)\n",
+ "\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Inputs & Parameters"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "A full list of all the anomaly detection configuration parameters, and descriptions of each, can be found in the [configuration](https://github.com/netdata/netdata/blob/master/ml/README.md#configuration) section of the [ml readme](https://github.com/netdata/netdata/blob/master/ml/README.md).\n",
+ "\n",
+ "Below we will focus on some basic params to decide what data to pull and the main ml params of importance in understanding how it all works.\n",
+ "\n",
+ "#### training size/scheduling parameters:\n",
+ "- `train_every`: How often to train or retrain each model.\n",
+ "- `num_samples_to_train`: How much of the recent data to train on, for example 3600 would mean training on the last 1 hour of raw data. The default in the netdata agent currently is 14400, so last 4 hours.\n",
+ "\n",
+ "#### feature preprocessing related parameters:\n",
+ "- `num_samples_to_diff`: This is really just a 1 or 0 flag to turn on or off differencing in the feature preprocessing. It defaults to 1 (to take differences) and generally should be left alone.\n",
+ "- `num_samples_to_smooth`: The extent of smoothing (averaging) applied as part of feature preprocessing.\n",
+ "- `num_samples_to_lag`: The number of previous values to also include in our feature vector.\n",
+ "\n",
+ "#### anomaly score related parameters:\n",
+ "- `dimension_anomaly_score_threshold`: The threshold on the anomaly score, above which the data it considered anomalous and the [anomaly bit](https://github.com/netdata/netdata/blob/master/ml/README.md#anomaly-bit) is set to 1 (its actually set to 100 in reality but this just to make it behave more like a rate when aggregated in the netdata agent api). By default this is `0.99` which means anything with an anomaly score above 99% is considered anomalous. Decreasing this threshold makes the model more sensitive and will leave to more anomaly bits, increasing it does the opposite.\n",
+ "\n",
+ "#### model parameters:\n",
+ "- `n_clusters_per_dimension`: This is the number of clusters to fit for each model, by default it is set to 2 such that 2 cluster [centroids](https://en.wikipedia.org/wiki/Centroid) will be fit for each model.\n",
+ "- `max_iterations`: The maximum number of iterations the fitting of the clusters is allowed to take. In reality the clustering will converge a lot sooner than this.\n",
+ "\n",
+ "**Note**: There is much more detailed discussion of all there configuration parameters in the [\"Configuration\"](https://github.com/netdata/netdata/blob/master/ml/README.md#configuration) section of the ml readme."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "metadata": {
+ "id": "tBUVUpR3fohX"
+ },
+ "outputs": [],
+ "source": [
+ "# data params\n",
+ "hosts = ['london.my-netdata.io']\n",
+ "charts = ['system.cpu']\n",
+ "# if want to just focus on a subset of dims, in this case lets just pick one for simplicity\n",
+ "dims = ['system.cpu|user'] \n",
+ "last_n_hours = 2\n",
+ "# based on last_n_hours define the relevant 'before' and 'after' params for the netdata rest api on the agent\n",
+ "before = int(datetime.utcnow().timestamp())\n",
+ "after = int((datetime.utcnow() - timedelta(hours=last_n_hours)).timestamp())\n",
+ "\n",
+ "# ml params\n",
+ "train_every = 3600\n",
+ "num_samples_to_train = 3600\n",
+ "num_samples_to_diff = 1\n",
+ "num_samples_to_smooth = 3\n",
+ "num_samples_to_lag = 5\n",
+ "dimension_anomaly_score_threshold = 0.99\n",
+ "n_clusters_per_dimension = 2\n",
+ "max_iterations = 1000"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### 1. Get raw data<a id=\"get-raw-data\"></a>"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Next we will use the `get_data()` function from the [netdata-pandas](https://github.com/netdata/netdata-pandas) library to just pull down our raw data from the agent into a Pandas dataframe."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "metadata": {
+ "colab": {
+ "base_uri": "https://localhost:8080/",
+ "height": 660
+ },
+ "id": "Ypudrfu-fpje",
+ "outputId": "b25c7322-03b4-4475-c416-37c3abbe78a4"
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "(7200, 1)\n",
+ "1647978087 1647985286\n"
+ ]
+ },
+ {
+ "data": {
+ "text/html": [
+ "<div>\n",
+ "<style scoped>\n",
+ " .dataframe tbody tr th:only-of-type {\n",
+ " vertical-align: middle;\n",
+ " }\n",
+ "\n",
+ " .dataframe tbody tr th {\n",
+ " vertical-align: top;\n",
+ " }\n",
+ "\n",
+ " .dataframe thead th {\n",
+ " text-align: right;\n",
+ " }\n",
+ "</style>\n",
+ "<table border=\"1\" class=\"dataframe\">\n",
+ " <thead>\n",
+ " <tr style=\"text-align: right;\">\n",
+ " <th></th>\n",
+ " <th>system.cpu|user</th>\n",
+ " </tr>\n",
+ " <tr>\n",
+ " <th>time_idx</th>\n",
+ " <th></th>\n",
+ " </tr>\n",
+ " </thead>\n",
+ " <tbody>\n",
+ " <tr>\n",
+ " <th>1647978087</th>\n",
+ " <td>1.503759</td>\n",
+ " </tr>\n",
+ " <tr>\n",
+ " <th>1647978088</th>\n",
+ " <td>0.252525</td>\n",
+ " </tr>\n",
+ " <tr>\n",
+ " <th>1647978089</th>\n",
+ " <td>0.755668</td>\n",
+ " </tr>\n",
+ " <tr>\n",
+ " <th>1647978090</th>\n",
+ " <td>0.503778</td>\n",
+ " </tr>\n",
+ " <tr>\n",
+ " <th>1647978091</th>\n",
+ " <td>0.501253</td>\n",
+ " </tr>\n",
+ " </tbody>\n",
+ "</table>\n",
+ "</div>"
+ ],
+ "text/plain": [
+ " system.cpu|user\n",
+ "time_idx \n",
+ "1647978087 1.503759\n",
+ "1647978088 0.252525\n",
+ "1647978089 0.755668\n",
+ "1647978090 0.503778\n",
+ "1647978091 0.501253"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "image/png": "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iIiIiEizJ35ejw17Sw1d5oDOLfDYnwaG/L2iogJXXHEF8vPz0dDQgEceeQRffvklfvjhBwDAjBkz8Oabb2Ly5Mm45ZZbkJOTAyEEbr75ZnTr1g05OTm49tpr0aRJEyxatAgbNmzAfffdh/LycrRr1w4TJ05Ep06dcPrpp+O4447DH3/8gYqKCnzyySd49tlnsXbtWlx55ZUYP358UNqWLVuGu+++GxUVFcjMzMSsWbPw7bff4vvvv0dJSQn27NmD6667Do899hhyc3Nx4YUXYt26dQCAF198EeXl5UFXLidOnIicnBy8/vrrAIALL7wQDzzwAEaNGhW0fffeey+2b9+OO+64A4WFhWjatCnee+899OvXDzfeeCOysrKwcuVKjBw5Ei+//HJMx4kBpo0crqhF6+wMq5NBREREROQ4U6dORefOnTFlyhQAQElJCR577DEUFhaiffv2+Oijj3DzzTdj1apV2LNnjy+AKy4uRqtWrfD666/jxRdfxLBhw1BXV4e77roLP/74I9q3b49JkybhP//5Dz788EMAQEZGBnJycvDf//4XF110EZYvX442bdqgV69euPfee9G2bVtfumpra3HllVdi0qRJGD58OEpLS9GkSRMAwNKlS7Fu3To0bdoUw4cPx5gxY9CuXbuY9oPa9gHArbfeirfffhu9e/fGkiVL8I9//AOzZ88G4H7FzMKFC5GamhrTugEGmLbx46o9uPurVfjhjpEY0q2V1ckhIiIiIopauCuNZhk0aBDuv/9+/Otf/8KFF16IUaNG4frrr8dnn32Gm266CYsWLcInn3yCsrIy7NixA3fddRfGjBmDc845J2hZmzdvxrp163D22WcDABoaGtCpUyff7//3f//nW+fAgQN9v/Xs2RN5eXl+AebmzZvRqVMnDB8+HADQokUL329nn322b9pLLrkE8+fPx5///OeY9kPPnj2Dtq+8vBwLFy7E5Zdf7puupqbG9/fll19uSHAJMMC0jUXbDwIANu4rZYBJRERERKRTnz59sGLFCvz6668YN24czjrrLPz1r3/Fn/70J2RlZeHyyy9HWloaWrdujdWrV2PatGl4++238fXXX/uuTHpJKTFw4EAsWrRIdV2ZmZkAgJSUFN/f3s967mMMfA2IEAJpaWlwuVy+70K9hzLUdGrb9+qrr6JVq1ZYtWqV6rKys7M1pzkSPuSHiIiIiIgcb+/evWjatCmuu+46PPjgg1ixYgU6d+6Mzp07Y/z48bjpppsAAEVFRXC5XLj00ksxfvx4rFixAgDQvHlzlJWVAQD69u2LwsJCX4BZV1eH9evXR5Wuvn37Yt++fVi2bBkAoKyszBeEzpgxA4cOHUJVVRV++OEHjBw5Eh07dkRBQQEOHjyImpoa/PLLL6rL7d69O1atWgWXy4W8vDwsXbo05Pa1aNECPXr0wDfffAPAHUCvXr06qu2JhFcwiYiIiIjI8dauXYsHH3wQKSkpSE9Px1tvvQUAuPbaa1FYWIj+/fsDAPbs2YObbrrJd/Xv2WefBQDceOONuP32230P+Zk8eTL++c9/oqSkBPX19bjnnnswcKD2ob8XXHAB3n//fXTu3BmTJk3CXXfdhaqqKjRp0gQzZ84EAIwYMQKXXnop8vPzcd1112HYsGEAgEcffRQjRoxAly5d0K9fP9Xljxw5Ej169MCAAQPQv39/HH/88WG37/PPP8ff//53jB8/HnV1dbjqqqswePBgXftYCyGlNHyhw4YNkzk5OYYvN5GN/XYNvlqWh2cvGYSrRxxpdXKIiIiIiHTZuHGjL4izkzvvvBPHHXccbrnlFquT4ifwKbBa58nNzY3ruzDVjqsQYrmUcpja9LyCSURERERECWno0KHIzs7GSy+9ZHVSkgYDTCIiIiIiSkjLly+3Ogkh3Xjjjbjxxht1zTNkyBB0797dlPQYhQGmTZgwUpmIiIiIKK6klEFPRiXjDBkyJK7ri+Z2Sj5FloiIiIiIYpaVlYWDBw9GFZSQ/UgpcfDgQWRlZemaj1cwbYIdPURERETkZF27dkV+fj4KCwutTgoZJCsrC127dtU1DwNMIiIiIiKKWXp6Onr06GF1MshiHCJLREREREREhmCASURERERERIZggElERERERESGYIBpE3zYFhEREREROR0DTJvhw2SJiIiIiMipGGDaDC9kEhERERGRUzHAtAm+B5OIiIiIiJyOASYREREREREZggEmERERERERGYIBJhERERERERmCAaZN8DUlRERERETkdAwwbYbP+iEiIiIiIqdigGkzvJBJREREREROxQDTJviaEiIiIiIicjoGmERERERERGQIBphERERERERkCAaYNsGnyBIRERERkdMxwLQZ3opJREREREROxQCTiIiIiIiIDMEAk4iIiIiIiAzBANNmeCsmERERERE5FQNMm+B7MImIiIiIyOkYYBIREREREZEhGGDaBF9TQkRERERETscA02Y4UpaIiIiIiJyKASYREREREREZggEmERERERERGYIBJhERERERERmCAabN8Fk/RERERETkVAwwbYLvwSQiIiIiIqdjgGkTfE0JERERERE5HQNMm+GFTCIiIiIicioGmERERERERGQIBphERERERERkCAaYREREREREZAjNAaYQIlUIsVII8YuZCSIiIiIiIiJn0nMF824AG81KCLnxYbJERERERORUmgJMIURXAGMAvG9ucoiIiIgomU1fvx+FZTVWJ8P2dhZVYOH2IquTYXvVdQ34dnk+JN8JGDdar2C+CuAhAK5QEwghbhVC5AghcgoLC41IW1JKlteU3DJxGT6cv9PqZBAREZGNVNU24NZPl+P6D5ZYnRTbO+PFubjmPe6nSJ6fuhn3f7Ma87YwPomXiAGmEOJCAAVSyuXhppNSviulHCalHNa+fXvDEkiJadamAjz5ywark0FEREQ20uC5ypR3qNLilFCiOFBWDQAoq663OCXJQ8sVzJEA/k8IkQvgKwBnCiE+MzVVRERERERE5DgRA0wp5cNSyq5Syu4ArgIwW0p5nekpIyIiIqKkxLvliJyL78EkIiIiIltIlmdRECWyND0TSynnAphrSkqIiIiIiIhMwKvi8cMrmERERERElJB4VTz+GGASEREREVFC4pXL+GOASURERERECY1XMuOHASYRERER2YrkZScix2KASURERES2IHiZiUzCPov4YYBJREREREQJiX0W8ccAk4iIiIhsgUNjiZyPASYZZuO+Ujz83Rq4XKwdiIiSxTvztuPXtfusTgYREdkEA0wyzF8/zsGXS/Owt6TK6qQQEVGcPPvbJvzj8xVWJ4MSBO/BJHI+BphERERERJSQOK4u/hhgkuF4/wQRERHFQjIsIHIsBphEREREZAuCz/wkgzFHxR8DTCIiIiIiIjIEA0yb4FAQIiIiIiJyOgaYNsOnpxERERERkVMxwLQZPiCHiIiIiMhYko3suGGAaRO8qZ2IiIjIjbEAkXMxwCTDcHgvEREREdmRYEM1bhhgEhERERERkSEYYJLhOKyFiIiIosGn6hM5HwNMm2CBSkRERERkDj7kJ34YYNpMIgwPT4RtICIiIiLn472X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