{ "metadata": { "name": "" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "code", "collapsed": false, "input": [ "# Constants for you to change\n", "import os\n", "\n", "DATA_DIRECTORY = '/home/data/justin_files/livejournal'\n", "LIVEJOURNAL_FILENAME = os.path.join(DATA_DIRECTORY, 'livejournal.txt.gz')\n", "LIVEJOURNAL_URL = 'http://snap.stanford.edu/data/soc-LiveJournal1.txt.gz'\n", "\n", "# Just have these hardcoded, though we don't really need to\n", "NUM_EDGES = 68993773\n", "NUM_NODES = 4847571" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 1 }, { "cell_type": "code", "collapsed": false, "input": [ "# Downloading the file\n", "\n", "import urllib.request\n", "\n", "assert os.path.exists(DATA_DIRECTORY)\n", "\n", "# Get your data. This file is ~250M so it will take a bit\n", "print('DOWNLOADING 250M FILE. WILL SAVE FOR FUTURE USE')\n", "if not os.path.exists(LIVEJOURNAL_FILENAME):\n", " urllib.request.urlretrieve(LIVEJOURNAL_URL, LIVEJOURNAL_FILENAME)\n", "\n", "# Show a little bit of the file\n", "print('\\nFILE STATS:')\n", "!ls -lh $LIVEJOURNAL_FILENAME\n", "print('\\nSTARTING LINES')\n", "!zcat $LIVEJOURNAL_FILENAME | head -n 30" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "DOWNLOADING 250M FILE. WILL SAVE FOR FUTURE USE\n", "\n", "FILE STATS:\n", "-rw-rw-r-- 1 justinvf justinvf 248M Dec 13 14:19 /home/data/justin_files/livejournal/livejournal.txt.gz\r\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "STARTING LINES\n", "# Directed graph (each unordered pair of nodes is saved once): soc-LiveJournal1.txt \r", "\r\n", "# Directed LiveJournal friednship social network\r", "\r\n", "# Nodes: 4847571 Edges: 68993773\r", "\r\n", "# FromNodeId\tToNodeId\r", "\r\n", "0\t1\r", "\r\n", "0\t2\r", "\r\n", "0\t3\r", "\r\n", "0\t4\r", "\r\n", "0\t5\r", "\r\n", "0\t6\r", "\r\n", "0\t7\r", "\r\n", "0\t8\r", "\r\n", "0\t9\r", "\r\n", "0\t10\r", "\r\n", "0\t11\r", "\r\n", "0\t12\r", "\r\n", "0\t13\r", "\r\n", "0\t14\r", "\r\n", "0\t15\r", "\r\n", "0\t16\r", "\r\n", "0\t17\r", "\r\n", "0\t18\r", "\r\n", "0\t19\r", "\r\n", "0\t20\r", "\r\n", "0\t21\r", "\r\n", "0\t22\r", "\r\n", "0\t23\r", "\r\n", "0\t24\r", "\r\n", "0\t25\r", "\r\n", "0\t26\r", "\r\n", "\r\n", "gzip: stdout: Broken pipe\r\n" ] } ], "prompt_number": 2 }, { "cell_type": "code", "collapsed": false, "input": [ "# Cleaning the data\n", "\n", "import numpy as np\n", "import gzip\n", "\n", "def row_generator():\n", " \"\"\"This will generate all the edges in the graph.\"\"\"\n", " with gzip.open(LIVEJOURNAL_FILENAME, 'rt') as f:\n", " for line in f:\n", " if line.startswith('#'):\n", " continue\n", " else:\n", " (left_node, right_node) = line.split('\\t')\n", " yield(int(left_node), int(right_node))\n", "\n", "def to_undirected(edge_iterable, num_edges, num_nodes, shuffle=True):\n", " \"\"\"Takes an iterable of edges and produces the list of edges for the undirected graph.\n", " \n", " > to_undirected([[0,1],[1,2],[2,10]], 3, 11)\n", " array([[ 0, 1],\n", " [ 1, 0],\n", " [ 1, 2],\n", " [ 2, 1],\n", " [ 2, 10],\n", " [10, 2]])\n", " \"\"\"\n", " # need int64 to do gross bithacks\n", " as_array = np.zeros((num_edges, 2), dtype=np.int64)\n", " for (i, (n_0, n_1)) in enumerate(edge_iterable):\n", " as_array[i,0] = n_0\n", " as_array[i,1] = n_1\n", " # The graph is directed, but we want to make it undirected,\n", " # which means we will duplicate some rows.\n", "\n", " left_nodes = as_array[:,0]\n", " right_nodes = as_array[:,1]\n", " \n", " if shuffle:\n", " the_shuffle = np.arange(num_nodes)\n", " np.random.shuffle(the_shuffle)\n", " left_nodes = the_shuffle.take(left_nodes)\n", " right_nodes = the_shuffle.take(right_nodes)\n", "\n", " \n", " # numpy.unique will not unique whole rows, so this little bit-hacking\n", " # is a quick way to get unique rows after making a flipped copy of\n", " # each edge.\n", " max_bits = int(np.ceil(np.log2(num_nodes + 1)))\n", " \n", " encoded_edges_forward = np.left_shift(left_nodes, max_bits) | right_nodes\n", " \n", " # Flip the columns and do it again:\n", " encoded_edges_reverse = np.left_shift(right_nodes, max_bits) | left_nodes\n", "\n", " unique_encoded_edges = np.unique(np.hstack((encoded_edges_forward, encoded_edges_reverse)))\n", " \n", " left_node_decoded = np.right_shift(unique_encoded_edges, max_bits)\n", " \n", " # Mask out the high order bits\n", " right_node_decoded = (2 ** (max_bits) - 1) & unique_encoded_edges\n", " \n", " undirected_edges = np.vstack((left_node_decoded, right_node_decoded)).T.astype(np.int32)\n", "\n", " # ascontiguousarray so that it's c-contiguous for cython code below\n", " return np.ascontiguousarray(undirected_edges)\n", "\n", "\n", "def get_clean_data(shuffle=True):\n", " if shuffle:\n", " name = os.path.join(DATA_DIRECTORY, 'LJ-cleaned-shuffled.npy')\n", " else:\n", " name = os.path.join(DATA_DIRECTORY, 'LJ-cleaned.npy')\n", "\n", " if os.path.exists(name):\n", " print('Loading from file {}'.format(name))\n", " return np.load(name)\n", " else:\n", " print('Parsing from zip. Will write to file {}'.format(name), flush=True)\n", " # Lets get the edges into one big array\n", " edges = to_undirected(row_generator(), NUM_EDGES, NUM_NODES, shuffle=shuffle)\n", " print('ORIGINAL DIST: {} MIN: {} MAX: {}'.format(np.abs(edges[:,0] - edges[:,1]).mean(), edges.min(), edges.max()))\n", " np.save(name, edges)\n", " return edges" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 3 }, { "cell_type": "code", "collapsed": false, "input": [ "print(\"Normalizing data (or loaded pre-computed)\")\n", "%time edges = get_clean_data(shuffle=True)\n", "%time unshuffled_edges = get_clean_data(shuffle=False)\n", "print('\\nEDGES SHAPE: {}'.format(edges.shape))" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Normalizing data (or loaded pre-computed)\n", "Loading from file /home/data/justin_files/livejournal/LJ-cleaned-shuffled.npy\n", "CPU times: user 0 ns, sys: 212 ms, total: 212 ms" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "Wall time: 212 ms\n", "Loading from file /home/data/justin_files/livejournal/LJ-cleaned.npy\n", "CPU times: user 0 ns, sys: 188 ms, total: 188 ms" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "Wall time: 191 ms\n", "\n", "EDGES SHAPE: (86220856, 2)\n" ] } ], "prompt_number": 4 }, { "cell_type": "code", "collapsed": false, "input": [ "def score(assignment, edges):\n", " \"\"\"Compute the score given an assignment of vertices.\n", " \n", " N nodes are assigned to clusters 0 to K-1.\n", " \n", " assignment: Vector where N[i] is the cluster node i is assigned to.\n", " edges: The edges in the graph, assumed to have one in each direction\n", " \n", " Returns: (total wasted bin space, ratio of edges cut)\n", " \"\"\"\n", " balance = np.bincount(assignment) / len(assignment)\n", " waste = (np.max(balance) - balance).sum()\n", " \n", " left_edge_assignment = assignment.take(edges[:,0])\n", " right_edge_assignment = assignment.take(edges[:,1])\n", " mismatch = (left_edge_assignment != right_edge_assignment).sum()\n", " cut_ratio = mismatch / len(edges)\n", " return (waste, cut_ratio)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 5 }, { "cell_type": "code", "collapsed": true, "input": [ "%load_ext cythonmagic\n", "%pylab inline" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Populating the interactive namespace from numpy and matplotlib\n" ] }, { "output_type": "stream", "stream": "stderr", "text": [ "/home/justinvf/anaconda/envs/blogging/lib/python3.3/site-packages/matplotlib/mathtext.py:46: UserWarning: Due to a bug in pyparsing <= 2.0.0 on Python 3.x, packrat parsing has been disabled. Mathtext rendering will be much slower as a result. Install pyparsing 2.0.0 or later to improve performance.\n", " warn(\"Due to a bug in pyparsing <= 2.0.0 on Python 3.x, packrat parsing \"\n" ] } ], "prompt_number": 6 }, { "cell_type": "code", "collapsed": false, "input": [ "%%cython\n", "import numpy as np\n", "cimport cython\n", "\n", "cdef int UNMAPPED = -1\n", "\n", "def linear_deterministic_greedy(int[:,::] edges,\n", " int num_nodes,\n", " int num_partitions,\n", " int[::] partition):\n", " \"\"\"\n", " This algorithm favors a cluster if it has many neighbors of a node, but\n", " penalizes the cluster if it is close to capacity.\n", " \n", " edges: An [:,2] array of edges.\n", " num_nodes: The number of nodes in the graph.\n", " num_partitions: How many partitions we are breaking the graph into.\n", " partition: The partition from a previous run. Used for restreaming.\n", "\n", " Returns: A new partition.\n", " \"\"\"\n", " # The output partition\n", "\n", " if partition is None:\n", " partition = np.repeat(np.int32(UNMAPPED), num_nodes)\n", "\n", " cdef int[::] partition_sizes = np.zeros(num_partitions, dtype=np.int32)\n", " \n", " cdef int[::] partition_votes = np.zeros(num_partitions, dtype=np.int32)\n", " \n", " # Fine to be a little off, to stay integers\n", " cdef int partition_capacity = num_nodes / num_partitions\n", " \n", " cdef int last_left = edges[0,0]\n", " cdef int i = 0\n", " cdef int left = 0\n", " cdef int right = 0\n", " cdef int arg = 0\n", " cdef int max_arg = 0\n", " cdef int max_val = 0\n", " cdef int val = 0\n", " cdef int len_edges = len(edges)\n", " \n", " for i in range(len_edges):\n", " left = edges[i,0]\n", " right = edges[i,1]\n", " \n", " if last_left != left:\n", " # We have found a new node so assign last_left to a partition\n", " \n", " max_arg = 0\n", " max_val = (partition_votes[0]) * (\n", " partition_capacity - partition_sizes[0])\n", "\n", " for arg in range(1, num_partitions):\n", " val = (partition_votes[arg]) * (\n", " partition_capacity - partition_sizes[arg])\n", " if val > max_val:\n", " max_arg = arg\n", " max_val = val\n", "\n", " if max_val == 0:\n", " max_arg = arg\n", " # No neighbors (or multiple maxed out) so \"randomly\" select\n", " # the smallest partition\n", " for arg in range(i % num_partitions, num_partitions):\n", " if partition_sizes[arg] < partition_capacity:\n", " max_arg = arg\n", " max_val = 1\n", " break\n", " if max_val == 0:\n", " for arg in range(0, i % num_partitions):\n", " if partition_sizes[arg] < partition_capacity:\n", " max_arg = arg\n", " break\n", "\n", "\n", " partition_sizes[max_arg] += 1\n", " partition[last_left] = max_arg\n", " partition_votes[:] = 0\n", " last_left = left\n", "\n", " if partition[right] != UNMAPPED:\n", " partition_votes[partition[right]] += 1\n", "\n", "\n", " # Clean up the last assignment\n", " max_arg = 0\n", " max_val = 0\n", " for arg in range(0, num_partitions):\n", " if partition_sizes[arg] < partition_capacity:\n", " val = (partition_votes[arg]) * (\n", " 1 - partition_sizes[arg] / partition_capacity)\n", " if val > max_val:\n", " max_arg = arg\n", " max_val = val\n", " partition[left] = max_arg\n", "\n", " return np.asarray(partition)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 7 }, { "cell_type": "code", "collapsed": false, "input": [ "def draw_figures(waste_values, edge_score_values, num_partitions):\n", " fig, axes = plt.subplots(nrows=1, ncols=2)\n", " \n", " (waste_axes, score_axes) = axes\n", " waste_axes.plot(waste_values, 'r')\n", " waste_axes.set_xlabel('Round')\n", " waste_axes.set_ylabel('Number of wasted bins')\n", " waste_axes.set_ylim(bottom=0)\n", " waste_axes.set_title('Wasted Bins: {} partitions'.format(num_partitions))\n", " \n", " score_axes.plot(edge_score_values, 'r')\n", " score_axes.set_xlabel('Round')\n", " score_axes.set_ylabel('Ratio of edges crossing partitions')\n", " score_axes.set_ylim(bottom=0)\n", " score_axes.set_title('Score: {} partitions'.format(num_partitions))\n", " \n", " fig.tight_layout()" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 8 }, { "cell_type": "code", "collapsed": false, "input": [ "def run_restreaming_greedy(edges, num_nodes, num_partitions=10, num_iterations=10):\n", " print('\\n{} PARTITIONS'.format(num_partitions))\n", " assignments = None\n", " print('ROUND\\tWASTE\\tSCORE')\n", " waste_values = []\n", " edge_score_values = []\n", " flipped_edges = numpy.flipud(edges).copy()\n", " for i in range(num_iterations):\n", " assignments = linear_deterministic_greedy(edges, NUM_NODES, num_partitions, assignments)\n", " (waste, edge_score) = score(assignments, edges)\n", " waste_values.append(waste)\n", " edge_score_values.append(edge_score)\n", " print('{}\\t{:0.3f}\\t{:0.3f}'.format(i, waste, edge_score))\n", " draw_figures(waste_values, edge_score_values, num_partitions)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 9 }, { "cell_type": "code", "collapsed": false, "input": [ "# Use the greedy method to break into 4 partitions\n", "%time run_restreaming_greedy(edges, NUM_NODES, num_partitions=4, num_iterations=15)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "\n", "4 PARTITIONS\n", "ROUND\tWASTE\tSCORE\n", "0\t0.000\t0.367" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "1\t0.000\t0.263" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "2\t0.000\t0.229" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "3\t0.000\t0.209" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "4\t0.000\t0.201" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "5\t0.000\t0.198" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "6\t0.000\t0.195" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "7\t0.000\t0.194" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "8\t0.000\t0.192" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "9\t0.000\t0.192" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "10\t0.000\t0.191" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "11\t0.000\t0.190" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "12\t0.000\t0.190" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "13\t0.000\t0.189" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "14\t0.000\t0.189" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "CPU times: user 1min 15s, sys: 6.25 s, total: 1min 21s" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "Wall time: 1min 21s\n" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\nRU5ErkJggg==\n", "text": [ "" ] } ], "prompt_number": 10 }, { "cell_type": "code", "collapsed": false, "input": [ "# Use the greedy method to break into 20 partitions\n", "%time run_restreaming_greedy(edges, NUM_NODES, num_partitions=40, num_iterations=15)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "\n", "40 PARTITIONS\n", "ROUND\tWASTE\tSCORE\n", "0\t0.000\t0.550" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "1\t0.000\t0.445" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "2\t0.000\t0.412" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "3\t0.000\t0.404" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "4\t0.000\t0.396" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "5\t0.000\t0.392" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "6\t0.000\t0.389" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "7\t0.000\t0.387" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "8\t0.000\t0.386" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "9\t0.000\t0.385" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "10\t0.000\t0.384" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "11\t0.000\t0.383" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "12\t0.000\t0.382" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "13\t0.000\t0.382" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "14\t0.000\t0.381" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "CPU times: user 1min 22s, sys: 6.41 s, total: 1min 28s" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "Wall time: 1min 29s\n" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\nh7feeguzZs2Cra0tZsyYUWMlrJSVlYWvv/5aa08jmUyGoqIijWV3796FhYVFtdtLJBI4OjoK783M\nzGBtbY2srCwAwJdffglPT09YWlrCysoKd+/e1bg38HhaMWRnZ2v8H5iZmcHGxkZoNAEIXzgA0LZt\nW+Fz+/zzz0FE6NOnD3r06IHIyEhRY3tauLu7IzIyEunp6bh06RKysrIwd+5cAEBGRgacnZ2rpMnK\nykKnTp00lnXp0kUoB0+Wk5s3bwr1p/IVHh4uNIY1uXfvHt577z2sWbOm2vXm5uZVynBhYaHWMgxo\nlsPKWLOzswEA27ZtQ69evYQ4L126JHyXAKhy3PWVlZWFzp07a8TTqVMnrWX48e+F2ny3NZRm3UgF\nBATg7t27+Pbbb4VfCBYWFrC3t8emTZtgb2+PLl26oLS0FCEhIXjvvffw999/o6CgACNGjBB+rZib\nm+PLL7/EjRs3EBMTg9WrV+Po0aMAUOUGbOfOnTF16lQUFBQIr+LiYrz33nt45plnUFBQgPv37wvb\n37x5s0oe2lhYWCA0NBT79++v0+cxe/ZsnD59GklJSbh27Rq++OILnWkSExORnZ0NT09PPPPMM5g7\ndy4SExNhb28PIoKnpycuXryokebixYvo3r17tfkREdLT04X3JSUlyM/Ph729PeLj4/HFF19g7969\nKCwsREFBAdq1a6fxq/HJz8rEpOYiruuztbe31+jCf+/ePeTl5cHBwaHGdID6B8GmTZuQmZmJjRs3\n4s0330RKSorOdE2Zm5sbwsLCcOnSJQDqL+Tk5OQq29nb2yM9PV3j//bmzZsan/vj/3edO3dG165d\nNepVUVERfvnlF50xXb9+HTdv3sSAAQPwzDPPICQkBNnZ2XjmmWdw69YtdO/eHSkpKcIXNwBcuHBB\naxkGoFGGKyoqkJGRAXt7e9y8eROvv/46vvnmG+Tn56OgoAA9evSosQxrK6OVy3WVYQcHB9y8eVN4\nX1nHtJXhx/Or7rvt999/r3F/YmvWjVSbNm3g5+eH1atXa/Tg69+/P1avXi1c6isrK0NZWRnat28P\nExMTHDp0CIcPHxa2/+WXX5CcnAwigoWFBVq0aCF8Odra2uLGjRvCti+++CL279+Pw4cPo7y8HA8f\nPkRcXBwyMzPRpUsX+Pn5YcmSJVAqlTh27JhelaxSSUkJdu/ejR49elS7vqZLW6dPn8bJkyehVCrR\ntm1btG7dGi1atNC5zxEjRuDmzZu4cOECLly4gE8++QS9evXC+fPnIZFIMHDgQLRo0QJr165FaWkp\n1q5dCxMTEzz33HNa8zx48CD+/PNPlJWV4aOPPkLfvn2FXoympqZo3749ysrK8Mknn1T5hfskW1tb\npKWlaT12W1tbZGRkaPQ2fPwSYWhoKCIjI3HhwgWUlpbigw8+QEBAgMYv08c9vp+9e/ciIyMDAGBp\naQmJRKKz0Wxqrl69itWrVwu/2tPT07Fr1y7hMt2rr76KL7/8EmfPngURITk5Gbdu3UJAQADatm2L\nzz//HEqlEnFxcfjll18wefJkAFXLcp8+fSCTyfD555/jwYMHKC8vx6VLl3D69GmdMXp5eSEjI0Mo\nw9999x1sbW1x4cIFODo6olu3bujZsyeWLVuGhw8f4qeffsKlS5cQEhKiNc8zZ87g559/hkqlwr/+\n9S+0bt0aAQEBuHfvHiQSCdq3b4+KigpERkYKDbY2dnZ2NZZRW1tb5OXlaa0L//znP3HgwAH8/vvv\nUCqVWLVqFVq3bq318vPjn2113236fC+IqXnVmGoEBQXh9u3b6N+/v7BswIABuHPnjtBwyWQyrF27\nFhMnToS1tTV27dqlce06OTkZgwcPhkwmQ79+/TBr1iyhgXv//ffx2WefwcrKCqtXr4ajoyOio6Ox\nYsUKdOzYEZ07d8aqVauELrT//ve/cfLkSVhbW+OTTz6p8dKdRCJBVlYWZDIZZDIZ5HI5CgsLsXPn\nTo1tHv9b26+0oqIivP7667C2toZcLkf79u2xYMECAOr7MtoavpYtW6Jjx47Cq127dsIyQH2vKyoq\nCtu2bYOVlRW2bduGqKgomJqaaj2mKVOmYNmyZbCxscG5c+ewY8cOAMCwYcMwbNgwdOvWDXK5HG3a\ntKlyGePJ4/vnP/8JALCxsYGfn1+V/Q0aNAjdu3eHnZ2dEPPj+QwaNAiffvopQkJCYG9vj9TUVOE+\nx5Of75NpT58+jYCAAMhkMowdOxZr166FXC6v9ribKplMhpMnT8Lf3x/m5ubo27cvvL29sWrVKgDq\n+zMffvghpkyZAgsLC4wfPx4FBQWQSqXYv38/Dh06hA4dOuCtt97C9u3b0a1bNwBV/69NTEzwyy+/\n4Pz583ByckKHDh3w+uuvC1/c8fHxkMlk1cbYokULjTJsZWUlLKv8UbF7926cPn0a1tbW+PDDD7Fv\n3z7Y2NhUm59EIsHYsWOxZ88eWFtbY+fOnfjpp5/QokULeHp6Yv78+ejbty/s7Oxw6dIlje+e6srw\nc889V2MZdXd3R2hoKJycnGBtbY3s7GyN9W5ubtixYwdmz56NDh064MCBA9i/f3+NdbAybU3fbYYi\nIV13jhkzoGnTpsHR0RGffvqpsUNhrE6WLVuG5OTkGkc1Yfpr9mdSrHHh30zsacdlWFzcSLFGpbrL\nHYw9TbgMi4sv9zHGGGu0qr9z1gz17NmzxgdWGasthUIhPBT5tOJ6wcRW23rBl/seuXDhgtCtU8zX\nkiVLOM+nIN+GyLMpfLk3RL1o7uXiacmzofKtbb3gRooxxlijxY0UY4yxRosbqQYWHBzMeT4F+TZU\nrKyq5l4unpY8GzLf2uDefY809OSErPlpCmVKIpGAiosBc3Njh8KaiNrWCz6TYozV7M8/jR0Ba8a4\nkWKM1SwuztgRsGaMGynGWM24kWJG1KCNVGxsLNzd3eHq6qp1sqw5c+bA1dUVCoUC586d05k2Pz8f\ngwcPRrdu3TBkyBAUFhYK68LDw+Hq6gp3d3eNqTQiIyPh5eUFhUKB4cOHa0wwxhjT4a+/gMfmUmLM\noKiBqFQqcnZ2ptTUVCorKyOFQkFJSUka2xw4cICGDx9OREQnTpwgf39/nWkXLFhAK1euJCKiiIgI\nWrhwIRERXb58mRQKBZWVlVFqaio5OztTRUUFlZaWkrW1NeXl5RER0XvvvUdLly6tEm8DfhSsmWoK\nZQoAUWAgUWyssUNhTURt60WDnUklJibCxcUFcrkcUqkUkydPRnR0tMY2MTExwnxJ/v7+KCwsRE5O\nTo1pH08TFhaGqKgoAEB0dDRCQ0MhlUohl8vh4uKCxMREmJqawsrKCiUlJSAiFBUV6TWrKmPskeBg\n4NFM04wZWoM1UpmZmejUqZPw3tHRUZidU9c2WVlZWtPm5ubC1tYWgHpGytzcXABAVlYWHB0dNdJk\nZGTAxMQEa9asQY8ePeDg4IArV67glVdeEf+AGWuqBg7k+1LMaBqskdJ3qHrSo788EVWbn64h8SUS\nCYqKijBnzhxcuHABWVlZ8PLyQnh4uLYE/OKXeK+mIiAAuHQJKC42diSsGWqwUdAdHByQnp4uvE9P\nT9c406lum4yMDDg6OkKpVFZZXnmJztbWFjk5ObCzs0N2drYwnXJ1eVWeOXXt2hVdu3YFoJ5OXFsn\njqVLlgh/BwcHN4qnrdnTIy4uDnGPn3EsW2a0WETVujXg56d+XmrYMGNHw5qbhrgxRkSkVCrJycmJ\nUlNTqbS0VGfHiYSEBKHjRE1pFyxYQBEREUREFB4eXqXjRGlpKaWkpJCTkxNVVFTQ33//TQ4ODnT7\n9m0iIlq8eDG9++67VeJtwI+CNVNNoUwJx7BkCdF77xk1FtY01LZeNNiZlKmpKdatW4ehQ4eivLwc\n06dPh4eHBzZu3AgAmDFjBkaMGIGDBw/CxcUFZmZmiIyMrDEtACxatAgTJ07E5s2bIZfL8cMPPwAA\nPD09MXHiRHh6esLU1BTr16+HRCJBhw4dsGLFCgwcOBAmJiaQy+X4/vvvG+qwGWuagoOBhQuNHQVr\nhnjsvkeawjhrrHFpCmVKOIaHD4H27YGsLMDCwthhsacYj93HGBNf69ZA7948jh8zOG6kGGP64eel\nmBFwI8VYE6VrWLK4uDi0a9cOvXr1Qq9evfDZZ5/VnGFwMD8vxQyuwTpOMMaMp7y8HG+99RZ+++03\nODg4oHfv3hgzZozQAalSUFAQYmJi9MvU3x9ISgKKivi+FDMYPpNirAnSZ1gyQL+H6QWtWwN9+gDH\njokYKWM140aKsSZIn2HJJBIJjh8/DoVCgREjRiApKUl3xnxfihkYX+5jrAnSZ1gyHx8fpKeno23b\ntjh06BDGjRuHa9eu1ZwoOBiYP1+cIBnTAzdSjDVB+gxLJpPJhL+HDx+ON998E/n5+bC2ttbYbunS\npcLfwf36Ifh//wPu3gXatWuY4FmTUmW4sFrih3kfaQoPXrLGxZhlSqVSwc3NDUeOHIG9vT369OmD\nXbt2aXScyM3NRceOHSGRSJCYmIiJEyciLS1NI59qj2HQIGDePGDkSAMcCWtqalsv+EyKsSZIn2HJ\nfvzxR/y///f/YGpqirZt22L37t36ZV55X4obKWYAfCb1CJ9JMbE1hTJV7THExwPvvAOcPm2coNhT\nrbb1ghupR5rCFwprXJpCmar2GEpL1eP4pacDlpbGCYw9tXjsPsZYw2rVSv1gLz8vxQyAGynGGqnk\n5GQ8fPgQAHD06FGsXbsWhYWFRo7qEX5eihkIN1KMNVIhISEwNTVFcnIyZsyYgfT0dEyZMsXYYanx\nOH7MQLiRYqyRMjExgampKX766SfMnj0bX3zxBbKzs40dllrv3sC1a0BjObNjTRY3Uow1Ui1btsS/\n//1vbNu2DaNGjQIAKJVKI0f1SKtWQECAuqcfYw2IGynGGqktW7YgISEBH374Ibp27YqUlBS8+OKL\nxg7r//AlP2YADdpI6ZrPBgDmzJkDV1dXKBQKnDt3Tmfa/Px8DB48GN26dcOQIUM0biSHh4fD1dUV\n7u7uOHz4MACguLhYmC+nV69e6NChA955550GOmLGxNO9e3d8/fXXCA0NBQA4OTlh0aJFRo7qMdx5\nghkCNRCVSkXOzs6UmppKZWVlpFAoKCkpSWObAwcO0PDhw4mI6MSJE+Tv768z7YIFC2jlypVERBQR\nEUELFy4kIqLLly+TQqGgsrIySk1NJWdnZyovL68Sl6+vL8XHx1dZ3oAfBWum6lum4uPj6fnnnycX\nFxeSy+Ukl8upa9euIkWnnxqPobSUyNycKD/fcAGxp15t60WDnUnpM59NTEwMwsLCAAD+/v4oLCxE\nTk5OjWkfTxMWFoaoqCgAQHR0NEJDQyGVSiGXy+Hi4oLExESN/V27dg1///03+vfv31CHzZhopk+f\njnnz5uHYsWM4deoUTp06VaVMG1XLlkDfvnxfijWoBmuk9JnPRts2WVlZWtPm5ubC1tYWAGBra4vc\n3FwAQFZWlsYoz9Xtb/fu3Zg8ebJIR8hYw7K0tMTw4cNha2uL9u3bC69Ghe9LsQbWYAPM6jOfDaDf\nzKBEVG1+Eomkxv08uW7Pnj3YsWOH1u01piQIDkZwcLDO2BirVN8pCZ40cOBALFiwAOPHj0erVq2E\n5T4+PqLto96Cg4FZs4wdBWvCGqyR0mc+mye3ycjIgKOjI5RKZZXlDg4OANRnTzk5ObCzs0N2djY6\nduyoNa/KNABw4cIFqFQq9OrVS2vMjzdSjNXWkz9sli1bVq/8Tpw4AYlEgtNPDOR6tDF1VvDzA5KT\ngfx84Il5qBgTRYPcGSMipVJJTk5OlJqaSqWlpTo7TiQkJAgdJ2pKu2DBAoqIiCAiovDw8CodJ0pL\nSyklJYWcnJyooqJC2NfChQtp6dKlWuNtwI+CNVNNoUzpdQxDhhBFRTV8MKxJqG29aLAzKX3msxkx\nYgQOHjwIFxcXmJmZITIyssa0ALBo0SJMnDgRmzdvhlwuxw8//AAA8PT0xMSJE+Hp6QlTU1OsX79e\n43Lf3r17cejQoYY6XMZEV1hYiGXLluG///0vAPWZ2scff4x2jW1G3Mr7UmPHGjsS1gTxVB2PNIVp\nFVjjUt8yNX78eHh5eSEsLAxEhO3bt+PixYv46aefRIyyZnodQ0ICMHMmcP68YYJiTzWeT6qOuJFi\nYqtvmVIoFLhw4YLOZQ1Jr2NQKgEbGyAtje9LMZ14PinGmog2bdog/rFnkI4dO4a2bdsaMSItpFLg\n2WeBR5feGRMTn0k9wmdSTGz1LVPnz5/HSy+9hLt37wIArKyssHXrVigUCrFC1EnvY/jrL+C554Bf\nfwUaUxd51ujw5b464kaKiU2sMlVUVAQAsLCwqHdetVWrY/jxR2D+fODUKeDRoyGMPYkbqTriRoqJ\nra5lavv27Zg6dSpWrVql0UOVHj3UPm/ePDHDrFGtj+HDD4E//wT+8x/1ZUDGnsD3pBh7yt2/fx+A\negT/x18lJSUoLi42cnQ6fPIJYGamPqNiTAR8JvUIn0kxsdW3TB07dqzKYMjVLWtIdTqGwkKgTx/g\ngw+Al19ukLjY04sv99URN1JMbPUtU7169dKYYw1Qj9t39uzZ+oamtzofQ1ISEBQEHDigbrAYe6S2\nZarBRpxgjNVNQkICjh8/jtu3b2P16tVChS4uLkZ5ebmRo9OTpyfw7bdASIi6I4WdnbEjYk8pbqQY\na2TKysqEBunxe1AWFhb48ccfjRhZLY0bpx6FYsIE4Pff1fNPMVZLfLnvEb7cx8RW3zJ18+ZNdOnS\nRcSIaq/e9aKiAvjHPwB7e+D//T/xAmNPrQa9J1VeXo579+4Z5XmNhsaNFBNbXcvU22+/jTVr1mD0\n6NHV5hkTEyNGeHoRpV4UFQH+/sA77wCvvy5OYOypJfo9qdDQUGzcuBEtWrRA7969cffuXbz99tt4\n77336hUoY6x6L730EgBgfjXduPWdTLRRsbAAoqOB/v2BHj2Afv2MHRF7iuh8TiopKQkWFhaIiorC\n8OHDkZaWhu3btxsiNsaaJV9fXwDqYZEqJ1KsfD3Z2++p0a0bEBkJ/POfQFaWsaNhTxGdjZRKpYJS\nqURUVBRGjx4NqVT6dP6aY+wps3Xr1irLvv/+e8MHIpaRI9VTzY8YAfz73+rnqRjTQeflvhkzZkAu\nl8Pb2xuBgYFIS0trfJOuMdaE7Nq1C//+97+RmpqqcV+quLgYNjY2RoxMBO+/r+5EsWsX8MYb6ntV\nY8cCY8YAnTsbOzrWCNW6dx8Roby8HKamTav3OnecYGKra5m6efMmUlNT8f777yMiIkLIw8LCAt7e\n3nrVvdjYWMydOxfl5eV49dVXsXDhwmq3O3XqFPr27YsffvgB48ePF+0Y9HLvHnD4MBAVpX7ot3Nn\ndYM1bhzML4H8AAAgAElEQVTg7Q3wFZsmqdZlStf88g8ePKAdO3bQZ599RkuXLqWlS5fSsmXL9JiZ\nnujQoUPk5uZGLi4uFBERUe02s2fPJhcXF/L29qazZ8/qTJuXl0fPP/88ubq60uDBg6mgoEBYt2LF\nCnJxcSE3Nzf69ddfheWlpaX02muvUbdu3cjd3Z327dtXJQ49PgrGaqU+ZUqpVFJQUFCd0qpUKnJ2\ndqbU1FQqKysjhUJBSUlJ1W43cOBAGjlyJP3444/V5mWweqFUEsXFEb3zDpGTE1GXLkRz5hD9/rt6\nHWsyalumdN6TGjt2LGJiYiCVSmFubg5zc3OYmZnpbPzKy8vx1ltvITY2FklJSdi1axeuXLmisc3B\ngweRnJyM69evY9OmTZg5c6bOtBERERg8eDCuXbuGQYMGISIiAoC6g8eePXuQlJSE2NhYvPnmm0Jr\nvXz5ctjZ2eHq1au4cuUKgoKC9G/FGTMCU1NTtGjRAoV1uG+TmJgIFxcXyOVySKVSTJ48GdHR0VW2\n+/rrrzFhwgR06NBBjJDrx9RUPYzS6tVAcjLwyy9Ahw7AggXAM88Ar74KHDwIlJYaO1JmYDqvG2Rm\nZuLXX3+tdcaPVxQAQkXx8PAQtomJiUFYWBgAwN/fH4WFhcjJyUFqaqrWtDExMfjjjz8AAGFhYQgO\nDkZERASio6MRGhoKqVQKuVwOFxcXJCYmwt/fH5GRkbh69aqw36f+uj5rFszMzODl5YUhQ4YIM/JK\nJBKsXbu2xnSZmZno1KmT8N7R0REnT56ssk10dDR+//13nDp1qnF1hpJI1F3Ve/QAFi9WT0v/889A\neDjwwgvA8OHA+PHAsGGAubmxo2UNTGcj1a9fP1y8eBHe3t61yljfivLkNpmZmcjKytKaNjc3F7a2\ntgAAW1tb5ObmAgCysrIQEBBQJa/KX6KLFy9GXFwcnJ2dsW7dOnTkSdlYIzd+/Pgq94n0aUz02Wbu\n3LmIiIgQ7g9QDfcIli5dKvxd2RXeoORy9YPA77wD5OSon7n69ltg+nT1bMDjxwOjRgFWVoaNi+kl\nLi4OcXFxdU6vs5GKj49HZGQkunbtilatWgFQV4KLFy/WmE7fX2Y1VY7Ht6kuP4lEonM/KpUKGRkZ\nePbZZ7Fq1Sp89dVXePfdd7Ft2za94mPMWF6u4zQXDg4OSE9PF96np6fD0dFRY5szZ85g8uTJAIA7\nd+7g0KFDkEqlGDNmTJX8Hm+kjM7ODpgxQ/0qKAD27wf27QPefFN9WdDVFXBx+b+XqyvQpQtPwGhE\nT/6wWbZsWa3S62ykDh06VOugAP0qypPbZGRkwNHREUqlsspyBwcHAOqzp5ycHNjZ2SE7O1s4I6ou\nLwcHB9jY2KBt27bCL9IJEyZg8+bN1cZs9F+M7KlW31+MT7p27Ro++OADJCUl4cGDBwDUP8xSUlJq\nTOfn54fr168jLS0N9vb22LNnD3bt2qWxzeN5TJs2DaNHj662gWrUrKyAl15Svx4+BFJT1fezrl8H\nrlxRN2DJyUBmJtCp0/81YE5O6gbt8ZdMZuyjYVpobaSKiopgYWFR53H69KkoY8aMwbp16zB58mSc\nOHEClpaWsLW1hY2Njda0Y8aMwdatW7Fw4UJs3boV48aNE5ZPmTIF8+bNQ2ZmJq5fv44+ffpAIpFg\n9OjROHr0KAYOHIgjR46ge/fu1cbcqH4xsqdOfX8xPmnatGlYtmwZ5s2bh7i4OERGRuo1VYepqSnW\nrVuHoUOHory8HNOnT4eHhwc2btwIQP3sY5PTujXg4aF+Pam0VH1fKzlZ/UpJARISgOzs/3tJJFUb\nrmeeATp2BGxsNF9WVuqOHswgtD4nNXLkSBw4cAByubzKJTV9fs0B6rOwymc1pk+fjvfff79KRans\nxWdmZobIyEj4+PhoTQsA+fn5mDhxIm7dugW5XI4ffvgBlpaWAIAVK1Zgy5YtMDU1xZo1azB06FAA\nwK1btzB16lQUFhaiY8eOiIyMrHJWx89JMbHVt0xVTnDo5eWFv/76S2OZoTSLekEEFBdrNlqVr9u3\ngbw8zVdhofrM68nGq1079TiFMpn6X20vc3OgTRvARGfn6iaJZ+ato2ZRGZlB1bdM9evXD/Hx8Zgw\nYQIGDRoEe3t7vP/++xo9VRsa14tqVFSoG6q8PODOHfW/+fnq0d6rexUXV33/8KH67M/MDGjbtvp/\nK/9+/NWmTdVllctbt1a/WrXS/Ltly0b1YLTojRQR4aeffsKxY8dgYmKC/v374x//+Ee9A21suDIy\nsdW3TCUmJsLDwwOFhYX46KOPUFRUhPfee0+jF2tD43rRQCoqgAcP1KNu3L9f/b/37qm3uX+/5ldl\nPqWl6tfDh+pX5d8qlbqherLhqvz38b+rW9aypbrjSeXfT74q15maqv+WSjX/fuK9xNdX3EZq5syZ\nuHHjBkJDQ0FE2LNnD5ydnbF+/fp6/z81JlwZmdjEKlNFRUUAYJR53LheNAEVFZqNV1mZ+v3j/1a3\nrLQUUCr/b31ZWdX3j79UKvV6pVL730olJOfPi9tIubu7IykpCSaPrp9WVFTA09MT//vf/+r3wTUy\nXBmZ2Opbpk6dOoVXXnlFaKQsLS2xefNm+Pn5iRWiTlwvmNhqW6Z03rlzcXHBrVu3hPe3bt2Ci4tL\n3aJjjOntlVdewfr163Hz5k3cvHkT33zzDV555RVjh8WYQWntR1k5RUBxcTE8PDyE7tyJiYno3bu3\nwQJkrLkyNTXFgAEDhPf9+/dvcrMPMKaL1st9lQ8lVndqJpFImtwgrXxZg4mtvmVq7ty5ePDgAUJD\nQwEAe/bsQevWrTF16lQAEB7XaEhcL5jYuAt6HXFlZGKrb5kKDg6ucdivo0eP1jlvfXG9YGLjRqqO\nuDIysTWFMtUUjoE1LqJ3nGCMMcaMhRspxhhjjZbWrkJeXl5aE+kzVQdjjDFWX1obqf379wOAMLLE\n1KlTQUTYuXOnYSJjrJnbt29flY4T7dq1g5eXF0/ayZoNnR0nevbsifPnz2ss69WrF86dO9eggRka\n3yBmYqtvmRo5ciQSEhIwcOBAAOrHQnx8fJCamoqPP/4YL730klihasX1golN9I4TRIRjx44J7//8\n808utIwZgFKpxJUrV7Bv3z7s27cPSUlJkEgkOHnyJFauXGns8BgzCJ2Pr2/ZsgXTpk3D3bt3AajH\nD4uMjGzwwBhr7tLT02Frayu879ixI9LT02FjY4OWLVsaMTLGDEdnI+Xr64uLFy/i7t27ICJhgkHG\nWMMaOHAgRo4ciYkTJ4KIsG/fPgQHB+PevXtcD1mzofOeVE5ODj788ENkZmYiNjYWSUlJSEhIwPTp\n0w0Vo0HwtXcmtvqWqYqKCmEuN4lEgmeffRYhISE1jkIhNq4XTGyijzgxbNgwTJs2DcuXL8fFixeh\nVCrRq1cvXLp0qd7BNiZcGZnYmkKZagrHwBoX0TtO3LlzB5MmTUKLFi0AAFKpVO+RmGNjY+Hu7g5X\nV1etN3rnzJkDV1dXKBQKjR6D2tLm5+dj8ODB6NatG4YMGYLCwkJhXXh4OFxdXeHu7o7Dhw8Ly4OD\ng+Hu7o5evXqhV69euHPnjl7xM2ZM+/btg6urKywsLCCTySCTyYwy8SFjRkU6BAUF0Z07d6hnz55E\nRJSQkECBgYG6kpFKpSJnZ2dKTU2lsrIyUigUlJSUpLHNgQMHaPjw4UREdOLECfL399eZdsGCBbRy\n5UoiIoqIiKCFCxcSEdHly5dJoVBQWVkZpaamkrOzM1VUVBARUXBwMJ05c6bGePX4KBirlfqWKScn\npyp1xtC4XjCx1bZM6TyTWrVqFUaPHo2UlBT069cPU6dOxdq1a3U2fomJiXBxcYFcLodUKsXkyZMR\nHR2tsU1MTAzCwsIAAP7+/igsLEROTk6NaR9PExYWhqioKABAdHQ0QkNDIZVKIZfL4eLigpMnTz7e\nGOvRZDPWeNjZ2cHDw8PYYTBmVDqv23Xv3h1//PEHrl69CiKCm5sbKioqdGacmZmJTp06Ce8dHR01\nGg1t22RmZiIrK0tr2tzcXKFbrq2tLXJzcwEAWVlZCAgI0EiTlZUlvA8LC4NUKkVISAgWL16sM37G\njM3Pzw+TJk3CuHHjhC7nEokE48ePN3JkjBmOzkaqX79+OHv2LHr06CEs8/HxwdmzZ2tMp28PJH3O\ncIio2vwkEole+9m5cyfs7e1RUlKCkJAQbN++XZg47nFLly4V/g4ODkZwcLDOvBmrFBcXJ0wWKoa7\nd++iTZs2GvdXAXAjxZoVrY1UdnY2srKycP/+fZw9e1ZoKIqKinD//n2dGTs4OCA9PV14n56eDkdH\nxxq3ycjIgKOjI5RKZZXlDg4OANRnTzk5ObCzs0N2drYwhll1eVWmsbe3BwCYm5tjypQpSExM1NlI\nMVZbT/6wWbZsWb3y+/777+sXEGNNgNZG6vDhw/j++++RmZmJ+fPnC8tlMhlWrFihM2M/Pz9cv34d\naWlpsLe3x549e7Br1y6NbcaMGYN169Zh8uTJOHHiBCwtLWFrawsbGxutaceMGYOtW7di4cKF2Lp1\nK8aNGycsnzJlCubNm4fMzExcv34dffr0QXl5OQoKCtC+fXsolUrs378fQ4YMqdOHxZghrFy5EgsX\nLsTs2bOrrJNIJHrdE2asqdDaSIWFhSEsLAz79u1DSEhI7TM2NcW6deswdOhQlJeXY/r06fDw8MDG\njRsBADNmzMCIESNw8OBBuLi4wMzMTBhuSVtaAFi0aBEmTpyIzZs3Qy6X44cffgAAeHp6YuLEifD0\n9ISpqSnWr18PiUSChw8fYtiwYVAqlSgvL8fgwYPx2muv1fp4GDMUT09PAOrRXiovZ1deFjfkg7yM\nNQY6H+b917/+hVdeeQUymQyvvvoqzp07h/DwcAwdOtRQMRoEP7TIxCZmmSovL0dJSQnatWsnSn76\n4nrBxCb6w7xbtmyBhYUFDh8+jPz8fGzbtg2LFi2qV5CMMd2mTJmCoqIi3Lt3D15eXvD09MTnn39u\n7LAYMyi9puoAgAMHDmDq1KkavfwYYw3n8uXLsLCwQFRUFIYPH460tDRs377d2GExZlA6GylfX18M\nGTIEBw8exNChQ1FUVAQTE53JGGP1pFKpoFQqERUVhdGjR0MqlfI9Kdbs6GxtNm/ejPDwcJw+fRpm\nZmZQKpU8nxRjBjBjxgzI5XKUlJQgMDAQaWlptbonpWvszOjoaCgUCvTq1Qu+vr74/fffxQyfMVHo\n7DgBqAd1TU5OxsOHD4VlgYGBDRqYofENYiY2scsUEaG8vFyvAZ7Ly8vh5uaG3377DQ4ODujduzd2\n7dqlMczSvXv3YGZmBgD466+/8I9//APJyckNegyMid5x4ttvv0VQUBCGDBmCJUuWYOjQofzQK2MG\nsGbNGhQVFYGIMH36dPj4+ODIkSN6pdVn7MzKBgoASkpK0L59e1HjZ0wMOhupNWvWIDExEXK5HEeP\nHsW5c+cM3g2WseZo8+bNGj1rt2/frnfPWm3jYj4pKioKHh4eGD58OD8kzBolndcNWrdujTZt2gAA\nHj58CHd3d1y9erXBA2OsuatPz1p9O1iMGzcO48aNQ3x8PKZOnVpt3eYxLVl91HdMS52NVKdOnVBQ\nUIBx48Zh8ODBsLKyglwur/MOGWP6qexZm5KSgvDw8Fr1rNVn7MzHDRgwACqVCnl5ebCxsdFYx5f3\nWX3Ud0xLvTpOVIqLi0NRURGGDRsmTB3QVPANYia2+pap8vJyXLhwAU5OTrC0tEReXh4yMjKgUCh0\nplWpVHBzc8ORI0dgb2+PPn36VOk4cePGDTg5OUEikeDs2bP45z//iRs3boh6DIw9qbZlSueZ1OLF\nixEUFIR+/frxaT5jBtSiRQukp6dj586dANS/SEePHq1XWn3Gzty3bx+2bdsGqVQKc3Nz7N69u8GO\nhbG60nkmtWXLFsTHx+PEiRMwNzdHYGAgBgwYIIw+3lTwL0YmtvqWqUWLFuHUqVN44YUXQETYvXs3\n/Pz8EB4eLmKUNeN6wcRW2zKl9+W+nJwc7NmzB19++SUKCgpQUlJS5yAbI66MTGz1LVNeXl44f/48\nWrRoAUB9+a9nz57466+/xApRJ64XTGyiPyc1ffp09OvXDzNnzoRKpcK+fftQUFBQryAZY7pJJBIU\nFhYK7wsLC3lYJNbs6LwnlZ+fD5VKBUtLS1hbW6N9+/aQSqWGiI2xZu3999+Hj48PBg4cCCLCH3/8\ngYiICGOHxZhB6X2578qVK4iNjcW//vUvlJeXIyMjo6FjMyi+rMHEVp8yVVFRgb1792LAgAE4deoU\nJBIJevfujWeeeUbkKGvG9YKJTfR7Uvv370d8fDzi4+NRWFiIgIAADBgwAK+88kq9g21MuDIysdW3\nTPn6+uLMmTMiRlR7XC+Y2ERvpN566y0MGDAAAwYMgL29fb0DbKy4MjKxidG7r3379pg0aZLGOHvW\n1tZihKcXrhdMbKJ3nFi3bh0mTZpUpwZK11QBADBnzhy4urpCoVDg3LlzOtPm5+dj8ODB6NatG4YM\nGaJxYzk8PByurq5wd3fH4cOHq+xrzJgx8PLyqvVxMGYMu3fvxjfffIPAwED4+voKL8aaFWogKpWK\nnJ2dKTU1lcrKykihUFBSUpLGNgcOHKDhw4cTEdGJEyfI399fZ9oFCxbQypUriYgoIiKCFi5cSERE\nly9fJoVCQWVlZZSamkrOzs5UXl4u7Gvfvn00ZcoU8vLyqjbeBvwoWDPVFMpUUzgG1rjUtkw12BS7\n+kwVEBMTg7CwMACAv78/CgsLkZOTU2Pax9OEhYUhKioKgHoCt9DQUEilUsjlcri4uCAxMRGAehqC\nr776CosXL+ZLF+yp8c0332g87lFQUID169cbMSLGDE9rIzVo0CAAwHvvvVenjPWZKkDbNllZWVrT\n5ubmwtbWFgBga2uL3NxcAEBWVpbGAJqOjo7IysoCAHz00Ud499130bZt2zodC2PGsGnTJlhZWQnv\nrayssGnTJiNGxJjhaX1OKjs7G8ePH0dMTAwmT54MItJ4kNDHx6fGjPV96FCfM5sn9/34PmraDxHh\n/PnzSElJwVdffYW0tLQa98NTErD6qO+UBE+qqKhARUWFMPJ5eXk5lEqlaPkz9jTQ2kgtW7YMn3zy\nCTIzMzF//vwq648ePVpjxvpMFfDkNhkZGXB0dIRSqayy3MHBAYD67CknJwd2dnbIzs5Gx44da8zr\nxIkTOH36NLp27QqVSoW///4bzz33HH7//fcqMfOUBKw+6jslwZOGDh2KyZMnY8aMGSAibNy4EcOG\nDatnlIw9ZXTdtFq2bFkdbo0RKZVKcnJyotTUVCotLdXZcSIhIUHoOFFT2gULFlBERAQREYWHh1fp\nOFFaWkopKSnk5OREFRUVGvtLS0ujHj16VBuvHh8FY7VS3zKlUqlo/fr1FBISQiEhIbRhwwZSqVQi\nRacfrhdMbLUtU3ptHRUVRfPmzaP58+dTTEyM3pkfPHiQunXrRs7OzrRixQoiItqwYQNt2LBB2GbW\nrFnk7OxM3t7edObMmRrTEhHl5eXRoEGDyNXVlQYPHkwFBQXCuuXLl5OzszO5ublRbGxslXhSU1O5\ndx8zmKZQpprCMbDGpbZlSufDvI1hugBD4IcWmdiaQplqCsfAGhfRR5xoDNMFGAJXRia2plCmmsIx\nsMZF9BEneLoAxoyvvLwcRUVFxg6DMYPT2UhVThfw8ssvIywsDL6+vvjggw8MERtjzVpoaCiKiopw\n7949eHl5wcPDA59//rmxw2LMoPSaqiMrK8uo0wUYAl/WYGKrb5lSKBS4cOECdu7cibNnzyIiIgI+\nPj48My97qtW2TOmc9BAA7O3tMXbs2DoHxRirPZVKBaVSiaioKMyaNQtSqZQvtbNmp8HG7mOM1c+M\nGTMgl8tRUlKCwMBApKWloV27dsYOizGD0ntm3qaOL2swsYldpogI5eXlMDXV6wKIKLheMLGJ2rtP\npVLBzc2t3kExxmovJycH06dPF4ZCunLlCrZu3WrkqBgzrBobKVNTU7i7u+PmzZuGiocx9sjLL7+M\nIUOGCKP5u7q64quvvjJyVIwZls7rBvn5+ejevTv69OkjTGEtkUgQExPT4MEx1pzduXMHkyZNQkRE\nBABAKpUa9FIfY42BzhL/6aefVlnGPYwYa3jm5ubIy8sT3p84cYI7TrBmR6+OE2lpaUhOTsbzzz+P\n+/fvQ6VSwcLCwhDxGQzfIGZiq2+ZOnPmDGbPno3Lly+je/fuuH37Nn788UcoFAoRo6wZ1wsmNtHH\n7tu0aRO+/fZb5Ofn48aNG7h27RpmzpyJI0eO1DvYxoQrIxObGGVKqVTi6tWrAAA3NzdIpVIxQtMb\n1wsmNtEbKYVCgcTERAQEBODcuXMA1IPO8gCzjNWsvmVq3759VS6tt2vXDl5eXsJknw2N6wUTm+gj\nTrRq1QqtWrUS3qtUKr4nxZgBbNmyBQkJCRg4cCAA9fT0Pj4+SE1Nxccff4yXXnrJyBEy1vB0NlJB\nQUFYvnw57t+/j//85z9Yv349Ro8ebYjYGGvWlEolrly5AltbWwBAbm4upk6dipMnTyIwMJAbKdYs\n6BwWKSIiAh06dICXlxc2btyIESNG4LPPPjNEbIw1a+np6UIDBQAdO3ZEeno6bGxs0LJlS53pY2Nj\n4e7uDldXV6xcubLK+p07d0KhUMDb2xvPPvssLl68KGr8jIlCn+l7Hz58SOfPn6cLFy5QaWmp3tP+\nHjp0iNzc3MjFxYUiIiKq3Wb27Nnk4uJC3t7edPbsWZ1p8/Ly6Pnnn692+vgVK1aQi4sLubm50a+/\n/iosHzp0KCkUCvL09KRXXnmFysrKqsSh50fBmN7qW6ZmzpxJI0aMoO+//54iIyNp1KhR9MYbb1BJ\nSQkFBwfXmFalUpGzszOlpqZSWVkZKRQKSkpK0tjm+PHjVFhYSETq+ubv7y/6MTD2pNqWKZ1b//LL\nL+To6EiBgYEUGBhIjo6OdODAAZ0Z61NJDhw4QMOHDyciohMnTgiVpKa0CxYsoJUrVxIRUUREBC1c\nuJCIiC5fvkwKhYLKysooNTWVnJ2dqaKigoiIiouLhX2GhITQ9u3bq34QXBmZyOpbpsrLy2nv3r30\n9ttv09y5c2nv3r1Cmdbl+PHjNHToUOF9eHg4hYeHa90+Pz+fHBwcqiznesHEVtsypfOe1Lx583D0\n6FG4uLgAAG7cuIERI0ZgxIgRNaZLTEyEi4sL5HI5AGDy5MmIjo6Gh4eHsE1MTAzCwsIAAP7+/igs\nLEROTg5SU1O1po2JicEff/wBAAgLC0NwcDAiIiIQHR2N0NBQSKVSyOVyuLi44OTJkwgICIC5uTkA\n9TX+srIytG/fXr/TTMaMyMTEBBMmTMCECRNqnTYzMxOdOnUS3js6OuLkyZNat9+8ebPOOs2YMehs\npCwsLIQGCgCcnJz0epBXn0pS3TaZmZnIysrSmjY3N1e4Tm9ra4vc3FwA6okZAwICquRVaejQoTh1\n6hQGDx4sDNjJWGNkbm6utQetRCLRaxr52vTAPXr0KLZs2YI///yz2vVLly4V/g4ODkZwcLDeeTMW\nFxeHuLi4OqfX2kjt27cPAODn54cRI0Zg4sSJAIC9e/fCz89PZ8b6VhLSo788EVWbn0QiqXE/j6/7\n9ddfUVpaikmTJmHr1q3CGdzjuDKy+qhvZaxUUlICAFi8eDHs7e3x4osvAlB3dKgcbFYXBwcHpKen\nC+/T09Ph6OhYZbuLFy/itddeQ2xsLKysrKrN6/F6wVhtPfldumzZslql19pI7d+/X/iS79ixo3CJ\nrUOHDnj48KHOjPWpJE9uk5GRAUdHRyiVyirLHRwcAKjPnnJycmBnZ4fs7Gzhocbq8qpMU6lVq1YI\nCQnByZMndTZSjNVWfSvjk2JiYjR63M2cORPe3t7Vjqf5JD8/P1y/fh1paWmwt7fHnj17sGvXLo1t\nbt26hfHjx2PHjh0aV0sYa1Qa5M4YESmVSnJycqLU1FQqLS3V2XEiISFB6DhRU9oFCxYIvf3Cw8Or\ndJwoLS2llJQUcnJyooqKCiopKaGsrCwh34kTJ9J3331XJd4G/ChYM1XfMhUQEEDbt28nlUpFKpWK\nduzYQX379tU7/cGDB6lbt27k7OxMK1asICKiDRs20IYNG4iIaPr06WRtbU09e/aknj17Uu/evUU/\nBsaeVNsypXPrGzdu0Ny5c2ncuHE0atQoGjVqFI0ePVqvzHVVEiKiWbNmkbOzM3l7e9OZM2dqTEuk\n7oI+aNCgarugL1++nJydncnNzY1iY2OJiCg3N5d69+5N3t7e5OXlRe+++261PaS4MjKx1bdMpaSk\n0OjRo8nGxoZsbGxozJgxlJqaKk5weuJ6wcRW2zKlc+w+b29vvPrqq+jRowdMTNTP/kokEgQFBTXo\nGZ6h8RhlTGxNoUw1hWNgjYvoA8z26dMHiYmJ9Q6ssePKyMRW3zJ19epVvPnmm8jJycHly5dx8eJF\nxMTEYPHixSJGWTOuF0xsojdS27dvx40bNzB06FCNgWZ9fHzqHmUjxJWRia2+ZSowMBBffPEF3njj\nDZw7dw5EhB49euDy5csiRlkzrhdMbKKPgn758mVs374dR48eFS73AepnKxhjDef+/fvw9/cX3ksk\nEoPPJ8WYselspPbu3YvU1FS9BrRkjImnQ4cOSE5OFt7/+OOPeOaZZ4wYEWOGp7OR8vLyQkFBgcZo\nzIyxhrdu3Tq8/vrruHr1Kuzt7dG1a1fs3LnT2GExZlA670kFBQXh4sWL6N27t3BPSiKRICYmxiAB\nGgpfe2diE6tMlZSUoKKiQq/hyMTG9YKJTfSOE9qGeWlqQwZxZWRiawplqikcA2tcRG+kmguujExs\nTaFMNYVjYI1LbcuUzpl5zc3NIZPJIJPJ0KpVK5iYmBjlsgNjzcXevXsBACkpKUaOhDHj09lIlZSU\noMr/TfwAABZUSURBVLi4GMXFxXjw4AF++uknvPnmm4aIjbFmacWKFQCAkJAQI0fCmPHV6XJfz549\ncf78+YaIx2j4sgYTW13L1PPPPw+JRIJTp05hwIABVfI0ZKclrhdMbKI/zFs5rxQAVFRU4MyZM2jT\npk3domOM6XTw4EGcPXsWL774It59912NCl2byQwZawp0nkm9/PLLQsUwNTWFXC7Ha6+9Jszj1FTw\nL0YmtvqWqdu3b6NDhw7CJIjm5uZihaY3rhdMbNy7r464MjKx1bdM/fXXX3jppZeQl5cHQD0Cxdat\nW9GjRw+xQtSJ6wUTm2iNlLZZRSvPqj7++OM6hNd4cWVkYqtvmerbty9WrFiBgQMHAlA/s/jBBx/g\n+PHjYoWoE9cLJjbR7kmZmZlVuf597949bN68GXfu3GlyjRRjjc39+/eFBgpQP0B/7949I0bEmOHp\ndbmvqKgIa9euxebNmzFx4kTMnz+f70kxpkN9y9S4cePg6+uLqVOngoiwc+dOnDlzBj///LOIUdaM\n6wUTm6gP8+bl5WHx4sVQKBRQKpU4e/YsVq5c2eQaKMYaoy1btuDvv//G+PHjERISgtu3b2PLli3G\nDosxg9LaSL377rvo06cPZDIZLl68iGXLlsHKyqrWO4iNjYW7uztcXV2xcuXKareZM2cOXF1doVAo\ncO7cOZ1p8/PzMXjwYHTr1g1DhgxBYWGhsC48PByurq5wd3fH4cOHAQAPHjzAyJEj4eHhgR49euD9\n99+v9XEwZmjW1tb4+uuvcfbsWZw9exZr1qypUx1k7KlGWkgkEmrVqhWZm5tXeclkMm3JNKhUKnJ2\ndqbU1FQqKysjhUJBSUlJGtscOHCAhg8fTkREJ06cIH9/f51pFyxYQCtXriQiooiICFq4cCEREV2+\nfJkUCgWVlZVRamoqOTs7U0VFBd2/f5/i4uKIiKisrIwGDBhAhw4d0oijho+CsTppCmWqKRwDa1xq\nW6a0nklVVFTg4cOHwpBIj7+Kior0agATExPh4uICuVwOqVSKyZMnIzo6WmObmJgYhIWFAQD8/f1R\nWFiInJycGtM+niYsLAxRUVEAgOjoaISGhkIqlUIul8PFxQUnT55EmzZtEBQUBACQSqXw8fFBZmZm\nLZpyxhhjxqBz7L76yMzMRKdOnYT3jo6OVRoHbdtkZWVpTZubmytMwmhra4vc3FwAQFZWFhwdHWvc\nX2FhIfbv349BgwaJdJSMMcYais5hkepD3yFcSI+eHkRUbX4SiaTG/Ty+TqVSITQ0FG+//TbkcnmV\nbZcuXSr8HRwc3OTmzGINKy4uTuv8a3WRnp6OOXPm4NixYwCAwMBArFmzRuOHGGNNXYM2Ug4ODkhP\nTxfep6enV6lgT26TkZEBR0dHKJXKKssdHBwAqM+ecnJyYGdnh+zsbKG3YXV5VaYBgNdffx1ubm6Y\nM2dOtfE+3kgxVltP/rDR9kC8vqZNm4YXXngBP/zwAwBg586dmDZtGv7zn//UK1/GniYNernPz88P\n169fR1paGsrKyrBnzx6MGTNGY5sxY8Zg27ZtAIATJ07A0tIStra2NaYdM2YMtm7dCgDYunUrxo0b\nJyzfvXs3ysrKkJqaiuvXr6NPnz4AgMWLF6OoqAhfffVVQx4yY6K5ffs2pk2bBqlUCqlUipdffhl/\n//23scNizLAapPvGYw4ePEjdunUjZ2dnWrFiBRERbdiwgTZs2CBsM2vWLHJ2diZvb286c+ZMjWmJ\niPLy8mjQoEHk6upKgwcPpoKCAmHd8uXLydnZmdzc3Cg2NpaIiNLT00kikZCnpyf17NmTevbsSZs3\nb9aI0wAfBWtm6lumBg4cSNu2bSOVSkVKpZK2b99Ozz33nEjR6YfrBRNbbcsUDzD7CD9Zz8RW3zKV\nlpaG2bNn48SJEwCAfv364euvv0bnzp3FClEnrhdMbDwKeh1xZWRiawplqikcA2tcRJ/0kDFmWCtX\nrsTChQsxe/bsKuskEgnWrl1rhKgYMw5upBhrZDw9PQEAvr6+Go9QkJbHMBhryhq0dx9jrPZGjx4N\nAGjbti3CwsKE18svv4w2bdronY+ucTP/97//oW/fvmjdujVWrVolWvyMiYnvST3C196Z2Opbpnr1\n6qUx4LK2ZdUpLy+Hm5sbfvv/7d1pTFRXGwfwP8u4tECxRkEYDWQYdhhwAbUxsaXY2EZiKXEhDaTa\npi7VWi0l1jSRNCLUmLR+aKiJCxqj2CYVW5EQ21g1BoyASzpNRTtY9rYiCEE7gM/7wTovqCwzc69c\nnP8vIYE79zxzLpyHZ+6de86cOoXAwEDMmjULhw8fRkREhG2fv//+Gzdv3sSxY8cwYcIEbNq0SfFj\nIHoU35MiGuVOnjyJkpISNDQ0YP369baE7ujogE6nG1aMvmtfArCtfdm3SE2aNAmTJk3CiRMnFD8G\nIqWwSBFpTEBAAGbMmIHi4mLMmDHDVqR8fHyGPRn9SWtiVlRUqNJfIjWxSBFpjMlkgslkQnp6OsaM\nGeNQDN5gQc8KFikijaqtrcWnn34Ks9mMu3fvAnhQfP74448h2w5n3czh4sLL5AxnF17mjRP/4RvE\npDRnx9RLL72EnJwcbNy4ET/88AP27duH3t5efP7550O27enpQVhYGH766ScEBAQgISHhsRsnHtq6\ndSu8vb154wQ9FVxxwkFMRlKas2Nq+vTpqKqqQkxMDK5evdpv23CcPHkSGzZsQG9vL1auXInNmzfj\nm2++AQC8//77aG5uxqxZs3Dnzh24u7vD29sbZrMZXl5eih0D0aNYpBzEZCSlOTum5s6di7NnzyIt\nLQ1JSUkICAjA5s2b8fvvvyvYy8ExL0hpLFIOYjKS0pwdUxcuXEBERATa2trw2Wef4c6dO/jkk08w\ne/ZsBXs5OOYFKY1FykFMRlKa0mNKRHD06FEsXbpUsZhDYV6Q0uwdU1wWiUhjOjs7sXPnTqxZswZf\nf/017t+/j++//x5RUVE4dOjQSHeP6KnimdR/+IqRlObomEpNTYWPjw/mzJmDsrIy1NXVYdy4cdi1\naxfi4uJU6OnAmBekNF7ucxCTkZTm6JiKjY3FlStXADxYg2/KlCm4efOmXYvLKoV5QUrT3OW+oVZi\nBoD169fDaDTCZDL1WzxzoLatra1ITk5GaGgoFixYgLa2Nttj27dvh9FoRHh4OMrKymzbt2zZgmnT\npsHb21uFoyRSjoeHR7/vAwMDR6RAEWmCXR82b6eenh4xGAxisVjEarWKyWQSs9ncb58TJ07IwoUL\nRUSkvLxcEhMTh2yblZUl+fn5IiKSl5cn2dnZIiLy66+/islkEqvVKhaLRQwGg9y/f19ERCoqKqSp\nqUm8vLye2FeVfxXkghwdU+7u7uLl5WX78vDwsH3v7e2tcC8Hx7wgpdk7plQ9k+q7ErNOp7OtxNzX\n8ePHkZmZCQBITExEW1sbmpubB23bt01mZiaOHTsGACguLsby5cuh0+kQFBSEkJAQ26KaCQkJ8Pf3\nV/NwiRTR29uLjo4O21dPT4/t+zt37ox094ieKlWL1JNWYm5oaBjWPo2NjQO2bWlpgZ+fHwDAz88P\nLS0tAIDGxsZ+65M96fmIiGj0UHWB2eGuxCzDeBNNBvjobDc3t0Gfx57VoLmQJjnD2YU0iehxqhap\n4azE/Og+9fX10Ov16O7ufmx7YGAggAdnT83NzfD390dTUxMmT548YKyHbYajb5EistejL2xycnJG\nrjNEzwhVL/fNnDkTNTU1qK2thdVqRVFREVJSUvrtk5KSggMHDgAAysvL4evrCz8/v0HbpqSkoLCw\nEABQWFiIxYsX27YfOXIEVqsVFosFNTU1SEhIUPMQiYhITarcvtFHSUmJhIaGisFgkNzcXBERKSgo\nkIKCAts+a9euFYPBILGxsVJZWTloWxGRW7duSVJSkhiNRklOTpbbt2/bHtu2bZsYDAYJCwuT0tJS\n2/asrCzR6/Xi4eEher1ecnJy+vXzKfwqyMU8C2PqWTgG0hZ7xxQn8/6HkxZJac/CmHoWjoG0RXOT\neYmIiBzFIkVERJrFIkVERJrFIkVERJrFIkVERJrFIkVERJrFIkVERJrFIkVERJrFIkVERJrFIkVE\nRJrFIkVERJrFIkVERJrFIkVERJrFIkVERJrFIkVERJrFIkVERJrFIkVERJrFIkVERJqlapEqLS1F\neHg4jEYj8vPzn7jP+vXrYTQaYTKZUF1dPWTb1tZWJCcnIzQ0FAsWLEBbW5vtse3bt8NoNCI8PBxl\nZWW27ZWVlYiJiYHRaMSHH36owpEO7PTp04w5CuKq1deR5Ez+qcnVx8VoialmXHuoVqR6e3vxwQcf\noLS0FGazGYcPH8Zvv/3Wb5+SkhJcv34dNTU12L17N1avXj1k27y8PCQnJ+PatWtISkpCXl4eAMBs\nNqOoqAhmsxmlpaVYs2YNRAQAsHr1auzZswc1NTWoqalBaWmpWof9mNEyIEdLTLXiaiEZleRM/qnN\n1cfFaImpZlx7qFakLly4gJCQEAQFBUGn02HZsmUoLi7ut8/x48eRmZkJAEhMTERbWxuam5sHbdu3\nTWZmJo4dOwYAKC4uxvLly6HT6RAUFISQkBBUVFSgqakJHR0dSEhIAABkZGTY2hA9qxzNv5aWlpHo\nLtGAVCtSDQ0NmDp1qu1nvV6PhoaGYe3T2Ng4YNuWlhb4+fkBAPz8/GxJ1djYCL1e/8RYfbcHBgY+\n1g+iZ42j+VdfX//U+kg0HJ5qBXZzcxvWfg8vyQ21z5Piubm5Dft5hmIwGBSL9aicnBzGHAVxlY5p\nMBgUjWcPR/Pv0XZq5YUrj4vRFFONuPbmhWpFKjAwEHV1dbaf6+rq+p3RPGmf+vp66PV6dHd3P7Y9\nMDAQwIOzp+bmZvj7+6OpqQmTJ08eNFZgYGC/V4d9Y/V1/fp1J4+YSDsczb9Hc4N5QSNNtct9M2fO\nRE1NDWpra2G1WlFUVISUlJR++6SkpODAgQMAgPLycvj6+sLPz2/QtikpKSgsLAQAFBYWYvHixbbt\nR44cgdVqhcViQU1NDRISEuDv7w8fHx9UVFRARHDw4EFbG6JnlTP5R6QpoqKSkhIJDQ0Vg8Egubm5\nIiJSUFAgBQUFtn3Wrl0rBoNBYmNjpbKyctC2IiK3bt2SpKQkMRqNkpycLLdv37Y9tm3bNjEYDBIW\nFialpaW27RcvXpTo6GgxGAyybt06NQ+ZSDOcyT8irXATGcabQkRERCOAK05geJMe7VFXV4eXX34Z\nUVFRiI6Oxq5duxTo5QO9vb2Ij4/HokWLFIvZ1taGtLQ0REREIDIyEuXl5U7H3L59O6KiohATE4P0\n9HT8+++/dsdYsWIF/Pz8EBMTY9s22GRuR2NmZWUhIiICJpMJqampaG9vV6SvD+3cuRPu7u5obW21\nO+5IcuW8UCMnANfKC8VyYqRP5UZaT0+PGAwGsVgsYrVaxWQyidlsdipmU1OTVFdXi4hIR0eHhIaG\nOh3zoZ07d0p6erosWrRIkXgiIhkZGbJnzx4REenu7pa2tjan4lksFgkODpZ79+6JiMiSJUtk//79\ndsc5c+aMVFVVSXR0tG1bVlaW5Ofni4hIXl6eZGdnOx2zrKxMent7RUQkOzvb7pgDxRUR+fPPP+W1\n116ToKAguXXrlt1xR4qr54XSOSHienmhVE64/JnUcCY92svf3x9xcXEAAC8vL0RERKCxsdHpvtbX\n16OkpATvvvvusG7dH4729nacPXsWK1asAAB4enrihRdecCqmj48PdDodurq60NPTg66urifeUTmU\nefPmYcKECf22DTSZ25mYycnJcHd/kAqJiYkOzRV6UlwA2LhxI7744gu74400V84LNXICcL28UCon\nXL5IDWfSozNqa2tRXV2NxMREp2N99NFH2LFjh23gKMFisWDSpEl45513MH36dLz33nvo6upyKuaL\nL76ITZs2Ydq0aQgICICvry9effVVRfo70GRupezduxevv/66IrGKi4uh1+sRGxurSLynyZXzQo2c\nAJgXgGM54fJFSq0JvADQ2dmJtLQ0fPXVV/Dy8nIq1o8//ojJkycjPj5esbMoAOjp6UFVVRXWrFmD\nqqoqPP/887b1EB1148YNfPnll6itrUVjYyM6Oztx6NAhhXr8f0pO5gaAbdu2YcyYMUhPT3c6VldX\nF3Jzc/tNhFTy76Y2V84LNXICYF44mhMuX6SGM+nREd3d3Xjrrbfw9ttvKzIv6/z58zh+/DiCg4Ox\nfPly/Pzzz8jIyHA6rl6vh16vx6xZswAAaWlpqKqqcirmxYsXMXfuXEycOBGenp5ITU3F+fPnne4r\n8P/J3AD6TeZ21v79+1FSUqLYP40bN26gtrYWJpMJwcHBqK+vx4wZM/DXX38pEl9trpwXauQEwLxw\nNCdcvkgNZ9KjvUQEK1euRGRkJDZs2KBIP3Nzc1FXVweLxYIjR47glVdesU3EdIa/vz+mTp2Ka9eu\nAQBOnTqFqKgop2KGh4ejvLwcd+/ehYjg1KlTiIyMdLqvwMCTuZ1RWlqKHTt2oLi4GOPGjXM6HgDE\nxMSgpaUFFosFFosFer0eVVVViv3zUJsr54UaOQEwLxzOCbtu13hGDTRx2FFnz54VNzc3MZlMEhcX\nJ3FxcXLy5EkFevrA6dOnFb2779KlSzJz5kyJjY2VN998U5E7mfLz8yUyMlKio6MlIyNDrFar3TGW\nLVsmU6ZMEZ1OJ3q9Xvbu3TvoZG5HYu7Zs0dCQkJk2rRptr/V6tWrHe7rmDFjbH3tKzg4eFTd3Sfi\n2nmhRk6IuFZeKJUTnMxLRESa5fKX+4iISLtYpIiISLNYpIiISLNYpIiISLNYpIiISLNYpIiISLNY\npFyUh4cH4uPjERsbi9TUVHR2dqr6fPv378e6detUfQ4iZzEvtIdFykU999xzqK6uxpUrV+Dj44Nv\nvvlmpLtENOKYF9rDIkWYM2cObty4AQC4dOkSZs+ebfugs4cfnjZ//nxUVlYCAP755x8EBwcDePBK\nMDU1FQsXLkRoaCiys7Ntcfft24ewsDAkJiYqtkYZ0dPCvNAGFikX19vbi7KyMkRHRwMAMjIysGPH\nDly+fBkxMTG2FYsHW1n58uXLOHr0KK5evYqioiI0NDSgqakJW7duxfnz53Hu3DmYzWZVV9YmUhLz\nQjtYpFzU3bt3ER8fjylTpqCurg6rVq1Ce3s72tvbMW/ePAAPPjztzJkzQ8ZKSkqCt7c3xo4di8jI\nSNTW1qKiogLz58/HxIkTodPpsHTp0lH1URXkmpgX2sMi5aLGjx+P6upq3Lx5E+PGjUNxcfFjr+j6\nJo+npyfu378PALh3716//caOHWv73sPDAz09PYPGItIq5oX2sEi5uPHjx2PXrl3YsmULvL29MWHC\nBJw7dw4AcPDgQcyfPx8AEBQUhIsXLwIAvvvuu0Fjurm5ITExEb/88gtaW1vR3d2Nb7/9VtXjIFIS\n80I7PEe6AzQy+r6ii4uLQ0hICI4ePYrCwkKsWrUKXV1dMBgM2LdvHwDg448/xpIlS7B792688cYb\ntvYDXZP39/fH1q1bMWfOHPj6+iI+Pp7X3knzmBfaw4/qICIizeLlPiIi0iwWKSIi0iwWKSIi0iwW\nKSIi0iwWKSIi0iwWKSIi0iwWKSIi0qz/AVIzHOmWDYCjAAAAAElFTkSuQmCC\n", "text": [ "" ] } ], "prompt_number": 11 }, { "cell_type": "code", "collapsed": false, "input": [ "%%cython\n", "import numpy as np\n", "\n", "cdef int UNMAPPED = -1\n", "\n", "def fennel(int[:,::] edges,\n", " int num_nodes,\n", " int num_partitions,\n", " int[::] partition,\n", " float alpha):\n", " \"\"\"\n", " This algorithm favors a cluster if it has many neighbors of a node, but\n", " penalizes the cluster if it is close to capacity.\n", " \n", " partition: A previous partition of the nodes. Set to -1's if a node has not been assigned.\n", " \"\"\"\n", " \n", " cdef int[::] partition_sizes = None\n", " # The output partition\n", " if partition is None:\n", " partition = np.repeat(np.int32(UNMAPPED), num_nodes)\n", " partition_sizes = np.zeros(num_partitions, dtype=np.int32)\n", " else:\n", " partition_sizes = np.bincount(partition).astype(np.int32)\n", " \n", " cdef int[::] partition_votes = np.zeros(num_partitions, dtype=np.int32)\n", " \n", " cdef float partition_capacity = num_nodes / num_partitions\n", " \n", " cdef int last_left = edges[0,0]\n", " cdef int i = 0\n", " cdef int left = 0\n", " cdef int right = 0\n", " cdef int arg = 0\n", " cdef int max_arg = 0\n", " cdef float max_val = 0\n", " cdef float val = 0\n", " cdef int len_edges = len(edges)\n", " cdef int previous_assignment = 0\n", "\n", " for i in range(len_edges):\n", " left = edges[i,0]\n", " right = edges[i,1]\n", " \n", " if last_left != left:\n", " # New left node, so we have to assign last left\n", "\n", " # Remember placement of last_left in the previous assignment\n", " previous_assignment = partition[last_left]\n", " \n", " max_arg = 0\n", " max_val = partition_votes[0] - alpha * partition_sizes[0]\n", " if previous_assignment == 0:\n", " # We remove the node from its current partition before\n", " # deciding to re-add it, so subtract alpha to give\n", " # result of 1 lower partition size.\n", " max_val += alpha\n", "\n", " for arg in range(1, num_partitions):\n", " val = partition_votes[arg] - alpha * partition_sizes[arg]\n", " if previous_assignment == arg:\n", " # See comment above\n", " val += alpha\n", " if val > max_val:\n", " max_arg = arg\n", " max_val = val\n", "\n", " if max_arg != previous_assignment:\n", " partition[last_left] = max_arg\n", " partition_sizes[max_arg] += 1\n", " if previous_assignment != UNMAPPED:\n", " partition_sizes[previous_assignment] -= 1\n", "\n", " partition_votes[:] = 0\n", " last_left = left\n", "\n", " if partition[right] != -1:\n", " partition_votes[partition[right]] += 1\n", " \n", " # TODO: finish off this fencepost....\n", " partition[left] = 0\n", " \n", " return np.asarray(partition)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 12 }, { "cell_type": "code", "collapsed": false, "input": [ "def run_fennel_restreaming(edges, num_nodes, num_partitions, num_iterations):\n", " print('{} PARTITIONS'.format(num_partitions))\n", " assignments = None\n", " # We will explore this parameter in a future post. This is sub-optimal\n", " alphas = np.linspace(1.251608191745264e-07, 7.588951557309824e-05, num_iterations)\n", " waste_scores, edge_score_values = [], []\n", " print('ROUND\\tALPHA\\tWASTE\\tSCORE')\n", " for i in range(num_iterations):\n", " alpha = alphas[i]\n", " assignments = fennel(edges, NUM_NODES, num_partitions, assignments, alpha)\n", " (waste, edge_score) = score(assignments, edges)\n", " print('{}\\t{:.1e}\\t{:0.3f}\\t{:0.3f}'.format(i, alpha, waste, edge_score))\n", " waste_scores.append(waste)\n", " edge_score_values.append(edge_score)\n", " draw_figures(waste_scores, edge_score_values, num_partitions)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 13 }, { "cell_type": "code", "collapsed": false, "input": [ "%time run_fennel_restreaming(edges, NUM_NODES, 4, 15)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "4 PARTITIONS\n", "ROUND\tALPHA\tWASTE\tSCORE\n", "0\t1.3e-07\t0.000\t0.326" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "1\t5.5e-06\t0.068\t0.221" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "2\t1.1e-05\t0.038\t0.200" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "3\t1.6e-05\t0.029\t0.190" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "4\t2.2e-05\t0.023\t0.184" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "5\t2.7e-05\t0.018\t0.180" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "6\t3.3e-05\t0.015\t0.177" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "7\t3.8e-05\t0.013\t0.173" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "8\t4.3e-05\t0.012\t0.172" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "9\t4.9e-05\t0.012\t0.171" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "10\t5.4e-05\t0.011\t0.170" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "11\t6.0e-05\t0.010\t0.169" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "12\t6.5e-05\t0.009\t0.168" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "13\t7.0e-05\t0.008\t0.167" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "14\t7.6e-05\t0.008\t0.167" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "CPU times: user 1min 14s, sys: 6.47 s, total: 1min 20s" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "Wall time: 1min 20s\n" ] }, { "metadata": {}, "output_type": "display_data", "png": "iVBORw0KGgoAAAANSUhEUgAAAakAAAEbCAYAAABgLnslAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3XdcVfX/wPHXZSiiLAlRQEVFBRSVYW6BvjnAINNylGam\nSZarpVl9nZX5y4bmt29qjnKgmaWWQOY3MBdQOSgxFRUFHDlAQFLgcn5/HDmx7wXuAj7Px+M+vOOM\n98Fz7/t8xvl8VJIkSQiCIAiCCTIzdgCCIAiCUBmRpARBEASTJZKUIAiCYLJEkhIEQRBMlkhSgiAI\ngskSSUoQBEEwWSJJGdiCBQsYP358jde3sbEhNTVVdwHVAZs3b2bIkCGVfn7gwAE8PT0NGJEg6J+m\n8/rSpUvY2NhQ3+8iqjdJasmSJYSGhpZ6r2PHjhW+99VXX9V4P+7u7vz00081Xl+lUlX6WVxcHGZm\nZtjY2GBjY4ObmxsLFiwotUxOTg7u7u413n913Lp1CycnJwYMGGCQ/QGkpqZiZmZGUVGR8t5TTz3F\nDz/8oLw2MzPj/PnzyusBAwbw559/GixGofoOHjxI3759sbe3x9HRkf79+/Prr78aO6wK5efn4+Xl\nRevWrQ26X03nddnfnjZt2pCTk1Plb0p9UG+SVGBgIIcPH1auKq5cuUJhYSHHjx9XfvCuXLnCuXPn\nGDhwYI33o1Kp9Hrl4urqSk5ODjk5ORw8eJC1a9eya9cuve2vKnPmzMHb29tgX4LCwkLluaa/cX2/\neqxPsrOzeeSRR5g5cyaZmZlkZGQwf/58GjdurNP9lLywqY3333+fFi1amNx5r+/fHlNVb5JUQEAA\nBQUFHD9+HJCLysHBwXTq1KnUex4eHrRs2ZL169fj7e2Nra0tHTp0YPXq1cq2bty4wSOPPIKDgwOO\njo4MHDgQSZIYP348ly5dIiwsDBsbG5YtWwZAfHw8ffv2xcHBgR49erB//35lWxcuXCAwMBBbW1sG\nDx7MjRs3tD4md3d3+vbtS3JysvJeyautZ555hhdffJFHHnkEW1tbevfuXepK7KWXXsLZ2Rk7Ozu6\ndevGyZMntd734cOHOXnyJBMnTqzyixEXF4ebmxtLlizBycmJdu3asWXLFuXzPXv24Ovri52dHW3a\ntGHhwoXKZ8WlpnXr1tG2bVv+9a9/ERgYCIC9vT22trbEx8ezYcMGpTRXfIHRvXt3bGxs2L59O3Fx\ncaWuek+dOkVQUBAODg507dqV7777TvlMn38zoWJnzpxBpVIxevRoVCoVVlZWDBo0CB8fH2WZNWvW\nKN/HLl26cOzYMUDz/+XUqVMJDQ2lWbNmxMXFcfnyZUaOHEmLFi1o3749n3zySbVivXDhAps3b2bu\n3LlVnvfF5+6aNWtwdXXFxcWFDz74QPk8MTGRPn364ODggIuLC9OnT6egoED53MzMjE8//ZROnTrR\nqVMn5byv7Lyu6LenbK3D5cuXCQ8Px9HRkY4dO/L5558r+1uwYAGjRo1iwoQJ2Nra0rVrV3777Tfl\n86VLl+Lm5oatrS2enp61qi3SOakeCQ4Olj766CNJkiTpxRdflNatWye9+eabpd6bNGmSJEmStGfP\nHun8+fOSJEnS/v37JWtra+nYsWOSJEnS66+/Lj3//PNSYWGhVFhYKB08eFDZh7u7u/S///1PeZ2e\nni45OjpK0dHRkiRJ0o8//ig5OjpKN27ckCRJknr37i298sorUn5+vvTzzz9LNjY20vjx4yuMPzY2\nVnJzc1NenzlzRnJ1dZViY2OV91QqlXTu3DlJkiRpwoQJkqOjo/TLL79IhYWF0lNPPSWNGTNGkiRJ\niomJkfz9/aXbt29LkiRJf/75p3TlyhVJkiRp8+bNUrdu3Sr9OxYWFkp+fn7S0aNHpfXr10v9+/ev\ndNnY2FjJwsJCOcb9+/dLTZs2lU6fPi1JkiTFxcVJf/zxhyRJkpSUlCQ5OztLO3fulCRJki5cuCCp\nVCppwoQJUl5ennT37l0pNTVVUqlUklqtVvZRNoaSf4Oyf7f8/HypQ4cO0pIlS6SCggLpp59+kmxs\nbJR4avo3E2ouOztbcnR0lCZMmCBFR0dLt27dKvX5V199Jbm6ukq//vqrJEmSlJKSIl28eFGr/0s7\nOzvp8OHDkiRJUl5enuTn5yctXrxYKigokM6fPy+1b99e+uGHHyRJkqQDBw5I9vb2VcY6bNgwaefO\nneW+i2UVn7tPPvmklJeXJ/3++++Sk5OTtG/fPkmSJOm3336TEhISJLVaLaWmpkpeXl7Sxx9/rKyv\nUqmkwYMHS5mZmdLdu3eV9yo7ryWp/G9PcQzF35UBAwZIL774onTv3j3p+PHjkpOTk/TTTz9JkiRJ\n8+fPl6ysrKTo6GipqKhImjt3rtS7d29JkuTzvHXr1sq5fvHixVJxGFu9KUmBXOX3888/A3Id+MCB\n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\n", "text": [ "" ] } ], "prompt_number": 14 }, { "cell_type": "code", "collapsed": false, "input": [ "%time run_fennel_restreaming(edges, NUM_NODES, 20, 15)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "20 PARTITIONS\n", "ROUND\tALPHA\tWASTE\tSCORE\n", "0\t1.3e-07\t0.669\t0.437" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "1\t5.5e-06\t0.754\t0.313" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "2\t1.1e-05\t0.660\t0.288" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "3\t1.6e-05\t0.510\t0.277" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "4\t2.2e-05\t0.503\t0.269" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "5\t2.7e-05\t0.479\t0.266" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "6\t3.3e-05\t0.455\t0.263" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "7\t3.8e-05\t0.395\t0.261" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "8\t4.3e-05\t0.399\t0.259" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "9\t4.9e-05\t0.376\t0.258" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "10\t5.4e-05\t0.336\t0.257" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "11\t6.0e-05\t0.306\t0.257" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "12\t6.5e-05\t0.282\t0.258" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "13\t7.0e-05\t0.273\t0.257" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "14\t7.6e-05\t0.270\t0.257" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "CPU times: user 1min 18s, sys: 6.6 s, total: 1min 25s" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "Wall time: 1min 25s\n" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\n", "text": [ "" ] } ], "prompt_number": 15 }, { "cell_type": "code", "collapsed": false, "input": [], "language": "python", "metadata": {}, "outputs": [] } ], "metadata": {} } ] }