{ "metadata": { "name": "" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "Measurements on Networks\n", "===========================\n", "\n", "Just as knowing the parameters of a distribution gives us insight to the topology of it, there are illuminating quantities or measures to a network. Let us explore some of these measures." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Degree Centrality\n", "\n", "Centrality is a measure of importance, but how we define importance affects how we calculate centrality. For example, a vertex with high degree may be an important vertex. In social networks it is sometimes called degree centrality. \n", "\n", "\n" ] }, { "cell_type": "code", "collapsed": false, "input": [ "%matplotlib inline\n", "\n", "import networkx as nx\n", "import matplotlib.pyplot as plt\n", "import numpy as np\n", "\n", "### From the Zachary Karate Club Data Set ###\n", "\n", "G_kar = nx.karate_club_graph()" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 1 }, { "cell_type": "code", "collapsed": false, "input": [ "### Find and plot the degree centrality distribution ###\n", "\n", "d = (G_kar.degree()) # Store degrees of nodes in dictionary\n", "\n", "numedges = G_kar.number_of_edges()\n", "\n", "numnodes = G_kar.number_of_nodes()\n", "\n", "print (\"The number of nodes and edges are: {} and {}.\".format(numnodes, numedges))" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "The number of nodes and edges are: 34 and 78.\n" ] } ], "prompt_number": 2 }, { "cell_type": "code", "collapsed": false, "input": [ "plt.bar(range(len(d)), d.values(), align = 'center')\n", "\n", "plt.title('Degree Centrality Distribution')\n", "\n", "plt.xticks(range(len(d)), d.keys(), rotation='vertical')\n", "\n", "plt.show()" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "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\nWAAAAABJRU5ErkJggg==\n", "text": [ "" ] } ], "prompt_number": 3 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now let's plot the graph and indicate where our two highest degree centrality members are on the graph. Node 0 and 33 are actually the instructor and club president of the karate club." ] }, { "cell_type": "code", "collapsed": false, "input": [ "labels = {}\n", "\n", "labels[0]= \"Sensei\"\n", "\n", "labels[33]= \"President\"" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 4 }, { "cell_type": "code", "collapsed": false, "input": [ "pos = nx.spring_layout(G_kar)\n", "\n", "nx.draw(G_kar, pos = pos, alpha = 0.15, node_color='b')\n", "\n", "nx.draw_networkx_labels(G_kar, pos, labels, font_color = 'black', font_size = 14)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 5, "text": [ "{0: ,\n", " 33: }" ] }, { "metadata": {}, "output_type": "display_data", "png": "iVBORw0KGgoAAAANSUhEUgAAAd8AAAFBCAYAAAA2bKVrAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzsvWuMK/1d5/mtm8vlKtvlu9uX7j635/6E52ESYJOwWR7I\nzDJMgIWBRYIdCCKLGCHxIuKyUjRBkTKLEGEVIV5MkCCC2YWRhhcMu5BRRAQDM9khs0pCzvM8535O\nt9v3W1W5XHbd94VP1dN92u62+3b68v9I1uljl8vlsl3f/+9O+b7vg0AgEAgEwplBP+8DIBAIBALh\nqkHEl0AgEAiEM4aIL4FAIBAIZwwRXwKBQCAQzhgivgQCgUAgnDFEfAkEAoFAOGOI+BIIBAKBcMYQ\n8SUQCAQC4Ywh4ksgEAgEwhlDxJdAIBAIhDOGiC+BQCAQCGcMEV8CgUAgEM4YIr4EAoFAIJwxRHwJ\nBAKBQDhjiPgSCAQCgXDGEPElEAgEAuGMIeJLIBAIBMIZQ8SXQCAQCIQzhogvgUAgEAhnDBFfAoFA\nIBDOGCK+BAKBQCCcMUR8CQQCgUA4Y4j4EggEAoFwxhDxJRAIBALhjCHiSyAQCATCGUPEl0AgEAiE\nM4aIL4FAIBAIZwwRXwKBQCAQzhgivgQCgUAgnDFEfAkEAoFAOGOI+BIIBAKBcMYQ8SUQCAQC4Ywh\n4ksgEAgEwhlDxJdAIBAIhDOGiC+BQCAQCGcMEV8CgUAgEM4YIr4EAoFAIJwxRHwJBAKBQDhjiPgS\nCAQCgXDGEPElEAgEAuGMIeJLIBAIBMIZQ8SXQCAQCIQzhn3eB0AgnCW+78O2bfi+D5qmwbIsKIp6\n3odFIBCuGER8CVcC0zTR7ytoNnV4HoOZ08cDw7goFiVkMjJ4nn/eh0kgEK4IlO/7/vM+CALhtHBd\nF0+eNNHr2WAYGaKYAMMwex7XdRW+ryKb5bCxsbbn8avOZDJBv69C00w4jgeGoSAIHHK5BCRJIl4D\nAuGIEPElXFocx8HduzUYRgLJZObQ7VW1D1Ec4YUXKmDZq+0UGo1GqNcHUFUfLCuD5wXQNAPP82Db\nFixLQTRqoVxOIpNJExEmEFaEiC/hUuJ5Hu7fr0HXk4jH5aWfNxoNIUkabt2qgqYvRj6i67owTROe\n54GiKLAseywXeq/Xx4MHIwhCHoIQW7idZVnQ9R7yeQ+bm6ULc74IhPPA1V7eEy4tqqpCUXikUssL\nLwDE4ykMh1OoqopUKnVKR3cyTCYT9HoKWi0Dvs+DohgAPnzfgiQBpZKMRCKxkigOBkPcv69DlquH\nut8jkQjS6RK63TZouonNzfIx39EM3/cxHo9hWRZc1wPD0IhEIhBFkVjYhEsDsXwJl5JvfesxKKqE\nSGR1C9A0p6DpFl59dfPkD+wE8DwPT5400O06YNlZHPtZgZ1OJ5hMFEQiBl54oQhRFA/dr2ma+OY3\n65Ck9ZXd7oNBHS++GDvWgsVxHAyHChoNDabJP11Q0PB9D8A0dHPLcvLKhwUIFx/yDSZcOsbjMQyD\nQSp1NNcrz0cxHNIwDAOx2GK36/MgcKeragypVGXhdtGogGhUgGlO8fbbDbz8cg7xePzAfQ8GKihK\nPpKwiWIG9XrzyOI7Ho9x924LjpOAKFYhCNy+bSzLwqNHKlh2Cy+9tHbuPhsCYRVIkIZw6dB1AzR9\nsNAcBsPEMRqNT+iITo4nTxpQ1RhkObfU9jwfRSxWwZ07XUwmk4XbeZ6HRmMESUoe6bh4PorxmMF4\nvPo503Udb7/dBseVIcs5cNx+4QVmbu7Z42Xcvt060msRCOcFYvkSLh2W5YJhogduMxwOoKoaGIYJ\nk5SCphs0TcMwxhgMJhCEmfUcxBopigpv8+5f5e9VGY/H6HY9pFLLCW9AJBKBZeXQaPRx48Z8a1nX\ndbhu7FhlViybxGAwWsrFHWBZFu7caSMWqywdIuD5KIAS7typ433vW18o1gTCeYaIL+GScnAqA00z\noGkatm3D8zy4rhv+67ouxuMRdH2E8VgFRVFgmNn2NE2DoijQNB0Kd3D/7rir7/sI0ikO+nueOC8S\n9lqtDVVNwjRbex7fvc2851HU7LUePuwgFmPA8/y+bYbDIXQdYFl97v5c1wVFUeB5fqFbmuMimE5H\nh380u+j1hvD91MqxeZ6PYjqVMRgoKBRWW4w8i+u6YcczkrFNOCuI+BIuHZEIA9d1DtwmmUwimVzs\nYlWUPtbXHaTTqVCQd4vzvP/btg0AoVCzLBv+zTDMnltw3yLR3i3QAGDbNra2dFQq63vun7ftovtp\nWoaiaMjlMuH9s7pdG4PBAIpCwzRdOI4D15396zgOPM8DTdNwXReSJEEURXAct+9GURRWyd/0PA/N\npg5J2lz6ObsRxSTq9S3k89mVPQmmaWIwUNFsanAcCgAN33chigzK5VmWOGm2QjhNiPgSLh2JhATP\n6wBIH3kfvj+CLBcRiURWfJ6/UJxd131aPrNfwAPr+llxDm7j8Riex++xtA8Th90i6rouIpEo+v0h\n4nExFFYAYFkWkUgEgsAgnU6BYWaLhmDxEFi6tm2j2WyiUCiEPbJt28Z0OoVlWRiPdciyhnh8tr/d\nt3niqGkaXFc8ssixLAvHiUHTtAMXUs+ek62tFvp9GzSdhChe2/P6pjnF/fsqaPoJqtXEsa1qAmER\nRHwJlw5BEJBIzMptolFh5edPJgaSSQrR6MFx43kE8eNVM4bnub6D/9u2jfF4DF23AAzC+wOLNBDi\nyWSCwWAAjuPgOM4u8WTAMCx83wNNj+F5Xlg3G7jReZ5Hs9kFw7Dh8QTiuvu98TyPnZ0drK2tgWXZ\nMN5KURQUBahUhKcxZius1XUcBxzHIRKJgOf58F9dn4BhjpexTNMCJhMTy2ivZVm4e7cO05Qhy/Oz\nsnk+Cp6PwvNyePy4icmkjo2NEqkvJpw4RHwJl5K1tSTu3BkgGl298YNhDLC5uVpzjuNyWLwxEolA\nUaaQ5cKe+3eLtq7r0HUdhUJhX9KT7/uwLBOAGZYc7XZxcxwHUXSh6xp4Xggf371dgGma2N7ehizL\nex7XtC2UyyXouh5uH1jugRjbtg3LsmDbNnZ2WtC0FBKJVCjkHMftEXXDMCDLs6EXwW33eZrF7b1D\nz6/rurh3rw7HySCRSBy6PU3TSKfLaLeb4Lg2yuXioc8hEFaBiC/hUpJMJpHNjtDvd1fKDlaULgoF\nLHWBPktmlrS97/7dos3zPERRRLfbhSiKkCRpz7aGQUOS0gtrcTmOw507Y6RSB/fBzuVyqNfrSCaT\nEISZUOu6iuvXb2B9fW3p91Svt1Gvc+B5IRTk4N/Acp9MJmBZFrZtYzQawfM8MAwTCrFlTcEwh1ul\n3W4f47GEVGq1z1WWi6jVtpBOT8L3SiCcBER8CZcSiqJw/XoZnrcDRWkjkcgdaFl6ngdN60KWTWxu\nVs6dmzEWiyESacG27QNLa6LRKAqFAtrtNjzP27OIsCwNudzi+udEIoFEYghdVw+s96VpGrlcDt1u\nF6VSCa7rwPP6yOdLK70nnmcBuBAEYZ+weZ4Hy7Keln0Z4DgOlmUBmMVtbduGpmlQ1S4AD7Y9hSAI\niEajiEaje2L1QQ1zPL6x0vEBs+9RJJJCt6tgfZ2IL+HkIO0lCZca3/dRr7fRbI7h+3HEYvKeC7Nl\nWTAMBRQ1QqkkoVTKnzvhDeh0enjyBJDl7KHbOo6DVqsFURSRSqXgOA6m0y288ca1Axchtm3j3Xdr\ncJzMoQ03hsMBRqMREgl3qQ5a817r61/fRjJ5feE5t20brVYL1WoVAMJEL8uyYJomFOUBbt3KwDTN\nPbFwiqIQj8eRSCRg2zaePHGRy62vdHwBnudhNHqMN9/cIG0tCScGEV/ClcBxHCiKikZDxXTqAaAA\n+BAEBqXSrF/weS8tCcRKkpYTAdd10W63n8ZJHWxsUCgW80u9zoMHdWgai0hEhihK+7YxzSkMQ0G/\nfx9vvHEDpdJqVm/AkycNDAYSJGmxO7heryOTyexLgNN1FdmsEbq6LcsKb9PpFKPRCKPRCE+eNDAa\npRCPJxGLxSBJEiRJgiAIS3/mitLCSy/Fzl04gnBxIeJLuHIE9a1Bpu9FYjhUcPeuimSyspRweJ6H\nR4/uIR4f4YMf/Palxcb3fei6jlZLwXDogKIE+D4NivLg+xZiMRflsgxBEFCv11GtVlcuywJmCVXf\n+lYbicT6wmMbDofwfR/p9HulY67rYjTaxuuvFw+Nxd6+/QiGkXr6nsZPM8d12LYdZn1XKpV9MfLd\nKEoPt24x537SFeHiQMSXQLhg9Hp9PHw4giAUDiylmglUH4mEAVGcdeMqlVafuxu4eAN3LsdxewRP\n0zQMh0Osr68faTHT6/Vx//4YslyeK8CWZaHdboeuZ9d1oap13LolIZM5vJb7zp1t2Hb+aVvK93Bd\nF5PJBMPhELZt4/r16wv3QcSXcNKQAAaBcMHIZjPg+QhqtTaGQwocJyMandXszmKiFqZTFTQ9RqUi\noVhcB03T6HQ62NnZQbk8X+QWETTKWEQikcB4PEav10Mut3pTimw2A8/z8ehRDTyf3efmDpp0zDKh\nLVhWDzdvxpcSXgDgOAbTqbvvfoZhIEkSGIaBpmmH7MUBTZMe0oSTg1i+BMIFxjAM9HoqFGUKx3Gf\nDp5nUCwmkEwm91m5/X4fo9EI5XL5RAcSeJ6Hra0tFAqFI4/603UdzebwqZs7AY6LgqZpeJ6HbrcJ\n39dw/Xoea2uplYY3KIqCe/emkOX5tbq6rmMymSxcOPi+D1V9hG//dpJwRTg5iPgSCFcMRVEwGAxQ\nqVSOFKddxGQyQbPZxMbGxrGS1yzLwnCoQtctuK4HhqHBsh4sa4pbt26tvD/P8/D1rz9GLLY597g0\nTYPjOHtiyrvRdQ2ZjI6NjaMllREI8yDLOALhiiHLMhiGCdtEnlTziFlbzwTa7faRs5+BmZu5UMih\nsLeZFx49enRonfM8aJrG2pqEel1BMrm/gYjrugvj4DM3/vBI7nQC4SDI/CwC4QoSj8dRLBbRaDRO\ndCh9JpOB4zhQVfXE9hkgSRJ0XT/Sc/P5DHhexXi8//lB16x5KEoba2vckV3pq2DbNiaTCQzDgGma\nK02IIlw8iNuZQLjCTKdTNBoNZLPZE6thtW0b29vbRy4/WoRhGOj3+2HW86qYpok7d+pw3b0NRDqd\nTlj/G+B5HlS1jVzOxbVr5VMrSfN9H6PRCO22iuHQBkVxACj4vguOc1AqJZBOyycanyecD4j4EghX\nnNmQgx3IsnxipTSqqkJRlCOXH83D9308evQIGxtHT3yybRuPHzcxHHpgWRmimECn0wn7VM86nqkA\nNFQqEtbWTq/jmWEYuH+/hemUB8/LiMX2JpE5joPxWIXvqyiVYiiXCxeuLp2wGCK+BAIBjuOgXq9D\nFEVks4e3r1yGZrMJlmVPNF7aarUgCMLS83sXMZlM0O+raDZ11OttZLM5RCIseB4ol2cdz04zs1nX\ndbzzTgfR6NqhYy9934eitE7dCiecLUR8CQQCgJmrtV6vg+M4FIvHH6F3EuVHz6LrOlRVRbm8+qjI\nefi+j3v37oUu8rMoJZpOp7h9u4FotIxIhF/6ecNhE6USUK0uPzmKcH4hCVcEAgHALCu4Uqk8nQLU\nOHbCD03TKBQKaLVacN39TS6OgiiKmEwm8LzDZ/guA0VRoGkagiCcWQ1vvd4DTedWEl5gNt6w2TQx\nnU5P6cgIZwkRXwKBELK7BeXOzs6xRS4Wi4XlRyd1fLFY7MQytIOWmWflyrUsC/2+NXdYxWHMFgpJ\n9HrKKRwZ4awh4ksgEPZRLBYRjUZRq9XgOM6x9nXS5UfHKTl6Ftd1z3Sa1WCggKKSRxZ7SUqi1Rqf\nmCeB8Pwg4ksgEOaSy+WQSCRQq9Vg2/aR90NRFIrFInq9HizLOvZxSZIEwzBOpA72oBrf02AwmEAQ\nVrd6A2btNqPE9XwJIOJLIBAWkkqlkMlkUKvVjnXBj0QiyGazaLVaJxJL5nkehmEcaz/A2Vu+tu2C\nphe/nm3bS7j6GWL5XgKI+BIIhANJJBIoFAqo1+vHErxkcla+0+/3j31MkiRhNBodez9nLb4HuZtd\n10Wr1cJkMjlkHwfvh3AxIOJLIBAORRRFlEoltFqtY8VbC4UCRqPRsa1WSZJOJOnqrMU3EmHgOPtd\n+L7vo9PpQJKkQyc2+b59psdMOB2I+BIIhKUQBAGVSgXdbheKcrSMW4ZhUCgU0G63j+U6ZVkWHMcd\nW8TPWnxzOQnT6f7Zwd1uFwzDHNphzLZt8Lx9YsMwCM8PIr4EAmFpIpEIKpUKFEU5svs4FoshHo8f\nu/zoJLKez1p8ZTkJitL3xHWHwyFc112qE9h4rKBUShC38yWAiC+BQFgJjuNQrVYxHo/R6XSOtI+T\nKD86CdfzWYsvwzBYWxMxGg0BzDp26bqOfP7wHtKzki8Nsny81pqE8wERXwKBsDIMw6BSqcCyLDSb\nzZUzmE+i/CgSiYCiqGNlYZ+1+AJAsZhFNKphMOhiOByiUCgcegyzKUt13LyZJhOOLglEfAkEwpGg\naTrssVyv11fuhnUS5UfHdT0/D/FlWRbXr+cxGLwLnmcOFVPLMjEcbuPGDRHp9MlMnSI8f4j4EgiE\nI0NRFNbW1hCJRLCzs7NyEtVxy49OQnxp+mwvg67rotvt4ru+6zWUyz5U9REUpbenkYnnedD1EYbD\nGly3jldeSSGfP5lpU4Tzwdl0EicQCJeafD6Pfr+PWq2GSqWy0pCCQqGA7e1txGKxlacfRaNR+L4P\ny7IQiURWPewzt3x930ez2YQkSUin00ingUrFxnCootmswTBc+D7AMBRkOYpCIQVJOnpHLML5hYwU\nJBAIJ4aiKBgOhyiXyyuJoWEYaLfb2NjYWNkSDcp00un0Ss/zPA+PHj3CzZs3V3recQhc7Gtri8cC\n+r5PspmvAMTtTCAQTgxZlpHNZrGzs3Nop6bdBOVHrVZr5dc8quv57IcqDGBZ1qGzkonwXg2I+BLO\nBOJguTrE43EUi0U0Go2VSoGOWn4kCAJs2155+tJZiu9oNIKqqiiXy0RcCQBIzJdwiui6jnZbgaJM\n4Tg+KArgeQbFYhzptExKJi4xsVgM5XIZjUYD2WwWiUTi0OcE5Ue1Wg2xWGyl70dg/cqyvPRzzmqi\n0XQ6RbfbRaVSIW0hCSEk5ks4cVRVxZMnfZhmBCybhChK4Wrftm2MxyoADbkcj2q1sFJyDuFiYVkW\n6vU6ZFk+tHVigKqqUFUV1Wp1aStxPB5jOByiUqksfWyj0Qjj8fhQN/BxsG0btVoNxWJx5WQywuWG\nuJ0JJ0qn08O77w7BMGXIcgWSFN9zAeU4DrKcRTJ5Df1+DO+8s30iM14J55NIJIJqtQpN09Dr9ZZ6\nzlHKj2KxGEzTXKnU6bTdzp7noV6vI5PJEOEl7IOIL+HEGAyGePhwDFleRyTCH7gtRVFIJFJw3Rzu\n3q2vHK8jXBxYlkW1WsVkMlm6n3OhUICmaUsPTqAoCrFYbKUY82mKr+/7aDQaEEURySRpB0nYDxFf\nwongOA4ePBggmSyvVCoiinFMpwk0m91TPDrC84amaVQqFTiOg0ajcWgCHsMwKBaLaLfbS3fOWjXr\n+TTFt9PpgKbppYYlEK4mRHwJJ8JwqABIHCl+G4+n0GoZxxoxRzj/UBSFcnm2ONvZ2TlUVGOxGCRJ\nWtpaFkURhmEsnVl/WuI7HA5hmuaBtbwEAhFfwrGZudg0iOLymaa7oWkavi9BUY4+4YZwcSgWi4hG\no6jVaoeGG7LZLCzLgqbtn4H7LDRNQxCEpV3PpyG+uq5DURSUSiVSUkQ4ECK+hGMzmUxgmtyxSocE\nIYlOZ3SCR0U4z+RyOSQSCdRqtT09jZ8l6B3d7XYP3C5gFdfzSYvvdDpFu91GqVQiGfyEQyHiSzg2\nruuCog4WXsdxDnQzMgwLyyJu56tEKpVCJpNBrVaDaZoLtwumHy0zujCY8buM6/kkhyoEsexisQie\nPzjZkEAAiPgSThnLstBqtfD222/j3r17C60X4qK7miQSCeTzedTr9QMzm5ctP2IYBpFIZKnWlidl\n+QYlRel0GqIoHnt/hKsBEV/CsZnFbPdarY7joNvtot1uQxRF3Lx5ExzHodVqzR1+7rouWJZ8Ha8i\nkiRhbW0NrVbrQJdxUH50mLAu43r2PA8URZ3Ioq/ZbEIQhJW6a513XNeFaZpPQ0omaQ97CpDABOHY\nCIIAmm49dT9TUFUVo9EI8Xg8zG71fR8syyKTyaDb7UKWZcTj8XAfk8kI1SppRHBVEQQB5XIZ9Xod\nruvOrY0Nyo9ardaB048kSUKtVkM+n1/4eidl9XY6HQA48LUuEuPxGJ2Ogm53Cori4PsUKMoDwzgo\nlWZtYY8yupGwHyK+hGND0zRKJQn37tXhuhQEQdiXdEJRFKLRKDzPC+s3bdsOx8D5vop0evnWgITL\nB8/zqFarqNdnTVcymcy+bXaXHy0q5eE4DgzDYDqdIhqNzt3mJMRXURRMJhNUq9Vj7ec8YJomHjxo\nQNdZcJyMZHJvtrbjOKjVVGxv76BYFFCtFkmo6JgQPx/h2IzHY4xGCjStgXw+j2w2OzfbM6jD5DgO\npVIJlmWh3W5jNFKRTkfIipoAjuNQrVafWmCdudssU350mOv5uOI7Ho8xGAxCz85FZjKZ4PbtHdh2\nDqlUdV9LWGDWpSyZzCCZvIZWi8b9+7Wlm58Q5nOxvzWE54ppmtjZ2Qkntnz7t2/CMAYLtxcEAdPp\nFL7vg6ZpFItFuK6DRuNbKBYvT7yMcDwYhkGlUoFlWXMznJcpPzpMfI8z0cg0TbRarUtRUmTbNu7e\nbYJl1xCLSYduT1EUZLkARYlie7t5Bkd4eSHiS1gZx3HQbrdRr9cRj8exubkJURRRLheQy7kYDueX\nhDybiTqdThCLmXjzzU10Op25iViEqwlN0yiXywCARqOxz8qKRCLIZDILy494nofv+wuHdhzV8g1K\nigqFwkKX9kWi3e7DcVIQhNXyLWQ5j3bbXamXNmEvZKTgFcGyLAyHKlR1CsfxQNMUolEW2WwCoigu\nFb/xfR+DwQCKoiCZTCKdTu9zufm+j2azg52dMYAEJEneYx1omgZVHUKSWESjJm7dKoYN8VutFvL5\n/J5ELAKh3W7DNE2Uy+V9gtloNMI64GfpdrugaXpu7Ljf74OiqDDnYBk8z0OtVkMikVh6POJ5xnVd\nfP3rTyBJ147kOtd1DanUCNeulU/h6C4/RHwvOZPJBI1GH/2+BYpKgudjoGkGwMwqsG0V0aiFcjmJ\nTCa9UISDkXCxWGxhTHc3tm1jMFDQaGiwbRYUFbymgem0hw984HXE43tjS8Hs10DYCYSAfr+P0WiE\nSqWy57vnui62trawtrYGQRD2PGcymaDT6WBjY2Pf/jqdDnieX2niUKPRAMMwKBQKR38j54h+f4CH\nD23I8tHej+/7UNVHePPN9WN1t7uqXOyABeFAVFXF3bt9sGwOyaS0T1hnY//isCwLDx70oGl1bG6W\n9qyCDcNAt9sFwzAolUpLu9o4jkOhkEM+P0uOCeoqGYZBoxEFx3FzjieC9fV1NBoNWJaFQqFAMioJ\nAIBMJgOGYVCr1VAul8PkvIPKjwRBgOu6sG17nzis6nbudrvwPA+lUulk3tA5YDg0wPNHX+TOfpsS\nDMMgYxOPAIn5XlJGoxHu3BlAFOdnL+4mEokgnS6h14vgyZNGGCur1+vodDrIZDKoVCpHinFRFAWe\n5yEIAqLRmegelAwTJNv4vo+dnR0y6YgQIssystksdnZ29uQHHDT9SBTFud+1VcRXURQYhnGphBcA\nHGd+0pnneZhOp+F0poNhSNbzESHiewlxHAf37nUgiuWV3EGynEez6ePdd+9gZ2cHoihiY2MDknR4\nFuQqBP13FxFks8ZiMWxvby9MmiFcPeLxOIrFIur1+p7v0KLyo0ULvWXFNygpKpVKF76kaB62bcMw\nDCiKgk6ng1qthlqthuFwiF6vB1U9eNIYiVoeHeJ2voQoigrXja9UNzuL36gYjSzYtoHv/u4XTm3Q\n+O5M1IOOMZPJIBKJYGdnB4VCgfTNJQCYWbrlchmNRgPZbBaJRCJcsNVqNQiCEC46Y7EYWq3WPrFd\nRnyDOvRSqXQpYpq2bcM0TUyn06flUjsYjcaQ5TQiEQ6xWAypVAocx2E6ncJxnLmJbLuhKAcMQwZJ\nHAUivpeQel1FLLZ8tyhd1zEcDp92GFqHrvMwDONUs44Di+SwxKp4PA6O49BoNJBOpy9V/1zC0YlG\no6hUKmE7ylQqtaf8aH19HcDMixKLxaDr+p645GETjVzXRb1eRy6Xu5AlRZZlhSIb3GiaBs/z4Hke\nsizj9dejePDARCq1N+HK9330+/251Qy78TwPNG1AFC9Ha82zhojvJcMwDJgmB1k+3OqdTCYYDoeg\nKAr5fD4chRaJyOh21VMX3263u1RWczQaxfr6Our1OizLujR9dAnHIxKJoFqthrkB2WwWsixjPB6j\n1+uFVpskSdA0LRTfw4Yq+L4fZt2f97I33/f3COx0OoVlWWBZFjzPIxqNQhRF8Dy/z9KPxWKIRB7B\ncZx95YAsyx7qadJ1FcWieGoesssOEd9Lxqzjz8HCO6v5HcK2baRSqX0/Mo6LYDp1TvEoZ5motm3v\n++EvgmVZVKtVNJtN1Ot1rK2tXcoYHGE1WJYNF2btdhuFQgHFYhFbW1sQRRGCIEAURbTb7aeWGn2o\ny7nZbD5NQjxf5W6e5+0RWdM0w0zuaDQKnucRj8fB8/xSvw2KolAqJbC1NYAszxa0juNAVdWFfbN3\nH4vrKshmD96OsBgivpeMWQLEweU59Xodo9EIhUIBvu/vuxhRFAXPO/1EisD1vKwrOeh61O12sb29\njXJ5tYQywuWEpmlUKhU0Gg00Gg2sra3tKz+iaRr37z+G73MYjydQlAEoikcul9yz+Oz1evA871Dx\nOW2CkX67XceO44Ru4yA+G4lEjlWOl82mMRjUMBopiMdl9Pt9JBKJA39Xvu9jOGzg2jXxQrrkzwuk\nycYlQ9MmQfaDAAAgAElEQVQ03L1rIJksLtxma2sLpVIJpmnCMAxMp1NwHAdBEBCLxeD7Hjiug5de\nWj/VYx2PxxgOh6hUVp9mpKoq+v3+3OYKhKuJ7/tot9twHAelUgn9fh+qqsJ1I6jXNZhmBJXKOqZT\nE5qmIpWSYdsqYjEH5bIMhqExHA6xvr5+pl6VIBFqt9j6vh+6jQPBPa3BI7Zt4969HfT7LGwbqFQq\nCwXdcRxoWhOVCodKZfE1hnA4xPK9ZESjUfh+f+HjwcxdjuPCmlvf9zGdTsOOQJo2xPXrFMbjMWKx\n2Kk1uggyUQN34Cokk0lwHIdmsxlmvBKuNhRFoVgsotvtolargeejuH27i1zuBtbWZrOCIxEetu0g\nGhUgSQkACViWiW9+cxss28N3fuc/OlXhtSxrn0W7OxEqmUwiGo2e6cAGjuPw4otVfPWr/w0cJ0FV\no4jFknvEfjIxMJ0qiEQmuHUrhUxm5pIP3ksQR+c47lSvGZcJYvleQh482MFoJEMU99fnmqaJfr9/\nYMOATucubt5MwnEcTKdTxGIxiKIIURRP/KLQbDYhiuKRxdOyLDQaDUiSdGhZBOHq8ODBQ3zzm21s\nbr6O4XCItbW10KVq2zZc1w1jupZlodVqgeNcXL8eRbW6usv5r//6r/HWW2+h1+shnU7vS4QKbrsT\noQLBPQ8JS71eL5yhrCgqGg0NpukCoEBRPpJJHsWiHCagjUYjtFoKhkMXFBWD79OgKB+ABZ63UCol\nkErJF37q02lCxPcSMhqN8M47KlKp/e5cXddhGMbCjOHxWIckDXHr1mxAuOd5GI/H4Y3jOIiiCEmS\nwuzo46BpGnRdP1b3INd10Ww2QdM01tbWyKr7ktHtdvHpT38af/mXf4lmswlZlvHaa6/h137t1/B9\n3/d9+7Y3TRPf/GYdvp+CrusQBAGWZUGSJFiWBYahQVE0ZFmG67poNBph4uFgsINXXkms1C7R8zzo\nuo52u414PD43ESq4ncckQcuyUKvVsLm5uW8h8KxXyrZtPHhQh6Zx4HkZsdj+jGjbtjEeK6BpDS+8\nkCNeqQWQZcklRJIkyPIgTKLYjeM44Lj5H7vjOLDtLkql94SZpmnE4/FwxTuZTDAej9FsNuF5XijE\nR3U1BSVHvu8fWTQZhkG5XA479FyGOauE9/jRH/1RTKdT/P7v/z5u3ryJdruNv/mbv8FgMH92dL+v\ngKZTSCRmCUmDwQCe58GyLBiGAVEUEYkw8H0fnU4HkiSFXdxEMYtGo7NQfA9KhEomk+B5/kQSoc6S\noIXsPAv8WeF9990aHCeDVGrx4oTjOMhyDpaVxDvv1PHyyz7p/TyH87cMIxwbiqJw40YZPD/EaKTs\neWwmvvsTN2zbhqbt4OZN+cD6PkEQkM1msbm5iWq1ikgkguFwiIcPH6Jer0NVVTjO8mVKQbzLMIzl\n3+AcKIpCoVBAPB5HrVZboict4SKgKAr+7u/+Dr/xG7+B7/me70G1WsX73/9+fPKTn8SP//iPA5hZ\nbr/6q7+KarUKURTx0Y/+Y3zjG/8vgFlv5ydP3sU/+SfX8JWv/D/4xV/8Qbz1VhX/4l/8D/jP//kr\nYFkWqVQKo5GKX/7l/wVvvbWJN998EdevX8dv//ZvQ9d19Pt93LlzBz/xEz+BQqGAQqGAj33sY7h/\n/z5KpRJu3ryJhw8folgswnVd8Dx/YYR3NBrB87xDKw5838eDB3U4TgaStJyQRiIRxOMV3L3bP/bv\n+zJCzINLCsuyeOmlKh4+rGM4HIcuomframcuIhUUpeLll7MrrVA5jkMqlUIqldrjnu71eqF7WhQP\nL0cISo5Oon1k0B4vaEl50n2pCWdLYJX+2Z/9GT70oQ/NDXV8/OMfx+PHj/HHf/zHSCQS+KM/+r/x\nL//lD+Pf//uv4aWX3hcmDv3bf/t/4J//81/A2loFf/iHv4XPfOYX8B//410AwOc+97/h7t1/wG/9\n1v8FimKg6+8C8KCqKniex8c//nGk02l86UtfQjqdxhe/+EV87GMfw927d1EsXsysX8/z0O12lwr5\njEYjaBp3oMU7D47jwLI5NJsD3LgRO+qhXkqI+F5iWJbFCy+sQ9d1tFoDDIcdDAZDsKyP6ZSB71uI\nRi1cu5aALB9vJuci93S73YbruqEQi6K4zyqQJAn9fv/E5qRKkhS2pLQs69w1SyAsD8uy+OIXv4hP\nfOIT+MIXvoA333wTH/rQh/BjP/Zj+I7v+A48fPgQf/Inf4InT56gWq2i3+/jx37s5/H1r/89/t2/\n+zf49Kd/N9zXJz/5v0OS8nj77bfxz/7ZT+PTn/5ZfOMb/w2JRBpPnjzAjRuv4pVX/hE8z0Umcx23\nbs1K7b7yla/g9u3b6Ha74ULyM5/5DP78z/8cf/RHf4Rf/uVffi7n5rj0ej1IkrRUrW6rpYDnM0d6\nHVGU0O93Ua0e3Mv9qkHE95JDUVQoirN6XgWbm1FQFAWWjc0Vw5NAEITQRT2zrsdQVRWtVivsOiRJ\nEliWBcuy4DgOk8nkxGp2Z32qq2Q28CXgR37kR/ADP/AD+Nu//Vt89atfxZe+9CV87nOfw2c/+1nc\nvHkTvu/jlVdeATBzj3oeYNsW3v/+/x7dbjeMDSeTOTBMBF/72teQzc4suE6niXQ6j4997Kfwmc/8\nAu7c+Qa+7dv+O3z4w2/ih37o+0FRFL785S/DMIx92fSmaeL27dtotVrhawRNOoL2lYtuNE0fus1B\nLTCPy3Q6ha7r2NzcPHRb0zQxHLpIpY7mmZq9jySGQxWFQu5I+7iMEPG9QtA0HbqJz5JZAoYMWZbh\neR4MwwhHtTEME5YwBZmpJ0XQkrLVamFnZwelUulclHUQVicSieAjH/kIPvjBD+KXfumX8Iu/+Iv4\n9V//dXz+858HRVH40z/9U7Asi8lkgkaDgSxnIYpSuNADgFKpjIcPH+NjH/sYdH2IP/5joNVq4vXX\n348f/uGfxFtv/QD+03/6S/zt334J/+pf/Rq+9a3/D7/3e7+HeDyOQqGAv/qrvwIwE/jgJklS2DsZ\nmH3XGWY249bzvD3bLnt79nlHFe2DBH9nZwepVAqGYRz6nFm89ni/S56PQVV7OCHn1qWAiO8VIih/\neJ7QNL0nuzRYgY/HY9Trdbz00kth9vRJlGUEo+Z6vV6YCU1cX+ePWab9rNf3vL993w+9JCzL4tat\nW3BdF2+++Wb42FtvvQXDMHD7dg+y/F53tkAYHz16DFGUkEqlYJqzUEQ+X8A777yDR48eYXNzE//0\nn/7P+MhH/jF+8Ae/Bz//8/8rvvCFL+ADH/gA2u02otEorl27Nvf4A4FPJpMnvrg9qmg/e3NdF77v\nQ1EUWJYFmqbDhKuDnqcoCup1Cqo6BQA8a5UHHfIOsqJpmoHjeCd6Xi46RHyvEOdBfJ8lGo0iGo0i\nm82GP+hn3dOiKB77uLPZbDgbuFgsIhYjyR9nheu6Bwqr67p7hJXjOEQiEcRiMWiahp/+6Z/Gz/3c\nz+H1119HPB7HV7/6Vfzu7/4uvvd7vxff+Z3fiZ/8yZ/Ez/7sz+Jzn/sc3nzzTTx+fBt///f/J65f\nfwkf/ej/tGfgexAGCXIOZTmJN974Lvzrf/1J5PNVVCo3EItN8Nd//Re4ceMGOI7DRz/6UXzoQx/C\nD/3QD+E3f/M38eKLL6LVauFLX/oSPvrRj+LDH/7wqZ6/k3Q/u64LTdPw6quvLr0IVRQFjmOFwxcC\nIdc0LUxIO2zB4fseGIaEfXZDxPcKcR7FdzeyLIclQ4vc08GkmqMQNIxvNpvIZDILM7t938d4PIZt\n22GTgUgkciLZ2JcNz/MOFFbHccAwzB5hZVkW0Wg0/PugmuxIJIIPfvCD+PznP48HDx7ANE2Uy2X8\n1E/9FD71qU8BAP7gD/4An/3sZ/Erv/IroTv1xRffwHd/9/8IAFCUIQAK1WoFtm0jGo3CNHVQFIXJ\nZAJg5pL+D//hD1GvPwHHsXjf+96H3/md34Gu65AkCX/xF3+BT33qU/jEJz6BTqeDQqGAD3/4w/iZ\nn/mZ8FgvQk5Bt9tFMplcyfsz+3zGAILezloYIiqVSks127FtC/E4kZvdkA5XV4hGo4FEInFuy2+C\n3tIbGxv7HptOp2Epk23be7KnV3VP27aNer0OURSRy72XAOI4DhRFRb2uwjQj8H0eFEXD9z0AU8Ri\nDkqlJGQ5eSVix77vHyqss8S9vcL67N9nLUqe5+Gdd7Zg21lMpxa63S4ymQzi8TgGg0HYOzmRSGAy\nmaDX66FUKsF1Hej6E+TzHMbjMSzLgud5SCQSKBQKSCaTF0JgF2EYBtrtNjY3N1d6H77v42tfuwPD\nSMBxXMTjEuLxxEqNbIbDGl59NXVurz3PAyK+V4itrS2sra2d65jno0ePUK1WD7TQHcfBeDyGruuY\nTCbhwPCgxGgZPM9Ds9kEAKytrWEymeDu3RYcJ7GvqXyAZZkwDAU8P8YLL1zsaUq+74dCukhYd8dZ\nAzHdLaosy57LdonArPHGf/2vb6PbpZFIpFCpVKCqKoDZyE2KosLGEsPhAKPRCImEi1deyYd1551O\nB47jwLKs0GLO5/OQZfnCLb5838fW1hZyudxKHhxd1zEcDtFud6CqaZTLGyt/5pZlwvcbeP31+fHy\nqwrxA1whzrvbGZglrui6fmAMiWVZJJNJJJNJ+L4PwzCg6zpqtVqY0HWYezqYDdzpdHDnzh0oCoN4\nfAOStLjmMRLhEYkUMJ1O8PbbTbzyyvmNHR8mrLvjrIGgBq714P6LJjC7sSwL2WwUo1ELHCfBNGft\nIJPJJCzLguu6T7czAViwrG1UKjdCyyxI+uv3+9A0LbSSG40GOp0O0ul02EbyIjAcDpcOnXjerLmI\noihhB7BisYhvfGMbruuuLL663sOtW6S95LMQy/eK4DgOtre3cf369ed9KAdynBm/wKwmMcieXsY9\nbVkW/st/eReTiYhKpbr0sIjpdALPa+K119bPvI+067r7RPXZ/zMMs89Kffb/l5XpdIp6vR7GlgVB\nQLM5xO3b26hWb0HXJzBNA5lMAoIwCyWIYgz1ej1smbob0zTR6XTCGbuapsFxnLCxTCqVOtdeENu2\nsb29jY2NjQM/d8dxMBwOoWkaRFGELMt7GnBomoZ33x0gHq8s/f0ZDtsoFBxsbpaP/T4uG0R8rwhB\nbKtarT7vQzkQ3/fDso/jWl6Be3o8HsMwjNA9PWusP7vANhpt1OscIhEBvV4PqdTycSlF6WFzE8jn\nT26Uoed5B1qsu+Osi1zBzyPOel6wbRu1Wg2iKGIymWBjYwMURcEwDNTrdRQKBWiahvF4jGq1usdz\noWkahsMh1tfX554/VVXR7/chSRIYhsFwOAwzqYOM36DD23miXq8jFost9CZNp1MMh0MYhoFkMglZ\nXjwKcDhUcO/eAJFIfu7I0gDLsqDrXRSLwPr62rkNTzxPiPheETRNg2EYF6IP7XFn/M4jcE8HYkxR\nFARBwP37XaTTL4FlWViWhXa7DUmSlqrVtG0blrWNN964vpTY7Y6zBmL6rPXq+/5CizX496oK62F4\nnoft7W0kEgkoioJSqRRabr1eDxRFIZPJwDAMDAaDud6VZrMJlmX3JOLtxnVddLtdTCYTZDIZ2LYN\nRVHCBha+7yOVSiGRSJwLwQkGQ8xLYgziua7rQpblpY/ZMAw0GgP0+xZoOoloVAwTE23bhm0rYXJi\nJkNauy6CiO8Vod/vAwAymaP1Zz1LRqMRRqPRsWb8HoZpmmg0GvjWt1TEYmlEo1HEYjFEIhH0+30w\nDINcLneo0A2Hdbz8chyJROJAV/C8RhHzsoPPwwX7IuL7PnZ2dsLZvTzP7/mu12o1ZLNZCIKA6XSK\nTqeD9fX1ffvxPA9bW1vI5/MHxkeDzHyWZZHNZjEajaCqKjiOA0VRsCzrUCvyMII5wbPvkAeWnU0A\nW7YlbPBeisVi6BafF889agayZVkYDBRomgnH8UDTFKJRFtns+a2oOE9c3sAPYQ+2bZ/b5KBnEUUR\n7Xb7WDN+D4PneUQiMVQqGQiCGA6CGAwGYFkWo9EIk8kElUoFDMOEcdYgWSn4W1E0UFQTqVRyn7By\nHAdBEML/X+QEpvNOq9UKk8bG4zHW1tbCxzzPg2maoRUctH+cB03TKBaLaDab2NjYWPiZCYKA9fV1\nKIoS1hZvbGyEMVNBEOA4Dra2tkJPyrLJWZZlod9X0GyO4DgxADwoioXve/B9BdFoB+XyrOTtIGHv\n9/uIxWIQBCG00IN47tra2lIDFQ4iEomgWMzjAjjTziVEfK8IFyHTOYCmaQiCgPF4fKoraMfxQFE0\nGIYJW176vo/pdAqe59FsNvGVr3wl7HTEMEyYyMQwDCKRCGgaKBQS2NggCSXPi16vB8dxUCgUUKvV\nUK1W9yzagnK04D6apsNs53kIgoBkMolWq4VyefHnSlFUGOftdDrQNA2FQgGpVCoU4Xg8DpqmsbOz\nE8aFD1oEa5qGu3d7oCgZsdj8BCnLsvDokYpIZBsvvji/5M00TYxGIxQKBTSbzTCee1jSFeHsIJ/C\nFeEiiS/w3ozf0xRfmqbwbNQliAULggCe59FutxGLxRbGyj3PQTRKYrDPC1VVoes6qtUqms0m0un0\nPgvTMIw9gkfT9ELLNyCTyaBWq2E4HB4a/2dZFqVS6enozllb1Fwuh1QqhcFgAFVVkUzOrNRutwsA\nSKfT+5KzVFXFnTtDSNLBde6RSASRSA7TqYS3327i1Vf3C/Djx4/D+LQsyygUCiSkcc4gn8YVIGi6\nfpFWvKIoYjwen+prRKMsHMdc+LhhGFhbW4Pv+08bNOzHdU1EIhfnvF4mDMNAv99HuVyGpmlhstOz\nTCaTPeIb9Eo+LN1lbW0Ng8EAprn4O7IbSZKwubkJlmWxtbWF8XiMfD6P9fV1uK6Lfr+PeDyOTCYD\nVVXx+PFjDIdDeJ73tMlLH5JUXnqRHI0KiETWcPduE47jwPM8DIdD/MM//ANUVcXGxgY2NzchyzIR\n3nMI+USuABfN6gUQxu9m48xOB1lOAtDmXoQD93M0GkUul4OmafsuwrO+z/q5LC+57JimiVarhVKp\nBN/3MRgM5nonPM+DZVn74puHuZ6B2Xcwn8+j2WweKtQBFEUhm82iUqlA0zRsb2/D8zwUCgWsr6/D\nsix0Op0w7mqaJh4/fox3330I30+u/DuNRgUYRhQPHjzE48ePYRgGOI7DG2+8QZKezjlEfK8AlmVd\nOPEFZrG3er2Ora0m7t/fwcOHdezstE7MIuY4Dtksj/FY3/fYeDwGz/NhTW0mk0Gn09njrhyPNRQK\nsQvlUbgMOI6DRqOBfD6PaDSKVquFbDY79ztuGMbcmOgyrmcAiMfjEAQBnU5npWOMRCKoVquQZRn1\neh3dbhcMw6BYLKJSqWA6naLRaIDneZRKJXS7E2iajm63C8uylnqNoPmHqhpot3Wsr6+H2dfLNosh\nPD/IVeMKcNEsX9u20e0OsL09QLNpYGOjGGadKoqNRmMAQZhlfKZSqWNlRBcKMjqdLjxvbwcswzAg\nimJoecdiMUynU/R6PeTzebiuC9cdIpcjqZ5nied5qNfrkGUZkiSFZWGLJlQ9G+8NOCjj+VlyuRy2\nt7ePlIMQDDLpdrt48uQJcrkc4vE41tbWYFkWer0eHj58BI7LYG2tAl3X0W63wXEcksnk3IXDeDyG\npmlwXReJRALZbBaq2oCiKDAMY25NL+H8QcT3CmDb9oXpQTuZTHDvXhOmmUQy+QIMo/m0p/Lu40/C\nskzcu9dHNruDa9dKRy7jEUUR164ZePSojlSqDJqmQ5dzMGM4IJVKodlsPu1sNMKtW/MvjoTTo9ls\nQhAEpFIpTKfTMLa5iMlkMleYl7V8g22LxSIajUY4EWkVaJpGoVDAdDpFu92GpmnI5/OIRCIolUoY\njy30+x4ajQZkWUa5XA4bgQAIRVjXdWiaBo7jkEgk9tQhU5SAer2GmzdvkvjuBYF8SleAi2L5mqaJ\nd99tAChCljNPZ/jG5rqZIxEe6XQJg4GAR4/qS8fk5lEo5HD9ehSKUsNkYoQu5+AiFuyboiiIooCd\nnbdRrbKke88Z0263QVEU8vk8fN9Hq9VCPp9fuPAK6rHnuWCXifnuJhqNhouvoxKNRrGxsYFYLIbt\n7W30+/2ntewsisUi8vl82AYTAMrlMhiGwTe/+U18+ctfhqqqyOfzKBaL+xqAjEY6AJrEeS8QxPK9\nAlwE8fV9H/fvN0BRBQjCe27CWEwMey7PQ5azGAxaaLW6WFvLH/n1C4UcYrERms0eHjxoQxSLmEwM\n2LaJycSA45jwPBWpFItK5QZM03yacEXWr2dBkHUc9Cbv9XqIRqMHis2ieC+wmts5IJVKhY1Y0umj\nL7yC2uBut4utrS1YlgvP8yAIMRQKBSiKgjt37qDT6SCZnLVoXFtbA8MwUBQFmUxmj/U9G3Cv4tVX\nj/79J5w9RHyvAI7jnHvxnU0i4pBK7b2Y8jwPz/MOXEAkEjk0Gk9QKGSPJYbxeBySJMFxdCQSLCaT\nATiuA1GMQZJmlnZgRbXbbXQ6nQvRK/uiE7RuDAYeBCMkD4ttLor3Aqu5nXdTLBaxvb2NWCx2rA5R\nLMtibW0N4/EY77xzB+32FKIoo9/vYzKZIJ1OY2NjA47joNPpIJPJPo3tqmg0GuFITWC2MBFF7sJ0\nsCPMIOJ7yQnGy533ZvzttopIRJ77WCwWCzv0zGPW/lGEpmnhgPSjMh6PkUwmUS7P2hNS1BQ3blT2\nnb98Po/t7e1w1ivhdJhMJuh2u2GbT8/z0G63l2oaMZlMFnpMVnU7B7AsG3aN2thYfbD8boK2lzQN\nvPvu1yCKFVy/fh2vvfZauF/P88IytyAmHNQf67qOWCyGycRAJsMRl/MFg4jvJeciuJxt28ZgYEGW\n5188YrEYFEVZKL4AEI0m0Wx2ji2+o9FoX93uvB7TFEVhbW0NtVoN0Wj0wiS0XSQsy0Kz2USxWAzP\nb7fbhSiKh1p5QdOJRZ8LwzBwHOdIxxWMpTyK58P3fYzHY7RaLbTb7TCZ6/u//0MwjAymUwutVguZ\nTAY8z8MwjLBDlWEYGA6HoCgKsizD8zy88847iMcFvPpqjoRALhhEfC85F0V8KWqxeEWjUdi2Ddd1\nFybXRCI8JpOjXUwDgrGD+fx7sbODPAaRSAS5XA7NZnPhDFjC0XBdF/V6HdlsNhRaXdfDGb2HcVC8\nFzi62zkgKD9a1vMRlKk1Gg3Yto1UKoXXXnsNiUQCFEVB13Xcvt1DPr8OwzDQ6XQQi8XgOE6YXBWL\nxRCLzRIQh8MhRqMR0ukUGEaBpilIJKSVrN9gdnSQuxBMZCKcDUR8LzkXocHGLJt4/6rdNE1MJhNM\np1P0+30oioJ8Pg+e58HzPKLRaLjap2kajnP0iykwczlHo9GVypYSiQQMw0C3290j2oSj4/s+Go0G\nEolEKGyu66LT6aBUKi0lEAfFe4Gju50Ddns+BEGY+xuzLAuqqqLZbIYZ9BsbG0in0/u2lyQJ165N\nwpK3WCyGwWCAx48f4+WXX96zrSiK4DgOw2EfpqngtddyKBQK6Pf7YUb0Qb/5yWSCfl9FqzWG77MA\nKAAeGMZFqRRHOi0TT84ZQMT3kmPb9rmPBc0EdLYKn0wmoeAyDBNOmEmn02g0GpAkCbZtQ9M0dLtd\nsCwLnufBcRx8/3iW72g0mnuuDitjCuK/pz0I4qrQbDbBcdyeebztdhuJRGLpJKdg2P0ijpLt/CyR\nSASZTAbNZjOcpOS6LkajETqdDhRFATCzkm/cuHHgfGBglnEPdPH48TZ4fmbxB0lZQRJWJBKB7/uo\n1Z4gmfTx/vd/GyiKwmAwAMMwoGka29vbSKfT++Ldtm3j8eMmhkMPLCtDkvJ7XNWO46BWU7G1tYNi\nMYpqtUhc2acIEd9Lznl2OwcN5TVNQ6PxGLGYG7rW0un0vmYGyWQibH4RYFkWptMphsM+OE7Bw4cP\nIQgCotFo+O8yltI8lzNwsNs5gKZprK2thWPjzuv5vgh0u114nrdnHq+mabBte899B2HbNgAc+Dkc\n1+0cIMsyxuMxtra2QNM0er0eXNeFJEm4desWEonESp6UQiEHURTQbA7x4EEbPJ9FMpnAeKzj8eOH\n4HkGHDdBMmnhzTdfC13riUQCmqaFHb8Gg0E44jAajcKyLLz77g4cJ41Uan5eBMuySCYzADJot7uY\nTmu4ebNC5lCfEkR8LznnTXyn0ykMw4BhGJhOpxAEAbFYDK++WoWmyZCkxUlVyeSsT65lWaFbbDZe\nLQLX1fDKK7OL0XQ6xWQyQa/Xg2maiEQiewR5Xoeio7icd8Pz/D4riLAaQXvE3efPcRx0u92Vzulh\n8V7g+G7n4HU0TUOv18PW1hYKhQI2NjYWtoVclplwS3DdMSQpAtvWkEj4KJXiMAwF7XYPL774xr7X\nSCQSiMfj0DQtrIt+/PgxZFlGt2vA83KIx5fLzJflHBSlh8ePG3Oz/QnHh4jvJcbzPPi+/1xXro7j\nYDweh4LLsmxo2QqCEP6oo9Eo+v0OgMXiS9M0ZFneN8HGtm1EoxYkSQJFUZCk9xJPfN8PY8ej0Qjd\nbhcURe2xjKPR6EKXc7CPZZBlGYZhoNfrIZfLLXmGCADC5hXr6+t7XJ2tVmvujN6DCPpyH8RR3c6m\nae4RN9/3kUgk8IEPfACGYSCXy53I720ymUAQBFQqpT33dzoRSJKE0WgE0zSRz+f3LCYpikIymUQi\nkYCqquj1erh79z7a7Shu3SqsdAyynEWvt4N8fkTK6U4BIr6XjOl0itFIh2W5MM0pFEXDeDw+9GJ0\nUgSu5EBwPc9DLBaDKIrI5XIL++IKgoBMhoaiDJBILO4eFKzsg/fk+z5GoxZeeGH+gIVAaIP2gMBM\nrIO4sqqqsCwL7XYbt27dAsuyeyzgVVf8xWIRW1tb4XsOsCwLlmWFmaWBxU5A2PO4XC7v+X4oirJw\nRiRwJpgAACAASURBVG/AZDLBYKBhMrHheT4YhsZw2MJrr7164GsuM883wLbtsNFH0Oo0aJKRTCbD\nz7HX66HdbqNUKh20u6WYlz9gmiZ0Xcfm5iYoisJwOMTW1tbc+G5QjpRIJFCvjxCLCXj06BHS6TQK\nhcIKM4NTaLX6RHxPASK+lwRN09BsKlBVD0AcLCtgPPag6xI8bzYFqFKRkUwmTzyJYpEreW1tbaXR\nZteulXDnzjZGIwrx+OILbjqdRr/fRzQahaq2UK1ySKcXb/8sHMeFzemB2bkDZhdURVH2JHtpmgbL\nspZuph/UbQbu5+l0ilZLwXDoAOAB0KAoH74/hSwzKBZlxOPxK+vWs20bjUYDhUJhz3fFsiz0+32s\nr6/Pfd6s05MCTQNYNgmWnZ3D6XSKZpOF59VRKAgoFNILk7QC1/M8S9XzPIxGI2iaBl3XQ6FOpVLh\npKJnP7NMJoNarQZVVQ+sSV8GXddRLpf33Ndut5HNvtfFLZ1OIx6Po9PphMMannVF67qOaDSPQmEN\nmqahXq+j1+uhUqkgk8kc+r2LxUQMh51wtjXh5CDie8HxPA/b2/8/e28eJEl6Vwk+93CPy+Nwjzsj\nMiMz6+g6uptuSS1gh1FjDMbYymxNY6b5B5sBjWwA4zBWazsLIxatCTAwhhsWBCYYzRjGaQKGQYwZ\nErtokYG4pJZaUl915xmZcbt7hIeHh5/7h+f3VURFRGZkVmZVZbU/s7Sqyor7+N73+33v994+6nUP\nsVgOonh/vMJxPITDEYhi5iAFSEYqtY1LlyoPdQ68aCv5uAiFQrhyZQV379bQ7eqIxaQJn2eCSCSC\n0UjH7u4beP75EkqlhxvxIUKr8QXTNE0Mh0PqLDTeqj5KyEU2H3/zN68gmayC56WZBiK6PsBbbykQ\nhA4uXy6/7TJYSTxgJpOZ6szMy+j1PA+7u3XUajbi8QIkaZJsTNNCPl9BOp1Fu91Ds7mHK1dyMys3\n0nom5EsMMEhnhRzbRCIR2so97HtDxo+2t7cRi8VO3NkYjUZgGGbi+oqigGXZqefB8zwqlQo0TUO9\nXkc8Hkcul6PPSVV18HySHtmkUil0u11sbW1hf38fFy5cOLIrxjBJ6LoekO8pIyDfcwzP83DvXg3d\nbgSZzDQBWZZFF3Q/lq+Efl/BzZu7uHp1ZeFq7qSt5JOA4zg880wV/b4fcqAoLoAE7s8BW2AYDc88\nE4FhWMjn54+TLAKy4D54Rkvawvl8HsvLy2BZlraqx4Vc44RMXofRaIRGQ4dt5+F5cQjCPOcuAfG4\nAF3X8MYbu7h+vfK2WeDILK8gCFOuZIdl9O7u1rG3B0jSbBHQcDiEIAhgGAbJZBqmGcONGzVcu8ZM\nOZcRxTNR3GuaBtd16e2mUimk0+ljeSbzPP/Qxiuapk0QouM46HQ6NFRiFhKJBOLxODqdDra2tpDL\n+RsO03TAsvcre5Zl6f/t7Ozg7/7u73DhwgVcunRp7m0zTOihxWkBphGQ7zlGvd5Cp8NBkmZXfuPu\nOATJpIh+38Pm5j4uXZr/ZSat5MFggNFodOJW8knAMAw1WCDKZdt2wLIMQqEIEgk/1aXVaqHT6TyU\nuQUxP5gnkiGLZygUmivk0jQNrVYLgE/am5tthMMrWFlJ0/zZw0g1Hk9A1xncvLmHZ5+tnupm5klF\no9FAKBSa2vSMRiMaovAgFEXB7q6NTGa++nY0Gk2MovnVYwW3bu3ghRfub5BM04SiKAdt2Sg9Aw6H\nw/Szd1LhVCqVwmAwOLHwTtO0ic90q9WaOFueB5Zlkc/nkUql0Gw2oaoqhkMDw2EYlmXDsiz6Qz67\n+Xx+alMS4NHg6f+WP6XwW3Z9pNPrcy9jWdbMhTyZlNDpqFhevn+OM6+VnM1mH6qV/LAgYqlZyGaz\ndJTipC0+TdNOtPiMC7kILMtCrVaDpkURjY6gqjW4rovbt29jfX0dsVhs7oIejwtQlBQ6HfnAbOHp\nRafTgWVZWF5envi953nY39+f202p1RQkEqW5n0XTNBEKhaZe43A4DF1Pod3uIBIJo9fr0VCDUCgE\nz/MgCALS6fSpdR6KxeJM4d1RIDaq5OyWmM6sra0deb3RaESFfZ7nodPp4M6dDdj2ClZX1xGJRMAw\nDGzbphtp0iU4DK5rvy02hI8awSt6TqGqKlw3cah4ynGcuV8alk1he3sPopg481byWYFlWWSzWbRa\nrSlxyiKY13KedblFwPM8VNXF8vIFhMNhusA3m01sbGxQsRuxxoxEIhObBkFIY29vG4VC7qkVYPV6\nPfT7/Zlzu+12G5FIZOZmyI8RZCFJ88lxOBxOkafrugfXNfDKK3fxwgsXJ4RW6XQa5XL51EWI48K7\n1dXVhavo8Zaz53loNBooFAq0Mn+QZE3TpJtsclQSj8chiiKWl/2UpM9//h7a7RZYNoRUKoVcLrfw\nHLIfKtKHICwffeEAx8KTv8IGmIm9PRWx2PxEFcuypqIESavp/tllA1//9elH0ko+K6TTaWrOcNw8\n06NazsDxRo00TcNoFIYo+oTKsixisRhWV1exv7+PeDyOWCyG0WhE26uu61ISjkajMIww+v2nc66S\nzECvrKxMveakfT8vNKHdVsHzhyuIDcOgxwIk89cwjIPXN4LBIAFFUVAqlVAsFpFMJsHz/JlZKBJr\n1Hq9vvDmUNM0SJKE0WiE/f19aJqGcDiMVqtFc7kJySYSCfr3WZ9Tx3Fg2zYYpodwOAWAAcMwx9pY\nDwYastlgLO4sEJDvOcVgYEEU51cB/peOQb/fn/JKFkXxYEyHRSKROLfEC/jkmM/n0Wq1Fkq7GcdJ\nW87zoOtDMMzsFiMR4USjUSSTSXq/juMckLE/c9ztKgiFGlhbq9Kz4ifJoeykME0/Km9paWnq+biu\ni3q9fmhGr2HY4PnDP6e9Xg8sy6LT6VCSisViGA6HBxV1DsvLaToTexouV0eBjB/Jsjw1i+u6Lq1e\nycb43r17qFQqYBgG7XYbFy5cQDweRzgcXjh1yLIsmnqUTCbxzndexdaWB1EsHowk7lMx2WG353ke\nTFNGsTh/7j7AyRGQ7zmE78xz+JfQtm288sorePbZZ1EqlWZ6JQOn42/7uCEIAmRZPtZ85aItZ3LZ\nRWBZ7twqmuM4ZDIZbG9vI5vN0sWUtAlJ1Z5ICEgk2giHwxNCrnF7THJ2d15g2zZqtRry+fzMduci\nGb227c58zrZto9Fo0OQgwzAouZPXvFwuH8xwtyfey1AoRH2gzxL5fB53796FaZpgGIYS7mAwAMdx\n4HmeboAvXLiAarWKWq2GK1euHGow8iB8j3OZZgCvra3RcSpV3UG/LyOd9se6Op0OjWycd86tKA2U\ny1wQFnJGCMj3HMKvDg4nBM/z8Oyzz6LX68G2bVQqlRlmDu5Tk1qSz+dRq9WQTCYXek66rh/Zcj4u\nWPZw1yTXdal7FhlvIccDhIwtawRR5CCKIh3BIWlPhmGg2WzCNE1EIpEJQn5Sze9d18Xe3h5EUZzZ\nZSCJPUd1LXiexXDo0tskc62yLCOVSmF52Q8A6Pf7CIVCtJ2saRo9XhiNejCMOHUZO61wBQLbtmkV\nO34mC/jf2Z2dHayursJ1PSiKDdsWwTA8PI8B4KDV2sLaWhbNZhO2bU+NYM0DyfclOcGl0qQojWVZ\nXLxYwZ07u1AUB+l0DsVikUZhRqNRZDIZ+hlyHAeq2kCh4GJlZX673PM8+lqep83gk4KAfM8pBIHH\naGQgEpm9a/U8D9lsFuvr66jVatja2oIgCMhkMvQ8kWXtp6KlCfjGG4IgoNvtToyazMNhXs7jOM6i\nEg6HYNvmzP/zPG8ij3gc48IZVZURjepwXX+OmJwHRyIRukB6nkdHsHq9HhqNBj1fJoT8JBwleJ6H\nO3fuAPBtQVVVpWIzwF/kG40GlpaWjnydk8kI6vUOFIWbIKe1tTWqECbq/Ac3X0SkNBjsYTDwcO/e\nPXAcR1v+JKpw0ffasqyJdjH5O7ENJc8xlUohHA5TUrt9+za+/OUNSNIa4vEiEon756iu60JRTOh6\nCp///A1cvZo/EDvNfky+rWofsiyDYRhIknToEQqZn9/dbaBevwcgBUHwRVmKIqNWqyEWi4LjXIRC\nA6ytpVAsTgv//Ja2ir09FabpgWQBJxI8ymXfxONp2dCfNQLyPacol9O4fVudS74AwDD+l251dZXm\n35KoMYZxcelS9Kn6ouRyOWxubiKdTh+6qThOy5lcfhGkUikwzA48b3rRIsKZWaQ47vPMMAqef/4C\neJ6fWNzJvDVxPopEIpSQI5EILMuihCzLMhzHoaNQhJAf1XtNFujXXruH4ZBHobAMRXEAmPC8LiTJ\nt9XUNA2pVOpQ5a1pmgcbjH3cubMDSbpA31/b9kdgRFE8dLPB8zwcx0a1KuHy5VV6u+RclJim8DxP\nNy6RSAQsy06pi8c7FZFIhCqLw+Hwoa9vtyuj1QqBYfLgeWFKwESSmFwXKBYvQ9OA27d3cPnyysTt\n+i1kFYqiUBOYRYWGLMuiWl1CuWxDlhXs7e1gMHAPxuYMGMYeCgUBly5dmnpPHMfB7m4DjcYQQBqC\nUEU8fv87ZhhD3LqlIhTqYGUljULh6A3w2x0B+Z5T+DvMTbhufuaX3icMZuLysViM5o3qegOaFker\nFYYkSeditOgohEIhSJKEdrt9aPbrcVrOx6l8eZ5HLheBomhIJO5XIeNV72HQ9QEkiaNEMmvGeby1\nqes6FEWh3tOkSia2jLZtwzAMdLtdehY63qo+i66Hqqq4dauNXo+B6xZw6VJ16vM5HOr44hd3ALTx\nnve8e+o2SCA9cZ2ybRuhUAgrK2nour9ZSSaTC82oEhiGgtXV+23ccDgMURRhGAYKhQINLSCEPBwO\n4bouBEFAIpFAMpmEJElIJA4f75sFTdNw+7YCUawimXTQbDYRiUQmvnO6roPneWjaAOVyGaFQCIrS\nwubmHi5cWIbjOFTXIAgCyuWT25FyHId8Pod8PjfVOiaCrEQiQX2kLcvC7ds1DAZJpNOzuxTRaAzR\naAyO4+DevTqGwz1Uq0d3NN7OOP8r7tsUoVAIlUoS29tNSNL0yNGsao3n+YPQ901EoyMsLV2E67rY\n2tpCIpFAJpM5921oSZKwublJI9lmYdGW80lQLIpoNtvwvPvG+4dVvQR+K7mDixcPF9hwHEcNUMYx\n3gbt9XoYjUZwHIfeL5kdJXOvnU4HnudNRSs+zGIpywpu3VIAZABoqFSWZhIVz4fheTEkEs/gxo1d\nXLvmW50SX2Vd1+F5Hmzbhuu69Dz88uUkdnYMZDLHm0MfDPqIRnXwfJoGZfht6AFqtRoA0NdpeXmZ\n3h/gj+cZhoHRaARZlilxktZyNBo9cgxnd7eDaLRI37tUKoV2u01jMckxAvFfJptCUcxjb+82WHYT\njuMglUqhWq2e6neUYZiJTSgJjWi329jc3EQ2m8XenozhUEQ6ffQZdCgUQiZTwf7+HjiugUpl/jjk\n2x0B+Z5jlEp5DAa76HabEMUHqyoPDDO98GmaikLBw/r6O9But8HzPKrVKnq9Hra3t+m58Hmd62MY\nBrlcDq1Wa6ZFIWk5L3IufBIIgoBqVcP29h4kyY+WO6rq9SvjOioV/sSjT+OznwRklIW0Tcl8MQBa\n+XueB03TqPiLkAoh5EVJTtd13L4tg+fzkGUZxWJx7nXb7TZSqRREUUSn4+Gf/umrKJXECWMSUu0S\njQJ5XsmkjFu3dpFKLc+8fcdxJmwUVbULy9rDhQs5tNttSrKiKNIAgsPEXg92HwhRks5Dt9uFbdsT\nZDw+HjYcDqGqHiTp/mYpnU5jOBxCURRafZumCUEQ6Ps/Go2gKAq6XQOplIXnnrv6yI4NWJZFoVBA\nKpXCm2++hd3dEC5ePJ6JjSQtYXd3G5J0/Pn7twsC8j3HYBgGFy5UwLJ7aDZ3EYtlaAqQ5/nqWwLT\nHGEwkJFKGbh0aRk8zyMej6Pb7WJnZweFQgHr6+tQVRW7u7tUAXkejf6TySQURUGv15syq9B1HeFw\n+FiV06JnvgTlchGuW8fu7i5cN3po1WuaJjStiXKZxfLy/Fb5ScCy7JGta0J05CyTVNCKosBxnClV\n9bznsbfXBcOIkGUZuVxu7uaNkHw0GsXu7i4AwDDCyOVs9Pt9WuEtLS0hlUpNvU+ZjISrVxncuHEP\nlhUHz8cP5lFNOjbE8zxc14Hj6MhkbDz77EtzCeC4ameGYaiwbfw2SIWsaRra7TY1T+l2VZimCMuy\nJirWXC5Hfb/7/T5M00S1WoWu61BVFY7jIJ1OI5e7Dk3bPPZn8DTgn3unUCiI2N/fRzKZhCiKC3VH\nGIYBz4totRSsrgbkOwsB+Z5zsCyL9fUKstke9vdbkGUPLJvCYNADx/EAXLiuhnjcxqVLaUhSge6g\nGYZBNpuFIAio1+uIRqMoFAoQRZGe/fA8j0wmc+52r/l8Hnt7e1NndMR4YFGctA27vFxCLNbFF77w\nBhKJJWhaHJFIlI63mOYIpqkgGjVx+bKIbPbRGRks0romPyRgg5wNktCLRCJBSdm2bTSbQxiG3/af\n1e73hUIK7t69B0mSKMkqioJ2ewBd38Y3fuOL1EucYFxZPP74RNGFrrfR7ZoA0giHBQhCDKEQA0CH\nILioVApHqm8ZhqFnnifFuNKcgCipNzfbsG0P9XqdxhOSLoUoimg2m2i320in02g2m2BZFul0esIP\n2vOiMAzjWB7Rp4F+v4/RKIpMJotUKo1ut4tarTb1Hs2DIKTQaLRRqQTe0LMQvCJPARiGQTqdRjqd\nhmEY6PX62NvTwPNh5HJhJBLTeanjiEajWF1dRbvdxtbWFs22TafT6Pf7aLVaYBgGmUzm3AzcR6NR\nxONxyLKMbNaPHTzrlvODCIVYvPDCxYOUGRWDQRum6SIUYpFK8SgU0jND2R8XFmldk/GmVqtFCVnX\nh9jY8LC6emmqMia2kaTNurKygmg0inq9jl6vh2QyiWvXrmM43KduVKqqYjQaTSiLiVsVSfchZElm\nfm3bhud5B97ZuYU3i8SE4kHy9TzvVH4syzmoIEN0I+GTmr+5uXfvHnq9Hl566SWqmtZ1HcPh8EAE\nBfR6fbTbNjXpOO4PEVMd93MmywPwvN854jgOhUIBw+EQnU4H4XB4jnHPffj3l8BgMFjY/ObthIB8\nnzKQNqPnuYjFYgt7BBObxkQiQUO5SdxYMpmEpmnodrvodDrIZDLnIoYsl8tha2sL6XQaHMedqOUM\nHL/tTK7T7XZRqVQQiUTOzablQSzSuv7sZ/8eruuLdBqNxgSZpdNpGgygqiq2t7dhGAYkSaLzvbIs\nYzAYoF53kM1mwfM8BEGgbdpxMiMt8gdJjsBxHAwGA2iathA51mo1qhYf//1Jye3Bn1CIBcOw1MmK\nbIJt28b29jaKxSJefvllJBKJiecy+VjuP7dZz8F13YU3AwAWfl47O/sYjfIYDo2x5wkIQhy9Xh83\nb97E8vLyEcTKBVnAcxCQ71OKk54RkSCAVquFra0tlEolxGIxmmVLRCbtdpuKYZ6Uyu1BkBlQoiw9\niZfzSZ+bqqpPjNnFWYC0rnVdhyRlcenS18G2bWpv6HkeHMdBq9XCa6+9RjsqxOqUmESQ23FdhoqY\nHob4DiPCWT+O49BZ2fHfnxaKxQFGoziiUb9N64vrZOzu1hAOh/GN3/iNR6qXXVdBsVg8Nf3FPGJ+\nkMQFoQ+W9R/7g5clo4uLKK8fx3n1eUBAvk8xTrqIsCyLYrGIwWBAhRa5nG8cQXyIyfxop9OBJEkL\nCzEeNTKZDB090jSNtqDPEuNV79MMRVHQaDQQCrHY26shnRaRTqeRSqVgGAYN8xAEAdeuXcOlS5dm\nEqB/WwIuXAgvbKl4WiDmI2dlz1koJHH7topoNEZbtpqmQRRFOs97GEYjA4LgnqrwcdENhiimAMQg\nCA/TtXEQCp3PyYmzxtNjbxRgAodZ0y0KQRCwtrYGx3GwtbUFwzDo/0WjUZTLZVQqFRiGgXv37qHT\n6TxxQQ1EVLa9vX2ilvNJoKrqocrg8w7DMLCxsYFXX331QMnNgmUZDIdDDAYDAB4dUyqVSrh8+TIk\nSQLP8+A4DqFQaIYfsPlYZsxP29/5Qfgt2R7q9To1uJEkiXpRH4XhUEWl8mg3JASSFIdp9k98fb/i\n1c6dWPNRISDfpxSnQb7A/VDwXC6Hvb09as5AEIlEsLS0hGq1Ctu2sbGxQReZJwWpVAqapp34+sdp\nm5GqN5N5umLYbNtGt9vFxsYGbt68ibt376JQ8JXz+bwInrdQLpdRLvuzzZqmIZfL0dfhsM+iHxRh\nPpZF+qxjBfv9Pmxbhq4rYFkWgiCgWCwu9N30z6K1x5btnEqlwPP6iV+fIAv4cARt50cIy7LQ7Spo\nNDSMRjYAgONYZDIx5PPiqS4+p33OQkZLGo0Gtre3sbS0NPGl4nkexWIR2WwWsixjc3OTWvI9btcs\n4uRkGMaxNyXH3cAoivLUVL3kXLbT6UBRFCqi6vf7uHz58sQ5pK5vwDCG6PX8VKHxlioZUZoHXVdx\n4cLh2bJnBaJ2Pm2YpolGowEAeP756/inf/oqHCeCXG6xowjLsjAY1HD9euGxJVaxLIulpSR2dmSI\n4vEnBCxLQbG4eCTi2w0B+T4CWJaF3d0mWq0RgBTi8QpSKZ4KPjodDfV6C8mkh2o1dyrK2NOqfMdB\nFtVer4ednR1IkjRV4fm+sXlkMhkoivJEuGYNh0Nq2CDL8plVpZ7nQZZlLC8vn8ntPypomkbnT4m/\n8dLSEuLxODqdDlZXV6fOZpNJBl/60ptYX78+U9Q2b47WTwPqQRQPjxQ8K5x25et5HjqdDnq9HrLZ\nLCKRCPb29vCOd1xDu61BUZpIJrOHEupgoMGymrh6NfvYpwry+QxarW0MBtFjnf0qSgv5PHNuVf6P\nAgH5njFGoxFu3KjBsiSk0+UpQgyFQkgk0gDSMIwh3nijjsuXLWQyD79jPKtKIpVKIR6Po16vYzAY\noFQqTVW3oVAI2WwWkiRBURTs7u4iFovRFJ5HCWKsIQgCtre3ZzonHYZFuwik6j2PbbZ+v496vY5W\nqwXbtpHL5XDhwgUai0fGchKJxATxkljAUIjFiy8W0enoACYJY17lO17dPS4TBpZlaebuw2IwGKDZ\nbNKJAcMwUKvVUCqVIAgCJElCo9HG/v4mLCuOaDQNjuOp0cdwqMHzVEgSh0ql9ESclXIchytXKrhx\no4bBwIUgHN4C9zwPqtqEKI6wtna+N6FnjYB8zxCWZeHGjRpct4BU6ugdYDQaA8et4NatHVy/Hjrx\nWY/runQW8qzAcdxBFqhf3Waz2ZlKVZZlkclkIEkSVFXF3t4eHdBfxCXnNEBUzhzHIZ1Oo9PpoFgs\nLnTdRTcw563qdRyHBtK3Wi24rotCoYBr167NVK4T96XxGMbBYIBGo0HtID3PA8fto16vIZHIIRz2\nN1m++cX92/PNTjTYduuxV3en0Xa2bRutVguj0QjFYhHxeBy9Xg/tdhuVSoW25v02bgHFYu7AqKQD\nw7Dhuh54PoRKJYps9uRpRWeFSCSC69dXcO/eHmRZBs+LiMeTE90M27YxGKjwPBWlUgwrKytP5PTD\nkwTGC4awzgwbGzV0OnGkUserYn0bvR28+OL6wrZ3kyHXwP5+HZmMCFGMo1xOQxTTZ3Z2ZFkW6vU6\nGIZBqVQ6tIoh54jdbpca55+lbR5J8FlZWQHgb0w2Nzep+cVRIKNWR7XPZFmGYRiHRhk+bhA1cqvV\ngqIodF4zm80inU4fuENFphbNTqeDwWBAF1TP89BqtWjX48FNVLcro1ZToOsceD4NTRtQF7bRSIfn\nqchmwyiXF7MpPEvoug5Zlk88FqYoCjqdDkRRRCaTAcMw6HQ66Pf7qFQqj13vcNoYDodotRQ0GjoA\nDp7HgGFccJyDcjkFSUqfy87P40BAvmcEy7Lw6qvbSKcvnGgHqCh1XL4cgSQdTtyu62Jnp45GwwCQ\ngiD4QeO1Wu2gSvGg6yoYpo9KJYGlpcKZ7UhlWUa320U+n1+oatc0DZ1OBwDOzDWr0WggHA5PvI6q\nqqLf7y9UpZJs08Mem+d52NjYoHF0Twr8amRACYaEKCSTSUQiUfR6DkYjDgzjb5Y8z0Yk4qBS8Tdr\nHMeh1+uh0+mgWq0iFAphNBphf3+f+oAftjkcDAbodHrY22vC8xjkchmkUpEnaoE2DAOtVotuzhbF\naDRCo9GgCUDk+TQaDYxGI1QqlccmlHoUcF2XRj6GQiFwHBdUusdE0HY+I8iyCuDkCs5YTMTeXv1Q\n8rVtG7dv76LfT0yFXJM9VTgcQThcgOvmsLvbhK7vHiQhnf6UmSRJNKRB0zQUi8VDFyDimjUYDKas\nK0/ri6xp2lRkXDqdhqIo0DTtyIp2kcfxpJz1ep5Hq9vBYIDRaESdpqLRKEqlEizLxs5OH71eDPG4\nCFGcrP5N08S9eyqALSwtRWBZJp1JJZurQqGw0EZJEAQIgoBYzLdWfNQGGosgFAodS3DleR7a7Tb6\n/T5yuRzdZHqeh/39fXieh+Xl5UcW//e4wLLsY/+8n3cE5HtGaDT6iMdP7nAUiUShKP4Oe1Z71HVd\n3L1bg66nIYqzCXqcOPyg7hI6nQY4bh9ra2fjvhQOh7GysoJut4utrS3qD30YyCI9HA4nXLPS6Ycb\nPznMyzmfz6PZbEIQhIe6D9d1H+tZr2ma0HUdg8EAw+GQiqNc1wXHcUgkEkin04hGo2g229jYGCKV\nWp17NOCHGOQxHCbwhS98Be94xxJYlqXxf6ur8687Dw+bGnSWOI7JxoOCKrKxdByHahkW1RIECBCQ\n7xnBNB0kEoef96iqikgkMvOcDQAYhp+7K5dlBYoyvy09b9RIkoqo13eQzR4vWu84IK5S41VwoXD0\nvGIsFkOlUsFoNEK320W324UoihBF8USLd7/fn1vZxuNxhMNhKIpyZGv/sJMZRVHobT0K+ClCcpN5\nbwAAIABJREFUOm0nA/7mhST96LqOaDRKX3/yGVBVFXfvapCk6pGvpeM4aLfbWFt7DhsbNcjy17C+\nvnbiEa2zGHs7LSxCvn5kYhOmaU6dcVuWhVqthmQy+UisSwM8PQjI94ywyFF6vV6nwdmxWAzxeJyG\nGEQiEViWPfd29vZUCMLJqtdIREKjoZy5yvTBqMJisbiQuIq4ZpmmSV2V0uk0JEk61jnarJbzOPL5\nPB09mne7h5GG67pQFOXMq16SqUtaybFYDIIgIJFIHERI9mgO7KxNjn8m3UYyuXIk8Xqeh0ajgURC\ngGEYcN0YDMN9qJbxUSYbjxNEQDZvgzAuqCIpTASj0Yjm2waReQGOi4B8zwg8758lHdaiu3LlCoD7\nwphxcYz/u304jq9GJQ5TPM/DNE30ekA+P7/aOqzaEIQEOp0mqlXzzCu2eVGFi1Sy4XD44JzSoq5Z\nqVQKkiQd2frUdZ16Cc8Dz/NIpVLodDooFArHfm5nVfWSWDxCuCT4npg2aJqGXq8Hy7KQTCZRLh8+\nnkJC0ePxox9ns9mE53nQtAHi8Tiq1SpUtQFVVY/sEMwDydl9UkHGjcY3LeOCqmq1OqVa1nUd+/v7\ndIY3QIDjIiDfM0ImE0OzqSGZPLpiIPOn47tnv6Lh8MwzJQwGA6iqik6ng1AohGazi243hX7fQyQS\nAcdxCId5cBw/QTiHVxt+Ru+j8iAm52SkCp41ojIPPM+jUChQ68qtrS0kEglkMpm5oxzEWOMoZLNZ\nbG5u0iDzRUGq3uOqZGfB8zwYhkEJ17Ismh6Vy+XAcRz9DOi6Tol4UROGRkNFJHL0+9zpdGgoxPjt\nLyL+OwxPcuUL3G89ExImo0LjgqpxzJrhDRDguAjI94yQy4nY22sAOFm7bjQa4PLlJRQK900NbNuG\nYRiwLBauGwfDhGhsm2EYNCnG8zzcunULvV4PoihCEOLg+fADqTIcLMs+pWe7GMhYhq7rqNfrSCQS\nNKpwEYRCIWrWL8sytre3EY/HZ7pmaZqGarW60GPKZDJotVpzZz1ntf5J1XvSOU7LsiaEUiRoPZ/P\n003JaDSCLMvo9/u0Si8Wi8eqIv2gBwOSdHh11ul0sL29jVKpNNW69sV//mjJSZyonvTKl1hMjkYj\ntFotxONxrK2tzXzM3W4XqqpiZWXlqZvhDfBoEZDvGSEWiyGdZjAc6ojFjmcT559BqZCkybNEol71\nzz5FxOMCLMs6MOUYwTQtjEYjalfX6XSwt7cHlmXB8zzCYR48H0Y0GoVljQ7Cx/2zWf//w49kkYzH\n41hdXUWz2aRV8HEqCJZlqXWlqqqo1WqIRCLIZrOIRqO05bzo4iiKIhRFwWAwmGohztoYEIXzIuRO\n4HkedF2nhOu6LuLxOJLJ5MRIFgmk7/V6cF0XqVTqoRZ6v+qcPs82TZOOJfV6PchyF1evXoUkza6Q\nGeboY5TDH8OTVfkSs5dms4d793bw2msbCIc5rK+XqeHIg2g2mzAMg848BwjwMAjI9wyxspLD66/X\nwXHHWzxleR/VqjC3DRoOh+C6vgqakMw4aViWhX6/j6WlEkYjE5qmYTgcwnEc2LaNfr8Pwxig2TQx\nGPQpOXueh3A4TFueRABGiPk0F1ASVahpGvb29qjT0nHug2VZSJIEURTR6/Wwv78Pnudh2/axBTD5\nfB6tVmuh8ztFUSAIwpHvqWma9CzfMAxEo1EaUjBeqRMi6PV6MAwDiUQChULhod2fHMfBcDhEv9/D\ncLhPyd8wDDr7S6r3UmlpLvGSx3jS9/9Jqnx9d64OajUVlhWDYbBotXiUSisoFIpQFB2dTh2iyKJS\nySCRSLztZngDPBoE5HuGEAQBV69mcePGLgShcuSZou8PvI9SyUO5PH9eMJ0WsLfXAzDbRYoIdMYX\n0/EK2TBGqNXeQDabBc/740wsyyIWi1HTgV6vh2azCcuy6G2Ew+ED04QY/TMc9tvZJ12YH4wqLJVK\nx/a2JdaF6XQa/X4fX/nKV+A4DnieXzhVRRAEKIoCRVEgiiJM09+0tNsdhMNhOI6DRCJBk5FmVb2u\n604IpRiGoYb6sVhsatEeDofo9XrQNA3RaBSpVArl8nT4xmHwPA+madL3l9y3pmkwTROu62J7u4FM\nJkK7JvF4fGq8jYyEzXq9/La7c+Jq70mpfF3Xxb17NbTbHCKREgYDBRzHYWWlCkEQ6NgfIGE41PHG\nGw2srw8xGhk0MvNJeB4Bng4E9pKPAP1+H3fuNGGaccRiIqLRyYrGtm1omgKgh+Vl4VDiBfzF8Gtf\n25hbUXueh+3t7bljNro+QDzewfr6EkajERX7qKoKy7LoYikIApLJJHiep2IUUkXrug7TNGlFRKoo\nMio1TszHeZ1arRb1yV0Ew+EQtu2PZJHHSGIDu90uPM9b2LrSNE3cuHED0WgaiuLC8xJQ1T44LgRB\niINhNDCMhkwmjosXLwLAhFBqNBrRjsG8ytiyLPR6PToelEqlDh11Gr/eOMmSqno4HFJTDdd1EQ6H\nqXNYPB5HNBpFvd5Gsxk7VPyn6zoURUG5XJ76P03rI51WcfHiyUaq7ty5g4sXLz5W4vI8D3fv7qLd\nDsPzOOi6DkmSkEgkIMtdsGxoqlsyHA5x796r+LqvK9L3O0CA00JQ+T4CJJNJvPCCcNAabUJRvAM/\nXQae54DnLayuppDJLNaeZhgGlUoa9+7JEMXpEZmjWoSGIePCBZG2rInwCfAXeULIqqqi3W7TyDWW\nZamZQLVapZX8uHiIGPcTa0OGYRCLxWi1LAgCHc958PwwmUxOVcGzugW2bUNRVNRqKgyDA8PwABgA\nDmS5hkoliXw+j2q1Cl3X0e120W63kclkkEql5p7j7u42sbvrIRplsLy8fvBa+r61qVQKrpvFW2+9\ngW5XR6fzZUhSknYDslk/JGDebZO28mHjQY7jUGIdJ1lSwbquS4kW8HUFJNCeVG2zSHwR8V88Hke3\n26Xt8cnXW0WxePI53yfBZKPT6WJnx4TrArFYCJXKfYtVhpk22jBNE+12G+XyVXQ6MqpVKxBYBThV\nBOT7iODbO4q0pWnbNv39PIerwyBJIhKJHWiaepAHfB+HNTNUtY183ptbCR5GyLqu01hAEllIVLjp\ndJoSAcuy8DyPEgipDDVNo8bzAKaImVSMxWIRg8EAOzs7U1GFqqri9u02XDeJeHwZkjRJzqpqQ9Pi\n+NrXGigWeVSrS1heXoZhGFPWlWTxJVWRLEexvv4carUa/sW/WMd3fuf/ive9798dnJfbqNcbsG0X\ngrAETdPwLd/yPH79138dH/zgB2e+lkTMRMaDSIwieV00TZsg2XG1OgBKuAzD0CqWkOxxPjNE/DcY\naIcGoqfTaaiqOkG+hjFENGqeOBT9SSBe0zTx6qu3ACyhVCpMbXpYlp04XvGTe1rUJUxRXMiyikIh\n94gfeYCnGQH5Pgb4/rkPZ8wQCoVw+XIFN2/uot93kUzen8GcteD5IdctpNNDrK8fL2tznJCJGQUh\nZE3ToKoqtra2KCELgkAJWRAEFAqTSUqe58G2bYxGI0rMvvK0SduoxLh9a2sLv/iLv4hPf/rTB8+b\nQ6m0gn/5L9+PD33oJwDcfx0Nwz+by2TyAPIHloC7uHRpGdFoFOVyecI1SxRFSJKEvb0mZDlCuwiC\nIOAXf/GPkc3mqJI6n8+D53lcunTpoAIqAGCgKL2J12o0GkFVVXS73Yl2PAmdJ61hUkWR5+o7mln4\noR/6IfR6PfzhH/4hJdnTMPFYWyvi9ddrGI04RCKzleWJRAKKosA0ffMV0zRhGPt47rnSie/3cZMv\nGUkDUqhWV2c+lnGLSU3TIMsyisUiJWlBSKNW20Y+fzxBYIAAhyEg33MMnudx9eoKNjf30ekoCIVE\nCMKkCGv8PLlYjGJl5WiLwUXvmxByqeQvzoSQe73egZfwXZimCYZhkEwmkUqlDuaOhYnrPwgyz0zU\nuQDw3HPP4V//6+9FMlnGvXtv4hOf+Ck0Gvv4D//hZ+hZs6ZpE1WNKBYgyw3s7NSxuuqfZY67ZnW7\nXdy+fRsbGypyuavodDrQdf3g/DiMRCIFQUiC4zi4rm+xONl6ZNBsamg2m5RwTdNENBqdep6e5yEW\ni9F5UuJcFYlEqAAqEokgmUzCNE3adTgtRKNRXL++hLfeqsGy8kgkpsV65H3q9XqIxaKw7SauXcsv\nbOYxC48rVMEwDDQajQPxoYhsNjOXOAn5KoqCfr+PYrE4seHheR6DQRSDweDEHYAAAR5EQL7nHBzH\n4dKlFSwvG+h2VWxu3oSum2i3O+B5DYLAYXVVXPg8+WEwTqhEuGNZFgzDgKIoUFUV+/v7sCyLnqMS\nlbIgCPS8kswzk4Uun89D04b4hm/4nxGJRPHyy9+K3d1b+Pzn/xL/5b/8HP72bz+N97733+BP/uQ3\noSht/N7v/QN4nsdv//bP4+///v/FaKTjXe96J375l38Z73rXuwD4FdGHPvQh/NVf/RX6fQ2SlMf7\n3//v8b3f+yOIx+P4wAfeg3/1r/4dPvCB/w2GYeCNN17Fb/3WT+KNN76MYrGC7/7u/xOu66LV6uPV\nV7+CtbVVxONx/MIv/AI++9nPwvM8vPTSS/jIRz5Cc35/9Vd/FX/xF3+BH/mRH8FP/MRPoNVq4Vu/\n9VvxiU98AoIg4Md//MfxO7/zOwBACetzn/scXn755VN5f+LxOJ57bhnb203Icgcsm0YslqRn736I\nh4N6/QauXatgbW3pocedHnXl67oujfwrFAoQBAFvvbUFlmWpMG/8WIaoxVutFjKZDMrl8hzxG0+P\nigIEOA0E5PsUgMxzdrs6QiHfzSoUGiIUigBw4brelKDkUYEQcjKZpFaMRKBFRnu2t7dhWRYdtxkn\nZIZh4DgOXDeECxcuQpblg3PJOBzHRjabRaezj9df/wf89E//NnK5HAqFFXz/9/8viMeT+PCH/284\njo0vfvHP8PLLL+MTn/gEstksfuu3fgtvvvkmfvqnfxnr6/8Tdnc3sb19DxsbG+A4Dp7ni6Ru3boF\nlmXxMz/zIWQyBfzn//wZ9HoKfu3XPgrbtpDNFhCJZBAKhfC+970PL730Ev7oj/4IiUQCH//4x/HB\nD34Qb731FlWB7+zs4FOf+hQ+9alPQdM0fPu3fzs+8pGP4OMf/zh++Id/GDdu3IAsy/jd3/1dADix\npeM8RCIRXL68cpAcpaLZ3IGuOwcz3iGUSjHk8xU6/0uOEgBQ4jrq3+N/J8EPRHl+nOse97KapqHT\n6dDz9UajAYZhsLOzB8AFz/vVLMMw9IfcRjabPdQ9zPPun8UHCHAaCMj3nKPX6+H27RYcJ4FYbAmS\nFD1Qx/qLqOM4qNVU7OzsoVyOoVJ5/LOKPM9PeVkTYxBVVdFqtXDv3j3Yto1EIoFWqw3LcmAYBiRJ\nwr17b+LTn/4k3v3ub4brurAsEx/5yK8hlytCFEX8wz/8f9jYuIHPfW4HruthMBjg6tUKbtx4E1/4\nwhfwHd/xHajX6yiXy2i3dSjK64hGo1hevobhcHhA+C6i0SjC4TBee+0fsbNzDx/96G8ikchCkkr4\nnu/5CP7jf/x2hEIcDMPDpz/9aXAchz/4gz+gi/Rv/MZvoFqt4k//9E/x/ve/H5ZlwbZtfOxjH0My\nmYTnefjABz6A3//934eqqvT8l2GYgw2AB1VVAZwNWQFAPO4hFvMOyMiDZQ1hWRY2Nzexuro6pgi+\nT1YPkte8f5P3dfz+yPObddlFb/fBf1uWhVarBY7jcPXq1Sm1tuOEYRi5qRG/44Bh3MDVKsCpIiDf\ncwxZVnDzpoxEYmXijGq81RcKhZBKZeB5Emq1OkyzhvX1ymMn4AfhC6UyE/O9pmlCVVXYtodXXvlb\nfMM3ZOE4NhzHwT/7Z9+G7/7uH8X/+B+/i0KhgkjEVwMrioK/+7vPwjB0vPyy79XsK4hd2LaFRqMB\nURTxXd/1XfjBH/xB3L27hXe/+1vx4ovfhFwuR8elLMvCW2+9hTt3fhOquoVUSgLD+K+x53m4evUF\nMIzfyhwOR/jHf/xHbG5uTlWqhmHg9ddfxzd/8zdjOByiUqlQRyuGYaivNFGAk3Gio8jqYchr1v89\niHQ6jVgs9lBRgoA/P0zynU8bvimNTOe653UJ0ukoFGXwUOTreQNEo6fbhQjw9kZAvucUmqbh1i0Z\nqdTKTL/dBxdVhmEgSUtotfYRDjewvHxyBeujQjgcPggaiOPd734ZH/3or8NxXPB8jMbq+X67Jv74\nj/8YhUIB0WgU+/t7SCYlfPjDHwPHhcCyIYxGCiqVEDKZDOr1Op599ln82Z/9Gf77f/8r3L59Fz/1\nU9+Pf/7P34sf/MGfhGma4DgO1WoV73nP+/CFL/w/2N19DaIoUvMKjuPAMH4qUqVSRjKZxIsvvohP\nfvKTU89DkiRIkoRUKoVYLDZhZCGKIjzPoypyMk70uIPZJUnC/v7+Q5PvWVlLDodDNJtN8DyP1dXV\nQz2nMxkRW1s78LyTqZUHAw3Z7MNPKAQIMI6AfM8ptrfbiMVKMxedw0QuolhCrbaBQuHss3wPg+v6\nKTmO41DP6XFTifH5V3/8xcZg4Jt9GEafzkqTUZxSqYRnnnnmQJn69fiLv/gdlMtlrK8/g2g0CtOU\n8fzzkyYbrusiFivB8wr4y7/8E/yn//Qh/OiP/gosy0/vyWazuH79OnS9hd/7vV8C4At2HMfBV7/6\njzS8QtcVvPDCC/jkJz/50MHq4XD4iRD2RKNRcBw313JyUZy2taQvcmtB13WaE30UeJ5HLheBomhI\nJI52OnsQpqmgWDz5exogwCwE5HsO4ZvlM5Ck2W20w8jXTzJKo9tVUCodP0B+HlzXpST6IJGSH/L7\ncRHP/cfEUnEWmYMlTlipVBKeZ+DixYt0ttjzPFy+fBlf/eoabtx4Bd/0Td+ESCSCUqmEF154AZ/5\nzB/gp37qB/ADP/BRlEpVbGx8BX/4h6/h277t2/Cud70LP//zP4/r16+jWFyCqjbwyiufQ6WyDsdx\nkc1mEQqFYNs2crkcXnzxm3DhwlX87M/+7/ihH/pZ3L69j4997McQCnHgOAa5XBTf8i3fgkwmg/e+\n97346Ec/isuXL6NWq+HP//zP8X3f9324dOnSQq/j+vo6PvOZz+DWrVvIZDIQRfFESUKngUwmg06n\n81Dke5qVL8nRTSaTE+fRi2BpKYN2ex+meby56X5fhig6wYhRgFNHQL7nEK2WAp6f3w48SpUpCGns\n7W2hUMjNXcAImZIKdDQaTRHoaDSCZVmUTAnh348wDNM/iXE9MRjxM4VZhEIh+vd5SKXi6Hb76Ha7\nCIfDyOVydPbUPxMFUqkkdH1IYwE/8YlP41d+5f/Cz/3c/4FOp4lMJoOv//p3g+d5yLIMhmHwS7/0\nS9jd3UUoxOPq1XfgJ3/yv9JRE9d16eP1PA+/+qv/DT/2Y9+Lf/tv34NyeRUf+tBP4iMf+fcYjVRc\nunQB0WgUf/M3f4MPf/jD+M7v/E70ej2USiW8/PLLdOGed8Y6/rvv+Z7vwec+9zm89NJLGAwG+Ou/\n/utTGzU6LgRBQKvVwnA4PPHI0WlUvpZlUYOScrl8ogD7WCyGq1dzuHGjBqCMcPjo8I5er4tYTMXF\ni8czpQkQYBEEwQrnEF/96j3wfHVuRURSbYrF+wEN4+k3lmWi3d7EpUsCWJYd+/19836yaHIcN1WR\nRiKRKXLlOI4S6WktVMPhkBofbG4qKJW+bubCK8tdMIzvEtXpdFCpVGBZFnXPkuV9PPtsEsvLy4jH\n4/Tx2baNnZ0dvPnmHVhWEalUhiY8ybKM9fV1RKNRNJtN5PP5qYpJUdpgmF1ks6mpdjPJ7yUCLgAT\n3tbnZTFXVRWDwWBm4MIikGUZjuOcyDTE8zx0u10oijJlM3pS+FqJBmw7gXhcnCJhz/MwGGiwLAWS\n5OHChfJj6zwEeLoRkO85xBe/eBup1KW5C/hwOMSXvvQlJBIJ2LYNyzLheb7ymZDpaNTFlSsJ6tpE\nKlLyw3EcVdo+ShAlsKIo1FUqlUphb6+JvT0Ooji9iHc6HfocNjc34Xm+d7UgxA+q6jZefHF9orom\nCUrJZBKiKOLmzV2YZgbxeBK7u7tgGAaRSASj0QitVovmBofDYUQiEQyHGqJRGVevVmHbNlqtFlzX\nPRCITVeJD2b7jgdNPMmG/Z7nYWNjgxqFHBedTgcAji0gGw6HaDQaCIfDKBQKp0qAJDJzd1fBcBgC\nw4TheQwYxoXnDZHLRVAopINWc4AzRUC+5xBf+tIdCMKFQ1vGN2/epN7FJBJwHKpaw7PPSg9lHXia\n8JOKfBcsMuIy/tgcx8HNmzsYDkUajUeqy52dHXieh3Q6DZ7n0ev1sLa2dhCBuItnn70vzLEsC81m\nE47jTPj3WpaFO3dqaLVY6LqF9fULdOPRbrepuGsw0NDtNpBKDXHlShXJZBLRaBTRqG8/2G63EYvF\nkMvl5hKG67oTVTHLspSI5yUjPU50u11YljXRSVkU7XYboVBoYbMQx3HQbrePJah6GJBIStf153hJ\nVydAgLNGQL7nEK+/vgn/3Gp+JWKaJhqNxpRPLYGibOKFF5aOHVx/2iBOV8PhkHo/z1v8LMvCzZvb\naDZZsGyEumJpmoZCoUCTmrrdLgaDPpJJB1eu3G8Hy7KMbrc7dybUdV28/vob6PVc8HwWPJ8Cy4ag\naf2Dx8cjGjVRqaSRSiUPggcMGIaB0WhEAxKGwyEMw0CpVEImM99TmIB4PQ8GA5oJTMj4SWh5Oo6D\nzc1NrK2tHdtootVqgef5hVrG44KqbDb7WDyhAwR4VHj83+wAx0axmMDGhopwOD/3MuFwGJIkodFo\nTGSXAsBoZCCRwGMjXtd10ev1oCgKGIaBKIpYWlqaS1KWZUHTNGiahnDYgSQN0O/3kEzmEY+nYFkW\nPbseDjUAMjxvH8888xzS6fSEyX61Wp1L7oZhIJVK4vnnV6FpGhRlANN0wHFDhMM9XLt2GYlEgj5O\nElxPQIRpPM+DYRjcuHEDnuehXC4jk8nQGd4HnycJVchkMnBdlxJxp9NBKBSaqIofB0KhEJLJJD17\nPQ4WCVYwTRPNZhOu66JSqTz2DWGAAI8CQeV7DmHbNr785S2k0xeOrKpkuQvTnGwZKkodzzwTPRUB\ny3FgWRYURUGv10M8HocoinMJxTAMaJqGwWAAx3Fo0AJpy7quC1VV0Wz2sbGxjUwmi3g8hkwmhmxW\nPBjH6iMajaLf7yOfz8/NMCbY2dmBKIpTlyPCrPX19WM/Z1mWaVs8kUgceCiHaauaEO88GIYx4bpF\nqmJi9PGoYFkWtre3ceHC0Z+5cdTrdQiCMPO1PwtBVYAA5wVB5XsOwXEcisUYmk0Z6XTm0MtKku/o\nJMtdSFLmwL1pgFTq9GZ8j8JgMICiKBiNRkin0zMdiTzPw3A4pBVuKBRCIpFAsVicqXBmWZY6R4XD\nDpaXlycqWuJPvLy8jLW1tSOrLzI7PIskOI6D4zgnSughQi1FUdDtdpFO+0Ke0WgEXdfR7XbpeTIh\n5Gg0Sp8L+Xc2m4XjOJSISTuXVMUnGb85DsjctaqqxyLJeaNGuq6j2WwiEokc6VAVIMDTiOATf05R\nqRTQ6+1gMOAhCIdXdPl8Hnt7e2AYFp4n4/r1wpmfp5HKVFVVsCwLURRRLpcnFmLSYtU0Dbqu0zbu\nysrx4g/HW5uO46DZbGI0GuHatWtU0HQUOp3OoeMwHMfBsqwTKX59a08JyWQS7XYb9XoduVyO5iC7\nrovRaESr/Xa7TeeMxwmZxDCmUn4W73DozzU3Gg3Ytj0xynQWIQCSJGF3dxee56Fe78EwbLiuB54P\nIZ2OIJ8XpwR8D5psOI5DZ4dJ5F+AAG9HBOR7TsFxHK5cqeDmzRpU1Tow/p9dlfnhCkns7HwN73nP\ntSPbrw8DYgfZ7/chCAJKpdJEVWbbNm0nD4dDxONxJBIJFAqFExMGUaqqqop2uw1RFFEqlcAwDAzD\ngKqqh1o+9no9qjieh3A4fGLyJeA4DqVSCYZhoNlsQlVV5PN5RCIRxGKxiRa84ziUkImHNYApQibK\natu2oes6NE1Ds9mkxibE3ORh4bouul0VN282EI+zyGaXEI2G6RFApzNAvd5CIuGhWs3Sz9h45auq\nKjqdDlKpFNbW1p44VXeAAI8SwZnvOYdt26jVmmg0hgBSiMdT4Die5uAOhxpsW0E6zUAUI1BVFZVK\nhVo6RiKRU6mCfYGSAtM0IYoi0uk0JVPTNGk72bIsCIKARCJB83ofBp7n4a233qKL/YPq7tFohFqt\nNrf17HkeNjc3USqVDhU0kci608zXJWSUSCSQy813GyOwbXtCXW0YBliWnTg/jkajdNNBWtSO40xU\nxcd9v23bxt27NahqHCwbgaZpc003DGMIXW/g0qUkcrkstre3IUkSFEUBABQKhUBQFSAAAvJ9auDP\nyapoNPowTQeu64HjWGSzcWQyKZimib09BTs7MmwbKBSKAByEQiaWlpLIZsVjV3WO49DWMsdxNPWH\nYRh6fjsYDKjYiAimTgue56HZbOLNN9/EO9/5zrnVbaPRQCgUmtlWVhQFg8EAlUrl0PsiGwuSPnRa\ncF0X7XYbmqadKJTBsixKyISUOY6bqI5ZlqUtal3XEY1GKRkf9Z67rovbt3fQ76eQSvkbj93dXeRy\nubnnzP7nYhfPPJPC5uYGTXJ6mMCJAAGeNgTk+5RD0zTcvt2AacYRi4mIRmOo1+uIRCKQJAm2bWMw\nUOG6KiqVOCqV4kJzqYqi0MQb4vxE2p6aplExUCKROJNKhzggAf7G47DgAjKn+uCYEXFvWmS8xbep\nlI8k6ZNifNxmnkvWcW5rnJBN0wTP87Q69jwPlmVB13V4njehoH6wKm40Wtja8iCK9zcd/X4fuq4f\narrR7/exs/Mq8vkQXnrppaDaDRDgAQRnvk8xVFXFzZtdxOPLEIT7ix8RYJFzwXQ6C89WutpQAAAT\n60lEQVTLoFarwzRrWF+vTBGw53m0tWzbNkRRRLVaxXA4RKfTwXA4RCQSQSKRQDabPTP16oORchzH\n0fPQeSAOS+12G0tLS/T3siwjFostRAw8z8M0zYd+/PMQDoexvLyMfr+Per1+pEvWUbflp0H5wizP\n8zAajWir2jAMWJZFjxyI8tpxnImqmOM41Go9JBKrE7efSCRoJ+DBytlxHHQ6HYxGI2Qy6+C4eqBk\nDhBgBoJvxVMKXddx82YHgjCtHA6FQigWi6jX69QT2VfkLqHVqoPn61hZ8UnKtm3aWh43lRgMBuh2\nu4jH40gmkyiVSmeuoCZ+zIlEgkbK6bq+kFBLkiRsbm7ShB7XdSHLMqrV6kL3zXEcbNs+0bjRcZBM\nJpFIJNDtdrG1tUVjBR/mPhmGoS1o0vr1PG/q/JjYdfb7fZpe1WpFUCqZE4EZDMMgkUig1+tNtPL7\n/T5kWUYymUA+nz84K74TCKsCBJiBgHyfUuzuthEOF+eO7ITDYWQyGTSbTZTLZUqcoljE3t4mUikV\nuq7TEaBYLAbTNCHLMgRBgCRJjyydx7ZtNJtNWJY1FSm3iIMS4BNGLpdDq9VCtVpFt9tFIpFYeKSJ\nYRjwPA/bts/c+5dhGGSzWaRSKbRaLaqKPs2xHIZhphTWrutOtKvfeOMOZNmFpt0BAKRSKaTTKSQS\nSaRSKdRqNTiOQ6tdACiVSrQa9rsFvt1mMFIUIMAkAvJ9CmEYBhTFhSgevuAlEomD6qaFYrF4EKc2\nQLOpYzjcRaXiV7OO4yAWi0GSpDM3c3gQiqKg0+lAkqSZFpSLki8AapEoyzJUVcXq6urRVxoDaT0/\nKuN9nudRLpepIQUh4bO6f5ZlEY/H6ayuLJsoFIq0SlZVFdvbOzAMA9FoFI7jQNd1CIIw0xnM7xL4\nG5YAAQJMIiDfpxDttgKWXUxZmslksLu7i7t378K2bTiOA4ZhoessMpkMksnkQ822nhSj0QiNRgMs\nyx7qx0zydxdFPp/H66+/jmp1fh7yPPA8D8uyjnWd00A8Hsfq6ioURcH29jbS6TSy2eyZdx08DzSC\nMh6PI5Px3dSI13a324UgCMjn8zNb/z75sgg0nQECTCMg36cQ3e4QsdjRBviapqHRaFB/3fX1dZTL\nZcRiMWiaL/p51MTreR46nQ49TySioXk4TuUL+OfdJ63EHhf5AtMuWZubm8jlcmdqmMJxLCzLATC5\n8eF5nlp7HgbfYMM7E7etAAHOOwLyfQrhOC7C4cMXvNdeew2GYSCXy+HatWsIhUJot9uIRCLgOA4M\nE4Lruo/oEfvQdR2NRgOxWAyrq6sLLdqu6x6rDdvpdLC+vo5+v49MJnOs6peMUz1OHOaSddqQpBi2\ntweIRE521OBvjIaPLY0pQIAnGQH5PqU4qtV36dIl6oZEIEkSFWA9ylbhuN9vsVic8gc+DMepfE3T\nhK7rWFtbA8dxaLfb1F95ETzOyvdBRKNRVKtVqKqKWq22sEvWcZDJiNja2oHnHZ1JPAua1kM2GwlG\njQIEmIEgrfopRCTCwXEOb62SaL5xEAeqVqsFz7MeyaLZ6/WwtbUFjuOwtrZ2LOIFjke+RLjFsv55\ntq7rMAxj4ft6ksiXIJ1OU5/kzc1NqKp6arfN8zyy2TAGA+1E1zfNLgqFICYwQIBZCMj3KUShkICu\nn2wRzmQyMIwhLKt7pspmy7Kwu7sLRVFQqVSQy+VOVF0tKrgi4zMkDm989GhRMAxD042eJLAsi3w+\nT006tra2MBwOT+W2K5UcHKd1bIMRRWkhm2WOvZkKEODtgoB8n0KIYhoM0z/Rma1voBBGPO4baZwF\nut0utre3kUgkUK1WH+q8ctHKt91uI5OZbJ+mUinq3LUonsTql4C4ZGUyfoZzvV5/6DGfaDSKq1fz\n0PVdjEaLdQkUpYV0Wke1evbGKwECnFcE34ynEBzHoViMo9+Xj31dy7LA80NcufIMGo3GBNF4node\nr4dGo4VarYH9/SZkWV54gTcMg1Zlq6urxwplnwcSJ3gYdF2Hbdszjf3z+fxBm32xM+4nmXwJkskk\n1tbWwPM8tra2IMvyQ53hJ5NJPPtsEbZdgyzvwzCmq2rXddHvK5DlTeRyI1y+vAIAgbtVgABzECgh\nnlKUy3mo6g4GgzAEYbFxFNu20e/XcO1aDoIgIJvNYm9vD6VSCYrSw95eD6b5/7d3L99pY9kawD+9\nQRIgwGAM8bKr3XGtdG5W///DnvWo1+1B59FVqRuTwti8JJ4ChKQ7IDhxeNpgLYy/3zAmoNjEH+do\nn73jkKRpA/4gCBAEYwBXKBR05HLWwsrWHyf35HK5nR6P2WTl22w2kc0uPno16+3sOM5G4wJnc333\n3a67ZBmGgb///Rd0Oh1UqzU4TghBUAEICEMfgjDCyYmBbPb47j0QhiFXvkRLMHwPlCzL+PXXEj59\nqqDT8ZBIpFeuQoZDF657g8tL626FmEqlYNs2/vGP/4VlXcA0z2AY82+ZIDhCo9FFtXqDi4skjo6+\nB12v10O9Xoeu60tn6m5jXfj2ej0EQbAy8HO5HMrlMpLJ5NpVtKIoO7ufGoVddskSRRGWZcGyLIxG\no7te17O50D9/76bnfLnyJVqE4XvAVFXFmzenqFRquL39A0ASup76do5XQBAEcN0ePM+BaYZ4+zZ3\nNzgBmI7tq9d9ADkA8tLqZ1EUYZop+L6J33+vIAxDpNMW6vU6RqPR2kH1jxWG4dpBB81mc+Ec3x8p\nioJkMolGo7FyTN7ssc9h5fuzXXfJ0jRt7b16rnyJlmP4HjhZlnF2VkSpNIHjtHFzc41+f4IgCKGq\nErLZGHK53FxVqu/7+PSpCk0r4tUrBdVqFaqqrqxelSQJqVQJ//73e+Tz1yiVSigUCk+2+lm36u12\nuxBFcaOt1mw2iy9fviwck/ej5xq+wPcuWbOt6KfuksWVL9FyDN8XQpZlHB1l720Jr+I4bYzHJixr\numLN5/Oo1WpQFGXpluV4PEaz2YTnxSFJwtL7rLuyqtgqDMMHNdGYnf2t1Wp49erVyseJoojJZPJs\nm0dIknSvS5bjOMjn8zvvkhWGbC1JtAz3hGih6+s2dP17dbCmabAsC7Vaba5yNgxD2LaNm5sbmKaJ\ni4u/ot+fDml/SqtWvrP5ww/Z7rYsC77vrz1i9ZxXvz+adcmajQes1Wo7bSn61LOPiZ4zhi/N6ff7\nGAxkqOr9lVAikYCmafcaUwyHQ1QqlbtZu7MtTEFIodXaXbelRZaFbxiGaLVaa+/1LjI7erTKc6l4\n3tRTdcl66NALopeE/zNozrSb0eLuVtlsFr7vw7ZtNBoN1Ot1ZDIZ5PP5e9uwqhpDr/ewrkgPtay7\nleM4d0eIHkrXdSiKAsdxlj5mNtf3kDxFlyyufImWY/jSnOnW4+K3hiAIyOVy6PV6EEURpVJpYRHW\n7BzwU1/nz+EbBMGjV70zuVwOrVZr6fUfyrbzIrMuWdls9tFdslzXRafTgW3b6Ha7D+qfTfRSPM+K\nEXpS00Bb/gtXlmWcnp6ufI4othwXFVzZtg3TNB91jnVGVVWYpolms4lcLjf39UMO3xnTNGEYBlqt\nFq6urpDJZGBZ1tKVbBAE6HQ6uL520OsJADTU6z4SiRFisRukUiJOTiwkEgmuhonA8KUFFEWBIGzX\n19nzRjCMxwfgJn7edvZ9H47j4OzsbOvnnh09sixrLshVVT24bedFNu2S5bou/vvfKkYjHbHY8V2F\nvOuGsKw0YrEYXHeADx8cGEYTr18Xn2T+MNFzwvClOYZhQNNqa8+8ruL7DjKZk51eVxAEaLfbuL5u\nYzDw0GrZkGUJxWIPJycpjEYjJJPJnRwBkiQJmUwG9XodxWLx3tdEUYQgCPB9/0Ucpfm5S9bsaJKi\nKBgMBnj//gaKUoBl3b/98GOTjXhcRzyuYzDo4cOHCt68KTGA6UXjPV+aIwgCSqXUo8cSDgZ9pNPS\nzkYShmGIarWGf/3r//Dbb2MEQQHJ5F+RSPwFqdRreF4e//lPF//85wd4nr/VEIEfWZaF8XiMwWAw\n97VDq3jexKxLlq7rKJfLqFar+PixClU9QTw+f99/0T1zXTcRhnl8+lSB7/tRXDbRXmL40kKWlYIs\ndzYeIzcTBAGGwwZOTtYPKdj0+T5//hPlcgDDOIdlHUPTYnftMUVRRCwWhyDEkcv9D8rlAFdX1zsJ\n4FUzfw+x4nkTsy5Z5+fnqNebKJf7mEwWh+iy9pKGYWI4NGHbyyvKiQ4dw5cWmg5mKMB1rzcO4CAI\nYNsV/PKLvpOWhWEY4suXa7RaMaTThbkt3lkHpfF4DNd1kclkkMkUcXsr4evX6tavD0wLjyRJmjv7\n+hKKrlYRBAGTSRxnZxffJh1V5z6MrDpqpOsWKpWnPQdOtM8YvrSUYRh4+/YY43EF7XZr6TbhdCB9\nF+12GRcXcRwfz1cIP0a73UatJsCyFj/fbOXrOA6SyeTdKsuyjlGt+uh2uzu5jlwuh2azeW8b9aWH\nb7fbxWSiwzAMFItFmKaJ29vbe9+nVYMVVFXFaKSi1+tFedlEe4MFV7SSYRh49+4UjYaNavULfN+A\nJMUhCCKAEJPJGEAHuZyGfP7x82IXqVbb0PX80q8HQQDP8zAaje4dCRIEAaqaxs2NvZMVuKZpd8du\nZueHVVXdWSeo56jbdSHL33/WiUQChmHAcRxUKhVYlrVBkw0drju8N0mL6KVg+NJaqqqiWDxGoZBD\np9NBvz/EZBJAlkVomoxU6nSrc7WLTBs1AOn08t7Ms+rnRedPDcNEq7VdxfaPstksrq6uYFkWZFmG\n7/toNBowDAOCIECWZZim+WLOsHpe8O0D2Hez4RSzM9Lr7olLkvTgBh5Eh4LhSxv7Pkz96V+r3e5C\nkpIrH+O6LuLx+NLVrSAk0e12dzJdSZZlWJaFz58/IwxjaLdDfP3qYzTyIQiAILhQlBqKxSTS6dRO\nAn+fSZKwtKhNVVWcnJysnSg13ZZ+GR9WiH7G8KW9NBr5EMXVE4na7fbcGdwfiaK8s4pkz/Nwe9vB\np08dlEp5pNNpuK4Kw0jenVedTCYol9sol//E69fTjlCHStPkb7ccllu3CxAEY6jq0zZiIdpXLLii\nvbXul/e7d+9W3i/c1Raw53l4//4rhsMMzs7ewHWn1d+yLN8rupJlGalUFrp+io8fHbRa9k5efx9Z\nVhJA59F/f7pq7u7knjzRc8Twpb2kKCKCYHUThnVNPILAhyxv9xYPwxC//16B72dhmimYpvmtursH\nRZEX3rNUFAXJ5Cv89puzdjbwc6VpGtJpGYPB4/59/X4Hx8fxnXQjI3qOGL60lxIJHZPJdkeFgqAL\nw5jvvPQQ3W4XnY4C00zd/Vk2m4Vt25BlZWnBkCzL0LQ8rq9bW73+PisULAyHzQc3NJlWqdvI5Q53\nW55oHYYv7SXTNBGLjR99z3Y0GsI0w4XjDh/i5saBpt0PCU3ToGkaBoPByrO+um7AticYjUZbXcO+\nSiQSOD1VYdvVjQM4CAI4zjXOz42tfzZEzxnDl/bS9/7Sj2tBOBjYKJW2W1mNRiPYtg9dnz+7nMlk\n0O/3186qFYQUms3DbaNYLB6jVBLQav2J8Xj1h4zh0IVtf8X5ubqzRixEzxVvuNDeSqct6HoZ/X4X\nhrF5YU6368Cyxkgmj7d6/dFoBEFYvDqTZRnptIWrq/LK2cWxmI5ut7bVdewzQRBwenoCw7BRqVzD\ntmUoSgqqOu2/HYYBxuMhPM9BIhHi7dsMksnVR8iIXgKGL+0tSZJweVnChw9/otcL7t13XabTaSEW\na+Pi4nRpIG5q2k5z+XOkUhZ0vbEyfAVBhOfNT/c5NJlMGplMGv1+H/V6G4OBfdeI5ehIxdFRjtvM\nRD9g+NJeU1UVf/vbKf744xq27UBRLBhG8t4xoiAI0O93MJk4yGYlnJ+f7qSKdhqoy4NTFEVcXl6u\neZZw64rr58QwjJ22GCU6VAxf2nuKouDXX88wGAxQrzuo1RoIQ+Vbe8MAguChUDCQzR4jHl/dmOMh\nZFlGGG7XpGM8HsM0+d+MiO7jbwV6NqbD3HW8euXD87y77V5FUebGDe6CYRiIxW636g/teQ6OjnYz\n25iIDsfL2Q+jgyFJEmKxGHRdRywWe5Lgndmm4no8HiMen3BqDxHNYfgSrWBZKUhSd+0xmkV6vTpK\npfVFYkT08jB8iVaQZRmXl3kMBtcrG2r8zHFuUSgA2WzmCa+OiJ4rIXxobziiF6jT6eDjxwZk+QiG\nkVg6tGE8HqHXa6BQAM7Oii9mvi8RPQzDl2hDruvi5qaFen0IIAVN0yGKIsIwxGTiwfMcGIaPUslC\nOs0iKyJajuFL9ECe58G222i3h/D9AKIoIBaTkc0mecaViDbC8CUiIooYC66IiIgixvAlIiKKGMOX\niIgoYgxfIiKiiDF8iYiIIsbwJSIiihjDl4iIKGIMXyIioogxfImIiCLG8CUiIooYw5eIiChiDF8i\nIqKIMXyJiIgixvAlIiKKGMOXiIgoYgxfIiKiiDF8iYiIIsbwJSIiihjDl4iIKGIMXyIioogxfImI\niCLG8CUiIooYw5eIiChiDF8iIqKIMXyJiIgixvAlIiKKGMOXiIgoYgxfIiKiiDF8iYiIIsbwJSIi\nihjDl4iIKGIMXyIioogxfImIiCLG8CUiIooYw5eIiChiDF8iIqKIMXyJiIgixvAlIiKKGMOXiIgo\nYgxfIiKiiDF8iYiIIsbwJSIiihjDl4iIKGIMXyIioogxfImIiCLG8CUiIooYw5eIiChiDF8iIqKI\nMXyJiIgixvAlIiKKGMOXiIgoYgxfIiKiiP0/1/moVm/deTEAAAAASUVORK5CYII=\n", "text": [ "" ] } ], "prompt_number": 5 }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Eigenvector Centrality\n", "\n", "Vertices are not made equal. Some are more important than others. An important vertex are connected other important vertices. We give a vertex a score proportional to the total score of its neighbours. \n", "\n", "An iterative procedure for finding the centrality of each vertex is as follows:\n", "\n", "Start with a vector with the length being the number of nodes, and having each entry 1 (or any non-negative numbers). Knowing the adjacency matrix A, let:\n", "\n", "$$ x' = A x $$\n", "\n", "Repeat for t steps (until one reaches a satisfactory tolerance), i.e.\n", "\n", "$$ x(t) = A^t x(0) $$\n", "\n", "If we rewrite $ x(0) = \\sum_i c_i v_i $, i.e. a linear combination of vectors. Each $v_i$ is an eigenvector of the adjacency matrix.\n", "\n", "We then end up with:\n", "\n", "$$ x(t) = A^t \\sum_i c_i v_i = \\sum_i c_i k_i^t v_i = k_1^t \\sum_i c_i [\\frac{k_i}{k_1}]^t v_i $$\n", "\n", "The $k_i$'s are the eigenvalues of A, and k1 is the largest eigenvalue. As t goes to infinity, all terms for i = 1, ..., t-1 go to zero, and we are left with $ x(t) -> c_1 k_1^t v_1 $ in the limit. Therefore we end up with:\n", "\n", "$$ A x = k_1 x $$\n", "\n", "Or in other words:\n", "\n", "$$ x = k_1 ^{-1} A x $$\n", "\n", "and\n", "\n", "$$ x_i = k_1^{-1} \\sum_j A_{ij} x_j $$\n", "\n", "The eigenvector centrality however, does have some problems, which we will address in the next section (refer to Newman page 172 for details)." ] }, { "cell_type": "code", "collapsed": false, "input": [ "import warnings\n", "\n", "warnings.simplefilter(\"ignore\", np.ComplexWarning) #Ignore warning of complex eigenvalues\n", "\n", "A = nx.to_numpy_matrix(G_kar) # Get adjacency matrix\n", "\n", "evalues, evectors = np.linalg.eig(A)\n", "\n", "k1 = max(evalues.astype(float))\n", "\n", "print (\"Our largest eigenvalue k1 is: {:.3f}.\".format(k1))" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Our largest eigenvalue k1 is: 6.726.\n" ] } ], "prompt_number": 20 }, { "cell_type": "code", "collapsed": false, "input": [ "x = np.ones(len(A)) # Row vector\n", "\n", "x = np.reshape(x, (len(x),1)) # Column vector" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 7 }, { "cell_type": "code", "collapsed": false, "input": [ "xi = (A**200 * x)/k1 # Arbitrary number\n", "\n", "xi = xi/(max(xi)) # Normalized" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 8 }, { "cell_type": "code", "collapsed": false, "input": [ "xi.flat # First column\n", "\n", "xi = xi.ravel().tolist() # For plotting, need to convert matrix" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 9 }, { "cell_type": "code", "collapsed": false, "input": [ "xi = xi[0] # Nested list" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 10 }, { "cell_type": "code", "collapsed": false, "input": [ "plt.bar(range(len(d)), xi, align = 'center')\n", "\n", "plt.title('Eigenvector Centrality Distribution')\n", "\n", "plt.xticks(range(len(d)), d.keys(), rotation='vertical')\n", "\n", "plt.show()" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "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\nRfj5+RnU5+vrK35+fuLn5ycdOnSQS5cuiUjVbCMsLEwKCwtl0qRJ0qFDB4mMjBR7e3vx8/OT/v37\ny5EjRwxm7vcrLS0VEZElS5ZIhw4dpHPnzrJixQoJDg6WpKQkCQkJkZSUFPnP//xPCQ0NlaSkJOnc\nubN88sknIiKSn58v/fv3FxGRgIAAk+0EBASInZ2dREdHG12aN28u3bp1M/idN998U/r06SNXr15V\nXkP1ixV8fHwMyoeFhcm7774rsbGxcvToUeX56uNZfSy6desmlZWVBo9FRIKCgpT/yKKiogzaCA0N\nVeqorKyU3bt3y/PPPy+enp4SHR0tK1asMGjDWB9FRLp27WrwfI8ePUSk6jPSuXNni2MpItKlSxc5\ndeqU0TJarVaCgoIMPnMiIqtWrZIuXbpI+/btLY6liNR6PC2NZfU6Hud4WhpLEbHJeNpaow1vEZG7\nd+/K3r17Zd26dfLNN99IZmamsssgMTFRfvzxR6O/l5CQICJV/8Zfvny5xvrKykrZs2eP8m/V/a5e\nvSrHjh1THufk5MiYMWNkxowZyofFkrKyMvm///s/5XFRUZEcPnxY9u/fb9CnX3/91ar6zp8/L9eu\nXRMRkbNnz8rXX38tR44cUdYfP35c1q1bJydPnjT6+4MHD5aUlBRl94OIyOXLl+Wtt96SmJiYWoeN\niBgE/Pz58w3K3guDixcvypgxY+Tll1+WGzduGISNt7e3vPfee/Luu++Kr6+vQdjcC4APP/xQBg8e\nLDt37pRFixbJiy++KDqdTv7yl7/IhAkTjG4MKyoqZOvWrfLss89Kz549JSMjQ9LS0kSr1cr69etF\nRESn00lkZKSIiPTq1Uv5bG3cuFGGDBmi1NW5c2eLYykisnbtWpPvxYYNG2TWrFmyffv2Guu2bt0q\n/v7+Vo1lbcfT0liKSL0YT3Njea89W42nLTXq8K5vNm3aJPPmzXvc3Xgo165dk9dee03Zr9iyZUsJ\nDAyU1157Ta5du1brsBER+fOf/6zsp6/u9OnTMnr0aIPnNm7cKJGRkdK2bVvluUWLFklycrKy3NsX\neenSJZk4caJS7ocffpCnnnpKwsPDJTQ0VOLi4mT58uVSXl4uTz/9tNlx+Pnnn2XgwIGSkJAg2dnZ\nEhMTIy4uLtK9e3fZv3+/iIgcOXJEIiIixM3NTfr06aNsYK9cuSIffPCBxbG858SJE7Jjxw7luMs9\nW7Zssbj+QcayNuP5ww8/yNixY42OpYjI2LFj68V47tmzR/7xj3+IiMiuXbvknXfekR07dhj0xVwZ\nU+N55swZo+NpCwxveuQ+/fRTs+vv7YZ52PWmypSVlSn/4dS2D9bUUdv11ftx4sQJ+dvf/lYjEO4d\nJPzggw+kc+fO8u///u/Svn172bBhg1ImPDzc4vp7bZgL//vLVB/P6huIv/3tb2Y3IOZeh7l+3Ctj\nqQ1z7dwrs2fPHvnll19EpGqDUj14586dK1FRURIRESGvvfaaREVFyeuvvy79+/eXt99+2+oy1mwA\nbInhTY+cpV1BtV3f0NqwJngtnelkab01bdR2A1EXbVhTh6XgtXRWmIhYLGNNuNtaoz3bhGzL3Nk5\n+fn5tV5f2zauXLlS6zYs1WGLNvLz87Fy5UocPHgQzs7OyM7OxujRo5GdnY2XX35ZKScWznSytP7+\nNsaMGVOjDUtlaru+rupIT0/HsWPHUF5eDk9PT+Tm5sLNzQ2zZs1CVFSUxbPCAFgsY6mN1157zeR7\n/rAY3mQTV65cQUZGBtzd3Wus69OnT63XN6Y27g/e3bt3GwQvALRt2xZHjhxBeHg4AMDZ2Rnff/89\nkpKScOzYMQwcONDs+uDgYLPhDtR+A2FpvS3asKYOS8HbrFkz3Lx5Ey1atMChQ4eU96KoqEgJb0tl\nrNkA2Nwjmc9To2Pp7Jzarm9MbVg6BVXE8plOltZb04alMrVdb4s2rKnD0im71pwVZqmMpTYeBd6Y\niqieycnJgYODA5544gmD50UEP/30E/r161cnbVgq4+vrW6v1tmjDmjoiIiLQvHnzGmNQUFCAy5cv\nm92NZa3bt28/8jbux/AmIlKhRntjKiIiNWN4ExGpEMObiEiFGN5ERCr0/xae1MF6kfR2AAAAAElF\nTkSuQmCC\n", "text": [ "" ] } ], "prompt_number": 11 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Notice that although the president and instructor are still the two most central, people connected to both of them have \"risen\" in importance." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Katz Centrality\n", "\n", "With eigenvector centrality, only vertices in a strongly connected component with two or more vertices can have non-zero eigenvector centrality. For acyclic networks, all vertices will have centrality zero. For citation networks, which are typically acyclic, we run into a problem. To solve the problem, we give each vertex some small amount of centrality inherently. In essence, we make:\n", "\n", "$$ x_i = \\alpha \\sum_j A_{ij} x_j + \\beta, $$\n", "\n", "where alpha and beta are constants greater than 0. The problem with eigenvector centrality is that vertices with 0 in-degree do not have any centrality (even with high out-degree). When we add some centrality to it, other vertices get an increase in being pointed to by it, but it does not make other points less central relatively. In matrix form, we have:\n", "\n", "$$ x = \\alpha A x + \\beta \\cdot 1 $$\n", "\n", "For convenience, beta is set to be 1, and with rearrangement we get:\n", "\n", "$$ x = \\beta ( I - \\alpha A ) ^ {-1} \\cdot 1, $$\n", "\n", "or simply,\n", "\n", "$$ x = ( I - \\alpha A ) ^ {-1} \\cdot 1 $$\n", "\n", "This is known as the Katz centrality. The problem lies in choosing the value for alpha now. \n", "\n", "If we set alpha to be 0, all vertices will have same centrality beta. If we set alpha too large, the centralities will diverge, i.e., when the inverse of diverges. When $det(I - \\alpha A) = 0$, there is divergence, but notice we can rewrite the equation as:\n", "\n", "$$det(A-\\alpha^{-1} I) = 0$$\n", "\n", "The solutions to this equation are the values to which the inverse of alpha are the eigenvalues of the adjacency matrix. The determinant first crosses at the largest eigenvalue, i.e., when $\\alpha = 1/k_1$. We need to choose a value less than the inverse of the largest eigenvalue for the centrality to converge.\n", "\n", "Inverting the matrix may be slow for a large network, so instead, we iteratively for the centrality vector x as such:\n", "\n", "$$ x^{(t)} = \\alpha A x^{(t-1)} + \\beta \\cdot 1, $$\n", "\n", "where we choose an arbitrary $x^{(0)}$, such as the zero vector.\n", "\n", "A demonstration is shown below." ] }, { "cell_type": "code", "collapsed": false, "input": [ "### Katz Centrality ###\n", "\n", "one_vector = np.ones((len(A),1))\n", "\n", "alpha = 1/k1 - 0.1\n", "\n", "IsizeA = np.ones_like(A)\n", "\n", "x = np.zeros((len(A),1))\n", "\n", "for i in range(50000): # Arbitrary\n", " x = alpha*A*x + one_vector\n", " \n", "x = x/max(x)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 14 }, { "cell_type": "code", "collapsed": false, "input": [ "plt.bar(range(len(d)), x, align = 'center')\n", "\n", "plt.title('Katz Centrality Distribution')\n", "\n", "plt.xticks(range(len(d)), d.keys(), rotation='vertical')\n", "\n", "plt.show()" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "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\n", "text": [ "" ] } ], "prompt_number": 15 }, { "cell_type": "markdown", "metadata": {}, "source": [ "One problem of Katz centrality is that a high centrality points gives other points too much centrality. For example, google linking to me gives me a very high centrality, but it also gives a million others high centrality too. Cue in PageRank." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## PageRank\n", "\n", "We extend the Katz centrality definition by incorporating one's neighbours' out-degree in the calculation. If they point to many others, their contribution to our centrality is diluted. Mathematically, this is:\n", "\n", "$$ x_i = \\alpha \\sum_j A_{ij}\\frac{ x_j }{ k_j^{out} } + \\beta $$\n", "\n", "One problem is when there is a node with zero out degree, we get 0/0 since $A_ij$ also equals 0 for that node. Setting the out-degree for such vertices to any non-zero value does not change the answer.\n", "\n", "In matrix form, we have:\n", "\n", "$$ x = \\alpha A D^{-1}x + \\beta \\cdot 1, $$\n", "\n", "where D is a diagonal matrix with the out-degree along its diagonal or 1, if the out-degree is 0. Setting beta to 1 by convention and rearranging the equation we get: \n", "\n", "$$ x = \\beta ( I - \\alpha A D^{-1})^{-1} \\cdot 1 = D(D - \\alpha A)^{-1} \\cdot 1 $$\n", "\n", "To choose alpha by the same logic as before, we set it to be the inverse of the largest eigenvalue of $AD^{-1}$. \n", "\n", "For an undirected network with no beta, we end up with ordinary degree centrality.\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Hubs and Authorities\n", "\n", "Some vertices should have high centrality if it points to others with high centrality. A paper may cite an authoritative source for example. A website might contain links to useful pages on a certain topic. \n", "\n", "We have to distinguish two types of nodes, authorities, and hubs. Authorities contain useful information, and hubs tell us where the authorities are. They only exist in directed networks.\n", "\n", "With the papers analogy, an important paper (authoritative) is cited by many important hubs. Important hubs cite many authoritative papers. One can have high authority and hub centrality. \n", "\n", "Let $x_i$ and $y_i$ be a vertex i's authority and hub centrality measure.\n", "\n", "In matrix form, we have:\n", "\n", "$$ x = \\alpha A y, $$ and, \n", "$$ y = \\beta A^T x, $$\n", "\n", "where alpha and beta are constants.\n", "\n", "Combining the two equations, we get:\n", "\n", "$$AA^Tx=\\lambda x,$$\n", "and,\n", "$$A^TAy=\\lambda y,$$\n", "\n", "where $\\lambda = (\\alpha\\beta)^{-1}$. The eigenvectors of $AA^T$ and $A^TA$ with same eigenvalue will be the authority and hub centralities. Luckily, the eigenvectors are the ones with the leading eigenvalues, which happen to be the same for both matrices. Surprisingly, all the eigenvalues are the same for the two matrices. For a proof, consult Newman page 180. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Closeness Centrality\n", "\n", "The mean distance from a vertex i to all other vertices is called the closeness centrality. It is the average geodesic distance, or the shortest path between all nodes i and j for a vertex i, in essence:\n", "\n", "$$ l_i = \\frac{1}{n} \\sum_j d_{ij} $$\n", "\n", "A low value means one is \"closer\" to most points relative to one with higher values. \n", "\n", "To be consistent with other measures of centrality, the closeness centrality is defined as the inverse of the mean distance, which is:\n", "\n", "$$ C_i = \\frac{n}{\\sum_j d_{ij}} $$\n", "\n", "One problem with this measure is that the range of the values of closeness centrality is small, a slight change in structure can change the values greatly. \n", "\n", "What if there's more than one component to a network? One solution would be to use the harmonic mean distance between vertices. This means taking the average of the inverse distances:\n", "\n", "$$ C_i' = \\frac {1}{n-1} \\sum_{j \\neq i } \\frac{1}{d_{ij}} $$\n", "\n", "If i and j are in different components then that $d_{ij}$ is zero for that term, which is what we want. \n", "\n", "Another important measure is the mean distance between pairs of vertices:\n", "\n", "$$ l = \\frac{1}{n} \\sum_i l_i $$\n", "\n", "We run into a problem again when there is more than 1 component. Again we take the harmonic mean distance, which is the inverse of the mean harmonic mean closeness:\n", "\n", "$$ l' = [\\frac{\\sum_i C_i'}{n}]^{-1} $$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Betweenness Centrality\n", "\n", "A middleman would have a high betweenness centrality. If information between people have to go through that person, that person is \"between\" everyone. The number of geodesic paths the vertex lies on is the betweenness centrality of that vertex.\n", "\n", "We let $x_i = \\sum_{st} n_{st}^i$, where each $n_{st}^i$ is 1 if the vertex i lies on the geodesic path from s to t and 0 otherwise. One problem is there may be more than 1 geodesic path between two vertices. If we define $g_{st}$ as the total number of geodesic paths between s and t, then:\n", "\n", "$$ x_i = \\sum_{st} \\frac{n_{st}^i}{g_{st}} $$\n", "\n", "In the case where there are no paths between s and t, we take $\\frac{n_{st}^i}{g_{st}}$ to be 0. If traffic flows at a constant rate along all paths, then $x_i$ is proportional to the average rate at which things pass through vertex i. Some like to normalize the measure by dividing by the total number of vertex pairs, resulting in:\n", "\n", "$$ x_i = \\frac{1}{n^2} \\sum_{st} \\frac{n_{st}^i}{g_{st}} $$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Groups of Vertices\n", "\n", "How do we group people together in a network? These groups often tell us something about the network and the groups of nodes. Let us explore some of these constructs.\n", "\n", "### Cliques, plexes, and cores\n", "\n", "A clique is a subset of vertices in an undirected network where an edge connects every single node. We think of a clique as the maximal subset. \n", "\n", "At times we have something such as a near-clique. We have a construct takes into account this phenomenon called a k-plex. If you have n vertices, a k-plex of size n has each vertex connected to at least n - k others. For k = 1, we have a normal clique, and k = 2, you're connected to all but one of all the other vertices. \n", "\n", "A k-core is the maximal subset of vertices such that it is connected to at least k others in the subset.\n", "\n", "### Components and k-components\n", "\n", "A component is a maximal subset of vertices such that there is a path from every vertex to another. A k-(connected)-component is a maximal subset of vertices that is reachable from each of the others by at least k vertex-independent paths. A 1-component means there is at least one path between each pair of vertices, and for a tricomponent, at least 3. \n", "\n", "The number of vertex independent paths between two nodes is the minimum number of vertices that needs to be removed to disconnect them. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Transitivity\n", "\n", "In mathematics, a relationship is transitive is we say a = b, and b = c, then a = c. So \"=\" is a transitive relation. With networks however, just because a is connected to b, and b to c, does not imply a is connected to c. If a IS connected to c, then we say the three are a closed triad. \n", "\n", "The path abc is of length two, it is said to closed if a is connected to c, forming a triangle. We can find how \"transitive\" a network is by defining a clustering coefficient to be:\n", "\n", "$$ C = \\text{(number of closed paths of length two) / (number of paths of length two)} $$\n", "\n", "Note that the path abc and cba are distinct. In the triangle, there are six paths of length two. So we can rewrite C as:\n", "\n", "$$ C = \\text{(number of triangles) x 6} / \\text{(number of paths of length two)} $$\n", "\n", "Another more popular one is:\n", "\n", "$$ C = \\text{(number of triangles) x 3} / \\text{(number of connected triples)} $$\n", "\n", "A connected triple means the vertices abc are connected, even though ac need not be present (we need ab and bc). \n", "\n", "\n", "### Local clustering redundancy\n", "\n", "The local clustering coefficient is the clustering coefficient a single vertex i. It is defined as:\n", "\n", "$$ C_i = \\text{(number of pairs of neighbours of i that are connected)} / \\text{(number of pairs of neighbours of i)}, $$\n", "\n", "where\n", "\n", "$$ \\text{number of pairs of neighbours of i} = k_i (k_i - 1) / 2 $$\n", "\n", "The smaller the number, the more \"important\" the vertex, as information has to flow through that vertex to reach the others.\n", "\n", "The coefficient takes real values from 0 to 1. \n", "\n", "The global clustering coefficient is the mean of all the local clustering coefficients, i.e.:\n", "\n", "$$ C_{global} = \\frac {1}{n} \\sum_{i=1}^n C_i $$\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Reciprocity\n", "\n", "In a directed network, if there is an edge from i to j and back from j to i, then the edge is reciprocated. Reciprocity are the number of edges that are reciprocated over the total number of edges:\n", "\n", "$$ r = \\frac{1}{m} \\sum_{ij} A_{ij}A_{ji} = \\frac{1}{m}Tr A^2 $$\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Signed edges and structural balance\n", "\n", "Imagine a friendship network where people interact but there's positive and negative relationships. The edges are signed edges, and the networks are signed networks. \n", "\n", "Let us consider some friendship triangles.\n", "\n", "First, let's look at one where everyone likes each other (has positive relationships):" ] }, { "cell_type": "code", "collapsed": false, "input": [ "## Balanced friendship triangle ##\n", "\n", "G = nx.complete_graph(3)\n", "\n", "pos = nx.spring_layout(G)\n", "\n", "# nodes\n", "\n", "nx.draw_networkx_nodes(G, pos = pos, nodelist=[0,1,2], node_color='y', alpha = 1)\n", "\n", "# edges\n", "\n", "nx.draw_networkx_edges(G,pos= pos,\n", " edgelist=[(0,1),(1,2),(2,0)],\n", " width=8,alpha=0.5,edge_color='y')\n", "\n", "# some labels\n", "\n", "labels1={}\n", "\n", "labels1 = {(0,1):'+', (1,2):'+', (2,0):'+'}\n", "\n", "nx.draw(G,pos = pos, with_labels=True, node_color='y', alpha = 0.5)\n", "\n", "nx.draw_networkx_edge_labels(G,pos,edge_labels = labels1,font_size=16)\n", "\n", "plt.axis('off')\n", "\n", "plt.show() # display\n", "\n", "\n" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "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\n", "text": [ "" ] } ], "prompt_number": 16 }, { "cell_type": "markdown", "metadata": {}, "source": [ "In the above friendship triangle, everyone has positive relationships with everyone else. We say that the above configuration is balanced, and stable. The triangle is not going to break apart.\n", "\n", "Now consider an alternative relationship." ] }, { "cell_type": "code", "collapsed": false, "input": [ "## Some friendship triangles ##\n", "\n", "G = nx.complete_graph(3)\n", "\n", "pos = nx.spring_layout(G)\n", "\n", "# nodes\n", "\n", "nx.draw_networkx_nodes(G, pos = pos, nodelist=[0,1,2])\n", "\n", "# edges\n", "\n", "nx.draw_networkx_edges(G,pos= pos,\n", " edgelist=[(0,1),(1,2),(2,0)],\n", " width=8,alpha=0.5,edge_color='r')\n", "\n", "# some labels\n", "\n", "labels1={}\n", "\n", "labels1 = {(0,1):'+', (1,2):'-', (2,0):'+'}\n", "\n", "nx.draw(G,pos = pos, with_labels=True)\n", "\n", "nx.draw_networkx_edge_labels(G,pos,edge_labels = labels1,font_size=16)\n", "\n", "plt.axis('off')\n", "\n", "plt.show() # display" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "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\nCxYwonnK5HZmzjT5/eTJyu8HEauhgXqnk6CyMgL37jWLsURHg/vKW9JlKvzSeyzLDMFPTjYLa3hR\nUVfHc7t388TOnUwbM4b1SUlc5Su/DwqC+fPNHb4m6Rr8GhrM3X59vemKK+dNhV96nsMB+/ebO3wf\n+f2xsjIeT0nh1QMH+NbMmaxPSmJRdLT3zxs50uT3iYnK70XOgwq/9JyzZ135fW1tu92WZfF5djYb\n7XY+z87mjoULuXfpUmLPld+39L9vs4iKiHSeCr90v4ICc3efluYzv/9TRgYbk5OprK/n/qQkbpk/\nn1Bv+b3N5srvJ01Sfi/SDVT4pXtYlplQKzkZTp70ekh5bS1/3L2bP+zcycyxY3lg+XKunDGDAG/F\nPCgIFi40/e/dl9gTv5Gdnc2wYcOI1PrF3U6FX76ahgZXfn/6tNdDjpw+zeMpKbx28CDXxMezPimJ\nBVFR3j9v5EhT7BMTwb3ftvidSy+9lCFDhvDxxx/39akMOuroLOenstLk97t3+8zv/3HqFBvtdr7M\nyeHOxETS163znFLXXXS0iXMSEpTfCwD79u3jqaee6uvTGJRU+KVr8vNd+b3T2W53Q1MTb6SnszE5\nmRqHg/uTknj9+usJ8TYDps0G8fGm4E+cqPxeWr399ttUVlZyySWX9PWpDEoq/NIxp9OV35865fWQ\nstpant21i82pqcyOiOChf/kXrvCV3w8daubPSUqC8PAePnkZiAoLC7nrrrsYp/mVeoQyfvGtoQH2\n7TN3+G5zp7jLOn2ax+x2Xk9L49pZs7h/2TLm+8rvw8JMfr9okfJ7OSeHw0FjYyPD9fekR6jwS3uV\nlZCSYvL7urp2uy3L4rOTJ9lot5OSm8udiYmsW7KEaF/5fUyMiXPmzFF+L9IPqPCLS36+iXPS033m\n91vS0tiYnEx9UxPrk5K4+YILGO4rv581yxT8CROU34t3lmUm5xsyxPzoxqBXqPD7O6fTrG2anAzZ\n2V4PKa2p4dldu3gyNZW548ezPimJldOn+87vW/rfK7+XjhQWwjPPmF5d8+dTM3s2AUOGEBwcrItA\nD1Ljrr+qr3fl9+XlXg85VFrKY3Y7W9PT+c6sWXx8003M8zWYZtQoV34fHNyDJy6DSnq6+W9BARQU\nkHTttbxy333MX7nSTM1hs5mbCT0xdisVfn9z5ozJ7/fs8Znfbz9xgo12O7vy87l78WIO3XMPkb5W\n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\n", "text": [ "" ] } ], "prompt_number": 17 }, { "cell_type": "markdown", "metadata": {}, "source": [ "In the above friendship triangle, person '0' is friends with person '1' and person '2', but person '1' and '2' do not like each other. This may cause some turbulence in their relationship, and the friendship triangle would \"fall apart\". Person '0' may have to choose to maintain a relationship with only person '1' or person '2'. \n", "\n", "A network shows balance if it contains loops only with even numbers of minus signs. \n", "\n", "Harary's theorem states that:\n", "\n", "A balanced network can be divided into connected groups of vertices such that all connections between members of the same group are positive and all connections between members of different groups are negative.\n", "\n", "All acquaintances within \"clusters\" have positive connections and all acquaintances in different clusters have negative connections." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Similarity\n", "\n", "How does one go about finding similarity between vertices in a network based on only the structure of the network? \n", "\n", "We have two approaches: structural equivalence and regular equivalence. \n", "\n", "If two vertices share many of the same neighbours, they are structurally equivalent.\n", "\n", "If two vertices have neighbours who are themselves similar, they are regularly equivalent. For example, a movie director in Japan and a movie director in France may not know the same people, but the nature of their ties are similar. They know actors, writers, producers, artists, and etc. \n", "\n", "We shall go about quantifying such constructs mathematically.\n", "\n", "### Cosine similarity\n", "\n", "The number of common neighbours of two vertices is:\n", "\n", "$$ n_{ij} = \\sum_k A_{ik} A_{kj} $$\n", "\n", "However, we need to normalize the number depending on the number of nodes in the network. Dividing by n would give vertices with small degree very little differentiation between each other. \n", "\n", "The cosine similarity takes the ith and jth rows or columns of the adjacency matrix as vectors uses the cosine of the angle between them as the measurement of similarity. \n", "\n", "In terms of matrix multiplication we can write the cosine of the angle as:\n", "\n", "$$ \\sigma_{ij} = cos \\theta = \\frac{x \\cdot y} {|x| |y|} = \\frac{\\sum_k A_{ik} A_{kj}} {\\sqrt {\\sum_k A_{ik}^2} \\sqrt {\\sum_k A_{jk}^2}} = \\frac{n_{ij}}{\\sqrt{k_i k_j}} $$\n", "\n", "The last equation is assuming that we have an unweighted, undirected graph where the entries in the matrix are either 0 or 1. If the degree of vertex i or j is zero, then we define sigma to be zero as well." ] }, { "cell_type": "code", "collapsed": false, "input": [ "### Get similarity between sensei and president ###\n", "\n", "n0_33 = 0\n", "\n", "for i in range(0,G_kar.number_of_nodes()):\n", "\n", " n0_33 = n0_33 + float(A[0,i] * A[i,33])\n", " \n", "sigma0_33 = n0_33 / np.sqrt(nx.degree(G_kar, 0) * nx.degree(G_kar, 33))\n", "\n", "print (\"The cosine similarity of the sensei and the president is: {:.2f}\".format(sigma0_33))" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "The cosine similarity of the sensei and the president is: 0.24\n" ] } ], "prompt_number": 18 }, { "cell_type": "markdown", "metadata": {}, "source": [ "The number above is an interesting observation as the sensei and president are \"highly connected\", but do not share many connections." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Pearson coefficients\n", "\n", "Another way to normalize divide by the expected count if the vertices could chose their neighbours at random. \n", "\n", "If vertices i and j chooses at random $k_i$ and $k_j$ neighbours, from the n vertices in the network. Assuming their choices are uniformly at random. If we assume a large network, there is $k_i / n$ probability that j chooses the same neighbour as i, for each succeeding choice as well (because the network is large). Since there are $k_j$ choices vertex j makes, there will be expected number of common neighbours $k_i k_j / n$. \n", "\n", "One measure of similarity is the actual number of common neighbours minus the expected if they choose their neighbours randomly, in essence:\n", "\n", "$$\n", "\\begin{aligned}\n", "\\sum_k A_{ik} A_{jk} - \\frac {k_i k_j}{n} \n", "&= \\sum_k A_{ik} A_{jk} - \\frac{1}{n} \\sum_k A_{ik} \\sum_l A_{jl} \\\\\n", "&= \\sum_k A_{ik} A_{jk} - n \\langle A_i \\rangle \\langle A_j \\rangle \\\\\n", "&= \\sum_k ( A_{ik} - \\langle A_i \\rangle) (A_{jk} - \\langle A_j \\rangle) \\\\\n", "&= cov(A_i, A_j)\n", "\\end{aligned}\n", "$$\n", "\n", "The above is the equation of a covariance. To normalize the covariance, we divide by the standard deviations of the vertices i and j. We end up with:\n", "\n", "$$ r_{ij} = \\frac{cov(A_i, A_j)} {\\sqrt{\\sum_k ( A_{ik} - \\langle A_i \\rangle)^2} \\sqrt{\\sum_k ( A_{jk} - \\langle A_j \\rangle)^2 }} $$\n", "\n", "The Pearson coefficient ranges from -1 to 1, with 1 being \"identical\", and -1 being \"opposites\" (similar vs dissimilar). Let us investigate the Pearson coefficient of the sensei and the president." ] }, { "cell_type": "code", "collapsed": false, "input": [ "### Pearson coefficients of sensei and president ###\n", "\n", "cov0_33 = float(n0_33) - (float(G_kar.degree(0))*float(G_kar.degree(33))) / float(G_kar.number_of_nodes())\n", "\n", "meani = (A.sum(axis=0))[0,0]/G_kar.number_of_nodes()\n", "\n", "meanj = (A.sum(axis=0))[0,33]/G_kar.number_of_nodes()\n", "\n", "r0_33 = cov0_33 / ( np.sqrt(np.sum(np.square(A[0,:] - meani))) * np.sqrt(np.sum(np.square(A[33,:] - meanj))) )\n", "\n", "print (\"The Pearson coefficient of the sensei and president is: {:.3f}\".format(r0_33))" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "The Pearson coefficient of the sensei and president is: -0.471\n" ] } ], "prompt_number": 19 }, { "cell_type": "markdown", "metadata": {}, "source": [ "This measure of structural equivalence gives us another insight into the dynamics of the karate network. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Other measures of structural equivalence\n", "\n", "An alternative to cosine similarity is taking a different approach to normalization. Dividing the number of common neighbours by the expected number of common neighbours we get:\n", "\n", "$$ \\frac {n_{ij}}{k_i k_j /n} $$\n", "\n" ] }, { "cell_type": "code", "collapsed": false, "input": [ "### Alternative to cosine similarity ###\n", "\n", "cosalt = G_kar.number_of_nodes() * n0_33 / (G_kar.degree(0) * G_kar.degree(33))\n", "\n", "print cosalt" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "0.5\n" ] } ], "prompt_number": 155 }, { "cell_type": "markdown", "metadata": {}, "source": [ "The Euclidean distance is the number of neighbours that differ between two vertices. It is a dissimilarity measure. \n", "\n", "The maximum possible value for the distance measure is when they have no neighbours in common, so $d_{ij} = k_i + k_j$.\n", "\n", "Hence, we usually write the normalized Euclidean distance of two vertices as:\n", "\n", "$$ \\frac{\\sum_k (A_{ik} - A_{jk})^2}{k_i + k_j} = 1 - 2\\frac{n_{ij}}{k_i+k_j} $$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Regular equivalence\n", "\n", "Regular equivalence isn't a measure of how many neighbours two vertices share in common, but how similar the neighbours are.\n", "\n", "A similarity score $\\sigma_{ij}$ is high is i and j have neighbours k and l that themselves have high similarity. In an undirected network, it is:\n", "\n", "$$ \\sigma_{ij} = \\alpha \\sum_{kl}A_{ik}A_{jl}\\sigma_{kl}, $$\n", "\n", "or in matrix form:\n", "\n", "$$ \\sigma = \\alpha A \\alpha A $$\n", "\n", "The above equation however, does not give a vertex high similarity to itself, which is counterintuitive. Introduction of an extra diagonal term, and considering only one neighbour and if i has a neighbour k that is itself similar to j:\n", "\n", "$$ \\sigma_{ij} = \\alpha \\sum_k A_{ik} \\sigma_{kj} + \\delta_{ij}, $$\n", "\n", "or in matrix notation:\n", "\n", "$$ \\sigma = \\alpha A \\sigma + I = (I - \\alpha A )^{-1} $$\n", "\n", "We need to define alpha to be less than 1 to give longer paths less weight than shorter ones, so that vertices are more similar if they are connected by shorter paths. We choose alpha in this case to be similar to that of Katz centrality. It is less than 1/k1, where k1 is the largest eigenvalue of the adjacency matrix.\n", "\n", "We can modify this further which takes away the characteristic of giving vertices with high degree, high similarity. We divide by the vertex degree giving:\n", "\n", "$$ \\sigma_{ij} = \\alpha / k_i \\sum_k A_{ik} \\sigma_{kj} + \\delta_{ij}, $$\n", "\n", "or \n", "\n", "$$ \\sigma = (I - \\alpha D^{-1} A)^{-1} $$\n", "\n", "where the matrix D has the degree of each vertex along its diagonal. " ] }, { "cell_type": "code", "collapsed": false, "input": [ "### Regular equivalence of sensei and president ###\n", "\n", "Id = np.identity(len(A))\n", "\n", "D = Id* np.sum(A,axis=1)\n", "\n", "sigma = (Id - alpha * (D.I) * A).I\n", "\n", "print (\"The regular equivalence measure of the sensei and president is: {:.4f}.\".format(sigma[0,33]))" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "The regular equivalence measure of the sensei and president is: 0.0027\n" ] } ], "prompt_number": 36 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Homophily and assortative mixing\n", "\n", "People associate with those similar to themselves. Scientists call this homophily or assortative mixing.\n", "\n", "Disassortative mixing is the opposite phenomonen, and can be observed in natural events such as marriage (majority of relationships are with those of opposite sex).\n", "\n", "#### Assortative mixing by enumerative characteristics\n", "\n", "We could classify vertices as a certain type. For example, colours. A way to quantify assortativity is to see what fraction of edges run between vertices of the same type, and then subtract from the fraction the expected value of the fraction of such edges if the edges were positioned at random without regard for vertex type. \n", "\n", "For the first part, mathematically, this means (for the total number of edges):\n", "\n", "$$ \\sum_{edges (i,j)} \\delta(c_i,c_j) = \\frac{1}{2} \\sum_{ij} A_{ij} \\delta(c_i,c_j) $$\n", "\n", "At a vertex i with degree $k_i$, the chance of having a edge connected to vertex j with degree $k_j$ is $k_j/2m$ if connections are purely random. Since there are $k_i$ edges attached to vertex i, then the total expected number of edges is $k_i k_j /2m$\n", "\n", "The expected number of edges between all pairs of vertices of the same type (eliminating double-counting by dividing by 2) is:\n", "\n", "$$ \\frac{1}{2} \\sum_{ij} \\frac{k_i k_j}{2m} \\delta(c_i,c_j) $$\n", "\n", "The above two equations are in terms of total edges, but we are interested in the fraction, so we divide by m, the total number of edges, yielding:\n", "\n", "$$ Q = \\frac{1}{2m}\\sum_{ij}(A_{ij} - \\frac{k_i k_j}{2m}) \\delta(c_i,c_j) $$\n", "\n", "Here, Q is known as the modularity. It is positive when there are more edges between same types of vertices and negative if there are less than we'd expect by chance." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Assortative mixing by scalar characteristics\n", "\n", "Age varies on a scale, but colour does not. One can say that a 15 year old is more like a 14 year old than a 30 year old, but an orange vertex is no more like a blue vertex than a green. \n", "\n", "To account for this, we use a covariance measure. Letting $x_i$ be the value of age for example, at vertex i, the mean of $x_i$ at the end of an edge is:\n", "\n", "$$ \\mu = \\frac{\\sum_{ij} A_{ij} x_i} {\\sum_{ij} A_{ij}} = \\frac {1}{2m} \\sum_i k_i x_i $$\n", "\n", "The covariance is then:\n", "\n", "$$ cov(x_i, x_j) = \\frac{\\sum_{ij} A_{ij} (x_i -\\mu ) (x_j -\\mu)} {\\sum_{ij} A_{ij}} = \\frac{1}{2m}\\sum_{ij}(A_{ij} - \\frac{k_i k_j}{2m}) x_i x_j $$\n", "\n", "Usually, we normalize the measure, by dividing by what would be the value for \"perfect mixing\", i.e. when $x_i = x_j$, we get the assortativity coefficient. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Assortative mixing by degree\n", "\n", "Perhaps social people hang out with more social people, and hermits with hermits. This is assortative mixing by degree. We get clumps/cores of social people, and a periphery of hermits. Again, we use a covariance measure but instead of a value $x_i$, we substitute it with a degree $k_i$. What we end up with is:\n", "\n", "$$ cov(x_i, x_j) = \\frac{1}{2m}\\sum_{ij}(A_{ij} - \\frac{k_i k_j}{2m}) k_i k_j$$\n", "\n", "Again, we can normalize by dividing by the maximum value of the covariance, which is when $k_i = k_j$." ] } ], "metadata": {} } ] }