{ "metadata": { "name": "", "signature": "sha256:649a6d36d670d3a708e4253c9362d7b7c224a4cae7a62af48cc11b1c22396762" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "# Workbench: \n", "A light-weight and flexible approach to task management, execution and pipelining.\n", "## Adoption of Workbench:\n", "Open source tools have 3 primary components that are critical for adoption:\n", "\n", " - ### How easy is it to get the system up and running?\n", " - git clone https://github.com/SuperCowPowers/workbench.git\n", " - Go through the 'Workbench Dependencies' section in the readme and about an hour later you should be done... \n", " - So not great but not horrible either\n", " \n", " - ### How easy is it to use?\n", " - ZeroRPC has Python, Node.js, or CLI interfaces.See [ZeroRPC](http://zerorpc.dotcloud.com/).\n", "
\n",
      "    import zerorpc\n",
      "    c = zerorpc.Client()\n",
      "    c.connect(\"tcp://127.0.0.1:4242\")\n",
      "    with open('evil.pcap','rb') as f:\n",
      "        md5 = c.store_sample(f.read(), 'evil.pcap', 'pcap')\n",
      "    print c.work_request('pcap_meta', md5)\n",
      "    
\n", " - Output from above 'client':\n", "
\n",
      "    {'pcap_meta': {'encoding': 'binary',\n",
      "     'file_size': 54339570,\n",
      "     'file_type': 'tcpdump (little-endian) - version 2.4 (Ethernet, 65535)',\n",
      "     'filename': 'evil.pcap',\n",
      "     'import_time': '2014-02-08T22:15:50.282000Z',\n",
      "     'md5': 'bba97e16d7f92240196dc0caef9c457a',\n",
      "     'mime_type': 'application/vnd.tcpdump.pcap'}}\n",
      "    
\n", " - ### How easy is it for me to put my own code into it?\n", " - Below is the listing of the code for the 'strings' worker: Each worker needs to provide:\n", " - dependencies (which other workers do you want as input)\n", " - An execute method that takes a python dictionary as input and returns a python dictionary as output.\n", " - That's it...\n", "\n", "\n", "## Lets start up the workbench server...\n", "Run the workbench server (from somewhere, for the demo we're just going to start a local one)\n", "
\n",
      "$ workbench_server\n",
      "
\n", "\n", "#### Okay so when the server starts up, it autoloads any worker plugins in the server/worker directory and dynamically monitors the directory, if a new python file shows up, it's validated as a properly formed plugin and if it passes is added to the list of workers." ] }, { "cell_type": "code", "collapsed": false, "input": [ "# Lets start to interact with workbench, please note there is NO specific client to workbench,\n", "# Just use the ZeroRPC Python, Node.js, or CLI interfaces.\n", "import zerorpc\n", "c = zerorpc.Client()\n", "c.connect(\"tcp://127.0.0.1:4242\")" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 35, "text": [ "[None]" ] } ], "prompt_number": 35 }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "## So I'm confused what am I suppose to do with workbench? \n", "
\n", " Workbench is often confusing for new users (we're trying to work on that). Please see our github repository https://github.com/SuperCowPowers/workbench for the latest documentation and notebooks examples (the notebook examples can really help). New users can start by typing **c.help()** after they connect to workbench." ] }, { "cell_type": "code", "collapsed": false, "input": [ "# I forgot what stuff I can do with workbench\n", "print c.help()" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "\n", "Welcome to Workbench: Here's a list of help commands:\n", "\t - Run c.help_basic() for beginner help\n", "\t - Run c.help_commands() for command help\n", "\t - Run c.help_workers() for a list of workers\n", "\t - Run c.help_advanced() for advanced help\n", "\n", "See https://github.com/SuperCowPowers/workbench for more information\n" ] } ], "prompt_number": 36 }, { "cell_type": "code", "collapsed": false, "input": [ "print c.help_basic()" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "\n", "Workbench: Getting started...\n", "\t - 1) $ print c.help_commands() for a list of commands\n", "\t - 2) $ print c.help_command('store_sample') for into on a specific command\n", "\t - 3) $ print c.help_workers() for a list a workers\n", "\t - 4) $ print c.help_worker('meta') for info on a specific worker\n", "\t - 5) $ my_md5 = c.store_sample(...)\n", "\t - 6) $ output = c.work_request('meta', my_md5)\n" ] } ], "prompt_number": 37 }, { "cell_type": "code", "collapsed": false, "input": [ "# STEP 1:\n", "# Okay get the list of commands from workbench\n", "print c.help_commands()" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Workbench Commands:\n", "\tadd_node(node_id, name, labels)\n", "\tadd_rel(source_id, target_id, rel)\n", "\tclear_db()\n", "\tclear_graph_db()\n", "\tget_datastore_uri()\n", "\tget_sample(md5)\n", "\tget_sample_set(md5)\n", "\tget_sample_window(type_tag, size)\n", "\thas_node(node_id)\n", "\thave_sample(md5)\n", "\thelp()\n", "\thelp_advanced()\n", "\thelp_basic()\n", "\thelp_command(command)\n", "\thelp_commands()\n", "\thelp_worker(worker)\n", "\thelp_workers()\n", "\tindex_sample(md5, index_name)\n", "\tindex_worker_output(worker_class, md5, index_name, subfield)\n", "\tsearch(index_name, query)\n", "\tstore_sample(input_bytes, filename, type_tag)\n", "\tstore_sample_set(md5_list)\n", "\twork_request(worker_class, md5, subkeys=None)\n" ] } ], "prompt_number": 38 }, { "cell_type": "code", "collapsed": false, "input": [ "# STEP 2:\n", "# Lets gets the infomation on a specific command 'store_sample'\n", "print c.help_command('store_sample')" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "\n", " Command: store_sample(input_bytes, filename, type_tag) \n", " Store a sample into the DataStore.\n", " Args:\n", " filename: name of the file (used purely as meta data not for lookup)\n", " input_bytes: the actual bytes of the sample e.g. f.read()\n", " type_tag: ('exe','pcap','pdf','json','swf', or ...)\n", " Returns:\n", " the md5 of the sample\n", " \n" ] } ], "prompt_number": 39 }, { "cell_type": "code", "collapsed": false, "input": [ "# STEP 3:\n", "# Now lets get infomation about the dynamically loaded workers (your site may have many more!)\n", "# Next to each worker name is the list of dependences that worker has declared\n", "print c.help_workers()" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Workbench Workers:\n", "\tjson_meta ['sample', 'meta']\n", "\tlog_meta ['sample', 'meta']\n", "\tmeta ['sample']\n", "\tmeta_deep ['sample', 'meta']\n", "\tpcap_bro ['sample']\n", "\tpcap_graph ['pcap_bro']\n", "\tpcap_graph_0_1 ['pcap_bro']\n", "\tpcap_http_graph ['pcap_bro']\n", "\tpe_classifier ['pe_features', 'pe_indicators']\n", "\tpe_deep_sim ['meta_deep']\n", "\tpe_features ['sample']\n", "\tpe_indicators ['sample']\n", "\tpe_peid ['sample']\n", "\tstrings ['sample']\n", "\tswf_meta ['sample', 'meta']\n", "\tunzip ['sample']\n", "\turl ['strings']\n", "\tview ['meta']\n", "\tview_customer ['meta']\n", "\tview_log_meta ['log_meta']\n", "\tview_meta ['meta']\n", "\tview_pcap ['pcap_bro']\n", "\tview_pcap_details ['view_pcap']\n", "\tview_pdf ['meta', 'strings']\n", "\tview_pe ['meta', 'strings', 'pe_peid', 'pe_indicators', 'pe_classifier', 'pe_disass']\n", "\tview_zip ['meta', 'unzip']\n", "\tvt_query ['meta']\n", "\tyara_sigs ['sample']\n" ] } ], "prompt_number": 40 }, { "cell_type": "code", "collapsed": false, "input": [ "# STEP 4:\n", "# Lets gets the infomation about the meta worker\n", "print c.help_worker('meta')" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "\n", " Worker: meta ['sample']\n", "\t This worker computes meta data for any file type. \n" ] } ], "prompt_number": 41 }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "# Alright, are we feeling awesome yet? \n", "## Let do some stuff\n", " Workbench has lots of samples that you can try out (some of them are malicious, be careful!). So you can grab a PE file, a PCAP, or a PDF file and throw it in!\n", "" ] }, { "cell_type": "code", "collapsed": false, "input": [ "# STEP 5:\n", "# Okay when we load up a file, we get the md5 back\n", "filename = '../data/pe/bad/0cb9aa6fb9c4aa3afad7a303e21ac0f3'\n", "with open(filename,'rb') as f:\n", " my_md5 = c.store_sample(f.read(), filename, 'exe')\n", "print my_md5" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "0cb9aa6fb9c4aa3afad7a303e21ac0f3\n" ] } ], "prompt_number": 42 }, { "cell_type": "code", "collapsed": false, "input": [ "# STEP 6:\n", "# Run a worker on my sample\n", "output = c.work_request('meta', my_md5)\n", "output" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 43, "text": [ "{'meta': {'customer': 'BearTron',\n", " 'encoding': 'binary',\n", " 'file_size': 20480,\n", " 'file_type': 'PE32 executable (GUI) Intel 80386, for MS Windows',\n", " 'filename': '../data/pe/bad/0cb9aa6fb9c4aa3afad7a303e21ac0f3',\n", " 'import_time': '2014-06-10T20:48:15.321000Z',\n", " 'length': 20480,\n", " 'md5': '0cb9aa6fb9c4aa3afad7a303e21ac0f3',\n", " 'mime_type': 'application/x-dosexec',\n", " 'type_tag': 'exe'}}" ] } ], "prompt_number": 43 }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "# Alright, now it's time to get fabulous!\n", "### Let check out some of the other workers\n", " We saw a bunch of workers for PE Files, so lets look at the help for those and start taking it up a notch!\n", "" ] }, { "cell_type": "code", "collapsed": false, "input": [ "# Lets see what view_pe does\n", "print c.help_worker('view_pe')" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "\n", " Worker: view_pe ['meta', 'strings', 'pe_peid', 'pe_indicators', 'pe_classifier', 'pe_disass']\n", "\t Generates a high level summary view for PE files that incorporates a large set of workers \n" ] } ], "prompt_number": 44 }, { "cell_type": "code", "collapsed": false, "input": [ "# Okay lets give it a try\n", "c.work_request('view_pe', my_md5)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 45, "text": [ "{'view_pe': {'classification': 'Evil!',\n", " 'customer': 'BearTron',\n", " 'disass': 'plugin_failed',\n", " 'encoding': 'binary',\n", " 'file_size': 20480,\n", " 'file_type': 'PE32 executable (GUI) Intel 80386, for MS Windows',\n", " 'filename': '../data/pe/bad/0cb9aa6fb9c4aa3afad7a303e21ac0f3',\n", " 'import_time': '2014-06-10T20:48:15.321000Z',\n", " 'indicators': [{'attributes': ['findwindowexa', 'findwindowa'],\n", " 'category': 'ANTI_DEBUG',\n", " 'description': 'Imported symbols related to anti-debugging',\n", " 'severity': 3},\n", " {'category': 'MALFORMED', 'description': 'Checksum of Zero', 'severity': 1},\n", " {'category': 'MALFORMED',\n", " 'description': 'Reported Checksum does not match actual checksum',\n", " 'severity': 2},\n", " {'attributes': ['sendmessagea'],\n", " 'category': 'COMMUNICATION',\n", " 'description': 'Imported symbols related to network communication',\n", " 'severity': 1},\n", " {'attributes': ['getmodulehandlea', 'getstartupinfoa'],\n", " 'category': 'PROCESS_MANIPULATION',\n", " 'description': 'Imported symbols related to process manipulation/injection',\n", " 'severity': 3},\n", " {'attributes': ['getsystemmetrics'],\n", " 'category': 'PROCESS_SPAWN',\n", " 'description': 'Imported symbols related to spawning a new process',\n", " 'severity': 2}],\n", " 'length': 20480,\n", " 'md5': '0cb9aa6fb9c4aa3afad7a303e21ac0f3',\n", " 'mime_type': 'application/x-dosexec',\n", " 'peid_Matches': ['Microsoft Visual C++ v6.0'],\n", " 'type_tag': 'exe'}}" ] } ], "prompt_number": 45 }, { "cell_type": "markdown", "metadata": {}, "source": [ "# The Workbench framework is client/server so here's what just happened...\n", "
\n", "
" ] }, { "cell_type": "code", "collapsed": false, "input": [ "# Okay, that worker needed the output of pe_features and pe_indicators\n", "# so what happened? The worker has a dependency list and workbench\n", "# recursively satisfies that dependency list.. this is powerful because\n", "# when we're interested in one particular analysis we just want to get\n", "# the darn thing without having to worry about a bunch of details\n", "\n", "# Well lets do this for a bunch of files!\n", "import os\n", "file_list = [os.path.join('../data/pe/bad', child) for child in os.listdir('../data/pe/bad')]\n", "working_set = []\n", "for filename in file_list:\n", " with open(filename,'rb') as f:\n", " md5 = c.store_sample(f.read(), filename, 'exe')\n", " results = c.work_request('pe_classifier', md5)\n", " working_set.append(md5)\n", " print 'Results: %s' % (results)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Results: {'pe_classifier': {'classification': 'Evil!', 'md5': '033d91aae8ad29ed9fbb858179271232'}}\n", "Results: {'pe_classifier': {'classification': 'Evil!', 'md5': '0cb9aa6fb9c4aa3afad7a303e21ac0f3'}}\n", "Results: {'pe_classifier': {'classification': 'Evil!', 'md5': '0e882ec9b485979ea84c7843d41ba36f'}}" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "Results: {'pe_classifier': {'classification': 'Benign', 'md5': '0e8b030fb6ae48ffd29e520fc16b5641'}}" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "Results: {'pe_classifier': {'classification': 'Benign', 'md5': '0eb9e990c521b30428a379700ec5ab3e'}}" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "Results: {'pe_classifier': {'classification': 'Evil!', 'md5': '127f2bade752445b3dbf2cf2ea75c201'}}" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "Results: {'pe_classifier': {'classification': 'Evil!', 'md5': '139385a91b9bca0833bdc1fa77e42b91'}}" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "Results: {'pe_classifier': {'classification': 'Evil!', 'md5': '13dcc5b4570180118eb65529b77f6d89'}}" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "Results: {'pe_classifier': {'classification': 'Evil!', 'md5': '1cac80a2147cd8f3860547e43edcaa00'}}" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "Results: {'pe_classifier': {'classification': 'Evil!', 'md5': '1cea13cf888cd8ce4f869029f1dbb601'}}" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "Results: {'pe_classifier': {'classification': 'Evil!', 'md5': '1d733a9e3e571ce5f5f633a0cfd3d5f0'}}" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "Results: {'pe_classifier': {'classification': 'Evil!', 'md5': '2058c50de5976c67a09dfa5e0e1c7eb5'}}" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "Results: {'pe_classifier': {'classification': 'Evil!', 'md5': '2d012cba541c22fb7250975d5ad0d065'}}" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "Results: {'pe_classifier': {'classification': 'Evil!', 'md5': '2d015553c7388e4d78f05b24aba0819c'}}\n", "Results: {'pe_classifier': {'classification': 'Evil!', 'md5': '2d017ff228c39a0a727586b33f8168b0'}}" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "Results: {'pe_classifier': {'classification': 'Evil!', 'md5': '2d09133abb48e1c7f3f5c8f8ced8fef4'}}" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "Results: {'pe_classifier': {'classification': 'Evil!', 'md5': '2d094b6c69020091b68d1bcf5d11fa4b'}}" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "Results: {'pe_classifier': {'classification': 'Evil!', 'md5': '2d095091983dd0bf6ab7c0bb6dd695f9'}}\n", "Results: {'pe_classifier': {'classification': 'Evil!', 'md5': '2d09546831b17d2cc0583362b6d312ae'}}" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "Results: {'pe_classifier': {'classification': 'Evil!', 'md5': '2d099171876f7301c155bd775fff2b6a'}}" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "Results: {'pe_classifier': {'classification': 'Benign', 'md5': '2d09a573b0e9d02a9fa47b16e9c01a48'}}" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "Results: {'pe_classifier': {'classification': 'Evil!', 'md5': '2d09b5768e3617523d8afa110361919c'}}" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "Results: {'pe_classifier': {'classification': 'Evil!', 'md5': '2d09b8d9852c3176259915e3509bcbd1'}}" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "Results: {'pe_classifier': {'classification': 'Evil!', 'md5': '2d09ca902990545fec9ac190b0338b50'}}" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "Results: {'pe_classifier': {'classification': 'Evil!', 'md5': '2d09cb38c268aa9297e5a7f27e677267'}}" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "Results: {'pe_classifier': {'classification': 'Evil!', 'md5': '2d09cc92bbe29d96bb3a91b350d1725f'}}" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "Results: {'pe_classifier': {'classification': 'Evil!', 'md5': '2d09e4aff42aebac87ae2fd737aba94f'}}" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "Results: {'pe_classifier': {'classification': 'Evil!', 'md5': '32b24e73cfc3ac4c43f1926f8935e438'}}" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "Results: {'pe_classifier': {'classification': 'Evil!', 'md5': '4ed28b6207560f127d267de639a4e1bf'}}" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "Results: {'pe_classifier': {'classification': 'Evil!', 'md5': '505804ec7c7212a52ec85e075b91ed84'}}" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "Results: {'pe_classifier': {'classification': 'Evil!', 'md5': '60a83c049e135cc199138c1f8861437c'}}" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "Results: {'pe_classifier': {'classification': 'Evil!', 'md5': '69f9633fa6fd5dc1fd917cb435bba8ad'}}" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "Results: {'pe_classifier': {'classification': 'Evil!', 'md5': '79f5e1af9fdb92476045989bda7515c7'}}" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "Results: {'pe_classifier': {'classification': 'Evil!', 'md5': '7f313447b887b078215617fbed1a34a1'}}" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "Results: {'pe_classifier': {'classification': 'Evil!', 'md5': '8006782bdf703e2f3fdf1d1650f45ffd'}}" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "Results: {'pe_classifier': {'classification': 'Evil!', 'md5': '86714940f491bc38c2e842e80c7f778e'}}\n", "Results: {'pe_classifier': {'classification': 'Evil!', 'md5': '987bd46899b2a9493e6dec051edcb66c'}}" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "Results: {'pe_classifier': {'classification': 'Evil!', 'md5': '9cd3d7b1b0f2aea5950cbf7d97776f2f'}}" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "Results: {'pe_classifier': {'classification': 'Evil!', 'md5': '9ceccd9f32cb2ad0b140b6d15d8993b6'}}" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "Results: {'pe_classifier': {'classification': 'Evil!', 'md5': '9e42ff1e6f75ae3e60b24e48367c8f26'}}" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "Results: {'pe_classifier': {'classification': 'Evil!', 'md5': 'a7b0a9067d8292b252d741e6fae17cd9'}}\n", "Results: {'pe_classifier': {'classification': 'Benign', 'md5': 'afddc552b31a8f2438768c73674bf29e'}}" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "Results: {'pe_classifier': {'classification': 'Evil!', 'md5': 'b681485cb9e0cad73ee85b9274c0d3c2'}}" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "Results: {'pe_classifier': {'classification': 'Evil!', 'md5': 'bf1249a258cbcccec0f1b4ea1e9451a1'}}" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "Results: {'pe_classifier': {'classification': 'Evil!', 'md5': 'c8c54ac7e827056174762c68db84534f'}}" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "Results: {'pe_classifier': {'classification': 'Evil!', 'md5': 'cc113aa59c04b17e7cb832fc417f104d'}}" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "Results: {'pe_classifier': {'classification': 'Benign', 'md5': 'd94da41e7e809f7366971b3b50f8ef68'}}" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "Results: {'pe_classifier': {'classification': 'Evil!', 'md5': 'e9a6c83826deacfbc2281b6c7e401694'}}" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "Results: {'pe_classifier': {'classification': 'Evil!', 'md5': 'ea5d95c96a23b21b9038f03b91955c18'}}\n", "Results: {'pe_classifier': {'classification': 'Evil!', 'md5': 'f6190648c2efb764ae1d73b0e9a4fd13'}}" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n" ] } ], "prompt_number": 46 }, { "cell_type": "code", "collapsed": false, "input": [ "# We just ran the classifer on 50 files and you'll note that we ONLY got back the\n", "# information we ask for. On a large amount of files (100k or greater) if you don't\n", "# have a granular system, something this easy WILL NOT BE POSSIBLE! (dramatic enough?)\n", "\n", "# So lets look at the features going into the classifier (btw the classifier is currently a TOY EXAMPLE)\n", "c.work_request('pe_features', md5)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 47, "text": [ "{'pe_features': {'dense_features': {'check_sum': 0,\n", " 'compile_date': 1074901182,\n", " 'datadir_IMAGE_DIRECTORY_ENTRY_BASERELOC_size': 2348796035,\n", " 'datadir_IMAGE_DIRECTORY_ENTRY_EXPORT_size': 0,\n", " 'datadir_IMAGE_DIRECTORY_ENTRY_IAT_size': 0,\n", " 'datadir_IMAGE_DIRECTORY_ENTRY_IMPORT_size': 20,\n", " 'datadir_IMAGE_DIRECTORY_ENTRY_RESOURCE_size': 262,\n", " 'debug_size': 0,\n", " 'export_size': 0,\n", " 'generated_check_sum': 62500,\n", " 'iat_rva': 86510,\n", " 'major_version': 0,\n", " 'minor_version': 57,\n", " 'number_of_bound_import_symbols': 0,\n", " 'number_of_bound_imports': 0,\n", " 'number_of_export_symbols': 0,\n", " 'number_of_import_symbols': 0,\n", " 'number_of_imports': 0,\n", " 'number_of_rva_and_sizes': 10,\n", " 'number_of_sections': 3,\n", " 'pe_char': 33167,\n", " 'pe_dll': 0,\n", " 'pe_driver': 0,\n", " 'pe_exe': 1,\n", " 'pe_i386': 1,\n", " 'pe_majorlink': 76,\n", " 'pe_minorlink': 111,\n", " 'pe_warnings': 1,\n", " 'sec_entropy_': 7.876937179741062,\n", " 'sec_entropy_@': 5.388003199139927,\n", " 'sec_entropy_data': 0,\n", " 'sec_entropy_ps': 5.388003199139927,\n", " 'sec_entropy_rdata': 0,\n", " 'sec_entropy_reloc': 0,\n", " 'sec_entropy_rsrc': 0,\n", " 'sec_entropy_text': 0,\n", " 'sec_raw_execsize': 6984,\n", " 'sec_rawptr_': 512,\n", " 'sec_rawptr_@': 16,\n", " 'sec_rawptr_data': 0,\n", " 'sec_rawptr_ps': 16,\n", " 'sec_rawptr_rsrc': 0,\n", " 'sec_rawptr_text': 0,\n", " 'sec_rawsize_': 5992,\n", " 'sec_rawsize_@': 496,\n", " 'sec_rawsize_data': 0,\n", " 'sec_rawsize_ps': 496,\n", " 'sec_rawsize_rsrc': 0,\n", " 'sec_rawsize_text': 0,\n", " 'sec_va_execsize': 86016,\n", " 'sec_vasize_': 36864,\n", " 'sec_vasize_@': 4096,\n", " 'sec_vasize_data': 0,\n", " 'sec_vasize_ps': 45056,\n", " 'sec_vasize_rsrc': 0,\n", " 'sec_vasize_text': 0,\n", " 'size_code': 1766614113,\n", " 'size_image': 90112,\n", " 'size_initdata': 1918988898,\n", " 'size_uninit': 16761,\n", " 'std_section_names': 0,\n", " 'total_size_pe': 6504,\n", " 'virtual_address': 4096,\n", " 'virtual_size': 45056,\n", " 'virtual_size_2': 36864},\n", " 'md5': 'f6190648c2efb764ae1d73b0e9a4fd13',\n", " 'sparse_features': {'imp_hash': 'Not found: Install pefile 1.2.10-139 or later',\n", " 'imported_symbols': [],\n", " 'pe_warning_strings': ['Error parsing section 0. PointerToRawData should normally be a multiple of FileAlignment, this might imply the file is trying to confuse tools which parse this incorrectly',\n", " 'Suspicious flags set for section 0. Both IMAGE_SCN_MEM_WRITE and IMAGE_SCN_MEM_EXECUTE are set. This might indicate a packed executable.',\n", " 'Suspicious flags set for section 1. Both IMAGE_SCN_MEM_WRITE and IMAGE_SCN_MEM_EXECUTE are set. This might indicate a packed executable.',\n", " 'Error parsing section 2. PointerToRawData should normally be a multiple of FileAlignment, this might imply the file is trying to confuse tools which parse this incorrectly',\n", " 'Suspicious flags set for section 2. Both IMAGE_SCN_MEM_WRITE and IMAGE_SCN_MEM_EXECUTE are set. This might indicate a packed executable.',\n", " 'Corrupt header \"IMAGE_IMPORT_DESCRIPTOR\" at file offset 494. Exception: \\'Data length less than expected header length.\\'',\n", " \"Invalid relocation information. Can't read data at RVA: 0x476ffa5\"],\n", " 'section_names': ['ps', '', '@']}}}" ] } ], "prompt_number": 47 }, { "cell_type": "code", "collapsed": false, "input": [ "c.work_request('pe_indicators', md5)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 48, "text": [ "{'pe_indicators': {'indicator_list': [{'category': 'PE_WARN',\n", " 'description': 'Error parsing section 0. PointerToRawData should normally be a multiple of FileAlignment, this might imply the file is trying to confuse tools which parse this incorrectly',\n", " 'severity': 2},\n", " {'category': 'PE_WARN',\n", " 'description': 'Suspicious flags set for section 0. Both IMAGE_SCN_MEM_WRITE and IMAGE_SCN_MEM_EXECUTE are set. This might indicate a packed executable.',\n", " 'severity': 2},\n", " {'category': 'PE_WARN',\n", " 'description': 'Suspicious flags set for section 1. Both IMAGE_SCN_MEM_WRITE and IMAGE_SCN_MEM_EXECUTE are set. This might indicate a packed executable.',\n", " 'severity': 2},\n", " {'category': 'PE_WARN',\n", " 'description': 'Error parsing section 2. PointerToRawData should normally be a multiple of FileAlignment, this might imply the file is trying to confuse tools which parse this incorrectly',\n", " 'severity': 2},\n", " {'category': 'PE_WARN',\n", " 'description': 'Suspicious flags set for section 2. Both IMAGE_SCN_MEM_WRITE and IMAGE_SCN_MEM_EXECUTE are set. This might indicate a packed executable.',\n", " 'severity': 2},\n", " {'category': 'PE_WARN',\n", " 'description': 'Corrupt header \"IMAGE_IMPORT_DESCRIPTOR\" at file offset 494. Exception: \\'Data length less than expected header length.\\'',\n", " 'severity': 2},\n", " {'category': 'PE_WARN',\n", " 'description': \"Invalid relocation information. Can't read data at RVA: 0x476ffa5\",\n", " 'severity': 2},\n", " {'category': 'MALFORMED', 'description': 'Checksum of Zero', 'severity': 1},\n", " {'category': 'MALFORMED',\n", " 'description': 'Reported Checksum does not match actual checksum',\n", " 'severity': 2},\n", " {'category': 'MALFORMED',\n", " 'description': 'Image size does not match reported size',\n", " 'severity': 3},\n", " {'attributes': ['ps', '', '@'],\n", " 'category': 'MALFORMED',\n", " 'description': 'Section(s) with a non-standard name, tamper indication',\n", " 'severity': 3},\n", " {'attributes': ['PS', '@\\x00\\x0f@\\x00'],\n", " 'category': 'MALFORMED',\n", " 'description': 'Unaligned section, tamper indication',\n", " 'severity': 3}],\n", " 'md5': 'f6190648c2efb764ae1d73b0e9a4fd13'}}" ] } ], "prompt_number": 48 }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Wow, that's a lot of features... Good thing I can ask for just what I want and minimize network traffic.\n", "\n", "On another note, did we just waste some time there? Did workbench have to recompute the features? No everything done by workbench is pushed into the MongoDB backend and then if the work results for that md5 are already in the datastore the a very lightweight call is made to get the results. In fact results are never directly returned, the worker pushes into Mongo and then we pull them out and hand them to the client, that way we ^ensure^ that the bits in the datastore and the bits that you get are the exact same 'gold bits' (seems like overkill but it's important).\n", "## Your data - Transparent, Organized, Accessible\n", "
\n" ] }, { "cell_type": "code", "collapsed": false, "input": [ "# Another example.. I want to look at strings for different types of files (not just pe_files)\n", "# So we can load up a few pdfs (the pe's are already in the datastore)\n", "file_list = [os.path.join('../data/pdf/bad', child) for child in os.listdir('../data/pdf/bad')]\n", "for filename in file_list:\n", " with open(filename,'rb') as f:\n", " md5 = c.store_sample(f.read(), filename, 'pdf')\n", " working_set.append(md5)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 49 }, { "cell_type": "code", "collapsed": false, "input": [ "# Now we rip the strings worker on them all\n", "for md5 in working_set:\n", " result = c.work_request('strings', md5)\n", " print 'results: %s' % (result['strings']['string_list'][:5]) # strings output is large so just showing the first 5" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "results: [' ', '!This program cannot be run in DOS mode.', 'Rich', '.text', '.rdata']\n", "results: ['!This program cannot be run in DOS mode.', 'Rich3', '.text', '`.rdata', '@.data']\n", "results: ['!This program cannot be run in DOS mode.', 'Rich', '.text', '`.data', '.rsrc']\n", "results: ['This program must be run under Win32', 'CODE', '`DATA', '.idata', '.tls']\n", "results: ['!This program cannot be run in DOS mode.', 'Rich', '.text', '`.rdata', '@DATA']\n", "results: ['!This program cannot be run in DOS mode.', 'kRich', '.text', '`.rdata', '@.data']\n", "results: ['!This program cannot be run in DOS mode.', '.text', '.code', '`.data', '.data3']\n", "results: ['!This program cannot be run in DOS mode.', 'YRich', '.text', '`.rdata', '@.data']" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "results: ['!This program cannot be run in DOS mode.', '.text', '`.data', '.rsrc', 'blenkxr']\n", "results: ['!This program cannot be run in DOS mode.', 'Rich', '.text', '`.rdata', '@.data']\n", "results: ['!This program cannot be run in DOS mode.', '.text', '.data', '.rsrc', 'aitrfvl']\n", "results: ['This program must be run under Win32', 'ATSEC0', '`ATSEC1', '@ATSEC2', '@idata']\n", "results: ['This program must be run under Win32', 'CODE', '`DATA', '.idata', '.reloc']" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "results: ['yrf<[LordPE]', '.text', '.text', 'ExitProcess', 'KERNEL32.dll']\n", "results: ['!This program cannot be run in DOS mode.', 'Rich', '.text', '`rdata', '.data']\n", "results: ['!This program cannot be run in DOS mode.', '6Rich#', '^\"+M', 'UPX0', 'UPX1']\n", "results: ['!This program cannot be run in DOS mode.', 'Rich\"', '.text', '@.code', '`.data']" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "results: ['yrf<[LordPE]', '.text', '.text', 'ExitProcess', 'KERNEL32.dll']\n", "results: ['!This program cannot be run in DOS mode.', 'Riche', '.text', '.data', '.rsrc']\n", "results: ['!This program cannot be run in DOS mode.', 'Rich', '.text', '`rdata', '.data']\n", "results: ['!This program cannot be run in DOS mode.', 'Rich', '.data', '`.data', '`.data']\n", "results: ['!This program cannot be run in DOS mode.', '.text', '`.data', '.idata', '@.rsrc']\n", "results: ['!This program cannot be run in DOS mode.', \">O'X_!tX_!tX_!t\", '@+tN_!t', 'C/tR_!t:@2tS_!tX_ t', '@*t[_!t']" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "results: ['!This program cannot be run in DOS mode.', 'RichX', 'E0TK', '.text', '`.rdata']\n", "results: ['!This program cannot be run in DOS mode.', 'Rich', '.text', '`rdata', '.data']\n", "results: ['!This program cannot be run in DOS mode.', 'Rich', '.text', '`.rdata', '@.data']\n", "results: ['!This program cannot be run in DOS mode.', 'UPX0', 'UPX1', '.rsrc', '3.03']\n", "results: [' ', '!This program cannot be run in DOS mode.', 'Rich', '.text', '.rdata']" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "results: ['!This program cannot be run in DOS mode.', 'Rich', '.data', '.pdata', '.ex_cod']\n", "results: ['This program must be run under Win32', 'CODE', '`DATA', '.idata', '.tls']\n", "results: ['!This program cannot be run in DOS mode.', '.text', '`.rdata', '@.data', '_TEXT2']\n", "results: ['!This program cannot be run in DOS mode.', 'ERich', 'UPX0', 'UPX1', 'UPX2']\n", "results: ['This program must be run under Win32', 'mnYD', 'CODE', '`DATA', '.idata']\n", "results: ['!This program cannot be run in DOS mode.', '.text', '`.rdata', '@.data', '_TEXT2']\n", "results: ['!This program cannot be run in DOS mode.', 'Rich', '.PEX', '`.PEX', 'Bome']" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "results: ['!This program cannot be run in DOS mode.', '|Richv', 'UPX0', 'UPX1', '.rsrc']\n", "results: ['!This program cannot be run in DOS mode.', 'Rich', '.text', '`.rdata', '@.data']\n", "results: ['!This program cannot be run in DOS mode.', 'sIPE', '.text', '.data', '.rsrc']\n", "results: ['!This program cannot be run in DOS mode.', '.text', '.data', '.rsrc', 'mzphdwa']\n", "results: ['!This program cannot be run in DOS mode.', '.text', '.data', '.rsrc', 'lsicbkg']\n", "results: ['!This program cannot be run in DOS mode.', 'Rich', '.packed', '`.RLPack', 'a?/u']\n", "results: ['!This program cannot be run in DOS mode.', 'Rich', '.text', 'h.rdata', 'H.reloc']\n", "results: ['This program must be run under Win32', 'CODE', '`DATA', '.idata', '.tls']\n", "results: [' ', '!This program cannot be run in DOS mode.', 'Rich', '.text', '.rdata']" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "results: ['!This program cannot be run in DOS mode.', '.text', '.data', '.rdata', '@.bss']\n", "results: ['!This program cannot be run in DOS mode.', 'ssaR', \"'#K'\", '.data', '.text']\n", "results: ['!This program cannot be run in DOS mode.', 'BZ.`', 'Richy', 'J!NH', '.text']\n", "results: ['!This program cannot be run in DOS mode.', 'RichW', '.text', '.data', '.rsrc']\n", "results: ['.text', 'KERNEL32.DLL', 'MSVCRT.DLL', 'USER32.DLL', 'ADVAPI32.DLL']\n", "results: ['MZKERNEL32.DLL', 'LoadLibraryA', 'GetProcAddress', '^]YF', 'W8mu']\n", "results: ['%PDF-1.6', '52 0 obj<>stream', '/Filter/FlateDecode/W[1 2 1]/Index[5 1 7 1 9 4 23 4 50 3]>>stream', 'bbb0b`b```', '310Z']" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "results: ['%PDF-1.1', '1 0 obj', ' /Type /Catalog', ' /Outlines 2 0 R', ' /Pages 3 0 R']\n", "results: ['%PDF-1.3', '2 0 obj', '/OpenAction << /JS 9 0 R /S /JavaScript >>', '/Type /Catalog', '/Pages 3 0 R']\n", "results: ['%PDF-1.4', '1 0 obj', '/Type /Catalog', '/Outlines 3 0 R', '/Pages 4 0 R']\n", "results: ['%PDF-1.6', '11 0 obj', '<>', 'stream', 's--e']\n", "results: ['%PDF-1.4', '1 0 obj', '<>>>', 'endobj']\n", "results: ['%PDF-1.0', '1 0 obj<>endobj', '2 0 obj<>endobj', '3 0 obj<>endobj', '4 0 obj<>endobj']\n", "results: ['%PDF-1.6', '7 0 obj', '<>', 'endobj', '21 0 obj']\n", "results: ['%PDF-1.3', '4 0 obj', 'endobj', '5 0 obj', '/Producer (substr)']\n", "results: ['%PDF-1.5', '1 0 obj<>endobj', '2 0 obj<>endobj', '3 0 obj<>endobj', '4 0 obj<>endobj']\n", "results: ['%PDF-1.3', '4 0 obj', '<< /Length 5 0 R /Filter /FlateDecode >>', 'stream', '}b%~T\\\\']" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "results: ['%PDF-1.7', '3 0 obj', '<>', 'stream', '}V]o']\n", "results: ['%PDF-1.3', '3 0 obj', '<>', 'stream', 'W1OOO']\n", "results: ['%PDF-1.4', '1 0 obj', '/Type /Catalog', '/Outlines 3 0 R', '/Pages 4 0 R']\n", "results: ['%PDF-1.0', '1 0 obj<>endobj', '2 0 obj<>endobj', '3 0 obj<>endobj', '4 0 obj<>endobj']\n", "results: ['%PDF-1.6', '7 0 obj', '<>', 'stream', '&^:_']\n", "results: ['%PDF-1.0', '1 0 obj<>endobj', '2 0 obj<>endobj', '3 0 obj<>endobj', '4 0 obj<>endobj']" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "results: ['%PDF-1.6', '9 0 obj', '<>', 'stream', '$z(R']\n", "results: ['%PDF-1.6', '1 0 obj', '<>', 'endobj', '5 0 obj']\n", "results: ['%PDF-1.3', '1 0 obj', '/Kids [ 4 0 R ]', '/Type /Pages', '/Count 1']\n", "results: ['%PDF-1.6', '7 0 obj', '<>', 'endobj', '21 0 obj']\n", "results: ['%PDF-1.6', '3 0 obj', '<>', 'stream', \"z]%'\"]\n" ] } ], "prompt_number": 50 }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "# Views\n", "Views exemplify the true power of the workbench. They are meta workers in the broadest sense, they can call any set of workers (and other views, which are just workers of course). All of the previous notebook code focused on demonstrating the level of control and granularity you can use with workbench, here the example we're going to show for views will be for those who don't care about granularity and really just want a big 'GO' button.\n", "\n", "Views can also be precise or general (example shows the latter):\n", "\n", " - Customer billing View\n", " - Sample volume over time View\n", " - All samples that use communications calls View\n", " - DO_EVERYTHING_BECAUSE_I_WANT_TO_PUNCH_GRANULARITY_IN_THE_NUTS! View\n", " \n", "So lets look at the last kind .. it's called 'view' and like many of the other workers it's 20 lines of code.\n", "\n", "But it's deceptively simple, if you think about what must be happening below... over a dozen workers are getting orchestrated and run only when it makes sense for that MIME type. So with a few 'pull' calls the recursive dependency chains are invoked; work is done if/when it's needed and the whole thing is fantastically elegant and efficient. If your mind isn't a little bit blown by what happens below then you might not be paying attention." ] }, { "cell_type": "code", "collapsed": false, "input": [ "# This just grabs all the file_paths recursively\n", "def tag_type(path):\n", " types = ['bro','json','log','pcap','pdf','exe','swf','zip']\n", " for try_type in types:\n", " if try_type in os.path.dirname(path):\n", " return try_type\n", "\n", "file_list = []\n", "for p,d,f_list in os.walk('../data'):\n", " file_list += [os.path.join(p, f) for f in f_list]" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 51 }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "### Please note the next cell takes several minutes to complete\n", "#### The repository has hundreds of test files and the next few lines of python runs them all through 4-5 workers each, yes 'view' is like a magic pony it will figure out what workers to run on which file types (peid is the big time hog in case you're wondering)." ] }, { "cell_type": "code", "collapsed": false, "input": [ "# We're going to load in all the files which include PE files, PCAPS, PDFs, and ZIPs and run 'view' on them.\n", "# Note: This takes a while :)\n", "import pprint\n", "results = []\n", "for filename in file_list:\n", " with open(filename,'rb') as f:\n", " md5 = c.store_sample(f.read(), os.path.basename(filename), tag_type(filename))\n", " results.append(c.work_request('view', md5))\n", "pprint.pprint(results[:5])" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "[{'view': {'md5': '142372845adfdb668ba5bca0e81e6c19',\n", " 'meta': {'customer': 'Mega Corp',\n", " 'encoding': 'binary',\n", " 'file_size': 12292,\n", " 'file_type': 'Apple Desktop Services Store',\n", " 'filename': '.DS_Store',\n", " 'import_time': '2014-06-10T20:48:33.501000Z',\n", " 'length': 12292,\n", " 'md5': '142372845adfdb668ba5bca0e81e6c19',\n", " 'mime_type': 'binary',\n", " 'type_tag': None}}},\n", " {'view': {'md5': 'f12f0237be84a8e353477e55ec43589b',\n", " 'meta': {'customer': 'Dorseys Mom',\n", " 'encoding': 'us-ascii',\n", " 'file_size': 25218,\n", " 'file_type': 'ASCII text',\n", " 'filename': 'conn.log',\n", " 'import_time': '2014-06-10T20:48:33.514000Z',\n", " 'length': 25218,\n", " 'md5': 'f12f0237be84a8e353477e55ec43589b',\n", " 'mime_type': 'text/plain',\n", " 'type_tag': 'bro'}}},\n", " {'view': {'md5': 'a62fd3c72c1d688ff8041e0be87d07aa',\n", " 'meta': {'customer': 'Dorseys Mom',\n", " 'encoding': 'us-ascii',\n", " 'file_size': 541,\n", " 'file_type': 'ASCII text',\n", " 'filename': 'dhcp.log',\n", " 'import_time': '2014-06-10T20:48:33.532000Z',\n", " 'length': 541,\n", " 'md5': 'a62fd3c72c1d688ff8041e0be87d07aa',\n", " 'mime_type': 'text/plain',\n", " 'type_tag': 'bro'}}},\n", " {'view': {'md5': '438022b94b10cada18414314b0c8584b',\n", " 'meta': {'customer': 'Huge Inc',\n", " 'encoding': 'us-ascii',\n", " 'file_size': 23896,\n", " 'file_type': 'ASCII text',\n", " 'filename': 'dns.log',\n", " 'import_time': '2014-06-10T20:48:33.551000Z',\n", " 'length': 23896,\n", " 'md5': '438022b94b10cada18414314b0c8584b',\n", " 'mime_type': 'text/plain',\n", " 'type_tag': 'bro'}}},\n", " {'view': {'md5': 'f57da114f0f1e07b93f374d68c65c583',\n", " 'meta': {'customer': 'Dorseys Mom',\n", " 'encoding': 'us-ascii',\n", " 'file_size': 40283,\n", " 'file_type': 'ASCII text',\n", " 'filename': 'files.log',\n", " 'import_time': '2014-06-10T20:48:33.573000Z',\n", " 'length': 40283,\n", " 'md5': 'f57da114f0f1e07b93f374d68c65c583',\n", " 'mime_type': 'text/plain',\n", " 'type_tag': 'bro'}}}]\n" ] } ], "prompt_number": 54 }, { "cell_type": "code", "collapsed": false, "input": [ "# Okay so views can either aggregate results from multiple workers or they\n", "# can subset to just want you want (webpage presentation for instance)\n", "results = c.batch_work_request('view_customer')\n", "print results" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "\n" ] } ], "prompt_number": 55 }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "## Holy s#@&! The server batch request returned a generator?\n", "#### Yes generators are awesome but getting one from a server request! Are u serious?! Yes, thanks to ZeroRPC...dead serious.. like chopping off your head and kicking your body into a shallow grave and putting your head on a stick... serious.\n", "\n", "#### For more on client/server generators and client-contructed/server-executed generator pipelines see our super spiffy [Generator Pipelines](http://nbviewer.ipython.org/url/raw.github.com/SuperCowPowers/workbench/master/workbench/notebooks/Generator_Pipelines.ipynb) notebook." ] }, { "cell_type": "code", "collapsed": false, "input": [ "# At this granularity it opens up a new world\n", "import pandas as pd\n", "df = pd.DataFrame(results)\n", "df.head(10)" ], "language": "python", "metadata": {}, "outputs": [ { "html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
customerfilenameimport_timelengthmd5type_tag
0 BearTron ../data/pe/bad/0cb9aa6fb9c4aa3afad7a303e21ac0f3 2014-06-10T20:48:15.321000Z 20480 0cb9aa6fb9c4aa3afad7a303e21ac0f3 pe
1 Mega Corp ../data/pe/bad/033d91aae8ad29ed9fbb858179271232 2014-06-10T20:48:19.036000Z 85504 033d91aae8ad29ed9fbb858179271232 pe
2 Dorseys Mom ../data/pe/bad/0e882ec9b485979ea84c7843d41ba36f 2014-06-10T20:48:19.146000Z 64512 0e882ec9b485979ea84c7843d41ba36f pe
3 Mega Corp ../data/pe/bad/0e8b030fb6ae48ffd29e520fc16b5641 2014-06-10T20:48:19.258000Z 81920 0e8b030fb6ae48ffd29e520fc16b5641 pe
4 Dorseys Mom ../data/pe/bad/0eb9e990c521b30428a379700ec5ab3e 2014-06-10T20:48:19.519000Z 97280 0eb9e990c521b30428a379700ec5ab3e pe
5 Dorseys Mom ../data/pe/bad/127f2bade752445b3dbf2cf2ea75c201 2014-06-10T20:48:19.697000Z 66560 127f2bade752445b3dbf2cf2ea75c201 pe
6 Huge Inc ../data/pe/bad/139385a91b9bca0833bdc1fa77e42b91 2014-06-10T20:48:19.817000Z 22510 139385a91b9bca0833bdc1fa77e42b91 pe
7 Mega Corp ../data/pe/bad/13dcc5b4570180118eb65529b77f6d89 2014-06-10T20:48:19.897000Z 29184 13dcc5b4570180118eb65529b77f6d89 pe
8 BearTron ../data/pe/bad/1cac80a2147cd8f3860547e43edcaa00 2014-06-10T20:48:20.009000Z 72704 1cac80a2147cd8f3860547e43edcaa00 pe
9 Mega Corp ../data/pe/bad/1cea13cf888cd8ce4f869029f1dbb601 2014-06-10T20:48:20.160000Z 53248 1cea13cf888cd8ce4f869029f1dbb601 pe
\n", "

10 rows \u00d7 6 columns

\n", "
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 56, "text": [ " customer filename \\\n", "0 BearTron ../data/pe/bad/0cb9aa6fb9c4aa3afad7a303e21ac0f3 \n", "1 Mega Corp ../data/pe/bad/033d91aae8ad29ed9fbb858179271232 \n", "2 Dorseys Mom ../data/pe/bad/0e882ec9b485979ea84c7843d41ba36f \n", "3 Mega Corp ../data/pe/bad/0e8b030fb6ae48ffd29e520fc16b5641 \n", "4 Dorseys Mom ../data/pe/bad/0eb9e990c521b30428a379700ec5ab3e \n", "5 Dorseys Mom ../data/pe/bad/127f2bade752445b3dbf2cf2ea75c201 \n", "6 Huge Inc ../data/pe/bad/139385a91b9bca0833bdc1fa77e42b91 \n", "7 Mega Corp ../data/pe/bad/13dcc5b4570180118eb65529b77f6d89 \n", "8 BearTron ../data/pe/bad/1cac80a2147cd8f3860547e43edcaa00 \n", "9 Mega Corp ../data/pe/bad/1cea13cf888cd8ce4f869029f1dbb601 \n", "\n", " import_time length md5 \\\n", "0 2014-06-10T20:48:15.321000Z 20480 0cb9aa6fb9c4aa3afad7a303e21ac0f3 \n", "1 2014-06-10T20:48:19.036000Z 85504 033d91aae8ad29ed9fbb858179271232 \n", "2 2014-06-10T20:48:19.146000Z 64512 0e882ec9b485979ea84c7843d41ba36f \n", "3 2014-06-10T20:48:19.258000Z 81920 0e8b030fb6ae48ffd29e520fc16b5641 \n", "4 2014-06-10T20:48:19.519000Z 97280 0eb9e990c521b30428a379700ec5ab3e \n", "5 2014-06-10T20:48:19.697000Z 66560 127f2bade752445b3dbf2cf2ea75c201 \n", "6 2014-06-10T20:48:19.817000Z 22510 139385a91b9bca0833bdc1fa77e42b91 \n", "7 2014-06-10T20:48:19.897000Z 29184 13dcc5b4570180118eb65529b77f6d89 \n", "8 2014-06-10T20:48:20.009000Z 72704 1cac80a2147cd8f3860547e43edcaa00 \n", "9 2014-06-10T20:48:20.160000Z 53248 1cea13cf888cd8ce4f869029f1dbb601 \n", "\n", " type_tag \n", "0 pe \n", "1 pe \n", "2 pe \n", "3 pe \n", "4 pe \n", "5 pe \n", "6 pe \n", "7 pe \n", "8 pe \n", "9 pe \n", "\n", "[10 rows x 6 columns]" ] } ], "prompt_number": 56 }, { "cell_type": "code", "collapsed": false, "input": [ "# Lets look at the file submission types broken down by customer\n", "df['count'] = 1\n", "df.groupby(['customer','type_tag']).sum()" ], "language": "python", "metadata": {}, "outputs": [ { "html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
lengthcount
customertype_tag
BearTronbro 52422 12
cab 54007 1
json 288312 1
own 554 1
pcap 35057 3
pdf 374438 13
pe 1588841 28
Dorseys Mombro 146979 20
jar 10629 1
pcap 1799435 1
pdf 251385 9
pe 1673734 27
zip 151268 2
Huge Incbro 197288 8
own 52961 3
pcap 3461100 3
pdf 512620 18
pe 1120037 23
swf 7724 1
Mega Corpbro 59415 12
jar 18643 1
own 10252 4
pcap 693558 1
pdf 390356 12
pe 1507236 27
\n", "

25 rows \u00d7 2 columns

\n", "
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 57, "text": [ " length count\n", "customer type_tag \n", "BearTron bro 52422 12\n", " cab 54007 1\n", " json 288312 1\n", " own 554 1\n", " pcap 35057 3\n", " pdf 374438 13\n", " pe 1588841 28\n", "Dorseys Mom bro 146979 20\n", " jar 10629 1\n", " pcap 1799435 1\n", " pdf 251385 9\n", " pe 1673734 27\n", " zip 151268 2\n", "Huge Inc bro 197288 8\n", " own 52961 3\n", " pcap 3461100 3\n", " pdf 512620 18\n", " pe 1120037 23\n", " swf 7724 1\n", "Mega Corp bro 59415 12\n", " jar 18643 1\n", " own 10252 4\n", " pcap 693558 1\n", " pdf 390356 12\n", " pe 1507236 27\n", "\n", "[25 rows x 2 columns]" ] } ], "prompt_number": 57 }, { "cell_type": "code", "collapsed": false, "input": [ "# Plotting defaults\n", "import matplotlib.pyplot as plt\n", "%matplotlib inline\n", "plt.rcParams['font.size'] = 12.0\n", "plt.rcParams['figure.figsize'] = 18.0, 8.0" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 58 }, { "cell_type": "code", "collapsed": false, "input": [ "# Plot box plots based on customer (PDFs)\n", "df[df['type_tag']=='pdf'].boxplot('length','customer')\n", "plt.xlabel('Customer')\n", "plt.ylabel('File Size')\n", "plt.title('File Length (PDF) by Customer')\n", "plt.suptitle('')" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 59, "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "iVBORw0KGgoAAAANSUhEUgAABFUAAAHxCAYAAACs1oOUAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3Xtc1GXe//H3kC3KQQ0R07UkQhJMwLQyrRztYO3GmmK5\nSiqeQO2w1X3feSATtuiw29p2Vya25qE0an9QZrvttrFOyaJ7S+2EYPugNKQ8JYoIKFsavz8GvjHK\nDIg433F4PR+P7+PRNdfMdz7jxVzznU/X9RlLfX19vQAAAAAAAHBG/MwOAAAAAAAA4HxEUgUAAAAA\nAKANSKoAAAAAAAC0AUkVAAAAAACANiCpAgAAAAAA0AYkVQAAAAAAANqApAoAACZLT09X//79jfbq\n1at14YUXmhiRZ5z6us/EsWPH1LdvX23btq2do2qd/Px8hYeH6z//+Y/b+5WVlcnPz08FBQUeigwA\nAHgSSRUAADwgOTlZfn5+px1vvfWWHnnkEf3zn/9s9+e0Wq2aPXt2u5/3TH3zzTfy8/PTxx9/3G7n\nfO655xQbG6urr77auK3pv2tQUJDi4+P16quvGv2rV682+i+44AJ1795dgwcP1n/913+pvLzc6fxN\n79v0mDdvniTp+uuvV2RkpF588cV2e01tUVJSoilTpqhv377q3LmzwsPDNX78eNlstnZ7jvz8fPn5\n+Z32bwQAAEiqAADgMTfeeKP279/vdIwdO1YBAQEKCQlp9+ezWCyyWCztft62qq+vb5fznDhxQsuW\nLWs2YfTSSy9p//79stvt+tnPfqZZs2YpJyfH6L/gggu0f/9+7du3T5988onS0tK0detWXXnllfrH\nP/7hdK7G+zY9nnnmGaN/xowZevHFF9vtdZ2pv/71rxo6dKj279+vlStX6vPPP9d7772nYcOGac6c\nOe3+fGa9ztb6/vvvzQ4BANABkVQBAMBDfvKTnygsLMzp8Pf3b9U2mE8++US33nqrgoODFRYWpsTE\nxLNeOfDll18qMTFRF110kUJCQjRmzBgVFxcb/Y3bkAoKCnTVVVcpMDBQQ4cOVWFhodN58vLyNGjQ\nIHXp0kWDBw/W5s2b5efnp/Xr10uSLr30UknSqFGj5Ofnp4iICKfHv/vuuxowYICCgoI0atQoffnl\nl27jzsvL06FDh/Tzn//8tL5u3bopLCxMkZGRevLJJ9W/f3/l5uY63afx3/7yyy/XhAkT9PHHHys2\nNlbJycn64Ycfmr1v4xEcHGz0JSQk6Ouvv1Z+fr7beCXpq6++0k033aSAgABdfvnlevPNN40+q9Wq\n1NRUp/vX19fr8ssvV2ZmZrPnO3bsmKZOnarRo0frb3/7m8aMGaPLLrtMV1555Wkrn5qORaObb75Z\n06dPN9obNmzQ4MGDFRgYqIsuukjXXnut7Ha7ysrKdOONN0qSLrvsMvn5+Wn06NFGjM8++6wiIiLk\n7++vyMhIPf/8807PEx4erscee0xz585V9+7ddfHFF+vll19WXV2d7r33XoWEhKhv37566aWXnB5X\nU1OjX/3qV+rbt68CAwN11VVX6e233zb6G7dVrV+/Xj/72c8UFBSkxx57rMVxAACgvZFUAQDAQ9r6\nf/p37Nghq9WqESNG6JNPPtGmTZt0wQUX6JZbbmmxpocrBw4c0PXXX6+LL75Y+fn5+uc//6krrrhC\nVqtVFRUVxv1++OEHLVq0SC+88II+/fRThYWF6e6779bJkyclSXv27FFCQoKuu+46/etf/9Lvfvc7\nPfjgg07P9emnn0qScnNztX//fqc6KPv27dPy5cv1xhtvqKCgQNXV1ZoxY4bb2D/66CPFxcXpJz/5\nSYuv09/fv8UVDBdccIEefvhh7dy5U3a7vcVzNgoODtbAgQP197//vcX7PvLII5o1a5Y+++wzTZ48\nWUlJScZzzZkzR2+88YZqa2uN+//9739XeXm5Zs6c2ez5PvjgAx08eFBpaWnN9nfr1s1tPE1XMe3f\nv1933XWXkpKStGPHDm3dulUPPfSQOnXqpEsvvVQbNmyQJG3btk379+83klTLli3TY489pkWLFmnH\njh36n//5Hy1YsMBpy5UkvfDCC7riiiv06aef6v7779d9992nO++8U/3791dhYaHuu+8+PfDAA/r8\n888lOd4nCQkJ2r59u9566y2VlJRo7ty5+uUvf3nav/X8+fM1ZcoUlZSUnJaYAgDAE0iqAADgITab\nTcHBwcYRHR3dqsf95je/0R133KElS5YoKipKAwcO1GuvvaZvvvlGf/nLX9oUy8svv6zLLrtML730\nkgYOHKj+/fvr+eefV/fu3bVu3TrjfvX19fr973+vESNG6IorrlB6errKysq0a9cuSY4v1hdffLGy\nsrI0YMAAjR49Wk8++aTTc4WGhkqSQkJCFBYWph49ehh9//nPf/Taa69p8ODBio2N1SOPPKJ//OMf\n+u6771zGXlpaaqx+OVVj4urEiRP6wx/+oOLiYt18880t/nvExMRIkvG6JOnkyZNO4xUcHKyysjKn\nx4WHh6u0tLTF88+aNUuTJk1S//799fjjj+vaa6/V0qVLJUnjxo1T586dlZ2dbdz/D3/4g+644w5d\nfPHFzZ6v8Tkb4z4b+/bt04kTJ3TXXXepX79+uuKKK/TLX/5SV155pfz8/HTRRRdJknr27KmwsDB1\n795dkvT000/rgQce0KxZs3T55ZcrNTVVc+fOPW11zahRo/Tggw8qIiJCixYtUlBQkPz9/Y3b5s+f\nr27dumnTpk2SHEmzrVu36p133tHw4cMVHh6u2bNnKykpSS+88ILTuefMmaNJkyapX79+Cg8PP+t/\nCwAAzlQnswMAAKCjGDZsmNasWWO0O3Vq3cfwtm3btHPnTqetJ5IjIdHSVhl35/zkk09OO2ddXZ3T\nOS0Wi+Li4ox27969JTlWuvTv3187duzQ1Vdf7VS7ZdiwYa2Oo0+fPk5Jlt69e6u+vl7ffvut+vbt\n2+xjjh496rJv1qxZmjNnjurq6hQQEKCFCxcqJSWlxTgakzFNX8cFF1ygzz77zOl+pz5vcHCwKisr\nWzz/dddd59QeMWKE8vLyJDlW0yQnJ+uVV17RzJkzdejQIb3zzjtOtWBcxdse4uLiNGbMGF155ZW6\n5ZZbZLVaNX78eJf/xpJjDPbs2WNsDWp044036vnnn1ddXZ06d+582t+PxWJRz549FRsb63RbWFiY\nvv32W0mOv83vvvtOP/3pT53O/d133ykqKsrptmuuuabNrxsAgPZAUgUAAA/p3LnzafVEWqO+vl5T\np07VggULTutra4Hb+vp63Xzzzc3+ek3TrSN+fn5OiYbG/26sPXK2hXBP3cJz6vmb0717dx09erTZ\nvieffFJjx45VUFCQwsLCWh1HSUmJJJ02Pi2NV1VVlbGS40ycmhRJTU3V7373O23fvl15eXkKCwvT\n7bff7vLxAwYMMOIeMWKE2+eyWCynPV/TlUB+fn56//33tW3bNn344YfKycnRggUL9Mc//rHZujVn\n6tSfB7dYLM3e1jjmP/zwg7p163Za7R7p9L+XwMDAs44PAICzwfYfAAA8pK0JiKFDh+qzzz5TRETE\naUfjVoy2nLO4uFg//elPTztn05UjLYmJidG2bduckiBbt251uk/jF+HGOixnq3///tq9e3ezfb16\n9VJERMQZJVROnDihpUuXqn///ho8ePAZxbJ79+7TVk80Z8uWLU7tgoICDRw40GhffvnlGj16tF55\n5RWtXLlSM2bMcPv3cuuttyosLMxlIdumq2fCwsK0Z88eo/2f//xHO3bsOO0xV199tRYuXKiPPvpI\nI0eO1KpVqyQ1P35du3ZV37599dFHHzmd46OPPlJERIQ6d+7sMvaWDB06VEeOHNHx48dP+9t0t3oG\nAAAzkFQBAMBD2rplY9GiRfr88891zz33aNu2bfrqq6+0adMmPfjgg/rqq6/cPt+hQ4dkt9udjq++\n+kr33XefTp48qbFjxyo/P19lZWXKz89XWlraaQkAd+bNm6cDBw5o7ty5+vzzz7Vp0yajeGpjUiA0\nNFRBQUH661//qv3797dqu4w7I0eOVFFRkdu6K+4cOHBA+/fv1xdffKE//vGPuvHGG1VSUmIkEVqr\nurraKCLckldffVVvvPGGSktL9dhjj2nr1q16+OGHne6TmpqqrKws/fvf/9asWbPcnq9Lly5avXq1\nNm3apFtuuUV/+ctftGvXLm3fvl3PPvus03ajm2++WcuXL9fWrVtVXFys5ORkp+K9BQUFevzxx/V/\n//d/Ki8vV15enoqKioykT79+/eTn56c//elP+vbbb1VVVSVJWrhwoV544QX94Q9/0BdffKGsrCwt\nX75cixYtMs7d3N98S7fddNNNuvnmmzV+/Hht2LBBu3bt0ieffGI8FwAA3oSkCgAAHtD011Za09e0\nPWDAABUUFKimpkZjxozRwIEDlZKSorq6OrcrVSwWi95++21dddVVTse9996rsLAwbdmyRaGhoRo/\nfrwGDBige+65R19//bX69OnTbBzN3danTx+9++67Kigo0ODBg/XQQw/piSeekCRjtYKfn59eeukl\nvfXWW7rkkks0ZMgQt/8mLa3oGT16tEJDQ/Xee++5vV9z5z158qR69+6tn/70pxo6dKgyMzM1fPhw\nFRcXa/jw4WcUx7vvvqtLLrnktLoizT3v008/rRUrViguLk7r1q3TunXrFB8f73S/O++8U927d9dt\nt912Wj2R5tx2223atm2bevXqpZkzZyo6Olp33HGHNm/erP/93/817vfss8/qyiuv1JgxY/Tzn/9c\nVqtVV199tdHfvXt3bd26VWPHjlVUVJRmzpype+65R4sXL5bkWP3z1FNP6emnn1afPn00btw4SdLc\nuXP161//Wk8++aQGDhyo3/72t3rmmWecfqq5teN76m3vvvuuxo8fr4ceesh4Xe+//74iIyPdngcA\nAE+z1LdnpTM3Pv/8c91777369NNP1bNnT/32t7/VnXfeKUnKy8vTvffeq6+//lrXXnutVq9e7VTV\nf/78+Vq5cqUkRwG6p59+2ugrKyvT9OnT9X//93+69NJL9eKLL+qmm24y+tevX6+FCxfq0KFDuuWW\nW/Tqq6+2ae8zAABonY8//lhWq1Xbt2932uLSnp588klt3rxZ77///jk5f2vcdNNNuv322/Xf//3f\n7XK+Q4cO6ZJLLtGbb76phISEdjknAAA4tzyyUuXEiRMaO3asfvGLX6iyslIrVqzQPffcoy+++EIV\nFRUaP368MjMzVVlZqaFDh2rixInGY7OysrRhwwYVFRWpqKhIGzduVFZWltE/adIkDRkyRIcPH1Zm\nZqYmTJigiooKSY7ibXPmzNG6det04MABBQQEaN68eZ54yQAAdBgvv/yyCgoKVFZWpj//+c+aPXu2\nhg0bds4SKpL00EMPqbi4WNu2bTtnz+FOfn6+du3apQceeOCsz3XixAnt379faWlp6tu3LwkVAADO\nIx5ZqVJcXKzrrrtO1dXVxm1jxozRtddeq759+2rt2rXKz8+XJB07dkyhoaGy2+2KiorS8OHDNWPG\nDGNv8apVq7RixQpt2bJFpaWlio2N1aFDh4zq7yNHjtTkyZOVmpqqRYsWqby8XK+//rokadeuXYqO\njtbhw4epFg8AQDtZuHCh1q9frwMHDujiiy/WrbfeqmeeeYaVoa1ks9k0evRoRURE6LXXXjvt55cB\nAID3Mu0nlX/44QcVFxfr6NGjio2NNW4PCAhQZGSkSkpKFBUVpR07diguLs7oj42NNX72sKSkRBER\nEU4Jkri4OKf+66+/3uiLiIiQv7+/SktLz7i6PwAAaN5TTz2lp556yuwwzltWq9XtT0gDAADv5ZHt\nP1dccYXCwsL029/+Vt9//70++OADffzxxzp27JhqamrUrVs3p/t37drVWNVyan/Xrl1VU1PTbJ8k\nBQcHG/21tbVuzw0AAAAAANBWHlmpcuGFF+qdd97R/fffr2eeeUZDhw7V3XffLX9/fwUFBeno0aNO\n96+qqlJwcLAkndZfVVWloKCgZvuae2zjz/41199UZGSkdu7cefYvFgAAAAAA+JS4uDjZ7fbTbvfY\n9p9BgwbJZrMZ7eHDhxs/ubdmzRrj9traWu3cudMobjdw4EDZ7XYNHTpUkvTZZ5/pyiuvNPp27dql\nmpoaI9Hy2WefacqUKUb/Z599Zpx7586d+u677xQVFXVafDt37pSHfggJXiw9PV3p6elmhwHAZMwF\nACTmAgAOzAWQJIvF0uztHtn+I0nbt29XXV2djh07pmeffVYHDhxQcnKy7rzzThUXFys3N1d1dXXK\nyMhQfHy8kfiYOnWqli5dqr1792rPnj1aunSpkpOTJUlRUVGKj49XRkaG6urqlJubq+LiYiUmJkqS\nkpKStHHjRuXn56u2tlaLFy9WYmIiRWoBAAAAAMBZ81hS5bXXXlOfPn3Uq1cvbdq0SX/729904YUX\nqmfPnsrJyVFaWppCQkJUWFio7Oxs43GpqalKSEjQoEGDFBsbq4SEBKWkpBj92dnZKiwsVEhIiNLS\n0pSTk6MePXpIkmJiYrR8+XIlJSWpV69eOn78uJYtW+apl4zzUFlZmdkhAPACzAUAJOYCAA7MBXDH\nIz+pfD6wWCxs/4F+//vf68EHHzQ7DAAmYy4AIDEXAHBgLoDkOmdAUqUBSRUAAAAAANAcVzkDj23/\nAQAAAAAA8CUkVYAmmv5CFYCOi7kAgMRcAMCBuQDukFQBAAAAAABoA2qqNKCmCgAAAAAAaA41VQAA\nAAAAANoRSRWgCfZLApCYCwA4MBcAkJgL4B5JFQAAAAAAgDagpkoDaqoAAAAAAIDmUFMFAAAAAACg\nHZFUAZpgvyQAibkAgANzAQCJuQDukVQBAAAAAABoA2qqNKCmCgAAAJqy2SSr1ewoAADegJoqAAAA\nwBlgxT8AoCUkVYAm2C8JQGIuAOBQVmYzOwQAXoDrArjTyewAAAAAAG9hs/24QmXNGik83PHfVitb\ngQAAp6OmSgNqqgAAAKCp9HTHAQAANVUAAAAAAADaEUkVoAn2SwKQmAsAOHTvbjM7BABegOsCuENS\nBQAAAGhGfLzZEQAAvB01VRpQUwUAAAAAADSHmioAAAAAAADtiKQK0AT7JQFIzAUAHJgLAEjMBXCP\npAoAAAAAAEAbUFOlATVVAAAAAABAc6ipAgAAAAAA0I5IqgBNsF8SgMRcAMCBuQCAxFwA90iqAAAA\nAAAAtAE1VRpQUwUAAAAAADSHmioAAAAAAADtiKQK0AT7JQFIzAUAHJgLAEjMBXCPpAoAAAAAAEAb\nUFOlATVVAAAAAABAc6ipAgAAAAAA0I5IqgBNsF8SgMRcAMCBuQCAxFwA90iqAAAAAAAAtAE1VRpQ\nUwUAAAAAADSHmioAAAAAAADtyKNJlW+++UYJCQnq0aOHevfurfvvv18nT56UJOXl5WnAgAEKDAzU\n6NGjVV5e7vTY+fPnKzQ0VKGhoVqwYIFTX1lZmUaNGqXAwEBFR0crLy/PqX/9+vXq16+fgoKCNG7c\nOFVWVp7bF4rzFvslAUjMBQAcmAsASMwFcM+jSZUHHnhAoaGh2rdvn+x2uz766CMtW7ZMFRUVGj9+\nvDIzM1VZWamhQ4dq4sSJxuOysrK0YcMGFRUVqaioSBs3blRWVpbRP2nSJA0ZMkSHDx9WZmamJkyY\noIqKCklSSUmJ5syZo3Xr1unAgQMKCAjQvHnzPPmyAQAAAACAD/JoTZUrrrhCzz//vG677TZJ0iOP\nPKKjR4/qqquu0tq1a5Wfny9JOnbsmEJDQ2W32xUVFaXhw4drxowZmjVrliRp1apVWrFihbZs2aLS\n0lLFxsbq0KFDCgwMlCSNHDlSkydPVmpqqhYtWqTy8nK9/vrrkqRdu3YpOjpahw8fNu4vUVMFAAAA\nAAA0zytqqowZM0br16/X8ePHtWfPHr3//vu6/fbbtWPHDsXFxRn3CwgIUGRkpEpKSiTptP7Y2Fij\nr6SkRBEREU4Jkri4OKf+po+NiIiQv7+/SktLz+lrBQAAAAAAvs2jSZX09HQVFxera9euuuSSS3T1\n1Vdr7NixqqmpUdeuXZ3u27VrV1VXV0uSampq1K1bN6e+mpqaZvskKTg42Oivra09rb/puYGm2C8J\nQGIuAODAXABAYi6Ae5089UT19fUaM2aM7rrrLv3zn/9UdXW1ZsyYofnz5ysoKEhHjx51un9VVZWC\ng4Ml6bT+qqoqBQUFNdvX3GOrqqpc9jeVnJys8PBwSVL37t0VHx8vq9Uq6cc3Em3fbjfylnho06Zt\nTttut3tVPLRp0zanbbfbvSoe2rRp06btubbdbteRI0ckOX4cxxWP1VQ5ePCgevXq5ZTQeOedd7R4\n8WI98MADWrNmjVFTpba2Vj179jRqqowYMULTp083aqqsXLlSK1euVEFBgUpLSxUXF6eDBw8aiZYb\nbrhBU6ZMUUpKitLS0rR7926jpsrOnTsVExNDTRUAAAAAANAqptdUCQ0NVe/evfXyyy/r5MmTOnLk\niNasWaO4uDiNGzdOxcXFys3NVV1dnTIyMhQfH6+oqChJ0tSpU7V06VLt3btXe/bs0dKlS5WcnCxJ\nioqKUnx8vDIyMlRXV6fc3FwVFxcrMTFRkpSUlKSNGzcqPz9ftbW1Wrx4sRITE50SKgAAAAAAAGfK\nY0kVi8Wi3Nxcbdy4UaGhoerfv7/8/f313HPPKTQ0VDk5OUpLS1NISIgKCwuVnZ1tPDY1NVUJCQka\nNGiQYmNjlZCQoJSUFKM/OztbhYWFCgkJUVpamnJyctSjRw9JUkxMjJYvX66kpCT16tVLx48f17Jl\nyzz1snGeaVz2BaBjYy4AIDEXAHBgLoA7Hv1JZW/G9h9IjgmzcR8dgI6LuQCAxFwAwIG5AJLrnAFJ\nlQYkVQAAAAAAQHNMr6kCAAAAAADgS0iqAE2wXxKAxFwAwIG5APA+Foulwxw4P3QyOwAAAAAAAFrD\njJINFotN9fVWjz8vzg/UVGlATRUAAAAAwKksFomviqCmCgAAAAAAZ2jJErMjgDcjqQI0wd5pABJz\nAQAH5gIAkmS12swOAV6MpAoAAAAAAEAbUFOlATVVAAAAAABAc6ipAgAAAAAA0I5IqgBNsHcagMRc\nAMCBuQCAxFwA90iqAAAAAADgwurVZkcAb0ZNlQbUVAEAAAAAnMpikfiqCGqqAAAAAAAAtCOSKkAT\n7JcEIDEXAHBgLgDgYDM7AHgxkioAAAAAAABtQE2VBtRUAQAAAACcipoqkKipAgAAAADAGVuyxOwI\n4M1IqgBNsHcagMRcAMCBuQCAJFmtNrNDgBcjqQIAAAAAANAG1FRpQE0VAAAAAADQHGqqAAAAAAAA\ntCOSKkAT7J0GIDEXAHBgLgAgMRfAPZIqAAAAAAC4sHq12RHAm1FTpQE1VQAAAAAAp7JYJL4qgpoq\nAAAAAAAA7YikCtAE+yUBSMwFAByYCwA42MwOAF6MpAoAAAAAAEAbUFOlATVVAAAAAACnoqYKJGqq\nAAAAAABwxpYsMTsCeDOSKvBKFoulQx0AvAt1FABIzAUAHKxWm9khwIuRVIFXqq+vN+XYtGmTKc8L\nAAAAADj/UFOlATVVAAAAAABAc6ipAgAAAAAA0I5IqgBNsHcagMRcAMCBuQCAxFwA90iqAAAAAADg\nwurVZkcAb0ZNlQbUVIEkpac7DgAAAACQJItF4qsiXOUMSKo0IKkCiQkTAAAAgDO+I0DygkK1QUFB\nCg4ONo5OnTrpgQceMPrz8vI0YMAABQYGavTo0SovL3d6/Pz58xUaGqrQ0FAtWLDAqa+srEyjRo1S\nYGCgoqOjlZeX59S/fv169evXT0FBQRo3bpwqKyvP3QvFec5mdgAAvAB7pwFIzAUAGtnMDgBezGNJ\nlZqaGlVXV6u6ulr79+9Xly5ddPfdd0uSKioqlJiYqMzMTFVWVmro0KGaOHGi8disrCxt2LBBRUVF\nKioq0saNG5WVlWX0T5o0SUOGDNHhw4eVmZmpCRMmqKKiQpJUUlKiOXPmaN26dTpw4IACAgI0b948\nT71sAAAAAADgo0zZ/rNmzRo9/vjj+vLLLyVJK1as0Nq1a5Wfny9JOnbsmEJDQ2W32xUVFaXhw4dr\nxowZmjVrliRp1apVWrFihbZs2aLS0lLFxsbq0KFDCgwMlCSNHDlSkydPVmpqqhYtWqTy8nK9/vrr\nkqRdu3YpOjpahw8fNu4vsf0HDiztAwAAANAU3xEgecH2n6bWrFmjqVOnGu2SkhLFxcUZ7YCAAEVG\nRqqkpESStGPHDqf+2NhYo6+kpEQRERFOCZK4uDin/qaPjYiIkL+/v0pLS8/NiwMAAAAA+IwlS8yO\nAN7M40mV3bt36+OPP9a0adOM22pra9W1a1en+3Xt2lXV1dWSHFuHunXr5tRXU1PTbJ8kBQcHG/21\ntbWn9Tc9N9DUtGk2s0MA4AWoowBAYi4A4GC12swOAV6sk6ef8LXXXtMNN9ygfv36GbcFBQXp6NGj\nTverqqpScHBws/1VVVUKCgpq9WOrqqpc9jeVnJys8PBwSVL37t0VHx8vq9Uq6ccPVdq+3U5OllfF\nQ5s2bXPadrvdq+KhTZu2OW273e5V8dCmTZs2bc+17Xa7jhw5Isnx4ziueLymSlRUlBYtWqTkxm+v\nkl555RWtWbPGqKlSW1urnj17GjVVRowYoenTpxs1VVauXKmVK1eqoKBApaWliouL08GDB41Eyw03\n3KApU6YoJSVFaWlp2r17t1FTZefOnYqJiaGmCgAAAAAAaBWvqKlSUFCgvXv36q677nK6fdy4cSou\nLlZubq7q6uqUkZGh+Ph4RUVFSZKmTp2qpUuXau/evdqzZ4+WLl1qJGWioqIUHx+vjIwM1dXVKTc3\nV8XFxUpMTJQkJSUlaePGjcrPz1dtba0WL16sxMREp4QKAAAAAADAmfJoUmXt2rXNJjRCQ0OVk5Oj\ntLQ0hYSEqLCwUNnZ2UZ/amqqEhISNGjQIMXGxiohIUEpKSlGf3Z2tgoLCxUSEqK0tDTl5OSoR48e\nkqSYmBhQYbszAAAgAElEQVQtX75cSUlJ6tWrl44fP65ly5Z55gXjvNO47AtAx/b739vMDgGAF+C6\nAIDEXAD3TPlJZW/E9h9IjgmzcR8dgI4rOdmm1autZocBwGRcFwCQuC6Ag1ds/wG8nc1mNTsEAF4g\nPNxqdggAvAAJFQCStGaN1ewQ4MVYqdKAlSqQJItF4s8A6JhsNschSRkZ0pIljv+2Wh0HAADomPiO\nAMl1zoCkSgOSKpAki8Wm+nqr2WEAMBnLfAFIbP8B4MB3BEhs/wEAAAAAAGhXrFRpwEoVSCztA+Bg\ns7HlBwAAOPAdARIrVQAAaDUSKgAAoFFjnTWgOSRVgCamTbOZHQIAL2BrrFgLoENjLgAgSVarzewQ\n4MVIqgBNJCebHQEAAAAA4HxBTZUG1FQBAAAAAADNoaYKAAAAAABAOyKpAjTB3mkAEnMBAAfmAgAS\ncwHcI6kCAAAAAIALq1ebHQG8GTVVGlBTBZKUnu44AAAAAECSLBaJr4pwlTMgqdKApAokJkwAAAAA\nzviOAIlCtUAr2cwOAIAXYO80AIm5AEAjm9kBwIuRVAEAAAAAAGgDtv80YPsPJJb2AQAAAHDGdwRI\nbP8BAAAAAOCMLVlidgTwZiRVgCamTbOZHQIAL0AdBQAScwEAB6vVZnYI8GIkVYAmkpPNjgAAAAAA\ncL6gpkoDaqoAAAAAAIDmUFMFAAAAAACgHZFUAZpg7zQAibkAgANzAQCJuQDukVQBAAAAAMCF1avN\njgDejJoqDaipAklKT3ccAAAAACBJFovEV0W4yhmQVGlAUgUSEyYAAAAAZ3xHgEShWqCVbGYHAMAL\nsHcagMRcAKCRzewA4MVIqgAAAAAAALQB238asP0HEkv7AADwVhaLxewQPIZrUsC78B0BkuucQScT\nYgEAAADOCIkGAGZZssTsCODN2P4DNDFtms3sEAB4AeooAJCYCwA4WK02s0OAFyOpAjSRnGx2BAAA\nAACA8wU1VRpQUwUAAABNpac7DgAAXOUMSKo0IKkCAACApihOCQBo5CpnwPYfoAn2TgOQmAsANLKZ\nHQAAL8B1AdwhqQIAAAAAgAurV5sdAbwZ238asP0HEnunAQDAj9j+A0BiLoADNVVaQFIFEhMmAAD4\nEdcFACTmAjh4TU2V7OxsRUdHKygoSJGRkcrPz5ck5eXlacCAAQoMDNTo0aNVXl7u9Lj58+crNDRU\noaGhWrBggVNfWVmZRo0apcDAQEVHRysvL8+pf/369erXr5+CgoI0btw4VVZWntsXifOYzewAAHgB\n9k4DkKRp02xmhwDAK9jMDgBezKNJlb/97W9asGCB1qxZo5qaGm3evFkRERGqqKjQ+PHjlZmZqcrK\nSg0dOlQTJ040HpeVlaUNGzaoqKhIRUVF2rhxo7Kysoz+SZMmaciQITp8+LAyMzM1YcIEVVRUSJJK\nSko0Z84crVu3TgcOHFBAQIDmzZvnyZcNAACA81BystkRAAC8nUe3/wwfPlyzZ8/W9OnTnW5fsWKF\n1q5da6xaOXbsmEJDQ2W32xUVFaXhw4drxowZmjVrliRp1apVWrFihbZs2aLS0lLFxsbq0KFDCgwM\nlCSNHDlSkydPVmpqqhYtWqTy8nK9/vrrkqRdu3YpOjpahw8fNu4vsf0HDiztAwAAANAU3xEgecH2\nn5MnT+qTTz7Rt99+q/79++uSSy7R/fffr7q6OpWUlCguLs64b0BAgCIjI1VSUiJJ2rFjh1N/bGys\n0VdSUqKIiAinBElcXJxTf9PHRkREyN/fX6Wlpef09QIAAAAAzn9LlpgdAbyZx5IqBw4c0Pfff6+c\nnBzl5+fLbrfrX//6l5544gnV1taqa9euTvfv2rWrqqurJUk1NTXq1q2bU19NTU2zfZIUHBxs9NfW\n1p7W3/TcQFPsnQYgUVMFgANzAQBJslptZocAL9bJU0/UpUsXSdL999+vXr16SZIefvhhPfHEE7rx\nxht19OhRp/tXVVUpODhYkhQUFOTUX1VVpaCgoGb7mntsVVWVy/6mkpOTFR4eLknq3r274uPjZbVa\nJf34oUrbt9uNe6e9JR7atGmb0/5//8/uVfHQpk3bnLbdbveqeGjTpk2btufadrtdR44ckeT4cRxX\nPFpT5dJLL1VmZqamTJkiScrNzdUTTzyhuXPnas2aNUZNldraWvXs2dOoqTJixAhNnz7dqKmycuVK\nrVy5UgUFBSotLVVcXJwOHjxoJFpuuOEGTZkyRSkpKUpLS9Pu3buNmio7d+5UTEwMNVUAAC6lpzsO\nAB0bcwEAoJHpNVUkafr06XrhhRd08OBBVVZW6rnnnlNCQoLGjRun4uJi5ebmqq6uThkZGYqPj1dU\n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\ndruOHDkiyfHjOK60uqbKBx98oOzsbH377bd67733VFhYqKNHj2r06NGteXizbr/9dv385z+Xv7+/\n1qxZY9RUqa2tVc+ePY2aKiNGjND06dONmiorV67UypUrVVBQoNLSUsXFxengwYNGouWGG27QlClT\nlJKSorS0NO3evduoqbJz507FxMRQU+UMsLfO9zCmAAC0LD3dcQBoHteUvoXxdO+saqq88MILmjt3\nrvr376+PP/5YktS5c2c9+uijrQ6gqqpKf/3rX1VXV6cTJ05o3bp12rx5s2677TaNGzdOxcXFys3N\nVV1dnTIyMhQfH6+oqChJjlUtS5cu1d69e7Vnzx4tXbpUyQ3l2KOiohQfH6+MjAzV1dUpNzdXxcXF\nSkxMlCQlJSVp48aNys/PV21trRYvXqzExESnhAoAAABwqowMsyMAAHi7ViVVnnvuOX344YdauHCh\nLrjgAklSdHS0/v3vf7f6ib7//nstXrxYYWFh6tmzp1566SVt2LBBkZGRCg0NVU5OjtLS0hQSEqLC\nwkJlZ2cbj01NTVVCQoIGDRqk2NhYJSQkKCUlxejPzs5WYWGhQkJClJaWppycHPXo0UOSFBMTo+XL\nlyspKUm9evXS8ePHtWzZslbHjY7lx2VvADoy5gIADjazAwDgBbgugDut2v4TFhamvXv3qlOnTrro\nootUWVmp48ePKyIiQvv27fNEnOcc239c60jLwGw2m7GPzpd1pDEF2qKjzAUA3LNYbKqvt5odBuC1\nOso1ZUe5Lugo49lWrnIGrUqqJCYmavDgwXr00UeNpMpvfvMb2e12rV+//pwE7GkkVVzjzeV7GFMA\nAFrG5yXgHu8R38J4undWSZW9e/cqISFBFRUV2rt3ry677DIFBwfrvffeU+/evc9JwJ5GUsU13ly+\nhzEFAKBlfF4C7vEe8S2Mp3tnVai2T58+2rZtm9566y2tW7dOa9eu1bZt23wmoQI0Yr8kAIm5AIDD\ntGk2s0MA4AW4LoA7rUqqZGRkaPv27br22mt19913a9iwYfLz89PTTz99ruMDAAAATNHwY5MAALjU\nqu0/F154oS666CK9+OKLuvvuu43bg4ODVV1dfU4D9BS2/7jGMjDfw5gCAADgbHFN6VsYT/fOavtP\n586d9cEHH+iRRx7Ro48+2u7BAQAAAAAAnG9alVSRpPj4eG3btk2bN2/W2LFjfWaFCtAU+yUBSMwF\n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\niooKvfrqqwoPD1fz5s01ZswY4+O7b9x/xYoVCgsLU9OmTfXnP/+5Nn48QJ1jtVoVFxentWvXavny\n5crOzpYkFRcXa/To0WrWrJnCw8OVlpZmHJPvvvuuevTooRkzZshmsyk1NVWHDx9Wr169FBQUpKZN\nm2r48OHG9zh06JD69eunkJAQtWvXTu+//74k6auvvlKLFi0crpBZv369YmNjJUl79uxR586dFRgY\nqBYtWuj555+v9nU0atRIAwcOVEZGhiR7oue9995TQkKCw/Pv2rVLXbp0UVBQkB555BHt3r3b6Ovd\nu7dSUlLUo0cPWa1WPfXUUyooKFBCQoICAwP1yCOP6NixYz/3Rw6Y1s1/WHl5eTn8bk9KSlJKSorR\nfu2119SqVSu1bt1a77zzjsP9nZ1f3El4eLhef/11xcTEKCgoSMOHD9elS5eM/g0bNig2NlaBgYFq\n27attm7d+nNeNlBvjBo1SitWrDDay5cv1+jRox1+z97p2HV23H/00Ufq1KmTAgMDFRoaqtTU1GrH\nsmLFCh0/flwffPCB2rVrJ8n+BktycrL69+8vSfrmm2/Uu3dvNWnSRB06dNDGjRuNxyclJenZZ5/V\n7373O/n7++uzzz5TUlKSJk+erN/+9rcKCAhQ79693XIFDu4OSRXUGTeC5fnz57V27Vp169ZNkjRr\n1iwdPnxY+/bt0+HDh5Wfn6+XX35Zkj3jO378eOXl5SkvL08+Pj76/e9/7/C86enpeuedd1RWVqaw\nsDCHvptPznbs2KFDhw5py5YtWrZsmZYvX67MzEwdPXpUZWVltzz3F198oZycHG3fvl0vv/yyDh06\nVKM/E8BMunTpotatW2vnzp2SpD/84Q8qLS3V999/r88//1wrVqzQsmXLjPvv2bNHDz74oH744QfN\nmTNHKSkpeuKJJ3Tu3Dnl5+frueeekySVl5erX79+GjVqlM6cOaOMjAxNmTJFhw4dUpcuXRQSEuLw\nB83KlSs1ZswYSdK///u/a/r06SouLtbRo0f1zDPPOH0NiYmJxsne1q1b1aFDB7Vq1croLyws1JNP\nPqlp06apsLBQM2bM0JNPPqmioiLjPmvXrlV6erry8/N15MgRdevWTePHj1dhYaGioqKcnuAB9c3N\nWwbvtIWw6tUtW7Zs0RtvvKHt27fru+++U2ZmpsN9nZ1f3InFYtH777+vrVu36vvvv9f+/fv17rvv\nSrLHrjFjxuj1119XcXGxduzYofDw8J/0vEB917VrV5WUlOjQoUO6du2a1q5dq1GjRjncx9mxe6fj\n3t/fX+np6SouLtZHH32kt956Sxs2bLjtWD755BP1799fvr6+t+2/cuWK4uLi9MQTT+jMmTNasGCB\nEhISlJOTY9xnzZo1SklJUVlZmR599FFJ0urVq/WnP/1JBQUFio2NVUJCgqs/LtQSkiqoEyoqKjRw\n4EA1adJEQUFB2r59u/74xz+qoqJCb7/9tubPn6+goCD5+/tr9uzZxjvFwcHBio+PV+PGjeXv7685\nc+bo888/N57XYrEoKSlJUVFR8vLyUsOGDZ2O46WXXpKPj48aN26sVatW6fnnn1d4eLj8/Pw0d+5c\nZWRkOFy69+KLL8rb21vR0dGKiYnRvn377s0PCDCJVq1aqbCw0DhRmjt3rvz8/BQWFqbnn39eK1eu\ndLjv1KlT5eXlpcaNG6tRo0bKzc1Vfn6+GjVqpO7du0uSNm3apAceeEBjxoyRl5eXYmNjNWjQIL33\n3nuSpNGjRys9PV2SPemxbds2jRw5UpL96pPvvvtOBQUF8vX11a9//Wun4+/WrZsKCwuVk5OjFStW\nGMmZGz766CP98pe/VEJCgry8vDR8+HC1a9dOH374oSR7TBo7dqweeOABBQQEqH///oqMjFTfvn3V\noEEDDR06VF9//XXN/LCBOq7qucGNr6lTp/7kbQDvvfeexo0bp6ioKPn4+DgkLO90fvFTPPfcc2rR\nooWaNGmiuLg4ZWVlSZKWLl2q8ePH6ze/+Y0keyz75S9/eRevHKjfbryB8fe//13t27fX/fffb/Td\n6dh1dtxLUq9evfTQQw9Jkjp27Kjhw4c7/O1QVWFhoVq2bFntOL/88kuVl5dr1qxZatiwofr06aMB\nAwY4bF8aOHCg8Uaxt7e3JGnAgAF69NFH1ahRI6WlpWn37t0OV9rD85BUQZ1gsVi0YcMGFRUV6dKl\nS1qwYIF69eqlEydO6Pz583r44YeNE6r+/furoKBAkv2qlkmTJik8PFyBgYHq1auXiouLHd7JatOm\nzU8eR9X7njp1yuHKltDQUF29elWnT582bmvRooXxf19fX5WXl7v0+oH64sSJEwoODlZBQYGuXLly\nyzFW9aTi5mP3tddeU0VFhR555BF16NDBuKrl2LFj+sc//uHwh9fq1auNYzUhIUEbN27U+fPn9d57\n7+mxxx5T8+bNJdn/+MnJyVFUVJQeeeQRffTRR3d8DYmJiVqwYIEyMzMVHx/vEG9Onjyp0NBQn2G7\nWgAAC4hJREFUh/uHhYXp5MmTRvvG95akxo0bq1mzZg7tsrKyO44BqA+qnhvc+Fq4cOFPLnh96tQp\nhzjSunVr4/9nzpxxen7xU1Q9B/Dx8THOAU6cOKEHH3zwJz8PgB9ZLBYlJiZq1apVt936c6dj19lx\nL0n/+Mc/1KdPHzVr1kxBQUFavHhxtUVnQ0JCHH5/3+zkyZO3nKtU/Z1vsVhu6bdYLA5j8vPzU3Bw\nsNPvA/cjqYI6x2KxKD4+Xg0aNNCXX34pHx8fHTx40DihOnfunFHb5PXXX1dOTo727Nmj4uJiff75\n56qoqHAIvndT2KrqfVu1aqXc3FyjnZeXp4YNGzr8QQTgp/vqq6908uRJPfroo7LZbLrvvvtuOcaq\nnmjcfOw2b95cS5YsUX5+vhYvXqwpU6boyJEjCg0NVa9evRz+8CotLdWbb74pyX5C1bVrV61fv17p\n6elKTEw0nrNt27ZavXq1zpw5o5kzZ2rIkCG6cOGC09cxatQovfXWW3ryySfVuHFjh77777//lpoo\nx44dc3iXrSqKcAJ35+aEiq+vr86fP2+0T506Zfy/ZcuWOn78uNGu+n+bzeb0/OLnaNOmjQ4fPvyz\nnweor0JDQxUREaHNmzff8ql7dzp2nR33kjRy5EgNHDhQJ06c0Llz5zR58uRqC8g+/vjj2rp1q0OM\nqapVq1Y6fvy4Q1xy9jtfssewqmMqKytTYWGhw1ZieB6SKqgzbgSkiooKbdiwQefOnVOHDh30b//2\nb5o2bZrOnDkjScrPz9e2bdsk2QORj4+PAgMDVVhYeNtaBM7e0XLWN2LECL3xxhvKzc1VWVmZ5syZ\no+HDh8vLq/rDqq5+XCxwL9w4HkpKSrRp0yaNGDFCiYmJeuihh9SgQQM988wzSk5OVllZmY4dO6Y3\n3njjln3TVb3//vvGR60HBQXJYrGoQYMGGjBggHJycpSenq4rV67oypUr+uqrrxxqHI0ePVrz5s3T\ngQMHHE7Q0tPTjdgSGBgoi8Xi9BiXpAceeEA7duxQWlraLX39+/dXTk6O1qxZo6tXr2rt2rU6dOiQ\nBgwYcMvP5eb/A7h7sbGxWrVqla5du6YtW7Zox44dRt8zzzyjZcuW6dChQzp//rxeeeUVo8/Ly8vp\n+YUrbhzP48eP17Jly/Tpp5/q+vXrys/P17fffuvy8wL10dKlS/Xpp5/Kx8fH4fY7HbvOjnvJ/rdD\nkyZN1KhRI+3Zs0erV6+u9g2OxMREtWnTRoMHD9a3336r69ev6+zZs/rzn/+szZs3q2vXrvL19dVr\nr72mK1euKDMzU5s2bTIK6Vf3O/7jjz/WF198ocuXLyslJUXdunVzmoiB+5FUQZ0RFxcnq9WqwMBA\npaSkaPny5YqKitK8efPUtm1bde3aVYGBgerXr59RAGratGm6cOGCbDabunfvrv79+98SGJ29E1y1\n7+b7jRs3TomJiXrssccUEREhX19fLViwwOnz8q4z8KO4uDgFBAQoNDRUc+fO1fPPP+9QiHbBggXy\n8/NTRESEevbsqYSEBI0dO1bS7T9Kde/everatausVquefvpp/fd//7fCw8Pl7++vbdu2KSMjQ/ff\nf79atmyp2bNn6/Lly8ZjBw0apLy8PKMG0w03is1arVZNnz5dGRkZxp7nm1UdT/fu3Y1L/6uONSQk\nRJs2bdLrr78um82m//zP/9SmTZsUHBx82+e53eskjgDVu/mY+a//+i9t3LjR2PYXHx9v9D3xxBN6\n7rnn1KdPH0VGRt5S18DZ+cWdvq+z/i5dumjZsmWaPn26goKC1KdPHz7dA7hLERER+tWvfmW0qx5/\nzo7dOx33Cxcu1J/+9CcFBATolVde0bBhw6odQ6NGjfTJJ5+oXbt26tevnwIDA/XrX/9ahYWF6tq1\nq+677z5t3LhRmzdvVtOmTfX73/9eK1euVGRkpDHm2/2OHzlypFJTUxUSEqKvv/7aqPsGz2Wp4G0w\nAAD0i1/8QosXL1bfvn3dPRQAbvDNN9+oY8eOunz58h2vSANgDp523I8dO1atW7e+5QoaeDb3rxwA\nANxs/fr1slgsJFSAeuaDDz7QpUuXVFRUpJkzZ+qpp57yiD+sANw7nnzcc71D3eQZqwcAADfp3bu3\npkyZYhSuBVB/LFmyRM2bN1fbtm1133336a233nL3kADcY5583N9pKyE8E9t/AAAAAAAAXMCVKgAA\nAAAAAC4gqQIAAAAAAOACkioAAAAAAAAuIKkCAAAAAADgApIqAAAAAAAALiCpAgAA6oTVq1erc+fO\nslqtatWqlX73u9/piy++cPn5XnrpJSUmJtbgCAEAQH1DUgUAAHi8+fPna/r06XrhhRf0ww8/6Pjx\n45o6dao+/PBDdw+tRly7ds3dQwAAAC4gqQIAADxacXGxXnzxRS1cuFADBw6Uj4+PGjRooCeffFLz\n5s1TUlKSUlJSjPtnZmaqTZs2RnvevHlq3bq1AgIC1K5dO3366afasmWL5s6dq7Vr18pqtapTp06S\npJMnT+qpp55SSEiIfvGLX+idd94xnuell17S0KFDlZiYqICAAEVHR+u7777T3Llz1bx5c4WFhenv\nf/+7w7jHjx+vVq1aqXXr1kpJSdH169clSe+++6569OihGTNmyGazKTU19V7/GAEAwD1AUgUAAHi0\n3bt36+LFi4qPj79tv8VikcViuW3ft99+qzfffFN79+5VSUmJtm3bpvDwcD3xxBOaM2eOhg8frtLS\nUn399deSpOHDhys0NFSnTp3S//zP/2jOnDn67LPPjOfbtGmTRo8eraKiInXq1En9+vWTZE/GpKSk\naNKkScZ9k5KS1KhRIx05ckRff/21tm3b5pCk2bNnjx588EH98MMPmjNnzs/+OQEAgNpHUgUAAHi0\ns2fPymazycur+tOWioqK297eoEEDXbp0SdnZ2bpy5YpCQ0MVERFhPKbq444fP65du3Zp3rx5atSo\nkWJiYjRhwgStWLHCuM9jjz2mfv36qUGDBhoyZIjOnj2rWbNmqUGDBho2bJhyc3NVUlKi06dPa/Pm\nzXrjjTfk4+Ojpk2batq0acrIyDCeq1WrVpo6daq8vLzUuHHjn/tjAgAAbkBSBQAAeLSQkBAVFBQY\nW2fuRtu2bfWXv/xFL730kpo3b64RI0bo1KlTt73vyZMnFRwcLD8/P+O20NBQ5efnG+1mzZoZ//fx\n8ZHNZjOukvHx8ZEklZWV6dixY7py5YpatmypJk2aqEmTJpo8ebLOnDljPL7qFiUAAFA3kVQBAAAe\nrVu3bvL29tYHH3xw234/Pz+dP3/eaP/rX/9y6B8xYoT+93//V8eOHZPFYtHMmTMl6ZYtQ61atVJh\nYaHKysqM2/Ly8tS6deu7HnObNm3k7e2ts2fPqqioSEVFRSouLtY///lP4z7VbVkCAAB1B0kVAADg\n0QIDA/Xyyy9r6tSp2rBhg86fP68rV65o8+bNmjlzpmJjY/Xxxx+rqKhI//rXv/SXv/zFeGxOTo4+\n/fRTXbp0Sd7e3mrcuLEaNGggSWrRooVyc3ONLUBt2rRR9+7dNXv2bF26dEn79+/X3/72N40aNequ\nx9yyZUv99re/1YwZM1RaWqrr16/ryJEj2rFjR838UAAAgEcgqQIAADzejBkzNH/+fL366qtq1qyZ\nQkNDtXDhQsXHxysxMVExMTFGAdrhw4cbV4FcunRJs2fPVtOmTdWyZUsVFBRo7ty5kqShQ4dKsm8v\n6ty5syRpzZo1ys3NVatWrTRo0CC9/PLL6tu3r6TbF8R11l6xYoUuX76s9u3bKzg4WEOHDjWuonFW\nXBcAANQdlorqKrsBAAAAAACgWlypAgAAAAAA4AKSKgAAAAAAAC4gqQIAAAAAAOACkioAAAAAAAAu\nIKkCAAAAAADgApIqAAAAAAAALiCpAgAAAAAA4AKSKgAAAAAAAC4gqQIAAAAAAOCC/wdsJsQ4djRs\n3gAAAABJRU5ErkJggg==\n", "text": [ "" ] } ], "prompt_number": 59 }, { "cell_type": "code", "collapsed": false, "input": [ "# Plot box plots based on customer (PEs)\n", "df[df['type_tag']=='exe'].boxplot('length','customer')\n", "plt.xlabel('Customer')\n", "plt.ylabel('File Size')\n", "plt.title('File Length (PE) by Customer')\n", "plt.suptitle('')" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 60, "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\nmzN33323bDabtm/frqioKCMUt+n7cm7jpkePHgoODtamTZtczrNp0yb16dOnxbV7cvvtt2vv3r0K\nCwtr9nuua9euF3VuAAB8hStdAAAIUL9028iMGTN0xx136PHHH9fTTz+tyMhIlZeXq7CwUE8//bRu\nuummC75fVVWV7Ha7y/MRERF68skntWzZMo0YMUIzZ87U9ddfr++++07vv/++HnzwQZdtMy2ZMmWK\n5s+fr8mTJ+uZZ57R4cOHlZ2dLemnJlNkZKRCQ0O1fv16xcfHKzg4WO3bt/9Fn4UkDR48WC+99JJO\nnjxpKkz3fJWVlc2+Fx06dDDO9dVXX6mmpkbJyckez/Xiiy+qa9euiomJ0bx581RVVaUpU6YY802B\nutnZ2bJarXr00UdbPN91112nBQsWKCsrS8ePH9eECRMUGxurY8eOqbCwUEVFRdq0aZPatm2rQYMG\nae7cuerVq5dOnTql7OxsBQcHG+cqLCzUt99+q7vvvludOnXS9u3btX//fqMp1PT7prCwUIMGDVJI\nSIisVqueeuop5eTkqFOnTkpISNBf//pXvfPOO/rwww9Nfb4XkpaWpvnz5+uBBx5QXl6eevbsqcrK\nSn300Ufq3bu3RowYcVHnBwDAF7jSBQCAAHTuXWXMzJ077tWrl7Zs2aL6+nrdd999uuWWWzRx4kQ1\nNja2eKWLxWLR22+/rdtuu83l8bvf/U6dO3fW1q1bFRkZqYceeki9evXS448/rv379+u6665zuw53\nz1133XV65513tGXLFvXt21fPPvuscZVGmzZtJDmvtvjzn/+st956SzfccIP69evX4mfi6YqgIUOG\nKDIyUu+++26Lr3N33jNnzigqKkrXXXedy+Pcc7399tu66667jFtdt3S+l156STk5Oerbt6+2bt2q\nwsLCZldtjBs3TpKz6dD0mbTkiSee0KZNm9TY2KjRo0erV69eevjhh1VaWqr//u//Nl732muvKTQ0\nVAMHDtRjjz2mrKwsI3NHcjaS1q1bp/vvv18333yzpk2bppycHGM9t99+u55++mllZWWpS5cu+o//\n+A9JzrsSTZgwQc8884z69Omj/Px8rVq1SikpKR7X3pKmK2j69++vcePG6eabb1ZqaqqKi4sVExNj\nvO5it6wBAOBNFselSl/z4PHHH9eGDRvU0NCgyMhIPfHEE8b/bG3YsEG/+93vtH//ft155516/fXX\n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\nnZzsfAAAAODq1VLPoLWP1wIAwGXn/OZKbq6fFgIAAIDLCtuLAJPYrwlAksrLi/y9BAABgJ8LAEjU\nAnhG0wUAgJ8hKcnfKwAAAMDlgkwXE8h0AQAAAAAA7rTUM+BKFwAAAAAAAC+g6QKYxH5NABK1AIAT\ntQCARC2AZzRdAAAAAAAAvIBMFxPIdAEAAAAAAO6Q6QIAAAAAAOBjNF0Ak9ivCUCiFgBwohYAkKgF\n8IymCwAAAAAAgBeQ6WICmS4AAAAAAMAdMl0AAAAAAAB8jKYLYBL7NQFI1AIATtQCABK1AJ7RdAEA\nAAAAAPACMl1MINMFAAAAAAC4Q6YLAAAAAACAj9F0AUxivyYAiVoAwIlaAECiFsAzmi4AAAAAAABe\nQKaLCWS6AAAAAAAAd8h0AQAAAAAA8DGaLoBJ7NcEIFELADhRCwBI1AJ4RtMFAAAAAADAC8h0MYFM\nFwAAAAAA4A6ZLgAAAAAAAD5G0wUwif2aACRqAQAnagEAiVoAz2i6AAAAAAAAeAGZLiaQ6QIAAAAA\nANwh0wUAAAAAAMDHfNJ0OXnypJ544gnFxMQoPDxcffv21QcffCBJKi8vV1BQkMLCwoxHXl6ey/FT\np05VZGSkIiMjNW3aNJe58vJypaSkyGq1Kj4+Xhs2bHCZz8/PV3R0tEJDQzVy5EhVV1cbcydOnFBm\nZqYiIiIUFRWl+fPne+kTwJWA/ZoAJGoBACdqAQCJWgDPfNJ0OX36tG688UZ9/PHHqq2t1ezZs/XI\nI4+ooqLCeE1tba3q6upUV1en7Oxs4/lFixapsLBQO3fu1M6dO7Vu3TotWrTImB89erT69eunY8eO\nKS8vT6NGjdLRo0clSSUlJZo0aZJWrVqlyspKhYSEaMqUKcaxubm5KisrU0VFhTZu3Ki5c+dq/fr1\nPvhEAAAAAADAlc5vmS6JiYnKzc1V3759FRsbq1OnTqlVq1bNXjdw4EBlZmZq/PjxkqTly5dr8eLF\n2rp1q0pLS5WQkKCqqipZrVZJ0uDBg/XYY48pKytLM2bMUEVFhVauXClJ2rt3r+Lj43Xs2DFZrVZ1\n69ZNK1as0NChQyVJs2bNUmlpqVavXu2yBjJdAAAAAACAOwGX6VJZWanS0lLdcsstxnPR0dG64YYb\nlJmZqaqqKuP53bt3KzEx0RgnJCSopKREkvNKltjYWKPhIjmbOefOn3tsbGysgoODVVpaqurqah06\n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\nuXNnp+Oofez+/fvtroyJjo7WyZMn9ccffxj3dejQwfi/n5+fjh492qDXD7Qm+/btU2hoqEpKSlRd\nXX3OOKt94nH2+H3hhRdUU1Oj7t27q2vXrsZVMXv27NE333xj98fZ0qVLjfGakZGhVatWqbKyUm+/\n/bZuvPFGtW/fXpLtD6T8/HwlJiaqe/fu+uCDD+p9DZmZmZo7d64sFovS0tLs5pzi4mJFR0fbHR8T\nE6Pi4mJj+8xzS1K7du0UGRlpt11RUVFvDICnq31ucOY2f/58p4tx79+/324O6dSpk/H/gwcPOjy/\ncEbtcwBfX1/jHGDfvn269NJLnX4cAH8ymUzKzMzUkiVLzru0qL6x62jcS9I333yjfv36KTIyUsHB\nwVqwYEGdRXHDwsLs3rvPVlxcfM55Su33e5PJdM5+k8lkF5O/v79CQ0MdPg/cA0kXeBSTyaS0tDR5\ne3vr66+/lq+vr7Zt22accB0+fNiorfLiiy8qPz9fmzdvVllZmT777DPV1NTYTc4XUnir9rFRUVEq\nKCgwtgsLC9WmTRu7P5YAXJhvv/1WxcXF6tOnj8LDw3XRRRedM85qn4ycPX7bt2+v1157TUVFRVqw\nYIEeffRR7dq1S9HR0erbt6/dH2fl5eWaN2+eJNtJV48ePbRixQrl5uYqMzPTeMz4+HgtXbpUBw8e\n1MSJE3XXXXfp2LFjDl/HiBEj9Morr2jQoEFq166d3b6LL774nJose/bssfukrjYKhQLOOzvh4ufn\np8rKSmN7//79xv87duyovXv3Gtu1/x8eHu7w/OKv6Ny5s3bu3PmXHwdoraKjoxUXF6c1a9ac842B\n9Y1dR+NekoYPH64hQ4Zo3759Onz4sB5++OE6C9zecsstWrt2rd0cU1tUVJT27t1rNy85er+XbHNY\n7ZgqKipktVrtlinDPZF0gUc4M2HV1NRo5cqVOnz4sLp27aq///3vGjt2rA4ePChJKioq0rp16yTZ\nJipfX18FBQXJarWetw6Co0/EHO0bNmyYXnrpJRUUFKiiokJTpkxRenq6vLzqHnIt9atwgaZyZkwc\nOXJEq1ev1rBhw5SZmakrr7xS3t7euueeezR16lRVVFRoz549eumll85Zu13bO++8Y3ydfHBwsEwm\nk7y9vTV48GDl5+crNzdX1dXVqq6u1rfffmtXZ2nkyJGaPXu2fv75Z7uTuNzcXGN+CQoKkslkcjjO\n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\n", "text": [ "" ] } ], "prompt_number": 60 }, { "cell_type": "code", "collapsed": false, "input": [ "# Okay now lets do some plots on the file meta-data\n", "results = c.batch_work_request('meta_deep')" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 65 }, { "cell_type": "code", "collapsed": false, "input": [ "df_meta = pd.DataFrame(results)\n", "df_meta.head()" ], "language": "python", "metadata": {}, "outputs": [ { "html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
customerencodingentropyfile_sizefile_typefilenameimport_timelengthmd5mime_typesha1sha256ssdeeptype_tag
0 BearTron binary 2.440069 20480 PE32 executable (GUI) Intel 80386, for MS Windows ../data/pe/bad/0cb9aa6fb9c4aa3afad7a303e21ac0f3 2014-06-10T20:48:15.321000Z 20480 0cb9aa6fb9c4aa3afad7a303e21ac0f3 application/x-dosexec 96e85768a12b2f319f2a4f0c048460e1b73aa573 4ecf79302ba0439f62e15d0526a297975e6bb32ea25c8c... 192:a8jJIFYrq9ATskBTp2jLDL3P1oynldvSo71nF:oFpN... pe
1 Mega Corp binary 7.894680 85504 PE32 executable (GUI) Intel 80386, for MS Windows ../data/pe/bad/033d91aae8ad29ed9fbb858179271232 2014-06-10T20:48:19.036000Z 85504 033d91aae8ad29ed9fbb858179271232 application/x-dosexec 83ab10907b254752f312c89125957f10d35cb9d4 eb107c004e6e1bbd3b32ad7961661bbe28a577b0cb5dac... 1536:h6+LbfPbI5dzmJu9Tgj5aOItvEqRCHW9pjVrs2ryr... pe
2 Dorseys Mom binary 5.125292 64512 PE32 executable (GUI) Intel 80386, for MS Windows ../data/pe/bad/0e882ec9b485979ea84c7843d41ba36f 2014-06-10T20:48:19.146000Z 64512 0e882ec9b485979ea84c7843d41ba36f application/x-dosexec 12fb0a1b7d9c2b2a41f4da9ce5bbfb140fb16939 616cf9e729c883d979212eb55178b7aac80dd9f58cb449... 768:5HyLMqtEM1Htz8kDmP9l+nZZYp41oj7EZmJxl/N9j6... pe
3 Mega Corp binary 6.303055 81920 PE32 executable (GUI) Intel 80386, for MS Windows ../data/pe/bad/0e8b030fb6ae48ffd29e520fc16b5641 2014-06-10T20:48:19.258000Z 81920 0e8b030fb6ae48ffd29e520fc16b5641 application/x-dosexec 82d57b8302b7497b2f6943f18e2d2687b9b0f5eb feaf72bdad035e198d297bfb0b8d891645f1dacd78f0db... 1536:1uNqjqzs1hQHhInEeJMzcmGqyF7Jwe9pvUo+5TDU4... pe
4 Dorseys Mom binary 7.593283 97280 PE32 executable (GUI) Intel 80386, for MS Windows ../data/pe/bad/0eb9e990c521b30428a379700ec5ab3e 2014-06-10T20:48:19.519000Z 97280 0eb9e990c521b30428a379700ec5ab3e application/x-dosexec b778fc55f0538de865d4853099a3faa0b29f311d dc5e8176a5f012ebdb4835f9b570a12c045d059f6f5bdc... 1536:KcE4iMgXjTJpdGaaJG6Mhawv7r9ZaobsLBq+h5ttB... pe
\n", "

5 rows \u00d7 14 columns

\n", "
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 66, "text": [ " customer encoding entropy file_size \\\n", "0 BearTron binary 2.440069 20480 \n", "1 Mega Corp binary 7.894680 85504 \n", "2 Dorseys Mom binary 5.125292 64512 \n", "3 Mega Corp binary 6.303055 81920 \n", "4 Dorseys Mom binary 7.593283 97280 \n", "\n", " file_type \\\n", "0 PE32 executable (GUI) Intel 80386, for MS Windows \n", "1 PE32 executable (GUI) Intel 80386, for MS Windows \n", "2 PE32 executable (GUI) Intel 80386, for MS Windows \n", "3 PE32 executable (GUI) Intel 80386, for MS Windows \n", "4 PE32 executable (GUI) Intel 80386, for MS Windows \n", "\n", " filename \\\n", "0 ../data/pe/bad/0cb9aa6fb9c4aa3afad7a303e21ac0f3 \n", "1 ../data/pe/bad/033d91aae8ad29ed9fbb858179271232 \n", "2 ../data/pe/bad/0e882ec9b485979ea84c7843d41ba36f \n", "3 ../data/pe/bad/0e8b030fb6ae48ffd29e520fc16b5641 \n", "4 ../data/pe/bad/0eb9e990c521b30428a379700ec5ab3e \n", "\n", " import_time length md5 \\\n", "0 2014-06-10T20:48:15.321000Z 20480 0cb9aa6fb9c4aa3afad7a303e21ac0f3 \n", "1 2014-06-10T20:48:19.036000Z 85504 033d91aae8ad29ed9fbb858179271232 \n", "2 2014-06-10T20:48:19.146000Z 64512 0e882ec9b485979ea84c7843d41ba36f \n", "3 2014-06-10T20:48:19.258000Z 81920 0e8b030fb6ae48ffd29e520fc16b5641 \n", "4 2014-06-10T20:48:19.519000Z 97280 0eb9e990c521b30428a379700ec5ab3e \n", "\n", " mime_type sha1 \\\n", "0 application/x-dosexec 96e85768a12b2f319f2a4f0c048460e1b73aa573 \n", "1 application/x-dosexec 83ab10907b254752f312c89125957f10d35cb9d4 \n", "2 application/x-dosexec 12fb0a1b7d9c2b2a41f4da9ce5bbfb140fb16939 \n", "3 application/x-dosexec 82d57b8302b7497b2f6943f18e2d2687b9b0f5eb \n", "4 application/x-dosexec b778fc55f0538de865d4853099a3faa0b29f311d \n", "\n", " sha256 \\\n", "0 4ecf79302ba0439f62e15d0526a297975e6bb32ea25c8c... \n", "1 eb107c004e6e1bbd3b32ad7961661bbe28a577b0cb5dac... \n", "2 616cf9e729c883d979212eb55178b7aac80dd9f58cb449... \n", "3 feaf72bdad035e198d297bfb0b8d891645f1dacd78f0db... \n", "4 dc5e8176a5f012ebdb4835f9b570a12c045d059f6f5bdc... \n", "\n", " ssdeep type_tag \n", "0 192:a8jJIFYrq9ATskBTp2jLDL3P1oynldvSo71nF:oFpN... pe \n", "1 1536:h6+LbfPbI5dzmJu9Tgj5aOItvEqRCHW9pjVrs2ryr... pe \n", "2 768:5HyLMqtEM1Htz8kDmP9l+nZZYp41oj7EZmJxl/N9j6... pe \n", "3 1536:1uNqjqzs1hQHhInEeJMzcmGqyF7Jwe9pvUo+5TDU4... pe \n", "4 1536:KcE4iMgXjTJpdGaaJG6Mhawv7r9ZaobsLBq+h5ttB... pe \n", "\n", "[5 rows x 14 columns]" ] } ], "prompt_number": 66 }, { "cell_type": "code", "collapsed": false, "input": [ "# Plot entropy box plots based on file type\n", "df_meta.boxplot('entropy','type_tag')\n", "plt.xlabel('Mime Type')\n", "plt.ylabel('Entropy')" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 67, "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "iVBORw0KGgoAAAANSUhEUgAABDcAAAIPCAYAAABntDUtAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3XmYXXWZJ/D3hhDWxBAgYQmhDIsNtENwQelhKQV6aFpF\nkKURSAoCLaig6AgKhlQaVOjWh7C4tk0SAkZbO4pjs7SDXNCRnm6EolldAgHZl0TZwpLKnT8yKSyS\nXJIi99z3nvP5PM/l4VTdqvP+7jenKvXm/N6qNRqNRgAAAAB0qGHtLgAAAADgjdDcAAAAADqa5gYA\nAADQ0TQ3AAAAgI6muQEAAAB0NM0NAAAAoKNpbgBABxs2bFjcd9997S6jrer1emy33Xarfb/XCADK\nT3MDANaBrq6u2HjjjWPkyJExZsyYeN/73hcPPfRQu8saMHv27Nhnn33aXUZHy/Aa9vb2xnHHHdfW\nGgAgI80NAFgHarVa/OQnP4lnn302Hn300Rg3blyceuqp7S6rZZYuXdruEgAABmhuAMA6tsEGG8SH\nPvShuPvuuwfe9sc//jEmT54cY8eOja6urvjCF74QjUYjFi1aFNttt1385Cc/iYiI5557Lnbccce4\n4oorIiKip6cnTj755PjLv/zLGDVqVHR3d8eDDz64yvOu7hz33HNPnHLKKXHzzTcP3FmyKvfff3/s\nu+++MWrUqDjwwAPjYx/72MBdAgsXLoxhw4bFZZddFttvv30ccMAB0Wg04rzzzouurq4YN25cTJky\nJZ555pmIWPVWka6urvjZz34WEcvvQDj88MPjb/7mb2LUqFHx9re/Pf7rv/5r4LmPPPJIfOhDH4qx\nY8fGxIkT45JLLhl435IlS6KnpyfGjBkTu+22W/znf/7n62byr//6r7HDDjvElltuGWeccUY0Go14\n+eWXY8yYMXHnnXcOPO+JJ56ITTbZJJ5++ulBH7+q1/CWW26JcePGRaPRGHje/PnzY9KkSW94jaty\n7bXXxpe+9KX43ve+FyNHjow99tgjIiJmzZoVu+66a4waNSp22GGH+Na3vjXo4/7+7/8+ttlmmxg/\nfnx8+9vftk0HgFLS3ACAdWTFD7kvvPBCfO9734u99tpr4H2nnnpqPPvss3H//ffHjTfeGJdffnnM\nmjUrxowZE5dddlmcdNJJ8eSTT8bpp58eb3vb2+LYY48d+NjvfOc7cc4558RTTz0VkyZNimOOOWaV\n51/dOXbZZZf4xje+EXvttVc8++yzsWjRolV+/Ic//OF497vfHYsWLYre3t644oorolarDXrOTTfd\nFPfee29ce+21MWvWrJgzZ07U6/W477774rnnnouPf/zjq319Xvu5fvzjH8eRRx4Zixcvjg9/+MPx\nwQ9+MPr7+2PZsmXx/ve/P/bYY4945JFH4vrrr4+ZM2fGv/3bv0VExIwZM+L++++P++67L6677rqY\nM2fOSp/7tX70ox/Fr371q7j11lvjqquuissuuyxGjBgRRx999EAjKSJi3rx5ccABB8Tmm28+6ONX\n9Rq+4x3viC222CKuu+66gefNnTs3pkyZ8obXuCoHHXRQnHXWWfE3f/M38eyzz8Ztt90WERHjxo2L\nf/3Xf41nnnkmZs2aFaeffvrA+6699tq48MIL4/rrr4/f/va3Ua/XX/e1AoCO1AAA3rDtt9++semm\nmzZGjx7dWH/99Rvbbrtt44477mg0Go3G0qVLGyNGjGjcc889A8//5je/2eju7h44PvXUUxt//ud/\n3hg/fnxj0aJFA2+fMmVK4+ijjx44fu655xrrrbde46GHHmo0Go1GrVZrLFiw4HXPMWvWrMbee++9\n2vofeOCBxvDhwxtLliwZeNuxxx7bOPbYYxuNRqNx//33N2q1WuP+++8feP973/vexte//vWB41//\n+teN9ddfv9Hf39+44YYbGuPHjx90jq6ursb111/faDQajenTpzf22muvgfctW7assfXWWzd+/vOf\nN/793/+9MWHChEEf+8UvfrFx/PHHNxqNRmPixImN6667buB93/rWt1Y615+q1WqDnv+1r32tsf/+\n+zcajcZK53r729/e+P73v7/Kz7Oq1/D8889vHHPMMY1Go9F4+umnGxtvvHHjsccee8NrXJ3p06cP\nZLI6H/zgBxsXXXRRo9FoNI4//vjGWWedNfC+3/3udwN/ZgCgTIa3u7kCAGVQq9Xiqquuive+973R\naDTiRz/6Uey3335xzz33RKPRiFdeeSW23377gedPmDAhHn744YHjk046KS699NI4++yzY7PNNhv0\necePHz9wvMkmm8SYMWPikUceiW233Xbg7U899dTrnqOZRx55JMaMGRMbbrjhwNu22267+P3vfz/o\neX+61eTRRx9d6XxLly6Nxx9/fI3O+afrWrHORx55JGq1WjzyyCODXof+/v7Yd999B2r90zomTJjw\nuud67fMfeeSRiIh417veFRtttFHU6/XYaqutYsGCBfGBD3xgjeqPiDjmmGNit912ixdeeCH++Z//\nOfbdd98YN27cG17j2rjmmmtixowZ8dvf/jaWLVsWL7zwQvy3//bfImJ5Rnvuuecq6wGAMrEtBQDW\nsVqtFoceemist9568Ytf/CK22GKLWH/99WPhwoUDz3nwwQcHftDs7++Pv/3bv43JkyfHV7/61Viw\nYMHA8xqNxqAGw3PPPReLFi2KbbbZZtA5X+8cr7cVYeutt45FixbFkiVLBn38qta2wjbbbLPS+YYP\nHx7jxo2LTTbZJF544YWB9/X398eTTz456HP96bqWLVsWDz30UGy77bax3XbbxZvf/OZYvHjxwOOZ\nZ54ZmEuy9dZbD6ptdTNI/tRrn/+njaEpU6bEFVdcEXPnzo0jjjgiRowYscrPsarXcPz48fHud787\n5s+fH1dcccVKv8lkqGtcnWHDBv/V7aWXXooPfehDccYZZ8QTTzwRixcvjoMPPnhgi9TWW289qIbX\nNqsAoCw0NwBgHVnxA2Wj0YirrroqFi9eHLvsskust956ceSRR8bZZ58dzz33XDzwwANx4YUXDszV\n+OIXvxjrrbdezJo1Kz7zmc/E5MmTY9myZQOf9+qrr47/83/+T7z88ssxbdq02GuvvQb9cB4Rr3uO\ncePGxUMPPRSvvPLKKmvffvvt4x3veEf09vbGK6+8EjfffHP85Cc/adoUOfroo+PCCy+MhQsXxnPP\nPTcwD2LYsGGx8847x4svvhhXX311vPLKK3HeeefFSy+9NOjjf/WrX8UPf/jDWLp0acycOTM23HDD\nePe73x3vfOc7Y+TIkfH3f//3sWTJkujv748777wzbrnlloiIOPLII+NLX/pS/OEPf4iHHnrodQdx\nRkR8+ctfjj/84Q/x+9//Pi6++OI46qijBt537LHHxvz58+PKK6+MyZMnr/ZzbLXVVqt8DSdPnhwX\nXHBB3HnnnXHYYYetkzWuzrhx42LhwoUDf9ZefvnlePnll2OLLbaIYcOGxTXXXDNobseRRx4Zs2bN\ninvvvTdeeOGFOPfcc1/3tQKATqS5AQDryPvf//4YOXJkvOlNb4pp06bF5ZdfHrvssktERFxyySWx\nySabxMSJE2OfffaJY445Jo4//vj41a9+FRdeeGFcfvnlUavV4swzz4xarRYXXHBBRCy/W+DDH/5w\nzJgxIzbffPO47bbbBg3A/NPmw+rOERGx//77x2677RZbbbVVjB07dpX1X3nllXHzzTfH5ptvHtOm\nTYujjjpq0F0Mr210nHDCCXHcccfFvvvuGxMnToyNN954oNHwpje9Kb72ta/FiSeeGOPHj49NN910\n0NaQWq0WhxxySHzve9+LMWPGxJVXXhnz58+P9dZbL9Zbb734yU9+En19fTFx4sTYcsst42//9m8H\nfhPL9OnTY/vtt483v/nNcdBBB8XkyZNf986UQw45JN7+9rfHHnvsEe973/vihBNOGHjfdtttF297\n29ti2LBhsffee6/2c7z3ve9d5Wt42GGHxYMPPhiHHnrooG09b2SNq3PEEUdERMTmm28e73jHO2Lk\nyJFx8cUXx5FHHhljxoyJefPmxSGHHDLw/IMOOihOO+20eM973hM777zzwJDbDTbYoOl5AKDT1BqN\nP/n9ZQBAKscff3yMHz++Lf/iftRRR8Wuu+4a06dPX+efe8aMGfG73/0u5s6du84/91BMnTo1tt12\n2/i7v/u7IX38TjvtFN/85jfjve9978Dbsq0xYvmvtH3rW98aL7/88kpbXACgk/muBgCJFflvELfc\nckssWLAgli1bFtdcc038+Mc/jg9+8IMtOVemf1tZuHBhzJ8/P6ZOnTqkj58/f37UarVBjY2IPGv8\n4Q9/GC+99FIsXrw4zjzzzPjABz6gsQFA6fjOBgCJ1Wq1191ysa489thj8Z73vCdGjhwZp59+enzj\nG9+I3XffvSXnKnJdzUybNi3e+ta3xhlnnDHoN7+sqe7u7vjoRz8aX/3qV1d631DX+Fd/9VcxcuTI\nlR7nn3/+Wn+uiIhvfetbMW7cuNhxxx1j/fXXj69//etD+jwAkJltKQAAAEBHc+cGAAAA0NE0NwAA\nAICOprkBAAAAdDTNDQAAAKCjaW4AAAAAHU1zAwAAAOhomhsAAABAR9PcAAAAADqa5gYAAADQ0TQ3\nAAAAgI6muQEAAAB0NM0NAAAAoKNpbgAAAAAdTXMDAAAA6GiaGwAAAEBH09wAAAAAOprmBgAAANDR\nNDcAgLY44IAD4vjjj293GQBACWhuAACpvfLKK+0uAQBITnMDABiSSy65JP7sz/4sNtpoo9h5553j\ni1/8YvT390dERFdXV0yfPj0+8YlPxOabbx5bbbVVfOpTnxp4f09PT/zsZz+LOXPmxLBhw2LYsGFx\n0003xcKFC2PYsGHxne98Jw4++ODYdNNN45xzzomIiC9/+csxceLE2GCDDWLHHXeMiy66aFA9XV1d\n8fnPfz5OPPHEeNOb3hRbbrllnH322dFoNCIiore3N/7sz/5spXWccMIJccABB7TypQIAWkxzAwBY\na729vfGVr3wlLrjggrj33nvjoosuim9+85sxY8aMgedccsklse2228Z//Md/xCWXXBKXXnppzJkz\nJyIiLr744thnn33iqKOOisceeywee+yx2GuvvQY+9swzz4zjjjsu7rrrrvjIRz4SX/3qV+Occ86J\ns846K+6+++74zGc+E5/97GfjsssuG1TXJZdcEuPHj49bbrklLrzwwrjooovikksuiYiIk046KRYs\nWBA33XTTwPOfffbZ+P73vx8f+chHWvlyAQAtVmus+OcMAIA18MILL8SWW24ZP/zhD+Mv//IvB95+\n+eWXxyc+8YlYvHhxdHV1xaRJk+JHP/rRwPsPPvjgGD16dHznO9+JiIgDDzwwtttuu0ENioULF8bE\niRPj3HPPjbPPPnvg7dttt10cc8wxcf755w+87VOf+lRcddVVsWDBgohYfufG9ttvHzfeeOPAc84+\n++yYO3duPPjggxERccghh8SoUaNi7ty5ERHxzW9+M84555x4+OGHY/jw4evyZQIACuTODQBgrdx1\n112xZMmSOOyww2LkyJEDj5NPPjmeeeaZeOqpp6JWq8WkSZMGfdzWW28djz/++BqdY8899xz4/2ee\neSYefvjh2HfffQc9Z999942FCxfGiy++GBERtVpt0N0fERF/8Rd/EQ899FA899xzERHxkY98JP7l\nX/4l/vjHP0ZExD/+4z/GlClTNDYAoMP5Tg4ArJVly5ZFRMQPfvCD2HnnnVd6/5gxYyIiYsSIEYPe\nXqvVBj729WyyySZvsMpVO+igg2Ls2LFx+eWXxz777BO33nprzJs3ryXnAgCKo7kBAKyV3XbbLTbc\ncMNYsGBBHHTQQUP+PCNGjIilS5e+7vNGjRoV48ePjxtvvDEOPvjggbffeOONMXHixNhwww0jIqLR\naMTNN9886GN/+ctfxvjx42PTTTeNiIhhw4bFSSedFP/4j/8Y9957b+y3336x0047DXkNAEAOmhsA\nwFrZdNNN46yzzoqzzjorarVa7L///rF06dK44447oq+vL84///xYk5Feb37zm+OGG26I++67L0aN\nGhWjR49e7XM/97nPxac//enYaaedYr/99ouf/exn8Y1vfCO+9rWvDXpeX19fzJgxI44++ui45ZZb\n4uKLL47zzjtv0HOmTp0aM2bMiN/85jcxa9asob0IAEAqmhsAwFr7/Oc/H1tvvXVceuml8elPfzo2\n2mijeMtb3hI9PT0RsXwLymvVarVBb//0pz8dd9xxR+y+++7xwgsvxA033BATJkxY5ceecsop8fzz\nz8cXv/jF+OhHPxoTJkyICy64II4//vhBn/+0006LBx54IN75znfGiBEj4tRTT43TTjtt0Ofaaqut\n4q//+q/jF7/4RRx++OHr6BUBANqp0N+W8tBDD8Upp5wSv/zlL2PEiBFx+OGHx8yZM2O99dYrqgQA\noKTe/OY3x0knnRRnnXXW6z53zz33jH322Se+8pWvFFAZANBqhf62lNNOOy222GKLePTRR6Ovry9u\nvPHGlW4nBQAYijX595qnnnoqZs+eHbfddluceuqpBVQFABSh0G0pd911V1x00UUxYsSIGDduXBx0\n0EFx1113FVkCAFBSq9rO8lpjx46NMWPGxCWXXBJdXV2tLwoAKEShzY3/8T/+R3znO9+J/fbbLxYt\nWhTXXHPNSkO+AACG4v7773/d56zpr6IFADpLoTM3Fi1aFAcccEDccccd0d/fHz09PXHZZZcVdXoA\nAACghAprbjQajdhzzz3jsMMOi//5P/9nPPvss3HCCSfEW97ylrjgggsGnrfjjjvGggULiigJAAAA\n6BC777579PX1rfJ9hTU3nnzyyRg3blz88Y9/jJEjR0ZExI9+9KOYNm1a3HHHHa8WVKut0UCwTtDb\n2xu9vb3tLoPVkE9u8slLNrnJJzf5FGNN5q+sK2X5e2t2rp0hKuha6P3/j0K45tZK2a6dZv2Cwn5b\nyhZbbBFbb711fP3rX4/+/v74wx/+EHPmzIndd9+9qBIAAKiARqOx1o+I6UP8OEis0SjmMX16ceeC\n1SisuVGr1WL+/Pnxv/7X/4otttgidtppp9hggw3iwgsvLKqEwi1cuLDdJdCEfHKTT16yyU0+uckn\ns4XtLoAmXDu5ySevKmVT6G9Lede73hU///nPizxlW02aNKndJdCEfHKTT16yyU0+ucknM9kUZajb\nhubMmbPWH+PummL42pZXlbIp9LelrIkyzdwAAMrLXIdyqdXc8Z6ZfICI5v2CQu/cADrfmDERixe3\nu4p1Z7PNIhYtancVQCcaSsPBD2gwNNOnt7sCILvCZm5UUb1eb3cJNCGfoVm0uBaNaP3jhgLO0Yha\nLFpc3L+8loVrJzf5ZFdvdwEdacyY5Y2hVj4i6i0/R622fC2sve7uertLoAnfe/KqUjbu3ADWzpD+\npdKt2wAM3eLFrb/jpV6P6O5u7TkiCvvNnACVY+YGAEBBbEsZmjK9bmVaC0DRzNwAAGiiyHlCRfzL\nvXlCAFSNmRstVKX9TZ1IPrnJJy/Z5CafoVmx7aHVjxtuqBdynjINfi6Kayc3+eQmn7yqlI3mBgAA\nkNrs2e2uAMjOzA0AoPLKNgfBevIq01qK5HUDIpr3C9y5AQAAAHQ0zY0WqtL+pk4kn9zkk5dscpNP\nbvLJSzbZ1dtdAE24fvKqUjaaGwAAAEBHM3MDAKi8su3nL9t6Cvn9uUUqVTjFKN2faWBImvULhhdc\nCwAArJVaNErzg22tFlGSpRRq+vR2VwBkZ1tKC1Vpf1Mnkk9u8slLNrnJJzf55CWb3Lq76+0ugSZc\nP3lVKRvNDQAAAKCjmbkBAFRe2fbzW09eZVoLQNHM3AAAaKIRtYgSzaxs/Ml/AaAKbEtpoSrtb+pE\n8slNPnnJJjf5DE0tGsv/Ob3Fj/oNNxRynprGxlpz7eQmn9zkk1eVstHcAAAAUps9u90VANmZuQEA\nVF7Z5iBYT15lWkuRvG5ARPN+gTs3AAAAgI6mudFCVdrf1Inkk5t88pJNbvLJTT55ySa7ersLoAnX\nT15VykZzAwAAAOhoZm4AQFK1WnG/m7Tq33vLtp/fevIq01qK5HUDIpr3C4YXXAsAsIaG0nDwAwBQ\nRtOnt7sCIDvbUlqoSvubOpF8cpNPXrLJbcqUertLoAnXT16yya27u97uEmjC9ZNXlbLR3ACAEunp\naXcFAADFM3MDAKi8sm3nsZ68yrQWgKI16xe4cwMAAADoaJobLVSl/U2dSD65yScv2eQmn9zkk5ds\ncpNPbvLJq0rZaG4AAACpzZ7d7gqA7MzcAIAS6e1d/mDtlG0OgvXkVaa1FMnrBkQ07xdobgBAifgB\nYGjK9rpZT15lWkuRvG5AhIGibVOl/U2dSD65yScv2WRXb3cBNOH6yUs22dXbXQBNuH7yqlI2mhsA\nAABAR7MtBQBKxK3bQ1O218168irTWorkdQMibEsBAAA62PTp7a4AyE5zo4WqtL+pE8knN/nkJZvc\npkypt7sEmnD95CWb3Lq76+0ugSZcP3lVKRvNDQAokZ6edlcAAFA8MzcAgMor235+68mrTGsBKJqZ\nGwAAAEBpaW60UJX2N3Ui+eQmn7xkk5t8cpNPXrLJTT65ySevKmWjuQEAAKQ2e3a7KwCyK2zmxqab\nbhq1Wm3geMmSJfHRj340Lr744sEFmbkBAEPW27v8wdop2xwE68mrTGspktcNiGjeL2jLQNHnn38+\nttpqq7jmmmti7733HlyQ5gYADJkfAIambK+b9eRVprUUyesGRCQcKPqDH/wgxo0bt1Jjo2yqtL+p\nE8knN/nkJZvs6u0ugCZcP3nJJrt6uwugCddPXlXKpi3NjTlz5sTkyZPbcWoAAACgZArflvLAAw/E\nDjvsEAsWLIjtt99+5YJsSwGAIXPr9tCU7XWznrzKtJYied2AiOb9guEF1xJz586NffbZZ5WNjRV6\nenqiq6srIiJGjx4dkyZNiu7u7oh49bYax44dO3bs2PHKxxG56umU44h61Ot56rGecq+nTMdjxkQs\nXrz8eMXXn4jWHNdqrf38Ed2x2WYR8+cvP87w+jp2XPXjmTNnRl9f30B/oJnC79zYeeed46yzzoqe\nnp5VF1SiOzfq9fpAKOQjn9zkk5dscuvpqcfs2d3tLqPjFPWvwkVdP2X7V+4i1iOboXHtEOHvBpmV\nLZs0A0V/+ctfxiOPPBJHHHFEkacFgMpYzb8dAACUWqF3bpx88smxZMmSmDNnzuoLKtGdGwBAZyjb\nv9ZaT15lWkuE9QDFatYvKHxbyuvR3AAAila2H2isJ68yrSXCeoBipdmWUjUrhqGQk3xyk09esslN\nPrnJJy/Z5Caf3OSTV5Wy0dwAAAAAOpptKQBQIr29yx+snbLdim49eZVpLRHWAxTLzA0AqAh/MR+a\nsr1u1pNXmdYSYT1AsczcaJMq7W/qRPLJTT55ySa7ersLoAnXT16yyU0+ucknryplo7kBAAAAdDTb\nUgCgRNxSPTRle92sJ68yrSXCeoBi2ZYCAAAAlJbmRgtVaX9TJ5JPbvLJSzZDM2bM8n8RbPUjol7I\necaMafcr2plcP3nJJjf55CafvKqUzfB2FwAAVbB4cTG3OtfrEd3drT/P8kYKAEAOZm4AQAHKto/b\nenKznrzKtJYI6wGKZeYGAAAAUFqaGy1Upf1NnUg+ucknL9nkJp/c5JOXbHKTT27yyatK2WhuAAAA\nAB3NzA0AKEDZ9nFbT27Wk1eZ1hJhPUCxzNwAAAAASktzo4WqtL+pE8knN/nkJZvc5JObfPKSTW7y\nyU0+eVUpG80NAAAAoKOZuQEABSjbPm7ryc168irTWiKsByiWmRsAAABAaWlutFCV9jd1IvnkJp+8\nZJObfHKTT16yyU0+ucknryplo7kBAAAAdDQzNwCgAGXbx209uVlPXmVaS4T1AMUycwMAAAAoLc2N\nFqrS/qZOJJ/c5JOXbHKTT27yyUs2ucknN/nkVaVsNDcAAACAjmbmBgAUoGz7uK0nN+vJq0xribAe\noFhmbgAAAAClpbnRQlXa39SJ5JObfPKSTW7yyU0+eclmaBpRW367Q4sf9QLOEbXa8vWw1lw/eVUp\nG80NAABgSGrRWL6Po9WPG24o5Dy1sCcFOpWZGwBQgLLt47ae3KwnrzKtJcJ6gGKZuQEAAACUluZG\nC1Vpf1Mnkk9u8slLNrnJJzf55CWb3OSTm3zyqlI2mhsAAABARzNzAwAKULZ93NaTm/XkVaa1RFgP\nUCwzNwAAAIDS0txooSrtb+pE8slNPnnJJjf55CafvGSTm3xyk09eVcpGcwMAAADoaGZuAEAByraP\n23pys568yrSWCOsBimXmBgAAAFBamhstVKX9TZ1IPrnJJy/Z5Caf3OQzdLVaqx/1As4Rsdlm7X4l\nO5NrJzf55FWlbIa3uwAAAGimiG0CtiMAdDYzNwCgAGX7wcl6civbeorgNRuasr1uZVsPlI2ZGwAA\nAEBpFd7c+O53vxu77LJLbLrpprHjjjvGL37xi6JLKEyV9jd1IvnkJp+8ZDM0jShgM3+tFvUihgbU\nasvXw1pz/WRWb3cBNOHayU0+eVUpm0Jnbvz0pz+Nz372s/HP//zPseeee8ajjz5qCwoAlVCLRjG3\nOtfrEd3dLT9NrRbhOzgAkEWhMzf+4i/+Ik466aQ4/vjjV1+QmRsAlFDZ9nFbT25lW08RenuXP1g7\nZfuzVrb1QNmkmLnR398fv/rVr+KJJ56InXbaKbbbbrs49dRT48UXXyyqBAAAWCWNDYDOVlhz4/HH\nH49XXnkl/uVf/iV+8YtfRF9fX9x2221x3nnnFVVC4aq0v6kTySc3+eQlm9zkk5t88pJNbvLJTT55\nVSmbwmZubLTRRhERceqpp8a4ceMiIuJTn/pUnHfeeSs1OHp6eqKrqysiIkaPHh2TJk2K7v+/f3hF\nOI4dO3bsuD3HK2Spp1OOI+qxfBxGa8+3QlnWI5/c6ynTcV9fX6p6HMunk47lk/e4r68vVT1rezxz\n5szo6+tJ/QpBAAAgAElEQVQb6A80U+jMjQkTJsQXvvCFOO644yIiYv78+XHeeefFrbfe+mpBZm4A\nUEJl28dtPbmVbT3kVbY/a2VbD5RNipkbERHHH398XHLJJfHkk0/G4sWL48ILL4z3v//9RZYAAAAA\nlEyhzY1p06bFO9/5zth5551j1113jbe//e1x9tlnF1lCoVbcUkNO8slNPnnJJjf55CafvHp66u0u\ngSZcO7nJJ68qZVNoc2P48OHx1a9+NRYvXhyPPvpozJw5M0aMGFFkCQAAsJI5c9pdAQBvRKEzN9aE\nmRsAlFHZ9nFbT25lW08RvGZDU7bXrWzrgbJJM3MDAAAAYF3T3GihKu1v6kTyyU0+eckmN/nkJp/M\n6u0ugCZcO7nJJ68qZaO5AQAAAHQ0MzcAoABl28dtPbmVbT1F6O1d/mDtlO3PWtnWA2XTrF+guQEA\nBSjbX5itJ7eyrYe8yvZnrWzrgbIxULRNqrS/qRPJJzf55CWb3OSTm3zyks3Q1WpFPOqFnGezzdr9\nanYm109eVcpmeLsLKLO+voju7nZXAQAArVHUXQ7uqABej20pLWTvJgArlO0v5taTW9nWA/5MAxG2\npQAAAAAlprmxjtXrr96xMWNGfeD/K7TVqWNUaf9ZJ5JPXrLJTT65ySevnp56u0ugqXq7C6AJX9vy\nqlI2Zm6sY93dr87Z+Pd/ty0FAKATzJkTMXt2u6sAYKjM3GihSZOWDxUFgLLtF7ee3Mq2niJ4zXIz\nyw6IaN4v0NxoIc0NAFYo2w9O1pNb2dZTBK8ZQH4GihboT2du3H67mRuZVWn/WSeST16yyU0+uckn\ns3q7C6AJ105u8smrStlobgAAAAAdzbaUFurudscGAMuV7ZZ368mtbOspgpkOAPnZltImXV3trgAA\ngDWhsQHQ2TQ3WmjSpHq7S6CJKu0/60TyyUs2ucknN/nkJZvcenrq7S6BJlw/eVUpG82NFpo0qd0V\nAABA55szp90VANmZubGGarVaYefKuH4A3piyzUAo43rKZLPNIhYtancVsO6U7WsOMDRmbqwDjUZj\nrR/Tp6/9x2hsAEDxGo1iHkWdS2MDgKrR3GihGTPq7S6BJqq0/6wTyScv2eQmn+zq7S6A1TDTIbt6\nuwugCd978qpSNpobAABUnpkOAJ3NzI0WsjcQgBXK9j2hbOspitctL9nk1tvr1/UCzfsFmhst5Jsk\nACuU7XtC2dZTFK9bXrIByM9A0bapt7sAmqjS/rNOJJ+8ZJObfHKbMqXe7hJYrXq7C6AJX9tyk09e\nVcpGc6OFpkxpdwUAQCY9Pe2uAADKybYUAChA2W55L9t6wEwHgPzM3ACANitbM6Bs6wEA8jNzo02q\ntL+pE8knN/nkJZvc5JObfPKSTW49PfV2l0ATrp+8qpSN5gYAAJDanDntrgDIzrYUAChA2bZxlG09\nRTHXAYbG1xwgwraUtvGXFwDgT82Y0e4KAKCcNDdaaMaMertLoIkq7T/rRPLJSza5ySe7ersLYDXM\ndMiu3u4CaML3nryqlI3mBgAAlWemA0BnM3OjhewNBGCFsn1PKNt6iuJ1y0s2uZlXA0Q07xdobrSQ\nb5IArFC27wllW09RvG55yQYgPwNF26be7gJookr7zzqRfPKSTW7yyW3KlHq7S2C16u0ugCZ8bctN\nPnlVKZvh7S6gHcaMiVi8uJhz1WqtP8dmm0UsWtT68wAAb0xPT7srAIByquS2lLLddli29QCUUdm+\nVpdtPWCmA0B+Zm6sdI5y/YWsbOsBKKOyfa0u23oAgPzM3GiTKu1v6kTyyU0+eckmN/nkJp+8ZJNb\nT0+93SXQhOsnryplo7kBAACkNmdOuysAsit0W0p3d3f83//7f2P48OVzTMePHx/33HPP4IKK+FWw\nRUz5LJp7gwFSK9s2jrKtpyjmOsDQ+JoDRCSaufGe97wnjjvuuDjhhBNW+xwzN9Ze2dYDUEZl+1pd\ntvUUxesGQ+PaASKSzdxINr+0paq0v6kTySc3+eQlm9zkk1293QWwGmY6ZFdvdwE04XtPXlXKpvDm\nxuc+97nYcsstY++9944bb7yx6NMDAMBKzHQA6GyFbkv5j//4j9htt91ixIgRMW/evPj4xz8efX19\nMXHixFcLsi1lrZVtPQBlVLav1WVbT1G8bnnJJjfzaoCI5v2C4UUWsueeew78/+TJk2PevHlx9dVX\nx8c//vFBz+vp6Ymurq6IiBg9enRMmjQpuru7I+LV22re6HHEuv187T4u23ocO3bsuGzHEfWo1/PU\nYz3tOfb9OvexfPIeL//fPPU4duy4mOOZM2dGX1/fQH+gmULv3Hitv/qrv4q//uu/HtTcKNOdG8u/\nEHe3/Dz+pWFoisqHoZFPXrIZGt97yqdW4G9fq9LMsnap1erRaHS3uwxWw/ee3OSTV9mySTFQ9I9/\n/GNcd9118eKLL8bSpUvjyiuvjJ///Odx0EEHFVUCAMA602g01vpxww03DOnjAIDmCrtz46mnnoqD\nDz447r333lhvvfVil112iXPPPTf233//wQUVdOdGmWy2WcSiRe2uAoBmynanQ9nWA2Y6AOTXrF/Q\n1m0pq1JEc6Mo/uIHwApl+55QtvUAAPml2JZSTfV2F0ATK4bVkJN88pJNbvLJTT55ySa3np56u0ug\nCddPXlXKRnMDAABIbc6cdlcAZGdbSgu5ZReAFcr2PaFs6wFy8zUHiLAtBQAAACgxzY01VKvV1voR\nsfYfUyvbr3JJrEr7zzqRfPKSzdDVakU86oWcZ7PN2v1qdibXT15mOmRXb3cBNOFrW15VykZzYw35\nXfYAvBGNRjGPos7lV5BTNmY6AHQ2MzcAoETsS4ehce3k1tu7/AFUW7N+geYGAJSIH9BgaFw7APkZ\nKNomVdrf1Inkk5t88pJNdvV2F0ATrp/M6u0ugCZcO7nJJ68qZaO5AQAAAHQ021IAoETsS4ehce0A\n5GfmBgAAANDRzNxokyrtb+pE8slNPnnJJjf55CafvGSTW09Pvd0l0ITrJ68qZaO5AQAApDZnTrsr\nALKzLQUAAEjNr+oFImxLAQAAAEpMc6OFqrS/qRPJJzf55CWb3OxLz831k5drJ7t6uwugCV/b8qpS\nNpobAFAi9qXD0Lh2ADqbmRsAUCL2pcPQuHZy6+1d/gCqrVm/QHMDAErED2gwNK4dgPwMFG2TKu1v\n6kTyyU0+eckmu3q7C6AJ109m9XYXQBOundzkk1eVstHcAAAAADqabSkAUCL2pcPQuHYA8jNzAwAA\nAOhoZm60SZX2N3Ui+eQmn7xkk5t8cpNPXrLJraen3u4SaML1k1eVstHcAAAAUpszp90VANnZlgIA\nAKTmV/UCEbalAAAAACW2Rs2Np59+utV1lFKV9jd1IvnkJp+8ZJObfem5uX7ycu1kV293ATTha1te\nVcpmjZobEyZMiEMOOSR+8IMfxMsvv9zqmgCAIbIvHYbGtQPQ2dZo5sYTTzwR8+bNi7lz58aCBQvi\niCOOiMmTJ8fee++97gsycwMAhsy+dBga105uvb3LH0C1NesXrPVA0XvvvTfmzp0bV155ZQwbNiyO\nPfbYmDp1amy//fYtLxYAaM4PaDA0rh2A/NbpQNHHHnssHn/88XjmmWdi4sSJ8fDDD8ekSZPiS1/6\n0hsutGyqtL+pE8knN/nkJZvs6u0ugCZcP5nV210ATbh2cpNPXlXKZviaPOnOO++MK664IubNmxcb\nbbRRTJkyJW6//fbYbrvtIiJi2rRp8da3vjU+97nPtbRYAAAAgNdao20pY8aMiaOPPjomT54c73rX\nu1b5nGnTpsW55577xguyLQUAhsy+dBga1w5Afm945sbLL78cI0aMWOeFrYrmBgAAAPBab3jmxvrr\nrx//9E//FAcccEDsuuuuceCBB8a3v/3tWLZs2TottGyqtL+pE8knN/nkJZvc5JObfPKSTW49PfV2\nl0ATrp+8qpTNGs3cOPPMM+Oqq66KT37ykzFhwoR48MEH4ytf+Ur8+te/jn/4h39odY0AAECFzZkT\nMXt2u6sAMlujbSlbbrll3HrrrQMDRCMifv/738cee+wRTz311LotyLYUgKGp1dpdwbrn+wEA4Vf1\nAss16xes0Z0bo0aNipEjRw5628iRI+NNb3rTG68OgHXD3/oAAKioNZq58clPfjI+9KEPxb/927/F\nPffcE9ddd10cccQRcfrpp8d999038GCwKu1v6kTyyU0+eckmN/vSc3P95OXaya7e7gJowte2vKqU\nzRrdufGJT3wiIiJuuOGGQW+//vrr47TTTouI5beH9Pf3r+PyAIC1YV86DI1rB6CzrdHMjSKZuQEA\nQ2dfOgyNaye33t7lD6DamvUL1qq58eCDD8bDDz8c2267bUyYMGGdFTioIM0NABgyP6DB0Lh2APJr\n1i9Yo5kbjz76aOy3336x4447xmGHHRY77rhj7LvvvvHII4+sdTG//e1vY8MNN4zjjjturT+201Rp\nf1Mnkk9u8slLNtnV210ATbh+Mqu3uwCacO3kJp+8qpTNGjU3Tj755Nh9991j8eLF8eijj8bixYtj\njz32iJNPPnmtT/ixj30s9txzz6iV8VcWAgAAAIVbo20pm2++eTz66KMxYsSIgbe99NJLsc0228TT\nTz+9xif77ne/Gz/84Q9j1113jd/97ncxd+7clQuyLQUAhsy+dBga1w5Afm94W8qYMWPi7rvvHvS2\ne++9NzbbbLM1LuKZZ56J6dOnx4UXXqh5AQAt4oczGBrXDkBnW6PmxhlnnBEHHnhgfPazn42vf/3r\nceaZZ8aBBx4Yn/nMZ9b4RNOmTYsTTzwxttlmm8psSanS/qZOJJ/c5JOXbHKTT27yyUs2xanVaoU9\nKIbrJ68qZTN8TZ500kknxQ477BBXXnll/Nd//Vdss802MW/evNh///3X6CR9fX1x/fXXx2233RYR\n8bp3bvT09ERXV1dERIwePTomTZoU3d3dEfFqOI4dO3bsuD3HK2Spx/Hg4xWy1ON48PEKWepx/Opx\nX19fqnrKfHzDDTes9cf39fXFJz/5yRT1O1752PWT97ivry9VPWt7PHPmzOjr6xvoDzTzujM3li5d\nGm95y1vi7rvvjg022OB1P+GqXHTRRXH22WfHyJEjIyLiueeei/7+/th1113jlltuGVyQmRsAAADA\nazTrF6zRQNGddtop/vM//zNGjx49pAKWLFkSzz77bEQsv2vjy1/+cixcuDC+8Y1vxOabb77GxQIA\nAADV9IYHip5++ulx1FFHRb1ejwULFsR999038FgTG220UYwdOzbGjh0b48aNi0033TQ22mijlRob\nZbPilhpykk9u8slLNrn19NTbXQJNuH7ycu3k5trJTT55VSmbNZq58fGPfzwiIn7605+u9L5ly5at\n9UmnT5++1h8DALy+OXMiZs9udxXQeVw7AJ1tjbalFMm2FAAYulotwrdRWHuuHYD83vC2lNNOO22V\nb18xsRgAAACgXdaouTFr1qxVvv3yyy9fp8WUTZX2N3Ui+eQmn7xkk1293QXQhOsns3q7C6AJ105u\n8smrStk0nbnxT//0TxGx/NfBXnbZZdFoNKJWq0VExIIFC2LLLbdsfYUAAAAATTSdudHd3R21Wi1+\n/vOfxz777PPqB9VqMW7cuPjEJz4R7373u9dtQWZuAMCQ9fYufwBrx7UDkF+zfsEaDRQ9++yz4wtf\n+MI6L2xVNDcAAACA13rDA0VXNDaeeOKJuO+++wY9WL0q7W/qRPLJTT55ySY3+eQmn7xkk5t8cpNP\nXlXKpunMjRWuvfbamDp1ajz66KOD3l6r1aK/v78lhQFA1a2Yc1UEd00CAJ1sjbalTJw4Mc4444yY\nPHlybLzxxq0tyLYUAAAA4DXe8MyNMWPGxNNPP13IvyBpbgAAAACv9YZnbkydOjUuu+yydVpUFVRp\nf1Mnkk9u8slLNrnJJzf55NXTU293CTTh2slNPnlVKZs1mrlx8803x0UXXRTnn39+bLXVVgNvr9Vq\ncdNNN7WsOAAAKMKcORGzZ7e7CgCGao22pcxezVf6Wq0WU6ZMWbcF2ZYCAMAbYBgvQDkNeebGaaed\nFhdffPHA8be//e048cQTB44PO+ywmD9//josVXMDAAAAWNmQZ27MmjVr0PFnPvOZQcc//elP32Bp\n5Val/U2dSD65yScv2eQmn9zkk5dscpNPbvLJq0rZrNFAUQAAAICsmm5LGTlyZDz77LMDx5tttlks\nXrx4te9fJwXZlgIAQMHq9Yju7nZXAUAzzfoFTX9bSn9/f/zsZz+LiOXDkpYuXTrouL+/fx2XCgAA\nxdPcAOhsTbeljB07NqZOnRpTp06NE088MTbffPNBx+PGjSuqzo5Upf1NnUg+ucknL9nkJp/c5JPX\nwoX1dpdAE66d3OSTV5WyaXrnxsKFCwsqAwAAilWvL39ERMyZE9HVtfz/u7vdxQHQaZrO3GgHMzcA\nAChab+/yBwB5DflXwQIAAABkp7nRQlXa39SJ5JObfPKSTW7yyU0+eY0eXW93CTTh2slNPnlVKRvN\nDQAAKm/SpHZXAMAbYeYGAAAAkJ6ZGwAAAEBpaW60UJX2N3Ui+eQmn7xkk5t8cpNPXrLJTT65ySev\nKmWjuQEAAAB0NDM3AAAAgPTM3AAAAABKS3Ojhaq0v6kTySc3+eQlm9zkk5t88pJNbvLJTT55VSkb\nzQ0AAACgo5m5AQAAAKRn5gYAAABQWpobLVSl/U2dSD65yScv2eQmn9zkk5dscpNPbvLJq0rZaG4A\nAAAAHc3MDQAAACA9MzcAAACA0tLcaKEq7W/qRPLJTT55ySY3+eQmn7xkk5t8cpNPXlXKRnMDAAAA\n6GhmbgAAAADpmbkBAAAAlJbmRgtVaX9TJ5JPbvLJSza5ySc3+eQlm9zkk5t88qpSNpobAAAAQEcr\ndObGscceG9dff308//zzscUWW8TUqVPj7LPPHlyQmRsAAADAazTrFxTa3Ljrrrtihx12iA033DB+\n/etfx3777RezZ8+Ogw46aI2KBQAAAKopzUDR3XbbLTbccMOB4+HDh8fYsWOLLKFQVdrf1Inkk5t8\n8pJNbvLJTT55ySY3+eQmn7yqlE3hMzc++tGPxiabbBK77bZbfP7zn4+3ve1tRZcAAAAAlEih21JW\naDQaceONN8bhhx8eV199dey5556vFmRbCgAAAPAazfoFwwuuJSKWF9Td3R1HHHFEzJs3b1BzIyKi\np6cnurq6IiJi9OjRMWnSpOju7o6IV2+rcezYsWPHjh07duzYsWPHjh2X93jmzJnR19c30B9opi13\nbqxw4oknxlZbbRXnnXfeqwWV6M6Ner0+EAr5yCc3+eQlm9zkk5t88pJNbvLJTT55lS2bFANFn3zy\nyfjud78bzz//fPT398d1110X3//+9+OQQw4pqgQAAACghAq7c+Opp56Kww8/PG6//fZoNBqx8847\nx+c///n4wAc+MLigEt25AQAAAKwbzfoFbd2WsiqaGwAAAMBrpdiWUkUrhqGQk3xyk09esslNPrnJ\nJy/Z5Caf3OSTV5Wy0dwAAAAAOpptKQAAAEB6tqUAAAAApaW50UJV2t/UieSTm3zykk1u8slNPnnJ\nJjf55CafvKqUjeYGAAAA0NHM3AAAAADSM3MDAAAAKC3NjRaq0v6mTiSf3OSTl2xyk09u8slLNrnJ\nJzf55FWlbDQ3AAAAgI5m5gYAAACQnpkbAAAAQGlpbrRQlfY3dSL55CafvGSTm3xyk09esslNPrnJ\nJ68qZaO5AQAAAHQ0MzcAAACA9MzcAAAAAEpLc6OFqrS/qRPJJzf55CWb3OSTm3zykk1u8slNPnlV\nKRvNDQAAAKCjmbkBAAAApGfmBgAAAFBamhstVKX9TZ1IPrnJJy/Z5Caf3OSTl2xyk09u8smrStlo\nbgAAAAAdzcwNAAAgtXo9oru73VUA7WbmBgAA0LEqdGc9MESaGy1Upf1NnUg+ucknL9nkJp/c5JOX\nbHJbuLDe7hJowvWTV5WyGd7uAgAAAF6rXn/1jo05cyK6upb/f3e3LSrAyszcAAAAUuvtXf4Aqs3M\nDQAAAKC0NDdaqEr7mzqRfHKTT16yyU0+ucknL9nkNnp0vd0l0ITrJ68qZaO5AQAApDZpUrsrALIz\ncwMAAABIz8wNAAAAoLQ0N1qoSvubOpF8cpNPXrLJTT65yScv2eQmn9zkk1eVstHcAAAAADqamRsA\nAABAemZuAAAAAKWludFCVdrf1Inkk5t88pJNbvLJTT55ySY3+eQmn7yqlI3mBgAAANDRzNwAAAAA\n0jNzAwAAACgtzY0WqtL+pk4kn9zkk5dscpNPbvLJSza5ySc3+eRVpWw0NwAAAICOZuYGAAAAkJ6Z\nGwAAAEBpFdbcePnll2Pq1KnR1dUVo0aNij322COuvfbaok7fFlXa39SJ5JObfPKSTW7yyU0+eckm\nN/nkJp+8qpRNYc2NpUuXxoQJE+Kmm26KZ555Js4777w48sgj44EHHiiqBAAAAKCE2jpzY/fdd4/e\n3t449NBDXy3IzA0AAADgNVLO3Hj88cfjN7/5Tey2227tKgEAAAAogbY0N1555ZU45phjoqenJ3be\need2lFCIKu1v6kTyyU0+eckmN/nkJp+8ZJObfHKTT15VymZ40SdctmxZHHfccbHhhhvGpZdeusrn\n9PT0RFdXV0REjB49OiZNmhTd3d0R8Wo4jh07duy4PccrZKnH8eDjFbLU43jw8QpZ6nH86nFfX1+q\nehzLp5OO5ZP3uK+vL1U9a3s8c+bM6OvrG+gPNFPozI1GoxEnnHBCPPjgg3H11VfHBhtssHJBZm4A\nAAAAr9GsX1DonRunnHJK3HvvvfG///f/XmVjAwAAAGBtDSvqRA888EB861vfittvvz222mqrGDly\nZIwcOTLmzZtXVAmFW3FLDTnJJzf55CWb3OSTm3zykk1u8slNPnlVKZvC7tzYfvvtY9myZUWdDgAA\nAKiIQmdurAkzNwAAAIDXatYvKGxbCgAAAEAraG60UJX2N3Ui+eQmn7xkk5t8cpNPXrLJTT65ySev\nKmWjuQEAAAB0NDM3AAAAgPTM3AAAAABKS3Ojhaq0v6kTySc3+eQlm9zkk5t88pJNbvLJTT55VSkb\nzQ0AAACgo5m5AQAAAKRn5gYAAABQWpobLVSl/U2dSD65yScv2eQmn9zkk5dscpNPbvLJq0rZaG4A\nAAAAHc3MDQAAACA9MzcAAACA0tLcaKEq7W/qRPLJTT55ySY3+eQmn7xkk5t8cpNPXlXKRnMDAAAA\n6GhmbgAAAADpmbkBAAAAlJbmRgtVaX9TJ5JPbvLJSza5ySc3+eQlm9zkk5t88qpSNpobAAAAQEcz\ncwMAAABIz8wNAAAAoLQ0N1qoSvubOpF8cpNPXrLJTT65yScv2eQmn9zkk1eVstHcAAAAADqamRsA\nAABAemZuAAAAAKWludFCVdrf1Inkk5t88pJNbvLJTT55ySY3+eQmn7yqlI3mBgAAANDRzNwAAAAA\n0jNzAwAAACgtzY0WqtL+pk4kn9zkk5dscpNPbvLJSza5ySc3+eRVpWw0NwAAAICOZuYGAAAAkJ6Z\nGwAAAEBpaW60UJX2N3Ui+eQmn7xkk5t8cpNPXrLJTT65ySevKmWjuQEAAAB0NDM3AAAAgPTM3AAA\nAABKS3Ojhaq0v6kTySc3+eQlm9zkk5t88pJNbvLJTT55VSkbzQ0AAACgo5m5AQAAAKRn5gYAAABQ\nWpobLVSl/U2dSD65yScv2eQmn9zkk5dscpNPbvLJq0rZaG4AAAAAHa2wmRuXXnppzJ49O+688844\n+uijY9asWasuyMwNAAAA4DWa9QuGF1XEtttuG9OmTYvrrrsulixZUtRpAQAAgJIrbFvKoYceGocc\nckhsvvnmRZ2y7aq0v6kTySc3+eQlm9zkk5t88pJNbvLJTT55VSmbwmdu2HICAAAArEuFzdxYYdq0\nafHQQw+ZuQEAAACssRQzN1ZYk8ZFT09PdHV1RUTE6NGjY9KkSdHd3R0Rr95W49ixY8eOHTt27Nix\nY8eOHTsu7/HMmTOjr69voD/QjDs3Wqherw+EQj7yyU0+eckmN/nkJp+8ZJObfHKTT15ly6ZZv2BY\nUUX09/fHiy++GEuXLo3+/v546aWXor+/v6jTAwAAACVV2J0bvb298Xd/93crve2cc84ZXFCJ7twA\nAAAA1o1m/YLCt6W8Hs0NAAAA4LVSbEupohXDUMhJPrnJJy/Z5Caf3OSTl2xyk09u8smrStlobgAA\nAAAdzbYUAAAAID3bUgAAAIDS0txooSrtb+pE8slNPnnJJjf55CafvGSTm3xyk09eVcpGcwMAAADo\naGZuAAAAAOmZuQEAAACUluZGC1Vpf1Mnkk9u8slLNrnJJzf55CWb3OSTm3zyqlI2mhsAAABARzNz\nAwAAAEjPzA0AAACgtDQ3WqhK+5s6kXxyk09esslNPrnJJy/Z5Caf3OSTV5Wy0dwAAAAAOpqZGwAA\nBanXI7q7210FAHQmMzcAABKo0N3BAFAozY0WqtL+pk4kn9zkk5dscpNPbgsX1ttdAqvh2slNPrnJ\nJ68qZTO83QUAAJRZvf7qHRtz5kR0dS3//+5uW1QAYF0xcwMAoCC9vcsfAMDaM3MDAAAAKC3NjRaq\n0v6mTiSf3OSTl2xyk09uo0fX210Cq+HayU0+ucknryplo7kBAFCQSZPaXQEAlJOZGwAAAEB6Zm4A\nAAAApaW50UJV2t/UieSTm3zykk1u8slNPnnJJjf55CafvKqUjeYGAAAA0NHM3AAAAADSM3MDAAAA\nKC3NjRaq0v6mTiSf3OSTl2xyk09u8slLNrnJJzf55FWlbDQ3AAAAgI5m5gYAAACQnpkbAAAAQGlp\nbrRQlfY3dSL55CafvGSTm3xyk09esslNPrnJJ68qZaO5AQAAAHQ0MzcAAACA9MzcAAAAAEpLc6OF\nqvyhYBkAABUmSURBVLS/qRPJJzf55CWb3OSTm3zykk1u8slNPnlVKRvNDQAAAKCjmbkBAAAApGfm\nBgAAAFBamhstVKX9TZ1IPrnJJy/Z5Caf3OSTl2xyk09u8smrStlobgAAAAAdzcwNAAAAID0zNwAA\nAIDSKrS5sWjRojj00ENj0003ja6urpg3b16Rpy9clfY3dSL55CafvGSTm3xyk09esslNPrnJJ68q\nZVNoc+NjH/tYbLjhhvHEE0/ElVdeGaecckrcfffdRZZQqL6+vnaXQBPyyU0+eckmN/nkJp+8ZJOb\nfHKTT15Vyqaw5sbzzz8f8+fPj3PPPTc23njj+O///b/HIYccEnPnzi2qhML94Q9/aHcJNCGf3OST\nl2xyk09u8slLNrnJJzf55FWlbAprbvzmN7+J4cOHx4477jjwtt133z3uuuuuokoAAAAASqiw5sZz\nzz0Xo0aNGvS2kSNHxrPPPltUCYVbuHBhu0ugCfnkJp+8ZJObfHKTT16yyU0+ucknryplU9ivgr3t\nttti7733jueff37gbV/+8pfjpptuih//+McDb5s0aVLcfvvtRZQEAAAAdIjdd999tXNEhhdVxM47\n7xxLly6N3/3udwNbU26//fb48z//80HPq9LAEwAAAOCNK+zOjYiIo48+Omq1Wnz729+OW2+9Nd73\nvvfFzTffHLvssktRJQAAAAAlU+ivgv3a174WS5YsibFjx8b/a+/eg6I6zz+Afw/3y3BZAZFlWRAQ\nAzHGWqOACKjVdgymbS4KymqMSaqtWmk6jQYRLzharZnEmSQ0GaURBK1mtCowsYaC1FZJq8kYRzDe\nFoStQqEarsvl6R/55fzcAMYqsgLfzwwze855z9nn7LOHF57znnOSk5ORmZnJwgYRERERERERPZB+\nLW5oNBocPHgQjY2NuHbtGhITE/vz7ftUUFAQPvnkE2uHQX2IObWOMWPG4MSJE9YOg8BcEBEBgI2N\nDa5cuQIAaGlpwezZs+Hp6Ym5c+daOTKigYfHkPUsXboUGRkZ1g6jX/XbPTcGG0VRoCiKtcOgPsSc\nWscXX3xh7RDo/zAXRESWDhw4gJs3b6K+vh42Nv16TpBoUOAxZD3vvfeetUPod/yGPWQdHR3WDoFo\n0OFxRURE/cFoNCIsLIz/lBHdJx5D1J/4LXsAZWVlePzxxzFs2DC89NJLaGtrQ3FxMXQ6HbZu3Qo/\nPz8sXrwYZrMZK1euhL+/P/z9/ZGSkgKz2Wzt8Ae1qqoqPPvssxg+fDi8vb2xfPlyXLlyBdOmTYO3\ntzd8fHyQnJyMW7duWazXU07p4frmcqCysjJERUVBo9FAq9Vi+fLlaG9vV9vZ2Njg3XffxahRozB6\n9GgrRjx43ZmLCRMmwMPDAyNGjMBrr72mtjl8+DAef/xxaDQaTJ06FeXl5Rbrb9++HU8++SQ8PT2R\nmJjIY6gPXbhwAfHx8dBoNBgzZgyOHDmCq1evwtPTU23zyiuvwNfXV502GAx4++23AQDx8fFYu3Yt\nYmJi4O7ujh/+8If497//3e/7MVgEBQVhy5YtPfYZf/rTnzBu3Dh4eHggNDQUH3/8MQAgKysLERER\ncHd3R0hICN5//311e9/8/bB582b4+Phg5MiRyM3Ntcq+DUZ3y9e2bdug1Wqh0+mwa9cuAICIID09\nHRs3bsS+ffvg5uaGrKwsa+7CkHG3XB09ehTjxo2DRqPB5MmTce7cOStHOzT89re/hU6ng7u7Ox57\n7DEUFBTAxcUF9fX1AIBNmzbB3t4ejY2NAIC0tDSkpKRg3bp1PIb6wTef7zc/Tk5OmDp1KhYtWoS0\ntDQAQ6iPEbovgYGB8sQTT8j169elvr5eJk+eLGvWrJHi4mKxs7OTVatWidlslpaWFklLS5OoqCip\nra2V2tpaiY6OlrS0NGvvwqDV0dEhY8eOlV/96lfS3Nwsra2t8te//lUuXbokx48fF7PZLLW1tRIb\nGysrV65U1+stp/RwBQUFySeffCL//Oc/5fTp09LZ2SnXrl2T8PBweeutt9R2iqLIzJkzpaGhQVpb\nW60Y8eAVFBQkx48fl8jISMnJyRERkaamJjl16pSIiFRUVIirq6scP35cOjo6ZOvWrRIaGirt7e3q\n+pMmTRKTyST19fUSHh4umZmZVtufwcRsNktISIhs3rxZ2tvbpaioSNzc3KSiokL0er2cOXNGRETC\nwsIkJCRELly4ICIier1ePvvsMxERiYuLk9DQUPnyyy+lpaVF4uPjZdWqVVbbp4Gutz7j9OnT4uHh\nIcePHxcRkerqaikvLxcRkfz8fLly5YqIiJSUlIiLi4uau7/85S9iZ2cnr732mpjNZikpKRFXV1ep\nqKiwzg4OMr3lq7CwUHx9feX8+fPS1NQkSUlJoiiKXL58WURE1q1bJwaDwcrRDy295erMmTMyfPhw\nKSsrk66uLvnwww8lKChI2trarB3yoFZeXi4BAQFiMplERMRoNMrly5clNjZWPvroIxERmTFjhoSG\nhkphYaGIiEyZMkUOHTokIjyG+tvt27clPDxc3n//fXnxxRfV/zmHSh/DkRv3SVEULFu2DP7+/tBo\nNEhNTUVeXh6Ar88wr1+/Hvb29nByckJubi7Wrl0Lb29veHt7Iz09HdnZ2Vbeg8GrrKwMJpMJ27Zt\ng7OzMxwdHTF58mSEhIRg+vTpsLe3h7e3N1JSUlBSUqKud7ec0sM3fvx4TJw4ETY2NggMDMSrr75q\nkR8AWL16NTw9PeHo6GilKIcGBwcHfPnll6irq4OLiwsmTZoE4OszAwkJCZg+fTpsbW3x61//Gi0t\nLfjb3/6mrrtixQqMGDECGo0Gs2fPxmeffWat3RhUTp06haamJqxatQp2dnaYOnUqEhISkJeXh7i4\nOBQXF+Nf//oXFEXB888/j5KSEly9ehW3b9/Gk08+CeDr33GLFi1CaGgonJycMGfOHObnAfTWZ+za\ntQuLFy/G9OnTAQBarVYdbTZr1iyMHDkSABAbG4uZM2eitLTUYrsbN26Evb09YmNj8fTTT+OPf/xj\n/+7YINVbvvbv34+XXnoJERERcHFxwfr16y3WExGIiJWiHpp6y9UHH3yAn/3sZ3jqqaegKAoWLFgA\nR0dHnDp1ytohD2q2trZoa2vD+fPn0d7eDr1ej+DgYMTFxaGkpASdnZ04d+4cVqxYgZKSErS2tuIf\n//gHYmNjAfAY6k9dXV1ISkrC1KlT8corrwBAt89+sPcxLG48gICAAPW1Xq9HTU0NAMDHxwcODg7q\nspqaGgQGBvbYlvpeVVUVAgMDu13bd+PGDSQmJkKn08HDwwMGg6HbkOzeckoP38WLF5GQkAA/Pz94\neHggNTX1rvmhh0NRFOzcuRMXL15EeHg4Jk6ciPz8fACAyWSCXq+3aBsQEIDq6mp13ogRI9TXzs7O\n6hBVejA1NTXdvv+BgYGorq5WixulpaWIjY1V/+A8ceIEpkyZYrEO89O3euozqqqqEBwc3GP7wsJC\nREZGwsvLCxqNBgUFBRa/5zQaDZydndXpwMBA9kN9qKd81dTUQKfTWcwn6+spV0ajEdu3b4dGo1F/\nrl+/DpPJZMVIB7/Q0FC89dZbWLduHXx9fZGUlASTyaT2PWfOnMETTzyBH/zgBygpKcHp06cRGhoK\njUZj7dCHnNTUVDQ1NWHHjh09Lh8KfQyLGw+gsrLS4rVWqwWAbk/c0Gq1uHbtWo9tqe8FBASgsrIS\nnZ2dFvPfeOMN2Nra4osvvsCtW7eQnZ2Nrq4uiza95ZQeLhHB0qVLERERgUuXLuHWrVvYtGlTt/zw\naTb9IzQ0FLm5uaitrcXrr7+O559/Hs3NzdBqtTAajWo7EUFVVRX8/f173A7z1Xe0Wi2qqqoszsAY\njUbodDrExcWhtLQUxcXFiI+PR0xMDE6ePImSkhLEx8dbL+ghoKc+IyAgAJcvX+7Wtq2tDc899xx+\n85vf4ObNm2hoaMCsWbMsctrQ0IDm5mZ12mg09np80f+up3z5+fmhqqqqxzZkPT3lSq/XIzU1FQ0N\nDepPY2MjHy/aD5KSklBaWgqj0QhFUfD6668jOjoaFRUVOHjwIOLj4xEeHo7KykoUFBRY9D38W6B/\n7N27F/v27cOBAwdga2urzr/z8x8KfQyLG/dJRPDOO++guroa9fX12LRpExITE3tsm5SUhIyMDNTV\n1aGurg4bNmyAwWDo54iHjkmTJsHPzw+rVq1Cc3MzWltbcfLkSTQ2NsLV1RXu7u6orq7Gtm3bLNb7\nX3JKfa+xsRFubm5wcXFBeXn5kHx81aNARJCTk4Pa2loAgIeHBxRFga2tLV544QXk5+ejqKgI7e3t\n2L59O5ycnBAdHd3rtqhvREZGwsXFBVu3bkV7ezuKi4tx9OhRJCYmqpeZ5OTkIC4uDm5ubhg+fDg+\n+ugjxMXFWWyHOek7IoJ33323W5+xePFiZGVloaioCF1dXaiurkZFRQXMZjPMZjO8vb1hY2ODwsJC\nHDt2rNt209PT0d7ejtLSUuTn5+OFF16wwt4NPr3la86cOfjDH/6ACxcuoLm5udtlKdT/esvVyy+/\njMzMTJSVlUFE0NTUhPz8fI5Ae8guXryIoqIitLW1wdHREU5OTrC1tYWzszPGjx+Pd955R+1roqOj\nkZmZadH3sN95+M6ePYvly5fj4MGD8PLyUuf3dEnQYO9jWNy4T4qiYP78+Zg5cyZCQkIwatQorFmz\nBiLSrUK5Zs0aTJgwAWPHjsXYsWMxYcIErFmzxkqRD342NjY4cuQILl26BL1ej4CAAOzfvx/p6ek4\nc+YMPDw8MHv2bDz33HMWueotp/TwKYqC3/3ud8jNzYW7uzteffVVJCYmdssP9Y+PP/4YY8aMgZub\nG1JSUrB37144Ojpi9OjRyMnJwfLly+Hj44P8/HwcOXIEdnZ2PW5HURTmrY/Y29vjyJEjKCwshI+P\nD5YtW4bs7GyEhYUB+PpJKN7e3uoZmG/Omo0fP95iO98+ppif+6coCubNm9etz3jqqaeQlZWFlJQU\neHp6Ij4+HpWVlXBzc8OOHTswZ84cDBs2DHl5efjxj39ssc1v7lej1WphMBjw+9//Xs0xPZje8vWj\nH/0IK1euxLRp0xAWFobp06fzOLGy3nL1/e9/Hx988AGWLVuGYcOGYdSoUdi9e7e1wx302trasHr1\navj4+MDPzw91dXXYvHkzgK/7mo6ODkycOBEAEBcXh8bGRvV+GwCPof5w+PBh/Oc//0FMTIz6xJRZ\ns2Z1++yHQh+jCMtpRGRFgYGB2LNnD2JiYqwdypDHXBDdu5EjR2Lnzp2YNm1an2yvuLgYBoPB4hIJ\n6jt9nS96eJgror43VPoYjtwgIqu5efMmamtrERQUZO1QhjzmgoiIiIgGMhY3iMgqPv30U4wePRor\nVqywuFM99T/mgujRwKHbRET0sAyFPoaXpRARERERERHRgMaRG0REREREREQ0oLG4QUREREREREQD\nGosbRERERERERDSgsbhBRERERERERAMaixtERETUJ5YuXYqMjAxrh0FERERDEJ+WQkRERHcVFBQE\nk8mEmpoaeHl5qfO/973v4fPPP8e1a9eg1+v7JZY9e/ZgyZIlAIDOzk60trbC1dUVwNePubt9+3a/\nxEFERESPFo7cICIiortSFAXBwcHIy8tT5507dw4tLS1QFKVfY5k/fz6++uorfPXVVygsLIS/v786\nzcIGERHR0MXiBhEREX2n5ORk7N69W53+8MMPsWDBAtw5APTFF19EWloaAKC4uBg6nQ7btm3D8OHD\nodVqcejQIRQUFCAsLAxeXl7YsmWLuq6IYMuWLQgNDYW3tzfmzp2LhoaGu8Z053vv378fEyZMsFj+\n5ptv4ic/+Yka25IlSzBz5ky4u7sjPj4elZWVatvy8nLMmDEDXl5eeOyxx7B///77+JSIiIjIWljc\nICIiou8UGRmJ27dvo7y8HJ2dndi3bx+Sk5Mt2iiKYjGS48aNG2hra4PJZMKGDRvw8ssvY8+ePTh7\n9ixKS0uxYcMGGI1GAMCOHTtw+PBhnDhxAiaTCRqNBr/4xS/uOb5nnnkGV69eRXl5uTovOzsbCxcu\nVKdzc3Oxdu1a1NXVYdy4cZg/fz4AoKmpCTNmzEBycjJqa2uxd+9e/PznP8eFCxfu67MiIiKi/sfi\nBhEREd0Tg8GA3bt3489//jMiIiLg7+/frc2doyns7e2RmpoKW1tbzJ07F/X19Vi5ciVcXV0RERGB\niIgIfP755wCAzMxMZGRkQKvVwt7eHunp6Thw4AC6urruKTZHR0fMmTMHOTk5AIDz58/DaDQiISFB\nbZOQkICYmBg4ODhg06ZN+Pvf/47r16/j6NGjGDlyJBYuXAgbGxuMGzcOzz77LEdvEBERDSB21g6A\niIiIHn2KosBgMGDKlCm4evVqt0tSeuLl5aWO5HB2dgYA+Pr6qsudnZ3R2NgIADAajfjpT38KG5v/\nP+9iZ2eHGzduwM/P755iXLhwIebNm4eMjAxkZ2dj7ty5sLe3V+PX6XRqW1dXVwwbNgw1NTUwGo04\nffo0NBqNuryjowMLFiy4p/clIiIi62Nxg4iIiO6JXq9HcHAwCgsLsWvXrh7b3O8NRvV6PbKyshAV\nFXXf8UVGRsLBwQEnTpxAXl6exQ1QRQRVVVXqdGNjI+rr6+Hv7w+9Xo+4uDgcO3bsvt+biIiIrIuX\npRAREdE927lzJ4qKitSRGHcSke8czdGbJUuW4I033lBv8llbW4vDhw//z9sxGAxYtmwZHBwcEB0d\nbbGsoKAAJ0+ehNlsRlpaGqKiouDv74+nn34aFy9eRE5ODtrb29He3o5PP/3U4v4dRERE9GhjcYOI\niIjuWXBwMMaPH69O3zlS49s3FP32KI67jer45S9/iWeeeUZ9mklUVBTKysq+M55vb9NgMOD8+fM9\n3ux03rx5WL9+Pby8vHD27Fn1/hxubm44duwY9u7dC39/f/j5+WH16tUwm83f+f5ERET0aFDkfk+x\nEBERET1iWlpa4Ovri7NnzyIkJESdv2jRIuh0OmzcuNGK0REREdHDwpEbRERENGi89957mDhxokVh\nA8B9Xy5DREREAwNvKEpERESDQlBQEBRFwaFDh7ot+/YlM0RERDS48LIUIiIiIiIiIhrQeFkKERER\nEREREQ1oLG4QERERERER0YDG4gYRERERERERDWgsbhARERERERHRgMbiBhERERERERENaCxuEBER\nEREREdGA9l8kG47+AjET6QAAAABJRU5ErkJggg==\n", "text": [ "" ] } ], "prompt_number": 67 }, { "cell_type": "code", "collapsed": false, "input": [ "# Plot customer submissions based on file type\n", "group_df = df[['customer','type_tag']]\n", "group_df['submissions'] = 1\n", "group_df = group_df.groupby(['customer','type_tag']).sum().unstack()\n", "group_df.head()" ], "language": "python", "metadata": {}, "outputs": [ { "html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
submissions
type_tagbrocabjarjsonownpcappdfpeswfzip
customer
BearTron 12 1NaN 1 1 3 13 28NaNNaN
Dorseys Mom 20NaN 1NaNNaN 1 9 27NaN 2
Huge Inc 8NaNNaNNaN 3 3 18 23 1NaN
Mega Corp 12NaN 1NaN 4 1 12 27NaNNaN
\n", "

4 rows \u00d7 10 columns

\n", "
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 68, "text": [ " submissions \n", "type_tag bro cab jar json own pcap pdf pe swf zip\n", "customer \n", "BearTron 12 1 NaN 1 1 3 13 28 NaN NaN\n", "Dorseys Mom 20 NaN 1 NaN NaN 1 9 27 NaN 2\n", "Huge Inc 8 NaN NaN NaN 3 3 18 23 1 NaN\n", "Mega Corp 12 NaN 1 NaN 4 1 12 27 NaN NaN\n", "\n", "[4 rows x 10 columns]" ] } ], "prompt_number": 68 }, { "cell_type": "code", "collapsed": false, "input": [ "# Plot entropy box plots based on mime-type\n", "my_colors = [(x/9.0, .8, 1.0-x/9.0) for x in range(10)] # Why the heck dosen't matplotlib have better categorical cmaps?\n", "group_df['submissions'].plot(kind='bar', stacked=True, color=my_colors)\n", "plt.xlabel('Customer')\n", "plt.ylabel('Submissions')" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 80, "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\naOzYsYqOjlbHjh01ceJEz3NHjBihXr16qWXLlurYsaOef/55ffHFF8rMzKywj1GjRmnQoEFq06aN\nHn30UXXCyKA7AAAgAElEQVTp0kVz587196ECAAAAAGoYvzYeVq5cKZfLpZSUFLndbknSmjVr1KFD\nB/Xt21e1a9fW9OnTtXPnTuXl5fmzNFv9uhEjSQkJCSotLdWnn36q0tJS9ezZ84zPzcrK0k033aRW\nrVopPDxcLVq0kCR9/fXXFbbr1q1bheXu3bsrJyenCo/i3HHPYsAsZBYwB3kFzEFe4WR+azwUFxdr\n2rRpmjdvnqfpIEk5OTnq2LGjZzkkJETR0dHKzs72V2m2+/Wfx9k4evSoevbsqcDAQL3wwgvatm2b\ntm3bJsuyVFZW5pN9AgAAAABwNvzWeJgyZYpGjRqlZs2aeW47KUlHjhxReHh4hW3Dw8N1+PBhf5Vm\nu23btqm8vNyznJ6eruDgYHXs2FHBwcFau3btaZ+Xm5urAwcOaNasWUpMTFRMTIwOHTp02qZCRkZG\nheX09HTFxcVV7YGcI+bZALOQWcAc5BUwB3mFk/nldppZWVlav369duzYIemXv20/+eW4Xr16Ki4u\nrrB9UVGRwsLCTvtaI0aMUFRUlCQpIiJCnTp1UlJSks9q94eDBw9q3Lhxuvvuu7Vnzx5NnTpVo0eP\nVnh4uO677z5Nnz5ddevW1VVXXaWffvpJ7733niZOnKgWLVqoTp06evrppzVhwgTt3btXEydOrDC2\ncdKSJUsUGxurSy+9VMuXL9fWrVu1YMGC36zt17f1OXn6F8vnt3xSamqqJHnevyybvVxd3l8sk1eW\nf3tZ4vPNicsn2f3+YrlqlyXy6sTlk+x+f7F8fstPPvmksrKyPN/PK2O5/XDO/VNPPaXJkyd7mgmH\nDx/WiRMn1K5dO91xxx1aunSp0tLSJP1yBkRkZKSysrLUtm3bisVa1hlHBM60zrIszc28t4qPqHIT\n4ud5PcrQo0cPtW7dWg0aNNCSJUtUVlamgQMHav78+apTp44k6emnn9azzz6rr776Si6XS1deeaXn\ndpivvfaaJk2apG+++Ubt27fXvHnzlJKSoueee07Dhw/X3r171apVKy1btkz//Oc/tXXrVjVr1kyz\nZs3SwIEDK63NsiylZ3ardJuqUJPuWZwQn8GYiwP5KyvVBZmF6WpSZskrTEdenYm8OlNl39f9csbD\n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\nTp06KSkpSZKUmpoqSY5ZPjnndbL76dTlk49Vl3r8cbyS/e8vlqtu2QoK4u4HDmUF/fIxWZ3ebyyf\n/zX64M8AACAASURBVLL0y3+T7f488Mfyf3/W2l2PL5dPsvv9xXLVLkvk1YnLJ9n9/mL5/JaffPJJ\nZWVleb6fV8Zyu93u39yqirjdbv35z39Wfn6+3n33XdWpU0eS9I9//ENLly5VWlqaJOnIkSOKjIxU\nVlZWhWs8WJYlP5ZrK8uy9GpmP7vL8Itff5g4Xf/4VTXmPVyTWJYlZdagf6+ZqVJ8kt1V+Ed8zfnc\nqUn4jHUmPmOdibw6E3l1psq+rwf4s5AxY8Zo165devPNNz1NB0m66aablJ2drTVr1ujYsWOaMWPG\n/2vv7qOqqvM9jn8OMPIkCIgPoCAVeSsdoYnpSk5PTN7RpBS9Nj6hpnduU3pvaq01pjEp5ZhrutiM\nEzWVT/iY3alVWamlorfSjJVZagaYyIOWgCQiagLn/tF4RhRMR875nb3P+7WWa7n3BtdH49vefNm/\n70/JyckMlvQRvvI/WMA2fKXpANgA91jAOqhX2JnHGg8HDx7Uiy++qF27dqlr164KCwtTWFiYVq1a\npejoaP3tb3/TzJkzFRUVpYKCAq1evdpT0QAAAAAAgJt4bMZDjx491NTU1Or1X/7yl/ryyy89FQde\nxJdeKwNswZeWWgAWxz0WsA7qFXbm0aUWAAAAAADAt9B4gHF0dgGL4W0HwDK4xwLWQb3Czmg8AAAA\nAAAAt6HxAOPO388XgJcryDedAMAl4h4LWAf1Cjuj8QAAAAAAANyGxgOMYz0bYDHMeAAsg3ssYB3U\nK+yMxgMAAAAAAHAbGg8wjvVsgMUw4wGwDO6xgHVQr7AzGg8AAAAAAMBtaDzAONazARbDjAfAMrjH\nAtZBvcLOAkwHQMv8A/x0X8qrpmOgjfkH0OsDAAC4VDwT2xPPxL6HxoOXamxoUk7BVNMxPKK4oEyJ\nKXGmY3jEtJT5piMAV64gn7ceAIvYU3CEn6LC0ngmtieeiX0PrSYAAAAAAOA2NB5gnK90dgHb4G0H\nwDJ42wGwDp6JYWc0HgAAAAAAgNvQeIBxxQVlpiMAuBwF+aYTALhEewqOmI4A4BLxTAw7o/EAAAAA\nAADchl0tYBzr2QCLYcYDYBnMeIDV+Qf4sQOCDbGdpu+h8QAAAADAKzU2NGlqQY7pGGhj81OmmY4A\n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\nX3+96SgAWuHn56dOnTqpXbt2LV53OBwqLS31cCoAF/Poo4+quLhYOTk5uummm7R3715NmTJFiYmJ\nmjNnjul4AM7x/fffKy8vT++//76OHj2qjh076q677lJmZmar917Aymg8wOMef/xxLV++XOPHj1dc\nXJwcDgfbaQJeJj8//0c/5o477nB7DgCX7vTp05o+fbpeeukl1dfXKzg4WL/5zW80b948BQYGmo4H\nAPBhNB7gcWe/WTm7/vRcbKcJAMCVcTqdqqysVHR0NMsaAQBegcYDAACADbS240xgYKBiYmJoQgAA\njKHxAKOcTqfO/RLkoQgAgH/Oxe6hfn5+uvfee/X888+rS5cuHkwFAADbacKAiooKZWRkKCoqSgEB\nAa5fP/nJT0xHAwDAsl588UWNGjVKRUVFOnnypAoLC5WZmanc3Fx98cUXamho0EMPPWQ6JgDAB/HG\nAzzunnvuUXBwsGbMmKHbb79dW7Zs0ezZszVw4ED953/+p+l4AC7i5MmT8vPzY1Ad4IW6d++uoqIi\nBQcHu87V19erZ8+eKi8vV01NjRITE1VdXW0wJYBzvfHGG9qyZYuqq6vV1NTkmoGWl5dnOBnQtnjj\nAR734YcfatGiRUpOTpYkJScna+HChcrJyTGcDMD5HnnkEX388ceSpLfffltRUVGKjIzUm2++aTgZ\ngPM1NTWppKSk2bnS0lI1NjZKkkJCQly/B2De7Nmz9cADD6ipqUlr1qxRdHS01q9fr4iICNPRgDZH\n4wEed3ZphSRFRkbqyJEjCg0NVUVFheFkAM63YsUK/fSnP5X0wwPS8uXL9eabb2rmzJmGkwE435Qp\nU5SWlqaZM2fqhRde0MyZM5WWlqaHH35YkvTOO+8oNTXVcEoAZy1cuFDvvfeenn32WQUGBmr+/Pl6\n6623dODAAdPRgDbHUgt4XHp6uiZOnKiMjAw98MADKiwsVHBwsE6ePMl2moCX6dChg44dO6aqqipd\nf/31qqyslCSFhYXp+PHjhtMBON+6deu0Zs0aHT58WDExMbrvvvs0YMAA07EAtODsPVaSOnfurPLy\ncrVr107h4eGqra01nA5oWwGmA8D3LF++XE1NTZKk+fPn63/+539UV1enKVOmGE4G4HzXXnutVqxY\noaKiIvXv31+SVFlZqZCQEMPJALRkwIABNBoAi7j66qu1Z88e9erVS7169dLzzz+vyMhIRUVFmY4G\n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\n", "text": [ "" ] } ], "prompt_number": 80 } ], "metadata": {} } ] }