Skip to content

Instantly share code, notes, and snippets.

@lemon24
Last active November 25, 2023 11:50
Show Gist options
  • Save lemon24/93222ef4bc4a775092b56546a6e6cd0f to your computer and use it in GitHub Desktop.
Save lemon24/93222ef4bc4a775092b56546a6e6cd0f to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"id": "f94ee186-033a-4a77-ac04-c99bd2ecf11e",
"metadata": {},
"source": [
"# Feed scoring algorithm (and how I consume feeds)\n",
"\n",
"This is an attempt to use the metrics added in\n",
"[lemon24/reader#254](https://github.com/lemon24/reader/issues/254)\n",
"\"Am I interacting with this feed?\"\n",
"to determine a feed \"usefulness\" score\n",
"based on how many entries I mark as read / important / don't care.\n",
"\n",
"The main use case for this is to unsubscribe from \"low value\" feeds.\n",
"Of course, this can be approximated quite well by sorting by unread / unimportant\n",
"and skipping the few exceptions \"by hand\",\n",
"but I was curious if it can be done in code\n",
"(presumably, this logic would be part of a plugin).\n",
"\n",
"The second use case (for this notebook) is to find gaps in the *reader* API\n",
"that would prevent someone from implementing this on their own."
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "6367e289-b7cd-40c0-a493-5fd8da860691",
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"\n",
"pd.options.display.float_format = '{:.2f}'.format\n",
"pd.options.display.max_rows = 1000"
]
},
{
"cell_type": "markdown",
"id": "82b68656-9038-45cc-a9ed-9700fc16c214",
"metadata": {},
"source": [
"## Entry data\n",
"\n",
"We care about:\n",
"\n",
"* entries in a certain time period\n",
"* entries marked as read/important in that period (usually means I'm going through a feed's older entries)\n",
"\n",
"We also need to exclude some entries that would skew the results."
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "39f36660-128d-4cfb-8a87-b309e14abeca",
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
"3985"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from datetime import datetime, timezone\n",
"from reader import make_reader\n",
"from reader._storage import convert_timestamp\n",
"\n",
"reader = make_reader('db.sqlite') # reader.sqlite.2023-11-14\n",
"\n",
"start = datetime(2022, 11, 14, tzinfo=timezone.utc)\n",
"# start = datetime(2023, 8, 14, tzinfo=timezone.utc)\n",
"end = datetime(2023, 11, 14, tzinfo=timezone.utc)\n",
"\n",
"entries = []\n",
"for e in reader.get_entries():\n",
" date = e.published or e.updated or e.added\n",
" if not (\n",
" # keep entries from (start, end); \n",
" # similar to, but not exactly like #314 \"Get entries added before\"\n",
" start < date < end\n",
"\n",
" # also keep entries read / marked as important in (start, end);\n",
" # similar to, but not exactly like #294 \"Sort by recently interacted with\"\n",
" or e.read and e.read_modified and start < e.read_modified < end\n",
" or e.important and e.important_modified and start < e.important_modified < end\n",
" ):\n",
" continue\n",
"\n",
" # exclude mark_as_read entries\n",
" if e.read and not e.read_modified:\n",
" continue\n",
"\n",
" # exclude old entries from newly-added feeds;\n",
" # neither of the attributes are exposed on Entry ಠ_ಠ\n",
" recent_sort = reader._storage.get_entry_recent_sort(e.resource_id)\n",
" first_updated_epoch = convert_timestamp(\n",
" list(reader._storage.get_db().execute(\n",
" \"select first_updated_epoch from entries where (feed, id) = (?, ?)\",\n",
" e.resource_id\n",
" ))[0][0]\n",
" )\n",
" if recent_sort != first_updated_epoch:\n",
" continue\n",
"\n",
" entries.append(e)\n",
"\n",
"len(entries)"
]
},
{
"cell_type": "markdown",
"id": "fb3ee675-7024-40dd-b1ba-250fcfc3e5c8",
"metadata": {},
"source": [
"We build a dataframe and derive some additional metrics from the raw data."
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "785d0d2d-8c6b-499e-9275-774bf06570b9",
"metadata": {},
"outputs": [
{
"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>date</th>\n",
" <th>read</th>\n",
" <th>unread</th>\n",
" <th>important</th>\n",
" <th>unimportant</th>\n",
" <th>read_after</th>\n",
" <th>important_after</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>2023-11-13 00:00:00+00:00</td>\n",
" <td>True</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>0 days 00:25:14.015914</td>\n",
" <td>NaT</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>2023-11-13 20:10:14+00:00</td>\n",
" <td>False</td>\n",
" <td>True</td>\n",
" <td>False</td>\n",
" <td>True</td>\n",
" <td>NaT</td>\n",
" <td>NaT</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>2023-11-12 21:40:51+00:00</td>\n",
" <td>False</td>\n",
" <td>True</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>NaT</td>\n",
" <td>NaT</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>2023-11-13 15:40:52+00:00</td>\n",
" <td>True</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>0 days 00:29:16.151919</td>\n",
" <td>NaT</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>2023-11-13 09:00:00+00:00</td>\n",
" <td>False</td>\n",
" <td>True</td>\n",
" <td>False</td>\n",
" <td>True</td>\n",
" <td>NaT</td>\n",
" <td>NaT</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" date read unread important unimportant \\\n",
"0 2023-11-13 00:00:00+00:00 True False False False \n",
"1 2023-11-13 20:10:14+00:00 False True False True \n",
"2 2023-11-12 21:40:51+00:00 False True False False \n",
"3 2023-11-13 15:40:52+00:00 True False False False \n",
"4 2023-11-13 09:00:00+00:00 False True False True \n",
"\n",
" read_after important_after \n",
"0 0 days 00:25:14.015914 NaT \n",
"1 NaT NaT \n",
"2 NaT NaT \n",
"3 0 days 00:29:16.151919 NaT \n",
"4 NaT NaT "
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"attrs = 'feed_url published updated added read read_modified important important_modified'.split()\n",
"df = pd.DataFrame({a: getattr(e, a) for a in attrs} for e in entries)\n",
"\n",
"df['date'] = df.published.combine_first(df.updated).combine_first(df.added)\n",
"\n",
"# for convenience\n",
"df['unread'] = ~df.read\n",
"# important is ternary (bool|None)\n",
"df['unimportant'] = df.important == False\n",
"df['important'] = df.important == True\n",
"\n",
"df['read_after'] = df.read_modified - df.added\n",
"df.loc[df.unread, 'read_after'] = None\n",
"df['important_after'] = df.important_modified - df.added\n",
"df.loc[~df.important, 'important_after'] = None\n",
"\n",
"entries_df = df.reindex(['feed_url', 'date', 'read', 'unread', 'important', 'unimportant', 'read_after', 'important_after'], axis=1)\n",
"\n",
"entries_df.drop(['feed_url'], axis=1).head()"
]
},
{
"cell_type": "markdown",
"id": "d20f0957-93e8-4614-8251-35013fed0530",
"metadata": {},
"source": [
"`read_after` / `important_after` aren't used,\n",
"but I thought some stats may be interesting."
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "b80cc159-b6d3-486d-99c5-60ba66477c57",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"count 1924\n",
"mean 3 days 06:31:43.507435104\n",
"std 15 days 20:02:14.124536110\n",
"min 0 days 00:00:00.009099\n",
"25% 0 days 02:15:42.020138500\n",
"50% 0 days 04:41:16.205114\n",
"75% 0 days 13:57:01.578489750\n",
"max 236 days 12:12:38.108927\n",
"Name: read_after, dtype: object"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"entries_df.read_after.describe()"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "4191d50d-29de-4b72-ab30-84f9f822b426",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"count 31\n",
"mean 11 days 04:52:19.160200451\n",
"std 37 days 08:40:34.612888804\n",
"min 0 days 00:00:02.896490\n",
"25% 0 days 04:01:16.004153\n",
"50% 0 days 10:25:41.507134\n",
"75% 1 days 04:04:09.284485500\n",
"max 170 days 03:27:52.418325\n",
"Name: important_after, dtype: object"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"entries_df.important_after.describe()"
]
},
{
"cell_type": "markdown",
"id": "48c00c5f-26c8-43d2-9be9-ba3b136f3f59",
"metadata": {},
"source": [
"## Feed data\n",
"\n",
"First, some helpers."
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "6b93be26-998a-445a-8eee-2f5ea983f18a",
"metadata": {},
"outputs": [],
"source": [
"from functools import cache\n",
"\n",
"@cache\n",
"def get_title(url):\n",
" feed = reader.get_feed(url)\n",
" return feed.user_title or feed.title\n",
"\n",
"@cache\n",
"def get_tags(url):\n",
" return '-'.join(\n",
" t for t in reader.get_tag_keys(url)\n",
" if not (t.startswith('.') or t in {'main', 'reader-related'})\n",
" )\n",
"\n",
"@cache\n",
"def get_counts(url):\n",
" return reader.get_entry_counts(feed=url)\n"
]
},
{
"cell_type": "markdown",
"id": "d9d5cc19-4dc1-4ab1-8abf-963ffcecee73",
"metadata": {},
"source": [
"We sum the various entry counts into a dataframe.\n",
"\n",
"We also get some all-time counts,\n",
"since we care if a feed has important entries,\n",
"even if none were in *period*."
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "ed2a930b-b64a-4de7-9fbe-24e86adbd8e5",
"metadata": {},
"outputs": [
{
"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>tags</th>\n",
" <th>total</th>\n",
" <th>read</th>\n",
" <th>unread</th>\n",
" <th>important</th>\n",
" <th>unimportant</th>\n",
" <th>total_all</th>\n",
" <th>read_all</th>\n",
" <th>important_all</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>116</th>\n",
" <td>tech</td>\n",
" <td>10</td>\n",
" <td>9</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>364</td>\n",
" <td>363</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>117</th>\n",
" <td>webcomic</td>\n",
" <td>10</td>\n",
" <td>10</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>37</td>\n",
" <td>37</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>118</th>\n",
" <td>webcomic</td>\n",
" <td>158</td>\n",
" <td>154</td>\n",
" <td>4</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>918</td>\n",
" <td>914</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>119</th>\n",
" <td>podcast</td>\n",
" <td>29</td>\n",
" <td>1</td>\n",
" <td>28</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>185</td>\n",
" <td>28</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>120</th>\n",
" <td>tech</td>\n",
" <td>2</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>21</td>\n",
" <td>16</td>\n",
" <td>0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" tags total read unread important unimportant total_all \\\n",
"116 tech 10 9 1 0 0 364 \n",
"117 webcomic 10 10 0 0 0 37 \n",
"118 webcomic 158 154 4 0 1 918 \n",
"119 podcast 29 1 28 0 1 185 \n",
"120 tech 2 1 1 0 0 21 \n",
"\n",
" read_all important_all \n",
"116 363 0 \n",
"117 37 2 \n",
"118 914 1 \n",
"119 28 0 \n",
"120 16 0 "
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df = entries_df.groupby('feed_url').aggregate({\n",
" 'date': 'count',\n",
" 'read': 'sum',\n",
" 'unread': 'sum',\n",
" 'important': 'sum',\n",
" 'unimportant': 'sum',\n",
" # 'read_after': 'mean',\n",
" # 'important_after': 'mean',\n",
"}).rename(columns={'date': 'total'})\n",
"\n",
"df.insert(0, 'feed', df.index.map(get_title))\n",
"df.insert(1, 'tags', df.index.map(get_tags))\n",
"df['total_all'] = df.index.map(lambda u: get_counts(u).total)\n",
"df['read_all'] = df.index.map(lambda u: get_counts(u).read)\n",
"df['important_all'] = df.index.map(lambda u: get_counts(u).important)\n",
"\n",
"feeds_df = df.reset_index(drop=True)\n",
"\n",
"feeds_df.drop(['feed'], axis=1).tail()"
]
},
{
"cell_type": "markdown",
"id": "c1d6d7c5-4fe7-43c3-8e22-50877f9323bf",
"metadata": {},
"source": [
"## Scoring\n",
"\n",
"Here are some relative criteria for scoring:\n",
"\n",
"* important is high even if not read\n",
"* many read of many is higher than one read of few (e.g. 14/17 vs 1/4)\n",
"* none read is much less than one read\n",
"* many unimportant is higher than one read\n",
"* many unimportant is roughly the same as few read\n",
"* many unimportant of many is higher than one unimportant of few\n",
"* important at any point in the past is higher than none important\n",
"* also count read/important in the interval regardless of added\n",
"\n",
"I'm not sure I managed fulfill all of them,\n",
"but the resulting order seems fine.\n",
"\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "0a95596a-2965-45ec-aeee-5f435336bb51",
"metadata": {
"scrolled": true
},
"outputs": [],
"source": [
"# some helpers\n",
"\n",
"def apply_score(df, fn, **kwargs):\n",
" \"\"\"Add all *_s columns into a score column and return as new df.\"\"\"\n",
" df = df.copy()\n",
" fn(df, **kwargs)\n",
" if 'score' not in df:\n",
" score_cols = df[[c for c in df.columns if c.endswith('_s')]]\n",
" df.insert(len(df.columns) - len(score_cols.columns), 'score', score_cols.sum(axis=1))\n",
" df.sort_values('score', inplace=True, ascending=False)\n",
" df.reset_index(inplace=True, drop=True)\n",
" df.index = df.index.astype(int)\n",
" return df\n",
"\n",
"def plot_percentiles(df, *, size=4):\n",
" s = df.total\n",
" plt.figure(figsize=(size, size))\n",
" xs = range(1, 101)\n",
" ys = [s.head(int(x/100 * len(s))).sum() / s.sum() * 100 for x in xs]\n",
" plt.title('percentiles')\n",
" plt.xlabel('feeds %')\n",
" plt.ylabel('entries %')\n",
" plt.plot(xs, ys)\n",
" plt.grid()\n",
" plt.show()\n",
"\n",
"def plot_breakdown(df, title='score breakdown'):\n",
" plt.figure(figsize=(8, 4))\n",
" plt.title(title)\n",
" plt.xlabel('feeds')\n",
" plt.ylabel('score')\n",
" # plt.plot(df.score, label='score')\n",
" cols = [c for c in df.columns if c.endswith('_s')]\n",
" for col in cols:\n",
" plt.plot(df[col], label=col.removesuffix('_s'))\n",
" plt.legend()\n",
" # plt.yscale('symlog')\n",
" plt.show()"
]
},
{
"cell_type": "markdown",
"id": "62108f72-d087-4f55-8a2a-c48c0017e444",
"metadata": {},
"source": [
"In the end, I only managed to come up with a single strategy:\n",
"\n",
"* `read`, `unread` and `unimportant` are used as-is, with some weights applied.\n",
"* For `important` and `important_old` (added before *period*),\n",
" I scaled the number of entries by a \"how important is important\" factor\n",
" that uses a logarithm to give disproportionately more importance\n",
" to feeds with lots of important entries;\n",
" the logarithm bases were chosen by hand (tweaked until they looked right).\n",
"\n",
"I hope this works for others as well, but it needs to be backtested.\n",
"\n",
"Note that in the code below, the order is reversed (bigger score -> lower feed value).\n",
"The can be fixed and normalized to [0, 1] trivially."
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "63e4c664-a51d-4fbe-af55-514c60d0fa40",
"metadata": {},
"outputs": [],
"source": [
"def entry_counting(df):\n",
" # read matters more than unread\n",
" df['read_s'] = df.read * -2\n",
" df['unread_s'] = df.unread\n",
" # unimportant matters as much as read, and more than unread\n",
" # (but, note a lot of unimportant entries are also unread)\n",
" df['unimportant_s'] = df.unimportant * 2\n",
" # for my data, log2(88) -> 6.5\n",
" important_factor = np.log2(df.total.sum() / df.important.sum())\n",
" df['important_s'] = df.important * - important_factor\n",
" # for my data, log10(104) -> 2\n",
" important_all_factor = np.log10(df.total_all.sum() / df.important_all.sum())\n",
" df['important_old_s'] = (df.important_all - df.important) * - important_all_factor\n",
"\n",
"df = apply_score(feeds_df, entry_counting)\n",
"# unused\n",
"df.drop(['read_all'], axis=1, inplace=True)\n",
"\n",
"df.drop(['feed'], axis=1, inplace=True)"
]
},
{
"cell_type": "markdown",
"id": "5876293f-5b37-4d9c-b4b6-a3deaee4c104",
"metadata": {},
"source": [
"Here's what the distribution looks like: \n",
"\n",
"* 5% of feeds account for 30% of entries\n",
"* 20% of feeds account for 50% of entries\n",
" \n",
"This is expected/desired (noisier feeds are lower value)."
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "788b2c27-a308-4132-bd5e-96739f64ae0c",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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",
"text/plain": [
"<Figure size 400x400 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plot_percentiles(df)"
]
},
{
"cell_type": "markdown",
"id": "74f3fe00-0d3c-4004-9797-deb9b445ec25",
"metadata": {},
"source": [
"Here's what the score is composed of for each feed\n",
"(note the interesting ones at the ends)."
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "e94d8084-36a3-4637-b5ab-f1bd1a12d579",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAsMAAAGJCAYAAABvpz7VAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/SrBM8AAAACXBIWXMAAA9hAAAPYQGoP6dpAACX4ElEQVR4nOzdd3gUVffA8e9sy6Y3UgmQAKH3HoogVcGCoCBWlBcbKIgotpcXbCigYsXe9WdFVESQokjvSA8EAoFAei+bsju/PybZsCRACIFlyfk8T57sztydubNJNmfPnnuvoqqqihBCCCGEEHWQztkdEEIIIYQQwlkkGBZCCCGEEHWWBMNCCCGEEKLOkmBYCCGEEELUWRIMCyGEEEKIOkuCYSGEEEIIUWdJMCyEEEIIIeosCYaFEEIIIUSdJcGwEEIIIYSosyQYFkIIFzRjxgwURSEtLc3ZXbE7cuQIiqIwd+7cGj3+s88+Q1EUjhw5UrsdE0KIs5BgWAghhBBC1FkSDAshhBBCiDpLgmEhhLjE8vPznXp+m82GxWJxah+EEOJyIcGwEKJOyc3NZfLkyURGRuLm5kZwcDCDBg1i27ZtDu02btzI0KFD8ff3x9PTk3bt2vHGG284tFm5ciV9+vTB09MTPz8/brzxRvbt2+fQpry2d+/evdx22234+/vTu3dv+/6vvvqKzp074+7uTkBAALfeeivHjh2r9vWkpaUxatQofHx8CAwMZNKkSZUCXUVRmDhxIl9//TWtW7fGzc2NJUuWAJCYmMi9995LSEgIbm5utG7dmk8++cTh8cXFxUyfPp3OnTvj6+uLp6cnffr04a+//jpn/1RV5b777sNkMrFgwQL79j179tC/f3/c3d2JiIjghRdewGazVXmMd999197v8PBwJkyYQFZWln3/m2++iV6vd9j26quvoigKU6ZMsW+zWq14e3szbdo0wLHG+YMPPqBJkya4ubnRtWtXNm/efM5rE0JcGQzO7oAQQlxKDzzwAD/++CMTJ06kVatWpKens2bNGvbt20enTp0AWLZsGddddx1hYWFMmjSJ0NBQ9u3bx6JFi5g0aRIAy5cv59prr6Vx48bMmDGDwsJC3nrrLXr16sW2bduIjIx0OO8tt9xCdHQ0L730EqqqAvDiiy/y3//+l1GjRvGf//yH1NRU3nrrLa666iq2b9+On5/fOa9n1KhRREZGMmvWLDZs2MCbb75JZmYmX3zxhUO7lStX8v333zNx4kTq1atHZGQkycnJ9OjRwx4sBwUF8ccffzBu3DhycnKYPHkyADk5OXz00UeMGTOG8ePHk5uby8cff8yQIUPYtGkTHTp0qLJvVquVe++9l++++46ff/6ZYcOGAZCUlMTVV19NaWkpTz75JJ6ennzwwQe4u7tXOsaMGTOYOXMmAwcO5MEHHyQ2Npb58+ezefNm1q5di9FopE+fPthsNtasWcN1110HwOrVq9HpdKxevdp+rO3bt5OXl8dVV13lcI5vvvmG3Nxc7r//fhRFYfbs2YwYMYLDhw9jNBrP+TMQQrg4VQgh6hBfX191woQJZ9xfWlqqRkVFqY0aNVIzMzMd9tlsNvvtDh06qMHBwWp6erp927///qvqdDr1rrvusm/73//+pwLqmDFjHI515MgRVa/Xqy+++KLD9l27dqkGg6HS9tOVH/eGG25w2P7QQw+pgPrvv//atwGqTqdT9+zZ49B23LhxalhYmJqWluaw/dZbb1V9fX3VgoIC+3NSVFTk0CYzM1MNCQlR7733Xvu2+Ph4FVDnzJmjlpSUqKNHj1bd3d3VpUuXOjx28uTJKqBu3LjRvi0lJUX19fVVATU+Pt6+zWQyqYMHD1atVqu97dtvv60C6ieffKKqqqparVbVx8dHfeKJJ1RV1X5OgYGB6i233KLq9Xo1NzdXVVVVfe2111SdTmf/uZb3NzAwUM3IyLAf/5dfflEB9bfffqvqqRdCXGGkTEIIUaf4+fmxceNGTpw4UeX+7du3Ex8fz+TJkytlZhVFAeDkyZPs2LGDsWPHEhAQYN/frl07Bg0axOLFiysd94EHHnC4v2DBAmw2G6NGjSItLc3+FRoaSnR0dLVKEAAmTJjgcP/hhx8GqNSHvn370qpVK/t9VVX56aefuP7661FV1aEPQ4YMITs72146otfrMZlMgFZvnJGRQWlpKV26dKlUXgJaWcUtt9zCokWLWLx4MYMHD3bYv3jxYnr06EG3bt3s24KCgrj99tsd2i1fvpzi4mImT56MTlfx72r8+PH4+Pjw+++/A6DT6ejZsyf//PMPAPv27SM9PZ0nn3wSVVVZv349oGWL27RpU+nnOnr0aPz9/e33+/TpA8Dhw4crXZsQ4sojwbAQok6ZPXs2u3fvpkGDBnTr1o0ZM2Y4BD2HDh0CoE2bNmc8xtGjRwFo3rx5pX0tW7YkLS2t0iC5qKgoh/sHDx5EVVWio6MJCgpy+Nq3bx8pKSnVup7o6GiH+02aNEGn01Waq/f086emppKVlcUHH3xQ6fz33HMPgEMfPv/8c9q1a4fZbCYwMJCgoCB+//13srOzK/Vp1qxZLFy4kB9//JF+/fpV2n/06NFK/YbKz+eZnmeTyUTjxo3t+0ELYLdu3UphYSGrV68mLCyMTp060b59e3upxJo1a+yB7qkaNmzocL88MM7MzKzUVghx5ZGaYSFEnTJq1Cj69OnDzz//zJ9//smcOXN45ZVXWLBgAddee+1FO+/p9bA2mw1FUfjjjz/Q6/WV2nt5edXoPOXZ6+qcH+COO+7g7rvvrvIx7dq1A7RBfmPHjmX48OE8/vjjBAcHo9frmTVrlv3Nw6mGDBnCkiVLmD17Nv369cNsNtfoWs5H7969KSkpYf369axevdoe9Pbp04fVq1ezf/9+UlNTqwyGq3r+AXtttxDiyibBsBCizgkLC+Ohhx7ioYceIiUlhU6dOvHiiy9y7bXX0qRJEwB2797NwIEDq3x8o0aNAIiNja20b//+/dSrVw9PT8+z9qFJkyaoqkpUVBTNmjWr8bUcPHjQIesbFxeHzWarNIDvdEFBQXh7e2O1Ws94neV+/PFHGjduzIIFCxyC7f/9739Vtu/RowcPPPAA1113Hbfccgs///wzBkPFv5tGjRpx8ODBSo87/fk89Xlu3LixfXtxcTHx8fEO/e7WrRsmk4nVq1ezevVqHn/8cQCuuuoqPvzwQ1asWGG/L4QQp5IyCSFEnWG1Wit9rB8cHEx4eDhFRUUAdOrUiaioKObNm+cwVRdUZArDwsLo0KEDn3/+uUOb3bt38+effzJ06NBz9mXEiBHo9XpmzpxZKQOpqirp6enVuqZ33nnH4f5bb70FcM4st16vZ+TIkfz000/s3r270v7U1FSHtuX9Krdx40Z7LW5VBg4cyLfffsuSJUu48847HaZNGzp0KBs2bGDTpk0O5/v6668rHcNkMvHmm286nPvjjz8mOzvbPjsFgNlspmvXrvzf//0fCQkJDpnhwsJC3nzzTZo0aUJYWNhZnxchRN0jmWEhRJ2Rm5tLREQEN998M+3bt8fLy4vly5ezefNmXn31VUAbjDV//nyuv/56OnTowD333ENYWBj79+9nz549LF26FIA5c+Zw7bXXEhMTw7hx4+xTq/n6+jJjxoxz9qVJkya88MILPPXUUxw5coThw4fj7e1NfHw8P//8M/fddx9Tp04953Hi4+O54YYbuOaaa1i/fj1fffUVt912G+3btz/nY19++WX++usvunfvzvjx42nVqhUZGRls27aN5cuXk5GRAcB1113HggULuOmmmxg2bBjx8fG89957tGrViry8vDMef/jw4Xz66afcdddd+Pj48P777wPwxBNP8OWXX3LNNdcwadIk+9RqjRo1YufOnfbHBwUF8dRTTzFz5kyuueYabrjhBmJjY3n33Xfp2rUrd9xxh8P5+vTpw8svv4yvry9t27YFtDc7zZs3JzY2lrFjx57zORFC1EFOmsVCCCEuuaKiIvXxxx9X27dvr3p7e6uenp5q+/bt1XfffbdS2zVr1qiDBg2yt2vXrp361ltvObRZvny52qtXL9Xd3V318fFRr7/+enXv3r0ObcqnQEtNTa2yTz/99JPau3dv1dPTU/X09FRbtGihTpgwQY2NjT3rtZQfd+/everNN9+sent7q/7+/urEiRPVwsJCh7bAGaeTS05OVidMmKA2aNBANRqNamhoqDpgwAD1gw8+sLex2WzqSy+9pDZq1Eh1c3NTO3bsqC5atEi9++671UaNGtnbnTq12qneffddFVCnTp1q37Zz5061b9++qtlsVuvXr68+//zz6scff+wwtVq5t99+W23RooVqNBrVkJAQ9cEHH6w07Z2qqurvv/+uAuq1117rsP0///mPCqgff/yxw/Yz9bf8Ofvf//5X5XMmhLiyKKoqIwSEEEIIIUTdJDXDQgghhBCizpJgWAghhBBC1FkSDAshhBBCiDpLgmEhhBBCCFFnSTAshBBCCCHqLAmGhRBCCCFEnSWLbpwnm83GiRMn8Pb2dliWVAghhBBCXB5UVSU3N5fw8HB0urPnfiUYPk8nTpygQYMGzu6GEEIIIYQ4h2PHjhEREXHWNhIMnydvb29Ae3J9fHyc3BshhBBCCHG6nJwcGjRoYI/bzkaC4fNUXhrh4+MjwbAQQgghxGWsOiWtMoBOCCGEEELUWRIMCyGEEEKIOkuCYSGEEEIIUWdJMCyEEEIIIeoslw2GX375ZRRFYfLkyfZtFouFCRMmEBgYiJeXFyNHjiQ5OdnhcQkJCQwbNgwPDw+Cg4N5/PHHKS0tvcS9F0IIIYQQlwOXDIY3b97M+++/T7t27Ry2P/roo/z222/88MMPrFq1ihMnTjBixAj7fqvVyrBhwyguLmbdunV8/vnnfPbZZ0yfPv1SX4IQQgghhLgMuFwwnJeXx+23386HH36Iv7+/fXt2djYff/wxr732Gv3796dz5858+umnrFu3jg0bNgDw559/snfvXr766is6dOjAtddey/PPP88777xDcXGxsy5JCCGEEEI4icsFwxMmTGDYsGEMHDjQYfvWrVspKSlx2N6iRQsaNmzI+vXrAVi/fj1t27YlJCTE3mbIkCHk5OSwZ8+eKs9XVFRETk6Ow5cQQgghhLgyuNSiG99++y3btm1j8+bNlfYlJSVhMpnw8/Nz2B4SEkJSUpK9zamBcPn+8n1VmTVrFjNnzqyF3gshhBBCiMuNy2SGjx07xqRJk/j6668xm82X7LxPPfUU2dnZ9q9jx45dsnMDHM05yuLDizmUdeiSnlcIIYQQoi5wmWB469atpKSk0KlTJwwGAwaDgVWrVvHmm29iMBgICQmhuLiYrKwsh8clJycTGhoKQGhoaKXZJcrvl7c5nZubm33pZWcswTz/3/lMWz2NFQkrLul5hRBCCCHqApcJhgcMGMCuXbvYsWOH/atLly7cfvvt9ttGo5EVKyqCxtjYWBISEoiJiQEgJiaGXbt2kZKSYm+zbNkyfHx8aNWq1SW/puqI9osGIC4zzsk9EUIIIYS48rhMzbC3tzdt2rRx2Obp6UlgYKB9+7hx45gyZQoBAQH4+Pjw8MMPExMTQ48ePQAYPHgwrVq14s4772T27NkkJSXx7LPPMmHCBNzc3C75NVVHtL8WDB/MOujkngghhBBCXHlcJhiujtdffx2dTsfIkSMpKipiyJAhvPvuu/b9er2eRYsW8eCDDxITE4Onpyd33303zz33nBN7fXblmeEj2UcosZZg1Bud3CMhhBBCiCuHoqqq6uxOuJKcnBx8fX3Jzs6+JPXDqqrS8/96kleSx083/EQz/2YX/ZxCCCGEEK7sfOI1l6kZrqsURaGpX1MADmZKqYQQQgghRG2SYNgFlNcNx2XJIDohhBBCiNokwbALsA+ik8ywEEIIIUStkmDYBUiZhBBCCCHExSHBsAsoHzR3Iv8EecV5Tu6NEEIIIcSVQ4JhF+Dr5kuwezAgdcNCCCGEELVJgmEX0dS/rFRCFt8QQgghhKg1Egy7CFmWWQghhBCi9kkw7CIkMyyEEEIIUfskGHYRp06vJosGCiGEEELUDgmGXUQT3yYoKGQVZZFuSXd2d4QQQgghrggSDLsIs8FMQ5+GABzIPODk3gghhBBCXBkkGHYhMohOCCGEEKJ2STDsQux1wzKITgghhBCiVkgw7EJkWWYhhBBCiNolwbALKc8MH8o6hE21Obk3QgghhBCuT4JhF9LQuyEmnQmL1cLx3OPO7o4QQgghhMuTYNiF6HV6mvg1AaRuWAghhBCiNkgw7GJOXXxDCCGEEEJcGAmGXUz59GoSDAshhBBCXDgJhl1MU39tRom4LJlrWAghhBDiQkkw7GLKM8NHc45SbC12cm+EEEIIIVybBMMuJtgjGB+TD1bVSnx2vLO7I4QQQgjh0iQYdjGKohDpEwlAQm6CczsjhBBCCOHiJBh2QRHeEQAcyz3m5J4IIYQQQrg2CYZdUEOfhgAk5EhmWAghhBDiQkgw7IIaeDcAkFXohBBCCCEukATDLqg8GJYyCSGEEEKICyPBsAsqD4ZP5p+U6dWEEEIIIS6ABMMuKNAciLvBHRWVxLxEZ3dHCCGEEMJlSTDsghRFoaG3NohOSiWEEEIIIWpOgmEXJXXDQgghhBAXToJhFyXBsBBCCCHEhZNg2EU18NGCYZlrWAghhBCi5iQYdlGSGRZCCCGEuHASDLuo8mA4MS8Rq83q5N4IIYQQQrgmCYZdVKhHKAadgRJbCckFyc7ujhBCCCGES5Jg2EXpdXoivCIAKZUQQgghhKgpCYZdWIS3Fgwn5MogOiGEEEKImpBg2IXJwhtCCCGEEBdGgmEXVj6I7nju8eo94Og6WPkiWEsuYq+EEEIIIVyHwdkdEDXX0EfLDFd7ruElT8HJHdCgO0QPvHgdE0IIIYRwEZIZdmHlNcPHco+hquq5H5BVFjTnVDOTLIQQQghxhZNg2IVFeEWgoFBQWkC6Jf3sjUsKoTBDu52XcvE7J4QQQgjhAiQYdmEmvYlQz1CgGnXDOScqbufJvMRCCCGEECDBsMur9rLMDsGwZIaFEEIIIUCCYZdXHgyfc65hCYaFEEIIISpxmWB41qxZdO3aFW9vb4KDgxk+fDixsbEObSwWCxMmTCAwMBAvLy9GjhxJcrJjSUBCQgLDhg3Dw8OD4OBgHn/8cUpLSy/lpdSq6meGEytuS5mEEEIIIQTgQsHwqlWrmDBhAhs2bGDZsmWUlJQwePBg8vPz7W0effRRfvvtN3744QdWrVrFiRMnGDFihH2/1Wpl2LBhFBcXs27dOj7//HM+++wzpk+f7oxLqhVSJiGEEEIIUXOKWq05uS4/qampBAcHs2rVKq666iqys7MJCgrim2++4eabbwZg//79tGzZkvXr19OjRw/++OMPrrvuOk6cOEFISAgA7733HtOmTSM1NRWTyXTO8+bk5ODr60t2djY+Pj4X9RqrY3/Gfm757Rb83fz559Z/ztzw29th/6KK+08lgpvXxe+gEEIIIcQldj7xmstkhk+XnZ0NQEBAAABbt26lpKSEgQMrFpNo0aIFDRs2ZP369QCsX7+etm3b2gNhgCFDhpCTk8OePXuqPE9RURE5OTkOX5eT8sxwZlEmucW5Z254apkESKmEEEIIIQQuGgzbbDYmT55Mr169aNOmDQBJSUmYTCb8/Pwc2oaEhJCUlGRvc2ogXL6/fF9VZs2aha+vr/2rQYMGtXw1F8bT6EmAWXtDcNZSiVPLJEBKJYQQQgghcNFgeMKECezevZtvv/32op/rqaeeIjs72/517Ng5anOd4Jx1w6XFFcFvQBPte74Ew0IIIYQQLhcMT5w4kUWLFvHXX38RERFh3x4aGkpxcTFZWVkO7ZOTkwkNDbW3OX12ifL75W1O5+bmho+Pj8PX5eacwXBeEqCC3gTBLcu2STAshBBCCOEywbCqqkycOJGff/6ZlStXEhUV5bC/c+fOGI1GVqxYYd8WGxtLQkICMTExAMTExLBr1y5SUioCwWXLluHj40OrVq0uzYVcBOcMhstLJLzDtC+QmmEhhBBCCMDg7A5U14QJE/jmm2/45Zdf8Pb2ttf4+vr64u7ujq+vL+PGjWPKlCkEBATg4+PDww8/TExMDD169ABg8ODBtGrVijvvvJPZs2eTlJTEs88+y4QJE3Bzc3Pm5V2QcwfDZYPnfOqDV1nNtATDQgghhBCuEwzPnz8fgH79+jls//TTTxk7diwAr7/+OjqdjpEjR1JUVMSQIUN499137W31ej2LFi3iwQcfJCYmBk9PT+6++26ee+65S3UZF0VDn4YAHM46jKqqKIri2KA8M+wTDl5B2m0pkxBCCCGEcJ1guDrTIZvNZt555x3eeeedM7Zp1KgRixcvrs2uOV2LgBa4G9xJt6RzIPMAzQOaOzZwCIYlMyyEEEIIUc5laobFmbnp3ega2hWA1YmrKzdwKJMI1m5LZlgIIYQQQoLhy96+RfDTf+DImjO3UVX6WI0ArEmsol2VmeEUcM3FB4UQQgghao0Ew5e7A0tg1w+w/yylHQkb6L3pCwB2pOwgp/i0VfLswXB98CyrGbaVQGHmReiwEEIIIYTrkGD4cte0bHnpuOVnbnNwKRGlViKLS7CqVjac2FCxz2aF3LLV9XzCweAG7v7afSmVEEIIIUQdJ8Hw5a5xP1D0kBYLWQlVtykLlPsUFgKnlUrkpYBq1Y5RXi8sg+iEEEIIIQAJhi9/7n4QoQ2OI25F5f25SZC0C4DeBRZAC4bts2/YF9wIBZ1eu+0p06sJIYQQQoAEw67hbKUSh1bab3axWHBHIbUwldjMWG2jfSaJ8IrHSGZYCCGEEAKQYNg1NB2gfT+8CqwljvvKA+SoqzAB3YuswCmlEqfOJFFOgmEhhBBCCECCYdcQ1gE8AqE4F45tqthus1ZkhntNBkVH79wsAFYfL5tv+JQ5hgtLCzmcfbiidjg/9VL0XgghhBDisiXBsCvQ6aBJWXb41FKJE9u16dHcfCGqL9RrRu+yQXT/pv6rTbFWlhnO8gzg1kW3cuPCG9mnK6snlsywEEIIIeo4CYZdRVV1w+W3m/QDvQHC2lO/1Epjoy9W1cr6E+sh5wQWReHh5L+0rDCwqSRde5wMoBNCCCFEHSfBsKto0l/7nrQTcssyuuXBcHmgHNYegN62itXorDnHmRYUyI78Y/ZD7S8qD4YlMyyEEEKIuk2CYVfhFaTVDoNWJ1yQAYlbtfvlJRTlwXCmVgu8JnENswwFrPT0wKgzcE+bewDYn39ca5+fBtbSS3UFQgghhBCXHQmGXcmppRKH/wLVBsGtwLe+tj20HQCd04/hrjeTVpjGd94eKKrKrJ4vcHuL2wGIzz2GRacDVChIc8KFCCGEEEJcHiQYdiXlwfChlXDgz7JtAyr2m30goIk2xZpvU/vmaflWhjQZRrBHMAHmAKyqlYM+ZTNKSKmEEEIIIeowCYZdSURXbeaIwgzY/ZO2rTxALldWKjHCFIpB0TE+K5vbjdq8woqi0CKgBQD7PH209jKITgghhBB1mATDrkRvgMZ9tdu2EjB6QMMYxzZlwfDVOZlsav4gj2Rmg099++7yYDjWzU3bIMGwEEIIIeowCYZdzamZ4KirwODmuL8sGObkvxjLA91TVp9rGdASgP06m7ZByiSEEEIIUYdJMOxqTq0RPr1EAiqC4YzDkLJfu31KMFyeGT5gK8AKkhkWQgghRJ0mwbCr8Y3QVptz84XmQyvv9wgA34ba7cN/ad9PKZNo6NMQd4M7FtXKEaNBMsNCCCGEqNMkGHZFt30Pj+6qmFLtdGHaFGuUFGjfT8kM6xQdzf2bA7DPZJLMsBBCCCHqNAmGXZHRDGbfM+8vX5yj3CnBMFSUSux3M0lmWAghhBB1mgTDV6LyuuFy3o7BcMvAskF0khkWQgghRB0nwfCV6NRg2D1AyySfwj7XsMmIWpQNJZZL2TshhBBCiMuGBMNXIu8Q8ArVbvtUritu6tcUg2IgR6/npEEP+ZIdFkIIIUTdJMHwlao8O3xavTCASW+iiV8TQEolhBBCCFG3STB8pYroqn0PaFzlbvsgOpMMohNCCCFE3WVwdgfERdL9fnD3g1Y3Vrm7ZWBLfjn0C/tMRgmGhRBCCFFnSTB8pTL7QLfxZ9xdPtewNr2alEkIIYQQom6SMok6qrxMIslgICvnmJN7I4QQQgjhHBIM11FeJi8aGLWFO/blVQTDJ/JO8Oa2N4nLjHNW14QQQgghLhkJhuuwFl4NANhvSaPUVsrnez5n+C/D+XDXh8zdOtfJvauG+H8gabezeyGEEEIIFyY1w3VYS79olmXuZqWay+Lfx7A/Y799378p/2K1WdHr9E7s4Vls+hAWTwU3X3h0t1YjLYQQQghxniQzXIe1CGoHwA4D7M/Yj6+bLzNiZuBh8CCvJI+4rLJSiS2fwttdYe8vTuztKf79VguEAYqyYed3zu2PEEIIIVyWBMN1WOtGfTGo2u0bfFvx6/BfGdlsJO3Kg+SUHWDJhj//C2kH4Pu7YOWLYLM5r9P7foOFD2m3g1pq3zd9AKrqvD4JIYQQwmVJMFyHBXgE8VGDG/kmMYkXjx8mwOQHQMfgjgDsSN2hZYWLc8HkrT3on9nw3e1gybn0HT60En68F1QrdLgd7l0CJi8tUI9fden7I4QQQgiXJ8FwHde51xO0VcxaQBm3HIAOwR0A2J6yHTa+pzW89hUY/h7o3SB2MXw0EE7sgMKs6meKVRXWvgk/jtNKHQoyqvc4mw1il8C3t4O1GFreANe/qS0q0v5Wrc2mD6t7yVhKLRRZi6rdvk7b8Q0seQqsJc7uiRBCiIvp2GZ4udF5/T+9UsgAurrO7AOd7oL1b2tfzQbTrl47dIqOxLxEUguSCfIOg7a3gMEE9ZppmeG0WPigb9lBFHDzAXdf6HAHXPU46Kp4n7XqFfh7lnZ794+g6CGyF7S4Dhp0A79G4O4PiqK1yYjXguZ/v4GsBG1bkwEw8iPQl/3qdh0Pmz/SAvSsY+DX4KyXaym1MPLXkaio/Hzjz7jp3S78OXSmEgtseAeaXQMhrWv32AUZ8Nsk7Q1IRBdoM7J2jy+EEOLysekDsGTB3y9rcYHBxf8/ngfJDAvo/oAWmMavgqRdeJm8iPaLBmCHm5u232DS2kZ0hvv+1oJSg3vZAVRtIFtWAvz9Eiz4D5Selnld/25FINz2FghurZU7xP8DfzwBH/SD2VEwKwLejdHuv9kBVr2sHdfNB7r+B0Z/5fgHGtwCoq4C1QZbPjnnpf4R/wcJuQkcyz3GusR1F/CkXSY2vAMrnoNPh0JqbO0ee+f3WiAM8K8MUhRCiCtWaTEcWKLdLkjTxufUIRIMCy2b2nq4dnv9OwB0MAUAsN3TG7rc49jeOxTuXADPJsGzKTA1DiZuheteB50Bdv8EXwyvKIPY9gUsfUq7ffWzWmb3oXXwyHYY/CJE9gGvUG1/cR6k7IUT2wEFmvSHER/BY7Ew7FUweVTuf7f7ys7zuZYpPQNVVflm/zf2+0uPLj2PJ+kyZC2FzWVvACxZ8NVIyDlZO8dWVe35LBe3HPJSa+fYQgghLi/x/0DRKWOBNn/kvL44gQTDQtNjgvZ914+Qc5IOJw8AsMM/FMy+Z36cwQ28gqBeU+hyL9zxk5bFTVgHHw/WMsK/PqK17fkwXDW14rEBjaHnRBi7CKbGwjPJWlB9xwIY8SE8ugfu/Bna3VIpCFZVla/2fsWSI0ug2bXg2wAK0mHPz2fs6r+p/7I/Yz9K2cwTf8cvpSg/5fyfq8vFgT8g5zh4BEJgNGQfg69v1mYAuVCJW7U3JQZ3bdYO1aq9yRFCCHHl2fer9r3FddonxQnrIXmPc/t0CUkwLDQRnaFhDNhK4NeH6Zi4E4B9pblYSs+cba2kcT+4dyn4RED6wbKMsAqdx8Kg5yvqgatiNGtBddMB0G4U+NY/Y9P1J9bzyuZXePKfJzlekKQF4qDVPFXFZuObVc8CcGNePiGlpeSrpaz9qJc2WMBaevbrUlVY9xb8MQ1KCs/e9lIpv9ZOd2tvQrxCIHk3fHeH9pHXhSjPCrceXvHJwL//d2HHFEIIcfmxWWH/79rtbuOhxTDtdjVKD89LQYZzp2Y9CwmGRYWYsuxw3DLCS60EKUZKVSu7085zyeOQVvCf5RCqzVdMm5th2GtnD4TP0xd7vwDAqlr5bM9nWrG/3g1ObIODyx3/4IpySf3uVpblHwHgtgaDGRxxNQBLDVZtAY/5MXB0/ZlPuPkj+PNZbXaNBeO1Fw9nStmvfayl6LQ3Av6N4PYftKnm4v+BXx6q+YtOUS7sKssCd7pLGzinM8DJHbVflyyEEMK5EtZrdcLu/tCoF3Qdp23/9zvt/0FtUFX4YSx82A+SdtXOMWuRBMOiQvOh4B8JgAJ0CO4ElM03fL58wmDcMu1rxIeg02O1Wfly75fM2zqPElvNp+o6mHmQtSfW2u8vjFtImo6K2Q6+HqkNxPtoECx6FD4axI/J6ylVFDp61Kflje8zuKNWZ/y3jx8Wj0Btarkvb4LDf1c+4dF1sOTJsjuKNrDgj2nOXehjc9nUN82HVsygEdYeRn+pBa67foB1b9Ts2Ht+hpJ8CGyqfVrgWQ+aDtT2/fvthfddCCHE5aN8sFzzoaA3QlRf7fW/OFcbSF0b4pZrg/RT9oGbd+0csxZJMCwq6PRaXS9As2vp2FCbOm1Hyo6aHc9o1qZM0+lILUjlvmX3MXvzbD7e/TEf7ap5cf5X+74CYGDDgbSr144iaxFf7/taq0duGKPVuZbkw/FNsOUTSlL38YOPVvc8psskANoFtSPUM5QCWwlrR7wB0UOgtBC+Ge0YEGcf11bes5VqGe6bPwEULRhdO6/G13BBLNmwo6xkoXzwYLkm/bWBhqCtFnjy3/M//jYt606nuyqy+eXzOe/8/rL9mEsIIcR5UtWKYLjl9dp3RakoPdzyyYUnfqyl2kq2oP3PKku6XU4kGBaOuozTBq2N+IAOQR0ALTNsU2seAK0/sZ6bf7uZTUmbMOqMAHzw7wfEZpz/R+5phWksOrQIgLtb3824ttrHOd/u/5Zc72BtVbqnE2HCZhj5MfSazIoON5GqV6jnXo+BDbUMp07RMajRIAD+PLFGy6g2uwZKLVpAfOgvbWaK7+6A/FQIaQs3vAVtRsA1ZVPELZ9RvUypzXr2Gt78NFg2Hd7uCgsnQMbhsx/v32+1YL9ec21audNkt76J1dFXadn3BfeddYaNSpL3wvHNWna5/ZiK7c2uBTdfbcDe0TXVP54Ql6uCDDiw9MLHAFhLtb/bj4dAbnLt9O1KFr9ae+0szHJ2TwRopYU5iWD0hMZXV2zvcJuWWEreDcc2Xdg5dnwNqfvA7Oc4iP4yIsGwcKSUTWdm9qFFYAvMejPZRdkcyT5y3ocqtZXy9va3uX/Z/WRYMmjm34yfbviJAQ0HUKqW8uzaZ8+7XOL72O8pthXTrl472ge1p1+DfjTxbUJeSR7fxZbNhavTQ1AzaHszDJrJ/7lp72pvaXYLRr3RfqwhkUMA+PvY31hQYdQXFQHx/90K34zSpnhzD4Bbv66Y0aLHgxUZ9F8mwKrZsO1L2PsrHF6llVVs+aSsRGOgVrIxq7429dmWTyA3SXtsXqpWhzyvLax9QyvV2PEVvNUFFj4E6YcqPwE2W8XAuW7jK9Vhx2fHM/r30TxUeoRRDSLYnnMYVsys8rk8mXeSYutpQXp5Vrj5teAVXLHdaIbWN2q3Zc5h4eoyDmuLBn0zCl5rBSuer/m0hCtmaH+3xzZonyJd6ODVK9mxTdrr4JrXtRVFT5+PXjhYk7iGyX9NZk/6RZzVoTwr3Gyw9jpfzt2/ovRwy8c1P35RHvz1ona77xOoZr+aH+sikmBYnJFRZ6RNvTbA+dUNH8w8yNzNcxn04yDe3/k+Kio3N7uZr4d+TZRvFM/2eBY/Nz/2Z+zno53VL5ewlFrsAe+dre9EURR0io5722of53y598tKM1/sz9jPtpRtGBQDNze72WFfu3rtCPMMo6C0QKtBNriVBcTXsktnY17WDk4ajHDLp9oAtVMNfE4rm7CVan/ov06E7++EL26AT6/VAuEtn2hZ1pICbfGKuOXa9lebw/t94Y122gwVJQUQ3hFueBuaDtKmMdvxtZYp/mk87F4AeWVTwMX/DelxYPKuKF0oszV5K3csvoPEvEQA4gw67goPZebB/yM7VhspnGXJ4pt93zB60WgG/zSYUb+N4kTeCe0AJRbYWZbp7nR35R9AeaZ47y9QXFDdH5uo61RVW+a1/E2gsyXvhU+u0RbzUXRQmAGr58K8NvDTf86vtGjXj9rfMKAaPbSAeMm0i9Txs0jeC1+OgK9vuXye59NlHoVvbwNrWQB8dA38fP+VX3Zls8Jfs2B+L+1TvWqWHKxIWMHDKx5mRcIKxi8dz67UizDoTFW1JA5UlEicqmtZqcSen7VB2zWx/m3IS0b1b8TXPl48tuoxVGeOtzmDOrsc8zvvvMOcOXNISkqiffv2vPXWW3Tr1s3Z3brsdAjuwJbkLWxP2c6I6BGANsfv+hPrOZTtmLksLC1kRcIK9qbvtW8LMAfwRNcnGNZ4mH1bPfd6PN39aZ745wk+2PkBVze8mhYBLez7j+UeY2fqTrqEdCHEM8S+/ffDv5NhySDMM8xe7gBwbdS1vLP9HU7kn+CXuF8Y3WI0AJuTNjN3y1wABjYaSLDHKZlOQFEUBjUaxBd7v2DpkaUMaDgAm97IF20G8kbJHkqBHwKCedEI/U5/YnQ6GP6utgRyyj6tjrf8q6QA6kVDaNuyr3baCnn7f9e+ErdoMzMAhHeCfk9B9CAty9vpTji+RVsOM24Z7Ppe+wJtKezyWSw63OYwCGFJ/BKeXvM0JbYS2tVrx/O9n+fzPZ+z4OACfvTxZuW6abRL+I01SRsptVVMI3co+xC3/zKCd+pdRauMY1CYCT71tU8HTtegB/g11IKI2MVa5r20WJuovTgPPIOrXhRF1F0Z8fD7Y3BohTbbS+ex0Hsy+IRfsi4UWYv4eNfHfB/7PRFuftx4dDdDCtLwCW6tzcCSuBU2zNfmRt/1gxbg9noErn7m7MvRntwJv0xkt8nEi5EtScHKlMR4hm75BCWsvXatF1txAfwzWwvIy/+uP+gHo7/Wpsu8XFhytE/b8lO118R+T2tZ9D0/g3c4XPPSmR9rs8HBpbDhXUjcpo1DaTFMG+x1CX+PasSSrSU0DpYt8PTz/VqiY9jr2jSip8tOhIzDrDi6nKlHf6YUFR/05JTkcv+y+3l/0Pu0DWp77vOqqrYQk9nv7LM4pe6HjEPa32b04Mr763fWvhK3ajMutb0Frnpc+/9WHblJsPYNcnQK/4tswfKy/8crE1YyoNGA6h3jElHUyzFEv8i+++477rrrLt577z26d+/OvHnz+OGHH4iNjSU4OPisj83JycHX15fs7Gx8fHwuUY+d55/j/zBhxQQifSL5dfiv/HP8H979912HgPd0BsVA3wZ9ubHJjfSO6G2vEz6VqqpM+XsKyxOW09y/OR8P+ZiVCSv55dAvbE3eCoBJZ+LmZjdzb5t7CfYIZvgvwzmcfZipXaZyd2vHzOU3+75h1qZZ1Peqz4yeM3j/3/fZkrwFALPezBfXfkHLwJaV+rEzdSe3L74dd4M7vw3/jec3PM+q46sACHQLIL1IW0Xv7lZ3M6nzpCqv5XxkF2WzdP/3LDm4EL3Rna6Rg+ga1o02gW0cSjgAOL5VC4SPrIXk07ICEzZTEhhFcn4yi+MX89Z2LTs1oOEAZvWZhXvZUtlbj6/luT8f4LC+4qEtS+GG7Cw6Wwp5JiiQgyYT7jYbc1PSuKrQogUBfZ+o+gJWvgD/zNFqyRRFC/xP5RmkBcx+DbVBEiFttDcDgU208pXzoapaPXVWQlnpSwvHj/HE5au0GNa/pZUQlVq0DGz5uINLGBRvOrmJ5zc8z5GcIw7bTSoMaNif65vdTNfQrpgNZjixQxsUW75wT3BruOk9CGtX+cD56eR92I83dbl86+vNqf9EYwoLeTYjl4Z3/qYFblWw2qysP7meX+N+JaUwhasbXM2wxsOo516v+hd3cDn8PgWyjmr3mw/TPjVKi9We4+vfgA5jzn6MS8FaqgXCccu0lUbHr9TmkN/1I/xUNoXX4Be1BZhOVZQL27/WprPMjK/62PU7Q6Oe2kf6Zl8t+DP7ags6+UdpSQtnSTsI/zdGm2/fYNY+yfv3W+3vQe8GfR7TEgrHNsKRNXBkNWQlsMLDnanB9ShVFK7Ny+fZ9AweDglim9mMl8GdDwZ/fOaAOOck7PyO3B1fcyj3CFF+zfDt8ZBW7lDVa+eq2donm82uhdvOMP4l8wgseUpLgID2t9zmZm2AXWAT7TX/TAH3rw+ze/e3TA0PJ1GxYdAZmNplKre1uA2lFqdaPZPzidfqZDDcvXt3unbtyttvvw2AzWajQYMGPPzwwzz55JNnfeylDoYL07Ipycmv0WP1ZiOe4UFnbWMrLsaWXbFimaqqFBVasVm1X4vckjzu/kMLPBv7NuZwtja4y2xwo0NYO/SmimMpKLQMbEX/hv3xd/PDZlOxlqoYTVW/IGVYMrhnyb1kF2ejV/RYVav9OKF+EewvPQ5oQXHP+j35+9jfeBo9WXbzMrxNjlOzFJYWcs2P11CaacG9SDufQWdkQMMB3NJ+DI0io6v841NVlSE/DiE/NYsAmyeFpRaMOhP3trmHwU0G8GnsR/x4UJtzt1VAKyZ0nEB+ST5J+SdJyk/meFYypUWOf0I6RUeIRz2CPYMJ9ggmyCOYTEsGq479zcaTmymxVa4pdNO7Ee0fjafRs8rnClsJWHKwFWaR5mUiSW8jtTAVm2pDVWxYjPnc0fIOpnaZil6npzQzE0q1TFFJ4jYWLRpPhk6hb2EBTYvLMkh6I3k+4fzP28BWLOhQeKDhIAb3mwqGih9sXnEeJ/JPcCLvBCdS95C09Uu8C62EWK2ElpQSUmrDW/UlS7WRqjeQYjCQqlMo1OkItFkJLrURpOoI8g7HzRTgEDioQI7ORiolpKolpKil5GGhnjWTkMIswooshFit+NpsoOiw+jaixK8pRT7Nseov3t+f3paPqSgRfX4SuvxkdHnJZLuZSfFvyEmvAJKN7qTbTHibFMIUHSGlpQRb8vGzFOJm9kYxeYHJm1KDD6VFVshL1kpd8pIhLx2Tu4rOJwS8Q1F9Qik0BmBTzvFmQbWhs2Si5CaV9SsJfUF6RZBZ3szgjlKvKUpgNNSLptS3KaX6gBo8C6qW8c9NhvwULcuTn6oFKcUF2r7ifHS2Qkzentoy7T6h2DxC0B1aVhHA1O8EfZ6AglTY9DEk7dCOrhhQAptqWaZ60aj+TSkyhmv/bMt7oNrIyk0kJesQqbmJpBSkkFWSh4/Rk2D3IIK9Igjyj6KebzBuxSmQcwLykinMSeSLgniWkgdAoFXlP5kW0jyL+DUomDgqxioYdUba1mtLl9AudK3Xkaj4fSh/v6xl1hQDJR3uw9p4CNqEk9rzsmf1LD61ppGh1/raN6IfYf7BfHPgS4ptxZhsKndYbAyNeQJd9vGyIPUgyVlZrPLy4x+Tjgwc5yrXo9DRM4L+3k1pY9RjKEyEnKSy5z3ZYW5zFbCopaTo9Zz0CiS5aV+S3DzAWkxo4k5CUuMIKy0lIHokns0HoStIKjvWSe3TH5OHVmpl8gKzF4qbglKYos2ek5OoPY+n1PPaVIUS1QM3d0VbYdTNB9XkhWrz1n7u3mHgHUqpOYxSHF/DdPu+x+3wFygGszb24tQ3F5s+gn9eobRUR1rU7aSU5JJSkEJqSQ5pJQWUUv4GygjeoRg8Q6hXYqFe9kmCM44TZCvF16Zy6iu7gg03XY72hj2wqZaB9Y+E0hJtqrCiPFRLLkWl7tqnWV5B2oJFXiFgPO2TLVuptrJpXrL2lZ8CxYXadJPeIdrjvUMweXui05/yfy5lr1aHXqJ9YqYOmYXaoCMGa7o2ePDoaqqyxezBU0EBlCow1BTCi+GDUVOSsWz/kmn1fNnp5oanoufFDo/S0L1e2fXkU5SbwcFD69iTc5jdbibiDQZsioKiqkSVWmlt1dE6rAuNo6/HgE2r4y0uQN36Kdklx0nufi9J9RqTlJ9ESmEKJaZCOP3fpSULUg9CXhKKDQLybYRabYSoEGoKwN8ciZt/CIrZB9y8QGfkr71f8Ho9PaU6hfpe9ZkbM4vGyeDRsWOV11/bJBg+i+LiYjw8PPjxxx8ZPny4ffvdd99NVlYWv/zyi0P7oqIiiooqXhRycnJo0KDBJQuG/5jyFYcLapY9UVQrzSxb6Ta6Hd6DBqEYKzKPxQkJZHz1FXEr9pPuHkmheyAWcz0KzQHY9Gf5aPA0xuJczJZ03C3pmC2ZlBrMFJoDsbjXw+Lmj6roCDu5nqaHf8ZYWr1R23me4aQFtsYaGkJsuMpuzyzU8hm+gtvTu35voOyToNxictIt5KQVkpmcC2rVAYWeUrz9TfhF+ONTT8ua5qQVknU8k5wMCzbFVOkximqlYcJyoo4sQlfFbBonQ3twIHoU1vN4vi4WY6Ni7ny4P24GGyeffoacxYvt+1Qg0785heZA/LIP4VGQXOl17lRv3KBjbesq3sCoCpFpody3rDFWU2jZzzkQi1sANn3l5+9C6K1FmC3pmAu13y2wlf1+BmIxB2I1XPwMsb60UPu9LkzD3ZKBTafHYg6098GmN6HYrLgVZZS1S8dYWoDF7G/va8lpb9rsVBvmokzMhenadRZlolRjxhZjSZ69T+aiDPSnlLyUs+qMZPs0JtO/GZl+zcj1aYR6rkD7AnnkJ+GfFYt/5gH8sw5iLK3+G/h892BOhsWQFNKdYrezLP1+NqoNr7xE/LMO4J91AL+sOFRFT6ZfdNnz0JwCz1BMpTmEhZtw6xrAFre1LM9cTIolBf9clWu22hi4XcXbAjZFR3pgG06GxpAe2Lpaz5+iWvHOOWrvg2/2YUoNHmT6NbP/LCznkfk1FWXbX1vdC1MJTt2GV371B/mlBbZhV+v/gKLDrSjL/rdktqSVfc/AvTANU3EOFqPKqnberG9dj2K3QLyLtC8fS0DZ7QD0qoEct3QSfQ6S5XaAEf/sp9nxgnP/rqk2vDOWsy7qNza0ULDqK159grJUrt3miz8PU+R+9k9lz0dQyjba7P0EhcrhjU0x8G/bB8gMqPxJYU3prMX4Zh+y/+y9cxOwmAPJ9Gtuf25KjJ7k6jbzW4el5JjTz3q8oVFDeTL6KVbOWkqyxY82ez8hKG1nlW0LzPXY0mUapYbaK1HLN2ZzwvcgiT4HSfQ9SK5bOkarG95FgTROCeC6Lf4YCHR4PTzTa3KJrhjcLUQoKsajsZhzk4j54Gl8Gtbez/tMJBg+ixMnTlC/fn3WrVtHTEyMffsTTzzBqlWr2Lhxo0P7GTNmMHNm5dH4ly4Y/prD+SHnbliVsgxL213vEWZMxf/22zC3aEnmt9+St3IliaExxDa/verHVmcqNaX6H0GZirJpdugHgtMcB6eoKthQKdW7kxrcmZNhMeR6NzrDUarp9L5Xt59neJxfZiwt936GqTQHBbAqBg5GjyIprFfVj7tUdAoKin08hpevkXbHf8C8dVnZfh1FJl9im95CWr329oeZirLxyzqAf1YcalmQaTEHYjEHUGzyRrHl8G/DDHLMGeS4pWOwmQnPakn93Ejcre5n7k9tPQ81/XnVpvP43T6nqvpZS8c3FuegO201xGKTF+rp5TyX+LkyFWWhnPavxViivXE2WzIwW9JRVCvJId3I8W1y4X09vQ+qFaoRwLq7g9mSilvSYdwL0jBb0snzDCcptBslplNe32vweqjYrKhVlQbV9LVVtRGcuo3II7/jUagNqD39n3d5mJnj1ZAdHSZXK7Gh2ErQqbYavamv8hrP8DoaffAHPLP/5s/Oeg6FKwzcZqXjITe2d3yMfM/wqh9bE2Xna3T0D6KOLKq0Ozb6Vk6G96m9851yTvtdWymqruohWapqZX/IRrZFLCPPLUv7mZX94HSKjpua3MT1Obey6efDlJYlacyWdHpsfh6dWorttL+rvS3uJiWk2wVdj6pgL3VQ1CpSJUYVSqpR1nDK+VVAOcPr3IjRPoRd3aUGPT0/EgyfxfkGw87ODF+IVZ/vZPf6NAxWC122vIxHYap9X7p/S3a2ewhV0RHdNYTwaD986pnxCXTHO8CM3qhjbVwad32yCatNZfLAaBQUftx2jGMZWobXpIKfVcHXpuBr0+FtUyhWVApNCmY/N7wC3dgXl8ngAiMBNu2PonGHILoMjcSSV8LJE3l8uOQAHkUqUSU6jGWvCDqdQkS0F4bkIxTFHUIt1p5/m96AZ0wM5voVmXI3DyNe3joK3pmN4cge9nkHMrPXOEpO+YMe6VvEvZn7ydq4kwK9DxZzIKC9wHiUZmNt24IZ1oYc9gt1eP5aFOsZUmDEhILFAEmtvQgMcsd3Wza2jGJQoNPQSHoMi0LRVZyv1GojKcfC8czCsq8CjmUUkphVwPHMQk5mW7DaHP/sFAXCfd1JzKrIngd4mri2TShNg72I8Pcgwt+dI4dPkPfEFNqkx4PBQPhLL1LauT+L395OTmYJiq2UZomLifnfbcRb6rNuQRwlFitWVDLMCv4WFcNZ88Jnp7MW4ZcVR1Kj+hz0rcexoiISikrI1anYqjhsfT93ujcOoEfjQGIaBxLh7+5QrmKzqaTmFXE8s8D+fGXlFhFsMBKIDq9SMFpsmPQ6fALN+NRzx6eeGe8AMwbTxct2lhRbyU2zkJNeSE7Z91KbSrG7jjw9pGMlpbQUP72eIJ0BHyu4FdmgWMXmrqfQBJmKSlJpCYn5RfZrS861oNogQKejS5APbXw9aeBmwgcF/Tlq6FQVCnKKyS3rU0nRmZcEd/M2Yo7wpDjASKqHQkENhkqrQHZhif13ODmn6mmw3GzQoFRHlE1PS50Jt4Lz+4esAmneOtapFuL01ip/j8rpFIgM9CQho4DSU/6GPG3QwKqnhWIkoliHe7G2L1VnI6KFP/37NCQoSOH4j0s5suYg6YZwcnwizxiwAFj0sNNQwi6TlQx95X+Tjw5sxqSBFQOJctILSYzN4nhsBju3JmMuBRWVZL1KgsGKLsSdMUOb0r9tKAZ95SCh1Grjn4OpLNyWSHqmBXOxirlIxVxswy27lPplyXYbKmpDTwbeEk1CUQkbDqez4XA6+5O0ZXN9bAp35LrhqSoke0B8lBlzsU07XrGK0WJDV2DFvUTFx6agO+X1wFSUVZY1TqfYVsSJ8Prou3WgfdtwPL0NLPxgOV1i95Hv25hcr4agKHj6mohoEUD95v7Ub+6HT6DjG+atv+xnwx8nQLXRds+H9gynTdHzb7uHyPRvgbs73PxMD3zqXXh288CmJJZ9oo1pKejuzzuxJ+z7nmwRgXVDOihw/cPtadgq8ILPp6oqmScLOB6bSWJsJokHMikqKEVnUAiN8iWihT/h0X7k/v4b29dlkxHYGgArKgeNVjJ0Ktk6FdVTT6CPmb7ZKpZ07RMf37yjFNdrRKEF+o5pRpu+EfzfpgQOJOfy9NCW5CQV8O0Lm0CFUU93Jajh+a3sduKZZ8j+aQG+I0YQ/pI2/VlpiZXkwzn260mOz8FW9rdmLMnDbEnHy10leEB3/MJ98a7njk+gGQ83K/m/LSTjy68oOXYM0H7GFjd/LO6BWJt2QO3QE4t3GAPuaYXBeHE/rQIJhs/qfMskTudKA+isVhu/vLadk4ey8fOy0u3wh9gSE7ANupnVOZ0pKVZp3j2UAWNbVqqnPZZRwA1vryGzoISRnSKYe0s7FEXBZlPZfCSDhTsSSc0tsgdpEf7u1PfzoEGAO77uRvvxnl24i/9bn8C1OndaZSuotjP/uqXpbOwyWWnUOYhZYzqQX1TKJyv3ceS7nxkW+zeNcpNRdTrCZvwP/1GjAO2F6MRjU8lZvJg0sy+TBkzh9+nXsyk+gx+3HmdNXBqqCo8MiOaRLkFkffc9md9/Byr4jx6F36hR3P/rIVbsT6FjQz96lAVsEf4e1Pdzx6vIxsqP95KZVIBOp2Aw6Si2WDF7GRl8b2satDr/WsxSq42T2Ra2H8uy/yM7nKr9pzPoFAa0DGZkpwj6NQ/GZKj8T3PCp+tp+9Ub9E3Usuz+t91GxtKV7A69jtQgrRbLK8CNvAwteDmht/FvmI5vpvbBBGzcksSe7SnkHs/Dzc1AVCNfGjbwwaeeGcvihaQuXYW1cVv0g4eTmVpISamNRi388T24BusHr+DetDFRv/5q/xkXFJeSlG2plLHwdDMQ6mO+JAMlXEVRqZWUnCKCvN0wX8A/A1VVseSXkJdZVCk9aHLX41PPvdafd0uJlRNZhSRmVbzJO55ZSH6RlYEtgxnaLgwfs5GCnGLys4pIzrHw/qpDbIzPQAE8VYUQnYEBDQMINxgpKiilYesAWvQIw9PPjfyiUk5mO5ZSWW2wPymn7O8kg/i0ivKL+n7u9GgcSI/GAXRu5E+Ev4f97yU308K8FQf5eEsCALNGtGVMt4bac1daSu7y5aR8/g3pJwpQO/XmeKOO7M/Sk5dmoUBR2WMqJd5gw6ZAkyBPgrwrsqaWEhs7jmXhadKz6omrqeflmFFdF5fGbR9upJ5Ox+f39+C3fcl8sf4IBcXamxdvNwNdowLoUfYm0WTQsWBbIgu2JZKWd+Z5dxvpDIx080Z/Ups+UqdTaNEzjC5DI/EOMJOZX8z62FQOfhOHIc9Kqs7GN95FFJ/l18DTqCfay0yot5ngUE+aWjNptm4JPn8vRSnUBsfq/fzwGz0aY1goyS++hFpSwv7ASF7sei/FRk9aNfXj5i4NubZNKJ5uld9cqKrKqm9i2bP6BGAj9OCXRKTsYnfXCVhMURjc9Ix4rNN5B3Jn8893B9j113EsqHzpXcRVncLYsPUkt+e5YUCh+w1RdBkaVWvnO5XNppKTWoinvxvG096wZ/+2iH2zPuRQg2vI8m9+xmPoSy1Ep64k5sV7iEv1ZfV3B/D0NTH82a50fXkFJVaV2Te3w3tLFod3pNKkYxDX3F+NWSZOU7BtG0dvux3Fw4Pof/5B71V5zEpxYQkJb39K4WfzMVgt+Fx/PWEvvoDOVHVpnGq1krdqFRmffY5l9268+vUj4K47ce/Q4bz7d6EkGD6H7t27061bN956SxuBb7PZaNiwIRMnTrzsBtBdqPzsIr57cTOFOcU06x5CzPCm/PjKFvKziqjfzI/rH+mA/rSAq7DYysj569h7Mod2Eb58f39Mjf9xZxeWMODVv0nLK2Zqt0jCD1tIPZaHwcvAnuwCsnUqw3s3pGvXMP5OzeKZhXuw2lRahHpzLKOA/LJ/IEFmHXet/ZqBx7SZJgLvv5+gyZPI/L//I/m557Hp9Dze6wHqxXTji3srRnD/vP04j373L/X93Fn9xNXodI7/GdLyiuj+0gqsNpXlU/rSNNir0jUUW0r5+6v9HNyifTQZEuXDkPFt8A6ovbrVlBwL+5JyaRPuQ6DX2T+uPJldyKC5fzFq+2/cEve3fbtbmzZk3fkcG5cmae/kDQorjEXsMtv4/sEYOjb0P2c/SlNTies/ALWkhEbffI1Hp06ANtDy0ICBlKamEvbSS/iNuOmCrlfUDaqqsnRPMvOWH6BVuA9PXdvSIbA8X0nZFvYl5dA0yIsGAWfPIqqqygu/7+PjNdpAvvKAWMt2a4H8tqOZLNiuvbEv1zjIk55NAunROJDuUYGV+quqKje+s5adx7MZ2zOSGTe0dth/x0cbWROXxl0xjXjuRm2e9vS8Ij5cHc83G4+SY6lc510u0NPE8I716djQD+WUjK1ep9CjcQB+HiaS43PY9NthEvZqM93oDAqte9enw6AGrPxiP4mxmXj6mhj4cHsO5hXag/BTj1XfT0tg+HkYq3zTZM3JIeunBWR++SUlJ0447PMePBjdMzN4Yflh/tidZC/T8jDpubZNGB0a+jl89pRdWMJv2xNpfbiYxqV68hWV/UYrnYsN2FA52tKDe25pRevwGtaLVyEps5D5/1tHcLFCibeecU9356OZGzBZbJzwgGkv9MbHo3bHOVTXyVVrOT7xYUo9wsnybYzFvWIsRJHJl4DM/TQr3EibD1/DGB6OtcTGV/9bT15GEYG9gnlyjzZ7SCdvDwYcU0GBMf/tTkD4GQZfn4Wqqhy+dijFR44Q9uIL+I0cWalNyquvkv6hth5A4AP3EzRpksskOCQYPofvvvuOu+++m/fff59u3boxb948vv/+e/bv309IyNnrc10tGAY4cTCTha/vQLWpuHsbKcwtwT/UgxGPdyZPtTlkWwA+W3eE33eepJ6XiV8n9ibc7yx1otXwy45EJn27AzeDjj8fvYowX3eGvbmagyl5jOnWkFkjKt7R/nMglYe+3kZekfYPo1WYD5MHRtOpkT89XlzOrXuXcnusVhPr1bcv+evWoZaUsDDmZt4P6cHske0Y1bWB/XiWEivdXlxOjqWUr8Z1p3e04wCWT9fGM/O3vbSP8OWXib3PeA2qqnJgUzIF2cW06x9R6Q3EpfbR6sO88Ps+bjm+gXt3/op336sIf+UVdB4eJB3OZtv6E/xvzxFSbTamXdOCB/s1OfdBy5z873/J+uFHvAYMoME72owrWT8t4OQzz2AIDqbp8mUoZ8gKCHE5OT0g9jYbyK0iGA3wNHFjh3Bu7hxRraBsbVwat3+0EaNeYeVj/eyB+c7jWdzw9lr0OoW/p/arFLBbbSr7TlZkujfFp1NYYqV/i2Bu7tyAfs2DMFZRQlGVk3FZbPztMImxWQ7bjW56bpraiaAGF55pVUtLyV25kowvvqBw6zYCxo4l+PGpKGVTliVmFfLztuP8uPU4R9LPvhCPp07HvcUemPMqgvPl7sVsd9Pu92wSSK+m9ejROJB2Eb7Vfh5OZ7OpjP1sM9v2p3JvvjtuVjCZ9RRbrOQa4FOPQoZ2rs/rozvU6PjnUlxqIy4lj+gQryqv4eU/9vP7onW8tOVz6mWnVNq/NbgZ+dNmcv+wiv7tXXuCv77cj9Wo8JZHASUK3JxnIqpUT/PuoQy8p1WN+5v2wYekvvYa7p06EfnN1w77LAcOED/8JrDZCJ0xA/9bR9f4PM5wPvFanVx0Y/To0aSmpjJ9+nSSkpLo0KEDS5YsOWcg7KrCo/3pOaIJa3+MozC3BHdvI9dNbI9q1NH/pZVVZioMOoV3but0wYEwwA3tw/l+yzHWxqUz/Zc9dIsK4GBKHoGeJqZd4/hR0VXNgvjxwRg+W3uE/i2CGdQqxP4udGCrUL5Sh9CsXTRdf/6AvFXafMDKVf143787Bp3C4NaOP0OzUc+NHerz5YajfL/lWKVg+Oft2mptN3Wsf9ZrUBSF5t1Dz9rmUhrbM5KftiXyAz1Qhg1n9piKCfb9Gnjx5q+ppNps9Imux/1XNT6vYwfccw9ZP/xI3sqVFB2OxxTZiPRPP9H23X2XBMLCZSiKwrPDWqIAH62JtwfC9bxM1Pf3ICrQg6Ftw85YknQmvZrWo090PVYfTOO1ZQfsgdW7f2kLEd3YPrzKzLVep9Cmvi9t6vvynz6NsdpUSm023Azn/8lbWFM/hj/aieP7M9j4azxJh7NRFBj8n9a1EggDKAYDPoMH4zN4MDaLBZ3Z8dOw+n7uTOwfzYSrm7ItIZOF2084ZNkB9HqFXk3qMaxdGHqLzf7JZIeBDRjcJ5S3Vsbx284TrDuUzrpD2iwL7kY9XSL9GdGpPte3C6+yxhq0NxfliZNy32xM4J8DqZjddPQc0ZxtXxyg2GJFb9TR886mfLhwJz9vT6RH4wCuaRN21uvXKeDlZjhrJtRSYmVXYjYbDqWzIT6drUczsZTY6NU0kE/GdnX42abnFWklM94hFH/8f0SHOA50/XH7CZ5deZzOCQXcf8r2Fj1C2bb0KNkphXQuMuAd4UlUVjE2oMuwyLNew7n43ngjqfPmUbhtG0Xx8bhFaeUjqqqS8vIrYLPhPWigywXC56tOZoYvhCtmhkH7xf7n2wMk7Eln8Lg2hET5cCg1jwGvrrIPSilnMuiYcHVTrm9fexPiH07N45p5qym22tDrFKw2lddGtWdEp4hqH2Pl/mTu/WwLAZ4mVl5lJvnxqRhDgll633O8svYEfZsF8fkpJRLlyrM1JoOOzU8PxNdDewGKS8ll4Gv/YNApbHx6wDnLEy432xIyGTl/HaoKIzrWJy2/mMSyj3+LSm0Eepr4Y3Ifgr3Pv5zj2ISJ5K1Ygd8tt+A1oD/HH3gQnacnTf/+C7137dX2CXGpHErNQ1VVwv3c8TBdeB5o1/Fsrn97DYoCix/pg1GvY9Drq1BV+PPRq2gWcun+TlRV5WRcFnqDnpCoy/v/UkFOMWnHcmnQMsA+8PhIWj6rDqTax1BkFlTMA924nicT+zflhvYVQfG+kzn8tPU4C3ckkpZXed52gJduastt3Ruy+59EtvweT69boonuEsLbKw8y988D1e6vh0lvLyuJ8PfA083AyeyKuvmU3KIzrrB8Q/tw5o3uYC/Pm/XHPt5fdZi29X35dWKvSkH2iaxCer68EkWBrc8OIsCzIvGwbMlhDiw8QpGiEhrhTeaxPHaYSrn74U6VkjznK+H++8lf9Q+B48cT/NgUAHL/+ovjDz6EYjTS+PdFmBo2vKBzOINkhkUliqLQd0xzVFW1/wFmlb3g1Pd3Z+XUfhf1/I2DvHiwXxPeWHEQq02lR+OAc2ZjT3dVdBDB3m6k5BaxIbANg1f/g6Io/PLuBgCGta36XX7b+r60CPVmf1Iuv+48wZ09tKnbFmzTssJ9mwW5XCAM0KmhP2O6NeSbjQksKMtwl/MxG3jj1o41CoQBAsfdS96KFWQvXEjhnt0A+I0eLYGwcFlNgiqPB7gQbSN8GdYujN93nmT2kv0EermhqjCwZcglDYRBe30Pjz73mIDLgYePiYatHWdxiKznSWQ9T+7uGYnNpnIwJY8/9yTxydp4DqflM+X7f3lrZRzXtwtjZWwKuxNzznqOkZ0iGNNNK5drc1V9WvcJt//fe7BfU3Ycy2b5vuRq9beg2MrBlDwOpuSdsU09LxPdGweWzZoTwIksC/d+tplf/z1BqK+Zp4e2JC2viC/WafW+kwdWvQhUuJ87LcN82Hcyh79jUxySRbuUYrJ1NoJtOjKP5aHqYL25hIJVcRccDPuNGEn+qn/IXriQoEmPgM1GyiuzAe3TQFcMhM+XBMNXMEuJtdLAt1P/ALMKtHfU/pdoIMGD/ZqwZHcSxzMLeGF42/MuwjfodYzoFMF7qw7x/ZbjXNMmjLiUPPYn5VZZIlFOURRu6dKA5xft5Yctx7izRyNsNpWFZQHk+WSnLzdPD22Jr7sRo045ZWYPD0J9zef1se/pPDp1wr1DBwp37KBo7z4wGAi4685a7LkQrm/q4OYs3Z3EX7GplI/Nfejq6tfni8p0OoXmod40D/Xmnt5RfLH+CB/+c5j4tHzeXBkHgFGvMKBFCDd3jqB3dD30pw2MPr1W99T/NXqdwkd3d6HEeu4pAEutatk0mQX2THCepZRwP3eHmZQCPE0O52ga7M3sm9sx5ft/+eCfw4T4mEnJsVBYYqVdhC/9W5x5wYkBLYLZdzKHFfsdg+EVsalY3EsYka8lbprGhGLZd4S1cen8eyyL9g38znk9Z+J9dT/0/v6UpqaSv3YtRfHxFB85gj4wkMAHHqjxcV2JBMNXqEU7T/DI/23npZvacmu3qt/VlWeGfd2NVe6vbWajnp8n9KSoxIa/Z80C8Fu6aMHw37EpJOdYWLxLW5GpV9N6+J0lqB/eIZxZi/ex83g2+5NyyMgv5kS2BW+zgQEtL/5KOBeLl5uBade0uCjHDhh3L4kPPwKA77BhGEMvn5ppIS4HUfU8Gd21AV9vTMCmQo/GAXSqxqwtonq83Aw81K8pd8VE8uX6o2xPyKRX03rc0D68xv9DylVngJ5Rr/2Mo+qd/0wNIzpFkJxTxCtL9vPC73vt5ztTVrhc/5bBvP1XHP/EplJitWHU60jKtrDnRA6KEeq3DiAvtZC+w5tyg1sxC7Yl8u7fcbx/Z80XsVBMJnyuv47ML74k/dPPsOzZA0DQ5EnovWr3E5XLVY1TR1lZWXz00Uc89dRTZGRoU7xs27aNxMTEczxSXGyqqvLG8oPYVNhw+MzLPmZe4swwgIfJcEEvYk2CvOjSyB+bqpU5lAfDw9qdfSBEoJcbA1tqmeMfthzn57ISiWFtwy5ovtcrmXf//ri1aIHi5kbgf8Y5uztCXJYmDYjGvew15MF+TZ3cmyuTl5uBB/s14YO7unB3z8gLDoQvlQf6NmZsz0hUVZtlon2EL1c3P3vypX2EH4GeJnKLStl8RIutVu7XZp3o2NCP4Q934I7nYnD3NvFgX+1TiKV7kolLyb2gvvqNGAFAwYYN2HJzcWvZ0r6tLqhRMLxz506aNWvGK6+8wty5c8nKygJgwYIFPPXUU7XZP1ED6w+n2+ubMk4ZiHC67EJtn5/HpckM15ZRXbRasI9WH2Z/Ui5GvcKQVufOWo7qqn3k9PP2RP7YnQScexaJukzR62n05Rc0WfIHbtHR536AEHVQsI+Zz+/txhu3dqBvsyBnd0dcRhRF4b/XteKG9uHodQrTrmlxzvJAvU7h6rIyipX7tCB45X6tvnlAS8dSwOgQbwa30rbNXhJLcWnNl5c2t2iBuXXFnNkhTz2Joq87iaIaBcNTpkxh7NixHDx4EPMpU60MHTqUf/75p9Y6J2qmvEgfKuqCq1KeGT5becHlaGi7MNyNetLztf73alrPPkPE2ZQPwMvILyavqJQIf3e6Rp7/CnJ1id7bG2PY2bPuQtR13aICuLGDvLEWlel1Cm/c2oGd/xtMz6bVG+g2oDwY3p+CpcTKmrg0gCprjSdc3RRFgT/3JjPq/fUczzz7fM9n43/bbQD4DL0Wz26VZ2a6ktUoGN68eTP3339/pe3169cnKSnpgjslai4xq5A/91b8DDLyzxwMl9cM+12imuHa4uVmcCiLONMsEqcrH4BX7qaO9SutSCeEEELUJkVRqlyq+kx6R9fDqFc4nJbP1xsTsJTYCPc10yK08iwl7Rv48f4dnfExG9hxLIuhb6zmzz2OcVh2QQnL9iZX2n463xE3EfnD94S//HK1+3qlqNEAOjc3N3JyKk9tcuDAAYKC5GMiZ/pm41FsKjQIcOdYRiGZ1QiG/T1dKxgGrVTix63HMeoVBlejRKJc+QA8kBIJIYQQlx9vs5HuUYGsiUtj3jJtTuT+LYPPWGIxuHUov4f5MPH/tvPvsSzu+3Ird/RoiJtBz4bD6ew9mWOfC/mb/3Q/Y4ZaURTc27atct+VrkaZ4RtuuIHnnnuOkhItmFIUhYSEBKZNm8bIKta2FpeGpcTK/206BsDDV2s1nvnFVopKrVW2zyosK5Nwd60yCYCukf48d2Nr3hrTsVolEuWaBHkx95b2zLm5HY1red5RIYQQojaUl0Tklq2wN6DF2VfIbRDgwQ/3xzCut7aC3FcbEvh4TTx7TmiBsKdJq/9dvPvkRey166pRMPzqq6+Sl5dHcHAwhYWF9O3bl6ZNm+Lt7c2LL75Y230U1bR410ky8osJ9zVzU6f69nkvs84wiC4z3zUH0IH2BuyumMhzLqdZlZs7R3BL2SA8IYQQ4nJz6pSfZqOOmCaBZ2mtMRl0/Pe6Vnx4Vxeubh7E7d0b8uaYjmx6egBv39YJgOV7U5CFhyurUZmEr68vy5YtY+3atfz777/k5eXRqVMnBg4cWNv9E+fh8/XawLnbezTCqNfh72EiPb+YjPxiQnwqr0RWMZuE62WGhRBCiCtVo0BPmgR5cig1n95N653XFKCDWoUwqJVjJtnH3YiHSU9SjoVdidm0i/Cr5R67tvMOhktKSnB3d2fHjh306tWLXr16XYx+ifO041gW/x7LwqTXcWtXLevp76kFw1XVDReX2sgr+/jF3wUzw0IIIcSVbEy3hrzw+z5Gd73w5ZDNRj19mwXxx+4klu1NlmD4NOddJmE0GmnYsCFWa9V1qMI5vlh/BIDr2ocR6KUt1xhQlvHNqGJ6tfKssKJoxfpCCCGEuHyM6x3F7plDKmV5a6r8OMv2JtfK8a4kNaoZfuaZZ3j66aftK88J5/r3WBaL/tWK4u+OibRvL68FzqyiZrh8/mFfd2Oldd2FEEII4VyKouB1HlOynUv/FsHodQr7k3I5llHz+YivRDV6lt9++23i4uIIDw+nUaNGeHo6rtu9bdu2WumcOLc/9yTxyLfbKbba6NU0kPYN/Oz7AsqWrKyqTCKr0DXnGBZCCCHE+fPzMNE10p8NhzP4c2+yfeYJUcNgePjw4bXcDVETn687wozf9qCq0K95kH20aLny9durWnijPECWwXNCCCFE3TCoVSgbDmewbG+SBMOnqFEw/L///a+2+yHOg82mMuuPfXy4Oh7Qiuyfv7E1Br1j1Ut5zXBmFTXD9sywDJ4TQggh6oTBrUJ4ftFeNh/JJKugWBJiZS6oGGXr1q3s27cPgNatW9OxY8da6ZQ4u+m/7uarDQkAPHFNcx7s26TKlWmqUzPsL38IQgghRJ3QIMCDFqHe7E/KZeX+FEZ0inB2ly4LNQqGU1JSuPXWW/n777/x8/MDICsri6uvvppvv/1WlmS+iCwlVr7ffByA10a1P+sv8llrhssCZF+pGRZCCCHqjEGtQtiflMuyvckSDJep0WwSDz/8MLm5uezZs4eMjAwyMjLYvXs3OTk5PPLII7XdR3GK7QlZFFtthPi4cVPH+mdte9aa4bJgWDLDQgghRN1RPsXaqgOpWEpkmlyoYTC8ZMkS3n33XVq2bGnf1qpVK9555x3++OOPWuucqGxTvDadXbeowCpLI05VXjOcVeU8w+UD6CQzLIQQQtQVbev7EupjpqDYyvpD6c7uzmWhRsGwzWbDaKwcRBmNRmw22wV3SpzZpiPaL263qIBzti3P+uYXWyu9+8vMlwF0QgghRF2jKAoDWwUD8KcswAHUMBju378/kyZN4sSJE/ZtiYmJPProowwYMKDWOiccFZfa2Ho0E4Du1QiGvc0G+4IaWacNoquYTULKJIQQQoi6ZFCrUABW7k9GVVUn98b5ahQMv/322+Tk5BAZGUmTJk1o0qQJUVFR5OTk8NZbb9V2H0WZ3SeysZTYCPA0ER3sdc72Op2Cf1nm9/S64YrZJCQzLIQQQtQl3aMC0OsUknOKSM4pcnZ3nK5Gs0k0aNCAbdu2sXz5cvbv3w9Ay5YtGThwYK12TjjaeFirF+4a6X/OeuFy/h4m0vKKK9UNl2eK/dwlMyyEEELUJWajniZBnhxIzmPvyWxCfc3O7pJT1XieYUVRGDRoEIMGDarN/oiz2BRfXi8cWO3HlNcNZ5wSDFtKrBSW1RD7eUpmWAghhKhrWof7ciA5jz2JOfRvEeLs7jhVjcokHnnkEd58881K299++20mT558oX0SVbDaVLYcqX69cDn/smD31LmGs8vqhfU6BW+3C1p3RQghhBAuqHW4DwB7TuQ4uSfOV6Ng+KeffqJXr16Vtvfs2ZMff/zxgjslKtt3MofcolK83Qy0DPOp9uMC7HMNVwygK1+e2c/dWO1yCyGEEEJcOVqVxRJ7TmY7uSfOV6NgOD09HV9f30rbfXx8SEtLu+BOicrK5xfuEulvnyGiOsrLJDJPKZOwrz4ng+eEEEKIOqlVWWb4WEah/RPjuqpGwXDTpk1ZsmRJpe1//PEHjRs3vuBOicpOXWzjfFQdDBc77BNCCCFE3eLnYaK+nzsAe+t4qUSNCkanTJnCxIkTSU1NpX///gCsWLGCuXPn8sYbb9RqBwWoqsqmI+XBcPXrhaHqJZkrZpKQzLAQQghRV7UO9yExq5A9J7KJaXJ+ybYrSY2C4XvvvZeioiJefPFFnn/+eQCioqJ47733uOuuu2q1gwLiUvLIyC/GbNTRtn7l8pSzCSgfQHdKZjizQBbcEEIIIeq61uG+/Lk3uc5nhmtUJlFYWMjdd9/N8ePHSU5OZufOnUycOJGQkLo9NcfFsrGsRKJTQ39MhvP7kZUHvJmnDKDLKiwbQCc1w0IIIUSdVT6jxN6TEgyftxtvvJEvvvgCAKPRyMCBA3nttdcYPnw48+fPr9UOilPrhc+vRAIgoKqa4bLAWFafE0IIIequ1vW1YPhgSh6WsvUH6qIaBcPbtm2jT58+APz444+EhIRw9OhRvvjiiyrnHxY1p6qqPRjufp6D56CiZrig2Gr/RS/PDPtKmYQQQghRZ4X6mAnwNGG1qRxIznV2d5ymRsFwQUEB3t7eAPz555+MGDECnU5Hjx49OHr0aK12sK5LyCggKceCUa/QsaHfeT/ex2ywT8VWnh0urxmWzLAQQghRdymKIotvcAFTqy1cuJBjx46xdOlSBg8eDEBKSgo+PtVfEEKcW3m9cPsIP8xG/Xk/XlEUe9BbXjecbZ9NQjLDQgghRF1mX3zjRN1dfKNGwfD06dOZOnUqkZGRdO/enZiYGEDLEnfs2LFWO1jXXUi9cLnT5xq2r0AnmWEhhBCiTmslmeGaTa12880307t3b06ePEn79u3t2wcMGMBNN91Ua50TMKJjffw9jAxoWfOZOk6da1hVVbIKy6dWk2BYCCGEqMtah2tTtu4/mYvVpp7XKrdXihoFwwChoaGEhoY6bOvWrdsFd0g46tm0Hj2b1rugY5w6o0RhiZXiUhsgK9AJIYQQdV1UPU/cjXoKS6zEp+XRNNjb2V265GpUJiFci79nRc1w+epzRr2Ch+n8a5CFEEIIceXQ6xRahmkBcF0tlZBguA44tWa4ol7YhKLUvY9ChBBCCOGovFSirq5EJ8FwHRBwSs1wxUwSUi8shBBCCOr89GoSDNcBjpnhEodtQgghhKjbyjPDe05ko6qqk3tz6UkwXAfYa4YLik9ZfU4yw0IIIYSA6BAv9DqFzIISTmZbnN2dS06C4TrAnhk+ZQCdrD4nhBBCCACzUU90sBdQN0slJBiuA06tGc46ZQCdEEIIIQScuvhG3VuJToLhOqB80Y3CEqv94w9ZcEMIIYQQ5drW1+qGy1e+rUtcIhg+cuQI48aNIyoqCnd3d5o0acL//vc/iouLHdrt3LmTPn36YDabadCgAbNnz650rB9++IEWLVpgNptp27YtixcvvlSX4TTebgYMZSvKHEnPB8DPXTLDQgghhNAMLFvpdsPhdNLzipzcm0vLJYLh/fv3Y7PZeP/999mzZw+vv/467733Hk8//bS9TU5ODoMHD6ZRo0Zs3bqVOXPmMGPGDD744AN7m3Xr1jFmzBjGjRvH9u3bGT58OMOHD2f37t3OuKxLRlEUe1lEfKoWDEvNsBBCCCHKNQjwoG19X2wqLNmT5OzuXFKK6qJzaMyZM4f58+dz+PBhAObPn88zzzxDUlISJpMW+D355JMsXLiQ/fv3AzB69Gjy8/NZtGiR/Tg9evSgQ4cOvPfee9U6b05ODr6+vmRnZ+Pj41PLV3XxDH59FQeS8+z3vxnfnZ5NLmyZZyGEEEJcOd5bdYiX/9hPr6aBfP2fHs7uzgU5n3jNJTLDVcnOziYgIMB+f/369Vx11VX2QBhgyJAhxMbGkpmZaW8zcOBAh+MMGTKE9evXn/E8RUVF5OTkOHy5otMHzMk8w0IIIYQ41bC2YQCsP5ROWh0qlXDJYDguLo633nqL+++/374tKSmJkJAQh3bl95OSks7apnx/VWbNmoWvr6/9q0GDBrV1GZdUwGnBrwygE0IIIcSpGgR40C6irFRid90plXBqMPzkk0+iKMpZv8pLHMolJiZyzTXXcMsttzB+/PiL3sennnqK7Oxs+9exY8cu+jkvhvIZJez3JTMshBBCiNMMLcsOL9510sk9uXQMzjz5Y489xtixY8/apnHjxvbbJ06c4Oqrr6Znz54OA+MAQkNDSU5OdthWfj80NPSsbcr3V8XNzQ03N7dzXsvlLsCzIhPsZtBhNuqd2BshhBBCXI6GtQ3j5T/2s+GwVipRz8v1Y6BzcWowHBQURFBQULXaJiYmcvXVV9O5c2c+/fRTdDrHpHZMTAzPPPMMJSUlGI1a4Lds2TKaN2+Ov7+/vc2KFSuYPHmy/XHLli0jJiamdi7oMnZqJliywkIIIYSoSnmpxM7j2SzZncQdPRo5u0sXnVOD4epKTEykX79+NGrUiLlz55KammrfV57Vve2225g5cybjxo1j2rRp7N69mzfeeIPXX3/d3nbSpEn07duXV199lWHDhvHtt9+yZcuWSlnmK9GpAbDUC4u6yGazVZqbXIjqMhqN6PXyiZqoG4a1DWPn8Wx+33lSguHLxbJly4iLiyMuLo6IiAiHfeUzw/n6+vLnn38yYcIEOnfuTL169Zg+fTr33XefvW3Pnj355ptvePbZZ3n66aeJjo5m4cKFtGnT5pJejzMEeEowLOqu4uJi4uPjsdlszu6KcGF+fn6EhoaiKIqzuyLERTW0bRiz/tjPxvh0UnOLCPK+skslXHaeYWdx1XmGdxzLYvg7awG4pnUo793Z2ck9EuLSUFWVhIQESkpKCA8Pr1RiJcS5qKpKQUEBKSkp+Pn5ERYW5uwuCXHR3fj2Gv49ns3zw9twpwtmh88nXnOJzLC4cKeuOOfvKZlhUXeUlpZSUFBAeHg4Hh4ezu6OcFHu7u4ApKSkEBwcLCUT4oo3tG0Y/x7PZvHOky4ZDJ8PSZHUEadOrebrLgPoRN1htVoBHBbkEaImyt9MlZSUOLknQlx85VOslZdKXMkkGK4jvN0MGHRanZu/1AyLOkjqPMWFkt8hUZecugDH37Epzu7ORSXBcB2hKIo9OywD6IQQQghxLj0aBwLauKMrmQTDdUj5ksx+Ms+wEKLMkSNHUBSFHTt2OLsrQojLTMcGfgBsT8hyaj8uNgmG65C7ejaiR+MA+zs9IYQQQogz6dDQD4DY5FwKikud25mLSILhOuT27o349r4YfN2lTEIIVyMLhgghLrUwX3dCfcxYbSq7jmc7uzsXjQTDQog6RVVVCopLnfJ1PtO69+vXj4kTJzJ58mTq1avHkCFD2L17N9deey1eXl6EhIRw5513kpaWZn/MkiVL6N27N35+fgQGBnLddddx6NAhh+Nu2rSJjh07Yjab6dKlC9u3b6+151YIceXpUFYqcSXXDcs8w0KIOqWwxEqr6Uudcu69zw3Bw1T9l93PP/+cBx98kLVr15KVlUX//v35z3/+w+uvv05hYSHTpk1j1KhRrFy5EoD8/HymTJlCu3btyMvLY/r06dx0003s2LEDnU5HXl4e1113HYMGDeKrr74iPj6eSZMmXazLFUJcATo29GPJnqQrum5YgmEhhLhMRUdHM3v2bABeeOEFOnbsyEsvvWTf/8knn9CgQQMOHDhAs2bNGDlypMPjP/nkE4KCgti7dy9t2rThm2++wWaz8fHHH2M2m2ndujXHjx/nwQcfvKTXJYRwHZIZFkKIK4y7Uc/e54Y47dzno3PnimXT//33X/766y+8vLwqtTt06BDNmjXj4MGDTJ8+nY0bN5KWlobNZgMgISGBNm3asG/fPtq1a4fZbLY/NiYmpoZXI4SoC9pG+KLXKSTlWDiZXUiYr7uzu1TrJBgWQtQpiqKcV6mCM3l6etpv5+Xlcf311/PKK69UahcWpq0Udf3119OoUSM+/PBDwsPDsdlstGnTRgbfCSFqzMNkoHmIN3tP5rAjIYuwthIMCyGEcIJOnTrx008/ERkZicFQ+aU7PT2d2NhYPvzwQ/r06QPAmjVrHNq0bNmSL7/8EovFYs8Ob9iw4eJ3Xgjh0jo29GPvyRy2H8vi2rJlmq8kMpuEEEK4gAkTJpCRkcGYMWPYvHkzhw4dYunSpdxzzz1YrVb8/f0JDAzkgw8+IC4ujpUrVzJlyhSHY9x2220oisL48ePZu3cvixcvZu7cuU66IiGEq7DXDV+hg+gkGBZCCBcQHh7O2rVrsVqtDB48mLZt2zJ58mT8/PzQ6XTodDq+/fZbtm7dSps2bXj00UeZM2eOwzG8vLz47bff2LVrFx07duSZZ56psuxCCCFO1bGhPwA7E7Mosdqc3Jvap6jnM/GlICcnB19fX7Kzs/Hx8XF2d4QQ52CxWIiPjycqKsph4JgQ50t+l0RdZbOptH/uT3ItpSx6uDdt6vs6u0vndD7xmmSGhRBCCCHEGel0ir1UYvsVOMWaBMNCCCGEEOKsOl7BdcMSDAshhBBCiLMqrxvefizTyT2pfRIMCyGEEEKIs2pflhk+nJpPdkGJcztTyyQYFkIIIYQQZxXgaSIy0AOAHceznNuZWibBsBBCCCGEOKcrdb5hCYaFEEIIIcQ5Xal1wxIMCyGEEEKIc7Jnho9lYbNdOctUSDAshBBCCCHOqWWYDz5mA1kFJfy5N9nZ3ak1EgwLIYS4YGPHjmX48OHO7oYQ4iIyGXTcFRMJwPy/47hSFjGWYFgIIYQQQlTL2F6RuBl0/Hs8m3WH0p3dnVohwbAQQtQBqqpSWlrq7G4IIVxcPS83bu3aAID5fx9ycm9qhwTDQoi6RVWhON85X+fxkWJkZCTz5s1z2NahQwdmzJgBgKIofPTRR9x00014eHgQHR3Nr7/+am/7999/oygKf/zxB507d8bNzY01a9Zgs9mYNWsWUVFRuLu70759e3788Uf746xWK+PGjbPvb968OW+88YZDP6xWK1OmTMHPz4/AwECeeOKJK+bjUiHEuY2/qjF6ncKauDR2XgFzDhuc3QEhhLikSgrgpXDnnPvpE2DyrLXDzZw5k9mzZzNnzhzeeustbr/9do4ePUpAQIC9zZNPPsncuXNp3Lgx/v7+zJo1i6+++or33nuP6Oho/vnnH+644w6CgoLo27cvNpuNiIgIfvjhBwIDA1m3bh333XcfYWFhjBo1CoBXX32Vzz77jE8++YSWLVvy6quv8vPPP9O/f/9auzYhxOUrwt+DG9uHs2B7Iu/+dYj37uzs7C5dEAmGhRDCRY0dO5YxY8YA8NJLL/Hmm2+yadMmrrnmGnub5557jkGDBgFQVFTESy+9xPLly4mJiQGgcePGrFmzhvfff5++fftiNBqZOXOm/fFRUVGsX7+e77//3h4Mz5s3j6eeeooRI0YA8N5777F06dJLcs1CiMvDA/2asGB7Ikv3JhGXkkfTYC9nd6nGJBgWQtQtRg8tQ+usc9eidu3a2W97enri4+NDSkqKQ5suXbrYb8fFxVFQUGAPjssVFxfTsWNH+/133nmHTz75hISEBAoLCykuLqZDhw4AZGdnc/LkSbp3725vbzAY6NKli5RKCFGHNAvxZlCrEJbtTea9VYeYe0t7Z3epxiQYFkLULYpSq6UKF4tOp6sUXJaUlDjcNxqNDvcVRcFmszls8/SsuNa8vDwAfv/9d+rXr+/Qzs3NDYBvv/2WqVOn8uqrrxITE4O3tzdz5sxh48aNF3ZBQogrzoP9mrBsbzILtycyZVAzwv3cnd2lGpEBdEIIcRkKCgri5MmT9vs5OTnEx8df0DFbtWqFm5sbCQkJNG3a1OGrQQNtdPjatWvp2bMnDz30EB07dqRp06YcOlQxYtzX15ewsDCH4Li0tJStW7deUN+EEK6nU0N/ejQOoNSm8tHqC3t9ciYJhoUQ4jLUv39/vvzyS1avXs2uXbu4++670ev1F3RMb29vpk6dyqOPPsrnn3/OoUOH2LZtG2+99Raff/45ANHR0WzZsoWlS5dy4MAB/vvf/7J582aH40yaNImXX36ZhQsXsn//fh566CGysrIuqG9CCNf0n96NAViy+6TLlkpJmYQQQlyGnnrqKeLj47nuuuvw9fXl+eefv+DMMMDzzz9PUFAQs2bN4vDhw/j5+dGpUyeefvppAO6//362b9/O6NGjURSFMWPG8NBDD/HHH3/Yj/HYY49x8uRJ7r77bnQ6Hffeey833XQT2dnZF9w/IYRr6dW0Hia9jhPZFuLT8mkc5HoD6RTVVcN4J8nJycHX15fs7Gx8fHyc3R0hxDlYLBbi4+OJiorCbDY7uzvChcnvkhBVG/PBBtYfTuf5G1tzZ9lyzc52PvGalEkIIYQQQoga6x1dD4DVB9Oc3JOakWBYCCGEEELUWO+mWjC8/nA6pVbbOVpffiQYFkIIIYQQNdamvi++7kZyLaXsTHS9sQMSDAshhBBCiBrT6xR6NgkEYK0LlkpIMCyEEEIIIS5Ir7JSidVxEgwLIYQQQog6pk/ZILrtCZnkF5U6uTfnR4JhIYQQQghxQRoGeBDh706JVWVTfIazu3NeJBgWQgghhBAXRFEU+6wSa1ysVEKCYSGEEEIIccHK5xte42KD6CQYFkKIK9Dff/+NoihkZWU5uytCiDqiZ5N6KArEJueSkmtxdneqzeWC4aKiIjp06ICiKOzYscNh386dO+nTpw9ms5kGDRowe/bsSo//4YcfaNGiBWazmbZt27J48eJL1HMhhLh0evbsycmTJ/H19XV2V86oX79+TJ48+aIcOzIyknnz5l2UYwshqhbgaaJ1uLb08bq4dCf3pvpcLhh+4oknCA8Pr7Q9JyeHwYMH06hRI7Zu3cqcOXOYMWMGH3zwgb3NunXrGDNmDOPGjWP79u0MHz6c4cOHs3v37kt5CUIIcdGZTCZCQ0NRFMXZXamkuLjY2V0QQlwk9inWXKhUwqWC4T/++IM///yTuXPnVtr39ddfU1xczCeffELr1q259dZbeeSRR3jttdfsbd544w2uueYaHn/8cVq2bMnzzz9Pp06dePvtty/lZQghnEhVVQpKCpzypapqtftZVWazQ4cOzJgxA9AGq3z00UfcdNNNeHh4EB0dza+//mpve3qZxGeffYafnx+LFi2iefPmeHh4cPPNN1NQUMDnn39OZGQk/v7+PPLII1itVod+PP/884wZMwZPT0/q16/PO++849CvhIQEbrzxRry8vPDx8WHUqFEkJyfb98+YMYMOHTrw0UcfERUVhdlsZuzYsaxatYo33ngDRVFQFIUjR45gtVoZN24cUVFRuLu707x5c9544w2H840dO5bhw4czd+5cwsLCCAwMZMKECZSUlABaxvno0aM8+uij9mMLIS6NPk2DAFgbl3Zer3nOZHB2B6orOTmZ8ePHs3DhQjw8PCrtX79+PVdddRUmk8m+bciQIbzyyitkZmbi7+/P+vXrmTJlisPjhgwZwsKFC8943qKiIoqKiuz3c3JyLvxihBBOU1haSPdvujvl3Btv24iHsfLrV03NnDmT2bNnM2fOHN566y1uv/12jh49SkBAQJXtCwoKePPNN/n222/Jzc1lxIgR3HTTTfj5+bF48WIOHz7MyJEj6dWrF6NHj7Y/bs6cOTz99NPMnDmTpUuXMmnSJJo1a8agQYOw2Wz2QHjVqlWUlpYyYcIERo8ezd9//20/RlxcHD/99BMLFixAr9fTqFEjDhw4QJs2bXjuuecACAoKwmazERERwQ8//EBgYCDr1q3jvvvuIywsjFGjRtmP99dffxEWFsZff/1FXFwco0ePpkOHDowfP54FCxbQvn17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Y/r06dx0003s2LEDna4i9/LMM88wd+5coqOjeeaZZxgzZgxxcXH07NmTefPmMX36dGJjYwHw8vI653MzduxYDh48yK+//oqPjw/Tpk1j6NCh7N27F6PRWKn9999/z4wZM3jnnXfo3bs3X375JW+++SaNGzeu0c9GCHF2QT7lcw1LMCyEEKKGhg4dyv333w/A9OnTmT9/Pl27duWWW24BYNq0acTExJCcnExoaCiglTS8/fbbdO/eHYDPP/+cli1bsmnTJrp168bcuXMZO3YsDz30EABTpkxhw4YNzJ071yEYvu2227jnnnvs9+Pj4wEIDg52qO8dOXKkQ58/+eQTgoKC2Lt3L23atLFvnzp1KsOGDQNg5syZtG7dmri4OFq0aIGvry+Kotiv4VzKg+C1a9fSs2dPAL7++msaNGjAwoUL7c/PqebNm8e4ceMYN24cAC+88ALLly+X7LAQF0nwZb7whgTDQog6xWDScd8bfZ127ppq166d/XZISAgAbdu2rbQtJSXFHkgaDAa6du1qb9OiRQv8/PzYt28f3bp1+//27j0qqutsA/gzMDDcGUBguMgtZSmKtQiVjriijUS0akxMa2JJxNbGJcUEMEUwihqzBC9NVzWxamyrbWJjamOSikqDCKRaRARJKiJqoMBSEI0CKndmf3/088SpqKDAmcvzW+ssZe8957z7HWReD/ucg4qKCixatEjvOFFRUdi8ebNeW0RERJ9ivHDhAlatWoWioiJcu3YNOp0OAFBbW6tXDN89Fy8vLynukSNH9uk4d6uoqIBSqZQKfgBwc3PDiBEjUFFRcd/XLF68WK9Nq9UiLy+v38cnooe7s0ziqoE+kpnFMBGZFYVC8chLFeR096/77yyD6K3tTgE6kOzt7fs0btasWfD398fOnTvh7e0NnU6H0NBQdHZ26o0bqriJyDB8e2bYMIthXkBHRGSiuru79S6qq6ysRFNTE0JCQgAAISEh0vrhO44fP45Ro0Y9cL/W1tYAgJ6eHqntm2++QWVlJVauXIkpU6YgJCQEN27c6HfM1tbWevt9mJCQEHR3d6OoqOieWO43j5CQEL3xAHDixIl+x0pEfePhxGUSREQkAysrK7z66qvYsmULlEollixZgh/84AcYP348ACAlJQVz585FWFgYoqOjceDAAezfvx9Hjhx54H79/f2hUCiQlZWFH/3o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",
"text/plain": [
"<Figure size 800x400 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plot_breakdown(df)"
]
},
{
"cell_type": "markdown",
"id": "6ba3e161-8cd8-49c1-891d-9e36d5620bc5",
"metadata": {},
"source": [
"Here's some annotated top talkers (\"low value\"):\n",
"\n",
"* `1 webcomic` and `7 podcast` I deliberately started marking as unimportant / ignoring\n",
" * unsubscribe\n",
"* `0` and `2 money-podcast` are high-volume, current events feeds; possible approaches:\n",
" * unsubscribe\n",
" * exclude/include from the default page using a tag\n",
" * automatically mark as don't care after a short time [lemon24/reader#312](https://github.com/lemon24/reader/issues/312)\n",
" * use ML to guess which one I won't care about? :))\n",
"* `3 corp-tech` and `5 corp-tech` are corporate blogs\n",
" * similar treatment to the current event feeds\n",
"* `6 tech` is a feed I don't really care about\n",
" * unsubscribe\n",
"* `9 python-podcast` is a weekly podcast I don't really listen to (I look at the titles sometime)\n",
" * similar treatment to the current event feeds\n",
"* `4 links-tech` is a feed of curated links, some current events; many more read, but higher (highest?) volume\n",
" * similar treatment to the current event feeds\n",
"* `8 podcast` is a weekly podcast I'm slowly making my way through; keep\n",
"\n",
"The results are almost identical (2 different feeds) for 3 months."
]
},
{
"cell_type": "code",
"execution_count": 12,
"id": "5eda180d-264c-496f-8a54-021439026457",
"metadata": {},
"outputs": [
{
"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>tags</th>\n",
" <th>total</th>\n",
" <th>read</th>\n",
" <th>unread</th>\n",
" <th>important</th>\n",
" <th>unimportant</th>\n",
" <th>total_all</th>\n",
" <th>important_all</th>\n",
" <th>score</th>\n",
" <th>read_s</th>\n",
" <th>unread_s</th>\n",
" <th>unimportant_s</th>\n",
" <th>important_s</th>\n",
" <th>important_old_s</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td></td>\n",
" <td>245</td>\n",
" <td>76</td>\n",
" <td>169</td>\n",
" <td>0</td>\n",
" <td>195</td>\n",
" <td>636</td>\n",
" <td>0</td>\n",
" <td>407.00</td>\n",
" <td>-152</td>\n",
" <td>169</td>\n",
" <td>390</td>\n",
" <td>-0.00</td>\n",
" <td>-0.00</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>webcomic</td>\n",
" <td>155</td>\n",
" <td>43</td>\n",
" <td>112</td>\n",
" <td>0</td>\n",
" <td>149</td>\n",
" <td>1286</td>\n",
" <td>0</td>\n",
" <td>324.00</td>\n",
" <td>-86</td>\n",
" <td>112</td>\n",
" <td>298</td>\n",
" <td>-0.00</td>\n",
" <td>-0.00</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>money-podcast</td>\n",
" <td>205</td>\n",
" <td>36</td>\n",
" <td>169</td>\n",
" <td>0</td>\n",
" <td>91</td>\n",
" <td>465</td>\n",
" <td>0</td>\n",
" <td>279.00</td>\n",
" <td>-72</td>\n",
" <td>169</td>\n",
" <td>182</td>\n",
" <td>-0.00</td>\n",
" <td>-0.00</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>corp-tech</td>\n",
" <td>104</td>\n",
" <td>17</td>\n",
" <td>87</td>\n",
" <td>0</td>\n",
" <td>63</td>\n",
" <td>656</td>\n",
" <td>0</td>\n",
" <td>179.00</td>\n",
" <td>-34</td>\n",
" <td>87</td>\n",
" <td>126</td>\n",
" <td>-0.00</td>\n",
" <td>-0.00</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>links-tech</td>\n",
" <td>355</td>\n",
" <td>121</td>\n",
" <td>234</td>\n",
" <td>1</td>\n",
" <td>72</td>\n",
" <td>827</td>\n",
" <td>11</td>\n",
" <td>108.42</td>\n",
" <td>-242</td>\n",
" <td>234</td>\n",
" <td>144</td>\n",
" <td>-7.01</td>\n",
" <td>-20.58</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>corp-tech</td>\n",
" <td>72</td>\n",
" <td>10</td>\n",
" <td>62</td>\n",
" <td>0</td>\n",
" <td>30</td>\n",
" <td>249</td>\n",
" <td>1</td>\n",
" <td>99.94</td>\n",
" <td>-20</td>\n",
" <td>62</td>\n",
" <td>60</td>\n",
" <td>-0.00</td>\n",
" <td>-2.06</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>tech</td>\n",
" <td>36</td>\n",
" <td>10</td>\n",
" <td>26</td>\n",
" <td>0</td>\n",
" <td>35</td>\n",
" <td>141</td>\n",
" <td>0</td>\n",
" <td>76.00</td>\n",
" <td>-20</td>\n",
" <td>26</td>\n",
" <td>70</td>\n",
" <td>-0.00</td>\n",
" <td>-0.00</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>podcast</td>\n",
" <td>61</td>\n",
" <td>0</td>\n",
" <td>61</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>154</td>\n",
" <td>0</td>\n",
" <td>61.00</td>\n",
" <td>0</td>\n",
" <td>61</td>\n",
" <td>0</td>\n",
" <td>-0.00</td>\n",
" <td>-0.00</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>podcast</td>\n",
" <td>51</td>\n",
" <td>3</td>\n",
" <td>48</td>\n",
" <td>0</td>\n",
" <td>4</td>\n",
" <td>622</td>\n",
" <td>0</td>\n",
" <td>50.00</td>\n",
" <td>-6</td>\n",
" <td>48</td>\n",
" <td>8</td>\n",
" <td>-0.00</td>\n",
" <td>-0.00</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>podcast-python</td>\n",
" <td>49</td>\n",
" <td>2</td>\n",
" <td>47</td>\n",
" <td>0</td>\n",
" <td>4</td>\n",
" <td>440</td>\n",
" <td>1</td>\n",
" <td>48.94</td>\n",
" <td>-4</td>\n",
" <td>47</td>\n",
" <td>8</td>\n",
" <td>-0.00</td>\n",
" <td>-2.06</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" tags total read unread important unimportant total_all \\\n",
"0 245 76 169 0 195 636 \n",
"1 webcomic 155 43 112 0 149 1286 \n",
"2 money-podcast 205 36 169 0 91 465 \n",
"3 corp-tech 104 17 87 0 63 656 \n",
"4 links-tech 355 121 234 1 72 827 \n",
"5 corp-tech 72 10 62 0 30 249 \n",
"6 tech 36 10 26 0 35 141 \n",
"7 podcast 61 0 61 0 0 154 \n",
"8 podcast 51 3 48 0 4 622 \n",
"9 podcast-python 49 2 47 0 4 440 \n",
"\n",
" important_all score read_s unread_s unimportant_s important_s \\\n",
"0 0 407.00 -152 169 390 -0.00 \n",
"1 0 324.00 -86 112 298 -0.00 \n",
"2 0 279.00 -72 169 182 -0.00 \n",
"3 0 179.00 -34 87 126 -0.00 \n",
"4 11 108.42 -242 234 144 -7.01 \n",
"5 1 99.94 -20 62 60 -0.00 \n",
"6 0 76.00 -20 26 70 -0.00 \n",
"7 0 61.00 0 61 0 -0.00 \n",
"8 0 50.00 -6 48 8 -0.00 \n",
"9 1 48.94 -4 47 8 -0.00 \n",
"\n",
" important_old_s \n",
"0 -0.00 \n",
"1 -0.00 \n",
"2 -0.00 \n",
"3 -0.00 \n",
"4 -20.58 \n",
"5 -2.06 \n",
"6 -0.00 \n",
"7 -0.00 \n",
"8 -0.00 \n",
"9 -2.06 "
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.head(10)"
]
},
{
"cell_type": "markdown",
"id": "4ed50165-3865-4633-aed3-93112440b837",
"metadata": {},
"source": [
"Highest value feeds look like this:\n",
"\n",
"* high read ratio, regardless of volume\n",
"* some with lots of important entries\n",
"\n",
"Special mentions:\n",
"\n",
"* all the `twitter` ones are defunct (TODO: exclude feeds that don't take updates and have low unread count entirely)\n",
" * `114 self-twitter` is kept for archival purposes\n",
" * `116 twitter` and `120 twitter` are kept because I want to keep the few important entries; fix: [lemon24/reader#230](https://github.com/lemon24/reader/issues/290)\n",
"* `119 tech` added lots of old entries, I marked them as read so they don't spam the \"recent\" view; fix: [lemon24/reader#305](https://github.com/lemon24/reader/issues/305)"
]
},
{
"cell_type": "code",
"execution_count": 13,
"id": "d16a2f5e-27cd-4a17-bdbb-56d6f456d53d",
"metadata": {},
"outputs": [
{
"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>tags</th>\n",
" <th>total</th>\n",
" <th>read</th>\n",
" <th>unread</th>\n",
" <th>important</th>\n",
" <th>unimportant</th>\n",
" <th>total_all</th>\n",
" <th>important_all</th>\n",
" <th>score</th>\n",
" <th>read_s</th>\n",
" <th>unread_s</th>\n",
" <th>unimportant_s</th>\n",
" <th>important_s</th>\n",
" <th>important_old_s</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>106</th>\n",
" <td>python</td>\n",
" <td>32</td>\n",
" <td>19</td>\n",
" <td>13</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>88</td>\n",
" <td>0</td>\n",
" <td>-25.00</td>\n",
" <td>-38</td>\n",
" <td>13</td>\n",
" <td>0</td>\n",
" <td>-0.00</td>\n",
" <td>-0.00</td>\n",
" </tr>\n",
" <tr>\n",
" <th>107</th>\n",
" <td>tech</td>\n",
" <td>6</td>\n",
" <td>3</td>\n",
" <td>3</td>\n",
" <td>2</td>\n",
" <td>0</td>\n",
" <td>31</td>\n",
" <td>6</td>\n",
" <td>-25.24</td>\n",
" <td>-6</td>\n",
" <td>3</td>\n",
" <td>0</td>\n",
" <td>-14.01</td>\n",
" <td>-8.23</td>\n",
" </tr>\n",
" <tr>\n",
" <th>108</th>\n",
" <td>python</td>\n",
" <td>11</td>\n",
" <td>4</td>\n",
" <td>7</td>\n",
" <td>2</td>\n",
" <td>0</td>\n",
" <td>48</td>\n",
" <td>7</td>\n",
" <td>-25.30</td>\n",
" <td>-8</td>\n",
" <td>7</td>\n",
" <td>0</td>\n",
" <td>-14.01</td>\n",
" <td>-10.29</td>\n",
" </tr>\n",
" <tr>\n",
" <th>109</th>\n",
" <td>podcast</td>\n",
" <td>40</td>\n",
" <td>31</td>\n",
" <td>9</td>\n",
" <td>0</td>\n",
" <td>8</td>\n",
" <td>120</td>\n",
" <td>0</td>\n",
" <td>-37.00</td>\n",
" <td>-62</td>\n",
" <td>9</td>\n",
" <td>16</td>\n",
" <td>-0.00</td>\n",
" <td>-0.00</td>\n",
" </tr>\n",
" <tr>\n",
" <th>110</th>\n",
" <td>tech</td>\n",
" <td>4</td>\n",
" <td>4</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>401</td>\n",
" <td>15</td>\n",
" <td>-38.86</td>\n",
" <td>-8</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>-0.00</td>\n",
" <td>-30.86</td>\n",
" </tr>\n",
" <tr>\n",
" <th>111</th>\n",
" <td>webcomic</td>\n",
" <td>22</td>\n",
" <td>21</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>143</td>\n",
" <td>0</td>\n",
" <td>-41.00</td>\n",
" <td>-42</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>-0.00</td>\n",
" <td>-0.00</td>\n",
" </tr>\n",
" <tr>\n",
" <th>112</th>\n",
" <td></td>\n",
" <td>34</td>\n",
" <td>27</td>\n",
" <td>7</td>\n",
" <td>0</td>\n",
" <td>2</td>\n",
" <td>179</td>\n",
" <td>0</td>\n",
" <td>-43.00</td>\n",
" <td>-54</td>\n",
" <td>7</td>\n",
" <td>4</td>\n",
" <td>-0.00</td>\n",
" <td>-0.00</td>\n",
" </tr>\n",
" <tr>\n",
" <th>113</th>\n",
" <td>podcast</td>\n",
" <td>25</td>\n",
" <td>25</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>115</td>\n",
" <td>0</td>\n",
" <td>-50.00</td>\n",
" <td>-50</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>-0.00</td>\n",
" <td>-0.00</td>\n",
" </tr>\n",
" <tr>\n",
" <th>114</th>\n",
" <td>self-twitter</td>\n",
" <td>52</td>\n",
" <td>51</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>57</td>\n",
" <td>0</td>\n",
" <td>-101.00</td>\n",
" <td>-102</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>-0.00</td>\n",
" <td>-0.00</td>\n",
" </tr>\n",
" <tr>\n",
" <th>115</th>\n",
" <td>tech</td>\n",
" <td>144</td>\n",
" <td>93</td>\n",
" <td>51</td>\n",
" <td>6</td>\n",
" <td>1</td>\n",
" <td>182</td>\n",
" <td>6</td>\n",
" <td>-175.04</td>\n",
" <td>-186</td>\n",
" <td>51</td>\n",
" <td>2</td>\n",
" <td>-42.04</td>\n",
" <td>-0.00</td>\n",
" </tr>\n",
" <tr>\n",
" <th>116</th>\n",
" <td>twitter</td>\n",
" <td>129</td>\n",
" <td>117</td>\n",
" <td>12</td>\n",
" <td>2</td>\n",
" <td>1</td>\n",
" <td>828</td>\n",
" <td>4</td>\n",
" <td>-238.13</td>\n",
" <td>-234</td>\n",
" <td>12</td>\n",
" <td>2</td>\n",
" <td>-14.01</td>\n",
" <td>-4.12</td>\n",
" </tr>\n",
" <tr>\n",
" <th>117</th>\n",
" <td>webcomic</td>\n",
" <td>158</td>\n",
" <td>154</td>\n",
" <td>4</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>918</td>\n",
" <td>1</td>\n",
" <td>-304.06</td>\n",
" <td>-308</td>\n",
" <td>4</td>\n",
" <td>2</td>\n",
" <td>-0.00</td>\n",
" <td>-2.06</td>\n",
" </tr>\n",
" <tr>\n",
" <th>118</th>\n",
" <td>self-tech</td>\n",
" <td>173</td>\n",
" <td>171</td>\n",
" <td>2</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>507</td>\n",
" <td>0</td>\n",
" <td>-340.00</td>\n",
" <td>-342</td>\n",
" <td>2</td>\n",
" <td>0</td>\n",
" <td>-0.00</td>\n",
" <td>-0.00</td>\n",
" </tr>\n",
" <tr>\n",
" <th>119</th>\n",
" <td>tech</td>\n",
" <td>202</td>\n",
" <td>201</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>258</td>\n",
" <td>1</td>\n",
" <td>-408.01</td>\n",
" <td>-402</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>-7.01</td>\n",
" <td>-0.00</td>\n",
" </tr>\n",
" <tr>\n",
" <th>120</th>\n",
" <td>twitter</td>\n",
" <td>313</td>\n",
" <td>283</td>\n",
" <td>30</td>\n",
" <td>0</td>\n",
" <td>6</td>\n",
" <td>926</td>\n",
" <td>1</td>\n",
" <td>-526.06</td>\n",
" <td>-566</td>\n",
" <td>30</td>\n",
" <td>12</td>\n",
" <td>-0.00</td>\n",
" <td>-2.06</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" tags total read unread important unimportant total_all \\\n",
"106 python 32 19 13 0 0 88 \n",
"107 tech 6 3 3 2 0 31 \n",
"108 python 11 4 7 2 0 48 \n",
"109 podcast 40 31 9 0 8 120 \n",
"110 tech 4 4 0 0 0 401 \n",
"111 webcomic 22 21 1 0 0 143 \n",
"112 34 27 7 0 2 179 \n",
"113 podcast 25 25 0 0 0 115 \n",
"114 self-twitter 52 51 1 0 0 57 \n",
"115 tech 144 93 51 6 1 182 \n",
"116 twitter 129 117 12 2 1 828 \n",
"117 webcomic 158 154 4 0 1 918 \n",
"118 self-tech 173 171 2 0 0 507 \n",
"119 tech 202 201 1 1 0 258 \n",
"120 twitter 313 283 30 0 6 926 \n",
"\n",
" important_all score read_s unread_s unimportant_s important_s \\\n",
"106 0 -25.00 -38 13 0 -0.00 \n",
"107 6 -25.24 -6 3 0 -14.01 \n",
"108 7 -25.30 -8 7 0 -14.01 \n",
"109 0 -37.00 -62 9 16 -0.00 \n",
"110 15 -38.86 -8 0 0 -0.00 \n",
"111 0 -41.00 -42 1 0 -0.00 \n",
"112 0 -43.00 -54 7 4 -0.00 \n",
"113 0 -50.00 -50 0 0 -0.00 \n",
"114 0 -101.00 -102 1 0 -0.00 \n",
"115 6 -175.04 -186 51 2 -42.04 \n",
"116 4 -238.13 -234 12 2 -14.01 \n",
"117 1 -304.06 -308 4 2 -0.00 \n",
"118 0 -340.00 -342 2 0 -0.00 \n",
"119 1 -408.01 -402 1 0 -7.01 \n",
"120 1 -526.06 -566 30 12 -0.00 \n",
"\n",
" important_old_s \n",
"106 -0.00 \n",
"107 -8.23 \n",
"108 -10.29 \n",
"109 -0.00 \n",
"110 -30.86 \n",
"111 -0.00 \n",
"112 -0.00 \n",
"113 -0.00 \n",
"114 -0.00 \n",
"115 -0.00 \n",
"116 -4.12 \n",
"117 -2.06 \n",
"118 -0.00 \n",
"119 -0.00 \n",
"120 -2.06 "
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.tail(15)"
]
},
{
"cell_type": "markdown",
"id": "870d20df-41db-4ffa-bc16-bb4d51053f67",
"metadata": {},
"source": [
"> Of course, this can be approximated quite well by sorting by unread / unimportant\n",
"\n",
"This seems mostly true (although for 3 months only 21 of 30 were the same for unread or unimportant)."
]
},
{
"cell_type": "code",
"execution_count": 14,
"id": "c98ff6e5-fba5-486c-b0f3-81848ffb68f0",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"common top 10 feeds compared with\n",
" unread: 7\n",
" unimportant: 7\n",
" unread or unimportant: 8\n",
"common top 20 feeds compared with\n",
" unread: 16\n",
" unimportant: 13\n",
" unread or unimportant: 18\n",
"common top 30 feeds compared with\n",
" unread: 23\n",
" unimportant: 18\n",
" unread or unimportant: 25\n"
]
}
],
"source": [
"by_unread = df.sort_values('unread', ascending=False)\n",
"by_unimportant = df.sort_values('unimportant', ascending=False)\n",
"\n",
"for n in 10, 20, 30:\n",
" print(\"common top\", n, \"feeds compared with\")\n",
" score = set(df.head(n).index)\n",
" unread = set(by_unread.head(n).index)\n",
" unimportant = set(by_unimportant.head(n).index)\n",
" print(\" unread:\", len(score & unread))\n",
" print(\" unimportant:\", len(score & unimportant))\n",
" print(\" unread or unimportant:\", len(score & (unread | unimportant)))\n"
]
},
{
"cell_type": "markdown",
"id": "7b8edb23-beaa-4b95-a770-7744a1162908",
"metadata": {},
"source": [
"The feeds not caught in top 30 of unread or unimportant are lower-volume ones that are mostly unread."
]
},
{
"cell_type": "code",
"execution_count": 15,
"id": "2655d000-8ca8-486f-bd9b-5aa3a991d557",
"metadata": {},
"outputs": [
{
"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>tags</th>\n",
" <th>total</th>\n",
" <th>read</th>\n",
" <th>unread</th>\n",
" <th>important</th>\n",
" <th>unimportant</th>\n",
" <th>total_all</th>\n",
" <th>important_all</th>\n",
" <th>score</th>\n",
" <th>read_s</th>\n",
" <th>unread_s</th>\n",
" <th>unimportant_s</th>\n",
" <th>important_s</th>\n",
" <th>important_old_s</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>22</th>\n",
" <td>podcast-python</td>\n",
" <td>15</td>\n",
" <td>0</td>\n",
" <td>15</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>209</td>\n",
" <td>0</td>\n",
" <td>17.00</td>\n",
" <td>0</td>\n",
" <td>15</td>\n",
" <td>2</td>\n",
" <td>-0.00</td>\n",
" <td>-0.00</td>\n",
" </tr>\n",
" <tr>\n",
" <th>23</th>\n",
" <td>podcast</td>\n",
" <td>14</td>\n",
" <td>0</td>\n",
" <td>14</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>146</td>\n",
" <td>0</td>\n",
" <td>16.00</td>\n",
" <td>0</td>\n",
" <td>14</td>\n",
" <td>2</td>\n",
" <td>-0.00</td>\n",
" <td>-0.00</td>\n",
" </tr>\n",
" <tr>\n",
" <th>24</th>\n",
" <td>python</td>\n",
" <td>18</td>\n",
" <td>1</td>\n",
" <td>17</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>89</td>\n",
" <td>0</td>\n",
" <td>15.00</td>\n",
" <td>-2</td>\n",
" <td>17</td>\n",
" <td>0</td>\n",
" <td>-0.00</td>\n",
" <td>-0.00</td>\n",
" </tr>\n",
" <tr>\n",
" <th>27</th>\n",
" <td>tech</td>\n",
" <td>13</td>\n",
" <td>1</td>\n",
" <td>12</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>70</td>\n",
" <td>0</td>\n",
" <td>12.00</td>\n",
" <td>-2</td>\n",
" <td>12</td>\n",
" <td>2</td>\n",
" <td>-0.00</td>\n",
" <td>-0.00</td>\n",
" </tr>\n",
" <tr>\n",
" <th>28</th>\n",
" <td>podcast</td>\n",
" <td>8</td>\n",
" <td>0</td>\n",
" <td>8</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>22</td>\n",
" <td>0</td>\n",
" <td>10.00</td>\n",
" <td>0</td>\n",
" <td>8</td>\n",
" <td>2</td>\n",
" <td>-0.00</td>\n",
" <td>-0.00</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" tags total read unread important unimportant total_all \\\n",
"22 podcast-python 15 0 15 0 1 209 \n",
"23 podcast 14 0 14 0 1 146 \n",
"24 python 18 1 17 0 0 89 \n",
"27 tech 13 1 12 0 1 70 \n",
"28 podcast 8 0 8 0 1 22 \n",
"\n",
" important_all score read_s unread_s unimportant_s important_s \\\n",
"22 0 17.00 0 15 2 -0.00 \n",
"23 0 16.00 0 14 2 -0.00 \n",
"24 0 15.00 -2 17 0 -0.00 \n",
"27 0 12.00 -2 12 2 -0.00 \n",
"28 0 10.00 0 8 2 -0.00 \n",
"\n",
" important_old_s \n",
"22 -0.00 \n",
"23 -0.00 \n",
"24 -0.00 \n",
"27 -0.00 \n",
"28 -0.00 "
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.iloc[list(score - (unread | unimportant))]"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.11.1"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment