From d8286384266937d4d8b3a33670fb262574118a9b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergio=20Rold=C3=A1n?= Date: Tue, 15 Jan 2019 20:21:09 +0000 Subject: [PATCH] spark: change oskar-spak/src/main/python structure and biodata dependency version #13 this way we will be able to work from this folder's notebook using the shell scripts. Also we've modified POM's Biodata version to 1.5.0-SNAPSHOT. --- .../python/notebooks/conf/spark-defaults.conf | 30 + .../src/main/python/notebooks/facets.ipynb | 651 ------------ .../plotly trials-checkpoint.ipynb | 997 ++++++++++++++++++ .../notebooks/{ => notebooks}/GWAS.ipynb | 0 .../python/notebooks/notebooks/facets.ipynb | 651 ++++++++++++ .../notebooks/notebooks/my_notebook.ipynb | 480 +++++++++ .../notebooks/notebooks/plotly trials.ipynb | 997 ++++++++++++++++++ .../{ => notebooks/pyoskar}/__init__.py | 0 .../notebooks/notebooks/pyoskar/analysis.py | 469 ++++++++ .../notebooks/notebooks/pyoskar/core.py | 369 +++++++ .../python/notebooks/notebooks/pyoskar/sql.py | 175 +++ .../notebooks/{ => notebooks}/stats.ipynb | 0 .../{ => notebooks}/variant_filtering.ipynb | 2 +- .../variant_filtering_advanced.ipynb | 156 +++ .../variant_filtering_advanced.ipynb | 123 --- pom.xml | 2 +- 16 files changed, 4326 insertions(+), 776 deletions(-) create mode 100644 oskar-spark/src/main/python/notebooks/conf/spark-defaults.conf delete mode 100644 oskar-spark/src/main/python/notebooks/facets.ipynb create mode 100644 oskar-spark/src/main/python/notebooks/notebooks/.ipynb_checkpoints/plotly trials-checkpoint.ipynb rename oskar-spark/src/main/python/notebooks/{ => notebooks}/GWAS.ipynb (100%) create mode 100644 oskar-spark/src/main/python/notebooks/notebooks/facets.ipynb create mode 100644 oskar-spark/src/main/python/notebooks/notebooks/my_notebook.ipynb create mode 100644 oskar-spark/src/main/python/notebooks/notebooks/plotly trials.ipynb rename oskar-spark/src/main/python/notebooks/{ => notebooks/pyoskar}/__init__.py (100%) create mode 100644 oskar-spark/src/main/python/notebooks/notebooks/pyoskar/analysis.py create mode 100644 oskar-spark/src/main/python/notebooks/notebooks/pyoskar/core.py create mode 100644 oskar-spark/src/main/python/notebooks/notebooks/pyoskar/sql.py rename oskar-spark/src/main/python/notebooks/{ => notebooks}/stats.ipynb (100%) rename oskar-spark/src/main/python/notebooks/{ => notebooks}/variant_filtering.ipynb (99%) create mode 100644 oskar-spark/src/main/python/notebooks/notebooks/variant_filtering_advanced.ipynb delete mode 100644 oskar-spark/src/main/python/notebooks/variant_filtering_advanced.ipynb diff --git a/oskar-spark/src/main/python/notebooks/conf/spark-defaults.conf b/oskar-spark/src/main/python/notebooks/conf/spark-defaults.conf new file mode 100644 index 0000000..46aa2bf --- /dev/null +++ b/oskar-spark/src/main/python/notebooks/conf/spark-defaults.conf @@ -0,0 +1,30 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +# Default system properties included when running spark-submit. +# This is useful for setting default environmental settings. + +# Example: +# spark.master spark://master:7077 +# spark.eventLog.enabled true +# spark.eventLog.dir hdfs://namenode:8021/directory +# spark.serializer org.apache.spark.serializer.KryoSerializer +# spark.driver.memory 5g +# spark.executor.extraJavaOptions -XX:+PrintGCDetails -Dkey=value -Dnumbers="one two three" + + +spark.jars ../libs/oskar-spark-0.1.0.jar,../libs/oskar-spark-0.1.0-jar-with-dependencies.jar \ No newline at end of file diff --git a/oskar-spark/src/main/python/notebooks/facets.ipynb b/oskar-spark/src/main/python/notebooks/facets.ipynb deleted file mode 100644 index cc05560..0000000 --- a/oskar-spark/src/main/python/notebooks/facets.ipynb +++ /dev/null @@ -1,651 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# **Facets tutorial**\n", - "One of the most sofisticated transformations that Pyoskar provides us is [ **facet** ]. As every transformation it pertains to Oskar class and we can acces to it through our Oskar instance.\n", - "
\n", - "Usage:\n", - "```\n", - "facet(df[DataFrame], facet[str])\n", - "```" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We have to to import both Spark and Oskar APIs, as well as loading our data into a spark DataFrame:" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [], - "source": [ - "from pyoskar.core import Oskar\n", - "from pyoskar.sql import *\n", - "from pyoskar.analysis import *\n", - "from pyspark.sql.functions import col, udf, count, explode, concat, when, expr\n", - "from pyspark.sql.functions import *\n", - "\n", - "oskar = Oskar(spark)\n", - "df = oskar.load(\"/home/roldanx/appl/oskar/oskar-spark/src/test/resources/platinum_chr22.small.parquet\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Simple facets\n", - "Now that we have loaded our data, we start with an easy facet. This example executes the classics \"groupBy\" and \"count\" upon our dataframe. The next format was designed to be applied on categorical or discrete quantitative variants. That could be any among these: \n", - " - Chromosome [ **chromosome** ]\n", - " - Variant type [ **type** ]\n", - " - Studies [ **studies** ]\n", - " - Biotype [ **biotype** ]\n", - " - Consequence type [ **ct** ]\n", - " - Gene [ **gene** ]\n", - " - Ensemble gene ID [ **ensemblGeneId** ]\n", - " - Ensemble gene transcript [ **ensemblTranscriptId** ]" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "+-----+-----+\n", - "| type|count|\n", - "+-----+-----+\n", - "|INDEL| 106|\n", - "| SNV| 894|\n", - "+-----+-----+\n", - "\n" - ] - } - ], - "source": [ - "oskar.facet(df, \"type\").show()" - ] - }, - { - "cell_type": "code", - "execution_count": 40, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "+----------------------------------+-----+\n", - "|ct |count|\n", - "+----------------------------------+-----+\n", - "|2KB_downstream_variant |146 |\n", - "|2KB_upstream_variant |146 |\n", - "|3_prime_UTR_variant |9 |\n", - "|5_prime_UTR_variant |1 |\n", - "|NMD_transcript_variant |140 |\n", - "|TF_binding_site_variant |108 |\n", - "|downstream_gene_variant |163 |\n", - "|intergenic_variant |222 |\n", - "|intron_variant |543 |\n", - "|missense_variant |4 |\n", - "|non_coding_transcript_exon_variant|45 |\n", - "|non_coding_transcript_variant |385 |\n", - "|regulatory_region_variant |764 |\n", - "|splice_donor_variant |1 |\n", - "|splice_region_variant |2 |\n", - "|synonymous_variant |6 |\n", - "|upstream_gene_variant |200 |\n", - "+----------------------------------+-----+\n", - "\n" - ] - } - ], - "source": [ - "oskar.facet(df, \"ct\").show(truncate=False)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Include facets\n", - "We can also applies a filtering based on the values we explicit in the function:" - ] - }, - { - "cell_type": "code", - "execution_count": 41, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "+-------+-----+\n", - "| gene|count|\n", - "+-------+-----+\n", - "|BCL2L13| 8|\n", - "| CECR2| 11|\n", - "+-------+-----+\n", - "\n" - ] - } - ], - "source": [ - "oskar.facet(df, \"gene[BCL2L13,CECR2]\").show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Range facets\n", - "Using a similar syntax as with \"Include facets\" but dealing with continuous quantitative we find that we can apply facets by range, where we can determine both upper and downer thresholds as well as the step e.g. [start..end]:step. Available range fields:\n", - " - Conservation scores: grep [ **grep** ], phylop [ **phylop** ] or phastCons [ **phastCons** ]\n", - " - Functional scores: cadd_scaled [ **cadd_scaled** ] or cadd_raw [ **cadd_raw** ]\n", - " - Substitution scores: sift [ **sift** ] or polyphen [ **polyphen** ]" - ] - }, - { - "cell_type": "code", - "execution_count": 44, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "+-----------+-----+\n", - "|phylopRange|count|\n", - "+-----------+-----+\n", - "| -4.0| 3|\n", - "| -3.0| 12|\n", - "| -2.0| 55|\n", - "| -1.0| 171|\n", - "| 0.0| 681|\n", - "+-----------+-----+\n", - "\n" - ] - } - ], - "source": [ - "oskar.facet(df, \"phylop[-5..0]:1\").show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Furthermore, we dispose two more rangeable fields where we could use our facets. These ones have the peculiarity that they need extra inputs to be fully defined; we will need to explicit the study which they pertain and the cohort delimited by two underscores. These fields are:\n", - " - Global alternate population frequency [ **popFreq** ] \n", - " - Dataframe alternate population frequency [ **stats** ], which is included in the dataframe stats field." - ] - }, - { - "cell_type": "code", - "execution_count": 123, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "+---------------------------------+-----+\n", - "|popFreq__GNOMAD_GENOMES__ALLRange|count|\n", - "+---------------------------------+-----+\n", - "| 0.0| 514|\n", - "| 0.1| 112|\n", - "| 0.2| 75|\n", - "| 0.30000000000000004| 97|\n", - "| 0.4| 77|\n", - "| 0.5| 26|\n", - "| 0.6000000000000001| 35|\n", - "| 0.7000000000000001| 23|\n", - "| 0.8| 18|\n", - "| 0.9| 15|\n", - "| 1.0| 8|\n", - "+---------------------------------+-----+\n", - "\n" - ] - } - ], - "source": [ - "oskar.facet(df, \"popFreq__GNOMAD_GENOMES__ALL[0..1]:0.1\").show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "In case we want to get the dataframe alternate population frequency, first we will need to fill the stats field as explained in the \"stats\" tutorial:" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "+----------------------------------------------------+-----+\n", - "|stats__hgvauser@platinum:illumina_platinum__ALLRange|count|\n", - "+----------------------------------------------------+-----+\n", - "| 0.0| 41|\n", - "| 0.1| 15|\n", - "| 0.2| 14|\n", - "| 0.30000000000000004| 10|\n", - "| 0.4| 7|\n", - "| 0.5| 714|\n", - "| 0.6000000000000001| 68|\n", - "| 0.7000000000000001| 49|\n", - "| 0.8| 12|\n", - "| 0.9| 21|\n", - "| 1.0| 48|\n", - "+----------------------------------------------------+-----+\n", - "\n" - ] - } - ], - "source": [ - "samples = oskar.metadata.samples(df)[\"hgvauser@platinum:illumina_platinum\"]\n", - "df2 = oskar.stats(df,studyId=\"hgvauser@platinum:illumina_platinum\",cohort=\"ALL\",samples=samples)\n", - "oskar.facet(df2, \"stats__hgvauser@platinum:illumina_platinum__ALL[0..1]:0.1\").show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Aggregation facets\n", - "We may want to check whether the compounds of all variants have historically been well conservated or otherways have notably evolved. For this task we could use the aggregation facets, with substitutes the default \"count\" function for another one we decide among this ones:\n", - " - Average [ **avg** ]\n", - " - Maximum [ **max** ]\n", - " - Minimum [ **min** ]\n", - " - Sumatory [ **sum** ]\n", - " - Squared sumatory [ **sumsq** ]\n", - " - Standard deviation [ **stddev** ]\n", - " - Variance [ **var** ]\n", - " - Percentile values [ **percentile** ]\n", - " - Set of values [ **unique** ]" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "+-------------------+-----+\n", - "| avg(gerp)|count|\n", - "+-------------------+-----+\n", - "|-0.3518712293113349| 1000|\n", - "+-------------------+-----+\n", - "\n" - ] - } - ], - "source": [ - "oskar.facet(df, \"avg(gerp)\").show(truncate=False)" - ] - }, - { - "cell_type": "code", - "execution_count": 162, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "+---------------------------------------------------------------------------------------+-----+\n", - "|percentile(gerp) |count|\n", - "+---------------------------------------------------------------------------------------+-----+\n", - "|[-2.152000093460083, -0.6257500052452087, 0.0, 0.14900000393390656, 0.7430999755859375]|1000 |\n", - "+---------------------------------------------------------------------------------------+-----+\n", - "\n" - ] - } - ], - "source": [ - "oskar.facet(df, \"percentile(gerp)\").show(truncate=False)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Nested facets\n", - "The last feature we find available for our facet queries is nesting, which allows us to concatenate gruops and reach complex studies by using \">>\" separator." - ] - }, - { - "cell_type": "code", - "execution_count": 52, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "+-----------------------+--------------------+-----+\n", - "|biotype |ct |count|\n", - "+-----------------------+--------------------+-----+\n", - "|nonsense_mediated_decay|splice_donor_variant|1 |\n", - "|processed_transcript |splice_donor_variant|1 |\n", - "|protein_coding |splice_donor_variant|1 |\n", - "|retained_intron |splice_donor_variant|1 |\n", - "+-----------------------+--------------------+-----+\n", - "\n" - ] - } - ], - "source": [ - "oskar.facet(df, \"biotype>>ct[splice_donor_variant]\").show(truncate=False)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Final facets\n", - "Now it is up to us to mix all these ingredients:" - ] - }, - { - "cell_type": "code", - "execution_count": 122, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "+-----+-----------------------+-------------+----------------+--------------------+-----+\n", - "|gene |biotype |cadd_rawRange|cadd_scaledRange|min(phylop) |count|\n", - "+-----+-----------------------+-------------+----------------+--------------------+-----+\n", - "|AIFM3|lincRNA |0.2 |6.0 |-0.2809999883174896 |1 |\n", - "|AIFM3|nonsense_mediated_decay|0.2 |6.0 |-0.2809999883174896 |1 |\n", - "|AIFM3|processed_transcript |0.2 |6.0 |-0.2809999883174896 |1 |\n", - "|AIFM3|protein_coding |0.2 |6.0 |-0.2809999883174896 |1 |\n", - "|AIFM3|retained_intron |0.2 |6.0 |-0.2809999883174896 |1 |\n", - "|GGT1 |nonsense_mediated_decay|-0.2 |0.0 |-1.1380000114440918 |2 |\n", - "|GGT1 |nonsense_mediated_decay|0.0 |1.0 |0.10199999809265137 |2 |\n", - "|GGT1 |nonsense_mediated_decay|0.0 |2.0 |0.054999999701976776|1 |\n", - "|GGT1 |nonsense_mediated_decay|0.0 |4.0 |0.2809999883174896 |1 |\n", - "|GGT1 |nonsense_mediated_decay|0.4 |7.0 |-1.50600004196167 |2 |\n", - "|GGT1 |processed_transcript |-0.2 |0.0 |0.10199999809265137 |1 |\n", - "|GGT1 |processed_transcript |0.0 |1.0 |0.10199999809265137 |1 |\n", - "|GGT1 |processed_transcript |0.0 |2.0 |0.054999999701976776|1 |\n", - "|GGT1 |processed_transcript |0.0 |4.0 |0.2809999883174896 |1 |\n", - "|GGT1 |processed_transcript |0.4 |7.0 |-1.50600004196167 |2 |\n", - "|GGT1 |protein_coding |-0.2 |0.0 |-1.1380000114440918 |2 |\n", - "|GGT1 |protein_coding |0.0 |1.0 |0.10199999809265137 |2 |\n", - "|GGT1 |protein_coding |0.0 |2.0 |0.054999999701976776|1 |\n", - "|GGT1 |protein_coding |0.0 |4.0 |0.2809999883174896 |1 |\n", - "|GGT1 |protein_coding |0.4 |7.0 |-1.50600004196167 |2 |\n", - "|GGT1 |retained_intron |-0.2 |0.0 |0.10199999809265137 |1 |\n", - "|GGT1 |retained_intron |0.0 |1.0 |0.10199999809265137 |2 |\n", - "|GGT1 |retained_intron |0.4 |7.0 |-0.7080000042915344 |1 |\n", - "|GGT1 |sense_intronic |-0.2 |0.0 |-1.1380000114440918 |1 |\n", - "|GGT1 |unprocessed_pseudogene |0.4 |7.0 |-1.50600004196167 |1 |\n", - "+-----+-----------------------+-------------+----------------+--------------------+-----+\n", - "\n" - ] - } - ], - "source": [ - "oskar.facet(df, \"gene[AIFM3,GGT1]>>biotype>>cadd_raw[-10..10]:0.2>>cadd_scaled[-10..10]:1>>min(phylop)\").show(25, truncate=False)" - ] - }, - { - "cell_type": "code", - "execution_count": 96, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "+----+---------------------------------+-----+\n", - "|type|popFreq__GNOMAD_GENOMES__ALLRange|count|\n", - "+----+---------------------------------+-----+\n", - "| SNV| 0.0| 478|\n", - "| SNV| 0.1| 95|\n", - "| SNV| 0.2| 57|\n", - "| SNV| 0.30000000000000004| 90|\n", - "| SNV| 0.4| 66|\n", - "| SNV| 0.5| 21|\n", - "+----+---------------------------------+-----+\n", - "\n", - "+-----+---------------------------------+-----+\n", - "| type|popFreq__GNOMAD_GENOMES__ALLRange|count|\n", - "+-----+---------------------------------+-----+\n", - "|INDEL| 0.0| 36|\n", - "|INDEL| 0.1| 17|\n", - "|INDEL| 0.2| 18|\n", - "|INDEL| 0.30000000000000004| 7|\n", - "|INDEL| 0.4| 11|\n", - "|INDEL| 0.5| 5|\n", - "+-----+---------------------------------+-----+\n", - "\n" - ] - } - ], - "source": [ - "snvPandas = oskar.facet(df, \"type[SNV]>>popFreq__GNOMAD_GENOMES__ALL[0..0.5]:0.1\").show()\n", - "indelPandas = oskar.facet(df, \"type[INDEL]>>popFreq__GNOMAD_GENOMES__ALL[0..0.5]:0.1\").show()" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "" - ], - "text/vnd.plotly.v1+html": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "application/vnd.plotly.v1+json": { - "config": { - "linkText": "Export to plot.ly", - "plotlyServerURL": "https://plot.ly", - "showLink": true - }, - "data": [ - { - "domain": { - "x": [ - 0, - 0.48 - ] - }, - "hole": 0.4, - "labels": [ - 0, - 0.1, - 0.2, - 0.30000000000000004, - 0.4, - 0.5 - ], - "type": "pie", - "uid": "935ed220-f713-4035-8a30-1c79dee5aa7d", - "values": [ - 478, - 95, - 57, - 90, - 66, - 21 - ] - }, - { - "domain": { - "x": [ - 0.51, - 1 - ] - }, - "hole": 0.4, - "labels": [ - 0, - 0.1, - 0.2, - 0.30000000000000004, - 0.4, - 0.5 - ], - "type": "pie", - "uid": "fcf24555-7061-411c-9ed7-ac58ebb3c67c", - "values": [ - 36, - 17, - 18, - 7, - 11, - 5 - ] - } - ], - "layout": { - "annotations": [ - { - "font": { - "size": 18 - }, - "showarrow": false, - "text": "SNV", - "x": 0.22, - "y": 0.5 - }, - { - "font": { - "size": 18 - }, - "showarrow": false, - "text": "INDEL", - "x": 0.78, - "y": 0.5 - } - ], - "autosize": false, - "height": 600, - "title": "Global alternate population frequencies [ALL]", - "width": 1500 - } - }, - "image/png": "iVBORw0KGgoAAAANSUhEUgAABbcAAAJkCAYAAAAiDBx1AAAgAElEQVR4nOzd+V/U96Hv8fsP3PS0vb333J57bk7TNidtY9OmSU6apGlz+w1hUKMEjNaYjTTVaBazGKOIYjAG4hJjEEVcwI0QNS4RRQPigoq7BuMGboi4wYCKoMPyvj+koCjLADPzme/M6/l4vH8IMwzDDPMd83Ic/psAAAAAAAAAALCZ/2b6CgAAAAAAAAAA0FHEbQAAAAAAAACA7RC3AQAAAAAAAAC2Q9wGAAAAAAAAANgOcRsAAAAAAAAAYDvEbQAAAAAAAACA7RC3AQAAAAAAAAC2Q9wGAAAAAAAAANgOcRsAAAAAAAAAYDvEbQAAAAAAAACA7RC3AQAAAAAAAAC2Q9wGAAAAAAAAANgOcRsAAAAAAAAAYDvEbQAAAAAAAACA7RC3AQAAAAAAAAC2Q9wGAAAAAAAAANgOcRsAAAAAAAAAYDvEbQAAAAAAAACA7RC3AQAAAAAAAAC2Q9wGAAAAAAAAANgOcRsAAAAAAAAAYDvEbQAAAAAAAACA7RC3AQAAAAAAAAC2Q9wGAAAAAAAAANgOcRsAAAAAAAAAYDvEbQAAAAAAAACA7RC3AQAAAAAAAAC2Q9wGAAAAAAAAANgOcRsAAAAAAAAAYDvEbQAAAAAAAACA7RC3AQAAAAAAAAC2Q9wGAAAAAAAAANgOcRsAAAAAAAAAYDvEbQAAAAAAAACA7RC3AQAAAAAAAAC2Q9wGAAB+48svv5RlWbpw4UKHPzc9PV2WZam8vNwvro8vLxPmBPL9eebMGX3wwQfq1auXevTooYyMDNNXCTepq6uTZVnNtm3bNtNXS1OnTm12nYYNG2b6KgEAgABG3AYAAF5VU1OjpUuXaujQoQoPD1dISIgiIiI0bNgwLVmyRJcvX246b7DG7YMHDyotLU1Xrlzx2NfxNjteZ2/oys9IW7fhjBkzZFmWDh486Imr2WH19fWKiopSZGSkZs+erbS0NOXm5hq5Lv7O1H3VGLeTkpJUUFCggoKCZsfTm2VkZMiyLIWEhMjpdLZ4nvXr17cbyN05T2lpadP1efPNN4nbAADAq4jbAADAa06fPq0XX3xRlmVp6NChmjVrllJTUzV58mRFRUXJsiz16tWr6fzBGreXLl0qy7J09uxZj30db7PjdfaGrvyMtHUbrlmzRtHR0SouLvbE1eywgwcPyrIs5eXlGfn6dmLqvmqM28uWLWv3vIMGDVJERESb5/dU3L5ZdHQ0cRsAAHgVcRsAAHjF1atX9fzzz6tHjx7Kz89v8Tzfffed3n333ab/Jm7bJxTb8Tp7g7fitmmNEbOkpMT0VUEr3I3bJSUlTefr16+f3nzzzRbPR9wGAAB2RNwGAABe0Ribv/76a7c/p7VQWFJSotjYWPXu3VthYWEaMmSItm7d2uLXO3nypCZNmqTw8HB1795do0aNuu3yjh07pvfee0/9+vVTaGioevTooaFDh94W4TsSLjt7mQsWLLjtfXMty9L69eubPsfpdGry5Ml69tln9dRTT+n5559Xenq66uvrb/v+S0tLNWvWLPXt21dPPfWUtm3b1nTa8ePHNXXqVEVGRqpXr16Kjo7W+fPnO/x9eOo6t6bx+h47dkyTJk3SM888o7CwsBavr9Sxnw93LjMlJUWWZen69evNPt4Y9m5++4mWfkY8cRt64rHgzv3dksbofvMa/4VFWz9nkvv3+4ULF/TRRx81vZ/3oEGDNHToUFmW1extWjpyX7j79Tt6+5SXl2vy5Mnq27evHA6HoqKiNH36dJWVlbV5X7lzXWpra7VkyRK9+uqr6t69u/r27av3339fOTk57d5P7sbtefPm6cknn5TT6dT06dNlWZbOnTt32/mI2wAAwI6I2wAAwCtee+019erVS7W1tW5/TkuR6OzZswoPD1d4eLhmzpyphQsXatCgQbIsS9nZ2U3nawxWvXr1UlRUlCZPnqz3339flmXplVdeaXY9duzYoaFDhyoxMVELFy5UWlqa3njjDYWEhKigoKDN69Oazl7msWPH9NFHH8myLH355ZfKyspSVlZW06t5Kysr9dxzzykyMlJpaWlauXKlxo8fL8uylJKSctv333jeDz/8UGPGjNHevXub3TYDBgzQpEmT9MEHH8iyLL3xxhsd/j48dZ1b03h9e/To0XRfDhs2TJZlKSoqqtl92dGfD3cus6tx2xO3oaceC+3d3y05efKkJk6cKMuytGDBAmVlZTXF1rZ+zty93ysqKtSvXz85HA4lJCQoNTVVcXFx6t69e5fidkcfK+7cPhUVFerfv78cDoc+/fRTZWRkKD4+Xg6HQ5mZma3eV+5el8TERD355JOaPHmyli9frrlz5+qVV17Ra6+91u795G7cjoqK0nvvvSdJOnTokCzL0hdffHHb+YjbAADAjojbAADAK0JDQ5u95Yg7WopE48aN01NPPaXTp083fczlcmnw4MEKDw9vil6NwWr58uVqaGhoOu/cuXNlWZY2bNjQ5td2uVzq06eP4uPj27w+HeHuZbb19hSTJ09W7969dfHixWYfnzJlihwOh65evSrpxvc/ZcoU1dTUNDtv42nz5s1rFnETExPdeluMlr4PT1zn1jRe32XLljW7L2fPnn3bfdnRnw93LrOrcbslHb0NPfFY6Oz9LUlZWVlNr26+WVs/Z+7e75999pksy2r2lz6SlJaW1qW43dHHiju3z4QJE2RZlr777rtml3n+/HkdOXJEUsv3lTvXpb6+Xj169FBCQkKz8zQ0NNx227TEnbhdVFQky7KaQrwkDRgwQAMHDrztvMRtAABgR8RtAADgcS6XS5ZlafTo0bed5nA4mr3dgcPhaDrt1kjUGH/GjBlz2+WsXbtWlmVp165dklp/z+3y8nJZlqXPP/+82cf37dunuLg4DRgwoOkVo5Zl6f3332/1+rSns5fZWuRsaGhQ7969NXnyZF2/fr3Z8vLyZFmWDhw40Ob339ZpGzdulGVZ2rdvX4e/D09c59a0dn3LyspkWZamTp0qyTM/H7depuSZuN2V27Cly/XE99ra/d2S9uL2rZfdkfs9IiKi2e3QqCtx2xOPlVtvn/r6evXq1UsjRoxo87a69b5y97o0NDSoZ8+eevXVV5ve4qQj3InbKSkpCgkJ0aVLl5o+NmvWLFmWddsvwCRuAwAAOyJuAwAAr3A4HBo6dOhtH583b57mzJmjOXPmKCoqqs243Rimk5OTb7ucAwcOyLJuvKd3W3HX4XAoNja26b+XLVsmy7LUv39/paWlKScnR/n5+Xr++eebhZiOxO2uXGZrkbOioqLZXwS0tMb3ce5M3N61a5csy9KOHTs6/H144jq3xt370ls/H12N2129DVu6XE98ry3d363paNx2936/fPmyLMtSUlLSbV+zK3HbE4+VW28fp9Mpy7I0Y8aMNm+rW++rjlyXxs998sknNXDgQH366aftPj4auRO3n3vuOb3xxhsqKSlp2ubNm2VZltLS0lq8TYnbAADATojbAADAKwYNGqQePXrcFqVuFhcX51bcnjlz5m2fW1BQIMuytGrVKkltv6I0NDRUcXFxkr4PQr169dLgwYNVXV3d7Lz/+Mc/OhW3u3qZrUXOxu8/Pj5eBw8ebHGNIbAzcXv37t3NYl5Hvg9PXOfWtHZ96+vr9dRTTzXdl574+bj1MqUbQfXatWvNzutO3PbEbdjS5Xrie731/m5LR+O2u/d7VVVVq5G+rbjd3n3hicfKrbdPY9xu6brerLX7yt3HQFFRkVJSUvT2228rLCxMlmVp0qRJbX5Nqf24/d1337UZ2F966aUWb1PiNgAAsBPiNgAA8IoFCxbIsiwtXbq01fO0F7cb34qhpbc3aYxv7b0VQ2lpqSzL0ty5cyVJFy9elGVZSk1Nve0yOxu3u3qZja/0LS0tbfa5jd9/dHR0m19f8kzc7sj34Ynr3NHvpaSkpNn188TPx62XKd2IrJWVlc3O607c9sRt2NLleuJ79Wbc7sj93qtXrxa/j5bitrv3hSceK7fePo2XOXLkyDYvr7X7qjOPgZqaGkVHR8uyLF2+fLnN87YXtxMTExUaGqrc3Fxt3Lix2RISEmRZlgoLC5vOT9wGAAB2RNwGAABeUVVVpb59+8rhcCgnJ6fF88TGxrYZt6XvA3hISIhOnTrV9DGXy6WBAwcqPDy86RWdrQWriRMnyrIsFRUVNX1uSEhIs7ehkKRt27apZ8+enYrbXb3MDRs2tBodx48fL8uytHv37ttOO3jwoKqqqtr8/ts67daY15HvwxPXuTUtXd+GhgbFx8ffFly78vPR2mU2ht2bf8nk5cuXFRsb227c9tRt6I3HgjfjtuT+/T569Gg5HA6VlJQ0ne50OvXuu+/eFrc7cl909bHS0u0TFxenJ598UocOHWp23vZ+oaQ716Wqqko5OTnNfsGpdOOXnLZ0G9+srbhdX1+vPn36tBrmjx8/ftur0onbAADAjojbAADAawoLC9WvXz9ZlqWBAwcqKSlJc+fO1aRJkxQVFSXLshQREdF0/pYi0ZkzZ9S7d2+Fh4crOTlZCxcu1MCBA2VZltatW9d0vsZg9dJLLykpKUlz5szR0KFDZVmWEhMTm12vxlctjhw5UsnJyRo2bJhCQkLkcDg6/Z7bXbnMsrIyORwOPffcc1q0aJFmzpyp/fv3S5IuXLigvn376sknn1RcXJzS09OVlpbW9L01Xo4n4nZHvg9PXOfWtHRfvvXWW7IsS9OmTWt23q78fLR2mZcuXdLTTz+tp59+WpMnT1ZCQoLCw8PVq1evduO2p25DTzwWfB233b3fDx8+rJCQEIWHh+vjjz/WuHHj9PTTT6tnz563xe2O3Bddfay0dPuUlpYqPDxcYWFhmjJlijIyMpSQkKDu3bsrMzOz1fvKnevS+PYlAwcO1Lx587RixQolJSXJ4XAoJiam3fuorbi9Z88eWZalrKysVj//5ZdfVv/+/ZviemO4Hjt2rFJSUm7b3r173TrPzYjbAADA24jbAADAq65cuaL09HS98cYb6tWrl0JCQtSnTx/FxMQoOzu72XvpthaTi4uLFRsbq169esnhcGjw4MHasmVLs/M0BqtPPvlE/fv3V2hoqPr376/09PTbXhlZXV2tyZMnN0WykSNH6uDBg51+WxJPXGZeXl7TL9js16+f9uzZ03Sa0+lUYmKiBgwYoNDQUPXp00fvvfeeVq5cqdra2mbff1fjtrvfhyeuc2sar29iYqJeeOEFORwOPf/881q8ePFt96XUsZ8Pdy+zoKBAgwcPVlhYmAYMGKBFixZp3bp1bsVtT9yGnngs+DpuS+7f71u3btUrr7yi0NBQvfjii1q6dKlSU1Nvi9uS+/eFu1+/o7dPaWmpxo8fr8jISDkcDr388stKTk5WWVmZpNbvq/auS11dnZYtW6ahQ4eqZ8+eCgsLU1RUlBYsWHDbe4y3pK24PXHiRIWEhLT51iZz586VZVkqKCiQdCNut7YFCxa4dZ6bEbcBAIC3EbcBAADgV9oLqP5ymfCslt5zG61r7z23/QFxGwAAeBtxGwAAAH6FuB2ciNsdQ9wGAAAgbgMAAMDPELeDE3G7YxrjdlJSkgoKClRQUNDm25D4SmlpadP1efPNN4nbAADAq4jbAAAA8CvE7eBE3O6Yxrh987Zt22b6amnq1KnNrhNxGwAAeBNxGwAAAAAAAABgO8RtAAAAAAAAAIDtELcBAAAAAAAAALZD3AYAAAAAAAAA2A5xGwAAAAAAAABgO8RtAAAAAAAAAIDtELcBAAAAAAAAALZD3AYAAAAAAAAA2A5xGwAAAAAAAABgO8RtAAAAAAAAAIDtELcBAAAAAAAAALZD3AYAAAAAAAAA2A5xGwAAAAAAAABgO8RtAAAAAAAAAIDtELcBAAAAAAAAALZD3AYAAAAAAAAA2A5xGwAAAAAAAABgO8RtAAAAAAAAAIDtELcBAAAAAAAAALZD3AYAAAAAAAAA2A5xGwAAAAAAAABgO8RtAAAAAAAAAIDtELcBAAAAAAAAALZD3AYAAAAAAAAA2A5xGwAAAAAAAABgO8RtAAAAAAAAAIDtELcBAAAAAAAAALZD3AYAAAAAAAAA2A5xGwAAAAAAAABgO8RtAAAAAAAAAIDtELcBAAAAAAAAALZD3AYAAAAAAAAA2A5xGwAAAAAAAABgO8RtAAAAAAAAAIDtELcBAAAAAAAAALZD3AYAAAAAAAAA2A5xGwAAAAAAAABgO8RtAAAAAAAAAIDtELcBAAAAAAAAALZD3AYAAAAAAAAA2A5xGwAAAAAAAABgO8RtAAAAAAAAAIDtELcBAAAAAAAAALZD3AYAAAAAAAAA2A5xGwAAAAAAAABgO8RtAAAAAAAAAIDtELcBoCuqnVL5Men0DulIlrRvkbQ1UcqJk74eKmU8L6X2kFL+Ks14XJr2X9LU30uf3itN+KUUf6f00U+lMXeofEYP3Tl8lX4Vs0b3jV2rhz7K1mMJ6/XXiRsU9tkm9U7M099mbtOraTv1TsY+jVlxQBPXHtHMjceUvr1Yq/aXKq/wogpKKlVaWWP6lgEAAGjXpYs1Onvskk4WlOnI9nMq2FCiXWtOautXRcpdcEhrUw5o5dR9+mribmWM36FFY/M1P2arUj/I0+z3Nin5rQ1KHJijzz/bqTuHr9JvRmfp9x+u08Pjs/XnT9bryckb1WPqZj07Y6temL1dry/aoxFffauPVx9S4vpCzdt2Usv3lmj9ofPafapCxeVXTd8kAACgA4jbAHCrhgap6qJ09lupcJ20Z560MUFa9Y6U/jdp5hPSpHuksT+SxtzhsZVP7647h6/y6LrFrtUTE3LVZ8ZWvbZgt2KWF2habpEyvy3VwdLLpm9pAAAQoC6X1+jM0Qod3nZWu1af0IZFh7Vmxrda+skuzR+1Vclvfh+lPbWpU3Z69M9Qv45Zoz9/sl4R07do4PxdilleoM/XF+qrPSXafrxcZyp4IQEAAP6AuA0guFU7peMbpG3TpOWDpeS/SOP+l0ejtcm47c4eHp+t/in5il5WoNl5x7XhyAX+hw0AALTr0sVqFe25oB2rjit77nf6auJupY3c4tFobSpuu7vH4nPUN3mb3v1yn6bmHFXWgbMqdlabvmsAAAgaxG0AwaN0r7R3gZQ1QkrrJX3ycyMR29/idmv7bexaPTtjq8asOKAvdhRr3+kKXautN30vAgAAH6uvbdCFk5d1MK9UG784oqUTdmnmW5595bVd43Zr6zYmS8/O2KrYlQf05a7TOnDmklx1DabvSgAAAg5xG0DgaWiQLhyW9qVLmcO+f7/ruP9pPF7bLW63tr9MyNVrC3Zrdt5x7TrpNH1vAwAAD6u8UK3D+We1cdERZXy0Q9NeW288Xtstbre0X4zM1NOf52nMigNase8Mr/AGAMADiNsA7O/KOenAV1LWSGmOw9jbigRL3L51Px+RqR5TN2vUsgIt2X1ahReuqIEXJgEAYAuumjoVHyzXzswT+vrzfUp5e6PxUB2ocbul/f7DdXoldacS1xdq27Fy1bj4V3IAAHQEcRuA/VQ7pe+Wf/8LHqfebzxKB3vcbmm/jV2rV9N2atbm4zpw5hKxGwAAP1Fx7qoObS1V7oJDSv9wuxIHmQ/TwRy3b91dIzIV9tkmxSwv0LI9JTpVftX0jwwAAH6NuA3A/12vko6uk9ZGS9Mfk2J/YDxEE7c7tm5jshSVukMzNx7T/tOVqid2AwDgExXnq7Vr9QmtnGrfV2UHU9xuaY2v7k7eeIy3MgEA4BbEbQD+qfyYlDdFmvWk8ehM3Pb8fhu7Vm9n7NWaA2dV7aoz/dMGAEBAuXDqsrYtP6aFY7YZj87Ebc/PMWWTpuYcVeH5K6Z/1AD4gaTcIn36zVG3BwQa4jYA/1G6T1r/kTTtYeOhmbjtu90dvVqvpO5Uxs5iVVx1mf4pBADAfhqk0qJK5S0+qrSRW4yHZuK27/bEhFx9knVYBSWVpn8KARjSbUxWh44bl2pqTV9lwKOI2wDMaaiXTuZJa4ZLn95rPC6bXrDG7VsXOX2rZucd18Ur103/hAIA4Lca6ht0+pBTGxYd1pxhm43HZdML1rh98x6Nz1Hcqu+0+6TT9I8nAB/yZdyurKxUTEyMwsLCFBkZqfT0dA9+J0DnELcB+N7xjdLKN6X4O40HZX8acbv5fvbBKvVPyVfGzmJeXQAAgKT6+gadOlCu9fMOada7m4wHZX8acbv5HvooW6NXHFD+8XJ+sTcQ4HwZt+Pi4hQbGyun06nDhw8rIiJC+fn5HvxugI4jbgPwjTO7pawR0sT/NB6R/XXE7db3y5Gr9Y95u5T5bamu1dab/mkGAMCnTh0oU3bqQSW/tcF4RPbXEbdb3+8/XKeY5QXafrzc9I8yAC/wVdx2uVxyOBwqKipq+lhycrLi4+M99a0AnULcBuA9Fw5LOeOkz35nPBzbYcRt93bPqDV698t9/A8aACCgXTx9RXmLC3nLEeK2R/dYfI4mrTui4vKrpn/EAXiIr+J2cXGxLMtSTU1N08cyMzM1ZMgQT30rQKcQtwF41rVLUt4UKemPxmOx3Ubc7viemJCrGRuKVF7F+3MDAOzv6qXr2rP2lBaNzTcei+024nbHFz4tT/O2nVRlNb/QG7AzX8XtwsJCWZalhpve6yg7O1tRUVGe+laATiFuA/CMsiLp67elcf9qPBLbdcTtzu+uEZn6x7xdyjl0XnX1vLEkAMBeju29oJVT9xoPxHYecbtrG7xwt3aecJp+KADoBF+/ctvluvEXYpmZmRo8eLCnvhWgU4jbALqmcJ00/xnjYTgQRtz2zB4c942mZB/VxSu8mhsA4L/qXPUq2FCiBaO3GQ/DgTDitmf29Od5WrHvjGp5sQBgG758z+3Q0NBm77k9ffp0jR8/3lPfCtApxG0AHeeqlnakSJ//wXgQDqQRtz27X4zM1Ftf7NWBM5dMP2IAAGhy9dJ1bVlaqJS3NxoPwoE04rZn99BH2ZqWW8RblgA24Ku4LUmxsbEaO3asKioqVFhYqMjISOXl5XnwuwE6jrgNwH2XSqR1MdJHPzUeggNxxG3vrVdinpbvLZGrjlchAQDMOH/ystbOOmA8AgfqiNve2d3RqxW9rEAnyvgFlIC/8mXcdjqdio6OlsPhUEREhObPn+/B7wToHOI2gPad2S0tflka+0PjATiQR9z2/n7/4Tp9nlOoy134Ax0AAO5qaJCKdl/QkoRdxuNvoI+47f29NHeHthSVmX5YAbiFL+M24I+I2wBa1lAvHVwpzQ4xHn2DZcRt363bmCxNyT5K5AYAeIXrWp325RQrbeQW49E3WEbc9t0cUzZp6W7+RRzgL5Jyi/TpN0fdHhBoiNsAmrt+RcqfLk35rfHYG2wjbvt+3WLXamrOUVVdrzP9yAMABICrlde1OeOokt/cYDz2BtuI277fA+O+UfLGY7xYAABgFHEbwPeqndK60dL4fzMeeYN1xG1z+23sWn2+vpDIDQDolJqqWuUtLtT0IbnGI2+wjrht9s9RMzYUqcZVb/qhCAAIQsRtINi5qqVNE6Xx/8d43A32EbfNrzFyV7uI3ACA9rmu1Wn7yuO8UtsPRtw2vwfHfaP5207ydiUAAJ8ibgPBqr5O2jVXmni38ajLiNv+tvs/XKdZm4/rWi2vQAIA3K6utl571p3SrHc2GY+6jLjtb3ssYb2W7SlRPY0bAOADxG0gGB1cKX3+B+MxlxG3/X0PfZStebwCCQBwkwObz2jOsM3GYy4jbvv7/jIhV2sOnDX9kAUABDjiNhBMTm2TZj5hPOIy4rbd9mh8jjJ2FquOlyABQNAq2n1eC2K2Go+4jLhtt/VKzNOeU07TD2EAQIAibgPBwHlcSv+b8XjLiNt2318nbVD+8TLTj2gAgA+VHHEq46MdxuMtI27bfVGpO1R4/orphzQQeDZPlnI/dn9AgCFuA4HsepW0brT04Y+Nh1tG3A6kDVm4W+cu1Zh+hAMAvOhi8RWt+Gyv8WjLiNuBtP/4YJXe/XKfzlTw5yjAYz7+9479v2dNpelrDHgUcRsIRA0N0r5F0oRfGg+2jLgdqLtn1Bol5Rbpeh2/dBIAAklNlUvZqQeNx1pG3A70Tcg6bPrhDgQGH8btyspKxcTEKCwsTJGRkUpPT2/3c2prazV58mRNnTq1018XaAtxGwg0Z/ZIMx43HmoZcTtY9qeE9dpw5ILpRz4AoKsapAObzijl7Y3GQy0jbgfLHo3P0ZbCi6Yf/YC9+TBux8XFKTY2Vk6nU4cPH1ZERITy8/NbPf+WLVvUv39/de/enbgNryFuA4Gi6oK0bJDxQMuI28G6f8zbxVuVAIBNlZdW6cuPeV9tO4+4be+9vmiPyqqumz4UAPbko7jtcrnkcDhUVFTU9LHk5GTFx8e3+7kzZswgbsNriNtAINiWJH30U+NxlhG3g333jFqjGRuKVFvfYPqoAABwQ52rXluWFmraa+uNx1lG3A723TsmS/O2nVQDf4wCOsZHcbu4uFiWZamm5sYLejIzMzVkyJB2P5e4DW8ibgN25jwupfw/41GWEbdZ8z0xIVe7TjpNHyEAAG0o/q5cc4fnGY+yjLjNmq9XYp6KLlSZPkQA9uGjuF1YWCjLstRw099AZWdnKyoqqt3PJW7Dm4jbgB01NEhbPpPi/qfxIMuI26z1vZ2xl39iCwB+xnWtTjnz+IWRgTbidmDtlyNXa/qGIvGP4QA3+PiV2y6Xq+ljmZmZGjx4cLufS9yGNxG3AbspK5KS+YWRgTjidmDu1zFrtDD/lOkjBwBAUskRp1I/4NXagTjidmCu+9RNOnGRV3EDbfLhe26HhoY2e8/t6dOna/z48e1+LnEb3kTcBuyivk7a+In04f8wHmEZcZt1fC/M3q6LV66ZPpIAQFCqddUrd+Fh4wGWEbdZx3d39GrN2nycV3EDrfFR3Jak2NhYjR07VpgsM3oAACAASURBVBUVFSosLFRkZKTy8vKaTs/KytK4ceNu+zziNryJuA3YwfnvpKRHjMdX5t0RtwN/941dqw2Hz5s+ogBAUCktrFDayC3G4ysjbrOurVdink47r5o+pAD+x4dx2+l0Kjo6Wg6HQxEREZo/f36z0+fMmaO+ffs2/ff69esVHh6usLAwORwOhYeHa+PGjZ3++kBLiNuAP2tokPKmSB/+2Hh4Zd4fcTt4NnzpflW76kwfYQAgoNXXNmhzxlHj0ZURt5nnds8o3u4NuI0P4zbgj4jbgL+6ck6aE2o8uDLfjbgdXHssIUf7iitMH2kAICBdOHVZC8dsMx5cGXGbeWcvzN6uC5drTB9qAP+webKU+7H7AwIMcRvwR4dXd/xvX5ntR9wOzn2WfdT0EQcAAkZDfYN2rDqhaa+tNx5bGXGbeXfdxmRpTUGp6cMOAMAw4jbgT65fkb4aaDyyMuI28+36p2xTGb9sEgC6pOL8VX05fofxyMqI28y3ezN9ry7X1Jo+BAEADCFuA/6iZLc0+TfGAysjbjMzeyDuG+066TR9JAIAW/o297TxuMqI28zcHhz3jbYfLzd9KAIAGEDcBvzBpgnGwyozP+I2u2tEpmZsKDJ9RAIA26hz1WvtrAPGwyozP+I2u2tEpmZtPm76sAQA8DHiNmDStUvSvN7GoyrzjxG3WeNemL1dl2pcpo9QAODXrjivadHYfONRlfnHiNuscUMW7laNq870IQoA4CPEbcCUi0elKb81HlSZ/4y4zW7ew+Oztf90pekjFQD4pZIjTqW8vdF4UGX+M+I2u3nWpA067bxq+lAFAPAB4jZgwsEV0rh/NR5TmX+NuM1u3S9Hrtai7adMH7EAwK/sWn1CiYPMx1TmXyNus1vXbUyWNhy5YPqQBXjdrIJZStqX5PaAQEPcBnypoV5aN9p4RGX+OeI2a21vLNqja7X881oAwc11rU6ZSfuNR1TmnyNus9b2eU6h6cMX4FV/XPRH3Zt6r9u77Lps+ioDHkXcBnylpkJK7WE8oDL/HXGbtbWQyRtVUlFt+kgGAEZcLqvRgtHbjAdU5r8jbrO29vfUnaq+zgsFEJh8GbcrKysVExOjsLAwRUZGKj09vc3zf/nll/r73/+usLAwhYeHKyEhQVev3njLoPYuj9PtfXqj69ev65133tE777zT4uldRdwGfOH8QenTe43HU+bfI26z9nbv6CxtPnrR9BENAHzq9KFyzRzK+2uztkfcZu3tyckbdIYXCiAA+TJux8XFKTY2Vk6nU4cPH1ZERITy8/NbPX9WVpYOHTqkS5cu6eTJk3r55ZeVkZHh9uVxur1Pl6T6+nqNGTNGQ4YMIW4DtnVis/TRT42HU+b/I24zd8c/rwUQLPZ+c0rTeH9t5saI28yd3Td2rbYdKzN9aAM8yldx2+VyyeFwqKioqOljycnJio+Pb/dz6+vrdfz4cb300kvau3evW5fH6fY+vdGkSZOUnJysrKws4jZgS4dWSWN/ZDyaMnuMuM06svcW71N9fYPpoxwAeEWdq15ZMwuMB1NmnxG3mbu7a0Sm0raeMH2YAzzGV3G7uLhYlmWppqam6WOZmZkaMmRIu59rWZZCQ0O1evVqty+P0+19uiTNmjVLCQkJamhoIG4DtrRjlvFYyuw14jbr6F6YvV3XXLx/JIDAUn35ujLG7zAeS5m9RtxmHd2wxftNH+4Aj/BV3C4sLJRlWWpouPECm+zsbEVFRbX7uY2v3H7uuee0adMmty6P0+19+rp16xQdHa26uu//f5W4DdjN2mjjoZTZb8Rt1pn1mLpZFVevmz7qAYBHXCqrVtrILcZDKbPfiNusM3t57g5dq+WFArA3X79y2+VyNX0sMzNTgwcPdvsyUlJSFBcX59blcbq9T585c6ZCQ0PlcDjkcDgUEhIiy7LkcDiavdrbE4jbgCfV10kZLxiPpMyeI26zzu5PCet12nm1/WMUAPixspIrmv3eJuORlNlzxG3W2T2TtEVXrtWaPgQCnebL99wODQ1t9h7L06dP1/jx492+jM8++0wJCQluXR6n2/v0W/HKbcAOXFeltKeNB1Jm3xG3WVf2+w/X6cCZS6aPhADQKeeOX1LymxuMB1Jm3xG3WVcWMnmjLl65ZvpQCHSKr+K2JMXGxmrs2LGqqKhQYWGhIiMjlZeX13R6VlaWxo0bJ+n7tyIZPXq09u7dK6fTqU2bNqlHjx7avn2725fH6fY+/WbEbcDPXbp+SUeW8Ipt1rURt1lX96uYNdp10mn6kAgAHXLquzJNfz3XeBxl9h5xm3V1j8bn6ExFtelDItBhvozbTqdT0dHRcjgcioiI0Pz585udPmfOHPXt21eS1NDQoAkTJmjAgAFyOByKiorSunXrOnR5nG7v029G3Ab8WFl1mZ5e9rQeT39MpVN+bTyQMvuOuM08sbujV2vT0QumD40A4JajO85p2mvrjYdRZv8Rt5kn9sC4b1R0/orpQyPQIb6M24A/Im4DXVB6pVRPLXmq6Uki9EtLZRN+bjySMnuOuM08tZ+PyFTOofOmD5EA0KaCDaeNB1EWOCNuM0+t25gsfXu60vQhEnDbrIJZStqX5PaAQEPcBjrp5KWTeiLjidv+FrT3Eoeqxv/UeChl9htxm3lyd43I1Mp9Z0wfKgGgRfuyi43HUBZYI24zT+6eUWu055TT9KESAOAG4jbQCUfKj+jR9Edb/Wc+zy/rLdeHPzYeS5m9Rtxm3tiS3adNHzIBoJlty4qMh1AWeCNuM0/v7ujVyiu8aPqQCQBoB3Eb6KB9F/bpvxb+V7vvY/X6ij6qj/2B8WDK7DPiNvPW0raeNH3oBAA1NDQod+Fh4xGUBeaI28wb+/mITOUe5q3eAMCfEbeBDthWuk1/mP8Ht39RQ8yKvxkPpsw+I24zb2725uOmD6EAglhDQ4PWzT5gPICywB1xm3lrd43I1Kr9paYPowCAVhC3ATdtPbNVv5v3uw79FuJ7U+/V1OX9jEdTZo8Rt5m3R+AGYErWzALj8ZMF9ojbzNv7ak+J6UMpAKAFxG3ADfsu7NP98+7vcNhu3KLFkcbDqanVxtyhyc9109QB93bq9Jt3+v2faHjkA3rW8bj6hf1JUwfcK1fMjbd+yRr0M0X1fERRPR/Vsld/2fTxqugf6oUej+lq9L8Yvz2I28z0CNwAfKmhvkFrZnxrPHyywB9xm3l7//HBKn5ZNwD4IeI20I4j5Uf04IIHOx22G5e1qKfxeOrrbXn939U/7DF1D3mixXjd3um37pWej2jx33/ZFKyHPvNfmvfyPdKYO1Q3+g71DPmLKkb+SFXRP9TTT/1FVf+M2Wkv/0rpr/yn8duDuM38ZUm5haYPrQCCAG9Fwnw54jbzxX72wSqtPXDW9OEVaKZs5kxd/DzR7QGBhrgNtOHkpZN6ZNEjXQ7b96beq/vS7lN+6l+NB1QTm/HCb9qM1+2drjF3qH70HQqx/qp9Q/+t2ed90v++78PwiB/p6af+0nRa/+5/UvGwn+jyyO9ftV0zyr9ftU3cZr4egRuAt2WnHTQePFnwjLjNfLW7RmRq/SF+yST8x+EHHtTB/7zH7dVfvmz6KgMeRdwGWnG26qz+kvEXj4Ttxj04/wEdnPGw8Yhqx7itMXco+YVfKyL0z1r5j5+r6N3/paiej6rovX9tit/hoX/R2eE/UdkHP1Lvp/6smlH/ojkv/Upf/v1u47cBcZv542ZuPGb6UAsgQOUuPGw8drLgGnGb+XK/GJmpzUcvmj7UApJ8G7crKysVExOjsLAwRUZGKj093a3Pu379ut555x298847nf7aQGuI20ALymvK9dSSpzwathv36KJHdDzx98ZDqh3j9rdDf6qBTz+s+L/9Tj1CnlBs3/tVfdMrsre8/n81uPfDGtTrYeUO/g9dGvlDvdjjMdWM+oFW/uPnGvj0w3q998Pa+9a/dfl7Im6zQNmq/aWmD7kAAsymjCPGQycLvhG3ma93d/Rq5R8vM33IBXwat+Pi4hQbGyun06nDhw8rIiJC+fn5bX5OfX29xowZoyFDhhC34RXEbeAWl69fVs9lPb0Sthv3xBeP6/xke7ya2F/i9qWR37+P9pn3fyKNuUOXo3+k9yMeUOyzrf9FwcwXf62lf/+Fykb8WOFP/VlXon+oA2//bw3o/pjx24S4zfxld43I1JZCXnkEwDN2rTlpPHKy4Bxxm5nYPaPWaP/pStOHXgQ5X8Vtl8slh8OhoqKipo8lJycrPj6+zc+bNGmSkpOTlZWVRdyGVxC3gZtcq7umfqv6eTVsN67H4hBdiv9340HVLnG74O2fqkfIX5p9LPu1n7UaqitG/FAv9nhU12N+oIK3f6pBvb5/O5jamDtkWZbqRpu/XYjbzF92z6g1OnyW994D0DWH888aD5wseEfcZqZ239i1OllWZfoQjCDmq7hdXFwsy7JUU1PT9LHMzEwNGTKk1c+ZNWuWEhIS1NDQQNyG1xC3gX+qq6/TwHUDfRK2G9fvq566FvcT41HVX+N21qCfaVy/30lj7lBV9A8VHvoXLf77L9Uw+r+retS/KLrPH/TZgG4tXub0F36j5a/+Qhpzh84N/x/q3/1P0pg7dH74j9XX8Sfjtwlxm/nb/hC3TiUV1aYPxQBs6vShck0bZD5wsuAdcZuZ3B/HZ8tZdd30oRhByldxu7CwUJZlqaGhoelj2dnZioqKavH869atU3R0tOrq6iSJuA2vIW4D/zR803Cfhu3GDVweqbrYfzEaVb219YP/Q+FP/VlhTz4hx5NPKPypP2vjkDvdPn3OS79qFqIPvfO/NTT8IUU6/qz+3f+kpBfu1bVRP7g9Eo/4kV7q8ahcMTc+Nu/lXynm2T/o/YgHtOX1/2v8tiFuM3/cnxLW61K1y/ThGIDNXDh1WTPeyDUeN1lwj7jNTM/x2SZdvV5r+pCMIOTrV267XDf+fyEzM1ODBw9u8fwzZ85UaGioHA6HHA6HQkJCZFmWHA5Hs1d/A11F3AYkTds7zUjYbtzwFf2Mh1VmfsRt5g8Ln5Zn+pAMwEYqL1xVyjsbjYdNxojbzB/Wb+Y21dU3tH/wBDzIl++5HRoa2uw9t6dPn67x48e79fm8chveQtxG0Ft6dKnRsN24hOV/Mx5XGXGbsTuHr9LA+bua/XNDAGhJzRWXUj/IMx41GUscSNxm/rO30veYPjwjyPgqbktSbGysxo4dq4qKChUWFioyMlJ5eTdeHJOVlaVx48a1+LnEbXgLcRtBbXPJZnVL7WY8bDduztK+xgMrI24zdufwVUpYc8j0IRqAn8sYv8N40GSsccRt5k+bkn3U9CEaQcSXcdvpdCo6OloOh0MRERGaP39+s9PnzJmjvn37tvi5xG14C3EbQevbC9/q/nn3Gw/at+7rL3oZj6yMuM3YncNX6cudxaYP1QD81Jrkb43HTMZuHnGb+dvWHjhr+lCNIOHLuA34I+I2gtL5q+f1yKJHjIfslvbbtN9q87wQ46GVEbcZ+9kHq7TtWJnpQzYAP7Mz84TxkMnYrSNuM3/b3dGrdfgsERHeVzZzpi5+nuj2gEBD3EbQuV53XX1W9jEesdva/fPu17cpjxqPrYy4zdhvRmfp+MUq04duAH7i1IEy4xGTsZZG3Gb+uIfHZ6vsyjXTh24ACGjEbQSd9ze+bzxeu7M/LnxYR5MeNB5cGXGbsUfjc1Redd304RuAYeWlVUp+c4PxiMlYSyNuM3/d059vlquu3vQhHAACFnEbQSXjcIbxaN2RPZ7+mEqn/Np4dGXEbcb6TN+quvoG04dxAIbUVLmU+kGe8YDJWGsjbjN/3jsZe00fxgEgYBG3ETT2Xdin36X9zniw7uhCv7RUkXCn8fDKiNuMxa36zvShHIAhSyfsMh4vGWtrxG3m75u75YTpQzkABCTiNoJCWXWZHv/iceOhurOLXNpdVz/6V+PxlRG3GVtTUGr6kA7Ax7YsLTQeLhlrb8Rt5u+7a0Sm9hVXmD6kA0DAIW4j4NXV16n/qv7GA3VXF7XsGdWO/aHxAMuI2yy495+jVqvo/BXTh3YAPnLqO36BJLPHiNvMDnvoo290qdpl+tAOAAGFuI2A9/H2j42HaU/t7RXPSrE/MB5hGXGbBff+lLBeVddqTR/eAXjZFec1zRy60Xi0ZMydEbeZXfbC7O2mD+8IMLuzTmrH18fdHhBoiNsIaDmncowHaU8vZsXfjEdYRtxm7KU529XQwC+YBAJVXV29Mj7aYTxYMubuiNvMTkveeMz0YR4BpKN/EX29mhepILAQtxGwSq6U6KEFDxmP0d5Y0rJ+xkMsI24zNi23yPShHoCXbPriiPFYyVhHRtxmdhrvvw1P8mXcrqysVExMjMLCwhQZGan09PQ2zz937ly9+OKLcjgcGjBggL766qtOf22gNcRtBKTa+lo9s+IZ4xHam1ua8YzxGMuI2yy4d9eITB0oqTR9yAfgYcf3XzQeKv1xSa+t14FNZ/Rt7unbTpsXvUUnC8rkqqlTxbmrykk72KXLy049qPLSKjlLr2rjTX/RMPOtDao8X63kNzcYvz38bcRtZrfx/tvwFF/G7bi4OMXGxsrpdOrw4cOKiIhQfn5+q+dPTk7Wvn37VFFRoe3btyssLEx79uzp9NcHWkLcRkBK2JFgPD57e91Su2n9AofxIMuI2yy492h8jq7w/ttAwKiqvKbktwint27VtP26XFaj2uv1t8XopCHrVXHuqvJXHNP013O15JNdqqmq1app+zt1edNeWy9XTZ1mv7dJM9/aoOs1dU33yY6vj2vrV0XGbw9/HHGb2XF/T91p+rCPAOCruO1yueRwOFRUdONfbyYnJys+Pt7tyxg6dKiWLFnSqa8PtIa4jYCzuWSz8fDsq/1u3u+Un/pX41GWEbdZcG/g/F2mD/0APKChoUFfTdxtPFL68/auO3VbjF76yS5dr65V4qAbH9u15qSK9lzo1OXNGbZZ12vqmv77cnmNFozeppS3N6ryfLVmvJFr/HbwxxG3mV33xc5i04d/2Jyv4nZxcbEsy1JNTU3TxzIzMzVkyBC3Pr+mpkbh4eHavXt3p74+0BriNgLKuapz+uPCPxqPzr7cg/Mf0MEZDxsPs4y4zYJ7S3eXmH4KANBFe78pNh4o/X0txehV0/arpqq22ce+mfudLhZf6dTlTRuUo5qqWqWN3KI5wzbr2tVazXgjVzszTyhvSaHx28BfR9xmdt09o9aopKLa9FMAbMxXcbuwsFCWZTX7pfLZ2dmKiopy6/M/+eQTDR8+nF9KD48jbiNg1NbXqu/XfY3HZhN7dNEjKp7azXicZcRtFry7Z9QaFZdfNf1UAKCTnGerlDR4vfFA6e9rKUbPfm+Trl2tVd6SQk0fkqs5wzbrwMaSTsftxIE5ykzar/MnL+vCqcvKmlmgWe9sVMX5as14PVe5Cw/rQvFlnTt+Scsm7TF+m/jLiNvMzguflkfwQ6f5+pXbLteN94rPzMzU4MGD2/3cpKQkDRw4UFVVVZ362kBbiNsIGIl7E41HZpOzMp5Q2YSfGw+0jLjNgneOzzaptq7e9NMBgA6qr6vXorH5xuOkHdZajP5q4m6Vnb6iutp6VZy7qpIjTh3f1/4v5mzt8m7d7qyT2pRxVHPe36yaKpdmDt2oJQm7dOlijfHbxF9G3GZ2X1JuUfsHbKAFvnzP7dDQ0GbvuT19+nSNHz++1c+pq6vTJ598oqFDhxK24TXEbQSEI+VH1C21m/HAbHq9lzhUNf6nxiMtI26z4N3kdUdMPyUA6CB+QaH7czdGFx8sV+6CQx65vFnvblLFuauaPiRXSz/ZpQunLitxYI6SXlsvSZr2Gq+4TxxI3Gb2310jMnWw9JLhZwTYka/itiTFxsZq7NixqqioUGFhoSIjI5WXl9d0elZWlsaNGyfp+7D9/vvva9SoUaqsrFR1dbWqq6ubvWc34AnEbdieq86lHl/1MB6W/WXPL+st14c/Nh5qGXGbBefuGpGpo+cum35qAOCm0sJK41HSTmstRs8Ztlmz3tmohWO26cDGEpWdvqKkITeic3bqQR3dcc7ty2t2nm9OaeOiI0ocmKO0EVt0ufz7V2unfpCnqoprxm8TfxlxmwXC/jppg+mnBdiQL+O20+lUdHS0HA6HIiIiNH/+/Ganz5kzR3379pUkXblyRZZl3baXXnqpS98vcCviNmxv0q5JxoOyv+31FX1UF/svxmMtI26z4JxjyibV1fO+kYC/q3XVKXVEnvEoaYetTTmgmiqXal31qnPVq6bKpTXJ3zadvvnLo2qob9DVyuv6dsNppbzdPDTszDzRLES3d3mNmzNssyrOXW32fujbVx7X8X0XVXywXJlJ+43fNv4y4jYLlCWsOWT66QE248u4Dfgj4jZs7UDZAeMh2V83fEU/47GWEbdZ8O7znELTTxEA2rE546jxIMmYp0bcZoGyn32wSt+dqTT9FAEb2Z11Uju+Pu72gEBD3IZtXau7ptAlocYjsj/v0xV/Mx5sGXGbBed4exLAv507ccl4jGTMkyNus0DaXydt4Jd0A4CbiNuwrfH5443HYzts0eJI49GWEbdZcI63JwH8U11tveZFbzUeIxnz5IjbLNA2Jfuo6acLALAF4jZsaee5ncajsZ329aIexsMtI26z4FxSbpHppwwAt9iypNB4iGTM0yNus0Ab/woOANxD3IbtuOpdvB1JB3df2n3aPC/EeLxlxG0WfPvlyNU6U1Ft+qkDwD9dPH1ZiYPMh0jGPD3iNgvE8a/gAKB9xG3YzpyCOcZjsR13/7z79W3Ko8YDLiNus+BbVOoO008dAP5pYew24xGSMW+MuM0CdTM28K/gAKAtxG3YysXqi/rD/D8YD8V23R8XPqzjib83HnEZcZsF39YfOm/6KQQIeruzThoPkIx5a8RtFqj7z1Grdf5SjemnEADwW8Rt2Mr7G983Hojtvie+eFznJ99tPOQy4jYLrj08PlvXautMP40AQauq8pqmv55rPEAy5q0Rt1kgb9D8XaafRuDHti9frK2LF7o9INAQt2Ebe8/vNR6GA2U9FofoUvy/G4+5jLjNgmuT1x0x/VQCBK01yQXG4yNj3hxxmwX68govmn4qgZ/6/KVnNfHZ7m7v2tUq01cZ8CjiNmyhrr5OPb7qYTwKB9L6fdVTVz/6V+NBlxG3WfCMXy4JmHH6sNN4eGTM2yNus0DfYwk5ctXVm35KgR/yZdyurKxUTEyMwsLCFBkZqfT09DbPn5KSIsuymu2DDz7o9NcHWkLchi0sOLjAeAwOxEUte0a1Y39oPOoy4jYLnr04Z7vppxQgqNTV1Wte9Bbj4ZExb4+4zYJh03L55ZK4nS/jdlxcnGJjY+V0OnX48GFFREQoPz+/1fOnpKQoPj5eV65caVpNDe8hD88ibsPvOWucemjBQ8ZDcKDunRV91eAHYZcRt1nwLIdfLgn4zK41/BJJFhwjbrNgGL9cEi3xVdx2uVxyOBwqKrrxlyzJycmKj49v9XNSUlI0ceLETn09wF3Ebfi92K2xxgNwoG/cir8ZD7uMuM2CZ49/sl519Q2mn16AgFdVcU3Th/BLJFlwjLjNgmWDF+42/fQCP+OruF1cXCzLspq98jozM1NDhgxp9XNSUlLUo0cP9e3bVwMHDlRGRkanvjbQFuI2/NqpS6eMh99g2cyv+hqPu8E+4jYLpqVuOWH6KQYIeNmpB40HR8Z8NeI2C6btP11h+ikGfsRXcbuwsFCWZamh4caLVLKzsxUVFdXq55SUlOjUqVM6d+6ctmzZoj59+mj58uWd+vpAa4jb8GuDswcbj77BtKUZzxgPvME84jYLpnWLzdLlGpfppxkgYJWVXFHiIPPBkTFfjbjNgmkRSVtMP83Aj/j6ldsu140/w2dmZmrw4MFuX8bChQv13nvvderrA60hbsNv7buwz3jsDbZ1S+2m9QscxiNvsI64zYJtH379nemnGiBgrZy6z3hsZMyXI26zYFv2QX6HCb7ny/fcDg0Nbfae29OnT9f48ePdvoxZs2bpww8/7NTXB1pD3IbfilwZaTz2BuN+N+932j37z8ZDbzCOuM2CbT8fkanTzqumn26AgHP6sNN4aGTM1yNus2DbExNyVc/vMIF8F7clKTY2VmPHjlVFRYUKCwsVGRmpvLy8ptOzsrI0bty4pv/+7LPPtHfvXjmdTu3YsUPh4eHNzg94AnEbfmnVsVXGI28w76EFD+lo0oPGY2+wjbjNgnGvpu00/ZQDBJxFY/ONh0bGfD3iNgvGfbGz2PRTDvyAL+O20+lUdHS0HA6HIiIiNH/+/Ganz5kzR3379m3672nTpum5556Tw+HQiy++qJUrV3b6awOtIW7D77jqXXoi4wnjgTfY93j6Yyqd8mvjwTeYRtxmwbrdJ52mn3qAgHF0xznjkZExEyNus2DcH+LW6ZqrzvRTDwzzZdwG/BFxG35nTsEc42GXfb/QLy1VJNxpPPoGy4jbLFjXL3mb6aceIGCkfpBnPDIyZmLEbRasm5Zb1P6TAwLa9uWLtXXxQrcHBBriNvxKdW21Hln0iPGoy24scml3VY3/N+PhNxhG3GbBvF28ehvosoINJcYDI2OmRtxmwbpuY7JUda3W9FMQABhD3IZfmbZ3mvGYy27f88t6y/Xhj43H30AfcZsF8/qn5Jt+CgJsra62XnOGbTYeGBkzNeI2C+Z9+s1R009DAGAMcRt+4/L1y3pwwYPGQy5rea+v6KP62B8YD8CBPOI2C/bx6m2g8/blFBuPi4yZHHGbBfN+FbNGl6pdpp+KAMAI4jb8xtQ9U40HXNb2Ylb8zXgADuQRt1mw74XZ200/FQG2VOuqU8o7G43HRcZMjrjNgn0T1h42/XQEAEYQt+EXeNW2ffb5sn7GI3CgjrjN2CoVlFSafkoCbGfPulPGwyJjpkfcZsE+o4MRaAAAIABJREFUXr0NIFgRt+EXpuyeYjzaMve3aHGk8RAciCNuM7ZKL83dYfopCbAV1zVetc1Y4kDiNmN3Dl+lj1cfMv20BAA+R9yGcRU1Fbxq24bLWtTTeAwOtBG3Gft+B85cMv3UBNjGrtUnjEdFxvxhxG3GVunu6NUqr7pu+qkJAHyKuA3jJu2aZDzUso7vvrT7lJ/6V+NBOJBG3Gbs+72Zvsf0UxNgC3W19Up5m1dtM5Y4kLjNWOMmZPHe2wCCC3EbRlVcqzAeaVnn98D8B3Qg+Y/Go3CgjLjN2Pe7a0SmzlbWmH6KAvzegU1njAdFxvxlxG3Gvt9vY9fqWm2d6acoAPAZ4jaMmrl/pvFAy7q2Rxc9ouKp3YyH4UAYcZuxG/vw6+9MP0UBfq2hoUELRm8zHhQZ85cRtxm7sYX5p0w/TQGAzxC3YUxtfa0e/+Jx43GWdX1WxhM6P/lu43HY7iNuM3Zjd0ev1pVrtaafqgC/dbKgzHhMZMyfRtxm7Mb+38QNpp+mAMBniNswJvN4pvEoyzy3HotDdCn+340HYjuPuM1Y803LLTL9VAX4rRVT9hqPiYz504jbjDVf7uELpp+qAMAniNswJmJFhPEgyzy7fl/11LW4nxiPxHYdcZux5rv/w3Wqras3/XQF+B3n2SrjIZExfxtxm7HmGzAr3/TTFQD4BHEbRuy7sM94iGXe2cDlEarzg1Dsdxv/f6SZT0hpvaSFz0oZL0hLX5VWvCFlDpPWjtLFLfP08epDGrPigIYv3a830/dq4LxdenHOdj07Y6se/2S97o5ebfwPyoz5cl/uOm36KQvwOzlpB42HRMZ8vdnvbdbij3dqxZS9WjVtv9amHFBO2kFtXHREW5YU6pvcU/oo86Bilhdo2OL9en3RHr2SulPPpeSrV2Ke/hC3zvhzGmO+3tFzV0w/ZQGA1xG3YcR7G94zHmGZ9zZ8RT/zMdnUJv9amtdbWj1M2jlLOrFJunLeo4+f8qrrOnDmkr45eE7ztp3UuMyDCk/aYvwPz4x5Y9Zk3jMSuFn1ZZfxyMiYtzZ/1FatSS7QzswTOrTtrEqOOFV5odqjj6GTZVe19ViZluw+rak5RzVo/i49/sl64893jHljw5fu9+jjBwD8EXEbPldWXab70u4zHmCZd5ew/G/mQ7O399FPpdSeUs44qXCdVFNp9LF1va5eu09VaOamYxo4b5ceiPvG+B+oGfPEdpwoN/rYAvzJnnWnjAdIxjyxBaO36Zs532lfdrHOHK2Q61qd0cfWlWu12nasXCmbjuutL/bqsQSCNwuMlVVdN/rYAgBvI27D5z7d/anx8Mp8s7lfBdgruBN+Ji35u7RjpnT2W9MPJbcUXajS3C0n9PLcHfpVzBrjf7hmrDMbsnC36YcS4Dfmx2w1HiUZ68yS39ygVdP269vc07pcXmP6oeSWE2VXlfrPP0fdM4o/RzF7bvK6I6YfSgDgVcRt+Nyj6Y8aj67Md1vxRS/zUborm/ALadW70onNUkOD6YdPl207Vq5Psg4r7LNNxv+gzVhHxquOAOls0f9n7z7foyrU/f//BT/32fucfc4++3zPQd17K2AQRBBUENERpIgoCKICFpQmgqBAQkISCL23NGog9A7ppBBKQuiQShLSey+TNpmZz+8BEkrazGQm95rJ53Vd7weSECXXPa61blbWVIgvKBkzpn2Lr+DqyRRkJ5ZJv3zM4nJKMZb7xeOtFaHix0XGDK2Pa7D0S4eIyKK43KZOFZAWIL5sZZ3b6z6v4/L+YfJLaqMW2v8C/H8DMq7YxEK7NQ+L1VgTmIi3V/ECjSm/zaHJ0i8ZInF8I0lmDR1wikL06VQUZVZJv2Qs6m52OVYGJPLxJcwqOhSTKf2SISKyGC63qVN9H/S9+LKVdX599/fF/V3vyS+t2+vI10Ba13vzOr3+0R3dC4/fg51zkPjJN2Mt1W/5Beh0tvuXTUTt0dRr4flzhPjikrGW8pp7EdGnU1GcXS39UhFxP6cCbv4JfAQcU2zvr4uQfpkQEVkMl9vUafKq88SXrEyutw8ORNr2N+QX2M/n9rdHd2mXpUm/RBShTqODT1Q670JiiszvXp70S4RITPyVXPEFJmPPt3fRFdwJyURjg076JaIIlXWN2BGRijeXh4gfMxl7vrDEQumXCBGRRXC5TZ1m863N4gtWJtvQI+8hb3NP+YW28wvA+leByxuAugrpl4Zinb+Xx2dzM0U1wTNK+mVBJObEmpvii0zGHue7NBoJV/Kg0/InalpS36iD77VMDObNAkxBTfKOln5pEBFZBJfb1Cl0ep1VvJFkH58+OPbgGA4lHjLp40/ncdcDGZUZqNfWI7s6G6tiVj3z8SVXliC1PBUPKx5i5bWVTb8+8OBAZFZl4i3ft8S/H5bo42MfonxNN7ml9saewB1f6ZeEVbmaWoKvd14TPyFnrNsiP6SX1Ei/JIg6X+lDFHjOwWnHE+JLTda1278kCqm3ePenMU7dzsE7q8LEj5+MdVvkh+SCrvnoICKybVxuU6cIywoTX6q2189hPyNXnYvaxtoWl9ftffz59sTuwXdB3+G9I+9hxoUZqNPWNT1zvLdPb6g1arx35D0MPDgQ1ZpqDDg4AHb77OB+1x2bbm0S/35YsvEnR6Fmxd86d6m94u+P7tRurJd+OVit6IclUG24KH5Szrp2qwISpV8KRJ0vfGXT8axh+wdI2L4Ou34JEl90sq7TvsVXkHA1D3q+94FJNFo9fKIy0G/5BfHjKOvarfBPkH45EBGZHZfb1Clmhc4SX6ga2t64vW0ur9v7eGvdLLiJNdfXwG6fHYYcHYJqTXXTx/LUeRh9ajTeOfQOMqsy0d+3v/j3wdJ9f/pzNLr+2fJLbZc/AadnAuoi6ZeBTdDpgSM3snhxxsR6Y1kI31iSup5NvVr8S9syr+8RtmK/+OKT2W67FlzC3dAs6Br5/11zqNPosD08hW/gzcTquywEej1fz0RkW7jcJosrri1Gr329xJepksvtfgf6oby+HNOCp8Funx1e93kdFfUVGH5iON4/+j4qGyrR37c/vO55Yf2N9eLfg85q/tmJ0Ftysb3rIyD/vvRLwCbVNGixLjgJrywJED9JZ12vkPgC6ZcAUefJvt7u8U67uR/SPF2wf76f+DKU2U5XT6RAU6+VfgXYpPIaDRaeuCd+PGVds8spxdIvASIis+Jymyxud+xu8SWq9HL7dMppXM29+syvzQmbg7iSOMSXxOO3i7/h3cPvIqMyA/0O9MOy6GVIKE3AveJ7+C7oO/HviSVzOzvJ/EvtNS8C945Ij36XkF1Wg4le0eIn6axr9cO+G9KjT9R5/OYbfvxb9u+o9vwC1zZ4YseMUPHlKLPODjpHoyirSnryu4SYtFI+j5t1er8cviM9+kREZsXlNlnchPMTxBeoksttn3gfJJQmYODBgW1+3u7Y3VgVswpDjw5FeX053j70Nr7x/wbZ1dni3xNL53HqS/Mttg9NBGrLpMe+yzl9Owd9XIPFT9ZZ1+jFxX4oqebz86kL0OuAVf9r0vFQv+5V5HouwEmHU+LLUmYduc8Kx3W/NOi0fGRBZ6rT6LDCPwEvLZY/vrKu0StLAqCub5QefSIis+FymywqX50vvjiVWm739umN0ymncavwVruL7cGHByO9Mh19D/TF5IDJiC+Jh90+O/Tx6QMA6O3TW/z7YulOHv28Y0vtVf8H3D8mPPFdW0WtBvOO3BE/YWddI/eIVOmRJ7K8pACz/MVv/Y7huL91Azym800oWcsdX3UD5QU10hPfpd3PqcCHfONu1kkdv5ktPfJERGbD5TZZlPc9b/GlaWctt5dcWYKAtICmxXZUbhQisiIw6PAg9Pftj/6+/dHvQL8Wv+a+uH1wu+YGu312+Oj4R8hT58Funx1Ux1QoqCkQ/550Rr329UK47wjTLtx9xgDVhdLjTn+4lFyMN5aFiJ+0M9vuvbXh0qNOZHnHvzPvY7tW/A9KPH9E8PKD4stUppBmhOHa2YfQ8416FaG+UQenM7Hix1hm+03yjpYedyIis+Fymyzq87Ofiy9NDe23yN9QXl+OOm0d6rX1KK8vx68Rvxr8ca97Xk2L6LcPvd3i9yOtMq3Zv3fI0SFIq0xDn/19mn5tx50dCM8KR1RuFOaEzRH/3nRWffb3wa3dQ4y4SP87cGtf5w41GaSgsg4jtlwSP3Fntt297ArpUSeyHE0tsPw/zbvcfqrGLW8jxX059s0LkF+wMpH2/H4ZuSnl0pNOLQhLLEQvlyDx4yyz7crUDdKjTkRkFlxuk8VkVmaKL0uZ9fWW71tI8BzY/oX5xp5ASYr0mFMb6jVazPS9KX7izmy3NYGJ0mNOZDlxJy222H6m5X9FpdfXuLJ2F7ZP55tQdpXOb7uLOrVGesqpDYWVdRjnflX8WMtst4PXMqXHnIjILLjcJotxv+suvihl1tm7h95B1tZerV+Iew8FakqkR5wM5HkxFS/yTZKYBRq6LkJ6vIks58g3nbPcfirdejtkey3GkUWnxZevzHLdDcuSnm4ywqqARPHjLbPNpu6JkR5vIiKz4HKbLGbEyRHiS1JmvamODkXJun80v/g+8jWg5Y/QWZvwpCK8tpQ/XsvMX2qRWnq8iczPwo8kaTeXP6HW/RPc2bwVnjNDxJexzDx5/hyBzDjeHGCNTt/OwUu8UYCZuX86+KOqjj/BQUTWj8ttsoiU8hTx5Siz/saeGAH1yr8/udgOWy492tQBDwqqMGBFqPiJPLOttoXz8URkg2JPyC22n0u/+iUUes3GeZfj4stZZnq75l9CcXa19GRTB1xOLkZPp0Dx4y6zrc7cyZUebSKiDuNymyzC856n+GKU2UaTT4+Fxu1vQOxx6bEmMyiqqsOIzXyjSWa+Rm+9LD3WROYn8EgSQ9JsG4KkHauxZ26g+LKWGd4BpyhUldZJTzWZwYOCKvRbfkH82Mtsp5m+t6THmoiow7jcJov42v9r8aUos53i8qKlR5rMqLZBiym7Y8RP5pntVFjJpQ3ZEOlHkhiS299Q7vUtIlbtE1/csrY7seYmGmobpaeazCivog4frI8QP/Yy26i7Y6D0SBMRdRiX22R2ZXVl4stQZhv12d8H1/KuSY80WYBOp8dvx++Kn9Az22jPlXTpkSYyn4Rz8strI9Jt7IMMT0cc+v28+CKXPdupDbeg1eikJ5osoLymAcM2Rooff5ltFJpQKD3SREQdwuU2md2Z1DPiS1Fm/fX26Y3LOXzcgK1zPRcvfkLPrL9J3vzpDrIhZ+eIL6xNyvXPqPH4HDc2usN9xgXxxW5Xj4tt28cFNzNX9qfuS48zEVGHcLlNZjc/Yr74YpRZd719eiM8K1x6lKmTLDpxT/yknll3L9v7o75RKz3KROax/hX5RXUH06/9J/K95uG000nxJW9X7Mym21xsdxFccDNz9PbKUOlRJiLqEC63yay0Oi36Hegnvhxl1tvrPq9zsd3F6PV6zD54S/zEnll3YYn8kVqyAYXx4otpc1e/Q4W47eux6+cg8aVvV+jMptvQarnY7kq44GbmKK1YLT3KREQm43KbzOp6/nXx5Siz7oLSg6THmARodXr86HND/MSeWW9Lz8ZJjzFRx13ZLL6Mtlgr/welXtNwwW2/+ALYVju1/pb0BJOQ8hoNhqwNFz8WM+vNJypDeoyJiEzG5TaZ1drra8WXo8x684n3kR5hEvbt3uviJ/fMOvtgfYT0+BJ13N5R8kvoTki7+S089HDFgQV+4gthW8nH4Srq1BrpCSZBWaU1eG1pkPjx2NK5+SUgKb8KdRodyms0OHErGz2dAps+/v66CEQmF6Gwqh55FXXwiUrHvxwCTP56C47dRXJBNVIKq7H0bFzTr9s5ByG9pOaZz7Xmvt93XXqEiYhMxuU2mdWoU6PEF6TMOltyeYn0+JICqOsb8cH6CPETfGad5ZTXSo8wkek0NYDLv4kvnju1Zf+Oaq+JiF7vhe0zQsUXxNaa19yLKC+skZ5gUoCo1GK8tFj+eGzJFhy7izHbrqC3azA+3HARKUXVWOGf0PTxBwVVWO736A3L7ZyDcD29FBtCHpj09V6290d1fSP6LguBnXMQquoam/4CYdOFZKwOTBT/fpir7o6BaOQjjYjISnG5TWZTXFssviBl1tnUwKnQ6vhmcPRIRokaPWzkLhjWuR28lik9vkSmS/STXzYLpl/3KnI9FuCE/RnxZbE1tWNGGHIelElPLynI4ZhM8eNxZ/TSYj98tDESqUVqfOkV3fRrWp0eE//4526L/OAd+RDHbmab9PX6Lb+AqrrGps/JKa/F0HUR6OUSjPSSGnR3tK3z1eiHpdLjS0RkEi63yWzOPTwnviRl1tfIkyNR3VAtPb6kMGGJheIn+Mz6mr7/pvToEpkuYKH4glkp1bmPxN0tm+A5O0R8eaz0Eq7mSk8uKZDLuTjxY7KlA4AGrQ4Lj9975tc9L6aiRN0Ah1P38fHmSKQUVmPE5ksmfb2XFvuhvEaDQavD0M/tAipqNejuGIhtYSlwe+pucVtpbVCS5NgSEZmMy20ym6VXl4ovSpl19c6hd5BTnSM9uqRQW0KTxU/ymXX12lK+IS1ZMY93xZfKSku/qhuKvWciwOWw+BJZiV08xEUUtW6Sd7T4cdmSvfjHndZZZbWYfuBm06+P94hCXG4lTt7KQU2DFoGx+Qb9RGBrX2+azw3cy65AbE4FZh+8hd6uwUgrVuNVxwA4nLqPuNxK3M4qb7rb25r7bMcV6bElIjIJl9tkNnzeNjO224W3pceWFEyv1+PbPTHiJ/rMuorLrZQeXSLjNVQDLn8SXyYrOc3Wd5G8ww175waIL5WV0BG3GGj5fFxqQ5m6AW8uDxE/Lls694hUnL+Xh26L/NDbNRhVdY0YvCYc3Rb54XWXYFxKLkZAbL5JX6+lPC6mwuVcHPq7XUBZjQa9nIPwmftVZJXWiH8vOtrL9v6o1/BRkURkfbjcJrPg87aZsXnf85YeW7ICVXUa9HO7IH6yz6ynvVfTpceWyHhJ/uLLY6tp+X+i0utrXF67W3zBLJX33ItQl9dLTy1ZgVsZZXjZ3l/82GzJ9kdn4Pgfz9Qe53EV6gbtMx//5fAdoxbPT3+953tjWQgeFqvxypIAjPO4iticCnRb5Id/2PsDgE18r6MelghPLRGR8bjcJrMITA8UX5Yy62lywGTo9XrpsSUrEf2wRPxEn1lPsw7ekh5ZIuMFLpZfGlthug2vI8vLHocXnRNfOHdmWQl80zcynHfkQ/Fjs7l6abEfguLy8aVXNN5cHoLpB26ipkGLqX/8pJ+dcxDKazRY7hePbov80MMpEKEJhdgfndH0NRYcu4uzd3MN+nrP533pIZzOxKLbIj+8syoMOeW16LbIDwNXhiK/sk78+2OOtoYlS48sEZHRuNwms1gWvUx8Ycqso7cPvo3i2mLpkSUrs/RsnPjJPrOOersGS48rkfE8B4sviq06l39DjccY3Nq0HZ4zL4gvny3ZtbMPpaeVrND3e6+LH5/N1ZEbWcgqrUF9ow4phdWYd+TOMx8fs+0KYtJKUVzdgJzyWuy6nIZXlgQ0fXxbWMozi+j2vt7j+i2/gNQiNf7p8OTu7I0hDxASX4BLycWY5nND/Htjjr7ZdU16XImIjMblNpnFmNNjxJemzDq6lH1JelzJCtVrtE3PT2SsvTJLa6RHlshwfN62WdOveQkFnnNwzumY+CLa3B1fdUN6WslKVdU1ot9yPuaNtV9Pp0DpcSUiMhqX29RhFfUV4gtTZh0tj14uPa5kxe5nV+DFxfIn/Uz5Hb+ZLT2uRIZLuSC+ELbVGra/j8Tta7B7brD4YtocleRUS08rWbHTt3PEj8/MOorNqZAeVyIio3C5TR0WnhUuvjRlym/UqVGo1/LNj6hj1gUniZ/wM+W38MQ96VElMlzkWvElsM234r9R5vUdIlb6iC+oTS3y0APpSSUb8Ln7VfFjNFN+e66kS48qEZFRuNymDtt6e6v44pQpv+i8aOlRJRtQ36jDwJWh4if9TNl9sD5CelSJDHd4kvzytwul3dQX6R7OOPi7n/jC2tB2zb+EhrpG6UklG5BaWI2X+FNwrJ3mHLotPapEREbhcps6bMaFGeKLU6bsZofOlh5TsiEBsfniJ/1M+dU2aKVHlcgwG7qLL3y7ZK5/QbXneMRs9IT7DGW/CWViVJ70lJINWXY+XvwYzZTd0HUR0mNKRGQULrepwwYeHCi+PGXKrY9PH+Sr86XHlGzMFx5R4if+TNlFPyyVHlOi9tWUyC95GfRrX0Ge53ycXHJafJH9fEdXXJeeUrIx1fWN6OMaLH6cZsqONwkQkTXhcps6JF+dL748Zcpu482N0mNKNii5oIo/VsvabOelNOkxJWrfgyDxxS57tvodwxC7bQO8fw4RX2xvnx6Goswq6SklG3Q4Jkv8OM2UXUwabxIgIuvB5TZ1SGhmqPjylCm3QYcHobaxVnpMyUa5nIsTP/Fnym3ukTvSI0rUvohV4stc1kor/xelXj8hxM1XbLEd6HVfekLJRml1egxaEyZ+rGbKbddl3iRARNaDy23qkC23t4gvUJlyO5t6VnpEyYZV1mrQwylQ/OSfKbOPNkZKjyhR+w5OkF/isnZr3DIAKR5u8Jnv32mL7R0zwlBZwhsEyHL87+eJH6uZcpvHmwSIyIpwuU0dMv3CdPEFKlNmo06Ngl6vlx5RsnErAxLFT/6ZMntxMZ8XSVZgQw/xxS0zomX/gSrPSbi6zhvbp4dadLkdfiBRejqpC/h4U6T48Zopsw83XJQeTyIig3G5TR3CN5NkrXUi+YT0eFIXUFJdj386+ItfADBldiujTHpEiVqnqZFf1jKT0214DTleC3Fs8RmzL7Y9ZkegprJBekKpC7iUXCx+rGbKjDcJEJE14XKbTFZQUyC+QGXKbMjRIdLjSV3I4pP3xS8AmDLzicqQHk+i1mVGiS9omRly+RNq3UfhzubNcJ8ebJbl9tUTKdLTSV3IRK9o8eM1U2b3siukx5OIyCBcbpPJruVdE1+iMmXmfc9bejypC8kuq8GLi+UvAJjycjjFN2MjBbuxS34xy8yaflU3FHnNgr/rUdOX2zPCoK6ol55O6kIuPigSP14zZXbyVo70eBIRGYTLbTLZsQfHxJeoTHm9eeBNqDVq6fGkLmb2wVviFwBMeU3yjpYeTaLW+c0XX8Yyy6XZ9h4e7FiJPXMDjFpu++24Jz2Z1AV9sP6i+DGbKa81gXz2PxFZBy63yWTrb6wXX6Qy5bX6+mrp0aQuKDanQvwCgCmvt1aESo8mUet2DxdfwLJOyO2/UOE5GZGr9xi03M6ILZGeTOqCDl7LFD9mM+X10/6b0qNJRGQQLrfJZHPD54ovUpmy6rWvFwprCqVHk7qoT7dfEb8IYMqrvpFvhkQK5fZf8otX1qnpNvZGpqcjDi083+Jie9/iK9Dr9dKTSV1QfaMWr7sEix+zmbL6YH2E9GgSERmEy20y2ednPxdfpjJlNSdsjvRYUhd29EaW+EUAU15xuZXSo0nUXHWB+KKVyVbj8SlubdyCHTPDm5bbN/zTpSeTurC1QUnix2ymrF5a7Aetjn/hRkTKx+U2meyN/W+IL1OZsgrN5CMASE59oxZ2S4PELwSYsjp7N1d6NImay4wSX64yZaRf+w/ke/6Ccy4nUVPZID2Z1IUVVdXjZXt/8eM2U1YpRdXSo0lE1C4ut8kkRbVF4otUpqzePvg2NDqN9GhSF7f0bJz4RQBTVptDk6XHkqi5O77iS1WmsA58Lj2VRJjmc0P8uM2UVVBcvvRYEhG1i8ttMsnNgpviy1SmrNyuuUmPJREeFlWLXwQwZfXL4dvSY0nUXNhy+WUqU1Z3fKWnkghn7+aKH7eZsvKKfCg9lkRE7eJym0xyOuW0+DKVKavY4ljpsSQCAIz3iBK/EGDK6ZNtl6VHkqi549/LL1OZcnL9C1BfJT2VRKjTaPHKkgDxYzdTTk5n4qTHkoioXVxuk0mK3Hcg6f0hiJ34GaJnf43zTlPgtfZrLNoxFp/sGiS+aGWd2+hTo6VHkqjJwWuZ4hcCTDm9uTxEeiSJmvMeKr9QZcrp0ETpiSRqMuvgLfFjN1NO3++7Lj2SRETt4nKbTJK3dCkSXu3eaomv90bC8I9wd8oXuPjrNzixbAo2bfoSszxHYvDu/uLLWGbedsXukh5Joial6gbxCwGmrBq1OumxJHrW6m7yC1WmnO4flZ5IoiaBcfnix22mnIZvipQeSSKidnG5TSbJmjmzzeV2eyW9NQDxn47CjWkTEbJwCg6snAy3LePxjfeH6Lent/iylhlXRmWG9EgSPWP01sviFwNMOWWU1EiPJNETdRXyy1SmnJb/FWhQS08lUZOGRh16OgWKH7uZMrJzDpIeSSKidnG5TSZJGzeuQ8vtNuvRs+mRJ1Gzv3r0yJN1X2Pxdj7yRIl9eOxD6XEkamZLaLL4xQBTTlEPS6RHkuiJwgT5hSpTTr7jpCeSqJk5h26LH7uZcqqub5QeSSKiNnG5TSZJHjzYcsvtdnr6kSeRv05ueuTJbM+ReG8PH3nS2TlfdZYeR6Jm4nIrxS8EmHI6eStHeiSJnkgNk1+oMuUUtV16Ioma8eX7l7CnSsjjG94SkbJxuU1G0+v1Yottwx95MhI3pk3EhaceeTLZW8VHnlig4Ixg6ZEkalF/twviFwNMGW0LT5EeR6In7h6SX6gy5VQQJz2RRM08LFaLH7uZcrqQUCA9kkREbeJym4zWWFQkvsA2ue49kDjkPcROGIuo2V/Bz/HJI08+3fkeeu2VXxZbW1UN/Jt8UiaHU/fFLwaYMnI4dV96HImeuLxRfqHKlNHal6WnkahV/ZbzJgH2KN9rmdLjSETUJi63yWh18fHyS2oLlfh6byQMU+Hu5PGI/HUyTrpOweYcOFlIAAAgAElEQVSNjx55MmTvW+KLZKX1pd+X0uNI1KqTt3LELwaYMvpu73XpcSR6IuB3+aUqU0YnfpCeRqJW/XKYz91mj9oWxp+AIyJl43KbjFYdESG+hJaq2SNPVnTtR55sub1FehyJWpVSWC1+McCU0SfbLkuPI9ETR6fIL1WZMrp9QHoaiVp1OCZL/PjNlJHruXjpcSQiahOX22S08qNHxZfMiuzpR57M+uORJ2u/gv32sRizc7BNPvIkKjdKehyJ2vTKkgDxCwIm3+A14dKjSPTE7mHyS1WmjEp4NyQpV3pJjfjxmymjuUfuSI8jEVGbuNwmoxVv3y6/SLbCEnu9/uSRJ/O+eeaRJ+/vsc5HnhTWFEqPI1GbJnlHi18QMPl6OQdJjyLRE1v6yC9VmXxuf5OeRKJ2dXcMFD+GM/km74qRHkUiojZxuU1Gy1u6VHxRbIsl9n8L8WMeP/JkctMjT6Z4qdBvr/IeedLft7/0KBK1a3VgovgFAVNGOp1eehyJHlndTX6xyuTbPUx6EonaNd4jSvz4zeQbtZWPdyMiZeNym4yWNXOm+CK4y9W9BxLfG4zYLz5F9Kyv4e84Bd5rv4b9jrEYu+s9kUeeTA6YLD2KRO0KjMsXvyBgyqhE3SA9jkSPSC9VmTLy/116Eona5XQmTvz4zeR7e1Wo9CgSEbWJy20yWtr4L+SXvaxZicM+xJ1vxuHS3G9w0mUKtqz/EnPcR2LongEWWW67RrlKjyJRu7LKasUvCJgySi1SS48jEVBfKb9UZcqIbyZJVoBvKsm6LfLDq44B0qNIRNQmLrfJaKkffyy+yGVGLr7/eOTJzT8eeeK7YjJWbv7ij0ee9DFpue2b4Cs9ikTt0uv1eNneX/yigMl3I71MehyJgPJM+aUqU0b596Wnkahd97IrxI/fTBkRESkZl9tktOT3h4ova5kZe+aRJ1/B33EKdq79Gvbb237kybW8a9KjSGSQQWvCxS8ImHwh8QXSo0j0aKEpvVRlykjXKD2NRO1qaNSJH7+ZMiqr0UiPIxFRq7jcJqM9ePsd+YUs69SePPLka5xymYot679EaV2p9CgSGeSrndfELwiYfKdu50iPIhGQfkl+qcrkW/uy9CQSGWzAilDxYziTL6e8VnoUiYhaxeU2GS3xjb7iy1YmXM/XpMeQyGCLT94XvyBg8h2KyZQeRSIg8bz8YpXJ5/W+9CQSGeyTbZfFj+FMvuSCaulRJCJqFZfbZLSE7j3kl6tMtOT3h0qPIZHB3CNSxS8ImHx7rqRLjyIRcO+I/GKVyXd0svQkEhlsms8N8WM4k+9udrn0KBIRtYrLbTJOY6P4YpXJl/7FBOlJJDKY37088QsCJp97RKr0KBIBt3zkF6tMviB76UkkMpjDKf4EHPPD1dQS6VEkImoVl9tkFJ1aLb5YZfJlz/5ZehSJDBaTVip+QcDk2xjyQHoUiYDr3vKLVSbfNQ/pSSQy2ObQZPFjOJMvNKFQehSJiFrF5TYZRVtSIr5YZfLlu7hKjyKRweLzKsUvCJh8KwMSpUeRCIjaJr9YZfLdPyY9iUQGOxSTKX4MZ/KdvZsrPYpERK3icpuMosnNFV+sMvmKt22XHkUig2WV1ohfEDD5nM/GSY8iEXBpvfxilcmXFCA9iUQGu5BQIH4MZ/Idv5ktPYpERK3icpuM0vDwofhilclXsnOn9Cgqjkajwblz5zBnzhyMHz8ew4cPx7hx4zBv3jzs2bMHGRkZTZ8bGxsLlUoFlUqFxYsXt/j1Jk6ciPnz5wMAtmzZApVKhZs3b7b679fr9fjqq68wadIk6HQ68/7hrFxZjUb8goDJt+jkPelRJALCV8ovVpl8aRelJ9HiZs6c2XSu87igoKCmjxt7LvT871GpVBg+fDg+/fRTTJ8+HVu2bEFSUlKLX+f539dSj//bHn+uj4+PGb8b1u1ScrH4MZzJd+RGlvQoEhG1isttMkpdfLz4YpXJV3bAV3oUFUWtVuPHH3+ESqXCrFmz4O7ujr1792LdunWYOnUqVCoVfv/996bPf3zhNHHiRKhUKty9e7fZ13z6gi4hIQEqlQpr1qxp9b/h3r17UKlU2LVrl/n/gDZA+oKAyffr0TvSY0gEXHCWX6wy+XJa/8tqW3H79m0EBQVBpVJh7ty5iIyMREFBQdPHjT0Xevr3LFiwAL6+vti/fz927NiB3377DcOGDYNKpYKnp2ezv+R//Pvmzp2LnTt3ttiDBw+e+Vwut5+Ifsj3LmF+OBzD5TYRKReX22SU2lu3xRerTL7y48elR1FRdu7cCZVKhQMHDrT48fj4eOzZs6fpnx9fOB05cgSffvopfv65+Rt0Pn9BN3XqVIwePRp1dXUt/js2btwIlUqFzMzMDv5pbNMrSwLELwqYbPOOcLlNChC4WH6xyuQravkOY1tTUVEBlUqF5cuXN/uYKedCbS2eCwsLsWDBghb/ot+YhTWX283dyigTP4Yz+Q7F8BqDiJSLy20ySk10tPhilclXed5PehQVZfHixVCpVCgqKjLo8x9fOPn7++PgwYNQqVS4fPnyM5/z/AWdr68vVCoVwsLCmn09jUaDsWPHYtasWR37g9iwPq7B4hcFTDbeuU2KELhIfrHK5CvvGksiQ5bbxpwLtbd41mg0+PHHH/HRRx8hKyvL4N/X0n8Xl9tP3M+pED+GM/l8r3WN/28RkXXicpuMUn3xovhilclXFRoqPYqK8viZ2OfOnTPo85++oKurq8OECRPw/fffP/NjtM9f0BUUFEClUsHBwaHZ17t8+TJUKhVOnz7d8T+MjerlwuV2V2/+0eY/8k7U6YIc5BerTL7qgvZnxQYYutw29FzIkMVzeHg4VCoVdu/ebdTvM+Vzu4rE/CrxYziT70B0RvvDQkQkhMttMor60iXxxSqTryooWHoUFSU3NxdjxoyBSqXCnDlzsGvXLoSFhSEtLa3FN3d8+oIOAM6dOweVSoXAwMCmz3n+gg4A5s+fj2HDhqG8vPyZX3dxccHw4cNRUVFhgT+dbejuGCh+UcBkW3CMy21SAC63mfMLQEXXeHatocttwLBzIUMWzyUlJVCpVFiyZEmz38c3lDRNapFa/BjO5POJ4nKbiJSLy20ySs21GPHFKpOv8tx56VFUnPz8fKxZswZjx4595mJp3Lhx8PLyeuZZ2c9f0Gm1WkyZMgWTJk1CQ0MDgJaX24GBgc3u0Far1RgxYgScnJw64U9pvf5h7y9+UcBk+43LbVKCYEf5xSqTr/Sh9CR2CmOW24acCxmyeNZoNFCpVM88w5tvKNkxyQXV4sdwJp9PVLr0KBIRtYrLbTJK7e074otVJl/5iZPSo6hYOp0OOTk5uHz5Mnbv3o3vvvsOKpUK8+fPh16vB9D8gg548mO0x44dA9DyclutVmPkyJGYPXt206/5+/tDpVIhMjKyE/501kv6goDJx+U2KUKIk/xilclXlCg9iZ3CmOU20P65kCGL57KyMqhUKjg6Ohr1+0z53K7ibna5+DGcybefjyUhIgXjcpuMUhcfL75YZfKVHTosPYpWQ6vV4ueff4ZKpWp6c6OWLuj0ej1mzJiBzz77DGq1usXlNgC4ublBpVIhJycHALBgwQKMHTsWGo2mc/5AVqhBqxO/IGDy/X78nvQoEgEXnOUXq0y+/K7x/yNjl9vtnQsZsniOjIyESqXC/v37jfp9pnxuV3E1tUT8GM7kO3KjazxOiYisE5fbZJT6lBTxxSqTr5Qn/M9ob7G8YcMGqFQqJCQkAGj5gg4Abty4AZVKhT179rS63I6JiYFKpcK+fftQVFSEjz76CJs2bTLfH8YG1TRoxS8ImHwLT3SNZRIp3AUX+cUqky/npvQkdgpjl9tA2+dC7S2etVotZs2ahWHDhiE/P9/g39fSfxeX208ExxeIH8OZfGfu5EiPIhFRq7jcJqNosrLEF6tMvhJvb+lRVJQFCxYgICCgxSV3Xl4exo8fj3HjxjV9vLULusdfa/To0RgzZkyLy22dTocvvvgCkydPxuHDh6FSqRAXF2f+P5QNKaquF78gYPItPcvXCSlA+Er5xSqTL/2S9CR2ClOW20Dr50JtLZ5LSkpgb2/f7K7t9n5fa/9dXG4/cfp2jvgxnMkXGJvf/rAQEQnhcpuM0lhYKL5YZfIVrFotPYqKMm3aNKhUKowdOxYuLi7YtWsXdu3aBRcXF4wYMQIjRoxAdHR00+e3dUGXmJjY9GaULS23AcDDw6Pp3zdlyhSL/blsRVxupfgFAZNvVUDXeMYtKdzljfKLVSbf/WPSk2hxt2/fRlBQUNMbOUZGRqKgoKDp46acCz3+PQsWLICvry/2798Pd3d32NvbY8SIEVCpVNi5cyd0Ot0zX8+UN5Rs63O1Wq2FvmvK5HstU/wYzuQLTyyUHkUiolZxuU1G0ZaXiy9WmXw5CxZIj6KilJWV4fTp0/j999/xxRdfYPjw4RgxYgS++eYbbN26FcXFxc98flsXdADg4uLS5nI7NTW16aLv+buTqLmwxELxCwIm35bQZOlRJAJiPOUXq0y+qO3Sk2hxM2fObDpXeVxQUFDTx005F3r8ex43bNgwjBkzBj/88AM2btzYtKB+3vO/r6Ue/7cZ8rkNDQ1m/E4pn8fFVPFjOJPvamqJ9CgSEbWKy20yir6mRnyxyuTLmDJVehSJDHYohnccMT94X3ooPYpEwO398otVJl+Ik/QkEhnM6Uys+DGcyXczo0x6FImIWsXlNhmnsVF8scrkSx05SnoSiQy2OTRZ/IKAyXfwWqb0KBIBsSfkF6tMvlM/SU8ikcG+3RMjfgxn8sXmVEiPIhFRq7jcJqNJL1aZfElvDZAeQyKD2Z+6L35BwOQ7fTtHehSJgAeB8otVJt/+sdKTSGSwDzdcFD+GM/lSi9TSo0hE1Cout8loib37iC9XmXw6NU9wyDp8v++6+AUBky8oLl96FImA9Evyi1Um37Z+0pNIZLB/OQSIH8OZfEXV9dKjSETUKi63yWhJbw0QX6wy+Wrv3JEeRSKDvLc2XPyCgMl3Kbm4/WEhsrScm/KLVaaMiKxAUXW9+PGbKSO9Xi89jkREreJym4yWPOR98cUqk6/8xAnpUSRql0arE78YYMrobna59DgSASUp8ktVpoyKkqSnkahdd7LKxY/fTL4eToHSo0hE1CYut8loaZ99Lr5YZfIVrF4jPYpE7eJFGXtcVlmt9DgSATWl8ktVpoziz0hPI1G7Dl7LFD9+M/kGrgyVHkUiojZxuU1Gy/rxJ/HFKpMvc9qP0qNI1K4j17PELwiYMqpp0EqPIxGg1wEuf5JfrDL5Lq6Wnkaidi06eU/8+M3kG74pUnoUiYjaxOU2GS3PYYn4YpXJlzxosPQoErXL+Wyc+AUBk+8f9v7So0j0xOpu8otVJt/x76QnkahdI7dcEj+GM/kmekVLjyIRUZu43CajFW3cKL5YZcqoMT9fehyJ2vSlV7T4BQGTjz9OS4qy9Q35xSqTb3t/6UkkapNGq8OLi+WP4Uy+n/bflB5HIqI2cblNRivdf8DiS9PU4R9DffkKGguL0JifjzJfXyTa9Wr7971mh/IjR1Hm62v018tdbI/6lBQ0pKYif/nypl9PerMfGjIykNS3r/giWYlVBvLNRUjZ7JyDxC8ImHyjt16WHkWiJ3Z+IL9YZcqoplR6GoladS+7Qvz4zZSR/an70uNIRNQmLrfJaJWBgRZfmtYnJ6Ng1eqmBXPNzZso2rK11c/PmjkTmpxc6GtrW1xut/n1er4GnVqNB2+/g6Q3+0FXXY2kvm8i4dXuKN62HYXrN4gvkZVawcpV0uNI1KrYHF6UsUdN3hUjPY5ET/iOl1+qMmWUxEcmkXL5RGWIH7+ZMtp0IVl6HImI2sTlNhmt5uZNyy5Ne/QEtFpkTJ7S9Gslu/eg4uSpdn9vye49zZfb7Xy9B+8Ogq66uuljmtxcpH78MZL6v4WGjAwk9nlDfIms1NInTJQeR6JWeUc+FL8YYMpo7pE70uNI9MTpmfJLVaaMQpykp5GoVT8fui1+/GbK6HBMlvQ4EhG1icttMpomM9PiS9OSnbugLS1FvrMzHo75FA2pqXj46VjTltvtfb0ePaEtL0fKBx8iedBg6CoqkNjnDRS7e6BwzRrxBbLSI1Kqb/deF78YYMrIzT9BehyJnghdJr9UZcpo54fS00jUIr1eD7ulfLQbe1R4UpH0SBIRtYnLbTKaTl1j8YVpxldfoy4+HhVnzkBfU4Oq4GAkvtH+c69bW2639/WyZs5CXWws6uLikDPvVzwYMBAN6elI7N0H+c7OqIuPR+3du8iYMsVsf0ZbSX2Jz7Il5dHr9ejuGCh+McCU0d6r6dIjSfTEjd3yS1WmjFz/DDTWSU8kUTN83jZ7uoS8KumRJCJqE5fbZJKE1+wstix9MGAgdNXVSFF9hIRXuyPprQFQX7mCqqBgk5bbpny9kp07UbBiBZIHD4a2vBxJ/foj/csvocnOFl8mK638Zculx5GomdtZ5eIXAkw5BccXSI8k0RPJIfJLVaac0i5KTyRRM9vCU8SP3Uw5ldVopEeSiKhNXG6TSR4vii1R+qSvmt0dnvPbbwYtlltabhv79R4MfBsNaelI7PU60id9hbq4uEcfe80OAJDQ8zXxhbKSSh40WHYYiVqwnRdl7KniciulR5LoiYI4+YUqU07+v0lPJFEzEzyjxI/dTBm9bM83viUi5eNym0ySPmmSxZalSW/2g7a8HAWrViPh1e5IfKMvqsMjUHboUNPn5C62R6Wfn0HLbUO+3tOV7tmDfNdlSHi1O1KGfgBNbu6jJe6Q99FYUCC+TFZi9cl8B21Slk+2XRa/GGDKqZx3HJGS1JXLL1SZclr3L+mJJHpGTUMjXlosf+xmymjQmnDpkSQiaheX22SS7Dm/WHRZmjb+C9TcuAFtSQk0ubko3bcPia/3bvp4sbvHM4vmnF/nQ1teDn1dHfT19dCWlyP7l18M/nqPe/DuIDSkpSHBrlfTrxVt3YbqsDCor1xB1sxZ4otkJVbi7S09kkRNcstrxS8EmHJ6ZUmA9EgSNef2X/JL1Q7U6PQCNn7dC1u/sWv2seyFf8Wi8f0wYcR7+HLkYGz9xg4apz+Z/PWCZryE7z95B99/8i5O//ivpl9XL/kzpowehJol/yb+/ehwOTelJ5KoSWBsvvixmymniV7R0iNJRNQuLrfJJAUrV4kvVJlySvt8nPRIEjXhcyLZ06k28nm2pEDb3pRfqJrY1Z//F1+NHIRRw4a2uIz+4ZN3cHzav5oW0PM+H4D933U36etpl76AT4a9j3KHv0C95M8YM/x9qP9YZvt81wOHf3hV/PthlkJdpSeSqMmPPjfEj91MOS08cU96JImI2sXlNpmk7PAR8YUqU1b1Dx9KjyURAGD4pkjxCwGmnKbuiZEeSaLmDoyTX6h2MM8przVbRuuWvoBhqg9xd97/PPN5a7/qbdLXK7X/C8YMf7/pn78aNRhZv/8VVQ6P7tquc7SBu7adXwC29ZOeSCIAQGWtBv+w9xc/djPl5HExVXosiYjaxeU2maQm5rr4MpUpq4JVq6XHkggpRdXiFwFMWTmejpUeS6LmAhbKL1QtsNyG8wvwmtIT4z4egnM//QOpC/4L33/yLlJ/+5vJy/LPPn4f+Yv+ipLFf8HY4UNQ5/hv2PNtDxyb9or498CsFcRJTyUR9kdniB+3mbIKjM2XHksionZxuU0m0ZaUiC9TmbJ6MPBt6HU66dGkLm5DyAPxiwCmrHZfSZMeS6LmrnvLL1MttNy+P+/vmD5mIFZP6oPRw4bCZWJf1Bpwh3VrX+/qz/+HWWMHYsanAxEx60VUOvwZU0cPQp3jn3Dup39g+piB+HnsQNyZ+z8d/jOJdu4X6akkwmfuV8WP20xZJeZXSY8lEVG7uNwmkyW+0Vd8ocqUVXUY302b5Oh0egxYESp+EcCU1cUHRdKjSdTcw3D5ZaoFltuVDo+ei5278K+A8wuoWvIXLBzXDy4T3jB5uf183lN74uS0f6LE/t/x2fAhqF7yZ8T9+t/4ZtQg8e9Jh3L7G9Cglp5M6sKySmvEj9lMedU3aqVHk4ioXVxuk8nSJ00SX6Yy5RQzazWu7uK7aZMc//t54hcATHlll9VKjyZRcxVZ8stUCyy3Y3/9O0YPe/+ZXwud+ZJBi2dDltvl9n/G1NHvosHpT4j99e+Y8elAwPkFNDq9AJVKBe1S+e9Lh7qxS3oyqQtbF5QkfsxmymrAilDpsSQiMgiX22SyPAcH8YUqky3ug1GIcDyCPb9fwvbpYdg+PQxVpXXSo0ld1DgP/igte7Z/OvhLjyVR65b9h/wy1czLbfWSP+Ozj9/H8Wn/gn7p/4dax3/Dki/exJZvejV9TtCMl+D2ZR+TltseU17DmR//CTi/gIJF/4GvRg0GnF9A4aJ/x8QRg8W/Jx1ux0DpqaQuqr5Ri9ddgsWP20xZTfCMkh5NIiKDcLlNJivZtVt8uco6v/ger+HmTy444xqGHTPCmpbaj7tyIkV6NKkLis+tEL8AYMpr5JZL0qNJ1LodA+WXqSYUPutFfDZ8CEZ+NBQjPhqKz4YPQeTsbk0fT5z/35j32VsYP2IIvho1GO5T7FDv+Kemj+/5tsczi+j2vt7jSu3/gm9HvwuN05Nf2/9dDzhNeBMLx/XD1Z//T/x7Y5ayr0tPJnVBR65niR+zmfKyP3VfejSJiAzC5TaZrDo8QnzRyjqvuPc/RuSSg9i38FKzhfbTec29CK2GbyxJnWvekTviFwBMec05dFt6NIlad3Sy/CKVKa9DX0pPJnVBH6y/KH7MZspr39V06dEkIjIIl9tksoaMDPGFK7N8N793wFmXC20utJ8v7nKu9HhSF1JUVY+X7f3FLwCY8tocmiw9nkStu7hKfpHKlFlhvPR0UhdyOaVY/HjNlNm1tFLp8SQiMgiX29QhiXa9xJevzPzFDVLhksMB+CyKNGqp/bh9i69Ap+Xd29Q5VgYkip/8M2Xmfz9PejyJWpfoJ79EZcrsxA/S00ldyLd7r4sfr5kyq23QSo8nEZFBuNymDnk4+hPxRSwzX7e+XYjzriFwnxVu0lL76eKv8O5tsrwydQNeWRIgfvLPlFlasVp6RIlaV54hv0RlyszlT4/mg8jCEvOrxI/VTJkNWBEqPZ5ERAbjcps6JHvuXPGFLOtYce8MxWX7vThg3/aztHn3NimR89k48ZP/juYekdrsz3XxQVHTxwetCUd4UhGq6xvxsFiN34/fa/PrbQlNRlqxGvWNOmSV1jT7Hi04dhfJBdVIKazG0qc+ZucchPSSGvR0ChT/npgju6VBAhNJZCS3v8kvUpkyO/eL9HRSFzDBM0r8eM2U2dQ9MdLjSURkMC63qUOKNm8RX84y07r9zXz4uQbBfXbH79Ju9dnbkTnSI0o2rKiqDv90sP5nbbtHpOLkrRz0cg5qqrvjowXzvxwC8LBYjfXBD/DKkgB87n4V5TUafL+v9R8h9ryYiole0ei7LART98SgTqPDJO9odFvkh5ft/VFd34i+y0Jg5xyEqrpGvLY0CN0W+WHThWSsDrSdR7x86RUtPaJE7ds9XH6JypSZ61949zZZVERSkfixmim3VQGJ0iNKRGQwLrepQ6pCQsSXtMzw4gYMxpVFu+DrYNqztI1tz++XoeGz2shC7E/dFz/xN0fuEak4cj2rxY+N87iKyrpGvLj4ya/tiEhFYGy+wV8/Jq0Uy87Ho9siP/RbfgFVdY1NH8spr8XQdRHo5RKM9JKapqW6LbTCP0F6RIna5/+b/BKVKbdjU6UnlGyUXq/He2vDxY/VTLmdvs2blIjIenC5TR3SWFYmvrBl7Xd70i8IcA2Ex88RnbLUfrorJ1Kkx5RsUG55LV5aLH/ib47cI1JR06BFQWUd4nIrscI/oeljP+y7gfIazTOf/+vRO4jLrTToa7/qGICyGg2+2nkN3Rb54aXFfiiv0WDQ6jD0c7uAiloNujsGYltYCtye+vfaQufu8rn/ZAVu7ZNfoDJll3dHekrJBh2KyRQ/TjNll1JYLT2mREQG43KbOizlQ5X48pY1L77/O7i60BuHHM37LG1jc58ZjoqiWukxJRvz7Z4Y8ZN+c/Xe2nB8sD4C76wKww/7bqCoqh5OZ2LRbZEf+i4LQWWtBm7+CXhlSQD6uV2A77VMg5fbx25mIzL52R87nuZzA/eyKxCbU4HZB2+ht2sw0orVeNUxAA6n7iMutxK3s8rxpVe0+PemI2WU1EiPKVH78u/JL0+Zstulkp5SsjHqBi3eWBYifpxmyq2HU6D0mBIRGYXLbeqw3N9+F1/ksifdnTADgS7+8JzT+Xdpt9aZjbelx5RsSIARj+SwxtYGJeFqaknTP3/hGYWEvCrUN+qQWqRG1MMSBMcXtPt1dl5KQ1xuJeycg9r8PI+LqXA5F4f+bhdQVqNBL+cgfOZ+FVmlNeLfC1Pjm0mS1dDrgOX/Kb9AZcouyV96UsmGLLWBN+Nmlu2bXdekx5SIyChcblOHlR08KL7Q7erF9x2Aq7954LCT7F3abfUgJl96VMkGVNZq8OZy277baHt4Cvzu5bX68UvJxW0+b/xle38cu5mN6+ml7S6231gWgofFaryyJADjPK4iNqcC3Rb54R/2jxYpL9tb5xt2TvLmm0mSFdn3ifzylCm7rW9ITynZiLg/jvOMtdXGkAfSo0pEZBQut6nD6hISxJe7XbV7n3+HYJfz8FLQXdqttXN+JOqqNdLjSlZu4fF74if85s4nKgNfekXjzeUhmLI7BuU1Gvzoc6Pp4/2WX0Bv12B8uP4ifK9lIiGvCv9yCGj6+IJjd3H2bi66LXq02L6UXIwLCQXo4xqMHk6B6OEUiFcdA1r8d3tfetj0CJR3VoUhp7wW3Rb5YeDKUORX1ol/b0xtfTAvysiKhC6TX9YepZ8AACAASURBVJ4y5RfsKD2pZOUatTqoNlwUP0Yz5XfxQZH0uBIRGYXLbeowvU6HxNd7iy96u0rxfd5E9PxtOOoUKb6wNrYg71jpcSUrdj29VPxk3xLtvpKGrLJa1DfqkFashsNzd2UvOx8PrU6Pwqp6+ERl4HWX4Gc+vi0spWkR3cu55cdxpBapm/17+y2/gNQiNf7p8OTu7I0hDxASX4BLycWY9tSC3dq6lFzcydNJ1AHJwfKLU2YdZfKnUsh028JTxI/PzDqqrm+UHlciIqNwuU1mkTH1W/Glr613f+xkBLuchffci+JL6o6Ufo9LJzJerUaLwWvCxU/2mXVU06CVHlkiw9VXyi9NmXW08TWgQS09sWSFsstqnvnLbMZa68P1F6XHlYjIaFxuk1kUbd4ivvy1yXq9gWtzN+HYUuteaD/drgWXUFvVID2yZGV+t8HHkTDLNHrrZelxJTLe1r7yi1NmHZ2fJz2tZIXGeVwVPz4z62jh8XvS40pEZDQut8ksqiMj5RfBNlTs6IkIdT6FXb/azlL76c5uviM9smRFgmLzxU/0mfW07Hy89MgSGe/MbPmlKbOeUkKkJ5asyOrARPFjM7Oejt/Mlh5ZIiKjcblNZqGtrhZfCFt78b36IGbOOpxwts2F9vPFRuZIjy1ZgbyKWvR0ChQ/0WfWU2BcvvTYEhnv3hH5hSmznlb9L1CZKz21ZAWiUovFj8vMuiqurpceWyIio3G5TWaTOnKU+ILYGrv/8XiELj2BXfOt7w0iO5LH7AhUFNVKjy0pmE6nx5htl8VP8pl1VV7Dxx6RFaoukF+YMuvKawig45u+UeuKqurR2zVY/LjMrKcha8Olx5aIyCRcbpPZ5C1xFF8UW0vxr9khZvZqnHKJEF8yS3bI9Ro0fOM3asWmC8niJ/nMuvpwA98EiazYlj7yC1NmXQUulp5aUiidTo/P3fmcbWZcDqfuS48uEZFJuNwms6k4dVp8aaz07n84BmFOx7BnQde6S7utAjx4EkXNXUwqxIuL5U/ymXW19Gyc9OgSme7sHPllKbO+Ev2kJ5cUaIV/gvgxmVlf/vfzpEeXiMgkXG6T2TSWloovj5VYfE87XJ+xHKddw7F9hvwyWYld90uXHl9SkDtZ5XhlSYD4CT6zvsISC6XHl8h094/KL0qZ9bXiv4HiB9LTSwpy/Ga2+PGYWWeVtRrp8SUiMgmX22RWaePGiy+TlVLsB6MRvuQI9vx+SXx5bA2l3S2WHl9SgIwSNXo5B4mf3DPr66XFfqhp4PNnyYrxudvM1Nb9CyhLl55gUoDLycV4iT/5xkzo482R0uNLRGQyLrfJrIq3bxdfKovWvSdu/uSCM65h2MG7tI3KY3YECtIrpUeYBJWpG/D2ylDxk3tmnU3yjpYeYaKO2/am/KKUWWcbegCVOdITTILi8yrR3TFQ/HjMrDM3/wTpESYiMhmX22RWdXFx8gtmibu0hwxH5JKD2LeQd2l3JO95kSjNrZYeYxJQ09CIEVsuiZ/YM+vN42Kq9BgTdVzAQvklKbPeNvUCqvKlp5gE5FfU4c3lIeLHYma9XU7hT9ESkfXicpvM7sHAt8WXzZ1TD9z8YQnOuV7Ajpnh4othW2n3b5dQUVQrPcbUieo0Wny244r4ST2z7uLz+JMfZAMehssvSJl1t6UPUFsmPcnUiSpqNfhww0Xx4zCz3no6BUqPMRFRh3C5TWaXt8RRAYtnyxX37oeIdDgAn0WR4otgW83H/ioqi7ng7grU9Y1cbLMO98ayEOlRJjIPnRZw+5v8gpRZbfXL+iJ9/DhoS0qkp5k6Qam6ASoutlkHm37gpvQoExF1CJfbZHZVoaHiC2hLdOvbhTjvGgL3WbxLuzPa/dsllOappceZLKi6vhGfbudim3W8+UfvSo8zkfkc+Vp8Qcqss7pl/ZHUrx8SXu2OlA8+hCY3V3qayYKKquoxdF2E+DGYWX/HbmZLjzMRUYdwuU1mp6upQaJdL/FltFnu0n5nKC7b78UBez5LWyLveZHIf1ghPdJkAVV1GozYzGdsM/MUEMtnzJINub1ffEnKrK9a17eR1LfvM+exyYMGoyE9XXqiyQLyK+owaE2Y+PGX2Ual6gbpkSYi6hAut8kiMn/4QXwx3aG7tL+ZD/9lQeLLXRYGr7kXkX6Xd2XakvIaDUbyzSOZGavT6KTHmsh81MXii1JmXdW4DEFinz4tntM+GDAAdUlJ0lNNZpRdVoN3VnGxzczTp9uvSI80EVGHcblNFlF2wFd8QW30XdoDBuPKol046MC7tJXStumh8HVwwIaJn+CW/xnpsSYzyCmv5Z1GzKx9v++69FgTmZ/X++ILU2YdqV0+bPcnJpP6vonaO3ekp5rMIC85EXsWzcVbTmfEj7/MNtoaliw91kREHcblNlmEJj9ffFltaHcmzUGAayA8fo4QX+ayZzvssgLrJ4xqKtB9E3RarfR4k4nuZ1egj2uw+Ek8s62O3siSHm0i87u0XnxpypRftfNHBp/vJvZ6HdWRkdKTTR0QHxmGDV9+gvUTRsFz3iy8/DsX3KzjJeRVSY82EVGHcblNFvNw1GjxxXVrxfd/G1cXeuOQI+/SVmrH3bY+s9h+3CHHBairrpYebzJSaEIBXlkSIH4Cz2yv8ho+J5JsUEW2+OKUKbuqpSOQ0PM1486Bu/dAsYen9HSTkXRaLUK8tjU7J/Z2WISXF50TPw4z6+29teHS401EZBZcbpPFFK7fIL7Efr57X/yIwGUB8JzDu7SV3DG3PS0utptO5md/h7L8XOkRJwMdiskUP3lnttkEzyjp8SayHO+h4gtUpswqnUYjoXsPk8+Hs6ZPh66mRnrCyQA1lRU46DC/1XNiT1dX8WMxs942hDyQHnEiIrPgcpsspj4lRXyZnfBqd8T3HYCoBe447BgpvrRl7Xd0+YE2F9uP2zJ5HFKuc7GlZPWNOiw6eU/8xJ3ZbruvpEmPOZHlRG0XX6Iy5VXhOMYs58epwz9GQ2am9JRTG/KSE+H+49ftnhNvXrVR/HjMrLP0YrX0mBMRmQWX22RRaWM/k7tL+/PvEOxyHl6/8C5ta+mQyzFsmPiJQcvtx4V4bUOjho8lUJr4vEoMXRchftLObLuc8lrpUSeynOpC8UUqU1blS8aa9Vw5qe+bqL58WXrS6Tl6vQ5Rxw81PV/bkJat8RY/JjPravgmPoOfiGwHl9tkUaU++zv3Lu0+byJ6/jYcdboovqhlxnXA8TQ2fT3WqMX243bP/QmludnS404A9HrA42Iq/ungL37Szmy7z3ZckR53Isvb87H4QpUpo7LFlrthpGjLVulJpz9UlZbgkOMCk86Hf1vrI35sZtbT9vAU6XEnIjIbLrfJorQVFUh4zc7yd2l/OhkhzmfhPZdLbWts3+Lz2Dr1C5NO5Jt+JPObzxEbHiI98l1aUVUdvvCIEj9ZZ12j/dEZ0iNPZHnXd4ovVZl8pYvHW/xcOnXESNTGxkpPfJeWevMatk4db/K58IYvP8GPqw+LH5+ZdZTLn34jIhvC5TZZXPas2ZY5Ee/1Bq7N24hjS7nQtuZ2/+aHHdO+6tBi++lWHrmEvIo66bHvck7cykYvl2DxE3XWdaqs1UiPPZHl1ZYBrn8RX64yuYoXTOy8n4Ls3gMFK1ZCzzeb7FT1NWr4b1tvlvPgzZPHYcLKE+LHaKbsxmzjT78RkW3hcpssrio01Kwn3rGjJyLU+RR2/cqltrW389dAeM38zmyL7a0rN6DbIj+86hiArWHJqG/USY+/zUsuqOLd2qzT+9HnhvToE3WeQ1+KL1iZTPlzOnGx/VTJ7w1B9WUuvyxNr9PhTtB57PhhktnOhddPGIVt303E8GWnxI/VTLntu5ouPf5ERGbF5TZZnF6rRVL/tzp0kh3fqw9i5qzDCWcutG0lz59DsOuX6WY7kXefMRU97M89c+I2aE04QuILpF8CNkndoMVyv3i8bM9na7POLzA2X/olQNR5Es6KL1lZ51fwy1cii+2ny1mwANriYulXgE1KvXkNe+aZ7zy42Xnx9Kl4Z+kZ8eM1U17/sPdHZR1/+o2IbAuX29QpClasMOmk+v7wcQhzPondCyLFl7HMfO2YeQH7fptn1pP4b1cdafUkbsruGKQUVku/DGzGmTu5eHN5iPjJOeua9XIOkn4JEHUurQZY9X/iy1bWOemXvoDcnyaIL7Yfl/h6bxSsXAVtSYn0K8EmFGdm4IjzIosttZ/O65fpsHM4J37cZspq1sFb0i8DIiKz43KbOkVdQoLhd2m/ZoeYWatwyiVCfAnLLNEF+Do4mPXkfceK1QadzM07cgdZZXzzFFOFJhTic/er4iflrGvncOq+9EuBqPOdnye+dGWds9jO+eEL8YU2l9zmV56fi4DtGzplqf103osX8Kfs2DNdfFAk/XIgIjI7Lrep06SOHNXmSXPcR58izOk49vAubZvu0FJX8y62f5oMO4ezRp3ULT0bhxJ1g/RLwmqcvJWDD9dfFD8ZZ6zbIj/cyiiTfkkQdb6sGPHFK7PwYtv5T8j+drz4EptLbvN6vNTeMPGTTl9sN93BvXQpui08L378ZvL1c7sAvV4v/bIgIjI7Lrep05Tu3dv8Lu2edrg+YzlOu4Zj+wz5xSuzbEeXmeed4J9u+urDJp3cveoYgNWBicjmndwtqtPosPdqOt5aESp+Is7Y41QbL0q/NIjkbH5dfAHLLJTrn5E9VZl3bLe65O71OvKdnVGfkiL9ylAkJSy1n267m2E/5chsu3VBSdIvDSIii+BymzpNY0kJEnr0fHSX9tCRuOh0BHt+vyS+cGWd03E3T7OfqHssdzPLid4k72icup0j/RJRhIfFarj5JaC3a7D4CThjz3fwWqb0S4RIzuUN8ktYZvb0Ti8gc9Jn4svqjpQ+aRIqz52HXsM3qbtTeAeBR8x/zmuO1q7ZIX4cZ7Jll9VIv0SIiCyCy23qVMnrduGMS6j4opV18mJ75UHz34HywyT0dTTucSTtZecchCWnY3E/p0L6pdKpKusacfBaJsZsuyJ+0s1Ya/VwCkStRiv9ciGSU1MKuP5ZfBnLzJfO+T+QMeFT8eW0uXowYCAK162HJidX+tXSqfLV+fC464GRJ0fCbp8d7Hf9IL7Ibi37tXvFj+dMpi+9oqVfKkREFsPlNnWqrIRS8UUr69wOux6xyI9kzl170KIngO+tDcfaoCTE5VZKv2wsJjyxED/63BA/2WbMkJzPxkm/ZIjknfhBfCHLzJPe+T+R8YXtLLafL2PKVJTu24fGvDzpV41F1DTW4FTyKUwNnAq7fXbP1GtvL2yfNkl8kd1SGyZ+gllrLHsOzZRZYGy+9MuGiMhiuNymTnfQOVp84co6J1+nU9g46VOzn5h7Obt06sng0HURWB/8wOoX3XkVdTgQnYHv913HK0sCxE+yGTOmlKJq6ZcQkbzMaPGlLOt4Ope/IW1s22+0bks9HDUahevWo+bmTUCnk34VmayivgIBaQFYdGlRs4X2823cPld8kd1am74ei69XHhU/rrPOa8CKUOh0fCNJIrJdXG5Tp4u7nCu+dGWWb7/9WWyZMs7sJ+Rbv5uI/k7mfRyJMQ1cGYpFJ+8hOL7AKh6RcC2tFGuDkjByyyXxE2vGTG2SN3+UlqjJ9rfEl7OsA4tt1/+HtE9Gii+cpUrq1x+5Cxeh/MQJNDx8KP1qalO9th5RuVHYcHMDxp8b3+5C++mG7HsXG75UxptJtng+/e0XGL3spPjxnXVOXpHKfq0REXUUl9vU6bQaHXb+Gim+fGWWa+9CP2z7bqJFTsYXrfERP0F8uq93XoN7RCouJBQgo0T2TVpSi9Q4cSsbS8/GcZnNbCr/+7b5Y+1EJrmxW3xBy0xL6/q/eDhimPiCWUklvTUAWT9NR7GHJ2quXYO+tlbspVVWX4Y7RXew8/5OTAueZtQyu6W8V/0qvsRuqx0/foN3lp4RP8Yzy/aqYwCq6xvFXldERJ2By20SEX06VXwByyzTzl8D4fH/t3ffX1Xe+d7//4Nz7nOvu6zvOuusmTNzn0yKSYwxxTQzaZMcNUaNYi+J0dg1MYoNAbuCiiIKqGDvvffeewMLAiooIErv5fX9IRNmTIhS9t7vXZ6PtZ4/RNDMGLmuD6+1vXbvrk45hEeO8jc/INak/w47rIErzmvWvptady5FJxMf6d5jx32zdisjT3vi0hR9OFGjNlxRp+iTeilgp/n/byJn9PbEvQ772gG8QmmBNPHfzYdaqu2w/Ufd/pxhuyYltmqtlMFDlB4SqsfLVyj/8GGV3L6tyuLien/5FJYV6mrmVW1P3K65F+fK/7C/OmztoHeWv1PvMfvXdY1tbT5gP/NsPbC3Xhll9zciyfmN2nDFATceAHBvjNswUZBTojl99psPseTYIgfu0vyBvZ1y+A7r1lbvBXr+4fudSfv09dzj6rbwlHovOavBKy9o5PrLGrf1mkJ339Ck7fEau+mqhq+7pEErL6j34rPqtvCU/CJP6N3J+8z/9xO5uvlHEq1vWYD72eFvPtZSLYbtwP9Uwqcfm4/G3tCNd97VgWlDNGDfAAUeD9Ts87M158KcqiafnqzRR0dr0P5B6rmrp/y2+KnZ+mZqurKpGi1p5PAB+5mv3h7mnHOxI4saNljPjdhsfr8n53TH+G+WAoArMG7DzK75V83HWHJcEX33KOaHAU47eAdMXWB+OCQi1/bimB0q8oBn2wMul5MiBf6r+WhLz6406Dnd+rCp+SjsTS0L7ODykbquBUS7/7gd0q6ZIkeP1B+GbTG/75Nj67rglPXdCgBcgnEbZjLu5JoPsuSgvt+rJf7DnfeKEv+h5odDInJ9k7bHW9+qAPe1upv5cEvPGrZf0M0P3jcfg72t6JAu5qN1TWsY86pm92hnPl7XpIjgCeb3fXJsh28+tL5TAYBLMG7D1JrJZ+yHWapXs3vt1bLRAU47aM/s0kZNAzeYHw6JyLX9acQ2ZebV//mqgNd6cMl8vKXfrySogW6++675EOyNTY/oaj5a16awWYPNh+uaFjp5lvn9nxzTp9MPWt+lAMBlGLdh6uaZNPNxlurXyqApTj1kj5saaX44JCLX98Oqi9a3KMD9Lfib+YhL1Q3br+jG22+bj8De2rgFnjVufxrbVKHtW5gP1zVtDI8C9Io2nE+xvkMBgMswbsNczPCj5gMt1a3VE+Y49XAd9eMA84MhEdl0OyPP+vYEuL/4reZDLj1ZUfAbuvHmm+YDsDc3fGln88G6tkWNH2Q+Wtc4v+YaNGWJ+TmA6t4b4/eorLzC+g4FAC7DuA1zlw/cMx9pqQ7D9vhFTj1YT+/QUp8HrzM/HBKR6+u2kDdAAmqkslKa+Yr5oEs/VxjURNcbNTIff729fivam4/Vte37hR3sR+tansO7T1ppfh6guhV1+Lb13QkAXIpxG+bKyyq08Kcj5mMt1byVwcsV4tfcqYfqSVPmmh8Micim83ceW9+aAM9xbpH5qEv/osKg9xX/akPz4dcX6ra6jflYXZciB31jPlrXprCubdRq/BrzMwHVrhfH7FBRabn1nQkAXIpxG26BV297TsvGrnX6cwMjB/fRn4ZvNj8cEpHr6xB1wvqWBHiWijJp+ovm464vVxDYVPGvvGo++vpKrVc3Mx+q61JwZB/zwbq2hffsqPfH8sbuntSk7fHWdyUAcDnGbbgFXr3tGS0esUkzO7dy6iE6tH0LfTlurfnBkIhs4lXbQB2cX2w+8Ppq+YEfK77By+aDry/16cqPzIfquvR6zGsK6/q1+WBd2+b176lGozeZnw+oZmXkFVvfkQDA5Ri34TYuH+TV2+5czPAtmt3Dz+kH6GmTZ5sfConIpnbzjlvfigDPxKu3Tcob+5niXmpgPvb6Wm8te8t8qK5r4TMGm4/VdSnqxwF6YQR/q9Ld41XbAHwV4zbchqtfvb3wpyPV/u/IzSz63Z8z/4fDSrz4UGWlFSrIKdHx9Qm/+Zw1k8/o7rVHKi0qV3lphWKGH6362N7YOD26n6/H9wt0aOWNqh+PGnRQ2emFihx40HzErv7/93ZFfNfZ+a8MGdBLf/bfYn4wJCKbjiVkuvjOA3iRC0vNx15fKjfgC8W9+JL50OtrXfvL8+YDdX1qFvux09+3xmkD98jhPDbQjWsQsFM5RaXWdyIAMMG4Dbdy5WCKS0fbqMGHnujg8uu6n5D9u59/62y6Es5naMHQI1o98bQKc0u1ZfbFqo+vnXJGhbml2r8kXjHDjyrW/6gi+u1XeO99mtNnv0qLyrVg6GFFDTqokqJyRQ76ecw+vSWx2qHcHYoctFNR/Xo6/cAc6tdCbSfwpjVEvtpX4Uetb0GAZ6uskMJeNR99faGcMc0V9/wL5kOvL3am6ZvmA3V9iw4caD5U1/mFKEFB5ucFqr7Z+29Z34UAwAzjNtyK5bO3I/rsV87DQm2edaH6j/fbr/KyCq0cd6rqx87vvqPrJx5U/fP9W9natziu2p+/8KcjKikqr/rn3EdFWhpwQtFDDik7vVDzBhwwH7J/3dx+u7VgkGve/GbmpOnmh0IisuvQzQzrWxDg+S6uMB9+vb3s0V+aD7y+3OHWnvm87X9u4MIu5iN1/c7sM8zPDPRkrwTuUnFpufUdCADMMG7D7Vw55NpXb//SoeU3nvqq7aUBJyRJ8/r/Y4TevyReaUk5Cu/986NFVCndPJOmgpwSlRaXK+FcuqL+/ursOd/vU1F+mRaNPKaFPx1RcUGZ5g04oDPbknR07S3zIfs3fb9Xi4f96JJD8ty+3+g5nuNH5LPxqm3AQSorpFmNzAdgby1r1Ffm466vt7Nnc/Nx2hHN7dfNfKSuT8FToszPDvSPYo4lWd99AMAU4zbcjsWrt+f1P6CCnBKtDzn3u5+zcvwpSXrix3YvuKpH9/MV3nuflgedlCqlLbMvKnLgQcUMP6qUG49162x61edvi7ik9ORcZdzJ1c6oK5r/wyFlpRdqXv8DOrDsujLu5iotMUcbQs+bDtuze+/VstEBLjsgd5q4yvxQSER2XU3JNr7zAF7k+nbzEdgbezyitfmwS89r/dA25sO0I5o0r5/5QF3fhk5dZH5+oK16a8JelZZXWN95AMAU4zbc0tUjqS4dc09sSNDduEdP/ZxfXrn9yzO0w3v//Mrt9L+/cnt50ElJUvj3//g5m8IuqPSfHkXy687tTNbhVTe1cNgRFeWXKmrwIa2dclY5D3//TS1d0YqA8S47GM+eMM38UEhEdvVbds7ydgN4pwWfmY/B3tQj/6/NR136uaVBHcyHaUf0Vkxjzezcynygrk+h7Vuo15QV5ucIX2/D+RTrOw4AmGPchluqrKzUsrEnXDLkRg85pOKCMq2ZdOapnxfRb78qyiq14p+euX1hzx3dOJWm8N77FDnwoCorKrU86GTVx7fMvqjczOqH6vk/HlZWWoHm9jugdVPPKuNO7s//nj77JUlz+uyv8/+n+rRm/CyXHYojvu+mF3gcCZHP9ucR23TvcYHxHQfwQqnnzQdhb+nhj+3NB136R1GhXcyHaUcVETLEfKCubzO7tOYN4Q37YuZh67sNALgFxm24rdSbWS4Zc8/tTFbSpYfVfmxvbJxunk6r+ueE8xlKOJeuBUMPa+X4UyrMLdG2iEtVH795Ok2pN7K0YOgRLfzpiFJvZunMtqRqf+0Le+7o0PIbCu+9T4tGHFPuo59H8Fj/o8rPKjYZtlePX+jSA3H3SSvND4VEZFfwlmvWtxrAe63sZD4Me3oPBviZj7n0ZDMiupmP0o6qVezn5uO0I5rdw08fBa43P1P4YufvPLa+0wCAW2DchlvbGXXFqWPuwp+OqLS4/IlXY/9zZ7YlPTE0Lxh6REmXM1VeWqHC3FKd3HT7ic+PHHhQcUfvqyi/TAXZJTq7I1kR1bwCe+FPR5SVVqCIvv/42KnNiUq8+FB34x49MZi7qpXBy116EI4YN8n8QEhEdr0UsFPZBaXWtxnAez1OkgL/h/lA7Knd78Ow7Y4Fx3jPuN0gtoGix/Q3H6cd0dy+3+iNMRvNzxa+VF8e6wYAVRi34dbys4ufeMY1OaflgasV2r6Fyw7Ac3p10cujNpkfConIrnkHE6xvMYD32/qD+UjsaVUG/ItSe7U1H3Gp+oYv9Z7HkjSIbaChC7qbD9OOKnJIXzUYyeMGXdF/jdyulKxC6zsMALgNxm24vdNbE83HX29uyegNmtHpK5cefvtO43EkRL7cu5P3Wd9aAN9QlCVN+g/zwdhTqgz4F6V8y7DtzvVb6R1vKFlVTANF9O5sPkw7qij/ofqz/xbzc4a3N3lHvPXdBQDcCuM23F55aYVi/Y+aj8DeWKz/Fs3q1talh955QcHmB0Iism3XtTTrWwvgO84sMB+NPaHKsf+qe92/Nh9v6el1W/21/SDt4KbNGWA+SjuyyIAA/WEYA7ezei14twpLyq3vLADgVhi34RESzqWbD8He1oKh2zXn2w4uPeyGf9tBr/E4EiKfrkPUCetbCuBbKiuliCbm47E7Vzn233S3Sxvz4ZaeXavVzczHaEf3buzbmt6xpfko7dAz//jJ5ucNb2312XvWdxUAcDuM2/AY66adNR+EvaXIQTsV2aeHyw+6/ScvNT8QEpFdfx6xTXcyC6xvJ4DvSTlnPiC7a5Vj/6fudGxlPtpSzfpk5V/Nx2hnNG/qEPNB2tFNmRJhfu7wtprPOmJ9NwEAt8S4DY/x6H6+5nxvPwx7evP679aCQX1cfsCNCggwPxASkW3jt8VZ30oA37VpgPmQ7G5VjP1fSm7X0nywpZr35tI3zYdoZ9Q+1nVv7O7KRkxZaH728Jb+03+r4h/kWN9JAMAtMW7DoxxaccN8HPbkIvruVeyPg11+sA3r1lZNAjaaHwqJyK6GQbuUV1xmfRsBfBdvLvmrYfv/KKlNC/Oxlmretb88bz5CDbp+ZwAAIABJREFUO7PokX3Nx2hHF+rXQn2nLDM/g3hDYzddtb6LAIDbYtyGRykpKlPM8CPmI7FntkdLR460edXG1BjzAyER2bb2HM+IBMydW2Q+KrtDFYH/V4ktm5mPtVS7Tn/4lvkA7cxGzP/WfIx2RjM6faVOE1eZn0M8OV4gAABPx7gNj3M37pEbDMWe1/KAIJMDbaT/UPMDIRHZ1irimPWtA8AvYv7bfFy2rDzw35XY/AvzoZZq36GvPzYfoJ3ZyzEvK7yna9/s3VXN6t5Wfwteb34e8dTWn0+xvnMAgFtj3IZH2jX/qvlY7EmtHjfT5CA7s0sbNQ3cYH4gJCK7/t/IbUp6mG992wDwi8dJUvD/Mh+ZTYbtoP/Q7S8+Mx9pqW7t/K65+QDt7KaHDzIfop1VRO9ueofHFNa6VnOOWt81AMDtMW7DIxXllSr6h0Pmo7EntHp8tNkhduzUaPMDIRHZNnvfLetbBoBfOxxiPjS7urLAPyjhs0/MB1qqe+uGtjEfn51d09h3FdreO99cMqRdM0UO7K1XRm0yP5t4UgkZvEAAAJ6FcRse6+aZNPPh2N1bNW6J2eE1athg88MgEdn2cehBlZVXWN8uAPxaRbk05y3zwdllw3bQn3Tr44/Mx1mqX0uCO5qPz64ocpLr3/zd1d8jPDdis/kZxROKOJBgfbcAAI/AuA2PtiX8ovmA7K6tCFqpUD+bV37M6NRKHwfxOBIiX+4//bfqWmq29W0CwO9JPS8F/g/z4dnZlQY9p1sfNjUfZqn+RYZ2MR+eXVHX2NbmA7TTB+7RI/XH4VvMzyruXIvZR1RRUWl9pwAAj8C4DY9WkFOiqEEHzYdkd2vpmPWa3qGl2YF1wpR55gdCIrJt0vZ461sEgGfZOdJ8fHZmJUEv6eYHH5iPsuSYQud1Mx+eXVXUsN7mA7SziwieYH5Wcdf+38htSs7kcSQAUFOM2/B4146mmo/J7lSs/xaFdW1j90qMHwfoD8N4JQaRL/fB1P0qKeNxJIDbKyuSZr9uPkI7Z9h+RTfeftt8kCXHFbywq/no7KoCor1/3A5p10yhk2eZn1ncsXkHeRwJANQG4za8wrppZ81HZXcoZthWzfm2g9kBdXqHlmo2br35gZCIbDub/Nj6tgCgptKuSEH/Zj5GO7Li4Ea68eab5mMsObZhS33jsSQNYhuoYcyrmt2jnfn47IrGTF1gfm5xp1rMPqLKSh5HAgC1wbgNr5D7qEjz+h8wH5ctix6yU3N7dTU9nE6dMsf8QEhEtk3bed36lgCgto7OMB+kHVVR8Bu63rix+RBLjq/vqg7mo7MrC5vl3W8sWZVfcw2assT8/OIO8TgSAKgbxm14jbhj980HZqsiB+7S/IG2f30xcnAf/Wk473xO5Mt9EXZYZeU8jgTwOJWV0vxPzIfp+lYY1ETXGzUyH2HJOXVd3cZ8cHZln8Y2VWh7mzeHd3XTO7RU90krzc8x1i08mmR9NwAAj8S4Da+yfd5l86HZ1UX03aOYHwaYHkhD27fQl+PWmh8Iiciu50fv0N1HBda3AQB1lX1Xmvjv5gN13Yft9xTfsKH5AEvOq9XqZuaDs6uLGj/IfHh2VWFd26h58Drz84xVHaNPWN8FAMBjMW7Dq5QUlSnW/6j54Oy69miJ/3Dzw+h03gyGyOdbc/ae9S0AQH1dWmU+UtelgsCmin/lVfPxlZzbJyv+aj42u7rvY9qbn/Nd2ZzvOuv9sRvMzzSu7uXAnXqUX2J9BwAAj8W4Da+Tlpit8O+tR2fnN7vXXi0PCDI/hM4b0Et/9t9ifigkIrt6LzlrfekH4ChrupuP1bUpP/BjxTd42Xx4Jef3xtI3zMdmiyIHfWN+3nfp9xb9e6rR6E3mZxtXti8+3frKDwAejXEbXunMtiTz8dnZrQyaYn74DPVrobYT1pgfCInIrrcn7lVecZn1ZR+Ao5QWSGENzUfrmpQ39jPFvdTAfHQl53ftL8+bj8xWBUf2MT/zu7qoHwfohRG+8V4+/usuW1/1AcDjMW7DK1VWVmrdtLPmA7SzWjN+rvmhM6RdM82aGGp+ICQi287fzbK+5ANwtPQ4adz/Nh+vn1ZuwBeKe/El89GVXNOpj942H5mtej3mNYV1/dr83O/ygXvkcK9/s/p3J+9TcWm59RUfADwe4za8Vn52saKHHDIfoh3d6vGLzA+bIe2aaW7fb/Scj7yigoiqL/ZYkvWlHoCznFlgPmD/Xjljmivu+RfMB1dyXQfbfWw+MlsWPmOw+dnf5PuNwCDzs44zu5ySbX2lBwCvwLgNr5Z0+aH5GO3IVgStVIhfc/ODZki7Zuo0cZX5gZCI7Bqw/Lz1JR6As63oaD5k/7rs0V+aD63k+nb0am4+MFvWLPZjt/kewNXNmDTD/MzjjHgjbgBwHMZteL2Dy6+bj9KOaNnYtZreoaX5ATOkXTOFT5hifiAkIrs+m35IxWX8NVrA6xXnSjMamA/av5Q16ivzkZVsWvvT1+YDs3XRgQPNvwewKnhKlPnZx5GNXM9ztgHAkRi34fXKSyu0IviU+Thdn5aM3qyZnVuZHyxD2jXTnF5d9PIo33oHcyL6Rw0Cdiolq9D60g7AVe5fMB+1NfZf9HhUW/OBlexaHNzBfFy2buDCLubfB1g2dOoi8zOQI/py9hGVV1RaX9kBwKswbsMn5D4q8tjnb8cM36LZPfzMD5S/1GvycvNDIRHZdeTmQ+tLOgBXu7TSdNh+5P+1+bhKts2d0cV8XHaH5vbrZv69gFWh7Vvou8krzM9B9anx+D3KzCu2vqIDgNdh3IbPSL2VpYg++83H6to0/4ftivius/lh8pfmjptgfigkIrvC9t60vpQDsLKpv8mwnfGDn/mwSvaFzO1mPiy7Q5Pm9TP/fsCymV1aq9X4Nebnobr0XyO36ypvIAkATsG4DZ8Sf/y++WBd0yIH7lJUv57mh8hfCv+2g17jcSREPtu3saetL+EALJUVSxFNXDpsPxjAsE0/FxTT1XxYdofeimnsNo8qNPuepGdHfRS43vxcVNs2X0y1vooDgNdi3IbPObTihvlw/azm9tutmB8GmB8e/7n+k5eaHwqJyKYvZh5WUSlvIAn4vKw70qT/cMmwfb8Pwzb9o5+WdTYflt2liJAh5t8XWDe37zd6Y8xG8/NRTZu0Pd766g0AXo1xGz6noqJS66aeNR+wf7fv92rxsB/rdNBbOXaYQvyaO/wAOS8w0PxQSEQ2vRa8W+k5RdaXbgDuImGfU0ftyoB/UWqvduZjKrlXfVa2Nx+V3aVWsZ+bj8vuUOSQvmowcrP5OelZ9Yg5rcpK3kASAJyJcRs+qSi/VItHHbMfsn/V7N57tWx0QJ0PeVf279bGaeOq/nlFwDDdPHlMpzasrvObUs7q4afGY3gcCZEv9ucR23Txbpb1JRuAuzkc4rRhO+Vb3jySfluX1a3NR2V3KnpMf/Nx2R2K8h+qP/tvMT8v/V5/m3GIv/kGAC7AuA2f9fhBviIHHjQftP+5FYET6nXAi/2xr1LiryqkXTPN+76rHiTc1Mqxw3Rp7w5lpz3QvO+71vrXHDYl1vxgSEQ2rT+fYn2pBuCuNg907LA99l91rzvDNlXfV6v+23xQdqeGLuhuPiy7S5EBAfrDMPcbuN+asFcZufzNNwBwBcZt+LTkK5nmg/YvrRkf7pADXtLFc1o26gdtnj5Jl/bsqPrx42uW6cKubbV7NcSoEeYHQyKyacK2OOtLNAB3VlkhLW3joGH733S3SxvzAdWlvdRAWStX6fHSpXX7+N+78e571f7nKU1JrfqcVP8RKr51SyUJCXowblzVj19/vbFKkpN1vVEj+9+PZ/TRyg/NB2W3KqaBInp3Nh+W3aXw8ZPNz03/3POjd+hWeq6LL8oA4LsYt+Hzzu1Mth+2J8bU+TC3a16Ybpw8qp1zZyqkXTOtGTdKN04e1ewefsp7lKm9C+YqpF0zrZs0Vhd2bq3xrxvWra3eDeRxJES+2HeLzlhfmgF4gtJCad779Ry2/6fudGxlPp66srt9+qg0JVWVhYXVjtfP+vivu974jSd6EBikwnPnfv74iy+pIj9fN5q8o+uvN1ZFXp6uN3pdcX95Xg9nhys9JNT896MmNV7S2H5QdrOmzXGvN5+3bsqUOebnpz8M36o/+m/V4ZsZ1ldnAPApjNuApANL482G7ZXBy+t8iNsyY7LiDu/XhinBSk9M0PVjhxTi11xpibcU3f9bLRjUSw8Sburx/RSlJ91WZJ9uNf61R09daH44JCLX1ybimErKKqwvywA8RUGmFPZqnYbtirH/S8ntWpoPp1ZlLlj41PH6WR+vtpcaqPTuXd3p2VNxf/n5ld0VeXlVHy9NTVXC55/r+htvqiQ5WfENXzP/fXhW1/7yvPmQ7I69G/u2pndsaT4qu1Mjp8WYn6MWn0i2vioDgM9h3AYkVVZWalf0FZcP28vGrlVo+xZ1PsBd2b9bG6YGK6RdM83s1Eop169p3cQAbZ8dogs7t1R93rzvuyrUr+b/nij/oeYHQyJyfZ9OP6i84jLrSzIAT5N1R5ryx1oO2/9HSW1amA+n3jZuPwgK/sertv/yvOJeeFHlWVm69dHHuvne+6rIzlZ8w9f0MGKu0qdMMf89qEmnPm5iPiS7a3OnDjYflN2pUL8W6jtlmdk5avKOeOurMQD4JMZt4O8qKiq1aeYFlw3bS0Zv0MzOrep1gFs3MUB5jzO1bNQPCmnXTOe2bdT6yYGa3uFLPUq9p/AefrX+NWd2aaOmgRvMRzYicm1NJu5VRm6x9aUYgKe6f1Ga8P/VbNgO/L9K/KqZ+WhqnaPH7fhXG6osI0PJnbs88eN3+/RV0ZUrKrp6VSmDh+jGW2+rJClJ8a821IOxY1V07ZoKL15Ucteu5r8n1XWw7SfmI7K71j627i+S8dZmdmmtthPWuPwc1WfpWeurMAD4LMZt4J+UlZZr7ZQzTh+2Y4Zv0axubet8YPvnf94yc4oKc7L1IOGGbp0+rhC/5gpp10yHlizQkRWLav3rB02NNh/ZiMi1vRq0S8mZ+daXYACe7u5Jadz/fuqwXR7470ps/oX5YOoOOXrczpg+XfnHjj373xsdrbQJE3Tz/fdVnpWl643fUFL79iq9d8/896S6tvduYT4iu3PRI/uaD8ru1uwefvpb8HqXnaPaR51QWTmPdAMAK4zbwK+UFJVpRfAppw3bC4ZuV8R3dXt38xkdWyo96bZ2R81+8sc7faXoAd8+8WOzun2tS3t31OrXjxo22HxkIyLX9vzoHbqakm196QXgLRL2SUH/Vv2wHfQfuv3FZ+ZjqbvkyHH7+htvqiInR0lt2z3182683UQliUmKf/kVJXXoqKKrV3/+2EsNJElxL75k/vvy69b+9LX5gOzOjZj/bZ2+r/D2Inp30zsBG51+jvoi7LAKSnikGwBYYtwGqlGUV6rFo445fNiOHLRTkX161PmQdmjpQiWcOemUA+CMTq30WbDzD4BE5F4duplhfckF4G2ubZQC//WJYbss6E9K+OwT86HUnarruJ3qP0I5W7c++bnR0crbt/+Z/85HCxfqQVCw4v7yvG799SOVpqYq7i/P62bTD1WWlmb+e1Jdi8Z3MB+Q3bmXY15WeM8O5mOyOxY5sLdeGbXJaWeoJhP36nF+ifUVFwB8HuM28DtyHxVp4bAjDhu25/bbrQWD+tTrgPbg1g2tCvJXSLtmWjCol26fPaWcjDRd2Ln1N48rqW0Tp8w1H9mIyHX90X+rdl19YH2pBeCtLiytGrZLg57TrQ+bmo+k7lLKkB9UnpWlyqIiVRYXqzwrS/cGDqzxxx9GzH1iiL753vuqLCjQ7S9bPvXfe+Pd91SSmKi4Bi9X/VjGrNnK27dP+UeP6m6fvua/N9UVMaOL+YDs7k0PH2Q+JLtrUcMG6z+HOX7gbhS8W4kPeaQbALgDxm3gKbLSChT9w6F6D9tz+uzR4mE/1vtwlnk3WSvHDtfs7u2Um5mho6uWaMuMyUpPuq3bZ0/V/dD34wD9YdgW87GNiFzXunP3rC+xALzdiQiVBr2gmx+8bz6Qkuc2bV438/HY3Wsa+65C2/Pmkr/7vc7okfrjcMd9r/P6uN26k1lgfYUFAPwd4zbwDOnJuYoceLDOw/bsXnu1dORIhxzMzu/YrPijh3RkxSIdX7Os6sdn9/BTcX6eovvX/pl70zu01OfB68yHNiJyXctP3bG+tALwEY8XLTAfR8mzC1zEuF2TIicNNh+R3bmI4AkOOUMxbAOA+2HcBmog426uIgfVbeBeETjBYYeyub27qDA3R0X5eYr4rtMTH8tITlTMkO9r/WtOmzzbfGgjItcVvv+W9SUVgI/JXMDATXXvp2WdzYdjT6hrbP0eUegL1ff7njcn7GHYBgA3xLgN1FDG3VxFD6ndI0pWjw9z+KFs6YjBKszNUcKZk4rs000h7Zppa9hUZSQnKsSvea1+rXkDeunP/jyOhMhXGr/1mvWlFICPYuCmuvb9qvbmw7GnFDWsd72+zzi1cc1vvnaTLp773c8/uHi+Ht5NVllJsYrycnX14F6Fdf266uPH1y7X4/upKistUXb6A+2LmffEz98xZ7oy791RZspd7Vv4j4/N6tZWWQ9Sn/i1HNWYqQvqdIZ6c8Ie3XvMsA0A7ohxG6iFR6l5mv/D4RoO2wud9qqDyD7ddOv0camyUmXFxcq8m6zoAbV7JEmoXwu1m7DGfGwjItc0ZuMV60soAB/3aMlS86GUPK/Oq1ubj8aeUkB0r3qP29cO7dPs7u2qetqb1u+YM11LRwxR+DftFTPkez1KuadDSxZUffz0prVaFeivOT07at3EAJWVFGtV0Iifvxdp30IlhYWa07OjZnVrq5LCAs3q9vOYfXzNMh1eFuOc76X8mqvvlGW1OkO9M2kfwzYAuDHGbaCWHj/If+bAvWrcEqcN2//cnG87aP6AnnX6uTMmzzQf24jINU3aHm996QQASdLjVavNx1LyrL5c/YX5aOwpNYx5VbN7tKvXuH15365a/7xQvxaK+bGvHqXe06og/9/9vHtxV3VgUZRC2jVTxHedVFJYUPWxnIcZWjCol2b38FPWg9Snjur1bUanr9Rlcs1e5PPOpH1KzSqyvnQCAJ6CcRuog8cP8rVgaPUD9/LA1Qr1c/67lc/t1bnuP7fvN3puxGbzwY2InF/ssSTrSyYAPIGBm2rTX1c0NR+NPamwWXV/Y8lTG9eotLhIeY8zlZ6Y8MSrsJ+WJJWXlWnn3Jm/+zkzO7dWYW6OVo8bVTWIF+XlKqrfN5rbq7OK8vM0s0trnVi3Ugdr+O+tT7O6t1Xz4HVPPUM1HsejSADAEzBuA3WUnVH4m4F76Zj1mtHpq3oftraGTdW57Zu0dsKYaj++cEhvlZUUP/FsutrUaeIq88GNiJzfmrP3rC+VAFCtrA0bzUdT8oxeX/K6+WDsSX0a21Sh7ev2Qpv5A3pq4eDeiurbXRumBCs/67H2Loh49s/1a66YH/sqJyNNm0InVPs5Vw/s+c3zuzdMDdaDhJtKS7ylLTMmK/yb9np8P1UzO7fWnuhwpScm6P7N6099NXh9mvNdZ70/dkO1Z6jG4/Yo6WG+9aUSAFADjNtAPWRnFCpm+BGF996nWP8tCuvapt6HrEt7digz5a6uHtijspJi7YqcVe0B8viaZVo8fGCtf/3ZE6eZD25E5Nz+PGKbdly5b32JBICnyt60yXw4Jffu0ovPm4/FnljU+EEOGX+PrFikO1cu1vjzT21co+vHD//mx89u3aD0xATN6tb2qT//9MY12h8Tqbm9u6gwN0ezu7fT8tFDlZ3+wCnjdki7ZprXv6cajd70xDnqteDdDNsA4EEYt4F6ys0s0orgvZrzbYd6H67WTRqrrLT7Cuvy80i+cdo4FebmOOwxJxHfd9MLPI6EyKt7btR2HU94aH1pBIAayTtyVPGvvGo+opJ7dvKTd8yHYk/s+5j2Dvne4eT6Vbpx/EiNP//Crm26enBv1T+Htm+hqwf2KCX+6jOH7TnfdtDj+yma0ekrrRjzk9ISbymkXTNN7/ClJNX51eg1KerHAVXfI70SuEsJ6XnGV0YAQG0wbgMOkJ/1WIt+6l/vg1Xy5Qu/eaV2buZDLR42wCEHtx6TeBwJkTf3UsBOnb+bZX1JBIBaKbx0Sdcbv2E+pJL7dcDvU/Oh2FOLHPRNrb9XuLBzq1YF+Sviu05aO2GMivJytXHauKqP75gzXfFHD/08XPu10K3Tx6s+f1PoBJUWF2ndxICqYTv50nklnD2pOd92UFiXNgrr0kYzO1f/RpFntqyvegRKVN/uynmYoZB2zRTZp5vyHmU6bdiuGrhHDterY3co/kGu9SURAFBLjNuAg5QWF2l18Mh6HarWjB+tqH5PHkQTzp6senZdxHedlHL92u8eCp/WnPGTzIc3InJeb03Yq4QMXmkEwDMV376tm++9Zz6mknu1/fsvzUdiT21cVN9af79wbttG5WSkqay0RI/vp2pPdPgTHz+xbuUTQ/OV/buVnf5AZaUlyky5q+2zQ6o+Nrt7u2q/1h+l3vvNvzfiu056lHpP0zu0rPqxY6uXKuHMSSVfOq8NU4OdPm7P+baDUu6muPjKBwBwBMZtwIEqKsq1M2KGQw9a57Zv0u7I2Qpt30L34q7o2OqltT+s9eqil0dtMh/fiMg5fRJ6UBm5RdaXQACol9L793Xr08/MB1Vyn9b4tzMfiT2112NeU1jXr50+CntD0QO+VU5GuvUlEABQR4zbgBOc2rDaYYetY6uW6tDShTqzeZ0SL5xViF/zWv8avSYvNx/fiMg5tZt3XHnFZdaXPQBwiLLHWbr9VSvzUZXco0XjO5mPxJ5c+IzB5sOxu7ds1I8qzONRJADgyRi3ASe5fvyIZnRsWe8D14FFUUpLvKWcjDSF9/Cr9c+fGzzOfHwjIufUZ+lZlZZXWF/uAMChKgoKlNylq/mwSvbNndnVfCD25JrFflynF8b4ShumBqustNT6kgcAqCfGbcCJUq5f0+w6DNL/3Opxo1RSWKglwwfV+ueG9+yoRqN5HAmRNzZhW5z1JQ4AnKesTA+Cgs3HVbJtWmR384HY04sOHGg+IrtjBxZFS5WV1lc6AIADMG4DTpadnqb5A3rW6/BVl1dsh7RrpsHTlpkPcETk+JadvGN9aQMAl8hat05xL75kPrKSTWNjeeV2fRu4sIv5kOxuXdi1zfrSBgBwIMZtwAWKCwq0cuxwlx7aIseONR/giMixvRq0S+fvPLa+pAGASxWcP68bTd4xH1rJ9Q1dxjO3HVHkwG/MB2V3KKxLGyWeP219SQMAOBjjNuAiFRXl2hExwyUHt1k9/NR4DI8jIfKmPgk9qPvZhdaXMgAwUZqezhtN+mDfr2xvPgx7Q5Pm9TMflq1bOKS3stMfWF/KAABOwLgNuNi57ZsU6tfCqYc3/ykx5kMcETmuXovPqqi03PryBQCmKoqLdW/gIPPBlVxXxzWtzIdhb+itmMaa2bmV+cBs1dawqSotKba+hAEAnIRxGzCQfPmCwrq0ccrhLWrUCPMhjogc0x/9typ8/y3rSxYAuJXM6PmKe/4F8+GVnF+LVZ87dORtuqpptX+mUvNTn/lzGy1ppDNpZ3Qm7cwTPz7/yvzf/HpHU49WfXzU0VFKyErQ7ezbmnhyYtWPv73sbd3JvaM3l77pkoE7ImSI+cjs6qZ3aKkLO7c4+YoEALDGuA0YybybrOj+3zr0ADejS2t9ELjBfJAjovr3UsBO7b+eYX2pAgC3lH/0qK6/8ab5+ErO7cMVHzh85G2yvMkTjTsxTufTzz/157yy6BXtvbNXlx9ernbc3pyw+Ylf842lb6hBbAO9uuhV5Zfm64OVH+jtZW8rrzRPby176+ex+WKEZpyb4bJXb7eK/dx8bHZl83p3UVpigvWlCgDgAozbgKHS4iJtnj7JYYe4gCnzzQc5Iqp/zWYdVmoWz9cGgKcpTUtTkl978wGWnNdri19z6uDbcFFD3cu9p957ej/189beXKuFVxZq1NFR1Y7b626uq/bnNV3VVHmleVX/fD//vpqvb653lr+jO7l3qkZwVxUd0N98dHZFq4NHqjA3x/oSBQBwEcZtwA1c3rdLMzvV7zl4UcMGmw9yRFT/Jm6PV1lFpfVlCQA8Q3m50qeFmI+w5PguNXzZ6WPv+JPjn/mq7ajLUdqYsFENYhv87rhdWFao9IJ0xT2KU8iZkKqPvbLoFWUXZ+tva/+mD1d9qJySHL2x9A1FXop84vNc1dAF3c2HZ2c2vcOXOrVhtVTJOQoAfAnjNuAmHqXe04JBvep0kJvRqZU+DuJxJESe3MuBO3XoBo8hAYC6yDt0SNfffMt8kCXHdfKzd5069DZe0lgPCx+q+47uv/s5I46M0MF7B/Xqold/d9z+Yt0XarGhhT5d86n67+uvh4UPNf7k+KqPD9g3QFczr+pa5jUNPThU7654V8k5yWq8pLGCTwQr7lGcLj28pB47ezh/4I5poIjenc1HaGcUPeBbpd3mfUoAwBcxbgNupKy0RDsiZtT6MDd+SqT5MEdEde+r8KNKzymyvgQBgEcrTUtT4tdtzUdZckz7O3zm1KE37FyYjt8//tTPWXBlgUorSlVSUaKSihKVVZapUpUqqSj53UeKhJ0L08n7J5/6a046NUl/XfVXZRVnqcnyJuq8rbPu5d1zyau3p80ZYD5EO7odc6arrLjY+hIEADDCuA24oevHDims69c1OszNHzbEfJgjorr1R/+tmrbrusp5DAkAOEZZmdImTzEfZqn+be37pdMG3neWv6Ockhx12NqhVj+vuldu/7qoy1HambSz2o+9v+J9JeUkqdGSRuqyvYuuZV5Tg9ifn/0tqeoV4s7s3di3Nb1jS/NB2hHN6tZW148fNr7oAACsMW4VZYiZAAARvklEQVQDbionI10rAoY99UA3vUNLfR68znygI6La98HU/TqT9Mj6UgMAXinv4EHdaPKO+UBLdW+Nf1unDbwLrizQgbsHfnfA3p64vcbj9or4Feqxs4earmyq3nt6K7s4WwP3D6z258deja16ZMmnaz7V/fz7ahDbQJ+s/kRpBWlOH7Z/ad7UIebDdH1bNvIH5TzkcW4AAMZtwL1VVurs1o2a0emrag91U6bMMR/oiKh2/dF/q8ZtvabisgrrKwwAeLWKnByl/Pij+UhLdSt2QienDLsfrvpQhWWFar2pdbUfj7wU+btDc3Xj9pK4JUrJS1FxebGSc5IVfCK42p/bdFVTJeYkquHihlU/NufCHO2/u1/HU49rwL4BLhu328e2MB+n69qMji11asNqVVZyjgIA/IxxG/AAj++naPGwJ5+PFzm4j/40fLP5UEdENe+v0w7o/J3H1pcUAPApufv26cbbTczHWqpdEWFdXTb2+mLRI/uaD9W1bfHwgXqUes/6kgIAcDOM24CHqCgv1/G1yzW9w5cKbd9CX45baz7UEVHN+k//rZq4PV4l5bzKCAAslGdlKWXQYPPBlmretMju5gOwNzdi/rfmYzWv1gYAOALjNuBh0hJvae68JeZjHRHVrI9DDupySrb1pQMAoJ9fxX39zbfMh1t6dmNju5kPwN7cyzEvK7xnB/PhmldrAwDqi3Eb8ECl5ZWacyBBz43abj7cEVH1/XnENoXsusGrtQHAzZQ/eqR7/fqbj7f09H5c3tl8APb2pocPMh+vebU2AKC+GLcBD3Yns0Cd5580H/GI6Mm+mHlYt9JzrS8RAICnyD1wUDc/aGo+4lL19V7lZz7+entNY9/V9I4tzYfsX7ciYJiyHty3vkQAADwE4zbgBTZfTFXjcXvMBz0iX++5UdsVdei2KiqtrwoAgJqoLChQ2uQpinvhRfMxl56s4+pW5uOvLxQ5abD5mP1Lc3p21LXD+60vCwAAD8O4DXiJnKIyjVx/2XzcI/LVvp57TPceF1hfCgAAdVAUF6fE1m3MB136R81Xf24+/PpCXWNbm4/aIX7NtSc6XCWFnKMAALXHuA14mcv3stUy/Kj50EfkKzUYu1PLT92x/tIHANRXZaUeL12q641eNx926Xk1XfG++fDrK0UN6202bMcO7ae027esv/oBAB6McRvwUhsvpOitCXvNhz8ib+3PI7ZpzMaryswvsf5yBwA4UFl6hu4NGmQ+7vp61oOvLxUw3/XjdliXNjq7dYP1lzsAwAswbgNerLC0XCG7bui5UdvNh0Aib6r/8vO6+7jQ+kscAOBE+adO63bLr8xHXl/sYqNXzAdfX6phzKua3aOdyx5BsmtemApzc6y/xAEAXoJxG/AB9x4Xqs/Sc+aDIJGn127ecV1Lzbb+kgYAuEplpXI2b9Gtv35kPvj6Uif+9q754Otrhc1y/htLrhw7XA/vJlt/VQMAvAzjNuBDzt95rNYRx8wHQiJP67/DDuvQzQzrL2EAgJHK0lJlzl+g643fMB9+faH9HT8zH3t9rU9jmyq0fQunjNrRA77VzZPHrL+MAQBeinEb8EH74tP1yfSD5oMhkbv37uR92nA+xfpLFgDgJiqys5U2abLiGrxsPgB7c1v7tjQfe32xqPGDHDpqz+r2tU5vWquK8jLrL10AgBdj3AZ8VGWltP58it6bvM98QCRytxqP36PFJ5JVVlFp/aUKAHBDpSkpShk8xHwE9tZWj/QzH3p9se9jOzhs2D6wKFqFOTzKDQDgfIzbALToeJJeH7fbfFAksu7lsTsVeei2ikorrL8sAQAeoCQ5WanD/RX34kvmg7A3FTuxk/nQ66tFDvqmzoP2zC6tdXDJAkZtAIBLMW4DkCQVl1VowdFEvTF+j/nASOTqnhu1XZO2xyunsNT6SxEA4IFKU1P1IDBQ8TyuxCHNmdnVfOT11YIj+9R61A7r0kaHlsWoKC/X+ksRAOCDGLcB/EbssSQ1HsfITd7fc6O2K2DTVT3MK7H+sgMAeIHyhw+VNnmK4hu+Zj4Qe3JTo7qZj7y+2usxryms69c1G7W7fq3Dy2NVnJ9n/aUHAPBhjNsAqlVaXqllJ+/oXZ7JTV7Yq0G7NH33DWXzSm0AgBOUZ2UpY2aYrjd+w3wo9sQCFvHKbctmzxzy1FF7bq/OOrFuJa/UBgC4BcZtAM+09tw9fRxy0HyQJKpvTSbt1aLjSTxTGwDgEhX5BXq0aLFuffyJ+WDsSf2wnGduW9Ys9mOF+DX/zai9cuww3ThxRJUVnKMAAO6DcRtAjR2++VBd5p8yHyiJatt/hx3Wpoupqqi0/ioCAPikigrl7tmj5I6dzIdjT6jXKj/zgdfXiw4c+PObRHZqpZ1zZyrz3h3rryIAAKrFuA2g1m6k5eqnNZfMB0uiZzVwxQUdvfXQ+ksGAIAqRdeuKWXoUMW91MB8RHbXOqz+ynzc9fUCVg3UqQ2refQIAMDtMW4DqLOM3GJN23Vdb4znzSfJffpw2gFFHbqtrAKepw0AcF9l6elKDwnV9TfeNB+T3a3mqz83H3d9sYaLGmrQ/kE6knJEleKvuwEAPAPjNoB6q6iUjtx6qIErzuu5UdvNx03yvf4yert+XH1RZ5IeW385AABQK5VFRcrZvEXJ3bqbj8ruUtMVH5gPvb7UF+u+0Pwr8/W4mHMUAMDzMG4DcKicojItPXlHLcOPmg+e5P19FX5Ui44nK6+4zPqPPgAA9VZ2/74ehofr1kcfmw/MllmPvb7Qa4tf09BDQ3Xy/knrP/YAANQL4zYAp0nIyNeUHfF6fdxu8xGUvKf3p+zXzL03dedRgfUfcQAAnKOyUgUnTyl12HDFv9rQfGx2ZRcbNzQffr251ptaa2ncUmUXZ1v/KQcAwCEYtwE4XUWldOhmhgYs57ElVLcaBe9WwKarunA3y/qPMwAALlWRn6+slat0p3sP8+HZFR3/4j3zAdjbara+mWafn63knGTrP84AADgc4zYAl8ovKdei48lqFXHMfDAl9+6lgJ36YdVF7YtPt/5jCwCAW6jIzlb2hg2626ev4l9+xXyIdkb7On1mPgZ7Q39b+zfNODdD8Y/irf/YAgDgVIzbAMw8yCnSouPJ6jL/lP5rJK/opq1qGLRLw9Zc0oHrGSqrqLT+IwoAgNuqLChQ7o6dSvnhR11v9Lr5KO2otvRraT4Me2qfrP5EU09P1eWHl63/eAIA4DKM2wDcQkFJuXZceaAfVl1Uw6Bd5iMrua7G4/Zo1IYrOpaQqXIGbQAA6iTvwAHdHxOgm++/bz5Q16fVI/3MR2JPqvWm1pp5bqbOp5+3/iMIAIAJxm0Abul00iOF7r7B40u8tFYRxxS6+4bOJD22/qMGAIDXKb5xQ5lRUUru1FlxL75kPljXpphJncwHY3furWVvafCBwVp3c50yizKt/6gBAGCOcRuA28svKdeeuDSN3XRVH4ceNB9mqfb9bcYhBW+5pn3x6SooKbf+IwUAgM+oyMtTzo4dSvUfoRvvvmc+Xj+r8LCu5gOyu/XVxq8UciZEpx+cVlllmfUfKQAA3ArjNgCPk5FbrPXnUzR09UW9Pm63+XBLv+2T6Qc1asMVbbl0X48LSq3/yAAAgL8runJVmQsW6l7/AbrR5B3zMfvXTYnqbj4mW+e3xU+TTk3S5oTNepD/wPqPDAAAbo1xG4DHu5Wep5hjSfo29oxeCthpPuz6Ws+N2q62845ryo547YtPV04RrygCAMBTlN65o+z1G3R/1GglfP6F+bg9ZrFvvXL7i3VfaPjh4Voat1SXHl5SaQUvCgAAoDYYtwF4nXN3srTgaKJ+WHVRn04/ZD7+elufzzykgSsuKPLQbZ1N5pnZAAB4k/KsLOXu3auM6dN1p+d3uvn+By4dt39Y3tl8cHZWn675VAP2DVDExQgdTjms3NJc6//cAAB4PMZtAF6vuKxC5+5kadHxJP205pKazzqi50ZtNx+J3b2mU/er1+KzCt19QzuuPtCt9Dzr/5QAAMBARW6uCk6f1uMlS3V/9BgltW2n+IavOWXc/m5VO/MRur41XNxQbTa30aijo7QkbonOpJ1hyAYAwEkYtwH4pMpK6e7jQu2PT1fkodsauvqiWoYf9anHmvzRf6vembRPHaJOaOT6y4o6dFu7r6XpVnqeSsorrP8TAQAAN1eSlKS8/QeUGRWl+yNHKqlDB9146+16jdsd1rQyH6dr2kerP1KnbZ009OBQzTg3QxtubVD8o3jr/ywAAPgUxm0A+JXswlLdSMvV0VsPte5ciuYeTFDQ5mvqt+yc2s47rqZT9+uFMTvMx+ma9O7kfWo377gGrrigyTviteh4svZfz9CNNF49BAAAnKMiL0+F584re916pYeE6l6//kps87VuffyJrr/e+KnjdvPVn5uP1k2WN9Hnaz+X3xY/9d3bV8EnghV1OUpbbm/RufRzSs1Ptf4tBgAAf8e4DQB1VFharsSH+TqV+EibL6Zq/pFETd15XSPXX1b/5efVZf4pfRV+VB9OO6DXgnfXeJB+YcwOvRq0S29O2Kv3puzXxyEH9d9hh/VV+FG1jzyhnovOaMiqCxqz8apCdt3Q3IMJWnryjjZdTNX++HRduJul9Nxi698eAACA31WemamShAQVnD2r3L17lbV2rTKjo7Xg3DxNPT1VwSeCNeroKA09OFT99/XXd7u/U7cd3eS3xU8tN7bU52s/14erPlST5U2qRunGSxrrg5Uf6PO1n6v1ptbqsr2Lvtv9nQbtH6QRh0co+ESwQs6EaN6leVoev1zbErfpSMoRXX54WXdy7yi7ONv6twUAANQS4zYAAAAAAAAAwOMwbgMAAAAAAAAAPA7jNgAAAAAAAADA4zBuAwAAAAAAAAA8DuM2AAAAAAAAAMDjMG4DAAAAAAAAADwO4zYAAAAAAAAAwOMwbgMAAAAAAAAAPA7jNgAAAAAAAADA4zBuAwAAAAAAAAA8DuM2AAAAAAAAAMDjMG4DAAAAAAAAADwO4zYAAAAAAAAAwOMwbgMAAAAAAAAAPA7jNgAAAAAAAADA4zBuAwAAAAAAAAA8DuM2AAAAAAAAAMDjMG4DAAAAAAAAADwO4zYAAAAAAAAAwOMwbgMAAAAAAAAAPA7jNgAAAAAAAADA4zBuAwAAAAAAAAA8DuM2AAAAAAAAAMDjMG4DAAAAAAAAADwO4zYAAAAAAAAAwOMwbgMAAAAAAAAAPA7jNgAAAAAAAADA4zBuAwAAAAAAAAA8DuM2AAAAAAAAAMDjMG4DAAAAAAAAADwO4zYAAAAAAAAAwOMwbgMAAAAAAAAAPA7jNgAAAAAAAADA4zBuAwAAAAAAAAA8DuM2AAAAAAAAAMDjMG4DAAAAAAAAADwO4zYAAAAAAAAAwOMwbgMAAAAAAAAAPA7jNgAAAAAAAADA4zBuAwAAAAAAAAA8DuM2AAAAAAAAAMDjMG4DAAAAAAAAADwO4zYAAAAAAAAAwOMwbgMAAAAAAAAAPA7jNgAAAAAAAADA4zBuAwAAAAAAAAA8DuM2AAAAAAAAAMDjMG4DAAAAAAAAADwO4zYAAAAAAAAAwOMwbgMAAAAAAAAAPA7jNgAAAAAAAADA4zBuAwAAAAAAAAA8DuM2AAAAAAAAAMDjMG4DAAAAAAAAADwO4zYAAAAAAAAAwOMwbgMAAAAAAAAAPA7jNgAAAAAAAADA4zBuAwAAAAAAAAA8DuM2AAAAAAAAAMDjMG4DAAAAAAAAADwO4zYAAAAAAAAAwOMwbgMAAAAAAAAAPA7jNgAAAAAAAADA4zBuAwAAAAAAAAA8DuM2AAAAAAAAAMDjMG4DAAAAAAAAADwO4zYAAAAAAAAAwOMwbgMAAAAAAAAAPA7jNgAAAAAAAADA4zBuAwAAAAAAAAA8DuM2AAAAAAAAAMDjMG4DAAAAAAAAADwO4zYAAAAAAAAAwOMwbgMAAAAAAAAAPA7jNgAAAAAAAADA4zBuAwAAAAAAAAA8DuM2AAAAAAAAAMDjMG4DAAAAAAAAADwO4zYAAAAAAAAAwOMwbgMAAAAAAAAAPM7/D1uwy1/sqPEiAAAAAElFTkSuQmCC", - "text/html": [ - "
" - ], - "text/vnd.plotly.v1+html": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "import plotly.offline as py\n", - "import plotly.graph_objs as go\n", - "from plotly.offline import get_plotlyjs, init_notebook_mode\n", - "\n", - "snvPandas = oskar.facet(df, \"type[SNV]>>popFreq__GNOMAD_GENOMES__ALL[0..0.5]:0.1\").toPandas()\n", - "indelPandas = oskar.facet(df, \"type[INDEL]>>popFreq__GNOMAD_GENOMES__ALL[0..0.5]:0.1\").toPandas()\n", - "\n", - "init_notebook_mode(connected=True)\n", - "\n", - "fig = {\n", - " \"data\": [\n", - " {\n", - " \"values\": snvPandas[\"count\"],\n", - " \"labels\": snvPandas[\"popFreq__GNOMAD_GENOMES__ALLRange\"],\n", - " \"domain\": {\"x\": [0, .48]},\n", - " \"hole\": .4,\n", - " \"type\": \"pie\"\n", - " },\n", - " {\n", - " \"values\": indelPandas[\"count\"],\n", - " \"labels\": indelPandas[\"popFreq__GNOMAD_GENOMES__ALLRange\"],\n", - " \"domain\": {\"x\": [.51, 1]},\n", - " \"hole\": .4,\n", - " \"type\": \"pie\"\n", - " }],\n", - " \"layout\": {\n", - " \"title\":\"Global alternate population frequencies [ALL]\",\n", - " \"autosize\":False,\n", - " \"width\":1500,\n", - " \"height\":600,\n", - " \"annotations\": [\n", - " {\n", - " \"font\": {\n", - " \"size\": 18\n", - " },\n", - " \"showarrow\": False,\n", - " \"text\": \"SNV\",\n", - " \"x\": 0.22,\n", - " \"y\": 0.5\n", - " },\n", - " {\n", - " \"font\": {\n", - " \"size\": 18\n", - " },\n", - " \"showarrow\": False,\n", - " \"text\": \"INDEL\",\n", - " \"x\": 0.78,\n", - " \"y\": 0.5\n", - " }\n", - " ]\n", - " }\n", - "}\n", - "py.iplot(fig, filename='donut')" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.6.7" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/oskar-spark/src/main/python/notebooks/notebooks/.ipynb_checkpoints/plotly trials-checkpoint.ipynb b/oskar-spark/src/main/python/notebooks/notebooks/.ipynb_checkpoints/plotly trials-checkpoint.ipynb new file mode 100644 index 0000000..22c3221 --- /dev/null +++ b/oskar-spark/src/main/python/notebooks/notebooks/.ipynb_checkpoints/plotly trials-checkpoint.ipynb @@ -0,0 +1,997 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "from pyoskar.core import Oskar\n", + "from pyoskar.sql import *\n", + "from pyoskar.analysis import *\n", + "from pyspark.sql.functions import col, udf, count, explode, concat, when, expr\n", + "from pyspark.sql.functions import *\n", + "\n", + "oskar = Oskar(spark)\n", + "df = oskar.load(\"/home/roldanx/appl/oskar/oskar-spark/src/test/resources/platinum_chr22.small.parquet\")\n", + "df.createOrReplaceTempView(\"platinum\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Variant histogram" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " start count\n", + "0 16000000 101\n", + "1 17000000 100\n", + "2 18000000 85\n", + "3 19000000 53\n", + "4 20000000 46\n", + "5 21000000 85\n", + "6 22000000 52\n", + "7 23000000 49\n", + "8 24000000 44\n", + "9 25000000 62\n", + "10 26000000 42\n", + "11 27000000 54\n", + "12 28000000 21\n", + "13 29000000 29\n", + "14 30000000 38\n", + "15 31000000 46\n", + "16 32000000 44\n", + "17 33000000 34\n", + "18 34000000 15\n" + ] + } + ], + "source": [ + "import numpy as np\n", + "\n", + "pandasDF = oskar.histogram(df,\"start\",1000000).toPandas()\n", + "print(pandasDF)" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[Text(0, 0.5, 'Counts'), Text(0.5, 0, 'Region')]" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAABXQAAAEyCAYAAABau1igAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvOIA7rQAAIABJREFUeJzt3XuYZWdZJ+zfkzQQOZiQgxHSYEdBEx0gSDgow0AS0CAqfA4Q0A8ConEGMaKMEgY/SWZ0Jo7KBBgBUQ6JwxAwHoKCHISAohxygDGGQIIQtJFATAjiOAghz/fH3t2p7l6r06l01apd+76va19Ve61dVU//rvdda/dTq95V3R0AAAAAADa+A6YuAAAAAACAfaOhCwAAAACwIDR0AQAAAAAWhIYuAAAAAMCC0NAFAAAAAFgQGroAAAAAAAtCQxcAAAAAYEFo6AIAAAAALAgNXQAAAACABbFl6gJuj8MPP7y3bds2dRkAAAAAALfLpZde+g/dfcStvW6hG7rbtm3LJZdcMnUZAAAAAAC3S1V9el9eZ8kFAAAAAIAFoaELAAAAALAgNHQBAAAAABbEQq+hCwAAAAAsnq9+9avZvn17vvzlL09dyro76KCDsnXr1tzhDndY1ddr6AIAAAAA62r79u25293ulm3btqWqpi5n3XR3rr/++mzfvj1HH330qr6HJRcAAAAAgHX15S9/OYcddthSNXOTpKpy2GGH3a4rkzV0AQAAAIB1t2zN3B1u7797zRq6VfWaqvp8Vf31im2HVtU7q+rq+ce7z7dXVb20qj5RVX9VVd+5VnUBAAAAACyqtVxD93VJ/keS81ZsOyPJu7r77Ko6Y/78+Ukem+S+88dDk7xi/nFdbDvjLev1o27VNWc/buoSAAAAAGBd7e/+3EbosZ1zzjk57bTTcuc733m/ft81u0K3u/8syQ27bX58knPnn5+b5Akrtp/XMx9IckhV3WOtagMAAAAAWEvnnHNO/vmf/3m/f9/1XkP3yO7+7Pzza5McOf/8qCR/t+J12+fbAAAAAADWxHnnnZf73//+ecADHpCnPe1pueaaa3LiiSfm/ve/f0466aT87d/+bZLkGc94Ri644IKdX3fXu941SfKe97wnj3rUo/LEJz4xxxxzTH7kR34k3Z2XvvSl+fu///uccMIJOeGEE/ZrzWu55MJedXdXVd/Wr6uq05KcliT3vve993tdrHDmwVNXcIszvzh1BQAAAABsIldccUV+6Zd+KX/5l3+Zww8/PDfccENOPfXUnY/XvOY1Of300/OHf/iHe/0+H/7wh3PFFVfknve8Zx7+8IfnL/7iL3L66afnxS9+cS666KIcfvjh+7Xu9b5C93M7llKYf/z8fPtnktxrxeu2zrftobtf1d3Hd/fxRxxxxJoWCwAAAABsTu9+97vzpCc9aWfD9dBDD8373//+/PAP/3CS5GlPe1re97733er3echDHpKtW7fmgAMOyHHHHZdrrrlmLcte94bum5OcOv/81CQXrtj+9Jp5WJIvrliaAQAAAABgMlu2bMnNN9+cJLn55pvzla98Zee+O93pTjs/P/DAA3PTTTetaS1r1tCtqjckeX+Sb6uq7VX1rCRnJ3lMVV2d5NHz50ny1iSfTPKJJL+V5NlrVRcAAAAAwIknnpjf/d3fzfXXX58kueGGG/Ld3/3dOf/885Mkr3/96/OIRzwiSbJt27ZceumlSZI3v/nN+epXv3qr3/9ud7tbvvSlL+33utdsDd3ufurIrpMGXttJfnKtagEAAAAANq5rzn7cuv/M7/iO78gLX/jCPPKRj8yBBx6YBz7wgXnZy16WZz7zmfnVX/3VHHHEEXnta1+bJPnxH//xPP7xj88DHvCAnHzyybnLXe5yq9//tNNOy8knn5x73vOeueiii/Zb3TXrpS6m448/vi+55JLb/X22nfGW/VDN/jHF4B3lpmgAAAAArIErr7wyxx577NRlTGbo319Vl3b38bf2teu9hi4AAAAAAKukoQsAAAAAsCA0dAEAAACAdbfIS8HeHrf3362hCwAAAACsq4MOOijXX3/90jV1uzvXX399DjrooFV/jy37sR4AAAAAgFu1devWbN++Pdddd93Upay7gw46KFu3bl3112voAgAAAADr6g53uEOOPvroqctYSJZcAAAAAABYEBq6AAAAAAALQkMXAAAAAGBBaOgCAAAAACwIDV0AAAAAgAWhoQsAAAAAsCA0dAEAAAAAFoSGLgAAAADAgtDQBQAAAABYEBq6AAAAAAALQkMXAAAAAGBBaOgCAAAAACwIDV0AAAAAgAWhoQsAAAAAsCA0dAEAAAAAFoSGLgAAAADAgtDQBQAAAABYEBq6AAAAAAALYsvUBcAiut+5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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "import pandas as pd\n", + "\n", + "pandasDF = oskar.histogram(df,\"start\",1000000).toPandas()\n", + "histogram = pandasDF.plot(x = \"start\", y = \"count\", kind = \"bar\", figsize=(24,4))\n", + "histogram.set(xlabel=\"Region\", ylabel=\"Counts\")" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "" + ], + "text/vnd.plotly.v1+html": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.plotly.v1+json": { + "config": { + "linkText": "Export to plot.ly", + "plotlyServerURL": "https://plot.ly", + "showLink": true + }, + "data": [ + { + "type": "bar", + "uid": "75513143-1b57-4b64-9da2-b4cd1339e703", + "x": [ + 16000000, + 17000000, + 18000000, + 19000000, + 20000000, + 21000000, + 22000000, + 23000000, + 24000000, + 25000000, + 26000000, + 27000000, + 28000000, + 29000000, + 30000000, + 31000000, + 32000000, + 33000000, + 34000000 + ], + "y": [ + 101, + 100, + 85, + 53, + 46, + 85, + 52, + 49, + 44, + 62, + 42, + 54, + 21, + 29, + 38, + 46, + 44, + 34, + 15 + ] + } + ], + "layout": { + "autosize": true, + "xaxis": { + "autorange": true, + "range": [ + 15500000, + 34500000 + ], + "type": "linear" + }, + "yaxis": { + "autorange": true, + "range": [ + 0, + 106.3157894736842 + ], + "type": "linear" + } + } + }, + "image/png": "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", + "text/html": [ + "
" + ], + "text/vnd.plotly.v1+html": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import pandas as pd\n", + "import numpy as np\n", + "import scipy as sp\n", + "import plotly.offline as py\n", + "import plotly.figure_factory as ff\n", + "import plotly.graph_objs as go\n", + "from plotly.offline import get_plotlyjs, init_notebook_mode\n", + "\n", + "pandasDF = oskar.histogram(df,\"start\",1000000).toPandas()\n", + "\n", + "get_plotlyjs()\n", + "init_notebook_mode(connected=True)\n", + "\n", + "data = [go.Bar(x=pandasDF[\"start\"], y=pandasDF[\"count\"])]\n", + "py.iplot(data)" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "" + ], + "text/vnd.plotly.v1+html": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.plotly.v1+json": { + "config": { + "linkText": "Export to plot.ly", + "plotlyServerURL": "https://plot.ly", + "showLink": true + }, + "data": [ + { + "hoverinfo": "text", + "marker": { + "color": "rgb(61,153,112)" + }, + "mode": "lines", + "type": "scatter", + "uid": "33df76e2-a40b-46f6-85b6-eaa89342b8f1", + "x": [ + 15, + 15, + 25, + 25 + ], + "xaxis": "x", + "y": [ + 0, + 14, + 14, + 0 + ], + "yaxis": "y" + }, + { + "hoverinfo": "text", + "marker": { + "color": "rgb(61,153,112)" + }, + "mode": "lines", + "type": "scatter", + "uid": "f0e4718c-8a94-43a3-b7b2-f2aead5e43cc", + "x": [ + 45, + 45, + 55, + 55 + ], + "xaxis": "x", + "y": [ + 0, + 7.937253933193772, + 7.937253933193772, + 0 + ], + "yaxis": "y" + }, + { + "hoverinfo": "text", + "marker": { + "color": "rgb(61,153,112)" + }, + "mode": "lines", + "type": "scatter", + "uid": "964ac19f-f803-4502-9e62-94537c374184", + "x": [ + 35, + 35, + 50, + 50 + ], + "xaxis": "x", + "y": [ + 0, + 22.538855339169288, + 22.538855339169288, + 7.937253933193772 + ], + "yaxis": "y" + }, + { + "hoverinfo": "text", + "marker": { + "color": "rgb(61,153,112)" + }, + "mode": "lines", + "type": "scatter", + "uid": "612b220c-63a5-49ce-9902-97cd98ee444c", + "x": [ + 20, + 20, + 42.5, + 42.5 + ], + "xaxis": "x", + "y": [ + 14, + 40.22437072223753, + 40.22437072223753, + 22.538855339169288 + ], + "yaxis": "y" + }, + { + "hoverinfo": "text", + "marker": { + "color": "rgb(61,153,112)" + }, + "mode": "lines", + "type": "scatter", + "uid": "99d81210-eac1-4fb5-9d1c-75019cd9ba9d", + "x": [ + 5, + 5, + 31.25, + 31.25 + ], + "xaxis": "x", + "y": [ + 0, + 49.01020301937138, + 49.01020301937138, + 40.22437072223753 + ], + "yaxis": "y" + }, + { + "hoverinfo": "text", + "marker": { + "color": "rgb(61,153,112)" + }, + "mode": "lines", + "type": "scatter", + "uid": "1eb57830-1275-4d76-81ee-a26134239240", + "x": [ + 85, + 85, + 95, + 95 + ], + "xaxis": "x", + "y": [ + 0, + 1, + 1, + 0 + ], + "yaxis": "y" + }, + { + "hoverinfo": "text", + "marker": { + "color": "rgb(61,153,112)" + }, + "mode": "lines", + "type": "scatter", + "uid": "f5f976b6-0ca1-4397-8133-9545231b441c", + "x": [ + 75, + 75, + 90, + 90 + ], + "xaxis": "x", + "y": [ + 0, + 21.93171219946131, + 21.93171219946131, + 1 + ], + "yaxis": "y" + }, + { + "hoverinfo": "text", + "marker": { + "color": "rgb(61,153,112)" + }, + "mode": "lines", + "type": "scatter", + "uid": "05b2e115-a852-4a79-adc2-9e68134c67c2", + "x": [ + 65, + 65, + 82.5, + 82.5 + ], + "xaxis": "x", + "y": [ + 0, + 55.00909015790027, + 55.00909015790027, + 21.93171219946131 + ], + "yaxis": "y" + }, + { + "hoverinfo": "text", + "marker": { + "color": "rgb(61,153,112)" + }, + "mode": "lines", + "type": "scatter", + "uid": "af396f60-958e-4763-91c7-b1417617e588", + "x": [ + 18.125, + 18.125, + 73.75, + 73.75 + ], + "xaxis": "x", + "y": [ + 49.01020301937138, + 89.05616205518852, + 89.05616205518852, + 55.00909015790027 + ], + "yaxis": "y" + }, + { + "hoverinfo": "text", + "marker": { + "color": "rgb(255,65,54)" + }, + "mode": "lines", + "type": "scatter", + "uid": "ac6eb5b2-1794-4981-a763-36535141c8cd", + "x": [ + 105, + 105, + 115, + 115 + ], + "xaxis": "x", + "y": [ + 0, + 22, + 22, + 0 + ], + "yaxis": "y" + }, + { + "hoverinfo": "text", + "marker": { + "color": "rgb(255,65,54)" + }, + "mode": "lines", + "type": "scatter", + "uid": "72fa80a4-dca7-4223-b98f-948230261967", + "x": [ + 125, + 125, + 135, + 135 + ], + "xaxis": "x", + "y": [ + 0, + 8, + 8, + 0 + ], + "yaxis": "y" + }, + { + "hoverinfo": "text", + "marker": { + "color": "rgb(255,65,54)" + }, + "mode": "lines", + "type": "scatter", + "uid": "97a53470-398c-4472-a1be-dc9fd9a272ec", + "x": [ + 145, + 145, + 155, + 155 + ], + "xaxis": "x", + "y": [ + 0, + 20.8806130178211, + 20.8806130178211, + 0 + ], + "yaxis": "y" + }, + { + "hoverinfo": "text", + "marker": { + "color": "rgb(255,65,54)" + }, + "mode": "lines", + "type": "scatter", + "uid": "7502d126-c5b2-4e46-9dc4-fa0a20bff326", + "x": [ + 130, + 130, + 150, + 150 + ], + "xaxis": "x", + "y": [ + 8, + 36.742346141747674, + 36.742346141747674, + 20.8806130178211 + ], + "yaxis": "y" + }, + { + "hoverinfo": "text", + "marker": { + "color": "rgb(255,65,54)" + }, + "mode": "lines", + "type": "scatter", + "uid": "d1f3cbe0-0915-46f6-81e7-71cd2aa4b1ae", + "x": [ + 110, + 110, + 140, + 140 + ], + "xaxis": "x", + "y": [ + 22, + 51.0098029794274, + 51.0098029794274, + 36.742346141747674 + ], + "yaxis": "y" + }, + { + "hoverinfo": "text", + "marker": { + "color": "rgb(255,65,54)" + }, + "mode": "lines", + "type": "scatter", + "uid": "8942934b-1325-4855-b6df-51c5ab3a5605", + "x": [ + 175, + 175, + 185, + 185 + ], + "xaxis": "x", + "y": [ + 0, + 28.844410203711913, + 28.844410203711913, + 0 + ], + "yaxis": "y" + }, + { + "hoverinfo": "text", + "marker": { + "color": "rgb(255,65,54)" + }, + "mode": "lines", + "type": "scatter", + "uid": "fd1c7e73-f0d9-4e55-9b05-9143c1585f6a", + "x": [ + 165, + 165, + 180, + 180 + ], + "xaxis": "x", + "y": [ + 0, + 73.72923436466705, + 73.72923436466705, + 28.844410203711913 + ], + "yaxis": "y" + }, + { + "hoverinfo": "text", + "marker": { + "color": "rgb(255,65,54)" + }, + "mode": "lines", + "type": "scatter", + "uid": "07311b97-5403-43f4-ae38-42b9da358e23", + "x": [ + 125, + 125, + 172.5, + 172.5 + ], + "xaxis": "x", + "y": [ + 51.0098029794274, + 128.7555824032496, + 128.7555824032496, + 73.72923436466705 + ], + "yaxis": "y" + }, + { + "hoverinfo": "text", + "marker": { + "color": "rgb(0,116,217)" + }, + "mode": "lines", + "type": "scatter", + "uid": "29f1e126-b9c0-4758-a313-c8830bb76b8d", + "x": [ + 45.9375, + 45.9375, + 148.75, + 148.75 + ], + "xaxis": "x", + "y": [ + 89.05616205518852, + 200.37215375395854, + 200.37215375395854, + 128.7555824032496 + ], + "yaxis": "y" + } + ], + "layout": { + "autosize": false, + "height": 400, + "hovermode": "closest", + "showlegend": false, + "width": 1440, + "xaxis": { + "autorange": true, + "mirror": "allticks", + "range": [ + 0, + 185 + ], + "rangemode": "tozero", + "showgrid": false, + "showline": true, + "showticklabels": true, + "tickmode": "array", + "ticks": "outside", + "ticktext": [ + "9", + "3", + "4", + "11", + "6", + "7", + "5", + "2", + "0", + "1", + "14", + "17", + "15", + "16", + "8", + "10", + "18", + "12", + "13" + ], + "tickvals": [ + 5, + 15, + 25, + 35, + 45, + 55, + 65, + 75, + 85, + 95, + 105, + 115, + 125, + 135, + 145, + 155, + 165, + 175, + 185 + ], + "type": "linear", + "zeroline": false + }, + "yaxis": { + "autorange": true, + "mirror": "allticks", + "range": [ + 0, + 210.91805658311426 + ], + "rangemode": "tozero", + "showgrid": false, + "showline": true, + "showticklabels": true, + "ticks": "outside", + "type": "linear", + "zeroline": false + } + } + }, + "image/png": "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7svp06e7Plbnpqen44UXXojjx4/HM888E6tWrYqf/vSnXR+rU9u2bYupqamYm5uLw4cPx/j4eBw8eLDrY3XK8+acYe5Dba9dBt2Tmp9HF9qVGp9JF7onXtNFfOYzn4lHHnkkIiLeeuutmJycjAcffLDjU7XvQrtS43P6Qvek1t250H2p8XXuhe6J/vThCdKXsJdeeimuuOKKePfddxc/tmvXrpiamurwVOV4991345VXXol169bFoUOHuj5OEf72b/82pqen4/vf/34Vf6g7n/vvv39gALjQ9VE2OTkZTzzxRNfHKNrbb78d11xzTTz77LNdH6VTO3fujLvuuqvrYxRvcnIyHn300a6P0Zn5+fno9/tx5MiRxY9NT0/H9u3bOzxVOWp+3rzXoPtQ62uXYXajxufR+e5Lzc+k892T2l/Tvfvuu3HZZZfFCy+8sPix+++/P+68884OT9Wtpl2p/TnddE/szvCvT2p6nXuhe6I/fXCC9CXswIEDMTY2tuRjTz75ZGzYsKGjE5Wl1+vFypUrq34h9l67du2KO+64I86ePVvdH+reT5Bu9tZbb0Wv14tt27bFxMRErF69OrZu3RpvvfVW10cryuOPP17Fu9EuZOfOnbF69eq46qqrYsOGDd4J0OD06dMxNjYWzz//fNdH6czRo0ej1+steafizMxMbNq0qcNTlaPW5837ne8+1PzaZZjdqPF5NChI1/pMaronXtOdMz09HePj47F37944cuRIrF+/fkl4rU3TrtT+nD7f7ym1784wz6DaXude6J7oTx+cIH0JO378eFxxxRXx7W9/O86cORNvvPFGfOUrXxGk/2Dhf6G6+uqr40c/+lHXx+nUk08+GZs3b4533nknIqK6P9S9nyDd7JVXXolerxcHDx6MU6dOxeuvvx7XX399bNu2reujFeP06dNx5ZVXxosvvtj1UTr32muvxauvvhrHjh2LAwcOxJVXXhmPP/5418cqyp133hk333xznD17tuujdGZ2djZ6vd6Se7Bv375Yv359h6cqR63Pm/drug+1v3a50G7U+jw6332p+ZnUdE+8pjvnH//xH2PDhg2xffv2WL16dUxNTcWpU6e6PlZnmnal9uf0+X5PqX13hnl9Utvr3GHfIa0/DU+QvsS9+OKL8dnPfjb6/X6sW7curr/++rj11lu7PlZRdu7cWd2Lr/d74IEHYuXKldHv96Pf78dll10WvV4v+v3+yH9/vSaCdLOFP7y899sA/eQnP4lPfOITHZ6qLA899FDceOONXR+jSA899FDccMMNXR+jGPfdd19s2LChunejvd/CO6/e+31LZ2ZmYuPGjR2eqhy1Pm/er+k+1P7a5UK7UevzaNivmZqeSYOCdM2v6d5888340z/90/jVr34VERG//e1v46abbqr621sOeod0rc/ppntidy78e22Nr3OHff7oT8MTpEfMTTfdFP/wD//Q9TGKcs8998Qdd9zR9TGKUtu7jN5PkG526tSpuOyyy+KVV15Z/NjBgwfj6quv7vBU5fjtb38bV1xxRbz88stdH6VIu3btittuu63rY3TunXfeiTvvvDMmJyerepF+PvPz87Fy5col/zfXHTt2xO23397hqcpR6/Pm/Ya5D7W9dhl0T2p+Hg37NVPTM6npnnhNd+7vW1q9evWSj+3bty+uueaajk7UvfN9D+man9NN98TunP/32ppf5w77/NGfhidIX+J+85vfxJtvvhmvvvpqfOUrX4nPfvaz1f3tye/17rvvxq233hqHDh2Kubm5+NGPfhSrV6+OZ555puujFaW2P9S9nyB9fn/zN38T1113XczNzcUbb7wRk5OT8Y1vfKPrYxXhgQceiC9+8YtdH6MY99xzz+Lvtc8++2yMjY3F/v37uz5Wp95555246aab4otf/GKcOHEiTp06FadOnari3ZyDTE1NxdatW+P48eMxOzsbExMT1e/KgpqfN+8lSKcG3ZOan0fnuy81P5POd09qf0331ltvxdjYWDzyyCNx9uzZOHXqVGzevDnuueeero/WmfPtSs3P6fN9D/bad6fpvtT+Ovd8fwGm/vThCdKXuEcffTQuu+yy+NSnPhX33HNP/Pa3v+36SJ06e/ZsfPnLX45rrrkm+v1+rF+/Pp588smuj1Wc2v5Qt+Cpp56KsbGxWLVqVfT7/RgbG4unn3566Os1+N3vfhdf/vKXY2xsLD71qU/Frl274u233+76WJ174403YvXq1VX9ZSYX8vWvfz2uvvrq6Pf7sXbt2ti7d2/XR+rcyZMno9frJbNu3bquj9apubm52Lx5c/T7/RgfH4/du3d3faTOed6c80HuQy2vXS50T2p9Hl3ovtT4TLrQPfGaLuLnP/95TE5OxsTERKxZsybuu++++P3vf9/1sVp3oV2p8Tl9oXtS6+4Mui+1vs4ddE/0pzyCNAAAAAAArRCkAQAAAABohSANAAAAAEArBGkAAAAAAFohSAMAAAAA0ApBGgAAAACAVgjSAAAAAAC0QpAGAAAAAKAVgjQAAAAAAK0QpAEAAAAAaIUgDQAAAABAKwRpAAAAAABaIUgDAAAAANAKQRoAAAAAgFYI0gAAAAAAtEKQBgAAAACgFYI0AAAAAACtEKQBAAAAAGiFIA0AAAAAQCsEaQAAAAAAWiFIAwAAAADQCkEaAAAAAIBWCNIAAAAAALRCkAYAAAAAoBWCNAAAAAAArRCkAQAAAABohSANAAAAAEArBGkAAAAAAFohSAMAAAAA0ApBGgAAAACAVgjSAAAAAAC0QpAGAAAAAKAVgjQAAAAAAK0QpAEAAAAAaIUgDQAAAABAKwRpAAAAAABaIUgDAAAAANAKQRoAAAAAgFYI0gAAAAAAtEKQBgAAAACgFYI0AAAAAACtEKQBAAAAAGiFIA0AAAAAQCsEaQAAAAAAWiFIAwAAAADQCkEaAAAAAIBWCNIAAAAAALRCkAYAAAAAoBWCNAAAAAAArRCkAQAAAABohSANAAAAAEArBGkAAAAAAFohSAMAAAAA0ApBGgAAAACAVgjSAAAAAAC0QpAGAAAAAKAVgjQAAAAAAK0QpAEAAAAAaIUgDQAAAABAKwRpAAAAAABa8f8DglxJDG7pGxUAAAAASUVORK5CYII=", + "text/html": [ + "
" + ], + "text/vnd.plotly.v1+html": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import plotly.offline as py\n", + "import plotly.figure_factory as ff\n", + "from plotly.offline import get_plotlyjs, init_notebook_mode\n", + "\n", + "import numpy as np\n", + "\n", + "init_notebook_mode(connected=True)\n", + "\n", + "pandasDF = oskar.histogram(df,\"start\",1000000).toPandas()\n", + "# print(pandasDF)\n", + "dim = len(pandasDF[\"count\"])\n", + "X = np.zeros((dim, dim))\n", + "for i in range(dim):\n", + " for j in range(i,dim):\n", + " X[j, i] = pandasDF[\"count\"][i] - pandasDF[\"count\"][j]\n", + "# print(X)\n", + "# labels = [pandasDF[\"start\"]]\n", + "fig = ff.create_dendrogram(X)\n", + "fig['layout'].update({'width':1440, 'height':400})\n", + "py.iplot(fig, filename='dendrogram_with_labels')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Con extensión renderizando con Plotly Python" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.plotly.v1+json": { + "config": { + "linkText": "Export to plot.ly", + "plotlyServerURL": "https://plot.ly", + "showLink": true + }, + "data": [ + { + "type": "heatmap", + "uid": "f1070ce3-43dc-472c-8e1f-9b6b4431f77b", + "z": [ + [ + 1, + 20, + 30 + ], + [ + 20, + 1, + 60 + ], + [ + 30, + 60, + 1 + ] + ], + "zauto": true, + "zmax": 60, + "zmin": 1 + } + ], + "layout": { + "autosize": true, + "xaxis": { + "autorange": true, + "range": [ + -0.5, + 2.5 + ] + }, + "yaxis": { + "autorange": true, + "range": [ + -0.5, + 2.5 + ] + } + } + }, + "image/png": "iVBORw0KGgoAAAANSUhEUgAABQkAAAFoCAYAAAD0GX0ZAAAgAElEQVR4nO3de5Df9X3f+/5z5kx7pj3tOZ30dNpMmnMSx8bGBswdc19k/RZxWXYNmJuEMBaWfFkLgwBJsEIghACBxEWsRUI/0ETjlBDHsRziqCQkIhV2wGoTO0qlYqM4p0nsWamBSJNF1vv84Vo9GvkifTb6vnf383jMPP9gV2v//Jvf/Ob3eo+8/IMAAAAAAJr2D7IfAAAAAACQy5EQAAAAABrnSAgAAAAAjXMkBAAAAIDGORICAAAAQOMcCQEAAACgcY6EAAAAANA4R0IAAAAAaJwjIQAAAAA0zpEQAAAAABrnSAgAAAAAjXMkBAAAAIDGORICAAAAQOMcCQEAAACgcY6EAAAAANA4R0IAAAAAaJwjIQAAAAA0zpEQAAAAABrnSAgAAAAAjXMkBAAAAIDGORICAAAAQOMcCQEAAACgcY6EAAAAANA4R0IAAAAAaJwjIQAAAAA0zpEQAAAAABrnSAgAAAAAjXMkBAAAAIDGORICAAAAQOMcCQEAAACgcY6EAAAAANA4R0IAAAAAaJwjIQAAAAA0zpEQAAAAABrnSAgAAAAAjXMkBAAAAIDGORICAAAAQOMcCQEAAACgcY6EAAAAANA4R0IAAAAAaJwjIQAAAAA0zpEQAAAAABrnSAgAAAAAjXMkBAAAAIDGORICAAAAQOMcCQEAAACgcY6EAAAAANA4R0IAAAAAaJwjIQAAAAA0zpEQAAAAABrnSAgAAAAAjXMkBAAAAIDGORICAAAAQOMcCQEAAACgcY6EAAAAANA4R0IAAAAAaJwjIQAAAAA0zpEQAAAAABrnSAgAAAAAjXMkBAAAAIDGORICAAAAQOMcCQEAAACgcY6EAAAAANA4R0IAAAAAaJwjIQAAAAA0zpEQAAAAABrnSAgAAAAAjXMkBAAAAIDGORICAAAAQOMcCQEAAACgcY6EAAAAANA4R0IAAAAAaJwjIQAAAAA0zpEQAAAAABrnSAgAAAAAjXMkBAAAAIDGORICAAAAQOMcCQEAAACgcY6EAAAAANA4R0IAAAAAaJwjIQAAAAA0zpEQAAAAABrnSAgAAAAAjXMkBAAAAIDGORICAAAAQOMcCQEAAACgcY6EAAAAANA4R0IAAAAAaJwjIQAAAAA0zpEQAAAAABrnSAgAAAAAjXMkBAAAAIDGORICAAAAQOMcCQEAAACgcY6EAAAAANA4R0IAAAAAaJwjIQAAAAA0zpEQAAAAABrnSAgAAAAAjXMknKDf/p2XJElTtC/8o38tSZqC/S//6DlJ0hSNycuRcIKyB64kqb7skStJqit74EqS6mPyciScoOyBK0mqL3vkSpLqyh64kqT6mLwcCScoe+BKkurLHrmSpLqyB64kqT4mL0fCCcoeuJKk+rJHriSpruyBK0mqj8nLkXCCsgeuJKm+7JErSaore+BKkurjf/rGN74RixYtiosuuih6vV585zvfOfC93bt3x9KlS6O/vz+GhoZiw4YNR/3xOBJOUPbAlSTVlz1yJUl1ZQ9cSVJ9fN/Xv/71GBwcjI0bN8Zf//Vfx1/91V/F+Pj4ge8vX748RkZGYmxsLLZt2xaDg4OxZcuWo/qYHAknKHvgSpLqyx65kqS6sgeuJKk+vm94eDi+9KUv/dDvjY+PR6/Xix07dhz42ujoaKxcufKoPiZHwgnKHriSpPqyR64kqa7sgStJqo+It956K/r6+mL58uUxNDQUs2bNimXLlsVbb70VERE7d+6Mvr6+2Lt374Gf2bhxYyxYsOCoPi5HwgnKHriSpPqyR64kqa7sgStJqi/T1q1bo5SS0tatWw88jtdffz36+vpiy5YtsWfPnvjOd74TN998cyxfvjwiIrZv3x59fX2xf//+Az+zadOmmDt37lF9fhwJJyh74EqS6sseuZKkurIHriSpvkyllJh90ulxxy8c12lzTjo9SikHHscPjoTf+973Dnztq1/9alx00UUR8T//JuH//3cUbty4MebPn39Unx9HwgnKHriSpPqyR64kqa7sgStJqi9TKSUWv+u4+M1/8tOdtuRdxx10JNyzZ0/MmDEjXn/99QNf27JlS1x99dUR8f3fSThz5syDfifhunXrYsWKFUf1+XEknKDsgStJqi975EqS6soeuJKk+jKVUmLJMcfHF//Zz3TakmOOP+hIGBFx7733xsKFC2NsbCy++93vxvDwcDz99NMHvj8yMhLLli2LXbt2xfbt22NoaCg2b958VJ8fR8IJyh64kqT6skeuJKmu7IErSaovUykllrz7hNj4f/6bTlv67hMOORL+7d/+bTzwwAMxMDAQl19+eTz11FPx9ttvH/j+2NhYLF68OHq9XgwODsazzz571J8fR8IJyh64kqT6skeuJKmu7IErSaovUykllh57Qnzpp36205Yee+iRcDJyJJyg7IErSaove+RKkurKHriSpPoylVJi6XvfH7/1L/+fTrvzve93JGxB9sCVJNWXPXIlSXVlD1xJUn2ZSilx53Enxm//65/rtLuOO9GRsAXZA1eSVF/2yJUk1ZU9cCVJ9WUqpcRdx58YX/6Zn++0u453JGxC9sCVJNWXPXIlSXVlD1xJUn2ZSilx1wknxe/87Ds6beSEkxwJW5A9cCVJ9WWPXElSXdkDV5JUX6ZSSoyceHJs+rl3dtrIiSc7ErYge+BKkurLHrmSpLqyB64kqb5MpZQYOenk+A+/8K5OW3aSI2ETsgeuJKm+7JErSaore+BKkurLVEqJZaecEi8ec0ynLTvlFEfCFmQPXElSfdkjV5JUV/bAlSTVl6mUEstOPTV+99j3dNrdp57qSNiC7IErSaove+RKkurKHriSpPoylVLi7tNOjd9737GddvdpjoRNyB64kqT6skeuJKmu7IErSaovUykl7j7jtHjphPd22vIzTnMknCqefvrpmD17dvR6vbjmmmvi+eefP+yfzR64kqT6skeuJKmu7IErSaovUyklln/g9Pj9k47rtOUfON2RcKoYHR2NrVu3xq5du+KVV16J/v7+eO211w7rZ7MHriSpvuyRK0mqK3vgSpLqy1RKieVnnR5/cOrxnXbPWY6EU9bw8HA899zhvXCzB64kqb7skStJqit74EqS6stUSol7zj4jNp9xQqfdc/YZjoRT0d69e2NgYCBeffXVw/rz2QNXklRf9siVJNWVPXAlSfVlKqXEveeeEX941vs77d5zHQmnpFWrVsWiRYti//79B339mWeeOaQIR0JJmsplj1xJUl3ZA1eSVF+mUkrce94H4j+ec1KnrTjvA46EU80TTzwR8+bNi7feeuuQ75VSDinCkVCSpnLZI1eSVFf2wJUk1ZeplBIrzj8ztpx/cqetOP9MR8KpYt++fbFq1aoYHh7+oQfCHyd74EqS6sseuZKkurIHriSpvkyllFhxwZnxyoxTOu2+CxwJp4R9+/bFrbfeGkuWLIndu3fHnj17Ys+ePbF3797D+vnsgStJqi975EqS6soeuJKk+jKVUuK+GWfFV3qnddp9M85yJJwK3nzzzejr6zukOXPmHNbPZw9cSVJ92SNXklRX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", + "text/html": [ + "
" + ], + "text/vnd.plotly.v1+html": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import plotly\n", + "from plotly.offline import iplot\n", + "\n", + "trace = plotly.graph_objs.Heatmap(z=[[1, 20, 30],\n", + " [20, 1, 60],\n", + " [30, 60, 1]])\n", + "\n", + "fig = dict(data=[trace])\n", + "\n", + "iplot(fig)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Con extensión renderizando con Plotly JSON" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.plotly.v1+json": { + "data": [ + { + "type": "scatter", + "x": [ + 1999, + 2000, + 2001, + 2002 + ], + "y": [ + 10, + 15, + 13, + 17 + ] + }, + { + "type": "scatter", + "x": [ + 1999, + 2000, + 2001, + 2002 + ], + "y": [ + 16, + 5, + 11, + 9 + ] + } + ], + "layout": { + "autosize": true, + "title": "Sales Growth", + "xaxis": { + "autorange": true, + "range": [ + 1998.820445406743, + 2002.179554593257 + ], + "showgrid": false, + "title": "Year", + "type": "linear", + "zeroline": false + }, + "yaxis": { + "autorange": true, + "range": [ + 4.009708737864078, + 17.990291262135923 + ], + "showline": false, + "title": "Percent", + "type": "linear" + } + } + }, + "image/png": "iVBORw0KGgoAAAANSUhEUgAABQkAAAFoCAYAAAD0GX0ZAAAgAElEQVR4nOzd91eVd773//sfOP18zzn3WeeeJDOZZEqmnJlMz2Rmkm3BYJARJRoTE01iYqIxRaMiir1jwQ6K2LDEDggISO9VmvTee4cNm9f3B0cYFBATdYP7+VjrWituNpv3hVHkyef6XP9HAAAAAAAAACza/zH3AAAAAAAAAADMi0gIAAAAAAAAWDgiIQAAAAAAAGDhiIQAAAAAAACAhSMSAgAAAAAAABaOSAgAAAAAAABYOCIhAAAAAAAAYOGIhAAAAAAAAICFIxICAAAAAAAAFo5ICAAAAAAAAFg4IiEAAAAAAABg4YiEAAAAAAAAgIUjEgIAAAAAAAAWjkgIAAAAAAAAWDgiIQAAAAAAAGDhiIQAAAAAAACAhSMSAgAAAAAAABaOSAgAAAAAAABYOCIhAAAAAAAAYOGIhAAAAAAAAICFIxICAAAAAAAAFo5ICAAAAAAAAFg4IiEAAAAAAABg4YiEAAAAAAAAgIUjEgIAAAAAAAAWjkgIAAAAAAAAWDgiIQAAAAAAAGDhiIQAAAAAAACAhSMSAgAAAAAAABaOSAgAAAAAAABYOCIhAAAAAAAAYOGIhAAAAAAAAICFIxICAAAAAAAAFo5ICAAAAAAAAFg4IiEAAAAAAABg4YiEAAAAZnT27FkZDAZVV1ebe5Qxy9PTUwaDQXV1deYeBQAAYMwiEgIAAIxQS0uLPDw89P7778va2lqTJk3S22+/rXXr1ikoKEg9PT0P/JrmjoQdHR06f/68Fi1aJFtbW40fP15Tp07V4sWL9fXXX6u5udksc90tIyNDHh4eamlpuedtREIAAIBvj0gIAAAwAtXV1ZoxY4bGjRsnBwcHubm56eDBg1q6dKkmTZokg8Gg0tLSB35dc0bCkpISzZ49WwaDQYsWLZKbm5uOHj0qZ2dnzZkzRwaDQTY2No99rsGcP39eBoNBFRUV97yNSAgAAPDtEQkBAABGYPv27TIYDIqOjr7nbc3NzXJzc1NlZeUDv665ImFbW5veeustWVtbD3pOkpSenq4vvvjisc41FCIhAADAo0UkBAAAGIFPPvnkgVbV5eXl6csvv9Qbb7yhiRMnytraWosWLbonyA0VCevr6+Xs7Kzp06drwoQJeuutt+Tp6SmTydT3nO7ubn399dd6//339dprr8ne3l5LlixRYGDgfee7E9auXr064nO68z7l5eVyc3OTvb29JkyYoKioKElSaWmpnJycNGXKFE2aNEkff/yxIiMj+96/qKhIBoNBZ8+eHfC68+fP1/z58wc8duLECRkMBjU0NPT9991HUFDQgLmKioq0b98+TZs2TTY2NnJwcFBVVdWIzw8AAMCSEQkBAABGYO3atTIYDMrIyBjR82NjY7Vo0SLt2bNHJ0+elIeHhxYsWKDx48crNTW173mDRcLGxka9+eabsrOzk4eHh65cuaINGzbIYDDI1dW173l79uzRuHHj5OzsrEuXLsnd3V1z587VRx99dN/5PvroI9nY2Ki7u3vEn4M7Me7ObGvWrNGqVauUlJSkiooK2draytbWVocOHdLJkyf14YcfymAwKCAgoO81pk6dKicnp75f19XV9UW/2travsdXrlypOXPmSLodXNevX98XGH19feXr69u3qvDOXFOnTtWsWbO0fft2LV26VAaDQQsWLBjx+QEAAFgyIiEAAMAIZGZmasKECZo4caJWrFghT09PRUdHq76+fsSvYTQaNW3aNG3atKnvscEiobOzs6ZMmaKampoB779z505ZWVmpra1NJpNJ1tbW2rx584Dn9Pb2DoiQQ5k4ceIDX0p8J8bt3LlTHR0dA962bt06TZgwQSUlJQPOd/78+bK1tVVXV5ckycnJSfb29n3P8fHxkb29vaytrQesarS3t9eOHTv6fj2Sy42PHTs2IHru2bNnyPcBAADAQERCAACAEcrKytKKFStkZWU14LLXzz77TGlpafc8Pzk5WWvXrtWsWbP02muv9T1/yZIlfc+5OxL29vZqypQpcnZ2VldX14AjPDxcBoNBaWlp6u3t1eTJk/X+++8PWIE3EkajUQaDQStXrrznbXefm5WVVd/bhtr7706wXLVq1T2v5+fnJ4PBoPj4eEnShQsXBpzvypUrtWvXLjk5OWnZsmWSpNraWhkMhgGXTX+TPQlDQkJkMBiUnJw8ws8MAACA5SISAgAAPKCuri5lZWXJ29tbGzdulJWVlSZMmKD8/Py+51y8eFEGg0EzZ86Uh4eHAgMDFR0drbfeekuLFy/ue97dkbChoWHQ/ff+/rizr+Gd9x03bpzmzZunHTt2DHkTkrtZWVlp0aJF9zx+7NgxHTlyREeOHNGcOXNGFAnvXDJ8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" + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from IPython.display import display\n", + "\n", + "def Plotly(data=[], layout={}):\n", + " bundle = {}\n", + " bundle['application/vnd.plotly.v1+json'] = {\n", + " 'data': data,\n", + " 'layout': layout,\n", + " }\n", + " display(bundle, raw=True)\n", + "\n", + "data = [\n", + " {'x': [1999, 2000, 2001, 2002], 'y': [10, 15, 13, 17], 'type': 'scatter'},\n", + " {'x': [1999, 2000, 2001, 2002], 'y': [16, 5, 11, 9], 'type': 'scatter'}\n", + "]\n", + "\n", + "layout = {\n", + " 'title': 'Sales Growth',\n", + " 'xaxis': {'title': 'Year', 'showgrid': False, 'zeroline': False},\n", + " 'yaxis': {'title': 'Percent', 'showline': False}\n", + "}\n", + "\n", + "Plotly(data, layout)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.7" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/oskar-spark/src/main/python/notebooks/GWAS.ipynb b/oskar-spark/src/main/python/notebooks/notebooks/GWAS.ipynb similarity index 100% rename from oskar-spark/src/main/python/notebooks/GWAS.ipynb rename to oskar-spark/src/main/python/notebooks/notebooks/GWAS.ipynb diff --git a/oskar-spark/src/main/python/notebooks/notebooks/facets.ipynb b/oskar-spark/src/main/python/notebooks/notebooks/facets.ipynb new file mode 100644 index 0000000..4e4e3dd --- /dev/null +++ b/oskar-spark/src/main/python/notebooks/notebooks/facets.ipynb @@ -0,0 +1,651 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# **Facets tutorial**\n", + "One of the most sofisticated transformations that Pyoskar provides us is [ **facet** ]. As every transformation it pertains to Oskar class and we can acces to it through our Oskar instance.\n", + "
\n", + "Usage:\n", + "```\n", + "facet(df[DataFrame], facet[str])\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We have to to import both Spark and Oskar APIs, as well as loading our data into a spark DataFrame:" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "from pyoskar.core import Oskar\n", + "from pyoskar.sql import *\n", + "from pyoskar.analysis import *\n", + "from pyspark.sql.functions import col, udf, count, explode, concat, when, expr\n", + "from pyspark.sql.functions import *\n", + "\n", + "oskar = Oskar(spark)\n", + "df = oskar.load(\"/home/roldanx/appl/oskar/oskar-spark/src/test/resources/platinum_chr22.small.parquet\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Simple facets\n", + "Now that we have loaded our data, we start with an easy facet. This example executes the classics \"groupBy\" and \"count\" upon our dataframe. The next format was designed to be applied on categorical or discrete quantitative variants. That could be any among these: \n", + " - Chromosome [ **chromosome** ]\n", + " - Variant type [ **type** ]\n", + " - Studies [ **studies** ]\n", + " - Biotype [ **biotype** ]\n", + " - Consequence type [ **ct** ]\n", + " - Gene [ **gene** ]\n", + " - Ensemble gene ID [ **ensemblGeneId** ]\n", + " - Ensemble gene transcript [ **ensemblTranscriptId** ]" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "+-----+-----+\n", + "| type|count|\n", + "+-----+-----+\n", + "|INDEL| 106|\n", + "| SNV| 894|\n", + "+-----+-----+\n", + "\n" + ] + } + ], + "source": [ + "oskar.facet(df, \"type\").show()" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "+----------------------------------+-----+\n", + "|ct |count|\n", + "+----------------------------------+-----+\n", + "|2KB_downstream_variant |146 |\n", + "|2KB_upstream_variant |146 |\n", + "|3_prime_UTR_variant |9 |\n", + "|5_prime_UTR_variant |1 |\n", + "|NMD_transcript_variant |140 |\n", + "|TF_binding_site_variant |108 |\n", + "|downstream_gene_variant |163 |\n", + "|intergenic_variant |222 |\n", + "|intron_variant |543 |\n", + "|missense_variant |4 |\n", + "|non_coding_transcript_exon_variant|45 |\n", + "|non_coding_transcript_variant |385 |\n", + "|regulatory_region_variant |764 |\n", + "|splice_donor_variant |1 |\n", + "|splice_region_variant |2 |\n", + "|synonymous_variant |6 |\n", + "|upstream_gene_variant |200 |\n", + "+----------------------------------+-----+\n", + "\n" + ] + } + ], + "source": [ + "oskar.facet(df, \"ct\").show(truncate=False)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Include facets\n", + "We can also applies a filtering based on the values we explicit in the function:" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "+-------+-----+\n", + "| gene|count|\n", + "+-------+-----+\n", + "|BCL2L13| 8|\n", + "| CECR2| 11|\n", + "+-------+-----+\n", + "\n" + ] + } + ], + "source": [ + "oskar.facet(df, \"gene[BCL2L13,CECR2]\").show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Range facets\n", + "Using a similar syntax as with \"Include facets\" but dealing with continuous quantitative we find that we can apply facets by range, where we can determine both upper and downer thresholds as well as the step e.g. [start..end]:step. Available range fields:\n", + " - Conservation scores: grep [ **grep** ], phylop [ **phylop** ] or phastCons [ **phastCons** ]\n", + " - Functional scores: cadd_scaled [ **cadd_scaled** ] or cadd_raw [ **cadd_raw** ]\n", + " - Substitution scores: sift [ **sift** ] or polyphen [ **polyphen** ]" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "+-----------+-----+\n", + "|phylopRange|count|\n", + "+-----------+-----+\n", + "| -4.0| 3|\n", + "| -3.0| 12|\n", + "| -2.0| 55|\n", + "| -1.0| 171|\n", + "| 0.0| 681|\n", + "+-----------+-----+\n", + "\n" + ] + } + ], + "source": [ + "oskar.facet(df, \"phylop[-5..0]:1\").show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Furthermore, we dispose two more rangeable fields where we could use our facets. These ones have the peculiarity that they need extra inputs to be fully defined; we will need to explicit the study which they pertain and the cohort delimited by two underscores. These fields are:\n", + " - Global alternate population frequency [ **popFreq** ] \n", + " - Dataframe alternate population frequency [ **stats** ], which is included in the dataframe stats field." + ] + }, + { + "cell_type": "code", + "execution_count": 123, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "+---------------------------------+-----+\n", + "|popFreq__GNOMAD_GENOMES__ALLRange|count|\n", + "+---------------------------------+-----+\n", + "| 0.0| 514|\n", + "| 0.1| 112|\n", + "| 0.2| 75|\n", + "| 0.30000000000000004| 97|\n", + "| 0.4| 77|\n", + "| 0.5| 26|\n", + "| 0.6000000000000001| 35|\n", + "| 0.7000000000000001| 23|\n", + "| 0.8| 18|\n", + "| 0.9| 15|\n", + "| 1.0| 8|\n", + "+---------------------------------+-----+\n", + "\n" + ] + } + ], + "source": [ + "oskar.facet(df, \"popFreq__GNOMAD_GENOMES__ALL[0..1]:0.1\").show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In case we want to get the dataframe alternate population frequency, first we will need to fill the stats field as explained in the \"stats\" tutorial:" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "+----------------------------------------------------+-----+\n", + "|stats__hgvauser@platinum:illumina_platinum__ALLRange|count|\n", + "+----------------------------------------------------+-----+\n", + "| 0.0| 41|\n", + "| 0.1| 15|\n", + "| 0.2| 14|\n", + "| 0.30000000000000004| 10|\n", + "| 0.4| 7|\n", + "| 0.5| 714|\n", + "| 0.6000000000000001| 68|\n", + "| 0.7000000000000001| 49|\n", + "| 0.8| 12|\n", + "| 0.9| 21|\n", + "| 1.0| 48|\n", + "+----------------------------------------------------+-----+\n", + "\n" + ] + } + ], + "source": [ + "samples = oskar.metadata.samples(df)[\"hgvauser@platinum:illumina_platinum\"]\n", + "df2 = oskar.stats(df,studyId=\"hgvauser@platinum:illumina_platinum\",cohort=\"ALL\",samples=samples)\n", + "oskar.facet(df2, \"stats__hgvauser@platinum:illumina_platinum__ALL[0..1]:0.1\").show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Aggregation facets\n", + "We may want to check whether the compounds of all variants have historically been well conservated or otherways have notably evolved. For this task we could use the aggregation facets, with substitutes the default \"count\" function for another one we decide among this ones:\n", + " - Average [ **avg** ]\n", + " - Maximum [ **max** ]\n", + " - Minimum [ **min** ]\n", + " - Sumatory [ **sum** ]\n", + " - Squared sumatory [ **sumsq** ]\n", + " - Standard deviation [ **stddev** ]\n", + " - Variance [ **var** ]\n", + " - Percentile values [ **percentile** ]\n", + " - Set of values [ **unique** ]" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "+-------------------+-----+\n", + "| avg(gerp)|count|\n", + "+-------------------+-----+\n", + "|-0.3518712293113349| 1000|\n", + "+-------------------+-----+\n", + "\n" + ] + } + ], + "source": [ + "oskar.facet(df, \"avg(gerp)\").show(truncate=False)" + ] + }, + { + "cell_type": "code", + "execution_count": 162, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "+---------------------------------------------------------------------------------------+-----+\n", + "|percentile(gerp) |count|\n", + "+---------------------------------------------------------------------------------------+-----+\n", + "|[-2.152000093460083, -0.6257500052452087, 0.0, 0.14900000393390656, 0.7430999755859375]|1000 |\n", + "+---------------------------------------------------------------------------------------+-----+\n", + "\n" + ] + } + ], + "source": [ + "oskar.facet(df, \"percentile(gerp)\").show(truncate=False)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Nested facets\n", + "The last feature we find available for our facet queries is nesting, which allows us to concatenate gruops and reach complex studies by using \">>\" separator." + ] + }, + { + "cell_type": "code", + "execution_count": 52, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "+-----------------------+--------------------+-----+\n", + "|biotype |ct |count|\n", + "+-----------------------+--------------------+-----+\n", + "|nonsense_mediated_decay|splice_donor_variant|1 |\n", + "|processed_transcript |splice_donor_variant|1 |\n", + "|protein_coding |splice_donor_variant|1 |\n", + "|retained_intron |splice_donor_variant|1 |\n", + "+-----------------------+--------------------+-----+\n", + "\n" + ] + } + ], + "source": [ + "oskar.facet(df, \"biotype>>ct[splice_donor_variant]\").show(truncate=False)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Final facets\n", + "Now it is up to us to mix all these ingredients:" + ] + }, + { + "cell_type": "code", + "execution_count": 122, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "+-----+-----------------------+-------------+----------------+--------------------+-----+\n", + "|gene |biotype |cadd_rawRange|cadd_scaledRange|min(phylop) |count|\n", + "+-----+-----------------------+-------------+----------------+--------------------+-----+\n", + "|AIFM3|lincRNA |0.2 |6.0 |-0.2809999883174896 |1 |\n", + "|AIFM3|nonsense_mediated_decay|0.2 |6.0 |-0.2809999883174896 |1 |\n", + "|AIFM3|processed_transcript |0.2 |6.0 |-0.2809999883174896 |1 |\n", + "|AIFM3|protein_coding |0.2 |6.0 |-0.2809999883174896 |1 |\n", + "|AIFM3|retained_intron |0.2 |6.0 |-0.2809999883174896 |1 |\n", + "|GGT1 |nonsense_mediated_decay|-0.2 |0.0 |-1.1380000114440918 |2 |\n", + "|GGT1 |nonsense_mediated_decay|0.0 |1.0 |0.10199999809265137 |2 |\n", + "|GGT1 |nonsense_mediated_decay|0.0 |2.0 |0.054999999701976776|1 |\n", + "|GGT1 |nonsense_mediated_decay|0.0 |4.0 |0.2809999883174896 |1 |\n", + "|GGT1 |nonsense_mediated_decay|0.4 |7.0 |-1.50600004196167 |2 |\n", + "|GGT1 |processed_transcript |-0.2 |0.0 |0.10199999809265137 |1 |\n", + "|GGT1 |processed_transcript |0.0 |1.0 |0.10199999809265137 |1 |\n", + "|GGT1 |processed_transcript |0.0 |2.0 |0.054999999701976776|1 |\n", + "|GGT1 |processed_transcript |0.0 |4.0 |0.2809999883174896 |1 |\n", + "|GGT1 |processed_transcript |0.4 |7.0 |-1.50600004196167 |2 |\n", + "|GGT1 |protein_coding |-0.2 |0.0 |-1.1380000114440918 |2 |\n", + "|GGT1 |protein_coding |0.0 |1.0 |0.10199999809265137 |2 |\n", + "|GGT1 |protein_coding |0.0 |2.0 |0.054999999701976776|1 |\n", + "|GGT1 |protein_coding |0.0 |4.0 |0.2809999883174896 |1 |\n", + "|GGT1 |protein_coding |0.4 |7.0 |-1.50600004196167 |2 |\n", + "|GGT1 |retained_intron |-0.2 |0.0 |0.10199999809265137 |1 |\n", + "|GGT1 |retained_intron |0.0 |1.0 |0.10199999809265137 |2 |\n", + "|GGT1 |retained_intron |0.4 |7.0 |-0.7080000042915344 |1 |\n", + "|GGT1 |sense_intronic |-0.2 |0.0 |-1.1380000114440918 |1 |\n", + "|GGT1 |unprocessed_pseudogene |0.4 |7.0 |-1.50600004196167 |1 |\n", + "+-----+-----------------------+-------------+----------------+--------------------+-----+\n", + "\n" + ] + } + ], + "source": [ + "oskar.facet(df, \"gene[AIFM3,GGT1]>>biotype>>cadd_raw[-10..10]:0.2>>cadd_scaled[-10..10]:1>>min(phylop)\").show(25, truncate=False)" + ] + }, + { + "cell_type": "code", + "execution_count": 96, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "+----+---------------------------------+-----+\n", + "|type|popFreq__GNOMAD_GENOMES__ALLRange|count|\n", + "+----+---------------------------------+-----+\n", + "| SNV| 0.0| 478|\n", + "| SNV| 0.1| 95|\n", + "| SNV| 0.2| 57|\n", + "| SNV| 0.30000000000000004| 90|\n", + "| SNV| 0.4| 66|\n", + "| SNV| 0.5| 21|\n", + "+----+---------------------------------+-----+\n", + "\n", + "+-----+---------------------------------+-----+\n", + "| type|popFreq__GNOMAD_GENOMES__ALLRange|count|\n", + "+-----+---------------------------------+-----+\n", + "|INDEL| 0.0| 36|\n", + "|INDEL| 0.1| 17|\n", + "|INDEL| 0.2| 18|\n", + "|INDEL| 0.30000000000000004| 7|\n", + "|INDEL| 0.4| 11|\n", + "|INDEL| 0.5| 5|\n", + "+-----+---------------------------------+-----+\n", + "\n" + ] + } + ], + "source": [ + "snvPandas = oskar.facet(df, \"type[SNV]>>popFreq__GNOMAD_GENOMES__ALL[0..0.5]:0.1\").show()\n", + "indelPandas = oskar.facet(df, \"type[INDEL]>>popFreq__GNOMAD_GENOMES__ALL[0..0.5]:0.1\").show()" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "" + ], + "text/vnd.plotly.v1+html": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.plotly.v1+json": { + "config": { + "linkText": "Export to plot.ly", + "plotlyServerURL": "https://plot.ly", + "showLink": true + }, + "data": [ + { + "domain": { + "x": [ + 0, + 0.48 + ] + }, + "hole": 0.4, + "labels": [ + 0, + 0.1, + 0.2, + 0.30000000000000004, + 0.4, + 0.5 + ], + "type": "pie", + "uid": "935ed220-f713-4035-8a30-1c79dee5aa7d", + "values": [ + 478, + 95, + 57, + 90, + 66, + 21 + ] + }, + { + "domain": { + "x": [ + 0.51, + 1 + ] + }, + "hole": 0.4, + "labels": [ + 0, + 0.1, + 0.2, + 0.30000000000000004, + 0.4, + 0.5 + ], + "type": "pie", + "uid": "fcf24555-7061-411c-9ed7-ac58ebb3c67c", + "values": [ + 36, + 17, + 18, + 7, + 11, + 5 + ] + } + ], + "layout": { + "annotations": [ + { + "font": { + "size": 18 + }, + "showarrow": false, + "text": "SNV", + "x": 0.22, + "y": 0.5 + }, + { + "font": { + "size": 18 + }, + "showarrow": false, + "text": "INDEL", + "x": 0.78, + "y": 0.5 + } + ], + "autosize": false, + "height": 600, + "title": "Global alternate population frequencies [ALL]", + "width": 1500 + } + }, + "image/png": "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", + "text/html": [ + "
" + ], + "text/vnd.plotly.v1+html": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import plotly.offline as py\n", + "import plotly.graph_objs as go\n", + "from plotly.offline import get_plotlyjs, init_notebook_mode\n", + "\n", + "snvPandas = oskar.facet(df, \"type[SNV]>>popFreq__GNOMAD_GENOMES__ALL[0..0.5]:0.1\").toPandas()\n", + "indelPandas = oskar.facet(df, \"type[INDEL]>>popFreq__GNOMAD_GENOMES__ALL[0..0.5]:0.1\").toPandas()\n", + "\n", + "init_notebook_mode(connected=True)\n", + "\n", + "fig = {\n", + " \"data\": [\n", + " {\n", + " \"values\": snvPandas[\"count\"],\n", + " \"labels\": snvPandas[\"popFreq__GNOMAD_GENOMES__ALLRange\"],\n", + " \"domain\": {\"x\": [0, .48]},\n", + " \"hole\": .4,\n", + " \"type\": \"pie\"\n", + " },\n", + " {\n", + " \"values\": indelPandas[\"count\"],\n", + " \"labels\": indelPandas[\"popFreq__GNOMAD_GENOMES__ALLRange\"],\n", + " \"domain\": {\"x\": [.51, 1]},\n", + " \"hole\": .4,\n", + " \"type\": \"pie\"\n", + " }],\n", + " \"layout\": {\n", + " \"title\":\"Global alternate population frequencies [ALL]\",\n", + " \"autosize\":False,\n", + " \"width\":1500,\n", + " \"height\":600,\n", + " \"annotations\": [\n", + " {\n", + " \"font\": {\n", + " \"size\": 18\n", + " },\n", + " \"showarrow\": False,\n", + " \"text\": \"SNV\",\n", + " \"x\": 0.22,\n", + " \"y\": 0.5\n", + " },\n", + " {\n", + " \"font\": {\n", + " \"size\": 18\n", + " },\n", + " \"showarrow\": False,\n", + " \"text\": \"INDEL\",\n", + " \"x\": 0.78,\n", + " \"y\": 0.5\n", + " }\n", + " ]\n", + " }\n", + "}\n", + "py.iplot(fig, filename='donut')" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.7" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/oskar-spark/src/main/python/notebooks/notebooks/my_notebook.ipynb b/oskar-spark/src/main/python/notebooks/notebooks/my_notebook.ipynb new file mode 100644 index 0000000..259542d --- /dev/null +++ b/oskar-spark/src/main/python/notebooks/notebooks/my_notebook.ipynb @@ -0,0 +1,480 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "
\n", + "

SparkSession - hive

\n", + " \n", + "
\n", + "

SparkContext

\n", + "\n", + "

Spark UI

\n", + "\n", + "
\n", + "
Version
\n", + "
v2.4.0
\n", + "
Master
\n", + "
local[*]
\n", + "
AppName
\n", + "
PySparkShell
\n", + "
\n", + "
\n", + " \n", + "
\n", + " " + ], + "text/plain": [ + "" + ] + }, + "execution_count": 1, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "spark" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "ename": "NameError", + "evalue": "name 'Oskar' is not defined", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mOskar\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;31mNameError\u001b[0m: name 'Oskar' is not defined" + ] + } + ], + "source": [ + "Oskar()" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "ename": "TypeError", + "evalue": "'JavaPackage' object is not callable", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mpyspark\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msql\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfunctions\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 6\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 7\u001b[0;31m \u001b[0moskar\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mOskar\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mspark\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 8\u001b[0m \u001b[0mdf\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0moskar\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mload\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"/home/roldanx/appl/oskar/oskar-spark/src/test/resources/platinum_chr22.small.parquet\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m~/appl/oskar/oskar-spark/src/main/python/pyoskar/core.py\u001b[0m in \u001b[0;36m__init__\u001b[0;34m(self, spark)\u001b[0m\n\u001b[1;32m 13\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m__init__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mspark\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 14\u001b[0m \u001b[0msuper\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mOskar\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__init__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 15\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_java_obj\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_new_java_obj\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"org.opencb.oskar.spark.variant.Oskar\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mspark\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_jsparkSession\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 16\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mspark\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mspark\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 17\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmetadata\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mVariantMetadataManager\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m~/soft/spark-2.4.0-bin-hadoop2.7/python/pyspark/ml/wrapper.py\u001b[0m in \u001b[0;36m_new_java_obj\u001b[0;34m(java_class, *args)\u001b[0m\n\u001b[1;32m 65\u001b[0m \u001b[0mjava_obj\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mgetattr\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mjava_obj\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mname\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 66\u001b[0m \u001b[0mjava_args\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0m_py2java\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0msc\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0marg\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0marg\u001b[0m \u001b[0;32min\u001b[0m \u001b[0margs\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 67\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mjava_obj\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0mjava_args\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 68\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 69\u001b[0m \u001b[0;34m@\u001b[0m\u001b[0mstaticmethod\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mTypeError\u001b[0m: 'JavaPackage' object is not callable" + ] + } + ], + "source": [ + "from pyoskar.core import Oskar\n", + "from pyoskar.sql import *\n", + "from pyoskar.analysis import *\n", + "from pyspark.sql.functions import col, udf, count, explode, concat, when, expr\n", + "from pyspark.sql.functions import *\n", + "\n", + "oskar = Oskar(spark)\n", + "df = oskar.load(\"/home/roldanx/appl/oskar/oskar-spark/src/test/resources/platinum_chr22.small.parquet\")" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "pandaDF = oskar.histogram(df,\"start\",100000).toPandas()\n", + "pandaDF.plot(x = \"start\", y = \"count\")" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'hgvauser@platinum:illumina_platinum': ['NA12877', 'NA12878', 'NA12879', 'NA12880', 'NA12881', 'NA12882', 'NA12883', 'NA12884', 'NA12885', 'NA12886', 'NA12887', 'NA12888', 'NA12889', 'NA12890', 'NA12891', 'NA12892', 'NA12893']}\n", + "+---------------+--------------------+\n", + "| id| HWE|\n", + "+---------------+--------------------+\n", + "|22:16054454:C:T| 1.0|\n", + "|22:16065809:T:C| 1.0|\n", + "|22:16077310:T:A| 0.9254727474972191|\n", + "|22:16080499:A:G| 1.0|\n", + "|22:16084621:T:C| 1.0|\n", + "|22:16091610:G:T| 1.0|\n", + "|22:16096040:G:A| 0.4746014089729329|\n", + "|22:16099957:C:T|0.016007636455477054|\n", + "|22:16100462:A:G|0.001011008618240...|\n", + "|22:16105660:G:A| 0.3037449017426771|\n", + "|22:16112391:G:A| 0.17718452601656157|\n", + "|22:16114913:A:T| 0.6855353685164587|\n", + "|22:16127471:A:-| 1.0|\n", + "|22:16134019:G:T| 0.17718452601656157|\n", + "|22:16138943:C:G| 0.6855353685164587|\n", + "|22:16144239:T:C| 0.18181818181818182|\n", + "|22:16147398:G:A|0.001011224592982...|\n", + "|22:16149692:G:T| 0.08884238232789762|\n", + "|22:16195955:G:A|0.007751066073178...|\n", + "|22:16196041:C:T| 0.6855353685164587|\n", + "+---------------+--------------------+\n", + "only showing top 20 rows\n", + "\n", + "+-----+-----+\n", + "| type|count|\n", + "+-----+-----+\n", + "|INDEL| 106|\n", + "| SNV| 894|\n", + "+-----+-----+\n", + "\n", + "+-----+--------+\n", + "| type|count(1)|\n", + "+-----+--------+\n", + "|INDEL| 106|\n", + "| SNV| 894|\n", + "+-----+--------+\n", + "\n", + "+---------+---------+-----+\n", + "|reference|alternate|count|\n", + "+---------+---------+-----+\n", + "| C| T| 142|\n", + "| G| A| 138|\n", + "| A| G| 120|\n", + "| T| C| 111|\n", + "| C| A| 63|\n", + "| G| T| 53|\n", + "| A| C| 53|\n", + "| T| A| 52|\n", + "| T| G| 48|\n", + "| A| T| 47|\n", + "| C| G| 34|\n", + "| G| C| 33|\n", + "+---------+---------+-----+\n", + "\n", + "+---------+---------+-----+\n", + "|reference|alternate|count|\n", + "+---------+---------+-----+\n", + "| C| T| 142|\n", + "| G| A| 138|\n", + "| A| G| 120|\n", + "| T| C| 111|\n", + "| C| A| 63|\n", + "| A| C| 53|\n", + "| G| T| 53|\n", + "| T| A| 52|\n", + "| T| G| 48|\n", + "| A| T| 47|\n", + "| C| G| 34|\n", + "| G| C| 33|\n", + "+---------+---------+-----+\n", + "\n", + "+---------+---------+-----+\n", + "|reference|alternate|count|\n", + "+---------+---------+-----+\n", + "| C| T| 142|\n", + "| G| A| 138|\n", + "| A| G| 120|\n", + "| T| C| 111|\n", + "| C| A| 63|\n", + "| A| C| 53|\n", + "| G| T| 53|\n", + "| T| A| 52|\n", + "| T| G| 48|\n", + "| A| T| 47|\n", + "| C| G| 34|\n", + "| G| C| 33|\n", + "+---------+---------+-----+\n", + "\n", + "+---------+---------+--------+\n", + "|reference|alternate|count(1)|\n", + "+---------+---------+--------+\n", + "| C| T| 142|\n", + "| G| A| 138|\n", + "| A| G| 120|\n", + "| T| C| 111|\n", + "| C| A| 63|\n", + "| A| C| 53|\n", + "| G| T| 53|\n", + "| T| A| 52|\n", + "| T| G| 48|\n", + "| A| T| 47|\n", + "| C| G| 34|\n", + "| G| C| 33|\n", + "+---------+---------+--------+\n", + "\n" + ] + } + ], + "source": [ + "df.createOrReplaceTempView(\"chr22\")\n", + "print(oskar.metadata.samples(df))\n", + "oskar.hardy_weinberg(df, \"hgvauser@platinum:illumina_platinum\").select(\"id\", \"HWE\").show()\n", + "\n", + "# Group by type\n", + "df.groupBy(\"type\").count().show()\n", + "spark.sql(\"SELECT type, count(*) FROM chr22 GROUP BY type\").show()\n", + "\n", + "## Group by variant\n", + "# 1)\n", + "df.where(\"type = 'SNV'\").select(\"reference\", \"alternate\").groupBy(\"reference\", \"alternate\").count().sort(\"count\", ascending=False).show()\n", + "# 2)\n", + "df.where(col(\"type\").isin(\"SNV\", \"SNP\")).select(\"reference\", \"alternate\").groupBy(\"reference\", \"alternate\").count().sort(\"count\", ascending=False).show()\n", + "# 3)\n", + "df.where(df.type.isin(\"SNV\", \"SNP\")).select(df.reference, df.alternate).groupBy(df.reference, df.alternate).count().sort(\"count\", ascending=False).show()\n", + "# 4)\n", + "spark.sql(\"SELECT reference, alternate, count(*) FROM chr22 WHERE type = 'SNV' GROUP BY reference,alternate ORDER BY count(*) DESC\").show()" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "+---------------+-----------+--------------+--------------+-------------+-------------+--------------------+------------------------------------+------------------+--------------------+----+----+---------+-----------+\n", + "|id |alleleCount|refAlleleCount|altAlleleCount|refAlleleFreq|altAlleleFreq|genotypeCount |genotypeFreq |missingAlleleCount|missingGenotypeCount|maf |mgf |mafAllele|mgfGenotype|\n", + "+---------------+-----------+--------------+--------------+-------------+-------------+--------------------+------------------------------------+------------------+--------------------+----+----+---------+-----------+\n", + "|22:16054454:C:T|-1 |0 |0 |-1.0 |-1.0 |[./. -> 2] |[] |3 |1 |-1.0|-1.0|null |null |\n", + "|22:16065809:T:C|2 |1 |1 |0.5 |0.5 |[0/1 -> 1, ./. -> 1]|[0/0 -> 0.0, 0/1 -> 0.0, 1/1 -> 0.0]|1 |0 |0.5 |0.0 |T |1/1 |\n", + "|22:16077310:T:A|2 |1 |1 |0.5 |0.5 |[0/1 -> 1, ./. -> 1]|[0/0 -> 0.0, 0/1 -> 0.0, 1/1 -> 0.0]|1 |0 |0.5 |0.0 |T |1/1 |\n", + "|22:16080499:A:G|2 |1 |1 |0.5 |0.5 |[0/1 -> 1, ./. -> 1]|[0/0 -> 0.0, 0/1 -> 0.0, 1/1 -> 0.0]|1 |0 |0.5 |0.0 |A |1/1 |\n", + "|22:16084621:T:C|2 |1 |1 |0.5 |0.5 |[0/1 -> 1, ./. -> 1]|[0/0 -> 0.0, 0/1 -> 0.0, 1/1 -> 0.0]|1 |0 |0.5 |0.0 |T |1/1 |\n", + "|22:16091610:G:T|-1 |0 |0 |-1.0 |-1.0 |[./. -> 2] |[] |3 |1 |-1.0|-1.0|null |null |\n", + "|22:16096040:G:A|-1 |0 |0 |-1.0 |-1.0 |[./. -> 2] |[] |3 |1 |-1.0|-1.0|null |null |\n", + "|22:16099957:C:T|4 |2 |2 |0.5 |0.5 |[0/1 -> 2] |[0/0 -> 0.0, 0/1 -> 0.0, 1/1 -> 0.0]|-1 |-1 |0.5 |0.0 |C |1/1 |\n", + "|22:16100462:A:G|4 |2 |2 |0.5 |0.5 |[0/1 -> 2] |[0/0 -> 0.0, 0/1 -> 0.0, 1/1 -> 0.0]|-1 |-1 |0.5 |0.0 |A |1/1 |\n", + "|22:16105660:G:A|2 |1 |1 |0.5 |0.5 |[0/1 -> 1, ./. -> 1]|[0/0 -> 0.0, 0/1 -> 0.0, 1/1 -> 0.0]|1 |0 |0.5 |0.0 |G |1/1 |\n", + "+---------------+-----------+--------------+--------------+-------------+-------------+--------------------+------------------------------------+------------------+--------------------+----+----+---------+-----------+\n", + "only showing top 10 rows\n", + "\n" + ] + } + ], + "source": [ + "oskar.stats(df, cohort=\"AFR\", samples=['NA12877', 'NA12878']).selectExpr(\"id\", \"studies[0].stats['AFR'] as stats\").selectExpr(\"id\", \"stats.*\").show(10,False)" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "+---------------+----------+--------+--------+\n", + "| id|chromosome| start| end|\n", + "+---------------+----------+--------+--------+\n", + "|22:17001352:C:G| 22|17001352|17001352|\n", + "|22:17002352:C:A| 22|17002352|17002352|\n", + "|22:17004097:G:A| 22|17004097|17004097|\n", + "|22:17011943:G:C| 22|17011943|17011943|\n", + "|22:17012760:G:A| 22|17012760|17012760|\n", + "+---------------+----------+--------+--------+\n", + "only showing top 5 rows\n", + "\n", + "+---------------+----------+--------+--------+\n", + "| id|chromosome| start| end|\n", + "+---------------+----------+--------+--------+\n", + "|22:17001352:C:G| 22|17001352|17001352|\n", + "|22:17002352:C:A| 22|17002352|17002352|\n", + "|22:17004097:G:A| 22|17004097|17004097|\n", + "|22:17011943:G:C| 22|17011943|17011943|\n", + "|22:17012760:G:A| 22|17012760|17012760|\n", + "+---------------+----------+--------+--------+\n", + "only showing top 5 rows\n", + "\n", + "+---------------+----------+--------+--------+\n", + "| id|chromosome| start| end|\n", + "+---------------+----------+--------+--------+\n", + "|22:17001352:C:G| 22|17001352|17001352|\n", + "|22:17002352:C:A| 22|17002352|17002352|\n", + "|22:17004097:G:A| 22|17004097|17004097|\n", + "|22:17011943:G:C| 22|17011943|17011943|\n", + "|22:17012760:G:A| 22|17012760|17012760|\n", + "+---------------+----------+--------+--------+\n", + "only showing top 5 rows\n", + "\n", + "+---------------+----------+--------+--------+\n", + "| id|chromosome| start| end|\n", + "+---------------+----------+--------+--------+\n", + "|22:17001352:C:G| 22|17001352|17001352|\n", + "|22:17002352:C:A| 22|17002352|17002352|\n", + "|22:17004097:G:A| 22|17004097|17004097|\n", + "|22:17011943:G:C| 22|17011943|17011943|\n", + "|22:17012760:G:A| 22|17012760|17012760|\n", + "+---------------+----------+--------+--------+\n", + "only showing top 5 rows\n", + "\n", + "+---------------+----------+--------+--------+\n", + "| id|chromosome| start| end|\n", + "+---------------+----------+--------+--------+\n", + "|22:17001352:C:G| 22|17001352|17001352|\n", + "|22:17002352:C:A| 22|17002352|17002352|\n", + "|22:17004097:G:A| 22|17004097|17004097|\n", + "|22:17011943:G:C| 22|17011943|17011943|\n", + "|22:17012760:G:A| 22|17012760|17012760|\n", + "+---------------+----------+--------+--------+\n", + "only showing top 5 rows\n", + "\n" + ] + } + ], + "source": [ + "df.select(\"id\", \"chromosome\", \"start\", \"end\").filter(df.chromosome == 22).filter(df.start > 17000000).filter(df.end < 17500000).show(5)\n", + "df.select(\"id\", \"chromosome\", \"start\", \"end\").filter(col(\"chromosome\") == 22).filter(col(\"start\") > 17000000).filter(col(\"end\") < 17500000).show(5)\n", + "df.select(\"id\", \"chromosome\", \"start\", \"end\").filter((col(\"chromosome\") == 22) & (col(\"start\") > 17000000) & (col(\"end\") < 17500000)).show(5)\n", + "df.select(\"id\", \"chromosome\", \"start\", \"end\").filter(expr(\"chromosome =='22' AND start > 17000000 AND end < 17500000\")).show(5)\n", + "df.select(\"id\", \"chromosome\", col(\"start\").alias(\"start\"), \"end\").filter(col(\"start\") > 17000000).show(5)\n", + "# spark.sql(\"SELECT id,chromosome,start,end FROM platinum WHERE chromosome =='22' AND start > 17000000 AND end < 17500000\").show(5)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "+---------------+--------------------+\n", + "| id| gene|\n", + "+---------------+--------------------+\n", + "|22:16096040:G:A| [NBEAP3]|\n", + "|22:16099957:C:T| [NBEAP3]|\n", + "|22:16100462:A:G| [NBEAP3]|\n", + "|22:16105660:G:A| [NBEAP3]|\n", + "|22:16112391:G:A| [NBEAP3]|\n", + "|22:16114913:A:T| [NBEAP3]|\n", + "|22:16127471:A:-|[LA16c-60H5.7, NB...|\n", + "+---------------+--------------------+\n", + "\n", + "+---------------+--------------------+\n", + "| id| gene|\n", + "+---------------+--------------------+\n", + "|22:16096040:G:A| [NBEAP3]|\n", + "|22:16099957:C:T| [NBEAP3]|\n", + "|22:16100462:A:G| [NBEAP3]|\n", + "|22:16105660:G:A| [NBEAP3]|\n", + "|22:16112391:G:A| [NBEAP3]|\n", + "|22:16114913:A:T| [NBEAP3]|\n", + "|22:16127471:A:-|[LA16c-60H5.7, NB...|\n", + "+---------------+--------------------+\n", + "\n" + ] + } + ], + "source": [ + "df.select(df.id, genes(\"annotation\").alias(\"gene\")).filter(array_contains(\"gene\", \"NBEAP3\")).show()\n", + "df.selectExpr(\"id\", \"genes(annotation) AS gene\").filter(array_contains(\"gene\", \"NBEAP3\")).show()" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "+-------+-----+\n", + "|variant|count|\n", + "+-------+-----+\n", + "| C -> T| 142|\n", + "| G -> A| 138|\n", + "| A -> G| 120|\n", + "| T -> C| 111|\n", + "| C -> A| 63|\n", + "| A -> C| 53|\n", + "| G -> T| 53|\n", + "| T -> A| 52|\n", + "| T -> G| 48|\n", + "| A -> T| 47|\n", + "| C -> G| 34|\n", + "| G -> C| 33|\n", + "+-------+-----+\n", + "\n" + ] + } + ], + "source": [ + "pandas = df.where(\"type = 'SNV'\") \\\n", + " .select(\"reference\", \"alternate\") \\\n", + " .groupBy(\"reference\", \"alternate\") \\\n", + " .count() \\\n", + " .sort(\"count\", ascending=False) \\\n", + " .select(concat(col(\"reference\"), lit(\" -> \"), col(\"alternate\")).alias(\"variant\"), col(\"count\")).show()" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.7" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/oskar-spark/src/main/python/notebooks/notebooks/plotly trials.ipynb b/oskar-spark/src/main/python/notebooks/notebooks/plotly trials.ipynb new file mode 100644 index 0000000..f3519b9 --- /dev/null +++ b/oskar-spark/src/main/python/notebooks/notebooks/plotly trials.ipynb @@ -0,0 +1,997 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "from pyoskar.core import Oskar\n", + "from pyoskar.sql import *\n", + "from pyoskar.analysis import *\n", + "from pyspark.sql.functions import col, udf, count, explode, concat, when, expr\n", + "from pyspark.sql.functions import *\n", + "\n", + "oskar = Oskar(spark)\n", + "df = oskar.load(\"/home/roldanx/appl/oskar/oskar-spark/src/test/resources/platinum_chr22.small.parquet\")\n", + "df.createOrReplaceTempView(\"platinum\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Variant histogram" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " start count\n", + "0 16000000 101\n", + "1 17000000 100\n", + "2 18000000 85\n", + "3 19000000 53\n", + "4 20000000 46\n", + "5 21000000 85\n", + "6 22000000 52\n", + "7 23000000 49\n", + "8 24000000 44\n", + "9 25000000 62\n", + "10 26000000 42\n", + "11 27000000 54\n", + "12 28000000 21\n", + "13 29000000 29\n", + "14 30000000 38\n", + "15 31000000 46\n", + "16 32000000 44\n", + "17 33000000 34\n", + "18 34000000 15\n" + ] + } + ], + "source": [ + "import numpy as np\n", + "\n", + "pandasDF = oskar.histogram(df,\"start\",1000000).toPandas()\n", + "print(pandasDF)" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[Text(0, 0.5, 'Counts'), Text(0.5, 0, 'Region')]" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAABXQAAAEyCAYAAABau1igAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvOIA7rQAAIABJREFUeJzt3XuYZWdZJ+zfkzQQOZiQgxHSYEdBEx0gSDgow0AS0CAqfA4Q0A8ConEGMaKMEgY/SWZ0Jo7KBBgBUQ6JwxAwHoKCHISAohxygDGGQIIQtJFATAjiOAghz/fH3t2p7l6r06l01apd+76va19Ve61dVU//rvdda/dTq95V3R0AAAAAADa+A6YuAAAAAACAfaOhCwAAAACwIDR0AQAAAAAWhIYuAAAAAMCC0NAFAAAAAFgQGroAAAAAAAtCQxcAAAAAYEFo6AIAAAAALAgNXQAAAACABbFl6gJuj8MPP7y3bds2dRkAAAAAALfLpZde+g/dfcStvW6hG7rbtm3LJZdcMnUZAAAAAAC3S1V9el9eZ8kFAAAAAIAFoaELAAAAALAgNHQBAAAAABbEQq+hCwAAAAAsnq9+9avZvn17vvzlL09dyro76KCDsnXr1tzhDndY1ddr6AIAAAAA62r79u25293ulm3btqWqpi5n3XR3rr/++mzfvj1HH330qr6HJRcAAAAAgHX15S9/OYcddthSNXOTpKpy2GGH3a4rkzV0AQAAAIB1t2zN3B1u7797zRq6VfWaqvp8Vf31im2HVtU7q+rq+ce7z7dXVb20qj5RVX9VVd+5VnUBAAAAACyqtVxD93VJ/keS81ZsOyPJu7r77Ko6Y/78+Ukem+S+88dDk7xi/nFdbDvjLev1o27VNWc/buoSAAAAAGBd7e/+3EbosZ1zzjk57bTTcuc733m/ft81u0K3u/8syQ27bX58knPnn5+b5Akrtp/XMx9IckhV3WOtagMAAAAAWEvnnHNO/vmf/3m/f9/1XkP3yO7+7Pzza5McOf/8qCR/t+J12+fbAAAAAADWxHnnnZf73//+ecADHpCnPe1pueaaa3LiiSfm/ve/f0466aT87d/+bZLkGc94Ri644IKdX3fXu941SfKe97wnj3rUo/LEJz4xxxxzTH7kR34k3Z2XvvSl+fu///uccMIJOeGEE/ZrzWu55MJedXdXVd/Wr6uq05KcliT3vve993tdrHDmwVNXcIszvzh1BQAAAABsIldccUV+6Zd+KX/5l3+Zww8/PDfccENOPfXUnY/XvOY1Of300/OHf/iHe/0+H/7wh3PFFVfknve8Zx7+8IfnL/7iL3L66afnxS9+cS666KIcfvjh+7Xu9b5C93M7llKYf/z8fPtnktxrxeu2zrftobtf1d3Hd/fxRxxxxJoWCwAAAABsTu9+97vzpCc9aWfD9dBDD8373//+/PAP/3CS5GlPe1re97733er3echDHpKtW7fmgAMOyHHHHZdrrrlmLcte94bum5OcOv/81CQXrtj+9Jp5WJIvrliaAQAAAABgMlu2bMnNN9+cJLn55pvzla98Zee+O93pTjs/P/DAA3PTTTetaS1r1tCtqjckeX+Sb6uq7VX1rCRnJ3lMVV2d5NHz50ny1iSfTPKJJL+V5NlrVRcAAAAAwIknnpjf/d3fzfXXX58kueGGG/Ld3/3dOf/885Mkr3/96/OIRzwiSbJt27ZceumlSZI3v/nN+epXv3qr3/9ud7tbvvSlL+33utdsDd3ufurIrpMGXttJfnKtagEAAAAANq5rzn7cuv/M7/iO78gLX/jCPPKRj8yBBx6YBz7wgXnZy16WZz7zmfnVX/3VHHHEEXnta1+bJPnxH//xPP7xj88DHvCAnHzyybnLXe5yq9//tNNOy8knn5x73vOeueiii/Zb3TXrpS6m448/vi+55JLb/X22nfGW/VDN/jHF4B3lpmgAAAAArIErr7wyxx577NRlTGbo319Vl3b38bf2teu9hi4AAAAAAKukoQsAAAAAsCA0dAEAAACAdbfIS8HeHrf3362hCwAAAACsq4MOOijXX3/90jV1uzvXX399DjrooFV/jy37sR4AAAAAgFu1devWbN++Pdddd93Upay7gw46KFu3bl3112voAgAAAADr6g53uEOOPvroqctYSJZcAAAAAABYEBq6AAAAAAALQkMXAAAAAGBBaOgCAAAAACwIDV0AAAAAgAWhoQsAAAAAsCA0dAEAAAAAFoSGLgAAAADAgtDQBQAAAABYEBq6AAAAAAALQkMXAAAAAGBBaOgCAAAAACwIDV0AAAAAgAWhoQsAAAAAsCA0dAEAAAAAFoSGLgAAAADAgtDQBQAAAABYEBq6AAAAAAALYsvUBcAiut+5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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "import pandas as pd\n", + "\n", + "pandasDF = oskar.histogram(df,\"start\",1000000).toPandas()\n", + "histogram = pandasDF.plot(x = \"start\", y = \"count\", kind = \"bar\", figsize=(24,4))\n", + "histogram.set(xlabel=\"Region\", ylabel=\"Counts\")" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "" + ], + "text/vnd.plotly.v1+html": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.plotly.v1+json": { + "config": { + "linkText": "Export to plot.ly", + "plotlyServerURL": "https://plot.ly", + "showLink": true + }, + "data": [ + { + "type": "bar", + "uid": "75513143-1b57-4b64-9da2-b4cd1339e703", + "x": [ + 16000000, + 17000000, + 18000000, + 19000000, + 20000000, + 21000000, + 22000000, + 23000000, + 24000000, + 25000000, + 26000000, + 27000000, + 28000000, + 29000000, + 30000000, + 31000000, + 32000000, + 33000000, + 34000000 + ], + "y": [ + 101, + 100, + 85, + 53, + 46, + 85, + 52, + 49, + 44, + 62, + 42, + 54, + 21, + 29, + 38, + 46, + 44, + 34, + 15 + ] + } + ], + "layout": { + "autosize": true, + "xaxis": { + "autorange": true, + "range": [ + 15500000, + 34500000 + ], + "type": "linear" + }, + "yaxis": { + "autorange": true, + "range": [ + 0, + 106.3157894736842 + ], + "type": "linear" + } + } + }, + "image/png": "iVBORw0KGgoAAAANSUhEUgAABQkAAAFoCAYAAAD0GX0ZAAAgAElEQVR4nO3d33Pd9X3n8f1PerU3nV7tpDd7se3OnPH6KHZaj7QsAc+E2Okwtae7GjODmVWcyFXiMWZhi7ODEaGlwdk6iQm0NALGMWQhJpFLAQMBTOQ4iSmk/IgsYyODbOu9F6lPZKzvVz6Wvzl6n8/jMfO6kI585vv11zJfPa0j/l0AAAAAAEX7d70+AAAAAACgt0RCAAAAACicSAgAAAAAhRMJAQAAAKBwIiEAAAAAFE4kBAAAAIDCiYQAAAAAUDiREAAAAAAKJxICAAAAQOFEQgAAAAAonEgIAAAAAIUTCQEAAACgcCIhAAAAABROJAQAAACAwomEAAAAAFA4kRAAAAAACicSAgAAAEDhREIAAAAAKJxICAAAAACFEwkBAAAAoHAiIQAAAAAUTiQEAAAAgMKJhAAAAABQOJEQAAAAAAonEgIAAABA4URCAAAAACicSAgAAAAAhRMJAQAAAKBwIiEAAAAAFE4kBAAAAIDCiYQAAAAAUDiREAAAAAAKJxICAAAAQOFEQgAAAAAonEgIAAAAAIUTCQEAAACgcCIhAAAAABROJAQAAACAwomEAAAAAFA4kRAAAAAACicSAgAAAEDhREIAAAAAKJxICAAAAACFEwkBAAAAoHAiIQAAAAAUTiQEAAAAgMKJhAAAAABQOJEQAAAAAAonEgIAAABA4URCAAAAACicSAgAAAAAhRMJAQAAAKBwIiEAAAAAFE4kBAAAAIDCiYQAAAAAUDiREAAAAAAKJxICAAAAQOFEQgAAAAAonEgIAAAAAIUTCQEAAACgcCIhAAAAABROJAQAAACAwomEAAAAAFA4kRAAAAAACicSAgAAAEDhREIAAAAAKJxICAAAAACFEwkBAAAAoHAiIQAAAAAUTiQEAAAAgMKJhAAAAABQOJEQAAAAAAonEgIAAABA4URCAAAAACicSAgAAAAAhRMJAQAAAKBwIiEAAAAAFE4kBAAAAIDCiYQAAAAAUDiREAAAAAAKJxICAAAAQOFEQgAAAAAonEgIAAAAAIUTCQEAAACgcCIhAAAAABROJAQAAACAwomEAAAAAFA4kRAAAAAACicSAgAAAEDhREIAAAAAKJxICAAAAACFEwkBAAAAoHAiIQAAAAAUTiQEAAAAgMKJhAAAAABQOJEQAAAAAAonEgIAAABA4URCAAAAACicSAgAAAAAhRMJAQAAAKBwIiEAAAAAFE4kBAAAAIDCiYQAAAAAUDiREAAAAAAKJxICAAAAQOGKiITnzp2Lu+66K3bv3n3ZYzMzM7Ft27YYGBiIoaGh2LdvX1ePAwAAAEB2fR8Jn3322bjhhhvi05/+9KKRcGxsLEZHR2N6ejqOHj0ag4ODMTk5ecWPAwAAAEB2fR8JL7r33nsvi4Rzc3PRbrfj2LFjnfeNj4/Hzp07r+hxAAAAAOgHRUfCEydORKvVirNnz3beNzExEZs3b76ix6ucOnsufm/r99Lua09OXcPfeQAAAABWuqIj4dTUVLRarZifn++87+DBg7Fhw4Yrejwi4tSpU5ftzXd+3fPQt5z9r8d+suh5Ve3Fn/0qDr5yIuWeefXNrs7VrBc7ffp0z4/BzPp7Z86c6fkxmFl/z98zZva7GMtTdCS8+J2Cc3NznfdNTEzEpk2brujxiIjz589ftukzH/U89C1nd3//jUXPq2r/fd8LPT/mq90ffuX7XZ2rWS924cKFnh+DmfX3/D1jZk3P3zNm9rsYy1N0JJybm4vVq1df8jMH9+zZEzt27Liix6uU9nLj//GtF3t+zMuJhAAAAAClKzoSRkSMjo7G9u3b4+TJkzE1NRVDQ0Nx6NChK358MSJhnomEAAAAAAVEwqeeeirWrVsXAwMD0W63Y926dfH00093Hp+eno6RkZFot9sxODgYe/fuveTXL/X4YkTCPBMJAQAAAAqIhL0gEuaZSAgAAAAgEjZCJMwzkRAAAABAJGyESJhnIiEAAACASNgIkTDPREIAAAAAkbARImGeiYQAAAAAImEjRMI8EwkBAAAARMJGiIR5JhICAAAAiISNEAnzTCQEAAAAEAkbIRLmmUgIAAAAIBI2QiTMM5EQAAAAQCRshEiYZyIhAAAAgEjYCJEwz0RCAAAAAJGwESJhnomEAAAAACJhI0TCPBMJAQAAAETCRoiEeSYSAgAAAIiEjRAJ80wkBAAAABAJGyES5plICAAAACASNkIkzDOREAAAAEAkbIRImGciIQAAAIBI2AiRMM9EQgAAAACRsBEiYZ6JhAAAAAAiYSNEwjzrNhI+/8uTPT/m5ezxV37V1fnSv35/2+M9//N4tdv29z/p9W8fAABA3xEJGyAS5plISKlEQgAAABYSCRsgEuaZSEipREIAAAAWEgkbIBLmmUhIqURCAAAAFio+Er755puxdevWuO666+L666+P3bt3x9zcXOfxmZmZ2LZtWwwMDMTQ0FDs27dvyecUCfNMJKRUIiEAAAALFR8JN27cGPv374+IiDNnzsTw8HA8+OCDncfHxsZidHQ0pqen4+jRozE4OBiTk5O1zykS5plISKlEQgAAABYqOhJeuHAhVq1aFUeOHOm87957741du3ZFRMTc3Fy02+04duxY5/Hx8fHYuXNn7fOKhHkmElIqkRAAAICFio6EEb+JfoODg/Hoo4/GsWPHYsOGDZ0oeOLEiWi1WnH27NnOx09MTMTmzZtrn1MkzDORkFKJhAAAACxUfCR8+eWX4+abb46dO3fGmjVrYnR0NGZnZyMiYmpqKlqtVszPz3c+/uDBg7Fhw4bO29PT05ftl796r+dfRC9nu7738qLnVbU/f/Bwz4/5avepsQNdnesPXvllz495Odv/46muztdWxmZmZq75c2aOhLd++/meXxOzftvp06d7fgxm1t87depUz4/BzPp/LE/RkfDUqVPxmc98Jt56662IiPjggw/i1ltvjdHR0Yj47XcSLvwfmUxMTMSmTZs6b8/Pz1+2mdm5nn8RvZztPvjTRc+ratm/k7Cbc/3nX0z3/JiXs8defrur87WVs2stcyT0nYQAkE+v76XMrIyxPEVHwldeeSXWrFlzyfsOHjwY69evj4jf/EzC1atXX/IzCffs2RM7duyofV4vN84zLzemVCIhAAAACxUdCc+cORPr1q2L/fv3x/z8fMzOzsbIyEjcfffdnY8ZHR2N7du3x8mTJ2NqaiqGhobi0KFDtc8rEuaZSEipREIAAAAWKjoSRkS8/vrrMTw8HENDQ3HDDTfEPffcEx999FHn8enp6RgZGYl2ux2Dg4Oxd+/eJZ9TJMwzkZBSiYQAAAAsVHwkbIJImGciIaUSCQEAAFhIJGyASJhnIiGlEgkBAABYSCRsgEiYZyIhpRIJAQAAWEgkbIBImGciIaUSCQEAAFhIJGyASJhnIiGlEgkBAABYSCRsgEiYZyIhpRIJAQAAWEgkbIBImGciIaUSCQEAAFhIJGyASJhnIiGlEgkBAABYSCRsgEiYZyIhpRIJAQAAWEgkbIBImGciIaUSCQEAAFhIJGyASJhnIiGlEgkBAABYSCRsgEiYZyIhpRIJAQAAWEgkbIBImGciIaUSCQEAAFhIJGyASJhnIiGlEgkBAABYSCRsgEiYZyIhpRIJAQAAWEgkbIBImGciIaUSCQEAAFhIJGyASJhnIiGlEgkBAABYSCRsgEiYZyIhpRIJAQAAWEgkbIBImGciIaUSCQEAAFhIJGyASJhnIiGlEgkBAABYSCRsgEiYZyIhpRIJAQAAWEgkbIBImGciIaUSCQEAAFhIJGyASJhnIiGlEgkBAABYSCRsgEiYZyIhpRIJAQAAWEgkbIBImGciIaUSCQEAAFhIJIyI1157LbZu3Rpr166Ndrsd7733XuexmZmZ2LZtWwwMDMTQ0FDs27dvyecTCfNMJKRUIiEAAAALFR8JX3311RgcHIyJiYl4991345133om5ubnO42NjYzE6OhrT09Nx9OjRGBwcjMnJydrnFAnzTCSkVCIh5PLMT9/r+efecvbMT99b+iQBAOip4iPh8PBwPPbYY4s+Njc3F+12O44dO9Z53/j4eOzcubP2OUXCPBMJKZVICLmIhAAANK3oSHjmzJlotVoxNjYWQ0NDsWbNmti+fXucOXMmIiJOnDgRrVYrzp492/k1ExMTsXnz5s7b8/Pzl21mdq7nN+PL2e6DP130vKqWPRJ2c67//Ivpnh/zcvbYy293db7Wv8seCXv9+2f2u97Tb7zb88+95ezpN97t+e+hmZmZ9f9YnqIj4fHjx6PVasXk5GTMzs7Ge++9F7fcckuMjY1FRMTU1FS0Wq1L/qAdPHgwNmzY0Hn75MmTl+2Xv8r9r/13TLyy6HlV7c8fPNzzY77afWrsQFfn+v9+cqLnx7ycPTR5rKvztZWxU6dOXfPnzBwJb/328z2/Jma/6z32ws97/rm3nD32ws97/ntoZr3dBx980PNjMLP+H8sjErZaceHChc77nnvuuVi7dm1E/PY7CRf+jMKJiYnYtGlT7fN6uXGeebkxpcocCb3cmBJ5uTEAAE0rOhLOzs7GqlWr4vjx4533TU5Oxo033hgRv/mZhKtXr77kZxLu2bMnduzYUfu8ImGeiYSUSiSEXERCAACaVnQkjIj46le/Glu2bInp6el4//33Y3h4OB544IHO46Ojo7F9+/Y4efJkTE1NxdDQUBw6dKj2OUXCPBMJKZVICLmIhAAANK34SPjhhx/GHXfcEevWrYvrrrsu7r///jh37lzn8enp6RgZGYl2ux2Dg4Oxd+/eJZ9TJMwzkZBSiYSQi0gIAEDTio+ETRAJ80wkpFQiIeQiEgIA0DSRsAEiYZ6JhJRKJIRcREIAAJomEjZAJMwzkZBSiYSQi0gIAEDTRMIGiIR5JhJSKpEQchEJAQBomkjYAJEwz0RCSiUSQi4iIQAATRMJGyAS5plISKlEQshFJOxfL5w4GXcdeCPtPjh7rte/hQDANSISNkAkzDORkFKJhJCLSNi//ubQz3t+fZazt2fO9vq3EAC4RkTCBoiEeSYS1vufD78c/238xyk39r1XuzrX0oiEkItI2L9EQgBgpRAJGyAS5plIWO8zXzvU82O+2n32vh93da6lEQkhF5Gwf4mEAMBKIRI2QCTMM5GwnkjYv0qKhDsff73nx7ycnb8w39CfAjIRCfuXSAgArBQiYQNEwjwTCeuJhP1LJMwzkZAIkbCfiYQAwEohEjZAJMwzkbCeSNi/RMI8EwmJEAn7mUgIAKwUImEDRMI8EwnriYT9SyTMM5GQCJGwn4mEAMBKIRI2QCTMM5GwnkjYv0TCPBMJiRAJ+5lICACsFCJhA0TCPBMJ64mE/UskzLNuIuHbM2d7frzL2d8c+nmXf5LLIRL2L5EQAFgpRMIGiIR5JhLWEwn7l0iYZyIhESJhPxMJAYCVQiRsgEiYZyJhPZGwf4mEeSYSEiES9jOREABYKUTCBoiEeSYS1hMJ+5dImGciIREiYT8TCQGAlUIkbIBImGciYT2RsH+JhHkmEhIhEvYzkRAAWClEwgaIhHkmEtYrKRLu/+c3e37My9nUO6e7Ol+RMM9EQiJEwn4mEkI+n73vxz3/3LvafeZrh3r92wesYCJhA0TCPBMJ64mEeSYSVhMJ80wkrCYS9i+REPIRCYF+JRI2QCTMM5GwnkiYZyJhNZEwz0TCaiJh/xIJIR+REOhXImEDRMI8EwnriYR5JhJWEwnzrNtI+A9H3oq7DryRcg882925ioT9SySEfEqKhFPvnO75fzOXM39HQXdEwgaIhHkmEtYTCfNMJKwmEuZZt5HwC994rufHfLX74zt+0NW5ioT9SySEfEqKhI+/8queH/Ny9vwvTzb0pwD6k0j4bz7++OPYsmVLbNmy5ZL3z8zMxLZt22JgYCCGhoZi3759Sz6XSJhnImE9kTDPRMJqImGeiYTVRML+JRJCPiJhnomE0B2RMCIuXLgQX/7yl2Pz5s2XRcKxsbEYHR2N6enpOHr0aAwODsbk5GTt84mEeSYS1hMJ80wkrCYS5plIWE0k7F8iIeQjEuaZSAjdEQkj4s4774zx8fF44oknLomEc3Nz0W6349ixY533jY+Px86dO2ufTyTMM5GwnkiYZyJhNZEwz0TCaqVFwj++4wc9P+ar3Re+8VxX5yoSQj4iYZ6JhNCd4iPh/fffH7fffnvMz89fFglPnDgRrVYrzp797c3PxMREbN68ufY5RcI8EwnriYR5JhJWEwnzTCSsJhLmmUgI/U8kzDORELpTdCQ8cOBAjIyMxPnz5yMiLouEU1NT0Wq1Yn7+t1+gHTx4MDZs2NB5+9y5c5ft16dzf5F29/ffWPS8qvbf973Q82O+2v3hV74fc3NzV7zDP8v9Rdo/vvhmV+e7dvcPe37MV7vrx3/U1bl+6/Aven7My9nrb53s6vM2cyQcefjlrs51x8SrPT/m5eyjj+eu+FxPvH+658e7nN3/zM+6urYb//afen7MV7s/vuMHXZ3rD17/154f83L2g9f/tavzzRwJN/7tP3V1rvc/87OeH/NyduL9012dr5W9bu7NVvKuH/9Rzz/3rnZrd/+wq3P9xxdz/0P64Z+91/M/L/ab/a7+nmF5io6E9913X6xevTra7Xa02+1YtWpVtFqtaLfbcfbs2c53Es7NzXV+zcTERGzatKnz9qlTpy7bm+/8uud/GS5n/+uxnyx6XlXbtDfvF2mfGjsQH3zwwRXvh6+/1fNjXs4e/qfjXZ3vp//q6Z4f89Xuuj2HujrXvYemen7My9mR4//a1flmjoS37X+xq3P9y394qefHvJydnDl1xef603/J/Q8Ze5482tW1vemv834nx3+6/cmuzvWJI7/s+TEvZ08c+WVX5/ufbn+y58d8tbvpr3/c1bnuefJoz495Ofvpv7zX1flauTt9+nTPj+Fa7bo9eV9t8+m/erqrc334n473/JiXsx++/lbP/7zYb9ZNY1jOWJ6iI+EnLfYzCVevXn3JzyTcs2dP7Nixo/Z5vNw4z7zcuJ6XG+eZlxtX83LjPPNy42pebpxnXm4M/c/LjfPMy42hOyLhAp+MhBERo6OjsX379jh58mRMTU3F0NBQHDpU/xerSJhnImE9kTDPRMJqImGeiYTVRMI8Ewmh/4mEeSYSQndEwgUWi4TT09MxMjIS7XY7BgcHY+/evUs+j0iYZyJhPZEwz0TCaiJhnomE1UTCPBMJKdHs3Pn40c/eT7t3P/ioq/MVCfNMJITuiIQNEAnzTCSsJxLmmUhYTSTMM5GwmkiYZyIhJZp6J/f/OGv/P7/Z1fmKhHkmEkJ3RMIGiIR5JhLWEwnzTCSsJhLmmUhYTSTMM5GQEomEeSYSAnVEwgaIhHkmEtYTCfNMJKwmEuaZSFhNJMwzkZASiYR5JhICdUTCBoiEeSYS1hMJ80wkrCYS5plIWE0kzDORkBKJhHkmEgJ1RMIGiIR5JhLWEwnzTCSsJhLmmUhYTSTMM5GQEomEeSYSAnVEwgaIhHkmEtYTCfNMJKwmEuaZSFhNJMwzkZASiYR5JhICdUTCBoiEeSYS1hMJ80wkrCYS5plIWE0kzDORkBKJhHkmEta77+mfxV0H3ki5br/Wg8WIhA0QCfNMJKwnEuaZSFhNJMwzkbCaSJhnIiElEgnzTCSs94df+X7Pj/lq9z++9WJX5wqLEQkbIBLmmUhYTyTMM5GwmkiYZyJhNZEwz0RCSiQS5plIWE8kpHQiYQNEwjwTCeuJhHkmElYTCfNMJKwmEuaZSEiJRMI8EwnriYSUTiRsgEiYZyJhPZEwz0TCaiJhnomE1UTCPBMJKZFImGciYT2RkNKJhA0QCfNMJKwnEuaZSFhNJMwzkbCaSJhnIiElEgnzTCSsJxJSOpGwASJhnomE9UTCPBMJq4mEeSYSVhMJ80wkpEQiYZ6JhPVEQkonEjZAJMwzkbCeSJhnImE1kTDPRMJqImGeiYSUSCTMM5GwnkhI6UTCBoiEeSYS1hMJ80wkrCYS5plIWE0kzDORkBKJhHkmEtYTCSmdSNgAkTDPRMJ6ImGeiYTVRMI8EwmriYR5JhJy0ba//0nPr8/V7ve3Pd7VuYqEeSYS1hMJKZ1I2ACRMM9EwnoiYZ6JhNVEwjwTCauJhHkmEnKRSJhnImE1kTDPREKuBZGwASJhnomE9UTCPBMJq4mEeSYSVhMJ80wk5CKRMM9EwmoiYZ6JhFwLImEDRMI8EwnriYR5JhJWEwnzTCSsJhLmmUjIRSJhnomE1UTCPBMJuRZEwgaIhHkmEtYTCfNMJKwmEuaZSFhNJMwzkZCLRMI8EwmriYR5JhJyLYiEDRAJ80wkrCcS5plIWE0kzDORsJpImGciIReJhHkmElYTCfNMJORaEAkbIBLmmUhYTyTMM5GwmkiYZyJhNZEwz0RCLhIJ80wkrCYS5plIyLUgEjZAJMwzkbCeSJhnImE1kTDPRMJqImGeiYRcJBLmmUhYTSTMM5GQa0EkbIBImGciYT2RMM9EwmoiYZ6JhNVEwjwTCblIJMwzkbCaSJhnIiHXgkjYAJEwz0TCeiJhnomE1UTCPBMJq4mEeSYScpFImGciYTWRMM9EQq6F4iPhAw88EJ/73Oei3W7H+vXr4+GHH77k8ZmZmdi2bVsMDAzE0NBQ7Nu3b8nnFAnzTCSsJxLmmUhYTSTMM5GwmkiYZyIhF4mEeSYSVhMJ80wk5FooPhKOj4/HkSNH4uTJk3H48OEYGBiIF154ofP42NhYjI6OxvT0dBw9ejQGBwdjcnKy9jlFwjwTCeuJhHkmElYTCfNMJKwmEuaZSMhFImGeiYTVRMI8Ewm5FoqPhJ80PDwcDz30UEREzM3NRbvdjmPHjnUeHx8fj507d9Y+h0iYZyJhPZEwz0TCaiJhnomE1UTCPBMJuUgkzDORsJpImGciIdeCSLjA2bNnY926dfH8889HRMSJEyei1WrF2bO/vfmZmJiIzZs31z6PSJhnImE9kTDPRMJqImGeiYTVRMI8Ewnr3XXgjbT74VR3f45FwjwTCauJhHkmEnItiIQL7Nq1K7Zu3Rrz87/5gmxqaiparVbn7YiIgwcPxoYNGzpvf/zxx5ftvVMf9vwviOXsrw4cXfS8qvYXf/d8z4/5aveHX/l+V+c6eezdnh/zcvaPL77Z1fmu3f3Dnh/z1e768R91da77JnN/kfbav0x3db6ZI+HIwy93da5f/d5Pen7My9ns2Y+u+Fx/8e6pnh/vcvb1p491dW03PHC458d8tfujXU91da5Pvvp2z495OXvy1be7Ot8/2vVUz4/5arfhgcNdnevXnz7W82Nezn7x7qkrPtfZsx/1/HiXs69+7yddXduRh1/u+TFf7X5/2+Ndnetr/zLd82NezvZN/ryr871+/Ec9P+ar3drdP+zqXP/xxdz/kD557N2uzjdzJPyLv3u+q3Pt17E8IuG/ueeee+Lmm2+OM2fOdN538TsJ5+bmOu+bmJiITZs2dd4+c+bMZXv7/Zme/wWxnN35+KuLnlfVNn8z73dyfGrsQFfneuho7i/SHnnu512d75q7n+n5MV/trttzqKtz/eazub9Ie+nn73R1vpkj4W37X+zqXMcezftF2u9t/V6c+uD0FZ/rsbd/3fPjXc7ufeqNrq7t5/9msufHfLX7o11PdXWuB17O/UXagZff7Op8M0fCz//NZFfneu9Tb/T8mJezY2//+orP9dQHub/bbOzRl7u6trftz/tqm9/f9nhX5/rSz9/p+TEvZ9989lhX53vdnryvtllz9zNdnesjz+X+h/RDR9/u6nw/NXag58d8tdv8zee6Otd+HctTfCQ8f/587Nq1K4aHhy/7AzU3NxerV6++5GcS7tmzJ3bs2FH7nF5unGdeblzPy43zzMuNq3m5cZ55uXE1LzfOMy83rnb+wnzPj3c52/n4611dWy83zjMvN67m5cZ55uXGXAtFR8Lz58/HrbfeGl/84hdjZmYmZmdnY3Z29pKfQTg6Ohrbt2+PkydPxtTUVAwNDcWhQ/V/sYqEeSYS1hMJ80wkrCYS5plIWE0kzDORsJpImGciYT2RMM9EQuhO0ZHw9OnT0Wq1LttNN93U+Zjp6ekYGRmJdrsdg4ODsXfv3iWfVyTMM5GwnkiYZyJhNZEwz0TCaiJhnomE1UTCPBMJ64mEeSYSQneKjoRNEQnzTCSsJxLmmUhYTSTMM5GwmkiYZyJhNZEwz0TCeiJhnomE0B2RsAEiYZ6JhPVEwjwTCauJhHkmElYTCfNMJKwmEuaZSFhPJMwzkRC6IxI2QCTMM5GwnkiYZyJhNZEwz0TCaiJhnomE1UTCPBMJ64mEeSYSQndEwgaIhHkmEtYTCfNMJKwmEuaZSFhNJMwzkbCaSJhnImE9kTDPRELojkjYAJEwz0TCeiJhnomE1UTCPBMJq4mEeSYSVhMJ80wkrCcS5plIWO3w8V/HXQfeSDuaIRI2QCTMM5GwnkiYZyJhNZEwz0TCaiJhnomE1UTCPBMJ64mEeSYSVvvak1M9P+bl7NTZc12dL1dGJGyASJhnImE9kTDPRMJqImGeiYTVRMI8EwmriYR5JhLWEwnzTCSsJhKyGJGwASJhnomE9UTCPBMJq4mEeSYSVhMJ80wkrCYS5plIWE8kzDORsJpIyGJEwgaIhHkmEtYTCfNMJKwmEuaZSFhNJMwzkbCaSJhnImE9kTDPRMJqIiGLEQkbIBLmmUhYTyTMM5GwmkiYZyJhNZEwz0TCaiJhnomE9UTCPBMJq4mELEYkbIBImGciYT2RMM9EwmoiYZ6JhNVEwjwTCauJhHkmEtYTCfNMJKwmErIYkbABImGeiYT1RMI8EwmriYR5JhJWEwnzTCSsJhLmmUhYTyTMM5GwmkjIYkTCBoiEeSYS1hMJ80wkrCYS5plIWE0kzDORsJpImGciYT2RMM9EwpxC9+IAAA34SURBVGoiIYsRCRsgEuaZSFhPJMwzkbCaSJhnImE1kTDPRMJqImGeiYT1RMI8EwmriYQsRiRsgEiYZyJhPZEwz0TCaiJhnomE1UTCPBMJq4mEeSYS1hMJ80wkrCYSshiRsAEiYZ6JhPVEwjwTCauJhHkmElYTCfNMJKwmEuaZSFhPJMwzkbCaSMhiRMIGiIR5JhLWEwnzTCSsJhLmmUhYTSTMM5GwmkiYZyJhPZEwz0TCaiIhixEJGyAS5plIWE8kzDORsJpImGciYTWRMM9EwmoiYZ6JhPVEwjwTCauJhCxGJGyASJhnImE9kTDPRMJqImGeiYTVRMI8EwmriYR5JhLWEwnzTCSsJhKyGJGwASJhnomE9UTCPBMJq4mEeSYSVhMJ80wkrCYS5plIWE8kzDORsJpIyGJEwgaIhHkmEtYTCfNMJKwmEuaZSFhNJMwzkbCaSJhnImE9kTDPRMJqIiGLEQkbIBLmmUhYTyTMM5GwmkiYZyJhNZEwz0TCaiJhnomE9UTCPBMJq4mELEYkbIBImGciYT2RMM9EwmoiYZ6JhNVEwjwTCauJhHkmEtYTCfNMJKwmErIYkbABImGeiYT1RMI8EwmriYR5JhJWEwnzTCSsJhLmmUhYTyTMM5GwmkjIYkTCBoiEeSYS1hMJ80wkrCYS5plIWE0kzDORsJpImGciYT2RMM9EwmoiIYsRCZcwMzMT27Zti4GBgRgaGop9+/Yt+WtEwjwTCeuJhHkmElYTCfNMJKwmEuaZSFhNJMwzkbCeSJhnImE1kZDFiIRLGBsbi9HR0Zieno6jR4/G4OBgTE5O1v4akTDPRMJ6ImGeiYTVRMI8EwmriYR5JhJWEwnzTCSsJxLmmUhYTSRkMSJhjbm5uWi323Hs2LHO+8bHx2Pnzp21v04kzDORsJ5ImGciYTWRMM9EwmoiYZ6JhNVEwjwTCeuJhHkmElYTCVmMSFjjxIkT0Wq14uzZ3978TExMxObNm2t/nUiYZyJhPZEwz0TCaiJhnomE1UTCPBMJq4mEeSYS1hMJ80wkrCYSshiRsMbU1FS0Wq2Yn//tF2gHDx6MDRs2dN5+8MEHL9v4A3t7/gmznG28c/+i51W1tTu+2/Njvtr9wcijXZ3rV+79u54f83J22//5Vlfn+x+//Pc9P+ar3X/+y0e6Otfhu7/V82Nezu78+v/t6nz//W2P9vyYr3b/dedDXZ3r+jv29/yYl7O//caVn+vX/vqbPT/e5ezP//d3urq2/+UrD/f8mK92/2HbP3R1rl+6Z1/Pj3k5+9I9+7o63/+w7R96fsxXu//ylYe7Otc//9/f6fkxL2df++tvXvG5/u03Huz58S5n6+/o7h75v+58qOfHfLX797d1d49859f/b8+PeTkbvru7e+T//JeP9PyYr3b/8ct/39W53vZ/ct8jf+Xev+vqfP9gJO898tod3+3qXDfemfseefyBvYueF8sjEta4+J2Ec3NznfdNTEzEpk2bOm9/4xvfMDNrdN/+9rd7fgxm1t/77ne/2/NjMLP+nvsZM/tdjOURCWvMzc3F6tWrL/mZhHv27IkdO3b08KgAAAAA4NoSCZcwOjoa27dvj5MnT8bU1FQMDQ3FoUPd/RwHAAAAAFjJRMIlTE9Px8jISLTb7RgcHIy9e/f2+pAAAAAA4JoSCVeQc+fOxV133RW7d+9e9PHXXnsttm7dGmvXro12ux3vvffb/1Pgxo0b40//9E9jdna2877z58/HDTfcEH/yJ3/S+LFTr+7avvnmm7F169a47rrr4vrrr4/du3df8nMwXduV6YEHHojPfe5z0W63Y/369fHwww9f8vjMzExs27YtBgYGYmhoKPbt23fJ467ryrXUtV3qcdd25Vrq2l308ccfx5YtW2LLli2XvN+1Xbmu5Nq6j8ppqWvrPiqv73znO/GFL3whBgYGYt26dXH77bfHhx9+2HncvVROS11X91F5LXVtL3IflZtIuEI8++yzccMNN8SnP/3pRUPSq6++GoODgzExMRHvvvtuvPPOO5fdAN14442xf//+zvuefPLJWL9+vU+4Hlvq2m7cuLFz3c6cORPDw8OX/F+ZXNuVaXx8PI4cORInT56Mw4cPx8DAQLzwwgudx8fGxmJ0dDSmp6fj6NGjMTg4GJOTk53HXdeVa6lru9Tjru3KtdS1i4i4cOFCfPnLX47NmzcvenPr2q5MS11b91F5Xcnfue6jcnriiSfi9ddfj1OnTsUvfvGL+PznPx/f/va3O4+7l8ppqevqPiqvpa5thPuofiASrjD33nvvoiFpeHg4Hnvsscpft3HjxnjkkUfis5/9bJw7dy4iIjZt2hSPPPKIT7gVYrFre+HChVi1alUcOXLkko/btWtX523XNofh4eF46KGHIuI3/9Ojdrt9yf/0aHx8PHbu3Nl523XNY+G1vZLHXds8Fru2d955Z4yPj8cTTzyx6M2ta5vDJ6+t+6j+sfDauo/qDxcuXIjjx4/HTTfdFC+++GJEuJfqB4td18W4j8qn7tq6j8pPJFxhFgtJZ86ciVarFWNjYzE0NBRr1qyJ7du3x5kzZzofs3Hjxjhy5Ejcdttt8cQTT8RLL70Ut9xyS7z22ms+4VaIqgA8Pj4eg4OD8eijj8axY8diw4YNl9wQubYr39mzZ2PdunXx/PPPR0TEiRMnotVqxdmzZzsfMzExEZs3b+687brm8MlreyWPu7Y5LHbt7r///rj99ttjfn6+8ubWtV35Pnlt3Uf1j8U+b91H5ddqtWL16tWXhHz3Uvktdl0/yX1UTlXX1n1UfxAJV5jFQtLx48ej1WrF5ORkzM7OxnvvvRe33HJLjI2NdT7m4ifcCy+8EBs2bIiRkZE4fPiwT7gVpCoSvvzyy3HzzTfHzp07Y82aNTE6OnrJz2lwbVe+Xbt2xdatW2N+fj4iIqampqLVanXejog4ePBgbNiwofO265rDJ6/tlTzu2ubwyWt34MCBGBkZifPnz0dE1N7curYr2yevrfuo/rHY37nuo/K7+F1JN954YzzzzDMR4V6qHyx2XT/JfVROi11b91H9QyRcYeoi4YULFzrve+6552Lt2rWdty9+wkX85lt2/+zP/iwiwifcCrLYtT116lR85jOfibfeeisiIj744IO49dZbY3R0tPMxru3Kds8998TNN998yXekXPzX74U/72piYiI2bdrUedt1XfkWu7ZX8rhru/Itdu3uu+++WL16dbTb7Wi327Fq1apotVrRbrc738ni2q58i11b91H9YbFr6z6qv3z961/vxHv3Uv1j4XVdyH1Ufguvrfuo/iESrjCLhaTZ2dlYtWpVHD9+vPO+ycnJuPHGGztvL/yEe+WVV+Kll16KCJ9wK8li1/aVV16JNWvWXPK+gwcPxvr16ztvu7Yr0/nz52PXrl0xPDx82c3N3NxcrF69+pKXO+3Zsyd27NjRedt1Xbnqru2VPO7arlxLXbuF6v4FPMK1XWnqrq37qNzqrq37qP5y9913x+233x4R7qX6ycLrGuE+qp988tou5D4qL5Fwhal6SepXv/rV2LJlS0xPT8f7778fw8PD8cADD3QeX/gJt5BPuJWj6udNrlu3Lvbv3x/z8/MxOzsbIyMjcffdd3c+xrVdec6fPx+33nprfPGLX4yZmZmYnZ2N2dnZS35uzujoaGzfvj1OnjwZU1NTMTQ0FIcOHeo87rquTEtd2yu59q7tynQl126hpW5uF3Jte+tKrq37qJyWurbuo/K6cOFCfOlLX4oXX3wxpqen45lnnok1a9bE4cOHOx/jXiqfpa6r+6i8ruRzdiH3UXmJhCvEU089FevWrYuBgYFot9uxbt26ePrppzuPf/jhh3HHHXfEunXr4rrrrov777+/838EivAJt5ItdW1ff/31GB4ejqGhobjhhhvinnvuiY8++qjzuGu78pw+fTpardZlu+mmmzofMz09HSMjI9Fut2NwcDD27t17yXO4rivTUtf2Sq69a7syXcm1W8jNbR5Xcm3dR+V0JdfWfVRO8/Pzcccdd8T69euj3W7Hhg0b4sCBA5d8jHupfJa6ru6j8rqSz9mF3EflJRICAAAAQOFEQgAAAAAonEgIAAAAAIUTCQEAAACgcCIhAAAAABROJAQAAACAwomEAAAAAFA4kRAAAAAACicSAgAAAEDhREIAAAAAKJxICAAAAACFEwkBAAAAoHAiIQAAAAAUTiQEAAAAgMKJhAAAAABQOJEQAAAAAAonEgIAAABA4URCAAAAACicSAgAAAAAhRMJAQAAAKBwIiEAAAAAFE4kBAAAAIDCiYQAAAAAUDiREAAAAAAKJxICAAAAQOFEQgAAAAAonEgIAAAAAIUTCQEAAACgcCIhAAAAABROJAQAAACAwomEAAAAAFA4kRAAAAAACicSAgAAAEDhREIAAAAAKJxICAAAAACFEwkBAAAAoHAiIQAAAAAUTiQEAAAAgMKJhAAAAABQOJEQAAAAAAonEgIAAABA4URCAAAAACicSAgAAAAAhRMJAQAAAKBwIiEAAAAAFE4kBAAAAIDCiYQAAAAAUDiREAAAAAAKJxICAAAAQOFEQgAAAAAonEgIAAAAAIUTCQEAAACgcCIhAAAAABROJAQAAACAwomEAAAAAFA4kRAAAAAACicSAgAAAEDhREIAAAAAKJxICAAAAACFEwkBAAAAoHAiIQAAAAAUTiQEAAAAgMKJhAAAAABQOJEQAAAAAAonEgIAAABA4URCAAAAACicSAgAAAAAhfv/yhwjfdCwcaIAAAAASUVORK5CYII=", + "text/html": [ + "
" + ], + "text/vnd.plotly.v1+html": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import pandas as pd\n", + "import numpy as np\n", + "import scipy as sp\n", + "import plotly.offline as py\n", + "import plotly.figure_factory as ff\n", + "import plotly.graph_objs as go\n", + "from plotly.offline import get_plotlyjs, init_notebook_mode\n", + "\n", + "pandasDF = oskar.histogram(df,\"start\",1000000).toPandas()\n", + "\n", + "get_plotlyjs()\n", + "init_notebook_mode(connected=True)\n", + "\n", + "data = [go.Bar(x=pandasDF[\"start\"], y=pandasDF[\"count\"])]\n", + "py.iplot(data)" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "" + ], + "text/vnd.plotly.v1+html": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.plotly.v1+json": { + "config": { + "linkText": "Export to plot.ly", + "plotlyServerURL": "https://plot.ly", + "showLink": true + }, + "data": [ + { + "hoverinfo": "text", + "marker": { + "color": "rgb(61,153,112)" + }, + "mode": "lines", + "type": "scatter", + "uid": "33df76e2-a40b-46f6-85b6-eaa89342b8f1", + "x": [ + 15, + 15, + 25, + 25 + ], + "xaxis": "x", + "y": [ + 0, + 14, + 14, + 0 + ], + "yaxis": "y" + }, + { + "hoverinfo": "text", + "marker": { + "color": "rgb(61,153,112)" + }, + "mode": "lines", + "type": "scatter", + "uid": "f0e4718c-8a94-43a3-b7b2-f2aead5e43cc", + "x": [ + 45, + 45, + 55, + 55 + ], + "xaxis": "x", + "y": [ + 0, + 7.937253933193772, + 7.937253933193772, + 0 + ], + "yaxis": "y" + }, + { + "hoverinfo": "text", + "marker": { + "color": "rgb(61,153,112)" + }, + "mode": "lines", + "type": "scatter", + "uid": "964ac19f-f803-4502-9e62-94537c374184", + "x": [ + 35, + 35, + 50, + 50 + ], + "xaxis": "x", + "y": [ + 0, + 22.538855339169288, + 22.538855339169288, + 7.937253933193772 + ], + "yaxis": "y" + }, + { + "hoverinfo": "text", + "marker": { + "color": "rgb(61,153,112)" + }, + "mode": "lines", + "type": "scatter", + "uid": "612b220c-63a5-49ce-9902-97cd98ee444c", + "x": [ + 20, + 20, + 42.5, + 42.5 + ], + "xaxis": "x", + "y": [ + 14, + 40.22437072223753, + 40.22437072223753, + 22.538855339169288 + ], + "yaxis": "y" + }, + { + "hoverinfo": "text", + "marker": { + "color": "rgb(61,153,112)" + }, + "mode": "lines", + "type": "scatter", + "uid": "99d81210-eac1-4fb5-9d1c-75019cd9ba9d", + "x": [ + 5, + 5, + 31.25, + 31.25 + ], + "xaxis": "x", + "y": [ + 0, + 49.01020301937138, + 49.01020301937138, + 40.22437072223753 + ], + "yaxis": "y" + }, + { + "hoverinfo": "text", + "marker": { + "color": "rgb(61,153,112)" + }, + "mode": "lines", + "type": "scatter", + "uid": "1eb57830-1275-4d76-81ee-a26134239240", + "x": [ + 85, + 85, + 95, + 95 + ], + "xaxis": "x", + "y": [ + 0, + 1, + 1, + 0 + ], + "yaxis": "y" + }, + { + "hoverinfo": "text", + "marker": { + "color": "rgb(61,153,112)" + }, + "mode": "lines", + "type": "scatter", + "uid": "f5f976b6-0ca1-4397-8133-9545231b441c", + "x": [ + 75, + 75, + 90, + 90 + ], + "xaxis": "x", + "y": [ + 0, + 21.93171219946131, + 21.93171219946131, + 1 + ], + "yaxis": "y" + }, + { + "hoverinfo": "text", + "marker": { + "color": "rgb(61,153,112)" + }, + "mode": "lines", + "type": "scatter", + "uid": "05b2e115-a852-4a79-adc2-9e68134c67c2", + "x": [ + 65, + 65, + 82.5, + 82.5 + ], + "xaxis": "x", + "y": [ + 0, + 55.00909015790027, + 55.00909015790027, + 21.93171219946131 + ], + "yaxis": "y" + }, + { + "hoverinfo": "text", + "marker": { + "color": "rgb(61,153,112)" + }, + "mode": "lines", + "type": "scatter", + "uid": "af396f60-958e-4763-91c7-b1417617e588", + "x": [ + 18.125, + 18.125, + 73.75, + 73.75 + ], + "xaxis": "x", + "y": [ + 49.01020301937138, + 89.05616205518852, + 89.05616205518852, + 55.00909015790027 + ], + "yaxis": "y" + }, + { + "hoverinfo": "text", + "marker": { + "color": "rgb(255,65,54)" + }, + "mode": "lines", + "type": "scatter", + "uid": "ac6eb5b2-1794-4981-a763-36535141c8cd", + "x": [ + 105, + 105, + 115, + 115 + ], + "xaxis": "x", + "y": [ + 0, + 22, + 22, + 0 + ], + "yaxis": "y" + }, + { + "hoverinfo": "text", + "marker": { + "color": "rgb(255,65,54)" + }, + "mode": "lines", + "type": "scatter", + "uid": "72fa80a4-dca7-4223-b98f-948230261967", + "x": [ + 125, + 125, + 135, + 135 + ], + "xaxis": "x", + "y": [ + 0, + 8, + 8, + 0 + ], + "yaxis": "y" + }, + { + "hoverinfo": "text", + "marker": { + "color": "rgb(255,65,54)" + }, + "mode": "lines", + "type": "scatter", + "uid": "97a53470-398c-4472-a1be-dc9fd9a272ec", + "x": [ + 145, + 145, + 155, + 155 + ], + "xaxis": "x", + "y": [ + 0, + 20.8806130178211, + 20.8806130178211, + 0 + ], + "yaxis": "y" + }, + { + "hoverinfo": "text", + "marker": { + "color": "rgb(255,65,54)" + }, + "mode": "lines", + "type": "scatter", + "uid": "7502d126-c5b2-4e46-9dc4-fa0a20bff326", + "x": [ + 130, + 130, + 150, + 150 + ], + "xaxis": "x", + "y": [ + 8, + 36.742346141747674, + 36.742346141747674, + 20.8806130178211 + ], + "yaxis": "y" + }, + { + "hoverinfo": "text", + "marker": { + "color": "rgb(255,65,54)" + }, + "mode": "lines", + "type": "scatter", + "uid": "d1f3cbe0-0915-46f6-81e7-71cd2aa4b1ae", + "x": [ + 110, + 110, + 140, + 140 + ], + "xaxis": "x", + "y": [ + 22, + 51.0098029794274, + 51.0098029794274, + 36.742346141747674 + ], + "yaxis": "y" + }, + { + "hoverinfo": "text", + "marker": { + "color": "rgb(255,65,54)" + }, + "mode": "lines", + "type": "scatter", + "uid": "8942934b-1325-4855-b6df-51c5ab3a5605", + "x": [ + 175, + 175, + 185, + 185 + ], + "xaxis": "x", + "y": [ + 0, + 28.844410203711913, + 28.844410203711913, + 0 + ], + "yaxis": "y" + }, + { + "hoverinfo": "text", + "marker": { + "color": "rgb(255,65,54)" + }, + "mode": "lines", + "type": "scatter", + "uid": "fd1c7e73-f0d9-4e55-9b05-9143c1585f6a", + "x": [ + 165, + 165, + 180, + 180 + ], + "xaxis": "x", + "y": [ + 0, + 73.72923436466705, + 73.72923436466705, + 28.844410203711913 + ], + "yaxis": "y" + }, + { + "hoverinfo": "text", + "marker": { + "color": "rgb(255,65,54)" + }, + "mode": "lines", + "type": "scatter", + "uid": "07311b97-5403-43f4-ae38-42b9da358e23", + "x": [ + 125, + 125, + 172.5, + 172.5 + ], + "xaxis": "x", + "y": [ + 51.0098029794274, + 128.7555824032496, + 128.7555824032496, + 73.72923436466705 + ], + "yaxis": "y" + }, + { + "hoverinfo": "text", + "marker": { + "color": "rgb(0,116,217)" + }, + "mode": "lines", + "type": "scatter", + "uid": "29f1e126-b9c0-4758-a313-c8830bb76b8d", + "x": [ + 45.9375, + 45.9375, + 148.75, + 148.75 + ], + "xaxis": "x", + "y": [ + 89.05616205518852, + 200.37215375395854, + 200.37215375395854, + 128.7555824032496 + ], + "yaxis": "y" + } + ], + "layout": { + "autosize": false, + "height": 400, + "hovermode": "closest", + "showlegend": false, + "width": 1440, + "xaxis": { + "autorange": true, + "mirror": "allticks", + "range": [ + 0, + 185 + ], + "rangemode": "tozero", + "showgrid": false, + "showline": true, + "showticklabels": true, + "tickmode": "array", + "ticks": "outside", + "ticktext": [ + "9", + "3", + "4", + "11", + "6", + "7", + "5", + "2", + "0", + "1", + "14", + "17", + "15", + "16", + "8", + "10", + "18", + "12", + "13" + ], + "tickvals": [ + 5, + 15, + 25, + 35, + 45, + 55, + 65, + 75, + 85, + 95, + 105, + 115, + 125, + 135, + 145, + 155, + 165, + 175, + 185 + ], + "type": "linear", + "zeroline": false + }, + "yaxis": { + "autorange": true, + "mirror": "allticks", + "range": [ + 0, + 210.91805658311426 + ], + "rangemode": "tozero", + "showgrid": false, + "showline": true, + "showticklabels": true, + "ticks": "outside", + "type": "linear", + "zeroline": false + } + } + }, + "image/png": "iVBORw0KGgoAAAANSUhEUgAABQkAAAGcCAYAAAB6GiYWAAAgAElEQVR4nO3d/ZeV5Zno+f4jzh8x/0Bmfpi4Tnr1Xja7xDiVKl+WOGLT5lQOdCY1ii9pJF3INEFim2AvhQqkPcByGF+SY8gqY5T2NGmIaKJgOzH0KZqjxHRsYwoUBC2V6/xAqLbkZZf7rue563nuz2eta7FSG6j7qX25966vO+UfBQAAAABQtD/KfQAAAAAAIC+REAAAAAAKJxICAAAAQOFEQgAAAAAonEgIAAAAAIUTCQEAAACgcCIhAAAAABROJAQAAACAwomEAAAAAFA4kRAAAAAACicSAgAAAEDhREIAAAAAKJxICAAAAACFEwkBAAAAoHAiIQAAAAAUTiQEAAAAgMKJhAAAAABQOJEQAAAAAAonEgIAAABA4URCAAAAACicSAgAAAAAhRMJAQAAAKBwIiEAAAAAFE4kBAAAAIDCiYQAAAAAUDiREAAAAAAKJxICAAAAQOFEQgAAAAAonEgIAAAAAIUTCQEAAACgcCIhAAAAABROJAQAAACAwomEAAAAAFA4kRAAAAAACicSAgAAAEDhREIAAAAAKJxICAAAAACFEwkBAAAAoHAiIQAAAAAUTiQEAAAAgMKJhAAAAABQOJEQAAAAAAonEgIAAABA4URCAAAAACicSAgAAAAAhRMJAQAAAKBwIiEAAAAAFE4kBAAAAIDCiYQAAAAAUDiREAAAAAAKJxICAAAAQOFEQgAAAAAonEgIAAAAAIUTCQEAAACgcCIhAAAAABROJAQAAACAwomEAAAAAFA4kRAAAAAACicSAgAAAEDhREIAAAAAKJxICAAAAACFEwkBAAAAoHAiIQAAAAAUTiQEAAAAgMKJhAAAAABQOJEQAAAAAAonEgIAAABA4URCAAAAACicSAgAAAAAhRMJAQAAAKBwIiEAAAAAFE4kBAAAAIDCiYQAAAAAUDiREAAAAAAKJxICAAAAQOFEQgAAAAAonEgIAAAAAIUTCQEAAACgcCIhAAAAABROJAQAAACAwomEAAAAAFA4kRAAAAAACicSAgAAAEDhREIAAAAAKJxICAAAAACFEwkBAAAAoHAiIQAAAAAUTiQEAAAAgMKJhAAAAABQOJEQAAAAAAonEgIAAABA4URCAAAAACicSAgAAAAAhRMJG6rT6eQ+Qu263W588MEHuY9Rq6uuuipOnDiR+xi1+tKXvhTHjx/PfYxaXXfddfHWW2/lPkatbrzxxnjjjTdyH6NWN998cxw5ciT3MWo1MjIShw8fzn2MWn31q1+NV199NfcxanXrrbfGwYMHcx+jVrfddlu8+OKLuY9Rq1WrVsVzzz2X+xi1WrNmTezZsyf3MWr1zW9+M5555pncx6jVhg0b4qmnnsp9jFp95zvfiV27duU+Rq0efPDB+P73v5/7GLXaunVr7Ny5M/cxarV9+/bYtm1b7mM0mkjYUCJhGUTCMoiEZRAJyyASlkEkLINIWAaRsAwiYRlEwnQiYUOJhGUQCcsgEpZBJCyDSFgGkbAMImEZRMIyiIRlEAnTiYQNJRKWQSQsg0hYBpGwDCJhGUTCMoiEZRAJyyASlkEkTCcSNpRIWAaRsAwiYRlEwjKIhGUQCcsgEpZBJCyDSFgGkTCdSJig0+kYY0yl85WvfCX7GYwx7Z+VK1dmP4Mxpv0zMjKS/QzGmPYP/RMJE1g+AAAAgIVBp0kjEiawfAAAAAALg06TRiRMYPkAAAAAFgadJo1ImMDyAQAAACwMOk0akTCB5QMAAABYGHSaNCJhAssHAAAAsDDoNGlEwgSWDwAAAGBh0GnStCISPvTQQ7F06dLodrtxww03xA9+8INZtx8/fjxWr14dAwMDMTw8HDt37vxMt1+M5QMAAABYGHSaNK2IhOPj43Hw4ME4duxYPP/88zEwMBAvvfTSzO1r166NsbGxmJqaikOHDsXQ0FDs379/zrdfjOUDAAAAWBh0mjStiISfNjo6Go8//nhERExPT0e3243Dhw/P3D4+Ph7r16+f0+2XYvkAAAAAFgadJk3rIuHp06djcHAwXnzxxYiIOHr0aHQ6nTh9+vTM75mYmIgVK1bM6fZLsXxAVR57+UT81U/eNsYYY4wxDZ4t+4/nflkJRdFp0rQuEm7YsCHuuOOOOHPmTERETE5ORqfTmfnfERG7d++OZcuWzen2c7Zv337eWD6gKtfu+Nf4o5X/bIwxxhhjGjz/2/2v535ZCUXpdDoX7DfMTasi4YMPPhgjIyNx8uTJmY+de6fg9PT0zMcmJiZi+fLlc7r9nG3btp03IiFQlXORcHjbb7L/G3BjjDHGGPPZ5s8ffVMkhAw6nc4F+w1z04pI+NFHH8WGDRtidHR0ViCMOPszBxctWjTrZw5u2rQp1q1bN6fbL0UkBKpyzR8i4f934N3cRwEA4DN67rXTIiFkoNOkaXwk/Oijj+L222+Pu+66K44fPx6nTp2KU6dOzfoZg2NjY7FmzZo4duxYTE5OxvDwcOzdu3fOt1+M5QOqIhICADSXSAh56DRpGh8JT5w4EZ1O57y56aabZn7P1NRUrFq1KrrdbgwNDcWOHTtm/R29br8YywdURSQEAGgukRDy0GnSND4S5mT5gKqIhAAAzSUSQh46TRqRMIHlA6oiEgIANJdICHnoNGlEwgSWD6iKSAgA0FwiIeSh06QRCRNYPqAqIiEAQHOJhJCHTpNGJExg+YCqiIQAAM0lEkIeOk0akTCB5QOqIhICADSXSAh56DRpRMIElg+oikgIANBcIiHkodOkEQkTWD6gKiIhAEBziYSQh06TRiRMYPmAqoiEAADNJRJCHjpNGpEwgeUDqiISAgA0l0gIeeg0aUTCBJYPqIpICADQXCIh5KHTpBEJE1g+oCoiIQBAc4mEkIdOk0YkTGD5gKqIhAAAzSUSQh46TRqRMIHlA6oiEgIANJdICHnoNGlEwgSWD6iKSAgA0FwiIeSh06QRCRNYPqAqIiEAQHOJhJCHTpNGJExg+YCqiIQAAM0lEkIeOk0akTCB5QOqIhICADSXSAh56DRpRMIElg+oikgIANBcIiHkodOkEQkTWD6gKiIhAEBziYSQh06TRiRMYPmAqoiEAADNJRJCHjpNGpEwgeUDqiISAgA0l0gIeeg0aUTCBJYPqIpICADQXCIh5KHTpBEJE1g+oCoiIQBAc4mEkIdOk0YkTGD5gKqIhAAAzSUSQh46TRqRMIHlA6oiEgIANJdICHnoNGlEwgSWD6iKSAgA0FwiIeSh06QRCRNYPqAqIiEAQHOJhJCHTpNGJExg+YCqiIQAAM0lEkIeOk0akTCB5QOqIhICADSXSAh56DRpRMIElg+oikgIANBcIiHkodOkEQkTWD6gKiIhAEBziYSQh06TRiRMYPmAqoiEAADNJRJCHjpNGpEwgeUDqiISAgA0l0gIeeg0aUTCBJYPqIpICADQXCIh5KHTpBEJE1g+oCoiIQBAc4mEkIdOk0YkTGD5gKqIhAAAzSUSQh46TRqRMIHlA6oiEgIANJdICHnoNGlEwgSWD6iKSAgA0FwiIeSh06QRCRNYPqAqIiEAQHOJhJCHTpNGJExg+YCqiIQAAM0lEkIeOk0akTCB5QOqIhICADSXSAh56DRpRMIElg+oikgIANBcIiHkodOkEQkTWD6gKiIhAEBziYSQh06TRiRMYPmAqoiEAADNJRJCHjpNGpEwgeUDqiISAgA0l0gIeeg0aVoTCT/88MO477774v777z/vti1btkSn05k1d95558ztx48fj9WrV8fAwEAMDw/Hzp075/Q5LR9QFZEQAKC5RELIQ6dJ04pIuG/fvrj++uvjiiuuuGgkXL9+fZw4cWJmTp8+PXP72rVrY2xsLKampuLQoUMxNDQU+/fv7/l5LR9QFZEQAKC5RELIQ6dJ04pIeM7mzZsvGgnvvffeC/6Z6enp6Ha7cfjw4ZmPjY+Px/r163t+PssHVEUkBABoLpEQ8tBp0hQTCRcvXhzXXnttjIyMxCOPPDJz29GjR6PT6cx6Z+HExESsWLGi5+ezfEBVREIAgOYSCSEPnSZNEZHwjTfeiNdffz3efPPN2LdvX1x99dXxxBNPRETE5ORkdDqdOHPmzMzv3717dyxbtmzW37F9+/bzxvIBVREJAQCaSySEPDqdzgX7DXNTRCT8tIcffjhWrlwZEf/+TsLp6emZ2ycmJmL58uWz/sy2bdvOG5EQqIpICADQXCIh5NHpdC7Yb5ibIiPh1q1b4+67746Isz+TcNGiRbN+JuGmTZti3bp1Pf8ekRCoikgIANBcIiHkodOkKSISbty4MQ4cOBBTU1PxwgsvxODgYOzdu3fm9rGxsVizZk0cO3YsJicnY3h4eNbtF2P5gKqIhAAAzSUSQh46TZpWRMJnn302BgcHY2BgILrdbgwODsaePXtmbn/ggQdiyZIl0e12Y+nSpbFr165Zf35qaipWrVoV3W43hoaGYseOHXP6vJYPqIpICADQXCIh5KHTpGlFJMzF8gFVEQkBAJpLJIQ8dJo0ImECywdURSQEAGgukRDy0GnSiIQJLB9QFZEQAKC5RELIQ6dJIxImsHxAVURCAIDmEgkhD50mjUiYwPIBVREJAQCaSySEPHSaNCJhAssHVEUkBABoLpEQ8tBp0oiECSwfUBWREACguURCyEOnSSMSJrB8QFVEQgCA5hIJIQ+dJo1ImMDyAVURCQEAmkskhDx0mjQiYQLLB1RFJAQAaC6REPLQadKIhAksH1AVkRAAoLlEQshDp0kjEiawfEBVREIAgOYSCSEPnSaNSJjA8gFVEQkBAJpLJIQ8dJo0ImECywdURSQEAGgukRDy0GnSiIQJLB9QFZEQAKC5RELIQ6dJIxImsHxAVURCAIDmEgkhD50mjUiYwPIBVREJAQCaSySEPHSaNCJhAssHVEUkBABoLpEQ8tBp0oiECSwfUBWREAAyevO3EaMjxvQ9z42OnY2Et/5D9rOYhs/m+3M/IjaKTpNGJExg+YCqXPuHSPjoQZEQAGr3+v+I+OP/1Zi+550/+Y/x3754U7x4xTXZz2IaPrf9X7kfERtFp0kjEiawfEBVvJMQADI6Fwmv+2LEgV8YY0z9s3O7SNgHnSaNSJjA8gFVEQkBIKPXjpz95vzGq3OfBCjV8z8TCfug06QRCRNYPqAqIiEAZCQSArmJhH3RadKIhAksH1AVkRAAMhIJgdxEwr7oNGlEwgSWD6iKSAgAGYmEQG4iYV90mjQiYQLLB1RFJASAjERCIDeRsC86TRqRMIHlA6oiEgJARiIhkJtI2BedJo1ImMDyAVURCQEgI5EQyE0k7ItOk0YkTGD5gKqIhACQkUgI5CYS9kWnSSMSJrB8QFVEQgDISCQEchMJ+6LTpBEJE1g+oCoiIQBkJBICuYmEfdFp0oiECSwfUBWREAAyEgmB3ETCvug0aUTCBJYPqIpICAAZiYRAbiJhX3SaNCJhAssHVEUkBICMREIgN5GwLzpNGpEwgeUDqiISAkBGIiGQm0jYF50mjUiYwPIBVREJASAjkRDITSTsi06TRiRMYPmAqoiEAJCRSAjkJhL2RadJIxImsHxAVURCAMhIJARyEwn7otOkEQkTWD6gKiIhAGQkEgK5iYR90WnSiIQJLB9QFZEQADISCYHcRMK+6DRpRMIElg+oikgIABmJhEBuImFfdJo0ImECywdURSQEgIxEQiA3kbAvOk0akTCB5QOqIhICQEYiIZCbSNgXnSaNSJjA8gFVEQkBICOREMhNJOyLTpNGJExg+YCqiIQAkJFICOQmEvZFp0kjEiawfEBVREIAyEgkBHITCfui06RpTST88MMP47777ov777//vNuOHz8eq1evjoGBgRgeHo6dO3d+ptsvxvIBVREJASAjkRDITSTsi06TphWRcN++fXH99dfHFVdcccFIuHbt2hgbG4upqak4dOhQDA0Nxf79++d8+8VYPqAqIiEAZCQSArmJhH3RadK0IhKes3nz5vMi4fT0dHS73Th8+PDMx8bHx2P9+vVzuv1SLB9QFZEQADISCYHcRMK+6DRpWh8Jjx49Gp1OJ06fPj3zsYmJiVixYsWcbr8UywdURSQEgIxEQiA3kbAvOk2a1kfCycnJ6HQ6cebMmZmP7d69O5YtWzan28/Zvn37eWP5gKqIhACQkUgI5CYS9qXT6Vyw3zA3rY+E594pOD09PfOxiYmJWL58+ZxuP2fbtm3njUgIVEUkBICMREIgN5GwL51O54L9hrlpfSScnp6ORYsWzfqZg5s2bYp169bN6fZLEQmBqoiEAJCRSAjkJhL2RadJ0/pIGBExNjYWa9asiWPHjsXk5GQMDw/H3r1753z7xVg+oCoiIQBkJBICuYmEfdFp0rQiEj777LMxODgYAwMD0e12Y3BwMPbs2TNz+9TUVKxatSq63W4MDQ3Fjh07Zv35XrdfjOUDqiISAkBGIiGQm0jYF50mTSsiYS6WD6iKSAgAGYmEQG4iYV90mjQiYQLLB1RFJASAjERCIDeRsC86TRqRMIHlA6oiEgJARiIhkJtI2BedJo1ImMDyAVURCQEgI5EQyE0k7ItOk0YkTGD5gKqIhACQkUgI5CYS9kWnSSMSJrB8QFVEQgDISCQEchMJ+6LTpBEJE1g+oCoiIQBkJBICuYmEfdFp0oiECSxfM/3oV8/FZeOjxizo+Q9jT8Yfrfzn+F/u/dvsZzGm17zz/nu5H9oB5pdICOQmEvZFp0kjEiawfM0kEhpjzPyOSAi0jkgI5CYS9kWnSSMSJrB8zXQuEq7/h525jwLQaN2Hvi4SAu0kEgK5iYR90WnSiIQJLF8ziYQA80MkBFpLJARyEwn7otOkEQkTWL5mEgkB5odICLSWSAjkJhL2RadJIxImsHzNJBICzA+REGgtkRDITSTsi06TRiRMYPmaSSQEmB8iIdBaIiGQm0jYF50mjUiYwPI1k0gIMD9EQqC1REIgN5GwLzpNGpEwgeVrJpEQYH6IhEBriYRAbiJhX3SaNCJhAsvXTCIhwPwQCYHWEgmB3ETCvug0aUTCBJavmURCgPkhEgKtJRICuYmEfdFp0oiECSxfM4mEAPNDJARaSyQEchMJ+6LTpBEJE1i+ZhIJAeaHSAi0lkgI5CYS9kWnSSMSJrB8zSQSAswPkRBoLZEQyE0k7ItOk0YkTGD5mkkkBJgfIiHQWiIhkJtI2BedJo1ImMDyNZNICDA/REKgtURCIDeRsC86TRqRMIHlayaREGB+iIRAa4mEQG4iYV90mjQiYQLL10wiIcD8EAmB1hIJoT3eO3n2n+emzRc+94dfF8BZ+pltW7Pc3TpNGpEwgeVrJpEQYH6IhEBriYTQHk2NhE0fkbCRRMIElq+ZREKA+SESAq0lEkJ7nIuE3f+Y+yRl+N4mkbDBRMIElq+ZREKA+SESAq0lEkJ7iIT1EgkbTSRMYPmaSSQEmB8iIdBaIiG0h0hYL5Gw0UTCBJavmURCgPkhEgKtJRJCe4iE9RIJG00kTGD5mkkkBJgfIiHQWiIhtIdIWC+RsNFEwgSWr5lEQoD5IRICrSUSQnuIhPUSCRtNJExg+ZpJJASYHyIh0FoiIbSHSFgvkbDRRMIElq+ZREKA+SESAq0lEkJ7iIT1EgkbTSRMYPmaSSQEmB8iIdBaIiG0h0hYL5Gw0UTCBJavmURCgPkhEgKtJRJCe4iE9RIJG00kTGD5mkkkBJgfIiHQWiIhtIdIWC+RsNFEwgSWr5lEQoD5IRICrSUSQnuIhPUSCRtNJExg+ZpJJASYHyIh0FoiIbSHSFgvkbDRRMIElq+ZREKA+SESAq0lEkJ7iIT1EgkbTSRMYPmaSSQEmB8iIdBaIiG0h0hYL5Gw0UTCBJavmURCgPkhEgKtJRJCe4iE9RIJG00kTGD5mkkkBJgfIiHQWiIhtIdIWC+RsNFEwgSWr5lEQoD5IRICrSUSQnuIhPUSCRtNJExg+ZpJJATq9tqxN+N7v/hx6+ZPtq6My8ZH44H9u7KfZb7n5d/+S+61AXISCaE9RMJ6iYSNJhImsHzNJBICdfuHIy/HZeOjrZzPL4AzVDE7DjyTe22AnERCaA+RsF4iYaMVEQm3bNkSnU5n1tx5550ztx8/fjxWr14dAwMDMTw8HDt3zi0eWb5mEgmBup2LhEseWZf9HXLm0vOfn9goEgIiIbSJSFgvkbDRiomE69evjxMnTszM6dOnZ25fu3ZtjI2NxdTUVBw6dCiGhoZi//79Pf9ey9dMIiFQt3OR8C9/8r3cR6GHTft3iYSASAhtIhLWSyRstGIi4b333nvB26anp6Pb7cbhw4dnPjY+Ph7r16/v+fdavmYSCYG6iYTNIRICESESQpuIhPUSCRutmEi4ePHiuPbaa2NkZCQeeeSRmduOHj0anU5n1jsLJyYmYsWKFT3/XsvXTCIhUDeRsDlEQha0r//fZ7/xMtXPFz43+1dTzzy5K/c/ZbSRSFgvkbDRioiEb7zxRrz++uvx5ptvxr59++Lqq6+OJ554IiIiJicno9PpxJkzZ2Z+/+7du2PZsmWz/o7t27efN5avmURCoG4iYXOIhCxoIqFp+4iEVEEkrNcCiIQX6jfMTRGR8NMefvjhWLlyZUT8+zsJp6enZ26fmJiI5cuXz/oz27ZtO29yRcL/8uJPsv9XH9swn9/8texnaPKsfHI8y/5DE4mEzSESsqCdi4T7fpr7JDC/1q8RCamOSFivBRAJL9RvmJsiI+HWrVvj7rvvjoizP5Nw0aJFs34m4aZNm2LdunU9/x6R0JQ8IiHMnUjYHCIhC5pISFuJhFRJJKzXAoiE9K+ISLhx48Y4cOBATE1NxQsvvBCDg4Oxd+/emdvHxsZizZo1cezYsZicnIzh4eFZt19M7ki45YWJLJ+fsv3s9V+KhPAZiYTNIRKyoImEtJVISJVEwnqJhI1WRCR84IEHYsmSJdHtdmPp0qWxa9fsJ5+pqalYtWpVdLvdGBoaih07dszp7xUJKZFICJ+dSNgcIiELmkhIW4mEVEkkrJdI2GhFRMKqiISUSCSEz04kbA6RkAVNJKStREKqJBLWSyRsNJEwgUhIiURC+OxEwuYQCVnQRELaSiSkSiJhvUTCRhMJE4iElEgkhM9OJGwOkZAFTSSkrURCqiQS1kskbDSRMIFISIlEQvjsRMLmEAlZ0ERC2kokpEoiYb1EwkYTCROIhJRIJITPTiRsDpGQBU0kpK1EQqokEtZLJGw0kTCBSFiGl3/7L/HSbybNH2bHS8/EZeOj8Z/+67ezn2Whze9PvZt7XVmgRMLmEAlZ0ERC2kokpEoiYb1EwkYTCRPkjoRbf/5kls9fmj/9uzvisvFR84n5/PhofH7z17KfY6HNT/77z3OvKwuUSNgcIiELmkhIW4mEVEkkrJdI2GgiYYLckdA7CetxLhIu/+HG+Itdf2vMeXPltrtEQi5JJGwOkZAFTSSkrURCqiQS1kskbDSRMIFIWIbLv3d7XDY+Gu9Nv5/7KCxQd//9DpGQSxIJm0MkZEETCWkrkZAqiYT1EgkbTSRMIBKWQSSkF5GQXkTC5hAJWdBEwjLs+fuIh75b1ty85Oxu/+Wt+c9S9xx6NffGtZ9IWC+RsNFEwgQiYRlEQnoRCelFJGwOkZAF7S9vOfuN18/+MfdJqNLau87ez0XN5yK+kPsMmeaH38+9ce0nEtZLJGw0kTCBSFgGkZBeREJ6EQmbQyRkQfNOwjKci4TfuD3/u9xMdTOyVCSsi0hYL5Gw0UTCBCJhGURCehEJ6UUkbA6RkAVNJCzDuUi4+6ncJ6FK960/ez8/8Xjuk7SfSFgvkbDRRMIEImEZREJ6EQnpRSRsDpGQBU0kLINIWAaRsD4iYb1EwkYTCROIhGUQCelFJKQXkbA5REIWNJGwDCJhGUTC+oiE9RIJG00kTCASlkEkpBeRkF5EwuYQCVnQRMIyiIRlEAnrIxLWSyRsNJEwgUhYBpGQXkRCehEJm0MkZEETCcsgEpZBJKyPSFgvkbDRRMIEImEZREJ6EQnpRSRsDpGQBU0kLINIWAaRsD4iYb1EwkYTCROIhGUQCelFJKQXkbA5REIWNJGwDCJhGUTC+pQaCUdH8sy1V579el/3xSyfXyRMIxImEAnLIBLSi0hILyJhc4iELGgiYRlEwjKIhPU59d7Zr/UVf5z7JPX54P2z15xlPvepX+sdkTCNSJhAJCyDSEgvIiG9iITNIRKyoImEZRAJyyAS1qfEdxJ+MhIe+EU5IxImEwkTiIRlEAnpRSSkF5GwOURCFjSRsAwiYRlEwvqUHAkv/99zn6ReImEykTCBSFgGkZBeREJ6EQmbQyRkQRMJyyASlkEkrI9IWA6RMJlImEAkLINISC8iIb2IhM0hErKgiYRlEAnLIBLWRyQsh0iYTCRMIBKWQSSkF5GQXkTC5hAJWdBEwjKIhGUQCesjEpZDJEwmEiYQCcsgEtbnH197Jf5i1982bq7cdldcNj4aSx5Zl/0s/cxbJ4/nvutbTyRsDpGQnk6ezPcD2VcsO/tN346/y/P5//nV3F/9MoiEZRAJ6yMSlkMkTCYSJhAJy/Cnf3dHXDY+GqdEwso98cu9cdn4qKl5fv3O73Lf9a1XYiTc+9r/n323+5nPb/7a2V/Hv5b9LP3Mwd/+S+67vv1++cq//xcjs8zn8n3u//R/5v7ql0EkLINIWB+RsBwiYTKRMIFIWAbvJKzPuUj49ae2xku/mTQVz/+x4xsiYU1EQiMStsi5SDjwhYjRkTJm5EaRsE4iYX3e+rd80f0L537NFP6vKiikiITlEAmTiYQJRMIyiIT1+a9/iIT3/vTR3EcpwrU714qENSk5Et7+4+/mPkoRlv9wo0hYl3ORcPmf5T5Jff77obPXfPOS3Ccpg0hYn5yRMPeIhO0mEtInkTCBSFgGkbA+ImG9RML6iIRUTSSskUhI1UTC+pyLhH1VsQMAABE/SURBVFdfkfsk9Tl+TCQsgUhIn0TCBCJhGUTC+oiE9RIJ6yMSUjWRsEYiIVUTCesjEpZBJCyHSJhMJEwgEpZBJKyPSFgvkbA+IiFVEwlrJBJSNZGwPiJhGUTCcoiEyUTCBCJhGUTC+oiE9RIJ6yMSUjWRsEYiIVUTCesjEpZBJCyHSJhMJEwgEpZBJKyPSFgvkbA+IiFVEwlrJBJSNZGwPiJhGUTCcoiEyUTCBCJhff7pt0fie7/4cZb54y23xmXjo7H5+R9l+fzPHX0195e/NiJhvUTC+oiEVE0krJFISNVEwvqIhGUQCcshEiYTCROIhPV5+ODfx2Xjo9nm8xk/93f2fj/3l782ImG9RML6iIRUTSSskUhI1UTC+oiEZRAJyyESJhMJE4iE9TkXCf/zE9/J9o7CuufWic0iIZUSCesjElI1kbBGIiFVEwnrIxKWQSQsh0iYTCRMIBLW51wkfHD/D3MfpTaPvbJHJKRSImF9REKqJhLWSCSkaiJhfUTCMoiE5RAJk4mECUTC+oiEZRAJ6yUS1kckpGoiYY1EQqomEtZHJCyDSFgOkTCZSJhAJKyPSFgGkbBeImF9REKqJhLWSCSkaiJhfUTCMoiE5RAJk4mECUTC+oiEZRAJ6yUS1kckpGoiYY1EQqomEtZHJCyDSFgOkTCZSJhAJKyPSFiGEiPh/qOvxl/s+tss8yffWxmXjY/GzT+4L8vn/y8v/iT3l782IiFVEwlrJBKW4c3fRoyO5JnBPz379V56dZ7P//+szv3Vr49IWAaRsBwiYTKRMIFIWB+RsAxP/CES/s0/Ppb7KLV58tDzcdn4aJGz5u+35/7y10YkpGoiYY1EwjK8/j/OXnOW+dzZX7/wuTyff8lg7q9+fUTCMoiE5RAJk4mECUTC+oiEZSjxnYTnIuHKJ8fjpd9MFjFbXpgQCQsgEtZLJKyRSFiGc5Hwui9GHPhFGfPMj0XCEoiEZRAJ6ZNImEAkrI9IWIYSI+HEof1x2fhorPtv/2/uo9Tm6clfxGXjozG2WyRsM5GwXiJhjUTCMrx25Ow133h17pPU542jImEJRMIyiIT0SSRMIBLWRyQsg0hYBpGwDCJhvUTCGomEZRAJyyASlkEkLIdImEwkjIjjx4/H6tWrY2BgIIaHh2Pnzp1z+nMiYX1EwjKIhGUQCcsgEtZLJKyRSFgGkbAMImEZRMJyiITJRMKIWLt2bYyNjcXU1FQcOnQohoaGYv/+/T3/nEhYH5GwDCJhGUTCMoiE9RIJayQSlkEkLINIWAaRsBwiYbLiI+H09HR0u904fPjwzMfGx8dj/fr1Pf+sSFgfkbAMImEZRMIyiIT1EglrJBKWQSQsg0hYBpGwHCJhsuIj4dGjR6PT6cTp06dnPjYxMRErVqzo+WdFwvqIhGUQCcsgEpahxEj4wq8PxWXjo1nm8+Nf+8OveT7/8h9uzP3lr49IWAaRsAwiYRlEwnKIhMmKj4STk5PR6XTizJkzMx/bvXt3LFu2bNbv2759+3kjEtZHJCyDSFgGkbAMImFZIxK2nEhYBpGwDCJhGQqPhBfqN8xN8ZHw3DsJp6enZz42MTERy5cvn/X7tm3bdt50Oh1jjKl0vvKVr2Q/gzGm/bNy5crsZzDGtH9GRkayn8EY0/65UL9hboqPhNPT07Fo0aJZP5Nw06ZNsW7duoyn6q3TKejf/PxBt9uNDz74IPcxanXVVVfFiRMnch+jVl/60pfi+PHjuY9Rq+uuuy7eeuut3Meo1Y033hhvvPFG7mPU6uabb44jR47kPkatRkZGZj2/luCrX/1qvPrqq7mPUatbb701Dh48mPsYtbrtttvixRdfzH2MWq1atSqee+653Meo1Zo1a2LPnj25j1Grb37zm/HMM8/kPkatNmzYEE899VTuY9TqO9/5TuzatSv3MWr14IMPxve/X87/QysiYuvWrbFz587cx6jV9u3bBcFExUfCiIixsbFYs2ZNHDt2LCYnJ2N4eDj27t2b+1iXJBKWQSQsg0hYBpGwDCJhGUTCMoiEZRAJyyASlkEkTCcSRsTU1FSsWrUqut1uDA0NxY4dO3IfqSeRsAwiYRlEwjKIhGUQCcsgEpZBJCyDSFgGkbAMImE6kbChRMIyiIRlEAnLIBKWQSQsg0hYBpGwDCJhGUTCMoiE6UTChhIJyyASlkEkLINIWAaRsAwiYRlEwjKIhGUQCcsgEqYTCQEAAACgcCIhAAAAABROJAQAAACAwomEAAAAAFA4kRAAAAAACicSNsy//uu/xte//vW48sorY+nSpfHjH/8495Eq9+ijj8bNN98cAwMDMTg4GPfcc0+89957uY9Viw8++CBuueWWuOWWW3IfpRIffvhh3HfffXH//ff3dXsbvPrqq3HHHXfElVdeGd1uN373u9/lPlJlfv/730en0zlvrr/++txHq9SWLVvOu+Y777wz97Eq9dBDD8XSpUuj2+3GDTfcED/4wQ9yH6lyx48fj9WrV8fAwEAMDw8X818TLOFxei7X2Lbn64tdc5sfxy91P7f1cbzXbrf9Ncqvf/3ruOOOO+Kaa66J6667Lu6///6Ynp7Ofax5d6n7ua3PXZe65rbe75e65ra+LrvUNZfcEFKJhA0yPT0dS5cujR07dsT7778fr7zySgwODsbPfvaz3Eer1FNPPRW/+tWv4p133onXXnst/uzP/iweeeSR3Meq3Mcffxx/9Vd/FStWrGjNNx2ftG/fvrj++uvjiiuuuOADe6/b2+CXv/xlDA0NxcTERLz11lvxb//2b614kXIxZ86ciRMnTsyaH/7wh/G1r30t99EqtWXLlli/fv2s6z59+nTuY1VqfHw8Dh48GMeOHYvnn38+BgYG4qWXXsp9rEqtXbs2xsbGYmpqKg4dOhRDQ0Oxf//+3MeqVAmP03O5xrY9X1/qmtv6ON7rfm7j43ivay7hNcqf//mfx2OPPRYRESdPnozR0dHYvn175lPNr173cxufu3pdcxvv917X3MbXZb2uudSGMB9EwgZ55ZVX4qqrroqPP/545mNbt26NsbGxjKeqz8cffxxHjhyJm266KQ4cOJD7OJX7m7/5mxgfH4+nnnqqFd90XMzmzZsv+c1lr9ubbHR0NJ588sncx8jmww8/jBtuuCFeeOGF3Eep1JYtW+Lee+/NfYysRkdH4/HHH899jMpMT09Ht9uNw4cPz3xsfHw81q9fn/FU9Wnz4/Q5l7rGtj5fz+V+bdvj+MWuuc2P4xe75ra/Rvn444/j8ssvj4MHD858bPPmzbFhw4aMp6rOhe7ntj93Xeia236/z/X5uE2vy3pdc2kNYT6IhA2yb9++GBwcnPWxp59+OkZGRjKdqF6dTicWLVrU6hcs52zdujXuueeeOHPmTOu+6fi0UiPhyZMno9PpxNq1a2N4eDgWL14ca9asiZMnT+Y+Wm2eeOKJxr/7ZC62bNkSixcvjmuvvTZGRkaK+7eYp0+fjsHBwXjxxRdzH6UyR48ejU6nM+udRRMTE7FixYqMp6pPWx+nP+li19jm5+u53K9texy/VCRs6+P4ha65lNco4+PjMTQ0FLt27YrDhw/HsmXLZgWzNrnQ/dz2566L/fPc5vt9Lo/bbXtd1uuaS2oI80UkbJBjx47FVVddFY8++mh88MEH8fbbb8e3v/3tYiLhuX8LsGTJkvjpT3+a+ziVefrpp2PVqlXx0UcfRUS07puOTys1Eh45ciQ6nU7s378/Tp06Fb/73e/i1ltvjbVr1+Y+Wi1Onz4dV199dbz88su5j1K5N954I15//fV48803Y9++fXH11VfHE088kftYtdmwYUPccccdcebMmdxHqczk5GR0Op1Z17h79+5YtmxZxlPVp62P0590oWts+/N1r/u1jY/jF7vmNj+OX+iaS3mN8k//9E8xMjIS69evj8WLF8fY2FicOnUq97EqcaH7ue3PXRf757nN9/tcno/b9rpsru8kbHtDmE8iYcO8/PLL8eUvfzm63W7cdNNNceutt8Y3vvGN3Meq1ZYtW1r3IuWTvvvd78aiRYui2+1Gt9uNyy+/PDqdTnS73cb//JsLKT0SfvLHB/z85z+PK6+8MuOp6vPwww/HbbfdlvsYWTz88MOxcuXK3MeoxYMPPhgjIyOte/fJp517N8Ynf17XxMRELF++POOp6tPWx+lPutA1tv35utf92sbH8bnucpsexy8VCdv8GuWdd96JL37xi/Gb3/wmIiLefffduP3221v7Y5wu9U7Ctj53Xeia236/93oMa+Prsrk+bre9IcwnkbDhbr/99vjRj36U+xi12rhxY9xzzz25j1Gbtr0z4dNKjYSnTp2Kyy+/PI4cOTLzsf3798eSJUsynqoe7777blx11VXx6quv5j5KFlu3bo2777479zEq9dFHH8WGDRtidHS0VS9EL2Z6ejoWLVo06/+utGnTpli3bl3GU9WnrY/TnzSXa2zb8/Wlrrmtj+Nz3eU2PY5f6JpLeI3yyiuvxOLFi2d9bPfu3XHDDTdkOlG1LvYzCdv83HWha277/X6xx7A2vy6b6+N2aQ0hhUjYML///e/jnXfeiddffz2+/e1vx5e//OXW/ZfGPunjjz+Ob3zjG3HgwIGYmpqKn/70p7F48eJ4/vnncx+tNm37puPTSo2EERF//dd/HbfccktMTU3F22+/HaOjo/HQQw/lPlblvvvd78Zdd92V+xi12bhx48xj2AsvvBCDg4Oxd+/e3MeqzEcffRS333573HXXXXH8+PE4depUnDp1qhXvrLqUsbGxWLNmTRw7diwmJydjeHi41ffzJ7X5cfockXC2tj6OX+ya2/w4frFrbvtrlJMnT8bg4GA89thjcebMmTh16lSsWrUqNm7cmPtolbjY/dzm566L/bzNNt/vF7rmtr8uu9h/oKb0hpBCJGyYxx9/PC6//PK45pprYuPGjfHuu+/mPlKlzpw5E9/61rfihhtuiG63G8uWLYunn34697Fq1bZvOs559tlnY3BwMAYGBqLb7cbg4GDs2bNnzre3wXvvvRff+ta3YnBwMK655prYunVrfPjhh7mPVam33347Fi9e3JofED0XDzzwQCxZsiS63W4sXbo0du3alftIlTpx4kR0Op3z5qabbsp9tEpNTU3FqlWrotvtxtDQUOzYsSP3kSpXwuP0Z7nGtjxf97rmNj6O97rmNj6O97rmEl6j/OpXv4rR0dEYHh6O66+/Ph588MF4//33cx9rXvW6n9v43NXrmtt4v1/qmtv6uuxS16whpBEJAQAAAKBwIiEAAAAAFE4kBAAAAIDCiYQAAAAAUDiREAAAAAAKJxICAAAAQOFEQgAAAAAonEgIAAAAAIUTCQEAAACgcCIhAAAAABROJAQAAACAwomEAAAAAFA4kRAAAAAACicSAgAAAEDhREIAAAAAKJxICAAAAACFEwkBAAAAoHAiIQAAAAAUTiQEAAAAgMKJhAAAAABQOJEQAAAAAAonEgIAAABA4URCAAAAACicSAgAAAAAhRMJAQAAAKBwIiEAAAAAFE4kBAAAAIDCiYQAAAAAUDiREAAAAAAKJxICAAAAQOFEQgAAAAAonEgIAAAAAIUTCQEAAACgcCIhAAAAABROJAQAAACAwomEAAAAAFA4kRAAAAAACicSAgAAAEDhREIAAAAAKJxICAAAAACFEwkBAAAAoHAiIQAAAAAUTiQEAAAAgMKJhAAAAABQOJEQAAAAAAonEgIAAABA4URCAAAAACicSAgAAAAAhRMJAQAAAKBwIiEAAAAAFE4kBAAAAIDCiYQAAAAAUDiREAAAAAAKJxICAAAAQOFEQgAAAAAonEgIAAAAAIUTCQEAAACgcCIhAAAAABROJAQAAACAwomEAAAAAFC4/wlJiEOJ4XQjXQAAAABJRU5ErkJggg==", + "text/html": [ + "
" + ], + "text/vnd.plotly.v1+html": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import plotly.offline as py\n", + "import plotly.figure_factory as ff\n", + "from plotly.offline import get_plotlyjs, init_notebook_mode\n", + "\n", + "import numpy as np\n", + "\n", + "init_notebook_mode(connected=True)\n", + "\n", + "pandasDF = oskar.histogram(df,\"start\",1000000).toPandas()\n", + "# print(pandasDF)\n", + "dim = len(pandasDF[\"count\"])\n", + "X = np.zeros((dim, dim))\n", + "for i in range(dim):\n", + " for j in range(i,dim):\n", + " X[j, i] = pandasDF[\"count\"][i] - pandasDF[\"count\"][j]\n", + "# print(X)\n", + "# labels = [pandasDF[\"start\"]]\n", + "fig = ff.create_dendrogram(X)\n", + "fig['layout'].update({'width':1440, 'height':400})\n", + "py.iplot(fig, filename='dendrogram_with_labels')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Con extensión renderizando con Plotly Python" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.plotly.v1+json": { + "config": { + "linkText": "Export to plot.ly", + "plotlyServerURL": "https://plot.ly", + "showLink": true + }, + "data": [ + { + "type": "heatmap", + "uid": "f1070ce3-43dc-472c-8e1f-9b6b4431f77b", + "z": [ + [ + 1, + 20, + 30 + ], + [ + 20, + 1, + 60 + ], + [ + 30, + 60, + 1 + ] + ], + "zauto": true, + "zmax": 60, + "zmin": 1 + } + ], + "layout": { + "autosize": true, + "xaxis": { + "autorange": true, + "range": [ + -0.5, + 2.5 + ] + }, + "yaxis": { + "autorange": true, + "range": [ + -0.5, + 2.5 + ] + } + } + }, + "image/png": "iVBORw0KGgoAAAANSUhEUgAABQkAAAFoCAYAAAD0GX0ZAAAgAElEQVR4nO3de5Df9X3f+/5z5kx7pj3tOZ30dNpMmnMSx8bGBswdc19k/RZxWXYNmJuEMBaWfFkLgwBJsEIghACBxEWsRUI/0ETjlBDHsRziqCQkIhV2wGoTO0qlYqM4p0nsWamBSJNF1vv84Vo9GvkifTb6vnf383jMPP9gV2v//Jvf/Ob3eo+8/IMAAAAAAJr2D7IfAAAAAACQy5EQAAAAABrnSAgAAAAAjXMkBAAAAIDGORICAAAAQOMcCQEAAACgcY6EAAAAANA4R0IAAAAAaJwjIQAAAAA0zpEQAAAAABrnSAgAAAAAjXMkBAAAAIDGORICAAAAQOMcCQEAAACgcY6EAAAAANA4R0IAAAAAaJwjIQAAAAA0zpEQAAAAABrnSAgAAAAAjXMkBAAAAIDGORICAAAAQOMcCQEAAACgcY6EAAAAANA4R0IAAAAAaJwjIQAAAAA0zpEQAAAAABrnSAgAAAAAjXMkBAAAAIDGORICAAAAQOMcCQEAAACgcY6EAAAAANA4R0IAAAAAaJwjIQAAAAA0zpEQAAAAABrnSAgAAAAAjXMkBAAAAIDGORICAAAAQOMcCQEAAACgcY6EAAAAANA4R0IAAAAAaJwjIQAAAAA0zpEQAAAAABrnSAgAAAAAjXMkBAAAAIDGORICAAAAQOMcCQEAAACgcY6EAAAAANA4R0IAAAAAaJwjIQAAAAA0zpEQAAAAABrnSAgAAAAAjXMkBAAAAIDGORICAAAAQOMcCQEAAACgcY6EAAAAANA4R0IAAAAAaJwjIQAAAAA0zpEQAAAAABrnSAgAAAAAjXMkBAAAAIDGORICAAAAQOMcCQEAAACgcY6EAAAAANA4R0IAAAAAaJwjIQAAAAA0zpEQAAAAABrnSAgAAAAAjXMkBAAAAIDGORICAAAAQOMcCQEAAACgcY6EAAAAANA4R0IAAAAAaJwjIQAAAAA0zpEQAAAAABrnSAgAAAAAjXMkBAAAAIDGORICAAAAQOMcCQEAAACgcY6EAAAAANA4R0IAAAAAaJwjIQAAAAA0zpEQAAAAABrnSAgAAAAAjXMkBAAAAIDGORICAAAAQOMcCQEAAACgcY6EAAAAANA4R0IAAAAAaJwjIQAAAAA0zpEQAAAAABrnSAgAAAAAjXMkBAAAAIDGORICAAAAQOMcCQEAAACgcY6EAAAAANA4R0IAAAAAaJwjIQAAAAA0zpEQAAAAABrnSAgAAAAAjXMknKDf/p2XJElTtC/8o38tSZqC/S//6DlJ0hSNycuRcIKyB64kqb7skStJqit74EqS6mPyciScoOyBK0mqL3vkSpLqyh64kqT6mLwcCScoe+BKkurLHrmSpLqyB64kqT4mL0fCCcoeuJKk+rJHriSpruyBK0mqj8nLkXCCsgeuJKm+7JErSaore+BKkurjf/rGN74RixYtiosuuih6vV585zvfOfC93bt3x9KlS6O/vz+GhoZiw4YNR/3xOBJOUPbAlSTVlz1yJUl1ZQ9cSVJ9fN/Xv/71GBwcjI0bN8Zf//Vfx1/91V/F+Pj4ge8vX748RkZGYmxsLLZt2xaDg4OxZcuWo/qYHAknKHvgSpLqyx65kqS6sgeuJKk+vm94eDi+9KUv/dDvjY+PR6/Xix07dhz42ujoaKxcufKoPiZHwgnKHriSpPqyR64kqa7sgStJqo+It956K/r6+mL58uUxNDQUs2bNimXLlsVbb70VERE7d+6Mvr6+2Lt374Gf2bhxYyxYsOCoPi5HwgnKHriSpPqyR64kqa7sgStJqi/T1q1bo5SS0tatWw88jtdffz36+vpiy5YtsWfPnvjOd74TN998cyxfvjwiIrZv3x59fX2xf//+Az+zadOmmDt37lF9fhwJJyh74EqS6sseuZKkurIHriSpvkyllJh90ulxxy8c12lzTjo9SikHHscPjoTf+973Dnztq1/9alx00UUR8T//JuH//3cUbty4MebPn39Unx9HwgnKHriSpPqyR64kqa7sgStJqi9TKSUWv+u4+M1/8tOdtuRdxx10JNyzZ0/MmDEjXn/99QNf27JlS1x99dUR8f3fSThz5syDfifhunXrYsWKFUf1+XEknKDsgStJqi975EqS6soeuJKk+jKVUmLJMcfHF//Zz3TakmOOP+hIGBFx7733xsKFC2NsbCy++93vxvDwcDz99NMHvj8yMhLLli2LXbt2xfbt22NoaCg2b958VJ8fR8IJyh64kqT6skeuJKmu7IErSaovUykllrz7hNj4f/6bTlv67hMOORL+7d/+bTzwwAMxMDAQl19+eTz11FPx9ttvH/j+2NhYLF68OHq9XgwODsazzz571J8fR8IJyh64kqT6skeuJKmu7IErSaovUykllh57Qnzpp36205Yee+iRcDJyJJyg7IErSaove+RKkurKHriSpPoylVJi6XvfH7/1L/+fTrvzve93JGxB9sCVJNWXPXIlSXVlD1xJUn2ZSilx53Enxm//65/rtLuOO9GRsAXZA1eSVF/2yJUk1ZU9cCVJ9WUqpcRdx58YX/6Zn++0u453JGxC9sCVJNWXPXIlSXVlD1xJUn2ZSilx1wknxe/87Ds6beSEkxwJW5A9cCVJ9WWPXElSXdkDV5JUX6ZSSoyceHJs+rl3dtrIiSc7ErYge+BKkurLHrmSpLqyB64kqb5MpZQYOenk+A+/8K5OW3aSI2ETsgeuJKm+7JErSaore+BKkurLVEqJZaecEi8ec0ynLTvlFEfCFmQPXElSfdkjV5JUV/bAlSTVl6mUEstOPTV+99j3dNrdp57qSNiC7IErSaove+RKkurKHriSpPoylVLi7tNOjd9737GddvdpjoRNyB64kqT6skeuJKmu7IErSaovUykl7j7jtHjphPd22vIzTnMknCqefvrpmD17dvR6vbjmmmvi+eefP+yfzR64kqT6skeuJKmu7IErSaovUyklln/g9Pj9k47rtOUfON2RcKoYHR2NrVu3xq5du+KVV16J/v7+eO211w7rZ7MHriSpvuyRK0mqK3vgSpLqy1RKieVnnR5/cOrxnXbPWY6EU9bw8HA899zhvXCzB64kqb7skStJqit74EqS6stUSol7zj4jNp9xQqfdc/YZjoRT0d69e2NgYCBeffXVw/rz2QNXklRf9siVJNWVPXAlSfVlKqXEveeeEX941vs77d5zHQmnpFWrVsWiRYti//79B339mWeeOaQIR0JJmsplj1xJUl3ZA1eSVF+mUkrce94H4j+ec1KnrTjvA46EU80TTzwR8+bNi7feeuuQ75VSDinCkVCSpnLZI1eSVFf2wJUk1ZeplBIrzj8ztpx/cqetOP9MR8KpYt++fbFq1aoYHh7+oQfCHyd74EqS6sseuZKkurIHriSpvkyllFhxwZnxyoxTOu2+CxwJp4R9+/bFrbfeGkuWLIndu3fHnj17Ys+ePbF3797D+vnsgStJqi975EqS6soeuJKk+jKVUuK+GWfFV3qnddp9M85yJJwK3nzzzejr6zukOXPmHNbPZw9cSVJ92SNXklRX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", + "text/html": [ + "
" + ], + "text/vnd.plotly.v1+html": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import plotly\n", + "from plotly.offline import iplot\n", + "\n", + "trace = plotly.graph_objs.Heatmap(z=[[1, 20, 30],\n", + " [20, 1, 60],\n", + " [30, 60, 1]])\n", + "\n", + "fig = dict(data=[trace])\n", + "\n", + "iplot(fig)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Con extensión renderizando con Plotly JSON" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.plotly.v1+json": { + "data": [ + { + "type": "scatter", + "x": [ + 1999, + 2000, + 2001, + 2002 + ], + "y": [ + 10, + 15, + 13, + 17 + ] + }, + { + "type": "scatter", + "x": [ + 1999, + 2000, + 2001, + 2002 + ], + "y": [ + 16, + 5, + 11, + 9 + ] + } + ], + "layout": { + "autosize": true, + "title": "Sales Growth", + "xaxis": { + "autorange": true, + "range": [ + 1998.820445406743, + 2002.179554593257 + ], + "showgrid": false, + "title": "Year", + "type": "linear", + "zeroline": false + }, + "yaxis": { + "autorange": true, + "range": [ + 4.009708737864078, + 17.990291262135923 + ], + "showline": false, + "title": "Percent", + "type": "linear" + } + } + }, + "image/png": "iVBORw0KGgoAAAANSUhEUgAABQkAAAFoCAYAAAD0GX0ZAAAgAElEQVR4nOzd91eVd773//sfOP18zzn3WeeeJDOZZEqmnJlMz2Rmkm3BYJARJRoTE01iYqIxRaMiir1jwQ6K2LDEDggISO9VmvTee4cNm9f3B0cYFBATdYP7+VjrWituNpv3hVHkyef6XP9HAAAAAAAAACza/zH3AAAAAAAAAADMi0gIAAAAAAAAWDgiIQAAAAAAAGDhiIQAAAAAAACAhSMSAgAAAAAAABaOSAgAAAAAAABYOCIhAAAAAAAAYOGIhAAAAAAAAICFIxICAAAAAAAAFo5ICAAAAAAAAFg4IiEAAAAAAABg4YiEAAAAAAAAgIUjEgIAAAAAAAAWjkgIAAAAAAAAWDgiIQAAAAAAAGDhiIQAAAAAAACAhSMSAgAAAAAAABaOSAgAAAAAAABYOCIhAAAAAAAAYOGIhAAAAAAAAICFIxICAAAAAAAAFo5ICAAAAAAAAFg4IiEAAAAAAABg4YiEAAAAAAAAgIUjEgIAAAAAAAAWjkgIAAAAAAAAWDgiIQAAAAAAAGDhiIQAAAAAAACAhSMSAgAAAAAAABaOSAgAAAAAAABYOCIhAAAAAAAAYOGIhAAAAAAAAICFIxICAAAAAAAAFo5ICAAAAAAAAFg4IiEAAAAAAABg4YiEAAAAZnT27FkZDAZVV1ebe5Qxy9PTUwaDQXV1deYeBQAAYMwiEgIAAIxQS0uLPDw89P7778va2lqTJk3S22+/rXXr1ikoKEg9PT0P/JrmjoQdHR06f/68Fi1aJFtbW40fP15Tp07V4sWL9fXXX6u5udksc90tIyNDHh4eamlpuedtREIAAIBvj0gIAAAwAtXV1ZoxY4bGjRsnBwcHubm56eDBg1q6dKkmTZokg8Gg0tLSB35dc0bCkpISzZ49WwaDQYsWLZKbm5uOHj0qZ2dnzZkzRwaDQTY2No99rsGcP39eBoNBFRUV97yNSAgAAPDtEQkBAABGYPv27TIYDIqOjr7nbc3NzXJzc1NlZeUDv665ImFbW5veeustWVtbD3pOkpSenq4vvvjisc41FCIhAADAo0UkBAAAGIFPPvnkgVbV5eXl6csvv9Qbb7yhiRMnytraWosWLbonyA0VCevr6+Xs7Kzp06drwoQJeuutt+Tp6SmTydT3nO7ubn399dd6//339dprr8ne3l5LlixRYGDgfee7E9auXr064nO68z7l5eVyc3OTvb29JkyYoKioKElSaWmpnJycNGXKFE2aNEkff/yxIiMj+96/qKhIBoNBZ8+eHfC68+fP1/z58wc8duLECRkMBjU0NPT9991HUFDQgLmKioq0b98+TZs2TTY2NnJwcFBVVdWIzw8AAMCSEQkBAABGYO3atTIYDMrIyBjR82NjY7Vo0SLt2bNHJ0+elIeHhxYsWKDx48crNTW173mDRcLGxka9+eabsrOzk4eHh65cuaINGzbIYDDI1dW173l79uzRuHHj5OzsrEuXLsnd3V1z587VRx99dN/5PvroI9nY2Ki7u3vEn4M7Me7ObGvWrNGqVauUlJSkiooK2draytbWVocOHdLJkyf14YcfymAwKCAgoO81pk6dKicnp75f19XV9UW/2travsdXrlypOXPmSLodXNevX98XGH19feXr69u3qvDOXFOnTtWsWbO0fft2LV26VAaDQQsWLBjx+QEAAFgyIiEAAMAIZGZmasKECZo4caJWrFghT09PRUdHq76+fsSvYTQaNW3aNG3atKnvscEiobOzs6ZMmaKampoB779z505ZWVmpra1NJpNJ1tbW2rx584Dn9Pb2DoiQQ5k4ceIDX0p8J8bt3LlTHR0dA962bt06TZgwQSUlJQPOd/78+bK1tVVXV5ckycnJSfb29n3P8fHxkb29vaytrQesarS3t9eOHTv6fj2Sy42PHTs2IHru2bNnyPcBAADAQERCAACAEcrKytKKFStkZWU14LLXzz77TGlpafc8Pzk5WWvXrtWsWbP02muv9T1/yZIlfc+5OxL29vZqypQpcnZ2VldX14AjPDxcBoNBaWlp6u3t1eTJk/X+++8PWIE3EkajUQaDQStXrrznbXefm5WVVd/bhtr7706wXLVq1T2v5+fnJ4PBoPj4eEnShQsXBpzvypUrtWvXLjk5OWnZsmWSpNraWhkMhgGXTX+TPQlDQkJkMBiUnJw8ws8MAACA5SISAgAAPKCuri5lZWXJ29tbGzdulJWVlSZMmKD8/Py+51y8eFEGg0EzZ86Uh4eHAgMDFR0drbfeekuLFy/ue97dkbChoWHQ/ff+/rizr+Gd9x03bpzmzZunHTt2DHkTkrtZWVlp0aJF9zx+7NgxHTlyREeOHNGcOXNGFAnvXDJ8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" + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from IPython.display import display\n", + "\n", + "def Plotly(data=[], layout={}):\n", + " bundle = {}\n", + " bundle['application/vnd.plotly.v1+json'] = {\n", + " 'data': data,\n", + " 'layout': layout,\n", + " }\n", + " display(bundle, raw=True)\n", + "\n", + "data = [\n", + " {'x': [1999, 2000, 2001, 2002], 'y': [10, 15, 13, 17], 'type': 'scatter'},\n", + " {'x': [1999, 2000, 2001, 2002], 'y': [16, 5, 11, 9], 'type': 'scatter'}\n", + "]\n", + "\n", + "layout = {\n", + " 'title': 'Sales Growth',\n", + " 'xaxis': {'title': 'Year', 'showgrid': False, 'zeroline': False},\n", + " 'yaxis': {'title': 'Percent', 'showline': False}\n", + "}\n", + "\n", + "Plotly(data, layout)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.7" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/oskar-spark/src/main/python/notebooks/__init__.py b/oskar-spark/src/main/python/notebooks/notebooks/pyoskar/__init__.py similarity index 100% rename from oskar-spark/src/main/python/notebooks/__init__.py rename to oskar-spark/src/main/python/notebooks/notebooks/pyoskar/__init__.py diff --git a/oskar-spark/src/main/python/notebooks/notebooks/pyoskar/analysis.py b/oskar-spark/src/main/python/notebooks/notebooks/pyoskar/analysis.py new file mode 100644 index 0000000..8619591 --- /dev/null +++ b/oskar-spark/src/main/python/notebooks/notebooks/pyoskar/analysis.py @@ -0,0 +1,469 @@ + +import sys +from pyspark import keyword_only +from pyspark.ml.param.shared import * +from pyspark.ml.util import JavaMLReadable, JavaMLWritable +from pyspark.ml.wrapper import JavaTransformer + +if sys.version > '3': + basestring = str + +DEFAULT_COHORT = "ALL" + + +class AbstractTransformer(JavaTransformer, JavaMLReadable, JavaMLWritable): + + def setParams(self, **kwargs): + filtered = {k: v for k, v in kwargs.items() if v is not None} + return self._set(**filtered) + + +class VariantStatsTransformer(AbstractTransformer): + cohort = Param(Params._dummy(), "cohort", "Name of the cohort to calculate stats from. By default, " + DEFAULT_COHORT, + typeConverter=TypeConverters.toString) + samples = Param(Params._dummy(), "samples", "Samples belonging to the cohort. If empty, will try to read from metadata. " + + "If missing, will use all samples from the dataset.", typeConverter=TypeConverters.toListString) + studyId = Param(Params._dummy(), "studyId", "Id of the study to calculate the stats from.", typeConverter=TypeConverters.toString) + missingAsReference = Param(Params._dummy(), "missingAsReference", "Count missing alleles as reference alleles.", + typeConverter=TypeConverters.toBoolean) + + @keyword_only + def __init__(self, cohort=None, samples=None, studyId=None, missingAsReference=None): + super(VariantStatsTransformer, self).__init__() + self._java_obj = self._new_java_obj("org.opencb.oskar.spark.variant.analysis.VariantStatsTransformer", self.uid) + self.setParams(**self._input_kwargs) + + def getCohort(self): + return self.getOrDefault(self.cohort) + + def setCohort(self, value): + return self._set(cohort=value) + + def getSamples(self): + return self.getOrDefault(self.samples) + + def setSamples(self, value): + return self._set(samples=value) + + def getStudyId(self): + return self.getOrDefault(self.studyId) + + def setStudyId(self, value): + return self._set(studyId=value) + + def getMissingAsReference(self): + return self.getOrDefault(self.missingAsReference) + + def setMissingAsReference(self, value): + return self._set(missingAsReference=value) + + def transformDataframe(self, df): + return self._call_java(df) + + +class VariantSetStatsTransformer(AbstractTransformer): + studyId = Param(Params._dummy(), "studyId", "", typeConverter=TypeConverters.toString) + fileId = Param(Params._dummy(), "fileId", "", typeConverter=TypeConverters.toString) + + @keyword_only + def __init__(self, studyId=None, fileId=None): + super(VariantSetStatsTransformer, self).__init__() + self._java_obj = self._new_java_obj("org.opencb.oskar.spark.variant.analysis.VariantSetStatsTransformer", self.uid) + self.setParams(**self._input_kwargs) + + def getStudyId(self): + return self.getOrDefault(self.studyId) + + def setStudyId(self, value): + return self._set(studyId=value) + + def getFileId(self): + return self.getOrDefault(self.fileId) + + def setFileId(self, value): + return self._set(fileId=value) + + +class HistogramTransformer(AbstractTransformer): + step = Param(Params._dummy(), "step", "", typeConverter=TypeConverters.toFloat) + inputCol = Param(Params._dummy(), "inputCol", "", typeConverter=TypeConverters.toString) + + @keyword_only + def __init__(self, step=None, inputCol=None): + super(HistogramTransformer, self).__init__() + self._java_obj = self._new_java_obj("org.opencb.oskar.spark.variant.analysis.HistogramTransformer", self.uid) + self.setParams(**self._input_kwargs) + + def getStep(self): + return self.getOrDefault(self.step) + + def setStep(self, value): + return self._set(step=value) + + def getInputCol(self): + return self.getOrDefault(self.inputCol) + + def setInputCol(self, value): + return self._set(inputCol=value) + + +class HardyWeinbergTransformer(AbstractTransformer): + studyId = Param(Params._dummy(), "studyId", "", typeConverter=TypeConverters.toString) + + @keyword_only + def __init__(self, studyId=None): + super(HardyWeinbergTransformer, self).__init__() + self._java_obj = self._new_java_obj("org.opencb.oskar.spark.variant.analysis.HardyWeinbergTransformer", self.uid) + self.setParams(**self._input_kwargs) + + def getStudyId(self): + return self.getOrDefault(self.studyId) + + def setStudyId(self, value): + return self._set(studyId=value) + + +class IBSTransformer(AbstractTransformer): + samples = Param(Params._dummy(), "samples", "List of samples to use for calculating the IBS", + typeConverter=TypeConverters.toListString) + skipMultiAllelic = Param(Params._dummy(), "skipMultiAllelic", "Skip variants where any of the samples has a secondary alternate", + typeConverter=TypeConverters.toBoolean) + skipReference = Param(Params._dummy(), "skipReference", "Skip variants where both samples of the pair are HOM_REF", + typeConverter=TypeConverters.toBoolean) + numPairs = Param(Params._dummy(), "numPairs", "", typeConverter=TypeConverters.toInt) + + @keyword_only + def __init__(self, samples=None, skipMultiAllelic=None, skipReference=None, numPairs=None): + super(IBSTransformer, self).__init__() + self._java_obj = self._new_java_obj("org.opencb.oskar.spark.variant.analysis.IBSTransformer", self.uid) + self.setParams(**self._input_kwargs) + + def getSamples(self): + return self.getOrDefault(self.samples) + + def setSamples(self, value): + return self._set(samples=value) + + def getSkipMultiAllelic(self): + return self.getOrDefault(self.skipMultiAllelic) + + def setSkipMultiAllelic(self, value): + return self._set(skipMultiAllelic=value) + + def getSkipReference(self): + return self.getOrDefault(self.skipReference) + + def setSkipReference(self, value): + return self._set(skipReference=value) + + def getNumPairs(self): + return self.getOrDefault(self.numPairs) + + def setNumPairs(self, value): + return self._set(numPairs=value) + + +class ChiSquareTransformer(AbstractTransformer): + studyId = Param(Params._dummy(), "studyId", "", typeConverter=TypeConverters.toString) + phenotype = Param(Params._dummy(), "phenotype", "", typeConverter=TypeConverters.toString) + + @keyword_only + def __init__(self, studyId=None, phenotype=None): + super(ChiSquareTransformer, self).__init__() + self._java_obj = self._new_java_obj("org.opencb.oskar.spark.variant.analysis.ChiSquareTransformer", self.uid) + self.setParams(**self._input_kwargs) + + def getStudyId(self): + return self.getOrDefault(self.studyId) + + def setStudyId(self, value): + return self._set(studyId=value) + + def getPhenotype(self): + return self.getOrDefault(self.phenotype) + + def setPhenotype(self, value): + return self._set(phenotype=value) + + +class CompoundHeterozigoteTransformer(AbstractTransformer): + father = Param(Params._dummy(), "father", "", typeConverter=TypeConverters.toString) + mother = Param(Params._dummy(), "mother", "", typeConverter=TypeConverters.toString) + child = Param(Params._dummy(), "child", "", typeConverter=TypeConverters.toString) + studyId = Param(Params._dummy(), "studyId", "", typeConverter=TypeConverters.toString) + missingGenotypeAsReference = Param(Params._dummy(), "missingGenotypeAsReference", "", typeConverter=TypeConverters.toBoolean) + + @keyword_only + def __init__(self, father=None, mother=None, child=None, studyId=None, missingGenotypeAsReference=None): + super(CompoundHeterozigoteTransformer, self).__init__() + self._java_obj = self._new_java_obj("org.opencb.oskar.spark.variant.analysis.CompoundHeterozigoteTransformer", self.uid) + self.setParams(**self._input_kwargs) + + def getFather(self): + return self.getOrDefault(self.father) + + def setFather(self, value): + return self._set(father=value) + + def getMother(self): + return self.getOrDefault(self.mother) + + def setMother(self, value): + return self._set(mother=value) + + def getChild(self): + return self.getOrDefault(self.child) + + def setChild(self, value): + return self._set(child=value) + + def getStudyId(self): + return self.getOrDefault(self.studyId) + + def setStudyId(self, value): + return self._set(studyId=value) + + def getMissingGenotypeAsReference(self): + return self.getOrDefault(self.missingGenotypeAsReference) + + def setMissingGenotypeAsReference(self, value): + return self._set(missingGenotypeAsReference=value) + + +class FacetTransformer(AbstractTransformer): + facet = Param(Params._dummy(), "facet", "", typeConverter=TypeConverters.toString) + + @keyword_only + def __init__(self, facet=None): + super(FacetTransformer, self).__init__() + self._java_obj = self._new_java_obj("org.opencb.oskar.spark.variant.analysis.FacetTransformer", self.uid) + self.setParams(**self._input_kwargs) + + def getFacet(self): + return self.getOrDefault(self.facet) + + def setFacet(self, value): + return self._set(facet=value) + + +class FisherTransformer(AbstractTransformer): + studyId = Param(Params._dummy(), "studyId", "", typeConverter=TypeConverters.toString) + phenotype = Param(Params._dummy(), "phenotype", "", typeConverter=TypeConverters.toString) + + @keyword_only + def __init__(self, studyId=None, phenotype=None): + super(FisherTransformer, self).__init__() + self._java_obj = self._new_java_obj("org.opencb.oskar.spark.variant.analysis.FisherTransformer", self.uid) + self.setParams(**self._input_kwargs) + + def getStudyId(self): + return self.getOrDefault(self.studyId) + + def setStudyId(self, value): + return self._set(studyId=value) + + def getPhenotype(self): + return self.getOrDefault(self.phenotype) + + def setPhenotype(self, value): + return self._set(phenotype=value) + + +class ImputeSexTransformer(AbstractTransformer): + lowerThreshold = Param(Params._dummy(), "lowerThreshold", "", typeConverter=TypeConverters.toFloat) + upperThreshold = Param(Params._dummy(), "upperThreshold", "", typeConverter=TypeConverters.toFloat) + chromosomeX = Param(Params._dummy(), "chromosomeX", "", typeConverter=TypeConverters.toString) + includePseudoautosomalRegions = Param(Params._dummy(), "includePseudoautosomalRegions", "", typeConverter=TypeConverters.toBoolean) + par1chrX = Param(Params._dummy(), "par1chrX", "", typeConverter=TypeConverters.toString) + par2chrX = Param(Params._dummy(), "par2chrX", "", typeConverter=TypeConverters.toString) + + @keyword_only + def __init__(self, lowerThreshold=None, upperThreshold=None, chromosomeX=None, includePseudoautosomalRegions=None, par1chrX=None, + par2chrX=None): + super(ImputeSexTransformer, self).__init__() + self._java_obj = self._new_java_obj("org.opencb.oskar.spark.variant.analysis.ImputeSexTransformer", self.uid) + self.setParams(**self._input_kwargs) + + def getLowerThreshold(self): + return self.getOrDefault(self.lowerThreshold) + + def setLowerThreshold(self, value): + return self._set(lowerThreshold=value) + + def getUpperThreshold(self): + return self.getOrDefault(self.upperThreshold) + + def setUpperThreshold(self, value): + return self._set(upperThreshold=value) + + def getChromosomeX(self): + return self.getOrDefault(self.chromosomeX) + + def setChromosomeX(self, value): + return self._set(chromosomeX=value) + + def getIncludePseudoautosomalRegions(self): + return self.getOrDefault(self.includePseudoautosomalRegions) + + def setIncludePseudoautosomalRegions(self, value): + return self._set(includePseudoautosomalRegions=value) + + def getPar1chrX(self): + return self.getOrDefault(self.par1chrX) + + def setPar1chrX(self, value): + return self._set(par1chrX=value) + + def getPar2chrX(self): + return self.getOrDefault(self.par2chrX) + + def setPar2chrX(self, value): + return self._set(par2chrX=value) + + +class InbreedingCoefficientTransformer(AbstractTransformer): + missingGenotypesAsHomRef = Param(Params._dummy(), "missingGenotypesAsHomRef", "Treat missing genotypes as HomRef genotypes", + typeConverter=TypeConverters.toBoolean) + includeMultiAllelicGenotypes = Param(Params._dummy(), "includeMultiAllelicGenotypes", "Include multi-allelic variants in the calculation", + typeConverter=TypeConverters.toBoolean) + mafThreshold = Param(Params._dummy(), "mafThreshold", "Include multi-allelic variants in the calculation", + typeConverter=TypeConverters.toFloat) + + @keyword_only + def __init__(self, missingGenotypesAsHomRef=None, includeMultiAllelicGenotypes=None, mafThreshold=None): + super(InbreedingCoefficientTransformer, self).__init__() + self._java_obj = self._new_java_obj("org.opencb.oskar.spark.variant.analysis.InbreedingCoefficientTransformer", self.uid) + self.setParams(**self._input_kwargs) + + def getMissingGenotypesAsHomRef(self): + return self.getOrDefault(self.missingGenotypesAsHomRef) + + def setMissingGenotypesAsHomRef(self, value): + return self._set(missingGenotypesAsHomRef=value) + + def getIncludeMultiAllelicGenotypes(self): + return self.getOrDefault(self.includeMultiAllelicGenotypes) + + def setIncludeMultiAllelicGenotypes(self, value): + return self._set(includeMultiAllelicGenotypes=value) + + def getMafThreshold(self): + return self.getOrDefault(self.mafThreshold) + + def setMafThreshold(self, value): + return self._set(mafThreshold=value) + + +class MendelianErrorTransformer(AbstractTransformer): + studyId = Param(Params._dummy(), "studyId", "", typeConverter=TypeConverters.toString) + father = Param(Params._dummy(), "father", "", typeConverter=TypeConverters.toString) + mother = Param(Params._dummy(), "mother", "", typeConverter=TypeConverters.toString) + child = Param(Params._dummy(), "child", "", typeConverter=TypeConverters.toString) + + @keyword_only + def __init__(self, studyId=None, father=None, mother=None, child=None): + super(MendelianErrorTransformer, self).__init__() + self._java_obj = self._new_java_obj("org.opencb.oskar.spark.variant.analysis.MendelianErrorTransformer", self.uid) + self.setParams(**self._input_kwargs) + + def getStudyId(self): + return self.getOrDefault(self.studyId) + + def setStudyId(self, value): + return self._set(studyId=value) + + def getFather(self): + return self.getOrDefault(self.father) + + def setFather(self, value): + return self._set(father=value) + + def getMother(self): + return self.getOrDefault(self.mother) + + def setMother(self, value): + return self._set(mother=value) + + def getChild(self): + return self.getOrDefault(self.child) + + def setChild(self, value): + return self._set(child=value) + + +class ModeOfInheritanceTransformer(AbstractTransformer): + family = Param(Params._dummy(), "family", "Select family to apply the filter", typeConverter=TypeConverters.toString) + modeOfInheritance = Param(Params._dummy(), "modeOfInheritance", "Filter by mode of inheritance from a given family. Accepted values: " + + "monoallelic (dominant), biallelic (recessive), xLinkedMonoallelic, xLinkedBiallelic, yLinked", + typeConverter=TypeConverters.toString) + studyId = Param(Params._dummy(), "studyId", "", typeConverter=TypeConverters.toString) + phenotype = Param(Params._dummy(), "phenotype", "", typeConverter=TypeConverters.toString) + incompletePenetrance = Param(Params._dummy(), "incompletePenetrance", "Allow variants with an incomplete penetrance mode of inheritance", + typeConverter=TypeConverters.toBoolean) + missingAsReference = Param(Params._dummy(), "missingAsReference", "Select family to apply the filter", + typeConverter=TypeConverters.toBoolean) + + @keyword_only + def __init__(self, family=None, modeOfInheritance=None, studyId=None, phenotype=None, incompletePenetrance=None, missingAsReference=None): + super(ModeOfInheritanceTransformer, self).__init__() + self._java_obj = self._new_java_obj("org.opencb.oskar.spark.variant.analysis.ModeOfInheritanceTransformer", self.uid) + self.setParams(**self._input_kwargs) + + def getFamily(self): + return self.getOrDefault(self.family) + + def setFamily(self, value): + return self._set(family=value) + + def getModeOfInheritance(self): + return self.getOrDefault(self.modeOfInheritance) + + def setModeOfInheritance(self, value): + return self._set(modeOfInheritance=value) + + def getStudyId(self): + return self.getOrDefault(self.studyId) + + def setStudyId(self, value): + return self._set(studyId=value) + + def getPhenotype(self): + return self.getOrDefault(self.phenotype) + + def setPhenotype(self, value): + return self._set(phenotype=value) + + def getIncompletePenetrance(self): + return self.getOrDefault(self.incompletePenetrance) + + def setIncompletePenetrance(self, value): + return self._set(incompletePenetrance=value) + + def getMissingAsReference(self): + return self.getOrDefault(self.missingAsReference) + + def setMissingAsReference(self, value): + return self._set(missingAsReference=value) + + +class TdtTransformer(AbstractTransformer): + studyId = Param(Params._dummy(), "studyId", "", typeConverter=TypeConverters.toString) + phenotype = Param(Params._dummy(), "phenotype", "", typeConverter=TypeConverters.toString) + + @keyword_only + def __init__(self, studyId=None, phenotype=None): + super(TdtTransformer, self).__init__() + self._java_obj = self._new_java_obj("org.opencb.oskar.spark.variant.analysis.TdtTransformer", self.uid) + self.setParams(**self._input_kwargs) + + def getStudyId(self): + return self.getOrDefault(self.studyId) + + def setStudyId(self, value): + return self._set(studyId=value) + + def getPhenotype(self): + return self.getOrDefault(self.phenotype) + + def setPhenotype(self, value): + return self._set(phenotype=value) diff --git a/oskar-spark/src/main/python/notebooks/notebooks/pyoskar/core.py b/oskar-spark/src/main/python/notebooks/notebooks/pyoskar/core.py new file mode 100644 index 0000000..09d12d3 --- /dev/null +++ b/oskar-spark/src/main/python/notebooks/notebooks/pyoskar/core.py @@ -0,0 +1,369 @@ +import json + +from pyspark.ml.wrapper import JavaWrapper +from pyspark.sql.dataframe import DataFrame + +from pyoskar.analysis import * + +__all__ = ['Oskar'] + + +class Oskar(JavaWrapper): + + def __init__(self, spark): + super(Oskar, self).__init__() + self._java_obj = self._new_java_obj("org.opencb.oskar.spark.variant.Oskar", spark._jsparkSession) + self.spark = spark + self.metadata = VariantMetadataManager() + self.python_utils = PythonUtils() + + def load(self, file_path): + """ + + :param file_path: + :return: + """ + df = self._call_java("load", file_path) + return df + + def chiSquare(self, df, studyId, phenotype): + """ + + :param df: + :param studyId: + :param phenotype: + :return: + """ + return ChiSquareTransformer(studyId=studyId, phenotype=phenotype).transform(df) + + def compoundHeterozygote(self, df, father, mother, child, studyId=None, missingGenotypeAsReference=None): + """ + + :param df: + :param father: + :param mother: + :param child: + :param studyId: + :param missingGenotypeAsReference: + :return: + """ + return CompoundHeterozigoteTransformer(father=father, mother=mother, child=child, studyId=studyId, + missingGenotypeAsReference=missingGenotypeAsReference).transform(df) + + def facet(self, df, facet): + """ + + :param df: + :param facet: + :return: + """ + return FacetTransformer(facet=facet).transform(df) + + def fisher(self, df, studyId, phenotype): + """ + + :param df: + :param studyId: + :param phenotype: + :return: + """ + return FisherTransformer(studyId=studyId, phenotype=phenotype).transform(df) + + def hardyWeinberg(self, df, studyId=None): + """ + + :type df: DataFrame + :param df: Original dataframe + + :type studyId: str + :param studyId: + + :rtype: DataFrame + :return: Transformed dataframe + """ + return HardyWeinbergTransformer(studyId=studyId).transform(df) + + def histogram(self, df, inputCol, step=None): + """ + + :param df: + :param inputCol: + :param step: + :return: + """ + return HistogramTransformer(inputCol=inputCol, step=step).transform(df) + + def ibs(self, df, samples=None, skipMultiAllelic=None, skipReference=None, numPairs=None): + """ + Calculates the Identity By State. + + :type df: DataFrame + :param df: Original dataframe + + :type samples: list + :param samples: List of samples to use for calculating the IBS + + :type skipMultiAllelic: bool + :param skipMultiAllelic: Skip variants where any of the samples has a secondary alternate + + :type skipReference: bool + :param skipReference: Skip variants where both samples of the pair are HOM_REF + + :type numPairs: int + :param numPairs: + + :rtype: DataFrame + :return: Transformed dataframe + """ + return IBSTransformer(samples=samples, skipReference=skipReference, skipMultiAllelic=skipMultiAllelic, + numPairs=numPairs).transform(df) + + def imputeSex(self, df, lowerThreshold=None, upperThreshold=None, chromosomeX=None, includePseudoautosomalRegions=None, par1chrX=None, par2chrX=None): + """ + Estimate sex of the individuals calculating the inbreeding coefficients F on the chromosome X. + + :type df: DataFrame + :param df: Original dataframe + + :type lowerThreshold: float + :param lowerThreshold: + + :type upperThreshold: float + :param upperThreshold: + + :type chromosomeX: str + :param chromosomeX: + + :type includePseudoautosomalRegions: bool + :param includePseudoautosomalRegions: + + :type par1chrX: str + :param par1chrX: + + :type par2chrX: str + :param par2chrX: + + :rtype: DataFrame + :return: Transformed dataframe + """ + return ImputeSexTransformer(lowerThreshold=lowerThreshold, upperThreshold=upperThreshold, chromosomeX=chromosomeX, + includePseudoautosomalRegions=includePseudoautosomalRegions, par1chrX=par1chrX, par2chrX=par2chrX).transform(df) + + def inbreedingCoefficient(self, df, missingGenotypesAsHomRef=None, includeMultiAllelicGenotypes=None, mafThreshold=None): + """ + Count observed and expected autosomal homozygous genotype for each sample, and report method-of-moments F coefficient estimates. (Ritland, Kermit. 1996) + Values: + - Total genotypes Count : Total count of genotypes for sample + - Observed homozygotes : Count of observed homozygote genotypes for each sample, in each variant + - Expected homozygotes : Count of expected homozygote genotypes for each sample, in each variant. + Calculated with the MAF of the cohort ALL. 1.0-(2.0*maf*(1.0-maf)) + - F : Inbreeding coefficient. Calculated as: + ([observed hom. count] - [expected count]) / ([total genotypes count] - [expected count]) + Unless otherwise specified, the genotype counts will exclude the missing and multi-allelic genotypes. + + :type df: DataFrame + :param df: Original dataframe + + :type missingGenotypesAsHomRef: bool + :param missingGenotypesAsHomRef: Treat missing genotypes as HomRef genotypes + + :type includeMultiAllelicGenotypes: bool + :param includeMultiAllelicGenotypes: Include multi-allelic variants in the calculation + + :type mafThreshold: float + :param mafThreshold: Include multi-allelic variants in the calculation + + :rtype: DataFrame + :return: Transformed dataframe + """ + return InbreedingCoefficientTransformer(missingGenotypesAsHomRef=missingGenotypesAsHomRef, + includeMultiAllelicGenotypes=includeMultiAllelicGenotypes, mafThreshold=mafThreshold).transform(df) + + def mendel(self, df, father, mother, child, studyId=None): + """ + Using Plink Mendel error codes + https://www.cog-genomics.org/plink2/basic_stats#mendel + + :type df: DataFrame + :param df: Original dataframe + + :type father: str + :param father: + + :type mother: str + :param mother: + + :type child: str + :param child: + + :type studyId: str + :param studyId: + + + :rtype: DataFrame + :return: Transformed dataframe + """ + return MendelianErrorTransformer(father=father, mother=mother, child=child, studyId=studyId).transform(df) + + # def de_novo(self, df): + # def ld_matrix(self, df): + # def impute_sex(self, df): + # def hwe_normalized_pca(self, df): + # def concordance(self, df): + # def cancer_signature(self, df): #https://cancer.sanger.ac.uk/cosmic/signatures + + def modeOfInheritance(self, df, family, modeOfInheritance, phenotype, studyId=None, incompletePenetrance=None, missingAsReference=None): + """ + Filter variants that match a given Mode Of Inheritance pattern. + + Accepted patterns: + - monoallelic, also known as dominant + - biallelic, also known as recessive + - xLinked + - yLinked + + :type df: DataFrame + :param df: Original dataframe + + :type family: str + :param family: Select family to apply the filter + + :type modeOfInheritance: str + :param modeOfInheritance: Filter by mode of inheritance from a given family. Accepted values: monoallelic (dominant), + biallelic (recessive), xLinkedMonoallelic, xLinkedBiallelic, yLinked" + + :type phenotype: str + :param phenotype: + + :type studyId: str + :param studyId: + + :type incompletePenetrance: bool + :param incompletePenetrance: Allow variants with an incomplete penetrance mode of inheritance + + :type missingAsReference: bool + :param missingAsReference: + + :rtype: DataFrame + :return: Transformed dataframe + """ + return ModeOfInheritanceTransformer(family=family, modeOfInheritance=modeOfInheritance, phenotype=phenotype, studyId=studyId, + incompletePenetrance=incompletePenetrance, missingAsReference=missingAsReference).transform(df) + + def tdt(self, df, studyId, phenotype): + """ + + :type df: DataFrame + """ + return TdtTransformer(studyId=studyId, phenotype=phenotype).transform(df) + + def stats(self, df, studyId=None, cohort=None, samples=None, missingAsReference=None): + """ + + :type df: DataFrame + :param df: Original dataframe + + :type studyId: str + :param studyId: + + :type cohort: str + :param cohort: Name of the cohort to calculate stats from. By default, 'ALL' + + :type samples: list + :param samples: Samples belonging to the cohort. If empty, will try to read from metadata. If missing, will use all samples + from the dataset + + :type missingAsReference: bool + :param missingAsReference: Count missing alleles as reference alleles + + :rtype: DataFrame + :return: Transformed dataframe + """ + return VariantStatsTransformer(studyId=studyId, cohort=cohort, samples=samples, missingAsReference=missingAsReference).transform(df) + + def globalStats(self, df, studyId=None, fileId=None): + """ + + :type df: DataFrame + """ + return VariantSetStatsTransformer(studyId=studyId, fileId=fileId).transform(df) + + +class VariantMetadataManager(JavaWrapper): + + def __init__(self): + super(VariantMetadataManager, self).__init__() + self._java_obj = self._new_java_obj("org.opencb.oskar.spark.variant.VariantMetadataManager") + self.python_utils = PythonUtils() + + def getMetadataPath(self, path): + return path + ".meta.json.gz" + + def readMetadata(self, meta_path): + """ + Writes the VariantMetadata into the schema metadata from the given dataframe. + + :type meta_path: str + :param meta_path: Path to the metadata file + + :rtype: dict + :return: An instance of VariantMetadata + """ + java_vm = self._call_java("readMetadata", meta_path) + return self.python_utils.toPythonDict(java_vm) + + def setVariantMetadata(self, df, variant_metadata): + """ + Writes the VariantMetadata into the schema metadata from the given dataframe. + + :type df: DataFrame + :param df: DataFrame to modify + + :type variant_metadata: VariantMetadata + :param variant_metadata: VariantMetadata to set + + :rtype: DataFrame + :return: Modified DataFrame + """ + java_object = self.python_utils.toJavaObject(variant_metadata, + "org.opencb.biodata.models.variant.metadata.VariantMetadata") + return self._call_java("setVariantMetadata", df, java_object) + + def variantMetadata(self, df): + java_vm = self._call_java("variantMetadata", df) + return self.python_utils.toPythonDict(java_vm) + + def samples(self, df, studyId=None): + if studyId is None: + return self.python_utils.toPythonDict(self._call_java("samples", df)) + else: + return self.python_utils.toPythonDict(self._call_java("samples", df, studyId)) + + def pedigrees(self, df, studyId=None): + if studyId is None: + java_vm = self._call_java("pedigrees", df) + return self.python_utils.toPythonDict(java_vm) + else: + java_vm = self._call_java("pedigrees", df, studyId) + return self.python_utils.toPythonDict(java_vm) + + +class OskarException(Exception): + + def __init__(self, *args, **kwargs): + super(OskarException, self).__init__(*args, **kwargs) + + +class PythonUtils(JavaWrapper): + + def __init__(self): + super(PythonUtils, self).__init__() + self._java_obj = self._new_java_obj("org.opencb.oskar.spark.commons.PythonUtils") + + def toJavaObject(self, python_dict, class_name): + js = json.dumps(python_dict, ensure_ascii=False) + return self._call_java("toJavaObject", js, class_name) + + def toPythonDict(self, java_object): + js = self._call_java("toJsonString", java_object) + return json.loads(js) diff --git a/oskar-spark/src/main/python/notebooks/notebooks/pyoskar/sql.py b/oskar-spark/src/main/python/notebooks/notebooks/pyoskar/sql.py new file mode 100644 index 0000000..ab8016c --- /dev/null +++ b/oskar-spark/src/main/python/notebooks/notebooks/pyoskar/sql.py @@ -0,0 +1,175 @@ + +import sys + +from pyspark.ml.util import _jvm + +if sys.version > '3': + basestring = str + +from pyspark.ml.wrapper import JavaWrapper +from pyspark.sql.column import Column, _to_java_column + + +class VariantUdfManager(JavaWrapper): + __java_class = None + + @classmethod + def _java_class(cls): + if cls.__java_class is None: + cls.__java_class = _jvm().org.opencb.oskar.spark.variant.udf.VariantUdfManager + return cls.__java_class + + def __init__(self): + super(VariantUdfManager, self).__init__() + self._java_obj = self._new_java_obj("org.opencb.oskar.spark.variant.udf.VariantUdfManager") + + def loadVariantUdfs(self, spark): + self._call_java("loadVariantUdfs", spark._jsparkSession) + + +def revcomp(allele): + """ + Reverse and complementary. + + :param allele: + :return: + """ + jc = VariantUdfManager._java_class().revcomp(_to_java_column(allele)) + return Column(jc) + + +def include(column, include): + jc = VariantUdfManager._java_class().include(_to_java_column(column), include) + return Column(jc) + + +def include_studies(column, include): + jc = VariantUdfManager._java_class().include_studies(_to_java_column(column), include) + return Column(jc) + + +def study(studies, studyId): + jc = VariantUdfManager._java_class().study(_to_java_column(studies), studyId) + return Column(jc) + + +def file(studies, fileId): + jc = VariantUdfManager._java_class().file(_to_java_column(studies), fileId) + return Column(jc) + + +def file_attribute(studies, fileId, info): + jc = VariantUdfManager._java_class().file_attribute(_to_java_column(studies), fileId, info) + return Column(jc) + + +def file_filter(studies, fileId): + jc = VariantUdfManager._java_class().file_filter(_to_java_column(studies), fileId) + return Column(jc) + + +def file_qual(studies, fileId): + jc = VariantUdfManager._java_class().file_qual(_to_java_column(studies), fileId) + return Column(jc) + + +def genotype(studies, sample): + jc = VariantUdfManager._java_class().genotype(_to_java_column(studies), sample) + return Column(jc) + + +def sample_data(studies, sample): + jc = VariantUdfManager._java_class().sample_data(_to_java_column(studies), sample) + return Column(jc) + + +def sample_data_field(studies, sample, formatField): + jc = VariantUdfManager._java_class().sample_data_field(_to_java_column(studies), sample, formatField) + return Column(jc) + + +def genes(annotation): + jc = VariantUdfManager._java_class().genes(_to_java_column(annotation)) + return Column(jc) + + +def consequence_types(annotation): + jc = VariantUdfManager._java_class().consequence_types(_to_java_column(annotation)) + return Column(jc) + + +def consequence_types_by_gene(annotation, gene): + jc = VariantUdfManager._java_class().consequence_types_by_gene(_to_java_column(annotation), gene) + return Column(jc) + + +def protein_substitution(annotation, score): + """ + Returns an array with the MIN and the MAX value of the given ProteinSubstitutionScore. Empty array if not found. + + :type annotation: str + :param annotation: Annotation field + + :type score: str + :param score: + + :rtype: + :return: + """ + jc = VariantUdfManager._java_class().protein_substitution(_to_java_column(annotation), score) + return Column(jc) + + +def population_frequency(annotation, study, population): + jc = VariantUdfManager._java_class().population_frequency(_to_java_column(annotation), study, population) + return Column(jc) + + +def population_frequency_as_map(annotation): + jc = VariantUdfManager._java_class().population_frequency_as_map(_to_java_column(annotation)) + return Column(jc) + + +def biotypes(annotation): + jc = VariantUdfManager._java_class().biotypes(_to_java_column(annotation)) + return Column(jc) + + +def functional(annotation, source): + """ + Read the value for the Functional Score. Null if none. Main functional scores are: cadd_scaled and cadd_raw. + + :type annotation: str + :param annotation: Annotation field + + :type source: str + :param source: Study source + + :rtype: + :return: Functional score + """ + + jc = VariantUdfManager._java_class().functional(_to_java_column(annotation), source) + return Column(jc) + + +def ensembl_genes(annotation): + jc = VariantUdfManager._java_class().ensembl_genes(_to_java_column(annotation)) + return Column(jc) + + +def conservation(annotation, source): + """ + Read the value for the Conservation Score. Null if none. Main conservation scores are: gerp, phastCons and phylop + + :type annotation: str + :param annotation: Annotation field + + :type source: str + :param source: Study source + + :rtype: + :return: Conservation score + """ + jc = VariantUdfManager._java_class().conservation(_to_java_column(annotation), source) + return Column(jc) diff --git a/oskar-spark/src/main/python/notebooks/stats.ipynb b/oskar-spark/src/main/python/notebooks/notebooks/stats.ipynb similarity index 100% rename from oskar-spark/src/main/python/notebooks/stats.ipynb rename to oskar-spark/src/main/python/notebooks/notebooks/stats.ipynb diff --git a/oskar-spark/src/main/python/notebooks/variant_filtering.ipynb b/oskar-spark/src/main/python/notebooks/notebooks/variant_filtering.ipynb similarity index 99% rename from oskar-spark/src/main/python/notebooks/variant_filtering.ipynb rename to oskar-spark/src/main/python/notebooks/notebooks/variant_filtering.ipynb index 8de1afc..fda498f 100644 --- a/oskar-spark/src/main/python/notebooks/variant_filtering.ipynb +++ b/oskar-spark/src/main/python/notebooks/notebooks/variant_filtering.ipynb @@ -48,7 +48,7 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 2, "metadata": {}, "outputs": [ { diff --git a/oskar-spark/src/main/python/notebooks/notebooks/variant_filtering_advanced.ipynb b/oskar-spark/src/main/python/notebooks/notebooks/variant_filtering_advanced.ipynb new file mode 100644 index 0000000..01e7169 --- /dev/null +++ b/oskar-spark/src/main/python/notebooks/notebooks/variant_filtering_advanced.ipynb @@ -0,0 +1,156 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# **Advanced variant filtering**" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "from pyoskar.core import Oskar\n", + "from pyoskar.sql import *\n", + "from pyoskar.analysis import *\n", + "from pyspark.sql.functions import col, udf, count, explode, concat, when, expr\n", + "from pyspark.sql.functions import *\n", + "\n", + "oskar = Oskar(spark)\n", + "df = oskar.load(\"/home/roldanx/appl/oskar/oskar-spark/src/test/resources/platinum_chr22.small.parquet\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Hardy Weinberg" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "+---------------+--------------------+\n", + "| id| HWE|\n", + "+---------------+--------------------+\n", + "|22:16054454:C:T| 1.0|\n", + "|22:16065809:T:C| 1.0|\n", + "|22:16077310:T:A| 0.9254727474972191|\n", + "|22:16080499:A:G| 1.0|\n", + "|22:16084621:T:C| 1.0|\n", + "|22:16091610:G:T| 1.0|\n", + "|22:16096040:G:A| 0.4746014089729329|\n", + "|22:16099957:C:T|0.016007636455477054|\n", + "|22:16100462:A:G|0.001011008618240...|\n", + "|22:16105660:G:A| 0.3037449017426771|\n", + "+---------------+--------------------+\n", + "only showing top 10 rows\n", + "\n" + ] + } + ], + "source": [ + "oskar.hardyWeinberg(df,\"hgvauser@platinum:illumina_platinum\").select(\"id\", \"HWE\").show(10)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Inbreeding coefficient" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "+--------+-------------------+-----------+------------------+--------------+\n", + "|SampleId| F|ObservedHom| ExpectedHom|GenotypesCount|\n", + "+--------+-------------------+-----------+------------------+--------------+\n", + "| NA12877|-1.0857581722788996| 70|233.97577702999115| 385|\n", + "| NA12878|-1.1024114888695444| 69|244.65916746854782| 404|\n", + "| NA12879|-1.1890914293957586| 69| 247.7093403339386| 398|\n", + "| NA12880|-1.1013660394101679| 71|248.15224742889404| 409|\n", + "| NA12881|-1.1560267972581504| 65| 252.6643579006195| 415|\n", + "| NA12882|-1.0112382612189488| 76| 224.8269881606102| 372|\n", + "| NA12883|-1.0602574055431329| 67|229.62110525369644| 383|\n", + "| NA12884|-1.0340014363992485| 74|224.47404664754868| 370|\n", + "| NA12885|-1.1105665251221366| 78| 254.8010356426239| 414|\n", + "| NA12886| -1.067867784696387| 72|244.48096668720245| 406|\n", + "+--------+-------------------+-----------+------------------+--------------+\n", + "only showing top 10 rows\n", + "\n" + ] + } + ], + "source": [ + "df2 = oskar.stats(df, studyId=\"hgvauser@platinum:illumina_platinum\", missingAsReference=True)\n", + "oskar.inbreedingCoefficient(df2).show(10)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Mendelian error" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "+------------------+--------------+\n", + "| id|mendelianError|\n", + "+------------------+--------------+\n", + "|22:19748211:CCCC:-| 1|\n", + "+------------------+--------------+\n", + "\n" + ] + } + ], + "source": [ + "oskar.mendel(df, \"NA12877\", \"NA12878\", \"NA12879\").select(\"id\", \"mendelianError\").filter(col(\"mendelianError\") != \"0\").show()" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.7" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/oskar-spark/src/main/python/notebooks/variant_filtering_advanced.ipynb b/oskar-spark/src/main/python/notebooks/variant_filtering_advanced.ipynb deleted file mode 100644 index cf6719d..0000000 --- a/oskar-spark/src/main/python/notebooks/variant_filtering_advanced.ipynb +++ /dev/null @@ -1,123 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# **Advanced variant filtering**" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [ - { - "ename": "TypeError", - "evalue": "'JavaPackage' object is not callable", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mpyspark\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msql\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfunctions\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 6\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 7\u001b[0;31m \u001b[0moskar\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mOskar\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mspark\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 8\u001b[0m \u001b[0mdf\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0moskar\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mload\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"/home/roldanx/appl/oskar/oskar-spark/src/test/resources/platinum_chr22.small.parquet\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/appl/oskar/oskar-spark/src/main/python/pyoskar/core.py\u001b[0m in \u001b[0;36m__init__\u001b[0;34m(self, spark)\u001b[0m\n\u001b[1;32m 13\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m__init__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mspark\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 14\u001b[0m \u001b[0msuper\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mOskar\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__init__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 15\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_java_obj\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_new_java_obj\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"org.opencb.oskar.spark.variant.Oskar\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mspark\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_jsparkSession\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 16\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mspark\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mspark\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 17\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmetadata\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mVariantMetadataManager\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/soft/spark-2.4.0-bin-hadoop2.7/python/pyspark/ml/wrapper.py\u001b[0m in \u001b[0;36m_new_java_obj\u001b[0;34m(java_class, *args)\u001b[0m\n\u001b[1;32m 65\u001b[0m \u001b[0mjava_obj\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mgetattr\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mjava_obj\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mname\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 66\u001b[0m \u001b[0mjava_args\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0m_py2java\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0msc\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0marg\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0marg\u001b[0m \u001b[0;32min\u001b[0m \u001b[0margs\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 67\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mjava_obj\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0mjava_args\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 68\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 69\u001b[0m \u001b[0;34m@\u001b[0m\u001b[0mstaticmethod\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;31mTypeError\u001b[0m: 'JavaPackage' object is not callable" - ] - } - ], - "source": [ - "from pyoskar.core import Oskar\n", - "from pyoskar.sql import *\n", - "from pyoskar.analysis import *\n", - "from pyspark.sql.functions import col, udf, count, explode, concat, when, expr\n", - "from pyspark.sql.functions import *\n", - "\n", - "oskar = Oskar(spark)\n", - "df = oskar.load(\"/home/roldanx/appl/oskar/oskar-spark/src/test/resources/platinum_chr22.small.parquet\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Hardy Weinberg" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [ - { - "ename": "NameError", - "evalue": "name 'oskar' is not defined", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0moskar\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mhardyWeinberg\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdf\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\"hgvauser@platinum:illumina_platinum\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mselect\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"id\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m\"HWE\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mshow\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m10\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", - "\u001b[0;31mNameError\u001b[0m: name 'oskar' is not defined" - ] - } - ], - "source": [ - "oskar.hardyWeinberg(df,\"hgvauser@platinum:illumina_platinum\").select(\"id\", \"HWE\").show(10)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Inbreeding coefficient" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "df2 = oskar.stats(df, studyId=\"hgvauser@platinum:illumina_platinum\", missingAsReference=True)\n", - "oskar.inbreedingCoefficient(df2).show(10)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Mendelian error" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "oskar.mendel(df, \"NA12877\", \"NA12878\", \"NA12879\").select(\"id\", \"mendelianError\").filter(col(\"mendelianError\") != \"0\").show()" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.6.7" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/pom.xml b/pom.xml index 68378f8..0364bad 100644 --- a/pom.xml +++ b/pom.xml @@ -19,7 +19,7 @@ 0.1.0 4.6.1 - 1.4.3-SNAPSHOT + 1.5.0-SNAPSHOT 3.8.0-SNAPSHOT 2.3.2 2.7.3